Merge branch 'master' into urcu/ht
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sat, 2 Jul 2011 15:24:18 +0000 (11:24 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sat, 2 Jul 2011 15:24:18 +0000 (11:24 -0400)
Conflicts:
Makefile.inc
tests/Makefile.inc
urcu-defer.h

847 files changed:
.gitignore
API.txt [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
Makefile [deleted file]
Makefile.am [new file with mode: 0644]
Makefile.build.inc [deleted file]
Makefile.inc [deleted file]
Makefile32 [deleted file]
Makefile64 [deleted file]
README
arch_atomic_ppc.h [deleted file]
arch_atomic_s390.h [deleted file]
arch_atomic_x86.h [deleted file]
arch_ppc.h [deleted file]
arch_s390.h [deleted file]
arch_x86.h [deleted file]
bootstrap [new file with mode: 0755]
compat_arch_x86.c [new file with mode: 0644]
compat_futex.c [new file with mode: 0644]
compiler.h [deleted file]
configure.ac [new file with mode: 0644]
formal-model/.gitignore [deleted file]
formal-model/futex-wakeup/DEFINES [deleted file]
formal-model/futex-wakeup/Makefile [deleted file]
formal-model/futex-wakeup/futex.ltl [deleted file]
formal-model/futex-wakeup/futex.spin [deleted file]
formal-model/futex-wakeup/futex_progress_late_dec.define [deleted file]
formal-model/futex-wakeup/futex_progress_no_wake.define [deleted file]
formal-model/ooomem-double-update/DEFINES [deleted file]
formal-model/ooomem-double-update/Makefile [deleted file]
formal-model/ooomem-double-update/mem.sh [deleted file]
formal-model/ooomem-double-update/mem.spin [deleted file]
formal-model/ooomem-double-update/read_order.ltl [deleted file]
formal-model/ooomem-double-update/read_order_no_rmb.define [deleted file]
formal-model/ooomem-double-update/read_order_no_wmb.define [deleted file]
formal-model/ooomem-double-update/references.txt [deleted file]
formal-model/ooomem-no-sched/DEFINES [deleted file]
formal-model/ooomem-no-sched/Makefile [deleted file]
formal-model/ooomem-no-sched/mem.sh [deleted file]
formal-model/ooomem-no-sched/mem.spin [deleted file]
formal-model/ooomem-no-sched/read_order.ltl [deleted file]
formal-model/ooomem-no-sched/read_order_no_rmb.define [deleted file]
formal-model/ooomem-no-sched/read_order_no_wmb.define [deleted file]
formal-model/ooomem-no-sched/references.txt [deleted file]
formal-model/ooomem-two-writes/DEFINES [deleted file]
formal-model/ooomem-two-writes/Makefile [deleted file]
formal-model/ooomem-two-writes/mem.sh [deleted file]
formal-model/ooomem-two-writes/mem.spin [deleted file]
formal-model/ooomem-two-writes/read_order.ltl [deleted file]
formal-model/ooomem-two-writes/read_order.ltl.bkp [deleted file]
formal-model/ooomem-two-writes/read_order_no_rmb.define [deleted file]
formal-model/ooomem-two-writes/read_order_no_sync.define [deleted file]
formal-model/ooomem-two-writes/read_order_no_wmb.define [deleted file]
formal-model/ooomem-two-writes/references.txt [deleted file]
formal-model/spinlock/DEFINES [deleted file]
formal-model/spinlock/Makefile [deleted file]
formal-model/spinlock/lock_progress.ltl [deleted file]
formal-model/spinlock/mem-progress.spin [deleted file]
formal-model/spinlock/mem.sh [deleted file]
formal-model/spinlock/mem.spin [deleted file]
formal-model/spinlock/refcount.ltl [deleted file]
formal-model/spinlock/references.txt [deleted file]
formal-model/ticketlock/DEFINES [deleted file]
formal-model/ticketlock/Makefile [deleted file]
formal-model/ticketlock/config_4_bits_per_byte.define [deleted file]
formal-model/ticketlock/lock_progress.ltl [deleted file]
formal-model/ticketlock/mem-progress.spin [deleted file]
formal-model/ticketlock/mem.sh [deleted file]
formal-model/ticketlock/mem.spin [deleted file]
formal-model/ticketlock/refcount.ltl [deleted file]
formal-model/ticketlock/references.txt [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/.input.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/.input.spin [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/DEFINES [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/Makefile [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/references.txt [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu.sh [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu.spin [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free.ltl [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_nested.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_mb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_single_flip.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress.ltl [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_reader.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_reader.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/.input.spin [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/DEFINES [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/Makefile [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/asserts.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/asserts.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/references.txt [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu.sh [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu.spin [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.ltl [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_nested.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress.ltl [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/.input.spin [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/DEFINES [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/Makefile [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/asserts.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/asserts.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/references.txt [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu.sh [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu.spin [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free.ltl [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_nested.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.log [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_progress.ltl [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_reader.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_writer.define [deleted file]
formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/.input.spin [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/DEFINES [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/Makefile [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/asserts.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/asserts.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/references.txt [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu.sh [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu.spin [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.ltl [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_nested.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress.ltl [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.log [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/.input.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/.input.spin [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/.input.spin.trail [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/DEFINES [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/Makefile [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/references.txt [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu.sh [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu.spin [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free.ltl [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_nested.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_mb.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_single_flip.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress.ltl [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-intel-ipi/.input.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi/.input.spin [deleted file]
formal-model/urcu-controldataflow-intel-ipi/DEFINES [deleted file]
formal-model/urcu-controldataflow-intel-ipi/Makefile [deleted file]
formal-model/urcu-controldataflow-intel-ipi/references.txt [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu.sh [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu.spin [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free.ltl [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_nested.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_progress.ltl [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_progress_reader.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer.define [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer.log [deleted file]
formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/.input.spin [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/DEFINES [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/Makefile [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/asserts.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/asserts.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/references.txt [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu.sh [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu.spin [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.ltl [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_nested.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress.ltl [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.log [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu-controldataflow/DEFINES [deleted file]
formal-model/urcu-controldataflow/Makefile [deleted file]
formal-model/urcu-controldataflow/references.txt [deleted file]
formal-model/urcu-controldataflow/urcu.sh [deleted file]
formal-model/urcu-controldataflow/urcu.spin [deleted file]
formal-model/urcu-controldataflow/urcu_free.ltl [deleted file]
formal-model/urcu-controldataflow/urcu_free_nested.define [deleted file]
formal-model/urcu-controldataflow/urcu_free_no_mb.define [deleted file]
formal-model/urcu-controldataflow/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-controldataflow/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-controldataflow/urcu_free_single_flip.define [deleted file]
formal-model/urcu-controldataflow/urcu_progress.ltl [deleted file]
formal-model/urcu-controldataflow/urcu_progress_reader.define [deleted file]
formal-model/urcu-controldataflow/urcu_progress_writer.define [deleted file]
formal-model/urcu-controldataflow/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/DEFINES [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/Makefile [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/asserts.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/asserts.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/asserts.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/references.txt [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu.sh [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu.spin [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.ltl [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress.ltl [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/DEFINES [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/Makefile [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/asserts.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/asserts.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/asserts.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/references.txt [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/DEFINES [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/Makefile [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/references.txt [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/.input.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/.input.spin [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/DEFINES [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/Makefile [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/references.txt [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.sh [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin.bkp2 [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin.bkp5 [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.ltl [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress.ltl [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu.sh [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu.spin [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.ltl [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress.ltl [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.log [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/DEFINES [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/Makefile [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/references.txt [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu.sh [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu.spin [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.ltl [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.define [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.define [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.define [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.define [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.define [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress.ltl [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.define [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.define [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.define [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.log [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu-paulmck/.gitignore [deleted file]
formal-model/urcu-paulmck/urcu-paulmck.spin [deleted file]
formal-model/urcu-paulmck/urcu.sh [deleted file]
formal-model/urcu.sh [deleted file]
formal-model/urcu.spin [deleted file]
formal-model/urcu/DEFINES [deleted file]
formal-model/urcu/Makefile [deleted file]
formal-model/urcu/references.txt [deleted file]
formal-model/urcu/result-signal-over-reader/DEFINES [deleted file]
formal-model/urcu/result-signal-over-reader/Makefile [deleted file]
formal-model/urcu/result-signal-over-reader/asserts.log [deleted file]
formal-model/urcu/result-signal-over-reader/asserts.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/asserts.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-reader/urcu.sh [deleted file]
formal-model/urcu/result-signal-over-reader/urcu.spin [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free.log [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free.ltl [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.define [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.log [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.define [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.log [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.define [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.log [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.define [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.log [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress.ltl [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_reader.define [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_reader.log [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_writer.define [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_writer.log [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.define [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.log [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/DEFINES [deleted file]
formal-model/urcu/result-signal-over-writer/Makefile [deleted file]
formal-model/urcu/result-signal-over-writer/asserts.log [deleted file]
formal-model/urcu/result-signal-over-writer/asserts.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/asserts.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/result-signal-over-writer/DEFINES [deleted file]
formal-model/urcu/result-signal-over-writer/result-signal-over-writer/Makefile [deleted file]
formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.log [deleted file]
formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/result-signal-over-writer/references.txt [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/.input.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/.input.spin [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/DEFINES [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/Makefile [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/asserts.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/asserts.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/asserts.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/references.txt [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu.sh [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin.bkp2 [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin.bkp5 [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.ltl [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress.ltl [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.define [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.log [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/urcu.sh [deleted file]
formal-model/urcu/result-signal-over-writer/urcu.spin [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free.log [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free.ltl [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.define [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.log [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.define [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.log [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.define [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.log [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.define [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.log [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress.ltl [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_reader.define [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_reader.log [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_writer.define [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_writer.log [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.define [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.log [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/DEFINES [deleted file]
formal-model/urcu/result-standard-execution-nest/Makefile [deleted file]
formal-model/urcu/result-standard-execution-nest/asserts.log [deleted file]
formal-model/urcu/result-standard-execution-nest/asserts.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/asserts.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu.sh [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu.spin [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free.log [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free.ltl [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.define [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.log [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.define [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.log [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.define [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.log [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.define [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.log [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress.ltl [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.define [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.log [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.define [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.log [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.define [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.log [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/DEFINES [deleted file]
formal-model/urcu/result-standard-execution-nonest/Makefile [deleted file]
formal-model/urcu/result-standard-execution-nonest/asserts.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/asserts.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/asserts.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/references.txt [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu.sh [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu.spin [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free.ltl [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.define [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.define [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.define [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.define [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.define [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress.ltl [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.define [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.define [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.spin.input.trail [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.define [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.log [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.spin.input [deleted file]
formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.spin.input.trail [deleted file]
formal-model/urcu/urcu.sh [deleted file]
formal-model/urcu/urcu.spin [deleted file]
formal-model/urcu/urcu_free.ltl [deleted file]
formal-model/urcu/urcu_free_no_mb.define [deleted file]
formal-model/urcu/urcu_free_no_rmb.define [deleted file]
formal-model/urcu/urcu_free_no_wmb.define [deleted file]
formal-model/urcu/urcu_free_single_flip.define [deleted file]
formal-model/urcu/urcu_progress.ltl [deleted file]
formal-model/urcu/urcu_progress_reader.define [deleted file]
formal-model/urcu/urcu_progress_writer.define [deleted file]
formal-model/urcu/urcu_progress_writer_error.define [deleted file]
liburcu-bp.pc.in [new file with mode: 0644]
liburcu-cds.pc.in [new file with mode: 0644]
liburcu-mb.pc.in [new file with mode: 0644]
liburcu-qsbr.pc.in [new file with mode: 0644]
liburcu-signal.pc.in [new file with mode: 0644]
liburcu.pc.in [new file with mode: 0644]
rculfqueue.c [new file with mode: 0644]
rculfstack.c [new file with mode: 0644]
tests/Makefile [deleted file]
tests/Makefile.am [new file with mode: 0644]
tests/Makefile.inc [deleted file]
tests/Makefile32 [deleted file]
tests/Makefile64 [deleted file]
tests/api_gcc.h
tests/api_ppc.h
tests/api_x86.h
tests/rcutorture.h
tests/runpaul-phase7.sh [new file with mode: 0755]
tests/runtests.sh
tests/test_atomic.c [deleted file]
tests/test_cycles_per_loop.c [new file with mode: 0644]
tests/test_looplen.c
tests/test_mutex.c
tests/test_perthreadlock.c
tests/test_perthreadlock_timing.c
tests/test_qsbr.c
tests/test_qsbr_gc.c
tests/test_qsbr_timing.c
tests/test_rwlock.c
tests/test_rwlock_timing.c
tests/test_uatomic.c [new file with mode: 0644]
tests/test_urcu.c
tests/test_urcu_assign.c [new file with mode: 0644]
tests/test_urcu_bp.c [new file with mode: 0644]
tests/test_urcu_defer.c
tests/test_urcu_gc.c
tests/test_urcu_lfq.c [new file with mode: 0644]
tests/test_urcu_lfs.c [new file with mode: 0644]
tests/test_urcu_timing.c
tests/test_urcu_wfq.c [new file with mode: 0644]
tests/test_urcu_wfs.c [new file with mode: 0644]
tests/urcu-asm.c
tests/urcutorture.c
urcu-bp.c [new file with mode: 0644]
urcu-bp.h [new file with mode: 0644]
urcu-call-rcu-impl.h [new file with mode: 0644]
urcu-call-rcu.h [new file with mode: 0644]
urcu-defer-impl.h [new file with mode: 0644]
urcu-defer-static.h [deleted file]
urcu-defer.c [deleted file]
urcu-defer.h
urcu-pointer.c [new file with mode: 0644]
urcu-pointer.h [new file with mode: 0644]
urcu-qsbr-static.h [deleted file]
urcu-qsbr.c
urcu-qsbr.h
urcu-static.h [deleted file]
urcu.c
urcu.h
urcu/arch/alpha.h [new file with mode: 0644]
urcu/arch/arm.h [new file with mode: 0644]
urcu/arch/gcc.h [new file with mode: 0644]
urcu/arch/generic.h [new file with mode: 0644]
urcu/arch/ppc.h [new file with mode: 0644]
urcu/arch/s390.h [new file with mode: 0644]
urcu/arch/sparc64.h [new file with mode: 0644]
urcu/arch/unknown.h [new file with mode: 0644]
urcu/arch/x86.h [new file with mode: 0644]
urcu/cds.h [new file with mode: 0644]
urcu/compiler.h [new file with mode: 0644]
urcu/config.h.in [new file with mode: 0644]
urcu/futex.h [new file with mode: 0644]
urcu/hlist.h [new file with mode: 0644]
urcu/list.h [new file with mode: 0644]
urcu/map/urcu-bp.h [new file with mode: 0644]
urcu/map/urcu-qsbr.h [new file with mode: 0644]
urcu/map/urcu.h [new file with mode: 0644]
urcu/rcuhlist.h [new file with mode: 0644]
urcu/rculfqueue.h [new file with mode: 0644]
urcu/rculfstack.h [new file with mode: 0644]
urcu/rculist.h [new file with mode: 0644]
urcu/ref.h [new file with mode: 0644]
urcu/static/rculfqueue.h [new file with mode: 0644]
urcu/static/rculfstack.h [new file with mode: 0644]
urcu/static/urcu-bp.h [new file with mode: 0644]
urcu/static/urcu-pointer.h [new file with mode: 0644]
urcu/static/urcu-qsbr.h [new file with mode: 0644]
urcu/static/urcu.h [new file with mode: 0644]
urcu/static/wfqueue.h [new file with mode: 0644]
urcu/static/wfstack.h [new file with mode: 0644]
urcu/system.h [new file with mode: 0644]
urcu/uatomic/alpha.h [new file with mode: 0644]
urcu/uatomic/arm.h [new file with mode: 0644]
urcu/uatomic/gcc.h [new file with mode: 0644]
urcu/uatomic/generic.h [new file with mode: 0644]
urcu/uatomic/ppc.h [new file with mode: 0644]
urcu/uatomic/s390.h [new file with mode: 0644]
urcu/uatomic/sparc64.h [new file with mode: 0644]
urcu/uatomic/unknown.h [new file with mode: 0644]
urcu/uatomic/x86.h [new file with mode: 0644]
urcu/uatomic_arch.h [new file with mode: 0644]
urcu/urcu-futex.h [new file with mode: 0644]
urcu/urcu_ref.h [new file with mode: 0644]
urcu/wfqueue.h [new file with mode: 0644]
urcu/wfstack.h [new file with mode: 0644]
wfqueue.c [new file with mode: 0644]
wfstack.c [new file with mode: 0644]

index cae097ae7b8724b3eeb663f822bd06fe9b24470f..6eeb2a1379850a19053155681389eb8e79234242 100644 (file)
@@ -10,6 +10,85 @@ urcu.o
 urcutorture
 urcutorture-yield
 urcu-yield.o
-/api.h
-/arch.h
-/arch_atomic.h
+tests/api.h
+urcu/arch.h
+urcu/uatomic.h
+liburcu-defer.so
+liburcu-mb.so
+liburcu-qsbr.so
+urcu-defer.o
+urcu-mb.o
+urcu-qsbr.o
+tests/test_looplen
+tests/test_mutex
+tests/test_perthreadlock
+tests/test_perthreadlock_timing
+tests/test_qsbr
+tests/test_qsbr_dynamic_link
+tests/test_qsbr_gc
+tests/test_qsbr_lgc
+tests/test_qsbr_timing
+tests/test_rwlock
+tests/test_uatomic
+tests/test_urcu_gc
+tests/test_urcu_gc_mb
+tests/test_urcu_lgc
+tests/test_urcu_lgc_mb
+tests/test_urcu_mb
+tests/test_urcu_mb_defer
+tests/test_urcu_assign
+tests/test_urcu_assign_dynamic_link
+tests/test_urcu_bp
+tests/test_urcu_bp_dynamic_link
+tests/rcutorture_qsbr
+tests/rcutorture_urcu
+tests/rcutorture_urcu_bp
+tests/rcutorture_urcu_mb
+tests/rcutorture_urcu_signal
+tests/test_cycles_per_loop
+tests/test_urcu_defer
+tests/test_urcu_lfq
+tests/test_urcu_lfq_dynlink
+tests/test_urcu_lfs
+tests/test_urcu_lfs_dynlink
+tests/test_urcu_mb_gc
+tests/test_urcu_mb_lgc
+tests/test_urcu_signal
+tests/test_urcu_signal_dynamic_link
+tests/test_urcu_signal_gc
+tests/test_urcu_signal_lgc
+tests/test_urcu_signal_timing
+tests/test_urcu_signal_yield
+tests/test_urcu_wfq
+tests/test_urcu_wfq_dynlink
+tests/test_urcu_wfs
+tests/test_urcu_wfs_dynlink
+tests/*.log
+
+#automake
+/config.h
+.deps/
+.libs/
+Makefile.in
+Makefile
+*.m4
+*.la
+*.bz2
+*.o
+*.lo
+*.loT
+/config.log
+/configure
+/config/
+/libtool
+/stamp-h1
+/config.h.in
+/config.status
+/autom4te.cache/
+config.h
+stamp-h2
+liburcu.pc
+liburcu-bp.pc
+liburcu-qsbr.pc
+liburcu-mb.pc
+liburcu-signal.pc
diff --git a/API.txt b/API.txt
new file mode 100644 (file)
index 0000000..a7cd5a2
--- /dev/null
+++ b/API.txt
@@ -0,0 +1,123 @@
+Userspace RCU API
+by Mathieu Desnoyers and Paul E. McKenney
+
+
+void rcu_init(void);
+
+       This must be called before any of the following functions
+       are invoked.
+
+void rcu_read_lock(void);
+
+       Begin an RCU read-side critical section.  These critical
+       sections may be nested.
+
+void rcu_read_unlock(void);
+
+       End an RCU read-side critical section.
+
+void rcu_register_thread(void)
+
+       Each thread must invoke this function before its first call to
+       rcu_read_lock().  Threads that never call rcu_read_lock() need
+       not invoke this function.  In addition, rcu-bp ("bullet proof"
+       RCU) does not require any thread to invoke rcu_register_thread().
+
+void rcu_unregister_thread(void)
+
+       Each thread that invokes rcu_register_thread() must invoke
+       rcu_unregister_thread() before invoking pthread_exit()
+       or before returning from its top-level function.
+
+void synchronize_rcu(void);
+
+       Wait until every pre-existing RCU read-side critical section
+       has completed.  Note that this primitive will not necessarily
+       wait for RCU read-side critical sections that have not yet
+       started: this is not a reader-writer lock.  The duration
+       actually waited is called an RCU grace period.
+
+void call_rcu(struct rcu_head *head,
+             void (*func)(struct rcu_head *head));
+
+       Registers the callback indicated by "head".  This means
+       that "func" will be invoked after the end of a future
+       RCU grace period.  The rcu_head structure referenced
+       by "head" will normally be a field in a larger RCU-protected
+       structure.  A typical implementation of "func" is as
+       follows:
+
+               void func(struct rcu_head *head)
+               {
+                       struct foo *p = container_of(head, struct foo, rcu);
+
+                       free(p);
+               }
+
+       This RCU callback function can be registered as follows
+       given a pointer "p" to the enclosing structure:
+
+               call_rcu(&p->rcu, func);
+
+struct call_rcu_data *create_call_rcu_data(unsigned long flags,
+                                          int cpu_affinity);
+
+       Returns a handle that can be passed to the following
+       primitives.  The "flags" argument can be zero, or can be
+       URCU_CALL_RCU_RT if the worker threads associated with the
+       new helper thread are to get real-time response. The argument
+       "cpu_affinity" specifies a cpu on which the call_rcu thread should
+       be affined to. It is ignored if negative.
+
+struct call_rcu_data *get_default_call_rcu_data(void);
+
+       Returns the handle of the default call_rcu() helper thread.
+
+struct call_rcu_data *get_call_rcu_data(void);
+
+       Returns the handle of the current thread's call_rcu() helper
+       thread, which might well be the default helper thread.
+
+struct call_rcu_data *get_thread_call_rcu_data(void);
+
+       Returns the handle for the current thread's hard-assigned
+       call_rcu() helper thread, or NULL if the current thread is
+       instead using a per-CPU or the default helper thread.
+
+void set_thread_call_rcu_data(struct call_rcu_data *crdp);
+
+       Sets the current thread's hard-assigned call_rcu() helper to the
+       handle specified by "crdp".  Note that "crdp" can be NULL to
+       disassociate this thread from its helper.  Once a thread is
+       disassociated from its helper, further call_rcu() invocations
+       use the current CPU's helper if there is one and the default
+       helper otherwise.
+
+int set_cpu_call_rcu_data(int cpu, struct call_rcu_data *crdp);
+
+       Sets the specified CPU's call_rcu() helper to the handle
+       specified by "crdp".  Again, "crdp" can be NULL to disassociate
+       this CPU from its helper thread.  Once a CPU has been
+       disassociated from its helper, further call_rcu() invocations
+       that would otherwise have used this CPU's helper will instead
+       use the default helper.
+
+int create_all_cpu_call_rcu_data(unsigned long flags)
+
+       Creates a separate call_rcu() helper thread for each CPU.
+       After this primitive is invoked, the global default call_rcu()
+       helper thread will not be called.
+
+       The set_thread_call_rcu_data(), set_cpu_call_rcu_data(), and
+       create_all_cpu_call_rcu_data() functions may be combined to set up
+       pretty much any desired association between worker and call_rcu()
+       helper threads.  If a given executable calls only call_rcu(),
+       then that executable will have only the single global default
+       call_rcu() helper thread.  This will suffice in most cases.
+
+void call_rcu_data_free(struct call_rcu_data *crdp)
+
+       Terminates a call_rcu() helper thread and frees its associated
+       data.  The caller must have ensured that this thread is no longer
+       in use, for example, by passing NULL to set_thread_call_rcu_data()
+       and set_cpu_call_rcu_data() as required.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..6782b61
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,120 @@
+2011-06-27 Userspace RCU 0.6.3
+       * uatomic: Fix i386 compatibility build errors in uatomic.
+
+2011-06-13 Userspace RCU 0.6.2
+       * Fix build on powerpc.
+
+2011-06-13 Userspace RCU 0.6.1
+       * Add missing headers into release tarball:
+           urcu-call-rcu-impl.h and urcu-defer-impl.h
+
+2011-06-10 Userspace RCU 0.6.0
+       * Added call_rcu() support, graciously contributed by Paul E. McKenney.
+       * Added urcu/cds.h and merged all "Concurrent Data Containers" (CDS)
+         into a single .so: liburcu-cds.so to have a single header/shared
+         object holding all concurrency-aware data containers. It provides
+         support for RCU lists, queues and stacks at the moment.
+       * liburcu 0.6.0 now allows linking a single application with multiple
+         flavors of RCU. This required a library API change which is
+         incompatible with older 0.5.x liburcu. The .so version number
+         is therefore bumped from 0 to 1 (e.g. liburcu.so.1).
+       * Added "atfork" handling API, documented in README. Only useful for
+         processes using fork() without following exec().
+       * Renaming the following files, keeping the old files (producing a
+         compiler warning):
+           urcu/uatomic_arch.h -> urcu/uatomic.h
+           urcu/urcu-futex.h -> urcu/futex.h
+           urcu/urcu_ref.h -> urcu/ref.h
+
+2011-03-04 Userspace RCU 0.5.4
+        *  urcu-bp: Update fork() handling
+
+           Introduce
+
+           extern void rcu_bp_before_fork(void);
+           extern void rcu_bp_after_fork_parent(void);
+           extern void rcu_bp_after_fork_child(void);
+
+           to handle fork gracefully. These disable signals and hold
+           the registry mutex across forks. (this flavor of the liburcu
+           library ("bp" for "bulletproof") is mainly used by UST, the
+           user-space tracer).
+
+2011-03-03 Userspace RCU 0.5.3
+       * Add support for older ARM single-CPU architecturess (pre-ARMv7)
+         (thanks to Jason Wessel from WindRiver).
+       * Fix ARMv7 cmm_rmb/cmm_wmb primitives (use a dmb barrier).
+       * Remove leftover list_t type from urcu/list.h (namespace cleanup).
+       * urcu_defer: handle malloc error value.
+       * Update README file to describe urcu interaction with fork() when not
+       * followed
+         by an exec() system call.
+
+2010-11-18 Userspace RCU 0.5.2
+       * Fix renaming error introduced in 0.5.0.
+
+2010-11-18 Userspace RCU 0.5.1
+       * Fix renaming error introduced in 0.5.0. (incomplete fix)
+
+2010-11-18 Userspace RCU 0.5.0
+       * Version 0.5.0 changes the API presented by memory model,
+         architecture abstraction and data structure primitives in
+         headers. The prefixes are, respectively:
+           - cmm_ : Concurrent Memory Model
+           - caa_ : Concurrent Architecture Abstraction
+           - cds_ : Concurrent Data Structures
+
+2010-03-04 Userspace RCU 0.4.2
+       * Add generic uatomic ops support.
+       * Bugfix in urcu-bp. (rare garbage collection bug occurring in
+         multithreaded environment). Only affects urcu-bp users (UST).
+
+2010-02-12 Userspace RCU 0.4.1
+       * s390: compilation fix.
+
+2010-01-30 Userspace RCU 0.4.0
+       * API change: SIGURCU -> SIGRCU
+       * API changes: standardize on rcu_ prefix.
+       * API change: urcu_init -> rcu_init.
+       * urcu/config.h options renamed to CONFIG_RCU_HAVE_FENCE,
+         CONFIG_RCU_HAVE_FUTEX, CONFIG_RCU_SMP, CONFIG_RCU_COMPAT_ARCH.
+         ((moving from URCU -> RCU).
+       * library names changes: liburcu becomes the "default" version, using
+         sys_membarrier() when available, and using liburcu-mb as a
+         fallback.
+       * The signal-based liburcu is renamed from liburcu to
+         liburcu-signal. People previously using the signal-based
+         "liburcu" will automatically be moved to the "default" liburcu
+         version.
+
+2009-11-16 Userspace RCU 0.3.1
+       * Add support for sparcv9 32-bit build.
+       * Update build system to use --host instead of --target.
+
+2009-11-03 Userspace RCU 0.3.0
+       * API change for the "deferred work" interface.
+
+2009-10-14 Userspace RCU 0.2.3
+       * Move to autotools.
+       * Automated architecture detection, with i386 fallback.
+       * Detect if NR_futex is on the system, fallback on portable
+         alternatives.
+       * Add configure mode for UP-only systems.
+
+2009-10-02 Userspace RCU 0.2.2
+       * Phases out rcu_publish_content() api.
+       * Adds type checking to urcu-pointer.h pointer exchange primitives.
+
+2009-10-02 Userspace RCU 0.2.1
+       * small header dependency fix for rculist.h.
+       * new "liburcu-bp.so" : "Bulletproof RCU", made especially for
+         the UST userspace tracer. It's a library that sacrifices a bit
+         of read-side performance for automatically monitoring thread
+         creation/removal. See README for details.
+
+2009-10-01 Userspace RCU 0.2
+       * Clarify usage of rcu_cmpxchg_pointer, rcu_xchg_pointer,
+         rcu_set_pointer.
+
+2009-09-29 Userspace RCU 0.1
+       * Initial release.
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index ab19097..0000000
--- a/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-include Makefile.inc
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..5869c5e
--- /dev/null
@@ -0,0 +1,61 @@
+INCLUDES = -I$(top_builddir)/urcu
+
+#Add the -version-info directly here since we are only building
+# library that use the version-info
+AM_LDFLAGS=-lpthread -version-info $(URCU_LIBRARY_VERSION)
+AM_CFLAGS=-Wall
+
+SUBDIRS = . tests
+
+include_HEADERS = urcu.h urcu-bp.h urcu-call-rcu.h urcu-defer.h \
+               urcu-pointer.h urcu-qsbr.h
+nobase_dist_include_HEADERS = urcu/compiler.h urcu/hlist.h urcu/list.h \
+               urcu/rculist.h urcu/rcuhlist.h urcu/system.h urcu/futex.h \
+               urcu/uatomic/generic.h urcu/arch/generic.h urcu/wfstack.h \
+               urcu/wfqueue.h urcu/rculfstack.h urcu/rculfqueue.h \
+               urcu/ref.h urcu/map/*.h urcu/static/*.h urcu/cds.h \
+               urcu/urcu_ref.h urcu/urcu-futex.h urcu/uatomic_arch.h
+nobase_nodist_include_HEADERS = urcu/arch.h urcu/uatomic.h urcu/config.h
+
+EXTRA_DIST = $(top_srcdir)/urcu/arch/*.h $(top_srcdir)/urcu/uatomic/*.h \
+               gpl-2.0.txt lgpl-2.1.txt lgpl-relicensing.txt \
+               README LICENSE compat_arch_x86.c \
+               urcu-call-rcu-impl.h urcu-defer-impl.h \
+               ChangeLog
+
+if COMPAT_ARCH
+COMPAT=compat_arch_@ARCHTYPE@.c
+else
+COMPAT=
+endif
+
+if COMPAT_FUTEX
+COMPAT+=compat_futex.c
+endif
+
+lib_LTLIBRARIES = liburcu-cds.la liburcu.la liburcu-qsbr.la \
+               liburcu-mb.la liburcu-signal.la liburcu-bp.la
+
+liburcu_cds_la_SOURCES = wfqueue.c wfstack.c rculfqueue.c rculfstack.c \
+                       $(COMPAT)
+
+liburcu_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
+liburcu_la_LIBADD = liburcu-cds.la
+
+liburcu_qsbr_la_SOURCES = urcu-qsbr.c urcu-pointer.c $(COMPAT)
+liburcu_qsbr_la_LIBADD = liburcu-cds.la
+
+liburcu_mb_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
+liburcu_mb_la_CFLAGS = -DRCU_MB
+liburcu_mb_la_LIBADD = liburcu-cds.la
+
+liburcu_signal_la_SOURCES = urcu.c urcu-pointer.c $(COMPAT)
+liburcu_signal_la_CFLAGS = -DRCU_SIGNAL
+liburcu_signal_la_LIBADD = liburcu-cds.la
+
+liburcu_bp_la_SOURCES = urcu-bp.c urcu-pointer.c $(COMPAT)
+liburcu_bp_la_LIBADD = liburcu-cds.la
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = liburcu-cds.pc liburcu.pc liburcu-bp.pc liburcu-qsbr.pc \
+       liburcu-signal.pc liburcu-mb.pc
diff --git a/Makefile.build.inc b/Makefile.build.inc
deleted file mode 100644 (file)
index 3f05de9..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-
-CFLAGS=-Wall -I.
-
-#optimized
-CFLAGS+=-O2
-
-#debug information
-CFLAGS+=-g
-
-#RCU debug (slower, with error-checks)
-#CFLAGS+=-DDEBUG_RCU
-
-LDFLAGS=-lpthread
-
-HOSTTYPE=$(shell uname -m)
-
-ifeq ("${HOSTTYPE}","x86_64")
-ARCHTYPE=x86
-endif
-ifeq ("${HOSTTYPE}","i586")
-ARCHTYPE=x86
-endif
-ifeq ("${HOSTTYPE}","i686")
-ARCHTYPE=x86
-endif
-ifeq ("${HOSTTYPE}","powerpc")
-ARCHTYPE=ppc
-endif
-ifeq ("${HOSTTYPE}","ppc64")
-ARCHTYPE=ppc
-endif
-ifeq ("${HOSTTYPE}","s390")
-ARCHTYPE=s390
-endif
-ifeq ("${HOSTTYPE}","s390x")
-ARCHTYPE=s390
-endif
-
-#Changing the signal number used by the library. SIGUSR1 by default.
-#CFLAGS+=-DSIGURCU=SIGUSR2
-
-SRC_DEP=`echo $^ | sed 's/[^ ]*\.h//g'`
diff --git a/Makefile.inc b/Makefile.inc
deleted file mode 100644 (file)
index 7a5ed3f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-
-include Makefile.build.inc
-
-DIRS=tests
-
-all: checkarch liburcu.so urcu.o \
-       liburcu-qsbr.so urcu-qsbr.o \
-       liburcu-mb.so urcu-mb.o \
-       liburcu-defer.so urcu-defer.o \
-       urcu-yield.o \
-       urcu-ht.o \
-       subdirs
-
-checkarch:
-ifeq (${ARCHTYPE},)
-       @echo "Architecture ${HOSTTYPE} is currently unsupported by liburcu"
-       @exit 1
-endif
-
-arch.h: arch_${ARCHTYPE}.h
-       cp -f arch_${ARCHTYPE}.h arch.h
-
-arch_atomic.h: arch_atomic_${ARCHTYPE}.h
-       cp -f arch_atomic_${ARCHTYPE}.h arch_atomic.h
-
-urcu.h: arch.h arch_atomic.h
-
-urcu-qsbr.h: arch.h arch_atomic.h
-
-urcu.o: urcu.c urcu.h
-       $(CC) -fPIC ${CFLAGS} -c -o $@ $(SRC_DEP)
-
-urcu-mb.o: urcu.c urcu.h
-       $(CC) -fPIC -DURCU_MB ${CFLAGS} -c -o $@ $(SRC_DEP)
-
-urcu-qsbr.o: urcu-qsbr.c urcu-qsbr.h
-       $(CC) -fPIC ${CFLAGS} -c -o $@ $(SRC_DEP)
-
-urcu-defer.o: urcu-defer.c urcu-defer.h
-       $(CC) -fPIC ${CFLAGS} -c -o $@ $(SRC_DEP)
-
-urcu-hash.o: urcu-hash.c
-       $(CC) -fPIC ${CFLAGS} -c -o $@ $(SRC_DEP)
-
-liburcu.so: urcu.o
-       $(CC) ${LDFLAGS} -fPIC -shared -o $@ $<
-
-liburcu-qsbr.so: urcu-qsbr.o
-       $(CC) ${LDFLAGS} -fPIC -shared -o $@ $<
-
-liburcu-mb.so: urcu-mb.o
-       $(CC) ${LDFLAGS} -fPIC -shared -o $@ $<
-
-liburcu-defer.so: urcu-defer.o
-       $(CC) ${LDFLAGS} -fPIC -shared -o $@ $<
-
-urcu-yield.o: urcu.c urcu.h
-       $(CC) -DDEBUG_YIELD ${CFLAGS} -c -o $@ $(SRC_DEP)
-
-.PHONY: clean install checkarch tests
-
-subdirs:
-       -for d in ${DIRS}; do cd $${d}; ${MAKE} ${MFLAGS} ${EXTRAMFLAGS}; done
-
-install: liburcu.so
-       cp -f liburcu.so liburcu-mb.so liburcu-qsbr.so /usr/lib/
-       cp -f arch.h arch_atomic.h compiler.h   \
-               urcu.h urcu-static.h            \
-               urcu-qsbr.h urcu-qsbr-static.h  \
-                       /usr/include/
-
-clean:
-       rm -f *.o *.so arch.h arch_atomic.h
-       -for d in ${DIRS}; do cd $${d}; ${MAKE} clean; done
diff --git a/Makefile32 b/Makefile32
deleted file mode 100644 (file)
index ab57691..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-include Makefile.inc
-
-EXTRAMFLAGS=-f Makefile32
-CFLAGS+=-m32
-LDFLAGS+=-m32
diff --git a/Makefile64 b/Makefile64
deleted file mode 100644 (file)
index 83ee8da..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-include Makefile.inc
-
-EXTRAMFLAGS=-f Makefile64
-CFLAGS+=-m64
-LDFLAGS+=-m64
diff --git a/README b/README
index b47fe48c2c181e833c633c8b6b973ddcbf0f5186..1e76f2d1b098bb9579d573fcf8f36211c3c7c5f9 100644 (file)
--- a/README
+++ b/README
@@ -4,11 +4,46 @@ by Mathieu Desnoyers and Paul E. McKenney
 BUILDING
 --------
 
+       ./bootstrap (skip if using tarball)
+       ./configure
        make
-       #force 32-bit build with: make -f Makefile32
-       #force 64-bit build with: make -f Makefile64
        make install
-       
+       ldconfig
+
+       Hints:  Forcing 32-bit build:
+               * CFLAGS="-m32 -g -O2" ./configure
+
+               Forcing 64-bit build:
+               * CFLAGS="-m64 -g -O2" ./configure
+
+               Forcing a 32-bit build with 386 backward compatibility:
+               * CFLAGS="-m32 -g -O2" ./configure --host=i386-pc-linux-gnu
+
+               Forcing a 32-bit build for Sparcv9 (typical for Sparc v9)
+               * CFLAGS="-m32 -Wa,-Av9a -g -O2" ./configure
+
+ARCHITECTURES SUPPORTED
+-----------------------
+
+Currently, x86 (i386, i486, i586, i686), x86 64-bit, PowerPC 32/64, S390, S390x,
+ARM, Alpha, ia64 and Sparcv9 32/64 are supported. Only tested on Linux so
+far, but should theoretically work on other operating systems.
+
+ARM depends on running a Linux kernel 2.6.15 or better.
+
+The gcc compiler versions 3.3, 3.4, 4.0, 4.1, 4.2, 4.3, 4.4 and 4.5 are
+supported, with the following exceptions:
+
+- gcc 3.3 and 3.4 have a bug that prevents them from generating volatile
+  accesses to offsets in a TLS structure on 32-bit x86. These versions are
+  therefore not compatible with liburcu on x86 32-bit (i386, i486, i586, i686).
+  The problem has been reported to the gcc community:
+    http://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg281255.html
+- gcc 3.3 cannot match the "xchg" instruction on 32-bit x86 build.
+  See: http://kerneltrap.org/node/7507
+- Alpha, ia64 and ARM architectures depend on 4.x gcc with atomic builtins
+  support.
+
 
 QUICK START GUIDE
 -----------------
@@ -26,19 +61,11 @@ Usage of liburcu
 
        * #include <urcu.h>
        * Link the application with "-lurcu".
-       * This is the preferred version of the library, both in terms of speed
-         and flexibility. Requires a signal, typically SIGUSR1. Can be
-         overridden with -DSIGURCU by modifying Makefile.build.inc.
-
-Usage of liburcu-mb
-
-       * #include <urcu.h>
-       * Compile any _LGPL_SOURCE code using this library with "-DURCU_MB".
-       * Link with "-lurcu-mb".
-       * This version of the urcu library does not need to
-         reserve a signal number. URCU_MB uses full memory barriers for
-         readers. This eliminates the need for signals but results in slower
-         reads.
+       * This is the preferred version of the library, in terms of
+         grace-period detection speed, read-side speed and flexibility.
+         Dynamically detects kernel support for sys_membarrier(). Falls back
+         on urcu-mb scheme if support is not present, which has slower
+         read-side.
 
 Usage of liburcu-qsbr
 
@@ -50,6 +77,34 @@ Usage of liburcu-qsbr
          the threads are not active. It provides the fastest read-side at the
          expense of more intrusiveness in the application code.
 
+Usage of liburcu-mb
+
+       * #include <urcu.h>
+       * Compile any _LGPL_SOURCE code using this library with "-DRCU_MB".
+       * Link with "-lurcu-mb".
+       * This version of the urcu library uses memory barriers on the writer
+         and reader sides. This results in faster grace-period detection, but
+         results in slower reads.
+
+Usage of liburcu-signal
+
+       * #include <urcu.h>
+       * Compile any _LGPL_SOURCE code using this library with "-DRCU_SIGNAL".
+       * Link the application with "-lurcu-signal".
+       * Version of the library that requires a signal, typically SIGUSR1. Can
+         be overridden with -DSIGRCU by modifying Makefile.build.inc.
+
+Usage of liburcu-bp
+
+       * #include <urcu-bp.h>
+       * Link with "-lurcu-bp".
+       * The BP library flavor stands for "bulletproof". It is specifically
+         designed to help tracing library to hook on applications without
+         requiring to modify these applications. rcu_init(),
+         rcu_register_thread() and rcu_unregister_thread() all become nops.
+         The state is dealt with by the library internally at the expense of
+         read-side and write-side performance.
+
 Initialization
 
        Each thread that has reader critical sections (that uses
@@ -70,6 +125,39 @@ Writing
        After, synchronize_rcu() must be called. When it returns, the old
        values are not in usage anymore.
 
+Usage of liburcu-defer
+
+       * Follow instructions for either liburcu, liburcu-qsbr,
+         liburcu-mb, liburcu-signal, or liburcu-bp above.
+         The liburcu-defer functionality is pulled into each of
+         those library modules.
+       * Provides defer_rcu() primitive to enqueue delayed callbacks. Queued
+         callbacks are executed in batch periodically after a grace period.
+         Do _not_ use defer_rcu() within a read-side critical section, because
+         it may call synchronize_rcu() if the thread queue is full.
+         This can lead to deadlock or worse.
+       * Requires that rcu_defer_barrier() must be called in library destructor
+         if a library queues callbacks and is expected to be unloaded with
+         dlclose().
+       * Its API is currently experimental. It may change in future library
+         releases.
+
+Usage of urcu-call-rcu
+
+       * Follow instructions for either liburcu, liburcu-qsbr,
+         liburcu-mb, liburcu-signal, or liburcu-bp above.
+         The urcu-call-rcu functionality is provided for each of
+         these library modules.
+       * Provides the call_rcu() primitive to enqueue delayed callbacks
+         in a manner similar to defer_rcu(), but without ever delaying
+         for a grace period.  On the other hand, call_rcu()'s best-case
+         overhead is not quite as good as that of defer_rcu().
+       * Provides call_rcu() to allow asynchronous handling of RCU
+         grace periods.  A number of additional functions are provided
+         to manage the helper threads used by call_rcu(), but reasonable
+         defaults are used if these additional functions are not invoked.
+         See API.txt for more details.
+
 Being careful with signals
 
        The liburcu library uses signals internally. The signal handler is
@@ -91,6 +179,14 @@ Being careful with signals
        rcu_quiescent_state() calls, when threads are put offline and around
        calls to synchronize_rcu(). Even then, we do not recommend it.
 
+Interaction with mutexes
+
+       One must be careful to do not cause deadlocks due to interaction of
+       synchronize_rcu() and RCU read-side with mutexes. If synchronize_rcu()
+       is called with a mutex held, this mutex (or any mutex which has this
+       mutex in its dependency chain) should not be acquired from within a RCU
+       read-side critical section.
+
 Usage of DEBUG_RCU
 
        DEBUG_RCU is used to add internal debugging self-checks to the
@@ -102,3 +198,34 @@ Usage of DEBUG_YIELD
 
        DEBUG_YIELD is used to add random delays in the code for testing
        purposes.
+
+SMP support
+
+       By default the library is configured to use synchronization primitives
+       adequate for SMP systems. On uniprocessor systems, support for SMP
+       systems can be disabled with:
+
+               ./configure --disable-smp-support
+
+       theoretically yielding slightly better performance.
+
+Interaction with fork()
+
+       Special care must be taken for applications performing fork() without
+       any following exec(). This is caused by the fact that Linux only clones
+       the thread calling fork(), and thus never replicates any of the other
+       parent thread into the child process. Most liburcu implementations
+       require that all registrations (as reader, defer_rcu and call_rcu
+       threads) should be released before a fork() is performed, except for the
+       rather common scenario where fork() is immediately followed by exec() in
+       the child process. The only implementation not subject to that rule is
+       liburcu-bp, which is designed to handle fork() by calling
+       rcu_bp_before_fork, rcu_bp_after_fork_parent and
+       rcu_bp_after_fork_child.
+
+       Applications that use call_rcu() and that fork() without
+       doing an immediate exec() must take special action.  The parent
+       must invoke call_rcu_before_fork() before the fork() and
+       call_rcu_after_fork_parent() after the fork().  The child
+       process must invoke call_rcu_after_fork_child().
+       These three APIs are suitable for passing to pthread_atfork().
diff --git a/arch_atomic_ppc.h b/arch_atomic_ppc.h
deleted file mode 100644 (file)
index 54c5f5c..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-#ifndef _ARCH_ATOMIC_PPC_H
-#define _ARCH_ATOMIC_PPC_H
-
-/* 
- * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
- * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
- * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
- * Copyright (c) 2009      Mathieu Desnoyers
- *
- * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- *
- * Permission is hereby granted to use or copy this program
- * for any purpose,  provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
- *
- * Code inspired from libatomic_ops-1.2, inherited in part from the
- * Boehm-Demers-Weiser conservative garbage collector.
- */
-
-#include <compiler.h>
-
-#ifndef __SIZEOF_LONG__
-#ifdef __powerpc64__
-#define __SIZEOF_LONG__ 8
-#else
-#define __SIZEOF_LONG__ 4
-#endif
-#endif
-
-#ifndef BITS_PER_LONG
-#define BITS_PER_LONG  (__SIZEOF_LONG__ * 8)
-#endif
-
-#define ILLEGAL_INSTR  ".long  0xd00d00"
-
-#ifndef _INCLUDE_API_H
-
-#define atomic_set(addr, v)                            \
-do {                                                   \
-       ACCESS_ONCE(*(addr)) = (v);                     \
-} while (0)
-
-#define atomic_read(addr)      ACCESS_ONCE(*(addr))
-
-/*
- * Using a isync as second barrier for exchange to provide acquire semantic.
- * According to atomic_ops/sysdeps/gcc/powerpc.h, the documentation is "fairly
- * explicit that this also has acquire semantics."
- * Derived from AO_compare_and_swap(), but removed the comparison.
- */
-
-/* xchg */
-
-static inline __attribute__((always_inline))
-unsigned long _atomic_exchange(void *addr, unsigned long val, int len)
-{
-       switch (len) {
-       case 4:
-       {
-               unsigned int result;
-
-               __asm__ __volatile__(
-                       "lwsync\n"
-               "1:\t"  "lwarx %0,0,%1\n"       /* load and reserve */
-                       "stwcx. %2,0,%1\n"      /* else store conditional */
-                       "bne- 1b\n"             /* retry if lost reservation */
-                       "isync\n"
-                               : "=&r"(result)
-                               : "r"(addr), "r"(val)
-                               : "memory", "cc");
-
-               return result;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               unsigned long result;
-
-               __asm__ __volatile__(
-                       "lwsync\n"
-               "1:\t"  "ldarx %0,0,%1\n"       /* load and reserve */
-                       "stdcx. %2,0,%1\n"      /* else store conditional */
-                       "bne- 1b\n"             /* retry if lost reservation */
-                       "isync\n"
-                               : "=&r"(result)
-                               : "r"(addr), "r"(val)
-                               : "memory", "cc");
-
-               return result;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__(ILLEGAL_INSTR);
-       return 0;
-}
-
-#define xchg(addr, v)                                                      \
-       ((__typeof__(*(addr))) _atomic_exchange((addr), (unsigned long)(v), \
-                                               sizeof(*(addr))))
-/* cmpxchg */
-
-static inline __attribute__((always_inline))
-unsigned long _atomic_cmpxchg(void *addr, unsigned long old,
-                             unsigned long _new, int len)
-{
-       switch (len) {
-       case 4:
-       {
-               unsigned int old_val;
-
-               __asm__ __volatile__(
-                       "lwsync\n"
-               "1:\t"  "lwarx %0,0,%1\n"       /* load and reserve */
-                       "cmpd %0,%3\n"          /* if load is not equal to */
-                       "bne 2f\n"              /* old, fail */
-                       "stwcx. %2,0,%1\n"      /* else store conditional */
-                       "bne- 1b\n"             /* retry if lost reservation */
-                       "isync\n"
-               "2:\n"
-                               : "=&r"(old_val)
-                               : "r"(addr), "r"((unsigned int)_new),
-                                 "r"((unsigned int)old)
-                               : "memory", "cc");
-
-               return old_val;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               unsigned long old_val;
-
-               __asm__ __volatile__(
-                       "lwsync\n"
-               "1:\t"  "ldarx %0,0,%1\n"       /* load and reserve */
-                       "cmpd %0,%3\n"          /* if load is not equal to */
-                       "bne 2f\n"              /* old, fail */
-                       "stdcx. %2,0,%1\n"      /* else store conditional */
-                       "bne- 1b\n"             /* retry if lost reservation */
-                       "isync\n"
-               "2:\n"
-                               : "=&r"(old_val),
-                               : "r"(addr), "r"((unsigned long)_new),
-                                 "r"((unsigned long)old)
-                               : "memory", "cc");
-
-               return old_val;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__(ILLEGAL_INSTR);
-       return 0;
-}
-
-
-#define cmpxchg(addr, old, _new)                                           \
-       ((__typeof__(*(addr))) _atomic_cmpxchg((addr), (unsigned long)(old),\
-                                               (unsigned long)(_new),      \
-                                               sizeof(*(addr))))
-
-/* atomic_add_return */
-
-static inline __attribute__((always_inline))
-unsigned long _atomic_add_return(void *addr, unsigned long val,
-                                int len)
-{
-       switch (len) {
-       case 4:
-       {
-               unsigned int result;
-
-               __asm__ __volatile__(
-                       "lwsync\n"
-               "1:\t"  "lwarx %0,0,%1\n"       /* load and reserve */
-                       "add %0,%2,%0\n"        /* add val to value loaded */
-                       "stwcx. %0,0,%1\n"      /* store conditional */
-                       "bne- 1b\n"             /* retry if lost reservation */
-                       "isync\n"
-                               : "=&r"(result)
-                               : "r"(addr), "r"(val)
-                               : "memory", "cc");
-
-               return result;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               unsigned long result;
-
-               __asm__ __volatile__(
-                       "lwsync\n"
-               "1:\t"  "ldarx %0,0,%1\n"       /* load and reserve */
-                       "add %0,%2,%0\n"        /* add val to value loaded */
-                       "stdcx. %0,0,%1\n"      /* store conditional */
-                       "bne- 1b\n"             /* retry if lost reservation */
-                       "isync\n"
-                               : "=&r"(result)
-                               : "r"(addr), "r"(val)
-                               : "memory", "cc");
-
-               return result;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__(ILLEGAL_INSTR);
-       return 0;
-}
-
-
-#define atomic_add_return(addr, v)                                     \
-       ((__typeof__(*(addr))) _atomic_add_return((addr),               \
-                                                 (unsigned long)(v),   \
-                                                 sizeof(*(addr))))
-
-/* atomic_sub_return, atomic_add, atomic_sub, atomic_inc, atomic_dec */
-
-#define atomic_sub_return(addr, v)     atomic_add_return((addr), -(v))
-
-#define atomic_add(addr, v)            (void)atomic_add_return((addr), (v))
-#define atomic_sub(addr, v)            (void)atomic_sub_return((addr), (v))
-
-#define atomic_inc(addr)               atomic_add((addr), 1)
-#define atomic_dec(addr)               atomic_add((addr), -1)
-
-#endif /* #ifndef _INCLUDE_API_H */
-
-#endif /* ARCH_ATOMIC_PPC_H */
diff --git a/arch_atomic_s390.h b/arch_atomic_s390.h
deleted file mode 100644 (file)
index 8857d42..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#ifndef _ARCH_ATOMIC_S390_H
-#define _ARCH_ATOMIC_S390_H
-
-/*
- * Atomic exchange operations for the S390 architecture. Based on information
- * taken from the Principles of Operation Appendix A "Conditional Swapping
- * Instructions (CS, CDS)".
- *
- * Copyright (c) 2009 Novell, Inc.
- * Author: Jan Blunck <jblunck@suse.de>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-#ifndef __SIZEOF_LONG__
-#ifdef __s390x__
-#define __SIZEOF_LONG__ 8
-#else
-#define __SIZEOF_LONG__ 4
-#endif
-#endif
-
-#ifndef BITS_PER_LONG
-#define BITS_PER_LONG  (__SIZEOF_LONG__ * 8)
-#endif
-
-#ifndef _INCLUDE_API_H
-
-static inline __attribute__((always_inline))
-unsigned int atomic_exchange_32(volatile unsigned int *addr, unsigned int val)
-{
-       unsigned int result;
-
-       __asm__ __volatile__(
-               "0:     cs %0,%2,%1\n"
-               "       brc 4,0b\n"
-               : "=&r"(result), "=m" (*addr)
-               : "r"(val), "m" (*addr)
-               : "memory", "cc");
-
-       return result;
-}
-
-#if (BITS_PER_LONG == 64)
-
-static inline __attribute__((always_inline))
-unsigned long atomic_exchange_64(volatile unsigned long *addr,
-                                unsigned long val)
-{
-       unsigned long result;
-
-       __asm__ __volatile__(
-               "0:     csg %0,%2,%1\n"
-               "       brc 4,0b\n"
-               : "=&r"(result), "=m" (*addr)
-               : "r"(val), "m" (*addr)
-               : "memory", "cc");
-
-       return result;
-}
-
-#endif
-
-static inline __attribute__((always_inline))
-unsigned long _atomic_exchange(volatile void *addr, unsigned long val, int len)
-{
-       switch (len) {
-       case 4:
-               return atomic_exchange_32(addr, val);
-#if (BITS_PER_LONG == 64)
-       case 8:
-               return atomic_exchange_64(addr, val);
-#endif
-       default:
-               __asm__ __volatile__(".long     0xd00d00");
-       }
-
-       return 0;
-}
-
-#define xchg(addr, v)                                                  \
-       (__typeof__(*(addr))) _atomic_exchange((addr), (unsigned long)(v), \
-                                              sizeof(*(addr)))
-
-#endif /* #ifndef _INCLUDE_API_H */
-
-#endif /* ARCH_ATOMIC_S390_H */
diff --git a/arch_atomic_x86.h b/arch_atomic_x86.h
deleted file mode 100644 (file)
index 3eedc3f..0000000
+++ /dev/null
@@ -1,404 +0,0 @@
-#ifndef _ARCH_ATOMIC_X86_H
-#define _ARCH_ATOMIC_X86_H
-
-/* 
- * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
- * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
- * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
- * Copyright (c) 2009      Mathieu Desnoyers
- *
- * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- *
- * Permission is hereby granted to use or copy this program
- * for any purpose,  provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
- *
- * Code inspired from libatomic_ops-1.2, inherited in part from the
- * Boehm-Demers-Weiser conservative garbage collector.
- */
-
-#include <compiler.h>
-
-#ifndef BITS_PER_LONG
-#define BITS_PER_LONG  (__SIZEOF_LONG__ * 8)
-#endif
-
-#ifndef _INCLUDE_API_H
-
-/*
- * Derived from AO_compare_and_swap() and AO_test_and_set_full().
- */
-
-struct __atomic_dummy {
-       unsigned long v[10];
-};
-#define __hp(x)        ((struct __atomic_dummy *)(x))
-
-#define atomic_set(addr, v)                            \
-do {                                                   \
-       ACCESS_ONCE(*(addr)) = (v);                     \
-} while (0)
-
-#define atomic_read(addr)      ACCESS_ONCE(*(addr))
-
-/* cmpxchg */
-
-static inline __attribute__((always_inline))
-unsigned long _atomic_cmpxchg(void *addr, unsigned long old,
-                             unsigned long _new, int len)
-{
-       switch (len) {
-       case 1:
-       {
-               unsigned char result = old;
-
-               __asm__ __volatile__(
-               "lock; cmpxchgb %2, %1"
-                       : "+a"(result), "+m"(*__hp(addr))
-                       : "q"((unsigned char)_new)
-                       : "memory");
-               return result;
-       }
-       case 2:
-       {
-               unsigned short result = old;
-
-               __asm__ __volatile__(
-               "lock; cmpxchgw %2, %1"
-                       : "+a"(result), "+m"(*__hp(addr))
-                       : "r"((unsigned short)_new)
-                       : "memory");
-               return result;
-       }
-       case 4:
-       {
-               unsigned int result = old;
-
-               __asm__ __volatile__(
-               "lock; cmpxchgl %2, %1"
-                       : "+a"(result), "+m"(*__hp(addr))
-                       : "r"((unsigned int)_new)
-                       : "memory");
-               return result;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               unsigned long result = old;
-
-               __asm__ __volatile__(
-               "lock; cmpxchgq %2, %1"
-                       : "+a"(result), "+m"(*__hp(addr))
-                       : "r"((unsigned long)_new)
-                       : "memory");
-               return result;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__("ud2");
-       return 0;
-}
-
-#define cmpxchg(addr, old, _new)                                           \
-       ((__typeof__(*(addr))) _atomic_cmpxchg((addr), (unsigned long)(old),\
-                                               (unsigned long)(_new),      \
-                                               sizeof(*(addr))))
-
-/* xchg */
-
-static inline __attribute__((always_inline))
-unsigned long _atomic_exchange(void *addr, unsigned long val, int len)
-{
-       /* Note: the "xchg" instruction does not need a "lock" prefix. */
-       switch (len) {
-       case 1:
-       {
-               unsigned char result;
-               __asm__ __volatile__(
-               "xchgb %0, %1"
-                       : "=q"(result), "+m"(*__hp(addr))
-                       : "0" ((unsigned char)val)
-                       : "memory");
-               return result;
-       }
-       case 2:
-       {
-               unsigned short result;
-               __asm__ __volatile__(
-               "xchgw %0, %1"
-                       : "=r"(result), "+m"(*__hp(addr))
-                       : "0" ((unsigned short)val)
-                       : "memory");
-               return result;
-       }
-       case 4:
-       {
-               unsigned int result;
-               __asm__ __volatile__(
-               "xchgl %0, %1"
-                       : "=r"(result), "+m"(*__hp(addr))
-                       : "0" ((unsigned int)val)
-                       : "memory");
-               return result;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               unsigned long result;
-               __asm__ __volatile__(
-               "xchgq %0, %1"
-                       : "=r"(result), "+m"(*__hp(addr))
-                       : "0" ((unsigned long)val)
-                       : "memory");
-               return result;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__("ud2");
-       return 0;
-}
-
-#define xchg(addr, v)                                                      \
-       ((__typeof__(*(addr))) _atomic_exchange((addr), (unsigned long)(v), \
-                                               sizeof(*(addr))))
-
-/* atomic_add_return, atomic_sub_return */
-
-static inline __attribute__((always_inline))
-unsigned long _atomic_add_return(void *addr, unsigned long val,
-                                int len)
-{
-       switch (len) {
-       case 1:
-       {
-               unsigned char result = val;
-
-               __asm__ __volatile__(
-               "lock; xaddb %1, %0"
-                       : "+m"(*__hp(addr)), "+q" (result)
-                       :
-                       : "memory");
-               return result + (unsigned char)val;
-       }
-       case 2:
-       {
-               unsigned short result = val;
-
-               __asm__ __volatile__(
-               "lock; xaddw %1, %0"
-                       : "+m"(*__hp(addr)), "+r" (result)
-                       :
-                       : "memory");
-               return result + (unsigned short)val;
-       }
-       case 4:
-       {
-               unsigned int result = val;
-
-               __asm__ __volatile__(
-               "lock; xaddl %1, %0"
-                       : "+m"(*__hp(addr)), "+r" (result)
-                       :
-                       : "memory");
-               return result + (unsigned int)val;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               unsigned long result = val;
-
-               __asm__ __volatile__(
-               "lock; xaddq %1, %0"
-                       : "+m"(*__hp(addr)), "+r" (result)
-                       :
-                       : "memory");
-               return result + (unsigned long)val;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__("ud2");
-       return 0;
-}
-
-#define atomic_add_return(addr, v)                                     \
-       ((__typeof__(*(addr))) _atomic_add_return((addr),               \
-                                                 (unsigned long)(v),   \
-                                                 sizeof(*(addr))))
-
-#define atomic_sub_return(addr, v)     atomic_add_return((addr), -(v))
-
-/* atomic_add, atomic_sub */
-
-static inline __attribute__((always_inline))
-void _atomic_add(void *addr, unsigned long val, int len)
-{
-       switch (len) {
-       case 1:
-       {
-               __asm__ __volatile__(
-               "lock; addb %1, %0"
-                       : "=m"(*__hp(addr))
-                       : "iq" ((unsigned char)val)
-                       : "memory");
-               return;
-       }
-       case 2:
-       {
-               __asm__ __volatile__(
-               "lock; addw %1, %0"
-                       : "=m"(*__hp(addr))
-                       : "ir" ((unsigned short)val)
-                       : "memory");
-               return;
-       }
-       case 4:
-       {
-               __asm__ __volatile__(
-               "lock; addl %1, %0"
-                       : "=m"(*__hp(addr))
-                       : "ir" ((unsigned int)val)
-                       : "memory");
-               return;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               __asm__ __volatile__(
-               "lock; addq %1, %0"
-                       : "=m"(*__hp(addr))
-                       : "er" ((unsigned long)val)
-                       : "memory");
-               return;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__("ud2");
-       return;
-}
-
-#define atomic_add(addr, v)                                               \
-       (_atomic_add((addr), (unsigned long)(v), sizeof(*(addr))))
-
-#define atomic_sub(addr, v)    atomic_add((addr), -(v))
-
-
-/* atomic_inc */
-
-static inline __attribute__((always_inline))
-void _atomic_inc(void *addr, int len)
-{
-       switch (len) {
-       case 1:
-       {
-               __asm__ __volatile__(
-               "lock; incb %0"
-                       : "=m"(*__hp(addr))
-                       :
-                       : "memory");
-               return;
-       }
-       case 2:
-       {
-               __asm__ __volatile__(
-               "lock; incw %0"
-                       : "=m"(*__hp(addr))
-                       :
-                       : "memory");
-               return;
-       }
-       case 4:
-       {
-               __asm__ __volatile__(
-               "lock; incl %0"
-                       : "=m"(*__hp(addr))
-                       :
-                       : "memory");
-               return;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               __asm__ __volatile__(
-               "lock; incq %0"
-                       : "=m"(*__hp(addr))
-                       :
-                       : "memory");
-               return;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__("ud2");
-       return;
-}
-
-#define atomic_inc(addr)       (_atomic_inc((addr), sizeof(*(addr))))
-
-/* atomic_dec */
-
-static inline __attribute__((always_inline))
-void _atomic_dec(void *addr, int len)
-{
-       switch (len) {
-       case 1:
-       {
-               __asm__ __volatile__(
-               "lock; decb %0"
-                       : "=m"(*__hp(addr))
-                       :
-                       : "memory");
-               return;
-       }
-       case 2:
-       {
-               __asm__ __volatile__(
-               "lock; decw %0"
-                       : "=m"(*__hp(addr))
-                       :
-                       : "memory");
-               return;
-       }
-       case 4:
-       {
-               __asm__ __volatile__(
-               "lock; decl %0"
-                       : "=m"(*__hp(addr))
-                       :
-                       : "memory");
-               return;
-       }
-#if (BITS_PER_LONG == 64)
-       case 8:
-       {
-               __asm__ __volatile__(
-               "lock; decq %0"
-                       : "=m"(*__hp(addr))
-                       :
-                       : "memory");
-               return;
-       }
-#endif
-       }
-       /* generate an illegal instruction. Cannot catch this with linker tricks
-        * when optimizations are disabled. */
-       __asm__ __volatile__("ud2");
-       return;
-}
-
-#define atomic_dec(addr)       (_atomic_dec((addr), sizeof(*(addr))))
-
-#endif /* #ifndef _INCLUDE_API_H */
-
-#endif /* ARCH_ATOMIC_X86_H */
diff --git a/arch_ppc.h b/arch_ppc.h
deleted file mode 100644 (file)
index 9c4ec91..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#ifndef _ARCH_PPC_H
-#define _ARCH_PPC_H
-
-/*
- * arch_ppc.h: trivial definitions for the powerpc architecture.
- *
- * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-*
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <compiler.h>
-#include <arch_atomic.h>
-
-#define CONFIG_HAVE_FENCE 1
-#define CONFIG_HAVE_MEM_COHERENCY
-
-#ifndef BITS_PER_LONG
-#define BITS_PER_LONG  (__SIZEOF_LONG__ * 8)
-#endif
-
-#define mb()    asm volatile("sync":::"memory")
-#define rmb()   asm volatile("sync":::"memory")
-#define wmb()   asm volatile("sync"::: "memory")
-
-/*
- * Architectures without cache coherency need something like the following:
- *
- * #define mb()                mc()
- * #define rmb()       rmc()
- * #define wmb()       wmc()
- * #define mc()                arch_cache_flush()
- * #define rmc()       arch_cache_flush_read()
- * #define wmc()       arch_cache_flush_write()
- */
-
-#define mc()   barrier()
-#define rmc()  barrier()
-#define wmc()  barrier()
-
-/* Assume SMP machine, given we don't have this information */
-#define CONFIG_SMP 1
-
-#ifdef CONFIG_SMP
-#define smp_mb()       mb()
-#define smp_rmb()      rmb()
-#define smp_wmb()      wmb()
-#define smp_mc()       mc()
-#define smp_rmc()      rmc()
-#define smp_wmc()      wmc()
-#else
-#define smp_mb()       barrier()
-#define smp_rmb()      barrier()
-#define smp_wmb()      barrier()
-#define smp_mc()       barrier()
-#define smp_rmc()      barrier()
-#define smp_wmc()      barrier()
-#endif
-
-/* Nop everywhere except on alpha. */
-#define smp_read_barrier_depends()
-
-static inline void cpu_relax(void)
-{
-       barrier();
-}
-
-/*
- * Serialize core instruction execution. Also acts as a compiler barrier.
- */
-static inline void sync_core()
-{
-       asm volatile("isync" : : : "memory");
-}
-
-#define mftbl()                                                \
-       ({                                              \
-               unsigned long rval;                     \
-               asm volatile("mftbl %0" : "=r" (rval)); \
-               rval;                                   \
-       })
-
-#define mftbu()                                                \
-       ({                                              \
-               unsigned long rval;                     \
-               asm volatile("mftbu %0" : "=r" (rval)); \
-               rval;                                   \
-       })
-
-typedef unsigned long long cycles_t;
-
-static inline cycles_t get_cycles (void)
-{
-       long h, l;
-
-       for (;;) {
-               h = mftbu();
-               barrier();
-               l = mftbl();
-               barrier();
-               if (mftbu() == h)
-                       return (((cycles_t) h) << 32) + l;
-       }
-}
-
-#endif /* _ARCH_PPC_H */
diff --git a/arch_s390.h b/arch_s390.h
deleted file mode 100644 (file)
index dba7240..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef _ARCH_S390_H
-#define _ARCH_S390_H
-
-/*
- * Trivial definitions for the S390 architecture based on information from the
- * Principles of Operation "CPU Serialization" (5-91), "BRANCH ON CONDITION"
- * (7-25) and "STORE CLOCK" (7-169).
- *
- * Copyright (c) 2009 Novell, Inc.
- * Author: Jan Blunck <jblunck@suse.de>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-#include <compiler.h>
-#include <arch_atomic.h>
-
-#define CONFIG_HAVE_MEM_COHERENCY
-/* Assume SMP machine, given we don't have this information */
-#define CONFIG_SMP 1
-
-#ifndef BITS_PER_LONG
-#define BITS_PER_LONG  (__SIZEOF_LONG__ * 8)
-#endif
-
-#define mb()    __asm__ __volatile__("bcr 15,0" : : : "memory")
-#define rmb()   __asm__ __volatile__("bcr 15,0" : : : "memory");
-#define wmb()   __asm__ __volatile__("bcr 15,0" : : : "memory");
-#define mc()   barrier()
-#define rmc()  barrier()
-#define wmc()  barrier()
-
-#define smp_mb()       mb()
-#define smp_rmb()      rmb()
-#define smp_wmb()      wmb()
-#define smp_mc()       mc()
-#define smp_rmc()      rmc()
-#define smp_wmc()      wmc()
-
-/* Nop everywhere except on alpha. */
-#define smp_read_barrier_depends()
-
-static inline void cpu_relax(void)
-{
-       barrier();
-}
-
-static inline void sync_core()
-{
-       __asm__ __volatile__("bcr 15,0" : : : "memory");
-}
-
-typedef unsigned long long cycles_t;
-
-static inline cycles_t get_cycles (void)
-{
-       cycles_t cycles;
-
-       __asm__ __volatile__("stck %0" : "=m" (cycles) : : "cc", "memory" );
-
-       return cycles;
-}
-
-#endif /* _ARCH_S390_H */
diff --git a/arch_x86.h b/arch_x86.h
deleted file mode 100644 (file)
index 8a57325..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-#ifndef _ARCH_X86_H
-#define _ARCH_X86_H
-
-/*
- * arch_x86.h: trivial definitions for the x86 architecture.
- *
- * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
-*
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <compiler.h>
-#include <arch_atomic.h>
-
-/* Assume P4 or newer */
-#define CONFIG_HAVE_FENCE 1
-#define CONFIG_HAVE_MEM_COHERENCY
-
-#ifndef BITS_PER_LONG
-#define BITS_PER_LONG  (__SIZEOF_LONG__ * 8)
-#endif
-
-#ifdef CONFIG_HAVE_FENCE
-#define mb()    asm volatile("mfence":::"memory")
-#define rmb()   asm volatile("lfence":::"memory")
-#define wmb()   asm volatile("sfence"::: "memory")
-#else
-/*
- * Some non-Intel clones support out of order store. wmb() ceases to be a
- * nop for these.
- */
-#define mb()    asm volatile("lock; addl $0,0(%%esp)":::"memory")
-#define rmb()   asm volatile("lock; addl $0,0(%%esp)":::"memory")
-#define wmb()   asm volatile("lock; addl $0,0(%%esp)"::: "memory")
-#endif
-
-/*
- * Architectures without cache coherency need something like the following:
- *
- * #define mb()                mc()
- * #define rmb()       rmc()
- * #define wmb()       wmc()
- * #define mc()                arch_cache_flush()
- * #define rmc()       arch_cache_flush_read()
- * #define wmc()       arch_cache_flush_write()
- */
-
-#define mc()   barrier()
-#define rmc()  barrier()
-#define wmc()  barrier()
-
-/* Assume SMP machine, given we don't have this information */
-#define CONFIG_SMP 1
-
-#ifdef CONFIG_SMP
-#define smp_mb()       mb()
-#define smp_rmb()      rmb()
-#define smp_wmb()      wmb()
-#define smp_mc()       mc()
-#define smp_rmc()      rmc()
-#define smp_wmc()      wmc()
-#else
-#define smp_mb()       barrier()
-#define smp_rmb()      barrier()
-#define smp_wmb()      barrier()
-#define smp_mc()       barrier()
-#define smp_rmc()      barrier()
-#define smp_wmc()      barrier()
-#endif
-
-/* Nop everywhere except on alpha. */
-#define smp_read_barrier_depends()
-
-static inline void rep_nop(void)
-{
-       asm volatile("rep; nop" : : : "memory");
-}
-
-static inline void cpu_relax(void)
-{
-       rep_nop();
-}
-
-/*
- * Serialize core instruction execution. Also acts as a compiler barrier.
- */
-#ifdef __PIC__
-/*
- * Cannot use cpuid because it clobbers the ebx register and clashes
- * with -fPIC :
- * error: PIC register 'ebx' clobbered in 'asm'
- */
-static inline void sync_core(void)
-{
-       mb();
-}
-#else
-static inline void sync_core(void)
-{
-       asm volatile("cpuid" : : : "memory", "eax", "ebx", "ecx", "edx");
-}
-#endif
-
-#define rdtscll(val)                                                     \
-       do {                                                              \
-            unsigned int __a, __d;                                       \
-            asm volatile("rdtsc" : "=a" (__a), "=d" (__d));              \
-            (val) = ((unsigned long long)__a)                            \
-                       | (((unsigned long long)__d) << 32);              \
-       } while(0)
-
-typedef unsigned long long cycles_t;
-
-static inline cycles_t get_cycles(void)
-{
-        cycles_t ret = 0;
-
-        rdtscll(ret);
-        return ret;
-}
-
-#endif /* _ARCH_X86_H */
diff --git a/bootstrap b/bootstrap
new file mode 100755 (executable)
index 0000000..c507425
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+set -x
+if [ ! -e config ]; then
+       mkdir config
+fi
+aclocal
+libtoolize --force --copy
+autoheader
+automake --add-missing --copy
+autoconf
+
diff --git a/compat_arch_x86.c b/compat_arch_x86.c
new file mode 100644 (file)
index 0000000..714201b
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+ * compat_arch_x86.c
+ *
+ * Userspace RCU library - x86 compatibility checks
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdio.h>
+#include <pthread.h>
+#include <signal.h>
+#include <assert.h>
+#include <urcu/uatomic.h>
+
+/*
+ * It does not really matter if the constructor is called before using
+ * the library, as long as the caller checks if __rcu_cas_avail < 0 and calls
+ * compat_arch_init() explicitely if needed.
+ */
+int __attribute__((constructor)) __rcu_cas_init(void);
+
+/*
+ * -1: unknown
+ *  1: available
+ *  0: unavailable
+ */
+int __rcu_cas_avail = -1;
+
+static pthread_mutex_t compat_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/*
+ * get_eflags/set_eflags/compare_and_swap_is_available imported from glibc
+ * 2.3.5. linuxthreads/sysdeps/i386/pt-machine.h.
+ */
+
+static int get_eflags (void)
+{
+       int res;
+       __asm__ __volatile__ ("pushfl; popl %0" : "=r" (res) : );
+       return res;
+}
+
+static void set_eflags (int newflags)
+{
+       __asm__ __volatile__ ("pushl %0; popfl" : : "r" (newflags) : "cc");
+}
+
+static int compare_and_swap_is_available (void)
+{
+       int oldflags = get_eflags ();
+       int changed;
+       /* Flip AC bit in EFLAGS.  */
+       set_eflags (oldflags ^ 0x40000);
+       /* See if bit changed.  */
+       changed = (get_eflags () ^ oldflags) & 0x40000;
+       /* Restore EFLAGS.  */
+       set_eflags (oldflags);
+       /* If the AC flag did not change, it's a 386 and it lacks cmpxchg.
+       Otherwise, it's a 486 or above and it has cmpxchg.  */
+       return changed != 0;
+}
+
+static void mutex_lock_signal_save(pthread_mutex_t *mutex, sigset_t *oldmask)
+{
+       sigset_t newmask;
+       int ret;
+
+       /* Disable signals */
+       ret = sigemptyset(&newmask);
+       assert(!ret);
+       ret = pthread_sigmask(SIG_SETMASK, &newmask, oldmask);
+       assert(!ret);
+       ret = pthread_mutex_lock(&compat_mutex);
+       assert(!ret);
+}
+
+static void mutex_lock_signal_restore(pthread_mutex_t *mutex, sigset_t *oldmask)
+{
+       int ret;
+
+       ret = pthread_mutex_unlock(&compat_mutex);
+       assert(!ret);
+       ret = pthread_sigmask(SIG_SETMASK, oldmask, NULL);
+       assert(!ret);
+}
+
+unsigned long _compat_uatomic_set(void *addr, unsigned long _new, int len)
+{
+       sigset_t mask;
+       unsigned long result;
+
+       mutex_lock_signal_save(&compat_mutex, &mask);
+       switch (len) {
+       case 1:
+               *(unsigned char *)addr = (unsigned char)_new;
+               result = *(unsigned char *)addr;
+               break;
+       case 2:
+               *(unsigned short *)addr = (unsigned short)_new;
+               result = *(unsigned short *)addr;
+               break;
+       case 4:
+               *(unsigned int *)addr = (unsigned int)_new;
+               result = *(unsigned int *)addr;
+               break;
+       default:
+               /*
+                * generate an illegal instruction. Cannot catch this with
+                * linker tricks when optimizations are disabled.
+                */
+               result = 0;
+               __asm__ __volatile__("ud2");
+       }
+       mutex_lock_signal_restore(&compat_mutex, &mask);
+       return result;
+}
+
+unsigned long _compat_uatomic_xchg(void *addr, unsigned long _new, int len)
+{
+       sigset_t mask;
+       unsigned long retval;
+
+       mutex_lock_signal_save(&compat_mutex, &mask);
+       switch (len) {
+       case 1:
+               retval = *(unsigned char *)addr;
+               *(unsigned char *)addr = (unsigned char)_new;
+               break;
+       case 2:
+               retval = *(unsigned short *)addr;
+               *(unsigned short *)addr = (unsigned short)_new;
+               break;
+       case 4:
+               retval = *(unsigned int *)addr;
+               *(unsigned int *)addr = (unsigned int)_new;
+               break;
+       default:
+               /*
+                * generate an illegal instruction. Cannot catch this with
+                * linker tricks when optimizations are disabled.
+                */
+               retval = 0;     /* silence gcc warnings */
+               __asm__ __volatile__("ud2");
+       }
+       mutex_lock_signal_restore(&compat_mutex, &mask);
+       return retval;
+}
+
+unsigned long _compat_uatomic_cmpxchg(void *addr, unsigned long old,
+                                     unsigned long _new, int len)
+{
+       unsigned long retval;
+       sigset_t mask;
+
+       mutex_lock_signal_save(&compat_mutex, &mask);
+       switch (len) {
+       case 1:
+       {
+               unsigned char result = *(unsigned char *)addr;
+               if (result == (unsigned char)old)
+                       *(unsigned char *)addr = (unsigned char)_new;
+               retval = result;
+               break;
+       }
+       case 2:
+       {
+               unsigned short result = *(unsigned short *)addr;
+               if (result == (unsigned short)old)
+                       *(unsigned short *)addr = (unsigned short)_new;
+               retval = result;
+               break;
+       }
+       case 4:
+       {
+               unsigned int result = *(unsigned int *)addr;
+               if (result == (unsigned int)old)
+                       *(unsigned int *)addr = (unsigned int)_new;
+               retval = result;
+               break;
+       }
+       default:
+               /*
+                * generate an illegal instruction. Cannot catch this with
+                * linker tricks when optimizations are disabled.
+                */
+               retval = 0;     /* silence gcc warnings */
+               __asm__ __volatile__("ud2");
+       }
+       mutex_lock_signal_restore(&compat_mutex, &mask);
+       return retval;
+}
+
+void _compat_uatomic_or(void *addr, unsigned long v, int len)
+{
+       sigset_t mask;
+
+       mutex_lock_signal_save(&compat_mutex, &mask);
+       switch (len) {
+       case 1:
+               *(unsigned char *)addr |= (unsigned char)v;
+               break;
+       case 2:
+               *(unsigned short *)addr |= (unsigned short)v;
+               break;
+       case 4:
+               *(unsigned int *)addr |= (unsigned int)v;
+               break;
+       default:
+               /*
+                * generate an illegal instruction. Cannot catch this with
+                * linker tricks when optimizations are disabled.
+                */
+               __asm__ __volatile__("ud2");
+       }
+       mutex_lock_signal_restore(&compat_mutex, &mask);
+}
+
+void _compat_uatomic_and(void *addr, unsigned long v, int len)
+{
+       sigset_t mask;
+
+       mutex_lock_signal_save(&compat_mutex, &mask);
+       switch (len) {
+       case 1:
+               *(unsigned char *)addr &= (unsigned char)v;
+               break;
+       case 2:
+               *(unsigned short *)addr &= (unsigned short)v;
+               break;
+       case 4:
+               *(unsigned int *)addr &= (unsigned int)v;
+               break;
+       default:
+               /*
+                * generate an illegal instruction. Cannot catch this with
+                * linker tricks when optimizations are disabled.
+                */
+               __asm__ __volatile__("ud2");
+       }
+       mutex_lock_signal_restore(&compat_mutex, &mask);
+}
+
+unsigned long _compat_uatomic_add_return(void *addr, unsigned long v, int len)
+{
+       sigset_t mask;
+       unsigned long result;
+
+       mutex_lock_signal_save(&compat_mutex, &mask);
+       switch (len) {
+       case 1:
+               *(unsigned char *)addr += (unsigned char)v;
+               result = *(unsigned char *)addr;
+               break;
+       case 2:
+               *(unsigned short *)addr += (unsigned short)v;
+               result = *(unsigned short *)addr;
+               break;
+       case 4:
+               *(unsigned int *)addr += (unsigned int)v;
+               result = *(unsigned int *)addr;
+               break;
+       default:
+               /*
+                * generate an illegal instruction. Cannot catch this with
+                * linker tricks when optimizations are disabled.
+                */
+               result = 0;     /* silence gcc warnings */
+               __asm__ __volatile__("ud2");
+       }
+       mutex_lock_signal_restore(&compat_mutex, &mask);
+       return result;
+}
+
+int __rcu_cas_init(void)
+{
+       if (__rcu_cas_avail < 0)
+               __rcu_cas_avail = compare_and_swap_is_available();
+       return __rcu_cas_avail;
+}
diff --git a/compat_futex.c b/compat_futex.c
new file mode 100644 (file)
index 0000000..04de596
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * compat_futex.c
+ *
+ * Userspace RCU library - sys_futex compatibility code
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdio.h>
+#include <pthread.h>
+#include <signal.h>
+#include <assert.h>
+#include <errno.h>
+#include <poll.h>
+#include <stdint.h>
+
+#include <urcu/arch.h>
+#include <urcu/futex.h>
+
+static pthread_mutex_t compat_futex_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t compat_futex_cond = PTHREAD_COND_INITIALIZER;
+
+/*
+ * _NOT SIGNAL-SAFE_. pthread_cond is not signal-safe anyway. Though.
+ * For now, timeout, uaddr2 and val3 are unused.
+ * Waiter will relinquish the CPU until woken up.
+ */
+
+int compat_futex_noasync(int32_t *uaddr, int op, int32_t val,
+       const struct timespec *timeout, int32_t *uaddr2, int32_t val3)
+{
+       int ret, i, gret = 0;
+
+       /*
+        * Check if NULL. Don't let users expect that they are taken into
+        * account. 
+        */
+       assert(!timeout);
+       assert(!uaddr2);
+       assert(!val3);
+
+       /*
+        * memory barriers to serialize with the previous uaddr modification.
+        */
+       cmm_smp_mb();
+
+       ret = pthread_mutex_lock(&compat_futex_lock);
+       assert(!ret);
+       switch (op) {
+       case FUTEX_WAIT:
+               if (*uaddr != val)
+                       goto end;
+               pthread_cond_wait(&compat_futex_cond, &compat_futex_lock);
+               break;
+       case FUTEX_WAKE:
+               for (i = 0; i < val; i++)
+                       pthread_cond_signal(&compat_futex_cond);
+               break;
+       default:
+               gret = -EINVAL;
+       }
+end:
+       ret = pthread_mutex_unlock(&compat_futex_lock);
+       assert(!ret);
+       return gret;
+}
+
+/*
+ * _ASYNC SIGNAL-SAFE_.
+ * For now, timeout, uaddr2 and val3 are unused.
+ * Waiter will busy-loop trying to read the condition.
+ */
+
+int compat_futex_async(int32_t *uaddr, int op, int32_t val,
+       const struct timespec *timeout, int32_t *uaddr2, int32_t val3)
+{
+       /*
+        * Check if NULL. Don't let users expect that they are taken into
+        * account. 
+        */
+       assert(!timeout);
+       assert(!uaddr2);
+       assert(!val3);
+
+       /*
+        * Ensure previous memory operations on uaddr have completed.
+        */
+       cmm_smp_mb();
+
+       switch (op) {
+       case FUTEX_WAIT:
+               while (*uaddr == val)
+                       poll(NULL, 0, 10);
+               break;
+       case FUTEX_WAKE:
+               break;
+       default:
+               return -EINVAL;
+       }
+       return 0;
+}
diff --git a/compiler.h b/compiler.h
deleted file mode 100644 (file)
index 99972f3..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef _COMPILER_H
-#define _COMPILER_H
-
-/*
- * compiler.h
- *
- * Compiler definitions.
- *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- *
- * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
- *
- * Permission is hereby granted to use or copy this program
- * for any purpose,  provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
- */
-
-#define likely(x)      __builtin_expect(!!(x), 1)
-#define unlikely(x)    __builtin_expect(!!(x), 0)
-
-#define        barrier()       asm volatile("" : : : "memory");
-
-/*
- * Instruct the compiler to perform only a single access to a variable
- * (prohibits merging and refetching). The compiler is also forbidden to reorder
- * successive instances of ACCESS_ONCE(), but only when the compiler is aware of
- * particular ordering. Compiler ordering can be ensured, for example, by
- * putting two ACCESS_ONCE() in separate C statements.
- *
- * This macro does absolutely -nothing- to prevent the CPU from reordering,
- * merging, or refetching absolutely anything at any time.  Its main intended
- * use is to mediate communication between process-level code and irq/NMI
- * handlers, all running on the same CPU.
- */
-#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&x)
-
-#if (__GNUC__ == 4)
-#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
-#endif
-
-#ifdef __compiler_offsetof
-#define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
-#else
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-#endif
-
-#endif /* _COMPILER_H */
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..e4105c3
--- /dev/null
@@ -0,0 +1,256 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+
+AC_INIT([userspace-rcu], [0.6.3], [mathieu dot desnoyers at efficios dot com])
+
+# Following the numbering scheme proposed by libtool for the library version
+# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
+AC_SUBST([URCU_LIBRARY_VERSION], [1:0:0])
+
+AC_CONFIG_AUX_DIR([config])
+AC_CANONICAL_TARGET
+AC_CANONICAL_HOST
+AM_INIT_AUTOMAKE([foreign dist-bzip2 no-dist-gzip])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_CONFIG_SRCDIR([urcu.h])
+AM_PROG_MKDIR_P
+
+AC_CONFIG_HEADERS([config.h urcu/config.h])
+
+# Keep at the end to do not pollute installed header.
+AH_TEMPLATE([CONFIG_RCU_SMP], [Enable SMP support. With SMP support enabled, uniprocessors are also supported. With SMP support disabled, UP systems work fine, but the behavior of SMP systems is undefined.])
+AH_TEMPLATE([CONFIG_RCU_HAVE_FENCE], [Defined when on a system that has memory fence instructions.])
+AH_TEMPLATE([CONFIG_RCU_HAVE_FUTEX], [Defined when on a system with futex support.])
+AH_TEMPLATE([CONFIG_RCU_COMPAT_ARCH], [Compatibility mode for i386 which lacks
+cmpxchg instruction.])
+AH_TEMPLATE([CONFIG_RCU_ARM_HAVE_DMB], [Use the dmb instruction is available for use on ARM.])
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_MAKE_SET
+AC_PROG_LIBTOOL
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_INLINE
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_FUNC_MALLOC
+AC_FUNC_MMAP
+AC_CHECK_FUNCS([bzero gettimeofday munmap sched_getcpu strtoul sysconf])
+
+# Find arch type
+case $host_cpu in
+       i386) ARCHTYPE="x86"; SUBARCHTYPE="x86compat" ;;
+       i486) ARCHTYPE="x86";;
+       i586) ARCHTYPE="x86";;
+       i686) ARCHTYPE="x86";;
+       x86_64) ARCHTYPE="x86";;
+       powerpc) ARCHTYPE="ppc" ;;
+       ppc64) ARCHTYPE="ppc" ;;
+       powerpc64) ARCHTYPE="ppc" ;;
+       ppc) ARCHTYPE="ppc" ;;
+       s390) ARCHTYPE="s390" ;;
+       s390x) ARCHTYPE="s390" ;;
+       sparc64) ARCHTYPE="sparc64" ;;
+       alpha*) ARCHTYPE="alpha" ;;
+       ia64) ARCHTYPE="gcc" ;;
+       arm*) ARCHTYPE="arm" ;;
+       *) ARCHTYPE="unknown";;
+esac
+
+if test "x$ARCHTYPE" = "xarm" ; then
+AC_MSG_CHECKING([checking for dmb instruction])
+AC_TRY_COMPILE(
+[
+],
+[
+asm volatile("dmb":::"memory");
+],
+[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE([CONFIG_RCU_ARM_HAVE_DMB], [1])
+]
+,
+[
+       AC_MSG_RESULT([no])
+]
+)
+fi
+
+UATOMICSRC=urcu/uatomic/$ARCHTYPE.h
+ARCHSRC=urcu/arch/$ARCHTYPE.h
+if test "x$ARCHTYPE" != xx86 -a "x$ARCHTYPE" != xppc; then
+       APISRC=tests/api_gcc.h
+else
+       APISRC=tests/api_$ARCHTYPE.h
+fi
+if test "$ARCHTYPE" == "armv7l"; then
+       CFLAGS="-mcpu=cortex-a9 -mtune=cortex-a9 -O"
+fi
+
+AC_SUBST(ARCHTYPE)
+AC_SUBST(SUBARCHTYPE)
+
+[
+#if test "x$ARCHTYPE" = "xx86" -a "x$host_cpu" != "xi386" -a "x$host_cpu" != "xi486" -a "x$host_cpu" != "xi586"; then
+#For now, using lock; addl compatibility mode even for i686, because the
+#Pentium III is seen as a i686, but lacks mfence instruction.
+#Only using fence for x86_64.
+if test "x$ARCHTYPE" = "xx86" -a "x$host_cpu" != "xi386" -a "x$host_cpu" != "xi486" -a "x$host_cpu" != "xi586" -a "x$host_cpu" != "xi686"; then
+]
+       AC_DEFINE([CONFIG_RCU_HAVE_FENCE], [1])
+[
+fi
+]
+
+AC_MSG_CHECKING([sys_futex()])
+AC_TRY_COMPILE(
+[
+#include <sys/syscall.h>
+],
+[
+#ifndef __NR_futex
+#error "futexes not available"
+#endif
+],
+[
+       AC_MSG_RESULT([yes])
+       AC_DEFINE([CONFIG_RCU_HAVE_FUTEX], [1])
+       compat_futex_test=0
+]
+,
+[
+       AC_MSG_RESULT([no])
+       compat_futex_test=1
+]
+)
+
+AM_CONDITIONAL([COMPAT_FUTEX], [ test "x$compat_futex_test" = "x1" ])
+
+AM_CONDITIONAL([COMPAT_ARCH], [test "x$SUBARCHTYPE" = xx86compat ])
+
+[
+if test "x$SUBARCHTYPE" = xx86compat; then
+]
+       AC_DEFINE([CONFIG_RCU_COMPAT_ARCH], [1])
+[
+fi
+]
+
+AC_ARG_ENABLE([smp-support], [  --disable-smp-support   Disable SMP support. Warning: only use this
+                          on uniprocessor systems. [[default=enabled]]], [def_smp_support=$enableval], [def_smp_support="yes"])
+
+[
+if test "$def_smp_support" = "no"; then
+       echo "SMP support disabled."
+else
+]
+       AC_DEFINE([CONFIG_RCU_SMP], [1])
+[
+       echo "SMP support enabled."
+fi
+]
+
+# From the sched_setaffinity(2)'s man page:
+# ~~~~
+# The CPU affinity system calls were introduced in Linux kernel 2.5.8.
+# The library interfaces were introduced in glibc 2.3.  Initially, the
+# glibc interfaces included a cpusetsize argument.  In glibc 2.3.3,
+# the cpuset size argument was removed, but this argument was
+# restored in glibc 2.3.4.
+# ~~~~
+
+# In addition to that, some vendors ported the system call to 2.4
+# kernels.
+
+# Furthermore, when the function first appeared, the MASK argument was
+# an unsigned long pointer, while later it was made into a cpu_set_t
+# pointer.  Systems that have the cpu_set_t version also should have
+# the CPU_ZERO, CPU_SET, etc. macros.
+
+# All this mess means we have to cater for at least 3 different
+# sched_setaffinity prototypes:
+
+# ~~~~
+#  int sched_setaffinity (pid_t pid, unsigned int len, unsigned long *mask);
+#  int sched_setaffinity (pid_t __pid, size_t __cpusetsize, const cpu_set_t *__cpuset);
+#  int sched_setaffinity (pid_t __pid, const cpu_set_t *__mask);
+# ~~~~
+
+dnl Since we define _GNU_SOURCE in the sources, must do so too in the
+dnl autoconf tests, as defining _GNU_SOURCE or not exposes
+dnl sched_setaffinity bits differently.
+saved_CFLAGS=$CFLAGS
+CFLAGS="$CFLAGS -D_GNU_SOURCE"
+
+# First check if the function is available at all.
+AC_CHECK_FUNCS(
+  [sched_setaffinity],
+  [ # Okay, we have it.  Check if also have cpu_set_t.  If we don't,
+    # then we have the first version using unsigned long, and no
+    # CPU_ZERO, etc. macros.  If we do have cpu_set_t, we may have the
+    # version with 2 or 3 arguments.  In that case, CPU_ZERO, etc.,
+    # should also be present, but we confirm nonetheless.
+
+    AC_CHECK_TYPES(
+      [cpu_set_t],
+      [ # We do have it.  Confirm that we have CPU_ZERO, and it actually works.
+       AC_MSG_CHECKING([whether CPU_ZERO works])
+       AH_TEMPLATE([HAVE_CPU_ZERO],
+                   [Define to 1 if we have CPU_ZERO and if it works])
+       AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+           [#define _GNU_SOURCE
+           #include <sched.h>],
+           [cpu_set_t foo; CPU_ZERO (&foo);])
+         ],
+         [ # Works!
+           AC_DEFINE(HAVE_CPU_ZERO, 1)
+           AC_MSG_RESULT([yes])
+         ],
+         [AC_MSG_RESULT([no])]
+       )
+
+       # Check how many arguments does sched_setaffinity take.
+       # Should be 3 or 2.
+       AC_MSG_CHECKING([how many arguments sched_setaffinity takes])
+       AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+           [#include <sched.h>],
+           [cpu_set_t foo; sched_setaffinity (0, sizeof (foo), &foo);])
+         ],
+         [sched_set_affinity_args=3],
+         [sched_set_affinity_args=2])
+       AC_DEFINE_UNQUOTED(SCHED_SETAFFINITY_ARGS, $sched_set_affinity_args,
+        [Define to sched_setaffinity's number of arguments.])
+       AC_MSG_RESULT([$sched_set_affinity_args])
+      ],
+      [ # No cpu_set_t, always 3 args.
+       AC_DEFINE(SCHED_SETAFFINITY_ARGS, 3) ],
+      [#include <sched.h>]
+    )
+  ]
+)
+
+CFLAGS=$saved_CFLAGS
+
+AC_CONFIG_LINKS([
+       urcu/arch.h:$ARCHSRC
+       urcu/uatomic.h:$UATOMICSRC
+       tests/api.h:$APISRC
+])
+AC_CONFIG_FILES([
+       Makefile
+       tests/Makefile
+       liburcu-cds.pc
+       liburcu.pc
+       liburcu-bp.pc
+       liburcu-qsbr.pc
+       liburcu-mb.pc
+       liburcu-signal.pc
+])
+AC_OUTPUT
diff --git a/formal-model/.gitignore b/formal-model/.gitignore
deleted file mode 100644 (file)
index 49fdd8a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-pan
-pan.*
-urcu.spin.trail
diff --git a/formal-model/futex-wakeup/DEFINES b/formal-model/futex-wakeup/DEFINES
deleted file mode 100644 (file)
index e328b55..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define queue_has_entry        (queue[0] == 1 || queue[1] == 1)
diff --git a/formal-model/futex-wakeup/Makefile b/formal-model/futex-wakeup/Makefile
deleted file mode 100644 (file)
index 11d98e8..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#CFLAGS=-DHASH64 -DREACH
-CFLAGS=-DHASH64
-
-#try pan -i to get the smallest trace.
-
-SPINFILE=futex.spin
-SPINFILE_FAIR=futex.spin
-
-default:
-       make futex_progress | tee futex_progress.log
-       make futex_progress_no_wake | tee futex_progress_no_wake.log
-       make futex_progress_late_dec | tee futex_progress_late_dec.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep error *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w19
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-futex_progress: clean futex_ltl run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-futex_progress_no_wake: clean futex_ltl futex_progress_no_wake_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-futex_progress_no_wake_define:
-       cp futex_progress_no_wake.define .input.define
-
-futex_progress_late_dec: clean futex_ltl futex_progress_late_dec_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-futex_progress_late_dec_define:
-       cp futex_progress_late_dec.define .input.define
-
-futex_ltl:
-       touch .input.define
-       cat DEFINES > pan.ltl
-       cat .input.define >> pan.ltl
-       spin -f "!(`cat futex.ltl | grep -v ^//`)" >> pan.ltl
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w19
-
-pan: pan.c
-       gcc -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-run_weak_fair: pan_fair
-       ./pan_fair -a -f -v -c1 -X -m10000000 -w20
-
-pan_fair: pan_fair.c
-       gcc -w ${CFLAGS} -o pan_fair pan_fair.c
-
-pan_fair.c: pan.ltl ${SPINFILE_FAIR}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE_FAIR} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-       mv pan.c pan_fair.c
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/futex-wakeup/futex.ltl b/formal-model/futex-wakeup/futex.ltl
deleted file mode 100644 (file)
index 3d6842e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> ((!np_) || (!queue_has_entry)))
diff --git a/formal-model/futex-wakeup/futex.spin b/formal-model/futex-wakeup/futex.spin
deleted file mode 100644 (file)
index 5459a53..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * futex.spin: Promela code to validate futex wakeup algorithm.
- *
- * Algorithm verified :
- *
- * queue = 0;
- * fut = 0;
- * runvar = 0;
- *
- *                            Waker
- *                            queue = 1;
- *                            if (fut == -1) {
- *                              fut = 0;
- *                            }
- *
- * Waiter
- * while (1) {
- *   progress:
- *   fut = fut - 1;
- *   if (queue == 1) {
- *     fut = 0;
- *   } else {
- *     if (fut == -1) {
- *        while (fut == -1) { }
- *     }
- *   }
- *   queue = 0;
- * }
- *
- * if queue = 1, then !_np
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-#define get_pid()       (_pid)
-
-int queue[2] = 0;
-int fut = 0;
-
-active [2] proctype waker()
-{
-       assert(get_pid() < 2);
-
-       queue[get_pid()] = 1;
-
-       if
-       :: (fut == -1) ->
-               fut = 0;
-       :: else ->
-               skip;
-       fi;
-
-       queue[get_pid()] = 1;
-
-       if
-       :: (fut == -1) ->
-               fut = 0;
-       :: else ->
-               skip;
-       fi;
-
-#ifdef INJ_QUEUE_NO_WAKE
-       queue[get_pid()] = 1;
-#endif
-}
-
-
-active proctype waiter()
-{
-       do
-       :: 1 ->
-#ifndef INJ_LATE_DEC
-               fut = fut - 1;
-#endif
-               if
-               :: (queue[0] == 1 || queue[1] == 1) ->
-#ifndef INJ_LATE_DEC
-                       fut = 0;
-#endif
-                       skip;
-               :: else ->
-#ifdef INJ_LATE_DEC
-                       fut = fut - 1;
-#endif
-                       if
-                       :: (fut == -1) ->
-                               do
-                               :: 1 ->
-                                       if
-                                       :: (fut == -1) ->
-                                               skip;
-                                       :: else ->
-                                               break;
-                                       fi;
-                               od;
-                       :: else ->
-                               skip;
-                       fi;
-               fi;
-progress:
-               if
-               :: queue[0] == 1 ->
-                       queue[0] = 0;
-               fi;
-               if
-               :: queue[1] == 1 ->
-                       queue[1] = 0;
-               fi;
-       od;
-}
diff --git a/formal-model/futex-wakeup/futex_progress_late_dec.define b/formal-model/futex-wakeup/futex_progress_late_dec.define
deleted file mode 100644 (file)
index 01361fb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define INJ_LATE_DEC
diff --git a/formal-model/futex-wakeup/futex_progress_no_wake.define b/formal-model/futex-wakeup/futex_progress_no_wake.define
deleted file mode 100644 (file)
index 527bb77..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define INJ_QUEUE_NO_WAKE
diff --git a/formal-model/ooomem-double-update/DEFINES b/formal-model/ooomem-double-update/DEFINES
deleted file mode 100644 (file)
index 7cf7b24..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define read_one_is_one (read_one == 1)
-#define read_two_is_one (read_two == 1)
-#define read_two_done   (read_two != 2)
diff --git a/formal-model/ooomem-double-update/Makefile b/formal-model/ooomem-double-update/Makefile
deleted file mode 100644 (file)
index 37422b5..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#CFLAGS=-DHASH64 -DREACH
-CFLAGS=-DHASH64
-
-#try pan -i to get the smallest trace.
-
-SPINFILE=mem.spin
-
-default:
-       make read_order | tee read_order.log
-       make read_order_no_wmb | tee read_order_no_wmb.log
-       make read_order_no_rmb | tee read_order_no_rmb.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep error *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000 -w19
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order: clean read_order_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_rmb: clean read_order_ltl read_order_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_rmb_define:
-       cp read_order_no_rmb.define .input.define
-
-read_order_no_wmb: clean read_order_ltl read_order_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_wmb_define:
-       cp read_order_no_wmb.define .input.define
-
-read_order_ltl:
-       touch .input.define
-       cat DEFINES > pan.ltl
-       cat .input.define >> pan.ltl
-       spin -f "!(`cat read_order.ltl | grep -v ^//`)" >> pan.ltl
-
-run: pan
-       ./pan -a -v -c1 -X -m10000 -w19
-
-pan: pan.c
-       gcc -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/ooomem-double-update/mem.sh b/formal-model/ooomem-double-update/mem.sh
deleted file mode 100644 (file)
index 56e8123..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a mem.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/ooomem-double-update/mem.spin b/formal-model/ooomem-double-update/mem.spin
deleted file mode 100644 (file)
index e033f67..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with out-of-order memory
- * and out-of-order instruction scheduling.
- *
- * Algorithm verified :
- *
- * alpha = 0;
- * beta = 0;
- *
- * Process A                  Process B
- * alpha = 1;                 x = beta;
- * wmb();                     rmb();
- * beta = 1;                  y = alpha;
- *
- * if x = 1, then y will = 1 when it is read.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v)         \
-       type mem_##x = v;                       \
-       type cached_##x[NR_PROCS] = v;          \
-       bit cache_dirty_##x[NR_PROCS] = 0;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)                     \
-       (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                 \
-       atomic {                                \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)             \
-       if                                      \
-       :: !IS_CACHE_DIRTY(x, id) ->            \
-               cached_##x[id] = mem_##x;       \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)       \
-       if                                      \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                            \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                                      \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                            \
-       fi;
-
-inline ooo_mem()
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(alpha, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(beta, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(alpha, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(beta, get_pid());
-       }
-}
-
-/* must consume all prior read tokens */
-inline smp_rmb()
-{
-       atomic {
-               /* todo : consume all read tokens .. ? */
-               CACHE_READ_FROM_MEM(alpha, get_pid());
-               CACHE_READ_FROM_MEM(beta, get_pid());
-       }
-}
-
-/* must consume all prior write tokens */
-inline smp_wmb()
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(alpha, get_pid());
-               CACHE_WRITE_TO_MEM(beta, get_pid());
-       }
-}
-
-/* sync_core() must consume all prior read and write tokens, including rmb/wmb
- * tokens */
-
-/* must consume all prior read and write tokens */
-inline smp_mb()
-{
-       atomic {
-               smp_wmb();
-               /* sync_core() */
-               smp_rmb();
-       }
-}
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, alpha, 0);
-DECLARE_CACHED_VAR(byte, beta, 0);
-
-/* value 2 is uninitialized */
-byte read_one = 2;
-byte read_two = 2;
-
-/*
- * Bit encoding, proc_one_produced :
- */
-
-#define P1_PROD_NONE   (1 << 0)
-
-#define P1_READ_ONE    (1 << 1)
-#define P1_RMB         (1 << 2)
-#define P1_READ_TWO    (1 << 3)
-
-/* Only need a single color. */
-byte proc_one_produced;
-
-active proctype test_proc_one()
-{
-       assert(get_pid() < NR_PROCS);
-
-       PRODUCE_TOKENS(proc_one_produced, P1_PROD_NONE);
-#ifdef NO_RMB
-       PRODUCE_TOKENS(proc_one_produced, P1_RMB);
-#endif
-
-       do
-       :: CONSUME_TOKENS(proc_one_produced,
-                       P1_PROD_NONE, P1_READ_ONE) ->
-               ooo_mem();
-               read_one = READ_CACHED_VAR(beta);
-               ooo_mem();
-               PRODUCE_TOKENS(proc_one_produced, P1_READ_ONE);
-       :: CONSUME_TOKENS(proc_one_produced,
-                       P1_READ_ONE, P1_RMB) ->
-               smp_rmb();
-               PRODUCE_TOKENS(proc_one_produced, P1_RMB);
-       :: CONSUME_TOKENS(proc_one_produced,
-                       P1_RMB, P1_READ_TWO) ->
-               ooo_mem();
-               read_two = READ_CACHED_VAR(alpha);
-               ooo_mem();
-               PRODUCE_TOKENS(proc_one_produced, P1_READ_TWO);
-       :: CONSUME_TOKENS(proc_one_produced,
-                       P1_PROD_NONE | P1_READ_ONE | P1_RMB
-                       | P1_READ_TWO, 0) ->
-               break;
-       od;
-
-       //CLEAR_TOKENS(proc_one_produced,
-       //      P1_PROD_NONE | P1_READ_ONE | P1_RMB | P1_READ_TWO);
-
-       // test : [] (read_one == 1 -> read_two == 1)
-       assert(read_one != 1 || read_two == 1);
-}
-
-
-/*
- * Bit encoding, proc_two_produced :
- */
-
-#define P2_PROD_NONE   (1 << 0)
-
-#define P2_WRITE_ONE   (1 << 1)
-#define P2_WMB         (1 << 2)
-#define P2_WRITE_TWO   (1 << 3)
-
-/* Only need a single color. */
-byte proc_two_produced;
-
-active proctype test_proc_two()
-{
-       assert(get_pid() < NR_PROCS);
-
-       PRODUCE_TOKENS(proc_two_produced, P2_PROD_NONE);
-#ifdef NO_WMB
-       PRODUCE_TOKENS(proc_two_produced, P2_WMB);
-#endif
-
-       do
-       :: CONSUME_TOKENS(proc_two_produced,
-                       P2_PROD_NONE, P2_WRITE_ONE) ->
-               ooo_mem();
-               WRITE_CACHED_VAR(alpha, 1);
-               ooo_mem();
-               PRODUCE_TOKENS(proc_two_produced, P2_WRITE_ONE);
-       :: CONSUME_TOKENS(proc_two_produced,
-                       P2_WRITE_ONE, P2_WMB) ->
-               smp_wmb();
-               PRODUCE_TOKENS(proc_two_produced, P2_WMB);
-       :: CONSUME_TOKENS(proc_two_produced,
-                       P2_WMB, P2_WRITE_TWO) ->
-               ooo_mem();
-               WRITE_CACHED_VAR(beta, 1);
-               ooo_mem();
-               PRODUCE_TOKENS(proc_two_produced, P2_WRITE_TWO);
-       :: CONSUME_TOKENS(proc_two_produced,
-                       P2_PROD_NONE | P2_WRITE_ONE
-                       | P2_WMB | P2_WRITE_TWO, 0) ->
-               break;
-       od;
-
-       //CLEAR_TOKENS(proc_two_produced,
-       //      P2_PROD_NONE | P2_WRITE_ONE | P2_WMB | P2_WRITE_TWO);
-}
diff --git a/formal-model/ooomem-double-update/read_order.ltl b/formal-model/ooomem-double-update/read_order.ltl
deleted file mode 100644 (file)
index b201ec4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_one_is_one -> (<> read_two_is_one))
diff --git a/formal-model/ooomem-double-update/read_order_no_rmb.define b/formal-model/ooomem-double-update/read_order_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/ooomem-double-update/read_order_no_wmb.define b/formal-model/ooomem-double-update/read_order_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/ooomem-double-update/references.txt b/formal-model/ooomem-double-update/references.txt
deleted file mode 100644 (file)
index ca6798f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
diff --git a/formal-model/ooomem-no-sched/DEFINES b/formal-model/ooomem-no-sched/DEFINES
deleted file mode 100644 (file)
index 04aa898..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define first_read_updated     (first_read[0] == 6)
-#define second_read_updated    (second_read[0] == 4)
diff --git a/formal-model/ooomem-no-sched/Makefile b/formal-model/ooomem-no-sched/Makefile
deleted file mode 100644 (file)
index e0aed43..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-CFLAGS=-DHASH64
-
-SPINFILE=mem.spin
-
-default:
-       make read_order | tee read_order.log
-       make read_order_no_wmb | tee read_order_no_wmb.log
-       make read_order_no_rmb | tee read_order_no_rmb.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep error *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000 -w19
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order: clean read_order_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_rmb: clean read_order_ltl read_order_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_rmb_define:
-       cp read_order_no_rmb.define .input.define
-
-read_order_no_wmb: clean read_order_ltl read_order_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_wmb_define:
-       cp read_order_no_wmb.define .input.define
-
-read_order_ltl:
-       touch .input.define
-       cat DEFINES > pan.ltl
-       cat .input.define >> pan.ltl
-       spin -f "!(`cat read_order.ltl | grep -v ^//`)" >> pan.ltl
-
-run: pan
-       ./pan -a -v -c1 -X -m10000 -w19
-
-pan: pan.c
-       gcc -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/ooomem-no-sched/mem.sh b/formal-model/ooomem-no-sched/mem.sh
deleted file mode 100644 (file)
index 56e8123..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a mem.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/ooomem-no-sched/mem.spin b/formal-model/ooomem-no-sched/mem.spin
deleted file mode 100644 (file)
index 9359a5a..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/*
- * Out-of-order memory model _without_ out-of-order instruction scheduling.
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-inline smp_rmb()
-{
-       atomic {
-               CACHE_READ_FROM_MEM(alpha, get_pid());
-               CACHE_READ_FROM_MEM(beta, get_pid());
-       }
-}
-
-inline smp_wmb()
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(alpha, get_pid());
-               CACHE_WRITE_TO_MEM(beta, get_pid());
-       }
-}
-
-inline smp_mb()
-{
-       atomic {
-               smp_wmb();
-               smp_rmb();
-       }
-}
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, alpha, 0);
-DECLARE_CACHED_VAR(byte, beta, 0);
-
-inline ooo_mem()
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(alpha, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(beta, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(alpha, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(beta, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-
-byte first_read[NR_READERS];
-byte second_read[NR_READERS];
-
-active [NR_READERS] proctype test_reader()
-{
-       assert(get_pid() < NR_PROCS);
-
-       ooo_mem();
-       first_read[get_readerid()] = READ_CACHED_VAR(beta);
-       ooo_mem();
-#ifndef NO_RMB
-       smp_rmb();
-       ooo_mem();
-#endif
-       second_read[get_readerid()] = READ_CACHED_VAR(alpha);
-       ooo_mem();
-       // test : [] (first_read == 6 -> <> second_read == 4)
-       assert(first_read[get_readerid()] != 6
-               || second_read[get_readerid()] == 4);
-}
-
-#define get_writerid() (get_readerid() + NR_READERS)
-
-active [NR_WRITERS] proctype test_writer()
-{
-       byte i;
-
-       assert(get_pid() < NR_PROCS);
-
-       ooo_mem();
-       WRITE_CACHED_VAR(alpha, 4);
-       ooo_mem();
-#ifndef NO_WMB
-       smp_wmb();
-       ooo_mem();
-#endif
-       WRITE_CACHED_VAR(beta, 6);
-       ooo_mem();
-}
diff --git a/formal-model/ooomem-no-sched/read_order.ltl b/formal-model/ooomem-no-sched/read_order.ltl
deleted file mode 100644 (file)
index b1cdfb7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (first_read_updated -> <> second_read_updated)
diff --git a/formal-model/ooomem-no-sched/read_order_no_rmb.define b/formal-model/ooomem-no-sched/read_order_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/ooomem-no-sched/read_order_no_wmb.define b/formal-model/ooomem-no-sched/read_order_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/ooomem-no-sched/references.txt b/formal-model/ooomem-no-sched/references.txt
deleted file mode 100644 (file)
index ca6798f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
diff --git a/formal-model/ooomem-two-writes/DEFINES b/formal-model/ooomem-two-writes/DEFINES
deleted file mode 100644 (file)
index e7b6f10..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#define read_one_is_zero (read_one == 0)
-#define read_two_is_zero (read_two == 0)
-#define read_one_is_one (read_one == 1)
-#define read_two_is_one (read_two == 1)
diff --git a/formal-model/ooomem-two-writes/Makefile b/formal-model/ooomem-two-writes/Makefile
deleted file mode 100644 (file)
index 6e91788..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#CFLAGS=-DHASH64 -DREACH
-CFLAGS=-DHASH64
-
-#try pan -i to get the smallest trace.
-
-SPINFILE=mem.spin
-
-default:
-       make read_order | tee read_order.log
-       make read_order_no_wmb | tee read_order_no_wmb.log
-       make read_order_no_rmb | tee read_order_no_rmb.log
-       make read_order_no_sync | tee read_order_no_sync.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep error *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000 -w19
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order: clean read_order_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_sync: clean read_order_ltl read_order_no_sync_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_sync_define:
-       cp read_order_no_sync.define .input.define
-
-read_order_no_rmb: clean read_order_ltl read_order_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_rmb_define:
-       cp read_order_no_rmb.define .input.define
-
-read_order_no_wmb: clean read_order_ltl read_order_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-read_order_no_wmb_define:
-       cp read_order_no_wmb.define .input.define
-
-read_order_ltl:
-       touch .input.define
-       cat DEFINES > pan.ltl
-       cat .input.define >> pan.ltl
-       spin -f "!(`cat read_order.ltl | grep -v ^//`)" >> pan.ltl
-
-run: pan
-       ./pan -a -v -c1 -X -m10000 -w19
-
-pan: pan.c
-       gcc -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/ooomem-two-writes/mem.sh b/formal-model/ooomem-two-writes/mem.sh
deleted file mode 100644 (file)
index 56e8123..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a mem.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/ooomem-two-writes/mem.spin b/formal-model/ooomem-two-writes/mem.spin
deleted file mode 100644 (file)
index 304c3f8..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with out-of-order memory
- * and out-of-order instruction scheduling.
- *
- * Algorithm verified :
- *
- * alpha = 0;
- * beta = 0;
- * x = 1;
- * y = 1;
- *
- * Process A                  Process B
- * alpha = 1;                 beta = 1;
- * mb();                      mb();
- * x = beta;                  y = alpha;
- *
- * if x = 0, then y != 0
- * if y = 0, then x != 0
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v)         \
-       type mem_##x = v;                       \
-       type cached_##x[NR_PROCS] = v;          \
-       bit cache_dirty_##x[NR_PROCS] = 0;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)                     \
-       (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                 \
-       atomic {                                \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)             \
-       if                                      \
-       :: !IS_CACHE_DIRTY(x, id) ->            \
-               cached_##x[id] = mem_##x;       \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)       \
-       if                                      \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                            \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                                      \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                            \
-       fi;
-
-inline ooo_mem()
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(alpha, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(beta, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(alpha, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(beta, get_pid());
-       }
-}
-
-/* must consume all prior read tokens */
-inline smp_rmb()
-{
-       atomic {
-               /* todo : consume all read tokens .. ? */
-               CACHE_READ_FROM_MEM(alpha, get_pid());
-               CACHE_READ_FROM_MEM(beta, get_pid());
-       }
-}
-
-/* must consume all prior write tokens */
-inline smp_wmb()
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(alpha, get_pid());
-               CACHE_WRITE_TO_MEM(beta, get_pid());
-       }
-}
-
-/* sync_core() must consume all prior read and write tokens, including rmb/wmb
- * tokens */
-
-/* must consume all prior read and write tokens */
-inline smp_mb()
-{
-       atomic {
-               smp_wmb();
-               /* sync_core() */
-               smp_rmb();
-       }
-}
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, alpha, 0);
-DECLARE_CACHED_VAR(byte, beta, 0);
-
-byte read_one = 1;
-byte read_two = 1;
-
-/*
- * Bit encoding, proc_one_produced :
- */
-
-#define P1_PROD_NONE   (1 << 0)
-
-#define P1_WRITE       (1 << 1)
-#define P1_WMB         (1 << 2)
-#define P1_SYNC_CORE   (1 << 3)
-#define P1_RMB         (1 << 4)
-#define P1_READ                (1 << 5)
-
-int proc_one_produced;
-
-active proctype test_proc_one()
-{
-       assert(get_pid() < NR_PROCS);
-
-       PRODUCE_TOKENS(proc_one_produced, P1_PROD_NONE);
-
-#ifdef NO_WMB
-       PRODUCE_TOKENS(proc_one_produced, P1_WMB);
-#endif
-#ifdef NO_RMB
-       PRODUCE_TOKENS(proc_one_produced, P1_RMB);
-#endif
-#ifdef NO_SYNC
-       PRODUCE_TOKENS(proc_one_produced, P1_SYNC_CORE);
-#endif
-
-       do
-       :: CONSUME_TOKENS(proc_one_produced, P1_PROD_NONE, P1_WRITE) ->
-               ooo_mem();
-               WRITE_CACHED_VAR(alpha, 1);
-               ooo_mem();
-               PRODUCE_TOKENS(proc_one_produced, P1_WRITE);
-       :: CONSUME_TOKENS(proc_one_produced, P1_WRITE, P1_WMB) ->
-               smp_wmb();
-               PRODUCE_TOKENS(proc_one_produced, P1_WMB);
-       :: CONSUME_TOKENS(proc_one_produced, P1_WRITE | P1_WMB, P1_SYNC_CORE) ->
-               /* sync_core(); */
-               PRODUCE_TOKENS(proc_one_produced, P1_SYNC_CORE);
-       :: CONSUME_TOKENS(proc_one_produced, P1_SYNC_CORE, P1_RMB) ->
-               smp_rmb();
-               PRODUCE_TOKENS(proc_one_produced, P1_RMB);
-       :: CONSUME_TOKENS(proc_one_produced, P1_RMB | P1_SYNC_CORE, P1_READ) ->
-               ooo_mem();
-               read_one = READ_CACHED_VAR(beta);
-               ooo_mem();
-               PRODUCE_TOKENS(proc_one_produced, P1_READ);
-       :: CONSUME_TOKENS(proc_one_produced, P1_PROD_NONE | P1_WRITE
-               | P1_WMB | P1_SYNC_CORE | P1_RMB | P1_READ, 0) ->
-               break;
-       od;
-
-       //CLEAR_TOKENS(proc_one_produced,
-       //      P1_PROD_NONE | P1_WRITE | P1_WMB | P1_SYNC_CORE | P1_RMB |
-       //      P2_READ);
-
-       // test : [] (read_one == 0 -> read_two != 0)
-       // test : [] (read_two == 0 -> read_one != 0)
-       assert(!(read_one == 0 && read_two == 0));
-}
-
-
-/*
- * Bit encoding, proc_two_produced :
- */
-
-#define P2_PROD_NONE   (1 << 0)
-
-#define P2_WRITE       (1 << 1)
-#define P2_WMB         (1 << 2)
-#define P2_SYNC_CORE   (1 << 3)
-#define P2_RMB         (1 << 4)
-#define P2_READ                (1 << 5)
-
-int proc_two_produced;
-
-active proctype test_proc_two()
-{
-       assert(get_pid() < NR_PROCS);
-
-       PRODUCE_TOKENS(proc_two_produced, P2_PROD_NONE);
-
-#ifdef NO_WMB
-       PRODUCE_TOKENS(proc_two_produced, P2_WMB);
-#endif
-#ifdef NO_RMB
-       PRODUCE_TOKENS(proc_two_produced, P2_RMB);
-#endif
-#ifdef NO_SYNC
-       PRODUCE_TOKENS(proc_two_produced, P2_SYNC_CORE);
-#endif
-
-       do
-       :: CONSUME_TOKENS(proc_two_produced, P2_PROD_NONE, P2_WRITE) ->
-               ooo_mem();
-               WRITE_CACHED_VAR(beta, 1);
-               ooo_mem();
-               PRODUCE_TOKENS(proc_two_produced, P2_WRITE);
-       :: CONSUME_TOKENS(proc_two_produced, P2_WRITE, P2_WMB) ->
-               smp_wmb();
-               PRODUCE_TOKENS(proc_two_produced, P2_WMB);
-       :: CONSUME_TOKENS(proc_two_produced, P2_WRITE | P2_WMB, P2_SYNC_CORE) ->
-               /* sync_core(); */
-               PRODUCE_TOKENS(proc_two_produced, P2_SYNC_CORE);
-       :: CONSUME_TOKENS(proc_two_produced, P2_SYNC_CORE, P2_RMB) ->
-               smp_rmb();
-               PRODUCE_TOKENS(proc_two_produced, P2_RMB);
-       :: CONSUME_TOKENS(proc_two_produced, P2_SYNC_CORE | P2_RMB, P2_READ) ->
-               ooo_mem();
-               read_two = READ_CACHED_VAR(alpha);
-               ooo_mem();
-               PRODUCE_TOKENS(proc_two_produced, P2_READ);
-       :: CONSUME_TOKENS(proc_two_produced, P2_PROD_NONE | P2_WRITE
-               | P2_WMB | P2_SYNC_CORE | P2_RMB | P2_READ, 0) ->
-               break;
-       od;
-
-       //CLEAR_TOKENS(proc_two_produced,
-       //      P2_PROD_NONE | P2_WRITE | P2_WMB | P2_SYNC_CORE | P2_RMB |
-       //      P2_READ);
-
-       // test : [] (read_one == 0 -> read_two != 0)
-       // test : [] (read_two == 0 -> read_one != 0)
-       assert(!(read_one == 0 && read_two == 0));
-}
diff --git a/formal-model/ooomem-two-writes/read_order.ltl b/formal-model/ooomem-two-writes/read_order.ltl
deleted file mode 100644 (file)
index 6ba2459..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_one_is_one || read_two_is_one)
diff --git a/formal-model/ooomem-two-writes/read_order.ltl.bkp b/formal-model/ooomem-two-writes/read_order.ltl.bkp
deleted file mode 100644 (file)
index f4dbf03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_one_is_zero -> !read_two_is_zero)
diff --git a/formal-model/ooomem-two-writes/read_order_no_rmb.define b/formal-model/ooomem-two-writes/read_order_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/ooomem-two-writes/read_order_no_sync.define b/formal-model/ooomem-two-writes/read_order_no_sync.define
deleted file mode 100644 (file)
index 0d2f8cf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_SYNC
diff --git a/formal-model/ooomem-two-writes/read_order_no_wmb.define b/formal-model/ooomem-two-writes/read_order_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/ooomem-two-writes/references.txt b/formal-model/ooomem-two-writes/references.txt
deleted file mode 100644 (file)
index ca6798f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
diff --git a/formal-model/spinlock/DEFINES b/formal-model/spinlock/DEFINES
deleted file mode 100644 (file)
index 4eb5315..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define refcount_gt_one (refcount > 1)
diff --git a/formal-model/spinlock/Makefile b/formal-model/spinlock/Makefile
deleted file mode 100644 (file)
index a153e7a..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#CFLAGS=-DHASH64 -DREACH
-CFLAGS=-DHASH64
-
-#try pan -i to get the smallest trace.
-
-SPINFILE=mem.spin
-SPINFILE_FAIR=mem-progress.spin
-
-default:
-       make refcount | tee refcount.log
-       make lock_progress | tee lock_progress.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep error *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000 -w19
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-refcount: clean refcount_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-refcount_ltl:
-       touch .input.define
-       cat DEFINES > pan.ltl
-       cat .input.define >> pan.ltl
-       spin -f "!(`cat refcount.ltl | grep -v ^//`)" >> pan.ltl
-
-lock_progress: clean lock_progress_ltl run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-lock_progress_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat lock_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-run: pan
-       ./pan -a -v -c1 -X -m10000 -w19
-
-run_weak_fair: pan_fair
-       ./pan_fair -a -f -v -c1 -X -m10000000 -w20
-
-pan_fair: pan_fair.c
-       gcc -w ${CFLAGS} -o pan_fair pan_fair.c
-
-pan: pan.c
-       gcc -w ${CFLAGS} -o pan pan.c
-
-pan_fair.c: pan.ltl ${SPINFILE_FAIR}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE_FAIR} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-       mv pan.c pan_fair.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/spinlock/lock_progress.ltl b/formal-model/spinlock/lock_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/spinlock/mem-progress.spin b/formal-model/spinlock/mem-progress.spin
deleted file mode 100644 (file)
index 7930d04..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-byte lock = 0;
-byte refcount = 0;
-
-inline spin_lock(lock)
-{
-       do
-       :: 1 -> atomic {
-                       if
-                       :: (lock) ->
-                               skip;
-                       :: else ->
-                               lock = 1;
-                               break;
-                       fi;
-               }
-       od;
-}
-
-inline spin_unlock(lock)
-{
-       lock = 0;
-}
-
-proctype proc_A()
-{
-       do
-       :: 1->
-progress_A:
-               spin_lock(lock);
-               refcount = refcount + 1;
-               refcount = refcount - 1;
-               spin_unlock(lock);
-       od;
-}
-
-proctype proc_B()
-{
-       do
-       :: 1->
-               spin_lock(lock);
-               refcount = refcount + 1;
-               refcount = refcount - 1;
-               spin_unlock(lock);
-       od;
-}
-
-init
-{
-       run proc_A();
-       run proc_B();
-}
diff --git a/formal-model/spinlock/mem.sh b/formal-model/spinlock/mem.sh
deleted file mode 100644 (file)
index 56e8123..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a mem.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/spinlock/mem.spin b/formal-model/spinlock/mem.spin
deleted file mode 100644 (file)
index 9e87809..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-byte lock = 0;
-byte refcount = 0;
-
-inline spin_lock(lock)
-{
-       do
-       :: 1 -> atomic {
-                       if
-                       :: (lock) ->
-                               skip;
-                       :: else ->
-                               lock = 1;
-                               break;
-                       fi;
-               }
-       od;
-}
-
-inline spin_unlock(lock)
-{
-       lock = 0;
-}
-
-proctype proc_X()
-{
-       do
-       :: 1 ->
-               spin_lock(lock);
-               refcount = refcount + 1;
-               refcount = refcount - 1;
-               spin_unlock(lock);
-       od;
-}
-
-init
-{
-       run proc_X();
-       run proc_X();
-}
diff --git a/formal-model/spinlock/refcount.ltl b/formal-model/spinlock/refcount.ltl
deleted file mode 100644 (file)
index 48f971f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!(refcount_gt_one))
diff --git a/formal-model/spinlock/references.txt b/formal-model/spinlock/references.txt
deleted file mode 100644 (file)
index ca6798f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
diff --git a/formal-model/ticketlock/DEFINES b/formal-model/ticketlock/DEFINES
deleted file mode 100644 (file)
index 4eb5315..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define refcount_gt_one (refcount > 1)
diff --git a/formal-model/ticketlock/Makefile b/formal-model/ticketlock/Makefile
deleted file mode 100644 (file)
index c41afd3..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#CFLAGS=-DHASH64 -DREACH
-CFLAGS=-DHASH64
-
-#try pan -i to get the smallest trace.
-
-SPINFILE=mem.spin
-SPINFILE_FAIR=mem-progress.spin
-
-default:
-       make refcount | tee refcount.log
-       make refcount_4_bits_per_byte | tee refcount_4_bits_per_byte.log
-       make lock_progress | tee lock_progress.log
-       make lock_progress_4_bits_per_byte | tee lock_progress_4_bits_per_byte.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep error *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w19
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-refcount: clean refcount_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-refcount_ltl:
-       touch .input.define
-       cat DEFINES > pan.ltl
-       cat .input.define >> pan.ltl
-       spin -f "!(`cat refcount.ltl | grep -v ^//`)" >> pan.ltl
-
-refcount_4_bits_per_byte: clean refcount_ltl config_4_bits_per_byte_define run
-
-lock_progress: clean lock_progress_ltl run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-lock_progress_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat lock_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-lock_progress_4_bits_per_byte: clean lock_progress_ltl config_4_bits_per_byte_define run
-
-config_4_bits_per_byte_define:
-       cp config_4_bits_per_byte.define .input.define
-
-run: pan
-       ./pan -a -v -c1 -X -m1000000 -w19
-
-run_weak_fair: pan_fair
-       ./pan_fair -a -f -v -c1 -X -m1000000 -w20
-
-pan_fair: pan_fair.c
-       gcc -w ${CFLAGS} -DNFAIR=4 -o pan_fair pan_fair.c
-
-pan: pan.c
-       gcc -w ${CFLAGS} -o pan pan.c
-
-pan_fair.c: pan.ltl ${SPINFILE_FAIR}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE_FAIR} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-       mv pan.c pan_fair.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat DEFINES > .input.spin
-       cat .input.define >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/ticketlock/config_4_bits_per_byte.define b/formal-model/ticketlock/config_4_bits_per_byte.define
deleted file mode 100644 (file)
index e1d13ca..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define CONFIG_BITS_PER_BYTE 4
diff --git a/formal-model/ticketlock/lock_progress.ltl b/formal-model/ticketlock/lock_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/ticketlock/mem-progress.spin b/formal-model/ticketlock/mem-progress.spin
deleted file mode 100644 (file)
index dad43a4..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* 16 CPUs max (byte has 8 bits, divided in two) */
-
-#ifndef CONFIG_BITS_PER_BYTE
-#define BITS_PER_BYTE          8
-#else
-// test progress failure with shorter byte size. Will fail with 5 proc.
-#define BITS_PER_BYTE          CONFIG_BITS_PER_BYTE
-#endif
-
-#define HBPB                   (BITS_PER_BYTE / 2)     /* 4 */
-#define HMASK                  ((1 << HBPB) - 1)       /* 0x0F */
-
-/* for byte type */
-#define LOW_HALF(val)          ((val) & HMASK)
-#define LOW_HALF_INC           1
-
-#define HIGH_HALF(val)         ((val) & (HMASK << HBPB))
-#define HIGH_HALF_INC          (1 << HBPB)
-
-byte lock = 0;
-byte refcount = 0;
-
-inline spin_lock(lock, ticket)
-{
-       atomic {
-               ticket = HIGH_HALF(lock) >> HBPB;
-               lock = lock + HIGH_HALF_INC;    /* overflow expected */
-       }
-
-       do
-       :: 1 ->
-               if
-               :: (LOW_HALF(lock) == ticket) ->
-                       break;
-               :: else ->
-                       skip;
-               fi;
-       od;
-}
-
-inline spin_unlock(lock)
-{
-       lock = HIGH_HALF(lock) | LOW_HALF(lock + LOW_HALF_INC);
-}
-
-proctype proc_A()
-{
-       byte ticket;
-
-       do
-       :: 1 ->
-progress_A:
-               spin_lock(lock, ticket);
-               refcount = refcount + 1;
-               refcount = refcount - 1;
-               spin_unlock(lock);
-       od;
-}
-
-proctype proc_B()
-{
-       byte ticket;
-
-       do
-       :: 1 ->
-               spin_lock(lock, ticket);
-               refcount = refcount + 1;
-               refcount = refcount - 1;
-               spin_unlock(lock);
-       od;
-}
-
-init
-{
-       run proc_A();
-       run proc_B();
-       run proc_B();
-       run proc_B();
-       run proc_B();
-}
diff --git a/formal-model/ticketlock/mem.sh b/formal-model/ticketlock/mem.sh
deleted file mode 100644 (file)
index 56e8123..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a mem.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/ticketlock/mem.spin b/formal-model/ticketlock/mem.spin
deleted file mode 100644 (file)
index 445ee9a..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* 16 CPUs max (byte has 8 bits, divided in two) */
-
-#ifndef CONFIG_BITS_PER_BYTE
-#define BITS_PER_BYTE          8
-#else
-#define BITS_PER_BYTE          CONFIG_BITS_PER_BYTE
-#endif
-
-#define HBPB                   (BITS_PER_BYTE / 2)     /* 4 */
-#define HMASK                  ((1 << HBPB) - 1)       /* 0x0F */
-
-/* for byte type */
-#define LOW_HALF(val)          ((val) & HMASK)
-#define LOW_HALF_INC           1
-
-#define HIGH_HALF(val)         ((val) & (HMASK << HBPB))
-#define HIGH_HALF_INC          (1 << HBPB)
-
-byte lock = 0;
-byte refcount = 0;
-
-inline spin_lock(lock, ticket)
-{
-       atomic {
-               ticket = HIGH_HALF(lock) >> HBPB;
-               lock = lock + HIGH_HALF_INC;    /* overflow expected */
-       }
-
-       do
-       :: 1 ->
-               if
-               :: (LOW_HALF(lock) == ticket) ->
-                       break;
-               :: else ->
-                       skip;
-               fi;
-       od;
-}
-
-inline spin_unlock(lock)
-{
-       lock = HIGH_HALF(lock) | LOW_HALF(lock + LOW_HALF_INC);
-}
-
-proctype proc_X()
-{
-       byte ticket;
-
-       do
-       :: 1->
-               spin_lock(lock, ticket);
-               refcount = refcount + 1;
-               refcount = refcount - 1;
-               spin_unlock(lock);
-       od;
-}
-
-init
-{
-       run proc_X();
-       run proc_X();
-       run proc_X();
-       run proc_X();
-       run proc_X();
-}
diff --git a/formal-model/ticketlock/refcount.ltl b/formal-model/ticketlock/refcount.ltl
deleted file mode 100644 (file)
index 48f971f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!(refcount_gt_one))
diff --git a/formal-model/ticketlock/references.txt b/formal-model/ticketlock/references.txt
deleted file mode 100644 (file)
index ca6798f..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/.input.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/.input.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/.input.spin b/formal-model/urcu-controldataflow-alpha-ipi-compress/.input.spin
deleted file mode 100644 (file)
index 887b1ad..0000000
+++ /dev/null
@@ -1,1340 +0,0 @@
-#define READER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/DEFINES b/formal-model/urcu-controldataflow-alpha-ipi-compress/DEFINES
deleted file mode 100644 (file)
index 2681f69..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/Makefile b/formal-model/urcu-controldataflow-alpha-ipi-compress/Makefile
deleted file mode 100644 (file)
index f8bfd31..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64 -DCOLLAPSE
-#CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       #make urcu_free | tee urcu_free.log
-       #make urcu_free_no_mb | tee urcu_free_no_mb.log
-       #make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       #make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       #make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       #make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/references.txt b/formal-model/urcu-controldataflow-alpha-ipi-compress/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu.sh b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu.spin b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu.spin
deleted file mode 100644 (file)
index 8075506..0000000
+++ /dev/null
@@ -1,1321 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free.ltl b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free.ltl
deleted file mode 100644 (file)
index 6be1be9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!read_poison)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_nested.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_mb.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_mb.define
deleted file mode 100644 (file)
index d99d793..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_MB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_rmb.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_wmb.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_single_flip.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress.ltl b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_reader.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_reader.log b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_reader.log
deleted file mode 100644 (file)
index f11dc83..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi-compress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1362)
-depth 7: Claim reached state 9 (line 1367)
-depth 136: Claim reached state 9 (line 1366)
-Depth=  115766 States=    1e+06 Transitions= 2.97e+08 Memory=   495.647        t=    461 R=   2e+03
-Depth=  115766 States=    2e+06 Transitions= 5.97e+08 Memory=   525.529        t=    939 R=   2e+03
-Depth=  115766 States=    3e+06 Transitions= 8.86e+08 Memory=   553.264        t= 1.41e+03 R=   2e+03
-pan: resizing hashtable to -w22..  done
-Depth=  115766 States=    4e+06 Transitions= 1.18e+09 Memory=   614.463        t= 1.87e+03 R=   2e+03
-Depth=  115766 States=    5e+06 Transitions= 1.48e+09 Memory=   644.541        t= 2.34e+03 R=   2e+03
-Depth=  115766 States=    6e+06 Transitions= 1.77e+09 Memory=   674.424        t= 2.8e+03 R=   2e+03
-Depth=  115766 States=    7e+06 Transitions= 2.07e+09 Memory=   701.865        t= 3.27e+03 R=   2e+03
-Depth=  115766 States=    8e+06 Transitions= 2.36e+09 Memory=   729.404        t= 3.75e+03 R=   2e+03
-Depth=  115766 States=    9e+06 Transitions= 2.66e+09 Memory=   757.920        t= 4.23e+03 R=   2e+03
-pan: resizing hashtable to -w24..  done
-Depth=  117893 States=    1e+07 Transitions= 2.95e+09 Memory=   909.846        t= 4.69e+03 R=   2e+03
-Depth=  117893 States=  1.1e+07 Transitions= 3.35e+09 Memory=   937.190        t= 5.31e+03 R=   2e+03
-Depth=  117893 States=  1.2e+07 Transitions= 3.69e+09 Memory=   964.826        t= 5.85e+03 R=   2e+03
-Depth=  117893 States=  1.3e+07 Transitions= 4.02e+09 Memory=   994.026        t= 6.37e+03 R=   2e+03
-Depth=  117893 States=  1.4e+07 Transitions= 4.32e+09 Memory=  1021.858        t= 6.84e+03 R=   2e+03
-Depth=  117893 States=  1.5e+07 Transitions= 4.63e+09 Memory=  1050.080        t= 7.33e+03 R=   2e+03
-Depth=  117893 States=  1.6e+07 Transitions= 4.95e+09 Memory=  1078.693        t= 7.83e+03 R=   2e+03
-Depth=  117893 States=  1.7e+07 Transitions= 5.24e+09 Memory=  1106.135        t= 8.28e+03 R=   2e+03
-Depth=  117893 States=  1.8e+07 Transitions= 5.54e+09 Memory=  1135.920        t= 8.74e+03 R=   2e+03
-Depth=  117893 States=  1.9e+07 Transitions= 5.82e+09 Memory=  1164.338        t= 9.19e+03 R=   2e+03
-Depth=  117893 States=    2e+07 Transitions= 6.12e+09 Memory=  1194.514        t= 9.66e+03 R=   2e+03
-Depth=  117893 States=  2.1e+07 Transitions= 6.42e+09 Memory=  1223.713        t= 1.01e+04 R=   2e+03
-Depth=  117893 States=  2.2e+07 Transitions= 6.72e+09 Memory=  1252.912        t= 1.06e+04 R=   2e+03
-Depth=  117893 States=  2.3e+07 Transitions= 7.01e+09 Memory=  1280.744        t= 1.11e+04 R=   2e+03
-Depth=  117893 States=  2.4e+07 Transitions=  7.3e+09 Memory=  1311.408        t= 1.15e+04 R=   2e+03
-Depth=  117893 States=  2.5e+07 Transitions= 7.61e+09 Memory=  1336.994        t= 1.2e+04 R=   2e+03
-Depth=  117893 States=  2.6e+07 Transitions= 7.89e+09 Memory=  1365.315        t= 1.24e+04 R=   2e+03
-Depth=  117893 States=  2.7e+07 Transitions= 8.35e+09 Memory=  1390.315        t= 1.32e+04 R=   2e+03
-Depth=  117893 States=  2.8e+07 Transitions= 8.84e+09 Memory=  1414.143        t= 1.4e+04 R=   2e+03
-Depth=  117893 States=  2.9e+07 Transitions= 9.64e+09 Memory=  1438.166        t= 1.53e+04 R=   2e+03
-Depth=  117893 States=    3e+07 Transitions= 1.02e+10 Memory=  1462.971        t= 1.62e+04 R=   2e+03
-Depth=  117893 States=  3.1e+07 Transitions= 1.06e+10 Memory=  1488.068        t= 1.69e+04 R=   2e+03
-Depth=  117893 States=  3.2e+07 Transitions= 1.14e+10 Memory=  1512.287        t= 1.82e+04 R=   2e+03
-Depth=  117893 States=  3.3e+07 Transitions= 1.24e+10 Memory=  1536.799        t= 1.99e+04 R=   2e+03
-Depth=  117893 States=  3.4e+07 Transitions= 1.27e+10 Memory=  1567.658        t= 2.04e+04 R=   2e+03
-pan: resizing hashtable to -w26..  done
-Depth=  117893 States=  3.5e+07 Transitions= 1.32e+10 Memory=  2089.424        t= 2.13e+04 R=   2e+03
-Depth=  117893 States=  3.6e+07 Transitions= 1.38e+10 Memory=  2116.768        t= 2.22e+04 R=   2e+03
-Depth=  117893 States=  3.7e+07 Transitions= 1.45e+10 Memory=  2142.158        t= 2.33e+04 R=   2e+03
-Depth=  117893 States=  3.8e+07 Transitions= 1.49e+10 Memory=  2170.674        t= 2.41e+04 R=   2e+03
-Depth=  117893 States=  3.9e+07 Transitions= 1.55e+10 Memory=  2197.725        t= 2.49e+04 R=   2e+03
-Depth=  117893 States=    4e+07 Transitions= 1.63e+10 Memory=  2219.014        t= 2.63e+04 R=   2e+03
-Depth=  117893 States=  4.1e+07 Transitions= 1.69e+10 Memory=  2242.061        t= 2.75e+04 R=   1e+03
-Depth=  117893 States=  4.2e+07 Transitions= 1.73e+10 Memory=  2269.600        t= 2.81e+04 R=   1e+03
-Depth=  117893 States=  4.3e+07 Transitions=  1.8e+10 Memory=  2295.967        t= 2.92e+04 R=   1e+03
-Depth=  117893 States=  4.4e+07 Transitions= 1.85e+10 Memory=  2323.213        t=  3e+04 R=   1e+03
-Depth=  117893 States=  4.5e+07 Transitions= 1.91e+10 Memory=  2348.994        t= 3.09e+04 R=   1e+03
-Depth=  117893 States=  4.6e+07 Transitions= 1.97e+10 Memory=  2374.190        t= 3.2e+04 R=   1e+03
-Depth=  117893 States=  4.7e+07 Transitions= 2.03e+10 Memory=  2399.483        t= 3.3e+04 R=   1e+03
-Depth=  117893 States=  4.8e+07 Transitions= 2.07e+10 Memory=  2428.486        t= 3.36e+04 R=   1e+03
-Depth=  117893 States=  4.9e+07 Transitions= 2.13e+10 Memory=  2454.951        t= 3.45e+04 R=   1e+03
-Depth=  117893 States=    5e+07 Transitions= 2.18e+10 Memory=  2482.686        t= 3.54e+04 R=   1e+03
-Depth=  117893 States=  5.1e+07 Transitions= 2.24e+10 Memory=  2509.151        t= 3.62e+04 R=   1e+03
-Depth=  117893 States=  5.2e+07 Transitions=  2.3e+10 Memory=  2535.420        t= 3.72e+04 R=   1e+03
-Depth=  117893 States=  5.3e+07 Transitions= 2.38e+10 Memory=  2560.518        t= 3.86e+04 R=   1e+03
-Depth=  117893 States=  5.4e+07 Transitions= 2.42e+10 Memory=  2586.592        t= 3.94e+04 R=   1e+03
-Depth=  117893 States=  5.5e+07 Transitions= 2.46e+10 Memory=  2610.713        t=  4e+04 R=   1e+03
-Depth=  117893 States=  5.6e+07 Transitions= 2.49e+10 Memory=  2638.545        t= 4.06e+04 R=   1e+03
-Depth=  117893 States=  5.7e+07 Transitions= 2.53e+10 Memory=  2668.135        t= 4.11e+04 R=   1e+03
-Depth=  117893 States=  5.8e+07 Transitions= 2.56e+10 Memory=  2698.213        t= 4.16e+04 R=   1e+03
-Depth=  117893 States=  5.9e+07 Transitions= 2.59e+10 Memory=  2723.897        t= 4.22e+04 R=   1e+03
-Depth=  117893 States=    6e+07 Transitions= 2.66e+10 Memory=  2747.627        t= 4.33e+04 R=   1e+03
-Depth=  117893 States=  6.1e+07 Transitions=  2.7e+10 Memory=  2774.678        t= 4.39e+04 R=   1e+03
-Depth=  117893 States=  6.2e+07 Transitions= 2.73e+10 Memory=  2803.584        t= 4.45e+04 R=   1e+03
-Depth=  117893 States=  6.3e+07 Transitions= 2.77e+10 Memory=  2831.221        t= 4.51e+04 R=   1e+03
-Depth=  117893 States=  6.4e+07 Transitions=  2.8e+10 Memory=  2860.225        t= 4.56e+04 R=   1e+03
-Depth=  117893 States=  6.5e+07 Transitions= 2.84e+10 Memory=  2885.225        t= 4.62e+04 R=   1e+03
-Depth=  117893 States=  6.6e+07 Transitions= 2.89e+10 Memory=  2908.760        t= 4.71e+04 R=   1e+03
-Depth=  117893 States=  6.7e+07 Transitions= 2.96e+10 Memory=  2932.686        t= 4.82e+04 R=   1e+03
-Depth=  117893 States=  6.8e+07 Transitions= 3.03e+10 Memory=  2956.123        t= 4.96e+04 R=   1e+03
-Depth=  117893 States=  6.9e+07 Transitions= 3.14e+10 Memory=  2985.908        t= 5.13e+04 R=   1e+03
-Depth=  117893 States=    7e+07 Transitions= 3.24e+10 Memory=  3015.303        t= 5.31e+04 R=   1e+03
-Depth=  117893 States=  7.1e+07 Transitions= 3.36e+10 Memory=  3039.912        t= 5.5e+04 R=   1e+03
-Depth=  117893 States=  7.2e+07 Transitions= 3.47e+10 Memory=  3065.401        t= 5.69e+04 R=   1e+03
-Depth=  117893 States=  7.3e+07 Transitions= 3.58e+10 Memory=  3086.690        t= 5.87e+04 R=   1e+03
-Depth=  117893 States=  7.4e+07 Transitions= 3.67e+10 Memory=  3108.272        t= 6.02e+04 R=   1e+03
-Depth=  117893 States=  7.5e+07 Transitions= 3.78e+10 Memory=  3127.608        t= 6.21e+04 R=   1e+03
-Depth=  117893 States=  7.6e+07 Transitions= 3.89e+10 Memory=  3147.627        t= 6.39e+04 R=   1e+03
-Depth=  117893 States=  7.7e+07 Transitions= 3.97e+10 Memory=  3167.647        t= 6.53e+04 R=   1e+03
-Depth=  117893 States=  7.8e+07 Transitions= 4.01e+10 Memory=  3195.772        t= 6.6e+04 R=   1e+03
-Depth=  117893 States=  7.9e+07 Transitions= 4.07e+10 Memory=  3221.065        t= 6.69e+04 R=   1e+03
-Depth=  117893 States=    8e+07 Transitions= 4.14e+10 Memory=  3245.869        t= 6.8e+04 R=   1e+03
-Depth=  117893 States=  8.1e+07 Transitions= 4.26e+10 Memory=  3270.186        t=  7e+04 R=   1e+03
-Depth=  117893 States=  8.2e+07 Transitions= 4.33e+10 Memory=  3293.135        t= 7.12e+04 R=   1e+03
-Depth=  117893 States=  8.3e+07 Transitions= 4.38e+10 Memory=  3323.701        t= 7.21e+04 R=   1e+03
-Depth=  117893 States=  8.4e+07 Transitions= 4.41e+10 Memory=  3350.752        t= 7.26e+04 R=   1e+03
-Depth=  117893 States=  8.5e+07 Transitions= 4.45e+10 Memory=  3375.166        t= 7.31e+04 R=   1e+03
-Depth=  117893 States=  8.6e+07 Transitions= 4.49e+10 Memory=  3397.432        t= 7.37e+04 R=   1e+03
-Depth=  117893 States=  8.7e+07 Transitions= 4.53e+10 Memory=  3424.287        t= 7.44e+04 R=   1e+03
-Depth=  117893 States=  8.8e+07 Transitions= 4.61e+10 Memory=  3449.385        t= 7.58e+04 R=   1e+03
-Depth=  117893 States=  8.9e+07 Transitions= 4.71e+10 Memory=  3469.795        t= 7.74e+04 R=   1e+03
-Depth=  117893 States=    9e+07 Transitions= 4.75e+10 Memory=  3498.018        t= 7.81e+04 R=   1e+03
-Depth=  117893 States=  9.1e+07 Transitions=  4.8e+10 Memory=  3524.678        t= 7.88e+04 R=   1e+03
-Depth=  117893 States=  9.2e+07 Transitions= 4.88e+10 Memory=  3549.776        t= 8.02e+04 R=   1e+03
-Depth=  117893 States=  9.3e+07 Transitions= 4.97e+10 Memory=  3573.897        t= 8.16e+04 R=   1e+03
-Depth=  117893 States=  9.4e+07 Transitions= 5.03e+10 Memory=  3598.311        t= 8.26e+04 R=   1e+03
-Depth=  117893 States=  9.5e+07 Transitions= 5.12e+10 Memory=  3621.358        t= 8.41e+04 R=   1e+03
-Depth=  117893 States=  9.6e+07 Transitions= 5.19e+10 Memory=  3645.381        t= 8.52e+04 R=   1e+03
-Depth=  117893 States=  9.7e+07 Transitions= 5.26e+10 Memory=  3669.502        t= 8.64e+04 R=   1e+03
-Depth=  117893 States=  9.8e+07 Transitions= 5.32e+10 Memory=  3693.233        t= 8.75e+04 R=   1e+03
-Depth=  117893 States=  9.9e+07 Transitions= 5.36e+10 Memory=  3723.115        t= 8.8e+04 R=   1e+03
-Depth=  117893 States=    1e+08 Transitions= 5.41e+10 Memory=  3748.799        t= 8.89e+04 R=   1e+03
-Depth=  117893 States= 1.01e+08 Transitions= 5.51e+10 Memory=  3771.943        t= 9.05e+04 R=   1e+03
-Depth=  117893 States= 1.02e+08 Transitions= 5.59e+10 Memory=  3796.651        t= 9.18e+04 R=   1e+03
-Depth=  117893 States= 1.03e+08 Transitions= 5.64e+10 Memory=  3820.967        t= 9.28e+04 R=   1e+03
-Depth=  117893 States= 1.04e+08 Transitions= 5.71e+10 Memory=  3845.283        t= 9.39e+04 R=   1e+03
-Depth=  117893 States= 1.05e+08 Transitions= 5.76e+10 Memory=  3872.041        t= 9.46e+04 R=   1e+03
-Depth=  117893 States= 1.06e+08 Transitions=  5.8e+10 Memory=  3901.436        t= 9.54e+04 R=   1e+03
-Depth=  117893 States= 1.07e+08 Transitions= 5.85e+10 Memory=  3931.026        t= 9.61e+04 R=   1e+03
-Depth=  117893 States= 1.08e+08 Transitions= 5.89e+10 Memory=  3956.318        t= 9.68e+04 R=   1e+03
-Depth=  117893 States= 1.09e+08 Transitions= 5.96e+10 Memory=  3978.486        t= 9.79e+04 R=   1e+03
-Depth=  117893 States=  1.1e+08 Transitions= 6.02e+10 Memory=  4002.901        t= 9.89e+04 R=   1e+03
-Depth=  117893 States= 1.11e+08 Transitions= 6.06e+10 Memory=  4027.803        t= 9.96e+04 R=   1e+03
-Depth=  117893 States= 1.12e+08 Transitions= 6.12e+10 Memory=  4051.924        t= 1.01e+05 R=   1e+03
-Depth=  117893 States= 1.13e+08 Transitions= 6.16e+10 Memory=  4079.365        t= 1.01e+05 R=   1e+03
-Depth=  117893 States= 1.14e+08 Transitions= 6.22e+10 Memory=  4104.756        t= 1.02e+05 R=   1e+03
-Depth=  117893 States= 1.15e+08 Transitions= 6.28e+10 Memory=  4129.268        t= 1.03e+05 R=   1e+03
-Depth=  117893 States= 1.16e+08 Transitions= 6.38e+10 Memory=  4155.537        t= 1.05e+05 R=   1e+03
-Depth=  117893 States= 1.17e+08 Transitions= 6.44e+10 Memory=  4184.443        t= 1.06e+05 R=   1e+03
-Depth=  117893 States= 1.18e+08 Transitions= 6.48e+10 Memory=  4211.397        t= 1.07e+05 R=   1e+03
-Depth=  117893 States= 1.19e+08 Transitions= 6.51e+10 Memory=  4234.248        t= 1.07e+05 R=   1e+03
-Depth=  117893 States=  1.2e+08 Transitions= 6.58e+10 Memory=  4262.471        t= 1.08e+05 R=   1e+03
-Depth=  117893 States= 1.21e+08 Transitions= 6.65e+10 Memory=  4289.912        t= 1.17e+05 R=   1e+03
-Depth=  117893 States= 1.22e+08 Transitions= 6.69e+10 Memory=  4315.791        t= 1.17e+05 R=   1e+03
-Depth=  117893 States= 1.23e+08 Transitions= 6.74e+10 Memory=  4343.330        t= 1.18e+05 R=   1e+03
-Depth=  117893 States= 1.24e+08 Transitions= 6.83e+10 Memory=  4368.623        t= 1.19e+05 R=   1e+03
-Depth=  117893 States= 1.25e+08 Transitions= 6.86e+10 Memory=  4395.674        t= 1.2e+05 R=   1e+03
-Depth=  117893 States= 1.26e+08 Transitions=  6.9e+10 Memory=  4419.990        t= 1.21e+05 R=   1e+03
-Depth=  117893 States= 1.27e+08 Transitions= 6.94e+10 Memory=  4448.115        t= 1.21e+05 R=   1e+03
-Depth=  117893 States= 1.28e+08 Transitions= 7.02e+10 Memory=  4473.994        t= 1.23e+05 R=   1e+03
-Depth=  117893 States= 1.29e+08 Transitions= 7.05e+10 Memory=  4500.947        t= 1.23e+05 R=   1e+03
-Depth=  117893 States=  1.3e+08 Transitions= 7.09e+10 Memory=  4526.826        t= 1.24e+05 R=   1e+03
-Depth=  117893 States= 1.31e+08 Transitions= 7.18e+10 Memory=  4553.291        t= 1.25e+05 R=   1e+03
-Depth=  117893 States= 1.32e+08 Transitions= 7.21e+10 Memory=  4581.221        t= 1.26e+05 R=   1e+03
-Depth=  117893 States= 1.33e+08 Transitions= 7.25e+10 Memory=  4605.830        t= 1.26e+05 R=   1e+03
-Depth=  117893 States= 1.34e+08 Transitions=  7.3e+10 Memory=  4632.197        t= 1.27e+05 R=   1e+03
-Depth=  117893 States= 1.35e+08 Transitions= 7.35e+10 Memory=  4657.588        t= 1.33e+05 R=   1e+03
-pan: resizing hashtable to -w28..  done
-Depth=  117893 States= 1.36e+08 Transitions= 7.38e+10 Memory=  6705.588        t= 1.33e+05 R=   1e+03
-Depth=  117893 States= 1.37e+08 Transitions= 7.46e+10 Memory=  6705.588        t= 1.35e+05 R=   1e+03
-Depth=  117893 States= 1.38e+08 Transitions= 7.54e+10 Memory=  6720.627        t= 1.36e+05 R=   1e+03
-Depth=  117893 States= 1.39e+08 Transitions= 7.57e+10 Memory=  6750.217        t= 1.37e+05 R=   1e+03
-Depth=  117893 States=  1.4e+08 Transitions= 7.61e+10 Memory=  6775.803        t= 1.37e+05 R=   1e+03
-Depth=  117893 States= 1.41e+08 Transitions= 7.65e+10 Memory=  6797.190        t= 1.38e+05 R=   1e+03
-Depth=  117893 States= 1.42e+08 Transitions= 7.71e+10 Memory=  6823.068        t= 1.39e+05 R=   1e+03
-Depth=  117893 States= 1.43e+08 Transitions= 7.76e+10 Memory=  6851.682        t= 1.4e+05 R=   1e+03
-Depth=  117893 States= 1.44e+08 Transitions= 7.83e+10 Memory=  6879.611        t= 1.41e+05 R=   1e+03
-Depth=  117893 States= 1.45e+08 Transitions= 7.87e+10 Memory=  6905.100        t= 1.41e+05 R=   1e+03
-Depth=  117893 States= 1.46e+08 Transitions= 7.91e+10 Memory=  6929.318        t= 1.42e+05 R=   1e+03
-Depth=  117893 States= 1.47e+08 Transitions= 7.96e+10 Memory=  6954.709        t= 1.43e+05 R=   1e+03
-Depth=  117893 States= 1.48e+08 Transitions=    8e+10 Memory=  6983.225        t= 1.44e+05 R=   1e+03
-Depth=  117893 States= 1.49e+08 Transitions= 8.05e+10 Memory=  7013.791        t= 1.44e+05 R=   1e+03
-Depth=  117893 States=  1.5e+08 Transitions= 8.15e+10 Memory=  7037.033        t= 1.46e+05 R=   1e+03
-Depth=  117893 States= 1.51e+08 Transitions= 8.19e+10 Memory=  7068.381        t= 1.47e+05 R=   1e+03
-Depth=  117893 States= 1.52e+08 Transitions= 8.22e+10 Memory=  7093.576        t= 1.47e+05 R=   1e+03
-Depth=  117893 States= 1.53e+08 Transitions= 8.26e+10 Memory=  7115.842        t= 1.48e+05 R=   1e+03
-Depth=  117893 States= 1.54e+08 Transitions=  8.3e+10 Memory=  7144.358        t= 1.48e+05 R=   1e+03
-Depth=  117893 States= 1.55e+08 Transitions= 8.39e+10 Memory=  7170.432        t= 1.5e+05 R=   1e+03
-Depth=  117893 States= 1.56e+08 Transitions= 8.42e+10 Memory=  7197.483        t= 1.5e+05 R=   1e+03
-Depth=  117893 States= 1.57e+08 Transitions= 8.46e+10 Memory=  7220.725        t= 1.51e+05 R=   1e+03
-Depth=  117893 States= 1.58e+08 Transitions= 8.51e+10 Memory=  7246.701        t= 1.52e+05 R=   1e+03
-Depth=  117893 States= 1.59e+08 Transitions= 8.55e+10 Memory=  7273.752        t= 1.52e+05 R=   1e+03
-Depth=  117893 States=  1.6e+08 Transitions= 8.58e+10 Memory=  7302.951        t= 1.53e+05 R=   1e+03
-Depth=  117893 States= 1.61e+08 Transitions= 8.64e+10 Memory=  7327.365        t= 1.54e+05 R=   1e+03
-Depth=  117893 States= 1.62e+08 Transitions= 8.69e+10 Memory=  7353.049        t= 1.55e+05 R=   1e+03
-Depth=  117893 States= 1.63e+08 Transitions= 8.73e+10 Memory=  7379.318        t= 1.55e+05 R=   1e+03
-Depth=  117893 States= 1.64e+08 Transitions= 8.77e+10 Memory=  7404.904        t= 1.56e+05 R=   1e+03
-Depth=  117893 States= 1.65e+08 Transitions= 8.82e+10 Memory=  7429.514        t= 1.57e+05 R=   1e+03
-Depth=  117893 States= 1.66e+08 Transitions= 8.87e+10 Memory=  7453.733        t= 1.58e+05 R=   1e+03
-Depth=  117893 States= 1.67e+08 Transitions= 8.95e+10 Memory=  7477.561        t= 1.59e+05 R=   1e+03
-Depth=  117893 States= 1.68e+08 Transitions= 9.02e+10 Memory=  7501.096        t= 1.6e+05 R=   1e+03
-Depth=  117893 States= 1.69e+08 Transitions= 9.07e+10 Memory=  7527.365        t= 1.61e+05 R=   1e+03
-Depth=  117893 States=  1.7e+08 Transitions= 9.11e+10 Memory=  7553.830        t= 1.61e+05 R=   1e+03
-Depth=  117893 States= 1.71e+08 Transitions= 9.16e+10 Memory=  7577.951        t= 1.62e+05 R=   1e+03
-Depth=  117893 States= 1.72e+08 Transitions= 9.24e+10 Memory=  7602.658        t= 1.63e+05 R=   1e+03
-Depth=  117893 States= 1.73e+08 Transitions= 9.35e+10 Memory=  7626.096        t= 1.65e+05 R=   1e+03
-Depth=  117893 States= 1.74e+08 Transitions= 9.39e+10 Memory=  7656.369        t= 1.66e+05 R=   1e+03
-Depth=  117893 States= 1.75e+08 Transitions= 9.43e+10 Memory=  7682.834        t= 1.67e+05 R=   1e+03
-Depth=  117893 States= 1.76e+08 Transitions= 9.49e+10 Memory=  7709.201        t= 1.67e+05 R=   1e+03
-Depth=  117893 States= 1.77e+08 Transitions= 9.55e+10 Memory=  7736.447        t= 1.68e+05 R=   1e+03
-Depth=  117893 States= 1.78e+08 Transitions= 9.61e+10 Memory=  7763.791        t= 1.69e+05 R=   1e+03
-Depth=  117893 States= 1.79e+08 Transitions= 9.66e+10 Memory=  7790.061        t= 1.7e+05 R=   1e+03
-Depth=  117893 States=  1.8e+08 Transitions= 9.72e+10 Memory=  7817.600        t= 1.71e+05 R=   1e+03
-Depth=  117893 States= 1.81e+08 Transitions=  9.8e+10 Memory=  7837.912        t= 1.73e+05 R=   1e+03
-Depth=  117893 States= 1.82e+08 Transitions= 9.88e+10 Memory=  7858.127        t= 1.74e+05 R=   1e+03
-Depth=  117893 States= 1.83e+08 Transitions= 9.95e+10 Memory=  7886.154        t= 1.75e+05 R=   1e+03
-Depth=  117893 States= 1.84e+08 Transitions=    1e+11 Memory=  7912.522        t= 1.76e+05 R=   1e+03
-Depth=  117893 States= 1.85e+08 Transitions= 1.01e+11 Memory=  7937.717        t= 1.77e+05 R=   1e+03
-Depth=  117893 States= 1.86e+08 Transitions= 1.02e+11 Memory=  7962.815        t= 1.78e+05 R=   1e+03
-Depth=  117893 States= 1.87e+08 Transitions= 1.02e+11 Memory=  7988.010        t= 1.79e+05 R=   1e+03
-Depth=  117893 States= 1.88e+08 Transitions= 1.03e+11 Memory=  8014.768        t= 1.8e+05 R=   1e+03
-Depth=  117893 States= 1.89e+08 Transitions= 1.03e+11 Memory=  8040.061        t= 1.81e+05 R=   1e+03
-Depth=  117893 States=  1.9e+08 Transitions= 1.04e+11 Memory=  8066.818        t= 1.82e+05 R=   1e+03
-Depth=  117893 States= 1.91e+08 Transitions= 1.05e+11 Memory=  8090.451        t= 1.83e+05 R=   1e+03
-Depth=  117893 States= 1.92e+08 Transitions= 1.05e+11 Memory=  8116.330        t= 1.84e+05 R=   1e+03
-Depth=  117893 States= 1.93e+08 Transitions= 1.06e+11 Memory=  8144.748        t= 1.85e+05 R=   1e+03
-Depth=  117893 States= 1.94e+08 Transitions= 1.07e+11 Memory=  8170.822        t= 1.86e+05 R=   1e+03
-Depth=  117893 States= 1.95e+08 Transitions= 1.07e+11 Memory=  8196.604        t= 1.87e+05 R=   1e+03
-Depth=  117893 States= 1.96e+08 Transitions= 1.07e+11 Memory=  8222.873        t= 1.87e+05 R=   1e+03
-Depth=  117893 States= 1.97e+08 Transitions= 1.08e+11 Memory=  8252.658        t= 1.88e+05 R=   1e+03
-Depth=  117893 States= 1.98e+08 Transitions= 1.08e+11 Memory=  8278.147        t= 1.89e+05 R=   1e+03
-Depth=  117893 States= 1.99e+08 Transitions= 1.08e+11 Memory=  8305.490        t= 1.89e+05 R=   1e+03
-Depth=  117893 States=    2e+08 Transitions= 1.09e+11 Memory=  8332.151        t= 1.9e+05 R=   1e+03
-Depth=  117893 States= 2.01e+08 Transitions= 1.09e+11 Memory=  8355.979        t= 1.91e+05 R=   1e+03
-Depth=  117893 States= 2.02e+08 Transitions=  1.1e+11 Memory=  8383.225        t= 1.91e+05 R=   1e+03
-Depth=  117893 States= 2.03e+08 Transitions=  1.1e+11 Memory=  8410.959        t= 1.92e+05 R=   1e+03
-Depth=  117893 States= 2.04e+08 Transitions= 1.11e+11 Memory=  8437.912        t= 1.93e+05 R=   1e+03
-Depth=  117893 States= 2.05e+08 Transitions= 1.11e+11 Memory=  8465.256        t= 1.94e+05 R=   1e+03
-Depth=  117893 States= 2.06e+08 Transitions= 1.12e+11 Memory=  8489.670        t= 1.94e+05 R=   1e+03
-Depth=  117893 States= 2.07e+08 Transitions= 1.12e+11 Memory=  8517.600        t= 1.95e+05 R=   1e+03
-Depth=  117893 States= 2.08e+08 Transitions= 1.12e+11 Memory=  8543.088        t= 1.96e+05 R=   1e+03
-Depth=  117893 States= 2.09e+08 Transitions= 1.13e+11 Memory=  8566.233        t= 1.97e+05 R=   1e+03
-Depth=  117893 States=  2.1e+08 Transitions= 1.14e+11 Memory=  8590.744        t= 1.98e+05 R=   1e+03
-Depth=  117893 States= 2.11e+08 Transitions= 1.14e+11 Memory=  8613.693        t= 1.99e+05 R=   1e+03
-Depth=  117893 States= 2.12e+08 Transitions= 1.15e+11 Memory=  8642.502        t= 2.01e+05 R=   1e+03
-Depth=  117893 States= 2.13e+08 Transitions= 1.16e+11 Memory=  8672.873        t= 2.02e+05 R=   1e+03
-Depth=  117893 States= 2.14e+08 Transitions= 1.18e+11 Memory=  8697.483        t= 2.04e+05 R=   1e+03
-Depth=  117893 States= 2.15e+08 Transitions= 1.19e+11 Memory=  8722.190        t= 2.06e+05 R=   1e+03
-Depth=  117893 States= 2.16e+08 Transitions=  1.2e+11 Memory=  8744.455        t= 2.08e+05 R=   1e+03
-Depth=  117893 States= 2.17e+08 Transitions= 1.21e+11 Memory=  8765.842        t= 2.09e+05 R=   1e+03
-Depth=  117893 States= 2.18e+08 Transitions= 1.22e+11 Memory=  8785.861        t= 2.11e+05 R=   1e+03
-Depth=  117893 States= 2.19e+08 Transitions= 1.23e+11 Memory=  8804.904        t= 2.13e+05 R=   1e+03
-Depth=  117893 States=  2.2e+08 Transitions= 1.24e+11 Memory=  8823.850        t= 2.15e+05 R=   1e+03
-Depth=  117893 States= 2.21e+08 Transitions= 1.24e+11 Memory=  8850.705        t= 2.15e+05 R=   1e+03
-Depth=  117893 States= 2.22e+08 Transitions= 1.25e+11 Memory=  8877.365        t= 2.16e+05 R=   1e+03
-Depth=  117893 States= 2.23e+08 Transitions= 1.25e+11 Memory=  8902.268        t= 2.17e+05 R=   1e+03
-Depth=  117893 States= 2.24e+08 Transitions= 1.26e+11 Memory=  8927.268        t= 2.19e+05 R=   1e+03
-Depth=  117893 States= 2.25e+08 Transitions= 1.27e+11 Memory=  8949.143        t= 2.2e+05 R=   1e+03
-Depth=  117893 States= 2.26e+08 Transitions= 1.28e+11 Memory=  8973.459        t= 2.22e+05 R=   1e+03
-Depth=  117893 States= 2.27e+08 Transitions= 1.29e+11 Memory=  9004.807        t= 2.22e+05 R=   1e+03
-Depth=  117893 States= 2.28e+08 Transitions= 1.29e+11 Memory=  9031.174        t= 2.23e+05 R=   1e+03
-Depth=  117893 States= 2.29e+08 Transitions= 1.29e+11 Memory=  9054.709        t= 2.23e+05 R=   1e+03
-Depth=  117893 States=  2.3e+08 Transitions=  1.3e+11 Memory=  9077.756        t= 2.24e+05 R=   1e+03
-Depth=  117893 States= 2.31e+08 Transitions=  1.3e+11 Memory=  9103.830        t= 2.25e+05 R=   1e+03
-Depth=  117893 States= 2.32e+08 Transitions= 1.31e+11 Memory=  9128.830        t= 2.26e+05 R=   1e+03
-Depth=  117893 States= 2.33e+08 Transitions= 1.32e+11 Memory=  9150.315        t= 2.28e+05 R=   1e+03
-Depth=  117893 States= 2.34e+08 Transitions= 1.32e+11 Memory=  9175.705        t= 2.29e+05 R=   1e+03
-Depth=  117893 States= 2.35e+08 Transitions= 1.33e+11 Memory=  9201.096        t= 2.3e+05 R=   1e+03
-Depth=  117893 States= 2.36e+08 Transitions= 1.34e+11 Memory=  9226.682        t= 2.31e+05 R=   1e+03
-Depth=  117893 States= 2.37e+08 Transitions= 1.34e+11 Memory=  9253.049        t= 2.31e+05 R=   1e+03
-Depth=  117893 States= 2.38e+08 Transitions= 1.35e+11 Memory=  9276.291        t= 2.33e+05 R=   1e+03
-Depth=  117893 States= 2.39e+08 Transitions= 1.36e+11 Memory=  9300.608        t= 2.34e+05 R=   1e+03
-Depth=  117893 States=  2.4e+08 Transitions= 1.37e+11 Memory=  9324.240        t= 2.35e+05 R=   1e+03
-Depth=  117893 States= 2.41e+08 Transitions= 1.37e+11 Memory=  9348.361        t= 2.37e+05 R=   1e+03
-Depth=  117893 States= 2.42e+08 Transitions= 1.38e+11 Memory=  9372.873        t= 2.38e+05 R=   1e+03
-Depth=  117893 States= 2.43e+08 Transitions= 1.39e+11 Memory=  9396.604        t= 2.39e+05 R=   1e+03
-Depth=  117893 States= 2.44e+08 Transitions= 1.39e+11 Memory=  9421.994        t= 2.4e+05 R=   1e+03
-Depth=  117893 States= 2.45e+08 Transitions=  1.4e+11 Memory=  9450.998        t= 2.41e+05 R=   1e+03
-Depth=  117893 States= 2.46e+08 Transitions= 1.41e+11 Memory=  9475.217        t= 2.42e+05 R=   1e+03
-Depth=  117893 States= 2.47e+08 Transitions= 1.41e+11 Memory=  9498.264        t= 2.43e+05 R=   1e+03
-Depth=  117893 States= 2.48e+08 Transitions= 1.42e+11 Memory=  9522.580        t= 2.44e+05 R=   1e+03
-Depth=  117893 States= 2.49e+08 Transitions= 1.42e+11 Memory=  9549.924        t= 2.45e+05 R=   1e+03
-Depth=  117893 States=  2.5e+08 Transitions= 1.43e+11 Memory=  9579.807        t= 2.45e+05 R=   1e+03
-Depth=  117893 States= 2.51e+08 Transitions= 1.43e+11 Memory=  9609.104        t= 2.46e+05 R=   1e+03
-Depth=  117893 States= 2.52e+08 Transitions= 1.44e+11 Memory=  9631.858        t= 2.47e+05 R=   1e+03
-Depth=  117893 States= 2.53e+08 Transitions= 1.45e+11 Memory=  9652.756        t= 2.48e+05 R=   1e+03
-Depth=  117893 States= 2.54e+08 Transitions= 1.45e+11 Memory=  9678.733        t= 2.49e+05 R=   1e+03
-Depth=  117893 States= 2.55e+08 Transitions= 1.45e+11 Memory=  9703.733        t= 2.5e+05 R=   1e+03
-Depth=  117893 States= 2.56e+08 Transitions= 1.46e+11 Memory=  9728.440        t= 2.5e+05 R=   1e+03
-Depth=  117893 States= 2.57e+08 Transitions= 1.46e+11 Memory=  9757.834        t= 2.51e+05 R=   1e+03
-Depth=  117893 States= 2.58e+08 Transitions= 1.47e+11 Memory=  9784.006        t= 2.52e+05 R=   1e+03
-Depth=  117893 States= 2.59e+08 Transitions= 1.48e+11 Memory=  9810.959        t= 2.54e+05 R=   1e+03
-Depth=  117893 States=  2.6e+08 Transitions= 1.48e+11 Memory=  9839.475        t= 2.54e+05 R=   1e+03
-Depth=  117893 States= 2.61e+08 Transitions= 1.49e+11 Memory=  9862.717        t= 2.55e+05 R=   1e+03
-Depth=  117893 States= 2.62e+08 Transitions= 1.49e+11 Memory=  9891.428        t= 2.56e+05 R=   1e+03
-Depth=  117893 States= 2.63e+08 Transitions=  1.5e+11 Memory=  9916.623        t= 2.57e+05 R=   1e+03
-Depth=  117893 States= 2.64e+08 Transitions=  1.5e+11 Memory=  9944.162        t= 2.58e+05 R=   1e+03
-Depth=  117893 States= 2.65e+08 Transitions= 1.51e+11 Memory=  9969.358        t= 2.58e+05 R=   1e+03
-Depth=  117893 States= 2.66e+08 Transitions= 1.52e+11 Memory=  9995.432        t= 2.6e+05 R=   1e+03
-Depth=  117893 States= 2.67e+08 Transitions= 1.52e+11 Memory= 10023.654        t= 2.6e+05 R=   1e+03
-Depth=  117893 States= 2.68e+08 Transitions= 1.52e+11 Memory= 10047.580        t= 2.61e+05 R=   1e+03
-Depth=  117893 States= 2.69e+08 Transitions= 1.53e+11 Memory= 10075.022        t= 2.62e+05 R=   1e+03
-Depth=  117893 States=  2.7e+08 Transitions= 1.54e+11 Memory= 10101.779        t= 2.63e+05 R=   1e+03
-Depth=  117893 States= 2.71e+08 Transitions= 1.54e+11 Memory= 10129.221        t= 2.64e+05 R=   1e+03
-Depth=  117893 States= 2.72e+08 Transitions= 1.54e+11 Memory= 10154.416        t= 2.64e+05 R=   1e+03
-Depth=  117893 States= 2.73e+08 Transitions= 1.55e+11 Memory= 10180.393        t= 2.66e+05 R=   1e+03
-Depth=  117893 States= 2.74e+08 Transitions= 1.56e+11 Memory= 10209.104        t= 2.66e+05 R=   1e+03
-Depth=  117893 States= 2.75e+08 Transitions= 1.56e+11 Memory= 10232.541        t= 2.67e+05 R=   1e+03
-Depth=  117893 States= 2.76e+08 Transitions= 1.57e+11 Memory= 10259.690        t= 2.68e+05 R=   1e+03
-Depth=  117893 States= 2.77e+08 Transitions= 1.57e+11 Memory= 10285.080        t= 2.68e+05 R=   1e+03
-Depth=  117893 States= 2.78e+08 Transitions= 1.57e+11 Memory= 10311.154        t= 2.69e+05 R=   1e+03
-Depth=  117893 States= 2.79e+08 Transitions= 1.58e+11 Memory= 10337.033        t= 2.71e+05 R=   1e+03
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.log b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.log
deleted file mode 100644 (file)
index f9e72c0..0000000
+++ /dev/null
@@ -1,810 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi-compress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1362)
-depth 7: Claim reached state 9 (line 1367)
-depth 50: Claim reached state 9 (line 1366)
-Depth=    7605 States=    1e+06 Transitions= 3.21e+08 Memory=   493.010        t=    500 R=   2e+03
-Depth=    7605 States=    2e+06 Transitions= 6.35e+08 Memory=   518.401        t=    996 R=   2e+03
-Depth=    7605 States=    3e+06 Transitions= 9.46e+08 Memory=   549.455        t= 1.5e+03 R=   2e+03
-pan: resizing hashtable to -w22..  done
-Depth=    7605 States=    4e+06 Transitions= 1.25e+09 Memory=   609.776        t= 1.97e+03 R=   2e+03
-Depth=    9389 States=    5e+06 Transitions= 1.56e+09 Memory=   634.873        t= 2.46e+03 R=   2e+03
-Depth=    9389 States=    6e+06 Transitions= 1.88e+09 Memory=   662.315        t= 2.97e+03 R=   2e+03
-Depth=    9389 States=    7e+06 Transitions= 2.25e+09 Memory=   688.193        t= 3.58e+03 R=   2e+03
-Depth=    9389 States=    8e+06 Transitions= 2.61e+09 Memory=   716.611        t= 4.18e+03 R=   2e+03
-Depth=    9389 States=    9e+06 Transitions= 2.96e+09 Memory=   743.662        t= 4.75e+03 R=   2e+03
-pan: resizing hashtable to -w24..  done
-Depth=    9389 States=    1e+07 Transitions= 3.29e+09 Memory=   894.611        t= 5.26e+03 R=   2e+03
-Depth=    9389 States=  1.1e+07 Transitions= 3.62e+09 Memory=   921.076        t= 5.77e+03 R=   2e+03
-Depth=    9389 States=  1.2e+07 Transitions= 3.93e+09 Memory=   947.053        t= 6.27e+03 R=   2e+03
-Depth=    9389 States=  1.3e+07 Transitions= 4.25e+09 Memory=   974.299        t= 6.76e+03 R=   2e+03
-Depth=    9389 States=  1.4e+07 Transitions= 4.55e+09 Memory=  1004.963        t= 7.23e+03 R=   2e+03
-Depth=    9389 States=  1.5e+07 Transitions= 4.87e+09 Memory=  1029.963        t= 7.73e+03 R=   2e+03
-Depth=    9389 States=  1.6e+07 Transitions= 5.18e+09 Memory=  1058.088        t= 8.23e+03 R=   2e+03
-Depth=    9389 States=  1.7e+07 Transitions= 5.48e+09 Memory=  1087.580        t= 8.71e+03 R=   2e+03
-Depth=    9389 States=  1.8e+07 Transitions= 5.79e+09 Memory=  1113.166        t= 9.19e+03 R=   2e+03
-Depth=    9389 States=  1.9e+07 Transitions=  6.1e+09 Memory=  1139.143        t= 9.68e+03 R=   2e+03
-Depth=    9389 States=    2e+07 Transitions= 6.59e+09 Memory=  1164.436        t= 1.05e+04 R=   2e+03
-Depth=    9389 States=  2.1e+07 Transitions= 7.19e+09 Memory=  1188.557        t= 1.15e+04 R=   2e+03
-Depth=    9389 States=  2.2e+07 Transitions= 8.02e+09 Memory=  1210.236        t= 1.28e+04 R=   2e+03
-Depth=    9389 States=  2.3e+07 Transitions= 8.41e+09 Memory=  1237.385        t= 1.35e+04 R=   2e+03
-Depth=    9389 States=  2.4e+07 Transitions= 8.96e+09 Memory=  1261.604        t= 1.44e+04 R=   2e+03
-Depth=    9389 States=  2.5e+07 Transitions= 9.91e+09 Memory=  1287.287        t= 1.6e+04 R=   2e+03
-Depth=    9389 States=  2.6e+07 Transitions= 1.06e+10 Memory=  1312.971        t= 1.71e+04 R=   2e+03
-Depth=    9600 States=  2.7e+07 Transitions=  1.1e+10 Memory=  1340.510        t= 1.78e+04 R=   2e+03
-Depth=    9600 States=  2.8e+07 Transitions= 1.15e+10 Memory=  1367.756        t= 1.86e+04 R=   2e+03
-Depth=    9600 States=  2.9e+07 Transitions= 1.21e+10 Memory=  1395.100        t= 1.96e+04 R=   1e+03
-Depth=    9600 States=    3e+07 Transitions= 1.27e+10 Memory=  1422.639        t= 2.05e+04 R=   1e+03
-Depth=    9600 States=  3.1e+07 Transitions= 1.32e+10 Memory=  1448.908        t= 2.15e+04 R=   1e+03
-Depth=    9600 States=  3.2e+07 Transitions= 1.39e+10 Memory=  1474.494        t= 2.25e+04 R=   1e+03
-Depth=    9600 States=  3.3e+07 Transitions= 1.46e+10 Memory=  1494.807        t= 2.38e+04 R=   1e+03
-Depth=    9600 States=  3.4e+07 Transitions= 1.52e+10 Memory=  1519.709        t= 2.47e+04 R=   1e+03
-pan: resizing hashtable to -w26..  done
-Depth=    9600 States=  3.5e+07 Transitions= 1.58e+10 Memory=  2042.061        t= 2.57e+04 R=   1e+03
-Depth=    9600 States=  3.6e+07 Transitions= 1.63e+10 Memory=  2068.916        t= 2.66e+04 R=   1e+03
-Depth=    9600 States=  3.7e+07 Transitions=  1.7e+10 Memory=  2094.404        t= 2.75e+04 R=   1e+03
-Depth=    9600 States=  3.8e+07 Transitions= 1.76e+10 Memory=  2119.893        t= 2.86e+04 R=   1e+03
-Depth=    9600 States=  3.9e+07 Transitions= 1.82e+10 Memory=  2144.697        t= 2.96e+04 R=   1e+03
-Depth=    9600 States=    4e+07 Transitions= 1.87e+10 Memory=  2173.018        t= 3.03e+04 R=   1e+03
-Depth=    9600 States=  4.1e+07 Transitions= 1.93e+10 Memory=  2200.068        t= 3.13e+04 R=   1e+03
-Depth=    9600 States=  4.2e+07 Transitions= 1.98e+10 Memory=  2225.459        t= 3.22e+04 R=   1e+03
-Depth=    9600 States=  4.3e+07 Transitions= 2.05e+10 Memory=  2252.217        t= 3.32e+04 R=   1e+03
-Depth=    9600 States=  4.4e+07 Transitions= 2.13e+10 Memory=  2275.557        t= 3.45e+04 R=   1e+03
-Depth=    9600 States=  4.5e+07 Transitions= 2.18e+10 Memory=  2303.096        t= 3.53e+04 R=   1e+03
-Depth=    9600 States=  4.6e+07 Transitions= 2.22e+10 Memory=  2327.608        t= 3.59e+04 R=   1e+03
-Depth=    9600 States=  4.7e+07 Transitions= 2.25e+10 Memory=  2355.342        t= 3.65e+04 R=   1e+03
-Depth=    9600 States=  4.8e+07 Transitions= 2.28e+10 Memory=  2385.029        t= 3.7e+04 R=   1e+03
-Depth=    9600 States=  4.9e+07 Transitions= 2.32e+10 Memory=  2413.643        t= 3.75e+04 R=   1e+03
-Depth=    9600 States=    5e+07 Transitions= 2.35e+10 Memory=  2439.522        t= 3.81e+04 R=   1e+03
-Depth=    9600 States=  5.1e+07 Transitions= 2.42e+10 Memory=  2462.959        t= 3.91e+04 R=   1e+03
-Depth=    9600 States=  5.2e+07 Transitions= 2.46e+10 Memory=  2490.498        t= 3.97e+04 R=   1e+03
-Depth=    9600 States=  5.3e+07 Transitions= 2.49e+10 Memory=  2519.600        t= 4.03e+04 R=   1e+03
-Depth=    9600 States=  5.4e+07 Transitions= 2.53e+10 Memory=  2545.674        t= 4.09e+04 R=   1e+03
-Depth=    9600 States=  5.5e+07 Transitions= 2.56e+10 Memory=  2574.190        t= 4.13e+04 R=   1e+03
-Depth=    9600 States=  5.6e+07 Transitions=  2.6e+10 Memory=  2598.604        t= 4.2e+04 R=   1e+03
-Depth=    9600 States=  5.7e+07 Transitions= 2.66e+10 Memory=  2622.334        t= 4.3e+04 R=   1e+03
-Depth=    9600 States=  5.8e+07 Transitions= 2.73e+10 Memory=  2645.869        t= 4.41e+04 R=   1e+03
-Depth=    9600 States=  5.9e+07 Transitions= 2.81e+10 Memory=  2668.623        t= 4.54e+04 R=   1e+03
-Depth=    9600 States=    6e+07 Transitions= 2.91e+10 Memory=  2701.631        t= 4.72e+04 R=   1e+03
-Depth=    9600 States=  6.1e+07 Transitions= 3.02e+10 Memory=  2729.170        t= 4.9e+04 R=   1e+03
-Depth=    9600 States=  6.2e+07 Transitions= 3.14e+10 Memory=  2754.072        t= 5.09e+04 R=   1e+03
-Depth=    9600 States=  6.3e+07 Transitions= 3.25e+10 Memory=  2778.682        t= 5.29e+04 R=   1e+03
-Depth=    9600 States=  6.4e+07 Transitions= 3.35e+10 Memory=  2799.190        t= 5.46e+04 R=   1e+03
-Depth=    9600 States=  6.5e+07 Transitions= 3.45e+10 Memory=  2820.869        t= 5.61e+04 R=   1e+03
-Depth=    9600 States=  6.6e+07 Transitions= 3.56e+10 Memory=  2840.401        t= 5.81e+04 R=   1e+03
-Depth=    9600 States=  6.7e+07 Transitions= 3.66e+10 Memory=  2859.443        t= 5.98e+04 R=   1e+03
-Depth=    9600 States=  6.8e+07 Transitions= 3.74e+10 Memory=  2881.807        t= 6.1e+04 R=   1e+03
-Depth=    9600 States=  6.9e+07 Transitions= 3.78e+10 Memory=  2909.053        t= 6.17e+04 R=   1e+03
-Depth=    9600 States=    7e+07 Transitions= 3.84e+10 Memory=  2934.151        t= 6.27e+04 R=   1e+03
-Depth=    9600 States=  7.1e+07 Transitions= 3.94e+10 Memory=  2959.053        t= 6.43e+04 R=   1e+03
-Depth=    9600 States=  7.2e+07 Transitions= 4.05e+10 Memory=  2980.049        t= 6.62e+04 R=   1e+03
-Depth=    9600 States=  7.3e+07 Transitions= 4.11e+10 Memory=  3007.197        t= 6.72e+04 R=   1e+03
-Depth=    9600 States=  7.4e+07 Transitions= 4.14e+10 Memory=  3037.276        t= 6.78e+04 R=   1e+03
-Depth=    9600 States=  7.5e+07 Transitions= 4.18e+10 Memory=  3063.252        t= 6.83e+04 R=   1e+03
-Depth=    9600 States=  7.6e+07 Transitions= 4.21e+10 Memory=  3087.276        t= 6.89e+04 R=   1e+03
-Depth=    9600 States=  7.7e+07 Transitions= 4.26e+10 Memory=  3112.178        t= 6.95e+04 R=   1e+03
-Depth=    9600 States=  7.8e+07 Transitions=  4.3e+10 Memory=  3137.764        t= 7.03e+04 R=   1e+03
-Depth=    9600 States=  7.9e+07 Transitions=  4.4e+10 Memory=  3162.178        t= 7.2e+04 R=   1e+03
-Depth=    9600 States=    8e+07 Transitions= 4.48e+10 Memory=  3185.420        t= 7.32e+04 R=   1e+03
-Depth=    9600 States=  8.1e+07 Transitions= 4.53e+10 Memory=  3212.276        t= 7.4e+04 R=   1e+03
-Depth=    9600 States=  8.2e+07 Transitions=  4.6e+10 Memory=  3237.178        t= 7.52e+04 R=   1e+03
-Depth=    9600 States=  8.3e+07 Transitions=  4.7e+10 Memory=  3261.299        t= 7.69e+04 R=   1e+03
-Depth=    9600 States=  8.4e+07 Transitions= 4.75e+10 Memory=  3286.104        t= 7.76e+04 R=   1e+03
-Depth=    9600 States=  8.5e+07 Transitions= 4.84e+10 Memory=  3309.639        t= 7.91e+04 R=   1e+03
-Depth=    9600 States=  8.6e+07 Transitions= 4.91e+10 Memory=  3333.272        t= 8.04e+04 R=   1e+03
-Depth=    9600 States=  8.7e+07 Transitions= 4.98e+10 Memory=  3358.272        t= 8.15e+04 R=   1e+03
-Depth=    9600 States=  8.8e+07 Transitions= 5.04e+10 Memory=  3382.490        t= 8.25e+04 R=   1e+03
-Depth=    9600 States=  8.9e+07 Transitions= 5.09e+10 Memory=  3410.908        t= 8.32e+04 R=   1e+03
-Depth=    9600 States=    9e+07 Transitions= 5.14e+10 Memory=  3437.959        t= 8.41e+04 R=   1e+03
-Depth=    9600 States=  9.1e+07 Transitions= 5.23e+10 Memory=  3460.908        t= 8.56e+04 R=   1e+03
-Depth=    9600 States=  9.2e+07 Transitions= 5.32e+10 Memory=  3484.639        t= 8.71e+04 R=   1e+03
-Depth=    9600 States=  9.3e+07 Transitions= 5.37e+10 Memory=  3509.932        t= 8.79e+04 R=   1e+03
-Depth=    9600 States=  9.4e+07 Transitions= 5.44e+10 Memory=  3534.346        t= 8.91e+04 R=   1e+03
-Depth=    9600 States=  9.5e+07 Transitions= 5.49e+10 Memory=  3561.299        t= 8.98e+04 R=   1e+03
-Depth=    9600 States=  9.6e+07 Transitions= 5.53e+10 Memory=  3589.522        t= 9.06e+04 R=   1e+03
-Depth=    9600 States=  9.7e+07 Transitions= 5.58e+10 Memory=  3619.209        t= 9.14e+04 R=   1e+03
-Depth=    9600 States=  9.8e+07 Transitions= 5.62e+10 Memory=  3645.576        t= 9.2e+04 R=   1e+03
-Depth=    9600 States=  9.9e+07 Transitions= 5.68e+10 Memory=  3668.623        t= 9.31e+04 R=   1e+03
-Depth=    9600 States=    1e+08 Transitions= 5.75e+10 Memory=  3692.061        t= 9.41e+04 R=   1e+03
-Depth=    9600 States= 1.01e+08 Transitions= 5.79e+10 Memory=  3717.940        t= 9.48e+04 R=   1e+03
-Depth=    9600 States= 1.02e+08 Transitions= 5.85e+10 Memory=  3741.963        t= 9.57e+04 R=   1e+03
-Depth=    9600 States= 1.03e+08 Transitions= 5.89e+10 Memory=  3768.428        t= 9.64e+04 R=   1e+03
-Depth=    9600 States= 1.04e+08 Transitions= 5.95e+10 Memory=  3795.186        t= 9.75e+04 R=   1e+03
-Depth=    9600 States= 1.05e+08 Transitions= 6.01e+10 Memory=  3820.283        t= 9.84e+04 R=   1e+03
-Depth=    9600 States= 1.06e+08 Transitions= 6.09e+10 Memory=  3846.358        t= 9.98e+04 R=   1e+03
-Depth=   10157 States= 1.07e+08 Transitions= 6.17e+10 Memory=  3873.408        t= 1.01e+05 R=   1e+03
-Depth=   10157 States= 1.08e+08 Transitions= 6.21e+10 Memory=  3901.924        t= 1.02e+05 R=   1e+03
-Depth=   10157 States= 1.09e+08 Transitions= 6.24e+10 Memory=  3925.850        t= 1.02e+05 R=   1e+03
-Depth=   10157 States=  1.1e+08 Transitions= 6.29e+10 Memory=  3955.244        t= 1.03e+05 R=   1e+03
-Depth=   10193 States= 1.11e+08 Transitions= 6.38e+10 Memory=  3979.854        t= 1.05e+05 R=   1e+03
-Depth=   10193 States= 1.12e+08 Transitions= 6.42e+10 Memory=  4007.686        t= 1.05e+05 R=   1e+03
-Depth=   10193 States= 1.13e+08 Transitions= 6.45e+10 Memory=  4033.076        t= 1.06e+05 R=   1e+03
-Depth=   10193 States= 1.14e+08 Transitions= 6.55e+10 Memory=  4060.127        t= 1.07e+05 R=   1e+03
-Depth=   10193 States= 1.15e+08 Transitions= 6.59e+10 Memory=  4088.057        t= 1.08e+05 R=   1e+03
-Depth=   10193 States= 1.16e+08 Transitions= 6.63e+10 Memory=  4112.276        t= 1.09e+05 R=   1e+03
-Depth=   10193 States= 1.17e+08 Transitions= 6.66e+10 Memory=  4140.986        t= 1.09e+05 R=   1e+03
-Depth=   10193 States= 1.18e+08 Transitions= 6.73e+10 Memory=  4167.158        t= 1.1e+05 R=   1e+03
-Depth=   10193 States= 1.19e+08 Transitions= 6.78e+10 Memory=  4195.088        t= 1.11e+05 R=   1e+03
-Depth=   10193 States=  1.2e+08 Transitions= 6.82e+10 Memory=  4220.674        t= 1.12e+05 R=   1e+03
-Depth=   10193 States= 1.21e+08 Transitions=  6.9e+10 Memory=  4247.041        t= 1.13e+05 R=   1e+03
-Depth=   10193 States= 1.22e+08 Transitions= 6.94e+10 Memory=  4275.166        t= 1.14e+05 R=   1e+03
-Depth=   10193 States= 1.23e+08 Transitions= 6.98e+10 Memory=  4299.287        t= 1.14e+05 R=   1e+03
-Depth=   10193 States= 1.24e+08 Transitions= 7.03e+10 Memory=  4326.143        t= 1.15e+05 R=   1e+03
-Depth=   10193 States= 1.25e+08 Transitions= 7.08e+10 Memory=  4352.901        t= 1.16e+05 R=   1e+03
-Depth=   10193 States= 1.26e+08 Transitions= 7.11e+10 Memory=  4380.440        t= 1.17e+05 R=   1e+03
-Depth=   10193 States= 1.27e+08 Transitions= 7.17e+10 Memory=  4407.490        t= 1.18e+05 R=   1e+03
-Depth=   10193 States= 1.28e+08 Transitions= 7.26e+10 Memory=  4431.026        t= 1.19e+05 R=   1e+03
-Depth=   10193 States= 1.29e+08 Transitions=  7.3e+10 Memory=  4461.787        t= 1.2e+05 R=   1e+03
-Depth=   10193 States=  1.3e+08 Transitions= 7.34e+10 Memory=  4487.373        t= 1.2e+05 R=   1e+03
-Depth=   10193 States= 1.31e+08 Transitions= 7.37e+10 Memory=  4511.006        t= 1.21e+05 R=   1e+03
-Depth=   10193 States= 1.32e+08 Transitions= 7.43e+10 Memory=  4536.494        t= 1.22e+05 R=   1e+03
-Depth=   10193 States= 1.33e+08 Transitions= 7.47e+10 Memory=  4564.815        t= 1.23e+05 R=   1e+03
-Depth=   10193 States= 1.34e+08 Transitions= 7.56e+10 Memory=  4590.498        t= 1.24e+05 R=   1e+03
-Depth=   10193 States= 1.35e+08 Transitions=  7.6e+10 Memory=  4619.209        t= 1.25e+05 R=   1e+03
-pan: resizing hashtable to -w28..  done
-Depth=   10193 States= 1.36e+08 Transitions= 7.63e+10 Memory=  6667.209        t= 1.25e+05 R=   1e+03
-Depth=   10193 States= 1.37e+08 Transitions= 7.68e+10 Memory=  6667.209        t= 1.26e+05 R=   1e+03
-Depth=   10193 States= 1.38e+08 Transitions= 7.73e+10 Memory=  6680.490        t= 1.27e+05 R=   1e+03
-Depth=   10193 States= 1.39e+08 Transitions= 7.76e+10 Memory=  6710.178        t= 1.27e+05 R=   1e+03
-Depth=   10193 States=  1.4e+08 Transitions= 7.86e+10 Memory=  6736.252        t= 1.29e+05 R=   1e+03
-Depth=   10193 States= 1.41e+08 Transitions= 7.91e+10 Memory=  6765.647        t= 1.3e+05 R=   1e+03
-Depth=   10193 States= 1.42e+08 Transitions= 7.95e+10 Memory=  6792.697        t= 1.3e+05 R=   1e+03
-Depth=   10193 States= 1.43e+08 Transitions= 7.98e+10 Memory=  6816.818        t= 1.31e+05 R=   1e+03
-Depth=   10193 States= 1.44e+08 Transitions= 8.02e+10 Memory=  6842.893        t= 1.32e+05 R=   1e+03
-Depth=   10193 States= 1.45e+08 Transitions=  8.1e+10 Memory=  6870.236        t= 1.33e+05 R=   1e+03
-Depth=   10193 States= 1.46e+08 Transitions= 8.15e+10 Memory=  6898.361        t= 1.34e+05 R=   1e+03
-Depth=   10193 States= 1.47e+08 Transitions= 8.18e+10 Memory=  6922.092        t= 1.34e+05 R=   1e+03
-Depth=   10193 States= 1.48e+08 Transitions= 8.23e+10 Memory=  6948.557        t= 1.35e+05 R=   1e+03
-Depth=   10193 States= 1.49e+08 Transitions= 8.28e+10 Memory=  6974.533        t= 1.36e+05 R=   1e+03
-Depth=   10193 States=  1.5e+08 Transitions= 8.31e+10 Memory=  7004.221        t= 1.36e+05 R=   1e+03
-Depth=   10193 States= 1.51e+08 Transitions= 8.36e+10 Memory=  7029.416        t= 1.37e+05 R=   1e+03
-Depth=   10193 States= 1.52e+08 Transitions= 8.41e+10 Memory=  7055.588        t= 1.38e+05 R=   1e+03
-Depth=   10193 States= 1.53e+08 Transitions= 8.45e+10 Memory=  7081.760        t= 1.39e+05 R=   1e+03
-Depth=   10193 States= 1.54e+08 Transitions=  8.5e+10 Memory=  7107.834        t= 1.39e+05 R=   1e+03
-Depth=   10193 States= 1.55e+08 Transitions= 8.54e+10 Memory=  7134.201        t= 1.4e+05 R=   1e+03
-Depth=   10193 States= 1.56e+08 Transitions= 8.59e+10 Memory=  7158.713        t= 1.41e+05 R=   1e+03
-Depth=   10193 States= 1.57e+08 Transitions= 8.66e+10 Memory=  7181.662        t= 1.42e+05 R=   1e+03
-Depth=   10193 States= 1.58e+08 Transitions= 8.74e+10 Memory=  7204.221        t= 1.43e+05 R=   1e+03
-Depth=   10193 States= 1.59e+08 Transitions= 8.78e+10 Memory=  7230.295        t= 1.44e+05 R=   1e+03
-Depth=   10193 States=  1.6e+08 Transitions= 8.83e+10 Memory=  7256.662        t= 1.45e+05 R=   1e+03
-Depth=   10193 States= 1.61e+08 Transitions= 8.87e+10 Memory=  7283.127        t= 1.45e+05 R=   1e+03
-Depth=   10193 States= 1.62e+08 Transitions= 8.94e+10 Memory=  7306.760        t= 1.47e+05 R=   1e+03
-Depth=   10193 States= 1.63e+08 Transitions= 9.03e+10 Memory=  7331.565        t= 1.48e+05 R=   1e+03
-Depth=   10193 States= 1.64e+08 Transitions= 9.12e+10 Memory=  7356.955        t= 1.49e+05 R=   1e+03
-Depth=   10193 States= 1.65e+08 Transitions= 9.15e+10 Memory=  7384.983        t= 1.5e+05 R=   1e+03
-Depth=   10193 States= 1.66e+08 Transitions=  9.2e+10 Memory=  7412.033        t= 1.51e+05 R=   1e+03
-Depth=   10193 States= 1.67e+08 Transitions= 9.26e+10 Memory=  7439.377        t= 1.52e+05 R=   1e+03
-Depth=   10193 States= 1.68e+08 Transitions= 9.32e+10 Memory=  7465.256        t= 1.53e+05 R=   1e+03
-Depth=   10193 States= 1.69e+08 Transitions= 9.37e+10 Memory=  7493.479        t= 1.54e+05 R=   1e+03
-Depth=   10193 States=  1.7e+08 Transitions= 9.44e+10 Memory=  7520.041        t= 1.55e+05 R=   1e+03
-Depth=   10193 States= 1.71e+08 Transitions=  9.5e+10 Memory=  7544.065        t= 1.56e+05 R=   1e+03
-Depth=   10193 States= 1.72e+08 Transitions= 9.59e+10 Memory=  7564.377        t= 1.57e+05 R=   1e+03
-Depth=   10193 States= 1.73e+08 Transitions= 9.66e+10 Memory=  7588.693        t= 1.58e+05 R=   1e+03
-Depth=   10193 States= 1.74e+08 Transitions= 9.73e+10 Memory=  7614.865        t= 1.59e+05 R=   1e+03
-Depth=   10193 States= 1.75e+08 Transitions= 9.81e+10 Memory=  7640.354        t= 1.61e+05 R=   1e+03
-Depth=   10193 States= 1.76e+08 Transitions= 9.87e+10 Memory=  7665.744        t= 1.62e+05 R=   1e+03
-Depth=   10193 States= 1.77e+08 Transitions= 9.93e+10 Memory=  7691.135        t= 1.63e+05 R=   1e+03
-Depth=   10193 States= 1.78e+08 Transitions= 9.99e+10 Memory=  7718.479        t= 1.64e+05 R=   1e+03
-Depth=   10193 States= 1.79e+08 Transitions= 1.01e+11 Memory=  7743.772        t= 1.65e+05 R=   1e+03
-Depth=   10193 States=  1.8e+08 Transitions= 1.01e+11 Memory=  7769.651        t= 1.66e+05 R=   1e+03
-Depth=   10193 States= 1.81e+08 Transitions= 1.02e+11 Memory=  7795.920        t= 1.67e+05 R=   1e+03
-Depth=   10193 States= 1.82e+08 Transitions= 1.03e+11 Memory=  7819.651        t= 1.68e+05 R=   1e+03
-Depth=   10193 States= 1.83e+08 Transitions= 1.03e+11 Memory=  7846.897        t= 1.69e+05 R=   1e+03
-Depth=   10193 States= 1.84e+08 Transitions= 1.04e+11 Memory=  7874.631        t= 1.7e+05 R=   1e+03
-Depth=   10193 States= 1.85e+08 Transitions= 1.04e+11 Memory=  7900.510        t= 1.7e+05 R=   1e+03
-Depth=   10193 States= 1.86e+08 Transitions= 1.05e+11 Memory=  7925.803        t= 1.71e+05 R=   1e+03
-Depth=   10193 States= 1.87e+08 Transitions= 1.05e+11 Memory=  7955.295        t= 1.72e+05 R=   1e+03
-Depth=   10193 States= 1.88e+08 Transitions= 1.05e+11 Memory=  7983.420        t= 1.72e+05 R=   1e+03
-Depth=   10193 States= 1.89e+08 Transitions= 1.06e+11 Memory=  8010.373        t= 1.73e+05 R=   1e+03
-Depth=   10193 States=  1.9e+08 Transitions= 1.06e+11 Memory=  8037.424        t= 1.73e+05 R=   1e+03
-Depth=   10193 States= 1.91e+08 Transitions= 1.07e+11 Memory=  8061.838        t= 1.74e+05 R=   1e+03
-Depth=   10193 States= 1.92e+08 Transitions= 1.07e+11 Memory=  8087.326        t= 1.75e+05 R=   1e+03
-Depth=   10193 States= 1.93e+08 Transitions= 1.08e+11 Memory=  8115.256        t= 1.76e+05 R=   1e+03
-Depth=   10193 States= 1.94e+08 Transitions= 1.08e+11 Memory=  8142.307        t= 1.76e+05 R=   1e+03
-Depth=   10193 States= 1.95e+08 Transitions= 1.08e+11 Memory=  8168.479        t= 1.77e+05 R=   1e+03
-Depth=   10193 States= 1.96e+08 Transitions= 1.09e+11 Memory=  8194.846        t= 1.78e+05 R=   1e+03
-Depth=   10193 States= 1.97e+08 Transitions= 1.09e+11 Memory=  8221.311        t= 1.79e+05 R=   1e+03
-Depth=   10193 States= 1.98e+08 Transitions=  1.1e+11 Memory=  8249.240        t= 1.79e+05 R=   1e+03
-Depth=   10193 States= 1.99e+08 Transitions=  1.1e+11 Memory=  8273.264        t= 1.8e+05 R=   1e+03
-Depth=   10193 States=    2e+08 Transitions= 1.11e+11 Memory=  8295.920        t= 1.81e+05 R=   1e+03
-Depth=   10193 States= 2.01e+08 Transitions= 1.11e+11 Memory=  8320.529        t= 1.82e+05 R=   1e+03
-Depth=   10193 States= 2.02e+08 Transitions= 1.12e+11 Memory=  8345.236        t= 1.84e+05 R=   1e+03
-Depth=   10193 States= 2.03e+08 Transitions= 1.13e+11 Memory=  8379.026        t= 1.86e+05 R=   1e+03
-Depth=   10193 States= 2.04e+08 Transitions= 1.15e+11 Memory=  8403.635        t= 1.87e+05 R=   1e+03
-Depth=   10193 States= 2.05e+08 Transitions= 1.16e+11 Memory=  8427.951        t= 1.89e+05 R=   1e+03
-Depth=   10193 States= 2.06e+08 Transitions= 1.17e+11 Memory=  8452.463        t= 1.91e+05 R=   1e+03
-Depth=   10193 States= 2.07e+08 Transitions= 1.18e+11 Memory=  8472.483        t= 1.93e+05 R=   1e+03
-Depth=   10193 States= 2.08e+08 Transitions= 1.19e+11 Memory=  8493.283        t= 1.94e+05 R=   1e+03
-Depth=   10193 States= 2.09e+08 Transitions=  1.2e+11 Memory=  8513.205        t= 1.96e+05 R=   1e+03
-Depth=   10193 States=  2.1e+08 Transitions= 1.21e+11 Memory=  8532.053        t= 1.98e+05 R=   1e+03
-Depth=   10193 States= 2.11e+08 Transitions= 1.22e+11 Memory=  8555.588        t= 1.99e+05 R=   1e+03
-Depth=   10193 States= 2.12e+08 Transitions= 1.22e+11 Memory=  8582.932        t=  2e+05 R=   1e+03
-Depth=   10193 States= 2.13e+08 Transitions= 1.23e+11 Memory=  8607.834        t= 2.01e+05 R=   1e+03
-Depth=   10193 States= 2.14e+08 Transitions= 1.23e+11 Memory=  8633.029        t= 2.02e+05 R=   1e+03
-Depth=   10193 States= 2.15e+08 Transitions= 1.24e+11 Memory=  8656.858        t= 2.04e+05 R=   1e+03
-Depth=   10193 States= 2.16e+08 Transitions= 1.25e+11 Memory=  8679.904        t= 2.05e+05 R=   1e+03
-Depth=   10193 States= 2.17e+08 Transitions= 1.26e+11 Memory=  8707.932        t= 2.06e+05 R=   1e+03
-Depth=   10193 States= 2.18e+08 Transitions= 1.26e+11 Memory=  8736.740        t= 2.07e+05 R=   1e+03
-Depth=   10193 States= 2.19e+08 Transitions= 1.26e+11 Memory=  8762.229        t= 2.07e+05 R=   1e+03
-Depth=   10193 States=  2.2e+08 Transitions= 1.27e+11 Memory=  8785.764        t= 2.08e+05 R=   1e+03
-Depth=   10193 States= 2.21e+08 Transitions= 1.27e+11 Memory=  8812.619        t= 2.08e+05 R=   1e+03
-Depth=   10193 States= 2.22e+08 Transitions= 1.28e+11 Memory=  8837.326        t= 2.09e+05 R=   1e+03
-Depth=   10193 States= 2.23e+08 Transitions= 1.29e+11 Memory=  8859.006        t= 2.11e+05 R=   1e+03
-Depth=   10193 States= 2.24e+08 Transitions=  1.3e+11 Memory=  8884.104        t= 2.12e+05 R=   1e+03
-Depth=   10193 States= 2.25e+08 Transitions=  1.3e+11 Memory=  8909.006        t= 2.13e+05 R=   1e+03
-Depth=   10193 States= 2.26e+08 Transitions= 1.31e+11 Memory=  8934.787        t= 2.14e+05 R=   1e+03
-Depth=   10193 States= 2.27e+08 Transitions= 1.31e+11 Memory=  8961.057        t= 2.15e+05 R=   1e+03
-Depth=   10193 States= 2.28e+08 Transitions= 1.32e+11 Memory=  8985.666        t= 2.16e+05 R=   1e+03
-Depth=   10193 States= 2.29e+08 Transitions= 1.33e+11 Memory=  9010.080        t= 2.18e+05 R=   1e+03
-Depth=   10193 States=  2.3e+08 Transitions= 1.34e+11 Memory=  9034.885        t= 2.19e+05 R=   1e+03
-Depth=   10193 States= 2.31e+08 Transitions= 1.35e+11 Memory=  9058.127        t= 2.2e+05 R=   1e+03
-Depth=   10193 States= 2.32e+08 Transitions= 1.35e+11 Memory=  9081.760        t= 2.22e+05 R=   1e+03
-Depth=   10193 States= 2.33e+08 Transitions= 1.36e+11 Memory=  9106.467        t= 2.23e+05 R=   1e+03
-Depth=   10193 States= 2.34e+08 Transitions= 1.37e+11 Memory=  9130.295        t= 2.24e+05 R=   1e+03
-Depth=   10193 States= 2.35e+08 Transitions= 1.37e+11 Memory=  9159.690        t= 2.24e+05 R=   1e+03
-Depth=   10193 States= 2.36e+08 Transitions= 1.38e+11 Memory=  9185.471        t= 2.25e+05 R=   1e+03
-Depth=   10193 States= 2.37e+08 Transitions= 1.38e+11 Memory=  9207.639        t= 2.27e+05 R=   1e+03
-Depth=   10193 States= 2.38e+08 Transitions= 1.39e+11 Memory=  9232.443        t= 2.28e+05 R=   1e+03
-Depth=   10193 States= 2.39e+08 Transitions=  1.4e+11 Memory=  9258.811        t= 2.29e+05 R=   1e+03
-Depth=   10193 States=  2.4e+08 Transitions=  1.4e+11 Memory=  9287.619        t= 2.29e+05 R=   1e+03
-Depth=   10193 States= 2.41e+08 Transitions=  1.4e+11 Memory=  9317.209        t= 2.3e+05 R=   1e+03
-Depth=   10193 States= 2.42e+08 Transitions= 1.41e+11 Memory=  9343.088        t= 2.31e+05 R=   1e+03
-Depth=   10193 States= 2.43e+08 Transitions= 1.42e+11 Memory=  9365.354        t= 2.32e+05 R=   1e+03
-Depth=   10193 States= 2.44e+08 Transitions= 1.42e+11 Memory=  9389.182        t= 2.33e+05 R=   1e+03
-Depth=   10193 States= 2.45e+08 Transitions= 1.43e+11 Memory=  9415.256        t= 2.33e+05 R=   1e+03
-Depth=   10193 States= 2.46e+08 Transitions= 1.43e+11 Memory=  9438.596        t= 2.34e+05 R=   1e+03
-Depth=   10193 States= 2.47e+08 Transitions= 1.44e+11 Memory=  9466.623        t= 2.35e+05 R=   1e+03
-Depth=   10193 States= 2.48e+08 Transitions= 1.44e+11 Memory=  9495.041        t= 2.36e+05 R=   1e+03
-Depth=   10193 States= 2.49e+08 Transitions= 1.45e+11 Memory=  9519.651        t= 2.37e+05 R=   1e+03
-Depth=   10193 States=  2.5e+08 Transitions= 1.46e+11 Memory=  9549.436        t= 2.38e+05 R=   1e+03
-Depth=   10193 States= 2.51e+08 Transitions= 1.46e+11 Memory=  9575.022        t= 2.39e+05 R=   1e+03
-Depth=   10193 States= 2.52e+08 Transitions= 1.46e+11 Memory=  9598.752        t= 2.39e+05 R=   1e+03
-Depth=   10193 States= 2.53e+08 Transitions= 1.47e+11 Memory=  9626.584        t= 2.41e+05 R=   1e+03
-Depth=   10193 States= 2.54e+08 Transitions= 1.48e+11 Memory=  9655.588        t= 2.42e+05 R=   1e+03
-Depth=   10193 States= 2.55e+08 Transitions= 1.48e+11 Memory=  9679.904        t= 2.42e+05 R=   1e+03
-Depth=   10193 States= 2.56e+08 Transitions= 1.49e+11 Memory=  9707.834        t= 2.43e+05 R=   1e+03
-Depth=   10193 States= 2.57e+08 Transitions= 1.49e+11 Memory=  9735.568        t= 2.45e+05 R=   1e+03
-Depth=   10193 States= 2.58e+08 Transitions=  1.5e+11 Memory=  9760.861        t= 2.45e+05 R=   1e+03
-Depth=   10193 States= 2.59e+08 Transitions=  1.5e+11 Memory=  9785.959        t= 2.46e+05 R=   1e+03
-Depth=   10193 States=  2.6e+08 Transitions=  1.5e+11 Memory=  9814.182        t= 2.46e+05 R=   1e+03
-Depth=   10193 States= 2.61e+08 Transitions= 1.51e+11 Memory=  9841.428        t= 2.48e+05 R=   1e+03
-Depth=   10193 States= 2.62e+08 Transitions= 1.52e+11 Memory=  9867.014        t= 2.48e+05 R=   1e+03
-Depth=   10193 States= 2.63e+08 Transitions= 1.52e+11 Memory=  9894.846        t= 2.49e+05 R=   1e+03
-Depth=   10193 States= 2.64e+08 Transitions= 1.53e+11 Memory=  9921.604        t= 2.5e+05 R=   1e+03
-Depth=   10193 States= 2.65e+08 Transitions= 1.53e+11 Memory=  9947.287        t= 2.51e+05 R=   1e+03
-Depth=   10193 States= 2.66e+08 Transitions= 1.54e+11 Memory=  9973.361        t= 2.51e+05 R=   1e+03
-Depth=   10193 States= 2.67e+08 Transitions= 1.54e+11 Memory=  9999.240        t= 2.52e+05 R=   1e+03
-Depth=   10193 States= 2.68e+08 Transitions= 1.55e+11 Memory= 10026.584        t= 2.53e+05 R=   1e+03
-Depth=   10193 States= 2.69e+08 Transitions= 1.55e+11 Memory= 10054.416        t= 2.54e+05 R=   1e+03
-Depth=   10193 States=  2.7e+08 Transitions= 1.56e+11 Memory= 10077.658        t= 2.56e+05 R=   1e+03
-Depth=   10193 States= 2.71e+08 Transitions= 1.56e+11 Memory= 10108.615        t= 2.56e+05 R=   1e+03
-Depth=   10193 States= 2.72e+08 Transitions= 1.57e+11 Memory= 10134.494        t= 2.57e+05 R=   1e+03
-Depth=   10193 States= 2.73e+08 Transitions= 1.57e+11 Memory= 10157.639        t= 2.57e+05 R=   1e+03
-Depth=   10193 States= 2.74e+08 Transitions= 1.58e+11 Memory= 10183.127        t= 2.58e+05 R=   1e+03
-Depth=   10193 States= 2.75e+08 Transitions= 1.58e+11 Memory= 10212.522        t= 2.59e+05 R=   1e+03
-Depth=   10193 States= 2.76e+08 Transitions= 1.59e+11 Memory= 10238.596        t= 2.6e+05 R=   1e+03
-Depth=   10193 States= 2.77e+08 Transitions= 1.59e+11 Memory= 10265.647        t= 2.61e+05 R=   1e+03
-Depth=   10193 States= 2.78e+08 Transitions=  1.6e+11 Memory= 10289.963        t= 2.62e+05 R=   1e+03
-Depth=   10193 States= 2.79e+08 Transitions=  1.6e+11 Memory= 10316.233        t= 2.62e+05 R=   1e+03
-Depth=   10193 States=  2.8e+08 Transitions= 1.61e+11 Memory= 10344.651        t= 2.63e+05 R=   1e+03
-Depth=   10193 States= 2.81e+08 Transitions= 1.61e+11 Memory= 10375.315        t= 2.64e+05 R=   1e+03
-Depth=   10193 States= 2.82e+08 Transitions= 1.62e+11 Memory= 10398.654        t= 2.65e+05 R=   1e+03
-Depth=   10193 States= 2.83e+08 Transitions= 1.62e+11 Memory= 10429.611        t= 2.66e+05 R=   1e+03
-Depth=   10193 States= 2.84e+08 Transitions= 1.63e+11 Memory= 10455.588        t= 2.67e+05 R=   1e+03
-Depth=   10193 States= 2.85e+08 Transitions= 1.63e+11 Memory= 10478.830        t= 2.67e+05 R=   1e+03
-Depth=   10193 States= 2.86e+08 Transitions= 1.64e+11 Memory= 10506.760        t= 2.68e+05 R=   1e+03
-Depth=   10193 States= 2.87e+08 Transitions= 1.64e+11 Memory= 10532.443        t= 2.69e+05 R=   1e+03
-Depth=   10193 States= 2.88e+08 Transitions= 1.65e+11 Memory= 10561.252        t= 2.7e+05 R=   1e+03
-Depth=   10193 States= 2.89e+08 Transitions= 1.65e+11 Memory= 10584.983        t= 2.71e+05 R=   1e+03
-Depth=   10193 States=  2.9e+08 Transitions= 1.66e+11 Memory= 10611.252        t= 2.71e+05 R=   1e+03
-Depth=   10193 States= 2.91e+08 Transitions= 1.66e+11 Memory= 10637.033        t= 2.72e+05 R=   1e+03
-Depth=   10193 States= 2.92e+08 Transitions= 1.66e+11 Memory= 10668.674        t= 2.73e+05 R=   1e+03
-Depth=   10193 States= 2.93e+08 Transitions= 1.67e+11 Memory= 10692.111        t= 2.73e+05 R=   1e+03
-Depth=   10193 States= 2.94e+08 Transitions= 1.67e+11 Memory= 10718.283        t= 2.74e+05 R=   1e+03
-Depth=   10193 States= 2.95e+08 Transitions= 1.68e+11 Memory= 10744.748        t= 2.75e+05 R=   1e+03
-Depth=   10193 States= 2.96e+08 Transitions= 1.68e+11 Memory= 10770.920        t= 2.76e+05 R=   1e+03
-Depth=   10193 States= 2.97e+08 Transitions= 1.69e+11 Memory= 10795.139        t= 2.76e+05 R=   1e+03
-Depth=   10193 States= 2.98e+08 Transitions= 1.69e+11 Memory= 10819.358        t= 2.77e+05 R=   1e+03
-Depth=   10193 States= 2.99e+08 Transitions=  1.7e+11 Memory= 10841.721        t= 2.79e+05 R=   1e+03
-Depth=   10193 States=    3e+08 Transitions= 1.71e+11 Memory= 10867.209        t= 2.79e+05 R=   1e+03
-Depth=   10193 States= 3.01e+08 Transitions= 1.71e+11 Memory= 10893.283        t= 2.8e+05 R=   1e+03
-Depth=   10193 States= 3.02e+08 Transitions= 1.72e+11 Memory= 10916.233        t= 2.81e+05 R=   1e+03
-Depth=   10193 States= 3.03e+08 Transitions= 1.73e+11 Memory= 10940.549        t= 2.83e+05 R=   1e+03
-Depth=   10193 States= 3.04e+08 Transitions= 1.73e+11 Memory= 10971.408        t= 2.84e+05 R=   1e+03
-Depth=   10193 States= 3.05e+08 Transitions= 1.74e+11 Memory= 10996.897        t= 2.84e+05 R=   1e+03
-Depth=   10193 States= 3.06e+08 Transitions= 1.74e+11 Memory= 11023.850        t= 2.85e+05 R=   1e+03
-Depth=   10193 States= 3.07e+08 Transitions= 1.75e+11 Memory= 11049.436        t= 2.86e+05 R=   1e+03
-Depth=   10193 States= 3.08e+08 Transitions= 1.75e+11 Memory= 11077.854        t= 2.87e+05 R=   1e+03
-Depth=   10193 States= 3.09e+08 Transitions= 1.76e+11 Memory= 11104.514        t= 2.88e+05 R=   1e+03
-Depth=   10193 States=  3.1e+08 Transitions= 1.77e+11 Memory= 11125.119        t= 2.89e+05 R=   1e+03
-Depth=   10193 States= 3.11e+08 Transitions= 1.77e+11 Memory= 11146.897        t= 2.91e+05 R=   1e+03
-Depth=   10193 States= 3.12e+08 Transitions= 1.78e+11 Memory= 11173.264        t= 2.92e+05 R=   1e+03
-Depth=   10193 States= 3.13e+08 Transitions= 1.79e+11 Memory= 11198.654        t= 2.93e+05 R=   1e+03
-Depth=   10193 States= 3.14e+08 Transitions=  1.8e+11 Memory= 11224.045        t= 2.94e+05 R=   1e+03
-Depth=   10193 States= 3.15e+08 Transitions=  1.8e+11 Memory= 11248.850        t= 2.95e+05 R=   1e+03
-Depth=   10193 States= 3.16e+08 Transitions= 1.81e+11 Memory= 11274.729        t= 2.96e+05 R=   1e+03
-Depth=   10193 States= 3.17e+08 Transitions= 1.82e+11 Memory= 11300.315        t= 2.97e+05 R=   1e+03
-Depth=   10193 States= 3.18e+08 Transitions= 1.82e+11 Memory= 11326.193        t= 2.98e+05 R=   1e+03
-Depth=   10193 States= 3.19e+08 Transitions= 1.83e+11 Memory= 11351.584        t= 2.99e+05 R=   1e+03
-Depth=   10193 States=  3.2e+08 Transitions= 1.83e+11 Memory= 11377.561        t=  3e+05 R=   1e+03
-Depth=   10193 States= 3.21e+08 Transitions= 1.84e+11 Memory= 11400.510        t= 3.01e+05 R=   1e+03
-Depth=   10193 States= 3.22e+08 Transitions= 1.85e+11 Memory= 11425.803        t= 3.02e+05 R=   1e+03
-Depth=   10193 States= 3.23e+08 Transitions= 1.85e+11 Memory= 11453.928        t= 3.03e+05 R=   1e+03
-Depth=   10193 States= 3.24e+08 Transitions= 1.86e+11 Memory= 11478.635        t= 3.04e+05 R=   1e+03
-Depth=   10193 States= 3.25e+08 Transitions= 1.87e+11 Memory= 11503.830        t= 3.05e+05 R=   1e+03
-Depth=   10193 States= 3.26e+08 Transitions= 1.87e+11 Memory= 11528.830        t= 3.06e+05 R=   1e+03
-Depth=   10193 States= 3.27e+08 Transitions= 1.88e+11 Memory= 11554.416        t= 3.07e+05 R=   1e+03
-Depth=   10193 States= 3.28e+08 Transitions= 1.89e+11 Memory= 11580.686        t= 3.08e+05 R=   1e+03
-Depth=   10193 States= 3.29e+08 Transitions= 1.89e+11 Memory= 11606.467        t= 3.09e+05 R=   1e+03
-Depth=   10193 States=  3.3e+08 Transitions=  1.9e+11 Memory= 11632.346        t= 3.1e+05 R=   1e+03
-Depth=   10193 States= 3.31e+08 Transitions=  1.9e+11 Memory= 11658.420        t= 3.11e+05 R=   1e+03
-Depth=   10193 States= 3.32e+08 Transitions= 1.91e+11 Memory= 11681.662        t= 3.13e+05 R=   1e+03
-Depth=   10193 States= 3.33e+08 Transitions= 1.92e+11 Memory= 11708.713        t= 3.13e+05 R=   1e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 10193, errors: 0
-1.8778602e+08 states, stored (3.33973e+08 visited)
-1.9159243e+11 states, matched
-1.919264e+11 transitions (= visited+matched)
-1.0808296e+12 atomic steps
-hash conflicts: 3.7119584e+10 (resolved)
-
-Stats on memory usage (in Megabytes):
-20774.057      equivalent memory usage for states (stored*(State-vector + overhead))
- 9228.353      actual memory usage for states (compression: 44.42%)
-               state-vector as stored = 16 byte + 36 byte overhead
- 2048.000      memory used for hash table (-w28)
-  457.764      memory used for DFS stack (-m10000000)
-    1.576      memory lost to fragmentation
-11732.541      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 618104 5194 3828 2 2 ]
-unreached in proctype urcu_reader
-       line 268, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 104, "(1)"
-       line 249, "pan.___", state 112, "(1)"
-       line 253, "pan.___", state 124, "(1)"
-       line 257, "pan.___", state 132, "(1)"
-       line 407, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 223, "(1)"
-       line 434, "pan.___", state 253, "(1)"
-       line 438, "pan.___", state 266, "(1)"
-       line 687, "pan.___", state 287, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 407, "pan.___", state 294, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 326, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 340, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 359, "(1)"
-       line 434, "pan.___", state 389, "(1)"
-       line 438, "pan.___", state 402, "(1)"
-       line 407, "pan.___", state 423, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 455, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 469, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 488, "(1)"
-       line 434, "pan.___", state 518, "(1)"
-       line 438, "pan.___", state 531, "(1)"
-       line 407, "pan.___", state 554, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 556, "(1)"
-       line 407, "pan.___", state 557, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 557, "else"
-       line 407, "pan.___", state 560, "(1)"
-       line 411, "pan.___", state 568, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 570, "(1)"
-       line 411, "pan.___", state 571, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 571, "else"
-       line 411, "pan.___", state 574, "(1)"
-       line 411, "pan.___", state 575, "(1)"
-       line 411, "pan.___", state 575, "(1)"
-       line 409, "pan.___", state 580, "((i<1))"
-       line 409, "pan.___", state 580, "((i>=1))"
-       line 416, "pan.___", state 586, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 588, "(1)"
-       line 416, "pan.___", state 589, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 589, "else"
-       line 416, "pan.___", state 592, "(1)"
-       line 416, "pan.___", state 593, "(1)"
-       line 416, "pan.___", state 593, "(1)"
-       line 420, "pan.___", state 600, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 602, "(1)"
-       line 420, "pan.___", state 603, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 603, "else"
-       line 420, "pan.___", state 606, "(1)"
-       line 420, "pan.___", state 607, "(1)"
-       line 420, "pan.___", state 607, "(1)"
-       line 418, "pan.___", state 612, "((i<2))"
-       line 418, "pan.___", state 612, "((i>=2))"
-       line 425, "pan.___", state 619, "(1)"
-       line 425, "pan.___", state 620, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 620, "else"
-       line 425, "pan.___", state 623, "(1)"
-       line 425, "pan.___", state 624, "(1)"
-       line 425, "pan.___", state 624, "(1)"
-       line 429, "pan.___", state 632, "(1)"
-       line 429, "pan.___", state 633, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 633, "else"
-       line 429, "pan.___", state 636, "(1)"
-       line 429, "pan.___", state 637, "(1)"
-       line 429, "pan.___", state 637, "(1)"
-       line 427, "pan.___", state 642, "((i<1))"
-       line 427, "pan.___", state 642, "((i>=1))"
-       line 434, "pan.___", state 649, "(1)"
-       line 434, "pan.___", state 650, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 650, "else"
-       line 434, "pan.___", state 653, "(1)"
-       line 434, "pan.___", state 654, "(1)"
-       line 434, "pan.___", state 654, "(1)"
-       line 438, "pan.___", state 662, "(1)"
-       line 438, "pan.___", state 663, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 663, "else"
-       line 438, "pan.___", state 666, "(1)"
-       line 438, "pan.___", state 667, "(1)"
-       line 438, "pan.___", state 667, "(1)"
-       line 436, "pan.___", state 672, "((i<2))"
-       line 436, "pan.___", state 672, "((i>=2))"
-       line 446, "pan.___", state 676, "(1)"
-       line 446, "pan.___", state 676, "(1)"
-       line 687, "pan.___", state 679, "cached_urcu_active_readers = (tmp+1)"
-       line 687, "pan.___", state 680, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 687, "pan.___", state 681, "(1)"
-       line 407, "pan.___", state 688, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 720, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 734, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 753, "(1)"
-       line 434, "pan.___", state 783, "(1)"
-       line 438, "pan.___", state 796, "(1)"
-       line 407, "pan.___", state 824, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 856, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 870, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 889, "(1)"
-       line 434, "pan.___", state 919, "(1)"
-       line 438, "pan.___", state 932, "(1)"
-       line 407, "pan.___", state 953, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 955, "(1)"
-       line 407, "pan.___", state 956, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 956, "else"
-       line 407, "pan.___", state 959, "(1)"
-       line 411, "pan.___", state 967, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 969, "(1)"
-       line 411, "pan.___", state 970, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 970, "else"
-       line 411, "pan.___", state 973, "(1)"
-       line 411, "pan.___", state 974, "(1)"
-       line 411, "pan.___", state 974, "(1)"
-       line 409, "pan.___", state 979, "((i<1))"
-       line 409, "pan.___", state 979, "((i>=1))"
-       line 416, "pan.___", state 985, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 987, "(1)"
-       line 416, "pan.___", state 988, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 988, "else"
-       line 416, "pan.___", state 991, "(1)"
-       line 416, "pan.___", state 992, "(1)"
-       line 416, "pan.___", state 992, "(1)"
-       line 420, "pan.___", state 999, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 1001, "(1)"
-       line 420, "pan.___", state 1002, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 1002, "else"
-       line 420, "pan.___", state 1005, "(1)"
-       line 420, "pan.___", state 1006, "(1)"
-       line 420, "pan.___", state 1006, "(1)"
-       line 418, "pan.___", state 1011, "((i<2))"
-       line 418, "pan.___", state 1011, "((i>=2))"
-       line 425, "pan.___", state 1018, "(1)"
-       line 425, "pan.___", state 1019, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 1019, "else"
-       line 425, "pan.___", state 1022, "(1)"
-       line 425, "pan.___", state 1023, "(1)"
-       line 425, "pan.___", state 1023, "(1)"
-       line 429, "pan.___", state 1031, "(1)"
-       line 429, "pan.___", state 1032, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 1032, "else"
-       line 429, "pan.___", state 1035, "(1)"
-       line 429, "pan.___", state 1036, "(1)"
-       line 429, "pan.___", state 1036, "(1)"
-       line 427, "pan.___", state 1041, "((i<1))"
-       line 427, "pan.___", state 1041, "((i>=1))"
-       line 434, "pan.___", state 1048, "(1)"
-       line 434, "pan.___", state 1049, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 1049, "else"
-       line 434, "pan.___", state 1052, "(1)"
-       line 434, "pan.___", state 1053, "(1)"
-       line 434, "pan.___", state 1053, "(1)"
-       line 438, "pan.___", state 1061, "(1)"
-       line 438, "pan.___", state 1062, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 1062, "else"
-       line 438, "pan.___", state 1065, "(1)"
-       line 438, "pan.___", state 1066, "(1)"
-       line 438, "pan.___", state 1066, "(1)"
-       line 436, "pan.___", state 1071, "((i<2))"
-       line 436, "pan.___", state 1071, "((i>=2))"
-       line 446, "pan.___", state 1075, "(1)"
-       line 446, "pan.___", state 1075, "(1)"
-       line 695, "pan.___", state 1079, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 407, "pan.___", state 1084, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1116, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1130, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1149, "(1)"
-       line 434, "pan.___", state 1179, "(1)"
-       line 438, "pan.___", state 1192, "(1)"
-       line 407, "pan.___", state 1216, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1248, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1262, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1281, "(1)"
-       line 434, "pan.___", state 1311, "(1)"
-       line 438, "pan.___", state 1324, "(1)"
-       line 407, "pan.___", state 1349, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1381, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1395, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1414, "(1)"
-       line 434, "pan.___", state 1444, "(1)"
-       line 438, "pan.___", state 1457, "(1)"
-       line 407, "pan.___", state 1478, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1510, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1524, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1543, "(1)"
-       line 434, "pan.___", state 1573, "(1)"
-       line 438, "pan.___", state 1586, "(1)"
-       line 407, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1644, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1658, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1677, "(1)"
-       line 434, "pan.___", state 1707, "(1)"
-       line 438, "pan.___", state 1720, "(1)"
-       line 407, "pan.___", state 1741, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1773, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1787, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1806, "(1)"
-       line 434, "pan.___", state 1836, "(1)"
-       line 438, "pan.___", state 1849, "(1)"
-       line 407, "pan.___", state 1873, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1905, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1919, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1938, "(1)"
-       line 434, "pan.___", state 1968, "(1)"
-       line 438, "pan.___", state 1981, "(1)"
-       line 734, "pan.___", state 2002, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 407, "pan.___", state 2009, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2041, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2055, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2074, "(1)"
-       line 434, "pan.___", state 2104, "(1)"
-       line 438, "pan.___", state 2117, "(1)"
-       line 407, "pan.___", state 2138, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2170, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2184, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2203, "(1)"
-       line 434, "pan.___", state 2233, "(1)"
-       line 438, "pan.___", state 2246, "(1)"
-       line 407, "pan.___", state 2269, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 2271, "(1)"
-       line 407, "pan.___", state 2272, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 2272, "else"
-       line 407, "pan.___", state 2275, "(1)"
-       line 411, "pan.___", state 2283, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2286, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 2286, "else"
-       line 411, "pan.___", state 2289, "(1)"
-       line 411, "pan.___", state 2290, "(1)"
-       line 411, "pan.___", state 2290, "(1)"
-       line 409, "pan.___", state 2295, "((i<1))"
-       line 409, "pan.___", state 2295, "((i>=1))"
-       line 416, "pan.___", state 2301, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 2303, "(1)"
-       line 416, "pan.___", state 2304, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 2304, "else"
-       line 416, "pan.___", state 2307, "(1)"
-       line 416, "pan.___", state 2308, "(1)"
-       line 416, "pan.___", state 2308, "(1)"
-       line 420, "pan.___", state 2315, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 2317, "(1)"
-       line 420, "pan.___", state 2318, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 2318, "else"
-       line 420, "pan.___", state 2321, "(1)"
-       line 420, "pan.___", state 2322, "(1)"
-       line 420, "pan.___", state 2322, "(1)"
-       line 418, "pan.___", state 2327, "((i<2))"
-       line 418, "pan.___", state 2327, "((i>=2))"
-       line 425, "pan.___", state 2334, "(1)"
-       line 425, "pan.___", state 2335, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 2335, "else"
-       line 425, "pan.___", state 2338, "(1)"
-       line 425, "pan.___", state 2339, "(1)"
-       line 425, "pan.___", state 2339, "(1)"
-       line 429, "pan.___", state 2347, "(1)"
-       line 429, "pan.___", state 2348, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 2348, "else"
-       line 429, "pan.___", state 2351, "(1)"
-       line 429, "pan.___", state 2352, "(1)"
-       line 429, "pan.___", state 2352, "(1)"
-       line 427, "pan.___", state 2357, "((i<1))"
-       line 427, "pan.___", state 2357, "((i>=1))"
-       line 434, "pan.___", state 2364, "(1)"
-       line 434, "pan.___", state 2365, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 2365, "else"
-       line 434, "pan.___", state 2368, "(1)"
-       line 434, "pan.___", state 2369, "(1)"
-       line 434, "pan.___", state 2369, "(1)"
-       line 438, "pan.___", state 2377, "(1)"
-       line 438, "pan.___", state 2378, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 2378, "else"
-       line 438, "pan.___", state 2381, "(1)"
-       line 438, "pan.___", state 2382, "(1)"
-       line 438, "pan.___", state 2382, "(1)"
-       line 436, "pan.___", state 2387, "((i<2))"
-       line 436, "pan.___", state 2387, "((i>=2))"
-       line 446, "pan.___", state 2391, "(1)"
-       line 446, "pan.___", state 2391, "(1)"
-       line 734, "pan.___", state 2394, "cached_urcu_active_readers = (tmp+1)"
-       line 734, "pan.___", state 2395, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 734, "pan.___", state 2396, "(1)"
-       line 407, "pan.___", state 2403, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2435, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2449, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2468, "(1)"
-       line 434, "pan.___", state 2498, "(1)"
-       line 438, "pan.___", state 2511, "(1)"
-       line 407, "pan.___", state 2538, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2570, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2584, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2603, "(1)"
-       line 434, "pan.___", state 2633, "(1)"
-       line 438, "pan.___", state 2646, "(1)"
-       line 407, "pan.___", state 2667, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2699, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2713, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2732, "(1)"
-       line 434, "pan.___", state 2762, "(1)"
-       line 438, "pan.___", state 2775, "(1)"
-       line 245, "pan.___", state 2808, "(1)"
-       line 253, "pan.___", state 2828, "(1)"
-       line 257, "pan.___", state 2836, "(1)"
-       line 245, "pan.___", state 2851, "(1)"
-       line 253, "pan.___", state 2871, "(1)"
-       line 257, "pan.___", state 2879, "(1)"
-       line 929, "pan.___", state 2896, "-end-"
-       (245 of 2896 states)
-unreached in proctype urcu_writer
-       line 407, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 425, "pan.___", state 110, "(1)"
-       line 429, "pan.___", state 123, "(1)"
-       line 434, "pan.___", state 140, "(1)"
-       line 268, "pan.___", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 198, "cache_dirty_rcu_ptr = 0"
-       line 407, "pan.___", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 270, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 303, "(1)"
-       line 429, "pan.___", state 316, "(1)"
-       line 434, "pan.___", state 333, "(1)"
-       line 438, "pan.___", state 346, "(1)"
-       line 411, "pan.___", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 401, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 447, "(1)"
-       line 434, "pan.___", state 464, "(1)"
-       line 438, "pan.___", state 477, "(1)"
-       line 411, "pan.___", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 540, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 586, "(1)"
-       line 434, "pan.___", state 603, "(1)"
-       line 438, "pan.___", state 616, "(1)"
-       line 411, "pan.___", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 669, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 715, "(1)"
-       line 434, "pan.___", state 732, "(1)"
-       line 438, "pan.___", state 745, "(1)"
-       line 411, "pan.___", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 800, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 846, "(1)"
-       line 434, "pan.___", state 863, "(1)"
-       line 438, "pan.___", state 876, "(1)"
-       line 268, "pan.___", state 931, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 940, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 955, "(1)"
-       line 280, "pan.___", state 962, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 978, "(1)"
-       line 249, "pan.___", state 986, "(1)"
-       line 253, "pan.___", state 998, "(1)"
-       line 257, "pan.___", state 1006, "(1)"
-       line 268, "pan.___", state 1037, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1046, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1059, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1068, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1084, "(1)"
-       line 249, "pan.___", state 1092, "(1)"
-       line 253, "pan.___", state 1104, "(1)"
-       line 257, "pan.___", state 1112, "(1)"
-       line 272, "pan.___", state 1138, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1151, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1160, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1176, "(1)"
-       line 249, "pan.___", state 1184, "(1)"
-       line 253, "pan.___", state 1196, "(1)"
-       line 257, "pan.___", state 1204, "(1)"
-       line 268, "pan.___", state 1235, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1244, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1257, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1282, "(1)"
-       line 249, "pan.___", state 1290, "(1)"
-       line 253, "pan.___", state 1302, "(1)"
-       line 257, "pan.___", state 1310, "(1)"
-       line 272, "pan.___", state 1336, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1349, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1358, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1374, "(1)"
-       line 249, "pan.___", state 1382, "(1)"
-       line 253, "pan.___", state 1394, "(1)"
-       line 257, "pan.___", state 1402, "(1)"
-       line 268, "pan.___", state 1433, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1442, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1455, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1464, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1480, "(1)"
-       line 249, "pan.___", state 1488, "(1)"
-       line 253, "pan.___", state 1500, "(1)"
-       line 257, "pan.___", state 1508, "(1)"
-       line 272, "pan.___", state 1534, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1547, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1556, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1572, "(1)"
-       line 249, "pan.___", state 1580, "(1)"
-       line 253, "pan.___", state 1592, "(1)"
-       line 257, "pan.___", state 1600, "(1)"
-       line 268, "pan.___", state 1631, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1640, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1653, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1678, "(1)"
-       line 249, "pan.___", state 1686, "(1)"
-       line 253, "pan.___", state 1698, "(1)"
-       line 257, "pan.___", state 1706, "(1)"
-       line 1304, "pan.___", state 1722, "-end-"
-       (103 of 1722 states)
-unreached in proctype :init:
-       (0 of 28 states)
-unreached in proctype :never:
-       line 1369, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 3.14e+05 seconds
-pan: rate 1063.7031 states/second
-pan: avg transition delay 1.6359e-06 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi-compress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index e7f1d2d..0000000
+++ /dev/null
@@ -1,1340 +0,0 @@
-#define WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer_error.define b/formal-model/urcu-controldataflow-alpha-ipi-compress/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/.input.spin b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/.input.spin
deleted file mode 100644 (file)
index 21196d4..0000000
+++ /dev/null
@@ -1,1156 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/DEFINES b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/DEFINES
deleted file mode 100644 (file)
index 32299c1..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/Makefile b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/Makefile
deleted file mode 100644 (file)
index abf201c..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64 -DCOLLAPSE
-#CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/asserts.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/asserts.log
deleted file mode 100644 (file)
index f1445e4..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-Depth=    3250 States=    1e+06 Transitions= 2.74e+08 Memory=   500.529        t=    357 R=   3e+03
-Depth=    3250 States=    2e+06 Transitions= 5.69e+08 Memory=   537.248        t=    774 R=   3e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 72 byte, depth reached 3250, errors: 0
-  2668047 states, stored
-7.3166567e+08 states, matched
-7.3433372e+08 transitions (= stored+matched)
-4.2954757e+09 atomic steps
-hash conflicts: 4.8630608e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
-  254.445      equivalent memory usage for states (stored*(State-vector + overhead))
-   94.790      actual memory usage for states (compression: 37.25%)
-               state-vector as stored = 9 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  560.490      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 25912 2128 1970 2 ]
-unreached in proctype urcu_reader
-       line 267, ".input.spin", state 55, "cache_dirty_urcu_gp_ctr = 0"
-       line 275, ".input.spin", state 77, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 86, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 102, "(1)"
-       line 248, ".input.spin", state 110, "(1)"
-       line 252, ".input.spin", state 122, "(1)"
-       line 256, ".input.spin", state 130, "(1)"
-       line 403, ".input.spin", state 156, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, ".input.spin", state 188, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 202, "cache_dirty_rcu_data[i] = 0"
-       line 421, ".input.spin", state 221, "(1)"
-       line 430, ".input.spin", state 251, "(1)"
-       line 434, ".input.spin", state 264, "(1)"
-       line 613, ".input.spin", state 285, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 403, ".input.spin", state 292, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, ".input.spin", state 324, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 338, "cache_dirty_rcu_data[i] = 0"
-       line 421, ".input.spin", state 357, "(1)"
-       line 430, ".input.spin", state 387, "(1)"
-       line 434, ".input.spin", state 400, "(1)"
-       line 403, ".input.spin", state 421, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, ".input.spin", state 453, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 467, "cache_dirty_rcu_data[i] = 0"
-       line 421, ".input.spin", state 486, "(1)"
-       line 430, ".input.spin", state 516, "(1)"
-       line 434, ".input.spin", state 529, "(1)"
-       line 403, ".input.spin", state 552, "cache_dirty_urcu_gp_ctr = 0"
-       line 403, ".input.spin", state 554, "(1)"
-       line 403, ".input.spin", state 555, "(cache_dirty_urcu_gp_ctr)"
-       line 403, ".input.spin", state 555, "else"
-       line 403, ".input.spin", state 558, "(1)"
-       line 407, ".input.spin", state 566, "cache_dirty_urcu_active_readers = 0"
-       line 407, ".input.spin", state 568, "(1)"
-       line 407, ".input.spin", state 569, "(cache_dirty_urcu_active_readers)"
-       line 407, ".input.spin", state 569, "else"
-       line 407, ".input.spin", state 572, "(1)"
-       line 407, ".input.spin", state 573, "(1)"
-       line 407, ".input.spin", state 573, "(1)"
-       line 405, ".input.spin", state 578, "((i<1))"
-       line 405, ".input.spin", state 578, "((i>=1))"
-       line 412, ".input.spin", state 584, "cache_dirty_rcu_ptr = 0"
-       line 412, ".input.spin", state 586, "(1)"
-       line 412, ".input.spin", state 587, "(cache_dirty_rcu_ptr)"
-       line 412, ".input.spin", state 587, "else"
-       line 412, ".input.spin", state 590, "(1)"
-       line 412, ".input.spin", state 591, "(1)"
-       line 412, ".input.spin", state 591, "(1)"
-       line 416, ".input.spin", state 598, "cache_dirty_rcu_data[i] = 0"
-       line 416, ".input.spin", state 600, "(1)"
-       line 416, ".input.spin", state 601, "(cache_dirty_rcu_data[i])"
-       line 416, ".input.spin", state 601, "else"
-       line 416, ".input.spin", state 604, "(1)"
-       line 416, ".input.spin", state 605, "(1)"
-       line 416, ".input.spin", state 605, "(1)"
-       line 414, ".input.spin", state 610, "((i<2))"
-       line 414, ".input.spin", state 610, "((i>=2))"
-       line 421, ".input.spin", state 617, "(1)"
-       line 421, ".input.spin", state 618, "(!(cache_dirty_urcu_gp_ctr))"
-       line 421, ".input.spin", state 618, "else"
-       line 421, ".input.spin", state 621, "(1)"
-       line 421, ".input.spin", state 622, "(1)"
-       line 421, ".input.spin", state 622, "(1)"
-       line 425, ".input.spin", state 630, "(1)"
-       line 425, ".input.spin", state 631, "(!(cache_dirty_urcu_active_readers))"
-       line 425, ".input.spin", state 631, "else"
-       line 425, ".input.spin", state 634, "(1)"
-       line 425, ".input.spin", state 635, "(1)"
-       line 425, ".input.spin", state 635, "(1)"
-       line 423, ".input.spin", state 640, "((i<1))"
-       line 423, ".input.spin", state 640, "((i>=1))"
-       line 430, ".input.spin", state 647, "(1)"
-       line 430, ".input.spin", state 648, "(!(cache_dirty_rcu_ptr))"
-       line 430, ".input.spin", state 648, "else"
-       line 430, ".input.spin", state 651, "(1)"
-       line 430, ".input.spin", state 652, "(1)"
-       line 430, ".input.spin", state 652, "(1)"
-       line 434, ".input.spin", state 660, "(1)"
-       line 434, ".input.spin", state 661, "(!(cache_dirty_rcu_data[i]))"
-       line 434, ".input.spin", state 661, "else"
-       line 434, ".input.spin", state 664, "(1)"
-       line 434, ".input.spin", state 665, "(1)"
-       line 434, ".input.spin", state 665, "(1)"
-       line 432, ".input.spin", state 670, "((i<2))"
-       line 432, ".input.spin", state 670, "((i>=2))"
-       line 442, ".input.spin", state 674, "(1)"
-       line 442, ".input.spin", state 674, "(1)"
-       line 613, ".input.spin", state 677, "cached_urcu_active_readers = (tmp+1)"
-       line 613, ".input.spin", state 678, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 613, ".input.spin", state 679, "(1)"
-       line 403, ".input.spin", state 686, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, ".input.spin", state 718, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 732, "cache_dirty_rcu_data[i] = 0"
-       line 421, ".input.spin", state 751, "(1)"
-       line 430, ".input.spin", state 781, "(1)"
-       line 434, ".input.spin", state 794, "(1)"
-       line 403, ".input.spin", state 821, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, ".input.spin", state 853, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 867, "cache_dirty_rcu_data[i] = 0"
-       line 421, ".input.spin", state 886, "(1)"
-       line 430, ".input.spin", state 916, "(1)"
-       line 434, ".input.spin", state 929, "(1)"
-       line 403, ".input.spin", state 950, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, ".input.spin", state 982, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 996, "cache_dirty_rcu_data[i] = 0"
-       line 421, ".input.spin", state 1015, "(1)"
-       line 430, ".input.spin", state 1045, "(1)"
-       line 434, ".input.spin", state 1058, "(1)"
-       line 244, ".input.spin", state 1091, "(1)"
-       line 252, ".input.spin", state 1111, "(1)"
-       line 256, ".input.spin", state 1119, "(1)"
-       line 747, ".input.spin", state 1136, "-end-"
-       (91 of 1136 states)
-unreached in proctype urcu_writer
-       line 403, ".input.spin", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, ".input.spin", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 412, ".input.spin", state 77, "cache_dirty_rcu_ptr = 0"
-       line 421, ".input.spin", state 110, "(1)"
-       line 425, ".input.spin", state 123, "(1)"
-       line 430, ".input.spin", state 140, "(1)"
-       line 267, ".input.spin", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 198, "cache_dirty_rcu_ptr = 0"
-       line 403, ".input.spin", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, ".input.spin", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 412, ".input.spin", state 270, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 421, ".input.spin", state 303, "(1)"
-       line 425, ".input.spin", state 316, "(1)"
-       line 430, ".input.spin", state 333, "(1)"
-       line 434, ".input.spin", state 346, "(1)"
-       line 407, ".input.spin", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 412, ".input.spin", state 401, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 425, ".input.spin", state 447, "(1)"
-       line 430, ".input.spin", state 464, "(1)"
-       line 434, ".input.spin", state 477, "(1)"
-       line 407, ".input.spin", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 412, ".input.spin", state 540, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 425, ".input.spin", state 586, "(1)"
-       line 430, ".input.spin", state 603, "(1)"
-       line 434, ".input.spin", state 616, "(1)"
-       line 407, ".input.spin", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 412, ".input.spin", state 669, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 425, ".input.spin", state 715, "(1)"
-       line 430, ".input.spin", state 732, "(1)"
-       line 434, ".input.spin", state 745, "(1)"
-       line 407, ".input.spin", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 412, ".input.spin", state 800, "cache_dirty_rcu_ptr = 0"
-       line 416, ".input.spin", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 425, ".input.spin", state 846, "(1)"
-       line 430, ".input.spin", state 863, "(1)"
-       line 434, ".input.spin", state 876, "(1)"
-       line 267, ".input.spin", state 931, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 940, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 955, "(1)"
-       line 279, ".input.spin", state 962, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 978, "(1)"
-       line 248, ".input.spin", state 986, "(1)"
-       line 252, ".input.spin", state 998, "(1)"
-       line 256, ".input.spin", state 1006, "(1)"
-       line 267, ".input.spin", state 1037, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 1046, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1059, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1068, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1084, "(1)"
-       line 248, ".input.spin", state 1092, "(1)"
-       line 252, ".input.spin", state 1104, "(1)"
-       line 256, ".input.spin", state 1112, "(1)"
-       line 271, ".input.spin", state 1138, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1151, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1160, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1176, "(1)"
-       line 248, ".input.spin", state 1184, "(1)"
-       line 252, ".input.spin", state 1196, "(1)"
-       line 256, ".input.spin", state 1204, "(1)"
-       line 267, ".input.spin", state 1235, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 1244, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1257, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1282, "(1)"
-       line 248, ".input.spin", state 1290, "(1)"
-       line 252, ".input.spin", state 1302, "(1)"
-       line 256, ".input.spin", state 1310, "(1)"
-       line 271, ".input.spin", state 1336, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1349, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1358, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1374, "(1)"
-       line 248, ".input.spin", state 1382, "(1)"
-       line 252, ".input.spin", state 1394, "(1)"
-       line 256, ".input.spin", state 1402, "(1)"
-       line 267, ".input.spin", state 1433, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 1442, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1455, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1464, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1480, "(1)"
-       line 248, ".input.spin", state 1488, "(1)"
-       line 252, ".input.spin", state 1500, "(1)"
-       line 256, ".input.spin", state 1508, "(1)"
-       line 271, ".input.spin", state 1534, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1547, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1556, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1572, "(1)"
-       line 248, ".input.spin", state 1580, "(1)"
-       line 252, ".input.spin", state 1592, "(1)"
-       line 256, ".input.spin", state 1600, "(1)"
-       line 267, ".input.spin", state 1631, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 1640, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1653, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1678, "(1)"
-       line 248, ".input.spin", state 1686, "(1)"
-       line 252, ".input.spin", state 1698, "(1)"
-       line 256, ".input.spin", state 1706, "(1)"
-       line 1122, ".input.spin", state 1722, "-end-"
-       (103 of 1722 states)
-unreached in proctype :init:
-       (0 of 26 states)
-
-pan: elapsed time 1.01e+03 seconds
-pan: rate  2639.775 states/second
-pan: avg transition delay 1.3764e-06 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/asserts.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/asserts.spin.input
deleted file mode 100644 (file)
index 21196d4..0000000
+++ /dev/null
@@ -1,1156 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/references.txt b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu.sh b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu.spin b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu.spin
deleted file mode 100644 (file)
index db5ab0e..0000000
+++ /dev/null
@@ -1,1138 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.log
deleted file mode 100644 (file)
index dd99ae5..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1178)
-Depth=    3880 States=    1e+06 Transitions= 2.74e+08 Memory=   512.932        t=    435 R=   2e+03
-Depth=    3880 States=    2e+06 Transitions= 5.69e+08 Memory=   559.318        t=    929 R=   2e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 3880, errors: 0
-  2668047 states, stored
-7.3167024e+08 states, matched
-7.3433829e+08 transitions (= stored+matched)
-4.2954757e+09 atomic steps
-hash conflicts: 4.8818996e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
-  295.156      equivalent memory usage for states (stored*(State-vector + overhead))
-  124.292      actual memory usage for states (compression: 42.11%)
-               state-vector as stored = 13 byte + 36 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  589.983      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 25912 2128 1970 2 1 ]
-unreached in proctype urcu_reader
-       line 267, "pan.___", state 55, "cache_dirty_urcu_gp_ctr = 0"
-       line 275, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 86, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 102, "(1)"
-       line 248, "pan.___", state 110, "(1)"
-       line 252, "pan.___", state 122, "(1)"
-       line 256, "pan.___", state 130, "(1)"
-       line 403, "pan.___", state 156, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, "pan.___", state 188, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 202, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 221, "(1)"
-       line 430, "pan.___", state 251, "(1)"
-       line 434, "pan.___", state 264, "(1)"
-       line 613, "pan.___", state 285, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 403, "pan.___", state 292, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, "pan.___", state 324, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 338, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 357, "(1)"
-       line 430, "pan.___", state 387, "(1)"
-       line 434, "pan.___", state 400, "(1)"
-       line 403, "pan.___", state 421, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, "pan.___", state 453, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 467, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 486, "(1)"
-       line 430, "pan.___", state 516, "(1)"
-       line 434, "pan.___", state 529, "(1)"
-       line 403, "pan.___", state 552, "cache_dirty_urcu_gp_ctr = 0"
-       line 403, "pan.___", state 554, "(1)"
-       line 403, "pan.___", state 555, "(cache_dirty_urcu_gp_ctr)"
-       line 403, "pan.___", state 555, "else"
-       line 403, "pan.___", state 558, "(1)"
-       line 407, "pan.___", state 566, "cache_dirty_urcu_active_readers = 0"
-       line 407, "pan.___", state 568, "(1)"
-       line 407, "pan.___", state 569, "(cache_dirty_urcu_active_readers)"
-       line 407, "pan.___", state 569, "else"
-       line 407, "pan.___", state 572, "(1)"
-       line 407, "pan.___", state 573, "(1)"
-       line 407, "pan.___", state 573, "(1)"
-       line 405, "pan.___", state 578, "((i<1))"
-       line 405, "pan.___", state 578, "((i>=1))"
-       line 412, "pan.___", state 584, "cache_dirty_rcu_ptr = 0"
-       line 412, "pan.___", state 586, "(1)"
-       line 412, "pan.___", state 587, "(cache_dirty_rcu_ptr)"
-       line 412, "pan.___", state 587, "else"
-       line 412, "pan.___", state 590, "(1)"
-       line 412, "pan.___", state 591, "(1)"
-       line 412, "pan.___", state 591, "(1)"
-       line 416, "pan.___", state 598, "cache_dirty_rcu_data[i] = 0"
-       line 416, "pan.___", state 600, "(1)"
-       line 416, "pan.___", state 601, "(cache_dirty_rcu_data[i])"
-       line 416, "pan.___", state 601, "else"
-       line 416, "pan.___", state 604, "(1)"
-       line 416, "pan.___", state 605, "(1)"
-       line 416, "pan.___", state 605, "(1)"
-       line 414, "pan.___", state 610, "((i<2))"
-       line 414, "pan.___", state 610, "((i>=2))"
-       line 421, "pan.___", state 617, "(1)"
-       line 421, "pan.___", state 618, "(!(cache_dirty_urcu_gp_ctr))"
-       line 421, "pan.___", state 618, "else"
-       line 421, "pan.___", state 621, "(1)"
-       line 421, "pan.___", state 622, "(1)"
-       line 421, "pan.___", state 622, "(1)"
-       line 425, "pan.___", state 630, "(1)"
-       line 425, "pan.___", state 631, "(!(cache_dirty_urcu_active_readers))"
-       line 425, "pan.___", state 631, "else"
-       line 425, "pan.___", state 634, "(1)"
-       line 425, "pan.___", state 635, "(1)"
-       line 425, "pan.___", state 635, "(1)"
-       line 423, "pan.___", state 640, "((i<1))"
-       line 423, "pan.___", state 640, "((i>=1))"
-       line 430, "pan.___", state 647, "(1)"
-       line 430, "pan.___", state 648, "(!(cache_dirty_rcu_ptr))"
-       line 430, "pan.___", state 648, "else"
-       line 430, "pan.___", state 651, "(1)"
-       line 430, "pan.___", state 652, "(1)"
-       line 430, "pan.___", state 652, "(1)"
-       line 434, "pan.___", state 660, "(1)"
-       line 434, "pan.___", state 661, "(!(cache_dirty_rcu_data[i]))"
-       line 434, "pan.___", state 661, "else"
-       line 434, "pan.___", state 664, "(1)"
-       line 434, "pan.___", state 665, "(1)"
-       line 434, "pan.___", state 665, "(1)"
-       line 432, "pan.___", state 670, "((i<2))"
-       line 432, "pan.___", state 670, "((i>=2))"
-       line 442, "pan.___", state 674, "(1)"
-       line 442, "pan.___", state 674, "(1)"
-       line 613, "pan.___", state 677, "cached_urcu_active_readers = (tmp+1)"
-       line 613, "pan.___", state 678, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 613, "pan.___", state 679, "(1)"
-       line 403, "pan.___", state 686, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, "pan.___", state 718, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 732, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 751, "(1)"
-       line 430, "pan.___", state 781, "(1)"
-       line 434, "pan.___", state 794, "(1)"
-       line 403, "pan.___", state 821, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, "pan.___", state 853, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 867, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 886, "(1)"
-       line 430, "pan.___", state 916, "(1)"
-       line 434, "pan.___", state 929, "(1)"
-       line 403, "pan.___", state 950, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, "pan.___", state 982, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 996, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 1015, "(1)"
-       line 430, "pan.___", state 1045, "(1)"
-       line 434, "pan.___", state 1058, "(1)"
-       line 244, "pan.___", state 1091, "(1)"
-       line 252, "pan.___", state 1111, "(1)"
-       line 256, "pan.___", state 1119, "(1)"
-       line 747, "pan.___", state 1136, "-end-"
-       (91 of 1136 states)
-unreached in proctype urcu_writer
-       line 403, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 110, "(1)"
-       line 425, "pan.___", state 123, "(1)"
-       line 430, "pan.___", state 140, "(1)"
-       line 267, "pan.___", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 198, "cache_dirty_rcu_ptr = 0"
-       line 403, "pan.___", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 270, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 303, "(1)"
-       line 425, "pan.___", state 316, "(1)"
-       line 430, "pan.___", state 333, "(1)"
-       line 434, "pan.___", state 346, "(1)"
-       line 407, "pan.___", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 401, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 447, "(1)"
-       line 430, "pan.___", state 464, "(1)"
-       line 434, "pan.___", state 477, "(1)"
-       line 407, "pan.___", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 540, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 586, "(1)"
-       line 430, "pan.___", state 603, "(1)"
-       line 434, "pan.___", state 616, "(1)"
-       line 407, "pan.___", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 669, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 715, "(1)"
-       line 430, "pan.___", state 732, "(1)"
-       line 434, "pan.___", state 745, "(1)"
-       line 407, "pan.___", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 800, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 846, "(1)"
-       line 430, "pan.___", state 863, "(1)"
-       line 434, "pan.___", state 876, "(1)"
-       line 267, "pan.___", state 931, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 940, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 955, "(1)"
-       line 279, "pan.___", state 962, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 978, "(1)"
-       line 248, "pan.___", state 986, "(1)"
-       line 252, "pan.___", state 998, "(1)"
-       line 256, "pan.___", state 1006, "(1)"
-       line 267, "pan.___", state 1037, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 1046, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1059, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1068, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1084, "(1)"
-       line 248, "pan.___", state 1092, "(1)"
-       line 252, "pan.___", state 1104, "(1)"
-       line 256, "pan.___", state 1112, "(1)"
-       line 271, "pan.___", state 1138, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1151, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1160, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1176, "(1)"
-       line 248, "pan.___", state 1184, "(1)"
-       line 252, "pan.___", state 1196, "(1)"
-       line 256, "pan.___", state 1204, "(1)"
-       line 267, "pan.___", state 1235, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 1244, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1257, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1282, "(1)"
-       line 248, "pan.___", state 1290, "(1)"
-       line 252, "pan.___", state 1302, "(1)"
-       line 256, "pan.___", state 1310, "(1)"
-       line 271, "pan.___", state 1336, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1349, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1358, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1374, "(1)"
-       line 248, "pan.___", state 1382, "(1)"
-       line 252, "pan.___", state 1394, "(1)"
-       line 256, "pan.___", state 1402, "(1)"
-       line 267, "pan.___", state 1433, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 1442, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1455, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1464, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1480, "(1)"
-       line 248, "pan.___", state 1488, "(1)"
-       line 252, "pan.___", state 1500, "(1)"
-       line 256, "pan.___", state 1508, "(1)"
-       line 271, "pan.___", state 1534, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1547, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1556, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1572, "(1)"
-       line 248, "pan.___", state 1580, "(1)"
-       line 252, "pan.___", state 1592, "(1)"
-       line 256, "pan.___", state 1600, "(1)"
-       line 267, "pan.___", state 1631, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 1640, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1653, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1678, "(1)"
-       line 248, "pan.___", state 1686, "(1)"
-       line 252, "pan.___", state 1698, "(1)"
-       line 256, "pan.___", state 1706, "(1)"
-       line 1122, "pan.___", state 1722, "-end-"
-       (103 of 1722 states)
-unreached in proctype :init:
-       (0 of 26 states)
-unreached in proctype :never:
-       line 1183, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.21e+03 seconds
-pan: rate 2200.5963 states/second
-pan: avg transition delay 1.651e-06 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.ltl b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.ltl
deleted file mode 100644 (file)
index 6be1be9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!read_poison)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free.spin.input
deleted file mode 100644 (file)
index 21196d4..0000000
+++ /dev/null
@@ -1,1156 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_nested.define b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.define b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.define
deleted file mode 100644 (file)
index d99d793..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_MB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 7fe9c9a..0000000
+++ /dev/null
@@ -1,628 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1179)
-pan: claim violated! (at depth 1246)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 3190, errors: 1
-   124498 states, stored
- 15198533 states, matched
- 15323031 transitions (= stored+matched)
- 86866126 atomic steps
-hash conflicts:    473423 (resolved)
-
-Stats on memory usage (in Megabytes):
-   13.773      equivalent memory usage for states (stored*(State-vector + overhead))
-    6.400      actual memory usage for states (compression: 46.47%)
-               state-vector as stored = 18 byte + 36 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  472.111      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 2572 1245 179 2 2 ]
-unreached in proctype urcu_reader
-       line 713, "pan.___", state 12, "((i<1))"
-       line 713, "pan.___", state 12, "((i>=1))"
-       line 268, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 104, "(1)"
-       line 249, "pan.___", state 112, "(1)"
-       line 253, "pan.___", state 124, "(1)"
-       line 257, "pan.___", state 132, "(1)"
-       line 404, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 223, "(1)"
-       line 431, "pan.___", state 253, "(1)"
-       line 435, "pan.___", state 266, "(1)"
-       line 614, "pan.___", state 287, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 404, "pan.___", state 294, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 326, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 340, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 359, "(1)"
-       line 431, "pan.___", state 389, "(1)"
-       line 435, "pan.___", state 402, "(1)"
-       line 404, "pan.___", state 423, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 455, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 469, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 488, "(1)"
-       line 431, "pan.___", state 518, "(1)"
-       line 435, "pan.___", state 531, "(1)"
-       line 404, "pan.___", state 554, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 556, "(1)"
-       line 404, "pan.___", state 557, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 557, "else"
-       line 404, "pan.___", state 560, "(1)"
-       line 408, "pan.___", state 568, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 570, "(1)"
-       line 408, "pan.___", state 571, "(cache_dirty_urcu_active_readers)"
-       line 408, "pan.___", state 571, "else"
-       line 408, "pan.___", state 574, "(1)"
-       line 408, "pan.___", state 575, "(1)"
-       line 408, "pan.___", state 575, "(1)"
-       line 406, "pan.___", state 580, "((i<1))"
-       line 406, "pan.___", state 580, "((i>=1))"
-       line 413, "pan.___", state 586, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 588, "(1)"
-       line 413, "pan.___", state 589, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 589, "else"
-       line 413, "pan.___", state 592, "(1)"
-       line 413, "pan.___", state 593, "(1)"
-       line 413, "pan.___", state 593, "(1)"
-       line 417, "pan.___", state 600, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 602, "(1)"
-       line 417, "pan.___", state 603, "(cache_dirty_rcu_data[i])"
-       line 417, "pan.___", state 603, "else"
-       line 417, "pan.___", state 606, "(1)"
-       line 417, "pan.___", state 607, "(1)"
-       line 417, "pan.___", state 607, "(1)"
-       line 415, "pan.___", state 612, "((i<2))"
-       line 415, "pan.___", state 612, "((i>=2))"
-       line 422, "pan.___", state 619, "(1)"
-       line 422, "pan.___", state 620, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 620, "else"
-       line 422, "pan.___", state 623, "(1)"
-       line 422, "pan.___", state 624, "(1)"
-       line 422, "pan.___", state 624, "(1)"
-       line 426, "pan.___", state 632, "(1)"
-       line 426, "pan.___", state 633, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 633, "else"
-       line 426, "pan.___", state 636, "(1)"
-       line 426, "pan.___", state 637, "(1)"
-       line 426, "pan.___", state 637, "(1)"
-       line 424, "pan.___", state 642, "((i<1))"
-       line 424, "pan.___", state 642, "((i>=1))"
-       line 431, "pan.___", state 649, "(1)"
-       line 431, "pan.___", state 650, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 650, "else"
-       line 431, "pan.___", state 653, "(1)"
-       line 431, "pan.___", state 654, "(1)"
-       line 431, "pan.___", state 654, "(1)"
-       line 435, "pan.___", state 662, "(1)"
-       line 435, "pan.___", state 663, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 663, "else"
-       line 435, "pan.___", state 666, "(1)"
-       line 435, "pan.___", state 667, "(1)"
-       line 435, "pan.___", state 667, "(1)"
-       line 433, "pan.___", state 672, "((i<2))"
-       line 433, "pan.___", state 672, "((i>=2))"
-       line 443, "pan.___", state 676, "(1)"
-       line 443, "pan.___", state 676, "(1)"
-       line 614, "pan.___", state 679, "cached_urcu_active_readers = (tmp+1)"
-       line 614, "pan.___", state 680, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 614, "pan.___", state 681, "(1)"
-       line 404, "pan.___", state 688, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 720, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 734, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 753, "(1)"
-       line 431, "pan.___", state 783, "(1)"
-       line 435, "pan.___", state 796, "(1)"
-       line 404, "pan.___", state 823, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 855, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 869, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 888, "(1)"
-       line 431, "pan.___", state 918, "(1)"
-       line 435, "pan.___", state 931, "(1)"
-       line 404, "pan.___", state 952, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 984, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 998, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 1017, "(1)"
-       line 431, "pan.___", state 1047, "(1)"
-       line 435, "pan.___", state 1060, "(1)"
-       line 245, "pan.___", state 1093, "(1)"
-       line 253, "pan.___", state 1113, "(1)"
-       line 257, "pan.___", state 1121, "(1)"
-       line 748, "pan.___", state 1138, "-end-"
-       (92 of 1138 states)
-unreached in proctype urcu_writer
-       line 837, "pan.___", state 12, "((i<1))"
-       line 837, "pan.___", state 12, "((i>=1))"
-       line 404, "pan.___", state 47, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 53, "(1)"
-       line 408, "pan.___", state 61, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 67, "(1)"
-       line 408, "pan.___", state 68, "(1)"
-       line 408, "pan.___", state 68, "(1)"
-       line 406, "pan.___", state 73, "((i<1))"
-       line 406, "pan.___", state 73, "((i>=1))"
-       line 413, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 85, "(1)"
-       line 413, "pan.___", state 86, "(1)"
-       line 413, "pan.___", state 86, "(1)"
-       line 417, "pan.___", state 99, "(1)"
-       line 417, "pan.___", state 100, "(1)"
-       line 417, "pan.___", state 100, "(1)"
-       line 415, "pan.___", state 105, "((i<2))"
-       line 415, "pan.___", state 105, "((i>=2))"
-       line 422, "pan.___", state 112, "(1)"
-       line 422, "pan.___", state 113, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 113, "else"
-       line 422, "pan.___", state 116, "(1)"
-       line 422, "pan.___", state 117, "(1)"
-       line 422, "pan.___", state 117, "(1)"
-       line 426, "pan.___", state 125, "(1)"
-       line 426, "pan.___", state 126, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 126, "else"
-       line 426, "pan.___", state 129, "(1)"
-       line 426, "pan.___", state 130, "(1)"
-       line 426, "pan.___", state 130, "(1)"
-       line 424, "pan.___", state 135, "((i<1))"
-       line 424, "pan.___", state 135, "((i>=1))"
-       line 431, "pan.___", state 142, "(1)"
-       line 431, "pan.___", state 143, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 143, "else"
-       line 431, "pan.___", state 146, "(1)"
-       line 431, "pan.___", state 147, "(1)"
-       line 431, "pan.___", state 147, "(1)"
-       line 435, "pan.___", state 155, "(1)"
-       line 435, "pan.___", state 156, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 156, "else"
-       line 435, "pan.___", state 159, "(1)"
-       line 435, "pan.___", state 160, "(1)"
-       line 435, "pan.___", state 160, "(1)"
-       line 433, "pan.___", state 165, "((i<2))"
-       line 433, "pan.___", state 165, "((i>=2))"
-       line 443, "pan.___", state 169, "(1)"
-       line 443, "pan.___", state 169, "(1)"
-       line 268, "pan.___", state 178, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 187, "cache_dirty_urcu_active_readers = 0"
-       line 270, "pan.___", state 195, "((i<1))"
-       line 270, "pan.___", state 195, "((i>=1))"
-       line 276, "pan.___", state 200, "cache_dirty_rcu_ptr = 0"
-       line 907, "pan.___", state 228, "old_data = cached_rcu_ptr"
-       line 918, "pan.___", state 232, "_proc_urcu_writer = (_proc_urcu_writer|(1<<4))"
-       line 404, "pan.___", state 240, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 246, "(1)"
-       line 408, "pan.___", state 254, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 260, "(1)"
-       line 408, "pan.___", state 261, "(1)"
-       line 408, "pan.___", state 261, "(1)"
-       line 406, "pan.___", state 266, "((i<1))"
-       line 406, "pan.___", state 266, "((i>=1))"
-       line 413, "pan.___", state 274, "(1)"
-       line 413, "pan.___", state 275, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 275, "else"
-       line 413, "pan.___", state 278, "(1)"
-       line 413, "pan.___", state 279, "(1)"
-       line 413, "pan.___", state 279, "(1)"
-       line 417, "pan.___", state 286, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 292, "(1)"
-       line 417, "pan.___", state 293, "(1)"
-       line 417, "pan.___", state 293, "(1)"
-       line 415, "pan.___", state 298, "((i<2))"
-       line 415, "pan.___", state 298, "((i>=2))"
-       line 422, "pan.___", state 305, "(1)"
-       line 422, "pan.___", state 306, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 306, "else"
-       line 422, "pan.___", state 309, "(1)"
-       line 422, "pan.___", state 310, "(1)"
-       line 422, "pan.___", state 310, "(1)"
-       line 426, "pan.___", state 318, "(1)"
-       line 426, "pan.___", state 319, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 319, "else"
-       line 426, "pan.___", state 322, "(1)"
-       line 426, "pan.___", state 323, "(1)"
-       line 426, "pan.___", state 323, "(1)"
-       line 424, "pan.___", state 328, "((i<1))"
-       line 424, "pan.___", state 328, "((i>=1))"
-       line 431, "pan.___", state 335, "(1)"
-       line 431, "pan.___", state 336, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 336, "else"
-       line 431, "pan.___", state 339, "(1)"
-       line 431, "pan.___", state 340, "(1)"
-       line 431, "pan.___", state 340, "(1)"
-       line 435, "pan.___", state 348, "(1)"
-       line 435, "pan.___", state 349, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 349, "else"
-       line 435, "pan.___", state 352, "(1)"
-       line 435, "pan.___", state 353, "(1)"
-       line 435, "pan.___", state 353, "(1)"
-       line 433, "pan.___", state 358, "((i<2))"
-       line 433, "pan.___", state 358, "((i>=2))"
-       line 443, "pan.___", state 362, "(1)"
-       line 443, "pan.___", state 362, "(1)"
-       line 404, "pan.___", state 373, "(1)"
-       line 404, "pan.___", state 374, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 374, "else"
-       line 404, "pan.___", state 377, "(1)"
-       line 408, "pan.___", state 385, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 391, "(1)"
-       line 408, "pan.___", state 392, "(1)"
-       line 408, "pan.___", state 392, "(1)"
-       line 406, "pan.___", state 397, "((i<1))"
-       line 406, "pan.___", state 397, "((i>=1))"
-       line 413, "pan.___", state 403, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 409, "(1)"
-       line 413, "pan.___", state 410, "(1)"
-       line 413, "pan.___", state 410, "(1)"
-       line 417, "pan.___", state 417, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 423, "(1)"
-       line 417, "pan.___", state 424, "(1)"
-       line 417, "pan.___", state 424, "(1)"
-       line 415, "pan.___", state 429, "((i<2))"
-       line 415, "pan.___", state 429, "((i>=2))"
-       line 422, "pan.___", state 436, "(1)"
-       line 422, "pan.___", state 437, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 437, "else"
-       line 422, "pan.___", state 440, "(1)"
-       line 422, "pan.___", state 441, "(1)"
-       line 422, "pan.___", state 441, "(1)"
-       line 426, "pan.___", state 449, "(1)"
-       line 426, "pan.___", state 450, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 450, "else"
-       line 426, "pan.___", state 453, "(1)"
-       line 426, "pan.___", state 454, "(1)"
-       line 426, "pan.___", state 454, "(1)"
-       line 424, "pan.___", state 459, "((i<1))"
-       line 424, "pan.___", state 459, "((i>=1))"
-       line 431, "pan.___", state 466, "(1)"
-       line 431, "pan.___", state 467, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 467, "else"
-       line 431, "pan.___", state 470, "(1)"
-       line 431, "pan.___", state 471, "(1)"
-       line 431, "pan.___", state 471, "(1)"
-       line 435, "pan.___", state 479, "(1)"
-       line 435, "pan.___", state 480, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 480, "else"
-       line 435, "pan.___", state 483, "(1)"
-       line 435, "pan.___", state 484, "(1)"
-       line 435, "pan.___", state 484, "(1)"
-       line 433, "pan.___", state 489, "((i<2))"
-       line 433, "pan.___", state 489, "((i>=2))"
-       line 443, "pan.___", state 493, "(1)"
-       line 443, "pan.___", state 493, "(1)"
-       line 972, "pan.___", state 504, "_proc_urcu_writer = (_proc_urcu_writer&~((1<<9)))"
-       line 977, "pan.___", state 505, "_proc_urcu_writer = (_proc_urcu_writer&~(((1<<8)|(1<<7))))"
-       line 404, "pan.___", state 510, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 516, "(1)"
-       line 408, "pan.___", state 524, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 530, "(1)"
-       line 408, "pan.___", state 531, "(1)"
-       line 408, "pan.___", state 531, "(1)"
-       line 406, "pan.___", state 536, "((i<1))"
-       line 406, "pan.___", state 536, "((i>=1))"
-       line 413, "pan.___", state 542, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 548, "(1)"
-       line 413, "pan.___", state 549, "(1)"
-       line 413, "pan.___", state 549, "(1)"
-       line 417, "pan.___", state 556, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 562, "(1)"
-       line 417, "pan.___", state 563, "(1)"
-       line 417, "pan.___", state 563, "(1)"
-       line 415, "pan.___", state 568, "((i<2))"
-       line 415, "pan.___", state 568, "((i>=2))"
-       line 422, "pan.___", state 575, "(1)"
-       line 422, "pan.___", state 576, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 576, "else"
-       line 422, "pan.___", state 579, "(1)"
-       line 422, "pan.___", state 580, "(1)"
-       line 422, "pan.___", state 580, "(1)"
-       line 426, "pan.___", state 588, "(1)"
-       line 426, "pan.___", state 589, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 589, "else"
-       line 426, "pan.___", state 592, "(1)"
-       line 426, "pan.___", state 593, "(1)"
-       line 426, "pan.___", state 593, "(1)"
-       line 424, "pan.___", state 598, "((i<1))"
-       line 424, "pan.___", state 598, "((i>=1))"
-       line 431, "pan.___", state 605, "(1)"
-       line 431, "pan.___", state 606, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 606, "else"
-       line 431, "pan.___", state 609, "(1)"
-       line 431, "pan.___", state 610, "(1)"
-       line 431, "pan.___", state 610, "(1)"
-       line 435, "pan.___", state 618, "(1)"
-       line 435, "pan.___", state 619, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 619, "else"
-       line 435, "pan.___", state 622, "(1)"
-       line 435, "pan.___", state 623, "(1)"
-       line 435, "pan.___", state 623, "(1)"
-       line 443, "pan.___", state 632, "(1)"
-       line 443, "pan.___", state 632, "(1)"
-       line 404, "pan.___", state 639, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 653, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 671, "cache_dirty_rcu_ptr = 0"
-       line 422, "pan.___", state 704, "(1)"
-       line 426, "pan.___", state 717, "(1)"
-       line 431, "pan.___", state 734, "(1)"
-       line 435, "pan.___", state 747, "(1)"
-       line 408, "pan.___", state 784, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 802, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 816, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 848, "(1)"
-       line 431, "pan.___", state 865, "(1)"
-       line 435, "pan.___", state 878, "(1)"
-       line 1054, "pan.___", state 905, "_proc_urcu_writer = (_proc_urcu_writer|(1<<13))"
-       line 268, "pan.___", state 933, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 935, "(1)"
-       line 272, "pan.___", state 942, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 944, "(1)"
-       line 272, "pan.___", state 945, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 945, "else"
-       line 270, "pan.___", state 950, "((i<1))"
-       line 270, "pan.___", state 950, "((i>=1))"
-       line 276, "pan.___", state 955, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 957, "(1)"
-       line 276, "pan.___", state 958, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 958, "else"
-       line 280, "pan.___", state 964, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 966, "(1)"
-       line 280, "pan.___", state 967, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 967, "else"
-       line 278, "pan.___", state 972, "((i<2))"
-       line 278, "pan.___", state 972, "((i>=2))"
-       line 245, "pan.___", state 980, "(1)"
-       line 249, "pan.___", state 988, "(1)"
-       line 249, "pan.___", state 989, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 989, "else"
-       line 247, "pan.___", state 994, "((i<1))"
-       line 247, "pan.___", state 994, "((i>=1))"
-       line 253, "pan.___", state 1000, "(1)"
-       line 253, "pan.___", state 1001, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1001, "else"
-       line 257, "pan.___", state 1008, "(1)"
-       line 257, "pan.___", state 1009, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1009, "else"
-       line 262, "pan.___", state 1018, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1018, "else"
-       line 1108, "pan.___", state 1034, "((i<1))"
-       line 1108, "pan.___", state 1034, "((i>=1))"
-       line 268, "pan.___", state 1039, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1041, "(1)"
-       line 272, "pan.___", state 1048, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1050, "(1)"
-       line 272, "pan.___", state 1051, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1051, "else"
-       line 270, "pan.___", state 1056, "((i<1))"
-       line 270, "pan.___", state 1056, "((i>=1))"
-       line 276, "pan.___", state 1061, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1063, "(1)"
-       line 276, "pan.___", state 1064, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1064, "else"
-       line 280, "pan.___", state 1070, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1072, "(1)"
-       line 280, "pan.___", state 1073, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1073, "else"
-       line 278, "pan.___", state 1078, "((i<2))"
-       line 278, "pan.___", state 1078, "((i>=2))"
-       line 245, "pan.___", state 1086, "(1)"
-       line 249, "pan.___", state 1094, "(1)"
-       line 249, "pan.___", state 1095, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1095, "else"
-       line 247, "pan.___", state 1100, "((i<1))"
-       line 247, "pan.___", state 1100, "((i>=1))"
-       line 253, "pan.___", state 1106, "(1)"
-       line 253, "pan.___", state 1107, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1107, "else"
-       line 257, "pan.___", state 1114, "(1)"
-       line 257, "pan.___", state 1115, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1115, "else"
-       line 262, "pan.___", state 1124, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1124, "else"
-       line 295, "pan.___", state 1126, "(cache_dirty_urcu_gp_ctr)"
-       line 295, "pan.___", state 1126, "else"
-       line 1108, "pan.___", state 1127, "(cache_dirty_urcu_gp_ctr)"
-       line 1108, "pan.___", state 1127, "else"
-       line 268, "pan.___", state 1131, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1133, "(1)"
-       line 272, "pan.___", state 1140, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1142, "(1)"
-       line 272, "pan.___", state 1143, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1143, "else"
-       line 270, "pan.___", state 1148, "((i<1))"
-       line 270, "pan.___", state 1148, "((i>=1))"
-       line 276, "pan.___", state 1153, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1155, "(1)"
-       line 276, "pan.___", state 1156, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1156, "else"
-       line 280, "pan.___", state 1162, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1164, "(1)"
-       line 280, "pan.___", state 1165, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1165, "else"
-       line 278, "pan.___", state 1170, "((i<2))"
-       line 278, "pan.___", state 1170, "((i>=2))"
-       line 245, "pan.___", state 1178, "(1)"
-       line 249, "pan.___", state 1186, "(1)"
-       line 249, "pan.___", state 1187, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1187, "else"
-       line 247, "pan.___", state 1192, "((i<1))"
-       line 247, "pan.___", state 1192, "((i>=1))"
-       line 253, "pan.___", state 1198, "(1)"
-       line 253, "pan.___", state 1199, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1199, "else"
-       line 257, "pan.___", state 1206, "(1)"
-       line 257, "pan.___", state 1207, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1207, "else"
-       line 262, "pan.___", state 1216, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1216, "else"
-       line 1112, "pan.___", state 1219, "i = 0"
-       line 1112, "pan.___", state 1221, "reader_barrier = 1"
-       line 1112, "pan.___", state 1232, "((i<1))"
-       line 1112, "pan.___", state 1232, "((i>=1))"
-       line 268, "pan.___", state 1237, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1239, "(1)"
-       line 272, "pan.___", state 1246, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1248, "(1)"
-       line 272, "pan.___", state 1249, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1249, "else"
-       line 270, "pan.___", state 1254, "((i<1))"
-       line 270, "pan.___", state 1254, "((i>=1))"
-       line 276, "pan.___", state 1259, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1261, "(1)"
-       line 276, "pan.___", state 1262, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1262, "else"
-       line 280, "pan.___", state 1268, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1270, "(1)"
-       line 280, "pan.___", state 1271, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1271, "else"
-       line 278, "pan.___", state 1276, "((i<2))"
-       line 278, "pan.___", state 1276, "((i>=2))"
-       line 245, "pan.___", state 1284, "(1)"
-       line 249, "pan.___", state 1292, "(1)"
-       line 249, "pan.___", state 1293, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1293, "else"
-       line 247, "pan.___", state 1298, "((i<1))"
-       line 247, "pan.___", state 1298, "((i>=1))"
-       line 253, "pan.___", state 1304, "(1)"
-       line 253, "pan.___", state 1305, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1305, "else"
-       line 257, "pan.___", state 1312, "(1)"
-       line 257, "pan.___", state 1313, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1313, "else"
-       line 262, "pan.___", state 1322, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1322, "else"
-       line 295, "pan.___", state 1324, "(cache_dirty_urcu_gp_ctr)"
-       line 295, "pan.___", state 1324, "else"
-       line 1112, "pan.___", state 1325, "(cache_dirty_urcu_gp_ctr)"
-       line 1112, "pan.___", state 1325, "else"
-       line 272, "pan.___", state 1338, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1351, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1360, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1376, "(1)"
-       line 249, "pan.___", state 1384, "(1)"
-       line 253, "pan.___", state 1396, "(1)"
-       line 257, "pan.___", state 1404, "(1)"
-       line 268, "pan.___", state 1435, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1444, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1457, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1466, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1482, "(1)"
-       line 249, "pan.___", state 1490, "(1)"
-       line 253, "pan.___", state 1502, "(1)"
-       line 257, "pan.___", state 1510, "(1)"
-       line 268, "pan.___", state 1527, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1529, "(1)"
-       line 272, "pan.___", state 1536, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1538, "(1)"
-       line 272, "pan.___", state 1539, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1539, "else"
-       line 270, "pan.___", state 1544, "((i<1))"
-       line 270, "pan.___", state 1544, "((i>=1))"
-       line 276, "pan.___", state 1549, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1551, "(1)"
-       line 276, "pan.___", state 1552, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1552, "else"
-       line 280, "pan.___", state 1558, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1560, "(1)"
-       line 280, "pan.___", state 1561, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1561, "else"
-       line 278, "pan.___", state 1566, "((i<2))"
-       line 278, "pan.___", state 1566, "((i>=2))"
-       line 245, "pan.___", state 1574, "(1)"
-       line 249, "pan.___", state 1582, "(1)"
-       line 249, "pan.___", state 1583, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1583, "else"
-       line 247, "pan.___", state 1588, "((i<1))"
-       line 247, "pan.___", state 1588, "((i>=1))"
-       line 253, "pan.___", state 1594, "(1)"
-       line 253, "pan.___", state 1595, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1595, "else"
-       line 257, "pan.___", state 1602, "(1)"
-       line 257, "pan.___", state 1603, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1603, "else"
-       line 262, "pan.___", state 1612, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1612, "else"
-       line 1119, "pan.___", state 1615, "i = 0"
-       line 1119, "pan.___", state 1617, "reader_barrier = 1"
-       line 1119, "pan.___", state 1628, "((i<1))"
-       line 1119, "pan.___", state 1628, "((i>=1))"
-       line 268, "pan.___", state 1633, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1635, "(1)"
-       line 272, "pan.___", state 1642, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1644, "(1)"
-       line 272, "pan.___", state 1645, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1645, "else"
-       line 270, "pan.___", state 1650, "((i<1))"
-       line 270, "pan.___", state 1650, "((i>=1))"
-       line 276, "pan.___", state 1655, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1657, "(1)"
-       line 276, "pan.___", state 1658, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1658, "else"
-       line 280, "pan.___", state 1664, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1666, "(1)"
-       line 280, "pan.___", state 1667, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1667, "else"
-       line 278, "pan.___", state 1672, "((i<2))"
-       line 278, "pan.___", state 1672, "((i>=2))"
-       line 245, "pan.___", state 1680, "(1)"
-       line 249, "pan.___", state 1688, "(1)"
-       line 249, "pan.___", state 1689, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1689, "else"
-       line 247, "pan.___", state 1694, "((i<1))"
-       line 247, "pan.___", state 1694, "((i>=1))"
-       line 253, "pan.___", state 1700, "(1)"
-       line 253, "pan.___", state 1701, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1701, "else"
-       line 257, "pan.___", state 1708, "(1)"
-       line 257, "pan.___", state 1709, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1709, "else"
-       line 262, "pan.___", state 1718, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1718, "else"
-       line 295, "pan.___", state 1720, "(cache_dirty_urcu_gp_ctr)"
-       line 295, "pan.___", state 1720, "else"
-       line 1119, "pan.___", state 1721, "(cache_dirty_urcu_gp_ctr)"
-       line 1119, "pan.___", state 1721, "else"
-       line 1123, "pan.___", state 1724, "-end-"
-       (312 of 1724 states)
-unreached in proctype :init:
-       line 1138, "pan.___", state 11, "((i<1))"
-       line 1138, "pan.___", state 11, "((i>=1))"
-       (1 of 26 states)
-unreached in proctype :never:
-       line 1184, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 23.7 seconds
-pan: rate 5259.7381 states/second
-pan: avg transition delay 1.5447e-06 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index af4dcf5..0000000
+++ /dev/null
@@ -1,1157 +0,0 @@
-#define NO_MB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 37c6ecd..0000000
+++ /dev/null
@@ -1,1249 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2890
-2:2:1138
-3:2:1143
-4:2:1147
-5:2:1155
-6:2:1159
-7:2:1163
-8:0:2890
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:2890
-16:3:2862
-17:3:2865
-18:3:2870
-19:3:2877
-20:3:2880
-21:3:2884
-22:3:2885
-23:0:2890
-24:3:2887
-25:0:2890
-26:2:1167
-27:0:2890
-28:2:1173
-29:0:2890
-30:2:1174
-31:0:2890
-32:2:1176
-33:0:2890
-34:2:1177
-35:0:2890
-36:2:1178
-37:0:2890
-38:2:1179
-39:0:2890
-40:2:1180
-41:2:1181
-42:2:1185
-43:2:1186
-44:2:1194
-45:2:1195
-46:2:1199
-47:2:1200
-48:2:1208
-49:2:1213
-50:2:1217
-51:2:1218
-52:2:1226
-53:2:1227
-54:2:1231
-55:2:1232
-56:2:1226
-57:2:1227
-58:2:1231
-59:2:1232
-60:2:1240
-61:2:1245
-62:2:1246
-63:2:1257
-64:2:1258
-65:2:1259
-66:2:1270
-67:2:1275
-68:2:1276
-69:2:1287
-70:2:1288
-71:2:1289
-72:2:1287
-73:2:1288
-74:2:1289
-75:2:1300
-76:2:1308
-77:0:2890
-78:2:1179
-79:0:2890
-80:2:1312
-81:2:1316
-82:2:1317
-83:2:1321
-84:2:1325
-85:2:1326
-86:2:1330
-87:2:1338
-88:2:1339
-89:2:1343
-90:2:1347
-91:2:1348
-92:2:1343
-93:2:1344
-94:2:1352
-95:0:2890
-96:2:1179
-97:0:2890
-98:2:1360
-99:2:1361
-100:2:1362
-101:0:2890
-102:2:1179
-103:0:2890
-104:2:1370
-105:0:2890
-106:2:1179
-107:0:2890
-108:2:1373
-109:2:1374
-110:2:1378
-111:2:1379
-112:2:1387
-113:2:1388
-114:2:1392
-115:2:1393
-116:2:1401
-117:2:1406
-118:2:1407
-119:2:1419
-120:2:1420
-121:2:1424
-122:2:1425
-123:2:1419
-124:2:1420
-125:2:1424
-126:2:1425
-127:2:1433
-128:2:1438
-129:2:1439
-130:2:1450
-131:2:1451
-132:2:1452
-133:2:1463
-134:2:1468
-135:2:1469
-136:2:1480
-137:2:1481
-138:2:1482
-139:2:1480
-140:2:1481
-141:2:1482
-142:2:1493
-143:2:1500
-144:0:2890
-145:2:1179
-146:0:2890
-147:2:1504
-148:2:1505
-149:2:1506
-150:2:1518
-151:2:1519
-152:2:1523
-153:2:1524
-154:2:1532
-155:2:1537
-156:2:1541
-157:2:1542
-158:2:1550
-159:2:1551
-160:2:1555
-161:2:1556
-162:2:1550
-163:2:1551
-164:2:1555
-165:2:1556
-166:2:1564
-167:2:1569
-168:2:1570
-169:2:1581
-170:2:1582
-171:2:1583
-172:2:1594
-173:2:1599
-174:2:1600
-175:2:1611
-176:2:1612
-177:2:1613
-178:2:1611
-179:2:1612
-180:2:1613
-181:2:1624
-182:2:1635
-183:2:1636
-184:0:2890
-185:2:1179
-186:0:2890
-187:2:1643
-188:2:1644
-189:2:1648
-190:2:1649
-191:2:1657
-192:2:1658
-193:2:1662
-194:2:1663
-195:2:1671
-196:2:1676
-197:2:1680
-198:2:1681
-199:2:1689
-200:2:1690
-201:2:1694
-202:2:1695
-203:2:1689
-204:2:1690
-205:2:1694
-206:2:1695
-207:2:1703
-208:2:1708
-209:2:1709
-210:2:1720
-211:2:1721
-212:2:1722
-213:2:1733
-214:2:1738
-215:2:1739
-216:2:1750
-217:2:1751
-218:2:1752
-219:2:1750
-220:2:1751
-221:2:1752
-222:2:1763
-223:0:2890
-224:2:1179
-225:0:2890
-226:2:1772
-227:2:1773
-228:2:1777
-229:2:1778
-230:2:1786
-231:2:1787
-232:2:1791
-233:2:1792
-234:2:1800
-235:2:1805
-236:2:1809
-237:2:1810
-238:2:1818
-239:2:1819
-240:2:1823
-241:2:1824
-242:2:1818
-243:2:1819
-244:2:1823
-245:2:1824
-246:2:1832
-247:2:1837
-248:2:1838
-249:2:1849
-250:2:1850
-251:2:1851
-252:2:1862
-253:2:1867
-254:2:1868
-255:2:1879
-256:2:1880
-257:2:1881
-258:2:1879
-259:2:1880
-260:2:1881
-261:2:1892
-262:2:1899
-263:0:2890
-264:2:1179
-265:0:2890
-266:2:1903
-267:2:1904
-268:2:1905
-269:2:1917
-270:2:1918
-271:2:1922
-272:2:1923
-273:2:1931
-274:2:1936
-275:2:1940
-276:2:1941
-277:2:1949
-278:2:1950
-279:2:1954
-280:2:1955
-281:2:1949
-282:2:1950
-283:2:1954
-284:2:1955
-285:2:1963
-286:2:1968
-287:2:1969
-288:2:1980
-289:2:1981
-290:2:1982
-291:2:1993
-292:2:1998
-293:2:1999
-294:2:2010
-295:2:2011
-296:2:2012
-297:2:2010
-298:2:2011
-299:2:2012
-300:2:2023
-301:2:2033
-302:2:2034
-303:0:2890
-304:2:1179
-305:0:2890
-306:2:2043
-307:2:2044
-308:0:2890
-309:2:1179
-310:0:2890
-311:2:2048
-312:0:2890
-313:2:2056
-314:0:2890
-315:2:1174
-316:0:2890
-317:2:1176
-318:0:2890
-319:2:1177
-320:0:2890
-321:2:1178
-322:0:2890
-323:2:1179
-324:0:2890
-325:2:1180
-326:2:1181
-327:2:1185
-328:2:1186
-329:2:1194
-330:2:1195
-331:2:1199
-332:2:1200
-333:2:1208
-334:2:1213
-335:2:1217
-336:2:1218
-337:2:1226
-338:2:1227
-339:2:1228
-340:2:1226
-341:2:1227
-342:2:1231
-343:2:1232
-344:2:1240
-345:2:1245
-346:2:1246
-347:2:1257
-348:2:1258
-349:2:1259
-350:2:1270
-351:2:1275
-352:2:1276
-353:2:1287
-354:2:1288
-355:2:1289
-356:2:1287
-357:2:1288
-358:2:1289
-359:2:1300
-360:2:1308
-361:0:2890
-362:2:1179
-363:0:2890
-364:2:1312
-365:2:1316
-366:2:1317
-367:2:1321
-368:2:1325
-369:2:1326
-370:2:1330
-371:2:1338
-372:2:1339
-373:2:1343
-374:2:1344
-375:2:1343
-376:2:1347
-377:2:1348
-378:2:1352
-379:0:2890
-380:2:1179
-381:0:2890
-382:2:1360
-383:2:1361
-384:2:1362
-385:0:2890
-386:2:1179
-387:0:2890
-388:2:1370
-389:0:2890
-390:2:1179
-391:0:2890
-392:2:1373
-393:2:1374
-394:2:1378
-395:2:1379
-396:2:1387
-397:2:1388
-398:2:1392
-399:2:1393
-400:2:1401
-401:2:1406
-402:2:1407
-403:2:1419
-404:2:1420
-405:2:1424
-406:2:1425
-407:2:1419
-408:2:1420
-409:2:1424
-410:2:1425
-411:2:1433
-412:2:1438
-413:2:1439
-414:2:1450
-415:2:1451
-416:2:1452
-417:2:1463
-418:2:1468
-419:2:1469
-420:2:1480
-421:2:1481
-422:2:1482
-423:2:1480
-424:2:1481
-425:2:1482
-426:2:1493
-427:2:1500
-428:0:2890
-429:2:1179
-430:0:2890
-431:2:1504
-432:2:1505
-433:2:1506
-434:2:1518
-435:2:1519
-436:2:1523
-437:2:1524
-438:2:1532
-439:2:1537
-440:2:1541
-441:2:1542
-442:2:1550
-443:2:1551
-444:2:1555
-445:2:1556
-446:2:1550
-447:2:1551
-448:2:1555
-449:2:1556
-450:2:1564
-451:2:1569
-452:2:1570
-453:2:1581
-454:2:1582
-455:2:1583
-456:2:1594
-457:2:1599
-458:2:1600
-459:2:1611
-460:2:1612
-461:2:1613
-462:2:1611
-463:2:1612
-464:2:1613
-465:2:1624
-466:2:1635
-467:2:1636
-468:0:2890
-469:2:1179
-470:0:2890
-471:2:1643
-472:2:1644
-473:2:1648
-474:2:1649
-475:2:1657
-476:2:1658
-477:2:1662
-478:2:1663
-479:2:1671
-480:2:1676
-481:2:1680
-482:2:1681
-483:2:1689
-484:2:1690
-485:2:1694
-486:2:1695
-487:2:1689
-488:2:1690
-489:2:1694
-490:2:1695
-491:2:1703
-492:2:1708
-493:2:1709
-494:2:1720
-495:2:1721
-496:2:1722
-497:2:1733
-498:2:1738
-499:2:1739
-500:2:1750
-501:2:1751
-502:2:1752
-503:2:1750
-504:2:1751
-505:2:1752
-506:2:1763
-507:0:2890
-508:2:1179
-509:0:2890
-510:2:1772
-511:2:1773
-512:2:1777
-513:2:1778
-514:2:1786
-515:2:1787
-516:2:1791
-517:2:1792
-518:2:1800
-519:2:1805
-520:2:1809
-521:2:1810
-522:2:1818
-523:2:1819
-524:2:1823
-525:2:1824
-526:2:1818
-527:2:1819
-528:2:1823
-529:2:1824
-530:2:1832
-531:2:1837
-532:2:1838
-533:2:1849
-534:2:1850
-535:2:1851
-536:2:1862
-537:2:1867
-538:2:1868
-539:2:1879
-540:2:1880
-541:2:1881
-542:2:1879
-543:2:1880
-544:2:1881
-545:2:1892
-546:2:1899
-547:0:2890
-548:2:1179
-549:0:2890
-550:2:1903
-551:2:1904
-552:2:1905
-553:2:1917
-554:2:1918
-555:2:1922
-556:2:1923
-557:2:1931
-558:2:1936
-559:2:1940
-560:2:1941
-561:2:1949
-562:2:1950
-563:2:1954
-564:2:1955
-565:2:1949
-566:2:1950
-567:2:1954
-568:2:1955
-569:2:1963
-570:2:1968
-571:2:1969
-572:2:1980
-573:2:1981
-574:2:1982
-575:2:1993
-576:2:1998
-577:2:1999
-578:2:2010
-579:2:2011
-580:2:2012
-581:2:2010
-582:2:2011
-583:2:2012
-584:2:2023
-585:2:2033
-586:2:2034
-587:0:2890
-588:2:1179
-589:0:2890
-590:2:2043
-591:2:2044
-592:0:2890
-593:2:1179
-594:0:2890
-595:2:2048
-596:0:2890
-597:2:2056
-598:0:2890
-599:2:1174
-600:0:2890
-601:2:1176
-602:0:2890
-603:2:1177
-604:0:2890
-605:2:1178
-606:0:2890
-607:2:1179
-608:0:2890
-609:2:1180
-610:2:1181
-611:2:1185
-612:2:1186
-613:2:1194
-614:2:1195
-615:2:1199
-616:2:1200
-617:2:1208
-618:2:1213
-619:2:1217
-620:2:1218
-621:2:1226
-622:2:1227
-623:2:1231
-624:2:1232
-625:2:1226
-626:2:1227
-627:2:1228
-628:2:1240
-629:2:1245
-630:2:1246
-631:2:1257
-632:2:1258
-633:2:1259
-634:2:1270
-635:2:1275
-636:2:1276
-637:2:1287
-638:2:1288
-639:2:1289
-640:2:1287
-641:2:1288
-642:2:1289
-643:2:1300
-644:2:1308
-645:0:2890
-646:2:1179
-647:0:2890
-648:2:1312
-649:2:1316
-650:2:1317
-651:2:1321
-652:2:1325
-653:2:1326
-654:2:1330
-655:2:1338
-656:2:1339
-657:2:1343
-658:2:1347
-659:2:1348
-660:2:1343
-661:2:1344
-662:2:1352
-663:0:2890
-664:2:1179
-665:0:2890
-666:2:1360
-667:2:1361
-668:2:1362
-669:0:2890
-670:2:1179
-671:0:2890
-672:2:1370
-673:0:2890
-674:2:1179
-675:0:2890
-676:2:1373
-677:2:1374
-678:2:1378
-679:2:1379
-680:2:1387
-681:2:1388
-682:2:1392
-683:2:1393
-684:2:1401
-685:2:1406
-686:2:1407
-687:2:1419
-688:2:1420
-689:2:1424
-690:2:1425
-691:2:1419
-692:2:1420
-693:2:1424
-694:2:1425
-695:2:1433
-696:2:1438
-697:2:1439
-698:2:1450
-699:2:1451
-700:2:1452
-701:2:1463
-702:2:1468
-703:2:1469
-704:2:1480
-705:2:1481
-706:2:1482
-707:2:1480
-708:2:1481
-709:2:1482
-710:2:1493
-711:2:1500
-712:0:2890
-713:2:1179
-714:0:2890
-715:2:1504
-716:2:1505
-717:2:1506
-718:2:1518
-719:2:1519
-720:2:1523
-721:2:1524
-722:2:1532
-723:2:1537
-724:2:1541
-725:2:1542
-726:2:1550
-727:2:1551
-728:2:1555
-729:2:1556
-730:2:1550
-731:2:1551
-732:2:1555
-733:2:1556
-734:2:1564
-735:2:1569
-736:2:1570
-737:2:1581
-738:2:1582
-739:2:1583
-740:2:1594
-741:2:1599
-742:2:1600
-743:2:1611
-744:2:1612
-745:2:1613
-746:2:1611
-747:2:1612
-748:2:1613
-749:2:1624
-750:2:1635
-751:2:1636
-752:0:2890
-753:2:1179
-754:0:2890
-755:2:1643
-756:2:1644
-757:2:1648
-758:2:1649
-759:2:1657
-760:2:1658
-761:2:1662
-762:2:1663
-763:2:1671
-764:2:1676
-765:2:1680
-766:2:1681
-767:2:1689
-768:2:1690
-769:2:1694
-770:2:1695
-771:2:1689
-772:2:1690
-773:2:1694
-774:2:1695
-775:2:1703
-776:2:1708
-777:2:1709
-778:2:1720
-779:2:1721
-780:2:1722
-781:2:1733
-782:2:1738
-783:2:1739
-784:2:1750
-785:2:1751
-786:2:1752
-787:2:1750
-788:2:1751
-789:2:1752
-790:2:1763
-791:0:2890
-792:2:1179
-793:0:2890
-794:2:1903
-795:2:1904
-796:2:1908
-797:2:1909
-798:2:1917
-799:2:1918
-800:2:1922
-801:2:1923
-802:2:1931
-803:2:1936
-804:2:1940
-805:2:1941
-806:2:1949
-807:2:1950
-808:2:1954
-809:2:1955
-810:2:1949
-811:2:1950
-812:2:1954
-813:2:1955
-814:2:1963
-815:2:1968
-816:2:1969
-817:2:1980
-818:2:1981
-819:2:1982
-820:2:1993
-821:2:1998
-822:2:1999
-823:2:2010
-824:2:2011
-825:2:2012
-826:2:2010
-827:2:2011
-828:2:2012
-829:2:2023
-830:2:2033
-831:2:2034
-832:0:2890
-833:2:1179
-834:0:2890
-835:2:2043
-836:2:2044
-837:0:2890
-838:2:1179
-839:0:2890
-840:2:1772
-841:2:1773
-842:2:1777
-843:2:1778
-844:2:1786
-845:2:1787
-846:2:1791
-847:2:1792
-848:2:1800
-849:2:1805
-850:2:1809
-851:2:1810
-852:2:1818
-853:2:1819
-854:2:1820
-855:2:1818
-856:2:1819
-857:2:1823
-858:2:1824
-859:2:1832
-860:2:1837
-861:2:1838
-862:2:1849
-863:2:1850
-864:2:1851
-865:2:1862
-866:2:1867
-867:2:1868
-868:2:1879
-869:2:1880
-870:2:1881
-871:2:1879
-872:2:1880
-873:2:1881
-874:2:1892
-875:2:1899
-876:0:2890
-877:2:1179
-878:0:2890
-879:2:2048
-880:0:2890
-881:2:2056
-882:0:2890
-883:2:2057
-884:0:2890
-885:2:2062
-886:0:2890
-887:1:29
-888:0:2890
-889:2:2063
-890:0:2890
-891:1:35
-892:0:2890
-893:2:2062
-894:0:2890
-895:1:36
-896:0:2890
-897:2:2063
-898:0:2890
-899:1:37
-900:0:2890
-901:2:2062
-902:0:2890
-903:1:38
-904:0:2890
-905:2:2063
-906:0:2890
-907:1:39
-908:0:2890
-909:2:2062
-910:0:2890
-911:1:40
-912:0:2890
-913:2:2063
-914:0:2890
-915:1:41
-916:0:2890
-917:2:2062
-918:0:2890
-919:1:42
-920:0:2890
-921:2:2063
-922:0:2890
-923:1:43
-924:0:2890
-925:2:2062
-926:0:2890
-927:1:44
-928:0:2890
-929:2:2063
-930:0:2890
-931:1:145
-932:0:2890
-933:2:2062
-934:0:2890
-935:1:147
-936:0:2890
-937:2:2063
-938:0:2890
-939:1:46
-940:0:2890
-941:2:2062
-942:0:2890
-943:1:153
-944:1:154
-945:1:158
-946:1:159
-947:1:167
-948:1:168
-949:1:172
-950:1:173
-951:1:181
-952:1:186
-953:1:190
-954:1:191
-955:1:199
-956:1:200
-957:1:204
-958:1:205
-959:1:199
-960:1:200
-961:1:204
-962:1:205
-963:1:213
-964:1:218
-965:1:219
-966:1:230
-967:1:231
-968:1:232
-969:1:243
-970:1:255
-971:1:256
-972:1:260
-973:1:261
-974:1:262
-975:1:260
-976:1:261
-977:1:262
-978:1:273
-979:0:2890
-980:2:2063
-981:0:2890
-982:1:42
-983:0:2890
-984:2:2062
-985:0:2890
-986:1:43
-987:0:2890
-988:2:2063
-989:0:2890
-990:1:44
-991:0:2890
-992:2:2062
-993:0:2890
-994:1:145
-995:0:2890
-996:2:2063
-997:0:2890
-998:1:147
-999:0:2890
-1000:2:2062
-1001:0:2890
-1002:1:46
-1003:0:2890
-1004:2:2063
-1005:0:2890
-1006:1:282
-1007:1:283
-1008:0:2890
-1009:2:2062
-1010:0:2890
-1011:1:42
-1012:0:2890
-1013:2:2063
-1014:0:2890
-1015:1:43
-1016:0:2890
-1017:2:2062
-1018:0:2890
-1019:1:44
-1020:0:2890
-1021:2:2063
-1022:0:2890
-1023:1:145
-1024:0:2890
-1025:2:2062
-1026:0:2890
-1027:1:147
-1028:0:2890
-1029:2:2063
-1030:0:2890
-1031:1:46
-1032:0:2890
-1033:2:2062
-1034:0:2890
-1035:1:289
-1036:1:290
-1037:1:294
-1038:1:295
-1039:1:303
-1040:1:304
-1041:1:308
-1042:1:309
-1043:1:317
-1044:1:322
-1045:1:326
-1046:1:327
-1047:1:335
-1048:1:336
-1049:1:340
-1050:1:341
-1051:1:335
-1052:1:336
-1053:1:340
-1054:1:341
-1055:1:349
-1056:1:354
-1057:1:355
-1058:1:366
-1059:1:367
-1060:1:368
-1061:1:379
-1062:1:391
-1063:1:392
-1064:1:396
-1065:1:397
-1066:1:398
-1067:1:396
-1068:1:397
-1069:1:398
-1070:1:409
-1071:0:2890
-1072:2:2063
-1073:0:2890
-1074:1:42
-1075:0:2890
-1076:2:2062
-1077:0:2890
-1078:1:43
-1079:0:2890
-1080:2:2063
-1081:0:2890
-1082:1:44
-1083:0:2890
-1084:2:2062
-1085:0:2890
-1086:1:145
-1087:0:2890
-1088:2:2063
-1089:0:2890
-1090:1:147
-1091:0:2890
-1092:2:2062
-1093:0:2890
-1094:1:46
-1095:0:2890
-1096:2:2063
-1097:0:2890
-1098:1:418
-1099:1:419
-1100:1:423
-1101:1:424
-1102:1:432
-1103:1:433
-1104:1:437
-1105:1:438
-1106:1:446
-1107:1:451
-1108:1:455
-1109:1:456
-1110:1:464
-1111:1:465
-1112:1:469
-1113:1:470
-1114:1:464
-1115:1:465
-1116:1:469
-1117:1:470
-1118:1:478
-1119:1:483
-1120:1:484
-1121:1:495
-1122:1:496
-1123:1:497
-1124:1:508
-1125:1:520
-1126:1:521
-1127:1:525
-1128:1:526
-1129:1:527
-1130:1:525
-1131:1:526
-1132:1:527
-1133:1:538
-1134:1:545
-1135:0:2890
-1136:2:2062
-1137:0:2890
-1138:1:42
-1139:0:2890
-1140:2:2063
-1141:0:2890
-1142:1:43
-1143:0:2890
-1144:2:2062
-1145:0:2890
-1146:1:44
-1147:0:2890
-1148:2:2063
-1149:0:2890
-1150:1:145
-1151:0:2890
-1152:2:2062
-1153:0:2890
-1154:1:147
-1155:0:2890
-1156:2:2063
-1157:0:2890
-1158:1:46
-1159:0:2890
-1160:2:2062
-1161:0:2890
-1162:1:683
-1163:1:684
-1164:1:688
-1165:1:689
-1166:1:697
-1167:1:698
-1168:1:699
-1169:1:711
-1170:1:716
-1171:1:720
-1172:1:721
-1173:1:729
-1174:1:730
-1175:1:734
-1176:1:735
-1177:1:729
-1178:1:730
-1179:1:734
-1180:1:735
-1181:1:743
-1182:1:748
-1183:1:749
-1184:1:760
-1185:1:761
-1186:1:762
-1187:1:773
-1188:1:785
-1189:1:786
-1190:1:790
-1191:1:791
-1192:1:792
-1193:1:790
-1194:1:791
-1195:1:792
-1196:1:803
-1197:0:2890
-1198:2:2063
-1199:0:2890
-1200:1:42
-1201:0:2890
-1202:2:2062
-1203:0:2890
-1204:1:43
-1205:0:2890
-1206:2:2063
-1207:0:2890
-1208:1:44
-1209:0:2890
-1210:2:2062
-1211:0:2890
-1212:1:145
-1213:0:2890
-1214:2:2063
-1215:0:2890
-1216:1:147
-1217:0:2890
-1218:2:2062
-1219:0:2890
-1220:1:46
-1221:0:2890
-1222:2:2063
-1223:0:2890
-1224:1:812
-1225:0:2890
-1226:2:2062
-1227:0:2890
-1228:1:1089
-1229:1:1096
-1230:1:1097
-1231:1:1104
-1232:1:1109
-1233:1:1116
-1234:1:1117
-1235:1:1116
-1236:1:1117
-1237:1:1124
-1238:1:1128
-1239:0:2890
-1240:2:2063
-1241:0:2890
-1242:1:814
-1243:1:815
-1244:0:2888
-1245:2:2062
-1246:0:2894
-1247:1:1049
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.define b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 93939dd..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1179)
-pan: claim violated! (at depth 1476)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 3979, errors: 1
-   430584 states, stored
- 99483765 states, matched
- 99914349 transitions (= stored+matched)
-5.7035561e+08 atomic steps
-hash conflicts:  13587432 (resolved)
-
-Stats on memory usage (in Megabytes):
-   47.634      equivalent memory usage for states (stored*(State-vector + overhead))
-   20.652      actual memory usage for states (compression: 43.36%)
-               state-vector as stored = 14 byte + 36 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  486.369      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 7914 682 569 2 2 ]
-unreached in proctype urcu_reader
-       line 713, "pan.___", state 12, "((i<1))"
-       line 713, "pan.___", state 12, "((i>=1))"
-       line 268, "pan.___", state 55, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 86, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 102, "(1)"
-       line 249, "pan.___", state 110, "(1)"
-       line 253, "pan.___", state 122, "(1)"
-       line 257, "pan.___", state 130, "(1)"
-       line 404, "pan.___", state 156, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 188, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 202, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 221, "(1)"
-       line 431, "pan.___", state 251, "(1)"
-       line 435, "pan.___", state 264, "(1)"
-       line 614, "pan.___", state 285, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 404, "pan.___", state 292, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 324, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 338, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 357, "(1)"
-       line 431, "pan.___", state 387, "(1)"
-       line 435, "pan.___", state 400, "(1)"
-       line 404, "pan.___", state 421, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 453, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 467, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 486, "(1)"
-       line 431, "pan.___", state 516, "(1)"
-       line 435, "pan.___", state 529, "(1)"
-       line 404, "pan.___", state 552, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 554, "(1)"
-       line 404, "pan.___", state 555, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 555, "else"
-       line 404, "pan.___", state 558, "(1)"
-       line 408, "pan.___", state 566, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 568, "(1)"
-       line 408, "pan.___", state 569, "(cache_dirty_urcu_active_readers)"
-       line 408, "pan.___", state 569, "else"
-       line 408, "pan.___", state 572, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 406, "pan.___", state 578, "((i<1))"
-       line 406, "pan.___", state 578, "((i>=1))"
-       line 413, "pan.___", state 584, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 586, "(1)"
-       line 413, "pan.___", state 587, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 587, "else"
-       line 413, "pan.___", state 590, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 417, "pan.___", state 598, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 600, "(1)"
-       line 417, "pan.___", state 601, "(cache_dirty_rcu_data[i])"
-       line 417, "pan.___", state 601, "else"
-       line 417, "pan.___", state 604, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 415, "pan.___", state 610, "((i<2))"
-       line 415, "pan.___", state 610, "((i>=2))"
-       line 422, "pan.___", state 617, "(1)"
-       line 422, "pan.___", state 618, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 618, "else"
-       line 422, "pan.___", state 621, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 426, "pan.___", state 630, "(1)"
-       line 426, "pan.___", state 631, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 631, "else"
-       line 426, "pan.___", state 634, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 424, "pan.___", state 640, "((i<1))"
-       line 424, "pan.___", state 640, "((i>=1))"
-       line 431, "pan.___", state 647, "(1)"
-       line 431, "pan.___", state 648, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 648, "else"
-       line 431, "pan.___", state 651, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 435, "pan.___", state 660, "(1)"
-       line 435, "pan.___", state 661, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 661, "else"
-       line 435, "pan.___", state 664, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 433, "pan.___", state 670, "((i<2))"
-       line 433, "pan.___", state 670, "((i>=2))"
-       line 443, "pan.___", state 674, "(1)"
-       line 443, "pan.___", state 674, "(1)"
-       line 614, "pan.___", state 677, "cached_urcu_active_readers = (tmp+1)"
-       line 614, "pan.___", state 678, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 614, "pan.___", state 679, "(1)"
-       line 404, "pan.___", state 686, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 718, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 732, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 751, "(1)"
-       line 431, "pan.___", state 781, "(1)"
-       line 435, "pan.___", state 794, "(1)"
-       line 404, "pan.___", state 821, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 853, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 867, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 886, "(1)"
-       line 431, "pan.___", state 916, "(1)"
-       line 435, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 950, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 982, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 996, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 1015, "(1)"
-       line 431, "pan.___", state 1045, "(1)"
-       line 435, "pan.___", state 1058, "(1)"
-       line 404, "pan.___", state 1091, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 1123, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 1137, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 1156, "(1)"
-       line 431, "pan.___", state 1186, "(1)"
-       line 435, "pan.___", state 1199, "(1)"
-       line 748, "pan.___", state 1220, "-end-"
-       (95 of 1220 states)
-unreached in proctype urcu_writer
-       line 837, "pan.___", state 12, "((i<1))"
-       line 837, "pan.___", state 12, "((i>=1))"
-       line 404, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 51, "(1)"
-       line 408, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 65, "(1)"
-       line 408, "pan.___", state 66, "(1)"
-       line 408, "pan.___", state 66, "(1)"
-       line 406, "pan.___", state 71, "((i<1))"
-       line 406, "pan.___", state 71, "((i>=1))"
-       line 413, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 83, "(1)"
-       line 413, "pan.___", state 84, "(1)"
-       line 413, "pan.___", state 84, "(1)"
-       line 417, "pan.___", state 97, "(1)"
-       line 417, "pan.___", state 98, "(1)"
-       line 417, "pan.___", state 98, "(1)"
-       line 415, "pan.___", state 103, "((i<2))"
-       line 415, "pan.___", state 103, "((i>=2))"
-       line 422, "pan.___", state 110, "(1)"
-       line 422, "pan.___", state 111, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 111, "else"
-       line 422, "pan.___", state 114, "(1)"
-       line 422, "pan.___", state 115, "(1)"
-       line 422, "pan.___", state 115, "(1)"
-       line 426, "pan.___", state 123, "(1)"
-       line 426, "pan.___", state 124, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 124, "else"
-       line 426, "pan.___", state 127, "(1)"
-       line 426, "pan.___", state 128, "(1)"
-       line 426, "pan.___", state 128, "(1)"
-       line 424, "pan.___", state 133, "((i<1))"
-       line 424, "pan.___", state 133, "((i>=1))"
-       line 431, "pan.___", state 140, "(1)"
-       line 431, "pan.___", state 141, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 141, "else"
-       line 431, "pan.___", state 144, "(1)"
-       line 431, "pan.___", state 145, "(1)"
-       line 431, "pan.___", state 145, "(1)"
-       line 435, "pan.___", state 153, "(1)"
-       line 435, "pan.___", state 154, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 154, "else"
-       line 435, "pan.___", state 157, "(1)"
-       line 435, "pan.___", state 158, "(1)"
-       line 435, "pan.___", state 158, "(1)"
-       line 433, "pan.___", state 163, "((i<2))"
-       line 433, "pan.___", state 163, "((i>=2))"
-       line 443, "pan.___", state 167, "(1)"
-       line 443, "pan.___", state 167, "(1)"
-       line 268, "pan.___", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 198, "cache_dirty_rcu_ptr = 0"
-       line 404, "pan.___", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 270, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 303, "(1)"
-       line 426, "pan.___", state 316, "(1)"
-       line 431, "pan.___", state 333, "(1)"
-       line 435, "pan.___", state 346, "(1)"
-       line 408, "pan.___", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 401, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 447, "(1)"
-       line 431, "pan.___", state 464, "(1)"
-       line 435, "pan.___", state 477, "(1)"
-       line 408, "pan.___", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 540, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 586, "(1)"
-       line 431, "pan.___", state 603, "(1)"
-       line 435, "pan.___", state 616, "(1)"
-       line 408, "pan.___", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 669, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 715, "(1)"
-       line 431, "pan.___", state 732, "(1)"
-       line 435, "pan.___", state 745, "(1)"
-       line 408, "pan.___", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 800, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 846, "(1)"
-       line 431, "pan.___", state 863, "(1)"
-       line 435, "pan.___", state 876, "(1)"
-       line 268, "pan.___", state 931, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 940, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 955, "(1)"
-       line 280, "pan.___", state 962, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 978, "(1)"
-       line 249, "pan.___", state 986, "(1)"
-       line 253, "pan.___", state 998, "(1)"
-       line 257, "pan.___", state 1006, "(1)"
-       line 268, "pan.___", state 1037, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1046, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1059, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1068, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1084, "(1)"
-       line 249, "pan.___", state 1092, "(1)"
-       line 253, "pan.___", state 1104, "(1)"
-       line 257, "pan.___", state 1112, "(1)"
-       line 272, "pan.___", state 1138, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1151, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1160, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1176, "(1)"
-       line 249, "pan.___", state 1184, "(1)"
-       line 253, "pan.___", state 1196, "(1)"
-       line 257, "pan.___", state 1204, "(1)"
-       line 268, "pan.___", state 1235, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1244, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1257, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1282, "(1)"
-       line 249, "pan.___", state 1290, "(1)"
-       line 253, "pan.___", state 1302, "(1)"
-       line 257, "pan.___", state 1310, "(1)"
-       line 272, "pan.___", state 1336, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1349, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1358, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1374, "(1)"
-       line 249, "pan.___", state 1382, "(1)"
-       line 253, "pan.___", state 1394, "(1)"
-       line 257, "pan.___", state 1402, "(1)"
-       line 268, "pan.___", state 1433, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1442, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1455, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1464, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1480, "(1)"
-       line 249, "pan.___", state 1488, "(1)"
-       line 253, "pan.___", state 1500, "(1)"
-       line 257, "pan.___", state 1508, "(1)"
-       line 272, "pan.___", state 1534, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1547, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1556, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1572, "(1)"
-       line 249, "pan.___", state 1580, "(1)"
-       line 253, "pan.___", state 1592, "(1)"
-       line 257, "pan.___", state 1600, "(1)"
-       line 268, "pan.___", state 1631, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1640, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1653, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1678, "(1)"
-       line 249, "pan.___", state 1686, "(1)"
-       line 253, "pan.___", state 1698, "(1)"
-       line 257, "pan.___", state 1706, "(1)"
-       line 1123, "pan.___", state 1722, "-end-"
-       (129 of 1722 states)
-unreached in proctype :init:
-       line 1138, "pan.___", state 11, "((i<1))"
-       line 1138, "pan.___", state 11, "((i>=1))"
-       (1 of 26 states)
-unreached in proctype :never:
-       line 1184, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 155 seconds
-pan: rate 2784.0683 states/second
-pan: avg transition delay 1.5479e-06 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 44977a8..0000000
+++ /dev/null
@@ -1,1157 +0,0 @@
-#define NO_RMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 931028a..0000000
+++ /dev/null
@@ -1,1479 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2970
-2:2:1220
-3:2:1225
-4:2:1229
-5:2:1237
-6:2:1241
-7:2:1245
-8:0:2970
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:2970
-16:3:2942
-17:3:2945
-18:3:2950
-19:3:2957
-20:3:2960
-21:3:2964
-22:3:2965
-23:0:2970
-24:3:2967
-25:0:2970
-26:2:1249
-27:0:2970
-28:2:1255
-29:0:2970
-30:2:1256
-31:0:2970
-32:2:1258
-33:0:2970
-34:2:1259
-35:0:2970
-36:2:1260
-37:2:1261
-38:2:1265
-39:2:1266
-40:2:1274
-41:2:1275
-42:2:1279
-43:2:1280
-44:2:1288
-45:2:1293
-46:2:1297
-47:2:1298
-48:2:1306
-49:2:1307
-50:2:1311
-51:2:1312
-52:2:1306
-53:2:1307
-54:2:1311
-55:2:1312
-56:2:1320
-57:2:1325
-58:2:1326
-59:2:1337
-60:2:1338
-61:2:1339
-62:2:1350
-63:2:1355
-64:2:1356
-65:2:1367
-66:2:1368
-67:2:1369
-68:2:1367
-69:2:1368
-70:2:1369
-71:2:1380
-72:2:1388
-73:0:2970
-74:2:1259
-75:0:2970
-76:2:1392
-77:2:1396
-78:2:1397
-79:2:1401
-80:2:1405
-81:2:1406
-82:2:1410
-83:2:1418
-84:2:1419
-85:2:1423
-86:2:1427
-87:2:1428
-88:2:1423
-89:2:1424
-90:2:1432
-91:0:2970
-92:2:1259
-93:0:2970
-94:2:1440
-95:2:1441
-96:2:1442
-97:0:2970
-98:2:1259
-99:0:2970
-100:2:1447
-101:0:2970
-102:2:2151
-103:2:2152
-104:2:2156
-105:2:2160
-106:2:2161
-107:2:2165
-108:2:2170
-109:2:2178
-110:2:2182
-111:2:2183
-112:2:2178
-113:2:2182
-114:2:2183
-115:2:2187
-116:2:2194
-117:2:2201
-118:2:2202
-119:2:2209
-120:2:2214
-121:2:2221
-122:2:2222
-123:2:2221
-124:2:2222
-125:2:2229
-126:2:2233
-127:0:2970
-128:2:2238
-129:0:2970
-130:2:2239
-131:0:2970
-132:2:2240
-133:0:2970
-134:2:2241
-135:0:2970
-136:1:29
-137:0:2970
-138:2:2242
-139:0:2970
-140:1:35
-141:0:2970
-142:1:36
-143:0:2970
-144:2:2241
-145:0:2970
-146:1:37
-147:0:2970
-148:2:2242
-149:0:2970
-150:1:38
-151:0:2970
-152:2:2241
-153:0:2970
-154:1:39
-155:0:2970
-156:2:2242
-157:0:2970
-158:1:40
-159:0:2970
-160:1:41
-161:0:2970
-162:2:2241
-163:0:2970
-164:1:42
-165:0:2970
-166:2:2242
-167:0:2970
-168:1:51
-169:0:2970
-170:2:2241
-171:0:2970
-172:1:55
-173:1:56
-174:1:60
-175:1:64
-176:1:65
-177:1:69
-178:1:77
-179:1:78
-180:1:82
-181:1:86
-182:1:87
-183:1:82
-184:1:86
-185:1:87
-186:1:91
-187:1:98
-188:1:105
-189:1:106
-190:1:113
-191:1:118
-192:1:125
-193:1:126
-194:1:125
-195:1:126
-196:1:133
-197:1:137
-198:0:2970
-199:2:2242
-200:0:2970
-201:1:142
-202:0:2970
-203:2:2243
-204:0:2970
-205:2:2248
-206:0:2970
-207:2:2249
-208:0:2970
-209:2:2257
-210:2:2258
-211:2:2262
-212:2:2266
-213:2:2267
-214:2:2271
-215:2:2279
-216:2:2280
-217:2:2284
-218:2:2288
-219:2:2289
-220:2:2284
-221:2:2288
-222:2:2289
-223:2:2293
-224:2:2300
-225:2:2307
-226:2:2308
-227:2:2315
-228:2:2320
-229:2:2327
-230:2:2328
-231:2:2327
-232:2:2328
-233:2:2335
-234:2:2339
-235:0:2970
-236:2:1449
-237:2:2132
-238:0:2970
-239:2:1259
-240:0:2970
-241:2:1450
-242:0:2970
-243:2:1259
-244:0:2970
-245:2:1453
-246:2:1454
-247:2:1458
-248:2:1459
-249:2:1467
-250:2:1468
-251:2:1472
-252:2:1473
-253:2:1481
-254:2:1486
-255:2:1490
-256:2:1491
-257:2:1499
-258:2:1500
-259:2:1504
-260:2:1505
-261:2:1499
-262:2:1500
-263:2:1504
-264:2:1505
-265:2:1513
-266:2:1518
-267:2:1519
-268:2:1530
-269:2:1531
-270:2:1532
-271:2:1543
-272:2:1548
-273:2:1549
-274:2:1560
-275:2:1561
-276:2:1562
-277:2:1560
-278:2:1561
-279:2:1562
-280:2:1573
-281:2:1580
-282:0:2970
-283:2:1259
-284:0:2970
-285:2:1584
-286:2:1585
-287:2:1586
-288:2:1598
-289:2:1599
-290:2:1603
-291:2:1604
-292:2:1612
-293:2:1617
-294:2:1621
-295:2:1622
-296:2:1630
-297:2:1631
-298:2:1635
-299:2:1636
-300:2:1630
-301:2:1631
-302:2:1635
-303:2:1636
-304:2:1644
-305:2:1649
-306:2:1650
-307:2:1661
-308:2:1662
-309:2:1663
-310:2:1674
-311:2:1679
-312:2:1680
-313:2:1691
-314:2:1692
-315:2:1693
-316:2:1691
-317:2:1692
-318:2:1693
-319:2:1704
-320:2:1715
-321:2:1716
-322:0:2970
-323:2:1259
-324:0:2970
-325:2:1723
-326:2:1724
-327:2:1728
-328:2:1729
-329:2:1737
-330:2:1738
-331:2:1742
-332:2:1743
-333:2:1751
-334:2:1756
-335:2:1760
-336:2:1761
-337:2:1769
-338:2:1770
-339:2:1774
-340:2:1775
-341:2:1769
-342:2:1770
-343:2:1774
-344:2:1775
-345:2:1783
-346:2:1788
-347:2:1789
-348:2:1800
-349:2:1801
-350:2:1802
-351:2:1813
-352:2:1818
-353:2:1819
-354:2:1830
-355:2:1831
-356:2:1832
-357:2:1830
-358:2:1831
-359:2:1832
-360:2:1843
-361:0:2970
-362:2:1259
-363:0:2970
-364:2:1852
-365:2:1853
-366:2:1857
-367:2:1858
-368:2:1866
-369:2:1867
-370:2:1871
-371:2:1872
-372:2:1880
-373:2:1885
-374:2:1889
-375:2:1890
-376:2:1898
-377:2:1899
-378:2:1903
-379:2:1904
-380:2:1898
-381:2:1899
-382:2:1903
-383:2:1904
-384:2:1912
-385:2:1917
-386:2:1918
-387:2:1929
-388:2:1930
-389:2:1931
-390:2:1942
-391:2:1947
-392:2:1948
-393:2:1959
-394:2:1960
-395:2:1961
-396:2:1959
-397:2:1960
-398:2:1961
-399:2:1972
-400:2:1979
-401:0:2970
-402:2:1259
-403:0:2970
-404:2:1983
-405:2:1984
-406:2:1985
-407:2:1997
-408:2:1998
-409:2:2002
-410:2:2003
-411:2:2011
-412:2:2016
-413:2:2020
-414:2:2021
-415:2:2029
-416:2:2030
-417:2:2034
-418:2:2035
-419:2:2029
-420:2:2030
-421:2:2034
-422:2:2035
-423:2:2043
-424:2:2048
-425:2:2049
-426:2:2060
-427:2:2061
-428:2:2062
-429:2:2073
-430:2:2078
-431:2:2079
-432:2:2090
-433:2:2091
-434:2:2092
-435:2:2090
-436:2:2091
-437:2:2092
-438:2:2103
-439:2:2113
-440:2:2114
-441:0:2970
-442:2:1259
-443:0:2970
-444:2:2120
-445:0:2970
-446:2:2745
-447:2:2746
-448:2:2750
-449:2:2754
-450:2:2755
-451:2:2759
-452:2:2767
-453:2:2768
-454:2:2772
-455:2:2776
-456:2:2777
-457:2:2772
-458:2:2776
-459:2:2777
-460:2:2781
-461:2:2788
-462:2:2795
-463:2:2796
-464:2:2803
-465:2:2808
-466:2:2815
-467:2:2816
-468:2:2815
-469:2:2816
-470:2:2823
-471:2:2827
-472:0:2970
-473:2:2832
-474:0:2970
-475:2:2833
-476:0:2970
-477:2:2834
-478:0:2970
-479:2:2835
-480:0:2970
-481:1:51
-482:0:2970
-483:2:2836
-484:0:2970
-485:1:55
-486:1:56
-487:1:60
-488:1:64
-489:1:65
-490:1:69
-491:1:77
-492:1:78
-493:1:82
-494:1:86
-495:1:87
-496:1:82
-497:1:86
-498:1:87
-499:1:91
-500:1:98
-501:1:105
-502:1:106
-503:1:113
-504:1:118
-505:1:125
-506:1:126
-507:1:125
-508:1:126
-509:1:133
-510:1:137
-511:0:2970
-512:2:2835
-513:0:2970
-514:1:142
-515:0:2970
-516:2:2836
-517:0:2970
-518:2:2837
-519:0:2970
-520:2:2842
-521:0:2970
-522:2:2843
-523:0:2970
-524:2:2851
-525:2:2852
-526:2:2856
-527:2:2860
-528:2:2861
-529:2:2865
-530:2:2873
-531:2:2874
-532:2:2878
-533:2:2882
-534:2:2883
-535:2:2878
-536:2:2882
-537:2:2883
-538:2:2887
-539:2:2894
-540:2:2901
-541:2:2902
-542:2:2909
-543:2:2914
-544:2:2921
-545:2:2922
-546:2:2921
-547:2:2922
-548:2:2929
-549:2:2933
-550:0:2970
-551:2:2122
-552:2:2132
-553:0:2970
-554:2:1259
-555:0:2970
-556:2:2123
-557:2:2124
-558:0:2970
-559:2:1259
-560:0:2970
-561:2:2128
-562:0:2970
-563:2:2136
-564:0:2970
-565:2:1256
-566:0:2970
-567:2:1258
-568:0:2970
-569:2:1259
-570:0:2970
-571:2:1260
-572:2:1261
-573:2:1265
-574:2:1266
-575:2:1274
-576:2:1275
-577:2:1279
-578:2:1280
-579:2:1288
-580:2:1293
-581:2:1297
-582:2:1298
-583:2:1306
-584:2:1307
-585:2:1308
-586:2:1306
-587:2:1307
-588:2:1311
-589:2:1312
-590:2:1320
-591:2:1325
-592:2:1326
-593:2:1337
-594:2:1338
-595:2:1339
-596:2:1350
-597:2:1355
-598:2:1356
-599:2:1367
-600:2:1368
-601:2:1369
-602:2:1367
-603:2:1368
-604:2:1369
-605:2:1380
-606:2:1388
-607:0:2970
-608:2:1259
-609:0:2970
-610:2:1392
-611:2:1396
-612:2:1397
-613:2:1401
-614:2:1405
-615:2:1406
-616:2:1410
-617:2:1418
-618:2:1419
-619:2:1423
-620:2:1424
-621:2:1423
-622:2:1427
-623:2:1428
-624:2:1432
-625:0:2970
-626:2:1259
-627:0:2970
-628:2:1440
-629:2:1441
-630:2:1442
-631:0:2970
-632:2:1259
-633:0:2970
-634:2:1447
-635:0:2970
-636:2:2151
-637:2:2152
-638:2:2156
-639:2:2160
-640:2:2161
-641:2:2165
-642:2:2170
-643:2:2178
-644:2:2182
-645:2:2183
-646:2:2178
-647:2:2182
-648:2:2183
-649:2:2187
-650:2:2194
-651:2:2201
-652:2:2202
-653:2:2209
-654:2:2214
-655:2:2221
-656:2:2222
-657:2:2221
-658:2:2222
-659:2:2229
-660:2:2233
-661:0:2970
-662:2:2238
-663:0:2970
-664:2:2239
-665:0:2970
-666:2:2240
-667:0:2970
-668:2:2241
-669:0:2970
-670:1:51
-671:0:2970
-672:2:2242
-673:0:2970
-674:1:55
-675:1:56
-676:1:60
-677:1:64
-678:1:65
-679:1:69
-680:1:77
-681:1:78
-682:1:82
-683:1:86
-684:1:87
-685:1:82
-686:1:86
-687:1:87
-688:1:91
-689:1:98
-690:1:105
-691:1:106
-692:1:113
-693:1:118
-694:1:125
-695:1:126
-696:1:125
-697:1:126
-698:1:133
-699:1:137
-700:0:2970
-701:2:2241
-702:0:2970
-703:1:142
-704:0:2970
-705:2:2242
-706:0:2970
-707:2:2243
-708:0:2970
-709:2:2248
-710:0:2970
-711:2:2249
-712:0:2970
-713:2:2257
-714:2:2258
-715:2:2262
-716:2:2266
-717:2:2267
-718:2:2271
-719:2:2279
-720:2:2280
-721:2:2284
-722:2:2288
-723:2:2289
-724:2:2284
-725:2:2288
-726:2:2289
-727:2:2293
-728:2:2300
-729:2:2307
-730:2:2308
-731:2:2315
-732:2:2320
-733:2:2327
-734:2:2328
-735:2:2327
-736:2:2328
-737:2:2335
-738:2:2339
-739:0:2970
-740:2:1449
-741:2:2132
-742:0:2970
-743:2:1259
-744:0:2970
-745:2:1450
-746:0:2970
-747:2:1259
-748:0:2970
-749:2:1453
-750:2:1454
-751:2:1458
-752:2:1459
-753:2:1467
-754:2:1468
-755:2:1472
-756:2:1473
-757:2:1481
-758:2:1486
-759:2:1490
-760:2:1491
-761:2:1499
-762:2:1500
-763:2:1504
-764:2:1505
-765:2:1499
-766:2:1500
-767:2:1504
-768:2:1505
-769:2:1513
-770:2:1518
-771:2:1519
-772:2:1530
-773:2:1531
-774:2:1532
-775:2:1543
-776:2:1548
-777:2:1549
-778:2:1560
-779:2:1561
-780:2:1562
-781:2:1560
-782:2:1561
-783:2:1562
-784:2:1573
-785:2:1580
-786:0:2970
-787:2:1259
-788:0:2970
-789:2:1584
-790:2:1585
-791:2:1586
-792:2:1598
-793:2:1599
-794:2:1603
-795:2:1604
-796:2:1612
-797:2:1617
-798:2:1621
-799:2:1622
-800:2:1630
-801:2:1631
-802:2:1635
-803:2:1636
-804:2:1630
-805:2:1631
-806:2:1635
-807:2:1636
-808:2:1644
-809:2:1649
-810:2:1650
-811:2:1661
-812:2:1662
-813:2:1663
-814:2:1674
-815:2:1679
-816:2:1680
-817:2:1691
-818:2:1692
-819:2:1693
-820:2:1691
-821:2:1692
-822:2:1693
-823:2:1704
-824:2:1715
-825:2:1716
-826:0:2970
-827:2:1259
-828:0:2970
-829:2:1723
-830:2:1724
-831:2:1728
-832:2:1729
-833:2:1737
-834:2:1738
-835:2:1742
-836:2:1743
-837:2:1751
-838:2:1756
-839:2:1760
-840:2:1761
-841:2:1769
-842:2:1770
-843:2:1774
-844:2:1775
-845:2:1769
-846:2:1770
-847:2:1774
-848:2:1775
-849:2:1783
-850:2:1788
-851:2:1789
-852:2:1800
-853:2:1801
-854:2:1802
-855:2:1813
-856:2:1818
-857:2:1819
-858:2:1830
-859:2:1831
-860:2:1832
-861:2:1830
-862:2:1831
-863:2:1832
-864:2:1843
-865:0:2970
-866:2:1259
-867:0:2970
-868:2:1852
-869:2:1853
-870:2:1857
-871:2:1858
-872:2:1866
-873:2:1867
-874:2:1871
-875:2:1872
-876:2:1880
-877:2:1885
-878:2:1889
-879:2:1890
-880:2:1898
-881:2:1899
-882:2:1903
-883:2:1904
-884:2:1898
-885:2:1899
-886:2:1903
-887:2:1904
-888:2:1912
-889:2:1917
-890:2:1918
-891:2:1929
-892:2:1930
-893:2:1931
-894:2:1942
-895:2:1947
-896:2:1948
-897:2:1959
-898:2:1960
-899:2:1961
-900:2:1959
-901:2:1960
-902:2:1961
-903:2:1972
-904:2:1979
-905:0:2970
-906:2:1259
-907:0:2970
-908:2:1983
-909:2:1984
-910:2:1985
-911:2:1997
-912:2:1998
-913:2:2002
-914:2:2003
-915:2:2011
-916:2:2016
-917:2:2020
-918:2:2021
-919:2:2029
-920:2:2030
-921:2:2034
-922:2:2035
-923:2:2029
-924:2:2030
-925:2:2034
-926:2:2035
-927:2:2043
-928:2:2048
-929:2:2049
-930:2:2060
-931:2:2061
-932:2:2062
-933:2:2073
-934:2:2078
-935:2:2079
-936:2:2090
-937:2:2091
-938:2:2092
-939:2:2090
-940:2:2091
-941:2:2092
-942:2:2103
-943:2:2113
-944:2:2114
-945:0:2970
-946:2:1259
-947:0:2970
-948:2:2120
-949:0:2970
-950:2:2745
-951:2:2746
-952:2:2750
-953:2:2754
-954:2:2755
-955:2:2759
-956:2:2767
-957:2:2768
-958:2:2772
-959:2:2776
-960:2:2777
-961:2:2772
-962:2:2776
-963:2:2777
-964:2:2781
-965:2:2788
-966:2:2795
-967:2:2796
-968:2:2803
-969:2:2808
-970:2:2815
-971:2:2816
-972:2:2815
-973:2:2816
-974:2:2823
-975:2:2827
-976:0:2970
-977:2:2832
-978:0:2970
-979:2:2833
-980:0:2970
-981:2:2834
-982:0:2970
-983:2:2835
-984:0:2970
-985:1:51
-986:0:2970
-987:2:2836
-988:0:2970
-989:1:55
-990:1:56
-991:1:60
-992:1:64
-993:1:65
-994:1:69
-995:1:77
-996:1:78
-997:1:82
-998:1:86
-999:1:87
-1000:1:82
-1001:1:86
-1002:1:87
-1003:1:91
-1004:1:98
-1005:1:105
-1006:1:106
-1007:1:113
-1008:1:118
-1009:1:125
-1010:1:126
-1011:1:125
-1012:1:126
-1013:1:133
-1014:1:137
-1015:0:2970
-1016:2:2835
-1017:0:2970
-1018:1:142
-1019:0:2970
-1020:2:2836
-1021:0:2970
-1022:2:2837
-1023:0:2970
-1024:2:2842
-1025:0:2970
-1026:2:2843
-1027:0:2970
-1028:2:2851
-1029:2:2852
-1030:2:2856
-1031:2:2860
-1032:2:2861
-1033:2:2865
-1034:2:2873
-1035:2:2874
-1036:2:2878
-1037:2:2882
-1038:2:2883
-1039:2:2878
-1040:2:2882
-1041:2:2883
-1042:2:2887
-1043:2:2894
-1044:2:2901
-1045:2:2902
-1046:2:2909
-1047:2:2914
-1048:2:2921
-1049:2:2922
-1050:2:2921
-1051:2:2922
-1052:2:2929
-1053:2:2933
-1054:0:2970
-1055:2:2122
-1056:2:2132
-1057:0:2970
-1058:2:1259
-1059:0:2970
-1060:2:2123
-1061:2:2124
-1062:0:2970
-1063:2:1259
-1064:0:2970
-1065:2:2128
-1066:0:2970
-1067:2:2136
-1068:0:2970
-1069:2:1256
-1070:0:2970
-1071:2:1258
-1072:0:2970
-1073:2:1259
-1074:0:2970
-1075:2:1260
-1076:2:1261
-1077:2:1265
-1078:2:1266
-1079:2:1274
-1080:2:1275
-1081:2:1279
-1082:2:1280
-1083:2:1288
-1084:2:1293
-1085:2:1297
-1086:2:1298
-1087:2:1306
-1088:2:1307
-1089:2:1311
-1090:2:1312
-1091:2:1306
-1092:2:1307
-1093:2:1308
-1094:2:1320
-1095:2:1325
-1096:2:1326
-1097:2:1337
-1098:2:1338
-1099:2:1339
-1100:2:1350
-1101:2:1355
-1102:2:1356
-1103:2:1367
-1104:2:1368
-1105:2:1369
-1106:2:1367
-1107:2:1368
-1108:2:1369
-1109:2:1380
-1110:2:1388
-1111:0:2970
-1112:2:1259
-1113:0:2970
-1114:1:143
-1115:0:2970
-1116:1:145
-1117:0:2970
-1118:1:44
-1119:0:2970
-1120:1:151
-1121:1:152
-1122:1:156
-1123:1:157
-1124:1:165
-1125:1:166
-1126:1:170
-1127:1:171
-1128:1:179
-1129:1:184
-1130:1:188
-1131:1:189
-1132:1:197
-1133:1:198
-1134:1:202
-1135:1:203
-1136:1:197
-1137:1:198
-1138:1:202
-1139:1:203
-1140:1:211
-1141:1:216
-1142:1:217
-1143:1:228
-1144:1:229
-1145:1:230
-1146:1:241
-1147:1:246
-1148:1:247
-1149:1:258
-1150:1:259
-1151:1:260
-1152:1:258
-1153:1:259
-1154:1:260
-1155:1:271
-1156:0:2970
-1157:1:40
-1158:0:2970
-1159:1:41
-1160:0:2970
-1161:2:1392
-1162:2:1396
-1163:2:1397
-1164:2:1401
-1165:2:1405
-1166:2:1406
-1167:2:1410
-1168:2:1418
-1169:2:1419
-1170:2:1423
-1171:2:1427
-1172:2:1428
-1173:2:1423
-1174:2:1424
-1175:2:1432
-1176:0:2970
-1177:2:1259
-1178:0:2970
-1179:2:1440
-1180:2:1441
-1181:2:1442
-1182:0:2970
-1183:2:1259
-1184:0:2970
-1185:2:1447
-1186:0:2970
-1187:2:2151
-1188:2:2152
-1189:2:2156
-1190:2:2160
-1191:2:2161
-1192:2:2165
-1193:2:2170
-1194:2:2178
-1195:2:2182
-1196:2:2183
-1197:2:2178
-1198:2:2182
-1199:2:2183
-1200:2:2187
-1201:2:2194
-1202:2:2201
-1203:2:2202
-1204:2:2209
-1205:2:2214
-1206:2:2221
-1207:2:2222
-1208:2:2221
-1209:2:2222
-1210:2:2229
-1211:2:2233
-1212:0:2970
-1213:2:2238
-1214:0:2970
-1215:2:2239
-1216:0:2970
-1217:2:2240
-1218:0:2970
-1219:2:2241
-1220:0:2970
-1221:1:42
-1222:0:2970
-1223:2:2242
-1224:0:2970
-1225:1:143
-1226:0:2970
-1227:1:145
-1228:0:2970
-1229:2:2241
-1230:0:2970
-1231:1:44
-1232:0:2970
-1233:2:2242
-1234:0:2970
-1235:1:280
-1236:1:281
-1237:0:2970
-1238:1:40
-1239:0:2970
-1240:1:41
-1241:0:2970
-1242:2:2241
-1243:0:2970
-1244:1:42
-1245:0:2970
-1246:2:2242
-1247:0:2970
-1248:1:143
-1249:0:2970
-1250:1:145
-1251:0:2970
-1252:2:2241
-1253:0:2970
-1254:1:44
-1255:0:2970
-1256:2:2242
-1257:0:2970
-1258:1:287
-1259:1:288
-1260:1:292
-1261:1:293
-1262:1:301
-1263:1:302
-1264:1:306
-1265:1:307
-1266:1:315
-1267:1:320
-1268:1:324
-1269:1:325
-1270:1:333
-1271:1:334
-1272:1:338
-1273:1:339
-1274:1:333
-1275:1:334
-1276:1:338
-1277:1:339
-1278:1:347
-1279:1:352
-1280:1:353
-1281:1:364
-1282:1:365
-1283:1:366
-1284:1:377
-1285:1:382
-1286:1:383
-1287:1:394
-1288:1:395
-1289:1:396
-1290:1:394
-1291:1:402
-1292:1:403
-1293:1:407
-1294:0:2970
-1295:1:40
-1296:0:2970
-1297:1:41
-1298:0:2970
-1299:2:2241
-1300:0:2970
-1301:1:42
-1302:0:2970
-1303:2:2242
-1304:0:2970
-1305:1:143
-1306:0:2970
-1307:1:145
-1308:0:2970
-1309:2:2241
-1310:0:2970
-1311:1:44
-1312:0:2970
-1313:2:2242
-1314:0:2970
-1315:1:416
-1316:1:417
-1317:1:421
-1318:1:422
-1319:1:430
-1320:1:431
-1321:1:435
-1322:1:436
-1323:1:444
-1324:1:449
-1325:1:453
-1326:1:454
-1327:1:462
-1328:1:463
-1329:1:467
-1330:1:468
-1331:1:462
-1332:1:463
-1333:1:467
-1334:1:468
-1335:1:476
-1336:1:481
-1337:1:482
-1338:1:493
-1339:1:494
-1340:1:495
-1341:1:506
-1342:1:511
-1343:1:512
-1344:1:523
-1345:1:524
-1346:1:525
-1347:1:523
-1348:1:531
-1349:1:532
-1350:1:536
-1351:1:543
-1352:0:2970
-1353:1:40
-1354:0:2970
-1355:1:41
-1356:0:2970
-1357:2:2241
-1358:0:2970
-1359:1:42
-1360:0:2970
-1361:2:2242
-1362:0:2970
-1363:1:143
-1364:0:2970
-1365:1:145
-1366:0:2970
-1367:2:2241
-1368:0:2970
-1369:1:44
-1370:0:2970
-1371:2:2242
-1372:0:2970
-1373:1:681
-1374:1:682
-1375:1:686
-1376:1:687
-1377:1:695
-1378:1:696
-1379:1:697
-1380:1:709
-1381:1:714
-1382:1:718
-1383:1:719
-1384:1:727
-1385:1:728
-1386:1:732
-1387:1:733
-1388:1:727
-1389:1:728
-1390:1:732
-1391:1:733
-1392:1:741
-1393:1:746
-1394:1:747
-1395:1:758
-1396:1:759
-1397:1:760
-1398:1:771
-1399:1:776
-1400:1:777
-1401:1:788
-1402:1:789
-1403:1:790
-1404:1:788
-1405:1:796
-1406:1:797
-1407:1:801
-1408:0:2970
-1409:1:40
-1410:0:2970
-1411:1:41
-1412:0:2970
-1413:2:2241
-1414:0:2970
-1415:1:42
-1416:0:2970
-1417:2:2242
-1418:0:2970
-1419:1:143
-1420:0:2970
-1421:1:145
-1422:0:2970
-1423:2:2241
-1424:0:2970
-1425:1:44
-1426:0:2970
-1427:2:2242
-1428:0:2970
-1429:1:810
-1430:0:2970
-1431:2:2241
-1432:0:2970
-1433:1:1087
-1434:1:1091
-1435:1:1092
-1436:1:1100
-1437:1:1101
-1438:1:1105
-1439:1:1106
-1440:1:1114
-1441:1:1119
-1442:1:1123
-1443:1:1124
-1444:1:1132
-1445:1:1133
-1446:1:1137
-1447:1:1138
-1448:1:1132
-1449:1:1133
-1450:1:1137
-1451:1:1138
-1452:1:1146
-1453:1:1151
-1454:1:1152
-1455:1:1163
-1456:1:1164
-1457:1:1165
-1458:1:1176
-1459:1:1181
-1460:1:1182
-1461:1:1193
-1462:1:1194
-1463:1:1195
-1464:1:1193
-1465:1:1201
-1466:1:1202
-1467:1:1206
-1468:1:1210
-1469:0:2970
-1470:2:2242
-1471:0:2970
-1472:1:812
-1473:1:813
-1474:0:2968
-1475:1:40
-1476:0:2974
-1477:1:1060
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.define b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index deef6fa..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1179)
-Depth=    3829 States=    1e+06 Transitions= 2.15e+08 Memory=   512.834        t=    341 R=   3e+03
-Depth=    3829 States=    2e+06 Transitions= 5.61e+08 Memory=   559.026        t=    920 R=   2e+03
-pan: claim violated! (at depth 1358)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 3829, errors: 1
-  2932262 states, stored
-7.8211443e+08 states, matched
-7.850467e+08 transitions (= stored+matched)
-4.5802467e+09 atomic steps
-hash conflicts: 5.9075827e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
-  324.385      equivalent memory usage for states (stored*(State-vector + overhead))
-  136.208      actual memory usage for states (compression: 41.99%)
-               state-vector as stored = 13 byte + 36 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  601.897      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 22861 1831 2500 2 2 ]
-unreached in proctype urcu_reader
-       line 713, "pan.___", state 12, "((i<1))"
-       line 713, "pan.___", state 12, "((i>=1))"
-       line 268, "pan.___", state 55, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 86, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 102, "(1)"
-       line 249, "pan.___", state 110, "(1)"
-       line 253, "pan.___", state 122, "(1)"
-       line 257, "pan.___", state 130, "(1)"
-       line 404, "pan.___", state 156, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 188, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 202, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 221, "(1)"
-       line 431, "pan.___", state 251, "(1)"
-       line 435, "pan.___", state 264, "(1)"
-       line 614, "pan.___", state 285, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 404, "pan.___", state 292, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 324, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 338, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 357, "(1)"
-       line 431, "pan.___", state 387, "(1)"
-       line 435, "pan.___", state 400, "(1)"
-       line 404, "pan.___", state 421, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 453, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 467, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 486, "(1)"
-       line 431, "pan.___", state 516, "(1)"
-       line 435, "pan.___", state 529, "(1)"
-       line 404, "pan.___", state 552, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 554, "(1)"
-       line 404, "pan.___", state 555, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 555, "else"
-       line 404, "pan.___", state 558, "(1)"
-       line 408, "pan.___", state 566, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 568, "(1)"
-       line 408, "pan.___", state 569, "(cache_dirty_urcu_active_readers)"
-       line 408, "pan.___", state 569, "else"
-       line 408, "pan.___", state 572, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 406, "pan.___", state 578, "((i<1))"
-       line 406, "pan.___", state 578, "((i>=1))"
-       line 413, "pan.___", state 584, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 586, "(1)"
-       line 413, "pan.___", state 587, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 587, "else"
-       line 413, "pan.___", state 590, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 417, "pan.___", state 598, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 600, "(1)"
-       line 417, "pan.___", state 601, "(cache_dirty_rcu_data[i])"
-       line 417, "pan.___", state 601, "else"
-       line 417, "pan.___", state 604, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 415, "pan.___", state 610, "((i<2))"
-       line 415, "pan.___", state 610, "((i>=2))"
-       line 422, "pan.___", state 617, "(1)"
-       line 422, "pan.___", state 618, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 618, "else"
-       line 422, "pan.___", state 621, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 426, "pan.___", state 630, "(1)"
-       line 426, "pan.___", state 631, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 631, "else"
-       line 426, "pan.___", state 634, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 424, "pan.___", state 640, "((i<1))"
-       line 424, "pan.___", state 640, "((i>=1))"
-       line 431, "pan.___", state 647, "(1)"
-       line 431, "pan.___", state 648, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 648, "else"
-       line 431, "pan.___", state 651, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 435, "pan.___", state 660, "(1)"
-       line 435, "pan.___", state 661, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 661, "else"
-       line 435, "pan.___", state 664, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 433, "pan.___", state 670, "((i<2))"
-       line 433, "pan.___", state 670, "((i>=2))"
-       line 443, "pan.___", state 674, "(1)"
-       line 443, "pan.___", state 674, "(1)"
-       line 614, "pan.___", state 677, "cached_urcu_active_readers = (tmp+1)"
-       line 614, "pan.___", state 678, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 614, "pan.___", state 679, "(1)"
-       line 404, "pan.___", state 686, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 718, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 732, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 751, "(1)"
-       line 431, "pan.___", state 781, "(1)"
-       line 435, "pan.___", state 794, "(1)"
-       line 404, "pan.___", state 821, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 853, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 867, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 886, "(1)"
-       line 431, "pan.___", state 916, "(1)"
-       line 435, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 950, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 982, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 996, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 1015, "(1)"
-       line 431, "pan.___", state 1045, "(1)"
-       line 435, "pan.___", state 1058, "(1)"
-       line 245, "pan.___", state 1091, "(1)"
-       line 253, "pan.___", state 1111, "(1)"
-       line 257, "pan.___", state 1119, "(1)"
-       line 748, "pan.___", state 1136, "-end-"
-       (92 of 1136 states)
-unreached in proctype urcu_writer
-       line 837, "pan.___", state 12, "((i<1))"
-       line 837, "pan.___", state 12, "((i>=1))"
-       line 404, "pan.___", state 46, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 60, "cache_dirty_urcu_active_readers = 0"
-       line 422, "pan.___", state 111, "(1)"
-       line 426, "pan.___", state 124, "(1)"
-       line 268, "pan.___", state 177, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 179, "(1)"
-       line 272, "pan.___", state 186, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 188, "(1)"
-       line 272, "pan.___", state 189, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 189, "else"
-       line 270, "pan.___", state 194, "((i<1))"
-       line 270, "pan.___", state 194, "((i>=1))"
-       line 276, "pan.___", state 199, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 201, "(1)"
-       line 276, "pan.___", state 202, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 202, "else"
-       line 280, "pan.___", state 208, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 210, "(1)"
-       line 280, "pan.___", state 211, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 211, "else"
-       line 285, "pan.___", state 220, "(cache_dirty_urcu_gp_ctr)"
-       line 285, "pan.___", state 220, "else"
-       line 404, "pan.___", state 239, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 253, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 271, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 285, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 304, "(1)"
-       line 426, "pan.___", state 317, "(1)"
-       line 431, "pan.___", state 334, "(1)"
-       line 435, "pan.___", state 347, "(1)"
-       line 408, "pan.___", state 384, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 402, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 416, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 448, "(1)"
-       line 431, "pan.___", state 465, "(1)"
-       line 435, "pan.___", state 478, "(1)"
-       line 408, "pan.___", state 523, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 541, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 555, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 587, "(1)"
-       line 431, "pan.___", state 604, "(1)"
-       line 435, "pan.___", state 617, "(1)"
-       line 408, "pan.___", state 652, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 670, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 684, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 716, "(1)"
-       line 431, "pan.___", state 733, "(1)"
-       line 435, "pan.___", state 746, "(1)"
-       line 408, "pan.___", state 783, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 801, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 815, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 847, "(1)"
-       line 431, "pan.___", state 864, "(1)"
-       line 435, "pan.___", state 877, "(1)"
-       line 268, "pan.___", state 932, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 941, "cache_dirty_urcu_active_readers = 0"
-       line 245, "pan.___", state 979, "(1)"
-       line 249, "pan.___", state 987, "(1)"
-       line 253, "pan.___", state 999, "(1)"
-       line 257, "pan.___", state 1007, "(1)"
-       line 268, "pan.___", state 1038, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1047, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1060, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1069, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1085, "(1)"
-       line 249, "pan.___", state 1093, "(1)"
-       line 253, "pan.___", state 1105, "(1)"
-       line 257, "pan.___", state 1113, "(1)"
-       line 272, "pan.___", state 1139, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1152, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1161, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1177, "(1)"
-       line 249, "pan.___", state 1185, "(1)"
-       line 253, "pan.___", state 1197, "(1)"
-       line 257, "pan.___", state 1205, "(1)"
-       line 268, "pan.___", state 1236, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1245, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1258, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1267, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1283, "(1)"
-       line 249, "pan.___", state 1291, "(1)"
-       line 253, "pan.___", state 1303, "(1)"
-       line 257, "pan.___", state 1311, "(1)"
-       line 272, "pan.___", state 1337, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1350, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1359, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1375, "(1)"
-       line 249, "pan.___", state 1383, "(1)"
-       line 253, "pan.___", state 1395, "(1)"
-       line 257, "pan.___", state 1403, "(1)"
-       line 268, "pan.___", state 1434, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1443, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1456, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1465, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1481, "(1)"
-       line 249, "pan.___", state 1489, "(1)"
-       line 253, "pan.___", state 1501, "(1)"
-       line 257, "pan.___", state 1509, "(1)"
-       line 272, "pan.___", state 1535, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1548, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1557, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1573, "(1)"
-       line 249, "pan.___", state 1581, "(1)"
-       line 253, "pan.___", state 1593, "(1)"
-       line 257, "pan.___", state 1601, "(1)"
-       line 268, "pan.___", state 1632, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1641, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1654, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1663, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1679, "(1)"
-       line 249, "pan.___", state 1687, "(1)"
-       line 253, "pan.___", state 1699, "(1)"
-       line 257, "pan.___", state 1707, "(1)"
-       line 1123, "pan.___", state 1723, "-end-"
-       (110 of 1723 states)
-unreached in proctype :init:
-       line 1138, "pan.___", state 11, "((i<1))"
-       line 1138, "pan.___", state 11, "((i>=1))"
-       (1 of 26 states)
-unreached in proctype :never:
-       line 1184, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.31e+03 seconds
-pan: rate 2245.8255 states/second
-pan: avg transition delay 1.6631e-06 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index b79ec79..0000000
+++ /dev/null
@@ -1,1157 +0,0 @@
-#define NO_WMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index 4b13aef..0000000
+++ /dev/null
@@ -1,1361 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2887
-2:2:1136
-3:2:1141
-4:2:1145
-5:2:1153
-6:2:1157
-7:2:1161
-8:0:2887
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:2887
-16:3:2859
-17:3:2862
-18:3:2867
-19:3:2874
-20:3:2877
-21:3:2881
-22:3:2882
-23:0:2887
-24:3:2884
-25:0:2887
-26:2:1165
-27:0:2887
-28:2:1171
-29:0:2887
-30:2:1172
-31:0:2887
-32:2:1174
-33:0:2887
-34:2:1175
-35:0:2887
-36:2:1176
-37:0:2887
-38:2:1177
-39:2:1178
-40:2:1182
-41:2:1183
-42:2:1191
-43:2:1192
-44:2:1196
-45:2:1197
-46:2:1205
-47:2:1210
-48:2:1214
-49:2:1215
-50:2:1223
-51:2:1224
-52:2:1228
-53:2:1229
-54:2:1223
-55:2:1224
-56:2:1228
-57:2:1229
-58:2:1237
-59:2:1242
-60:2:1243
-61:2:1254
-62:2:1255
-63:2:1256
-64:2:1267
-65:2:1272
-66:2:1273
-67:2:1284
-68:2:1285
-69:2:1286
-70:2:1284
-71:2:1285
-72:2:1286
-73:2:1297
-74:2:1305
-75:0:2887
-76:2:1176
-77:0:2887
-78:2:1357
-79:2:1358
-80:2:1359
-81:0:2887
-82:2:1176
-83:0:2887
-84:2:1364
-85:0:2887
-86:2:2068
-87:2:2069
-88:2:2073
-89:2:2077
-90:2:2078
-91:2:2082
-92:2:2087
-93:2:2095
-94:2:2099
-95:2:2100
-96:2:2095
-97:2:2096
-98:2:2104
-99:2:2111
-100:2:2118
-101:2:2119
-102:2:2126
-103:2:2131
-104:2:2138
-105:2:2139
-106:2:2138
-107:2:2139
-108:2:2146
-109:2:2150
-110:0:2887
-111:2:2155
-112:0:2887
-113:2:2156
-114:0:2887
-115:2:2157
-116:0:2887
-117:2:2158
-118:0:2887
-119:1:29
-120:0:2887
-121:2:2159
-122:0:2887
-123:1:35
-124:0:2887
-125:1:36
-126:0:2887
-127:2:2158
-128:0:2887
-129:1:37
-130:0:2887
-131:2:2159
-132:0:2887
-133:1:38
-134:0:2887
-135:2:2158
-136:0:2887
-137:1:39
-138:0:2887
-139:2:2159
-140:0:2887
-141:1:40
-142:0:2887
-143:1:41
-144:0:2887
-145:2:2158
-146:0:2887
-147:1:42
-148:0:2887
-149:2:2159
-150:0:2887
-151:1:51
-152:0:2887
-153:2:2158
-154:0:2887
-155:1:55
-156:1:56
-157:1:60
-158:1:64
-159:1:65
-160:1:69
-161:1:77
-162:1:78
-163:1:82
-164:1:86
-165:1:87
-166:1:82
-167:1:86
-168:1:87
-169:1:91
-170:1:98
-171:1:105
-172:1:106
-173:1:113
-174:1:118
-175:1:125
-176:1:126
-177:1:125
-178:1:126
-179:1:133
-180:1:137
-181:0:2887
-182:2:2159
-183:0:2887
-184:1:142
-185:0:2887
-186:2:2160
-187:0:2887
-188:2:2165
-189:0:2887
-190:2:2166
-191:0:2887
-192:2:2174
-193:2:2175
-194:2:2179
-195:2:2183
-196:2:2184
-197:2:2188
-198:2:2196
-199:2:2197
-200:2:2201
-201:2:2205
-202:2:2206
-203:2:2201
-204:2:2205
-205:2:2206
-206:2:2210
-207:2:2217
-208:2:2224
-209:2:2225
-210:2:2232
-211:2:2237
-212:2:2244
-213:2:2245
-214:2:2244
-215:2:2245
-216:2:2252
-217:2:2256
-218:0:2887
-219:2:1366
-220:2:2049
-221:0:2887
-222:2:1176
-223:0:2887
-224:2:1367
-225:0:2887
-226:2:1176
-227:0:2887
-228:2:1370
-229:2:1371
-230:2:1375
-231:2:1376
-232:2:1384
-233:2:1385
-234:2:1389
-235:2:1390
-236:2:1398
-237:2:1403
-238:2:1407
-239:2:1408
-240:2:1416
-241:2:1417
-242:2:1421
-243:2:1422
-244:2:1416
-245:2:1417
-246:2:1421
-247:2:1422
-248:2:1430
-249:2:1435
-250:2:1436
-251:2:1447
-252:2:1448
-253:2:1449
-254:2:1460
-255:2:1465
-256:2:1466
-257:2:1477
-258:2:1478
-259:2:1479
-260:2:1477
-261:2:1478
-262:2:1479
-263:2:1490
-264:2:1497
-265:0:2887
-266:2:1176
-267:0:2887
-268:2:1501
-269:2:1502
-270:2:1503
-271:2:1515
-272:2:1516
-273:2:1520
-274:2:1521
-275:2:1529
-276:2:1534
-277:2:1538
-278:2:1539
-279:2:1547
-280:2:1548
-281:2:1552
-282:2:1553
-283:2:1547
-284:2:1548
-285:2:1552
-286:2:1553
-287:2:1561
-288:2:1566
-289:2:1567
-290:2:1578
-291:2:1579
-292:2:1580
-293:2:1591
-294:2:1596
-295:2:1597
-296:2:1608
-297:2:1609
-298:2:1610
-299:2:1608
-300:2:1609
-301:2:1610
-302:2:1621
-303:2:1632
-304:2:1633
-305:0:2887
-306:2:1176
-307:0:2887
-308:2:1640
-309:2:1641
-310:2:1645
-311:2:1646
-312:2:1654
-313:2:1655
-314:2:1659
-315:2:1660
-316:2:1668
-317:2:1673
-318:2:1677
-319:2:1678
-320:2:1686
-321:2:1687
-322:2:1691
-323:2:1692
-324:2:1686
-325:2:1687
-326:2:1691
-327:2:1692
-328:2:1700
-329:2:1705
-330:2:1706
-331:2:1717
-332:2:1718
-333:2:1719
-334:2:1730
-335:2:1735
-336:2:1736
-337:2:1747
-338:2:1748
-339:2:1749
-340:2:1747
-341:2:1748
-342:2:1749
-343:2:1760
-344:0:2887
-345:2:1176
-346:0:2887
-347:2:1769
-348:2:1770
-349:2:1774
-350:2:1775
-351:2:1783
-352:2:1784
-353:2:1788
-354:2:1789
-355:2:1797
-356:2:1802
-357:2:1806
-358:2:1807
-359:2:1815
-360:2:1816
-361:2:1820
-362:2:1821
-363:2:1815
-364:2:1816
-365:2:1820
-366:2:1821
-367:2:1829
-368:2:1834
-369:2:1835
-370:2:1846
-371:2:1847
-372:2:1848
-373:2:1859
-374:2:1864
-375:2:1865
-376:2:1876
-377:2:1877
-378:2:1878
-379:2:1876
-380:2:1877
-381:2:1878
-382:2:1889
-383:2:1896
-384:0:2887
-385:2:1176
-386:0:2887
-387:2:1900
-388:2:1901
-389:2:1902
-390:2:1914
-391:2:1915
-392:2:1919
-393:2:1920
-394:2:1928
-395:2:1933
-396:2:1937
-397:2:1938
-398:2:1946
-399:2:1947
-400:2:1951
-401:2:1952
-402:2:1946
-403:2:1947
-404:2:1951
-405:2:1952
-406:2:1960
-407:2:1965
-408:2:1966
-409:2:1977
-410:2:1978
-411:2:1979
-412:2:1990
-413:2:1995
-414:2:1996
-415:2:2007
-416:2:2008
-417:2:2009
-418:2:2007
-419:2:2008
-420:2:2009
-421:2:2020
-422:2:2030
-423:2:2031
-424:0:2887
-425:2:1176
-426:0:2887
-427:2:2037
-428:0:2887
-429:2:2662
-430:2:2663
-431:2:2667
-432:2:2671
-433:2:2672
-434:2:2676
-435:2:2684
-436:2:2685
-437:2:2689
-438:2:2693
-439:2:2694
-440:2:2689
-441:2:2693
-442:2:2694
-443:2:2698
-444:2:2705
-445:2:2712
-446:2:2713
-447:2:2720
-448:2:2725
-449:2:2732
-450:2:2733
-451:2:2732
-452:2:2733
-453:2:2740
-454:2:2744
-455:0:2887
-456:2:2749
-457:0:2887
-458:2:2750
-459:0:2887
-460:2:2751
-461:0:2887
-462:2:2752
-463:0:2887
-464:1:51
-465:0:2887
-466:2:2753
-467:0:2887
-468:1:55
-469:1:56
-470:1:60
-471:1:64
-472:1:65
-473:1:69
-474:1:77
-475:1:78
-476:1:82
-477:1:86
-478:1:87
-479:1:82
-480:1:86
-481:1:87
-482:1:91
-483:1:98
-484:1:105
-485:1:106
-486:1:113
-487:1:118
-488:1:125
-489:1:126
-490:1:125
-491:1:126
-492:1:133
-493:1:137
-494:0:2887
-495:2:2752
-496:0:2887
-497:1:142
-498:0:2887
-499:2:2753
-500:0:2887
-501:2:2754
-502:0:2887
-503:2:2759
-504:0:2887
-505:2:2760
-506:0:2887
-507:2:2768
-508:2:2769
-509:2:2773
-510:2:2777
-511:2:2778
-512:2:2782
-513:2:2790
-514:2:2791
-515:2:2795
-516:2:2799
-517:2:2800
-518:2:2795
-519:2:2799
-520:2:2800
-521:2:2804
-522:2:2811
-523:2:2818
-524:2:2819
-525:2:2826
-526:2:2831
-527:2:2838
-528:2:2839
-529:2:2838
-530:2:2839
-531:2:2846
-532:2:2850
-533:0:2887
-534:2:2039
-535:2:2049
-536:0:2887
-537:2:1176
-538:0:2887
-539:2:2040
-540:2:2041
-541:0:2887
-542:2:1176
-543:0:2887
-544:2:2045
-545:0:2887
-546:2:2053
-547:0:2887
-548:2:1172
-549:0:2887
-550:2:1174
-551:0:2887
-552:2:1175
-553:0:2887
-554:2:1176
-555:0:2887
-556:2:1357
-557:2:1358
-558:2:1359
-559:0:2887
-560:2:1176
-561:0:2887
-562:2:1177
-563:2:1178
-564:2:1182
-565:2:1183
-566:2:1191
-567:2:1192
-568:2:1196
-569:2:1197
-570:2:1205
-571:2:1210
-572:2:1211
-573:2:1223
-574:2:1224
-575:2:1225
-576:2:1223
-577:2:1224
-578:2:1228
-579:2:1229
-580:2:1237
-581:2:1242
-582:2:1243
-583:2:1254
-584:2:1255
-585:2:1256
-586:2:1267
-587:2:1272
-588:2:1273
-589:2:1284
-590:2:1285
-591:2:1286
-592:2:1284
-593:2:1285
-594:2:1286
-595:2:1297
-596:2:1305
-597:0:2887
-598:2:1176
-599:0:2887
-600:2:1364
-601:0:2887
-602:2:2068
-603:2:2069
-604:2:2073
-605:2:2077
-606:2:2078
-607:2:2082
-608:2:2090
-609:2:2091
-610:2:2095
-611:2:2096
-612:2:2095
-613:2:2099
-614:2:2100
-615:2:2104
-616:2:2111
-617:2:2118
-618:2:2119
-619:2:2126
-620:2:2131
-621:2:2138
-622:2:2139
-623:2:2138
-624:2:2139
-625:2:2146
-626:2:2150
-627:0:2887
-628:2:2155
-629:0:2887
-630:2:2156
-631:0:2887
-632:2:2157
-633:0:2887
-634:2:2158
-635:0:2887
-636:1:51
-637:0:2887
-638:2:2159
-639:0:2887
-640:1:55
-641:1:56
-642:1:60
-643:1:64
-644:1:65
-645:1:69
-646:1:77
-647:1:78
-648:1:82
-649:1:86
-650:1:87
-651:1:82
-652:1:86
-653:1:87
-654:1:91
-655:1:98
-656:1:105
-657:1:106
-658:1:113
-659:1:118
-660:1:125
-661:1:126
-662:1:125
-663:1:126
-664:1:133
-665:1:137
-666:0:2887
-667:2:2158
-668:0:2887
-669:1:142
-670:0:2887
-671:2:2159
-672:0:2887
-673:2:2160
-674:0:2887
-675:2:2165
-676:0:2887
-677:2:2166
-678:0:2887
-679:2:2174
-680:2:2175
-681:2:2179
-682:2:2183
-683:2:2184
-684:2:2188
-685:2:2196
-686:2:2197
-687:2:2201
-688:2:2205
-689:2:2206
-690:2:2201
-691:2:2205
-692:2:2206
-693:2:2210
-694:2:2217
-695:2:2224
-696:2:2225
-697:2:2232
-698:2:2237
-699:2:2244
-700:2:2245
-701:2:2244
-702:2:2245
-703:2:2252
-704:2:2256
-705:0:2887
-706:2:1366
-707:2:2049
-708:0:2887
-709:2:1176
-710:0:2887
-711:2:1367
-712:0:2887
-713:2:1176
-714:0:2887
-715:2:1370
-716:2:1371
-717:2:1375
-718:2:1376
-719:2:1384
-720:2:1385
-721:2:1389
-722:2:1390
-723:2:1398
-724:2:1403
-725:2:1407
-726:2:1408
-727:2:1416
-728:2:1417
-729:2:1421
-730:2:1422
-731:2:1416
-732:2:1417
-733:2:1421
-734:2:1422
-735:2:1430
-736:2:1435
-737:2:1436
-738:2:1447
-739:2:1448
-740:2:1449
-741:2:1460
-742:2:1465
-743:2:1466
-744:2:1477
-745:2:1478
-746:2:1479
-747:2:1477
-748:2:1478
-749:2:1479
-750:2:1490
-751:2:1497
-752:0:2887
-753:2:1176
-754:0:2887
-755:2:1501
-756:2:1502
-757:2:1503
-758:2:1515
-759:2:1516
-760:2:1520
-761:2:1521
-762:2:1529
-763:2:1534
-764:2:1538
-765:2:1539
-766:2:1547
-767:2:1548
-768:2:1552
-769:2:1553
-770:2:1547
-771:2:1548
-772:2:1552
-773:2:1553
-774:2:1561
-775:2:1566
-776:2:1567
-777:2:1578
-778:2:1579
-779:2:1580
-780:2:1591
-781:2:1596
-782:2:1597
-783:2:1608
-784:2:1609
-785:2:1610
-786:2:1608
-787:2:1609
-788:2:1610
-789:2:1621
-790:2:1632
-791:2:1633
-792:0:2887
-793:2:1176
-794:0:2887
-795:2:1640
-796:2:1641
-797:2:1645
-798:2:1646
-799:2:1654
-800:2:1655
-801:2:1659
-802:2:1660
-803:2:1668
-804:2:1673
-805:2:1677
-806:2:1678
-807:2:1686
-808:2:1687
-809:2:1691
-810:2:1692
-811:2:1686
-812:2:1687
-813:2:1691
-814:2:1692
-815:2:1700
-816:2:1705
-817:2:1706
-818:2:1717
-819:2:1718
-820:2:1719
-821:2:1730
-822:2:1735
-823:2:1736
-824:2:1747
-825:2:1748
-826:2:1749
-827:2:1747
-828:2:1748
-829:2:1749
-830:2:1760
-831:0:2887
-832:2:1176
-833:0:2887
-834:2:1769
-835:2:1770
-836:2:1774
-837:2:1775
-838:2:1783
-839:2:1784
-840:2:1788
-841:2:1789
-842:2:1797
-843:2:1802
-844:2:1806
-845:2:1807
-846:2:1815
-847:2:1816
-848:2:1820
-849:2:1821
-850:2:1815
-851:2:1816
-852:2:1820
-853:2:1821
-854:2:1829
-855:2:1834
-856:2:1835
-857:2:1846
-858:2:1847
-859:2:1848
-860:2:1859
-861:2:1864
-862:2:1865
-863:2:1876
-864:2:1877
-865:2:1878
-866:2:1876
-867:2:1877
-868:2:1878
-869:2:1889
-870:2:1896
-871:0:2887
-872:2:1176
-873:0:2887
-874:2:1900
-875:2:1901
-876:2:1902
-877:2:1914
-878:2:1915
-879:2:1919
-880:2:1920
-881:2:1928
-882:2:1933
-883:2:1937
-884:2:1938
-885:2:1946
-886:2:1947
-887:2:1951
-888:2:1952
-889:2:1946
-890:2:1947
-891:2:1951
-892:2:1952
-893:2:1960
-894:2:1965
-895:2:1966
-896:2:1977
-897:2:1978
-898:2:1979
-899:2:1990
-900:2:1995
-901:2:1996
-902:2:2007
-903:2:2008
-904:2:2009
-905:2:2007
-906:2:2008
-907:2:2009
-908:2:2020
-909:2:2030
-910:2:2031
-911:0:2887
-912:2:1176
-913:0:2887
-914:2:2037
-915:0:2887
-916:2:2662
-917:2:2663
-918:2:2667
-919:2:2671
-920:2:2672
-921:2:2676
-922:2:2684
-923:2:2685
-924:2:2689
-925:2:2693
-926:2:2694
-927:2:2689
-928:2:2693
-929:2:2694
-930:2:2698
-931:2:2705
-932:2:2712
-933:2:2713
-934:2:2720
-935:2:2725
-936:2:2732
-937:2:2733
-938:2:2732
-939:2:2733
-940:2:2740
-941:2:2744
-942:0:2887
-943:2:2749
-944:0:2887
-945:2:2750
-946:0:2887
-947:2:2751
-948:0:2887
-949:2:2752
-950:0:2887
-951:1:51
-952:0:2887
-953:2:2753
-954:0:2887
-955:1:55
-956:1:56
-957:1:60
-958:1:64
-959:1:65
-960:1:69
-961:1:77
-962:1:78
-963:1:82
-964:1:86
-965:1:87
-966:1:82
-967:1:86
-968:1:87
-969:1:91
-970:1:98
-971:1:105
-972:1:106
-973:1:113
-974:1:118
-975:1:125
-976:1:126
-977:1:125
-978:1:126
-979:1:133
-980:1:137
-981:0:2887
-982:2:2752
-983:0:2887
-984:1:142
-985:0:2887
-986:2:2753
-987:0:2887
-988:2:2754
-989:0:2887
-990:2:2759
-991:0:2887
-992:2:2760
-993:0:2887
-994:2:2768
-995:2:2769
-996:2:2773
-997:2:2777
-998:2:2778
-999:2:2782
-1000:2:2790
-1001:2:2791
-1002:2:2795
-1003:2:2799
-1004:2:2800
-1005:2:2795
-1006:2:2799
-1007:2:2800
-1008:2:2804
-1009:2:2811
-1010:2:2818
-1011:2:2819
-1012:2:2826
-1013:2:2831
-1014:2:2838
-1015:2:2839
-1016:2:2838
-1017:2:2839
-1018:2:2846
-1019:2:2850
-1020:0:2887
-1021:2:2039
-1022:2:2049
-1023:0:2887
-1024:2:1176
-1025:0:2887
-1026:2:2040
-1027:2:2041
-1028:0:2887
-1029:2:1176
-1030:0:2887
-1031:2:2045
-1032:0:2887
-1033:2:2053
-1034:0:2887
-1035:2:1172
-1036:0:2887
-1037:2:1174
-1038:0:2887
-1039:2:1175
-1040:0:2887
-1041:2:1176
-1042:0:2887
-1043:2:1177
-1044:2:1178
-1045:2:1182
-1046:2:1183
-1047:2:1191
-1048:2:1192
-1049:2:1196
-1050:2:1197
-1051:2:1205
-1052:2:1210
-1053:2:1214
-1054:2:1215
-1055:2:1223
-1056:2:1224
-1057:2:1228
-1058:2:1229
-1059:2:1223
-1060:2:1224
-1061:2:1225
-1062:2:1237
-1063:2:1242
-1064:2:1243
-1065:2:1254
-1066:2:1255
-1067:2:1256
-1068:2:1267
-1069:2:1272
-1070:2:1273
-1071:2:1284
-1072:2:1285
-1073:2:1286
-1074:2:1284
-1075:2:1285
-1076:2:1286
-1077:2:1297
-1078:2:1305
-1079:0:2887
-1080:2:1176
-1081:0:2887
-1082:2:1357
-1083:2:1358
-1084:2:1359
-1085:0:2887
-1086:2:1176
-1087:0:2887
-1088:2:1364
-1089:0:2887
-1090:1:143
-1091:0:2887
-1092:1:145
-1093:0:2887
-1094:1:44
-1095:0:2887
-1096:1:151
-1097:1:152
-1098:1:156
-1099:1:157
-1100:1:165
-1101:1:166
-1102:1:170
-1103:1:171
-1104:1:179
-1105:1:184
-1106:1:188
-1107:1:189
-1108:1:197
-1109:1:198
-1110:1:202
-1111:1:203
-1112:1:197
-1113:1:198
-1114:1:202
-1115:1:203
-1116:1:211
-1117:1:216
-1118:1:217
-1119:1:228
-1120:1:229
-1121:1:230
-1122:1:241
-1123:1:246
-1124:1:247
-1125:1:258
-1126:1:259
-1127:1:260
-1128:1:258
-1129:1:259
-1130:1:260
-1131:1:271
-1132:0:2887
-1133:1:40
-1134:0:2887
-1135:1:41
-1136:0:2887
-1137:1:42
-1138:0:2887
-1139:1:143
-1140:0:2887
-1141:1:145
-1142:0:2887
-1143:1:44
-1144:0:2887
-1145:1:280
-1146:1:281
-1147:0:2887
-1148:1:40
-1149:0:2887
-1150:1:41
-1151:0:2887
-1152:1:42
-1153:0:2887
-1154:1:143
-1155:0:2887
-1156:1:145
-1157:0:2887
-1158:1:44
-1159:0:2887
-1160:1:287
-1161:1:288
-1162:1:292
-1163:1:293
-1164:1:301
-1165:1:302
-1166:1:306
-1167:1:307
-1168:1:315
-1169:1:320
-1170:1:324
-1171:1:325
-1172:1:333
-1173:1:334
-1174:1:338
-1175:1:339
-1176:1:333
-1177:1:334
-1178:1:338
-1179:1:339
-1180:1:347
-1181:1:352
-1182:1:353
-1183:1:364
-1184:1:365
-1185:1:366
-1186:1:377
-1187:1:382
-1188:1:383
-1189:1:394
-1190:1:395
-1191:1:396
-1192:1:394
-1193:1:395
-1194:1:396
-1195:1:407
-1196:0:2887
-1197:1:40
-1198:0:2887
-1199:1:41
-1200:0:2887
-1201:1:42
-1202:0:2887
-1203:1:143
-1204:0:2887
-1205:1:145
-1206:0:2887
-1207:1:44
-1208:0:2887
-1209:1:416
-1210:1:417
-1211:1:421
-1212:1:422
-1213:1:430
-1214:1:431
-1215:1:435
-1216:1:436
-1217:1:444
-1218:1:449
-1219:1:453
-1220:1:454
-1221:1:462
-1222:1:463
-1223:1:467
-1224:1:468
-1225:1:462
-1226:1:463
-1227:1:467
-1228:1:468
-1229:1:476
-1230:1:481
-1231:1:482
-1232:1:493
-1233:1:494
-1234:1:495
-1235:1:506
-1236:1:511
-1237:1:512
-1238:1:523
-1239:1:524
-1240:1:525
-1241:1:523
-1242:1:524
-1243:1:525
-1244:1:536
-1245:1:543
-1246:0:2887
-1247:1:40
-1248:0:2887
-1249:1:41
-1250:0:2887
-1251:1:42
-1252:0:2887
-1253:1:143
-1254:0:2887
-1255:1:145
-1256:0:2887
-1257:1:44
-1258:0:2887
-1259:1:681
-1260:1:682
-1261:1:686
-1262:1:687
-1263:1:695
-1264:1:696
-1265:1:697
-1266:1:709
-1267:1:714
-1268:1:718
-1269:1:719
-1270:1:727
-1271:1:728
-1272:1:732
-1273:1:733
-1274:1:727
-1275:1:728
-1276:1:732
-1277:1:733
-1278:1:741
-1279:1:746
-1280:1:747
-1281:1:758
-1282:1:759
-1283:1:760
-1284:1:771
-1285:1:776
-1286:1:777
-1287:1:788
-1288:1:789
-1289:1:790
-1290:1:788
-1291:1:789
-1292:1:790
-1293:1:801
-1294:0:2887
-1295:1:40
-1296:0:2887
-1297:1:41
-1298:0:2887
-1299:1:42
-1300:0:2887
-1301:1:143
-1302:0:2887
-1303:1:145
-1304:0:2887
-1305:1:44
-1306:0:2887
-1307:1:810
-1308:0:2887
-1309:1:1087
-1310:1:1094
-1311:1:1095
-1312:1:1102
-1313:1:1107
-1314:1:1114
-1315:1:1115
-1316:1:1114
-1317:1:1115
-1318:1:1122
-1319:1:1126
-1320:0:2887
-1321:2:2068
-1322:2:2069
-1323:2:2073
-1324:2:2077
-1325:2:2078
-1326:2:2082
-1327:2:2087
-1328:2:2095
-1329:2:2099
-1330:2:2100
-1331:2:2095
-1332:2:2096
-1333:2:2104
-1334:2:2111
-1335:2:2118
-1336:2:2119
-1337:2:2126
-1338:2:2131
-1339:2:2138
-1340:2:2139
-1341:2:2138
-1342:2:2139
-1343:2:2146
-1344:2:2150
-1345:0:2887
-1346:2:2155
-1347:0:2887
-1348:2:2156
-1349:0:2887
-1350:2:2157
-1351:0:2887
-1352:2:2158
-1353:0:2887
-1354:1:812
-1355:1:813
-1356:0:2885
-1357:2:2159
-1358:0:2891
-1359:1:919
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.define b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.log
deleted file mode 100644 (file)
index b0c3662..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1179)
-Depth=    4014 States=    1e+06 Transitions= 1.62e+08 Memory=   512.736        t=    256 R=   4e+03
-pan: claim violated! (at depth 1235)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 4014, errors: 1
-  1411681 states, stored
-2.3165948e+08 states, matched
-2.3307116e+08 transitions (= stored+matched)
-1.3076596e+09 atomic steps
-hash conflicts:  78416855 (resolved)
-
-Stats on memory usage (in Megabytes):
-  156.169      equivalent memory usage for states (stored*(State-vector + overhead))
-   66.078      actual memory usage for states (compression: 42.31%)
-               state-vector as stored = 13 byte + 36 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  531.779      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 14645 1835 1567 2 2 ]
-unreached in proctype urcu_reader
-       line 713, "pan.___", state 12, "((i<1))"
-       line 713, "pan.___", state 12, "((i>=1))"
-       line 268, "pan.___", state 55, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 86, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 102, "(1)"
-       line 249, "pan.___", state 110, "(1)"
-       line 253, "pan.___", state 122, "(1)"
-       line 257, "pan.___", state 130, "(1)"
-       line 404, "pan.___", state 156, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 188, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 202, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 221, "(1)"
-       line 431, "pan.___", state 251, "(1)"
-       line 435, "pan.___", state 264, "(1)"
-       line 614, "pan.___", state 285, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 404, "pan.___", state 292, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 324, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 338, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 357, "(1)"
-       line 431, "pan.___", state 387, "(1)"
-       line 435, "pan.___", state 400, "(1)"
-       line 404, "pan.___", state 421, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 453, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 467, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 486, "(1)"
-       line 431, "pan.___", state 516, "(1)"
-       line 435, "pan.___", state 529, "(1)"
-       line 404, "pan.___", state 552, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 554, "(1)"
-       line 404, "pan.___", state 555, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 555, "else"
-       line 404, "pan.___", state 558, "(1)"
-       line 408, "pan.___", state 566, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 568, "(1)"
-       line 408, "pan.___", state 569, "(cache_dirty_urcu_active_readers)"
-       line 408, "pan.___", state 569, "else"
-       line 408, "pan.___", state 572, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 406, "pan.___", state 578, "((i<1))"
-       line 406, "pan.___", state 578, "((i>=1))"
-       line 413, "pan.___", state 584, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 586, "(1)"
-       line 413, "pan.___", state 587, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 587, "else"
-       line 413, "pan.___", state 590, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 417, "pan.___", state 598, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 600, "(1)"
-       line 417, "pan.___", state 601, "(cache_dirty_rcu_data[i])"
-       line 417, "pan.___", state 601, "else"
-       line 417, "pan.___", state 604, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 415, "pan.___", state 610, "((i<2))"
-       line 415, "pan.___", state 610, "((i>=2))"
-       line 422, "pan.___", state 617, "(1)"
-       line 422, "pan.___", state 618, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 618, "else"
-       line 422, "pan.___", state 621, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 426, "pan.___", state 630, "(1)"
-       line 426, "pan.___", state 631, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 631, "else"
-       line 426, "pan.___", state 634, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 424, "pan.___", state 640, "((i<1))"
-       line 424, "pan.___", state 640, "((i>=1))"
-       line 431, "pan.___", state 647, "(1)"
-       line 431, "pan.___", state 648, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 648, "else"
-       line 431, "pan.___", state 651, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 435, "pan.___", state 660, "(1)"
-       line 435, "pan.___", state 661, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 661, "else"
-       line 435, "pan.___", state 664, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 433, "pan.___", state 670, "((i<2))"
-       line 433, "pan.___", state 670, "((i>=2))"
-       line 443, "pan.___", state 674, "(1)"
-       line 443, "pan.___", state 674, "(1)"
-       line 614, "pan.___", state 677, "cached_urcu_active_readers = (tmp+1)"
-       line 614, "pan.___", state 678, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 614, "pan.___", state 679, "(1)"
-       line 404, "pan.___", state 686, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 718, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 732, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 751, "(1)"
-       line 431, "pan.___", state 781, "(1)"
-       line 435, "pan.___", state 794, "(1)"
-       line 404, "pan.___", state 821, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 853, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 867, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 886, "(1)"
-       line 431, "pan.___", state 916, "(1)"
-       line 435, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 950, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 982, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 996, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 1015, "(1)"
-       line 431, "pan.___", state 1045, "(1)"
-       line 435, "pan.___", state 1058, "(1)"
-       line 245, "pan.___", state 1091, "(1)"
-       line 253, "pan.___", state 1111, "(1)"
-       line 257, "pan.___", state 1119, "(1)"
-       line 748, "pan.___", state 1136, "-end-"
-       (92 of 1136 states)
-unreached in proctype urcu_writer
-       line 837, "pan.___", state 12, "((i<1))"
-       line 837, "pan.___", state 12, "((i>=1))"
-       line 404, "pan.___", state 49, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 63, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 81, "cache_dirty_rcu_ptr = 0"
-       line 422, "pan.___", state 114, "(1)"
-       line 426, "pan.___", state 127, "(1)"
-       line 431, "pan.___", state 144, "(1)"
-       line 268, "pan.___", state 180, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 189, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 202, "cache_dirty_rcu_ptr = 0"
-       line 404, "pan.___", state 242, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 256, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 274, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 288, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 307, "(1)"
-       line 426, "pan.___", state 320, "(1)"
-       line 431, "pan.___", state 337, "(1)"
-       line 435, "pan.___", state 350, "(1)"
-       line 408, "pan.___", state 387, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 405, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 419, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 451, "(1)"
-       line 431, "pan.___", state 468, "(1)"
-       line 435, "pan.___", state 481, "(1)"
-       line 404, "pan.___", state 511, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 525, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 543, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 557, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 576, "(1)"
-       line 426, "pan.___", state 589, "(1)"
-       line 431, "pan.___", state 606, "(1)"
-       line 435, "pan.___", state 619, "(1)"
-       line 404, "pan.___", state 640, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 642, "(1)"
-       line 404, "pan.___", state 643, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 643, "else"
-       line 404, "pan.___", state 646, "(1)"
-       line 408, "pan.___", state 654, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 656, "(1)"
-       line 408, "pan.___", state 657, "(cache_dirty_urcu_active_readers)"
-       line 408, "pan.___", state 657, "else"
-       line 408, "pan.___", state 660, "(1)"
-       line 408, "pan.___", state 661, "(1)"
-       line 408, "pan.___", state 661, "(1)"
-       line 406, "pan.___", state 666, "((i<1))"
-       line 406, "pan.___", state 666, "((i>=1))"
-       line 413, "pan.___", state 672, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 674, "(1)"
-       line 413, "pan.___", state 675, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 675, "else"
-       line 413, "pan.___", state 678, "(1)"
-       line 413, "pan.___", state 679, "(1)"
-       line 413, "pan.___", state 679, "(1)"
-       line 417, "pan.___", state 686, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 688, "(1)"
-       line 417, "pan.___", state 689, "(cache_dirty_rcu_data[i])"
-       line 417, "pan.___", state 689, "else"
-       line 417, "pan.___", state 692, "(1)"
-       line 417, "pan.___", state 693, "(1)"
-       line 417, "pan.___", state 693, "(1)"
-       line 415, "pan.___", state 698, "((i<2))"
-       line 415, "pan.___", state 698, "((i>=2))"
-       line 422, "pan.___", state 705, "(1)"
-       line 422, "pan.___", state 706, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 706, "else"
-       line 422, "pan.___", state 709, "(1)"
-       line 422, "pan.___", state 710, "(1)"
-       line 422, "pan.___", state 710, "(1)"
-       line 426, "pan.___", state 718, "(1)"
-       line 426, "pan.___", state 719, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 719, "else"
-       line 426, "pan.___", state 722, "(1)"
-       line 426, "pan.___", state 723, "(1)"
-       line 426, "pan.___", state 723, "(1)"
-       line 424, "pan.___", state 728, "((i<1))"
-       line 424, "pan.___", state 728, "((i>=1))"
-       line 431, "pan.___", state 735, "(1)"
-       line 431, "pan.___", state 736, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 736, "else"
-       line 431, "pan.___", state 739, "(1)"
-       line 431, "pan.___", state 740, "(1)"
-       line 431, "pan.___", state 740, "(1)"
-       line 435, "pan.___", state 748, "(1)"
-       line 435, "pan.___", state 749, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 749, "else"
-       line 435, "pan.___", state 752, "(1)"
-       line 435, "pan.___", state 753, "(1)"
-       line 435, "pan.___", state 753, "(1)"
-       line 433, "pan.___", state 758, "((i<2))"
-       line 433, "pan.___", state 758, "((i>=2))"
-       line 443, "pan.___", state 762, "(1)"
-       line 443, "pan.___", state 762, "(1)"
-       line 1003, "pan.___", state 766, "_proc_urcu_writer = (_proc_urcu_writer|(1<<10))"
-       line 404, "pan.___", state 771, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 773, "(1)"
-       line 404, "pan.___", state 774, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 774, "else"
-       line 404, "pan.___", state 777, "(1)"
-       line 408, "pan.___", state 785, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 787, "(1)"
-       line 408, "pan.___", state 788, "(cache_dirty_urcu_active_readers)"
-       line 408, "pan.___", state 788, "else"
-       line 408, "pan.___", state 791, "(1)"
-       line 408, "pan.___", state 792, "(1)"
-       line 408, "pan.___", state 792, "(1)"
-       line 406, "pan.___", state 797, "((i<1))"
-       line 406, "pan.___", state 797, "((i>=1))"
-       line 413, "pan.___", state 803, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 805, "(1)"
-       line 413, "pan.___", state 806, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 806, "else"
-       line 413, "pan.___", state 809, "(1)"
-       line 413, "pan.___", state 810, "(1)"
-       line 413, "pan.___", state 810, "(1)"
-       line 417, "pan.___", state 817, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 819, "(1)"
-       line 417, "pan.___", state 820, "(cache_dirty_rcu_data[i])"
-       line 417, "pan.___", state 820, "else"
-       line 417, "pan.___", state 823, "(1)"
-       line 417, "pan.___", state 824, "(1)"
-       line 417, "pan.___", state 824, "(1)"
-       line 415, "pan.___", state 829, "((i<2))"
-       line 415, "pan.___", state 829, "((i>=2))"
-       line 422, "pan.___", state 836, "(1)"
-       line 422, "pan.___", state 837, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 837, "else"
-       line 422, "pan.___", state 840, "(1)"
-       line 422, "pan.___", state 841, "(1)"
-       line 422, "pan.___", state 841, "(1)"
-       line 426, "pan.___", state 849, "(1)"
-       line 426, "pan.___", state 850, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 850, "else"
-       line 426, "pan.___", state 853, "(1)"
-       line 426, "pan.___", state 854, "(1)"
-       line 426, "pan.___", state 854, "(1)"
-       line 424, "pan.___", state 859, "((i<1))"
-       line 424, "pan.___", state 859, "((i>=1))"
-       line 431, "pan.___", state 866, "(1)"
-       line 431, "pan.___", state 867, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 867, "else"
-       line 431, "pan.___", state 870, "(1)"
-       line 431, "pan.___", state 871, "(1)"
-       line 431, "pan.___", state 871, "(1)"
-       line 435, "pan.___", state 879, "(1)"
-       line 435, "pan.___", state 880, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 880, "else"
-       line 435, "pan.___", state 883, "(1)"
-       line 435, "pan.___", state 884, "(1)"
-       line 435, "pan.___", state 884, "(1)"
-       line 433, "pan.___", state 889, "((i<2))"
-       line 433, "pan.___", state 889, "((i>=2))"
-       line 443, "pan.___", state 893, "(1)"
-       line 443, "pan.___", state 893, "(1)"
-       line 1019, "pan.___", state 898, "_proc_urcu_writer = (_proc_urcu_writer|(1<<11))"
-       line 1014, "pan.___", state 899, "(((tmp2&((1<<7)-1))&&((tmp2^0)&(1<<7))))"
-       line 1014, "pan.___", state 899, "else"
-       line 1039, "pan.___", state 903, "_proc_urcu_writer = (_proc_urcu_writer&~(((1<<12)|(1<<11))))"
-       line 268, "pan.___", state 934, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 943, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 958, "(1)"
-       line 280, "pan.___", state 965, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 981, "(1)"
-       line 249, "pan.___", state 989, "(1)"
-       line 253, "pan.___", state 1001, "(1)"
-       line 257, "pan.___", state 1009, "(1)"
-       line 268, "pan.___", state 1040, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1049, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1062, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1071, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1087, "(1)"
-       line 249, "pan.___", state 1095, "(1)"
-       line 253, "pan.___", state 1107, "(1)"
-       line 257, "pan.___", state 1115, "(1)"
-       line 272, "pan.___", state 1141, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1154, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1163, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1179, "(1)"
-       line 249, "pan.___", state 1187, "(1)"
-       line 253, "pan.___", state 1199, "(1)"
-       line 257, "pan.___", state 1207, "(1)"
-       line 268, "pan.___", state 1238, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1247, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1260, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1269, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1285, "(1)"
-       line 249, "pan.___", state 1293, "(1)"
-       line 253, "pan.___", state 1305, "(1)"
-       line 257, "pan.___", state 1313, "(1)"
-       line 268, "pan.___", state 1330, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1332, "(1)"
-       line 272, "pan.___", state 1339, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1341, "(1)"
-       line 272, "pan.___", state 1342, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1342, "else"
-       line 270, "pan.___", state 1347, "((i<1))"
-       line 270, "pan.___", state 1347, "((i>=1))"
-       line 276, "pan.___", state 1352, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1354, "(1)"
-       line 276, "pan.___", state 1355, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1355, "else"
-       line 280, "pan.___", state 1361, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1363, "(1)"
-       line 280, "pan.___", state 1364, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1364, "else"
-       line 278, "pan.___", state 1369, "((i<2))"
-       line 278, "pan.___", state 1369, "((i>=2))"
-       line 245, "pan.___", state 1377, "(1)"
-       line 249, "pan.___", state 1385, "(1)"
-       line 249, "pan.___", state 1386, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1386, "else"
-       line 247, "pan.___", state 1391, "((i<1))"
-       line 247, "pan.___", state 1391, "((i>=1))"
-       line 253, "pan.___", state 1397, "(1)"
-       line 253, "pan.___", state 1398, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1398, "else"
-       line 257, "pan.___", state 1405, "(1)"
-       line 257, "pan.___", state 1406, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1406, "else"
-       line 262, "pan.___", state 1415, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1415, "else"
-       line 1115, "pan.___", state 1418, "i = 0"
-       line 1115, "pan.___", state 1420, "reader_barrier = 1"
-       line 1115, "pan.___", state 1431, "((i<1))"
-       line 1115, "pan.___", state 1431, "((i>=1))"
-       line 268, "pan.___", state 1436, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1438, "(1)"
-       line 272, "pan.___", state 1445, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1447, "(1)"
-       line 272, "pan.___", state 1448, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1448, "else"
-       line 270, "pan.___", state 1453, "((i<1))"
-       line 270, "pan.___", state 1453, "((i>=1))"
-       line 276, "pan.___", state 1458, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1460, "(1)"
-       line 276, "pan.___", state 1461, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1461, "else"
-       line 280, "pan.___", state 1467, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1469, "(1)"
-       line 280, "pan.___", state 1470, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1470, "else"
-       line 278, "pan.___", state 1475, "((i<2))"
-       line 278, "pan.___", state 1475, "((i>=2))"
-       line 245, "pan.___", state 1483, "(1)"
-       line 249, "pan.___", state 1491, "(1)"
-       line 249, "pan.___", state 1492, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1492, "else"
-       line 247, "pan.___", state 1497, "((i<1))"
-       line 247, "pan.___", state 1497, "((i>=1))"
-       line 253, "pan.___", state 1503, "(1)"
-       line 253, "pan.___", state 1504, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1504, "else"
-       line 257, "pan.___", state 1511, "(1)"
-       line 257, "pan.___", state 1512, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1512, "else"
-       line 262, "pan.___", state 1521, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1521, "else"
-       line 295, "pan.___", state 1523, "(cache_dirty_urcu_gp_ctr)"
-       line 295, "pan.___", state 1523, "else"
-       line 1115, "pan.___", state 1524, "(cache_dirty_urcu_gp_ctr)"
-       line 1115, "pan.___", state 1524, "else"
-       line 272, "pan.___", state 1537, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1550, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1559, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1575, "(1)"
-       line 249, "pan.___", state 1583, "(1)"
-       line 253, "pan.___", state 1595, "(1)"
-       line 257, "pan.___", state 1603, "(1)"
-       line 268, "pan.___", state 1634, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1643, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1656, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1665, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1681, "(1)"
-       line 249, "pan.___", state 1689, "(1)"
-       line 253, "pan.___", state 1701, "(1)"
-       line 257, "pan.___", state 1709, "(1)"
-       line 1123, "pan.___", state 1725, "-end-"
-       (212 of 1725 states)
-unreached in proctype :init:
-       line 1138, "pan.___", state 11, "((i<1))"
-       line 1138, "pan.___", state 11, "((i>=1))"
-       (1 of 26 states)
-unreached in proctype :never:
-       line 1184, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 372 seconds
-pan: rate 3796.6785 states/second
-pan: avg transition delay 1.5953e-06 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 3af0fbc..0000000
+++ /dev/null
@@ -1,1157 +0,0 @@
-#define SINGLE_FLIP
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 53de47d..0000000
+++ /dev/null
@@ -1,1238 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2889
-2:2:1136
-3:2:1141
-4:2:1145
-5:2:1153
-6:2:1157
-7:2:1161
-8:0:2889
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:2889
-16:3:2861
-17:3:2864
-18:3:2869
-19:3:2876
-20:3:2879
-21:3:2883
-22:3:2884
-23:0:2889
-24:3:2886
-25:0:2889
-26:2:1165
-27:0:2889
-28:2:1171
-29:0:2889
-30:2:1172
-31:0:2889
-32:2:1174
-33:0:2889
-34:2:1175
-35:0:2889
-36:2:1176
-37:0:2889
-38:2:1177
-39:0:2889
-40:2:1178
-41:0:2889
-42:2:1179
-43:0:2889
-44:2:1180
-45:2:1181
-46:2:1185
-47:2:1186
-48:2:1194
-49:2:1195
-50:2:1199
-51:2:1200
-52:2:1208
-53:2:1213
-54:2:1217
-55:2:1218
-56:2:1226
-57:2:1227
-58:2:1231
-59:2:1232
-60:2:1226
-61:2:1227
-62:2:1231
-63:2:1232
-64:2:1240
-65:2:1245
-66:2:1246
-67:2:1257
-68:2:1258
-69:2:1259
-70:2:1270
-71:2:1275
-72:2:1276
-73:2:1287
-74:2:1288
-75:2:1289
-76:2:1287
-77:2:1288
-78:2:1289
-79:2:1300
-80:2:1308
-81:0:2889
-82:2:1179
-83:0:2889
-84:2:1312
-85:2:1316
-86:2:1317
-87:2:1321
-88:2:1325
-89:2:1326
-90:2:1330
-91:2:1338
-92:2:1339
-93:2:1343
-94:2:1347
-95:2:1348
-96:2:1343
-97:2:1344
-98:2:1352
-99:0:2889
-100:2:1179
-101:0:2889
-102:2:1360
-103:2:1361
-104:2:1362
-105:0:2889
-106:2:1179
-107:0:2889
-108:2:1367
-109:0:2889
-110:2:2070
-111:2:2071
-112:2:2075
-113:2:2079
-114:2:2080
-115:2:2084
-116:2:2089
-117:2:2097
-118:2:2101
-119:2:2102
-120:2:2097
-121:2:2101
-122:2:2102
-123:2:2106
-124:2:2113
-125:2:2120
-126:2:2121
-127:2:2128
-128:2:2133
-129:2:2140
-130:2:2141
-131:2:2140
-132:2:2141
-133:2:2148
-134:2:2152
-135:0:2889
-136:2:2157
-137:0:2889
-138:2:2158
-139:0:2889
-140:2:2159
-141:0:2889
-142:2:2160
-143:0:2889
-144:1:29
-145:0:2889
-146:2:2161
-147:0:2889
-148:1:35
-149:0:2889
-150:1:36
-151:0:2889
-152:2:2160
-153:0:2889
-154:1:37
-155:0:2889
-156:2:2161
-157:0:2889
-158:1:38
-159:0:2889
-160:2:2160
-161:0:2889
-162:1:39
-163:0:2889
-164:2:2161
-165:0:2889
-166:1:40
-167:0:2889
-168:1:41
-169:0:2889
-170:2:2160
-171:0:2889
-172:1:42
-173:0:2889
-174:2:2161
-175:0:2889
-176:1:51
-177:0:2889
-178:2:2160
-179:0:2889
-180:1:55
-181:1:56
-182:1:60
-183:1:64
-184:1:65
-185:1:69
-186:1:77
-187:1:78
-188:1:82
-189:1:86
-190:1:87
-191:1:82
-192:1:86
-193:1:87
-194:1:91
-195:1:98
-196:1:105
-197:1:106
-198:1:113
-199:1:118
-200:1:125
-201:1:126
-202:1:125
-203:1:126
-204:1:133
-205:1:137
-206:0:2889
-207:2:2161
-208:0:2889
-209:1:142
-210:0:2889
-211:2:2162
-212:0:2889
-213:2:2167
-214:0:2889
-215:2:2168
-216:0:2889
-217:2:2176
-218:2:2177
-219:2:2181
-220:2:2185
-221:2:2186
-222:2:2190
-223:2:2198
-224:2:2199
-225:2:2203
-226:2:2207
-227:2:2208
-228:2:2203
-229:2:2207
-230:2:2208
-231:2:2212
-232:2:2219
-233:2:2226
-234:2:2227
-235:2:2234
-236:2:2239
-237:2:2246
-238:2:2247
-239:2:2246
-240:2:2247
-241:2:2254
-242:2:2258
-243:0:2889
-244:2:1369
-245:2:2051
-246:0:2889
-247:2:1179
-248:0:2889
-249:2:1370
-250:0:2889
-251:2:1179
-252:0:2889
-253:2:1373
-254:2:1374
-255:2:1378
-256:2:1379
-257:2:1387
-258:2:1388
-259:2:1392
-260:2:1393
-261:2:1401
-262:2:1406
-263:2:1410
-264:2:1411
-265:2:1419
-266:2:1420
-267:2:1424
-268:2:1425
-269:2:1419
-270:2:1420
-271:2:1424
-272:2:1425
-273:2:1433
-274:2:1438
-275:2:1439
-276:2:1450
-277:2:1451
-278:2:1452
-279:2:1463
-280:2:1468
-281:2:1469
-282:2:1480
-283:2:1481
-284:2:1482
-285:2:1480
-286:2:1481
-287:2:1482
-288:2:1493
-289:2:1500
-290:0:2889
-291:2:1179
-292:0:2889
-293:2:1504
-294:2:1505
-295:2:1506
-296:2:1518
-297:2:1519
-298:2:1523
-299:2:1524
-300:2:1532
-301:2:1537
-302:2:1541
-303:2:1542
-304:2:1550
-305:2:1551
-306:2:1555
-307:2:1556
-308:2:1550
-309:2:1551
-310:2:1555
-311:2:1556
-312:2:1564
-313:2:1569
-314:2:1570
-315:2:1581
-316:2:1582
-317:2:1583
-318:2:1594
-319:2:1599
-320:2:1600
-321:2:1611
-322:2:1612
-323:2:1613
-324:2:1611
-325:2:1612
-326:2:1613
-327:2:1624
-328:2:1634
-329:2:1635
-330:0:2889
-331:2:1179
-332:0:2889
-333:2:2039
-334:0:2889
-335:2:2664
-336:2:2665
-337:2:2669
-338:2:2673
-339:2:2674
-340:2:2678
-341:2:2686
-342:2:2687
-343:2:2691
-344:2:2695
-345:2:2696
-346:2:2691
-347:2:2695
-348:2:2696
-349:2:2700
-350:2:2707
-351:2:2714
-352:2:2715
-353:2:2722
-354:2:2727
-355:2:2734
-356:2:2735
-357:2:2734
-358:2:2735
-359:2:2742
-360:2:2746
-361:0:2889
-362:2:2751
-363:0:2889
-364:2:2752
-365:0:2889
-366:2:2753
-367:0:2889
-368:2:2754
-369:0:2889
-370:1:143
-371:0:2889
-372:2:2755
-373:0:2889
-374:1:145
-375:0:2889
-376:2:2754
-377:0:2889
-378:1:44
-379:0:2889
-380:2:2755
-381:0:2889
-382:1:151
-383:1:152
-384:1:156
-385:1:157
-386:1:165
-387:1:166
-388:1:170
-389:1:171
-390:1:179
-391:1:184
-392:1:188
-393:1:189
-394:1:197
-395:1:198
-396:1:202
-397:1:203
-398:1:197
-399:1:198
-400:1:202
-401:1:203
-402:1:211
-403:1:223
-404:1:224
-405:1:228
-406:1:229
-407:1:230
-408:1:241
-409:1:246
-410:1:247
-411:1:258
-412:1:259
-413:1:260
-414:1:258
-415:1:259
-416:1:260
-417:1:271
-418:0:2889
-419:1:40
-420:0:2889
-421:1:41
-422:0:2889
-423:2:2754
-424:0:2889
-425:1:42
-426:0:2889
-427:2:2755
-428:0:2889
-429:1:143
-430:0:2889
-431:1:145
-432:0:2889
-433:2:2754
-434:0:2889
-435:1:44
-436:0:2889
-437:2:2755
-438:0:2889
-439:1:280
-440:1:281
-441:0:2889
-442:1:40
-443:0:2889
-444:1:41
-445:0:2889
-446:2:2754
-447:0:2889
-448:1:42
-449:0:2889
-450:2:2755
-451:0:2889
-452:1:143
-453:0:2889
-454:1:145
-455:0:2889
-456:2:2754
-457:0:2889
-458:1:44
-459:0:2889
-460:2:2755
-461:0:2889
-462:1:287
-463:1:288
-464:1:292
-465:1:293
-466:1:301
-467:1:302
-468:1:306
-469:1:307
-470:1:315
-471:1:320
-472:1:324
-473:1:325
-474:1:333
-475:1:334
-476:1:338
-477:1:339
-478:1:333
-479:1:334
-480:1:338
-481:1:339
-482:1:347
-483:1:359
-484:1:360
-485:1:364
-486:1:365
-487:1:366
-488:1:377
-489:1:382
-490:1:383
-491:1:394
-492:1:395
-493:1:396
-494:1:394
-495:1:395
-496:1:396
-497:1:407
-498:0:2889
-499:1:40
-500:0:2889
-501:1:41
-502:0:2889
-503:2:2754
-504:0:2889
-505:1:42
-506:0:2889
-507:2:2755
-508:0:2889
-509:1:51
-510:0:2889
-511:2:2754
-512:0:2889
-513:1:55
-514:1:56
-515:1:60
-516:1:64
-517:1:65
-518:1:69
-519:1:77
-520:1:78
-521:1:82
-522:1:86
-523:1:87
-524:1:82
-525:1:86
-526:1:87
-527:1:91
-528:1:98
-529:1:105
-530:1:106
-531:1:113
-532:1:118
-533:1:125
-534:1:126
-535:1:125
-536:1:126
-537:1:133
-538:1:137
-539:0:2889
-540:2:2755
-541:0:2889
-542:1:142
-543:0:2889
-544:2:2756
-545:0:2889
-546:2:2761
-547:0:2889
-548:2:2762
-549:0:2889
-550:2:2770
-551:2:2771
-552:2:2775
-553:2:2779
-554:2:2780
-555:2:2784
-556:2:2792
-557:2:2793
-558:2:2797
-559:2:2801
-560:2:2802
-561:2:2797
-562:2:2801
-563:2:2802
-564:2:2806
-565:2:2813
-566:2:2820
-567:2:2821
-568:2:2828
-569:2:2833
-570:2:2840
-571:2:2841
-572:2:2840
-573:2:2841
-574:2:2848
-575:2:2852
-576:0:2889
-577:2:2041
-578:2:2051
-579:0:2889
-580:2:1179
-581:0:2889
-582:2:2042
-583:2:2043
-584:0:2889
-585:2:1179
-586:0:2889
-587:2:2047
-588:0:2889
-589:2:2055
-590:0:2889
-591:2:1172
-592:0:2889
-593:2:1174
-594:0:2889
-595:2:1175
-596:0:2889
-597:2:1176
-598:0:2889
-599:2:1177
-600:0:2889
-601:2:1178
-602:0:2889
-603:2:1179
-604:0:2889
-605:2:1180
-606:2:1181
-607:2:1185
-608:2:1186
-609:2:1194
-610:2:1195
-611:2:1199
-612:2:1200
-613:2:1208
-614:2:1213
-615:2:1217
-616:2:1218
-617:2:1226
-618:2:1227
-619:2:1228
-620:2:1226
-621:2:1227
-622:2:1231
-623:2:1232
-624:2:1240
-625:2:1245
-626:2:1246
-627:2:1257
-628:2:1258
-629:2:1259
-630:2:1270
-631:2:1275
-632:2:1276
-633:2:1287
-634:2:1288
-635:2:1289
-636:2:1287
-637:2:1288
-638:2:1289
-639:2:1300
-640:2:1308
-641:0:2889
-642:2:1179
-643:0:2889
-644:2:1312
-645:2:1316
-646:2:1317
-647:2:1321
-648:2:1325
-649:2:1326
-650:2:1330
-651:2:1338
-652:2:1339
-653:2:1343
-654:2:1344
-655:2:1343
-656:2:1347
-657:2:1348
-658:2:1352
-659:0:2889
-660:2:1179
-661:0:2889
-662:2:1360
-663:2:1361
-664:2:1362
-665:0:2889
-666:2:1179
-667:0:2889
-668:2:1367
-669:0:2889
-670:2:2070
-671:2:2071
-672:2:2075
-673:2:2079
-674:2:2080
-675:2:2084
-676:2:2089
-677:2:2097
-678:2:2101
-679:2:2102
-680:2:2097
-681:2:2101
-682:2:2102
-683:2:2106
-684:2:2113
-685:2:2120
-686:2:2121
-687:2:2128
-688:2:2133
-689:2:2140
-690:2:2141
-691:2:2140
-692:2:2141
-693:2:2148
-694:2:2152
-695:0:2889
-696:2:2157
-697:0:2889
-698:2:2158
-699:0:2889
-700:2:2159
-701:0:2889
-702:2:2160
-703:0:2889
-704:1:143
-705:0:2889
-706:2:2161
-707:0:2889
-708:1:145
-709:0:2889
-710:2:2160
-711:0:2889
-712:1:44
-713:0:2889
-714:2:2161
-715:0:2889
-716:1:416
-717:1:417
-718:1:421
-719:1:422
-720:1:430
-721:1:431
-722:1:435
-723:1:436
-724:1:444
-725:1:449
-726:1:453
-727:1:454
-728:1:462
-729:1:463
-730:1:467
-731:1:468
-732:1:462
-733:1:463
-734:1:467
-735:1:468
-736:1:476
-737:1:481
-738:1:482
-739:1:493
-740:1:494
-741:1:495
-742:1:506
-743:1:518
-744:1:519
-745:1:523
-746:1:524
-747:1:525
-748:1:523
-749:1:524
-750:1:525
-751:1:536
-752:1:543
-753:0:2889
-754:1:40
-755:0:2889
-756:1:41
-757:0:2889
-758:2:2160
-759:0:2889
-760:1:42
-761:0:2889
-762:2:2161
-763:0:2889
-764:1:143
-765:0:2889
-766:1:145
-767:0:2889
-768:2:2160
-769:0:2889
-770:1:44
-771:0:2889
-772:2:2161
-773:0:2889
-774:1:681
-775:1:682
-776:1:686
-777:1:687
-778:1:695
-779:1:696
-780:1:697
-781:1:709
-782:1:714
-783:1:718
-784:1:719
-785:1:727
-786:1:728
-787:1:732
-788:1:733
-789:1:727
-790:1:728
-791:1:732
-792:1:733
-793:1:741
-794:1:746
-795:1:747
-796:1:758
-797:1:759
-798:1:760
-799:1:771
-800:1:783
-801:1:784
-802:1:788
-803:1:789
-804:1:790
-805:1:788
-806:1:789
-807:1:790
-808:1:801
-809:0:2889
-810:1:40
-811:0:2889
-812:1:41
-813:0:2889
-814:2:2160
-815:0:2889
-816:1:42
-817:0:2889
-818:2:2161
-819:0:2889
-820:1:51
-821:0:2889
-822:2:2160
-823:0:2889
-824:1:55
-825:1:56
-826:1:60
-827:1:64
-828:1:65
-829:1:69
-830:1:77
-831:1:78
-832:1:82
-833:1:86
-834:1:87
-835:1:82
-836:1:86
-837:1:87
-838:1:91
-839:1:98
-840:1:105
-841:1:106
-842:1:113
-843:1:118
-844:1:125
-845:1:126
-846:1:125
-847:1:126
-848:1:133
-849:1:137
-850:0:2889
-851:2:2161
-852:0:2889
-853:1:142
-854:0:2889
-855:2:2162
-856:0:2889
-857:2:2167
-858:0:2889
-859:2:2168
-860:0:2889
-861:2:2176
-862:2:2177
-863:2:2181
-864:2:2185
-865:2:2186
-866:2:2190
-867:2:2198
-868:2:2199
-869:2:2203
-870:2:2207
-871:2:2208
-872:2:2203
-873:2:2207
-874:2:2208
-875:2:2212
-876:2:2219
-877:2:2226
-878:2:2227
-879:2:2234
-880:2:2239
-881:2:2246
-882:2:2247
-883:2:2246
-884:2:2247
-885:2:2254
-886:2:2258
-887:0:2889
-888:2:1369
-889:2:2051
-890:0:2889
-891:2:1179
-892:0:2889
-893:2:1370
-894:0:2889
-895:2:1179
-896:0:2889
-897:2:1373
-898:2:1374
-899:2:1378
-900:2:1379
-901:2:1387
-902:2:1388
-903:2:1392
-904:2:1393
-905:2:1401
-906:2:1406
-907:2:1410
-908:2:1411
-909:2:1419
-910:2:1420
-911:2:1424
-912:2:1425
-913:2:1419
-914:2:1420
-915:2:1424
-916:2:1425
-917:2:1433
-918:2:1438
-919:2:1439
-920:2:1450
-921:2:1451
-922:2:1452
-923:2:1463
-924:2:1468
-925:2:1469
-926:2:1480
-927:2:1481
-928:2:1482
-929:2:1480
-930:2:1481
-931:2:1482
-932:2:1493
-933:2:1500
-934:0:2889
-935:2:1179
-936:0:2889
-937:2:1504
-938:2:1505
-939:2:1506
-940:2:1518
-941:2:1519
-942:2:1523
-943:2:1524
-944:2:1532
-945:2:1537
-946:2:1541
-947:2:1542
-948:2:1550
-949:2:1551
-950:2:1555
-951:2:1556
-952:2:1550
-953:2:1551
-954:2:1555
-955:2:1556
-956:2:1564
-957:2:1569
-958:2:1570
-959:2:1581
-960:2:1582
-961:2:1583
-962:2:1594
-963:2:1599
-964:2:1600
-965:2:1611
-966:2:1612
-967:2:1613
-968:2:1611
-969:2:1612
-970:2:1613
-971:2:1624
-972:2:1634
-973:2:1635
-974:0:2889
-975:2:1179
-976:0:2889
-977:2:2039
-978:0:2889
-979:2:2664
-980:2:2665
-981:2:2669
-982:2:2673
-983:2:2674
-984:2:2678
-985:2:2686
-986:2:2687
-987:2:2691
-988:2:2695
-989:2:2696
-990:2:2691
-991:2:2695
-992:2:2696
-993:2:2700
-994:2:2707
-995:2:2714
-996:2:2715
-997:2:2722
-998:2:2727
-999:2:2734
-1000:2:2735
-1001:2:2734
-1002:2:2735
-1003:2:2742
-1004:2:2746
-1005:0:2889
-1006:2:2751
-1007:0:2889
-1008:2:2752
-1009:0:2889
-1010:2:2753
-1011:0:2889
-1012:2:2754
-1013:0:2889
-1014:1:51
-1015:0:2889
-1016:2:2755
-1017:0:2889
-1018:1:55
-1019:1:56
-1020:1:60
-1021:1:64
-1022:1:65
-1023:1:69
-1024:1:77
-1025:1:78
-1026:1:82
-1027:1:86
-1028:1:87
-1029:1:82
-1030:1:86
-1031:1:87
-1032:1:91
-1033:1:98
-1034:1:105
-1035:1:106
-1036:1:113
-1037:1:118
-1038:1:125
-1039:1:126
-1040:1:125
-1041:1:126
-1042:1:133
-1043:1:137
-1044:0:2889
-1045:2:2754
-1046:0:2889
-1047:1:142
-1048:0:2889
-1049:2:2755
-1050:0:2889
-1051:2:2756
-1052:0:2889
-1053:2:2761
-1054:0:2889
-1055:2:2762
-1056:0:2889
-1057:2:2770
-1058:2:2771
-1059:2:2775
-1060:2:2779
-1061:2:2780
-1062:2:2784
-1063:2:2792
-1064:2:2793
-1065:2:2797
-1066:2:2801
-1067:2:2802
-1068:2:2797
-1069:2:2801
-1070:2:2802
-1071:2:2806
-1072:2:2813
-1073:2:2820
-1074:2:2821
-1075:2:2828
-1076:2:2833
-1077:2:2840
-1078:2:2841
-1079:2:2840
-1080:2:2841
-1081:2:2848
-1082:2:2852
-1083:0:2889
-1084:2:2041
-1085:2:2051
-1086:0:2889
-1087:2:1179
-1088:0:2889
-1089:2:2042
-1090:2:2043
-1091:0:2889
-1092:2:1179
-1093:0:2889
-1094:2:2047
-1095:0:2889
-1096:2:2055
-1097:0:2889
-1098:2:1172
-1099:0:2889
-1100:2:1174
-1101:0:2889
-1102:2:1175
-1103:0:2889
-1104:2:1176
-1105:0:2889
-1106:2:1177
-1107:0:2889
-1108:2:1178
-1109:0:2889
-1110:2:1179
-1111:0:2889
-1112:2:1180
-1113:2:1181
-1114:2:1185
-1115:2:1186
-1116:2:1194
-1117:2:1195
-1118:2:1199
-1119:2:1200
-1120:2:1208
-1121:2:1213
-1122:2:1217
-1123:2:1218
-1124:2:1226
-1125:2:1227
-1126:2:1231
-1127:2:1232
-1128:2:1226
-1129:2:1227
-1130:2:1228
-1131:2:1240
-1132:2:1245
-1133:2:1246
-1134:2:1257
-1135:2:1258
-1136:2:1259
-1137:2:1270
-1138:2:1275
-1139:2:1276
-1140:2:1287
-1141:2:1288
-1142:2:1289
-1143:2:1287
-1144:2:1288
-1145:2:1289
-1146:2:1300
-1147:2:1308
-1148:0:2889
-1149:2:1179
-1150:0:2889
-1151:1:143
-1152:0:2889
-1153:1:145
-1154:0:2889
-1155:1:44
-1156:0:2889
-1157:1:810
-1158:0:2889
-1159:1:1087
-1160:1:1094
-1161:1:1095
-1162:1:1102
-1163:1:1107
-1164:1:1114
-1165:1:1115
-1166:1:1114
-1167:1:1115
-1168:1:1122
-1169:1:1126
-1170:0:2889
-1171:2:1312
-1172:2:1316
-1173:2:1317
-1174:2:1321
-1175:2:1325
-1176:2:1326
-1177:2:1330
-1178:2:1338
-1179:2:1339
-1180:2:1343
-1181:2:1347
-1182:2:1348
-1183:2:1343
-1184:2:1344
-1185:2:1352
-1186:0:2889
-1187:2:1179
-1188:0:2889
-1189:2:1360
-1190:2:1361
-1191:2:1362
-1192:0:2889
-1193:2:1179
-1194:0:2889
-1195:2:1367
-1196:0:2889
-1197:2:2070
-1198:2:2071
-1199:2:2075
-1200:2:2079
-1201:2:2080
-1202:2:2084
-1203:2:2089
-1204:2:2097
-1205:2:2101
-1206:2:2102
-1207:2:2097
-1208:2:2101
-1209:2:2102
-1210:2:2106
-1211:2:2113
-1212:2:2120
-1213:2:2121
-1214:2:2128
-1215:2:2133
-1216:2:2140
-1217:2:2141
-1218:2:2140
-1219:2:2141
-1220:2:2148
-1221:2:2152
-1222:0:2889
-1223:2:2157
-1224:0:2889
-1225:2:2158
-1226:0:2889
-1227:2:2159
-1228:0:2889
-1229:2:2160
-1230:0:2889
-1231:1:812
-1232:1:813
-1233:0:2887
-1234:2:2161
-1235:0:2893
-1236:1:1005
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress.ltl b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.define b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.log
deleted file mode 100644 (file)
index 0fc4f7a..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1179)
-depth 7: Claim reached state 9 (line 1184)
-depth 136: Claim reached state 9 (line 1183)
-Depth=   12986 States=    1e+06 Transitions= 1.85e+08 Memory=   494.963        t=    294 R=   3e+03
-Depth=   12986 States=    2e+06 Transitions= 6.44e+08 Memory=   520.744        t= 1.06e+03 R=   2e+03
-Depth=   12986 States=    3e+06 Transitions= 1.24e+09 Memory=   545.842        t= 2.08e+03 R=   1e+03
-pan: resizing hashtable to -w22..  done
-Depth=   12986 States=    4e+06 Transitions= 1.65e+09 Memory=   602.940        t= 2.76e+03 R=   1e+03
-Depth=   12986 States=    5e+06 Transitions=    2e+09 Memory=   629.111        t= 3.34e+03 R=   1e+03
-Depth=   12986 States=    6e+06 Transitions= 2.47e+09 Memory=   655.283        t= 4.12e+03 R=   1e+03
-Depth=   12986 States=    7e+06 Transitions= 2.94e+09 Memory=   681.260        t= 4.93e+03 R=   1e+03
-Depth=   12986 States=    8e+06 Transitions= 3.45e+09 Memory=   705.967        t= 5.79e+03 R=   1e+03
-Depth=   12986 States=    9e+06 Transitions= 3.84e+09 Memory=   732.529        t= 6.46e+03 R=   1e+03
-pan: resizing hashtable to -w24..  done
-Depth=   12986 States=    1e+07 Transitions= 4.23e+09 Memory=   882.404        t= 7.1e+03 R=   1e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 12986, errors: 0
-  5822478 states, stored (1.02932e+07 visited)
-4.3658924e+09 states, matched
-4.3761856e+09 transitions (= visited+matched)
-2.5547511e+10 atomic steps
-hash conflicts: 1.1937107e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
-  644.119      equivalent memory usage for states (stored*(State-vector + overhead))
-  303.976      actual memory usage for states (compression: 47.19%)
-               state-vector as stored = 19 byte + 36 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
-  889.631      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 28603 2179 2102 2 2 ]
-unreached in proctype urcu_reader
-       line 268, "pan.___", state 55, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 86, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 102, "(1)"
-       line 249, "pan.___", state 110, "(1)"
-       line 253, "pan.___", state 122, "(1)"
-       line 257, "pan.___", state 130, "(1)"
-       line 404, "pan.___", state 156, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 188, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 202, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 221, "(1)"
-       line 431, "pan.___", state 251, "(1)"
-       line 435, "pan.___", state 264, "(1)"
-       line 614, "pan.___", state 285, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 404, "pan.___", state 292, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 324, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 338, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 357, "(1)"
-       line 431, "pan.___", state 387, "(1)"
-       line 435, "pan.___", state 400, "(1)"
-       line 404, "pan.___", state 421, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 453, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 467, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 486, "(1)"
-       line 431, "pan.___", state 516, "(1)"
-       line 435, "pan.___", state 529, "(1)"
-       line 404, "pan.___", state 552, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 554, "(1)"
-       line 404, "pan.___", state 555, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 555, "else"
-       line 404, "pan.___", state 558, "(1)"
-       line 408, "pan.___", state 566, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 568, "(1)"
-       line 408, "pan.___", state 569, "(cache_dirty_urcu_active_readers)"
-       line 408, "pan.___", state 569, "else"
-       line 408, "pan.___", state 572, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 406, "pan.___", state 578, "((i<1))"
-       line 406, "pan.___", state 578, "((i>=1))"
-       line 413, "pan.___", state 584, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 586, "(1)"
-       line 413, "pan.___", state 587, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 587, "else"
-       line 413, "pan.___", state 590, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 417, "pan.___", state 598, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 600, "(1)"
-       line 417, "pan.___", state 601, "(cache_dirty_rcu_data[i])"
-       line 417, "pan.___", state 601, "else"
-       line 417, "pan.___", state 604, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 415, "pan.___", state 610, "((i<2))"
-       line 415, "pan.___", state 610, "((i>=2))"
-       line 422, "pan.___", state 617, "(1)"
-       line 422, "pan.___", state 618, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 618, "else"
-       line 422, "pan.___", state 621, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 426, "pan.___", state 630, "(1)"
-       line 426, "pan.___", state 631, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 631, "else"
-       line 426, "pan.___", state 634, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 424, "pan.___", state 640, "((i<1))"
-       line 424, "pan.___", state 640, "((i>=1))"
-       line 431, "pan.___", state 647, "(1)"
-       line 431, "pan.___", state 648, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 648, "else"
-       line 431, "pan.___", state 651, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 435, "pan.___", state 660, "(1)"
-       line 435, "pan.___", state 661, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 661, "else"
-       line 435, "pan.___", state 664, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 433, "pan.___", state 670, "((i<2))"
-       line 433, "pan.___", state 670, "((i>=2))"
-       line 443, "pan.___", state 674, "(1)"
-       line 443, "pan.___", state 674, "(1)"
-       line 614, "pan.___", state 677, "cached_urcu_active_readers = (tmp+1)"
-       line 614, "pan.___", state 678, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 614, "pan.___", state 679, "(1)"
-       line 404, "pan.___", state 686, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 718, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 732, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 751, "(1)"
-       line 431, "pan.___", state 781, "(1)"
-       line 435, "pan.___", state 794, "(1)"
-       line 404, "pan.___", state 821, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 853, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 867, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 886, "(1)"
-       line 431, "pan.___", state 916, "(1)"
-       line 435, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 950, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 982, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 996, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 1015, "(1)"
-       line 431, "pan.___", state 1045, "(1)"
-       line 435, "pan.___", state 1058, "(1)"
-       line 245, "pan.___", state 1091, "(1)"
-       line 253, "pan.___", state 1111, "(1)"
-       line 257, "pan.___", state 1119, "(1)"
-       line 748, "pan.___", state 1136, "-end-"
-       (91 of 1136 states)
-unreached in proctype urcu_writer
-       line 404, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 422, "pan.___", state 110, "(1)"
-       line 426, "pan.___", state 123, "(1)"
-       line 431, "pan.___", state 140, "(1)"
-       line 268, "pan.___", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 198, "cache_dirty_rcu_ptr = 0"
-       line 404, "pan.___", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 270, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 303, "(1)"
-       line 426, "pan.___", state 316, "(1)"
-       line 431, "pan.___", state 333, "(1)"
-       line 435, "pan.___", state 346, "(1)"
-       line 408, "pan.___", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 401, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 447, "(1)"
-       line 431, "pan.___", state 464, "(1)"
-       line 435, "pan.___", state 477, "(1)"
-       line 408, "pan.___", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 540, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 586, "(1)"
-       line 431, "pan.___", state 603, "(1)"
-       line 435, "pan.___", state 616, "(1)"
-       line 408, "pan.___", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 669, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 715, "(1)"
-       line 431, "pan.___", state 732, "(1)"
-       line 435, "pan.___", state 745, "(1)"
-       line 408, "pan.___", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 800, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 846, "(1)"
-       line 431, "pan.___", state 863, "(1)"
-       line 435, "pan.___", state 876, "(1)"
-       line 268, "pan.___", state 926, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 935, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 948, "cache_dirty_rcu_ptr = 0"
-       line 245, "pan.___", state 973, "(1)"
-       line 249, "pan.___", state 981, "(1)"
-       line 253, "pan.___", state 993, "(1)"
-       line 257, "pan.___", state 1001, "(1)"
-       line 268, "pan.___", state 1032, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1041, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1054, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1063, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1079, "(1)"
-       line 249, "pan.___", state 1087, "(1)"
-       line 253, "pan.___", state 1099, "(1)"
-       line 257, "pan.___", state 1107, "(1)"
-       line 268, "pan.___", state 1128, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1137, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1152, "(1)"
-       line 280, "pan.___", state 1159, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1175, "(1)"
-       line 249, "pan.___", state 1183, "(1)"
-       line 253, "pan.___", state 1195, "(1)"
-       line 257, "pan.___", state 1203, "(1)"
-       line 268, "pan.___", state 1234, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1243, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1256, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1265, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1281, "(1)"
-       line 249, "pan.___", state 1289, "(1)"
-       line 253, "pan.___", state 1301, "(1)"
-       line 257, "pan.___", state 1309, "(1)"
-       line 272, "pan.___", state 1335, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1348, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1357, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1373, "(1)"
-       line 249, "pan.___", state 1381, "(1)"
-       line 253, "pan.___", state 1393, "(1)"
-       line 257, "pan.___", state 1401, "(1)"
-       line 268, "pan.___", state 1432, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1441, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1454, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1463, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1479, "(1)"
-       line 249, "pan.___", state 1487, "(1)"
-       line 253, "pan.___", state 1499, "(1)"
-       line 257, "pan.___", state 1507, "(1)"
-       line 272, "pan.___", state 1533, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1546, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1555, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1571, "(1)"
-       line 249, "pan.___", state 1579, "(1)"
-       line 253, "pan.___", state 1591, "(1)"
-       line 257, "pan.___", state 1599, "(1)"
-       line 268, "pan.___", state 1630, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1639, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1652, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1661, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1677, "(1)"
-       line 249, "pan.___", state 1685, "(1)"
-       line 253, "pan.___", state 1697, "(1)"
-       line 257, "pan.___", state 1705, "(1)"
-       line 272, "pan.___", state 1731, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1744, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1753, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1769, "(1)"
-       line 249, "pan.___", state 1777, "(1)"
-       line 253, "pan.___", state 1789, "(1)"
-       line 257, "pan.___", state 1797, "(1)"
-       line 268, "pan.___", state 1828, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1837, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1850, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1859, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1875, "(1)"
-       line 249, "pan.___", state 1883, "(1)"
-       line 253, "pan.___", state 1895, "(1)"
-       line 257, "pan.___", state 1903, "(1)"
-       line 1123, "pan.___", state 1919, "-end-"
-       (118 of 1919 states)
-unreached in proctype :init:
-       (0 of 26 states)
-unreached in proctype :never:
-       line 1186, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 7.33e+03 seconds
-pan: rate 1403.7352 states/second
-pan: avg transition delay 1.6756e-06 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 1e7da85..0000000
+++ /dev/null
@@ -1,1157 +0,0 @@
-#define READER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.define b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.log
deleted file mode 100644 (file)
index ed8fbc3..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1179)
-depth 7: Claim reached state 9 (line 1184)
-depth 46: Claim reached state 9 (line 1183)
-Depth=    3817 States=    1e+06 Transitions= 2.94e+08 Memory=   492.912        t=    480 R=   2e+03
-Depth=    3900 States=    2e+06 Transitions= 6.63e+08 Memory=   519.572        t= 1.09e+03 R=   2e+03
-Depth=    3900 States=    3e+06 Transitions= 1.33e+09 Memory=   543.986        t= 2.23e+03 R=   1e+03
-pan: resizing hashtable to -w22..  done
-Depth=    3900 States=    4e+06 Transitions= 1.71e+09 Memory=   601.279        t= 2.86e+03 R=   1e+03
-Depth=    3900 States=    5e+06 Transitions= 2.06e+09 Memory=   627.647        t= 3.45e+03 R=   1e+03
-Depth=    3900 States=    6e+06 Transitions= 2.49e+09 Memory=   653.818        t= 4.18e+03 R=   1e+03
-Depth=    3900 States=    7e+06 Transitions= 3.14e+09 Memory=   678.135        t= 5.28e+03 R=   1e+03
-Depth=    3900 States=    8e+06 Transitions= 3.52e+09 Memory=   704.404        t= 5.93e+03 R=   1e+03
-Depth=    3900 States=    9e+06 Transitions= 3.88e+09 Memory=   730.869        t= 6.53e+03 R=   1e+03
-pan: resizing hashtable to -w24..  done
-Depth=    3900 States=    1e+07 Transitions= 4.34e+09 Memory=   880.451        t= 7.29e+03 R=   1e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 3900, errors: 0
-  5638524 states, stored (1.00251e+07 visited)
-4.3347674e+09 states, matched
-4.3447924e+09 transitions (= visited+matched)
-2.5387604e+10 atomic steps
-hash conflicts: 1.1627355e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
-  623.769      equivalent memory usage for states (stored*(State-vector + overhead))
-  295.411      actual memory usage for states (compression: 47.36%)
-               state-vector as stored = 19 byte + 36 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
-  881.037      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 26786 2128 1995 2 2 ]
-unreached in proctype urcu_reader
-       line 268, "pan.___", state 55, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 86, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 102, "(1)"
-       line 249, "pan.___", state 110, "(1)"
-       line 253, "pan.___", state 122, "(1)"
-       line 257, "pan.___", state 130, "(1)"
-       line 404, "pan.___", state 156, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 188, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 202, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 221, "(1)"
-       line 431, "pan.___", state 251, "(1)"
-       line 435, "pan.___", state 264, "(1)"
-       line 614, "pan.___", state 285, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 404, "pan.___", state 292, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 324, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 338, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 357, "(1)"
-       line 431, "pan.___", state 387, "(1)"
-       line 435, "pan.___", state 400, "(1)"
-       line 404, "pan.___", state 421, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 453, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 467, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 486, "(1)"
-       line 431, "pan.___", state 516, "(1)"
-       line 435, "pan.___", state 529, "(1)"
-       line 404, "pan.___", state 552, "cache_dirty_urcu_gp_ctr = 0"
-       line 404, "pan.___", state 554, "(1)"
-       line 404, "pan.___", state 555, "(cache_dirty_urcu_gp_ctr)"
-       line 404, "pan.___", state 555, "else"
-       line 404, "pan.___", state 558, "(1)"
-       line 408, "pan.___", state 566, "cache_dirty_urcu_active_readers = 0"
-       line 408, "pan.___", state 568, "(1)"
-       line 408, "pan.___", state 569, "(cache_dirty_urcu_active_readers)"
-       line 408, "pan.___", state 569, "else"
-       line 408, "pan.___", state 572, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 408, "pan.___", state 573, "(1)"
-       line 406, "pan.___", state 578, "((i<1))"
-       line 406, "pan.___", state 578, "((i>=1))"
-       line 413, "pan.___", state 584, "cache_dirty_rcu_ptr = 0"
-       line 413, "pan.___", state 586, "(1)"
-       line 413, "pan.___", state 587, "(cache_dirty_rcu_ptr)"
-       line 413, "pan.___", state 587, "else"
-       line 413, "pan.___", state 590, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 413, "pan.___", state 591, "(1)"
-       line 417, "pan.___", state 598, "cache_dirty_rcu_data[i] = 0"
-       line 417, "pan.___", state 600, "(1)"
-       line 417, "pan.___", state 601, "(cache_dirty_rcu_data[i])"
-       line 417, "pan.___", state 601, "else"
-       line 417, "pan.___", state 604, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 417, "pan.___", state 605, "(1)"
-       line 415, "pan.___", state 610, "((i<2))"
-       line 415, "pan.___", state 610, "((i>=2))"
-       line 422, "pan.___", state 617, "(1)"
-       line 422, "pan.___", state 618, "(!(cache_dirty_urcu_gp_ctr))"
-       line 422, "pan.___", state 618, "else"
-       line 422, "pan.___", state 621, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 422, "pan.___", state 622, "(1)"
-       line 426, "pan.___", state 630, "(1)"
-       line 426, "pan.___", state 631, "(!(cache_dirty_urcu_active_readers))"
-       line 426, "pan.___", state 631, "else"
-       line 426, "pan.___", state 634, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 426, "pan.___", state 635, "(1)"
-       line 424, "pan.___", state 640, "((i<1))"
-       line 424, "pan.___", state 640, "((i>=1))"
-       line 431, "pan.___", state 647, "(1)"
-       line 431, "pan.___", state 648, "(!(cache_dirty_rcu_ptr))"
-       line 431, "pan.___", state 648, "else"
-       line 431, "pan.___", state 651, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 431, "pan.___", state 652, "(1)"
-       line 435, "pan.___", state 660, "(1)"
-       line 435, "pan.___", state 661, "(!(cache_dirty_rcu_data[i]))"
-       line 435, "pan.___", state 661, "else"
-       line 435, "pan.___", state 664, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 435, "pan.___", state 665, "(1)"
-       line 433, "pan.___", state 670, "((i<2))"
-       line 433, "pan.___", state 670, "((i>=2))"
-       line 443, "pan.___", state 674, "(1)"
-       line 443, "pan.___", state 674, "(1)"
-       line 614, "pan.___", state 677, "cached_urcu_active_readers = (tmp+1)"
-       line 614, "pan.___", state 678, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 614, "pan.___", state 679, "(1)"
-       line 404, "pan.___", state 686, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 718, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 732, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 751, "(1)"
-       line 431, "pan.___", state 781, "(1)"
-       line 435, "pan.___", state 794, "(1)"
-       line 404, "pan.___", state 821, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 853, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 867, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 886, "(1)"
-       line 431, "pan.___", state 916, "(1)"
-       line 435, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 950, "cache_dirty_urcu_gp_ctr = 0"
-       line 413, "pan.___", state 982, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 996, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 1015, "(1)"
-       line 431, "pan.___", state 1045, "(1)"
-       line 435, "pan.___", state 1058, "(1)"
-       line 245, "pan.___", state 1091, "(1)"
-       line 253, "pan.___", state 1111, "(1)"
-       line 257, "pan.___", state 1119, "(1)"
-       line 748, "pan.___", state 1136, "-end-"
-       (91 of 1136 states)
-unreached in proctype urcu_writer
-       line 404, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 422, "pan.___", state 110, "(1)"
-       line 426, "pan.___", state 123, "(1)"
-       line 431, "pan.___", state 140, "(1)"
-       line 268, "pan.___", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 198, "cache_dirty_rcu_ptr = 0"
-       line 404, "pan.___", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 270, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 422, "pan.___", state 303, "(1)"
-       line 426, "pan.___", state 316, "(1)"
-       line 431, "pan.___", state 333, "(1)"
-       line 435, "pan.___", state 346, "(1)"
-       line 408, "pan.___", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 401, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 447, "(1)"
-       line 431, "pan.___", state 464, "(1)"
-       line 435, "pan.___", state 477, "(1)"
-       line 408, "pan.___", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 540, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 586, "(1)"
-       line 431, "pan.___", state 603, "(1)"
-       line 435, "pan.___", state 616, "(1)"
-       line 408, "pan.___", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 669, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 715, "(1)"
-       line 431, "pan.___", state 732, "(1)"
-       line 435, "pan.___", state 745, "(1)"
-       line 408, "pan.___", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 413, "pan.___", state 800, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 426, "pan.___", state 846, "(1)"
-       line 431, "pan.___", state 863, "(1)"
-       line 435, "pan.___", state 876, "(1)"
-       line 268, "pan.___", state 931, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 940, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 955, "(1)"
-       line 280, "pan.___", state 962, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 978, "(1)"
-       line 249, "pan.___", state 986, "(1)"
-       line 253, "pan.___", state 998, "(1)"
-       line 257, "pan.___", state 1006, "(1)"
-       line 268, "pan.___", state 1037, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1046, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1059, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1068, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1084, "(1)"
-       line 249, "pan.___", state 1092, "(1)"
-       line 253, "pan.___", state 1104, "(1)"
-       line 257, "pan.___", state 1112, "(1)"
-       line 272, "pan.___", state 1138, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1151, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1160, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1176, "(1)"
-       line 249, "pan.___", state 1184, "(1)"
-       line 253, "pan.___", state 1196, "(1)"
-       line 257, "pan.___", state 1204, "(1)"
-       line 268, "pan.___", state 1235, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1244, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1257, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1282, "(1)"
-       line 249, "pan.___", state 1290, "(1)"
-       line 253, "pan.___", state 1302, "(1)"
-       line 257, "pan.___", state 1310, "(1)"
-       line 272, "pan.___", state 1336, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1349, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1358, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1374, "(1)"
-       line 249, "pan.___", state 1382, "(1)"
-       line 253, "pan.___", state 1394, "(1)"
-       line 257, "pan.___", state 1402, "(1)"
-       line 268, "pan.___", state 1433, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1442, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1455, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1464, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1480, "(1)"
-       line 249, "pan.___", state 1488, "(1)"
-       line 253, "pan.___", state 1500, "(1)"
-       line 257, "pan.___", state 1508, "(1)"
-       line 272, "pan.___", state 1534, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1547, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1556, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1572, "(1)"
-       line 249, "pan.___", state 1580, "(1)"
-       line 253, "pan.___", state 1592, "(1)"
-       line 257, "pan.___", state 1600, "(1)"
-       line 268, "pan.___", state 1631, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1640, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1653, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1678, "(1)"
-       line 249, "pan.___", state 1686, "(1)"
-       line 253, "pan.___", state 1698, "(1)"
-       line 257, "pan.___", state 1706, "(1)"
-       line 1123, "pan.___", state 1722, "-end-"
-       (103 of 1722 states)
-unreached in proctype :init:
-       (0 of 26 states)
-unreached in proctype :never:
-       line 1186, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 7.3e+03 seconds
-pan: rate 1373.8126 states/second
-pan: avg transition delay 1.6795e-06 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 4f98f45..0000000
+++ /dev/null
@@ -1,1157 +0,0 @@
-#define WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.define b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.log b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index b95b25e..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1180)
-depth 7: Claim reached state 9 (line 1185)
-depth 46: Claim reached state 9 (line 1184)
-pan: acceptance cycle (at depth 3798)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 3956, errors: 1
-   139740 states, stored (233412 visited)
- 43234612 states, matched
- 43468024 transitions (= visited+matched)
-2.3201732e+08 atomic steps
-hash conflicts:    937081 (resolved)
-
-Stats on memory usage (in Megabytes):
-   15.459      equivalent memory usage for states (stored*(State-vector + overhead))
-    7.007      actual memory usage for states (compression: 45.33%)
-               state-vector as stored = 17 byte + 36 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  472.697      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 1001 532 228 2 2 ]
-unreached in proctype urcu_reader
-       line 269, "pan.___", state 55, "cache_dirty_urcu_gp_ctr = 0"
-       line 277, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 281, "pan.___", state 86, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 102, "(1)"
-       line 250, "pan.___", state 110, "(1)"
-       line 254, "pan.___", state 122, "(1)"
-       line 258, "pan.___", state 130, "(1)"
-       line 405, "pan.___", state 156, "cache_dirty_urcu_gp_ctr = 0"
-       line 414, "pan.___", state 188, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 202, "cache_dirty_rcu_data[i] = 0"
-       line 423, "pan.___", state 221, "(1)"
-       line 432, "pan.___", state 251, "(1)"
-       line 436, "pan.___", state 264, "(1)"
-       line 615, "pan.___", state 285, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 405, "pan.___", state 292, "cache_dirty_urcu_gp_ctr = 0"
-       line 414, "pan.___", state 324, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 338, "cache_dirty_rcu_data[i] = 0"
-       line 423, "pan.___", state 357, "(1)"
-       line 432, "pan.___", state 387, "(1)"
-       line 436, "pan.___", state 400, "(1)"
-       line 405, "pan.___", state 421, "cache_dirty_urcu_gp_ctr = 0"
-       line 414, "pan.___", state 453, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 467, "cache_dirty_rcu_data[i] = 0"
-       line 423, "pan.___", state 486, "(1)"
-       line 432, "pan.___", state 516, "(1)"
-       line 436, "pan.___", state 529, "(1)"
-       line 405, "pan.___", state 552, "cache_dirty_urcu_gp_ctr = 0"
-       line 405, "pan.___", state 554, "(1)"
-       line 405, "pan.___", state 555, "(cache_dirty_urcu_gp_ctr)"
-       line 405, "pan.___", state 555, "else"
-       line 405, "pan.___", state 558, "(1)"
-       line 409, "pan.___", state 566, "cache_dirty_urcu_active_readers = 0"
-       line 409, "pan.___", state 568, "(1)"
-       line 409, "pan.___", state 569, "(cache_dirty_urcu_active_readers)"
-       line 409, "pan.___", state 569, "else"
-       line 409, "pan.___", state 572, "(1)"
-       line 409, "pan.___", state 573, "(1)"
-       line 409, "pan.___", state 573, "(1)"
-       line 407, "pan.___", state 578, "((i<1))"
-       line 407, "pan.___", state 578, "((i>=1))"
-       line 414, "pan.___", state 584, "cache_dirty_rcu_ptr = 0"
-       line 414, "pan.___", state 586, "(1)"
-       line 414, "pan.___", state 587, "(cache_dirty_rcu_ptr)"
-       line 414, "pan.___", state 587, "else"
-       line 414, "pan.___", state 590, "(1)"
-       line 414, "pan.___", state 591, "(1)"
-       line 414, "pan.___", state 591, "(1)"
-       line 418, "pan.___", state 598, "cache_dirty_rcu_data[i] = 0"
-       line 418, "pan.___", state 600, "(1)"
-       line 418, "pan.___", state 601, "(cache_dirty_rcu_data[i])"
-       line 418, "pan.___", state 601, "else"
-       line 418, "pan.___", state 604, "(1)"
-       line 418, "pan.___", state 605, "(1)"
-       line 418, "pan.___", state 605, "(1)"
-       line 416, "pan.___", state 610, "((i<2))"
-       line 416, "pan.___", state 610, "((i>=2))"
-       line 423, "pan.___", state 617, "(1)"
-       line 423, "pan.___", state 618, "(!(cache_dirty_urcu_gp_ctr))"
-       line 423, "pan.___", state 618, "else"
-       line 423, "pan.___", state 621, "(1)"
-       line 423, "pan.___", state 622, "(1)"
-       line 423, "pan.___", state 622, "(1)"
-       line 427, "pan.___", state 630, "(1)"
-       line 427, "pan.___", state 631, "(!(cache_dirty_urcu_active_readers))"
-       line 427, "pan.___", state 631, "else"
-       line 427, "pan.___", state 634, "(1)"
-       line 427, "pan.___", state 635, "(1)"
-       line 427, "pan.___", state 635, "(1)"
-       line 425, "pan.___", state 640, "((i<1))"
-       line 425, "pan.___", state 640, "((i>=1))"
-       line 432, "pan.___", state 647, "(1)"
-       line 432, "pan.___", state 648, "(!(cache_dirty_rcu_ptr))"
-       line 432, "pan.___", state 648, "else"
-       line 432, "pan.___", state 651, "(1)"
-       line 432, "pan.___", state 652, "(1)"
-       line 432, "pan.___", state 652, "(1)"
-       line 436, "pan.___", state 660, "(1)"
-       line 436, "pan.___", state 661, "(!(cache_dirty_rcu_data[i]))"
-       line 436, "pan.___", state 661, "else"
-       line 436, "pan.___", state 664, "(1)"
-       line 436, "pan.___", state 665, "(1)"
-       line 436, "pan.___", state 665, "(1)"
-       line 434, "pan.___", state 670, "((i<2))"
-       line 434, "pan.___", state 670, "((i>=2))"
-       line 444, "pan.___", state 674, "(1)"
-       line 444, "pan.___", state 674, "(1)"
-       line 615, "pan.___", state 677, "cached_urcu_active_readers = (tmp+1)"
-       line 615, "pan.___", state 678, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 615, "pan.___", state 679, "(1)"
-       line 405, "pan.___", state 686, "cache_dirty_urcu_gp_ctr = 0"
-       line 414, "pan.___", state 718, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 732, "cache_dirty_rcu_data[i] = 0"
-       line 423, "pan.___", state 751, "(1)"
-       line 432, "pan.___", state 781, "(1)"
-       line 436, "pan.___", state 794, "(1)"
-       line 405, "pan.___", state 821, "cache_dirty_urcu_gp_ctr = 0"
-       line 414, "pan.___", state 853, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 867, "cache_dirty_rcu_data[i] = 0"
-       line 423, "pan.___", state 886, "(1)"
-       line 432, "pan.___", state 916, "(1)"
-       line 436, "pan.___", state 929, "(1)"
-       line 405, "pan.___", state 950, "cache_dirty_urcu_gp_ctr = 0"
-       line 414, "pan.___", state 982, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 996, "cache_dirty_rcu_data[i] = 0"
-       line 423, "pan.___", state 1015, "(1)"
-       line 432, "pan.___", state 1045, "(1)"
-       line 436, "pan.___", state 1058, "(1)"
-       line 246, "pan.___", state 1091, "(1)"
-       line 254, "pan.___", state 1111, "(1)"
-       line 258, "pan.___", state 1119, "(1)"
-       line 749, "pan.___", state 1136, "-end-"
-       (91 of 1136 states)
-unreached in proctype urcu_writer
-       line 405, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 409, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 414, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 423, "pan.___", state 110, "(1)"
-       line 427, "pan.___", state 123, "(1)"
-       line 432, "pan.___", state 140, "(1)"
-       line 269, "pan.___", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 273, "pan.___", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 198, "cache_dirty_rcu_ptr = 0"
-       line 405, "pan.___", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 409, "pan.___", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 414, "pan.___", state 270, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 423, "pan.___", state 303, "(1)"
-       line 427, "pan.___", state 316, "(1)"
-       line 432, "pan.___", state 333, "(1)"
-       line 436, "pan.___", state 346, "(1)"
-       line 409, "pan.___", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 414, "pan.___", state 401, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 427, "pan.___", state 447, "(1)"
-       line 432, "pan.___", state 464, "(1)"
-       line 436, "pan.___", state 477, "(1)"
-       line 405, "pan.___", state 504, "cache_dirty_urcu_gp_ctr = 0"
-       line 405, "pan.___", state 506, "(1)"
-       line 405, "pan.___", state 507, "(cache_dirty_urcu_gp_ctr)"
-       line 405, "pan.___", state 507, "else"
-       line 405, "pan.___", state 510, "(1)"
-       line 409, "pan.___", state 518, "cache_dirty_urcu_active_readers = 0"
-       line 409, "pan.___", state 520, "(1)"
-       line 409, "pan.___", state 521, "(cache_dirty_urcu_active_readers)"
-       line 409, "pan.___", state 521, "else"
-       line 409, "pan.___", state 524, "(1)"
-       line 409, "pan.___", state 525, "(1)"
-       line 409, "pan.___", state 525, "(1)"
-       line 407, "pan.___", state 530, "((i<1))"
-       line 407, "pan.___", state 530, "((i>=1))"
-       line 414, "pan.___", state 536, "cache_dirty_rcu_ptr = 0"
-       line 414, "pan.___", state 538, "(1)"
-       line 414, "pan.___", state 539, "(cache_dirty_rcu_ptr)"
-       line 414, "pan.___", state 539, "else"
-       line 414, "pan.___", state 542, "(1)"
-       line 414, "pan.___", state 543, "(1)"
-       line 414, "pan.___", state 543, "(1)"
-       line 418, "pan.___", state 550, "cache_dirty_rcu_data[i] = 0"
-       line 418, "pan.___", state 552, "(1)"
-       line 418, "pan.___", state 553, "(cache_dirty_rcu_data[i])"
-       line 418, "pan.___", state 553, "else"
-       line 418, "pan.___", state 556, "(1)"
-       line 418, "pan.___", state 557, "(1)"
-       line 418, "pan.___", state 557, "(1)"
-       line 416, "pan.___", state 562, "((i<2))"
-       line 416, "pan.___", state 562, "((i>=2))"
-       line 423, "pan.___", state 569, "(1)"
-       line 423, "pan.___", state 570, "(!(cache_dirty_urcu_gp_ctr))"
-       line 423, "pan.___", state 570, "else"
-       line 423, "pan.___", state 573, "(1)"
-       line 423, "pan.___", state 574, "(1)"
-       line 423, "pan.___", state 574, "(1)"
-       line 427, "pan.___", state 582, "(1)"
-       line 427, "pan.___", state 583, "(!(cache_dirty_urcu_active_readers))"
-       line 427, "pan.___", state 583, "else"
-       line 427, "pan.___", state 586, "(1)"
-       line 427, "pan.___", state 587, "(1)"
-       line 427, "pan.___", state 587, "(1)"
-       line 425, "pan.___", state 592, "((i<1))"
-       line 425, "pan.___", state 592, "((i>=1))"
-       line 432, "pan.___", state 599, "(1)"
-       line 432, "pan.___", state 600, "(!(cache_dirty_rcu_ptr))"
-       line 432, "pan.___", state 600, "else"
-       line 432, "pan.___", state 603, "(1)"
-       line 432, "pan.___", state 604, "(1)"
-       line 432, "pan.___", state 604, "(1)"
-       line 436, "pan.___", state 612, "(1)"
-       line 436, "pan.___", state 613, "(!(cache_dirty_rcu_data[i]))"
-       line 436, "pan.___", state 613, "else"
-       line 436, "pan.___", state 616, "(1)"
-       line 436, "pan.___", state 617, "(1)"
-       line 436, "pan.___", state 617, "(1)"
-       line 444, "pan.___", state 626, "(1)"
-       line 444, "pan.___", state 626, "(1)"
-       line 409, "pan.___", state 646, "cache_dirty_urcu_active_readers = 0"
-       line 414, "pan.___", state 664, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 678, "cache_dirty_rcu_data[i] = 0"
-       line 427, "pan.___", state 710, "(1)"
-       line 432, "pan.___", state 727, "(1)"
-       line 436, "pan.___", state 740, "(1)"
-       line 409, "pan.___", state 775, "cache_dirty_urcu_active_readers = 0"
-       line 414, "pan.___", state 793, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 807, "cache_dirty_rcu_data[i] = 0"
-       line 427, "pan.___", state 839, "(1)"
-       line 432, "pan.___", state 856, "(1)"
-       line 436, "pan.___", state 869, "(1)"
-       line 409, "pan.___", state 906, "cache_dirty_urcu_active_readers = 0"
-       line 414, "pan.___", state 924, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 938, "cache_dirty_rcu_data[i] = 0"
-       line 427, "pan.___", state 970, "(1)"
-       line 432, "pan.___", state 987, "(1)"
-       line 436, "pan.___", state 1000, "(1)"
-       line 409, "pan.___", state 1040, "cache_dirty_urcu_active_readers = 0"
-       line 414, "pan.___", state 1058, "cache_dirty_rcu_ptr = 0"
-       line 418, "pan.___", state 1072, "cache_dirty_rcu_data[i] = 0"
-       line 427, "pan.___", state 1104, "(1)"
-       line 432, "pan.___", state 1121, "(1)"
-       line 436, "pan.___", state 1134, "(1)"
-       line 269, "pan.___", state 1180, "cache_dirty_urcu_gp_ctr = 0"
-       line 273, "pan.___", state 1189, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 1204, "(1)"
-       line 281, "pan.___", state 1211, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1227, "(1)"
-       line 250, "pan.___", state 1235, "(1)"
-       line 254, "pan.___", state 1247, "(1)"
-       line 258, "pan.___", state 1255, "(1)"
-       line 269, "pan.___", state 1286, "cache_dirty_urcu_gp_ctr = 0"
-       line 273, "pan.___", state 1295, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 1308, "cache_dirty_rcu_ptr = 0"
-       line 281, "pan.___", state 1317, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1333, "(1)"
-       line 250, "pan.___", state 1341, "(1)"
-       line 254, "pan.___", state 1353, "(1)"
-       line 258, "pan.___", state 1361, "(1)"
-       line 273, "pan.___", state 1387, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 1400, "cache_dirty_rcu_ptr = 0"
-       line 281, "pan.___", state 1409, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1425, "(1)"
-       line 250, "pan.___", state 1433, "(1)"
-       line 254, "pan.___", state 1445, "(1)"
-       line 258, "pan.___", state 1453, "(1)"
-       line 269, "pan.___", state 1484, "cache_dirty_urcu_gp_ctr = 0"
-       line 273, "pan.___", state 1493, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 1506, "cache_dirty_rcu_ptr = 0"
-       line 281, "pan.___", state 1515, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1531, "(1)"
-       line 250, "pan.___", state 1539, "(1)"
-       line 254, "pan.___", state 1551, "(1)"
-       line 258, "pan.___", state 1559, "(1)"
-       line 1124, "pan.___", state 1575, "-end-"
-       (118 of 1575 states)
-unreached in proctype :init:
-       (0 of 26 states)
-unreached in proctype :never:
-       line 1187, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 67.7 seconds
-pan: rate 3447.2308 states/second
-pan: avg transition delay 1.5577e-06 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-min-progress'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.spin.input b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index 035bdf7..0000000
+++ /dev/null
@@ -1,1158 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN, READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_OUT)
-                               || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE
-                                               | READ_LOCK_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN
-                                               | READ_UNLOCK_OUT, 0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT,              /* post-dominant */
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT,          /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       data_read_first[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi-progress-minimal/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index a8b0188..0000000
+++ /dev/null
@@ -1,3959 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2739
-2:2:1136
-3:2:1141
-4:2:1145
-5:2:1153
-6:2:1157
-7:2:1161
-8:0:2739
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:2739
-16:3:2711
-17:3:2714
-18:3:2719
-19:3:2726
-20:3:2729
-21:3:2733
-22:3:2734
-23:0:2739
-24:3:2736
-25:0:2739
-26:2:1165
-27:0:2739
-28:2:1171
-29:0:2739
-30:2:1172
-31:0:2739
-32:2:1173
-33:0:2739
-34:2:1174
-35:0:2739
-36:2:1175
-37:0:2739
-38:2:1176
-39:2:1177
-40:2:1181
-41:2:1182
-42:2:1190
-43:2:1191
-44:2:1195
-45:2:1196
-46:2:1204
-47:2:1209
-48:2:1213
-49:2:1214
-50:2:1222
-51:2:1223
-52:2:1227
-53:2:1228
-54:2:1222
-55:2:1223
-56:2:1227
-57:2:1228
-58:2:1236
-59:2:1241
-60:2:1242
-61:2:1253
-62:2:1254
-63:2:1255
-64:2:1266
-65:2:1271
-66:2:1272
-67:2:1283
-68:2:1284
-69:2:1285
-70:2:1283
-71:2:1284
-72:2:1285
-73:2:1296
-74:2:1304
-75:0:2739
-76:2:1175
-77:0:2739
-78:2:1308
-79:2:1312
-80:2:1313
-81:2:1317
-82:2:1321
-83:2:1322
-84:2:1326
-85:2:1334
-86:2:1335
-87:2:1339
-88:2:1343
-89:2:1344
-90:2:1339
-91:2:1340
-92:2:1348
-93:0:2739
-94:2:1175
-95:0:2739
-96:2:1356
-97:2:1357
-98:2:1358
-99:0:2739
-100:2:1175
-101:0:2739
-102:2:1363
-103:0:2739
-104:2:2316
-105:2:2317
-106:2:2321
-107:2:2325
-108:2:2326
-109:2:2330
-110:2:2335
-111:2:2343
-112:2:2347
-113:2:2348
-114:2:2343
-115:2:2347
-116:2:2348
-117:2:2352
-118:2:2359
-119:2:2366
-120:2:2367
-121:2:2374
-122:2:2379
-123:2:2386
-124:2:2387
-125:2:2386
-126:2:2387
-127:2:2394
-128:2:2398
-129:0:2739
-130:2:2403
-131:0:2739
-132:2:2404
-133:0:2739
-134:2:2405
-135:0:2739
-136:2:2406
-137:0:2739
-138:1:29
-139:0:2739
-140:1:35
-141:0:2739
-142:1:36
-143:0:2739
-144:2:2407
-145:0:2739
-146:1:37
-147:0:2739
-148:2:2406
-149:0:2739
-150:1:38
-151:0:2739
-152:2:2407
-153:0:2739
-154:1:39
-155:0:2739
-156:1:40
-157:0:2739
-158:1:41
-159:0:2739
-160:2:2406
-161:0:2739
-162:1:42
-163:0:2739
-164:2:2407
-165:0:2739
-166:1:51
-167:0:2739
-168:2:2406
-169:0:2739
-170:1:55
-171:1:56
-172:1:60
-173:1:64
-174:1:65
-175:1:69
-176:1:77
-177:1:78
-178:1:82
-179:1:86
-180:1:87
-181:1:82
-182:1:86
-183:1:87
-184:1:91
-185:1:98
-186:1:105
-187:1:106
-188:1:113
-189:1:118
-190:1:125
-191:1:126
-192:1:125
-193:1:126
-194:1:133
-195:1:137
-196:0:2739
-197:2:2407
-198:0:2739
-199:1:142
-200:0:2739
-201:2:2408
-202:0:2739
-203:2:2413
-204:0:2739
-205:2:2414
-206:0:2739
-207:2:2422
-208:2:2423
-209:2:2427
-210:2:2431
-211:2:2432
-212:2:2436
-213:2:2444
-214:2:2445
-215:2:2449
-216:2:2453
-217:2:2454
-218:2:2449
-219:2:2453
-220:2:2454
-221:2:2458
-222:2:2465
-223:2:2472
-224:2:2473
-225:2:2480
-226:2:2485
-227:2:2492
-228:2:2493
-229:2:2492
-230:2:2493
-231:2:2500
-232:2:2504
-233:0:2739
-234:2:1365
-235:2:2297
-236:0:2739
-237:2:1175
-238:0:2739
-239:2:1366
-240:0:2739
-241:2:1175
-242:0:2739
-243:2:1369
-244:2:1370
-245:2:1374
-246:2:1375
-247:2:1383
-248:2:1384
-249:2:1388
-250:2:1389
-251:2:1397
-252:2:1402
-253:2:1406
-254:2:1407
-255:2:1415
-256:2:1416
-257:2:1420
-258:2:1421
-259:2:1415
-260:2:1416
-261:2:1420
-262:2:1421
-263:2:1429
-264:2:1434
-265:2:1435
-266:2:1446
-267:2:1447
-268:2:1448
-269:2:1459
-270:2:1464
-271:2:1465
-272:2:1476
-273:2:1477
-274:2:1478
-275:2:1476
-276:2:1477
-277:2:1478
-278:2:1489
-279:2:1496
-280:0:2739
-281:2:1175
-282:0:2739
-283:2:1500
-284:2:1501
-285:2:1502
-286:2:1514
-287:2:1515
-288:2:1519
-289:2:1520
-290:2:1528
-291:2:1533
-292:2:1537
-293:2:1538
-294:2:1546
-295:2:1547
-296:2:1551
-297:2:1552
-298:2:1546
-299:2:1547
-300:2:1551
-301:2:1552
-302:2:1560
-303:2:1565
-304:2:1566
-305:2:1577
-306:2:1578
-307:2:1579
-308:2:1590
-309:2:1595
-310:2:1596
-311:2:1607
-312:2:1608
-313:2:1609
-314:2:1607
-315:2:1608
-316:2:1609
-317:2:1620
-318:2:1631
-319:2:1632
-320:0:2739
-321:2:1175
-322:0:2739
-323:2:1763
-324:2:1764
-325:2:1768
-326:2:1769
-327:2:1777
-328:2:1778
-329:2:1782
-330:2:1783
-331:2:1791
-332:2:1796
-333:2:1800
-334:2:1801
-335:2:1809
-336:2:1810
-337:2:1814
-338:2:1815
-339:2:1809
-340:2:1810
-341:2:1814
-342:2:1815
-343:2:1823
-344:2:1828
-345:2:1829
-346:2:1840
-347:2:1841
-348:2:1842
-349:2:1853
-350:2:1858
-351:2:1859
-352:2:1870
-353:2:1871
-354:2:1872
-355:2:1870
-356:2:1871
-357:2:1872
-358:2:1883
-359:0:2739
-360:2:1175
-361:0:2739
-362:2:1892
-363:2:1893
-364:2:1897
-365:2:1898
-366:2:1906
-367:2:1907
-368:2:1911
-369:2:1912
-370:2:1920
-371:2:1925
-372:2:1929
-373:2:1930
-374:2:1938
-375:2:1939
-376:2:1943
-377:2:1944
-378:2:1938
-379:2:1939
-380:2:1943
-381:2:1944
-382:2:1952
-383:2:1957
-384:2:1958
-385:2:1969
-386:2:1970
-387:2:1971
-388:2:1982
-389:2:1987
-390:2:1988
-391:2:1999
-392:2:2000
-393:2:2001
-394:2:1999
-395:2:2000
-396:2:2001
-397:2:2012
-398:2:2019
-399:0:2739
-400:2:1175
-401:0:2739
-402:2:2023
-403:2:2024
-404:2:2025
-405:2:2037
-406:2:2038
-407:2:2042
-408:2:2043
-409:2:2051
-410:2:2056
-411:2:2060
-412:2:2061
-413:2:2069
-414:2:2070
-415:2:2074
-416:2:2075
-417:2:2069
-418:2:2070
-419:2:2074
-420:2:2075
-421:2:2083
-422:2:2088
-423:2:2089
-424:2:2100
-425:2:2101
-426:2:2102
-427:2:2113
-428:2:2118
-429:2:2119
-430:2:2130
-431:2:2131
-432:2:2132
-433:2:2130
-434:2:2131
-435:2:2132
-436:2:2143
-437:2:2153
-438:2:2154
-439:0:2739
-440:2:1175
-441:0:2739
-442:2:2285
-443:0:2739
-444:2:2514
-445:2:2515
-446:2:2519
-447:2:2523
-448:2:2524
-449:2:2528
-450:2:2536
-451:2:2537
-452:2:2541
-453:2:2545
-454:2:2546
-455:2:2541
-456:2:2545
-457:2:2546
-458:2:2550
-459:2:2557
-460:2:2564
-461:2:2565
-462:2:2572
-463:2:2577
-464:2:2584
-465:2:2585
-466:2:2584
-467:2:2585
-468:2:2592
-469:2:2596
-470:0:2739
-471:2:2601
-472:0:2739
-473:2:2602
-474:0:2739
-475:2:2603
-476:0:2739
-477:2:2604
-478:0:2739
-479:1:51
-480:0:2739
-481:2:2605
-482:0:2739
-483:1:55
-484:1:56
-485:1:60
-486:1:64
-487:1:65
-488:1:69
-489:1:77
-490:1:78
-491:1:82
-492:1:86
-493:1:87
-494:1:82
-495:1:86
-496:1:87
-497:1:91
-498:1:98
-499:1:105
-500:1:106
-501:1:113
-502:1:118
-503:1:125
-504:1:126
-505:1:125
-506:1:126
-507:1:133
-508:1:137
-509:0:2739
-510:2:2604
-511:0:2739
-512:1:142
-513:0:2739
-514:2:2605
-515:0:2739
-516:2:2606
-517:0:2739
-518:2:2611
-519:0:2739
-520:2:2612
-521:0:2739
-522:2:2620
-523:2:2621
-524:2:2625
-525:2:2629
-526:2:2630
-527:2:2634
-528:2:2642
-529:2:2643
-530:2:2647
-531:2:2651
-532:2:2652
-533:2:2647
-534:2:2651
-535:2:2652
-536:2:2656
-537:2:2663
-538:2:2670
-539:2:2671
-540:2:2678
-541:2:2683
-542:2:2690
-543:2:2691
-544:2:2690
-545:2:2691
-546:2:2698
-547:2:2702
-548:0:2739
-549:2:2287
-550:2:2297
-551:0:2739
-552:2:1175
-553:0:2739
-554:2:2288
-555:2:2289
-556:0:2739
-557:2:1175
-558:0:2739
-559:2:2293
-560:0:2739
-561:2:2301
-562:0:2739
-563:2:1172
-564:0:2739
-565:2:1173
-566:0:2739
-567:2:1174
-568:0:2739
-569:2:1175
-570:0:2739
-571:2:1176
-572:2:1177
-573:2:1181
-574:2:1182
-575:2:1190
-576:2:1191
-577:2:1195
-578:2:1196
-579:2:1204
-580:2:1209
-581:2:1213
-582:2:1214
-583:2:1222
-584:2:1223
-585:2:1224
-586:2:1222
-587:2:1223
-588:2:1227
-589:2:1228
-590:2:1236
-591:2:1241
-592:2:1242
-593:2:1253
-594:2:1254
-595:2:1255
-596:2:1266
-597:2:1271
-598:2:1272
-599:2:1283
-600:2:1284
-601:2:1285
-602:2:1283
-603:2:1284
-604:2:1285
-605:2:1296
-606:2:1304
-607:0:2739
-608:2:1175
-609:0:2739
-610:2:1308
-611:2:1312
-612:2:1313
-613:2:1317
-614:2:1321
-615:2:1322
-616:2:1326
-617:2:1334
-618:2:1335
-619:2:1339
-620:2:1340
-621:2:1339
-622:2:1343
-623:2:1344
-624:2:1348
-625:0:2739
-626:2:1175
-627:0:2739
-628:2:1356
-629:2:1357
-630:2:1358
-631:0:2739
-632:2:1175
-633:0:2739
-634:2:1363
-635:0:2739
-636:2:2316
-637:2:2317
-638:2:2321
-639:2:2325
-640:2:2326
-641:2:2330
-642:2:2335
-643:2:2343
-644:2:2347
-645:2:2348
-646:2:2343
-647:2:2347
-648:2:2348
-649:2:2352
-650:2:2359
-651:2:2366
-652:2:2367
-653:2:2374
-654:2:2379
-655:2:2386
-656:2:2387
-657:2:2386
-658:2:2387
-659:2:2394
-660:2:2398
-661:0:2739
-662:2:2403
-663:0:2739
-664:2:2404
-665:0:2739
-666:2:2405
-667:0:2739
-668:2:2406
-669:0:2739
-670:1:51
-671:0:2739
-672:2:2407
-673:0:2739
-674:1:55
-675:1:56
-676:1:60
-677:1:64
-678:1:65
-679:1:69
-680:1:77
-681:1:78
-682:1:82
-683:1:86
-684:1:87
-685:1:82
-686:1:86
-687:1:87
-688:1:91
-689:1:98
-690:1:105
-691:1:106
-692:1:113
-693:1:118
-694:1:125
-695:1:126
-696:1:125
-697:1:126
-698:1:133
-699:1:137
-700:0:2739
-701:2:2406
-702:0:2739
-703:1:142
-704:0:2739
-705:2:2407
-706:0:2739
-707:2:2408
-708:0:2739
-709:2:2413
-710:0:2739
-711:2:2414
-712:0:2739
-713:2:2422
-714:2:2423
-715:2:2427
-716:2:2431
-717:2:2432
-718:2:2436
-719:2:2444
-720:2:2445
-721:2:2449
-722:2:2453
-723:2:2454
-724:2:2449
-725:2:2453
-726:2:2454
-727:2:2458
-728:2:2465
-729:2:2472
-730:2:2473
-731:2:2480
-732:2:2485
-733:2:2492
-734:2:2493
-735:2:2492
-736:2:2493
-737:2:2500
-738:2:2504
-739:0:2739
-740:2:1365
-741:2:2297
-742:0:2739
-743:2:1175
-744:0:2739
-745:2:1366
-746:0:2739
-747:2:1175
-748:0:2739
-749:2:1369
-750:2:1370
-751:2:1374
-752:2:1375
-753:2:1383
-754:2:1384
-755:2:1388
-756:2:1389
-757:2:1397
-758:2:1402
-759:2:1406
-760:2:1407
-761:2:1415
-762:2:1416
-763:2:1420
-764:2:1421
-765:2:1415
-766:2:1416
-767:2:1420
-768:2:1421
-769:2:1429
-770:2:1434
-771:2:1435
-772:2:1446
-773:2:1447
-774:2:1448
-775:2:1459
-776:2:1464
-777:2:1465
-778:2:1476
-779:2:1477
-780:2:1478
-781:2:1476
-782:2:1477
-783:2:1478
-784:2:1489
-785:2:1496
-786:0:2739
-787:2:1175
-788:0:2739
-789:2:1500
-790:2:1501
-791:2:1502
-792:2:1514
-793:2:1515
-794:2:1519
-795:2:1520
-796:2:1528
-797:2:1533
-798:2:1537
-799:2:1538
-800:2:1546
-801:2:1547
-802:2:1551
-803:2:1552
-804:2:1546
-805:2:1547
-806:2:1551
-807:2:1552
-808:2:1560
-809:2:1565
-810:2:1566
-811:2:1577
-812:2:1578
-813:2:1579
-814:2:1590
-815:2:1595
-816:2:1596
-817:2:1607
-818:2:1608
-819:2:1609
-820:2:1607
-821:2:1608
-822:2:1609
-823:2:1620
-824:2:1631
-825:2:1632
-826:0:2739
-827:2:1175
-828:0:2739
-829:2:1763
-830:2:1764
-831:2:1768
-832:2:1769
-833:2:1777
-834:2:1778
-835:2:1782
-836:2:1783
-837:2:1791
-838:2:1796
-839:2:1800
-840:2:1801
-841:2:1809
-842:2:1810
-843:2:1814
-844:2:1815
-845:2:1809
-846:2:1810
-847:2:1814
-848:2:1815
-849:2:1823
-850:2:1828
-851:2:1829
-852:2:1840
-853:2:1841
-854:2:1842
-855:2:1853
-856:2:1858
-857:2:1859
-858:2:1870
-859:2:1871
-860:2:1872
-861:2:1870
-862:2:1871
-863:2:1872
-864:2:1883
-865:0:2739
-866:2:1175
-867:0:2739
-868:2:1892
-869:2:1893
-870:2:1897
-871:2:1898
-872:2:1906
-873:2:1907
-874:2:1911
-875:2:1912
-876:2:1920
-877:2:1925
-878:2:1929
-879:2:1930
-880:2:1938
-881:2:1939
-882:2:1943
-883:2:1944
-884:2:1938
-885:2:1939
-886:2:1943
-887:2:1944
-888:2:1952
-889:2:1957
-890:2:1958
-891:2:1969
-892:2:1970
-893:2:1971
-894:2:1982
-895:2:1987
-896:2:1988
-897:2:1999
-898:2:2000
-899:2:2001
-900:2:1999
-901:2:2000
-902:2:2001
-903:2:2012
-904:2:2019
-905:0:2739
-906:2:1175
-907:0:2739
-908:2:2023
-909:2:2024
-910:2:2025
-911:2:2037
-912:2:2038
-913:2:2042
-914:2:2043
-915:2:2051
-916:2:2056
-917:2:2060
-918:2:2061
-919:2:2069
-920:2:2070
-921:2:2074
-922:2:2075
-923:2:2069
-924:2:2070
-925:2:2074
-926:2:2075
-927:2:2083
-928:2:2088
-929:2:2089
-930:2:2100
-931:2:2101
-932:2:2102
-933:2:2113
-934:2:2118
-935:2:2119
-936:2:2130
-937:2:2131
-938:2:2132
-939:2:2130
-940:2:2131
-941:2:2132
-942:2:2143
-943:2:2153
-944:2:2154
-945:0:2739
-946:2:1175
-947:0:2739
-948:2:2285
-949:0:2739
-950:2:2514
-951:2:2515
-952:2:2519
-953:2:2523
-954:2:2524
-955:2:2528
-956:2:2536
-957:2:2537
-958:2:2541
-959:2:2545
-960:2:2546
-961:2:2541
-962:2:2545
-963:2:2546
-964:2:2550
-965:2:2557
-966:2:2564
-967:2:2565
-968:2:2572
-969:2:2577
-970:2:2584
-971:2:2585
-972:2:2584
-973:2:2585
-974:2:2592
-975:2:2596
-976:0:2739
-977:2:2601
-978:0:2739
-979:2:2602
-980:0:2739
-981:2:2603
-982:0:2739
-983:2:2604
-984:0:2739
-985:1:51
-986:0:2739
-987:2:2605
-988:0:2739
-989:1:55
-990:1:56
-991:1:60
-992:1:64
-993:1:65
-994:1:69
-995:1:77
-996:1:78
-997:1:82
-998:1:86
-999:1:87
-1000:1:82
-1001:1:86
-1002:1:87
-1003:1:91
-1004:1:98
-1005:1:105
-1006:1:106
-1007:1:113
-1008:1:118
-1009:1:125
-1010:1:126
-1011:1:125
-1012:1:126
-1013:1:133
-1014:1:137
-1015:0:2739
-1016:2:2604
-1017:0:2739
-1018:1:142
-1019:0:2739
-1020:2:2605
-1021:0:2739
-1022:2:2606
-1023:0:2739
-1024:2:2611
-1025:0:2739
-1026:2:2612
-1027:0:2739
-1028:2:2620
-1029:2:2621
-1030:2:2625
-1031:2:2629
-1032:2:2630
-1033:2:2634
-1034:2:2642
-1035:2:2643
-1036:2:2647
-1037:2:2651
-1038:2:2652
-1039:2:2647
-1040:2:2651
-1041:2:2652
-1042:2:2656
-1043:2:2663
-1044:2:2670
-1045:2:2671
-1046:2:2678
-1047:2:2683
-1048:2:2690
-1049:2:2691
-1050:2:2690
-1051:2:2691
-1052:2:2698
-1053:2:2702
-1054:0:2739
-1055:2:2287
-1056:2:2297
-1057:0:2739
-1058:2:1175
-1059:0:2739
-1060:2:2288
-1061:2:2289
-1062:0:2739
-1063:2:1175
-1064:0:2739
-1065:2:2293
-1066:0:2739
-1067:2:2301
-1068:0:2739
-1069:2:1172
-1070:0:2739
-1071:2:1173
-1072:0:2739
-1073:2:1174
-1074:0:2739
-1075:2:1175
-1076:0:2739
-1077:2:1176
-1078:2:1177
-1079:2:1181
-1080:2:1182
-1081:2:1190
-1082:2:1191
-1083:2:1195
-1084:2:1196
-1085:2:1204
-1086:2:1209
-1087:2:1213
-1088:2:1214
-1089:2:1222
-1090:2:1223
-1091:2:1227
-1092:2:1228
-1093:2:1222
-1094:2:1223
-1095:2:1224
-1096:2:1236
-1097:2:1241
-1098:2:1242
-1099:2:1253
-1100:2:1254
-1101:2:1255
-1102:2:1266
-1103:2:1271
-1104:2:1272
-1105:2:1283
-1106:2:1284
-1107:2:1285
-1108:2:1283
-1109:2:1284
-1110:2:1285
-1111:2:1296
-1112:2:1304
-1113:0:2739
-1114:2:1175
-1115:0:2739
-1116:2:1308
-1117:2:1312
-1118:2:1313
-1119:2:1317
-1120:2:1321
-1121:2:1322
-1122:2:1326
-1123:2:1334
-1124:2:1335
-1125:2:1339
-1126:2:1343
-1127:2:1344
-1128:2:1339
-1129:2:1340
-1130:2:1348
-1131:0:2739
-1132:2:1175
-1133:0:2739
-1134:2:1356
-1135:2:1357
-1136:2:1358
-1137:0:2739
-1138:2:1175
-1139:0:2739
-1140:2:1363
-1141:0:2739
-1142:2:2316
-1143:2:2317
-1144:2:2321
-1145:2:2325
-1146:2:2326
-1147:2:2330
-1148:2:2335
-1149:2:2343
-1150:2:2347
-1151:2:2348
-1152:2:2343
-1153:2:2347
-1154:2:2348
-1155:2:2352
-1156:2:2359
-1157:2:2366
-1158:2:2367
-1159:2:2374
-1160:2:2379
-1161:2:2386
-1162:2:2387
-1163:2:2386
-1164:2:2387
-1165:2:2394
-1166:2:2398
-1167:0:2739
-1168:2:2403
-1169:0:2739
-1170:2:2404
-1171:0:2739
-1172:2:2405
-1173:0:2739
-1174:2:2406
-1175:0:2739
-1176:1:51
-1177:0:2739
-1178:2:2407
-1179:0:2739
-1180:1:55
-1181:1:56
-1182:1:60
-1183:1:64
-1184:1:65
-1185:1:69
-1186:1:77
-1187:1:78
-1188:1:82
-1189:1:86
-1190:1:87
-1191:1:82
-1192:1:86
-1193:1:87
-1194:1:91
-1195:1:98
-1196:1:105
-1197:1:106
-1198:1:113
-1199:1:118
-1200:1:125
-1201:1:126
-1202:1:125
-1203:1:126
-1204:1:133
-1205:1:137
-1206:0:2739
-1207:2:2406
-1208:0:2739
-1209:1:142
-1210:0:2739
-1211:2:2407
-1212:0:2739
-1213:2:2408
-1214:0:2739
-1215:2:2413
-1216:0:2739
-1217:2:2414
-1218:0:2739
-1219:2:2422
-1220:2:2423
-1221:2:2427
-1222:2:2431
-1223:2:2432
-1224:2:2436
-1225:2:2444
-1226:2:2445
-1227:2:2449
-1228:2:2453
-1229:2:2454
-1230:2:2449
-1231:2:2453
-1232:2:2454
-1233:2:2458
-1234:2:2465
-1235:2:2472
-1236:2:2473
-1237:2:2480
-1238:2:2485
-1239:2:2492
-1240:2:2493
-1241:2:2492
-1242:2:2493
-1243:2:2500
-1244:2:2504
-1245:0:2739
-1246:2:1365
-1247:2:2297
-1248:0:2739
-1249:2:1175
-1250:0:2739
-1251:2:1366
-1252:0:2739
-1253:2:1175
-1254:0:2739
-1255:2:1369
-1256:2:1370
-1257:2:1374
-1258:2:1375
-1259:2:1383
-1260:2:1384
-1261:2:1388
-1262:2:1389
-1263:2:1397
-1264:2:1402
-1265:2:1406
-1266:2:1407
-1267:2:1415
-1268:2:1416
-1269:2:1420
-1270:2:1421
-1271:2:1415
-1272:2:1416
-1273:2:1420
-1274:2:1421
-1275:2:1429
-1276:2:1434
-1277:2:1435
-1278:2:1446
-1279:2:1447
-1280:2:1448
-1281:2:1459
-1282:2:1464
-1283:2:1465
-1284:2:1476
-1285:2:1477
-1286:2:1478
-1287:2:1476
-1288:2:1477
-1289:2:1478
-1290:2:1489
-1291:2:1496
-1292:0:2739
-1293:2:1175
-1294:0:2739
-1295:2:1500
-1296:2:1501
-1297:2:1502
-1298:2:1514
-1299:2:1515
-1300:2:1519
-1301:2:1520
-1302:2:1528
-1303:2:1533
-1304:2:1537
-1305:2:1538
-1306:2:1546
-1307:2:1547
-1308:2:1551
-1309:2:1552
-1310:2:1546
-1311:2:1547
-1312:2:1551
-1313:2:1552
-1314:2:1560
-1315:2:1565
-1316:2:1566
-1317:2:1577
-1318:2:1578
-1319:2:1579
-1320:2:1590
-1321:2:1595
-1322:2:1596
-1323:2:1607
-1324:2:1608
-1325:2:1609
-1326:2:1607
-1327:2:1608
-1328:2:1609
-1329:2:1620
-1330:2:1631
-1331:2:1632
-1332:0:2739
-1333:2:1175
-1334:0:2739
-1335:2:1763
-1336:2:1764
-1337:2:1768
-1338:2:1769
-1339:2:1777
-1340:2:1778
-1341:2:1782
-1342:2:1783
-1343:2:1791
-1344:2:1796
-1345:2:1800
-1346:2:1801
-1347:2:1809
-1348:2:1810
-1349:2:1814
-1350:2:1815
-1351:2:1809
-1352:2:1810
-1353:2:1814
-1354:2:1815
-1355:2:1823
-1356:2:1828
-1357:2:1829
-1358:2:1840
-1359:2:1841
-1360:2:1842
-1361:2:1853
-1362:2:1858
-1363:2:1859
-1364:2:1870
-1365:2:1871
-1366:2:1872
-1367:2:1870
-1368:2:1871
-1369:2:1872
-1370:2:1883
-1371:0:2739
-1372:2:1175
-1373:0:2739
-1374:2:1892
-1375:2:1893
-1376:2:1897
-1377:2:1898
-1378:2:1906
-1379:2:1907
-1380:2:1911
-1381:2:1912
-1382:2:1920
-1383:2:1925
-1384:2:1929
-1385:2:1930
-1386:2:1938
-1387:2:1939
-1388:2:1943
-1389:2:1944
-1390:2:1938
-1391:2:1939
-1392:2:1943
-1393:2:1944
-1394:2:1952
-1395:2:1957
-1396:2:1958
-1397:2:1969
-1398:2:1970
-1399:2:1971
-1400:2:1982
-1401:2:1987
-1402:2:1988
-1403:2:1999
-1404:2:2000
-1405:2:2001
-1406:2:1999
-1407:2:2000
-1408:2:2001
-1409:2:2012
-1410:2:2019
-1411:0:2739
-1412:2:1175
-1413:0:2739
-1414:1:143
-1415:0:2739
-1416:1:145
-1417:0:2739
-1418:1:44
-1419:0:2739
-1420:1:151
-1421:1:152
-1422:1:156
-1423:1:157
-1424:1:165
-1425:1:166
-1426:1:170
-1427:1:171
-1428:1:179
-1429:1:184
-1430:1:188
-1431:1:189
-1432:1:197
-1433:1:198
-1434:1:202
-1435:1:203
-1436:1:197
-1437:1:198
-1438:1:202
-1439:1:203
-1440:1:211
-1441:1:216
-1442:1:217
-1443:1:228
-1444:1:229
-1445:1:230
-1446:1:241
-1447:1:246
-1448:1:247
-1449:1:258
-1450:1:259
-1451:1:260
-1452:1:258
-1453:1:259
-1454:1:260
-1455:1:271
-1456:0:2739
-1457:1:40
-1458:0:2739
-1459:1:41
-1460:0:2739
-1461:1:42
-1462:0:2739
-1463:1:143
-1464:0:2739
-1465:1:145
-1466:0:2739
-1467:1:44
-1468:0:2739
-1469:1:280
-1470:1:281
-1471:0:2739
-1472:1:40
-1473:0:2739
-1474:1:41
-1475:0:2739
-1476:1:42
-1477:0:2739
-1478:1:143
-1479:0:2739
-1480:1:145
-1481:0:2739
-1482:1:44
-1483:0:2739
-1484:1:287
-1485:1:288
-1486:1:292
-1487:1:293
-1488:1:301
-1489:1:302
-1490:1:306
-1491:1:307
-1492:1:315
-1493:1:320
-1494:1:324
-1495:1:325
-1496:1:333
-1497:1:334
-1498:1:338
-1499:1:339
-1500:1:333
-1501:1:334
-1502:1:338
-1503:1:339
-1504:1:347
-1505:1:352
-1506:1:353
-1507:1:364
-1508:1:365
-1509:1:366
-1510:1:377
-1511:1:382
-1512:1:383
-1513:1:394
-1514:1:395
-1515:1:396
-1516:1:394
-1517:1:395
-1518:1:396
-1519:1:407
-1520:0:2739
-1521:1:40
-1522:0:2739
-1523:1:41
-1524:0:2739
-1525:1:42
-1526:0:2739
-1527:1:143
-1528:0:2739
-1529:1:145
-1530:0:2739
-1531:1:44
-1532:0:2739
-1533:1:416
-1534:1:417
-1535:1:421
-1536:1:422
-1537:1:430
-1538:1:431
-1539:1:435
-1540:1:436
-1541:1:444
-1542:1:449
-1543:1:453
-1544:1:454
-1545:1:462
-1546:1:463
-1547:1:467
-1548:1:468
-1549:1:462
-1550:1:463
-1551:1:467
-1552:1:468
-1553:1:476
-1554:1:481
-1555:1:482
-1556:1:493
-1557:1:494
-1558:1:495
-1559:1:506
-1560:1:511
-1561:1:512
-1562:1:523
-1563:1:524
-1564:1:525
-1565:1:523
-1566:1:524
-1567:1:525
-1568:1:536
-1569:1:543
-1570:0:2739
-1571:1:40
-1572:0:2739
-1573:1:41
-1574:0:2739
-1575:1:42
-1576:0:2739
-1577:1:143
-1578:0:2739
-1579:1:145
-1580:0:2739
-1581:1:44
-1582:0:2739
-1583:1:681
-1584:1:682
-1585:1:686
-1586:1:687
-1587:1:695
-1588:1:696
-1589:1:697
-1590:1:709
-1591:1:714
-1592:1:718
-1593:1:719
-1594:1:727
-1595:1:728
-1596:1:732
-1597:1:733
-1598:1:727
-1599:1:728
-1600:1:732
-1601:1:733
-1602:1:741
-1603:1:746
-1604:1:747
-1605:1:758
-1606:1:759
-1607:1:760
-1608:1:771
-1609:1:776
-1610:1:777
-1611:1:788
-1612:1:789
-1613:1:790
-1614:1:788
-1615:1:789
-1616:1:790
-1617:1:801
-1618:0:2739
-1619:1:40
-1620:0:2739
-1621:1:41
-1622:0:2739
-1623:2:2023
-1624:2:2024
-1625:2:2025
-1626:2:2037
-1627:2:2038
-1628:2:2042
-1629:2:2043
-1630:2:2051
-1631:2:2056
-1632:2:2060
-1633:2:2061
-1634:2:2069
-1635:2:2070
-1636:2:2074
-1637:2:2075
-1638:2:2069
-1639:2:2070
-1640:2:2074
-1641:2:2075
-1642:2:2083
-1643:2:2088
-1644:2:2089
-1645:2:2100
-1646:2:2101
-1647:2:2102
-1648:2:2113
-1649:2:2118
-1650:2:2119
-1651:2:2130
-1652:2:2131
-1653:2:2132
-1654:2:2130
-1655:2:2131
-1656:2:2132
-1657:2:2143
-1658:2:2151
-1659:0:2739
-1660:2:1175
-1661:0:2739
-1662:2:2157
-1663:2:2158
-1664:2:2162
-1665:2:2163
-1666:2:2171
-1667:2:2172
-1668:2:2176
-1669:2:2177
-1670:2:2185
-1671:2:2190
-1672:2:2194
-1673:2:2195
-1674:2:2203
-1675:2:2204
-1676:2:2208
-1677:2:2209
-1678:2:2203
-1679:2:2204
-1680:2:2208
-1681:2:2209
-1682:2:2217
-1683:2:2222
-1684:2:2223
-1685:2:2234
-1686:2:2235
-1687:2:2236
-1688:2:2247
-1689:2:2252
-1690:2:2253
-1691:2:2264
-1692:2:2265
-1693:2:2266
-1694:2:2264
-1695:2:2265
-1696:2:2266
-1697:2:2277
-1698:0:2739
-1699:2:1175
-1700:0:2739
-1701:1:42
-1702:0:2739
-1703:2:2023
-1704:2:2024
-1705:2:2028
-1706:2:2029
-1707:2:2037
-1708:2:2038
-1709:2:2042
-1710:2:2043
-1711:2:2051
-1712:2:2056
-1713:2:2060
-1714:2:2061
-1715:2:2069
-1716:2:2070
-1717:2:2074
-1718:2:2075
-1719:2:2069
-1720:2:2070
-1721:2:2074
-1722:2:2075
-1723:2:2083
-1724:2:2088
-1725:2:2089
-1726:2:2100
-1727:2:2101
-1728:2:2102
-1729:2:2113
-1730:2:2118
-1731:2:2119
-1732:2:2130
-1733:2:2131
-1734:2:2132
-1735:2:2130
-1736:2:2131
-1737:2:2132
-1738:2:2143
-1739:2:2151
-1740:0:2739
-1741:2:1175
-1742:0:2739
-1743:2:2157
-1744:2:2158
-1745:2:2162
-1746:2:2163
-1747:2:2171
-1748:2:2172
-1749:2:2176
-1750:2:2177
-1751:2:2185
-1752:2:2190
-1753:2:2194
-1754:2:2195
-1755:2:2203
-1756:2:2204
-1757:2:2208
-1758:2:2209
-1759:2:2203
-1760:2:2204
-1761:2:2208
-1762:2:2209
-1763:2:2217
-1764:2:2222
-1765:2:2223
-1766:2:2234
-1767:2:2235
-1768:2:2236
-1769:2:2247
-1770:2:2252
-1771:2:2253
-1772:2:2264
-1773:2:2265
-1774:2:2266
-1775:2:2264
-1776:2:2265
-1777:2:2266
-1778:2:2277
-1779:0:2739
-1780:1:143
-1781:0:2739
-1782:2:1175
-1783:0:2739
-1784:2:2023
-1785:2:2024
-1786:2:2028
-1787:2:2029
-1788:2:2037
-1789:2:2038
-1790:2:2042
-1791:2:2043
-1792:2:2051
-1793:2:2056
-1794:2:2060
-1795:2:2061
-1796:2:2069
-1797:2:2070
-1798:2:2074
-1799:2:2075
-1800:2:2069
-1801:2:2070
-1802:2:2074
-1803:2:2075
-1804:2:2083
-1805:2:2088
-1806:2:2089
-1807:2:2100
-1808:2:2101
-1809:2:2102
-1810:2:2113
-1811:2:2118
-1812:2:2119
-1813:2:2130
-1814:2:2131
-1815:2:2132
-1816:2:2130
-1817:2:2131
-1818:2:2132
-1819:2:2143
-1820:2:2151
-1821:0:2739
-1822:2:1175
-1823:0:2739
-1824:1:145
-1825:0:2739
-1826:2:2157
-1827:2:2158
-1828:2:2162
-1829:2:2163
-1830:2:2171
-1831:2:2172
-1832:2:2176
-1833:2:2177
-1834:2:2185
-1835:2:2190
-1836:2:2194
-1837:2:2195
-1838:2:2203
-1839:2:2204
-1840:2:2208
-1841:2:2209
-1842:2:2203
-1843:2:2204
-1844:2:2208
-1845:2:2209
-1846:2:2217
-1847:2:2222
-1848:2:2223
-1849:2:2234
-1850:2:2235
-1851:2:2236
-1852:2:2247
-1853:2:2252
-1854:2:2253
-1855:2:2264
-1856:2:2265
-1857:2:2266
-1858:2:2264
-1859:2:2265
-1860:2:2266
-1861:2:2277
-1862:0:2739
-1863:2:1175
-1864:0:2739
-1865:2:2023
-1866:2:2024
-1867:2:2028
-1868:2:2029
-1869:2:2037
-1870:2:2038
-1871:2:2042
-1872:2:2043
-1873:2:2051
-1874:2:2056
-1875:2:2060
-1876:2:2061
-1877:2:2069
-1878:2:2070
-1879:2:2074
-1880:2:2075
-1881:2:2069
-1882:2:2070
-1883:2:2074
-1884:2:2075
-1885:2:2083
-1886:2:2088
-1887:2:2089
-1888:2:2100
-1889:2:2101
-1890:2:2102
-1891:2:2113
-1892:2:2118
-1893:2:2119
-1894:2:2130
-1895:2:2131
-1896:2:2132
-1897:2:2130
-1898:2:2131
-1899:2:2132
-1900:2:2143
-1901:2:2151
-1902:0:2739
-1903:1:44
-1904:0:2739
-1905:2:1175
-1906:0:2739
-1907:2:2157
-1908:2:2158
-1909:2:2162
-1910:2:2163
-1911:2:2171
-1912:2:2172
-1913:2:2176
-1914:2:2177
-1915:2:2185
-1916:2:2190
-1917:2:2194
-1918:2:2195
-1919:2:2203
-1920:2:2204
-1921:2:2208
-1922:2:2209
-1923:2:2203
-1924:2:2204
-1925:2:2208
-1926:2:2209
-1927:2:2217
-1928:2:2222
-1929:2:2223
-1930:2:2234
-1931:2:2235
-1932:2:2236
-1933:2:2247
-1934:2:2252
-1935:2:2253
-1936:2:2264
-1937:2:2265
-1938:2:2266
-1939:2:2264
-1940:2:2265
-1941:2:2266
-1942:2:2277
-1943:0:2739
-1944:2:1175
-1945:0:2739
-1946:1:810
-1947:0:2739
-1948:2:2023
-1949:2:2024
-1950:2:2028
-1951:2:2029
-1952:2:2037
-1953:2:2038
-1954:2:2042
-1955:2:2043
-1956:2:2051
-1957:2:2056
-1958:2:2060
-1959:2:2061
-1960:2:2069
-1961:2:2070
-1962:2:2074
-1963:2:2075
-1964:2:2069
-1965:2:2070
-1966:2:2074
-1967:2:2075
-1968:2:2083
-1969:2:2088
-1970:2:2089
-1971:2:2100
-1972:2:2101
-1973:2:2102
-1974:2:2113
-1975:2:2118
-1976:2:2119
-1977:2:2130
-1978:2:2131
-1979:2:2132
-1980:2:2130
-1981:2:2131
-1982:2:2132
-1983:2:2143
-1984:2:2151
-1985:0:2739
-1986:2:1175
-1987:0:2739
-1988:2:2157
-1989:2:2158
-1990:2:2162
-1991:2:2163
-1992:2:2171
-1993:2:2172
-1994:2:2176
-1995:2:2177
-1996:2:2185
-1997:2:2190
-1998:2:2194
-1999:2:2195
-2000:2:2203
-2001:2:2204
-2002:2:2208
-2003:2:2209
-2004:2:2203
-2005:2:2204
-2006:2:2208
-2007:2:2209
-2008:2:2217
-2009:2:2222
-2010:2:2223
-2011:2:2234
-2012:2:2235
-2013:2:2236
-2014:2:2247
-2015:2:2252
-2016:2:2253
-2017:2:2264
-2018:2:2265
-2019:2:2266
-2020:2:2264
-2021:2:2265
-2022:2:2266
-2023:2:2277
-2024:0:2739
-2025:1:1087
-2026:1:1094
-2027:1:1095
-2028:1:1102
-2029:1:1107
-2030:1:1114
-2031:1:1115
-2032:1:1114
-2033:1:1115
-2034:1:1122
-2035:1:1126
-2036:0:2739
-2037:2:1175
-2038:0:2739
-2039:2:2023
-2040:2:2024
-2041:2:2028
-2042:2:2029
-2043:2:2037
-2044:2:2038
-2045:2:2042
-2046:2:2043
-2047:2:2051
-2048:2:2056
-2049:2:2060
-2050:2:2061
-2051:2:2069
-2052:2:2070
-2053:2:2074
-2054:2:2075
-2055:2:2069
-2056:2:2070
-2057:2:2074
-2058:2:2075
-2059:2:2083
-2060:2:2088
-2061:2:2089
-2062:2:2100
-2063:2:2101
-2064:2:2102
-2065:2:2113
-2066:2:2118
-2067:2:2119
-2068:2:2130
-2069:2:2131
-2070:2:2132
-2071:2:2130
-2072:2:2131
-2073:2:2132
-2074:2:2143
-2075:2:2151
-2076:0:2739
-2077:2:1175
-2078:0:2739
-2079:1:812
-2080:1:813
-2081:0:2739
-2082:1:40
-2083:0:2739
-2084:1:41
-2085:0:2739
-2086:2:2157
-2087:2:2158
-2088:2:2162
-2089:2:2163
-2090:2:2171
-2091:2:2172
-2092:2:2176
-2093:2:2177
-2094:2:2185
-2095:2:2190
-2096:2:2194
-2097:2:2195
-2098:2:2203
-2099:2:2204
-2100:2:2208
-2101:2:2209
-2102:2:2203
-2103:2:2204
-2104:2:2208
-2105:2:2209
-2106:2:2217
-2107:2:2222
-2108:2:2223
-2109:2:2234
-2110:2:2235
-2111:2:2236
-2112:2:2247
-2113:2:2252
-2114:2:2253
-2115:2:2264
-2116:2:2265
-2117:2:2266
-2118:2:2264
-2119:2:2265
-2120:2:2266
-2121:2:2277
-2122:0:2739
-2123:2:1175
-2124:0:2739
-2125:2:2023
-2126:2:2024
-2127:2:2028
-2128:2:2029
-2129:2:2037
-2130:2:2038
-2131:2:2042
-2132:2:2043
-2133:2:2051
-2134:2:2056
-2135:2:2060
-2136:2:2061
-2137:2:2069
-2138:2:2070
-2139:2:2074
-2140:2:2075
-2141:2:2069
-2142:2:2070
-2143:2:2074
-2144:2:2075
-2145:2:2083
-2146:2:2088
-2147:2:2089
-2148:2:2100
-2149:2:2101
-2150:2:2102
-2151:2:2113
-2152:2:2118
-2153:2:2119
-2154:2:2130
-2155:2:2131
-2156:2:2132
-2157:2:2130
-2158:2:2131
-2159:2:2132
-2160:2:2143
-2161:2:2151
-2162:0:2739
-2163:1:42
-2164:0:2739
-2165:2:1175
-2166:0:2739
-2167:2:2157
-2168:2:2158
-2169:2:2162
-2170:2:2163
-2171:2:2171
-2172:2:2172
-2173:2:2176
-2174:2:2177
-2175:2:2185
-2176:2:2190
-2177:2:2194
-2178:2:2195
-2179:2:2203
-2180:2:2204
-2181:2:2208
-2182:2:2209
-2183:2:2203
-2184:2:2204
-2185:2:2208
-2186:2:2209
-2187:2:2217
-2188:2:2222
-2189:2:2223
-2190:2:2234
-2191:2:2235
-2192:2:2236
-2193:2:2247
-2194:2:2252
-2195:2:2253
-2196:2:2264
-2197:2:2265
-2198:2:2266
-2199:2:2264
-2200:2:2265
-2201:2:2266
-2202:2:2277
-2203:0:2739
-2204:2:1175
-2205:0:2739
-2206:1:143
-2207:0:2739
-2208:2:2023
-2209:2:2024
-2210:2:2028
-2211:2:2029
-2212:2:2037
-2213:2:2038
-2214:2:2042
-2215:2:2043
-2216:2:2051
-2217:2:2056
-2218:2:2060
-2219:2:2061
-2220:2:2069
-2221:2:2070
-2222:2:2074
-2223:2:2075
-2224:2:2069
-2225:2:2070
-2226:2:2074
-2227:2:2075
-2228:2:2083
-2229:2:2088
-2230:2:2089
-2231:2:2100
-2232:2:2101
-2233:2:2102
-2234:2:2113
-2235:2:2118
-2236:2:2119
-2237:2:2130
-2238:2:2131
-2239:2:2132
-2240:2:2130
-2241:2:2131
-2242:2:2132
-2243:2:2143
-2244:2:2151
-2245:0:2739
-2246:2:1175
-2247:0:2739
-2248:2:2157
-2249:2:2158
-2250:2:2162
-2251:2:2163
-2252:2:2171
-2253:2:2172
-2254:2:2176
-2255:2:2177
-2256:2:2185
-2257:2:2190
-2258:2:2194
-2259:2:2195
-2260:2:2203
-2261:2:2204
-2262:2:2208
-2263:2:2209
-2264:2:2203
-2265:2:2204
-2266:2:2208
-2267:2:2209
-2268:2:2217
-2269:2:2222
-2270:2:2223
-2271:2:2234
-2272:2:2235
-2273:2:2236
-2274:2:2247
-2275:2:2252
-2276:2:2253
-2277:2:2264
-2278:2:2265
-2279:2:2266
-2280:2:2264
-2281:2:2265
-2282:2:2266
-2283:2:2277
-2284:0:2739
-2285:1:145
-2286:0:2739
-2287:2:1175
-2288:0:2739
-2289:2:2023
-2290:2:2024
-2291:2:2028
-2292:2:2029
-2293:2:2037
-2294:2:2038
-2295:2:2042
-2296:2:2043
-2297:2:2051
-2298:2:2056
-2299:2:2060
-2300:2:2061
-2301:2:2069
-2302:2:2070
-2303:2:2074
-2304:2:2075
-2305:2:2069
-2306:2:2070
-2307:2:2074
-2308:2:2075
-2309:2:2083
-2310:2:2088
-2311:2:2089
-2312:2:2100
-2313:2:2101
-2314:2:2102
-2315:2:2113
-2316:2:2118
-2317:2:2119
-2318:2:2130
-2319:2:2131
-2320:2:2132
-2321:2:2130
-2322:2:2131
-2323:2:2132
-2324:2:2143
-2325:2:2151
-2326:0:2739
-2327:2:1175
-2328:0:2739
-2329:1:44
-2330:0:2739
-2331:2:2157
-2332:2:2158
-2333:2:2162
-2334:2:2163
-2335:2:2171
-2336:2:2172
-2337:2:2176
-2338:2:2177
-2339:2:2185
-2340:2:2190
-2341:2:2194
-2342:2:2195
-2343:2:2203
-2344:2:2204
-2345:2:2208
-2346:2:2209
-2347:2:2203
-2348:2:2204
-2349:2:2208
-2350:2:2209
-2351:2:2217
-2352:2:2222
-2353:2:2223
-2354:2:2234
-2355:2:2235
-2356:2:2236
-2357:2:2247
-2358:2:2252
-2359:2:2253
-2360:2:2264
-2361:2:2265
-2362:2:2266
-2363:2:2264
-2364:2:2265
-2365:2:2266
-2366:2:2277
-2367:0:2739
-2368:2:1175
-2369:0:2739
-2370:2:2023
-2371:2:2024
-2372:2:2028
-2373:2:2029
-2374:2:2037
-2375:2:2038
-2376:2:2042
-2377:2:2043
-2378:2:2051
-2379:2:2056
-2380:2:2060
-2381:2:2061
-2382:2:2069
-2383:2:2070
-2384:2:2074
-2385:2:2075
-2386:2:2069
-2387:2:2070
-2388:2:2074
-2389:2:2075
-2390:2:2083
-2391:2:2088
-2392:2:2089
-2393:2:2100
-2394:2:2101
-2395:2:2102
-2396:2:2113
-2397:2:2118
-2398:2:2119
-2399:2:2130
-2400:2:2131
-2401:2:2132
-2402:2:2130
-2403:2:2131
-2404:2:2132
-2405:2:2143
-2406:2:2151
-2407:0:2739
-2408:1:816
-2409:1:817
-2410:1:821
-2411:1:822
-2412:1:830
-2413:1:831
-2414:1:835
-2415:1:836
-2416:1:844
-2417:1:849
-2418:1:853
-2419:1:854
-2420:1:862
-2421:1:863
-2422:1:867
-2423:1:868
-2424:1:862
-2425:1:863
-2426:1:867
-2427:1:868
-2428:1:876
-2429:1:881
-2430:1:882
-2431:1:893
-2432:1:894
-2433:1:895
-2434:1:906
-2435:1:911
-2436:1:912
-2437:1:923
-2438:1:924
-2439:1:925
-2440:1:923
-2441:1:924
-2442:1:925
-2443:1:936
-2444:0:2739
-2445:2:1175
-2446:0:2739
-2447:1:40
-2448:0:2739
-2449:1:41
-2450:0:2739
-2451:2:2157
-2452:2:2158
-2453:2:2162
-2454:2:2163
-2455:2:2171
-2456:2:2172
-2457:2:2176
-2458:2:2177
-2459:2:2185
-2460:2:2190
-2461:2:2194
-2462:2:2195
-2463:2:2203
-2464:2:2204
-2465:2:2208
-2466:2:2209
-2467:2:2203
-2468:2:2204
-2469:2:2208
-2470:2:2209
-2471:2:2217
-2472:2:2222
-2473:2:2223
-2474:2:2234
-2475:2:2235
-2476:2:2236
-2477:2:2247
-2478:2:2252
-2479:2:2253
-2480:2:2264
-2481:2:2265
-2482:2:2266
-2483:2:2264
-2484:2:2265
-2485:2:2266
-2486:2:2277
-2487:0:2739
-2488:2:1175
-2489:0:2739
-2490:2:2023
-2491:2:2024
-2492:2:2028
-2493:2:2029
-2494:2:2037
-2495:2:2038
-2496:2:2042
-2497:2:2043
-2498:2:2051
-2499:2:2056
-2500:2:2060
-2501:2:2061
-2502:2:2069
-2503:2:2070
-2504:2:2074
-2505:2:2075
-2506:2:2069
-2507:2:2070
-2508:2:2074
-2509:2:2075
-2510:2:2083
-2511:2:2088
-2512:2:2089
-2513:2:2100
-2514:2:2101
-2515:2:2102
-2516:2:2113
-2517:2:2118
-2518:2:2119
-2519:2:2130
-2520:2:2131
-2521:2:2132
-2522:2:2130
-2523:2:2131
-2524:2:2132
-2525:2:2143
-2526:2:2151
-2527:0:2739
-2528:1:42
-2529:0:2739
-2530:2:1175
-2531:0:2739
-2532:2:2157
-2533:2:2158
-2534:2:2162
-2535:2:2163
-2536:2:2171
-2537:2:2172
-2538:2:2176
-2539:2:2177
-2540:2:2185
-2541:2:2190
-2542:2:2194
-2543:2:2195
-2544:2:2203
-2545:2:2204
-2546:2:2208
-2547:2:2209
-2548:2:2203
-2549:2:2204
-2550:2:2208
-2551:2:2209
-2552:2:2217
-2553:2:2222
-2554:2:2223
-2555:2:2234
-2556:2:2235
-2557:2:2236
-2558:2:2247
-2559:2:2252
-2560:2:2253
-2561:2:2264
-2562:2:2265
-2563:2:2266
-2564:2:2264
-2565:2:2265
-2566:2:2266
-2567:2:2277
-2568:0:2739
-2569:2:1175
-2570:0:2739
-2571:1:143
-2572:0:2739
-2573:2:2023
-2574:2:2024
-2575:2:2028
-2576:2:2029
-2577:2:2037
-2578:2:2038
-2579:2:2042
-2580:2:2043
-2581:2:2051
-2582:2:2056
-2583:2:2060
-2584:2:2061
-2585:2:2069
-2586:2:2070
-2587:2:2074
-2588:2:2075
-2589:2:2069
-2590:2:2070
-2591:2:2074
-2592:2:2075
-2593:2:2083
-2594:2:2088
-2595:2:2089
-2596:2:2100
-2597:2:2101
-2598:2:2102
-2599:2:2113
-2600:2:2118
-2601:2:2119
-2602:2:2130
-2603:2:2131
-2604:2:2132
-2605:2:2130
-2606:2:2131
-2607:2:2132
-2608:2:2143
-2609:2:2151
-2610:0:2739
-2611:2:1175
-2612:0:2739
-2613:2:2157
-2614:2:2158
-2615:2:2162
-2616:2:2163
-2617:2:2171
-2618:2:2172
-2619:2:2176
-2620:2:2177
-2621:2:2185
-2622:2:2190
-2623:2:2194
-2624:2:2195
-2625:2:2203
-2626:2:2204
-2627:2:2208
-2628:2:2209
-2629:2:2203
-2630:2:2204
-2631:2:2208
-2632:2:2209
-2633:2:2217
-2634:2:2222
-2635:2:2223
-2636:2:2234
-2637:2:2235
-2638:2:2236
-2639:2:2247
-2640:2:2252
-2641:2:2253
-2642:2:2264
-2643:2:2265
-2644:2:2266
-2645:2:2264
-2646:2:2265
-2647:2:2266
-2648:2:2277
-2649:0:2739
-2650:1:145
-2651:0:2739
-2652:2:1175
-2653:0:2739
-2654:2:2023
-2655:2:2024
-2656:2:2028
-2657:2:2029
-2658:2:2037
-2659:2:2038
-2660:2:2042
-2661:2:2043
-2662:2:2051
-2663:2:2056
-2664:2:2060
-2665:2:2061
-2666:2:2069
-2667:2:2070
-2668:2:2074
-2669:2:2075
-2670:2:2069
-2671:2:2070
-2672:2:2074
-2673:2:2075
-2674:2:2083
-2675:2:2088
-2676:2:2089
-2677:2:2100
-2678:2:2101
-2679:2:2102
-2680:2:2113
-2681:2:2118
-2682:2:2119
-2683:2:2130
-2684:2:2131
-2685:2:2132
-2686:2:2130
-2687:2:2131
-2688:2:2132
-2689:2:2143
-2690:2:2151
-2691:0:2739
-2692:2:1175
-2693:0:2739
-2694:1:44
-2695:0:2739
-2696:2:2157
-2697:2:2158
-2698:2:2162
-2699:2:2163
-2700:2:2171
-2701:2:2172
-2702:2:2176
-2703:2:2177
-2704:2:2185
-2705:2:2190
-2706:2:2194
-2707:2:2195
-2708:2:2203
-2709:2:2204
-2710:2:2208
-2711:2:2209
-2712:2:2203
-2713:2:2204
-2714:2:2208
-2715:2:2209
-2716:2:2217
-2717:2:2222
-2718:2:2223
-2719:2:2234
-2720:2:2235
-2721:2:2236
-2722:2:2247
-2723:2:2252
-2724:2:2253
-2725:2:2264
-2726:2:2265
-2727:2:2266
-2728:2:2264
-2729:2:2265
-2730:2:2266
-2731:2:2277
-2732:0:2739
-2733:2:1175
-2734:0:2739
-2735:2:2023
-2736:2:2024
-2737:2:2028
-2738:2:2029
-2739:2:2037
-2740:2:2038
-2741:2:2042
-2742:2:2043
-2743:2:2051
-2744:2:2056
-2745:2:2060
-2746:2:2061
-2747:2:2069
-2748:2:2070
-2749:2:2074
-2750:2:2075
-2751:2:2069
-2752:2:2070
-2753:2:2074
-2754:2:2075
-2755:2:2083
-2756:2:2088
-2757:2:2089
-2758:2:2100
-2759:2:2101
-2760:2:2102
-2761:2:2113
-2762:2:2118
-2763:2:2119
-2764:2:2130
-2765:2:2131
-2766:2:2132
-2767:2:2130
-2768:2:2131
-2769:2:2132
-2770:2:2143
-2771:2:2151
-2772:0:2739
-2773:1:945
-2774:1:946
-2775:1:950
-2776:1:951
-2777:1:959
-2778:1:960
-2779:1:964
-2780:1:965
-2781:1:973
-2782:1:978
-2783:1:982
-2784:1:983
-2785:1:991
-2786:1:992
-2787:1:996
-2788:1:997
-2789:1:991
-2790:1:992
-2791:1:996
-2792:1:997
-2793:1:1005
-2794:1:1010
-2795:1:1011
-2796:1:1022
-2797:1:1023
-2798:1:1024
-2799:1:1035
-2800:1:1040
-2801:1:1041
-2802:1:1052
-2803:1:1053
-2804:1:1054
-2805:1:1052
-2806:1:1053
-2807:1:1054
-2808:1:1065
-2809:1:1072
-2810:1:1076
-2811:0:2739
-2812:2:1175
-2813:0:2739
-2814:1:40
-2815:0:2739
-2816:1:41
-2817:0:2739
-2818:2:2157
-2819:2:2158
-2820:2:2162
-2821:2:2163
-2822:2:2171
-2823:2:2172
-2824:2:2176
-2825:2:2177
-2826:2:2185
-2827:2:2190
-2828:2:2194
-2829:2:2195
-2830:2:2203
-2831:2:2204
-2832:2:2208
-2833:2:2209
-2834:2:2203
-2835:2:2204
-2836:2:2208
-2837:2:2209
-2838:2:2217
-2839:2:2222
-2840:2:2223
-2841:2:2234
-2842:2:2235
-2843:2:2236
-2844:2:2247
-2845:2:2252
-2846:2:2253
-2847:2:2264
-2848:2:2265
-2849:2:2266
-2850:2:2264
-2851:2:2265
-2852:2:2266
-2853:2:2277
-2854:0:2739
-2855:2:1175
-2856:0:2739
-2857:2:2023
-2858:2:2024
-2859:2:2028
-2860:2:2029
-2861:2:2037
-2862:2:2038
-2863:2:2042
-2864:2:2043
-2865:2:2051
-2866:2:2056
-2867:2:2060
-2868:2:2061
-2869:2:2069
-2870:2:2070
-2871:2:2074
-2872:2:2075
-2873:2:2069
-2874:2:2070
-2875:2:2074
-2876:2:2075
-2877:2:2083
-2878:2:2088
-2879:2:2089
-2880:2:2100
-2881:2:2101
-2882:2:2102
-2883:2:2113
-2884:2:2118
-2885:2:2119
-2886:2:2130
-2887:2:2131
-2888:2:2132
-2889:2:2130
-2890:2:2131
-2891:2:2132
-2892:2:2143
-2893:2:2151
-2894:0:2739
-2895:1:42
-2896:0:2739
-2897:2:1175
-2898:0:2739
-2899:2:2157
-2900:2:2158
-2901:2:2162
-2902:2:2163
-2903:2:2171
-2904:2:2172
-2905:2:2176
-2906:2:2177
-2907:2:2185
-2908:2:2190
-2909:2:2194
-2910:2:2195
-2911:2:2203
-2912:2:2204
-2913:2:2208
-2914:2:2209
-2915:2:2203
-2916:2:2204
-2917:2:2208
-2918:2:2209
-2919:2:2217
-2920:2:2222
-2921:2:2223
-2922:2:2234
-2923:2:2235
-2924:2:2236
-2925:2:2247
-2926:2:2252
-2927:2:2253
-2928:2:2264
-2929:2:2265
-2930:2:2266
-2931:2:2264
-2932:2:2265
-2933:2:2266
-2934:2:2277
-2935:0:2739
-2936:2:1175
-2937:0:2739
-2938:1:143
-2939:0:2739
-2940:2:2023
-2941:2:2024
-2942:2:2028
-2943:2:2029
-2944:2:2037
-2945:2:2038
-2946:2:2042
-2947:2:2043
-2948:2:2051
-2949:2:2056
-2950:2:2060
-2951:2:2061
-2952:2:2069
-2953:2:2070
-2954:2:2074
-2955:2:2075
-2956:2:2069
-2957:2:2070
-2958:2:2074
-2959:2:2075
-2960:2:2083
-2961:2:2088
-2962:2:2089
-2963:2:2100
-2964:2:2101
-2965:2:2102
-2966:2:2113
-2967:2:2118
-2968:2:2119
-2969:2:2130
-2970:2:2131
-2971:2:2132
-2972:2:2130
-2973:2:2131
-2974:2:2132
-2975:2:2143
-2976:2:2151
-2977:0:2739
-2978:2:1175
-2979:0:2739
-2980:2:2157
-2981:2:2158
-2982:2:2162
-2983:2:2163
-2984:2:2171
-2985:2:2172
-2986:2:2176
-2987:2:2177
-2988:2:2185
-2989:2:2190
-2990:2:2194
-2991:2:2195
-2992:2:2203
-2993:2:2204
-2994:2:2208
-2995:2:2209
-2996:2:2203
-2997:2:2204
-2998:2:2208
-2999:2:2209
-3000:2:2217
-3001:2:2222
-3002:2:2223
-3003:2:2234
-3004:2:2235
-3005:2:2236
-3006:2:2247
-3007:2:2252
-3008:2:2253
-3009:2:2264
-3010:2:2265
-3011:2:2266
-3012:2:2264
-3013:2:2265
-3014:2:2266
-3015:2:2277
-3016:0:2739
-3017:1:145
-3018:0:2739
-3019:2:1175
-3020:0:2739
-3021:2:2023
-3022:2:2024
-3023:2:2028
-3024:2:2029
-3025:2:2037
-3026:2:2038
-3027:2:2042
-3028:2:2043
-3029:2:2051
-3030:2:2056
-3031:2:2060
-3032:2:2061
-3033:2:2069
-3034:2:2070
-3035:2:2074
-3036:2:2075
-3037:2:2069
-3038:2:2070
-3039:2:2074
-3040:2:2075
-3041:2:2083
-3042:2:2088
-3043:2:2089
-3044:2:2100
-3045:2:2101
-3046:2:2102
-3047:2:2113
-3048:2:2118
-3049:2:2119
-3050:2:2130
-3051:2:2131
-3052:2:2132
-3053:2:2130
-3054:2:2131
-3055:2:2132
-3056:2:2143
-3057:2:2151
-3058:0:2739
-3059:2:1175
-3060:0:2739
-3061:1:44
-3062:0:2739
-3063:2:2157
-3064:2:2158
-3065:2:2162
-3066:2:2163
-3067:2:2171
-3068:2:2172
-3069:2:2176
-3070:2:2177
-3071:2:2185
-3072:2:2190
-3073:2:2194
-3074:2:2195
-3075:2:2203
-3076:2:2204
-3077:2:2208
-3078:2:2209
-3079:2:2203
-3080:2:2204
-3081:2:2208
-3082:2:2209
-3083:2:2217
-3084:2:2222
-3085:2:2223
-3086:2:2234
-3087:2:2235
-3088:2:2236
-3089:2:2247
-3090:2:2252
-3091:2:2253
-3092:2:2264
-3093:2:2265
-3094:2:2266
-3095:2:2264
-3096:2:2265
-3097:2:2266
-3098:2:2277
-3099:0:2739
-3100:2:1175
-3101:0:2739
-3102:2:2023
-3103:2:2024
-3104:2:2028
-3105:2:2029
-3106:2:2037
-3107:2:2038
-3108:2:2042
-3109:2:2043
-3110:2:2051
-3111:2:2056
-3112:2:2060
-3113:2:2061
-3114:2:2069
-3115:2:2070
-3116:2:2074
-3117:2:2075
-3118:2:2069
-3119:2:2070
-3120:2:2074
-3121:2:2075
-3122:2:2083
-3123:2:2088
-3124:2:2089
-3125:2:2100
-3126:2:2101
-3127:2:2102
-3128:2:2113
-3129:2:2118
-3130:2:2119
-3131:2:2130
-3132:2:2131
-3133:2:2132
-3134:2:2130
-3135:2:2131
-3136:2:2132
-3137:2:2143
-3138:2:2151
-3139:0:2739
-3140:1:1077
-3141:0:2739
-3142:2:1175
-3143:0:2739
-3144:1:1085
-3145:0:2739
-3146:1:1130
-3147:0:2739
-3148:1:36
-3149:0:2739
-3150:2:2157
-3151:2:2158
-3152:2:2162
-3153:2:2163
-3154:2:2171
-3155:2:2172
-3156:2:2176
-3157:2:2177
-3158:2:2185
-3159:2:2190
-3160:2:2194
-3161:2:2195
-3162:2:2203
-3163:2:2204
-3164:2:2208
-3165:2:2209
-3166:2:2203
-3167:2:2204
-3168:2:2208
-3169:2:2209
-3170:2:2217
-3171:2:2222
-3172:2:2223
-3173:2:2234
-3174:2:2235
-3175:2:2236
-3176:2:2247
-3177:2:2252
-3178:2:2253
-3179:2:2264
-3180:2:2265
-3181:2:2266
-3182:2:2264
-3183:2:2265
-3184:2:2266
-3185:2:2277
-3186:0:2739
-3187:2:1175
-3188:0:2739
-3189:2:2023
-3190:2:2024
-3191:2:2028
-3192:2:2029
-3193:2:2037
-3194:2:2038
-3195:2:2042
-3196:2:2043
-3197:2:2051
-3198:2:2056
-3199:2:2060
-3200:2:2061
-3201:2:2069
-3202:2:2070
-3203:2:2074
-3204:2:2075
-3205:2:2069
-3206:2:2070
-3207:2:2074
-3208:2:2075
-3209:2:2083
-3210:2:2088
-3211:2:2089
-3212:2:2100
-3213:2:2101
-3214:2:2102
-3215:2:2113
-3216:2:2118
-3217:2:2119
-3218:2:2130
-3219:2:2131
-3220:2:2132
-3221:2:2130
-3222:2:2131
-3223:2:2132
-3224:2:2143
-3225:2:2151
-3226:0:2739
-3227:1:37
-3228:0:2739
-3229:2:1175
-3230:0:2739
-3231:2:2157
-3232:2:2158
-3233:2:2162
-3234:2:2163
-3235:2:2171
-3236:2:2172
-3237:2:2176
-3238:2:2177
-3239:2:2185
-3240:2:2190
-3241:2:2194
-3242:2:2195
-3243:2:2203
-3244:2:2204
-3245:2:2208
-3246:2:2209
-3247:2:2203
-3248:2:2204
-3249:2:2208
-3250:2:2209
-3251:2:2217
-3252:2:2222
-3253:2:2223
-3254:2:2234
-3255:2:2235
-3256:2:2236
-3257:2:2247
-3258:2:2252
-3259:2:2253
-3260:2:2264
-3261:2:2265
-3262:2:2266
-3263:2:2264
-3264:2:2265
-3265:2:2266
-3266:2:2277
-3267:0:2739
-3268:2:1175
-3269:0:2739
-3270:1:38
-3271:0:2739
-3272:2:2023
-3273:2:2024
-3274:2:2028
-3275:2:2029
-3276:2:2037
-3277:2:2038
-3278:2:2042
-3279:2:2043
-3280:2:2051
-3281:2:2056
-3282:2:2060
-3283:2:2061
-3284:2:2069
-3285:2:2070
-3286:2:2074
-3287:2:2075
-3288:2:2069
-3289:2:2070
-3290:2:2074
-3291:2:2075
-3292:2:2083
-3293:2:2088
-3294:2:2089
-3295:2:2100
-3296:2:2101
-3297:2:2102
-3298:2:2113
-3299:2:2118
-3300:2:2119
-3301:2:2130
-3302:2:2131
-3303:2:2132
-3304:2:2130
-3305:2:2131
-3306:2:2132
-3307:2:2143
-3308:2:2151
-3309:0:2739
-3310:2:1175
-3311:0:2739
-3312:2:2157
-3313:2:2158
-3314:2:2162
-3315:2:2163
-3316:2:2171
-3317:2:2172
-3318:2:2176
-3319:2:2177
-3320:2:2185
-3321:2:2190
-3322:2:2194
-3323:2:2195
-3324:2:2203
-3325:2:2204
-3326:2:2208
-3327:2:2209
-3328:2:2203
-3329:2:2204
-3330:2:2208
-3331:2:2209
-3332:2:2217
-3333:2:2222
-3334:2:2223
-3335:2:2234
-3336:2:2235
-3337:2:2236
-3338:2:2247
-3339:2:2252
-3340:2:2253
-3341:2:2264
-3342:2:2265
-3343:2:2266
-3344:2:2264
-3345:2:2265
-3346:2:2266
-3347:2:2277
-3348:0:2739
-3349:1:39
-3350:0:2739
-3351:2:1175
-3352:0:2739
-3353:1:40
-3354:0:2739
-3355:1:41
-3356:0:2739
-3357:2:2023
-3358:2:2024
-3359:2:2028
-3360:2:2029
-3361:2:2037
-3362:2:2038
-3363:2:2042
-3364:2:2043
-3365:2:2051
-3366:2:2056
-3367:2:2060
-3368:2:2061
-3369:2:2069
-3370:2:2070
-3371:2:2074
-3372:2:2075
-3373:2:2069
-3374:2:2070
-3375:2:2074
-3376:2:2075
-3377:2:2083
-3378:2:2088
-3379:2:2089
-3380:2:2100
-3381:2:2101
-3382:2:2102
-3383:2:2113
-3384:2:2118
-3385:2:2119
-3386:2:2130
-3387:2:2131
-3388:2:2132
-3389:2:2130
-3390:2:2131
-3391:2:2132
-3392:2:2143
-3393:2:2151
-3394:0:2739
-3395:2:1175
-3396:0:2739
-3397:2:2157
-3398:2:2158
-3399:2:2162
-3400:2:2163
-3401:2:2171
-3402:2:2172
-3403:2:2176
-3404:2:2177
-3405:2:2185
-3406:2:2190
-3407:2:2194
-3408:2:2195
-3409:2:2203
-3410:2:2204
-3411:2:2208
-3412:2:2209
-3413:2:2203
-3414:2:2204
-3415:2:2208
-3416:2:2209
-3417:2:2217
-3418:2:2222
-3419:2:2223
-3420:2:2234
-3421:2:2235
-3422:2:2236
-3423:2:2247
-3424:2:2252
-3425:2:2253
-3426:2:2264
-3427:2:2265
-3428:2:2266
-3429:2:2264
-3430:2:2265
-3431:2:2266
-3432:2:2277
-3433:0:2739
-3434:1:42
-3435:0:2739
-3436:2:1175
-3437:0:2739
-3438:2:2023
-3439:2:2024
-3440:2:2028
-3441:2:2029
-3442:2:2037
-3443:2:2038
-3444:2:2042
-3445:2:2043
-3446:2:2051
-3447:2:2056
-3448:2:2060
-3449:2:2061
-3450:2:2069
-3451:2:2070
-3452:2:2074
-3453:2:2075
-3454:2:2069
-3455:2:2070
-3456:2:2074
-3457:2:2075
-3458:2:2083
-3459:2:2088
-3460:2:2089
-3461:2:2100
-3462:2:2101
-3463:2:2102
-3464:2:2113
-3465:2:2118
-3466:2:2119
-3467:2:2130
-3468:2:2131
-3469:2:2132
-3470:2:2130
-3471:2:2131
-3472:2:2132
-3473:2:2143
-3474:2:2151
-3475:0:2739
-3476:2:1175
-3477:0:2739
-3478:1:143
-3479:0:2739
-3480:2:2157
-3481:2:2158
-3482:2:2162
-3483:2:2163
-3484:2:2171
-3485:2:2172
-3486:2:2176
-3487:2:2177
-3488:2:2185
-3489:2:2190
-3490:2:2194
-3491:2:2195
-3492:2:2203
-3493:2:2204
-3494:2:2208
-3495:2:2209
-3496:2:2203
-3497:2:2204
-3498:2:2208
-3499:2:2209
-3500:2:2217
-3501:2:2222
-3502:2:2223
-3503:2:2234
-3504:2:2235
-3505:2:2236
-3506:2:2247
-3507:2:2252
-3508:2:2253
-3509:2:2264
-3510:2:2265
-3511:2:2266
-3512:2:2264
-3513:2:2265
-3514:2:2266
-3515:2:2277
-3516:0:2739
-3517:2:1175
-3518:0:2739
-3519:2:2023
-3520:2:2024
-3521:2:2028
-3522:2:2029
-3523:2:2037
-3524:2:2038
-3525:2:2042
-3526:2:2043
-3527:2:2051
-3528:2:2056
-3529:2:2060
-3530:2:2061
-3531:2:2069
-3532:2:2070
-3533:2:2074
-3534:2:2075
-3535:2:2069
-3536:2:2070
-3537:2:2074
-3538:2:2075
-3539:2:2083
-3540:2:2088
-3541:2:2089
-3542:2:2100
-3543:2:2101
-3544:2:2102
-3545:2:2113
-3546:2:2118
-3547:2:2119
-3548:2:2130
-3549:2:2131
-3550:2:2132
-3551:2:2130
-3552:2:2131
-3553:2:2132
-3554:2:2143
-3555:2:2151
-3556:0:2739
-3557:1:145
-3558:0:2737
-3559:2:1175
-3560:0:2743
-3561:2:2157
-3562:2:2158
-3563:2:2162
-3564:2:2163
-3565:2:2171
-3566:2:2172
-3567:2:2176
-3568:2:2177
-3569:2:2185
-3570:2:2190
-3571:2:2194
-3572:2:2195
-3573:2:2203
-3574:2:2204
-3575:2:2208
-3576:2:2209
-3577:2:2203
-3578:2:2204
-3579:2:2208
-3580:2:2209
-3581:2:2217
-3582:2:2222
-3583:2:2223
-3584:2:2234
-3585:2:2235
-3586:2:2236
-3587:2:2247
-3588:2:2252
-3589:2:2253
-3590:2:2264
-3591:2:2265
-3592:2:2266
-3593:2:2264
-3594:2:2265
-3595:2:2266
-3596:2:2277
-3597:0:2743
-3598:2:1175
-3599:0:2743
-3600:2:2023
-3601:2:2024
-3602:2:2028
-3603:2:2029
-3604:2:2037
-3605:2:2038
-3606:2:2042
-3607:2:2043
-3608:2:2051
-3609:2:2056
-3610:2:2060
-3611:2:2061
-3612:2:2069
-3613:2:2070
-3614:2:2074
-3615:2:2075
-3616:2:2069
-3617:2:2070
-3618:2:2074
-3619:2:2075
-3620:2:2083
-3621:2:2088
-3622:2:2089
-3623:2:2100
-3624:2:2101
-3625:2:2102
-3626:2:2113
-3627:2:2118
-3628:2:2119
-3629:2:2130
-3630:2:2131
-3631:2:2132
-3632:2:2130
-3633:2:2131
-3634:2:2132
-3635:2:2143
-3636:2:2151
-3637:0:2743
-3638:1:44
-3639:0:2743
-3640:2:1175
-3641:0:2743
-3642:2:2157
-3643:2:2158
-3644:2:2162
-3645:2:2163
-3646:2:2171
-3647:2:2172
-3648:2:2176
-3649:2:2177
-3650:2:2185
-3651:2:2190
-3652:2:2194
-3653:2:2195
-3654:2:2203
-3655:2:2204
-3656:2:2208
-3657:2:2209
-3658:2:2203
-3659:2:2204
-3660:2:2208
-3661:2:2209
-3662:2:2217
-3663:2:2222
-3664:2:2223
-3665:2:2234
-3666:2:2235
-3667:2:2236
-3668:2:2247
-3669:2:2252
-3670:2:2253
-3671:2:2264
-3672:2:2265
-3673:2:2266
-3674:2:2264
-3675:2:2265
-3676:2:2266
-3677:2:2277
-3678:0:2743
-3679:2:1175
-3680:0:2743
-3681:2:2023
-3682:2:2024
-3683:2:2028
-3684:2:2029
-3685:2:2037
-3686:2:2038
-3687:2:2042
-3688:2:2043
-3689:2:2051
-3690:2:2056
-3691:2:2060
-3692:2:2061
-3693:2:2069
-3694:2:2070
-3695:2:2074
-3696:2:2075
-3697:2:2069
-3698:2:2070
-3699:2:2074
-3700:2:2075
-3701:2:2083
-3702:2:2088
-3703:2:2089
-3704:2:2100
-3705:2:2101
-3706:2:2102
-3707:2:2113
-3708:2:2118
-3709:2:2119
-3710:2:2130
-3711:2:2131
-3712:2:2132
-3713:2:2130
-3714:2:2131
-3715:2:2132
-3716:2:2143
-3717:2:2151
-3718:0:2743
-3719:1:681
-3720:1:682
-3721:1:686
-3722:1:687
-3723:1:695
-3724:1:696
-3725:1:697
-3726:1:709
-3727:1:714
-3728:1:718
-3729:1:719
-3730:1:727
-3731:1:728
-3732:1:732
-3733:1:733
-3734:1:727
-3735:1:728
-3736:1:732
-3737:1:733
-3738:1:741
-3739:1:746
-3740:1:747
-3741:1:758
-3742:1:759
-3743:1:760
-3744:1:771
-3745:1:776
-3746:1:777
-3747:1:788
-3748:1:789
-3749:1:790
-3750:1:788
-3751:1:789
-3752:1:790
-3753:1:801
-3754:0:2743
-3755:2:1175
-3756:0:2743
-3757:1:40
-3758:0:2743
-3759:1:41
-3760:0:2743
-3761:2:2157
-3762:2:2158
-3763:2:2162
-3764:2:2163
-3765:2:2171
-3766:2:2172
-3767:2:2176
-3768:2:2177
-3769:2:2185
-3770:2:2190
-3771:2:2194
-3772:2:2195
-3773:2:2203
-3774:2:2204
-3775:2:2208
-3776:2:2209
-3777:2:2203
-3778:2:2204
-3779:2:2208
-3780:2:2209
-3781:2:2217
-3782:2:2222
-3783:2:2223
-3784:2:2234
-3785:2:2242
-3786:2:2243
-3787:2:2247
-3788:2:2252
-3789:2:2253
-3790:2:2264
-3791:2:2265
-3792:2:2266
-3793:2:2264
-3794:2:2265
-3795:2:2266
-3796:2:2277
-3797:0:2743
-3798:2:1175
--1:-1:-1
-3799:0:2743
-3800:2:2023
-3801:2:2024
-3802:2:2028
-3803:2:2029
-3804:2:2037
-3805:2:2038
-3806:2:2042
-3807:2:2043
-3808:2:2051
-3809:2:2056
-3810:2:2060
-3811:2:2061
-3812:2:2069
-3813:2:2070
-3814:2:2074
-3815:2:2075
-3816:2:2069
-3817:2:2070
-3818:2:2074
-3819:2:2075
-3820:2:2083
-3821:2:2088
-3822:2:2089
-3823:2:2100
-3824:2:2108
-3825:2:2109
-3826:2:2113
-3827:2:2118
-3828:2:2119
-3829:2:2130
-3830:2:2131
-3831:2:2132
-3832:2:2130
-3833:2:2131
-3834:2:2132
-3835:2:2143
-3836:2:2151
-3837:0:2743
-3838:2:1175
-3839:0:2743
-3840:2:2157
-3841:2:2158
-3842:2:2162
-3843:2:2163
-3844:2:2171
-3845:2:2172
-3846:2:2176
-3847:2:2177
-3848:2:2185
-3849:2:2190
-3850:2:2194
-3851:2:2195
-3852:2:2203
-3853:2:2204
-3854:2:2208
-3855:2:2209
-3856:2:2203
-3857:2:2204
-3858:2:2208
-3859:2:2209
-3860:2:2217
-3861:2:2222
-3862:2:2223
-3863:2:2234
-3864:2:2242
-3865:2:2243
-3866:2:2247
-3867:2:2252
-3868:2:2253
-3869:2:2264
-3870:2:2265
-3871:2:2266
-3872:2:2264
-3873:2:2265
-3874:2:2266
-3875:2:2277
-3876:0:2743
-3877:2:1175
-3878:0:2743
-3879:2:2023
-3880:2:2024
-3881:2:2028
-3882:2:2029
-3883:2:2037
-3884:2:2038
-3885:2:2042
-3886:2:2043
-3887:2:2051
-3888:2:2056
-3889:2:2060
-3890:2:2061
-3891:2:2069
-3892:2:2070
-3893:2:2074
-3894:2:2075
-3895:2:2069
-3896:2:2070
-3897:2:2074
-3898:2:2075
-3899:2:2083
-3900:2:2088
-3901:2:2089
-3902:2:2100
-3903:2:2108
-3904:2:2109
-3905:2:2113
-3906:2:2118
-3907:2:2119
-3908:2:2130
-3909:2:2131
-3910:2:2132
-3911:2:2130
-3912:2:2131
-3913:2:2132
-3914:2:2143
-3915:2:2151
-3916:0:2743
-3917:2:1175
-3918:0:2743
-3919:2:2157
-3920:2:2158
-3921:2:2162
-3922:2:2163
-3923:2:2171
-3924:2:2172
-3925:2:2176
-3926:2:2177
-3927:2:2185
-3928:2:2190
-3929:2:2194
-3930:2:2195
-3931:2:2203
-3932:2:2204
-3933:2:2208
-3934:2:2209
-3935:2:2203
-3936:2:2204
-3937:2:2208
-3938:2:2209
-3939:2:2217
-3940:2:2222
-3941:2:2223
-3942:2:2234
-3943:2:2242
-3944:2:2243
-3945:2:2247
-3946:2:2252
-3947:2:2253
-3948:2:2264
-3949:2:2265
-3950:2:2266
-3951:2:2264
-3952:2:2265
-3953:2:2266
-3954:2:2277
-3955:0:2743
-3956:2:1175
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/.input.spin b/formal-model/urcu-controldataflow-alpha-ipi/.input.spin
deleted file mode 100644 (file)
index ca70e6c..0000000
+++ /dev/null
@@ -1,1339 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/DEFINES b/formal-model/urcu-controldataflow-alpha-ipi/DEFINES
deleted file mode 100644 (file)
index 2681f69..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/Makefile b/formal-model/urcu-controldataflow-alpha-ipi/Makefile
deleted file mode 100644 (file)
index cadd0aa..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64 -DCOLLAPSE
-#CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       #state-space over 14gb..
-       #make urcu_progress_writer | tee urcu_progress_writer.log
-       #make urcu_progress_reader | tee urcu_progress_reader.log
-       #make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/asserts.log b/formal-model/urcu-controldataflow-alpha-ipi/asserts.log
deleted file mode 100644 (file)
index 6efa47c..0000000
+++ /dev/null
@@ -1,549 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-Depth=    6176 States=    1e+06 Transitions= 1.77e+08 Memory=   497.600        t=    218 R=   5e+03
-Depth=    7720 States=    2e+06 Transitions= 3.71e+08 Memory=   528.654        t=    474 R=   4e+03
-Depth=    7720 States=    3e+06 Transitions=  5.8e+08 Memory=   561.955        t=    768 R=   4e+03
-pan: resizing hashtable to -w22..  done
-Depth=    7720 States=    4e+06 Transitions=  7.6e+08 Memory=   627.549        t=    999 R=   4e+03
-Depth=    7720 States=    5e+06 Transitions= 9.44e+08 Memory=   662.217        t= 1.24e+03 R=   4e+03
-Depth=    7720 States=    6e+06 Transitions= 1.35e+09 Memory=   699.619        t= 1.79e+03 R=   3e+03
-Depth=    7720 States=    7e+06 Transitions= 1.79e+09 Memory=   735.361        t= 2.39e+03 R=   3e+03
-Depth=    7720 States=    8e+06 Transitions= 2.11e+09 Memory=   773.545        t= 2.83e+03 R=   3e+03
-Depth=    7720 States=    9e+06 Transitions= 2.49e+09 Memory=   811.143        t= 3.37e+03 R=   3e+03
-pan: resizing hashtable to -w24..  done
-Depth=    7720 States=    1e+07 Transitions= 2.83e+09 Memory=   973.518        t= 3.8e+03 R=   3e+03
-Depth=    7720 States=  1.1e+07 Transitions=  3.2e+09 Memory=  1011.506        t= 4.27e+03 R=   3e+03
-Depth=    7720 States=  1.2e+07 Transitions= 3.59e+09 Memory=  1049.885        t= 4.78e+03 R=   3e+03
-Depth=    7720 States=  1.3e+07 Transitions= 3.81e+09 Memory=  1087.678        t= 5.06e+03 R=   3e+03
-Depth=    7720 States=  1.4e+07 Transitions= 4.12e+09 Memory=  1122.834        t= 5.46e+03 R=   3e+03
-Depth=    7720 States=  1.5e+07 Transitions= 4.35e+09 Memory=  1159.358        t= 5.75e+03 R=   3e+03
-Depth=    7720 States=  1.6e+07 Transitions= 4.88e+09 Memory=  1195.783        t= 6.46e+03 R=   2e+03
-Depth=    7720 States=  1.7e+07 Transitions= 5.67e+09 Memory=  1231.721        t= 7.51e+03 R=   2e+03
-Depth=    7720 States=  1.8e+07 Transitions= 6.31e+09 Memory=  1268.537        t= 8.37e+03 R=   2e+03
-Depth=    7720 States=  1.9e+07 Transitions= 6.77e+09 Memory=  1306.526        t= 8.98e+03 R=   2e+03
-Depth=    7720 States=    2e+07 Transitions= 7.09e+09 Memory=  1345.393        t= 9.41e+03 R=   2e+03
-Depth=    7720 States=  2.1e+07 Transitions= 7.48e+09 Memory=  1383.576        t= 9.93e+03 R=   2e+03
-Depth=    7720 States=  2.2e+07 Transitions= 7.94e+09 Memory=  1421.955        t= 1.06e+04 R=   2e+03
-Depth=    7720 States=  2.3e+07 Transitions= 8.37e+09 Memory=  1459.846        t= 1.11e+04 R=   2e+03
-Depth=    7720 States=  2.4e+07 Transitions= 8.77e+09 Memory=  1497.346        t= 1.17e+04 R=   2e+03
-Depth=    7720 States=  2.5e+07 Transitions= 9.22e+09 Memory=  1535.529        t= 1.23e+04 R=   2e+03
-Depth=    7720 States=  2.6e+07 Transitions= 9.48e+09 Memory=  1574.006        t= 1.26e+04 R=   2e+03
-Depth=    7720 States=  2.7e+07 Transitions= 9.85e+09 Memory=  1612.385        t= 1.31e+04 R=   2e+03
-Depth=    7720 States=  2.8e+07 Transitions= 1.02e+10 Memory=  1650.666        t= 1.37e+04 R=   2e+03
-Depth=    7940 States=  2.9e+07 Transitions= 1.06e+10 Memory=  1688.752        t= 1.41e+04 R=   2e+03
-Depth=    7998 States=    3e+07 Transitions= 1.09e+10 Memory=  1726.936        t= 1.46e+04 R=   2e+03
-Depth=    7998 States=  3.1e+07 Transitions= 1.13e+10 Memory=  1765.315        t= 1.51e+04 R=   2e+03
-Depth=    7998 States=  3.2e+07 Transitions= 1.16e+10 Memory=  1803.498        t= 1.55e+04 R=   2e+03
-Depth=    7998 States=  3.3e+07 Transitions= 1.19e+10 Memory=  1841.682        t= 1.6e+04 R=   2e+03
-Depth=    7998 States=  3.4e+07 Transitions= 1.23e+10 Memory=  1879.963        t= 1.65e+04 R=   2e+03
-pan: resizing hashtable to -w26..  done
-Depth=    7998 States=  3.5e+07 Transitions= 1.26e+10 Memory=  2414.131        t= 1.69e+04 R=   2e+03
-Depth=    7998 States=  3.6e+07 Transitions= 1.29e+10 Memory=  2452.315        t= 1.73e+04 R=   2e+03
-Depth=    7998 States=  3.7e+07 Transitions= 1.32e+10 Memory=  2490.498        t= 1.77e+04 R=   2e+03
-Depth=    7998 States=  3.8e+07 Transitions= 1.35e+10 Memory=  2528.584        t= 1.82e+04 R=   2e+03
-Depth=    7998 States=  3.9e+07 Transitions= 1.39e+10 Memory=  2566.768        t= 1.86e+04 R=   2e+03
-Depth=    7998 States=    4e+07 Transitions= 1.41e+10 Memory=  2604.951        t= 1.89e+04 R=   2e+03
-Depth=    7998 States=  4.1e+07 Transitions= 1.44e+10 Memory=  2643.135        t= 1.93e+04 R=   2e+03
-Depth=    7998 States=  4.2e+07 Transitions= 1.48e+10 Memory=  2682.002        t= 1.98e+04 R=   2e+03
-Depth=    7998 States=  4.3e+07 Transitions= 1.51e+10 Memory=  2720.283        t= 2.03e+04 R=   2e+03
-Depth=    7998 States=  4.4e+07 Transitions= 1.56e+10 Memory=  2759.053        t= 2.09e+04 R=   2e+03
-Depth=    7998 States=  4.5e+07 Transitions= 1.59e+10 Memory=  2797.432        t= 2.13e+04 R=   2e+03
-Depth=    7998 States=  4.6e+07 Transitions= 1.64e+10 Memory=  2836.201        t= 2.19e+04 R=   2e+03
-Depth=    7998 States=  4.7e+07 Transitions= 1.68e+10 Memory=  2875.068        t= 2.24e+04 R=   2e+03
-Depth=    7998 States=  4.8e+07 Transitions= 1.72e+10 Memory=  2913.643        t= 2.29e+04 R=   2e+03
-Depth=    7998 States=  4.9e+07 Transitions= 1.76e+10 Memory=  2952.412        t= 2.34e+04 R=   2e+03
-Depth=    7998 States=    5e+07 Transitions= 1.78e+10 Memory=  2989.619        t= 2.38e+04 R=   2e+03
-Depth=    7998 States=  5.1e+07 Transitions= 1.81e+10 Memory=  3027.901        t= 2.42e+04 R=   2e+03
-Depth=    7998 States=  5.2e+07 Transitions= 1.84e+10 Memory=  3066.279        t= 2.46e+04 R=   2e+03
-Depth=    7998 States=  5.3e+07 Transitions= 1.87e+10 Memory=  3104.463        t= 2.49e+04 R=   2e+03
-Depth=    7998 States=  5.4e+07 Transitions= 1.93e+10 Memory=  3142.842        t= 2.57e+04 R=   2e+03
-Depth=    7998 States=  5.5e+07 Transitions= 2.01e+10 Memory=  3181.026        t= 2.68e+04 R=   2e+03
-Depth=    7998 States=  5.6e+07 Transitions= 2.07e+10 Memory=  3219.990        t= 2.76e+04 R=   2e+03
-Depth=    7998 States=  5.7e+07 Transitions= 2.11e+10 Memory=  3258.467        t= 2.82e+04 R=   2e+03
-Depth=    7998 States=  5.8e+07 Transitions= 2.15e+10 Memory=  3297.236        t= 2.87e+04 R=   2e+03
-Depth=    7998 States=  5.9e+07 Transitions= 2.18e+10 Memory=  3334.151        t= 2.91e+04 R=   2e+03
-Depth=    7998 States=    6e+07 Transitions= 2.22e+10 Memory=  3372.432        t= 2.97e+04 R=   2e+03
-Depth=    7998 States=  6.1e+07 Transitions= 2.27e+10 Memory=  3410.713        t= 3.03e+04 R=   2e+03
-Depth=    7998 States=  6.2e+07 Transitions= 2.32e+10 Memory=  3448.701        t= 3.09e+04 R=   2e+03
-Depth=    7998 States=  6.3e+07 Transitions= 2.35e+10 Memory=  3485.615        t= 3.15e+04 R=   2e+03
-Depth=    7998 States=  6.4e+07 Transitions= 2.38e+10 Memory=  3523.604        t= 3.19e+04 R=   2e+03
-Depth=    7998 States=  6.5e+07 Transitions= 2.42e+10 Memory=  3561.690        t= 3.23e+04 R=   2e+03
-Depth=    7998 States=  6.6e+07 Transitions= 2.46e+10 Memory=  3598.799        t= 3.28e+04 R=   2e+03
-Depth=    7998 States=  6.7e+07 Transitions= 2.49e+10 Memory=  3635.225        t= 3.33e+04 R=   2e+03
-Depth=    7998 States=  6.8e+07 Transitions= 2.53e+10 Memory=  3672.139        t= 3.38e+04 R=   2e+03
-Depth=    7998 States=  6.9e+07 Transitions= 2.56e+10 Memory=  3706.807        t= 3.42e+04 R=   2e+03
-Depth=    7998 States=    7e+07 Transitions= 2.59e+10 Memory=  3743.916        t= 3.47e+04 R=   2e+03
-Depth=    7998 States=  7.1e+07 Transitions= 2.62e+10 Memory=  3781.026        t= 3.51e+04 R=   2e+03
-Depth=    7998 States=  7.2e+07 Transitions= 2.66e+10 Memory=  3818.721        t= 3.56e+04 R=   2e+03
-Depth=    7998 States=  7.3e+07 Transitions= 2.68e+10 Memory=  3855.244        t= 3.59e+04 R=   2e+03
-Depth=    7998 States=  7.4e+07 Transitions= 2.72e+10 Memory=  3892.647        t= 3.64e+04 R=   2e+03
-Depth=    7998 States=  7.5e+07 Transitions= 2.76e+10 Memory=  3930.049        t= 3.69e+04 R=   2e+03
-Depth=    7998 States=  7.6e+07 Transitions= 2.78e+10 Memory=  3966.963        t= 3.72e+04 R=   2e+03
-Depth=    7998 States=  7.7e+07 Transitions= 2.81e+10 Memory=  4003.975        t= 3.77e+04 R=   2e+03
-Depth=    7998 States=  7.8e+07 Transitions= 2.84e+10 Memory=  4041.084        t= 3.8e+04 R=   2e+03
-Depth=    7998 States=  7.9e+07 Transitions= 2.87e+10 Memory=  4078.584        t= 3.84e+04 R=   2e+03
-Depth=    7998 States=    8e+07 Transitions= 2.91e+10 Memory=  4114.815        t= 3.9e+04 R=   2e+03
-Depth=    7998 States=  8.1e+07 Transitions= 2.95e+10 Memory=  4151.240        t= 3.95e+04 R=   2e+03
-Depth=    7998 States=  8.2e+07 Transitions= 2.99e+10 Memory=  4189.131        t=  4e+04 R=   2e+03
-Depth=    7998 States=  8.3e+07 Transitions= 3.03e+10 Memory=  4226.533        t= 4.06e+04 R=   2e+03
-Depth=    7998 States=  8.4e+07 Transitions= 3.07e+10 Memory=  4264.912        t= 4.11e+04 R=   2e+03
-Depth=    7998 States=  8.5e+07 Transitions= 3.11e+10 Memory=  4302.998        t= 4.16e+04 R=   2e+03
-Depth=    7998 States=  8.6e+07 Transitions= 3.15e+10 Memory=  4340.693        t= 4.21e+04 R=   2e+03
-Depth=    7998 States=  8.7e+07 Transitions= 3.19e+10 Memory=  4378.877        t= 4.27e+04 R=   2e+03
-Depth=    7998 States=  8.8e+07 Transitions= 3.23e+10 Memory=  4417.061        t= 4.32e+04 R=   2e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 72 byte, depth reached 7998, errors: 0
- 88716525 states, stored
-3.2432758e+10 states, matched
-3.2521475e+10 transitions (= stored+matched)
-1.8325967e+11 atomic steps
-hash conflicts: 1.7127982e+10 (resolved)
-
-Stats on memory usage (in Megabytes):
- 8460.667      equivalent memory usage for states (stored*(State-vector + overhead))
- 3474.757      actual memory usage for states (compression: 41.07%)
-               state-vector as stored = 13 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
- 4444.111      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 606546 5194 3779 2 ]
-unreached in proctype urcu_reader
-       line 267, ".input.spin", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 275, ".input.spin", state 79, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 104, "(1)"
-       line 248, ".input.spin", state 112, "(1)"
-       line 252, ".input.spin", state 124, "(1)"
-       line 256, ".input.spin", state 132, "(1)"
-       line 406, ".input.spin", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 190, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 223, "(1)"
-       line 433, ".input.spin", state 253, "(1)"
-       line 437, ".input.spin", state 266, "(1)"
-       line 686, ".input.spin", state 287, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 406, ".input.spin", state 294, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 326, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 340, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 359, "(1)"
-       line 433, ".input.spin", state 389, "(1)"
-       line 437, ".input.spin", state 402, "(1)"
-       line 406, ".input.spin", state 423, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 455, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 469, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 488, "(1)"
-       line 433, ".input.spin", state 518, "(1)"
-       line 437, ".input.spin", state 531, "(1)"
-       line 406, ".input.spin", state 554, "cache_dirty_urcu_gp_ctr = 0"
-       line 406, ".input.spin", state 556, "(1)"
-       line 406, ".input.spin", state 557, "(cache_dirty_urcu_gp_ctr)"
-       line 406, ".input.spin", state 557, "else"
-       line 406, ".input.spin", state 560, "(1)"
-       line 410, ".input.spin", state 568, "cache_dirty_urcu_active_readers = 0"
-       line 410, ".input.spin", state 570, "(1)"
-       line 410, ".input.spin", state 571, "(cache_dirty_urcu_active_readers)"
-       line 410, ".input.spin", state 571, "else"
-       line 410, ".input.spin", state 574, "(1)"
-       line 410, ".input.spin", state 575, "(1)"
-       line 410, ".input.spin", state 575, "(1)"
-       line 408, ".input.spin", state 580, "((i<1))"
-       line 408, ".input.spin", state 580, "((i>=1))"
-       line 415, ".input.spin", state 586, "cache_dirty_rcu_ptr = 0"
-       line 415, ".input.spin", state 588, "(1)"
-       line 415, ".input.spin", state 589, "(cache_dirty_rcu_ptr)"
-       line 415, ".input.spin", state 589, "else"
-       line 415, ".input.spin", state 592, "(1)"
-       line 415, ".input.spin", state 593, "(1)"
-       line 415, ".input.spin", state 593, "(1)"
-       line 419, ".input.spin", state 600, "cache_dirty_rcu_data[i] = 0"
-       line 419, ".input.spin", state 602, "(1)"
-       line 419, ".input.spin", state 603, "(cache_dirty_rcu_data[i])"
-       line 419, ".input.spin", state 603, "else"
-       line 419, ".input.spin", state 606, "(1)"
-       line 419, ".input.spin", state 607, "(1)"
-       line 419, ".input.spin", state 607, "(1)"
-       line 417, ".input.spin", state 612, "((i<2))"
-       line 417, ".input.spin", state 612, "((i>=2))"
-       line 424, ".input.spin", state 619, "(1)"
-       line 424, ".input.spin", state 620, "(!(cache_dirty_urcu_gp_ctr))"
-       line 424, ".input.spin", state 620, "else"
-       line 424, ".input.spin", state 623, "(1)"
-       line 424, ".input.spin", state 624, "(1)"
-       line 424, ".input.spin", state 624, "(1)"
-       line 428, ".input.spin", state 632, "(1)"
-       line 428, ".input.spin", state 633, "(!(cache_dirty_urcu_active_readers))"
-       line 428, ".input.spin", state 633, "else"
-       line 428, ".input.spin", state 636, "(1)"
-       line 428, ".input.spin", state 637, "(1)"
-       line 428, ".input.spin", state 637, "(1)"
-       line 426, ".input.spin", state 642, "((i<1))"
-       line 426, ".input.spin", state 642, "((i>=1))"
-       line 433, ".input.spin", state 649, "(1)"
-       line 433, ".input.spin", state 650, "(!(cache_dirty_rcu_ptr))"
-       line 433, ".input.spin", state 650, "else"
-       line 433, ".input.spin", state 653, "(1)"
-       line 433, ".input.spin", state 654, "(1)"
-       line 433, ".input.spin", state 654, "(1)"
-       line 437, ".input.spin", state 662, "(1)"
-       line 437, ".input.spin", state 663, "(!(cache_dirty_rcu_data[i]))"
-       line 437, ".input.spin", state 663, "else"
-       line 437, ".input.spin", state 666, "(1)"
-       line 437, ".input.spin", state 667, "(1)"
-       line 437, ".input.spin", state 667, "(1)"
-       line 435, ".input.spin", state 672, "((i<2))"
-       line 435, ".input.spin", state 672, "((i>=2))"
-       line 445, ".input.spin", state 676, "(1)"
-       line 445, ".input.spin", state 676, "(1)"
-       line 686, ".input.spin", state 679, "cached_urcu_active_readers = (tmp+1)"
-       line 686, ".input.spin", state 680, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 686, ".input.spin", state 681, "(1)"
-       line 406, ".input.spin", state 688, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 720, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 734, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 753, "(1)"
-       line 433, ".input.spin", state 783, "(1)"
-       line 437, ".input.spin", state 796, "(1)"
-       line 406, ".input.spin", state 824, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 856, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 870, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 889, "(1)"
-       line 433, ".input.spin", state 919, "(1)"
-       line 437, ".input.spin", state 932, "(1)"
-       line 406, ".input.spin", state 953, "cache_dirty_urcu_gp_ctr = 0"
-       line 406, ".input.spin", state 955, "(1)"
-       line 406, ".input.spin", state 956, "(cache_dirty_urcu_gp_ctr)"
-       line 406, ".input.spin", state 956, "else"
-       line 406, ".input.spin", state 959, "(1)"
-       line 410, ".input.spin", state 967, "cache_dirty_urcu_active_readers = 0"
-       line 410, ".input.spin", state 969, "(1)"
-       line 410, ".input.spin", state 970, "(cache_dirty_urcu_active_readers)"
-       line 410, ".input.spin", state 970, "else"
-       line 410, ".input.spin", state 973, "(1)"
-       line 410, ".input.spin", state 974, "(1)"
-       line 410, ".input.spin", state 974, "(1)"
-       line 408, ".input.spin", state 979, "((i<1))"
-       line 408, ".input.spin", state 979, "((i>=1))"
-       line 415, ".input.spin", state 985, "cache_dirty_rcu_ptr = 0"
-       line 415, ".input.spin", state 987, "(1)"
-       line 415, ".input.spin", state 988, "(cache_dirty_rcu_ptr)"
-       line 415, ".input.spin", state 988, "else"
-       line 415, ".input.spin", state 991, "(1)"
-       line 415, ".input.spin", state 992, "(1)"
-       line 415, ".input.spin", state 992, "(1)"
-       line 419, ".input.spin", state 999, "cache_dirty_rcu_data[i] = 0"
-       line 419, ".input.spin", state 1001, "(1)"
-       line 419, ".input.spin", state 1002, "(cache_dirty_rcu_data[i])"
-       line 419, ".input.spin", state 1002, "else"
-       line 419, ".input.spin", state 1005, "(1)"
-       line 419, ".input.spin", state 1006, "(1)"
-       line 419, ".input.spin", state 1006, "(1)"
-       line 417, ".input.spin", state 1011, "((i<2))"
-       line 417, ".input.spin", state 1011, "((i>=2))"
-       line 424, ".input.spin", state 1018, "(1)"
-       line 424, ".input.spin", state 1019, "(!(cache_dirty_urcu_gp_ctr))"
-       line 424, ".input.spin", state 1019, "else"
-       line 424, ".input.spin", state 1022, "(1)"
-       line 424, ".input.spin", state 1023, "(1)"
-       line 424, ".input.spin", state 1023, "(1)"
-       line 428, ".input.spin", state 1031, "(1)"
-       line 428, ".input.spin", state 1032, "(!(cache_dirty_urcu_active_readers))"
-       line 428, ".input.spin", state 1032, "else"
-       line 428, ".input.spin", state 1035, "(1)"
-       line 428, ".input.spin", state 1036, "(1)"
-       line 428, ".input.spin", state 1036, "(1)"
-       line 426, ".input.spin", state 1041, "((i<1))"
-       line 426, ".input.spin", state 1041, "((i>=1))"
-       line 433, ".input.spin", state 1048, "(1)"
-       line 433, ".input.spin", state 1049, "(!(cache_dirty_rcu_ptr))"
-       line 433, ".input.spin", state 1049, "else"
-       line 433, ".input.spin", state 1052, "(1)"
-       line 433, ".input.spin", state 1053, "(1)"
-       line 433, ".input.spin", state 1053, "(1)"
-       line 437, ".input.spin", state 1061, "(1)"
-       line 437, ".input.spin", state 1062, "(!(cache_dirty_rcu_data[i]))"
-       line 437, ".input.spin", state 1062, "else"
-       line 437, ".input.spin", state 1065, "(1)"
-       line 437, ".input.spin", state 1066, "(1)"
-       line 437, ".input.spin", state 1066, "(1)"
-       line 435, ".input.spin", state 1071, "((i<2))"
-       line 435, ".input.spin", state 1071, "((i>=2))"
-       line 445, ".input.spin", state 1075, "(1)"
-       line 445, ".input.spin", state 1075, "(1)"
-       line 694, ".input.spin", state 1079, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 406, ".input.spin", state 1084, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 1116, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 1130, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 1149, "(1)"
-       line 433, ".input.spin", state 1179, "(1)"
-       line 437, ".input.spin", state 1192, "(1)"
-       line 406, ".input.spin", state 1216, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 1248, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 1262, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 1281, "(1)"
-       line 433, ".input.spin", state 1311, "(1)"
-       line 437, ".input.spin", state 1324, "(1)"
-       line 406, ".input.spin", state 1349, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 1381, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 1395, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 1414, "(1)"
-       line 433, ".input.spin", state 1444, "(1)"
-       line 437, ".input.spin", state 1457, "(1)"
-       line 406, ".input.spin", state 1478, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 1510, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 1524, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 1543, "(1)"
-       line 433, ".input.spin", state 1573, "(1)"
-       line 437, ".input.spin", state 1586, "(1)"
-       line 406, ".input.spin", state 1612, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 1644, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 1658, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 1677, "(1)"
-       line 433, ".input.spin", state 1707, "(1)"
-       line 437, ".input.spin", state 1720, "(1)"
-       line 406, ".input.spin", state 1741, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 1773, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 1787, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 1806, "(1)"
-       line 433, ".input.spin", state 1836, "(1)"
-       line 437, ".input.spin", state 1849, "(1)"
-       line 406, ".input.spin", state 1873, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 1905, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 1919, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 1938, "(1)"
-       line 433, ".input.spin", state 1968, "(1)"
-       line 437, ".input.spin", state 1981, "(1)"
-       line 733, ".input.spin", state 2002, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 406, ".input.spin", state 2009, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 2041, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 2055, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 2074, "(1)"
-       line 433, ".input.spin", state 2104, "(1)"
-       line 437, ".input.spin", state 2117, "(1)"
-       line 406, ".input.spin", state 2138, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 2170, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 2184, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 2203, "(1)"
-       line 433, ".input.spin", state 2233, "(1)"
-       line 437, ".input.spin", state 2246, "(1)"
-       line 406, ".input.spin", state 2269, "cache_dirty_urcu_gp_ctr = 0"
-       line 406, ".input.spin", state 2271, "(1)"
-       line 406, ".input.spin", state 2272, "(cache_dirty_urcu_gp_ctr)"
-       line 406, ".input.spin", state 2272, "else"
-       line 406, ".input.spin", state 2275, "(1)"
-       line 410, ".input.spin", state 2283, "cache_dirty_urcu_active_readers = 0"
-       line 410, ".input.spin", state 2285, "(1)"
-       line 410, ".input.spin", state 2286, "(cache_dirty_urcu_active_readers)"
-       line 410, ".input.spin", state 2286, "else"
-       line 410, ".input.spin", state 2289, "(1)"
-       line 410, ".input.spin", state 2290, "(1)"
-       line 410, ".input.spin", state 2290, "(1)"
-       line 408, ".input.spin", state 2295, "((i<1))"
-       line 408, ".input.spin", state 2295, "((i>=1))"
-       line 415, ".input.spin", state 2301, "cache_dirty_rcu_ptr = 0"
-       line 415, ".input.spin", state 2303, "(1)"
-       line 415, ".input.spin", state 2304, "(cache_dirty_rcu_ptr)"
-       line 415, ".input.spin", state 2304, "else"
-       line 415, ".input.spin", state 2307, "(1)"
-       line 415, ".input.spin", state 2308, "(1)"
-       line 415, ".input.spin", state 2308, "(1)"
-       line 419, ".input.spin", state 2315, "cache_dirty_rcu_data[i] = 0"
-       line 419, ".input.spin", state 2317, "(1)"
-       line 419, ".input.spin", state 2318, "(cache_dirty_rcu_data[i])"
-       line 419, ".input.spin", state 2318, "else"
-       line 419, ".input.spin", state 2321, "(1)"
-       line 419, ".input.spin", state 2322, "(1)"
-       line 419, ".input.spin", state 2322, "(1)"
-       line 417, ".input.spin", state 2327, "((i<2))"
-       line 417, ".input.spin", state 2327, "((i>=2))"
-       line 424, ".input.spin", state 2334, "(1)"
-       line 424, ".input.spin", state 2335, "(!(cache_dirty_urcu_gp_ctr))"
-       line 424, ".input.spin", state 2335, "else"
-       line 424, ".input.spin", state 2338, "(1)"
-       line 424, ".input.spin", state 2339, "(1)"
-       line 424, ".input.spin", state 2339, "(1)"
-       line 428, ".input.spin", state 2347, "(1)"
-       line 428, ".input.spin", state 2348, "(!(cache_dirty_urcu_active_readers))"
-       line 428, ".input.spin", state 2348, "else"
-       line 428, ".input.spin", state 2351, "(1)"
-       line 428, ".input.spin", state 2352, "(1)"
-       line 428, ".input.spin", state 2352, "(1)"
-       line 426, ".input.spin", state 2357, "((i<1))"
-       line 426, ".input.spin", state 2357, "((i>=1))"
-       line 433, ".input.spin", state 2364, "(1)"
-       line 433, ".input.spin", state 2365, "(!(cache_dirty_rcu_ptr))"
-       line 433, ".input.spin", state 2365, "else"
-       line 433, ".input.spin", state 2368, "(1)"
-       line 433, ".input.spin", state 2369, "(1)"
-       line 433, ".input.spin", state 2369, "(1)"
-       line 437, ".input.spin", state 2377, "(1)"
-       line 437, ".input.spin", state 2378, "(!(cache_dirty_rcu_data[i]))"
-       line 437, ".input.spin", state 2378, "else"
-       line 437, ".input.spin", state 2381, "(1)"
-       line 437, ".input.spin", state 2382, "(1)"
-       line 437, ".input.spin", state 2382, "(1)"
-       line 435, ".input.spin", state 2387, "((i<2))"
-       line 435, ".input.spin", state 2387, "((i>=2))"
-       line 445, ".input.spin", state 2391, "(1)"
-       line 445, ".input.spin", state 2391, "(1)"
-       line 733, ".input.spin", state 2394, "cached_urcu_active_readers = (tmp+1)"
-       line 733, ".input.spin", state 2395, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 733, ".input.spin", state 2396, "(1)"
-       line 406, ".input.spin", state 2403, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 2435, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 2449, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 2468, "(1)"
-       line 433, ".input.spin", state 2498, "(1)"
-       line 437, ".input.spin", state 2511, "(1)"
-       line 406, ".input.spin", state 2538, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 2570, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 2584, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 2603, "(1)"
-       line 433, ".input.spin", state 2633, "(1)"
-       line 437, ".input.spin", state 2646, "(1)"
-       line 406, ".input.spin", state 2667, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, ".input.spin", state 2699, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 2713, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 2732, "(1)"
-       line 433, ".input.spin", state 2762, "(1)"
-       line 437, ".input.spin", state 2775, "(1)"
-       line 244, ".input.spin", state 2808, "(1)"
-       line 252, ".input.spin", state 2828, "(1)"
-       line 256, ".input.spin", state 2836, "(1)"
-       line 244, ".input.spin", state 2851, "(1)"
-       line 252, ".input.spin", state 2871, "(1)"
-       line 256, ".input.spin", state 2879, "(1)"
-       line 928, ".input.spin", state 2896, "-end-"
-       (245 of 2896 states)
-unreached in proctype urcu_writer
-       line 406, ".input.spin", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 410, ".input.spin", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 415, ".input.spin", state 77, "cache_dirty_rcu_ptr = 0"
-       line 424, ".input.spin", state 110, "(1)"
-       line 428, ".input.spin", state 123, "(1)"
-       line 433, ".input.spin", state 140, "(1)"
-       line 267, ".input.spin", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 198, "cache_dirty_rcu_ptr = 0"
-       line 406, ".input.spin", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 410, ".input.spin", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 415, ".input.spin", state 270, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 424, ".input.spin", state 303, "(1)"
-       line 428, ".input.spin", state 316, "(1)"
-       line 433, ".input.spin", state 333, "(1)"
-       line 437, ".input.spin", state 346, "(1)"
-       line 410, ".input.spin", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 415, ".input.spin", state 401, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 428, ".input.spin", state 447, "(1)"
-       line 433, ".input.spin", state 464, "(1)"
-       line 437, ".input.spin", state 477, "(1)"
-       line 410, ".input.spin", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 415, ".input.spin", state 540, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 428, ".input.spin", state 586, "(1)"
-       line 433, ".input.spin", state 603, "(1)"
-       line 437, ".input.spin", state 616, "(1)"
-       line 410, ".input.spin", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 415, ".input.spin", state 669, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 428, ".input.spin", state 715, "(1)"
-       line 433, ".input.spin", state 732, "(1)"
-       line 437, ".input.spin", state 745, "(1)"
-       line 410, ".input.spin", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 415, ".input.spin", state 800, "cache_dirty_rcu_ptr = 0"
-       line 419, ".input.spin", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 428, ".input.spin", state 846, "(1)"
-       line 433, ".input.spin", state 863, "(1)"
-       line 437, ".input.spin", state 876, "(1)"
-       line 267, ".input.spin", state 931, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 940, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 955, "(1)"
-       line 279, ".input.spin", state 962, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 978, "(1)"
-       line 248, ".input.spin", state 986, "(1)"
-       line 252, ".input.spin", state 998, "(1)"
-       line 256, ".input.spin", state 1006, "(1)"
-       line 267, ".input.spin", state 1037, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 1046, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1059, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1068, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1084, "(1)"
-       line 248, ".input.spin", state 1092, "(1)"
-       line 252, ".input.spin", state 1104, "(1)"
-       line 256, ".input.spin", state 1112, "(1)"
-       line 271, ".input.spin", state 1138, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1151, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1160, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1176, "(1)"
-       line 248, ".input.spin", state 1184, "(1)"
-       line 252, ".input.spin", state 1196, "(1)"
-       line 256, ".input.spin", state 1204, "(1)"
-       line 267, ".input.spin", state 1235, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 1244, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1257, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1282, "(1)"
-       line 248, ".input.spin", state 1290, "(1)"
-       line 252, ".input.spin", state 1302, "(1)"
-       line 256, ".input.spin", state 1310, "(1)"
-       line 271, ".input.spin", state 1336, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1349, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1358, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1374, "(1)"
-       line 248, ".input.spin", state 1382, "(1)"
-       line 252, ".input.spin", state 1394, "(1)"
-       line 256, ".input.spin", state 1402, "(1)"
-       line 267, ".input.spin", state 1433, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 1442, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1455, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1464, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1480, "(1)"
-       line 248, ".input.spin", state 1488, "(1)"
-       line 252, ".input.spin", state 1500, "(1)"
-       line 256, ".input.spin", state 1508, "(1)"
-       line 271, ".input.spin", state 1534, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1547, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1556, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1572, "(1)"
-       line 248, ".input.spin", state 1580, "(1)"
-       line 252, ".input.spin", state 1592, "(1)"
-       line 256, ".input.spin", state 1600, "(1)"
-       line 267, ".input.spin", state 1631, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, ".input.spin", state 1640, "cache_dirty_urcu_active_readers = 0"
-       line 275, ".input.spin", state 1653, "cache_dirty_rcu_ptr = 0"
-       line 279, ".input.spin", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 244, ".input.spin", state 1678, "(1)"
-       line 248, ".input.spin", state 1686, "(1)"
-       line 252, ".input.spin", state 1698, "(1)"
-       line 256, ".input.spin", state 1706, "(1)"
-       line 1303, ".input.spin", state 1722, "-end-"
-       (103 of 1722 states)
-unreached in proctype :init:
-       (0 of 28 states)
-
-pan: elapsed time 4.35e+04 seconds
-pan: rate 2039.1355 states/second
-pan: avg transition delay 1.3378e-06 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/asserts.spin.input b/formal-model/urcu-controldataflow-alpha-ipi/asserts.spin.input
deleted file mode 100644 (file)
index ca70e6c..0000000
+++ /dev/null
@@ -1,1339 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/references.txt b/formal-model/urcu-controldataflow-alpha-ipi/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu.sh b/formal-model/urcu-controldataflow-alpha-ipi/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu.spin b/formal-model/urcu-controldataflow-alpha-ipi/urcu.spin
deleted file mode 100644 (file)
index 8075506..0000000
+++ /dev/null
@@ -1,1321 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free.log b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free.log
deleted file mode 100644 (file)
index 6b6e98b..0000000
+++ /dev/null
@@ -1,560 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1361)
-Depth=    8053 States=    1e+06 Transitions= 1.77e+08 Memory=   513.029        t=    265 R=   4e+03
-Depth=    9797 States=    2e+06 Transitions= 3.71e+08 Memory=   559.416        t=    575 R=   3e+03
-Depth=    9797 States=    3e+06 Transitions=  5.8e+08 Memory=   605.901        t=    922 R=   3e+03
-pan: resizing hashtable to -w22..  done
-Depth=    9797 States=    4e+06 Transitions=  7.6e+08 Memory=   682.920        t= 1.2e+03 R=   3e+03
-Depth=    9797 States=    5e+06 Transitions= 9.44e+08 Memory=   728.721        t= 1.48e+03 R=   3e+03
-Depth=    9797 States=    6e+06 Transitions= 1.35e+09 Memory=   775.303        t= 2.13e+03 R=   3e+03
-Depth=    9797 States=    7e+06 Transitions= 1.79e+09 Memory=   821.885        t= 2.85e+03 R=   2e+03
-Depth=    9797 States=    8e+06 Transitions= 2.11e+09 Memory=   868.076        t= 3.36e+03 R=   2e+03
-Depth=    9797 States=    9e+06 Transitions= 2.49e+09 Memory=   914.658        t= 4.01e+03 R=   2e+03
-pan: resizing hashtable to -w24..  done
-Depth=    9797 States=    1e+07 Transitions= 2.83e+09 Memory=  1085.529        t= 4.52e+03 R=   2e+03
-Depth=    9797 States=  1.1e+07 Transitions=  3.2e+09 Memory=  1132.697        t= 5.08e+03 R=   2e+03
-Depth=    9797 States=  1.2e+07 Transitions= 3.59e+09 Memory=  1179.670        t= 5.69e+03 R=   2e+03
-Depth=    9797 States=  1.3e+07 Transitions= 3.81e+09 Memory=  1226.838        t= 6.03e+03 R=   2e+03
-Depth=    9797 States=  1.4e+07 Transitions= 4.12e+09 Memory=  1273.029        t= 6.5e+03 R=   2e+03
-Depth=    9797 States=  1.5e+07 Transitions= 4.35e+09 Memory=  1319.123        t= 6.85e+03 R=   2e+03
-Depth=    9797 States=  1.6e+07 Transitions= 4.88e+09 Memory=  1365.608        t= 7.7e+03 R=   2e+03
-Depth=    9797 States=  1.7e+07 Transitions= 5.67e+09 Memory=  1411.506        t= 8.95e+03 R=   2e+03
-Depth=    9797 States=  1.8e+07 Transitions= 6.31e+09 Memory=  1458.479        t= 9.98e+03 R=   2e+03
-Depth=    9797 States=  1.9e+07 Transitions= 6.77e+09 Memory=  1504.963        t= 1.07e+04 R=   2e+03
-Depth=    9797 States=    2e+07 Transitions= 7.09e+09 Memory=  1552.131        t= 1.12e+04 R=   2e+03
-Depth=    9797 States=  2.1e+07 Transitions= 7.48e+09 Memory=  1598.615        t= 1.18e+04 R=   2e+03
-Depth=    9797 States=  2.2e+07 Transitions= 7.94e+09 Memory=  1645.295        t= 1.26e+04 R=   2e+03
-Depth=    9797 States=  2.3e+07 Transitions= 8.37e+09 Memory=  1691.486        t= 1.33e+04 R=   2e+03
-Depth=    9797 States=  2.4e+07 Transitions= 8.77e+09 Memory=  1737.678        t= 1.39e+04 R=   2e+03
-Depth=    9797 States=  2.5e+07 Transitions= 9.22e+09 Memory=  1783.967        t= 1.46e+04 R=   2e+03
-Depth=    9797 States=  2.6e+07 Transitions= 9.48e+09 Memory=  1830.061        t= 1.5e+04 R=   2e+03
-Depth=    9797 States=  2.7e+07 Transitions= 9.85e+09 Memory=  1876.350        t= 1.56e+04 R=   2e+03
-Depth=    9797 States=  2.8e+07 Transitions= 1.02e+10 Memory=  1922.639        t= 1.62e+04 R=   2e+03
-Depth=    9919 States=  2.9e+07 Transitions= 1.06e+10 Memory=  1968.537        t= 1.68e+04 R=   2e+03
-Depth=    9963 States=    3e+07 Transitions= 1.09e+10 Memory=  2014.338        t= 1.74e+04 R=   2e+03
-Depth=    9963 States=  3.1e+07 Transitions= 1.13e+10 Memory=  2060.334        t= 1.79e+04 R=   2e+03
-Depth=    9963 States=  3.2e+07 Transitions= 1.16e+10 Memory=  2106.233        t= 1.85e+04 R=   2e+03
-Depth=    9963 States=  3.3e+07 Transitions= 1.19e+10 Memory=  2152.033        t= 1.9e+04 R=   2e+03
-Depth=    9963 States=  3.4e+07 Transitions= 1.23e+10 Memory=  2198.029        t= 1.96e+04 R=   2e+03
-pan: resizing hashtable to -w26..  done
-Depth=    9963 States=  3.5e+07 Transitions= 1.26e+10 Memory=  2739.912        t=  2e+04 R=   2e+03
-Depth=    9963 States=  3.6e+07 Transitions= 1.29e+10 Memory=  2785.713        t= 2.06e+04 R=   2e+03
-Depth=    9963 States=  3.7e+07 Transitions= 1.32e+10 Memory=  2831.416        t= 2.1e+04 R=   2e+03
-Depth=    9963 States=  3.8e+07 Transitions= 1.35e+10 Memory=  2877.217        t= 2.15e+04 R=   2e+03
-Depth=    9963 States=  3.9e+07 Transitions= 1.39e+10 Memory=  2923.018        t= 2.2e+04 R=   2e+03
-Depth=    9963 States=    4e+07 Transitions= 1.41e+10 Memory=  2968.818        t= 2.24e+04 R=   2e+03
-Depth=    9963 States=  4.1e+07 Transitions= 1.44e+10 Memory=  3014.717        t= 2.29e+04 R=   2e+03
-Depth=    9963 States=  4.2e+07 Transitions= 1.48e+10 Memory=  3061.299        t= 2.35e+04 R=   2e+03
-Depth=    9963 States=  4.3e+07 Transitions= 1.51e+10 Memory=  3107.295        t= 2.4e+04 R=   2e+03
-Depth=    9963 States=  4.4e+07 Transitions= 1.56e+10 Memory=  3153.779        t= 2.48e+04 R=   2e+03
-Depth=    9963 States=  4.5e+07 Transitions= 1.59e+10 Memory=  3199.873        t= 2.53e+04 R=   2e+03
-Depth=    9963 States=  4.6e+07 Transitions= 1.64e+10 Memory=  3246.553        t= 2.59e+04 R=   2e+03
-Depth=    9963 States=  4.7e+07 Transitions= 1.68e+10 Memory=  3293.623        t= 2.66e+04 R=   2e+03
-Depth=    9963 States=  4.8e+07 Transitions= 1.72e+10 Memory=  3339.912        t= 2.72e+04 R=   2e+03
-Depth=    9963 States=  4.9e+07 Transitions= 1.76e+10 Memory=  3386.494        t= 2.78e+04 R=   2e+03
-Depth=    9963 States=    5e+07 Transitions= 1.78e+10 Memory=  3433.076        t= 2.82e+04 R=   2e+03
-Depth=    9963 States=  5.1e+07 Transitions= 1.81e+10 Memory=  3479.072        t= 2.87e+04 R=   2e+03
-Depth=    9963 States=  5.2e+07 Transitions= 1.84e+10 Memory=  3525.068        t= 2.91e+04 R=   2e+03
-Depth=    9963 States=  5.3e+07 Transitions= 1.87e+10 Memory=  3570.869        t= 2.95e+04 R=   2e+03
-Depth=    9963 States=  5.4e+07 Transitions= 1.93e+10 Memory=  3616.865        t= 3.05e+04 R=   2e+03
-Depth=    9963 States=  5.5e+07 Transitions= 2.01e+10 Memory=  3662.764        t= 3.17e+04 R=   2e+03
-Depth=    9963 States=  5.6e+07 Transitions= 2.07e+10 Memory=  3709.541        t= 3.27e+04 R=   2e+03
-Depth=    9963 States=  5.7e+07 Transitions= 2.11e+10 Memory=  3755.635        t= 3.34e+04 R=   2e+03
-Depth=    9963 States=  5.8e+07 Transitions= 2.15e+10 Memory=  3802.315        t= 3.4e+04 R=   2e+03
-Depth=    9963 States=  5.9e+07 Transitions= 2.18e+10 Memory=  3848.408        t= 3.45e+04 R=   2e+03
-Depth=    9963 States=    6e+07 Transitions= 2.22e+10 Memory=  3894.404        t= 3.52e+04 R=   2e+03
-Depth=    9963 States=  6.1e+07 Transitions= 2.27e+10 Memory=  3940.596        t= 3.59e+04 R=   2e+03
-Depth=    9963 States=  6.2e+07 Transitions= 2.32e+10 Memory=  3986.494        t= 3.66e+04 R=   2e+03
-Depth=    9963 States=  6.3e+07 Transitions= 2.35e+10 Memory=  4032.295        t= 3.73e+04 R=   2e+03
-Depth=    9963 States=  6.4e+07 Transitions= 2.38e+10 Memory=  4078.193        t= 3.77e+04 R=   2e+03
-Depth=    9963 States=  6.5e+07 Transitions= 2.42e+10 Memory=  4124.092        t= 3.83e+04 R=   2e+03
-Depth=    9963 States=  6.6e+07 Transitions= 2.46e+10 Memory=  4169.990        t= 3.89e+04 R=   2e+03
-Depth=    9963 States=  6.7e+07 Transitions= 2.49e+10 Memory=  4215.791        t= 3.94e+04 R=   2e+03
-Depth=    9963 States=  6.8e+07 Transitions= 2.53e+10 Memory=  4261.494        t=  4e+04 R=   2e+03
-Depth=    9963 States=  6.9e+07 Transitions= 2.56e+10 Memory=  4307.295        t= 4.04e+04 R=   2e+03
-Depth=    9963 States=    7e+07 Transitions= 2.59e+10 Memory=  4353.096        t= 4.11e+04 R=   2e+03
-Depth=    9963 States=  7.1e+07 Transitions= 2.62e+10 Memory=  4398.897        t= 4.15e+04 R=   2e+03
-Depth=    9963 States=  7.2e+07 Transitions= 2.66e+10 Memory=  4444.697        t= 4.21e+04 R=   2e+03
-Depth=    9963 States=  7.3e+07 Transitions= 2.68e+10 Memory=  4490.498        t= 4.25e+04 R=   2e+03
-Depth=    9963 States=  7.4e+07 Transitions= 2.72e+10 Memory=  4536.299        t= 4.31e+04 R=   2e+03
-Depth=    9963 States=  7.5e+07 Transitions= 2.76e+10 Memory=  4582.002        t= 4.37e+04 R=   2e+03
-Depth=    9963 States=  7.6e+07 Transitions= 2.78e+10 Memory=  4627.803        t= 4.41e+04 R=   2e+03
-Depth=    9963 States=  7.7e+07 Transitions= 2.81e+10 Memory=  4673.604        t= 4.46e+04 R=   2e+03
-Depth=    9963 States=  7.8e+07 Transitions= 2.84e+10 Memory=  4719.404        t= 4.5e+04 R=   2e+03
-Depth=    9963 States=  7.9e+07 Transitions= 2.87e+10 Memory=  4765.205        t= 4.55e+04 R=   2e+03
-Depth=    9963 States=    8e+07 Transitions= 2.91e+10 Memory=  4811.006        t= 4.61e+04 R=   2e+03
-Depth=    9963 States=  8.1e+07 Transitions= 2.95e+10 Memory=  4856.807        t= 4.68e+04 R=   2e+03
-Depth=    9963 States=  8.2e+07 Transitions= 2.99e+10 Memory=  4902.608        t= 4.74e+04 R=   2e+03
-Depth=    9963 States=  8.3e+07 Transitions= 3.03e+10 Memory=  4948.701        t= 4.8e+04 R=   2e+03
-Depth=    9963 States=  8.4e+07 Transitions= 3.07e+10 Memory=  4995.283        t= 4.87e+04 R=   2e+03
-Depth=    9963 States=  8.5e+07 Transitions= 3.11e+10 Memory=  5041.084        t= 4.93e+04 R=   2e+03
-Depth=    9963 States=  8.6e+07 Transitions= 3.15e+10 Memory=  5087.276        t= 4.98e+04 R=   2e+03
-Depth=    9963 States=  8.7e+07 Transitions= 3.19e+10 Memory=  5133.369        t= 5.06e+04 R=   2e+03
-Depth=    9963 States=  8.8e+07 Transitions= 3.23e+10 Memory=  5179.170        t= 5.11e+04 R=   2e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 9963, errors: 0
- 88716525 states, stored
-3.243293e+10 states, matched
-3.2521646e+10 transitions (= stored+matched)
-1.8325967e+11 atomic steps
-hash conflicts: 1.7134961e+10 (resolved)
-
-Stats on memory usage (in Megabytes):
- 9814.374      equivalent memory usage for states (stored*(State-vector + overhead))
- 4243.430      actual memory usage for states (compression: 43.24%)
-               state-vector as stored = 14 byte + 36 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
- 5212.276      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 606546 5194 3779 2 1 ]
-unreached in proctype urcu_reader
-       line 267, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 275, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 104, "(1)"
-       line 248, "pan.___", state 112, "(1)"
-       line 252, "pan.___", state 124, "(1)"
-       line 256, "pan.___", state 132, "(1)"
-       line 406, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 223, "(1)"
-       line 433, "pan.___", state 253, "(1)"
-       line 437, "pan.___", state 266, "(1)"
-       line 686, "pan.___", state 287, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 406, "pan.___", state 294, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 326, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 340, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 359, "(1)"
-       line 433, "pan.___", state 389, "(1)"
-       line 437, "pan.___", state 402, "(1)"
-       line 406, "pan.___", state 423, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 455, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 469, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 488, "(1)"
-       line 433, "pan.___", state 518, "(1)"
-       line 437, "pan.___", state 531, "(1)"
-       line 406, "pan.___", state 554, "cache_dirty_urcu_gp_ctr = 0"
-       line 406, "pan.___", state 556, "(1)"
-       line 406, "pan.___", state 557, "(cache_dirty_urcu_gp_ctr)"
-       line 406, "pan.___", state 557, "else"
-       line 406, "pan.___", state 560, "(1)"
-       line 410, "pan.___", state 568, "cache_dirty_urcu_active_readers = 0"
-       line 410, "pan.___", state 570, "(1)"
-       line 410, "pan.___", state 571, "(cache_dirty_urcu_active_readers)"
-       line 410, "pan.___", state 571, "else"
-       line 410, "pan.___", state 574, "(1)"
-       line 410, "pan.___", state 575, "(1)"
-       line 410, "pan.___", state 575, "(1)"
-       line 408, "pan.___", state 580, "((i<1))"
-       line 408, "pan.___", state 580, "((i>=1))"
-       line 415, "pan.___", state 586, "cache_dirty_rcu_ptr = 0"
-       line 415, "pan.___", state 588, "(1)"
-       line 415, "pan.___", state 589, "(cache_dirty_rcu_ptr)"
-       line 415, "pan.___", state 589, "else"
-       line 415, "pan.___", state 592, "(1)"
-       line 415, "pan.___", state 593, "(1)"
-       line 415, "pan.___", state 593, "(1)"
-       line 419, "pan.___", state 600, "cache_dirty_rcu_data[i] = 0"
-       line 419, "pan.___", state 602, "(1)"
-       line 419, "pan.___", state 603, "(cache_dirty_rcu_data[i])"
-       line 419, "pan.___", state 603, "else"
-       line 419, "pan.___", state 606, "(1)"
-       line 419, "pan.___", state 607, "(1)"
-       line 419, "pan.___", state 607, "(1)"
-       line 417, "pan.___", state 612, "((i<2))"
-       line 417, "pan.___", state 612, "((i>=2))"
-       line 424, "pan.___", state 619, "(1)"
-       line 424, "pan.___", state 620, "(!(cache_dirty_urcu_gp_ctr))"
-       line 424, "pan.___", state 620, "else"
-       line 424, "pan.___", state 623, "(1)"
-       line 424, "pan.___", state 624, "(1)"
-       line 424, "pan.___", state 624, "(1)"
-       line 428, "pan.___", state 632, "(1)"
-       line 428, "pan.___", state 633, "(!(cache_dirty_urcu_active_readers))"
-       line 428, "pan.___", state 633, "else"
-       line 428, "pan.___", state 636, "(1)"
-       line 428, "pan.___", state 637, "(1)"
-       line 428, "pan.___", state 637, "(1)"
-       line 426, "pan.___", state 642, "((i<1))"
-       line 426, "pan.___", state 642, "((i>=1))"
-       line 433, "pan.___", state 649, "(1)"
-       line 433, "pan.___", state 650, "(!(cache_dirty_rcu_ptr))"
-       line 433, "pan.___", state 650, "else"
-       line 433, "pan.___", state 653, "(1)"
-       line 433, "pan.___", state 654, "(1)"
-       line 433, "pan.___", state 654, "(1)"
-       line 437, "pan.___", state 662, "(1)"
-       line 437, "pan.___", state 663, "(!(cache_dirty_rcu_data[i]))"
-       line 437, "pan.___", state 663, "else"
-       line 437, "pan.___", state 666, "(1)"
-       line 437, "pan.___", state 667, "(1)"
-       line 437, "pan.___", state 667, "(1)"
-       line 435, "pan.___", state 672, "((i<2))"
-       line 435, "pan.___", state 672, "((i>=2))"
-       line 445, "pan.___", state 676, "(1)"
-       line 445, "pan.___", state 676, "(1)"
-       line 686, "pan.___", state 679, "cached_urcu_active_readers = (tmp+1)"
-       line 686, "pan.___", state 680, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 686, "pan.___", state 681, "(1)"
-       line 406, "pan.___", state 688, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 720, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 734, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 753, "(1)"
-       line 433, "pan.___", state 783, "(1)"
-       line 437, "pan.___", state 796, "(1)"
-       line 406, "pan.___", state 824, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 856, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 870, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 889, "(1)"
-       line 433, "pan.___", state 919, "(1)"
-       line 437, "pan.___", state 932, "(1)"
-       line 406, "pan.___", state 953, "cache_dirty_urcu_gp_ctr = 0"
-       line 406, "pan.___", state 955, "(1)"
-       line 406, "pan.___", state 956, "(cache_dirty_urcu_gp_ctr)"
-       line 406, "pan.___", state 956, "else"
-       line 406, "pan.___", state 959, "(1)"
-       line 410, "pan.___", state 967, "cache_dirty_urcu_active_readers = 0"
-       line 410, "pan.___", state 969, "(1)"
-       line 410, "pan.___", state 970, "(cache_dirty_urcu_active_readers)"
-       line 410, "pan.___", state 970, "else"
-       line 410, "pan.___", state 973, "(1)"
-       line 410, "pan.___", state 974, "(1)"
-       line 410, "pan.___", state 974, "(1)"
-       line 408, "pan.___", state 979, "((i<1))"
-       line 408, "pan.___", state 979, "((i>=1))"
-       line 415, "pan.___", state 985, "cache_dirty_rcu_ptr = 0"
-       line 415, "pan.___", state 987, "(1)"
-       line 415, "pan.___", state 988, "(cache_dirty_rcu_ptr)"
-       line 415, "pan.___", state 988, "else"
-       line 415, "pan.___", state 991, "(1)"
-       line 415, "pan.___", state 992, "(1)"
-       line 415, "pan.___", state 992, "(1)"
-       line 419, "pan.___", state 999, "cache_dirty_rcu_data[i] = 0"
-       line 419, "pan.___", state 1001, "(1)"
-       line 419, "pan.___", state 1002, "(cache_dirty_rcu_data[i])"
-       line 419, "pan.___", state 1002, "else"
-       line 419, "pan.___", state 1005, "(1)"
-       line 419, "pan.___", state 1006, "(1)"
-       line 419, "pan.___", state 1006, "(1)"
-       line 417, "pan.___", state 1011, "((i<2))"
-       line 417, "pan.___", state 1011, "((i>=2))"
-       line 424, "pan.___", state 1018, "(1)"
-       line 424, "pan.___", state 1019, "(!(cache_dirty_urcu_gp_ctr))"
-       line 424, "pan.___", state 1019, "else"
-       line 424, "pan.___", state 1022, "(1)"
-       line 424, "pan.___", state 1023, "(1)"
-       line 424, "pan.___", state 1023, "(1)"
-       line 428, "pan.___", state 1031, "(1)"
-       line 428, "pan.___", state 1032, "(!(cache_dirty_urcu_active_readers))"
-       line 428, "pan.___", state 1032, "else"
-       line 428, "pan.___", state 1035, "(1)"
-       line 428, "pan.___", state 1036, "(1)"
-       line 428, "pan.___", state 1036, "(1)"
-       line 426, "pan.___", state 1041, "((i<1))"
-       line 426, "pan.___", state 1041, "((i>=1))"
-       line 433, "pan.___", state 1048, "(1)"
-       line 433, "pan.___", state 1049, "(!(cache_dirty_rcu_ptr))"
-       line 433, "pan.___", state 1049, "else"
-       line 433, "pan.___", state 1052, "(1)"
-       line 433, "pan.___", state 1053, "(1)"
-       line 433, "pan.___", state 1053, "(1)"
-       line 437, "pan.___", state 1061, "(1)"
-       line 437, "pan.___", state 1062, "(!(cache_dirty_rcu_data[i]))"
-       line 437, "pan.___", state 1062, "else"
-       line 437, "pan.___", state 1065, "(1)"
-       line 437, "pan.___", state 1066, "(1)"
-       line 437, "pan.___", state 1066, "(1)"
-       line 435, "pan.___", state 1071, "((i<2))"
-       line 435, "pan.___", state 1071, "((i>=2))"
-       line 445, "pan.___", state 1075, "(1)"
-       line 445, "pan.___", state 1075, "(1)"
-       line 694, "pan.___", state 1079, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 406, "pan.___", state 1084, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 1116, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 1130, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 1149, "(1)"
-       line 433, "pan.___", state 1179, "(1)"
-       line 437, "pan.___", state 1192, "(1)"
-       line 406, "pan.___", state 1216, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 1248, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 1262, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 1281, "(1)"
-       line 433, "pan.___", state 1311, "(1)"
-       line 437, "pan.___", state 1324, "(1)"
-       line 406, "pan.___", state 1349, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 1381, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 1395, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 1414, "(1)"
-       line 433, "pan.___", state 1444, "(1)"
-       line 437, "pan.___", state 1457, "(1)"
-       line 406, "pan.___", state 1478, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 1510, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 1524, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 1543, "(1)"
-       line 433, "pan.___", state 1573, "(1)"
-       line 437, "pan.___", state 1586, "(1)"
-       line 406, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 1644, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 1658, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 1677, "(1)"
-       line 433, "pan.___", state 1707, "(1)"
-       line 437, "pan.___", state 1720, "(1)"
-       line 406, "pan.___", state 1741, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 1773, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 1787, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 1806, "(1)"
-       line 433, "pan.___", state 1836, "(1)"
-       line 437, "pan.___", state 1849, "(1)"
-       line 406, "pan.___", state 1873, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 1905, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 1919, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 1938, "(1)"
-       line 433, "pan.___", state 1968, "(1)"
-       line 437, "pan.___", state 1981, "(1)"
-       line 733, "pan.___", state 2002, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 406, "pan.___", state 2009, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 2041, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 2055, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 2074, "(1)"
-       line 433, "pan.___", state 2104, "(1)"
-       line 437, "pan.___", state 2117, "(1)"
-       line 406, "pan.___", state 2138, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 2170, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 2184, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 2203, "(1)"
-       line 433, "pan.___", state 2233, "(1)"
-       line 437, "pan.___", state 2246, "(1)"
-       line 406, "pan.___", state 2269, "cache_dirty_urcu_gp_ctr = 0"
-       line 406, "pan.___", state 2271, "(1)"
-       line 406, "pan.___", state 2272, "(cache_dirty_urcu_gp_ctr)"
-       line 406, "pan.___", state 2272, "else"
-       line 406, "pan.___", state 2275, "(1)"
-       line 410, "pan.___", state 2283, "cache_dirty_urcu_active_readers = 0"
-       line 410, "pan.___", state 2285, "(1)"
-       line 410, "pan.___", state 2286, "(cache_dirty_urcu_active_readers)"
-       line 410, "pan.___", state 2286, "else"
-       line 410, "pan.___", state 2289, "(1)"
-       line 410, "pan.___", state 2290, "(1)"
-       line 410, "pan.___", state 2290, "(1)"
-       line 408, "pan.___", state 2295, "((i<1))"
-       line 408, "pan.___", state 2295, "((i>=1))"
-       line 415, "pan.___", state 2301, "cache_dirty_rcu_ptr = 0"
-       line 415, "pan.___", state 2303, "(1)"
-       line 415, "pan.___", state 2304, "(cache_dirty_rcu_ptr)"
-       line 415, "pan.___", state 2304, "else"
-       line 415, "pan.___", state 2307, "(1)"
-       line 415, "pan.___", state 2308, "(1)"
-       line 415, "pan.___", state 2308, "(1)"
-       line 419, "pan.___", state 2315, "cache_dirty_rcu_data[i] = 0"
-       line 419, "pan.___", state 2317, "(1)"
-       line 419, "pan.___", state 2318, "(cache_dirty_rcu_data[i])"
-       line 419, "pan.___", state 2318, "else"
-       line 419, "pan.___", state 2321, "(1)"
-       line 419, "pan.___", state 2322, "(1)"
-       line 419, "pan.___", state 2322, "(1)"
-       line 417, "pan.___", state 2327, "((i<2))"
-       line 417, "pan.___", state 2327, "((i>=2))"
-       line 424, "pan.___", state 2334, "(1)"
-       line 424, "pan.___", state 2335, "(!(cache_dirty_urcu_gp_ctr))"
-       line 424, "pan.___", state 2335, "else"
-       line 424, "pan.___", state 2338, "(1)"
-       line 424, "pan.___", state 2339, "(1)"
-       line 424, "pan.___", state 2339, "(1)"
-       line 428, "pan.___", state 2347, "(1)"
-       line 428, "pan.___", state 2348, "(!(cache_dirty_urcu_active_readers))"
-       line 428, "pan.___", state 2348, "else"
-       line 428, "pan.___", state 2351, "(1)"
-       line 428, "pan.___", state 2352, "(1)"
-       line 428, "pan.___", state 2352, "(1)"
-       line 426, "pan.___", state 2357, "((i<1))"
-       line 426, "pan.___", state 2357, "((i>=1))"
-       line 433, "pan.___", state 2364, "(1)"
-       line 433, "pan.___", state 2365, "(!(cache_dirty_rcu_ptr))"
-       line 433, "pan.___", state 2365, "else"
-       line 433, "pan.___", state 2368, "(1)"
-       line 433, "pan.___", state 2369, "(1)"
-       line 433, "pan.___", state 2369, "(1)"
-       line 437, "pan.___", state 2377, "(1)"
-       line 437, "pan.___", state 2378, "(!(cache_dirty_rcu_data[i]))"
-       line 437, "pan.___", state 2378, "else"
-       line 437, "pan.___", state 2381, "(1)"
-       line 437, "pan.___", state 2382, "(1)"
-       line 437, "pan.___", state 2382, "(1)"
-       line 435, "pan.___", state 2387, "((i<2))"
-       line 435, "pan.___", state 2387, "((i>=2))"
-       line 445, "pan.___", state 2391, "(1)"
-       line 445, "pan.___", state 2391, "(1)"
-       line 733, "pan.___", state 2394, "cached_urcu_active_readers = (tmp+1)"
-       line 733, "pan.___", state 2395, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 733, "pan.___", state 2396, "(1)"
-       line 406, "pan.___", state 2403, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 2435, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 2449, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 2468, "(1)"
-       line 433, "pan.___", state 2498, "(1)"
-       line 437, "pan.___", state 2511, "(1)"
-       line 406, "pan.___", state 2538, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 2570, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 2584, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 2603, "(1)"
-       line 433, "pan.___", state 2633, "(1)"
-       line 437, "pan.___", state 2646, "(1)"
-       line 406, "pan.___", state 2667, "cache_dirty_urcu_gp_ctr = 0"
-       line 415, "pan.___", state 2699, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 2713, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 2732, "(1)"
-       line 433, "pan.___", state 2762, "(1)"
-       line 437, "pan.___", state 2775, "(1)"
-       line 244, "pan.___", state 2808, "(1)"
-       line 252, "pan.___", state 2828, "(1)"
-       line 256, "pan.___", state 2836, "(1)"
-       line 244, "pan.___", state 2851, "(1)"
-       line 252, "pan.___", state 2871, "(1)"
-       line 256, "pan.___", state 2879, "(1)"
-       line 928, "pan.___", state 2896, "-end-"
-       (245 of 2896 states)
-unreached in proctype urcu_writer
-       line 406, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 410, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 415, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 424, "pan.___", state 110, "(1)"
-       line 428, "pan.___", state 123, "(1)"
-       line 433, "pan.___", state 140, "(1)"
-       line 267, "pan.___", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 198, "cache_dirty_rcu_ptr = 0"
-       line 406, "pan.___", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 410, "pan.___", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 415, "pan.___", state 270, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 424, "pan.___", state 303, "(1)"
-       line 428, "pan.___", state 316, "(1)"
-       line 433, "pan.___", state 333, "(1)"
-       line 437, "pan.___", state 346, "(1)"
-       line 410, "pan.___", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 415, "pan.___", state 401, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 428, "pan.___", state 447, "(1)"
-       line 433, "pan.___", state 464, "(1)"
-       line 437, "pan.___", state 477, "(1)"
-       line 410, "pan.___", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 415, "pan.___", state 540, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 428, "pan.___", state 586, "(1)"
-       line 433, "pan.___", state 603, "(1)"
-       line 437, "pan.___", state 616, "(1)"
-       line 410, "pan.___", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 415, "pan.___", state 669, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 428, "pan.___", state 715, "(1)"
-       line 433, "pan.___", state 732, "(1)"
-       line 437, "pan.___", state 745, "(1)"
-       line 410, "pan.___", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 415, "pan.___", state 800, "cache_dirty_rcu_ptr = 0"
-       line 419, "pan.___", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 428, "pan.___", state 846, "(1)"
-       line 433, "pan.___", state 863, "(1)"
-       line 437, "pan.___", state 876, "(1)"
-       line 267, "pan.___", state 931, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 940, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 955, "(1)"
-       line 279, "pan.___", state 962, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 978, "(1)"
-       line 248, "pan.___", state 986, "(1)"
-       line 252, "pan.___", state 998, "(1)"
-       line 256, "pan.___", state 1006, "(1)"
-       line 267, "pan.___", state 1037, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 1046, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1059, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1068, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1084, "(1)"
-       line 248, "pan.___", state 1092, "(1)"
-       line 252, "pan.___", state 1104, "(1)"
-       line 256, "pan.___", state 1112, "(1)"
-       line 271, "pan.___", state 1138, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1151, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1160, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1176, "(1)"
-       line 248, "pan.___", state 1184, "(1)"
-       line 252, "pan.___", state 1196, "(1)"
-       line 256, "pan.___", state 1204, "(1)"
-       line 267, "pan.___", state 1235, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 1244, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1257, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1282, "(1)"
-       line 248, "pan.___", state 1290, "(1)"
-       line 252, "pan.___", state 1302, "(1)"
-       line 256, "pan.___", state 1310, "(1)"
-       line 271, "pan.___", state 1336, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1349, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1358, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1374, "(1)"
-       line 248, "pan.___", state 1382, "(1)"
-       line 252, "pan.___", state 1394, "(1)"
-       line 256, "pan.___", state 1402, "(1)"
-       line 267, "pan.___", state 1433, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 1442, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1455, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1464, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1480, "(1)"
-       line 248, "pan.___", state 1488, "(1)"
-       line 252, "pan.___", state 1500, "(1)"
-       line 256, "pan.___", state 1508, "(1)"
-       line 271, "pan.___", state 1534, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1547, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1556, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1572, "(1)"
-       line 248, "pan.___", state 1580, "(1)"
-       line 252, "pan.___", state 1592, "(1)"
-       line 256, "pan.___", state 1600, "(1)"
-       line 267, "pan.___", state 1631, "cache_dirty_urcu_gp_ctr = 0"
-       line 271, "pan.___", state 1640, "cache_dirty_urcu_active_readers = 0"
-       line 275, "pan.___", state 1653, "cache_dirty_rcu_ptr = 0"
-       line 279, "pan.___", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 244, "pan.___", state 1678, "(1)"
-       line 248, "pan.___", state 1686, "(1)"
-       line 252, "pan.___", state 1698, "(1)"
-       line 256, "pan.___", state 1706, "(1)"
-       line 1303, "pan.___", state 1722, "-end-"
-       (103 of 1722 states)
-unreached in proctype :init:
-       (0 of 28 states)
-unreached in proctype :never:
-       line 1366, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 5.15e+04 seconds
-pan: rate 1721.7944 states/second
-pan: avg transition delay 1.5843e-06 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free.ltl b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free.ltl
deleted file mode 100644 (file)
index 6be1be9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!read_poison)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free.spin.input b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free.spin.input
deleted file mode 100644 (file)
index ca70e6c..0000000
+++ /dev/null
@@ -1,1339 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_nested.define b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.define b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.define
deleted file mode 100644 (file)
index d99d793..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_MB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.log b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.log
deleted file mode 100644 (file)
index fbb91fe..0000000
+++ /dev/null
@@ -1,824 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1362)
-Depth=    9193 States=    1e+06 Transitions= 2.02e+08 Memory=   513.615        t=    308 R=   3e+03
-Depth=    9193 States=    2e+06 Transitions= 4.02e+08 Memory=   560.100        t=    617 R=   3e+03
-pan: claim violated! (at depth 1482)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 9193, errors: 1
-  2638623 states, stored
-5.0906949e+08 states, matched
-5.1170812e+08 transitions (= stored+matched)
-2.7495835e+09 atomic steps
-hash conflicts: 3.3187407e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
-  291.901      equivalent memory usage for states (stored*(State-vector + overhead))
-  123.793      actual memory usage for states (compression: 42.41%)
-               state-vector as stored = 13 byte + 36 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  589.494      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 39337 2870 221 2 2 ]
-unreached in proctype urcu_reader
-       line 894, "pan.___", state 12, "((i<1))"
-       line 894, "pan.___", state 12, "((i>=1))"
-       line 268, "pan.___", state 61, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 83, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 92, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 108, "(1)"
-       line 249, "pan.___", state 116, "(1)"
-       line 253, "pan.___", state 128, "(1)"
-       line 257, "pan.___", state 136, "(1)"
-       line 407, "pan.___", state 162, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 194, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 208, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 227, "(1)"
-       line 434, "pan.___", state 257, "(1)"
-       line 438, "pan.___", state 270, "(1)"
-       line 696, "pan.___", state 291, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 407, "pan.___", state 298, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 330, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 344, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 363, "(1)"
-       line 434, "pan.___", state 393, "(1)"
-       line 438, "pan.___", state 406, "(1)"
-       line 407, "pan.___", state 427, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 459, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 473, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 492, "(1)"
-       line 434, "pan.___", state 522, "(1)"
-       line 438, "pan.___", state 535, "(1)"
-       line 407, "pan.___", state 558, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 560, "(1)"
-       line 407, "pan.___", state 561, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 561, "else"
-       line 407, "pan.___", state 564, "(1)"
-       line 411, "pan.___", state 572, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 574, "(1)"
-       line 411, "pan.___", state 575, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 575, "else"
-       line 411, "pan.___", state 578, "(1)"
-       line 411, "pan.___", state 579, "(1)"
-       line 411, "pan.___", state 579, "(1)"
-       line 409, "pan.___", state 584, "((i<1))"
-       line 409, "pan.___", state 584, "((i>=1))"
-       line 416, "pan.___", state 590, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 592, "(1)"
-       line 416, "pan.___", state 593, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 593, "else"
-       line 416, "pan.___", state 596, "(1)"
-       line 416, "pan.___", state 597, "(1)"
-       line 416, "pan.___", state 597, "(1)"
-       line 420, "pan.___", state 604, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 606, "(1)"
-       line 420, "pan.___", state 607, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 607, "else"
-       line 420, "pan.___", state 610, "(1)"
-       line 420, "pan.___", state 611, "(1)"
-       line 420, "pan.___", state 611, "(1)"
-       line 418, "pan.___", state 616, "((i<2))"
-       line 418, "pan.___", state 616, "((i>=2))"
-       line 425, "pan.___", state 623, "(1)"
-       line 425, "pan.___", state 624, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 624, "else"
-       line 425, "pan.___", state 627, "(1)"
-       line 425, "pan.___", state 628, "(1)"
-       line 425, "pan.___", state 628, "(1)"
-       line 429, "pan.___", state 636, "(1)"
-       line 429, "pan.___", state 637, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 637, "else"
-       line 429, "pan.___", state 640, "(1)"
-       line 429, "pan.___", state 641, "(1)"
-       line 429, "pan.___", state 641, "(1)"
-       line 427, "pan.___", state 646, "((i<1))"
-       line 427, "pan.___", state 646, "((i>=1))"
-       line 434, "pan.___", state 653, "(1)"
-       line 434, "pan.___", state 654, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 654, "else"
-       line 434, "pan.___", state 657, "(1)"
-       line 434, "pan.___", state 658, "(1)"
-       line 434, "pan.___", state 658, "(1)"
-       line 438, "pan.___", state 666, "(1)"
-       line 438, "pan.___", state 667, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 667, "else"
-       line 438, "pan.___", state 670, "(1)"
-       line 438, "pan.___", state 671, "(1)"
-       line 438, "pan.___", state 671, "(1)"
-       line 436, "pan.___", state 676, "((i<2))"
-       line 436, "pan.___", state 676, "((i>=2))"
-       line 446, "pan.___", state 680, "(1)"
-       line 446, "pan.___", state 680, "(1)"
-       line 696, "pan.___", state 683, "cached_urcu_active_readers = (tmp+1)"
-       line 696, "pan.___", state 684, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 696, "pan.___", state 685, "(1)"
-       line 407, "pan.___", state 692, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 724, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 738, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 757, "(1)"
-       line 434, "pan.___", state 787, "(1)"
-       line 438, "pan.___", state 800, "(1)"
-       line 407, "pan.___", state 828, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 860, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 874, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 893, "(1)"
-       line 434, "pan.___", state 923, "(1)"
-       line 438, "pan.___", state 936, "(1)"
-       line 407, "pan.___", state 957, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 959, "(1)"
-       line 407, "pan.___", state 960, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 960, "else"
-       line 407, "pan.___", state 963, "(1)"
-       line 411, "pan.___", state 971, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 973, "(1)"
-       line 411, "pan.___", state 974, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 974, "else"
-       line 411, "pan.___", state 977, "(1)"
-       line 411, "pan.___", state 978, "(1)"
-       line 411, "pan.___", state 978, "(1)"
-       line 409, "pan.___", state 983, "((i<1))"
-       line 409, "pan.___", state 983, "((i>=1))"
-       line 416, "pan.___", state 989, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 991, "(1)"
-       line 416, "pan.___", state 992, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 992, "else"
-       line 416, "pan.___", state 995, "(1)"
-       line 416, "pan.___", state 996, "(1)"
-       line 416, "pan.___", state 996, "(1)"
-       line 420, "pan.___", state 1003, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 1005, "(1)"
-       line 420, "pan.___", state 1006, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 1006, "else"
-       line 420, "pan.___", state 1009, "(1)"
-       line 420, "pan.___", state 1010, "(1)"
-       line 420, "pan.___", state 1010, "(1)"
-       line 418, "pan.___", state 1015, "((i<2))"
-       line 418, "pan.___", state 1015, "((i>=2))"
-       line 425, "pan.___", state 1022, "(1)"
-       line 425, "pan.___", state 1023, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 1023, "else"
-       line 425, "pan.___", state 1026, "(1)"
-       line 425, "pan.___", state 1027, "(1)"
-       line 425, "pan.___", state 1027, "(1)"
-       line 429, "pan.___", state 1035, "(1)"
-       line 429, "pan.___", state 1036, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 1036, "else"
-       line 429, "pan.___", state 1039, "(1)"
-       line 429, "pan.___", state 1040, "(1)"
-       line 429, "pan.___", state 1040, "(1)"
-       line 427, "pan.___", state 1045, "((i<1))"
-       line 427, "pan.___", state 1045, "((i>=1))"
-       line 434, "pan.___", state 1052, "(1)"
-       line 434, "pan.___", state 1053, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 1053, "else"
-       line 434, "pan.___", state 1056, "(1)"
-       line 434, "pan.___", state 1057, "(1)"
-       line 434, "pan.___", state 1057, "(1)"
-       line 438, "pan.___", state 1065, "(1)"
-       line 438, "pan.___", state 1066, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 1066, "else"
-       line 438, "pan.___", state 1069, "(1)"
-       line 438, "pan.___", state 1070, "(1)"
-       line 438, "pan.___", state 1070, "(1)"
-       line 436, "pan.___", state 1075, "((i<2))"
-       line 436, "pan.___", state 1075, "((i>=2))"
-       line 446, "pan.___", state 1079, "(1)"
-       line 446, "pan.___", state 1079, "(1)"
-       line 704, "pan.___", state 1083, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 407, "pan.___", state 1088, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1120, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1134, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1153, "(1)"
-       line 434, "pan.___", state 1183, "(1)"
-       line 438, "pan.___", state 1196, "(1)"
-       line 407, "pan.___", state 1220, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1252, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1285, "(1)"
-       line 434, "pan.___", state 1315, "(1)"
-       line 438, "pan.___", state 1328, "(1)"
-       line 407, "pan.___", state 1353, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1385, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1399, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1418, "(1)"
-       line 434, "pan.___", state 1448, "(1)"
-       line 438, "pan.___", state 1461, "(1)"
-       line 407, "pan.___", state 1482, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1514, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1528, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1547, "(1)"
-       line 434, "pan.___", state 1577, "(1)"
-       line 438, "pan.___", state 1590, "(1)"
-       line 407, "pan.___", state 1616, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1648, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1681, "(1)"
-       line 434, "pan.___", state 1711, "(1)"
-       line 438, "pan.___", state 1724, "(1)"
-       line 407, "pan.___", state 1745, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1777, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1791, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1810, "(1)"
-       line 434, "pan.___", state 1840, "(1)"
-       line 438, "pan.___", state 1853, "(1)"
-       line 407, "pan.___", state 1877, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1909, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1923, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1942, "(1)"
-       line 434, "pan.___", state 1972, "(1)"
-       line 438, "pan.___", state 1985, "(1)"
-       line 743, "pan.___", state 2006, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 407, "pan.___", state 2013, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2045, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2059, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2078, "(1)"
-       line 434, "pan.___", state 2108, "(1)"
-       line 438, "pan.___", state 2121, "(1)"
-       line 407, "pan.___", state 2142, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2174, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2188, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2207, "(1)"
-       line 434, "pan.___", state 2237, "(1)"
-       line 438, "pan.___", state 2250, "(1)"
-       line 407, "pan.___", state 2273, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 2275, "(1)"
-       line 407, "pan.___", state 2276, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 2276, "else"
-       line 407, "pan.___", state 2279, "(1)"
-       line 411, "pan.___", state 2287, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 2289, "(1)"
-       line 411, "pan.___", state 2290, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 2290, "else"
-       line 411, "pan.___", state 2293, "(1)"
-       line 411, "pan.___", state 2294, "(1)"
-       line 411, "pan.___", state 2294, "(1)"
-       line 409, "pan.___", state 2299, "((i<1))"
-       line 409, "pan.___", state 2299, "((i>=1))"
-       line 416, "pan.___", state 2305, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 2307, "(1)"
-       line 416, "pan.___", state 2308, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 2308, "else"
-       line 416, "pan.___", state 2311, "(1)"
-       line 416, "pan.___", state 2312, "(1)"
-       line 416, "pan.___", state 2312, "(1)"
-       line 420, "pan.___", state 2319, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 2321, "(1)"
-       line 420, "pan.___", state 2322, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 2322, "else"
-       line 420, "pan.___", state 2325, "(1)"
-       line 420, "pan.___", state 2326, "(1)"
-       line 420, "pan.___", state 2326, "(1)"
-       line 418, "pan.___", state 2331, "((i<2))"
-       line 418, "pan.___", state 2331, "((i>=2))"
-       line 425, "pan.___", state 2338, "(1)"
-       line 425, "pan.___", state 2339, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 2339, "else"
-       line 425, "pan.___", state 2342, "(1)"
-       line 425, "pan.___", state 2343, "(1)"
-       line 425, "pan.___", state 2343, "(1)"
-       line 429, "pan.___", state 2351, "(1)"
-       line 429, "pan.___", state 2352, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 2352, "else"
-       line 429, "pan.___", state 2355, "(1)"
-       line 429, "pan.___", state 2356, "(1)"
-       line 429, "pan.___", state 2356, "(1)"
-       line 427, "pan.___", state 2361, "((i<1))"
-       line 427, "pan.___", state 2361, "((i>=1))"
-       line 434, "pan.___", state 2368, "(1)"
-       line 434, "pan.___", state 2369, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 2369, "else"
-       line 434, "pan.___", state 2372, "(1)"
-       line 434, "pan.___", state 2373, "(1)"
-       line 434, "pan.___", state 2373, "(1)"
-       line 438, "pan.___", state 2381, "(1)"
-       line 438, "pan.___", state 2382, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 2382, "else"
-       line 438, "pan.___", state 2385, "(1)"
-       line 438, "pan.___", state 2386, "(1)"
-       line 438, "pan.___", state 2386, "(1)"
-       line 436, "pan.___", state 2391, "((i<2))"
-       line 436, "pan.___", state 2391, "((i>=2))"
-       line 446, "pan.___", state 2395, "(1)"
-       line 446, "pan.___", state 2395, "(1)"
-       line 743, "pan.___", state 2398, "cached_urcu_active_readers = (tmp+1)"
-       line 743, "pan.___", state 2399, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 743, "pan.___", state 2400, "(1)"
-       line 407, "pan.___", state 2407, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2439, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2453, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2472, "(1)"
-       line 434, "pan.___", state 2502, "(1)"
-       line 438, "pan.___", state 2515, "(1)"
-       line 407, "pan.___", state 2542, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2574, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2588, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2607, "(1)"
-       line 434, "pan.___", state 2637, "(1)"
-       line 438, "pan.___", state 2650, "(1)"
-       line 407, "pan.___", state 2671, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2703, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2717, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2736, "(1)"
-       line 434, "pan.___", state 2766, "(1)"
-       line 438, "pan.___", state 2779, "(1)"
-       line 245, "pan.___", state 2812, "(1)"
-       line 253, "pan.___", state 2832, "(1)"
-       line 257, "pan.___", state 2840, "(1)"
-       line 245, "pan.___", state 2855, "(1)"
-       line 253, "pan.___", state 2875, "(1)"
-       line 257, "pan.___", state 2883, "(1)"
-       line 929, "pan.___", state 2900, "-end-"
-       (246 of 2900 states)
-unreached in proctype urcu_writer
-       line 1018, "pan.___", state 12, "((i<1))"
-       line 1018, "pan.___", state 12, "((i>=1))"
-       line 407, "pan.___", state 47, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 53, "(1)"
-       line 411, "pan.___", state 61, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 67, "(1)"
-       line 411, "pan.___", state 68, "(1)"
-       line 411, "pan.___", state 68, "(1)"
-       line 409, "pan.___", state 73, "((i<1))"
-       line 409, "pan.___", state 73, "((i>=1))"
-       line 416, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 85, "(1)"
-       line 416, "pan.___", state 86, "(1)"
-       line 416, "pan.___", state 86, "(1)"
-       line 420, "pan.___", state 99, "(1)"
-       line 420, "pan.___", state 100, "(1)"
-       line 420, "pan.___", state 100, "(1)"
-       line 418, "pan.___", state 105, "((i<2))"
-       line 418, "pan.___", state 105, "((i>=2))"
-       line 425, "pan.___", state 112, "(1)"
-       line 425, "pan.___", state 113, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 113, "else"
-       line 425, "pan.___", state 116, "(1)"
-       line 425, "pan.___", state 117, "(1)"
-       line 425, "pan.___", state 117, "(1)"
-       line 429, "pan.___", state 125, "(1)"
-       line 429, "pan.___", state 126, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 126, "else"
-       line 429, "pan.___", state 129, "(1)"
-       line 429, "pan.___", state 130, "(1)"
-       line 429, "pan.___", state 130, "(1)"
-       line 427, "pan.___", state 135, "((i<1))"
-       line 427, "pan.___", state 135, "((i>=1))"
-       line 434, "pan.___", state 142, "(1)"
-       line 434, "pan.___", state 143, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 143, "else"
-       line 434, "pan.___", state 146, "(1)"
-       line 434, "pan.___", state 147, "(1)"
-       line 434, "pan.___", state 147, "(1)"
-       line 438, "pan.___", state 155, "(1)"
-       line 438, "pan.___", state 156, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 156, "else"
-       line 438, "pan.___", state 159, "(1)"
-       line 438, "pan.___", state 160, "(1)"
-       line 438, "pan.___", state 160, "(1)"
-       line 436, "pan.___", state 165, "((i<2))"
-       line 436, "pan.___", state 165, "((i>=2))"
-       line 446, "pan.___", state 169, "(1)"
-       line 446, "pan.___", state 169, "(1)"
-       line 268, "pan.___", state 178, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 187, "cache_dirty_urcu_active_readers = 0"
-       line 270, "pan.___", state 195, "((i<1))"
-       line 270, "pan.___", state 195, "((i>=1))"
-       line 276, "pan.___", state 200, "cache_dirty_rcu_ptr = 0"
-       line 1088, "pan.___", state 228, "old_data = cached_rcu_ptr"
-       line 1099, "pan.___", state 232, "_proc_urcu_writer = (_proc_urcu_writer|(1<<4))"
-       line 407, "pan.___", state 240, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 246, "(1)"
-       line 411, "pan.___", state 254, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 260, "(1)"
-       line 411, "pan.___", state 261, "(1)"
-       line 411, "pan.___", state 261, "(1)"
-       line 409, "pan.___", state 266, "((i<1))"
-       line 409, "pan.___", state 266, "((i>=1))"
-       line 416, "pan.___", state 274, "(1)"
-       line 416, "pan.___", state 275, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 275, "else"
-       line 416, "pan.___", state 278, "(1)"
-       line 416, "pan.___", state 279, "(1)"
-       line 416, "pan.___", state 279, "(1)"
-       line 420, "pan.___", state 286, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 292, "(1)"
-       line 420, "pan.___", state 293, "(1)"
-       line 420, "pan.___", state 293, "(1)"
-       line 418, "pan.___", state 298, "((i<2))"
-       line 418, "pan.___", state 298, "((i>=2))"
-       line 425, "pan.___", state 305, "(1)"
-       line 425, "pan.___", state 306, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 306, "else"
-       line 425, "pan.___", state 309, "(1)"
-       line 425, "pan.___", state 310, "(1)"
-       line 425, "pan.___", state 310, "(1)"
-       line 429, "pan.___", state 318, "(1)"
-       line 429, "pan.___", state 319, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 319, "else"
-       line 429, "pan.___", state 322, "(1)"
-       line 429, "pan.___", state 323, "(1)"
-       line 429, "pan.___", state 323, "(1)"
-       line 427, "pan.___", state 328, "((i<1))"
-       line 427, "pan.___", state 328, "((i>=1))"
-       line 434, "pan.___", state 335, "(1)"
-       line 434, "pan.___", state 336, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 336, "else"
-       line 434, "pan.___", state 339, "(1)"
-       line 434, "pan.___", state 340, "(1)"
-       line 434, "pan.___", state 340, "(1)"
-       line 438, "pan.___", state 348, "(1)"
-       line 438, "pan.___", state 349, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 349, "else"
-       line 438, "pan.___", state 352, "(1)"
-       line 438, "pan.___", state 353, "(1)"
-       line 438, "pan.___", state 353, "(1)"
-       line 436, "pan.___", state 358, "((i<2))"
-       line 436, "pan.___", state 358, "((i>=2))"
-       line 446, "pan.___", state 362, "(1)"
-       line 446, "pan.___", state 362, "(1)"
-       line 407, "pan.___", state 373, "(1)"
-       line 407, "pan.___", state 374, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 374, "else"
-       line 407, "pan.___", state 377, "(1)"
-       line 411, "pan.___", state 385, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 391, "(1)"
-       line 411, "pan.___", state 392, "(1)"
-       line 411, "pan.___", state 392, "(1)"
-       line 409, "pan.___", state 397, "((i<1))"
-       line 409, "pan.___", state 397, "((i>=1))"
-       line 416, "pan.___", state 403, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 409, "(1)"
-       line 416, "pan.___", state 410, "(1)"
-       line 416, "pan.___", state 410, "(1)"
-       line 420, "pan.___", state 417, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 423, "(1)"
-       line 420, "pan.___", state 424, "(1)"
-       line 420, "pan.___", state 424, "(1)"
-       line 418, "pan.___", state 429, "((i<2))"
-       line 418, "pan.___", state 429, "((i>=2))"
-       line 425, "pan.___", state 436, "(1)"
-       line 425, "pan.___", state 437, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 437, "else"
-       line 425, "pan.___", state 440, "(1)"
-       line 425, "pan.___", state 441, "(1)"
-       line 425, "pan.___", state 441, "(1)"
-       line 429, "pan.___", state 449, "(1)"
-       line 429, "pan.___", state 450, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 450, "else"
-       line 429, "pan.___", state 453, "(1)"
-       line 429, "pan.___", state 454, "(1)"
-       line 429, "pan.___", state 454, "(1)"
-       line 427, "pan.___", state 459, "((i<1))"
-       line 427, "pan.___", state 459, "((i>=1))"
-       line 434, "pan.___", state 466, "(1)"
-       line 434, "pan.___", state 467, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 467, "else"
-       line 434, "pan.___", state 470, "(1)"
-       line 434, "pan.___", state 471, "(1)"
-       line 434, "pan.___", state 471, "(1)"
-       line 438, "pan.___", state 479, "(1)"
-       line 438, "pan.___", state 480, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 480, "else"
-       line 438, "pan.___", state 483, "(1)"
-       line 438, "pan.___", state 484, "(1)"
-       line 438, "pan.___", state 484, "(1)"
-       line 436, "pan.___", state 489, "((i<2))"
-       line 436, "pan.___", state 489, "((i>=2))"
-       line 446, "pan.___", state 493, "(1)"
-       line 446, "pan.___", state 493, "(1)"
-       line 1153, "pan.___", state 504, "_proc_urcu_writer = (_proc_urcu_writer&~((1<<9)))"
-       line 1158, "pan.___", state 505, "_proc_urcu_writer = (_proc_urcu_writer&~(((1<<8)|(1<<7))))"
-       line 407, "pan.___", state 510, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 516, "(1)"
-       line 411, "pan.___", state 524, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 530, "(1)"
-       line 411, "pan.___", state 531, "(1)"
-       line 411, "pan.___", state 531, "(1)"
-       line 409, "pan.___", state 536, "((i<1))"
-       line 409, "pan.___", state 536, "((i>=1))"
-       line 416, "pan.___", state 542, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 548, "(1)"
-       line 416, "pan.___", state 549, "(1)"
-       line 416, "pan.___", state 549, "(1)"
-       line 420, "pan.___", state 556, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 562, "(1)"
-       line 420, "pan.___", state 563, "(1)"
-       line 420, "pan.___", state 563, "(1)"
-       line 418, "pan.___", state 568, "((i<2))"
-       line 418, "pan.___", state 568, "((i>=2))"
-       line 425, "pan.___", state 575, "(1)"
-       line 425, "pan.___", state 576, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 576, "else"
-       line 425, "pan.___", state 579, "(1)"
-       line 425, "pan.___", state 580, "(1)"
-       line 425, "pan.___", state 580, "(1)"
-       line 429, "pan.___", state 588, "(1)"
-       line 429, "pan.___", state 589, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 589, "else"
-       line 429, "pan.___", state 592, "(1)"
-       line 429, "pan.___", state 593, "(1)"
-       line 429, "pan.___", state 593, "(1)"
-       line 427, "pan.___", state 598, "((i<1))"
-       line 427, "pan.___", state 598, "((i>=1))"
-       line 434, "pan.___", state 605, "(1)"
-       line 434, "pan.___", state 606, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 606, "else"
-       line 434, "pan.___", state 609, "(1)"
-       line 434, "pan.___", state 610, "(1)"
-       line 434, "pan.___", state 610, "(1)"
-       line 438, "pan.___", state 618, "(1)"
-       line 438, "pan.___", state 619, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 619, "else"
-       line 438, "pan.___", state 622, "(1)"
-       line 438, "pan.___", state 623, "(1)"
-       line 438, "pan.___", state 623, "(1)"
-       line 446, "pan.___", state 632, "(1)"
-       line 446, "pan.___", state 632, "(1)"
-       line 407, "pan.___", state 639, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 653, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 671, "cache_dirty_rcu_ptr = 0"
-       line 425, "pan.___", state 704, "(1)"
-       line 429, "pan.___", state 717, "(1)"
-       line 434, "pan.___", state 734, "(1)"
-       line 438, "pan.___", state 747, "(1)"
-       line 411, "pan.___", state 784, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 802, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 816, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 848, "(1)"
-       line 434, "pan.___", state 865, "(1)"
-       line 438, "pan.___", state 878, "(1)"
-       line 1235, "pan.___", state 905, "_proc_urcu_writer = (_proc_urcu_writer|(1<<13))"
-       line 268, "pan.___", state 933, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 935, "(1)"
-       line 272, "pan.___", state 942, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 944, "(1)"
-       line 272, "pan.___", state 945, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 945, "else"
-       line 270, "pan.___", state 950, "((i<1))"
-       line 270, "pan.___", state 950, "((i>=1))"
-       line 276, "pan.___", state 955, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 957, "(1)"
-       line 276, "pan.___", state 958, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 958, "else"
-       line 280, "pan.___", state 964, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 966, "(1)"
-       line 280, "pan.___", state 967, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 967, "else"
-       line 278, "pan.___", state 972, "((i<2))"
-       line 278, "pan.___", state 972, "((i>=2))"
-       line 245, "pan.___", state 980, "(1)"
-       line 249, "pan.___", state 988, "(1)"
-       line 249, "pan.___", state 989, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 989, "else"
-       line 247, "pan.___", state 994, "((i<1))"
-       line 247, "pan.___", state 994, "((i>=1))"
-       line 253, "pan.___", state 1000, "(1)"
-       line 253, "pan.___", state 1001, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1001, "else"
-       line 257, "pan.___", state 1008, "(1)"
-       line 257, "pan.___", state 1009, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1009, "else"
-       line 262, "pan.___", state 1018, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1018, "else"
-       line 1289, "pan.___", state 1034, "((i<1))"
-       line 1289, "pan.___", state 1034, "((i>=1))"
-       line 268, "pan.___", state 1039, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1041, "(1)"
-       line 272, "pan.___", state 1048, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1050, "(1)"
-       line 272, "pan.___", state 1051, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1051, "else"
-       line 270, "pan.___", state 1056, "((i<1))"
-       line 270, "pan.___", state 1056, "((i>=1))"
-       line 276, "pan.___", state 1061, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1063, "(1)"
-       line 276, "pan.___", state 1064, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1064, "else"
-       line 280, "pan.___", state 1070, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1072, "(1)"
-       line 280, "pan.___", state 1073, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1073, "else"
-       line 278, "pan.___", state 1078, "((i<2))"
-       line 278, "pan.___", state 1078, "((i>=2))"
-       line 245, "pan.___", state 1086, "(1)"
-       line 249, "pan.___", state 1094, "(1)"
-       line 249, "pan.___", state 1095, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1095, "else"
-       line 247, "pan.___", state 1100, "((i<1))"
-       line 247, "pan.___", state 1100, "((i>=1))"
-       line 253, "pan.___", state 1106, "(1)"
-       line 253, "pan.___", state 1107, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1107, "else"
-       line 257, "pan.___", state 1114, "(1)"
-       line 257, "pan.___", state 1115, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1115, "else"
-       line 262, "pan.___", state 1124, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1124, "else"
-       line 295, "pan.___", state 1126, "(cache_dirty_urcu_gp_ctr)"
-       line 295, "pan.___", state 1126, "else"
-       line 1289, "pan.___", state 1127, "(cache_dirty_urcu_gp_ctr)"
-       line 1289, "pan.___", state 1127, "else"
-       line 268, "pan.___", state 1131, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1133, "(1)"
-       line 272, "pan.___", state 1140, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1142, "(1)"
-       line 272, "pan.___", state 1143, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1143, "else"
-       line 270, "pan.___", state 1148, "((i<1))"
-       line 270, "pan.___", state 1148, "((i>=1))"
-       line 276, "pan.___", state 1153, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1155, "(1)"
-       line 276, "pan.___", state 1156, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1156, "else"
-       line 280, "pan.___", state 1162, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1164, "(1)"
-       line 280, "pan.___", state 1165, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1165, "else"
-       line 278, "pan.___", state 1170, "((i<2))"
-       line 278, "pan.___", state 1170, "((i>=2))"
-       line 245, "pan.___", state 1178, "(1)"
-       line 249, "pan.___", state 1186, "(1)"
-       line 249, "pan.___", state 1187, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1187, "else"
-       line 247, "pan.___", state 1192, "((i<1))"
-       line 247, "pan.___", state 1192, "((i>=1))"
-       line 253, "pan.___", state 1198, "(1)"
-       line 253, "pan.___", state 1199, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1199, "else"
-       line 257, "pan.___", state 1206, "(1)"
-       line 257, "pan.___", state 1207, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1207, "else"
-       line 262, "pan.___", state 1216, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1216, "else"
-       line 1293, "pan.___", state 1219, "i = 0"
-       line 1293, "pan.___", state 1221, "reader_barrier = 1"
-       line 1293, "pan.___", state 1232, "((i<1))"
-       line 1293, "pan.___", state 1232, "((i>=1))"
-       line 268, "pan.___", state 1237, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1239, "(1)"
-       line 272, "pan.___", state 1246, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1248, "(1)"
-       line 272, "pan.___", state 1249, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1249, "else"
-       line 270, "pan.___", state 1254, "((i<1))"
-       line 270, "pan.___", state 1254, "((i>=1))"
-       line 276, "pan.___", state 1259, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1261, "(1)"
-       line 276, "pan.___", state 1262, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1262, "else"
-       line 280, "pan.___", state 1268, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1270, "(1)"
-       line 280, "pan.___", state 1271, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1271, "else"
-       line 278, "pan.___", state 1276, "((i<2))"
-       line 278, "pan.___", state 1276, "((i>=2))"
-       line 245, "pan.___", state 1284, "(1)"
-       line 249, "pan.___", state 1292, "(1)"
-       line 249, "pan.___", state 1293, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1293, "else"
-       line 247, "pan.___", state 1298, "((i<1))"
-       line 247, "pan.___", state 1298, "((i>=1))"
-       line 253, "pan.___", state 1304, "(1)"
-       line 253, "pan.___", state 1305, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1305, "else"
-       line 257, "pan.___", state 1312, "(1)"
-       line 257, "pan.___", state 1313, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1313, "else"
-       line 262, "pan.___", state 1322, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1322, "else"
-       line 295, "pan.___", state 1324, "(cache_dirty_urcu_gp_ctr)"
-       line 295, "pan.___", state 1324, "else"
-       line 1293, "pan.___", state 1325, "(cache_dirty_urcu_gp_ctr)"
-       line 1293, "pan.___", state 1325, "else"
-       line 272, "pan.___", state 1338, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1351, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1360, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1376, "(1)"
-       line 249, "pan.___", state 1384, "(1)"
-       line 253, "pan.___", state 1396, "(1)"
-       line 257, "pan.___", state 1404, "(1)"
-       line 268, "pan.___", state 1435, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1444, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1457, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1466, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1482, "(1)"
-       line 249, "pan.___", state 1490, "(1)"
-       line 253, "pan.___", state 1502, "(1)"
-       line 257, "pan.___", state 1510, "(1)"
-       line 268, "pan.___", state 1527, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1529, "(1)"
-       line 272, "pan.___", state 1536, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1538, "(1)"
-       line 272, "pan.___", state 1539, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1539, "else"
-       line 270, "pan.___", state 1544, "((i<1))"
-       line 270, "pan.___", state 1544, "((i>=1))"
-       line 276, "pan.___", state 1549, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1551, "(1)"
-       line 276, "pan.___", state 1552, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1552, "else"
-       line 280, "pan.___", state 1558, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1560, "(1)"
-       line 280, "pan.___", state 1561, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1561, "else"
-       line 278, "pan.___", state 1566, "((i<2))"
-       line 278, "pan.___", state 1566, "((i>=2))"
-       line 245, "pan.___", state 1574, "(1)"
-       line 249, "pan.___", state 1582, "(1)"
-       line 249, "pan.___", state 1583, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1583, "else"
-       line 247, "pan.___", state 1588, "((i<1))"
-       line 247, "pan.___", state 1588, "((i>=1))"
-       line 253, "pan.___", state 1594, "(1)"
-       line 253, "pan.___", state 1595, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1595, "else"
-       line 257, "pan.___", state 1602, "(1)"
-       line 257, "pan.___", state 1603, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1603, "else"
-       line 262, "pan.___", state 1612, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1612, "else"
-       line 1300, "pan.___", state 1615, "i = 0"
-       line 1300, "pan.___", state 1617, "reader_barrier = 1"
-       line 1300, "pan.___", state 1628, "((i<1))"
-       line 1300, "pan.___", state 1628, "((i>=1))"
-       line 268, "pan.___", state 1633, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1635, "(1)"
-       line 272, "pan.___", state 1642, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1644, "(1)"
-       line 272, "pan.___", state 1645, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1645, "else"
-       line 270, "pan.___", state 1650, "((i<1))"
-       line 270, "pan.___", state 1650, "((i>=1))"
-       line 276, "pan.___", state 1655, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1657, "(1)"
-       line 276, "pan.___", state 1658, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1658, "else"
-       line 280, "pan.___", state 1664, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1666, "(1)"
-       line 280, "pan.___", state 1667, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1667, "else"
-       line 278, "pan.___", state 1672, "((i<2))"
-       line 278, "pan.___", state 1672, "((i>=2))"
-       line 245, "pan.___", state 1680, "(1)"
-       line 249, "pan.___", state 1688, "(1)"
-       line 249, "pan.___", state 1689, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1689, "else"
-       line 247, "pan.___", state 1694, "((i<1))"
-       line 247, "pan.___", state 1694, "((i>=1))"
-       line 253, "pan.___", state 1700, "(1)"
-       line 253, "pan.___", state 1701, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1701, "else"
-       line 257, "pan.___", state 1708, "(1)"
-       line 257, "pan.___", state 1709, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1709, "else"
-       line 262, "pan.___", state 1718, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1718, "else"
-       line 295, "pan.___", state 1720, "(cache_dirty_urcu_gp_ctr)"
-       line 295, "pan.___", state 1720, "else"
-       line 1300, "pan.___", state 1721, "(cache_dirty_urcu_gp_ctr)"
-       line 1300, "pan.___", state 1721, "else"
-       line 1304, "pan.___", state 1724, "-end-"
-       (312 of 1724 states)
-unreached in proctype :init:
-       line 1319, "pan.___", state 13, "((i<1))"
-       line 1319, "pan.___", state 13, "((i>=1))"
-       (1 of 28 states)
-unreached in proctype :never:
-       line 1367, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 792 seconds
-pan: rate 3330.8797 states/second
-pan: avg transition delay 1.5481e-06 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.spin.input b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index b35bf7b..0000000
+++ /dev/null
@@ -1,1340 +0,0 @@
-#define NO_MB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 915575e..0000000
+++ /dev/null
@@ -1,1485 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4654
-2:2:2900
-3:2:2905
-4:2:2909
-5:2:2917
-6:2:2921
-7:2:2925
-8:0:4654
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:4654
-16:3:4624
-17:3:4627
-18:3:4634
-19:3:4641
-20:3:4644
-21:3:4648
-22:3:4649
-23:0:4654
-24:3:4651
-25:0:4654
-26:2:2929
-27:0:4654
-28:2:2935
-29:0:4654
-30:2:2936
-31:0:4654
-32:2:2938
-33:0:4654
-34:2:2939
-35:0:4654
-36:2:2940
-37:0:4654
-38:2:2941
-39:0:4654
-40:2:2942
-41:2:2943
-42:2:2947
-43:2:2948
-44:2:2956
-45:2:2957
-46:2:2961
-47:2:2962
-48:2:2970
-49:2:2975
-50:2:2979
-51:2:2980
-52:2:2988
-53:2:2989
-54:2:2993
-55:2:2994
-56:2:2988
-57:2:2989
-58:2:2993
-59:2:2994
-60:2:3002
-61:2:3007
-62:2:3008
-63:2:3019
-64:2:3020
-65:2:3021
-66:2:3032
-67:2:3037
-68:2:3038
-69:2:3049
-70:2:3050
-71:2:3051
-72:2:3049
-73:2:3050
-74:2:3051
-75:2:3062
-76:2:3070
-77:0:4654
-78:2:2941
-79:0:4654
-80:2:3074
-81:2:3078
-82:2:3079
-83:2:3083
-84:2:3087
-85:2:3088
-86:2:3092
-87:2:3100
-88:2:3101
-89:2:3105
-90:2:3109
-91:2:3110
-92:2:3105
-93:2:3106
-94:2:3114
-95:0:4654
-96:2:2941
-97:0:4654
-98:2:3122
-99:2:3123
-100:2:3124
-101:0:4654
-102:2:2941
-103:0:4654
-104:2:3132
-105:0:4654
-106:2:2941
-107:0:4654
-108:2:3135
-109:2:3136
-110:2:3140
-111:2:3141
-112:2:3149
-113:2:3150
-114:2:3154
-115:2:3155
-116:2:3163
-117:2:3168
-118:2:3169
-119:2:3181
-120:2:3182
-121:2:3186
-122:2:3187
-123:2:3181
-124:2:3182
-125:2:3186
-126:2:3187
-127:2:3195
-128:2:3200
-129:2:3201
-130:2:3212
-131:2:3213
-132:2:3214
-133:2:3225
-134:2:3230
-135:2:3231
-136:2:3242
-137:2:3243
-138:2:3244
-139:2:3242
-140:2:3243
-141:2:3244
-142:2:3255
-143:2:3262
-144:0:4654
-145:2:2941
-146:0:4654
-147:2:3266
-148:2:3267
-149:2:3268
-150:2:3280
-151:2:3281
-152:2:3285
-153:2:3286
-154:2:3294
-155:2:3299
-156:2:3303
-157:2:3304
-158:2:3312
-159:2:3313
-160:2:3317
-161:2:3318
-162:2:3312
-163:2:3313
-164:2:3317
-165:2:3318
-166:2:3326
-167:2:3331
-168:2:3332
-169:2:3343
-170:2:3344
-171:2:3345
-172:2:3356
-173:2:3361
-174:2:3362
-175:2:3373
-176:2:3374
-177:2:3375
-178:2:3373
-179:2:3374
-180:2:3375
-181:2:3386
-182:2:3397
-183:2:3398
-184:0:4654
-185:2:2941
-186:0:4654
-187:2:3405
-188:2:3406
-189:2:3410
-190:2:3411
-191:2:3419
-192:2:3420
-193:2:3424
-194:2:3425
-195:2:3433
-196:2:3438
-197:2:3442
-198:2:3443
-199:2:3451
-200:2:3452
-201:2:3456
-202:2:3457
-203:2:3451
-204:2:3452
-205:2:3456
-206:2:3457
-207:2:3465
-208:2:3470
-209:2:3471
-210:2:3482
-211:2:3483
-212:2:3484
-213:2:3495
-214:2:3500
-215:2:3501
-216:2:3512
-217:2:3513
-218:2:3514
-219:2:3512
-220:2:3513
-221:2:3514
-222:2:3525
-223:0:4654
-224:2:2941
-225:0:4654
-226:2:3534
-227:2:3535
-228:2:3539
-229:2:3540
-230:2:3548
-231:2:3549
-232:2:3553
-233:2:3554
-234:2:3562
-235:2:3567
-236:2:3571
-237:2:3572
-238:2:3580
-239:2:3581
-240:2:3585
-241:2:3586
-242:2:3580
-243:2:3581
-244:2:3585
-245:2:3586
-246:2:3594
-247:2:3599
-248:2:3600
-249:2:3611
-250:2:3612
-251:2:3613
-252:2:3624
-253:2:3629
-254:2:3630
-255:2:3641
-256:2:3642
-257:2:3643
-258:2:3641
-259:2:3642
-260:2:3643
-261:2:3654
-262:2:3661
-263:0:4654
-264:2:2941
-265:0:4654
-266:2:3665
-267:2:3666
-268:2:3667
-269:2:3679
-270:2:3680
-271:2:3684
-272:2:3685
-273:2:3693
-274:2:3698
-275:2:3702
-276:2:3703
-277:2:3711
-278:2:3712
-279:2:3716
-280:2:3717
-281:2:3711
-282:2:3712
-283:2:3716
-284:2:3717
-285:2:3725
-286:2:3730
-287:2:3731
-288:2:3742
-289:2:3743
-290:2:3744
-291:2:3755
-292:2:3760
-293:2:3761
-294:2:3772
-295:2:3773
-296:2:3774
-297:2:3772
-298:2:3773
-299:2:3774
-300:2:3785
-301:2:3795
-302:2:3796
-303:0:4654
-304:2:2941
-305:0:4654
-306:2:3805
-307:2:3806
-308:0:4654
-309:2:2941
-310:0:4654
-311:2:3810
-312:0:4654
-313:2:3818
-314:0:4654
-315:2:2936
-316:0:4654
-317:2:2938
-318:0:4654
-319:2:2939
-320:0:4654
-321:2:2940
-322:0:4654
-323:2:2941
-324:0:4654
-325:2:2942
-326:2:2943
-327:2:2947
-328:2:2948
-329:2:2956
-330:2:2957
-331:2:2961
-332:2:2962
-333:2:2970
-334:2:2975
-335:2:2979
-336:2:2980
-337:2:2988
-338:2:2989
-339:2:2990
-340:2:2988
-341:2:2989
-342:2:2993
-343:2:2994
-344:2:3002
-345:2:3007
-346:2:3008
-347:2:3019
-348:2:3020
-349:2:3021
-350:2:3032
-351:2:3037
-352:2:3038
-353:2:3049
-354:2:3050
-355:2:3051
-356:2:3049
-357:2:3050
-358:2:3051
-359:2:3062
-360:2:3070
-361:0:4654
-362:2:2941
-363:0:4654
-364:2:3074
-365:2:3078
-366:2:3079
-367:2:3083
-368:2:3087
-369:2:3088
-370:2:3092
-371:2:3100
-372:2:3101
-373:2:3105
-374:2:3106
-375:2:3105
-376:2:3109
-377:2:3110
-378:2:3114
-379:0:4654
-380:2:2941
-381:0:4654
-382:2:3122
-383:2:3123
-384:2:3124
-385:0:4654
-386:2:2941
-387:0:4654
-388:2:3132
-389:0:4654
-390:2:2941
-391:0:4654
-392:2:3135
-393:2:3136
-394:2:3140
-395:2:3141
-396:2:3149
-397:2:3150
-398:2:3154
-399:2:3155
-400:2:3163
-401:2:3168
-402:2:3169
-403:2:3181
-404:2:3182
-405:2:3186
-406:2:3187
-407:2:3181
-408:2:3182
-409:2:3186
-410:2:3187
-411:2:3195
-412:2:3200
-413:2:3201
-414:2:3212
-415:2:3213
-416:2:3214
-417:2:3225
-418:2:3230
-419:2:3231
-420:2:3242
-421:2:3243
-422:2:3244
-423:2:3242
-424:2:3243
-425:2:3244
-426:2:3255
-427:2:3262
-428:0:4654
-429:2:2941
-430:0:4654
-431:2:3266
-432:2:3267
-433:2:3268
-434:2:3280
-435:2:3281
-436:2:3285
-437:2:3286
-438:2:3294
-439:2:3299
-440:2:3303
-441:2:3304
-442:2:3312
-443:2:3313
-444:2:3317
-445:2:3318
-446:2:3312
-447:2:3313
-448:2:3317
-449:2:3318
-450:2:3326
-451:2:3331
-452:2:3332
-453:2:3343
-454:2:3344
-455:2:3345
-456:2:3356
-457:2:3361
-458:2:3362
-459:2:3373
-460:2:3374
-461:2:3375
-462:2:3373
-463:2:3374
-464:2:3375
-465:2:3386
-466:2:3397
-467:2:3398
-468:0:4654
-469:2:2941
-470:0:4654
-471:2:3405
-472:2:3406
-473:2:3410
-474:2:3411
-475:2:3419
-476:2:3420
-477:2:3424
-478:2:3425
-479:2:3433
-480:2:3438
-481:2:3442
-482:2:3443
-483:2:3451
-484:2:3452
-485:2:3456
-486:2:3457
-487:2:3451
-488:2:3452
-489:2:3456
-490:2:3457
-491:2:3465
-492:2:3470
-493:2:3471
-494:2:3482
-495:2:3483
-496:2:3484
-497:2:3495
-498:2:3500
-499:2:3501
-500:2:3512
-501:2:3513
-502:2:3514
-503:2:3512
-504:2:3513
-505:2:3514
-506:2:3525
-507:0:4654
-508:2:2941
-509:0:4654
-510:2:3534
-511:2:3535
-512:2:3539
-513:2:3540
-514:2:3548
-515:2:3549
-516:2:3553
-517:2:3554
-518:2:3562
-519:2:3567
-520:2:3571
-521:2:3572
-522:2:3580
-523:2:3581
-524:2:3585
-525:2:3586
-526:2:3580
-527:2:3581
-528:2:3585
-529:2:3586
-530:2:3594
-531:2:3599
-532:2:3600
-533:2:3611
-534:2:3612
-535:2:3613
-536:2:3624
-537:2:3629
-538:2:3630
-539:2:3641
-540:2:3642
-541:2:3643
-542:2:3641
-543:2:3642
-544:2:3643
-545:2:3654
-546:2:3661
-547:0:4654
-548:2:2941
-549:0:4654
-550:2:3665
-551:2:3666
-552:2:3667
-553:2:3679
-554:2:3680
-555:2:3684
-556:2:3685
-557:2:3693
-558:2:3698
-559:2:3702
-560:2:3703
-561:2:3711
-562:2:3712
-563:2:3716
-564:2:3717
-565:2:3711
-566:2:3712
-567:2:3716
-568:2:3717
-569:2:3725
-570:2:3730
-571:2:3731
-572:2:3742
-573:2:3743
-574:2:3744
-575:2:3755
-576:2:3760
-577:2:3761
-578:2:3772
-579:2:3773
-580:2:3774
-581:2:3772
-582:2:3773
-583:2:3774
-584:2:3785
-585:2:3795
-586:2:3796
-587:0:4654
-588:2:2941
-589:0:4654
-590:2:3805
-591:2:3806
-592:0:4654
-593:2:2941
-594:0:4654
-595:2:3810
-596:0:4654
-597:2:3818
-598:0:4654
-599:2:2936
-600:0:4654
-601:2:2938
-602:0:4654
-603:2:2939
-604:0:4654
-605:2:2940
-606:0:4654
-607:2:2941
-608:0:4654
-609:2:2942
-610:2:2943
-611:2:2947
-612:2:2948
-613:2:2956
-614:2:2957
-615:2:2961
-616:2:2962
-617:2:2970
-618:2:2975
-619:2:2979
-620:2:2980
-621:2:2988
-622:2:2989
-623:2:2993
-624:2:2994
-625:2:2988
-626:2:2989
-627:2:2990
-628:2:3002
-629:2:3007
-630:2:3008
-631:2:3019
-632:2:3020
-633:2:3021
-634:2:3032
-635:2:3037
-636:2:3038
-637:2:3049
-638:2:3050
-639:2:3051
-640:2:3049
-641:2:3050
-642:2:3051
-643:2:3062
-644:2:3070
-645:0:4654
-646:2:2941
-647:0:4654
-648:2:3074
-649:2:3078
-650:2:3079
-651:2:3083
-652:2:3087
-653:2:3088
-654:2:3092
-655:2:3100
-656:2:3101
-657:2:3105
-658:2:3109
-659:2:3110
-660:2:3105
-661:2:3106
-662:2:3114
-663:0:4654
-664:2:2941
-665:0:4654
-666:2:3122
-667:2:3123
-668:2:3124
-669:0:4654
-670:2:2941
-671:0:4654
-672:2:3132
-673:0:4654
-674:2:2941
-675:0:4654
-676:2:3135
-677:2:3136
-678:2:3140
-679:2:3141
-680:2:3149
-681:2:3150
-682:2:3154
-683:2:3155
-684:2:3163
-685:2:3168
-686:2:3169
-687:2:3181
-688:2:3182
-689:2:3186
-690:2:3187
-691:2:3181
-692:2:3182
-693:2:3186
-694:2:3187
-695:2:3195
-696:2:3200
-697:2:3201
-698:2:3212
-699:2:3213
-700:2:3214
-701:2:3225
-702:2:3230
-703:2:3231
-704:2:3242
-705:2:3243
-706:2:3244
-707:2:3242
-708:2:3243
-709:2:3244
-710:2:3255
-711:2:3262
-712:0:4654
-713:2:2941
-714:0:4654
-715:2:3266
-716:2:3267
-717:2:3268
-718:2:3280
-719:2:3281
-720:2:3285
-721:2:3286
-722:2:3294
-723:2:3299
-724:2:3303
-725:2:3304
-726:2:3312
-727:2:3313
-728:2:3317
-729:2:3318
-730:2:3312
-731:2:3313
-732:2:3317
-733:2:3318
-734:2:3326
-735:2:3331
-736:2:3332
-737:2:3343
-738:2:3344
-739:2:3345
-740:2:3356
-741:2:3361
-742:2:3362
-743:2:3373
-744:2:3374
-745:2:3375
-746:2:3373
-747:2:3374
-748:2:3375
-749:2:3386
-750:2:3397
-751:2:3398
-752:0:4654
-753:2:2941
-754:0:4654
-755:2:3405
-756:2:3406
-757:2:3410
-758:2:3411
-759:2:3419
-760:2:3420
-761:2:3424
-762:2:3425
-763:2:3433
-764:2:3438
-765:2:3442
-766:2:3443
-767:2:3451
-768:2:3452
-769:2:3456
-770:2:3457
-771:2:3451
-772:2:3452
-773:2:3456
-774:2:3457
-775:2:3465
-776:2:3470
-777:2:3471
-778:2:3482
-779:2:3483
-780:2:3484
-781:2:3495
-782:2:3500
-783:2:3501
-784:2:3512
-785:2:3513
-786:2:3514
-787:2:3512
-788:2:3513
-789:2:3514
-790:2:3525
-791:0:4654
-792:2:2941
-793:0:4654
-794:2:3665
-795:2:3666
-796:2:3670
-797:2:3671
-798:2:3679
-799:2:3680
-800:2:3684
-801:2:3685
-802:2:3693
-803:2:3698
-804:2:3702
-805:2:3703
-806:2:3711
-807:2:3712
-808:2:3716
-809:2:3717
-810:2:3711
-811:2:3712
-812:2:3716
-813:2:3717
-814:2:3725
-815:2:3730
-816:2:3731
-817:2:3742
-818:2:3743
-819:2:3744
-820:2:3755
-821:2:3760
-822:2:3761
-823:2:3772
-824:2:3773
-825:2:3774
-826:2:3772
-827:2:3773
-828:2:3774
-829:2:3785
-830:2:3795
-831:2:3796
-832:0:4654
-833:2:2941
-834:0:4654
-835:2:3805
-836:2:3806
-837:0:4654
-838:2:2941
-839:0:4654
-840:2:3534
-841:2:3535
-842:2:3539
-843:2:3540
-844:2:3548
-845:2:3549
-846:2:3553
-847:2:3554
-848:2:3562
-849:2:3567
-850:2:3571
-851:2:3572
-852:2:3580
-853:2:3581
-854:2:3582
-855:2:3580
-856:2:3581
-857:2:3585
-858:2:3586
-859:2:3594
-860:2:3599
-861:2:3600
-862:2:3611
-863:2:3612
-864:2:3613
-865:2:3624
-866:2:3629
-867:2:3630
-868:2:3641
-869:2:3642
-870:2:3643
-871:2:3641
-872:2:3642
-873:2:3643
-874:2:3654
-875:2:3661
-876:0:4654
-877:2:2941
-878:0:4654
-879:2:3810
-880:0:4654
-881:2:3818
-882:0:4654
-883:2:3819
-884:0:4654
-885:2:3824
-886:0:4654
-887:1:29
-888:0:4654
-889:2:3825
-890:0:4654
-891:1:35
-892:0:4654
-893:2:3824
-894:0:4654
-895:1:36
-896:0:4654
-897:2:3825
-898:0:4654
-899:1:37
-900:0:4654
-901:2:3824
-902:0:4654
-903:1:38
-904:0:4654
-905:2:3825
-906:0:4654
-907:1:39
-908:0:4654
-909:2:3824
-910:0:4654
-911:1:40
-912:0:4654
-913:2:3825
-914:0:4654
-915:1:41
-916:0:4654
-917:2:3824
-918:0:4654
-919:1:42
-920:0:4654
-921:2:3825
-922:0:4654
-923:1:43
-924:0:4654
-925:2:3824
-926:0:4654
-927:1:44
-928:0:4654
-929:2:3825
-930:0:4654
-931:1:45
-932:0:4654
-933:2:3824
-934:0:4654
-935:1:46
-936:0:4654
-937:2:3825
-938:0:4654
-939:1:47
-940:0:4654
-941:2:3824
-942:0:4654
-943:1:48
-944:0:4654
-945:2:3825
-946:0:4654
-947:1:149
-948:0:4654
-949:2:3824
-950:0:4654
-951:1:151
-952:0:4654
-953:2:3825
-954:0:4654
-955:1:50
-956:0:4654
-957:2:3824
-958:0:4654
-959:1:157
-960:1:158
-961:1:162
-962:1:163
-963:1:171
-964:1:172
-965:1:176
-966:1:177
-967:1:185
-968:1:190
-969:1:194
-970:1:195
-971:1:203
-972:1:204
-973:1:208
-974:1:209
-975:1:203
-976:1:204
-977:1:208
-978:1:209
-979:1:217
-980:1:222
-981:1:223
-982:1:234
-983:1:235
-984:1:236
-985:1:247
-986:1:259
-987:1:260
-988:1:264
-989:1:265
-990:1:266
-991:1:264
-992:1:265
-993:1:266
-994:1:277
-995:0:4654
-996:2:3825
-997:0:4654
-998:1:46
-999:0:4654
-1000:2:3824
-1001:0:4654
-1002:1:47
-1003:0:4654
-1004:2:3825
-1005:0:4654
-1006:1:48
-1007:0:4654
-1008:2:3824
-1009:0:4654
-1010:1:149
-1011:0:4654
-1012:2:3825
-1013:0:4654
-1014:1:151
-1015:0:4654
-1016:2:3824
-1017:0:4654
-1018:1:50
-1019:0:4654
-1020:2:3825
-1021:0:4654
-1022:1:286
-1023:1:287
-1024:0:4654
-1025:2:3824
-1026:0:4654
-1027:1:46
-1028:0:4654
-1029:2:3825
-1030:0:4654
-1031:1:47
-1032:0:4654
-1033:2:3824
-1034:0:4654
-1035:1:48
-1036:0:4654
-1037:2:3825
-1038:0:4654
-1039:1:149
-1040:0:4654
-1041:2:3824
-1042:0:4654
-1043:1:151
-1044:0:4654
-1045:2:3825
-1046:0:4654
-1047:1:50
-1048:0:4654
-1049:2:3824
-1050:0:4654
-1051:1:293
-1052:1:294
-1053:1:298
-1054:1:299
-1055:1:307
-1056:1:308
-1057:1:312
-1058:1:313
-1059:1:321
-1060:1:326
-1061:1:330
-1062:1:331
-1063:1:339
-1064:1:340
-1065:1:344
-1066:1:345
-1067:1:339
-1068:1:340
-1069:1:344
-1070:1:345
-1071:1:353
-1072:1:358
-1073:1:359
-1074:1:370
-1075:1:371
-1076:1:372
-1077:1:383
-1078:1:395
-1079:1:396
-1080:1:400
-1081:1:401
-1082:1:402
-1083:1:400
-1084:1:401
-1085:1:402
-1086:1:413
-1087:0:4654
-1088:2:3825
-1089:0:4654
-1090:1:46
-1091:0:4654
-1092:2:3824
-1093:0:4654
-1094:1:47
-1095:0:4654
-1096:2:3825
-1097:0:4654
-1098:1:48
-1099:0:4654
-1100:2:3824
-1101:0:4654
-1102:1:149
-1103:0:4654
-1104:2:3825
-1105:0:4654
-1106:1:151
-1107:0:4654
-1108:2:3824
-1109:0:4654
-1110:1:50
-1111:0:4654
-1112:2:3825
-1113:0:4654
-1114:1:422
-1115:1:423
-1116:1:427
-1117:1:428
-1118:1:436
-1119:1:437
-1120:1:441
-1121:1:442
-1122:1:450
-1123:1:455
-1124:1:459
-1125:1:460
-1126:1:468
-1127:1:469
-1128:1:473
-1129:1:474
-1130:1:468
-1131:1:469
-1132:1:473
-1133:1:474
-1134:1:482
-1135:1:487
-1136:1:488
-1137:1:499
-1138:1:500
-1139:1:501
-1140:1:512
-1141:1:524
-1142:1:525
-1143:1:529
-1144:1:530
-1145:1:531
-1146:1:529
-1147:1:530
-1148:1:531
-1149:1:542
-1150:1:549
-1151:0:4654
-1152:2:3824
-1153:0:4654
-1154:1:46
-1155:0:4654
-1156:2:3825
-1157:0:4654
-1158:1:47
-1159:0:4654
-1160:2:3824
-1161:0:4654
-1162:1:48
-1163:0:4654
-1164:2:3825
-1165:0:4654
-1166:1:149
-1167:0:4654
-1168:2:3824
-1169:0:4654
-1170:1:151
-1171:0:4654
-1172:2:3825
-1173:0:4654
-1174:1:50
-1175:0:4654
-1176:2:3824
-1177:0:4654
-1178:1:687
-1179:1:688
-1180:1:692
-1181:1:693
-1182:1:701
-1183:1:702
-1184:1:703
-1185:1:715
-1186:1:720
-1187:1:724
-1188:1:725
-1189:1:733
-1190:1:734
-1191:1:738
-1192:1:739
-1193:1:733
-1194:1:734
-1195:1:738
-1196:1:739
-1197:1:747
-1198:1:752
-1199:1:753
-1200:1:764
-1201:1:765
-1202:1:766
-1203:1:777
-1204:1:789
-1205:1:790
-1206:1:794
-1207:1:795
-1208:1:796
-1209:1:794
-1210:1:795
-1211:1:796
-1212:1:807
-1213:0:4654
-1214:2:3825
-1215:0:4654
-1216:1:46
-1217:0:4654
-1218:2:3824
-1219:0:4654
-1220:1:47
-1221:0:4654
-1222:2:3825
-1223:0:4654
-1224:1:48
-1225:0:4654
-1226:2:3824
-1227:0:4654
-1228:1:149
-1229:0:4654
-1230:2:3825
-1231:0:4654
-1232:1:151
-1233:0:4654
-1234:2:3824
-1235:0:4654
-1236:1:50
-1237:0:4654
-1238:2:3825
-1239:0:4654
-1240:1:816
-1241:1:819
-1242:1:820
-1243:0:4654
-1244:2:3824
-1245:0:4654
-1246:1:46
-1247:0:4654
-1248:2:3825
-1249:0:4654
-1250:1:47
-1251:0:4654
-1252:2:3824
-1253:0:4654
-1254:1:48
-1255:0:4654
-1256:2:3825
-1257:0:4654
-1258:1:149
-1259:0:4654
-1260:2:3824
-1261:0:4654
-1262:1:151
-1263:0:4654
-1264:2:3825
-1265:0:4654
-1266:1:50
-1267:0:4654
-1268:2:3824
-1269:0:4654
-1270:1:823
-1271:1:824
-1272:1:828
-1273:1:829
-1274:1:837
-1275:1:838
-1276:1:842
-1277:1:843
-1278:1:851
-1279:1:856
-1280:1:860
-1281:1:861
-1282:1:869
-1283:1:870
-1284:1:874
-1285:1:875
-1286:1:869
-1287:1:870
-1288:1:874
-1289:1:875
-1290:1:883
-1291:1:888
-1292:1:889
-1293:1:900
-1294:1:901
-1295:1:902
-1296:1:913
-1297:1:925
-1298:1:926
-1299:1:930
-1300:1:931
-1301:1:932
-1302:1:930
-1303:1:931
-1304:1:932
-1305:1:943
-1306:0:4654
-1307:2:3825
-1308:0:4654
-1309:1:46
-1310:0:4654
-1311:2:3824
-1312:0:4654
-1313:1:47
-1314:0:4654
-1315:2:3825
-1316:0:4654
-1317:1:48
-1318:0:4654
-1319:2:3824
-1320:0:4654
-1321:1:149
-1322:0:4654
-1323:2:3825
-1324:0:4654
-1325:1:151
-1326:0:4654
-1327:2:3824
-1328:0:4654
-1329:1:50
-1330:0:4654
-1331:2:3825
-1332:0:4654
-1333:1:1083
-1334:1:1084
-1335:1:1088
-1336:1:1089
-1337:1:1097
-1338:1:1098
-1339:1:1102
-1340:1:1103
-1341:1:1111
-1342:1:1116
-1343:1:1120
-1344:1:1121
-1345:1:1129
-1346:1:1130
-1347:1:1134
-1348:1:1135
-1349:1:1129
-1350:1:1130
-1351:1:1134
-1352:1:1135
-1353:1:1143
-1354:1:1148
-1355:1:1149
-1356:1:1160
-1357:1:1161
-1358:1:1162
-1359:1:1173
-1360:1:1185
-1361:1:1186
-1362:1:1190
-1363:1:1191
-1364:1:1192
-1365:1:1190
-1366:1:1191
-1367:1:1192
-1368:1:1203
-1369:1:1210
-1370:1:1214
-1371:0:4654
-1372:2:3824
-1373:0:4654
-1374:1:46
-1375:0:4654
-1376:2:3825
-1377:0:4654
-1378:1:47
-1379:0:4654
-1380:2:3824
-1381:0:4654
-1382:1:48
-1383:0:4654
-1384:2:3825
-1385:0:4654
-1386:1:149
-1387:0:4654
-1388:2:3824
-1389:0:4654
-1390:1:151
-1391:0:4654
-1392:2:3825
-1393:0:4654
-1394:1:50
-1395:0:4654
-1396:2:3824
-1397:0:4654
-1398:1:1215
-1399:1:1216
-1400:1:1220
-1401:1:1221
-1402:1:1229
-1403:1:1230
-1404:1:1231
-1405:1:1243
-1406:1:1248
-1407:1:1252
-1408:1:1253
-1409:1:1261
-1410:1:1262
-1411:1:1266
-1412:1:1267
-1413:1:1261
-1414:1:1262
-1415:1:1266
-1416:1:1267
-1417:1:1275
-1418:1:1280
-1419:1:1281
-1420:1:1292
-1421:1:1293
-1422:1:1294
-1423:1:1305
-1424:1:1317
-1425:1:1318
-1426:1:1322
-1427:1:1323
-1428:1:1324
-1429:1:1322
-1430:1:1323
-1431:1:1324
-1432:1:1335
-1433:0:4654
-1434:2:3825
-1435:0:4654
-1436:1:46
-1437:0:4654
-1438:2:3824
-1439:0:4654
-1440:1:47
-1441:0:4654
-1442:2:3825
-1443:0:4654
-1444:1:48
-1445:0:4654
-1446:2:3824
-1447:0:4654
-1448:1:149
-1449:0:4654
-1450:2:3825
-1451:0:4654
-1452:1:151
-1453:0:4654
-1454:2:3824
-1455:0:4654
-1456:1:50
-1457:0:4654
-1458:2:3825
-1459:0:4654
-1460:1:1344
-1461:0:4654
-1462:2:3824
-1463:0:4654
-1464:1:2808
-1465:1:2815
-1466:1:2816
-1467:1:2823
-1468:1:2828
-1469:1:2835
-1470:1:2836
-1471:1:2835
-1472:1:2836
-1473:1:2843
-1474:1:2847
-1475:0:4654
-1476:2:3825
-1477:0:4654
-1478:1:1346
-1479:1:1347
-1480:0:4652
-1481:2:3824
-1482:0:4658
-1483:1:2492
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.define b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.log b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 91e8666..0000000
+++ /dev/null
@@ -1,540 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1362)
-Depth=    8300 States=    1e+06 Transitions= 1.86e+08 Memory=   513.029        t=    280 R=   4e+03
-Depth=   10044 States=    2e+06 Transitions= 3.84e+08 Memory=   559.221        t=    594 R=   3e+03
-Depth=   10044 States=    3e+06 Transitions= 6.04e+08 Memory=   605.803        t=    964 R=   3e+03
-pan: resizing hashtable to -w22..  done
-Depth=   10044 States=    4e+06 Transitions= 8.01e+08 Memory=   682.920        t= 1.27e+03 R=   3e+03
-Depth=   10044 States=    5e+06 Transitions= 9.95e+08 Memory=   728.721        t= 1.57e+03 R=   3e+03
-Depth=   10044 States=    6e+06 Transitions= 1.26e+09 Memory=   775.010        t= 1.99e+03 R=   3e+03
-Depth=   10044 States=    7e+06 Transitions= 1.79e+09 Memory=   821.592        t= 2.89e+03 R=   2e+03
-Depth=   10044 States=    8e+06 Transitions= 2.16e+09 Memory=   867.979        t= 3.5e+03 R=   2e+03
-Depth=   10044 States=    9e+06 Transitions= 2.51e+09 Memory=   914.072        t= 4.1e+03 R=   2e+03
-pan: resizing hashtable to -w24..  done
-Depth=   10044 States=    1e+07 Transitions= 2.87e+09 Memory=  1085.334        t= 4.67e+03 R=   2e+03
-Depth=   10044 States=  1.1e+07 Transitions= 3.27e+09 Memory=  1132.404        t= 5.29e+03 R=   2e+03
-Depth=   10044 States=  1.2e+07 Transitions= 3.66e+09 Memory=  1179.377        t= 5.91e+03 R=   2e+03
-pan: claim violated! (at depth 1680)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 10044, errors: 1
- 12387044 states, stored
-3.7683983e+09 states, matched
-3.7807853e+09 transitions (= stored+matched)
-2.0718621e+10 atomic steps
-hash conflicts: 2.2091218e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
- 1370.332      equivalent memory usage for states (stored*(State-vector + overhead))
-  612.258      actual memory usage for states (compression: 44.68%)
-               state-vector as stored = 16 byte + 36 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1197.736      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 166228 1420 961 2 2 ]
-unreached in proctype urcu_reader
-       line 894, "pan.___", state 12, "((i<1))"
-       line 894, "pan.___", state 12, "((i>=1))"
-       line 268, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 104, "(1)"
-       line 249, "pan.___", state 112, "(1)"
-       line 253, "pan.___", state 124, "(1)"
-       line 257, "pan.___", state 132, "(1)"
-       line 407, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 223, "(1)"
-       line 434, "pan.___", state 253, "(1)"
-       line 438, "pan.___", state 266, "(1)"
-       line 687, "pan.___", state 287, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 407, "pan.___", state 294, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 326, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 340, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 359, "(1)"
-       line 434, "pan.___", state 389, "(1)"
-       line 438, "pan.___", state 402, "(1)"
-       line 407, "pan.___", state 423, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 455, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 469, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 488, "(1)"
-       line 434, "pan.___", state 518, "(1)"
-       line 438, "pan.___", state 531, "(1)"
-       line 407, "pan.___", state 554, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 556, "(1)"
-       line 407, "pan.___", state 557, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 557, "else"
-       line 407, "pan.___", state 560, "(1)"
-       line 411, "pan.___", state 568, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 570, "(1)"
-       line 411, "pan.___", state 571, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 571, "else"
-       line 411, "pan.___", state 574, "(1)"
-       line 411, "pan.___", state 575, "(1)"
-       line 411, "pan.___", state 575, "(1)"
-       line 409, "pan.___", state 580, "((i<1))"
-       line 409, "pan.___", state 580, "((i>=1))"
-       line 416, "pan.___", state 586, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 588, "(1)"
-       line 416, "pan.___", state 589, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 589, "else"
-       line 416, "pan.___", state 592, "(1)"
-       line 416, "pan.___", state 593, "(1)"
-       line 416, "pan.___", state 593, "(1)"
-       line 420, "pan.___", state 600, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 602, "(1)"
-       line 420, "pan.___", state 603, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 603, "else"
-       line 420, "pan.___", state 606, "(1)"
-       line 420, "pan.___", state 607, "(1)"
-       line 420, "pan.___", state 607, "(1)"
-       line 418, "pan.___", state 612, "((i<2))"
-       line 418, "pan.___", state 612, "((i>=2))"
-       line 425, "pan.___", state 619, "(1)"
-       line 425, "pan.___", state 620, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 620, "else"
-       line 425, "pan.___", state 623, "(1)"
-       line 425, "pan.___", state 624, "(1)"
-       line 425, "pan.___", state 624, "(1)"
-       line 429, "pan.___", state 632, "(1)"
-       line 429, "pan.___", state 633, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 633, "else"
-       line 429, "pan.___", state 636, "(1)"
-       line 429, "pan.___", state 637, "(1)"
-       line 429, "pan.___", state 637, "(1)"
-       line 427, "pan.___", state 642, "((i<1))"
-       line 427, "pan.___", state 642, "((i>=1))"
-       line 434, "pan.___", state 649, "(1)"
-       line 434, "pan.___", state 650, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 650, "else"
-       line 434, "pan.___", state 653, "(1)"
-       line 434, "pan.___", state 654, "(1)"
-       line 434, "pan.___", state 654, "(1)"
-       line 438, "pan.___", state 662, "(1)"
-       line 438, "pan.___", state 663, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 663, "else"
-       line 438, "pan.___", state 666, "(1)"
-       line 438, "pan.___", state 667, "(1)"
-       line 438, "pan.___", state 667, "(1)"
-       line 436, "pan.___", state 672, "((i<2))"
-       line 436, "pan.___", state 672, "((i>=2))"
-       line 446, "pan.___", state 676, "(1)"
-       line 446, "pan.___", state 676, "(1)"
-       line 687, "pan.___", state 679, "cached_urcu_active_readers = (tmp+1)"
-       line 687, "pan.___", state 680, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 687, "pan.___", state 681, "(1)"
-       line 407, "pan.___", state 688, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 720, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 734, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 753, "(1)"
-       line 434, "pan.___", state 783, "(1)"
-       line 438, "pan.___", state 796, "(1)"
-       line 407, "pan.___", state 824, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 856, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 870, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 889, "(1)"
-       line 434, "pan.___", state 919, "(1)"
-       line 438, "pan.___", state 932, "(1)"
-       line 407, "pan.___", state 953, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 955, "(1)"
-       line 407, "pan.___", state 956, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 956, "else"
-       line 407, "pan.___", state 959, "(1)"
-       line 411, "pan.___", state 967, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 969, "(1)"
-       line 411, "pan.___", state 970, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 970, "else"
-       line 411, "pan.___", state 973, "(1)"
-       line 411, "pan.___", state 974, "(1)"
-       line 411, "pan.___", state 974, "(1)"
-       line 409, "pan.___", state 979, "((i<1))"
-       line 409, "pan.___", state 979, "((i>=1))"
-       line 416, "pan.___", state 985, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 987, "(1)"
-       line 416, "pan.___", state 988, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 988, "else"
-       line 416, "pan.___", state 991, "(1)"
-       line 416, "pan.___", state 992, "(1)"
-       line 416, "pan.___", state 992, "(1)"
-       line 420, "pan.___", state 999, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 1001, "(1)"
-       line 420, "pan.___", state 1002, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 1002, "else"
-       line 420, "pan.___", state 1005, "(1)"
-       line 420, "pan.___", state 1006, "(1)"
-       line 420, "pan.___", state 1006, "(1)"
-       line 418, "pan.___", state 1011, "((i<2))"
-       line 418, "pan.___", state 1011, "((i>=2))"
-       line 425, "pan.___", state 1018, "(1)"
-       line 425, "pan.___", state 1019, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 1019, "else"
-       line 425, "pan.___", state 1022, "(1)"
-       line 425, "pan.___", state 1023, "(1)"
-       line 425, "pan.___", state 1023, "(1)"
-       line 429, "pan.___", state 1031, "(1)"
-       line 429, "pan.___", state 1032, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 1032, "else"
-       line 429, "pan.___", state 1035, "(1)"
-       line 429, "pan.___", state 1036, "(1)"
-       line 429, "pan.___", state 1036, "(1)"
-       line 427, "pan.___", state 1041, "((i<1))"
-       line 427, "pan.___", state 1041, "((i>=1))"
-       line 434, "pan.___", state 1048, "(1)"
-       line 434, "pan.___", state 1049, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 1049, "else"
-       line 434, "pan.___", state 1052, "(1)"
-       line 434, "pan.___", state 1053, "(1)"
-       line 434, "pan.___", state 1053, "(1)"
-       line 438, "pan.___", state 1061, "(1)"
-       line 438, "pan.___", state 1062, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 1062, "else"
-       line 438, "pan.___", state 1065, "(1)"
-       line 438, "pan.___", state 1066, "(1)"
-       line 438, "pan.___", state 1066, "(1)"
-       line 436, "pan.___", state 1071, "((i<2))"
-       line 436, "pan.___", state 1071, "((i>=2))"
-       line 446, "pan.___", state 1075, "(1)"
-       line 446, "pan.___", state 1075, "(1)"
-       line 695, "pan.___", state 1079, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 407, "pan.___", state 1084, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1116, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1130, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1149, "(1)"
-       line 434, "pan.___", state 1179, "(1)"
-       line 438, "pan.___", state 1192, "(1)"
-       line 407, "pan.___", state 1216, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1248, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1262, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1281, "(1)"
-       line 434, "pan.___", state 1311, "(1)"
-       line 438, "pan.___", state 1324, "(1)"
-       line 407, "pan.___", state 1349, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1381, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1395, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1414, "(1)"
-       line 434, "pan.___", state 1444, "(1)"
-       line 438, "pan.___", state 1457, "(1)"
-       line 407, "pan.___", state 1478, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1510, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1524, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1543, "(1)"
-       line 434, "pan.___", state 1573, "(1)"
-       line 438, "pan.___", state 1586, "(1)"
-       line 407, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1644, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1658, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1677, "(1)"
-       line 434, "pan.___", state 1707, "(1)"
-       line 438, "pan.___", state 1720, "(1)"
-       line 407, "pan.___", state 1741, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1773, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1787, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1806, "(1)"
-       line 434, "pan.___", state 1836, "(1)"
-       line 438, "pan.___", state 1849, "(1)"
-       line 407, "pan.___", state 1873, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1905, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1919, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1938, "(1)"
-       line 434, "pan.___", state 1968, "(1)"
-       line 438, "pan.___", state 1981, "(1)"
-       line 734, "pan.___", state 2002, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 407, "pan.___", state 2009, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2041, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2055, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2074, "(1)"
-       line 434, "pan.___", state 2104, "(1)"
-       line 438, "pan.___", state 2117, "(1)"
-       line 407, "pan.___", state 2138, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2170, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2184, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2203, "(1)"
-       line 434, "pan.___", state 2233, "(1)"
-       line 438, "pan.___", state 2246, "(1)"
-       line 407, "pan.___", state 2269, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 2271, "(1)"
-       line 407, "pan.___", state 2272, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 2272, "else"
-       line 407, "pan.___", state 2275, "(1)"
-       line 411, "pan.___", state 2283, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2286, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 2286, "else"
-       line 411, "pan.___", state 2289, "(1)"
-       line 411, "pan.___", state 2290, "(1)"
-       line 411, "pan.___", state 2290, "(1)"
-       line 409, "pan.___", state 2295, "((i<1))"
-       line 409, "pan.___", state 2295, "((i>=1))"
-       line 416, "pan.___", state 2301, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 2303, "(1)"
-       line 416, "pan.___", state 2304, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 2304, "else"
-       line 416, "pan.___", state 2307, "(1)"
-       line 416, "pan.___", state 2308, "(1)"
-       line 416, "pan.___", state 2308, "(1)"
-       line 420, "pan.___", state 2315, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 2317, "(1)"
-       line 420, "pan.___", state 2318, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 2318, "else"
-       line 420, "pan.___", state 2321, "(1)"
-       line 420, "pan.___", state 2322, "(1)"
-       line 420, "pan.___", state 2322, "(1)"
-       line 418, "pan.___", state 2327, "((i<2))"
-       line 418, "pan.___", state 2327, "((i>=2))"
-       line 425, "pan.___", state 2334, "(1)"
-       line 425, "pan.___", state 2335, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 2335, "else"
-       line 425, "pan.___", state 2338, "(1)"
-       line 425, "pan.___", state 2339, "(1)"
-       line 425, "pan.___", state 2339, "(1)"
-       line 429, "pan.___", state 2347, "(1)"
-       line 429, "pan.___", state 2348, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 2348, "else"
-       line 429, "pan.___", state 2351, "(1)"
-       line 429, "pan.___", state 2352, "(1)"
-       line 429, "pan.___", state 2352, "(1)"
-       line 427, "pan.___", state 2357, "((i<1))"
-       line 427, "pan.___", state 2357, "((i>=1))"
-       line 434, "pan.___", state 2364, "(1)"
-       line 434, "pan.___", state 2365, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 2365, "else"
-       line 434, "pan.___", state 2368, "(1)"
-       line 434, "pan.___", state 2369, "(1)"
-       line 434, "pan.___", state 2369, "(1)"
-       line 438, "pan.___", state 2377, "(1)"
-       line 438, "pan.___", state 2378, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 2378, "else"
-       line 438, "pan.___", state 2381, "(1)"
-       line 438, "pan.___", state 2382, "(1)"
-       line 438, "pan.___", state 2382, "(1)"
-       line 436, "pan.___", state 2387, "((i<2))"
-       line 436, "pan.___", state 2387, "((i>=2))"
-       line 446, "pan.___", state 2391, "(1)"
-       line 446, "pan.___", state 2391, "(1)"
-       line 734, "pan.___", state 2394, "cached_urcu_active_readers = (tmp+1)"
-       line 734, "pan.___", state 2395, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 734, "pan.___", state 2396, "(1)"
-       line 407, "pan.___", state 2403, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2435, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2449, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2468, "(1)"
-       line 434, "pan.___", state 2498, "(1)"
-       line 438, "pan.___", state 2511, "(1)"
-       line 407, "pan.___", state 2538, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2570, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2584, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2603, "(1)"
-       line 434, "pan.___", state 2633, "(1)"
-       line 438, "pan.___", state 2646, "(1)"
-       line 407, "pan.___", state 2667, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2699, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2713, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2732, "(1)"
-       line 434, "pan.___", state 2762, "(1)"
-       line 438, "pan.___", state 2775, "(1)"
-       line 407, "pan.___", state 2808, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2840, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2854, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2873, "(1)"
-       line 434, "pan.___", state 2903, "(1)"
-       line 438, "pan.___", state 2916, "(1)"
-       line 407, "pan.___", state 2935, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2967, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2981, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 3000, "(1)"
-       line 434, "pan.___", state 3030, "(1)"
-       line 438, "pan.___", state 3043, "(1)"
-       line 929, "pan.___", state 3064, "-end-"
-       (252 of 3064 states)
-unreached in proctype urcu_writer
-       line 1018, "pan.___", state 12, "((i<1))"
-       line 1018, "pan.___", state 12, "((i>=1))"
-       line 407, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 51, "(1)"
-       line 411, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 65, "(1)"
-       line 411, "pan.___", state 66, "(1)"
-       line 411, "pan.___", state 66, "(1)"
-       line 409, "pan.___", state 71, "((i<1))"
-       line 409, "pan.___", state 71, "((i>=1))"
-       line 416, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 83, "(1)"
-       line 416, "pan.___", state 84, "(1)"
-       line 416, "pan.___", state 84, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 98, "(1)"
-       line 420, "pan.___", state 98, "(1)"
-       line 418, "pan.___", state 103, "((i<2))"
-       line 418, "pan.___", state 103, "((i>=2))"
-       line 425, "pan.___", state 110, "(1)"
-       line 425, "pan.___", state 111, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 111, "else"
-       line 425, "pan.___", state 114, "(1)"
-       line 425, "pan.___", state 115, "(1)"
-       line 425, "pan.___", state 115, "(1)"
-       line 429, "pan.___", state 123, "(1)"
-       line 429, "pan.___", state 124, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 124, "else"
-       line 429, "pan.___", state 127, "(1)"
-       line 429, "pan.___", state 128, "(1)"
-       line 429, "pan.___", state 128, "(1)"
-       line 427, "pan.___", state 133, "((i<1))"
-       line 427, "pan.___", state 133, "((i>=1))"
-       line 434, "pan.___", state 140, "(1)"
-       line 434, "pan.___", state 141, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 141, "else"
-       line 434, "pan.___", state 144, "(1)"
-       line 434, "pan.___", state 145, "(1)"
-       line 434, "pan.___", state 145, "(1)"
-       line 438, "pan.___", state 153, "(1)"
-       line 438, "pan.___", state 154, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 154, "else"
-       line 438, "pan.___", state 157, "(1)"
-       line 438, "pan.___", state 158, "(1)"
-       line 438, "pan.___", state 158, "(1)"
-       line 436, "pan.___", state 163, "((i<2))"
-       line 436, "pan.___", state 163, "((i>=2))"
-       line 446, "pan.___", state 167, "(1)"
-       line 446, "pan.___", state 167, "(1)"
-       line 268, "pan.___", state 176, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 185, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 198, "cache_dirty_rcu_ptr = 0"
-       line 407, "pan.___", state 238, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 252, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 270, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 284, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 303, "(1)"
-       line 429, "pan.___", state 316, "(1)"
-       line 434, "pan.___", state 333, "(1)"
-       line 438, "pan.___", state 346, "(1)"
-       line 411, "pan.___", state 383, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 401, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 415, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 447, "(1)"
-       line 434, "pan.___", state 464, "(1)"
-       line 438, "pan.___", state 477, "(1)"
-       line 411, "pan.___", state 522, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 540, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 554, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 586, "(1)"
-       line 434, "pan.___", state 603, "(1)"
-       line 438, "pan.___", state 616, "(1)"
-       line 411, "pan.___", state 651, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 669, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 683, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 715, "(1)"
-       line 434, "pan.___", state 732, "(1)"
-       line 438, "pan.___", state 745, "(1)"
-       line 411, "pan.___", state 782, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 800, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 814, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 846, "(1)"
-       line 434, "pan.___", state 863, "(1)"
-       line 438, "pan.___", state 876, "(1)"
-       line 268, "pan.___", state 931, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 940, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 955, "(1)"
-       line 280, "pan.___", state 962, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 978, "(1)"
-       line 249, "pan.___", state 986, "(1)"
-       line 253, "pan.___", state 998, "(1)"
-       line 257, "pan.___", state 1006, "(1)"
-       line 268, "pan.___", state 1037, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1046, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1059, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1068, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1084, "(1)"
-       line 249, "pan.___", state 1092, "(1)"
-       line 253, "pan.___", state 1104, "(1)"
-       line 257, "pan.___", state 1112, "(1)"
-       line 272, "pan.___", state 1138, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1151, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1160, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1176, "(1)"
-       line 249, "pan.___", state 1184, "(1)"
-       line 253, "pan.___", state 1196, "(1)"
-       line 257, "pan.___", state 1204, "(1)"
-       line 268, "pan.___", state 1235, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1244, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1257, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1266, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1282, "(1)"
-       line 249, "pan.___", state 1290, "(1)"
-       line 253, "pan.___", state 1302, "(1)"
-       line 257, "pan.___", state 1310, "(1)"
-       line 272, "pan.___", state 1336, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1349, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1358, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1374, "(1)"
-       line 249, "pan.___", state 1382, "(1)"
-       line 253, "pan.___", state 1394, "(1)"
-       line 257, "pan.___", state 1402, "(1)"
-       line 268, "pan.___", state 1433, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1442, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1455, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1464, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1480, "(1)"
-       line 249, "pan.___", state 1488, "(1)"
-       line 253, "pan.___", state 1500, "(1)"
-       line 257, "pan.___", state 1508, "(1)"
-       line 272, "pan.___", state 1534, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1547, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1556, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1572, "(1)"
-       line 249, "pan.___", state 1580, "(1)"
-       line 253, "pan.___", state 1592, "(1)"
-       line 257, "pan.___", state 1600, "(1)"
-       line 268, "pan.___", state 1631, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1640, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1653, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1662, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1678, "(1)"
-       line 249, "pan.___", state 1686, "(1)"
-       line 253, "pan.___", state 1698, "(1)"
-       line 257, "pan.___", state 1706, "(1)"
-       line 1304, "pan.___", state 1722, "-end-"
-       (129 of 1722 states)
-unreached in proctype :init:
-       line 1319, "pan.___", state 13, "((i<1))"
-       line 1319, "pan.___", state 13, "((i>=1))"
-       (1 of 28 states)
-unreached in proctype :never:
-       line 1367, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 6.09e+03 seconds
-pan: rate 2033.9606 states/second
-pan: avg transition delay 1.6108e-06 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.spin.input b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index cf50dff..0000000
+++ /dev/null
@@ -1,1340 +0,0 @@
-#define NO_RMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index d5ed67a..0000000
+++ /dev/null
@@ -1,1683 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4816
-2:2:3064
-3:2:3069
-4:2:3073
-5:2:3081
-6:2:3085
-7:2:3089
-8:0:4816
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:4816
-16:3:4786
-17:3:4789
-18:3:4796
-19:3:4803
-20:3:4806
-21:3:4810
-22:3:4811
-23:0:4816
-24:3:4813
-25:0:4816
-26:2:3093
-27:0:4816
-28:2:3099
-29:0:4816
-30:2:3100
-31:0:4816
-32:2:3102
-33:0:4816
-34:2:3103
-35:0:4816
-36:2:3104
-37:2:3105
-38:2:3109
-39:2:3110
-40:2:3118
-41:2:3119
-42:2:3123
-43:2:3124
-44:2:3132
-45:2:3137
-46:2:3141
-47:2:3142
-48:2:3150
-49:2:3151
-50:2:3155
-51:2:3156
-52:2:3150
-53:2:3151
-54:2:3155
-55:2:3156
-56:2:3164
-57:2:3169
-58:2:3170
-59:2:3181
-60:2:3182
-61:2:3183
-62:2:3194
-63:2:3199
-64:2:3200
-65:2:3211
-66:2:3212
-67:2:3213
-68:2:3211
-69:2:3212
-70:2:3213
-71:2:3224
-72:2:3232
-73:0:4816
-74:2:3103
-75:0:4816
-76:2:3236
-77:2:3240
-78:2:3241
-79:2:3245
-80:2:3249
-81:2:3250
-82:2:3254
-83:2:3262
-84:2:3263
-85:2:3267
-86:2:3271
-87:2:3272
-88:2:3267
-89:2:3268
-90:2:3276
-91:0:4816
-92:2:3103
-93:0:4816
-94:2:3284
-95:2:3285
-96:2:3286
-97:0:4816
-98:2:3103
-99:0:4816
-100:2:3291
-101:0:4816
-102:2:3995
-103:2:3996
-104:2:4000
-105:2:4004
-106:2:4005
-107:2:4009
-108:2:4014
-109:2:4022
-110:2:4026
-111:2:4027
-112:2:4022
-113:2:4026
-114:2:4027
-115:2:4031
-116:2:4038
-117:2:4045
-118:2:4046
-119:2:4053
-120:2:4058
-121:2:4065
-122:2:4066
-123:2:4065
-124:2:4066
-125:2:4073
-126:2:4077
-127:0:4816
-128:2:4082
-129:0:4816
-130:2:4083
-131:0:4816
-132:2:4084
-133:0:4816
-134:2:4085
-135:0:4816
-136:1:29
-137:0:4816
-138:2:4086
-139:0:4816
-140:1:35
-141:0:4816
-142:1:36
-143:0:4816
-144:2:4085
-145:0:4816
-146:1:37
-147:0:4816
-148:2:4086
-149:0:4816
-150:1:38
-151:0:4816
-152:2:4085
-153:0:4816
-154:1:39
-155:0:4816
-156:2:4086
-157:0:4816
-158:1:40
-159:0:4816
-160:2:4085
-161:0:4816
-162:1:41
-163:0:4816
-164:2:4086
-165:0:4816
-166:1:42
-167:0:4816
-168:1:43
-169:0:4816
-170:2:4085
-171:0:4816
-172:1:44
-173:0:4816
-174:2:4086
-175:0:4816
-176:1:53
-177:0:4816
-178:2:4085
-179:0:4816
-180:1:57
-181:1:58
-182:1:62
-183:1:66
-184:1:67
-185:1:71
-186:1:79
-187:1:80
-188:1:84
-189:1:88
-190:1:89
-191:1:84
-192:1:88
-193:1:89
-194:1:93
-195:1:100
-196:1:107
-197:1:108
-198:1:115
-199:1:120
-200:1:127
-201:1:128
-202:1:127
-203:1:128
-204:1:135
-205:1:139
-206:0:4816
-207:2:4086
-208:0:4816
-209:1:144
-210:0:4816
-211:2:4087
-212:0:4816
-213:2:4092
-214:0:4816
-215:2:4093
-216:0:4816
-217:2:4101
-218:2:4102
-219:2:4106
-220:2:4110
-221:2:4111
-222:2:4115
-223:2:4123
-224:2:4124
-225:2:4128
-226:2:4132
-227:2:4133
-228:2:4128
-229:2:4132
-230:2:4133
-231:2:4137
-232:2:4144
-233:2:4151
-234:2:4152
-235:2:4159
-236:2:4164
-237:2:4171
-238:2:4172
-239:2:4171
-240:2:4172
-241:2:4179
-242:2:4183
-243:0:4816
-244:2:3293
-245:2:3976
-246:0:4816
-247:2:3103
-248:0:4816
-249:2:3294
-250:0:4816
-251:2:3103
-252:0:4816
-253:2:3297
-254:2:3298
-255:2:3302
-256:2:3303
-257:2:3311
-258:2:3312
-259:2:3316
-260:2:3317
-261:2:3325
-262:2:3330
-263:2:3334
-264:2:3335
-265:2:3343
-266:2:3344
-267:2:3348
-268:2:3349
-269:2:3343
-270:2:3344
-271:2:3348
-272:2:3349
-273:2:3357
-274:2:3362
-275:2:3363
-276:2:3374
-277:2:3375
-278:2:3376
-279:2:3387
-280:2:3392
-281:2:3393
-282:2:3404
-283:2:3405
-284:2:3406
-285:2:3404
-286:2:3405
-287:2:3406
-288:2:3417
-289:2:3424
-290:0:4816
-291:2:3103
-292:0:4816
-293:2:3428
-294:2:3429
-295:2:3430
-296:2:3442
-297:2:3443
-298:2:3447
-299:2:3448
-300:2:3456
-301:2:3461
-302:2:3465
-303:2:3466
-304:2:3474
-305:2:3475
-306:2:3479
-307:2:3480
-308:2:3474
-309:2:3475
-310:2:3479
-311:2:3480
-312:2:3488
-313:2:3493
-314:2:3494
-315:2:3505
-316:2:3506
-317:2:3507
-318:2:3518
-319:2:3523
-320:2:3524
-321:2:3535
-322:2:3536
-323:2:3537
-324:2:3535
-325:2:3536
-326:2:3537
-327:2:3548
-328:2:3559
-329:2:3560
-330:0:4816
-331:2:3103
-332:0:4816
-333:2:3567
-334:2:3568
-335:2:3572
-336:2:3573
-337:2:3581
-338:2:3582
-339:2:3586
-340:2:3587
-341:2:3595
-342:2:3600
-343:2:3604
-344:2:3605
-345:2:3613
-346:2:3614
-347:2:3618
-348:2:3619
-349:2:3613
-350:2:3614
-351:2:3618
-352:2:3619
-353:2:3627
-354:2:3632
-355:2:3633
-356:2:3644
-357:2:3645
-358:2:3646
-359:2:3657
-360:2:3662
-361:2:3663
-362:2:3674
-363:2:3675
-364:2:3676
-365:2:3674
-366:2:3675
-367:2:3676
-368:2:3687
-369:0:4816
-370:2:3103
-371:0:4816
-372:2:3696
-373:2:3697
-374:2:3701
-375:2:3702
-376:2:3710
-377:2:3711
-378:2:3715
-379:2:3716
-380:2:3724
-381:2:3729
-382:2:3733
-383:2:3734
-384:2:3742
-385:2:3743
-386:2:3747
-387:2:3748
-388:2:3742
-389:2:3743
-390:2:3747
-391:2:3748
-392:2:3756
-393:2:3761
-394:2:3762
-395:2:3773
-396:2:3774
-397:2:3775
-398:2:3786
-399:2:3791
-400:2:3792
-401:2:3803
-402:2:3804
-403:2:3805
-404:2:3803
-405:2:3804
-406:2:3805
-407:2:3816
-408:2:3823
-409:0:4816
-410:2:3103
-411:0:4816
-412:2:3827
-413:2:3828
-414:2:3829
-415:2:3841
-416:2:3842
-417:2:3846
-418:2:3847
-419:2:3855
-420:2:3860
-421:2:3864
-422:2:3865
-423:2:3873
-424:2:3874
-425:2:3878
-426:2:3879
-427:2:3873
-428:2:3874
-429:2:3878
-430:2:3879
-431:2:3887
-432:2:3892
-433:2:3893
-434:2:3904
-435:2:3905
-436:2:3906
-437:2:3917
-438:2:3922
-439:2:3923
-440:2:3934
-441:2:3935
-442:2:3936
-443:2:3934
-444:2:3935
-445:2:3936
-446:2:3947
-447:2:3957
-448:2:3958
-449:0:4816
-450:2:3103
-451:0:4816
-452:2:3964
-453:0:4816
-454:2:4589
-455:2:4590
-456:2:4594
-457:2:4598
-458:2:4599
-459:2:4603
-460:2:4611
-461:2:4612
-462:2:4616
-463:2:4620
-464:2:4621
-465:2:4616
-466:2:4620
-467:2:4621
-468:2:4625
-469:2:4632
-470:2:4639
-471:2:4640
-472:2:4647
-473:2:4652
-474:2:4659
-475:2:4660
-476:2:4659
-477:2:4660
-478:2:4667
-479:2:4671
-480:0:4816
-481:2:4676
-482:0:4816
-483:2:4677
-484:0:4816
-485:2:4678
-486:0:4816
-487:2:4679
-488:0:4816
-489:1:53
-490:0:4816
-491:2:4680
-492:0:4816
-493:1:57
-494:1:58
-495:1:62
-496:1:66
-497:1:67
-498:1:71
-499:1:79
-500:1:80
-501:1:84
-502:1:88
-503:1:89
-504:1:84
-505:1:88
-506:1:89
-507:1:93
-508:1:100
-509:1:107
-510:1:108
-511:1:115
-512:1:120
-513:1:127
-514:1:128
-515:1:127
-516:1:128
-517:1:135
-518:1:139
-519:0:4816
-520:2:4679
-521:0:4816
-522:1:144
-523:0:4816
-524:2:4680
-525:0:4816
-526:2:4681
-527:0:4816
-528:2:4686
-529:0:4816
-530:2:4687
-531:0:4816
-532:2:4695
-533:2:4696
-534:2:4700
-535:2:4704
-536:2:4705
-537:2:4709
-538:2:4717
-539:2:4718
-540:2:4722
-541:2:4726
-542:2:4727
-543:2:4722
-544:2:4726
-545:2:4727
-546:2:4731
-547:2:4738
-548:2:4745
-549:2:4746
-550:2:4753
-551:2:4758
-552:2:4765
-553:2:4766
-554:2:4765
-555:2:4766
-556:2:4773
-557:2:4777
-558:0:4816
-559:2:3966
-560:2:3976
-561:0:4816
-562:2:3103
-563:0:4816
-564:2:3967
-565:2:3968
-566:0:4816
-567:2:3103
-568:0:4816
-569:2:3972
-570:0:4816
-571:2:3980
-572:0:4816
-573:2:3100
-574:0:4816
-575:2:3102
-576:0:4816
-577:2:3103
-578:0:4816
-579:2:3104
-580:2:3105
-581:2:3109
-582:2:3110
-583:2:3118
-584:2:3119
-585:2:3123
-586:2:3124
-587:2:3132
-588:2:3137
-589:2:3141
-590:2:3142
-591:2:3150
-592:2:3151
-593:2:3152
-594:2:3150
-595:2:3151
-596:2:3155
-597:2:3156
-598:2:3164
-599:2:3169
-600:2:3170
-601:2:3181
-602:2:3182
-603:2:3183
-604:2:3194
-605:2:3199
-606:2:3200
-607:2:3211
-608:2:3212
-609:2:3213
-610:2:3211
-611:2:3212
-612:2:3213
-613:2:3224
-614:2:3232
-615:0:4816
-616:2:3103
-617:0:4816
-618:2:3236
-619:2:3240
-620:2:3241
-621:2:3245
-622:2:3249
-623:2:3250
-624:2:3254
-625:2:3262
-626:2:3263
-627:2:3267
-628:2:3268
-629:2:3267
-630:2:3271
-631:2:3272
-632:2:3276
-633:0:4816
-634:2:3103
-635:0:4816
-636:2:3284
-637:2:3285
-638:2:3286
-639:0:4816
-640:2:3103
-641:0:4816
-642:2:3291
-643:0:4816
-644:2:3995
-645:2:3996
-646:2:4000
-647:2:4004
-648:2:4005
-649:2:4009
-650:2:4014
-651:2:4022
-652:2:4026
-653:2:4027
-654:2:4022
-655:2:4026
-656:2:4027
-657:2:4031
-658:2:4038
-659:2:4045
-660:2:4046
-661:2:4053
-662:2:4058
-663:2:4065
-664:2:4066
-665:2:4065
-666:2:4066
-667:2:4073
-668:2:4077
-669:0:4816
-670:2:4082
-671:0:4816
-672:2:4083
-673:0:4816
-674:2:4084
-675:0:4816
-676:2:4085
-677:0:4816
-678:1:53
-679:0:4816
-680:2:4086
-681:0:4816
-682:1:57
-683:1:58
-684:1:62
-685:1:66
-686:1:67
-687:1:71
-688:1:79
-689:1:80
-690:1:84
-691:1:88
-692:1:89
-693:1:84
-694:1:88
-695:1:89
-696:1:93
-697:1:100
-698:1:107
-699:1:108
-700:1:115
-701:1:120
-702:1:127
-703:1:128
-704:1:127
-705:1:128
-706:1:135
-707:1:139
-708:0:4816
-709:2:4085
-710:0:4816
-711:1:144
-712:0:4816
-713:2:4086
-714:0:4816
-715:2:4087
-716:0:4816
-717:2:4092
-718:0:4816
-719:2:4093
-720:0:4816
-721:2:4101
-722:2:4102
-723:2:4106
-724:2:4110
-725:2:4111
-726:2:4115
-727:2:4123
-728:2:4124
-729:2:4128
-730:2:4132
-731:2:4133
-732:2:4128
-733:2:4132
-734:2:4133
-735:2:4137
-736:2:4144
-737:2:4151
-738:2:4152
-739:2:4159
-740:2:4164
-741:2:4171
-742:2:4172
-743:2:4171
-744:2:4172
-745:2:4179
-746:2:4183
-747:0:4816
-748:2:3293
-749:2:3976
-750:0:4816
-751:2:3103
-752:0:4816
-753:2:3294
-754:0:4816
-755:2:3103
-756:0:4816
-757:2:3297
-758:2:3298
-759:2:3302
-760:2:3303
-761:2:3311
-762:2:3312
-763:2:3316
-764:2:3317
-765:2:3325
-766:2:3330
-767:2:3334
-768:2:3335
-769:2:3343
-770:2:3344
-771:2:3348
-772:2:3349
-773:2:3343
-774:2:3344
-775:2:3348
-776:2:3349
-777:2:3357
-778:2:3362
-779:2:3363
-780:2:3374
-781:2:3375
-782:2:3376
-783:2:3387
-784:2:3392
-785:2:3393
-786:2:3404
-787:2:3405
-788:2:3406
-789:2:3404
-790:2:3405
-791:2:3406
-792:2:3417
-793:2:3424
-794:0:4816
-795:2:3103
-796:0:4816
-797:2:3428
-798:2:3429
-799:2:3430
-800:2:3442
-801:2:3443
-802:2:3447
-803:2:3448
-804:2:3456
-805:2:3461
-806:2:3465
-807:2:3466
-808:2:3474
-809:2:3475
-810:2:3479
-811:2:3480
-812:2:3474
-813:2:3475
-814:2:3479
-815:2:3480
-816:2:3488
-817:2:3493
-818:2:3494
-819:2:3505
-820:2:3506
-821:2:3507
-822:2:3518
-823:2:3523
-824:2:3524
-825:2:3535
-826:2:3536
-827:2:3537
-828:2:3535
-829:2:3536
-830:2:3537
-831:2:3548
-832:2:3559
-833:2:3560
-834:0:4816
-835:2:3103
-836:0:4816
-837:2:3567
-838:2:3568
-839:2:3572
-840:2:3573
-841:2:3581
-842:2:3582
-843:2:3586
-844:2:3587
-845:2:3595
-846:2:3600
-847:2:3604
-848:2:3605
-849:2:3613
-850:2:3614
-851:2:3618
-852:2:3619
-853:2:3613
-854:2:3614
-855:2:3618
-856:2:3619
-857:2:3627
-858:2:3632
-859:2:3633
-860:2:3644
-861:2:3645
-862:2:3646
-863:2:3657
-864:2:3662
-865:2:3663
-866:2:3674
-867:2:3675
-868:2:3676
-869:2:3674
-870:2:3675
-871:2:3676
-872:2:3687
-873:0:4816
-874:2:3103
-875:0:4816
-876:2:3696
-877:2:3697
-878:2:3701
-879:2:3702
-880:2:3710
-881:2:3711
-882:2:3715
-883:2:3716
-884:2:3724
-885:2:3729
-886:2:3733
-887:2:3734
-888:2:3742
-889:2:3743
-890:2:3747
-891:2:3748
-892:2:3742
-893:2:3743
-894:2:3747
-895:2:3748
-896:2:3756
-897:2:3761
-898:2:3762
-899:2:3773
-900:2:3774
-901:2:3775
-902:2:3786
-903:2:3791
-904:2:3792
-905:2:3803
-906:2:3804
-907:2:3805
-908:2:3803
-909:2:3804
-910:2:3805
-911:2:3816
-912:2:3823
-913:0:4816
-914:2:3103
-915:0:4816
-916:2:3827
-917:2:3828
-918:2:3829
-919:2:3841
-920:2:3842
-921:2:3846
-922:2:3847
-923:2:3855
-924:2:3860
-925:2:3864
-926:2:3865
-927:2:3873
-928:2:3874
-929:2:3878
-930:2:3879
-931:2:3873
-932:2:3874
-933:2:3878
-934:2:3879
-935:2:3887
-936:2:3892
-937:2:3893
-938:2:3904
-939:2:3905
-940:2:3906
-941:2:3917
-942:2:3922
-943:2:3923
-944:2:3934
-945:2:3935
-946:2:3936
-947:2:3934
-948:2:3935
-949:2:3936
-950:2:3947
-951:2:3957
-952:2:3958
-953:0:4816
-954:2:3103
-955:0:4816
-956:2:3964
-957:0:4816
-958:2:4589
-959:2:4590
-960:2:4594
-961:2:4598
-962:2:4599
-963:2:4603
-964:2:4611
-965:2:4612
-966:2:4616
-967:2:4620
-968:2:4621
-969:2:4616
-970:2:4620
-971:2:4621
-972:2:4625
-973:2:4632
-974:2:4639
-975:2:4640
-976:2:4647
-977:2:4652
-978:2:4659
-979:2:4660
-980:2:4659
-981:2:4660
-982:2:4667
-983:2:4671
-984:0:4816
-985:2:4676
-986:0:4816
-987:2:4677
-988:0:4816
-989:2:4678
-990:0:4816
-991:2:4679
-992:0:4816
-993:1:53
-994:0:4816
-995:2:4680
-996:0:4816
-997:1:57
-998:1:58
-999:1:62
-1000:1:66
-1001:1:67
-1002:1:71
-1003:1:79
-1004:1:80
-1005:1:84
-1006:1:88
-1007:1:89
-1008:1:84
-1009:1:88
-1010:1:89
-1011:1:93
-1012:1:100
-1013:1:107
-1014:1:108
-1015:1:115
-1016:1:120
-1017:1:127
-1018:1:128
-1019:1:127
-1020:1:128
-1021:1:135
-1022:1:139
-1023:0:4816
-1024:2:4679
-1025:0:4816
-1026:1:144
-1027:0:4816
-1028:2:4680
-1029:0:4816
-1030:2:4681
-1031:0:4816
-1032:2:4686
-1033:0:4816
-1034:2:4687
-1035:0:4816
-1036:2:4695
-1037:2:4696
-1038:2:4700
-1039:2:4704
-1040:2:4705
-1041:2:4709
-1042:2:4717
-1043:2:4718
-1044:2:4722
-1045:2:4726
-1046:2:4727
-1047:2:4722
-1048:2:4726
-1049:2:4727
-1050:2:4731
-1051:2:4738
-1052:2:4745
-1053:2:4746
-1054:2:4753
-1055:2:4758
-1056:2:4765
-1057:2:4766
-1058:2:4765
-1059:2:4766
-1060:2:4773
-1061:2:4777
-1062:0:4816
-1063:2:3966
-1064:2:3976
-1065:0:4816
-1066:2:3103
-1067:0:4816
-1068:2:3967
-1069:2:3968
-1070:0:4816
-1071:2:3103
-1072:0:4816
-1073:2:3972
-1074:0:4816
-1075:2:3980
-1076:0:4816
-1077:2:3100
-1078:0:4816
-1079:2:3102
-1080:0:4816
-1081:2:3103
-1082:0:4816
-1083:2:3104
-1084:2:3105
-1085:2:3109
-1086:2:3110
-1087:2:3118
-1088:2:3119
-1089:2:3123
-1090:2:3124
-1091:2:3132
-1092:2:3137
-1093:2:3141
-1094:2:3142
-1095:2:3150
-1096:2:3151
-1097:2:3155
-1098:2:3156
-1099:2:3150
-1100:2:3151
-1101:2:3152
-1102:2:3164
-1103:2:3169
-1104:2:3170
-1105:2:3181
-1106:2:3182
-1107:2:3183
-1108:2:3194
-1109:2:3199
-1110:2:3200
-1111:2:3211
-1112:2:3212
-1113:2:3213
-1114:2:3211
-1115:2:3212
-1116:2:3213
-1117:2:3224
-1118:2:3232
-1119:0:4816
-1120:2:3103
-1121:0:4816
-1122:1:145
-1123:0:4816
-1124:1:147
-1125:0:4816
-1126:1:46
-1127:0:4816
-1128:1:153
-1129:1:154
-1130:1:158
-1131:1:159
-1132:1:167
-1133:1:168
-1134:1:172
-1135:1:173
-1136:1:181
-1137:1:186
-1138:1:190
-1139:1:191
-1140:1:199
-1141:1:200
-1142:1:204
-1143:1:205
-1144:1:199
-1145:1:200
-1146:1:204
-1147:1:205
-1148:1:213
-1149:1:218
-1150:1:219
-1151:1:230
-1152:1:231
-1153:1:232
-1154:1:243
-1155:1:248
-1156:1:249
-1157:1:260
-1158:1:261
-1159:1:262
-1160:1:260
-1161:1:261
-1162:1:262
-1163:1:273
-1164:0:4816
-1165:1:42
-1166:0:4816
-1167:1:43
-1168:0:4816
-1169:2:3236
-1170:2:3240
-1171:2:3241
-1172:2:3245
-1173:2:3249
-1174:2:3250
-1175:2:3254
-1176:2:3262
-1177:2:3263
-1178:2:3267
-1179:2:3271
-1180:2:3272
-1181:2:3267
-1182:2:3268
-1183:2:3276
-1184:0:4816
-1185:2:3103
-1186:0:4816
-1187:2:3284
-1188:2:3285
-1189:2:3286
-1190:0:4816
-1191:2:3103
-1192:0:4816
-1193:2:3291
-1194:0:4816
-1195:2:3995
-1196:2:3996
-1197:2:4000
-1198:2:4004
-1199:2:4005
-1200:2:4009
-1201:2:4014
-1202:2:4022
-1203:2:4026
-1204:2:4027
-1205:2:4022
-1206:2:4026
-1207:2:4027
-1208:2:4031
-1209:2:4038
-1210:2:4045
-1211:2:4046
-1212:2:4053
-1213:2:4058
-1214:2:4065
-1215:2:4066
-1216:2:4065
-1217:2:4066
-1218:2:4073
-1219:2:4077
-1220:0:4816
-1221:2:4082
-1222:0:4816
-1223:2:4083
-1224:0:4816
-1225:2:4084
-1226:0:4816
-1227:2:4085
-1228:0:4816
-1229:1:44
-1230:0:4816
-1231:2:4086
-1232:0:4816
-1233:1:145
-1234:0:4816
-1235:1:147
-1236:0:4816
-1237:2:4085
-1238:0:4816
-1239:1:46
-1240:0:4816
-1241:2:4086
-1242:0:4816
-1243:1:282
-1244:1:283
-1245:0:4816
-1246:1:42
-1247:0:4816
-1248:1:43
-1249:0:4816
-1250:2:4085
-1251:0:4816
-1252:1:44
-1253:0:4816
-1254:2:4086
-1255:0:4816
-1256:1:145
-1257:0:4816
-1258:1:147
-1259:0:4816
-1260:2:4085
-1261:0:4816
-1262:1:46
-1263:0:4816
-1264:2:4086
-1265:0:4816
-1266:1:289
-1267:1:290
-1268:1:294
-1269:1:295
-1270:1:303
-1271:1:304
-1272:1:308
-1273:1:309
-1274:1:317
-1275:1:322
-1276:1:326
-1277:1:327
-1278:1:335
-1279:1:336
-1280:1:340
-1281:1:341
-1282:1:335
-1283:1:336
-1284:1:340
-1285:1:341
-1286:1:349
-1287:1:354
-1288:1:355
-1289:1:366
-1290:1:367
-1291:1:368
-1292:1:379
-1293:1:384
-1294:1:385
-1295:1:396
-1296:1:397
-1297:1:398
-1298:1:396
-1299:1:404
-1300:1:405
-1301:1:409
-1302:0:4816
-1303:1:42
-1304:0:4816
-1305:1:43
-1306:0:4816
-1307:2:4085
-1308:0:4816
-1309:1:44
-1310:0:4816
-1311:2:4086
-1312:0:4816
-1313:1:145
-1314:0:4816
-1315:1:147
-1316:0:4816
-1317:2:4085
-1318:0:4816
-1319:1:46
-1320:0:4816
-1321:2:4086
-1322:0:4816
-1323:1:418
-1324:1:419
-1325:1:423
-1326:1:424
-1327:1:432
-1328:1:433
-1329:1:437
-1330:1:438
-1331:1:446
-1332:1:451
-1333:1:455
-1334:1:456
-1335:1:464
-1336:1:465
-1337:1:469
-1338:1:470
-1339:1:464
-1340:1:465
-1341:1:469
-1342:1:470
-1343:1:478
-1344:1:483
-1345:1:484
-1346:1:495
-1347:1:496
-1348:1:497
-1349:1:508
-1350:1:513
-1351:1:514
-1352:1:525
-1353:1:526
-1354:1:527
-1355:1:525
-1356:1:533
-1357:1:534
-1358:1:538
-1359:1:545
-1360:0:4816
-1361:1:42
-1362:0:4816
-1363:1:43
-1364:0:4816
-1365:2:4085
-1366:0:4816
-1367:1:44
-1368:0:4816
-1369:2:4086
-1370:0:4816
-1371:1:145
-1372:0:4816
-1373:1:147
-1374:0:4816
-1375:2:4085
-1376:0:4816
-1377:1:46
-1378:0:4816
-1379:2:4086
-1380:0:4816
-1381:1:683
-1382:1:684
-1383:1:688
-1384:1:689
-1385:1:697
-1386:1:698
-1387:1:699
-1388:1:711
-1389:1:716
-1390:1:720
-1391:1:721
-1392:1:729
-1393:1:730
-1394:1:734
-1395:1:735
-1396:1:729
-1397:1:730
-1398:1:734
-1399:1:735
-1400:1:743
-1401:1:748
-1402:1:749
-1403:1:760
-1404:1:761
-1405:1:762
-1406:1:773
-1407:1:778
-1408:1:779
-1409:1:790
-1410:1:791
-1411:1:792
-1412:1:790
-1413:1:798
-1414:1:799
-1415:1:803
-1416:0:4816
-1417:1:42
-1418:0:4816
-1419:1:43
-1420:0:4816
-1421:2:4085
-1422:0:4816
-1423:1:44
-1424:0:4816
-1425:2:4086
-1426:0:4816
-1427:1:145
-1428:0:4816
-1429:1:147
-1430:0:4816
-1431:2:4085
-1432:0:4816
-1433:1:46
-1434:0:4816
-1435:2:4086
-1436:0:4816
-1437:1:812
-1438:1:815
-1439:1:816
-1440:0:4816
-1441:1:42
-1442:0:4816
-1443:1:43
-1444:0:4816
-1445:2:4085
-1446:0:4816
-1447:1:44
-1448:0:4816
-1449:2:4086
-1450:0:4816
-1451:1:145
-1452:0:4816
-1453:1:147
-1454:0:4816
-1455:2:4085
-1456:0:4816
-1457:1:46
-1458:0:4816
-1459:2:4086
-1460:0:4816
-1461:1:819
-1462:1:820
-1463:1:824
-1464:1:825
-1465:1:833
-1466:1:834
-1467:1:838
-1468:1:839
-1469:1:847
-1470:1:852
-1471:1:856
-1472:1:857
-1473:1:865
-1474:1:866
-1475:1:870
-1476:1:871
-1477:1:865
-1478:1:866
-1479:1:870
-1480:1:871
-1481:1:879
-1482:1:884
-1483:1:885
-1484:1:896
-1485:1:897
-1486:1:898
-1487:1:909
-1488:1:914
-1489:1:915
-1490:1:926
-1491:1:927
-1492:1:928
-1493:1:926
-1494:1:934
-1495:1:935
-1496:1:939
-1497:0:4816
-1498:1:42
-1499:0:4816
-1500:1:43
-1501:0:4816
-1502:2:4085
-1503:0:4816
-1504:1:44
-1505:0:4816
-1506:2:4086
-1507:0:4816
-1508:1:145
-1509:0:4816
-1510:1:147
-1511:0:4816
-1512:2:4085
-1513:0:4816
-1514:1:46
-1515:0:4816
-1516:2:4086
-1517:0:4816
-1518:1:1079
-1519:1:1080
-1520:1:1084
-1521:1:1085
-1522:1:1093
-1523:1:1094
-1524:1:1098
-1525:1:1099
-1526:1:1107
-1527:1:1112
-1528:1:1116
-1529:1:1117
-1530:1:1125
-1531:1:1126
-1532:1:1130
-1533:1:1131
-1534:1:1125
-1535:1:1126
-1536:1:1130
-1537:1:1131
-1538:1:1139
-1539:1:1144
-1540:1:1145
-1541:1:1156
-1542:1:1157
-1543:1:1158
-1544:1:1169
-1545:1:1174
-1546:1:1175
-1547:1:1186
-1548:1:1187
-1549:1:1188
-1550:1:1186
-1551:1:1194
-1552:1:1195
-1553:1:1199
-1554:1:1206
-1555:1:1210
-1556:0:4816
-1557:1:42
-1558:0:4816
-1559:1:43
-1560:0:4816
-1561:2:4085
-1562:0:4816
-1563:1:44
-1564:0:4816
-1565:2:4086
-1566:0:4816
-1567:1:145
-1568:0:4816
-1569:1:147
-1570:0:4816
-1571:2:4085
-1572:0:4816
-1573:1:46
-1574:0:4816
-1575:2:4086
-1576:0:4816
-1577:1:1211
-1578:1:1212
-1579:1:1216
-1580:1:1217
-1581:1:1225
-1582:1:1226
-1583:1:1227
-1584:1:1239
-1585:1:1244
-1586:1:1248
-1587:1:1249
-1588:1:1257
-1589:1:1258
-1590:1:1262
-1591:1:1263
-1592:1:1257
-1593:1:1258
-1594:1:1262
-1595:1:1263
-1596:1:1271
-1597:1:1276
-1598:1:1277
-1599:1:1288
-1600:1:1289
-1601:1:1290
-1602:1:1301
-1603:1:1306
-1604:1:1307
-1605:1:1318
-1606:1:1319
-1607:1:1320
-1608:1:1318
-1609:1:1326
-1610:1:1327
-1611:1:1331
-1612:0:4816
-1613:1:42
-1614:0:4816
-1615:1:43
-1616:0:4816
-1617:2:4085
-1618:0:4816
-1619:1:44
-1620:0:4816
-1621:2:4086
-1622:0:4816
-1623:1:145
-1624:0:4816
-1625:1:147
-1626:0:4816
-1627:2:4085
-1628:0:4816
-1629:1:46
-1630:0:4816
-1631:2:4086
-1632:0:4816
-1633:1:1340
-1634:0:4816
-1635:2:4085
-1636:0:4816
-1637:1:2804
-1638:1:2808
-1639:1:2809
-1640:1:2817
-1641:1:2818
-1642:1:2822
-1643:1:2823
-1644:1:2831
-1645:1:2836
-1646:1:2840
-1647:1:2841
-1648:1:2849
-1649:1:2850
-1650:1:2854
-1651:1:2855
-1652:1:2849
-1653:1:2850
-1654:1:2854
-1655:1:2855
-1656:1:2863
-1657:1:2868
-1658:1:2869
-1659:1:2880
-1660:1:2881
-1661:1:2882
-1662:1:2893
-1663:1:2898
-1664:1:2899
-1665:1:2910
-1666:1:2911
-1667:1:2912
-1668:1:2910
-1669:1:2918
-1670:1:2919
-1671:1:2923
-1672:1:2927
-1673:0:4816
-1674:2:4086
-1675:0:4816
-1676:1:1342
-1677:1:1343
-1678:0:4814
-1679:1:42
-1680:0:4820
-1681:1:2421
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.define b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.log b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 7da250d..0000000
+++ /dev/null
@@ -1,580 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1362)
-Depth=    8002 States=    1e+06 Transitions= 1.77e+08 Memory=   513.029        t=    264 R=   4e+03
-Depth=    9746 States=    2e+06 Transitions= 3.71e+08 Memory=   559.318        t=    570 R=   4e+03
-Depth=    9746 States=    3e+06 Transitions=  5.8e+08 Memory=   605.901        t=    916 R=   3e+03
-pan: resizing hashtable to -w22..  done
-Depth=    9746 States=    4e+06 Transitions=  7.6e+08 Memory=   682.920        t= 1.19e+03 R=   3e+03
-Depth=    9746 States=    5e+06 Transitions= 9.44e+08 Memory=   728.721        t= 1.47e+03 R=   3e+03
-Depth=    9746 States=    6e+06 Transitions= 1.35e+09 Memory=   775.303        t= 2.12e+03 R=   3e+03
-Depth=    9746 States=    7e+06 Transitions= 1.79e+09 Memory=   821.885        t= 2.84e+03 R=   2e+03
-Depth=    9746 States=    8e+06 Transitions= 2.11e+09 Memory=   868.076        t= 3.35e+03 R=   2e+03
-Depth=    9746 States=    9e+06 Transitions= 2.49e+09 Memory=   914.658        t= 3.99e+03 R=   2e+03
-pan: resizing hashtable to -w24..  done
-Depth=    9746 States=    1e+07 Transitions= 2.83e+09 Memory=  1085.529        t= 4.5e+03 R=   2e+03
-Depth=    9746 States=  1.1e+07 Transitions=  3.2e+09 Memory=  1132.795        t= 5.06e+03 R=   2e+03
-Depth=    9746 States=  1.2e+07 Transitions= 3.59e+09 Memory=  1179.670        t= 5.66e+03 R=   2e+03
-Depth=    9746 States=  1.3e+07 Transitions= 3.78e+09 Memory=  1226.447        t= 5.95e+03 R=   2e+03
-Depth=    9746 States=  1.4e+07 Transitions= 3.96e+09 Memory=  1272.346        t= 6.23e+03 R=   2e+03
-Depth=    9746 States=  1.5e+07 Transitions= 4.17e+09 Memory=  1318.440        t= 6.56e+03 R=   2e+03
-Depth=    9746 States=  1.6e+07 Transitions= 4.37e+09 Memory=  1364.338        t= 6.86e+03 R=   2e+03
-Depth=    9746 States=  1.7e+07 Transitions= 4.55e+09 Memory=  1410.139        t= 7.14e+03 R=   2e+03
-Depth=    9746 States=  1.8e+07 Transitions=  4.8e+09 Memory=  1456.135        t= 7.53e+03 R=   2e+03
-Depth=    9746 States=  1.9e+07 Transitions=  5.2e+09 Memory=  1502.326        t= 8.17e+03 R=   2e+03
-Depth=    9746 States=    2e+07 Transitions= 5.67e+09 Memory=  1548.615        t= 8.94e+03 R=   2e+03
-Depth=    9746 States=  2.1e+07 Transitions= 6.01e+09 Memory=  1594.611        t= 9.49e+03 R=   2e+03
-Depth=    9746 States=  2.2e+07 Transitions= 6.42e+09 Memory=  1640.998        t= 1.01e+04 R=   2e+03
-Depth=    9746 States=  2.3e+07 Transitions= 6.67e+09 Memory=  1687.580        t= 1.05e+04 R=   2e+03
-Depth=    9746 States=  2.4e+07 Transitions= 6.96e+09 Memory=  1733.674        t= 1.1e+04 R=   2e+03
-Depth=    9746 States=  2.5e+07 Transitions=  7.2e+09 Memory=  1779.865        t= 1.14e+04 R=   2e+03
-Depth=    9746 States=  2.6e+07 Transitions= 7.61e+09 Memory=  1826.154        t= 1.2e+04 R=   2e+03
-Depth=    9746 States=  2.7e+07 Transitions= 8.36e+09 Memory=  1872.248        t= 1.32e+04 R=   2e+03
-Depth=    9746 States=  2.8e+07 Transitions= 9.08e+09 Memory=  1918.733        t= 1.44e+04 R=   2e+03
-Depth=    9746 States=  2.9e+07 Transitions= 9.48e+09 Memory=  1965.608        t= 1.51e+04 R=   2e+03
-Depth=    9746 States=    3e+07 Transitions= 9.94e+09 Memory=  2012.483        t= 1.58e+04 R=   2e+03
-Depth=    9746 States=  3.1e+07 Transitions= 1.02e+10 Memory=  2058.576        t= 1.62e+04 R=   2e+03
-Depth=    9746 States=  3.2e+07 Transitions= 1.05e+10 Memory=  2104.475        t= 1.67e+04 R=   2e+03
-Depth=    9746 States=  3.3e+07 Transitions= 1.08e+10 Memory=  2150.373        t= 1.72e+04 R=   2e+03
-Depth=    9746 States=  3.4e+07 Transitions= 1.15e+10 Memory=  2196.369        t= 1.84e+04 R=   2e+03
-pan: resizing hashtable to -w26..  done
-Depth=    9746 States=  3.5e+07 Transitions= 1.22e+10 Memory=  2738.350        t= 1.96e+04 R=   2e+03
-Depth=    9746 States=  3.6e+07 Transitions= 1.27e+10 Memory=  2784.639        t= 2.03e+04 R=   2e+03
-Depth=    9746 States=  3.7e+07 Transitions= 1.29e+10 Memory=  2831.026        t= 2.07e+04 R=   2e+03
-Depth=    9746 States=  3.8e+07 Transitions= 1.34e+10 Memory=  2877.510        t= 2.14e+04 R=   2e+03
-Depth=    9746 States=  3.9e+07 Transitions= 1.39e+10 Memory=  2923.701        t= 2.21e+04 R=   2e+03
-Depth=    9746 States=    4e+07 Transitions= 1.44e+10 Memory=  2969.697        t= 2.29e+04 R=   2e+03
-Depth=    9746 States=  4.1e+07 Transitions= 1.48e+10 Memory=  3015.889        t= 2.36e+04 R=   2e+03
-Depth=    9746 States=  4.2e+07 Transitions= 1.52e+10 Memory=  3061.787        t= 2.42e+04 R=   2e+03
-Depth=    9746 States=  4.3e+07 Transitions= 1.57e+10 Memory=  3107.979        t= 2.5e+04 R=   2e+03
-Depth=    9746 States=  4.4e+07 Transitions= 1.61e+10 Memory=  3153.779        t= 2.56e+04 R=   2e+03
-Depth=    9746 States=  4.5e+07 Transitions= 1.64e+10 Memory=  3199.873        t= 2.6e+04 R=   2e+03
-Depth=    9746 States=  4.6e+07 Transitions= 1.68e+10 Memory=  3245.967        t= 2.66e+04 R=   2e+03
-Depth=    9746 States=  4.7e+07 Transitions=  1.7e+10 Memory=  3291.865        t= 2.7e+04 R=   2e+03
-Depth=    9746 States=  4.8e+07 Transitions= 1.74e+10 Memory=  3338.057        t= 2.75e+04 R=   2e+03
-Depth=    9746 States=  4.9e+07 Transitions= 1.79e+10 Memory=  3384.151        t= 2.83e+04 R=   2e+03
-Depth=    9868 States=    5e+07 Transitions= 1.82e+10 Memory=  3429.951        t= 2.88e+04 R=   2e+03
-Depth=    9912 States=  5.1e+07 Transitions= 1.86e+10 Memory=  3475.752        t= 2.94e+04 R=   2e+03
-Depth=    9912 States=  5.2e+07 Transitions= 1.89e+10 Memory=  3521.553        t= 2.99e+04 R=   2e+03
-Depth=    9912 States=  5.3e+07 Transitions= 1.93e+10 Memory=  3567.256        t= 3.05e+04 R=   2e+03
-Depth=    9912 States=  5.4e+07 Transitions= 1.96e+10 Memory=  3613.154        t= 3.1e+04 R=   2e+03
-Depth=    9912 States=  5.5e+07 Transitions=    2e+10 Memory=  3659.053        t= 3.16e+04 R=   2e+03
-Depth=    9912 States=  5.6e+07 Transitions= 2.03e+10 Memory=  3704.756        t= 3.2e+04 R=   2e+03
-Depth=    9912 States=  5.7e+07 Transitions= 2.06e+10 Memory=  3750.557        t= 3.25e+04 R=   2e+03
-Depth=    9912 States=  5.8e+07 Transitions=  2.1e+10 Memory=  3796.455        t= 3.31e+04 R=   2e+03
-Depth=    9912 States=  5.9e+07 Transitions= 2.13e+10 Memory=  3842.256        t= 3.37e+04 R=   2e+03
-Depth=    9912 States=    6e+07 Transitions= 2.16e+10 Memory=  3888.057        t= 3.42e+04 R=   2e+03
-Depth=    9912 States=  6.1e+07 Transitions=  2.2e+10 Memory=  3933.858        t= 3.47e+04 R=   2e+03
-Depth=    9912 States=  6.2e+07 Transitions= 2.23e+10 Memory=  3979.658        t= 3.52e+04 R=   2e+03
-Depth=    9912 States=  6.3e+07 Transitions= 2.27e+10 Memory=  4025.459        t= 3.58e+04 R=   2e+03
-Depth=    9912 States=  6.4e+07 Transitions=  2.3e+10 Memory=  4071.260        t= 3.63e+04 R=   2e+03
-Depth=    9912 States=  6.5e+07 Transitions= 2.33e+10 Memory=  4116.963        t= 3.69e+04 R=   2e+03
-Depth=    9912 States=  6.6e+07 Transitions= 2.36e+10 Memory=  4162.764        t= 3.73e+04 R=   2e+03
-Depth=    9912 States=  6.7e+07 Transitions= 2.39e+10 Memory=  4208.565        t= 3.78e+04 R=   2e+03
-Depth=    9912 States=  6.8e+07 Transitions= 2.42e+10 Memory=  4254.463        t= 3.83e+04 R=   2e+03
-Depth=    9912 States=  6.9e+07 Transitions= 2.46e+10 Memory=  4300.361        t= 3.88e+04 R=   2e+03
-Depth=    9912 States=    7e+07 Transitions=  2.5e+10 Memory=  4346.553        t= 3.94e+04 R=   2e+03
-Depth=    9912 States=  7.1e+07 Transitions= 2.53e+10 Memory=  4392.354        t=  4e+04 R=   2e+03
-Depth=    9912 States=  7.2e+07 Transitions= 2.58e+10 Memory=  4438.252        t= 4.07e+04 R=   2e+03
-Depth=    9912 States=  7.3e+07 Transitions= 2.61e+10 Memory=  4484.151        t= 4.12e+04 R=   2e+03
-Depth=    9912 States=  7.4e+07 Transitions= 2.66e+10 Memory=  4530.635        t= 4.19e+04 R=   2e+03
-Depth=    9912 States=  7.5e+07 Transitions= 2.69e+10 Memory=  4577.315        t= 4.25e+04 R=   2e+03
-Depth=    9912 States=  7.6e+07 Transitions= 2.74e+10 Memory=  4623.897        t= 4.32e+04 R=   2e+03
-Depth=    9912 States=  7.7e+07 Transitions= 2.78e+10 Memory=  4669.893        t= 4.39e+04 R=   2e+03
-Depth=    9912 States=  7.8e+07 Transitions= 2.82e+10 Memory=  4716.084        t= 4.45e+04 R=   2e+03
-Depth=    9912 States=  7.9e+07 Transitions= 2.85e+10 Memory=  4762.568        t= 4.5e+04 R=   2e+03
-Depth=    9912 States=    8e+07 Transitions= 2.87e+10 Memory=  4808.369        t= 4.52e+04 R=   2e+03
-Depth=    9912 States=  8.1e+07 Transitions= 2.89e+10 Memory=  4854.170        t= 4.56e+04 R=   2e+03
-Depth=    9912 States=  8.2e+07 Transitions= 2.91e+10 Memory=  4899.971        t= 4.59e+04 R=   2e+03
-Depth=    9912 States=  8.3e+07 Transitions= 2.93e+10 Memory=  4945.772        t= 4.61e+04 R=   2e+03
-Depth=    9912 States=  8.4e+07 Transitions= 2.95e+10 Memory=  4991.475        t= 4.64e+04 R=   2e+03
-Depth=    9912 States=  8.5e+07 Transitions= 2.99e+10 Memory=  5037.276        t= 4.71e+04 R=   2e+03
-Depth=    9912 States=  8.6e+07 Transitions= 3.03e+10 Memory=  5083.076        t= 4.78e+04 R=   2e+03
-Depth=    9912 States=  8.7e+07 Transitions= 3.07e+10 Memory=  5128.877        t= 4.83e+04 R=   2e+03
-pan: claim violated! (at depth 1530)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 9912, errors: 1
- 87915830 states, stored
-3.0918075e+10 states, matched
-3.100599e+10 transitions (= stored+matched)
-1.742054e+11 atomic steps
-hash conflicts: 1.5948958e+10 (resolved)
-
-Stats on memory usage (in Megabytes):
- 9725.796      equivalent memory usage for states (stored*(State-vector + overhead))
- 4202.002      actual memory usage for states (compression: 43.20%)
-               state-vector as stored = 14 byte + 36 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
- 5170.869      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 517357 4332 4682 2 2 ]
-unreached in proctype urcu_reader
-       line 894, "pan.___", state 12, "((i<1))"
-       line 894, "pan.___", state 12, "((i>=1))"
-       line 268, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 104, "(1)"
-       line 249, "pan.___", state 112, "(1)"
-       line 253, "pan.___", state 124, "(1)"
-       line 257, "pan.___", state 132, "(1)"
-       line 407, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 223, "(1)"
-       line 434, "pan.___", state 253, "(1)"
-       line 438, "pan.___", state 266, "(1)"
-       line 687, "pan.___", state 287, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 407, "pan.___", state 294, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 326, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 340, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 359, "(1)"
-       line 434, "pan.___", state 389, "(1)"
-       line 438, "pan.___", state 402, "(1)"
-       line 407, "pan.___", state 423, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 455, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 469, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 488, "(1)"
-       line 434, "pan.___", state 518, "(1)"
-       line 438, "pan.___", state 531, "(1)"
-       line 407, "pan.___", state 554, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 556, "(1)"
-       line 407, "pan.___", state 557, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 557, "else"
-       line 407, "pan.___", state 560, "(1)"
-       line 411, "pan.___", state 568, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 570, "(1)"
-       line 411, "pan.___", state 571, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 571, "else"
-       line 411, "pan.___", state 574, "(1)"
-       line 411, "pan.___", state 575, "(1)"
-       line 411, "pan.___", state 575, "(1)"
-       line 409, "pan.___", state 580, "((i<1))"
-       line 409, "pan.___", state 580, "((i>=1))"
-       line 416, "pan.___", state 586, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 588, "(1)"
-       line 416, "pan.___", state 589, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 589, "else"
-       line 416, "pan.___", state 592, "(1)"
-       line 416, "pan.___", state 593, "(1)"
-       line 416, "pan.___", state 593, "(1)"
-       line 420, "pan.___", state 600, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 602, "(1)"
-       line 420, "pan.___", state 603, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 603, "else"
-       line 420, "pan.___", state 606, "(1)"
-       line 420, "pan.___", state 607, "(1)"
-       line 420, "pan.___", state 607, "(1)"
-       line 418, "pan.___", state 612, "((i<2))"
-       line 418, "pan.___", state 612, "((i>=2))"
-       line 425, "pan.___", state 619, "(1)"
-       line 425, "pan.___", state 620, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 620, "else"
-       line 425, "pan.___", state 623, "(1)"
-       line 425, "pan.___", state 624, "(1)"
-       line 425, "pan.___", state 624, "(1)"
-       line 429, "pan.___", state 632, "(1)"
-       line 429, "pan.___", state 633, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 633, "else"
-       line 429, "pan.___", state 636, "(1)"
-       line 429, "pan.___", state 637, "(1)"
-       line 429, "pan.___", state 637, "(1)"
-       line 427, "pan.___", state 642, "((i<1))"
-       line 427, "pan.___", state 642, "((i>=1))"
-       line 434, "pan.___", state 649, "(1)"
-       line 434, "pan.___", state 650, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 650, "else"
-       line 434, "pan.___", state 653, "(1)"
-       line 434, "pan.___", state 654, "(1)"
-       line 434, "pan.___", state 654, "(1)"
-       line 438, "pan.___", state 662, "(1)"
-       line 438, "pan.___", state 663, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 663, "else"
-       line 438, "pan.___", state 666, "(1)"
-       line 438, "pan.___", state 667, "(1)"
-       line 438, "pan.___", state 667, "(1)"
-       line 436, "pan.___", state 672, "((i<2))"
-       line 436, "pan.___", state 672, "((i>=2))"
-       line 446, "pan.___", state 676, "(1)"
-       line 446, "pan.___", state 676, "(1)"
-       line 687, "pan.___", state 679, "cached_urcu_active_readers = (tmp+1)"
-       line 687, "pan.___", state 680, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 687, "pan.___", state 681, "(1)"
-       line 407, "pan.___", state 688, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 720, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 734, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 753, "(1)"
-       line 434, "pan.___", state 783, "(1)"
-       line 438, "pan.___", state 796, "(1)"
-       line 407, "pan.___", state 824, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 856, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 870, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 889, "(1)"
-       line 434, "pan.___", state 919, "(1)"
-       line 438, "pan.___", state 932, "(1)"
-       line 407, "pan.___", state 953, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 955, "(1)"
-       line 407, "pan.___", state 956, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 956, "else"
-       line 407, "pan.___", state 959, "(1)"
-       line 411, "pan.___", state 967, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 969, "(1)"
-       line 411, "pan.___", state 970, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 970, "else"
-       line 411, "pan.___", state 973, "(1)"
-       line 411, "pan.___", state 974, "(1)"
-       line 411, "pan.___", state 974, "(1)"
-       line 409, "pan.___", state 979, "((i<1))"
-       line 409, "pan.___", state 979, "((i>=1))"
-       line 416, "pan.___", state 985, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 987, "(1)"
-       line 416, "pan.___", state 988, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 988, "else"
-       line 416, "pan.___", state 991, "(1)"
-       line 416, "pan.___", state 992, "(1)"
-       line 416, "pan.___", state 992, "(1)"
-       line 420, "pan.___", state 999, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 1001, "(1)"
-       line 420, "pan.___", state 1002, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 1002, "else"
-       line 420, "pan.___", state 1005, "(1)"
-       line 420, "pan.___", state 1006, "(1)"
-       line 420, "pan.___", state 1006, "(1)"
-       line 418, "pan.___", state 1011, "((i<2))"
-       line 418, "pan.___", state 1011, "((i>=2))"
-       line 425, "pan.___", state 1018, "(1)"
-       line 425, "pan.___", state 1019, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 1019, "else"
-       line 425, "pan.___", state 1022, "(1)"
-       line 425, "pan.___", state 1023, "(1)"
-       line 425, "pan.___", state 1023, "(1)"
-       line 429, "pan.___", state 1031, "(1)"
-       line 429, "pan.___", state 1032, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 1032, "else"
-       line 429, "pan.___", state 1035, "(1)"
-       line 429, "pan.___", state 1036, "(1)"
-       line 429, "pan.___", state 1036, "(1)"
-       line 427, "pan.___", state 1041, "((i<1))"
-       line 427, "pan.___", state 1041, "((i>=1))"
-       line 434, "pan.___", state 1048, "(1)"
-       line 434, "pan.___", state 1049, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 1049, "else"
-       line 434, "pan.___", state 1052, "(1)"
-       line 434, "pan.___", state 1053, "(1)"
-       line 434, "pan.___", state 1053, "(1)"
-       line 438, "pan.___", state 1061, "(1)"
-       line 438, "pan.___", state 1062, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 1062, "else"
-       line 438, "pan.___", state 1065, "(1)"
-       line 438, "pan.___", state 1066, "(1)"
-       line 438, "pan.___", state 1066, "(1)"
-       line 436, "pan.___", state 1071, "((i<2))"
-       line 436, "pan.___", state 1071, "((i>=2))"
-       line 446, "pan.___", state 1075, "(1)"
-       line 446, "pan.___", state 1075, "(1)"
-       line 695, "pan.___", state 1079, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 407, "pan.___", state 1084, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1116, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1130, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1149, "(1)"
-       line 434, "pan.___", state 1179, "(1)"
-       line 438, "pan.___", state 1192, "(1)"
-       line 407, "pan.___", state 1216, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1248, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1262, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1281, "(1)"
-       line 434, "pan.___", state 1311, "(1)"
-       line 438, "pan.___", state 1324, "(1)"
-       line 407, "pan.___", state 1349, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1381, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1395, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1414, "(1)"
-       line 434, "pan.___", state 1444, "(1)"
-       line 438, "pan.___", state 1457, "(1)"
-       line 407, "pan.___", state 1478, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1510, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1524, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1543, "(1)"
-       line 434, "pan.___", state 1573, "(1)"
-       line 438, "pan.___", state 1586, "(1)"
-       line 407, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1644, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1658, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1677, "(1)"
-       line 434, "pan.___", state 1707, "(1)"
-       line 438, "pan.___", state 1720, "(1)"
-       line 407, "pan.___", state 1741, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1773, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1787, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1806, "(1)"
-       line 434, "pan.___", state 1836, "(1)"
-       line 438, "pan.___", state 1849, "(1)"
-       line 407, "pan.___", state 1873, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1905, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1919, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1938, "(1)"
-       line 434, "pan.___", state 1968, "(1)"
-       line 438, "pan.___", state 1981, "(1)"
-       line 734, "pan.___", state 2002, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 407, "pan.___", state 2009, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2041, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2055, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2074, "(1)"
-       line 434, "pan.___", state 2104, "(1)"
-       line 438, "pan.___", state 2117, "(1)"
-       line 407, "pan.___", state 2138, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2170, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2184, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2203, "(1)"
-       line 434, "pan.___", state 2233, "(1)"
-       line 438, "pan.___", state 2246, "(1)"
-       line 407, "pan.___", state 2269, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 2271, "(1)"
-       line 407, "pan.___", state 2272, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 2272, "else"
-       line 407, "pan.___", state 2275, "(1)"
-       line 411, "pan.___", state 2283, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2286, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 2286, "else"
-       line 411, "pan.___", state 2289, "(1)"
-       line 411, "pan.___", state 2290, "(1)"
-       line 411, "pan.___", state 2290, "(1)"
-       line 409, "pan.___", state 2295, "((i<1))"
-       line 409, "pan.___", state 2295, "((i>=1))"
-       line 416, "pan.___", state 2301, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 2303, "(1)"
-       line 416, "pan.___", state 2304, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 2304, "else"
-       line 416, "pan.___", state 2307, "(1)"
-       line 416, "pan.___", state 2308, "(1)"
-       line 416, "pan.___", state 2308, "(1)"
-       line 420, "pan.___", state 2315, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 2317, "(1)"
-       line 420, "pan.___", state 2318, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 2318, "else"
-       line 420, "pan.___", state 2321, "(1)"
-       line 420, "pan.___", state 2322, "(1)"
-       line 420, "pan.___", state 2322, "(1)"
-       line 418, "pan.___", state 2327, "((i<2))"
-       line 418, "pan.___", state 2327, "((i>=2))"
-       line 425, "pan.___", state 2334, "(1)"
-       line 425, "pan.___", state 2335, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 2335, "else"
-       line 425, "pan.___", state 2338, "(1)"
-       line 425, "pan.___", state 2339, "(1)"
-       line 425, "pan.___", state 2339, "(1)"
-       line 429, "pan.___", state 2347, "(1)"
-       line 429, "pan.___", state 2348, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 2348, "else"
-       line 429, "pan.___", state 2351, "(1)"
-       line 429, "pan.___", state 2352, "(1)"
-       line 429, "pan.___", state 2352, "(1)"
-       line 427, "pan.___", state 2357, "((i<1))"
-       line 427, "pan.___", state 2357, "((i>=1))"
-       line 434, "pan.___", state 2364, "(1)"
-       line 434, "pan.___", state 2365, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 2365, "else"
-       line 434, "pan.___", state 2368, "(1)"
-       line 434, "pan.___", state 2369, "(1)"
-       line 434, "pan.___", state 2369, "(1)"
-       line 438, "pan.___", state 2377, "(1)"
-       line 438, "pan.___", state 2378, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 2378, "else"
-       line 438, "pan.___", state 2381, "(1)"
-       line 438, "pan.___", state 2382, "(1)"
-       line 438, "pan.___", state 2382, "(1)"
-       line 436, "pan.___", state 2387, "((i<2))"
-       line 436, "pan.___", state 2387, "((i>=2))"
-       line 446, "pan.___", state 2391, "(1)"
-       line 446, "pan.___", state 2391, "(1)"
-       line 734, "pan.___", state 2394, "cached_urcu_active_readers = (tmp+1)"
-       line 734, "pan.___", state 2395, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 734, "pan.___", state 2396, "(1)"
-       line 407, "pan.___", state 2403, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2435, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2449, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2468, "(1)"
-       line 434, "pan.___", state 2498, "(1)"
-       line 438, "pan.___", state 2511, "(1)"
-       line 407, "pan.___", state 2538, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2570, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2584, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2603, "(1)"
-       line 434, "pan.___", state 2633, "(1)"
-       line 438, "pan.___", state 2646, "(1)"
-       line 407, "pan.___", state 2667, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2699, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2713, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2732, "(1)"
-       line 434, "pan.___", state 2762, "(1)"
-       line 438, "pan.___", state 2775, "(1)"
-       line 245, "pan.___", state 2808, "(1)"
-       line 253, "pan.___", state 2828, "(1)"
-       line 257, "pan.___", state 2836, "(1)"
-       line 245, "pan.___", state 2851, "(1)"
-       line 253, "pan.___", state 2871, "(1)"
-       line 257, "pan.___", state 2879, "(1)"
-       line 929, "pan.___", state 2896, "-end-"
-       (246 of 2896 states)
-unreached in proctype urcu_writer
-       line 1018, "pan.___", state 12, "((i<1))"
-       line 1018, "pan.___", state 12, "((i>=1))"
-       line 407, "pan.___", state 46, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 60, "cache_dirty_urcu_active_readers = 0"
-       line 425, "pan.___", state 111, "(1)"
-       line 429, "pan.___", state 124, "(1)"
-       line 268, "pan.___", state 177, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 179, "(1)"
-       line 272, "pan.___", state 186, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 188, "(1)"
-       line 272, "pan.___", state 189, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 189, "else"
-       line 270, "pan.___", state 194, "((i<1))"
-       line 270, "pan.___", state 194, "((i>=1))"
-       line 276, "pan.___", state 199, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 201, "(1)"
-       line 276, "pan.___", state 202, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 202, "else"
-       line 280, "pan.___", state 208, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 210, "(1)"
-       line 280, "pan.___", state 211, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 211, "else"
-       line 285, "pan.___", state 220, "(cache_dirty_urcu_gp_ctr)"
-       line 285, "pan.___", state 220, "else"
-       line 407, "pan.___", state 239, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 253, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 271, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 285, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 304, "(1)"
-       line 429, "pan.___", state 317, "(1)"
-       line 434, "pan.___", state 334, "(1)"
-       line 438, "pan.___", state 347, "(1)"
-       line 411, "pan.___", state 384, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 402, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 416, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 448, "(1)"
-       line 434, "pan.___", state 465, "(1)"
-       line 438, "pan.___", state 478, "(1)"
-       line 411, "pan.___", state 523, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 541, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 555, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 587, "(1)"
-       line 434, "pan.___", state 604, "(1)"
-       line 438, "pan.___", state 617, "(1)"
-       line 411, "pan.___", state 652, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 670, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 684, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 716, "(1)"
-       line 434, "pan.___", state 733, "(1)"
-       line 438, "pan.___", state 746, "(1)"
-       line 411, "pan.___", state 783, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 801, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 815, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 847, "(1)"
-       line 434, "pan.___", state 864, "(1)"
-       line 438, "pan.___", state 877, "(1)"
-       line 268, "pan.___", state 932, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 941, "cache_dirty_urcu_active_readers = 0"
-       line 245, "pan.___", state 979, "(1)"
-       line 249, "pan.___", state 987, "(1)"
-       line 253, "pan.___", state 999, "(1)"
-       line 257, "pan.___", state 1007, "(1)"
-       line 268, "pan.___", state 1038, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1047, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1060, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1069, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1085, "(1)"
-       line 249, "pan.___", state 1093, "(1)"
-       line 253, "pan.___", state 1105, "(1)"
-       line 257, "pan.___", state 1113, "(1)"
-       line 272, "pan.___", state 1139, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1152, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1161, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1177, "(1)"
-       line 249, "pan.___", state 1185, "(1)"
-       line 253, "pan.___", state 1197, "(1)"
-       line 257, "pan.___", state 1205, "(1)"
-       line 268, "pan.___", state 1236, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1245, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1258, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1267, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1283, "(1)"
-       line 249, "pan.___", state 1291, "(1)"
-       line 253, "pan.___", state 1303, "(1)"
-       line 257, "pan.___", state 1311, "(1)"
-       line 272, "pan.___", state 1337, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1350, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1359, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1375, "(1)"
-       line 249, "pan.___", state 1383, "(1)"
-       line 253, "pan.___", state 1395, "(1)"
-       line 257, "pan.___", state 1403, "(1)"
-       line 268, "pan.___", state 1434, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1443, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1456, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1465, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1481, "(1)"
-       line 249, "pan.___", state 1489, "(1)"
-       line 253, "pan.___", state 1501, "(1)"
-       line 257, "pan.___", state 1509, "(1)"
-       line 272, "pan.___", state 1535, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1548, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1557, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1573, "(1)"
-       line 249, "pan.___", state 1581, "(1)"
-       line 253, "pan.___", state 1593, "(1)"
-       line 257, "pan.___", state 1601, "(1)"
-       line 268, "pan.___", state 1632, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1641, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1654, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1663, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1679, "(1)"
-       line 249, "pan.___", state 1687, "(1)"
-       line 253, "pan.___", state 1699, "(1)"
-       line 257, "pan.___", state 1707, "(1)"
-       line 1304, "pan.___", state 1723, "-end-"
-       (110 of 1723 states)
-unreached in proctype :init:
-       line 1319, "pan.___", state 13, "((i<1))"
-       line 1319, "pan.___", state 13, "((i>=1))"
-       (1 of 28 states)
-unreached in proctype :never:
-       line 1367, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 4.88e+04 seconds
-pan: rate 1799.8673 states/second
-pan: avg transition delay 1.5754e-06 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.spin.input b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index 4159c77..0000000
+++ /dev/null
@@ -1,1340 +0,0 @@
-#define NO_WMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index f280086..0000000
+++ /dev/null
@@ -1,1533 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4649
-2:2:2896
-3:2:2901
-4:2:2905
-5:2:2913
-6:2:2917
-7:2:2921
-8:0:4649
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:4649
-16:3:4619
-17:3:4622
-18:3:4629
-19:3:4636
-20:3:4639
-21:3:4643
-22:3:4644
-23:0:4649
-24:3:4646
-25:0:4649
-26:2:2925
-27:0:4649
-28:2:2931
-29:0:4649
-30:2:2932
-31:0:4649
-32:2:2934
-33:0:4649
-34:2:2935
-35:0:4649
-36:2:2936
-37:0:4649
-38:2:2937
-39:2:2938
-40:2:2942
-41:2:2943
-42:2:2951
-43:2:2952
-44:2:2956
-45:2:2957
-46:2:2965
-47:2:2970
-48:2:2974
-49:2:2975
-50:2:2983
-51:2:2984
-52:2:2988
-53:2:2989
-54:2:2983
-55:2:2984
-56:2:2988
-57:2:2989
-58:2:2997
-59:2:3002
-60:2:3003
-61:2:3014
-62:2:3015
-63:2:3016
-64:2:3027
-65:2:3032
-66:2:3033
-67:2:3044
-68:2:3045
-69:2:3046
-70:2:3044
-71:2:3045
-72:2:3046
-73:2:3057
-74:2:3065
-75:0:4649
-76:2:2936
-77:0:4649
-78:2:3117
-79:2:3118
-80:2:3119
-81:0:4649
-82:2:2936
-83:0:4649
-84:2:3124
-85:0:4649
-86:2:3828
-87:2:3829
-88:2:3833
-89:2:3837
-90:2:3838
-91:2:3842
-92:2:3847
-93:2:3855
-94:2:3859
-95:2:3860
-96:2:3855
-97:2:3856
-98:2:3864
-99:2:3871
-100:2:3878
-101:2:3879
-102:2:3886
-103:2:3891
-104:2:3898
-105:2:3899
-106:2:3898
-107:2:3899
-108:2:3906
-109:2:3910
-110:0:4649
-111:2:3915
-112:0:4649
-113:2:3916
-114:0:4649
-115:2:3917
-116:0:4649
-117:2:3918
-118:0:4649
-119:1:29
-120:0:4649
-121:2:3919
-122:0:4649
-123:1:35
-124:0:4649
-125:1:36
-126:0:4649
-127:2:3918
-128:0:4649
-129:1:37
-130:0:4649
-131:2:3919
-132:0:4649
-133:1:38
-134:0:4649
-135:2:3918
-136:0:4649
-137:1:39
-138:0:4649
-139:2:3919
-140:0:4649
-141:1:40
-142:0:4649
-143:2:3918
-144:0:4649
-145:1:41
-146:0:4649
-147:2:3919
-148:0:4649
-149:1:42
-150:0:4649
-151:1:43
-152:0:4649
-153:2:3918
-154:0:4649
-155:1:44
-156:0:4649
-157:2:3919
-158:0:4649
-159:1:53
-160:0:4649
-161:2:3918
-162:0:4649
-163:1:57
-164:1:58
-165:1:62
-166:1:66
-167:1:67
-168:1:71
-169:1:79
-170:1:80
-171:1:84
-172:1:88
-173:1:89
-174:1:84
-175:1:88
-176:1:89
-177:1:93
-178:1:100
-179:1:107
-180:1:108
-181:1:115
-182:1:120
-183:1:127
-184:1:128
-185:1:127
-186:1:128
-187:1:135
-188:1:139
-189:0:4649
-190:2:3919
-191:0:4649
-192:1:144
-193:0:4649
-194:2:3920
-195:0:4649
-196:2:3925
-197:0:4649
-198:2:3926
-199:0:4649
-200:2:3934
-201:2:3935
-202:2:3939
-203:2:3943
-204:2:3944
-205:2:3948
-206:2:3956
-207:2:3957
-208:2:3961
-209:2:3965
-210:2:3966
-211:2:3961
-212:2:3965
-213:2:3966
-214:2:3970
-215:2:3977
-216:2:3984
-217:2:3985
-218:2:3992
-219:2:3997
-220:2:4004
-221:2:4005
-222:2:4004
-223:2:4005
-224:2:4012
-225:2:4016
-226:0:4649
-227:2:3126
-228:2:3809
-229:0:4649
-230:2:2936
-231:0:4649
-232:2:3127
-233:0:4649
-234:2:2936
-235:0:4649
-236:2:3130
-237:2:3131
-238:2:3135
-239:2:3136
-240:2:3144
-241:2:3145
-242:2:3149
-243:2:3150
-244:2:3158
-245:2:3163
-246:2:3167
-247:2:3168
-248:2:3176
-249:2:3177
-250:2:3181
-251:2:3182
-252:2:3176
-253:2:3177
-254:2:3181
-255:2:3182
-256:2:3190
-257:2:3195
-258:2:3196
-259:2:3207
-260:2:3208
-261:2:3209
-262:2:3220
-263:2:3225
-264:2:3226
-265:2:3237
-266:2:3238
-267:2:3239
-268:2:3237
-269:2:3238
-270:2:3239
-271:2:3250
-272:2:3257
-273:0:4649
-274:2:2936
-275:0:4649
-276:2:3261
-277:2:3262
-278:2:3263
-279:2:3275
-280:2:3276
-281:2:3280
-282:2:3281
-283:2:3289
-284:2:3294
-285:2:3298
-286:2:3299
-287:2:3307
-288:2:3308
-289:2:3312
-290:2:3313
-291:2:3307
-292:2:3308
-293:2:3312
-294:2:3313
-295:2:3321
-296:2:3326
-297:2:3327
-298:2:3338
-299:2:3339
-300:2:3340
-301:2:3351
-302:2:3356
-303:2:3357
-304:2:3368
-305:2:3369
-306:2:3370
-307:2:3368
-308:2:3369
-309:2:3370
-310:2:3381
-311:2:3392
-312:2:3393
-313:0:4649
-314:2:2936
-315:0:4649
-316:2:3400
-317:2:3401
-318:2:3405
-319:2:3406
-320:2:3414
-321:2:3415
-322:2:3419
-323:2:3420
-324:2:3428
-325:2:3433
-326:2:3437
-327:2:3438
-328:2:3446
-329:2:3447
-330:2:3451
-331:2:3452
-332:2:3446
-333:2:3447
-334:2:3451
-335:2:3452
-336:2:3460
-337:2:3465
-338:2:3466
-339:2:3477
-340:2:3478
-341:2:3479
-342:2:3490
-343:2:3495
-344:2:3496
-345:2:3507
-346:2:3508
-347:2:3509
-348:2:3507
-349:2:3508
-350:2:3509
-351:2:3520
-352:0:4649
-353:2:2936
-354:0:4649
-355:2:3529
-356:2:3530
-357:2:3534
-358:2:3535
-359:2:3543
-360:2:3544
-361:2:3548
-362:2:3549
-363:2:3557
-364:2:3562
-365:2:3566
-366:2:3567
-367:2:3575
-368:2:3576
-369:2:3580
-370:2:3581
-371:2:3575
-372:2:3576
-373:2:3580
-374:2:3581
-375:2:3589
-376:2:3594
-377:2:3595
-378:2:3606
-379:2:3607
-380:2:3608
-381:2:3619
-382:2:3624
-383:2:3625
-384:2:3636
-385:2:3637
-386:2:3638
-387:2:3636
-388:2:3637
-389:2:3638
-390:2:3649
-391:2:3656
-392:0:4649
-393:2:2936
-394:0:4649
-395:2:3660
-396:2:3661
-397:2:3662
-398:2:3674
-399:2:3675
-400:2:3679
-401:2:3680
-402:2:3688
-403:2:3693
-404:2:3697
-405:2:3698
-406:2:3706
-407:2:3707
-408:2:3711
-409:2:3712
-410:2:3706
-411:2:3707
-412:2:3711
-413:2:3712
-414:2:3720
-415:2:3725
-416:2:3726
-417:2:3737
-418:2:3738
-419:2:3739
-420:2:3750
-421:2:3755
-422:2:3756
-423:2:3767
-424:2:3768
-425:2:3769
-426:2:3767
-427:2:3768
-428:2:3769
-429:2:3780
-430:2:3790
-431:2:3791
-432:0:4649
-433:2:2936
-434:0:4649
-435:2:3797
-436:0:4649
-437:2:4422
-438:2:4423
-439:2:4427
-440:2:4431
-441:2:4432
-442:2:4436
-443:2:4444
-444:2:4445
-445:2:4449
-446:2:4453
-447:2:4454
-448:2:4449
-449:2:4453
-450:2:4454
-451:2:4458
-452:2:4465
-453:2:4472
-454:2:4473
-455:2:4480
-456:2:4485
-457:2:4492
-458:2:4493
-459:2:4492
-460:2:4493
-461:2:4500
-462:2:4504
-463:0:4649
-464:2:4509
-465:0:4649
-466:2:4510
-467:0:4649
-468:2:4511
-469:0:4649
-470:2:4512
-471:0:4649
-472:1:53
-473:0:4649
-474:2:4513
-475:0:4649
-476:1:57
-477:1:58
-478:1:62
-479:1:66
-480:1:67
-481:1:71
-482:1:79
-483:1:80
-484:1:84
-485:1:88
-486:1:89
-487:1:84
-488:1:88
-489:1:89
-490:1:93
-491:1:100
-492:1:107
-493:1:108
-494:1:115
-495:1:120
-496:1:127
-497:1:128
-498:1:127
-499:1:128
-500:1:135
-501:1:139
-502:0:4649
-503:2:4512
-504:0:4649
-505:1:144
-506:0:4649
-507:2:4513
-508:0:4649
-509:2:4514
-510:0:4649
-511:2:4519
-512:0:4649
-513:2:4520
-514:0:4649
-515:2:4528
-516:2:4529
-517:2:4533
-518:2:4537
-519:2:4538
-520:2:4542
-521:2:4550
-522:2:4551
-523:2:4555
-524:2:4559
-525:2:4560
-526:2:4555
-527:2:4559
-528:2:4560
-529:2:4564
-530:2:4571
-531:2:4578
-532:2:4579
-533:2:4586
-534:2:4591
-535:2:4598
-536:2:4599
-537:2:4598
-538:2:4599
-539:2:4606
-540:2:4610
-541:0:4649
-542:2:3799
-543:2:3809
-544:0:4649
-545:2:2936
-546:0:4649
-547:2:3800
-548:2:3801
-549:0:4649
-550:2:2936
-551:0:4649
-552:2:3805
-553:0:4649
-554:2:3813
-555:0:4649
-556:2:2932
-557:0:4649
-558:2:2934
-559:0:4649
-560:2:2935
-561:0:4649
-562:2:2936
-563:0:4649
-564:2:3117
-565:2:3118
-566:2:3119
-567:0:4649
-568:2:2936
-569:0:4649
-570:2:2937
-571:2:2938
-572:2:2942
-573:2:2943
-574:2:2951
-575:2:2952
-576:2:2956
-577:2:2957
-578:2:2965
-579:2:2970
-580:2:2971
-581:2:2983
-582:2:2984
-583:2:2985
-584:2:2983
-585:2:2984
-586:2:2988
-587:2:2989
-588:2:2997
-589:2:3002
-590:2:3003
-591:2:3014
-592:2:3015
-593:2:3016
-594:2:3027
-595:2:3032
-596:2:3033
-597:2:3044
-598:2:3045
-599:2:3046
-600:2:3044
-601:2:3045
-602:2:3046
-603:2:3057
-604:2:3065
-605:0:4649
-606:2:2936
-607:0:4649
-608:2:3124
-609:0:4649
-610:2:3828
-611:2:3829
-612:2:3833
-613:2:3837
-614:2:3838
-615:2:3842
-616:2:3850
-617:2:3851
-618:2:3855
-619:2:3856
-620:2:3855
-621:2:3859
-622:2:3860
-623:2:3864
-624:2:3871
-625:2:3878
-626:2:3879
-627:2:3886
-628:2:3891
-629:2:3898
-630:2:3899
-631:2:3898
-632:2:3899
-633:2:3906
-634:2:3910
-635:0:4649
-636:2:3915
-637:0:4649
-638:2:3916
-639:0:4649
-640:2:3917
-641:0:4649
-642:2:3918
-643:0:4649
-644:1:53
-645:0:4649
-646:2:3919
-647:0:4649
-648:1:57
-649:1:58
-650:1:62
-651:1:66
-652:1:67
-653:1:71
-654:1:79
-655:1:80
-656:1:84
-657:1:88
-658:1:89
-659:1:84
-660:1:88
-661:1:89
-662:1:93
-663:1:100
-664:1:107
-665:1:108
-666:1:115
-667:1:120
-668:1:127
-669:1:128
-670:1:127
-671:1:128
-672:1:135
-673:1:139
-674:0:4649
-675:2:3918
-676:0:4649
-677:1:144
-678:0:4649
-679:2:3919
-680:0:4649
-681:2:3920
-682:0:4649
-683:2:3925
-684:0:4649
-685:2:3926
-686:0:4649
-687:2:3934
-688:2:3935
-689:2:3939
-690:2:3943
-691:2:3944
-692:2:3948
-693:2:3956
-694:2:3957
-695:2:3961
-696:2:3965
-697:2:3966
-698:2:3961
-699:2:3965
-700:2:3966
-701:2:3970
-702:2:3977
-703:2:3984
-704:2:3985
-705:2:3992
-706:2:3997
-707:2:4004
-708:2:4005
-709:2:4004
-710:2:4005
-711:2:4012
-712:2:4016
-713:0:4649
-714:2:3126
-715:2:3809
-716:0:4649
-717:2:2936
-718:0:4649
-719:2:3127
-720:0:4649
-721:2:2936
-722:0:4649
-723:2:3130
-724:2:3131
-725:2:3135
-726:2:3136
-727:2:3144
-728:2:3145
-729:2:3149
-730:2:3150
-731:2:3158
-732:2:3163
-733:2:3167
-734:2:3168
-735:2:3176
-736:2:3177
-737:2:3181
-738:2:3182
-739:2:3176
-740:2:3177
-741:2:3181
-742:2:3182
-743:2:3190
-744:2:3195
-745:2:3196
-746:2:3207
-747:2:3208
-748:2:3209
-749:2:3220
-750:2:3225
-751:2:3226
-752:2:3237
-753:2:3238
-754:2:3239
-755:2:3237
-756:2:3238
-757:2:3239
-758:2:3250
-759:2:3257
-760:0:4649
-761:2:2936
-762:0:4649
-763:2:3261
-764:2:3262
-765:2:3263
-766:2:3275
-767:2:3276
-768:2:3280
-769:2:3281
-770:2:3289
-771:2:3294
-772:2:3298
-773:2:3299
-774:2:3307
-775:2:3308
-776:2:3312
-777:2:3313
-778:2:3307
-779:2:3308
-780:2:3312
-781:2:3313
-782:2:3321
-783:2:3326
-784:2:3327
-785:2:3338
-786:2:3339
-787:2:3340
-788:2:3351
-789:2:3356
-790:2:3357
-791:2:3368
-792:2:3369
-793:2:3370
-794:2:3368
-795:2:3369
-796:2:3370
-797:2:3381
-798:2:3392
-799:2:3393
-800:0:4649
-801:2:2936
-802:0:4649
-803:2:3400
-804:2:3401
-805:2:3405
-806:2:3406
-807:2:3414
-808:2:3415
-809:2:3419
-810:2:3420
-811:2:3428
-812:2:3433
-813:2:3437
-814:2:3438
-815:2:3446
-816:2:3447
-817:2:3451
-818:2:3452
-819:2:3446
-820:2:3447
-821:2:3451
-822:2:3452
-823:2:3460
-824:2:3465
-825:2:3466
-826:2:3477
-827:2:3478
-828:2:3479
-829:2:3490
-830:2:3495
-831:2:3496
-832:2:3507
-833:2:3508
-834:2:3509
-835:2:3507
-836:2:3508
-837:2:3509
-838:2:3520
-839:0:4649
-840:2:2936
-841:0:4649
-842:2:3529
-843:2:3530
-844:2:3534
-845:2:3535
-846:2:3543
-847:2:3544
-848:2:3548
-849:2:3549
-850:2:3557
-851:2:3562
-852:2:3566
-853:2:3567
-854:2:3575
-855:2:3576
-856:2:3580
-857:2:3581
-858:2:3575
-859:2:3576
-860:2:3580
-861:2:3581
-862:2:3589
-863:2:3594
-864:2:3595
-865:2:3606
-866:2:3607
-867:2:3608
-868:2:3619
-869:2:3624
-870:2:3625
-871:2:3636
-872:2:3637
-873:2:3638
-874:2:3636
-875:2:3637
-876:2:3638
-877:2:3649
-878:2:3656
-879:0:4649
-880:2:2936
-881:0:4649
-882:2:3660
-883:2:3661
-884:2:3662
-885:2:3674
-886:2:3675
-887:2:3679
-888:2:3680
-889:2:3688
-890:2:3693
-891:2:3697
-892:2:3698
-893:2:3706
-894:2:3707
-895:2:3711
-896:2:3712
-897:2:3706
-898:2:3707
-899:2:3711
-900:2:3712
-901:2:3720
-902:2:3725
-903:2:3726
-904:2:3737
-905:2:3738
-906:2:3739
-907:2:3750
-908:2:3755
-909:2:3756
-910:2:3767
-911:2:3768
-912:2:3769
-913:2:3767
-914:2:3768
-915:2:3769
-916:2:3780
-917:2:3790
-918:2:3791
-919:0:4649
-920:2:2936
-921:0:4649
-922:2:3797
-923:0:4649
-924:2:4422
-925:2:4423
-926:2:4427
-927:2:4431
-928:2:4432
-929:2:4436
-930:2:4444
-931:2:4445
-932:2:4449
-933:2:4453
-934:2:4454
-935:2:4449
-936:2:4453
-937:2:4454
-938:2:4458
-939:2:4465
-940:2:4472
-941:2:4473
-942:2:4480
-943:2:4485
-944:2:4492
-945:2:4493
-946:2:4492
-947:2:4493
-948:2:4500
-949:2:4504
-950:0:4649
-951:2:4509
-952:0:4649
-953:2:4510
-954:0:4649
-955:2:4511
-956:0:4649
-957:2:4512
-958:0:4649
-959:1:53
-960:0:4649
-961:2:4513
-962:0:4649
-963:1:57
-964:1:58
-965:1:62
-966:1:66
-967:1:67
-968:1:71
-969:1:79
-970:1:80
-971:1:84
-972:1:88
-973:1:89
-974:1:84
-975:1:88
-976:1:89
-977:1:93
-978:1:100
-979:1:107
-980:1:108
-981:1:115
-982:1:120
-983:1:127
-984:1:128
-985:1:127
-986:1:128
-987:1:135
-988:1:139
-989:0:4649
-990:2:4512
-991:0:4649
-992:1:144
-993:0:4649
-994:2:4513
-995:0:4649
-996:2:4514
-997:0:4649
-998:2:4519
-999:0:4649
-1000:2:4520
-1001:0:4649
-1002:2:4528
-1003:2:4529
-1004:2:4533
-1005:2:4537
-1006:2:4538
-1007:2:4542
-1008:2:4550
-1009:2:4551
-1010:2:4555
-1011:2:4559
-1012:2:4560
-1013:2:4555
-1014:2:4559
-1015:2:4560
-1016:2:4564
-1017:2:4571
-1018:2:4578
-1019:2:4579
-1020:2:4586
-1021:2:4591
-1022:2:4598
-1023:2:4599
-1024:2:4598
-1025:2:4599
-1026:2:4606
-1027:2:4610
-1028:0:4649
-1029:2:3799
-1030:2:3809
-1031:0:4649
-1032:2:2936
-1033:0:4649
-1034:2:3800
-1035:2:3801
-1036:0:4649
-1037:2:2936
-1038:0:4649
-1039:2:3805
-1040:0:4649
-1041:2:3813
-1042:0:4649
-1043:2:2932
-1044:0:4649
-1045:2:2934
-1046:0:4649
-1047:2:2935
-1048:0:4649
-1049:2:2936
-1050:0:4649
-1051:2:2937
-1052:2:2938
-1053:2:2942
-1054:2:2943
-1055:2:2951
-1056:2:2952
-1057:2:2956
-1058:2:2957
-1059:2:2965
-1060:2:2970
-1061:2:2974
-1062:2:2975
-1063:2:2983
-1064:2:2984
-1065:2:2988
-1066:2:2989
-1067:2:2983
-1068:2:2984
-1069:2:2985
-1070:2:2997
-1071:2:3002
-1072:2:3003
-1073:2:3014
-1074:2:3015
-1075:2:3016
-1076:2:3027
-1077:2:3032
-1078:2:3033
-1079:2:3044
-1080:2:3045
-1081:2:3046
-1082:2:3044
-1083:2:3045
-1084:2:3046
-1085:2:3057
-1086:2:3065
-1087:0:4649
-1088:2:2936
-1089:0:4649
-1090:2:3117
-1091:2:3118
-1092:2:3119
-1093:0:4649
-1094:2:2936
-1095:0:4649
-1096:2:3124
-1097:0:4649
-1098:1:145
-1099:0:4649
-1100:1:147
-1101:0:4649
-1102:1:46
-1103:0:4649
-1104:1:153
-1105:1:154
-1106:1:158
-1107:1:159
-1108:1:167
-1109:1:168
-1110:1:172
-1111:1:173
-1112:1:181
-1113:1:186
-1114:1:190
-1115:1:191
-1116:1:199
-1117:1:200
-1118:1:204
-1119:1:205
-1120:1:199
-1121:1:200
-1122:1:204
-1123:1:205
-1124:1:213
-1125:1:218
-1126:1:219
-1127:1:230
-1128:1:231
-1129:1:232
-1130:1:243
-1131:1:248
-1132:1:249
-1133:1:260
-1134:1:261
-1135:1:262
-1136:1:260
-1137:1:261
-1138:1:262
-1139:1:273
-1140:0:4649
-1141:1:42
-1142:0:4649
-1143:1:43
-1144:0:4649
-1145:1:44
-1146:0:4649
-1147:1:145
-1148:0:4649
-1149:1:147
-1150:0:4649
-1151:1:46
-1152:0:4649
-1153:1:282
-1154:1:283
-1155:0:4649
-1156:1:42
-1157:0:4649
-1158:1:43
-1159:0:4649
-1160:1:44
-1161:0:4649
-1162:1:145
-1163:0:4649
-1164:1:147
-1165:0:4649
-1166:1:46
-1167:0:4649
-1168:1:289
-1169:1:290
-1170:1:294
-1171:1:295
-1172:1:303
-1173:1:304
-1174:1:308
-1175:1:309
-1176:1:317
-1177:1:322
-1178:1:326
-1179:1:327
-1180:1:335
-1181:1:336
-1182:1:340
-1183:1:341
-1184:1:335
-1185:1:336
-1186:1:340
-1187:1:341
-1188:1:349
-1189:1:354
-1190:1:355
-1191:1:366
-1192:1:367
-1193:1:368
-1194:1:379
-1195:1:384
-1196:1:385
-1197:1:396
-1198:1:397
-1199:1:398
-1200:1:396
-1201:1:397
-1202:1:398
-1203:1:409
-1204:0:4649
-1205:1:42
-1206:0:4649
-1207:1:43
-1208:0:4649
-1209:1:44
-1210:0:4649
-1211:1:145
-1212:0:4649
-1213:1:147
-1214:0:4649
-1215:1:46
-1216:0:4649
-1217:1:418
-1218:1:419
-1219:1:423
-1220:1:424
-1221:1:432
-1222:1:433
-1223:1:437
-1224:1:438
-1225:1:446
-1226:1:451
-1227:1:455
-1228:1:456
-1229:1:464
-1230:1:465
-1231:1:469
-1232:1:470
-1233:1:464
-1234:1:465
-1235:1:469
-1236:1:470
-1237:1:478
-1238:1:483
-1239:1:484
-1240:1:495
-1241:1:496
-1242:1:497
-1243:1:508
-1244:1:513
-1245:1:514
-1246:1:525
-1247:1:526
-1248:1:527
-1249:1:525
-1250:1:526
-1251:1:527
-1252:1:538
-1253:1:545
-1254:0:4649
-1255:1:42
-1256:0:4649
-1257:1:43
-1258:0:4649
-1259:1:44
-1260:0:4649
-1261:1:145
-1262:0:4649
-1263:1:147
-1264:0:4649
-1265:1:46
-1266:0:4649
-1267:1:683
-1268:1:684
-1269:1:688
-1270:1:689
-1271:1:697
-1272:1:698
-1273:1:699
-1274:1:711
-1275:1:716
-1276:1:720
-1277:1:721
-1278:1:729
-1279:1:730
-1280:1:734
-1281:1:735
-1282:1:729
-1283:1:730
-1284:1:734
-1285:1:735
-1286:1:743
-1287:1:748
-1288:1:749
-1289:1:760
-1290:1:761
-1291:1:762
-1292:1:773
-1293:1:778
-1294:1:779
-1295:1:790
-1296:1:791
-1297:1:792
-1298:1:790
-1299:1:791
-1300:1:792
-1301:1:803
-1302:0:4649
-1303:1:42
-1304:0:4649
-1305:1:43
-1306:0:4649
-1307:1:44
-1308:0:4649
-1309:1:145
-1310:0:4649
-1311:1:147
-1312:0:4649
-1313:1:46
-1314:0:4649
-1315:1:812
-1316:1:815
-1317:1:816
-1318:0:4649
-1319:1:42
-1320:0:4649
-1321:1:43
-1322:0:4649
-1323:1:44
-1324:0:4649
-1325:1:145
-1326:0:4649
-1327:1:147
-1328:0:4649
-1329:1:46
-1330:0:4649
-1331:1:819
-1332:1:820
-1333:1:824
-1334:1:825
-1335:1:833
-1336:1:834
-1337:1:838
-1338:1:839
-1339:1:847
-1340:1:852
-1341:1:856
-1342:1:857
-1343:1:865
-1344:1:866
-1345:1:870
-1346:1:871
-1347:1:865
-1348:1:866
-1349:1:870
-1350:1:871
-1351:1:879
-1352:1:884
-1353:1:885
-1354:1:896
-1355:1:897
-1356:1:898
-1357:1:909
-1358:1:914
-1359:1:915
-1360:1:926
-1361:1:927
-1362:1:928
-1363:1:926
-1364:1:927
-1365:1:928
-1366:1:939
-1367:0:4649
-1368:1:42
-1369:0:4649
-1370:1:43
-1371:0:4649
-1372:1:44
-1373:0:4649
-1374:1:145
-1375:0:4649
-1376:1:147
-1377:0:4649
-1378:1:46
-1379:0:4649
-1380:1:1079
-1381:1:1080
-1382:1:1084
-1383:1:1085
-1384:1:1093
-1385:1:1094
-1386:1:1098
-1387:1:1099
-1388:1:1107
-1389:1:1112
-1390:1:1116
-1391:1:1117
-1392:1:1125
-1393:1:1126
-1394:1:1130
-1395:1:1131
-1396:1:1125
-1397:1:1126
-1398:1:1130
-1399:1:1131
-1400:1:1139
-1401:1:1144
-1402:1:1145
-1403:1:1156
-1404:1:1157
-1405:1:1158
-1406:1:1169
-1407:1:1174
-1408:1:1175
-1409:1:1186
-1410:1:1187
-1411:1:1188
-1412:1:1186
-1413:1:1187
-1414:1:1188
-1415:1:1199
-1416:1:1206
-1417:1:1210
-1418:0:4649
-1419:1:42
-1420:0:4649
-1421:1:43
-1422:0:4649
-1423:1:44
-1424:0:4649
-1425:1:145
-1426:0:4649
-1427:1:147
-1428:0:4649
-1429:1:46
-1430:0:4649
-1431:1:1211
-1432:1:1212
-1433:1:1216
-1434:1:1217
-1435:1:1225
-1436:1:1226
-1437:1:1227
-1438:1:1239
-1439:1:1244
-1440:1:1248
-1441:1:1249
-1442:1:1257
-1443:1:1258
-1444:1:1262
-1445:1:1263
-1446:1:1257
-1447:1:1258
-1448:1:1262
-1449:1:1263
-1450:1:1271
-1451:1:1276
-1452:1:1277
-1453:1:1288
-1454:1:1289
-1455:1:1290
-1456:1:1301
-1457:1:1306
-1458:1:1307
-1459:1:1318
-1460:1:1319
-1461:1:1320
-1462:1:1318
-1463:1:1319
-1464:1:1320
-1465:1:1331
-1466:0:4649
-1467:1:42
-1468:0:4649
-1469:1:43
-1470:0:4649
-1471:1:44
-1472:0:4649
-1473:1:145
-1474:0:4649
-1475:1:147
-1476:0:4649
-1477:1:46
-1478:0:4649
-1479:1:1340
-1480:0:4649
-1481:1:2804
-1482:1:2811
-1483:1:2812
-1484:1:2819
-1485:1:2824
-1486:1:2831
-1487:1:2832
-1488:1:2831
-1489:1:2832
-1490:1:2839
-1491:1:2843
-1492:0:4649
-1493:2:3828
-1494:2:3829
-1495:2:3833
-1496:2:3837
-1497:2:3838
-1498:2:3842
-1499:2:3847
-1500:2:3855
-1501:2:3859
-1502:2:3860
-1503:2:3855
-1504:2:3856
-1505:2:3864
-1506:2:3871
-1507:2:3878
-1508:2:3879
-1509:2:3886
-1510:2:3891
-1511:2:3898
-1512:2:3899
-1513:2:3898
-1514:2:3899
-1515:2:3906
-1516:2:3910
-1517:0:4649
-1518:2:3915
-1519:0:4649
-1520:2:3916
-1521:0:4649
-1522:2:3917
-1523:0:4649
-1524:2:3918
-1525:0:4649
-1526:1:1342
-1527:1:1343
-1528:0:4647
-1529:2:3919
-1530:0:4653
-1531:1:2501
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.define b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.log b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 1d98e20..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1362)
-Depth=    9651 States=    1e+06 Transitions= 1.79e+08 Memory=   513.029        t=    267 R=   4e+03
-Depth=    9651 States=    2e+06 Transitions= 4.37e+08 Memory=   559.416        t=    679 R=   3e+03
-Depth=    9651 States=    3e+06 Transitions= 7.08e+08 Memory=   605.901        t= 1.13e+03 R=   3e+03
-pan: resizing hashtable to -w22..  done
-Depth=    9651 States=    4e+06 Transitions=  9.4e+08 Memory=   683.213        t= 1.48e+03 R=   3e+03
-Depth=    9651 States=    5e+06 Transitions= 1.26e+09 Memory=   730.479        t= 1.98e+03 R=   3e+03
-Depth=    9651 States=    6e+06 Transitions= 1.55e+09 Memory=   777.451        t= 2.43e+03 R=   2e+03
-Depth=    9651 States=    7e+06 Transitions= 1.82e+09 Memory=   824.522        t= 2.87e+03 R=   2e+03
-Depth=    9651 States=    8e+06 Transitions= 2.01e+09 Memory=   871.494        t= 3.16e+03 R=   3e+03
-Depth=    9651 States=    9e+06 Transitions= 2.19e+09 Memory=   917.295        t= 3.45e+03 R=   3e+03
-pan: resizing hashtable to -w24..  done
-Depth=    9651 States=    1e+07 Transitions= 2.37e+09 Memory=  1087.092        t= 3.73e+03 R=   3e+03
-Depth=    9651 States=  1.1e+07 Transitions= 2.59e+09 Memory=  1133.088        t= 4.06e+03 R=   3e+03
-Depth=    9651 States=  1.2e+07 Transitions= 2.88e+09 Memory=  1179.572        t= 4.5e+03 R=   3e+03
-Depth=    9651 States=  1.3e+07 Transitions=  3.1e+09 Memory=  1226.545        t= 4.84e+03 R=   3e+03
-Depth=    9651 States=  1.4e+07 Transitions= 3.33e+09 Memory=  1272.834        t= 5.18e+03 R=   3e+03
-Depth=    9651 States=  1.5e+07 Transitions= 3.58e+09 Memory=  1318.733        t= 5.57e+03 R=   3e+03
-Depth=    9651 States=  1.6e+07 Transitions= 3.79e+09 Memory=  1364.729        t= 5.9e+03 R=   3e+03
-Depth=    9651 States=  1.7e+07 Transitions= 4.09e+09 Memory=  1410.725        t= 6.36e+03 R=   3e+03
-Depth=    9892 States=  1.8e+07 Transitions= 4.34e+09 Memory=  1456.526        t= 6.76e+03 R=   3e+03
-Depth=    9897 States=  1.9e+07 Transitions= 4.61e+09 Memory=  1502.326        t= 7.17e+03 R=   3e+03
-Depth=    9897 States=    2e+07 Transitions= 4.88e+09 Memory=  1548.127        t= 7.6e+03 R=   3e+03
-Depth=    9897 States=  2.1e+07 Transitions= 5.16e+09 Memory=  1594.318        t= 8.03e+03 R=   3e+03
-Depth=    9897 States=  2.2e+07 Transitions= 5.46e+09 Memory=  1640.315        t= 8.52e+03 R=   3e+03
-Depth=    9897 States=  2.3e+07 Transitions= 5.74e+09 Memory=  1686.115        t= 8.95e+03 R=   3e+03
-Depth=    9897 States=  2.4e+07 Transitions=    6e+09 Memory=  1731.916        t= 9.36e+03 R=   3e+03
-Depth=    9897 States=  2.5e+07 Transitions= 6.24e+09 Memory=  1777.717        t= 9.75e+03 R=   3e+03
-Depth=    9897 States=  2.6e+07 Transitions= 6.48e+09 Memory=  1823.518        t= 1.01e+04 R=   3e+03
-Depth=    9897 States=  2.7e+07 Transitions=  6.7e+09 Memory=  1869.318        t= 1.05e+04 R=   3e+03
-Depth=    9897 States=  2.8e+07 Transitions= 7.03e+09 Memory=  1916.486        t= 1.1e+04 R=   3e+03
-Depth=    9897 States=  2.9e+07 Transitions= 7.36e+09 Memory=  1962.678        t= 1.15e+04 R=   3e+03
-Depth=    9897 States=    3e+07 Transitions= 7.63e+09 Memory=  2008.967        t= 1.2e+04 R=   3e+03
-Depth=    9897 States=  3.1e+07 Transitions= 7.94e+09 Memory=  2054.963        t= 1.25e+04 R=   2e+03
-Depth=    9897 States=  3.2e+07 Transitions=  8.2e+09 Memory=  2102.033        t= 1.29e+04 R=   2e+03
-Depth=    9897 States=  3.3e+07 Transitions= 8.41e+09 Memory=  2148.029        t= 1.32e+04 R=   2e+03
-Depth=    9897 States=  3.4e+07 Transitions= 8.68e+09 Memory=  2194.123        t= 1.36e+04 R=   2e+03
-pan: resizing hashtable to -w26..  done
-Depth=    9897 States=  3.5e+07 Transitions= 8.91e+09 Memory=  2736.006        t= 1.4e+04 R=   2e+03
-Depth=    9897 States=  3.6e+07 Transitions=  9.2e+09 Memory=  2781.807        t= 1.44e+04 R=   2e+03
-Depth=    9897 States=  3.7e+07 Transitions= 9.48e+09 Memory=  2827.608        t= 1.49e+04 R=   2e+03
-Depth=    9897 States=  3.8e+07 Transitions= 9.72e+09 Memory=  2873.408        t= 1.52e+04 R=   2e+03
-Depth=    9897 States=  3.9e+07 Transitions= 9.98e+09 Memory=  2919.209        t= 1.56e+04 R=   2e+03
-Depth=    9897 States=    4e+07 Transitions= 1.02e+10 Memory=  2965.010        t= 1.6e+04 R=   2e+03
-Depth=    9897 States=  4.1e+07 Transitions= 1.05e+10 Memory=  3010.713        t= 1.64e+04 R=   2e+03
-Depth=    9897 States=  4.2e+07 Transitions= 1.07e+10 Memory=  3056.611        t= 1.68e+04 R=   3e+03
-pan: claim violated! (at depth 1439)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 9897, errors: 1
- 42642410 states, stored
-1.0909582e+10 states, matched
-1.0952224e+10 transitions (= stored+matched)
-5.922913e+10 atomic steps
-hash conflicts: 6.3170511e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
- 4717.369      equivalent memory usage for states (stored*(State-vector + overhead))
- 2117.231      actual memory usage for states (compression: 44.88%)
-               state-vector as stored = 16 byte + 36 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
- 3086.494      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 304368 3993 2946 2 2 ]
-unreached in proctype urcu_reader
-       line 894, "pan.___", state 12, "((i<1))"
-       line 894, "pan.___", state 12, "((i>=1))"
-       line 268, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 104, "(1)"
-       line 249, "pan.___", state 112, "(1)"
-       line 253, "pan.___", state 124, "(1)"
-       line 257, "pan.___", state 132, "(1)"
-       line 407, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 223, "(1)"
-       line 434, "pan.___", state 253, "(1)"
-       line 438, "pan.___", state 266, "(1)"
-       line 687, "pan.___", state 287, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 407, "pan.___", state 294, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 326, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 340, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 359, "(1)"
-       line 434, "pan.___", state 389, "(1)"
-       line 438, "pan.___", state 402, "(1)"
-       line 407, "pan.___", state 423, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 455, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 469, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 488, "(1)"
-       line 434, "pan.___", state 518, "(1)"
-       line 438, "pan.___", state 531, "(1)"
-       line 407, "pan.___", state 554, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 556, "(1)"
-       line 407, "pan.___", state 557, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 557, "else"
-       line 407, "pan.___", state 560, "(1)"
-       line 411, "pan.___", state 568, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 570, "(1)"
-       line 411, "pan.___", state 571, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 571, "else"
-       line 411, "pan.___", state 574, "(1)"
-       line 411, "pan.___", state 575, "(1)"
-       line 411, "pan.___", state 575, "(1)"
-       line 409, "pan.___", state 580, "((i<1))"
-       line 409, "pan.___", state 580, "((i>=1))"
-       line 416, "pan.___", state 586, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 588, "(1)"
-       line 416, "pan.___", state 589, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 589, "else"
-       line 416, "pan.___", state 592, "(1)"
-       line 416, "pan.___", state 593, "(1)"
-       line 416, "pan.___", state 593, "(1)"
-       line 420, "pan.___", state 600, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 602, "(1)"
-       line 420, "pan.___", state 603, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 603, "else"
-       line 420, "pan.___", state 606, "(1)"
-       line 420, "pan.___", state 607, "(1)"
-       line 420, "pan.___", state 607, "(1)"
-       line 418, "pan.___", state 612, "((i<2))"
-       line 418, "pan.___", state 612, "((i>=2))"
-       line 425, "pan.___", state 619, "(1)"
-       line 425, "pan.___", state 620, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 620, "else"
-       line 425, "pan.___", state 623, "(1)"
-       line 425, "pan.___", state 624, "(1)"
-       line 425, "pan.___", state 624, "(1)"
-       line 429, "pan.___", state 632, "(1)"
-       line 429, "pan.___", state 633, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 633, "else"
-       line 429, "pan.___", state 636, "(1)"
-       line 429, "pan.___", state 637, "(1)"
-       line 429, "pan.___", state 637, "(1)"
-       line 427, "pan.___", state 642, "((i<1))"
-       line 427, "pan.___", state 642, "((i>=1))"
-       line 434, "pan.___", state 649, "(1)"
-       line 434, "pan.___", state 650, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 650, "else"
-       line 434, "pan.___", state 653, "(1)"
-       line 434, "pan.___", state 654, "(1)"
-       line 434, "pan.___", state 654, "(1)"
-       line 438, "pan.___", state 662, "(1)"
-       line 438, "pan.___", state 663, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 663, "else"
-       line 438, "pan.___", state 666, "(1)"
-       line 438, "pan.___", state 667, "(1)"
-       line 438, "pan.___", state 667, "(1)"
-       line 436, "pan.___", state 672, "((i<2))"
-       line 436, "pan.___", state 672, "((i>=2))"
-       line 446, "pan.___", state 676, "(1)"
-       line 446, "pan.___", state 676, "(1)"
-       line 687, "pan.___", state 679, "cached_urcu_active_readers = (tmp+1)"
-       line 687, "pan.___", state 680, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 687, "pan.___", state 681, "(1)"
-       line 407, "pan.___", state 688, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 720, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 734, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 753, "(1)"
-       line 434, "pan.___", state 783, "(1)"
-       line 438, "pan.___", state 796, "(1)"
-       line 407, "pan.___", state 824, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 856, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 870, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 889, "(1)"
-       line 434, "pan.___", state 919, "(1)"
-       line 438, "pan.___", state 932, "(1)"
-       line 407, "pan.___", state 953, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 955, "(1)"
-       line 407, "pan.___", state 956, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 956, "else"
-       line 407, "pan.___", state 959, "(1)"
-       line 411, "pan.___", state 967, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 969, "(1)"
-       line 411, "pan.___", state 970, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 970, "else"
-       line 411, "pan.___", state 973, "(1)"
-       line 411, "pan.___", state 974, "(1)"
-       line 411, "pan.___", state 974, "(1)"
-       line 409, "pan.___", state 979, "((i<1))"
-       line 409, "pan.___", state 979, "((i>=1))"
-       line 416, "pan.___", state 985, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 987, "(1)"
-       line 416, "pan.___", state 988, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 988, "else"
-       line 416, "pan.___", state 991, "(1)"
-       line 416, "pan.___", state 992, "(1)"
-       line 416, "pan.___", state 992, "(1)"
-       line 420, "pan.___", state 999, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 1001, "(1)"
-       line 420, "pan.___", state 1002, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 1002, "else"
-       line 420, "pan.___", state 1005, "(1)"
-       line 420, "pan.___", state 1006, "(1)"
-       line 420, "pan.___", state 1006, "(1)"
-       line 418, "pan.___", state 1011, "((i<2))"
-       line 418, "pan.___", state 1011, "((i>=2))"
-       line 425, "pan.___", state 1018, "(1)"
-       line 425, "pan.___", state 1019, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 1019, "else"
-       line 425, "pan.___", state 1022, "(1)"
-       line 425, "pan.___", state 1023, "(1)"
-       line 425, "pan.___", state 1023, "(1)"
-       line 429, "pan.___", state 1031, "(1)"
-       line 429, "pan.___", state 1032, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 1032, "else"
-       line 429, "pan.___", state 1035, "(1)"
-       line 429, "pan.___", state 1036, "(1)"
-       line 429, "pan.___", state 1036, "(1)"
-       line 427, "pan.___", state 1041, "((i<1))"
-       line 427, "pan.___", state 1041, "((i>=1))"
-       line 434, "pan.___", state 1048, "(1)"
-       line 434, "pan.___", state 1049, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 1049, "else"
-       line 434, "pan.___", state 1052, "(1)"
-       line 434, "pan.___", state 1053, "(1)"
-       line 434, "pan.___", state 1053, "(1)"
-       line 438, "pan.___", state 1061, "(1)"
-       line 438, "pan.___", state 1062, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 1062, "else"
-       line 438, "pan.___", state 1065, "(1)"
-       line 438, "pan.___", state 1066, "(1)"
-       line 438, "pan.___", state 1066, "(1)"
-       line 436, "pan.___", state 1071, "((i<2))"
-       line 436, "pan.___", state 1071, "((i>=2))"
-       line 446, "pan.___", state 1075, "(1)"
-       line 446, "pan.___", state 1075, "(1)"
-       line 695, "pan.___", state 1079, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 407, "pan.___", state 1084, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1116, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1130, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1149, "(1)"
-       line 434, "pan.___", state 1179, "(1)"
-       line 438, "pan.___", state 1192, "(1)"
-       line 407, "pan.___", state 1216, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1248, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1262, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1281, "(1)"
-       line 434, "pan.___", state 1311, "(1)"
-       line 438, "pan.___", state 1324, "(1)"
-       line 407, "pan.___", state 1349, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1381, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1395, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1414, "(1)"
-       line 434, "pan.___", state 1444, "(1)"
-       line 438, "pan.___", state 1457, "(1)"
-       line 407, "pan.___", state 1478, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1510, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1524, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1543, "(1)"
-       line 434, "pan.___", state 1573, "(1)"
-       line 438, "pan.___", state 1586, "(1)"
-       line 407, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1644, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1658, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1677, "(1)"
-       line 434, "pan.___", state 1707, "(1)"
-       line 438, "pan.___", state 1720, "(1)"
-       line 407, "pan.___", state 1741, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1773, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1787, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1806, "(1)"
-       line 434, "pan.___", state 1836, "(1)"
-       line 438, "pan.___", state 1849, "(1)"
-       line 407, "pan.___", state 1873, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1905, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1919, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 1938, "(1)"
-       line 434, "pan.___", state 1968, "(1)"
-       line 438, "pan.___", state 1981, "(1)"
-       line 734, "pan.___", state 2002, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 407, "pan.___", state 2009, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2041, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2055, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2074, "(1)"
-       line 434, "pan.___", state 2104, "(1)"
-       line 438, "pan.___", state 2117, "(1)"
-       line 407, "pan.___", state 2138, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2170, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2184, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2203, "(1)"
-       line 434, "pan.___", state 2233, "(1)"
-       line 438, "pan.___", state 2246, "(1)"
-       line 407, "pan.___", state 2269, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 2271, "(1)"
-       line 407, "pan.___", state 2272, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 2272, "else"
-       line 407, "pan.___", state 2275, "(1)"
-       line 411, "pan.___", state 2283, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2286, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 2286, "else"
-       line 411, "pan.___", state 2289, "(1)"
-       line 411, "pan.___", state 2290, "(1)"
-       line 411, "pan.___", state 2290, "(1)"
-       line 409, "pan.___", state 2295, "((i<1))"
-       line 409, "pan.___", state 2295, "((i>=1))"
-       line 416, "pan.___", state 2301, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 2303, "(1)"
-       line 416, "pan.___", state 2304, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 2304, "else"
-       line 416, "pan.___", state 2307, "(1)"
-       line 416, "pan.___", state 2308, "(1)"
-       line 416, "pan.___", state 2308, "(1)"
-       line 420, "pan.___", state 2315, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 2317, "(1)"
-       line 420, "pan.___", state 2318, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 2318, "else"
-       line 420, "pan.___", state 2321, "(1)"
-       line 420, "pan.___", state 2322, "(1)"
-       line 420, "pan.___", state 2322, "(1)"
-       line 418, "pan.___", state 2327, "((i<2))"
-       line 418, "pan.___", state 2327, "((i>=2))"
-       line 425, "pan.___", state 2334, "(1)"
-       line 425, "pan.___", state 2335, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 2335, "else"
-       line 425, "pan.___", state 2338, "(1)"
-       line 425, "pan.___", state 2339, "(1)"
-       line 425, "pan.___", state 2339, "(1)"
-       line 429, "pan.___", state 2347, "(1)"
-       line 429, "pan.___", state 2348, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 2348, "else"
-       line 429, "pan.___", state 2351, "(1)"
-       line 429, "pan.___", state 2352, "(1)"
-       line 429, "pan.___", state 2352, "(1)"
-       line 427, "pan.___", state 2357, "((i<1))"
-       line 427, "pan.___", state 2357, "((i>=1))"
-       line 434, "pan.___", state 2364, "(1)"
-       line 434, "pan.___", state 2365, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 2365, "else"
-       line 434, "pan.___", state 2368, "(1)"
-       line 434, "pan.___", state 2369, "(1)"
-       line 434, "pan.___", state 2369, "(1)"
-       line 438, "pan.___", state 2377, "(1)"
-       line 438, "pan.___", state 2378, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 2378, "else"
-       line 438, "pan.___", state 2381, "(1)"
-       line 438, "pan.___", state 2382, "(1)"
-       line 438, "pan.___", state 2382, "(1)"
-       line 436, "pan.___", state 2387, "((i<2))"
-       line 436, "pan.___", state 2387, "((i>=2))"
-       line 446, "pan.___", state 2391, "(1)"
-       line 446, "pan.___", state 2391, "(1)"
-       line 734, "pan.___", state 2394, "cached_urcu_active_readers = (tmp+1)"
-       line 734, "pan.___", state 2395, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 734, "pan.___", state 2396, "(1)"
-       line 407, "pan.___", state 2403, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2435, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2449, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2468, "(1)"
-       line 434, "pan.___", state 2498, "(1)"
-       line 438, "pan.___", state 2511, "(1)"
-       line 407, "pan.___", state 2538, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2570, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2584, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2603, "(1)"
-       line 434, "pan.___", state 2633, "(1)"
-       line 438, "pan.___", state 2646, "(1)"
-       line 407, "pan.___", state 2667, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2699, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2713, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 2732, "(1)"
-       line 434, "pan.___", state 2762, "(1)"
-       line 438, "pan.___", state 2775, "(1)"
-       line 245, "pan.___", state 2808, "(1)"
-       line 253, "pan.___", state 2828, "(1)"
-       line 257, "pan.___", state 2836, "(1)"
-       line 245, "pan.___", state 2851, "(1)"
-       line 253, "pan.___", state 2871, "(1)"
-       line 257, "pan.___", state 2879, "(1)"
-       line 929, "pan.___", state 2896, "-end-"
-       (246 of 2896 states)
-unreached in proctype urcu_writer
-       line 1018, "pan.___", state 12, "((i<1))"
-       line 1018, "pan.___", state 12, "((i>=1))"
-       line 407, "pan.___", state 49, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 63, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 81, "cache_dirty_rcu_ptr = 0"
-       line 425, "pan.___", state 114, "(1)"
-       line 429, "pan.___", state 127, "(1)"
-       line 434, "pan.___", state 144, "(1)"
-       line 268, "pan.___", state 180, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 189, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 202, "cache_dirty_rcu_ptr = 0"
-       line 407, "pan.___", state 242, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 256, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 274, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 288, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 307, "(1)"
-       line 429, "pan.___", state 320, "(1)"
-       line 434, "pan.___", state 337, "(1)"
-       line 438, "pan.___", state 350, "(1)"
-       line 411, "pan.___", state 387, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 405, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 419, "cache_dirty_rcu_data[i] = 0"
-       line 429, "pan.___", state 451, "(1)"
-       line 434, "pan.___", state 468, "(1)"
-       line 438, "pan.___", state 481, "(1)"
-       line 407, "pan.___", state 511, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 525, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 543, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 557, "cache_dirty_rcu_data[i] = 0"
-       line 425, "pan.___", state 576, "(1)"
-       line 429, "pan.___", state 589, "(1)"
-       line 434, "pan.___", state 606, "(1)"
-       line 438, "pan.___", state 619, "(1)"
-       line 407, "pan.___", state 640, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 642, "(1)"
-       line 407, "pan.___", state 643, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 643, "else"
-       line 407, "pan.___", state 646, "(1)"
-       line 411, "pan.___", state 654, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 656, "(1)"
-       line 411, "pan.___", state 657, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 657, "else"
-       line 411, "pan.___", state 660, "(1)"
-       line 411, "pan.___", state 661, "(1)"
-       line 411, "pan.___", state 661, "(1)"
-       line 409, "pan.___", state 666, "((i<1))"
-       line 409, "pan.___", state 666, "((i>=1))"
-       line 416, "pan.___", state 672, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 674, "(1)"
-       line 416, "pan.___", state 675, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 675, "else"
-       line 416, "pan.___", state 678, "(1)"
-       line 416, "pan.___", state 679, "(1)"
-       line 416, "pan.___", state 679, "(1)"
-       line 420, "pan.___", state 686, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 688, "(1)"
-       line 420, "pan.___", state 689, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 689, "else"
-       line 420, "pan.___", state 692, "(1)"
-       line 420, "pan.___", state 693, "(1)"
-       line 420, "pan.___", state 693, "(1)"
-       line 418, "pan.___", state 698, "((i<2))"
-       line 418, "pan.___", state 698, "((i>=2))"
-       line 425, "pan.___", state 705, "(1)"
-       line 425, "pan.___", state 706, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 706, "else"
-       line 425, "pan.___", state 709, "(1)"
-       line 425, "pan.___", state 710, "(1)"
-       line 425, "pan.___", state 710, "(1)"
-       line 429, "pan.___", state 718, "(1)"
-       line 429, "pan.___", state 719, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 719, "else"
-       line 429, "pan.___", state 722, "(1)"
-       line 429, "pan.___", state 723, "(1)"
-       line 429, "pan.___", state 723, "(1)"
-       line 427, "pan.___", state 728, "((i<1))"
-       line 427, "pan.___", state 728, "((i>=1))"
-       line 434, "pan.___", state 735, "(1)"
-       line 434, "pan.___", state 736, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 736, "else"
-       line 434, "pan.___", state 739, "(1)"
-       line 434, "pan.___", state 740, "(1)"
-       line 434, "pan.___", state 740, "(1)"
-       line 438, "pan.___", state 748, "(1)"
-       line 438, "pan.___", state 749, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 749, "else"
-       line 438, "pan.___", state 752, "(1)"
-       line 438, "pan.___", state 753, "(1)"
-       line 438, "pan.___", state 753, "(1)"
-       line 436, "pan.___", state 758, "((i<2))"
-       line 436, "pan.___", state 758, "((i>=2))"
-       line 446, "pan.___", state 762, "(1)"
-       line 446, "pan.___", state 762, "(1)"
-       line 1184, "pan.___", state 766, "_proc_urcu_writer = (_proc_urcu_writer|(1<<10))"
-       line 407, "pan.___", state 771, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 773, "(1)"
-       line 407, "pan.___", state 774, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 774, "else"
-       line 407, "pan.___", state 777, "(1)"
-       line 411, "pan.___", state 785, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 787, "(1)"
-       line 411, "pan.___", state 788, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 788, "else"
-       line 411, "pan.___", state 791, "(1)"
-       line 411, "pan.___", state 792, "(1)"
-       line 411, "pan.___", state 792, "(1)"
-       line 409, "pan.___", state 797, "((i<1))"
-       line 409, "pan.___", state 797, "((i>=1))"
-       line 416, "pan.___", state 803, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 805, "(1)"
-       line 416, "pan.___", state 806, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 806, "else"
-       line 416, "pan.___", state 809, "(1)"
-       line 416, "pan.___", state 810, "(1)"
-       line 416, "pan.___", state 810, "(1)"
-       line 420, "pan.___", state 817, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 819, "(1)"
-       line 420, "pan.___", state 820, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 820, "else"
-       line 420, "pan.___", state 823, "(1)"
-       line 420, "pan.___", state 824, "(1)"
-       line 420, "pan.___", state 824, "(1)"
-       line 418, "pan.___", state 829, "((i<2))"
-       line 418, "pan.___", state 829, "((i>=2))"
-       line 425, "pan.___", state 836, "(1)"
-       line 425, "pan.___", state 837, "(!(cache_dirty_urcu_gp_ctr))"
-       line 425, "pan.___", state 837, "else"
-       line 425, "pan.___", state 840, "(1)"
-       line 425, "pan.___", state 841, "(1)"
-       line 425, "pan.___", state 841, "(1)"
-       line 429, "pan.___", state 849, "(1)"
-       line 429, "pan.___", state 850, "(!(cache_dirty_urcu_active_readers))"
-       line 429, "pan.___", state 850, "else"
-       line 429, "pan.___", state 853, "(1)"
-       line 429, "pan.___", state 854, "(1)"
-       line 429, "pan.___", state 854, "(1)"
-       line 427, "pan.___", state 859, "((i<1))"
-       line 427, "pan.___", state 859, "((i>=1))"
-       line 434, "pan.___", state 866, "(1)"
-       line 434, "pan.___", state 867, "(!(cache_dirty_rcu_ptr))"
-       line 434, "pan.___", state 867, "else"
-       line 434, "pan.___", state 870, "(1)"
-       line 434, "pan.___", state 871, "(1)"
-       line 434, "pan.___", state 871, "(1)"
-       line 438, "pan.___", state 879, "(1)"
-       line 438, "pan.___", state 880, "(!(cache_dirty_rcu_data[i]))"
-       line 438, "pan.___", state 880, "else"
-       line 438, "pan.___", state 883, "(1)"
-       line 438, "pan.___", state 884, "(1)"
-       line 438, "pan.___", state 884, "(1)"
-       line 436, "pan.___", state 889, "((i<2))"
-       line 436, "pan.___", state 889, "((i>=2))"
-       line 446, "pan.___", state 893, "(1)"
-       line 446, "pan.___", state 893, "(1)"
-       line 1200, "pan.___", state 898, "_proc_urcu_writer = (_proc_urcu_writer|(1<<11))"
-       line 1195, "pan.___", state 899, "(((tmp2&((1<<7)-1))&&((tmp2^0)&(1<<7))))"
-       line 1195, "pan.___", state 899, "else"
-       line 1220, "pan.___", state 903, "_proc_urcu_writer = (_proc_urcu_writer&~(((1<<12)|(1<<11))))"
-       line 268, "pan.___", state 934, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 943, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 958, "(1)"
-       line 280, "pan.___", state 965, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 981, "(1)"
-       line 249, "pan.___", state 989, "(1)"
-       line 253, "pan.___", state 1001, "(1)"
-       line 257, "pan.___", state 1009, "(1)"
-       line 268, "pan.___", state 1040, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1049, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1062, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1071, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1087, "(1)"
-       line 249, "pan.___", state 1095, "(1)"
-       line 253, "pan.___", state 1107, "(1)"
-       line 257, "pan.___", state 1115, "(1)"
-       line 272, "pan.___", state 1141, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1154, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1163, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1179, "(1)"
-       line 249, "pan.___", state 1187, "(1)"
-       line 253, "pan.___", state 1199, "(1)"
-       line 257, "pan.___", state 1207, "(1)"
-       line 268, "pan.___", state 1238, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1247, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1260, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1269, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1285, "(1)"
-       line 249, "pan.___", state 1293, "(1)"
-       line 253, "pan.___", state 1305, "(1)"
-       line 257, "pan.___", state 1313, "(1)"
-       line 268, "pan.___", state 1330, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1332, "(1)"
-       line 272, "pan.___", state 1339, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1341, "(1)"
-       line 272, "pan.___", state 1342, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1342, "else"
-       line 270, "pan.___", state 1347, "((i<1))"
-       line 270, "pan.___", state 1347, "((i>=1))"
-       line 276, "pan.___", state 1352, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1354, "(1)"
-       line 276, "pan.___", state 1355, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1355, "else"
-       line 280, "pan.___", state 1361, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1363, "(1)"
-       line 280, "pan.___", state 1364, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1364, "else"
-       line 278, "pan.___", state 1369, "((i<2))"
-       line 278, "pan.___", state 1369, "((i>=2))"
-       line 245, "pan.___", state 1377, "(1)"
-       line 249, "pan.___", state 1385, "(1)"
-       line 249, "pan.___", state 1386, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1386, "else"
-       line 247, "pan.___", state 1391, "((i<1))"
-       line 247, "pan.___", state 1391, "((i>=1))"
-       line 253, "pan.___", state 1397, "(1)"
-       line 253, "pan.___", state 1398, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1398, "else"
-       line 257, "pan.___", state 1405, "(1)"
-       line 257, "pan.___", state 1406, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1406, "else"
-       line 262, "pan.___", state 1415, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1415, "else"
-       line 1296, "pan.___", state 1418, "i = 0"
-       line 1296, "pan.___", state 1420, "reader_barrier = 1"
-       line 1296, "pan.___", state 1431, "((i<1))"
-       line 1296, "pan.___", state 1431, "((i>=1))"
-       line 268, "pan.___", state 1436, "cache_dirty_urcu_gp_ctr = 0"
-       line 268, "pan.___", state 1438, "(1)"
-       line 272, "pan.___", state 1445, "cache_dirty_urcu_active_readers = 0"
-       line 272, "pan.___", state 1447, "(1)"
-       line 272, "pan.___", state 1448, "(cache_dirty_urcu_active_readers)"
-       line 272, "pan.___", state 1448, "else"
-       line 270, "pan.___", state 1453, "((i<1))"
-       line 270, "pan.___", state 1453, "((i>=1))"
-       line 276, "pan.___", state 1458, "cache_dirty_rcu_ptr = 0"
-       line 276, "pan.___", state 1460, "(1)"
-       line 276, "pan.___", state 1461, "(cache_dirty_rcu_ptr)"
-       line 276, "pan.___", state 1461, "else"
-       line 280, "pan.___", state 1467, "cache_dirty_rcu_data[i] = 0"
-       line 280, "pan.___", state 1469, "(1)"
-       line 280, "pan.___", state 1470, "(cache_dirty_rcu_data[i])"
-       line 280, "pan.___", state 1470, "else"
-       line 278, "pan.___", state 1475, "((i<2))"
-       line 278, "pan.___", state 1475, "((i>=2))"
-       line 245, "pan.___", state 1483, "(1)"
-       line 249, "pan.___", state 1491, "(1)"
-       line 249, "pan.___", state 1492, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 1492, "else"
-       line 247, "pan.___", state 1497, "((i<1))"
-       line 247, "pan.___", state 1497, "((i>=1))"
-       line 253, "pan.___", state 1503, "(1)"
-       line 253, "pan.___", state 1504, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 1504, "else"
-       line 257, "pan.___", state 1511, "(1)"
-       line 257, "pan.___", state 1512, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 1512, "else"
-       line 262, "pan.___", state 1521, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 1521, "else"
-       line 295, "pan.___", state 1523, "(cache_dirty_urcu_gp_ctr)"
-       line 295, "pan.___", state 1523, "else"
-       line 1296, "pan.___", state 1524, "(cache_dirty_urcu_gp_ctr)"
-       line 1296, "pan.___", state 1524, "else"
-       line 272, "pan.___", state 1537, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1550, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1559, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1575, "(1)"
-       line 249, "pan.___", state 1583, "(1)"
-       line 253, "pan.___", state 1595, "(1)"
-       line 257, "pan.___", state 1603, "(1)"
-       line 268, "pan.___", state 1634, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1643, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1656, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1665, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1681, "(1)"
-       line 249, "pan.___", state 1689, "(1)"
-       line 253, "pan.___", state 1701, "(1)"
-       line 257, "pan.___", state 1709, "(1)"
-       line 1304, "pan.___", state 1725, "-end-"
-       (212 of 1725 states)
-unreached in proctype :init:
-       line 1319, "pan.___", state 13, "((i<1))"
-       line 1319, "pan.___", state 13, "((i>=1))"
-       (1 of 28 states)
-unreached in proctype :never:
-       line 1367, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.71e+04 seconds
-pan: rate 2490.8226 states/second
-pan: avg transition delay 1.5631e-06 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.spin.input b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 602bb6c..0000000
+++ /dev/null
@@ -1,1340 +0,0 @@
-#define SINGLE_FLIP
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-controldataflow-alpha-ipi/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 6a83ce1..0000000
+++ /dev/null
@@ -1,1442 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4651
-2:2:2896
-3:2:2901
-4:2:2905
-5:2:2913
-6:2:2917
-7:2:2921
-8:0:4651
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:4651
-16:3:4621
-17:3:4624
-18:3:4631
-19:3:4638
-20:3:4641
-21:3:4645
-22:3:4646
-23:0:4651
-24:3:4648
-25:0:4651
-26:2:2925
-27:0:4651
-28:2:2931
-29:0:4651
-30:2:2932
-31:0:4651
-32:2:2934
-33:0:4651
-34:2:2935
-35:0:4651
-36:2:2936
-37:0:4651
-38:2:2937
-39:0:4651
-40:2:2938
-41:0:4651
-42:2:2939
-43:0:4651
-44:2:2940
-45:2:2941
-46:2:2945
-47:2:2946
-48:2:2954
-49:2:2955
-50:2:2959
-51:2:2960
-52:2:2968
-53:2:2973
-54:2:2977
-55:2:2978
-56:2:2986
-57:2:2987
-58:2:2991
-59:2:2992
-60:2:2986
-61:2:2987
-62:2:2991
-63:2:2992
-64:2:3000
-65:2:3005
-66:2:3006
-67:2:3017
-68:2:3018
-69:2:3019
-70:2:3030
-71:2:3035
-72:2:3036
-73:2:3047
-74:2:3048
-75:2:3049
-76:2:3047
-77:2:3048
-78:2:3049
-79:2:3060
-80:2:3068
-81:0:4651
-82:2:2939
-83:0:4651
-84:2:3072
-85:2:3076
-86:2:3077
-87:2:3081
-88:2:3085
-89:2:3086
-90:2:3090
-91:2:3098
-92:2:3099
-93:2:3103
-94:2:3107
-95:2:3108
-96:2:3103
-97:2:3104
-98:2:3112
-99:0:4651
-100:2:2939
-101:0:4651
-102:2:3120
-103:2:3121
-104:2:3122
-105:0:4651
-106:2:2939
-107:0:4651
-108:2:3127
-109:0:4651
-110:2:3830
-111:2:3831
-112:2:3835
-113:2:3839
-114:2:3840
-115:2:3844
-116:2:3849
-117:2:3857
-118:2:3861
-119:2:3862
-120:2:3857
-121:2:3861
-122:2:3862
-123:2:3866
-124:2:3873
-125:2:3880
-126:2:3881
-127:2:3888
-128:2:3893
-129:2:3900
-130:2:3901
-131:2:3900
-132:2:3901
-133:2:3908
-134:2:3912
-135:0:4651
-136:2:3917
-137:0:4651
-138:2:3918
-139:0:4651
-140:2:3919
-141:0:4651
-142:2:3920
-143:0:4651
-144:1:29
-145:0:4651
-146:2:3921
-147:0:4651
-148:1:35
-149:0:4651
-150:1:36
-151:0:4651
-152:2:3920
-153:0:4651
-154:1:37
-155:0:4651
-156:2:3921
-157:0:4651
-158:1:38
-159:0:4651
-160:2:3920
-161:0:4651
-162:1:39
-163:0:4651
-164:2:3921
-165:0:4651
-166:1:40
-167:0:4651
-168:2:3920
-169:0:4651
-170:1:41
-171:0:4651
-172:2:3921
-173:0:4651
-174:1:42
-175:0:4651
-176:1:43
-177:0:4651
-178:2:3920
-179:0:4651
-180:1:44
-181:0:4651
-182:2:3921
-183:0:4651
-184:1:53
-185:0:4651
-186:2:3920
-187:0:4651
-188:1:57
-189:1:58
-190:1:62
-191:1:66
-192:1:67
-193:1:71
-194:1:79
-195:1:80
-196:1:84
-197:1:88
-198:1:89
-199:1:84
-200:1:88
-201:1:89
-202:1:93
-203:1:100
-204:1:107
-205:1:108
-206:1:115
-207:1:120
-208:1:127
-209:1:128
-210:1:127
-211:1:128
-212:1:135
-213:1:139
-214:0:4651
-215:2:3921
-216:0:4651
-217:1:144
-218:0:4651
-219:2:3922
-220:0:4651
-221:2:3927
-222:0:4651
-223:2:3928
-224:0:4651
-225:2:3936
-226:2:3937
-227:2:3941
-228:2:3945
-229:2:3946
-230:2:3950
-231:2:3958
-232:2:3959
-233:2:3963
-234:2:3967
-235:2:3968
-236:2:3963
-237:2:3967
-238:2:3968
-239:2:3972
-240:2:3979
-241:2:3986
-242:2:3987
-243:2:3994
-244:2:3999
-245:2:4006
-246:2:4007
-247:2:4006
-248:2:4007
-249:2:4014
-250:2:4018
-251:0:4651
-252:2:3129
-253:2:3811
-254:0:4651
-255:2:2939
-256:0:4651
-257:2:3130
-258:0:4651
-259:2:2939
-260:0:4651
-261:2:3133
-262:2:3134
-263:2:3138
-264:2:3139
-265:2:3147
-266:2:3148
-267:2:3152
-268:2:3153
-269:2:3161
-270:2:3166
-271:2:3170
-272:2:3171
-273:2:3179
-274:2:3180
-275:2:3184
-276:2:3185
-277:2:3179
-278:2:3180
-279:2:3184
-280:2:3185
-281:2:3193
-282:2:3198
-283:2:3199
-284:2:3210
-285:2:3211
-286:2:3212
-287:2:3223
-288:2:3228
-289:2:3229
-290:2:3240
-291:2:3241
-292:2:3242
-293:2:3240
-294:2:3241
-295:2:3242
-296:2:3253
-297:2:3260
-298:0:4651
-299:2:2939
-300:0:4651
-301:2:3264
-302:2:3265
-303:2:3266
-304:2:3278
-305:2:3279
-306:2:3283
-307:2:3284
-308:2:3292
-309:2:3297
-310:2:3301
-311:2:3302
-312:2:3310
-313:2:3311
-314:2:3315
-315:2:3316
-316:2:3310
-317:2:3311
-318:2:3315
-319:2:3316
-320:2:3324
-321:2:3329
-322:2:3330
-323:2:3341
-324:2:3342
-325:2:3343
-326:2:3354
-327:2:3359
-328:2:3360
-329:2:3371
-330:2:3372
-331:2:3373
-332:2:3371
-333:2:3372
-334:2:3373
-335:2:3384
-336:2:3394
-337:2:3395
-338:0:4651
-339:2:2939
-340:0:4651
-341:2:3799
-342:0:4651
-343:2:4424
-344:2:4425
-345:2:4429
-346:2:4433
-347:2:4434
-348:2:4438
-349:2:4446
-350:2:4447
-351:2:4451
-352:2:4455
-353:2:4456
-354:2:4451
-355:2:4455
-356:2:4456
-357:2:4460
-358:2:4467
-359:2:4474
-360:2:4475
-361:2:4482
-362:2:4487
-363:2:4494
-364:2:4495
-365:2:4494
-366:2:4495
-367:2:4502
-368:2:4506
-369:0:4651
-370:2:4511
-371:0:4651
-372:2:4512
-373:0:4651
-374:2:4513
-375:0:4651
-376:2:4514
-377:0:4651
-378:1:145
-379:0:4651
-380:2:4515
-381:0:4651
-382:1:147
-383:0:4651
-384:2:4514
-385:0:4651
-386:1:46
-387:0:4651
-388:2:4515
-389:0:4651
-390:1:153
-391:1:154
-392:1:158
-393:1:159
-394:1:167
-395:1:168
-396:1:172
-397:1:173
-398:1:181
-399:1:186
-400:1:190
-401:1:191
-402:1:199
-403:1:200
-404:1:204
-405:1:205
-406:1:199
-407:1:200
-408:1:204
-409:1:205
-410:1:213
-411:1:225
-412:1:226
-413:1:230
-414:1:231
-415:1:232
-416:1:243
-417:1:248
-418:1:249
-419:1:260
-420:1:261
-421:1:262
-422:1:260
-423:1:261
-424:1:262
-425:1:273
-426:0:4651
-427:1:42
-428:0:4651
-429:1:43
-430:0:4651
-431:2:4514
-432:0:4651
-433:1:44
-434:0:4651
-435:2:4515
-436:0:4651
-437:1:145
-438:0:4651
-439:1:147
-440:0:4651
-441:2:4514
-442:0:4651
-443:1:46
-444:0:4651
-445:2:4515
-446:0:4651
-447:1:282
-448:1:283
-449:0:4651
-450:1:42
-451:0:4651
-452:1:43
-453:0:4651
-454:2:4514
-455:0:4651
-456:1:44
-457:0:4651
-458:2:4515
-459:0:4651
-460:1:145
-461:0:4651
-462:1:147
-463:0:4651
-464:2:4514
-465:0:4651
-466:1:46
-467:0:4651
-468:2:4515
-469:0:4651
-470:1:289
-471:1:290
-472:1:294
-473:1:295
-474:1:303
-475:1:304
-476:1:308
-477:1:309
-478:1:317
-479:1:322
-480:1:326
-481:1:327
-482:1:335
-483:1:336
-484:1:340
-485:1:341
-486:1:335
-487:1:336
-488:1:340
-489:1:341
-490:1:349
-491:1:361
-492:1:362
-493:1:366
-494:1:367
-495:1:368
-496:1:379
-497:1:384
-498:1:385
-499:1:396
-500:1:397
-501:1:398
-502:1:396
-503:1:397
-504:1:398
-505:1:409
-506:0:4651
-507:1:42
-508:0:4651
-509:1:43
-510:0:4651
-511:2:4514
-512:0:4651
-513:1:44
-514:0:4651
-515:2:4515
-516:0:4651
-517:1:53
-518:0:4651
-519:2:4514
-520:0:4651
-521:1:57
-522:1:58
-523:1:62
-524:1:66
-525:1:67
-526:1:71
-527:1:79
-528:1:80
-529:1:84
-530:1:88
-531:1:89
-532:1:84
-533:1:88
-534:1:89
-535:1:93
-536:1:100
-537:1:107
-538:1:108
-539:1:115
-540:1:120
-541:1:127
-542:1:128
-543:1:127
-544:1:128
-545:1:135
-546:1:139
-547:0:4651
-548:2:4515
-549:0:4651
-550:1:144
-551:0:4651
-552:2:4516
-553:0:4651
-554:2:4521
-555:0:4651
-556:2:4522
-557:0:4651
-558:2:4530
-559:2:4531
-560:2:4535
-561:2:4539
-562:2:4540
-563:2:4544
-564:2:4552
-565:2:4553
-566:2:4557
-567:2:4561
-568:2:4562
-569:2:4557
-570:2:4561
-571:2:4562
-572:2:4566
-573:2:4573
-574:2:4580
-575:2:4581
-576:2:4588
-577:2:4593
-578:2:4600
-579:2:4601
-580:2:4600
-581:2:4601
-582:2:4608
-583:2:4612
-584:0:4651
-585:2:3801
-586:2:3811
-587:0:4651
-588:2:2939
-589:0:4651
-590:2:3802
-591:2:3803
-592:0:4651
-593:2:2939
-594:0:4651
-595:2:3807
-596:0:4651
-597:2:3815
-598:0:4651
-599:2:2932
-600:0:4651
-601:2:2934
-602:0:4651
-603:2:2935
-604:0:4651
-605:2:2936
-606:0:4651
-607:2:2937
-608:0:4651
-609:2:2938
-610:0:4651
-611:2:2939
-612:0:4651
-613:2:2940
-614:2:2941
-615:2:2945
-616:2:2946
-617:2:2954
-618:2:2955
-619:2:2959
-620:2:2960
-621:2:2968
-622:2:2973
-623:2:2977
-624:2:2978
-625:2:2986
-626:2:2987
-627:2:2988
-628:2:2986
-629:2:2987
-630:2:2991
-631:2:2992
-632:2:3000
-633:2:3005
-634:2:3006
-635:2:3017
-636:2:3018
-637:2:3019
-638:2:3030
-639:2:3035
-640:2:3036
-641:2:3047
-642:2:3048
-643:2:3049
-644:2:3047
-645:2:3048
-646:2:3049
-647:2:3060
-648:2:3068
-649:0:4651
-650:2:2939
-651:0:4651
-652:2:3072
-653:2:3076
-654:2:3077
-655:2:3081
-656:2:3085
-657:2:3086
-658:2:3090
-659:2:3098
-660:2:3099
-661:2:3103
-662:2:3104
-663:2:3103
-664:2:3107
-665:2:3108
-666:2:3112
-667:0:4651
-668:2:2939
-669:0:4651
-670:2:3120
-671:2:3121
-672:2:3122
-673:0:4651
-674:2:2939
-675:0:4651
-676:2:3127
-677:0:4651
-678:2:3830
-679:2:3831
-680:2:3835
-681:2:3839
-682:2:3840
-683:2:3844
-684:2:3849
-685:2:3857
-686:2:3861
-687:2:3862
-688:2:3857
-689:2:3861
-690:2:3862
-691:2:3866
-692:2:3873
-693:2:3880
-694:2:3881
-695:2:3888
-696:2:3893
-697:2:3900
-698:2:3901
-699:2:3900
-700:2:3901
-701:2:3908
-702:2:3912
-703:0:4651
-704:2:3917
-705:0:4651
-706:2:3918
-707:0:4651
-708:2:3919
-709:0:4651
-710:2:3920
-711:0:4651
-712:1:145
-713:0:4651
-714:2:3921
-715:0:4651
-716:1:147
-717:0:4651
-718:2:3920
-719:0:4651
-720:1:46
-721:0:4651
-722:2:3921
-723:0:4651
-724:1:418
-725:1:419
-726:1:423
-727:1:424
-728:1:432
-729:1:433
-730:1:437
-731:1:438
-732:1:446
-733:1:451
-734:1:455
-735:1:456
-736:1:464
-737:1:465
-738:1:469
-739:1:470
-740:1:464
-741:1:465
-742:1:469
-743:1:470
-744:1:478
-745:1:483
-746:1:484
-747:1:495
-748:1:496
-749:1:497
-750:1:508
-751:1:520
-752:1:521
-753:1:525
-754:1:526
-755:1:527
-756:1:525
-757:1:526
-758:1:527
-759:1:538
-760:1:545
-761:0:4651
-762:1:42
-763:0:4651
-764:1:43
-765:0:4651
-766:2:3920
-767:0:4651
-768:1:44
-769:0:4651
-770:2:3921
-771:0:4651
-772:1:145
-773:0:4651
-774:1:147
-775:0:4651
-776:2:3920
-777:0:4651
-778:1:46
-779:0:4651
-780:2:3921
-781:0:4651
-782:1:683
-783:1:684
-784:1:688
-785:1:689
-786:1:697
-787:1:698
-788:1:699
-789:1:711
-790:1:716
-791:1:720
-792:1:721
-793:1:729
-794:1:730
-795:1:734
-796:1:735
-797:1:729
-798:1:730
-799:1:734
-800:1:735
-801:1:743
-802:1:748
-803:1:749
-804:1:760
-805:1:761
-806:1:762
-807:1:773
-808:1:785
-809:1:786
-810:1:790
-811:1:791
-812:1:792
-813:1:790
-814:1:791
-815:1:792
-816:1:803
-817:0:4651
-818:1:42
-819:0:4651
-820:1:43
-821:0:4651
-822:2:3920
-823:0:4651
-824:1:44
-825:0:4651
-826:2:3921
-827:0:4651
-828:1:145
-829:0:4651
-830:1:147
-831:0:4651
-832:2:3920
-833:0:4651
-834:1:46
-835:0:4651
-836:2:3921
-837:0:4651
-838:1:812
-839:1:815
-840:1:816
-841:0:4651
-842:1:42
-843:0:4651
-844:1:43
-845:0:4651
-846:2:3920
-847:0:4651
-848:1:44
-849:0:4651
-850:2:3921
-851:0:4651
-852:1:145
-853:0:4651
-854:1:147
-855:0:4651
-856:2:3920
-857:0:4651
-858:1:46
-859:0:4651
-860:2:3921
-861:0:4651
-862:1:819
-863:1:820
-864:1:824
-865:1:825
-866:1:833
-867:1:834
-868:1:838
-869:1:839
-870:1:847
-871:1:852
-872:1:856
-873:1:857
-874:1:865
-875:1:866
-876:1:870
-877:1:871
-878:1:865
-879:1:866
-880:1:870
-881:1:871
-882:1:879
-883:1:884
-884:1:885
-885:1:896
-886:1:897
-887:1:898
-888:1:909
-889:1:921
-890:1:922
-891:1:926
-892:1:927
-893:1:928
-894:1:926
-895:1:927
-896:1:928
-897:1:939
-898:0:4651
-899:1:42
-900:0:4651
-901:1:43
-902:0:4651
-903:2:3920
-904:0:4651
-905:1:44
-906:0:4651
-907:2:3921
-908:0:4651
-909:1:145
-910:0:4651
-911:1:147
-912:0:4651
-913:2:3920
-914:0:4651
-915:1:46
-916:0:4651
-917:2:3921
-918:0:4651
-919:1:1079
-920:1:1080
-921:1:1084
-922:1:1085
-923:1:1093
-924:1:1094
-925:1:1098
-926:1:1099
-927:1:1107
-928:1:1112
-929:1:1116
-930:1:1117
-931:1:1125
-932:1:1126
-933:1:1130
-934:1:1131
-935:1:1125
-936:1:1126
-937:1:1130
-938:1:1131
-939:1:1139
-940:1:1144
-941:1:1145
-942:1:1156
-943:1:1157
-944:1:1158
-945:1:1169
-946:1:1181
-947:1:1182
-948:1:1186
-949:1:1187
-950:1:1188
-951:1:1186
-952:1:1187
-953:1:1188
-954:1:1199
-955:1:1206
-956:1:1210
-957:0:4651
-958:1:42
-959:0:4651
-960:1:43
-961:0:4651
-962:2:3920
-963:0:4651
-964:1:44
-965:0:4651
-966:2:3921
-967:0:4651
-968:1:145
-969:0:4651
-970:1:147
-971:0:4651
-972:2:3920
-973:0:4651
-974:1:46
-975:0:4651
-976:2:3921
-977:0:4651
-978:1:1211
-979:1:1212
-980:1:1216
-981:1:1217
-982:1:1225
-983:1:1226
-984:1:1227
-985:1:1239
-986:1:1244
-987:1:1248
-988:1:1249
-989:1:1257
-990:1:1258
-991:1:1262
-992:1:1263
-993:1:1257
-994:1:1258
-995:1:1262
-996:1:1263
-997:1:1271
-998:1:1276
-999:1:1277
-1000:1:1288
-1001:1:1289
-1002:1:1290
-1003:1:1301
-1004:1:1313
-1005:1:1314
-1006:1:1318
-1007:1:1319
-1008:1:1320
-1009:1:1318
-1010:1:1319
-1011:1:1320
-1012:1:1331
-1013:0:4651
-1014:1:42
-1015:0:4651
-1016:1:43
-1017:0:4651
-1018:2:3920
-1019:0:4651
-1020:1:44
-1021:0:4651
-1022:2:3921
-1023:0:4651
-1024:1:53
-1025:0:4651
-1026:2:3920
-1027:0:4651
-1028:1:57
-1029:1:58
-1030:1:62
-1031:1:66
-1032:1:67
-1033:1:71
-1034:1:79
-1035:1:80
-1036:1:84
-1037:1:88
-1038:1:89
-1039:1:84
-1040:1:88
-1041:1:89
-1042:1:93
-1043:1:100
-1044:1:107
-1045:1:108
-1046:1:115
-1047:1:120
-1048:1:127
-1049:1:128
-1050:1:127
-1051:1:128
-1052:1:135
-1053:1:139
-1054:0:4651
-1055:2:3921
-1056:0:4651
-1057:1:144
-1058:0:4651
-1059:2:3922
-1060:0:4651
-1061:2:3927
-1062:0:4651
-1063:2:3928
-1064:0:4651
-1065:2:3936
-1066:2:3937
-1067:2:3941
-1068:2:3945
-1069:2:3946
-1070:2:3950
-1071:2:3958
-1072:2:3959
-1073:2:3963
-1074:2:3967
-1075:2:3968
-1076:2:3963
-1077:2:3967
-1078:2:3968
-1079:2:3972
-1080:2:3979
-1081:2:3986
-1082:2:3987
-1083:2:3994
-1084:2:3999
-1085:2:4006
-1086:2:4007
-1087:2:4006
-1088:2:4007
-1089:2:4014
-1090:2:4018
-1091:0:4651
-1092:2:3129
-1093:2:3811
-1094:0:4651
-1095:2:2939
-1096:0:4651
-1097:2:3130
-1098:0:4651
-1099:2:2939
-1100:0:4651
-1101:2:3133
-1102:2:3134
-1103:2:3138
-1104:2:3139
-1105:2:3147
-1106:2:3148
-1107:2:3152
-1108:2:3153
-1109:2:3161
-1110:2:3166
-1111:2:3170
-1112:2:3171
-1113:2:3179
-1114:2:3180
-1115:2:3184
-1116:2:3185
-1117:2:3179
-1118:2:3180
-1119:2:3184
-1120:2:3185
-1121:2:3193
-1122:2:3198
-1123:2:3199
-1124:2:3210
-1125:2:3211
-1126:2:3212
-1127:2:3223
-1128:2:3228
-1129:2:3229
-1130:2:3240
-1131:2:3241
-1132:2:3242
-1133:2:3240
-1134:2:3241
-1135:2:3242
-1136:2:3253
-1137:2:3260
-1138:0:4651
-1139:2:2939
-1140:0:4651
-1141:2:3264
-1142:2:3265
-1143:2:3266
-1144:2:3278
-1145:2:3279
-1146:2:3283
-1147:2:3284
-1148:2:3292
-1149:2:3297
-1150:2:3301
-1151:2:3302
-1152:2:3310
-1153:2:3311
-1154:2:3315
-1155:2:3316
-1156:2:3310
-1157:2:3311
-1158:2:3315
-1159:2:3316
-1160:2:3324
-1161:2:3329
-1162:2:3330
-1163:2:3341
-1164:2:3342
-1165:2:3343
-1166:2:3354
-1167:2:3359
-1168:2:3360
-1169:2:3371
-1170:2:3372
-1171:2:3373
-1172:2:3371
-1173:2:3372
-1174:2:3373
-1175:2:3384
-1176:2:3394
-1177:2:3395
-1178:0:4651
-1179:2:2939
-1180:0:4651
-1181:2:3799
-1182:0:4651
-1183:2:4424
-1184:2:4425
-1185:2:4429
-1186:2:4433
-1187:2:4434
-1188:2:4438
-1189:2:4446
-1190:2:4447
-1191:2:4451
-1192:2:4455
-1193:2:4456
-1194:2:4451
-1195:2:4455
-1196:2:4456
-1197:2:4460
-1198:2:4467
-1199:2:4474
-1200:2:4475
-1201:2:4482
-1202:2:4487
-1203:2:4494
-1204:2:4495
-1205:2:4494
-1206:2:4495
-1207:2:4502
-1208:2:4506
-1209:0:4651
-1210:2:4511
-1211:0:4651
-1212:2:4512
-1213:0:4651
-1214:2:4513
-1215:0:4651
-1216:2:4514
-1217:0:4651
-1218:1:53
-1219:0:4651
-1220:2:4515
-1221:0:4651
-1222:1:57
-1223:1:58
-1224:1:62
-1225:1:66
-1226:1:67
-1227:1:71
-1228:1:79
-1229:1:80
-1230:1:84
-1231:1:88
-1232:1:89
-1233:1:84
-1234:1:88
-1235:1:89
-1236:1:93
-1237:1:100
-1238:1:107
-1239:1:108
-1240:1:115
-1241:1:120
-1242:1:127
-1243:1:128
-1244:1:127
-1245:1:128
-1246:1:135
-1247:1:139
-1248:0:4651
-1249:2:4514
-1250:0:4651
-1251:1:144
-1252:0:4651
-1253:2:4515
-1254:0:4651
-1255:2:4516
-1256:0:4651
-1257:2:4521
-1258:0:4651
-1259:2:4522
-1260:0:4651
-1261:2:4530
-1262:2:4531
-1263:2:4535
-1264:2:4539
-1265:2:4540
-1266:2:4544
-1267:2:4552
-1268:2:4553
-1269:2:4557
-1270:2:4561
-1271:2:4562
-1272:2:4557
-1273:2:4561
-1274:2:4562
-1275:2:4566
-1276:2:4573
-1277:2:4580
-1278:2:4581
-1279:2:4588
-1280:2:4593
-1281:2:4600
-1282:2:4601
-1283:2:4600
-1284:2:4601
-1285:2:4608
-1286:2:4612
-1287:0:4651
-1288:2:3801
-1289:2:3811
-1290:0:4651
-1291:2:2939
-1292:0:4651
-1293:2:3802
-1294:2:3803
-1295:0:4651
-1296:2:2939
-1297:0:4651
-1298:2:3807
-1299:0:4651
-1300:2:3815
-1301:0:4651
-1302:2:2932
-1303:0:4651
-1304:2:2934
-1305:0:4651
-1306:2:2935
-1307:0:4651
-1308:2:2936
-1309:0:4651
-1310:2:2937
-1311:0:4651
-1312:2:2938
-1313:0:4651
-1314:2:2939
-1315:0:4651
-1316:2:2940
-1317:2:2941
-1318:2:2945
-1319:2:2946
-1320:2:2954
-1321:2:2955
-1322:2:2959
-1323:2:2960
-1324:2:2968
-1325:2:2973
-1326:2:2977
-1327:2:2978
-1328:2:2986
-1329:2:2987
-1330:2:2991
-1331:2:2992
-1332:2:2986
-1333:2:2987
-1334:2:2988
-1335:2:3000
-1336:2:3005
-1337:2:3006
-1338:2:3017
-1339:2:3018
-1340:2:3019
-1341:2:3030
-1342:2:3035
-1343:2:3036
-1344:2:3047
-1345:2:3048
-1346:2:3049
-1347:2:3047
-1348:2:3048
-1349:2:3049
-1350:2:3060
-1351:2:3068
-1352:0:4651
-1353:2:2939
-1354:0:4651
-1355:1:145
-1356:0:4651
-1357:1:147
-1358:0:4651
-1359:1:46
-1360:0:4651
-1361:1:1340
-1362:0:4651
-1363:1:2804
-1364:1:2811
-1365:1:2812
-1366:1:2819
-1367:1:2824
-1368:1:2831
-1369:1:2832
-1370:1:2831
-1371:1:2832
-1372:1:2839
-1373:1:2843
-1374:0:4651
-1375:2:3072
-1376:2:3076
-1377:2:3077
-1378:2:3081
-1379:2:3085
-1380:2:3086
-1381:2:3090
-1382:2:3098
-1383:2:3099
-1384:2:3103
-1385:2:3107
-1386:2:3108
-1387:2:3103
-1388:2:3104
-1389:2:3112
-1390:0:4651
-1391:2:2939
-1392:0:4651
-1393:2:3120
-1394:2:3121
-1395:2:3122
-1396:0:4651
-1397:2:2939
-1398:0:4651
-1399:2:3127
-1400:0:4651
-1401:2:3830
-1402:2:3831
-1403:2:3835
-1404:2:3839
-1405:2:3840
-1406:2:3844
-1407:2:3849
-1408:2:3857
-1409:2:3861
-1410:2:3862
-1411:2:3857
-1412:2:3861
-1413:2:3862
-1414:2:3866
-1415:2:3873
-1416:2:3880
-1417:2:3881
-1418:2:3888
-1419:2:3893
-1420:2:3900
-1421:2:3901
-1422:2:3900
-1423:2:3901
-1424:2:3908
-1425:2:3912
-1426:0:4651
-1427:2:3917
-1428:0:4651
-1429:2:3918
-1430:0:4651
-1431:2:3919
-1432:0:4651
-1433:2:3920
-1434:0:4651
-1435:1:1342
-1436:1:1343
-1437:0:4649
-1438:2:3921
-1439:0:4655
-1440:1:2458
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_progress.ltl b/formal-model/urcu-controldataflow-alpha-ipi/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_reader.define b/formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_writer.define b/formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_writer_error.define b/formal-model/urcu-controldataflow-alpha-ipi/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/.input.spin b/formal-model/urcu-controldataflow-alpha-no-ipi/.input.spin
deleted file mode 100644 (file)
index b59aa77..0000000
+++ /dev/null
@@ -1,1272 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/DEFINES b/formal-model/urcu-controldataflow-alpha-no-ipi/DEFINES
deleted file mode 100644 (file)
index a1008a6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/Makefile b/formal-model/urcu-controldataflow-alpha-no-ipi/Makefile
deleted file mode 100644 (file)
index de47dff..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/asserts.log b/formal-model/urcu-controldataflow-alpha-no-ipi/asserts.log
deleted file mode 100644 (file)
index 9a18131..0000000
+++ /dev/null
@@ -1,468 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-Depth=    4773 States=    1e+06 Transitions= 6.22e+08 Memory=   542.717        t=    624 R=   2e+03
-Depth=    5040 States=    2e+06 Transitions=  1.3e+09 Memory=   618.986        t= 1.33e+03 R=   1e+03
-Depth=    5040 States=    3e+06 Transitions= 1.95e+09 Memory=   695.256        t= 2.03e+03 R=   1e+03
-pan: resizing hashtable to -w22..  done
-Depth=    5040 States=    4e+06 Transitions= 2.64e+09 Memory=   802.647        t= 2.73e+03 R=   1e+03
-Depth=    5040 States=    5e+06 Transitions=  3.3e+09 Memory=   878.916        t= 3.41e+03 R=   1e+03
-Depth=    5141 States=    6e+06 Transitions= 3.99e+09 Memory=   955.186        t= 4.12e+03 R=   1e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 72 byte, depth reached 5141, errors: 0
-  6711104 states, stored
-4.4393201e+09 states, matched
-4.4460312e+09 transitions (= stored+matched)
-2.5322962e+10 atomic steps
-hash conflicts: 3.3332015e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
-  640.021      equivalent memory usage for states (stored*(State-vector + overhead))
-  519.783      actual memory usage for states (compression: 81.21%)
-               state-vector as stored = 53 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
- 1009.483      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 410, ".input.spin", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 82, "(1)"
-       line 437, ".input.spin", state 112, "(1)"
-       line 441, ".input.spin", state 125, "(1)"
-       line 596, ".input.spin", state 146, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 410, ".input.spin", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 185, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 199, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 218, "(1)"
-       line 437, ".input.spin", state 248, "(1)"
-       line 441, ".input.spin", state 261, "(1)"
-       line 410, ".input.spin", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 314, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 328, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 347, "(1)"
-       line 437, ".input.spin", state 377, "(1)"
-       line 441, ".input.spin", state 390, "(1)"
-       line 410, ".input.spin", state 413, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, ".input.spin", state 415, "(1)"
-       line 410, ".input.spin", state 416, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, ".input.spin", state 416, "else"
-       line 410, ".input.spin", state 419, "(1)"
-       line 414, ".input.spin", state 427, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 429, "(1)"
-       line 414, ".input.spin", state 430, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, ".input.spin", state 430, "else"
-       line 414, ".input.spin", state 433, "(1)"
-       line 414, ".input.spin", state 434, "(1)"
-       line 414, ".input.spin", state 434, "(1)"
-       line 412, ".input.spin", state 439, "((i<1))"
-       line 412, ".input.spin", state 439, "((i>=1))"
-       line 419, ".input.spin", state 445, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 447, "(1)"
-       line 419, ".input.spin", state 448, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, ".input.spin", state 448, "else"
-       line 419, ".input.spin", state 451, "(1)"
-       line 419, ".input.spin", state 452, "(1)"
-       line 419, ".input.spin", state 452, "(1)"
-       line 423, ".input.spin", state 459, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 461, "(1)"
-       line 423, ".input.spin", state 462, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, ".input.spin", state 462, "else"
-       line 423, ".input.spin", state 465, "(1)"
-       line 423, ".input.spin", state 466, "(1)"
-       line 423, ".input.spin", state 466, "(1)"
-       line 421, ".input.spin", state 471, "((i<2))"
-       line 421, ".input.spin", state 471, "((i>=2))"
-       line 428, ".input.spin", state 478, "(1)"
-       line 428, ".input.spin", state 479, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 428, ".input.spin", state 479, "else"
-       line 428, ".input.spin", state 482, "(1)"
-       line 428, ".input.spin", state 483, "(1)"
-       line 428, ".input.spin", state 483, "(1)"
-       line 432, ".input.spin", state 491, "(1)"
-       line 432, ".input.spin", state 492, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 432, ".input.spin", state 492, "else"
-       line 432, ".input.spin", state 495, "(1)"
-       line 432, ".input.spin", state 496, "(1)"
-       line 432, ".input.spin", state 496, "(1)"
-       line 430, ".input.spin", state 501, "((i<1))"
-       line 430, ".input.spin", state 501, "((i>=1))"
-       line 437, ".input.spin", state 508, "(1)"
-       line 437, ".input.spin", state 509, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 437, ".input.spin", state 509, "else"
-       line 437, ".input.spin", state 512, "(1)"
-       line 437, ".input.spin", state 513, "(1)"
-       line 437, ".input.spin", state 513, "(1)"
-       line 441, ".input.spin", state 521, "(1)"
-       line 441, ".input.spin", state 522, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 441, ".input.spin", state 522, "else"
-       line 441, ".input.spin", state 525, "(1)"
-       line 441, ".input.spin", state 526, "(1)"
-       line 441, ".input.spin", state 526, "(1)"
-       line 439, ".input.spin", state 531, "((i<2))"
-       line 439, ".input.spin", state 531, "((i>=2))"
-       line 449, ".input.spin", state 535, "(1)"
-       line 449, ".input.spin", state 535, "(1)"
-       line 596, ".input.spin", state 538, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 596, ".input.spin", state 539, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 596, ".input.spin", state 540, "(1)"
-       line 271, ".input.spin", state 544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, ".input.spin", state 555, "(1)"
-       line 279, ".input.spin", state 566, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 575, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 591, "(1)"
-       line 252, ".input.spin", state 599, "(1)"
-       line 256, ".input.spin", state 611, "(1)"
-       line 260, ".input.spin", state 619, "(1)"
-       line 410, ".input.spin", state 637, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 651, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 669, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 683, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 702, "(1)"
-       line 432, ".input.spin", state 715, "(1)"
-       line 437, ".input.spin", state 732, "(1)"
-       line 441, ".input.spin", state 745, "(1)"
-       line 410, ".input.spin", state 773, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 805, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 819, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 838, "(1)"
-       line 437, ".input.spin", state 868, "(1)"
-       line 441, ".input.spin", state 881, "(1)"
-       line 410, ".input.spin", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, ".input.spin", state 904, "(1)"
-       line 410, ".input.spin", state 905, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, ".input.spin", state 905, "else"
-       line 410, ".input.spin", state 908, "(1)"
-       line 414, ".input.spin", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 918, "(1)"
-       line 414, ".input.spin", state 919, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, ".input.spin", state 919, "else"
-       line 414, ".input.spin", state 922, "(1)"
-       line 414, ".input.spin", state 923, "(1)"
-       line 414, ".input.spin", state 923, "(1)"
-       line 412, ".input.spin", state 928, "((i<1))"
-       line 412, ".input.spin", state 928, "((i>=1))"
-       line 419, ".input.spin", state 934, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 936, "(1)"
-       line 419, ".input.spin", state 937, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, ".input.spin", state 937, "else"
-       line 419, ".input.spin", state 940, "(1)"
-       line 419, ".input.spin", state 941, "(1)"
-       line 419, ".input.spin", state 941, "(1)"
-       line 423, ".input.spin", state 948, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 950, "(1)"
-       line 423, ".input.spin", state 951, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, ".input.spin", state 951, "else"
-       line 423, ".input.spin", state 954, "(1)"
-       line 423, ".input.spin", state 955, "(1)"
-       line 423, ".input.spin", state 955, "(1)"
-       line 421, ".input.spin", state 960, "((i<2))"
-       line 421, ".input.spin", state 960, "((i>=2))"
-       line 428, ".input.spin", state 967, "(1)"
-       line 428, ".input.spin", state 968, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 428, ".input.spin", state 968, "else"
-       line 428, ".input.spin", state 971, "(1)"
-       line 428, ".input.spin", state 972, "(1)"
-       line 428, ".input.spin", state 972, "(1)"
-       line 432, ".input.spin", state 980, "(1)"
-       line 432, ".input.spin", state 981, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 432, ".input.spin", state 981, "else"
-       line 432, ".input.spin", state 984, "(1)"
-       line 432, ".input.spin", state 985, "(1)"
-       line 432, ".input.spin", state 985, "(1)"
-       line 430, ".input.spin", state 990, "((i<1))"
-       line 430, ".input.spin", state 990, "((i>=1))"
-       line 437, ".input.spin", state 997, "(1)"
-       line 437, ".input.spin", state 998, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 437, ".input.spin", state 998, "else"
-       line 437, ".input.spin", state 1001, "(1)"
-       line 437, ".input.spin", state 1002, "(1)"
-       line 437, ".input.spin", state 1002, "(1)"
-       line 441, ".input.spin", state 1010, "(1)"
-       line 441, ".input.spin", state 1011, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 441, ".input.spin", state 1011, "else"
-       line 441, ".input.spin", state 1014, "(1)"
-       line 441, ".input.spin", state 1015, "(1)"
-       line 441, ".input.spin", state 1015, "(1)"
-       line 439, ".input.spin", state 1020, "((i<2))"
-       line 439, ".input.spin", state 1020, "((i>=2))"
-       line 449, ".input.spin", state 1024, "(1)"
-       line 449, ".input.spin", state 1024, "(1)"
-       line 604, ".input.spin", state 1028, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 410, ".input.spin", state 1033, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 1047, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1065, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1079, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 1098, "(1)"
-       line 432, ".input.spin", state 1111, "(1)"
-       line 437, ".input.spin", state 1128, "(1)"
-       line 441, ".input.spin", state 1141, "(1)"
-       line 410, ".input.spin", state 1165, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1197, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 1230, "(1)"
-       line 437, ".input.spin", state 1260, "(1)"
-       line 441, ".input.spin", state 1273, "(1)"
-       line 410, ".input.spin", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 1363, "(1)"
-       line 437, ".input.spin", state 1393, "(1)"
-       line 441, ".input.spin", state 1406, "(1)"
-       line 410, ".input.spin", state 1427, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 1492, "(1)"
-       line 437, ".input.spin", state 1522, "(1)"
-       line 441, ".input.spin", state 1535, "(1)"
-       line 271, ".input.spin", state 1558, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 1580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 1589, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1605, "(1)"
-       line 252, ".input.spin", state 1613, "(1)"
-       line 256, ".input.spin", state 1625, "(1)"
-       line 260, ".input.spin", state 1633, "(1)"
-       line 410, ".input.spin", state 1651, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 1665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 1716, "(1)"
-       line 432, ".input.spin", state 1729, "(1)"
-       line 437, ".input.spin", state 1746, "(1)"
-       line 441, ".input.spin", state 1759, "(1)"
-       line 410, ".input.spin", state 1780, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 1794, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1812, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1826, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 1845, "(1)"
-       line 432, ".input.spin", state 1858, "(1)"
-       line 437, ".input.spin", state 1875, "(1)"
-       line 441, ".input.spin", state 1888, "(1)"
-       line 410, ".input.spin", state 1912, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1944, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1958, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 1977, "(1)"
-       line 437, ".input.spin", state 2007, "(1)"
-       line 441, ".input.spin", state 2020, "(1)"
-       line 643, ".input.spin", state 2041, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 410, ".input.spin", state 2048, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2080, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2094, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 2113, "(1)"
-       line 437, ".input.spin", state 2143, "(1)"
-       line 441, ".input.spin", state 2156, "(1)"
-       line 410, ".input.spin", state 2177, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2209, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 2242, "(1)"
-       line 437, ".input.spin", state 2272, "(1)"
-       line 441, ".input.spin", state 2285, "(1)"
-       line 410, ".input.spin", state 2308, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, ".input.spin", state 2310, "(1)"
-       line 410, ".input.spin", state 2311, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, ".input.spin", state 2311, "else"
-       line 410, ".input.spin", state 2314, "(1)"
-       line 414, ".input.spin", state 2322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 2324, "(1)"
-       line 414, ".input.spin", state 2325, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, ".input.spin", state 2325, "else"
-       line 414, ".input.spin", state 2328, "(1)"
-       line 414, ".input.spin", state 2329, "(1)"
-       line 414, ".input.spin", state 2329, "(1)"
-       line 412, ".input.spin", state 2334, "((i<1))"
-       line 412, ".input.spin", state 2334, "((i>=1))"
-       line 419, ".input.spin", state 2340, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2342, "(1)"
-       line 419, ".input.spin", state 2343, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, ".input.spin", state 2343, "else"
-       line 419, ".input.spin", state 2346, "(1)"
-       line 419, ".input.spin", state 2347, "(1)"
-       line 419, ".input.spin", state 2347, "(1)"
-       line 423, ".input.spin", state 2354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2356, "(1)"
-       line 423, ".input.spin", state 2357, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, ".input.spin", state 2357, "else"
-       line 423, ".input.spin", state 2360, "(1)"
-       line 423, ".input.spin", state 2361, "(1)"
-       line 423, ".input.spin", state 2361, "(1)"
-       line 421, ".input.spin", state 2366, "((i<2))"
-       line 421, ".input.spin", state 2366, "((i>=2))"
-       line 428, ".input.spin", state 2373, "(1)"
-       line 428, ".input.spin", state 2374, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 428, ".input.spin", state 2374, "else"
-       line 428, ".input.spin", state 2377, "(1)"
-       line 428, ".input.spin", state 2378, "(1)"
-       line 428, ".input.spin", state 2378, "(1)"
-       line 432, ".input.spin", state 2386, "(1)"
-       line 432, ".input.spin", state 2387, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 432, ".input.spin", state 2387, "else"
-       line 432, ".input.spin", state 2390, "(1)"
-       line 432, ".input.spin", state 2391, "(1)"
-       line 432, ".input.spin", state 2391, "(1)"
-       line 430, ".input.spin", state 2396, "((i<1))"
-       line 430, ".input.spin", state 2396, "((i>=1))"
-       line 437, ".input.spin", state 2403, "(1)"
-       line 437, ".input.spin", state 2404, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 437, ".input.spin", state 2404, "else"
-       line 437, ".input.spin", state 2407, "(1)"
-       line 437, ".input.spin", state 2408, "(1)"
-       line 437, ".input.spin", state 2408, "(1)"
-       line 441, ".input.spin", state 2416, "(1)"
-       line 441, ".input.spin", state 2417, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 441, ".input.spin", state 2417, "else"
-       line 441, ".input.spin", state 2420, "(1)"
-       line 441, ".input.spin", state 2421, "(1)"
-       line 441, ".input.spin", state 2421, "(1)"
-       line 439, ".input.spin", state 2426, "((i<2))"
-       line 439, ".input.spin", state 2426, "((i>=2))"
-       line 449, ".input.spin", state 2430, "(1)"
-       line 449, ".input.spin", state 2430, "(1)"
-       line 643, ".input.spin", state 2433, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 643, ".input.spin", state 2434, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 643, ".input.spin", state 2435, "(1)"
-       line 271, ".input.spin", state 2439, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 2461, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 2470, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 2486, "(1)"
-       line 252, ".input.spin", state 2494, "(1)"
-       line 256, ".input.spin", state 2506, "(1)"
-       line 260, ".input.spin", state 2514, "(1)"
-       line 410, ".input.spin", state 2532, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 2546, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2564, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2578, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 2597, "(1)"
-       line 432, ".input.spin", state 2610, "(1)"
-       line 437, ".input.spin", state 2627, "(1)"
-       line 441, ".input.spin", state 2640, "(1)"
-       line 271, ".input.spin", state 2664, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, ".input.spin", state 2673, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 2686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 2695, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 2711, "(1)"
-       line 252, ".input.spin", state 2719, "(1)"
-       line 256, ".input.spin", state 2731, "(1)"
-       line 260, ".input.spin", state 2739, "(1)"
-       line 410, ".input.spin", state 2757, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 2771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 2822, "(1)"
-       line 432, ".input.spin", state 2835, "(1)"
-       line 437, ".input.spin", state 2852, "(1)"
-       line 441, ".input.spin", state 2865, "(1)"
-       line 410, ".input.spin", state 2886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 2900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2918, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2932, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 2951, "(1)"
-       line 432, ".input.spin", state 2964, "(1)"
-       line 437, ".input.spin", state 2981, "(1)"
-       line 441, ".input.spin", state 2994, "(1)"
-       line 248, ".input.spin", state 3027, "(1)"
-       line 256, ".input.spin", state 3047, "(1)"
-       line 260, ".input.spin", state 3055, "(1)"
-       line 248, ".input.spin", state 3070, "(1)"
-       line 252, ".input.spin", state 3078, "(1)"
-       line 256, ".input.spin", state 3090, "(1)"
-       line 260, ".input.spin", state 3098, "(1)"
-       line 897, ".input.spin", state 3115, "-end-"
-       (283 of 3115 states)
-unreached in proctype urcu_writer
-       line 410, ".input.spin", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 83, "(1)"
-       line 432, ".input.spin", state 96, "(1)"
-       line 437, ".input.spin", state 113, "(1)"
-       line 271, ".input.spin", state 149, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, ".input.spin", state 158, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 171, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 410, ".input.spin", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 225, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 243, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 257, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, ".input.spin", state 276, "(1)"
-       line 432, ".input.spin", state 289, "(1)"
-       line 437, ".input.spin", state 306, "(1)"
-       line 441, ".input.spin", state 319, "(1)"
-       line 414, ".input.spin", state 356, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 374, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 388, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 432, ".input.spin", state 420, "(1)"
-       line 437, ".input.spin", state 437, "(1)"
-       line 441, ".input.spin", state 450, "(1)"
-       line 414, ".input.spin", state 495, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 513, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 527, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 432, ".input.spin", state 559, "(1)"
-       line 437, ".input.spin", state 576, "(1)"
-       line 441, ".input.spin", state 589, "(1)"
-       line 414, ".input.spin", state 624, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 642, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 656, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 432, ".input.spin", state 688, "(1)"
-       line 437, ".input.spin", state 705, "(1)"
-       line 441, ".input.spin", state 718, "(1)"
-       line 414, ".input.spin", state 755, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 773, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 787, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 432, ".input.spin", state 819, "(1)"
-       line 437, ".input.spin", state 836, "(1)"
-       line 441, ".input.spin", state 849, "(1)"
-       line 271, ".input.spin", state 904, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, ".input.spin", state 913, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 928, "(1)"
-       line 283, ".input.spin", state 935, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 951, "(1)"
-       line 252, ".input.spin", state 959, "(1)"
-       line 256, ".input.spin", state 971, "(1)"
-       line 260, ".input.spin", state 979, "(1)"
-       line 275, ".input.spin", state 1004, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 1017, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 1026, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1042, "(1)"
-       line 252, ".input.spin", state 1050, "(1)"
-       line 256, ".input.spin", state 1062, "(1)"
-       line 260, ".input.spin", state 1070, "(1)"
-       line 275, ".input.spin", state 1095, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 1108, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 1117, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1133, "(1)"
-       line 252, ".input.spin", state 1141, "(1)"
-       line 256, ".input.spin", state 1153, "(1)"
-       line 260, ".input.spin", state 1161, "(1)"
-       line 275, ".input.spin", state 1186, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 1199, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 1208, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1224, "(1)"
-       line 252, ".input.spin", state 1232, "(1)"
-       line 256, ".input.spin", state 1244, "(1)"
-       line 260, ".input.spin", state 1252, "(1)"
-       line 1236, ".input.spin", state 1267, "-end-"
-       (71 of 1267 states)
-unreached in proctype :init:
-       (0 of 78 states)
-
-pan: elapsed time 4.59e+03 seconds
-pan: rate 1460.6376 states/second
-pan: avg transition delay 1.0334e-06 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/asserts.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/asserts.spin.input
deleted file mode 100644 (file)
index b59aa77..0000000
+++ /dev/null
@@ -1,1272 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/references.txt b/formal-model/urcu-controldataflow-alpha-no-ipi/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu.sh b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu.spin b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu.spin
deleted file mode 100644 (file)
index 54752a1..0000000
+++ /dev/null
@@ -1,1254 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.log b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.log
deleted file mode 100644 (file)
index 0802f77..0000000
+++ /dev/null
@@ -1,479 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1294)
-Depth=    5182 States=    1e+06 Transitions= 6.22e+08 Memory=   550.432        t=    762 R=   1e+03
-Depth=    5473 States=    2e+06 Transitions=  1.3e+09 Memory=   634.318        t= 1.62e+03 R=   1e+03
-Depth=    5473 States=    3e+06 Transitions= 1.95e+09 Memory=   718.303        t= 2.47e+03 R=   1e+03
-pan: resizing hashtable to -w22..  done
-Depth=    5473 States=    4e+06 Transitions= 2.64e+09 Memory=   833.311        t= 3.32e+03 R=   1e+03
-Depth=    5473 States=    5e+06 Transitions=  3.3e+09 Memory=   917.295        t= 4.14e+03 R=   1e+03
-Depth=    5582 States=    6e+06 Transitions= 3.99e+09 Memory=  1001.279        t=  5e+03 R=   1e+03
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 5582, errors: 0
-  6711104 states, stored
-4.4393362e+09 states, matched
-4.4460473e+09 transitions (= stored+matched)
-2.5322962e+10 atomic steps
-hash conflicts: 3.3328749e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
-  742.424      equivalent memory usage for states (stored*(State-vector + overhead))
-  571.575      actual memory usage for states (compression: 76.99%)
-               state-vector as stored = 61 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
- 1060.947      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 410, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 82, "(1)"
-       line 437, "pan.___", state 112, "(1)"
-       line 441, "pan.___", state 125, "(1)"
-       line 596, "pan.___", state 146, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 410, "pan.___", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 185, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 199, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 218, "(1)"
-       line 437, "pan.___", state 248, "(1)"
-       line 441, "pan.___", state 261, "(1)"
-       line 410, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 314, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 328, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 347, "(1)"
-       line 437, "pan.___", state 377, "(1)"
-       line 441, "pan.___", state 390, "(1)"
-       line 410, "pan.___", state 413, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 415, "(1)"
-       line 410, "pan.___", state 416, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 416, "else"
-       line 410, "pan.___", state 419, "(1)"
-       line 414, "pan.___", state 427, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 429, "(1)"
-       line 414, "pan.___", state 430, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 430, "else"
-       line 414, "pan.___", state 433, "(1)"
-       line 414, "pan.___", state 434, "(1)"
-       line 414, "pan.___", state 434, "(1)"
-       line 412, "pan.___", state 439, "((i<1))"
-       line 412, "pan.___", state 439, "((i>=1))"
-       line 419, "pan.___", state 445, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 447, "(1)"
-       line 419, "pan.___", state 448, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 448, "else"
-       line 419, "pan.___", state 451, "(1)"
-       line 419, "pan.___", state 452, "(1)"
-       line 419, "pan.___", state 452, "(1)"
-       line 423, "pan.___", state 459, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 461, "(1)"
-       line 423, "pan.___", state 462, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 462, "else"
-       line 423, "pan.___", state 465, "(1)"
-       line 423, "pan.___", state 466, "(1)"
-       line 423, "pan.___", state 466, "(1)"
-       line 421, "pan.___", state 471, "((i<2))"
-       line 421, "pan.___", state 471, "((i>=2))"
-       line 428, "pan.___", state 478, "(1)"
-       line 428, "pan.___", state 479, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 428, "pan.___", state 479, "else"
-       line 428, "pan.___", state 482, "(1)"
-       line 428, "pan.___", state 483, "(1)"
-       line 428, "pan.___", state 483, "(1)"
-       line 432, "pan.___", state 491, "(1)"
-       line 432, "pan.___", state 492, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 432, "pan.___", state 492, "else"
-       line 432, "pan.___", state 495, "(1)"
-       line 432, "pan.___", state 496, "(1)"
-       line 432, "pan.___", state 496, "(1)"
-       line 430, "pan.___", state 501, "((i<1))"
-       line 430, "pan.___", state 501, "((i>=1))"
-       line 437, "pan.___", state 508, "(1)"
-       line 437, "pan.___", state 509, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 437, "pan.___", state 509, "else"
-       line 437, "pan.___", state 512, "(1)"
-       line 437, "pan.___", state 513, "(1)"
-       line 437, "pan.___", state 513, "(1)"
-       line 441, "pan.___", state 521, "(1)"
-       line 441, "pan.___", state 522, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 441, "pan.___", state 522, "else"
-       line 441, "pan.___", state 525, "(1)"
-       line 441, "pan.___", state 526, "(1)"
-       line 441, "pan.___", state 526, "(1)"
-       line 439, "pan.___", state 531, "((i<2))"
-       line 439, "pan.___", state 531, "((i>=2))"
-       line 449, "pan.___", state 535, "(1)"
-       line 449, "pan.___", state 535, "(1)"
-       line 596, "pan.___", state 538, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 596, "pan.___", state 539, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 596, "pan.___", state 540, "(1)"
-       line 271, "pan.___", state 544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 555, "(1)"
-       line 279, "pan.___", state 566, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 575, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 591, "(1)"
-       line 252, "pan.___", state 599, "(1)"
-       line 256, "pan.___", state 611, "(1)"
-       line 260, "pan.___", state 619, "(1)"
-       line 410, "pan.___", state 637, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 651, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 669, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 683, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 702, "(1)"
-       line 432, "pan.___", state 715, "(1)"
-       line 437, "pan.___", state 732, "(1)"
-       line 441, "pan.___", state 745, "(1)"
-       line 410, "pan.___", state 773, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 805, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 819, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 838, "(1)"
-       line 437, "pan.___", state 868, "(1)"
-       line 441, "pan.___", state 881, "(1)"
-       line 410, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 904, "(1)"
-       line 410, "pan.___", state 905, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 905, "else"
-       line 410, "pan.___", state 908, "(1)"
-       line 414, "pan.___", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 918, "(1)"
-       line 414, "pan.___", state 919, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 919, "else"
-       line 414, "pan.___", state 922, "(1)"
-       line 414, "pan.___", state 923, "(1)"
-       line 414, "pan.___", state 923, "(1)"
-       line 412, "pan.___", state 928, "((i<1))"
-       line 412, "pan.___", state 928, "((i>=1))"
-       line 419, "pan.___", state 934, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 936, "(1)"
-       line 419, "pan.___", state 937, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 937, "else"
-       line 419, "pan.___", state 940, "(1)"
-       line 419, "pan.___", state 941, "(1)"
-       line 419, "pan.___", state 941, "(1)"
-       line 423, "pan.___", state 948, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 950, "(1)"
-       line 423, "pan.___", state 951, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 951, "else"
-       line 423, "pan.___", state 954, "(1)"
-       line 423, "pan.___", state 955, "(1)"
-       line 423, "pan.___", state 955, "(1)"
-       line 421, "pan.___", state 960, "((i<2))"
-       line 421, "pan.___", state 960, "((i>=2))"
-       line 428, "pan.___", state 967, "(1)"
-       line 428, "pan.___", state 968, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 428, "pan.___", state 968, "else"
-       line 428, "pan.___", state 971, "(1)"
-       line 428, "pan.___", state 972, "(1)"
-       line 428, "pan.___", state 972, "(1)"
-       line 432, "pan.___", state 980, "(1)"
-       line 432, "pan.___", state 981, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 432, "pan.___", state 981, "else"
-       line 432, "pan.___", state 984, "(1)"
-       line 432, "pan.___", state 985, "(1)"
-       line 432, "pan.___", state 985, "(1)"
-       line 430, "pan.___", state 990, "((i<1))"
-       line 430, "pan.___", state 990, "((i>=1))"
-       line 437, "pan.___", state 997, "(1)"
-       line 437, "pan.___", state 998, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 437, "pan.___", state 998, "else"
-       line 437, "pan.___", state 1001, "(1)"
-       line 437, "pan.___", state 1002, "(1)"
-       line 437, "pan.___", state 1002, "(1)"
-       line 441, "pan.___", state 1010, "(1)"
-       line 441, "pan.___", state 1011, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 441, "pan.___", state 1011, "else"
-       line 441, "pan.___", state 1014, "(1)"
-       line 441, "pan.___", state 1015, "(1)"
-       line 441, "pan.___", state 1015, "(1)"
-       line 439, "pan.___", state 1020, "((i<2))"
-       line 439, "pan.___", state 1020, "((i>=2))"
-       line 449, "pan.___", state 1024, "(1)"
-       line 449, "pan.___", state 1024, "(1)"
-       line 604, "pan.___", state 1028, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 410, "pan.___", state 1033, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1047, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1065, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1079, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 1098, "(1)"
-       line 432, "pan.___", state 1111, "(1)"
-       line 437, "pan.___", state 1128, "(1)"
-       line 441, "pan.___", state 1141, "(1)"
-       line 410, "pan.___", state 1165, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1197, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 1230, "(1)"
-       line 437, "pan.___", state 1260, "(1)"
-       line 441, "pan.___", state 1273, "(1)"
-       line 410, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 1363, "(1)"
-       line 437, "pan.___", state 1393, "(1)"
-       line 441, "pan.___", state 1406, "(1)"
-       line 410, "pan.___", state 1427, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 1492, "(1)"
-       line 437, "pan.___", state 1522, "(1)"
-       line 441, "pan.___", state 1535, "(1)"
-       line 271, "pan.___", state 1558, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1589, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1605, "(1)"
-       line 252, "pan.___", state 1613, "(1)"
-       line 256, "pan.___", state 1625, "(1)"
-       line 260, "pan.___", state 1633, "(1)"
-       line 410, "pan.___", state 1651, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 1716, "(1)"
-       line 432, "pan.___", state 1729, "(1)"
-       line 437, "pan.___", state 1746, "(1)"
-       line 441, "pan.___", state 1759, "(1)"
-       line 410, "pan.___", state 1780, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1794, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1812, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1826, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 1845, "(1)"
-       line 432, "pan.___", state 1858, "(1)"
-       line 437, "pan.___", state 1875, "(1)"
-       line 441, "pan.___", state 1888, "(1)"
-       line 410, "pan.___", state 1912, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1944, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1958, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 1977, "(1)"
-       line 437, "pan.___", state 2007, "(1)"
-       line 441, "pan.___", state 2020, "(1)"
-       line 643, "pan.___", state 2041, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 410, "pan.___", state 2048, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2080, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2094, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 2113, "(1)"
-       line 437, "pan.___", state 2143, "(1)"
-       line 441, "pan.___", state 2156, "(1)"
-       line 410, "pan.___", state 2177, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2209, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 2242, "(1)"
-       line 437, "pan.___", state 2272, "(1)"
-       line 441, "pan.___", state 2285, "(1)"
-       line 410, "pan.___", state 2308, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 2310, "(1)"
-       line 410, "pan.___", state 2311, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 2311, "else"
-       line 410, "pan.___", state 2314, "(1)"
-       line 414, "pan.___", state 2322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2324, "(1)"
-       line 414, "pan.___", state 2325, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 2325, "else"
-       line 414, "pan.___", state 2328, "(1)"
-       line 414, "pan.___", state 2329, "(1)"
-       line 414, "pan.___", state 2329, "(1)"
-       line 412, "pan.___", state 2334, "((i<1))"
-       line 412, "pan.___", state 2334, "((i>=1))"
-       line 419, "pan.___", state 2340, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2342, "(1)"
-       line 419, "pan.___", state 2343, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 2343, "else"
-       line 419, "pan.___", state 2346, "(1)"
-       line 419, "pan.___", state 2347, "(1)"
-       line 419, "pan.___", state 2347, "(1)"
-       line 423, "pan.___", state 2354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2356, "(1)"
-       line 423, "pan.___", state 2357, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 2357, "else"
-       line 423, "pan.___", state 2360, "(1)"
-       line 423, "pan.___", state 2361, "(1)"
-       line 423, "pan.___", state 2361, "(1)"
-       line 421, "pan.___", state 2366, "((i<2))"
-       line 421, "pan.___", state 2366, "((i>=2))"
-       line 428, "pan.___", state 2373, "(1)"
-       line 428, "pan.___", state 2374, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 428, "pan.___", state 2374, "else"
-       line 428, "pan.___", state 2377, "(1)"
-       line 428, "pan.___", state 2378, "(1)"
-       line 428, "pan.___", state 2378, "(1)"
-       line 432, "pan.___", state 2386, "(1)"
-       line 432, "pan.___", state 2387, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 432, "pan.___", state 2387, "else"
-       line 432, "pan.___", state 2390, "(1)"
-       line 432, "pan.___", state 2391, "(1)"
-       line 432, "pan.___", state 2391, "(1)"
-       line 430, "pan.___", state 2396, "((i<1))"
-       line 430, "pan.___", state 2396, "((i>=1))"
-       line 437, "pan.___", state 2403, "(1)"
-       line 437, "pan.___", state 2404, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 437, "pan.___", state 2404, "else"
-       line 437, "pan.___", state 2407, "(1)"
-       line 437, "pan.___", state 2408, "(1)"
-       line 437, "pan.___", state 2408, "(1)"
-       line 441, "pan.___", state 2416, "(1)"
-       line 441, "pan.___", state 2417, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 441, "pan.___", state 2417, "else"
-       line 441, "pan.___", state 2420, "(1)"
-       line 441, "pan.___", state 2421, "(1)"
-       line 441, "pan.___", state 2421, "(1)"
-       line 439, "pan.___", state 2426, "((i<2))"
-       line 439, "pan.___", state 2426, "((i>=2))"
-       line 449, "pan.___", state 2430, "(1)"
-       line 449, "pan.___", state 2430, "(1)"
-       line 643, "pan.___", state 2433, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 643, "pan.___", state 2434, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 643, "pan.___", state 2435, "(1)"
-       line 271, "pan.___", state 2439, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 2461, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 2470, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2486, "(1)"
-       line 252, "pan.___", state 2494, "(1)"
-       line 256, "pan.___", state 2506, "(1)"
-       line 260, "pan.___", state 2514, "(1)"
-       line 410, "pan.___", state 2532, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2546, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2564, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2578, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 2597, "(1)"
-       line 432, "pan.___", state 2610, "(1)"
-       line 437, "pan.___", state 2627, "(1)"
-       line 441, "pan.___", state 2640, "(1)"
-       line 271, "pan.___", state 2664, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 2673, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 2686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 2695, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2711, "(1)"
-       line 252, "pan.___", state 2719, "(1)"
-       line 256, "pan.___", state 2731, "(1)"
-       line 260, "pan.___", state 2739, "(1)"
-       line 410, "pan.___", state 2757, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 2822, "(1)"
-       line 432, "pan.___", state 2835, "(1)"
-       line 437, "pan.___", state 2852, "(1)"
-       line 441, "pan.___", state 2865, "(1)"
-       line 410, "pan.___", state 2886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2918, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2932, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 2951, "(1)"
-       line 432, "pan.___", state 2964, "(1)"
-       line 437, "pan.___", state 2981, "(1)"
-       line 441, "pan.___", state 2994, "(1)"
-       line 248, "pan.___", state 3027, "(1)"
-       line 256, "pan.___", state 3047, "(1)"
-       line 260, "pan.___", state 3055, "(1)"
-       line 248, "pan.___", state 3070, "(1)"
-       line 252, "pan.___", state 3078, "(1)"
-       line 256, "pan.___", state 3090, "(1)"
-       line 260, "pan.___", state 3098, "(1)"
-       line 897, "pan.___", state 3115, "-end-"
-       (283 of 3115 states)
-unreached in proctype urcu_writer
-       line 410, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 83, "(1)"
-       line 432, "pan.___", state 96, "(1)"
-       line 437, "pan.___", state 113, "(1)"
-       line 271, "pan.___", state 149, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 158, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 171, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 225, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 243, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 257, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 428, "pan.___", state 276, "(1)"
-       line 432, "pan.___", state 289, "(1)"
-       line 437, "pan.___", state 306, "(1)"
-       line 441, "pan.___", state 319, "(1)"
-       line 414, "pan.___", state 356, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 374, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 388, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 432, "pan.___", state 420, "(1)"
-       line 437, "pan.___", state 437, "(1)"
-       line 441, "pan.___", state 450, "(1)"
-       line 414, "pan.___", state 495, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 513, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 527, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 432, "pan.___", state 559, "(1)"
-       line 437, "pan.___", state 576, "(1)"
-       line 441, "pan.___", state 589, "(1)"
-       line 414, "pan.___", state 624, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 642, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 656, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 432, "pan.___", state 688, "(1)"
-       line 437, "pan.___", state 705, "(1)"
-       line 441, "pan.___", state 718, "(1)"
-       line 414, "pan.___", state 755, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 773, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 787, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 432, "pan.___", state 819, "(1)"
-       line 437, "pan.___", state 836, "(1)"
-       line 441, "pan.___", state 849, "(1)"
-       line 271, "pan.___", state 904, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 913, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 928, "(1)"
-       line 283, "pan.___", state 935, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 951, "(1)"
-       line 252, "pan.___", state 959, "(1)"
-       line 256, "pan.___", state 971, "(1)"
-       line 260, "pan.___", state 979, "(1)"
-       line 275, "pan.___", state 1004, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1017, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1026, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1042, "(1)"
-       line 252, "pan.___", state 1050, "(1)"
-       line 256, "pan.___", state 1062, "(1)"
-       line 260, "pan.___", state 1070, "(1)"
-       line 275, "pan.___", state 1095, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1108, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1117, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1133, "(1)"
-       line 252, "pan.___", state 1141, "(1)"
-       line 256, "pan.___", state 1153, "(1)"
-       line 260, "pan.___", state 1161, "(1)"
-       line 275, "pan.___", state 1186, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1199, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1208, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1224, "(1)"
-       line 252, "pan.___", state 1232, "(1)"
-       line 256, "pan.___", state 1244, "(1)"
-       line 260, "pan.___", state 1252, "(1)"
-       line 1236, "pan.___", state 1267, "-end-"
-       (71 of 1267 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1299, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 5.57e+03 seconds
-pan: rate 1203.9777 states/second
-pan: avg transition delay 1.2537e-06 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.ltl b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.ltl
deleted file mode 100644 (file)
index 6be1be9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!read_poison)
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free.spin.input
deleted file mode 100644 (file)
index b59aa77..0000000
+++ /dev/null
@@ -1,1272 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_nested.define b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.define b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.define
deleted file mode 100644 (file)
index d99d793..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_MB
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.log b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 5ccd769..0000000
+++ /dev/null
@@ -1,841 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    5985 States=    1e+06 Transitions= 3.71e+08 Memory=   550.432        t=    439 R=   2e+03
-Depth=    8926 States=    2e+06 Transitions= 9.51e+08 Memory=   634.416        t= 1.15e+03 R=   2e+03
-Depth=    8926 States=    3e+06 Transitions= 1.54e+09 Memory=   718.303        t= 1.89e+03 R=   2e+03
-pan: resizing hashtable to -w22..  done
-Depth=    8926 States=    4e+06 Transitions= 2.08e+09 Memory=   833.311        t= 2.56e+03 R=   2e+03
-Depth=    8926 States=    5e+06 Transitions= 2.46e+09 Memory=   917.295        t= 3.01e+03 R=   2e+03
-Depth=    8926 States=    6e+06 Transitions= 2.91e+09 Memory=  1001.279        t= 3.56e+03 R=   2e+03
-pan: claim violated! (at depth 1267)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 8926, errors: 1
-  6822337 states, stored
-3.2012922e+09 states, matched
-3.2081145e+09 transitions (= stored+matched)
-1.7190132e+10 atomic steps
-hash conflicts: 2.341747e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
-  754.729      equivalent memory usage for states (stored*(State-vector + overhead))
-  580.944      actual memory usage for states (compression: 76.97%)
-               state-vector as stored = 61 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
- 1070.322      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 21, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 53, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 67, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 86, "(1)"
-       line 438, "pan.___", state 116, "(1)"
-       line 442, "pan.___", state 129, "(1)"
-       line 603, "pan.___", state 150, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 157, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 189, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 203, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 222, "(1)"
-       line 438, "pan.___", state 252, "(1)"
-       line 442, "pan.___", state 265, "(1)"
-       line 411, "pan.___", state 286, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 318, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 332, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 351, "(1)"
-       line 438, "pan.___", state 381, "(1)"
-       line 442, "pan.___", state 394, "(1)"
-       line 411, "pan.___", state 417, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 419, "(1)"
-       line 411, "pan.___", state 420, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 420, "else"
-       line 411, "pan.___", state 423, "(1)"
-       line 415, "pan.___", state 431, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 433, "(1)"
-       line 415, "pan.___", state 434, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 434, "else"
-       line 415, "pan.___", state 437, "(1)"
-       line 415, "pan.___", state 438, "(1)"
-       line 415, "pan.___", state 438, "(1)"
-       line 413, "pan.___", state 443, "((i<1))"
-       line 413, "pan.___", state 443, "((i>=1))"
-       line 420, "pan.___", state 449, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 451, "(1)"
-       line 420, "pan.___", state 452, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 452, "else"
-       line 420, "pan.___", state 455, "(1)"
-       line 420, "pan.___", state 456, "(1)"
-       line 420, "pan.___", state 456, "(1)"
-       line 424, "pan.___", state 463, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 465, "(1)"
-       line 424, "pan.___", state 466, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 466, "else"
-       line 424, "pan.___", state 469, "(1)"
-       line 424, "pan.___", state 470, "(1)"
-       line 424, "pan.___", state 470, "(1)"
-       line 422, "pan.___", state 475, "((i<2))"
-       line 422, "pan.___", state 475, "((i>=2))"
-       line 429, "pan.___", state 482, "(1)"
-       line 429, "pan.___", state 483, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 483, "else"
-       line 429, "pan.___", state 486, "(1)"
-       line 429, "pan.___", state 487, "(1)"
-       line 429, "pan.___", state 487, "(1)"
-       line 433, "pan.___", state 495, "(1)"
-       line 433, "pan.___", state 496, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 496, "else"
-       line 433, "pan.___", state 499, "(1)"
-       line 433, "pan.___", state 500, "(1)"
-       line 433, "pan.___", state 500, "(1)"
-       line 431, "pan.___", state 505, "((i<1))"
-       line 431, "pan.___", state 505, "((i>=1))"
-       line 438, "pan.___", state 512, "(1)"
-       line 438, "pan.___", state 513, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 513, "else"
-       line 438, "pan.___", state 516, "(1)"
-       line 438, "pan.___", state 517, "(1)"
-       line 438, "pan.___", state 517, "(1)"
-       line 442, "pan.___", state 525, "(1)"
-       line 442, "pan.___", state 526, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 526, "else"
-       line 442, "pan.___", state 529, "(1)"
-       line 442, "pan.___", state 530, "(1)"
-       line 442, "pan.___", state 530, "(1)"
-       line 440, "pan.___", state 535, "((i<2))"
-       line 440, "pan.___", state 535, "((i>=2))"
-       line 450, "pan.___", state 539, "(1)"
-       line 450, "pan.___", state 539, "(1)"
-       line 603, "pan.___", state 542, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 603, "pan.___", state 543, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 603, "pan.___", state 544, "(1)"
-       line 272, "pan.___", state 548, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 550, "(1)"
-       line 276, "pan.___", state 557, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 559, "(1)"
-       line 276, "pan.___", state 560, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 560, "else"
-       line 274, "pan.___", state 565, "((i<1))"
-       line 274, "pan.___", state 565, "((i>=1))"
-       line 280, "pan.___", state 570, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 572, "(1)"
-       line 280, "pan.___", state 573, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 573, "else"
-       line 284, "pan.___", state 579, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 581, "(1)"
-       line 284, "pan.___", state 582, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 582, "else"
-       line 282, "pan.___", state 587, "((i<2))"
-       line 282, "pan.___", state 587, "((i>=2))"
-       line 249, "pan.___", state 595, "(1)"
-       line 253, "pan.___", state 603, "(1)"
-       line 253, "pan.___", state 604, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 604, "else"
-       line 251, "pan.___", state 609, "((i<1))"
-       line 251, "pan.___", state 609, "((i>=1))"
-       line 257, "pan.___", state 615, "(1)"
-       line 257, "pan.___", state 616, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 616, "else"
-       line 261, "pan.___", state 623, "(1)"
-       line 261, "pan.___", state 624, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 624, "else"
-       line 266, "pan.___", state 633, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 633, "else"
-       line 299, "pan.___", state 635, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 635, "else"
-       line 411, "pan.___", state 641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 673, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 687, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 706, "(1)"
-       line 438, "pan.___", state 736, "(1)"
-       line 442, "pan.___", state 749, "(1)"
-       line 411, "pan.___", state 777, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 809, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 823, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 842, "(1)"
-       line 438, "pan.___", state 872, "(1)"
-       line 442, "pan.___", state 885, "(1)"
-       line 411, "pan.___", state 906, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 908, "(1)"
-       line 411, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 909, "else"
-       line 411, "pan.___", state 912, "(1)"
-       line 415, "pan.___", state 920, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 922, "(1)"
-       line 415, "pan.___", state 923, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 923, "else"
-       line 415, "pan.___", state 926, "(1)"
-       line 415, "pan.___", state 927, "(1)"
-       line 415, "pan.___", state 927, "(1)"
-       line 413, "pan.___", state 932, "((i<1))"
-       line 413, "pan.___", state 932, "((i>=1))"
-       line 420, "pan.___", state 938, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 940, "(1)"
-       line 420, "pan.___", state 941, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 941, "else"
-       line 420, "pan.___", state 944, "(1)"
-       line 420, "pan.___", state 945, "(1)"
-       line 420, "pan.___", state 945, "(1)"
-       line 424, "pan.___", state 952, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 954, "(1)"
-       line 424, "pan.___", state 955, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 955, "else"
-       line 424, "pan.___", state 958, "(1)"
-       line 424, "pan.___", state 959, "(1)"
-       line 424, "pan.___", state 959, "(1)"
-       line 422, "pan.___", state 964, "((i<2))"
-       line 422, "pan.___", state 964, "((i>=2))"
-       line 429, "pan.___", state 971, "(1)"
-       line 429, "pan.___", state 972, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 972, "else"
-       line 429, "pan.___", state 975, "(1)"
-       line 429, "pan.___", state 976, "(1)"
-       line 429, "pan.___", state 976, "(1)"
-       line 433, "pan.___", state 984, "(1)"
-       line 433, "pan.___", state 985, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 985, "else"
-       line 433, "pan.___", state 988, "(1)"
-       line 433, "pan.___", state 989, "(1)"
-       line 433, "pan.___", state 989, "(1)"
-       line 431, "pan.___", state 994, "((i<1))"
-       line 431, "pan.___", state 994, "((i>=1))"
-       line 438, "pan.___", state 1001, "(1)"
-       line 438, "pan.___", state 1002, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 1002, "else"
-       line 438, "pan.___", state 1005, "(1)"
-       line 438, "pan.___", state 1006, "(1)"
-       line 438, "pan.___", state 1006, "(1)"
-       line 442, "pan.___", state 1014, "(1)"
-       line 442, "pan.___", state 1015, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 1015, "else"
-       line 442, "pan.___", state 1018, "(1)"
-       line 442, "pan.___", state 1019, "(1)"
-       line 442, "pan.___", state 1019, "(1)"
-       line 440, "pan.___", state 1024, "((i<2))"
-       line 440, "pan.___", state 1024, "((i>=2))"
-       line 450, "pan.___", state 1028, "(1)"
-       line 450, "pan.___", state 1028, "(1)"
-       line 611, "pan.___", state 1032, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 1037, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1069, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1083, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1102, "(1)"
-       line 438, "pan.___", state 1132, "(1)"
-       line 442, "pan.___", state 1145, "(1)"
-       line 411, "pan.___", state 1169, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1201, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1215, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1234, "(1)"
-       line 438, "pan.___", state 1264, "(1)"
-       line 442, "pan.___", state 1277, "(1)"
-       line 411, "pan.___", state 1302, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1334, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1348, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1367, "(1)"
-       line 438, "pan.___", state 1397, "(1)"
-       line 442, "pan.___", state 1410, "(1)"
-       line 411, "pan.___", state 1431, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1463, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1477, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1496, "(1)"
-       line 438, "pan.___", state 1526, "(1)"
-       line 442, "pan.___", state 1539, "(1)"
-       line 272, "pan.___", state 1562, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1564, "(1)"
-       line 276, "pan.___", state 1571, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1573, "(1)"
-       line 276, "pan.___", state 1574, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1574, "else"
-       line 274, "pan.___", state 1579, "((i<1))"
-       line 274, "pan.___", state 1579, "((i>=1))"
-       line 280, "pan.___", state 1584, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1586, "(1)"
-       line 280, "pan.___", state 1587, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1587, "else"
-       line 284, "pan.___", state 1593, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1595, "(1)"
-       line 284, "pan.___", state 1596, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1596, "else"
-       line 282, "pan.___", state 1601, "((i<2))"
-       line 282, "pan.___", state 1601, "((i>=2))"
-       line 249, "pan.___", state 1609, "(1)"
-       line 253, "pan.___", state 1617, "(1)"
-       line 253, "pan.___", state 1618, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1618, "else"
-       line 251, "pan.___", state 1623, "((i<1))"
-       line 251, "pan.___", state 1623, "((i>=1))"
-       line 257, "pan.___", state 1629, "(1)"
-       line 257, "pan.___", state 1630, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1630, "else"
-       line 261, "pan.___", state 1637, "(1)"
-       line 261, "pan.___", state 1638, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1638, "else"
-       line 266, "pan.___", state 1647, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1647, "else"
-       line 299, "pan.___", state 1649, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1649, "else"
-       line 411, "pan.___", state 1655, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1687, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1701, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1720, "(1)"
-       line 438, "pan.___", state 1750, "(1)"
-       line 442, "pan.___", state 1763, "(1)"
-       line 411, "pan.___", state 1784, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1816, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1830, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1849, "(1)"
-       line 438, "pan.___", state 1879, "(1)"
-       line 442, "pan.___", state 1892, "(1)"
-       line 411, "pan.___", state 1916, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1948, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1962, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1981, "(1)"
-       line 438, "pan.___", state 2011, "(1)"
-       line 442, "pan.___", state 2024, "(1)"
-       line 650, "pan.___", state 2045, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 2052, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2084, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2098, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2117, "(1)"
-       line 438, "pan.___", state 2147, "(1)"
-       line 442, "pan.___", state 2160, "(1)"
-       line 411, "pan.___", state 2181, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2213, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2227, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2246, "(1)"
-       line 438, "pan.___", state 2276, "(1)"
-       line 442, "pan.___", state 2289, "(1)"
-       line 411, "pan.___", state 2312, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2314, "(1)"
-       line 411, "pan.___", state 2315, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2315, "else"
-       line 411, "pan.___", state 2318, "(1)"
-       line 415, "pan.___", state 2326, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2328, "(1)"
-       line 415, "pan.___", state 2329, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2329, "else"
-       line 415, "pan.___", state 2332, "(1)"
-       line 415, "pan.___", state 2333, "(1)"
-       line 415, "pan.___", state 2333, "(1)"
-       line 413, "pan.___", state 2338, "((i<1))"
-       line 413, "pan.___", state 2338, "((i>=1))"
-       line 420, "pan.___", state 2344, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2346, "(1)"
-       line 420, "pan.___", state 2347, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2347, "else"
-       line 420, "pan.___", state 2350, "(1)"
-       line 420, "pan.___", state 2351, "(1)"
-       line 420, "pan.___", state 2351, "(1)"
-       line 424, "pan.___", state 2358, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2360, "(1)"
-       line 424, "pan.___", state 2361, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2361, "else"
-       line 424, "pan.___", state 2364, "(1)"
-       line 424, "pan.___", state 2365, "(1)"
-       line 424, "pan.___", state 2365, "(1)"
-       line 422, "pan.___", state 2370, "((i<2))"
-       line 422, "pan.___", state 2370, "((i>=2))"
-       line 429, "pan.___", state 2377, "(1)"
-       line 429, "pan.___", state 2378, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 2378, "else"
-       line 429, "pan.___", state 2381, "(1)"
-       line 429, "pan.___", state 2382, "(1)"
-       line 429, "pan.___", state 2382, "(1)"
-       line 433, "pan.___", state 2390, "(1)"
-       line 433, "pan.___", state 2391, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 2391, "else"
-       line 433, "pan.___", state 2394, "(1)"
-       line 433, "pan.___", state 2395, "(1)"
-       line 433, "pan.___", state 2395, "(1)"
-       line 431, "pan.___", state 2400, "((i<1))"
-       line 431, "pan.___", state 2400, "((i>=1))"
-       line 438, "pan.___", state 2407, "(1)"
-       line 438, "pan.___", state 2408, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 2408, "else"
-       line 438, "pan.___", state 2411, "(1)"
-       line 438, "pan.___", state 2412, "(1)"
-       line 438, "pan.___", state 2412, "(1)"
-       line 442, "pan.___", state 2420, "(1)"
-       line 442, "pan.___", state 2421, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 2421, "else"
-       line 442, "pan.___", state 2424, "(1)"
-       line 442, "pan.___", state 2425, "(1)"
-       line 442, "pan.___", state 2425, "(1)"
-       line 440, "pan.___", state 2430, "((i<2))"
-       line 440, "pan.___", state 2430, "((i>=2))"
-       line 450, "pan.___", state 2434, "(1)"
-       line 450, "pan.___", state 2434, "(1)"
-       line 650, "pan.___", state 2437, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 650, "pan.___", state 2438, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 650, "pan.___", state 2439, "(1)"
-       line 272, "pan.___", state 2443, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 2445, "(1)"
-       line 276, "pan.___", state 2452, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2454, "(1)"
-       line 276, "pan.___", state 2455, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 2455, "else"
-       line 274, "pan.___", state 2460, "((i<1))"
-       line 274, "pan.___", state 2460, "((i>=1))"
-       line 280, "pan.___", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2467, "(1)"
-       line 280, "pan.___", state 2468, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 2468, "else"
-       line 284, "pan.___", state 2474, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2476, "(1)"
-       line 284, "pan.___", state 2477, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 2477, "else"
-       line 282, "pan.___", state 2482, "((i<2))"
-       line 282, "pan.___", state 2482, "((i>=2))"
-       line 249, "pan.___", state 2490, "(1)"
-       line 253, "pan.___", state 2498, "(1)"
-       line 253, "pan.___", state 2499, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2499, "else"
-       line 251, "pan.___", state 2504, "((i<1))"
-       line 251, "pan.___", state 2504, "((i>=1))"
-       line 257, "pan.___", state 2510, "(1)"
-       line 257, "pan.___", state 2511, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2511, "else"
-       line 261, "pan.___", state 2518, "(1)"
-       line 261, "pan.___", state 2519, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2519, "else"
-       line 266, "pan.___", state 2528, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2528, "else"
-       line 299, "pan.___", state 2530, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 2530, "else"
-       line 411, "pan.___", state 2536, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2568, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2582, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2601, "(1)"
-       line 438, "pan.___", state 2631, "(1)"
-       line 442, "pan.___", state 2644, "(1)"
-       line 272, "pan.___", state 2668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 2670, "(1)"
-       line 276, "pan.___", state 2677, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2679, "(1)"
-       line 276, "pan.___", state 2680, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 2680, "else"
-       line 274, "pan.___", state 2685, "((i<1))"
-       line 274, "pan.___", state 2685, "((i>=1))"
-       line 280, "pan.___", state 2690, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2692, "(1)"
-       line 280, "pan.___", state 2693, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 2693, "else"
-       line 284, "pan.___", state 2699, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2701, "(1)"
-       line 284, "pan.___", state 2702, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 2702, "else"
-       line 282, "pan.___", state 2707, "((i<2))"
-       line 282, "pan.___", state 2707, "((i>=2))"
-       line 249, "pan.___", state 2715, "(1)"
-       line 253, "pan.___", state 2723, "(1)"
-       line 253, "pan.___", state 2724, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2724, "else"
-       line 251, "pan.___", state 2729, "((i<1))"
-       line 251, "pan.___", state 2729, "((i>=1))"
-       line 257, "pan.___", state 2735, "(1)"
-       line 257, "pan.___", state 2736, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2736, "else"
-       line 261, "pan.___", state 2743, "(1)"
-       line 261, "pan.___", state 2744, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2744, "else"
-       line 266, "pan.___", state 2753, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2753, "else"
-       line 299, "pan.___", state 2755, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 2755, "else"
-       line 411, "pan.___", state 2761, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2793, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2807, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2826, "(1)"
-       line 438, "pan.___", state 2856, "(1)"
-       line 442, "pan.___", state 2869, "(1)"
-       line 411, "pan.___", state 2890, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2922, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2936, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2955, "(1)"
-       line 438, "pan.___", state 2985, "(1)"
-       line 442, "pan.___", state 2998, "(1)"
-       line 249, "pan.___", state 3031, "(1)"
-       line 257, "pan.___", state 3051, "(1)"
-       line 261, "pan.___", state 3059, "(1)"
-       line 249, "pan.___", state 3074, "(1)"
-       line 257, "pan.___", state 3094, "(1)"
-       line 261, "pan.___", state 3102, "(1)"
-       line 898, "pan.___", state 3119, "-end-"
-       (330 of 3119 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 20, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 26, "(1)"
-       line 415, "pan.___", state 34, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 40, "(1)"
-       line 415, "pan.___", state 41, "(1)"
-       line 415, "pan.___", state 41, "(1)"
-       line 413, "pan.___", state 46, "((i<1))"
-       line 413, "pan.___", state 46, "((i>=1))"
-       line 420, "pan.___", state 52, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 58, "(1)"
-       line 420, "pan.___", state 59, "(1)"
-       line 420, "pan.___", state 59, "(1)"
-       line 424, "pan.___", state 72, "(1)"
-       line 424, "pan.___", state 73, "(1)"
-       line 424, "pan.___", state 73, "(1)"
-       line 422, "pan.___", state 78, "((i<2))"
-       line 422, "pan.___", state 78, "((i>=2))"
-       line 429, "pan.___", state 85, "(1)"
-       line 429, "pan.___", state 86, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 86, "else"
-       line 429, "pan.___", state 89, "(1)"
-       line 429, "pan.___", state 90, "(1)"
-       line 429, "pan.___", state 90, "(1)"
-       line 433, "pan.___", state 98, "(1)"
-       line 433, "pan.___", state 99, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 99, "else"
-       line 433, "pan.___", state 102, "(1)"
-       line 433, "pan.___", state 103, "(1)"
-       line 433, "pan.___", state 103, "(1)"
-       line 431, "pan.___", state 108, "((i<1))"
-       line 431, "pan.___", state 108, "((i>=1))"
-       line 438, "pan.___", state 115, "(1)"
-       line 438, "pan.___", state 116, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 116, "else"
-       line 438, "pan.___", state 119, "(1)"
-       line 438, "pan.___", state 120, "(1)"
-       line 438, "pan.___", state 120, "(1)"
-       line 442, "pan.___", state 128, "(1)"
-       line 442, "pan.___", state 129, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 129, "else"
-       line 442, "pan.___", state 132, "(1)"
-       line 442, "pan.___", state 133, "(1)"
-       line 442, "pan.___", state 133, "(1)"
-       line 440, "pan.___", state 138, "((i<2))"
-       line 440, "pan.___", state 138, "((i>=2))"
-       line 450, "pan.___", state 142, "(1)"
-       line 450, "pan.___", state 142, "(1)"
-       line 272, "pan.___", state 151, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 160, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 274, "pan.___", state 168, "((i<1))"
-       line 274, "pan.___", state 168, "((i>=1))"
-       line 280, "pan.___", state 173, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 1021, "pan.___", state 201, "old_data = cached_rcu_ptr.val[_pid]"
-       line 1032, "pan.___", state 205, "_proc_urcu_writer = (_proc_urcu_writer|(1<<4))"
-       line 411, "pan.___", state 213, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 219, "(1)"
-       line 415, "pan.___", state 227, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 233, "(1)"
-       line 415, "pan.___", state 234, "(1)"
-       line 415, "pan.___", state 234, "(1)"
-       line 413, "pan.___", state 239, "((i<1))"
-       line 413, "pan.___", state 239, "((i>=1))"
-       line 420, "pan.___", state 247, "(1)"
-       line 420, "pan.___", state 248, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 248, "else"
-       line 420, "pan.___", state 251, "(1)"
-       line 420, "pan.___", state 252, "(1)"
-       line 420, "pan.___", state 252, "(1)"
-       line 424, "pan.___", state 259, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 265, "(1)"
-       line 424, "pan.___", state 266, "(1)"
-       line 424, "pan.___", state 266, "(1)"
-       line 422, "pan.___", state 271, "((i<2))"
-       line 422, "pan.___", state 271, "((i>=2))"
-       line 429, "pan.___", state 278, "(1)"
-       line 429, "pan.___", state 279, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 279, "else"
-       line 429, "pan.___", state 282, "(1)"
-       line 429, "pan.___", state 283, "(1)"
-       line 429, "pan.___", state 283, "(1)"
-       line 433, "pan.___", state 291, "(1)"
-       line 433, "pan.___", state 292, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 292, "else"
-       line 433, "pan.___", state 295, "(1)"
-       line 433, "pan.___", state 296, "(1)"
-       line 433, "pan.___", state 296, "(1)"
-       line 431, "pan.___", state 301, "((i<1))"
-       line 431, "pan.___", state 301, "((i>=1))"
-       line 438, "pan.___", state 308, "(1)"
-       line 438, "pan.___", state 309, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 309, "else"
-       line 438, "pan.___", state 312, "(1)"
-       line 438, "pan.___", state 313, "(1)"
-       line 438, "pan.___", state 313, "(1)"
-       line 442, "pan.___", state 321, "(1)"
-       line 442, "pan.___", state 322, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 322, "else"
-       line 442, "pan.___", state 325, "(1)"
-       line 442, "pan.___", state 326, "(1)"
-       line 442, "pan.___", state 326, "(1)"
-       line 440, "pan.___", state 331, "((i<2))"
-       line 440, "pan.___", state 331, "((i>=2))"
-       line 450, "pan.___", state 335, "(1)"
-       line 450, "pan.___", state 335, "(1)"
-       line 411, "pan.___", state 346, "(1)"
-       line 411, "pan.___", state 347, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 347, "else"
-       line 411, "pan.___", state 350, "(1)"
-       line 415, "pan.___", state 358, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 364, "(1)"
-       line 415, "pan.___", state 365, "(1)"
-       line 415, "pan.___", state 365, "(1)"
-       line 413, "pan.___", state 370, "((i<1))"
-       line 413, "pan.___", state 370, "((i>=1))"
-       line 420, "pan.___", state 376, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 382, "(1)"
-       line 420, "pan.___", state 383, "(1)"
-       line 420, "pan.___", state 383, "(1)"
-       line 424, "pan.___", state 390, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 396, "(1)"
-       line 424, "pan.___", state 397, "(1)"
-       line 424, "pan.___", state 397, "(1)"
-       line 422, "pan.___", state 402, "((i<2))"
-       line 422, "pan.___", state 402, "((i>=2))"
-       line 429, "pan.___", state 409, "(1)"
-       line 429, "pan.___", state 410, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 410, "else"
-       line 429, "pan.___", state 413, "(1)"
-       line 429, "pan.___", state 414, "(1)"
-       line 429, "pan.___", state 414, "(1)"
-       line 433, "pan.___", state 422, "(1)"
-       line 433, "pan.___", state 423, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 423, "else"
-       line 433, "pan.___", state 426, "(1)"
-       line 433, "pan.___", state 427, "(1)"
-       line 433, "pan.___", state 427, "(1)"
-       line 431, "pan.___", state 432, "((i<1))"
-       line 431, "pan.___", state 432, "((i>=1))"
-       line 438, "pan.___", state 439, "(1)"
-       line 438, "pan.___", state 440, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 440, "else"
-       line 438, "pan.___", state 443, "(1)"
-       line 438, "pan.___", state 444, "(1)"
-       line 438, "pan.___", state 444, "(1)"
-       line 442, "pan.___", state 452, "(1)"
-       line 442, "pan.___", state 453, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 453, "else"
-       line 442, "pan.___", state 456, "(1)"
-       line 442, "pan.___", state 457, "(1)"
-       line 442, "pan.___", state 457, "(1)"
-       line 440, "pan.___", state 462, "((i<2))"
-       line 440, "pan.___", state 462, "((i>=2))"
-       line 450, "pan.___", state 466, "(1)"
-       line 450, "pan.___", state 466, "(1)"
-       line 1086, "pan.___", state 477, "_proc_urcu_writer = (_proc_urcu_writer&~((1<<9)))"
-       line 1091, "pan.___", state 478, "_proc_urcu_writer = (_proc_urcu_writer&~(((1<<8)|(1<<7))))"
-       line 411, "pan.___", state 483, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 489, "(1)"
-       line 415, "pan.___", state 497, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 503, "(1)"
-       line 415, "pan.___", state 504, "(1)"
-       line 415, "pan.___", state 504, "(1)"
-       line 413, "pan.___", state 509, "((i<1))"
-       line 413, "pan.___", state 509, "((i>=1))"
-       line 420, "pan.___", state 515, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 521, "(1)"
-       line 420, "pan.___", state 522, "(1)"
-       line 420, "pan.___", state 522, "(1)"
-       line 424, "pan.___", state 529, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 535, "(1)"
-       line 424, "pan.___", state 536, "(1)"
-       line 424, "pan.___", state 536, "(1)"
-       line 422, "pan.___", state 541, "((i<2))"
-       line 422, "pan.___", state 541, "((i>=2))"
-       line 429, "pan.___", state 548, "(1)"
-       line 429, "pan.___", state 549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 549, "else"
-       line 429, "pan.___", state 552, "(1)"
-       line 429, "pan.___", state 553, "(1)"
-       line 429, "pan.___", state 553, "(1)"
-       line 433, "pan.___", state 561, "(1)"
-       line 433, "pan.___", state 562, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 562, "else"
-       line 433, "pan.___", state 565, "(1)"
-       line 433, "pan.___", state 566, "(1)"
-       line 433, "pan.___", state 566, "(1)"
-       line 431, "pan.___", state 571, "((i<1))"
-       line 431, "pan.___", state 571, "((i>=1))"
-       line 438, "pan.___", state 578, "(1)"
-       line 438, "pan.___", state 579, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 579, "else"
-       line 438, "pan.___", state 582, "(1)"
-       line 438, "pan.___", state 583, "(1)"
-       line 438, "pan.___", state 583, "(1)"
-       line 442, "pan.___", state 591, "(1)"
-       line 442, "pan.___", state 592, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 592, "else"
-       line 442, "pan.___", state 595, "(1)"
-       line 442, "pan.___", state 596, "(1)"
-       line 442, "pan.___", state 596, "(1)"
-       line 450, "pan.___", state 605, "(1)"
-       line 450, "pan.___", state 605, "(1)"
-       line 411, "pan.___", state 612, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 626, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 644, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 677, "(1)"
-       line 433, "pan.___", state 690, "(1)"
-       line 438, "pan.___", state 707, "(1)"
-       line 442, "pan.___", state 720, "(1)"
-       line 415, "pan.___", state 757, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 775, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 789, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 821, "(1)"
-       line 438, "pan.___", state 838, "(1)"
-       line 442, "pan.___", state 851, "(1)"
-       line 1168, "pan.___", state 878, "_proc_urcu_writer = (_proc_urcu_writer|(1<<13))"
-       line 272, "pan.___", state 906, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 908, "(1)"
-       line 276, "pan.___", state 915, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 917, "(1)"
-       line 276, "pan.___", state 918, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 918, "else"
-       line 274, "pan.___", state 923, "((i<1))"
-       line 274, "pan.___", state 923, "((i>=1))"
-       line 280, "pan.___", state 928, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 930, "(1)"
-       line 280, "pan.___", state 931, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 931, "else"
-       line 284, "pan.___", state 937, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 939, "(1)"
-       line 284, "pan.___", state 940, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 940, "else"
-       line 282, "pan.___", state 945, "((i<2))"
-       line 282, "pan.___", state 945, "((i>=2))"
-       line 249, "pan.___", state 953, "(1)"
-       line 253, "pan.___", state 961, "(1)"
-       line 253, "pan.___", state 962, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 962, "else"
-       line 251, "pan.___", state 967, "((i<1))"
-       line 251, "pan.___", state 967, "((i>=1))"
-       line 257, "pan.___", state 973, "(1)"
-       line 257, "pan.___", state 974, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 974, "else"
-       line 261, "pan.___", state 981, "(1)"
-       line 261, "pan.___", state 982, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 982, "else"
-       line 266, "pan.___", state 991, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 991, "else"
-       line 299, "pan.___", state 993, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 993, "else"
-       line 272, "pan.___", state 997, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 999, "(1)"
-       line 276, "pan.___", state 1006, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1008, "(1)"
-       line 276, "pan.___", state 1009, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1009, "else"
-       line 274, "pan.___", state 1014, "((i<1))"
-       line 274, "pan.___", state 1014, "((i>=1))"
-       line 280, "pan.___", state 1019, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1021, "(1)"
-       line 280, "pan.___", state 1022, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1022, "else"
-       line 284, "pan.___", state 1028, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1030, "(1)"
-       line 284, "pan.___", state 1031, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1031, "else"
-       line 282, "pan.___", state 1036, "((i<2))"
-       line 282, "pan.___", state 1036, "((i>=2))"
-       line 249, "pan.___", state 1044, "(1)"
-       line 253, "pan.___", state 1052, "(1)"
-       line 253, "pan.___", state 1053, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1053, "else"
-       line 251, "pan.___", state 1058, "((i<1))"
-       line 251, "pan.___", state 1058, "((i>=1))"
-       line 257, "pan.___", state 1064, "(1)"
-       line 257, "pan.___", state 1065, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1065, "else"
-       line 261, "pan.___", state 1072, "(1)"
-       line 261, "pan.___", state 1073, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1073, "else"
-       line 266, "pan.___", state 1082, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1082, "else"
-       line 299, "pan.___", state 1084, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1084, "else"
-       line 276, "pan.___", state 1097, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1110, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1119, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1135, "(1)"
-       line 253, "pan.___", state 1143, "(1)"
-       line 257, "pan.___", state 1155, "(1)"
-       line 261, "pan.___", state 1163, "(1)"
-       line 272, "pan.___", state 1179, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1181, "(1)"
-       line 276, "pan.___", state 1188, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1190, "(1)"
-       line 276, "pan.___", state 1191, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1191, "else"
-       line 274, "pan.___", state 1196, "((i<1))"
-       line 274, "pan.___", state 1196, "((i>=1))"
-       line 280, "pan.___", state 1201, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1203, "(1)"
-       line 280, "pan.___", state 1204, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1204, "else"
-       line 284, "pan.___", state 1210, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1212, "(1)"
-       line 284, "pan.___", state 1213, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1213, "else"
-       line 282, "pan.___", state 1218, "((i<2))"
-       line 282, "pan.___", state 1218, "((i>=2))"
-       line 249, "pan.___", state 1226, "(1)"
-       line 253, "pan.___", state 1234, "(1)"
-       line 253, "pan.___", state 1235, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1235, "else"
-       line 251, "pan.___", state 1240, "((i<1))"
-       line 251, "pan.___", state 1240, "((i>=1))"
-       line 257, "pan.___", state 1246, "(1)"
-       line 257, "pan.___", state 1247, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1247, "else"
-       line 261, "pan.___", state 1254, "(1)"
-       line 261, "pan.___", state 1255, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1255, "else"
-       line 266, "pan.___", state 1264, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1264, "else"
-       line 299, "pan.___", state 1266, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1266, "else"
-       line 1237, "pan.___", state 1269, "-end-"
-       (227 of 1269 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 3.93e+03 seconds
-pan: rate 1735.2351 states/second
-pan: avg transition delay 1.2255e-06 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index ba5712c..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_MB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index fbd72f1..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4468
-2:3:4388
-3:3:4391
-4:3:4391
-5:3:4394
-6:3:4402
-7:3:4402
-8:3:4405
-9:3:4411
-10:3:4415
-11:3:4415
-12:3:4418
-13:3:4428
-14:3:4436
-15:3:4436
-16:3:4439
-17:3:4445
-18:3:4449
-19:3:4449
-20:3:4452
-21:3:4458
-22:3:4462
-23:3:4463
-24:0:4468
-25:3:4465
-26:0:4468
-27:2:3121
-28:0:4468
-29:2:3127
-30:0:4468
-31:2:3128
-32:0:4468
-33:2:3130
-34:0:4468
-35:2:3131
-36:0:4468
-37:2:3132
-38:0:4468
-39:2:3133
-40:0:4468
-41:2:3134
-42:2:3135
-43:2:3139
-44:2:3140
-45:2:3148
-46:2:3149
-47:2:3153
-48:2:3154
-49:2:3162
-50:2:3167
-51:2:3171
-52:2:3172
-53:2:3180
-54:2:3181
-55:2:3185
-56:2:3186
-57:2:3180
-58:2:3181
-59:2:3185
-60:2:3186
-61:2:3194
-62:2:3199
-63:2:3200
-64:2:3211
-65:2:3212
-66:2:3213
-67:2:3224
-68:2:3229
-69:2:3230
-70:2:3241
-71:2:3242
-72:2:3243
-73:2:3241
-74:2:3242
-75:2:3243
-76:2:3254
-77:2:3262
-78:0:4468
-79:2:3133
-80:0:4468
-81:2:3266
-82:2:3270
-83:2:3271
-84:2:3275
-85:2:3279
-86:2:3280
-87:2:3284
-88:2:3292
-89:2:3293
-90:2:3297
-91:2:3301
-92:2:3302
-93:2:3297
-94:2:3298
-95:2:3306
-96:0:4468
-97:2:3133
-98:0:4468
-99:2:3314
-100:2:3315
-101:2:3316
-102:0:4468
-103:2:3133
-104:0:4468
-105:2:3324
-106:0:4468
-107:2:3133
-108:0:4468
-109:2:3327
-110:2:3328
-111:2:3332
-112:2:3333
-113:2:3341
-114:2:3342
-115:2:3346
-116:2:3347
-117:2:3355
-118:2:3360
-119:2:3361
-120:2:3373
-121:2:3374
-122:2:3378
-123:2:3379
-124:2:3373
-125:2:3374
-126:2:3378
-127:2:3379
-128:2:3387
-129:2:3392
-130:2:3393
-131:2:3404
-132:2:3405
-133:2:3406
-134:2:3417
-135:2:3422
-136:2:3423
-137:2:3434
-138:2:3435
-139:2:3436
-140:2:3434
-141:2:3435
-142:2:3436
-143:2:3447
-144:2:3454
-145:0:4468
-146:2:3133
-147:0:4468
-148:2:3458
-149:2:3459
-150:2:3460
-151:2:3472
-152:2:3473
-153:2:3477
-154:2:3478
-155:2:3486
-156:2:3491
-157:2:3495
-158:2:3496
-159:2:3504
-160:2:3505
-161:2:3509
-162:2:3510
-163:2:3504
-164:2:3505
-165:2:3509
-166:2:3510
-167:2:3518
-168:2:3523
-169:2:3524
-170:2:3535
-171:2:3536
-172:2:3537
-173:2:3548
-174:2:3553
-175:2:3554
-176:2:3565
-177:2:3566
-178:2:3567
-179:2:3565
-180:2:3566
-181:2:3567
-182:2:3578
-183:2:3589
-184:2:3590
-185:0:4468
-186:2:3133
-187:0:4468
-188:2:3597
-189:2:3598
-190:2:3602
-191:2:3603
-192:2:3611
-193:2:3612
-194:2:3616
-195:2:3617
-196:2:3625
-197:2:3630
-198:2:3634
-199:2:3635
-200:2:3643
-201:2:3644
-202:2:3648
-203:2:3649
-204:2:3643
-205:2:3644
-206:2:3648
-207:2:3649
-208:2:3657
-209:2:3662
-210:2:3663
-211:2:3674
-212:2:3675
-213:2:3676
-214:2:3687
-215:2:3692
-216:2:3693
-217:2:3704
-218:2:3705
-219:2:3706
-220:2:3704
-221:2:3705
-222:2:3706
-223:2:3717
-224:0:4468
-225:2:3133
-226:0:4468
-227:2:3726
-228:2:3727
-229:2:3731
-230:2:3732
-231:2:3740
-232:2:3741
-233:2:3745
-234:2:3746
-235:2:3754
-236:2:3759
-237:2:3763
-238:2:3764
-239:2:3772
-240:2:3773
-241:2:3777
-242:2:3778
-243:2:3772
-244:2:3773
-245:2:3777
-246:2:3778
-247:2:3786
-248:2:3791
-249:2:3792
-250:2:3803
-251:2:3804
-252:2:3805
-253:2:3816
-254:2:3821
-255:2:3822
-256:2:3833
-257:2:3834
-258:2:3835
-259:2:3833
-260:2:3834
-261:2:3835
-262:2:3846
-263:2:3853
-264:0:4468
-265:2:3133
-266:0:4468
-267:2:3857
-268:2:3858
-269:2:3859
-270:2:3871
-271:2:3872
-272:2:3876
-273:2:3877
-274:2:3885
-275:2:3890
-276:2:3894
-277:2:3895
-278:2:3903
-279:2:3904
-280:2:3908
-281:2:3909
-282:2:3903
-283:2:3904
-284:2:3908
-285:2:3909
-286:2:3917
-287:2:3922
-288:2:3923
-289:2:3934
-290:2:3935
-291:2:3936
-292:2:3947
-293:2:3952
-294:2:3953
-295:2:3964
-296:2:3965
-297:2:3966
-298:2:3964
-299:2:3965
-300:2:3966
-301:2:3977
-302:2:3987
-303:2:3988
-304:0:4468
-305:2:3133
-306:0:4468
-307:2:3997
-308:2:3998
-309:0:4468
-310:2:3133
-311:0:4468
-312:2:4002
-313:0:4468
-314:2:4010
-315:0:4468
-316:2:3128
-317:0:4468
-318:2:3130
-319:0:4468
-320:2:3131
-321:0:4468
-322:2:3132
-323:0:4468
-324:2:3133
-325:0:4468
-326:2:3134
-327:2:3135
-328:2:3139
-329:2:3140
-330:2:3148
-331:2:3149
-332:2:3153
-333:2:3154
-334:2:3162
-335:2:3167
-336:2:3171
-337:2:3172
-338:2:3180
-339:2:3181
-340:2:3182
-341:2:3180
-342:2:3181
-343:2:3185
-344:2:3186
-345:2:3194
-346:2:3199
-347:2:3200
-348:2:3211
-349:2:3212
-350:2:3213
-351:2:3224
-352:2:3229
-353:2:3230
-354:2:3241
-355:2:3242
-356:2:3243
-357:2:3241
-358:2:3242
-359:2:3243
-360:2:3254
-361:2:3262
-362:0:4468
-363:2:3133
-364:0:4468
-365:2:3266
-366:2:3270
-367:2:3271
-368:2:3275
-369:2:3279
-370:2:3280
-371:2:3284
-372:2:3292
-373:2:3293
-374:2:3297
-375:2:3298
-376:2:3297
-377:2:3301
-378:2:3302
-379:2:3306
-380:0:4468
-381:2:3133
-382:0:4468
-383:2:3314
-384:2:3315
-385:2:3316
-386:0:4468
-387:2:3133
-388:0:4468
-389:2:3324
-390:0:4468
-391:2:3133
-392:0:4468
-393:2:3327
-394:2:3328
-395:2:3332
-396:2:3333
-397:2:3341
-398:2:3342
-399:2:3346
-400:2:3347
-401:2:3355
-402:2:3360
-403:2:3361
-404:2:3373
-405:2:3374
-406:2:3378
-407:2:3379
-408:2:3373
-409:2:3374
-410:2:3378
-411:2:3379
-412:2:3387
-413:2:3392
-414:2:3393
-415:2:3404
-416:2:3405
-417:2:3406
-418:2:3417
-419:2:3422
-420:2:3423
-421:2:3434
-422:2:3435
-423:2:3436
-424:2:3434
-425:2:3435
-426:2:3436
-427:2:3447
-428:2:3454
-429:0:4468
-430:2:3133
-431:0:4468
-432:2:3458
-433:2:3459
-434:2:3460
-435:2:3472
-436:2:3473
-437:2:3477
-438:2:3478
-439:2:3486
-440:2:3491
-441:2:3495
-442:2:3496
-443:2:3504
-444:2:3505
-445:2:3509
-446:2:3510
-447:2:3504
-448:2:3505
-449:2:3509
-450:2:3510
-451:2:3518
-452:2:3523
-453:2:3524
-454:2:3535
-455:2:3536
-456:2:3537
-457:2:3548
-458:2:3553
-459:2:3554
-460:2:3565
-461:2:3566
-462:2:3567
-463:2:3565
-464:2:3566
-465:2:3567
-466:2:3578
-467:2:3589
-468:2:3590
-469:0:4468
-470:2:3133
-471:0:4468
-472:2:3597
-473:2:3598
-474:2:3602
-475:2:3603
-476:2:3611
-477:2:3612
-478:2:3616
-479:2:3617
-480:2:3625
-481:2:3630
-482:2:3634
-483:2:3635
-484:2:3643
-485:2:3644
-486:2:3648
-487:2:3649
-488:2:3643
-489:2:3644
-490:2:3648
-491:2:3649
-492:2:3657
-493:2:3662
-494:2:3663
-495:2:3674
-496:2:3675
-497:2:3676
-498:2:3687
-499:2:3692
-500:2:3693
-501:2:3704
-502:2:3705
-503:2:3706
-504:2:3704
-505:2:3705
-506:2:3706
-507:2:3717
-508:0:4468
-509:2:3133
-510:0:4468
-511:2:3726
-512:2:3727
-513:2:3731
-514:2:3732
-515:2:3740
-516:2:3741
-517:2:3745
-518:2:3746
-519:2:3754
-520:2:3759
-521:2:3763
-522:2:3764
-523:2:3772
-524:2:3773
-525:2:3777
-526:2:3778
-527:2:3772
-528:2:3773
-529:2:3777
-530:2:3778
-531:2:3786
-532:2:3791
-533:2:3792
-534:2:3803
-535:2:3804
-536:2:3805
-537:2:3816
-538:2:3821
-539:2:3822
-540:2:3833
-541:2:3834
-542:2:3835
-543:2:3833
-544:2:3834
-545:2:3835
-546:2:3846
-547:2:3853
-548:0:4468
-549:2:3133
-550:0:4468
-551:2:3857
-552:2:3858
-553:2:3859
-554:2:3871
-555:2:3872
-556:2:3876
-557:2:3877
-558:2:3885
-559:2:3890
-560:2:3894
-561:2:3895
-562:2:3903
-563:2:3904
-564:2:3908
-565:2:3909
-566:2:3903
-567:2:3904
-568:2:3908
-569:2:3909
-570:2:3917
-571:2:3922
-572:2:3923
-573:2:3934
-574:2:3935
-575:2:3936
-576:2:3947
-577:2:3952
-578:2:3953
-579:2:3964
-580:2:3965
-581:2:3966
-582:2:3964
-583:2:3965
-584:2:3966
-585:2:3977
-586:2:3987
-587:2:3988
-588:0:4468
-589:2:3133
-590:0:4468
-591:2:3997
-592:2:3998
-593:0:4468
-594:2:3133
-595:0:4468
-596:2:4002
-597:0:4468
-598:2:4010
-599:0:4468
-600:2:3128
-601:0:4468
-602:2:3130
-603:0:4468
-604:2:3131
-605:0:4468
-606:2:3132
-607:0:4468
-608:2:3133
-609:0:4468
-610:2:3134
-611:2:3135
-612:2:3139
-613:2:3140
-614:2:3148
-615:2:3149
-616:2:3153
-617:2:3154
-618:2:3162
-619:2:3167
-620:2:3171
-621:2:3172
-622:2:3180
-623:2:3181
-624:2:3185
-625:2:3186
-626:2:3180
-627:2:3181
-628:2:3182
-629:2:3194
-630:2:3199
-631:2:3200
-632:2:3211
-633:2:3212
-634:2:3213
-635:2:3224
-636:2:3229
-637:2:3230
-638:2:3241
-639:2:3242
-640:2:3243
-641:2:3241
-642:2:3242
-643:2:3243
-644:2:3254
-645:2:3262
-646:0:4468
-647:2:3133
-648:0:4468
-649:2:3266
-650:2:3270
-651:2:3271
-652:2:3275
-653:2:3279
-654:2:3280
-655:2:3284
-656:2:3292
-657:2:3293
-658:2:3297
-659:2:3301
-660:2:3302
-661:2:3297
-662:2:3298
-663:2:3306
-664:0:4468
-665:2:3133
-666:0:4468
-667:2:3314
-668:2:3315
-669:2:3316
-670:0:4468
-671:2:3133
-672:0:4468
-673:2:3324
-674:0:4468
-675:2:3133
-676:0:4468
-677:2:3327
-678:2:3328
-679:2:3332
-680:2:3333
-681:2:3341
-682:2:3342
-683:2:3346
-684:2:3347
-685:2:3355
-686:2:3360
-687:2:3361
-688:2:3373
-689:2:3374
-690:2:3378
-691:2:3379
-692:2:3373
-693:2:3374
-694:2:3378
-695:2:3379
-696:2:3387
-697:2:3392
-698:2:3393
-699:2:3404
-700:2:3405
-701:2:3406
-702:2:3417
-703:2:3422
-704:2:3423
-705:2:3434
-706:2:3435
-707:2:3436
-708:2:3434
-709:2:3435
-710:2:3436
-711:2:3447
-712:2:3454
-713:0:4468
-714:2:3133
-715:0:4468
-716:2:3458
-717:2:3459
-718:2:3460
-719:2:3472
-720:2:3473
-721:2:3477
-722:2:3478
-723:2:3486
-724:2:3491
-725:2:3495
-726:2:3496
-727:2:3504
-728:2:3505
-729:2:3509
-730:2:3510
-731:2:3504
-732:2:3505
-733:2:3509
-734:2:3510
-735:2:3518
-736:2:3523
-737:2:3524
-738:2:3535
-739:2:3536
-740:2:3537
-741:2:3548
-742:2:3553
-743:2:3554
-744:2:3565
-745:2:3566
-746:2:3567
-747:2:3565
-748:2:3566
-749:2:3567
-750:2:3578
-751:2:3589
-752:2:3590
-753:0:4468
-754:2:3133
-755:0:4468
-756:2:3597
-757:2:3598
-758:2:3602
-759:2:3603
-760:2:3611
-761:2:3612
-762:2:3616
-763:2:3617
-764:2:3625
-765:2:3630
-766:2:3634
-767:2:3635
-768:2:3643
-769:2:3644
-770:2:3648
-771:2:3649
-772:2:3643
-773:2:3644
-774:2:3648
-775:2:3649
-776:2:3657
-777:2:3662
-778:2:3663
-779:2:3674
-780:2:3675
-781:2:3676
-782:2:3687
-783:2:3692
-784:2:3693
-785:2:3704
-786:2:3705
-787:2:3706
-788:2:3704
-789:2:3705
-790:2:3706
-791:2:3717
-792:0:4468
-793:2:3133
-794:0:4468
-795:2:3857
-796:2:3858
-797:2:3862
-798:2:3863
-799:2:3871
-800:2:3872
-801:2:3876
-802:2:3877
-803:2:3885
-804:2:3890
-805:2:3894
-806:2:3895
-807:2:3903
-808:2:3904
-809:2:3908
-810:2:3909
-811:2:3903
-812:2:3904
-813:2:3908
-814:2:3909
-815:2:3917
-816:2:3922
-817:2:3923
-818:2:3934
-819:2:3935
-820:2:3936
-821:2:3947
-822:2:3952
-823:2:3953
-824:2:3964
-825:2:3965
-826:2:3966
-827:2:3964
-828:2:3965
-829:2:3966
-830:2:3977
-831:2:3987
-832:2:3988
-833:0:4468
-834:2:3133
-835:0:4468
-836:2:3997
-837:2:3998
-838:0:4468
-839:2:3133
-840:0:4468
-841:2:3726
-842:2:3727
-843:2:3731
-844:2:3732
-845:2:3740
-846:2:3741
-847:2:3745
-848:2:3746
-849:2:3754
-850:2:3759
-851:2:3763
-852:2:3764
-853:2:3772
-854:2:3773
-855:2:3774
-856:2:3772
-857:2:3773
-858:2:3777
-859:2:3778
-860:2:3786
-861:2:3791
-862:2:3792
-863:2:3803
-864:2:3804
-865:2:3805
-866:2:3816
-867:2:3821
-868:2:3822
-869:2:3833
-870:2:3834
-871:2:3835
-872:2:3833
-873:2:3834
-874:2:3835
-875:2:3846
-876:2:3853
-877:0:4468
-878:2:3133
-879:0:4468
-880:2:4002
-881:0:4468
-882:2:4010
-883:0:4468
-884:2:4011
-885:0:4468
-886:2:4016
-887:0:4468
-888:1:2
-889:0:4468
-890:2:4017
-891:0:4468
-892:1:8
-893:0:4468
-894:2:4016
-895:0:4468
-896:1:9
-897:0:4468
-898:2:4017
-899:0:4468
-900:1:10
-901:0:4468
-902:2:4016
-903:0:4468
-904:1:11
-905:0:4468
-906:2:4017
-907:0:4468
-908:1:12
-909:0:4468
-910:2:4016
-911:0:4468
-912:1:13
-913:0:4468
-914:2:4017
-915:0:4468
-916:1:14
-917:0:4468
-918:2:4016
-919:0:4468
-920:1:15
-921:0:4468
-922:2:4017
-923:0:4468
-924:1:16
-925:1:17
-926:1:21
-927:1:22
-928:1:30
-929:1:31
-930:1:35
-931:1:36
-932:1:44
-933:1:49
-934:1:53
-935:1:54
-936:1:62
-937:1:63
-938:1:67
-939:1:68
-940:1:62
-941:1:63
-942:1:67
-943:1:68
-944:1:76
-945:1:81
-946:1:82
-947:1:93
-948:1:94
-949:1:95
-950:1:106
-951:1:118
-952:1:119
-953:1:123
-954:1:124
-955:1:125
-956:1:123
-957:1:124
-958:1:125
-959:1:136
-960:0:4468
-961:2:4016
-962:0:4468
-963:1:15
-964:0:4468
-965:2:4017
-966:0:4468
-967:1:145
-968:1:146
-969:0:4468
-970:2:4016
-971:0:4468
-972:1:15
-973:0:4468
-974:2:4017
-975:0:4468
-976:1:152
-977:1:153
-978:1:157
-979:1:158
-980:1:166
-981:1:167
-982:1:171
-983:1:172
-984:1:180
-985:1:185
-986:1:189
-987:1:190
-988:1:198
-989:1:199
-990:1:203
-991:1:204
-992:1:198
-993:1:199
-994:1:203
-995:1:204
-996:1:212
-997:1:217
-998:1:218
-999:1:229
-1000:1:230
-1001:1:231
-1002:1:242
-1003:1:254
-1004:1:255
-1005:1:259
-1006:1:260
-1007:1:261
-1008:1:259
-1009:1:260
-1010:1:261
-1011:1:272
-1012:0:4468
-1013:2:4016
-1014:0:4468
-1015:1:15
-1016:0:4468
-1017:2:4017
-1018:0:4468
-1019:1:281
-1020:1:282
-1021:1:286
-1022:1:287
-1023:1:295
-1024:1:296
-1025:1:300
-1026:1:301
-1027:1:309
-1028:1:314
-1029:1:318
-1030:1:319
-1031:1:327
-1032:1:328
-1033:1:332
-1034:1:333
-1035:1:327
-1036:1:328
-1037:1:332
-1038:1:333
-1039:1:341
-1040:1:346
-1041:1:347
-1042:1:358
-1043:1:359
-1044:1:360
-1045:1:371
-1046:1:383
-1047:1:384
-1048:1:388
-1049:1:389
-1050:1:390
-1051:1:388
-1052:1:389
-1053:1:390
-1054:1:401
-1055:1:408
-1056:0:4468
-1057:2:4016
-1058:0:4468
-1059:1:15
-1060:0:4468
-1061:2:4017
-1062:0:4468
-1063:1:636
-1064:1:637
-1065:1:641
-1066:1:642
-1067:1:650
-1068:1:651
-1069:1:652
-1070:1:664
-1071:1:669
-1072:1:673
-1073:1:674
-1074:1:682
-1075:1:683
-1076:1:687
-1077:1:688
-1078:1:682
-1079:1:683
-1080:1:687
-1081:1:688
-1082:1:696
-1083:1:701
-1084:1:702
-1085:1:713
-1086:1:714
-1087:1:715
-1088:1:726
-1089:1:738
-1090:1:739
-1091:1:743
-1092:1:744
-1093:1:745
-1094:1:743
-1095:1:744
-1096:1:745
-1097:1:756
-1098:0:4468
-1099:2:4016
-1100:0:4468
-1101:1:15
-1102:0:4468
-1103:2:4017
-1104:0:4468
-1105:1:765
-1106:1:768
-1107:1:769
-1108:0:4468
-1109:2:4016
-1110:0:4468
-1111:1:15
-1112:0:4468
-1113:2:4017
-1114:0:4468
-1115:1:772
-1116:1:773
-1117:1:777
-1118:1:778
-1119:1:786
-1120:1:787
-1121:1:791
-1122:1:792
-1123:1:800
-1124:1:805
-1125:1:809
-1126:1:810
-1127:1:818
-1128:1:819
-1129:1:823
-1130:1:824
-1131:1:818
-1132:1:819
-1133:1:823
-1134:1:824
-1135:1:832
-1136:1:837
-1137:1:838
-1138:1:849
-1139:1:850
-1140:1:851
-1141:1:862
-1142:1:874
-1143:1:875
-1144:1:879
-1145:1:880
-1146:1:881
-1147:1:879
-1148:1:880
-1149:1:881
-1150:1:892
-1151:0:4468
-1152:2:4016
-1153:0:4468
-1154:1:15
-1155:0:4468
-1156:2:4017
-1157:0:4468
-1158:1:1032
-1159:1:1033
-1160:1:1037
-1161:1:1038
-1162:1:1046
-1163:1:1047
-1164:1:1051
-1165:1:1052
-1166:1:1060
-1167:1:1065
-1168:1:1069
-1169:1:1070
-1170:1:1078
-1171:1:1079
-1172:1:1083
-1173:1:1084
-1174:1:1078
-1175:1:1079
-1176:1:1083
-1177:1:1084
-1178:1:1092
-1179:1:1097
-1180:1:1098
-1181:1:1109
-1182:1:1110
-1183:1:1111
-1184:1:1122
-1185:1:1134
-1186:1:1135
-1187:1:1139
-1188:1:1140
-1189:1:1141
-1190:1:1139
-1191:1:1140
-1192:1:1141
-1193:1:1152
-1194:1:1159
-1195:1:1163
-1196:0:4468
-1197:2:4016
-1198:0:4468
-1199:1:15
-1200:0:4468
-1201:2:4017
-1202:0:4468
-1203:1:1164
-1204:1:1165
-1205:1:1169
-1206:1:1170
-1207:1:1178
-1208:1:1179
-1209:1:1180
-1210:1:1192
-1211:1:1197
-1212:1:1201
-1213:1:1202
-1214:1:1210
-1215:1:1211
-1216:1:1215
-1217:1:1216
-1218:1:1210
-1219:1:1211
-1220:1:1215
-1221:1:1216
-1222:1:1224
-1223:1:1229
-1224:1:1230
-1225:1:1241
-1226:1:1242
-1227:1:1243
-1228:1:1254
-1229:1:1266
-1230:1:1267
-1231:1:1271
-1232:1:1272
-1233:1:1273
-1234:1:1271
-1235:1:1272
-1236:1:1273
-1237:1:1284
-1238:0:4468
-1239:2:4016
-1240:0:4468
-1241:1:15
-1242:0:4468
-1243:2:4017
-1244:0:4468
-1245:1:1293
-1246:0:4468
-1247:2:4016
-1248:0:4468
-1249:1:3027
-1250:1:3034
-1251:1:3035
-1252:1:3042
-1253:1:3047
-1254:1:3054
-1255:1:3055
-1256:1:3054
-1257:1:3055
-1258:1:3062
-1259:1:3066
-1260:0:4468
-1261:2:4017
-1262:0:4468
-1263:1:1295
-1264:1:1296
-1265:0:4466
-1266:2:4016
-1267:0:4472
-1268:1:756
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.define b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.log b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 3da0a27..0000000
+++ /dev/null
@@ -1,536 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-pan: claim violated! (at depth 2092)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 5332, errors: 1
-   615700 states, stored
-3.8337558e+08 states, matched
-3.8399128e+08 transitions (= stored+matched)
-2.147943e+09 atomic steps
-hash conflicts:  90741041 (resolved)
-
-Stats on memory usage (in Megabytes):
-   68.113      equivalent memory usage for states (stored*(State-vector + overhead))
-   52.415      actual memory usage for states (compression: 76.95%)
-               state-vector as stored = 61 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  518.108      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 82, "(1)"
-       line 438, "pan.___", state 112, "(1)"
-       line 442, "pan.___", state 125, "(1)"
-       line 597, "pan.___", state 146, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 185, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 199, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 218, "(1)"
-       line 438, "pan.___", state 248, "(1)"
-       line 442, "pan.___", state 261, "(1)"
-       line 411, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 314, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 328, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 347, "(1)"
-       line 438, "pan.___", state 377, "(1)"
-       line 442, "pan.___", state 390, "(1)"
-       line 411, "pan.___", state 413, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 415, "(1)"
-       line 411, "pan.___", state 416, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 416, "else"
-       line 411, "pan.___", state 419, "(1)"
-       line 415, "pan.___", state 427, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 429, "(1)"
-       line 415, "pan.___", state 430, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 430, "else"
-       line 415, "pan.___", state 433, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 413, "pan.___", state 439, "((i<1))"
-       line 413, "pan.___", state 439, "((i>=1))"
-       line 420, "pan.___", state 445, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 447, "(1)"
-       line 420, "pan.___", state 448, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 448, "else"
-       line 420, "pan.___", state 451, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 424, "pan.___", state 459, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 461, "(1)"
-       line 424, "pan.___", state 462, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 462, "else"
-       line 424, "pan.___", state 465, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 422, "pan.___", state 471, "((i<2))"
-       line 422, "pan.___", state 471, "((i>=2))"
-       line 429, "pan.___", state 478, "(1)"
-       line 429, "pan.___", state 479, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 479, "else"
-       line 429, "pan.___", state 482, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 433, "pan.___", state 491, "(1)"
-       line 433, "pan.___", state 492, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 492, "else"
-       line 433, "pan.___", state 495, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 431, "pan.___", state 501, "((i<1))"
-       line 431, "pan.___", state 501, "((i>=1))"
-       line 438, "pan.___", state 508, "(1)"
-       line 438, "pan.___", state 509, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 509, "else"
-       line 438, "pan.___", state 512, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 442, "pan.___", state 521, "(1)"
-       line 442, "pan.___", state 522, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 522, "else"
-       line 442, "pan.___", state 525, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 440, "pan.___", state 531, "((i<2))"
-       line 440, "pan.___", state 531, "((i>=2))"
-       line 450, "pan.___", state 535, "(1)"
-       line 450, "pan.___", state 535, "(1)"
-       line 597, "pan.___", state 538, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 539, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 540, "(1)"
-       line 272, "pan.___", state 544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 555, "(1)"
-       line 280, "pan.___", state 566, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 575, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 591, "(1)"
-       line 253, "pan.___", state 599, "(1)"
-       line 257, "pan.___", state 611, "(1)"
-       line 261, "pan.___", state 619, "(1)"
-       line 411, "pan.___", state 637, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 651, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 669, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 683, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 702, "(1)"
-       line 433, "pan.___", state 715, "(1)"
-       line 438, "pan.___", state 732, "(1)"
-       line 442, "pan.___", state 745, "(1)"
-       line 411, "pan.___", state 773, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 805, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 819, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 838, "(1)"
-       line 438, "pan.___", state 868, "(1)"
-       line 442, "pan.___", state 881, "(1)"
-       line 411, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 904, "(1)"
-       line 411, "pan.___", state 905, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 905, "else"
-       line 411, "pan.___", state 908, "(1)"
-       line 415, "pan.___", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 918, "(1)"
-       line 415, "pan.___", state 919, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 919, "else"
-       line 415, "pan.___", state 922, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 413, "pan.___", state 928, "((i<1))"
-       line 413, "pan.___", state 928, "((i>=1))"
-       line 420, "pan.___", state 934, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 936, "(1)"
-       line 420, "pan.___", state 937, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 937, "else"
-       line 420, "pan.___", state 940, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 424, "pan.___", state 948, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 950, "(1)"
-       line 424, "pan.___", state 951, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 951, "else"
-       line 424, "pan.___", state 954, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 422, "pan.___", state 960, "((i<2))"
-       line 422, "pan.___", state 960, "((i>=2))"
-       line 429, "pan.___", state 967, "(1)"
-       line 429, "pan.___", state 968, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 968, "else"
-       line 429, "pan.___", state 971, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 433, "pan.___", state 980, "(1)"
-       line 433, "pan.___", state 981, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 981, "else"
-       line 433, "pan.___", state 984, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 431, "pan.___", state 990, "((i<1))"
-       line 431, "pan.___", state 990, "((i>=1))"
-       line 438, "pan.___", state 997, "(1)"
-       line 438, "pan.___", state 998, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 998, "else"
-       line 438, "pan.___", state 1001, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 442, "pan.___", state 1010, "(1)"
-       line 442, "pan.___", state 1011, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 1011, "else"
-       line 442, "pan.___", state 1014, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 440, "pan.___", state 1020, "((i<2))"
-       line 440, "pan.___", state 1020, "((i>=2))"
-       line 450, "pan.___", state 1024, "(1)"
-       line 450, "pan.___", state 1024, "(1)"
-       line 605, "pan.___", state 1028, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 1033, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1047, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1065, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1079, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1098, "(1)"
-       line 433, "pan.___", state 1111, "(1)"
-       line 438, "pan.___", state 1128, "(1)"
-       line 442, "pan.___", state 1141, "(1)"
-       line 411, "pan.___", state 1165, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1197, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1230, "(1)"
-       line 438, "pan.___", state 1260, "(1)"
-       line 442, "pan.___", state 1273, "(1)"
-       line 411, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1363, "(1)"
-       line 438, "pan.___", state 1393, "(1)"
-       line 442, "pan.___", state 1406, "(1)"
-       line 411, "pan.___", state 1427, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1492, "(1)"
-       line 438, "pan.___", state 1522, "(1)"
-       line 442, "pan.___", state 1535, "(1)"
-       line 272, "pan.___", state 1558, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1589, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1605, "(1)"
-       line 253, "pan.___", state 1613, "(1)"
-       line 257, "pan.___", state 1625, "(1)"
-       line 261, "pan.___", state 1633, "(1)"
-       line 411, "pan.___", state 1651, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1716, "(1)"
-       line 433, "pan.___", state 1729, "(1)"
-       line 438, "pan.___", state 1746, "(1)"
-       line 442, "pan.___", state 1759, "(1)"
-       line 411, "pan.___", state 1780, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1794, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1812, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1826, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1845, "(1)"
-       line 433, "pan.___", state 1858, "(1)"
-       line 438, "pan.___", state 1875, "(1)"
-       line 442, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1912, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1944, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1958, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1977, "(1)"
-       line 438, "pan.___", state 2007, "(1)"
-       line 442, "pan.___", state 2020, "(1)"
-       line 644, "pan.___", state 2041, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 2048, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2080, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2094, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2113, "(1)"
-       line 438, "pan.___", state 2143, "(1)"
-       line 442, "pan.___", state 2156, "(1)"
-       line 411, "pan.___", state 2177, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2209, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2242, "(1)"
-       line 438, "pan.___", state 2272, "(1)"
-       line 442, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2308, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2310, "(1)"
-       line 411, "pan.___", state 2311, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2311, "else"
-       line 411, "pan.___", state 2314, "(1)"
-       line 415, "pan.___", state 2322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2324, "(1)"
-       line 415, "pan.___", state 2325, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2325, "else"
-       line 415, "pan.___", state 2328, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 413, "pan.___", state 2334, "((i<1))"
-       line 413, "pan.___", state 2334, "((i>=1))"
-       line 420, "pan.___", state 2340, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2342, "(1)"
-       line 420, "pan.___", state 2343, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2343, "else"
-       line 420, "pan.___", state 2346, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 424, "pan.___", state 2354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2356, "(1)"
-       line 424, "pan.___", state 2357, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2357, "else"
-       line 424, "pan.___", state 2360, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 422, "pan.___", state 2366, "((i<2))"
-       line 422, "pan.___", state 2366, "((i>=2))"
-       line 429, "pan.___", state 2373, "(1)"
-       line 429, "pan.___", state 2374, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 2374, "else"
-       line 429, "pan.___", state 2377, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 433, "pan.___", state 2386, "(1)"
-       line 433, "pan.___", state 2387, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 2387, "else"
-       line 433, "pan.___", state 2390, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 431, "pan.___", state 2396, "((i<1))"
-       line 431, "pan.___", state 2396, "((i>=1))"
-       line 438, "pan.___", state 2403, "(1)"
-       line 438, "pan.___", state 2404, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 2404, "else"
-       line 438, "pan.___", state 2407, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 442, "pan.___", state 2416, "(1)"
-       line 442, "pan.___", state 2417, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 2417, "else"
-       line 442, "pan.___", state 2420, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 440, "pan.___", state 2426, "((i<2))"
-       line 440, "pan.___", state 2426, "((i>=2))"
-       line 450, "pan.___", state 2430, "(1)"
-       line 450, "pan.___", state 2430, "(1)"
-       line 644, "pan.___", state 2433, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2434, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2435, "(1)"
-       line 272, "pan.___", state 2439, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2461, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2470, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2486, "(1)"
-       line 253, "pan.___", state 2494, "(1)"
-       line 257, "pan.___", state 2506, "(1)"
-       line 261, "pan.___", state 2514, "(1)"
-       line 411, "pan.___", state 2532, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2546, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2564, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2578, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2597, "(1)"
-       line 433, "pan.___", state 2610, "(1)"
-       line 438, "pan.___", state 2627, "(1)"
-       line 442, "pan.___", state 2640, "(1)"
-       line 272, "pan.___", state 2664, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2673, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2695, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2711, "(1)"
-       line 253, "pan.___", state 2719, "(1)"
-       line 257, "pan.___", state 2731, "(1)"
-       line 261, "pan.___", state 2739, "(1)"
-       line 411, "pan.___", state 2757, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2822, "(1)"
-       line 433, "pan.___", state 2835, "(1)"
-       line 438, "pan.___", state 2852, "(1)"
-       line 442, "pan.___", state 2865, "(1)"
-       line 411, "pan.___", state 2886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2918, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2932, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2951, "(1)"
-       line 433, "pan.___", state 2964, "(1)"
-       line 438, "pan.___", state 2981, "(1)"
-       line 442, "pan.___", state 2994, "(1)"
-       line 411, "pan.___", state 3027, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 3059, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 3073, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 3092, "(1)"
-       line 438, "pan.___", state 3122, "(1)"
-       line 442, "pan.___", state 3135, "(1)"
-       line 411, "pan.___", state 3154, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 3168, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 3186, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 3200, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 3219, "(1)"
-       line 433, "pan.___", state 3232, "(1)"
-       line 438, "pan.___", state 3249, "(1)"
-       line 442, "pan.___", state 3262, "(1)"
-       line 898, "pan.___", state 3283, "-end-"
-       (290 of 3283 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 24, "(1)"
-       line 415, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 38, "(1)"
-       line 415, "pan.___", state 39, "(1)"
-       line 415, "pan.___", state 39, "(1)"
-       line 413, "pan.___", state 44, "((i<1))"
-       line 413, "pan.___", state 44, "((i>=1))"
-       line 420, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 56, "(1)"
-       line 420, "pan.___", state 57, "(1)"
-       line 420, "pan.___", state 57, "(1)"
-       line 424, "pan.___", state 70, "(1)"
-       line 424, "pan.___", state 71, "(1)"
-       line 424, "pan.___", state 71, "(1)"
-       line 422, "pan.___", state 76, "((i<2))"
-       line 422, "pan.___", state 76, "((i>=2))"
-       line 429, "pan.___", state 83, "(1)"
-       line 429, "pan.___", state 84, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 84, "else"
-       line 429, "pan.___", state 87, "(1)"
-       line 429, "pan.___", state 88, "(1)"
-       line 429, "pan.___", state 88, "(1)"
-       line 433, "pan.___", state 96, "(1)"
-       line 433, "pan.___", state 97, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 97, "else"
-       line 433, "pan.___", state 100, "(1)"
-       line 433, "pan.___", state 101, "(1)"
-       line 433, "pan.___", state 101, "(1)"
-       line 431, "pan.___", state 106, "((i<1))"
-       line 431, "pan.___", state 106, "((i>=1))"
-       line 438, "pan.___", state 113, "(1)"
-       line 438, "pan.___", state 114, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 114, "else"
-       line 438, "pan.___", state 117, "(1)"
-       line 438, "pan.___", state 118, "(1)"
-       line 438, "pan.___", state 118, "(1)"
-       line 442, "pan.___", state 126, "(1)"
-       line 442, "pan.___", state 127, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 127, "else"
-       line 442, "pan.___", state 130, "(1)"
-       line 442, "pan.___", state 131, "(1)"
-       line 442, "pan.___", state 131, "(1)"
-       line 440, "pan.___", state 136, "((i<2))"
-       line 440, "pan.___", state 136, "((i>=2))"
-       line 450, "pan.___", state 140, "(1)"
-       line 450, "pan.___", state 140, "(1)"
-       line 272, "pan.___", state 149, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 158, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 171, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 225, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 243, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 257, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 276, "(1)"
-       line 433, "pan.___", state 289, "(1)"
-       line 438, "pan.___", state 306, "(1)"
-       line 442, "pan.___", state 319, "(1)"
-       line 415, "pan.___", state 356, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 374, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 388, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 420, "(1)"
-       line 438, "pan.___", state 437, "(1)"
-       line 442, "pan.___", state 450, "(1)"
-       line 415, "pan.___", state 495, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 513, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 527, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 559, "(1)"
-       line 438, "pan.___", state 576, "(1)"
-       line 442, "pan.___", state 589, "(1)"
-       line 415, "pan.___", state 624, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 642, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 656, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 688, "(1)"
-       line 438, "pan.___", state 705, "(1)"
-       line 442, "pan.___", state 718, "(1)"
-       line 415, "pan.___", state 755, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 773, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 787, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 819, "(1)"
-       line 438, "pan.___", state 836, "(1)"
-       line 442, "pan.___", state 849, "(1)"
-       line 272, "pan.___", state 904, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 913, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 928, "(1)"
-       line 284, "pan.___", state 935, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 951, "(1)"
-       line 253, "pan.___", state 959, "(1)"
-       line 257, "pan.___", state 971, "(1)"
-       line 261, "pan.___", state 979, "(1)"
-       line 276, "pan.___", state 1004, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1017, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1026, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1042, "(1)"
-       line 253, "pan.___", state 1050, "(1)"
-       line 257, "pan.___", state 1062, "(1)"
-       line 261, "pan.___", state 1070, "(1)"
-       line 276, "pan.___", state 1095, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1108, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1117, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1133, "(1)"
-       line 253, "pan.___", state 1141, "(1)"
-       line 257, "pan.___", state 1153, "(1)"
-       line 261, "pan.___", state 1161, "(1)"
-       line 276, "pan.___", state 1186, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1199, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1208, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1224, "(1)"
-       line 253, "pan.___", state 1232, "(1)"
-       line 257, "pan.___", state 1244, "(1)"
-       line 261, "pan.___", state 1252, "(1)"
-       line 1237, "pan.___", state 1267, "-end-"
-       (96 of 1267 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 474 seconds
-pan: rate 1298.3425 states/second
-pan: avg transition delay 1.235e-06 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 8cb5f81..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_RMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index de03f6a..0000000
+++ /dev/null
@@ -1,2095 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4630
-2:3:4550
-3:3:4553
-4:3:4553
-5:3:4556
-6:3:4564
-7:3:4564
-8:3:4567
-9:3:4573
-10:3:4577
-11:3:4577
-12:3:4580
-13:3:4590
-14:3:4598
-15:3:4598
-16:3:4601
-17:3:4607
-18:3:4611
-19:3:4611
-20:3:4614
-21:3:4620
-22:3:4624
-23:3:4625
-24:0:4630
-25:3:4627
-26:0:4630
-27:2:3285
-28:0:4630
-29:2:3291
-30:0:4630
-31:2:3292
-32:0:4630
-33:2:3294
-34:0:4630
-35:2:3295
-36:0:4630
-37:2:3296
-38:2:3297
-39:2:3301
-40:2:3302
-41:2:3310
-42:2:3311
-43:2:3315
-44:2:3316
-45:2:3324
-46:2:3329
-47:2:3333
-48:2:3334
-49:2:3342
-50:2:3343
-51:2:3347
-52:2:3348
-53:2:3342
-54:2:3343
-55:2:3347
-56:2:3348
-57:2:3356
-58:2:3361
-59:2:3362
-60:2:3373
-61:2:3374
-62:2:3375
-63:2:3386
-64:2:3391
-65:2:3392
-66:2:3403
-67:2:3404
-68:2:3405
-69:2:3403
-70:2:3404
-71:2:3405
-72:2:3416
-73:2:3424
-74:0:4630
-75:2:3295
-76:0:4630
-77:2:3428
-78:2:3432
-79:2:3433
-80:2:3437
-81:2:3441
-82:2:3442
-83:2:3446
-84:2:3454
-85:2:3455
-86:2:3459
-87:2:3463
-88:2:3464
-89:2:3459
-90:2:3460
-91:2:3468
-92:0:4630
-93:2:3295
-94:0:4630
-95:2:3476
-96:2:3477
-97:2:3478
-98:0:4630
-99:2:3295
-100:0:4630
-101:2:3483
-102:0:4630
-103:2:4187
-104:2:4188
-105:2:4192
-106:2:4196
-107:2:4197
-108:2:4201
-109:2:4206
-110:2:4214
-111:2:4218
-112:2:4219
-113:2:4214
-114:2:4218
-115:2:4219
-116:2:4223
-117:2:4230
-118:2:4237
-119:2:4238
-120:2:4245
-121:2:4250
-122:2:4257
-123:2:4258
-124:2:4257
-125:2:4258
-126:2:4265
-127:2:4269
-128:0:4630
-129:2:3485
-130:2:4168
-131:0:4630
-132:2:3295
-133:0:4630
-134:2:3486
-135:0:4630
-136:2:3295
-137:0:4630
-138:2:3489
-139:2:3490
-140:2:3494
-141:2:3495
-142:2:3503
-143:2:3504
-144:2:3508
-145:2:3509
-146:2:3517
-147:2:3522
-148:2:3526
-149:2:3527
-150:2:3535
-151:2:3536
-152:2:3540
-153:2:3541
-154:2:3535
-155:2:3536
-156:2:3540
-157:2:3541
-158:2:3549
-159:2:3554
-160:2:3555
-161:2:3566
-162:2:3567
-163:2:3568
-164:2:3579
-165:2:3584
-166:2:3585
-167:2:3596
-168:2:3597
-169:2:3598
-170:2:3596
-171:2:3597
-172:2:3598
-173:2:3609
-174:2:3616
-175:0:4630
-176:2:3295
-177:0:4630
-178:2:3620
-179:2:3621
-180:2:3622
-181:2:3634
-182:2:3635
-183:2:3639
-184:2:3640
-185:2:3648
-186:2:3653
-187:2:3657
-188:2:3658
-189:2:3666
-190:2:3667
-191:2:3671
-192:2:3672
-193:2:3666
-194:2:3667
-195:2:3671
-196:2:3672
-197:2:3680
-198:2:3685
-199:2:3686
-200:2:3697
-201:2:3698
-202:2:3699
-203:2:3710
-204:2:3715
-205:2:3716
-206:2:3727
-207:2:3728
-208:2:3729
-209:2:3727
-210:2:3728
-211:2:3729
-212:2:3740
-213:2:3751
-214:2:3752
-215:0:4630
-216:2:3295
-217:0:4630
-218:2:3759
-219:2:3760
-220:2:3764
-221:2:3765
-222:2:3773
-223:2:3774
-224:2:3778
-225:2:3779
-226:2:3787
-227:2:3792
-228:2:3796
-229:2:3797
-230:2:3805
-231:2:3806
-232:2:3810
-233:2:3811
-234:2:3805
-235:2:3806
-236:2:3810
-237:2:3811
-238:2:3819
-239:2:3824
-240:2:3825
-241:2:3836
-242:2:3837
-243:2:3838
-244:2:3849
-245:2:3854
-246:2:3855
-247:2:3866
-248:2:3867
-249:2:3868
-250:2:3866
-251:2:3867
-252:2:3868
-253:2:3879
-254:0:4630
-255:2:3295
-256:0:4630
-257:2:3888
-258:2:3889
-259:2:3893
-260:2:3894
-261:2:3902
-262:2:3903
-263:2:3907
-264:2:3908
-265:2:3916
-266:2:3921
-267:2:3925
-268:2:3926
-269:2:3934
-270:2:3935
-271:2:3939
-272:2:3940
-273:2:3934
-274:2:3935
-275:2:3939
-276:2:3940
-277:2:3948
-278:2:3953
-279:2:3954
-280:2:3965
-281:2:3966
-282:2:3967
-283:2:3978
-284:2:3983
-285:2:3984
-286:2:3995
-287:2:3996
-288:2:3997
-289:2:3995
-290:2:3996
-291:2:3997
-292:2:4008
-293:2:4015
-294:0:4630
-295:2:3295
-296:0:4630
-297:2:4019
-298:2:4020
-299:2:4021
-300:2:4033
-301:2:4034
-302:2:4038
-303:2:4039
-304:2:4047
-305:2:4052
-306:2:4056
-307:2:4057
-308:2:4065
-309:2:4066
-310:2:4070
-311:2:4071
-312:2:4065
-313:2:4066
-314:2:4070
-315:2:4071
-316:2:4079
-317:2:4084
-318:2:4085
-319:2:4096
-320:2:4097
-321:2:4098
-322:2:4109
-323:2:4114
-324:2:4115
-325:2:4126
-326:2:4127
-327:2:4128
-328:2:4126
-329:2:4127
-330:2:4128
-331:2:4139
-332:2:4149
-333:2:4150
-334:0:4630
-335:2:3295
-336:0:4630
-337:2:4156
-338:0:4630
-339:2:4460
-340:2:4461
-341:2:4465
-342:2:4469
-343:2:4470
-344:2:4474
-345:2:4482
-346:2:4483
-347:2:4487
-348:2:4491
-349:2:4492
-350:2:4487
-351:2:4491
-352:2:4492
-353:2:4496
-354:2:4503
-355:2:4510
-356:2:4511
-357:2:4518
-358:2:4523
-359:2:4530
-360:2:4531
-361:2:4530
-362:2:4531
-363:2:4538
-364:2:4542
-365:0:4630
-366:2:4158
-367:2:4168
-368:0:4630
-369:2:3295
-370:0:4630
-371:2:4159
-372:2:4160
-373:0:4630
-374:2:3295
-375:0:4630
-376:2:4164
-377:0:4630
-378:2:4172
-379:0:4630
-380:2:3292
-381:0:4630
-382:2:3294
-383:0:4630
-384:2:3295
-385:0:4630
-386:2:3296
-387:2:3297
-388:2:3301
-389:2:3302
-390:2:3310
-391:2:3311
-392:2:3315
-393:2:3316
-394:2:3324
-395:2:3329
-396:2:3333
-397:2:3334
-398:2:3342
-399:2:3343
-400:2:3344
-401:2:3342
-402:2:3343
-403:2:3347
-404:2:3348
-405:2:3356
-406:2:3361
-407:2:3362
-408:2:3373
-409:2:3374
-410:2:3375
-411:2:3386
-412:2:3391
-413:2:3392
-414:2:3403
-415:2:3404
-416:2:3405
-417:2:3403
-418:2:3404
-419:2:3405
-420:2:3416
-421:2:3424
-422:0:4630
-423:2:3295
-424:0:4630
-425:2:3428
-426:2:3432
-427:2:3433
-428:2:3437
-429:2:3441
-430:2:3442
-431:2:3446
-432:2:3454
-433:2:3455
-434:2:3459
-435:2:3460
-436:2:3459
-437:2:3463
-438:2:3464
-439:2:3468
-440:0:4630
-441:2:3295
-442:0:4630
-443:2:3476
-444:2:3477
-445:2:3478
-446:0:4630
-447:2:3295
-448:0:4630
-449:2:3483
-450:0:4630
-451:2:4187
-452:2:4188
-453:2:4192
-454:2:4196
-455:2:4197
-456:2:4201
-457:2:4206
-458:2:4214
-459:2:4218
-460:2:4219
-461:2:4214
-462:2:4218
-463:2:4219
-464:2:4223
-465:2:4230
-466:2:4237
-467:2:4238
-468:2:4245
-469:2:4250
-470:2:4257
-471:2:4258
-472:2:4257
-473:2:4258
-474:2:4265
-475:2:4269
-476:0:4630
-477:2:3485
-478:2:4168
-479:0:4630
-480:2:3295
-481:0:4630
-482:2:3486
-483:0:4630
-484:2:3295
-485:0:4630
-486:2:3489
-487:2:3490
-488:2:3494
-489:2:3495
-490:2:3503
-491:2:3504
-492:2:3508
-493:2:3509
-494:2:3517
-495:2:3522
-496:2:3526
-497:2:3527
-498:2:3535
-499:2:3536
-500:2:3540
-501:2:3541
-502:2:3535
-503:2:3536
-504:2:3540
-505:2:3541
-506:2:3549
-507:2:3554
-508:2:3555
-509:2:3566
-510:2:3567
-511:2:3568
-512:2:3579
-513:2:3584
-514:2:3585
-515:2:3596
-516:2:3597
-517:2:3598
-518:2:3596
-519:2:3597
-520:2:3598
-521:2:3609
-522:2:3616
-523:0:4630
-524:2:3295
-525:0:4630
-526:2:3620
-527:2:3621
-528:2:3622
-529:2:3634
-530:2:3635
-531:2:3639
-532:2:3640
-533:2:3648
-534:2:3653
-535:2:3657
-536:2:3658
-537:2:3666
-538:2:3667
-539:2:3671
-540:2:3672
-541:2:3666
-542:2:3667
-543:2:3671
-544:2:3672
-545:2:3680
-546:2:3685
-547:2:3686
-548:2:3697
-549:2:3698
-550:2:3699
-551:2:3710
-552:2:3715
-553:2:3716
-554:2:3727
-555:2:3728
-556:2:3729
-557:2:3727
-558:2:3728
-559:2:3729
-560:2:3740
-561:2:3751
-562:2:3752
-563:0:4630
-564:2:3295
-565:0:4630
-566:2:3759
-567:2:3760
-568:2:3764
-569:2:3765
-570:2:3773
-571:2:3774
-572:2:3778
-573:2:3779
-574:2:3787
-575:2:3792
-576:2:3796
-577:2:3797
-578:2:3805
-579:2:3806
-580:2:3810
-581:2:3811
-582:2:3805
-583:2:3806
-584:2:3810
-585:2:3811
-586:2:3819
-587:2:3824
-588:2:3825
-589:2:3836
-590:2:3837
-591:2:3838
-592:2:3849
-593:2:3854
-594:2:3855
-595:2:3866
-596:2:3867
-597:2:3868
-598:2:3866
-599:2:3867
-600:2:3868
-601:2:3879
-602:0:4630
-603:2:3295
-604:0:4630
-605:2:3888
-606:2:3889
-607:2:3893
-608:2:3894
-609:2:3902
-610:2:3903
-611:2:3907
-612:2:3908
-613:2:3916
-614:2:3921
-615:2:3925
-616:2:3926
-617:2:3934
-618:2:3935
-619:2:3939
-620:2:3940
-621:2:3934
-622:2:3935
-623:2:3939
-624:2:3940
-625:2:3948
-626:2:3953
-627:2:3954
-628:2:3965
-629:2:3966
-630:2:3967
-631:2:3978
-632:2:3983
-633:2:3984
-634:2:3995
-635:2:3996
-636:2:3997
-637:2:3995
-638:2:3996
-639:2:3997
-640:2:4008
-641:2:4015
-642:0:4630
-643:2:3295
-644:0:4630
-645:2:4019
-646:2:4020
-647:2:4021
-648:2:4033
-649:2:4034
-650:2:4038
-651:2:4039
-652:2:4047
-653:2:4052
-654:2:4056
-655:2:4057
-656:2:4065
-657:2:4066
-658:2:4070
-659:2:4071
-660:2:4065
-661:2:4066
-662:2:4070
-663:2:4071
-664:2:4079
-665:2:4084
-666:2:4085
-667:2:4096
-668:2:4097
-669:2:4098
-670:2:4109
-671:2:4114
-672:2:4115
-673:2:4126
-674:2:4127
-675:2:4128
-676:2:4126
-677:2:4127
-678:2:4128
-679:2:4139
-680:2:4149
-681:2:4150
-682:0:4630
-683:2:3295
-684:0:4630
-685:2:4156
-686:0:4630
-687:2:4460
-688:2:4461
-689:2:4465
-690:2:4469
-691:2:4470
-692:2:4474
-693:2:4482
-694:2:4483
-695:2:4487
-696:2:4491
-697:2:4492
-698:2:4487
-699:2:4491
-700:2:4492
-701:2:4496
-702:2:4503
-703:2:4510
-704:2:4511
-705:2:4518
-706:2:4523
-707:2:4530
-708:2:4531
-709:2:4530
-710:2:4531
-711:2:4538
-712:2:4542
-713:0:4630
-714:2:4158
-715:2:4168
-716:0:4630
-717:2:3295
-718:0:4630
-719:2:4159
-720:2:4160
-721:0:4630
-722:2:3295
-723:0:4630
-724:2:4164
-725:0:4630
-726:2:4172
-727:0:4630
-728:2:3292
-729:0:4630
-730:2:3294
-731:0:4630
-732:2:3295
-733:0:4630
-734:2:3296
-735:2:3297
-736:2:3301
-737:2:3302
-738:2:3310
-739:2:3311
-740:2:3315
-741:2:3316
-742:2:3324
-743:2:3329
-744:2:3333
-745:2:3334
-746:2:3342
-747:2:3343
-748:2:3347
-749:2:3348
-750:2:3342
-751:2:3343
-752:2:3344
-753:2:3356
-754:2:3361
-755:2:3362
-756:2:3373
-757:2:3374
-758:2:3375
-759:2:3386
-760:2:3391
-761:2:3392
-762:2:3403
-763:2:3404
-764:2:3405
-765:2:3403
-766:2:3404
-767:2:3405
-768:2:3416
-769:2:3424
-770:0:4630
-771:2:3295
-772:0:4630
-773:1:2
-774:0:4630
-775:1:8
-776:0:4630
-777:1:9
-778:0:4630
-779:1:10
-780:0:4630
-781:1:11
-782:0:4630
-783:1:12
-784:1:13
-785:1:17
-786:1:18
-787:1:26
-788:1:27
-789:1:31
-790:1:32
-791:1:40
-792:1:45
-793:1:49
-794:1:50
-795:1:58
-796:1:59
-797:1:63
-798:1:64
-799:1:58
-800:1:59
-801:1:63
-802:1:64
-803:1:72
-804:1:77
-805:1:78
-806:1:89
-807:1:90
-808:1:91
-809:1:102
-810:1:107
-811:1:108
-812:1:119
-813:1:120
-814:1:121
-815:1:119
-816:1:120
-817:1:121
-818:1:132
-819:0:4630
-820:1:11
-821:0:4630
-822:1:141
-823:1:142
-824:0:4630
-825:1:11
-826:0:4630
-827:1:148
-828:1:149
-829:1:153
-830:1:154
-831:1:162
-832:1:163
-833:1:167
-834:1:168
-835:1:176
-836:1:181
-837:1:185
-838:1:186
-839:1:194
-840:1:195
-841:1:199
-842:1:200
-843:1:194
-844:1:195
-845:1:199
-846:1:200
-847:1:208
-848:1:213
-849:1:214
-850:1:225
-851:1:226
-852:1:227
-853:1:238
-854:1:243
-855:1:244
-856:1:255
-857:1:256
-858:1:257
-859:1:255
-860:1:256
-861:1:257
-862:1:268
-863:0:4630
-864:1:11
-865:0:4630
-866:1:277
-867:1:278
-868:1:282
-869:1:283
-870:1:291
-871:1:292
-872:1:296
-873:1:297
-874:1:305
-875:1:310
-876:1:314
-877:1:315
-878:1:323
-879:1:324
-880:1:328
-881:1:329
-882:1:323
-883:1:324
-884:1:328
-885:1:329
-886:1:337
-887:1:342
-888:1:343
-889:1:354
-890:1:355
-891:1:356
-892:1:367
-893:1:372
-894:1:373
-895:1:384
-896:1:385
-897:1:386
-898:1:384
-899:1:385
-900:1:386
-901:1:397
-902:1:404
-903:0:4630
-904:1:11
-905:0:4630
-906:1:540
-907:1:544
-908:1:545
-909:1:549
-910:1:550
-911:1:558
-912:1:566
-913:1:567
-914:1:571
-915:1:575
-916:1:576
-917:1:571
-918:1:575
-919:1:576
-920:1:580
-921:1:587
-922:1:594
-923:1:595
-924:1:602
-925:1:607
-926:1:614
-927:1:615
-928:1:614
-929:1:615
-930:1:622
-931:0:4630
-932:1:11
-933:0:4630
-934:2:3428
-935:2:3432
-936:2:3433
-937:2:3437
-938:2:3441
-939:2:3442
-940:2:3446
-941:2:3454
-942:2:3455
-943:2:3459
-944:2:3463
-945:2:3464
-946:2:3459
-947:2:3460
-948:2:3468
-949:0:4630
-950:2:3295
-951:0:4630
-952:2:3476
-953:2:3477
-954:2:3478
-955:0:4630
-956:2:3295
-957:0:4630
-958:2:3483
-959:0:4630
-960:2:4187
-961:2:4188
-962:2:4192
-963:2:4196
-964:2:4197
-965:2:4201
-966:2:4206
-967:2:4214
-968:2:4218
-969:2:4219
-970:2:4214
-971:2:4218
-972:2:4219
-973:2:4223
-974:2:4230
-975:2:4237
-976:2:4238
-977:2:4245
-978:2:4250
-979:2:4257
-980:2:4258
-981:2:4257
-982:2:4258
-983:2:4265
-984:2:4269
-985:0:4630
-986:2:3485
-987:2:4168
-988:0:4630
-989:2:3295
-990:0:4630
-991:2:3486
-992:0:4630
-993:2:3295
-994:0:4630
-995:2:3489
-996:2:3490
-997:2:3494
-998:2:3495
-999:2:3503
-1000:2:3504
-1001:2:3508
-1002:2:3509
-1003:2:3517
-1004:2:3522
-1005:2:3526
-1006:2:3527
-1007:2:3535
-1008:2:3536
-1009:2:3540
-1010:2:3541
-1011:2:3535
-1012:2:3536
-1013:2:3540
-1014:2:3541
-1015:2:3549
-1016:2:3554
-1017:2:3555
-1018:2:3566
-1019:2:3567
-1020:2:3568
-1021:2:3579
-1022:2:3584
-1023:2:3585
-1024:2:3596
-1025:2:3597
-1026:2:3598
-1027:2:3596
-1028:2:3597
-1029:2:3598
-1030:2:3609
-1031:2:3616
-1032:0:4630
-1033:2:3295
-1034:0:4630
-1035:2:3620
-1036:2:3621
-1037:2:3622
-1038:2:3634
-1039:2:3635
-1040:2:3639
-1041:2:3640
-1042:2:3648
-1043:2:3653
-1044:2:3657
-1045:2:3658
-1046:2:3666
-1047:2:3667
-1048:2:3671
-1049:2:3672
-1050:2:3666
-1051:2:3667
-1052:2:3671
-1053:2:3672
-1054:2:3680
-1055:2:3685
-1056:2:3686
-1057:2:3697
-1058:2:3698
-1059:2:3699
-1060:2:3710
-1061:2:3715
-1062:2:3716
-1063:2:3727
-1064:2:3728
-1065:2:3729
-1066:2:3727
-1067:2:3728
-1068:2:3729
-1069:2:3740
-1070:2:3749
-1071:0:4630
-1072:2:3295
-1073:0:4630
-1074:2:3755
-1075:0:4630
-1076:2:4278
-1077:2:4279
-1078:2:4283
-1079:2:4287
-1080:2:4288
-1081:2:4292
-1082:2:4300
-1083:2:4301
-1084:2:4305
-1085:2:4309
-1086:2:4310
-1087:2:4305
-1088:2:4309
-1089:2:4310
-1090:2:4314
-1091:2:4321
-1092:2:4328
-1093:2:4329
-1094:2:4336
-1095:2:4341
-1096:2:4348
-1097:2:4349
-1098:2:4348
-1099:2:4349
-1100:2:4356
-1101:2:4360
-1102:0:4630
-1103:2:3757
-1104:2:3758
-1105:0:4630
-1106:2:3295
-1107:0:4630
-1108:2:3759
-1109:2:3760
-1110:2:3764
-1111:2:3765
-1112:2:3773
-1113:2:3774
-1114:2:3778
-1115:2:3779
-1116:2:3787
-1117:2:3792
-1118:2:3796
-1119:2:3797
-1120:2:3805
-1121:2:3806
-1122:2:3810
-1123:2:3811
-1124:2:3805
-1125:2:3806
-1126:2:3810
-1127:2:3811
-1128:2:3819
-1129:2:3824
-1130:2:3825
-1131:2:3836
-1132:2:3837
-1133:2:3838
-1134:2:3849
-1135:2:3854
-1136:2:3855
-1137:2:3866
-1138:2:3867
-1139:2:3868
-1140:2:3866
-1141:2:3867
-1142:2:3868
-1143:2:3879
-1144:0:4630
-1145:2:3295
-1146:0:4630
-1147:2:3620
-1148:2:3621
-1149:2:3625
-1150:2:3626
-1151:2:3634
-1152:2:3635
-1153:2:3639
-1154:2:3640
-1155:2:3648
-1156:2:3653
-1157:2:3657
-1158:2:3658
-1159:2:3666
-1160:2:3667
-1161:2:3671
-1162:2:3672
-1163:2:3666
-1164:2:3667
-1165:2:3671
-1166:2:3672
-1167:2:3680
-1168:2:3685
-1169:2:3686
-1170:2:3697
-1171:2:3698
-1172:2:3699
-1173:2:3710
-1174:2:3715
-1175:2:3716
-1176:2:3727
-1177:2:3728
-1178:2:3729
-1179:2:3727
-1180:2:3728
-1181:2:3729
-1182:2:3740
-1183:2:3749
-1184:0:4630
-1185:2:3295
-1186:0:4630
-1187:2:3755
-1188:0:4630
-1189:2:4278
-1190:2:4279
-1191:2:4283
-1192:2:4287
-1193:2:4288
-1194:2:4292
-1195:2:4300
-1196:2:4301
-1197:2:4305
-1198:2:4309
-1199:2:4310
-1200:2:4305
-1201:2:4309
-1202:2:4310
-1203:2:4314
-1204:2:4321
-1205:2:4328
-1206:2:4329
-1207:2:4336
-1208:2:4341
-1209:2:4348
-1210:2:4349
-1211:2:4348
-1212:2:4349
-1213:2:4356
-1214:2:4360
-1215:0:4630
-1216:2:3757
-1217:2:3758
-1218:0:4630
-1219:2:3295
-1220:0:4630
-1221:2:3620
-1222:2:3621
-1223:2:3625
-1224:2:3626
-1225:2:3634
-1226:2:3635
-1227:2:3639
-1228:2:3640
-1229:2:3648
-1230:2:3653
-1231:2:3657
-1232:2:3658
-1233:2:3666
-1234:2:3667
-1235:2:3671
-1236:2:3672
-1237:2:3666
-1238:2:3667
-1239:2:3671
-1240:2:3672
-1241:2:3680
-1242:2:3685
-1243:2:3686
-1244:2:3697
-1245:2:3698
-1246:2:3699
-1247:2:3710
-1248:2:3715
-1249:2:3716
-1250:2:3727
-1251:2:3728
-1252:2:3729
-1253:2:3727
-1254:2:3728
-1255:2:3729
-1256:2:3740
-1257:2:3749
-1258:0:4630
-1259:2:3295
-1260:0:4630
-1261:2:3755
-1262:0:4630
-1263:2:4278
-1264:2:4279
-1265:2:4283
-1266:2:4287
-1267:2:4288
-1268:2:4292
-1269:2:4300
-1270:2:4301
-1271:2:4305
-1272:2:4309
-1273:2:4310
-1274:2:4305
-1275:2:4309
-1276:2:4310
-1277:2:4314
-1278:2:4321
-1279:2:4328
-1280:2:4329
-1281:2:4336
-1282:2:4341
-1283:2:4348
-1284:2:4349
-1285:2:4348
-1286:2:4349
-1287:2:4356
-1288:2:4360
-1289:0:4630
-1290:1:632
-1291:1:633
-1292:1:637
-1293:1:638
-1294:1:646
-1295:1:647
-1296:1:651
-1297:1:652
-1298:1:660
-1299:1:665
-1300:1:669
-1301:1:670
-1302:1:678
-1303:1:679
-1304:1:683
-1305:1:684
-1306:1:678
-1307:1:679
-1308:1:683
-1309:1:684
-1310:1:692
-1311:1:697
-1312:1:698
-1313:1:709
-1314:1:710
-1315:1:711
-1316:1:722
-1317:1:727
-1318:1:728
-1319:1:739
-1320:1:740
-1321:1:741
-1322:1:739
-1323:1:747
-1324:1:748
-1325:1:752
-1326:0:4630
-1327:1:11
-1328:0:4630
-1329:2:3757
-1330:2:3758
-1331:0:4630
-1332:2:3295
-1333:0:4630
-1334:2:3620
-1335:2:3621
-1336:2:3625
-1337:2:3626
-1338:2:3634
-1339:2:3635
-1340:2:3639
-1341:2:3640
-1342:2:3648
-1343:2:3653
-1344:2:3657
-1345:2:3658
-1346:2:3666
-1347:2:3667
-1348:2:3671
-1349:2:3672
-1350:2:3666
-1351:2:3667
-1352:2:3671
-1353:2:3672
-1354:2:3680
-1355:2:3685
-1356:2:3686
-1357:2:3697
-1358:2:3698
-1359:2:3699
-1360:2:3710
-1361:2:3715
-1362:2:3716
-1363:2:3727
-1364:2:3728
-1365:2:3729
-1366:2:3727
-1367:2:3728
-1368:2:3729
-1369:2:3740
-1370:2:3749
-1371:0:4630
-1372:2:3295
-1373:0:4630
-1374:2:3755
-1375:0:4630
-1376:1:761
-1377:1:764
-1378:1:765
-1379:0:4630
-1380:1:11
-1381:0:4630
-1382:2:4278
-1383:2:4279
-1384:2:4283
-1385:2:4287
-1386:2:4288
-1387:2:4292
-1388:2:4300
-1389:2:4301
-1390:2:4305
-1391:2:4309
-1392:2:4310
-1393:2:4305
-1394:2:4309
-1395:2:4310
-1396:2:4314
-1397:2:4321
-1398:2:4328
-1399:2:4329
-1400:2:4336
-1401:2:4341
-1402:2:4348
-1403:2:4349
-1404:2:4348
-1405:2:4349
-1406:2:4356
-1407:2:4360
-1408:0:4630
-1409:2:3757
-1410:2:3758
-1411:0:4630
-1412:2:3295
-1413:0:4630
-1414:2:3620
-1415:2:3621
-1416:2:3625
-1417:2:3626
-1418:2:3634
-1419:2:3635
-1420:2:3639
-1421:2:3640
-1422:2:3648
-1423:2:3653
-1424:2:3657
-1425:2:3658
-1426:2:3666
-1427:2:3667
-1428:2:3671
-1429:2:3672
-1430:2:3666
-1431:2:3667
-1432:2:3671
-1433:2:3672
-1434:2:3680
-1435:2:3685
-1436:2:3686
-1437:2:3697
-1438:2:3698
-1439:2:3699
-1440:2:3710
-1441:2:3715
-1442:2:3716
-1443:2:3727
-1444:2:3728
-1445:2:3729
-1446:2:3727
-1447:2:3728
-1448:2:3729
-1449:2:3740
-1450:2:3749
-1451:0:4630
-1452:2:3295
-1453:0:4630
-1454:2:3759
-1455:2:3760
-1456:2:3764
-1457:2:3765
-1458:2:3773
-1459:2:3774
-1460:2:3778
-1461:2:3779
-1462:2:3787
-1463:2:3792
-1464:2:3796
-1465:2:3797
-1466:2:3805
-1467:2:3806
-1468:2:3810
-1469:2:3811
-1470:2:3805
-1471:2:3806
-1472:2:3810
-1473:2:3811
-1474:2:3819
-1475:2:3824
-1476:2:3825
-1477:2:3836
-1478:2:3837
-1479:2:3838
-1480:2:3849
-1481:2:3854
-1482:2:3855
-1483:2:3866
-1484:2:3867
-1485:2:3868
-1486:2:3866
-1487:2:3867
-1488:2:3868
-1489:2:3879
-1490:0:4630
-1491:2:3295
-1492:0:4630
-1493:2:3755
-1494:0:4630
-1495:2:4278
-1496:2:4279
-1497:2:4283
-1498:2:4287
-1499:2:4288
-1500:2:4292
-1501:2:4300
-1502:2:4301
-1503:2:4305
-1504:2:4309
-1505:2:4310
-1506:2:4305
-1507:2:4309
-1508:2:4310
-1509:2:4314
-1510:2:4321
-1511:2:4328
-1512:2:4329
-1513:2:4336
-1514:2:4341
-1515:2:4348
-1516:2:4349
-1517:2:4348
-1518:2:4349
-1519:2:4356
-1520:2:4360
-1521:0:4630
-1522:1:768
-1523:1:769
-1524:1:773
-1525:1:774
-1526:1:782
-1527:1:783
-1528:1:787
-1529:1:788
-1530:1:796
-1531:1:801
-1532:1:805
-1533:1:806
-1534:1:814
-1535:1:815
-1536:1:819
-1537:1:820
-1538:1:814
-1539:1:815
-1540:1:819
-1541:1:820
-1542:1:828
-1543:1:833
-1544:1:834
-1545:1:845
-1546:1:846
-1547:1:847
-1548:1:858
-1549:1:863
-1550:1:864
-1551:1:875
-1552:1:876
-1553:1:877
-1554:1:875
-1555:1:883
-1556:1:884
-1557:1:888
-1558:0:4630
-1559:1:11
-1560:0:4630
-1561:2:3757
-1562:2:3758
-1563:0:4630
-1564:2:3295
-1565:0:4630
-1566:2:3620
-1567:2:3621
-1568:2:3625
-1569:2:3626
-1570:2:3634
-1571:2:3635
-1572:2:3639
-1573:2:3640
-1574:2:3648
-1575:2:3653
-1576:2:3657
-1577:2:3658
-1578:2:3666
-1579:2:3667
-1580:2:3671
-1581:2:3672
-1582:2:3666
-1583:2:3667
-1584:2:3671
-1585:2:3672
-1586:2:3680
-1587:2:3685
-1588:2:3686
-1589:2:3697
-1590:2:3698
-1591:2:3699
-1592:2:3710
-1593:2:3715
-1594:2:3716
-1595:2:3727
-1596:2:3728
-1597:2:3729
-1598:2:3727
-1599:2:3728
-1600:2:3729
-1601:2:3740
-1602:2:3749
-1603:0:4630
-1604:2:3295
-1605:0:4630
-1606:2:3755
-1607:0:4630
-1608:2:4278
-1609:2:4279
-1610:2:4283
-1611:2:4287
-1612:2:4288
-1613:2:4292
-1614:2:4300
-1615:2:4301
-1616:2:4305
-1617:2:4309
-1618:2:4310
-1619:2:4305
-1620:2:4309
-1621:2:4310
-1622:2:4314
-1623:2:4321
-1624:2:4328
-1625:2:4329
-1626:2:4336
-1627:2:4341
-1628:2:4348
-1629:2:4349
-1630:2:4348
-1631:2:4349
-1632:2:4356
-1633:2:4360
-1634:0:4630
-1635:1:1028
-1636:1:1029
-1637:1:1033
-1638:1:1034
-1639:1:1042
-1640:1:1043
-1641:1:1047
-1642:1:1048
-1643:1:1056
-1644:1:1061
-1645:1:1065
-1646:1:1066
-1647:1:1074
-1648:1:1075
-1649:1:1079
-1650:1:1080
-1651:1:1074
-1652:1:1075
-1653:1:1079
-1654:1:1080
-1655:1:1088
-1656:1:1093
-1657:1:1094
-1658:1:1105
-1659:1:1106
-1660:1:1107
-1661:1:1118
-1662:1:1123
-1663:1:1124
-1664:1:1135
-1665:1:1136
-1666:1:1137
-1667:1:1135
-1668:1:1143
-1669:1:1144
-1670:1:1148
-1671:1:1155
-1672:1:1159
-1673:0:4630
-1674:1:11
-1675:0:4630
-1676:2:3757
-1677:2:3758
-1678:0:4630
-1679:2:3295
-1680:0:4630
-1681:2:3620
-1682:2:3621
-1683:2:3625
-1684:2:3626
-1685:2:3634
-1686:2:3635
-1687:2:3639
-1688:2:3640
-1689:2:3648
-1690:2:3653
-1691:2:3657
-1692:2:3658
-1693:2:3666
-1694:2:3667
-1695:2:3671
-1696:2:3672
-1697:2:3666
-1698:2:3667
-1699:2:3671
-1700:2:3672
-1701:2:3680
-1702:2:3685
-1703:2:3686
-1704:2:3697
-1705:2:3698
-1706:2:3699
-1707:2:3710
-1708:2:3715
-1709:2:3716
-1710:2:3727
-1711:2:3728
-1712:2:3729
-1713:2:3727
-1714:2:3728
-1715:2:3729
-1716:2:3740
-1717:2:3749
-1718:0:4630
-1719:2:3295
-1720:0:4630
-1721:2:3755
-1722:0:4630
-1723:1:1160
-1724:1:1161
-1725:1:1165
-1726:1:1166
-1727:1:1174
-1728:1:1175
-1729:1:1176
-1730:1:1188
-1731:1:1193
-1732:1:1197
-1733:1:1198
-1734:1:1206
-1735:1:1207
-1736:1:1211
-1737:1:1212
-1738:1:1206
-1739:1:1207
-1740:1:1211
-1741:1:1212
-1742:1:1220
-1743:1:1225
-1744:1:1226
-1745:1:1237
-1746:1:1238
-1747:1:1239
-1748:1:1250
-1749:1:1255
-1750:1:1256
-1751:1:1267
-1752:1:1268
-1753:1:1269
-1754:1:1267
-1755:1:1275
-1756:1:1276
-1757:1:1280
-1758:0:4630
-1759:1:11
-1760:0:4630
-1761:2:4278
-1762:2:4279
-1763:2:4283
-1764:2:4287
-1765:2:4288
-1766:2:4292
-1767:2:4300
-1768:2:4301
-1769:2:4305
-1770:2:4309
-1771:2:4310
-1772:2:4305
-1773:2:4309
-1774:2:4310
-1775:2:4314
-1776:2:4321
-1777:2:4328
-1778:2:4329
-1779:2:4336
-1780:2:4341
-1781:2:4348
-1782:2:4349
-1783:2:4348
-1784:2:4349
-1785:2:4356
-1786:2:4360
-1787:0:4630
-1788:2:3757
-1789:2:3758
-1790:0:4630
-1791:2:3295
-1792:0:4630
-1793:2:3620
-1794:2:3621
-1795:2:3625
-1796:2:3626
-1797:2:3634
-1798:2:3635
-1799:2:3639
-1800:2:3640
-1801:2:3648
-1802:2:3653
-1803:2:3657
-1804:2:3658
-1805:2:3666
-1806:2:3667
-1807:2:3671
-1808:2:3672
-1809:2:3666
-1810:2:3667
-1811:2:3671
-1812:2:3672
-1813:2:3680
-1814:2:3685
-1815:2:3686
-1816:2:3697
-1817:2:3698
-1818:2:3699
-1819:2:3710
-1820:2:3715
-1821:2:3716
-1822:2:3727
-1823:2:3728
-1824:2:3729
-1825:2:3727
-1826:2:3728
-1827:2:3729
-1828:2:3740
-1829:2:3749
-1830:0:4630
-1831:2:3295
-1832:0:4630
-1833:2:3755
-1834:0:4630
-1835:1:1289
-1836:0:4630
-1837:2:4278
-1838:2:4279
-1839:2:4283
-1840:2:4287
-1841:2:4288
-1842:2:4292
-1843:2:4300
-1844:2:4301
-1845:2:4305
-1846:2:4309
-1847:2:4310
-1848:2:4305
-1849:2:4309
-1850:2:4310
-1851:2:4314
-1852:2:4321
-1853:2:4328
-1854:2:4329
-1855:2:4336
-1856:2:4341
-1857:2:4348
-1858:2:4349
-1859:2:4348
-1860:2:4349
-1861:2:4356
-1862:2:4360
-1863:0:4630
-1864:2:3757
-1865:2:3758
-1866:0:4630
-1867:2:3295
-1868:0:4630
-1869:2:3620
-1870:2:3621
-1871:2:3625
-1872:2:3626
-1873:2:3634
-1874:2:3635
-1875:2:3639
-1876:2:3640
-1877:2:3648
-1878:2:3653
-1879:2:3657
-1880:2:3658
-1881:2:3666
-1882:2:3667
-1883:2:3671
-1884:2:3672
-1885:2:3666
-1886:2:3667
-1887:2:3671
-1888:2:3672
-1889:2:3680
-1890:2:3685
-1891:2:3686
-1892:2:3697
-1893:2:3698
-1894:2:3699
-1895:2:3710
-1896:2:3715
-1897:2:3716
-1898:2:3727
-1899:2:3728
-1900:2:3729
-1901:2:3727
-1902:2:3728
-1903:2:3729
-1904:2:3740
-1905:2:3749
-1906:0:4630
-1907:2:3295
-1908:0:4630
-1909:2:3759
-1910:2:3760
-1911:2:3764
-1912:2:3765
-1913:2:3773
-1914:2:3774
-1915:2:3778
-1916:2:3779
-1917:2:3787
-1918:2:3792
-1919:2:3796
-1920:2:3797
-1921:2:3805
-1922:2:3806
-1923:2:3810
-1924:2:3811
-1925:2:3805
-1926:2:3806
-1927:2:3810
-1928:2:3811
-1929:2:3819
-1930:2:3824
-1931:2:3825
-1932:2:3836
-1933:2:3837
-1934:2:3838
-1935:2:3849
-1936:2:3854
-1937:2:3855
-1938:2:3866
-1939:2:3867
-1940:2:3868
-1941:2:3866
-1942:2:3867
-1943:2:3868
-1944:2:3879
-1945:0:4630
-1946:2:3295
-1947:0:4630
-1948:2:3755
-1949:0:4630
-1950:2:4278
-1951:2:4279
-1952:2:4283
-1953:2:4287
-1954:2:4288
-1955:2:4292
-1956:2:4300
-1957:2:4301
-1958:2:4305
-1959:2:4309
-1960:2:4310
-1961:2:4305
-1962:2:4309
-1963:2:4310
-1964:2:4314
-1965:2:4321
-1966:2:4328
-1967:2:4329
-1968:2:4336
-1969:2:4341
-1970:2:4348
-1971:2:4349
-1972:2:4348
-1973:2:4349
-1974:2:4356
-1975:2:4360
-1976:0:4630
-1977:1:3023
-1978:1:3027
-1979:1:3028
-1980:1:3036
-1981:1:3037
-1982:1:3041
-1983:1:3042
-1984:1:3050
-1985:1:3055
-1986:1:3059
-1987:1:3060
-1988:1:3068
-1989:1:3069
-1990:1:3073
-1991:1:3074
-1992:1:3068
-1993:1:3069
-1994:1:3073
-1995:1:3074
-1996:1:3082
-1997:1:3087
-1998:1:3088
-1999:1:3099
-2000:1:3100
-2001:1:3101
-2002:1:3112
-2003:1:3117
-2004:1:3118
-2005:1:3129
-2006:1:3130
-2007:1:3131
-2008:1:3129
-2009:1:3137
-2010:1:3138
-2011:1:3142
-2012:1:3146
-2013:0:4630
-2014:2:3757
-2015:2:3758
-2016:0:4630
-2017:2:3295
-2018:0:4630
-2019:2:3620
-2020:2:3621
-2021:2:3625
-2022:2:3626
-2023:2:3634
-2024:2:3635
-2025:2:3639
-2026:2:3640
-2027:2:3648
-2028:2:3653
-2029:2:3657
-2030:2:3658
-2031:2:3666
-2032:2:3667
-2033:2:3671
-2034:2:3672
-2035:2:3666
-2036:2:3667
-2037:2:3671
-2038:2:3672
-2039:2:3680
-2040:2:3685
-2041:2:3686
-2042:2:3697
-2043:2:3698
-2044:2:3699
-2045:2:3710
-2046:2:3715
-2047:2:3716
-2048:2:3727
-2049:2:3728
-2050:2:3729
-2051:2:3727
-2052:2:3728
-2053:2:3729
-2054:2:3740
-2055:2:3749
-2056:0:4630
-2057:2:3295
-2058:0:4630
-2059:2:3755
-2060:0:4630
-2061:2:4278
-2062:2:4279
-2063:2:4283
-2064:2:4287
-2065:2:4288
-2066:2:4292
-2067:2:4300
-2068:2:4301
-2069:2:4305
-2070:2:4309
-2071:2:4310
-2072:2:4305
-2073:2:4309
-2074:2:4310
-2075:2:4314
-2076:2:4321
-2077:2:4328
-2078:2:4329
-2079:2:4336
-2080:2:4341
-2081:2:4348
-2082:2:4349
-2083:2:4348
-2084:2:4349
-2085:2:4356
-2086:2:4360
-2087:0:4630
-2088:1:1291
-2089:1:1292
-2090:0:4628
-2091:1:11
-2092:0:4634
-2093:1:3146
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.define b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.log b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 5c504a7..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    5131 States=    1e+06 Transitions= 5.44e+08 Memory=   550.432        t=    664 R=   2e+03
-Depth=    5131 States=    2e+06 Transitions= 1.26e+09 Memory=   634.318        t= 1.56e+03 R=   1e+03
-Depth=    5422 States=    3e+06 Transitions= 1.93e+09 Memory=   718.303        t= 2.43e+03 R=   1e+03
-pan: resizing hashtable to -w22..  done
-Depth=    5422 States=    4e+06 Transitions= 2.58e+09 Memory=   833.311        t= 3.23e+03 R=   1e+03
-Depth=    5422 States=    5e+06 Transitions= 3.25e+09 Memory=   917.295        t= 4.07e+03 R=   1e+03
-pan: claim violated! (at depth 1420)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 5422, errors: 1
-  5523708 states, stored
-3.5450503e+09 states, matched
-3.550574e+09 transitions (= stored+matched)
-2.0146324e+10 atomic steps
-hash conflicts: 2.4095106e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
-  611.067      equivalent memory usage for states (stored*(State-vector + overhead))
-  471.813      actual memory usage for states (compression: 77.21%)
-               state-vector as stored = 62 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  961.240      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 82, "(1)"
-       line 438, "pan.___", state 112, "(1)"
-       line 442, "pan.___", state 125, "(1)"
-       line 597, "pan.___", state 146, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 185, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 199, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 218, "(1)"
-       line 438, "pan.___", state 248, "(1)"
-       line 442, "pan.___", state 261, "(1)"
-       line 411, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 314, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 328, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 347, "(1)"
-       line 438, "pan.___", state 377, "(1)"
-       line 442, "pan.___", state 390, "(1)"
-       line 411, "pan.___", state 413, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 415, "(1)"
-       line 411, "pan.___", state 416, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 416, "else"
-       line 411, "pan.___", state 419, "(1)"
-       line 415, "pan.___", state 427, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 429, "(1)"
-       line 415, "pan.___", state 430, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 430, "else"
-       line 415, "pan.___", state 433, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 413, "pan.___", state 439, "((i<1))"
-       line 413, "pan.___", state 439, "((i>=1))"
-       line 420, "pan.___", state 445, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 447, "(1)"
-       line 420, "pan.___", state 448, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 448, "else"
-       line 420, "pan.___", state 451, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 424, "pan.___", state 459, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 461, "(1)"
-       line 424, "pan.___", state 462, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 462, "else"
-       line 424, "pan.___", state 465, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 422, "pan.___", state 471, "((i<2))"
-       line 422, "pan.___", state 471, "((i>=2))"
-       line 429, "pan.___", state 478, "(1)"
-       line 429, "pan.___", state 479, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 479, "else"
-       line 429, "pan.___", state 482, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 433, "pan.___", state 491, "(1)"
-       line 433, "pan.___", state 492, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 492, "else"
-       line 433, "pan.___", state 495, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 431, "pan.___", state 501, "((i<1))"
-       line 431, "pan.___", state 501, "((i>=1))"
-       line 438, "pan.___", state 508, "(1)"
-       line 438, "pan.___", state 509, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 509, "else"
-       line 438, "pan.___", state 512, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 442, "pan.___", state 521, "(1)"
-       line 442, "pan.___", state 522, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 522, "else"
-       line 442, "pan.___", state 525, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 440, "pan.___", state 531, "((i<2))"
-       line 440, "pan.___", state 531, "((i>=2))"
-       line 450, "pan.___", state 535, "(1)"
-       line 450, "pan.___", state 535, "(1)"
-       line 597, "pan.___", state 538, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 539, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 540, "(1)"
-       line 272, "pan.___", state 544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 555, "(1)"
-       line 280, "pan.___", state 566, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 575, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 591, "(1)"
-       line 253, "pan.___", state 599, "(1)"
-       line 257, "pan.___", state 611, "(1)"
-       line 261, "pan.___", state 619, "(1)"
-       line 411, "pan.___", state 637, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 651, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 669, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 683, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 702, "(1)"
-       line 433, "pan.___", state 715, "(1)"
-       line 438, "pan.___", state 732, "(1)"
-       line 442, "pan.___", state 745, "(1)"
-       line 411, "pan.___", state 773, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 805, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 819, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 838, "(1)"
-       line 438, "pan.___", state 868, "(1)"
-       line 442, "pan.___", state 881, "(1)"
-       line 411, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 904, "(1)"
-       line 411, "pan.___", state 905, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 905, "else"
-       line 411, "pan.___", state 908, "(1)"
-       line 415, "pan.___", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 918, "(1)"
-       line 415, "pan.___", state 919, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 919, "else"
-       line 415, "pan.___", state 922, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 413, "pan.___", state 928, "((i<1))"
-       line 413, "pan.___", state 928, "((i>=1))"
-       line 420, "pan.___", state 934, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 936, "(1)"
-       line 420, "pan.___", state 937, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 937, "else"
-       line 420, "pan.___", state 940, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 424, "pan.___", state 948, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 950, "(1)"
-       line 424, "pan.___", state 951, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 951, "else"
-       line 424, "pan.___", state 954, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 422, "pan.___", state 960, "((i<2))"
-       line 422, "pan.___", state 960, "((i>=2))"
-       line 429, "pan.___", state 967, "(1)"
-       line 429, "pan.___", state 968, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 968, "else"
-       line 429, "pan.___", state 971, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 433, "pan.___", state 980, "(1)"
-       line 433, "pan.___", state 981, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 981, "else"
-       line 433, "pan.___", state 984, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 431, "pan.___", state 990, "((i<1))"
-       line 431, "pan.___", state 990, "((i>=1))"
-       line 438, "pan.___", state 997, "(1)"
-       line 438, "pan.___", state 998, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 998, "else"
-       line 438, "pan.___", state 1001, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 442, "pan.___", state 1010, "(1)"
-       line 442, "pan.___", state 1011, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 1011, "else"
-       line 442, "pan.___", state 1014, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 440, "pan.___", state 1020, "((i<2))"
-       line 440, "pan.___", state 1020, "((i>=2))"
-       line 450, "pan.___", state 1024, "(1)"
-       line 450, "pan.___", state 1024, "(1)"
-       line 605, "pan.___", state 1028, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 1033, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1047, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1065, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1079, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1098, "(1)"
-       line 433, "pan.___", state 1111, "(1)"
-       line 438, "pan.___", state 1128, "(1)"
-       line 442, "pan.___", state 1141, "(1)"
-       line 411, "pan.___", state 1165, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1197, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1230, "(1)"
-       line 438, "pan.___", state 1260, "(1)"
-       line 442, "pan.___", state 1273, "(1)"
-       line 411, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1363, "(1)"
-       line 438, "pan.___", state 1393, "(1)"
-       line 442, "pan.___", state 1406, "(1)"
-       line 411, "pan.___", state 1427, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1492, "(1)"
-       line 438, "pan.___", state 1522, "(1)"
-       line 442, "pan.___", state 1535, "(1)"
-       line 272, "pan.___", state 1558, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1589, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1605, "(1)"
-       line 253, "pan.___", state 1613, "(1)"
-       line 257, "pan.___", state 1625, "(1)"
-       line 261, "pan.___", state 1633, "(1)"
-       line 411, "pan.___", state 1651, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1716, "(1)"
-       line 433, "pan.___", state 1729, "(1)"
-       line 438, "pan.___", state 1746, "(1)"
-       line 442, "pan.___", state 1759, "(1)"
-       line 411, "pan.___", state 1780, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1794, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1812, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1826, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1845, "(1)"
-       line 433, "pan.___", state 1858, "(1)"
-       line 438, "pan.___", state 1875, "(1)"
-       line 442, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1912, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1944, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1958, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1977, "(1)"
-       line 438, "pan.___", state 2007, "(1)"
-       line 442, "pan.___", state 2020, "(1)"
-       line 644, "pan.___", state 2041, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 2048, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2080, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2094, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2113, "(1)"
-       line 438, "pan.___", state 2143, "(1)"
-       line 442, "pan.___", state 2156, "(1)"
-       line 411, "pan.___", state 2177, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2209, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2242, "(1)"
-       line 438, "pan.___", state 2272, "(1)"
-       line 442, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2308, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2310, "(1)"
-       line 411, "pan.___", state 2311, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2311, "else"
-       line 411, "pan.___", state 2314, "(1)"
-       line 415, "pan.___", state 2322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2324, "(1)"
-       line 415, "pan.___", state 2325, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2325, "else"
-       line 415, "pan.___", state 2328, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 413, "pan.___", state 2334, "((i<1))"
-       line 413, "pan.___", state 2334, "((i>=1))"
-       line 420, "pan.___", state 2340, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2342, "(1)"
-       line 420, "pan.___", state 2343, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2343, "else"
-       line 420, "pan.___", state 2346, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 424, "pan.___", state 2354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2356, "(1)"
-       line 424, "pan.___", state 2357, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2357, "else"
-       line 424, "pan.___", state 2360, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 422, "pan.___", state 2366, "((i<2))"
-       line 422, "pan.___", state 2366, "((i>=2))"
-       line 429, "pan.___", state 2373, "(1)"
-       line 429, "pan.___", state 2374, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 2374, "else"
-       line 429, "pan.___", state 2377, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 433, "pan.___", state 2386, "(1)"
-       line 433, "pan.___", state 2387, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 2387, "else"
-       line 433, "pan.___", state 2390, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 431, "pan.___", state 2396, "((i<1))"
-       line 431, "pan.___", state 2396, "((i>=1))"
-       line 438, "pan.___", state 2403, "(1)"
-       line 438, "pan.___", state 2404, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 2404, "else"
-       line 438, "pan.___", state 2407, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 442, "pan.___", state 2416, "(1)"
-       line 442, "pan.___", state 2417, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 2417, "else"
-       line 442, "pan.___", state 2420, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 440, "pan.___", state 2426, "((i<2))"
-       line 440, "pan.___", state 2426, "((i>=2))"
-       line 450, "pan.___", state 2430, "(1)"
-       line 450, "pan.___", state 2430, "(1)"
-       line 644, "pan.___", state 2433, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2434, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2435, "(1)"
-       line 272, "pan.___", state 2439, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2461, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2470, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2486, "(1)"
-       line 253, "pan.___", state 2494, "(1)"
-       line 257, "pan.___", state 2506, "(1)"
-       line 261, "pan.___", state 2514, "(1)"
-       line 411, "pan.___", state 2532, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2546, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2564, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2578, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2597, "(1)"
-       line 433, "pan.___", state 2610, "(1)"
-       line 438, "pan.___", state 2627, "(1)"
-       line 442, "pan.___", state 2640, "(1)"
-       line 272, "pan.___", state 2664, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2673, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2695, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2711, "(1)"
-       line 253, "pan.___", state 2719, "(1)"
-       line 257, "pan.___", state 2731, "(1)"
-       line 261, "pan.___", state 2739, "(1)"
-       line 411, "pan.___", state 2757, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2822, "(1)"
-       line 433, "pan.___", state 2835, "(1)"
-       line 438, "pan.___", state 2852, "(1)"
-       line 442, "pan.___", state 2865, "(1)"
-       line 411, "pan.___", state 2886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2918, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2932, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2951, "(1)"
-       line 433, "pan.___", state 2964, "(1)"
-       line 438, "pan.___", state 2981, "(1)"
-       line 442, "pan.___", state 2994, "(1)"
-       line 249, "pan.___", state 3027, "(1)"
-       line 257, "pan.___", state 3047, "(1)"
-       line 261, "pan.___", state 3055, "(1)"
-       line 249, "pan.___", state 3070, "(1)"
-       line 253, "pan.___", state 3078, "(1)"
-       line 257, "pan.___", state 3090, "(1)"
-       line 261, "pan.___", state 3098, "(1)"
-       line 898, "pan.___", state 3115, "-end-"
-       (283 of 3115 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 19, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 33, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 84, "(1)"
-       line 433, "pan.___", state 97, "(1)"
-       line 272, "pan.___", state 150, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 152, "(1)"
-       line 276, "pan.___", state 159, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 161, "(1)"
-       line 276, "pan.___", state 162, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 162, "else"
-       line 274, "pan.___", state 167, "((i<1))"
-       line 274, "pan.___", state 167, "((i>=1))"
-       line 280, "pan.___", state 172, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 174, "(1)"
-       line 280, "pan.___", state 175, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 175, "else"
-       line 284, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 183, "(1)"
-       line 284, "pan.___", state 184, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 184, "else"
-       line 289, "pan.___", state 193, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 193, "else"
-       line 411, "pan.___", state 212, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 226, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 244, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 258, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 277, "(1)"
-       line 433, "pan.___", state 290, "(1)"
-       line 438, "pan.___", state 307, "(1)"
-       line 442, "pan.___", state 320, "(1)"
-       line 415, "pan.___", state 357, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 375, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 389, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 421, "(1)"
-       line 438, "pan.___", state 438, "(1)"
-       line 442, "pan.___", state 451, "(1)"
-       line 415, "pan.___", state 496, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 514, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 528, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 560, "(1)"
-       line 438, "pan.___", state 577, "(1)"
-       line 442, "pan.___", state 590, "(1)"
-       line 415, "pan.___", state 625, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 643, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 657, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 689, "(1)"
-       line 438, "pan.___", state 706, "(1)"
-       line 442, "pan.___", state 719, "(1)"
-       line 415, "pan.___", state 756, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 774, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 788, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 820, "(1)"
-       line 438, "pan.___", state 837, "(1)"
-       line 442, "pan.___", state 850, "(1)"
-       line 272, "pan.___", state 905, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 914, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 952, "(1)"
-       line 253, "pan.___", state 960, "(1)"
-       line 257, "pan.___", state 972, "(1)"
-       line 261, "pan.___", state 980, "(1)"
-       line 276, "pan.___", state 1005, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1018, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1027, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1043, "(1)"
-       line 253, "pan.___", state 1051, "(1)"
-       line 257, "pan.___", state 1063, "(1)"
-       line 261, "pan.___", state 1071, "(1)"
-       line 276, "pan.___", state 1096, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1109, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1118, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1134, "(1)"
-       line 253, "pan.___", state 1142, "(1)"
-       line 257, "pan.___", state 1154, "(1)"
-       line 261, "pan.___", state 1162, "(1)"
-       line 276, "pan.___", state 1187, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1200, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1209, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1225, "(1)"
-       line 253, "pan.___", state 1233, "(1)"
-       line 257, "pan.___", state 1245, "(1)"
-       line 261, "pan.___", state 1253, "(1)"
-       line 1237, "pan.___", state 1268, "-end-"
-       (77 of 1268 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 4.43e+03 seconds
-pan: rate 1246.6728 states/second
-pan: avg transition delay 1.2479e-06 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index 49791b0..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_WMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index b250110..0000000
+++ /dev/null
@@ -1,1423 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4463
-2:3:4383
-3:3:4386
-4:3:4386
-5:3:4389
-6:3:4397
-7:3:4397
-8:3:4400
-9:3:4406
-10:3:4410
-11:3:4410
-12:3:4413
-13:3:4423
-14:3:4431
-15:3:4431
-16:3:4434
-17:3:4440
-18:3:4444
-19:3:4444
-20:3:4447
-21:3:4453
-22:3:4457
-23:3:4458
-24:0:4463
-25:3:4460
-26:0:4463
-27:2:3117
-28:0:4463
-29:2:3123
-30:0:4463
-31:2:3124
-32:0:4463
-33:2:3126
-34:0:4463
-35:2:3127
-36:0:4463
-37:2:3128
-38:0:4463
-39:2:3129
-40:2:3130
-41:2:3134
-42:2:3135
-43:2:3143
-44:2:3144
-45:2:3148
-46:2:3149
-47:2:3157
-48:2:3162
-49:2:3166
-50:2:3167
-51:2:3175
-52:2:3176
-53:2:3180
-54:2:3181
-55:2:3175
-56:2:3176
-57:2:3180
-58:2:3181
-59:2:3189
-60:2:3194
-61:2:3195
-62:2:3206
-63:2:3207
-64:2:3208
-65:2:3219
-66:2:3224
-67:2:3225
-68:2:3236
-69:2:3237
-70:2:3238
-71:2:3236
-72:2:3237
-73:2:3238
-74:2:3249
-75:2:3257
-76:0:4463
-77:2:3128
-78:0:4463
-79:2:3309
-80:2:3310
-81:2:3311
-82:0:4463
-83:2:3128
-84:0:4463
-85:2:3316
-86:0:4463
-87:2:4020
-88:2:4021
-89:2:4025
-90:2:4029
-91:2:4030
-92:2:4034
-93:2:4039
-94:2:4047
-95:2:4051
-96:2:4052
-97:2:4047
-98:2:4048
-99:2:4056
-100:2:4063
-101:2:4070
-102:2:4071
-103:2:4078
-104:2:4083
-105:2:4090
-106:2:4091
-107:2:4090
-108:2:4091
-109:2:4098
-110:2:4102
-111:0:4463
-112:2:3318
-113:2:4001
-114:0:4463
-115:2:3128
-116:0:4463
-117:2:3319
-118:0:4463
-119:2:3128
-120:0:4463
-121:2:3322
-122:2:3323
-123:2:3327
-124:2:3328
-125:2:3336
-126:2:3337
-127:2:3341
-128:2:3342
-129:2:3350
-130:2:3355
-131:2:3359
-132:2:3360
-133:2:3368
-134:2:3369
-135:2:3373
-136:2:3374
-137:2:3368
-138:2:3369
-139:2:3373
-140:2:3374
-141:2:3382
-142:2:3387
-143:2:3388
-144:2:3399
-145:2:3400
-146:2:3401
-147:2:3412
-148:2:3417
-149:2:3418
-150:2:3429
-151:2:3430
-152:2:3431
-153:2:3429
-154:2:3430
-155:2:3431
-156:2:3442
-157:2:3449
-158:0:4463
-159:2:3128
-160:0:4463
-161:2:3453
-162:2:3454
-163:2:3455
-164:2:3467
-165:2:3468
-166:2:3472
-167:2:3473
-168:2:3481
-169:2:3486
-170:2:3490
-171:2:3491
-172:2:3499
-173:2:3500
-174:2:3504
-175:2:3505
-176:2:3499
-177:2:3500
-178:2:3504
-179:2:3505
-180:2:3513
-181:2:3518
-182:2:3519
-183:2:3530
-184:2:3531
-185:2:3532
-186:2:3543
-187:2:3548
-188:2:3549
-189:2:3560
-190:2:3561
-191:2:3562
-192:2:3560
-193:2:3561
-194:2:3562
-195:2:3573
-196:2:3584
-197:2:3585
-198:0:4463
-199:2:3128
-200:0:4463
-201:2:3592
-202:2:3593
-203:2:3597
-204:2:3598
-205:2:3606
-206:2:3607
-207:2:3611
-208:2:3612
-209:2:3620
-210:2:3625
-211:2:3629
-212:2:3630
-213:2:3638
-214:2:3639
-215:2:3643
-216:2:3644
-217:2:3638
-218:2:3639
-219:2:3643
-220:2:3644
-221:2:3652
-222:2:3657
-223:2:3658
-224:2:3669
-225:2:3670
-226:2:3671
-227:2:3682
-228:2:3687
-229:2:3688
-230:2:3699
-231:2:3700
-232:2:3701
-233:2:3699
-234:2:3700
-235:2:3701
-236:2:3712
-237:0:4463
-238:2:3128
-239:0:4463
-240:2:3721
-241:2:3722
-242:2:3726
-243:2:3727
-244:2:3735
-245:2:3736
-246:2:3740
-247:2:3741
-248:2:3749
-249:2:3754
-250:2:3758
-251:2:3759
-252:2:3767
-253:2:3768
-254:2:3772
-255:2:3773
-256:2:3767
-257:2:3768
-258:2:3772
-259:2:3773
-260:2:3781
-261:2:3786
-262:2:3787
-263:2:3798
-264:2:3799
-265:2:3800
-266:2:3811
-267:2:3816
-268:2:3817
-269:2:3828
-270:2:3829
-271:2:3830
-272:2:3828
-273:2:3829
-274:2:3830
-275:2:3841
-276:2:3848
-277:0:4463
-278:2:3128
-279:0:4463
-280:2:3852
-281:2:3853
-282:2:3854
-283:2:3866
-284:2:3867
-285:2:3871
-286:2:3872
-287:2:3880
-288:2:3885
-289:2:3889
-290:2:3890
-291:2:3898
-292:2:3899
-293:2:3903
-294:2:3904
-295:2:3898
-296:2:3899
-297:2:3903
-298:2:3904
-299:2:3912
-300:2:3917
-301:2:3918
-302:2:3929
-303:2:3930
-304:2:3931
-305:2:3942
-306:2:3947
-307:2:3948
-308:2:3959
-309:2:3960
-310:2:3961
-311:2:3959
-312:2:3960
-313:2:3961
-314:2:3972
-315:2:3982
-316:2:3983
-317:0:4463
-318:2:3128
-319:0:4463
-320:2:3989
-321:0:4463
-322:2:4293
-323:2:4294
-324:2:4298
-325:2:4302
-326:2:4303
-327:2:4307
-328:2:4315
-329:2:4316
-330:2:4320
-331:2:4324
-332:2:4325
-333:2:4320
-334:2:4324
-335:2:4325
-336:2:4329
-337:2:4336
-338:2:4343
-339:2:4344
-340:2:4351
-341:2:4356
-342:2:4363
-343:2:4364
-344:2:4363
-345:2:4364
-346:2:4371
-347:2:4375
-348:0:4463
-349:2:3991
-350:2:4001
-351:0:4463
-352:2:3128
-353:0:4463
-354:2:3992
-355:2:3993
-356:0:4463
-357:2:3128
-358:0:4463
-359:2:3997
-360:0:4463
-361:2:4005
-362:0:4463
-363:2:3124
-364:0:4463
-365:2:3126
-366:0:4463
-367:2:3127
-368:0:4463
-369:2:3128
-370:0:4463
-371:2:3309
-372:2:3310
-373:2:3311
-374:0:4463
-375:2:3128
-376:0:4463
-377:2:3129
-378:2:3130
-379:2:3134
-380:2:3135
-381:2:3143
-382:2:3144
-383:2:3148
-384:2:3149
-385:2:3157
-386:2:3162
-387:2:3163
-388:2:3175
-389:2:3176
-390:2:3177
-391:2:3175
-392:2:3176
-393:2:3180
-394:2:3181
-395:2:3189
-396:2:3194
-397:2:3195
-398:2:3206
-399:2:3207
-400:2:3208
-401:2:3219
-402:2:3224
-403:2:3225
-404:2:3236
-405:2:3237
-406:2:3238
-407:2:3236
-408:2:3237
-409:2:3238
-410:2:3249
-411:2:3257
-412:0:4463
-413:2:3128
-414:0:4463
-415:2:3316
-416:0:4463
-417:2:4020
-418:2:4021
-419:2:4025
-420:2:4029
-421:2:4030
-422:2:4034
-423:2:4042
-424:2:4043
-425:2:4047
-426:2:4048
-427:2:4047
-428:2:4051
-429:2:4052
-430:2:4056
-431:2:4063
-432:2:4070
-433:2:4071
-434:2:4078
-435:2:4083
-436:2:4090
-437:2:4091
-438:2:4090
-439:2:4091
-440:2:4098
-441:2:4102
-442:0:4463
-443:2:3318
-444:2:4001
-445:0:4463
-446:2:3128
-447:0:4463
-448:2:3319
-449:0:4463
-450:2:3128
-451:0:4463
-452:2:3322
-453:2:3323
-454:2:3327
-455:2:3328
-456:2:3336
-457:2:3337
-458:2:3341
-459:2:3342
-460:2:3350
-461:2:3355
-462:2:3359
-463:2:3360
-464:2:3368
-465:2:3369
-466:2:3373
-467:2:3374
-468:2:3368
-469:2:3369
-470:2:3373
-471:2:3374
-472:2:3382
-473:2:3387
-474:2:3388
-475:2:3399
-476:2:3400
-477:2:3401
-478:2:3412
-479:2:3417
-480:2:3418
-481:2:3429
-482:2:3430
-483:2:3431
-484:2:3429
-485:2:3430
-486:2:3431
-487:2:3442
-488:2:3449
-489:0:4463
-490:2:3128
-491:0:4463
-492:2:3453
-493:2:3454
-494:2:3455
-495:2:3467
-496:2:3468
-497:2:3472
-498:2:3473
-499:2:3481
-500:2:3486
-501:2:3490
-502:2:3491
-503:2:3499
-504:2:3500
-505:2:3504
-506:2:3505
-507:2:3499
-508:2:3500
-509:2:3504
-510:2:3505
-511:2:3513
-512:2:3518
-513:2:3519
-514:2:3530
-515:2:3531
-516:2:3532
-517:2:3543
-518:2:3548
-519:2:3549
-520:2:3560
-521:2:3561
-522:2:3562
-523:2:3560
-524:2:3561
-525:2:3562
-526:2:3573
-527:2:3584
-528:2:3585
-529:0:4463
-530:2:3128
-531:0:4463
-532:2:3592
-533:2:3593
-534:2:3597
-535:2:3598
-536:2:3606
-537:2:3607
-538:2:3611
-539:2:3612
-540:2:3620
-541:2:3625
-542:2:3629
-543:2:3630
-544:2:3638
-545:2:3639
-546:2:3643
-547:2:3644
-548:2:3638
-549:2:3639
-550:2:3643
-551:2:3644
-552:2:3652
-553:2:3657
-554:2:3658
-555:2:3669
-556:2:3670
-557:2:3671
-558:2:3682
-559:2:3687
-560:2:3688
-561:2:3699
-562:2:3700
-563:2:3701
-564:2:3699
-565:2:3700
-566:2:3701
-567:2:3712
-568:0:4463
-569:2:3128
-570:0:4463
-571:2:3721
-572:2:3722
-573:2:3726
-574:2:3727
-575:2:3735
-576:2:3736
-577:2:3740
-578:2:3741
-579:2:3749
-580:2:3754
-581:2:3758
-582:2:3759
-583:2:3767
-584:2:3768
-585:2:3772
-586:2:3773
-587:2:3767
-588:2:3768
-589:2:3772
-590:2:3773
-591:2:3781
-592:2:3786
-593:2:3787
-594:2:3798
-595:2:3799
-596:2:3800
-597:2:3811
-598:2:3816
-599:2:3817
-600:2:3828
-601:2:3829
-602:2:3830
-603:2:3828
-604:2:3829
-605:2:3830
-606:2:3841
-607:2:3848
-608:0:4463
-609:2:3128
-610:0:4463
-611:2:3852
-612:2:3853
-613:2:3854
-614:2:3866
-615:2:3867
-616:2:3871
-617:2:3872
-618:2:3880
-619:2:3885
-620:2:3889
-621:2:3890
-622:2:3898
-623:2:3899
-624:2:3903
-625:2:3904
-626:2:3898
-627:2:3899
-628:2:3903
-629:2:3904
-630:2:3912
-631:2:3917
-632:2:3918
-633:2:3929
-634:2:3930
-635:2:3931
-636:2:3942
-637:2:3947
-638:2:3948
-639:2:3959
-640:2:3960
-641:2:3961
-642:2:3959
-643:2:3960
-644:2:3961
-645:2:3972
-646:2:3982
-647:2:3983
-648:0:4463
-649:2:3128
-650:0:4463
-651:2:3989
-652:0:4463
-653:2:4293
-654:2:4294
-655:2:4298
-656:2:4302
-657:2:4303
-658:2:4307
-659:2:4315
-660:2:4316
-661:2:4320
-662:2:4324
-663:2:4325
-664:2:4320
-665:2:4324
-666:2:4325
-667:2:4329
-668:2:4336
-669:2:4343
-670:2:4344
-671:2:4351
-672:2:4356
-673:2:4363
-674:2:4364
-675:2:4363
-676:2:4364
-677:2:4371
-678:2:4375
-679:0:4463
-680:2:3991
-681:2:4001
-682:0:4463
-683:2:3128
-684:0:4463
-685:2:3992
-686:2:3993
-687:0:4463
-688:2:3128
-689:0:4463
-690:2:3997
-691:0:4463
-692:2:4005
-693:0:4463
-694:2:3124
-695:0:4463
-696:2:3126
-697:0:4463
-698:2:3127
-699:0:4463
-700:2:3128
-701:0:4463
-702:2:3129
-703:2:3130
-704:2:3134
-705:2:3135
-706:2:3143
-707:2:3144
-708:2:3148
-709:2:3149
-710:2:3157
-711:2:3162
-712:2:3166
-713:2:3167
-714:2:3175
-715:2:3176
-716:2:3180
-717:2:3181
-718:2:3175
-719:2:3176
-720:2:3177
-721:2:3189
-722:2:3194
-723:2:3195
-724:2:3206
-725:2:3207
-726:2:3208
-727:2:3219
-728:2:3224
-729:2:3225
-730:2:3236
-731:2:3237
-732:2:3238
-733:2:3236
-734:2:3237
-735:2:3238
-736:2:3249
-737:2:3257
-738:0:4463
-739:2:3128
-740:0:4463
-741:2:3309
-742:2:3310
-743:2:3311
-744:0:4463
-745:2:3128
-746:0:4463
-747:2:3316
-748:0:4463
-749:1:2
-750:0:4463
-751:1:8
-752:0:4463
-753:1:9
-754:0:4463
-755:1:10
-756:0:4463
-757:1:11
-758:0:4463
-759:1:12
-760:1:13
-761:1:17
-762:1:18
-763:1:26
-764:1:27
-765:1:31
-766:1:32
-767:1:40
-768:1:45
-769:1:49
-770:1:50
-771:1:58
-772:1:59
-773:1:63
-774:1:64
-775:1:58
-776:1:59
-777:1:63
-778:1:64
-779:1:72
-780:1:77
-781:1:78
-782:1:89
-783:1:90
-784:1:91
-785:1:102
-786:1:107
-787:1:108
-788:1:119
-789:1:120
-790:1:121
-791:1:119
-792:1:120
-793:1:121
-794:1:132
-795:0:4463
-796:1:11
-797:0:4463
-798:1:141
-799:1:142
-800:0:4463
-801:1:11
-802:0:4463
-803:1:148
-804:1:149
-805:1:153
-806:1:154
-807:1:162
-808:1:163
-809:1:167
-810:1:168
-811:1:176
-812:1:181
-813:1:185
-814:1:186
-815:1:194
-816:1:195
-817:1:199
-818:1:200
-819:1:194
-820:1:195
-821:1:199
-822:1:200
-823:1:208
-824:1:213
-825:1:214
-826:1:225
-827:1:226
-828:1:227
-829:1:238
-830:1:243
-831:1:244
-832:1:255
-833:1:256
-834:1:257
-835:1:255
-836:1:256
-837:1:257
-838:1:268
-839:0:4463
-840:1:11
-841:0:4463
-842:1:277
-843:1:278
-844:1:282
-845:1:283
-846:1:291
-847:1:292
-848:1:296
-849:1:297
-850:1:305
-851:1:310
-852:1:314
-853:1:315
-854:1:323
-855:1:324
-856:1:328
-857:1:329
-858:1:323
-859:1:324
-860:1:328
-861:1:329
-862:1:337
-863:1:342
-864:1:343
-865:1:354
-866:1:355
-867:1:356
-868:1:367
-869:1:372
-870:1:373
-871:1:384
-872:1:385
-873:1:386
-874:1:384
-875:1:385
-876:1:386
-877:1:397
-878:1:404
-879:0:4463
-880:1:11
-881:0:4463
-882:1:540
-883:1:544
-884:1:545
-885:1:549
-886:1:550
-887:1:558
-888:1:566
-889:1:567
-890:1:571
-891:1:575
-892:1:576
-893:1:571
-894:1:575
-895:1:576
-896:1:580
-897:1:587
-898:1:594
-899:1:595
-900:1:602
-901:1:607
-902:1:614
-903:1:615
-904:1:614
-905:1:615
-906:1:622
-907:0:4463
-908:1:11
-909:0:4463
-910:1:632
-911:1:633
-912:1:637
-913:1:638
-914:1:646
-915:1:647
-916:1:651
-917:1:652
-918:1:660
-919:1:665
-920:1:669
-921:1:670
-922:1:678
-923:1:679
-924:1:683
-925:1:684
-926:1:678
-927:1:679
-928:1:683
-929:1:684
-930:1:692
-931:1:697
-932:1:698
-933:1:709
-934:1:710
-935:1:711
-936:1:722
-937:1:727
-938:1:728
-939:1:739
-940:1:740
-941:1:741
-942:1:739
-943:1:740
-944:1:741
-945:1:752
-946:0:4463
-947:1:11
-948:0:4463
-949:1:761
-950:1:764
-951:1:765
-952:0:4463
-953:1:11
-954:0:4463
-955:1:768
-956:1:769
-957:1:773
-958:1:774
-959:1:782
-960:1:783
-961:1:787
-962:1:788
-963:1:796
-964:1:801
-965:1:805
-966:1:806
-967:1:814
-968:1:815
-969:1:819
-970:1:820
-971:1:814
-972:1:815
-973:1:819
-974:1:820
-975:1:828
-976:1:833
-977:1:834
-978:1:845
-979:1:846
-980:1:847
-981:1:858
-982:1:863
-983:1:864
-984:1:875
-985:1:876
-986:1:877
-987:1:875
-988:1:876
-989:1:877
-990:1:888
-991:0:4463
-992:1:11
-993:0:4463
-994:1:1028
-995:1:1029
-996:1:1033
-997:1:1034
-998:1:1042
-999:1:1043
-1000:1:1047
-1001:1:1048
-1002:1:1056
-1003:1:1061
-1004:1:1065
-1005:1:1066
-1006:1:1074
-1007:1:1075
-1008:1:1079
-1009:1:1080
-1010:1:1074
-1011:1:1075
-1012:1:1079
-1013:1:1080
-1014:1:1088
-1015:1:1093
-1016:1:1094
-1017:1:1105
-1018:1:1106
-1019:1:1107
-1020:1:1118
-1021:1:1123
-1022:1:1124
-1023:1:1135
-1024:1:1136
-1025:1:1137
-1026:1:1135
-1027:1:1136
-1028:1:1137
-1029:1:1148
-1030:1:1155
-1031:1:1159
-1032:0:4463
-1033:1:11
-1034:0:4463
-1035:1:1160
-1036:1:1161
-1037:1:1165
-1038:1:1166
-1039:1:1174
-1040:1:1175
-1041:1:1176
-1042:1:1188
-1043:1:1193
-1044:1:1197
-1045:1:1198
-1046:1:1206
-1047:1:1207
-1048:1:1211
-1049:1:1212
-1050:1:1206
-1051:1:1207
-1052:1:1211
-1053:1:1212
-1054:1:1220
-1055:1:1225
-1056:1:1226
-1057:1:1237
-1058:1:1238
-1059:1:1239
-1060:1:1250
-1061:1:1255
-1062:1:1256
-1063:1:1267
-1064:1:1268
-1065:1:1269
-1066:1:1267
-1067:1:1268
-1068:1:1269
-1069:1:1280
-1070:0:4463
-1071:1:11
-1072:0:4463
-1073:1:1289
-1074:0:4463
-1075:1:3023
-1076:1:3030
-1077:1:3031
-1078:1:3038
-1079:1:3043
-1080:1:3050
-1081:1:3051
-1082:1:3050
-1083:1:3051
-1084:1:3058
-1085:1:3062
-1086:0:4463
-1087:2:4020
-1088:2:4021
-1089:2:4025
-1090:2:4029
-1091:2:4030
-1092:2:4034
-1093:2:4039
-1094:2:4047
-1095:2:4051
-1096:2:4052
-1097:2:4047
-1098:2:4048
-1099:2:4056
-1100:2:4063
-1101:2:4070
-1102:2:4071
-1103:2:4078
-1104:2:4083
-1105:2:4090
-1106:2:4091
-1107:2:4090
-1108:2:4091
-1109:2:4098
-1110:2:4102
-1111:0:4463
-1112:2:3318
-1113:2:4001
-1114:0:4463
-1115:2:3128
-1116:0:4463
-1117:2:3319
-1118:0:4463
-1119:2:3128
-1120:0:4463
-1121:2:3322
-1122:2:3323
-1123:2:3327
-1124:2:3328
-1125:2:3336
-1126:2:3337
-1127:2:3341
-1128:2:3342
-1129:2:3350
-1130:2:3355
-1131:2:3359
-1132:2:3360
-1133:2:3368
-1134:2:3369
-1135:2:3373
-1136:2:3374
-1137:2:3368
-1138:2:3369
-1139:2:3373
-1140:2:3374
-1141:2:3382
-1142:2:3387
-1143:2:3388
-1144:2:3399
-1145:2:3400
-1146:2:3401
-1147:2:3412
-1148:2:3417
-1149:2:3418
-1150:2:3429
-1151:2:3430
-1152:2:3431
-1153:2:3429
-1154:2:3430
-1155:2:3431
-1156:2:3442
-1157:2:3449
-1158:0:4463
-1159:2:3128
-1160:0:4463
-1161:2:3453
-1162:2:3454
-1163:2:3455
-1164:2:3467
-1165:2:3468
-1166:2:3472
-1167:2:3473
-1168:2:3481
-1169:2:3486
-1170:2:3490
-1171:2:3491
-1172:2:3499
-1173:2:3500
-1174:2:3504
-1175:2:3505
-1176:2:3499
-1177:2:3500
-1178:2:3504
-1179:2:3505
-1180:2:3513
-1181:2:3518
-1182:2:3519
-1183:2:3530
-1184:2:3531
-1185:2:3532
-1186:2:3543
-1187:2:3548
-1188:2:3549
-1189:2:3560
-1190:2:3561
-1191:2:3562
-1192:2:3560
-1193:2:3561
-1194:2:3562
-1195:2:3573
-1196:2:3582
-1197:0:4463
-1198:2:3128
-1199:0:4463
-1200:2:3588
-1201:0:4463
-1202:2:4111
-1203:2:4112
-1204:2:4116
-1205:2:4120
-1206:2:4121
-1207:2:4125
-1208:2:4133
-1209:2:4134
-1210:2:4138
-1211:2:4142
-1212:2:4143
-1213:2:4138
-1214:2:4142
-1215:2:4143
-1216:2:4147
-1217:2:4154
-1218:2:4161
-1219:2:4162
-1220:2:4169
-1221:2:4174
-1222:2:4181
-1223:2:4182
-1224:2:4181
-1225:2:4182
-1226:2:4189
-1227:2:4193
-1228:0:4463
-1229:2:3590
-1230:2:3591
-1231:0:4463
-1232:2:3128
-1233:0:4463
-1234:2:3592
-1235:2:3593
-1236:2:3597
-1237:2:3598
-1238:2:3606
-1239:2:3607
-1240:2:3611
-1241:2:3612
-1242:2:3620
-1243:2:3625
-1244:2:3629
-1245:2:3630
-1246:2:3638
-1247:2:3639
-1248:2:3643
-1249:2:3644
-1250:2:3638
-1251:2:3639
-1252:2:3643
-1253:2:3644
-1254:2:3652
-1255:2:3657
-1256:2:3658
-1257:2:3669
-1258:2:3670
-1259:2:3671
-1260:2:3682
-1261:2:3687
-1262:2:3688
-1263:2:3699
-1264:2:3700
-1265:2:3701
-1266:2:3699
-1267:2:3700
-1268:2:3701
-1269:2:3712
-1270:0:4463
-1271:2:3128
-1272:0:4463
-1273:2:3453
-1274:2:3454
-1275:2:3458
-1276:2:3459
-1277:2:3467
-1278:2:3468
-1279:2:3472
-1280:2:3473
-1281:2:3481
-1282:2:3486
-1283:2:3490
-1284:2:3491
-1285:2:3499
-1286:2:3500
-1287:2:3504
-1288:2:3505
-1289:2:3499
-1290:2:3500
-1291:2:3504
-1292:2:3505
-1293:2:3513
-1294:2:3518
-1295:2:3519
-1296:2:3530
-1297:2:3531
-1298:2:3532
-1299:2:3543
-1300:2:3548
-1301:2:3549
-1302:2:3560
-1303:2:3561
-1304:2:3562
-1305:2:3560
-1306:2:3561
-1307:2:3562
-1308:2:3573
-1309:2:3582
-1310:0:4463
-1311:2:3128
-1312:0:4463
-1313:2:3588
-1314:0:4463
-1315:2:4111
-1316:2:4112
-1317:2:4116
-1318:2:4120
-1319:2:4121
-1320:2:4125
-1321:2:4133
-1322:2:4134
-1323:2:4138
-1324:2:4142
-1325:2:4143
-1326:2:4138
-1327:2:4142
-1328:2:4143
-1329:2:4147
-1330:2:4154
-1331:2:4161
-1332:2:4162
-1333:2:4169
-1334:2:4174
-1335:2:4181
-1336:2:4182
-1337:2:4181
-1338:2:4182
-1339:2:4189
-1340:2:4193
-1341:0:4463
-1342:2:3590
-1343:2:3591
-1344:0:4463
-1345:2:3128
-1346:0:4463
-1347:2:3453
-1348:2:3454
-1349:2:3458
-1350:2:3459
-1351:2:3467
-1352:2:3468
-1353:2:3472
-1354:2:3473
-1355:2:3481
-1356:2:3486
-1357:2:3490
-1358:2:3491
-1359:2:3499
-1360:2:3500
-1361:2:3504
-1362:2:3505
-1363:2:3499
-1364:2:3500
-1365:2:3504
-1366:2:3505
-1367:2:3513
-1368:2:3518
-1369:2:3519
-1370:2:3530
-1371:2:3531
-1372:2:3532
-1373:2:3543
-1374:2:3548
-1375:2:3549
-1376:2:3560
-1377:2:3561
-1378:2:3562
-1379:2:3560
-1380:2:3561
-1381:2:3562
-1382:2:3573
-1383:2:3582
-1384:0:4463
-1385:2:3128
-1386:0:4463
-1387:2:3588
-1388:0:4463
-1389:2:4111
-1390:2:4112
-1391:2:4116
-1392:2:4120
-1393:2:4121
-1394:2:4125
-1395:2:4133
-1396:2:4134
-1397:2:4138
-1398:2:4142
-1399:2:4143
-1400:2:4138
-1401:2:4142
-1402:2:4143
-1403:2:4147
-1404:2:4154
-1405:2:4161
-1406:2:4162
-1407:2:4169
-1408:2:4174
-1409:2:4181
-1410:2:4182
-1411:2:4181
-1412:2:4182
-1413:2:4189
-1414:2:4193
-1415:0:4463
-1416:1:1291
-1417:1:1292
-1418:0:4461
-1419:1:11
-1420:0:4467
-1421:1:2299
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.define b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.log b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 90b0d78..0000000
+++ /dev/null
@@ -1,632 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    5164 States=    1e+06 Transitions= 4.75e+08 Memory=   550.432        t=    582 R=   2e+03
-Depth=    5746 States=    2e+06 Transitions= 1.02e+09 Memory=   634.318        t= 1.27e+03 R=   2e+03
-pan: claim violated! (at depth 1144)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 5746, errors: 1
-  2322493 states, stored
-1.1944827e+09 states, matched
-1.1968052e+09 transitions (= stored+matched)
-6.6651798e+09 atomic steps
-hash conflicts: 7.6855101e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
-  256.929      equivalent memory usage for states (stored*(State-vector + overhead))
-  195.871      actual memory usage for states (compression: 76.24%)
-               state-vector as stored = 60 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  661.467      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 82, "(1)"
-       line 438, "pan.___", state 112, "(1)"
-       line 442, "pan.___", state 125, "(1)"
-       line 597, "pan.___", state 146, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 185, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 199, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 218, "(1)"
-       line 438, "pan.___", state 248, "(1)"
-       line 442, "pan.___", state 261, "(1)"
-       line 411, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 314, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 328, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 347, "(1)"
-       line 438, "pan.___", state 377, "(1)"
-       line 442, "pan.___", state 390, "(1)"
-       line 411, "pan.___", state 413, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 415, "(1)"
-       line 411, "pan.___", state 416, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 416, "else"
-       line 411, "pan.___", state 419, "(1)"
-       line 415, "pan.___", state 427, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 429, "(1)"
-       line 415, "pan.___", state 430, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 430, "else"
-       line 415, "pan.___", state 433, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 413, "pan.___", state 439, "((i<1))"
-       line 413, "pan.___", state 439, "((i>=1))"
-       line 420, "pan.___", state 445, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 447, "(1)"
-       line 420, "pan.___", state 448, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 448, "else"
-       line 420, "pan.___", state 451, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 424, "pan.___", state 459, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 461, "(1)"
-       line 424, "pan.___", state 462, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 462, "else"
-       line 424, "pan.___", state 465, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 422, "pan.___", state 471, "((i<2))"
-       line 422, "pan.___", state 471, "((i>=2))"
-       line 429, "pan.___", state 478, "(1)"
-       line 429, "pan.___", state 479, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 479, "else"
-       line 429, "pan.___", state 482, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 433, "pan.___", state 491, "(1)"
-       line 433, "pan.___", state 492, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 492, "else"
-       line 433, "pan.___", state 495, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 431, "pan.___", state 501, "((i<1))"
-       line 431, "pan.___", state 501, "((i>=1))"
-       line 438, "pan.___", state 508, "(1)"
-       line 438, "pan.___", state 509, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 509, "else"
-       line 438, "pan.___", state 512, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 442, "pan.___", state 521, "(1)"
-       line 442, "pan.___", state 522, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 522, "else"
-       line 442, "pan.___", state 525, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 440, "pan.___", state 531, "((i<2))"
-       line 440, "pan.___", state 531, "((i>=2))"
-       line 450, "pan.___", state 535, "(1)"
-       line 450, "pan.___", state 535, "(1)"
-       line 597, "pan.___", state 538, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 539, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 540, "(1)"
-       line 272, "pan.___", state 544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 555, "(1)"
-       line 280, "pan.___", state 566, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 575, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 591, "(1)"
-       line 253, "pan.___", state 599, "(1)"
-       line 257, "pan.___", state 611, "(1)"
-       line 261, "pan.___", state 619, "(1)"
-       line 411, "pan.___", state 637, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 651, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 669, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 683, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 702, "(1)"
-       line 433, "pan.___", state 715, "(1)"
-       line 438, "pan.___", state 732, "(1)"
-       line 442, "pan.___", state 745, "(1)"
-       line 411, "pan.___", state 773, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 805, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 819, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 838, "(1)"
-       line 438, "pan.___", state 868, "(1)"
-       line 442, "pan.___", state 881, "(1)"
-       line 411, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 904, "(1)"
-       line 411, "pan.___", state 905, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 905, "else"
-       line 411, "pan.___", state 908, "(1)"
-       line 415, "pan.___", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 918, "(1)"
-       line 415, "pan.___", state 919, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 919, "else"
-       line 415, "pan.___", state 922, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 413, "pan.___", state 928, "((i<1))"
-       line 413, "pan.___", state 928, "((i>=1))"
-       line 420, "pan.___", state 934, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 936, "(1)"
-       line 420, "pan.___", state 937, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 937, "else"
-       line 420, "pan.___", state 940, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 424, "pan.___", state 948, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 950, "(1)"
-       line 424, "pan.___", state 951, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 951, "else"
-       line 424, "pan.___", state 954, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 422, "pan.___", state 960, "((i<2))"
-       line 422, "pan.___", state 960, "((i>=2))"
-       line 429, "pan.___", state 967, "(1)"
-       line 429, "pan.___", state 968, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 968, "else"
-       line 429, "pan.___", state 971, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 433, "pan.___", state 980, "(1)"
-       line 433, "pan.___", state 981, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 981, "else"
-       line 433, "pan.___", state 984, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 431, "pan.___", state 990, "((i<1))"
-       line 431, "pan.___", state 990, "((i>=1))"
-       line 438, "pan.___", state 997, "(1)"
-       line 438, "pan.___", state 998, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 998, "else"
-       line 438, "pan.___", state 1001, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 442, "pan.___", state 1010, "(1)"
-       line 442, "pan.___", state 1011, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 1011, "else"
-       line 442, "pan.___", state 1014, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 440, "pan.___", state 1020, "((i<2))"
-       line 440, "pan.___", state 1020, "((i>=2))"
-       line 450, "pan.___", state 1024, "(1)"
-       line 450, "pan.___", state 1024, "(1)"
-       line 605, "pan.___", state 1028, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 1033, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1047, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1065, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1079, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1098, "(1)"
-       line 433, "pan.___", state 1111, "(1)"
-       line 438, "pan.___", state 1128, "(1)"
-       line 442, "pan.___", state 1141, "(1)"
-       line 411, "pan.___", state 1165, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1197, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1230, "(1)"
-       line 438, "pan.___", state 1260, "(1)"
-       line 442, "pan.___", state 1273, "(1)"
-       line 411, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1363, "(1)"
-       line 438, "pan.___", state 1393, "(1)"
-       line 442, "pan.___", state 1406, "(1)"
-       line 411, "pan.___", state 1427, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1492, "(1)"
-       line 438, "pan.___", state 1522, "(1)"
-       line 442, "pan.___", state 1535, "(1)"
-       line 272, "pan.___", state 1558, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1589, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1605, "(1)"
-       line 253, "pan.___", state 1613, "(1)"
-       line 257, "pan.___", state 1625, "(1)"
-       line 261, "pan.___", state 1633, "(1)"
-       line 411, "pan.___", state 1651, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1716, "(1)"
-       line 433, "pan.___", state 1729, "(1)"
-       line 438, "pan.___", state 1746, "(1)"
-       line 442, "pan.___", state 1759, "(1)"
-       line 411, "pan.___", state 1780, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1794, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1812, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1826, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1845, "(1)"
-       line 433, "pan.___", state 1858, "(1)"
-       line 438, "pan.___", state 1875, "(1)"
-       line 442, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1912, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1944, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1958, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1977, "(1)"
-       line 438, "pan.___", state 2007, "(1)"
-       line 442, "pan.___", state 2020, "(1)"
-       line 644, "pan.___", state 2041, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 2048, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2080, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2094, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2113, "(1)"
-       line 438, "pan.___", state 2143, "(1)"
-       line 442, "pan.___", state 2156, "(1)"
-       line 411, "pan.___", state 2177, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2209, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2242, "(1)"
-       line 438, "pan.___", state 2272, "(1)"
-       line 442, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2308, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2310, "(1)"
-       line 411, "pan.___", state 2311, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2311, "else"
-       line 411, "pan.___", state 2314, "(1)"
-       line 415, "pan.___", state 2322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2324, "(1)"
-       line 415, "pan.___", state 2325, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2325, "else"
-       line 415, "pan.___", state 2328, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 413, "pan.___", state 2334, "((i<1))"
-       line 413, "pan.___", state 2334, "((i>=1))"
-       line 420, "pan.___", state 2340, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2342, "(1)"
-       line 420, "pan.___", state 2343, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2343, "else"
-       line 420, "pan.___", state 2346, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 424, "pan.___", state 2354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2356, "(1)"
-       line 424, "pan.___", state 2357, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2357, "else"
-       line 424, "pan.___", state 2360, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 422, "pan.___", state 2366, "((i<2))"
-       line 422, "pan.___", state 2366, "((i>=2))"
-       line 429, "pan.___", state 2373, "(1)"
-       line 429, "pan.___", state 2374, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 2374, "else"
-       line 429, "pan.___", state 2377, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 433, "pan.___", state 2386, "(1)"
-       line 433, "pan.___", state 2387, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 2387, "else"
-       line 433, "pan.___", state 2390, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 431, "pan.___", state 2396, "((i<1))"
-       line 431, "pan.___", state 2396, "((i>=1))"
-       line 438, "pan.___", state 2403, "(1)"
-       line 438, "pan.___", state 2404, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 2404, "else"
-       line 438, "pan.___", state 2407, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 442, "pan.___", state 2416, "(1)"
-       line 442, "pan.___", state 2417, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 2417, "else"
-       line 442, "pan.___", state 2420, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 440, "pan.___", state 2426, "((i<2))"
-       line 440, "pan.___", state 2426, "((i>=2))"
-       line 450, "pan.___", state 2430, "(1)"
-       line 450, "pan.___", state 2430, "(1)"
-       line 644, "pan.___", state 2433, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2434, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2435, "(1)"
-       line 272, "pan.___", state 2439, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2461, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2470, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2486, "(1)"
-       line 253, "pan.___", state 2494, "(1)"
-       line 257, "pan.___", state 2506, "(1)"
-       line 261, "pan.___", state 2514, "(1)"
-       line 411, "pan.___", state 2532, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2546, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2564, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2578, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2597, "(1)"
-       line 433, "pan.___", state 2610, "(1)"
-       line 438, "pan.___", state 2627, "(1)"
-       line 442, "pan.___", state 2640, "(1)"
-       line 272, "pan.___", state 2664, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2673, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2695, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2711, "(1)"
-       line 253, "pan.___", state 2719, "(1)"
-       line 257, "pan.___", state 2731, "(1)"
-       line 261, "pan.___", state 2739, "(1)"
-       line 411, "pan.___", state 2757, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2822, "(1)"
-       line 433, "pan.___", state 2835, "(1)"
-       line 438, "pan.___", state 2852, "(1)"
-       line 442, "pan.___", state 2865, "(1)"
-       line 411, "pan.___", state 2886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2918, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2932, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2951, "(1)"
-       line 433, "pan.___", state 2964, "(1)"
-       line 438, "pan.___", state 2981, "(1)"
-       line 442, "pan.___", state 2994, "(1)"
-       line 249, "pan.___", state 3027, "(1)"
-       line 257, "pan.___", state 3047, "(1)"
-       line 261, "pan.___", state 3055, "(1)"
-       line 249, "pan.___", state 3070, "(1)"
-       line 253, "pan.___", state 3078, "(1)"
-       line 257, "pan.___", state 3090, "(1)"
-       line 261, "pan.___", state 3098, "(1)"
-       line 898, "pan.___", state 3115, "-end-"
-       (283 of 3115 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 22, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 36, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 54, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 87, "(1)"
-       line 433, "pan.___", state 100, "(1)"
-       line 438, "pan.___", state 117, "(1)"
-       line 272, "pan.___", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 162, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 175, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 215, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 229, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 247, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 261, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 280, "(1)"
-       line 433, "pan.___", state 293, "(1)"
-       line 438, "pan.___", state 310, "(1)"
-       line 442, "pan.___", state 323, "(1)"
-       line 415, "pan.___", state 360, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 378, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 392, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 424, "(1)"
-       line 438, "pan.___", state 441, "(1)"
-       line 442, "pan.___", state 454, "(1)"
-       line 411, "pan.___", state 484, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 498, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 516, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 530, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 549, "(1)"
-       line 433, "pan.___", state 562, "(1)"
-       line 438, "pan.___", state 579, "(1)"
-       line 442, "pan.___", state 592, "(1)"
-       line 411, "pan.___", state 613, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 615, "(1)"
-       line 411, "pan.___", state 616, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 616, "else"
-       line 411, "pan.___", state 619, "(1)"
-       line 415, "pan.___", state 627, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 629, "(1)"
-       line 415, "pan.___", state 630, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 630, "else"
-       line 415, "pan.___", state 633, "(1)"
-       line 415, "pan.___", state 634, "(1)"
-       line 415, "pan.___", state 634, "(1)"
-       line 413, "pan.___", state 639, "((i<1))"
-       line 413, "pan.___", state 639, "((i>=1))"
-       line 420, "pan.___", state 645, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 647, "(1)"
-       line 420, "pan.___", state 648, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 648, "else"
-       line 420, "pan.___", state 651, "(1)"
-       line 420, "pan.___", state 652, "(1)"
-       line 420, "pan.___", state 652, "(1)"
-       line 424, "pan.___", state 659, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 661, "(1)"
-       line 424, "pan.___", state 662, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 662, "else"
-       line 424, "pan.___", state 665, "(1)"
-       line 424, "pan.___", state 666, "(1)"
-       line 424, "pan.___", state 666, "(1)"
-       line 422, "pan.___", state 671, "((i<2))"
-       line 422, "pan.___", state 671, "((i>=2))"
-       line 429, "pan.___", state 678, "(1)"
-       line 429, "pan.___", state 679, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 679, "else"
-       line 429, "pan.___", state 682, "(1)"
-       line 429, "pan.___", state 683, "(1)"
-       line 429, "pan.___", state 683, "(1)"
-       line 433, "pan.___", state 691, "(1)"
-       line 433, "pan.___", state 692, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 692, "else"
-       line 433, "pan.___", state 695, "(1)"
-       line 433, "pan.___", state 696, "(1)"
-       line 433, "pan.___", state 696, "(1)"
-       line 431, "pan.___", state 701, "((i<1))"
-       line 431, "pan.___", state 701, "((i>=1))"
-       line 438, "pan.___", state 708, "(1)"
-       line 438, "pan.___", state 709, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 709, "else"
-       line 438, "pan.___", state 712, "(1)"
-       line 438, "pan.___", state 713, "(1)"
-       line 438, "pan.___", state 713, "(1)"
-       line 442, "pan.___", state 721, "(1)"
-       line 442, "pan.___", state 722, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 722, "else"
-       line 442, "pan.___", state 725, "(1)"
-       line 442, "pan.___", state 726, "(1)"
-       line 442, "pan.___", state 726, "(1)"
-       line 440, "pan.___", state 731, "((i<2))"
-       line 440, "pan.___", state 731, "((i>=2))"
-       line 450, "pan.___", state 735, "(1)"
-       line 450, "pan.___", state 735, "(1)"
-       line 1117, "pan.___", state 739, "_proc_urcu_writer = (_proc_urcu_writer|(1<<10))"
-       line 411, "pan.___", state 744, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 746, "(1)"
-       line 411, "pan.___", state 747, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 747, "else"
-       line 411, "pan.___", state 750, "(1)"
-       line 415, "pan.___", state 758, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 760, "(1)"
-       line 415, "pan.___", state 761, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 761, "else"
-       line 415, "pan.___", state 764, "(1)"
-       line 415, "pan.___", state 765, "(1)"
-       line 415, "pan.___", state 765, "(1)"
-       line 413, "pan.___", state 770, "((i<1))"
-       line 413, "pan.___", state 770, "((i>=1))"
-       line 420, "pan.___", state 776, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 778, "(1)"
-       line 420, "pan.___", state 779, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 779, "else"
-       line 420, "pan.___", state 782, "(1)"
-       line 420, "pan.___", state 783, "(1)"
-       line 420, "pan.___", state 783, "(1)"
-       line 424, "pan.___", state 790, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 792, "(1)"
-       line 424, "pan.___", state 793, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 793, "else"
-       line 424, "pan.___", state 796, "(1)"
-       line 424, "pan.___", state 797, "(1)"
-       line 424, "pan.___", state 797, "(1)"
-       line 422, "pan.___", state 802, "((i<2))"
-       line 422, "pan.___", state 802, "((i>=2))"
-       line 429, "pan.___", state 809, "(1)"
-       line 429, "pan.___", state 810, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 810, "else"
-       line 429, "pan.___", state 813, "(1)"
-       line 429, "pan.___", state 814, "(1)"
-       line 429, "pan.___", state 814, "(1)"
-       line 433, "pan.___", state 822, "(1)"
-       line 433, "pan.___", state 823, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 823, "else"
-       line 433, "pan.___", state 826, "(1)"
-       line 433, "pan.___", state 827, "(1)"
-       line 433, "pan.___", state 827, "(1)"
-       line 431, "pan.___", state 832, "((i<1))"
-       line 431, "pan.___", state 832, "((i>=1))"
-       line 438, "pan.___", state 839, "(1)"
-       line 438, "pan.___", state 840, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 840, "else"
-       line 438, "pan.___", state 843, "(1)"
-       line 438, "pan.___", state 844, "(1)"
-       line 438, "pan.___", state 844, "(1)"
-       line 442, "pan.___", state 852, "(1)"
-       line 442, "pan.___", state 853, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 853, "else"
-       line 442, "pan.___", state 856, "(1)"
-       line 442, "pan.___", state 857, "(1)"
-       line 442, "pan.___", state 857, "(1)"
-       line 440, "pan.___", state 862, "((i<2))"
-       line 440, "pan.___", state 862, "((i>=2))"
-       line 450, "pan.___", state 866, "(1)"
-       line 450, "pan.___", state 866, "(1)"
-       line 1133, "pan.___", state 871, "_proc_urcu_writer = (_proc_urcu_writer|(1<<11))"
-       line 1128, "pan.___", state 872, "(((tmp2&((1<<7)-1))&&((tmp2^0)&(1<<7))))"
-       line 1128, "pan.___", state 872, "else"
-       line 1153, "pan.___", state 876, "_proc_urcu_writer = (_proc_urcu_writer&~(((1<<12)|(1<<11))))"
-       line 272, "pan.___", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 931, "(1)"
-       line 284, "pan.___", state 938, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 954, "(1)"
-       line 253, "pan.___", state 962, "(1)"
-       line 257, "pan.___", state 974, "(1)"
-       line 261, "pan.___", state 982, "(1)"
-       line 276, "pan.___", state 1007, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1020, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1029, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1045, "(1)"
-       line 253, "pan.___", state 1053, "(1)"
-       line 257, "pan.___", state 1065, "(1)"
-       line 261, "pan.___", state 1073, "(1)"
-       line 272, "pan.___", state 1089, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1091, "(1)"
-       line 276, "pan.___", state 1098, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1100, "(1)"
-       line 276, "pan.___", state 1101, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1101, "else"
-       line 274, "pan.___", state 1106, "((i<1))"
-       line 274, "pan.___", state 1106, "((i>=1))"
-       line 280, "pan.___", state 1111, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1113, "(1)"
-       line 280, "pan.___", state 1114, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1114, "else"
-       line 284, "pan.___", state 1120, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1122, "(1)"
-       line 284, "pan.___", state 1123, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1123, "else"
-       line 282, "pan.___", state 1128, "((i<2))"
-       line 282, "pan.___", state 1128, "((i>=2))"
-       line 249, "pan.___", state 1136, "(1)"
-       line 253, "pan.___", state 1144, "(1)"
-       line 253, "pan.___", state 1145, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1145, "else"
-       line 251, "pan.___", state 1150, "((i<1))"
-       line 251, "pan.___", state 1150, "((i>=1))"
-       line 257, "pan.___", state 1156, "(1)"
-       line 257, "pan.___", state 1157, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1157, "else"
-       line 261, "pan.___", state 1164, "(1)"
-       line 261, "pan.___", state 1165, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1165, "else"
-       line 266, "pan.___", state 1174, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1174, "else"
-       line 299, "pan.___", state 1176, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1176, "else"
-       line 276, "pan.___", state 1189, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1202, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1227, "(1)"
-       line 253, "pan.___", state 1235, "(1)"
-       line 257, "pan.___", state 1247, "(1)"
-       line 261, "pan.___", state 1255, "(1)"
-       line 1237, "pan.___", state 1270, "-end-"
-       (161 of 1270 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.49e+03 seconds
-pan: rate 1556.4638 states/second
-pan: avg transition delay 1.2468e-06 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 38db318..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define SINGLE_FLIP
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index fe03394..0000000
+++ /dev/null
@@ -1,1147 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4465
-2:3:4385
-3:3:4388
-4:3:4388
-5:3:4391
-6:3:4399
-7:3:4399
-8:3:4402
-9:3:4408
-10:3:4412
-11:3:4412
-12:3:4415
-13:3:4425
-14:3:4433
-15:3:4433
-16:3:4436
-17:3:4442
-18:3:4446
-19:3:4446
-20:3:4449
-21:3:4455
-22:3:4459
-23:3:4460
-24:0:4465
-25:3:4462
-26:0:4465
-27:2:3117
-28:0:4465
-29:2:3123
-30:0:4465
-31:2:3124
-32:0:4465
-33:2:3126
-34:0:4465
-35:2:3127
-36:0:4465
-37:2:3128
-38:0:4465
-39:2:3129
-40:0:4465
-41:2:3130
-42:0:4465
-43:2:3131
-44:0:4465
-45:2:3132
-46:2:3133
-47:2:3137
-48:2:3138
-49:2:3146
-50:2:3147
-51:2:3151
-52:2:3152
-53:2:3160
-54:2:3165
-55:2:3169
-56:2:3170
-57:2:3178
-58:2:3179
-59:2:3183
-60:2:3184
-61:2:3178
-62:2:3179
-63:2:3183
-64:2:3184
-65:2:3192
-66:2:3197
-67:2:3198
-68:2:3209
-69:2:3210
-70:2:3211
-71:2:3222
-72:2:3227
-73:2:3228
-74:2:3239
-75:2:3240
-76:2:3241
-77:2:3239
-78:2:3240
-79:2:3241
-80:2:3252
-81:2:3260
-82:0:4465
-83:2:3131
-84:0:4465
-85:2:3264
-86:2:3268
-87:2:3269
-88:2:3273
-89:2:3277
-90:2:3278
-91:2:3282
-92:2:3290
-93:2:3291
-94:2:3295
-95:2:3299
-96:2:3300
-97:2:3295
-98:2:3296
-99:2:3304
-100:0:4465
-101:2:3131
-102:0:4465
-103:2:3312
-104:2:3313
-105:2:3314
-106:0:4465
-107:2:3131
-108:0:4465
-109:2:3319
-110:0:4465
-111:2:4022
-112:2:4023
-113:2:4027
-114:2:4031
-115:2:4032
-116:2:4036
-117:2:4041
-118:2:4049
-119:2:4053
-120:2:4054
-121:2:4049
-122:2:4053
-123:2:4054
-124:2:4058
-125:2:4065
-126:2:4072
-127:2:4073
-128:2:4080
-129:2:4085
-130:2:4092
-131:2:4093
-132:2:4092
-133:2:4093
-134:2:4100
-135:2:4104
-136:0:4465
-137:2:3321
-138:2:4003
-139:0:4465
-140:2:3131
-141:0:4465
-142:2:3322
-143:0:4465
-144:2:3131
-145:0:4465
-146:2:3325
-147:2:3326
-148:2:3330
-149:2:3331
-150:2:3339
-151:2:3340
-152:2:3344
-153:2:3345
-154:2:3353
-155:2:3358
-156:2:3362
-157:2:3363
-158:2:3371
-159:2:3372
-160:2:3376
-161:2:3377
-162:2:3371
-163:2:3372
-164:2:3376
-165:2:3377
-166:2:3385
-167:2:3390
-168:2:3391
-169:2:3402
-170:2:3403
-171:2:3404
-172:2:3415
-173:2:3420
-174:2:3421
-175:2:3432
-176:2:3433
-177:2:3434
-178:2:3432
-179:2:3433
-180:2:3434
-181:2:3445
-182:2:3452
-183:0:4465
-184:2:3131
-185:0:4465
-186:2:3456
-187:2:3457
-188:2:3458
-189:2:3470
-190:2:3471
-191:2:3475
-192:2:3476
-193:2:3484
-194:2:3489
-195:2:3493
-196:2:3494
-197:2:3502
-198:2:3503
-199:2:3507
-200:2:3508
-201:2:3502
-202:2:3503
-203:2:3507
-204:2:3508
-205:2:3516
-206:2:3521
-207:2:3522
-208:2:3533
-209:2:3534
-210:2:3535
-211:2:3546
-212:2:3551
-213:2:3552
-214:2:3563
-215:2:3564
-216:2:3565
-217:2:3563
-218:2:3564
-219:2:3565
-220:2:3576
-221:2:3586
-222:2:3587
-223:0:4465
-224:2:3131
-225:0:4465
-226:2:3991
-227:0:4465
-228:2:4295
-229:2:4296
-230:2:4300
-231:2:4304
-232:2:4305
-233:2:4309
-234:2:4317
-235:2:4318
-236:2:4322
-237:2:4326
-238:2:4327
-239:2:4322
-240:2:4326
-241:2:4327
-242:2:4331
-243:2:4338
-244:2:4345
-245:2:4346
-246:2:4353
-247:2:4358
-248:2:4365
-249:2:4366
-250:2:4365
-251:2:4366
-252:2:4373
-253:2:4377
-254:0:4465
-255:2:3993
-256:2:4003
-257:0:4465
-258:2:3131
-259:0:4465
-260:2:3994
-261:2:3995
-262:0:4465
-263:2:3131
-264:0:4465
-265:2:3999
-266:0:4465
-267:2:4007
-268:0:4465
-269:2:3124
-270:0:4465
-271:2:3126
-272:0:4465
-273:2:3127
-274:0:4465
-275:2:3128
-276:0:4465
-277:2:3129
-278:0:4465
-279:2:3130
-280:0:4465
-281:2:3131
-282:0:4465
-283:2:3132
-284:2:3133
-285:2:3137
-286:2:3138
-287:2:3146
-288:2:3147
-289:2:3151
-290:2:3152
-291:2:3160
-292:2:3165
-293:2:3169
-294:2:3170
-295:2:3178
-296:2:3179
-297:2:3180
-298:2:3178
-299:2:3179
-300:2:3183
-301:2:3184
-302:2:3192
-303:2:3197
-304:2:3198
-305:2:3209
-306:2:3210
-307:2:3211
-308:2:3222
-309:2:3227
-310:2:3228
-311:2:3239
-312:2:3240
-313:2:3241
-314:2:3239
-315:2:3240
-316:2:3241
-317:2:3252
-318:2:3260
-319:0:4465
-320:2:3131
-321:0:4465
-322:2:3264
-323:2:3268
-324:2:3269
-325:2:3273
-326:2:3277
-327:2:3278
-328:2:3282
-329:2:3290
-330:2:3291
-331:2:3295
-332:2:3296
-333:2:3295
-334:2:3299
-335:2:3300
-336:2:3304
-337:0:4465
-338:2:3131
-339:0:4465
-340:2:3312
-341:2:3313
-342:2:3314
-343:0:4465
-344:2:3131
-345:0:4465
-346:2:3319
-347:0:4465
-348:1:2
-349:0:4465
-350:1:8
-351:0:4465
-352:1:9
-353:0:4465
-354:1:10
-355:0:4465
-356:1:11
-357:0:4465
-358:1:12
-359:1:13
-360:1:17
-361:1:18
-362:1:26
-363:1:27
-364:1:31
-365:1:32
-366:1:40
-367:1:45
-368:1:49
-369:1:50
-370:1:58
-371:1:59
-372:1:63
-373:1:64
-374:1:58
-375:1:59
-376:1:63
-377:1:64
-378:1:72
-379:1:84
-380:1:85
-381:1:89
-382:1:90
-383:1:91
-384:1:102
-385:1:107
-386:1:108
-387:1:119
-388:1:120
-389:1:121
-390:1:119
-391:1:120
-392:1:121
-393:1:132
-394:0:4465
-395:1:11
-396:0:4465
-397:1:141
-398:1:142
-399:0:4465
-400:1:11
-401:0:4465
-402:1:148
-403:1:149
-404:1:153
-405:1:154
-406:1:162
-407:1:163
-408:1:167
-409:1:168
-410:1:176
-411:1:181
-412:1:185
-413:1:186
-414:1:194
-415:1:195
-416:1:199
-417:1:200
-418:1:194
-419:1:195
-420:1:199
-421:1:200
-422:1:208
-423:1:220
-424:1:221
-425:1:225
-426:1:226
-427:1:227
-428:1:238
-429:1:243
-430:1:244
-431:1:255
-432:1:256
-433:1:257
-434:1:255
-435:1:256
-436:1:257
-437:1:268
-438:0:4465
-439:1:11
-440:0:4465
-441:1:277
-442:1:278
-443:1:282
-444:1:283
-445:1:291
-446:1:292
-447:1:296
-448:1:297
-449:1:305
-450:1:310
-451:1:314
-452:1:315
-453:1:323
-454:1:324
-455:1:328
-456:1:329
-457:1:323
-458:1:324
-459:1:328
-460:1:329
-461:1:337
-462:1:342
-463:1:343
-464:1:354
-465:1:355
-466:1:356
-467:1:367
-468:1:372
-469:1:373
-470:1:384
-471:1:385
-472:1:386
-473:1:384
-474:1:385
-475:1:386
-476:1:397
-477:1:404
-478:0:4465
-479:1:11
-480:0:4465
-481:1:540
-482:1:544
-483:1:545
-484:1:549
-485:1:550
-486:1:558
-487:1:566
-488:1:567
-489:1:571
-490:1:575
-491:1:576
-492:1:571
-493:1:575
-494:1:576
-495:1:580
-496:1:587
-497:1:594
-498:1:595
-499:1:602
-500:1:607
-501:1:614
-502:1:615
-503:1:614
-504:1:615
-505:1:622
-506:0:4465
-507:1:11
-508:0:4465
-509:2:4022
-510:2:4023
-511:2:4027
-512:2:4031
-513:2:4032
-514:2:4036
-515:2:4041
-516:2:4049
-517:2:4053
-518:2:4054
-519:2:4049
-520:2:4053
-521:2:4054
-522:2:4058
-523:2:4065
-524:2:4072
-525:2:4073
-526:2:4080
-527:2:4085
-528:2:4092
-529:2:4093
-530:2:4092
-531:2:4093
-532:2:4100
-533:2:4104
-534:0:4465
-535:2:3321
-536:2:4003
-537:0:4465
-538:2:3131
-539:0:4465
-540:2:3322
-541:0:4465
-542:2:3131
-543:0:4465
-544:2:3325
-545:2:3326
-546:2:3330
-547:2:3331
-548:2:3339
-549:2:3340
-550:2:3344
-551:2:3345
-552:2:3353
-553:2:3358
-554:2:3362
-555:2:3363
-556:2:3371
-557:2:3372
-558:2:3376
-559:2:3377
-560:2:3371
-561:2:3372
-562:2:3376
-563:2:3377
-564:2:3385
-565:2:3390
-566:2:3391
-567:2:3402
-568:2:3403
-569:2:3404
-570:2:3415
-571:2:3420
-572:2:3421
-573:2:3432
-574:2:3433
-575:2:3434
-576:2:3432
-577:2:3433
-578:2:3434
-579:2:3445
-580:2:3452
-581:0:4465
-582:2:3131
-583:0:4465
-584:2:3456
-585:2:3457
-586:2:3458
-587:2:3470
-588:2:3471
-589:2:3475
-590:2:3476
-591:2:3484
-592:2:3489
-593:2:3493
-594:2:3494
-595:2:3502
-596:2:3503
-597:2:3507
-598:2:3508
-599:2:3502
-600:2:3503
-601:2:3507
-602:2:3508
-603:2:3516
-604:2:3521
-605:2:3522
-606:2:3533
-607:2:3534
-608:2:3535
-609:2:3546
-610:2:3551
-611:2:3552
-612:2:3563
-613:2:3564
-614:2:3565
-615:2:3563
-616:2:3564
-617:2:3565
-618:2:3576
-619:2:3586
-620:2:3587
-621:0:4465
-622:2:3131
-623:0:4465
-624:2:3991
-625:0:4465
-626:2:4295
-627:2:4296
-628:2:4300
-629:2:4304
-630:2:4305
-631:2:4309
-632:2:4317
-633:2:4318
-634:2:4322
-635:2:4326
-636:2:4327
-637:2:4322
-638:2:4326
-639:2:4327
-640:2:4331
-641:2:4338
-642:2:4345
-643:2:4346
-644:2:4353
-645:2:4358
-646:2:4365
-647:2:4366
-648:2:4365
-649:2:4366
-650:2:4373
-651:2:4377
-652:0:4465
-653:2:3993
-654:2:4003
-655:0:4465
-656:2:3131
-657:0:4465
-658:2:3994
-659:2:3995
-660:0:4465
-661:2:3131
-662:0:4465
-663:2:3999
-664:0:4465
-665:2:4007
-666:0:4465
-667:2:3124
-668:0:4465
-669:2:3126
-670:0:4465
-671:2:3127
-672:0:4465
-673:2:3128
-674:0:4465
-675:2:3129
-676:0:4465
-677:2:3130
-678:0:4465
-679:2:3131
-680:0:4465
-681:2:3132
-682:2:3133
-683:2:3137
-684:2:3138
-685:2:3146
-686:2:3147
-687:2:3151
-688:2:3152
-689:2:3160
-690:2:3165
-691:2:3169
-692:2:3170
-693:2:3178
-694:2:3179
-695:2:3183
-696:2:3184
-697:2:3178
-698:2:3179
-699:2:3180
-700:2:3192
-701:2:3197
-702:2:3198
-703:2:3209
-704:2:3210
-705:2:3211
-706:2:3222
-707:2:3227
-708:2:3228
-709:2:3239
-710:2:3240
-711:2:3241
-712:2:3239
-713:2:3240
-714:2:3241
-715:2:3252
-716:2:3260
-717:0:4465
-718:2:3131
-719:0:4465
-720:1:632
-721:1:633
-722:1:637
-723:1:638
-724:1:646
-725:1:647
-726:1:651
-727:1:652
-728:1:660
-729:1:665
-730:1:669
-731:1:670
-732:1:678
-733:1:679
-734:1:683
-735:1:684
-736:1:678
-737:1:679
-738:1:683
-739:1:684
-740:1:692
-741:1:697
-742:1:698
-743:1:709
-744:1:710
-745:1:711
-746:1:722
-747:1:734
-748:1:735
-749:1:739
-750:1:740
-751:1:741
-752:1:739
-753:1:740
-754:1:741
-755:1:752
-756:0:4465
-757:1:11
-758:0:4465
-759:1:761
-760:1:764
-761:1:765
-762:0:4465
-763:1:11
-764:0:4465
-765:1:768
-766:1:769
-767:1:773
-768:1:774
-769:1:782
-770:1:783
-771:1:787
-772:1:788
-773:1:796
-774:1:801
-775:1:805
-776:1:806
-777:1:814
-778:1:815
-779:1:819
-780:1:820
-781:1:814
-782:1:815
-783:1:819
-784:1:820
-785:1:828
-786:1:833
-787:1:834
-788:1:845
-789:1:846
-790:1:847
-791:1:858
-792:1:870
-793:1:871
-794:1:875
-795:1:876
-796:1:877
-797:1:875
-798:1:876
-799:1:877
-800:1:888
-801:0:4465
-802:1:11
-803:0:4465
-804:1:1028
-805:1:1029
-806:1:1033
-807:1:1034
-808:1:1042
-809:1:1043
-810:1:1047
-811:1:1048
-812:1:1056
-813:1:1061
-814:1:1065
-815:1:1066
-816:1:1074
-817:1:1075
-818:1:1079
-819:1:1080
-820:1:1074
-821:1:1075
-822:1:1079
-823:1:1080
-824:1:1088
-825:1:1093
-826:1:1094
-827:1:1105
-828:1:1106
-829:1:1107
-830:1:1118
-831:1:1130
-832:1:1131
-833:1:1135
-834:1:1136
-835:1:1137
-836:1:1135
-837:1:1136
-838:1:1137
-839:1:1148
-840:1:1155
-841:1:1159
-842:0:4465
-843:1:11
-844:0:4465
-845:1:1160
-846:1:1161
-847:1:1165
-848:1:1166
-849:1:1174
-850:1:1175
-851:1:1176
-852:1:1188
-853:1:1193
-854:1:1197
-855:1:1198
-856:1:1206
-857:1:1207
-858:1:1211
-859:1:1212
-860:1:1206
-861:1:1207
-862:1:1211
-863:1:1212
-864:1:1220
-865:1:1225
-866:1:1226
-867:1:1237
-868:1:1238
-869:1:1239
-870:1:1250
-871:1:1262
-872:1:1263
-873:1:1267
-874:1:1268
-875:1:1269
-876:1:1267
-877:1:1268
-878:1:1269
-879:1:1280
-880:0:4465
-881:1:11
-882:0:4465
-883:1:1289
-884:0:4465
-885:1:3023
-886:1:3030
-887:1:3031
-888:1:3038
-889:1:3043
-890:1:3050
-891:1:3051
-892:1:3050
-893:1:3051
-894:1:3058
-895:1:3062
-896:0:4465
-897:2:3264
-898:2:3268
-899:2:3269
-900:2:3273
-901:2:3277
-902:2:3278
-903:2:3282
-904:2:3290
-905:2:3291
-906:2:3295
-907:2:3299
-908:2:3300
-909:2:3295
-910:2:3296
-911:2:3304
-912:0:4465
-913:2:3131
-914:0:4465
-915:2:3312
-916:2:3313
-917:2:3314
-918:0:4465
-919:2:3131
-920:0:4465
-921:2:3319
-922:0:4465
-923:2:4022
-924:2:4023
-925:2:4027
-926:2:4031
-927:2:4032
-928:2:4036
-929:2:4041
-930:2:4049
-931:2:4053
-932:2:4054
-933:2:4049
-934:2:4053
-935:2:4054
-936:2:4058
-937:2:4065
-938:2:4072
-939:2:4073
-940:2:4080
-941:2:4085
-942:2:4092
-943:2:4093
-944:2:4092
-945:2:4093
-946:2:4100
-947:2:4104
-948:0:4465
-949:2:3321
-950:2:4003
-951:0:4465
-952:2:3131
-953:0:4465
-954:2:3322
-955:0:4465
-956:2:3131
-957:0:4465
-958:2:3325
-959:2:3326
-960:2:3330
-961:2:3331
-962:2:3339
-963:2:3340
-964:2:3344
-965:2:3345
-966:2:3353
-967:2:3358
-968:2:3362
-969:2:3363
-970:2:3371
-971:2:3372
-972:2:3376
-973:2:3377
-974:2:3371
-975:2:3372
-976:2:3376
-977:2:3377
-978:2:3385
-979:2:3390
-980:2:3391
-981:2:3402
-982:2:3403
-983:2:3404
-984:2:3415
-985:2:3420
-986:2:3421
-987:2:3432
-988:2:3433
-989:2:3434
-990:2:3432
-991:2:3433
-992:2:3434
-993:2:3445
-994:2:3452
-995:0:4465
-996:2:3131
-997:0:4465
-998:2:3456
-999:2:3457
-1000:2:3458
-1001:2:3470
-1002:2:3471
-1003:2:3475
-1004:2:3476
-1005:2:3484
-1006:2:3489
-1007:2:3493
-1008:2:3494
-1009:2:3502
-1010:2:3503
-1011:2:3507
-1012:2:3508
-1013:2:3502
-1014:2:3503
-1015:2:3507
-1016:2:3508
-1017:2:3516
-1018:2:3521
-1019:2:3522
-1020:2:3533
-1021:2:3534
-1022:2:3535
-1023:2:3546
-1024:2:3551
-1025:2:3552
-1026:2:3563
-1027:2:3564
-1028:2:3565
-1029:2:3563
-1030:2:3564
-1031:2:3565
-1032:2:3576
-1033:2:3584
-1034:0:4465
-1035:2:3131
-1036:0:4465
-1037:2:3590
-1038:0:4465
-1039:2:4113
-1040:2:4114
-1041:2:4118
-1042:2:4122
-1043:2:4123
-1044:2:4127
-1045:2:4135
-1046:2:4136
-1047:2:4140
-1048:2:4144
-1049:2:4145
-1050:2:4140
-1051:2:4144
-1052:2:4145
-1053:2:4149
-1054:2:4156
-1055:2:4163
-1056:2:4164
-1057:2:4171
-1058:2:4176
-1059:2:4183
-1060:2:4184
-1061:2:4183
-1062:2:4184
-1063:2:4191
-1064:2:4195
-1065:0:4465
-1066:2:3592
-1067:2:3593
-1068:0:4465
-1069:2:3131
-1070:0:4465
-1071:2:3456
-1072:2:3457
-1073:2:3461
-1074:2:3462
-1075:2:3470
-1076:2:3471
-1077:2:3475
-1078:2:3476
-1079:2:3484
-1080:2:3489
-1081:2:3493
-1082:2:3494
-1083:2:3502
-1084:2:3503
-1085:2:3507
-1086:2:3508
-1087:2:3502
-1088:2:3503
-1089:2:3507
-1090:2:3508
-1091:2:3516
-1092:2:3521
-1093:2:3522
-1094:2:3533
-1095:2:3534
-1096:2:3535
-1097:2:3546
-1098:2:3551
-1099:2:3552
-1100:2:3563
-1101:2:3564
-1102:2:3565
-1103:2:3563
-1104:2:3564
-1105:2:3565
-1106:2:3576
-1107:2:3584
-1108:0:4465
-1109:2:3131
-1110:0:4465
-1111:2:3590
-1112:0:4465
-1113:2:4113
-1114:2:4114
-1115:2:4118
-1116:2:4122
-1117:2:4123
-1118:2:4127
-1119:2:4135
-1120:2:4136
-1121:2:4140
-1122:2:4144
-1123:2:4145
-1124:2:4140
-1125:2:4144
-1126:2:4145
-1127:2:4149
-1128:2:4156
-1129:2:4163
-1130:2:4164
-1131:2:4171
-1132:2:4176
-1133:2:4183
-1134:2:4184
-1135:2:4183
-1136:2:4184
-1137:2:4191
-1138:2:4195
-1139:0:4465
-1140:1:1291
-1141:1:1292
-1142:0:4463
-1143:1:11
-1144:0:4469
-1145:2:3684
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress.ltl b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.define b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.log b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.log
deleted file mode 100644 (file)
index f854122..0000000
+++ /dev/null
@@ -1,512 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-depth 23: Claim reached state 9 (line 1300)
-depth 1143: Claim reached state 9 (line 1299)
-Depth=    6515 States=    1e+06 Transitions= 5.44e+08 Memory=   507.561        t=    715 R=   1e+03
-Depth=    6515 States=    2e+06 Transitions= 1.44e+09 Memory=   545.940        t= 1.93e+03 R=   1e+03
-Depth=    6515 States=    3e+06 Transitions= 2.29e+09 Memory=   584.416        t= 3.08e+03 R=   1e+03
-pan: resizing hashtable to -w22..  done
-Depth=    6515 States=    4e+06 Transitions= 3.07e+09 Memory=   646.299        t= 4.13e+03 R=   1e+03
-Depth=    6515 States=    5e+06 Transitions= 3.84e+09 Memory=   681.065        t= 5.17e+03 R=   1e+03
-Depth=    6515 States=    6e+06 Transitions= 4.91e+09 Memory=   728.916        t= 6.63e+03 R=   9e+02
-Depth=    6515 States=    7e+06 Transitions= 5.88e+09 Memory=   767.393        t= 7.96e+03 R=   9e+02
-Depth=    6515 States=    8e+06 Transitions= 6.76e+09 Memory=   808.018        t= 9.16e+03 R=   9e+02
-Depth=    6515 States=    9e+06 Transitions= 7.69e+09 Memory=   846.885        t= 1.04e+04 R=   9e+02
-pan: resizing hashtable to -w24..  done
-Depth=    6515 States=    1e+07 Transitions= 8.63e+09 Memory=  1015.705        t= 1.17e+04 R=   9e+02
-Depth=    6515 States=  1.1e+07 Transitions= 9.44e+09 Memory=  1054.572        t= 1.28e+04 R=   9e+02
-Depth=    6515 States=  1.2e+07 Transitions= 1.02e+10 Memory=  1095.490        t= 1.39e+04 R=   9e+02
-Depth=    6515 States=  1.3e+07 Transitions= 1.11e+10 Memory=  1129.182        t= 1.51e+04 R=   9e+02
-Depth=    6515 States=  1.4e+07 Transitions= 1.22e+10 Memory=  1173.518        t= 1.65e+04 R=   8e+02
-Depth=    6515 States=  1.5e+07 Transitions=  1.3e+10 Memory=  1207.893        t= 1.76e+04 R=   9e+02
-Depth=    6515 States=  1.6e+07 Transitions= 1.38e+10 Memory=  1234.065        t= 1.86e+04 R=   9e+02
-Depth=    6515 States=  1.7e+07 Transitions= 1.47e+10 Memory=  1277.424        t= 1.99e+04 R=   9e+02
-Depth=    6515 States=  1.8e+07 Transitions= 1.58e+10 Memory=  1325.568        t= 2.13e+04 R=   8e+02
-Depth=    6515 States=  1.9e+07 Transitions= 1.67e+10 Memory=  1366.486        t= 2.26e+04 R=   8e+02
-Depth=    6515 States=    2e+07 Transitions= 1.76e+10 Memory=  1405.940        t= 2.38e+04 R=   8e+02
-Depth=    6515 States=  2.1e+07 Transitions= 1.85e+10 Memory=  1450.080        t= 2.51e+04 R=   8e+02
-Depth=    6515 States=  2.2e+07 Transitions= 1.94e+10 Memory=  1491.291        t= 2.63e+04 R=   8e+02
-Depth=    6515 States=  2.3e+07 Transitions= 2.02e+10 Memory=  1530.744        t= 2.74e+04 R=   8e+02
-Depth=    6515 States=  2.4e+07 Transitions= 2.12e+10 Memory=  1565.217        t= 2.87e+04 R=   8e+02
-Depth=    6515 States=  2.5e+07 Transitions= 2.22e+10 Memory=  1608.479        t=  3e+04 R=   8e+02
-Depth=    6515 States=  2.6e+07 Transitions=  2.3e+10 Memory=  1634.651        t= 3.11e+04 R=   8e+02
-Depth=    6515 States=  2.7e+07 Transitions=  2.4e+10 Memory=  1685.725        t= 3.25e+04 R=   8e+02
-Depth=    6515 States=  2.8e+07 Transitions= 2.49e+10 Memory=  1724.885        t= 3.37e+04 R=   8e+02
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 6515, errors: 0
- 13561338 states, stored (2.88138e+07 visited)
-2.5567499e+10 states, matched
-2.5596313e+10 transitions (= visited+matched)
-1.4615258e+11 atomic steps
-hash conflicts: 8.6536644e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
- 1500.240      equivalent memory usage for states (stored*(State-vector + overhead))
- 1175.180      actual memory usage for states (compression: 78.33%)
-               state-vector as stored = 63 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1760.236      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 82, "(1)"
-       line 438, "pan.___", state 112, "(1)"
-       line 442, "pan.___", state 125, "(1)"
-       line 597, "pan.___", state 146, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 185, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 199, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 218, "(1)"
-       line 438, "pan.___", state 248, "(1)"
-       line 442, "pan.___", state 261, "(1)"
-       line 411, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 314, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 328, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 347, "(1)"
-       line 438, "pan.___", state 377, "(1)"
-       line 442, "pan.___", state 390, "(1)"
-       line 411, "pan.___", state 413, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 415, "(1)"
-       line 411, "pan.___", state 416, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 416, "else"
-       line 411, "pan.___", state 419, "(1)"
-       line 415, "pan.___", state 427, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 429, "(1)"
-       line 415, "pan.___", state 430, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 430, "else"
-       line 415, "pan.___", state 433, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 413, "pan.___", state 439, "((i<1))"
-       line 413, "pan.___", state 439, "((i>=1))"
-       line 420, "pan.___", state 445, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 447, "(1)"
-       line 420, "pan.___", state 448, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 448, "else"
-       line 420, "pan.___", state 451, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 424, "pan.___", state 459, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 461, "(1)"
-       line 424, "pan.___", state 462, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 462, "else"
-       line 424, "pan.___", state 465, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 422, "pan.___", state 471, "((i<2))"
-       line 422, "pan.___", state 471, "((i>=2))"
-       line 429, "pan.___", state 478, "(1)"
-       line 429, "pan.___", state 479, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 479, "else"
-       line 429, "pan.___", state 482, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 433, "pan.___", state 491, "(1)"
-       line 433, "pan.___", state 492, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 492, "else"
-       line 433, "pan.___", state 495, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 431, "pan.___", state 501, "((i<1))"
-       line 431, "pan.___", state 501, "((i>=1))"
-       line 438, "pan.___", state 508, "(1)"
-       line 438, "pan.___", state 509, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 509, "else"
-       line 438, "pan.___", state 512, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 442, "pan.___", state 521, "(1)"
-       line 442, "pan.___", state 522, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 522, "else"
-       line 442, "pan.___", state 525, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 440, "pan.___", state 531, "((i<2))"
-       line 440, "pan.___", state 531, "((i>=2))"
-       line 450, "pan.___", state 535, "(1)"
-       line 450, "pan.___", state 535, "(1)"
-       line 597, "pan.___", state 538, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 539, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 540, "(1)"
-       line 272, "pan.___", state 544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 555, "(1)"
-       line 280, "pan.___", state 566, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 575, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 591, "(1)"
-       line 253, "pan.___", state 599, "(1)"
-       line 257, "pan.___", state 611, "(1)"
-       line 261, "pan.___", state 619, "(1)"
-       line 411, "pan.___", state 637, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 651, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 669, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 683, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 702, "(1)"
-       line 433, "pan.___", state 715, "(1)"
-       line 438, "pan.___", state 732, "(1)"
-       line 442, "pan.___", state 745, "(1)"
-       line 411, "pan.___", state 773, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 805, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 819, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 838, "(1)"
-       line 438, "pan.___", state 868, "(1)"
-       line 442, "pan.___", state 881, "(1)"
-       line 411, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 904, "(1)"
-       line 411, "pan.___", state 905, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 905, "else"
-       line 411, "pan.___", state 908, "(1)"
-       line 415, "pan.___", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 918, "(1)"
-       line 415, "pan.___", state 919, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 919, "else"
-       line 415, "pan.___", state 922, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 413, "pan.___", state 928, "((i<1))"
-       line 413, "pan.___", state 928, "((i>=1))"
-       line 420, "pan.___", state 934, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 936, "(1)"
-       line 420, "pan.___", state 937, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 937, "else"
-       line 420, "pan.___", state 940, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 424, "pan.___", state 948, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 950, "(1)"
-       line 424, "pan.___", state 951, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 951, "else"
-       line 424, "pan.___", state 954, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 422, "pan.___", state 960, "((i<2))"
-       line 422, "pan.___", state 960, "((i>=2))"
-       line 429, "pan.___", state 967, "(1)"
-       line 429, "pan.___", state 968, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 968, "else"
-       line 429, "pan.___", state 971, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 433, "pan.___", state 980, "(1)"
-       line 433, "pan.___", state 981, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 981, "else"
-       line 433, "pan.___", state 984, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 431, "pan.___", state 990, "((i<1))"
-       line 431, "pan.___", state 990, "((i>=1))"
-       line 438, "pan.___", state 997, "(1)"
-       line 438, "pan.___", state 998, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 998, "else"
-       line 438, "pan.___", state 1001, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 442, "pan.___", state 1010, "(1)"
-       line 442, "pan.___", state 1011, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 1011, "else"
-       line 442, "pan.___", state 1014, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 440, "pan.___", state 1020, "((i<2))"
-       line 440, "pan.___", state 1020, "((i>=2))"
-       line 450, "pan.___", state 1024, "(1)"
-       line 450, "pan.___", state 1024, "(1)"
-       line 605, "pan.___", state 1028, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 1033, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1047, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1065, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1079, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1098, "(1)"
-       line 433, "pan.___", state 1111, "(1)"
-       line 438, "pan.___", state 1128, "(1)"
-       line 442, "pan.___", state 1141, "(1)"
-       line 411, "pan.___", state 1165, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1197, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1230, "(1)"
-       line 438, "pan.___", state 1260, "(1)"
-       line 442, "pan.___", state 1273, "(1)"
-       line 411, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1363, "(1)"
-       line 438, "pan.___", state 1393, "(1)"
-       line 442, "pan.___", state 1406, "(1)"
-       line 411, "pan.___", state 1427, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1492, "(1)"
-       line 438, "pan.___", state 1522, "(1)"
-       line 442, "pan.___", state 1535, "(1)"
-       line 272, "pan.___", state 1558, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1589, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1605, "(1)"
-       line 253, "pan.___", state 1613, "(1)"
-       line 257, "pan.___", state 1625, "(1)"
-       line 261, "pan.___", state 1633, "(1)"
-       line 411, "pan.___", state 1651, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1716, "(1)"
-       line 433, "pan.___", state 1729, "(1)"
-       line 438, "pan.___", state 1746, "(1)"
-       line 442, "pan.___", state 1759, "(1)"
-       line 411, "pan.___", state 1780, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1794, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1812, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1826, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1845, "(1)"
-       line 433, "pan.___", state 1858, "(1)"
-       line 438, "pan.___", state 1875, "(1)"
-       line 442, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1912, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1944, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1958, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1977, "(1)"
-       line 438, "pan.___", state 2007, "(1)"
-       line 442, "pan.___", state 2020, "(1)"
-       line 644, "pan.___", state 2041, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 2048, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2080, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2094, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2113, "(1)"
-       line 438, "pan.___", state 2143, "(1)"
-       line 442, "pan.___", state 2156, "(1)"
-       line 411, "pan.___", state 2177, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2209, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2242, "(1)"
-       line 438, "pan.___", state 2272, "(1)"
-       line 442, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2308, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2310, "(1)"
-       line 411, "pan.___", state 2311, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2311, "else"
-       line 411, "pan.___", state 2314, "(1)"
-       line 415, "pan.___", state 2322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2324, "(1)"
-       line 415, "pan.___", state 2325, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2325, "else"
-       line 415, "pan.___", state 2328, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 413, "pan.___", state 2334, "((i<1))"
-       line 413, "pan.___", state 2334, "((i>=1))"
-       line 420, "pan.___", state 2340, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2342, "(1)"
-       line 420, "pan.___", state 2343, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2343, "else"
-       line 420, "pan.___", state 2346, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 424, "pan.___", state 2354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2356, "(1)"
-       line 424, "pan.___", state 2357, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2357, "else"
-       line 424, "pan.___", state 2360, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 422, "pan.___", state 2366, "((i<2))"
-       line 422, "pan.___", state 2366, "((i>=2))"
-       line 429, "pan.___", state 2373, "(1)"
-       line 429, "pan.___", state 2374, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 2374, "else"
-       line 429, "pan.___", state 2377, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 433, "pan.___", state 2386, "(1)"
-       line 433, "pan.___", state 2387, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 2387, "else"
-       line 433, "pan.___", state 2390, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 431, "pan.___", state 2396, "((i<1))"
-       line 431, "pan.___", state 2396, "((i>=1))"
-       line 438, "pan.___", state 2403, "(1)"
-       line 438, "pan.___", state 2404, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 2404, "else"
-       line 438, "pan.___", state 2407, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 442, "pan.___", state 2416, "(1)"
-       line 442, "pan.___", state 2417, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 2417, "else"
-       line 442, "pan.___", state 2420, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 440, "pan.___", state 2426, "((i<2))"
-       line 440, "pan.___", state 2426, "((i>=2))"
-       line 450, "pan.___", state 2430, "(1)"
-       line 450, "pan.___", state 2430, "(1)"
-       line 644, "pan.___", state 2433, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2434, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2435, "(1)"
-       line 272, "pan.___", state 2439, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2461, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2470, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2486, "(1)"
-       line 253, "pan.___", state 2494, "(1)"
-       line 257, "pan.___", state 2506, "(1)"
-       line 261, "pan.___", state 2514, "(1)"
-       line 411, "pan.___", state 2532, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2546, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2564, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2578, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2597, "(1)"
-       line 433, "pan.___", state 2610, "(1)"
-       line 438, "pan.___", state 2627, "(1)"
-       line 442, "pan.___", state 2640, "(1)"
-       line 272, "pan.___", state 2664, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2673, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2695, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2711, "(1)"
-       line 253, "pan.___", state 2719, "(1)"
-       line 257, "pan.___", state 2731, "(1)"
-       line 261, "pan.___", state 2739, "(1)"
-       line 411, "pan.___", state 2757, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2822, "(1)"
-       line 433, "pan.___", state 2835, "(1)"
-       line 438, "pan.___", state 2852, "(1)"
-       line 442, "pan.___", state 2865, "(1)"
-       line 411, "pan.___", state 2886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2918, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2932, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2951, "(1)"
-       line 433, "pan.___", state 2964, "(1)"
-       line 438, "pan.___", state 2981, "(1)"
-       line 442, "pan.___", state 2994, "(1)"
-       line 249, "pan.___", state 3027, "(1)"
-       line 257, "pan.___", state 3047, "(1)"
-       line 261, "pan.___", state 3055, "(1)"
-       line 249, "pan.___", state 3070, "(1)"
-       line 253, "pan.___", state 3078, "(1)"
-       line 257, "pan.___", state 3090, "(1)"
-       line 261, "pan.___", state 3098, "(1)"
-       line 898, "pan.___", state 3115, "-end-"
-       (283 of 3115 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 83, "(1)"
-       line 433, "pan.___", state 96, "(1)"
-       line 438, "pan.___", state 113, "(1)"
-       line 272, "pan.___", state 149, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 158, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 171, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 225, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 243, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 257, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 276, "(1)"
-       line 433, "pan.___", state 289, "(1)"
-       line 438, "pan.___", state 306, "(1)"
-       line 442, "pan.___", state 319, "(1)"
-       line 415, "pan.___", state 356, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 374, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 388, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 420, "(1)"
-       line 438, "pan.___", state 437, "(1)"
-       line 442, "pan.___", state 450, "(1)"
-       line 415, "pan.___", state 495, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 513, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 527, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 559, "(1)"
-       line 438, "pan.___", state 576, "(1)"
-       line 442, "pan.___", state 589, "(1)"
-       line 415, "pan.___", state 624, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 642, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 656, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 688, "(1)"
-       line 438, "pan.___", state 705, "(1)"
-       line 442, "pan.___", state 718, "(1)"
-       line 415, "pan.___", state 755, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 773, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 787, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 819, "(1)"
-       line 438, "pan.___", state 836, "(1)"
-       line 442, "pan.___", state 849, "(1)"
-       line 272, "pan.___", state 899, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 908, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 921, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 946, "(1)"
-       line 253, "pan.___", state 954, "(1)"
-       line 257, "pan.___", state 966, "(1)"
-       line 261, "pan.___", state 974, "(1)"
-       line 272, "pan.___", state 994, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1003, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1018, "(1)"
-       line 284, "pan.___", state 1025, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1041, "(1)"
-       line 253, "pan.___", state 1049, "(1)"
-       line 257, "pan.___", state 1061, "(1)"
-       line 261, "pan.___", state 1069, "(1)"
-       line 276, "pan.___", state 1094, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1107, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1116, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1132, "(1)"
-       line 253, "pan.___", state 1140, "(1)"
-       line 257, "pan.___", state 1152, "(1)"
-       line 261, "pan.___", state 1160, "(1)"
-       line 276, "pan.___", state 1185, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1198, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1207, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1223, "(1)"
-       line 253, "pan.___", state 1231, "(1)"
-       line 257, "pan.___", state 1243, "(1)"
-       line 261, "pan.___", state 1251, "(1)"
-       line 276, "pan.___", state 1276, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1289, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1298, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1314, "(1)"
-       line 253, "pan.___", state 1322, "(1)"
-       line 257, "pan.___", state 1334, "(1)"
-       line 261, "pan.___", state 1342, "(1)"
-       line 1237, "pan.___", state 1357, "-end-"
-       (78 of 1357 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1302, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 3.47e+04 seconds
-pan: rate 831.51243 states/second
-pan: avg transition delay 1.3538e-06 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index da34f03..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define READER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.define b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.log b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.log
deleted file mode 100644 (file)
index 9bc0ba8..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-depth 23: Claim reached state 9 (line 1300)
-depth 1559: Claim reached state 9 (line 1299)
-Depth=    4420 States=    1e+06 Transitions= 6.06e+08 Memory=   491.936        t=    782 R=   1e+03
-Depth=    4420 States=    2e+06 Transitions= 1.36e+09 Memory=   516.838        t= 1.76e+03 R=   1e+03
-Depth=    4477 States=    3e+06 Transitions= 1.91e+09 Memory=   542.424        t= 2.47e+03 R=   1e+03
-pan: resizing hashtable to -w22..  done
-Depth=    4770 States=    4e+06 Transitions= 2.71e+09 Memory=   598.545        t= 3.51e+03 R=   1e+03
-Depth=    4829 States=    5e+06 Transitions= 3.25e+09 Memory=   623.838        t= 4.2e+03 R=   1e+03
-Depth=    5120 States=    6e+06 Transitions= 4.02e+09 Memory=   648.838        t= 5.19e+03 R=   1e+03
-Depth=    5188 States=    7e+06 Transitions= 4.89e+09 Memory=   693.662        t= 6.32e+03 R=   1e+03
-Depth=    5188 States=    8e+06 Transitions= 5.86e+09 Memory=   742.588        t= 7.58e+03 R=   1e+03
-Depth=    5188 States=    9e+06 Transitions= 6.88e+09 Memory=   781.651        t= 8.92e+03 R=   1e+03
-pan: resizing hashtable to -w24..  done
-Depth=    5188 States=    1e+07 Transitions= 7.86e+09 Memory=   952.229        t= 1.02e+04 R=   1e+03
-Depth=    5188 States=  1.1e+07 Transitions= 8.82e+09 Memory=   991.096        t= 1.15e+04 R=   1e+03
-Depth=    5436 States=  1.2e+07 Transitions= 9.74e+09 Memory=  1031.037        t= 1.27e+04 R=   9e+02
-Depth=    5479 States=  1.3e+07 Transitions= 1.07e+10 Memory=  1074.006        t= 1.4e+04 R=   9e+02
-Depth=    5479 States=  1.4e+07 Transitions= 1.16e+10 Memory=  1117.658        t= 1.52e+04 R=   9e+02
-Depth=    5479 States=  1.5e+07 Transitions= 1.25e+10 Memory=  1160.529        t= 1.63e+04 R=   9e+02
-Depth=    5479 States=  1.6e+07 Transitions= 1.36e+10 Memory=  1208.772        t= 1.77e+04 R=   9e+02
-Depth=    5479 States=  1.7e+07 Transitions= 1.45e+10 Memory=  1253.401        t= 1.88e+04 R=   9e+02
-Depth=    5479 States=  1.8e+07 Transitions= 1.54e+10 Memory=  1278.986        t= 2.01e+04 R=   9e+02
-Depth=    5479 States=  1.9e+07 Transitions= 1.64e+10 Memory=  1333.186        t= 2.14e+04 R=   9e+02
-Depth=    5479 States=    2e+07 Transitions= 1.73e+10 Memory=  1370.979        t= 2.26e+04 R=   9e+02
-Depth=    5479 States=  2.1e+07 Transitions= 1.83e+10 Memory=  1415.998        t= 2.39e+04 R=   9e+02
-Depth=    5479 States=  2.2e+07 Transitions= 1.92e+10 Memory=  1455.940        t= 2.51e+04 R=   9e+02
-Depth=    5479 States=  2.3e+07 Transitions= 2.02e+10 Memory=  1499.397        t= 2.63e+04 R=   9e+02
-Depth=    5479 States=  2.4e+07 Transitions=  2.1e+10 Memory=  1542.951        t= 2.75e+04 R=   9e+02
-Depth=    5588 States=  2.5e+07 Transitions= 2.21e+10 Memory=  1589.533        t= 2.89e+04 R=   9e+02
-Depth=    5588 States=  2.6e+07 Transitions= 2.31e+10 Memory=  1630.647        t= 3.02e+04 R=   9e+02
-Depth=    5588 States=  2.7e+07 Transitions=  2.4e+10 Memory=  1669.123        t= 3.14e+04 R=   9e+02
-Depth=    5588 States=  2.8e+07 Transitions=  2.5e+10 Memory=  1714.533        t= 3.27e+04 R=   9e+02
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 5588, errors: 0
- 13563866 states, stored (2.88596e+07 visited)
-2.5765769e+10 states, matched
-2.5794629e+10 transitions (= visited+matched)
-1.4717516e+11 atomic steps
-hash conflicts: 6.8547236e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
- 1500.519      equivalent memory usage for states (stored*(State-vector + overhead))
- 1175.436      actual memory usage for states (compression: 78.34%)
-               state-vector as stored = 63 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1760.432      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 82, "(1)"
-       line 438, "pan.___", state 112, "(1)"
-       line 442, "pan.___", state 125, "(1)"
-       line 597, "pan.___", state 146, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 185, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 199, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 218, "(1)"
-       line 438, "pan.___", state 248, "(1)"
-       line 442, "pan.___", state 261, "(1)"
-       line 411, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 314, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 328, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 347, "(1)"
-       line 438, "pan.___", state 377, "(1)"
-       line 442, "pan.___", state 390, "(1)"
-       line 411, "pan.___", state 413, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 415, "(1)"
-       line 411, "pan.___", state 416, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 416, "else"
-       line 411, "pan.___", state 419, "(1)"
-       line 415, "pan.___", state 427, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 429, "(1)"
-       line 415, "pan.___", state 430, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 430, "else"
-       line 415, "pan.___", state 433, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 415, "pan.___", state 434, "(1)"
-       line 413, "pan.___", state 439, "((i<1))"
-       line 413, "pan.___", state 439, "((i>=1))"
-       line 420, "pan.___", state 445, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 447, "(1)"
-       line 420, "pan.___", state 448, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 448, "else"
-       line 420, "pan.___", state 451, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 420, "pan.___", state 452, "(1)"
-       line 424, "pan.___", state 459, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 461, "(1)"
-       line 424, "pan.___", state 462, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 462, "else"
-       line 424, "pan.___", state 465, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 424, "pan.___", state 466, "(1)"
-       line 422, "pan.___", state 471, "((i<2))"
-       line 422, "pan.___", state 471, "((i>=2))"
-       line 429, "pan.___", state 478, "(1)"
-       line 429, "pan.___", state 479, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 479, "else"
-       line 429, "pan.___", state 482, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 429, "pan.___", state 483, "(1)"
-       line 433, "pan.___", state 491, "(1)"
-       line 433, "pan.___", state 492, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 492, "else"
-       line 433, "pan.___", state 495, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 433, "pan.___", state 496, "(1)"
-       line 431, "pan.___", state 501, "((i<1))"
-       line 431, "pan.___", state 501, "((i>=1))"
-       line 438, "pan.___", state 508, "(1)"
-       line 438, "pan.___", state 509, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 509, "else"
-       line 438, "pan.___", state 512, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 438, "pan.___", state 513, "(1)"
-       line 442, "pan.___", state 521, "(1)"
-       line 442, "pan.___", state 522, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 522, "else"
-       line 442, "pan.___", state 525, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 442, "pan.___", state 526, "(1)"
-       line 440, "pan.___", state 531, "((i<2))"
-       line 440, "pan.___", state 531, "((i>=2))"
-       line 450, "pan.___", state 535, "(1)"
-       line 450, "pan.___", state 535, "(1)"
-       line 597, "pan.___", state 538, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 539, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 540, "(1)"
-       line 272, "pan.___", state 544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 555, "(1)"
-       line 280, "pan.___", state 566, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 575, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 591, "(1)"
-       line 253, "pan.___", state 599, "(1)"
-       line 257, "pan.___", state 611, "(1)"
-       line 261, "pan.___", state 619, "(1)"
-       line 411, "pan.___", state 637, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 651, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 669, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 683, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 702, "(1)"
-       line 433, "pan.___", state 715, "(1)"
-       line 438, "pan.___", state 732, "(1)"
-       line 442, "pan.___", state 745, "(1)"
-       line 411, "pan.___", state 773, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 805, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 819, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 838, "(1)"
-       line 438, "pan.___", state 868, "(1)"
-       line 442, "pan.___", state 881, "(1)"
-       line 411, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 904, "(1)"
-       line 411, "pan.___", state 905, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 905, "else"
-       line 411, "pan.___", state 908, "(1)"
-       line 415, "pan.___", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 918, "(1)"
-       line 415, "pan.___", state 919, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 919, "else"
-       line 415, "pan.___", state 922, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 415, "pan.___", state 923, "(1)"
-       line 413, "pan.___", state 928, "((i<1))"
-       line 413, "pan.___", state 928, "((i>=1))"
-       line 420, "pan.___", state 934, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 936, "(1)"
-       line 420, "pan.___", state 937, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 937, "else"
-       line 420, "pan.___", state 940, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 420, "pan.___", state 941, "(1)"
-       line 424, "pan.___", state 948, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 950, "(1)"
-       line 424, "pan.___", state 951, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 951, "else"
-       line 424, "pan.___", state 954, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 424, "pan.___", state 955, "(1)"
-       line 422, "pan.___", state 960, "((i<2))"
-       line 422, "pan.___", state 960, "((i>=2))"
-       line 429, "pan.___", state 967, "(1)"
-       line 429, "pan.___", state 968, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 968, "else"
-       line 429, "pan.___", state 971, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 429, "pan.___", state 972, "(1)"
-       line 433, "pan.___", state 980, "(1)"
-       line 433, "pan.___", state 981, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 981, "else"
-       line 433, "pan.___", state 984, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 433, "pan.___", state 985, "(1)"
-       line 431, "pan.___", state 990, "((i<1))"
-       line 431, "pan.___", state 990, "((i>=1))"
-       line 438, "pan.___", state 997, "(1)"
-       line 438, "pan.___", state 998, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 998, "else"
-       line 438, "pan.___", state 1001, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 438, "pan.___", state 1002, "(1)"
-       line 442, "pan.___", state 1010, "(1)"
-       line 442, "pan.___", state 1011, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 1011, "else"
-       line 442, "pan.___", state 1014, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 442, "pan.___", state 1015, "(1)"
-       line 440, "pan.___", state 1020, "((i<2))"
-       line 440, "pan.___", state 1020, "((i>=2))"
-       line 450, "pan.___", state 1024, "(1)"
-       line 450, "pan.___", state 1024, "(1)"
-       line 605, "pan.___", state 1028, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 1033, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1047, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1065, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1079, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1098, "(1)"
-       line 433, "pan.___", state 1111, "(1)"
-       line 438, "pan.___", state 1128, "(1)"
-       line 442, "pan.___", state 1141, "(1)"
-       line 411, "pan.___", state 1165, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1197, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1230, "(1)"
-       line 438, "pan.___", state 1260, "(1)"
-       line 442, "pan.___", state 1273, "(1)"
-       line 411, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1363, "(1)"
-       line 438, "pan.___", state 1393, "(1)"
-       line 442, "pan.___", state 1406, "(1)"
-       line 411, "pan.___", state 1427, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1492, "(1)"
-       line 438, "pan.___", state 1522, "(1)"
-       line 442, "pan.___", state 1535, "(1)"
-       line 272, "pan.___", state 1558, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1589, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1605, "(1)"
-       line 253, "pan.___", state 1613, "(1)"
-       line 257, "pan.___", state 1625, "(1)"
-       line 261, "pan.___", state 1633, "(1)"
-       line 411, "pan.___", state 1651, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1716, "(1)"
-       line 433, "pan.___", state 1729, "(1)"
-       line 438, "pan.___", state 1746, "(1)"
-       line 442, "pan.___", state 1759, "(1)"
-       line 411, "pan.___", state 1780, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1794, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1812, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1826, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1845, "(1)"
-       line 433, "pan.___", state 1858, "(1)"
-       line 438, "pan.___", state 1875, "(1)"
-       line 442, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1912, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1944, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1958, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 1977, "(1)"
-       line 438, "pan.___", state 2007, "(1)"
-       line 442, "pan.___", state 2020, "(1)"
-       line 644, "pan.___", state 2041, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 2048, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2080, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2094, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2113, "(1)"
-       line 438, "pan.___", state 2143, "(1)"
-       line 442, "pan.___", state 2156, "(1)"
-       line 411, "pan.___", state 2177, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2209, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2242, "(1)"
-       line 438, "pan.___", state 2272, "(1)"
-       line 442, "pan.___", state 2285, "(1)"
-       line 411, "pan.___", state 2308, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2310, "(1)"
-       line 411, "pan.___", state 2311, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2311, "else"
-       line 411, "pan.___", state 2314, "(1)"
-       line 415, "pan.___", state 2322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2324, "(1)"
-       line 415, "pan.___", state 2325, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2325, "else"
-       line 415, "pan.___", state 2328, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 415, "pan.___", state 2329, "(1)"
-       line 413, "pan.___", state 2334, "((i<1))"
-       line 413, "pan.___", state 2334, "((i>=1))"
-       line 420, "pan.___", state 2340, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2342, "(1)"
-       line 420, "pan.___", state 2343, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2343, "else"
-       line 420, "pan.___", state 2346, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 420, "pan.___", state 2347, "(1)"
-       line 424, "pan.___", state 2354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2356, "(1)"
-       line 424, "pan.___", state 2357, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2357, "else"
-       line 424, "pan.___", state 2360, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 424, "pan.___", state 2361, "(1)"
-       line 422, "pan.___", state 2366, "((i<2))"
-       line 422, "pan.___", state 2366, "((i>=2))"
-       line 429, "pan.___", state 2373, "(1)"
-       line 429, "pan.___", state 2374, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 429, "pan.___", state 2374, "else"
-       line 429, "pan.___", state 2377, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 429, "pan.___", state 2378, "(1)"
-       line 433, "pan.___", state 2386, "(1)"
-       line 433, "pan.___", state 2387, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 433, "pan.___", state 2387, "else"
-       line 433, "pan.___", state 2390, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 433, "pan.___", state 2391, "(1)"
-       line 431, "pan.___", state 2396, "((i<1))"
-       line 431, "pan.___", state 2396, "((i>=1))"
-       line 438, "pan.___", state 2403, "(1)"
-       line 438, "pan.___", state 2404, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 438, "pan.___", state 2404, "else"
-       line 438, "pan.___", state 2407, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 438, "pan.___", state 2408, "(1)"
-       line 442, "pan.___", state 2416, "(1)"
-       line 442, "pan.___", state 2417, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 442, "pan.___", state 2417, "else"
-       line 442, "pan.___", state 2420, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 442, "pan.___", state 2421, "(1)"
-       line 440, "pan.___", state 2426, "((i<2))"
-       line 440, "pan.___", state 2426, "((i>=2))"
-       line 450, "pan.___", state 2430, "(1)"
-       line 450, "pan.___", state 2430, "(1)"
-       line 644, "pan.___", state 2433, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2434, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2435, "(1)"
-       line 272, "pan.___", state 2439, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2461, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2470, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2486, "(1)"
-       line 253, "pan.___", state 2494, "(1)"
-       line 257, "pan.___", state 2506, "(1)"
-       line 261, "pan.___", state 2514, "(1)"
-       line 411, "pan.___", state 2532, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2546, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2564, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2578, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2597, "(1)"
-       line 433, "pan.___", state 2610, "(1)"
-       line 438, "pan.___", state 2627, "(1)"
-       line 442, "pan.___", state 2640, "(1)"
-       line 272, "pan.___", state 2664, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2673, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2695, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2711, "(1)"
-       line 253, "pan.___", state 2719, "(1)"
-       line 257, "pan.___", state 2731, "(1)"
-       line 261, "pan.___", state 2739, "(1)"
-       line 411, "pan.___", state 2757, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2822, "(1)"
-       line 433, "pan.___", state 2835, "(1)"
-       line 438, "pan.___", state 2852, "(1)"
-       line 442, "pan.___", state 2865, "(1)"
-       line 411, "pan.___", state 2886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2918, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2932, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 2951, "(1)"
-       line 433, "pan.___", state 2964, "(1)"
-       line 438, "pan.___", state 2981, "(1)"
-       line 442, "pan.___", state 2994, "(1)"
-       line 249, "pan.___", state 3027, "(1)"
-       line 257, "pan.___", state 3047, "(1)"
-       line 261, "pan.___", state 3055, "(1)"
-       line 249, "pan.___", state 3070, "(1)"
-       line 253, "pan.___", state 3078, "(1)"
-       line 257, "pan.___", state 3090, "(1)"
-       line 261, "pan.___", state 3098, "(1)"
-       line 898, "pan.___", state 3115, "-end-"
-       (283 of 3115 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 83, "(1)"
-       line 433, "pan.___", state 96, "(1)"
-       line 438, "pan.___", state 113, "(1)"
-       line 272, "pan.___", state 149, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 158, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 171, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 225, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 243, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 257, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 429, "pan.___", state 276, "(1)"
-       line 433, "pan.___", state 289, "(1)"
-       line 438, "pan.___", state 306, "(1)"
-       line 442, "pan.___", state 319, "(1)"
-       line 415, "pan.___", state 356, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 374, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 388, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 420, "(1)"
-       line 438, "pan.___", state 437, "(1)"
-       line 442, "pan.___", state 450, "(1)"
-       line 415, "pan.___", state 495, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 513, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 527, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 559, "(1)"
-       line 438, "pan.___", state 576, "(1)"
-       line 442, "pan.___", state 589, "(1)"
-       line 415, "pan.___", state 624, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 642, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 656, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 688, "(1)"
-       line 438, "pan.___", state 705, "(1)"
-       line 442, "pan.___", state 718, "(1)"
-       line 415, "pan.___", state 755, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 773, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 787, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 433, "pan.___", state 819, "(1)"
-       line 438, "pan.___", state 836, "(1)"
-       line 442, "pan.___", state 849, "(1)"
-       line 272, "pan.___", state 904, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 913, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 928, "(1)"
-       line 284, "pan.___", state 935, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 951, "(1)"
-       line 253, "pan.___", state 959, "(1)"
-       line 257, "pan.___", state 971, "(1)"
-       line 261, "pan.___", state 979, "(1)"
-       line 276, "pan.___", state 1004, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1017, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1026, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1042, "(1)"
-       line 253, "pan.___", state 1050, "(1)"
-       line 257, "pan.___", state 1062, "(1)"
-       line 261, "pan.___", state 1070, "(1)"
-       line 276, "pan.___", state 1095, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1108, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1117, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1133, "(1)"
-       line 253, "pan.___", state 1141, "(1)"
-       line 257, "pan.___", state 1153, "(1)"
-       line 261, "pan.___", state 1161, "(1)"
-       line 276, "pan.___", state 1186, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1199, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1208, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1224, "(1)"
-       line 253, "pan.___", state 1232, "(1)"
-       line 257, "pan.___", state 1244, "(1)"
-       line 261, "pan.___", state 1252, "(1)"
-       line 1237, "pan.___", state 1267, "-end-"
-       (71 of 1267 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1302, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 3.38e+04 seconds
-pan: rate 854.75351 states/second
-pan: avg transition delay 1.3089e-06 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 051f2f3..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.define b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.log b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index 0912929..0000000
+++ /dev/null
@@ -1,757 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1296)
-depth 23: Claim reached state 9 (line 1301)
-depth 1559: Claim reached state 9 (line 1300)
-pan: acceptance cycle (at depth 6380)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 7421, errors: 1
-    55319 states, stored (173044 visited)
- 69543507 states, matched
- 69716551 transitions (= visited+matched)
-3.7666148e+08 atomic steps
-hash conflicts:   1148679 (resolved)
-
-Stats on memory usage (in Megabytes):
-    6.120      equivalent memory usage for states (stored*(State-vector + overhead))
-    5.332      actual memory usage for states (compression: 87.12%)
-               state-vector as stored = 73 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  471.037      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 412, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 82, "(1)"
-       line 439, "pan.___", state 112, "(1)"
-       line 443, "pan.___", state 125, "(1)"
-       line 598, "pan.___", state 146, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 412, "pan.___", state 153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 185, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 199, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 218, "(1)"
-       line 439, "pan.___", state 248, "(1)"
-       line 443, "pan.___", state 261, "(1)"
-       line 412, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 314, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 328, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 347, "(1)"
-       line 439, "pan.___", state 377, "(1)"
-       line 443, "pan.___", state 390, "(1)"
-       line 412, "pan.___", state 413, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 415, "(1)"
-       line 412, "pan.___", state 416, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 416, "else"
-       line 412, "pan.___", state 419, "(1)"
-       line 416, "pan.___", state 427, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 429, "(1)"
-       line 416, "pan.___", state 430, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 416, "pan.___", state 430, "else"
-       line 416, "pan.___", state 433, "(1)"
-       line 416, "pan.___", state 434, "(1)"
-       line 416, "pan.___", state 434, "(1)"
-       line 414, "pan.___", state 439, "((i<1))"
-       line 414, "pan.___", state 439, "((i>=1))"
-       line 421, "pan.___", state 445, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 447, "(1)"
-       line 421, "pan.___", state 448, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 421, "pan.___", state 448, "else"
-       line 421, "pan.___", state 451, "(1)"
-       line 421, "pan.___", state 452, "(1)"
-       line 421, "pan.___", state 452, "(1)"
-       line 425, "pan.___", state 459, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 461, "(1)"
-       line 425, "pan.___", state 462, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 425, "pan.___", state 462, "else"
-       line 425, "pan.___", state 465, "(1)"
-       line 425, "pan.___", state 466, "(1)"
-       line 425, "pan.___", state 466, "(1)"
-       line 423, "pan.___", state 471, "((i<2))"
-       line 423, "pan.___", state 471, "((i>=2))"
-       line 430, "pan.___", state 478, "(1)"
-       line 430, "pan.___", state 479, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 479, "else"
-       line 430, "pan.___", state 482, "(1)"
-       line 430, "pan.___", state 483, "(1)"
-       line 430, "pan.___", state 483, "(1)"
-       line 434, "pan.___", state 491, "(1)"
-       line 434, "pan.___", state 492, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 492, "else"
-       line 434, "pan.___", state 495, "(1)"
-       line 434, "pan.___", state 496, "(1)"
-       line 434, "pan.___", state 496, "(1)"
-       line 432, "pan.___", state 501, "((i<1))"
-       line 432, "pan.___", state 501, "((i>=1))"
-       line 439, "pan.___", state 508, "(1)"
-       line 439, "pan.___", state 509, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 509, "else"
-       line 439, "pan.___", state 512, "(1)"
-       line 439, "pan.___", state 513, "(1)"
-       line 439, "pan.___", state 513, "(1)"
-       line 443, "pan.___", state 521, "(1)"
-       line 443, "pan.___", state 522, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 522, "else"
-       line 443, "pan.___", state 525, "(1)"
-       line 443, "pan.___", state 526, "(1)"
-       line 443, "pan.___", state 526, "(1)"
-       line 441, "pan.___", state 531, "((i<2))"
-       line 441, "pan.___", state 531, "((i>=2))"
-       line 451, "pan.___", state 535, "(1)"
-       line 451, "pan.___", state 535, "(1)"
-       line 598, "pan.___", state 538, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 598, "pan.___", state 539, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 598, "pan.___", state 540, "(1)"
-       line 273, "pan.___", state 544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 277, "pan.___", state 555, "(1)"
-       line 281, "pan.___", state 566, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 575, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 591, "(1)"
-       line 254, "pan.___", state 599, "(1)"
-       line 258, "pan.___", state 611, "(1)"
-       line 262, "pan.___", state 619, "(1)"
-       line 412, "pan.___", state 637, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 651, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 669, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 683, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 702, "(1)"
-       line 434, "pan.___", state 715, "(1)"
-       line 439, "pan.___", state 732, "(1)"
-       line 443, "pan.___", state 745, "(1)"
-       line 412, "pan.___", state 773, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 805, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 819, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 838, "(1)"
-       line 439, "pan.___", state 868, "(1)"
-       line 443, "pan.___", state 881, "(1)"
-       line 412, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 904, "(1)"
-       line 412, "pan.___", state 905, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 905, "else"
-       line 412, "pan.___", state 908, "(1)"
-       line 416, "pan.___", state 916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 918, "(1)"
-       line 416, "pan.___", state 919, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 416, "pan.___", state 919, "else"
-       line 416, "pan.___", state 922, "(1)"
-       line 416, "pan.___", state 923, "(1)"
-       line 416, "pan.___", state 923, "(1)"
-       line 414, "pan.___", state 928, "((i<1))"
-       line 414, "pan.___", state 928, "((i>=1))"
-       line 421, "pan.___", state 934, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 936, "(1)"
-       line 421, "pan.___", state 937, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 421, "pan.___", state 937, "else"
-       line 421, "pan.___", state 940, "(1)"
-       line 421, "pan.___", state 941, "(1)"
-       line 421, "pan.___", state 941, "(1)"
-       line 425, "pan.___", state 948, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 950, "(1)"
-       line 425, "pan.___", state 951, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 425, "pan.___", state 951, "else"
-       line 425, "pan.___", state 954, "(1)"
-       line 425, "pan.___", state 955, "(1)"
-       line 425, "pan.___", state 955, "(1)"
-       line 423, "pan.___", state 960, "((i<2))"
-       line 423, "pan.___", state 960, "((i>=2))"
-       line 430, "pan.___", state 967, "(1)"
-       line 430, "pan.___", state 968, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 968, "else"
-       line 430, "pan.___", state 971, "(1)"
-       line 430, "pan.___", state 972, "(1)"
-       line 430, "pan.___", state 972, "(1)"
-       line 434, "pan.___", state 980, "(1)"
-       line 434, "pan.___", state 981, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 981, "else"
-       line 434, "pan.___", state 984, "(1)"
-       line 434, "pan.___", state 985, "(1)"
-       line 434, "pan.___", state 985, "(1)"
-       line 432, "pan.___", state 990, "((i<1))"
-       line 432, "pan.___", state 990, "((i>=1))"
-       line 439, "pan.___", state 997, "(1)"
-       line 439, "pan.___", state 998, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 998, "else"
-       line 439, "pan.___", state 1001, "(1)"
-       line 439, "pan.___", state 1002, "(1)"
-       line 439, "pan.___", state 1002, "(1)"
-       line 443, "pan.___", state 1010, "(1)"
-       line 443, "pan.___", state 1011, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 1011, "else"
-       line 443, "pan.___", state 1014, "(1)"
-       line 443, "pan.___", state 1015, "(1)"
-       line 443, "pan.___", state 1015, "(1)"
-       line 441, "pan.___", state 1020, "((i<2))"
-       line 441, "pan.___", state 1020, "((i>=2))"
-       line 451, "pan.___", state 1024, "(1)"
-       line 451, "pan.___", state 1024, "(1)"
-       line 606, "pan.___", state 1028, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 412, "pan.___", state 1033, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 1047, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1065, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1079, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 1098, "(1)"
-       line 434, "pan.___", state 1111, "(1)"
-       line 439, "pan.___", state 1128, "(1)"
-       line 443, "pan.___", state 1141, "(1)"
-       line 412, "pan.___", state 1165, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1197, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1211, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 1230, "(1)"
-       line 439, "pan.___", state 1260, "(1)"
-       line 443, "pan.___", state 1273, "(1)"
-       line 412, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 1363, "(1)"
-       line 439, "pan.___", state 1393, "(1)"
-       line 443, "pan.___", state 1406, "(1)"
-       line 412, "pan.___", state 1427, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 1492, "(1)"
-       line 439, "pan.___", state 1522, "(1)"
-       line 443, "pan.___", state 1535, "(1)"
-       line 273, "pan.___", state 1558, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 281, "pan.___", state 1580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 1589, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1605, "(1)"
-       line 254, "pan.___", state 1613, "(1)"
-       line 258, "pan.___", state 1625, "(1)"
-       line 262, "pan.___", state 1633, "(1)"
-       line 412, "pan.___", state 1651, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 1665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 1716, "(1)"
-       line 434, "pan.___", state 1729, "(1)"
-       line 439, "pan.___", state 1746, "(1)"
-       line 443, "pan.___", state 1759, "(1)"
-       line 412, "pan.___", state 1780, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 1794, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1812, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1826, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 1845, "(1)"
-       line 434, "pan.___", state 1858, "(1)"
-       line 439, "pan.___", state 1875, "(1)"
-       line 443, "pan.___", state 1888, "(1)"
-       line 412, "pan.___", state 1912, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1944, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1958, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 1977, "(1)"
-       line 439, "pan.___", state 2007, "(1)"
-       line 443, "pan.___", state 2020, "(1)"
-       line 645, "pan.___", state 2041, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 412, "pan.___", state 2048, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2080, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2094, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 2113, "(1)"
-       line 439, "pan.___", state 2143, "(1)"
-       line 443, "pan.___", state 2156, "(1)"
-       line 412, "pan.___", state 2177, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2209, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 2242, "(1)"
-       line 439, "pan.___", state 2272, "(1)"
-       line 443, "pan.___", state 2285, "(1)"
-       line 412, "pan.___", state 2308, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 2310, "(1)"
-       line 412, "pan.___", state 2311, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 2311, "else"
-       line 412, "pan.___", state 2314, "(1)"
-       line 416, "pan.___", state 2322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 2324, "(1)"
-       line 416, "pan.___", state 2325, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 416, "pan.___", state 2325, "else"
-       line 416, "pan.___", state 2328, "(1)"
-       line 416, "pan.___", state 2329, "(1)"
-       line 416, "pan.___", state 2329, "(1)"
-       line 414, "pan.___", state 2334, "((i<1))"
-       line 414, "pan.___", state 2334, "((i>=1))"
-       line 421, "pan.___", state 2340, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2342, "(1)"
-       line 421, "pan.___", state 2343, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 421, "pan.___", state 2343, "else"
-       line 421, "pan.___", state 2346, "(1)"
-       line 421, "pan.___", state 2347, "(1)"
-       line 421, "pan.___", state 2347, "(1)"
-       line 425, "pan.___", state 2354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2356, "(1)"
-       line 425, "pan.___", state 2357, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 425, "pan.___", state 2357, "else"
-       line 425, "pan.___", state 2360, "(1)"
-       line 425, "pan.___", state 2361, "(1)"
-       line 425, "pan.___", state 2361, "(1)"
-       line 423, "pan.___", state 2366, "((i<2))"
-       line 423, "pan.___", state 2366, "((i>=2))"
-       line 430, "pan.___", state 2373, "(1)"
-       line 430, "pan.___", state 2374, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 2374, "else"
-       line 430, "pan.___", state 2377, "(1)"
-       line 430, "pan.___", state 2378, "(1)"
-       line 430, "pan.___", state 2378, "(1)"
-       line 434, "pan.___", state 2386, "(1)"
-       line 434, "pan.___", state 2387, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 2387, "else"
-       line 434, "pan.___", state 2390, "(1)"
-       line 434, "pan.___", state 2391, "(1)"
-       line 434, "pan.___", state 2391, "(1)"
-       line 432, "pan.___", state 2396, "((i<1))"
-       line 432, "pan.___", state 2396, "((i>=1))"
-       line 439, "pan.___", state 2403, "(1)"
-       line 439, "pan.___", state 2404, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 2404, "else"
-       line 439, "pan.___", state 2407, "(1)"
-       line 439, "pan.___", state 2408, "(1)"
-       line 439, "pan.___", state 2408, "(1)"
-       line 443, "pan.___", state 2416, "(1)"
-       line 443, "pan.___", state 2417, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 2417, "else"
-       line 443, "pan.___", state 2420, "(1)"
-       line 443, "pan.___", state 2421, "(1)"
-       line 443, "pan.___", state 2421, "(1)"
-       line 441, "pan.___", state 2426, "((i<2))"
-       line 441, "pan.___", state 2426, "((i>=2))"
-       line 451, "pan.___", state 2430, "(1)"
-       line 451, "pan.___", state 2430, "(1)"
-       line 645, "pan.___", state 2433, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 645, "pan.___", state 2434, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 645, "pan.___", state 2435, "(1)"
-       line 273, "pan.___", state 2439, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 281, "pan.___", state 2461, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 2470, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 2486, "(1)"
-       line 254, "pan.___", state 2494, "(1)"
-       line 258, "pan.___", state 2506, "(1)"
-       line 262, "pan.___", state 2514, "(1)"
-       line 412, "pan.___", state 2532, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 2546, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2564, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2578, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 2597, "(1)"
-       line 434, "pan.___", state 2610, "(1)"
-       line 439, "pan.___", state 2627, "(1)"
-       line 443, "pan.___", state 2640, "(1)"
-       line 273, "pan.___", state 2664, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 277, "pan.___", state 2673, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 281, "pan.___", state 2686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 2695, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 2711, "(1)"
-       line 254, "pan.___", state 2719, "(1)"
-       line 258, "pan.___", state 2731, "(1)"
-       line 262, "pan.___", state 2739, "(1)"
-       line 412, "pan.___", state 2757, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 2771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 2822, "(1)"
-       line 434, "pan.___", state 2835, "(1)"
-       line 439, "pan.___", state 2852, "(1)"
-       line 443, "pan.___", state 2865, "(1)"
-       line 412, "pan.___", state 2886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 2900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2918, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2932, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 2951, "(1)"
-       line 434, "pan.___", state 2964, "(1)"
-       line 439, "pan.___", state 2981, "(1)"
-       line 443, "pan.___", state 2994, "(1)"
-       line 250, "pan.___", state 3027, "(1)"
-       line 258, "pan.___", state 3047, "(1)"
-       line 262, "pan.___", state 3055, "(1)"
-       line 250, "pan.___", state 3070, "(1)"
-       line 254, "pan.___", state 3078, "(1)"
-       line 258, "pan.___", state 3090, "(1)"
-       line 262, "pan.___", state 3098, "(1)"
-       line 899, "pan.___", state 3115, "-end-"
-       (283 of 3115 states)
-unreached in proctype urcu_writer
-       line 412, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 24, "(1)"
-       line 416, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 38, "(1)"
-       line 416, "pan.___", state 39, "(1)"
-       line 416, "pan.___", state 39, "(1)"
-       line 414, "pan.___", state 44, "((i<1))"
-       line 414, "pan.___", state 44, "((i>=1))"
-       line 421, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 56, "(1)"
-       line 421, "pan.___", state 57, "(1)"
-       line 421, "pan.___", state 57, "(1)"
-       line 425, "pan.___", state 64, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 70, "(1)"
-       line 425, "pan.___", state 71, "(1)"
-       line 425, "pan.___", state 71, "(1)"
-       line 423, "pan.___", state 76, "((i<2))"
-       line 423, "pan.___", state 76, "((i>=2))"
-       line 430, "pan.___", state 83, "(1)"
-       line 430, "pan.___", state 84, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 84, "else"
-       line 430, "pan.___", state 87, "(1)"
-       line 430, "pan.___", state 88, "(1)"
-       line 430, "pan.___", state 88, "(1)"
-       line 434, "pan.___", state 96, "(1)"
-       line 434, "pan.___", state 97, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 97, "else"
-       line 434, "pan.___", state 100, "(1)"
-       line 434, "pan.___", state 101, "(1)"
-       line 434, "pan.___", state 101, "(1)"
-       line 432, "pan.___", state 106, "((i<1))"
-       line 432, "pan.___", state 106, "((i>=1))"
-       line 439, "pan.___", state 113, "(1)"
-       line 439, "pan.___", state 114, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 114, "else"
-       line 439, "pan.___", state 117, "(1)"
-       line 439, "pan.___", state 118, "(1)"
-       line 439, "pan.___", state 118, "(1)"
-       line 443, "pan.___", state 126, "(1)"
-       line 443, "pan.___", state 127, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 127, "else"
-       line 443, "pan.___", state 130, "(1)"
-       line 443, "pan.___", state 131, "(1)"
-       line 443, "pan.___", state 131, "(1)"
-       line 441, "pan.___", state 136, "((i<2))"
-       line 441, "pan.___", state 136, "((i>=2))"
-       line 451, "pan.___", state 140, "(1)"
-       line 451, "pan.___", state 140, "(1)"
-       line 273, "pan.___", state 149, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 277, "pan.___", state 158, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 166, "((i<1))"
-       line 275, "pan.___", state 166, "((i>=1))"
-       line 281, "pan.___", state 171, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 1022, "pan.___", state 199, "old_data = cached_rcu_ptr.val[_pid]"
-       line 412, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 217, "(1)"
-       line 416, "pan.___", state 225, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 231, "(1)"
-       line 416, "pan.___", state 232, "(1)"
-       line 416, "pan.___", state 232, "(1)"
-       line 414, "pan.___", state 237, "((i<1))"
-       line 414, "pan.___", state 237, "((i>=1))"
-       line 421, "pan.___", state 243, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 249, "(1)"
-       line 421, "pan.___", state 250, "(1)"
-       line 421, "pan.___", state 250, "(1)"
-       line 425, "pan.___", state 257, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 263, "(1)"
-       line 425, "pan.___", state 264, "(1)"
-       line 425, "pan.___", state 264, "(1)"
-       line 423, "pan.___", state 269, "((i<2))"
-       line 423, "pan.___", state 269, "((i>=2))"
-       line 430, "pan.___", state 276, "(1)"
-       line 430, "pan.___", state 277, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 277, "else"
-       line 430, "pan.___", state 280, "(1)"
-       line 430, "pan.___", state 281, "(1)"
-       line 430, "pan.___", state 281, "(1)"
-       line 434, "pan.___", state 289, "(1)"
-       line 434, "pan.___", state 290, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 290, "else"
-       line 434, "pan.___", state 293, "(1)"
-       line 434, "pan.___", state 294, "(1)"
-       line 434, "pan.___", state 294, "(1)"
-       line 432, "pan.___", state 299, "((i<1))"
-       line 432, "pan.___", state 299, "((i>=1))"
-       line 439, "pan.___", state 306, "(1)"
-       line 439, "pan.___", state 307, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 307, "else"
-       line 439, "pan.___", state 310, "(1)"
-       line 439, "pan.___", state 311, "(1)"
-       line 439, "pan.___", state 311, "(1)"
-       line 443, "pan.___", state 319, "(1)"
-       line 443, "pan.___", state 320, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 320, "else"
-       line 443, "pan.___", state 323, "(1)"
-       line 443, "pan.___", state 324, "(1)"
-       line 443, "pan.___", state 324, "(1)"
-       line 441, "pan.___", state 329, "((i<2))"
-       line 441, "pan.___", state 329, "((i>=2))"
-       line 451, "pan.___", state 333, "(1)"
-       line 451, "pan.___", state 333, "(1)"
-       line 412, "pan.___", state 344, "(1)"
-       line 412, "pan.___", state 345, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 345, "else"
-       line 412, "pan.___", state 348, "(1)"
-       line 416, "pan.___", state 356, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 362, "(1)"
-       line 416, "pan.___", state 363, "(1)"
-       line 416, "pan.___", state 363, "(1)"
-       line 414, "pan.___", state 368, "((i<1))"
-       line 414, "pan.___", state 368, "((i>=1))"
-       line 421, "pan.___", state 374, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 380, "(1)"
-       line 421, "pan.___", state 381, "(1)"
-       line 421, "pan.___", state 381, "(1)"
-       line 425, "pan.___", state 388, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 394, "(1)"
-       line 425, "pan.___", state 395, "(1)"
-       line 425, "pan.___", state 395, "(1)"
-       line 423, "pan.___", state 400, "((i<2))"
-       line 423, "pan.___", state 400, "((i>=2))"
-       line 430, "pan.___", state 407, "(1)"
-       line 430, "pan.___", state 408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 408, "else"
-       line 430, "pan.___", state 411, "(1)"
-       line 430, "pan.___", state 412, "(1)"
-       line 430, "pan.___", state 412, "(1)"
-       line 434, "pan.___", state 420, "(1)"
-       line 434, "pan.___", state 421, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 421, "else"
-       line 434, "pan.___", state 424, "(1)"
-       line 434, "pan.___", state 425, "(1)"
-       line 434, "pan.___", state 425, "(1)"
-       line 432, "pan.___", state 430, "((i<1))"
-       line 432, "pan.___", state 430, "((i>=1))"
-       line 439, "pan.___", state 437, "(1)"
-       line 439, "pan.___", state 438, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 438, "else"
-       line 439, "pan.___", state 441, "(1)"
-       line 439, "pan.___", state 442, "(1)"
-       line 439, "pan.___", state 442, "(1)"
-       line 443, "pan.___", state 450, "(1)"
-       line 443, "pan.___", state 451, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 451, "else"
-       line 443, "pan.___", state 454, "(1)"
-       line 443, "pan.___", state 455, "(1)"
-       line 443, "pan.___", state 455, "(1)"
-       line 441, "pan.___", state 460, "((i<2))"
-       line 441, "pan.___", state 460, "((i>=2))"
-       line 451, "pan.___", state 464, "(1)"
-       line 451, "pan.___", state 464, "(1)"
-       line 412, "pan.___", state 477, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 479, "(1)"
-       line 412, "pan.___", state 480, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 480, "else"
-       line 412, "pan.___", state 483, "(1)"
-       line 416, "pan.___", state 491, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 493, "(1)"
-       line 416, "pan.___", state 494, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 416, "pan.___", state 494, "else"
-       line 416, "pan.___", state 497, "(1)"
-       line 416, "pan.___", state 498, "(1)"
-       line 416, "pan.___", state 498, "(1)"
-       line 414, "pan.___", state 503, "((i<1))"
-       line 414, "pan.___", state 503, "((i>=1))"
-       line 421, "pan.___", state 509, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 511, "(1)"
-       line 421, "pan.___", state 512, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 421, "pan.___", state 512, "else"
-       line 421, "pan.___", state 515, "(1)"
-       line 421, "pan.___", state 516, "(1)"
-       line 421, "pan.___", state 516, "(1)"
-       line 425, "pan.___", state 523, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 525, "(1)"
-       line 425, "pan.___", state 526, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 425, "pan.___", state 526, "else"
-       line 425, "pan.___", state 529, "(1)"
-       line 425, "pan.___", state 530, "(1)"
-       line 425, "pan.___", state 530, "(1)"
-       line 423, "pan.___", state 535, "((i<2))"
-       line 423, "pan.___", state 535, "((i>=2))"
-       line 430, "pan.___", state 542, "(1)"
-       line 430, "pan.___", state 543, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 543, "else"
-       line 430, "pan.___", state 546, "(1)"
-       line 430, "pan.___", state 547, "(1)"
-       line 430, "pan.___", state 547, "(1)"
-       line 434, "pan.___", state 555, "(1)"
-       line 434, "pan.___", state 556, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 556, "else"
-       line 434, "pan.___", state 559, "(1)"
-       line 434, "pan.___", state 560, "(1)"
-       line 434, "pan.___", state 560, "(1)"
-       line 432, "pan.___", state 565, "((i<1))"
-       line 432, "pan.___", state 565, "((i>=1))"
-       line 439, "pan.___", state 572, "(1)"
-       line 439, "pan.___", state 573, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 573, "else"
-       line 439, "pan.___", state 576, "(1)"
-       line 439, "pan.___", state 577, "(1)"
-       line 439, "pan.___", state 577, "(1)"
-       line 443, "pan.___", state 585, "(1)"
-       line 443, "pan.___", state 586, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 586, "else"
-       line 443, "pan.___", state 589, "(1)"
-       line 443, "pan.___", state 590, "(1)"
-       line 443, "pan.___", state 590, "(1)"
-       line 451, "pan.___", state 599, "(1)"
-       line 451, "pan.___", state 599, "(1)"
-       line 412, "pan.___", state 605, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 611, "(1)"
-       line 416, "pan.___", state 619, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 625, "(1)"
-       line 416, "pan.___", state 626, "(1)"
-       line 416, "pan.___", state 626, "(1)"
-       line 414, "pan.___", state 631, "((i<1))"
-       line 414, "pan.___", state 631, "((i>=1))"
-       line 421, "pan.___", state 637, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 643, "(1)"
-       line 421, "pan.___", state 644, "(1)"
-       line 421, "pan.___", state 644, "(1)"
-       line 425, "pan.___", state 651, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 657, "(1)"
-       line 425, "pan.___", state 658, "(1)"
-       line 425, "pan.___", state 658, "(1)"
-       line 423, "pan.___", state 663, "((i<2))"
-       line 423, "pan.___", state 663, "((i>=2))"
-       line 430, "pan.___", state 670, "(1)"
-       line 430, "pan.___", state 671, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 671, "else"
-       line 430, "pan.___", state 674, "(1)"
-       line 430, "pan.___", state 675, "(1)"
-       line 430, "pan.___", state 675, "(1)"
-       line 434, "pan.___", state 683, "(1)"
-       line 434, "pan.___", state 684, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 684, "else"
-       line 434, "pan.___", state 687, "(1)"
-       line 434, "pan.___", state 688, "(1)"
-       line 434, "pan.___", state 688, "(1)"
-       line 432, "pan.___", state 693, "((i<1))"
-       line 432, "pan.___", state 693, "((i>=1))"
-       line 439, "pan.___", state 700, "(1)"
-       line 439, "pan.___", state 701, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 701, "else"
-       line 439, "pan.___", state 704, "(1)"
-       line 439, "pan.___", state 705, "(1)"
-       line 439, "pan.___", state 705, "(1)"
-       line 443, "pan.___", state 713, "(1)"
-       line 443, "pan.___", state 714, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 714, "else"
-       line 443, "pan.___", state 717, "(1)"
-       line 443, "pan.___", state 718, "(1)"
-       line 443, "pan.___", state 718, "(1)"
-       line 451, "pan.___", state 727, "(1)"
-       line 451, "pan.___", state 727, "(1)"
-       line 412, "pan.___", state 734, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 740, "(1)"
-       line 416, "pan.___", state 748, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 754, "(1)"
-       line 416, "pan.___", state 755, "(1)"
-       line 416, "pan.___", state 755, "(1)"
-       line 414, "pan.___", state 760, "((i<1))"
-       line 414, "pan.___", state 760, "((i>=1))"
-       line 421, "pan.___", state 766, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 772, "(1)"
-       line 421, "pan.___", state 773, "(1)"
-       line 421, "pan.___", state 773, "(1)"
-       line 425, "pan.___", state 780, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 786, "(1)"
-       line 425, "pan.___", state 787, "(1)"
-       line 425, "pan.___", state 787, "(1)"
-       line 423, "pan.___", state 792, "((i<2))"
-       line 423, "pan.___", state 792, "((i>=2))"
-       line 430, "pan.___", state 799, "(1)"
-       line 430, "pan.___", state 800, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 430, "pan.___", state 800, "else"
-       line 430, "pan.___", state 803, "(1)"
-       line 430, "pan.___", state 804, "(1)"
-       line 430, "pan.___", state 804, "(1)"
-       line 434, "pan.___", state 812, "(1)"
-       line 434, "pan.___", state 813, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 434, "pan.___", state 813, "else"
-       line 434, "pan.___", state 816, "(1)"
-       line 434, "pan.___", state 817, "(1)"
-       line 434, "pan.___", state 817, "(1)"
-       line 432, "pan.___", state 822, "((i<1))"
-       line 432, "pan.___", state 822, "((i>=1))"
-       line 439, "pan.___", state 829, "(1)"
-       line 439, "pan.___", state 830, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 439, "pan.___", state 830, "else"
-       line 439, "pan.___", state 833, "(1)"
-       line 439, "pan.___", state 834, "(1)"
-       line 439, "pan.___", state 834, "(1)"
-       line 443, "pan.___", state 842, "(1)"
-       line 443, "pan.___", state 843, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 443, "pan.___", state 843, "else"
-       line 443, "pan.___", state 846, "(1)"
-       line 443, "pan.___", state 847, "(1)"
-       line 443, "pan.___", state 847, "(1)"
-       line 441, "pan.___", state 852, "((i<2))"
-       line 441, "pan.___", state 852, "((i>=2))"
-       line 451, "pan.___", state 856, "(1)"
-       line 451, "pan.___", state 856, "(1)"
-       line 416, "pan.___", state 879, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 897, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 911, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 434, "pan.___", state 943, "(1)"
-       line 439, "pan.___", state 960, "(1)"
-       line 443, "pan.___", state 973, "(1)"
-       line 412, "pan.___", state 999, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 1013, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1031, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1045, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 430, "pan.___", state 1064, "(1)"
-       line 434, "pan.___", state 1077, "(1)"
-       line 439, "pan.___", state 1094, "(1)"
-       line 443, "pan.___", state 1107, "(1)"
-       line 273, "pan.___", state 1153, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 277, "pan.___", state 1162, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 1170, "((i<1))"
-       line 275, "pan.___", state 1170, "((i>=1))"
-       line 281, "pan.___", state 1177, "(1)"
-       line 281, "pan.___", state 1178, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 281, "pan.___", state 1178, "else"
-       line 285, "pan.___", state 1184, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1192, "((i<2))"
-       line 283, "pan.___", state 1192, "((i>=2))"
-       line 250, "pan.___", state 1200, "(1)"
-       line 254, "pan.___", state 1208, "(1)"
-       line 254, "pan.___", state 1209, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 1209, "else"
-       line 252, "pan.___", state 1214, "((i<1))"
-       line 252, "pan.___", state 1214, "((i>=1))"
-       line 258, "pan.___", state 1220, "(1)"
-       line 258, "pan.___", state 1221, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 1221, "else"
-       line 262, "pan.___", state 1228, "(1)"
-       line 262, "pan.___", state 1229, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 1229, "else"
-       line 267, "pan.___", state 1238, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 1238, "else"
-       line 277, "pan.___", state 1253, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 281, "pan.___", state 1266, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 1275, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1291, "(1)"
-       line 254, "pan.___", state 1299, "(1)"
-       line 258, "pan.___", state 1311, "(1)"
-       line 262, "pan.___", state 1319, "(1)"
-       line 1238, "pan.___", state 1334, "-end-"
-       (242 of 1334 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1303, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 88.5 seconds
-pan: rate 1954.1954 states/second
-pan: avg transition delay 1.2701e-06 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-alpha-no-ipi'
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.spin.input b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index ad4f91f..0000000
+++ /dev/null
@@ -1,1274 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu-controldataflow-alpha-no-ipi/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index 8ab0111..0000000
+++ /dev/null
@@ -1,7390 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4529
-2:3:4449
-3:3:4452
-4:3:4452
-5:3:4455
-6:3:4463
-7:3:4463
-8:3:4466
-9:3:4472
-10:3:4476
-11:3:4476
-12:3:4479
-13:3:4489
-14:3:4497
-15:3:4497
-16:3:4500
-17:3:4506
-18:3:4510
-19:3:4510
-20:3:4513
-21:3:4519
-22:3:4523
-23:3:4524
-24:0:4529
-25:3:4526
-26:0:4529
-27:2:3117
-28:0:4529
-29:2:3123
-30:0:4529
-31:2:3124
-32:0:4529
-33:2:3125
-34:0:4527
-35:2:3126
-36:0:4533
-37:2:3127
-38:0:4533
-39:2:3128
-40:2:3129
-41:2:3133
-42:2:3134
-43:2:3142
-44:2:3143
-45:2:3147
-46:2:3148
-47:2:3156
-48:2:3161
-49:2:3165
-50:2:3166
-51:2:3174
-52:2:3175
-53:2:3179
-54:2:3180
-55:2:3174
-56:2:3175
-57:2:3179
-58:2:3180
-59:2:3188
-60:2:3193
-61:2:3194
-62:2:3205
-63:2:3206
-64:2:3207
-65:2:3218
-66:2:3223
-67:2:3224
-68:2:3235
-69:2:3236
-70:2:3237
-71:2:3235
-72:2:3236
-73:2:3237
-74:2:3248
-75:2:3256
-76:0:4533
-77:2:3127
-78:0:4533
-79:2:3260
-80:2:3264
-81:2:3265
-82:2:3269
-83:2:3273
-84:2:3274
-85:2:3278
-86:2:3286
-87:2:3287
-88:2:3291
-89:2:3295
-90:2:3296
-91:2:3291
-92:2:3292
-93:2:3300
-94:0:4533
-95:2:3127
-96:0:4533
-97:2:3308
-98:2:3309
-99:2:3310
-100:0:4533
-101:2:3127
-102:0:4533
-103:2:3315
-104:0:4533
-105:2:4268
-106:2:4269
-107:2:4273
-108:2:4277
-109:2:4278
-110:2:4282
-111:2:4287
-112:2:4295
-113:2:4299
-114:2:4300
-115:2:4295
-116:2:4299
-117:2:4300
-118:2:4304
-119:2:4311
-120:2:4318
-121:2:4319
-122:2:4326
-123:2:4331
-124:2:4338
-125:2:4339
-126:2:4338
-127:2:4339
-128:2:4346
-129:2:4350
-130:0:4533
-131:2:3317
-132:2:4249
-133:0:4533
-134:2:3127
-135:0:4533
-136:2:3318
-137:0:4533
-138:2:3127
-139:0:4533
-140:2:3321
-141:2:3322
-142:2:3326
-143:2:3327
-144:2:3335
-145:2:3336
-146:2:3340
-147:2:3341
-148:2:3349
-149:2:3354
-150:2:3358
-151:2:3359
-152:2:3367
-153:2:3368
-154:2:3372
-155:2:3373
-156:2:3367
-157:2:3368
-158:2:3372
-159:2:3373
-160:2:3381
-161:2:3386
-162:2:3387
-163:2:3398
-164:2:3399
-165:2:3400
-166:2:3411
-167:2:3416
-168:2:3417
-169:2:3428
-170:2:3429
-171:2:3430
-172:2:3428
-173:2:3429
-174:2:3430
-175:2:3441
-176:2:3448
-177:0:4533
-178:2:3127
-179:0:4533
-180:2:3452
-181:2:3453
-182:2:3454
-183:2:3466
-184:2:3467
-185:2:3471
-186:2:3472
-187:2:3480
-188:2:3485
-189:2:3489
-190:2:3490
-191:2:3498
-192:2:3499
-193:2:3503
-194:2:3504
-195:2:3498
-196:2:3499
-197:2:3503
-198:2:3504
-199:2:3512
-200:2:3517
-201:2:3518
-202:2:3529
-203:2:3530
-204:2:3531
-205:2:3542
-206:2:3547
-207:2:3548
-208:2:3559
-209:2:3560
-210:2:3561
-211:2:3559
-212:2:3560
-213:2:3561
-214:2:3572
-215:2:3583
-216:2:3584
-217:0:4533
-218:2:3127
-219:0:4533
-220:2:3715
-221:2:3716
-222:2:3720
-223:2:3721
-224:2:3729
-225:2:3730
-226:2:3734
-227:2:3735
-228:2:3743
-229:2:3748
-230:2:3752
-231:2:3753
-232:2:3761
-233:2:3762
-234:2:3766
-235:2:3767
-236:2:3761
-237:2:3762
-238:2:3766
-239:2:3767
-240:2:3775
-241:2:3780
-242:2:3781
-243:2:3792
-244:2:3793
-245:2:3794
-246:2:3805
-247:2:3810
-248:2:3811
-249:2:3822
-250:2:3823
-251:2:3824
-252:2:3822
-253:2:3823
-254:2:3824
-255:2:3835
-256:0:4533
-257:2:3127
-258:0:4533
-259:2:3844
-260:2:3845
-261:2:3849
-262:2:3850
-263:2:3858
-264:2:3859
-265:2:3863
-266:2:3864
-267:2:3872
-268:2:3877
-269:2:3881
-270:2:3882
-271:2:3890
-272:2:3891
-273:2:3895
-274:2:3896
-275:2:3890
-276:2:3891
-277:2:3895
-278:2:3896
-279:2:3904
-280:2:3909
-281:2:3910
-282:2:3921
-283:2:3922
-284:2:3923
-285:2:3934
-286:2:3939
-287:2:3940
-288:2:3951
-289:2:3952
-290:2:3953
-291:2:3951
-292:2:3952
-293:2:3953
-294:2:3964
-295:2:3971
-296:0:4533
-297:2:3127
-298:0:4533
-299:1:2
-300:0:4533
-301:1:8
-302:0:4533
-303:1:9
-304:0:4533
-305:1:10
-306:0:4533
-307:1:11
-308:0:4533
-309:1:12
-310:1:13
-311:1:17
-312:1:18
-313:1:26
-314:1:27
-315:1:31
-316:1:32
-317:1:40
-318:1:45
-319:1:49
-320:1:50
-321:1:58
-322:1:59
-323:1:63
-324:1:64
-325:1:58
-326:1:59
-327:1:63
-328:1:64
-329:1:72
-330:1:77
-331:1:78
-332:1:89
-333:1:90
-334:1:91
-335:1:102
-336:1:107
-337:1:108
-338:1:119
-339:1:120
-340:1:121
-341:1:119
-342:1:120
-343:1:121
-344:1:132
-345:0:4533
-346:1:11
-347:0:4533
-348:1:141
-349:1:142
-350:0:4533
-351:1:11
-352:0:4533
-353:1:148
-354:1:149
-355:1:153
-356:1:154
-357:1:162
-358:1:163
-359:1:167
-360:1:168
-361:1:176
-362:1:181
-363:1:185
-364:1:186
-365:1:194
-366:1:195
-367:1:199
-368:1:200
-369:1:194
-370:1:195
-371:1:199
-372:1:200
-373:1:208
-374:1:213
-375:1:214
-376:1:225
-377:1:226
-378:1:227
-379:1:238
-380:1:243
-381:1:244
-382:1:255
-383:1:256
-384:1:257
-385:1:255
-386:1:256
-387:1:257
-388:1:268
-389:0:4533
-390:1:11
-391:0:4533
-392:1:277
-393:1:278
-394:1:282
-395:1:283
-396:1:291
-397:1:292
-398:1:296
-399:1:297
-400:1:305
-401:1:310
-402:1:314
-403:1:315
-404:1:323
-405:1:324
-406:1:328
-407:1:329
-408:1:323
-409:1:324
-410:1:328
-411:1:329
-412:1:337
-413:1:342
-414:1:343
-415:1:354
-416:1:355
-417:1:356
-418:1:367
-419:1:372
-420:1:373
-421:1:384
-422:1:385
-423:1:386
-424:1:384
-425:1:385
-426:1:386
-427:1:397
-428:1:404
-429:0:4533
-430:1:11
-431:0:4533
-432:1:540
-433:1:544
-434:1:545
-435:1:549
-436:1:550
-437:1:558
-438:1:566
-439:1:567
-440:1:571
-441:1:575
-442:1:576
-443:1:571
-444:1:575
-445:1:576
-446:1:580
-447:1:587
-448:1:594
-449:1:595
-450:1:602
-451:1:607
-452:1:614
-453:1:615
-454:1:614
-455:1:615
-456:1:622
-457:0:4533
-458:1:11
-459:0:4533
-460:2:3975
-461:2:3976
-462:2:3977
-463:2:3989
-464:2:3990
-465:2:3994
-466:2:3995
-467:2:4003
-468:2:4008
-469:2:4012
-470:2:4013
-471:2:4021
-472:2:4022
-473:2:4026
-474:2:4027
-475:2:4021
-476:2:4022
-477:2:4026
-478:2:4027
-479:2:4035
-480:2:4040
-481:2:4041
-482:2:4052
-483:2:4053
-484:2:4054
-485:2:4065
-486:2:4070
-487:2:4071
-488:2:4082
-489:2:4083
-490:2:4084
-491:2:4082
-492:2:4083
-493:2:4084
-494:2:4095
-495:2:4103
-496:0:4533
-497:2:3127
-498:0:4533
-499:2:4109
-500:2:4110
-501:2:4114
-502:2:4115
-503:2:4123
-504:2:4124
-505:2:4128
-506:2:4129
-507:2:4137
-508:2:4142
-509:2:4146
-510:2:4147
-511:2:4155
-512:2:4156
-513:2:4160
-514:2:4161
-515:2:4155
-516:2:4156
-517:2:4160
-518:2:4161
-519:2:4169
-520:2:4174
-521:2:4175
-522:2:4186
-523:2:4187
-524:2:4188
-525:2:4199
-526:2:4204
-527:2:4205
-528:2:4216
-529:2:4217
-530:2:4218
-531:2:4216
-532:2:4217
-533:2:4218
-534:2:4229
-535:0:4533
-536:2:3127
-537:0:4533
-538:1:632
-539:1:633
-540:1:637
-541:1:638
-542:1:646
-543:1:647
-544:1:651
-545:1:652
-546:1:660
-547:1:665
-548:1:669
-549:1:670
-550:1:678
-551:1:679
-552:1:683
-553:1:684
-554:1:678
-555:1:679
-556:1:683
-557:1:684
-558:1:692
-559:1:697
-560:1:698
-561:1:709
-562:1:710
-563:1:711
-564:1:722
-565:1:727
-566:1:728
-567:1:739
-568:1:740
-569:1:741
-570:1:739
-571:1:740
-572:1:741
-573:1:752
-574:0:4533
-575:1:11
-576:0:4533
-577:2:3975
-578:2:3976
-579:2:3980
-580:2:3981
-581:2:3989
-582:2:3990
-583:2:3994
-584:2:3995
-585:2:4003
-586:2:4008
-587:2:4012
-588:2:4013
-589:2:4021
-590:2:4022
-591:2:4026
-592:2:4027
-593:2:4021
-594:2:4022
-595:2:4026
-596:2:4027
-597:2:4035
-598:2:4040
-599:2:4041
-600:2:4052
-601:2:4053
-602:2:4054
-603:2:4065
-604:2:4070
-605:2:4071
-606:2:4082
-607:2:4083
-608:2:4084
-609:2:4082
-610:2:4083
-611:2:4084
-612:2:4095
-613:2:4103
-614:0:4533
-615:2:3127
-616:0:4533
-617:2:4109
-618:2:4110
-619:2:4114
-620:2:4115
-621:2:4123
-622:2:4124
-623:2:4128
-624:2:4129
-625:2:4137
-626:2:4142
-627:2:4146
-628:2:4147
-629:2:4155
-630:2:4156
-631:2:4160
-632:2:4161
-633:2:4155
-634:2:4156
-635:2:4160
-636:2:4161
-637:2:4169
-638:2:4174
-639:2:4175
-640:2:4186
-641:2:4187
-642:2:4188
-643:2:4199
-644:2:4204
-645:2:4205
-646:2:4216
-647:2:4217
-648:2:4218
-649:2:4216
-650:2:4217
-651:2:4218
-652:2:4229
-653:0:4533
-654:2:3127
-655:0:4533
-656:1:761
-657:1:764
-658:1:765
-659:0:4533
-660:1:11
-661:0:4533
-662:2:3975
-663:2:3976
-664:2:3980
-665:2:3981
-666:2:3989
-667:2:3990
-668:2:3994
-669:2:3995
-670:2:4003
-671:2:4008
-672:2:4012
-673:2:4013
-674:2:4021
-675:2:4022
-676:2:4026
-677:2:4027
-678:2:4021
-679:2:4022
-680:2:4026
-681:2:4027
-682:2:4035
-683:2:4040
-684:2:4041
-685:2:4052
-686:2:4053
-687:2:4054
-688:2:4065
-689:2:4070
-690:2:4071
-691:2:4082
-692:2:4083
-693:2:4084
-694:2:4082
-695:2:4083
-696:2:4084
-697:2:4095
-698:2:4103
-699:0:4533
-700:2:3127
-701:0:4533
-702:2:4109
-703:2:4110
-704:2:4114
-705:2:4115
-706:2:4123
-707:2:4124
-708:2:4128
-709:2:4129
-710:2:4137
-711:2:4142
-712:2:4146
-713:2:4147
-714:2:4155
-715:2:4156
-716:2:4160
-717:2:4161
-718:2:4155
-719:2:4156
-720:2:4160
-721:2:4161
-722:2:4169
-723:2:4174
-724:2:4175
-725:2:4186
-726:2:4187
-727:2:4188
-728:2:4199
-729:2:4204
-730:2:4205
-731:2:4216
-732:2:4217
-733:2:4218
-734:2:4216
-735:2:4217
-736:2:4218
-737:2:4229
-738:0:4533
-739:2:3127
-740:0:4533
-741:1:768
-742:1:769
-743:1:773
-744:1:774
-745:1:782
-746:1:783
-747:1:787
-748:1:788
-749:1:796
-750:1:801
-751:1:805
-752:1:806
-753:1:814
-754:1:815
-755:1:819
-756:1:820
-757:1:814
-758:1:815
-759:1:819
-760:1:820
-761:1:828
-762:1:833
-763:1:834
-764:1:845
-765:1:846
-766:1:847
-767:1:858
-768:1:863
-769:1:864
-770:1:875
-771:1:876
-772:1:877
-773:1:875
-774:1:876
-775:1:877
-776:1:888
-777:0:4533
-778:1:11
-779:0:4533
-780:2:3975
-781:2:3976
-782:2:3980
-783:2:3981
-784:2:3989
-785:2:3990
-786:2:3994
-787:2:3995
-788:2:4003
-789:2:4008
-790:2:4012
-791:2:4013
-792:2:4021
-793:2:4022
-794:2:4026
-795:2:4027
-796:2:4021
-797:2:4022
-798:2:4026
-799:2:4027
-800:2:4035
-801:2:4040
-802:2:4041
-803:2:4052
-804:2:4053
-805:2:4054
-806:2:4065
-807:2:4070
-808:2:4071
-809:2:4082
-810:2:4083
-811:2:4084
-812:2:4082
-813:2:4083
-814:2:4084
-815:2:4095
-816:2:4103
-817:0:4533
-818:2:3127
-819:0:4533
-820:2:4109
-821:2:4110
-822:2:4114
-823:2:4115
-824:2:4123
-825:2:4124
-826:2:4128
-827:2:4129
-828:2:4137
-829:2:4142
-830:2:4146
-831:2:4147
-832:2:4155
-833:2:4156
-834:2:4160
-835:2:4161
-836:2:4155
-837:2:4156
-838:2:4160
-839:2:4161
-840:2:4169
-841:2:4174
-842:2:4175
-843:2:4186
-844:2:4187
-845:2:4188
-846:2:4199
-847:2:4204
-848:2:4205
-849:2:4216
-850:2:4217
-851:2:4218
-852:2:4216
-853:2:4217
-854:2:4218
-855:2:4229
-856:0:4533
-857:2:3127
-858:0:4533
-859:1:1028
-860:1:1029
-861:1:1033
-862:1:1034
-863:1:1042
-864:1:1043
-865:1:1047
-866:1:1048
-867:1:1056
-868:1:1061
-869:1:1065
-870:1:1066
-871:1:1074
-872:1:1075
-873:1:1079
-874:1:1080
-875:1:1074
-876:1:1075
-877:1:1079
-878:1:1080
-879:1:1088
-880:1:1093
-881:1:1094
-882:1:1105
-883:1:1106
-884:1:1107
-885:1:1118
-886:1:1123
-887:1:1124
-888:1:1135
-889:1:1136
-890:1:1137
-891:1:1135
-892:1:1136
-893:1:1137
-894:1:1148
-895:1:1155
-896:1:1159
-897:0:4533
-898:1:11
-899:0:4533
-900:2:3975
-901:2:3976
-902:2:3980
-903:2:3981
-904:2:3989
-905:2:3990
-906:2:3994
-907:2:3995
-908:2:4003
-909:2:4008
-910:2:4012
-911:2:4013
-912:2:4021
-913:2:4022
-914:2:4026
-915:2:4027
-916:2:4021
-917:2:4022
-918:2:4026
-919:2:4027
-920:2:4035
-921:2:4040
-922:2:4041
-923:2:4052
-924:2:4053
-925:2:4054
-926:2:4065
-927:2:4070
-928:2:4071
-929:2:4082
-930:2:4083
-931:2:4084
-932:2:4082
-933:2:4083
-934:2:4084
-935:2:4095
-936:2:4103
-937:0:4533
-938:2:3127
-939:0:4533
-940:2:4109
-941:2:4110
-942:2:4114
-943:2:4115
-944:2:4123
-945:2:4124
-946:2:4128
-947:2:4129
-948:2:4137
-949:2:4142
-950:2:4146
-951:2:4147
-952:2:4155
-953:2:4156
-954:2:4160
-955:2:4161
-956:2:4155
-957:2:4156
-958:2:4160
-959:2:4161
-960:2:4169
-961:2:4174
-962:2:4175
-963:2:4186
-964:2:4187
-965:2:4188
-966:2:4199
-967:2:4204
-968:2:4205
-969:2:4216
-970:2:4217
-971:2:4218
-972:2:4216
-973:2:4217
-974:2:4218
-975:2:4229
-976:0:4533
-977:2:3127
-978:0:4533
-979:1:1160
-980:1:1161
-981:1:1165
-982:1:1166
-983:1:1174
-984:1:1175
-985:1:1176
-986:1:1188
-987:1:1193
-988:1:1197
-989:1:1198
-990:1:1206
-991:1:1207
-992:1:1211
-993:1:1212
-994:1:1206
-995:1:1207
-996:1:1211
-997:1:1212
-998:1:1220
-999:1:1225
-1000:1:1226
-1001:1:1237
-1002:1:1238
-1003:1:1239
-1004:1:1250
-1005:1:1255
-1006:1:1256
-1007:1:1267
-1008:1:1268
-1009:1:1269
-1010:1:1267
-1011:1:1268
-1012:1:1269
-1013:1:1280
-1014:0:4533
-1015:1:11
-1016:0:4533
-1017:2:3975
-1018:2:3976
-1019:2:3980
-1020:2:3981
-1021:2:3989
-1022:2:3990
-1023:2:3994
-1024:2:3995
-1025:2:4003
-1026:2:4008
-1027:2:4012
-1028:2:4013
-1029:2:4021
-1030:2:4022
-1031:2:4026
-1032:2:4027
-1033:2:4021
-1034:2:4022
-1035:2:4026
-1036:2:4027
-1037:2:4035
-1038:2:4040
-1039:2:4041
-1040:2:4052
-1041:2:4053
-1042:2:4054
-1043:2:4065
-1044:2:4070
-1045:2:4071
-1046:2:4082
-1047:2:4083
-1048:2:4084
-1049:2:4082
-1050:2:4083
-1051:2:4084
-1052:2:4095
-1053:2:4103
-1054:0:4533
-1055:2:3127
-1056:0:4533
-1057:2:4109
-1058:2:4110
-1059:2:4114
-1060:2:4115
-1061:2:4123
-1062:2:4124
-1063:2:4128
-1064:2:4129
-1065:2:4137
-1066:2:4142
-1067:2:4146
-1068:2:4147
-1069:2:4155
-1070:2:4156
-1071:2:4160
-1072:2:4161
-1073:2:4155
-1074:2:4156
-1075:2:4160
-1076:2:4161
-1077:2:4169
-1078:2:4174
-1079:2:4175
-1080:2:4186
-1081:2:4187
-1082:2:4188
-1083:2:4199
-1084:2:4204
-1085:2:4205
-1086:2:4216
-1087:2:4217
-1088:2:4218
-1089:2:4216
-1090:2:4217
-1091:2:4218
-1092:2:4229
-1093:0:4533
-1094:2:3127
-1095:0:4533
-1096:1:1289
-1097:0:4533
-1098:2:3975
-1099:2:3976
-1100:2:3980
-1101:2:3981
-1102:2:3989
-1103:2:3990
-1104:2:3994
-1105:2:3995
-1106:2:4003
-1107:2:4008
-1108:2:4012
-1109:2:4013
-1110:2:4021
-1111:2:4022
-1112:2:4026
-1113:2:4027
-1114:2:4021
-1115:2:4022
-1116:2:4026
-1117:2:4027
-1118:2:4035
-1119:2:4040
-1120:2:4041
-1121:2:4052
-1122:2:4053
-1123:2:4054
-1124:2:4065
-1125:2:4070
-1126:2:4071
-1127:2:4082
-1128:2:4083
-1129:2:4084
-1130:2:4082
-1131:2:4083
-1132:2:4084
-1133:2:4095
-1134:2:4103
-1135:0:4533
-1136:2:3127
-1137:0:4533
-1138:2:4109
-1139:2:4110
-1140:2:4114
-1141:2:4115
-1142:2:4123
-1143:2:4124
-1144:2:4128
-1145:2:4129
-1146:2:4137
-1147:2:4142
-1148:2:4146
-1149:2:4147
-1150:2:4155
-1151:2:4156
-1152:2:4160
-1153:2:4161
-1154:2:4155
-1155:2:4156
-1156:2:4160
-1157:2:4161
-1158:2:4169
-1159:2:4174
-1160:2:4175
-1161:2:4186
-1162:2:4187
-1163:2:4188
-1164:2:4199
-1165:2:4204
-1166:2:4205
-1167:2:4216
-1168:2:4217
-1169:2:4218
-1170:2:4216
-1171:2:4217
-1172:2:4218
-1173:2:4229
-1174:0:4533
-1175:2:3127
-1176:0:4533
-1177:1:3023
-1178:1:3030
-1179:1:3031
-1180:1:3038
-1181:1:3043
-1182:1:3050
-1183:1:3051
-1184:1:3050
-1185:1:3051
-1186:1:3058
-1187:1:3062
-1188:0:4533
-1189:2:3975
-1190:2:3976
-1191:2:3980
-1192:2:3981
-1193:2:3989
-1194:2:3990
-1195:2:3994
-1196:2:3995
-1197:2:4003
-1198:2:4008
-1199:2:4012
-1200:2:4013
-1201:2:4021
-1202:2:4022
-1203:2:4026
-1204:2:4027
-1205:2:4021
-1206:2:4022
-1207:2:4026
-1208:2:4027
-1209:2:4035
-1210:2:4040
-1211:2:4041
-1212:2:4052
-1213:2:4053
-1214:2:4054
-1215:2:4065
-1216:2:4070
-1217:2:4071
-1218:2:4082
-1219:2:4083
-1220:2:4084
-1221:2:4082
-1222:2:4083
-1223:2:4084
-1224:2:4095
-1225:2:4103
-1226:0:4533
-1227:2:3127
-1228:0:4533
-1229:2:4109
-1230:2:4110
-1231:2:4114
-1232:2:4115
-1233:2:4123
-1234:2:4124
-1235:2:4128
-1236:2:4129
-1237:2:4137
-1238:2:4142
-1239:2:4146
-1240:2:4147
-1241:2:4155
-1242:2:4156
-1243:2:4160
-1244:2:4161
-1245:2:4155
-1246:2:4156
-1247:2:4160
-1248:2:4161
-1249:2:4169
-1250:2:4174
-1251:2:4175
-1252:2:4186
-1253:2:4187
-1254:2:4188
-1255:2:4199
-1256:2:4204
-1257:2:4205
-1258:2:4216
-1259:2:4217
-1260:2:4218
-1261:2:4216
-1262:2:4217
-1263:2:4218
-1264:2:4229
-1265:0:4533
-1266:2:3127
-1267:0:4533
-1268:1:1291
-1269:1:1292
-1270:0:4533
-1271:1:11
-1272:0:4533
-1273:2:3975
-1274:2:3976
-1275:2:3980
-1276:2:3981
-1277:2:3989
-1278:2:3990
-1279:2:3994
-1280:2:3995
-1281:2:4003
-1282:2:4008
-1283:2:4012
-1284:2:4013
-1285:2:4021
-1286:2:4022
-1287:2:4026
-1288:2:4027
-1289:2:4021
-1290:2:4022
-1291:2:4026
-1292:2:4027
-1293:2:4035
-1294:2:4040
-1295:2:4041
-1296:2:4052
-1297:2:4053
-1298:2:4054
-1299:2:4065
-1300:2:4070
-1301:2:4071
-1302:2:4082
-1303:2:4083
-1304:2:4084
-1305:2:4082
-1306:2:4083
-1307:2:4084
-1308:2:4095
-1309:2:4103
-1310:0:4533
-1311:2:3127
-1312:0:4533
-1313:2:4109
-1314:2:4110
-1315:2:4114
-1316:2:4115
-1317:2:4123
-1318:2:4124
-1319:2:4128
-1320:2:4129
-1321:2:4137
-1322:2:4142
-1323:2:4146
-1324:2:4147
-1325:2:4155
-1326:2:4156
-1327:2:4160
-1328:2:4161
-1329:2:4155
-1330:2:4156
-1331:2:4160
-1332:2:4161
-1333:2:4169
-1334:2:4174
-1335:2:4175
-1336:2:4186
-1337:2:4187
-1338:2:4188
-1339:2:4199
-1340:2:4204
-1341:2:4205
-1342:2:4216
-1343:2:4217
-1344:2:4218
-1345:2:4216
-1346:2:4217
-1347:2:4218
-1348:2:4229
-1349:0:4533
-1350:2:3127
-1351:0:4533
-1352:1:1293
-1353:1:1294
-1354:1:1298
-1355:1:1299
-1356:1:1307
-1357:1:1308
-1358:1:1312
-1359:1:1313
-1360:1:1321
-1361:1:1326
-1362:1:1330
-1363:1:1331
-1364:1:1339
-1365:1:1340
-1366:1:1344
-1367:1:1345
-1368:1:1339
-1369:1:1340
-1370:1:1344
-1371:1:1345
-1372:1:1353
-1373:1:1358
-1374:1:1359
-1375:1:1370
-1376:1:1371
-1377:1:1372
-1378:1:1383
-1379:1:1388
-1380:1:1389
-1381:1:1400
-1382:1:1401
-1383:1:1402
-1384:1:1400
-1385:1:1401
-1386:1:1402
-1387:1:1413
-1388:0:4533
-1389:1:11
-1390:0:4533
-1391:2:3975
-1392:2:3976
-1393:2:3980
-1394:2:3981
-1395:2:3989
-1396:2:3990
-1397:2:3994
-1398:2:3995
-1399:2:4003
-1400:2:4008
-1401:2:4012
-1402:2:4013
-1403:2:4021
-1404:2:4022
-1405:2:4026
-1406:2:4027
-1407:2:4021
-1408:2:4022
-1409:2:4026
-1410:2:4027
-1411:2:4035
-1412:2:4040
-1413:2:4041
-1414:2:4052
-1415:2:4053
-1416:2:4054
-1417:2:4065
-1418:2:4070
-1419:2:4071
-1420:2:4082
-1421:2:4083
-1422:2:4084
-1423:2:4082
-1424:2:4083
-1425:2:4084
-1426:2:4095
-1427:2:4103
-1428:0:4533
-1429:2:3127
-1430:0:4533
-1431:2:4109
-1432:2:4110
-1433:2:4114
-1434:2:4115
-1435:2:4123
-1436:2:4124
-1437:2:4128
-1438:2:4129
-1439:2:4137
-1440:2:4142
-1441:2:4146
-1442:2:4147
-1443:2:4155
-1444:2:4156
-1445:2:4160
-1446:2:4161
-1447:2:4155
-1448:2:4156
-1449:2:4160
-1450:2:4161
-1451:2:4169
-1452:2:4174
-1453:2:4175
-1454:2:4186
-1455:2:4187
-1456:2:4188
-1457:2:4199
-1458:2:4204
-1459:2:4205
-1460:2:4216
-1461:2:4217
-1462:2:4218
-1463:2:4216
-1464:2:4217
-1465:2:4218
-1466:2:4229
-1467:0:4533
-1468:2:3127
-1469:0:4533
-1470:1:1422
-1471:1:1423
-1472:1:1427
-1473:1:1428
-1474:1:1436
-1475:1:1437
-1476:1:1441
-1477:1:1442
-1478:1:1450
-1479:1:1455
-1480:1:1459
-1481:1:1460
-1482:1:1468
-1483:1:1469
-1484:1:1473
-1485:1:1474
-1486:1:1468
-1487:1:1469
-1488:1:1473
-1489:1:1474
-1490:1:1482
-1491:1:1487
-1492:1:1488
-1493:1:1499
-1494:1:1500
-1495:1:1501
-1496:1:1512
-1497:1:1517
-1498:1:1518
-1499:1:1529
-1500:1:1530
-1501:1:1531
-1502:1:1529
-1503:1:1530
-1504:1:1531
-1505:1:1542
-1506:1:1549
-1507:1:1553
-1508:0:4533
-1509:1:11
-1510:0:4533
-1511:2:3975
-1512:2:3976
-1513:2:3980
-1514:2:3981
-1515:2:3989
-1516:2:3990
-1517:2:3994
-1518:2:3995
-1519:2:4003
-1520:2:4008
-1521:2:4012
-1522:2:4013
-1523:2:4021
-1524:2:4022
-1525:2:4026
-1526:2:4027
-1527:2:4021
-1528:2:4022
-1529:2:4026
-1530:2:4027
-1531:2:4035
-1532:2:4040
-1533:2:4041
-1534:2:4052
-1535:2:4053
-1536:2:4054
-1537:2:4065
-1538:2:4070
-1539:2:4071
-1540:2:4082
-1541:2:4083
-1542:2:4084
-1543:2:4082
-1544:2:4083
-1545:2:4084
-1546:2:4095
-1547:2:4103
-1548:0:4533
-1549:2:3127
-1550:0:4533
-1551:2:4109
-1552:2:4110
-1553:2:4114
-1554:2:4115
-1555:2:4123
-1556:2:4124
-1557:2:4128
-1558:2:4129
-1559:2:4137
-1560:2:4142
-1561:2:4146
-1562:2:4147
-1563:2:4155
-1564:2:4156
-1565:2:4160
-1566:2:4161
-1567:2:4155
-1568:2:4156
-1569:2:4160
-1570:2:4161
-1571:2:4169
-1572:2:4174
-1573:2:4175
-1574:2:4186
-1575:2:4187
-1576:2:4188
-1577:2:4199
-1578:2:4204
-1579:2:4205
-1580:2:4216
-1581:2:4217
-1582:2:4218
-1583:2:4216
-1584:2:4217
-1585:2:4218
-1586:2:4229
-1587:0:4533
-1588:2:3127
-1589:0:4533
-1590:1:1554
-1591:1:1558
-1592:1:1559
-1593:1:1563
-1594:1:1564
-1595:1:1572
-1596:1:1580
-1597:1:1581
-1598:1:1585
-1599:1:1589
-1600:1:1590
-1601:1:1585
-1602:1:1589
-1603:1:1590
-1604:1:1594
-1605:1:1601
-1606:1:1608
-1607:1:1609
-1608:1:1616
-1609:1:1621
-1610:1:1628
-1611:1:1629
-1612:1:1628
-1613:1:1629
-1614:1:1636
-1615:0:4533
-1616:1:11
-1617:0:4533
-1618:2:3975
-1619:2:3976
-1620:2:3980
-1621:2:3981
-1622:2:3989
-1623:2:3990
-1624:2:3994
-1625:2:3995
-1626:2:4003
-1627:2:4008
-1628:2:4012
-1629:2:4013
-1630:2:4021
-1631:2:4022
-1632:2:4026
-1633:2:4027
-1634:2:4021
-1635:2:4022
-1636:2:4026
-1637:2:4027
-1638:2:4035
-1639:2:4040
-1640:2:4041
-1641:2:4052
-1642:2:4053
-1643:2:4054
-1644:2:4065
-1645:2:4070
-1646:2:4071
-1647:2:4082
-1648:2:4083
-1649:2:4084
-1650:2:4082
-1651:2:4083
-1652:2:4084
-1653:2:4095
-1654:2:4103
-1655:0:4533
-1656:2:3127
-1657:0:4533
-1658:2:4109
-1659:2:4110
-1660:2:4114
-1661:2:4115
-1662:2:4123
-1663:2:4124
-1664:2:4128
-1665:2:4129
-1666:2:4137
-1667:2:4142
-1668:2:4146
-1669:2:4147
-1670:2:4155
-1671:2:4156
-1672:2:4160
-1673:2:4161
-1674:2:4155
-1675:2:4156
-1676:2:4160
-1677:2:4161
-1678:2:4169
-1679:2:4174
-1680:2:4175
-1681:2:4186
-1682:2:4187
-1683:2:4188
-1684:2:4199
-1685:2:4204
-1686:2:4205
-1687:2:4216
-1688:2:4217
-1689:2:4218
-1690:2:4216
-1691:2:4217
-1692:2:4218
-1693:2:4229
-1694:0:4533
-1695:2:3127
-1696:0:4533
-1697:1:1646
-1698:1:1647
-1699:1:1651
-1700:1:1652
-1701:1:1660
-1702:1:1661
-1703:1:1665
-1704:1:1666
-1705:1:1674
-1706:1:1679
-1707:1:1683
-1708:1:1684
-1709:1:1692
-1710:1:1693
-1711:1:1697
-1712:1:1698
-1713:1:1692
-1714:1:1693
-1715:1:1697
-1716:1:1698
-1717:1:1706
-1718:1:1711
-1719:1:1712
-1720:1:1723
-1721:1:1724
-1722:1:1725
-1723:1:1736
-1724:1:1741
-1725:1:1742
-1726:1:1753
-1727:1:1754
-1728:1:1755
-1729:1:1753
-1730:1:1754
-1731:1:1755
-1732:1:1766
-1733:0:4533
-1734:1:11
-1735:0:4533
-1736:2:3975
-1737:2:3976
-1738:2:3980
-1739:2:3981
-1740:2:3989
-1741:2:3990
-1742:2:3994
-1743:2:3995
-1744:2:4003
-1745:2:4008
-1746:2:4012
-1747:2:4013
-1748:2:4021
-1749:2:4022
-1750:2:4026
-1751:2:4027
-1752:2:4021
-1753:2:4022
-1754:2:4026
-1755:2:4027
-1756:2:4035
-1757:2:4040
-1758:2:4041
-1759:2:4052
-1760:2:4053
-1761:2:4054
-1762:2:4065
-1763:2:4070
-1764:2:4071
-1765:2:4082
-1766:2:4083
-1767:2:4084
-1768:2:4082
-1769:2:4083
-1770:2:4084
-1771:2:4095
-1772:2:4103
-1773:0:4533
-1774:2:3127
-1775:0:4533
-1776:2:4109
-1777:2:4110
-1778:2:4114
-1779:2:4115
-1780:2:4123
-1781:2:4124
-1782:2:4128
-1783:2:4129
-1784:2:4137
-1785:2:4142
-1786:2:4146
-1787:2:4147
-1788:2:4155
-1789:2:4156
-1790:2:4160
-1791:2:4161
-1792:2:4155
-1793:2:4156
-1794:2:4160
-1795:2:4161
-1796:2:4169
-1797:2:4174
-1798:2:4175
-1799:2:4186
-1800:2:4187
-1801:2:4188
-1802:2:4199
-1803:2:4204
-1804:2:4205
-1805:2:4216
-1806:2:4217
-1807:2:4218
-1808:2:4216
-1809:2:4217
-1810:2:4218
-1811:2:4229
-1812:0:4533
-1813:2:3127
-1814:0:4533
-1815:1:1775
-1816:1:1776
-1817:1:1780
-1818:1:1781
-1819:1:1789
-1820:1:1790
-1821:1:1794
-1822:1:1795
-1823:1:1803
-1824:1:1808
-1825:1:1812
-1826:1:1813
-1827:1:1821
-1828:1:1822
-1829:1:1826
-1830:1:1827
-1831:1:1821
-1832:1:1822
-1833:1:1826
-1834:1:1827
-1835:1:1835
-1836:1:1840
-1837:1:1841
-1838:1:1852
-1839:1:1853
-1840:1:1854
-1841:1:1865
-1842:1:1870
-1843:1:1871
-1844:1:1882
-1845:1:1883
-1846:1:1884
-1847:1:1882
-1848:1:1883
-1849:1:1884
-1850:1:1895
-1851:1:1902
-1852:1:1906
-1853:0:4533
-1854:1:11
-1855:0:4533
-1856:2:3975
-1857:2:3976
-1858:2:3980
-1859:2:3981
-1860:2:3989
-1861:2:3990
-1862:2:3994
-1863:2:3995
-1864:2:4003
-1865:2:4008
-1866:2:4012
-1867:2:4013
-1868:2:4021
-1869:2:4022
-1870:2:4026
-1871:2:4027
-1872:2:4021
-1873:2:4022
-1874:2:4026
-1875:2:4027
-1876:2:4035
-1877:2:4040
-1878:2:4041
-1879:2:4052
-1880:2:4053
-1881:2:4054
-1882:2:4065
-1883:2:4070
-1884:2:4071
-1885:2:4082
-1886:2:4083
-1887:2:4084
-1888:2:4082
-1889:2:4083
-1890:2:4084
-1891:2:4095
-1892:2:4103
-1893:0:4533
-1894:2:3127
-1895:0:4533
-1896:2:4109
-1897:2:4110
-1898:2:4114
-1899:2:4115
-1900:2:4123
-1901:2:4124
-1902:2:4128
-1903:2:4129
-1904:2:4137
-1905:2:4142
-1906:2:4146
-1907:2:4147
-1908:2:4155
-1909:2:4156
-1910:2:4160
-1911:2:4161
-1912:2:4155
-1913:2:4156
-1914:2:4160
-1915:2:4161
-1916:2:4169
-1917:2:4174
-1918:2:4175
-1919:2:4186
-1920:2:4187
-1921:2:4188
-1922:2:4199
-1923:2:4204
-1924:2:4205
-1925:2:4216
-1926:2:4217
-1927:2:4218
-1928:2:4216
-1929:2:4217
-1930:2:4218
-1931:2:4229
-1932:0:4533
-1933:2:3127
-1934:0:4533
-1935:1:1907
-1936:1:1908
-1937:1:1912
-1938:1:1913
-1939:1:1921
-1940:1:1922
-1941:1:1923
-1942:1:1935
-1943:1:1940
-1944:1:1944
-1945:1:1945
-1946:1:1953
-1947:1:1954
-1948:1:1958
-1949:1:1959
-1950:1:1953
-1951:1:1954
-1952:1:1958
-1953:1:1959
-1954:1:1967
-1955:1:1972
-1956:1:1973
-1957:1:1984
-1958:1:1985
-1959:1:1986
-1960:1:1997
-1961:1:2002
-1962:1:2003
-1963:1:2014
-1964:1:2015
-1965:1:2016
-1966:1:2014
-1967:1:2015
-1968:1:2016
-1969:1:2027
-1970:0:4533
-1971:1:11
-1972:0:4533
-1973:2:3975
-1974:2:3976
-1975:2:3980
-1976:2:3981
-1977:2:3989
-1978:2:3990
-1979:2:3994
-1980:2:3995
-1981:2:4003
-1982:2:4008
-1983:2:4012
-1984:2:4013
-1985:2:4021
-1986:2:4022
-1987:2:4026
-1988:2:4027
-1989:2:4021
-1990:2:4022
-1991:2:4026
-1992:2:4027
-1993:2:4035
-1994:2:4040
-1995:2:4041
-1996:2:4052
-1997:2:4060
-1998:2:4061
-1999:2:4065
-2000:2:4070
-2001:2:4071
-2002:2:4082
-2003:2:4083
-2004:2:4084
-2005:2:4082
-2006:2:4083
-2007:2:4084
-2008:2:4095
-2009:2:4103
-2010:0:4533
-2011:2:3127
-2012:0:4533
-2013:2:4109
-2014:2:4110
-2015:2:4114
-2016:2:4115
-2017:2:4123
-2018:2:4124
-2019:2:4128
-2020:2:4129
-2021:2:4137
-2022:2:4142
-2023:2:4146
-2024:2:4147
-2025:2:4155
-2026:2:4156
-2027:2:4160
-2028:2:4161
-2029:2:4155
-2030:2:4156
-2031:2:4160
-2032:2:4161
-2033:2:4169
-2034:2:4174
-2035:2:4175
-2036:2:4186
-2037:2:4194
-2038:2:4195
-2039:2:4199
-2040:2:4204
-2041:2:4205
-2042:2:4216
-2043:2:4217
-2044:2:4218
-2045:2:4216
-2046:2:4217
-2047:2:4218
-2048:2:4229
-2049:0:4533
-2050:2:3127
-2051:0:4533
-2052:1:2036
-2053:1:2037
-2054:0:4533
-2055:1:11
-2056:0:4533
-2057:2:3975
-2058:2:3976
-2059:2:3980
-2060:2:3981
-2061:2:3989
-2062:2:3990
-2063:2:3994
-2064:2:3995
-2065:2:4003
-2066:2:4008
-2067:2:4012
-2068:2:4013
-2069:2:4021
-2070:2:4022
-2071:2:4026
-2072:2:4027
-2073:2:4021
-2074:2:4022
-2075:2:4026
-2076:2:4027
-2077:2:4035
-2078:2:4040
-2079:2:4041
-2080:2:4052
-2081:2:4060
-2082:2:4061
-2083:2:4065
-2084:2:4070
-2085:2:4071
-2086:2:4082
-2087:2:4083
-2088:2:4084
-2089:2:4082
-2090:2:4083
-2091:2:4084
-2092:2:4095
-2093:2:4103
-2094:0:4533
-2095:2:3127
-2096:0:4533
-2097:2:4109
-2098:2:4110
-2099:2:4114
-2100:2:4115
-2101:2:4123
-2102:2:4124
-2103:2:4128
-2104:2:4129
-2105:2:4137
-2106:2:4142
-2107:2:4146
-2108:2:4147
-2109:2:4155
-2110:2:4156
-2111:2:4160
-2112:2:4161
-2113:2:4155
-2114:2:4156
-2115:2:4160
-2116:2:4161
-2117:2:4169
-2118:2:4174
-2119:2:4175
-2120:2:4186
-2121:2:4194
-2122:2:4195
-2123:2:4199
-2124:2:4204
-2125:2:4205
-2126:2:4216
-2127:2:4217
-2128:2:4218
-2129:2:4216
-2130:2:4217
-2131:2:4218
-2132:2:4229
-2133:0:4533
-2134:2:3127
-2135:0:4533
-2136:1:2043
-2137:1:2044
-2138:1:2048
-2139:1:2049
-2140:1:2057
-2141:1:2058
-2142:1:2062
-2143:1:2063
-2144:1:2071
-2145:1:2076
-2146:1:2080
-2147:1:2081
-2148:1:2089
-2149:1:2090
-2150:1:2094
-2151:1:2095
-2152:1:2089
-2153:1:2090
-2154:1:2094
-2155:1:2095
-2156:1:2103
-2157:1:2108
-2158:1:2109
-2159:1:2120
-2160:1:2121
-2161:1:2122
-2162:1:2133
-2163:1:2138
-2164:1:2139
-2165:1:2150
-2166:1:2151
-2167:1:2152
-2168:1:2150
-2169:1:2151
-2170:1:2152
-2171:1:2163
-2172:0:4533
-2173:1:11
-2174:0:4533
-2175:2:3975
-2176:2:3976
-2177:2:3980
-2178:2:3981
-2179:2:3989
-2180:2:3990
-2181:2:3994
-2182:2:3995
-2183:2:4003
-2184:2:4008
-2185:2:4012
-2186:2:4013
-2187:2:4021
-2188:2:4022
-2189:2:4026
-2190:2:4027
-2191:2:4021
-2192:2:4022
-2193:2:4026
-2194:2:4027
-2195:2:4035
-2196:2:4040
-2197:2:4041
-2198:2:4052
-2199:2:4060
-2200:2:4061
-2201:2:4065
-2202:2:4070
-2203:2:4071
-2204:2:4082
-2205:2:4083
-2206:2:4084
-2207:2:4082
-2208:2:4083
-2209:2:4084
-2210:2:4095
-2211:2:4103
-2212:0:4533
-2213:2:3127
-2214:0:4533
-2215:2:4109
-2216:2:4110
-2217:2:4114
-2218:2:4115
-2219:2:4123
-2220:2:4124
-2221:2:4128
-2222:2:4129
-2223:2:4137
-2224:2:4142
-2225:2:4146
-2226:2:4147
-2227:2:4155
-2228:2:4156
-2229:2:4160
-2230:2:4161
-2231:2:4155
-2232:2:4156
-2233:2:4160
-2234:2:4161
-2235:2:4169
-2236:2:4174
-2237:2:4175
-2238:2:4186
-2239:2:4194
-2240:2:4195
-2241:2:4199
-2242:2:4204
-2243:2:4205
-2244:2:4216
-2245:2:4217
-2246:2:4218
-2247:2:4216
-2248:2:4217
-2249:2:4218
-2250:2:4229
-2251:0:4533
-2252:2:3127
-2253:0:4533
-2254:1:2172
-2255:1:2173
-2256:1:2177
-2257:1:2178
-2258:1:2186
-2259:1:2187
-2260:1:2191
-2261:1:2192
-2262:1:2200
-2263:1:2205
-2264:1:2209
-2265:1:2210
-2266:1:2218
-2267:1:2219
-2268:1:2223
-2269:1:2224
-2270:1:2218
-2271:1:2219
-2272:1:2223
-2273:1:2224
-2274:1:2232
-2275:1:2237
-2276:1:2238
-2277:1:2249
-2278:1:2250
-2279:1:2251
-2280:1:2262
-2281:1:2267
-2282:1:2268
-2283:1:2279
-2284:1:2280
-2285:1:2281
-2286:1:2279
-2287:1:2280
-2288:1:2281
-2289:1:2292
-2290:1:2299
-2291:0:4533
-2292:1:11
-2293:0:4533
-2294:2:3975
-2295:2:3976
-2296:2:3980
-2297:2:3981
-2298:2:3989
-2299:2:3990
-2300:2:3994
-2301:2:3995
-2302:2:4003
-2303:2:4008
-2304:2:4012
-2305:2:4013
-2306:2:4021
-2307:2:4022
-2308:2:4026
-2309:2:4027
-2310:2:4021
-2311:2:4022
-2312:2:4026
-2313:2:4027
-2314:2:4035
-2315:2:4040
-2316:2:4041
-2317:2:4052
-2318:2:4060
-2319:2:4061
-2320:2:4065
-2321:2:4070
-2322:2:4071
-2323:2:4082
-2324:2:4083
-2325:2:4084
-2326:2:4082
-2327:2:4083
-2328:2:4084
-2329:2:4095
-2330:2:4103
-2331:0:4533
-2332:2:3127
-2333:0:4533
-2334:2:4109
-2335:2:4110
-2336:2:4114
-2337:2:4115
-2338:2:4123
-2339:2:4124
-2340:2:4128
-2341:2:4129
-2342:2:4137
-2343:2:4142
-2344:2:4146
-2345:2:4147
-2346:2:4155
-2347:2:4156
-2348:2:4160
-2349:2:4161
-2350:2:4155
-2351:2:4156
-2352:2:4160
-2353:2:4161
-2354:2:4169
-2355:2:4174
-2356:2:4175
-2357:2:4186
-2358:2:4194
-2359:2:4195
-2360:2:4199
-2361:2:4204
-2362:2:4205
-2363:2:4216
-2364:2:4217
-2365:2:4218
-2366:2:4216
-2367:2:4217
-2368:2:4218
-2369:2:4229
-2370:0:4533
-2371:2:3127
-2372:0:4533
-2373:1:2435
-2374:1:2439
-2375:1:2440
-2376:1:2444
-2377:1:2445
-2378:1:2453
-2379:1:2461
-2380:1:2462
-2381:1:2466
-2382:1:2470
-2383:1:2471
-2384:1:2466
-2385:1:2470
-2386:1:2471
-2387:1:2475
-2388:1:2482
-2389:1:2489
-2390:1:2490
-2391:1:2497
-2392:1:2502
-2393:1:2509
-2394:1:2510
-2395:1:2509
-2396:1:2510
-2397:1:2517
-2398:0:4533
-2399:1:11
-2400:0:4533
-2401:2:3975
-2402:2:3976
-2403:2:3980
-2404:2:3981
-2405:2:3989
-2406:2:3990
-2407:2:3994
-2408:2:3995
-2409:2:4003
-2410:2:4008
-2411:2:4012
-2412:2:4013
-2413:2:4021
-2414:2:4022
-2415:2:4026
-2416:2:4027
-2417:2:4021
-2418:2:4022
-2419:2:4026
-2420:2:4027
-2421:2:4035
-2422:2:4040
-2423:2:4041
-2424:2:4052
-2425:2:4060
-2426:2:4061
-2427:2:4065
-2428:2:4070
-2429:2:4071
-2430:2:4082
-2431:2:4083
-2432:2:4084
-2433:2:4082
-2434:2:4083
-2435:2:4084
-2436:2:4095
-2437:2:4103
-2438:0:4533
-2439:2:3127
-2440:0:4533
-2441:2:4109
-2442:2:4110
-2443:2:4114
-2444:2:4115
-2445:2:4123
-2446:2:4124
-2447:2:4128
-2448:2:4129
-2449:2:4137
-2450:2:4142
-2451:2:4146
-2452:2:4147
-2453:2:4155
-2454:2:4156
-2455:2:4160
-2456:2:4161
-2457:2:4155
-2458:2:4156
-2459:2:4160
-2460:2:4161
-2461:2:4169
-2462:2:4174
-2463:2:4175
-2464:2:4186
-2465:2:4194
-2466:2:4195
-2467:2:4199
-2468:2:4204
-2469:2:4205
-2470:2:4216
-2471:2:4217
-2472:2:4218
-2473:2:4216
-2474:2:4217
-2475:2:4218
-2476:2:4229
-2477:0:4533
-2478:2:3127
-2479:0:4533
-2480:1:2527
-2481:1:2528
-2482:1:2532
-2483:1:2533
-2484:1:2541
-2485:1:2542
-2486:1:2546
-2487:1:2547
-2488:1:2555
-2489:1:2560
-2490:1:2564
-2491:1:2565
-2492:1:2573
-2493:1:2574
-2494:1:2578
-2495:1:2579
-2496:1:2573
-2497:1:2574
-2498:1:2578
-2499:1:2579
-2500:1:2587
-2501:1:2592
-2502:1:2593
-2503:1:2604
-2504:1:2605
-2505:1:2606
-2506:1:2617
-2507:1:2622
-2508:1:2623
-2509:1:2634
-2510:1:2635
-2511:1:2636
-2512:1:2634
-2513:1:2635
-2514:1:2636
-2515:1:2647
-2516:0:4533
-2517:1:11
-2518:0:4533
-2519:2:3975
-2520:2:3976
-2521:2:3980
-2522:2:3981
-2523:2:3989
-2524:2:3990
-2525:2:3994
-2526:2:3995
-2527:2:4003
-2528:2:4008
-2529:2:4012
-2530:2:4013
-2531:2:4021
-2532:2:4022
-2533:2:4026
-2534:2:4027
-2535:2:4021
-2536:2:4022
-2537:2:4026
-2538:2:4027
-2539:2:4035
-2540:2:4040
-2541:2:4041
-2542:2:4052
-2543:2:4060
-2544:2:4061
-2545:2:4065
-2546:2:4070
-2547:2:4071
-2548:2:4082
-2549:2:4083
-2550:2:4084
-2551:2:4082
-2552:2:4083
-2553:2:4084
-2554:2:4095
-2555:2:4103
-2556:0:4533
-2557:2:3127
-2558:0:4533
-2559:2:4109
-2560:2:4110
-2561:2:4114
-2562:2:4115
-2563:2:4123
-2564:2:4124
-2565:2:4128
-2566:2:4129
-2567:2:4137
-2568:2:4142
-2569:2:4146
-2570:2:4147
-2571:2:4155
-2572:2:4156
-2573:2:4160
-2574:2:4161
-2575:2:4155
-2576:2:4156
-2577:2:4160
-2578:2:4161
-2579:2:4169
-2580:2:4174
-2581:2:4175
-2582:2:4186
-2583:2:4194
-2584:2:4195
-2585:2:4199
-2586:2:4204
-2587:2:4205
-2588:2:4216
-2589:2:4217
-2590:2:4218
-2591:2:4216
-2592:2:4217
-2593:2:4218
-2594:2:4229
-2595:0:4533
-2596:2:3127
-2597:0:4533
-2598:1:2656
-2599:0:4533
-2600:2:3975
-2601:2:3976
-2602:2:3980
-2603:2:3981
-2604:2:3989
-2605:2:3990
-2606:2:3994
-2607:2:3995
-2608:2:4003
-2609:2:4008
-2610:2:4012
-2611:2:4013
-2612:2:4021
-2613:2:4022
-2614:2:4026
-2615:2:4027
-2616:2:4021
-2617:2:4022
-2618:2:4026
-2619:2:4027
-2620:2:4035
-2621:2:4040
-2622:2:4041
-2623:2:4052
-2624:2:4060
-2625:2:4061
-2626:2:4065
-2627:2:4070
-2628:2:4071
-2629:2:4082
-2630:2:4083
-2631:2:4084
-2632:2:4082
-2633:2:4083
-2634:2:4084
-2635:2:4095
-2636:2:4103
-2637:0:4533
-2638:2:3127
-2639:0:4533
-2640:2:4109
-2641:2:4110
-2642:2:4114
-2643:2:4115
-2644:2:4123
-2645:2:4124
-2646:2:4128
-2647:2:4129
-2648:2:4137
-2649:2:4142
-2650:2:4146
-2651:2:4147
-2652:2:4155
-2653:2:4156
-2654:2:4160
-2655:2:4161
-2656:2:4155
-2657:2:4156
-2658:2:4160
-2659:2:4161
-2660:2:4169
-2661:2:4174
-2662:2:4175
-2663:2:4186
-2664:2:4194
-2665:2:4195
-2666:2:4199
-2667:2:4204
-2668:2:4205
-2669:2:4216
-2670:2:4217
-2671:2:4218
-2672:2:4216
-2673:2:4217
-2674:2:4218
-2675:2:4229
-2676:0:4533
-2677:2:3127
-2678:0:4533
-2679:1:3066
-2680:1:3073
-2681:1:3074
-2682:1:3081
-2683:1:3086
-2684:1:3093
-2685:1:3094
-2686:1:3093
-2687:1:3094
-2688:1:3101
-2689:1:3105
-2690:0:4533
-2691:2:3975
-2692:2:3976
-2693:2:3980
-2694:2:3981
-2695:2:3989
-2696:2:3990
-2697:2:3994
-2698:2:3995
-2699:2:4003
-2700:2:4008
-2701:2:4012
-2702:2:4013
-2703:2:4021
-2704:2:4022
-2705:2:4026
-2706:2:4027
-2707:2:4021
-2708:2:4022
-2709:2:4026
-2710:2:4027
-2711:2:4035
-2712:2:4040
-2713:2:4041
-2714:2:4052
-2715:2:4060
-2716:2:4061
-2717:2:4065
-2718:2:4070
-2719:2:4071
-2720:2:4082
-2721:2:4083
-2722:2:4084
-2723:2:4082
-2724:2:4083
-2725:2:4084
-2726:2:4095
-2727:2:4103
-2728:0:4533
-2729:2:3127
-2730:0:4533
-2731:2:4109
-2732:2:4110
-2733:2:4114
-2734:2:4115
-2735:2:4123
-2736:2:4124
-2737:2:4128
-2738:2:4129
-2739:2:4137
-2740:2:4142
-2741:2:4146
-2742:2:4147
-2743:2:4155
-2744:2:4156
-2745:2:4160
-2746:2:4161
-2747:2:4155
-2748:2:4156
-2749:2:4160
-2750:2:4161
-2751:2:4169
-2752:2:4174
-2753:2:4175
-2754:2:4186
-2755:2:4194
-2756:2:4195
-2757:2:4199
-2758:2:4204
-2759:2:4205
-2760:2:4216
-2761:2:4217
-2762:2:4218
-2763:2:4216
-2764:2:4217
-2765:2:4218
-2766:2:4229
-2767:0:4533
-2768:2:3127
-2769:0:4533
-2770:1:2658
-2771:1:2659
-2772:0:4533
-2773:1:11
-2774:0:4533
-2775:2:3975
-2776:2:3976
-2777:2:3980
-2778:2:3981
-2779:2:3989
-2780:2:3990
-2781:2:3994
-2782:2:3995
-2783:2:4003
-2784:2:4008
-2785:2:4012
-2786:2:4013
-2787:2:4021
-2788:2:4022
-2789:2:4026
-2790:2:4027
-2791:2:4021
-2792:2:4022
-2793:2:4026
-2794:2:4027
-2795:2:4035
-2796:2:4040
-2797:2:4041
-2798:2:4052
-2799:2:4060
-2800:2:4061
-2801:2:4065
-2802:2:4070
-2803:2:4071
-2804:2:4082
-2805:2:4083
-2806:2:4084
-2807:2:4082
-2808:2:4083
-2809:2:4084
-2810:2:4095
-2811:2:4103
-2812:0:4533
-2813:2:3127
-2814:0:4533
-2815:2:4109
-2816:2:4110
-2817:2:4114
-2818:2:4115
-2819:2:4123
-2820:2:4124
-2821:2:4128
-2822:2:4129
-2823:2:4137
-2824:2:4142
-2825:2:4146
-2826:2:4147
-2827:2:4155
-2828:2:4156
-2829:2:4160
-2830:2:4161
-2831:2:4155
-2832:2:4156
-2833:2:4160
-2834:2:4161
-2835:2:4169
-2836:2:4174
-2837:2:4175
-2838:2:4186
-2839:2:4194
-2840:2:4195
-2841:2:4199
-2842:2:4204
-2843:2:4205
-2844:2:4216
-2845:2:4217
-2846:2:4218
-2847:2:4216
-2848:2:4217
-2849:2:4218
-2850:2:4229
-2851:0:4533
-2852:2:3127
-2853:0:4533
-2854:1:2660
-2855:1:2664
-2856:1:2665
-2857:1:2669
-2858:1:2673
-2859:1:2674
-2860:1:2678
-2861:1:2686
-2862:1:2687
-2863:1:2691
-2864:1:2695
-2865:1:2696
-2866:1:2691
-2867:1:2695
-2868:1:2696
-2869:1:2700
-2870:1:2707
-2871:1:2714
-2872:1:2715
-2873:1:2722
-2874:1:2727
-2875:1:2734
-2876:1:2735
-2877:1:2734
-2878:1:2735
-2879:1:2742
-2880:0:4533
-2881:1:11
-2882:0:4533
-2883:2:3975
-2884:2:3976
-2885:2:3980
-2886:2:3981
-2887:2:3989
-2888:2:3990
-2889:2:3994
-2890:2:3995
-2891:2:4003
-2892:2:4008
-2893:2:4012
-2894:2:4013
-2895:2:4021
-2896:2:4022
-2897:2:4026
-2898:2:4027
-2899:2:4021
-2900:2:4022
-2901:2:4026
-2902:2:4027
-2903:2:4035
-2904:2:4040
-2905:2:4041
-2906:2:4052
-2907:2:4060
-2908:2:4061
-2909:2:4065
-2910:2:4070
-2911:2:4071
-2912:2:4082
-2913:2:4083
-2914:2:4084
-2915:2:4082
-2916:2:4083
-2917:2:4084
-2918:2:4095
-2919:2:4103
-2920:0:4533
-2921:2:3127
-2922:0:4533
-2923:2:4109
-2924:2:4110
-2925:2:4114
-2926:2:4115
-2927:2:4123
-2928:2:4124
-2929:2:4128
-2930:2:4129
-2931:2:4137
-2932:2:4142
-2933:2:4146
-2934:2:4147
-2935:2:4155
-2936:2:4156
-2937:2:4160
-2938:2:4161
-2939:2:4155
-2940:2:4156
-2941:2:4160
-2942:2:4161
-2943:2:4169
-2944:2:4174
-2945:2:4175
-2946:2:4186
-2947:2:4194
-2948:2:4195
-2949:2:4199
-2950:2:4204
-2951:2:4205
-2952:2:4216
-2953:2:4217
-2954:2:4218
-2955:2:4216
-2956:2:4217
-2957:2:4218
-2958:2:4229
-2959:0:4533
-2960:2:3127
-2961:0:4533
-2962:1:2752
-2963:1:2753
-2964:1:2757
-2965:1:2758
-2966:1:2766
-2967:1:2767
-2968:1:2771
-2969:1:2772
-2970:1:2780
-2971:1:2785
-2972:1:2789
-2973:1:2790
-2974:1:2798
-2975:1:2799
-2976:1:2803
-2977:1:2804
-2978:1:2798
-2979:1:2799
-2980:1:2803
-2981:1:2804
-2982:1:2812
-2983:1:2817
-2984:1:2818
-2985:1:2829
-2986:1:2830
-2987:1:2831
-2988:1:2842
-2989:1:2847
-2990:1:2848
-2991:1:2859
-2992:1:2860
-2993:1:2861
-2994:1:2859
-2995:1:2860
-2996:1:2861
-2997:1:2872
-2998:0:4533
-2999:1:11
-3000:0:4533
-3001:2:3975
-3002:2:3976
-3003:2:3980
-3004:2:3981
-3005:2:3989
-3006:2:3990
-3007:2:3994
-3008:2:3995
-3009:2:4003
-3010:2:4008
-3011:2:4012
-3012:2:4013
-3013:2:4021
-3014:2:4022
-3015:2:4026
-3016:2:4027
-3017:2:4021
-3018:2:4022
-3019:2:4026
-3020:2:4027
-3021:2:4035
-3022:2:4040
-3023:2:4041
-3024:2:4052
-3025:2:4060
-3026:2:4061
-3027:2:4065
-3028:2:4070
-3029:2:4071
-3030:2:4082
-3031:2:4083
-3032:2:4084
-3033:2:4082
-3034:2:4083
-3035:2:4084
-3036:2:4095
-3037:2:4103
-3038:0:4533
-3039:2:3127
-3040:0:4533
-3041:2:4109
-3042:2:4110
-3043:2:4114
-3044:2:4115
-3045:2:4123
-3046:2:4124
-3047:2:4128
-3048:2:4129
-3049:2:4137
-3050:2:4142
-3051:2:4146
-3052:2:4147
-3053:2:4155
-3054:2:4156
-3055:2:4160
-3056:2:4161
-3057:2:4155
-3058:2:4156
-3059:2:4160
-3060:2:4161
-3061:2:4169
-3062:2:4174
-3063:2:4175
-3064:2:4186
-3065:2:4194
-3066:2:4195
-3067:2:4199
-3068:2:4204
-3069:2:4205
-3070:2:4216
-3071:2:4217
-3072:2:4218
-3073:2:4216
-3074:2:4217
-3075:2:4218
-3076:2:4229
-3077:0:4533
-3078:2:3127
-3079:0:4533
-3080:1:2881
-3081:1:2882
-3082:1:2886
-3083:1:2887
-3084:1:2895
-3085:1:2896
-3086:1:2900
-3087:1:2901
-3088:1:2909
-3089:1:2914
-3090:1:2918
-3091:1:2919
-3092:1:2927
-3093:1:2928
-3094:1:2932
-3095:1:2933
-3096:1:2927
-3097:1:2928
-3098:1:2932
-3099:1:2933
-3100:1:2941
-3101:1:2946
-3102:1:2947
-3103:1:2958
-3104:1:2959
-3105:1:2960
-3106:1:2971
-3107:1:2976
-3108:1:2977
-3109:1:2988
-3110:1:2989
-3111:1:2990
-3112:1:2988
-3113:1:2989
-3114:1:2990
-3115:1:3001
-3116:1:3008
-3117:1:3012
-3118:0:4533
-3119:1:11
-3120:0:4533
-3121:2:3975
-3122:2:3976
-3123:2:3980
-3124:2:3981
-3125:2:3989
-3126:2:3990
-3127:2:3994
-3128:2:3995
-3129:2:4003
-3130:2:4008
-3131:2:4012
-3132:2:4013
-3133:2:4021
-3134:2:4022
-3135:2:4026
-3136:2:4027
-3137:2:4021
-3138:2:4022
-3139:2:4026
-3140:2:4027
-3141:2:4035
-3142:2:4040
-3143:2:4041
-3144:2:4052
-3145:2:4060
-3146:2:4061
-3147:2:4065
-3148:2:4070
-3149:2:4071
-3150:2:4082
-3151:2:4083
-3152:2:4084
-3153:2:4082
-3154:2:4083
-3155:2:4084
-3156:2:4095
-3157:2:4103
-3158:0:4533
-3159:2:3127
-3160:0:4533
-3161:2:4109
-3162:2:4110
-3163:2:4114
-3164:2:4115
-3165:2:4123
-3166:2:4124
-3167:2:4128
-3168:2:4129
-3169:2:4137
-3170:2:4142
-3171:2:4146
-3172:2:4147
-3173:2:4155
-3174:2:4156
-3175:2:4160
-3176:2:4161
-3177:2:4155
-3178:2:4156
-3179:2:4160
-3180:2:4161
-3181:2:4169
-3182:2:4174
-3183:2:4175
-3184:2:4186
-3185:2:4194
-3186:2:4195
-3187:2:4199
-3188:2:4204
-3189:2:4205
-3190:2:4216
-3191:2:4217
-3192:2:4218
-3193:2:4216
-3194:2:4217
-3195:2:4218
-3196:2:4229
-3197:0:4533
-3198:2:3127
-3199:0:4533
-3200:1:3013
-3201:0:4533
-3202:1:3021
-3203:0:4533
-3204:1:3109
-3205:0:4533
-3206:1:9
-3207:0:4533
-3208:2:3975
-3209:2:3976
-3210:2:3980
-3211:2:3981
-3212:2:3989
-3213:2:3990
-3214:2:3994
-3215:2:3995
-3216:2:4003
-3217:2:4008
-3218:2:4012
-3219:2:4013
-3220:2:4021
-3221:2:4022
-3222:2:4026
-3223:2:4027
-3224:2:4021
-3225:2:4022
-3226:2:4026
-3227:2:4027
-3228:2:4035
-3229:2:4040
-3230:2:4041
-3231:2:4052
-3232:2:4060
-3233:2:4061
-3234:2:4065
-3235:2:4070
-3236:2:4071
-3237:2:4082
-3238:2:4083
-3239:2:4084
-3240:2:4082
-3241:2:4083
-3242:2:4084
-3243:2:4095
-3244:2:4103
-3245:0:4533
-3246:2:3127
-3247:0:4533
-3248:2:4109
-3249:2:4110
-3250:2:4114
-3251:2:4115
-3252:2:4123
-3253:2:4124
-3254:2:4128
-3255:2:4129
-3256:2:4137
-3257:2:4142
-3258:2:4146
-3259:2:4147
-3260:2:4155
-3261:2:4156
-3262:2:4160
-3263:2:4161
-3264:2:4155
-3265:2:4156
-3266:2:4160
-3267:2:4161
-3268:2:4169
-3269:2:4174
-3270:2:4175
-3271:2:4186
-3272:2:4194
-3273:2:4195
-3274:2:4199
-3275:2:4204
-3276:2:4205
-3277:2:4216
-3278:2:4217
-3279:2:4218
-3280:2:4216
-3281:2:4217
-3282:2:4218
-3283:2:4229
-3284:0:4533
-3285:2:3127
-3286:0:4533
-3287:1:10
-3288:0:4533
-3289:1:11
-3290:0:4533
-3291:2:3975
-3292:2:3976
-3293:2:3980
-3294:2:3981
-3295:2:3989
-3296:2:3990
-3297:2:3994
-3298:2:3995
-3299:2:4003
-3300:2:4008
-3301:2:4012
-3302:2:4013
-3303:2:4021
-3304:2:4022
-3305:2:4026
-3306:2:4027
-3307:2:4021
-3308:2:4022
-3309:2:4026
-3310:2:4027
-3311:2:4035
-3312:2:4040
-3313:2:4041
-3314:2:4052
-3315:2:4060
-3316:2:4061
-3317:2:4065
-3318:2:4070
-3319:2:4071
-3320:2:4082
-3321:2:4083
-3322:2:4084
-3323:2:4082
-3324:2:4083
-3325:2:4084
-3326:2:4095
-3327:2:4103
-3328:0:4533
-3329:2:3127
-3330:0:4533
-3331:2:4109
-3332:2:4110
-3333:2:4114
-3334:2:4115
-3335:2:4123
-3336:2:4124
-3337:2:4128
-3338:2:4129
-3339:2:4137
-3340:2:4142
-3341:2:4146
-3342:2:4147
-3343:2:4155
-3344:2:4156
-3345:2:4160
-3346:2:4161
-3347:2:4155
-3348:2:4156
-3349:2:4160
-3350:2:4161
-3351:2:4169
-3352:2:4174
-3353:2:4175
-3354:2:4186
-3355:2:4194
-3356:2:4195
-3357:2:4199
-3358:2:4204
-3359:2:4205
-3360:2:4216
-3361:2:4217
-3362:2:4218
-3363:2:4216
-3364:2:4217
-3365:2:4218
-3366:2:4229
-3367:0:4533
-3368:2:3127
-3369:0:4533
-3370:1:12
-3371:1:13
-3372:1:17
-3373:1:18
-3374:1:26
-3375:1:27
-3376:1:28
-3377:1:40
-3378:1:45
-3379:1:49
-3380:1:50
-3381:1:58
-3382:1:59
-3383:1:63
-3384:1:64
-3385:1:58
-3386:1:59
-3387:1:63
-3388:1:64
-3389:1:72
-3390:1:77
-3391:1:78
-3392:1:89
-3393:1:90
-3394:1:91
-3395:1:102
-3396:1:107
-3397:1:108
-3398:1:119
-3399:1:120
-3400:1:121
-3401:1:119
-3402:1:120
-3403:1:121
-3404:1:132
-3405:0:4533
-3406:1:11
-3407:0:4533
-3408:2:3975
-3409:2:3976
-3410:2:3980
-3411:2:3981
-3412:2:3989
-3413:2:3990
-3414:2:3994
-3415:2:3995
-3416:2:4003
-3417:2:4008
-3418:2:4012
-3419:2:4013
-3420:2:4021
-3421:2:4022
-3422:2:4026
-3423:2:4027
-3424:2:4021
-3425:2:4022
-3426:2:4026
-3427:2:4027
-3428:2:4035
-3429:2:4040
-3430:2:4041
-3431:2:4052
-3432:2:4060
-3433:2:4061
-3434:2:4065
-3435:2:4070
-3436:2:4071
-3437:2:4082
-3438:2:4083
-3439:2:4084
-3440:2:4082
-3441:2:4083
-3442:2:4084
-3443:2:4095
-3444:2:4103
-3445:0:4533
-3446:2:3127
-3447:0:4533
-3448:2:4109
-3449:2:4110
-3450:2:4114
-3451:2:4115
-3452:2:4123
-3453:2:4124
-3454:2:4128
-3455:2:4129
-3456:2:4137
-3457:2:4142
-3458:2:4146
-3459:2:4147
-3460:2:4155
-3461:2:4156
-3462:2:4160
-3463:2:4161
-3464:2:4155
-3465:2:4156
-3466:2:4160
-3467:2:4161
-3468:2:4169
-3469:2:4174
-3470:2:4175
-3471:2:4186
-3472:2:4194
-3473:2:4195
-3474:2:4199
-3475:2:4204
-3476:2:4205
-3477:2:4216
-3478:2:4217
-3479:2:4218
-3480:2:4216
-3481:2:4217
-3482:2:4218
-3483:2:4229
-3484:0:4533
-3485:2:3127
-3486:0:4533
-3487:1:141
-3488:1:142
-3489:0:4533
-3490:1:11
-3491:0:4533
-3492:2:3975
-3493:2:3976
-3494:2:3980
-3495:2:3981
-3496:2:3989
-3497:2:3990
-3498:2:3994
-3499:2:3995
-3500:2:4003
-3501:2:4008
-3502:2:4012
-3503:2:4013
-3504:2:4021
-3505:2:4022
-3506:2:4026
-3507:2:4027
-3508:2:4021
-3509:2:4022
-3510:2:4026
-3511:2:4027
-3512:2:4035
-3513:2:4040
-3514:2:4041
-3515:2:4052
-3516:2:4060
-3517:2:4061
-3518:2:4065
-3519:2:4070
-3520:2:4071
-3521:2:4082
-3522:2:4083
-3523:2:4084
-3524:2:4082
-3525:2:4083
-3526:2:4084
-3527:2:4095
-3528:2:4103
-3529:0:4533
-3530:2:3127
-3531:0:4533
-3532:2:4109
-3533:2:4110
-3534:2:4114
-3535:2:4115
-3536:2:4123
-3537:2:4124
-3538:2:4128
-3539:2:4129
-3540:2:4137
-3541:2:4142
-3542:2:4146
-3543:2:4147
-3544:2:4155
-3545:2:4156
-3546:2:4160
-3547:2:4161
-3548:2:4155
-3549:2:4156
-3550:2:4160
-3551:2:4161
-3552:2:4169
-3553:2:4174
-3554:2:4175
-3555:2:4186
-3556:2:4194
-3557:2:4195
-3558:2:4199
-3559:2:4204
-3560:2:4205
-3561:2:4216
-3562:2:4217
-3563:2:4218
-3564:2:4216
-3565:2:4217
-3566:2:4218
-3567:2:4229
-3568:0:4533
-3569:2:3127
-3570:0:4533
-3571:1:148
-3572:1:149
-3573:1:153
-3574:1:154
-3575:1:162
-3576:1:163
-3577:1:167
-3578:1:168
-3579:1:176
-3580:1:181
-3581:1:185
-3582:1:186
-3583:1:194
-3584:1:195
-3585:1:199
-3586:1:200
-3587:1:194
-3588:1:195
-3589:1:199
-3590:1:200
-3591:1:208
-3592:1:213
-3593:1:214
-3594:1:225
-3595:1:226
-3596:1:227
-3597:1:238
-3598:1:243
-3599:1:244
-3600:1:255
-3601:1:256
-3602:1:257
-3603:1:255
-3604:1:256
-3605:1:257
-3606:1:268
-3607:0:4533
-3608:1:11
-3609:0:4533
-3610:2:3975
-3611:2:3976
-3612:2:3980
-3613:2:3981
-3614:2:3989
-3615:2:3990
-3616:2:3994
-3617:2:3995
-3618:2:4003
-3619:2:4008
-3620:2:4012
-3621:2:4013
-3622:2:4021
-3623:2:4022
-3624:2:4026
-3625:2:4027
-3626:2:4021
-3627:2:4022
-3628:2:4026
-3629:2:4027
-3630:2:4035
-3631:2:4040
-3632:2:4041
-3633:2:4052
-3634:2:4060
-3635:2:4061
-3636:2:4065
-3637:2:4070
-3638:2:4071
-3639:2:4082
-3640:2:4083
-3641:2:4084
-3642:2:4082
-3643:2:4083
-3644:2:4084
-3645:2:4095
-3646:2:4103
-3647:0:4533
-3648:2:3127
-3649:0:4533
-3650:2:4109
-3651:2:4110
-3652:2:4114
-3653:2:4115
-3654:2:4123
-3655:2:4124
-3656:2:4128
-3657:2:4129
-3658:2:4137
-3659:2:4142
-3660:2:4146
-3661:2:4147
-3662:2:4155
-3663:2:4156
-3664:2:4160
-3665:2:4161
-3666:2:4155
-3667:2:4156
-3668:2:4160
-3669:2:4161
-3670:2:4169
-3671:2:4174
-3672:2:4175
-3673:2:4186
-3674:2:4194
-3675:2:4195
-3676:2:4199
-3677:2:4204
-3678:2:4205
-3679:2:4216
-3680:2:4217
-3681:2:4218
-3682:2:4216
-3683:2:4217
-3684:2:4218
-3685:2:4229
-3686:0:4533
-3687:2:3127
-3688:0:4533
-3689:1:277
-3690:1:278
-3691:1:282
-3692:1:283
-3693:1:291
-3694:1:292
-3695:1:296
-3696:1:297
-3697:1:305
-3698:1:310
-3699:1:314
-3700:1:315
-3701:1:323
-3702:1:324
-3703:1:328
-3704:1:329
-3705:1:323
-3706:1:324
-3707:1:328
-3708:1:329
-3709:1:337
-3710:1:342
-3711:1:343
-3712:1:354
-3713:1:355
-3714:1:356
-3715:1:367
-3716:1:372
-3717:1:373
-3718:1:384
-3719:1:385
-3720:1:386
-3721:1:384
-3722:1:385
-3723:1:386
-3724:1:397
-3725:1:404
-3726:0:4533
-3727:1:11
-3728:0:4533
-3729:2:3975
-3730:2:3976
-3731:2:3980
-3732:2:3981
-3733:2:3989
-3734:2:3990
-3735:2:3994
-3736:2:3995
-3737:2:4003
-3738:2:4008
-3739:2:4012
-3740:2:4013
-3741:2:4021
-3742:2:4022
-3743:2:4026
-3744:2:4027
-3745:2:4021
-3746:2:4022
-3747:2:4026
-3748:2:4027
-3749:2:4035
-3750:2:4040
-3751:2:4041
-3752:2:4052
-3753:2:4060
-3754:2:4061
-3755:2:4065
-3756:2:4070
-3757:2:4071
-3758:2:4082
-3759:2:4083
-3760:2:4084
-3761:2:4082
-3762:2:4083
-3763:2:4084
-3764:2:4095
-3765:2:4103
-3766:0:4533
-3767:2:3127
-3768:0:4533
-3769:2:4109
-3770:2:4110
-3771:2:4114
-3772:2:4115
-3773:2:4123
-3774:2:4124
-3775:2:4128
-3776:2:4129
-3777:2:4137
-3778:2:4142
-3779:2:4146
-3780:2:4147
-3781:2:4155
-3782:2:4156
-3783:2:4160
-3784:2:4161
-3785:2:4155
-3786:2:4156
-3787:2:4160
-3788:2:4161
-3789:2:4169
-3790:2:4174
-3791:2:4175
-3792:2:4186
-3793:2:4194
-3794:2:4195
-3795:2:4199
-3796:2:4204
-3797:2:4205
-3798:2:4216
-3799:2:4217
-3800:2:4218
-3801:2:4216
-3802:2:4217
-3803:2:4218
-3804:2:4229
-3805:0:4533
-3806:2:3127
-3807:0:4533
-3808:1:540
-3809:1:544
-3810:1:545
-3811:1:549
-3812:1:550
-3813:1:558
-3814:1:566
-3815:1:567
-3816:1:571
-3817:1:575
-3818:1:576
-3819:1:571
-3820:1:575
-3821:1:576
-3822:1:580
-3823:1:587
-3824:1:594
-3825:1:595
-3826:1:602
-3827:1:607
-3828:1:614
-3829:1:615
-3830:1:614
-3831:1:615
-3832:1:622
-3833:0:4533
-3834:1:11
-3835:0:4533
-3836:2:3975
-3837:2:3976
-3838:2:3980
-3839:2:3981
-3840:2:3989
-3841:2:3990
-3842:2:3994
-3843:2:3995
-3844:2:4003
-3845:2:4008
-3846:2:4012
-3847:2:4013
-3848:2:4021
-3849:2:4022
-3850:2:4026
-3851:2:4027
-3852:2:4021
-3853:2:4022
-3854:2:4026
-3855:2:4027
-3856:2:4035
-3857:2:4040
-3858:2:4041
-3859:2:4052
-3860:2:4060
-3861:2:4061
-3862:2:4065
-3863:2:4070
-3864:2:4071
-3865:2:4082
-3866:2:4083
-3867:2:4084
-3868:2:4082
-3869:2:4083
-3870:2:4084
-3871:2:4095
-3872:2:4103
-3873:0:4533
-3874:2:3127
-3875:0:4533
-3876:2:4109
-3877:2:4110
-3878:2:4114
-3879:2:4115
-3880:2:4123
-3881:2:4124
-3882:2:4128
-3883:2:4129
-3884:2:4137
-3885:2:4142
-3886:2:4146
-3887:2:4147
-3888:2:4155
-3889:2:4156
-3890:2:4160
-3891:2:4161
-3892:2:4155
-3893:2:4156
-3894:2:4160
-3895:2:4161
-3896:2:4169
-3897:2:4174
-3898:2:4175
-3899:2:4186
-3900:2:4194
-3901:2:4195
-3902:2:4199
-3903:2:4204
-3904:2:4205
-3905:2:4216
-3906:2:4217
-3907:2:4218
-3908:2:4216
-3909:2:4217
-3910:2:4218
-3911:2:4229
-3912:0:4533
-3913:2:3127
-3914:0:4533
-3915:1:632
-3916:1:633
-3917:1:637
-3918:1:638
-3919:1:646
-3920:1:647
-3921:1:651
-3922:1:652
-3923:1:660
-3924:1:665
-3925:1:669
-3926:1:670
-3927:1:678
-3928:1:679
-3929:1:683
-3930:1:684
-3931:1:678
-3932:1:679
-3933:1:683
-3934:1:684
-3935:1:692
-3936:1:697
-3937:1:698
-3938:1:709
-3939:1:710
-3940:1:711
-3941:1:722
-3942:1:727
-3943:1:728
-3944:1:739
-3945:1:740
-3946:1:741
-3947:1:739
-3948:1:740
-3949:1:741
-3950:1:752
-3951:0:4533
-3952:1:11
-3953:0:4533
-3954:2:3975
-3955:2:3976
-3956:2:3980
-3957:2:3981
-3958:2:3989
-3959:2:3990
-3960:2:3994
-3961:2:3995
-3962:2:4003
-3963:2:4008
-3964:2:4012
-3965:2:4013
-3966:2:4021
-3967:2:4022
-3968:2:4026
-3969:2:4027
-3970:2:4021
-3971:2:4022
-3972:2:4026
-3973:2:4027
-3974:2:4035
-3975:2:4040
-3976:2:4041
-3977:2:4052
-3978:2:4060
-3979:2:4061
-3980:2:4065
-3981:2:4070
-3982:2:4071
-3983:2:4082
-3984:2:4083
-3985:2:4084
-3986:2:4082
-3987:2:4083
-3988:2:4084
-3989:2:4095
-3990:2:4103
-3991:0:4533
-3992:2:3127
-3993:0:4533
-3994:2:4109
-3995:2:4110
-3996:2:4114
-3997:2:4115
-3998:2:4123
-3999:2:4124
-4000:2:4128
-4001:2:4129
-4002:2:4137
-4003:2:4142
-4004:2:4146
-4005:2:4147
-4006:2:4155
-4007:2:4156
-4008:2:4160
-4009:2:4161
-4010:2:4155
-4011:2:4156
-4012:2:4160
-4013:2:4161
-4014:2:4169
-4015:2:4174
-4016:2:4175
-4017:2:4186
-4018:2:4194
-4019:2:4195
-4020:2:4199
-4021:2:4204
-4022:2:4205
-4023:2:4216
-4024:2:4217
-4025:2:4218
-4026:2:4216
-4027:2:4217
-4028:2:4218
-4029:2:4229
-4030:0:4533
-4031:2:3127
-4032:0:4533
-4033:1:761
-4034:1:764
-4035:1:765
-4036:0:4533
-4037:1:11
-4038:0:4533
-4039:2:3975
-4040:2:3976
-4041:2:3980
-4042:2:3981
-4043:2:3989
-4044:2:3990
-4045:2:3994
-4046:2:3995
-4047:2:4003
-4048:2:4008
-4049:2:4012
-4050:2:4013
-4051:2:4021
-4052:2:4022
-4053:2:4026
-4054:2:4027
-4055:2:4021
-4056:2:4022
-4057:2:4026
-4058:2:4027
-4059:2:4035
-4060:2:4040
-4061:2:4041
-4062:2:4052
-4063:2:4060
-4064:2:4061
-4065:2:4065
-4066:2:4070
-4067:2:4071
-4068:2:4082
-4069:2:4083
-4070:2:4084
-4071:2:4082
-4072:2:4083
-4073:2:4084
-4074:2:4095
-4075:2:4103
-4076:0:4533
-4077:2:3127
-4078:0:4533
-4079:2:4109
-4080:2:4110
-4081:2:4114
-4082:2:4115
-4083:2:4123
-4084:2:4124
-4085:2:4128
-4086:2:4129
-4087:2:4137
-4088:2:4142
-4089:2:4146
-4090:2:4147
-4091:2:4155
-4092:2:4156
-4093:2:4160
-4094:2:4161
-4095:2:4155
-4096:2:4156
-4097:2:4160
-4098:2:4161
-4099:2:4169
-4100:2:4174
-4101:2:4175
-4102:2:4186
-4103:2:4194
-4104:2:4195
-4105:2:4199
-4106:2:4204
-4107:2:4205
-4108:2:4216
-4109:2:4217
-4110:2:4218
-4111:2:4216
-4112:2:4217
-4113:2:4218
-4114:2:4229
-4115:0:4533
-4116:2:3127
-4117:0:4533
-4118:1:768
-4119:1:769
-4120:1:773
-4121:1:774
-4122:1:782
-4123:1:783
-4124:1:787
-4125:1:788
-4126:1:796
-4127:1:801
-4128:1:805
-4129:1:806
-4130:1:814
-4131:1:815
-4132:1:819
-4133:1:820
-4134:1:814
-4135:1:815
-4136:1:819
-4137:1:820
-4138:1:828
-4139:1:833
-4140:1:834
-4141:1:845
-4142:1:846
-4143:1:847
-4144:1:858
-4145:1:863
-4146:1:864
-4147:1:875
-4148:1:876
-4149:1:877
-4150:1:875
-4151:1:876
-4152:1:877
-4153:1:888
-4154:0:4533
-4155:1:11
-4156:0:4533
-4157:2:3975
-4158:2:3976
-4159:2:3980
-4160:2:3981
-4161:2:3989
-4162:2:3990
-4163:2:3994
-4164:2:3995
-4165:2:4003
-4166:2:4008
-4167:2:4012
-4168:2:4013
-4169:2:4021
-4170:2:4022
-4171:2:4026
-4172:2:4027
-4173:2:4021
-4174:2:4022
-4175:2:4026
-4176:2:4027
-4177:2:4035
-4178:2:4040
-4179:2:4041
-4180:2:4052
-4181:2:4060
-4182:2:4061
-4183:2:4065
-4184:2:4070
-4185:2:4071
-4186:2:4082
-4187:2:4083
-4188:2:4084
-4189:2:4082
-4190:2:4083
-4191:2:4084
-4192:2:4095
-4193:2:4103
-4194:0:4533
-4195:2:3127
-4196:0:4533
-4197:2:4109
-4198:2:4110
-4199:2:4114
-4200:2:4115
-4201:2:4123
-4202:2:4124
-4203:2:4128
-4204:2:4129
-4205:2:4137
-4206:2:4142
-4207:2:4146
-4208:2:4147
-4209:2:4155
-4210:2:4156
-4211:2:4160
-4212:2:4161
-4213:2:4155
-4214:2:4156
-4215:2:4160
-4216:2:4161
-4217:2:4169
-4218:2:4174
-4219:2:4175
-4220:2:4186
-4221:2:4194
-4222:2:4195
-4223:2:4199
-4224:2:4204
-4225:2:4205
-4226:2:4216
-4227:2:4217
-4228:2:4218
-4229:2:4216
-4230:2:4217
-4231:2:4218
-4232:2:4229
-4233:0:4533
-4234:2:3127
-4235:0:4533
-4236:1:1028
-4237:1:1029
-4238:1:1033
-4239:1:1034
-4240:1:1042
-4241:1:1043
-4242:1:1047
-4243:1:1048
-4244:1:1056
-4245:1:1061
-4246:1:1065
-4247:1:1066
-4248:1:1074
-4249:1:1075
-4250:1:1079
-4251:1:1080
-4252:1:1074
-4253:1:1075
-4254:1:1079
-4255:1:1080
-4256:1:1088
-4257:1:1093
-4258:1:1094
-4259:1:1105
-4260:1:1106
-4261:1:1107
-4262:1:1118
-4263:1:1123
-4264:1:1124
-4265:1:1135
-4266:1:1136
-4267:1:1137
-4268:1:1135
-4269:1:1136
-4270:1:1137
-4271:1:1148
-4272:1:1155
-4273:1:1159
-4274:0:4533
-4275:1:11
-4276:0:4533
-4277:2:3975
-4278:2:3976
-4279:2:3980
-4280:2:3981
-4281:2:3989
-4282:2:3990
-4283:2:3994
-4284:2:3995
-4285:2:4003
-4286:2:4008
-4287:2:4012
-4288:2:4013
-4289:2:4021
-4290:2:4022
-4291:2:4026
-4292:2:4027
-4293:2:4021
-4294:2:4022
-4295:2:4026
-4296:2:4027
-4297:2:4035
-4298:2:4040
-4299:2:4041
-4300:2:4052
-4301:2:4060
-4302:2:4061
-4303:2:4065
-4304:2:4070
-4305:2:4071
-4306:2:4082
-4307:2:4083
-4308:2:4084
-4309:2:4082
-4310:2:4083
-4311:2:4084
-4312:2:4095
-4313:2:4103
-4314:0:4533
-4315:2:3127
-4316:0:4533
-4317:2:4109
-4318:2:4110
-4319:2:4114
-4320:2:4115
-4321:2:4123
-4322:2:4124
-4323:2:4128
-4324:2:4129
-4325:2:4137
-4326:2:4142
-4327:2:4146
-4328:2:4147
-4329:2:4155
-4330:2:4156
-4331:2:4160
-4332:2:4161
-4333:2:4155
-4334:2:4156
-4335:2:4160
-4336:2:4161
-4337:2:4169
-4338:2:4174
-4339:2:4175
-4340:2:4186
-4341:2:4194
-4342:2:4195
-4343:2:4199
-4344:2:4204
-4345:2:4205
-4346:2:4216
-4347:2:4217
-4348:2:4218
-4349:2:4216
-4350:2:4217
-4351:2:4218
-4352:2:4229
-4353:0:4533
-4354:2:3127
-4355:0:4533
-4356:1:1160
-4357:1:1161
-4358:1:1165
-4359:1:1166
-4360:1:1174
-4361:1:1175
-4362:1:1176
-4363:1:1188
-4364:1:1193
-4365:1:1197
-4366:1:1198
-4367:1:1206
-4368:1:1207
-4369:1:1211
-4370:1:1212
-4371:1:1206
-4372:1:1207
-4373:1:1211
-4374:1:1212
-4375:1:1220
-4376:1:1225
-4377:1:1226
-4378:1:1237
-4379:1:1238
-4380:1:1239
-4381:1:1250
-4382:1:1255
-4383:1:1256
-4384:1:1267
-4385:1:1268
-4386:1:1269
-4387:1:1267
-4388:1:1268
-4389:1:1269
-4390:1:1280
-4391:0:4533
-4392:1:11
-4393:0:4533
-4394:2:3975
-4395:2:3976
-4396:2:3980
-4397:2:3981
-4398:2:3989
-4399:2:3990
-4400:2:3994
-4401:2:3995
-4402:2:4003
-4403:2:4008
-4404:2:4012
-4405:2:4013
-4406:2:4021
-4407:2:4022
-4408:2:4026
-4409:2:4027
-4410:2:4021
-4411:2:4022
-4412:2:4026
-4413:2:4027
-4414:2:4035
-4415:2:4040
-4416:2:4041
-4417:2:4052
-4418:2:4060
-4419:2:4061
-4420:2:4065
-4421:2:4070
-4422:2:4071
-4423:2:4082
-4424:2:4083
-4425:2:4084
-4426:2:4082
-4427:2:4083
-4428:2:4084
-4429:2:4095
-4430:2:4103
-4431:0:4533
-4432:2:3127
-4433:0:4533
-4434:2:4109
-4435:2:4110
-4436:2:4114
-4437:2:4115
-4438:2:4123
-4439:2:4124
-4440:2:4128
-4441:2:4129
-4442:2:4137
-4443:2:4142
-4444:2:4146
-4445:2:4147
-4446:2:4155
-4447:2:4156
-4448:2:4160
-4449:2:4161
-4450:2:4155
-4451:2:4156
-4452:2:4160
-4453:2:4161
-4454:2:4169
-4455:2:4174
-4456:2:4175
-4457:2:4186
-4458:2:4194
-4459:2:4195
-4460:2:4199
-4461:2:4204
-4462:2:4205
-4463:2:4216
-4464:2:4217
-4465:2:4218
-4466:2:4216
-4467:2:4217
-4468:2:4218
-4469:2:4229
-4470:0:4533
-4471:2:3127
-4472:0:4533
-4473:1:1289
-4474:0:4533
-4475:2:3975
-4476:2:3976
-4477:2:3980
-4478:2:3981
-4479:2:3989
-4480:2:3990
-4481:2:3994
-4482:2:3995
-4483:2:4003
-4484:2:4008
-4485:2:4012
-4486:2:4013
-4487:2:4021
-4488:2:4022
-4489:2:4026
-4490:2:4027
-4491:2:4021
-4492:2:4022
-4493:2:4026
-4494:2:4027
-4495:2:4035
-4496:2:4040
-4497:2:4041
-4498:2:4052
-4499:2:4060
-4500:2:4061
-4501:2:4065
-4502:2:4070
-4503:2:4071
-4504:2:4082
-4505:2:4083
-4506:2:4084
-4507:2:4082
-4508:2:4083
-4509:2:4084
-4510:2:4095
-4511:2:4103
-4512:0:4533
-4513:2:3127
-4514:0:4533
-4515:2:4109
-4516:2:4110
-4517:2:4114
-4518:2:4115
-4519:2:4123
-4520:2:4124
-4521:2:4128
-4522:2:4129
-4523:2:4137
-4524:2:4142
-4525:2:4146
-4526:2:4147
-4527:2:4155
-4528:2:4156
-4529:2:4160
-4530:2:4161
-4531:2:4155
-4532:2:4156
-4533:2:4160
-4534:2:4161
-4535:2:4169
-4536:2:4174
-4537:2:4175
-4538:2:4186
-4539:2:4194
-4540:2:4195
-4541:2:4199
-4542:2:4204
-4543:2:4205
-4544:2:4216
-4545:2:4217
-4546:2:4218
-4547:2:4216
-4548:2:4217
-4549:2:4218
-4550:2:4229
-4551:0:4533
-4552:2:3127
-4553:0:4533
-4554:1:3023
-4555:1:3030
-4556:1:3031
-4557:1:3038
-4558:1:3043
-4559:1:3050
-4560:1:3051
-4561:1:3050
-4562:1:3051
-4563:1:3058
-4564:1:3062
-4565:0:4533
-4566:2:3975
-4567:2:3976
-4568:2:3980
-4569:2:3981
-4570:2:3989
-4571:2:3990
-4572:2:3994
-4573:2:3995
-4574:2:4003
-4575:2:4008
-4576:2:4012
-4577:2:4013
-4578:2:4021
-4579:2:4022
-4580:2:4026
-4581:2:4027
-4582:2:4021
-4583:2:4022
-4584:2:4026
-4585:2:4027
-4586:2:4035
-4587:2:4040
-4588:2:4041
-4589:2:4052
-4590:2:4060
-4591:2:4061
-4592:2:4065
-4593:2:4070
-4594:2:4071
-4595:2:4082
-4596:2:4083
-4597:2:4084
-4598:2:4082
-4599:2:4083
-4600:2:4084
-4601:2:4095
-4602:2:4103
-4603:0:4533
-4604:2:3127
-4605:0:4533
-4606:2:4109
-4607:2:4110
-4608:2:4114
-4609:2:4115
-4610:2:4123
-4611:2:4124
-4612:2:4128
-4613:2:4129
-4614:2:4137
-4615:2:4142
-4616:2:4146
-4617:2:4147
-4618:2:4155
-4619:2:4156
-4620:2:4160
-4621:2:4161
-4622:2:4155
-4623:2:4156
-4624:2:4160
-4625:2:4161
-4626:2:4169
-4627:2:4174
-4628:2:4175
-4629:2:4186
-4630:2:4194
-4631:2:4195
-4632:2:4199
-4633:2:4204
-4634:2:4205
-4635:2:4216
-4636:2:4217
-4637:2:4218
-4638:2:4216
-4639:2:4217
-4640:2:4218
-4641:2:4229
-4642:0:4533
-4643:2:3127
-4644:0:4533
-4645:1:1291
-4646:1:1292
-4647:0:4533
-4648:1:11
-4649:0:4533
-4650:2:3975
-4651:2:3976
-4652:2:3980
-4653:2:3981
-4654:2:3989
-4655:2:3990
-4656:2:3994
-4657:2:3995
-4658:2:4003
-4659:2:4008
-4660:2:4012
-4661:2:4013
-4662:2:4021
-4663:2:4022
-4664:2:4026
-4665:2:4027
-4666:2:4021
-4667:2:4022
-4668:2:4026
-4669:2:4027
-4670:2:4035
-4671:2:4040
-4672:2:4041
-4673:2:4052
-4674:2:4060
-4675:2:4061
-4676:2:4065
-4677:2:4070
-4678:2:4071
-4679:2:4082
-4680:2:4083
-4681:2:4084
-4682:2:4082
-4683:2:4083
-4684:2:4084
-4685:2:4095
-4686:2:4103
-4687:0:4533
-4688:2:3127
-4689:0:4533
-4690:2:4109
-4691:2:4110
-4692:2:4114
-4693:2:4115
-4694:2:4123
-4695:2:4124
-4696:2:4128
-4697:2:4129
-4698:2:4137
-4699:2:4142
-4700:2:4146
-4701:2:4147
-4702:2:4155
-4703:2:4156
-4704:2:4160
-4705:2:4161
-4706:2:4155
-4707:2:4156
-4708:2:4160
-4709:2:4161
-4710:2:4169
-4711:2:4174
-4712:2:4175
-4713:2:4186
-4714:2:4194
-4715:2:4195
-4716:2:4199
-4717:2:4204
-4718:2:4205
-4719:2:4216
-4720:2:4217
-4721:2:4218
-4722:2:4216
-4723:2:4217
-4724:2:4218
-4725:2:4229
-4726:0:4533
-4727:2:3127
-4728:0:4533
-4729:1:1293
-4730:1:1294
-4731:1:1298
-4732:1:1299
-4733:1:1307
-4734:1:1308
-4735:1:1312
-4736:1:1313
-4737:1:1321
-4738:1:1326
-4739:1:1330
-4740:1:1331
-4741:1:1339
-4742:1:1340
-4743:1:1344
-4744:1:1345
-4745:1:1339
-4746:1:1340
-4747:1:1344
-4748:1:1345
-4749:1:1353
-4750:1:1358
-4751:1:1359
-4752:1:1370
-4753:1:1371
-4754:1:1372
-4755:1:1383
-4756:1:1388
-4757:1:1389
-4758:1:1400
-4759:1:1401
-4760:1:1402
-4761:1:1400
-4762:1:1401
-4763:1:1402
-4764:1:1413
-4765:0:4533
-4766:1:11
-4767:0:4533
-4768:2:3975
-4769:2:3976
-4770:2:3980
-4771:2:3981
-4772:2:3989
-4773:2:3990
-4774:2:3994
-4775:2:3995
-4776:2:4003
-4777:2:4008
-4778:2:4012
-4779:2:4013
-4780:2:4021
-4781:2:4022
-4782:2:4026
-4783:2:4027
-4784:2:4021
-4785:2:4022
-4786:2:4026
-4787:2:4027
-4788:2:4035
-4789:2:4040
-4790:2:4041
-4791:2:4052
-4792:2:4060
-4793:2:4061
-4794:2:4065
-4795:2:4070
-4796:2:4071
-4797:2:4082
-4798:2:4083
-4799:2:4084
-4800:2:4082
-4801:2:4083
-4802:2:4084
-4803:2:4095
-4804:2:4103
-4805:0:4533
-4806:2:3127
-4807:0:4533
-4808:2:4109
-4809:2:4110
-4810:2:4114
-4811:2:4115
-4812:2:4123
-4813:2:4124
-4814:2:4128
-4815:2:4129
-4816:2:4137
-4817:2:4142
-4818:2:4146
-4819:2:4147
-4820:2:4155
-4821:2:4156
-4822:2:4160
-4823:2:4161
-4824:2:4155
-4825:2:4156
-4826:2:4160
-4827:2:4161
-4828:2:4169
-4829:2:4174
-4830:2:4175
-4831:2:4186
-4832:2:4194
-4833:2:4195
-4834:2:4199
-4835:2:4204
-4836:2:4205
-4837:2:4216
-4838:2:4217
-4839:2:4218
-4840:2:4216
-4841:2:4217
-4842:2:4218
-4843:2:4229
-4844:0:4533
-4845:2:3127
-4846:0:4533
-4847:1:1422
-4848:1:1423
-4849:1:1427
-4850:1:1428
-4851:1:1436
-4852:1:1437
-4853:1:1441
-4854:1:1442
-4855:1:1450
-4856:1:1455
-4857:1:1459
-4858:1:1460
-4859:1:1468
-4860:1:1469
-4861:1:1473
-4862:1:1474
-4863:1:1468
-4864:1:1469
-4865:1:1473
-4866:1:1474
-4867:1:1482
-4868:1:1487
-4869:1:1488
-4870:1:1499
-4871:1:1500
-4872:1:1501
-4873:1:1512
-4874:1:1517
-4875:1:1518
-4876:1:1529
-4877:1:1530
-4878:1:1531
-4879:1:1529
-4880:1:1530
-4881:1:1531
-4882:1:1542
-4883:1:1549
-4884:1:1553
-4885:0:4533
-4886:1:11
-4887:0:4533
-4888:2:3975
-4889:2:3976
-4890:2:3980
-4891:2:3981
-4892:2:3989
-4893:2:3990
-4894:2:3994
-4895:2:3995
-4896:2:4003
-4897:2:4008
-4898:2:4012
-4899:2:4013
-4900:2:4021
-4901:2:4022
-4902:2:4026
-4903:2:4027
-4904:2:4021
-4905:2:4022
-4906:2:4026
-4907:2:4027
-4908:2:4035
-4909:2:4040
-4910:2:4041
-4911:2:4052
-4912:2:4060
-4913:2:4061
-4914:2:4065
-4915:2:4070
-4916:2:4071
-4917:2:4082
-4918:2:4083
-4919:2:4084
-4920:2:4082
-4921:2:4083
-4922:2:4084
-4923:2:4095
-4924:2:4103
-4925:0:4533
-4926:2:3127
-4927:0:4533
-4928:2:4109
-4929:2:4110
-4930:2:4114
-4931:2:4115
-4932:2:4123
-4933:2:4124
-4934:2:4128
-4935:2:4129
-4936:2:4137
-4937:2:4142
-4938:2:4146
-4939:2:4147
-4940:2:4155
-4941:2:4156
-4942:2:4160
-4943:2:4161
-4944:2:4155
-4945:2:4156
-4946:2:4160
-4947:2:4161
-4948:2:4169
-4949:2:4174
-4950:2:4175
-4951:2:4186
-4952:2:4194
-4953:2:4195
-4954:2:4199
-4955:2:4204
-4956:2:4205
-4957:2:4216
-4958:2:4217
-4959:2:4218
-4960:2:4216
-4961:2:4217
-4962:2:4218
-4963:2:4229
-4964:0:4533
-4965:2:3127
-4966:0:4533
-4967:1:1554
-4968:1:1558
-4969:1:1559
-4970:1:1563
-4971:1:1564
-4972:1:1572
-4973:1:1580
-4974:1:1581
-4975:1:1585
-4976:1:1589
-4977:1:1590
-4978:1:1585
-4979:1:1589
-4980:1:1590
-4981:1:1594
-4982:1:1601
-4983:1:1608
-4984:1:1609
-4985:1:1616
-4986:1:1621
-4987:1:1628
-4988:1:1629
-4989:1:1628
-4990:1:1629
-4991:1:1636
-4992:0:4533
-4993:1:11
-4994:0:4533
-4995:2:3975
-4996:2:3976
-4997:2:3980
-4998:2:3981
-4999:2:3989
-5000:2:3990
-5001:2:3994
-5002:2:3995
-5003:2:4003
-5004:2:4008
-5005:2:4012
-5006:2:4013
-5007:2:4021
-5008:2:4022
-5009:2:4026
-5010:2:4027
-5011:2:4021
-5012:2:4022
-5013:2:4026
-5014:2:4027
-5015:2:4035
-5016:2:4040
-5017:2:4041
-5018:2:4052
-5019:2:4060
-5020:2:4061
-5021:2:4065
-5022:2:4070
-5023:2:4071
-5024:2:4082
-5025:2:4083
-5026:2:4084
-5027:2:4082
-5028:2:4083
-5029:2:4084
-5030:2:4095
-5031:2:4103
-5032:0:4533
-5033:2:3127
-5034:0:4533
-5035:2:4109
-5036:2:4110
-5037:2:4114
-5038:2:4115
-5039:2:4123
-5040:2:4124
-5041:2:4128
-5042:2:4129
-5043:2:4137
-5044:2:4142
-5045:2:4146
-5046:2:4147
-5047:2:4155
-5048:2:4156
-5049:2:4160
-5050:2:4161
-5051:2:4155
-5052:2:4156
-5053:2:4160
-5054:2:4161
-5055:2:4169
-5056:2:4174
-5057:2:4175
-5058:2:4186
-5059:2:4194
-5060:2:4195
-5061:2:4199
-5062:2:4204
-5063:2:4205
-5064:2:4216
-5065:2:4217
-5066:2:4218
-5067:2:4216
-5068:2:4217
-5069:2:4218
-5070:2:4229
-5071:0:4533
-5072:2:3127
-5073:0:4533
-5074:1:1646
-5075:1:1647
-5076:1:1651
-5077:1:1652
-5078:1:1660
-5079:1:1661
-5080:1:1665
-5081:1:1666
-5082:1:1674
-5083:1:1679
-5084:1:1683
-5085:1:1684
-5086:1:1692
-5087:1:1693
-5088:1:1697
-5089:1:1698
-5090:1:1692
-5091:1:1693
-5092:1:1697
-5093:1:1698
-5094:1:1706
-5095:1:1711
-5096:1:1712
-5097:1:1723
-5098:1:1724
-5099:1:1725
-5100:1:1736
-5101:1:1741
-5102:1:1742
-5103:1:1753
-5104:1:1754
-5105:1:1755
-5106:1:1753
-5107:1:1754
-5108:1:1755
-5109:1:1766
-5110:0:4533
-5111:1:11
-5112:0:4533
-5113:2:3975
-5114:2:3976
-5115:2:3980
-5116:2:3981
-5117:2:3989
-5118:2:3990
-5119:2:3994
-5120:2:3995
-5121:2:4003
-5122:2:4008
-5123:2:4012
-5124:2:4013
-5125:2:4021
-5126:2:4022
-5127:2:4026
-5128:2:4027
-5129:2:4021
-5130:2:4022
-5131:2:4026
-5132:2:4027
-5133:2:4035
-5134:2:4040
-5135:2:4041
-5136:2:4052
-5137:2:4060
-5138:2:4061
-5139:2:4065
-5140:2:4070
-5141:2:4071
-5142:2:4082
-5143:2:4083
-5144:2:4084
-5145:2:4082
-5146:2:4083
-5147:2:4084
-5148:2:4095
-5149:2:4103
-5150:0:4533
-5151:2:3127
-5152:0:4533
-5153:2:4109
-5154:2:4110
-5155:2:4114
-5156:2:4115
-5157:2:4123
-5158:2:4124
-5159:2:4128
-5160:2:4129
-5161:2:4137
-5162:2:4142
-5163:2:4146
-5164:2:4147
-5165:2:4155
-5166:2:4156
-5167:2:4160
-5168:2:4161
-5169:2:4155
-5170:2:4156
-5171:2:4160
-5172:2:4161
-5173:2:4169
-5174:2:4174
-5175:2:4175
-5176:2:4186
-5177:2:4194
-5178:2:4195
-5179:2:4199
-5180:2:4204
-5181:2:4205
-5182:2:4216
-5183:2:4217
-5184:2:4218
-5185:2:4216
-5186:2:4217
-5187:2:4218
-5188:2:4229
-5189:0:4533
-5190:2:3127
-5191:0:4533
-5192:1:1775
-5193:1:1776
-5194:1:1780
-5195:1:1781
-5196:1:1789
-5197:1:1790
-5198:1:1794
-5199:1:1795
-5200:1:1803
-5201:1:1808
-5202:1:1812
-5203:1:1813
-5204:1:1821
-5205:1:1822
-5206:1:1826
-5207:1:1827
-5208:1:1821
-5209:1:1822
-5210:1:1826
-5211:1:1827
-5212:1:1835
-5213:1:1840
-5214:1:1841
-5215:1:1852
-5216:1:1853
-5217:1:1854
-5218:1:1865
-5219:1:1870
-5220:1:1871
-5221:1:1882
-5222:1:1883
-5223:1:1884
-5224:1:1882
-5225:1:1883
-5226:1:1884
-5227:1:1895
-5228:1:1902
-5229:1:1906
-5230:0:4533
-5231:1:11
-5232:0:4533
-5233:2:3975
-5234:2:3976
-5235:2:3980
-5236:2:3981
-5237:2:3989
-5238:2:3990
-5239:2:3994
-5240:2:3995
-5241:2:4003
-5242:2:4008
-5243:2:4012
-5244:2:4013
-5245:2:4021
-5246:2:4022
-5247:2:4026
-5248:2:4027
-5249:2:4021
-5250:2:4022
-5251:2:4026
-5252:2:4027
-5253:2:4035
-5254:2:4040
-5255:2:4041
-5256:2:4052
-5257:2:4060
-5258:2:4061
-5259:2:4065
-5260:2:4070
-5261:2:4071
-5262:2:4082
-5263:2:4083
-5264:2:4084
-5265:2:4082
-5266:2:4083
-5267:2:4084
-5268:2:4095
-5269:2:4103
-5270:0:4533
-5271:2:3127
-5272:0:4533
-5273:2:4109
-5274:2:4110
-5275:2:4114
-5276:2:4115
-5277:2:4123
-5278:2:4124
-5279:2:4128
-5280:2:4129
-5281:2:4137
-5282:2:4142
-5283:2:4146
-5284:2:4147
-5285:2:4155
-5286:2:4156
-5287:2:4160
-5288:2:4161
-5289:2:4155
-5290:2:4156
-5291:2:4160
-5292:2:4161
-5293:2:4169
-5294:2:4174
-5295:2:4175
-5296:2:4186
-5297:2:4194
-5298:2:4195
-5299:2:4199
-5300:2:4204
-5301:2:4205
-5302:2:4216
-5303:2:4217
-5304:2:4218
-5305:2:4216
-5306:2:4217
-5307:2:4218
-5308:2:4229
-5309:0:4533
-5310:2:3127
-5311:0:4533
-5312:1:1907
-5313:1:1908
-5314:1:1912
-5315:1:1913
-5316:1:1921
-5317:1:1922
-5318:1:1923
-5319:1:1935
-5320:1:1940
-5321:1:1944
-5322:1:1945
-5323:1:1953
-5324:1:1954
-5325:1:1958
-5326:1:1959
-5327:1:1953
-5328:1:1954
-5329:1:1958
-5330:1:1959
-5331:1:1967
-5332:1:1972
-5333:1:1973
-5334:1:1984
-5335:1:1985
-5336:1:1986
-5337:1:1997
-5338:1:2002
-5339:1:2003
-5340:1:2014
-5341:1:2015
-5342:1:2016
-5343:1:2014
-5344:1:2015
-5345:1:2016
-5346:1:2027
-5347:0:4533
-5348:1:11
-5349:0:4533
-5350:2:3975
-5351:2:3976
-5352:2:3980
-5353:2:3981
-5354:2:3989
-5355:2:3990
-5356:2:3994
-5357:2:3995
-5358:2:4003
-5359:2:4008
-5360:2:4012
-5361:2:4013
-5362:2:4021
-5363:2:4022
-5364:2:4026
-5365:2:4027
-5366:2:4021
-5367:2:4022
-5368:2:4026
-5369:2:4027
-5370:2:4035
-5371:2:4040
-5372:2:4041
-5373:2:4052
-5374:2:4060
-5375:2:4061
-5376:2:4065
-5377:2:4070
-5378:2:4071
-5379:2:4082
-5380:2:4083
-5381:2:4084
-5382:2:4082
-5383:2:4083
-5384:2:4084
-5385:2:4095
-5386:2:4103
-5387:0:4533
-5388:2:3127
-5389:0:4533
-5390:2:4109
-5391:2:4110
-5392:2:4114
-5393:2:4115
-5394:2:4123
-5395:2:4124
-5396:2:4128
-5397:2:4129
-5398:2:4137
-5399:2:4142
-5400:2:4146
-5401:2:4147
-5402:2:4155
-5403:2:4156
-5404:2:4160
-5405:2:4161
-5406:2:4155
-5407:2:4156
-5408:2:4160
-5409:2:4161
-5410:2:4169
-5411:2:4174
-5412:2:4175
-5413:2:4186
-5414:2:4194
-5415:2:4195
-5416:2:4199
-5417:2:4204
-5418:2:4205
-5419:2:4216
-5420:2:4217
-5421:2:4218
-5422:2:4216
-5423:2:4217
-5424:2:4218
-5425:2:4229
-5426:0:4533
-5427:2:3127
-5428:0:4533
-5429:1:2036
-5430:1:2037
-5431:0:4533
-5432:1:11
-5433:0:4533
-5434:2:3975
-5435:2:3976
-5436:2:3980
-5437:2:3981
-5438:2:3989
-5439:2:3990
-5440:2:3994
-5441:2:3995
-5442:2:4003
-5443:2:4008
-5444:2:4012
-5445:2:4013
-5446:2:4021
-5447:2:4022
-5448:2:4026
-5449:2:4027
-5450:2:4021
-5451:2:4022
-5452:2:4026
-5453:2:4027
-5454:2:4035
-5455:2:4040
-5456:2:4041
-5457:2:4052
-5458:2:4060
-5459:2:4061
-5460:2:4065
-5461:2:4070
-5462:2:4071
-5463:2:4082
-5464:2:4083
-5465:2:4084
-5466:2:4082
-5467:2:4083
-5468:2:4084
-5469:2:4095
-5470:2:4103
-5471:0:4533
-5472:2:3127
-5473:0:4533
-5474:2:4109
-5475:2:4110
-5476:2:4114
-5477:2:4115
-5478:2:4123
-5479:2:4124
-5480:2:4128
-5481:2:4129
-5482:2:4137
-5483:2:4142
-5484:2:4146
-5485:2:4147
-5486:2:4155
-5487:2:4156
-5488:2:4160
-5489:2:4161
-5490:2:4155
-5491:2:4156
-5492:2:4160
-5493:2:4161
-5494:2:4169
-5495:2:4174
-5496:2:4175
-5497:2:4186
-5498:2:4194
-5499:2:4195
-5500:2:4199
-5501:2:4204
-5502:2:4205
-5503:2:4216
-5504:2:4217
-5505:2:4218
-5506:2:4216
-5507:2:4217
-5508:2:4218
-5509:2:4229
-5510:0:4533
-5511:2:3127
-5512:0:4533
-5513:1:2043
-5514:1:2044
-5515:1:2048
-5516:1:2049
-5517:1:2057
-5518:1:2058
-5519:1:2062
-5520:1:2063
-5521:1:2071
-5522:1:2076
-5523:1:2080
-5524:1:2081
-5525:1:2089
-5526:1:2090
-5527:1:2094
-5528:1:2095
-5529:1:2089
-5530:1:2090
-5531:1:2094
-5532:1:2095
-5533:1:2103
-5534:1:2108
-5535:1:2109
-5536:1:2120
-5537:1:2121
-5538:1:2122
-5539:1:2133
-5540:1:2138
-5541:1:2139
-5542:1:2150
-5543:1:2151
-5544:1:2152
-5545:1:2150
-5546:1:2151
-5547:1:2152
-5548:1:2163
-5549:0:4533
-5550:1:11
-5551:0:4533
-5552:2:3975
-5553:2:3976
-5554:2:3980
-5555:2:3981
-5556:2:3989
-5557:2:3990
-5558:2:3994
-5559:2:3995
-5560:2:4003
-5561:2:4008
-5562:2:4012
-5563:2:4013
-5564:2:4021
-5565:2:4022
-5566:2:4026
-5567:2:4027
-5568:2:4021
-5569:2:4022
-5570:2:4026
-5571:2:4027
-5572:2:4035
-5573:2:4040
-5574:2:4041
-5575:2:4052
-5576:2:4060
-5577:2:4061
-5578:2:4065
-5579:2:4070
-5580:2:4071
-5581:2:4082
-5582:2:4083
-5583:2:4084
-5584:2:4082
-5585:2:4083
-5586:2:4084
-5587:2:4095
-5588:2:4103
-5589:0:4533
-5590:2:3127
-5591:0:4533
-5592:2:4109
-5593:2:4110
-5594:2:4114
-5595:2:4115
-5596:2:4123
-5597:2:4124
-5598:2:4128
-5599:2:4129
-5600:2:4137
-5601:2:4142
-5602:2:4146
-5603:2:4147
-5604:2:4155
-5605:2:4156
-5606:2:4160
-5607:2:4161
-5608:2:4155
-5609:2:4156
-5610:2:4160
-5611:2:4161
-5612:2:4169
-5613:2:4174
-5614:2:4175
-5615:2:4186
-5616:2:4194
-5617:2:4195
-5618:2:4199
-5619:2:4204
-5620:2:4205
-5621:2:4216
-5622:2:4217
-5623:2:4218
-5624:2:4216
-5625:2:4217
-5626:2:4218
-5627:2:4229
-5628:0:4533
-5629:2:3127
-5630:0:4533
-5631:1:2172
-5632:1:2173
-5633:1:2177
-5634:1:2178
-5635:1:2186
-5636:1:2187
-5637:1:2191
-5638:1:2192
-5639:1:2200
-5640:1:2205
-5641:1:2209
-5642:1:2210
-5643:1:2218
-5644:1:2219
-5645:1:2223
-5646:1:2224
-5647:1:2218
-5648:1:2219
-5649:1:2223
-5650:1:2224
-5651:1:2232
-5652:1:2237
-5653:1:2238
-5654:1:2249
-5655:1:2250
-5656:1:2251
-5657:1:2262
-5658:1:2267
-5659:1:2268
-5660:1:2279
-5661:1:2280
-5662:1:2281
-5663:1:2279
-5664:1:2280
-5665:1:2281
-5666:1:2292
-5667:1:2299
-5668:0:4533
-5669:1:11
-5670:0:4533
-5671:2:3975
-5672:2:3976
-5673:2:3980
-5674:2:3981
-5675:2:3989
-5676:2:3990
-5677:2:3994
-5678:2:3995
-5679:2:4003
-5680:2:4008
-5681:2:4012
-5682:2:4013
-5683:2:4021
-5684:2:4022
-5685:2:4026
-5686:2:4027
-5687:2:4021
-5688:2:4022
-5689:2:4026
-5690:2:4027
-5691:2:4035
-5692:2:4040
-5693:2:4041
-5694:2:4052
-5695:2:4060
-5696:2:4061
-5697:2:4065
-5698:2:4070
-5699:2:4071
-5700:2:4082
-5701:2:4083
-5702:2:4084
-5703:2:4082
-5704:2:4083
-5705:2:4084
-5706:2:4095
-5707:2:4103
-5708:0:4533
-5709:2:3127
-5710:0:4533
-5711:2:4109
-5712:2:4110
-5713:2:4114
-5714:2:4115
-5715:2:4123
-5716:2:4124
-5717:2:4128
-5718:2:4129
-5719:2:4137
-5720:2:4142
-5721:2:4146
-5722:2:4147
-5723:2:4155
-5724:2:4156
-5725:2:4160
-5726:2:4161
-5727:2:4155
-5728:2:4156
-5729:2:4160
-5730:2:4161
-5731:2:4169
-5732:2:4174
-5733:2:4175
-5734:2:4186
-5735:2:4194
-5736:2:4195
-5737:2:4199
-5738:2:4204
-5739:2:4205
-5740:2:4216
-5741:2:4217
-5742:2:4218
-5743:2:4216
-5744:2:4217
-5745:2:4218
-5746:2:4229
-5747:0:4533
-5748:2:3127
-5749:0:4533
-5750:1:2435
-5751:1:2439
-5752:1:2440
-5753:1:2444
-5754:1:2445
-5755:1:2453
-5756:1:2461
-5757:1:2462
-5758:1:2466
-5759:1:2470
-5760:1:2471
-5761:1:2466
-5762:1:2470
-5763:1:2471
-5764:1:2475
-5765:1:2482
-5766:1:2489
-5767:1:2490
-5768:1:2497
-5769:1:2502
-5770:1:2509
-5771:1:2510
-5772:1:2509
-5773:1:2510
-5774:1:2517
-5775:0:4533
-5776:1:11
-5777:0:4533
-5778:2:3975
-5779:2:3976
-5780:2:3980
-5781:2:3981
-5782:2:3989
-5783:2:3990
-5784:2:3994
-5785:2:3995
-5786:2:4003
-5787:2:4008
-5788:2:4012
-5789:2:4013
-5790:2:4021
-5791:2:4022
-5792:2:4026
-5793:2:4027
-5794:2:4021
-5795:2:4022
-5796:2:4026
-5797:2:4027
-5798:2:4035
-5799:2:4040
-5800:2:4041
-5801:2:4052
-5802:2:4060
-5803:2:4061
-5804:2:4065
-5805:2:4070
-5806:2:4071
-5807:2:4082
-5808:2:4083
-5809:2:4084
-5810:2:4082
-5811:2:4083
-5812:2:4084
-5813:2:4095
-5814:2:4103
-5815:0:4533
-5816:2:3127
-5817:0:4533
-5818:2:4109
-5819:2:4110
-5820:2:4114
-5821:2:4115
-5822:2:4123
-5823:2:4124
-5824:2:4128
-5825:2:4129
-5826:2:4137
-5827:2:4142
-5828:2:4146
-5829:2:4147
-5830:2:4155
-5831:2:4156
-5832:2:4160
-5833:2:4161
-5834:2:4155
-5835:2:4156
-5836:2:4160
-5837:2:4161
-5838:2:4169
-5839:2:4174
-5840:2:4175
-5841:2:4186
-5842:2:4194
-5843:2:4195
-5844:2:4199
-5845:2:4204
-5846:2:4205
-5847:2:4216
-5848:2:4217
-5849:2:4218
-5850:2:4216
-5851:2:4217
-5852:2:4218
-5853:2:4229
-5854:0:4533
-5855:2:3127
-5856:0:4533
-5857:1:2527
-5858:1:2528
-5859:1:2532
-5860:1:2533
-5861:1:2541
-5862:1:2542
-5863:1:2546
-5864:1:2547
-5865:1:2555
-5866:1:2560
-5867:1:2564
-5868:1:2565
-5869:1:2573
-5870:1:2574
-5871:1:2578
-5872:1:2579
-5873:1:2573
-5874:1:2574
-5875:1:2578
-5876:1:2579
-5877:1:2587
-5878:1:2592
-5879:1:2593
-5880:1:2604
-5881:1:2605
-5882:1:2606
-5883:1:2617
-5884:1:2622
-5885:1:2623
-5886:1:2634
-5887:1:2635
-5888:1:2636
-5889:1:2634
-5890:1:2635
-5891:1:2636
-5892:1:2647
-5893:0:4533
-5894:1:11
-5895:0:4533
-5896:2:3975
-5897:2:3976
-5898:2:3980
-5899:2:3981
-5900:2:3989
-5901:2:3990
-5902:2:3994
-5903:2:3995
-5904:2:4003
-5905:2:4008
-5906:2:4012
-5907:2:4013
-5908:2:4021
-5909:2:4022
-5910:2:4026
-5911:2:4027
-5912:2:4021
-5913:2:4022
-5914:2:4026
-5915:2:4027
-5916:2:4035
-5917:2:4040
-5918:2:4041
-5919:2:4052
-5920:2:4060
-5921:2:4061
-5922:2:4065
-5923:2:4070
-5924:2:4071
-5925:2:4082
-5926:2:4083
-5927:2:4084
-5928:2:4082
-5929:2:4083
-5930:2:4084
-5931:2:4095
-5932:2:4103
-5933:0:4533
-5934:2:3127
-5935:0:4533
-5936:2:4109
-5937:2:4110
-5938:2:4114
-5939:2:4115
-5940:2:4123
-5941:2:4124
-5942:2:4128
-5943:2:4129
-5944:2:4137
-5945:2:4142
-5946:2:4146
-5947:2:4147
-5948:2:4155
-5949:2:4156
-5950:2:4160
-5951:2:4161
-5952:2:4155
-5953:2:4156
-5954:2:4160
-5955:2:4161
-5956:2:4169
-5957:2:4174
-5958:2:4175
-5959:2:4186
-5960:2:4194
-5961:2:4195
-5962:2:4199
-5963:2:4204
-5964:2:4205
-5965:2:4216
-5966:2:4217
-5967:2:4218
-5968:2:4216
-5969:2:4217
-5970:2:4218
-5971:2:4229
-5972:0:4533
-5973:2:3127
-5974:0:4533
-5975:1:2656
-5976:0:4533
-5977:2:3975
-5978:2:3976
-5979:2:3980
-5980:2:3981
-5981:2:3989
-5982:2:3990
-5983:2:3994
-5984:2:3995
-5985:2:4003
-5986:2:4008
-5987:2:4012
-5988:2:4013
-5989:2:4021
-5990:2:4022
-5991:2:4026
-5992:2:4027
-5993:2:4021
-5994:2:4022
-5995:2:4026
-5996:2:4027
-5997:2:4035
-5998:2:4040
-5999:2:4041
-6000:2:4052
-6001:2:4060
-6002:2:4061
-6003:2:4065
-6004:2:4070
-6005:2:4071
-6006:2:4082
-6007:2:4083
-6008:2:4084
-6009:2:4082
-6010:2:4083
-6011:2:4084
-6012:2:4095
-6013:2:4103
-6014:0:4533
-6015:2:3127
-6016:0:4533
-6017:2:4109
-6018:2:4110
-6019:2:4114
-6020:2:4115
-6021:2:4123
-6022:2:4124
-6023:2:4128
-6024:2:4129
-6025:2:4137
-6026:2:4142
-6027:2:4146
-6028:2:4147
-6029:2:4155
-6030:2:4156
-6031:2:4160
-6032:2:4161
-6033:2:4155
-6034:2:4156
-6035:2:4160
-6036:2:4161
-6037:2:4169
-6038:2:4174
-6039:2:4175
-6040:2:4186
-6041:2:4194
-6042:2:4195
-6043:2:4199
-6044:2:4204
-6045:2:4205
-6046:2:4216
-6047:2:4217
-6048:2:4218
-6049:2:4216
-6050:2:4217
-6051:2:4218
-6052:2:4229
-6053:0:4533
-6054:2:3127
-6055:0:4533
-6056:1:3066
-6057:1:3073
-6058:1:3074
-6059:1:3081
-6060:1:3086
-6061:1:3093
-6062:1:3094
-6063:1:3093
-6064:1:3094
-6065:1:3101
-6066:1:3105
-6067:0:4533
-6068:2:3975
-6069:2:3976
-6070:2:3980
-6071:2:3981
-6072:2:3989
-6073:2:3990
-6074:2:3994
-6075:2:3995
-6076:2:4003
-6077:2:4008
-6078:2:4012
-6079:2:4013
-6080:2:4021
-6081:2:4022
-6082:2:4026
-6083:2:4027
-6084:2:4021
-6085:2:4022
-6086:2:4026
-6087:2:4027
-6088:2:4035
-6089:2:4040
-6090:2:4041
-6091:2:4052
-6092:2:4060
-6093:2:4061
-6094:2:4065
-6095:2:4070
-6096:2:4071
-6097:2:4082
-6098:2:4083
-6099:2:4084
-6100:2:4082
-6101:2:4083
-6102:2:4084
-6103:2:4095
-6104:2:4103
-6105:0:4533
-6106:2:3127
-6107:0:4533
-6108:2:4109
-6109:2:4110
-6110:2:4114
-6111:2:4115
-6112:2:4123
-6113:2:4124
-6114:2:4128
-6115:2:4129
-6116:2:4137
-6117:2:4142
-6118:2:4146
-6119:2:4147
-6120:2:4155
-6121:2:4156
-6122:2:4160
-6123:2:4161
-6124:2:4155
-6125:2:4156
-6126:2:4160
-6127:2:4161
-6128:2:4169
-6129:2:4174
-6130:2:4175
-6131:2:4186
-6132:2:4194
-6133:2:4195
-6134:2:4199
-6135:2:4204
-6136:2:4205
-6137:2:4216
-6138:2:4217
-6139:2:4218
-6140:2:4216
-6141:2:4217
-6142:2:4218
-6143:2:4229
-6144:0:4533
-6145:2:3127
-6146:0:4533
-6147:1:2658
-6148:1:2659
-6149:0:4533
-6150:1:11
-6151:0:4533
-6152:2:3975
-6153:2:3976
-6154:2:3980
-6155:2:3981
-6156:2:3989
-6157:2:3990
-6158:2:3994
-6159:2:3995
-6160:2:4003
-6161:2:4008
-6162:2:4012
-6163:2:4013
-6164:2:4021
-6165:2:4022
-6166:2:4026
-6167:2:4027
-6168:2:4021
-6169:2:4022
-6170:2:4026
-6171:2:4027
-6172:2:4035
-6173:2:4040
-6174:2:4041
-6175:2:4052
-6176:2:4060
-6177:2:4061
-6178:2:4065
-6179:2:4070
-6180:2:4071
-6181:2:4082
-6182:2:4083
-6183:2:4084
-6184:2:4082
-6185:2:4083
-6186:2:4084
-6187:2:4095
-6188:2:4103
-6189:0:4533
-6190:2:3127
-6191:0:4533
-6192:2:4109
-6193:2:4110
-6194:2:4114
-6195:2:4115
-6196:2:4123
-6197:2:4124
-6198:2:4128
-6199:2:4129
-6200:2:4137
-6201:2:4142
-6202:2:4146
-6203:2:4147
-6204:2:4155
-6205:2:4156
-6206:2:4160
-6207:2:4161
-6208:2:4155
-6209:2:4156
-6210:2:4160
-6211:2:4161
-6212:2:4169
-6213:2:4174
-6214:2:4175
-6215:2:4186
-6216:2:4194
-6217:2:4195
-6218:2:4199
-6219:2:4204
-6220:2:4205
-6221:2:4216
-6222:2:4217
-6223:2:4218
-6224:2:4216
-6225:2:4217
-6226:2:4218
-6227:2:4229
-6228:0:4533
-6229:2:3127
-6230:0:4533
-6231:1:2660
-6232:1:2664
-6233:1:2665
-6234:1:2669
-6235:1:2673
-6236:1:2674
-6237:1:2678
-6238:1:2686
-6239:1:2687
-6240:1:2691
-6241:1:2695
-6242:1:2696
-6243:1:2691
-6244:1:2695
-6245:1:2696
-6246:1:2700
-6247:1:2707
-6248:1:2714
-6249:1:2715
-6250:1:2722
-6251:1:2727
-6252:1:2734
-6253:1:2735
-6254:1:2734
-6255:1:2735
-6256:1:2742
-6257:0:4533
-6258:1:11
-6259:0:4533
-6260:2:3975
-6261:2:3976
-6262:2:3980
-6263:2:3981
-6264:2:3989
-6265:2:3990
-6266:2:3994
-6267:2:3995
-6268:2:4003
-6269:2:4008
-6270:2:4012
-6271:2:4013
-6272:2:4021
-6273:2:4022
-6274:2:4026
-6275:2:4027
-6276:2:4021
-6277:2:4022
-6278:2:4026
-6279:2:4027
-6280:2:4035
-6281:2:4040
-6282:2:4041
-6283:2:4052
-6284:2:4060
-6285:2:4061
-6286:2:4065
-6287:2:4070
-6288:2:4071
-6289:2:4082
-6290:2:4083
-6291:2:4084
-6292:2:4082
-6293:2:4083
-6294:2:4084
-6295:2:4095
-6296:2:4103
-6297:0:4533
-6298:2:3127
-6299:0:4533
-6300:1:2752
-6301:1:2753
-6302:1:2757
-6303:1:2758
-6304:1:2766
-6305:1:2767
-6306:1:2771
-6307:1:2772
-6308:1:2780
-6309:1:2785
-6310:1:2789
-6311:1:2790
-6312:1:2798
-6313:1:2799
-6314:1:2803
-6315:1:2804
-6316:1:2798
-6317:1:2799
-6318:1:2803
-6319:1:2804
-6320:1:2812
-6321:1:2817
-6322:1:2818
-6323:1:2829
-6324:1:2830
-6325:1:2831
-6326:1:2842
-6327:1:2847
-6328:1:2848
-6329:1:2859
-6330:1:2860
-6331:1:2861
-6332:1:2859
-6333:1:2860
-6334:1:2861
-6335:1:2872
-6336:0:4533
-6337:1:11
-6338:0:4533
-6339:1:2881
-6340:1:2882
-6341:1:2886
-6342:1:2887
-6343:1:2895
-6344:1:2896
-6345:1:2900
-6346:1:2901
-6347:1:2909
-6348:1:2914
-6349:1:2918
-6350:1:2919
-6351:1:2927
-6352:1:2928
-6353:1:2932
-6354:1:2933
-6355:1:2927
-6356:1:2928
-6357:1:2932
-6358:1:2933
-6359:1:2941
-6360:1:2946
-6361:1:2947
-6362:1:2958
-6363:1:2959
-6364:1:2960
-6365:1:2971
-6366:1:2976
-6367:1:2977
-6368:1:2988
-6369:1:2989
-6370:1:2990
-6371:1:2988
-6372:1:2989
-6373:1:2990
-6374:1:3001
-6375:1:3008
-6376:1:3012
-6377:0:4533
-6378:1:11
-6379:0:4533
-6380:1:3013
--1:-1:-1
-6381:0:4533
-6382:1:3021
-6383:0:4533
-6384:1:3109
-6385:0:4533
-6386:1:9
-6387:0:4533
-6388:1:10
-6389:0:4533
-6390:1:11
-6391:0:4533
-6392:1:12
-6393:1:13
-6394:1:17
-6395:1:18
-6396:1:26
-6397:1:27
-6398:1:28
-6399:1:40
-6400:1:45
-6401:1:49
-6402:1:50
-6403:1:58
-6404:1:59
-6405:1:63
-6406:1:64
-6407:1:58
-6408:1:59
-6409:1:63
-6410:1:64
-6411:1:72
-6412:1:77
-6413:1:78
-6414:1:89
-6415:1:90
-6416:1:91
-6417:1:102
-6418:1:107
-6419:1:108
-6420:1:119
-6421:1:120
-6422:1:121
-6423:1:119
-6424:1:120
-6425:1:121
-6426:1:132
-6427:0:4533
-6428:1:11
-6429:0:4533
-6430:1:141
-6431:1:142
-6432:0:4533
-6433:1:11
-6434:0:4533
-6435:1:148
-6436:1:149
-6437:1:153
-6438:1:154
-6439:1:162
-6440:1:163
-6441:1:167
-6442:1:168
-6443:1:176
-6444:1:181
-6445:1:185
-6446:1:186
-6447:1:194
-6448:1:195
-6449:1:199
-6450:1:200
-6451:1:194
-6452:1:195
-6453:1:199
-6454:1:200
-6455:1:208
-6456:1:213
-6457:1:214
-6458:1:225
-6459:1:226
-6460:1:227
-6461:1:238
-6462:1:243
-6463:1:244
-6464:1:255
-6465:1:256
-6466:1:257
-6467:1:255
-6468:1:256
-6469:1:257
-6470:1:268
-6471:0:4533
-6472:1:11
-6473:0:4533
-6474:1:277
-6475:1:278
-6476:1:282
-6477:1:283
-6478:1:291
-6479:1:292
-6480:1:296
-6481:1:297
-6482:1:305
-6483:1:310
-6484:1:314
-6485:1:315
-6486:1:323
-6487:1:324
-6488:1:328
-6489:1:329
-6490:1:323
-6491:1:324
-6492:1:328
-6493:1:329
-6494:1:337
-6495:1:342
-6496:1:343
-6497:1:354
-6498:1:355
-6499:1:356
-6500:1:367
-6501:1:372
-6502:1:373
-6503:1:384
-6504:1:385
-6505:1:386
-6506:1:384
-6507:1:385
-6508:1:386
-6509:1:397
-6510:1:404
-6511:0:4533
-6512:1:11
-6513:0:4533
-6514:1:540
-6515:1:544
-6516:1:545
-6517:1:549
-6518:1:550
-6519:1:558
-6520:1:566
-6521:1:567
-6522:1:571
-6523:1:575
-6524:1:576
-6525:1:571
-6526:1:575
-6527:1:576
-6528:1:580
-6529:1:587
-6530:1:594
-6531:1:595
-6532:1:602
-6533:1:607
-6534:1:614
-6535:1:615
-6536:1:614
-6537:1:615
-6538:1:622
-6539:0:4533
-6540:1:11
-6541:0:4533
-6542:1:632
-6543:1:633
-6544:1:637
-6545:1:638
-6546:1:646
-6547:1:647
-6548:1:651
-6549:1:652
-6550:1:660
-6551:1:665
-6552:1:669
-6553:1:670
-6554:1:678
-6555:1:679
-6556:1:683
-6557:1:684
-6558:1:678
-6559:1:679
-6560:1:683
-6561:1:684
-6562:1:692
-6563:1:697
-6564:1:698
-6565:1:709
-6566:1:710
-6567:1:711
-6568:1:722
-6569:1:727
-6570:1:728
-6571:1:739
-6572:1:740
-6573:1:741
-6574:1:739
-6575:1:740
-6576:1:741
-6577:1:752
-6578:0:4533
-6579:1:11
-6580:0:4533
-6581:1:761
-6582:1:764
-6583:1:765
-6584:0:4533
-6585:1:11
-6586:0:4533
-6587:1:768
-6588:1:769
-6589:1:773
-6590:1:774
-6591:1:782
-6592:1:783
-6593:1:787
-6594:1:788
-6595:1:796
-6596:1:801
-6597:1:805
-6598:1:806
-6599:1:814
-6600:1:815
-6601:1:819
-6602:1:820
-6603:1:814
-6604:1:815
-6605:1:819
-6606:1:820
-6607:1:828
-6608:1:833
-6609:1:834
-6610:1:845
-6611:1:846
-6612:1:847
-6613:1:858
-6614:1:863
-6615:1:864
-6616:1:875
-6617:1:876
-6618:1:877
-6619:1:875
-6620:1:876
-6621:1:877
-6622:1:888
-6623:0:4533
-6624:1:11
-6625:0:4533
-6626:1:1028
-6627:1:1029
-6628:1:1033
-6629:1:1034
-6630:1:1042
-6631:1:1043
-6632:1:1047
-6633:1:1048
-6634:1:1056
-6635:1:1061
-6636:1:1065
-6637:1:1066
-6638:1:1074
-6639:1:1075
-6640:1:1079
-6641:1:1080
-6642:1:1074
-6643:1:1075
-6644:1:1079
-6645:1:1080
-6646:1:1088
-6647:1:1093
-6648:1:1094
-6649:1:1105
-6650:1:1106
-6651:1:1107
-6652:1:1118
-6653:1:1123
-6654:1:1124
-6655:1:1135
-6656:1:1136
-6657:1:1137
-6658:1:1135
-6659:1:1136
-6660:1:1137
-6661:1:1148
-6662:1:1155
-6663:1:1159
-6664:0:4533
-6665:1:11
-6666:0:4533
-6667:1:1160
-6668:1:1161
-6669:1:1165
-6670:1:1166
-6671:1:1174
-6672:1:1175
-6673:1:1176
-6674:1:1188
-6675:1:1193
-6676:1:1197
-6677:1:1198
-6678:1:1206
-6679:1:1207
-6680:1:1211
-6681:1:1212
-6682:1:1206
-6683:1:1207
-6684:1:1211
-6685:1:1212
-6686:1:1220
-6687:1:1225
-6688:1:1226
-6689:1:1237
-6690:1:1238
-6691:1:1239
-6692:1:1250
-6693:1:1255
-6694:1:1256
-6695:1:1267
-6696:1:1268
-6697:1:1269
-6698:1:1267
-6699:1:1268
-6700:1:1269
-6701:1:1280
-6702:0:4533
-6703:1:11
-6704:0:4533
-6705:1:1289
-6706:0:4533
-6707:1:3023
-6708:1:3030
-6709:1:3031
-6710:1:3038
-6711:1:3043
-6712:1:3050
-6713:1:3051
-6714:1:3050
-6715:1:3051
-6716:1:3058
-6717:1:3062
-6718:0:4533
-6719:1:1291
-6720:1:1292
-6721:0:4533
-6722:1:11
-6723:0:4533
-6724:1:1293
-6725:1:1294
-6726:1:1298
-6727:1:1299
-6728:1:1307
-6729:1:1308
-6730:1:1312
-6731:1:1313
-6732:1:1321
-6733:1:1326
-6734:1:1330
-6735:1:1331
-6736:1:1339
-6737:1:1340
-6738:1:1344
-6739:1:1345
-6740:1:1339
-6741:1:1340
-6742:1:1344
-6743:1:1345
-6744:1:1353
-6745:1:1358
-6746:1:1359
-6747:1:1370
-6748:1:1371
-6749:1:1372
-6750:1:1383
-6751:1:1388
-6752:1:1389
-6753:1:1400
-6754:1:1401
-6755:1:1402
-6756:1:1400
-6757:1:1401
-6758:1:1402
-6759:1:1413
-6760:0:4533
-6761:1:11
-6762:0:4533
-6763:1:1422
-6764:1:1423
-6765:1:1427
-6766:1:1428
-6767:1:1436
-6768:1:1437
-6769:1:1441
-6770:1:1442
-6771:1:1450
-6772:1:1455
-6773:1:1459
-6774:1:1460
-6775:1:1468
-6776:1:1469
-6777:1:1473
-6778:1:1474
-6779:1:1468
-6780:1:1469
-6781:1:1473
-6782:1:1474
-6783:1:1482
-6784:1:1487
-6785:1:1488
-6786:1:1499
-6787:1:1500
-6788:1:1501
-6789:1:1512
-6790:1:1517
-6791:1:1518
-6792:1:1529
-6793:1:1530
-6794:1:1531
-6795:1:1529
-6796:1:1530
-6797:1:1531
-6798:1:1542
-6799:1:1549
-6800:1:1553
-6801:0:4533
-6802:1:11
-6803:0:4533
-6804:1:1554
-6805:1:1558
-6806:1:1559
-6807:1:1563
-6808:1:1564
-6809:1:1572
-6810:1:1580
-6811:1:1581
-6812:1:1585
-6813:1:1589
-6814:1:1590
-6815:1:1585
-6816:1:1589
-6817:1:1590
-6818:1:1594
-6819:1:1601
-6820:1:1608
-6821:1:1609
-6822:1:1616
-6823:1:1621
-6824:1:1628
-6825:1:1629
-6826:1:1628
-6827:1:1629
-6828:1:1636
-6829:0:4533
-6830:1:11
-6831:0:4533
-6832:1:1646
-6833:1:1647
-6834:1:1651
-6835:1:1652
-6836:1:1660
-6837:1:1661
-6838:1:1665
-6839:1:1666
-6840:1:1674
-6841:1:1679
-6842:1:1683
-6843:1:1684
-6844:1:1692
-6845:1:1693
-6846:1:1697
-6847:1:1698
-6848:1:1692
-6849:1:1693
-6850:1:1697
-6851:1:1698
-6852:1:1706
-6853:1:1711
-6854:1:1712
-6855:1:1723
-6856:1:1724
-6857:1:1725
-6858:1:1736
-6859:1:1741
-6860:1:1742
-6861:1:1753
-6862:1:1754
-6863:1:1755
-6864:1:1753
-6865:1:1754
-6866:1:1755
-6867:1:1766
-6868:0:4533
-6869:1:11
-6870:0:4533
-6871:1:1775
-6872:1:1776
-6873:1:1780
-6874:1:1781
-6875:1:1789
-6876:1:1790
-6877:1:1794
-6878:1:1795
-6879:1:1803
-6880:1:1808
-6881:1:1812
-6882:1:1813
-6883:1:1821
-6884:1:1822
-6885:1:1826
-6886:1:1827
-6887:1:1821
-6888:1:1822
-6889:1:1826
-6890:1:1827
-6891:1:1835
-6892:1:1840
-6893:1:1841
-6894:1:1852
-6895:1:1853
-6896:1:1854
-6897:1:1865
-6898:1:1870
-6899:1:1871
-6900:1:1882
-6901:1:1883
-6902:1:1884
-6903:1:1882
-6904:1:1883
-6905:1:1884
-6906:1:1895
-6907:1:1902
-6908:1:1906
-6909:0:4533
-6910:1:11
-6911:0:4533
-6912:1:1907
-6913:1:1908
-6914:1:1912
-6915:1:1913
-6916:1:1921
-6917:1:1922
-6918:1:1923
-6919:1:1935
-6920:1:1940
-6921:1:1944
-6922:1:1945
-6923:1:1953
-6924:1:1954
-6925:1:1958
-6926:1:1959
-6927:1:1953
-6928:1:1954
-6929:1:1958
-6930:1:1959
-6931:1:1967
-6932:1:1972
-6933:1:1973
-6934:1:1984
-6935:1:1985
-6936:1:1986
-6937:1:1997
-6938:1:2002
-6939:1:2003
-6940:1:2014
-6941:1:2015
-6942:1:2016
-6943:1:2014
-6944:1:2015
-6945:1:2016
-6946:1:2027
-6947:0:4533
-6948:1:11
-6949:0:4533
-6950:1:2036
-6951:1:2037
-6952:0:4533
-6953:1:11
-6954:0:4533
-6955:1:2043
-6956:1:2044
-6957:1:2048
-6958:1:2049
-6959:1:2057
-6960:1:2058
-6961:1:2062
-6962:1:2063
-6963:1:2071
-6964:1:2076
-6965:1:2080
-6966:1:2081
-6967:1:2089
-6968:1:2090
-6969:1:2094
-6970:1:2095
-6971:1:2089
-6972:1:2090
-6973:1:2094
-6974:1:2095
-6975:1:2103
-6976:1:2108
-6977:1:2109
-6978:1:2120
-6979:1:2121
-6980:1:2122
-6981:1:2133
-6982:1:2138
-6983:1:2139
-6984:1:2150
-6985:1:2151
-6986:1:2152
-6987:1:2150
-6988:1:2151
-6989:1:2152
-6990:1:2163
-6991:0:4533
-6992:1:11
-6993:0:4533
-6994:1:2172
-6995:1:2173
-6996:1:2177
-6997:1:2178
-6998:1:2186
-6999:1:2187
-7000:1:2191
-7001:1:2192
-7002:1:2200
-7003:1:2205
-7004:1:2209
-7005:1:2210
-7006:1:2218
-7007:1:2219
-7008:1:2223
-7009:1:2224
-7010:1:2218
-7011:1:2219
-7012:1:2223
-7013:1:2224
-7014:1:2232
-7015:1:2237
-7016:1:2238
-7017:1:2249
-7018:1:2250
-7019:1:2251
-7020:1:2262
-7021:1:2267
-7022:1:2268
-7023:1:2279
-7024:1:2280
-7025:1:2281
-7026:1:2279
-7027:1:2280
-7028:1:2281
-7029:1:2292
-7030:1:2299
-7031:0:4533
-7032:1:11
-7033:0:4533
-7034:1:2435
-7035:1:2439
-7036:1:2440
-7037:1:2444
-7038:1:2445
-7039:1:2453
-7040:1:2461
-7041:1:2462
-7042:1:2466
-7043:1:2470
-7044:1:2471
-7045:1:2466
-7046:1:2470
-7047:1:2471
-7048:1:2475
-7049:1:2482
-7050:1:2489
-7051:1:2490
-7052:1:2497
-7053:1:2502
-7054:1:2509
-7055:1:2510
-7056:1:2509
-7057:1:2510
-7058:1:2517
-7059:0:4533
-7060:1:11
-7061:0:4533
-7062:1:2527
-7063:1:2528
-7064:1:2532
-7065:1:2533
-7066:1:2541
-7067:1:2542
-7068:1:2546
-7069:1:2547
-7070:1:2555
-7071:1:2560
-7072:1:2564
-7073:1:2565
-7074:1:2573
-7075:1:2574
-7076:1:2578
-7077:1:2579
-7078:1:2573
-7079:1:2574
-7080:1:2578
-7081:1:2579
-7082:1:2587
-7083:1:2592
-7084:1:2593
-7085:1:2604
-7086:1:2605
-7087:1:2606
-7088:1:2617
-7089:1:2622
-7090:1:2623
-7091:1:2634
-7092:1:2635
-7093:1:2636
-7094:1:2634
-7095:1:2635
-7096:1:2636
-7097:1:2647
-7098:0:4533
-7099:1:11
-7100:0:4533
-7101:1:2656
-7102:0:4533
-7103:1:3066
-7104:1:3073
-7105:1:3074
-7106:1:3081
-7107:1:3086
-7108:1:3093
-7109:1:3094
-7110:1:3093
-7111:1:3094
-7112:1:3101
-7113:1:3105
-7114:0:4533
-7115:1:2658
-7116:1:2659
-7117:0:4533
-7118:1:11
-7119:0:4533
-7120:1:2660
-7121:1:2664
-7122:1:2665
-7123:1:2669
-7124:1:2673
-7125:1:2674
-7126:1:2678
-7127:1:2686
-7128:1:2687
-7129:1:2691
-7130:1:2695
-7131:1:2696
-7132:1:2691
-7133:1:2695
-7134:1:2696
-7135:1:2700
-7136:1:2707
-7137:1:2714
-7138:1:2715
-7139:1:2722
-7140:1:2727
-7141:1:2734
-7142:1:2735
-7143:1:2734
-7144:1:2735
-7145:1:2742
-7146:0:4533
-7147:1:11
-7148:0:4533
-7149:1:2752
-7150:1:2753
-7151:1:2757
-7152:1:2758
-7153:1:2766
-7154:1:2767
-7155:1:2771
-7156:1:2772
-7157:1:2780
-7158:1:2785
-7159:1:2789
-7160:1:2790
-7161:1:2798
-7162:1:2799
-7163:1:2803
-7164:1:2804
-7165:1:2798
-7166:1:2799
-7167:1:2803
-7168:1:2804
-7169:1:2812
-7170:1:2817
-7171:1:2818
-7172:1:2829
-7173:1:2830
-7174:1:2831
-7175:1:2842
-7176:1:2847
-7177:1:2848
-7178:1:2859
-7179:1:2860
-7180:1:2861
-7181:1:2859
-7182:1:2860
-7183:1:2861
-7184:1:2872
-7185:0:4533
-7186:2:4109
-7187:2:4110
-7188:2:4114
-7189:2:4115
-7190:2:4123
-7191:2:4124
-7192:2:4128
-7193:2:4129
-7194:2:4137
-7195:2:4142
-7196:2:4146
-7197:2:4147
-7198:2:4155
-7199:2:4156
-7200:2:4160
-7201:2:4161
-7202:2:4155
-7203:2:4156
-7204:2:4160
-7205:2:4161
-7206:2:4169
-7207:2:4174
-7208:2:4175
-7209:2:4186
-7210:2:4194
-7211:2:4195
-7212:2:4199
-7213:2:4204
-7214:2:4205
-7215:2:4216
-7216:2:4217
-7217:2:4218
-7218:2:4216
-7219:2:4217
-7220:2:4218
-7221:2:4229
-7222:0:4533
-7223:2:3127
-7224:0:4533
-7225:1:11
-7226:0:4533
-7227:1:2881
-7228:1:2882
-7229:1:2886
-7230:1:2887
-7231:1:2895
-7232:1:2896
-7233:1:2900
-7234:1:2901
-7235:1:2909
-7236:1:2914
-7237:1:2918
-7238:1:2919
-7239:1:2927
-7240:1:2928
-7241:1:2932
-7242:1:2933
-7243:1:2927
-7244:1:2928
-7245:1:2932
-7246:1:2933
-7247:1:2941
-7248:1:2946
-7249:1:2947
-7250:1:2958
-7251:1:2959
-7252:1:2960
-7253:1:2971
-7254:1:2976
-7255:1:2977
-7256:1:2988
-7257:1:2989
-7258:1:2990
-7259:1:2988
-7260:1:2989
-7261:1:2990
-7262:1:3001
-7263:1:3008
-7264:1:3012
-7265:0:4533
-7266:2:3975
-7267:2:3976
-7268:2:3980
-7269:2:3981
-7270:2:3989
-7271:2:3990
-7272:2:3994
-7273:2:3995
-7274:2:4003
-7275:2:4008
-7276:2:4012
-7277:2:4013
-7278:2:4021
-7279:2:4022
-7280:2:4026
-7281:2:4027
-7282:2:4021
-7283:2:4022
-7284:2:4026
-7285:2:4027
-7286:2:4035
-7287:2:4040
-7288:2:4041
-7289:2:4052
-7290:2:4060
-7291:2:4061
-7292:2:4065
-7293:2:4070
-7294:2:4071
-7295:2:4082
-7296:2:4083
-7297:2:4084
-7298:2:4082
-7299:2:4083
-7300:2:4084
-7301:2:4095
-7302:2:4103
-7303:0:4533
-7304:2:3127
-7305:0:4533
-7306:1:11
-7307:0:4533
-7308:2:4109
-7309:2:4110
-7310:2:4114
-7311:2:4115
-7312:2:4123
-7313:2:4124
-7314:2:4128
-7315:2:4129
-7316:2:4137
-7317:2:4142
-7318:2:4146
-7319:2:4147
-7320:2:4155
-7321:2:4156
-7322:2:4160
-7323:2:4161
-7324:2:4155
-7325:2:4156
-7326:2:4160
-7327:2:4161
-7328:2:4169
-7329:2:4174
-7330:2:4175
-7331:2:4186
-7332:2:4194
-7333:2:4195
-7334:2:4199
-7335:2:4204
-7336:2:4205
-7337:2:4216
-7338:2:4217
-7339:2:4218
-7340:2:4216
-7341:2:4217
-7342:2:4218
-7343:2:4229
-7344:0:4533
-7345:2:3127
-7346:0:4533
-7347:2:3975
-7348:2:3976
-7349:2:3980
-7350:2:3981
-7351:2:3989
-7352:2:3990
-7353:2:3994
-7354:2:3995
-7355:2:4003
-7356:2:4008
-7357:2:4012
-7358:2:4013
-7359:2:4021
-7360:2:4022
-7361:2:4026
-7362:2:4027
-7363:2:4021
-7364:2:4022
-7365:2:4026
-7366:2:4027
-7367:2:4035
-7368:2:4040
-7369:2:4041
-7370:2:4052
-7371:2:4060
-7372:2:4061
-7373:2:4065
-7374:2:4070
-7375:2:4071
-7376:2:4082
-7377:2:4083
-7378:2:4084
-7379:2:4082
-7380:2:4083
-7381:2:4084
-7382:2:4095
-7383:2:4103
-7384:0:4533
-7385:2:3127
-7386:0:4533
-7387:1:3013
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/.input.define b/formal-model/urcu-controldataflow-intel-ipi-compress/.input.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/.input.spin b/formal-model/urcu-controldataflow-intel-ipi-compress/.input.spin
deleted file mode 100644 (file)
index 6cccb27..0000000
+++ /dev/null
@@ -1,1341 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/.input.spin.trail b/formal-model/urcu-controldataflow-intel-ipi-compress/.input.spin.trail
deleted file mode 100644 (file)
index e9b06b3..0000000
+++ /dev/null
@@ -1,1699 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:3997
-2:2:2536
-3:2:2541
-4:2:2545
-5:2:2553
-6:2:2557
-7:2:2561
-8:0:3997
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:3997
-16:3:3967
-17:3:3970
-18:3:3977
-19:3:3984
-20:3:3987
-21:3:3991
-22:3:3992
-23:0:3997
-24:3:3994
-25:0:3997
-26:2:2565
-27:0:3997
-28:2:2571
-29:0:3997
-30:2:2572
-31:0:3997
-32:2:2573
-33:0:3997
-34:2:2574
-35:0:3997
-36:2:2575
-37:0:3997
-38:2:2576
-39:2:2577
-40:2:2581
-41:2:2582
-42:2:2590
-43:2:2591
-44:2:2595
-45:2:2596
-46:2:2604
-47:2:2609
-48:2:2613
-49:2:2614
-50:2:2622
-51:2:2623
-52:2:2627
-53:2:2628
-54:2:2622
-55:2:2623
-56:2:2627
-57:2:2628
-58:2:2636
-59:2:2641
-60:2:2648
-61:2:2649
-62:2:2656
-63:2:2661
-64:2:2668
-65:2:2669
-66:2:2668
-67:2:2669
-68:2:2676
-69:2:2686
-70:0:3997
-71:2:2575
-72:0:3997
-73:2:2690
-74:2:2694
-75:2:2695
-76:2:2699
-77:2:2703
-78:2:2704
-79:2:2708
-80:2:2716
-81:2:2717
-82:2:2721
-83:2:2725
-84:2:2726
-85:2:2721
-86:2:2722
-87:2:2730
-88:0:3997
-89:2:2575
-90:0:3997
-91:2:2738
-92:2:2739
-93:2:2740
-94:0:3997
-95:2:2575
-96:0:3997
-97:2:2745
-98:0:3997
-99:2:3572
-100:2:3573
-101:2:3577
-102:2:3581
-103:2:3582
-104:2:3586
-105:2:3591
-106:2:3599
-107:2:3603
-108:2:3604
-109:2:3599
-110:2:3603
-111:2:3604
-112:2:3608
-113:2:3615
-114:2:3622
-115:2:3623
-116:2:3630
-117:2:3635
-118:2:3642
-119:2:3643
-120:2:3642
-121:2:3643
-122:2:3650
-123:2:3654
-124:0:3997
-125:2:3659
-126:0:3997
-127:2:3660
-128:0:3997
-129:2:3661
-130:0:3997
-131:2:3662
-132:0:3997
-133:1:29
-134:0:3997
-135:1:35
-136:0:3997
-137:1:36
-138:0:3997
-139:2:3663
-140:0:3997
-141:1:37
-142:0:3997
-143:2:3662
-144:0:3997
-145:1:38
-146:0:3997
-147:2:3663
-148:0:3997
-149:1:39
-150:0:3997
-151:2:3662
-152:0:3997
-153:1:40
-154:0:3997
-155:2:3663
-156:0:3997
-157:1:41
-158:0:3997
-159:1:42
-160:0:3997
-161:1:43
-162:0:3997
-163:2:3662
-164:0:3997
-165:1:44
-166:0:3997
-167:2:3663
-168:0:3997
-169:1:53
-170:0:3997
-171:2:3662
-172:0:3997
-173:1:57
-174:1:58
-175:1:62
-176:1:66
-177:1:67
-178:1:71
-179:1:79
-180:1:80
-181:1:84
-182:1:88
-183:1:89
-184:1:84
-185:1:88
-186:1:89
-187:1:93
-188:1:100
-189:1:107
-190:1:108
-191:1:115
-192:1:120
-193:1:127
-194:1:128
-195:1:127
-196:1:128
-197:1:135
-198:1:139
-199:0:3997
-200:2:3663
-201:0:3997
-202:1:144
-203:0:3997
-204:2:3664
-205:0:3997
-206:2:3669
-207:0:3997
-208:2:3670
-209:0:3997
-210:2:3678
-211:2:3679
-212:2:3683
-213:2:3687
-214:2:3688
-215:2:3692
-216:2:3700
-217:2:3701
-218:2:3705
-219:2:3709
-220:2:3710
-221:2:3705
-222:2:3709
-223:2:3710
-224:2:3714
-225:2:3721
-226:2:3728
-227:2:3729
-228:2:3736
-229:2:3741
-230:2:3748
-231:2:3749
-232:2:3748
-233:2:3749
-234:2:3756
-235:2:3760
-236:0:3997
-237:2:2747
-238:2:3553
-239:0:3997
-240:2:2575
-241:0:3997
-242:2:2748
-243:0:3997
-244:2:2575
-245:0:3997
-246:2:2751
-247:2:2752
-248:2:2756
-249:2:2757
-250:2:2765
-251:2:2766
-252:2:2770
-253:2:2771
-254:2:2779
-255:2:2784
-256:2:2788
-257:2:2789
-258:2:2797
-259:2:2798
-260:2:2802
-261:2:2803
-262:2:2797
-263:2:2798
-264:2:2802
-265:2:2803
-266:2:2811
-267:2:2816
-268:2:2823
-269:2:2824
-270:2:2831
-271:2:2836
-272:2:2843
-273:2:2844
-274:2:2843
-275:2:2844
-276:2:2851
-277:2:2860
-278:0:3997
-279:2:2575
-280:0:3997
-281:2:2864
-282:2:2865
-283:2:2866
-284:2:2878
-285:2:2879
-286:2:2883
-287:2:2884
-288:2:2892
-289:2:2897
-290:2:2901
-291:2:2902
-292:2:2910
-293:2:2911
-294:2:2915
-295:2:2916
-296:2:2910
-297:2:2911
-298:2:2915
-299:2:2916
-300:2:2924
-301:2:2929
-302:2:2936
-303:2:2937
-304:2:2944
-305:2:2949
-306:2:2956
-307:2:2957
-308:2:2956
-309:2:2957
-310:2:2964
-311:2:2977
-312:2:2978
-313:0:3997
-314:2:2575
-315:0:3997
-316:2:3091
-317:2:3092
-318:2:3096
-319:2:3097
-320:2:3105
-321:2:3106
-322:2:3110
-323:2:3111
-324:2:3119
-325:2:3124
-326:2:3128
-327:2:3129
-328:2:3137
-329:2:3138
-330:2:3142
-331:2:3143
-332:2:3137
-333:2:3138
-334:2:3142
-335:2:3143
-336:2:3151
-337:2:3156
-338:2:3163
-339:2:3164
-340:2:3171
-341:2:3176
-342:2:3183
-343:2:3184
-344:2:3183
-345:2:3184
-346:2:3191
-347:0:3997
-348:2:2575
-349:0:3997
-350:2:3202
-351:2:3203
-352:2:3207
-353:2:3208
-354:2:3216
-355:2:3217
-356:2:3221
-357:2:3222
-358:2:3230
-359:2:3235
-360:2:3239
-361:2:3240
-362:2:3248
-363:2:3249
-364:2:3253
-365:2:3254
-366:2:3248
-367:2:3249
-368:2:3253
-369:2:3254
-370:2:3262
-371:2:3267
-372:2:3274
-373:2:3275
-374:2:3282
-375:2:3287
-376:2:3294
-377:2:3295
-378:2:3294
-379:2:3295
-380:2:3302
-381:2:3311
-382:0:3997
-383:2:2575
-384:0:3997
-385:2:3315
-386:2:3316
-387:2:3317
-388:2:3329
-389:2:3330
-390:2:3334
-391:2:3335
-392:2:3343
-393:2:3348
-394:2:3352
-395:2:3353
-396:2:3361
-397:2:3362
-398:2:3366
-399:2:3367
-400:2:3361
-401:2:3362
-402:2:3366
-403:2:3367
-404:2:3375
-405:2:3380
-406:2:3387
-407:2:3388
-408:2:3395
-409:2:3400
-410:2:3407
-411:2:3408
-412:2:3407
-413:2:3408
-414:2:3415
-415:2:3427
-416:2:3428
-417:0:3997
-418:2:2575
-419:0:3997
-420:2:3541
-421:0:3997
-422:2:3770
-423:2:3771
-424:2:3775
-425:2:3779
-426:2:3780
-427:2:3784
-428:2:3792
-429:2:3793
-430:2:3797
-431:2:3801
-432:2:3802
-433:2:3797
-434:2:3801
-435:2:3802
-436:2:3806
-437:2:3813
-438:2:3820
-439:2:3821
-440:2:3828
-441:2:3833
-442:2:3840
-443:2:3841
-444:2:3840
-445:2:3841
-446:2:3848
-447:2:3852
-448:0:3997
-449:2:3857
-450:0:3997
-451:2:3858
-452:0:3997
-453:2:3859
-454:0:3997
-455:2:3860
-456:0:3997
-457:1:53
-458:0:3997
-459:2:3861
-460:0:3997
-461:1:57
-462:1:58
-463:1:62
-464:1:66
-465:1:67
-466:1:71
-467:1:79
-468:1:80
-469:1:84
-470:1:88
-471:1:89
-472:1:84
-473:1:88
-474:1:89
-475:1:93
-476:1:100
-477:1:107
-478:1:108
-479:1:115
-480:1:120
-481:1:127
-482:1:128
-483:1:127
-484:1:128
-485:1:135
-486:1:139
-487:0:3997
-488:2:3860
-489:0:3997
-490:1:144
-491:0:3997
-492:2:3861
-493:0:3997
-494:2:3862
-495:0:3997
-496:2:3867
-497:0:3997
-498:2:3868
-499:0:3997
-500:2:3876
-501:2:3877
-502:2:3881
-503:2:3885
-504:2:3886
-505:2:3890
-506:2:3898
-507:2:3899
-508:2:3903
-509:2:3907
-510:2:3908
-511:2:3903
-512:2:3907
-513:2:3908
-514:2:3912
-515:2:3919
-516:2:3926
-517:2:3927
-518:2:3934
-519:2:3939
-520:2:3946
-521:2:3947
-522:2:3946
-523:2:3947
-524:2:3954
-525:2:3958
-526:0:3997
-527:2:3543
-528:2:3553
-529:0:3997
-530:2:2575
-531:0:3997
-532:2:3544
-533:2:3545
-534:0:3997
-535:2:2575
-536:0:3997
-537:2:3549
-538:0:3997
-539:2:3557
-540:0:3997
-541:2:2572
-542:0:3997
-543:2:2573
-544:0:3997
-545:2:2574
-546:0:3997
-547:2:2575
-548:0:3997
-549:2:2576
-550:2:2577
-551:2:2581
-552:2:2582
-553:2:2590
-554:2:2591
-555:2:2595
-556:2:2596
-557:2:2604
-558:2:2609
-559:2:2613
-560:2:2614
-561:2:2622
-562:2:2623
-563:2:2624
-564:2:2622
-565:2:2623
-566:2:2627
-567:2:2628
-568:2:2636
-569:2:2641
-570:2:2648
-571:2:2649
-572:2:2656
-573:2:2661
-574:2:2668
-575:2:2669
-576:2:2668
-577:2:2669
-578:2:2676
-579:2:2686
-580:0:3997
-581:2:2575
-582:0:3997
-583:2:2690
-584:2:2694
-585:2:2695
-586:2:2699
-587:2:2703
-588:2:2704
-589:2:2708
-590:2:2716
-591:2:2717
-592:2:2721
-593:2:2722
-594:2:2721
-595:2:2725
-596:2:2726
-597:2:2730
-598:0:3997
-599:2:2575
-600:0:3997
-601:2:2738
-602:2:2739
-603:2:2740
-604:0:3997
-605:2:2575
-606:0:3997
-607:2:2745
-608:0:3997
-609:2:3572
-610:2:3573
-611:2:3577
-612:2:3581
-613:2:3582
-614:2:3586
-615:2:3591
-616:2:3599
-617:2:3603
-618:2:3604
-619:2:3599
-620:2:3603
-621:2:3604
-622:2:3608
-623:2:3615
-624:2:3622
-625:2:3623
-626:2:3630
-627:2:3635
-628:2:3642
-629:2:3643
-630:2:3642
-631:2:3643
-632:2:3650
-633:2:3654
-634:0:3997
-635:2:3659
-636:0:3997
-637:2:3660
-638:0:3997
-639:2:3661
-640:0:3997
-641:2:3662
-642:0:3997
-643:1:53
-644:0:3997
-645:2:3663
-646:0:3997
-647:1:57
-648:1:58
-649:1:62
-650:1:66
-651:1:67
-652:1:71
-653:1:79
-654:1:80
-655:1:84
-656:1:88
-657:1:89
-658:1:84
-659:1:88
-660:1:89
-661:1:93
-662:1:100
-663:1:107
-664:1:108
-665:1:115
-666:1:120
-667:1:127
-668:1:128
-669:1:127
-670:1:128
-671:1:135
-672:1:139
-673:0:3997
-674:2:3662
-675:0:3997
-676:1:144
-677:0:3997
-678:2:3663
-679:0:3997
-680:2:3664
-681:0:3997
-682:2:3669
-683:0:3997
-684:2:3670
-685:0:3997
-686:2:3678
-687:2:3679
-688:2:3683
-689:2:3687
-690:2:3688
-691:2:3692
-692:2:3700
-693:2:3701
-694:2:3705
-695:2:3709
-696:2:3710
-697:2:3705
-698:2:3709
-699:2:3710
-700:2:3714
-701:2:3721
-702:2:3728
-703:2:3729
-704:2:3736
-705:2:3741
-706:2:3748
-707:2:3749
-708:2:3748
-709:2:3749
-710:2:3756
-711:2:3760
-712:0:3997
-713:2:2747
-714:2:3553
-715:0:3997
-716:2:2575
-717:0:3997
-718:2:2748
-719:0:3997
-720:2:2575
-721:0:3997
-722:2:2751
-723:2:2752
-724:2:2756
-725:2:2757
-726:2:2765
-727:2:2766
-728:2:2770
-729:2:2771
-730:2:2779
-731:2:2784
-732:2:2788
-733:2:2789
-734:2:2797
-735:2:2798
-736:2:2802
-737:2:2803
-738:2:2797
-739:2:2798
-740:2:2802
-741:2:2803
-742:2:2811
-743:2:2816
-744:2:2823
-745:2:2824
-746:2:2831
-747:2:2836
-748:2:2843
-749:2:2844
-750:2:2843
-751:2:2844
-752:2:2851
-753:2:2860
-754:0:3997
-755:2:2575
-756:0:3997
-757:2:2864
-758:2:2865
-759:2:2866
-760:2:2878
-761:2:2879
-762:2:2883
-763:2:2884
-764:2:2892
-765:2:2897
-766:2:2901
-767:2:2902
-768:2:2910
-769:2:2911
-770:2:2915
-771:2:2916
-772:2:2910
-773:2:2911
-774:2:2915
-775:2:2916
-776:2:2924
-777:2:2929
-778:2:2936
-779:2:2937
-780:2:2944
-781:2:2949
-782:2:2956
-783:2:2957
-784:2:2956
-785:2:2957
-786:2:2964
-787:2:2977
-788:2:2978
-789:0:3997
-790:2:2575
-791:0:3997
-792:2:3091
-793:2:3092
-794:2:3096
-795:2:3097
-796:2:3105
-797:2:3106
-798:2:3110
-799:2:3111
-800:2:3119
-801:2:3124
-802:2:3128
-803:2:3129
-804:2:3137
-805:2:3138
-806:2:3142
-807:2:3143
-808:2:3137
-809:2:3138
-810:2:3142
-811:2:3143
-812:2:3151
-813:2:3156
-814:2:3163
-815:2:3164
-816:2:3171
-817:2:3176
-818:2:3183
-819:2:3184
-820:2:3183
-821:2:3184
-822:2:3191
-823:0:3997
-824:2:2575
-825:0:3997
-826:2:3202
-827:2:3203
-828:2:3207
-829:2:3208
-830:2:3216
-831:2:3217
-832:2:3221
-833:2:3222
-834:2:3230
-835:2:3235
-836:2:3239
-837:2:3240
-838:2:3248
-839:2:3249
-840:2:3253
-841:2:3254
-842:2:3248
-843:2:3249
-844:2:3253
-845:2:3254
-846:2:3262
-847:2:3267
-848:2:3274
-849:2:3275
-850:2:3282
-851:2:3287
-852:2:3294
-853:2:3295
-854:2:3294
-855:2:3295
-856:2:3302
-857:2:3311
-858:0:3997
-859:2:2575
-860:0:3997
-861:2:3315
-862:2:3316
-863:2:3317
-864:2:3329
-865:2:3330
-866:2:3334
-867:2:3335
-868:2:3343
-869:2:3348
-870:2:3352
-871:2:3353
-872:2:3361
-873:2:3362
-874:2:3366
-875:2:3367
-876:2:3361
-877:2:3362
-878:2:3366
-879:2:3367
-880:2:3375
-881:2:3380
-882:2:3387
-883:2:3388
-884:2:3395
-885:2:3400
-886:2:3407
-887:2:3408
-888:2:3407
-889:2:3408
-890:2:3415
-891:2:3427
-892:2:3428
-893:0:3997
-894:2:2575
-895:0:3997
-896:2:3541
-897:0:3997
-898:2:3770
-899:2:3771
-900:2:3775
-901:2:3779
-902:2:3780
-903:2:3784
-904:2:3792
-905:2:3793
-906:2:3797
-907:2:3801
-908:2:3802
-909:2:3797
-910:2:3801
-911:2:3802
-912:2:3806
-913:2:3813
-914:2:3820
-915:2:3821
-916:2:3828
-917:2:3833
-918:2:3840
-919:2:3841
-920:2:3840
-921:2:3841
-922:2:3848
-923:2:3852
-924:0:3997
-925:2:3857
-926:0:3997
-927:2:3858
-928:0:3997
-929:2:3859
-930:0:3997
-931:2:3860
-932:0:3997
-933:1:53
-934:0:3997
-935:2:3861
-936:0:3997
-937:1:57
-938:1:58
-939:1:62
-940:1:66
-941:1:67
-942:1:71
-943:1:79
-944:1:80
-945:1:84
-946:1:88
-947:1:89
-948:1:84
-949:1:88
-950:1:89
-951:1:93
-952:1:100
-953:1:107
-954:1:108
-955:1:115
-956:1:120
-957:1:127
-958:1:128
-959:1:127
-960:1:128
-961:1:135
-962:1:139
-963:0:3997
-964:2:3860
-965:0:3997
-966:1:144
-967:0:3997
-968:2:3861
-969:0:3997
-970:2:3862
-971:0:3997
-972:2:3867
-973:0:3997
-974:2:3868
-975:0:3997
-976:2:3876
-977:2:3877
-978:2:3881
-979:2:3885
-980:2:3886
-981:2:3890
-982:2:3898
-983:2:3899
-984:2:3903
-985:2:3907
-986:2:3908
-987:2:3903
-988:2:3907
-989:2:3908
-990:2:3912
-991:2:3919
-992:2:3926
-993:2:3927
-994:2:3934
-995:2:3939
-996:2:3946
-997:2:3947
-998:2:3946
-999:2:3947
-1000:2:3954
-1001:2:3958
-1002:0:3997
-1003:2:3543
-1004:2:3553
-1005:0:3997
-1006:2:2575
-1007:0:3997
-1008:2:3544
-1009:2:3545
-1010:0:3997
-1011:2:2575
-1012:0:3997
-1013:2:3549
-1014:0:3997
-1015:2:3557
-1016:0:3997
-1017:2:2572
-1018:0:3997
-1019:2:2573
-1020:0:3997
-1021:2:2574
-1022:0:3997
-1023:2:2575
-1024:0:3997
-1025:2:2576
-1026:2:2577
-1027:2:2581
-1028:2:2582
-1029:2:2590
-1030:2:2591
-1031:2:2595
-1032:2:2596
-1033:2:2604
-1034:2:2609
-1035:2:2613
-1036:2:2614
-1037:2:2622
-1038:2:2623
-1039:2:2627
-1040:2:2628
-1041:2:2622
-1042:2:2623
-1043:2:2624
-1044:2:2636
-1045:2:2641
-1046:2:2648
-1047:2:2649
-1048:2:2656
-1049:2:2661
-1050:2:2668
-1051:2:2669
-1052:2:2668
-1053:2:2669
-1054:2:2676
-1055:2:2686
-1056:0:3997
-1057:2:2575
-1058:0:3997
-1059:2:2690
-1060:2:2694
-1061:2:2695
-1062:2:2699
-1063:2:2703
-1064:2:2704
-1065:2:2708
-1066:2:2716
-1067:2:2717
-1068:2:2721
-1069:2:2725
-1070:2:2726
-1071:2:2721
-1072:2:2722
-1073:2:2730
-1074:0:3997
-1075:2:2575
-1076:0:3997
-1077:2:2738
-1078:2:2739
-1079:2:2740
-1080:0:3997
-1081:2:2575
-1082:0:3997
-1083:2:2745
-1084:0:3997
-1085:2:3572
-1086:2:3573
-1087:2:3577
-1088:2:3581
-1089:2:3582
-1090:2:3586
-1091:2:3591
-1092:2:3599
-1093:2:3603
-1094:2:3604
-1095:2:3599
-1096:2:3603
-1097:2:3604
-1098:2:3608
-1099:2:3615
-1100:2:3622
-1101:2:3623
-1102:2:3630
-1103:2:3635
-1104:2:3642
-1105:2:3643
-1106:2:3642
-1107:2:3643
-1108:2:3650
-1109:2:3654
-1110:0:3997
-1111:2:3659
-1112:0:3997
-1113:2:3660
-1114:0:3997
-1115:2:3661
-1116:0:3997
-1117:2:3662
-1118:0:3997
-1119:1:53
-1120:0:3997
-1121:2:3663
-1122:0:3997
-1123:1:57
-1124:1:58
-1125:1:62
-1126:1:66
-1127:1:67
-1128:1:71
-1129:1:79
-1130:1:80
-1131:1:84
-1132:1:88
-1133:1:89
-1134:1:84
-1135:1:88
-1136:1:89
-1137:1:93
-1138:1:100
-1139:1:107
-1140:1:108
-1141:1:115
-1142:1:120
-1143:1:127
-1144:1:128
-1145:1:127
-1146:1:128
-1147:1:135
-1148:1:139
-1149:0:3997
-1150:2:3662
-1151:0:3997
-1152:1:144
-1153:0:3997
-1154:2:3663
-1155:0:3997
-1156:2:3664
-1157:0:3997
-1158:2:3669
-1159:0:3997
-1160:2:3670
-1161:0:3997
-1162:2:3678
-1163:2:3679
-1164:2:3683
-1165:2:3687
-1166:2:3688
-1167:2:3692
-1168:2:3700
-1169:2:3701
-1170:2:3705
-1171:2:3709
-1172:2:3710
-1173:2:3705
-1174:2:3709
-1175:2:3710
-1176:2:3714
-1177:2:3721
-1178:2:3728
-1179:2:3729
-1180:2:3736
-1181:2:3741
-1182:2:3748
-1183:2:3749
-1184:2:3748
-1185:2:3749
-1186:2:3756
-1187:2:3760
-1188:0:3997
-1189:2:2747
-1190:2:3553
-1191:0:3997
-1192:2:2575
-1193:0:3997
-1194:2:2748
-1195:0:3997
-1196:2:2575
-1197:0:3997
-1198:2:2751
-1199:2:2752
-1200:2:2756
-1201:2:2757
-1202:2:2765
-1203:2:2766
-1204:2:2770
-1205:2:2771
-1206:2:2779
-1207:2:2784
-1208:2:2788
-1209:2:2789
-1210:2:2797
-1211:2:2798
-1212:2:2802
-1213:2:2803
-1214:2:2797
-1215:2:2798
-1216:2:2802
-1217:2:2803
-1218:2:2811
-1219:2:2816
-1220:2:2823
-1221:2:2824
-1222:2:2831
-1223:2:2836
-1224:2:2843
-1225:2:2844
-1226:2:2843
-1227:2:2844
-1228:2:2851
-1229:2:2860
-1230:0:3997
-1231:2:2575
-1232:0:3997
-1233:2:2864
-1234:2:2865
-1235:2:2866
-1236:2:2878
-1237:2:2879
-1238:2:2883
-1239:2:2884
-1240:2:2892
-1241:2:2897
-1242:2:2901
-1243:2:2902
-1244:2:2910
-1245:2:2911
-1246:2:2915
-1247:2:2916
-1248:2:2910
-1249:2:2911
-1250:2:2915
-1251:2:2916
-1252:2:2924
-1253:2:2929
-1254:2:2936
-1255:2:2937
-1256:2:2944
-1257:2:2949
-1258:2:2956
-1259:2:2957
-1260:2:2956
-1261:2:2957
-1262:2:2964
-1263:2:2977
-1264:2:2978
-1265:0:3997
-1266:2:2575
-1267:0:3997
-1268:2:3091
-1269:2:3092
-1270:2:3096
-1271:2:3097
-1272:2:3105
-1273:2:3106
-1274:2:3110
-1275:2:3111
-1276:2:3119
-1277:2:3124
-1278:2:3128
-1279:2:3129
-1280:2:3137
-1281:2:3138
-1282:2:3142
-1283:2:3143
-1284:2:3137
-1285:2:3138
-1286:2:3142
-1287:2:3143
-1288:2:3151
-1289:2:3156
-1290:2:3163
-1291:2:3164
-1292:2:3171
-1293:2:3176
-1294:2:3183
-1295:2:3184
-1296:2:3183
-1297:2:3184
-1298:2:3191
-1299:0:3997
-1300:2:2575
-1301:0:3997
-1302:2:3202
-1303:2:3203
-1304:2:3207
-1305:2:3208
-1306:2:3216
-1307:2:3217
-1308:2:3221
-1309:2:3222
-1310:2:3230
-1311:2:3235
-1312:2:3239
-1313:2:3240
-1314:2:3248
-1315:2:3249
-1316:2:3253
-1317:2:3254
-1318:2:3248
-1319:2:3249
-1320:2:3253
-1321:2:3254
-1322:2:3262
-1323:2:3267
-1324:2:3274
-1325:2:3275
-1326:2:3282
-1327:2:3287
-1328:2:3294
-1329:2:3295
-1330:2:3294
-1331:2:3295
-1332:2:3302
-1333:2:3311
-1334:0:3997
-1335:2:2575
-1336:0:3997
-1337:1:145
-1338:0:3997
-1339:1:147
-1340:0:3997
-1341:1:46
-1342:0:3997
-1343:1:153
-1344:1:154
-1345:1:158
-1346:1:159
-1347:1:167
-1348:1:168
-1349:1:172
-1350:1:173
-1351:1:181
-1352:1:186
-1353:1:190
-1354:1:191
-1355:1:199
-1356:1:200
-1357:1:204
-1358:1:205
-1359:1:199
-1360:1:200
-1361:1:204
-1362:1:205
-1363:1:213
-1364:1:218
-1365:1:225
-1366:1:226
-1367:1:233
-1368:1:238
-1369:1:245
-1370:1:246
-1371:1:245
-1372:1:246
-1373:1:253
-1374:0:3997
-1375:1:42
-1376:0:3997
-1377:1:43
-1378:0:3997
-1379:1:44
-1380:0:3997
-1381:1:145
-1382:0:3997
-1383:1:147
-1384:0:3997
-1385:1:46
-1386:0:3997
-1387:1:264
-1388:1:265
-1389:0:3997
-1390:1:42
-1391:0:3997
-1392:1:43
-1393:0:3997
-1394:1:44
-1395:0:3997
-1396:1:145
-1397:0:3997
-1398:1:147
-1399:0:3997
-1400:1:46
-1401:0:3997
-1402:1:271
-1403:1:272
-1404:1:276
-1405:1:277
-1406:1:285
-1407:1:286
-1408:1:290
-1409:1:291
-1410:1:299
-1411:1:304
-1412:1:308
-1413:1:309
-1414:1:317
-1415:1:318
-1416:1:322
-1417:1:323
-1418:1:317
-1419:1:318
-1420:1:322
-1421:1:323
-1422:1:331
-1423:1:336
-1424:1:343
-1425:1:344
-1426:1:351
-1427:1:356
-1428:1:363
-1429:1:364
-1430:1:363
-1431:1:364
-1432:1:371
-1433:0:3997
-1434:1:42
-1435:0:3997
-1436:1:43
-1437:0:3997
-1438:1:44
-1439:0:3997
-1440:1:145
-1441:0:3997
-1442:1:147
-1443:0:3997
-1444:1:46
-1445:0:3997
-1446:1:382
-1447:1:383
-1448:1:387
-1449:1:388
-1450:1:396
-1451:1:397
-1452:1:401
-1453:1:402
-1454:1:410
-1455:1:415
-1456:1:419
-1457:1:420
-1458:1:428
-1459:1:429
-1460:1:433
-1461:1:434
-1462:1:428
-1463:1:429
-1464:1:433
-1465:1:434
-1466:1:442
-1467:1:447
-1468:1:454
-1469:1:455
-1470:1:462
-1471:1:467
-1472:1:474
-1473:1:475
-1474:1:474
-1475:1:475
-1476:1:482
-1477:1:491
-1478:0:3997
-1479:1:42
-1480:0:3997
-1481:1:43
-1482:0:3997
-1483:1:44
-1484:0:3997
-1485:1:145
-1486:0:3997
-1487:1:147
-1488:0:3995
-1489:1:46
-1490:0:4001
-1491:1:1067
-1492:1:1068
-1493:1:1072
-1494:1:1073
-1495:1:1081
-1496:1:1082
-1497:1:1083
-1498:1:1095
-1499:1:1100
-1500:1:1104
-1501:1:1105
-1502:1:1113
-1503:1:1114
-1504:1:1118
-1505:1:1119
-1506:1:1113
-1507:1:1114
-1508:1:1118
-1509:1:1119
-1510:1:1127
-1511:1:1132
-1512:1:1139
-1513:1:1140
-1514:1:1147
-1515:1:1152
-1516:1:1159
-1517:1:1160
-1518:1:1159
-1519:1:1160
-1520:1:1167
-1521:0:4001
-1522:1:42
-1523:0:4001
-1524:1:43
-1525:0:4001
-1526:2:3315
-1527:2:3316
-1528:2:3317
-1529:2:3329
-1530:2:3330
-1531:2:3334
-1532:2:3335
-1533:2:3343
-1534:2:3348
-1535:2:3352
-1536:2:3353
-1537:2:3361
-1538:2:3362
-1539:2:3366
-1540:2:3367
-1541:2:3361
-1542:2:3362
-1543:2:3366
-1544:2:3367
-1545:2:3375
-1546:2:3380
-1547:2:3387
-1548:2:3388
-1549:2:3395
-1550:2:3400
-1551:2:3407
-1552:2:3408
-1553:2:3407
-1554:2:3408
-1555:2:3415
-1556:2:3425
-1557:0:4001
-1558:2:2575
--1:-1:-1
-1559:0:4001
-1560:2:3431
-1561:2:3432
-1562:2:3436
-1563:2:3437
-1564:2:3445
-1565:2:3446
-1566:2:3450
-1567:2:3451
-1568:2:3459
-1569:2:3464
-1570:2:3468
-1571:2:3469
-1572:2:3477
-1573:2:3478
-1574:2:3482
-1575:2:3483
-1576:2:3477
-1577:2:3478
-1578:2:3482
-1579:2:3483
-1580:2:3491
-1581:2:3496
-1582:2:3503
-1583:2:3504
-1584:2:3511
-1585:2:3516
-1586:2:3523
-1587:2:3524
-1588:2:3523
-1589:2:3524
-1590:2:3531
-1591:0:4001
-1592:2:2575
-1593:0:4001
-1594:2:3315
-1595:2:3316
-1596:2:3320
-1597:2:3321
-1598:2:3329
-1599:2:3330
-1600:2:3334
-1601:2:3335
-1602:2:3343
-1603:2:3348
-1604:2:3352
-1605:2:3353
-1606:2:3361
-1607:2:3362
-1608:2:3366
-1609:2:3367
-1610:2:3361
-1611:2:3362
-1612:2:3366
-1613:2:3367
-1614:2:3375
-1615:2:3380
-1616:2:3387
-1617:2:3388
-1618:2:3395
-1619:2:3400
-1620:2:3407
-1621:2:3408
-1622:2:3407
-1623:2:3408
-1624:2:3415
-1625:2:3425
-1626:0:4001
-1627:2:2575
-1628:0:4001
-1629:2:3431
-1630:2:3432
-1631:2:3436
-1632:2:3437
-1633:2:3445
-1634:2:3446
-1635:2:3450
-1636:2:3451
-1637:2:3459
-1638:2:3464
-1639:2:3468
-1640:2:3469
-1641:2:3477
-1642:2:3478
-1643:2:3482
-1644:2:3483
-1645:2:3477
-1646:2:3478
-1647:2:3482
-1648:2:3483
-1649:2:3491
-1650:2:3496
-1651:2:3503
-1652:2:3504
-1653:2:3511
-1654:2:3516
-1655:2:3523
-1656:2:3524
-1657:2:3523
-1658:2:3524
-1659:2:3531
-1660:0:4001
-1661:2:2575
-1662:0:4001
-1663:2:3315
-1664:2:3316
-1665:2:3320
-1666:2:3321
-1667:2:3329
-1668:2:3330
-1669:2:3334
-1670:2:3335
-1671:2:3343
-1672:2:3348
-1673:2:3352
-1674:2:3353
-1675:2:3361
-1676:2:3362
-1677:2:3366
-1678:2:3367
-1679:2:3361
-1680:2:3362
-1681:2:3366
-1682:2:3367
-1683:2:3375
-1684:2:3380
-1685:2:3387
-1686:2:3388
-1687:2:3395
-1688:2:3400
-1689:2:3407
-1690:2:3408
-1691:2:3407
-1692:2:3408
-1693:2:3415
-1694:2:3425
-1695:0:4001
-1696:2:2575
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/DEFINES b/formal-model/urcu-controldataflow-intel-ipi-compress/DEFINES
deleted file mode 100644 (file)
index abea5ff..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/Makefile b/formal-model/urcu-controldataflow-intel-ipi-compress/Makefile
deleted file mode 100644 (file)
index f8bfd31..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64 -DCOLLAPSE
-#CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       #make urcu_free | tee urcu_free.log
-       #make urcu_free_no_mb | tee urcu_free_no_mb.log
-       #make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       #make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       #make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       #make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/references.txt b/formal-model/urcu-controldataflow-intel-ipi-compress/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu.sh b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu.spin b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu.spin
deleted file mode 100644 (file)
index 8075506..0000000
+++ /dev/null
@@ -1,1321 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free.log b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free.log
deleted file mode 100644 (file)
index 43e9bba..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi-compress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1294)
-Depth=    9223 States=    1e+06 Transitions= 6.87e+06 Memory=   516.350        t=   19.4 R=   5e+04
-Depth=    9223 States=    2e+06 Transitions= 1.47e+07 Memory=   563.713        t=   43.1 R=   5e+04
-Depth=    9223 States=    3e+06 Transitions= 2.46e+07 Memory=   613.127        t=   73.9 R=   4e+04
-pan: resizing hashtable to -w22..  done
-Depth=    9223 States=    4e+06 Transitions= 3.19e+07 Memory=   690.440        t=   95.5 R=   4e+04
-Depth=    9223 States=    5e+06 Transitions= 3.95e+07 Memory=   736.533        t=    118 R=   4e+04
-Depth=    9223 States=    6e+06 Transitions= 5.71e+07 Memory=   785.068        t=    174 R=   3e+04
-Depth=    9223 States=    7e+06 Transitions= 6.81e+07 Memory=   834.580        t=    209 R=   3e+04
-Depth=    9223 States=    8e+06 Transitions= 8.22e+07 Memory=   883.311        t=    254 R=   3e+04
-Depth=    9223 States=    9e+06 Transitions= 9.54e+07 Memory=   932.139        t=    296 R=   3e+04
-pan: resizing hashtable to -w24..  done
-Depth=    9223 States=    1e+07 Transitions= 1.08e+08 Memory=  1104.670        t=    338 R=   3e+04
-Depth=    9223 States=  1.1e+07 Transitions= 1.21e+08 Memory=  1155.451        t=    375 R=   3e+04
-Depth=    9223 States=  1.2e+07 Transitions=  1.3e+08 Memory=  1205.744        t=    403 R=   3e+04
-Depth=    9223 States=  1.3e+07 Transitions= 1.42e+08 Memory=  1254.572        t=    442 R=   3e+04
-Depth=    9223 States=  1.4e+07 Transitions= 1.72e+08 Memory=  1302.717        t=    539 R=   3e+04
-Depth=    9223 States=  1.5e+07 Transitions= 1.91e+08 Memory=  1354.768        t=    600 R=   3e+04
-Depth=    9223 States=  1.6e+07 Transitions= 2.08e+08 Memory=  1405.842        t=    653 R=   2e+04
-Depth=    9223 States=  1.7e+07 Transitions=  2.2e+08 Memory=  1456.818        t=    691 R=   2e+04
-Depth=    9223 States=  1.8e+07 Transitions= 2.39e+08 Memory=  1506.135        t=    751 R=   2e+04
-Depth=    9223 States=  1.9e+07 Transitions= 2.55e+08 Memory=  1556.330        t=    801 R=   2e+04
-Depth=    9223 States=    2e+07 Transitions= 2.72e+08 Memory=  1604.084        t=    856 R=   2e+04
-Depth=    9285 States=  2.1e+07 Transitions= 2.85e+08 Memory=  1650.080        t=    898 R=   2e+04
-Depth=    9324 States=  2.2e+07 Transitions= 2.99e+08 Memory=  1696.760        t=    941 R=   2e+04
-Depth=    9324 States=  2.3e+07 Transitions=  3.1e+08 Memory=  1746.369        t=    976 R=   2e+04
-Depth=    9324 States=  2.4e+07 Transitions= 3.21e+08 Memory=  1792.561        t= 1.01e+03 R=   2e+04
-Depth=    9324 States=  2.5e+07 Transitions= 3.34e+08 Memory=  1841.096        t= 1.05e+03 R=   2e+04
-Depth=    9324 States=  2.6e+07 Transitions= 3.45e+08 Memory=  1890.998        t= 1.09e+03 R=   2e+04
-Depth=    9324 States=  2.7e+07 Transitions= 3.59e+08 Memory=  1940.412        t= 1.13e+03 R=   2e+04
-Depth=    9324 States=  2.8e+07 Transitions= 3.71e+08 Memory=  1987.776        t= 1.17e+03 R=   2e+04
-Depth=    9324 States=  2.9e+07 Transitions= 3.84e+08 Memory=  2034.846        t= 1.21e+03 R=   2e+04
-Depth=    9324 States=    3e+07 Transitions= 3.96e+08 Memory=  2081.233        t= 1.25e+03 R=   2e+04
-Depth=    9324 States=  3.1e+07 Transitions= 4.09e+08 Memory=  2129.865        t= 1.29e+03 R=   2e+04
-Depth=    9324 States=  3.2e+07 Transitions= 4.19e+08 Memory=  2179.670        t= 1.32e+03 R=   2e+04
-Depth=    9324 States=  3.3e+07 Transitions=  4.3e+08 Memory=  2227.717        t= 1.36e+03 R=   2e+04
-Depth=    9324 States=  3.4e+07 Transitions= 4.44e+08 Memory=  2277.033        t= 1.4e+03 R=   2e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9324 States=  3.5e+07 Transitions=  4.6e+08 Memory=  2824.190        t= 1.46e+03 R=   2e+04
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free.ltl b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free.ltl
deleted file mode 100644 (file)
index 6be1be9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!read_poison)
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_nested.define b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_mb.define b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_mb.define
deleted file mode 100644 (file)
index d99d793..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_MB
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_rmb.define b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_wmb.define b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_single_flip.define b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress.ltl b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.define b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.log b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.log
deleted file mode 100644 (file)
index d087e70..0000000
+++ /dev/null
@@ -1,703 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi-compress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1362)
-depth 7: Claim reached state 9 (line 1367)
-depth 131: Claim reached state 9 (line 1366)
-Depth=  108226 States=    1e+06 Transitions=  1.1e+07 Memory=   495.354        t=   32.5 R=   3e+04
-Depth=  108226 States=    2e+06 Transitions=  2.2e+07 Memory=   526.018        t=   65.8 R=   3e+04
-Depth=  108226 States=    3e+06 Transitions= 3.31e+07 Memory=   555.510        t=   99.5 R=   3e+04
-pan: resizing hashtable to -w22..  done
-Depth=  108226 States=    4e+06 Transitions= 4.38e+07 Memory=   615.733        t=    132 R=   3e+04
-Depth=  108226 States=    5e+06 Transitions= 5.47e+07 Memory=   644.346        t=    164 R=   3e+04
-Depth=  108226 States=    6e+06 Transitions= 6.54e+07 Memory=   671.983        t=    197 R=   3e+04
-Depth=  108226 States=    7e+06 Transitions= 7.64e+07 Memory=   700.108        t=    230 R=   3e+04
-Depth=  110273 States=    8e+06 Transitions= 8.89e+07 Memory=   728.428        t=    268 R=   3e+04
-Depth=  110273 States=    9e+06 Transitions= 1.02e+08 Memory=   757.920        t=    310 R=   3e+04
-pan: resizing hashtable to -w24..  done
-Depth=  110273 States=    1e+07 Transitions= 1.14e+08 Memory=   911.408        t=    347 R=   3e+04
-Depth=  110273 States=  1.1e+07 Transitions= 1.26e+08 Memory=   939.924        t=    380 R=   3e+04
-Depth=  110273 States=  1.2e+07 Transitions= 1.37e+08 Memory=   968.440        t=    414 R=   3e+04
-Depth=  110273 States=  1.3e+07 Transitions= 1.58e+08 Memory=   996.272        t=    479 R=   3e+04
-Depth=  110273 States=  1.4e+07 Transitions= 1.69e+08 Memory=  1026.545        t=    513 R=   3e+04
-Depth=  110273 States=  1.5e+07 Transitions= 1.81e+08 Memory=  1055.451        t=    550 R=   3e+04
-Depth=  110273 States=  1.6e+07 Transitions= 1.92e+08 Memory=  1084.943        t=    583 R=   3e+04
-Depth=  110273 States=  1.7e+07 Transitions= 2.03e+08 Memory=  1114.045        t=    615 R=   3e+04
-Depth=  110273 States=  1.8e+07 Transitions= 2.14e+08 Memory=  1144.318        t=    647 R=   3e+04
-Depth=  110273 States=  1.9e+07 Transitions= 2.25e+08 Memory=  1173.420        t=    680 R=   3e+04
-Depth=  110273 States=    2e+07 Transitions= 2.36e+08 Memory=  1202.717        t=    713 R=   3e+04
-Depth=  110273 States=  2.1e+07 Transitions= 2.47e+08 Memory=  1232.404        t=    746 R=   3e+04
-Depth=  110273 States=  2.2e+07 Transitions= 2.58e+08 Memory=  1262.092        t=    778 R=   3e+04
-Depth=  110273 States=  2.3e+07 Transitions= 2.69e+08 Memory=  1290.119        t=    811 R=   3e+04
-Depth=  110273 States=  2.4e+07 Transitions= 2.82e+08 Memory=  1317.268        t=    851 R=   3e+04
-Depth=  110273 States=  2.5e+07 Transitions= 2.96e+08 Memory=  1345.783        t=    893 R=   3e+04
-Depth=  110273 States=  2.6e+07 Transitions= 3.13e+08 Memory=  1373.615        t=    948 R=   3e+04
-Depth=  110273 States=  2.7e+07 Transitions= 3.48e+08 Memory=  1403.889        t= 1.06e+03 R=   3e+04
-Depth=  110273 States=  2.8e+07 Transitions=  3.7e+08 Memory=  1434.651        t= 1.13e+03 R=   2e+04
-Depth=  110273 States=  2.9e+07 Transitions= 3.84e+08 Memory=  1464.338        t= 1.17e+03 R=   2e+04
-Depth=  110273 States=    3e+07 Transitions= 4.04e+08 Memory=  1492.365        t= 1.24e+03 R=   2e+04
-Depth=  110273 States=  3.1e+07 Transitions= 4.26e+08 Memory=  1520.490        t= 1.31e+03 R=   2e+04
-Depth=  110273 States=  3.2e+07 Transitions= 4.42e+08 Memory=  1550.080        t= 1.36e+03 R=   2e+04
-Depth=  110273 States=  3.3e+07 Transitions= 4.63e+08 Memory=  1578.791        t= 1.42e+03 R=   2e+04
-Depth=  110273 States=  3.4e+07 Transitions= 4.87e+08 Memory=  1605.842        t= 1.5e+03 R=   2e+04
-pan: resizing hashtable to -w26..  done
-Depth=  110273 States=  3.5e+07 Transitions= 5.01e+08 Memory=  2130.147        t= 1.55e+03 R=   2e+04
-Depth=  110273 States=  3.6e+07 Transitions= 5.22e+08 Memory=  2158.467        t= 1.61e+03 R=   2e+04
-Depth=  110273 States=  3.7e+07 Transitions=  5.4e+08 Memory=  2186.006        t= 1.67e+03 R=   2e+04
-Depth=  110273 States=  3.8e+07 Transitions= 5.61e+08 Memory=  2213.545        t= 1.74e+03 R=   2e+04
-Depth=  110273 States=  3.9e+07 Transitions= 5.82e+08 Memory=  2242.061        t= 1.82e+03 R=   2e+04
-Depth=  110273 States=    4e+07 Transitions=    6e+08 Memory=  2270.088        t= 1.87e+03 R=   2e+04
-Depth=  110273 States=  4.1e+07 Transitions= 6.18e+08 Memory=  2298.408        t= 1.93e+03 R=   2e+04
-Depth=  110273 States=  4.2e+07 Transitions= 6.37e+08 Memory=  2325.850        t= 1.99e+03 R=   2e+04
-Depth=  110273 States=  4.3e+07 Transitions= 6.65e+08 Memory=  2352.803        t= 2.08e+03 R=   2e+04
-Depth=  110273 States=  4.4e+07 Transitions= 6.82e+08 Memory=  2380.733        t= 2.13e+03 R=   2e+04
-Depth=  110273 States=  4.5e+07 Transitions= 6.99e+08 Memory=  2408.076        t= 2.18e+03 R=   2e+04
-Depth=  110273 States=  4.6e+07 Transitions= 7.12e+08 Memory=  2434.346        t= 2.23e+03 R=   2e+04
-Depth=  110273 States=  4.7e+07 Transitions= 7.26e+08 Memory=  2462.959        t= 2.27e+03 R=   2e+04
-Depth=  110273 States=  4.8e+07 Transitions=  7.4e+08 Memory=  2493.721        t= 2.31e+03 R=   2e+04
-Depth=  110273 States=  4.9e+07 Transitions= 7.53e+08 Memory=  2522.627        t= 2.35e+03 R=   2e+04
-Depth=  110273 States=    5e+07 Transitions= 7.66e+08 Memory=  2552.803        t= 2.39e+03 R=   2e+04
-Depth=  110273 States=  5.1e+07 Transitions= 7.77e+08 Memory=  2583.565        t= 2.42e+03 R=   2e+04
-Depth=  110273 States=  5.2e+07 Transitions=  7.9e+08 Memory=  2611.006        t= 2.46e+03 R=   2e+04
-Depth=  110273 States=  5.3e+07 Transitions= 8.16e+08 Memory=  2641.182        t= 2.54e+03 R=   2e+04
-Depth=  110273 States=  5.4e+07 Transitions= 8.52e+08 Memory=  2673.213        t= 2.66e+03 R=   2e+04
-Depth=  110273 States=  5.5e+07 Transitions= 8.93e+08 Memory=  2707.197        t= 2.79e+03 R=   2e+04
-Depth=  110273 States=  5.6e+07 Transitions=  9.4e+08 Memory=  2738.447        t= 2.94e+03 R=   2e+04
-Depth=  110273 States=  5.7e+07 Transitions= 9.81e+08 Memory=  2767.354        t= 3.08e+03 R=   2e+04
-Depth=  110273 States=  5.8e+07 Transitions= 1.01e+09 Memory=  2794.111        t= 3.16e+03 R=   2e+04
-Depth=  110273 States=  5.9e+07 Transitions= 1.02e+09 Memory=  2822.529        t= 3.21e+03 R=   2e+04
-Depth=  110273 States=    6e+07 Transitions= 1.05e+09 Memory=  2850.654        t= 3.28e+03 R=   2e+04
-Depth=  110273 States=  6.1e+07 Transitions= 1.08e+09 Memory=  2879.170        t= 3.39e+03 R=   2e+04
-Depth=  110273 States=  6.2e+07 Transitions=  1.1e+09 Memory=  2908.858        t= 3.44e+03 R=   2e+04
-Depth=  110273 States=  6.3e+07 Transitions= 1.11e+09 Memory=  2935.908        t= 3.49e+03 R=   2e+04
-Depth=  110273 States=  6.4e+07 Transitions= 1.13e+09 Memory=  2960.518        t= 3.54e+03 R=   2e+04
-Depth=  110273 States=  6.5e+07 Transitions= 1.14e+09 Memory=  2990.205        t= 3.58e+03 R=   2e+04
-Depth=  110273 States=  6.6e+07 Transitions= 1.17e+09 Memory=  3018.721        t= 3.67e+03 R=   2e+04
-Depth=  110273 States=  6.7e+07 Transitions= 1.18e+09 Memory=  3047.041        t= 3.71e+03 R=   2e+04
-Depth=  110273 States=  6.8e+07 Transitions= 1.21e+09 Memory=  3074.580        t= 3.79e+03 R=   2e+04
-Depth=  110273 States=  6.9e+07 Transitions= 1.23e+09 Memory=  3101.826        t= 3.87e+03 R=   2e+04
-Depth=  110273 States=    7e+07 Transitions= 1.27e+09 Memory=  3130.635        t= 3.98e+03 R=   2e+04
-Depth=  110273 States=  7.1e+07 Transitions= 1.29e+09 Memory=  3157.197        t= 4.06e+03 R=   2e+04
-Depth=  110273 States=  7.2e+07 Transitions= 1.32e+09 Memory=  3184.443        t= 4.16e+03 R=   2e+04
-Depth=  110273 States=  7.3e+07 Transitions= 1.34e+09 Memory=  3211.690        t= 4.24e+03 R=   2e+04
-Depth=  110273 States=  7.4e+07 Transitions= 1.37e+09 Memory=  3239.229        t= 4.32e+03 R=   2e+04
-Depth=  110273 States=  7.5e+07 Transitions= 1.38e+09 Memory=  3266.670        t= 4.38e+03 R=   2e+04
-Depth=  110273 States=  7.6e+07 Transitions= 1.41e+09 Memory=  3294.307        t= 4.46e+03 R=   2e+04
-Depth=  110273 States=  7.7e+07 Transitions= 1.44e+09 Memory=  3322.432        t= 4.55e+03 R=   2e+04
-Depth=  110273 States=  7.8e+07 Transitions= 1.46e+09 Memory=  3352.608        t= 4.62e+03 R=   2e+04
-Depth=  110273 States=  7.9e+07 Transitions= 1.47e+09 Memory=  3378.193        t= 4.66e+03 R=   2e+04
-Depth=  110273 States=    8e+07 Transitions= 1.49e+09 Memory=  3407.490        t= 4.71e+03 R=   2e+04
-Depth=  110273 States=  8.1e+07 Transitions= 1.52e+09 Memory=  3436.397        t= 4.8e+03 R=   2e+04
-Depth=  110273 States=  8.2e+07 Transitions= 1.53e+09 Memory=  3461.690        t= 4.84e+03 R=   2e+04
-Depth=  110273 States=  8.3e+07 Transitions= 1.56e+09 Memory=  3491.182        t= 4.92e+03 R=   2e+04
-Depth=  110273 States=  8.4e+07 Transitions= 1.57e+09 Memory=  3519.990        t= 4.98e+03 R=   2e+04
-Depth=  110273 States=  8.5e+07 Transitions= 1.59e+09 Memory=  3546.065        t= 5.02e+03 R=   2e+04
-Depth=  110273 States=  8.6e+07 Transitions=  1.6e+09 Memory=  3575.459        t= 5.07e+03 R=   2e+04
-Depth=  110273 States=  8.7e+07 Transitions= 1.63e+09 Memory=  3605.049        t= 5.14e+03 R=   2e+04
-Depth=  110273 States=  8.8e+07 Transitions= 1.64e+09 Memory=  3632.588        t= 5.2e+03 R=   2e+04
-Depth=  110273 States=  8.9e+07 Transitions= 1.66e+09 Memory=  3661.787        t= 5.26e+03 R=   2e+04
-Depth=  110273 States=    9e+07 Transitions= 1.68e+09 Memory=  3688.154        t= 5.3e+03 R=   2e+04
-Depth=  110273 States=  9.1e+07 Transitions=  1.7e+09 Memory=  3715.986        t= 5.36e+03 R=   2e+04
-Depth=  110273 States=  9.2e+07 Transitions= 1.71e+09 Memory=  3743.623        t= 5.41e+03 R=   2e+04
-Depth=  110273 States=  9.3e+07 Transitions= 1.73e+09 Memory=  3771.358        t= 5.46e+03 R=   2e+04
-Depth=  110273 States=  9.4e+07 Transitions= 1.75e+09 Memory=  3797.920        t= 5.53e+03 R=   2e+04
-Depth=  110273 States=  9.5e+07 Transitions= 1.77e+09 Memory=  3827.119        t= 5.6e+03 R=   2e+04
-Depth=  110273 States=  9.6e+07 Transitions= 1.79e+09 Memory=  3858.858        t= 5.64e+03 R=   2e+04
-Depth=  110273 States=  9.7e+07 Transitions=  1.8e+09 Memory=  3885.713        t= 5.7e+03 R=   2e+04
-Depth=  110273 States=  9.8e+07 Transitions= 1.82e+09 Memory=  3914.717        t= 5.75e+03 R=   2e+04
-Depth=  110273 States=  9.9e+07 Transitions= 1.84e+09 Memory=  3941.670        t= 5.81e+03 R=   2e+04
-Depth=  110273 States=    1e+08 Transitions= 1.86e+09 Memory=  3968.818        t= 5.87e+03 R=   2e+04
-Depth=  110273 States= 1.01e+08 Transitions= 1.88e+09 Memory=  3994.990        t= 5.94e+03 R=   2e+04
-Depth=  110273 States= 1.02e+08 Transitions=  1.9e+09 Memory=  4023.311        t= 6.01e+03 R=   2e+04
-Depth=  110273 States= 1.03e+08 Transitions= 1.92e+09 Memory=  4053.193        t= 6.08e+03 R=   2e+04
-Depth=  110273 States= 1.04e+08 Transitions= 1.94e+09 Memory=  4078.389        t= 6.12e+03 R=   2e+04
-Depth=  110273 States= 1.05e+08 Transitions= 1.96e+09 Memory=  4108.467        t= 6.2e+03 R=   2e+04
-Depth=  110273 States= 1.06e+08 Transitions= 1.98e+09 Memory=  4137.080        t= 6.25e+03 R=   2e+04
-Depth=  110273 States= 1.07e+08 Transitions= 1.99e+09 Memory=  4163.740        t= 6.29e+03 R=   2e+04
-Depth=  110273 States= 1.08e+08 Transitions= 2.01e+09 Memory=  4191.768        t= 6.35e+03 R=   2e+04
-Depth=  110273 States= 1.09e+08 Transitions= 2.03e+09 Memory=  4221.651        t= 6.4e+03 R=   2e+04
-Depth=  110273 States=  1.1e+08 Transitions= 2.04e+09 Memory=  4249.971        t= 6.45e+03 R=   2e+04
-Depth=  110273 States= 1.11e+08 Transitions= 2.07e+09 Memory=  4278.877        t= 6.52e+03 R=   2e+04
-Depth=  110273 States= 1.12e+08 Transitions= 2.09e+09 Memory=  4308.174        t= 6.59e+03 R=   2e+04
-Depth=  110273 States= 1.13e+08 Transitions=  2.1e+09 Memory=  4333.760        t= 6.64e+03 R=   2e+04
-Depth=  110273 States= 1.14e+08 Transitions= 2.13e+09 Memory=  4363.740        t= 6.71e+03 R=   2e+04
-Depth=  110273 States= 1.15e+08 Transitions= 2.14e+09 Memory=  4392.158        t= 6.76e+03 R=   2e+04
-Depth=  110273 States= 1.16e+08 Transitions= 2.16e+09 Memory=  4419.014        t= 6.81e+03 R=   2e+04
-Depth=  110273 States= 1.17e+08 Transitions= 2.17e+09 Memory=  4446.846        t= 6.86e+03 R=   2e+04
-Depth=  110273 States= 1.18e+08 Transitions= 2.19e+09 Memory=  4476.338        t= 6.91e+03 R=   2e+04
-Depth=  110273 States= 1.19e+08 Transitions= 2.21e+09 Memory=  4505.440        t= 6.96e+03 R=   2e+04
-Depth=  110273 States=  1.2e+08 Transitions= 2.22e+09 Memory=  4529.561        t= 7.01e+03 R=   2e+04
-Depth=  110273 States= 1.21e+08 Transitions= 2.24e+09 Memory=  4557.588        t= 7.07e+03 R=   2e+04
-Depth=  110273 States= 1.22e+08 Transitions= 2.26e+09 Memory=  4584.736        t= 7.12e+03 R=   2e+04
-Depth=  110273 States= 1.23e+08 Transitions= 2.27e+09 Memory=  4612.764        t= 7.18e+03 R=   2e+04
-Depth=  110273 States= 1.24e+08 Transitions= 2.29e+09 Memory=  4640.303        t= 7.22e+03 R=   2e+04
-Depth=  110273 States= 1.25e+08 Transitions= 2.32e+09 Memory=  4669.404        t= 7.32e+03 R=   2e+04
-Depth=  110273 States= 1.26e+08 Transitions= 2.35e+09 Memory=  4698.018        t= 7.44e+03 R=   2e+04
-Depth=  110273 States= 1.27e+08 Transitions= 2.37e+09 Memory=  4728.877        t= 7.49e+03 R=   2e+04
-Depth=  110273 States= 1.28e+08 Transitions= 2.38e+09 Memory=  4757.393        t= 7.54e+03 R=   2e+04
-Depth=  110273 States= 1.29e+08 Transitions=  2.4e+09 Memory=  4785.811        t= 7.6e+03 R=   2e+04
-Depth=  110273 States=  1.3e+08 Transitions= 2.42e+09 Memory=  4814.033        t= 7.66e+03 R=   2e+04
-Depth=  110273 States= 1.31e+08 Transitions= 2.44e+09 Memory=  4843.428        t= 7.72e+03 R=   2e+04
-Depth=  110273 States= 1.32e+08 Transitions= 2.46e+09 Memory=  4871.943        t= 7.78e+03 R=   2e+04
-Depth=  110273 States= 1.33e+08 Transitions= 2.49e+09 Memory=  4898.311        t= 7.88e+03 R=   2e+04
-Depth=  110273 States= 1.34e+08 Transitions= 2.51e+09 Memory=  4926.143        t= 7.95e+03 R=   2e+04
-Depth=  110273 States= 1.35e+08 Transitions= 2.54e+09 Memory=  4953.389        t= 8.02e+03 R=   2e+04
-pan: resizing hashtable to -w28..  done
-Depth=  110273 States= 1.36e+08 Transitions= 2.56e+09 Memory=  7001.389        t= 8.13e+03 R=   2e+04
-Depth=  110273 States= 1.37e+08 Transitions= 2.58e+09 Memory=  7001.389        t= 8.19e+03 R=   2e+04
-Depth=  110273 States= 1.38e+08 Transitions= 2.61e+09 Memory=  7018.381        t= 8.26e+03 R=   2e+04
-Depth=  110273 States= 1.39e+08 Transitions= 2.63e+09 Memory=  7045.236        t= 8.33e+03 R=   2e+04
-Depth=  110273 States=  1.4e+08 Transitions= 2.65e+09 Memory=  7073.068        t= 8.39e+03 R=   2e+04
-Depth=  110273 States= 1.41e+08 Transitions= 2.68e+09 Memory=  7100.022        t= 8.48e+03 R=   2e+04
-Depth=  110273 States= 1.42e+08 Transitions=  2.7e+09 Memory=  7128.733        t= 8.54e+03 R=   2e+04
-Depth=  110273 States= 1.43e+08 Transitions= 2.72e+09 Memory=  7155.686        t= 8.6e+03 R=   2e+04
-Depth=  110273 States= 1.44e+08 Transitions= 2.73e+09 Memory=  7181.662        t= 8.65e+03 R=   2e+04
-Depth=  110273 States= 1.45e+08 Transitions= 2.74e+09 Memory=  7209.885        t= 8.69e+03 R=   2e+04
-Depth=  110273 States= 1.46e+08 Transitions= 2.76e+09 Memory=  7239.963        t= 8.73e+03 R=   2e+04
-Depth=  110273 States= 1.47e+08 Transitions= 2.77e+09 Memory=  7269.846        t= 8.77e+03 R=   2e+04
-Depth=  110273 States= 1.48e+08 Transitions= 2.79e+09 Memory=  7299.533        t= 8.82e+03 R=   2e+04
-Depth=  110273 States= 1.49e+08 Transitions=  2.8e+09 Memory=  7327.365        t= 8.87e+03 R=   2e+04
-Depth=  110273 States=  1.5e+08 Transitions= 2.82e+09 Memory=  7356.760        t= 8.92e+03 R=   2e+04
-Depth=  110273 States= 1.51e+08 Transitions= 2.84e+09 Memory=  7384.983        t= 8.97e+03 R=   2e+04
-Depth=  110273 States= 1.52e+08 Transitions= 2.85e+09 Memory=  7412.522        t= 9.02e+03 R=   2e+04
-Depth=  110273 States= 1.53e+08 Transitions= 2.87e+09 Memory=  7440.256        t= 9.09e+03 R=   2e+04
-Depth=  110273 States= 1.54e+08 Transitions= 2.91e+09 Memory=  7471.604        t= 9.2e+03 R=   2e+04
-Depth=  110273 States= 1.55e+08 Transitions= 2.95e+09 Memory=  7506.662        t= 9.32e+03 R=   2e+04
-Depth=  110273 States= 1.56e+08 Transitions=    3e+09 Memory=  7540.744        t= 9.48e+03 R=   2e+04
-Depth=  110273 States= 1.57e+08 Transitions= 3.04e+09 Memory=  7570.041        t= 9.62e+03 R=   2e+04
-Depth=  110273 States= 1.58e+08 Transitions= 3.07e+09 Memory=  7593.772        t= 9.72e+03 R=   2e+04
-Depth=  110273 States= 1.59e+08 Transitions= 3.09e+09 Memory=  7622.580        t= 9.77e+03 R=   2e+04
-Depth=  110273 States=  1.6e+08 Transitions= 3.11e+09 Memory=  7650.315        t= 9.83e+03 R=   2e+04
-Depth=  110273 States= 1.61e+08 Transitions= 3.14e+09 Memory=  7678.733        t= 9.93e+03 R=   2e+04
-Depth=  110273 States= 1.62e+08 Transitions= 3.16e+09 Memory=  7707.639        t=  1e+04 R=   2e+04
-Depth=  110273 States= 1.63e+08 Transitions= 3.18e+09 Memory=  7735.276        t= 1.01e+04 R=   2e+04
-Depth=  110273 States= 1.64e+08 Transitions=  3.2e+09 Memory=  7761.350        t= 1.01e+04 R=   2e+04
-Depth=  110273 States= 1.65e+08 Transitions= 3.21e+09 Memory=  7787.326        t= 1.02e+04 R=   2e+04
-Depth=  110273 States= 1.66e+08 Transitions= 3.23e+09 Memory=  7817.111        t= 1.02e+04 R=   2e+04
-Depth=  110273 States= 1.67e+08 Transitions= 3.25e+09 Memory=  7844.065        t= 1.03e+04 R=   2e+04
-Depth=  110273 States= 1.68e+08 Transitions= 3.28e+09 Memory=  7871.213        t= 1.04e+04 R=   2e+04
-Depth=  110273 States= 1.69e+08 Transitions=  3.3e+09 Memory=  7898.264        t= 1.04e+04 R=   2e+04
-Depth=  110273 States=  1.7e+08 Transitions= 3.32e+09 Memory=  7925.608        t= 1.05e+04 R=   2e+04
-Depth=  110273 States= 1.71e+08 Transitions= 3.35e+09 Memory=  7952.658        t= 1.06e+04 R=   2e+04
-Depth=  110273 States= 1.72e+08 Transitions= 3.38e+09 Memory=  7981.467        t= 1.07e+04 R=   2e+04
-Depth=  110273 States= 1.73e+08 Transitions=  3.4e+09 Memory=  8009.592        t= 1.08e+04 R=   2e+04
-Depth=  110273 States= 1.74e+08 Transitions= 3.43e+09 Memory=  8036.154        t= 1.08e+04 R=   2e+04
-Depth=  110273 States= 1.75e+08 Transitions= 3.45e+09 Memory=  8063.108        t= 1.09e+04 R=   2e+04
-Depth=  110273 States= 1.76e+08 Transitions= 3.48e+09 Memory=  8091.428        t= 1.1e+04 R=   2e+04
-Depth=  110273 States= 1.77e+08 Transitions=  3.5e+09 Memory=  8119.943        t= 1.11e+04 R=   2e+04
-Depth=  110273 States= 1.78e+08 Transitions= 3.53e+09 Memory=  8148.459        t= 1.12e+04 R=   2e+04
-Depth=  110273 States= 1.79e+08 Transitions= 3.54e+09 Memory=  8176.779        t= 1.12e+04 R=   2e+04
-Depth=  110273 States=  1.8e+08 Transitions= 3.56e+09 Memory=  8202.463        t= 1.12e+04 R=   2e+04
-Depth=  110273 States= 1.81e+08 Transitions= 3.58e+09 Memory=  8232.053        t= 1.13e+04 R=   2e+04
-Depth=  110273 States= 1.82e+08 Transitions=  3.6e+09 Memory=  8260.178        t= 1.14e+04 R=   2e+04
-Depth=  110273 States= 1.83e+08 Transitions= 3.62e+09 Memory=  8288.596        t= 1.14e+04 R=   2e+04
-Depth=  110273 States= 1.84e+08 Transitions= 3.64e+09 Memory=  8317.502        t= 1.15e+04 R=   2e+04
-Depth=  110273 States= 1.85e+08 Transitions= 3.66e+09 Memory=  8342.697        t= 1.16e+04 R=   2e+04
-Depth=  110273 States= 1.86e+08 Transitions= 3.67e+09 Memory=  8371.506        t= 1.16e+04 R=   2e+04
-Depth=  110273 States= 1.87e+08 Transitions= 3.69e+09 Memory=  8400.803        t= 1.17e+04 R=   2e+04
-Depth=  110273 States= 1.88e+08 Transitions= 3.71e+09 Memory=  8428.440        t= 1.17e+04 R=   2e+04
-Depth=  110273 States= 1.89e+08 Transitions= 3.73e+09 Memory=  8458.029        t= 1.18e+04 R=   2e+04
-Depth=  110273 States=  1.9e+08 Transitions= 3.75e+09 Memory=  8484.885        t= 1.18e+04 R=   2e+04
-Depth=  110273 States= 1.91e+08 Transitions= 3.76e+09 Memory=  8512.522        t= 1.19e+04 R=   2e+04
-Depth=  110273 States= 1.92e+08 Transitions= 3.78e+09 Memory=  8540.549        t= 1.19e+04 R=   2e+04
-Depth=  110273 States= 1.93e+08 Transitions= 3.79e+09 Memory=  8567.893        t= 1.2e+04 R=   2e+04
-Depth=  110273 States= 1.94e+08 Transitions= 3.82e+09 Memory=  8595.041        t= 1.21e+04 R=   2e+04
-Depth=  110273 States= 1.95e+08 Transitions= 3.84e+09 Memory=  8626.584        t= 1.21e+04 R=   2e+04
-Depth=  110273 States= 1.96e+08 Transitions= 3.85e+09 Memory=  8655.295        t= 1.22e+04 R=   2e+04
-Depth=  110273 States= 1.97e+08 Transitions= 3.87e+09 Memory=  8683.908        t= 1.22e+04 R=   2e+04
-Depth=  110273 States= 1.98e+08 Transitions= 3.89e+09 Memory=  8711.447        t= 1.23e+04 R=   2e+04
-Depth=  110273 States= 1.99e+08 Transitions= 3.91e+09 Memory=  8738.108        t= 1.23e+04 R=   2e+04
-Depth=  110273 States=    2e+08 Transitions= 3.93e+09 Memory=  8766.818        t= 1.24e+04 R=   2e+04
-Depth=  110273 States= 2.01e+08 Transitions= 3.95e+09 Memory=  8796.701        t= 1.25e+04 R=   2e+04
-Depth=  110273 States= 2.02e+08 Transitions= 3.96e+09 Memory=  8821.897        t= 1.25e+04 R=   2e+04
-Depth=  110273 States= 2.03e+08 Transitions= 3.99e+09 Memory=  8852.072        t= 1.26e+04 R=   2e+04
-Depth=  110273 States= 2.04e+08 Transitions=    4e+09 Memory=  8880.490        t= 1.26e+04 R=   2e+04
-Depth=  110273 States= 2.05e+08 Transitions= 4.02e+09 Memory=  8907.541        t= 1.27e+04 R=   2e+04
-Depth=  110273 States= 2.06e+08 Transitions= 4.03e+09 Memory=  8935.373        t= 1.27e+04 R=   2e+04
-Depth=  110273 States= 2.07e+08 Transitions= 4.05e+09 Memory=  8965.354        t= 1.28e+04 R=   2e+04
-Depth=  110273 States= 2.08e+08 Transitions= 4.07e+09 Memory=  8993.674        t= 1.28e+04 R=   2e+04
-Depth=  110273 States= 2.09e+08 Transitions= 4.09e+09 Memory=  9022.190        t= 1.29e+04 R=   2e+04
-Depth=  110273 States=  2.1e+08 Transitions= 4.11e+09 Memory=  9052.072        t= 1.3e+04 R=   2e+04
-Depth=  110273 States= 2.11e+08 Transitions= 4.13e+09 Memory=  9077.268        t= 1.3e+04 R=   2e+04
-Depth=  110273 States= 2.12e+08 Transitions= 4.15e+09 Memory=  9107.248        t= 1.31e+04 R=   2e+04
-Depth=  110273 States= 2.13e+08 Transitions= 4.16e+09 Memory=  9135.861        t= 1.31e+04 R=   2e+04
-Depth=  110273 States= 2.14e+08 Transitions= 4.18e+09 Memory=  9162.619        t= 1.32e+04 R=   2e+04
-Depth=  110273 States= 2.15e+08 Transitions=  4.2e+09 Memory=  9190.549        t= 1.32e+04 R=   2e+04
-Depth=  110273 States= 2.16e+08 Transitions= 4.21e+09 Memory=  9220.139        t= 1.33e+04 R=   2e+04
-Depth=  110273 States= 2.17e+08 Transitions= 4.23e+09 Memory=  9248.947        t= 1.33e+04 R=   2e+04
-Depth=  110273 States= 2.18e+08 Transitions= 4.25e+09 Memory=  9273.166        t= 1.34e+04 R=   2e+04
-Depth=  110273 States= 2.19e+08 Transitions= 4.26e+09 Memory=  9301.096        t= 1.34e+04 R=   2e+04
-Depth=  110273 States=  2.2e+08 Transitions= 4.28e+09 Memory=  9329.221        t= 1.35e+04 R=   2e+04
-Depth=  110273 States= 2.21e+08 Transitions= 4.29e+09 Memory=  9356.858        t= 1.35e+04 R=   2e+04
-Depth=  110273 States= 2.22e+08 Transitions= 4.32e+09 Memory=  9384.494        t= 1.36e+04 R=   2e+04
-Depth=  110273 States= 2.23e+08 Transitions= 4.35e+09 Memory=  9414.279        t= 1.37e+04 R=   2e+04
-Depth=  110273 States= 2.24e+08 Transitions= 4.37e+09 Memory=  9445.139        t= 1.38e+04 R=   2e+04
-Depth=  110273 States= 2.25e+08 Transitions= 4.39e+09 Memory=  9473.361        t= 1.38e+04 R=   2e+04
-Depth=  110273 States= 2.26e+08 Transitions=  4.4e+09 Memory=  9502.365        t= 1.39e+04 R=   2e+04
-Depth=  110273 States= 2.27e+08 Transitions= 4.42e+09 Memory=  9530.783        t= 1.39e+04 R=   2e+04
-Depth=  110273 States= 2.28e+08 Transitions= 4.44e+09 Memory=  9559.592        t= 1.4e+04 R=   2e+04
-Depth=  110273 States= 2.29e+08 Transitions= 4.47e+09 Memory=  9586.838        t= 1.41e+04 R=   2e+04
-Depth=  110273 States=  2.3e+08 Transitions= 4.49e+09 Memory=  9612.815        t= 1.42e+04 R=   2e+04
-Depth=  110273 States= 2.31e+08 Transitions= 4.52e+09 Memory=  9639.572        t= 1.42e+04 R=   2e+04
-Depth=  110273 States= 2.32e+08 Transitions= 4.54e+09 Memory=  9666.233        t= 1.43e+04 R=   2e+04
-Depth=  110273 States= 2.33e+08 Transitions= 4.57e+09 Memory=  9692.307        t= 1.44e+04 R=   2e+04
-Depth=  110273 States= 2.34e+08 Transitions= 4.59e+09 Memory=  9718.186        t= 1.45e+04 R=   2e+04
-Depth=  110273 States= 2.35e+08 Transitions= 4.61e+09 Memory=  9746.604        t= 1.45e+04 R=   2e+04
-Depth=  110273 States= 2.36e+08 Transitions= 4.63e+09 Memory=  9772.678        t= 1.46e+04 R=   2e+04
-Depth=  110273 States= 2.37e+08 Transitions= 4.65e+09 Memory=  9799.826        t= 1.46e+04 R=   2e+04
-Depth=  110273 States= 2.38e+08 Transitions= 4.67e+09 Memory=  9826.779        t= 1.47e+04 R=   2e+04
-Depth=  110273 States= 2.39e+08 Transitions=  4.7e+09 Memory=  9853.342        t= 1.48e+04 R=   2e+04
-Depth=  110273 States=  2.4e+08 Transitions= 4.72e+09 Memory=  9879.709        t= 1.49e+04 R=   2e+04
-Depth=  110273 States= 2.41e+08 Transitions= 4.75e+09 Memory=  9906.174        t= 1.49e+04 R=   2e+04
-Depth=  110273 States= 2.42e+08 Transitions= 4.77e+09 Memory=  9934.006        t= 1.5e+04 R=   2e+04
-Depth=  110273 States= 2.43e+08 Transitions= 4.79e+09 Memory=  9960.471        t= 1.51e+04 R=   2e+04
-Depth=  110273 States= 2.44e+08 Transitions= 4.81e+09 Memory=  9987.229        t= 1.51e+04 R=   2e+04
-Depth=  110273 States= 2.45e+08 Transitions= 4.83e+09 Memory= 10014.084        t= 1.52e+04 R=   2e+04
-Depth=  110273 States= 2.46e+08 Transitions= 4.85e+09 Memory= 10040.842        t= 1.53e+04 R=   2e+04
-Depth=  110273 States= 2.47e+08 Transitions= 4.87e+09 Memory= 10067.404        t= 1.53e+04 R=   2e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 110273, errors: 0
-1.5183145e+08 states, stored (2.47605e+08 visited)
-4.6348493e+09 states, matched
-4.8824543e+09 transitions (= visited+matched)
-7.5925477e+10 atomic steps
-hash conflicts: 9.7802755e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
-16796.540      equivalent memory usage for states (stored*(State-vector + overhead))
- 7578.458      actual memory usage for states (compression: 45.12%)
-               state-vector as stored = 16 byte + 36 byte overhead
- 2048.000      memory used for hash table (-w28)
-  457.764      memory used for DFS stack (-m10000000)
-    1.290      memory lost to fragmentation
-10082.932      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 547261 4207 4043 2 2 ]
-unreached in proctype urcu_reader
-       line 268, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 104, "(1)"
-       line 249, "pan.___", state 112, "(1)"
-       line 253, "pan.___", state 124, "(1)"
-       line 257, "pan.___", state 132, "(1)"
-       line 407, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 222, "(1)"
-       line 253, "pan.___", state 242, "(1)"
-       line 257, "pan.___", state 250, "(1)"
-       line 687, "pan.___", state 269, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 407, "pan.___", state 276, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 308, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 322, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 340, "(1)"
-       line 253, "pan.___", state 360, "(1)"
-       line 257, "pan.___", state 368, "(1)"
-       line 407, "pan.___", state 387, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 419, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 433, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 451, "(1)"
-       line 253, "pan.___", state 471, "(1)"
-       line 257, "pan.___", state 479, "(1)"
-       line 407, "pan.___", state 500, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 502, "(1)"
-       line 407, "pan.___", state 503, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 503, "else"
-       line 407, "pan.___", state 506, "(1)"
-       line 411, "pan.___", state 514, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 516, "(1)"
-       line 411, "pan.___", state 517, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 517, "else"
-       line 411, "pan.___", state 520, "(1)"
-       line 411, "pan.___", state 521, "(1)"
-       line 411, "pan.___", state 521, "(1)"
-       line 409, "pan.___", state 526, "((i<1))"
-       line 409, "pan.___", state 526, "((i>=1))"
-       line 416, "pan.___", state 532, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 534, "(1)"
-       line 416, "pan.___", state 535, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 535, "else"
-       line 416, "pan.___", state 538, "(1)"
-       line 416, "pan.___", state 539, "(1)"
-       line 416, "pan.___", state 539, "(1)"
-       line 420, "pan.___", state 546, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 548, "(1)"
-       line 420, "pan.___", state 549, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 549, "else"
-       line 420, "pan.___", state 552, "(1)"
-       line 420, "pan.___", state 553, "(1)"
-       line 420, "pan.___", state 553, "(1)"
-       line 418, "pan.___", state 558, "((i<2))"
-       line 418, "pan.___", state 558, "((i>=2))"
-       line 245, "pan.___", state 564, "(1)"
-       line 249, "pan.___", state 572, "(1)"
-       line 249, "pan.___", state 573, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 573, "else"
-       line 247, "pan.___", state 578, "((i<1))"
-       line 247, "pan.___", state 578, "((i>=1))"
-       line 253, "pan.___", state 584, "(1)"
-       line 253, "pan.___", state 585, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 585, "else"
-       line 257, "pan.___", state 592, "(1)"
-       line 257, "pan.___", state 593, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 593, "else"
-       line 255, "pan.___", state 598, "((i<2))"
-       line 255, "pan.___", state 598, "((i>=2))"
-       line 262, "pan.___", state 602, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 602, "else"
-       line 427, "pan.___", state 604, "(1)"
-       line 427, "pan.___", state 604, "(1)"
-       line 687, "pan.___", state 607, "cached_urcu_active_readers = (tmp+1)"
-       line 687, "pan.___", state 608, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 687, "pan.___", state 609, "(1)"
-       line 407, "pan.___", state 616, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 648, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 662, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 680, "(1)"
-       line 253, "pan.___", state 700, "(1)"
-       line 257, "pan.___", state 708, "(1)"
-       line 407, "pan.___", state 734, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 766, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 780, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 798, "(1)"
-       line 253, "pan.___", state 818, "(1)"
-       line 257, "pan.___", state 826, "(1)"
-       line 407, "pan.___", state 845, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 847, "(1)"
-       line 407, "pan.___", state 848, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 848, "else"
-       line 407, "pan.___", state 851, "(1)"
-       line 411, "pan.___", state 859, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 861, "(1)"
-       line 411, "pan.___", state 862, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 862, "else"
-       line 411, "pan.___", state 865, "(1)"
-       line 411, "pan.___", state 866, "(1)"
-       line 411, "pan.___", state 866, "(1)"
-       line 409, "pan.___", state 871, "((i<1))"
-       line 409, "pan.___", state 871, "((i>=1))"
-       line 416, "pan.___", state 877, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 879, "(1)"
-       line 416, "pan.___", state 880, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 880, "else"
-       line 416, "pan.___", state 883, "(1)"
-       line 416, "pan.___", state 884, "(1)"
-       line 416, "pan.___", state 884, "(1)"
-       line 420, "pan.___", state 891, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 893, "(1)"
-       line 420, "pan.___", state 894, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 894, "else"
-       line 420, "pan.___", state 897, "(1)"
-       line 420, "pan.___", state 898, "(1)"
-       line 420, "pan.___", state 898, "(1)"
-       line 418, "pan.___", state 903, "((i<2))"
-       line 418, "pan.___", state 903, "((i>=2))"
-       line 245, "pan.___", state 909, "(1)"
-       line 249, "pan.___", state 917, "(1)"
-       line 249, "pan.___", state 918, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 918, "else"
-       line 247, "pan.___", state 923, "((i<1))"
-       line 247, "pan.___", state 923, "((i>=1))"
-       line 253, "pan.___", state 929, "(1)"
-       line 253, "pan.___", state 930, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 930, "else"
-       line 257, "pan.___", state 937, "(1)"
-       line 257, "pan.___", state 938, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 938, "else"
-       line 255, "pan.___", state 943, "((i<2))"
-       line 255, "pan.___", state 943, "((i>=2))"
-       line 262, "pan.___", state 947, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 947, "else"
-       line 427, "pan.___", state 949, "(1)"
-       line 427, "pan.___", state 949, "(1)"
-       line 695, "pan.___", state 953, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 407, "pan.___", state 958, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 990, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1004, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1022, "(1)"
-       line 253, "pan.___", state 1042, "(1)"
-       line 257, "pan.___", state 1050, "(1)"
-       line 407, "pan.___", state 1072, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1104, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1118, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1136, "(1)"
-       line 253, "pan.___", state 1156, "(1)"
-       line 257, "pan.___", state 1164, "(1)"
-       line 407, "pan.___", state 1187, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1219, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1233, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1251, "(1)"
-       line 253, "pan.___", state 1271, "(1)"
-       line 257, "pan.___", state 1279, "(1)"
-       line 407, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1330, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1344, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1362, "(1)"
-       line 253, "pan.___", state 1382, "(1)"
-       line 257, "pan.___", state 1390, "(1)"
-       line 407, "pan.___", state 1414, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1446, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1460, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1478, "(1)"
-       line 253, "pan.___", state 1498, "(1)"
-       line 257, "pan.___", state 1506, "(1)"
-       line 407, "pan.___", state 1525, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1557, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1571, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1589, "(1)"
-       line 253, "pan.___", state 1609, "(1)"
-       line 257, "pan.___", state 1617, "(1)"
-       line 407, "pan.___", state 1639, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1671, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1685, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1703, "(1)"
-       line 253, "pan.___", state 1723, "(1)"
-       line 257, "pan.___", state 1731, "(1)"
-       line 734, "pan.___", state 1750, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 407, "pan.___", state 1757, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1789, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1803, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1821, "(1)"
-       line 253, "pan.___", state 1841, "(1)"
-       line 257, "pan.___", state 1849, "(1)"
-       line 407, "pan.___", state 1868, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1900, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1914, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1932, "(1)"
-       line 253, "pan.___", state 1952, "(1)"
-       line 257, "pan.___", state 1960, "(1)"
-       line 407, "pan.___", state 1981, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 1983, "(1)"
-       line 407, "pan.___", state 1984, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 1984, "else"
-       line 407, "pan.___", state 1987, "(1)"
-       line 411, "pan.___", state 1995, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 1997, "(1)"
-       line 411, "pan.___", state 1998, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 1998, "else"
-       line 411, "pan.___", state 2001, "(1)"
-       line 411, "pan.___", state 2002, "(1)"
-       line 411, "pan.___", state 2002, "(1)"
-       line 409, "pan.___", state 2007, "((i<1))"
-       line 409, "pan.___", state 2007, "((i>=1))"
-       line 416, "pan.___", state 2013, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 2015, "(1)"
-       line 416, "pan.___", state 2016, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 2016, "else"
-       line 416, "pan.___", state 2019, "(1)"
-       line 416, "pan.___", state 2020, "(1)"
-       line 416, "pan.___", state 2020, "(1)"
-       line 420, "pan.___", state 2027, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 2029, "(1)"
-       line 420, "pan.___", state 2030, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 2030, "else"
-       line 420, "pan.___", state 2033, "(1)"
-       line 420, "pan.___", state 2034, "(1)"
-       line 420, "pan.___", state 2034, "(1)"
-       line 418, "pan.___", state 2039, "((i<2))"
-       line 418, "pan.___", state 2039, "((i>=2))"
-       line 245, "pan.___", state 2045, "(1)"
-       line 249, "pan.___", state 2053, "(1)"
-       line 249, "pan.___", state 2054, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 2054, "else"
-       line 247, "pan.___", state 2059, "((i<1))"
-       line 247, "pan.___", state 2059, "((i>=1))"
-       line 253, "pan.___", state 2065, "(1)"
-       line 253, "pan.___", state 2066, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 2066, "else"
-       line 257, "pan.___", state 2073, "(1)"
-       line 257, "pan.___", state 2074, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 2074, "else"
-       line 255, "pan.___", state 2079, "((i<2))"
-       line 255, "pan.___", state 2079, "((i>=2))"
-       line 262, "pan.___", state 2083, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 2083, "else"
-       line 427, "pan.___", state 2085, "(1)"
-       line 427, "pan.___", state 2085, "(1)"
-       line 734, "pan.___", state 2088, "cached_urcu_active_readers = (tmp+1)"
-       line 734, "pan.___", state 2089, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 734, "pan.___", state 2090, "(1)"
-       line 407, "pan.___", state 2097, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2129, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2143, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 2161, "(1)"
-       line 253, "pan.___", state 2181, "(1)"
-       line 257, "pan.___", state 2189, "(1)"
-       line 407, "pan.___", state 2214, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2246, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2260, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 2278, "(1)"
-       line 253, "pan.___", state 2298, "(1)"
-       line 257, "pan.___", state 2306, "(1)"
-       line 407, "pan.___", state 2325, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2357, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2371, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 2389, "(1)"
-       line 253, "pan.___", state 2409, "(1)"
-       line 257, "pan.___", state 2417, "(1)"
-       line 245, "pan.___", state 2448, "(1)"
-       line 253, "pan.___", state 2468, "(1)"
-       line 257, "pan.___", state 2476, "(1)"
-       line 245, "pan.___", state 2491, "(1)"
-       line 253, "pan.___", state 2511, "(1)"
-       line 257, "pan.___", state 2519, "(1)"
-       line 929, "pan.___", state 2536, "-end-"
-       (221 of 2536 states)
-unreached in proctype urcu_writer
-       line 407, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 245, "pan.___", state 109, "(1)"
-       line 249, "pan.___", state 117, "(1)"
-       line 253, "pan.___", state 129, "(1)"
-       line 268, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 167, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 180, "cache_dirty_rcu_ptr = 0"
-       line 407, "pan.___", state 220, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 234, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 252, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 266, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 284, "(1)"
-       line 249, "pan.___", state 292, "(1)"
-       line 253, "pan.___", state 304, "(1)"
-       line 257, "pan.___", state 312, "(1)"
-       line 411, "pan.___", state 347, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 365, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 379, "cache_dirty_rcu_data[i] = 0"
-       line 249, "pan.___", state 405, "(1)"
-       line 253, "pan.___", state 417, "(1)"
-       line 257, "pan.___", state 425, "(1)"
-       line 411, "pan.___", state 468, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 486, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 500, "cache_dirty_rcu_data[i] = 0"
-       line 249, "pan.___", state 526, "(1)"
-       line 253, "pan.___", state 538, "(1)"
-       line 257, "pan.___", state 546, "(1)"
-       line 411, "pan.___", state 579, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 597, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 611, "cache_dirty_rcu_data[i] = 0"
-       line 249, "pan.___", state 637, "(1)"
-       line 253, "pan.___", state 649, "(1)"
-       line 257, "pan.___", state 657, "(1)"
-       line 411, "pan.___", state 692, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 710, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 724, "cache_dirty_rcu_data[i] = 0"
-       line 249, "pan.___", state 750, "(1)"
-       line 253, "pan.___", state 762, "(1)"
-       line 257, "pan.___", state 770, "(1)"
-       line 268, "pan.___", state 818, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 827, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 840, "cache_dirty_rcu_ptr = 0"
-       line 245, "pan.___", state 865, "(1)"
-       line 249, "pan.___", state 873, "(1)"
-       line 253, "pan.___", state 885, "(1)"
-       line 257, "pan.___", state 893, "(1)"
-       line 268, "pan.___", state 924, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 933, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 946, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 955, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 971, "(1)"
-       line 249, "pan.___", state 979, "(1)"
-       line 253, "pan.___", state 991, "(1)"
-       line 257, "pan.___", state 999, "(1)"
-       line 268, "pan.___", state 1020, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1029, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1044, "(1)"
-       line 280, "pan.___", state 1051, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1067, "(1)"
-       line 249, "pan.___", state 1075, "(1)"
-       line 253, "pan.___", state 1087, "(1)"
-       line 257, "pan.___", state 1095, "(1)"
-       line 268, "pan.___", state 1126, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1135, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1148, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1157, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1173, "(1)"
-       line 249, "pan.___", state 1181, "(1)"
-       line 253, "pan.___", state 1193, "(1)"
-       line 257, "pan.___", state 1201, "(1)"
-       line 272, "pan.___", state 1227, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1240, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1249, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1265, "(1)"
-       line 249, "pan.___", state 1273, "(1)"
-       line 253, "pan.___", state 1285, "(1)"
-       line 257, "pan.___", state 1293, "(1)"
-       line 268, "pan.___", state 1324, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1333, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1346, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1355, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1371, "(1)"
-       line 249, "pan.___", state 1379, "(1)"
-       line 253, "pan.___", state 1391, "(1)"
-       line 257, "pan.___", state 1399, "(1)"
-       line 272, "pan.___", state 1425, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1438, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1447, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1463, "(1)"
-       line 249, "pan.___", state 1471, "(1)"
-       line 253, "pan.___", state 1483, "(1)"
-       line 257, "pan.___", state 1491, "(1)"
-       line 268, "pan.___", state 1522, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1531, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1544, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1553, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1569, "(1)"
-       line 249, "pan.___", state 1577, "(1)"
-       line 253, "pan.___", state 1589, "(1)"
-       line 257, "pan.___", state 1597, "(1)"
-       line 272, "pan.___", state 1623, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1636, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1645, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1661, "(1)"
-       line 249, "pan.___", state 1669, "(1)"
-       line 253, "pan.___", state 1681, "(1)"
-       line 257, "pan.___", state 1689, "(1)"
-       line 268, "pan.___", state 1720, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1729, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1742, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1751, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1767, "(1)"
-       line 249, "pan.___", state 1775, "(1)"
-       line 253, "pan.___", state 1787, "(1)"
-       line 257, "pan.___", state 1795, "(1)"
-       line 1304, "pan.___", state 1811, "-end-"
-       (118 of 1811 states)
-unreached in proctype :init:
-       (0 of 28 states)
-unreached in proctype :never:
-       line 1369, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 1.54e+04 seconds
-pan: rate  16109.46 states/second
-pan: avg transition delay 3.148e-06 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi-compress'
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.spin.input b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 83c0751..0000000
+++ /dev/null
@@ -1,1340 +0,0 @@
-#define READER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.define b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.log b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.log
deleted file mode 100644 (file)
index a04140c..0000000
+++ /dev/null
@@ -1,681 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi-compress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1362)
-depth 7: Claim reached state 9 (line 1367)
-depth 50: Claim reached state 9 (line 1366)
-Depth=    7070 States=    1e+06 Transitions= 1.16e+07 Memory=   493.010        t=   34.5 R=   3e+04
-Depth=    7070 States=    2e+06 Transitions= 2.31e+07 Memory=   521.330        t=   69.3 R=   3e+04
-Depth=    7070 States=    3e+06 Transitions= 3.43e+07 Memory=   549.455        t=    103 R=   3e+04
-pan: resizing hashtable to -w22..  done
-Depth=    8814 States=    4e+06 Transitions= 4.57e+07 Memory=   607.041        t=    138 R=   3e+04
-Depth=    8814 States=    5e+06 Transitions= 5.73e+07 Memory=   632.920        t=    174 R=   3e+04
-Depth=    8814 States=    6e+06 Transitions= 7.04e+07 Memory=   662.217        t=    215 R=   3e+04
-Depth=    8814 States=    7e+06 Transitions= 8.38e+07 Memory=   690.049        t=    257 R=   3e+04
-Depth=    8814 States=    8e+06 Transitions= 9.59e+07 Memory=   717.588        t=    294 R=   3e+04
-Depth=    8814 States=    9e+06 Transitions= 1.08e+08 Memory=   745.127        t=    332 R=   3e+04
-pan: resizing hashtable to -w24..  done
-Depth=    8814 States=    1e+07 Transitions= 1.29e+08 Memory=   897.639        t=    398 R=   3e+04
-Depth=    8814 States=  1.1e+07 Transitions= 1.41e+08 Memory=   926.154        t=    434 R=   3e+04
-Depth=    8814 States=  1.2e+07 Transitions= 1.53e+08 Memory=   953.401        t=    471 R=   3e+04
-Depth=    8814 States=  1.3e+07 Transitions= 1.64e+08 Memory=   980.940        t=    505 R=   3e+04
-Depth=    8814 States=  1.4e+07 Transitions= 1.75e+08 Memory=  1010.725        t=    539 R=   3e+04
-Depth=    8814 States=  1.5e+07 Transitions= 1.87e+08 Memory=  1037.580        t=    573 R=   3e+04
-Depth=    8814 States=  1.6e+07 Transitions= 1.98e+08 Memory=  1064.924        t=    607 R=   3e+04
-Depth=    8814 States=  1.7e+07 Transitions= 2.09e+08 Memory=  1094.904        t=    641 R=   3e+04
-Depth=    8814 States=  1.8e+07 Transitions= 2.23e+08 Memory=  1119.514        t=    683 R=   3e+04
-Depth=    8814 States=  1.9e+07 Transitions= 2.36e+08 Memory=  1146.662        t=    725 R=   3e+04
-Depth=    8814 States=    2e+07 Transitions= 2.57e+08 Memory=  1174.201        t=    790 R=   3e+04
-Depth=    8814 States=  2.1e+07 Transitions= 2.93e+08 Memory=  1205.549        t=    908 R=   2e+04
-Depth=    9015 States=  2.2e+07 Transitions= 3.11e+08 Memory=  1235.822        t=    965 R=   2e+04
-Depth=    9015 States=  2.3e+07 Transitions= 3.25e+08 Memory=  1264.533        t= 1.01e+03 R=   2e+04
-Depth=    9015 States=  2.4e+07 Transitions= 3.45e+08 Memory=  1293.244        t= 1.07e+03 R=   2e+04
-Depth=    9015 States=  2.5e+07 Transitions= 3.67e+08 Memory=  1321.467        t= 1.14e+03 R=   2e+04
-Depth=    9015 States=  2.6e+07 Transitions= 3.84e+08 Memory=  1350.764        t= 1.2e+03 R=   2e+04
-Depth=    9015 States=  2.7e+07 Transitions= 4.07e+08 Memory=  1380.158        t= 1.27e+03 R=   2e+04
-Depth=    9015 States=  2.8e+07 Transitions= 4.29e+08 Memory=  1405.940        t= 1.34e+03 R=   2e+04
-Depth=    9015 States=  2.9e+07 Transitions= 4.48e+08 Memory=  1433.381        t= 1.4e+03 R=   2e+04
-Depth=    9015 States=    3e+07 Transitions= 4.66e+08 Memory=  1461.506        t= 1.46e+03 R=   2e+04
-Depth=    9015 States=  3.1e+07 Transitions= 4.86e+08 Memory=  1489.143        t= 1.52e+03 R=   2e+04
-Depth=    9015 States=  3.2e+07 Transitions=  5.1e+08 Memory=  1516.486        t= 1.6e+03 R=   2e+04
-Depth=    9015 States=  3.3e+07 Transitions= 5.29e+08 Memory=  1543.733        t= 1.66e+03 R=   2e+04
-Depth=    9015 States=  3.4e+07 Transitions= 5.47e+08 Memory=  1571.760        t= 1.72e+03 R=   2e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9015 States=  3.5e+07 Transitions= 5.69e+08 Memory=  2095.088        t= 1.79e+03 R=   2e+04
-Depth=    9015 States=  3.6e+07 Transitions= 5.95e+08 Memory=  2122.041        t= 1.87e+03 R=   2e+04
-Depth=    9015 States=  3.7e+07 Transitions= 6.12e+08 Memory=  2149.971        t= 1.93e+03 R=   2e+04
-Depth=    9015 States=  3.8e+07 Transitions= 6.29e+08 Memory=  2176.045        t= 1.98e+03 R=   2e+04
-Depth=    9015 States=  3.9e+07 Transitions= 6.42e+08 Memory=  2204.268        t= 2.02e+03 R=   2e+04
-Depth=    9015 States=    4e+07 Transitions= 6.56e+08 Memory=  2233.565        t= 2.06e+03 R=   2e+04
-Depth=    9015 States=  4.1e+07 Transitions= 6.69e+08 Memory=  2264.424        t= 2.1e+03 R=   2e+04
-Depth=    9015 States=  4.2e+07 Transitions= 6.82e+08 Memory=  2292.940        t= 2.14e+03 R=   2e+04
-Depth=    9015 States=  4.3e+07 Transitions= 6.95e+08 Memory=  2322.529        t= 2.18e+03 R=   2e+04
-Depth=    9015 States=  4.4e+07 Transitions= 7.07e+08 Memory=  2350.654        t= 2.22e+03 R=   2e+04
-Depth=    9015 States=  4.5e+07 Transitions= 7.28e+08 Memory=  2378.193        t= 2.29e+03 R=   2e+04
-Depth=    9015 States=  4.6e+07 Transitions= 7.63e+08 Memory=  2409.443        t= 2.4e+03 R=   2e+04
-Depth=    9015 States=  4.7e+07 Transitions= 7.99e+08 Memory=  2445.088        t= 2.52e+03 R=   2e+04
-Depth=    9015 States=  4.8e+07 Transitions= 8.49e+08 Memory=  2479.072        t= 2.69e+03 R=   2e+04
-Depth=    9015 States=  4.9e+07 Transitions= 8.91e+08 Memory=  2508.076        t= 2.82e+03 R=   2e+04
-Depth=    9015 States=    5e+07 Transitions= 9.24e+08 Memory=  2532.295        t= 2.93e+03 R=   2e+04
-Depth=    9015 States=  5.1e+07 Transitions= 9.39e+08 Memory=  2561.494        t= 2.98e+03 R=   2e+04
-Depth=    9015 States=  5.2e+07 Transitions=  9.6e+08 Memory=  2589.522        t= 3.05e+03 R=   2e+04
-Depth=    9015 States=  5.3e+07 Transitions= 9.99e+08 Memory=  2617.158        t= 3.17e+03 R=   2e+04
-Depth=    9015 States=  5.4e+07 Transitions= 1.01e+09 Memory=  2647.725        t= 3.22e+03 R=   2e+04
-Depth=    9015 States=  5.5e+07 Transitions= 1.03e+09 Memory=  2674.580        t= 3.27e+03 R=   2e+04
-Depth=    9015 States=  5.6e+07 Transitions= 1.05e+09 Memory=  2701.143        t= 3.32e+03 R=   2e+04
-Depth=    9015 States=  5.7e+07 Transitions= 1.06e+09 Memory=  2730.928        t= 3.36e+03 R=   2e+04
-Depth=    9015 States=  5.8e+07 Transitions= 1.09e+09 Memory=  2759.053        t= 3.45e+03 R=   2e+04
-Depth=    9015 States=  5.9e+07 Transitions=  1.1e+09 Memory=  2786.983        t= 3.5e+03 R=   2e+04
-Depth=    9015 States=    6e+07 Transitions= 1.13e+09 Memory=  2814.619        t= 3.6e+03 R=   2e+04
-Depth=    9015 States=  6.1e+07 Transitions= 1.15e+09 Memory=  2841.670        t= 3.66e+03 R=   2e+04
-Depth=    9015 States=  6.2e+07 Transitions= 1.19e+09 Memory=  2870.576        t= 3.77e+03 R=   2e+04
-Depth=    9015 States=  6.3e+07 Transitions= 1.21e+09 Memory=  2897.627        t= 3.84e+03 R=   2e+04
-Depth=    9015 States=  6.4e+07 Transitions= 1.24e+09 Memory=  2925.166        t= 3.94e+03 R=   2e+04
-Depth=    9015 States=  6.5e+07 Transitions= 1.26e+09 Memory=  2952.803        t= 4.01e+03 R=   2e+04
-Depth=    9015 States=  6.6e+07 Transitions= 1.28e+09 Memory=  2979.756        t= 4.09e+03 R=   2e+04
-Depth=    9015 States=  6.7e+07 Transitions=  1.3e+09 Memory=  3007.686        t= 4.15e+03 R=   2e+04
-Depth=    9015 States=  6.8e+07 Transitions= 1.33e+09 Memory=  3035.811        t= 4.23e+03 R=   2e+04
-Depth=    9015 States=  6.9e+07 Transitions= 1.36e+09 Memory=  3063.838        t= 4.32e+03 R=   2e+04
-Depth=    9522 States=    7e+07 Transitions= 1.38e+09 Memory=  3094.795        t= 4.39e+03 R=   2e+04
-Depth=    9522 States=  7.1e+07 Transitions= 1.39e+09 Memory=  3120.186        t= 4.43e+03 R=   2e+04
-Depth=    9522 States=  7.2e+07 Transitions= 1.41e+09 Memory=  3149.971        t= 4.5e+03 R=   2e+04
-Depth=    9553 States=  7.3e+07 Transitions= 1.44e+09 Memory=  3179.365        t= 4.57e+03 R=   2e+04
-Depth=    9553 States=  7.4e+07 Transitions= 1.45e+09 Memory=  3205.244        t= 4.61e+03 R=   2e+04
-Depth=    9553 States=  7.5e+07 Transitions= 1.47e+09 Memory=  3235.225        t= 4.69e+03 R=   2e+04
-Depth=    9553 States=  7.6e+07 Transitions= 1.49e+09 Memory=  3263.545        t= 4.75e+03 R=   2e+04
-Depth=    9553 States=  7.7e+07 Transitions= 1.51e+09 Memory=  3290.401        t= 4.8e+03 R=   2e+04
-Depth=    9553 States=  7.8e+07 Transitions= 1.52e+09 Memory=  3319.795        t= 4.84e+03 R=   2e+04
-Depth=    9553 States=  7.9e+07 Transitions= 1.54e+09 Memory=  3349.190        t= 4.91e+03 R=   2e+04
-Depth=    9553 States=    8e+07 Transitions= 1.56e+09 Memory=  3377.803        t= 4.98e+03 R=   2e+04
-Depth=    9553 States=  8.1e+07 Transitions= 1.58e+09 Memory=  3406.904        t= 5.04e+03 R=   2e+04
-Depth=    9553 States=  8.2e+07 Transitions=  1.6e+09 Memory=  3434.443        t= 5.08e+03 R=   2e+04
-Depth=    9553 States=  8.3e+07 Transitions= 1.61e+09 Memory=  3462.178        t= 5.14e+03 R=   2e+04
-Depth=    9553 States=  8.4e+07 Transitions= 1.63e+09 Memory=  3490.205        t= 5.18e+03 R=   2e+04
-Depth=    9553 States=  8.5e+07 Transitions= 1.65e+09 Memory=  3517.549        t= 5.24e+03 R=   2e+04
-Depth=    9553 States=  8.6e+07 Transitions= 1.67e+09 Memory=  3544.502        t= 5.31e+03 R=   2e+04
-Depth=    9553 States=  8.7e+07 Transitions= 1.69e+09 Memory=  3574.190        t= 5.38e+03 R=   2e+04
-Depth=    9553 States=  8.8e+07 Transitions=  1.7e+09 Memory=  3606.026        t= 5.42e+03 R=   2e+04
-Depth=    9553 States=  8.9e+07 Transitions= 1.72e+09 Memory=  3632.588        t= 5.48e+03 R=   2e+04
-Depth=    9553 States=    9e+07 Transitions= 1.74e+09 Memory=  3662.080        t= 5.53e+03 R=   2e+04
-Depth=    9553 States=  9.1e+07 Transitions= 1.76e+09 Memory=  3689.229        t= 5.59e+03 R=   2e+04
-Depth=    9553 States=  9.2e+07 Transitions= 1.78e+09 Memory=  3716.572        t= 5.65e+03 R=   2e+04
-Depth=    9553 States=  9.3e+07 Transitions=  1.8e+09 Memory=  3743.135        t= 5.72e+03 R=   2e+04
-Depth=    9553 States=  9.4e+07 Transitions= 1.82e+09 Memory=  3771.553        t= 5.8e+03 R=   2e+04
-Depth=    9553 States=  9.5e+07 Transitions= 1.84e+09 Memory=  3801.436        t= 5.86e+03 R=   2e+04
-Depth=    9553 States=  9.6e+07 Transitions= 1.86e+09 Memory=  3827.803        t= 5.91e+03 R=   2e+04
-Depth=    9553 States=  9.7e+07 Transitions= 1.88e+09 Memory=  3857.881        t= 5.99e+03 R=   2e+04
-Depth=    9553 States=  9.8e+07 Transitions=  1.9e+09 Memory=  3886.494        t= 6.03e+03 R=   2e+04
-Depth=    9553 States=  9.9e+07 Transitions= 1.91e+09 Memory=  3914.229        t= 6.08e+03 R=   2e+04
-Depth=    9553 States=    1e+08 Transitions= 1.93e+09 Memory=  3942.549        t= 6.13e+03 R=   2e+04
-Depth=    9553 States= 1.01e+08 Transitions= 1.94e+09 Memory=  3972.236        t= 6.19e+03 R=   2e+04
-Depth=    9553 States= 1.02e+08 Transitions= 1.96e+09 Memory=  4001.729        t= 6.24e+03 R=   2e+04
-Depth=    9553 States= 1.03e+08 Transitions= 1.98e+09 Memory=  4030.049        t= 6.3e+03 R=   2e+04
-Depth=    9553 States= 1.04e+08 Transitions=    2e+09 Memory=  4059.639        t= 6.38e+03 R=   2e+04
-Depth=    9553 States= 1.05e+08 Transitions= 2.02e+09 Memory=  4086.006        t= 6.43e+03 R=   2e+04
-Depth=    9553 States= 1.06e+08 Transitions= 2.04e+09 Memory=  4115.889        t= 6.49e+03 R=   2e+04
-Depth=    9553 States= 1.07e+08 Transitions= 2.06e+09 Memory=  4144.990        t= 6.55e+03 R=   2e+04
-Depth=    9553 States= 1.08e+08 Transitions= 2.07e+09 Memory=  4172.822        t= 6.6e+03 R=   2e+04
-Depth=    9553 States= 1.09e+08 Transitions= 2.09e+09 Memory=  4200.752        t= 6.65e+03 R=   2e+04
-Depth=    9553 States=  1.1e+08 Transitions= 2.11e+09 Memory=  4230.147        t= 6.7e+03 R=   2e+04
-Depth=    9553 States= 1.11e+08 Transitions= 2.12e+09 Memory=  4259.932        t= 6.75e+03 R=   2e+04
-Depth=    9553 States= 1.12e+08 Transitions= 2.14e+09 Memory=  4284.541        t= 6.81e+03 R=   2e+04
-Depth=    9553 States= 1.13e+08 Transitions= 2.16e+09 Memory=  4312.471        t= 6.86e+03 R=   2e+04
-Depth=    9553 States= 1.14e+08 Transitions= 2.17e+09 Memory=  4340.401        t= 6.91e+03 R=   2e+04
-Depth=    9553 States= 1.15e+08 Transitions= 2.19e+09 Memory=  4368.526        t= 6.97e+03 R=   2e+04
-Depth=    9553 States= 1.16e+08 Transitions= 2.21e+09 Memory=  4396.651        t= 7.02e+03 R=   2e+04
-Depth=    9553 States= 1.17e+08 Transitions= 2.23e+09 Memory=  4423.897        t= 7.1e+03 R=   2e+04
-Depth=    9553 States= 1.18e+08 Transitions= 2.27e+09 Memory=  4453.779        t= 7.22e+03 R=   2e+04
-Depth=    9553 States= 1.19e+08 Transitions= 2.29e+09 Memory=  4483.955        t= 7.29e+03 R=   2e+04
-Depth=    9553 States=  1.2e+08 Transitions=  2.3e+09 Memory=  4513.545        t= 7.33e+03 R=   2e+04
-Depth=    9553 States= 1.21e+08 Transitions= 2.32e+09 Memory=  4541.279        t= 7.4e+03 R=   2e+04
-Depth=    9553 States= 1.22e+08 Transitions= 2.34e+09 Memory=  4569.893        t= 7.45e+03 R=   2e+04
-Depth=    9553 States= 1.23e+08 Transitions= 2.36e+09 Memory=  4599.483        t= 7.52e+03 R=   2e+04
-Depth=    9553 States= 1.24e+08 Transitions= 2.38e+09 Memory=  4627.705        t= 7.58e+03 R=   2e+04
-Depth=    9553 States= 1.25e+08 Transitions= 2.41e+09 Memory=  4654.658        t= 7.68e+03 R=   2e+04
-Depth=    9553 States= 1.26e+08 Transitions= 2.43e+09 Memory=  4681.807        t= 7.76e+03 R=   2e+04
-Depth=    9553 States= 1.27e+08 Transitions= 2.45e+09 Memory=  4708.760        t= 7.83e+03 R=   2e+04
-Depth=    9553 States= 1.28e+08 Transitions= 2.48e+09 Memory=  4735.518        t= 7.93e+03 R=   2e+04
-Depth=    9553 States= 1.29e+08 Transitions=  2.5e+09 Memory=  4762.178        t=  8e+03 R=   2e+04
-Depth=    9553 States=  1.3e+08 Transitions= 2.52e+09 Memory=  4790.303        t= 8.07e+03 R=   2e+04
-Depth=    9553 States= 1.31e+08 Transitions= 2.55e+09 Memory=  4817.451        t= 8.15e+03 R=   2e+04
-Depth=    9553 States= 1.32e+08 Transitions= 2.57e+09 Memory=  4845.186        t= 8.22e+03 R=   2e+04
-Depth=    9553 States= 1.33e+08 Transitions= 2.59e+09 Memory=  4872.139        t= 8.3e+03 R=   2e+04
-Depth=    9553 States= 1.34e+08 Transitions= 2.61e+09 Memory=  4900.850        t= 8.37e+03 R=   2e+04
-Depth=    9553 States= 1.35e+08 Transitions= 2.63e+09 Memory=  4927.803        t= 8.43e+03 R=   2e+04
-pan: resizing hashtable to -w28..  done
-Depth=    9553 States= 1.36e+08 Transitions= 2.65e+09 Memory=  6975.803        t= 8.5e+03 R=   2e+04
-Depth=    9553 States= 1.37e+08 Transitions= 2.66e+09 Memory=  6975.803        t= 8.54e+03 R=   2e+04
-Depth=    9553 States= 1.38e+08 Transitions= 2.67e+09 Memory=  6996.799        t= 8.58e+03 R=   2e+04
-Depth=    9553 States= 1.39e+08 Transitions= 2.69e+09 Memory=  7026.779        t= 8.62e+03 R=   2e+04
-Depth=    9553 States=  1.4e+08 Transitions=  2.7e+09 Memory=  7056.467        t= 8.68e+03 R=   2e+04
-Depth=    9553 States= 1.41e+08 Transitions= 2.72e+09 Memory=  7084.787        t= 8.72e+03 R=   2e+04
-Depth=    9553 States= 1.42e+08 Transitions= 2.74e+09 Memory=  7114.084        t= 8.77e+03 R=   2e+04
-Depth=    9553 States= 1.43e+08 Transitions= 2.75e+09 Memory=  7143.088        t= 8.82e+03 R=   2e+04
-Depth=    9553 States= 1.44e+08 Transitions= 2.77e+09 Memory=  7170.920        t= 8.88e+03 R=   2e+04
-Depth=    9553 States= 1.45e+08 Transitions= 2.79e+09 Memory=  7198.166        t= 8.94e+03 R=   2e+04
-Depth=    9553 States= 1.46e+08 Transitions= 2.82e+09 Memory=  7229.514        t= 9.06e+03 R=   2e+04
-Depth=    9553 States= 1.47e+08 Transitions= 2.86e+09 Memory=  7265.158        t= 9.18e+03 R=   2e+04
-Depth=    9553 States= 1.48e+08 Transitions= 2.91e+09 Memory=  7299.143        t= 9.34e+03 R=   2e+04
-Depth=    9553 States= 1.49e+08 Transitions= 2.95e+09 Memory=  7327.170        t= 9.47e+03 R=   2e+04
-Depth=    9553 States=  1.5e+08 Transitions= 2.99e+09 Memory=  7352.561        t= 9.59e+03 R=   2e+04
-Depth=    9553 States= 1.51e+08 Transitions=    3e+09 Memory=  7380.881        t= 9.64e+03 R=   2e+04
-Depth=    9553 States= 1.52e+08 Transitions= 3.02e+09 Memory=  7408.908        t= 9.7e+03 R=   2e+04
-Depth=    9553 States= 1.53e+08 Transitions= 3.05e+09 Memory=  7437.033        t= 9.8e+03 R=   2e+04
-Depth=    9553 States= 1.54e+08 Transitions= 3.08e+09 Memory=  7465.744        t= 9.89e+03 R=   2e+04
-Depth=    9553 States= 1.55e+08 Transitions=  3.1e+09 Memory=  7493.869        t= 9.95e+03 R=   2e+04
-Depth=    9553 States= 1.56e+08 Transitions= 3.11e+09 Memory=  7520.529        t= 9.99e+03 R=   2e+04
-Depth=    9553 States= 1.57e+08 Transitions= 3.13e+09 Memory=  7547.092        t=  1e+04 R=   2e+04
-Depth=    9553 States= 1.58e+08 Transitions= 3.14e+09 Memory=  7577.170        t= 1.01e+04 R=   2e+04
-Depth=    9553 States= 1.59e+08 Transitions= 3.17e+09 Memory=  7604.611        t= 1.02e+04 R=   2e+04
-Depth=    9553 States=  1.6e+08 Transitions= 3.19e+09 Memory=  7631.955        t= 1.02e+04 R=   2e+04
-Depth=    9553 States= 1.61e+08 Transitions= 3.21e+09 Memory=  7659.299        t= 1.03e+04 R=   2e+04
-Depth=    9553 States= 1.62e+08 Transitions= 3.24e+09 Memory=  7686.740        t= 1.04e+04 R=   2e+04
-Depth=    9553 States= 1.63e+08 Transitions= 3.27e+09 Memory=  7713.791        t= 1.05e+04 R=   2e+04
-Depth=    9553 States= 1.64e+08 Transitions= 3.29e+09 Memory=  7743.186        t= 1.06e+04 R=   2e+04
-Depth=    9553 States= 1.65e+08 Transitions= 3.31e+09 Memory=  7771.604        t= 1.06e+04 R=   2e+04
-Depth=    9553 States= 1.66e+08 Transitions= 3.34e+09 Memory=  7797.971        t= 1.07e+04 R=   2e+04
-Depth=    9553 States= 1.67e+08 Transitions= 3.37e+09 Memory=  7825.217        t= 1.08e+04 R=   2e+04
-Depth=    9553 States= 1.68e+08 Transitions= 3.39e+09 Memory=  7853.733        t= 1.09e+04 R=   2e+04
-Depth=    9553 States= 1.69e+08 Transitions= 3.41e+09 Memory=  7880.686        t= 1.09e+04 R=   2e+04
-Depth=    9553 States=  1.7e+08 Transitions= 3.44e+09 Memory=  7909.690        t= 1.1e+04 R=   2e+04
-Depth=    9553 States= 1.71e+08 Transitions= 3.46e+09 Memory=  7939.279        t= 1.11e+04 R=   2e+04
-Depth=    9553 States= 1.72e+08 Transitions= 3.47e+09 Memory=  7964.768        t= 1.11e+04 R=   2e+04
-Depth=    9553 States= 1.73e+08 Transitions=  3.5e+09 Memory=  7994.260        t= 1.12e+04 R=   2e+04
-Depth=    9553 States= 1.74e+08 Transitions= 3.52e+09 Memory=  8023.850        t= 1.13e+04 R=   2e+04
-Depth=    9553 States= 1.75e+08 Transitions= 3.53e+09 Memory=  8051.877        t= 1.13e+04 R=   2e+04
-Depth=    9553 States= 1.76e+08 Transitions= 3.56e+09 Memory=  8080.979        t= 1.14e+04 R=   2e+04
-Depth=    9553 States= 1.77e+08 Transitions= 3.57e+09 Memory=  8107.834        t= 1.15e+04 R=   2e+04
-Depth=    9553 States= 1.78e+08 Transitions= 3.59e+09 Memory=  8137.033        t= 1.15e+04 R=   2e+04
-Depth=    9553 States= 1.79e+08 Transitions= 3.61e+09 Memory=  8165.158        t= 1.16e+04 R=   2e+04
-Depth=    9553 States=  1.8e+08 Transitions= 3.63e+09 Memory=  8194.065        t= 1.16e+04 R=   2e+04
-Depth=    9553 States= 1.81e+08 Transitions= 3.65e+09 Memory=  8222.971        t= 1.17e+04 R=   2e+04
-Depth=    9553 States= 1.82e+08 Transitions= 3.66e+09 Memory=  8251.096        t= 1.17e+04 R=   2e+04
-Depth=    9553 States= 1.83e+08 Transitions= 3.68e+09 Memory=  8279.514        t= 1.18e+04 R=   2e+04
-Depth=    9553 States= 1.84e+08 Transitions= 3.69e+09 Memory=  8307.151        t= 1.18e+04 R=   2e+04
-Depth=    9553 States= 1.85e+08 Transitions= 3.71e+09 Memory=  8334.787        t= 1.19e+04 R=   2e+04
-Depth=    9553 States= 1.86e+08 Transitions= 3.73e+09 Memory=  8361.838        t= 1.2e+04 R=   2e+04
-Depth=    9553 States= 1.87e+08 Transitions= 3.75e+09 Memory=  8392.209        t= 1.2e+04 R=   2e+04
-Depth=    9553 States= 1.88e+08 Transitions= 3.77e+09 Memory=  8423.361        t= 1.21e+04 R=   2e+04
-Depth=    9553 States= 1.89e+08 Transitions= 3.78e+09 Memory=  8449.826        t= 1.21e+04 R=   2e+04
-Depth=    9553 States=  1.9e+08 Transitions=  3.8e+09 Memory=  8479.026        t= 1.22e+04 R=   2e+04
-Depth=    9553 States= 1.91e+08 Transitions= 3.82e+09 Memory=  8506.076        t= 1.22e+04 R=   2e+04
-Depth=    9553 States= 1.92e+08 Transitions= 3.84e+09 Memory=  8533.029        t= 1.23e+04 R=   2e+04
-Depth=    9553 States= 1.93e+08 Transitions= 3.86e+09 Memory=  8563.889        t= 1.24e+04 R=   2e+04
-Depth=    9553 States= 1.94e+08 Transitions= 3.88e+09 Memory=  8590.744        t= 1.24e+04 R=   2e+04
-Depth=    9553 States= 1.95e+08 Transitions=  3.9e+09 Memory=  8620.334        t= 1.25e+04 R=   2e+04
-Depth=    9553 States= 1.96e+08 Transitions= 3.92e+09 Memory=  8649.826        t= 1.25e+04 R=   2e+04
-Depth=    9553 States= 1.97e+08 Transitions= 3.93e+09 Memory=  8676.486        t= 1.26e+04 R=   2e+04
-Depth=    9553 States= 1.98e+08 Transitions= 3.95e+09 Memory=  8705.197        t= 1.26e+04 R=   2e+04
-Depth=    9553 States= 1.99e+08 Transitions= 3.96e+09 Memory=  8734.006        t= 1.27e+04 R=   2e+04
-Depth=    9553 States=    2e+08 Transitions= 3.98e+09 Memory=  8764.279        t= 1.27e+04 R=   2e+04
-Depth=    9553 States= 2.01e+08 Transitions=    4e+09 Memory=  8792.209        t= 1.28e+04 R=   2e+04
-Depth=    9553 States= 2.02e+08 Transitions= 4.03e+09 Memory=  8821.408        t= 1.29e+04 R=   2e+04
-Depth=    9553 States= 2.03e+08 Transitions= 4.04e+09 Memory=  8849.338        t= 1.29e+04 R=   2e+04
-Depth=    9553 States= 2.04e+08 Transitions= 4.06e+09 Memory=  8878.733        t= 1.3e+04 R=   2e+04
-Depth=    9553 States= 2.05e+08 Transitions= 4.08e+09 Memory=  8908.322        t= 1.31e+04 R=   2e+04
-Depth=    9553 States= 2.06e+08 Transitions= 4.09e+09 Memory=  8934.494        t= 1.31e+04 R=   2e+04
-Depth=    9553 States= 2.07e+08 Transitions= 4.11e+09 Memory=  8963.498        t= 1.32e+04 R=   2e+04
-Depth=    9553 States= 2.08e+08 Transitions= 4.13e+09 Memory=  8991.818        t= 1.32e+04 R=   2e+04
-Depth=    9553 States= 2.09e+08 Transitions= 4.14e+09 Memory=  9022.287        t= 1.33e+04 R=   2e+04
-Depth=    9553 States=  2.1e+08 Transitions= 4.16e+09 Memory=  9047.580        t= 1.33e+04 R=   2e+04
-Depth=    9553 States= 2.11e+08 Transitions= 4.18e+09 Memory=  9075.412        t= 1.34e+04 R=   2e+04
-Depth=    9553 States= 2.12e+08 Transitions= 4.19e+09 Memory=  9103.244        t= 1.34e+04 R=   2e+04
-Depth=    9553 States= 2.13e+08 Transitions= 4.21e+09 Memory=  9131.467        t= 1.35e+04 R=   2e+04
-Depth=    9553 States= 2.14e+08 Transitions= 4.22e+09 Memory=  9159.006        t= 1.35e+04 R=   2e+04
-Depth=    9553 States= 2.15e+08 Transitions= 4.26e+09 Memory=  9188.010        t= 1.36e+04 R=   2e+04
-Depth=    9553 States= 2.16e+08 Transitions= 4.29e+09 Memory=  9218.283        t= 1.37e+04 R=   2e+04
-Depth=    9553 States= 2.17e+08 Transitions=  4.3e+09 Memory=  9246.897        t= 1.37e+04 R=   2e+04
-Depth=    9553 States= 2.18e+08 Transitions= 4.32e+09 Memory=  9276.193        t= 1.38e+04 R=   2e+04
-Depth=    9553 States= 2.19e+08 Transitions= 4.33e+09 Memory=  9305.002        t= 1.39e+04 R=   2e+04
-Depth=    9553 States=  2.2e+08 Transitions= 4.35e+09 Memory=  9334.299        t= 1.39e+04 R=   2e+04
-Depth=    9553 States= 2.21e+08 Transitions= 4.37e+09 Memory=  9362.619        t= 1.4e+04 R=   2e+04
-Depth=    9553 States= 2.22e+08 Transitions=  4.4e+09 Memory=  9388.108        t= 1.41e+04 R=   2e+04
-Depth=    9553 States= 2.23e+08 Transitions= 4.43e+09 Memory=  9415.354        t= 1.42e+04 R=   2e+04
-Depth=    9553 States= 2.24e+08 Transitions= 4.45e+09 Memory=  9442.111        t= 1.42e+04 R=   2e+04
-Depth=    9553 States= 2.25e+08 Transitions= 4.48e+09 Memory=  9468.967        t= 1.43e+04 R=   2e+04
-Depth=    9553 States= 2.26e+08 Transitions=  4.5e+09 Memory=  9495.041        t= 1.44e+04 R=   2e+04
-Depth=    9553 States= 2.27e+08 Transitions= 4.52e+09 Memory=  9522.580        t= 1.44e+04 R=   2e+04
-Depth=    9553 States= 2.28e+08 Transitions= 4.54e+09 Memory=  9549.631        t= 1.45e+04 R=   2e+04
-Depth=    9553 States= 2.29e+08 Transitions= 4.56e+09 Memory=  9576.096        t= 1.46e+04 R=   2e+04
-Depth=    9553 States=  2.3e+08 Transitions= 4.59e+09 Memory=  9602.268        t= 1.47e+04 R=   2e+04
-Depth=    9553 States= 2.31e+08 Transitions=  4.6e+09 Memory=  9630.197        t= 1.47e+04 R=   2e+04
-Depth=    9553 States= 2.32e+08 Transitions= 4.63e+09 Memory=  9656.858        t= 1.48e+04 R=   2e+04
-Depth=    9553 States= 2.33e+08 Transitions= 4.66e+09 Memory=  9683.713        t= 1.49e+04 R=   2e+04
-Depth=    9553 States= 2.34e+08 Transitions= 4.68e+09 Memory=  9710.373        t= 1.5e+04 R=   2e+04
-Depth=    9553 States= 2.35e+08 Transitions=  4.7e+09 Memory=  9738.108        t= 1.5e+04 R=   2e+04
-Depth=    9553 States= 2.36e+08 Transitions= 4.72e+09 Memory=  9765.158        t= 1.51e+04 R=   2e+04
-Depth=    9553 States= 2.37e+08 Transitions= 4.74e+09 Memory=  9792.404        t= 1.52e+04 R=   2e+04
-Depth=    9553 States= 2.38e+08 Transitions= 4.77e+09 Memory=  9818.576        t= 1.52e+04 R=   2e+04
-Depth=    9553 States= 2.39e+08 Transitions= 4.79e+09 Memory=  9845.432        t= 1.53e+04 R=   2e+04
-Depth=    9553 States=  2.4e+08 Transitions=  4.8e+09 Memory=  9871.701        t= 1.53e+04 R=   2e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 9553, errors: 0
-1.4728139e+08 states, stored (2.40187e+08 visited)
-4.565323e+09 states, matched
-4.8055096e+09 transitions (= visited+matched)
-7.4787137e+10 atomic steps
-hash conflicts: 1.0275497e+09 (resolved)
-
-Stats on memory usage (in Megabytes):
-16293.183      equivalent memory usage for states (stored*(State-vector + overhead))
- 7372.383      actual memory usage for states (compression: 45.25%)
-               state-vector as stored = 16 byte + 36 byte overhead
- 2048.000      memory used for hash table (-w28)
-  457.764      memory used for DFS stack (-m10000000)
-    1.367      memory lost to fragmentation
- 9876.779      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 592075 4097 3828 2 2 ]
-unreached in proctype urcu_reader
-       line 268, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 276, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 104, "(1)"
-       line 249, "pan.___", state 112, "(1)"
-       line 253, "pan.___", state 124, "(1)"
-       line 257, "pan.___", state 132, "(1)"
-       line 407, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 222, "(1)"
-       line 253, "pan.___", state 242, "(1)"
-       line 257, "pan.___", state 250, "(1)"
-       line 687, "pan.___", state 269, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 407, "pan.___", state 276, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 308, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 322, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 340, "(1)"
-       line 253, "pan.___", state 360, "(1)"
-       line 257, "pan.___", state 368, "(1)"
-       line 407, "pan.___", state 387, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 419, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 433, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 451, "(1)"
-       line 253, "pan.___", state 471, "(1)"
-       line 257, "pan.___", state 479, "(1)"
-       line 407, "pan.___", state 500, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 502, "(1)"
-       line 407, "pan.___", state 503, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 503, "else"
-       line 407, "pan.___", state 506, "(1)"
-       line 411, "pan.___", state 514, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 516, "(1)"
-       line 411, "pan.___", state 517, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 517, "else"
-       line 411, "pan.___", state 520, "(1)"
-       line 411, "pan.___", state 521, "(1)"
-       line 411, "pan.___", state 521, "(1)"
-       line 409, "pan.___", state 526, "((i<1))"
-       line 409, "pan.___", state 526, "((i>=1))"
-       line 416, "pan.___", state 532, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 534, "(1)"
-       line 416, "pan.___", state 535, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 535, "else"
-       line 416, "pan.___", state 538, "(1)"
-       line 416, "pan.___", state 539, "(1)"
-       line 416, "pan.___", state 539, "(1)"
-       line 420, "pan.___", state 546, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 548, "(1)"
-       line 420, "pan.___", state 549, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 549, "else"
-       line 420, "pan.___", state 552, "(1)"
-       line 420, "pan.___", state 553, "(1)"
-       line 420, "pan.___", state 553, "(1)"
-       line 418, "pan.___", state 558, "((i<2))"
-       line 418, "pan.___", state 558, "((i>=2))"
-       line 245, "pan.___", state 564, "(1)"
-       line 249, "pan.___", state 572, "(1)"
-       line 249, "pan.___", state 573, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 573, "else"
-       line 247, "pan.___", state 578, "((i<1))"
-       line 247, "pan.___", state 578, "((i>=1))"
-       line 253, "pan.___", state 584, "(1)"
-       line 253, "pan.___", state 585, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 585, "else"
-       line 257, "pan.___", state 592, "(1)"
-       line 257, "pan.___", state 593, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 593, "else"
-       line 255, "pan.___", state 598, "((i<2))"
-       line 255, "pan.___", state 598, "((i>=2))"
-       line 262, "pan.___", state 602, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 602, "else"
-       line 427, "pan.___", state 604, "(1)"
-       line 427, "pan.___", state 604, "(1)"
-       line 687, "pan.___", state 607, "cached_urcu_active_readers = (tmp+1)"
-       line 687, "pan.___", state 608, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 687, "pan.___", state 609, "(1)"
-       line 407, "pan.___", state 616, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 648, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 662, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 680, "(1)"
-       line 253, "pan.___", state 700, "(1)"
-       line 257, "pan.___", state 708, "(1)"
-       line 407, "pan.___", state 734, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 766, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 780, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 798, "(1)"
-       line 253, "pan.___", state 818, "(1)"
-       line 257, "pan.___", state 826, "(1)"
-       line 407, "pan.___", state 845, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 847, "(1)"
-       line 407, "pan.___", state 848, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 848, "else"
-       line 407, "pan.___", state 851, "(1)"
-       line 411, "pan.___", state 859, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 861, "(1)"
-       line 411, "pan.___", state 862, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 862, "else"
-       line 411, "pan.___", state 865, "(1)"
-       line 411, "pan.___", state 866, "(1)"
-       line 411, "pan.___", state 866, "(1)"
-       line 409, "pan.___", state 871, "((i<1))"
-       line 409, "pan.___", state 871, "((i>=1))"
-       line 416, "pan.___", state 877, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 879, "(1)"
-       line 416, "pan.___", state 880, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 880, "else"
-       line 416, "pan.___", state 883, "(1)"
-       line 416, "pan.___", state 884, "(1)"
-       line 416, "pan.___", state 884, "(1)"
-       line 420, "pan.___", state 891, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 893, "(1)"
-       line 420, "pan.___", state 894, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 894, "else"
-       line 420, "pan.___", state 897, "(1)"
-       line 420, "pan.___", state 898, "(1)"
-       line 420, "pan.___", state 898, "(1)"
-       line 418, "pan.___", state 903, "((i<2))"
-       line 418, "pan.___", state 903, "((i>=2))"
-       line 245, "pan.___", state 909, "(1)"
-       line 249, "pan.___", state 917, "(1)"
-       line 249, "pan.___", state 918, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 918, "else"
-       line 247, "pan.___", state 923, "((i<1))"
-       line 247, "pan.___", state 923, "((i>=1))"
-       line 253, "pan.___", state 929, "(1)"
-       line 253, "pan.___", state 930, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 930, "else"
-       line 257, "pan.___", state 937, "(1)"
-       line 257, "pan.___", state 938, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 938, "else"
-       line 255, "pan.___", state 943, "((i<2))"
-       line 255, "pan.___", state 943, "((i>=2))"
-       line 262, "pan.___", state 947, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 947, "else"
-       line 427, "pan.___", state 949, "(1)"
-       line 427, "pan.___", state 949, "(1)"
-       line 695, "pan.___", state 953, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 407, "pan.___", state 958, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 990, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1004, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1022, "(1)"
-       line 253, "pan.___", state 1042, "(1)"
-       line 257, "pan.___", state 1050, "(1)"
-       line 407, "pan.___", state 1072, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1104, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1118, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1136, "(1)"
-       line 253, "pan.___", state 1156, "(1)"
-       line 257, "pan.___", state 1164, "(1)"
-       line 407, "pan.___", state 1187, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1219, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1233, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1251, "(1)"
-       line 253, "pan.___", state 1271, "(1)"
-       line 257, "pan.___", state 1279, "(1)"
-       line 407, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1330, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1344, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1362, "(1)"
-       line 253, "pan.___", state 1382, "(1)"
-       line 257, "pan.___", state 1390, "(1)"
-       line 407, "pan.___", state 1414, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1446, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1460, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1478, "(1)"
-       line 253, "pan.___", state 1498, "(1)"
-       line 257, "pan.___", state 1506, "(1)"
-       line 407, "pan.___", state 1525, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1557, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1571, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1589, "(1)"
-       line 253, "pan.___", state 1609, "(1)"
-       line 257, "pan.___", state 1617, "(1)"
-       line 407, "pan.___", state 1639, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1671, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1685, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1703, "(1)"
-       line 253, "pan.___", state 1723, "(1)"
-       line 257, "pan.___", state 1731, "(1)"
-       line 734, "pan.___", state 1750, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 407, "pan.___", state 1757, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1789, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1803, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1821, "(1)"
-       line 253, "pan.___", state 1841, "(1)"
-       line 257, "pan.___", state 1849, "(1)"
-       line 407, "pan.___", state 1868, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 1900, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 1914, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1932, "(1)"
-       line 253, "pan.___", state 1952, "(1)"
-       line 257, "pan.___", state 1960, "(1)"
-       line 407, "pan.___", state 1981, "cache_dirty_urcu_gp_ctr = 0"
-       line 407, "pan.___", state 1983, "(1)"
-       line 407, "pan.___", state 1984, "(cache_dirty_urcu_gp_ctr)"
-       line 407, "pan.___", state 1984, "else"
-       line 407, "pan.___", state 1987, "(1)"
-       line 411, "pan.___", state 1995, "cache_dirty_urcu_active_readers = 0"
-       line 411, "pan.___", state 1997, "(1)"
-       line 411, "pan.___", state 1998, "(cache_dirty_urcu_active_readers)"
-       line 411, "pan.___", state 1998, "else"
-       line 411, "pan.___", state 2001, "(1)"
-       line 411, "pan.___", state 2002, "(1)"
-       line 411, "pan.___", state 2002, "(1)"
-       line 409, "pan.___", state 2007, "((i<1))"
-       line 409, "pan.___", state 2007, "((i>=1))"
-       line 416, "pan.___", state 2013, "cache_dirty_rcu_ptr = 0"
-       line 416, "pan.___", state 2015, "(1)"
-       line 416, "pan.___", state 2016, "(cache_dirty_rcu_ptr)"
-       line 416, "pan.___", state 2016, "else"
-       line 416, "pan.___", state 2019, "(1)"
-       line 416, "pan.___", state 2020, "(1)"
-       line 416, "pan.___", state 2020, "(1)"
-       line 420, "pan.___", state 2027, "cache_dirty_rcu_data[i] = 0"
-       line 420, "pan.___", state 2029, "(1)"
-       line 420, "pan.___", state 2030, "(cache_dirty_rcu_data[i])"
-       line 420, "pan.___", state 2030, "else"
-       line 420, "pan.___", state 2033, "(1)"
-       line 420, "pan.___", state 2034, "(1)"
-       line 420, "pan.___", state 2034, "(1)"
-       line 418, "pan.___", state 2039, "((i<2))"
-       line 418, "pan.___", state 2039, "((i>=2))"
-       line 245, "pan.___", state 2045, "(1)"
-       line 249, "pan.___", state 2053, "(1)"
-       line 249, "pan.___", state 2054, "(!(cache_dirty_urcu_active_readers))"
-       line 249, "pan.___", state 2054, "else"
-       line 247, "pan.___", state 2059, "((i<1))"
-       line 247, "pan.___", state 2059, "((i>=1))"
-       line 253, "pan.___", state 2065, "(1)"
-       line 253, "pan.___", state 2066, "(!(cache_dirty_rcu_ptr))"
-       line 253, "pan.___", state 2066, "else"
-       line 257, "pan.___", state 2073, "(1)"
-       line 257, "pan.___", state 2074, "(!(cache_dirty_rcu_data[i]))"
-       line 257, "pan.___", state 2074, "else"
-       line 255, "pan.___", state 2079, "((i<2))"
-       line 255, "pan.___", state 2079, "((i>=2))"
-       line 262, "pan.___", state 2083, "(!(cache_dirty_urcu_gp_ctr))"
-       line 262, "pan.___", state 2083, "else"
-       line 427, "pan.___", state 2085, "(1)"
-       line 427, "pan.___", state 2085, "(1)"
-       line 734, "pan.___", state 2088, "cached_urcu_active_readers = (tmp+1)"
-       line 734, "pan.___", state 2089, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 734, "pan.___", state 2090, "(1)"
-       line 407, "pan.___", state 2097, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2129, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2143, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 2161, "(1)"
-       line 253, "pan.___", state 2181, "(1)"
-       line 257, "pan.___", state 2189, "(1)"
-       line 407, "pan.___", state 2214, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2246, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2260, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 2278, "(1)"
-       line 253, "pan.___", state 2298, "(1)"
-       line 257, "pan.___", state 2306, "(1)"
-       line 407, "pan.___", state 2325, "cache_dirty_urcu_gp_ctr = 0"
-       line 416, "pan.___", state 2357, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 2371, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 2389, "(1)"
-       line 253, "pan.___", state 2409, "(1)"
-       line 257, "pan.___", state 2417, "(1)"
-       line 245, "pan.___", state 2448, "(1)"
-       line 253, "pan.___", state 2468, "(1)"
-       line 257, "pan.___", state 2476, "(1)"
-       line 245, "pan.___", state 2491, "(1)"
-       line 253, "pan.___", state 2511, "(1)"
-       line 257, "pan.___", state 2519, "(1)"
-       line 929, "pan.___", state 2536, "-end-"
-       (221 of 2536 states)
-unreached in proctype urcu_writer
-       line 407, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 245, "pan.___", state 109, "(1)"
-       line 249, "pan.___", state 117, "(1)"
-       line 253, "pan.___", state 129, "(1)"
-       line 268, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 167, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 180, "cache_dirty_rcu_ptr = 0"
-       line 407, "pan.___", state 220, "cache_dirty_urcu_gp_ctr = 0"
-       line 411, "pan.___", state 234, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 252, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 266, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 284, "(1)"
-       line 249, "pan.___", state 292, "(1)"
-       line 253, "pan.___", state 304, "(1)"
-       line 257, "pan.___", state 312, "(1)"
-       line 411, "pan.___", state 347, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 365, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 379, "cache_dirty_rcu_data[i] = 0"
-       line 249, "pan.___", state 405, "(1)"
-       line 253, "pan.___", state 417, "(1)"
-       line 257, "pan.___", state 425, "(1)"
-       line 411, "pan.___", state 468, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 486, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 500, "cache_dirty_rcu_data[i] = 0"
-       line 249, "pan.___", state 526, "(1)"
-       line 253, "pan.___", state 538, "(1)"
-       line 257, "pan.___", state 546, "(1)"
-       line 411, "pan.___", state 579, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 597, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 611, "cache_dirty_rcu_data[i] = 0"
-       line 249, "pan.___", state 637, "(1)"
-       line 253, "pan.___", state 649, "(1)"
-       line 257, "pan.___", state 657, "(1)"
-       line 411, "pan.___", state 692, "cache_dirty_urcu_active_readers = 0"
-       line 416, "pan.___", state 710, "cache_dirty_rcu_ptr = 0"
-       line 420, "pan.___", state 724, "cache_dirty_rcu_data[i] = 0"
-       line 249, "pan.___", state 750, "(1)"
-       line 253, "pan.___", state 762, "(1)"
-       line 257, "pan.___", state 770, "(1)"
-       line 268, "pan.___", state 823, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 832, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 847, "(1)"
-       line 280, "pan.___", state 854, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 870, "(1)"
-       line 249, "pan.___", state 878, "(1)"
-       line 253, "pan.___", state 890, "(1)"
-       line 257, "pan.___", state 898, "(1)"
-       line 268, "pan.___", state 929, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 938, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 951, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 960, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 976, "(1)"
-       line 249, "pan.___", state 984, "(1)"
-       line 253, "pan.___", state 996, "(1)"
-       line 257, "pan.___", state 1004, "(1)"
-       line 272, "pan.___", state 1030, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1043, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1052, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1068, "(1)"
-       line 249, "pan.___", state 1076, "(1)"
-       line 253, "pan.___", state 1088, "(1)"
-       line 257, "pan.___", state 1096, "(1)"
-       line 268, "pan.___", state 1127, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1136, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1149, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1158, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1174, "(1)"
-       line 249, "pan.___", state 1182, "(1)"
-       line 253, "pan.___", state 1194, "(1)"
-       line 257, "pan.___", state 1202, "(1)"
-       line 272, "pan.___", state 1228, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1241, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1250, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1266, "(1)"
-       line 249, "pan.___", state 1274, "(1)"
-       line 253, "pan.___", state 1286, "(1)"
-       line 257, "pan.___", state 1294, "(1)"
-       line 268, "pan.___", state 1325, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1334, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1347, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1356, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1372, "(1)"
-       line 249, "pan.___", state 1380, "(1)"
-       line 253, "pan.___", state 1392, "(1)"
-       line 257, "pan.___", state 1400, "(1)"
-       line 272, "pan.___", state 1426, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1439, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1448, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1464, "(1)"
-       line 249, "pan.___", state 1472, "(1)"
-       line 253, "pan.___", state 1484, "(1)"
-       line 257, "pan.___", state 1492, "(1)"
-       line 268, "pan.___", state 1523, "cache_dirty_urcu_gp_ctr = 0"
-       line 272, "pan.___", state 1532, "cache_dirty_urcu_active_readers = 0"
-       line 276, "pan.___", state 1545, "cache_dirty_rcu_ptr = 0"
-       line 280, "pan.___", state 1554, "cache_dirty_rcu_data[i] = 0"
-       line 245, "pan.___", state 1570, "(1)"
-       line 249, "pan.___", state 1578, "(1)"
-       line 253, "pan.___", state 1590, "(1)"
-       line 257, "pan.___", state 1598, "(1)"
-       line 1304, "pan.___", state 1614, "-end-"
-       (103 of 1614 states)
-unreached in proctype :init:
-       (0 of 28 states)
-unreached in proctype :never:
-       line 1369, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 1.54e+04 seconds
-pan: rate 15645.145 states/second
-pan: avg transition delay 3.1947e-06 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi-compress'
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.spin.input b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index b353239..0000000
+++ /dev/null
@@ -1,1340 +0,0 @@
-#define WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.define b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.log b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index 52db020..0000000
+++ /dev/null
@@ -1,465 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi-compress'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DCOLLAPSE -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1363)
-depth 7: Claim reached state 9 (line 1368)
-depth 50: Claim reached state 9 (line 1367)
-Depth=    7070 States=    1e+06 Transitions= 1.16e+07 Memory=   492.912        t=   33.7 R=   3e+04
-Depth=    7070 States=    2e+06 Transitions= 2.31e+07 Memory=   521.233        t=     68 R=   3e+04
-Depth=    7070 States=    3e+06 Transitions= 3.43e+07 Memory=   549.358        t=    102 R=   3e+04
-pan: resizing hashtable to -w22..  done
-pan: acceptance cycle (at depth 1558)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-       + Compression
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 80 byte, depth reached 7070, errors: 1
-  1856640 states, stored (3.13554e+06 visited)
- 32657997 states, matched
- 35793542 transitions (= visited+matched)
-5.1088012e+08 atomic steps
-hash conflicts:  10885217 (resolved)
-
-Stats on memory usage (in Megabytes):
-  205.393      equivalent memory usage for states (stored*(State-vector + overhead))
-   93.456      actual memory usage for states (compression: 45.50%)
-               state-vector as stored = 17 byte + 36 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  583.115      total actual memory usage
-
-nr of templates: [ globals chans procs ]
-collapse counts: [ 12368 744 254 2 2 ]
-unreached in proctype urcu_reader
-       line 269, "pan.___", state 57, "cache_dirty_urcu_gp_ctr = 0"
-       line 277, "pan.___", state 79, "cache_dirty_rcu_ptr = 0"
-       line 281, "pan.___", state 88, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 104, "(1)"
-       line 250, "pan.___", state 112, "(1)"
-       line 254, "pan.___", state 124, "(1)"
-       line 258, "pan.___", state 132, "(1)"
-       line 408, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 190, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 204, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 222, "(1)"
-       line 254, "pan.___", state 242, "(1)"
-       line 258, "pan.___", state 250, "(1)"
-       line 688, "pan.___", state 269, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 408, "pan.___", state 276, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 308, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 322, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 340, "(1)"
-       line 254, "pan.___", state 360, "(1)"
-       line 258, "pan.___", state 368, "(1)"
-       line 408, "pan.___", state 387, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 419, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 433, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 451, "(1)"
-       line 254, "pan.___", state 471, "(1)"
-       line 258, "pan.___", state 479, "(1)"
-       line 408, "pan.___", state 500, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 502, "(1)"
-       line 408, "pan.___", state 503, "(cache_dirty_urcu_gp_ctr)"
-       line 408, "pan.___", state 503, "else"
-       line 408, "pan.___", state 506, "(1)"
-       line 412, "pan.___", state 514, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 516, "(1)"
-       line 412, "pan.___", state 517, "(cache_dirty_urcu_active_readers)"
-       line 412, "pan.___", state 517, "else"
-       line 412, "pan.___", state 520, "(1)"
-       line 412, "pan.___", state 521, "(1)"
-       line 412, "pan.___", state 521, "(1)"
-       line 410, "pan.___", state 526, "((i<1))"
-       line 410, "pan.___", state 526, "((i>=1))"
-       line 417, "pan.___", state 532, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 534, "(1)"
-       line 417, "pan.___", state 535, "(cache_dirty_rcu_ptr)"
-       line 417, "pan.___", state 535, "else"
-       line 417, "pan.___", state 538, "(1)"
-       line 417, "pan.___", state 539, "(1)"
-       line 417, "pan.___", state 539, "(1)"
-       line 421, "pan.___", state 546, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 548, "(1)"
-       line 421, "pan.___", state 549, "(cache_dirty_rcu_data[i])"
-       line 421, "pan.___", state 549, "else"
-       line 421, "pan.___", state 552, "(1)"
-       line 421, "pan.___", state 553, "(1)"
-       line 421, "pan.___", state 553, "(1)"
-       line 419, "pan.___", state 558, "((i<2))"
-       line 419, "pan.___", state 558, "((i>=2))"
-       line 246, "pan.___", state 564, "(1)"
-       line 250, "pan.___", state 572, "(1)"
-       line 250, "pan.___", state 573, "(!(cache_dirty_urcu_active_readers))"
-       line 250, "pan.___", state 573, "else"
-       line 248, "pan.___", state 578, "((i<1))"
-       line 248, "pan.___", state 578, "((i>=1))"
-       line 254, "pan.___", state 584, "(1)"
-       line 254, "pan.___", state 585, "(!(cache_dirty_rcu_ptr))"
-       line 254, "pan.___", state 585, "else"
-       line 258, "pan.___", state 592, "(1)"
-       line 258, "pan.___", state 593, "(!(cache_dirty_rcu_data[i]))"
-       line 258, "pan.___", state 593, "else"
-       line 256, "pan.___", state 598, "((i<2))"
-       line 256, "pan.___", state 598, "((i>=2))"
-       line 263, "pan.___", state 602, "(!(cache_dirty_urcu_gp_ctr))"
-       line 263, "pan.___", state 602, "else"
-       line 428, "pan.___", state 604, "(1)"
-       line 428, "pan.___", state 604, "(1)"
-       line 688, "pan.___", state 607, "cached_urcu_active_readers = (tmp+1)"
-       line 688, "pan.___", state 608, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 688, "pan.___", state 609, "(1)"
-       line 408, "pan.___", state 616, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 648, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 662, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 680, "(1)"
-       line 254, "pan.___", state 700, "(1)"
-       line 258, "pan.___", state 708, "(1)"
-       line 408, "pan.___", state 734, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 766, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 780, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 798, "(1)"
-       line 254, "pan.___", state 818, "(1)"
-       line 258, "pan.___", state 826, "(1)"
-       line 408, "pan.___", state 845, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 847, "(1)"
-       line 408, "pan.___", state 848, "(cache_dirty_urcu_gp_ctr)"
-       line 408, "pan.___", state 848, "else"
-       line 408, "pan.___", state 851, "(1)"
-       line 412, "pan.___", state 859, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 861, "(1)"
-       line 412, "pan.___", state 862, "(cache_dirty_urcu_active_readers)"
-       line 412, "pan.___", state 862, "else"
-       line 412, "pan.___", state 865, "(1)"
-       line 412, "pan.___", state 866, "(1)"
-       line 412, "pan.___", state 866, "(1)"
-       line 410, "pan.___", state 871, "((i<1))"
-       line 410, "pan.___", state 871, "((i>=1))"
-       line 417, "pan.___", state 877, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 879, "(1)"
-       line 417, "pan.___", state 880, "(cache_dirty_rcu_ptr)"
-       line 417, "pan.___", state 880, "else"
-       line 417, "pan.___", state 883, "(1)"
-       line 417, "pan.___", state 884, "(1)"
-       line 417, "pan.___", state 884, "(1)"
-       line 421, "pan.___", state 891, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 893, "(1)"
-       line 421, "pan.___", state 894, "(cache_dirty_rcu_data[i])"
-       line 421, "pan.___", state 894, "else"
-       line 421, "pan.___", state 897, "(1)"
-       line 421, "pan.___", state 898, "(1)"
-       line 421, "pan.___", state 898, "(1)"
-       line 419, "pan.___", state 903, "((i<2))"
-       line 419, "pan.___", state 903, "((i>=2))"
-       line 246, "pan.___", state 909, "(1)"
-       line 250, "pan.___", state 917, "(1)"
-       line 250, "pan.___", state 918, "(!(cache_dirty_urcu_active_readers))"
-       line 250, "pan.___", state 918, "else"
-       line 248, "pan.___", state 923, "((i<1))"
-       line 248, "pan.___", state 923, "((i>=1))"
-       line 254, "pan.___", state 929, "(1)"
-       line 254, "pan.___", state 930, "(!(cache_dirty_rcu_ptr))"
-       line 254, "pan.___", state 930, "else"
-       line 258, "pan.___", state 937, "(1)"
-       line 258, "pan.___", state 938, "(!(cache_dirty_rcu_data[i]))"
-       line 258, "pan.___", state 938, "else"
-       line 256, "pan.___", state 943, "((i<2))"
-       line 256, "pan.___", state 943, "((i>=2))"
-       line 263, "pan.___", state 947, "(!(cache_dirty_urcu_gp_ctr))"
-       line 263, "pan.___", state 947, "else"
-       line 428, "pan.___", state 949, "(1)"
-       line 428, "pan.___", state 949, "(1)"
-       line 696, "pan.___", state 953, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 408, "pan.___", state 958, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 990, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1004, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1022, "(1)"
-       line 254, "pan.___", state 1042, "(1)"
-       line 258, "pan.___", state 1050, "(1)"
-       line 408, "pan.___", state 1072, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 1104, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1118, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1136, "(1)"
-       line 254, "pan.___", state 1156, "(1)"
-       line 258, "pan.___", state 1164, "(1)"
-       line 408, "pan.___", state 1187, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 1219, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1233, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1251, "(1)"
-       line 254, "pan.___", state 1271, "(1)"
-       line 258, "pan.___", state 1279, "(1)"
-       line 408, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 1330, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1344, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1362, "(1)"
-       line 254, "pan.___", state 1382, "(1)"
-       line 258, "pan.___", state 1390, "(1)"
-       line 408, "pan.___", state 1414, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 1446, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1460, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1478, "(1)"
-       line 254, "pan.___", state 1498, "(1)"
-       line 258, "pan.___", state 1506, "(1)"
-       line 408, "pan.___", state 1525, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 1557, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1571, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1589, "(1)"
-       line 254, "pan.___", state 1609, "(1)"
-       line 258, "pan.___", state 1617, "(1)"
-       line 408, "pan.___", state 1639, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 1671, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1685, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1703, "(1)"
-       line 254, "pan.___", state 1723, "(1)"
-       line 258, "pan.___", state 1731, "(1)"
-       line 735, "pan.___", state 1750, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 408, "pan.___", state 1757, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 1789, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1803, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1821, "(1)"
-       line 254, "pan.___", state 1841, "(1)"
-       line 258, "pan.___", state 1849, "(1)"
-       line 408, "pan.___", state 1868, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 1900, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 1914, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1932, "(1)"
-       line 254, "pan.___", state 1952, "(1)"
-       line 258, "pan.___", state 1960, "(1)"
-       line 408, "pan.___", state 1981, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 1983, "(1)"
-       line 408, "pan.___", state 1984, "(cache_dirty_urcu_gp_ctr)"
-       line 408, "pan.___", state 1984, "else"
-       line 408, "pan.___", state 1987, "(1)"
-       line 412, "pan.___", state 1995, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 1997, "(1)"
-       line 412, "pan.___", state 1998, "(cache_dirty_urcu_active_readers)"
-       line 412, "pan.___", state 1998, "else"
-       line 412, "pan.___", state 2001, "(1)"
-       line 412, "pan.___", state 2002, "(1)"
-       line 412, "pan.___", state 2002, "(1)"
-       line 410, "pan.___", state 2007, "((i<1))"
-       line 410, "pan.___", state 2007, "((i>=1))"
-       line 417, "pan.___", state 2013, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 2015, "(1)"
-       line 417, "pan.___", state 2016, "(cache_dirty_rcu_ptr)"
-       line 417, "pan.___", state 2016, "else"
-       line 417, "pan.___", state 2019, "(1)"
-       line 417, "pan.___", state 2020, "(1)"
-       line 417, "pan.___", state 2020, "(1)"
-       line 421, "pan.___", state 2027, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 2029, "(1)"
-       line 421, "pan.___", state 2030, "(cache_dirty_rcu_data[i])"
-       line 421, "pan.___", state 2030, "else"
-       line 421, "pan.___", state 2033, "(1)"
-       line 421, "pan.___", state 2034, "(1)"
-       line 421, "pan.___", state 2034, "(1)"
-       line 419, "pan.___", state 2039, "((i<2))"
-       line 419, "pan.___", state 2039, "((i>=2))"
-       line 246, "pan.___", state 2045, "(1)"
-       line 250, "pan.___", state 2053, "(1)"
-       line 250, "pan.___", state 2054, "(!(cache_dirty_urcu_active_readers))"
-       line 250, "pan.___", state 2054, "else"
-       line 248, "pan.___", state 2059, "((i<1))"
-       line 248, "pan.___", state 2059, "((i>=1))"
-       line 254, "pan.___", state 2065, "(1)"
-       line 254, "pan.___", state 2066, "(!(cache_dirty_rcu_ptr))"
-       line 254, "pan.___", state 2066, "else"
-       line 258, "pan.___", state 2073, "(1)"
-       line 258, "pan.___", state 2074, "(!(cache_dirty_rcu_data[i]))"
-       line 258, "pan.___", state 2074, "else"
-       line 256, "pan.___", state 2079, "((i<2))"
-       line 256, "pan.___", state 2079, "((i>=2))"
-       line 263, "pan.___", state 2083, "(!(cache_dirty_urcu_gp_ctr))"
-       line 263, "pan.___", state 2083, "else"
-       line 428, "pan.___", state 2085, "(1)"
-       line 428, "pan.___", state 2085, "(1)"
-       line 735, "pan.___", state 2088, "cached_urcu_active_readers = (tmp+1)"
-       line 735, "pan.___", state 2089, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 735, "pan.___", state 2090, "(1)"
-       line 408, "pan.___", state 2097, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 2129, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 2143, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 2161, "(1)"
-       line 254, "pan.___", state 2181, "(1)"
-       line 258, "pan.___", state 2189, "(1)"
-       line 408, "pan.___", state 2214, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 2246, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 2260, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 2278, "(1)"
-       line 254, "pan.___", state 2298, "(1)"
-       line 258, "pan.___", state 2306, "(1)"
-       line 408, "pan.___", state 2325, "cache_dirty_urcu_gp_ctr = 0"
-       line 417, "pan.___", state 2357, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 2371, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 2389, "(1)"
-       line 254, "pan.___", state 2409, "(1)"
-       line 258, "pan.___", state 2417, "(1)"
-       line 246, "pan.___", state 2448, "(1)"
-       line 254, "pan.___", state 2468, "(1)"
-       line 258, "pan.___", state 2476, "(1)"
-       line 246, "pan.___", state 2491, "(1)"
-       line 254, "pan.___", state 2511, "(1)"
-       line 258, "pan.___", state 2519, "(1)"
-       line 930, "pan.___", state 2536, "-end-"
-       (221 of 2536 states)
-unreached in proctype urcu_writer
-       line 408, "pan.___", state 45, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, "pan.___", state 59, "cache_dirty_urcu_active_readers = 0"
-       line 417, "pan.___", state 77, "cache_dirty_rcu_ptr = 0"
-       line 246, "pan.___", state 109, "(1)"
-       line 250, "pan.___", state 117, "(1)"
-       line 254, "pan.___", state 129, "(1)"
-       line 269, "pan.___", state 158, "cache_dirty_urcu_gp_ctr = 0"
-       line 273, "pan.___", state 167, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 180, "cache_dirty_rcu_ptr = 0"
-       line 408, "pan.___", state 220, "cache_dirty_urcu_gp_ctr = 0"
-       line 412, "pan.___", state 234, "cache_dirty_urcu_active_readers = 0"
-       line 417, "pan.___", state 252, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 266, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 284, "(1)"
-       line 250, "pan.___", state 292, "(1)"
-       line 254, "pan.___", state 304, "(1)"
-       line 258, "pan.___", state 312, "(1)"
-       line 412, "pan.___", state 347, "cache_dirty_urcu_active_readers = 0"
-       line 417, "pan.___", state 365, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 379, "cache_dirty_rcu_data[i] = 0"
-       line 250, "pan.___", state 405, "(1)"
-       line 254, "pan.___", state 417, "(1)"
-       line 258, "pan.___", state 425, "(1)"
-       line 408, "pan.___", state 450, "cache_dirty_urcu_gp_ctr = 0"
-       line 408, "pan.___", state 452, "(1)"
-       line 408, "pan.___", state 453, "(cache_dirty_urcu_gp_ctr)"
-       line 408, "pan.___", state 453, "else"
-       line 408, "pan.___", state 456, "(1)"
-       line 412, "pan.___", state 464, "cache_dirty_urcu_active_readers = 0"
-       line 412, "pan.___", state 466, "(1)"
-       line 412, "pan.___", state 467, "(cache_dirty_urcu_active_readers)"
-       line 412, "pan.___", state 467, "else"
-       line 412, "pan.___", state 470, "(1)"
-       line 412, "pan.___", state 471, "(1)"
-       line 412, "pan.___", state 471, "(1)"
-       line 410, "pan.___", state 476, "((i<1))"
-       line 410, "pan.___", state 476, "((i>=1))"
-       line 417, "pan.___", state 482, "cache_dirty_rcu_ptr = 0"
-       line 417, "pan.___", state 484, "(1)"
-       line 417, "pan.___", state 485, "(cache_dirty_rcu_ptr)"
-       line 417, "pan.___", state 485, "else"
-       line 417, "pan.___", state 488, "(1)"
-       line 417, "pan.___", state 489, "(1)"
-       line 417, "pan.___", state 489, "(1)"
-       line 421, "pan.___", state 496, "cache_dirty_rcu_data[i] = 0"
-       line 421, "pan.___", state 498, "(1)"
-       line 421, "pan.___", state 499, "(cache_dirty_rcu_data[i])"
-       line 421, "pan.___", state 499, "else"
-       line 421, "pan.___", state 502, "(1)"
-       line 421, "pan.___", state 503, "(1)"
-       line 421, "pan.___", state 503, "(1)"
-       line 419, "pan.___", state 508, "((i<2))"
-       line 419, "pan.___", state 508, "((i>=2))"
-       line 246, "pan.___", state 514, "(1)"
-       line 250, "pan.___", state 522, "(1)"
-       line 250, "pan.___", state 523, "(!(cache_dirty_urcu_active_readers))"
-       line 250, "pan.___", state 523, "else"
-       line 248, "pan.___", state 528, "((i<1))"
-       line 248, "pan.___", state 528, "((i>=1))"
-       line 254, "pan.___", state 534, "(1)"
-       line 254, "pan.___", state 535, "(!(cache_dirty_rcu_ptr))"
-       line 254, "pan.___", state 535, "else"
-       line 258, "pan.___", state 542, "(1)"
-       line 258, "pan.___", state 543, "(!(cache_dirty_rcu_data[i]))"
-       line 258, "pan.___", state 543, "else"
-       line 263, "pan.___", state 552, "(!(cache_dirty_urcu_gp_ctr))"
-       line 263, "pan.___", state 552, "else"
-       line 428, "pan.___", state 554, "(1)"
-       line 428, "pan.___", state 554, "(1)"
-       line 412, "pan.___", state 574, "cache_dirty_urcu_active_readers = 0"
-       line 417, "pan.___", state 592, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 606, "cache_dirty_rcu_data[i] = 0"
-       line 250, "pan.___", state 632, "(1)"
-       line 254, "pan.___", state 644, "(1)"
-       line 258, "pan.___", state 652, "(1)"
-       line 412, "pan.___", state 685, "cache_dirty_urcu_active_readers = 0"
-       line 417, "pan.___", state 703, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 717, "cache_dirty_rcu_data[i] = 0"
-       line 250, "pan.___", state 743, "(1)"
-       line 254, "pan.___", state 755, "(1)"
-       line 258, "pan.___", state 763, "(1)"
-       line 412, "pan.___", state 798, "cache_dirty_urcu_active_readers = 0"
-       line 417, "pan.___", state 816, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 830, "cache_dirty_rcu_data[i] = 0"
-       line 250, "pan.___", state 856, "(1)"
-       line 254, "pan.___", state 868, "(1)"
-       line 258, "pan.___", state 876, "(1)"
-       line 412, "pan.___", state 914, "cache_dirty_urcu_active_readers = 0"
-       line 417, "pan.___", state 932, "cache_dirty_rcu_ptr = 0"
-       line 421, "pan.___", state 946, "cache_dirty_rcu_data[i] = 0"
-       line 250, "pan.___", state 972, "(1)"
-       line 254, "pan.___", state 984, "(1)"
-       line 258, "pan.___", state 992, "(1)"
-       line 269, "pan.___", state 1036, "cache_dirty_urcu_gp_ctr = 0"
-       line 273, "pan.___", state 1045, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 1060, "(1)"
-       line 281, "pan.___", state 1067, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1083, "(1)"
-       line 250, "pan.___", state 1091, "(1)"
-       line 254, "pan.___", state 1103, "(1)"
-       line 258, "pan.___", state 1111, "(1)"
-       line 269, "pan.___", state 1142, "cache_dirty_urcu_gp_ctr = 0"
-       line 273, "pan.___", state 1151, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 1164, "cache_dirty_rcu_ptr = 0"
-       line 281, "pan.___", state 1173, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1189, "(1)"
-       line 250, "pan.___", state 1197, "(1)"
-       line 254, "pan.___", state 1209, "(1)"
-       line 258, "pan.___", state 1217, "(1)"
-       line 273, "pan.___", state 1243, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 1256, "cache_dirty_rcu_ptr = 0"
-       line 281, "pan.___", state 1265, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1281, "(1)"
-       line 250, "pan.___", state 1289, "(1)"
-       line 254, "pan.___", state 1301, "(1)"
-       line 258, "pan.___", state 1309, "(1)"
-       line 269, "pan.___", state 1340, "cache_dirty_urcu_gp_ctr = 0"
-       line 273, "pan.___", state 1349, "cache_dirty_urcu_active_readers = 0"
-       line 277, "pan.___", state 1362, "cache_dirty_rcu_ptr = 0"
-       line 281, "pan.___", state 1371, "cache_dirty_rcu_data[i] = 0"
-       line 246, "pan.___", state 1387, "(1)"
-       line 250, "pan.___", state 1395, "(1)"
-       line 254, "pan.___", state 1407, "(1)"
-       line 258, "pan.___", state 1415, "(1)"
-       line 1305, "pan.___", state 1431, "-end-"
-       (110 of 1431 states)
-unreached in proctype :init:
-       (0 of 28 states)
-unreached in proctype :never:
-       line 1370, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 106 seconds
-pan: rate 29466.638 states/second
-pan: avg transition delay 2.9729e-06 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi-compress'
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.spin.input b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index 6cccb27..0000000
+++ /dev/null
@@ -1,1341 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;
-
-#define DECLARE_PROC_CACHED_VAR(type, x)\
-       type cached_##x;                \
-       bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v)          \
-       mem_##x = v;
-
-#define INIT_PROC_CACHED_VAR(x, v)     \
-       cache_dirty_##x = 0;            \
-       cached_##x = v;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x)
-
-#define READ_CACHED_VAR(x)     (cached_##x)
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x = v;                         \
-               cache_dirty_##x = 1;                    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x;                   \
-               cache_dirty_##x = 0;                    \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x = mem_##x;   \
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       /* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_gp_ctr);
-       /* Note ! currently only one reader */
-       DECLARE_PROC_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-       /* RCU data */
-       DECLARE_PROC_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-       /* RCU pointer */
-#if (SLAB_SIZE == 2)
-       DECLARE_PROC_CACHED_VAR(bit, rcu_ptr);
-#else
-       DECLARE_PROC_CACHED_VAR(byte, rcu_ptr);
-#endif
-
-       atomic {
-               INIT_PROC_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_PROC_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_PROC_CACHED_VAR(urcu_active_readers[i], 0);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_PROC_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_PROC_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1);
-               INIT_CACHED_VAR(rcu_ptr, 0);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu-controldataflow-intel-ipi-compress/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index e9b06b3..0000000
+++ /dev/null
@@ -1,1699 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:3997
-2:2:2536
-3:2:2541
-4:2:2545
-5:2:2553
-6:2:2557
-7:2:2561
-8:0:3997
-9:1:0
-10:1:5
-11:1:9
-12:1:17
-13:1:21
-14:1:25
-15:0:3997
-16:3:3967
-17:3:3970
-18:3:3977
-19:3:3984
-20:3:3987
-21:3:3991
-22:3:3992
-23:0:3997
-24:3:3994
-25:0:3997
-26:2:2565
-27:0:3997
-28:2:2571
-29:0:3997
-30:2:2572
-31:0:3997
-32:2:2573
-33:0:3997
-34:2:2574
-35:0:3997
-36:2:2575
-37:0:3997
-38:2:2576
-39:2:2577
-40:2:2581
-41:2:2582
-42:2:2590
-43:2:2591
-44:2:2595
-45:2:2596
-46:2:2604
-47:2:2609
-48:2:2613
-49:2:2614
-50:2:2622
-51:2:2623
-52:2:2627
-53:2:2628
-54:2:2622
-55:2:2623
-56:2:2627
-57:2:2628
-58:2:2636
-59:2:2641
-60:2:2648
-61:2:2649
-62:2:2656
-63:2:2661
-64:2:2668
-65:2:2669
-66:2:2668
-67:2:2669
-68:2:2676
-69:2:2686
-70:0:3997
-71:2:2575
-72:0:3997
-73:2:2690
-74:2:2694
-75:2:2695
-76:2:2699
-77:2:2703
-78:2:2704
-79:2:2708
-80:2:2716
-81:2:2717
-82:2:2721
-83:2:2725
-84:2:2726
-85:2:2721
-86:2:2722
-87:2:2730
-88:0:3997
-89:2:2575
-90:0:3997
-91:2:2738
-92:2:2739
-93:2:2740
-94:0:3997
-95:2:2575
-96:0:3997
-97:2:2745
-98:0:3997
-99:2:3572
-100:2:3573
-101:2:3577
-102:2:3581
-103:2:3582
-104:2:3586
-105:2:3591
-106:2:3599
-107:2:3603
-108:2:3604
-109:2:3599
-110:2:3603
-111:2:3604
-112:2:3608
-113:2:3615
-114:2:3622
-115:2:3623
-116:2:3630
-117:2:3635
-118:2:3642
-119:2:3643
-120:2:3642
-121:2:3643
-122:2:3650
-123:2:3654
-124:0:3997
-125:2:3659
-126:0:3997
-127:2:3660
-128:0:3997
-129:2:3661
-130:0:3997
-131:2:3662
-132:0:3997
-133:1:29
-134:0:3997
-135:1:35
-136:0:3997
-137:1:36
-138:0:3997
-139:2:3663
-140:0:3997
-141:1:37
-142:0:3997
-143:2:3662
-144:0:3997
-145:1:38
-146:0:3997
-147:2:3663
-148:0:3997
-149:1:39
-150:0:3997
-151:2:3662
-152:0:3997
-153:1:40
-154:0:3997
-155:2:3663
-156:0:3997
-157:1:41
-158:0:3997
-159:1:42
-160:0:3997
-161:1:43
-162:0:3997
-163:2:3662
-164:0:3997
-165:1:44
-166:0:3997
-167:2:3663
-168:0:3997
-169:1:53
-170:0:3997
-171:2:3662
-172:0:3997
-173:1:57
-174:1:58
-175:1:62
-176:1:66
-177:1:67
-178:1:71
-179:1:79
-180:1:80
-181:1:84
-182:1:88
-183:1:89
-184:1:84
-185:1:88
-186:1:89
-187:1:93
-188:1:100
-189:1:107
-190:1:108
-191:1:115
-192:1:120
-193:1:127
-194:1:128
-195:1:127
-196:1:128
-197:1:135
-198:1:139
-199:0:3997
-200:2:3663
-201:0:3997
-202:1:144
-203:0:3997
-204:2:3664
-205:0:3997
-206:2:3669
-207:0:3997
-208:2:3670
-209:0:3997
-210:2:3678
-211:2:3679
-212:2:3683
-213:2:3687
-214:2:3688
-215:2:3692
-216:2:3700
-217:2:3701
-218:2:3705
-219:2:3709
-220:2:3710
-221:2:3705
-222:2:3709
-223:2:3710
-224:2:3714
-225:2:3721
-226:2:3728
-227:2:3729
-228:2:3736
-229:2:3741
-230:2:3748
-231:2:3749
-232:2:3748
-233:2:3749
-234:2:3756
-235:2:3760
-236:0:3997
-237:2:2747
-238:2:3553
-239:0:3997
-240:2:2575
-241:0:3997
-242:2:2748
-243:0:3997
-244:2:2575
-245:0:3997
-246:2:2751
-247:2:2752
-248:2:2756
-249:2:2757
-250:2:2765
-251:2:2766
-252:2:2770
-253:2:2771
-254:2:2779
-255:2:2784
-256:2:2788
-257:2:2789
-258:2:2797
-259:2:2798
-260:2:2802
-261:2:2803
-262:2:2797
-263:2:2798
-264:2:2802
-265:2:2803
-266:2:2811
-267:2:2816
-268:2:2823
-269:2:2824
-270:2:2831
-271:2:2836
-272:2:2843
-273:2:2844
-274:2:2843
-275:2:2844
-276:2:2851
-277:2:2860
-278:0:3997
-279:2:2575
-280:0:3997
-281:2:2864
-282:2:2865
-283:2:2866
-284:2:2878
-285:2:2879
-286:2:2883
-287:2:2884
-288:2:2892
-289:2:2897
-290:2:2901
-291:2:2902
-292:2:2910
-293:2:2911
-294:2:2915
-295:2:2916
-296:2:2910
-297:2:2911
-298:2:2915
-299:2:2916
-300:2:2924
-301:2:2929
-302:2:2936
-303:2:2937
-304:2:2944
-305:2:2949
-306:2:2956
-307:2:2957
-308:2:2956
-309:2:2957
-310:2:2964
-311:2:2977
-312:2:2978
-313:0:3997
-314:2:2575
-315:0:3997
-316:2:3091
-317:2:3092
-318:2:3096
-319:2:3097
-320:2:3105
-321:2:3106
-322:2:3110
-323:2:3111
-324:2:3119
-325:2:3124
-326:2:3128
-327:2:3129
-328:2:3137
-329:2:3138
-330:2:3142
-331:2:3143
-332:2:3137
-333:2:3138
-334:2:3142
-335:2:3143
-336:2:3151
-337:2:3156
-338:2:3163
-339:2:3164
-340:2:3171
-341:2:3176
-342:2:3183
-343:2:3184
-344:2:3183
-345:2:3184
-346:2:3191
-347:0:3997
-348:2:2575
-349:0:3997
-350:2:3202
-351:2:3203
-352:2:3207
-353:2:3208
-354:2:3216
-355:2:3217
-356:2:3221
-357:2:3222
-358:2:3230
-359:2:3235
-360:2:3239
-361:2:3240
-362:2:3248
-363:2:3249
-364:2:3253
-365:2:3254
-366:2:3248
-367:2:3249
-368:2:3253
-369:2:3254
-370:2:3262
-371:2:3267
-372:2:3274
-373:2:3275
-374:2:3282
-375:2:3287
-376:2:3294
-377:2:3295
-378:2:3294
-379:2:3295
-380:2:3302
-381:2:3311
-382:0:3997
-383:2:2575
-384:0:3997
-385:2:3315
-386:2:3316
-387:2:3317
-388:2:3329
-389:2:3330
-390:2:3334
-391:2:3335
-392:2:3343
-393:2:3348
-394:2:3352
-395:2:3353
-396:2:3361
-397:2:3362
-398:2:3366
-399:2:3367
-400:2:3361
-401:2:3362
-402:2:3366
-403:2:3367
-404:2:3375
-405:2:3380
-406:2:3387
-407:2:3388
-408:2:3395
-409:2:3400
-410:2:3407
-411:2:3408
-412:2:3407
-413:2:3408
-414:2:3415
-415:2:3427
-416:2:3428
-417:0:3997
-418:2:2575
-419:0:3997
-420:2:3541
-421:0:3997
-422:2:3770
-423:2:3771
-424:2:3775
-425:2:3779
-426:2:3780
-427:2:3784
-428:2:3792
-429:2:3793
-430:2:3797
-431:2:3801
-432:2:3802
-433:2:3797
-434:2:3801
-435:2:3802
-436:2:3806
-437:2:3813
-438:2:3820
-439:2:3821
-440:2:3828
-441:2:3833
-442:2:3840
-443:2:3841
-444:2:3840
-445:2:3841
-446:2:3848
-447:2:3852
-448:0:3997
-449:2:3857
-450:0:3997
-451:2:3858
-452:0:3997
-453:2:3859
-454:0:3997
-455:2:3860
-456:0:3997
-457:1:53
-458:0:3997
-459:2:3861
-460:0:3997
-461:1:57
-462:1:58
-463:1:62
-464:1:66
-465:1:67
-466:1:71
-467:1:79
-468:1:80
-469:1:84
-470:1:88
-471:1:89
-472:1:84
-473:1:88
-474:1:89
-475:1:93
-476:1:100
-477:1:107
-478:1:108
-479:1:115
-480:1:120
-481:1:127
-482:1:128
-483:1:127
-484:1:128
-485:1:135
-486:1:139
-487:0:3997
-488:2:3860
-489:0:3997
-490:1:144
-491:0:3997
-492:2:3861
-493:0:3997
-494:2:3862
-495:0:3997
-496:2:3867
-497:0:3997
-498:2:3868
-499:0:3997
-500:2:3876
-501:2:3877
-502:2:3881
-503:2:3885
-504:2:3886
-505:2:3890
-506:2:3898
-507:2:3899
-508:2:3903
-509:2:3907
-510:2:3908
-511:2:3903
-512:2:3907
-513:2:3908
-514:2:3912
-515:2:3919
-516:2:3926
-517:2:3927
-518:2:3934
-519:2:3939
-520:2:3946
-521:2:3947
-522:2:3946
-523:2:3947
-524:2:3954
-525:2:3958
-526:0:3997
-527:2:3543
-528:2:3553
-529:0:3997
-530:2:2575
-531:0:3997
-532:2:3544
-533:2:3545
-534:0:3997
-535:2:2575
-536:0:3997
-537:2:3549
-538:0:3997
-539:2:3557
-540:0:3997
-541:2:2572
-542:0:3997
-543:2:2573
-544:0:3997
-545:2:2574
-546:0:3997
-547:2:2575
-548:0:3997
-549:2:2576
-550:2:2577
-551:2:2581
-552:2:2582
-553:2:2590
-554:2:2591
-555:2:2595
-556:2:2596
-557:2:2604
-558:2:2609
-559:2:2613
-560:2:2614
-561:2:2622
-562:2:2623
-563:2:2624
-564:2:2622
-565:2:2623
-566:2:2627
-567:2:2628
-568:2:2636
-569:2:2641
-570:2:2648
-571:2:2649
-572:2:2656
-573:2:2661
-574:2:2668
-575:2:2669
-576:2:2668
-577:2:2669
-578:2:2676
-579:2:2686
-580:0:3997
-581:2:2575
-582:0:3997
-583:2:2690
-584:2:2694
-585:2:2695
-586:2:2699
-587:2:2703
-588:2:2704
-589:2:2708
-590:2:2716
-591:2:2717
-592:2:2721
-593:2:2722
-594:2:2721
-595:2:2725
-596:2:2726
-597:2:2730
-598:0:3997
-599:2:2575
-600:0:3997
-601:2:2738
-602:2:2739
-603:2:2740
-604:0:3997
-605:2:2575
-606:0:3997
-607:2:2745
-608:0:3997
-609:2:3572
-610:2:3573
-611:2:3577
-612:2:3581
-613:2:3582
-614:2:3586
-615:2:3591
-616:2:3599
-617:2:3603
-618:2:3604
-619:2:3599
-620:2:3603
-621:2:3604
-622:2:3608
-623:2:3615
-624:2:3622
-625:2:3623
-626:2:3630
-627:2:3635
-628:2:3642
-629:2:3643
-630:2:3642
-631:2:3643
-632:2:3650
-633:2:3654
-634:0:3997
-635:2:3659
-636:0:3997
-637:2:3660
-638:0:3997
-639:2:3661
-640:0:3997
-641:2:3662
-642:0:3997
-643:1:53
-644:0:3997
-645:2:3663
-646:0:3997
-647:1:57
-648:1:58
-649:1:62
-650:1:66
-651:1:67
-652:1:71
-653:1:79
-654:1:80
-655:1:84
-656:1:88
-657:1:89
-658:1:84
-659:1:88
-660:1:89
-661:1:93
-662:1:100
-663:1:107
-664:1:108
-665:1:115
-666:1:120
-667:1:127
-668:1:128
-669:1:127
-670:1:128
-671:1:135
-672:1:139
-673:0:3997
-674:2:3662
-675:0:3997
-676:1:144
-677:0:3997
-678:2:3663
-679:0:3997
-680:2:3664
-681:0:3997
-682:2:3669
-683:0:3997
-684:2:3670
-685:0:3997
-686:2:3678
-687:2:3679
-688:2:3683
-689:2:3687
-690:2:3688
-691:2:3692
-692:2:3700
-693:2:3701
-694:2:3705
-695:2:3709
-696:2:3710
-697:2:3705
-698:2:3709
-699:2:3710
-700:2:3714
-701:2:3721
-702:2:3728
-703:2:3729
-704:2:3736
-705:2:3741
-706:2:3748
-707:2:3749
-708:2:3748
-709:2:3749
-710:2:3756
-711:2:3760
-712:0:3997
-713:2:2747
-714:2:3553
-715:0:3997
-716:2:2575
-717:0:3997
-718:2:2748
-719:0:3997
-720:2:2575
-721:0:3997
-722:2:2751
-723:2:2752
-724:2:2756
-725:2:2757
-726:2:2765
-727:2:2766
-728:2:2770
-729:2:2771
-730:2:2779
-731:2:2784
-732:2:2788
-733:2:2789
-734:2:2797
-735:2:2798
-736:2:2802
-737:2:2803
-738:2:2797
-739:2:2798
-740:2:2802
-741:2:2803
-742:2:2811
-743:2:2816
-744:2:2823
-745:2:2824
-746:2:2831
-747:2:2836
-748:2:2843
-749:2:2844
-750:2:2843
-751:2:2844
-752:2:2851
-753:2:2860
-754:0:3997
-755:2:2575
-756:0:3997
-757:2:2864
-758:2:2865
-759:2:2866
-760:2:2878
-761:2:2879
-762:2:2883
-763:2:2884
-764:2:2892
-765:2:2897
-766:2:2901
-767:2:2902
-768:2:2910
-769:2:2911
-770:2:2915
-771:2:2916
-772:2:2910
-773:2:2911
-774:2:2915
-775:2:2916
-776:2:2924
-777:2:2929
-778:2:2936
-779:2:2937
-780:2:2944
-781:2:2949
-782:2:2956
-783:2:2957
-784:2:2956
-785:2:2957
-786:2:2964
-787:2:2977
-788:2:2978
-789:0:3997
-790:2:2575
-791:0:3997
-792:2:3091
-793:2:3092
-794:2:3096
-795:2:3097
-796:2:3105
-797:2:3106
-798:2:3110
-799:2:3111
-800:2:3119
-801:2:3124
-802:2:3128
-803:2:3129
-804:2:3137
-805:2:3138
-806:2:3142
-807:2:3143
-808:2:3137
-809:2:3138
-810:2:3142
-811:2:3143
-812:2:3151
-813:2:3156
-814:2:3163
-815:2:3164
-816:2:3171
-817:2:3176
-818:2:3183
-819:2:3184
-820:2:3183
-821:2:3184
-822:2:3191
-823:0:3997
-824:2:2575
-825:0:3997
-826:2:3202
-827:2:3203
-828:2:3207
-829:2:3208
-830:2:3216
-831:2:3217
-832:2:3221
-833:2:3222
-834:2:3230
-835:2:3235
-836:2:3239
-837:2:3240
-838:2:3248
-839:2:3249
-840:2:3253
-841:2:3254
-842:2:3248
-843:2:3249
-844:2:3253
-845:2:3254
-846:2:3262
-847:2:3267
-848:2:3274
-849:2:3275
-850:2:3282
-851:2:3287
-852:2:3294
-853:2:3295
-854:2:3294
-855:2:3295
-856:2:3302
-857:2:3311
-858:0:3997
-859:2:2575
-860:0:3997
-861:2:3315
-862:2:3316
-863:2:3317
-864:2:3329
-865:2:3330
-866:2:3334
-867:2:3335
-868:2:3343
-869:2:3348
-870:2:3352
-871:2:3353
-872:2:3361
-873:2:3362
-874:2:3366
-875:2:3367
-876:2:3361
-877:2:3362
-878:2:3366
-879:2:3367
-880:2:3375
-881:2:3380
-882:2:3387
-883:2:3388
-884:2:3395
-885:2:3400
-886:2:3407
-887:2:3408
-888:2:3407
-889:2:3408
-890:2:3415
-891:2:3427
-892:2:3428
-893:0:3997
-894:2:2575
-895:0:3997
-896:2:3541
-897:0:3997
-898:2:3770
-899:2:3771
-900:2:3775
-901:2:3779
-902:2:3780
-903:2:3784
-904:2:3792
-905:2:3793
-906:2:3797
-907:2:3801
-908:2:3802
-909:2:3797
-910:2:3801
-911:2:3802
-912:2:3806
-913:2:3813
-914:2:3820
-915:2:3821
-916:2:3828
-917:2:3833
-918:2:3840
-919:2:3841
-920:2:3840
-921:2:3841
-922:2:3848
-923:2:3852
-924:0:3997
-925:2:3857
-926:0:3997
-927:2:3858
-928:0:3997
-929:2:3859
-930:0:3997
-931:2:3860
-932:0:3997
-933:1:53
-934:0:3997
-935:2:3861
-936:0:3997
-937:1:57
-938:1:58
-939:1:62
-940:1:66
-941:1:67
-942:1:71
-943:1:79
-944:1:80
-945:1:84
-946:1:88
-947:1:89
-948:1:84
-949:1:88
-950:1:89
-951:1:93
-952:1:100
-953:1:107
-954:1:108
-955:1:115
-956:1:120
-957:1:127
-958:1:128
-959:1:127
-960:1:128
-961:1:135
-962:1:139
-963:0:3997
-964:2:3860
-965:0:3997
-966:1:144
-967:0:3997
-968:2:3861
-969:0:3997
-970:2:3862
-971:0:3997
-972:2:3867
-973:0:3997
-974:2:3868
-975:0:3997
-976:2:3876
-977:2:3877
-978:2:3881
-979:2:3885
-980:2:3886
-981:2:3890
-982:2:3898
-983:2:3899
-984:2:3903
-985:2:3907
-986:2:3908
-987:2:3903
-988:2:3907
-989:2:3908
-990:2:3912
-991:2:3919
-992:2:3926
-993:2:3927
-994:2:3934
-995:2:3939
-996:2:3946
-997:2:3947
-998:2:3946
-999:2:3947
-1000:2:3954
-1001:2:3958
-1002:0:3997
-1003:2:3543
-1004:2:3553
-1005:0:3997
-1006:2:2575
-1007:0:3997
-1008:2:3544
-1009:2:3545
-1010:0:3997
-1011:2:2575
-1012:0:3997
-1013:2:3549
-1014:0:3997
-1015:2:3557
-1016:0:3997
-1017:2:2572
-1018:0:3997
-1019:2:2573
-1020:0:3997
-1021:2:2574
-1022:0:3997
-1023:2:2575
-1024:0:3997
-1025:2:2576
-1026:2:2577
-1027:2:2581
-1028:2:2582
-1029:2:2590
-1030:2:2591
-1031:2:2595
-1032:2:2596
-1033:2:2604
-1034:2:2609
-1035:2:2613
-1036:2:2614
-1037:2:2622
-1038:2:2623
-1039:2:2627
-1040:2:2628
-1041:2:2622
-1042:2:2623
-1043:2:2624
-1044:2:2636
-1045:2:2641
-1046:2:2648
-1047:2:2649
-1048:2:2656
-1049:2:2661
-1050:2:2668
-1051:2:2669
-1052:2:2668
-1053:2:2669
-1054:2:2676
-1055:2:2686
-1056:0:3997
-1057:2:2575
-1058:0:3997
-1059:2:2690
-1060:2:2694
-1061:2:2695
-1062:2:2699
-1063:2:2703
-1064:2:2704
-1065:2:2708
-1066:2:2716
-1067:2:2717
-1068:2:2721
-1069:2:2725
-1070:2:2726
-1071:2:2721
-1072:2:2722
-1073:2:2730
-1074:0:3997
-1075:2:2575
-1076:0:3997
-1077:2:2738
-1078:2:2739
-1079:2:2740
-1080:0:3997
-1081:2:2575
-1082:0:3997
-1083:2:2745
-1084:0:3997
-1085:2:3572
-1086:2:3573
-1087:2:3577
-1088:2:3581
-1089:2:3582
-1090:2:3586
-1091:2:3591
-1092:2:3599
-1093:2:3603
-1094:2:3604
-1095:2:3599
-1096:2:3603
-1097:2:3604
-1098:2:3608
-1099:2:3615
-1100:2:3622
-1101:2:3623
-1102:2:3630
-1103:2:3635
-1104:2:3642
-1105:2:3643
-1106:2:3642
-1107:2:3643
-1108:2:3650
-1109:2:3654
-1110:0:3997
-1111:2:3659
-1112:0:3997
-1113:2:3660
-1114:0:3997
-1115:2:3661
-1116:0:3997
-1117:2:3662
-1118:0:3997
-1119:1:53
-1120:0:3997
-1121:2:3663
-1122:0:3997
-1123:1:57
-1124:1:58
-1125:1:62
-1126:1:66
-1127:1:67
-1128:1:71
-1129:1:79
-1130:1:80
-1131:1:84
-1132:1:88
-1133:1:89
-1134:1:84
-1135:1:88
-1136:1:89
-1137:1:93
-1138:1:100
-1139:1:107
-1140:1:108
-1141:1:115
-1142:1:120
-1143:1:127
-1144:1:128
-1145:1:127
-1146:1:128
-1147:1:135
-1148:1:139
-1149:0:3997
-1150:2:3662
-1151:0:3997
-1152:1:144
-1153:0:3997
-1154:2:3663
-1155:0:3997
-1156:2:3664
-1157:0:3997
-1158:2:3669
-1159:0:3997
-1160:2:3670
-1161:0:3997
-1162:2:3678
-1163:2:3679
-1164:2:3683
-1165:2:3687
-1166:2:3688
-1167:2:3692
-1168:2:3700
-1169:2:3701
-1170:2:3705
-1171:2:3709
-1172:2:3710
-1173:2:3705
-1174:2:3709
-1175:2:3710
-1176:2:3714
-1177:2:3721
-1178:2:3728
-1179:2:3729
-1180:2:3736
-1181:2:3741
-1182:2:3748
-1183:2:3749
-1184:2:3748
-1185:2:3749
-1186:2:3756
-1187:2:3760
-1188:0:3997
-1189:2:2747
-1190:2:3553
-1191:0:3997
-1192:2:2575
-1193:0:3997
-1194:2:2748
-1195:0:3997
-1196:2:2575
-1197:0:3997
-1198:2:2751
-1199:2:2752
-1200:2:2756
-1201:2:2757
-1202:2:2765
-1203:2:2766
-1204:2:2770
-1205:2:2771
-1206:2:2779
-1207:2:2784
-1208:2:2788
-1209:2:2789
-1210:2:2797
-1211:2:2798
-1212:2:2802
-1213:2:2803
-1214:2:2797
-1215:2:2798
-1216:2:2802
-1217:2:2803
-1218:2:2811
-1219:2:2816
-1220:2:2823
-1221:2:2824
-1222:2:2831
-1223:2:2836
-1224:2:2843
-1225:2:2844
-1226:2:2843
-1227:2:2844
-1228:2:2851
-1229:2:2860
-1230:0:3997
-1231:2:2575
-1232:0:3997
-1233:2:2864
-1234:2:2865
-1235:2:2866
-1236:2:2878
-1237:2:2879
-1238:2:2883
-1239:2:2884
-1240:2:2892
-1241:2:2897
-1242:2:2901
-1243:2:2902
-1244:2:2910
-1245:2:2911
-1246:2:2915
-1247:2:2916
-1248:2:2910
-1249:2:2911
-1250:2:2915
-1251:2:2916
-1252:2:2924
-1253:2:2929
-1254:2:2936
-1255:2:2937
-1256:2:2944
-1257:2:2949
-1258:2:2956
-1259:2:2957
-1260:2:2956
-1261:2:2957
-1262:2:2964
-1263:2:2977
-1264:2:2978
-1265:0:3997
-1266:2:2575
-1267:0:3997
-1268:2:3091
-1269:2:3092
-1270:2:3096
-1271:2:3097
-1272:2:3105
-1273:2:3106
-1274:2:3110
-1275:2:3111
-1276:2:3119
-1277:2:3124
-1278:2:3128
-1279:2:3129
-1280:2:3137
-1281:2:3138
-1282:2:3142
-1283:2:3143
-1284:2:3137
-1285:2:3138
-1286:2:3142
-1287:2:3143
-1288:2:3151
-1289:2:3156
-1290:2:3163
-1291:2:3164
-1292:2:3171
-1293:2:3176
-1294:2:3183
-1295:2:3184
-1296:2:3183
-1297:2:3184
-1298:2:3191
-1299:0:3997
-1300:2:2575
-1301:0:3997
-1302:2:3202
-1303:2:3203
-1304:2:3207
-1305:2:3208
-1306:2:3216
-1307:2:3217
-1308:2:3221
-1309:2:3222
-1310:2:3230
-1311:2:3235
-1312:2:3239
-1313:2:3240
-1314:2:3248
-1315:2:3249
-1316:2:3253
-1317:2:3254
-1318:2:3248
-1319:2:3249
-1320:2:3253
-1321:2:3254
-1322:2:3262
-1323:2:3267
-1324:2:3274
-1325:2:3275
-1326:2:3282
-1327:2:3287
-1328:2:3294
-1329:2:3295
-1330:2:3294
-1331:2:3295
-1332:2:3302
-1333:2:3311
-1334:0:3997
-1335:2:2575
-1336:0:3997
-1337:1:145
-1338:0:3997
-1339:1:147
-1340:0:3997
-1341:1:46
-1342:0:3997
-1343:1:153
-1344:1:154
-1345:1:158
-1346:1:159
-1347:1:167
-1348:1:168
-1349:1:172
-1350:1:173
-1351:1:181
-1352:1:186
-1353:1:190
-1354:1:191
-1355:1:199
-1356:1:200
-1357:1:204
-1358:1:205
-1359:1:199
-1360:1:200
-1361:1:204
-1362:1:205
-1363:1:213
-1364:1:218
-1365:1:225
-1366:1:226
-1367:1:233
-1368:1:238
-1369:1:245
-1370:1:246
-1371:1:245
-1372:1:246
-1373:1:253
-1374:0:3997
-1375:1:42
-1376:0:3997
-1377:1:43
-1378:0:3997
-1379:1:44
-1380:0:3997
-1381:1:145
-1382:0:3997
-1383:1:147
-1384:0:3997
-1385:1:46
-1386:0:3997
-1387:1:264
-1388:1:265
-1389:0:3997
-1390:1:42
-1391:0:3997
-1392:1:43
-1393:0:3997
-1394:1:44
-1395:0:3997
-1396:1:145
-1397:0:3997
-1398:1:147
-1399:0:3997
-1400:1:46
-1401:0:3997
-1402:1:271
-1403:1:272
-1404:1:276
-1405:1:277
-1406:1:285
-1407:1:286
-1408:1:290
-1409:1:291
-1410:1:299
-1411:1:304
-1412:1:308
-1413:1:309
-1414:1:317
-1415:1:318
-1416:1:322
-1417:1:323
-1418:1:317
-1419:1:318
-1420:1:322
-1421:1:323
-1422:1:331
-1423:1:336
-1424:1:343
-1425:1:344
-1426:1:351
-1427:1:356
-1428:1:363
-1429:1:364
-1430:1:363
-1431:1:364
-1432:1:371
-1433:0:3997
-1434:1:42
-1435:0:3997
-1436:1:43
-1437:0:3997
-1438:1:44
-1439:0:3997
-1440:1:145
-1441:0:3997
-1442:1:147
-1443:0:3997
-1444:1:46
-1445:0:3997
-1446:1:382
-1447:1:383
-1448:1:387
-1449:1:388
-1450:1:396
-1451:1:397
-1452:1:401
-1453:1:402
-1454:1:410
-1455:1:415
-1456:1:419
-1457:1:420
-1458:1:428
-1459:1:429
-1460:1:433
-1461:1:434
-1462:1:428
-1463:1:429
-1464:1:433
-1465:1:434
-1466:1:442
-1467:1:447
-1468:1:454
-1469:1:455
-1470:1:462
-1471:1:467
-1472:1:474
-1473:1:475
-1474:1:474
-1475:1:475
-1476:1:482
-1477:1:491
-1478:0:3997
-1479:1:42
-1480:0:3997
-1481:1:43
-1482:0:3997
-1483:1:44
-1484:0:3997
-1485:1:145
-1486:0:3997
-1487:1:147
-1488:0:3995
-1489:1:46
-1490:0:4001
-1491:1:1067
-1492:1:1068
-1493:1:1072
-1494:1:1073
-1495:1:1081
-1496:1:1082
-1497:1:1083
-1498:1:1095
-1499:1:1100
-1500:1:1104
-1501:1:1105
-1502:1:1113
-1503:1:1114
-1504:1:1118
-1505:1:1119
-1506:1:1113
-1507:1:1114
-1508:1:1118
-1509:1:1119
-1510:1:1127
-1511:1:1132
-1512:1:1139
-1513:1:1140
-1514:1:1147
-1515:1:1152
-1516:1:1159
-1517:1:1160
-1518:1:1159
-1519:1:1160
-1520:1:1167
-1521:0:4001
-1522:1:42
-1523:0:4001
-1524:1:43
-1525:0:4001
-1526:2:3315
-1527:2:3316
-1528:2:3317
-1529:2:3329
-1530:2:3330
-1531:2:3334
-1532:2:3335
-1533:2:3343
-1534:2:3348
-1535:2:3352
-1536:2:3353
-1537:2:3361
-1538:2:3362
-1539:2:3366
-1540:2:3367
-1541:2:3361
-1542:2:3362
-1543:2:3366
-1544:2:3367
-1545:2:3375
-1546:2:3380
-1547:2:3387
-1548:2:3388
-1549:2:3395
-1550:2:3400
-1551:2:3407
-1552:2:3408
-1553:2:3407
-1554:2:3408
-1555:2:3415
-1556:2:3425
-1557:0:4001
-1558:2:2575
--1:-1:-1
-1559:0:4001
-1560:2:3431
-1561:2:3432
-1562:2:3436
-1563:2:3437
-1564:2:3445
-1565:2:3446
-1566:2:3450
-1567:2:3451
-1568:2:3459
-1569:2:3464
-1570:2:3468
-1571:2:3469
-1572:2:3477
-1573:2:3478
-1574:2:3482
-1575:2:3483
-1576:2:3477
-1577:2:3478
-1578:2:3482
-1579:2:3483
-1580:2:3491
-1581:2:3496
-1582:2:3503
-1583:2:3504
-1584:2:3511
-1585:2:3516
-1586:2:3523
-1587:2:3524
-1588:2:3523
-1589:2:3524
-1590:2:3531
-1591:0:4001
-1592:2:2575
-1593:0:4001
-1594:2:3315
-1595:2:3316
-1596:2:3320
-1597:2:3321
-1598:2:3329
-1599:2:3330
-1600:2:3334
-1601:2:3335
-1602:2:3343
-1603:2:3348
-1604:2:3352
-1605:2:3353
-1606:2:3361
-1607:2:3362
-1608:2:3366
-1609:2:3367
-1610:2:3361
-1611:2:3362
-1612:2:3366
-1613:2:3367
-1614:2:3375
-1615:2:3380
-1616:2:3387
-1617:2:3388
-1618:2:3395
-1619:2:3400
-1620:2:3407
-1621:2:3408
-1622:2:3407
-1623:2:3408
-1624:2:3415
-1625:2:3425
-1626:0:4001
-1627:2:2575
-1628:0:4001
-1629:2:3431
-1630:2:3432
-1631:2:3436
-1632:2:3437
-1633:2:3445
-1634:2:3446
-1635:2:3450
-1636:2:3451
-1637:2:3459
-1638:2:3464
-1639:2:3468
-1640:2:3469
-1641:2:3477
-1642:2:3478
-1643:2:3482
-1644:2:3483
-1645:2:3477
-1646:2:3478
-1647:2:3482
-1648:2:3483
-1649:2:3491
-1650:2:3496
-1651:2:3503
-1652:2:3504
-1653:2:3511
-1654:2:3516
-1655:2:3523
-1656:2:3524
-1657:2:3523
-1658:2:3524
-1659:2:3531
-1660:0:4001
-1661:2:2575
-1662:0:4001
-1663:2:3315
-1664:2:3316
-1665:2:3320
-1666:2:3321
-1667:2:3329
-1668:2:3330
-1669:2:3334
-1670:2:3335
-1671:2:3343
-1672:2:3348
-1673:2:3352
-1674:2:3353
-1675:2:3361
-1676:2:3362
-1677:2:3366
-1678:2:3367
-1679:2:3361
-1680:2:3362
-1681:2:3366
-1682:2:3367
-1683:2:3375
-1684:2:3380
-1685:2:3387
-1686:2:3388
-1687:2:3395
-1688:2:3400
-1689:2:3407
-1690:2:3408
-1691:2:3407
-1692:2:3408
-1693:2:3415
-1694:2:3425
-1695:0:4001
-1696:2:2575
diff --git a/formal-model/urcu-controldataflow-intel-ipi/.input.define b/formal-model/urcu-controldataflow-intel-ipi/.input.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-ipi/.input.spin b/formal-model/urcu-controldataflow-intel-ipi/.input.spin
deleted file mode 100644 (file)
index 10c14d2..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi/DEFINES b/formal-model/urcu-controldataflow-intel-ipi/DEFINES
deleted file mode 100644 (file)
index abea5ff..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
diff --git a/formal-model/urcu-controldataflow-intel-ipi/Makefile b/formal-model/urcu-controldataflow-intel-ipi/Makefile
deleted file mode 100644 (file)
index de47dff..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-controldataflow-intel-ipi/references.txt b/formal-model/urcu-controldataflow-intel-ipi/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu.sh b/formal-model/urcu-controldataflow-intel-ipi/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu.spin b/formal-model/urcu-controldataflow-intel-ipi/urcu.spin
deleted file mode 100644 (file)
index 54752a1..0000000
+++ /dev/null
@@ -1,1254 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free.log b/formal-model/urcu-controldataflow-intel-ipi/urcu_free.log
deleted file mode 100644 (file)
index afb21ca..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1294)
-Depth=    9223 States=    1e+06 Transitions= 6.87e+06 Memory=   550.432        t=   16.6 R=   6e+04
-Depth=    9223 States=    2e+06 Transitions= 1.47e+07 Memory=   634.318        t=   36.7 R=   5e+04
-Depth=    9223 States=    3e+06 Transitions= 2.46e+07 Memory=   718.303        t=   62.6 R=   5e+04
-pan: resizing hashtable to -w22..  done
-Depth=    9223 States=    4e+06 Transitions= 3.19e+07 Memory=   833.311        t=   81.2 R=   5e+04
-Depth=    9223 States=    5e+06 Transitions= 3.95e+07 Memory=   917.295        t=    100 R=   5e+04
-Depth=    9223 States=    6e+06 Transitions= 5.71e+07 Memory=  1001.279        t=    149 R=   4e+04
-Depth=    9223 States=    7e+06 Transitions= 6.81e+07 Memory=  1085.264        t=    178 R=   4e+04
-Depth=    9223 States=    8e+06 Transitions= 8.22e+07 Memory=  1169.151        t=    216 R=   4e+04
-Depth=    9223 States=    9e+06 Transitions= 9.54e+07 Memory=  1253.135        t=    252 R=   4e+04
-pan: resizing hashtable to -w24..  done
-Depth=    9223 States=    1e+07 Transitions= 1.08e+08 Memory=  1461.115        t=    288 R=   3e+04
-Depth=    9223 States=  1.1e+07 Transitions= 1.21e+08 Memory=  1545.100        t=    321 R=   3e+04
-Depth=    9223 States=  1.2e+07 Transitions=  1.3e+08 Memory=  1629.084        t=    345 R=   3e+04
-Depth=    9223 States=  1.3e+07 Transitions= 1.42e+08 Memory=  1713.068        t=    378 R=   3e+04
-Depth=    9223 States=  1.4e+07 Transitions= 1.72e+08 Memory=  1797.053        t=    463 R=   3e+04
-Depth=    9223 States=  1.5e+07 Transitions= 1.91e+08 Memory=  1881.037        t=    516 R=   3e+04
-Depth=    9223 States=  1.6e+07 Transitions= 2.08e+08 Memory=  1964.924        t=    562 R=   3e+04
-Depth=    9223 States=  1.7e+07 Transitions=  2.2e+08 Memory=  2048.908        t=    595 R=   3e+04
-Depth=    9223 States=  1.8e+07 Transitions= 2.39e+08 Memory=  2132.893        t=    647 R=   3e+04
-Depth=    9223 States=  1.9e+07 Transitions= 2.55e+08 Memory=  2216.877        t=    691 R=   3e+04
-Depth=    9223 States=    2e+07 Transitions= 2.72e+08 Memory=  2300.861        t=    739 R=   3e+04
-Depth=    9285 States=  2.1e+07 Transitions= 2.85e+08 Memory=  2384.846        t=    774 R=   3e+04
-Depth=    9324 States=  2.2e+07 Transitions= 2.99e+08 Memory=  2468.830        t=    812 R=   3e+04
-Depth=    9324 States=  2.3e+07 Transitions=  3.1e+08 Memory=  2552.717        t=    842 R=   3e+04
-Depth=    9324 States=  2.4e+07 Transitions= 3.21e+08 Memory=  2636.701        t=    873 R=   3e+04
-Depth=    9324 States=  2.5e+07 Transitions= 3.34e+08 Memory=  2720.686        t=    908 R=   3e+04
-Depth=    9324 States=  2.6e+07 Transitions= 3.45e+08 Memory=  2804.670        t=    939 R=   3e+04
-Depth=    9324 States=  2.7e+07 Transitions= 3.59e+08 Memory=  2888.654        t=    975 R=   3e+04
-Depth=    9324 States=  2.8e+07 Transitions= 3.71e+08 Memory=  2972.639        t= 1.01e+03 R=   3e+04
-Depth=    9324 States=  2.9e+07 Transitions= 3.84e+08 Memory=  3056.526        t= 1.04e+03 R=   3e+04
-Depth=    9324 States=    3e+07 Transitions= 3.96e+08 Memory=  3140.510        t= 1.08e+03 R=   3e+04
-Depth=    9324 States=  3.1e+07 Transitions= 4.09e+08 Memory=  3224.494        t= 1.11e+03 R=   3e+04
-Depth=    9324 States=  3.2e+07 Transitions= 4.19e+08 Memory=  3308.479        t= 1.14e+03 R=   3e+04
-Depth=    9324 States=  3.3e+07 Transitions=  4.3e+08 Memory=  3392.463        t= 1.17e+03 R=   3e+04
-Depth=    9324 States=  3.4e+07 Transitions= 4.44e+08 Memory=  3476.447        t= 1.21e+03 R=   3e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9324 States=  3.5e+07 Transitions=  4.6e+08 Memory=  4056.416        t= 1.26e+03 R=   3e+04
-Depth=    9324 States=  3.6e+07 Transitions= 4.73e+08 Memory=  4140.401        t= 1.3e+03 R=   3e+04
-Depth=    9324 States=  3.7e+07 Transitions= 4.89e+08 Memory=  4224.385        t= 1.34e+03 R=   3e+04
-Depth=    9324 States=  3.8e+07 Transitions= 5.04e+08 Memory=  4308.369        t= 1.38e+03 R=   3e+04
-Depth=    9324 States=  3.9e+07 Transitions= 5.18e+08 Memory=  4392.354        t= 1.42e+03 R=   3e+04
-Depth=    9324 States=    4e+07 Transitions= 5.28e+08 Memory=  4476.338        t= 1.44e+03 R=   3e+04
-Depth=    9324 States=  4.1e+07 Transitions= 5.38e+08 Memory=  4560.225        t= 1.47e+03 R=   3e+04
-Depth=    9324 States=  4.2e+07 Transitions=  5.5e+08 Memory=  4644.209        t= 1.5e+03 R=   3e+04
-Depth=    9324 States=  4.3e+07 Transitions= 5.76e+08 Memory=  4728.193        t= 1.58e+03 R=   3e+04
-Depth=    9324 States=  4.4e+07 Transitions= 6.01e+08 Memory=  4812.178        t= 1.65e+03 R=   3e+04
-Depth=    9324 States=  4.5e+07 Transitions= 6.18e+08 Memory=  4896.162        t= 1.69e+03 R=   3e+04
-Depth=    9324 States=  4.6e+07 Transitions= 6.29e+08 Memory=  4980.147        t= 1.72e+03 R=   3e+04
-Depth=    9324 States=  4.7e+07 Transitions= 6.44e+08 Memory=  5064.131        t= 1.76e+03 R=   3e+04
-Depth=    9324 States=  4.8e+07 Transitions= 6.63e+08 Memory=  5148.018        t= 1.82e+03 R=   3e+04
-Depth=    9324 States=  4.9e+07 Transitions=  6.8e+08 Memory=  5232.002        t= 1.86e+03 R=   3e+04
-Depth=    9324 States=    5e+07 Transitions= 6.94e+08 Memory=  5315.986        t= 1.9e+03 R=   3e+04
-Depth=    9324 States=  5.1e+07 Transitions= 7.07e+08 Memory=  5399.971        t= 1.94e+03 R=   3e+04
-Depth=    9324 States=  5.2e+07 Transitions= 7.19e+08 Memory=  5483.955        t= 1.97e+03 R=   3e+04
-Depth=    9324 States=  5.3e+07 Transitions= 7.33e+08 Memory=  5567.940        t= 2.01e+03 R=   3e+04
-Depth=    9324 States=  5.4e+07 Transitions= 7.43e+08 Memory=  5651.826        t= 2.03e+03 R=   3e+04
-Depth=    9324 States=  5.5e+07 Transitions= 7.56e+08 Memory=  5735.811        t= 2.07e+03 R=   3e+04
-Depth=    9324 States=  5.6e+07 Transitions= 7.67e+08 Memory=  5819.795        t= 2.1e+03 R=   3e+04
-Depth=    9324 States=  5.7e+07 Transitions= 7.82e+08 Memory=  5903.779        t= 2.14e+03 R=   3e+04
-Depth=    9324 States=  5.8e+07 Transitions= 7.92e+08 Memory=  5987.764        t= 2.17e+03 R=   3e+04
-Depth=    9324 States=  5.9e+07 Transitions= 8.05e+08 Memory=  6071.748        t= 2.2e+03 R=   3e+04
-Depth=    9324 States=    6e+07 Transitions= 8.17e+08 Memory=  6155.733        t= 2.23e+03 R=   3e+04
-Depth=    9324 States=  6.1e+07 Transitions= 8.27e+08 Memory=  6239.619        t= 2.26e+03 R=   3e+04
-Depth=    9324 States=  6.2e+07 Transitions= 8.39e+08 Memory=  6323.604        t= 2.29e+03 R=   3e+04
-Depth=    9324 States=  6.3e+07 Transitions= 8.57e+08 Memory=  6407.588        t= 2.34e+03 R=   3e+04
-Depth=    9324 States=  6.4e+07 Transitions= 8.68e+08 Memory=  6491.572        t= 2.37e+03 R=   3e+04
-Depth=    9324 States=  6.5e+07 Transitions= 8.83e+08 Memory=  6575.557        t= 2.41e+03 R=   3e+04
-Depth=    9324 States=  6.6e+07 Transitions= 8.98e+08 Memory=  6659.541        t= 2.45e+03 R=   3e+04
-Depth=    9324 States=  6.7e+07 Transitions= 9.13e+08 Memory=  6743.428        t= 2.49e+03 R=   3e+04
-Depth=    9324 States=  6.8e+07 Transitions= 9.28e+08 Memory=  6827.412        t= 2.53e+03 R=   3e+04
-Depth=    9324 States=  6.9e+07 Transitions= 9.42e+08 Memory=  6911.397        t= 2.57e+03 R=   3e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 9324, errors: 0
- 69786664 states, stored
-8.8218731e+08 states, matched
-9.5197398e+08 transitions (= stored+matched)
-1.4613809e+10 atomic steps
-hash conflicts: 5.3037519e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 7720.235      equivalent memory usage for states (stored*(State-vector + overhead))
- 6011.129      actual memory usage for states (compression: 77.86%)
-               state-vector as stored = 62 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
-    3.383      memory lost to fragmentation
- 6977.510      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 271, "pan.___", state 30, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 52, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 61, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 77, "(1)"
-       line 252, "pan.___", state 85, "(1)"
-       line 256, "pan.___", state 97, "(1)"
-       line 260, "pan.___", state 105, "(1)"
-       line 410, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 163, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 177, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 195, "(1)"
-       line 256, "pan.___", state 215, "(1)"
-       line 260, "pan.___", state 223, "(1)"
-       line 690, "pan.___", state 242, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 410, "pan.___", state 249, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 281, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 295, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 313, "(1)"
-       line 256, "pan.___", state 333, "(1)"
-       line 260, "pan.___", state 341, "(1)"
-       line 410, "pan.___", state 360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 392, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 406, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 424, "(1)"
-       line 256, "pan.___", state 444, "(1)"
-       line 260, "pan.___", state 452, "(1)"
-       line 410, "pan.___", state 473, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 475, "(1)"
-       line 410, "pan.___", state 476, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 476, "else"
-       line 410, "pan.___", state 479, "(1)"
-       line 414, "pan.___", state 487, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 489, "(1)"
-       line 414, "pan.___", state 490, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 490, "else"
-       line 414, "pan.___", state 493, "(1)"
-       line 414, "pan.___", state 494, "(1)"
-       line 414, "pan.___", state 494, "(1)"
-       line 412, "pan.___", state 499, "((i<1))"
-       line 412, "pan.___", state 499, "((i>=1))"
-       line 419, "pan.___", state 505, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 507, "(1)"
-       line 419, "pan.___", state 508, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 508, "else"
-       line 419, "pan.___", state 511, "(1)"
-       line 419, "pan.___", state 512, "(1)"
-       line 419, "pan.___", state 512, "(1)"
-       line 423, "pan.___", state 519, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 521, "(1)"
-       line 423, "pan.___", state 522, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 522, "else"
-       line 423, "pan.___", state 525, "(1)"
-       line 423, "pan.___", state 526, "(1)"
-       line 423, "pan.___", state 526, "(1)"
-       line 421, "pan.___", state 531, "((i<2))"
-       line 421, "pan.___", state 531, "((i>=2))"
-       line 248, "pan.___", state 537, "(1)"
-       line 252, "pan.___", state 545, "(1)"
-       line 252, "pan.___", state 546, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, "pan.___", state 546, "else"
-       line 250, "pan.___", state 551, "((i<1))"
-       line 250, "pan.___", state 551, "((i>=1))"
-       line 256, "pan.___", state 557, "(1)"
-       line 256, "pan.___", state 558, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, "pan.___", state 558, "else"
-       line 260, "pan.___", state 565, "(1)"
-       line 260, "pan.___", state 566, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, "pan.___", state 566, "else"
-       line 258, "pan.___", state 571, "((i<2))"
-       line 258, "pan.___", state 571, "((i>=2))"
-       line 265, "pan.___", state 575, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, "pan.___", state 575, "else"
-       line 430, "pan.___", state 577, "(1)"
-       line 430, "pan.___", state 577, "(1)"
-       line 690, "pan.___", state 580, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 690, "pan.___", state 581, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 690, "pan.___", state 582, "(1)"
-       line 410, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 621, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 635, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 653, "(1)"
-       line 256, "pan.___", state 673, "(1)"
-       line 260, "pan.___", state 681, "(1)"
-       line 410, "pan.___", state 707, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 739, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 753, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 771, "(1)"
-       line 256, "pan.___", state 791, "(1)"
-       line 260, "pan.___", state 799, "(1)"
-       line 410, "pan.___", state 818, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 820, "(1)"
-       line 410, "pan.___", state 821, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 821, "else"
-       line 410, "pan.___", state 824, "(1)"
-       line 414, "pan.___", state 832, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 834, "(1)"
-       line 414, "pan.___", state 835, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 835, "else"
-       line 414, "pan.___", state 838, "(1)"
-       line 414, "pan.___", state 839, "(1)"
-       line 414, "pan.___", state 839, "(1)"
-       line 412, "pan.___", state 844, "((i<1))"
-       line 412, "pan.___", state 844, "((i>=1))"
-       line 419, "pan.___", state 850, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 852, "(1)"
-       line 419, "pan.___", state 853, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 853, "else"
-       line 419, "pan.___", state 856, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 423, "pan.___", state 864, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 866, "(1)"
-       line 423, "pan.___", state 867, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 867, "else"
-       line 423, "pan.___", state 870, "(1)"
-       line 423, "pan.___", state 871, "(1)"
-       line 423, "pan.___", state 871, "(1)"
-       line 421, "pan.___", state 876, "((i<2))"
-       line 421, "pan.___", state 876, "((i>=2))"
-       line 248, "pan.___", state 882, "(1)"
-       line 252, "pan.___", state 890, "(1)"
-       line 252, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, "pan.___", state 891, "else"
-       line 250, "pan.___", state 896, "((i<1))"
-       line 250, "pan.___", state 896, "((i>=1))"
-       line 256, "pan.___", state 902, "(1)"
-       line 256, "pan.___", state 903, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, "pan.___", state 903, "else"
-       line 260, "pan.___", state 910, "(1)"
-       line 260, "pan.___", state 911, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, "pan.___", state 911, "else"
-       line 258, "pan.___", state 916, "((i<2))"
-       line 258, "pan.___", state 916, "((i>=2))"
-       line 265, "pan.___", state 920, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, "pan.___", state 920, "else"
-       line 430, "pan.___", state 922, "(1)"
-       line 430, "pan.___", state 922, "(1)"
-       line 698, "pan.___", state 926, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 410, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 963, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 977, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 995, "(1)"
-       line 256, "pan.___", state 1015, "(1)"
-       line 260, "pan.___", state 1023, "(1)"
-       line 410, "pan.___", state 1045, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1077, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1091, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1109, "(1)"
-       line 256, "pan.___", state 1129, "(1)"
-       line 260, "pan.___", state 1137, "(1)"
-       line 410, "pan.___", state 1160, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1192, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1206, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1224, "(1)"
-       line 256, "pan.___", state 1244, "(1)"
-       line 260, "pan.___", state 1252, "(1)"
-       line 410, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1303, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1317, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1335, "(1)"
-       line 256, "pan.___", state 1355, "(1)"
-       line 260, "pan.___", state 1363, "(1)"
-       line 410, "pan.___", state 1387, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1419, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1433, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1451, "(1)"
-       line 256, "pan.___", state 1471, "(1)"
-       line 260, "pan.___", state 1479, "(1)"
-       line 410, "pan.___", state 1498, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1530, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1544, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1562, "(1)"
-       line 256, "pan.___", state 1582, "(1)"
-       line 260, "pan.___", state 1590, "(1)"
-       line 410, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1644, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1658, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1676, "(1)"
-       line 256, "pan.___", state 1696, "(1)"
-       line 260, "pan.___", state 1704, "(1)"
-       line 737, "pan.___", state 1723, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 410, "pan.___", state 1730, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1762, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1776, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1794, "(1)"
-       line 256, "pan.___", state 1814, "(1)"
-       line 260, "pan.___", state 1822, "(1)"
-       line 410, "pan.___", state 1841, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1873, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1887, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1905, "(1)"
-       line 256, "pan.___", state 1925, "(1)"
-       line 260, "pan.___", state 1933, "(1)"
-       line 410, "pan.___", state 1954, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1956, "(1)"
-       line 410, "pan.___", state 1957, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 1957, "else"
-       line 410, "pan.___", state 1960, "(1)"
-       line 414, "pan.___", state 1968, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1970, "(1)"
-       line 414, "pan.___", state 1971, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 1971, "else"
-       line 414, "pan.___", state 1974, "(1)"
-       line 414, "pan.___", state 1975, "(1)"
-       line 414, "pan.___", state 1975, "(1)"
-       line 412, "pan.___", state 1980, "((i<1))"
-       line 412, "pan.___", state 1980, "((i>=1))"
-       line 419, "pan.___", state 1986, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1988, "(1)"
-       line 419, "pan.___", state 1989, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 1989, "else"
-       line 419, "pan.___", state 1992, "(1)"
-       line 419, "pan.___", state 1993, "(1)"
-       line 419, "pan.___", state 1993, "(1)"
-       line 423, "pan.___", state 2000, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2002, "(1)"
-       line 423, "pan.___", state 2003, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 2003, "else"
-       line 423, "pan.___", state 2006, "(1)"
-       line 423, "pan.___", state 2007, "(1)"
-       line 423, "pan.___", state 2007, "(1)"
-       line 421, "pan.___", state 2012, "((i<2))"
-       line 421, "pan.___", state 2012, "((i>=2))"
-       line 248, "pan.___", state 2018, "(1)"
-       line 252, "pan.___", state 2026, "(1)"
-       line 252, "pan.___", state 2027, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, "pan.___", state 2027, "else"
-       line 250, "pan.___", state 2032, "((i<1))"
-       line 250, "pan.___", state 2032, "((i>=1))"
-       line 256, "pan.___", state 2038, "(1)"
-       line 256, "pan.___", state 2039, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, "pan.___", state 2039, "else"
-       line 260, "pan.___", state 2046, "(1)"
-       line 260, "pan.___", state 2047, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, "pan.___", state 2047, "else"
-       line 258, "pan.___", state 2052, "((i<2))"
-       line 258, "pan.___", state 2052, "((i>=2))"
-       line 265, "pan.___", state 2056, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, "pan.___", state 2056, "else"
-       line 430, "pan.___", state 2058, "(1)"
-       line 430, "pan.___", state 2058, "(1)"
-       line 737, "pan.___", state 2061, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 737, "pan.___", state 2062, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 737, "pan.___", state 2063, "(1)"
-       line 410, "pan.___", state 2070, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2102, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2116, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2134, "(1)"
-       line 256, "pan.___", state 2154, "(1)"
-       line 260, "pan.___", state 2162, "(1)"
-       line 410, "pan.___", state 2187, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2219, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2233, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2251, "(1)"
-       line 256, "pan.___", state 2271, "(1)"
-       line 260, "pan.___", state 2279, "(1)"
-       line 410, "pan.___", state 2298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2362, "(1)"
-       line 256, "pan.___", state 2382, "(1)"
-       line 260, "pan.___", state 2390, "(1)"
-       line 248, "pan.___", state 2421, "(1)"
-       line 256, "pan.___", state 2441, "(1)"
-       line 260, "pan.___", state 2449, "(1)"
-       line 248, "pan.___", state 2464, "(1)"
-       line 256, "pan.___", state 2484, "(1)"
-       line 260, "pan.___", state 2492, "(1)"
-       line 897, "pan.___", state 2509, "-end-"
-       (221 of 2509 states)
-unreached in proctype urcu_writer
-       line 410, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 82, "(1)"
-       line 252, "pan.___", state 90, "(1)"
-       line 256, "pan.___", state 102, "(1)"
-       line 271, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 140, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 153, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 207, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 225, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 239, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 257, "(1)"
-       line 252, "pan.___", state 265, "(1)"
-       line 256, "pan.___", state 277, "(1)"
-       line 260, "pan.___", state 285, "(1)"
-       line 414, "pan.___", state 320, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 338, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 352, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, "pan.___", state 378, "(1)"
-       line 256, "pan.___", state 390, "(1)"
-       line 260, "pan.___", state 398, "(1)"
-       line 414, "pan.___", state 441, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, "pan.___", state 499, "(1)"
-       line 256, "pan.___", state 511, "(1)"
-       line 260, "pan.___", state 519, "(1)"
-       line 414, "pan.___", state 552, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 570, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 584, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, "pan.___", state 610, "(1)"
-       line 256, "pan.___", state 622, "(1)"
-       line 260, "pan.___", state 630, "(1)"
-       line 414, "pan.___", state 665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, "pan.___", state 723, "(1)"
-       line 256, "pan.___", state 735, "(1)"
-       line 260, "pan.___", state 743, "(1)"
-       line 271, "pan.___", state 796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 805, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 820, "(1)"
-       line 283, "pan.___", state 827, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 843, "(1)"
-       line 252, "pan.___", state 851, "(1)"
-       line 256, "pan.___", state 863, "(1)"
-       line 260, "pan.___", state 871, "(1)"
-       line 271, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 911, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 924, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 933, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 949, "(1)"
-       line 252, "pan.___", state 957, "(1)"
-       line 256, "pan.___", state 969, "(1)"
-       line 260, "pan.___", state 977, "(1)"
-       line 275, "pan.___", state 1003, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1016, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1025, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1041, "(1)"
-       line 252, "pan.___", state 1049, "(1)"
-       line 256, "pan.___", state 1061, "(1)"
-       line 260, "pan.___", state 1069, "(1)"
-       line 271, "pan.___", state 1100, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 1109, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1122, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1131, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1147, "(1)"
-       line 252, "pan.___", state 1155, "(1)"
-       line 256, "pan.___", state 1167, "(1)"
-       line 260, "pan.___", state 1175, "(1)"
-       line 275, "pan.___", state 1201, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1214, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1239, "(1)"
-       line 252, "pan.___", state 1247, "(1)"
-       line 256, "pan.___", state 1259, "(1)"
-       line 260, "pan.___", state 1267, "(1)"
-       line 271, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 1307, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1320, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1329, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1345, "(1)"
-       line 252, "pan.___", state 1353, "(1)"
-       line 256, "pan.___", state 1365, "(1)"
-       line 260, "pan.___", state 1373, "(1)"
-       line 275, "pan.___", state 1399, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1412, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1421, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1437, "(1)"
-       line 252, "pan.___", state 1445, "(1)"
-       line 256, "pan.___", state 1457, "(1)"
-       line 260, "pan.___", state 1465, "(1)"
-       line 271, "pan.___", state 1496, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 1505, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1518, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1527, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1543, "(1)"
-       line 252, "pan.___", state 1551, "(1)"
-       line 256, "pan.___", state 1563, "(1)"
-       line 260, "pan.___", state 1571, "(1)"
-       line 1236, "pan.___", state 1587, "-end-"
-       (103 of 1587 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1299, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 2.6e+03 seconds
-pan: rate 26856.415 states/second
-pan: avg transition delay 2.7296e-06 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free.ltl b/formal-model/urcu-controldataflow-intel-ipi/urcu_free.ltl
deleted file mode 100644 (file)
index 6be1be9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!read_poison)
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free.spin.input b/formal-model/urcu-controldataflow-intel-ipi/urcu_free.spin.input
deleted file mode 100644 (file)
index 66927ee..0000000
+++ /dev/null
@@ -1,1272 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_nested.define b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.define b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.define
deleted file mode 100644 (file)
index d99d793..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_MB
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.log b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 1984f88..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    8619 States=    1e+06 Transitions=    8e+06 Memory=   550.432        t=   20.2 R=   5e+04
-Depth=    8619 States=    2e+06 Transitions=  1.8e+07 Memory=   634.318        t=   46.3 R=   4e+04
-Depth=    8619 States=    3e+06 Transitions= 2.53e+07 Memory=   718.303        t=   64.9 R=   5e+04
-pan: resizing hashtable to -w22..  done
-Depth=    8619 States=    4e+06 Transitions= 3.53e+07 Memory=   833.311        t=   91.4 R=   4e+04
-Depth=    8619 States=    5e+06 Transitions= 5.71e+07 Memory=   917.295        t=    152 R=   3e+04
-Depth=    8619 States=    6e+06 Transitions= 6.81e+07 Memory=  1001.279        t=    181 R=   3e+04
-Depth=    8619 States=    7e+06 Transitions= 8.02e+07 Memory=  1085.264        t=    214 R=   3e+04
-Depth=    8619 States=    8e+06 Transitions=  8.9e+07 Memory=  1169.151        t=    238 R=   3e+04
-pan: claim violated! (at depth 1359)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 8619, errors: 1
-  8162162 states, stored
- 81941434 states, matched
- 90103596 transitions (= stored+matched)
-1.3256628e+09 atomic steps
-hash conflicts:  60101961 (resolved)
-
-Stats on memory usage (in Megabytes):
-  902.949      equivalent memory usage for states (stored*(State-vector + overhead))
-  693.526      actual memory usage for states (compression: 76.81%)
-               state-vector as stored = 61 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
- 1182.822      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 272, "pan.___", state 34, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 56, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 65, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 81, "(1)"
-       line 253, "pan.___", state 89, "(1)"
-       line 257, "pan.___", state 101, "(1)"
-       line 261, "pan.___", state 109, "(1)"
-       line 411, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 199, "(1)"
-       line 257, "pan.___", state 219, "(1)"
-       line 261, "pan.___", state 227, "(1)"
-       line 700, "pan.___", state 246, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 253, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 285, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 299, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 317, "(1)"
-       line 257, "pan.___", state 337, "(1)"
-       line 261, "pan.___", state 345, "(1)"
-       line 411, "pan.___", state 364, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 396, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 410, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 428, "(1)"
-       line 257, "pan.___", state 448, "(1)"
-       line 261, "pan.___", state 456, "(1)"
-       line 411, "pan.___", state 477, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 479, "(1)"
-       line 411, "pan.___", state 480, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 480, "else"
-       line 411, "pan.___", state 483, "(1)"
-       line 415, "pan.___", state 491, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 493, "(1)"
-       line 415, "pan.___", state 494, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 494, "else"
-       line 415, "pan.___", state 497, "(1)"
-       line 415, "pan.___", state 498, "(1)"
-       line 415, "pan.___", state 498, "(1)"
-       line 413, "pan.___", state 503, "((i<1))"
-       line 413, "pan.___", state 503, "((i>=1))"
-       line 420, "pan.___", state 509, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 511, "(1)"
-       line 420, "pan.___", state 512, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 512, "else"
-       line 420, "pan.___", state 515, "(1)"
-       line 420, "pan.___", state 516, "(1)"
-       line 420, "pan.___", state 516, "(1)"
-       line 424, "pan.___", state 523, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 525, "(1)"
-       line 424, "pan.___", state 526, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 526, "else"
-       line 424, "pan.___", state 529, "(1)"
-       line 424, "pan.___", state 530, "(1)"
-       line 424, "pan.___", state 530, "(1)"
-       line 422, "pan.___", state 535, "((i<2))"
-       line 422, "pan.___", state 535, "((i>=2))"
-       line 249, "pan.___", state 541, "(1)"
-       line 253, "pan.___", state 549, "(1)"
-       line 253, "pan.___", state 550, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 550, "else"
-       line 251, "pan.___", state 555, "((i<1))"
-       line 251, "pan.___", state 555, "((i>=1))"
-       line 257, "pan.___", state 561, "(1)"
-       line 257, "pan.___", state 562, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 562, "else"
-       line 261, "pan.___", state 569, "(1)"
-       line 261, "pan.___", state 570, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 570, "else"
-       line 259, "pan.___", state 575, "((i<2))"
-       line 259, "pan.___", state 575, "((i>=2))"
-       line 266, "pan.___", state 579, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 579, "else"
-       line 431, "pan.___", state 581, "(1)"
-       line 431, "pan.___", state 581, "(1)"
-       line 700, "pan.___", state 584, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 700, "pan.___", state 585, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 700, "pan.___", state 586, "(1)"
-       line 411, "pan.___", state 593, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 625, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 639, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 657, "(1)"
-       line 257, "pan.___", state 677, "(1)"
-       line 261, "pan.___", state 685, "(1)"
-       line 411, "pan.___", state 711, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 743, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 757, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 775, "(1)"
-       line 257, "pan.___", state 795, "(1)"
-       line 261, "pan.___", state 803, "(1)"
-       line 411, "pan.___", state 822, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 824, "(1)"
-       line 411, "pan.___", state 825, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 825, "else"
-       line 411, "pan.___", state 828, "(1)"
-       line 415, "pan.___", state 836, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 838, "(1)"
-       line 415, "pan.___", state 839, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 839, "else"
-       line 415, "pan.___", state 842, "(1)"
-       line 415, "pan.___", state 843, "(1)"
-       line 415, "pan.___", state 843, "(1)"
-       line 413, "pan.___", state 848, "((i<1))"
-       line 413, "pan.___", state 848, "((i>=1))"
-       line 420, "pan.___", state 854, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 856, "(1)"
-       line 420, "pan.___", state 857, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 857, "else"
-       line 420, "pan.___", state 860, "(1)"
-       line 420, "pan.___", state 861, "(1)"
-       line 420, "pan.___", state 861, "(1)"
-       line 424, "pan.___", state 868, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 870, "(1)"
-       line 424, "pan.___", state 871, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 871, "else"
-       line 424, "pan.___", state 874, "(1)"
-       line 424, "pan.___", state 875, "(1)"
-       line 424, "pan.___", state 875, "(1)"
-       line 422, "pan.___", state 880, "((i<2))"
-       line 422, "pan.___", state 880, "((i>=2))"
-       line 249, "pan.___", state 886, "(1)"
-       line 253, "pan.___", state 894, "(1)"
-       line 253, "pan.___", state 895, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 895, "else"
-       line 251, "pan.___", state 900, "((i<1))"
-       line 251, "pan.___", state 900, "((i>=1))"
-       line 257, "pan.___", state 906, "(1)"
-       line 257, "pan.___", state 907, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 907, "else"
-       line 261, "pan.___", state 914, "(1)"
-       line 261, "pan.___", state 915, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 915, "else"
-       line 259, "pan.___", state 920, "((i<2))"
-       line 259, "pan.___", state 920, "((i>=2))"
-       line 266, "pan.___", state 924, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 924, "else"
-       line 431, "pan.___", state 926, "(1)"
-       line 431, "pan.___", state 926, "(1)"
-       line 708, "pan.___", state 930, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 935, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 967, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 981, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 999, "(1)"
-       line 257, "pan.___", state 1019, "(1)"
-       line 261, "pan.___", state 1027, "(1)"
-       line 411, "pan.___", state 1049, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1081, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1095, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1113, "(1)"
-       line 257, "pan.___", state 1133, "(1)"
-       line 261, "pan.___", state 1141, "(1)"
-       line 411, "pan.___", state 1164, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1196, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1210, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1228, "(1)"
-       line 257, "pan.___", state 1248, "(1)"
-       line 261, "pan.___", state 1256, "(1)"
-       line 411, "pan.___", state 1275, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1307, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1321, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1339, "(1)"
-       line 257, "pan.___", state 1359, "(1)"
-       line 261, "pan.___", state 1367, "(1)"
-       line 411, "pan.___", state 1391, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1423, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1437, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1455, "(1)"
-       line 257, "pan.___", state 1475, "(1)"
-       line 261, "pan.___", state 1483, "(1)"
-       line 411, "pan.___", state 1502, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1534, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1548, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1566, "(1)"
-       line 257, "pan.___", state 1586, "(1)"
-       line 261, "pan.___", state 1594, "(1)"
-       line 411, "pan.___", state 1616, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1648, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1662, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1680, "(1)"
-       line 257, "pan.___", state 1700, "(1)"
-       line 261, "pan.___", state 1708, "(1)"
-       line 747, "pan.___", state 1727, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1734, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1766, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1780, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1798, "(1)"
-       line 257, "pan.___", state 1818, "(1)"
-       line 261, "pan.___", state 1826, "(1)"
-       line 411, "pan.___", state 1845, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1877, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1891, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1909, "(1)"
-       line 257, "pan.___", state 1929, "(1)"
-       line 261, "pan.___", state 1937, "(1)"
-       line 411, "pan.___", state 1958, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 1960, "(1)"
-       line 411, "pan.___", state 1961, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 1961, "else"
-       line 411, "pan.___", state 1964, "(1)"
-       line 415, "pan.___", state 1972, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1974, "(1)"
-       line 415, "pan.___", state 1975, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 1975, "else"
-       line 415, "pan.___", state 1978, "(1)"
-       line 415, "pan.___", state 1979, "(1)"
-       line 415, "pan.___", state 1979, "(1)"
-       line 413, "pan.___", state 1984, "((i<1))"
-       line 413, "pan.___", state 1984, "((i>=1))"
-       line 420, "pan.___", state 1990, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1992, "(1)"
-       line 420, "pan.___", state 1993, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 1993, "else"
-       line 420, "pan.___", state 1996, "(1)"
-       line 420, "pan.___", state 1997, "(1)"
-       line 420, "pan.___", state 1997, "(1)"
-       line 424, "pan.___", state 2004, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2006, "(1)"
-       line 424, "pan.___", state 2007, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2007, "else"
-       line 424, "pan.___", state 2010, "(1)"
-       line 424, "pan.___", state 2011, "(1)"
-       line 424, "pan.___", state 2011, "(1)"
-       line 422, "pan.___", state 2016, "((i<2))"
-       line 422, "pan.___", state 2016, "((i>=2))"
-       line 249, "pan.___", state 2022, "(1)"
-       line 253, "pan.___", state 2030, "(1)"
-       line 253, "pan.___", state 2031, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2031, "else"
-       line 251, "pan.___", state 2036, "((i<1))"
-       line 251, "pan.___", state 2036, "((i>=1))"
-       line 257, "pan.___", state 2042, "(1)"
-       line 257, "pan.___", state 2043, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2043, "else"
-       line 261, "pan.___", state 2050, "(1)"
-       line 261, "pan.___", state 2051, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2051, "else"
-       line 259, "pan.___", state 2056, "((i<2))"
-       line 259, "pan.___", state 2056, "((i>=2))"
-       line 266, "pan.___", state 2060, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2060, "else"
-       line 431, "pan.___", state 2062, "(1)"
-       line 431, "pan.___", state 2062, "(1)"
-       line 747, "pan.___", state 2065, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 747, "pan.___", state 2066, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 747, "pan.___", state 2067, "(1)"
-       line 411, "pan.___", state 2074, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2106, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2120, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2138, "(1)"
-       line 257, "pan.___", state 2158, "(1)"
-       line 261, "pan.___", state 2166, "(1)"
-       line 411, "pan.___", state 2191, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2223, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2237, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2255, "(1)"
-       line 257, "pan.___", state 2275, "(1)"
-       line 261, "pan.___", state 2283, "(1)"
-       line 411, "pan.___", state 2302, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2334, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2348, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2366, "(1)"
-       line 257, "pan.___", state 2386, "(1)"
-       line 261, "pan.___", state 2394, "(1)"
-       line 249, "pan.___", state 2425, "(1)"
-       line 257, "pan.___", state 2445, "(1)"
-       line 261, "pan.___", state 2453, "(1)"
-       line 249, "pan.___", state 2468, "(1)"
-       line 257, "pan.___", state 2488, "(1)"
-       line 261, "pan.___", state 2496, "(1)"
-       line 898, "pan.___", state 2513, "-end-"
-       (221 of 2513 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 20, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 26, "(1)"
-       line 415, "pan.___", state 34, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 40, "(1)"
-       line 415, "pan.___", state 41, "(1)"
-       line 415, "pan.___", state 41, "(1)"
-       line 413, "pan.___", state 46, "((i<1))"
-       line 413, "pan.___", state 46, "((i>=1))"
-       line 420, "pan.___", state 52, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 58, "(1)"
-       line 420, "pan.___", state 59, "(1)"
-       line 420, "pan.___", state 59, "(1)"
-       line 424, "pan.___", state 72, "(1)"
-       line 424, "pan.___", state 73, "(1)"
-       line 424, "pan.___", state 73, "(1)"
-       line 422, "pan.___", state 78, "((i<2))"
-       line 422, "pan.___", state 78, "((i>=2))"
-       line 249, "pan.___", state 84, "(1)"
-       line 253, "pan.___", state 92, "(1)"
-       line 253, "pan.___", state 93, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 93, "else"
-       line 251, "pan.___", state 98, "((i<1))"
-       line 251, "pan.___", state 98, "((i>=1))"
-       line 257, "pan.___", state 104, "(1)"
-       line 257, "pan.___", state 105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 105, "else"
-       line 261, "pan.___", state 112, "(1)"
-       line 261, "pan.___", state 113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 113, "else"
-       line 259, "pan.___", state 118, "((i<2))"
-       line 259, "pan.___", state 118, "((i>=2))"
-       line 266, "pan.___", state 122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 122, "else"
-       line 431, "pan.___", state 124, "(1)"
-       line 431, "pan.___", state 124, "(1)"
-       line 272, "pan.___", state 133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 142, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 274, "pan.___", state 150, "((i<1))"
-       line 274, "pan.___", state 150, "((i>=1))"
-       line 280, "pan.___", state 155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 1021, "pan.___", state 183, "old_data = cached_rcu_ptr.val[_pid]"
-       line 1032, "pan.___", state 187, "_proc_urcu_writer = (_proc_urcu_writer|(1<<4))"
-       line 411, "pan.___", state 195, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 201, "(1)"
-       line 415, "pan.___", state 209, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 215, "(1)"
-       line 415, "pan.___", state 216, "(1)"
-       line 415, "pan.___", state 216, "(1)"
-       line 420, "pan.___", state 229, "(1)"
-       line 424, "pan.___", state 241, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 259, "(1)"
-       line 253, "pan.___", state 267, "(1)"
-       line 261, "pan.___", state 287, "(1)"
-       line 431, "pan.___", state 299, "(1)"
-       line 431, "pan.___", state 299, "(1)"
-       line 415, "pan.___", state 322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 380, "(1)"
-       line 261, "pan.___", state 400, "(1)"
-       line 415, "pan.___", state 443, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 501, "(1)"
-       line 415, "pan.___", state 554, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 612, "(1)"
-       line 415, "pan.___", state 667, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 699, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 725, "(1)"
-       line 261, "pan.___", state 745, "(1)"
-       line 1168, "pan.___", state 770, "_proc_urcu_writer = (_proc_urcu_writer|(1<<13))"
-       line 272, "pan.___", state 798, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 800, "(1)"
-       line 276, "pan.___", state 807, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 809, "(1)"
-       line 276, "pan.___", state 810, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 810, "else"
-       line 274, "pan.___", state 815, "((i<1))"
-       line 274, "pan.___", state 815, "((i>=1))"
-       line 280, "pan.___", state 820, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 822, "(1)"
-       line 280, "pan.___", state 823, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 823, "else"
-       line 284, "pan.___", state 829, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 831, "(1)"
-       line 284, "pan.___", state 832, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 832, "else"
-       line 282, "pan.___", state 837, "((i<2))"
-       line 282, "pan.___", state 837, "((i>=2))"
-       line 249, "pan.___", state 845, "(1)"
-       line 253, "pan.___", state 853, "(1)"
-       line 253, "pan.___", state 854, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 854, "else"
-       line 251, "pan.___", state 859, "((i<1))"
-       line 251, "pan.___", state 859, "((i>=1))"
-       line 257, "pan.___", state 865, "(1)"
-       line 257, "pan.___", state 866, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 866, "else"
-       line 261, "pan.___", state 873, "(1)"
-       line 261, "pan.___", state 874, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 874, "else"
-       line 266, "pan.___", state 883, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 883, "else"
-       line 1222, "pan.___", state 899, "((i<1))"
-       line 1222, "pan.___", state 899, "((i>=1))"
-       line 272, "pan.___", state 904, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 906, "(1)"
-       line 276, "pan.___", state 913, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 915, "(1)"
-       line 276, "pan.___", state 916, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 916, "else"
-       line 274, "pan.___", state 921, "((i<1))"
-       line 274, "pan.___", state 921, "((i>=1))"
-       line 280, "pan.___", state 926, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 928, "(1)"
-       line 280, "pan.___", state 929, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 929, "else"
-       line 284, "pan.___", state 935, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 937, "(1)"
-       line 284, "pan.___", state 938, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 938, "else"
-       line 282, "pan.___", state 943, "((i<2))"
-       line 282, "pan.___", state 943, "((i>=2))"
-       line 249, "pan.___", state 951, "(1)"
-       line 253, "pan.___", state 959, "(1)"
-       line 253, "pan.___", state 960, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 960, "else"
-       line 251, "pan.___", state 965, "((i<1))"
-       line 251, "pan.___", state 965, "((i>=1))"
-       line 257, "pan.___", state 971, "(1)"
-       line 257, "pan.___", state 972, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 972, "else"
-       line 261, "pan.___", state 979, "(1)"
-       line 261, "pan.___", state 980, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 980, "else"
-       line 266, "pan.___", state 989, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 989, "else"
-       line 299, "pan.___", state 991, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 991, "else"
-       line 1222, "pan.___", state 992, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 1222, "pan.___", state 992, "else"
-       line 276, "pan.___", state 1005, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1018, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1027, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1043, "(1)"
-       line 253, "pan.___", state 1051, "(1)"
-       line 257, "pan.___", state 1063, "(1)"
-       line 261, "pan.___", state 1071, "(1)"
-       line 272, "pan.___", state 1102, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1111, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1124, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1133, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1149, "(1)"
-       line 253, "pan.___", state 1157, "(1)"
-       line 257, "pan.___", state 1169, "(1)"
-       line 261, "pan.___", state 1177, "(1)"
-       line 276, "pan.___", state 1203, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1225, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1241, "(1)"
-       line 253, "pan.___", state 1249, "(1)"
-       line 257, "pan.___", state 1261, "(1)"
-       line 261, "pan.___", state 1269, "(1)"
-       line 272, "pan.___", state 1300, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1309, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1322, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1331, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1347, "(1)"
-       line 253, "pan.___", state 1355, "(1)"
-       line 257, "pan.___", state 1367, "(1)"
-       line 261, "pan.___", state 1375, "(1)"
-       line 272, "pan.___", state 1392, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1394, "(1)"
-       line 276, "pan.___", state 1401, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1403, "(1)"
-       line 276, "pan.___", state 1404, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1404, "else"
-       line 274, "pan.___", state 1409, "((i<1))"
-       line 274, "pan.___", state 1409, "((i>=1))"
-       line 280, "pan.___", state 1414, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1416, "(1)"
-       line 280, "pan.___", state 1417, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1417, "else"
-       line 284, "pan.___", state 1423, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1425, "(1)"
-       line 284, "pan.___", state 1426, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1426, "else"
-       line 282, "pan.___", state 1431, "((i<2))"
-       line 282, "pan.___", state 1431, "((i>=2))"
-       line 249, "pan.___", state 1439, "(1)"
-       line 253, "pan.___", state 1447, "(1)"
-       line 253, "pan.___", state 1448, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1448, "else"
-       line 251, "pan.___", state 1453, "((i<1))"
-       line 251, "pan.___", state 1453, "((i>=1))"
-       line 257, "pan.___", state 1459, "(1)"
-       line 257, "pan.___", state 1460, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1460, "else"
-       line 261, "pan.___", state 1467, "(1)"
-       line 261, "pan.___", state 1468, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1468, "else"
-       line 266, "pan.___", state 1477, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1477, "else"
-       line 1233, "pan.___", state 1480, "i = 0"
-       line 1233, "pan.___", state 1482, "reader_barrier = 1"
-       line 1233, "pan.___", state 1493, "((i<1))"
-       line 1233, "pan.___", state 1493, "((i>=1))"
-       line 272, "pan.___", state 1498, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1500, "(1)"
-       line 276, "pan.___", state 1507, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1509, "(1)"
-       line 276, "pan.___", state 1510, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1510, "else"
-       line 274, "pan.___", state 1515, "((i<1))"
-       line 274, "pan.___", state 1515, "((i>=1))"
-       line 280, "pan.___", state 1520, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1522, "(1)"
-       line 280, "pan.___", state 1523, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1523, "else"
-       line 284, "pan.___", state 1529, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1531, "(1)"
-       line 284, "pan.___", state 1532, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1532, "else"
-       line 282, "pan.___", state 1537, "((i<2))"
-       line 282, "pan.___", state 1537, "((i>=2))"
-       line 249, "pan.___", state 1545, "(1)"
-       line 253, "pan.___", state 1553, "(1)"
-       line 253, "pan.___", state 1554, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1554, "else"
-       line 251, "pan.___", state 1559, "((i<1))"
-       line 251, "pan.___", state 1559, "((i>=1))"
-       line 257, "pan.___", state 1565, "(1)"
-       line 257, "pan.___", state 1566, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1566, "else"
-       line 261, "pan.___", state 1573, "(1)"
-       line 261, "pan.___", state 1574, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1574, "else"
-       line 266, "pan.___", state 1583, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1583, "else"
-       line 299, "pan.___", state 1585, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1585, "else"
-       line 1233, "pan.___", state 1586, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 1233, "pan.___", state 1586, "else"
-       line 1237, "pan.___", state 1589, "-end-"
-       (179 of 1589 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 241 seconds
-pan: rate 33888.985 states/second
-pan: avg transition delay 2.673e-06 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.spin.input b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index ddb4112..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_MB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index e886f80..0000000
+++ /dev/null
@@ -1,1362 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4182
-2:3:4102
-3:3:4105
-4:3:4105
-5:3:4108
-6:3:4116
-7:3:4116
-8:3:4119
-9:3:4125
-10:3:4129
-11:3:4129
-12:3:4132
-13:3:4142
-14:3:4150
-15:3:4150
-16:3:4153
-17:3:4159
-18:3:4163
-19:3:4163
-20:3:4166
-21:3:4172
-22:3:4176
-23:3:4177
-24:0:4182
-25:3:4179
-26:0:4182
-27:2:2515
-28:0:4182
-29:2:2521
-30:0:4182
-31:2:2522
-32:0:4182
-33:2:2524
-34:0:4182
-35:2:2525
-36:0:4182
-37:2:2526
-38:0:4182
-39:2:2527
-40:0:4182
-41:2:2528
-42:2:2529
-43:2:2533
-44:2:2534
-45:2:2542
-46:2:2543
-47:2:2547
-48:2:2548
-49:2:2556
-50:2:2561
-51:2:2565
-52:2:2566
-53:2:2574
-54:2:2575
-55:2:2579
-56:2:2580
-57:2:2574
-58:2:2575
-59:2:2579
-60:2:2580
-61:2:2588
-62:2:2593
-63:2:2600
-64:2:2601
-65:2:2608
-66:2:2613
-67:2:2620
-68:2:2621
-69:2:2620
-70:2:2621
-71:2:2628
-72:2:2638
-73:0:4182
-74:2:2527
-75:0:4182
-76:2:2642
-77:2:2646
-78:2:2647
-79:2:2651
-80:2:2655
-81:2:2656
-82:2:2660
-83:2:2668
-84:2:2669
-85:2:2673
-86:2:2677
-87:2:2678
-88:2:2673
-89:2:2674
-90:2:2682
-91:0:4182
-92:2:2527
-93:0:4182
-94:2:2690
-95:2:2691
-96:2:2692
-97:0:4182
-98:2:2527
-99:0:4182
-100:2:2700
-101:0:4182
-102:2:2527
-103:0:4182
-104:2:2703
-105:2:2704
-106:2:2708
-107:2:2709
-108:2:2717
-109:2:2718
-110:2:2722
-111:2:2723
-112:2:2731
-113:2:2736
-114:2:2737
-115:2:2749
-116:2:2750
-117:2:2754
-118:2:2755
-119:2:2749
-120:2:2750
-121:2:2754
-122:2:2755
-123:2:2763
-124:2:2768
-125:2:2775
-126:2:2776
-127:2:2783
-128:2:2788
-129:2:2795
-130:2:2796
-131:2:2795
-132:2:2796
-133:2:2803
-134:2:2812
-135:0:4182
-136:2:2527
-137:0:4182
-138:2:2816
-139:2:2817
-140:2:2818
-141:2:2830
-142:2:2831
-143:2:2835
-144:2:2836
-145:2:2844
-146:2:2849
-147:2:2853
-148:2:2854
-149:2:2862
-150:2:2863
-151:2:2867
-152:2:2868
-153:2:2862
-154:2:2863
-155:2:2867
-156:2:2868
-157:2:2876
-158:2:2881
-159:2:2888
-160:2:2889
-161:2:2896
-162:2:2901
-163:2:2908
-164:2:2909
-165:2:2908
-166:2:2909
-167:2:2916
-168:2:2929
-169:2:2930
-170:0:4182
-171:2:2527
-172:0:4182
-173:2:2937
-174:2:2938
-175:2:2942
-176:2:2943
-177:2:2951
-178:2:2952
-179:2:2956
-180:2:2957
-181:2:2965
-182:2:2970
-183:2:2974
-184:2:2975
-185:2:2983
-186:2:2984
-187:2:2988
-188:2:2989
-189:2:2983
-190:2:2984
-191:2:2988
-192:2:2989
-193:2:2997
-194:2:3002
-195:2:3009
-196:2:3010
-197:2:3017
-198:2:3022
-199:2:3029
-200:2:3030
-201:2:3029
-202:2:3030
-203:2:3037
-204:0:4182
-205:2:2527
-206:0:4182
-207:2:3048
-208:2:3049
-209:2:3053
-210:2:3054
-211:2:3062
-212:2:3063
-213:2:3067
-214:2:3068
-215:2:3076
-216:2:3081
-217:2:3085
-218:2:3086
-219:2:3094
-220:2:3095
-221:2:3099
-222:2:3100
-223:2:3094
-224:2:3095
-225:2:3099
-226:2:3100
-227:2:3108
-228:2:3113
-229:2:3120
-230:2:3121
-231:2:3128
-232:2:3133
-233:2:3140
-234:2:3141
-235:2:3140
-236:2:3141
-237:2:3148
-238:2:3157
-239:0:4182
-240:2:2527
-241:0:4182
-242:2:3161
-243:2:3162
-244:2:3163
-245:2:3175
-246:2:3176
-247:2:3180
-248:2:3181
-249:2:3189
-250:2:3194
-251:2:3198
-252:2:3199
-253:2:3207
-254:2:3208
-255:2:3212
-256:2:3213
-257:2:3207
-258:2:3208
-259:2:3212
-260:2:3213
-261:2:3221
-262:2:3226
-263:2:3233
-264:2:3234
-265:2:3241
-266:2:3246
-267:2:3253
-268:2:3254
-269:2:3253
-270:2:3254
-271:2:3261
-272:2:3273
-273:2:3274
-274:0:4182
-275:2:2527
-276:0:4182
-277:2:3283
-278:2:3284
-279:0:4182
-280:2:2527
-281:0:4182
-282:2:3288
-283:0:4182
-284:2:3296
-285:0:4182
-286:2:2522
-287:0:4182
-288:2:2524
-289:0:4182
-290:2:2525
-291:0:4182
-292:2:2526
-293:0:4182
-294:2:2527
-295:0:4182
-296:2:2528
-297:2:2529
-298:2:2533
-299:2:2534
-300:2:2542
-301:2:2543
-302:2:2547
-303:2:2548
-304:2:2556
-305:2:2561
-306:2:2565
-307:2:2566
-308:2:2574
-309:2:2575
-310:2:2576
-311:2:2574
-312:2:2575
-313:2:2579
-314:2:2580
-315:2:2588
-316:2:2593
-317:2:2600
-318:2:2601
-319:2:2608
-320:2:2613
-321:2:2620
-322:2:2621
-323:2:2620
-324:2:2621
-325:2:2628
-326:2:2638
-327:0:4182
-328:2:2527
-329:0:4182
-330:2:2642
-331:2:2646
-332:2:2647
-333:2:2651
-334:2:2655
-335:2:2656
-336:2:2660
-337:2:2668
-338:2:2669
-339:2:2673
-340:2:2674
-341:2:2673
-342:2:2677
-343:2:2678
-344:2:2682
-345:0:4182
-346:2:2527
-347:0:4182
-348:2:2690
-349:2:2691
-350:2:2692
-351:0:4182
-352:2:2527
-353:0:4182
-354:2:2700
-355:0:4182
-356:2:2527
-357:0:4182
-358:2:2703
-359:2:2704
-360:2:2708
-361:2:2709
-362:2:2717
-363:2:2718
-364:2:2722
-365:2:2723
-366:2:2731
-367:2:2736
-368:2:2737
-369:2:2749
-370:2:2750
-371:2:2754
-372:2:2755
-373:2:2749
-374:2:2750
-375:2:2754
-376:2:2755
-377:2:2763
-378:2:2768
-379:2:2775
-380:2:2776
-381:2:2783
-382:2:2788
-383:2:2795
-384:2:2796
-385:2:2795
-386:2:2796
-387:2:2803
-388:2:2812
-389:0:4182
-390:2:2527
-391:0:4182
-392:2:2816
-393:2:2817
-394:2:2818
-395:2:2830
-396:2:2831
-397:2:2835
-398:2:2836
-399:2:2844
-400:2:2849
-401:2:2853
-402:2:2854
-403:2:2862
-404:2:2863
-405:2:2867
-406:2:2868
-407:2:2862
-408:2:2863
-409:2:2867
-410:2:2868
-411:2:2876
-412:2:2881
-413:2:2888
-414:2:2889
-415:2:2896
-416:2:2901
-417:2:2908
-418:2:2909
-419:2:2908
-420:2:2909
-421:2:2916
-422:2:2929
-423:2:2930
-424:0:4182
-425:2:2527
-426:0:4182
-427:2:2937
-428:2:2938
-429:2:2942
-430:2:2943
-431:2:2951
-432:2:2952
-433:2:2956
-434:2:2957
-435:2:2965
-436:2:2970
-437:2:2974
-438:2:2975
-439:2:2983
-440:2:2984
-441:2:2988
-442:2:2989
-443:2:2983
-444:2:2984
-445:2:2988
-446:2:2989
-447:2:2997
-448:2:3002
-449:2:3009
-450:2:3010
-451:2:3017
-452:2:3022
-453:2:3029
-454:2:3030
-455:2:3029
-456:2:3030
-457:2:3037
-458:0:4182
-459:2:2527
-460:0:4182
-461:2:3048
-462:2:3049
-463:2:3053
-464:2:3054
-465:2:3062
-466:2:3063
-467:2:3067
-468:2:3068
-469:2:3076
-470:2:3081
-471:2:3085
-472:2:3086
-473:2:3094
-474:2:3095
-475:2:3099
-476:2:3100
-477:2:3094
-478:2:3095
-479:2:3099
-480:2:3100
-481:2:3108
-482:2:3113
-483:2:3120
-484:2:3121
-485:2:3128
-486:2:3133
-487:2:3140
-488:2:3141
-489:2:3140
-490:2:3141
-491:2:3148
-492:2:3157
-493:0:4182
-494:2:2527
-495:0:4182
-496:2:3161
-497:2:3162
-498:2:3163
-499:2:3175
-500:2:3176
-501:2:3180
-502:2:3181
-503:2:3189
-504:2:3194
-505:2:3198
-506:2:3199
-507:2:3207
-508:2:3208
-509:2:3212
-510:2:3213
-511:2:3207
-512:2:3208
-513:2:3212
-514:2:3213
-515:2:3221
-516:2:3226
-517:2:3233
-518:2:3234
-519:2:3241
-520:2:3246
-521:2:3253
-522:2:3254
-523:2:3253
-524:2:3254
-525:2:3261
-526:2:3273
-527:2:3274
-528:0:4182
-529:2:2527
-530:0:4182
-531:2:3283
-532:2:3284
-533:0:4182
-534:2:2527
-535:0:4182
-536:2:3288
-537:0:4182
-538:2:3296
-539:0:4182
-540:2:2522
-541:0:4182
-542:2:2524
-543:0:4182
-544:2:2525
-545:0:4182
-546:2:2526
-547:0:4182
-548:2:2527
-549:0:4182
-550:2:2528
-551:2:2529
-552:2:2533
-553:2:2534
-554:2:2542
-555:2:2543
-556:2:2547
-557:2:2548
-558:2:2556
-559:2:2561
-560:2:2565
-561:2:2566
-562:2:2574
-563:2:2575
-564:2:2579
-565:2:2580
-566:2:2574
-567:2:2575
-568:2:2576
-569:2:2588
-570:2:2593
-571:2:2600
-572:2:2601
-573:2:2608
-574:2:2613
-575:2:2620
-576:2:2621
-577:2:2620
-578:2:2621
-579:2:2628
-580:2:2638
-581:0:4182
-582:2:2527
-583:0:4182
-584:2:2642
-585:2:2646
-586:2:2647
-587:2:2651
-588:2:2655
-589:2:2656
-590:2:2660
-591:2:2668
-592:2:2669
-593:2:2673
-594:2:2677
-595:2:2678
-596:2:2673
-597:2:2674
-598:2:2682
-599:0:4182
-600:2:2527
-601:0:4182
-602:2:2690
-603:2:2691
-604:2:2692
-605:0:4182
-606:2:2527
-607:0:4182
-608:2:2700
-609:0:4182
-610:2:2527
-611:0:4182
-612:2:2703
-613:2:2704
-614:2:2708
-615:2:2709
-616:2:2717
-617:2:2718
-618:2:2722
-619:2:2723
-620:2:2731
-621:2:2744
-622:2:2745
-623:2:2749
-624:2:2750
-625:2:2754
-626:2:2755
-627:2:2749
-628:2:2750
-629:2:2754
-630:2:2755
-631:2:2763
-632:2:2768
-633:2:2775
-634:2:2776
-635:2:2783
-636:2:2790
-637:2:2791
-638:2:2795
-639:2:2796
-640:2:2795
-641:2:2796
-642:2:2803
-643:2:2812
-644:0:4182
-645:2:2527
-646:0:4182
-647:2:2816
-648:2:2817
-649:2:2818
-650:2:2830
-651:2:2831
-652:2:2835
-653:2:2836
-654:2:2844
-655:2:2857
-656:2:2858
-657:2:2862
-658:2:2863
-659:2:2867
-660:2:2868
-661:2:2862
-662:2:2863
-663:2:2867
-664:2:2868
-665:2:2876
-666:2:2881
-667:2:2888
-668:2:2889
-669:2:2896
-670:2:2903
-671:2:2904
-672:2:2908
-673:2:2909
-674:2:2908
-675:2:2909
-676:2:2916
-677:2:2929
-678:2:2930
-679:0:4182
-680:2:2527
-681:0:4182
-682:2:2937
-683:2:2938
-684:2:2942
-685:2:2943
-686:2:2951
-687:2:2952
-688:2:2956
-689:2:2957
-690:2:2965
-691:2:2978
-692:2:2979
-693:2:2983
-694:2:2984
-695:2:2988
-696:2:2989
-697:2:2983
-698:2:2984
-699:2:2988
-700:2:2989
-701:2:2997
-702:2:3002
-703:2:3009
-704:2:3010
-705:2:3017
-706:2:3024
-707:2:3025
-708:2:3029
-709:2:3030
-710:2:3029
-711:2:3030
-712:2:3037
-713:0:4182
-714:2:2527
-715:0:4182
-716:2:3161
-717:2:3162
-718:2:3166
-719:2:3167
-720:2:3175
-721:2:3176
-722:2:3180
-723:2:3181
-724:2:3189
-725:2:3202
-726:2:3203
-727:2:3207
-728:2:3208
-729:2:3212
-730:2:3213
-731:2:3207
-732:2:3208
-733:2:3212
-734:2:3213
-735:2:3221
-736:2:3226
-737:2:3233
-738:2:3234
-739:2:3241
-740:2:3248
-741:2:3249
-742:2:3253
-743:2:3254
-744:2:3253
-745:2:3254
-746:2:3261
-747:2:3273
-748:2:3274
-749:0:4182
-750:2:2527
-751:0:4182
-752:2:3283
-753:2:3284
-754:0:4182
-755:2:2527
-756:0:4182
-757:2:3048
-758:2:3049
-759:2:3053
-760:2:3054
-761:2:3062
-762:2:3063
-763:2:3067
-764:2:3068
-765:2:3076
-766:2:3089
-767:2:3090
-768:2:3094
-769:2:3095
-770:2:3096
-771:2:3094
-772:2:3095
-773:2:3099
-774:2:3100
-775:2:3108
-776:2:3113
-777:2:3120
-778:2:3121
-779:2:3128
-780:2:3135
-781:2:3136
-782:2:3140
-783:2:3141
-784:2:3140
-785:2:3141
-786:2:3148
-787:2:3157
-788:0:4182
-789:2:2527
-790:0:4182
-791:2:3288
-792:0:4182
-793:2:3296
-794:0:4182
-795:2:3297
-796:0:4182
-797:2:3302
-798:0:4182
-799:1:2
-800:0:4182
-801:2:3303
-802:0:4182
-803:1:8
-804:0:4182
-805:2:3302
-806:0:4182
-807:1:9
-808:0:4182
-809:2:3303
-810:0:4182
-811:1:10
-812:0:4182
-813:2:3302
-814:0:4182
-815:1:11
-816:0:4182
-817:2:3303
-818:0:4182
-819:1:12
-820:0:4182
-821:2:3302
-822:0:4182
-823:1:13
-824:0:4182
-825:2:3303
-826:0:4182
-827:1:14
-828:0:4182
-829:2:3302
-830:0:4182
-831:1:15
-832:0:4182
-833:2:3303
-834:0:4182
-835:1:16
-836:0:4182
-837:2:3302
-838:0:4182
-839:1:17
-840:0:4182
-841:2:3303
-842:0:4182
-843:1:18
-844:0:4182
-845:2:3302
-846:0:4182
-847:1:19
-848:0:4182
-849:2:3303
-850:0:4182
-851:1:20
-852:0:4182
-853:2:3302
-854:0:4182
-855:1:21
-856:0:4182
-857:2:3303
-858:0:4182
-859:1:122
-860:0:4182
-861:2:3302
-862:0:4182
-863:1:124
-864:0:4182
-865:2:3303
-866:0:4182
-867:1:23
-868:0:4182
-869:2:3302
-870:0:4182
-871:1:130
-872:1:131
-873:1:135
-874:1:136
-875:1:144
-876:1:145
-877:1:149
-878:1:150
-879:1:158
-880:1:163
-881:1:167
-882:1:168
-883:1:176
-884:1:177
-885:1:181
-886:1:182
-887:1:176
-888:1:177
-889:1:181
-890:1:182
-891:1:190
-892:1:195
-893:1:202
-894:1:203
-895:1:210
-896:1:215
-897:1:222
-898:1:223
-899:1:222
-900:1:223
-901:1:230
-902:0:4182
-903:2:3303
-904:0:4182
-905:1:19
-906:0:4182
-907:2:3302
-908:0:4182
-909:1:20
-910:0:4182
-911:2:3303
-912:0:4182
-913:1:21
-914:0:4182
-915:2:3302
-916:0:4182
-917:1:122
-918:0:4182
-919:2:3303
-920:0:4182
-921:1:124
-922:0:4182
-923:2:3302
-924:0:4182
-925:1:23
-926:0:4182
-927:2:3303
-928:0:4182
-929:1:241
-930:1:242
-931:0:4182
-932:2:3302
-933:0:4182
-934:1:19
-935:0:4182
-936:2:3303
-937:0:4182
-938:1:20
-939:0:4182
-940:2:3302
-941:0:4182
-942:1:21
-943:0:4182
-944:2:3303
-945:0:4182
-946:1:122
-947:0:4182
-948:2:3302
-949:0:4182
-950:1:124
-951:0:4182
-952:2:3303
-953:0:4182
-954:1:23
-955:0:4182
-956:2:3302
-957:0:4182
-958:1:248
-959:1:249
-960:1:253
-961:1:254
-962:1:262
-963:1:263
-964:1:267
-965:1:268
-966:1:276
-967:1:281
-968:1:285
-969:1:286
-970:1:294
-971:1:295
-972:1:299
-973:1:300
-974:1:294
-975:1:295
-976:1:299
-977:1:300
-978:1:308
-979:1:313
-980:1:320
-981:1:321
-982:1:328
-983:1:333
-984:1:340
-985:1:341
-986:1:340
-987:1:341
-988:1:348
-989:0:4182
-990:2:3303
-991:0:4182
-992:1:19
-993:0:4182
-994:2:3302
-995:0:4182
-996:1:20
-997:0:4182
-998:2:3303
-999:0:4182
-1000:1:21
-1001:0:4182
-1002:2:3302
-1003:0:4182
-1004:1:122
-1005:0:4182
-1006:2:3303
-1007:0:4182
-1008:1:124
-1009:0:4182
-1010:2:3302
-1011:0:4182
-1012:1:23
-1013:0:4182
-1014:2:3303
-1015:0:4182
-1016:1:359
-1017:1:360
-1018:1:364
-1019:1:365
-1020:1:373
-1021:1:374
-1022:1:378
-1023:1:379
-1024:1:387
-1025:1:392
-1026:1:396
-1027:1:397
-1028:1:405
-1029:1:406
-1030:1:410
-1031:1:411
-1032:1:405
-1033:1:406
-1034:1:410
-1035:1:411
-1036:1:419
-1037:1:424
-1038:1:431
-1039:1:432
-1040:1:439
-1041:1:444
-1042:1:451
-1043:1:452
-1044:1:451
-1045:1:452
-1046:1:459
-1047:1:468
-1048:0:4182
-1049:2:3302
-1050:0:4182
-1051:1:19
-1052:0:4182
-1053:2:3303
-1054:0:4182
-1055:1:20
-1056:0:4182
-1057:2:3302
-1058:0:4182
-1059:1:21
-1060:0:4182
-1061:2:3303
-1062:0:4182
-1063:1:122
-1064:0:4182
-1065:2:3302
-1066:0:4182
-1067:1:124
-1068:0:4182
-1069:2:3303
-1070:0:4182
-1071:1:23
-1072:0:4182
-1073:2:3302
-1074:0:4182
-1075:1:588
-1076:1:589
-1077:1:593
-1078:1:594
-1079:1:602
-1080:1:603
-1081:1:604
-1082:1:616
-1083:1:621
-1084:1:625
-1085:1:626
-1086:1:634
-1087:1:635
-1088:1:639
-1089:1:640
-1090:1:634
-1091:1:635
-1092:1:639
-1093:1:640
-1094:1:648
-1095:1:653
-1096:1:660
-1097:1:661
-1098:1:668
-1099:1:673
-1100:1:680
-1101:1:681
-1102:1:680
-1103:1:681
-1104:1:688
-1105:0:4182
-1106:2:3303
-1107:0:4182
-1108:1:19
-1109:0:4182
-1110:2:3302
-1111:0:4182
-1112:1:20
-1113:0:4182
-1114:2:3303
-1115:0:4182
-1116:1:21
-1117:0:4182
-1118:2:3302
-1119:0:4182
-1120:1:122
-1121:0:4182
-1122:2:3303
-1123:0:4182
-1124:1:124
-1125:0:4182
-1126:2:3302
-1127:0:4182
-1128:1:23
-1129:0:4182
-1130:2:3303
-1131:0:4182
-1132:1:699
-1133:1:702
-1134:1:703
-1135:0:4182
-1136:2:3302
-1137:0:4182
-1138:1:19
-1139:0:4182
-1140:2:3303
-1141:0:4182
-1142:1:20
-1143:0:4182
-1144:2:3302
-1145:0:4182
-1146:1:21
-1147:0:4182
-1148:2:3303
-1149:0:4182
-1150:1:122
-1151:0:4182
-1152:2:3302
-1153:0:4182
-1154:1:124
-1155:0:4182
-1156:2:3303
-1157:0:4182
-1158:1:23
-1159:0:4182
-1160:2:3302
-1161:0:4182
-1162:1:706
-1163:1:707
-1164:1:711
-1165:1:712
-1166:1:720
-1167:1:721
-1168:1:725
-1169:1:726
-1170:1:734
-1171:1:739
-1172:1:743
-1173:1:744
-1174:1:752
-1175:1:753
-1176:1:757
-1177:1:758
-1178:1:752
-1179:1:753
-1180:1:757
-1181:1:758
-1182:1:766
-1183:1:771
-1184:1:778
-1185:1:779
-1186:1:786
-1187:1:791
-1188:1:798
-1189:1:799
-1190:1:798
-1191:1:799
-1192:1:806
-1193:0:4182
-1194:2:3303
-1195:0:4182
-1196:1:19
-1197:0:4182
-1198:2:3302
-1199:0:4182
-1200:1:20
-1201:0:4182
-1202:2:3303
-1203:0:4182
-1204:1:21
-1205:0:4182
-1206:2:3302
-1207:0:4182
-1208:1:122
-1209:0:4182
-1210:2:3303
-1211:0:4182
-1212:1:124
-1213:0:4182
-1214:2:3302
-1215:0:4182
-1216:1:23
-1217:0:4182
-1218:2:3303
-1219:0:4182
-1220:1:930
-1221:1:931
-1222:1:935
-1223:1:936
-1224:1:944
-1225:1:945
-1226:1:949
-1227:1:950
-1228:1:958
-1229:1:963
-1230:1:967
-1231:1:968
-1232:1:976
-1233:1:977
-1234:1:981
-1235:1:982
-1236:1:976
-1237:1:977
-1238:1:981
-1239:1:982
-1240:1:990
-1241:1:995
-1242:1:1002
-1243:1:1003
-1244:1:1010
-1245:1:1015
-1246:1:1022
-1247:1:1023
-1248:1:1022
-1249:1:1023
-1250:1:1030
-1251:1:1039
-1252:1:1043
-1253:0:4182
-1254:2:3302
-1255:0:4182
-1256:1:19
-1257:0:4182
-1258:2:3303
-1259:0:4182
-1260:1:20
-1261:0:4182
-1262:2:3302
-1263:0:4182
-1264:1:21
-1265:0:4182
-1266:2:3303
-1267:0:4182
-1268:1:122
-1269:0:4182
-1270:2:3302
-1271:0:4182
-1272:1:124
-1273:0:4182
-1274:2:3303
-1275:0:4182
-1276:1:23
-1277:0:4182
-1278:2:3302
-1279:0:4182
-1280:1:1044
-1281:1:1045
-1282:1:1049
-1283:1:1050
-1284:1:1058
-1285:1:1059
-1286:1:1060
-1287:1:1072
-1288:1:1077
-1289:1:1081
-1290:1:1082
-1291:1:1090
-1292:1:1091
-1293:1:1095
-1294:1:1096
-1295:1:1090
-1296:1:1091
-1297:1:1095
-1298:1:1096
-1299:1:1104
-1300:1:1109
-1301:1:1116
-1302:1:1117
-1303:1:1124
-1304:1:1129
-1305:1:1136
-1306:1:1137
-1307:1:1136
-1308:1:1137
-1309:1:1144
-1310:0:4182
-1311:2:3303
-1312:0:4182
-1313:1:19
-1314:0:4182
-1315:2:3302
-1316:0:4182
-1317:1:20
-1318:0:4182
-1319:2:3303
-1320:0:4182
-1321:1:21
-1322:0:4182
-1323:2:3302
-1324:0:4182
-1325:1:122
-1326:0:4182
-1327:2:3303
-1328:0:4182
-1329:1:124
-1330:0:4182
-1331:2:3302
-1332:0:4182
-1333:1:23
-1334:0:4182
-1335:2:3303
-1336:0:4182
-1337:1:1155
-1338:0:4182
-1339:2:3302
-1340:0:4182
-1341:1:2421
-1342:1:2428
-1343:1:2429
-1344:1:2436
-1345:1:2441
-1346:1:2448
-1347:1:2449
-1348:1:2448
-1349:1:2449
-1350:1:2456
-1351:1:2460
-1352:0:4182
-1353:2:3303
-1354:0:4182
-1355:1:1157
-1356:1:1158
-1357:0:4180
-1358:2:3302
-1359:0:4186
-1360:1:2169
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.define b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.log b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 42698f6..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    9420 States=    1e+06 Transitions= 7.12e+06 Memory=   550.432        t=   17.7 R=   6e+04
-Depth=    9420 States=    2e+06 Transitions= 1.53e+07 Memory=   634.318        t=   38.9 R=   5e+04
-Depth=    9420 States=    3e+06 Transitions= 2.54e+07 Memory=   718.303        t=   66.3 R=   5e+04
-pan: resizing hashtable to -w22..  done
-Depth=    9420 States=    4e+06 Transitions=  3.3e+07 Memory=   833.311        t=   86.1 R=   5e+04
-Depth=    9420 States=    5e+06 Transitions= 4.08e+07 Memory=   917.295        t=    106 R=   5e+04
-Depth=    9420 States=    6e+06 Transitions= 5.88e+07 Memory=  1001.279        t=    157 R=   4e+04
-Depth=    9420 States=    7e+06 Transitions= 7.01e+07 Memory=  1085.264        t=    187 R=   4e+04
-Depth=    9420 States=    8e+06 Transitions= 8.44e+07 Memory=  1169.151        t=    227 R=   4e+04
-Depth=    9420 States=    9e+06 Transitions= 9.77e+07 Memory=  1253.135        t=    264 R=   3e+04
-pan: resizing hashtable to -w24..  done
-Depth=    9420 States=    1e+07 Transitions= 1.11e+08 Memory=  1461.115        t=    302 R=   3e+04
-Depth=    9420 States=  1.1e+07 Transitions= 1.24e+08 Memory=  1545.100        t=    336 R=   3e+04
-Depth=    9420 States=  1.2e+07 Transitions= 1.33e+08 Memory=  1629.084        t=    362 R=   3e+04
-Depth=    9420 States=  1.3e+07 Transitions= 1.46e+08 Memory=  1713.068        t=    397 R=   3e+04
-Depth=    9420 States=  1.4e+07 Transitions= 1.76e+08 Memory=  1797.053        t=    485 R=   3e+04
-Depth=    9420 States=  1.5e+07 Transitions= 1.95e+08 Memory=  1881.037        t=    540 R=   3e+04
-Depth=    9420 States=  1.6e+07 Transitions= 2.12e+08 Memory=  1964.924        t=    587 R=   3e+04
-Depth=    9420 States=  1.7e+07 Transitions= 2.25e+08 Memory=  2048.908        t=    622 R=   3e+04
-Depth=    9420 States=  1.8e+07 Transitions= 2.44e+08 Memory=  2132.893        t=    676 R=   3e+04
-Depth=    9420 States=  1.9e+07 Transitions=  2.6e+08 Memory=  2216.877        t=    721 R=   3e+04
-Depth=    9420 States=    2e+07 Transitions= 2.78e+08 Memory=  2300.861        t=    771 R=   3e+04
-Depth=    9522 States=  2.1e+07 Transitions= 2.91e+08 Memory=  2384.846        t=    808 R=   3e+04
-Depth=    9542 States=  2.2e+07 Transitions= 3.05e+08 Memory=  2468.830        t=    847 R=   3e+04
-Depth=    9542 States=  2.3e+07 Transitions= 3.16e+08 Memory=  2552.717        t=    878 R=   3e+04
-Depth=    9542 States=  2.4e+07 Transitions= 3.28e+08 Memory=  2636.701        t=    910 R=   3e+04
-Depth=    9542 States=  2.5e+07 Transitions= 3.41e+08 Memory=  2720.686        t=    947 R=   3e+04
-Depth=    9542 States=  2.6e+07 Transitions= 3.53e+08 Memory=  2804.670        t=    979 R=   3e+04
-Depth=    9542 States=  2.7e+07 Transitions= 3.66e+08 Memory=  2888.654        t= 1.02e+03 R=   3e+04
-Depth=    9542 States=  2.8e+07 Transitions= 3.79e+08 Memory=  2972.639        t= 1.05e+03 R=   3e+04
-Depth=    9542 States=  2.9e+07 Transitions= 3.92e+08 Memory=  3056.526        t= 1.09e+03 R=   3e+04
-Depth=    9542 States=    3e+07 Transitions= 4.04e+08 Memory=  3140.510        t= 1.12e+03 R=   3e+04
-Depth=    9542 States=  3.1e+07 Transitions= 4.17e+08 Memory=  3224.494        t= 1.16e+03 R=   3e+04
-Depth=    9542 States=  3.2e+07 Transitions= 4.28e+08 Memory=  3308.479        t= 1.19e+03 R=   3e+04
-Depth=    9542 States=  3.3e+07 Transitions= 4.39e+08 Memory=  3392.463        t= 1.22e+03 R=   3e+04
-Depth=    9542 States=  3.4e+07 Transitions= 4.53e+08 Memory=  3476.447        t= 1.26e+03 R=   3e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9542 States=  3.5e+07 Transitions=  4.7e+08 Memory=  4056.416        t= 1.32e+03 R=   3e+04
-Depth=    9542 States=  3.6e+07 Transitions= 4.83e+08 Memory=  4140.401        t= 1.35e+03 R=   3e+04
-Depth=    9542 States=  3.7e+07 Transitions= 4.99e+08 Memory=  4224.385        t= 1.4e+03 R=   3e+04
-Depth=    9542 States=  3.8e+07 Transitions= 5.14e+08 Memory=  4308.369        t= 1.44e+03 R=   3e+04
-Depth=    9542 States=  3.9e+07 Transitions= 5.29e+08 Memory=  4392.354        t= 1.48e+03 R=   3e+04
-Depth=    9542 States=    4e+07 Transitions= 5.39e+08 Memory=  4476.338        t= 1.51e+03 R=   3e+04
-Depth=    9542 States=  4.1e+07 Transitions= 5.49e+08 Memory=  4560.225        t= 1.53e+03 R=   3e+04
-Depth=    9542 States=  4.2e+07 Transitions= 5.61e+08 Memory=  4644.209        t= 1.56e+03 R=   3e+04
-Depth=    9542 States=  4.3e+07 Transitions= 5.88e+08 Memory=  4728.193        t= 1.64e+03 R=   3e+04
-Depth=    9542 States=  4.4e+07 Transitions= 6.14e+08 Memory=  4812.178        t= 1.72e+03 R=   3e+04
-Depth=    9542 States=  4.5e+07 Transitions= 6.31e+08 Memory=  4896.162        t= 1.76e+03 R=   3e+04
-Depth=    9542 States=  4.6e+07 Transitions= 6.41e+08 Memory=  4980.147        t= 1.79e+03 R=   3e+04
-Depth=    9542 States=  4.7e+07 Transitions= 6.57e+08 Memory=  5064.131        t= 1.84e+03 R=   3e+04
-Depth=    9542 States=  4.8e+07 Transitions= 6.76e+08 Memory=  5148.018        t= 1.89e+03 R=   3e+04
-Depth=    9542 States=  4.9e+07 Transitions= 6.93e+08 Memory=  5232.002        t= 1.94e+03 R=   3e+04
-Depth=    9542 States=    5e+07 Transitions= 7.08e+08 Memory=  5315.986        t= 1.98e+03 R=   3e+04
-Depth=    9542 States=  5.1e+07 Transitions= 7.21e+08 Memory=  5399.971        t= 2.02e+03 R=   3e+04
-Depth=    9542 States=  5.2e+07 Transitions= 7.34e+08 Memory=  5483.955        t= 2.05e+03 R=   3e+04
-Depth=    9542 States=  5.3e+07 Transitions= 7.47e+08 Memory=  5567.940        t= 2.09e+03 R=   3e+04
-Depth=    9542 States=  5.4e+07 Transitions= 7.58e+08 Memory=  5651.826        t= 2.12e+03 R=   3e+04
-Depth=    9542 States=  5.5e+07 Transitions= 7.71e+08 Memory=  5735.811        t= 2.15e+03 R=   3e+04
-Depth=    9542 States=  5.6e+07 Transitions= 7.83e+08 Memory=  5819.795        t= 2.19e+03 R=   3e+04
-Depth=    9542 States=  5.7e+07 Transitions= 7.98e+08 Memory=  5903.779        t= 2.23e+03 R=   3e+04
-Depth=    9542 States=  5.8e+07 Transitions= 8.08e+08 Memory=  5987.764        t= 2.25e+03 R=   3e+04
-Depth=    9542 States=  5.9e+07 Transitions= 8.22e+08 Memory=  6071.748        t= 2.29e+03 R=   3e+04
-Depth=    9542 States=    6e+07 Transitions= 8.33e+08 Memory=  6155.733        t= 2.32e+03 R=   3e+04
-Depth=    9542 States=  6.1e+07 Transitions= 8.44e+08 Memory=  6239.619        t= 2.35e+03 R=   3e+04
-Depth=    9542 States=  6.2e+07 Transitions= 8.56e+08 Memory=  6323.604        t= 2.39e+03 R=   3e+04
-Depth=    9542 States=  6.3e+07 Transitions= 8.74e+08 Memory=  6407.588        t= 2.44e+03 R=   3e+04
-Depth=    9542 States=  6.4e+07 Transitions= 8.86e+08 Memory=  6491.572        t= 2.47e+03 R=   3e+04
-Depth=    9542 States=  6.5e+07 Transitions= 9.01e+08 Memory=  6575.557        t= 2.51e+03 R=   3e+04
-Depth=    9542 States=  6.6e+07 Transitions= 9.17e+08 Memory=  6659.541        t= 2.55e+03 R=   3e+04
-Depth=    9542 States=  6.7e+07 Transitions= 9.31e+08 Memory=  6743.428        t= 2.59e+03 R=   3e+04
-Depth=    9542 States=  6.8e+07 Transitions= 9.46e+08 Memory=  6827.412        t= 2.64e+03 R=   3e+04
-Depth=    9542 States=  6.9e+07 Transitions=  9.6e+08 Memory=  6911.397        t= 2.67e+03 R=   3e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 9542, errors: 0
- 69795266 states, stored
-9.0126381e+08 states, matched
-9.7105908e+08 transitions (= stored+matched)
-1.4943649e+10 atomic steps
-hash conflicts: 5.4028862e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 7721.187      equivalent memory usage for states (stored*(State-vector + overhead))
- 6011.798      actual memory usage for states (compression: 77.86%)
-               state-vector as stored = 62 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
-    3.368      memory lost to fragmentation
- 6978.193      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 272, "pan.___", state 30, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 52, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 61, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 77, "(1)"
-       line 253, "pan.___", state 85, "(1)"
-       line 257, "pan.___", state 97, "(1)"
-       line 261, "pan.___", state 105, "(1)"
-       line 411, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 163, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 177, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 195, "(1)"
-       line 257, "pan.___", state 215, "(1)"
-       line 261, "pan.___", state 223, "(1)"
-       line 691, "pan.___", state 242, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 249, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 281, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 295, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 313, "(1)"
-       line 257, "pan.___", state 333, "(1)"
-       line 261, "pan.___", state 341, "(1)"
-       line 411, "pan.___", state 360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 392, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 406, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 424, "(1)"
-       line 257, "pan.___", state 444, "(1)"
-       line 261, "pan.___", state 452, "(1)"
-       line 411, "pan.___", state 473, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 475, "(1)"
-       line 411, "pan.___", state 476, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 476, "else"
-       line 411, "pan.___", state 479, "(1)"
-       line 415, "pan.___", state 487, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 489, "(1)"
-       line 415, "pan.___", state 490, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 490, "else"
-       line 415, "pan.___", state 493, "(1)"
-       line 415, "pan.___", state 494, "(1)"
-       line 415, "pan.___", state 494, "(1)"
-       line 413, "pan.___", state 499, "((i<1))"
-       line 413, "pan.___", state 499, "((i>=1))"
-       line 420, "pan.___", state 505, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 507, "(1)"
-       line 420, "pan.___", state 508, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 508, "else"
-       line 420, "pan.___", state 511, "(1)"
-       line 420, "pan.___", state 512, "(1)"
-       line 420, "pan.___", state 512, "(1)"
-       line 424, "pan.___", state 519, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 521, "(1)"
-       line 424, "pan.___", state 522, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 522, "else"
-       line 424, "pan.___", state 525, "(1)"
-       line 424, "pan.___", state 526, "(1)"
-       line 424, "pan.___", state 526, "(1)"
-       line 422, "pan.___", state 531, "((i<2))"
-       line 422, "pan.___", state 531, "((i>=2))"
-       line 249, "pan.___", state 537, "(1)"
-       line 253, "pan.___", state 545, "(1)"
-       line 253, "pan.___", state 546, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 546, "else"
-       line 251, "pan.___", state 551, "((i<1))"
-       line 251, "pan.___", state 551, "((i>=1))"
-       line 257, "pan.___", state 557, "(1)"
-       line 257, "pan.___", state 558, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 558, "else"
-       line 261, "pan.___", state 565, "(1)"
-       line 261, "pan.___", state 566, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 566, "else"
-       line 259, "pan.___", state 571, "((i<2))"
-       line 259, "pan.___", state 571, "((i>=2))"
-       line 266, "pan.___", state 575, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 575, "else"
-       line 431, "pan.___", state 577, "(1)"
-       line 431, "pan.___", state 577, "(1)"
-       line 691, "pan.___", state 580, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 691, "pan.___", state 581, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 691, "pan.___", state 582, "(1)"
-       line 411, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 621, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 635, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 653, "(1)"
-       line 257, "pan.___", state 673, "(1)"
-       line 261, "pan.___", state 681, "(1)"
-       line 411, "pan.___", state 707, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 739, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 753, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 771, "(1)"
-       line 257, "pan.___", state 791, "(1)"
-       line 261, "pan.___", state 799, "(1)"
-       line 411, "pan.___", state 818, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 820, "(1)"
-       line 411, "pan.___", state 821, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 821, "else"
-       line 411, "pan.___", state 824, "(1)"
-       line 415, "pan.___", state 832, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 834, "(1)"
-       line 415, "pan.___", state 835, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 835, "else"
-       line 415, "pan.___", state 838, "(1)"
-       line 415, "pan.___", state 839, "(1)"
-       line 415, "pan.___", state 839, "(1)"
-       line 413, "pan.___", state 844, "((i<1))"
-       line 413, "pan.___", state 844, "((i>=1))"
-       line 420, "pan.___", state 850, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 852, "(1)"
-       line 420, "pan.___", state 853, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 853, "else"
-       line 420, "pan.___", state 856, "(1)"
-       line 420, "pan.___", state 857, "(1)"
-       line 420, "pan.___", state 857, "(1)"
-       line 424, "pan.___", state 864, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 866, "(1)"
-       line 424, "pan.___", state 867, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 867, "else"
-       line 424, "pan.___", state 870, "(1)"
-       line 424, "pan.___", state 871, "(1)"
-       line 424, "pan.___", state 871, "(1)"
-       line 422, "pan.___", state 876, "((i<2))"
-       line 422, "pan.___", state 876, "((i>=2))"
-       line 249, "pan.___", state 882, "(1)"
-       line 253, "pan.___", state 890, "(1)"
-       line 253, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 891, "else"
-       line 251, "pan.___", state 896, "((i<1))"
-       line 251, "pan.___", state 896, "((i>=1))"
-       line 257, "pan.___", state 902, "(1)"
-       line 257, "pan.___", state 903, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 903, "else"
-       line 261, "pan.___", state 910, "(1)"
-       line 261, "pan.___", state 911, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 911, "else"
-       line 259, "pan.___", state 916, "((i<2))"
-       line 259, "pan.___", state 916, "((i>=2))"
-       line 266, "pan.___", state 920, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 920, "else"
-       line 431, "pan.___", state 922, "(1)"
-       line 431, "pan.___", state 922, "(1)"
-       line 699, "pan.___", state 926, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 963, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 977, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 995, "(1)"
-       line 257, "pan.___", state 1015, "(1)"
-       line 261, "pan.___", state 1023, "(1)"
-       line 411, "pan.___", state 1045, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1077, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1091, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1109, "(1)"
-       line 257, "pan.___", state 1129, "(1)"
-       line 261, "pan.___", state 1137, "(1)"
-       line 411, "pan.___", state 1160, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1192, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1206, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1224, "(1)"
-       line 257, "pan.___", state 1244, "(1)"
-       line 261, "pan.___", state 1252, "(1)"
-       line 411, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1303, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1317, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1335, "(1)"
-       line 257, "pan.___", state 1355, "(1)"
-       line 261, "pan.___", state 1363, "(1)"
-       line 411, "pan.___", state 1387, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1419, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1433, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1451, "(1)"
-       line 257, "pan.___", state 1471, "(1)"
-       line 261, "pan.___", state 1479, "(1)"
-       line 411, "pan.___", state 1498, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1530, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1544, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1562, "(1)"
-       line 257, "pan.___", state 1582, "(1)"
-       line 261, "pan.___", state 1590, "(1)"
-       line 411, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1644, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1658, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1676, "(1)"
-       line 257, "pan.___", state 1696, "(1)"
-       line 261, "pan.___", state 1704, "(1)"
-       line 738, "pan.___", state 1723, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1730, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1762, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1776, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1794, "(1)"
-       line 257, "pan.___", state 1814, "(1)"
-       line 261, "pan.___", state 1822, "(1)"
-       line 411, "pan.___", state 1841, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1873, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1887, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1905, "(1)"
-       line 257, "pan.___", state 1925, "(1)"
-       line 261, "pan.___", state 1933, "(1)"
-       line 411, "pan.___", state 1954, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 1956, "(1)"
-       line 411, "pan.___", state 1957, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 1957, "else"
-       line 411, "pan.___", state 1960, "(1)"
-       line 415, "pan.___", state 1968, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1970, "(1)"
-       line 415, "pan.___", state 1971, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 1971, "else"
-       line 415, "pan.___", state 1974, "(1)"
-       line 415, "pan.___", state 1975, "(1)"
-       line 415, "pan.___", state 1975, "(1)"
-       line 413, "pan.___", state 1980, "((i<1))"
-       line 413, "pan.___", state 1980, "((i>=1))"
-       line 420, "pan.___", state 1986, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1988, "(1)"
-       line 420, "pan.___", state 1989, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 1989, "else"
-       line 420, "pan.___", state 1992, "(1)"
-       line 420, "pan.___", state 1993, "(1)"
-       line 420, "pan.___", state 1993, "(1)"
-       line 424, "pan.___", state 2000, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2002, "(1)"
-       line 424, "pan.___", state 2003, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2003, "else"
-       line 424, "pan.___", state 2006, "(1)"
-       line 424, "pan.___", state 2007, "(1)"
-       line 424, "pan.___", state 2007, "(1)"
-       line 422, "pan.___", state 2012, "((i<2))"
-       line 422, "pan.___", state 2012, "((i>=2))"
-       line 249, "pan.___", state 2018, "(1)"
-       line 253, "pan.___", state 2026, "(1)"
-       line 253, "pan.___", state 2027, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2027, "else"
-       line 251, "pan.___", state 2032, "((i<1))"
-       line 251, "pan.___", state 2032, "((i>=1))"
-       line 257, "pan.___", state 2038, "(1)"
-       line 257, "pan.___", state 2039, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2039, "else"
-       line 261, "pan.___", state 2046, "(1)"
-       line 261, "pan.___", state 2047, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2047, "else"
-       line 259, "pan.___", state 2052, "((i<2))"
-       line 259, "pan.___", state 2052, "((i>=2))"
-       line 266, "pan.___", state 2056, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2056, "else"
-       line 431, "pan.___", state 2058, "(1)"
-       line 431, "pan.___", state 2058, "(1)"
-       line 738, "pan.___", state 2061, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 738, "pan.___", state 2062, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 738, "pan.___", state 2063, "(1)"
-       line 411, "pan.___", state 2070, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2102, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2116, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2134, "(1)"
-       line 257, "pan.___", state 2154, "(1)"
-       line 261, "pan.___", state 2162, "(1)"
-       line 411, "pan.___", state 2187, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2219, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2233, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2251, "(1)"
-       line 257, "pan.___", state 2271, "(1)"
-       line 261, "pan.___", state 2279, "(1)"
-       line 411, "pan.___", state 2298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2362, "(1)"
-       line 257, "pan.___", state 2382, "(1)"
-       line 261, "pan.___", state 2390, "(1)"
-       line 411, "pan.___", state 2421, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2453, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2467, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2485, "(1)"
-       line 257, "pan.___", state 2505, "(1)"
-       line 261, "pan.___", state 2513, "(1)"
-       line 411, "pan.___", state 2530, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2562, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2576, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2594, "(1)"
-       line 257, "pan.___", state 2614, "(1)"
-       line 261, "pan.___", state 2622, "(1)"
-       line 898, "pan.___", state 2641, "-end-"
-       (227 of 2641 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 82, "(1)"
-       line 253, "pan.___", state 90, "(1)"
-       line 257, "pan.___", state 102, "(1)"
-       line 272, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 140, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 153, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 207, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 225, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 239, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 257, "(1)"
-       line 253, "pan.___", state 265, "(1)"
-       line 257, "pan.___", state 277, "(1)"
-       line 261, "pan.___", state 285, "(1)"
-       line 415, "pan.___", state 320, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 338, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 352, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 378, "(1)"
-       line 257, "pan.___", state 390, "(1)"
-       line 261, "pan.___", state 398, "(1)"
-       line 415, "pan.___", state 441, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 499, "(1)"
-       line 257, "pan.___", state 511, "(1)"
-       line 261, "pan.___", state 519, "(1)"
-       line 415, "pan.___", state 552, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 570, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 584, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 610, "(1)"
-       line 257, "pan.___", state 622, "(1)"
-       line 261, "pan.___", state 630, "(1)"
-       line 415, "pan.___", state 665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 723, "(1)"
-       line 257, "pan.___", state 735, "(1)"
-       line 261, "pan.___", state 743, "(1)"
-       line 272, "pan.___", state 796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 805, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 820, "(1)"
-       line 284, "pan.___", state 827, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 843, "(1)"
-       line 253, "pan.___", state 851, "(1)"
-       line 257, "pan.___", state 863, "(1)"
-       line 261, "pan.___", state 871, "(1)"
-       line 272, "pan.___", state 902, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 911, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 924, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 933, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 949, "(1)"
-       line 253, "pan.___", state 957, "(1)"
-       line 257, "pan.___", state 969, "(1)"
-       line 261, "pan.___", state 977, "(1)"
-       line 276, "pan.___", state 1003, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1016, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1025, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1041, "(1)"
-       line 253, "pan.___", state 1049, "(1)"
-       line 257, "pan.___", state 1061, "(1)"
-       line 261, "pan.___", state 1069, "(1)"
-       line 272, "pan.___", state 1100, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1109, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1122, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1131, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1147, "(1)"
-       line 253, "pan.___", state 1155, "(1)"
-       line 257, "pan.___", state 1167, "(1)"
-       line 261, "pan.___", state 1175, "(1)"
-       line 276, "pan.___", state 1201, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1214, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1223, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1239, "(1)"
-       line 253, "pan.___", state 1247, "(1)"
-       line 257, "pan.___", state 1259, "(1)"
-       line 261, "pan.___", state 1267, "(1)"
-       line 272, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1307, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1320, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1329, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1345, "(1)"
-       line 253, "pan.___", state 1353, "(1)"
-       line 257, "pan.___", state 1365, "(1)"
-       line 261, "pan.___", state 1373, "(1)"
-       line 276, "pan.___", state 1399, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1412, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1421, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1437, "(1)"
-       line 253, "pan.___", state 1445, "(1)"
-       line 257, "pan.___", state 1457, "(1)"
-       line 261, "pan.___", state 1465, "(1)"
-       line 272, "pan.___", state 1496, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1505, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1518, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1527, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1543, "(1)"
-       line 253, "pan.___", state 1551, "(1)"
-       line 257, "pan.___", state 1563, "(1)"
-       line 261, "pan.___", state 1571, "(1)"
-       line 1237, "pan.___", state 1587, "-end-"
-       (103 of 1587 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 2.7e+03 seconds
-pan: rate 25814.341 states/second
-pan: avg transition delay 2.7843e-06 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.spin.input b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 80445f6..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_RMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.define b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.log b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 319fbe9..0000000
+++ /dev/null
@@ -1,530 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    9172 States=    1e+06 Transitions= 6.87e+06 Memory=   550.432        t=     17 R=   6e+04
-Depth=    9172 States=    2e+06 Transitions= 1.47e+07 Memory=   634.318        t=   37.6 R=   5e+04
-Depth=    9172 States=    3e+06 Transitions= 2.46e+07 Memory=   718.303        t=   64.2 R=   5e+04
-pan: resizing hashtable to -w22..  done
-Depth=    9172 States=    4e+06 Transitions= 3.19e+07 Memory=   833.311        t=   83.2 R=   5e+04
-Depth=    9172 States=    5e+06 Transitions= 3.95e+07 Memory=   917.295        t=    103 R=   5e+04
-Depth=    9172 States=    6e+06 Transitions= 5.71e+07 Memory=  1001.279        t=    152 R=   4e+04
-Depth=    9172 States=    7e+06 Transitions= 6.81e+07 Memory=  1085.264        t=    182 R=   4e+04
-Depth=    9172 States=    8e+06 Transitions= 8.22e+07 Memory=  1169.151        t=    221 R=   4e+04
-Depth=    9172 States=    9e+06 Transitions= 9.54e+07 Memory=  1253.135        t=    258 R=   3e+04
-pan: resizing hashtable to -w24..  done
-Depth=    9172 States=    1e+07 Transitions= 1.08e+08 Memory=  1461.115        t=    295 R=   3e+04
-Depth=    9172 States=  1.1e+07 Transitions=  1.2e+08 Memory=  1545.100        t=    327 R=   3e+04
-Depth=    9172 States=  1.2e+07 Transitions= 1.27e+08 Memory=  1629.084        t=    344 R=   3e+04
-Depth=    9172 States=  1.3e+07 Transitions= 1.35e+08 Memory=  1713.068        t=    365 R=   4e+04
-Depth=    9172 States=  1.4e+07 Transitions= 1.46e+08 Memory=  1797.053        t=    394 R=   4e+04
-Depth=    9172 States=  1.5e+07 Transitions= 1.53e+08 Memory=  1881.037        t=    413 R=   4e+04
-Depth=    9172 States=  1.6e+07 Transitions=  1.6e+08 Memory=  1964.924        t=    432 R=   4e+04
-Depth=    9172 States=  1.7e+07 Transitions= 1.76e+08 Memory=  2048.908        t=    475 R=   4e+04
-Depth=    9172 States=  1.8e+07 Transitions=  1.9e+08 Memory=  2132.893        t=    515 R=   3e+04
-Depth=    9172 States=  1.9e+07 Transitions= 2.02e+08 Memory=  2216.877        t=    548 R=   3e+04
-Depth=    9172 States=    2e+07 Transitions= 2.15e+08 Memory=  2300.861        t=    585 R=   3e+04
-Depth=    9172 States=  2.1e+07 Transitions= 2.25e+08 Memory=  2384.846        t=    610 R=   3e+04
-Depth=    9172 States=  2.2e+07 Transitions= 2.38e+08 Memory=  2468.830        t=    646 R=   3e+04
-Depth=    9172 States=  2.3e+07 Transitions= 2.67e+08 Memory=  2552.717        t=    732 R=   3e+04
-Depth=    9172 States=  2.4e+07 Transitions= 2.86e+08 Memory=  2636.701        t=    785 R=   3e+04
-Depth=    9172 States=  2.5e+07 Transitions= 3.03e+08 Memory=  2720.686        t=    832 R=   3e+04
-Depth=    9172 States=  2.6e+07 Transitions= 3.12e+08 Memory=  2804.670        t=    857 R=   3e+04
-Depth=    9172 States=  2.7e+07 Transitions= 3.27e+08 Memory=  2888.654        t=    899 R=   3e+04
-Depth=    9172 States=  2.8e+07 Transitions= 3.57e+08 Memory=  2972.639        t=    987 R=   3e+04
-Depth=    9172 States=  2.9e+07 Transitions= 3.73e+08 Memory=  3056.526        t= 1.03e+03 R=   3e+04
-Depth=    9172 States=    3e+07 Transitions= 3.86e+08 Memory=  3140.510        t= 1.07e+03 R=   3e+04
-Depth=    9172 States=  3.1e+07 Transitions= 4.03e+08 Memory=  3224.494        t= 1.12e+03 R=   3e+04
-Depth=    9172 States=  3.2e+07 Transitions= 4.22e+08 Memory=  3308.479        t= 1.17e+03 R=   3e+04
-Depth=    9172 States=  3.3e+07 Transitions= 4.39e+08 Memory=  3392.463        t= 1.22e+03 R=   3e+04
-Depth=    9172 States=  3.4e+07 Transitions= 4.56e+08 Memory=  3476.447        t= 1.27e+03 R=   3e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9234 States=  3.5e+07 Transitions= 4.73e+08 Memory=  4056.416        t= 1.33e+03 R=   3e+04
-Depth=    9234 States=  3.6e+07 Transitions= 4.85e+08 Memory=  4140.401        t= 1.36e+03 R=   3e+04
-Depth=    9273 States=  3.7e+07 Transitions=    5e+08 Memory=  4224.385        t= 1.4e+03 R=   3e+04
-Depth=    9273 States=  3.8e+07 Transitions= 5.14e+08 Memory=  4308.369        t= 1.44e+03 R=   3e+04
-Depth=    9273 States=  3.9e+07 Transitions= 5.26e+08 Memory=  4392.354        t= 1.47e+03 R=   3e+04
-Depth=    9273 States=    4e+07 Transitions= 5.39e+08 Memory=  4476.338        t= 1.51e+03 R=   3e+04
-Depth=    9273 States=  4.1e+07 Transitions=  5.5e+08 Memory=  4560.322        t= 1.54e+03 R=   3e+04
-Depth=    9273 States=  4.2e+07 Transitions= 5.64e+08 Memory=  4644.209        t= 1.58e+03 R=   3e+04
-Depth=    9273 States=  4.3e+07 Transitions= 5.75e+08 Memory=  4728.193        t= 1.61e+03 R=   3e+04
-Depth=    9273 States=  4.4e+07 Transitions= 5.86e+08 Memory=  4812.178        t= 1.64e+03 R=   3e+04
-Depth=    9273 States=  4.5e+07 Transitions= 6.01e+08 Memory=  4896.162        t= 1.68e+03 R=   3e+04
-Depth=    9273 States=  4.6e+07 Transitions= 6.16e+08 Memory=  4980.147        t= 1.72e+03 R=   3e+04
-Depth=    9273 States=  4.7e+07 Transitions= 6.29e+08 Memory=  5064.131        t= 1.76e+03 R=   3e+04
-Depth=    9273 States=  4.8e+07 Transitions=  6.4e+08 Memory=  5148.018        t= 1.79e+03 R=   3e+04
-Depth=    9273 States=  4.9e+07 Transitions= 6.51e+08 Memory=  5232.002        t= 1.82e+03 R=   3e+04
-Depth=    9273 States=    5e+07 Transitions= 6.66e+08 Memory=  5315.986        t= 1.86e+03 R=   3e+04
-Depth=    9273 States=  5.1e+07 Transitions=  6.8e+08 Memory=  5399.971        t= 1.9e+03 R=   3e+04
-Depth=    9273 States=  5.2e+07 Transitions=  6.9e+08 Memory=  5483.955        t= 1.93e+03 R=   3e+04
-Depth=    9273 States=  5.3e+07 Transitions= 7.01e+08 Memory=  5567.940        t= 1.96e+03 R=   3e+04
-Depth=    9273 States=  5.4e+07 Transitions= 7.14e+08 Memory=  5651.826        t= 1.99e+03 R=   3e+04
-Depth=    9273 States=  5.5e+07 Transitions= 7.26e+08 Memory=  5735.811        t= 2.02e+03 R=   3e+04
-Depth=    9273 States=  5.6e+07 Transitions= 7.44e+08 Memory=  5819.795        t= 2.07e+03 R=   3e+04
-Depth=    9273 States=  5.7e+07 Transitions= 7.57e+08 Memory=  5903.779        t= 2.11e+03 R=   3e+04
-Depth=    9273 States=  5.8e+07 Transitions= 7.72e+08 Memory=  5987.764        t= 2.15e+03 R=   3e+04
-Depth=    9273 States=  5.9e+07 Transitions= 7.87e+08 Memory=  6071.748        t= 2.19e+03 R=   3e+04
-Depth=    9273 States=    6e+07 Transitions= 8.03e+08 Memory=  6155.733        t= 2.24e+03 R=   3e+04
-Depth=    9273 States=  6.1e+07 Transitions= 8.18e+08 Memory=  6239.619        t= 2.28e+03 R=   3e+04
-Depth=    9273 States=  6.2e+07 Transitions= 8.31e+08 Memory=  6323.604        t= 2.31e+03 R=   3e+04
-Depth=    9273 States=  6.3e+07 Transitions= 8.38e+08 Memory=  6407.588        t= 2.33e+03 R=   3e+04
-Depth=    9273 States=  6.4e+07 Transitions= 8.46e+08 Memory=  6491.572        t= 2.35e+03 R=   3e+04
-Depth=    9273 States=  6.5e+07 Transitions= 8.56e+08 Memory=  6575.557        t= 2.38e+03 R=   3e+04
-Depth=    9273 States=  6.6e+07 Transitions= 8.63e+08 Memory=  6659.541        t= 2.4e+03 R=   3e+04
-Depth=    9273 States=  6.7e+07 Transitions=  8.7e+08 Memory=  6743.428        t= 2.42e+03 R=   3e+04
-Depth=    9273 States=  6.8e+07 Transitions= 8.88e+08 Memory=  6827.412        t= 2.47e+03 R=   3e+04
-Depth=    9273 States=  6.9e+07 Transitions=    9e+08 Memory=  6911.397        t= 2.5e+03 R=   3e+04
-pan: claim violated! (at depth 1431)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 9273, errors: 1
- 69874699 states, stored
-8.4222224e+08 states, matched
-9.1209694e+08 transitions (= stored+matched)
-1.3919028e+10 atomic steps
-hash conflicts: 5.0632776e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 7729.974      equivalent memory usage for states (stored*(State-vector + overhead))
- 6018.458      actual memory usage for states (compression: 77.86%)
-               state-vector as stored = 62 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
-    3.388      memory lost to fragmentation
- 6984.834      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 272, "pan.___", state 30, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 52, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 61, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 77, "(1)"
-       line 253, "pan.___", state 85, "(1)"
-       line 257, "pan.___", state 97, "(1)"
-       line 261, "pan.___", state 105, "(1)"
-       line 411, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 163, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 177, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 195, "(1)"
-       line 257, "pan.___", state 215, "(1)"
-       line 261, "pan.___", state 223, "(1)"
-       line 691, "pan.___", state 242, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 249, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 281, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 295, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 313, "(1)"
-       line 257, "pan.___", state 333, "(1)"
-       line 261, "pan.___", state 341, "(1)"
-       line 411, "pan.___", state 360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 392, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 406, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 424, "(1)"
-       line 257, "pan.___", state 444, "(1)"
-       line 261, "pan.___", state 452, "(1)"
-       line 411, "pan.___", state 473, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 475, "(1)"
-       line 411, "pan.___", state 476, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 476, "else"
-       line 411, "pan.___", state 479, "(1)"
-       line 415, "pan.___", state 487, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 489, "(1)"
-       line 415, "pan.___", state 490, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 490, "else"
-       line 415, "pan.___", state 493, "(1)"
-       line 415, "pan.___", state 494, "(1)"
-       line 415, "pan.___", state 494, "(1)"
-       line 413, "pan.___", state 499, "((i<1))"
-       line 413, "pan.___", state 499, "((i>=1))"
-       line 420, "pan.___", state 505, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 507, "(1)"
-       line 420, "pan.___", state 508, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 508, "else"
-       line 420, "pan.___", state 511, "(1)"
-       line 420, "pan.___", state 512, "(1)"
-       line 420, "pan.___", state 512, "(1)"
-       line 424, "pan.___", state 519, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 521, "(1)"
-       line 424, "pan.___", state 522, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 522, "else"
-       line 424, "pan.___", state 525, "(1)"
-       line 424, "pan.___", state 526, "(1)"
-       line 424, "pan.___", state 526, "(1)"
-       line 422, "pan.___", state 531, "((i<2))"
-       line 422, "pan.___", state 531, "((i>=2))"
-       line 249, "pan.___", state 537, "(1)"
-       line 253, "pan.___", state 545, "(1)"
-       line 253, "pan.___", state 546, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 546, "else"
-       line 251, "pan.___", state 551, "((i<1))"
-       line 251, "pan.___", state 551, "((i>=1))"
-       line 257, "pan.___", state 557, "(1)"
-       line 257, "pan.___", state 558, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 558, "else"
-       line 261, "pan.___", state 565, "(1)"
-       line 261, "pan.___", state 566, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 566, "else"
-       line 259, "pan.___", state 571, "((i<2))"
-       line 259, "pan.___", state 571, "((i>=2))"
-       line 266, "pan.___", state 575, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 575, "else"
-       line 431, "pan.___", state 577, "(1)"
-       line 431, "pan.___", state 577, "(1)"
-       line 691, "pan.___", state 580, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 691, "pan.___", state 581, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 691, "pan.___", state 582, "(1)"
-       line 411, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 621, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 635, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 653, "(1)"
-       line 257, "pan.___", state 673, "(1)"
-       line 261, "pan.___", state 681, "(1)"
-       line 411, "pan.___", state 707, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 739, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 753, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 771, "(1)"
-       line 257, "pan.___", state 791, "(1)"
-       line 261, "pan.___", state 799, "(1)"
-       line 411, "pan.___", state 818, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 820, "(1)"
-       line 411, "pan.___", state 821, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 821, "else"
-       line 411, "pan.___", state 824, "(1)"
-       line 415, "pan.___", state 832, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 834, "(1)"
-       line 415, "pan.___", state 835, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 835, "else"
-       line 415, "pan.___", state 838, "(1)"
-       line 415, "pan.___", state 839, "(1)"
-       line 415, "pan.___", state 839, "(1)"
-       line 413, "pan.___", state 844, "((i<1))"
-       line 413, "pan.___", state 844, "((i>=1))"
-       line 420, "pan.___", state 850, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 852, "(1)"
-       line 420, "pan.___", state 853, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 853, "else"
-       line 420, "pan.___", state 856, "(1)"
-       line 420, "pan.___", state 857, "(1)"
-       line 420, "pan.___", state 857, "(1)"
-       line 424, "pan.___", state 864, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 866, "(1)"
-       line 424, "pan.___", state 867, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 867, "else"
-       line 424, "pan.___", state 870, "(1)"
-       line 424, "pan.___", state 871, "(1)"
-       line 424, "pan.___", state 871, "(1)"
-       line 422, "pan.___", state 876, "((i<2))"
-       line 422, "pan.___", state 876, "((i>=2))"
-       line 249, "pan.___", state 882, "(1)"
-       line 253, "pan.___", state 890, "(1)"
-       line 253, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 891, "else"
-       line 251, "pan.___", state 896, "((i<1))"
-       line 251, "pan.___", state 896, "((i>=1))"
-       line 257, "pan.___", state 902, "(1)"
-       line 257, "pan.___", state 903, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 903, "else"
-       line 261, "pan.___", state 910, "(1)"
-       line 261, "pan.___", state 911, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 911, "else"
-       line 259, "pan.___", state 916, "((i<2))"
-       line 259, "pan.___", state 916, "((i>=2))"
-       line 266, "pan.___", state 920, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 920, "else"
-       line 431, "pan.___", state 922, "(1)"
-       line 431, "pan.___", state 922, "(1)"
-       line 699, "pan.___", state 926, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 963, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 977, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 995, "(1)"
-       line 257, "pan.___", state 1015, "(1)"
-       line 261, "pan.___", state 1023, "(1)"
-       line 411, "pan.___", state 1045, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1077, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1091, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1109, "(1)"
-       line 257, "pan.___", state 1129, "(1)"
-       line 261, "pan.___", state 1137, "(1)"
-       line 411, "pan.___", state 1160, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1192, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1206, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1224, "(1)"
-       line 257, "pan.___", state 1244, "(1)"
-       line 261, "pan.___", state 1252, "(1)"
-       line 411, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1303, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1317, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1335, "(1)"
-       line 257, "pan.___", state 1355, "(1)"
-       line 261, "pan.___", state 1363, "(1)"
-       line 411, "pan.___", state 1387, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1419, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1433, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1451, "(1)"
-       line 257, "pan.___", state 1471, "(1)"
-       line 261, "pan.___", state 1479, "(1)"
-       line 411, "pan.___", state 1498, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1530, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1544, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1562, "(1)"
-       line 257, "pan.___", state 1582, "(1)"
-       line 261, "pan.___", state 1590, "(1)"
-       line 411, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1644, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1658, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1676, "(1)"
-       line 257, "pan.___", state 1696, "(1)"
-       line 261, "pan.___", state 1704, "(1)"
-       line 738, "pan.___", state 1723, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1730, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1762, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1776, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1794, "(1)"
-       line 257, "pan.___", state 1814, "(1)"
-       line 261, "pan.___", state 1822, "(1)"
-       line 411, "pan.___", state 1841, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1873, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1887, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1905, "(1)"
-       line 257, "pan.___", state 1925, "(1)"
-       line 261, "pan.___", state 1933, "(1)"
-       line 411, "pan.___", state 1954, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 1956, "(1)"
-       line 411, "pan.___", state 1957, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 1957, "else"
-       line 411, "pan.___", state 1960, "(1)"
-       line 415, "pan.___", state 1968, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1970, "(1)"
-       line 415, "pan.___", state 1971, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 1971, "else"
-       line 415, "pan.___", state 1974, "(1)"
-       line 415, "pan.___", state 1975, "(1)"
-       line 415, "pan.___", state 1975, "(1)"
-       line 413, "pan.___", state 1980, "((i<1))"
-       line 413, "pan.___", state 1980, "((i>=1))"
-       line 420, "pan.___", state 1986, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1988, "(1)"
-       line 420, "pan.___", state 1989, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 1989, "else"
-       line 420, "pan.___", state 1992, "(1)"
-       line 420, "pan.___", state 1993, "(1)"
-       line 420, "pan.___", state 1993, "(1)"
-       line 424, "pan.___", state 2000, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2002, "(1)"
-       line 424, "pan.___", state 2003, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2003, "else"
-       line 424, "pan.___", state 2006, "(1)"
-       line 424, "pan.___", state 2007, "(1)"
-       line 424, "pan.___", state 2007, "(1)"
-       line 422, "pan.___", state 2012, "((i<2))"
-       line 422, "pan.___", state 2012, "((i>=2))"
-       line 249, "pan.___", state 2018, "(1)"
-       line 253, "pan.___", state 2026, "(1)"
-       line 253, "pan.___", state 2027, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2027, "else"
-       line 251, "pan.___", state 2032, "((i<1))"
-       line 251, "pan.___", state 2032, "((i>=1))"
-       line 257, "pan.___", state 2038, "(1)"
-       line 257, "pan.___", state 2039, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2039, "else"
-       line 261, "pan.___", state 2046, "(1)"
-       line 261, "pan.___", state 2047, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2047, "else"
-       line 259, "pan.___", state 2052, "((i<2))"
-       line 259, "pan.___", state 2052, "((i>=2))"
-       line 266, "pan.___", state 2056, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2056, "else"
-       line 431, "pan.___", state 2058, "(1)"
-       line 431, "pan.___", state 2058, "(1)"
-       line 738, "pan.___", state 2061, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 738, "pan.___", state 2062, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 738, "pan.___", state 2063, "(1)"
-       line 411, "pan.___", state 2070, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2102, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2116, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2134, "(1)"
-       line 257, "pan.___", state 2154, "(1)"
-       line 261, "pan.___", state 2162, "(1)"
-       line 411, "pan.___", state 2187, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2219, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2233, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2251, "(1)"
-       line 257, "pan.___", state 2271, "(1)"
-       line 261, "pan.___", state 2279, "(1)"
-       line 411, "pan.___", state 2298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2362, "(1)"
-       line 257, "pan.___", state 2382, "(1)"
-       line 261, "pan.___", state 2390, "(1)"
-       line 249, "pan.___", state 2421, "(1)"
-       line 257, "pan.___", state 2441, "(1)"
-       line 261, "pan.___", state 2449, "(1)"
-       line 249, "pan.___", state 2464, "(1)"
-       line 257, "pan.___", state 2484, "(1)"
-       line 261, "pan.___", state 2492, "(1)"
-       line 898, "pan.___", state 2509, "-end-"
-       (221 of 2509 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 19, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 33, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 83, "(1)"
-       line 253, "pan.___", state 91, "(1)"
-       line 272, "pan.___", state 132, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 134, "(1)"
-       line 276, "pan.___", state 141, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 143, "(1)"
-       line 276, "pan.___", state 144, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 144, "else"
-       line 274, "pan.___", state 149, "((i<1))"
-       line 274, "pan.___", state 149, "((i>=1))"
-       line 280, "pan.___", state 154, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 156, "(1)"
-       line 280, "pan.___", state 157, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 157, "else"
-       line 284, "pan.___", state 163, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 165, "(1)"
-       line 284, "pan.___", state 166, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 166, "else"
-       line 289, "pan.___", state 175, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 175, "else"
-       line 411, "pan.___", state 194, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 208, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 226, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 240, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 258, "(1)"
-       line 253, "pan.___", state 266, "(1)"
-       line 257, "pan.___", state 278, "(1)"
-       line 261, "pan.___", state 286, "(1)"
-       line 415, "pan.___", state 321, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 339, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 353, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 379, "(1)"
-       line 257, "pan.___", state 391, "(1)"
-       line 261, "pan.___", state 399, "(1)"
-       line 415, "pan.___", state 442, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 460, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 474, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 500, "(1)"
-       line 257, "pan.___", state 512, "(1)"
-       line 261, "pan.___", state 520, "(1)"
-       line 415, "pan.___", state 553, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 571, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 585, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 611, "(1)"
-       line 257, "pan.___", state 623, "(1)"
-       line 261, "pan.___", state 631, "(1)"
-       line 415, "pan.___", state 666, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 684, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 698, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 724, "(1)"
-       line 257, "pan.___", state 736, "(1)"
-       line 261, "pan.___", state 744, "(1)"
-       line 272, "pan.___", state 797, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 806, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 844, "(1)"
-       line 253, "pan.___", state 852, "(1)"
-       line 257, "pan.___", state 864, "(1)"
-       line 261, "pan.___", state 872, "(1)"
-       line 272, "pan.___", state 903, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 912, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 925, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 934, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 950, "(1)"
-       line 253, "pan.___", state 958, "(1)"
-       line 257, "pan.___", state 970, "(1)"
-       line 261, "pan.___", state 978, "(1)"
-       line 276, "pan.___", state 1004, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1017, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1026, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1042, "(1)"
-       line 253, "pan.___", state 1050, "(1)"
-       line 257, "pan.___", state 1062, "(1)"
-       line 261, "pan.___", state 1070, "(1)"
-       line 272, "pan.___", state 1101, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1110, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1123, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1132, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1148, "(1)"
-       line 253, "pan.___", state 1156, "(1)"
-       line 257, "pan.___", state 1168, "(1)"
-       line 261, "pan.___", state 1176, "(1)"
-       line 276, "pan.___", state 1202, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1215, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1224, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1240, "(1)"
-       line 253, "pan.___", state 1248, "(1)"
-       line 257, "pan.___", state 1260, "(1)"
-       line 261, "pan.___", state 1268, "(1)"
-       line 272, "pan.___", state 1299, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1308, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1321, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1330, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1346, "(1)"
-       line 253, "pan.___", state 1354, "(1)"
-       line 257, "pan.___", state 1366, "(1)"
-       line 261, "pan.___", state 1374, "(1)"
-       line 276, "pan.___", state 1400, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1413, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1422, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1438, "(1)"
-       line 253, "pan.___", state 1446, "(1)"
-       line 257, "pan.___", state 1458, "(1)"
-       line 261, "pan.___", state 1466, "(1)"
-       line 272, "pan.___", state 1497, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1506, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1519, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1528, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1544, "(1)"
-       line 253, "pan.___", state 1552, "(1)"
-       line 257, "pan.___", state 1564, "(1)"
-       line 261, "pan.___", state 1572, "(1)"
-       line 1237, "pan.___", state 1588, "-end-"
-       (109 of 1588 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 2.53e+03 seconds
-pan: rate 27617.257 states/second
-pan: avg transition delay 2.7739e-06 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.spin.input b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index 511c963..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_WMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index 62969b9..0000000
+++ /dev/null
@@ -1,1434 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4177
-2:3:4097
-3:3:4100
-4:3:4100
-5:3:4103
-6:3:4111
-7:3:4111
-8:3:4114
-9:3:4120
-10:3:4124
-11:3:4124
-12:3:4127
-13:3:4137
-14:3:4145
-15:3:4145
-16:3:4148
-17:3:4154
-18:3:4158
-19:3:4158
-20:3:4161
-21:3:4167
-22:3:4171
-23:3:4172
-24:0:4177
-25:3:4174
-26:0:4177
-27:2:2511
-28:0:4177
-29:2:2517
-30:0:4177
-31:2:2518
-32:0:4177
-33:2:2520
-34:0:4177
-35:2:2521
-36:0:4177
-37:2:2522
-38:0:4177
-39:2:2523
-40:2:2524
-41:2:2528
-42:2:2529
-43:2:2537
-44:2:2538
-45:2:2542
-46:2:2543
-47:2:2551
-48:2:2556
-49:2:2560
-50:2:2561
-51:2:2569
-52:2:2570
-53:2:2574
-54:2:2575
-55:2:2569
-56:2:2570
-57:2:2574
-58:2:2575
-59:2:2583
-60:2:2588
-61:2:2595
-62:2:2596
-63:2:2603
-64:2:2608
-65:2:2615
-66:2:2616
-67:2:2615
-68:2:2616
-69:2:2623
-70:2:2633
-71:0:4177
-72:2:2522
-73:0:4177
-74:2:2685
-75:2:2686
-76:2:2687
-77:0:4177
-78:2:2522
-79:0:4177
-80:2:2692
-81:0:4177
-82:2:3306
-83:2:3307
-84:2:3311
-85:2:3315
-86:2:3316
-87:2:3320
-88:2:3325
-89:2:3333
-90:2:3337
-91:2:3338
-92:2:3333
-93:2:3334
-94:2:3342
-95:2:3349
-96:2:3356
-97:2:3357
-98:2:3364
-99:2:3369
-100:2:3376
-101:2:3377
-102:2:3376
-103:2:3377
-104:2:3384
-105:2:3388
-106:0:4177
-107:2:3393
-108:0:4177
-109:2:3394
-110:0:4177
-111:2:3395
-112:0:4177
-113:2:3396
-114:0:4177
-115:1:2
-116:0:4177
-117:2:3397
-118:0:4177
-119:1:8
-120:0:4177
-121:1:9
-122:0:4177
-123:2:3396
-124:0:4177
-125:1:10
-126:0:4177
-127:2:3397
-128:0:4177
-129:1:11
-130:0:4177
-131:2:3396
-132:0:4177
-133:1:12
-134:0:4177
-135:2:3397
-136:0:4177
-137:1:13
-138:0:4177
-139:2:3396
-140:0:4177
-141:1:14
-142:0:4177
-143:2:3397
-144:0:4177
-145:1:15
-146:0:4177
-147:1:16
-148:0:4177
-149:2:3396
-150:0:4177
-151:1:17
-152:0:4177
-153:2:3397
-154:0:4177
-155:1:26
-156:0:4177
-157:2:3396
-158:0:4177
-159:1:30
-160:1:31
-161:1:35
-162:1:39
-163:1:40
-164:1:44
-165:1:52
-166:1:53
-167:1:57
-168:1:61
-169:1:62
-170:1:57
-171:1:61
-172:1:62
-173:1:66
-174:1:73
-175:1:80
-176:1:81
-177:1:88
-178:1:93
-179:1:100
-180:1:101
-181:1:100
-182:1:101
-183:1:108
-184:1:112
-185:0:4177
-186:2:3397
-187:0:4177
-188:1:117
-189:0:4177
-190:2:3398
-191:0:4177
-192:2:3403
-193:0:4177
-194:2:3404
-195:0:4177
-196:2:3412
-197:2:3413
-198:2:3417
-199:2:3421
-200:2:3422
-201:2:3426
-202:2:3434
-203:2:3435
-204:2:3439
-205:2:3443
-206:2:3444
-207:2:3439
-208:2:3443
-209:2:3444
-210:2:3448
-211:2:3455
-212:2:3462
-213:2:3463
-214:2:3470
-215:2:3475
-216:2:3482
-217:2:3483
-218:2:3482
-219:2:3483
-220:2:3490
-221:2:3494
-222:0:4177
-223:2:2694
-224:2:3287
-225:0:4177
-226:2:2522
-227:0:4177
-228:2:2695
-229:0:4177
-230:2:2522
-231:0:4177
-232:2:2698
-233:2:2699
-234:2:2703
-235:2:2704
-236:2:2712
-237:2:2713
-238:2:2717
-239:2:2718
-240:2:2726
-241:2:2731
-242:2:2735
-243:2:2736
-244:2:2744
-245:2:2745
-246:2:2749
-247:2:2750
-248:2:2744
-249:2:2745
-250:2:2749
-251:2:2750
-252:2:2758
-253:2:2763
-254:2:2770
-255:2:2771
-256:2:2778
-257:2:2783
-258:2:2790
-259:2:2791
-260:2:2790
-261:2:2791
-262:2:2798
-263:2:2807
-264:0:4177
-265:2:2522
-266:0:4177
-267:2:2811
-268:2:2812
-269:2:2813
-270:2:2825
-271:2:2826
-272:2:2830
-273:2:2831
-274:2:2839
-275:2:2844
-276:2:2848
-277:2:2849
-278:2:2857
-279:2:2858
-280:2:2862
-281:2:2863
-282:2:2857
-283:2:2858
-284:2:2862
-285:2:2863
-286:2:2871
-287:2:2876
-288:2:2883
-289:2:2884
-290:2:2891
-291:2:2896
-292:2:2903
-293:2:2904
-294:2:2903
-295:2:2904
-296:2:2911
-297:2:2924
-298:2:2925
-299:0:4177
-300:2:2522
-301:0:4177
-302:2:2932
-303:2:2933
-304:2:2937
-305:2:2938
-306:2:2946
-307:2:2947
-308:2:2951
-309:2:2952
-310:2:2960
-311:2:2965
-312:2:2969
-313:2:2970
-314:2:2978
-315:2:2979
-316:2:2983
-317:2:2984
-318:2:2978
-319:2:2979
-320:2:2983
-321:2:2984
-322:2:2992
-323:2:2997
-324:2:3004
-325:2:3005
-326:2:3012
-327:2:3017
-328:2:3024
-329:2:3025
-330:2:3024
-331:2:3025
-332:2:3032
-333:0:4177
-334:2:2522
-335:0:4177
-336:2:3043
-337:2:3044
-338:2:3048
-339:2:3049
-340:2:3057
-341:2:3058
-342:2:3062
-343:2:3063
-344:2:3071
-345:2:3076
-346:2:3080
-347:2:3081
-348:2:3089
-349:2:3090
-350:2:3094
-351:2:3095
-352:2:3089
-353:2:3090
-354:2:3094
-355:2:3095
-356:2:3103
-357:2:3108
-358:2:3115
-359:2:3116
-360:2:3123
-361:2:3128
-362:2:3135
-363:2:3136
-364:2:3135
-365:2:3136
-366:2:3143
-367:2:3152
-368:0:4177
-369:2:2522
-370:0:4177
-371:2:3156
-372:2:3157
-373:2:3158
-374:2:3170
-375:2:3171
-376:2:3175
-377:2:3176
-378:2:3184
-379:2:3189
-380:2:3193
-381:2:3194
-382:2:3202
-383:2:3203
-384:2:3207
-385:2:3208
-386:2:3202
-387:2:3203
-388:2:3207
-389:2:3208
-390:2:3216
-391:2:3221
-392:2:3228
-393:2:3229
-394:2:3236
-395:2:3241
-396:2:3248
-397:2:3249
-398:2:3248
-399:2:3249
-400:2:3256
-401:2:3268
-402:2:3269
-403:0:4177
-404:2:2522
-405:0:4177
-406:2:3275
-407:0:4177
-408:2:3900
-409:2:3901
-410:2:3905
-411:2:3909
-412:2:3910
-413:2:3914
-414:2:3922
-415:2:3923
-416:2:3927
-417:2:3931
-418:2:3932
-419:2:3927
-420:2:3931
-421:2:3932
-422:2:3936
-423:2:3943
-424:2:3950
-425:2:3951
-426:2:3958
-427:2:3963
-428:2:3970
-429:2:3971
-430:2:3970
-431:2:3971
-432:2:3978
-433:2:3982
-434:0:4177
-435:2:3987
-436:0:4177
-437:2:3988
-438:0:4177
-439:2:3989
-440:0:4177
-441:2:3990
-442:0:4177
-443:1:26
-444:0:4177
-445:2:3991
-446:0:4177
-447:1:30
-448:1:31
-449:1:35
-450:1:39
-451:1:40
-452:1:44
-453:1:52
-454:1:53
-455:1:57
-456:1:61
-457:1:62
-458:1:57
-459:1:61
-460:1:62
-461:1:66
-462:1:73
-463:1:80
-464:1:81
-465:1:88
-466:1:93
-467:1:100
-468:1:101
-469:1:100
-470:1:101
-471:1:108
-472:1:112
-473:0:4177
-474:2:3990
-475:0:4177
-476:1:117
-477:0:4177
-478:2:3991
-479:0:4177
-480:2:3992
-481:0:4177
-482:2:3997
-483:0:4177
-484:2:3998
-485:0:4177
-486:2:4006
-487:2:4007
-488:2:4011
-489:2:4015
-490:2:4016
-491:2:4020
-492:2:4028
-493:2:4029
-494:2:4033
-495:2:4037
-496:2:4038
-497:2:4033
-498:2:4037
-499:2:4038
-500:2:4042
-501:2:4049
-502:2:4056
-503:2:4057
-504:2:4064
-505:2:4069
-506:2:4076
-507:2:4077
-508:2:4076
-509:2:4077
-510:2:4084
-511:2:4088
-512:0:4177
-513:2:3277
-514:2:3287
-515:0:4177
-516:2:2522
-517:0:4177
-518:2:3278
-519:2:3279
-520:0:4177
-521:2:2522
-522:0:4177
-523:2:3283
-524:0:4177
-525:2:3291
-526:0:4177
-527:2:2518
-528:0:4177
-529:2:2520
-530:0:4177
-531:2:2521
-532:0:4177
-533:2:2522
-534:0:4177
-535:2:2685
-536:2:2686
-537:2:2687
-538:0:4177
-539:2:2522
-540:0:4177
-541:2:2523
-542:2:2524
-543:2:2528
-544:2:2529
-545:2:2537
-546:2:2538
-547:2:2542
-548:2:2543
-549:2:2551
-550:2:2556
-551:2:2557
-552:2:2569
-553:2:2570
-554:2:2571
-555:2:2569
-556:2:2570
-557:2:2574
-558:2:2575
-559:2:2583
-560:2:2588
-561:2:2595
-562:2:2596
-563:2:2603
-564:2:2608
-565:2:2615
-566:2:2616
-567:2:2615
-568:2:2616
-569:2:2623
-570:2:2633
-571:0:4177
-572:2:2522
-573:0:4177
-574:2:2692
-575:0:4177
-576:2:3306
-577:2:3307
-578:2:3311
-579:2:3315
-580:2:3316
-581:2:3320
-582:2:3328
-583:2:3329
-584:2:3333
-585:2:3334
-586:2:3333
-587:2:3337
-588:2:3338
-589:2:3342
-590:2:3349
-591:2:3356
-592:2:3357
-593:2:3364
-594:2:3369
-595:2:3376
-596:2:3377
-597:2:3376
-598:2:3377
-599:2:3384
-600:2:3388
-601:0:4177
-602:2:3393
-603:0:4177
-604:2:3394
-605:0:4177
-606:2:3395
-607:0:4177
-608:2:3396
-609:0:4177
-610:1:26
-611:0:4177
-612:2:3397
-613:0:4177
-614:1:30
-615:1:31
-616:1:35
-617:1:39
-618:1:40
-619:1:44
-620:1:52
-621:1:53
-622:1:57
-623:1:61
-624:1:62
-625:1:57
-626:1:61
-627:1:62
-628:1:66
-629:1:73
-630:1:80
-631:1:81
-632:1:88
-633:1:93
-634:1:100
-635:1:101
-636:1:100
-637:1:101
-638:1:108
-639:1:112
-640:0:4177
-641:2:3396
-642:0:4177
-643:1:117
-644:0:4177
-645:2:3397
-646:0:4177
-647:2:3398
-648:0:4177
-649:2:3403
-650:0:4177
-651:2:3404
-652:0:4177
-653:2:3412
-654:2:3413
-655:2:3417
-656:2:3421
-657:2:3422
-658:2:3426
-659:2:3434
-660:2:3435
-661:2:3439
-662:2:3443
-663:2:3444
-664:2:3439
-665:2:3443
-666:2:3444
-667:2:3448
-668:2:3455
-669:2:3462
-670:2:3463
-671:2:3470
-672:2:3475
-673:2:3482
-674:2:3483
-675:2:3482
-676:2:3483
-677:2:3490
-678:2:3494
-679:0:4177
-680:2:2694
-681:2:3287
-682:0:4177
-683:2:2522
-684:0:4177
-685:2:2695
-686:0:4177
-687:2:2522
-688:0:4177
-689:2:2698
-690:2:2699
-691:2:2703
-692:2:2704
-693:2:2712
-694:2:2713
-695:2:2717
-696:2:2718
-697:2:2726
-698:2:2731
-699:2:2735
-700:2:2736
-701:2:2744
-702:2:2745
-703:2:2749
-704:2:2750
-705:2:2744
-706:2:2745
-707:2:2749
-708:2:2750
-709:2:2758
-710:2:2763
-711:2:2770
-712:2:2771
-713:2:2778
-714:2:2783
-715:2:2790
-716:2:2791
-717:2:2790
-718:2:2791
-719:2:2798
-720:2:2807
-721:0:4177
-722:2:2522
-723:0:4177
-724:2:2811
-725:2:2812
-726:2:2813
-727:2:2825
-728:2:2826
-729:2:2830
-730:2:2831
-731:2:2839
-732:2:2844
-733:2:2848
-734:2:2849
-735:2:2857
-736:2:2858
-737:2:2862
-738:2:2863
-739:2:2857
-740:2:2858
-741:2:2862
-742:2:2863
-743:2:2871
-744:2:2876
-745:2:2883
-746:2:2884
-747:2:2891
-748:2:2896
-749:2:2903
-750:2:2904
-751:2:2903
-752:2:2904
-753:2:2911
-754:2:2924
-755:2:2925
-756:0:4177
-757:2:2522
-758:0:4177
-759:2:2932
-760:2:2933
-761:2:2937
-762:2:2938
-763:2:2946
-764:2:2947
-765:2:2951
-766:2:2952
-767:2:2960
-768:2:2965
-769:2:2969
-770:2:2970
-771:2:2978
-772:2:2979
-773:2:2983
-774:2:2984
-775:2:2978
-776:2:2979
-777:2:2983
-778:2:2984
-779:2:2992
-780:2:2997
-781:2:3004
-782:2:3005
-783:2:3012
-784:2:3017
-785:2:3024
-786:2:3025
-787:2:3024
-788:2:3025
-789:2:3032
-790:0:4177
-791:2:2522
-792:0:4177
-793:2:3043
-794:2:3044
-795:2:3048
-796:2:3049
-797:2:3057
-798:2:3058
-799:2:3062
-800:2:3063
-801:2:3071
-802:2:3076
-803:2:3080
-804:2:3081
-805:2:3089
-806:2:3090
-807:2:3094
-808:2:3095
-809:2:3089
-810:2:3090
-811:2:3094
-812:2:3095
-813:2:3103
-814:2:3108
-815:2:3115
-816:2:3116
-817:2:3123
-818:2:3128
-819:2:3135
-820:2:3136
-821:2:3135
-822:2:3136
-823:2:3143
-824:2:3152
-825:0:4177
-826:2:2522
-827:0:4177
-828:2:3156
-829:2:3157
-830:2:3158
-831:2:3170
-832:2:3171
-833:2:3175
-834:2:3176
-835:2:3184
-836:2:3189
-837:2:3193
-838:2:3194
-839:2:3202
-840:2:3203
-841:2:3207
-842:2:3208
-843:2:3202
-844:2:3203
-845:2:3207
-846:2:3208
-847:2:3216
-848:2:3221
-849:2:3228
-850:2:3229
-851:2:3236
-852:2:3241
-853:2:3248
-854:2:3249
-855:2:3248
-856:2:3249
-857:2:3256
-858:2:3268
-859:2:3269
-860:0:4177
-861:2:2522
-862:0:4177
-863:2:3275
-864:0:4177
-865:2:3900
-866:2:3901
-867:2:3905
-868:2:3909
-869:2:3910
-870:2:3914
-871:2:3922
-872:2:3923
-873:2:3927
-874:2:3931
-875:2:3932
-876:2:3927
-877:2:3931
-878:2:3932
-879:2:3936
-880:2:3943
-881:2:3950
-882:2:3951
-883:2:3958
-884:2:3963
-885:2:3970
-886:2:3971
-887:2:3970
-888:2:3971
-889:2:3978
-890:2:3982
-891:0:4177
-892:2:3987
-893:0:4177
-894:2:3988
-895:0:4177
-896:2:3989
-897:0:4177
-898:2:3990
-899:0:4177
-900:1:26
-901:0:4177
-902:2:3991
-903:0:4177
-904:1:30
-905:1:31
-906:1:35
-907:1:39
-908:1:40
-909:1:44
-910:1:52
-911:1:53
-912:1:57
-913:1:61
-914:1:62
-915:1:57
-916:1:61
-917:1:62
-918:1:66
-919:1:73
-920:1:80
-921:1:81
-922:1:88
-923:1:93
-924:1:100
-925:1:101
-926:1:100
-927:1:101
-928:1:108
-929:1:112
-930:0:4177
-931:2:3990
-932:0:4177
-933:1:117
-934:0:4177
-935:2:3991
-936:0:4177
-937:2:3992
-938:0:4177
-939:2:3997
-940:0:4177
-941:2:3998
-942:0:4177
-943:2:4006
-944:2:4007
-945:2:4011
-946:2:4015
-947:2:4016
-948:2:4020
-949:2:4028
-950:2:4029
-951:2:4033
-952:2:4037
-953:2:4038
-954:2:4033
-955:2:4037
-956:2:4038
-957:2:4042
-958:2:4049
-959:2:4056
-960:2:4057
-961:2:4064
-962:2:4069
-963:2:4076
-964:2:4077
-965:2:4076
-966:2:4077
-967:2:4084
-968:2:4088
-969:0:4177
-970:2:3277
-971:2:3287
-972:0:4177
-973:2:2522
-974:0:4177
-975:2:3278
-976:2:3279
-977:0:4177
-978:2:2522
-979:0:4177
-980:2:3283
-981:0:4177
-982:2:3291
-983:0:4177
-984:2:2518
-985:0:4177
-986:2:2520
-987:0:4177
-988:2:2521
-989:0:4177
-990:2:2522
-991:0:4177
-992:2:2523
-993:2:2524
-994:2:2528
-995:2:2529
-996:2:2537
-997:2:2538
-998:2:2542
-999:2:2543
-1000:2:2551
-1001:2:2556
-1002:2:2560
-1003:2:2561
-1004:2:2569
-1005:2:2570
-1006:2:2574
-1007:2:2575
-1008:2:2569
-1009:2:2570
-1010:2:2571
-1011:2:2583
-1012:2:2588
-1013:2:2595
-1014:2:2596
-1015:2:2603
-1016:2:2608
-1017:2:2615
-1018:2:2616
-1019:2:2615
-1020:2:2616
-1021:2:2623
-1022:2:2633
-1023:0:4177
-1024:2:2522
-1025:0:4177
-1026:2:2685
-1027:2:2686
-1028:2:2687
-1029:0:4177
-1030:2:2522
-1031:0:4177
-1032:2:2692
-1033:0:4177
-1034:1:118
-1035:0:4177
-1036:1:120
-1037:0:4177
-1038:1:19
-1039:0:4177
-1040:1:126
-1041:1:127
-1042:1:131
-1043:1:132
-1044:1:140
-1045:1:141
-1046:1:145
-1047:1:146
-1048:1:154
-1049:1:159
-1050:1:163
-1051:1:164
-1052:1:172
-1053:1:173
-1054:1:177
-1055:1:178
-1056:1:172
-1057:1:173
-1058:1:177
-1059:1:178
-1060:1:186
-1061:1:191
-1062:1:198
-1063:1:199
-1064:1:206
-1065:1:211
-1066:1:218
-1067:1:219
-1068:1:218
-1069:1:219
-1070:1:226
-1071:0:4177
-1072:1:15
-1073:0:4177
-1074:1:16
-1075:0:4177
-1076:1:17
-1077:0:4177
-1078:1:118
-1079:0:4177
-1080:1:120
-1081:0:4177
-1082:1:19
-1083:0:4177
-1084:1:237
-1085:1:238
-1086:0:4177
-1087:1:15
-1088:0:4177
-1089:1:16
-1090:0:4177
-1091:1:17
-1092:0:4177
-1093:1:118
-1094:0:4177
-1095:1:120
-1096:0:4177
-1097:1:19
-1098:0:4177
-1099:1:244
-1100:1:245
-1101:1:249
-1102:1:250
-1103:1:258
-1104:1:259
-1105:1:263
-1106:1:264
-1107:1:272
-1108:1:277
-1109:1:281
-1110:1:282
-1111:1:290
-1112:1:291
-1113:1:295
-1114:1:296
-1115:1:290
-1116:1:291
-1117:1:295
-1118:1:296
-1119:1:304
-1120:1:309
-1121:1:316
-1122:1:317
-1123:1:324
-1124:1:329
-1125:1:336
-1126:1:337
-1127:1:336
-1128:1:337
-1129:1:344
-1130:0:4177
-1131:1:15
-1132:0:4177
-1133:1:16
-1134:0:4177
-1135:1:17
-1136:0:4177
-1137:1:118
-1138:0:4177
-1139:1:120
-1140:0:4177
-1141:1:19
-1142:0:4177
-1143:1:355
-1144:1:356
-1145:1:360
-1146:1:361
-1147:1:369
-1148:1:370
-1149:1:374
-1150:1:375
-1151:1:383
-1152:1:388
-1153:1:392
-1154:1:393
-1155:1:401
-1156:1:402
-1157:1:406
-1158:1:407
-1159:1:401
-1160:1:402
-1161:1:406
-1162:1:407
-1163:1:415
-1164:1:420
-1165:1:427
-1166:1:428
-1167:1:435
-1168:1:440
-1169:1:447
-1170:1:448
-1171:1:447
-1172:1:448
-1173:1:455
-1174:1:464
-1175:0:4177
-1176:1:15
-1177:0:4177
-1178:1:16
-1179:0:4177
-1180:1:17
-1181:0:4177
-1182:1:118
-1183:0:4177
-1184:1:120
-1185:0:4177
-1186:1:19
-1187:0:4177
-1188:1:584
-1189:1:585
-1190:1:589
-1191:1:590
-1192:1:598
-1193:1:599
-1194:1:600
-1195:1:612
-1196:1:617
-1197:1:621
-1198:1:622
-1199:1:630
-1200:1:631
-1201:1:635
-1202:1:636
-1203:1:630
-1204:1:631
-1205:1:635
-1206:1:636
-1207:1:644
-1208:1:649
-1209:1:656
-1210:1:657
-1211:1:664
-1212:1:669
-1213:1:676
-1214:1:677
-1215:1:676
-1216:1:677
-1217:1:684
-1218:0:4177
-1219:1:15
-1220:0:4177
-1221:1:16
-1222:0:4177
-1223:1:17
-1224:0:4177
-1225:1:118
-1226:0:4177
-1227:1:120
-1228:0:4177
-1229:1:19
-1230:0:4177
-1231:1:695
-1232:1:698
-1233:1:699
-1234:0:4177
-1235:1:15
-1236:0:4177
-1237:1:16
-1238:0:4177
-1239:1:17
-1240:0:4177
-1241:1:118
-1242:0:4177
-1243:1:120
-1244:0:4177
-1245:1:19
-1246:0:4177
-1247:1:702
-1248:1:703
-1249:1:707
-1250:1:708
-1251:1:716
-1252:1:717
-1253:1:721
-1254:1:722
-1255:1:730
-1256:1:735
-1257:1:739
-1258:1:740
-1259:1:748
-1260:1:749
-1261:1:753
-1262:1:754
-1263:1:748
-1264:1:749
-1265:1:753
-1266:1:754
-1267:1:762
-1268:1:767
-1269:1:774
-1270:1:775
-1271:1:782
-1272:1:787
-1273:1:794
-1274:1:795
-1275:1:794
-1276:1:795
-1277:1:802
-1278:0:4177
-1279:1:15
-1280:0:4177
-1281:1:16
-1282:0:4177
-1283:1:17
-1284:0:4177
-1285:1:118
-1286:0:4177
-1287:1:120
-1288:0:4177
-1289:1:19
-1290:0:4177
-1291:1:926
-1292:1:927
-1293:1:931
-1294:1:932
-1295:1:940
-1296:1:941
-1297:1:945
-1298:1:946
-1299:1:954
-1300:1:959
-1301:1:963
-1302:1:964
-1303:1:972
-1304:1:973
-1305:1:977
-1306:1:978
-1307:1:972
-1308:1:973
-1309:1:977
-1310:1:978
-1311:1:986
-1312:1:991
-1313:1:998
-1314:1:999
-1315:1:1006
-1316:1:1011
-1317:1:1018
-1318:1:1019
-1319:1:1018
-1320:1:1019
-1321:1:1026
-1322:1:1035
-1323:1:1039
-1324:0:4177
-1325:1:15
-1326:0:4177
-1327:1:16
-1328:0:4177
-1329:1:17
-1330:0:4177
-1331:1:118
-1332:0:4177
-1333:1:120
-1334:0:4177
-1335:1:19
-1336:0:4177
-1337:1:1040
-1338:1:1041
-1339:1:1045
-1340:1:1046
-1341:1:1054
-1342:1:1055
-1343:1:1056
-1344:1:1068
-1345:1:1073
-1346:1:1077
-1347:1:1078
-1348:1:1086
-1349:1:1087
-1350:1:1091
-1351:1:1092
-1352:1:1086
-1353:1:1087
-1354:1:1091
-1355:1:1092
-1356:1:1100
-1357:1:1105
-1358:1:1112
-1359:1:1113
-1360:1:1120
-1361:1:1125
-1362:1:1132
-1363:1:1133
-1364:1:1132
-1365:1:1133
-1366:1:1140
-1367:0:4177
-1368:1:15
-1369:0:4177
-1370:1:16
-1371:0:4177
-1372:1:17
-1373:0:4177
-1374:1:118
-1375:0:4177
-1376:1:120
-1377:0:4177
-1378:1:19
-1379:0:4177
-1380:1:1151
-1381:0:4177
-1382:1:2417
-1383:1:2424
-1384:1:2425
-1385:1:2432
-1386:1:2437
-1387:1:2444
-1388:1:2445
-1389:1:2444
-1390:1:2445
-1391:1:2452
-1392:1:2456
-1393:0:4177
-1394:2:3306
-1395:2:3307
-1396:2:3311
-1397:2:3315
-1398:2:3316
-1399:2:3320
-1400:2:3325
-1401:2:3333
-1402:2:3337
-1403:2:3338
-1404:2:3333
-1405:2:3334
-1406:2:3342
-1407:2:3349
-1408:2:3356
-1409:2:3357
-1410:2:3364
-1411:2:3369
-1412:2:3376
-1413:2:3377
-1414:2:3376
-1415:2:3377
-1416:2:3384
-1417:2:3388
-1418:0:4177
-1419:2:3393
-1420:0:4177
-1421:2:3394
-1422:0:4177
-1423:2:3395
-1424:0:4177
-1425:2:3396
-1426:0:4177
-1427:1:1153
-1428:1:1154
-1429:0:4175
-1430:2:3397
-1431:0:4181
-1432:1:2165
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.define b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.log b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 3fc8991..0000000
+++ /dev/null
@@ -1,635 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    9112 States=    1e+06 Transitions=  7.1e+06 Memory=   550.432        t=   17.4 R=   6e+04
-Depth=    9112 States=    2e+06 Transitions= 1.64e+07 Memory=   634.318        t=   41.8 R=   5e+04
-Depth=    9112 States=    3e+06 Transitions= 2.63e+07 Memory=   718.303        t=   68.2 R=   4e+04
-pan: resizing hashtable to -w22..  done
-Depth=    9112 States=    4e+06 Transitions= 3.56e+07 Memory=   833.311        t=   93.2 R=   4e+04
-Depth=    9112 States=    5e+06 Transitions= 4.66e+07 Memory=   917.295        t=    122 R=   4e+04
-Depth=    9112 States=    6e+06 Transitions= 5.77e+07 Memory=  1001.279        t=    152 R=   4e+04
-Depth=    9112 States=    7e+06 Transitions= 6.72e+07 Memory=  1085.264        t=    177 R=   4e+04
-Depth=    9112 States=    8e+06 Transitions= 7.41e+07 Memory=  1169.151        t=    194 R=   4e+04
-Depth=    9112 States=    9e+06 Transitions= 8.11e+07 Memory=  1253.135        t=    212 R=   4e+04
-pan: resizing hashtable to -w24..  done
-Depth=    9112 States=    1e+07 Transitions= 8.81e+07 Memory=  1461.115        t=    231 R=   4e+04
-Depth=    9112 States=  1.1e+07 Transitions= 9.84e+07 Memory=  1545.100        t=    259 R=   4e+04
-Depth=    9112 States=  1.2e+07 Transitions= 1.08e+08 Memory=  1629.084        t=    282 R=   4e+04
-Depth=    9112 States=  1.3e+07 Transitions= 1.16e+08 Memory=  1713.068        t=    304 R=   4e+04
-Depth=    9112 States=  1.4e+07 Transitions= 1.25e+08 Memory=  1797.053        t=    329 R=   4e+04
-Depth=    9112 States=  1.5e+07 Transitions= 1.35e+08 Memory=  1881.037        t=    352 R=   4e+04
-Depth=    9278 States=  1.6e+07 Transitions= 1.45e+08 Memory=  1964.924        t=    382 R=   4e+04
-Depth=    9283 States=  1.7e+07 Transitions= 1.56e+08 Memory=  2048.908        t=    409 R=   4e+04
-Depth=    9283 States=  1.8e+07 Transitions= 1.66e+08 Memory=  2132.893        t=    437 R=   4e+04
-Depth=    9283 States=  1.9e+07 Transitions= 1.76e+08 Memory=  2216.877        t=    464 R=   4e+04
-Depth=    9283 States=    2e+07 Transitions= 1.87e+08 Memory=  2300.861        t=    493 R=   4e+04
-Depth=    9283 States=  2.1e+07 Transitions= 1.97e+08 Memory=  2384.846        t=    521 R=   4e+04
-Depth=    9283 States=  2.2e+07 Transitions= 2.08e+08 Memory=  2468.830        t=    549 R=   4e+04
-Depth=    9283 States=  2.3e+07 Transitions= 2.17e+08 Memory=  2552.717        t=    572 R=   4e+04
-Depth=    9283 States=  2.4e+07 Transitions= 2.26e+08 Memory=  2636.701        t=    596 R=   4e+04
-Depth=    9283 States=  2.5e+07 Transitions= 2.37e+08 Memory=  2720.686        t=    627 R=   4e+04
-Depth=    9283 States=  2.6e+07 Transitions= 2.49e+08 Memory=  2804.670        t=    659 R=   4e+04
-Depth=    9283 States=  2.7e+07 Transitions=  2.6e+08 Memory=  2888.654        t=    689 R=   4e+04
-Depth=    9283 States=  2.8e+07 Transitions= 2.71e+08 Memory=  2972.639        t=    718 R=   4e+04
-Depth=    9283 States=  2.9e+07 Transitions=  2.8e+08 Memory=  3056.526        t=    741 R=   4e+04
-Depth=    9283 States=    3e+07 Transitions= 2.89e+08 Memory=  3140.510        t=    764 R=   4e+04
-Depth=    9283 States=  3.1e+07 Transitions= 2.99e+08 Memory=  3224.494        t=    791 R=   4e+04
-Depth=    9283 States=  3.2e+07 Transitions= 3.09e+08 Memory=  3308.479        t=    818 R=   4e+04
-Depth=    9283 States=  3.3e+07 Transitions= 3.19e+08 Memory=  3392.463        t=    846 R=   4e+04
-Depth=    9283 States=  3.4e+07 Transitions= 3.29e+08 Memory=  3476.447        t=    873 R=   4e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9283 States=  3.5e+07 Transitions= 3.39e+08 Memory=  4056.416        t=    908 R=   4e+04
-Depth=    9283 States=  3.6e+07 Transitions= 3.49e+08 Memory=  4140.401        t=    934 R=   4e+04
-Depth=    9283 States=  3.7e+07 Transitions= 3.59e+08 Memory=  4224.385        t=    959 R=   4e+04
-pan: claim violated! (at depth 1298)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 9283, errors: 1
- 37684654 states, stored
-3.2905753e+08 states, matched
-3.6674218e+08 transitions (= stored+matched)
-5.3145922e+09 atomic steps
-hash conflicts: 2.6456917e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 4168.911      equivalent memory usage for states (stored*(State-vector + overhead))
- 3314.050      actual memory usage for states (compression: 79.49%)
-               state-vector as stored = 64 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
-    1.910      memory lost to fragmentation
- 4281.904      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 272, "pan.___", state 30, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 52, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 61, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 77, "(1)"
-       line 253, "pan.___", state 85, "(1)"
-       line 257, "pan.___", state 97, "(1)"
-       line 261, "pan.___", state 105, "(1)"
-       line 411, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 163, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 177, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 195, "(1)"
-       line 257, "pan.___", state 215, "(1)"
-       line 261, "pan.___", state 223, "(1)"
-       line 691, "pan.___", state 242, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 249, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 281, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 295, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 313, "(1)"
-       line 257, "pan.___", state 333, "(1)"
-       line 261, "pan.___", state 341, "(1)"
-       line 411, "pan.___", state 360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 392, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 406, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 424, "(1)"
-       line 257, "pan.___", state 444, "(1)"
-       line 261, "pan.___", state 452, "(1)"
-       line 411, "pan.___", state 473, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 475, "(1)"
-       line 411, "pan.___", state 476, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 476, "else"
-       line 411, "pan.___", state 479, "(1)"
-       line 415, "pan.___", state 487, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 489, "(1)"
-       line 415, "pan.___", state 490, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 490, "else"
-       line 415, "pan.___", state 493, "(1)"
-       line 415, "pan.___", state 494, "(1)"
-       line 415, "pan.___", state 494, "(1)"
-       line 413, "pan.___", state 499, "((i<1))"
-       line 413, "pan.___", state 499, "((i>=1))"
-       line 420, "pan.___", state 505, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 507, "(1)"
-       line 420, "pan.___", state 508, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 508, "else"
-       line 420, "pan.___", state 511, "(1)"
-       line 420, "pan.___", state 512, "(1)"
-       line 420, "pan.___", state 512, "(1)"
-       line 424, "pan.___", state 519, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 521, "(1)"
-       line 424, "pan.___", state 522, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 522, "else"
-       line 424, "pan.___", state 525, "(1)"
-       line 424, "pan.___", state 526, "(1)"
-       line 424, "pan.___", state 526, "(1)"
-       line 422, "pan.___", state 531, "((i<2))"
-       line 422, "pan.___", state 531, "((i>=2))"
-       line 249, "pan.___", state 537, "(1)"
-       line 253, "pan.___", state 545, "(1)"
-       line 253, "pan.___", state 546, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 546, "else"
-       line 251, "pan.___", state 551, "((i<1))"
-       line 251, "pan.___", state 551, "((i>=1))"
-       line 257, "pan.___", state 557, "(1)"
-       line 257, "pan.___", state 558, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 558, "else"
-       line 261, "pan.___", state 565, "(1)"
-       line 261, "pan.___", state 566, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 566, "else"
-       line 259, "pan.___", state 571, "((i<2))"
-       line 259, "pan.___", state 571, "((i>=2))"
-       line 266, "pan.___", state 575, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 575, "else"
-       line 431, "pan.___", state 577, "(1)"
-       line 431, "pan.___", state 577, "(1)"
-       line 691, "pan.___", state 580, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 691, "pan.___", state 581, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 691, "pan.___", state 582, "(1)"
-       line 411, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 621, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 635, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 653, "(1)"
-       line 257, "pan.___", state 673, "(1)"
-       line 261, "pan.___", state 681, "(1)"
-       line 411, "pan.___", state 707, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 739, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 753, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 771, "(1)"
-       line 257, "pan.___", state 791, "(1)"
-       line 261, "pan.___", state 799, "(1)"
-       line 411, "pan.___", state 818, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 820, "(1)"
-       line 411, "pan.___", state 821, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 821, "else"
-       line 411, "pan.___", state 824, "(1)"
-       line 415, "pan.___", state 832, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 834, "(1)"
-       line 415, "pan.___", state 835, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 835, "else"
-       line 415, "pan.___", state 838, "(1)"
-       line 415, "pan.___", state 839, "(1)"
-       line 415, "pan.___", state 839, "(1)"
-       line 413, "pan.___", state 844, "((i<1))"
-       line 413, "pan.___", state 844, "((i>=1))"
-       line 420, "pan.___", state 850, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 852, "(1)"
-       line 420, "pan.___", state 853, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 853, "else"
-       line 420, "pan.___", state 856, "(1)"
-       line 420, "pan.___", state 857, "(1)"
-       line 420, "pan.___", state 857, "(1)"
-       line 424, "pan.___", state 864, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 866, "(1)"
-       line 424, "pan.___", state 867, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 867, "else"
-       line 424, "pan.___", state 870, "(1)"
-       line 424, "pan.___", state 871, "(1)"
-       line 424, "pan.___", state 871, "(1)"
-       line 422, "pan.___", state 876, "((i<2))"
-       line 422, "pan.___", state 876, "((i>=2))"
-       line 249, "pan.___", state 882, "(1)"
-       line 253, "pan.___", state 890, "(1)"
-       line 253, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 891, "else"
-       line 251, "pan.___", state 896, "((i<1))"
-       line 251, "pan.___", state 896, "((i>=1))"
-       line 257, "pan.___", state 902, "(1)"
-       line 257, "pan.___", state 903, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 903, "else"
-       line 261, "pan.___", state 910, "(1)"
-       line 261, "pan.___", state 911, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 911, "else"
-       line 259, "pan.___", state 916, "((i<2))"
-       line 259, "pan.___", state 916, "((i>=2))"
-       line 266, "pan.___", state 920, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 920, "else"
-       line 431, "pan.___", state 922, "(1)"
-       line 431, "pan.___", state 922, "(1)"
-       line 699, "pan.___", state 926, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 963, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 977, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 995, "(1)"
-       line 257, "pan.___", state 1015, "(1)"
-       line 261, "pan.___", state 1023, "(1)"
-       line 411, "pan.___", state 1045, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1077, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1091, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1109, "(1)"
-       line 257, "pan.___", state 1129, "(1)"
-       line 261, "pan.___", state 1137, "(1)"
-       line 411, "pan.___", state 1160, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1192, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1206, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1224, "(1)"
-       line 257, "pan.___", state 1244, "(1)"
-       line 261, "pan.___", state 1252, "(1)"
-       line 411, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1303, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1317, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1335, "(1)"
-       line 257, "pan.___", state 1355, "(1)"
-       line 261, "pan.___", state 1363, "(1)"
-       line 411, "pan.___", state 1387, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1419, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1433, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1451, "(1)"
-       line 257, "pan.___", state 1471, "(1)"
-       line 261, "pan.___", state 1479, "(1)"
-       line 411, "pan.___", state 1498, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1530, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1544, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1562, "(1)"
-       line 257, "pan.___", state 1582, "(1)"
-       line 261, "pan.___", state 1590, "(1)"
-       line 411, "pan.___", state 1612, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1644, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1658, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1676, "(1)"
-       line 257, "pan.___", state 1696, "(1)"
-       line 261, "pan.___", state 1704, "(1)"
-       line 738, "pan.___", state 1723, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1730, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1762, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1776, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1794, "(1)"
-       line 257, "pan.___", state 1814, "(1)"
-       line 261, "pan.___", state 1822, "(1)"
-       line 411, "pan.___", state 1841, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1873, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1887, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1905, "(1)"
-       line 257, "pan.___", state 1925, "(1)"
-       line 261, "pan.___", state 1933, "(1)"
-       line 411, "pan.___", state 1954, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 1956, "(1)"
-       line 411, "pan.___", state 1957, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 1957, "else"
-       line 411, "pan.___", state 1960, "(1)"
-       line 415, "pan.___", state 1968, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1970, "(1)"
-       line 415, "pan.___", state 1971, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 1971, "else"
-       line 415, "pan.___", state 1974, "(1)"
-       line 415, "pan.___", state 1975, "(1)"
-       line 415, "pan.___", state 1975, "(1)"
-       line 413, "pan.___", state 1980, "((i<1))"
-       line 413, "pan.___", state 1980, "((i>=1))"
-       line 420, "pan.___", state 1986, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1988, "(1)"
-       line 420, "pan.___", state 1989, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 1989, "else"
-       line 420, "pan.___", state 1992, "(1)"
-       line 420, "pan.___", state 1993, "(1)"
-       line 420, "pan.___", state 1993, "(1)"
-       line 424, "pan.___", state 2000, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2002, "(1)"
-       line 424, "pan.___", state 2003, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2003, "else"
-       line 424, "pan.___", state 2006, "(1)"
-       line 424, "pan.___", state 2007, "(1)"
-       line 424, "pan.___", state 2007, "(1)"
-       line 422, "pan.___", state 2012, "((i<2))"
-       line 422, "pan.___", state 2012, "((i>=2))"
-       line 249, "pan.___", state 2018, "(1)"
-       line 253, "pan.___", state 2026, "(1)"
-       line 253, "pan.___", state 2027, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2027, "else"
-       line 251, "pan.___", state 2032, "((i<1))"
-       line 251, "pan.___", state 2032, "((i>=1))"
-       line 257, "pan.___", state 2038, "(1)"
-       line 257, "pan.___", state 2039, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2039, "else"
-       line 261, "pan.___", state 2046, "(1)"
-       line 261, "pan.___", state 2047, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2047, "else"
-       line 259, "pan.___", state 2052, "((i<2))"
-       line 259, "pan.___", state 2052, "((i>=2))"
-       line 266, "pan.___", state 2056, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2056, "else"
-       line 431, "pan.___", state 2058, "(1)"
-       line 431, "pan.___", state 2058, "(1)"
-       line 738, "pan.___", state 2061, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 738, "pan.___", state 2062, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 738, "pan.___", state 2063, "(1)"
-       line 411, "pan.___", state 2070, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2102, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2116, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2134, "(1)"
-       line 257, "pan.___", state 2154, "(1)"
-       line 261, "pan.___", state 2162, "(1)"
-       line 411, "pan.___", state 2187, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2219, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2233, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2251, "(1)"
-       line 257, "pan.___", state 2271, "(1)"
-       line 261, "pan.___", state 2279, "(1)"
-       line 411, "pan.___", state 2298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2330, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2344, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2362, "(1)"
-       line 257, "pan.___", state 2382, "(1)"
-       line 261, "pan.___", state 2390, "(1)"
-       line 249, "pan.___", state 2421, "(1)"
-       line 257, "pan.___", state 2441, "(1)"
-       line 261, "pan.___", state 2449, "(1)"
-       line 249, "pan.___", state 2464, "(1)"
-       line 257, "pan.___", state 2484, "(1)"
-       line 261, "pan.___", state 2492, "(1)"
-       line 898, "pan.___", state 2509, "-end-"
-       (221 of 2509 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 22, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 36, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 54, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 86, "(1)"
-       line 253, "pan.___", state 94, "(1)"
-       line 257, "pan.___", state 106, "(1)"
-       line 272, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 144, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 157, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 211, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 229, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 243, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 261, "(1)"
-       line 253, "pan.___", state 269, "(1)"
-       line 257, "pan.___", state 281, "(1)"
-       line 261, "pan.___", state 289, "(1)"
-       line 415, "pan.___", state 324, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 342, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 356, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 382, "(1)"
-       line 257, "pan.___", state 394, "(1)"
-       line 261, "pan.___", state 402, "(1)"
-       line 411, "pan.___", state 430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 444, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 462, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 476, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 494, "(1)"
-       line 253, "pan.___", state 502, "(1)"
-       line 257, "pan.___", state 514, "(1)"
-       line 261, "pan.___", state 522, "(1)"
-       line 411, "pan.___", state 541, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 543, "(1)"
-       line 411, "pan.___", state 544, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 544, "else"
-       line 411, "pan.___", state 547, "(1)"
-       line 415, "pan.___", state 555, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 557, "(1)"
-       line 415, "pan.___", state 558, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 558, "else"
-       line 415, "pan.___", state 561, "(1)"
-       line 415, "pan.___", state 562, "(1)"
-       line 415, "pan.___", state 562, "(1)"
-       line 413, "pan.___", state 567, "((i<1))"
-       line 413, "pan.___", state 567, "((i>=1))"
-       line 420, "pan.___", state 573, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 575, "(1)"
-       line 420, "pan.___", state 576, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 576, "else"
-       line 420, "pan.___", state 579, "(1)"
-       line 420, "pan.___", state 580, "(1)"
-       line 420, "pan.___", state 580, "(1)"
-       line 424, "pan.___", state 587, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 589, "(1)"
-       line 424, "pan.___", state 590, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 590, "else"
-       line 424, "pan.___", state 593, "(1)"
-       line 424, "pan.___", state 594, "(1)"
-       line 424, "pan.___", state 594, "(1)"
-       line 422, "pan.___", state 599, "((i<2))"
-       line 422, "pan.___", state 599, "((i>=2))"
-       line 249, "pan.___", state 605, "(1)"
-       line 253, "pan.___", state 613, "(1)"
-       line 253, "pan.___", state 614, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 614, "else"
-       line 251, "pan.___", state 619, "((i<1))"
-       line 251, "pan.___", state 619, "((i>=1))"
-       line 257, "pan.___", state 625, "(1)"
-       line 257, "pan.___", state 626, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 626, "else"
-       line 261, "pan.___", state 633, "(1)"
-       line 261, "pan.___", state 634, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 634, "else"
-       line 259, "pan.___", state 639, "((i<2))"
-       line 259, "pan.___", state 639, "((i>=2))"
-       line 266, "pan.___", state 643, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 643, "else"
-       line 431, "pan.___", state 645, "(1)"
-       line 431, "pan.___", state 645, "(1)"
-       line 1117, "pan.___", state 649, "_proc_urcu_writer = (_proc_urcu_writer|(1<<10))"
-       line 411, "pan.___", state 654, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 656, "(1)"
-       line 411, "pan.___", state 657, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 657, "else"
-       line 411, "pan.___", state 660, "(1)"
-       line 415, "pan.___", state 668, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 670, "(1)"
-       line 415, "pan.___", state 671, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 671, "else"
-       line 415, "pan.___", state 674, "(1)"
-       line 415, "pan.___", state 675, "(1)"
-       line 415, "pan.___", state 675, "(1)"
-       line 413, "pan.___", state 680, "((i<1))"
-       line 413, "pan.___", state 680, "((i>=1))"
-       line 420, "pan.___", state 686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 688, "(1)"
-       line 420, "pan.___", state 689, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 689, "else"
-       line 420, "pan.___", state 692, "(1)"
-       line 420, "pan.___", state 693, "(1)"
-       line 420, "pan.___", state 693, "(1)"
-       line 424, "pan.___", state 700, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 702, "(1)"
-       line 424, "pan.___", state 703, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 703, "else"
-       line 424, "pan.___", state 706, "(1)"
-       line 424, "pan.___", state 707, "(1)"
-       line 424, "pan.___", state 707, "(1)"
-       line 422, "pan.___", state 712, "((i<2))"
-       line 422, "pan.___", state 712, "((i>=2))"
-       line 249, "pan.___", state 718, "(1)"
-       line 253, "pan.___", state 726, "(1)"
-       line 253, "pan.___", state 727, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 727, "else"
-       line 251, "pan.___", state 732, "((i<1))"
-       line 251, "pan.___", state 732, "((i>=1))"
-       line 257, "pan.___", state 738, "(1)"
-       line 257, "pan.___", state 739, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 739, "else"
-       line 261, "pan.___", state 746, "(1)"
-       line 261, "pan.___", state 747, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 747, "else"
-       line 259, "pan.___", state 752, "((i<2))"
-       line 259, "pan.___", state 752, "((i>=2))"
-       line 266, "pan.___", state 756, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 756, "else"
-       line 431, "pan.___", state 758, "(1)"
-       line 431, "pan.___", state 758, "(1)"
-       line 1133, "pan.___", state 763, "_proc_urcu_writer = (_proc_urcu_writer|(1<<11))"
-       line 1128, "pan.___", state 764, "(((tmp2&((1<<7)-1))&&((tmp2^0)&(1<<7))))"
-       line 1128, "pan.___", state 764, "else"
-       line 1153, "pan.___", state 768, "_proc_urcu_writer = (_proc_urcu_writer&~(((1<<12)|(1<<11))))"
-       line 272, "pan.___", state 799, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 823, "(1)"
-       line 284, "pan.___", state 830, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 846, "(1)"
-       line 253, "pan.___", state 854, "(1)"
-       line 257, "pan.___", state 866, "(1)"
-       line 261, "pan.___", state 874, "(1)"
-       line 272, "pan.___", state 905, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 914, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 927, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 936, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 952, "(1)"
-       line 253, "pan.___", state 960, "(1)"
-       line 257, "pan.___", state 972, "(1)"
-       line 261, "pan.___", state 980, "(1)"
-       line 276, "pan.___", state 1006, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1019, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1028, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1044, "(1)"
-       line 253, "pan.___", state 1052, "(1)"
-       line 257, "pan.___", state 1064, "(1)"
-       line 261, "pan.___", state 1072, "(1)"
-       line 272, "pan.___", state 1103, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1112, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1125, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1134, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1150, "(1)"
-       line 253, "pan.___", state 1158, "(1)"
-       line 257, "pan.___", state 1170, "(1)"
-       line 261, "pan.___", state 1178, "(1)"
-       line 272, "pan.___", state 1195, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1197, "(1)"
-       line 276, "pan.___", state 1204, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1206, "(1)"
-       line 276, "pan.___", state 1207, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1207, "else"
-       line 274, "pan.___", state 1212, "((i<1))"
-       line 274, "pan.___", state 1212, "((i>=1))"
-       line 280, "pan.___", state 1217, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1219, "(1)"
-       line 280, "pan.___", state 1220, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1220, "else"
-       line 284, "pan.___", state 1226, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1228, "(1)"
-       line 284, "pan.___", state 1229, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1229, "else"
-       line 282, "pan.___", state 1234, "((i<2))"
-       line 282, "pan.___", state 1234, "((i>=2))"
-       line 249, "pan.___", state 1242, "(1)"
-       line 253, "pan.___", state 1250, "(1)"
-       line 253, "pan.___", state 1251, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1251, "else"
-       line 251, "pan.___", state 1256, "((i<1))"
-       line 251, "pan.___", state 1256, "((i>=1))"
-       line 257, "pan.___", state 1262, "(1)"
-       line 257, "pan.___", state 1263, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1263, "else"
-       line 261, "pan.___", state 1270, "(1)"
-       line 261, "pan.___", state 1271, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1271, "else"
-       line 266, "pan.___", state 1280, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1280, "else"
-       line 1229, "pan.___", state 1283, "i = 0"
-       line 1229, "pan.___", state 1285, "reader_barrier = 1"
-       line 1229, "pan.___", state 1296, "((i<1))"
-       line 1229, "pan.___", state 1296, "((i>=1))"
-       line 272, "pan.___", state 1301, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1303, "(1)"
-       line 276, "pan.___", state 1310, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1312, "(1)"
-       line 276, "pan.___", state 1313, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1313, "else"
-       line 274, "pan.___", state 1318, "((i<1))"
-       line 274, "pan.___", state 1318, "((i>=1))"
-       line 280, "pan.___", state 1323, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1325, "(1)"
-       line 280, "pan.___", state 1326, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1326, "else"
-       line 284, "pan.___", state 1332, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1334, "(1)"
-       line 284, "pan.___", state 1335, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1335, "else"
-       line 282, "pan.___", state 1340, "((i<2))"
-       line 282, "pan.___", state 1340, "((i>=2))"
-       line 249, "pan.___", state 1348, "(1)"
-       line 253, "pan.___", state 1356, "(1)"
-       line 253, "pan.___", state 1357, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1357, "else"
-       line 251, "pan.___", state 1362, "((i<1))"
-       line 251, "pan.___", state 1362, "((i>=1))"
-       line 257, "pan.___", state 1368, "(1)"
-       line 257, "pan.___", state 1369, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1369, "else"
-       line 261, "pan.___", state 1376, "(1)"
-       line 261, "pan.___", state 1377, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1377, "else"
-       line 266, "pan.___", state 1386, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1386, "else"
-       line 299, "pan.___", state 1388, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1388, "else"
-       line 1229, "pan.___", state 1389, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 1229, "pan.___", state 1389, "else"
-       line 276, "pan.___", state 1402, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1415, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1424, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1440, "(1)"
-       line 253, "pan.___", state 1448, "(1)"
-       line 257, "pan.___", state 1460, "(1)"
-       line 261, "pan.___", state 1468, "(1)"
-       line 272, "pan.___", state 1499, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1508, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1521, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1530, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1546, "(1)"
-       line 253, "pan.___", state 1554, "(1)"
-       line 257, "pan.___", state 1566, "(1)"
-       line 261, "pan.___", state 1574, "(1)"
-       line 1237, "pan.___", state 1590, "-end-"
-       (195 of 1590 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 982 seconds
-pan: rate  38391.44 states/second
-pan: avg transition delay 2.6765e-06 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.spin.input b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 6e6560d..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define SINGLE_FLIP
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-controldataflow-intel-ipi/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 05857aa..0000000
+++ /dev/null
@@ -1,1301 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4179
-2:3:4099
-3:3:4102
-4:3:4102
-5:3:4105
-6:3:4113
-7:3:4113
-8:3:4116
-9:3:4122
-10:3:4126
-11:3:4126
-12:3:4129
-13:3:4139
-14:3:4147
-15:3:4147
-16:3:4150
-17:3:4156
-18:3:4160
-19:3:4160
-20:3:4163
-21:3:4169
-22:3:4173
-23:3:4174
-24:0:4179
-25:3:4176
-26:0:4179
-27:2:2511
-28:0:4179
-29:2:2517
-30:0:4179
-31:2:2518
-32:0:4179
-33:2:2520
-34:0:4179
-35:2:2521
-36:0:4179
-37:2:2522
-38:0:4179
-39:2:2523
-40:0:4179
-41:2:2524
-42:0:4179
-43:2:2525
-44:0:4179
-45:2:2526
-46:2:2527
-47:2:2531
-48:2:2532
-49:2:2540
-50:2:2541
-51:2:2545
-52:2:2546
-53:2:2554
-54:2:2559
-55:2:2563
-56:2:2564
-57:2:2572
-58:2:2573
-59:2:2577
-60:2:2578
-61:2:2572
-62:2:2573
-63:2:2577
-64:2:2578
-65:2:2586
-66:2:2591
-67:2:2598
-68:2:2599
-69:2:2606
-70:2:2611
-71:2:2618
-72:2:2619
-73:2:2618
-74:2:2619
-75:2:2626
-76:2:2636
-77:0:4179
-78:2:2525
-79:0:4179
-80:2:2640
-81:2:2644
-82:2:2645
-83:2:2649
-84:2:2653
-85:2:2654
-86:2:2658
-87:2:2666
-88:2:2667
-89:2:2671
-90:2:2675
-91:2:2676
-92:2:2671
-93:2:2672
-94:2:2680
-95:0:4179
-96:2:2525
-97:0:4179
-98:2:2688
-99:2:2689
-100:2:2690
-101:0:4179
-102:2:2525
-103:0:4179
-104:2:2695
-105:0:4179
-106:2:3308
-107:2:3309
-108:2:3313
-109:2:3317
-110:2:3318
-111:2:3322
-112:2:3327
-113:2:3335
-114:2:3339
-115:2:3340
-116:2:3335
-117:2:3339
-118:2:3340
-119:2:3344
-120:2:3351
-121:2:3358
-122:2:3359
-123:2:3366
-124:2:3371
-125:2:3378
-126:2:3379
-127:2:3378
-128:2:3379
-129:2:3386
-130:2:3390
-131:0:4179
-132:2:3395
-133:0:4179
-134:2:3396
-135:0:4179
-136:2:3397
-137:0:4179
-138:2:3398
-139:0:4179
-140:1:2
-141:0:4179
-142:2:3399
-143:0:4179
-144:1:8
-145:0:4179
-146:1:9
-147:0:4179
-148:2:3398
-149:0:4179
-150:1:10
-151:0:4179
-152:2:3399
-153:0:4179
-154:1:11
-155:0:4179
-156:2:3398
-157:0:4179
-158:1:12
-159:0:4179
-160:2:3399
-161:0:4179
-162:1:13
-163:0:4179
-164:2:3398
-165:0:4179
-166:1:14
-167:0:4179
-168:2:3399
-169:0:4179
-170:1:15
-171:0:4179
-172:1:16
-173:0:4179
-174:2:3398
-175:0:4179
-176:1:17
-177:0:4179
-178:2:3399
-179:0:4179
-180:1:26
-181:0:4179
-182:2:3398
-183:0:4179
-184:1:30
-185:1:31
-186:1:35
-187:1:39
-188:1:40
-189:1:44
-190:1:52
-191:1:53
-192:1:57
-193:1:61
-194:1:62
-195:1:57
-196:1:61
-197:1:62
-198:1:66
-199:1:73
-200:1:80
-201:1:81
-202:1:88
-203:1:93
-204:1:100
-205:1:101
-206:1:100
-207:1:101
-208:1:108
-209:1:112
-210:0:4179
-211:2:3399
-212:0:4179
-213:1:117
-214:0:4179
-215:2:3400
-216:0:4179
-217:2:3405
-218:0:4179
-219:2:3406
-220:0:4179
-221:2:3414
-222:2:3415
-223:2:3419
-224:2:3423
-225:2:3424
-226:2:3428
-227:2:3436
-228:2:3437
-229:2:3441
-230:2:3445
-231:2:3446
-232:2:3441
-233:2:3445
-234:2:3446
-235:2:3450
-236:2:3457
-237:2:3464
-238:2:3465
-239:2:3472
-240:2:3477
-241:2:3484
-242:2:3485
-243:2:3484
-244:2:3485
-245:2:3492
-246:2:3496
-247:0:4179
-248:2:2697
-249:2:3289
-250:0:4179
-251:2:2525
-252:0:4179
-253:2:2698
-254:0:4179
-255:2:2525
-256:0:4179
-257:2:2701
-258:2:2702
-259:2:2706
-260:2:2707
-261:2:2715
-262:2:2716
-263:2:2720
-264:2:2721
-265:2:2729
-266:2:2734
-267:2:2738
-268:2:2739
-269:2:2747
-270:2:2748
-271:2:2752
-272:2:2753
-273:2:2747
-274:2:2748
-275:2:2752
-276:2:2753
-277:2:2761
-278:2:2766
-279:2:2773
-280:2:2774
-281:2:2781
-282:2:2786
-283:2:2793
-284:2:2794
-285:2:2793
-286:2:2794
-287:2:2801
-288:2:2810
-289:0:4179
-290:2:2525
-291:0:4179
-292:2:2814
-293:2:2823
-294:2:2824
-295:2:2828
-296:2:2829
-297:2:2833
-298:2:2834
-299:2:2842
-300:2:2847
-301:2:2851
-302:2:2852
-303:2:2860
-304:2:2861
-305:2:2865
-306:2:2866
-307:2:2860
-308:2:2861
-309:2:2865
-310:2:2866
-311:2:2874
-312:2:2881
-313:2:2882
-314:2:2886
-315:2:2887
-316:2:2894
-317:2:2899
-318:2:2906
-319:2:2907
-320:2:2906
-321:2:2907
-322:2:2914
-323:2:2926
-324:2:2927
-325:0:4179
-326:2:2525
-327:0:4179
-328:2:3277
-329:0:4179
-330:1:118
-331:0:4179
-332:1:120
-333:0:4179
-334:1:19
-335:0:4179
-336:1:126
-337:1:127
-338:1:131
-339:1:132
-340:1:140
-341:1:141
-342:1:145
-343:1:146
-344:1:154
-345:1:159
-346:1:163
-347:1:164
-348:1:172
-349:1:173
-350:1:177
-351:1:178
-352:1:172
-353:1:173
-354:1:177
-355:1:178
-356:1:186
-357:1:191
-358:1:198
-359:1:199
-360:1:206
-361:1:211
-362:1:218
-363:1:219
-364:1:218
-365:1:219
-366:1:226
-367:0:4179
-368:1:15
-369:0:4179
-370:1:16
-371:0:4179
-372:1:17
-373:0:4179
-374:1:118
-375:0:4179
-376:1:120
-377:0:4179
-378:1:19
-379:0:4179
-380:1:237
-381:1:238
-382:0:4179
-383:1:15
-384:0:4179
-385:1:16
-386:0:4179
-387:1:17
-388:0:4179
-389:1:118
-390:0:4179
-391:1:120
-392:0:4179
-393:1:19
-394:0:4179
-395:1:244
-396:1:245
-397:1:249
-398:1:250
-399:1:258
-400:1:259
-401:1:263
-402:1:264
-403:1:272
-404:1:277
-405:1:281
-406:1:282
-407:1:290
-408:1:291
-409:1:295
-410:1:296
-411:1:290
-412:1:291
-413:1:295
-414:1:296
-415:1:304
-416:1:309
-417:1:316
-418:1:317
-419:1:324
-420:1:329
-421:1:336
-422:1:337
-423:1:336
-424:1:337
-425:1:344
-426:0:4179
-427:1:15
-428:0:4179
-429:1:16
-430:0:4179
-431:2:3899
-432:2:3907
-433:2:3911
-434:2:3912
-435:2:3916
-436:2:3924
-437:2:3925
-438:2:3929
-439:2:3933
-440:2:3934
-441:2:3929
-442:2:3933
-443:2:3934
-444:2:3938
-445:2:3945
-446:2:3952
-447:2:3953
-448:2:3960
-449:2:3965
-450:2:3972
-451:2:3973
-452:2:3972
-453:2:3973
-454:2:3980
-455:2:3984
-456:0:4179
-457:2:3989
-458:0:4179
-459:2:3990
-460:0:4179
-461:2:3991
-462:0:4179
-463:2:3992
-464:0:4179
-465:1:17
-466:0:4179
-467:2:3993
-468:0:4179
-469:1:26
-470:0:4179
-471:2:3992
-472:0:4179
-473:1:30
-474:1:31
-475:1:35
-476:1:39
-477:1:40
-478:1:44
-479:1:52
-480:1:53
-481:1:57
-482:1:61
-483:1:62
-484:1:57
-485:1:61
-486:1:62
-487:1:66
-488:1:73
-489:1:80
-490:1:81
-491:1:88
-492:1:93
-493:1:100
-494:1:101
-495:1:100
-496:1:101
-497:1:108
-498:1:112
-499:0:4179
-500:2:3993
-501:0:4179
-502:1:117
-503:0:4179
-504:2:3994
-505:0:4179
-506:2:3999
-507:0:4179
-508:2:4000
-509:0:4179
-510:2:4008
-511:2:4009
-512:2:4013
-513:2:4017
-514:2:4018
-515:2:4022
-516:2:4030
-517:2:4031
-518:2:4035
-519:2:4039
-520:2:4040
-521:2:4035
-522:2:4039
-523:2:4040
-524:2:4044
-525:2:4051
-526:2:4058
-527:2:4059
-528:2:4066
-529:2:4071
-530:2:4078
-531:2:4079
-532:2:4078
-533:2:4079
-534:2:4086
-535:2:4090
-536:0:4179
-537:2:3279
-538:2:3289
-539:0:4179
-540:2:2525
-541:0:4179
-542:2:3280
-543:2:3281
-544:0:4179
-545:2:2525
-546:0:4179
-547:2:3285
-548:0:4179
-549:2:3293
-550:0:4179
-551:2:2518
-552:0:4179
-553:2:2520
-554:0:4179
-555:2:2521
-556:0:4179
-557:2:2522
-558:0:4179
-559:2:2523
-560:0:4179
-561:2:2524
-562:0:4179
-563:2:2525
-564:0:4179
-565:2:2526
-566:2:2527
-567:2:2531
-568:2:2532
-569:2:2540
-570:2:2541
-571:2:2545
-572:2:2546
-573:2:2554
-574:2:2559
-575:2:2563
-576:2:2564
-577:2:2572
-578:2:2573
-579:2:2574
-580:2:2572
-581:2:2573
-582:2:2577
-583:2:2578
-584:2:2586
-585:2:2591
-586:2:2598
-587:2:2599
-588:2:2606
-589:2:2611
-590:2:2618
-591:2:2619
-592:2:2618
-593:2:2619
-594:2:2626
-595:2:2636
-596:0:4179
-597:2:2525
-598:0:4179
-599:2:2640
-600:2:2644
-601:2:2645
-602:2:2649
-603:2:2653
-604:2:2654
-605:2:2658
-606:2:2666
-607:2:2667
-608:2:2671
-609:2:2672
-610:2:2671
-611:2:2675
-612:2:2676
-613:2:2680
-614:0:4179
-615:2:2525
-616:0:4179
-617:2:2688
-618:2:2689
-619:2:2690
-620:0:4179
-621:2:2525
-622:0:4179
-623:2:2695
-624:0:4179
-625:1:118
-626:0:4179
-627:1:120
-628:0:4179
-629:1:19
-630:0:4179
-631:1:355
-632:1:356
-633:1:360
-634:1:361
-635:1:369
-636:1:370
-637:1:374
-638:1:375
-639:1:383
-640:1:388
-641:1:392
-642:1:393
-643:1:401
-644:1:402
-645:1:406
-646:1:407
-647:1:401
-648:1:402
-649:1:406
-650:1:407
-651:1:415
-652:1:420
-653:1:427
-654:1:428
-655:1:435
-656:1:440
-657:1:447
-658:1:448
-659:1:447
-660:1:448
-661:1:455
-662:1:464
-663:0:4179
-664:1:15
-665:0:4179
-666:1:16
-667:0:4179
-668:1:17
-669:0:4179
-670:1:118
-671:0:4179
-672:1:120
-673:0:4179
-674:1:19
-675:0:4179
-676:1:584
-677:1:585
-678:1:589
-679:1:590
-680:1:598
-681:1:599
-682:1:600
-683:1:612
-684:1:617
-685:1:621
-686:1:622
-687:1:630
-688:1:631
-689:1:635
-690:1:636
-691:1:630
-692:1:631
-693:1:635
-694:1:636
-695:1:644
-696:1:649
-697:1:656
-698:1:657
-699:1:664
-700:1:669
-701:1:676
-702:1:677
-703:1:676
-704:1:677
-705:1:684
-706:0:4179
-707:1:15
-708:0:4179
-709:1:16
-710:0:4179
-711:1:17
-712:0:4179
-713:1:118
-714:0:4179
-715:1:120
-716:0:4179
-717:1:19
-718:0:4179
-719:1:695
-720:1:698
-721:1:699
-722:0:4179
-723:1:15
-724:0:4179
-725:1:16
-726:0:4179
-727:1:17
-728:0:4179
-729:1:118
-730:0:4179
-731:1:120
-732:0:4179
-733:1:19
-734:0:4179
-735:1:702
-736:1:703
-737:1:707
-738:1:708
-739:1:716
-740:1:717
-741:1:721
-742:1:722
-743:1:730
-744:1:735
-745:1:739
-746:1:740
-747:1:748
-748:1:749
-749:1:753
-750:1:754
-751:1:748
-752:1:749
-753:1:753
-754:1:754
-755:1:762
-756:1:767
-757:1:774
-758:1:775
-759:1:782
-760:1:787
-761:1:794
-762:1:795
-763:1:794
-764:1:795
-765:1:802
-766:0:4179
-767:1:15
-768:0:4179
-769:1:16
-770:0:4179
-771:1:17
-772:0:4179
-773:1:118
-774:0:4179
-775:1:120
-776:0:4179
-777:1:19
-778:0:4179
-779:1:926
-780:1:927
-781:1:931
-782:1:932
-783:1:940
-784:1:941
-785:1:945
-786:1:946
-787:1:954
-788:1:959
-789:1:963
-790:1:964
-791:1:972
-792:1:973
-793:1:977
-794:1:978
-795:1:972
-796:1:973
-797:1:977
-798:1:978
-799:1:986
-800:1:991
-801:1:998
-802:1:999
-803:1:1006
-804:1:1011
-805:1:1018
-806:1:1019
-807:1:1018
-808:1:1019
-809:1:1026
-810:1:1035
-811:1:1039
-812:0:4179
-813:1:15
-814:0:4179
-815:1:16
-816:0:4179
-817:1:17
-818:0:4179
-819:1:118
-820:0:4179
-821:1:120
-822:0:4179
-823:1:19
-824:0:4179
-825:1:1040
-826:1:1041
-827:1:1045
-828:1:1046
-829:1:1054
-830:1:1055
-831:1:1056
-832:1:1068
-833:1:1073
-834:1:1077
-835:1:1078
-836:1:1086
-837:1:1087
-838:1:1091
-839:1:1092
-840:1:1086
-841:1:1087
-842:1:1091
-843:1:1092
-844:1:1100
-845:1:1105
-846:1:1112
-847:1:1113
-848:1:1120
-849:1:1125
-850:1:1132
-851:1:1133
-852:1:1132
-853:1:1133
-854:1:1140
-855:0:4179
-856:1:15
-857:0:4179
-858:1:16
-859:0:4179
-860:2:3308
-861:2:3309
-862:2:3313
-863:2:3317
-864:2:3318
-865:2:3322
-866:2:3327
-867:2:3335
-868:2:3339
-869:2:3340
-870:2:3335
-871:2:3339
-872:2:3340
-873:2:3344
-874:2:3351
-875:2:3358
-876:2:3359
-877:2:3366
-878:2:3371
-879:2:3378
-880:2:3379
-881:2:3378
-882:2:3379
-883:2:3386
-884:2:3390
-885:0:4179
-886:2:3395
-887:0:4179
-888:2:3396
-889:0:4179
-890:2:3397
-891:0:4179
-892:2:3398
-893:0:4179
-894:1:17
-895:0:4179
-896:2:3399
-897:0:4179
-898:1:26
-899:0:4179
-900:2:3398
-901:0:4179
-902:1:30
-903:1:31
-904:1:35
-905:1:39
-906:1:40
-907:1:44
-908:1:52
-909:1:53
-910:1:57
-911:1:61
-912:1:62
-913:1:57
-914:1:61
-915:1:62
-916:1:66
-917:1:73
-918:1:80
-919:1:81
-920:1:88
-921:1:93
-922:1:100
-923:1:101
-924:1:100
-925:1:101
-926:1:108
-927:1:112
-928:0:4179
-929:2:3399
-930:0:4179
-931:1:117
-932:0:4179
-933:2:3400
-934:0:4179
-935:2:3405
-936:0:4179
-937:2:3406
-938:0:4179
-939:2:3414
-940:2:3415
-941:2:3419
-942:2:3423
-943:2:3424
-944:2:3428
-945:2:3436
-946:2:3437
-947:2:3441
-948:2:3445
-949:2:3446
-950:2:3441
-951:2:3445
-952:2:3446
-953:2:3450
-954:2:3457
-955:2:3464
-956:2:3465
-957:2:3472
-958:2:3477
-959:2:3484
-960:2:3485
-961:2:3484
-962:2:3485
-963:2:3492
-964:2:3496
-965:0:4179
-966:2:2697
-967:2:3289
-968:0:4179
-969:2:2525
-970:0:4179
-971:2:2698
-972:0:4179
-973:2:2525
-974:0:4179
-975:2:2701
-976:2:2702
-977:2:2706
-978:2:2707
-979:2:2715
-980:2:2716
-981:2:2720
-982:2:2721
-983:2:2729
-984:2:2734
-985:2:2738
-986:2:2739
-987:2:2747
-988:2:2748
-989:2:2752
-990:2:2753
-991:2:2747
-992:2:2748
-993:2:2752
-994:2:2753
-995:2:2761
-996:2:2766
-997:2:2773
-998:2:2774
-999:2:2781
-1000:2:2786
-1001:2:2793
-1002:2:2794
-1003:2:2793
-1004:2:2794
-1005:2:2801
-1006:2:2810
-1007:0:4179
-1008:2:2525
-1009:0:4179
-1010:2:2814
-1011:2:2815
-1012:2:2816
-1013:2:2828
-1014:2:2829
-1015:2:2833
-1016:2:2834
-1017:2:2842
-1018:2:2847
-1019:2:2851
-1020:2:2852
-1021:2:2860
-1022:2:2861
-1023:2:2865
-1024:2:2866
-1025:2:2860
-1026:2:2861
-1027:2:2865
-1028:2:2866
-1029:2:2874
-1030:2:2879
-1031:2:2886
-1032:2:2887
-1033:2:2894
-1034:2:2899
-1035:2:2906
-1036:2:2907
-1037:2:2906
-1038:2:2907
-1039:2:2914
-1040:2:2926
-1041:2:2927
-1042:0:4179
-1043:2:2525
-1044:0:4179
-1045:2:3277
-1046:0:4179
-1047:2:3902
-1048:2:3903
-1049:2:3907
-1050:2:3911
-1051:2:3912
-1052:2:3916
-1053:2:3924
-1054:2:3925
-1055:2:3929
-1056:2:3933
-1057:2:3934
-1058:2:3929
-1059:2:3933
-1060:2:3934
-1061:2:3938
-1062:2:3945
-1063:2:3952
-1064:2:3953
-1065:2:3960
-1066:2:3965
-1067:2:3972
-1068:2:3973
-1069:2:3972
-1070:2:3973
-1071:2:3980
-1072:2:3984
-1073:0:4179
-1074:2:3989
-1075:0:4179
-1076:2:3990
-1077:0:4179
-1078:2:3991
-1079:0:4179
-1080:2:3992
-1081:0:4179
-1082:1:26
-1083:0:4179
-1084:2:3993
-1085:0:4179
-1086:1:30
-1087:1:31
-1088:1:35
-1089:1:39
-1090:1:40
-1091:1:44
-1092:1:52
-1093:1:53
-1094:1:57
-1095:1:61
-1096:1:62
-1097:1:57
-1098:1:61
-1099:1:62
-1100:1:66
-1101:1:73
-1102:1:80
-1103:1:81
-1104:1:88
-1105:1:93
-1106:1:100
-1107:1:101
-1108:1:100
-1109:1:101
-1110:1:108
-1111:1:112
-1112:0:4179
-1113:2:3992
-1114:0:4179
-1115:1:117
-1116:0:4179
-1117:2:3993
-1118:0:4179
-1119:2:3994
-1120:0:4179
-1121:2:3999
-1122:0:4179
-1123:2:4000
-1124:0:4179
-1125:2:4008
-1126:2:4009
-1127:2:4013
-1128:2:4017
-1129:2:4018
-1130:2:4022
-1131:2:4030
-1132:2:4031
-1133:2:4035
-1134:2:4039
-1135:2:4040
-1136:2:4035
-1137:2:4039
-1138:2:4040
-1139:2:4044
-1140:2:4051
-1141:2:4058
-1142:2:4059
-1143:2:4066
-1144:2:4071
-1145:2:4078
-1146:2:4079
-1147:2:4078
-1148:2:4079
-1149:2:4086
-1150:2:4090
-1151:0:4179
-1152:2:3279
-1153:2:3289
-1154:0:4179
-1155:2:2525
-1156:0:4179
-1157:2:3280
-1158:2:3281
-1159:0:4179
-1160:2:2525
-1161:0:4179
-1162:2:3285
-1163:0:4179
-1164:2:3293
-1165:0:4179
-1166:2:2518
-1167:0:4179
-1168:2:2520
-1169:0:4179
-1170:2:2521
-1171:0:4179
-1172:2:2522
-1173:0:4179
-1174:2:2523
-1175:0:4179
-1176:2:2524
-1177:0:4179
-1178:2:2525
-1179:0:4179
-1180:2:2526
-1181:2:2527
-1182:2:2531
-1183:2:2532
-1184:2:2540
-1185:2:2541
-1186:2:2545
-1187:2:2546
-1188:2:2554
-1189:2:2559
-1190:2:2563
-1191:2:2564
-1192:2:2572
-1193:2:2573
-1194:2:2577
-1195:2:2578
-1196:2:2572
-1197:2:2573
-1198:2:2574
-1199:2:2586
-1200:2:2591
-1201:2:2598
-1202:2:2599
-1203:2:2606
-1204:2:2611
-1205:2:2618
-1206:2:2619
-1207:2:2618
-1208:2:2619
-1209:2:2626
-1210:2:2636
-1211:0:4179
-1212:2:2525
-1213:0:4179
-1214:1:118
-1215:0:4179
-1216:1:120
-1217:0:4179
-1218:1:19
-1219:0:4179
-1220:1:1151
-1221:0:4179
-1222:1:2417
-1223:1:2424
-1224:1:2425
-1225:1:2432
-1226:1:2437
-1227:1:2444
-1228:1:2445
-1229:1:2444
-1230:1:2445
-1231:1:2452
-1232:1:2456
-1233:0:4179
-1234:2:2640
-1235:2:2644
-1236:2:2645
-1237:2:2649
-1238:2:2653
-1239:2:2654
-1240:2:2658
-1241:2:2666
-1242:2:2667
-1243:2:2671
-1244:2:2675
-1245:2:2676
-1246:2:2671
-1247:2:2672
-1248:2:2680
-1249:0:4179
-1250:2:2525
-1251:0:4179
-1252:2:2688
-1253:2:2689
-1254:2:2690
-1255:0:4179
-1256:2:2525
-1257:0:4179
-1258:2:2695
-1259:0:4179
-1260:2:3308
-1261:2:3309
-1262:2:3313
-1263:2:3317
-1264:2:3318
-1265:2:3322
-1266:2:3327
-1267:2:3335
-1268:2:3339
-1269:2:3340
-1270:2:3335
-1271:2:3339
-1272:2:3340
-1273:2:3344
-1274:2:3351
-1275:2:3358
-1276:2:3359
-1277:2:3366
-1278:2:3371
-1279:2:3378
-1280:2:3379
-1281:2:3378
-1282:2:3379
-1283:2:3386
-1284:2:3390
-1285:0:4179
-1286:2:3395
-1287:0:4179
-1288:2:3396
-1289:0:4179
-1290:2:3397
-1291:0:4179
-1292:2:3398
-1293:0:4179
-1294:1:1153
-1295:1:1154
-1296:0:4177
-1297:2:3399
-1298:0:4183
-1299:1:2145
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_progress.ltl b/formal-model/urcu-controldataflow-intel-ipi/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_progress_reader.define b/formal-model/urcu-controldataflow-intel-ipi/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer.define b/formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer.log b/formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer.log
deleted file mode 100644 (file)
index e238402..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-depth 23: Claim reached state 9 (line 1300)
-depth 51: Claim reached state 9 (line 1299)
-Depth=    7071 States=    1e+06 Transitions= 1.16e+07 Memory=   514.397        t=   30.7 R=   3e+04
-Depth=    7071 States=    2e+06 Transitions= 2.31e+07 Memory=   566.252        t=   61.5 R=   3e+04
-Depth=    7071 States=    3e+06 Transitions= 3.43e+07 Memory=   617.326        t=   91.6 R=   3e+04
-pan: resizing hashtable to -w22..  done
-Depth=    8815 States=    4e+06 Transitions= 4.57e+07 Memory=   696.592        t=    122 R=   3e+04
-Depth=    8815 States=    5e+06 Transitions= 5.73e+07 Memory=   743.955        t=    153 R=   3e+04
-Depth=    8815 States=    6e+06 Transitions= 7.04e+07 Memory=   797.373        t=    190 R=   3e+04
-Depth=    8815 States=    7e+06 Transitions= 8.38e+07 Memory=   847.861        t=    226 R=   3e+04
-Depth=    8815 States=    8e+06 Transitions= 9.59e+07 Memory=   898.057        t=    259 R=   3e+04
-Depth=    8815 States=    9e+06 Transitions= 1.08e+08 Memory=   948.350        t=    293 R=   3e+04
-pan: resizing hashtable to -w24..  done
-Depth=    8815 States=    1e+07 Transitions= 1.29e+08 Memory=  1123.615        t=    352 R=   3e+04
-Depth=    8815 States=  1.1e+07 Transitions= 1.41e+08 Memory=  1175.764        t=    385 R=   3e+04
-Depth=    8815 States=  1.2e+07 Transitions= 1.53e+08 Memory=  1225.471        t=    417 R=   3e+04
-Depth=    8815 States=  1.3e+07 Transitions= 1.64e+08 Memory=  1276.057        t=    447 R=   3e+04
-Depth=    8815 States=  1.4e+07 Transitions= 1.75e+08 Memory=  1330.451        t=    477 R=   3e+04
-Depth=    8815 States=  1.5e+07 Transitions= 1.87e+08 Memory=  1379.670        t=    508 R=   3e+04
-Depth=    8815 States=  1.6e+07 Transitions= 1.98e+08 Memory=  1429.865        t=    538 R=   3e+04
-Depth=    8815 States=  1.7e+07 Transitions= 2.09e+08 Memory=  1484.748        t=    568 R=   3e+04
-Depth=    8815 States=  1.8e+07 Transitions= 2.23e+08 Memory=  1529.670        t=    606 R=   3e+04
-Depth=    8815 States=  1.9e+07 Transitions= 2.36e+08 Memory=  1579.377        t=    643 R=   3e+04
-Depth=    8815 States=    2e+07 Transitions= 2.57e+08 Memory=  1629.279        t=    701 R=   3e+04
-Depth=    8815 States=  2.1e+07 Transitions= 2.93e+08 Memory=  1686.115        t=    807 R=   3e+04
-Depth=    9016 States=  2.2e+07 Transitions= 3.11e+08 Memory=  1741.193        t=    858 R=   3e+04
-Depth=    9016 States=  2.3e+07 Transitions= 3.25e+08 Memory=  1793.733        t=    897 R=   3e+04
-Depth=    9016 States=  2.4e+07 Transitions= 3.45e+08 Memory=  1846.272        t=    954 R=   3e+04
-Depth=    9016 States=  2.5e+07 Transitions= 3.67e+08 Memory=  1897.639        t= 1.02e+03 R=   2e+04
-Depth=    9016 States=  2.6e+07 Transitions= 3.84e+08 Memory=  1951.447        t= 1.06e+03 R=   2e+04
-Depth=    9016 States=  2.7e+07 Transitions= 4.07e+08 Memory=  2004.670        t= 1.13e+03 R=   2e+04
-Depth=    9016 States=  2.8e+07 Transitions= 4.29e+08 Memory=  2050.764        t= 1.19e+03 R=   2e+04
-Depth=    9016 States=  2.9e+07 Transitions= 4.48e+08 Memory=  2100.373        t= 1.25e+03 R=   2e+04
-Depth=    9016 States=    3e+07 Transitions= 4.66e+08 Memory=  2151.545        t= 1.3e+03 R=   2e+04
-Depth=    9016 States=  3.1e+07 Transitions= 4.86e+08 Memory=  2201.838        t= 1.36e+03 R=   2e+04
-Depth=    9016 States=  3.2e+07 Transitions=  5.1e+08 Memory=  2250.861        t= 1.43e+03 R=   2e+04
-Depth=    9016 States=  3.3e+07 Transitions= 5.29e+08 Memory=  2299.983        t= 1.48e+03 R=   2e+04
-Depth=    9016 States=  3.4e+07 Transitions= 5.47e+08 Memory=  2351.057        t= 1.53e+03 R=   2e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9016 States=  3.5e+07 Transitions= 5.69e+08 Memory=  2896.943        t= 1.6e+03 R=   2e+04
-Depth=    9016 States=  3.6e+07 Transitions= 5.95e+08 Memory=  2945.186        t= 1.67e+03 R=   2e+04
-Depth=    9016 States=  3.7e+07 Transitions= 6.12e+08 Memory=  2995.576        t= 1.72e+03 R=   2e+04
-Depth=    9016 States=  3.8e+07 Transitions= 6.29e+08 Memory=  3042.256        t= 1.77e+03 R=   2e+04
-Depth=    9016 States=  3.9e+07 Transitions= 6.42e+08 Memory=  3093.135        t= 1.8e+03 R=   2e+04
-Depth=    9016 States=    4e+07 Transitions= 6.56e+08 Memory=  3146.651        t= 1.84e+03 R=   2e+04
-Depth=    9016 States=  4.1e+07 Transitions= 6.69e+08 Memory=  3202.901        t= 1.88e+03 R=   2e+04
-Depth=    9016 States=  4.2e+07 Transitions= 6.82e+08 Memory=  3254.951        t= 1.91e+03 R=   2e+04
-Depth=    9016 States=  4.3e+07 Transitions= 6.95e+08 Memory=  3309.053        t= 1.95e+03 R=   2e+04
-Depth=    9016 States=  4.4e+07 Transitions= 7.07e+08 Memory=  3360.615        t= 1.98e+03 R=   2e+04
-Depth=    9016 States=  4.5e+07 Transitions= 7.28e+08 Memory=  3410.713        t= 2.04e+03 R=   2e+04
-Depth=    9016 States=  4.6e+07 Transitions= 7.63e+08 Memory=  3466.963        t= 2.14e+03 R=   2e+04
-Depth=    9016 States=  4.7e+07 Transitions= 7.99e+08 Memory=  3532.295        t= 2.25e+03 R=   2e+04
-Depth=    9016 States=  4.8e+07 Transitions= 8.49e+08 Memory=  3594.307        t= 2.4e+03 R=   2e+04
-Depth=    9016 States=  4.9e+07 Transitions= 8.91e+08 Memory=  3646.455        t= 2.52e+03 R=   2e+04
-Depth=    9016 States=    5e+07 Transitions= 9.24e+08 Memory=  3689.912        t= 2.62e+03 R=   2e+04
-Depth=    9016 States=  5.1e+07 Transitions= 9.39e+08 Memory=  3742.940        t= 2.66e+03 R=   2e+04
-Depth=    9016 States=  5.2e+07 Transitions=  9.6e+08 Memory=  3793.721        t= 2.72e+03 R=   2e+04
-Depth=    9016 States=  5.3e+07 Transitions= 9.99e+08 Memory=  3843.721        t= 2.84e+03 R=   2e+04
-Depth=    9016 States=  5.4e+07 Transitions= 1.01e+09 Memory=  3899.287        t= 2.88e+03 R=   2e+04
-Depth=    9016 States=  5.5e+07 Transitions= 1.03e+09 Memory=  3947.627        t= 2.93e+03 R=   2e+04
-Depth=    9016 States=  5.6e+07 Transitions= 1.05e+09 Memory=  3995.479        t= 2.97e+03 R=   2e+04
-Depth=    9016 States=  5.7e+07 Transitions= 1.06e+09 Memory=  4049.776        t= 3.01e+03 R=   2e+04
-Depth=    9016 States=  5.8e+07 Transitions= 1.09e+09 Memory=  4100.947        t= 3.09e+03 R=   2e+04
-Depth=    9016 States=  5.9e+07 Transitions=  1.1e+09 Memory=  4151.533        t= 3.13e+03 R=   2e+04
-Depth=    9016 States=    6e+07 Transitions= 1.13e+09 Memory=  4201.924        t= 3.22e+03 R=   2e+04
-Depth=    9016 States=  6.1e+07 Transitions= 1.15e+09 Memory=  4251.240        t= 3.28e+03 R=   2e+04
-Depth=    9016 States=  6.2e+07 Transitions= 1.19e+09 Memory=  4303.779        t= 3.38e+03 R=   2e+04
-Depth=    9016 States=  6.3e+07 Transitions= 1.21e+09 Memory=  4352.998        t= 3.43e+03 R=   2e+04
-Depth=    9016 States=  6.4e+07 Transitions= 1.24e+09 Memory=  4403.096        t= 3.53e+03 R=   2e+04
-Depth=    9016 States=  6.5e+07 Transitions= 1.26e+09 Memory=  4453.682        t= 3.59e+03 R=   2e+04
-Depth=    9016 States=  6.6e+07 Transitions= 1.28e+09 Memory=  4503.096        t= 3.66e+03 R=   2e+04
-Depth=    9016 States=  6.7e+07 Transitions=  1.3e+09 Memory=  4554.072        t= 3.71e+03 R=   2e+04
-Depth=    9016 States=  6.8e+07 Transitions= 1.33e+09 Memory=  4604.951        t= 3.79e+03 R=   2e+04
-Depth=    9016 States=  6.9e+07 Transitions= 1.36e+09 Memory=  4656.221        t= 3.87e+03 R=   2e+04
-Depth=    9523 States=    7e+07 Transitions= 1.38e+09 Memory=  4712.959        t= 3.93e+03 R=   2e+04
-Depth=    9523 States=  7.1e+07 Transitions= 1.39e+09 Memory=  4759.443        t= 3.97e+03 R=   2e+04
-Depth=    9523 States=  7.2e+07 Transitions= 1.41e+09 Memory=  4814.033        t= 4.03e+03 R=   2e+04
-Depth=    9554 States=  7.3e+07 Transitions= 1.44e+09 Memory=  4868.037        t= 4.09e+03 R=   2e+04
-Depth=    9554 States=  7.4e+07 Transitions= 1.45e+09 Memory=  4915.401        t= 4.13e+03 R=   2e+04
-Depth=    9554 States=  7.5e+07 Transitions= 1.47e+09 Memory=  4970.479        t= 4.2e+03 R=   2e+04
-Depth=    9554 States=  7.6e+07 Transitions= 1.49e+09 Memory=  5022.334        t= 4.26e+03 R=   2e+04
-Depth=    9554 States=  7.7e+07 Transitions= 1.51e+09 Memory=  5071.358        t= 4.3e+03 R=   2e+04
-Depth=    9554 States=  7.8e+07 Transitions= 1.52e+09 Memory=  5124.971        t= 4.33e+03 R=   2e+04
-Depth=    9554 States=  7.9e+07 Transitions= 1.54e+09 Memory=  5178.779        t= 4.4e+03 R=   2e+04
-Depth=    9554 States=    8e+07 Transitions= 1.56e+09 Memory=  5231.221        t= 4.46e+03 R=   2e+04
-Depth=    9554 States=  8.1e+07 Transitions= 1.58e+09 Memory=  5284.541        t= 4.51e+03 R=   2e+04
-Depth=    9554 States=  8.2e+07 Transitions=  1.6e+09 Memory=  5335.029        t= 4.55e+03 R=   2e+04
-Depth=    9554 States=  8.3e+07 Transitions= 1.61e+09 Memory=  5385.908        t= 4.6e+03 R=   2e+04
-Depth=    9554 States=  8.4e+07 Transitions= 1.63e+09 Memory=  5437.276        t= 4.64e+03 R=   2e+04
-Depth=    9554 States=  8.5e+07 Transitions= 1.65e+09 Memory=  5486.787        t= 4.69e+03 R=   2e+04
-Depth=    9554 States=  8.6e+07 Transitions= 1.67e+09 Memory=  5535.615        t= 4.76e+03 R=   2e+04
-Depth=    9554 States=  8.7e+07 Transitions= 1.69e+09 Memory=  5589.522        t= 4.81e+03 R=   2e+04
-Depth=    9554 States=  8.8e+07 Transitions=  1.7e+09 Memory=  5647.627        t= 4.86e+03 R=   2e+04
-Depth=    9554 States=  8.9e+07 Transitions= 1.72e+09 Memory=  5695.967        t= 4.9e+03 R=   2e+04
-Depth=    9554 States=    9e+07 Transitions= 1.74e+09 Memory=  5749.971        t= 4.95e+03 R=   2e+04
-Depth=    9554 States=  9.1e+07 Transitions= 1.76e+09 Memory=  5799.483        t= 5.01e+03 R=   2e+04
-Depth=    9554 States=  9.2e+07 Transitions= 1.78e+09 Memory=  5849.092        t= 5.06e+03 R=   2e+04
-Depth=    9554 States=  9.3e+07 Transitions=  1.8e+09 Memory=  5897.529        t= 5.12e+03 R=   2e+04
-Depth=    9554 States=  9.4e+07 Transitions= 1.82e+09 Memory=  5949.287        t= 5.19e+03 R=   2e+04
-Depth=    9554 States=  9.5e+07 Transitions= 1.84e+09 Memory=  6004.072        t= 5.25e+03 R=   2e+04
-Depth=    9554 States=  9.6e+07 Transitions= 1.86e+09 Memory=  6052.412        t= 5.29e+03 R=   2e+04
-Depth=    9554 States=  9.7e+07 Transitions= 1.88e+09 Memory=  6107.588        t= 5.36e+03 R=   2e+04
-Depth=    9554 States=  9.8e+07 Transitions=  1.9e+09 Memory=  6160.029        t= 5.4e+03 R=   2e+04
-Depth=    9554 States=  9.9e+07 Transitions= 1.91e+09 Memory=  6211.006        t= 5.44e+03 R=   2e+04
-Depth=    9554 States=    1e+08 Transitions= 1.93e+09 Memory=  6262.861        t= 5.49e+03 R=   2e+04
-Depth=    9554 States= 1.01e+08 Transitions= 1.94e+09 Memory=  6317.256        t= 5.54e+03 R=   2e+04
-Depth=    9554 States= 1.02e+08 Transitions= 1.96e+09 Memory=  6371.455        t= 5.58e+03 R=   2e+04
-Depth=    9554 States= 1.03e+08 Transitions= 1.98e+09 Memory=  6423.311        t= 5.64e+03 R=   2e+04
-Depth=    9554 States= 1.04e+08 Transitions=    2e+09 Memory=  6477.608        t= 5.71e+03 R=   2e+04
-Depth=    9554 States= 1.05e+08 Transitions= 2.02e+09 Memory=  6526.045        t= 5.75e+03 R=   2e+04
-Depth=    9554 States= 1.06e+08 Transitions= 2.04e+09 Memory=  6580.733        t= 5.81e+03 R=   2e+04
-Depth=    9554 States= 1.07e+08 Transitions= 2.06e+09 Memory=  6634.053        t= 5.87e+03 R=   2e+04
-Depth=    9554 States= 1.08e+08 Transitions= 2.07e+09 Memory=  6685.127        t= 5.9e+03 R=   2e+04
-Depth=    9554 States= 1.09e+08 Transitions= 2.09e+09 Memory=  6736.299        t= 5.96e+03 R=   2e+04
-Depth=    9554 States=  1.1e+08 Transitions= 2.11e+09 Memory=  6790.401        t=  6e+03 R=   2e+04
-Depth=    9554 States= 1.11e+08 Transitions= 2.12e+09 Memory=  6844.990        t= 6.05e+03 R=   2e+04
-Depth=    9554 States= 1.12e+08 Transitions= 2.14e+09 Memory=  6890.010        t= 6.09e+03 R=   2e+04
-Depth=    9554 States= 1.13e+08 Transitions= 2.16e+09 Memory=  6940.889        t= 6.14e+03 R=   2e+04
-Depth=    9554 States= 1.14e+08 Transitions= 2.17e+09 Memory=  6992.061        t= 6.19e+03 R=   2e+04
-Depth=    9554 States= 1.15e+08 Transitions= 2.19e+09 Memory=  7043.623        t= 6.24e+03 R=   2e+04
-Depth=    9554 States= 1.16e+08 Transitions= 2.21e+09 Memory=  7095.186        t= 6.28e+03 R=   2e+04
-Depth=    9554 States= 1.17e+08 Transitions= 2.23e+09 Memory=  7144.600        t= 6.36e+03 R=   2e+04
-Depth=    9554 States= 1.18e+08 Transitions= 2.27e+09 Memory=  7198.897        t= 6.46e+03 R=   2e+04
-Depth=    9554 States= 1.19e+08 Transitions= 2.29e+09 Memory=  7253.779        t= 6.52e+03 R=   2e+04
-Depth=    9554 States=  1.2e+08 Transitions=  2.3e+09 Memory=  7307.783        t= 6.56e+03 R=   2e+04
-Depth=    9554 States= 1.21e+08 Transitions= 2.32e+09 Memory=  7358.467        t= 6.62e+03 R=   2e+04
-Depth=    9554 States= 1.22e+08 Transitions= 2.34e+09 Memory=  7410.811        t= 6.67e+03 R=   2e+04
-Depth=    9554 States= 1.23e+08 Transitions= 2.36e+09 Memory=  7465.010        t= 6.72e+03 R=   2e+04
-Depth=    9554 States= 1.24e+08 Transitions= 2.38e+09 Memory=  7516.670        t= 6.78e+03 R=   2e+04
-Depth=    9554 States= 1.25e+08 Transitions= 2.41e+09 Memory=  7565.205        t= 6.87e+03 R=   2e+04
-Depth=    9554 States= 1.26e+08 Transitions= 2.43e+09 Memory=  7613.936        t= 6.93e+03 R=   2e+04
-Depth=    9554 States= 1.27e+08 Transitions= 2.45e+09 Memory=  7662.471        t=  7e+03 R=   2e+04
-Depth=    9554 States= 1.28e+08 Transitions= 2.48e+09 Memory=  7710.713        t= 7.08e+03 R=   2e+04
-Depth=    9554 States= 1.29e+08 Transitions=  2.5e+09 Memory=  7759.346        t= 7.14e+03 R=   2e+04
-Depth=    9554 States=  1.3e+08 Transitions= 2.52e+09 Memory=  7810.322        t= 7.2e+03 R=   2e+04
-Depth=    9554 States= 1.31e+08 Transitions= 2.55e+09 Memory=  7859.834        t= 7.26e+03 R=   2e+04
-Depth=    9554 States= 1.32e+08 Transitions= 2.57e+09 Memory=  7910.615        t= 7.33e+03 R=   2e+04
-Depth=    9554 States= 1.33e+08 Transitions= 2.59e+09 Memory=  7959.248        t= 7.4e+03 R=   2e+04
-Depth=    9554 States= 1.34e+08 Transitions= 2.61e+09 Memory=  8011.787        t= 7.46e+03 R=   2e+04
-Depth=    9554 States= 1.35e+08 Transitions= 2.63e+09 Memory=  8060.713        t= 7.51e+03 R=   2e+04
-pan: resizing hashtable to -w28..  done
-Depth=    9554 States= 1.36e+08 Transitions= 2.65e+09 Memory= 10108.713        t= 7.58e+03 R=   2e+04
-Depth=    9554 States= 1.37e+08 Transitions= 2.66e+09 Memory= 10144.455        t= 7.62e+03 R=   2e+04
-Depth=    9554 States= 1.38e+08 Transitions= 2.67e+09 Memory= 10199.143        t= 7.65e+03 R=   2e+04
-Depth=    9554 States= 1.39e+08 Transitions= 2.69e+09 Memory= 10253.830        t= 7.69e+03 R=   2e+04
-Depth=    9554 States=  1.4e+08 Transitions=  2.7e+09 Memory= 10308.127        t= 7.74e+03 R=   2e+04
-Depth=    9554 States= 1.41e+08 Transitions= 2.72e+09 Memory= 10360.178        t= 7.78e+03 R=   2e+04
-Depth=    9554 States= 1.42e+08 Transitions= 2.74e+09 Memory= 10413.889        t= 7.83e+03 R=   2e+04
-Depth=    9554 States= 1.43e+08 Transitions= 2.75e+09 Memory= 10467.111        t= 7.87e+03 R=   2e+04
-Depth=    9554 States= 1.44e+08 Transitions= 2.77e+09 Memory= 10518.088        t= 7.92e+03 R=   2e+04
-Depth=    9554 States= 1.45e+08 Transitions= 2.79e+09 Memory= 10567.795        t= 7.98e+03 R=   2e+04
-Depth=    9554 States= 1.46e+08 Transitions= 2.82e+09 Memory= 10624.631        t= 8.08e+03 R=   2e+04
-Depth=    9554 States= 1.47e+08 Transitions= 2.86e+09 Memory= 10689.963        t= 8.19e+03 R=   2e+04
-Depth=    9554 States= 1.48e+08 Transitions= 2.91e+09 Memory= 10752.072        t= 8.34e+03 R=   2e+04
-Depth=    9554 States= 1.49e+08 Transitions= 2.95e+09 Memory= 10802.658        t= 8.46e+03 R=   2e+04
-Depth=    9554 States=  1.5e+08 Transitions= 2.99e+09 Memory= 10848.361        t= 8.56e+03 R=   2e+04
-Depth=    9554 States= 1.51e+08 Transitions=    3e+09 Memory= 10900.022        t= 8.61e+03 R=   2e+04
-Depth=    9554 States= 1.52e+08 Transitions= 3.02e+09 Memory= 10951.096        t= 8.66e+03 R=   2e+04
-Depth=    9554 States= 1.53e+08 Transitions= 3.05e+09 Memory= 11002.365        t= 8.75e+03 R=   2e+04
-Depth=    9554 States= 1.54e+08 Transitions= 3.08e+09 Memory= 11054.611        t= 8.83e+03 R=   2e+04
-Depth=    9554 States= 1.55e+08 Transitions=  3.1e+09 Memory= 11105.783        t= 8.88e+03 R=   2e+04
-Depth=    9554 States= 1.56e+08 Transitions= 3.11e+09 Memory= 11153.830        t= 8.92e+03 R=   2e+04
-Depth=    9554 States= 1.57e+08 Transitions= 3.13e+09 Memory= 11202.365        t= 8.96e+03 R=   2e+04
-Depth=    9554 States= 1.58e+08 Transitions= 3.14e+09 Memory= 11257.443        t=  9e+03 R=   2e+04
-Depth=    9554 States= 1.59e+08 Transitions= 3.17e+09 Memory= 11307.639        t= 9.08e+03 R=   2e+04
-Depth=    9554 States=  1.6e+08 Transitions= 3.19e+09 Memory= 11357.541        t= 9.15e+03 R=   2e+04
-Depth=    9554 States= 1.61e+08 Transitions= 3.21e+09 Memory= 11407.541        t= 9.21e+03 R=   2e+04
-Depth=    9554 States= 1.62e+08 Transitions= 3.24e+09 Memory= 11457.736        t= 9.28e+03 R=   2e+04
-Depth=    9554 States= 1.63e+08 Transitions= 3.27e+09 Memory= 11507.053        t= 9.36e+03 R=   2e+04
-Depth=    9554 States= 1.64e+08 Transitions= 3.29e+09 Memory= 11560.959        t= 9.44e+03 R=   2e+04
-Depth=    9554 States= 1.65e+08 Transitions= 3.31e+09 Memory= 11613.108        t= 9.5e+03 R=   2e+04
-Depth=    9554 States= 1.66e+08 Transitions= 3.34e+09 Memory= 11661.252        t= 9.58e+03 R=   2e+04
-Depth=    9554 States= 1.67e+08 Transitions= 3.37e+09 Memory= 11711.154        t= 9.66e+03 R=   2e+04
-Depth=    9554 States= 1.68e+08 Transitions= 3.39e+09 Memory= 11763.596        t= 9.72e+03 R=   2e+04
-Depth=    9554 States= 1.69e+08 Transitions= 3.41e+09 Memory= 11812.912        t= 9.78e+03 R=   2e+04
-Depth=    9554 States=  1.7e+08 Transitions= 3.44e+09 Memory= 11866.135        t= 9.87e+03 R=   2e+04
-Depth=    9554 States= 1.71e+08 Transitions= 3.46e+09 Memory= 11920.139        t= 9.91e+03 R=   2e+04
-Depth=    9554 States= 1.72e+08 Transitions= 3.47e+09 Memory= 11967.014        t= 9.95e+03 R=   2e+04
-Depth=    9554 States= 1.73e+08 Transitions=  3.5e+09 Memory= 12021.115        t=  1e+04 R=   2e+04
-Depth=    9554 States= 1.74e+08 Transitions= 3.52e+09 Memory= 12075.315        t= 1.01e+04 R=   2e+04
-Depth=    9554 States= 1.75e+08 Transitions= 3.53e+09 Memory= 12126.779        t= 1.01e+04 R=   2e+04
-Depth=    9554 States= 1.76e+08 Transitions= 3.56e+09 Memory= 12180.002        t= 1.02e+04 R=   2e+04
-Depth=    9554 States= 1.77e+08 Transitions= 3.57e+09 Memory= 12229.416        t= 1.02e+04 R=   2e+04
-Depth=    9554 States= 1.78e+08 Transitions= 3.59e+09 Memory= 12282.834        t= 1.03e+04 R=   2e+04
-Depth=    9554 States= 1.79e+08 Transitions= 3.61e+09 Memory= 12334.494        t= 1.03e+04 R=   2e+04
-Depth=    9554 States=  1.8e+08 Transitions= 3.63e+09 Memory= 12387.522        t= 1.04e+04 R=   2e+04
-Depth=    9554 States= 1.81e+08 Transitions= 3.65e+09 Memory= 12440.451        t= 1.05e+04 R=   2e+04
-Depth=    9554 States= 1.82e+08 Transitions= 3.66e+09 Memory= 12492.111        t= 1.05e+04 R=   2e+04
-Depth=    9554 States= 1.83e+08 Transitions= 3.68e+09 Memory= 12544.162        t= 1.05e+04 R=   2e+04
-Depth=    9554 States= 1.84e+08 Transitions= 3.69e+09 Memory= 12594.943        t= 1.06e+04 R=   2e+04
-Depth=    9554 States= 1.85e+08 Transitions= 3.71e+09 Memory= 12645.627        t= 1.06e+04 R=   2e+04
-Depth=    9554 States= 1.86e+08 Transitions= 3.73e+09 Memory= 12695.236        t= 1.07e+04 R=   2e+04
-Depth=    9554 States= 1.87e+08 Transitions= 3.75e+09 Memory= 12750.705        t= 1.07e+04 R=   2e+04
-Depth=    9554 States= 1.88e+08 Transitions= 3.77e+09 Memory= 12807.639        t= 1.08e+04 R=   2e+04
-Depth=    9554 States= 1.89e+08 Transitions= 3.78e+09 Memory= 12855.979        t= 1.08e+04 R=   2e+04
-Depth=    9554 States=  1.9e+08 Transitions=  3.8e+09 Memory= 12909.592        t= 1.09e+04 R=   2e+04
-Depth=    9554 States= 1.91e+08 Transitions= 3.82e+09 Memory= 12959.104        t= 1.09e+04 R=   2e+04
-Depth=    9554 States= 1.92e+08 Transitions= 3.84e+09 Memory= 13008.615        t= 1.1e+04 R=   2e+04
-Depth=    9554 States= 1.93e+08 Transitions= 3.86e+09 Memory= 13065.061        t= 1.11e+04 R=   2e+04
-Depth=    9554 States= 1.94e+08 Transitions= 3.88e+09 Memory= 13114.377        t= 1.11e+04 R=   2e+04
-Depth=    9554 States= 1.95e+08 Transitions=  3.9e+09 Memory= 13168.674        t= 1.12e+04 R=   2e+04
-Depth=    9554 States= 1.96e+08 Transitions= 3.92e+09 Memory= 13222.678        t= 1.12e+04 R=   2e+04
-Depth=    9554 States= 1.97e+08 Transitions= 3.93e+09 Memory= 13271.701        t= 1.13e+04 R=   2e+04
-Depth=    9554 States= 1.98e+08 Transitions= 3.95e+09 Memory= 13324.338        t= 1.13e+04 R=   2e+04
-Depth=    9554 States= 1.99e+08 Transitions= 3.96e+09 Memory= 13377.170        t= 1.13e+04 R=   2e+04
-Depth=    9554 States=    2e+08 Transitions= 3.98e+09 Memory= 13432.639        t= 1.14e+04 R=   2e+04
-Depth=    9554 States= 2.01e+08 Transitions=    4e+09 Memory= 13483.811        t= 1.14e+04 R=   2e+04
-Depth=    9554 States= 2.02e+08 Transitions= 4.03e+09 Memory= 13537.522        t= 1.15e+04 R=   2e+04
-Depth=    9554 States= 2.03e+08 Transitions= 4.04e+09 Memory= 13588.693        t= 1.16e+04 R=   2e+04
-Depth=    9554 States= 2.04e+08 Transitions= 4.06e+09 Memory= 13642.600        t= 1.16e+04 R=   2e+04
-Depth=    9554 States= 2.05e+08 Transitions= 4.08e+09 Memory= 13696.799        t= 1.17e+04 R=   2e+04
-Depth=    9554 States= 2.06e+08 Transitions= 4.09e+09 Memory= 13744.748        t= 1.17e+04 R=   2e+04
-Depth=    9554 States= 2.07e+08 Transitions= 4.11e+09 Memory= 13798.068        t= 1.18e+04 R=   2e+04
-Depth=    9554 States= 2.08e+08 Transitions= 4.13e+09 Memory= 13850.022        t= 1.18e+04 R=   2e+04
-Depth=    9554 States= 2.09e+08 Transitions= 4.14e+09 Memory= 13905.783        t= 1.18e+04 R=   2e+04
-Depth=    9554 States=  2.1e+08 Transitions= 4.16e+09 Memory= 13952.365        t= 1.19e+04 R=   2e+04
-Depth=    9554 States= 2.11e+08 Transitions= 4.18e+09 Memory= 14003.244        t= 1.19e+04 R=   2e+04
-Depth=    9554 States= 2.12e+08 Transitions= 4.19e+09 Memory= 14054.318        t= 1.2e+04 R=   2e+04
-Depth=    9554 States= 2.13e+08 Transitions= 4.21e+09 Memory= 14106.076        t= 1.2e+04 R=   2e+04
-Depth=    9554 States= 2.14e+08 Transitions= 4.22e+09 Memory= 14156.662        t= 1.21e+04 R=   2e+04
-Depth=    9554 States= 2.15e+08 Transitions= 4.26e+09 Memory= 14209.690        t= 1.22e+04 R=   2e+04
-Depth=    9554 States= 2.16e+08 Transitions= 4.29e+09 Memory= 14265.256        t= 1.23e+04 R=   2e+04
-Depth=    9554 States= 2.17e+08 Transitions=  4.3e+09 Memory= 14317.697        t= 1.23e+04 R=   2e+04
-Depth=    9554 States= 2.18e+08 Transitions= 4.32e+09 Memory= 14371.311        t= 1.23e+04 R=   2e+04
-Depth=    9554 States= 2.19e+08 Transitions= 4.33e+09 Memory= 14424.045        t= 1.24e+04 R=   2e+04
-Depth=    9554 States=  2.2e+08 Transitions= 4.35e+09 Memory= 14477.854        t= 1.24e+04 R=   2e+04
-Depth=    9554 States= 2.21e+08 Transitions= 4.37e+09 Memory= 14529.611        t= 1.25e+04 R=   2e+04
-Depth=    9554 States= 2.22e+08 Transitions=  4.4e+09 Memory= 14576.291        t= 1.26e+04 R=   2e+04
-Depth=    9554 States= 2.23e+08 Transitions= 4.43e+09 Memory= 14625.608        t= 1.27e+04 R=   2e+04
-Depth=    9554 States= 2.24e+08 Transitions= 4.45e+09 Memory= 14674.045        t= 1.27e+04 R=   2e+04
-Depth=    9554 States= 2.25e+08 Transitions= 4.48e+09 Memory= 14722.776        t= 1.28e+04 R=   2e+04
-Depth=    9554 States= 2.26e+08 Transitions=  4.5e+09 Memory= 14770.529        t= 1.29e+04 R=   2e+04
-Depth=    9554 States= 2.27e+08 Transitions= 4.52e+09 Memory= 14821.018        t= 1.29e+04 R=   2e+04
-Depth=    9554 States= 2.28e+08 Transitions= 4.54e+09 Memory= 14870.529        t= 1.3e+04 R=   2e+04
-Depth=    9554 States= 2.29e+08 Transitions= 4.56e+09 Memory= 14918.967        t= 1.3e+04 R=   2e+04
-Depth=    9554 States=  2.3e+08 Transitions= 4.59e+09 Memory= 14966.916        t= 1.31e+04 R=   2e+04
-Depth=    9554 States= 2.31e+08 Transitions=  4.6e+09 Memory= 15017.600        t= 1.32e+04 R=   2e+04
-Depth=    9554 States= 2.32e+08 Transitions= 4.63e+09 Memory= 15066.330        t= 1.32e+04 R=   2e+04
diff --git a/formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer_error.define b/formal-model/urcu-controldataflow-intel-ipi/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/.input.spin b/formal-model/urcu-controldataflow-intel-no-ipi/.input.spin
deleted file mode 100644 (file)
index 3191ba1..0000000
+++ /dev/null
@@ -1,1272 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/DEFINES b/formal-model/urcu-controldataflow-intel-no-ipi/DEFINES
deleted file mode 100644 (file)
index b4d92d7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/Makefile b/formal-model/urcu-controldataflow-intel-no-ipi/Makefile
deleted file mode 100644 (file)
index de47dff..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/asserts.log b/formal-model/urcu-controldataflow-intel-no-ipi/asserts.log
deleted file mode 100644 (file)
index fe09a53..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-Depth=    4473 States=    1e+06 Transitions= 2.37e+07 Memory=   542.619        t=   57.3 R=   2e+04
-Depth=    4540 States=    2e+06 Transitions=  4.8e+07 Memory=   618.889        t=    117 R=   2e+04
-Depth=    4540 States=    3e+06 Transitions= 7.25e+07 Memory=   695.158        t=    178 R=   2e+04
-pan: resizing hashtable to -w22..  done
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 72 byte, depth reached 4540, errors: 0
-  3841511 states, stored
- 90242688 states, matched
- 94084199 transitions (= stored+matched)
-1.5073578e+09 atomic steps
-hash conflicts:  63759942 (resolved)
-
-Stats on memory usage (in Megabytes):
-  366.355      equivalent memory usage for states (stored*(State-vector + overhead))
-  300.680      actual memory usage for states (compression: 82.07%)
-               state-vector as stored = 54 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  790.440      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 410, ".input.spin", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 81, "(1)"
-       line 256, ".input.spin", state 101, "(1)"
-       line 260, ".input.spin", state 109, "(1)"
-       line 596, ".input.spin", state 128, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 410, ".input.spin", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 199, "(1)"
-       line 256, ".input.spin", state 219, "(1)"
-       line 260, ".input.spin", state 227, "(1)"
-       line 410, ".input.spin", state 246, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 278, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 292, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 310, "(1)"
-       line 256, ".input.spin", state 330, "(1)"
-       line 260, ".input.spin", state 338, "(1)"
-       line 410, ".input.spin", state 359, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, ".input.spin", state 361, "(1)"
-       line 410, ".input.spin", state 362, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, ".input.spin", state 362, "else"
-       line 410, ".input.spin", state 365, "(1)"
-       line 414, ".input.spin", state 373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 375, "(1)"
-       line 414, ".input.spin", state 376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, ".input.spin", state 376, "else"
-       line 414, ".input.spin", state 379, "(1)"
-       line 414, ".input.spin", state 380, "(1)"
-       line 414, ".input.spin", state 380, "(1)"
-       line 412, ".input.spin", state 385, "((i<1))"
-       line 412, ".input.spin", state 385, "((i>=1))"
-       line 419, ".input.spin", state 391, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 393, "(1)"
-       line 419, ".input.spin", state 394, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, ".input.spin", state 394, "else"
-       line 419, ".input.spin", state 397, "(1)"
-       line 419, ".input.spin", state 398, "(1)"
-       line 419, ".input.spin", state 398, "(1)"
-       line 423, ".input.spin", state 405, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 407, "(1)"
-       line 423, ".input.spin", state 408, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, ".input.spin", state 408, "else"
-       line 423, ".input.spin", state 411, "(1)"
-       line 423, ".input.spin", state 412, "(1)"
-       line 423, ".input.spin", state 412, "(1)"
-       line 421, ".input.spin", state 417, "((i<2))"
-       line 421, ".input.spin", state 417, "((i>=2))"
-       line 248, ".input.spin", state 423, "(1)"
-       line 252, ".input.spin", state 431, "(1)"
-       line 252, ".input.spin", state 432, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, ".input.spin", state 432, "else"
-       line 250, ".input.spin", state 437, "((i<1))"
-       line 250, ".input.spin", state 437, "((i>=1))"
-       line 256, ".input.spin", state 443, "(1)"
-       line 256, ".input.spin", state 444, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, ".input.spin", state 444, "else"
-       line 260, ".input.spin", state 451, "(1)"
-       line 260, ".input.spin", state 452, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, ".input.spin", state 452, "else"
-       line 258, ".input.spin", state 457, "((i<2))"
-       line 258, ".input.spin", state 457, "((i>=2))"
-       line 265, ".input.spin", state 461, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, ".input.spin", state 461, "else"
-       line 430, ".input.spin", state 463, "(1)"
-       line 430, ".input.spin", state 463, "(1)"
-       line 596, ".input.spin", state 466, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 596, ".input.spin", state 467, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 596, ".input.spin", state 468, "(1)"
-       line 271, ".input.spin", state 472, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, ".input.spin", state 483, "(1)"
-       line 279, ".input.spin", state 494, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 519, "(1)"
-       line 252, ".input.spin", state 527, "(1)"
-       line 256, ".input.spin", state 539, "(1)"
-       line 260, ".input.spin", state 547, "(1)"
-       line 410, ".input.spin", state 565, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 579, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 597, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 611, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 629, "(1)"
-       line 252, ".input.spin", state 637, "(1)"
-       line 256, ".input.spin", state 649, "(1)"
-       line 260, ".input.spin", state 657, "(1)"
-       line 410, ".input.spin", state 683, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 715, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 729, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 747, "(1)"
-       line 256, ".input.spin", state 767, "(1)"
-       line 260, ".input.spin", state 775, "(1)"
-       line 410, ".input.spin", state 794, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, ".input.spin", state 796, "(1)"
-       line 410, ".input.spin", state 797, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, ".input.spin", state 797, "else"
-       line 410, ".input.spin", state 800, "(1)"
-       line 414, ".input.spin", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 810, "(1)"
-       line 414, ".input.spin", state 811, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, ".input.spin", state 811, "else"
-       line 414, ".input.spin", state 814, "(1)"
-       line 414, ".input.spin", state 815, "(1)"
-       line 414, ".input.spin", state 815, "(1)"
-       line 412, ".input.spin", state 820, "((i<1))"
-       line 412, ".input.spin", state 820, "((i>=1))"
-       line 419, ".input.spin", state 826, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 828, "(1)"
-       line 419, ".input.spin", state 829, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, ".input.spin", state 829, "else"
-       line 419, ".input.spin", state 832, "(1)"
-       line 419, ".input.spin", state 833, "(1)"
-       line 419, ".input.spin", state 833, "(1)"
-       line 423, ".input.spin", state 840, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 842, "(1)"
-       line 423, ".input.spin", state 843, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, ".input.spin", state 843, "else"
-       line 423, ".input.spin", state 846, "(1)"
-       line 423, ".input.spin", state 847, "(1)"
-       line 423, ".input.spin", state 847, "(1)"
-       line 421, ".input.spin", state 852, "((i<2))"
-       line 421, ".input.spin", state 852, "((i>=2))"
-       line 248, ".input.spin", state 858, "(1)"
-       line 252, ".input.spin", state 866, "(1)"
-       line 252, ".input.spin", state 867, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, ".input.spin", state 867, "else"
-       line 250, ".input.spin", state 872, "((i<1))"
-       line 250, ".input.spin", state 872, "((i>=1))"
-       line 256, ".input.spin", state 878, "(1)"
-       line 256, ".input.spin", state 879, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, ".input.spin", state 879, "else"
-       line 260, ".input.spin", state 886, "(1)"
-       line 260, ".input.spin", state 887, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, ".input.spin", state 887, "else"
-       line 258, ".input.spin", state 892, "((i<2))"
-       line 258, ".input.spin", state 892, "((i>=2))"
-       line 265, ".input.spin", state 896, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, ".input.spin", state 896, "else"
-       line 430, ".input.spin", state 898, "(1)"
-       line 430, ".input.spin", state 898, "(1)"
-       line 604, ".input.spin", state 902, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 410, ".input.spin", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 921, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 971, "(1)"
-       line 252, ".input.spin", state 979, "(1)"
-       line 256, ".input.spin", state 991, "(1)"
-       line 260, ".input.spin", state 999, "(1)"
-       line 410, ".input.spin", state 1021, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1053, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1067, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1085, "(1)"
-       line 256, ".input.spin", state 1105, "(1)"
-       line 260, ".input.spin", state 1113, "(1)"
-       line 410, ".input.spin", state 1136, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1168, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1182, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1200, "(1)"
-       line 256, ".input.spin", state 1220, "(1)"
-       line 260, ".input.spin", state 1228, "(1)"
-       line 410, ".input.spin", state 1247, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1279, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1293, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1311, "(1)"
-       line 256, ".input.spin", state 1331, "(1)"
-       line 260, ".input.spin", state 1339, "(1)"
-       line 271, ".input.spin", state 1360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 1382, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 1391, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1407, "(1)"
-       line 252, ".input.spin", state 1415, "(1)"
-       line 256, ".input.spin", state 1427, "(1)"
-       line 260, ".input.spin", state 1435, "(1)"
-       line 410, ".input.spin", state 1453, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 1467, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1485, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1499, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1517, "(1)"
-       line 252, ".input.spin", state 1525, "(1)"
-       line 256, ".input.spin", state 1537, "(1)"
-       line 260, ".input.spin", state 1545, "(1)"
-       line 410, ".input.spin", state 1564, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1596, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1610, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1628, "(1)"
-       line 252, ".input.spin", state 1636, "(1)"
-       line 256, ".input.spin", state 1648, "(1)"
-       line 260, ".input.spin", state 1656, "(1)"
-       line 410, ".input.spin", state 1678, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1710, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1724, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1742, "(1)"
-       line 256, ".input.spin", state 1762, "(1)"
-       line 260, ".input.spin", state 1770, "(1)"
-       line 643, ".input.spin", state 1789, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 410, ".input.spin", state 1796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1828, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1842, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1860, "(1)"
-       line 256, ".input.spin", state 1880, "(1)"
-       line 260, ".input.spin", state 1888, "(1)"
-       line 410, ".input.spin", state 1907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 1939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 1953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1971, "(1)"
-       line 256, ".input.spin", state 1991, "(1)"
-       line 260, ".input.spin", state 1999, "(1)"
-       line 410, ".input.spin", state 2020, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, ".input.spin", state 2022, "(1)"
-       line 410, ".input.spin", state 2023, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, ".input.spin", state 2023, "else"
-       line 410, ".input.spin", state 2026, "(1)"
-       line 414, ".input.spin", state 2034, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 2036, "(1)"
-       line 414, ".input.spin", state 2037, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, ".input.spin", state 2037, "else"
-       line 414, ".input.spin", state 2040, "(1)"
-       line 414, ".input.spin", state 2041, "(1)"
-       line 414, ".input.spin", state 2041, "(1)"
-       line 412, ".input.spin", state 2046, "((i<1))"
-       line 412, ".input.spin", state 2046, "((i>=1))"
-       line 419, ".input.spin", state 2052, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2054, "(1)"
-       line 419, ".input.spin", state 2055, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, ".input.spin", state 2055, "else"
-       line 419, ".input.spin", state 2058, "(1)"
-       line 419, ".input.spin", state 2059, "(1)"
-       line 419, ".input.spin", state 2059, "(1)"
-       line 423, ".input.spin", state 2066, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2068, "(1)"
-       line 423, ".input.spin", state 2069, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, ".input.spin", state 2069, "else"
-       line 423, ".input.spin", state 2072, "(1)"
-       line 423, ".input.spin", state 2073, "(1)"
-       line 423, ".input.spin", state 2073, "(1)"
-       line 421, ".input.spin", state 2078, "((i<2))"
-       line 421, ".input.spin", state 2078, "((i>=2))"
-       line 248, ".input.spin", state 2084, "(1)"
-       line 252, ".input.spin", state 2092, "(1)"
-       line 252, ".input.spin", state 2093, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, ".input.spin", state 2093, "else"
-       line 250, ".input.spin", state 2098, "((i<1))"
-       line 250, ".input.spin", state 2098, "((i>=1))"
-       line 256, ".input.spin", state 2104, "(1)"
-       line 256, ".input.spin", state 2105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, ".input.spin", state 2105, "else"
-       line 260, ".input.spin", state 2112, "(1)"
-       line 260, ".input.spin", state 2113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, ".input.spin", state 2113, "else"
-       line 258, ".input.spin", state 2118, "((i<2))"
-       line 258, ".input.spin", state 2118, "((i>=2))"
-       line 265, ".input.spin", state 2122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, ".input.spin", state 2122, "else"
-       line 430, ".input.spin", state 2124, "(1)"
-       line 430, ".input.spin", state 2124, "(1)"
-       line 643, ".input.spin", state 2127, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 643, ".input.spin", state 2128, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 643, ".input.spin", state 2129, "(1)"
-       line 271, ".input.spin", state 2133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 2155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 2164, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 2180, "(1)"
-       line 252, ".input.spin", state 2188, "(1)"
-       line 256, ".input.spin", state 2200, "(1)"
-       line 260, ".input.spin", state 2208, "(1)"
-       line 410, ".input.spin", state 2226, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 2240, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2258, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2272, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 2290, "(1)"
-       line 252, ".input.spin", state 2298, "(1)"
-       line 256, ".input.spin", state 2310, "(1)"
-       line 260, ".input.spin", state 2318, "(1)"
-       line 271, ".input.spin", state 2340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, ".input.spin", state 2349, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 2362, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 2371, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 2387, "(1)"
-       line 252, ".input.spin", state 2395, "(1)"
-       line 256, ".input.spin", state 2407, "(1)"
-       line 260, ".input.spin", state 2415, "(1)"
-       line 410, ".input.spin", state 2433, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 2447, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2479, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 2497, "(1)"
-       line 252, ".input.spin", state 2505, "(1)"
-       line 256, ".input.spin", state 2517, "(1)"
-       line 260, ".input.spin", state 2525, "(1)"
-       line 410, ".input.spin", state 2544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 2558, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 2576, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 2590, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 2608, "(1)"
-       line 252, ".input.spin", state 2616, "(1)"
-       line 256, ".input.spin", state 2628, "(1)"
-       line 260, ".input.spin", state 2636, "(1)"
-       line 248, ".input.spin", state 2667, "(1)"
-       line 256, ".input.spin", state 2687, "(1)"
-       line 260, ".input.spin", state 2695, "(1)"
-       line 248, ".input.spin", state 2710, "(1)"
-       line 252, ".input.spin", state 2718, "(1)"
-       line 256, ".input.spin", state 2730, "(1)"
-       line 260, ".input.spin", state 2738, "(1)"
-       line 897, ".input.spin", state 2755, "-end-"
-       (259 of 2755 states)
-unreached in proctype urcu_writer
-       line 410, ".input.spin", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 82, "(1)"
-       line 252, ".input.spin", state 90, "(1)"
-       line 256, ".input.spin", state 102, "(1)"
-       line 271, ".input.spin", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, ".input.spin", state 140, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 153, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 410, ".input.spin", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, ".input.spin", state 207, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 225, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 239, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 257, "(1)"
-       line 252, ".input.spin", state 265, "(1)"
-       line 256, ".input.spin", state 277, "(1)"
-       line 260, ".input.spin", state 285, "(1)"
-       line 414, ".input.spin", state 320, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 338, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 352, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, ".input.spin", state 378, "(1)"
-       line 256, ".input.spin", state 390, "(1)"
-       line 260, ".input.spin", state 398, "(1)"
-       line 414, ".input.spin", state 441, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, ".input.spin", state 499, "(1)"
-       line 256, ".input.spin", state 511, "(1)"
-       line 260, ".input.spin", state 519, "(1)"
-       line 414, ".input.spin", state 552, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 570, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 584, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, ".input.spin", state 610, "(1)"
-       line 256, ".input.spin", state 622, "(1)"
-       line 260, ".input.spin", state 630, "(1)"
-       line 414, ".input.spin", state 665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, ".input.spin", state 683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, ".input.spin", state 697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, ".input.spin", state 723, "(1)"
-       line 256, ".input.spin", state 735, "(1)"
-       line 260, ".input.spin", state 743, "(1)"
-       line 271, ".input.spin", state 796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, ".input.spin", state 805, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 820, "(1)"
-       line 283, ".input.spin", state 827, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 843, "(1)"
-       line 252, ".input.spin", state 851, "(1)"
-       line 256, ".input.spin", state 863, "(1)"
-       line 260, ".input.spin", state 871, "(1)"
-       line 275, ".input.spin", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 909, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 918, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 934, "(1)"
-       line 252, ".input.spin", state 942, "(1)"
-       line 256, ".input.spin", state 954, "(1)"
-       line 260, ".input.spin", state 962, "(1)"
-       line 275, ".input.spin", state 987, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 1000, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 1009, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1025, "(1)"
-       line 252, ".input.spin", state 1033, "(1)"
-       line 256, ".input.spin", state 1045, "(1)"
-       line 260, ".input.spin", state 1053, "(1)"
-       line 275, ".input.spin", state 1078, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, ".input.spin", state 1091, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, ".input.spin", state 1100, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, ".input.spin", state 1116, "(1)"
-       line 252, ".input.spin", state 1124, "(1)"
-       line 256, ".input.spin", state 1136, "(1)"
-       line 260, ".input.spin", state 1144, "(1)"
-       line 1236, ".input.spin", state 1159, "-end-"
-       (71 of 1159 states)
-unreached in proctype :init:
-       (0 of 78 states)
-
-pan: elapsed time 231 seconds
-pan: rate 16628.478 states/second
-pan: avg transition delay 2.4555e-06 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/asserts.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/asserts.spin.input
deleted file mode 100644 (file)
index 3191ba1..0000000
+++ /dev/null
@@ -1,1272 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/references.txt b/formal-model/urcu-controldataflow-intel-no-ipi/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu.sh b/formal-model/urcu-controldataflow-intel-no-ipi/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu.spin b/formal-model/urcu-controldataflow-intel-no-ipi/urcu.spin
deleted file mode 100644 (file)
index 54752a1..0000000
+++ /dev/null
@@ -1,1254 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.log b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.log
deleted file mode 100644 (file)
index aaa4217..0000000
+++ /dev/null
@@ -1,440 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1294)
-Depth=    4900 States=    1e+06 Transitions= 2.37e+07 Memory=   550.334        t=   65.5 R=   2e+04
-Depth=    4973 States=    2e+06 Transitions=  4.8e+07 Memory=   634.221        t=    134 R=   1e+04
-Depth=    4973 States=    3e+06 Transitions= 7.25e+07 Memory=   718.205        t=    204 R=   1e+04
-pan: resizing hashtable to -w22..  done
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 4973, errors: 0
-  3841511 states, stored
- 90254094 states, matched
- 94095605 transitions (= stored+matched)
-1.5073578e+09 atomic steps
-hash conflicts:  63765708 (resolved)
-
-Stats on memory usage (in Megabytes):
-  424.972      equivalent memory usage for states (stored*(State-vector + overhead))
-  330.368      actual memory usage for states (compression: 77.74%)
-               state-vector as stored = 62 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  819.932      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 410, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 81, "(1)"
-       line 256, "pan.___", state 101, "(1)"
-       line 260, "pan.___", state 109, "(1)"
-       line 596, "pan.___", state 128, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 410, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 199, "(1)"
-       line 256, "pan.___", state 219, "(1)"
-       line 260, "pan.___", state 227, "(1)"
-       line 410, "pan.___", state 246, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 278, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 292, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 310, "(1)"
-       line 256, "pan.___", state 330, "(1)"
-       line 260, "pan.___", state 338, "(1)"
-       line 410, "pan.___", state 359, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 361, "(1)"
-       line 410, "pan.___", state 362, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 362, "else"
-       line 410, "pan.___", state 365, "(1)"
-       line 414, "pan.___", state 373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 375, "(1)"
-       line 414, "pan.___", state 376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 376, "else"
-       line 414, "pan.___", state 379, "(1)"
-       line 414, "pan.___", state 380, "(1)"
-       line 414, "pan.___", state 380, "(1)"
-       line 412, "pan.___", state 385, "((i<1))"
-       line 412, "pan.___", state 385, "((i>=1))"
-       line 419, "pan.___", state 391, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 393, "(1)"
-       line 419, "pan.___", state 394, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 394, "else"
-       line 419, "pan.___", state 397, "(1)"
-       line 419, "pan.___", state 398, "(1)"
-       line 419, "pan.___", state 398, "(1)"
-       line 423, "pan.___", state 405, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 407, "(1)"
-       line 423, "pan.___", state 408, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 408, "else"
-       line 423, "pan.___", state 411, "(1)"
-       line 423, "pan.___", state 412, "(1)"
-       line 423, "pan.___", state 412, "(1)"
-       line 421, "pan.___", state 417, "((i<2))"
-       line 421, "pan.___", state 417, "((i>=2))"
-       line 248, "pan.___", state 423, "(1)"
-       line 252, "pan.___", state 431, "(1)"
-       line 252, "pan.___", state 432, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, "pan.___", state 432, "else"
-       line 250, "pan.___", state 437, "((i<1))"
-       line 250, "pan.___", state 437, "((i>=1))"
-       line 256, "pan.___", state 443, "(1)"
-       line 256, "pan.___", state 444, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, "pan.___", state 444, "else"
-       line 260, "pan.___", state 451, "(1)"
-       line 260, "pan.___", state 452, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, "pan.___", state 452, "else"
-       line 258, "pan.___", state 457, "((i<2))"
-       line 258, "pan.___", state 457, "((i>=2))"
-       line 265, "pan.___", state 461, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, "pan.___", state 461, "else"
-       line 430, "pan.___", state 463, "(1)"
-       line 430, "pan.___", state 463, "(1)"
-       line 596, "pan.___", state 466, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 596, "pan.___", state 467, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 596, "pan.___", state 468, "(1)"
-       line 271, "pan.___", state 472, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 483, "(1)"
-       line 279, "pan.___", state 494, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 519, "(1)"
-       line 252, "pan.___", state 527, "(1)"
-       line 256, "pan.___", state 539, "(1)"
-       line 260, "pan.___", state 547, "(1)"
-       line 410, "pan.___", state 565, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 579, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 597, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 611, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 629, "(1)"
-       line 252, "pan.___", state 637, "(1)"
-       line 256, "pan.___", state 649, "(1)"
-       line 260, "pan.___", state 657, "(1)"
-       line 410, "pan.___", state 683, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 715, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 729, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 747, "(1)"
-       line 256, "pan.___", state 767, "(1)"
-       line 260, "pan.___", state 775, "(1)"
-       line 410, "pan.___", state 794, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 796, "(1)"
-       line 410, "pan.___", state 797, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 797, "else"
-       line 410, "pan.___", state 800, "(1)"
-       line 414, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 810, "(1)"
-       line 414, "pan.___", state 811, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 811, "else"
-       line 414, "pan.___", state 814, "(1)"
-       line 414, "pan.___", state 815, "(1)"
-       line 414, "pan.___", state 815, "(1)"
-       line 412, "pan.___", state 820, "((i<1))"
-       line 412, "pan.___", state 820, "((i>=1))"
-       line 419, "pan.___", state 826, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 828, "(1)"
-       line 419, "pan.___", state 829, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 829, "else"
-       line 419, "pan.___", state 832, "(1)"
-       line 419, "pan.___", state 833, "(1)"
-       line 419, "pan.___", state 833, "(1)"
-       line 423, "pan.___", state 840, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 842, "(1)"
-       line 423, "pan.___", state 843, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 843, "else"
-       line 423, "pan.___", state 846, "(1)"
-       line 423, "pan.___", state 847, "(1)"
-       line 423, "pan.___", state 847, "(1)"
-       line 421, "pan.___", state 852, "((i<2))"
-       line 421, "pan.___", state 852, "((i>=2))"
-       line 248, "pan.___", state 858, "(1)"
-       line 252, "pan.___", state 866, "(1)"
-       line 252, "pan.___", state 867, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, "pan.___", state 867, "else"
-       line 250, "pan.___", state 872, "((i<1))"
-       line 250, "pan.___", state 872, "((i>=1))"
-       line 256, "pan.___", state 878, "(1)"
-       line 256, "pan.___", state 879, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, "pan.___", state 879, "else"
-       line 260, "pan.___", state 886, "(1)"
-       line 260, "pan.___", state 887, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, "pan.___", state 887, "else"
-       line 258, "pan.___", state 892, "((i<2))"
-       line 258, "pan.___", state 892, "((i>=2))"
-       line 265, "pan.___", state 896, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, "pan.___", state 896, "else"
-       line 430, "pan.___", state 898, "(1)"
-       line 430, "pan.___", state 898, "(1)"
-       line 604, "pan.___", state 902, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 410, "pan.___", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 921, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 971, "(1)"
-       line 252, "pan.___", state 979, "(1)"
-       line 256, "pan.___", state 991, "(1)"
-       line 260, "pan.___", state 999, "(1)"
-       line 410, "pan.___", state 1021, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1053, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1067, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1085, "(1)"
-       line 256, "pan.___", state 1105, "(1)"
-       line 260, "pan.___", state 1113, "(1)"
-       line 410, "pan.___", state 1136, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1168, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1182, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1200, "(1)"
-       line 256, "pan.___", state 1220, "(1)"
-       line 260, "pan.___", state 1228, "(1)"
-       line 410, "pan.___", state 1247, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1279, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1293, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1311, "(1)"
-       line 256, "pan.___", state 1331, "(1)"
-       line 260, "pan.___", state 1339, "(1)"
-       line 271, "pan.___", state 1360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1382, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1391, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1407, "(1)"
-       line 252, "pan.___", state 1415, "(1)"
-       line 256, "pan.___", state 1427, "(1)"
-       line 260, "pan.___", state 1435, "(1)"
-       line 410, "pan.___", state 1453, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1467, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1485, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1499, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1517, "(1)"
-       line 252, "pan.___", state 1525, "(1)"
-       line 256, "pan.___", state 1537, "(1)"
-       line 260, "pan.___", state 1545, "(1)"
-       line 410, "pan.___", state 1564, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1596, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1610, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1628, "(1)"
-       line 252, "pan.___", state 1636, "(1)"
-       line 256, "pan.___", state 1648, "(1)"
-       line 260, "pan.___", state 1656, "(1)"
-       line 410, "pan.___", state 1678, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1710, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1724, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1742, "(1)"
-       line 256, "pan.___", state 1762, "(1)"
-       line 260, "pan.___", state 1770, "(1)"
-       line 643, "pan.___", state 1789, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 410, "pan.___", state 1796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1828, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1842, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1860, "(1)"
-       line 256, "pan.___", state 1880, "(1)"
-       line 260, "pan.___", state 1888, "(1)"
-       line 410, "pan.___", state 1907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 1939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 1953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1971, "(1)"
-       line 256, "pan.___", state 1991, "(1)"
-       line 260, "pan.___", state 1999, "(1)"
-       line 410, "pan.___", state 2020, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 2022, "(1)"
-       line 410, "pan.___", state 2023, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 410, "pan.___", state 2023, "else"
-       line 410, "pan.___", state 2026, "(1)"
-       line 414, "pan.___", state 2034, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2036, "(1)"
-       line 414, "pan.___", state 2037, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 414, "pan.___", state 2037, "else"
-       line 414, "pan.___", state 2040, "(1)"
-       line 414, "pan.___", state 2041, "(1)"
-       line 414, "pan.___", state 2041, "(1)"
-       line 412, "pan.___", state 2046, "((i<1))"
-       line 412, "pan.___", state 2046, "((i>=1))"
-       line 419, "pan.___", state 2052, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2054, "(1)"
-       line 419, "pan.___", state 2055, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 419, "pan.___", state 2055, "else"
-       line 419, "pan.___", state 2058, "(1)"
-       line 419, "pan.___", state 2059, "(1)"
-       line 419, "pan.___", state 2059, "(1)"
-       line 423, "pan.___", state 2066, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2068, "(1)"
-       line 423, "pan.___", state 2069, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 423, "pan.___", state 2069, "else"
-       line 423, "pan.___", state 2072, "(1)"
-       line 423, "pan.___", state 2073, "(1)"
-       line 423, "pan.___", state 2073, "(1)"
-       line 421, "pan.___", state 2078, "((i<2))"
-       line 421, "pan.___", state 2078, "((i>=2))"
-       line 248, "pan.___", state 2084, "(1)"
-       line 252, "pan.___", state 2092, "(1)"
-       line 252, "pan.___", state 2093, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 252, "pan.___", state 2093, "else"
-       line 250, "pan.___", state 2098, "((i<1))"
-       line 250, "pan.___", state 2098, "((i>=1))"
-       line 256, "pan.___", state 2104, "(1)"
-       line 256, "pan.___", state 2105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 256, "pan.___", state 2105, "else"
-       line 260, "pan.___", state 2112, "(1)"
-       line 260, "pan.___", state 2113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 260, "pan.___", state 2113, "else"
-       line 258, "pan.___", state 2118, "((i<2))"
-       line 258, "pan.___", state 2118, "((i>=2))"
-       line 265, "pan.___", state 2122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 265, "pan.___", state 2122, "else"
-       line 430, "pan.___", state 2124, "(1)"
-       line 430, "pan.___", state 2124, "(1)"
-       line 643, "pan.___", state 2127, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 643, "pan.___", state 2128, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 643, "pan.___", state 2129, "(1)"
-       line 271, "pan.___", state 2133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 2155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 2164, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2180, "(1)"
-       line 252, "pan.___", state 2188, "(1)"
-       line 256, "pan.___", state 2200, "(1)"
-       line 260, "pan.___", state 2208, "(1)"
-       line 410, "pan.___", state 2226, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2240, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2258, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2272, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2290, "(1)"
-       line 252, "pan.___", state 2298, "(1)"
-       line 256, "pan.___", state 2310, "(1)"
-       line 260, "pan.___", state 2318, "(1)"
-       line 271, "pan.___", state 2340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 2349, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 2362, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 2371, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2387, "(1)"
-       line 252, "pan.___", state 2395, "(1)"
-       line 256, "pan.___", state 2407, "(1)"
-       line 260, "pan.___", state 2415, "(1)"
-       line 410, "pan.___", state 2433, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2447, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2479, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2497, "(1)"
-       line 252, "pan.___", state 2505, "(1)"
-       line 256, "pan.___", state 2517, "(1)"
-       line 260, "pan.___", state 2525, "(1)"
-       line 410, "pan.___", state 2544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2558, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 2576, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 2590, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 2608, "(1)"
-       line 252, "pan.___", state 2616, "(1)"
-       line 256, "pan.___", state 2628, "(1)"
-       line 260, "pan.___", state 2636, "(1)"
-       line 248, "pan.___", state 2667, "(1)"
-       line 256, "pan.___", state 2687, "(1)"
-       line 260, "pan.___", state 2695, "(1)"
-       line 248, "pan.___", state 2710, "(1)"
-       line 252, "pan.___", state 2718, "(1)"
-       line 256, "pan.___", state 2730, "(1)"
-       line 260, "pan.___", state 2738, "(1)"
-       line 897, "pan.___", state 2755, "-end-"
-       (259 of 2755 states)
-unreached in proctype urcu_writer
-       line 410, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 82, "(1)"
-       line 252, "pan.___", state 90, "(1)"
-       line 256, "pan.___", state 102, "(1)"
-       line 271, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 140, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 153, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 207, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 225, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 239, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 257, "(1)"
-       line 252, "pan.___", state 265, "(1)"
-       line 256, "pan.___", state 277, "(1)"
-       line 260, "pan.___", state 285, "(1)"
-       line 414, "pan.___", state 320, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 338, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 352, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, "pan.___", state 378, "(1)"
-       line 256, "pan.___", state 390, "(1)"
-       line 260, "pan.___", state 398, "(1)"
-       line 414, "pan.___", state 441, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, "pan.___", state 499, "(1)"
-       line 256, "pan.___", state 511, "(1)"
-       line 260, "pan.___", state 519, "(1)"
-       line 414, "pan.___", state 552, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 570, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 584, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, "pan.___", state 610, "(1)"
-       line 256, "pan.___", state 622, "(1)"
-       line 260, "pan.___", state 630, "(1)"
-       line 414, "pan.___", state 665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 419, "pan.___", state 683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 423, "pan.___", state 697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 252, "pan.___", state 723, "(1)"
-       line 256, "pan.___", state 735, "(1)"
-       line 260, "pan.___", state 743, "(1)"
-       line 271, "pan.___", state 796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 805, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 820, "(1)"
-       line 283, "pan.___", state 827, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 843, "(1)"
-       line 252, "pan.___", state 851, "(1)"
-       line 256, "pan.___", state 863, "(1)"
-       line 260, "pan.___", state 871, "(1)"
-       line 275, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 909, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 918, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 934, "(1)"
-       line 252, "pan.___", state 942, "(1)"
-       line 256, "pan.___", state 954, "(1)"
-       line 260, "pan.___", state 962, "(1)"
-       line 275, "pan.___", state 987, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1000, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1009, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1025, "(1)"
-       line 252, "pan.___", state 1033, "(1)"
-       line 256, "pan.___", state 1045, "(1)"
-       line 260, "pan.___", state 1053, "(1)"
-       line 275, "pan.___", state 1078, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 279, "pan.___", state 1091, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1100, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 248, "pan.___", state 1116, "(1)"
-       line 252, "pan.___", state 1124, "(1)"
-       line 256, "pan.___", state 1136, "(1)"
-       line 260, "pan.___", state 1144, "(1)"
-       line 1236, "pan.___", state 1159, "-end-"
-       (71 of 1159 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1299, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 265 seconds
-pan: rate 14518.182 states/second
-pan: avg transition delay 2.812e-06 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.ltl b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.ltl
deleted file mode 100644 (file)
index 6be1be9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!read_poison)
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free.spin.input
deleted file mode 100644 (file)
index 3191ba1..0000000
+++ /dev/null
@@ -1,1272 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_nested.define b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.define b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.define
deleted file mode 100644 (file)
index d99d793..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_MB
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.log b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 4cf70c8..0000000
+++ /dev/null
@@ -1,639 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    8086 States=    1e+06 Transitions= 1.91e+07 Memory=   550.334        t=   51.2 R=   2e+04
-Depth=    8086 States=    2e+06 Transitions= 3.68e+07 Memory=   634.318        t=   98.4 R=   2e+04
-Depth=    8086 States=    3e+06 Transitions= 5.68e+07 Memory=   718.205        t=    153 R=   2e+04
-pan: resizing hashtable to -w22..  done
-Depth=    8086 States=    4e+06 Transitions= 7.01e+07 Memory=   833.213        t=    188 R=   2e+04
-Depth=    8086 States=    5e+06 Transitions= 8.42e+07 Memory=   917.197        t=    225 R=   2e+04
-Depth=    8086 States=    6e+06 Transitions= 9.87e+07 Memory=  1001.182        t=    263 R=   2e+04
-Depth=    8086 States=    7e+06 Transitions= 1.12e+08 Memory=  1085.166        t=    298 R=   2e+04
-Depth=    8086 States=    8e+06 Transitions= 1.28e+08 Memory=  1169.053        t=    342 R=   2e+04
-Depth=    8086 States=    9e+06 Transitions= 1.62e+08 Memory=  1253.037        t=    436 R=   2e+04
-pan: resizing hashtable to -w24..  done
-Depth=    8086 States=    1e+07 Transitions= 1.95e+08 Memory=  1461.018        t=    530 R=   2e+04
-Depth=   13700 States=  1.1e+07 Transitions= 2.31e+08 Memory=  1545.002        t=    629 R=   2e+04
-Depth=   13700 States=  1.2e+07 Transitions= 2.64e+08 Memory=  1628.986        t=    721 R=   2e+04
-Depth=   13700 States=  1.3e+07 Transitions= 2.89e+08 Memory=  1712.971        t=    789 R=   2e+04
-Depth=   13700 States=  1.4e+07 Transitions= 3.09e+08 Memory=  1796.955        t=    844 R=   2e+04
-Depth=   13700 States=  1.5e+07 Transitions= 3.29e+08 Memory=  1880.940        t=    897 R=   2e+04
-pan: claim violated! (at depth 1143)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 13700, errors: 1
- 15925114 states, stored
-3.2589318e+08 states, matched
-3.418183e+08 transitions (= stored+matched)
-5.3108495e+09 atomic steps
-hash conflicts: 1.8673119e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 1761.735      equivalent memory usage for states (stored*(State-vector + overhead))
- 1373.571      actual memory usage for states (compression: 77.97%)
-               state-vector as stored = 62 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1958.576      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 21, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 53, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 67, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 85, "(1)"
-       line 257, "pan.___", state 105, "(1)"
-       line 261, "pan.___", state 113, "(1)"
-       line 603, "pan.___", state 132, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 139, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 171, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 185, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 203, "(1)"
-       line 257, "pan.___", state 223, "(1)"
-       line 261, "pan.___", state 231, "(1)"
-       line 411, "pan.___", state 250, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 282, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 296, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 314, "(1)"
-       line 257, "pan.___", state 334, "(1)"
-       line 261, "pan.___", state 342, "(1)"
-       line 411, "pan.___", state 363, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 365, "(1)"
-       line 411, "pan.___", state 366, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 366, "else"
-       line 411, "pan.___", state 369, "(1)"
-       line 415, "pan.___", state 377, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 379, "(1)"
-       line 415, "pan.___", state 380, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 380, "else"
-       line 415, "pan.___", state 383, "(1)"
-       line 415, "pan.___", state 384, "(1)"
-       line 415, "pan.___", state 384, "(1)"
-       line 413, "pan.___", state 389, "((i<1))"
-       line 413, "pan.___", state 389, "((i>=1))"
-       line 420, "pan.___", state 395, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 397, "(1)"
-       line 420, "pan.___", state 398, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 398, "else"
-       line 420, "pan.___", state 401, "(1)"
-       line 420, "pan.___", state 402, "(1)"
-       line 420, "pan.___", state 402, "(1)"
-       line 424, "pan.___", state 409, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 411, "(1)"
-       line 424, "pan.___", state 412, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 412, "else"
-       line 424, "pan.___", state 415, "(1)"
-       line 424, "pan.___", state 416, "(1)"
-       line 424, "pan.___", state 416, "(1)"
-       line 422, "pan.___", state 421, "((i<2))"
-       line 422, "pan.___", state 421, "((i>=2))"
-       line 249, "pan.___", state 427, "(1)"
-       line 253, "pan.___", state 435, "(1)"
-       line 253, "pan.___", state 436, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 436, "else"
-       line 251, "pan.___", state 441, "((i<1))"
-       line 251, "pan.___", state 441, "((i>=1))"
-       line 257, "pan.___", state 447, "(1)"
-       line 257, "pan.___", state 448, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 448, "else"
-       line 261, "pan.___", state 455, "(1)"
-       line 261, "pan.___", state 456, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 456, "else"
-       line 259, "pan.___", state 461, "((i<2))"
-       line 259, "pan.___", state 461, "((i>=2))"
-       line 266, "pan.___", state 465, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 465, "else"
-       line 431, "pan.___", state 467, "(1)"
-       line 431, "pan.___", state 467, "(1)"
-       line 603, "pan.___", state 470, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 603, "pan.___", state 471, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 603, "pan.___", state 472, "(1)"
-       line 272, "pan.___", state 476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 478, "(1)"
-       line 276, "pan.___", state 485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 487, "(1)"
-       line 276, "pan.___", state 488, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 488, "else"
-       line 274, "pan.___", state 493, "((i<1))"
-       line 274, "pan.___", state 493, "((i>=1))"
-       line 280, "pan.___", state 498, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 500, "(1)"
-       line 280, "pan.___", state 501, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 501, "else"
-       line 284, "pan.___", state 507, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 509, "(1)"
-       line 284, "pan.___", state 510, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 510, "else"
-       line 282, "pan.___", state 515, "((i<2))"
-       line 282, "pan.___", state 515, "((i>=2))"
-       line 249, "pan.___", state 523, "(1)"
-       line 253, "pan.___", state 531, "(1)"
-       line 253, "pan.___", state 532, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 532, "else"
-       line 251, "pan.___", state 537, "((i<1))"
-       line 251, "pan.___", state 537, "((i>=1))"
-       line 257, "pan.___", state 543, "(1)"
-       line 257, "pan.___", state 544, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 544, "else"
-       line 261, "pan.___", state 551, "(1)"
-       line 261, "pan.___", state 552, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 552, "else"
-       line 266, "pan.___", state 561, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 561, "else"
-       line 299, "pan.___", state 563, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 563, "else"
-       line 411, "pan.___", state 569, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 601, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 615, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 633, "(1)"
-       line 257, "pan.___", state 653, "(1)"
-       line 261, "pan.___", state 661, "(1)"
-       line 411, "pan.___", state 687, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 719, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 733, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 751, "(1)"
-       line 257, "pan.___", state 771, "(1)"
-       line 261, "pan.___", state 779, "(1)"
-       line 411, "pan.___", state 798, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 800, "(1)"
-       line 411, "pan.___", state 801, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 801, "else"
-       line 411, "pan.___", state 804, "(1)"
-       line 415, "pan.___", state 812, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 814, "(1)"
-       line 415, "pan.___", state 815, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 815, "else"
-       line 415, "pan.___", state 818, "(1)"
-       line 415, "pan.___", state 819, "(1)"
-       line 415, "pan.___", state 819, "(1)"
-       line 413, "pan.___", state 824, "((i<1))"
-       line 413, "pan.___", state 824, "((i>=1))"
-       line 420, "pan.___", state 830, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 832, "(1)"
-       line 420, "pan.___", state 833, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 833, "else"
-       line 420, "pan.___", state 836, "(1)"
-       line 420, "pan.___", state 837, "(1)"
-       line 420, "pan.___", state 837, "(1)"
-       line 424, "pan.___", state 844, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 846, "(1)"
-       line 424, "pan.___", state 847, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 847, "else"
-       line 424, "pan.___", state 850, "(1)"
-       line 424, "pan.___", state 851, "(1)"
-       line 424, "pan.___", state 851, "(1)"
-       line 422, "pan.___", state 856, "((i<2))"
-       line 422, "pan.___", state 856, "((i>=2))"
-       line 249, "pan.___", state 862, "(1)"
-       line 253, "pan.___", state 870, "(1)"
-       line 253, "pan.___", state 871, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 871, "else"
-       line 251, "pan.___", state 876, "((i<1))"
-       line 251, "pan.___", state 876, "((i>=1))"
-       line 257, "pan.___", state 882, "(1)"
-       line 257, "pan.___", state 883, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 883, "else"
-       line 261, "pan.___", state 890, "(1)"
-       line 261, "pan.___", state 891, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 891, "else"
-       line 259, "pan.___", state 896, "((i<2))"
-       line 259, "pan.___", state 896, "((i>=2))"
-       line 266, "pan.___", state 900, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 900, "else"
-       line 431, "pan.___", state 902, "(1)"
-       line 431, "pan.___", state 902, "(1)"
-       line 611, "pan.___", state 906, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 911, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 943, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 957, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 975, "(1)"
-       line 257, "pan.___", state 995, "(1)"
-       line 261, "pan.___", state 1003, "(1)"
-       line 411, "pan.___", state 1025, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1057, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1071, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1089, "(1)"
-       line 257, "pan.___", state 1109, "(1)"
-       line 261, "pan.___", state 1117, "(1)"
-       line 411, "pan.___", state 1140, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1172, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1186, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1204, "(1)"
-       line 257, "pan.___", state 1224, "(1)"
-       line 261, "pan.___", state 1232, "(1)"
-       line 411, "pan.___", state 1251, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1283, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1297, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1315, "(1)"
-       line 257, "pan.___", state 1335, "(1)"
-       line 261, "pan.___", state 1343, "(1)"
-       line 272, "pan.___", state 1364, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1366, "(1)"
-       line 276, "pan.___", state 1373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1375, "(1)"
-       line 276, "pan.___", state 1376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1376, "else"
-       line 274, "pan.___", state 1381, "((i<1))"
-       line 274, "pan.___", state 1381, "((i>=1))"
-       line 280, "pan.___", state 1386, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1388, "(1)"
-       line 280, "pan.___", state 1389, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1389, "else"
-       line 284, "pan.___", state 1395, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1397, "(1)"
-       line 284, "pan.___", state 1398, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1398, "else"
-       line 282, "pan.___", state 1403, "((i<2))"
-       line 282, "pan.___", state 1403, "((i>=2))"
-       line 249, "pan.___", state 1411, "(1)"
-       line 253, "pan.___", state 1419, "(1)"
-       line 253, "pan.___", state 1420, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1420, "else"
-       line 251, "pan.___", state 1425, "((i<1))"
-       line 251, "pan.___", state 1425, "((i>=1))"
-       line 257, "pan.___", state 1431, "(1)"
-       line 257, "pan.___", state 1432, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1432, "else"
-       line 261, "pan.___", state 1439, "(1)"
-       line 261, "pan.___", state 1440, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1440, "else"
-       line 266, "pan.___", state 1449, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1449, "else"
-       line 299, "pan.___", state 1451, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1451, "else"
-       line 411, "pan.___", state 1457, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1489, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1521, "(1)"
-       line 257, "pan.___", state 1541, "(1)"
-       line 261, "pan.___", state 1549, "(1)"
-       line 411, "pan.___", state 1568, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1600, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1614, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1632, "(1)"
-       line 257, "pan.___", state 1652, "(1)"
-       line 261, "pan.___", state 1660, "(1)"
-       line 411, "pan.___", state 1682, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1714, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1728, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1746, "(1)"
-       line 257, "pan.___", state 1766, "(1)"
-       line 261, "pan.___", state 1774, "(1)"
-       line 650, "pan.___", state 1793, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1800, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1832, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1846, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1864, "(1)"
-       line 257, "pan.___", state 1884, "(1)"
-       line 261, "pan.___", state 1892, "(1)"
-       line 411, "pan.___", state 1911, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1943, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1957, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1975, "(1)"
-       line 257, "pan.___", state 1995, "(1)"
-       line 261, "pan.___", state 2003, "(1)"
-       line 411, "pan.___", state 2024, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2026, "(1)"
-       line 411, "pan.___", state 2027, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2027, "else"
-       line 411, "pan.___", state 2030, "(1)"
-       line 415, "pan.___", state 2038, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2040, "(1)"
-       line 415, "pan.___", state 2041, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2041, "else"
-       line 415, "pan.___", state 2044, "(1)"
-       line 415, "pan.___", state 2045, "(1)"
-       line 415, "pan.___", state 2045, "(1)"
-       line 413, "pan.___", state 2050, "((i<1))"
-       line 413, "pan.___", state 2050, "((i>=1))"
-       line 420, "pan.___", state 2056, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2058, "(1)"
-       line 420, "pan.___", state 2059, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2059, "else"
-       line 420, "pan.___", state 2062, "(1)"
-       line 420, "pan.___", state 2063, "(1)"
-       line 420, "pan.___", state 2063, "(1)"
-       line 424, "pan.___", state 2070, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2072, "(1)"
-       line 424, "pan.___", state 2073, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2073, "else"
-       line 424, "pan.___", state 2076, "(1)"
-       line 424, "pan.___", state 2077, "(1)"
-       line 424, "pan.___", state 2077, "(1)"
-       line 422, "pan.___", state 2082, "((i<2))"
-       line 422, "pan.___", state 2082, "((i>=2))"
-       line 249, "pan.___", state 2088, "(1)"
-       line 253, "pan.___", state 2096, "(1)"
-       line 253, "pan.___", state 2097, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2097, "else"
-       line 251, "pan.___", state 2102, "((i<1))"
-       line 251, "pan.___", state 2102, "((i>=1))"
-       line 257, "pan.___", state 2108, "(1)"
-       line 257, "pan.___", state 2109, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2109, "else"
-       line 261, "pan.___", state 2116, "(1)"
-       line 261, "pan.___", state 2117, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2117, "else"
-       line 259, "pan.___", state 2122, "((i<2))"
-       line 259, "pan.___", state 2122, "((i>=2))"
-       line 266, "pan.___", state 2126, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2126, "else"
-       line 431, "pan.___", state 2128, "(1)"
-       line 431, "pan.___", state 2128, "(1)"
-       line 650, "pan.___", state 2131, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 650, "pan.___", state 2132, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 650, "pan.___", state 2133, "(1)"
-       line 272, "pan.___", state 2137, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 2139, "(1)"
-       line 276, "pan.___", state 2146, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2148, "(1)"
-       line 276, "pan.___", state 2149, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 2149, "else"
-       line 274, "pan.___", state 2154, "((i<1))"
-       line 274, "pan.___", state 2154, "((i>=1))"
-       line 280, "pan.___", state 2159, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2161, "(1)"
-       line 280, "pan.___", state 2162, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 2162, "else"
-       line 284, "pan.___", state 2168, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2170, "(1)"
-       line 284, "pan.___", state 2171, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 2171, "else"
-       line 282, "pan.___", state 2176, "((i<2))"
-       line 282, "pan.___", state 2176, "((i>=2))"
-       line 249, "pan.___", state 2184, "(1)"
-       line 253, "pan.___", state 2192, "(1)"
-       line 253, "pan.___", state 2193, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2193, "else"
-       line 251, "pan.___", state 2198, "((i<1))"
-       line 251, "pan.___", state 2198, "((i>=1))"
-       line 257, "pan.___", state 2204, "(1)"
-       line 257, "pan.___", state 2205, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2205, "else"
-       line 261, "pan.___", state 2212, "(1)"
-       line 261, "pan.___", state 2213, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2213, "else"
-       line 266, "pan.___", state 2222, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2222, "else"
-       line 299, "pan.___", state 2224, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 2224, "else"
-       line 411, "pan.___", state 2230, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2262, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2276, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2294, "(1)"
-       line 257, "pan.___", state 2314, "(1)"
-       line 261, "pan.___", state 2322, "(1)"
-       line 272, "pan.___", state 2344, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 2346, "(1)"
-       line 276, "pan.___", state 2353, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2355, "(1)"
-       line 276, "pan.___", state 2356, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 2356, "else"
-       line 274, "pan.___", state 2361, "((i<1))"
-       line 274, "pan.___", state 2361, "((i>=1))"
-       line 280, "pan.___", state 2366, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2368, "(1)"
-       line 280, "pan.___", state 2369, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 2369, "else"
-       line 284, "pan.___", state 2375, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2377, "(1)"
-       line 284, "pan.___", state 2378, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 2378, "else"
-       line 282, "pan.___", state 2383, "((i<2))"
-       line 282, "pan.___", state 2383, "((i>=2))"
-       line 249, "pan.___", state 2391, "(1)"
-       line 253, "pan.___", state 2399, "(1)"
-       line 253, "pan.___", state 2400, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2400, "else"
-       line 251, "pan.___", state 2405, "((i<1))"
-       line 251, "pan.___", state 2405, "((i>=1))"
-       line 257, "pan.___", state 2411, "(1)"
-       line 257, "pan.___", state 2412, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2412, "else"
-       line 261, "pan.___", state 2419, "(1)"
-       line 261, "pan.___", state 2420, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2420, "else"
-       line 266, "pan.___", state 2429, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2429, "else"
-       line 299, "pan.___", state 2431, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 2431, "else"
-       line 411, "pan.___", state 2437, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2469, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2483, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2501, "(1)"
-       line 257, "pan.___", state 2521, "(1)"
-       line 261, "pan.___", state 2529, "(1)"
-       line 411, "pan.___", state 2548, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2580, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2594, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2612, "(1)"
-       line 257, "pan.___", state 2632, "(1)"
-       line 261, "pan.___", state 2640, "(1)"
-       line 249, "pan.___", state 2671, "(1)"
-       line 257, "pan.___", state 2691, "(1)"
-       line 261, "pan.___", state 2699, "(1)"
-       line 249, "pan.___", state 2714, "(1)"
-       line 257, "pan.___", state 2734, "(1)"
-       line 261, "pan.___", state 2742, "(1)"
-       line 898, "pan.___", state 2759, "-end-"
-       (306 of 2759 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 20, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 26, "(1)"
-       line 415, "pan.___", state 34, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 40, "(1)"
-       line 415, "pan.___", state 41, "(1)"
-       line 415, "pan.___", state 41, "(1)"
-       line 413, "pan.___", state 46, "((i<1))"
-       line 413, "pan.___", state 46, "((i>=1))"
-       line 420, "pan.___", state 52, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 58, "(1)"
-       line 420, "pan.___", state 59, "(1)"
-       line 420, "pan.___", state 59, "(1)"
-       line 424, "pan.___", state 72, "(1)"
-       line 424, "pan.___", state 73, "(1)"
-       line 424, "pan.___", state 73, "(1)"
-       line 422, "pan.___", state 78, "((i<2))"
-       line 422, "pan.___", state 78, "((i>=2))"
-       line 249, "pan.___", state 84, "(1)"
-       line 253, "pan.___", state 92, "(1)"
-       line 253, "pan.___", state 93, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 93, "else"
-       line 251, "pan.___", state 98, "((i<1))"
-       line 251, "pan.___", state 98, "((i>=1))"
-       line 257, "pan.___", state 104, "(1)"
-       line 257, "pan.___", state 105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 105, "else"
-       line 261, "pan.___", state 112, "(1)"
-       line 261, "pan.___", state 113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 113, "else"
-       line 259, "pan.___", state 118, "((i<2))"
-       line 259, "pan.___", state 118, "((i>=2))"
-       line 266, "pan.___", state 122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 122, "else"
-       line 431, "pan.___", state 124, "(1)"
-       line 431, "pan.___", state 124, "(1)"
-       line 272, "pan.___", state 133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 142, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 274, "pan.___", state 150, "((i<1))"
-       line 274, "pan.___", state 150, "((i>=1))"
-       line 280, "pan.___", state 155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 1021, "pan.___", state 183, "old_data = cached_rcu_ptr.val[_pid]"
-       line 1032, "pan.___", state 187, "_proc_urcu_writer = (_proc_urcu_writer|(1<<4))"
-       line 411, "pan.___", state 195, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 201, "(1)"
-       line 415, "pan.___", state 209, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 215, "(1)"
-       line 415, "pan.___", state 216, "(1)"
-       line 415, "pan.___", state 216, "(1)"
-       line 420, "pan.___", state 229, "(1)"
-       line 424, "pan.___", state 241, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 259, "(1)"
-       line 253, "pan.___", state 267, "(1)"
-       line 261, "pan.___", state 287, "(1)"
-       line 431, "pan.___", state 299, "(1)"
-       line 431, "pan.___", state 299, "(1)"
-       line 415, "pan.___", state 322, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 354, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 380, "(1)"
-       line 261, "pan.___", state 400, "(1)"
-       line 415, "pan.___", state 443, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 501, "(1)"
-       line 415, "pan.___", state 554, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 612, "(1)"
-       line 415, "pan.___", state 667, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 699, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 725, "(1)"
-       line 261, "pan.___", state 745, "(1)"
-       line 1168, "pan.___", state 770, "_proc_urcu_writer = (_proc_urcu_writer|(1<<13))"
-       line 272, "pan.___", state 798, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 800, "(1)"
-       line 276, "pan.___", state 807, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 809, "(1)"
-       line 276, "pan.___", state 810, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 810, "else"
-       line 274, "pan.___", state 815, "((i<1))"
-       line 274, "pan.___", state 815, "((i>=1))"
-       line 280, "pan.___", state 820, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 822, "(1)"
-       line 280, "pan.___", state 823, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 823, "else"
-       line 284, "pan.___", state 829, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 831, "(1)"
-       line 284, "pan.___", state 832, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 832, "else"
-       line 282, "pan.___", state 837, "((i<2))"
-       line 282, "pan.___", state 837, "((i>=2))"
-       line 249, "pan.___", state 845, "(1)"
-       line 253, "pan.___", state 853, "(1)"
-       line 253, "pan.___", state 854, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 854, "else"
-       line 251, "pan.___", state 859, "((i<1))"
-       line 251, "pan.___", state 859, "((i>=1))"
-       line 257, "pan.___", state 865, "(1)"
-       line 257, "pan.___", state 866, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 866, "else"
-       line 261, "pan.___", state 873, "(1)"
-       line 261, "pan.___", state 874, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 874, "else"
-       line 266, "pan.___", state 883, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 883, "else"
-       line 299, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 885, "else"
-       line 276, "pan.___", state 898, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 911, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 920, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 936, "(1)"
-       line 253, "pan.___", state 944, "(1)"
-       line 257, "pan.___", state 956, "(1)"
-       line 261, "pan.___", state 964, "(1)"
-       line 276, "pan.___", state 989, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1011, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1027, "(1)"
-       line 253, "pan.___", state 1035, "(1)"
-       line 257, "pan.___", state 1047, "(1)"
-       line 261, "pan.___", state 1055, "(1)"
-       line 272, "pan.___", state 1071, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 1073, "(1)"
-       line 276, "pan.___", state 1080, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 1082, "(1)"
-       line 276, "pan.___", state 1083, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 1083, "else"
-       line 274, "pan.___", state 1088, "((i<1))"
-       line 274, "pan.___", state 1088, "((i>=1))"
-       line 280, "pan.___", state 1093, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1095, "(1)"
-       line 280, "pan.___", state 1096, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1096, "else"
-       line 284, "pan.___", state 1102, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1104, "(1)"
-       line 284, "pan.___", state 1105, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1105, "else"
-       line 282, "pan.___", state 1110, "((i<2))"
-       line 282, "pan.___", state 1110, "((i>=2))"
-       line 249, "pan.___", state 1118, "(1)"
-       line 253, "pan.___", state 1126, "(1)"
-       line 253, "pan.___", state 1127, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1127, "else"
-       line 251, "pan.___", state 1132, "((i<1))"
-       line 251, "pan.___", state 1132, "((i>=1))"
-       line 257, "pan.___", state 1138, "(1)"
-       line 257, "pan.___", state 1139, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1139, "else"
-       line 261, "pan.___", state 1146, "(1)"
-       line 261, "pan.___", state 1147, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1147, "else"
-       line 266, "pan.___", state 1156, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1156, "else"
-       line 299, "pan.___", state 1158, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1158, "else"
-       line 1237, "pan.___", state 1161, "-end-"
-       (113 of 1161 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 933 seconds
-pan: rate 17076.039 states/second
-pan: avg transition delay 2.7284e-06 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index a7ea865..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_MB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 39bdf85..0000000
+++ /dev/null
@@ -1,1146 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4000
-2:3:3920
-3:3:3923
-4:3:3923
-5:3:3926
-6:3:3934
-7:3:3934
-8:3:3937
-9:3:3943
-10:3:3947
-11:3:3947
-12:3:3950
-13:3:3960
-14:3:3968
-15:3:3968
-16:3:3971
-17:3:3977
-18:3:3981
-19:3:3981
-20:3:3984
-21:3:3990
-22:3:3994
-23:3:3995
-24:0:4000
-25:3:3997
-26:0:4000
-27:2:2761
-28:0:4000
-29:2:2767
-30:0:4000
-31:2:2768
-32:0:4000
-33:2:2770
-34:0:4000
-35:2:2771
-36:0:4000
-37:2:2772
-38:0:4000
-39:2:2773
-40:0:4000
-41:2:2774
-42:2:2775
-43:2:2779
-44:2:2780
-45:2:2788
-46:2:2789
-47:2:2793
-48:2:2794
-49:2:2802
-50:2:2807
-51:2:2811
-52:2:2812
-53:2:2820
-54:2:2821
-55:2:2825
-56:2:2826
-57:2:2820
-58:2:2821
-59:2:2825
-60:2:2826
-61:2:2834
-62:2:2839
-63:2:2846
-64:2:2847
-65:2:2854
-66:2:2859
-67:2:2866
-68:2:2867
-69:2:2866
-70:2:2867
-71:2:2874
-72:2:2884
-73:0:4000
-74:2:2773
-75:0:4000
-76:2:2888
-77:2:2892
-78:2:2893
-79:2:2897
-80:2:2901
-81:2:2902
-82:2:2906
-83:2:2914
-84:2:2915
-85:2:2919
-86:2:2923
-87:2:2924
-88:2:2919
-89:2:2920
-90:2:2928
-91:0:4000
-92:2:2773
-93:0:4000
-94:2:2936
-95:2:2937
-96:2:2938
-97:0:4000
-98:2:2773
-99:0:4000
-100:2:2946
-101:0:4000
-102:2:2773
-103:0:4000
-104:2:2949
-105:2:2950
-106:2:2954
-107:2:2955
-108:2:2963
-109:2:2964
-110:2:2968
-111:2:2969
-112:2:2977
-113:2:2982
-114:2:2983
-115:2:2995
-116:2:2996
-117:2:3000
-118:2:3001
-119:2:2995
-120:2:2996
-121:2:3000
-122:2:3001
-123:2:3009
-124:2:3014
-125:2:3021
-126:2:3022
-127:2:3029
-128:2:3034
-129:2:3041
-130:2:3042
-131:2:3041
-132:2:3042
-133:2:3049
-134:2:3058
-135:0:4000
-136:2:2773
-137:0:4000
-138:2:3062
-139:2:3063
-140:2:3064
-141:2:3076
-142:2:3077
-143:2:3081
-144:2:3082
-145:2:3090
-146:2:3095
-147:2:3099
-148:2:3100
-149:2:3108
-150:2:3109
-151:2:3113
-152:2:3114
-153:2:3108
-154:2:3109
-155:2:3113
-156:2:3114
-157:2:3122
-158:2:3127
-159:2:3134
-160:2:3135
-161:2:3142
-162:2:3147
-163:2:3154
-164:2:3155
-165:2:3154
-166:2:3155
-167:2:3162
-168:2:3175
-169:2:3176
-170:0:4000
-171:2:2773
-172:0:4000
-173:2:3183
-174:2:3184
-175:2:3188
-176:2:3189
-177:2:3197
-178:2:3198
-179:2:3202
-180:2:3203
-181:2:3211
-182:2:3216
-183:2:3220
-184:2:3221
-185:2:3229
-186:2:3230
-187:2:3234
-188:2:3235
-189:2:3229
-190:2:3230
-191:2:3234
-192:2:3235
-193:2:3243
-194:2:3248
-195:2:3255
-196:2:3256
-197:2:3263
-198:2:3268
-199:2:3275
-200:2:3276
-201:2:3275
-202:2:3276
-203:2:3283
-204:0:4000
-205:2:2773
-206:0:4000
-207:2:3294
-208:2:3295
-209:2:3299
-210:2:3300
-211:2:3308
-212:2:3309
-213:2:3313
-214:2:3314
-215:2:3322
-216:2:3327
-217:2:3331
-218:2:3332
-219:2:3340
-220:2:3341
-221:2:3345
-222:2:3346
-223:2:3340
-224:2:3341
-225:2:3345
-226:2:3346
-227:2:3354
-228:2:3359
-229:2:3366
-230:2:3367
-231:2:3374
-232:2:3379
-233:2:3386
-234:2:3387
-235:2:3386
-236:2:3387
-237:2:3394
-238:2:3403
-239:0:4000
-240:2:2773
-241:0:4000
-242:2:3407
-243:2:3408
-244:2:3409
-245:2:3421
-246:2:3422
-247:2:3426
-248:2:3427
-249:2:3435
-250:2:3440
-251:2:3444
-252:2:3445
-253:2:3453
-254:2:3454
-255:2:3458
-256:2:3459
-257:2:3453
-258:2:3454
-259:2:3458
-260:2:3459
-261:2:3467
-262:2:3472
-263:2:3479
-264:2:3480
-265:2:3487
-266:2:3492
-267:2:3499
-268:2:3500
-269:2:3499
-270:2:3500
-271:2:3507
-272:2:3519
-273:2:3520
-274:0:4000
-275:2:2773
-276:0:4000
-277:2:3529
-278:2:3530
-279:0:4000
-280:2:2773
-281:0:4000
-282:2:3534
-283:0:4000
-284:2:3542
-285:0:4000
-286:2:2768
-287:0:4000
-288:2:2770
-289:0:4000
-290:2:2771
-291:0:4000
-292:2:2772
-293:0:4000
-294:2:2773
-295:0:4000
-296:2:2774
-297:2:2775
-298:2:2779
-299:2:2780
-300:2:2788
-301:2:2789
-302:2:2793
-303:2:2794
-304:2:2802
-305:2:2807
-306:2:2811
-307:2:2812
-308:2:2820
-309:2:2821
-310:2:2822
-311:2:2820
-312:2:2821
-313:2:2825
-314:2:2826
-315:2:2834
-316:2:2839
-317:2:2846
-318:2:2847
-319:2:2854
-320:2:2859
-321:2:2866
-322:2:2867
-323:2:2866
-324:2:2867
-325:2:2874
-326:2:2884
-327:0:4000
-328:2:2773
-329:0:4000
-330:2:2888
-331:2:2892
-332:2:2893
-333:2:2897
-334:2:2901
-335:2:2902
-336:2:2906
-337:2:2914
-338:2:2915
-339:2:2919
-340:2:2920
-341:2:2919
-342:2:2923
-343:2:2924
-344:2:2928
-345:0:4000
-346:2:2773
-347:0:4000
-348:2:2936
-349:2:2937
-350:2:2938
-351:0:4000
-352:2:2773
-353:0:4000
-354:2:2946
-355:0:4000
-356:2:2773
-357:0:4000
-358:2:2949
-359:2:2950
-360:2:2954
-361:2:2955
-362:2:2963
-363:2:2964
-364:2:2968
-365:2:2969
-366:2:2977
-367:2:2982
-368:2:2983
-369:2:2995
-370:2:2996
-371:2:3000
-372:2:3001
-373:2:2995
-374:2:2996
-375:2:3000
-376:2:3001
-377:2:3009
-378:2:3014
-379:2:3021
-380:2:3022
-381:2:3029
-382:2:3034
-383:2:3041
-384:2:3042
-385:2:3041
-386:2:3042
-387:2:3049
-388:2:3058
-389:0:4000
-390:2:2773
-391:0:4000
-392:2:3062
-393:2:3063
-394:2:3064
-395:2:3076
-396:2:3077
-397:2:3081
-398:2:3082
-399:2:3090
-400:2:3095
-401:2:3099
-402:2:3100
-403:2:3108
-404:2:3109
-405:2:3113
-406:2:3114
-407:2:3108
-408:2:3109
-409:2:3113
-410:2:3114
-411:2:3122
-412:2:3127
-413:2:3134
-414:2:3135
-415:2:3142
-416:2:3147
-417:2:3154
-418:2:3155
-419:2:3154
-420:2:3155
-421:2:3162
-422:2:3175
-423:2:3176
-424:0:4000
-425:2:2773
-426:0:4000
-427:2:3183
-428:2:3184
-429:2:3188
-430:2:3189
-431:2:3197
-432:2:3198
-433:2:3202
-434:2:3203
-435:2:3211
-436:2:3216
-437:2:3220
-438:2:3221
-439:2:3229
-440:2:3230
-441:2:3234
-442:2:3235
-443:2:3229
-444:2:3230
-445:2:3234
-446:2:3235
-447:2:3243
-448:2:3248
-449:2:3255
-450:2:3256
-451:2:3263
-452:2:3268
-453:2:3275
-454:2:3276
-455:2:3275
-456:2:3276
-457:2:3283
-458:0:4000
-459:2:2773
-460:0:4000
-461:2:3294
-462:2:3295
-463:2:3299
-464:2:3300
-465:2:3308
-466:2:3309
-467:2:3313
-468:2:3314
-469:2:3322
-470:2:3327
-471:2:3331
-472:2:3332
-473:2:3340
-474:2:3341
-475:2:3345
-476:2:3346
-477:2:3340
-478:2:3341
-479:2:3345
-480:2:3346
-481:2:3354
-482:2:3359
-483:2:3366
-484:2:3367
-485:2:3374
-486:2:3379
-487:2:3386
-488:2:3387
-489:2:3386
-490:2:3387
-491:2:3394
-492:2:3403
-493:0:4000
-494:2:2773
-495:0:4000
-496:2:3407
-497:2:3408
-498:2:3409
-499:2:3421
-500:2:3422
-501:2:3426
-502:2:3427
-503:2:3435
-504:2:3440
-505:2:3444
-506:2:3445
-507:2:3453
-508:2:3454
-509:2:3458
-510:2:3459
-511:2:3453
-512:2:3454
-513:2:3458
-514:2:3459
-515:2:3467
-516:2:3472
-517:2:3479
-518:2:3480
-519:2:3487
-520:2:3492
-521:2:3499
-522:2:3500
-523:2:3499
-524:2:3500
-525:2:3507
-526:2:3519
-527:2:3520
-528:0:4000
-529:2:2773
-530:0:4000
-531:2:3529
-532:2:3530
-533:0:4000
-534:2:2773
-535:0:4000
-536:2:3534
-537:0:4000
-538:2:3542
-539:0:4000
-540:2:2768
-541:0:4000
-542:2:2770
-543:0:4000
-544:2:2771
-545:0:4000
-546:2:2772
-547:0:4000
-548:2:2773
-549:0:4000
-550:2:2774
-551:2:2775
-552:2:2779
-553:2:2780
-554:2:2788
-555:2:2789
-556:2:2793
-557:2:2794
-558:2:2802
-559:2:2807
-560:2:2811
-561:2:2812
-562:2:2820
-563:2:2821
-564:2:2825
-565:2:2826
-566:2:2820
-567:2:2821
-568:2:2822
-569:2:2834
-570:2:2839
-571:2:2846
-572:2:2847
-573:2:2854
-574:2:2859
-575:2:2866
-576:2:2867
-577:2:2866
-578:2:2867
-579:2:2874
-580:2:2884
-581:0:4000
-582:2:2773
-583:0:4000
-584:2:2888
-585:2:2892
-586:2:2893
-587:2:2897
-588:2:2901
-589:2:2902
-590:2:2906
-591:2:2914
-592:2:2915
-593:2:2919
-594:2:2923
-595:2:2924
-596:2:2919
-597:2:2920
-598:2:2928
-599:0:4000
-600:2:2773
-601:0:4000
-602:2:2936
-603:2:2937
-604:2:2938
-605:0:4000
-606:2:2773
-607:0:4000
-608:2:2946
-609:0:4000
-610:2:2773
-611:0:4000
-612:2:2949
-613:2:2950
-614:2:2954
-615:2:2955
-616:2:2963
-617:2:2964
-618:2:2968
-619:2:2969
-620:2:2977
-621:2:2990
-622:2:2991
-623:2:2995
-624:2:2996
-625:2:3000
-626:2:3001
-627:2:2995
-628:2:2996
-629:2:3000
-630:2:3001
-631:2:3009
-632:2:3014
-633:2:3021
-634:2:3022
-635:2:3029
-636:2:3036
-637:2:3037
-638:2:3041
-639:2:3042
-640:2:3041
-641:2:3042
-642:2:3049
-643:2:3058
-644:0:4000
-645:2:2773
-646:0:4000
-647:2:3062
-648:2:3063
-649:2:3064
-650:2:3076
-651:2:3077
-652:2:3081
-653:2:3082
-654:2:3090
-655:2:3103
-656:2:3104
-657:2:3108
-658:2:3109
-659:2:3113
-660:2:3114
-661:2:3108
-662:2:3109
-663:2:3113
-664:2:3114
-665:2:3122
-666:2:3127
-667:2:3134
-668:2:3135
-669:2:3142
-670:2:3149
-671:2:3150
-672:2:3154
-673:2:3155
-674:2:3154
-675:2:3155
-676:2:3162
-677:2:3175
-678:2:3176
-679:0:4000
-680:2:2773
-681:0:4000
-682:2:3183
-683:2:3184
-684:2:3188
-685:2:3189
-686:2:3197
-687:2:3198
-688:2:3202
-689:2:3203
-690:2:3211
-691:2:3224
-692:2:3225
-693:2:3229
-694:2:3230
-695:2:3234
-696:2:3235
-697:2:3229
-698:2:3230
-699:2:3234
-700:2:3235
-701:2:3243
-702:2:3248
-703:2:3255
-704:2:3256
-705:2:3263
-706:2:3270
-707:2:3271
-708:2:3275
-709:2:3276
-710:2:3275
-711:2:3276
-712:2:3283
-713:0:4000
-714:2:2773
-715:0:4000
-716:2:3407
-717:2:3408
-718:2:3412
-719:2:3413
-720:2:3421
-721:2:3422
-722:2:3426
-723:2:3427
-724:2:3435
-725:2:3448
-726:2:3449
-727:2:3453
-728:2:3454
-729:2:3458
-730:2:3459
-731:2:3453
-732:2:3454
-733:2:3458
-734:2:3459
-735:2:3467
-736:2:3472
-737:2:3479
-738:2:3480
-739:2:3487
-740:2:3494
-741:2:3495
-742:2:3499
-743:2:3500
-744:2:3499
-745:2:3500
-746:2:3507
-747:2:3519
-748:2:3520
-749:0:4000
-750:2:2773
-751:0:4000
-752:2:3529
-753:2:3530
-754:0:4000
-755:2:2773
-756:0:4000
-757:2:3294
-758:2:3295
-759:2:3299
-760:2:3300
-761:2:3308
-762:2:3309
-763:2:3313
-764:2:3314
-765:2:3322
-766:2:3335
-767:2:3336
-768:2:3340
-769:2:3341
-770:2:3342
-771:2:3340
-772:2:3341
-773:2:3345
-774:2:3346
-775:2:3354
-776:2:3359
-777:2:3366
-778:2:3367
-779:2:3374
-780:2:3381
-781:2:3382
-782:2:3386
-783:2:3387
-784:2:3386
-785:2:3387
-786:2:3394
-787:2:3403
-788:0:4000
-789:2:2773
-790:0:4000
-791:2:3534
-792:0:4000
-793:2:3542
-794:0:4000
-795:2:3543
-796:0:4000
-797:2:3548
-798:0:4000
-799:1:2
-800:0:4000
-801:2:3549
-802:0:4000
-803:1:8
-804:0:4000
-805:2:3548
-806:0:4000
-807:1:9
-808:0:4000
-809:2:3549
-810:0:4000
-811:1:10
-812:0:4000
-813:2:3548
-814:0:4000
-815:1:11
-816:0:4000
-817:2:3549
-818:0:4000
-819:1:12
-820:0:4000
-821:2:3548
-822:0:4000
-823:1:13
-824:0:4000
-825:2:3549
-826:0:4000
-827:1:14
-828:0:4000
-829:2:3548
-830:0:4000
-831:1:15
-832:0:4000
-833:2:3549
-834:0:4000
-835:1:16
-836:1:17
-837:1:21
-838:1:22
-839:1:30
-840:1:31
-841:1:35
-842:1:36
-843:1:44
-844:1:49
-845:1:53
-846:1:54
-847:1:62
-848:1:63
-849:1:67
-850:1:68
-851:1:62
-852:1:63
-853:1:67
-854:1:68
-855:1:76
-856:1:81
-857:1:88
-858:1:89
-859:1:96
-860:1:101
-861:1:108
-862:1:109
-863:1:108
-864:1:109
-865:1:116
-866:0:4000
-867:2:3548
-868:0:4000
-869:1:15
-870:0:4000
-871:2:3549
-872:0:4000
-873:1:127
-874:1:128
-875:0:4000
-876:2:3548
-877:0:4000
-878:1:15
-879:0:4000
-880:2:3549
-881:0:4000
-882:1:134
-883:1:135
-884:1:139
-885:1:140
-886:1:148
-887:1:149
-888:1:153
-889:1:154
-890:1:162
-891:1:167
-892:1:171
-893:1:172
-894:1:180
-895:1:181
-896:1:185
-897:1:186
-898:1:180
-899:1:181
-900:1:185
-901:1:186
-902:1:194
-903:1:199
-904:1:206
-905:1:207
-906:1:214
-907:1:219
-908:1:226
-909:1:227
-910:1:226
-911:1:227
-912:1:234
-913:0:4000
-914:2:3548
-915:0:4000
-916:1:15
-917:0:4000
-918:2:3549
-919:0:4000
-920:1:245
-921:1:246
-922:1:250
-923:1:251
-924:1:259
-925:1:260
-926:1:264
-927:1:265
-928:1:273
-929:1:278
-930:1:282
-931:1:283
-932:1:291
-933:1:292
-934:1:296
-935:1:297
-936:1:291
-937:1:292
-938:1:296
-939:1:297
-940:1:305
-941:1:310
-942:1:317
-943:1:318
-944:1:325
-945:1:330
-946:1:337
-947:1:338
-948:1:337
-949:1:338
-950:1:345
-951:1:354
-952:0:4000
-953:2:3548
-954:0:4000
-955:1:15
-956:0:4000
-957:2:3549
-958:0:4000
-959:1:564
-960:1:565
-961:1:569
-962:1:570
-963:1:578
-964:1:579
-965:1:580
-966:1:592
-967:1:597
-968:1:601
-969:1:602
-970:1:610
-971:1:611
-972:1:615
-973:1:616
-974:1:610
-975:1:611
-976:1:615
-977:1:616
-978:1:624
-979:1:629
-980:1:636
-981:1:637
-982:1:644
-983:1:649
-984:1:656
-985:1:657
-986:1:656
-987:1:657
-988:1:664
-989:0:4000
-990:2:3548
-991:0:4000
-992:1:15
-993:0:4000
-994:2:3549
-995:0:4000
-996:1:675
-997:1:678
-998:1:679
-999:0:4000
-1000:2:3548
-1001:0:4000
-1002:1:15
-1003:0:4000
-1004:2:3549
-1005:0:4000
-1006:1:682
-1007:1:683
-1008:1:687
-1009:1:688
-1010:1:696
-1011:1:697
-1012:1:701
-1013:1:702
-1014:1:710
-1015:1:715
-1016:1:719
-1017:1:720
-1018:1:728
-1019:1:729
-1020:1:733
-1021:1:734
-1022:1:728
-1023:1:729
-1024:1:733
-1025:1:734
-1026:1:742
-1027:1:747
-1028:1:754
-1029:1:755
-1030:1:762
-1031:1:767
-1032:1:774
-1033:1:775
-1034:1:774
-1035:1:775
-1036:1:782
-1037:0:4000
-1038:2:3548
-1039:0:4000
-1040:1:15
-1041:0:4000
-1042:2:3549
-1043:0:4000
-1044:1:906
-1045:1:907
-1046:1:911
-1047:1:912
-1048:1:920
-1049:1:921
-1050:1:925
-1051:1:926
-1052:1:934
-1053:1:939
-1054:1:943
-1055:1:944
-1056:1:952
-1057:1:953
-1058:1:957
-1059:1:958
-1060:1:952
-1061:1:953
-1062:1:957
-1063:1:958
-1064:1:966
-1065:1:971
-1066:1:978
-1067:1:979
-1068:1:986
-1069:1:991
-1070:1:998
-1071:1:999
-1072:1:998
-1073:1:999
-1074:1:1006
-1075:1:1015
-1076:1:1019
-1077:0:4000
-1078:2:3548
-1079:0:4000
-1080:1:15
-1081:0:4000
-1082:2:3549
-1083:0:4000
-1084:1:1020
-1085:1:1021
-1086:1:1025
-1087:1:1026
-1088:1:1034
-1089:1:1035
-1090:1:1036
-1091:1:1048
-1092:1:1053
-1093:1:1057
-1094:1:1058
-1095:1:1066
-1096:1:1067
-1097:1:1071
-1098:1:1072
-1099:1:1066
-1100:1:1067
-1101:1:1071
-1102:1:1072
-1103:1:1080
-1104:1:1085
-1105:1:1092
-1106:1:1093
-1107:1:1100
-1108:1:1105
-1109:1:1112
-1110:1:1113
-1111:1:1112
-1112:1:1113
-1113:1:1120
-1114:0:4000
-1115:2:3548
-1116:0:4000
-1117:1:15
-1118:0:4000
-1119:2:3549
-1120:0:4000
-1121:1:1131
-1122:0:4000
-1123:2:3548
-1124:0:4000
-1125:1:2667
-1126:1:2674
-1127:1:2675
-1128:1:2682
-1129:1:2687
-1130:1:2694
-1131:1:2695
-1132:1:2694
-1133:1:2695
-1134:1:2702
-1135:1:2706
-1136:0:4000
-1137:2:3549
-1138:0:4000
-1139:1:1133
-1140:1:1134
-1141:0:3998
-1142:2:3548
-1143:0:4004
-1144:0:4000
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.define b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.log b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 00d7df3..0000000
+++ /dev/null
@@ -1,448 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    4907 States=    1e+06 Transitions= 2.54e+07 Memory=   550.432        t=   71.2 R=   1e+04
-Depth=    5133 States=    2e+06 Transitions= 5.13e+07 Memory=   634.318        t=    145 R=   1e+04
-Depth=    5133 States=    3e+06 Transitions= 7.76e+07 Memory=   718.303        t=    220 R=   1e+04
-pan: resizing hashtable to -w22..  done
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 5133, errors: 0
-  3846927 states, stored
- 96650452 states, matched
-1.0049738e+08 transitions (= stored+matched)
-1.6169296e+09 atomic steps
-hash conflicts:  68306904 (resolved)
-
-Stats on memory usage (in Megabytes):
-  425.571      equivalent memory usage for states (stored*(State-vector + overhead))
-  330.939      actual memory usage for states (compression: 77.76%)
-               state-vector as stored = 62 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  820.420      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 81, "(1)"
-       line 257, "pan.___", state 101, "(1)"
-       line 261, "pan.___", state 109, "(1)"
-       line 597, "pan.___", state 128, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 199, "(1)"
-       line 257, "pan.___", state 219, "(1)"
-       line 261, "pan.___", state 227, "(1)"
-       line 411, "pan.___", state 246, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 278, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 292, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 310, "(1)"
-       line 257, "pan.___", state 330, "(1)"
-       line 261, "pan.___", state 338, "(1)"
-       line 411, "pan.___", state 359, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 361, "(1)"
-       line 411, "pan.___", state 362, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 362, "else"
-       line 411, "pan.___", state 365, "(1)"
-       line 415, "pan.___", state 373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 375, "(1)"
-       line 415, "pan.___", state 376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 376, "else"
-       line 415, "pan.___", state 379, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 413, "pan.___", state 385, "((i<1))"
-       line 413, "pan.___", state 385, "((i>=1))"
-       line 420, "pan.___", state 391, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 393, "(1)"
-       line 420, "pan.___", state 394, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 394, "else"
-       line 420, "pan.___", state 397, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 424, "pan.___", state 405, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 407, "(1)"
-       line 424, "pan.___", state 408, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 408, "else"
-       line 424, "pan.___", state 411, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 422, "pan.___", state 417, "((i<2))"
-       line 422, "pan.___", state 417, "((i>=2))"
-       line 249, "pan.___", state 423, "(1)"
-       line 253, "pan.___", state 431, "(1)"
-       line 253, "pan.___", state 432, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 432, "else"
-       line 251, "pan.___", state 437, "((i<1))"
-       line 251, "pan.___", state 437, "((i>=1))"
-       line 257, "pan.___", state 443, "(1)"
-       line 257, "pan.___", state 444, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 444, "else"
-       line 261, "pan.___", state 451, "(1)"
-       line 261, "pan.___", state 452, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 452, "else"
-       line 259, "pan.___", state 457, "((i<2))"
-       line 259, "pan.___", state 457, "((i>=2))"
-       line 266, "pan.___", state 461, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 461, "else"
-       line 431, "pan.___", state 463, "(1)"
-       line 431, "pan.___", state 463, "(1)"
-       line 597, "pan.___", state 466, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 467, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 468, "(1)"
-       line 272, "pan.___", state 472, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 483, "(1)"
-       line 280, "pan.___", state 494, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 519, "(1)"
-       line 253, "pan.___", state 527, "(1)"
-       line 257, "pan.___", state 539, "(1)"
-       line 261, "pan.___", state 547, "(1)"
-       line 411, "pan.___", state 565, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 579, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 597, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 611, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 629, "(1)"
-       line 253, "pan.___", state 637, "(1)"
-       line 257, "pan.___", state 649, "(1)"
-       line 261, "pan.___", state 657, "(1)"
-       line 411, "pan.___", state 683, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 715, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 729, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 747, "(1)"
-       line 257, "pan.___", state 767, "(1)"
-       line 261, "pan.___", state 775, "(1)"
-       line 411, "pan.___", state 794, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 796, "(1)"
-       line 411, "pan.___", state 797, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 797, "else"
-       line 411, "pan.___", state 800, "(1)"
-       line 415, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 810, "(1)"
-       line 415, "pan.___", state 811, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 811, "else"
-       line 415, "pan.___", state 814, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 413, "pan.___", state 820, "((i<1))"
-       line 413, "pan.___", state 820, "((i>=1))"
-       line 420, "pan.___", state 826, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 828, "(1)"
-       line 420, "pan.___", state 829, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 829, "else"
-       line 420, "pan.___", state 832, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 424, "pan.___", state 840, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 842, "(1)"
-       line 424, "pan.___", state 843, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 843, "else"
-       line 424, "pan.___", state 846, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 422, "pan.___", state 852, "((i<2))"
-       line 422, "pan.___", state 852, "((i>=2))"
-       line 249, "pan.___", state 858, "(1)"
-       line 253, "pan.___", state 866, "(1)"
-       line 253, "pan.___", state 867, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 867, "else"
-       line 251, "pan.___", state 872, "((i<1))"
-       line 251, "pan.___", state 872, "((i>=1))"
-       line 257, "pan.___", state 878, "(1)"
-       line 257, "pan.___", state 879, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 879, "else"
-       line 261, "pan.___", state 886, "(1)"
-       line 261, "pan.___", state 887, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 887, "else"
-       line 259, "pan.___", state 892, "((i<2))"
-       line 259, "pan.___", state 892, "((i>=2))"
-       line 266, "pan.___", state 896, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 896, "else"
-       line 431, "pan.___", state 898, "(1)"
-       line 431, "pan.___", state 898, "(1)"
-       line 605, "pan.___", state 902, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 921, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 971, "(1)"
-       line 253, "pan.___", state 979, "(1)"
-       line 257, "pan.___", state 991, "(1)"
-       line 261, "pan.___", state 999, "(1)"
-       line 411, "pan.___", state 1021, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1053, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1067, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1085, "(1)"
-       line 257, "pan.___", state 1105, "(1)"
-       line 261, "pan.___", state 1113, "(1)"
-       line 411, "pan.___", state 1136, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1168, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1182, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1200, "(1)"
-       line 257, "pan.___", state 1220, "(1)"
-       line 261, "pan.___", state 1228, "(1)"
-       line 411, "pan.___", state 1247, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1279, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1293, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1311, "(1)"
-       line 257, "pan.___", state 1331, "(1)"
-       line 261, "pan.___", state 1339, "(1)"
-       line 272, "pan.___", state 1360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1382, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1391, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1407, "(1)"
-       line 253, "pan.___", state 1415, "(1)"
-       line 257, "pan.___", state 1427, "(1)"
-       line 261, "pan.___", state 1435, "(1)"
-       line 411, "pan.___", state 1453, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1467, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1485, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1499, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1517, "(1)"
-       line 253, "pan.___", state 1525, "(1)"
-       line 257, "pan.___", state 1537, "(1)"
-       line 261, "pan.___", state 1545, "(1)"
-       line 411, "pan.___", state 1564, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1596, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1610, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1628, "(1)"
-       line 253, "pan.___", state 1636, "(1)"
-       line 257, "pan.___", state 1648, "(1)"
-       line 261, "pan.___", state 1656, "(1)"
-       line 411, "pan.___", state 1678, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1710, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1724, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1742, "(1)"
-       line 257, "pan.___", state 1762, "(1)"
-       line 261, "pan.___", state 1770, "(1)"
-       line 644, "pan.___", state 1789, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1828, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1842, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1860, "(1)"
-       line 257, "pan.___", state 1880, "(1)"
-       line 261, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1971, "(1)"
-       line 257, "pan.___", state 1991, "(1)"
-       line 261, "pan.___", state 1999, "(1)"
-       line 411, "pan.___", state 2020, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2022, "(1)"
-       line 411, "pan.___", state 2023, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2023, "else"
-       line 411, "pan.___", state 2026, "(1)"
-       line 415, "pan.___", state 2034, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2036, "(1)"
-       line 415, "pan.___", state 2037, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2037, "else"
-       line 415, "pan.___", state 2040, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 413, "pan.___", state 2046, "((i<1))"
-       line 413, "pan.___", state 2046, "((i>=1))"
-       line 420, "pan.___", state 2052, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2054, "(1)"
-       line 420, "pan.___", state 2055, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2055, "else"
-       line 420, "pan.___", state 2058, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 424, "pan.___", state 2066, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2068, "(1)"
-       line 424, "pan.___", state 2069, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2069, "else"
-       line 424, "pan.___", state 2072, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 422, "pan.___", state 2078, "((i<2))"
-       line 422, "pan.___", state 2078, "((i>=2))"
-       line 249, "pan.___", state 2084, "(1)"
-       line 253, "pan.___", state 2092, "(1)"
-       line 253, "pan.___", state 2093, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2093, "else"
-       line 251, "pan.___", state 2098, "((i<1))"
-       line 251, "pan.___", state 2098, "((i>=1))"
-       line 257, "pan.___", state 2104, "(1)"
-       line 257, "pan.___", state 2105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2105, "else"
-       line 261, "pan.___", state 2112, "(1)"
-       line 261, "pan.___", state 2113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2113, "else"
-       line 259, "pan.___", state 2118, "((i<2))"
-       line 259, "pan.___", state 2118, "((i>=2))"
-       line 266, "pan.___", state 2122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2122, "else"
-       line 431, "pan.___", state 2124, "(1)"
-       line 431, "pan.___", state 2124, "(1)"
-       line 644, "pan.___", state 2127, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2128, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2129, "(1)"
-       line 272, "pan.___", state 2133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2164, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2180, "(1)"
-       line 253, "pan.___", state 2188, "(1)"
-       line 257, "pan.___", state 2200, "(1)"
-       line 261, "pan.___", state 2208, "(1)"
-       line 411, "pan.___", state 2226, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2240, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2258, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2272, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2290, "(1)"
-       line 253, "pan.___", state 2298, "(1)"
-       line 257, "pan.___", state 2310, "(1)"
-       line 261, "pan.___", state 2318, "(1)"
-       line 272, "pan.___", state 2340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2349, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2362, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2371, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2387, "(1)"
-       line 253, "pan.___", state 2395, "(1)"
-       line 257, "pan.___", state 2407, "(1)"
-       line 261, "pan.___", state 2415, "(1)"
-       line 411, "pan.___", state 2433, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2447, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2479, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2497, "(1)"
-       line 253, "pan.___", state 2505, "(1)"
-       line 257, "pan.___", state 2517, "(1)"
-       line 261, "pan.___", state 2525, "(1)"
-       line 411, "pan.___", state 2544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2558, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2576, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2590, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2608, "(1)"
-       line 253, "pan.___", state 2616, "(1)"
-       line 257, "pan.___", state 2628, "(1)"
-       line 261, "pan.___", state 2636, "(1)"
-       line 411, "pan.___", state 2667, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2699, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2713, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2731, "(1)"
-       line 257, "pan.___", state 2751, "(1)"
-       line 261, "pan.___", state 2759, "(1)"
-       line 411, "pan.___", state 2776, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2790, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2808, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2822, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2840, "(1)"
-       line 253, "pan.___", state 2848, "(1)"
-       line 257, "pan.___", state 2860, "(1)"
-       line 261, "pan.___", state 2868, "(1)"
-       line 898, "pan.___", state 2887, "-end-"
-       (266 of 2887 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 82, "(1)"
-       line 253, "pan.___", state 90, "(1)"
-       line 257, "pan.___", state 102, "(1)"
-       line 272, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 140, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 153, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 207, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 225, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 239, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 257, "(1)"
-       line 253, "pan.___", state 265, "(1)"
-       line 257, "pan.___", state 277, "(1)"
-       line 261, "pan.___", state 285, "(1)"
-       line 415, "pan.___", state 320, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 338, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 352, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 378, "(1)"
-       line 257, "pan.___", state 390, "(1)"
-       line 261, "pan.___", state 398, "(1)"
-       line 415, "pan.___", state 441, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 499, "(1)"
-       line 257, "pan.___", state 511, "(1)"
-       line 261, "pan.___", state 519, "(1)"
-       line 415, "pan.___", state 552, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 570, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 584, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 610, "(1)"
-       line 257, "pan.___", state 622, "(1)"
-       line 261, "pan.___", state 630, "(1)"
-       line 415, "pan.___", state 665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 723, "(1)"
-       line 257, "pan.___", state 735, "(1)"
-       line 261, "pan.___", state 743, "(1)"
-       line 272, "pan.___", state 796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 805, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 820, "(1)"
-       line 284, "pan.___", state 827, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 843, "(1)"
-       line 253, "pan.___", state 851, "(1)"
-       line 257, "pan.___", state 863, "(1)"
-       line 261, "pan.___", state 871, "(1)"
-       line 276, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 909, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 918, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 934, "(1)"
-       line 253, "pan.___", state 942, "(1)"
-       line 257, "pan.___", state 954, "(1)"
-       line 261, "pan.___", state 962, "(1)"
-       line 276, "pan.___", state 987, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1000, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1009, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1025, "(1)"
-       line 253, "pan.___", state 1033, "(1)"
-       line 257, "pan.___", state 1045, "(1)"
-       line 261, "pan.___", state 1053, "(1)"
-       line 276, "pan.___", state 1078, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1091, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1100, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1116, "(1)"
-       line 253, "pan.___", state 1124, "(1)"
-       line 257, "pan.___", state 1136, "(1)"
-       line 261, "pan.___", state 1144, "(1)"
-       line 1237, "pan.___", state 1159, "-end-"
-       (71 of 1159 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 285 seconds
-pan: rate 13484.269 states/second
-pan: avg transition delay 2.8388e-06 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index d0fd74e..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_RMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.define b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.log b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 6c01490..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    4736 States=    1e+06 Transitions= 2.14e+07 Memory=   550.334        t=   59.2 R=   2e+04
-Depth=    4922 States=    2e+06 Transitions= 4.72e+07 Memory=   634.221        t=    132 R=   2e+04
-Depth=    4922 States=    3e+06 Transitions= 7.19e+07 Memory=   718.205        t=    203 R=   1e+04
-pan: resizing hashtable to -w22..  done
-pan: claim violated! (at depth 1295)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 4922, errors: 1
-  3435201 states, stored
- 77730101 states, matched
- 81165302 transitions (= stored+matched)
-1.2953753e+09 atomic steps
-hash conflicts:  60833788 (resolved)
-
-Stats on memory usage (in Megabytes):
-  380.023      equivalent memory usage for states (stored*(State-vector + overhead))
-  296.169      actual memory usage for states (compression: 77.93%)
-               state-vector as stored = 62 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  785.752      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 81, "(1)"
-       line 257, "pan.___", state 101, "(1)"
-       line 261, "pan.___", state 109, "(1)"
-       line 597, "pan.___", state 128, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 199, "(1)"
-       line 257, "pan.___", state 219, "(1)"
-       line 261, "pan.___", state 227, "(1)"
-       line 411, "pan.___", state 246, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 278, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 292, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 310, "(1)"
-       line 257, "pan.___", state 330, "(1)"
-       line 261, "pan.___", state 338, "(1)"
-       line 411, "pan.___", state 359, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 361, "(1)"
-       line 411, "pan.___", state 362, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 362, "else"
-       line 411, "pan.___", state 365, "(1)"
-       line 415, "pan.___", state 373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 375, "(1)"
-       line 415, "pan.___", state 376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 376, "else"
-       line 415, "pan.___", state 379, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 413, "pan.___", state 385, "((i<1))"
-       line 413, "pan.___", state 385, "((i>=1))"
-       line 420, "pan.___", state 391, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 393, "(1)"
-       line 420, "pan.___", state 394, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 394, "else"
-       line 420, "pan.___", state 397, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 424, "pan.___", state 405, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 407, "(1)"
-       line 424, "pan.___", state 408, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 408, "else"
-       line 424, "pan.___", state 411, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 422, "pan.___", state 417, "((i<2))"
-       line 422, "pan.___", state 417, "((i>=2))"
-       line 249, "pan.___", state 423, "(1)"
-       line 253, "pan.___", state 431, "(1)"
-       line 253, "pan.___", state 432, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 432, "else"
-       line 251, "pan.___", state 437, "((i<1))"
-       line 251, "pan.___", state 437, "((i>=1))"
-       line 257, "pan.___", state 443, "(1)"
-       line 257, "pan.___", state 444, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 444, "else"
-       line 261, "pan.___", state 451, "(1)"
-       line 261, "pan.___", state 452, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 452, "else"
-       line 259, "pan.___", state 457, "((i<2))"
-       line 259, "pan.___", state 457, "((i>=2))"
-       line 266, "pan.___", state 461, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 461, "else"
-       line 431, "pan.___", state 463, "(1)"
-       line 431, "pan.___", state 463, "(1)"
-       line 597, "pan.___", state 466, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 467, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 468, "(1)"
-       line 272, "pan.___", state 472, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 483, "(1)"
-       line 280, "pan.___", state 494, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 519, "(1)"
-       line 253, "pan.___", state 527, "(1)"
-       line 257, "pan.___", state 539, "(1)"
-       line 261, "pan.___", state 547, "(1)"
-       line 411, "pan.___", state 565, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 579, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 597, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 611, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 629, "(1)"
-       line 253, "pan.___", state 637, "(1)"
-       line 257, "pan.___", state 649, "(1)"
-       line 261, "pan.___", state 657, "(1)"
-       line 411, "pan.___", state 683, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 715, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 729, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 747, "(1)"
-       line 257, "pan.___", state 767, "(1)"
-       line 261, "pan.___", state 775, "(1)"
-       line 411, "pan.___", state 794, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 796, "(1)"
-       line 411, "pan.___", state 797, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 797, "else"
-       line 411, "pan.___", state 800, "(1)"
-       line 415, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 810, "(1)"
-       line 415, "pan.___", state 811, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 811, "else"
-       line 415, "pan.___", state 814, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 413, "pan.___", state 820, "((i<1))"
-       line 413, "pan.___", state 820, "((i>=1))"
-       line 420, "pan.___", state 826, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 828, "(1)"
-       line 420, "pan.___", state 829, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 829, "else"
-       line 420, "pan.___", state 832, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 424, "pan.___", state 840, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 842, "(1)"
-       line 424, "pan.___", state 843, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 843, "else"
-       line 424, "pan.___", state 846, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 422, "pan.___", state 852, "((i<2))"
-       line 422, "pan.___", state 852, "((i>=2))"
-       line 249, "pan.___", state 858, "(1)"
-       line 253, "pan.___", state 866, "(1)"
-       line 253, "pan.___", state 867, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 867, "else"
-       line 251, "pan.___", state 872, "((i<1))"
-       line 251, "pan.___", state 872, "((i>=1))"
-       line 257, "pan.___", state 878, "(1)"
-       line 257, "pan.___", state 879, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 879, "else"
-       line 261, "pan.___", state 886, "(1)"
-       line 261, "pan.___", state 887, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 887, "else"
-       line 259, "pan.___", state 892, "((i<2))"
-       line 259, "pan.___", state 892, "((i>=2))"
-       line 266, "pan.___", state 896, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 896, "else"
-       line 431, "pan.___", state 898, "(1)"
-       line 431, "pan.___", state 898, "(1)"
-       line 605, "pan.___", state 902, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 921, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 971, "(1)"
-       line 253, "pan.___", state 979, "(1)"
-       line 257, "pan.___", state 991, "(1)"
-       line 261, "pan.___", state 999, "(1)"
-       line 411, "pan.___", state 1021, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1053, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1067, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1085, "(1)"
-       line 257, "pan.___", state 1105, "(1)"
-       line 261, "pan.___", state 1113, "(1)"
-       line 411, "pan.___", state 1136, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1168, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1182, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1200, "(1)"
-       line 257, "pan.___", state 1220, "(1)"
-       line 261, "pan.___", state 1228, "(1)"
-       line 411, "pan.___", state 1247, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1279, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1293, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1311, "(1)"
-       line 257, "pan.___", state 1331, "(1)"
-       line 261, "pan.___", state 1339, "(1)"
-       line 272, "pan.___", state 1360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1382, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1391, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1407, "(1)"
-       line 253, "pan.___", state 1415, "(1)"
-       line 257, "pan.___", state 1427, "(1)"
-       line 261, "pan.___", state 1435, "(1)"
-       line 411, "pan.___", state 1453, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1467, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1485, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1499, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1517, "(1)"
-       line 253, "pan.___", state 1525, "(1)"
-       line 257, "pan.___", state 1537, "(1)"
-       line 261, "pan.___", state 1545, "(1)"
-       line 411, "pan.___", state 1564, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1596, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1610, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1628, "(1)"
-       line 253, "pan.___", state 1636, "(1)"
-       line 257, "pan.___", state 1648, "(1)"
-       line 261, "pan.___", state 1656, "(1)"
-       line 411, "pan.___", state 1678, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1710, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1724, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1742, "(1)"
-       line 257, "pan.___", state 1762, "(1)"
-       line 261, "pan.___", state 1770, "(1)"
-       line 644, "pan.___", state 1789, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1828, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1842, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1860, "(1)"
-       line 257, "pan.___", state 1880, "(1)"
-       line 261, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1971, "(1)"
-       line 257, "pan.___", state 1991, "(1)"
-       line 261, "pan.___", state 1999, "(1)"
-       line 411, "pan.___", state 2020, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2022, "(1)"
-       line 411, "pan.___", state 2023, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2023, "else"
-       line 411, "pan.___", state 2026, "(1)"
-       line 415, "pan.___", state 2034, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2036, "(1)"
-       line 415, "pan.___", state 2037, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2037, "else"
-       line 415, "pan.___", state 2040, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 413, "pan.___", state 2046, "((i<1))"
-       line 413, "pan.___", state 2046, "((i>=1))"
-       line 420, "pan.___", state 2052, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2054, "(1)"
-       line 420, "pan.___", state 2055, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2055, "else"
-       line 420, "pan.___", state 2058, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 424, "pan.___", state 2066, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2068, "(1)"
-       line 424, "pan.___", state 2069, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2069, "else"
-       line 424, "pan.___", state 2072, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 422, "pan.___", state 2078, "((i<2))"
-       line 422, "pan.___", state 2078, "((i>=2))"
-       line 249, "pan.___", state 2084, "(1)"
-       line 253, "pan.___", state 2092, "(1)"
-       line 253, "pan.___", state 2093, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2093, "else"
-       line 251, "pan.___", state 2098, "((i<1))"
-       line 251, "pan.___", state 2098, "((i>=1))"
-       line 257, "pan.___", state 2104, "(1)"
-       line 257, "pan.___", state 2105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2105, "else"
-       line 261, "pan.___", state 2112, "(1)"
-       line 261, "pan.___", state 2113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2113, "else"
-       line 259, "pan.___", state 2118, "((i<2))"
-       line 259, "pan.___", state 2118, "((i>=2))"
-       line 266, "pan.___", state 2122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2122, "else"
-       line 431, "pan.___", state 2124, "(1)"
-       line 431, "pan.___", state 2124, "(1)"
-       line 644, "pan.___", state 2127, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2128, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2129, "(1)"
-       line 272, "pan.___", state 2133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2164, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2180, "(1)"
-       line 253, "pan.___", state 2188, "(1)"
-       line 257, "pan.___", state 2200, "(1)"
-       line 261, "pan.___", state 2208, "(1)"
-       line 411, "pan.___", state 2226, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2240, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2258, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2272, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2290, "(1)"
-       line 253, "pan.___", state 2298, "(1)"
-       line 257, "pan.___", state 2310, "(1)"
-       line 261, "pan.___", state 2318, "(1)"
-       line 272, "pan.___", state 2340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2349, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2362, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2371, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2387, "(1)"
-       line 253, "pan.___", state 2395, "(1)"
-       line 257, "pan.___", state 2407, "(1)"
-       line 261, "pan.___", state 2415, "(1)"
-       line 411, "pan.___", state 2433, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2447, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2479, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2497, "(1)"
-       line 253, "pan.___", state 2505, "(1)"
-       line 257, "pan.___", state 2517, "(1)"
-       line 261, "pan.___", state 2525, "(1)"
-       line 411, "pan.___", state 2544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2558, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2576, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2590, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2608, "(1)"
-       line 253, "pan.___", state 2616, "(1)"
-       line 257, "pan.___", state 2628, "(1)"
-       line 261, "pan.___", state 2636, "(1)"
-       line 249, "pan.___", state 2667, "(1)"
-       line 257, "pan.___", state 2687, "(1)"
-       line 261, "pan.___", state 2695, "(1)"
-       line 249, "pan.___", state 2710, "(1)"
-       line 253, "pan.___", state 2718, "(1)"
-       line 257, "pan.___", state 2730, "(1)"
-       line 261, "pan.___", state 2738, "(1)"
-       line 898, "pan.___", state 2755, "-end-"
-       (259 of 2755 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 19, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 33, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 83, "(1)"
-       line 253, "pan.___", state 91, "(1)"
-       line 272, "pan.___", state 132, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 134, "(1)"
-       line 276, "pan.___", state 141, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 143, "(1)"
-       line 276, "pan.___", state 144, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 144, "else"
-       line 274, "pan.___", state 149, "((i<1))"
-       line 274, "pan.___", state 149, "((i>=1))"
-       line 280, "pan.___", state 154, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 156, "(1)"
-       line 280, "pan.___", state 157, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 157, "else"
-       line 284, "pan.___", state 163, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 165, "(1)"
-       line 284, "pan.___", state 166, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 166, "else"
-       line 289, "pan.___", state 175, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 175, "else"
-       line 411, "pan.___", state 194, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 208, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 226, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 240, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 258, "(1)"
-       line 253, "pan.___", state 266, "(1)"
-       line 257, "pan.___", state 278, "(1)"
-       line 261, "pan.___", state 286, "(1)"
-       line 415, "pan.___", state 321, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 339, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 353, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 379, "(1)"
-       line 257, "pan.___", state 391, "(1)"
-       line 261, "pan.___", state 399, "(1)"
-       line 415, "pan.___", state 442, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 460, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 474, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 500, "(1)"
-       line 257, "pan.___", state 512, "(1)"
-       line 261, "pan.___", state 520, "(1)"
-       line 415, "pan.___", state 553, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 571, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 585, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 611, "(1)"
-       line 257, "pan.___", state 623, "(1)"
-       line 261, "pan.___", state 631, "(1)"
-       line 415, "pan.___", state 666, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 684, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 698, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 724, "(1)"
-       line 257, "pan.___", state 736, "(1)"
-       line 261, "pan.___", state 744, "(1)"
-       line 272, "pan.___", state 797, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 806, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 844, "(1)"
-       line 253, "pan.___", state 852, "(1)"
-       line 257, "pan.___", state 864, "(1)"
-       line 261, "pan.___", state 872, "(1)"
-       line 276, "pan.___", state 897, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 910, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 919, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 935, "(1)"
-       line 253, "pan.___", state 943, "(1)"
-       line 257, "pan.___", state 955, "(1)"
-       line 261, "pan.___", state 963, "(1)"
-       line 276, "pan.___", state 988, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1001, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1010, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1026, "(1)"
-       line 253, "pan.___", state 1034, "(1)"
-       line 257, "pan.___", state 1046, "(1)"
-       line 261, "pan.___", state 1054, "(1)"
-       line 276, "pan.___", state 1079, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1092, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1101, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1117, "(1)"
-       line 253, "pan.___", state 1125, "(1)"
-       line 257, "pan.___", state 1137, "(1)"
-       line 261, "pan.___", state 1145, "(1)"
-       line 1237, "pan.___", state 1160, "-end-"
-       (77 of 1160 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 229 seconds
-pan: rate  14976.68 states/second
-pan: avg transition delay 2.826e-06 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index dc68ded..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define NO_WMB
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index aca9da8..0000000
+++ /dev/null
@@ -1,1298 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:3995
-2:3:3915
-3:3:3918
-4:3:3918
-5:3:3921
-6:3:3929
-7:3:3929
-8:3:3932
-9:3:3938
-10:3:3942
-11:3:3942
-12:3:3945
-13:3:3955
-14:3:3963
-15:3:3963
-16:3:3966
-17:3:3972
-18:3:3976
-19:3:3976
-20:3:3979
-21:3:3985
-22:3:3989
-23:3:3990
-24:0:3995
-25:3:3992
-26:0:3995
-27:2:2757
-28:0:3995
-29:2:2763
-30:0:3995
-31:2:2764
-32:0:3995
-33:2:2766
-34:0:3995
-35:2:2767
-36:0:3995
-37:2:2768
-38:0:3995
-39:2:2769
-40:2:2770
-41:2:2774
-42:2:2775
-43:2:2783
-44:2:2784
-45:2:2788
-46:2:2789
-47:2:2797
-48:2:2802
-49:2:2806
-50:2:2807
-51:2:2815
-52:2:2816
-53:2:2820
-54:2:2821
-55:2:2815
-56:2:2816
-57:2:2820
-58:2:2821
-59:2:2829
-60:2:2834
-61:2:2841
-62:2:2842
-63:2:2849
-64:2:2854
-65:2:2861
-66:2:2862
-67:2:2861
-68:2:2862
-69:2:2869
-70:2:2879
-71:0:3995
-72:2:2768
-73:0:3995
-74:2:2931
-75:2:2932
-76:2:2933
-77:0:3995
-78:2:2768
-79:0:3995
-80:2:2938
-81:0:3995
-82:2:3552
-83:2:3553
-84:2:3557
-85:2:3561
-86:2:3562
-87:2:3566
-88:2:3571
-89:2:3579
-90:2:3583
-91:2:3584
-92:2:3579
-93:2:3580
-94:2:3588
-95:2:3595
-96:2:3602
-97:2:3603
-98:2:3610
-99:2:3615
-100:2:3622
-101:2:3623
-102:2:3622
-103:2:3623
-104:2:3630
-105:2:3634
-106:0:3995
-107:2:2940
-108:2:3533
-109:0:3995
-110:2:2768
-111:0:3995
-112:2:2941
-113:0:3995
-114:2:2768
-115:0:3995
-116:2:2944
-117:2:2945
-118:2:2949
-119:2:2950
-120:2:2958
-121:2:2959
-122:2:2963
-123:2:2964
-124:2:2972
-125:2:2977
-126:2:2981
-127:2:2982
-128:2:2990
-129:2:2991
-130:2:2995
-131:2:2996
-132:2:2990
-133:2:2991
-134:2:2995
-135:2:2996
-136:2:3004
-137:2:3009
-138:2:3016
-139:2:3017
-140:2:3024
-141:2:3029
-142:2:3036
-143:2:3037
-144:2:3036
-145:2:3037
-146:2:3044
-147:2:3053
-148:0:3995
-149:2:2768
-150:0:3995
-151:2:3057
-152:2:3058
-153:2:3059
-154:2:3071
-155:2:3072
-156:2:3076
-157:2:3077
-158:2:3085
-159:2:3090
-160:2:3094
-161:2:3095
-162:2:3103
-163:2:3104
-164:2:3108
-165:2:3109
-166:2:3103
-167:2:3104
-168:2:3108
-169:2:3109
-170:2:3117
-171:2:3122
-172:2:3129
-173:2:3130
-174:2:3137
-175:2:3142
-176:2:3149
-177:2:3150
-178:2:3149
-179:2:3150
-180:2:3157
-181:2:3170
-182:2:3171
-183:0:3995
-184:2:2768
-185:0:3995
-186:2:3178
-187:2:3179
-188:2:3183
-189:2:3184
-190:2:3192
-191:2:3193
-192:2:3197
-193:2:3198
-194:2:3206
-195:2:3211
-196:2:3215
-197:2:3216
-198:2:3224
-199:2:3225
-200:2:3229
-201:2:3230
-202:2:3224
-203:2:3225
-204:2:3229
-205:2:3230
-206:2:3238
-207:2:3243
-208:2:3250
-209:2:3251
-210:2:3258
-211:2:3263
-212:2:3270
-213:2:3271
-214:2:3270
-215:2:3271
-216:2:3278
-217:0:3995
-218:2:2768
-219:0:3995
-220:2:3289
-221:2:3290
-222:2:3294
-223:2:3295
-224:2:3303
-225:2:3304
-226:2:3308
-227:2:3309
-228:2:3317
-229:2:3322
-230:2:3326
-231:2:3327
-232:2:3335
-233:2:3336
-234:2:3340
-235:2:3341
-236:2:3335
-237:2:3336
-238:2:3340
-239:2:3341
-240:2:3349
-241:2:3354
-242:2:3361
-243:2:3362
-244:2:3369
-245:2:3374
-246:2:3381
-247:2:3382
-248:2:3381
-249:2:3382
-250:2:3389
-251:2:3398
-252:0:3995
-253:2:2768
-254:0:3995
-255:2:3402
-256:2:3403
-257:2:3404
-258:2:3416
-259:2:3417
-260:2:3421
-261:2:3422
-262:2:3430
-263:2:3435
-264:2:3439
-265:2:3440
-266:2:3448
-267:2:3449
-268:2:3453
-269:2:3454
-270:2:3448
-271:2:3449
-272:2:3453
-273:2:3454
-274:2:3462
-275:2:3467
-276:2:3474
-277:2:3475
-278:2:3482
-279:2:3487
-280:2:3494
-281:2:3495
-282:2:3494
-283:2:3495
-284:2:3502
-285:2:3514
-286:2:3515
-287:0:3995
-288:2:2768
-289:0:3995
-290:2:3521
-291:0:3995
-292:2:3825
-293:2:3826
-294:2:3830
-295:2:3834
-296:2:3835
-297:2:3839
-298:2:3847
-299:2:3848
-300:2:3852
-301:2:3856
-302:2:3857
-303:2:3852
-304:2:3856
-305:2:3857
-306:2:3861
-307:2:3868
-308:2:3875
-309:2:3876
-310:2:3883
-311:2:3888
-312:2:3895
-313:2:3896
-314:2:3895
-315:2:3896
-316:2:3903
-317:2:3907
-318:0:3995
-319:2:3523
-320:2:3533
-321:0:3995
-322:2:2768
-323:0:3995
-324:2:3524
-325:2:3525
-326:0:3995
-327:2:2768
-328:0:3995
-329:2:3529
-330:0:3995
-331:2:3537
-332:0:3995
-333:2:2764
-334:0:3995
-335:2:2766
-336:0:3995
-337:2:2767
-338:0:3995
-339:2:2768
-340:0:3995
-341:2:2931
-342:2:2932
-343:2:2933
-344:0:3995
-345:2:2768
-346:0:3995
-347:2:2769
-348:2:2770
-349:2:2774
-350:2:2775
-351:2:2783
-352:2:2784
-353:2:2788
-354:2:2789
-355:2:2797
-356:2:2802
-357:2:2803
-358:2:2815
-359:2:2816
-360:2:2817
-361:2:2815
-362:2:2816
-363:2:2820
-364:2:2821
-365:2:2829
-366:2:2834
-367:2:2841
-368:2:2842
-369:2:2849
-370:2:2854
-371:2:2861
-372:2:2862
-373:2:2861
-374:2:2862
-375:2:2869
-376:2:2879
-377:0:3995
-378:2:2768
-379:0:3995
-380:2:2938
-381:0:3995
-382:2:3552
-383:2:3553
-384:2:3557
-385:2:3561
-386:2:3562
-387:2:3566
-388:2:3574
-389:2:3575
-390:2:3579
-391:2:3580
-392:2:3579
-393:2:3583
-394:2:3584
-395:2:3588
-396:2:3595
-397:2:3602
-398:2:3603
-399:2:3610
-400:2:3615
-401:2:3622
-402:2:3623
-403:2:3622
-404:2:3623
-405:2:3630
-406:2:3634
-407:0:3995
-408:2:2940
-409:2:3533
-410:0:3995
-411:2:2768
-412:0:3995
-413:2:2941
-414:0:3995
-415:2:2768
-416:0:3995
-417:2:2944
-418:2:2945
-419:2:2949
-420:2:2950
-421:2:2958
-422:2:2959
-423:2:2963
-424:2:2964
-425:2:2972
-426:2:2977
-427:2:2981
-428:2:2982
-429:2:2990
-430:2:2991
-431:2:2995
-432:2:2996
-433:2:2990
-434:2:2991
-435:2:2995
-436:2:2996
-437:2:3004
-438:2:3009
-439:2:3016
-440:2:3017
-441:2:3024
-442:2:3029
-443:2:3036
-444:2:3037
-445:2:3036
-446:2:3037
-447:2:3044
-448:2:3053
-449:0:3995
-450:2:2768
-451:0:3995
-452:2:3057
-453:2:3058
-454:2:3059
-455:2:3071
-456:2:3072
-457:2:3076
-458:2:3077
-459:2:3085
-460:2:3090
-461:2:3094
-462:2:3095
-463:2:3103
-464:2:3104
-465:2:3108
-466:2:3109
-467:2:3103
-468:2:3104
-469:2:3108
-470:2:3109
-471:2:3117
-472:2:3122
-473:2:3129
-474:2:3130
-475:2:3137
-476:2:3142
-477:2:3149
-478:2:3150
-479:2:3149
-480:2:3150
-481:2:3157
-482:2:3170
-483:2:3171
-484:0:3995
-485:2:2768
-486:0:3995
-487:2:3178
-488:2:3179
-489:2:3183
-490:2:3184
-491:2:3192
-492:2:3193
-493:2:3197
-494:2:3198
-495:2:3206
-496:2:3211
-497:2:3215
-498:2:3216
-499:2:3224
-500:2:3225
-501:2:3229
-502:2:3230
-503:2:3224
-504:2:3225
-505:2:3229
-506:2:3230
-507:2:3238
-508:2:3243
-509:2:3250
-510:2:3251
-511:2:3258
-512:2:3263
-513:2:3270
-514:2:3271
-515:2:3270
-516:2:3271
-517:2:3278
-518:0:3995
-519:2:2768
-520:0:3995
-521:2:3289
-522:2:3290
-523:2:3294
-524:2:3295
-525:2:3303
-526:2:3304
-527:2:3308
-528:2:3309
-529:2:3317
-530:2:3322
-531:2:3326
-532:2:3327
-533:2:3335
-534:2:3336
-535:2:3340
-536:2:3341
-537:2:3335
-538:2:3336
-539:2:3340
-540:2:3341
-541:2:3349
-542:2:3354
-543:2:3361
-544:2:3362
-545:2:3369
-546:2:3374
-547:2:3381
-548:2:3382
-549:2:3381
-550:2:3382
-551:2:3389
-552:2:3398
-553:0:3995
-554:2:2768
-555:0:3995
-556:2:3402
-557:2:3403
-558:2:3404
-559:2:3416
-560:2:3417
-561:2:3421
-562:2:3422
-563:2:3430
-564:2:3435
-565:2:3439
-566:2:3440
-567:2:3448
-568:2:3449
-569:2:3453
-570:2:3454
-571:2:3448
-572:2:3449
-573:2:3453
-574:2:3454
-575:2:3462
-576:2:3467
-577:2:3474
-578:2:3475
-579:2:3482
-580:2:3487
-581:2:3494
-582:2:3495
-583:2:3494
-584:2:3495
-585:2:3502
-586:2:3514
-587:2:3515
-588:0:3995
-589:2:2768
-590:0:3995
-591:2:3521
-592:0:3995
-593:2:3825
-594:2:3826
-595:2:3830
-596:2:3834
-597:2:3835
-598:2:3839
-599:2:3847
-600:2:3848
-601:2:3852
-602:2:3856
-603:2:3857
-604:2:3852
-605:2:3856
-606:2:3857
-607:2:3861
-608:2:3868
-609:2:3875
-610:2:3876
-611:2:3883
-612:2:3888
-613:2:3895
-614:2:3896
-615:2:3895
-616:2:3896
-617:2:3903
-618:2:3907
-619:0:3995
-620:2:3523
-621:2:3533
-622:0:3995
-623:2:2768
-624:0:3995
-625:2:3524
-626:2:3525
-627:0:3995
-628:2:2768
-629:0:3995
-630:2:3529
-631:0:3995
-632:2:3537
-633:0:3995
-634:2:2764
-635:0:3995
-636:2:2766
-637:0:3995
-638:2:2767
-639:0:3995
-640:2:2768
-641:0:3995
-642:2:2769
-643:2:2770
-644:2:2774
-645:2:2775
-646:2:2783
-647:2:2784
-648:2:2788
-649:2:2789
-650:2:2797
-651:2:2802
-652:2:2806
-653:2:2807
-654:2:2815
-655:2:2816
-656:2:2820
-657:2:2821
-658:2:2815
-659:2:2816
-660:2:2817
-661:2:2829
-662:2:2834
-663:2:2841
-664:2:2842
-665:2:2849
-666:2:2854
-667:2:2861
-668:2:2862
-669:2:2861
-670:2:2862
-671:2:2869
-672:2:2879
-673:0:3995
-674:2:2768
-675:0:3995
-676:2:2931
-677:2:2932
-678:2:2933
-679:0:3995
-680:2:2768
-681:0:3995
-682:2:2938
-683:0:3995
-684:1:2
-685:0:3995
-686:1:8
-687:0:3995
-688:1:9
-689:0:3995
-690:1:10
-691:0:3995
-692:1:11
-693:0:3995
-694:1:12
-695:1:13
-696:1:17
-697:1:18
-698:1:26
-699:1:27
-700:1:31
-701:1:32
-702:1:40
-703:1:45
-704:1:49
-705:1:50
-706:1:58
-707:1:59
-708:1:63
-709:1:64
-710:1:58
-711:1:59
-712:1:63
-713:1:64
-714:1:72
-715:1:77
-716:1:84
-717:1:85
-718:1:92
-719:1:97
-720:1:104
-721:1:105
-722:1:104
-723:1:105
-724:1:112
-725:0:3995
-726:1:11
-727:0:3995
-728:1:123
-729:1:124
-730:0:3995
-731:1:11
-732:0:3995
-733:1:130
-734:1:131
-735:1:135
-736:1:136
-737:1:144
-738:1:145
-739:1:149
-740:1:150
-741:1:158
-742:1:163
-743:1:167
-744:1:168
-745:1:176
-746:1:177
-747:1:181
-748:1:182
-749:1:176
-750:1:177
-751:1:181
-752:1:182
-753:1:190
-754:1:195
-755:1:202
-756:1:203
-757:1:210
-758:1:215
-759:1:222
-760:1:223
-761:1:222
-762:1:223
-763:1:230
-764:0:3995
-765:1:11
-766:0:3995
-767:1:241
-768:1:242
-769:1:246
-770:1:247
-771:1:255
-772:1:256
-773:1:260
-774:1:261
-775:1:269
-776:1:274
-777:1:278
-778:1:279
-779:1:287
-780:1:288
-781:1:292
-782:1:293
-783:1:287
-784:1:288
-785:1:292
-786:1:293
-787:1:301
-788:1:306
-789:1:313
-790:1:314
-791:1:321
-792:1:326
-793:1:333
-794:1:334
-795:1:333
-796:1:334
-797:1:341
-798:1:350
-799:0:3995
-800:1:11
-801:0:3995
-802:1:468
-803:1:472
-804:1:473
-805:1:477
-806:1:478
-807:1:486
-808:1:494
-809:1:495
-810:1:499
-811:1:503
-812:1:504
-813:1:499
-814:1:503
-815:1:504
-816:1:508
-817:1:515
-818:1:522
-819:1:523
-820:1:530
-821:1:535
-822:1:542
-823:1:543
-824:1:542
-825:1:543
-826:1:550
-827:0:3995
-828:1:11
-829:0:3995
-830:1:560
-831:1:561
-832:1:565
-833:1:566
-834:1:574
-835:1:575
-836:1:579
-837:1:580
-838:1:588
-839:1:593
-840:1:597
-841:1:598
-842:1:606
-843:1:607
-844:1:611
-845:1:612
-846:1:606
-847:1:607
-848:1:611
-849:1:612
-850:1:620
-851:1:625
-852:1:632
-853:1:633
-854:1:640
-855:1:645
-856:1:652
-857:1:653
-858:1:652
-859:1:653
-860:1:660
-861:0:3995
-862:1:11
-863:0:3995
-864:1:671
-865:1:674
-866:1:675
-867:0:3995
-868:1:11
-869:0:3995
-870:1:678
-871:1:679
-872:1:683
-873:1:684
-874:1:692
-875:1:693
-876:1:697
-877:1:698
-878:1:706
-879:1:711
-880:1:715
-881:1:716
-882:1:724
-883:1:725
-884:1:729
-885:1:730
-886:1:724
-887:1:725
-888:1:729
-889:1:730
-890:1:738
-891:1:743
-892:1:750
-893:1:751
-894:1:758
-895:1:763
-896:1:770
-897:1:771
-898:1:770
-899:1:771
-900:1:778
-901:0:3995
-902:1:11
-903:0:3995
-904:1:902
-905:1:903
-906:1:907
-907:1:908
-908:1:916
-909:1:917
-910:1:921
-911:1:922
-912:1:930
-913:1:935
-914:1:939
-915:1:940
-916:1:948
-917:1:949
-918:1:953
-919:1:954
-920:1:948
-921:1:949
-922:1:953
-923:1:954
-924:1:962
-925:1:967
-926:1:974
-927:1:975
-928:1:982
-929:1:987
-930:1:994
-931:1:995
-932:1:994
-933:1:995
-934:1:1002
-935:1:1011
-936:1:1015
-937:0:3995
-938:1:11
-939:0:3995
-940:1:1016
-941:1:1017
-942:1:1021
-943:1:1022
-944:1:1030
-945:1:1031
-946:1:1032
-947:1:1044
-948:1:1049
-949:1:1053
-950:1:1054
-951:1:1062
-952:1:1063
-953:1:1067
-954:1:1068
-955:1:1062
-956:1:1063
-957:1:1067
-958:1:1068
-959:1:1076
-960:1:1081
-961:1:1088
-962:1:1089
-963:1:1096
-964:1:1101
-965:1:1108
-966:1:1109
-967:1:1108
-968:1:1109
-969:1:1116
-970:0:3995
-971:1:11
-972:0:3995
-973:1:1127
-974:0:3995
-975:1:2663
-976:1:2670
-977:1:2671
-978:1:2678
-979:1:2683
-980:1:2690
-981:1:2691
-982:1:2690
-983:1:2691
-984:1:2698
-985:1:2702
-986:0:3995
-987:2:3552
-988:2:3553
-989:2:3557
-990:2:3561
-991:2:3562
-992:2:3566
-993:2:3571
-994:2:3579
-995:2:3583
-996:2:3584
-997:2:3579
-998:2:3580
-999:2:3588
-1000:2:3595
-1001:2:3602
-1002:2:3603
-1003:2:3610
-1004:2:3615
-1005:2:3622
-1006:2:3623
-1007:2:3622
-1008:2:3623
-1009:2:3630
-1010:2:3634
-1011:0:3995
-1012:2:2940
-1013:2:3533
-1014:0:3995
-1015:2:2768
-1016:0:3995
-1017:2:2941
-1018:0:3995
-1019:2:2768
-1020:0:3995
-1021:2:2944
-1022:2:2945
-1023:2:2949
-1024:2:2950
-1025:2:2958
-1026:2:2959
-1027:2:2963
-1028:2:2964
-1029:2:2972
-1030:2:2977
-1031:2:2981
-1032:2:2982
-1033:2:2990
-1034:2:2991
-1035:2:2995
-1036:2:2996
-1037:2:2990
-1038:2:2991
-1039:2:2995
-1040:2:2996
-1041:2:3004
-1042:2:3009
-1043:2:3016
-1044:2:3017
-1045:2:3024
-1046:2:3029
-1047:2:3036
-1048:2:3037
-1049:2:3036
-1050:2:3037
-1051:2:3044
-1052:2:3053
-1053:0:3995
-1054:2:2768
-1055:0:3995
-1056:2:3057
-1057:2:3058
-1058:2:3059
-1059:2:3071
-1060:2:3072
-1061:2:3076
-1062:2:3077
-1063:2:3085
-1064:2:3090
-1065:2:3094
-1066:2:3095
-1067:2:3103
-1068:2:3104
-1069:2:3108
-1070:2:3109
-1071:2:3103
-1072:2:3104
-1073:2:3108
-1074:2:3109
-1075:2:3117
-1076:2:3122
-1077:2:3129
-1078:2:3130
-1079:2:3137
-1080:2:3142
-1081:2:3149
-1082:2:3150
-1083:2:3149
-1084:2:3150
-1085:2:3157
-1086:2:3168
-1087:0:3995
-1088:2:2768
-1089:0:3995
-1090:2:3174
-1091:0:3995
-1092:2:3643
-1093:2:3644
-1094:2:3648
-1095:2:3652
-1096:2:3653
-1097:2:3657
-1098:2:3665
-1099:2:3666
-1100:2:3670
-1101:2:3674
-1102:2:3675
-1103:2:3670
-1104:2:3674
-1105:2:3675
-1106:2:3679
-1107:2:3686
-1108:2:3693
-1109:2:3694
-1110:2:3701
-1111:2:3706
-1112:2:3713
-1113:2:3714
-1114:2:3713
-1115:2:3714
-1116:2:3721
-1117:2:3725
-1118:0:3995
-1119:2:3176
-1120:2:3177
-1121:0:3995
-1122:2:2768
-1123:0:3995
-1124:2:3178
-1125:2:3179
-1126:2:3183
-1127:2:3184
-1128:2:3192
-1129:2:3193
-1130:2:3197
-1131:2:3198
-1132:2:3206
-1133:2:3211
-1134:2:3215
-1135:2:3216
-1136:2:3224
-1137:2:3225
-1138:2:3229
-1139:2:3230
-1140:2:3224
-1141:2:3225
-1142:2:3229
-1143:2:3230
-1144:2:3238
-1145:2:3243
-1146:2:3250
-1147:2:3251
-1148:2:3258
-1149:2:3263
-1150:2:3270
-1151:2:3271
-1152:2:3270
-1153:2:3271
-1154:2:3278
-1155:0:3995
-1156:2:2768
-1157:0:3995
-1158:2:3057
-1159:2:3058
-1160:2:3062
-1161:2:3063
-1162:2:3071
-1163:2:3072
-1164:2:3076
-1165:2:3077
-1166:2:3085
-1167:2:3090
-1168:2:3094
-1169:2:3095
-1170:2:3103
-1171:2:3104
-1172:2:3108
-1173:2:3109
-1174:2:3103
-1175:2:3104
-1176:2:3108
-1177:2:3109
-1178:2:3117
-1179:2:3122
-1180:2:3129
-1181:2:3130
-1182:2:3137
-1183:2:3142
-1184:2:3149
-1185:2:3150
-1186:2:3149
-1187:2:3150
-1188:2:3157
-1189:2:3168
-1190:0:3995
-1191:2:2768
-1192:0:3995
-1193:2:3174
-1194:0:3995
-1195:2:3643
-1196:2:3644
-1197:2:3648
-1198:2:3652
-1199:2:3653
-1200:2:3657
-1201:2:3665
-1202:2:3666
-1203:2:3670
-1204:2:3674
-1205:2:3675
-1206:2:3670
-1207:2:3674
-1208:2:3675
-1209:2:3679
-1210:2:3686
-1211:2:3693
-1212:2:3694
-1213:2:3701
-1214:2:3706
-1215:2:3713
-1216:2:3714
-1217:2:3713
-1218:2:3714
-1219:2:3721
-1220:2:3725
-1221:0:3995
-1222:2:3176
-1223:2:3177
-1224:0:3995
-1225:2:2768
-1226:0:3995
-1227:2:3057
-1228:2:3058
-1229:2:3062
-1230:2:3063
-1231:2:3071
-1232:2:3072
-1233:2:3076
-1234:2:3077
-1235:2:3085
-1236:2:3090
-1237:2:3094
-1238:2:3095
-1239:2:3103
-1240:2:3104
-1241:2:3108
-1242:2:3109
-1243:2:3103
-1244:2:3104
-1245:2:3108
-1246:2:3109
-1247:2:3117
-1248:2:3122
-1249:2:3129
-1250:2:3130
-1251:2:3137
-1252:2:3142
-1253:2:3149
-1254:2:3150
-1255:2:3149
-1256:2:3150
-1257:2:3157
-1258:2:3168
-1259:0:3995
-1260:2:2768
-1261:0:3995
-1262:2:3174
-1263:0:3995
-1264:2:3643
-1265:2:3644
-1266:2:3648
-1267:2:3652
-1268:2:3653
-1269:2:3657
-1270:2:3665
-1271:2:3666
-1272:2:3670
-1273:2:3674
-1274:2:3675
-1275:2:3670
-1276:2:3674
-1277:2:3675
-1278:2:3679
-1279:2:3686
-1280:2:3693
-1281:2:3694
-1282:2:3701
-1283:2:3706
-1284:2:3713
-1285:2:3714
-1286:2:3713
-1287:2:3714
-1288:2:3721
-1289:2:3725
-1290:0:3995
-1291:1:1129
-1292:1:1130
-1293:0:3993
-1294:1:11
-1295:0:3999
-1296:1:2142
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.define b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.log b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 92cda73..0000000
+++ /dev/null
@@ -1,571 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-Depth=    5162 States=    1e+06 Transitions= 1.79e+07 Memory=   550.334        t=     49 R=   2e+04
-pan: claim violated! (at depth 1059)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 5162, errors: 1
-  1708535 states, stored
- 29763099 states, matched
- 31471634 transitions (= stored+matched)
-4.8935629e+08 atomic steps
-hash conflicts:  14510834 (resolved)
-
-Stats on memory usage (in Megabytes):
-  189.009      equivalent memory usage for states (stored*(State-vector + overhead))
-  144.122      actual memory usage for states (compression: 76.25%)
-               state-vector as stored = 60 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  609.807      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 81, "(1)"
-       line 257, "pan.___", state 101, "(1)"
-       line 261, "pan.___", state 109, "(1)"
-       line 597, "pan.___", state 128, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 199, "(1)"
-       line 257, "pan.___", state 219, "(1)"
-       line 261, "pan.___", state 227, "(1)"
-       line 411, "pan.___", state 246, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 278, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 292, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 310, "(1)"
-       line 257, "pan.___", state 330, "(1)"
-       line 261, "pan.___", state 338, "(1)"
-       line 411, "pan.___", state 359, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 361, "(1)"
-       line 411, "pan.___", state 362, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 362, "else"
-       line 411, "pan.___", state 365, "(1)"
-       line 415, "pan.___", state 373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 375, "(1)"
-       line 415, "pan.___", state 376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 376, "else"
-       line 415, "pan.___", state 379, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 413, "pan.___", state 385, "((i<1))"
-       line 413, "pan.___", state 385, "((i>=1))"
-       line 420, "pan.___", state 391, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 393, "(1)"
-       line 420, "pan.___", state 394, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 394, "else"
-       line 420, "pan.___", state 397, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 424, "pan.___", state 405, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 407, "(1)"
-       line 424, "pan.___", state 408, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 408, "else"
-       line 424, "pan.___", state 411, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 422, "pan.___", state 417, "((i<2))"
-       line 422, "pan.___", state 417, "((i>=2))"
-       line 249, "pan.___", state 423, "(1)"
-       line 253, "pan.___", state 431, "(1)"
-       line 253, "pan.___", state 432, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 432, "else"
-       line 251, "pan.___", state 437, "((i<1))"
-       line 251, "pan.___", state 437, "((i>=1))"
-       line 257, "pan.___", state 443, "(1)"
-       line 257, "pan.___", state 444, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 444, "else"
-       line 261, "pan.___", state 451, "(1)"
-       line 261, "pan.___", state 452, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 452, "else"
-       line 259, "pan.___", state 457, "((i<2))"
-       line 259, "pan.___", state 457, "((i>=2))"
-       line 266, "pan.___", state 461, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 461, "else"
-       line 431, "pan.___", state 463, "(1)"
-       line 431, "pan.___", state 463, "(1)"
-       line 597, "pan.___", state 466, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 467, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 468, "(1)"
-       line 272, "pan.___", state 472, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 483, "(1)"
-       line 280, "pan.___", state 494, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 519, "(1)"
-       line 253, "pan.___", state 527, "(1)"
-       line 257, "pan.___", state 539, "(1)"
-       line 261, "pan.___", state 547, "(1)"
-       line 411, "pan.___", state 565, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 579, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 597, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 611, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 629, "(1)"
-       line 253, "pan.___", state 637, "(1)"
-       line 257, "pan.___", state 649, "(1)"
-       line 261, "pan.___", state 657, "(1)"
-       line 411, "pan.___", state 683, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 715, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 729, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 747, "(1)"
-       line 257, "pan.___", state 767, "(1)"
-       line 261, "pan.___", state 775, "(1)"
-       line 411, "pan.___", state 794, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 796, "(1)"
-       line 411, "pan.___", state 797, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 797, "else"
-       line 411, "pan.___", state 800, "(1)"
-       line 415, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 810, "(1)"
-       line 415, "pan.___", state 811, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 811, "else"
-       line 415, "pan.___", state 814, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 413, "pan.___", state 820, "((i<1))"
-       line 413, "pan.___", state 820, "((i>=1))"
-       line 420, "pan.___", state 826, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 828, "(1)"
-       line 420, "pan.___", state 829, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 829, "else"
-       line 420, "pan.___", state 832, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 424, "pan.___", state 840, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 842, "(1)"
-       line 424, "pan.___", state 843, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 843, "else"
-       line 424, "pan.___", state 846, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 422, "pan.___", state 852, "((i<2))"
-       line 422, "pan.___", state 852, "((i>=2))"
-       line 249, "pan.___", state 858, "(1)"
-       line 253, "pan.___", state 866, "(1)"
-       line 253, "pan.___", state 867, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 867, "else"
-       line 251, "pan.___", state 872, "((i<1))"
-       line 251, "pan.___", state 872, "((i>=1))"
-       line 257, "pan.___", state 878, "(1)"
-       line 257, "pan.___", state 879, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 879, "else"
-       line 261, "pan.___", state 886, "(1)"
-       line 261, "pan.___", state 887, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 887, "else"
-       line 259, "pan.___", state 892, "((i<2))"
-       line 259, "pan.___", state 892, "((i>=2))"
-       line 266, "pan.___", state 896, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 896, "else"
-       line 431, "pan.___", state 898, "(1)"
-       line 431, "pan.___", state 898, "(1)"
-       line 605, "pan.___", state 902, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 921, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 971, "(1)"
-       line 253, "pan.___", state 979, "(1)"
-       line 257, "pan.___", state 991, "(1)"
-       line 261, "pan.___", state 999, "(1)"
-       line 411, "pan.___", state 1021, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1053, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1067, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1085, "(1)"
-       line 257, "pan.___", state 1105, "(1)"
-       line 261, "pan.___", state 1113, "(1)"
-       line 411, "pan.___", state 1136, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1168, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1182, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1200, "(1)"
-       line 257, "pan.___", state 1220, "(1)"
-       line 261, "pan.___", state 1228, "(1)"
-       line 411, "pan.___", state 1247, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1279, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1293, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1311, "(1)"
-       line 257, "pan.___", state 1331, "(1)"
-       line 261, "pan.___", state 1339, "(1)"
-       line 272, "pan.___", state 1360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1382, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1391, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1407, "(1)"
-       line 253, "pan.___", state 1415, "(1)"
-       line 257, "pan.___", state 1427, "(1)"
-       line 261, "pan.___", state 1435, "(1)"
-       line 411, "pan.___", state 1453, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1467, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1485, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1499, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1517, "(1)"
-       line 253, "pan.___", state 1525, "(1)"
-       line 257, "pan.___", state 1537, "(1)"
-       line 261, "pan.___", state 1545, "(1)"
-       line 411, "pan.___", state 1564, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1596, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1610, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1628, "(1)"
-       line 253, "pan.___", state 1636, "(1)"
-       line 257, "pan.___", state 1648, "(1)"
-       line 261, "pan.___", state 1656, "(1)"
-       line 411, "pan.___", state 1678, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1710, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1724, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1742, "(1)"
-       line 257, "pan.___", state 1762, "(1)"
-       line 261, "pan.___", state 1770, "(1)"
-       line 644, "pan.___", state 1789, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1828, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1842, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1860, "(1)"
-       line 257, "pan.___", state 1880, "(1)"
-       line 261, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1971, "(1)"
-       line 257, "pan.___", state 1991, "(1)"
-       line 261, "pan.___", state 1999, "(1)"
-       line 411, "pan.___", state 2020, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2022, "(1)"
-       line 411, "pan.___", state 2023, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2023, "else"
-       line 411, "pan.___", state 2026, "(1)"
-       line 415, "pan.___", state 2034, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2036, "(1)"
-       line 415, "pan.___", state 2037, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2037, "else"
-       line 415, "pan.___", state 2040, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 413, "pan.___", state 2046, "((i<1))"
-       line 413, "pan.___", state 2046, "((i>=1))"
-       line 420, "pan.___", state 2052, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2054, "(1)"
-       line 420, "pan.___", state 2055, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2055, "else"
-       line 420, "pan.___", state 2058, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 424, "pan.___", state 2066, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2068, "(1)"
-       line 424, "pan.___", state 2069, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2069, "else"
-       line 424, "pan.___", state 2072, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 422, "pan.___", state 2078, "((i<2))"
-       line 422, "pan.___", state 2078, "((i>=2))"
-       line 249, "pan.___", state 2084, "(1)"
-       line 253, "pan.___", state 2092, "(1)"
-       line 253, "pan.___", state 2093, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2093, "else"
-       line 251, "pan.___", state 2098, "((i<1))"
-       line 251, "pan.___", state 2098, "((i>=1))"
-       line 257, "pan.___", state 2104, "(1)"
-       line 257, "pan.___", state 2105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2105, "else"
-       line 261, "pan.___", state 2112, "(1)"
-       line 261, "pan.___", state 2113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2113, "else"
-       line 259, "pan.___", state 2118, "((i<2))"
-       line 259, "pan.___", state 2118, "((i>=2))"
-       line 266, "pan.___", state 2122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2122, "else"
-       line 431, "pan.___", state 2124, "(1)"
-       line 431, "pan.___", state 2124, "(1)"
-       line 644, "pan.___", state 2127, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2128, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2129, "(1)"
-       line 272, "pan.___", state 2133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2164, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2180, "(1)"
-       line 253, "pan.___", state 2188, "(1)"
-       line 257, "pan.___", state 2200, "(1)"
-       line 261, "pan.___", state 2208, "(1)"
-       line 411, "pan.___", state 2226, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2240, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2258, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2272, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2290, "(1)"
-       line 253, "pan.___", state 2298, "(1)"
-       line 257, "pan.___", state 2310, "(1)"
-       line 261, "pan.___", state 2318, "(1)"
-       line 272, "pan.___", state 2340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2349, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2362, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2371, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2387, "(1)"
-       line 253, "pan.___", state 2395, "(1)"
-       line 257, "pan.___", state 2407, "(1)"
-       line 261, "pan.___", state 2415, "(1)"
-       line 411, "pan.___", state 2433, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2447, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2479, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2497, "(1)"
-       line 253, "pan.___", state 2505, "(1)"
-       line 257, "pan.___", state 2517, "(1)"
-       line 261, "pan.___", state 2525, "(1)"
-       line 411, "pan.___", state 2544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2558, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2576, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2590, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2608, "(1)"
-       line 253, "pan.___", state 2616, "(1)"
-       line 257, "pan.___", state 2628, "(1)"
-       line 261, "pan.___", state 2636, "(1)"
-       line 249, "pan.___", state 2667, "(1)"
-       line 257, "pan.___", state 2687, "(1)"
-       line 261, "pan.___", state 2695, "(1)"
-       line 249, "pan.___", state 2710, "(1)"
-       line 253, "pan.___", state 2718, "(1)"
-       line 257, "pan.___", state 2730, "(1)"
-       line 261, "pan.___", state 2738, "(1)"
-       line 898, "pan.___", state 2755, "-end-"
-       (259 of 2755 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 22, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 36, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 54, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 86, "(1)"
-       line 253, "pan.___", state 94, "(1)"
-       line 257, "pan.___", state 106, "(1)"
-       line 272, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 144, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 157, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 211, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 229, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 243, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 261, "(1)"
-       line 253, "pan.___", state 269, "(1)"
-       line 257, "pan.___", state 281, "(1)"
-       line 261, "pan.___", state 289, "(1)"
-       line 415, "pan.___", state 324, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 342, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 356, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 382, "(1)"
-       line 257, "pan.___", state 394, "(1)"
-       line 261, "pan.___", state 402, "(1)"
-       line 411, "pan.___", state 430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 444, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 462, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 476, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 494, "(1)"
-       line 253, "pan.___", state 502, "(1)"
-       line 257, "pan.___", state 514, "(1)"
-       line 261, "pan.___", state 522, "(1)"
-       line 411, "pan.___", state 541, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 543, "(1)"
-       line 411, "pan.___", state 544, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 544, "else"
-       line 411, "pan.___", state 547, "(1)"
-       line 415, "pan.___", state 555, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 557, "(1)"
-       line 415, "pan.___", state 558, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 558, "else"
-       line 415, "pan.___", state 561, "(1)"
-       line 415, "pan.___", state 562, "(1)"
-       line 415, "pan.___", state 562, "(1)"
-       line 413, "pan.___", state 567, "((i<1))"
-       line 413, "pan.___", state 567, "((i>=1))"
-       line 420, "pan.___", state 573, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 575, "(1)"
-       line 420, "pan.___", state 576, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 576, "else"
-       line 420, "pan.___", state 579, "(1)"
-       line 420, "pan.___", state 580, "(1)"
-       line 420, "pan.___", state 580, "(1)"
-       line 424, "pan.___", state 587, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 589, "(1)"
-       line 424, "pan.___", state 590, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 590, "else"
-       line 424, "pan.___", state 593, "(1)"
-       line 424, "pan.___", state 594, "(1)"
-       line 424, "pan.___", state 594, "(1)"
-       line 422, "pan.___", state 599, "((i<2))"
-       line 422, "pan.___", state 599, "((i>=2))"
-       line 249, "pan.___", state 605, "(1)"
-       line 253, "pan.___", state 613, "(1)"
-       line 253, "pan.___", state 614, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 614, "else"
-       line 251, "pan.___", state 619, "((i<1))"
-       line 251, "pan.___", state 619, "((i>=1))"
-       line 257, "pan.___", state 625, "(1)"
-       line 257, "pan.___", state 626, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 626, "else"
-       line 261, "pan.___", state 633, "(1)"
-       line 261, "pan.___", state 634, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 634, "else"
-       line 259, "pan.___", state 639, "((i<2))"
-       line 259, "pan.___", state 639, "((i>=2))"
-       line 266, "pan.___", state 643, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 643, "else"
-       line 431, "pan.___", state 645, "(1)"
-       line 431, "pan.___", state 645, "(1)"
-       line 1117, "pan.___", state 649, "_proc_urcu_writer = (_proc_urcu_writer|(1<<10))"
-       line 411, "pan.___", state 654, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 656, "(1)"
-       line 411, "pan.___", state 657, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 657, "else"
-       line 411, "pan.___", state 660, "(1)"
-       line 415, "pan.___", state 668, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 670, "(1)"
-       line 415, "pan.___", state 671, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 671, "else"
-       line 415, "pan.___", state 674, "(1)"
-       line 415, "pan.___", state 675, "(1)"
-       line 415, "pan.___", state 675, "(1)"
-       line 413, "pan.___", state 680, "((i<1))"
-       line 413, "pan.___", state 680, "((i>=1))"
-       line 420, "pan.___", state 686, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 688, "(1)"
-       line 420, "pan.___", state 689, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 689, "else"
-       line 420, "pan.___", state 692, "(1)"
-       line 420, "pan.___", state 693, "(1)"
-       line 420, "pan.___", state 693, "(1)"
-       line 424, "pan.___", state 700, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 702, "(1)"
-       line 424, "pan.___", state 703, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 703, "else"
-       line 424, "pan.___", state 706, "(1)"
-       line 424, "pan.___", state 707, "(1)"
-       line 424, "pan.___", state 707, "(1)"
-       line 422, "pan.___", state 712, "((i<2))"
-       line 422, "pan.___", state 712, "((i>=2))"
-       line 249, "pan.___", state 718, "(1)"
-       line 253, "pan.___", state 726, "(1)"
-       line 253, "pan.___", state 727, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 727, "else"
-       line 251, "pan.___", state 732, "((i<1))"
-       line 251, "pan.___", state 732, "((i>=1))"
-       line 257, "pan.___", state 738, "(1)"
-       line 257, "pan.___", state 739, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 739, "else"
-       line 261, "pan.___", state 746, "(1)"
-       line 261, "pan.___", state 747, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 747, "else"
-       line 259, "pan.___", state 752, "((i<2))"
-       line 259, "pan.___", state 752, "((i>=2))"
-       line 266, "pan.___", state 756, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 756, "else"
-       line 431, "pan.___", state 758, "(1)"
-       line 431, "pan.___", state 758, "(1)"
-       line 1133, "pan.___", state 763, "_proc_urcu_writer = (_proc_urcu_writer|(1<<11))"
-       line 1128, "pan.___", state 764, "(((tmp2&((1<<7)-1))&&((tmp2^0)&(1<<7))))"
-       line 1128, "pan.___", state 764, "else"
-       line 1153, "pan.___", state 768, "_proc_urcu_writer = (_proc_urcu_writer&~(((1<<12)|(1<<11))))"
-       line 272, "pan.___", state 799, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 823, "(1)"
-       line 284, "pan.___", state 830, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 846, "(1)"
-       line 253, "pan.___", state 854, "(1)"
-       line 257, "pan.___", state 866, "(1)"
-       line 261, "pan.___", state 874, "(1)"
-       line 276, "pan.___", state 899, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 912, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 921, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 937, "(1)"
-       line 253, "pan.___", state 945, "(1)"
-       line 257, "pan.___", state 957, "(1)"
-       line 261, "pan.___", state 965, "(1)"
-       line 272, "pan.___", state 981, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 272, "pan.___", state 983, "(1)"
-       line 276, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 992, "(1)"
-       line 276, "pan.___", state 993, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 276, "pan.___", state 993, "else"
-       line 274, "pan.___", state 998, "((i<1))"
-       line 274, "pan.___", state 998, "((i>=1))"
-       line 280, "pan.___", state 1003, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1005, "(1)"
-       line 280, "pan.___", state 1006, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 280, "pan.___", state 1006, "else"
-       line 284, "pan.___", state 1012, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1014, "(1)"
-       line 284, "pan.___", state 1015, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 284, "pan.___", state 1015, "else"
-       line 282, "pan.___", state 1020, "((i<2))"
-       line 282, "pan.___", state 1020, "((i>=2))"
-       line 249, "pan.___", state 1028, "(1)"
-       line 253, "pan.___", state 1036, "(1)"
-       line 253, "pan.___", state 1037, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 1037, "else"
-       line 251, "pan.___", state 1042, "((i<1))"
-       line 251, "pan.___", state 1042, "((i>=1))"
-       line 257, "pan.___", state 1048, "(1)"
-       line 257, "pan.___", state 1049, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 1049, "else"
-       line 261, "pan.___", state 1056, "(1)"
-       line 261, "pan.___", state 1057, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 1057, "else"
-       line 266, "pan.___", state 1066, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 1066, "else"
-       line 299, "pan.___", state 1068, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 299, "pan.___", state 1068, "else"
-       line 276, "pan.___", state 1081, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1094, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1103, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1119, "(1)"
-       line 253, "pan.___", state 1127, "(1)"
-       line 257, "pan.___", state 1139, "(1)"
-       line 261, "pan.___", state 1147, "(1)"
-       line 1237, "pan.___", state 1162, "-end-"
-       (145 of 1162 states)
-unreached in proctype :init:
-       line 1248, "pan.___", state 9, "((j<2))"
-       line 1248, "pan.___", state 9, "((j>=2))"
-       line 1249, "pan.___", state 20, "((j<2))"
-       line 1249, "pan.___", state 20, "((j>=2))"
-       line 1254, "pan.___", state 33, "((j<2))"
-       line 1254, "pan.___", state 33, "((j>=2))"
-       line 1252, "pan.___", state 43, "((i<1))"
-       line 1252, "pan.___", state 43, "((i>=1))"
-       line 1262, "pan.___", state 54, "((j<2))"
-       line 1262, "pan.___", state 54, "((j>=2))"
-       line 1266, "pan.___", state 67, "((j<2))"
-       line 1266, "pan.___", state 67, "((j>=2))"
-       (6 of 78 states)
-unreached in proctype :never:
-       line 1300, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 86.8 seconds
-pan: rate 19690.388 states/second
-pan: avg transition delay 2.7571e-06 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index e7189ef..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define SINGLE_FLIP
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 6eb297f..0000000
+++ /dev/null
@@ -1,1062 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:3997
-2:3:3917
-3:3:3920
-4:3:3920
-5:3:3923
-6:3:3931
-7:3:3931
-8:3:3934
-9:3:3940
-10:3:3944
-11:3:3944
-12:3:3947
-13:3:3957
-14:3:3965
-15:3:3965
-16:3:3968
-17:3:3974
-18:3:3978
-19:3:3978
-20:3:3981
-21:3:3987
-22:3:3991
-23:3:3992
-24:0:3997
-25:3:3994
-26:0:3997
-27:2:2757
-28:0:3997
-29:2:2763
-30:0:3997
-31:2:2764
-32:0:3997
-33:2:2766
-34:0:3997
-35:2:2767
-36:0:3997
-37:2:2768
-38:0:3997
-39:2:2769
-40:0:3997
-41:2:2770
-42:0:3997
-43:2:2771
-44:0:3997
-45:2:2772
-46:2:2773
-47:2:2777
-48:2:2778
-49:2:2786
-50:2:2787
-51:2:2791
-52:2:2792
-53:2:2800
-54:2:2805
-55:2:2809
-56:2:2810
-57:2:2818
-58:2:2819
-59:2:2823
-60:2:2824
-61:2:2818
-62:2:2819
-63:2:2823
-64:2:2824
-65:2:2832
-66:2:2837
-67:2:2844
-68:2:2845
-69:2:2852
-70:2:2857
-71:2:2864
-72:2:2865
-73:2:2864
-74:2:2865
-75:2:2872
-76:2:2882
-77:0:3997
-78:2:2771
-79:0:3997
-80:2:2886
-81:2:2890
-82:2:2891
-83:2:2895
-84:2:2899
-85:2:2900
-86:2:2904
-87:2:2912
-88:2:2913
-89:2:2917
-90:2:2921
-91:2:2922
-92:2:2917
-93:2:2918
-94:2:2926
-95:0:3997
-96:2:2771
-97:0:3997
-98:2:2934
-99:2:2935
-100:2:2936
-101:0:3997
-102:2:2771
-103:0:3997
-104:2:2941
-105:0:3997
-106:2:3554
-107:2:3555
-108:2:3559
-109:2:3563
-110:2:3564
-111:2:3568
-112:2:3573
-113:2:3581
-114:2:3585
-115:2:3586
-116:2:3581
-117:2:3585
-118:2:3586
-119:2:3590
-120:2:3597
-121:2:3604
-122:2:3605
-123:2:3612
-124:2:3617
-125:2:3624
-126:2:3625
-127:2:3624
-128:2:3625
-129:2:3632
-130:2:3636
-131:0:3997
-132:2:2943
-133:2:3535
-134:0:3997
-135:2:2771
-136:0:3997
-137:2:2944
-138:0:3997
-139:2:2771
-140:0:3997
-141:2:2947
-142:2:2948
-143:2:2952
-144:2:2953
-145:2:2961
-146:2:2962
-147:2:2966
-148:2:2967
-149:2:2975
-150:2:2980
-151:2:2984
-152:2:2985
-153:2:2993
-154:2:2994
-155:2:2998
-156:2:2999
-157:2:2993
-158:2:2994
-159:2:2998
-160:2:2999
-161:2:3007
-162:2:3012
-163:2:3019
-164:2:3020
-165:2:3027
-166:2:3032
-167:2:3039
-168:2:3040
-169:2:3039
-170:2:3040
-171:2:3047
-172:2:3056
-173:0:3997
-174:2:2771
-175:0:3997
-176:2:3060
-177:2:3069
-178:2:3070
-179:2:3074
-180:2:3075
-181:2:3079
-182:2:3080
-183:2:3088
-184:2:3093
-185:2:3097
-186:2:3098
-187:2:3106
-188:2:3107
-189:2:3111
-190:2:3112
-191:2:3106
-192:2:3107
-193:2:3111
-194:2:3112
-195:2:3120
-196:2:3127
-197:2:3128
-198:2:3132
-199:2:3133
-200:2:3140
-201:2:3145
-202:2:3152
-203:2:3153
-204:2:3152
-205:2:3153
-206:2:3160
-207:2:3172
-208:2:3173
-209:0:3997
-210:2:2771
-211:0:3997
-212:2:3523
-213:0:3997
-214:1:2
-215:0:3997
-216:1:8
-217:0:3997
-218:1:9
-219:0:3997
-220:1:10
-221:0:3997
-222:1:11
-223:0:3997
-224:1:12
-225:1:13
-226:1:17
-227:1:18
-228:1:26
-229:1:27
-230:1:31
-231:1:32
-232:1:40
-233:1:45
-234:1:49
-235:1:50
-236:1:58
-237:1:59
-238:1:63
-239:1:64
-240:1:58
-241:1:59
-242:1:63
-243:1:64
-244:1:72
-245:1:77
-246:1:84
-247:1:85
-248:1:92
-249:1:97
-250:1:104
-251:1:105
-252:1:104
-253:1:105
-254:1:112
-255:0:3997
-256:1:11
-257:0:3997
-258:1:123
-259:1:124
-260:0:3997
-261:1:11
-262:0:3997
-263:1:130
-264:1:131
-265:1:135
-266:1:136
-267:1:144
-268:1:145
-269:1:149
-270:1:150
-271:1:158
-272:1:163
-273:1:167
-274:1:168
-275:1:176
-276:1:177
-277:1:181
-278:1:182
-279:1:176
-280:1:177
-281:1:181
-282:1:182
-283:1:190
-284:1:195
-285:1:202
-286:1:203
-287:1:210
-288:1:215
-289:1:222
-290:1:223
-291:1:222
-292:1:223
-293:1:230
-294:0:3997
-295:1:11
-296:0:3997
-297:2:3824
-298:2:3832
-299:2:3836
-300:2:3837
-301:2:3841
-302:2:3849
-303:2:3850
-304:2:3854
-305:2:3858
-306:2:3859
-307:2:3854
-308:2:3858
-309:2:3859
-310:2:3863
-311:2:3870
-312:2:3877
-313:2:3878
-314:2:3885
-315:2:3890
-316:2:3897
-317:2:3898
-318:2:3897
-319:2:3898
-320:2:3905
-321:2:3909
-322:0:3997
-323:2:3525
-324:2:3535
-325:0:3997
-326:2:2771
-327:0:3997
-328:2:3526
-329:2:3527
-330:0:3997
-331:2:2771
-332:0:3997
-333:2:3531
-334:0:3997
-335:2:3539
-336:0:3997
-337:2:2764
-338:0:3997
-339:2:2766
-340:0:3997
-341:2:2767
-342:0:3997
-343:2:2768
-344:0:3997
-345:2:2769
-346:0:3997
-347:2:2770
-348:0:3997
-349:2:2771
-350:0:3997
-351:2:2772
-352:2:2773
-353:2:2777
-354:2:2778
-355:2:2786
-356:2:2787
-357:2:2791
-358:2:2792
-359:2:2800
-360:2:2805
-361:2:2809
-362:2:2810
-363:2:2818
-364:2:2819
-365:2:2820
-366:2:2818
-367:2:2819
-368:2:2823
-369:2:2824
-370:2:2832
-371:2:2837
-372:2:2844
-373:2:2845
-374:2:2852
-375:2:2857
-376:2:2864
-377:2:2865
-378:2:2864
-379:2:2865
-380:2:2872
-381:2:2882
-382:0:3997
-383:2:2771
-384:0:3997
-385:2:2886
-386:2:2890
-387:2:2891
-388:2:2895
-389:2:2899
-390:2:2900
-391:2:2904
-392:2:2912
-393:2:2913
-394:2:2917
-395:2:2918
-396:2:2917
-397:2:2921
-398:2:2922
-399:2:2926
-400:0:3997
-401:2:2771
-402:0:3997
-403:2:2934
-404:2:2935
-405:2:2936
-406:0:3997
-407:2:2771
-408:0:3997
-409:2:2941
-410:0:3997
-411:1:241
-412:1:242
-413:1:246
-414:1:247
-415:1:255
-416:1:256
-417:1:260
-418:1:261
-419:1:269
-420:1:274
-421:1:278
-422:1:279
-423:1:287
-424:1:288
-425:1:292
-426:1:293
-427:1:287
-428:1:288
-429:1:292
-430:1:293
-431:1:301
-432:1:306
-433:1:313
-434:1:314
-435:1:321
-436:1:326
-437:1:333
-438:1:334
-439:1:333
-440:1:334
-441:1:341
-442:1:350
-443:0:3997
-444:1:11
-445:0:3997
-446:1:468
-447:1:472
-448:1:473
-449:1:477
-450:1:478
-451:1:486
-452:1:494
-453:1:495
-454:1:499
-455:1:503
-456:1:504
-457:1:499
-458:1:503
-459:1:504
-460:1:508
-461:1:515
-462:1:522
-463:1:523
-464:1:530
-465:1:535
-466:1:542
-467:1:543
-468:1:542
-469:1:543
-470:1:550
-471:0:3997
-472:1:11
-473:0:3997
-474:1:560
-475:1:561
-476:1:565
-477:1:566
-478:1:574
-479:1:575
-480:1:579
-481:1:580
-482:1:588
-483:1:593
-484:1:597
-485:1:598
-486:1:606
-487:1:607
-488:1:611
-489:1:612
-490:1:606
-491:1:607
-492:1:611
-493:1:612
-494:1:620
-495:1:625
-496:1:632
-497:1:633
-498:1:640
-499:1:645
-500:1:652
-501:1:653
-502:1:652
-503:1:653
-504:1:660
-505:0:3997
-506:1:11
-507:0:3997
-508:1:671
-509:1:674
-510:1:675
-511:0:3997
-512:1:11
-513:0:3997
-514:1:678
-515:1:679
-516:1:683
-517:1:684
-518:1:692
-519:1:693
-520:1:697
-521:1:698
-522:1:706
-523:1:711
-524:1:715
-525:1:716
-526:1:724
-527:1:725
-528:1:729
-529:1:730
-530:1:724
-531:1:725
-532:1:729
-533:1:730
-534:1:738
-535:1:743
-536:1:750
-537:1:751
-538:1:758
-539:1:763
-540:1:770
-541:1:771
-542:1:770
-543:1:771
-544:1:778
-545:0:3997
-546:1:11
-547:0:3997
-548:1:902
-549:1:903
-550:1:907
-551:1:908
-552:1:916
-553:1:917
-554:1:921
-555:1:922
-556:1:930
-557:1:935
-558:1:939
-559:1:940
-560:1:948
-561:1:949
-562:1:953
-563:1:954
-564:1:948
-565:1:949
-566:1:953
-567:1:954
-568:1:962
-569:1:967
-570:1:974
-571:1:975
-572:1:982
-573:1:987
-574:1:994
-575:1:995
-576:1:994
-577:1:995
-578:1:1002
-579:1:1011
-580:1:1015
-581:0:3997
-582:1:11
-583:0:3997
-584:1:1016
-585:1:1017
-586:1:1021
-587:1:1022
-588:1:1030
-589:1:1031
-590:1:1032
-591:1:1044
-592:1:1049
-593:1:1053
-594:1:1054
-595:1:1062
-596:1:1063
-597:1:1067
-598:1:1068
-599:1:1062
-600:1:1063
-601:1:1067
-602:1:1068
-603:1:1076
-604:1:1081
-605:1:1088
-606:1:1089
-607:1:1096
-608:1:1101
-609:1:1108
-610:1:1109
-611:1:1108
-612:1:1109
-613:1:1116
-614:0:3997
-615:1:11
-616:0:3997
-617:2:3554
-618:2:3555
-619:2:3559
-620:2:3563
-621:2:3564
-622:2:3568
-623:2:3573
-624:2:3581
-625:2:3585
-626:2:3586
-627:2:3581
-628:2:3585
-629:2:3586
-630:2:3590
-631:2:3597
-632:2:3604
-633:2:3605
-634:2:3612
-635:2:3617
-636:2:3624
-637:2:3625
-638:2:3624
-639:2:3625
-640:2:3632
-641:2:3636
-642:0:3997
-643:2:2943
-644:2:3535
-645:0:3997
-646:2:2771
-647:0:3997
-648:2:2944
-649:0:3997
-650:2:2771
-651:0:3997
-652:2:2947
-653:2:2948
-654:2:2952
-655:2:2953
-656:2:2961
-657:2:2962
-658:2:2966
-659:2:2967
-660:2:2975
-661:2:2980
-662:2:2984
-663:2:2985
-664:2:2993
-665:2:2994
-666:2:2998
-667:2:2999
-668:2:2993
-669:2:2994
-670:2:2998
-671:2:2999
-672:2:3007
-673:2:3012
-674:2:3019
-675:2:3020
-676:2:3027
-677:2:3032
-678:2:3039
-679:2:3040
-680:2:3039
-681:2:3040
-682:2:3047
-683:2:3056
-684:0:3997
-685:2:2771
-686:0:3997
-687:2:3060
-688:2:3061
-689:2:3062
-690:2:3074
-691:2:3075
-692:2:3079
-693:2:3080
-694:2:3088
-695:2:3093
-696:2:3097
-697:2:3098
-698:2:3106
-699:2:3107
-700:2:3111
-701:2:3112
-702:2:3106
-703:2:3107
-704:2:3111
-705:2:3112
-706:2:3120
-707:2:3125
-708:2:3132
-709:2:3133
-710:2:3140
-711:2:3145
-712:2:3152
-713:2:3153
-714:2:3152
-715:2:3153
-716:2:3160
-717:2:3172
-718:2:3173
-719:0:3997
-720:2:2771
-721:0:3997
-722:2:3523
-723:0:3997
-724:2:3827
-725:2:3828
-726:2:3832
-727:2:3836
-728:2:3837
-729:2:3841
-730:2:3849
-731:2:3850
-732:2:3854
-733:2:3858
-734:2:3859
-735:2:3854
-736:2:3858
-737:2:3859
-738:2:3863
-739:2:3870
-740:2:3877
-741:2:3878
-742:2:3885
-743:2:3890
-744:2:3897
-745:2:3898
-746:2:3897
-747:2:3898
-748:2:3905
-749:2:3909
-750:0:3997
-751:2:3525
-752:2:3535
-753:0:3997
-754:2:2771
-755:0:3997
-756:2:3526
-757:2:3527
-758:0:3997
-759:2:2771
-760:0:3997
-761:2:3531
-762:0:3997
-763:2:3539
-764:0:3997
-765:2:2764
-766:0:3997
-767:2:2766
-768:0:3997
-769:2:2767
-770:0:3997
-771:2:2768
-772:0:3997
-773:2:2769
-774:0:3997
-775:2:2770
-776:0:3997
-777:2:2771
-778:0:3997
-779:2:2772
-780:2:2773
-781:2:2777
-782:2:2778
-783:2:2786
-784:2:2787
-785:2:2791
-786:2:2792
-787:2:2800
-788:2:2805
-789:2:2809
-790:2:2810
-791:2:2818
-792:2:2819
-793:2:2823
-794:2:2824
-795:2:2818
-796:2:2819
-797:2:2820
-798:2:2832
-799:2:2837
-800:2:2844
-801:2:2845
-802:2:2852
-803:2:2857
-804:2:2864
-805:2:2865
-806:2:2864
-807:2:2865
-808:2:2872
-809:2:2882
-810:0:3997
-811:2:2771
-812:0:3997
-813:1:1127
-814:0:3997
-815:1:2663
-816:1:2670
-817:1:2671
-818:1:2678
-819:1:2683
-820:1:2690
-821:1:2691
-822:1:2690
-823:1:2691
-824:1:2698
-825:1:2702
-826:0:3997
-827:2:2886
-828:2:2890
-829:2:2891
-830:2:2895
-831:2:2899
-832:2:2900
-833:2:2904
-834:2:2912
-835:2:2913
-836:2:2917
-837:2:2921
-838:2:2922
-839:2:2917
-840:2:2918
-841:2:2926
-842:0:3997
-843:2:2771
-844:0:3997
-845:2:2934
-846:2:2935
-847:2:2936
-848:0:3997
-849:2:2771
-850:0:3997
-851:2:2941
-852:0:3997
-853:2:3554
-854:2:3555
-855:2:3559
-856:2:3563
-857:2:3564
-858:2:3568
-859:2:3573
-860:2:3581
-861:2:3585
-862:2:3586
-863:2:3581
-864:2:3585
-865:2:3586
-866:2:3590
-867:2:3597
-868:2:3604
-869:2:3605
-870:2:3612
-871:2:3617
-872:2:3624
-873:2:3625
-874:2:3624
-875:2:3625
-876:2:3632
-877:2:3636
-878:0:3997
-879:2:2943
-880:2:3535
-881:0:3997
-882:2:2771
-883:0:3997
-884:2:2944
-885:0:3997
-886:2:2771
-887:0:3997
-888:2:2947
-889:2:2948
-890:2:2952
-891:2:2953
-892:2:2961
-893:2:2962
-894:2:2966
-895:2:2967
-896:2:2975
-897:2:2980
-898:2:2984
-899:2:2985
-900:2:2993
-901:2:2994
-902:2:2998
-903:2:2999
-904:2:2993
-905:2:2994
-906:2:2998
-907:2:2999
-908:2:3007
-909:2:3012
-910:2:3019
-911:2:3020
-912:2:3027
-913:2:3032
-914:2:3039
-915:2:3040
-916:2:3039
-917:2:3040
-918:2:3047
-919:2:3056
-920:0:3997
-921:2:2771
-922:0:3997
-923:2:3060
-924:2:3061
-925:2:3062
-926:2:3074
-927:2:3075
-928:2:3079
-929:2:3080
-930:2:3088
-931:2:3093
-932:2:3097
-933:2:3098
-934:2:3106
-935:2:3107
-936:2:3111
-937:2:3112
-938:2:3106
-939:2:3107
-940:2:3111
-941:2:3112
-942:2:3120
-943:2:3125
-944:2:3132
-945:2:3133
-946:2:3140
-947:2:3145
-948:2:3152
-949:2:3153
-950:2:3152
-951:2:3153
-952:2:3160
-953:2:3170
-954:0:3997
-955:2:2771
-956:0:3997
-957:2:3176
-958:0:3997
-959:2:3645
-960:2:3646
-961:2:3650
-962:2:3654
-963:2:3655
-964:2:3659
-965:2:3667
-966:2:3668
-967:2:3672
-968:2:3676
-969:2:3677
-970:2:3672
-971:2:3676
-972:2:3677
-973:2:3681
-974:2:3688
-975:2:3695
-976:2:3696
-977:2:3703
-978:2:3708
-979:2:3715
-980:2:3716
-981:2:3715
-982:2:3716
-983:2:3723
-984:2:3727
-985:0:3997
-986:2:3178
-987:2:3179
-988:0:3997
-989:2:2771
-990:0:3997
-991:2:3060
-992:2:3061
-993:2:3065
-994:2:3066
-995:2:3074
-996:2:3075
-997:2:3079
-998:2:3080
-999:2:3088
-1000:2:3093
-1001:2:3097
-1002:2:3098
-1003:2:3106
-1004:2:3107
-1005:2:3111
-1006:2:3112
-1007:2:3106
-1008:2:3107
-1009:2:3111
-1010:2:3112
-1011:2:3120
-1012:2:3125
-1013:2:3132
-1014:2:3133
-1015:2:3140
-1016:2:3145
-1017:2:3152
-1018:2:3153
-1019:2:3152
-1020:2:3153
-1021:2:3160
-1022:2:3170
-1023:0:3997
-1024:2:2771
-1025:0:3997
-1026:2:3176
-1027:0:3997
-1028:2:3645
-1029:2:3646
-1030:2:3650
-1031:2:3654
-1032:2:3655
-1033:2:3659
-1034:2:3667
-1035:2:3668
-1036:2:3672
-1037:2:3676
-1038:2:3677
-1039:2:3672
-1040:2:3676
-1041:2:3677
-1042:2:3681
-1043:2:3688
-1044:2:3695
-1045:2:3696
-1046:2:3703
-1047:2:3708
-1048:2:3715
-1049:2:3716
-1050:2:3715
-1051:2:3716
-1052:2:3723
-1053:2:3727
-1054:0:3997
-1055:1:1129
-1056:1:1130
-1057:0:3995
-1058:1:11
-1059:0:4001
-1060:1:1715
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress.ltl b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.define b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.log b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.log
deleted file mode 100644 (file)
index c286056..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-depth 23: Claim reached state 9 (line 1300)
-depth 1053: Claim reached state 9 (line 1299)
-Depth=    6090 States=    1e+06 Transitions= 2.22e+07 Memory=   510.295        t=   64.5 R=   2e+04
-Depth=    6090 States=    2e+06 Transitions= 5.32e+07 Memory=   552.776        t=    157 R=   1e+04
-Depth=    6090 States=    3e+06 Transitions= 8.56e+07 Memory=   597.014        t=    253 R=   1e+04
-pan: resizing hashtable to -w22..  done
-Depth=    6090 States=    4e+06 Transitions= 1.18e+08 Memory=   672.764        t=    351 R=   1e+04
-Depth=    6090 States=    5e+06 Transitions= 1.49e+08 Memory=   716.416        t=    443 R=   1e+04
-Depth=    6090 States=    6e+06 Transitions= 1.79e+08 Memory=   760.459        t=    531 R=   1e+04
-Depth=    6090 States=    7e+06 Transitions= 2.11e+08 Memory=   804.990        t=    627 R=   1e+04
-Depth=    6090 States=    8e+06 Transitions= 2.44e+08 Memory=   848.057        t=    727 R=   1e+04
-Depth=    6090 States=    9e+06 Transitions= 2.77e+08 Memory=   891.807        t=    827 R=   1e+04
-pan: resizing hashtable to -w24..  done
-Depth=    6090 States=    1e+07 Transitions= 3.11e+08 Memory=  1062.385        t=    928 R=   1e+04
-Depth=    6090 States=  1.1e+07 Transitions= 3.41e+08 Memory=  1105.744        t= 1.02e+03 R=   1e+04
-Depth=    6090 States=  1.2e+07 Transitions=  3.7e+08 Memory=  1151.252        t= 1.1e+03 R=   1e+04
-Depth=    6090 States=  1.3e+07 Transitions= 4.06e+08 Memory=  1193.635        t= 1.21e+03 R=   1e+04
-Depth=    6090 States=  1.4e+07 Transitions=  4.4e+08 Memory=  1236.506        t= 1.31e+03 R=   1e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 6090, errors: 0
-  7774591 states, stored (1.48046e+07 visited)
-4.51403e+08 states, matched
-4.6620756e+08 transitions (= visited+matched)
-7.4729019e+09 atomic steps
-hash conflicts: 1.6384912e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
-  860.074      equivalent memory usage for states (stored*(State-vector + overhead))
-  689.043      actual memory usage for states (compression: 80.11%)
-               state-vector as stored = 65 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1274.299      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 81, "(1)"
-       line 257, "pan.___", state 101, "(1)"
-       line 261, "pan.___", state 109, "(1)"
-       line 597, "pan.___", state 128, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 199, "(1)"
-       line 257, "pan.___", state 219, "(1)"
-       line 261, "pan.___", state 227, "(1)"
-       line 411, "pan.___", state 246, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 278, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 292, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 310, "(1)"
-       line 257, "pan.___", state 330, "(1)"
-       line 261, "pan.___", state 338, "(1)"
-       line 411, "pan.___", state 359, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 361, "(1)"
-       line 411, "pan.___", state 362, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 362, "else"
-       line 411, "pan.___", state 365, "(1)"
-       line 415, "pan.___", state 373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 375, "(1)"
-       line 415, "pan.___", state 376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 376, "else"
-       line 415, "pan.___", state 379, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 413, "pan.___", state 385, "((i<1))"
-       line 413, "pan.___", state 385, "((i>=1))"
-       line 420, "pan.___", state 391, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 393, "(1)"
-       line 420, "pan.___", state 394, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 394, "else"
-       line 420, "pan.___", state 397, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 424, "pan.___", state 405, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 407, "(1)"
-       line 424, "pan.___", state 408, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 408, "else"
-       line 424, "pan.___", state 411, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 422, "pan.___", state 417, "((i<2))"
-       line 422, "pan.___", state 417, "((i>=2))"
-       line 249, "pan.___", state 423, "(1)"
-       line 253, "pan.___", state 431, "(1)"
-       line 253, "pan.___", state 432, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 432, "else"
-       line 251, "pan.___", state 437, "((i<1))"
-       line 251, "pan.___", state 437, "((i>=1))"
-       line 257, "pan.___", state 443, "(1)"
-       line 257, "pan.___", state 444, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 444, "else"
-       line 261, "pan.___", state 451, "(1)"
-       line 261, "pan.___", state 452, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 452, "else"
-       line 259, "pan.___", state 457, "((i<2))"
-       line 259, "pan.___", state 457, "((i>=2))"
-       line 266, "pan.___", state 461, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 461, "else"
-       line 431, "pan.___", state 463, "(1)"
-       line 431, "pan.___", state 463, "(1)"
-       line 597, "pan.___", state 466, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 467, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 468, "(1)"
-       line 272, "pan.___", state 472, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 483, "(1)"
-       line 280, "pan.___", state 494, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 519, "(1)"
-       line 253, "pan.___", state 527, "(1)"
-       line 257, "pan.___", state 539, "(1)"
-       line 261, "pan.___", state 547, "(1)"
-       line 411, "pan.___", state 565, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 579, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 597, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 611, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 629, "(1)"
-       line 253, "pan.___", state 637, "(1)"
-       line 257, "pan.___", state 649, "(1)"
-       line 261, "pan.___", state 657, "(1)"
-       line 411, "pan.___", state 683, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 715, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 729, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 747, "(1)"
-       line 257, "pan.___", state 767, "(1)"
-       line 261, "pan.___", state 775, "(1)"
-       line 411, "pan.___", state 794, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 796, "(1)"
-       line 411, "pan.___", state 797, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 797, "else"
-       line 411, "pan.___", state 800, "(1)"
-       line 415, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 810, "(1)"
-       line 415, "pan.___", state 811, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 811, "else"
-       line 415, "pan.___", state 814, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 413, "pan.___", state 820, "((i<1))"
-       line 413, "pan.___", state 820, "((i>=1))"
-       line 420, "pan.___", state 826, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 828, "(1)"
-       line 420, "pan.___", state 829, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 829, "else"
-       line 420, "pan.___", state 832, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 424, "pan.___", state 840, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 842, "(1)"
-       line 424, "pan.___", state 843, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 843, "else"
-       line 424, "pan.___", state 846, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 422, "pan.___", state 852, "((i<2))"
-       line 422, "pan.___", state 852, "((i>=2))"
-       line 249, "pan.___", state 858, "(1)"
-       line 253, "pan.___", state 866, "(1)"
-       line 253, "pan.___", state 867, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 867, "else"
-       line 251, "pan.___", state 872, "((i<1))"
-       line 251, "pan.___", state 872, "((i>=1))"
-       line 257, "pan.___", state 878, "(1)"
-       line 257, "pan.___", state 879, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 879, "else"
-       line 261, "pan.___", state 886, "(1)"
-       line 261, "pan.___", state 887, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 887, "else"
-       line 259, "pan.___", state 892, "((i<2))"
-       line 259, "pan.___", state 892, "((i>=2))"
-       line 266, "pan.___", state 896, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 896, "else"
-       line 431, "pan.___", state 898, "(1)"
-       line 431, "pan.___", state 898, "(1)"
-       line 605, "pan.___", state 902, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 921, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 971, "(1)"
-       line 253, "pan.___", state 979, "(1)"
-       line 257, "pan.___", state 991, "(1)"
-       line 261, "pan.___", state 999, "(1)"
-       line 411, "pan.___", state 1021, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1053, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1067, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1085, "(1)"
-       line 257, "pan.___", state 1105, "(1)"
-       line 261, "pan.___", state 1113, "(1)"
-       line 411, "pan.___", state 1136, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1168, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1182, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1200, "(1)"
-       line 257, "pan.___", state 1220, "(1)"
-       line 261, "pan.___", state 1228, "(1)"
-       line 411, "pan.___", state 1247, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1279, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1293, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1311, "(1)"
-       line 257, "pan.___", state 1331, "(1)"
-       line 261, "pan.___", state 1339, "(1)"
-       line 272, "pan.___", state 1360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1382, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1391, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1407, "(1)"
-       line 253, "pan.___", state 1415, "(1)"
-       line 257, "pan.___", state 1427, "(1)"
-       line 261, "pan.___", state 1435, "(1)"
-       line 411, "pan.___", state 1453, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1467, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1485, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1499, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1517, "(1)"
-       line 253, "pan.___", state 1525, "(1)"
-       line 257, "pan.___", state 1537, "(1)"
-       line 261, "pan.___", state 1545, "(1)"
-       line 411, "pan.___", state 1564, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1596, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1610, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1628, "(1)"
-       line 253, "pan.___", state 1636, "(1)"
-       line 257, "pan.___", state 1648, "(1)"
-       line 261, "pan.___", state 1656, "(1)"
-       line 411, "pan.___", state 1678, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1710, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1724, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1742, "(1)"
-       line 257, "pan.___", state 1762, "(1)"
-       line 261, "pan.___", state 1770, "(1)"
-       line 644, "pan.___", state 1789, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1828, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1842, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1860, "(1)"
-       line 257, "pan.___", state 1880, "(1)"
-       line 261, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1971, "(1)"
-       line 257, "pan.___", state 1991, "(1)"
-       line 261, "pan.___", state 1999, "(1)"
-       line 411, "pan.___", state 2020, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2022, "(1)"
-       line 411, "pan.___", state 2023, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2023, "else"
-       line 411, "pan.___", state 2026, "(1)"
-       line 415, "pan.___", state 2034, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2036, "(1)"
-       line 415, "pan.___", state 2037, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2037, "else"
-       line 415, "pan.___", state 2040, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 413, "pan.___", state 2046, "((i<1))"
-       line 413, "pan.___", state 2046, "((i>=1))"
-       line 420, "pan.___", state 2052, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2054, "(1)"
-       line 420, "pan.___", state 2055, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2055, "else"
-       line 420, "pan.___", state 2058, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 424, "pan.___", state 2066, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2068, "(1)"
-       line 424, "pan.___", state 2069, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2069, "else"
-       line 424, "pan.___", state 2072, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 422, "pan.___", state 2078, "((i<2))"
-       line 422, "pan.___", state 2078, "((i>=2))"
-       line 249, "pan.___", state 2084, "(1)"
-       line 253, "pan.___", state 2092, "(1)"
-       line 253, "pan.___", state 2093, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2093, "else"
-       line 251, "pan.___", state 2098, "((i<1))"
-       line 251, "pan.___", state 2098, "((i>=1))"
-       line 257, "pan.___", state 2104, "(1)"
-       line 257, "pan.___", state 2105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2105, "else"
-       line 261, "pan.___", state 2112, "(1)"
-       line 261, "pan.___", state 2113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2113, "else"
-       line 259, "pan.___", state 2118, "((i<2))"
-       line 259, "pan.___", state 2118, "((i>=2))"
-       line 266, "pan.___", state 2122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2122, "else"
-       line 431, "pan.___", state 2124, "(1)"
-       line 431, "pan.___", state 2124, "(1)"
-       line 644, "pan.___", state 2127, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2128, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2129, "(1)"
-       line 272, "pan.___", state 2133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2164, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2180, "(1)"
-       line 253, "pan.___", state 2188, "(1)"
-       line 257, "pan.___", state 2200, "(1)"
-       line 261, "pan.___", state 2208, "(1)"
-       line 411, "pan.___", state 2226, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2240, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2258, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2272, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2290, "(1)"
-       line 253, "pan.___", state 2298, "(1)"
-       line 257, "pan.___", state 2310, "(1)"
-       line 261, "pan.___", state 2318, "(1)"
-       line 272, "pan.___", state 2340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2349, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2362, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2371, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2387, "(1)"
-       line 253, "pan.___", state 2395, "(1)"
-       line 257, "pan.___", state 2407, "(1)"
-       line 261, "pan.___", state 2415, "(1)"
-       line 411, "pan.___", state 2433, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2447, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2479, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2497, "(1)"
-       line 253, "pan.___", state 2505, "(1)"
-       line 257, "pan.___", state 2517, "(1)"
-       line 261, "pan.___", state 2525, "(1)"
-       line 411, "pan.___", state 2544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2558, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2576, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2590, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2608, "(1)"
-       line 253, "pan.___", state 2616, "(1)"
-       line 257, "pan.___", state 2628, "(1)"
-       line 261, "pan.___", state 2636, "(1)"
-       line 249, "pan.___", state 2667, "(1)"
-       line 257, "pan.___", state 2687, "(1)"
-       line 261, "pan.___", state 2695, "(1)"
-       line 249, "pan.___", state 2710, "(1)"
-       line 253, "pan.___", state 2718, "(1)"
-       line 257, "pan.___", state 2730, "(1)"
-       line 261, "pan.___", state 2738, "(1)"
-       line 898, "pan.___", state 2755, "-end-"
-       (259 of 2755 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 82, "(1)"
-       line 253, "pan.___", state 90, "(1)"
-       line 257, "pan.___", state 102, "(1)"
-       line 272, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 140, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 153, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 207, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 225, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 239, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 257, "(1)"
-       line 253, "pan.___", state 265, "(1)"
-       line 257, "pan.___", state 277, "(1)"
-       line 261, "pan.___", state 285, "(1)"
-       line 415, "pan.___", state 320, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 338, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 352, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 378, "(1)"
-       line 257, "pan.___", state 390, "(1)"
-       line 261, "pan.___", state 398, "(1)"
-       line 415, "pan.___", state 441, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 499, "(1)"
-       line 257, "pan.___", state 511, "(1)"
-       line 261, "pan.___", state 519, "(1)"
-       line 415, "pan.___", state 552, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 570, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 584, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 610, "(1)"
-       line 257, "pan.___", state 622, "(1)"
-       line 261, "pan.___", state 630, "(1)"
-       line 415, "pan.___", state 665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 723, "(1)"
-       line 257, "pan.___", state 735, "(1)"
-       line 261, "pan.___", state 743, "(1)"
-       line 272, "pan.___", state 791, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 800, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 813, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 838, "(1)"
-       line 253, "pan.___", state 846, "(1)"
-       line 257, "pan.___", state 858, "(1)"
-       line 261, "pan.___", state 866, "(1)"
-       line 272, "pan.___", state 886, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 895, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 910, "(1)"
-       line 284, "pan.___", state 917, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 933, "(1)"
-       line 253, "pan.___", state 941, "(1)"
-       line 257, "pan.___", state 953, "(1)"
-       line 261, "pan.___", state 961, "(1)"
-       line 276, "pan.___", state 986, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 999, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1008, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1024, "(1)"
-       line 253, "pan.___", state 1032, "(1)"
-       line 257, "pan.___", state 1044, "(1)"
-       line 261, "pan.___", state 1052, "(1)"
-       line 276, "pan.___", state 1077, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1090, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1099, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1115, "(1)"
-       line 253, "pan.___", state 1123, "(1)"
-       line 257, "pan.___", state 1135, "(1)"
-       line 261, "pan.___", state 1143, "(1)"
-       line 276, "pan.___", state 1168, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1181, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1190, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1206, "(1)"
-       line 253, "pan.___", state 1214, "(1)"
-       line 257, "pan.___", state 1226, "(1)"
-       line 261, "pan.___", state 1234, "(1)"
-       line 1237, "pan.___", state 1249, "-end-"
-       (78 of 1249 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1302, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 1.39e+03 seconds
-pan: rate 10656.973 states/second
-pan: avg transition delay 2.9798e-06 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 7cbeb11..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define READER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.define b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.log b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.log
deleted file mode 100644 (file)
index 065cb84..0000000
+++ /dev/null
@@ -1,455 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1295)
-depth 23: Claim reached state 9 (line 1300)
-depth 1404: Claim reached state 9 (line 1299)
-Depth=    4122 States=    1e+06 Transitions= 2.18e+07 Memory=   494.377        t=   63.1 R=   2e+04
-Depth=    4237 States=    2e+06 Transitions= 4.19e+07 Memory=   522.209        t=    122 R=   2e+04
-Depth=    4557 States=    3e+06 Transitions= 6.67e+07 Memory=   550.139        t=    195 R=   2e+04
-pan: resizing hashtable to -w22..  done
-Depth=    4762 States=    4e+06 Transitions= 9.06e+07 Memory=   609.190        t=    264 R=   2e+04
-Depth=    4793 States=    5e+06 Transitions= 1.25e+08 Memory=   666.709        t=    366 R=   1e+04
-Depth=    4793 States=    6e+06 Transitions= 1.62e+08 Memory=   713.877        t=    473 R=   1e+04
-Depth=    4980 States=    7e+06 Transitions= 1.97e+08 Memory=   760.752        t=    578 R=   1e+04
-Depth=    4980 States=    8e+06 Transitions= 2.29e+08 Memory=   809.190        t=    674 R=   1e+04
-Depth=    4980 States=    9e+06 Transitions= 2.66e+08 Memory=   862.803        t=    784 R=   1e+04
-pan: resizing hashtable to -w24..  done
-Depth=    4980 States=    1e+07 Transitions= 2.98e+08 Memory=  1029.377        t=    880 R=   1e+04
-Depth=    4980 States=  1.1e+07 Transitions= 3.34e+08 Memory=  1080.061        t=    987 R=   1e+04
-Depth=    4980 States=  1.2e+07 Transitions= 3.69e+08 Memory=  1129.279        t= 1.09e+03 R=   1e+04
-Depth=    4980 States=  1.3e+07 Transitions= 4.01e+08 Memory=  1177.912        t= 1.18e+03 R=   1e+04
-Depth=    4980 States=  1.4e+07 Transitions=  4.4e+08 Memory=  1226.447        t= 1.3e+03 R=   1e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 4980, errors: 0
-  7808338 states, stored (1.48869e+07 visited)
-4.5734827e+08 states, matched
-4.7223515e+08 transitions (= visited+matched)
-7.5648218e+09 atomic steps
-hash conflicts: 1.2909926e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
-  863.807      equivalent memory usage for states (stored*(State-vector + overhead))
-  691.866      actual memory usage for states (compression: 80.09%)
-               state-vector as stored = 65 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1277.131      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 411, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 81, "(1)"
-       line 257, "pan.___", state 101, "(1)"
-       line 261, "pan.___", state 109, "(1)"
-       line 597, "pan.___", state 128, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 411, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 199, "(1)"
-       line 257, "pan.___", state 219, "(1)"
-       line 261, "pan.___", state 227, "(1)"
-       line 411, "pan.___", state 246, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 278, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 292, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 310, "(1)"
-       line 257, "pan.___", state 330, "(1)"
-       line 261, "pan.___", state 338, "(1)"
-       line 411, "pan.___", state 359, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 361, "(1)"
-       line 411, "pan.___", state 362, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 362, "else"
-       line 411, "pan.___", state 365, "(1)"
-       line 415, "pan.___", state 373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 375, "(1)"
-       line 415, "pan.___", state 376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 376, "else"
-       line 415, "pan.___", state 379, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 415, "pan.___", state 380, "(1)"
-       line 413, "pan.___", state 385, "((i<1))"
-       line 413, "pan.___", state 385, "((i>=1))"
-       line 420, "pan.___", state 391, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 393, "(1)"
-       line 420, "pan.___", state 394, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 394, "else"
-       line 420, "pan.___", state 397, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 420, "pan.___", state 398, "(1)"
-       line 424, "pan.___", state 405, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 407, "(1)"
-       line 424, "pan.___", state 408, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 408, "else"
-       line 424, "pan.___", state 411, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 424, "pan.___", state 412, "(1)"
-       line 422, "pan.___", state 417, "((i<2))"
-       line 422, "pan.___", state 417, "((i>=2))"
-       line 249, "pan.___", state 423, "(1)"
-       line 253, "pan.___", state 431, "(1)"
-       line 253, "pan.___", state 432, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 432, "else"
-       line 251, "pan.___", state 437, "((i<1))"
-       line 251, "pan.___", state 437, "((i>=1))"
-       line 257, "pan.___", state 443, "(1)"
-       line 257, "pan.___", state 444, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 444, "else"
-       line 261, "pan.___", state 451, "(1)"
-       line 261, "pan.___", state 452, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 452, "else"
-       line 259, "pan.___", state 457, "((i<2))"
-       line 259, "pan.___", state 457, "((i>=2))"
-       line 266, "pan.___", state 461, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 461, "else"
-       line 431, "pan.___", state 463, "(1)"
-       line 431, "pan.___", state 463, "(1)"
-       line 597, "pan.___", state 466, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 597, "pan.___", state 467, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 597, "pan.___", state 468, "(1)"
-       line 272, "pan.___", state 472, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 483, "(1)"
-       line 280, "pan.___", state 494, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 519, "(1)"
-       line 253, "pan.___", state 527, "(1)"
-       line 257, "pan.___", state 539, "(1)"
-       line 261, "pan.___", state 547, "(1)"
-       line 411, "pan.___", state 565, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 579, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 597, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 611, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 629, "(1)"
-       line 253, "pan.___", state 637, "(1)"
-       line 257, "pan.___", state 649, "(1)"
-       line 261, "pan.___", state 657, "(1)"
-       line 411, "pan.___", state 683, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 715, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 729, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 747, "(1)"
-       line 257, "pan.___", state 767, "(1)"
-       line 261, "pan.___", state 775, "(1)"
-       line 411, "pan.___", state 794, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 796, "(1)"
-       line 411, "pan.___", state 797, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 797, "else"
-       line 411, "pan.___", state 800, "(1)"
-       line 415, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 810, "(1)"
-       line 415, "pan.___", state 811, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 811, "else"
-       line 415, "pan.___", state 814, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 415, "pan.___", state 815, "(1)"
-       line 413, "pan.___", state 820, "((i<1))"
-       line 413, "pan.___", state 820, "((i>=1))"
-       line 420, "pan.___", state 826, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 828, "(1)"
-       line 420, "pan.___", state 829, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 829, "else"
-       line 420, "pan.___", state 832, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 420, "pan.___", state 833, "(1)"
-       line 424, "pan.___", state 840, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 842, "(1)"
-       line 424, "pan.___", state 843, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 843, "else"
-       line 424, "pan.___", state 846, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 424, "pan.___", state 847, "(1)"
-       line 422, "pan.___", state 852, "((i<2))"
-       line 422, "pan.___", state 852, "((i>=2))"
-       line 249, "pan.___", state 858, "(1)"
-       line 253, "pan.___", state 866, "(1)"
-       line 253, "pan.___", state 867, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 867, "else"
-       line 251, "pan.___", state 872, "((i<1))"
-       line 251, "pan.___", state 872, "((i>=1))"
-       line 257, "pan.___", state 878, "(1)"
-       line 257, "pan.___", state 879, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 879, "else"
-       line 261, "pan.___", state 886, "(1)"
-       line 261, "pan.___", state 887, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 887, "else"
-       line 259, "pan.___", state 892, "((i<2))"
-       line 259, "pan.___", state 892, "((i>=2))"
-       line 266, "pan.___", state 896, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 896, "else"
-       line 431, "pan.___", state 898, "(1)"
-       line 431, "pan.___", state 898, "(1)"
-       line 605, "pan.___", state 902, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 411, "pan.___", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 921, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 971, "(1)"
-       line 253, "pan.___", state 979, "(1)"
-       line 257, "pan.___", state 991, "(1)"
-       line 261, "pan.___", state 999, "(1)"
-       line 411, "pan.___", state 1021, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1053, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1067, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1085, "(1)"
-       line 257, "pan.___", state 1105, "(1)"
-       line 261, "pan.___", state 1113, "(1)"
-       line 411, "pan.___", state 1136, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1168, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1182, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1200, "(1)"
-       line 257, "pan.___", state 1220, "(1)"
-       line 261, "pan.___", state 1228, "(1)"
-       line 411, "pan.___", state 1247, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1279, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1293, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1311, "(1)"
-       line 257, "pan.___", state 1331, "(1)"
-       line 261, "pan.___", state 1339, "(1)"
-       line 272, "pan.___", state 1360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1382, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1391, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1407, "(1)"
-       line 253, "pan.___", state 1415, "(1)"
-       line 257, "pan.___", state 1427, "(1)"
-       line 261, "pan.___", state 1435, "(1)"
-       line 411, "pan.___", state 1453, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1467, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1485, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1499, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1517, "(1)"
-       line 253, "pan.___", state 1525, "(1)"
-       line 257, "pan.___", state 1537, "(1)"
-       line 261, "pan.___", state 1545, "(1)"
-       line 411, "pan.___", state 1564, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1596, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1610, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1628, "(1)"
-       line 253, "pan.___", state 1636, "(1)"
-       line 257, "pan.___", state 1648, "(1)"
-       line 261, "pan.___", state 1656, "(1)"
-       line 411, "pan.___", state 1678, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1710, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1724, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1742, "(1)"
-       line 257, "pan.___", state 1762, "(1)"
-       line 261, "pan.___", state 1770, "(1)"
-       line 644, "pan.___", state 1789, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 411, "pan.___", state 1796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1828, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1842, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1860, "(1)"
-       line 257, "pan.___", state 1880, "(1)"
-       line 261, "pan.___", state 1888, "(1)"
-       line 411, "pan.___", state 1907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 1939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 1953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1971, "(1)"
-       line 257, "pan.___", state 1991, "(1)"
-       line 261, "pan.___", state 1999, "(1)"
-       line 411, "pan.___", state 2020, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 2022, "(1)"
-       line 411, "pan.___", state 2023, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 411, "pan.___", state 2023, "else"
-       line 411, "pan.___", state 2026, "(1)"
-       line 415, "pan.___", state 2034, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2036, "(1)"
-       line 415, "pan.___", state 2037, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 415, "pan.___", state 2037, "else"
-       line 415, "pan.___", state 2040, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 415, "pan.___", state 2041, "(1)"
-       line 413, "pan.___", state 2046, "((i<1))"
-       line 413, "pan.___", state 2046, "((i>=1))"
-       line 420, "pan.___", state 2052, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2054, "(1)"
-       line 420, "pan.___", state 2055, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 420, "pan.___", state 2055, "else"
-       line 420, "pan.___", state 2058, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 420, "pan.___", state 2059, "(1)"
-       line 424, "pan.___", state 2066, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2068, "(1)"
-       line 424, "pan.___", state 2069, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 424, "pan.___", state 2069, "else"
-       line 424, "pan.___", state 2072, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 424, "pan.___", state 2073, "(1)"
-       line 422, "pan.___", state 2078, "((i<2))"
-       line 422, "pan.___", state 2078, "((i>=2))"
-       line 249, "pan.___", state 2084, "(1)"
-       line 253, "pan.___", state 2092, "(1)"
-       line 253, "pan.___", state 2093, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 253, "pan.___", state 2093, "else"
-       line 251, "pan.___", state 2098, "((i<1))"
-       line 251, "pan.___", state 2098, "((i>=1))"
-       line 257, "pan.___", state 2104, "(1)"
-       line 257, "pan.___", state 2105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 257, "pan.___", state 2105, "else"
-       line 261, "pan.___", state 2112, "(1)"
-       line 261, "pan.___", state 2113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 261, "pan.___", state 2113, "else"
-       line 259, "pan.___", state 2118, "((i<2))"
-       line 259, "pan.___", state 2118, "((i>=2))"
-       line 266, "pan.___", state 2122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 266, "pan.___", state 2122, "else"
-       line 431, "pan.___", state 2124, "(1)"
-       line 431, "pan.___", state 2124, "(1)"
-       line 644, "pan.___", state 2127, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 644, "pan.___", state 2128, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 644, "pan.___", state 2129, "(1)"
-       line 272, "pan.___", state 2133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2164, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2180, "(1)"
-       line 253, "pan.___", state 2188, "(1)"
-       line 257, "pan.___", state 2200, "(1)"
-       line 261, "pan.___", state 2208, "(1)"
-       line 411, "pan.___", state 2226, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2240, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2258, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2272, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2290, "(1)"
-       line 253, "pan.___", state 2298, "(1)"
-       line 257, "pan.___", state 2310, "(1)"
-       line 261, "pan.___", state 2318, "(1)"
-       line 272, "pan.___", state 2340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 2349, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 2362, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 2371, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2387, "(1)"
-       line 253, "pan.___", state 2395, "(1)"
-       line 257, "pan.___", state 2407, "(1)"
-       line 261, "pan.___", state 2415, "(1)"
-       line 411, "pan.___", state 2433, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2447, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2479, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2497, "(1)"
-       line 253, "pan.___", state 2505, "(1)"
-       line 257, "pan.___", state 2517, "(1)"
-       line 261, "pan.___", state 2525, "(1)"
-       line 411, "pan.___", state 2544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 2558, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 2576, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 2590, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 2608, "(1)"
-       line 253, "pan.___", state 2616, "(1)"
-       line 257, "pan.___", state 2628, "(1)"
-       line 261, "pan.___", state 2636, "(1)"
-       line 249, "pan.___", state 2667, "(1)"
-       line 257, "pan.___", state 2687, "(1)"
-       line 261, "pan.___", state 2695, "(1)"
-       line 249, "pan.___", state 2710, "(1)"
-       line 253, "pan.___", state 2718, "(1)"
-       line 257, "pan.___", state 2730, "(1)"
-       line 261, "pan.___", state 2738, "(1)"
-       line 898, "pan.___", state 2755, "-end-"
-       (259 of 2755 states)
-unreached in proctype urcu_writer
-       line 411, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 82, "(1)"
-       line 253, "pan.___", state 90, "(1)"
-       line 257, "pan.___", state 102, "(1)"
-       line 272, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 140, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 153, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 411, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 415, "pan.___", state 207, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 225, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 239, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 257, "(1)"
-       line 253, "pan.___", state 265, "(1)"
-       line 257, "pan.___", state 277, "(1)"
-       line 261, "pan.___", state 285, "(1)"
-       line 415, "pan.___", state 320, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 338, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 352, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 378, "(1)"
-       line 257, "pan.___", state 390, "(1)"
-       line 261, "pan.___", state 398, "(1)"
-       line 415, "pan.___", state 441, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 459, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 473, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 499, "(1)"
-       line 257, "pan.___", state 511, "(1)"
-       line 261, "pan.___", state 519, "(1)"
-       line 415, "pan.___", state 552, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 570, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 584, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 610, "(1)"
-       line 257, "pan.___", state 622, "(1)"
-       line 261, "pan.___", state 630, "(1)"
-       line 415, "pan.___", state 665, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 420, "pan.___", state 683, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 424, "pan.___", state 697, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 253, "pan.___", state 723, "(1)"
-       line 257, "pan.___", state 735, "(1)"
-       line 261, "pan.___", state 743, "(1)"
-       line 272, "pan.___", state 796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 276, "pan.___", state 805, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 820, "(1)"
-       line 284, "pan.___", state 827, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 843, "(1)"
-       line 253, "pan.___", state 851, "(1)"
-       line 257, "pan.___", state 863, "(1)"
-       line 261, "pan.___", state 871, "(1)"
-       line 276, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 909, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 918, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 934, "(1)"
-       line 253, "pan.___", state 942, "(1)"
-       line 257, "pan.___", state 954, "(1)"
-       line 261, "pan.___", state 962, "(1)"
-       line 276, "pan.___", state 987, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1000, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1009, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1025, "(1)"
-       line 253, "pan.___", state 1033, "(1)"
-       line 257, "pan.___", state 1045, "(1)"
-       line 261, "pan.___", state 1053, "(1)"
-       line 276, "pan.___", state 1078, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 280, "pan.___", state 1091, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 284, "pan.___", state 1100, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 249, "pan.___", state 1116, "(1)"
-       line 253, "pan.___", state 1124, "(1)"
-       line 257, "pan.___", state 1136, "(1)"
-       line 261, "pan.___", state 1144, "(1)"
-       line 1237, "pan.___", state 1159, "-end-"
-       (71 of 1159 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1302, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 1.4e+03 seconds
-pan: rate 10667.087 states/second
-pan: avg transition delay 2.9553e-06 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 323cc66..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-#define WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.define b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.log b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index 43b08ac..0000000
+++ /dev/null
@@ -1,647 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 1296)
-depth 23: Claim reached state 9 (line 1301)
-depth 1404: Claim reached state 9 (line 1300)
-pan: acceptance cycle (at depth 1950)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 4997, errors: 1
-    64372 states, stored (197067 visited)
-  2733089 states, matched
-  2930156 transitions (= visited+matched)
- 44244571 atomic steps
-hash conflicts:     43483 (resolved)
-
-Stats on memory usage (in Megabytes):
-    7.121      equivalent memory usage for states (stored*(State-vector + overhead))
-    6.154      actual memory usage for states (compression: 86.41%)
-               state-vector as stored = 72 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  471.818      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 412, "pan.___", state 17, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 49, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 63, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 81, "(1)"
-       line 258, "pan.___", state 101, "(1)"
-       line 262, "pan.___", state 109, "(1)"
-       line 598, "pan.___", state 128, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<1))"
-       line 412, "pan.___", state 135, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 167, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 181, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 199, "(1)"
-       line 258, "pan.___", state 219, "(1)"
-       line 262, "pan.___", state 227, "(1)"
-       line 412, "pan.___", state 246, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 278, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 292, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 310, "(1)"
-       line 258, "pan.___", state 330, "(1)"
-       line 262, "pan.___", state 338, "(1)"
-       line 412, "pan.___", state 359, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 361, "(1)"
-       line 412, "pan.___", state 362, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 362, "else"
-       line 412, "pan.___", state 365, "(1)"
-       line 416, "pan.___", state 373, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 375, "(1)"
-       line 416, "pan.___", state 376, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 416, "pan.___", state 376, "else"
-       line 416, "pan.___", state 379, "(1)"
-       line 416, "pan.___", state 380, "(1)"
-       line 416, "pan.___", state 380, "(1)"
-       line 414, "pan.___", state 385, "((i<1))"
-       line 414, "pan.___", state 385, "((i>=1))"
-       line 421, "pan.___", state 391, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 393, "(1)"
-       line 421, "pan.___", state 394, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 421, "pan.___", state 394, "else"
-       line 421, "pan.___", state 397, "(1)"
-       line 421, "pan.___", state 398, "(1)"
-       line 421, "pan.___", state 398, "(1)"
-       line 425, "pan.___", state 405, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 407, "(1)"
-       line 425, "pan.___", state 408, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 425, "pan.___", state 408, "else"
-       line 425, "pan.___", state 411, "(1)"
-       line 425, "pan.___", state 412, "(1)"
-       line 425, "pan.___", state 412, "(1)"
-       line 423, "pan.___", state 417, "((i<2))"
-       line 423, "pan.___", state 417, "((i>=2))"
-       line 250, "pan.___", state 423, "(1)"
-       line 254, "pan.___", state 431, "(1)"
-       line 254, "pan.___", state 432, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 432, "else"
-       line 252, "pan.___", state 437, "((i<1))"
-       line 252, "pan.___", state 437, "((i>=1))"
-       line 258, "pan.___", state 443, "(1)"
-       line 258, "pan.___", state 444, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 444, "else"
-       line 262, "pan.___", state 451, "(1)"
-       line 262, "pan.___", state 452, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 452, "else"
-       line 260, "pan.___", state 457, "((i<2))"
-       line 260, "pan.___", state 457, "((i>=2))"
-       line 267, "pan.___", state 461, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 461, "else"
-       line 432, "pan.___", state 463, "(1)"
-       line 432, "pan.___", state 463, "(1)"
-       line 598, "pan.___", state 466, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 598, "pan.___", state 467, "_proc_urcu_reader = (_proc_urcu_reader|(1<<5))"
-       line 598, "pan.___", state 468, "(1)"
-       line 273, "pan.___", state 472, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 277, "pan.___", state 483, "(1)"
-       line 281, "pan.___", state 494, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 503, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 519, "(1)"
-       line 254, "pan.___", state 527, "(1)"
-       line 258, "pan.___", state 539, "(1)"
-       line 262, "pan.___", state 547, "(1)"
-       line 412, "pan.___", state 565, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 579, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 597, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 611, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 629, "(1)"
-       line 254, "pan.___", state 637, "(1)"
-       line 258, "pan.___", state 649, "(1)"
-       line 262, "pan.___", state 657, "(1)"
-       line 412, "pan.___", state 683, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 715, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 729, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 747, "(1)"
-       line 258, "pan.___", state 767, "(1)"
-       line 262, "pan.___", state 775, "(1)"
-       line 412, "pan.___", state 794, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 796, "(1)"
-       line 412, "pan.___", state 797, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 797, "else"
-       line 412, "pan.___", state 800, "(1)"
-       line 416, "pan.___", state 808, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 810, "(1)"
-       line 416, "pan.___", state 811, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 416, "pan.___", state 811, "else"
-       line 416, "pan.___", state 814, "(1)"
-       line 416, "pan.___", state 815, "(1)"
-       line 416, "pan.___", state 815, "(1)"
-       line 414, "pan.___", state 820, "((i<1))"
-       line 414, "pan.___", state 820, "((i>=1))"
-       line 421, "pan.___", state 826, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 828, "(1)"
-       line 421, "pan.___", state 829, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 421, "pan.___", state 829, "else"
-       line 421, "pan.___", state 832, "(1)"
-       line 421, "pan.___", state 833, "(1)"
-       line 421, "pan.___", state 833, "(1)"
-       line 425, "pan.___", state 840, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 842, "(1)"
-       line 425, "pan.___", state 843, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 425, "pan.___", state 843, "else"
-       line 425, "pan.___", state 846, "(1)"
-       line 425, "pan.___", state 847, "(1)"
-       line 425, "pan.___", state 847, "(1)"
-       line 423, "pan.___", state 852, "((i<2))"
-       line 423, "pan.___", state 852, "((i>=2))"
-       line 250, "pan.___", state 858, "(1)"
-       line 254, "pan.___", state 866, "(1)"
-       line 254, "pan.___", state 867, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 867, "else"
-       line 252, "pan.___", state 872, "((i<1))"
-       line 252, "pan.___", state 872, "((i>=1))"
-       line 258, "pan.___", state 878, "(1)"
-       line 258, "pan.___", state 879, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 879, "else"
-       line 262, "pan.___", state 886, "(1)"
-       line 262, "pan.___", state 887, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 887, "else"
-       line 260, "pan.___", state 892, "((i<2))"
-       line 260, "pan.___", state 892, "((i>=2))"
-       line 267, "pan.___", state 896, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 896, "else"
-       line 432, "pan.___", state 898, "(1)"
-       line 432, "pan.___", state 898, "(1)"
-       line 606, "pan.___", state 902, "_proc_urcu_reader = (_proc_urcu_reader|(1<<11))"
-       line 412, "pan.___", state 907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 921, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 971, "(1)"
-       line 254, "pan.___", state 979, "(1)"
-       line 258, "pan.___", state 991, "(1)"
-       line 262, "pan.___", state 999, "(1)"
-       line 412, "pan.___", state 1021, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1053, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1067, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1085, "(1)"
-       line 258, "pan.___", state 1105, "(1)"
-       line 262, "pan.___", state 1113, "(1)"
-       line 412, "pan.___", state 1136, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1168, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1182, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1200, "(1)"
-       line 258, "pan.___", state 1220, "(1)"
-       line 262, "pan.___", state 1228, "(1)"
-       line 412, "pan.___", state 1247, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1279, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1293, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1311, "(1)"
-       line 258, "pan.___", state 1331, "(1)"
-       line 262, "pan.___", state 1339, "(1)"
-       line 273, "pan.___", state 1360, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 281, "pan.___", state 1382, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 1391, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1407, "(1)"
-       line 254, "pan.___", state 1415, "(1)"
-       line 258, "pan.___", state 1427, "(1)"
-       line 262, "pan.___", state 1435, "(1)"
-       line 412, "pan.___", state 1453, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 1467, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1485, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1499, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1517, "(1)"
-       line 254, "pan.___", state 1525, "(1)"
-       line 258, "pan.___", state 1537, "(1)"
-       line 262, "pan.___", state 1545, "(1)"
-       line 412, "pan.___", state 1564, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1596, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1610, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1628, "(1)"
-       line 254, "pan.___", state 1636, "(1)"
-       line 258, "pan.___", state 1648, "(1)"
-       line 262, "pan.___", state 1656, "(1)"
-       line 412, "pan.___", state 1678, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1710, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1724, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1742, "(1)"
-       line 258, "pan.___", state 1762, "(1)"
-       line 262, "pan.___", state 1770, "(1)"
-       line 645, "pan.___", state 1789, "_proc_urcu_reader = (_proc_urcu_reader|((1<<2)<<19))"
-       line 412, "pan.___", state 1796, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1828, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1842, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1860, "(1)"
-       line 258, "pan.___", state 1880, "(1)"
-       line 262, "pan.___", state 1888, "(1)"
-       line 412, "pan.___", state 1907, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 1939, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 1953, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1971, "(1)"
-       line 258, "pan.___", state 1991, "(1)"
-       line 262, "pan.___", state 1999, "(1)"
-       line 412, "pan.___", state 2020, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 2022, "(1)"
-       line 412, "pan.___", state 2023, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 2023, "else"
-       line 412, "pan.___", state 2026, "(1)"
-       line 416, "pan.___", state 2034, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 2036, "(1)"
-       line 416, "pan.___", state 2037, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 416, "pan.___", state 2037, "else"
-       line 416, "pan.___", state 2040, "(1)"
-       line 416, "pan.___", state 2041, "(1)"
-       line 416, "pan.___", state 2041, "(1)"
-       line 414, "pan.___", state 2046, "((i<1))"
-       line 414, "pan.___", state 2046, "((i>=1))"
-       line 421, "pan.___", state 2052, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2054, "(1)"
-       line 421, "pan.___", state 2055, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 421, "pan.___", state 2055, "else"
-       line 421, "pan.___", state 2058, "(1)"
-       line 421, "pan.___", state 2059, "(1)"
-       line 421, "pan.___", state 2059, "(1)"
-       line 425, "pan.___", state 2066, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2068, "(1)"
-       line 425, "pan.___", state 2069, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 425, "pan.___", state 2069, "else"
-       line 425, "pan.___", state 2072, "(1)"
-       line 425, "pan.___", state 2073, "(1)"
-       line 425, "pan.___", state 2073, "(1)"
-       line 423, "pan.___", state 2078, "((i<2))"
-       line 423, "pan.___", state 2078, "((i>=2))"
-       line 250, "pan.___", state 2084, "(1)"
-       line 254, "pan.___", state 2092, "(1)"
-       line 254, "pan.___", state 2093, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 2093, "else"
-       line 252, "pan.___", state 2098, "((i<1))"
-       line 252, "pan.___", state 2098, "((i>=1))"
-       line 258, "pan.___", state 2104, "(1)"
-       line 258, "pan.___", state 2105, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 2105, "else"
-       line 262, "pan.___", state 2112, "(1)"
-       line 262, "pan.___", state 2113, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 2113, "else"
-       line 260, "pan.___", state 2118, "((i<2))"
-       line 260, "pan.___", state 2118, "((i>=2))"
-       line 267, "pan.___", state 2122, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 2122, "else"
-       line 432, "pan.___", state 2124, "(1)"
-       line 432, "pan.___", state 2124, "(1)"
-       line 645, "pan.___", state 2127, "cached_urcu_active_readers.val[_pid] = (tmp+1)"
-       line 645, "pan.___", state 2128, "_proc_urcu_reader = (_proc_urcu_reader|(1<<23))"
-       line 645, "pan.___", state 2129, "(1)"
-       line 273, "pan.___", state 2133, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 281, "pan.___", state 2155, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 2164, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 2180, "(1)"
-       line 254, "pan.___", state 2188, "(1)"
-       line 258, "pan.___", state 2200, "(1)"
-       line 262, "pan.___", state 2208, "(1)"
-       line 412, "pan.___", state 2226, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 2240, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2258, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2272, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 2290, "(1)"
-       line 254, "pan.___", state 2298, "(1)"
-       line 258, "pan.___", state 2310, "(1)"
-       line 262, "pan.___", state 2318, "(1)"
-       line 273, "pan.___", state 2340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 277, "pan.___", state 2349, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 281, "pan.___", state 2362, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 2371, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 2387, "(1)"
-       line 254, "pan.___", state 2395, "(1)"
-       line 258, "pan.___", state 2407, "(1)"
-       line 262, "pan.___", state 2415, "(1)"
-       line 412, "pan.___", state 2433, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 2447, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2465, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2479, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 2497, "(1)"
-       line 254, "pan.___", state 2505, "(1)"
-       line 258, "pan.___", state 2517, "(1)"
-       line 262, "pan.___", state 2525, "(1)"
-       line 412, "pan.___", state 2544, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 2558, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 2576, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 2590, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 2608, "(1)"
-       line 254, "pan.___", state 2616, "(1)"
-       line 258, "pan.___", state 2628, "(1)"
-       line 262, "pan.___", state 2636, "(1)"
-       line 250, "pan.___", state 2667, "(1)"
-       line 258, "pan.___", state 2687, "(1)"
-       line 262, "pan.___", state 2695, "(1)"
-       line 250, "pan.___", state 2710, "(1)"
-       line 254, "pan.___", state 2718, "(1)"
-       line 258, "pan.___", state 2730, "(1)"
-       line 262, "pan.___", state 2738, "(1)"
-       line 899, "pan.___", state 2755, "-end-"
-       (259 of 2755 states)
-unreached in proctype urcu_writer
-       line 412, "pan.___", state 18, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 24, "(1)"
-       line 416, "pan.___", state 32, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 38, "(1)"
-       line 416, "pan.___", state 39, "(1)"
-       line 416, "pan.___", state 39, "(1)"
-       line 414, "pan.___", state 44, "((i<1))"
-       line 414, "pan.___", state 44, "((i>=1))"
-       line 421, "pan.___", state 50, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 56, "(1)"
-       line 421, "pan.___", state 57, "(1)"
-       line 421, "pan.___", state 57, "(1)"
-       line 425, "pan.___", state 64, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 70, "(1)"
-       line 425, "pan.___", state 71, "(1)"
-       line 425, "pan.___", state 71, "(1)"
-       line 423, "pan.___", state 76, "((i<2))"
-       line 423, "pan.___", state 76, "((i>=2))"
-       line 250, "pan.___", state 82, "(1)"
-       line 254, "pan.___", state 90, "(1)"
-       line 254, "pan.___", state 91, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 91, "else"
-       line 252, "pan.___", state 96, "((i<1))"
-       line 252, "pan.___", state 96, "((i>=1))"
-       line 258, "pan.___", state 102, "(1)"
-       line 258, "pan.___", state 103, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 103, "else"
-       line 262, "pan.___", state 110, "(1)"
-       line 262, "pan.___", state 111, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 111, "else"
-       line 260, "pan.___", state 116, "((i<2))"
-       line 260, "pan.___", state 116, "((i>=2))"
-       line 267, "pan.___", state 120, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 120, "else"
-       line 432, "pan.___", state 122, "(1)"
-       line 432, "pan.___", state 122, "(1)"
-       line 273, "pan.___", state 131, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 277, "pan.___", state 140, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 148, "((i<1))"
-       line 275, "pan.___", state 148, "((i>=1))"
-       line 281, "pan.___", state 153, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 1022, "pan.___", state 181, "old_data = cached_rcu_ptr.val[_pid]"
-       line 412, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 199, "(1)"
-       line 416, "pan.___", state 207, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 213, "(1)"
-       line 416, "pan.___", state 214, "(1)"
-       line 416, "pan.___", state 214, "(1)"
-       line 414, "pan.___", state 219, "((i<1))"
-       line 414, "pan.___", state 219, "((i>=1))"
-       line 421, "pan.___", state 225, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 231, "(1)"
-       line 421, "pan.___", state 232, "(1)"
-       line 421, "pan.___", state 232, "(1)"
-       line 425, "pan.___", state 239, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 245, "(1)"
-       line 425, "pan.___", state 246, "(1)"
-       line 425, "pan.___", state 246, "(1)"
-       line 423, "pan.___", state 251, "((i<2))"
-       line 423, "pan.___", state 251, "((i>=2))"
-       line 250, "pan.___", state 257, "(1)"
-       line 254, "pan.___", state 265, "(1)"
-       line 254, "pan.___", state 266, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 266, "else"
-       line 252, "pan.___", state 271, "((i<1))"
-       line 252, "pan.___", state 271, "((i>=1))"
-       line 258, "pan.___", state 277, "(1)"
-       line 258, "pan.___", state 278, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 278, "else"
-       line 262, "pan.___", state 285, "(1)"
-       line 262, "pan.___", state 286, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 286, "else"
-       line 260, "pan.___", state 291, "((i<2))"
-       line 260, "pan.___", state 291, "((i>=2))"
-       line 267, "pan.___", state 295, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 295, "else"
-       line 432, "pan.___", state 297, "(1)"
-       line 432, "pan.___", state 297, "(1)"
-       line 412, "pan.___", state 308, "(1)"
-       line 412, "pan.___", state 309, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 309, "else"
-       line 412, "pan.___", state 312, "(1)"
-       line 416, "pan.___", state 320, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 326, "(1)"
-       line 416, "pan.___", state 327, "(1)"
-       line 416, "pan.___", state 327, "(1)"
-       line 414, "pan.___", state 332, "((i<1))"
-       line 414, "pan.___", state 332, "((i>=1))"
-       line 421, "pan.___", state 338, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 344, "(1)"
-       line 421, "pan.___", state 345, "(1)"
-       line 421, "pan.___", state 345, "(1)"
-       line 425, "pan.___", state 352, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 358, "(1)"
-       line 425, "pan.___", state 359, "(1)"
-       line 425, "pan.___", state 359, "(1)"
-       line 423, "pan.___", state 364, "((i<2))"
-       line 423, "pan.___", state 364, "((i>=2))"
-       line 250, "pan.___", state 370, "(1)"
-       line 254, "pan.___", state 378, "(1)"
-       line 254, "pan.___", state 379, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 379, "else"
-       line 252, "pan.___", state 384, "((i<1))"
-       line 252, "pan.___", state 384, "((i>=1))"
-       line 258, "pan.___", state 390, "(1)"
-       line 258, "pan.___", state 391, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 391, "else"
-       line 262, "pan.___", state 398, "(1)"
-       line 262, "pan.___", state 399, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 399, "else"
-       line 260, "pan.___", state 404, "((i<2))"
-       line 260, "pan.___", state 404, "((i>=2))"
-       line 267, "pan.___", state 408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 408, "else"
-       line 432, "pan.___", state 410, "(1)"
-       line 432, "pan.___", state 410, "(1)"
-       line 412, "pan.___", state 423, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 425, "(1)"
-       line 412, "pan.___", state 426, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 412, "pan.___", state 426, "else"
-       line 412, "pan.___", state 429, "(1)"
-       line 416, "pan.___", state 437, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 439, "(1)"
-       line 416, "pan.___", state 440, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 416, "pan.___", state 440, "else"
-       line 416, "pan.___", state 443, "(1)"
-       line 416, "pan.___", state 444, "(1)"
-       line 416, "pan.___", state 444, "(1)"
-       line 414, "pan.___", state 449, "((i<1))"
-       line 414, "pan.___", state 449, "((i>=1))"
-       line 421, "pan.___", state 455, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 457, "(1)"
-       line 421, "pan.___", state 458, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 421, "pan.___", state 458, "else"
-       line 421, "pan.___", state 461, "(1)"
-       line 421, "pan.___", state 462, "(1)"
-       line 421, "pan.___", state 462, "(1)"
-       line 425, "pan.___", state 469, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 471, "(1)"
-       line 425, "pan.___", state 472, "((cache_dirty_rcu_data[i].bitfield&(1<<_pid)))"
-       line 425, "pan.___", state 472, "else"
-       line 425, "pan.___", state 475, "(1)"
-       line 425, "pan.___", state 476, "(1)"
-       line 425, "pan.___", state 476, "(1)"
-       line 423, "pan.___", state 481, "((i<2))"
-       line 423, "pan.___", state 481, "((i>=2))"
-       line 250, "pan.___", state 487, "(1)"
-       line 254, "pan.___", state 495, "(1)"
-       line 254, "pan.___", state 496, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 496, "else"
-       line 252, "pan.___", state 501, "((i<1))"
-       line 252, "pan.___", state 501, "((i>=1))"
-       line 258, "pan.___", state 507, "(1)"
-       line 258, "pan.___", state 508, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 508, "else"
-       line 262, "pan.___", state 515, "(1)"
-       line 262, "pan.___", state 516, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 516, "else"
-       line 267, "pan.___", state 525, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 525, "else"
-       line 432, "pan.___", state 527, "(1)"
-       line 432, "pan.___", state 527, "(1)"
-       line 412, "pan.___", state 533, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 539, "(1)"
-       line 416, "pan.___", state 547, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 553, "(1)"
-       line 416, "pan.___", state 554, "(1)"
-       line 416, "pan.___", state 554, "(1)"
-       line 414, "pan.___", state 559, "((i<1))"
-       line 414, "pan.___", state 559, "((i>=1))"
-       line 421, "pan.___", state 565, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 571, "(1)"
-       line 421, "pan.___", state 572, "(1)"
-       line 421, "pan.___", state 572, "(1)"
-       line 425, "pan.___", state 579, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 585, "(1)"
-       line 425, "pan.___", state 586, "(1)"
-       line 425, "pan.___", state 586, "(1)"
-       line 423, "pan.___", state 591, "((i<2))"
-       line 423, "pan.___", state 591, "((i>=2))"
-       line 250, "pan.___", state 597, "(1)"
-       line 254, "pan.___", state 605, "(1)"
-       line 254, "pan.___", state 606, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 606, "else"
-       line 252, "pan.___", state 611, "((i<1))"
-       line 252, "pan.___", state 611, "((i>=1))"
-       line 258, "pan.___", state 617, "(1)"
-       line 258, "pan.___", state 618, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 618, "else"
-       line 262, "pan.___", state 625, "(1)"
-       line 262, "pan.___", state 626, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 626, "else"
-       line 267, "pan.___", state 635, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 635, "else"
-       line 432, "pan.___", state 637, "(1)"
-       line 432, "pan.___", state 637, "(1)"
-       line 412, "pan.___", state 644, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 650, "(1)"
-       line 416, "pan.___", state 658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 416, "pan.___", state 664, "(1)"
-       line 416, "pan.___", state 665, "(1)"
-       line 416, "pan.___", state 665, "(1)"
-       line 414, "pan.___", state 670, "((i<1))"
-       line 414, "pan.___", state 670, "((i>=1))"
-       line 421, "pan.___", state 676, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 682, "(1)"
-       line 421, "pan.___", state 683, "(1)"
-       line 421, "pan.___", state 683, "(1)"
-       line 425, "pan.___", state 690, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 696, "(1)"
-       line 425, "pan.___", state 697, "(1)"
-       line 425, "pan.___", state 697, "(1)"
-       line 423, "pan.___", state 702, "((i<2))"
-       line 423, "pan.___", state 702, "((i>=2))"
-       line 250, "pan.___", state 708, "(1)"
-       line 254, "pan.___", state 716, "(1)"
-       line 254, "pan.___", state 717, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 717, "else"
-       line 252, "pan.___", state 722, "((i<1))"
-       line 252, "pan.___", state 722, "((i>=1))"
-       line 258, "pan.___", state 728, "(1)"
-       line 258, "pan.___", state 729, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 729, "else"
-       line 262, "pan.___", state 736, "(1)"
-       line 262, "pan.___", state 737, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 737, "else"
-       line 260, "pan.___", state 742, "((i<2))"
-       line 260, "pan.___", state 742, "((i>=2))"
-       line 267, "pan.___", state 746, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 746, "else"
-       line 432, "pan.___", state 748, "(1)"
-       line 432, "pan.___", state 748, "(1)"
-       line 416, "pan.___", state 771, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 789, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 803, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 254, "pan.___", state 829, "(1)"
-       line 258, "pan.___", state 841, "(1)"
-       line 262, "pan.___", state 849, "(1)"
-       line 416, "pan.___", state 887, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 421, "pan.___", state 905, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 425, "pan.___", state 919, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 254, "pan.___", state 945, "(1)"
-       line 258, "pan.___", state 957, "(1)"
-       line 262, "pan.___", state 965, "(1)"
-       line 273, "pan.___", state 1009, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 277, "pan.___", state 1018, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 275, "pan.___", state 1026, "((i<1))"
-       line 275, "pan.___", state 1026, "((i>=1))"
-       line 281, "pan.___", state 1033, "(1)"
-       line 281, "pan.___", state 1034, "((cache_dirty_rcu_ptr.bitfield&(1<<_pid)))"
-       line 281, "pan.___", state 1034, "else"
-       line 285, "pan.___", state 1040, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 283, "pan.___", state 1048, "((i<2))"
-       line 283, "pan.___", state 1048, "((i>=2))"
-       line 250, "pan.___", state 1056, "(1)"
-       line 254, "pan.___", state 1064, "(1)"
-       line 254, "pan.___", state 1065, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 254, "pan.___", state 1065, "else"
-       line 252, "pan.___", state 1070, "((i<1))"
-       line 252, "pan.___", state 1070, "((i>=1))"
-       line 258, "pan.___", state 1076, "(1)"
-       line 258, "pan.___", state 1077, "(!((cache_dirty_rcu_ptr.bitfield&(1<<_pid))))"
-       line 258, "pan.___", state 1077, "else"
-       line 262, "pan.___", state 1084, "(1)"
-       line 262, "pan.___", state 1085, "(!((cache_dirty_rcu_data[i].bitfield&(1<<_pid))))"
-       line 262, "pan.___", state 1085, "else"
-       line 267, "pan.___", state 1094, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 267, "pan.___", state 1094, "else"
-       line 277, "pan.___", state 1109, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 281, "pan.___", state 1122, "cache_dirty_rcu_ptr.bitfield = (cache_dirty_rcu_ptr.bitfield&~((1<<_pid)))"
-       line 285, "pan.___", state 1131, "cache_dirty_rcu_data[i].bitfield = (cache_dirty_rcu_data[i].bitfield&~((1<<_pid)))"
-       line 250, "pan.___", state 1147, "(1)"
-       line 254, "pan.___", state 1155, "(1)"
-       line 258, "pan.___", state 1167, "(1)"
-       line 262, "pan.___", state 1175, "(1)"
-       line 1238, "pan.___", state 1190, "-end-"
-       (192 of 1190 states)
-unreached in proctype :init:
-       (0 of 78 states)
-unreached in proctype :never:
-       line 1303, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 8.1 seconds
-pan: rate 24329.259 states/second
-pan: avg transition delay 2.7644e-06 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu-controldataflow-intel-no-ipi'
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.spin.input b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index 67fec75..0000000
+++ /dev/null
@@ -1,1274 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-//#define ARCH_ALPHA
-#define ARCH_INTEL
-//#define ARCH_POWERPC
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu-controldataflow-intel-no-ipi/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index e5fdf5a..0000000
+++ /dev/null
@@ -1,5000 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:4025
-2:3:3945
-3:3:3948
-4:3:3948
-5:3:3951
-6:3:3959
-7:3:3959
-8:3:3962
-9:3:3968
-10:3:3972
-11:3:3972
-12:3:3975
-13:3:3985
-14:3:3993
-15:3:3993
-16:3:3996
-17:3:4002
-18:3:4006
-19:3:4006
-20:3:4009
-21:3:4015
-22:3:4019
-23:3:4020
-24:0:4025
-25:3:4022
-26:0:4025
-27:2:2757
-28:0:4025
-29:2:2763
-30:0:4025
-31:2:2764
-32:0:4025
-33:2:2765
-34:0:4023
-35:2:2766
-36:0:4029
-37:2:2767
-38:0:4029
-39:2:2768
-40:2:2769
-41:2:2773
-42:2:2774
-43:2:2782
-44:2:2783
-45:2:2787
-46:2:2788
-47:2:2796
-48:2:2801
-49:2:2805
-50:2:2806
-51:2:2814
-52:2:2815
-53:2:2819
-54:2:2820
-55:2:2814
-56:2:2815
-57:2:2819
-58:2:2820
-59:2:2828
-60:2:2833
-61:2:2840
-62:2:2841
-63:2:2848
-64:2:2853
-65:2:2860
-66:2:2861
-67:2:2860
-68:2:2861
-69:2:2868
-70:2:2878
-71:0:4029
-72:2:2767
-73:0:4029
-74:2:2882
-75:2:2886
-76:2:2887
-77:2:2891
-78:2:2895
-79:2:2896
-80:2:2900
-81:2:2908
-82:2:2909
-83:2:2913
-84:2:2917
-85:2:2918
-86:2:2913
-87:2:2914
-88:2:2922
-89:0:4029
-90:2:2767
-91:0:4029
-92:2:2930
-93:2:2931
-94:2:2932
-95:0:4029
-96:2:2767
-97:0:4029
-98:2:2937
-99:0:4029
-100:2:3764
-101:2:3765
-102:2:3769
-103:2:3773
-104:2:3774
-105:2:3778
-106:2:3783
-107:2:3791
-108:2:3795
-109:2:3796
-110:2:3791
-111:2:3795
-112:2:3796
-113:2:3800
-114:2:3807
-115:2:3814
-116:2:3815
-117:2:3822
-118:2:3827
-119:2:3834
-120:2:3835
-121:2:3834
-122:2:3835
-123:2:3842
-124:2:3846
-125:0:4029
-126:2:2939
-127:2:3745
-128:0:4029
-129:2:2767
-130:0:4029
-131:2:2940
-132:0:4029
-133:2:2767
-134:0:4029
-135:2:2943
-136:2:2944
-137:2:2948
-138:2:2949
-139:2:2957
-140:2:2958
-141:2:2962
-142:2:2963
-143:2:2971
-144:2:2976
-145:2:2980
-146:2:2981
-147:2:2989
-148:2:2990
-149:2:2994
-150:2:2995
-151:2:2989
-152:2:2990
-153:2:2994
-154:2:2995
-155:2:3003
-156:2:3008
-157:2:3015
-158:2:3016
-159:2:3023
-160:2:3028
-161:2:3035
-162:2:3036
-163:2:3035
-164:2:3036
-165:2:3043
-166:2:3052
-167:0:4029
-168:2:2767
-169:0:4029
-170:2:3056
-171:2:3057
-172:2:3058
-173:2:3070
-174:2:3071
-175:2:3075
-176:2:3076
-177:2:3084
-178:2:3089
-179:2:3093
-180:2:3094
-181:2:3102
-182:2:3103
-183:2:3107
-184:2:3108
-185:2:3102
-186:2:3103
-187:2:3107
-188:2:3108
-189:2:3116
-190:2:3121
-191:2:3128
-192:2:3129
-193:2:3136
-194:2:3141
-195:2:3148
-196:2:3149
-197:2:3148
-198:2:3149
-199:2:3156
-200:2:3169
-201:2:3170
-202:0:4029
-203:2:2767
-204:0:4029
-205:2:3283
-206:2:3284
-207:2:3288
-208:2:3289
-209:2:3297
-210:2:3298
-211:2:3302
-212:2:3303
-213:2:3311
-214:2:3316
-215:2:3320
-216:2:3321
-217:2:3329
-218:2:3330
-219:2:3334
-220:2:3335
-221:2:3329
-222:2:3330
-223:2:3334
-224:2:3335
-225:2:3343
-226:2:3348
-227:2:3355
-228:2:3356
-229:2:3363
-230:2:3368
-231:2:3375
-232:2:3376
-233:2:3375
-234:2:3376
-235:2:3383
-236:0:4029
-237:2:2767
-238:0:4029
-239:2:3394
-240:2:3395
-241:2:3399
-242:2:3400
-243:2:3408
-244:2:3409
-245:2:3413
-246:2:3414
-247:2:3422
-248:2:3427
-249:2:3431
-250:2:3432
-251:2:3440
-252:2:3441
-253:2:3445
-254:2:3446
-255:2:3440
-256:2:3441
-257:2:3445
-258:2:3446
-259:2:3454
-260:2:3459
-261:2:3466
-262:2:3467
-263:2:3474
-264:2:3479
-265:2:3486
-266:2:3487
-267:2:3486
-268:2:3487
-269:2:3494
-270:2:3503
-271:0:4029
-272:2:2767
-273:0:4029
-274:1:2
-275:0:4029
-276:1:8
-277:0:4029
-278:1:9
-279:0:4029
-280:1:10
-281:0:4029
-282:1:11
-283:0:4029
-284:1:12
-285:1:13
-286:1:17
-287:1:18
-288:1:26
-289:1:27
-290:1:31
-291:1:32
-292:1:40
-293:1:45
-294:1:49
-295:1:50
-296:1:58
-297:1:59
-298:1:63
-299:1:64
-300:1:58
-301:1:59
-302:1:63
-303:1:64
-304:1:72
-305:1:77
-306:1:84
-307:1:85
-308:1:92
-309:1:97
-310:1:104
-311:1:105
-312:1:104
-313:1:105
-314:1:112
-315:0:4029
-316:1:11
-317:0:4029
-318:1:123
-319:1:124
-320:0:4029
-321:1:11
-322:0:4029
-323:1:130
-324:1:131
-325:1:135
-326:1:136
-327:1:144
-328:1:145
-329:1:149
-330:1:150
-331:1:158
-332:1:163
-333:1:167
-334:1:168
-335:1:176
-336:1:177
-337:1:181
-338:1:182
-339:1:176
-340:1:177
-341:1:181
-342:1:182
-343:1:190
-344:1:195
-345:1:202
-346:1:203
-347:1:210
-348:1:215
-349:1:222
-350:1:223
-351:1:222
-352:1:223
-353:1:230
-354:0:4029
-355:1:11
-356:0:4029
-357:1:241
-358:1:242
-359:1:246
-360:1:247
-361:1:255
-362:1:256
-363:1:260
-364:1:261
-365:1:269
-366:1:274
-367:1:278
-368:1:279
-369:1:287
-370:1:288
-371:1:292
-372:1:293
-373:1:287
-374:1:288
-375:1:292
-376:1:293
-377:1:301
-378:1:306
-379:1:313
-380:1:314
-381:1:321
-382:1:326
-383:1:333
-384:1:334
-385:1:333
-386:1:334
-387:1:341
-388:1:350
-389:0:4029
-390:1:11
-391:0:4029
-392:1:468
-393:1:472
-394:1:473
-395:1:477
-396:1:478
-397:1:486
-398:1:494
-399:1:495
-400:1:499
-401:1:503
-402:1:504
-403:1:499
-404:1:503
-405:1:504
-406:1:508
-407:1:515
-408:1:522
-409:1:523
-410:1:530
-411:1:535
-412:1:542
-413:1:543
-414:1:542
-415:1:543
-416:1:550
-417:0:4029
-418:1:11
-419:0:4029
-420:2:3507
-421:2:3516
-422:2:3517
-423:2:3521
-424:2:3522
-425:2:3526
-426:2:3527
-427:2:3535
-428:2:3540
-429:2:3544
-430:2:3545
-431:2:3553
-432:2:3554
-433:2:3558
-434:2:3559
-435:2:3553
-436:2:3554
-437:2:3558
-438:2:3559
-439:2:3567
-440:2:3574
-441:2:3575
-442:2:3579
-443:2:3580
-444:2:3587
-445:2:3592
-446:2:3599
-447:2:3600
-448:2:3599
-449:2:3600
-450:2:3607
-451:2:3617
-452:0:4029
-453:2:2767
-454:0:4029
-455:2:3623
-456:2:3632
-457:2:3633
-458:2:3637
-459:2:3638
-460:2:3642
-461:2:3643
-462:2:3651
-463:2:3656
-464:2:3660
-465:2:3661
-466:2:3669
-467:2:3670
-468:2:3674
-469:2:3675
-470:2:3669
-471:2:3670
-472:2:3674
-473:2:3675
-474:2:3683
-475:2:3690
-476:2:3691
-477:2:3695
-478:2:3696
-479:2:3703
-480:2:3708
-481:2:3715
-482:2:3716
-483:2:3715
-484:2:3716
-485:2:3723
-486:0:4029
-487:2:2767
-488:0:4029
-489:1:560
-490:1:561
-491:1:565
-492:1:566
-493:1:574
-494:1:575
-495:1:579
-496:1:580
-497:1:588
-498:1:593
-499:1:597
-500:1:598
-501:1:606
-502:1:607
-503:1:611
-504:1:612
-505:1:606
-506:1:607
-507:1:611
-508:1:612
-509:1:620
-510:1:625
-511:1:632
-512:1:633
-513:1:640
-514:1:645
-515:1:652
-516:1:653
-517:1:652
-518:1:653
-519:1:660
-520:0:4029
-521:1:11
-522:0:4029
-523:2:3507
-524:2:3516
-525:2:3517
-526:2:3521
-527:2:3522
-528:2:3526
-529:2:3527
-530:2:3535
-531:2:3540
-532:2:3544
-533:2:3545
-534:2:3553
-535:2:3554
-536:2:3558
-537:2:3559
-538:2:3553
-539:2:3554
-540:2:3558
-541:2:3559
-542:2:3567
-543:2:3574
-544:2:3575
-545:2:3579
-546:2:3580
-547:2:3587
-548:2:3592
-549:2:3599
-550:2:3600
-551:2:3599
-552:2:3600
-553:2:3607
-554:2:3617
-555:0:4029
-556:2:2767
-557:0:4029
-558:2:3623
-559:2:3632
-560:2:3633
-561:2:3637
-562:2:3638
-563:2:3642
-564:2:3643
-565:2:3651
-566:2:3656
-567:2:3660
-568:2:3661
-569:2:3669
-570:2:3670
-571:2:3674
-572:2:3675
-573:2:3669
-574:2:3670
-575:2:3674
-576:2:3675
-577:2:3683
-578:2:3690
-579:2:3691
-580:2:3695
-581:2:3696
-582:2:3703
-583:2:3708
-584:2:3715
-585:2:3716
-586:2:3715
-587:2:3716
-588:2:3723
-589:0:4029
-590:2:2767
-591:0:4029
-592:1:671
-593:1:674
-594:1:675
-595:0:4029
-596:1:11
-597:0:4029
-598:2:3507
-599:2:3516
-600:2:3517
-601:2:3521
-602:2:3522
-603:2:3526
-604:2:3527
-605:2:3535
-606:2:3540
-607:2:3544
-608:2:3545
-609:2:3553
-610:2:3554
-611:2:3558
-612:2:3559
-613:2:3553
-614:2:3554
-615:2:3558
-616:2:3559
-617:2:3567
-618:2:3574
-619:2:3575
-620:2:3579
-621:2:3580
-622:2:3587
-623:2:3592
-624:2:3599
-625:2:3600
-626:2:3599
-627:2:3600
-628:2:3607
-629:2:3617
-630:0:4029
-631:2:2767
-632:0:4029
-633:2:3623
-634:2:3632
-635:2:3633
-636:2:3637
-637:2:3638
-638:2:3642
-639:2:3643
-640:2:3651
-641:2:3656
-642:2:3660
-643:2:3661
-644:2:3669
-645:2:3670
-646:2:3674
-647:2:3675
-648:2:3669
-649:2:3670
-650:2:3674
-651:2:3675
-652:2:3683
-653:2:3690
-654:2:3691
-655:2:3695
-656:2:3696
-657:2:3703
-658:2:3708
-659:2:3715
-660:2:3716
-661:2:3715
-662:2:3716
-663:2:3723
-664:0:4029
-665:2:2767
-666:0:4029
-667:1:678
-668:1:679
-669:1:683
-670:1:684
-671:1:692
-672:1:693
-673:1:697
-674:1:698
-675:1:706
-676:1:711
-677:1:715
-678:1:716
-679:1:724
-680:1:725
-681:1:729
-682:1:730
-683:1:724
-684:1:725
-685:1:729
-686:1:730
-687:1:738
-688:1:743
-689:1:750
-690:1:751
-691:1:758
-692:1:763
-693:1:770
-694:1:771
-695:1:770
-696:1:771
-697:1:778
-698:0:4029
-699:1:11
-700:0:4029
-701:2:3507
-702:2:3516
-703:2:3517
-704:2:3521
-705:2:3522
-706:2:3526
-707:2:3527
-708:2:3535
-709:2:3540
-710:2:3544
-711:2:3545
-712:2:3553
-713:2:3554
-714:2:3558
-715:2:3559
-716:2:3553
-717:2:3554
-718:2:3558
-719:2:3559
-720:2:3567
-721:2:3574
-722:2:3575
-723:2:3579
-724:2:3580
-725:2:3587
-726:2:3592
-727:2:3599
-728:2:3600
-729:2:3599
-730:2:3600
-731:2:3607
-732:2:3617
-733:0:4029
-734:2:2767
-735:0:4029
-736:2:3623
-737:2:3632
-738:2:3633
-739:2:3637
-740:2:3638
-741:2:3642
-742:2:3643
-743:2:3651
-744:2:3656
-745:2:3660
-746:2:3661
-747:2:3669
-748:2:3670
-749:2:3674
-750:2:3675
-751:2:3669
-752:2:3670
-753:2:3674
-754:2:3675
-755:2:3683
-756:2:3690
-757:2:3691
-758:2:3695
-759:2:3696
-760:2:3703
-761:2:3708
-762:2:3715
-763:2:3716
-764:2:3715
-765:2:3716
-766:2:3723
-767:0:4029
-768:2:2767
-769:0:4029
-770:1:902
-771:1:903
-772:1:907
-773:1:908
-774:1:916
-775:1:917
-776:1:921
-777:1:922
-778:1:930
-779:1:935
-780:1:939
-781:1:940
-782:1:948
-783:1:949
-784:1:953
-785:1:954
-786:1:948
-787:1:949
-788:1:953
-789:1:954
-790:1:962
-791:1:967
-792:1:974
-793:1:975
-794:1:982
-795:1:987
-796:1:994
-797:1:995
-798:1:994
-799:1:995
-800:1:1002
-801:1:1011
-802:1:1015
-803:0:4029
-804:1:11
-805:0:4029
-806:2:3507
-807:2:3516
-808:2:3517
-809:2:3521
-810:2:3522
-811:2:3526
-812:2:3527
-813:2:3535
-814:2:3540
-815:2:3544
-816:2:3545
-817:2:3553
-818:2:3554
-819:2:3558
-820:2:3559
-821:2:3553
-822:2:3554
-823:2:3558
-824:2:3559
-825:2:3567
-826:2:3574
-827:2:3575
-828:2:3579
-829:2:3580
-830:2:3587
-831:2:3592
-832:2:3599
-833:2:3600
-834:2:3599
-835:2:3600
-836:2:3607
-837:2:3617
-838:0:4029
-839:2:2767
-840:0:4029
-841:2:3623
-842:2:3632
-843:2:3633
-844:2:3637
-845:2:3638
-846:2:3642
-847:2:3643
-848:2:3651
-849:2:3656
-850:2:3660
-851:2:3661
-852:2:3669
-853:2:3670
-854:2:3674
-855:2:3675
-856:2:3669
-857:2:3670
-858:2:3674
-859:2:3675
-860:2:3683
-861:2:3690
-862:2:3691
-863:2:3695
-864:2:3696
-865:2:3703
-866:2:3708
-867:2:3715
-868:2:3716
-869:2:3715
-870:2:3716
-871:2:3723
-872:0:4029
-873:2:2767
-874:0:4029
-875:1:1016
-876:1:1017
-877:1:1021
-878:1:1022
-879:1:1030
-880:1:1031
-881:1:1032
-882:1:1044
-883:1:1049
-884:1:1053
-885:1:1054
-886:1:1062
-887:1:1063
-888:1:1067
-889:1:1068
-890:1:1062
-891:1:1063
-892:1:1067
-893:1:1068
-894:1:1076
-895:1:1081
-896:1:1088
-897:1:1089
-898:1:1096
-899:1:1101
-900:1:1108
-901:1:1109
-902:1:1108
-903:1:1109
-904:1:1116
-905:0:4029
-906:1:11
-907:0:4029
-908:2:3507
-909:2:3516
-910:2:3517
-911:2:3521
-912:2:3522
-913:2:3526
-914:2:3527
-915:2:3535
-916:2:3540
-917:2:3544
-918:2:3545
-919:2:3553
-920:2:3554
-921:2:3558
-922:2:3559
-923:2:3553
-924:2:3554
-925:2:3558
-926:2:3559
-927:2:3567
-928:2:3574
-929:2:3575
-930:2:3579
-931:2:3580
-932:2:3587
-933:2:3592
-934:2:3599
-935:2:3600
-936:2:3599
-937:2:3600
-938:2:3607
-939:2:3617
-940:0:4029
-941:2:2767
-942:0:4029
-943:2:3623
-944:2:3632
-945:2:3633
-946:2:3637
-947:2:3638
-948:2:3642
-949:2:3643
-950:2:3651
-951:2:3656
-952:2:3660
-953:2:3661
-954:2:3669
-955:2:3670
-956:2:3674
-957:2:3675
-958:2:3669
-959:2:3670
-960:2:3674
-961:2:3675
-962:2:3683
-963:2:3690
-964:2:3691
-965:2:3695
-966:2:3696
-967:2:3703
-968:2:3708
-969:2:3715
-970:2:3716
-971:2:3715
-972:2:3716
-973:2:3723
-974:0:4029
-975:2:2767
-976:0:4029
-977:1:1127
-978:0:4029
-979:2:3507
-980:2:3516
-981:2:3517
-982:2:3521
-983:2:3522
-984:2:3526
-985:2:3527
-986:2:3535
-987:2:3540
-988:2:3544
-989:2:3545
-990:2:3553
-991:2:3554
-992:2:3558
-993:2:3559
-994:2:3553
-995:2:3554
-996:2:3558
-997:2:3559
-998:2:3567
-999:2:3574
-1000:2:3575
-1001:2:3579
-1002:2:3580
-1003:2:3587
-1004:2:3592
-1005:2:3599
-1006:2:3600
-1007:2:3599
-1008:2:3600
-1009:2:3607
-1010:2:3617
-1011:0:4029
-1012:2:2767
-1013:0:4029
-1014:2:3623
-1015:2:3632
-1016:2:3633
-1017:2:3637
-1018:2:3638
-1019:2:3642
-1020:2:3643
-1021:2:3651
-1022:2:3656
-1023:2:3660
-1024:2:3661
-1025:2:3669
-1026:2:3670
-1027:2:3674
-1028:2:3675
-1029:2:3669
-1030:2:3670
-1031:2:3674
-1032:2:3675
-1033:2:3683
-1034:2:3690
-1035:2:3691
-1036:2:3695
-1037:2:3696
-1038:2:3703
-1039:2:3708
-1040:2:3715
-1041:2:3716
-1042:2:3715
-1043:2:3716
-1044:2:3723
-1045:0:4029
-1046:2:2767
-1047:0:4029
-1048:1:2663
-1049:1:2670
-1050:1:2671
-1051:1:2678
-1052:1:2683
-1053:1:2690
-1054:1:2691
-1055:1:2690
-1056:1:2691
-1057:1:2698
-1058:1:2702
-1059:0:4029
-1060:2:3507
-1061:2:3516
-1062:2:3517
-1063:2:3521
-1064:2:3522
-1065:2:3526
-1066:2:3527
-1067:2:3535
-1068:2:3540
-1069:2:3544
-1070:2:3545
-1071:2:3553
-1072:2:3554
-1073:2:3558
-1074:2:3559
-1075:2:3553
-1076:2:3554
-1077:2:3558
-1078:2:3559
-1079:2:3567
-1080:2:3574
-1081:2:3575
-1082:2:3579
-1083:2:3580
-1084:2:3587
-1085:2:3592
-1086:2:3599
-1087:2:3600
-1088:2:3599
-1089:2:3600
-1090:2:3607
-1091:2:3617
-1092:0:4029
-1093:2:2767
-1094:0:4029
-1095:2:3623
-1096:2:3632
-1097:2:3633
-1098:2:3637
-1099:2:3638
-1100:2:3642
-1101:2:3643
-1102:2:3651
-1103:2:3656
-1104:2:3660
-1105:2:3661
-1106:2:3669
-1107:2:3670
-1108:2:3674
-1109:2:3675
-1110:2:3669
-1111:2:3670
-1112:2:3674
-1113:2:3675
-1114:2:3683
-1115:2:3690
-1116:2:3691
-1117:2:3695
-1118:2:3696
-1119:2:3703
-1120:2:3708
-1121:2:3715
-1122:2:3716
-1123:2:3715
-1124:2:3716
-1125:2:3723
-1126:0:4029
-1127:2:2767
-1128:0:4029
-1129:1:1129
-1130:1:1130
-1131:0:4029
-1132:1:11
-1133:0:4029
-1134:2:3507
-1135:2:3516
-1136:2:3517
-1137:2:3521
-1138:2:3522
-1139:2:3526
-1140:2:3527
-1141:2:3535
-1142:2:3540
-1143:2:3544
-1144:2:3545
-1145:2:3553
-1146:2:3554
-1147:2:3558
-1148:2:3559
-1149:2:3553
-1150:2:3554
-1151:2:3558
-1152:2:3559
-1153:2:3567
-1154:2:3574
-1155:2:3575
-1156:2:3579
-1157:2:3580
-1158:2:3587
-1159:2:3592
-1160:2:3599
-1161:2:3600
-1162:2:3599
-1163:2:3600
-1164:2:3607
-1165:2:3617
-1166:0:4029
-1167:2:2767
-1168:0:4029
-1169:2:3623
-1170:2:3632
-1171:2:3633
-1172:2:3637
-1173:2:3638
-1174:2:3642
-1175:2:3643
-1176:2:3651
-1177:2:3656
-1178:2:3660
-1179:2:3661
-1180:2:3669
-1181:2:3670
-1182:2:3674
-1183:2:3675
-1184:2:3669
-1185:2:3670
-1186:2:3674
-1187:2:3675
-1188:2:3683
-1189:2:3690
-1190:2:3691
-1191:2:3695
-1192:2:3696
-1193:2:3703
-1194:2:3708
-1195:2:3715
-1196:2:3716
-1197:2:3715
-1198:2:3716
-1199:2:3723
-1200:0:4029
-1201:2:2767
-1202:0:4029
-1203:1:1131
-1204:1:1132
-1205:1:1136
-1206:1:1137
-1207:1:1145
-1208:1:1146
-1209:1:1150
-1210:1:1151
-1211:1:1159
-1212:1:1164
-1213:1:1168
-1214:1:1169
-1215:1:1177
-1216:1:1178
-1217:1:1182
-1218:1:1183
-1219:1:1177
-1220:1:1178
-1221:1:1182
-1222:1:1183
-1223:1:1191
-1224:1:1196
-1225:1:1203
-1226:1:1204
-1227:1:1211
-1228:1:1216
-1229:1:1223
-1230:1:1224
-1231:1:1223
-1232:1:1224
-1233:1:1231
-1234:0:4029
-1235:1:11
-1236:0:4029
-1237:2:3507
-1238:2:3516
-1239:2:3517
-1240:2:3521
-1241:2:3522
-1242:2:3526
-1243:2:3527
-1244:2:3535
-1245:2:3540
-1246:2:3544
-1247:2:3545
-1248:2:3553
-1249:2:3554
-1250:2:3558
-1251:2:3559
-1252:2:3553
-1253:2:3554
-1254:2:3558
-1255:2:3559
-1256:2:3567
-1257:2:3574
-1258:2:3575
-1259:2:3579
-1260:2:3580
-1261:2:3587
-1262:2:3592
-1263:2:3599
-1264:2:3600
-1265:2:3599
-1266:2:3600
-1267:2:3607
-1268:2:3617
-1269:0:4029
-1270:2:2767
-1271:0:4029
-1272:2:3623
-1273:2:3632
-1274:2:3633
-1275:2:3637
-1276:2:3638
-1277:2:3642
-1278:2:3643
-1279:2:3651
-1280:2:3656
-1281:2:3660
-1282:2:3661
-1283:2:3669
-1284:2:3670
-1285:2:3674
-1286:2:3675
-1287:2:3669
-1288:2:3670
-1289:2:3674
-1290:2:3675
-1291:2:3683
-1292:2:3690
-1293:2:3691
-1294:2:3695
-1295:2:3696
-1296:2:3703
-1297:2:3708
-1298:2:3715
-1299:2:3716
-1300:2:3715
-1301:2:3716
-1302:2:3723
-1303:0:4029
-1304:2:2767
-1305:0:4029
-1306:1:1242
-1307:1:1243
-1308:1:1247
-1309:1:1248
-1310:1:1256
-1311:1:1257
-1312:1:1261
-1313:1:1262
-1314:1:1270
-1315:1:1275
-1316:1:1279
-1317:1:1280
-1318:1:1288
-1319:1:1289
-1320:1:1293
-1321:1:1294
-1322:1:1288
-1323:1:1289
-1324:1:1293
-1325:1:1294
-1326:1:1302
-1327:1:1307
-1328:1:1314
-1329:1:1315
-1330:1:1322
-1331:1:1327
-1332:1:1334
-1333:1:1335
-1334:1:1334
-1335:1:1335
-1336:1:1342
-1337:1:1351
-1338:1:1355
-1339:0:4029
-1340:1:11
-1341:0:4029
-1342:2:3507
-1343:2:3516
-1344:2:3517
-1345:2:3521
-1346:2:3522
-1347:2:3526
-1348:2:3527
-1349:2:3535
-1350:2:3540
-1351:2:3544
-1352:2:3545
-1353:2:3553
-1354:2:3554
-1355:2:3558
-1356:2:3559
-1357:2:3553
-1358:2:3554
-1359:2:3558
-1360:2:3559
-1361:2:3567
-1362:2:3574
-1363:2:3575
-1364:2:3579
-1365:2:3580
-1366:2:3587
-1367:2:3592
-1368:2:3599
-1369:2:3600
-1370:2:3599
-1371:2:3600
-1372:2:3607
-1373:2:3617
-1374:0:4029
-1375:2:2767
-1376:0:4029
-1377:2:3623
-1378:2:3632
-1379:2:3633
-1380:2:3637
-1381:2:3638
-1382:2:3642
-1383:2:3643
-1384:2:3651
-1385:2:3656
-1386:2:3660
-1387:2:3661
-1388:2:3669
-1389:2:3670
-1390:2:3674
-1391:2:3675
-1392:2:3669
-1393:2:3670
-1394:2:3674
-1395:2:3675
-1396:2:3683
-1397:2:3690
-1398:2:3691
-1399:2:3695
-1400:2:3696
-1401:2:3703
-1402:2:3708
-1403:2:3715
-1404:2:3716
-1405:2:3715
-1406:2:3716
-1407:2:3723
-1408:0:4029
-1409:2:2767
-1410:0:4029
-1411:1:1356
-1412:1:1360
-1413:1:1361
-1414:1:1365
-1415:1:1366
-1416:1:1374
-1417:1:1382
-1418:1:1383
-1419:1:1387
-1420:1:1391
-1421:1:1392
-1422:1:1387
-1423:1:1391
-1424:1:1392
-1425:1:1396
-1426:1:1403
-1427:1:1410
-1428:1:1411
-1429:1:1418
-1430:1:1423
-1431:1:1430
-1432:1:1431
-1433:1:1430
-1434:1:1431
-1435:1:1438
-1436:0:4029
-1437:1:11
-1438:0:4029
-1439:2:3507
-1440:2:3516
-1441:2:3517
-1442:2:3521
-1443:2:3522
-1444:2:3526
-1445:2:3527
-1446:2:3535
-1447:2:3540
-1448:2:3544
-1449:2:3545
-1450:2:3553
-1451:2:3554
-1452:2:3558
-1453:2:3559
-1454:2:3553
-1455:2:3554
-1456:2:3558
-1457:2:3559
-1458:2:3567
-1459:2:3574
-1460:2:3575
-1461:2:3579
-1462:2:3580
-1463:2:3587
-1464:2:3592
-1465:2:3599
-1466:2:3600
-1467:2:3599
-1468:2:3600
-1469:2:3607
-1470:2:3617
-1471:0:4029
-1472:2:2767
-1473:0:4029
-1474:2:3623
-1475:2:3632
-1476:2:3633
-1477:2:3637
-1478:2:3638
-1479:2:3642
-1480:2:3643
-1481:2:3651
-1482:2:3656
-1483:2:3660
-1484:2:3661
-1485:2:3669
-1486:2:3670
-1487:2:3674
-1488:2:3675
-1489:2:3669
-1490:2:3670
-1491:2:3674
-1492:2:3675
-1493:2:3683
-1494:2:3690
-1495:2:3691
-1496:2:3695
-1497:2:3696
-1498:2:3703
-1499:2:3708
-1500:2:3715
-1501:2:3716
-1502:2:3715
-1503:2:3716
-1504:2:3723
-1505:0:4029
-1506:2:2767
-1507:0:4029
-1508:1:1448
-1509:1:1449
-1510:1:1453
-1511:1:1454
-1512:1:1462
-1513:1:1463
-1514:1:1467
-1515:1:1468
-1516:1:1476
-1517:1:1481
-1518:1:1485
-1519:1:1486
-1520:1:1494
-1521:1:1495
-1522:1:1499
-1523:1:1500
-1524:1:1494
-1525:1:1495
-1526:1:1499
-1527:1:1500
-1528:1:1508
-1529:1:1513
-1530:1:1520
-1531:1:1521
-1532:1:1528
-1533:1:1533
-1534:1:1540
-1535:1:1541
-1536:1:1540
-1537:1:1541
-1538:1:1548
-1539:0:4029
-1540:1:11
-1541:0:4029
-1542:2:3507
-1543:2:3516
-1544:2:3517
-1545:2:3521
-1546:2:3522
-1547:2:3526
-1548:2:3527
-1549:2:3535
-1550:2:3540
-1551:2:3544
-1552:2:3545
-1553:2:3553
-1554:2:3554
-1555:2:3558
-1556:2:3559
-1557:2:3553
-1558:2:3554
-1559:2:3558
-1560:2:3559
-1561:2:3567
-1562:2:3574
-1563:2:3575
-1564:2:3579
-1565:2:3580
-1566:2:3587
-1567:2:3592
-1568:2:3599
-1569:2:3600
-1570:2:3599
-1571:2:3600
-1572:2:3607
-1573:2:3617
-1574:0:4029
-1575:2:2767
-1576:0:4029
-1577:2:3623
-1578:2:3632
-1579:2:3633
-1580:2:3637
-1581:2:3638
-1582:2:3642
-1583:2:3643
-1584:2:3651
-1585:2:3656
-1586:2:3660
-1587:2:3661
-1588:2:3669
-1589:2:3670
-1590:2:3674
-1591:2:3675
-1592:2:3669
-1593:2:3670
-1594:2:3674
-1595:2:3675
-1596:2:3683
-1597:2:3690
-1598:2:3691
-1599:2:3695
-1600:2:3696
-1601:2:3703
-1602:2:3708
-1603:2:3715
-1604:2:3716
-1605:2:3715
-1606:2:3716
-1607:2:3723
-1608:0:4029
-1609:2:2767
-1610:0:4029
-1611:1:1559
-1612:1:1560
-1613:1:1564
-1614:1:1565
-1615:1:1573
-1616:1:1574
-1617:1:1578
-1618:1:1579
-1619:1:1587
-1620:1:1592
-1621:1:1596
-1622:1:1597
-1623:1:1605
-1624:1:1606
-1625:1:1610
-1626:1:1611
-1627:1:1605
-1628:1:1606
-1629:1:1610
-1630:1:1611
-1631:1:1619
-1632:1:1624
-1633:1:1631
-1634:1:1632
-1635:1:1639
-1636:1:1644
-1637:1:1651
-1638:1:1652
-1639:1:1651
-1640:1:1652
-1641:1:1659
-1642:1:1668
-1643:1:1672
-1644:0:4029
-1645:1:11
-1646:0:4029
-1647:2:3507
-1648:2:3516
-1649:2:3517
-1650:2:3521
-1651:2:3522
-1652:2:3526
-1653:2:3527
-1654:2:3535
-1655:2:3540
-1656:2:3544
-1657:2:3545
-1658:2:3553
-1659:2:3554
-1660:2:3558
-1661:2:3559
-1662:2:3553
-1663:2:3554
-1664:2:3558
-1665:2:3559
-1666:2:3567
-1667:2:3574
-1668:2:3575
-1669:2:3579
-1670:2:3580
-1671:2:3587
-1672:2:3592
-1673:2:3599
-1674:2:3600
-1675:2:3599
-1676:2:3600
-1677:2:3607
-1678:2:3617
-1679:0:4029
-1680:2:2767
-1681:0:4029
-1682:2:3623
-1683:2:3632
-1684:2:3633
-1685:2:3637
-1686:2:3638
-1687:2:3642
-1688:2:3643
-1689:2:3651
-1690:2:3656
-1691:2:3660
-1692:2:3661
-1693:2:3669
-1694:2:3670
-1695:2:3674
-1696:2:3675
-1697:2:3669
-1698:2:3670
-1699:2:3674
-1700:2:3675
-1701:2:3683
-1702:2:3690
-1703:2:3691
-1704:2:3695
-1705:2:3696
-1706:2:3703
-1707:2:3708
-1708:2:3715
-1709:2:3716
-1710:2:3715
-1711:2:3716
-1712:2:3723
-1713:0:4029
-1714:2:2767
-1715:0:4029
-1716:1:1673
-1717:1:1674
-1718:1:1678
-1719:1:1679
-1720:1:1687
-1721:1:1688
-1722:1:1689
-1723:1:1701
-1724:1:1706
-1725:1:1710
-1726:1:1711
-1727:1:1719
-1728:1:1720
-1729:1:1724
-1730:1:1725
-1731:1:1719
-1732:1:1720
-1733:1:1724
-1734:1:1725
-1735:1:1733
-1736:1:1738
-1737:1:1745
-1738:1:1746
-1739:1:1753
-1740:1:1758
-1741:1:1765
-1742:1:1766
-1743:1:1765
-1744:1:1766
-1745:1:1773
-1746:0:4029
-1747:1:11
-1748:0:4029
-1749:1:1784
-1750:1:1785
-1751:0:4029
-1752:1:11
-1753:0:4029
-1754:1:1791
-1755:1:1792
-1756:1:1796
-1757:1:1797
-1758:1:1805
-1759:1:1806
-1760:1:1810
-1761:1:1811
-1762:1:1819
-1763:1:1824
-1764:1:1828
-1765:1:1829
-1766:1:1837
-1767:1:1838
-1768:1:1842
-1769:1:1843
-1770:1:1837
-1771:1:1838
-1772:1:1842
-1773:1:1843
-1774:1:1851
-1775:1:1856
-1776:1:1863
-1777:1:1864
-1778:1:1871
-1779:1:1876
-1780:1:1883
-1781:1:1884
-1782:1:1883
-1783:1:1884
-1784:1:1891
-1785:0:4029
-1786:1:11
-1787:0:4029
-1788:1:1902
-1789:1:1903
-1790:1:1907
-1791:1:1908
-1792:1:1916
-1793:1:1917
-1794:1:1921
-1795:1:1922
-1796:1:1930
-1797:1:1935
-1798:1:1939
-1799:1:1940
-1800:1:1948
-1801:1:1949
-1802:1:1953
-1803:1:1954
-1804:1:1948
-1805:1:1949
-1806:1:1953
-1807:1:1954
-1808:1:1962
-1809:1:1967
-1810:1:1974
-1811:1:1975
-1812:1:1982
-1813:1:1987
-1814:1:1994
-1815:1:1995
-1816:1:1994
-1817:1:1995
-1818:1:2002
-1819:1:2011
-1820:0:4029
-1821:1:11
-1822:0:4029
-1823:1:2129
-1824:1:2133
-1825:1:2134
-1826:1:2138
-1827:1:2139
-1828:1:2147
-1829:1:2155
-1830:1:2156
-1831:1:2160
-1832:1:2164
-1833:1:2165
-1834:1:2160
-1835:1:2164
-1836:1:2165
-1837:1:2169
-1838:1:2176
-1839:1:2183
-1840:1:2184
-1841:1:2191
-1842:1:2196
-1843:1:2203
-1844:1:2204
-1845:1:2203
-1846:1:2204
-1847:1:2211
-1848:0:4029
-1849:1:11
-1850:0:4029
-1851:2:3507
-1852:2:3516
-1853:2:3517
-1854:2:3521
-1855:2:3522
-1856:2:3526
-1857:2:3527
-1858:2:3535
-1859:2:3540
-1860:2:3544
-1861:2:3545
-1862:2:3553
-1863:2:3554
-1864:2:3558
-1865:2:3559
-1866:2:3553
-1867:2:3554
-1868:2:3558
-1869:2:3559
-1870:2:3567
-1871:2:3574
-1872:2:3575
-1873:2:3579
-1874:2:3580
-1875:2:3587
-1876:2:3592
-1877:2:3599
-1878:2:3600
-1879:2:3599
-1880:2:3600
-1881:2:3607
-1882:2:3617
-1883:0:4029
-1884:2:2767
-1885:0:4029
-1886:2:3623
-1887:2:3632
-1888:2:3633
-1889:2:3637
-1890:2:3638
-1891:2:3642
-1892:2:3643
-1893:2:3651
-1894:2:3656
-1895:2:3660
-1896:2:3661
-1897:2:3669
-1898:2:3670
-1899:2:3674
-1900:2:3675
-1901:2:3669
-1902:2:3670
-1903:2:3674
-1904:2:3675
-1905:2:3683
-1906:2:3690
-1907:2:3691
-1908:2:3695
-1909:2:3696
-1910:2:3703
-1911:2:3708
-1912:2:3715
-1913:2:3716
-1914:2:3715
-1915:2:3716
-1916:2:3723
-1917:0:4029
-1918:2:2767
-1919:0:4029
-1920:1:2221
-1921:1:2222
-1922:1:2226
-1923:1:2227
-1924:1:2235
-1925:1:2236
-1926:1:2240
-1927:1:2241
-1928:1:2249
-1929:1:2254
-1930:1:2258
-1931:1:2259
-1932:1:2267
-1933:1:2268
-1934:1:2272
-1935:1:2273
-1936:1:2267
-1937:1:2268
-1938:1:2272
-1939:1:2273
-1940:1:2281
-1941:1:2286
-1942:1:2293
-1943:1:2294
-1944:1:2301
-1945:1:2306
-1946:1:2313
-1947:1:2314
-1948:1:2313
-1949:1:2314
-1950:1:2321
--1:-1:-1
-1951:0:4029
-1952:1:11
-1953:0:4029
-1954:2:3507
-1955:2:3516
-1956:2:3517
-1957:2:3521
-1958:2:3522
-1959:2:3526
-1960:2:3527
-1961:2:3535
-1962:2:3540
-1963:2:3544
-1964:2:3545
-1965:2:3553
-1966:2:3554
-1967:2:3558
-1968:2:3559
-1969:2:3553
-1970:2:3554
-1971:2:3558
-1972:2:3559
-1973:2:3567
-1974:2:3574
-1975:2:3575
-1976:2:3579
-1977:2:3580
-1978:2:3587
-1979:2:3592
-1980:2:3599
-1981:2:3600
-1982:2:3599
-1983:2:3600
-1984:2:3607
-1985:2:3617
-1986:0:4029
-1987:2:2767
-1988:0:4029
-1989:2:3623
-1990:2:3632
-1991:2:3633
-1992:2:3637
-1993:2:3638
-1994:2:3642
-1995:2:3643
-1996:2:3651
-1997:2:3656
-1998:2:3660
-1999:2:3661
-2000:2:3669
-2001:2:3670
-2002:2:3674
-2003:2:3675
-2004:2:3669
-2005:2:3670
-2006:2:3674
-2007:2:3675
-2008:2:3683
-2009:2:3690
-2010:2:3691
-2011:2:3695
-2012:2:3696
-2013:2:3703
-2014:2:3708
-2015:2:3715
-2016:2:3716
-2017:2:3715
-2018:2:3716
-2019:2:3723
-2020:0:4029
-2021:2:2767
-2022:0:4029
-2023:1:2332
-2024:0:4029
-2025:2:3507
-2026:2:3516
-2027:2:3517
-2028:2:3521
-2029:2:3522
-2030:2:3526
-2031:2:3527
-2032:2:3535
-2033:2:3540
-2034:2:3544
-2035:2:3545
-2036:2:3553
-2037:2:3554
-2038:2:3558
-2039:2:3559
-2040:2:3553
-2041:2:3554
-2042:2:3558
-2043:2:3559
-2044:2:3567
-2045:2:3574
-2046:2:3575
-2047:2:3579
-2048:2:3580
-2049:2:3587
-2050:2:3592
-2051:2:3599
-2052:2:3600
-2053:2:3599
-2054:2:3600
-2055:2:3607
-2056:2:3617
-2057:0:4029
-2058:2:2767
-2059:0:4029
-2060:2:3623
-2061:2:3632
-2062:2:3633
-2063:2:3637
-2064:2:3638
-2065:2:3642
-2066:2:3643
-2067:2:3651
-2068:2:3656
-2069:2:3660
-2070:2:3661
-2071:2:3669
-2072:2:3670
-2073:2:3674
-2074:2:3675
-2075:2:3669
-2076:2:3670
-2077:2:3674
-2078:2:3675
-2079:2:3683
-2080:2:3690
-2081:2:3691
-2082:2:3695
-2083:2:3696
-2084:2:3703
-2085:2:3708
-2086:2:3715
-2087:2:3716
-2088:2:3715
-2089:2:3716
-2090:2:3723
-2091:0:4029
-2092:2:2767
-2093:0:4029
-2094:1:2706
-2095:1:2713
-2096:1:2714
-2097:1:2721
-2098:1:2726
-2099:1:2733
-2100:1:2734
-2101:1:2733
-2102:1:2734
-2103:1:2741
-2104:1:2745
-2105:0:4029
-2106:2:3507
-2107:2:3516
-2108:2:3517
-2109:2:3521
-2110:2:3522
-2111:2:3526
-2112:2:3527
-2113:2:3535
-2114:2:3540
-2115:2:3544
-2116:2:3545
-2117:2:3553
-2118:2:3554
-2119:2:3558
-2120:2:3559
-2121:2:3553
-2122:2:3554
-2123:2:3558
-2124:2:3559
-2125:2:3567
-2126:2:3574
-2127:2:3575
-2128:2:3579
-2129:2:3580
-2130:2:3587
-2131:2:3592
-2132:2:3599
-2133:2:3600
-2134:2:3599
-2135:2:3600
-2136:2:3607
-2137:2:3617
-2138:0:4029
-2139:2:2767
-2140:0:4029
-2141:2:3623
-2142:2:3632
-2143:2:3633
-2144:2:3637
-2145:2:3638
-2146:2:3642
-2147:2:3643
-2148:2:3651
-2149:2:3656
-2150:2:3660
-2151:2:3661
-2152:2:3669
-2153:2:3670
-2154:2:3674
-2155:2:3675
-2156:2:3669
-2157:2:3670
-2158:2:3674
-2159:2:3675
-2160:2:3683
-2161:2:3690
-2162:2:3691
-2163:2:3695
-2164:2:3696
-2165:2:3703
-2166:2:3708
-2167:2:3715
-2168:2:3716
-2169:2:3715
-2170:2:3716
-2171:2:3723
-2172:0:4029
-2173:2:2767
-2174:0:4029
-2175:1:2334
-2176:1:2335
-2177:0:4029
-2178:1:11
-2179:0:4029
-2180:2:3507
-2181:2:3516
-2182:2:3517
-2183:2:3521
-2184:2:3522
-2185:2:3526
-2186:2:3527
-2187:2:3535
-2188:2:3540
-2189:2:3544
-2190:2:3545
-2191:2:3553
-2192:2:3554
-2193:2:3558
-2194:2:3559
-2195:2:3553
-2196:2:3554
-2197:2:3558
-2198:2:3559
-2199:2:3567
-2200:2:3574
-2201:2:3575
-2202:2:3579
-2203:2:3580
-2204:2:3587
-2205:2:3592
-2206:2:3599
-2207:2:3600
-2208:2:3599
-2209:2:3600
-2210:2:3607
-2211:2:3617
-2212:0:4029
-2213:2:2767
-2214:0:4029
-2215:2:3623
-2216:2:3632
-2217:2:3633
-2218:2:3637
-2219:2:3638
-2220:2:3642
-2221:2:3643
-2222:2:3651
-2223:2:3656
-2224:2:3660
-2225:2:3661
-2226:2:3669
-2227:2:3670
-2228:2:3674
-2229:2:3675
-2230:2:3669
-2231:2:3670
-2232:2:3674
-2233:2:3675
-2234:2:3683
-2235:2:3690
-2236:2:3691
-2237:2:3695
-2238:2:3696
-2239:2:3703
-2240:2:3708
-2241:2:3715
-2242:2:3716
-2243:2:3715
-2244:2:3716
-2245:2:3723
-2246:0:4029
-2247:2:2767
-2248:0:4029
-2249:1:2336
-2250:1:2340
-2251:1:2341
-2252:1:2345
-2253:1:2349
-2254:1:2350
-2255:1:2354
-2256:1:2362
-2257:1:2363
-2258:1:2367
-2259:1:2371
-2260:1:2372
-2261:1:2367
-2262:1:2371
-2263:1:2372
-2264:1:2376
-2265:1:2383
-2266:1:2390
-2267:1:2391
-2268:1:2398
-2269:1:2403
-2270:1:2410
-2271:1:2411
-2272:1:2410
-2273:1:2411
-2274:1:2418
-2275:0:4029
-2276:1:11
-2277:0:4029
-2278:2:3507
-2279:2:3516
-2280:2:3517
-2281:2:3521
-2282:2:3522
-2283:2:3526
-2284:2:3527
-2285:2:3535
-2286:2:3540
-2287:2:3544
-2288:2:3545
-2289:2:3553
-2290:2:3554
-2291:2:3558
-2292:2:3559
-2293:2:3553
-2294:2:3554
-2295:2:3558
-2296:2:3559
-2297:2:3567
-2298:2:3574
-2299:2:3575
-2300:2:3579
-2301:2:3580
-2302:2:3587
-2303:2:3592
-2304:2:3599
-2305:2:3600
-2306:2:3599
-2307:2:3600
-2308:2:3607
-2309:2:3617
-2310:0:4029
-2311:2:2767
-2312:0:4029
-2313:2:3623
-2314:2:3632
-2315:2:3633
-2316:2:3637
-2317:2:3638
-2318:2:3642
-2319:2:3643
-2320:2:3651
-2321:2:3656
-2322:2:3660
-2323:2:3661
-2324:2:3669
-2325:2:3670
-2326:2:3674
-2327:2:3675
-2328:2:3669
-2329:2:3670
-2330:2:3674
-2331:2:3675
-2332:2:3683
-2333:2:3690
-2334:2:3691
-2335:2:3695
-2336:2:3696
-2337:2:3703
-2338:2:3708
-2339:2:3715
-2340:2:3716
-2341:2:3715
-2342:2:3716
-2343:2:3723
-2344:0:4029
-2345:2:2767
-2346:0:4029
-2347:1:2428
-2348:1:2429
-2349:1:2433
-2350:1:2434
-2351:1:2442
-2352:1:2443
-2353:1:2447
-2354:1:2448
-2355:1:2456
-2356:1:2461
-2357:1:2465
-2358:1:2466
-2359:1:2474
-2360:1:2475
-2361:1:2479
-2362:1:2480
-2363:1:2474
-2364:1:2475
-2365:1:2479
-2366:1:2480
-2367:1:2488
-2368:1:2493
-2369:1:2500
-2370:1:2501
-2371:1:2508
-2372:1:2513
-2373:1:2520
-2374:1:2521
-2375:1:2520
-2376:1:2521
-2377:1:2528
-2378:0:4029
-2379:1:11
-2380:0:4029
-2381:2:3507
-2382:2:3516
-2383:2:3517
-2384:2:3521
-2385:2:3522
-2386:2:3526
-2387:2:3527
-2388:2:3535
-2389:2:3540
-2390:2:3544
-2391:2:3545
-2392:2:3553
-2393:2:3554
-2394:2:3558
-2395:2:3559
-2396:2:3553
-2397:2:3554
-2398:2:3558
-2399:2:3559
-2400:2:3567
-2401:2:3574
-2402:2:3575
-2403:2:3579
-2404:2:3580
-2405:2:3587
-2406:2:3592
-2407:2:3599
-2408:2:3600
-2409:2:3599
-2410:2:3600
-2411:2:3607
-2412:2:3617
-2413:0:4029
-2414:2:2767
-2415:0:4029
-2416:2:3623
-2417:2:3632
-2418:2:3633
-2419:2:3637
-2420:2:3638
-2421:2:3642
-2422:2:3643
-2423:2:3651
-2424:2:3656
-2425:2:3660
-2426:2:3661
-2427:2:3669
-2428:2:3670
-2429:2:3674
-2430:2:3675
-2431:2:3669
-2432:2:3670
-2433:2:3674
-2434:2:3675
-2435:2:3683
-2436:2:3690
-2437:2:3691
-2438:2:3695
-2439:2:3696
-2440:2:3703
-2441:2:3708
-2442:2:3715
-2443:2:3716
-2444:2:3715
-2445:2:3716
-2446:2:3723
-2447:0:4029
-2448:2:2767
-2449:0:4029
-2450:1:2539
-2451:1:2540
-2452:1:2544
-2453:1:2545
-2454:1:2553
-2455:1:2554
-2456:1:2558
-2457:1:2559
-2458:1:2567
-2459:1:2572
-2460:1:2576
-2461:1:2577
-2462:1:2585
-2463:1:2586
-2464:1:2590
-2465:1:2591
-2466:1:2585
-2467:1:2586
-2468:1:2590
-2469:1:2591
-2470:1:2599
-2471:1:2604
-2472:1:2611
-2473:1:2612
-2474:1:2619
-2475:1:2624
-2476:1:2631
-2477:1:2632
-2478:1:2631
-2479:1:2632
-2480:1:2639
-2481:1:2648
-2482:1:2652
-2483:0:4029
-2484:1:11
-2485:0:4029
-2486:2:3507
-2487:2:3516
-2488:2:3517
-2489:2:3521
-2490:2:3522
-2491:2:3526
-2492:2:3527
-2493:2:3535
-2494:2:3540
-2495:2:3544
-2496:2:3545
-2497:2:3553
-2498:2:3554
-2499:2:3558
-2500:2:3559
-2501:2:3553
-2502:2:3554
-2503:2:3558
-2504:2:3559
-2505:2:3567
-2506:2:3574
-2507:2:3575
-2508:2:3579
-2509:2:3580
-2510:2:3587
-2511:2:3592
-2512:2:3599
-2513:2:3600
-2514:2:3599
-2515:2:3600
-2516:2:3607
-2517:2:3617
-2518:0:4029
-2519:2:2767
-2520:0:4029
-2521:2:3623
-2522:2:3632
-2523:2:3633
-2524:2:3637
-2525:2:3638
-2526:2:3642
-2527:2:3643
-2528:2:3651
-2529:2:3656
-2530:2:3660
-2531:2:3661
-2532:2:3669
-2533:2:3670
-2534:2:3674
-2535:2:3675
-2536:2:3669
-2537:2:3670
-2538:2:3674
-2539:2:3675
-2540:2:3683
-2541:2:3690
-2542:2:3691
-2543:2:3695
-2544:2:3696
-2545:2:3703
-2546:2:3708
-2547:2:3715
-2548:2:3716
-2549:2:3715
-2550:2:3716
-2551:2:3723
-2552:0:4029
-2553:2:2767
-2554:0:4029
-2555:1:2653
-2556:0:4029
-2557:1:2661
-2558:0:4029
-2559:1:2749
-2560:0:4029
-2561:1:9
-2562:0:4029
-2563:2:3507
-2564:2:3516
-2565:2:3517
-2566:2:3521
-2567:2:3522
-2568:2:3526
-2569:2:3527
-2570:2:3535
-2571:2:3540
-2572:2:3544
-2573:2:3545
-2574:2:3553
-2575:2:3554
-2576:2:3558
-2577:2:3559
-2578:2:3553
-2579:2:3554
-2580:2:3558
-2581:2:3559
-2582:2:3567
-2583:2:3574
-2584:2:3575
-2585:2:3579
-2586:2:3580
-2587:2:3587
-2588:2:3592
-2589:2:3599
-2590:2:3600
-2591:2:3599
-2592:2:3600
-2593:2:3607
-2594:2:3617
-2595:0:4029
-2596:2:2767
-2597:0:4029
-2598:2:3623
-2599:2:3632
-2600:2:3633
-2601:2:3637
-2602:2:3638
-2603:2:3642
-2604:2:3643
-2605:2:3651
-2606:2:3656
-2607:2:3660
-2608:2:3661
-2609:2:3669
-2610:2:3670
-2611:2:3674
-2612:2:3675
-2613:2:3669
-2614:2:3670
-2615:2:3674
-2616:2:3675
-2617:2:3683
-2618:2:3690
-2619:2:3691
-2620:2:3695
-2621:2:3696
-2622:2:3703
-2623:2:3708
-2624:2:3715
-2625:2:3716
-2626:2:3715
-2627:2:3716
-2628:2:3723
-2629:0:4029
-2630:2:2767
-2631:0:4029
-2632:1:10
-2633:0:4029
-2634:1:11
-2635:0:4029
-2636:2:3507
-2637:2:3516
-2638:2:3517
-2639:2:3521
-2640:2:3522
-2641:2:3526
-2642:2:3527
-2643:2:3535
-2644:2:3540
-2645:2:3544
-2646:2:3545
-2647:2:3553
-2648:2:3554
-2649:2:3558
-2650:2:3559
-2651:2:3553
-2652:2:3554
-2653:2:3558
-2654:2:3559
-2655:2:3567
-2656:2:3574
-2657:2:3575
-2658:2:3579
-2659:2:3580
-2660:2:3587
-2661:2:3592
-2662:2:3599
-2663:2:3600
-2664:2:3599
-2665:2:3600
-2666:2:3607
-2667:2:3617
-2668:0:4029
-2669:2:2767
-2670:0:4029
-2671:2:3623
-2672:2:3632
-2673:2:3633
-2674:2:3637
-2675:2:3638
-2676:2:3642
-2677:2:3643
-2678:2:3651
-2679:2:3656
-2680:2:3660
-2681:2:3661
-2682:2:3669
-2683:2:3670
-2684:2:3674
-2685:2:3675
-2686:2:3669
-2687:2:3670
-2688:2:3674
-2689:2:3675
-2690:2:3683
-2691:2:3690
-2692:2:3691
-2693:2:3695
-2694:2:3696
-2695:2:3703
-2696:2:3708
-2697:2:3715
-2698:2:3716
-2699:2:3715
-2700:2:3716
-2701:2:3723
-2702:0:4029
-2703:2:2767
-2704:0:4029
-2705:1:12
-2706:1:13
-2707:1:17
-2708:1:18
-2709:1:26
-2710:1:27
-2711:1:28
-2712:1:40
-2713:1:45
-2714:1:49
-2715:1:50
-2716:1:58
-2717:1:59
-2718:1:63
-2719:1:64
-2720:1:58
-2721:1:59
-2722:1:63
-2723:1:64
-2724:1:72
-2725:1:77
-2726:1:84
-2727:1:85
-2728:1:92
-2729:1:97
-2730:1:104
-2731:1:105
-2732:1:104
-2733:1:105
-2734:1:112
-2735:0:4029
-2736:1:11
-2737:0:4029
-2738:1:123
-2739:1:124
-2740:0:4029
-2741:1:11
-2742:0:4029
-2743:1:130
-2744:1:131
-2745:1:135
-2746:1:136
-2747:1:144
-2748:1:145
-2749:1:149
-2750:1:150
-2751:1:158
-2752:1:163
-2753:1:167
-2754:1:168
-2755:1:176
-2756:1:177
-2757:1:181
-2758:1:182
-2759:1:176
-2760:1:177
-2761:1:181
-2762:1:182
-2763:1:190
-2764:1:195
-2765:1:202
-2766:1:203
-2767:1:210
-2768:1:215
-2769:1:222
-2770:1:223
-2771:1:222
-2772:1:223
-2773:1:230
-2774:0:4029
-2775:1:11
-2776:0:4029
-2777:1:241
-2778:1:242
-2779:1:246
-2780:1:247
-2781:1:255
-2782:1:256
-2783:1:260
-2784:1:261
-2785:1:269
-2786:1:274
-2787:1:278
-2788:1:279
-2789:1:287
-2790:1:288
-2791:1:292
-2792:1:293
-2793:1:287
-2794:1:288
-2795:1:292
-2796:1:293
-2797:1:301
-2798:1:306
-2799:1:313
-2800:1:314
-2801:1:321
-2802:1:326
-2803:1:333
-2804:1:334
-2805:1:333
-2806:1:334
-2807:1:341
-2808:1:350
-2809:0:4029
-2810:1:11
-2811:0:4029
-2812:1:468
-2813:1:472
-2814:1:473
-2815:1:477
-2816:1:478
-2817:1:486
-2818:1:494
-2819:1:495
-2820:1:499
-2821:1:503
-2822:1:504
-2823:1:499
-2824:1:503
-2825:1:504
-2826:1:508
-2827:1:515
-2828:1:522
-2829:1:523
-2830:1:530
-2831:1:535
-2832:1:542
-2833:1:543
-2834:1:542
-2835:1:543
-2836:1:550
-2837:0:4029
-2838:1:11
-2839:0:4029
-2840:2:3507
-2841:2:3516
-2842:2:3517
-2843:2:3521
-2844:2:3522
-2845:2:3526
-2846:2:3527
-2847:2:3535
-2848:2:3540
-2849:2:3544
-2850:2:3545
-2851:2:3553
-2852:2:3554
-2853:2:3558
-2854:2:3559
-2855:2:3553
-2856:2:3554
-2857:2:3558
-2858:2:3559
-2859:2:3567
-2860:2:3574
-2861:2:3575
-2862:2:3579
-2863:2:3580
-2864:2:3587
-2865:2:3592
-2866:2:3599
-2867:2:3600
-2868:2:3599
-2869:2:3600
-2870:2:3607
-2871:2:3617
-2872:0:4029
-2873:2:2767
-2874:0:4029
-2875:2:3623
-2876:2:3632
-2877:2:3633
-2878:2:3637
-2879:2:3638
-2880:2:3642
-2881:2:3643
-2882:2:3651
-2883:2:3656
-2884:2:3660
-2885:2:3661
-2886:2:3669
-2887:2:3670
-2888:2:3674
-2889:2:3675
-2890:2:3669
-2891:2:3670
-2892:2:3674
-2893:2:3675
-2894:2:3683
-2895:2:3690
-2896:2:3691
-2897:2:3695
-2898:2:3696
-2899:2:3703
-2900:2:3708
-2901:2:3715
-2902:2:3716
-2903:2:3715
-2904:2:3716
-2905:2:3723
-2906:0:4029
-2907:2:2767
-2908:0:4029
-2909:1:678
-2910:1:679
-2911:1:683
-2912:1:684
-2913:1:692
-2914:1:693
-2915:1:697
-2916:1:698
-2917:1:706
-2918:1:711
-2919:1:715
-2920:1:716
-2921:1:724
-2922:1:725
-2923:1:729
-2924:1:730
-2925:1:724
-2926:1:725
-2927:1:729
-2928:1:730
-2929:1:738
-2930:1:743
-2931:1:750
-2932:1:751
-2933:1:758
-2934:1:763
-2935:1:770
-2936:1:771
-2937:1:770
-2938:1:771
-2939:1:778
-2940:0:4029
-2941:1:11
-2942:0:4029
-2943:2:3507
-2944:2:3516
-2945:2:3517
-2946:2:3521
-2947:2:3522
-2948:2:3526
-2949:2:3527
-2950:2:3535
-2951:2:3540
-2952:2:3544
-2953:2:3545
-2954:2:3553
-2955:2:3554
-2956:2:3558
-2957:2:3559
-2958:2:3553
-2959:2:3554
-2960:2:3558
-2961:2:3559
-2962:2:3567
-2963:2:3574
-2964:2:3575
-2965:2:3579
-2966:2:3580
-2967:2:3587
-2968:2:3592
-2969:2:3599
-2970:2:3600
-2971:2:3599
-2972:2:3600
-2973:2:3607
-2974:2:3617
-2975:0:4029
-2976:2:2767
-2977:0:4029
-2978:2:3623
-2979:2:3632
-2980:2:3633
-2981:2:3637
-2982:2:3638
-2983:2:3642
-2984:2:3643
-2985:2:3651
-2986:2:3656
-2987:2:3660
-2988:2:3661
-2989:2:3669
-2990:2:3670
-2991:2:3674
-2992:2:3675
-2993:2:3669
-2994:2:3670
-2995:2:3674
-2996:2:3675
-2997:2:3683
-2998:2:3690
-2999:2:3691
-3000:2:3695
-3001:2:3696
-3002:2:3703
-3003:2:3708
-3004:2:3715
-3005:2:3716
-3006:2:3715
-3007:2:3716
-3008:2:3723
-3009:0:4029
-3010:2:2767
-3011:0:4029
-3012:1:560
-3013:1:561
-3014:1:565
-3015:1:566
-3016:1:574
-3017:1:575
-3018:1:579
-3019:1:580
-3020:1:588
-3021:1:593
-3022:1:597
-3023:1:598
-3024:1:606
-3025:1:607
-3026:1:611
-3027:1:612
-3028:1:606
-3029:1:607
-3030:1:611
-3031:1:612
-3032:1:620
-3033:1:625
-3034:1:632
-3035:1:633
-3036:1:640
-3037:1:645
-3038:1:652
-3039:1:653
-3040:1:652
-3041:1:653
-3042:1:660
-3043:0:4029
-3044:1:11
-3045:0:4029
-3046:2:3507
-3047:2:3516
-3048:2:3517
-3049:2:3521
-3050:2:3522
-3051:2:3526
-3052:2:3527
-3053:2:3535
-3054:2:3540
-3055:2:3544
-3056:2:3545
-3057:2:3553
-3058:2:3554
-3059:2:3558
-3060:2:3559
-3061:2:3553
-3062:2:3554
-3063:2:3558
-3064:2:3559
-3065:2:3567
-3066:2:3574
-3067:2:3575
-3068:2:3579
-3069:2:3580
-3070:2:3587
-3071:2:3592
-3072:2:3599
-3073:2:3600
-3074:2:3599
-3075:2:3600
-3076:2:3607
-3077:2:3617
-3078:0:4029
-3079:2:2767
-3080:0:4029
-3081:2:3623
-3082:2:3632
-3083:2:3633
-3084:2:3637
-3085:2:3638
-3086:2:3642
-3087:2:3643
-3088:2:3651
-3089:2:3656
-3090:2:3660
-3091:2:3661
-3092:2:3669
-3093:2:3670
-3094:2:3674
-3095:2:3675
-3096:2:3669
-3097:2:3670
-3098:2:3674
-3099:2:3675
-3100:2:3683
-3101:2:3690
-3102:2:3691
-3103:2:3695
-3104:2:3696
-3105:2:3703
-3106:2:3708
-3107:2:3715
-3108:2:3716
-3109:2:3715
-3110:2:3716
-3111:2:3723
-3112:0:4029
-3113:2:2767
-3114:0:4029
-3115:1:1016
-3116:1:1017
-3117:1:1021
-3118:1:1022
-3119:1:1030
-3120:1:1031
-3121:1:1035
-3122:1:1036
-3123:1:1044
-3124:1:1049
-3125:1:1053
-3126:1:1054
-3127:1:1062
-3128:1:1063
-3129:1:1067
-3130:1:1068
-3131:1:1062
-3132:1:1063
-3133:1:1067
-3134:1:1068
-3135:1:1076
-3136:1:1081
-3137:1:1088
-3138:1:1089
-3139:1:1096
-3140:1:1101
-3141:1:1108
-3142:1:1109
-3143:1:1108
-3144:1:1109
-3145:1:1116
-3146:0:4029
-3147:1:11
-3148:0:4029
-3149:2:3507
-3150:2:3516
-3151:2:3517
-3152:2:3521
-3153:2:3522
-3154:2:3526
-3155:2:3527
-3156:2:3535
-3157:2:3540
-3158:2:3544
-3159:2:3545
-3160:2:3553
-3161:2:3554
-3162:2:3558
-3163:2:3559
-3164:2:3553
-3165:2:3554
-3166:2:3558
-3167:2:3559
-3168:2:3567
-3169:2:3574
-3170:2:3575
-3171:2:3579
-3172:2:3580
-3173:2:3587
-3174:2:3592
-3175:2:3599
-3176:2:3600
-3177:2:3599
-3178:2:3600
-3179:2:3607
-3180:2:3617
-3181:0:4029
-3182:2:2767
-3183:0:4029
-3184:2:3623
-3185:2:3632
-3186:2:3633
-3187:2:3637
-3188:2:3638
-3189:2:3642
-3190:2:3643
-3191:2:3651
-3192:2:3656
-3193:2:3660
-3194:2:3661
-3195:2:3669
-3196:2:3670
-3197:2:3674
-3198:2:3675
-3199:2:3669
-3200:2:3670
-3201:2:3674
-3202:2:3675
-3203:2:3683
-3204:2:3690
-3205:2:3691
-3206:2:3695
-3207:2:3696
-3208:2:3703
-3209:2:3708
-3210:2:3715
-3211:2:3716
-3212:2:3715
-3213:2:3716
-3214:2:3723
-3215:0:4029
-3216:2:2767
-3217:0:4029
-3218:1:671
-3219:1:674
-3220:1:675
-3221:0:4029
-3222:1:11
-3223:0:4029
-3224:2:3507
-3225:2:3516
-3226:2:3517
-3227:2:3521
-3228:2:3522
-3229:2:3526
-3230:2:3527
-3231:2:3535
-3232:2:3540
-3233:2:3544
-3234:2:3545
-3235:2:3553
-3236:2:3554
-3237:2:3558
-3238:2:3559
-3239:2:3553
-3240:2:3554
-3241:2:3558
-3242:2:3559
-3243:2:3567
-3244:2:3574
-3245:2:3575
-3246:2:3579
-3247:2:3580
-3248:2:3587
-3249:2:3592
-3250:2:3599
-3251:2:3600
-3252:2:3599
-3253:2:3600
-3254:2:3607
-3255:2:3617
-3256:0:4029
-3257:2:2767
-3258:0:4029
-3259:2:3623
-3260:2:3632
-3261:2:3633
-3262:2:3637
-3263:2:3638
-3264:2:3642
-3265:2:3643
-3266:2:3651
-3267:2:3656
-3268:2:3660
-3269:2:3661
-3270:2:3669
-3271:2:3670
-3272:2:3674
-3273:2:3675
-3274:2:3669
-3275:2:3670
-3276:2:3674
-3277:2:3675
-3278:2:3683
-3279:2:3690
-3280:2:3691
-3281:2:3695
-3282:2:3696
-3283:2:3703
-3284:2:3708
-3285:2:3715
-3286:2:3716
-3287:2:3715
-3288:2:3716
-3289:2:3723
-3290:0:4029
-3291:2:2767
-3292:0:4029
-3293:1:902
-3294:1:903
-3295:1:907
-3296:1:908
-3297:1:916
-3298:1:917
-3299:1:921
-3300:1:922
-3301:1:930
-3302:1:935
-3303:1:939
-3304:1:940
-3305:1:948
-3306:1:949
-3307:1:953
-3308:1:954
-3309:1:948
-3310:1:949
-3311:1:953
-3312:1:954
-3313:1:962
-3314:1:967
-3315:1:974
-3316:1:975
-3317:1:982
-3318:1:987
-3319:1:994
-3320:1:995
-3321:1:994
-3322:1:995
-3323:1:1002
-3324:1:1011
-3325:1:1015
-3326:0:4029
-3327:1:11
-3328:0:4029
-3329:2:3507
-3330:2:3516
-3331:2:3517
-3332:2:3521
-3333:2:3522
-3334:2:3526
-3335:2:3527
-3336:2:3535
-3337:2:3540
-3338:2:3544
-3339:2:3545
-3340:2:3553
-3341:2:3554
-3342:2:3558
-3343:2:3559
-3344:2:3553
-3345:2:3554
-3346:2:3558
-3347:2:3559
-3348:2:3567
-3349:2:3574
-3350:2:3575
-3351:2:3579
-3352:2:3580
-3353:2:3587
-3354:2:3592
-3355:2:3599
-3356:2:3600
-3357:2:3599
-3358:2:3600
-3359:2:3607
-3360:2:3617
-3361:0:4029
-3362:2:2767
-3363:0:4029
-3364:2:3623
-3365:2:3632
-3366:2:3633
-3367:2:3637
-3368:2:3638
-3369:2:3642
-3370:2:3643
-3371:2:3651
-3372:2:3656
-3373:2:3660
-3374:2:3661
-3375:2:3669
-3376:2:3670
-3377:2:3674
-3378:2:3675
-3379:2:3669
-3380:2:3670
-3381:2:3674
-3382:2:3675
-3383:2:3683
-3384:2:3690
-3385:2:3691
-3386:2:3695
-3387:2:3696
-3388:2:3703
-3389:2:3708
-3390:2:3715
-3391:2:3716
-3392:2:3715
-3393:2:3716
-3394:2:3723
-3395:0:4029
-3396:2:2767
-3397:0:4029
-3398:1:1127
-3399:0:4029
-3400:2:3507
-3401:2:3516
-3402:2:3517
-3403:2:3521
-3404:2:3522
-3405:2:3526
-3406:2:3527
-3407:2:3535
-3408:2:3540
-3409:2:3544
-3410:2:3545
-3411:2:3553
-3412:2:3554
-3413:2:3558
-3414:2:3559
-3415:2:3553
-3416:2:3554
-3417:2:3558
-3418:2:3559
-3419:2:3567
-3420:2:3574
-3421:2:3575
-3422:2:3579
-3423:2:3580
-3424:2:3587
-3425:2:3592
-3426:2:3599
-3427:2:3600
-3428:2:3599
-3429:2:3600
-3430:2:3607
-3431:2:3617
-3432:0:4029
-3433:2:2767
-3434:0:4029
-3435:2:3623
-3436:2:3632
-3437:2:3633
-3438:2:3637
-3439:2:3638
-3440:2:3642
-3441:2:3643
-3442:2:3651
-3443:2:3656
-3444:2:3660
-3445:2:3661
-3446:2:3669
-3447:2:3670
-3448:2:3674
-3449:2:3675
-3450:2:3669
-3451:2:3670
-3452:2:3674
-3453:2:3675
-3454:2:3683
-3455:2:3690
-3456:2:3691
-3457:2:3695
-3458:2:3696
-3459:2:3703
-3460:2:3708
-3461:2:3715
-3462:2:3716
-3463:2:3715
-3464:2:3716
-3465:2:3723
-3466:0:4029
-3467:2:2767
-3468:0:4029
-3469:1:2663
-3470:1:2670
-3471:1:2673
-3472:1:2674
-3473:1:2678
-3474:1:2683
-3475:1:2690
-3476:1:2691
-3477:1:2690
-3478:1:2691
-3479:1:2698
-3480:1:2702
-3481:0:4029
-3482:2:3507
-3483:2:3516
-3484:2:3517
-3485:2:3521
-3486:2:3522
-3487:2:3526
-3488:2:3527
-3489:2:3535
-3490:2:3540
-3491:2:3544
-3492:2:3545
-3493:2:3553
-3494:2:3554
-3495:2:3558
-3496:2:3559
-3497:2:3553
-3498:2:3554
-3499:2:3558
-3500:2:3559
-3501:2:3567
-3502:2:3574
-3503:2:3575
-3504:2:3579
-3505:2:3580
-3506:2:3587
-3507:2:3592
-3508:2:3599
-3509:2:3600
-3510:2:3599
-3511:2:3600
-3512:2:3607
-3513:2:3617
-3514:0:4029
-3515:2:2767
-3516:0:4029
-3517:2:3623
-3518:2:3632
-3519:2:3633
-3520:2:3637
-3521:2:3638
-3522:2:3642
-3523:2:3643
-3524:2:3651
-3525:2:3656
-3526:2:3660
-3527:2:3661
-3528:2:3669
-3529:2:3670
-3530:2:3674
-3531:2:3675
-3532:2:3669
-3533:2:3670
-3534:2:3674
-3535:2:3675
-3536:2:3683
-3537:2:3690
-3538:2:3691
-3539:2:3695
-3540:2:3696
-3541:2:3703
-3542:2:3708
-3543:2:3715
-3544:2:3716
-3545:2:3715
-3546:2:3716
-3547:2:3723
-3548:0:4029
-3549:2:2767
-3550:0:4029
-3551:1:1129
-3552:1:1130
-3553:0:4029
-3554:1:11
-3555:0:4029
-3556:2:3507
-3557:2:3516
-3558:2:3517
-3559:2:3521
-3560:2:3522
-3561:2:3526
-3562:2:3527
-3563:2:3535
-3564:2:3540
-3565:2:3544
-3566:2:3545
-3567:2:3553
-3568:2:3554
-3569:2:3558
-3570:2:3559
-3571:2:3553
-3572:2:3554
-3573:2:3558
-3574:2:3559
-3575:2:3567
-3576:2:3574
-3577:2:3575
-3578:2:3579
-3579:2:3580
-3580:2:3587
-3581:2:3592
-3582:2:3599
-3583:2:3600
-3584:2:3599
-3585:2:3600
-3586:2:3607
-3587:2:3617
-3588:0:4029
-3589:2:2767
-3590:0:4029
-3591:2:3623
-3592:2:3632
-3593:2:3633
-3594:2:3637
-3595:2:3638
-3596:2:3642
-3597:2:3643
-3598:2:3651
-3599:2:3656
-3600:2:3660
-3601:2:3661
-3602:2:3669
-3603:2:3670
-3604:2:3674
-3605:2:3675
-3606:2:3669
-3607:2:3670
-3608:2:3674
-3609:2:3675
-3610:2:3683
-3611:2:3690
-3612:2:3691
-3613:2:3695
-3614:2:3696
-3615:2:3703
-3616:2:3708
-3617:2:3715
-3618:2:3716
-3619:2:3715
-3620:2:3716
-3621:2:3723
-3622:0:4029
-3623:2:2767
-3624:0:4029
-3625:1:1131
-3626:1:1132
-3627:1:1136
-3628:1:1137
-3629:1:1145
-3630:1:1146
-3631:1:1147
-3632:1:1159
-3633:1:1164
-3634:1:1168
-3635:1:1169
-3636:1:1177
-3637:1:1178
-3638:1:1182
-3639:1:1183
-3640:1:1177
-3641:1:1178
-3642:1:1182
-3643:1:1183
-3644:1:1191
-3645:1:1196
-3646:1:1203
-3647:1:1204
-3648:1:1211
-3649:1:1216
-3650:1:1223
-3651:1:1224
-3652:1:1223
-3653:1:1224
-3654:1:1231
-3655:0:4029
-3656:1:11
-3657:0:4029
-3658:1:1242
-3659:1:1243
-3660:1:1247
-3661:1:1248
-3662:1:1256
-3663:1:1257
-3664:1:1261
-3665:1:1262
-3666:1:1270
-3667:1:1275
-3668:1:1279
-3669:1:1280
-3670:1:1288
-3671:1:1289
-3672:1:1293
-3673:1:1294
-3674:1:1288
-3675:1:1289
-3676:1:1293
-3677:1:1294
-3678:1:1302
-3679:1:1307
-3680:1:1314
-3681:1:1315
-3682:1:1322
-3683:1:1327
-3684:1:1334
-3685:1:1335
-3686:1:1334
-3687:1:1335
-3688:1:1342
-3689:1:1351
-3690:1:1355
-3691:0:4029
-3692:1:11
-3693:0:4029
-3694:1:1356
-3695:1:1360
-3696:1:1361
-3697:1:1365
-3698:1:1366
-3699:1:1374
-3700:1:1382
-3701:1:1383
-3702:1:1387
-3703:1:1391
-3704:1:1392
-3705:1:1387
-3706:1:1391
-3707:1:1392
-3708:1:1396
-3709:1:1403
-3710:1:1410
-3711:1:1411
-3712:1:1418
-3713:1:1423
-3714:1:1430
-3715:1:1431
-3716:1:1430
-3717:1:1431
-3718:1:1438
-3719:0:4029
-3720:1:11
-3721:0:4029
-3722:1:1448
-3723:1:1449
-3724:1:1453
-3725:1:1454
-3726:1:1462
-3727:1:1463
-3728:1:1467
-3729:1:1468
-3730:1:1476
-3731:1:1481
-3732:1:1485
-3733:1:1486
-3734:1:1494
-3735:1:1495
-3736:1:1499
-3737:1:1500
-3738:1:1494
-3739:1:1495
-3740:1:1499
-3741:1:1500
-3742:1:1508
-3743:1:1513
-3744:1:1520
-3745:1:1521
-3746:1:1528
-3747:1:1533
-3748:1:1540
-3749:1:1541
-3750:1:1540
-3751:1:1541
-3752:1:1548
-3753:0:4029
-3754:2:3507
-3755:2:3516
-3756:2:3517
-3757:2:3521
-3758:2:3522
-3759:2:3526
-3760:2:3527
-3761:2:3535
-3762:2:3540
-3763:2:3544
-3764:2:3545
-3765:2:3553
-3766:2:3554
-3767:2:3558
-3768:2:3559
-3769:2:3553
-3770:2:3554
-3771:2:3558
-3772:2:3559
-3773:2:3567
-3774:2:3574
-3775:2:3575
-3776:2:3579
-3777:2:3580
-3778:2:3587
-3779:2:3592
-3780:2:3599
-3781:2:3600
-3782:2:3599
-3783:2:3600
-3784:2:3607
-3785:2:3617
-3786:0:4029
-3787:2:2767
-3788:0:4029
-3789:1:11
-3790:0:4029
-3791:1:1559
-3792:1:1560
-3793:1:1564
-3794:1:1565
-3795:1:1573
-3796:1:1574
-3797:1:1578
-3798:1:1579
-3799:1:1587
-3800:1:1592
-3801:1:1596
-3802:1:1597
-3803:1:1605
-3804:1:1606
-3805:1:1610
-3806:1:1611
-3807:1:1605
-3808:1:1606
-3809:1:1610
-3810:1:1611
-3811:1:1619
-3812:1:1624
-3813:1:1631
-3814:1:1632
-3815:1:1639
-3816:1:1644
-3817:1:1651
-3818:1:1652
-3819:1:1651
-3820:1:1652
-3821:1:1659
-3822:1:1668
-3823:1:1672
-3824:0:4029
-3825:1:11
-3826:0:4029
-3827:1:1673
-3828:1:1674
-3829:1:1678
-3830:1:1679
-3831:1:1687
-3832:1:1688
-3833:1:1689
-3834:1:1701
-3835:1:1706
-3836:1:1710
-3837:1:1711
-3838:1:1719
-3839:1:1720
-3840:1:1724
-3841:1:1725
-3842:1:1719
-3843:1:1720
-3844:1:1724
-3845:1:1725
-3846:1:1733
-3847:1:1738
-3848:1:1745
-3849:1:1746
-3850:1:1753
-3851:1:1758
-3852:1:1765
-3853:1:1766
-3854:1:1765
-3855:1:1766
-3856:1:1773
-3857:0:4029
-3858:1:11
-3859:0:4029
-3860:2:3623
-3861:2:3632
-3862:2:3633
-3863:2:3637
-3864:2:3638
-3865:2:3642
-3866:2:3643
-3867:2:3651
-3868:2:3656
-3869:2:3660
-3870:2:3661
-3871:2:3669
-3872:2:3670
-3873:2:3674
-3874:2:3675
-3875:2:3669
-3876:2:3670
-3877:2:3674
-3878:2:3675
-3879:2:3683
-3880:2:3690
-3881:2:3691
-3882:2:3695
-3883:2:3696
-3884:2:3703
-3885:2:3708
-3886:2:3715
-3887:2:3716
-3888:2:3715
-3889:2:3716
-3890:2:3723
-3891:0:4029
-3892:2:2767
-3893:0:4029
-3894:1:1784
-3895:1:1785
-3896:0:4029
-3897:1:11
-3898:0:4029
-3899:1:1791
-3900:1:1792
-3901:1:1796
-3902:1:1797
-3903:1:1805
-3904:1:1806
-3905:1:1810
-3906:1:1811
-3907:1:1819
-3908:1:1824
-3909:1:1828
-3910:1:1829
-3911:1:1837
-3912:1:1838
-3913:1:1842
-3914:1:1843
-3915:1:1837
-3916:1:1838
-3917:1:1842
-3918:1:1843
-3919:1:1851
-3920:1:1856
-3921:1:1863
-3922:1:1864
-3923:1:1871
-3924:1:1876
-3925:1:1883
-3926:1:1884
-3927:1:1883
-3928:1:1884
-3929:1:1891
-3930:0:4029
-3931:1:11
-3932:0:4029
-3933:1:1902
-3934:1:1903
-3935:1:1907
-3936:1:1908
-3937:1:1916
-3938:1:1917
-3939:1:1921
-3940:1:1922
-3941:1:1930
-3942:1:1935
-3943:1:1939
-3944:1:1940
-3945:1:1948
-3946:1:1949
-3947:1:1953
-3948:1:1954
-3949:1:1948
-3950:1:1949
-3951:1:1953
-3952:1:1954
-3953:1:1962
-3954:1:1967
-3955:1:1974
-3956:1:1975
-3957:1:1982
-3958:1:1987
-3959:1:1994
-3960:1:1995
-3961:1:1994
-3962:1:1995
-3963:1:2002
-3964:1:2011
-3965:0:4029
-3966:1:11
-3967:0:4029
-3968:1:2129
-3969:1:2133
-3970:1:2134
-3971:1:2138
-3972:1:2139
-3973:1:2147
-3974:1:2155
-3975:1:2156
-3976:1:2160
-3977:1:2164
-3978:1:2165
-3979:1:2160
-3980:1:2164
-3981:1:2165
-3982:1:2169
-3983:1:2176
-3984:1:2183
-3985:1:2184
-3986:1:2191
-3987:1:2196
-3988:1:2203
-3989:1:2204
-3990:1:2203
-3991:1:2204
-3992:1:2211
-3993:0:4029
-3994:1:11
-3995:0:4029
-3996:1:2221
-3997:1:2222
-3998:1:2226
-3999:1:2227
-4000:1:2235
-4001:1:2236
-4002:1:2240
-4003:1:2241
-4004:1:2249
-4005:1:2254
-4006:1:2258
-4007:1:2259
-4008:1:2267
-4009:1:2268
-4010:1:2272
-4011:1:2273
-4012:1:2267
-4013:1:2268
-4014:1:2272
-4015:1:2273
-4016:1:2281
-4017:1:2286
-4018:1:2293
-4019:1:2294
-4020:1:2301
-4021:1:2306
-4022:1:2313
-4023:1:2314
-4024:1:2313
-4025:1:2314
-4026:1:2321
-4027:0:4029
-4028:1:11
-4029:0:4029
-4030:1:2332
-4031:0:4029
-4032:1:2706
-4033:1:2713
-4034:1:2714
-4035:1:2721
-4036:1:2726
-4037:1:2733
-4038:1:2734
-4039:1:2733
-4040:1:2734
-4041:1:2741
-4042:1:2745
-4043:0:4029
-4044:1:2334
-4045:1:2335
-4046:0:4029
-4047:1:11
-4048:0:4029
-4049:1:2336
-4050:1:2340
-4051:1:2341
-4052:1:2345
-4053:1:2349
-4054:1:2350
-4055:1:2354
-4056:1:2362
-4057:1:2363
-4058:1:2367
-4059:1:2371
-4060:1:2372
-4061:1:2367
-4062:1:2371
-4063:1:2372
-4064:1:2376
-4065:1:2383
-4066:1:2390
-4067:1:2391
-4068:1:2398
-4069:1:2403
-4070:1:2410
-4071:1:2411
-4072:1:2410
-4073:1:2411
-4074:1:2418
-4075:0:4029
-4076:1:11
-4077:0:4029
-4078:1:2428
-4079:1:2429
-4080:1:2433
-4081:1:2434
-4082:1:2442
-4083:1:2443
-4084:1:2447
-4085:1:2448
-4086:1:2456
-4087:1:2461
-4088:1:2465
-4089:1:2466
-4090:1:2474
-4091:1:2475
-4092:1:2479
-4093:1:2480
-4094:1:2474
-4095:1:2475
-4096:1:2479
-4097:1:2480
-4098:1:2488
-4099:1:2493
-4100:1:2500
-4101:1:2501
-4102:1:2508
-4103:1:2513
-4104:1:2520
-4105:1:2521
-4106:1:2520
-4107:1:2521
-4108:1:2528
-4109:0:4029
-4110:1:11
-4111:0:4029
-4112:1:2539
-4113:1:2540
-4114:1:2544
-4115:1:2545
-4116:1:2553
-4117:1:2554
-4118:1:2558
-4119:1:2559
-4120:1:2567
-4121:1:2572
-4122:1:2576
-4123:1:2577
-4124:1:2585
-4125:1:2586
-4126:1:2590
-4127:1:2591
-4128:1:2585
-4129:1:2586
-4130:1:2590
-4131:1:2591
-4132:1:2599
-4133:1:2604
-4134:1:2611
-4135:1:2612
-4136:1:2619
-4137:1:2624
-4138:1:2631
-4139:1:2632
-4140:1:2631
-4141:1:2632
-4142:1:2639
-4143:1:2648
-4144:1:2652
-4145:0:4029
-4146:1:11
-4147:0:4029
-4148:1:2653
-4149:0:4029
-4150:1:2661
-4151:0:4029
-4152:1:2749
-4153:0:4029
-4154:1:9
-4155:0:4029
-4156:1:10
-4157:0:4029
-4158:1:11
-4159:0:4029
-4160:1:12
-4161:1:13
-4162:1:17
-4163:1:18
-4164:1:26
-4165:1:27
-4166:1:28
-4167:1:40
-4168:1:45
-4169:1:49
-4170:1:50
-4171:1:58
-4172:1:59
-4173:1:63
-4174:1:64
-4175:1:58
-4176:1:59
-4177:1:63
-4178:1:64
-4179:1:72
-4180:1:77
-4181:1:84
-4182:1:85
-4183:1:92
-4184:1:97
-4185:1:104
-4186:1:105
-4187:1:104
-4188:1:105
-4189:1:112
-4190:0:4029
-4191:1:11
-4192:0:4029
-4193:1:123
-4194:1:124
-4195:0:4029
-4196:1:11
-4197:0:4029
-4198:1:130
-4199:1:131
-4200:1:135
-4201:1:136
-4202:1:144
-4203:1:145
-4204:1:149
-4205:1:150
-4206:1:158
-4207:1:163
-4208:1:167
-4209:1:168
-4210:1:176
-4211:1:177
-4212:1:181
-4213:1:182
-4214:1:176
-4215:1:177
-4216:1:181
-4217:1:182
-4218:1:190
-4219:1:195
-4220:1:202
-4221:1:203
-4222:1:210
-4223:1:215
-4224:1:222
-4225:1:223
-4226:1:222
-4227:1:223
-4228:1:230
-4229:0:4029
-4230:1:11
-4231:0:4029
-4232:1:241
-4233:1:242
-4234:1:246
-4235:1:247
-4236:1:255
-4237:1:256
-4238:1:260
-4239:1:261
-4240:1:269
-4241:1:274
-4242:1:278
-4243:1:279
-4244:1:287
-4245:1:288
-4246:1:292
-4247:1:293
-4248:1:287
-4249:1:288
-4250:1:292
-4251:1:293
-4252:1:301
-4253:1:306
-4254:1:313
-4255:1:314
-4256:1:321
-4257:1:326
-4258:1:333
-4259:1:334
-4260:1:333
-4261:1:334
-4262:1:341
-4263:1:350
-4264:0:4029
-4265:1:11
-4266:0:4029
-4267:1:468
-4268:1:472
-4269:1:473
-4270:1:477
-4271:1:478
-4272:1:486
-4273:1:494
-4274:1:495
-4275:1:499
-4276:1:503
-4277:1:504
-4278:1:499
-4279:1:503
-4280:1:504
-4281:1:508
-4282:1:515
-4283:1:522
-4284:1:523
-4285:1:530
-4286:1:535
-4287:1:542
-4288:1:543
-4289:1:542
-4290:1:543
-4291:1:550
-4292:0:4029
-4293:1:11
-4294:0:4029
-4295:1:560
-4296:1:561
-4297:1:565
-4298:1:566
-4299:1:574
-4300:1:575
-4301:1:579
-4302:1:580
-4303:1:588
-4304:1:593
-4305:1:597
-4306:1:598
-4307:1:606
-4308:1:607
-4309:1:611
-4310:1:612
-4311:1:606
-4312:1:607
-4313:1:611
-4314:1:612
-4315:1:620
-4316:1:625
-4317:1:632
-4318:1:633
-4319:1:640
-4320:1:645
-4321:1:652
-4322:1:653
-4323:1:652
-4324:1:653
-4325:1:660
-4326:0:4029
-4327:1:11
-4328:0:4029
-4329:1:671
-4330:1:674
-4331:1:675
-4332:0:4029
-4333:1:11
-4334:0:4029
-4335:1:678
-4336:1:679
-4337:1:683
-4338:1:684
-4339:1:692
-4340:1:693
-4341:1:697
-4342:1:698
-4343:1:706
-4344:1:711
-4345:1:715
-4346:1:716
-4347:1:724
-4348:1:725
-4349:1:729
-4350:1:730
-4351:1:724
-4352:1:725
-4353:1:729
-4354:1:730
-4355:1:738
-4356:1:743
-4357:1:750
-4358:1:751
-4359:1:758
-4360:1:763
-4361:1:770
-4362:1:771
-4363:1:770
-4364:1:771
-4365:1:778
-4366:0:4029
-4367:1:11
-4368:0:4029
-4369:1:902
-4370:1:903
-4371:1:907
-4372:1:908
-4373:1:916
-4374:1:917
-4375:1:921
-4376:1:922
-4377:1:930
-4378:1:935
-4379:1:939
-4380:1:940
-4381:1:948
-4382:1:949
-4383:1:953
-4384:1:954
-4385:1:948
-4386:1:949
-4387:1:953
-4388:1:954
-4389:1:962
-4390:1:967
-4391:1:974
-4392:1:975
-4393:1:982
-4394:1:987
-4395:1:994
-4396:1:995
-4397:1:994
-4398:1:995
-4399:1:1002
-4400:1:1011
-4401:1:1015
-4402:0:4029
-4403:1:11
-4404:0:4029
-4405:1:1016
-4406:1:1017
-4407:1:1021
-4408:1:1022
-4409:1:1030
-4410:1:1031
-4411:1:1032
-4412:1:1044
-4413:1:1049
-4414:1:1053
-4415:1:1054
-4416:1:1062
-4417:1:1063
-4418:1:1067
-4419:1:1068
-4420:1:1062
-4421:1:1063
-4422:1:1067
-4423:1:1068
-4424:1:1076
-4425:1:1081
-4426:1:1088
-4427:1:1089
-4428:1:1096
-4429:1:1101
-4430:1:1108
-4431:1:1109
-4432:1:1108
-4433:1:1109
-4434:1:1116
-4435:0:4029
-4436:1:11
-4437:0:4029
-4438:1:1127
-4439:0:4029
-4440:1:2663
-4441:1:2670
-4442:1:2671
-4443:1:2678
-4444:1:2683
-4445:1:2690
-4446:1:2691
-4447:1:2690
-4448:1:2691
-4449:1:2698
-4450:1:2702
-4451:0:4029
-4452:1:1129
-4453:1:1130
-4454:0:4029
-4455:1:11
-4456:0:4029
-4457:1:1131
-4458:1:1132
-4459:1:1136
-4460:1:1137
-4461:1:1145
-4462:1:1146
-4463:1:1150
-4464:1:1151
-4465:1:1159
-4466:1:1164
-4467:1:1168
-4468:1:1169
-4469:1:1177
-4470:1:1178
-4471:1:1182
-4472:1:1183
-4473:1:1177
-4474:1:1178
-4475:1:1182
-4476:1:1183
-4477:1:1191
-4478:1:1196
-4479:1:1203
-4480:1:1204
-4481:1:1211
-4482:1:1216
-4483:1:1223
-4484:1:1224
-4485:1:1223
-4486:1:1224
-4487:1:1231
-4488:0:4029
-4489:1:11
-4490:0:4029
-4491:1:1242
-4492:1:1243
-4493:1:1247
-4494:1:1248
-4495:1:1256
-4496:1:1257
-4497:1:1261
-4498:1:1262
-4499:1:1270
-4500:1:1275
-4501:1:1279
-4502:1:1280
-4503:1:1288
-4504:1:1289
-4505:1:1293
-4506:1:1294
-4507:1:1288
-4508:1:1289
-4509:1:1293
-4510:1:1294
-4511:1:1302
-4512:1:1307
-4513:1:1314
-4514:1:1315
-4515:1:1322
-4516:1:1327
-4517:1:1334
-4518:1:1335
-4519:1:1334
-4520:1:1335
-4521:1:1342
-4522:1:1351
-4523:1:1355
-4524:0:4029
-4525:1:11
-4526:0:4029
-4527:1:1356
-4528:1:1360
-4529:1:1361
-4530:1:1365
-4531:1:1366
-4532:1:1374
-4533:1:1382
-4534:1:1383
-4535:1:1387
-4536:1:1391
-4537:1:1392
-4538:1:1387
-4539:1:1391
-4540:1:1392
-4541:1:1396
-4542:1:1403
-4543:1:1410
-4544:1:1411
-4545:1:1418
-4546:1:1423
-4547:1:1430
-4548:1:1431
-4549:1:1430
-4550:1:1431
-4551:1:1438
-4552:0:4029
-4553:1:11
-4554:0:4029
-4555:1:1448
-4556:1:1449
-4557:1:1453
-4558:1:1454
-4559:1:1462
-4560:1:1463
-4561:1:1467
-4562:1:1468
-4563:1:1476
-4564:1:1481
-4565:1:1485
-4566:1:1486
-4567:1:1494
-4568:1:1495
-4569:1:1499
-4570:1:1500
-4571:1:1494
-4572:1:1495
-4573:1:1499
-4574:1:1500
-4575:1:1508
-4576:1:1513
-4577:1:1520
-4578:1:1521
-4579:1:1528
-4580:1:1533
-4581:1:1540
-4582:1:1541
-4583:1:1540
-4584:1:1541
-4585:1:1548
-4586:0:4029
-4587:1:11
-4588:0:4029
-4589:1:1559
-4590:1:1560
-4591:1:1564
-4592:1:1565
-4593:1:1573
-4594:1:1574
-4595:1:1578
-4596:1:1579
-4597:1:1587
-4598:1:1592
-4599:1:1596
-4600:1:1597
-4601:1:1605
-4602:1:1606
-4603:1:1610
-4604:1:1611
-4605:1:1605
-4606:1:1606
-4607:1:1610
-4608:1:1611
-4609:1:1619
-4610:1:1624
-4611:1:1631
-4612:1:1632
-4613:1:1639
-4614:1:1644
-4615:1:1651
-4616:1:1652
-4617:1:1651
-4618:1:1652
-4619:1:1659
-4620:1:1668
-4621:1:1672
-4622:0:4029
-4623:1:11
-4624:0:4029
-4625:1:1673
-4626:1:1674
-4627:1:1678
-4628:1:1679
-4629:1:1687
-4630:1:1696
-4631:1:1697
-4632:1:1701
-4633:1:1706
-4634:1:1710
-4635:1:1711
-4636:1:1719
-4637:1:1720
-4638:1:1724
-4639:1:1725
-4640:1:1719
-4641:1:1720
-4642:1:1724
-4643:1:1725
-4644:1:1733
-4645:1:1738
-4646:1:1745
-4647:1:1748
-4648:1:1749
-4649:1:1753
-4650:1:1758
-4651:1:1765
-4652:1:1766
-4653:1:1765
-4654:1:1766
-4655:1:1773
-4656:0:4029
-4657:1:11
-4658:0:4029
-4659:2:3507
-4660:2:3516
-4661:2:3517
-4662:2:3521
-4663:2:3522
-4664:2:3526
-4665:2:3527
-4666:2:3535
-4667:2:3540
-4668:2:3544
-4669:2:3545
-4670:2:3553
-4671:2:3554
-4672:2:3558
-4673:2:3559
-4674:2:3553
-4675:2:3554
-4676:2:3558
-4677:2:3559
-4678:2:3567
-4679:2:3574
-4680:2:3575
-4681:2:3579
-4682:2:3580
-4683:2:3587
-4684:2:3592
-4685:2:3599
-4686:2:3600
-4687:2:3599
-4688:2:3600
-4689:2:3607
-4690:2:3617
-4691:0:4029
-4692:2:2767
-4693:0:4029
-4694:2:3623
-4695:2:3632
-4696:2:3633
-4697:2:3637
-4698:2:3638
-4699:2:3642
-4700:2:3643
-4701:2:3651
-4702:2:3656
-4703:2:3660
-4704:2:3661
-4705:2:3669
-4706:2:3670
-4707:2:3674
-4708:2:3675
-4709:2:3669
-4710:2:3670
-4711:2:3674
-4712:2:3675
-4713:2:3683
-4714:2:3690
-4715:2:3691
-4716:2:3695
-4717:2:3696
-4718:2:3703
-4719:2:3708
-4720:2:3715
-4721:2:3716
-4722:2:3715
-4723:2:3716
-4724:2:3723
-4725:0:4029
-4726:2:2767
-4727:0:4029
-4728:1:1784
-4729:1:1785
-4730:0:4029
-4731:1:11
-4732:0:4029
-4733:2:3507
-4734:2:3516
-4735:2:3517
-4736:2:3521
-4737:2:3522
-4738:2:3526
-4739:2:3527
-4740:2:3535
-4741:2:3540
-4742:2:3544
-4743:2:3545
-4744:2:3553
-4745:2:3554
-4746:2:3558
-4747:2:3559
-4748:2:3553
-4749:2:3554
-4750:2:3558
-4751:2:3559
-4752:2:3567
-4753:2:3574
-4754:2:3575
-4755:2:3579
-4756:2:3580
-4757:2:3587
-4758:2:3592
-4759:2:3599
-4760:2:3600
-4761:2:3599
-4762:2:3600
-4763:2:3607
-4764:2:3617
-4765:0:4029
-4766:2:2767
-4767:0:4029
-4768:2:3623
-4769:2:3632
-4770:2:3633
-4771:2:3637
-4772:2:3638
-4773:2:3642
-4774:2:3643
-4775:2:3651
-4776:2:3656
-4777:2:3660
-4778:2:3661
-4779:2:3669
-4780:2:3670
-4781:2:3674
-4782:2:3675
-4783:2:3669
-4784:2:3670
-4785:2:3674
-4786:2:3675
-4787:2:3683
-4788:2:3690
-4789:2:3691
-4790:2:3695
-4791:2:3696
-4792:2:3703
-4793:2:3708
-4794:2:3715
-4795:2:3716
-4796:2:3715
-4797:2:3716
-4798:2:3723
-4799:0:4029
-4800:2:2767
-4801:0:4029
-4802:1:1791
-4803:1:1792
-4804:1:1796
-4805:1:1797
-4806:1:1805
-4807:1:1806
-4808:1:1807
-4809:1:1819
-4810:1:1824
-4811:1:1828
-4812:1:1829
-4813:1:1837
-4814:1:1838
-4815:1:1842
-4816:1:1843
-4817:1:1837
-4818:1:1838
-4819:1:1842
-4820:1:1843
-4821:1:1851
-4822:1:1856
-4823:1:1863
-4824:1:1864
-4825:1:1871
-4826:1:1876
-4827:1:1883
-4828:1:1884
-4829:1:1883
-4830:1:1884
-4831:1:1891
-4832:0:4029
-4833:1:11
-4834:0:4029
-4835:1:1902
-4836:1:1903
-4837:1:1907
-4838:1:1908
-4839:1:1916
-4840:1:1917
-4841:1:1921
-4842:1:1922
-4843:1:1930
-4844:1:1935
-4845:1:1939
-4846:1:1940
-4847:1:1948
-4848:1:1949
-4849:1:1953
-4850:1:1954
-4851:1:1948
-4852:1:1949
-4853:1:1953
-4854:1:1954
-4855:1:1962
-4856:1:1967
-4857:1:1974
-4858:1:1975
-4859:1:1982
-4860:1:1987
-4861:1:1994
-4862:1:1995
-4863:1:1994
-4864:1:1995
-4865:1:2002
-4866:1:2011
-4867:0:4029
-4868:1:11
-4869:0:4029
-4870:1:2129
-4871:1:2133
-4872:1:2134
-4873:1:2138
-4874:1:2139
-4875:1:2147
-4876:1:2155
-4877:1:2156
-4878:1:2160
-4879:1:2164
-4880:1:2165
-4881:1:2160
-4882:1:2164
-4883:1:2165
-4884:1:2169
-4885:1:2176
-4886:1:2183
-4887:1:2184
-4888:1:2191
-4889:1:2196
-4890:1:2203
-4891:1:2204
-4892:1:2203
-4893:1:2204
-4894:1:2211
-4895:0:4029
-4896:1:11
-4897:0:4029
-4898:2:3507
-4899:2:3516
-4900:2:3517
-4901:2:3521
-4902:2:3522
-4903:2:3526
-4904:2:3527
-4905:2:3535
-4906:2:3540
-4907:2:3544
-4908:2:3545
-4909:2:3553
-4910:2:3554
-4911:2:3558
-4912:2:3559
-4913:2:3553
-4914:2:3554
-4915:2:3558
-4916:2:3559
-4917:2:3567
-4918:2:3574
-4919:2:3575
-4920:2:3579
-4921:2:3580
-4922:2:3587
-4923:2:3592
-4924:2:3599
-4925:2:3600
-4926:2:3599
-4927:2:3600
-4928:2:3607
-4929:2:3617
-4930:0:4029
-4931:2:2767
-4932:0:4029
-4933:2:3623
-4934:2:3632
-4935:2:3633
-4936:2:3637
-4937:2:3638
-4938:2:3642
-4939:2:3643
-4940:2:3651
-4941:2:3656
-4942:2:3660
-4943:2:3661
-4944:2:3669
-4945:2:3670
-4946:2:3674
-4947:2:3675
-4948:2:3669
-4949:2:3670
-4950:2:3674
-4951:2:3675
-4952:2:3683
-4953:2:3690
-4954:2:3691
-4955:2:3695
-4956:2:3696
-4957:2:3703
-4958:2:3708
-4959:2:3715
-4960:2:3716
-4961:2:3715
-4962:2:3716
-4963:2:3723
-4964:0:4029
-4965:2:2767
-4966:0:4029
-4967:1:2221
-4968:1:2222
-4969:1:2226
-4970:1:2227
-4971:1:2235
-4972:1:2236
-4973:1:2240
-4974:1:2241
-4975:1:2249
-4976:1:2254
-4977:1:2258
-4978:1:2259
-4979:1:2267
-4980:1:2268
-4981:1:2272
-4982:1:2273
-4983:1:2267
-4984:1:2268
-4985:1:2272
-4986:1:2273
-4987:1:2281
-4988:1:2286
-4989:1:2293
-4990:1:2294
-4991:1:2301
-4992:1:2306
-4993:1:2313
-4994:1:2314
-4995:1:2313
-4996:1:2314
-4997:1:2321
diff --git a/formal-model/urcu-controldataflow/DEFINES b/formal-model/urcu-controldataflow/DEFINES
deleted file mode 100644 (file)
index a1008a6..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-
-// Poison value for freed memory
-#define POISON 1
-// Memory with correct data
-#define WINE 0
-#define SLAB_SIZE 2
-
-#define read_poison    (data_read_first[0] == POISON || data_read_second[0] == POISON)
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-//disabled
-//#define REMOTE_BARRIERS
-
-#define ARCH_ALPHA
-//#define ARCH_INTEL
-//#define ARCH_POWERPC
diff --git a/formal-model/urcu-controldataflow/Makefile b/formal-model/urcu-controldataflow/Makefile
deleted file mode 100644 (file)
index de47dff..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-controldataflow/references.txt b/formal-model/urcu-controldataflow/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-controldataflow/urcu.sh b/formal-model/urcu-controldataflow/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-controldataflow/urcu.spin b/formal-model/urcu-controldataflow/urcu.spin
deleted file mode 100644 (file)
index 54752a1..0000000
+++ /dev/null
@@ -1,1254 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory
- * and out-of-order instruction scheduling.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-#define get_readerid() (get_pid())
-
-/*
- * Produced process control and data flow. Updated after each instruction to
- * show which variables are ready. Using one-hot bit encoding per variable to
- * save state space. Used as triggers to execute the instructions having those
- * variables as input. Leaving bits active to inhibit instruction execution.
- * Scheme used to make instruction disabling and automatic dependency fall-back
- * automatic.
- */
-
-#define CONSUME_TOKENS(state, bits, notbits)                   \
-       ((!(state & (notbits))) && (state & (bits)) == (bits))
-
-#define PRODUCE_TOKENS(state, bits)                            \
-       state = state | (bits);
-
-#define CLEAR_TOKENS(state, bits)                              \
-       state = state & ~(bits)
-
-/*
- * Types of dependency :
- *
- * Data dependency
- *
- * - True dependency, Read-after-Write (RAW)
- *
- * This type of dependency happens when a statement depends on the result of a
- * previous statement. This applies to any statement which needs to read a
- * variable written by a preceding statement.
- *
- * - False dependency, Write-after-Read (WAR)
- *
- * Typically, variable renaming can ensure that this dependency goes away.
- * However, if the statements must read and then write from/to the same variable
- * in the OOO memory model, renaming may be impossible, and therefore this
- * causes a WAR dependency.
- *
- * - Output dependency, Write-after-Write (WAW)
- *
- * Two writes to the same variable in subsequent statements. Variable renaming
- * can ensure this is not needed, but can be required when writing multiple
- * times to the same OOO mem model variable.
- *
- * Control dependency
- *
- * Execution of a given instruction depends on a previous instruction evaluating
- * in a way that allows its execution. E.g. : branches.
- *
- * Useful considerations for joining dependencies after branch
- *
- * - Pre-dominance
- *
- * "We say box i dominates box j if every path (leading from input to output
- * through the diagram) which passes through box j must also pass through box
- * i. Thus box i dominates box j if box j is subordinate to box i in the
- * program."
- *
- * http://www.hipersoft.rice.edu/grads/publications/dom14.pdf
- * Other classic algorithm to calculate dominance : Lengauer-Tarjan (in gcc)
- *
- * - Post-dominance
- *
- * Just as pre-dominance, but with arcs of the data flow inverted, and input vs
- * output exchanged. Therefore, i post-dominating j ensures that every path
- * passing by j will pass by i before reaching the output.
- *
- * Prefetch and speculative execution
- *
- * If an instruction depends on the result of a previous branch, but it does not
- * have side-effects, it can be executed before the branch result is known.
- * however, it must be restarted if a core-synchronizing instruction is issued.
- * Note that instructions which depend on the speculative instruction result
- * but that have side-effects must depend on the branch completion in addition
- * to the speculatively executed instruction.
- *
- * Other considerations
- *
- * Note about "volatile" keyword dependency : The compiler will order volatile
- * accesses so they appear in the right order on a given CPU. They can be
- * reordered by the CPU instruction scheduling. This therefore cannot be
- * considered as a depencency.
- *
- * References :
- *
- * Cooper, Keith D.; & Torczon, Linda. (2005). Engineering a Compiler. Morgan
- * Kaufmann. ISBN 1-55860-698-X. 
- * Kennedy, Ken; & Allen, Randy. (2001). Optimizing Compilers for Modern
- * Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN
- * 1-55860-286-0. 
- * Muchnick, Steven S. (1997). Advanced Compiler Design and Implementation.
- * Morgan Kaufmann. ISBN 1-55860-320-4.
- */
-
-/*
- * Note about loops and nested calls
- *
- * To keep this model simple, loops expressed in the framework will behave as if
- * there was a core synchronizing instruction between loops. To see the effect
- * of loop unrolling, manually unrolling loops is required. Note that if loops
- * end or start with a core synchronizing instruction, the model is appropriate.
- * Nested calls are not supported.
- */
-
-/*
- * Only Alpha has out-of-order cache bank loads. Other architectures (intel,
- * powerpc, arm) ensure that dependent reads won't be reordered. c.f.
- * http://www.linuxjournal.com/article/8212)
- */
-#ifdef ARCH_ALPHA
-#define HAVE_OOO_CACHE_READ
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-typedef per_proc_bit {
-       bit val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bitfield {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bitfield cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/* Must consume all prior read tokens. All subsequent reads depend on it. */
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Must consume all prior write tokens. All subsequent writes depend on it. */
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-       }
-}
-
-/* Synchronization point. Must consume all prior read and write tokens. All
- * subsequent reads and writes depend on it. */
-inline smp_mb(i)
-{
-       atomic {
-               smp_wmb(i);
-               smp_rmb(i);
-       }
-}
-
-#ifdef REMOTE_BARRIERS
-
-bit reader_barrier[NR_READERS];
-
-/*
- * We cannot leave the barriers dependencies in place in REMOTE_BARRIERS mode
- * because they would add unexisting core synchronization and would therefore
- * create an incomplete model.
- * Therefore, we model the read-side memory barriers by completely disabling the
- * memory barriers and their dependencies from the read-side. One at a time
- * (different verification runs), we make a different instruction listen for
- * signals.
- */
-
-#define smp_mb_reader(i, j)
-
-/*
- * Service 0, 1 or many barrier requests.
- */
-inline smp_mb_recv(i, j)
-{
-       do
-       :: (reader_barrier[get_readerid()] == 1) ->
-               /*
-                * We choose to ignore cycles caused by writer busy-looping,
-                * waiting for the reader, sending barrier requests, and the
-                * reader always services them without continuing execution.
-                */
-progress_ignoring_mb1:
-               smp_mb(i);
-               reader_barrier[get_readerid()] = 0;
-       :: 1 ->
-               /*
-                * We choose to ignore writer's non-progress caused by the
-                * reader ignoring the writer's mb() requests.
-                */
-progress_ignoring_mb2:
-               break;
-       od;
-}
-
-#define PROGRESS_LABEL(progressid)     progress_writer_progid_##progressid:
-
-#define smp_mb_send(i, j, progressid)                                          \
-{                                                                              \
-       smp_mb(i);                                                              \
-       i = 0;                                                                  \
-       do                                                                      \
-       :: i < NR_READERS ->                                                    \
-               reader_barrier[i] = 1;                                          \
-               /*                                                              \
-                * Busy-looping waiting for reader barrier handling is of little\
-                * interest, given the reader has the ability to totally ignore \
-                * barrier requests.                                            \
-                */                                                             \
-               do                                                              \
-               :: (reader_barrier[i] == 1) ->                                  \
-PROGRESS_LABEL(progressid)                                                     \
-                       skip;                                                   \
-               :: (reader_barrier[i] == 0) -> break;                           \
-               od;                                                             \
-               i++;                                                            \
-       :: i >= NR_READERS ->                                                   \
-               break                                                           \
-       od;                                                                     \
-       smp_mb(i);                                                              \
-}
-
-#else
-
-#define smp_mb_send(i, j, progressid)  smp_mb(i)
-#define smp_mb_reader(i, j)            smp_mb(i)
-#define smp_mb_recv(i, j)
-
-#endif
-
-/* Keep in sync manually with smp_rmb, smp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* RCU data */
-DECLARE_CACHED_VAR(bit, rcu_data[SLAB_SIZE]);
-
-/* RCU pointer */
-#if (SLAB_SIZE == 2)
-DECLARE_CACHED_VAR(bit, rcu_ptr);
-bit ptr_read_first[NR_READERS];
-bit ptr_read_second[NR_READERS];
-#else
-DECLARE_CACHED_VAR(byte, rcu_ptr);
-byte ptr_read_first[NR_READERS];
-byte ptr_read_second[NR_READERS];
-#endif
-
-bit data_read_first[NR_READERS];
-bit data_read_second[NR_READERS];
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_WRITE_TO_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#ifdef HAVE_OOO_CACHE_READ
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(rcu_ptr, get_pid());
-               i = 0;
-               do
-               :: i < SLAB_SIZE ->
-                       RANDOM_CACHE_READ_FROM_MEM(rcu_data[i], get_pid());
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-#else
-               smp_rmb(i);
-#endif /* HAVE_OOO_CACHE_READ */
-       }
-}
-
-/*
- * Bit encoding, urcu_reader :
- */
-
-int _proc_urcu_reader;
-#define proc_urcu_reader       _proc_urcu_reader
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROD_A_READ               (1 << 0)
-#define READ_PROD_B_IF_TRUE            (1 << 1)
-#define READ_PROD_B_IF_FALSE           (1 << 2)
-#define READ_PROD_C_IF_TRUE_READ       (1 << 3)
-
-#define PROCEDURE_READ_LOCK(base, consumetoken, consumetoken2, producetoken)           \
-       :: CONSUME_TOKENS(proc_urcu_reader, (consumetoken | consumetoken2), READ_PROD_A_READ << base) ->        \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_A_READ << base);             \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         READ_PROD_A_READ << base,             /* RAW, pre-dominant */ \
-                         (READ_PROD_B_IF_TRUE | READ_PROD_B_IF_FALSE) << base) ->      \
-               if                                                                      \
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK)) ->                                   \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_TRUE << base);  \
-               :: else ->                                                              \
-                       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_B_IF_FALSE << base); \
-               fi;                                                                     \
-       /* IF TRUE */                                                                   \
-       :: CONSUME_TOKENS(proc_urcu_reader, consumetoken, /* prefetch */                \
-                         READ_PROD_C_IF_TRUE_READ << base) ->                          \
-               ooo_mem(i);                                                             \
-               tmp2 = READ_CACHED_VAR(urcu_gp_ctr);                                    \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_C_IF_TRUE_READ << base);     \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_TRUE                                          \
-                         | READ_PROD_C_IF_TRUE_READ    /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2);            \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ELSE */                                                                      \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         (READ_PROD_B_IF_FALSE         /* pre-dominant */              \
-                         | READ_PROD_A_READ) << base,          /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],                   \
-                                tmp + 1);                                              \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-                                                       /* IF_MERGE implies             \
-                                                        * post-dominance */            \
-       /* ENDIF */                                                                     \
-       skip
-
-/* Body of PROCEDURE_READ_LOCK */
-#define READ_PROC_READ_UNLOCK          (1 << 0)
-
-#define PROCEDURE_READ_UNLOCK(base, consumetoken, producetoken)                                \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken,                                                 \
-                         READ_PROC_READ_UNLOCK << base) ->                             \
-               ooo_mem(i);                                                             \
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);             \
-               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_UNLOCK << base);        \
-       :: CONSUME_TOKENS(proc_urcu_reader,                                             \
-                         consumetoken                                                  \
-                         | (READ_PROC_READ_UNLOCK << base),    /* WAR */               \
-                         producetoken) ->                                              \
-               ooo_mem(i);                                                             \
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp - 1);         \
-               PRODUCE_TOKENS(proc_urcu_reader, producetoken);                         \
-       skip
-
-
-#define READ_PROD_NONE                 (1 << 0)
-
-/* PROCEDURE_READ_LOCK base = << 1 : 1 to 5 */
-#define READ_LOCK_BASE                 1
-#define READ_LOCK_OUT                  (1 << 5)
-
-#define READ_PROC_FIRST_MB             (1 << 6)
-
-/* PROCEDURE_READ_LOCK (NESTED) base : << 7 : 7 to 11 */
-#define READ_LOCK_NESTED_BASE          7
-#define READ_LOCK_NESTED_OUT           (1 << 11)
-
-#define READ_PROC_READ_GEN             (1 << 12)
-#define READ_PROC_ACCESS_GEN           (1 << 13)
-
-/* PROCEDURE_READ_UNLOCK (NESTED) base = << 14 : 14 to 15 */
-#define READ_UNLOCK_NESTED_BASE                14
-#define READ_UNLOCK_NESTED_OUT         (1 << 15)
-
-#define READ_PROC_SECOND_MB            (1 << 16)
-
-/* PROCEDURE_READ_UNLOCK base = << 17 : 17 to 18 */
-#define READ_UNLOCK_BASE               17
-#define READ_UNLOCK_OUT                        (1 << 18)
-
-/* PROCEDURE_READ_LOCK_UNROLL base = << 19 : 19 to 23 */
-#define READ_LOCK_UNROLL_BASE          19
-#define READ_LOCK_OUT_UNROLL           (1 << 23)
-
-#define READ_PROC_THIRD_MB             (1 << 24)
-
-#define READ_PROC_READ_GEN_UNROLL      (1 << 25)
-#define READ_PROC_ACCESS_GEN_UNROLL    (1 << 26)
-
-#define READ_PROC_FOURTH_MB            (1 << 27)
-
-/* PROCEDURE_READ_UNLOCK_UNROLL base = << 28 : 28 to 29 */
-#define READ_UNLOCK_UNROLL_BASE                28
-#define READ_UNLOCK_OUT_UNROLL         (1 << 29)
-
-
-/* Should not include branches */
-#define READ_PROC_ALL_TOKENS           (READ_PROD_NONE                 \
-                                       | READ_LOCK_OUT                 \
-                                       | READ_PROC_FIRST_MB            \
-                                       | READ_LOCK_NESTED_OUT          \
-                                       | READ_PROC_READ_GEN            \
-                                       | READ_PROC_ACCESS_GEN          \
-                                       | READ_UNLOCK_NESTED_OUT        \
-                                       | READ_PROC_SECOND_MB           \
-                                       | READ_UNLOCK_OUT               \
-                                       | READ_LOCK_OUT_UNROLL          \
-                                       | READ_PROC_THIRD_MB            \
-                                       | READ_PROC_READ_GEN_UNROLL     \
-                                       | READ_PROC_ACCESS_GEN_UNROLL   \
-                                       | READ_PROC_FOURTH_MB           \
-                                       | READ_UNLOCK_OUT_UNROLL)
-
-/* Must clear all tokens, including branches */
-#define READ_PROC_ALL_TOKENS_CLEAR     ((1 << 30) - 1)
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROD_NONE);
-
-#ifdef NO_MB
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-#ifdef REMOTE_BARRIERS
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-       PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-#endif
-
-       do
-       :: 1 ->
-
-#ifdef REMOTE_BARRIERS
-               /*
-                * Signal-based memory barrier will only execute when the
-                * execution order appears in program order.
-                */
-               if
-               :: 1 ->
-                       atomic {
-                               if
-                               :: CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE,
-                                               READ_LOCK_OUT | READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT,
-                                               READ_LOCK_NESTED_OUT
-                                               | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT | READ_LOCK_NESTED_OUT,
-                                               READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN,
-                                               READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN,
-                                               READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT,
-                                               READ_UNLOCK_OUT
-                                               | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT,
-                                               READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL,
-                                               READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL,
-                                               READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN
-                                               | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL,
-                                               READ_UNLOCK_OUT_UNROLL)
-                                       || CONSUME_TOKENS(proc_urcu_reader, READ_PROD_NONE | READ_LOCK_OUT
-                                               | READ_LOCK_NESTED_OUT | READ_PROC_READ_GEN | READ_PROC_ACCESS_GEN | READ_UNLOCK_NESTED_OUT
-                                               | READ_UNLOCK_OUT | READ_LOCK_OUT_UNROLL
-                                               | READ_PROC_READ_GEN_UNROLL | READ_PROC_ACCESS_GEN_UNROLL | READ_UNLOCK_OUT_UNROLL,
-                                               0) ->
-                                       goto non_atomic3;
-non_atomic3_end:
-                                       skip;
-                               fi;
-                       }
-               fi;
-
-               goto non_atomic3_skip;
-non_atomic3:
-               smp_mb_recv(i, j);
-               goto non_atomic3_end;
-non_atomic3_skip:
-
-#endif /* REMOTE_BARRIERS */
-
-               atomic {
-                       if
-                       PROCEDURE_READ_LOCK(READ_LOCK_BASE, READ_PROD_NONE, 0, READ_LOCK_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_LOCK_OUT,                /* post-dominant */
-                                         READ_PROC_FIRST_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FIRST_MB);
-
-                       PROCEDURE_READ_LOCK(READ_LOCK_NESTED_BASE, READ_PROC_FIRST_MB, READ_LOCK_OUT,
-                                           READ_LOCK_NESTED_OUT);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB,           /* mb() orders reads */
-                                         READ_PROC_READ_GEN) ->
-                               ooo_mem(i);
-                               ptr_read_first[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_READ_GEN,
-                                         READ_PROC_ACCESS_GEN) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb1;
-rmb1_end:
-                               data_read_first[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_first[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN);
-
-
-                       /* Note : we remove the nested memory barrier from the read unlock
-                        * model, given it is not usually needed. The implementation has the barrier
-                        * because the performance impact added by a branch in the common case does not
-                        * justify it.
-                        */
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_NESTED_BASE,
-                                             READ_PROC_FIRST_MB
-                                             | READ_LOCK_OUT
-                                             | READ_LOCK_NESTED_OUT,
-                                             READ_UNLOCK_NESTED_OUT);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_ACCESS_GEN          /* mb() orders reads */
-                                         | READ_PROC_READ_GEN          /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT               /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT        /* post-dominant */
-                                         | READ_UNLOCK_NESTED_OUT,
-                                         READ_PROC_SECOND_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_SECOND_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_BASE,
-                                             READ_PROC_SECOND_MB       /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT);
-
-                       /* Unrolling loop : second consecutive lock */
-                       /* reading urcu_active_readers, which have been written by
-                        * READ_UNLOCK_OUT : RAW */
-                       PROCEDURE_READ_LOCK(READ_LOCK_UNROLL_BASE,
-                                           READ_PROC_SECOND_MB         /* mb() orders reads */
-                                           | READ_PROC_FIRST_MB,       /* mb() orders reads */
-                                           READ_LOCK_NESTED_OUT        /* RAW */
-                                           | READ_LOCK_OUT             /* RAW */
-                                           | READ_UNLOCK_NESTED_OUT    /* RAW */
-                                           | READ_UNLOCK_OUT,          /* RAW */
-                                           READ_LOCK_OUT_UNROLL);
-
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_THIRD_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_THIRD_MB);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_FIRST_MB            /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_READ_GEN_UNROLL) ->
-                               ooo_mem(i);
-                               ptr_read_second[get_readerid()] = READ_CACHED_VAR(rcu_ptr);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_READ_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL
-                                         | READ_PROC_FIRST_MB          /* mb() orders reads */
-                                         | READ_PROC_SECOND_MB         /* mb() orders reads */
-                                         | READ_PROC_THIRD_MB,         /* mb() orders reads */
-                                         READ_PROC_ACCESS_GEN_UNROLL) ->
-                               /* smp_read_barrier_depends */
-                               goto rmb2;
-rmb2_end:
-                               data_read_second[get_readerid()] =
-                                       READ_CACHED_VAR(rcu_data[ptr_read_second[get_readerid()]]);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_ACCESS_GEN_UNROLL);
-
-                       :: CONSUME_TOKENS(proc_urcu_reader,
-                                         READ_PROC_READ_GEN_UNROLL     /* mb() orders reads */
-                                         | READ_PROC_ACCESS_GEN_UNROLL /* mb() orders reads */
-                                         | READ_PROC_FIRST_MB          /* mb() ordered */
-                                         | READ_PROC_SECOND_MB         /* mb() ordered */
-                                         | READ_PROC_THIRD_MB          /* mb() ordered */
-                                         | READ_LOCK_OUT_UNROLL        /* post-dominant */
-                                         | READ_LOCK_NESTED_OUT
-                                         | READ_LOCK_OUT
-                                         | READ_UNLOCK_NESTED_OUT
-                                         | READ_UNLOCK_OUT,
-                                         READ_PROC_FOURTH_MB) ->
-                               smp_mb_reader(i, j);
-                               PRODUCE_TOKENS(proc_urcu_reader, READ_PROC_FOURTH_MB);
-
-                       PROCEDURE_READ_UNLOCK(READ_UNLOCK_UNROLL_BASE,
-                                             READ_PROC_FOURTH_MB       /* mb() orders reads */
-                                             | READ_PROC_THIRD_MB      /* mb() orders reads */
-                                             | READ_LOCK_OUT_UNROLL    /* RAW */
-                                             | READ_PROC_SECOND_MB     /* mb() orders reads */
-                                             | READ_PROC_FIRST_MB      /* mb() orders reads */
-                                             | READ_LOCK_NESTED_OUT    /* RAW */
-                                             | READ_LOCK_OUT           /* RAW */
-                                             | READ_UNLOCK_NESTED_OUT, /* RAW */
-                                             READ_UNLOCK_OUT_UNROLL);
-                       :: CONSUME_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS, 0) ->
-                               CLEAR_TOKENS(proc_urcu_reader, READ_PROC_ALL_TOKENS_CLEAR);
-                               break;
-                       fi;
-               }
-       od;
-       /*
-        * Dependency between consecutive loops :
-        * RAW dependency on 
-        * WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1)
-        * tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-        * between loops.
-        * _WHEN THE MB()s are in place_, they add full ordering of the
-        * generation pointer read wrt active reader count read, which ensures
-        * execution will not spill across loop execution.
-        * However, in the event mb()s are removed (execution using signal
-        * handler to promote barrier()() -> smp_mb()), nothing prevents one loop
-        * to spill its execution on other loop's execution.
-        */
-       goto end;
-rmb1:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb1_end;
-rmb2:
-#ifndef NO_RMB
-       smp_rmb(i);
-#else
-       ooo_mem(i);
-#endif
-       goto rmb2_end;
-end:
-       skip;
-}
-
-
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* no name clash please */
-#undef proc_urcu_reader
-
-
-/* Model the RCU update process. */
-
-/*
- * Bit encoding, urcu_writer :
- * Currently only supports one reader.
- */
-
-int _proc_urcu_writer;
-#define proc_urcu_writer       _proc_urcu_writer
-
-#define WRITE_PROD_NONE                        (1 << 0)
-
-#define WRITE_DATA                     (1 << 1)
-#define WRITE_PROC_WMB                 (1 << 2)
-#define WRITE_XCHG_PTR                 (1 << 3)
-
-#define WRITE_PROC_FIRST_MB            (1 << 4)
-
-/* first flip */
-#define WRITE_PROC_FIRST_READ_GP       (1 << 5)
-#define WRITE_PROC_FIRST_WRITE_GP      (1 << 6)
-#define WRITE_PROC_FIRST_WAIT          (1 << 7)
-#define WRITE_PROC_FIRST_WAIT_LOOP     (1 << 8)
-
-/* second flip */
-#define WRITE_PROC_SECOND_READ_GP      (1 << 9)
-#define WRITE_PROC_SECOND_WRITE_GP     (1 << 10)
-#define WRITE_PROC_SECOND_WAIT         (1 << 11)
-#define WRITE_PROC_SECOND_WAIT_LOOP    (1 << 12)
-
-#define WRITE_PROC_SECOND_MB           (1 << 13)
-
-#define WRITE_FREE                     (1 << 14)
-
-#define WRITE_PROC_ALL_TOKENS          (WRITE_PROD_NONE                \
-                                       | WRITE_DATA                    \
-                                       | WRITE_PROC_WMB                \
-                                       | WRITE_XCHG_PTR                \
-                                       | WRITE_PROC_FIRST_MB           \
-                                       | WRITE_PROC_FIRST_READ_GP      \
-                                       | WRITE_PROC_FIRST_WRITE_GP     \
-                                       | WRITE_PROC_FIRST_WAIT         \
-                                       | WRITE_PROC_SECOND_READ_GP     \
-                                       | WRITE_PROC_SECOND_WRITE_GP    \
-                                       | WRITE_PROC_SECOND_WAIT        \
-                                       | WRITE_PROC_SECOND_MB          \
-                                       | WRITE_FREE)
-
-#define WRITE_PROC_ALL_TOKENS_CLEAR    ((1 << 15) - 1)
-
-/*
- * Mutexes are implied around writer execution. A single writer at a time.
- */
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2, tmpa;
-       byte cur_data = 0, old_data, loop_nr = 0;
-       byte cur_gp_val = 0;    /*
-                                * Keep a local trace of the current parity so
-                                * we don't add non-existing dependencies on the global
-                                * GP update. Needed to test single flip case.
-                                */
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (loop_nr < 3) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               loop_nr = loop_nr + 1;
-
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROD_NONE);
-
-#ifdef NO_WMB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-#endif
-
-#ifdef NO_MB
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-#endif
-
-#ifdef SINGLE_FLIP
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-               /* For single flip, we need to know the current parity */
-               cur_gp_val = cur_gp_val ^ RCU_GP_CTR_BIT;
-#endif
-
-               do :: 1 ->
-               atomic {
-               if
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROD_NONE,
-                                 WRITE_DATA) ->
-                       ooo_mem(i);
-                       cur_data = (cur_data + 1) % SLAB_SIZE;
-                       WRITE_CACHED_VAR(rcu_data[cur_data], WINE);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_DATA);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA,
-                                 WRITE_PROC_WMB) ->
-                       smp_wmb(i);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_WMB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_WMB,
-                                 WRITE_XCHG_PTR) ->
-                       /* rcu_xchg_pointer() */
-                       atomic {
-                               old_data = READ_CACHED_VAR(rcu_ptr);
-                               WRITE_CACHED_VAR(rcu_ptr, cur_data);
-                       }
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_XCHG_PTR);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR,
-                                 WRITE_PROC_FIRST_MB) ->
-                       goto smp_mb_send1;
-smp_mb_send1_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_MB);
-
-               /* first flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_FIRST_READ_GP) ->
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_MB | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP,
-                                 WRITE_PROC_FIRST_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_MB,  /* can be reordered before/after flips */
-                                 WRITE_PROC_FIRST_WAIT | WRITE_PROC_FIRST_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-#ifndef SINGLE_FLIP
-                       /* In normal execution, we are always starting by
-                        * waiting for the even parity.
-                        */
-                       cur_gp_val = RCU_GP_CTR_BIT;
-#endif
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ cur_gp_val) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP   /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send2;
-smp_mb_send2_end:
-                       /* The memory barrier will invalidate the
-                        * second read done as prefetching. Note that all
-                        * instructions with side-effects depending on
-                        * WRITE_PROC_SECOND_READ_GP should also depend on
-                        * completion of this busy-waiting loop. */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_FIRST_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_FIRST_WAIT_LOOP | WRITE_PROC_FIRST_WAIT);
-
-               /* second flip */
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WAIT |     //test  /* no dependency. Could pre-fetch, no side-effect. */
-                                 WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_READ_GP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       tmpa = READ_CACHED_VAR(urcu_gp_ctr);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_READ_GP);
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT                 /* dependency on first wait, because this
-                                                                        * instruction has globally observable
-                                                                        * side-effects.
-                                                                        */
-                                 | WRITE_PROC_FIRST_MB
-                                 | WRITE_PROC_WMB
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP,
-                                 WRITE_PROC_SECOND_WRITE_GP) ->
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_gp_ctr, tmpa ^ RCU_GP_CTR_BIT);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WRITE_GP);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 WRITE_PROC_SECOND_WAIT | WRITE_PROC_SECOND_WAIT_LOOP) ->
-                       ooo_mem(i);
-                       //smp_mb(i);    /* TEST */
-                       /* ONLY WAITING FOR READER 0 */
-                       tmp2 = READ_CACHED_VAR(urcu_active_readers[0]);
-                       if
-                       :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                                       && ((tmp2 ^ 0) & RCU_GP_CTR_BIT) ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP);
-                       :: else ->
-                               PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT);
-                       fi;
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 //WRITE_PROC_FIRST_WRITE_GP | /* TEST ADDING SYNC CORE */
-                                 WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_WAIT_LOOP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,        /* can be reordered before/after flips */
-                                 0) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       goto smp_mb_send3;
-smp_mb_send3_end:
-#else
-                       ooo_mem(i);
-#endif
-                       /* This instruction loops to WRITE_PROC_SECOND_WAIT */
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_WAIT_LOOP | WRITE_PROC_SECOND_WAIT);
-
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_FIRST_READ_GP
-                                 | WRITE_PROC_SECOND_READ_GP
-                                 | WRITE_PROC_FIRST_WRITE_GP
-                                 | WRITE_PROC_SECOND_WRITE_GP
-                                 | WRITE_DATA | WRITE_PROC_WMB | WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_PROC_SECOND_MB) ->
-                       goto smp_mb_send4;
-smp_mb_send4_end:
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_PROC_SECOND_MB);
-
-               :: CONSUME_TOKENS(proc_urcu_writer,
-                                 WRITE_XCHG_PTR
-                                 | WRITE_PROC_FIRST_WAIT
-                                 | WRITE_PROC_SECOND_WAIT
-                                 | WRITE_PROC_WMB      /* No dependency on
-                                                        * WRITE_DATA because we
-                                                        * write to a
-                                                        * different location. */
-                                 | WRITE_PROC_SECOND_MB
-                                 | WRITE_PROC_FIRST_MB,
-                                 WRITE_FREE) ->
-                       WRITE_CACHED_VAR(rcu_data[old_data], POISON);
-                       PRODUCE_TOKENS(proc_urcu_writer, WRITE_FREE);
-
-               :: CONSUME_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS, 0) ->
-                       CLEAR_TOKENS(proc_urcu_writer, WRITE_PROC_ALL_TOKENS_CLEAR);
-                       break;
-               fi;
-               }
-               od;
-               /*
-                * Note : Promela model adds implicit serialization of the
-                * WRITE_FREE instruction. Normally, it would be permitted to
-                * spill on the next loop execution. Given the validation we do
-                * checks for the data entry read to be poisoned, it's ok if
-                * we do not check "late arriving" memory poisoning.
-                */
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-#ifdef READER_PROGRESS
-               /*
-                * Make sure we don't block the reader's progress.
-                */
-               smp_mb_send(i, j, 5);
-#endif
-               skip;
-       od;
-
-       /* Non-atomic parts of the loop */
-       goto end;
-smp_mb_send1:
-       smp_mb_send(i, j, 1);
-       goto smp_mb_send1_end;
-#ifndef GEN_ERROR_WRITER_PROGRESS
-smp_mb_send2:
-       smp_mb_send(i, j, 2);
-       goto smp_mb_send2_end;
-smp_mb_send3:
-       smp_mb_send(i, j, 3);
-       goto smp_mb_send3_end;
-#endif
-smp_mb_send4:
-       smp_mb_send(i, j, 4);
-       goto smp_mb_send4_end;
-end:
-       skip;
-}
-
-/* no name clash please */
-#undef proc_urcu_writer
-
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(rcu_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       ptr_read_first[i] = 1;
-                       ptr_read_second[i] = 1;
-                       data_read_first[i] = WINE;
-                       data_read_second[i] = WINE;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               INIT_CACHED_VAR(rcu_data[0], WINE, j);
-               i = 1;
-               do
-               :: i < SLAB_SIZE ->
-                       INIT_CACHED_VAR(rcu_data[i], POISON, j);
-                       i++
-               :: i >= SLAB_SIZE -> break
-               od;
-
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-controldataflow/urcu_free.ltl b/formal-model/urcu-controldataflow/urcu_free.ltl
deleted file mode 100644 (file)
index 6be1be9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (!read_poison)
diff --git a/formal-model/urcu-controldataflow/urcu_free_nested.define b/formal-model/urcu-controldataflow/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-controldataflow/urcu_free_no_mb.define b/formal-model/urcu-controldataflow/urcu_free_no_mb.define
deleted file mode 100644 (file)
index d99d793..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_MB
diff --git a/formal-model/urcu-controldataflow/urcu_free_no_rmb.define b/formal-model/urcu-controldataflow/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-controldataflow/urcu_free_no_wmb.define b/formal-model/urcu-controldataflow/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-controldataflow/urcu_free_single_flip.define b/formal-model/urcu-controldataflow/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-controldataflow/urcu_progress.ltl b/formal-model/urcu-controldataflow/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-controldataflow/urcu_progress_reader.define b/formal-model/urcu-controldataflow/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-controldataflow/urcu_progress_writer.define b/formal-model/urcu-controldataflow/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-controldataflow/urcu_progress_writer_error.define b/formal-model/urcu-controldataflow/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/DEFINES b/formal-model/urcu-nosched-model/result-signal-over-reader/DEFINES
deleted file mode 100644 (file)
index 2fcb038..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/Makefile b/formal-model/urcu-nosched-model/result-signal-over-reader/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/asserts.log b/formal-model/urcu-nosched-model/result-signal-over-reader/asserts.log
deleted file mode 100644 (file)
index d317f57..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-Depth=    4926 States=    1e+06 Transitions= 9.03e+06 Memory=   527.287        t=   5.98 R=   2e+05
-Depth=    7228 States=    2e+06 Transitions= 1.88e+07 Memory=   588.322        t=   12.9 R=   2e+05
-Depth=    7228 States=    3e+06 Transitions= 3.14e+07 Memory=   649.358        t=   21.9 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=    7228 States=    4e+06 Transitions=  4.3e+07 Memory=   741.416        t=   30.3 R=   1e+05
-Depth=    7228 States=    5e+06 Transitions= 5.65e+07 Memory=   802.451        t=   39.6 R=   1e+05
-Depth=    7228 States=    6e+06 Transitions= 6.78e+07 Memory=   863.486        t=   47.5 R=   1e+05
-Depth=    7228 States=    7e+06 Transitions= 8.05e+07 Memory=   924.522        t=   56.5 R=   1e+05
-Depth=    7228 States=    8e+06 Transitions= 9.49e+07 Memory=   985.557        t=   66.8 R=   1e+05
-Depth=    7228 States=    9e+06 Transitions= 1.06e+08 Memory=  1046.592        t=   74.7 R=   1e+05
-pan: resizing hashtable to -w24..  done
-Depth=    7228 States=    1e+07 Transitions= 1.18e+08 Memory=  1231.721        t=   84.9 R=   1e+05
-Depth=    7228 States=  1.1e+07 Transitions= 1.29e+08 Memory=  1292.756        t=   92.8 R=   1e+05
-Depth=    7228 States=  1.2e+07 Transitions=  1.4e+08 Memory=  1353.791        t=    100 R=   1e+05
-Depth=    7228 States=  1.3e+07 Transitions= 1.53e+08 Memory=  1414.826        t=    109 R=   1e+05
-Depth=    7228 States=  1.4e+07 Transitions= 1.65e+08 Memory=  1475.861        t=    117 R=   1e+05
-Depth=    7228 States=  1.5e+07 Transitions= 1.77e+08 Memory=  1536.897        t=    126 R=   1e+05
-Depth=    7228 States=  1.6e+07 Transitions= 1.89e+08 Memory=  1597.932        t=    134 R=   1e+05
-Depth=    7228 States=  1.7e+07 Transitions= 2.02e+08 Memory=  1658.967        t=    143 R=   1e+05
-Depth=    7228 States=  1.8e+07 Transitions= 2.16e+08 Memory=  1720.002        t=    153 R=   1e+05
-Depth=    7228 States=  1.9e+07 Transitions= 2.27e+08 Memory=  1781.037        t=    160 R=   1e+05
-Depth=    7228 States=    2e+07 Transitions= 2.39e+08 Memory=  1842.072        t=    169 R=   1e+05
-Depth=    7228 States=  2.1e+07 Transitions= 2.51e+08 Memory=  1903.108        t=    177 R=   1e+05
-Depth=    7228 States=  2.2e+07 Transitions= 2.62e+08 Memory=  1964.143        t=    185 R=   1e+05
-Depth=    7228 States=  2.3e+07 Transitions= 2.74e+08 Memory=  2025.178        t=    194 R=   1e+05
-Depth=    7228 States=  2.4e+07 Transitions= 2.86e+08 Memory=  2086.213        t=    203 R=   1e+05
-Depth=    7228 States=  2.5e+07 Transitions= 2.99e+08 Memory=  2147.248        t=    212 R=   1e+05
-Depth=    7228 States=  2.6e+07 Transitions=  3.1e+08 Memory=  2208.283        t=    220 R=   1e+05
-Depth=    7228 States=  2.7e+07 Transitions= 3.24e+08 Memory=  2269.318        t=    230 R=   1e+05
-Depth=    7228 States=  2.8e+07 Transitions= 3.37e+08 Memory=  2330.354        t=    239 R=   1e+05
-Depth=    7228 States=  2.9e+07 Transitions= 3.49e+08 Memory=  2391.389        t=    248 R=   1e+05
-Depth=    7228 States=    3e+07 Transitions=  3.6e+08 Memory=  2452.424        t=    256 R=   1e+05
-Depth=    7228 States=  3.1e+07 Transitions= 3.72e+08 Memory=  2513.459        t=    265 R=   1e+05
-Depth=    7228 States=  3.2e+07 Transitions= 3.83e+08 Memory=  2574.494        t=    273 R=   1e+05
-Depth=    7228 States=  3.3e+07 Transitions= 3.95e+08 Memory=  2635.529        t=    282 R=   1e+05
-Depth=    7228 States=  3.4e+07 Transitions= 4.07e+08 Memory=  2696.565        t=    291 R=   1e+05
-pan: resizing hashtable to -w26..  done
-Depth=    7228 States=  3.5e+07 Transitions=  4.2e+08 Memory=  3253.682        t=    308 R=   1e+05
-Depth=    7228 States=  3.6e+07 Transitions= 4.32e+08 Memory=  3314.717        t=    316 R=   1e+05
-Depth=    7228 States=  3.7e+07 Transitions= 4.45e+08 Memory=  3375.752        t=    325 R=   1e+05
-Depth=    7228 States=  3.8e+07 Transitions= 4.58e+08 Memory=  3436.787        t=    334 R=   1e+05
-Depth=    7228 States=  3.9e+07 Transitions= 4.71e+08 Memory=  3497.822        t=    343 R=   1e+05
-Depth=    7228 States=    4e+07 Transitions= 4.82e+08 Memory=  3558.858        t=    350 R=   1e+05
-Depth=    7228 States=  4.1e+07 Transitions= 4.94e+08 Memory=  3619.893        t=    359 R=   1e+05
-Depth=    7228 States=  4.2e+07 Transitions= 5.04e+08 Memory=  3680.928        t=    366 R=   1e+05
-Depth=    7228 States=  4.3e+07 Transitions= 5.16e+08 Memory=  3741.963        t=    374 R=   1e+05
-Depth=    7228 States=  4.4e+07 Transitions= 5.29e+08 Memory=  3802.998        t=    383 R=   1e+05
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 56 byte, depth reached 7228, errors: 0
- 44157204 states, stored
-4.8641845e+08 states, matched
-5.3057565e+08 transitions (= stored+matched)
-1.8453582e+09 atomic steps
-hash conflicts: 2.8837553e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 3537.374      equivalent memory usage for states (stored*(State-vector + overhead))
- 2843.050      actual memory usage for states (compression: 80.37%)
-               state-vector as stored = 40 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
- 3812.568      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, ".input.spin", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 61, "(1)"
-       line 417, ".input.spin", state 91, "(1)"
-       line 398, ".input.spin", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 158, "(1)"
-       line 417, ".input.spin", state 188, "(1)"
-       line 398, ".input.spin", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 256, "(1)"
-       line 417, ".input.spin", state 286, "(1)"
-       line 398, ".input.spin", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 395, "(1)"
-       line 417, ".input.spin", state 425, "(1)"
-       line 539, ".input.spin", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 398, ".input.spin", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 70, "(1)"
-       line 417, ".input.spin", state 100, "(1)"
-       line 398, ".input.spin", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 158, "(1)"
-       line 417, ".input.spin", state 188, "(1)"
-       line 398, ".input.spin", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 247, "(1)"
-       line 417, ".input.spin", state 277, "(1)"
-       line 398, ".input.spin", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 359, "(1)"
-       line 417, ".input.spin", state 389, "(1)"
-       line 613, ".input.spin", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 398, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 59, "(1)"
-       line 412, ".input.spin", state 72, "(1)"
-       line 417, ".input.spin", state 89, "(1)"
-       line 398, ".input.spin", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 153, "(1)"
-       line 412, ".input.spin", state 166, "(1)"
-       line 651, ".input.spin", state 199, "(1)"
-       line 174, ".input.spin", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 240, "(1)"
-       line 163, ".input.spin", state 248, "(1)"
-       line 167, ".input.spin", state 260, "(1)"
-       line 174, ".input.spin", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 303, "(1)"
-       line 163, ".input.spin", state 311, "(1)"
-       line 167, ".input.spin", state 323, "(1)"
-       line 174, ".input.spin", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 370, "(1)"
-       line 163, ".input.spin", state 378, "(1)"
-       line 167, ".input.spin", state 390, "(1)"
-       line 398, ".input.spin", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 449, "(1)"
-       line 412, ".input.spin", state 462, "(1)"
-       line 417, ".input.spin", state 479, "(1)"
-       line 398, ".input.spin", state 498, "(1)"
-       line 402, ".input.spin", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 554, "(1)"
-       line 417, ".input.spin", state 571, "(1)"
-       line 402, ".input.spin", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 647, "(1)"
-       line 417, ".input.spin", state 664, "(1)"
-       line 178, ".input.spin", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 710, "(1)"
-       line 163, ".input.spin", state 718, "(1)"
-       line 167, ".input.spin", state 730, "(1)"
-       line 174, ".input.spin", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 773, "(1)"
-       line 163, ".input.spin", state 781, "(1)"
-       line 167, ".input.spin", state 793, "(1)"
-       line 174, ".input.spin", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 840, "(1)"
-       line 163, ".input.spin", state 848, "(1)"
-       line 167, ".input.spin", state 860, "(1)"
-       line 398, ".input.spin", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, ".input.spin", state 884, "(1)"
-       line 398, ".input.spin", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, ".input.spin", state 885, "else"
-       line 398, ".input.spin", state 888, "(1)"
-       line 402, ".input.spin", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 898, "(1)"
-       line 402, ".input.spin", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 899, "else"
-       line 402, ".input.spin", state 902, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 400, ".input.spin", state 908, "((i<1))"
-       line 400, ".input.spin", state 908, "((i>=1))"
-       line 407, ".input.spin", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 927, "(1)"
-       line 408, ".input.spin", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 408, ".input.spin", state 928, "else"
-       line 408, ".input.spin", state 931, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 412, ".input.spin", state 940, "(1)"
-       line 412, ".input.spin", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 412, ".input.spin", state 941, "else"
-       line 412, ".input.spin", state 944, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 410, ".input.spin", state 950, "((i<1))"
-       line 410, ".input.spin", state 950, "((i>=1))"
-       line 417, ".input.spin", state 957, "(1)"
-       line 417, ".input.spin", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 417, ".input.spin", state 958, "else"
-       line 417, ".input.spin", state 961, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 402, ".input.spin", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 1040, "(1)"
-       line 417, ".input.spin", state 1057, "(1)"
-       line 402, ".input.spin", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 1130, "(1)"
-       line 417, ".input.spin", state 1147, "(1)"
-       line 398, ".input.spin", state 1166, "(1)"
-       line 402, ".input.spin", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 1222, "(1)"
-       line 417, ".input.spin", state 1239, "(1)"
-       line 402, ".input.spin", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 1315, "(1)"
-       line 417, ".input.spin", state 1332, "(1)"
-       line 178, ".input.spin", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 1378, "(1)"
-       line 163, ".input.spin", state 1386, "(1)"
-       line 167, ".input.spin", state 1398, "(1)"
-       line 174, ".input.spin", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1441, "(1)"
-       line 163, ".input.spin", state 1449, "(1)"
-       line 167, ".input.spin", state 1461, "(1)"
-       line 174, ".input.spin", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 1508, "(1)"
-       line 163, ".input.spin", state 1516, "(1)"
-       line 167, ".input.spin", state 1528, "(1)"
-       line 398, ".input.spin", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, ".input.spin", state 1552, "(1)"
-       line 398, ".input.spin", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, ".input.spin", state 1553, "else"
-       line 398, ".input.spin", state 1556, "(1)"
-       line 402, ".input.spin", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 1566, "(1)"
-       line 402, ".input.spin", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 1567, "else"
-       line 402, ".input.spin", state 1570, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 400, ".input.spin", state 1576, "((i<1))"
-       line 400, ".input.spin", state 1576, "((i>=1))"
-       line 407, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 1595, "(1)"
-       line 408, ".input.spin", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 408, ".input.spin", state 1596, "else"
-       line 408, ".input.spin", state 1599, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 412, ".input.spin", state 1608, "(1)"
-       line 412, ".input.spin", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 412, ".input.spin", state 1609, "else"
-       line 412, ".input.spin", state 1612, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 410, ".input.spin", state 1618, "((i<1))"
-       line 410, ".input.spin", state 1618, "((i>=1))"
-       line 417, ".input.spin", state 1625, "(1)"
-       line 417, ".input.spin", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 417, ".input.spin", state 1626, "else"
-       line 417, ".input.spin", state 1629, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 178, ".input.spin", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 1681, "(1)"
-       line 163, ".input.spin", state 1689, "(1)"
-       line 167, ".input.spin", state 1701, "(1)"
-       line 174, ".input.spin", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1744, "(1)"
-       line 163, ".input.spin", state 1752, "(1)"
-       line 167, ".input.spin", state 1764, "(1)"
-       line 174, ".input.spin", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 1811, "(1)"
-       line 163, ".input.spin", state 1819, "(1)"
-       line 167, ".input.spin", state 1831, "(1)"
-       line 701, ".input.spin", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 384 seconds
-pan: rate 114968.77 states/second
-pan: avg transition delay 7.2389e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/asserts.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/asserts.spin.input
deleted file mode 100644 (file)
index 2d7f62d..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/asserts.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/references.txt b/formal-model/urcu-nosched-model/result-signal-over-reader/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu.sh b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu.spin b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu.spin
deleted file mode 100644 (file)
index 2cfcb70..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.log
deleted file mode 100644 (file)
index a6ab537..0000000
+++ /dev/null
@@ -1,326 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-Depth=    6837 States=    1e+06 Transitions= 9.03e+06 Memory=   534.904        t=   7.74 R=   1e+05
-Depth=    8887 States=    2e+06 Transitions= 1.88e+07 Memory=   603.557        t=   16.6 R=   1e+05
-Depth=    8887 States=    3e+06 Transitions= 3.14e+07 Memory=   672.209        t=     28 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=    8887 States=    4e+06 Transitions= 4.33e+07 Memory=   771.885        t=   39.1 R=   1e+05
-Depth=    8887 States=    5e+06 Transitions= 5.65e+07 Memory=   840.635        t=   50.7 R=   1e+05
-Depth=    8887 States=    6e+06 Transitions= 6.79e+07 Memory=   909.287        t=     61 R=   1e+05
-Depth=    8887 States=    7e+06 Transitions= 8.08e+07 Memory=   977.940        t=   72.6 R=   1e+05
-Depth=    8887 States=    8e+06 Transitions=  9.5e+07 Memory=  1046.592        t=   85.5 R=   9e+04
-Depth=    8887 States=    9e+06 Transitions= 1.07e+08 Memory=  1115.342        t=   96.7 R=   9e+04
-pan: resizing hashtable to -w24..  done
-Depth=    8887 States=    1e+07 Transitions= 1.18e+08 Memory=  1308.088        t=    108 R=   9e+04
-Depth=    8887 States=  1.1e+07 Transitions=  1.3e+08 Memory=  1376.740        t=    119 R=   9e+04
-Depth=    8887 States=  1.2e+07 Transitions= 1.41e+08 Memory=  1445.393        t=    128 R=   9e+04
-Depth=    8887 States=  1.3e+07 Transitions= 1.51e+08 Memory=  1514.045        t=    138 R=   9e+04
-Depth=    8887 States=  1.4e+07 Transitions= 1.64e+08 Memory=  1582.795        t=    149 R=   9e+04
-Depth=    8887 States=  1.5e+07 Transitions= 1.77e+08 Memory=  1651.447        t=    160 R=   9e+04
-Depth=    8887 States=  1.6e+07 Transitions=  1.9e+08 Memory=  1720.100        t=    172 R=   9e+04
-Depth=    8887 States=  1.7e+07 Transitions= 2.02e+08 Memory=  1788.752        t=    183 R=   9e+04
-Depth=    8887 States=  1.8e+07 Transitions= 2.15e+08 Memory=  1857.502        t=    194 R=   9e+04
-Depth=    8887 States=  1.9e+07 Transitions= 2.29e+08 Memory=  1926.154        t=    207 R=   9e+04
-Depth=    8887 States=    2e+07 Transitions=  2.4e+08 Memory=  1994.807        t=    217 R=   9e+04
-Depth=    8887 States=  2.1e+07 Transitions= 2.51e+08 Memory=  2063.459        t=    227 R=   9e+04
-Depth=    8887 States=  2.2e+07 Transitions= 2.63e+08 Memory=  2132.209        t=    238 R=   9e+04
-Depth=    8887 States=  2.3e+07 Transitions= 2.74e+08 Memory=  2200.861        t=    248 R=   9e+04
-Depth=    8887 States=  2.4e+07 Transitions= 2.86e+08 Memory=  2269.514        t=    259 R=   9e+04
-Depth=    8887 States=  2.5e+07 Transitions= 2.98e+08 Memory=  2338.166        t=    270 R=   9e+04
-Depth=    8887 States=  2.6e+07 Transitions=  3.1e+08 Memory=  2406.916        t=    281 R=   9e+04
-Depth=    8887 States=  2.7e+07 Transitions= 3.24e+08 Memory=  2475.568        t=    294 R=   9e+04
-Depth=    8887 States=  2.8e+07 Transitions= 3.36e+08 Memory=  2544.221        t=    305 R=   9e+04
-Depth=    8887 States=  2.9e+07 Transitions= 3.49e+08 Memory=  2612.873        t=    317 R=   9e+04
-Depth=    8887 States=    3e+07 Transitions= 3.63e+08 Memory=  2681.526        t=    329 R=   9e+04
-Depth=    8887 States=  3.1e+07 Transitions= 3.73e+08 Memory=  2750.276        t=    339 R=   9e+04
-Depth=    8887 States=  3.2e+07 Transitions= 3.85e+08 Memory=  2818.928        t=    351 R=   9e+04
-Depth=    8887 States=  3.3e+07 Transitions= 3.97e+08 Memory=  2887.580        t=    362 R=   9e+04
-Depth=    8887 States=  3.4e+07 Transitions= 4.08e+08 Memory=  2956.233        t=    373 R=   9e+04
-pan: resizing hashtable to -w26..  done
-Depth=    8887 States=  3.5e+07 Transitions=  4.2e+08 Memory=  3520.967        t=    391 R=   9e+04
-Depth=    8887 States=  3.6e+07 Transitions= 4.32e+08 Memory=  3589.619        t=    402 R=   9e+04
-Depth=    8887 States=  3.7e+07 Transitions= 4.44e+08 Memory=  3658.272        t=    413 R=   9e+04
-Depth=    8887 States=  3.8e+07 Transitions= 4.58e+08 Memory=  3727.022        t=    425 R=   9e+04
-Depth=    8887 States=  3.9e+07 Transitions=  4.7e+08 Memory=  3795.674        t=    435 R=   9e+04
-Depth=    8887 States=    4e+07 Transitions= 4.83e+08 Memory=  3864.326        t=    447 R=   9e+04
-Depth=    8887 States=  4.1e+07 Transitions= 4.97e+08 Memory=  3932.979        t=    459 R=   9e+04
-Depth=    8887 States=  4.2e+07 Transitions= 5.07e+08 Memory=  4001.729        t=    468 R=   9e+04
-Depth=    8887 States=  4.3e+07 Transitions= 5.19e+08 Memory=  4070.381        t=    479 R=   9e+04
-Depth=    8887 States=  4.4e+07 Transitions= 5.31e+08 Memory=  4139.033        t=    489 R=   9e+04
-Depth=    8887 States=  4.5e+07 Transitions= 5.42e+08 Memory=  4207.686        t=    499 R=   9e+04
-Depth=    8887 States=  4.6e+07 Transitions= 5.54e+08 Memory=  4276.338        t=    510 R=   9e+04
-Depth=    8887 States=  4.7e+07 Transitions= 5.67e+08 Memory=  4345.088        t=    521 R=   9e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 8887, errors: 0
- 47143033 states, stored
-5.2129161e+08 states, matched
-5.6843464e+08 transitions (= stored+matched)
-1.9783052e+09 atomic steps
-hash conflicts: 3.1395137e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 4136.237      equivalent memory usage for states (stored*(State-vector + overhead))
- 3385.741      actual memory usage for states (compression: 81.86%)
-               state-vector as stored = 47 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
- 4354.854      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 61, "(1)"
-       line 417, "pan.___", state 91, "(1)"
-       line 398, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 158, "(1)"
-       line 417, "pan.___", state 188, "(1)"
-       line 398, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 256, "(1)"
-       line 417, "pan.___", state 286, "(1)"
-       line 398, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 395, "(1)"
-       line 417, "pan.___", state 425, "(1)"
-       line 539, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 398, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 70, "(1)"
-       line 417, "pan.___", state 100, "(1)"
-       line 398, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 158, "(1)"
-       line 417, "pan.___", state 188, "(1)"
-       line 398, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 247, "(1)"
-       line 417, "pan.___", state 277, "(1)"
-       line 398, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 359, "(1)"
-       line 417, "pan.___", state 389, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 59, "(1)"
-       line 412, "pan.___", state 72, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 153, "(1)"
-       line 412, "pan.___", state 166, "(1)"
-       line 651, "pan.___", state 199, "(1)"
-       line 174, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 240, "(1)"
-       line 163, "pan.___", state 248, "(1)"
-       line 167, "pan.___", state 260, "(1)"
-       line 174, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 303, "(1)"
-       line 163, "pan.___", state 311, "(1)"
-       line 167, "pan.___", state 323, "(1)"
-       line 174, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 370, "(1)"
-       line 163, "pan.___", state 378, "(1)"
-       line 167, "pan.___", state 390, "(1)"
-       line 398, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 449, "(1)"
-       line 412, "pan.___", state 462, "(1)"
-       line 417, "pan.___", state 479, "(1)"
-       line 398, "pan.___", state 498, "(1)"
-       line 402, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 554, "(1)"
-       line 417, "pan.___", state 571, "(1)"
-       line 402, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 647, "(1)"
-       line 417, "pan.___", state 664, "(1)"
-       line 178, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 710, "(1)"
-       line 163, "pan.___", state 718, "(1)"
-       line 167, "pan.___", state 730, "(1)"
-       line 174, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 773, "(1)"
-       line 163, "pan.___", state 781, "(1)"
-       line 167, "pan.___", state 793, "(1)"
-       line 174, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 840, "(1)"
-       line 163, "pan.___", state 848, "(1)"
-       line 167, "pan.___", state 860, "(1)"
-       line 398, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, "pan.___", state 884, "(1)"
-       line 398, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, "pan.___", state 885, "else"
-       line 398, "pan.___", state 888, "(1)"
-       line 402, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 899, "else"
-       line 402, "pan.___", state 902, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 400, "pan.___", state 908, "((i<1))"
-       line 400, "pan.___", state 908, "((i>=1))"
-       line 407, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 927, "(1)"
-       line 408, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 408, "pan.___", state 928, "else"
-       line 408, "pan.___", state 931, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 412, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 412, "pan.___", state 941, "else"
-       line 412, "pan.___", state 944, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 410, "pan.___", state 950, "((i<1))"
-       line 410, "pan.___", state 950, "((i>=1))"
-       line 417, "pan.___", state 957, "(1)"
-       line 417, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 417, "pan.___", state 958, "else"
-       line 417, "pan.___", state 961, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 402, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 1040, "(1)"
-       line 417, "pan.___", state 1057, "(1)"
-       line 402, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 1130, "(1)"
-       line 417, "pan.___", state 1147, "(1)"
-       line 398, "pan.___", state 1166, "(1)"
-       line 402, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 1222, "(1)"
-       line 417, "pan.___", state 1239, "(1)"
-       line 402, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 1315, "(1)"
-       line 417, "pan.___", state 1332, "(1)"
-       line 178, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 1378, "(1)"
-       line 163, "pan.___", state 1386, "(1)"
-       line 167, "pan.___", state 1398, "(1)"
-       line 174, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1441, "(1)"
-       line 163, "pan.___", state 1449, "(1)"
-       line 167, "pan.___", state 1461, "(1)"
-       line 174, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 1508, "(1)"
-       line 163, "pan.___", state 1516, "(1)"
-       line 167, "pan.___", state 1528, "(1)"
-       line 398, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, "pan.___", state 1552, "(1)"
-       line 398, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, "pan.___", state 1553, "else"
-       line 398, "pan.___", state 1556, "(1)"
-       line 402, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 1566, "(1)"
-       line 402, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 1567, "else"
-       line 402, "pan.___", state 1570, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 400, "pan.___", state 1576, "((i<1))"
-       line 400, "pan.___", state 1576, "((i>=1))"
-       line 407, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1595, "(1)"
-       line 408, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 408, "pan.___", state 1596, "else"
-       line 408, "pan.___", state 1599, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 412, "pan.___", state 1608, "(1)"
-       line 412, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 412, "pan.___", state 1609, "else"
-       line 412, "pan.___", state 1612, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 410, "pan.___", state 1618, "((i<1))"
-       line 410, "pan.___", state 1618, "((i>=1))"
-       line 417, "pan.___", state 1625, "(1)"
-       line 417, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 417, "pan.___", state 1626, "else"
-       line 417, "pan.___", state 1629, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 178, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 1681, "(1)"
-       line 163, "pan.___", state 1689, "(1)"
-       line 167, "pan.___", state 1701, "(1)"
-       line 174, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1744, "(1)"
-       line 163, "pan.___", state 1752, "(1)"
-       line 167, "pan.___", state 1764, "(1)"
-       line 174, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 1811, "(1)"
-       line 163, "pan.___", state 1819, "(1)"
-       line 167, "pan.___", state 1831, "(1)"
-       line 701, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 748, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 523 seconds
-pan: rate 90149.985 states/second
-pan: avg transition delay 9.1997e-07 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.ltl b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.spin.input
deleted file mode 100644 (file)
index 2d7f62d..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 837f3d9..0000000
+++ /dev/null
@@ -1,15043 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1180
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1181
-243:2:1185
-244:2:1186
-245:2:1194
-246:2:1195
-247:2:1199
-248:2:1200
-249:2:1194
-250:2:1195
-251:2:1196
-252:2:1208
-253:2:1213
-254:2:1217
-255:2:1218
-256:2:1225
-257:2:1226
-258:2:1237
-259:2:1238
-260:2:1239
-261:2:1237
-262:2:1238
-263:2:1239
-264:2:1250
-265:2:1255
-266:2:1256
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1268
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1270
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1271
-279:2:1275
-280:2:1276
-281:2:1284
-282:2:1285
-283:2:1289
-284:2:1290
-285:2:1284
-286:2:1285
-287:2:1289
-288:2:1290
-289:2:1298
-290:2:1303
-291:2:1307
-292:2:1308
-293:2:1315
-294:2:1316
-295:2:1327
-296:2:1328
-297:2:1329
-298:2:1327
-299:2:1328
-300:2:1329
-301:2:1340
-302:2:1345
-303:2:1346
-304:0:4365
-305:2:1358
-306:0:4365
-307:2:1454
-308:0:4365
-309:3:2528
-310:0:4365
-311:2:1455
-312:0:4365
-313:3:2529
-314:0:4365
-315:2:1652
-316:0:4365
-317:2:1653
-318:0:4365
-319:2:1657
-320:0:4365
-321:2:1660
-322:0:4365
-323:3:2528
-324:0:4365
-325:2:1665
-326:2:1669
-327:2:1670
-328:2:1678
-329:2:1679
-330:2:1683
-331:2:1684
-332:2:1678
-333:2:1679
-334:2:1680
-335:2:1692
-336:2:1697
-337:2:1701
-338:2:1702
-339:2:1709
-340:2:1710
-341:2:1721
-342:2:1722
-343:2:1723
-344:2:1721
-345:2:1722
-346:2:1723
-347:2:1734
-348:2:1739
-349:2:1740
-350:0:4365
-351:3:2529
-352:0:4365
-353:2:1752
-354:0:4365
-355:3:2528
-356:0:4365
-357:2:1754
-358:0:4365
-359:3:2529
-360:0:4365
-361:2:1755
-362:2:1759
-363:2:1760
-364:2:1768
-365:2:1769
-366:2:1773
-367:2:1774
-368:2:1768
-369:2:1769
-370:2:1773
-371:2:1774
-372:2:1782
-373:2:1787
-374:2:1791
-375:2:1792
-376:2:1799
-377:2:1800
-378:2:1811
-379:2:1812
-380:2:1813
-381:2:1811
-382:2:1812
-383:2:1813
-384:2:1824
-385:2:1829
-386:2:1830
-387:0:4365
-388:2:1842
-389:0:4365
-390:3:2528
-391:0:4365
-392:2:1844
-393:0:4365
-394:3:2529
-395:0:4365
-396:2:1845
-397:2:1849
-398:2:1850
-399:2:1858
-400:2:1859
-401:2:1863
-402:2:1864
-403:2:1858
-404:2:1859
-405:2:1863
-406:2:1864
-407:2:1872
-408:2:1877
-409:2:1881
-410:2:1882
-411:2:1889
-412:2:1890
-413:2:1901
-414:2:1902
-415:2:1903
-416:2:1901
-417:2:1902
-418:2:1903
-419:2:1914
-420:2:1919
-421:2:1920
-422:0:4365
-423:2:1932
-424:0:4365
-425:3:2528
-426:0:4365
-427:2:1934
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:1935
-432:0:4365
-433:2:1936
-434:0:4365
-435:2:2129
-436:0:4365
-437:2:2130
-438:0:4365
-439:2:2134
-440:0:4365
-441:3:2528
-442:0:4365
-443:2:2136
-444:0:4365
-445:3:2529
-446:0:4365
-447:2:2137
-448:2:2141
-449:2:2142
-450:2:2150
-451:2:2151
-452:2:2155
-453:2:2156
-454:2:2150
-455:2:2151
-456:2:2155
-457:2:2156
-458:2:2164
-459:2:2169
-460:2:2173
-461:2:2174
-462:2:2181
-463:2:2182
-464:2:2193
-465:2:2194
-466:2:2195
-467:2:2193
-468:2:2194
-469:2:2195
-470:2:2206
-471:2:2211
-472:2:2212
-473:0:4365
-474:2:2224
-475:0:4365
-476:3:2528
-477:0:4365
-478:2:2226
-479:0:4365
-480:3:2529
-481:0:4365
-482:2:1936
-483:0:4365
-484:2:2129
-485:0:4365
-486:2:2130
-487:0:4365
-488:2:2134
-489:0:4365
-490:3:2528
-491:0:4365
-492:2:2136
-493:0:4365
-494:3:2529
-495:0:4365
-496:2:2137
-497:2:2141
-498:2:2142
-499:2:2150
-500:2:2151
-501:2:2155
-502:2:2156
-503:2:2150
-504:2:2151
-505:2:2152
-506:2:2164
-507:2:2169
-508:2:2173
-509:2:2174
-510:2:2181
-511:2:2182
-512:2:2193
-513:2:2194
-514:2:2195
-515:2:2193
-516:2:2194
-517:2:2195
-518:2:2206
-519:2:2211
-520:2:2212
-521:0:4365
-522:2:2224
-523:0:4365
-524:3:2528
-525:0:4365
-526:2:2226
-527:0:4365
-528:3:2529
-529:0:4365
-530:2:2230
-531:0:4365
-532:3:2528
-533:0:4365
-534:2:2235
-535:2:2239
-536:2:2240
-537:2:2248
-538:2:2249
-539:2:2253
-540:2:2254
-541:2:2248
-542:2:2249
-543:2:2250
-544:2:2262
-545:2:2267
-546:2:2271
-547:2:2272
-548:2:2279
-549:2:2280
-550:2:2291
-551:2:2292
-552:2:2293
-553:2:2291
-554:2:2292
-555:2:2293
-556:2:2304
-557:2:2309
-558:2:2310
-559:0:4365
-560:3:2529
-561:0:4365
-562:2:2322
-563:0:4365
-564:2:1169
-565:0:4365
-566:3:2528
-567:0:4365
-568:2:1170
-569:0:4365
-570:3:2529
-571:0:4365
-572:3:2530
-573:0:4365
-574:3:2536
-575:0:4365
-576:3:2537
-577:0:4365
-578:3:2547
-579:0:4365
-580:3:2548
-581:0:4365
-582:3:2552
-583:3:2553
-584:3:2557
-585:3:2561
-586:3:2562
-587:3:2557
-588:3:2561
-589:3:2562
-590:3:2566
-591:3:2574
-592:3:2575
-593:3:2580
-594:3:2587
-595:3:2588
-596:3:2587
-597:3:2588
-598:3:2595
-599:3:2600
-600:0:4365
-601:3:2611
-602:0:4365
-603:3:2615
-604:3:2616
-605:3:2620
-606:3:2624
-607:3:2625
-608:3:2620
-609:3:2624
-610:3:2625
-611:3:2629
-612:3:2637
-613:3:2638
-614:3:2643
-615:3:2650
-616:3:2651
-617:3:2650
-618:3:2651
-619:3:2658
-620:3:2663
-621:0:4365
-622:3:2611
-623:0:4365
-624:3:2615
-625:3:2616
-626:3:2620
-627:3:2624
-628:3:2625
-629:3:2620
-630:3:2624
-631:3:2625
-632:3:2629
-633:3:2637
-634:3:2638
-635:3:2643
-636:3:2650
-637:3:2651
-638:3:2650
-639:3:2651
-640:3:2658
-641:3:2663
-642:0:4365
-643:3:2674
-644:0:4365
-645:3:2682
-646:3:2683
-647:3:2687
-648:3:2691
-649:3:2692
-650:3:2687
-651:3:2691
-652:3:2692
-653:3:2696
-654:3:2704
-655:3:2705
-656:3:2710
-657:3:2717
-658:3:2718
-659:3:2717
-660:3:2718
-661:3:2725
-662:3:2730
-663:0:4365
-664:3:2745
-665:0:4365
-666:3:2746
-667:0:4365
-668:2:1173
-669:0:4365
-670:3:2747
-671:0:4365
-672:2:1179
-673:0:4365
-674:2:1180
-675:0:4365
-676:3:2746
-677:0:4365
-678:2:1181
-679:2:1185
-680:2:1186
-681:2:1194
-682:2:1195
-683:2:1199
-684:2:1200
-685:2:1194
-686:2:1195
-687:2:1199
-688:2:1200
-689:2:1208
-690:2:1213
-691:2:1217
-692:2:1218
-693:2:1225
-694:2:1226
-695:2:1237
-696:2:1238
-697:2:1239
-698:2:1237
-699:2:1238
-700:2:1239
-701:2:1250
-702:2:1255
-703:2:1256
-704:0:4365
-705:3:2747
-706:0:4365
-707:2:1268
-708:0:4365
-709:3:2746
-710:0:4365
-711:2:1270
-712:0:4365
-713:3:2747
-714:0:4365
-715:2:1271
-716:2:1275
-717:2:1276
-718:2:1284
-719:2:1285
-720:2:1289
-721:2:1290
-722:2:1284
-723:2:1285
-724:2:1289
-725:2:1290
-726:2:1298
-727:2:1303
-728:2:1307
-729:2:1308
-730:2:1315
-731:2:1316
-732:2:1327
-733:2:1328
-734:2:1329
-735:2:1327
-736:2:1328
-737:2:1329
-738:2:1340
-739:2:1345
-740:2:1346
-741:0:4365
-742:2:1358
-743:0:4365
-744:2:1360
-745:0:4365
-746:3:2746
-747:0:4365
-748:2:1361
-749:0:4365
-750:3:2747
-751:0:4365
-752:2:1362
-753:2:1366
-754:2:1367
-755:2:1375
-756:2:1376
-757:2:1380
-758:2:1381
-759:2:1375
-760:2:1376
-761:2:1380
-762:2:1381
-763:2:1389
-764:2:1394
-765:2:1398
-766:2:1399
-767:2:1406
-768:2:1407
-769:2:1418
-770:2:1419
-771:2:1420
-772:2:1418
-773:2:1419
-774:2:1420
-775:2:1431
-776:2:1436
-777:2:1437
-778:0:4365
-779:2:1449
-780:0:4365
-781:3:2746
-782:0:4365
-783:2:1451
-784:0:4365
-785:3:2747
-786:0:4365
-787:2:1652
-788:0:4365
-789:2:1653
-790:0:4365
-791:2:1657
-792:0:4365
-793:2:1180
-794:0:4365
-795:3:2746
-796:0:4365
-797:2:1181
-798:2:1185
-799:2:1186
-800:2:1194
-801:2:1195
-802:2:1199
-803:2:1200
-804:2:1194
-805:2:1195
-806:2:1196
-807:2:1208
-808:2:1213
-809:2:1217
-810:2:1218
-811:2:1225
-812:2:1226
-813:2:1237
-814:2:1238
-815:2:1239
-816:2:1237
-817:2:1238
-818:2:1239
-819:2:1250
-820:2:1255
-821:2:1256
-822:0:4365
-823:3:2747
-824:0:4365
-825:2:1268
-826:0:4365
-827:3:2746
-828:0:4365
-829:2:1270
-830:0:4365
-831:3:2747
-832:0:4365
-833:2:1271
-834:2:1275
-835:2:1276
-836:2:1284
-837:2:1285
-838:2:1289
-839:2:1290
-840:2:1284
-841:2:1285
-842:2:1289
-843:2:1290
-844:2:1298
-845:2:1303
-846:2:1307
-847:2:1308
-848:2:1315
-849:2:1316
-850:2:1327
-851:2:1328
-852:2:1329
-853:2:1327
-854:2:1328
-855:2:1329
-856:2:1340
-857:2:1345
-858:2:1346
-859:0:4365
-860:2:1358
-861:0:4365
-862:2:1454
-863:0:4365
-864:3:2746
-865:0:4365
-866:2:1455
-867:0:4365
-868:3:2747
-869:0:4365
-870:2:1652
-871:0:4365
-872:2:1653
-873:0:4365
-874:2:1657
-875:0:4365
-876:2:1660
-877:0:4365
-878:3:2746
-879:0:4365
-880:2:1665
-881:2:1669
-882:2:1670
-883:2:1678
-884:2:1679
-885:2:1683
-886:2:1684
-887:2:1678
-888:2:1679
-889:2:1680
-890:2:1692
-891:2:1697
-892:2:1701
-893:2:1702
-894:2:1709
-895:2:1710
-896:2:1721
-897:2:1722
-898:2:1723
-899:2:1721
-900:2:1722
-901:2:1723
-902:2:1734
-903:2:1739
-904:2:1740
-905:0:4365
-906:3:2747
-907:0:4365
-908:2:1752
-909:0:4365
-910:3:2746
-911:0:4365
-912:2:1754
-913:0:4365
-914:3:2747
-915:0:4365
-916:2:1755
-917:2:1759
-918:2:1760
-919:2:1768
-920:2:1769
-921:2:1773
-922:2:1774
-923:2:1768
-924:2:1769
-925:2:1773
-926:2:1774
-927:2:1782
-928:2:1787
-929:2:1791
-930:2:1792
-931:2:1799
-932:2:1800
-933:2:1811
-934:2:1812
-935:2:1813
-936:2:1811
-937:2:1812
-938:2:1813
-939:2:1824
-940:2:1829
-941:2:1830
-942:0:4365
-943:2:1842
-944:0:4365
-945:3:2746
-946:0:4365
-947:2:1844
-948:0:4365
-949:3:2747
-950:0:4365
-951:2:1845
-952:2:1849
-953:2:1850
-954:2:1858
-955:2:1859
-956:2:1863
-957:2:1864
-958:2:1858
-959:2:1859
-960:2:1863
-961:2:1864
-962:2:1872
-963:2:1877
-964:2:1881
-965:2:1882
-966:2:1889
-967:2:1890
-968:2:1901
-969:2:1902
-970:2:1903
-971:2:1901
-972:2:1902
-973:2:1903
-974:2:1914
-975:2:1919
-976:2:1920
-977:0:4365
-978:2:1932
-979:0:4365
-980:3:2746
-981:0:4365
-982:2:1934
-983:0:4365
-984:3:2747
-985:0:4365
-986:2:1935
-987:0:4365
-988:2:1936
-989:0:4365
-990:2:2129
-991:0:4365
-992:2:2130
-993:0:4365
-994:2:2134
-995:0:4365
-996:3:2746
-997:0:4365
-998:2:2136
-999:0:4365
-1000:3:2747
-1001:0:4365
-1002:2:2137
-1003:2:2141
-1004:2:2142
-1005:2:2150
-1006:2:2151
-1007:2:2155
-1008:2:2156
-1009:2:2150
-1010:2:2151
-1011:2:2155
-1012:2:2156
-1013:2:2164
-1014:2:2169
-1015:2:2173
-1016:2:2174
-1017:2:2181
-1018:2:2182
-1019:2:2193
-1020:2:2194
-1021:2:2195
-1022:2:2193
-1023:2:2194
-1024:2:2195
-1025:2:2206
-1026:2:2211
-1027:2:2212
-1028:0:4365
-1029:2:2224
-1030:0:4365
-1031:3:2746
-1032:0:4365
-1033:2:2226
-1034:0:4365
-1035:3:2747
-1036:0:4365
-1037:2:1936
-1038:0:4365
-1039:2:2129
-1040:0:4365
-1041:2:2130
-1042:0:4365
-1043:2:2134
-1044:0:4365
-1045:3:2746
-1046:0:4365
-1047:2:2136
-1048:0:4365
-1049:3:2747
-1050:0:4365
-1051:2:2137
-1052:2:2141
-1053:2:2142
-1054:2:2150
-1055:2:2151
-1056:2:2155
-1057:2:2156
-1058:2:2150
-1059:2:2151
-1060:2:2152
-1061:2:2164
-1062:2:2169
-1063:2:2173
-1064:2:2174
-1065:2:2181
-1066:2:2182
-1067:2:2193
-1068:2:2194
-1069:2:2195
-1070:2:2193
-1071:2:2194
-1072:2:2195
-1073:2:2206
-1074:2:2211
-1075:2:2212
-1076:0:4365
-1077:2:2224
-1078:0:4365
-1079:3:2746
-1080:0:4365
-1081:2:2226
-1082:0:4365
-1083:3:2747
-1084:0:4365
-1085:2:2230
-1086:0:4365
-1087:3:2746
-1088:0:4365
-1089:2:2235
-1090:2:2239
-1091:2:2240
-1092:2:2248
-1093:2:2249
-1094:2:2253
-1095:2:2254
-1096:2:2248
-1097:2:2249
-1098:2:2250
-1099:2:2262
-1100:2:2267
-1101:2:2271
-1102:2:2272
-1103:2:2279
-1104:2:2280
-1105:2:2291
-1106:2:2292
-1107:2:2293
-1108:2:2291
-1109:2:2292
-1110:2:2293
-1111:2:2304
-1112:2:2309
-1113:2:2310
-1114:0:4365
-1115:3:2747
-1116:0:4365
-1117:2:2322
-1118:0:4365
-1119:2:1169
-1120:0:4365
-1121:3:2746
-1122:0:4365
-1123:2:1170
-1124:0:4365
-1125:3:2747
-1126:0:4365
-1127:3:2748
-1128:0:4365
-1129:3:2754
-1130:0:4365
-1131:3:2755
-1132:3:2759
-1133:3:2760
-1134:3:2768
-1135:3:2769
-1136:3:2773
-1137:3:2774
-1138:3:2768
-1139:3:2769
-1140:3:2773
-1141:3:2774
-1142:3:2782
-1143:3:2787
-1144:3:2791
-1145:3:2792
-1146:3:2799
-1147:3:2800
-1148:3:2811
-1149:3:2812
-1150:3:2813
-1151:3:2811
-1152:3:2812
-1153:3:2813
-1154:3:2824
-1155:3:2829
-1156:3:2830
-1157:0:4365
-1158:3:2842
-1159:0:4365
-1160:3:2843
-1161:0:4365
-1162:2:1173
-1163:0:4365
-1164:3:2844
-1165:0:4365
-1166:2:1179
-1167:0:4365
-1168:2:1180
-1169:0:4365
-1170:3:2843
-1171:0:4365
-1172:2:1181
-1173:2:1185
-1174:2:1186
-1175:2:1194
-1176:2:1195
-1177:2:1199
-1178:2:1200
-1179:2:1194
-1180:2:1195
-1181:2:1199
-1182:2:1200
-1183:2:1208
-1184:2:1213
-1185:2:1217
-1186:2:1218
-1187:2:1225
-1188:2:1226
-1189:2:1237
-1190:2:1238
-1191:2:1239
-1192:2:1237
-1193:2:1238
-1194:2:1239
-1195:2:1250
-1196:2:1255
-1197:2:1256
-1198:0:4365
-1199:3:2844
-1200:0:4365
-1201:2:1268
-1202:0:4365
-1203:3:2843
-1204:0:4365
-1205:2:1270
-1206:0:4365
-1207:3:2844
-1208:0:4365
-1209:2:1271
-1210:2:1275
-1211:2:1276
-1212:2:1284
-1213:2:1285
-1214:2:1289
-1215:2:1290
-1216:2:1284
-1217:2:1285
-1218:2:1289
-1219:2:1290
-1220:2:1298
-1221:2:1303
-1222:2:1307
-1223:2:1308
-1224:2:1315
-1225:2:1316
-1226:2:1327
-1227:2:1328
-1228:2:1329
-1229:2:1327
-1230:2:1328
-1231:2:1329
-1232:2:1340
-1233:2:1345
-1234:2:1346
-1235:0:4365
-1236:2:1358
-1237:0:4365
-1238:2:1360
-1239:0:4365
-1240:3:2843
-1241:0:4365
-1242:2:1361
-1243:0:4365
-1244:3:2844
-1245:0:4365
-1246:2:1362
-1247:2:1366
-1248:2:1367
-1249:2:1375
-1250:2:1376
-1251:2:1380
-1252:2:1381
-1253:2:1375
-1254:2:1376
-1255:2:1380
-1256:2:1381
-1257:2:1389
-1258:2:1394
-1259:2:1398
-1260:2:1399
-1261:2:1406
-1262:2:1407
-1263:2:1418
-1264:2:1419
-1265:2:1420
-1266:2:1418
-1267:2:1419
-1268:2:1420
-1269:2:1431
-1270:2:1436
-1271:2:1437
-1272:0:4365
-1273:2:1449
-1274:0:4365
-1275:3:2843
-1276:0:4365
-1277:2:1451
-1278:0:4365
-1279:3:2844
-1280:0:4365
-1281:2:1652
-1282:0:4365
-1283:2:1653
-1284:0:4365
-1285:2:1657
-1286:0:4365
-1287:2:1180
-1288:0:4365
-1289:3:2843
-1290:0:4365
-1291:2:1181
-1292:2:1185
-1293:2:1186
-1294:2:1194
-1295:2:1195
-1296:2:1199
-1297:2:1200
-1298:2:1194
-1299:2:1195
-1300:2:1196
-1301:2:1208
-1302:2:1213
-1303:2:1217
-1304:2:1218
-1305:2:1225
-1306:2:1226
-1307:2:1237
-1308:2:1238
-1309:2:1239
-1310:2:1237
-1311:2:1238
-1312:2:1239
-1313:2:1250
-1314:2:1255
-1315:2:1256
-1316:0:4365
-1317:3:2844
-1318:0:4365
-1319:2:1268
-1320:0:4365
-1321:3:2843
-1322:0:4365
-1323:2:1270
-1324:0:4365
-1325:3:2844
-1326:0:4365
-1327:2:1271
-1328:2:1275
-1329:2:1276
-1330:2:1284
-1331:2:1285
-1332:2:1289
-1333:2:1290
-1334:2:1284
-1335:2:1285
-1336:2:1289
-1337:2:1290
-1338:2:1298
-1339:2:1303
-1340:2:1307
-1341:2:1308
-1342:2:1315
-1343:2:1316
-1344:2:1327
-1345:2:1328
-1346:2:1329
-1347:2:1327
-1348:2:1328
-1349:2:1329
-1350:2:1340
-1351:2:1345
-1352:2:1346
-1353:0:4365
-1354:2:1358
-1355:0:4365
-1356:2:1454
-1357:0:4365
-1358:3:2843
-1359:0:4365
-1360:2:1455
-1361:0:4365
-1362:3:2844
-1363:0:4365
-1364:2:1652
-1365:0:4365
-1366:2:1653
-1367:0:4365
-1368:2:1657
-1369:0:4365
-1370:2:1660
-1371:0:4365
-1372:3:2843
-1373:0:4365
-1374:2:1665
-1375:2:1669
-1376:2:1670
-1377:2:1678
-1378:2:1679
-1379:2:1683
-1380:2:1684
-1381:2:1678
-1382:2:1679
-1383:2:1680
-1384:2:1692
-1385:2:1697
-1386:2:1701
-1387:2:1702
-1388:2:1709
-1389:2:1710
-1390:2:1721
-1391:2:1722
-1392:2:1723
-1393:2:1721
-1394:2:1722
-1395:2:1723
-1396:2:1734
-1397:2:1739
-1398:2:1740
-1399:0:4365
-1400:3:2844
-1401:0:4365
-1402:2:1752
-1403:0:4365
-1404:3:2843
-1405:0:4365
-1406:2:1754
-1407:0:4365
-1408:3:2844
-1409:0:4365
-1410:2:1755
-1411:2:1759
-1412:2:1760
-1413:2:1768
-1414:2:1769
-1415:2:1773
-1416:2:1774
-1417:2:1768
-1418:2:1769
-1419:2:1773
-1420:2:1774
-1421:2:1782
-1422:2:1787
-1423:2:1791
-1424:2:1792
-1425:2:1799
-1426:2:1800
-1427:2:1811
-1428:2:1812
-1429:2:1813
-1430:2:1811
-1431:2:1812
-1432:2:1813
-1433:2:1824
-1434:2:1829
-1435:2:1830
-1436:0:4365
-1437:2:1842
-1438:0:4365
-1439:3:2843
-1440:0:4365
-1441:2:1844
-1442:0:4365
-1443:3:2844
-1444:0:4365
-1445:2:1845
-1446:2:1849
-1447:2:1850
-1448:2:1858
-1449:2:1859
-1450:2:1863
-1451:2:1864
-1452:2:1858
-1453:2:1859
-1454:2:1863
-1455:2:1864
-1456:2:1872
-1457:2:1877
-1458:2:1881
-1459:2:1882
-1460:2:1889
-1461:2:1890
-1462:2:1901
-1463:2:1902
-1464:2:1903
-1465:2:1901
-1466:2:1902
-1467:2:1903
-1468:2:1914
-1469:2:1919
-1470:2:1920
-1471:0:4365
-1472:2:1932
-1473:0:4365
-1474:3:2843
-1475:0:4365
-1476:2:1934
-1477:0:4365
-1478:3:2844
-1479:0:4365
-1480:2:1935
-1481:0:4365
-1482:2:1936
-1483:0:4365
-1484:2:2129
-1485:0:4365
-1486:2:2130
-1487:0:4365
-1488:2:2134
-1489:0:4365
-1490:3:2843
-1491:0:4365
-1492:2:2136
-1493:0:4365
-1494:3:2844
-1495:0:4365
-1496:2:2137
-1497:2:2141
-1498:2:2142
-1499:2:2150
-1500:2:2151
-1501:2:2155
-1502:2:2156
-1503:2:2150
-1504:2:2151
-1505:2:2155
-1506:2:2156
-1507:2:2164
-1508:2:2169
-1509:2:2173
-1510:2:2174
-1511:2:2181
-1512:2:2182
-1513:2:2193
-1514:2:2194
-1515:2:2195
-1516:2:2193
-1517:2:2194
-1518:2:2195
-1519:2:2206
-1520:2:2211
-1521:2:2212
-1522:0:4365
-1523:2:2224
-1524:0:4365
-1525:3:2843
-1526:0:4365
-1527:2:2226
-1528:0:4365
-1529:3:2844
-1530:0:4365
-1531:2:1936
-1532:0:4365
-1533:2:2129
-1534:0:4365
-1535:2:2130
-1536:0:4365
-1537:2:2134
-1538:0:4365
-1539:3:2843
-1540:0:4365
-1541:2:2136
-1542:0:4365
-1543:3:2844
-1544:0:4365
-1545:2:2137
-1546:2:2141
-1547:2:2142
-1548:2:2150
-1549:2:2151
-1550:2:2155
-1551:2:2156
-1552:2:2150
-1553:2:2151
-1554:2:2152
-1555:2:2164
-1556:2:2169
-1557:2:2173
-1558:2:2174
-1559:2:2181
-1560:2:2182
-1561:2:2193
-1562:2:2194
-1563:2:2195
-1564:2:2193
-1565:2:2194
-1566:2:2195
-1567:2:2206
-1568:2:2211
-1569:2:2212
-1570:0:4365
-1571:2:2224
-1572:0:4365
-1573:3:2843
-1574:0:4365
-1575:2:2226
-1576:0:4365
-1577:3:2844
-1578:0:4365
-1579:2:2230
-1580:0:4365
-1581:3:2843
-1582:0:4365
-1583:2:2235
-1584:2:2239
-1585:2:2240
-1586:2:2248
-1587:2:2249
-1588:2:2253
-1589:2:2254
-1590:2:2248
-1591:2:2249
-1592:2:2250
-1593:2:2262
-1594:2:2267
-1595:2:2271
-1596:2:2272
-1597:2:2279
-1598:2:2280
-1599:2:2291
-1600:2:2292
-1601:2:2293
-1602:2:2291
-1603:2:2292
-1604:2:2293
-1605:2:2304
-1606:2:2309
-1607:2:2310
-1608:0:4365
-1609:3:2844
-1610:0:4365
-1611:2:2322
-1612:0:4365
-1613:2:1169
-1614:0:4365
-1615:3:2843
-1616:0:4365
-1617:2:1170
-1618:0:4365
-1619:3:2844
-1620:0:4365
-1621:3:2845
-1622:0:4365
-1623:3:2851
-1624:0:4365
-1625:3:2854
-1626:3:2855
-1627:3:2867
-1628:3:2868
-1629:3:2872
-1630:3:2873
-1631:3:2867
-1632:3:2868
-1633:3:2872
-1634:3:2873
-1635:3:2881
-1636:3:2886
-1637:3:2890
-1638:3:2891
-1639:3:2898
-1640:3:2899
-1641:3:2910
-1642:3:2911
-1643:3:2912
-1644:3:2910
-1645:3:2911
-1646:3:2912
-1647:3:2923
-1648:3:2928
-1649:3:2929
-1650:0:4365
-1651:3:2941
-1652:0:4365
-1653:3:2942
-1654:0:4365
-1655:2:1173
-1656:0:4365
-1657:3:2943
-1658:0:4365
-1659:2:1179
-1660:0:4365
-1661:2:1180
-1662:0:4365
-1663:3:2942
-1664:0:4365
-1665:2:1181
-1666:2:1185
-1667:2:1186
-1668:2:1194
-1669:2:1195
-1670:2:1199
-1671:2:1200
-1672:2:1194
-1673:2:1195
-1674:2:1199
-1675:2:1200
-1676:2:1208
-1677:2:1213
-1678:2:1217
-1679:2:1218
-1680:2:1225
-1681:2:1226
-1682:2:1237
-1683:2:1238
-1684:2:1239
-1685:2:1237
-1686:2:1238
-1687:2:1239
-1688:2:1250
-1689:2:1255
-1690:2:1256
-1691:0:4365
-1692:3:2943
-1693:0:4365
-1694:2:1268
-1695:0:4365
-1696:3:2942
-1697:0:4365
-1698:2:1270
-1699:0:4365
-1700:3:2943
-1701:0:4365
-1702:2:1271
-1703:2:1275
-1704:2:1276
-1705:2:1284
-1706:2:1285
-1707:2:1289
-1708:2:1290
-1709:2:1284
-1710:2:1285
-1711:2:1289
-1712:2:1290
-1713:2:1298
-1714:2:1303
-1715:2:1307
-1716:2:1308
-1717:2:1315
-1718:2:1316
-1719:2:1327
-1720:2:1328
-1721:2:1329
-1722:2:1327
-1723:2:1328
-1724:2:1329
-1725:2:1340
-1726:2:1345
-1727:2:1346
-1728:0:4365
-1729:2:1358
-1730:0:4365
-1731:2:1360
-1732:0:4365
-1733:3:2942
-1734:0:4365
-1735:2:1361
-1736:0:4365
-1737:3:2943
-1738:0:4365
-1739:2:1362
-1740:2:1366
-1741:2:1367
-1742:2:1375
-1743:2:1376
-1744:2:1380
-1745:2:1381
-1746:2:1375
-1747:2:1376
-1748:2:1380
-1749:2:1381
-1750:2:1389
-1751:2:1394
-1752:2:1398
-1753:2:1399
-1754:2:1406
-1755:2:1407
-1756:2:1418
-1757:2:1419
-1758:2:1420
-1759:2:1418
-1760:2:1419
-1761:2:1420
-1762:2:1431
-1763:2:1436
-1764:2:1437
-1765:0:4365
-1766:2:1449
-1767:0:4365
-1768:3:2942
-1769:0:4365
-1770:2:1451
-1771:0:4365
-1772:3:2943
-1773:0:4365
-1774:2:1652
-1775:0:4365
-1776:2:1653
-1777:0:4365
-1778:2:1657
-1779:0:4365
-1780:2:1180
-1781:0:4365
-1782:3:2942
-1783:0:4365
-1784:2:1181
-1785:2:1185
-1786:2:1186
-1787:2:1194
-1788:2:1195
-1789:2:1199
-1790:2:1200
-1791:2:1194
-1792:2:1195
-1793:2:1196
-1794:2:1208
-1795:2:1213
-1796:2:1217
-1797:2:1218
-1798:2:1225
-1799:2:1226
-1800:2:1237
-1801:2:1238
-1802:2:1239
-1803:2:1237
-1804:2:1238
-1805:2:1239
-1806:2:1250
-1807:2:1255
-1808:2:1256
-1809:0:4365
-1810:3:2943
-1811:0:4365
-1812:2:1268
-1813:0:4365
-1814:3:2942
-1815:0:4365
-1816:2:1270
-1817:0:4365
-1818:3:2943
-1819:0:4365
-1820:2:1271
-1821:2:1275
-1822:2:1276
-1823:2:1284
-1824:2:1285
-1825:2:1289
-1826:2:1290
-1827:2:1284
-1828:2:1285
-1829:2:1289
-1830:2:1290
-1831:2:1298
-1832:2:1303
-1833:2:1307
-1834:2:1308
-1835:2:1315
-1836:2:1316
-1837:2:1327
-1838:2:1328
-1839:2:1329
-1840:2:1327
-1841:2:1328
-1842:2:1329
-1843:2:1340
-1844:2:1345
-1845:2:1346
-1846:0:4365
-1847:2:1358
-1848:0:4365
-1849:2:1454
-1850:0:4365
-1851:3:2942
-1852:0:4365
-1853:2:1455
-1854:0:4365
-1855:3:2943
-1856:0:4365
-1857:2:1652
-1858:0:4365
-1859:2:1653
-1860:0:4365
-1861:2:1657
-1862:0:4365
-1863:2:1660
-1864:0:4365
-1865:3:2942
-1866:0:4365
-1867:2:1665
-1868:2:1669
-1869:2:1670
-1870:2:1678
-1871:2:1679
-1872:2:1683
-1873:2:1684
-1874:2:1678
-1875:2:1679
-1876:2:1680
-1877:2:1692
-1878:2:1697
-1879:2:1701
-1880:2:1702
-1881:2:1709
-1882:2:1710
-1883:2:1721
-1884:2:1722
-1885:2:1723
-1886:2:1721
-1887:2:1722
-1888:2:1723
-1889:2:1734
-1890:2:1739
-1891:2:1740
-1892:0:4365
-1893:3:2943
-1894:0:4365
-1895:2:1752
-1896:0:4365
-1897:3:2942
-1898:0:4365
-1899:2:1754
-1900:0:4365
-1901:3:2943
-1902:0:4365
-1903:2:1755
-1904:2:1759
-1905:2:1760
-1906:2:1768
-1907:2:1769
-1908:2:1773
-1909:2:1774
-1910:2:1768
-1911:2:1769
-1912:2:1773
-1913:2:1774
-1914:2:1782
-1915:2:1787
-1916:2:1791
-1917:2:1792
-1918:2:1799
-1919:2:1800
-1920:2:1811
-1921:2:1812
-1922:2:1813
-1923:2:1811
-1924:2:1812
-1925:2:1813
-1926:2:1824
-1927:2:1829
-1928:2:1830
-1929:0:4365
-1930:2:1842
-1931:0:4365
-1932:3:2942
-1933:0:4365
-1934:2:1844
-1935:0:4365
-1936:3:2943
-1937:0:4365
-1938:2:1845
-1939:2:1849
-1940:2:1850
-1941:2:1858
-1942:2:1859
-1943:2:1863
-1944:2:1864
-1945:2:1858
-1946:2:1859
-1947:2:1863
-1948:2:1864
-1949:2:1872
-1950:2:1877
-1951:2:1881
-1952:2:1882
-1953:2:1889
-1954:2:1890
-1955:2:1901
-1956:2:1902
-1957:2:1903
-1958:2:1901
-1959:2:1902
-1960:2:1903
-1961:2:1914
-1962:2:1919
-1963:2:1920
-1964:0:4365
-1965:2:1932
-1966:0:4365
-1967:3:2942
-1968:0:4365
-1969:2:1934
-1970:0:4365
-1971:3:2943
-1972:0:4365
-1973:2:1935
-1974:0:4365
-1975:2:1936
-1976:0:4365
-1977:2:2129
-1978:0:4365
-1979:2:2130
-1980:0:4365
-1981:2:2134
-1982:0:4365
-1983:3:2942
-1984:0:4365
-1985:2:2136
-1986:0:4365
-1987:3:2943
-1988:0:4365
-1989:2:2137
-1990:2:2141
-1991:2:2142
-1992:2:2150
-1993:2:2151
-1994:2:2155
-1995:2:2156
-1996:2:2150
-1997:2:2151
-1998:2:2155
-1999:2:2156
-2000:2:2164
-2001:2:2169
-2002:2:2173
-2003:2:2174
-2004:2:2181
-2005:2:2182
-2006:2:2193
-2007:2:2194
-2008:2:2195
-2009:2:2193
-2010:2:2194
-2011:2:2195
-2012:2:2206
-2013:2:2211
-2014:2:2212
-2015:0:4365
-2016:2:2224
-2017:0:4365
-2018:3:2942
-2019:0:4365
-2020:2:2226
-2021:0:4365
-2022:3:2943
-2023:0:4365
-2024:2:1936
-2025:0:4365
-2026:2:2129
-2027:0:4365
-2028:2:2130
-2029:0:4365
-2030:2:2134
-2031:0:4365
-2032:3:2942
-2033:0:4365
-2034:2:2136
-2035:0:4365
-2036:3:2943
-2037:0:4365
-2038:2:2137
-2039:2:2141
-2040:2:2142
-2041:2:2150
-2042:2:2151
-2043:2:2155
-2044:2:2156
-2045:2:2150
-2046:2:2151
-2047:2:2152
-2048:2:2164
-2049:2:2169
-2050:2:2173
-2051:2:2174
-2052:2:2181
-2053:2:2182
-2054:2:2193
-2055:2:2194
-2056:2:2195
-2057:2:2193
-2058:2:2194
-2059:2:2195
-2060:2:2206
-2061:2:2211
-2062:2:2212
-2063:0:4365
-2064:2:2224
-2065:0:4365
-2066:3:2942
-2067:0:4365
-2068:2:2226
-2069:0:4365
-2070:3:2943
-2071:0:4365
-2072:2:2230
-2073:0:4365
-2074:3:2942
-2075:0:4365
-2076:2:2235
-2077:2:2239
-2078:2:2240
-2079:2:2248
-2080:2:2249
-2081:2:2253
-2082:2:2254
-2083:2:2248
-2084:2:2249
-2085:2:2250
-2086:2:2262
-2087:2:2267
-2088:2:2271
-2089:2:2272
-2090:2:2279
-2091:2:2280
-2092:2:2291
-2093:2:2292
-2094:2:2293
-2095:2:2291
-2096:2:2292
-2097:2:2293
-2098:2:2304
-2099:2:2309
-2100:2:2310
-2101:0:4365
-2102:3:2943
-2103:0:4365
-2104:2:2322
-2105:0:4365
-2106:2:1169
-2107:0:4365
-2108:3:2942
-2109:0:4365
-2110:2:1170
-2111:0:4365
-2112:3:2943
-2113:0:4365
-2114:3:2944
-2115:0:4365
-2116:3:2950
-2117:0:4365
-2118:3:2951
-2119:0:4365
-2120:3:2952
-2121:0:4365
-2122:3:2953
-2123:0:4365
-2124:3:2954
-2125:3:2958
-2126:3:2959
-2127:3:2967
-2128:3:2968
-2129:3:2972
-2130:3:2973
-2131:3:2967
-2132:3:2968
-2133:3:2972
-2134:3:2973
-2135:3:2981
-2136:3:2986
-2137:3:2990
-2138:3:2991
-2139:3:2998
-2140:3:2999
-2141:3:3010
-2142:3:3011
-2143:3:3012
-2144:3:3010
-2145:3:3011
-2146:3:3012
-2147:3:3023
-2148:3:3028
-2149:3:3029
-2150:0:4365
-2151:3:3041
-2152:0:4365
-2153:3:3042
-2154:0:4365
-2155:2:1173
-2156:0:4365
-2157:3:3043
-2158:0:4365
-2159:2:1179
-2160:0:4365
-2161:2:1180
-2162:0:4365
-2163:3:3042
-2164:0:4365
-2165:2:1181
-2166:2:1185
-2167:2:1186
-2168:2:1194
-2169:2:1195
-2170:2:1199
-2171:2:1200
-2172:2:1194
-2173:2:1195
-2174:2:1199
-2175:2:1200
-2176:2:1208
-2177:2:1213
-2178:2:1217
-2179:2:1218
-2180:2:1225
-2181:2:1226
-2182:2:1237
-2183:2:1238
-2184:2:1239
-2185:2:1237
-2186:2:1238
-2187:2:1239
-2188:2:1250
-2189:2:1255
-2190:2:1256
-2191:0:4365
-2192:3:3043
-2193:0:4365
-2194:2:1268
-2195:0:4365
-2196:3:3042
-2197:0:4365
-2198:2:1270
-2199:0:4365
-2200:3:3043
-2201:0:4365
-2202:2:1271
-2203:2:1275
-2204:2:1276
-2205:2:1284
-2206:2:1285
-2207:2:1289
-2208:2:1290
-2209:2:1284
-2210:2:1285
-2211:2:1289
-2212:2:1290
-2213:2:1298
-2214:2:1303
-2215:2:1307
-2216:2:1308
-2217:2:1315
-2218:2:1316
-2219:2:1327
-2220:2:1328
-2221:2:1329
-2222:2:1327
-2223:2:1328
-2224:2:1329
-2225:2:1340
-2226:2:1345
-2227:2:1346
-2228:0:4365
-2229:2:1358
-2230:0:4365
-2231:2:1360
-2232:0:4365
-2233:3:3042
-2234:0:4365
-2235:2:1361
-2236:0:4365
-2237:3:3043
-2238:0:4365
-2239:2:1362
-2240:2:1366
-2241:2:1367
-2242:2:1375
-2243:2:1376
-2244:2:1380
-2245:2:1381
-2246:2:1375
-2247:2:1376
-2248:2:1380
-2249:2:1381
-2250:2:1389
-2251:2:1394
-2252:2:1398
-2253:2:1399
-2254:2:1406
-2255:2:1407
-2256:2:1418
-2257:2:1419
-2258:2:1420
-2259:2:1418
-2260:2:1419
-2261:2:1420
-2262:2:1431
-2263:2:1436
-2264:2:1437
-2265:0:4365
-2266:2:1449
-2267:0:4365
-2268:3:3042
-2269:0:4365
-2270:2:1451
-2271:0:4365
-2272:3:3043
-2273:0:4365
-2274:2:1652
-2275:0:4365
-2276:2:1653
-2277:0:4365
-2278:2:1657
-2279:0:4365
-2280:2:1180
-2281:0:4365
-2282:3:3042
-2283:0:4365
-2284:2:1181
-2285:2:1185
-2286:2:1186
-2287:2:1194
-2288:2:1195
-2289:2:1199
-2290:2:1200
-2291:2:1194
-2292:2:1195
-2293:2:1196
-2294:2:1208
-2295:2:1213
-2296:2:1217
-2297:2:1218
-2298:2:1225
-2299:2:1226
-2300:2:1237
-2301:2:1238
-2302:2:1239
-2303:2:1237
-2304:2:1238
-2305:2:1239
-2306:2:1250
-2307:2:1255
-2308:2:1256
-2309:0:4365
-2310:3:3043
-2311:0:4365
-2312:2:1268
-2313:0:4365
-2314:3:3042
-2315:0:4365
-2316:2:1270
-2317:0:4365
-2318:3:3043
-2319:0:4365
-2320:2:1271
-2321:2:1275
-2322:2:1276
-2323:2:1284
-2324:2:1285
-2325:2:1289
-2326:2:1290
-2327:2:1284
-2328:2:1285
-2329:2:1289
-2330:2:1290
-2331:2:1298
-2332:2:1303
-2333:2:1307
-2334:2:1308
-2335:2:1315
-2336:2:1316
-2337:2:1327
-2338:2:1328
-2339:2:1329
-2340:2:1327
-2341:2:1328
-2342:2:1329
-2343:2:1340
-2344:2:1345
-2345:2:1346
-2346:0:4365
-2347:2:1358
-2348:0:4365
-2349:2:1454
-2350:0:4365
-2351:3:3042
-2352:0:4365
-2353:2:1455
-2354:0:4365
-2355:3:3043
-2356:0:4365
-2357:2:1652
-2358:0:4365
-2359:2:1653
-2360:0:4365
-2361:2:1657
-2362:0:4365
-2363:2:1660
-2364:0:4365
-2365:3:3042
-2366:0:4365
-2367:2:1665
-2368:2:1669
-2369:2:1670
-2370:2:1678
-2371:2:1679
-2372:2:1683
-2373:2:1684
-2374:2:1678
-2375:2:1679
-2376:2:1680
-2377:2:1692
-2378:2:1697
-2379:2:1701
-2380:2:1702
-2381:2:1709
-2382:2:1710
-2383:2:1721
-2384:2:1722
-2385:2:1723
-2386:2:1721
-2387:2:1722
-2388:2:1723
-2389:2:1734
-2390:2:1739
-2391:2:1740
-2392:0:4365
-2393:3:3043
-2394:0:4365
-2395:2:1752
-2396:0:4365
-2397:3:3042
-2398:0:4365
-2399:2:1754
-2400:0:4365
-2401:3:3043
-2402:0:4365
-2403:2:1755
-2404:2:1759
-2405:2:1760
-2406:2:1768
-2407:2:1769
-2408:2:1773
-2409:2:1774
-2410:2:1768
-2411:2:1769
-2412:2:1773
-2413:2:1774
-2414:2:1782
-2415:2:1787
-2416:2:1791
-2417:2:1792
-2418:2:1799
-2419:2:1800
-2420:2:1811
-2421:2:1812
-2422:2:1813
-2423:2:1811
-2424:2:1812
-2425:2:1813
-2426:2:1824
-2427:2:1829
-2428:2:1830
-2429:0:4365
-2430:2:1842
-2431:0:4365
-2432:3:3042
-2433:0:4365
-2434:2:1844
-2435:0:4365
-2436:3:3043
-2437:0:4365
-2438:2:1845
-2439:2:1849
-2440:2:1850
-2441:2:1858
-2442:2:1859
-2443:2:1863
-2444:2:1864
-2445:2:1858
-2446:2:1859
-2447:2:1863
-2448:2:1864
-2449:2:1872
-2450:2:1877
-2451:2:1881
-2452:2:1882
-2453:2:1889
-2454:2:1890
-2455:2:1901
-2456:2:1902
-2457:2:1903
-2458:2:1901
-2459:2:1902
-2460:2:1903
-2461:2:1914
-2462:2:1919
-2463:2:1920
-2464:0:4365
-2465:2:1932
-2466:0:4365
-2467:3:3042
-2468:0:4365
-2469:2:1934
-2470:0:4365
-2471:3:3043
-2472:0:4365
-2473:2:1935
-2474:0:4365
-2475:2:1936
-2476:0:4365
-2477:2:2129
-2478:0:4365
-2479:2:2130
-2480:0:4365
-2481:2:2134
-2482:0:4365
-2483:3:3042
-2484:0:4365
-2485:2:2136
-2486:0:4365
-2487:3:3043
-2488:0:4365
-2489:2:2137
-2490:2:2141
-2491:2:2142
-2492:2:2150
-2493:2:2151
-2494:2:2155
-2495:2:2156
-2496:2:2150
-2497:2:2151
-2498:2:2155
-2499:2:2156
-2500:2:2164
-2501:2:2169
-2502:2:2173
-2503:2:2174
-2504:2:2181
-2505:2:2182
-2506:2:2193
-2507:2:2194
-2508:2:2195
-2509:2:2193
-2510:2:2194
-2511:2:2195
-2512:2:2206
-2513:2:2211
-2514:2:2212
-2515:0:4365
-2516:2:2224
-2517:0:4365
-2518:3:3042
-2519:0:4365
-2520:2:2226
-2521:0:4365
-2522:3:3043
-2523:0:4365
-2524:2:1936
-2525:0:4365
-2526:2:2129
-2527:0:4365
-2528:2:2130
-2529:0:4365
-2530:2:2134
-2531:0:4365
-2532:3:3042
-2533:0:4365
-2534:2:2136
-2535:0:4365
-2536:3:3043
-2537:0:4365
-2538:2:2137
-2539:2:2141
-2540:2:2142
-2541:2:2150
-2542:2:2151
-2543:2:2155
-2544:2:2156
-2545:2:2150
-2546:2:2151
-2547:2:2152
-2548:2:2164
-2549:2:2169
-2550:2:2173
-2551:2:2174
-2552:2:2181
-2553:2:2182
-2554:2:2193
-2555:2:2194
-2556:2:2195
-2557:2:2193
-2558:2:2194
-2559:2:2195
-2560:2:2206
-2561:2:2211
-2562:2:2212
-2563:0:4365
-2564:2:2224
-2565:0:4365
-2566:3:3042
-2567:0:4365
-2568:2:2226
-2569:0:4365
-2570:3:3043
-2571:0:4365
-2572:2:2230
-2573:0:4365
-2574:3:3042
-2575:0:4365
-2576:2:2235
-2577:2:2239
-2578:2:2240
-2579:2:2248
-2580:2:2249
-2581:2:2253
-2582:2:2254
-2583:2:2248
-2584:2:2249
-2585:2:2250
-2586:2:2262
-2587:2:2267
-2588:2:2271
-2589:2:2272
-2590:2:2279
-2591:2:2280
-2592:2:2291
-2593:2:2292
-2594:2:2293
-2595:2:2291
-2596:2:2292
-2597:2:2293
-2598:2:2304
-2599:2:2309
-2600:2:2310
-2601:0:4365
-2602:3:3043
-2603:0:4365
-2604:2:2322
-2605:0:4365
-2606:2:1169
-2607:0:4365
-2608:3:3042
-2609:0:4365
-2610:2:1170
-2611:0:4365
-2612:3:3043
-2613:0:4365
-2614:3:3044
-2615:0:4365
-2616:3:3257
-2617:0:4365
-2618:3:3265
-2619:0:4365
-2620:3:3266
-2621:3:3270
-2622:3:3271
-2623:3:3279
-2624:3:3280
-2625:3:3284
-2626:3:3285
-2627:3:3279
-2628:3:3280
-2629:3:3284
-2630:3:3285
-2631:3:3293
-2632:3:3298
-2633:3:3302
-2634:3:3303
-2635:3:3310
-2636:3:3311
-2637:3:3322
-2638:3:3323
-2639:3:3324
-2640:3:3322
-2641:3:3323
-2642:3:3324
-2643:3:3335
-2644:3:3340
-2645:3:3341
-2646:0:4365
-2647:3:3353
-2648:0:4365
-2649:3:3354
-2650:0:4365
-2651:2:1173
-2652:0:4365
-2653:3:3355
-2654:0:4365
-2655:2:1179
-2656:0:4365
-2657:2:1180
-2658:0:4365
-2659:3:3354
-2660:0:4365
-2661:2:1181
-2662:2:1185
-2663:2:1186
-2664:2:1194
-2665:2:1195
-2666:2:1199
-2667:2:1200
-2668:2:1194
-2669:2:1195
-2670:2:1199
-2671:2:1200
-2672:2:1208
-2673:2:1213
-2674:2:1217
-2675:2:1218
-2676:2:1225
-2677:2:1226
-2678:2:1237
-2679:2:1238
-2680:2:1239
-2681:2:1237
-2682:2:1238
-2683:2:1239
-2684:2:1250
-2685:2:1255
-2686:2:1256
-2687:0:4365
-2688:3:3355
-2689:0:4365
-2690:2:1268
-2691:0:4365
-2692:3:3354
-2693:0:4365
-2694:2:1270
-2695:0:4365
-2696:3:3355
-2697:0:4365
-2698:2:1271
-2699:2:1275
-2700:2:1276
-2701:2:1284
-2702:2:1285
-2703:2:1289
-2704:2:1290
-2705:2:1284
-2706:2:1285
-2707:2:1289
-2708:2:1290
-2709:2:1298
-2710:2:1303
-2711:2:1307
-2712:2:1308
-2713:2:1315
-2714:2:1316
-2715:2:1327
-2716:2:1328
-2717:2:1329
-2718:2:1327
-2719:2:1328
-2720:2:1329
-2721:2:1340
-2722:2:1345
-2723:2:1346
-2724:0:4365
-2725:2:1358
-2726:0:4365
-2727:2:1360
-2728:0:4365
-2729:3:3354
-2730:0:4365
-2731:2:1361
-2732:0:4365
-2733:3:3355
-2734:0:4365
-2735:2:1362
-2736:2:1366
-2737:2:1367
-2738:2:1375
-2739:2:1376
-2740:2:1380
-2741:2:1381
-2742:2:1375
-2743:2:1376
-2744:2:1380
-2745:2:1381
-2746:2:1389
-2747:2:1394
-2748:2:1398
-2749:2:1399
-2750:2:1406
-2751:2:1407
-2752:2:1418
-2753:2:1419
-2754:2:1420
-2755:2:1418
-2756:2:1419
-2757:2:1420
-2758:2:1431
-2759:2:1436
-2760:2:1437
-2761:0:4365
-2762:2:1449
-2763:0:4365
-2764:3:3354
-2765:0:4365
-2766:2:1451
-2767:0:4365
-2768:3:3355
-2769:0:4365
-2770:2:1652
-2771:0:4365
-2772:2:1653
-2773:0:4365
-2774:2:1657
-2775:0:4365
-2776:2:1180
-2777:0:4365
-2778:3:3354
-2779:0:4365
-2780:2:1181
-2781:2:1185
-2782:2:1186
-2783:2:1194
-2784:2:1195
-2785:2:1199
-2786:2:1200
-2787:2:1194
-2788:2:1195
-2789:2:1196
-2790:2:1208
-2791:2:1213
-2792:2:1217
-2793:2:1218
-2794:2:1225
-2795:2:1226
-2796:2:1237
-2797:2:1238
-2798:2:1239
-2799:2:1237
-2800:2:1238
-2801:2:1239
-2802:2:1250
-2803:2:1255
-2804:2:1256
-2805:0:4365
-2806:3:3355
-2807:0:4365
-2808:2:1268
-2809:0:4365
-2810:3:3354
-2811:0:4365
-2812:2:1270
-2813:0:4365
-2814:3:3355
-2815:0:4365
-2816:2:1271
-2817:2:1275
-2818:2:1276
-2819:2:1284
-2820:2:1285
-2821:2:1289
-2822:2:1290
-2823:2:1284
-2824:2:1285
-2825:2:1289
-2826:2:1290
-2827:2:1298
-2828:2:1303
-2829:2:1307
-2830:2:1308
-2831:2:1315
-2832:2:1316
-2833:2:1327
-2834:2:1328
-2835:2:1329
-2836:2:1327
-2837:2:1328
-2838:2:1329
-2839:2:1340
-2840:2:1345
-2841:2:1346
-2842:0:4365
-2843:2:1358
-2844:0:4365
-2845:2:1454
-2846:0:4365
-2847:3:3354
-2848:0:4365
-2849:2:1455
-2850:0:4365
-2851:3:3355
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3354
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3355
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3354
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3355
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3354
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3355
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3354
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3355
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3354
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3355
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3354
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3355
-3019:0:4365
-3020:2:1936
-3021:0:4365
-3022:2:2129
-3023:0:4365
-3024:2:2130
-3025:0:4365
-3026:2:2134
-3027:0:4365
-3028:3:3354
-3029:0:4365
-3030:2:2136
-3031:0:4365
-3032:3:3355
-3033:0:4365
-3034:2:2137
-3035:2:2141
-3036:2:2142
-3037:2:2150
-3038:2:2151
-3039:2:2155
-3040:2:2156
-3041:2:2150
-3042:2:2151
-3043:2:2152
-3044:2:2164
-3045:2:2169
-3046:2:2173
-3047:2:2174
-3048:2:2181
-3049:2:2182
-3050:2:2193
-3051:2:2194
-3052:2:2195
-3053:2:2193
-3054:2:2194
-3055:2:2195
-3056:2:2206
-3057:2:2211
-3058:2:2212
-3059:0:4365
-3060:2:2224
-3061:0:4365
-3062:3:3354
-3063:0:4365
-3064:2:2226
-3065:0:4365
-3066:3:3355
-3067:0:4365
-3068:2:2230
-3069:0:4365
-3070:3:3354
-3071:0:4365
-3072:2:2235
-3073:2:2239
-3074:2:2240
-3075:2:2248
-3076:2:2249
-3077:2:2253
-3078:2:2254
-3079:2:2248
-3080:2:2249
-3081:2:2250
-3082:2:2262
-3083:2:2267
-3084:2:2271
-3085:2:2272
-3086:2:2279
-3087:2:2280
-3088:2:2291
-3089:2:2292
-3090:2:2293
-3091:2:2291
-3092:2:2292
-3093:2:2293
-3094:2:2304
-3095:2:2309
-3096:2:2310
-3097:0:4365
-3098:3:3355
-3099:0:4365
-3100:2:2322
-3101:0:4365
-3102:2:1169
-3103:0:4365
-3104:3:3354
-3105:0:4365
-3106:2:1170
-3107:0:4365
-3108:3:3355
-3109:0:4365
-3110:3:3356
-3111:0:4365
-3112:3:3366
-3113:0:4365
-3114:3:2951
-3115:0:4365
-3116:3:2952
-3117:0:4365
-3118:3:2953
-3119:0:4365
-3120:3:2954
-3121:3:2958
-3122:3:2959
-3123:3:2967
-3124:3:2968
-3125:3:2972
-3126:3:2973
-3127:3:2967
-3128:3:2968
-3129:3:2972
-3130:3:2973
-3131:3:2981
-3132:3:2986
-3133:3:2990
-3134:3:2991
-3135:3:2998
-3136:3:2999
-3137:3:3010
-3138:3:3011
-3139:3:3012
-3140:3:3010
-3141:3:3011
-3142:3:3012
-3143:3:3023
-3144:3:3028
-3145:3:3029
-3146:0:4365
-3147:3:3041
-3148:0:4365
-3149:3:3042
-3150:0:4365
-3151:2:1173
-3152:0:4365
-3153:3:3043
-3154:0:4365
-3155:2:1179
-3156:0:4365
-3157:2:1180
-3158:0:4365
-3159:3:3042
-3160:0:4365
-3161:2:1181
-3162:2:1185
-3163:2:1186
-3164:2:1194
-3165:2:1195
-3166:2:1199
-3167:2:1200
-3168:2:1194
-3169:2:1195
-3170:2:1199
-3171:2:1200
-3172:2:1208
-3173:2:1213
-3174:2:1217
-3175:2:1218
-3176:2:1225
-3177:2:1226
-3178:2:1237
-3179:2:1238
-3180:2:1239
-3181:2:1237
-3182:2:1238
-3183:2:1239
-3184:2:1250
-3185:2:1255
-3186:2:1256
-3187:0:4365
-3188:3:3043
-3189:0:4365
-3190:2:1268
-3191:0:4365
-3192:3:3042
-3193:0:4365
-3194:2:1270
-3195:0:4365
-3196:3:3043
-3197:0:4365
-3198:2:1271
-3199:2:1275
-3200:2:1276
-3201:2:1284
-3202:2:1285
-3203:2:1289
-3204:2:1290
-3205:2:1284
-3206:2:1285
-3207:2:1289
-3208:2:1290
-3209:2:1298
-3210:2:1303
-3211:2:1307
-3212:2:1308
-3213:2:1315
-3214:2:1316
-3215:2:1327
-3216:2:1328
-3217:2:1329
-3218:2:1327
-3219:2:1328
-3220:2:1329
-3221:2:1340
-3222:2:1345
-3223:2:1346
-3224:0:4365
-3225:2:1358
-3226:0:4365
-3227:2:1360
-3228:0:4365
-3229:3:3042
-3230:0:4365
-3231:2:1361
-3232:0:4365
-3233:3:3043
-3234:0:4365
-3235:2:1362
-3236:2:1366
-3237:2:1367
-3238:2:1375
-3239:2:1376
-3240:2:1380
-3241:2:1381
-3242:2:1375
-3243:2:1376
-3244:2:1380
-3245:2:1381
-3246:2:1389
-3247:2:1394
-3248:2:1398
-3249:2:1399
-3250:2:1406
-3251:2:1407
-3252:2:1418
-3253:2:1419
-3254:2:1420
-3255:2:1418
-3256:2:1419
-3257:2:1420
-3258:2:1431
-3259:2:1436
-3260:2:1437
-3261:0:4365
-3262:2:1449
-3263:0:4365
-3264:3:3042
-3265:0:4365
-3266:2:1451
-3267:0:4365
-3268:3:3043
-3269:0:4365
-3270:2:1652
-3271:0:4365
-3272:2:1653
-3273:0:4365
-3274:2:1657
-3275:0:4365
-3276:2:1180
-3277:0:4365
-3278:3:3042
-3279:0:4365
-3280:2:1181
-3281:2:1185
-3282:2:1186
-3283:2:1194
-3284:2:1195
-3285:2:1199
-3286:2:1200
-3287:2:1194
-3288:2:1195
-3289:2:1196
-3290:2:1208
-3291:2:1213
-3292:2:1217
-3293:2:1218
-3294:2:1225
-3295:2:1226
-3296:2:1237
-3297:2:1238
-3298:2:1239
-3299:2:1237
-3300:2:1238
-3301:2:1239
-3302:2:1250
-3303:2:1255
-3304:2:1256
-3305:0:4365
-3306:3:3043
-3307:0:4365
-3308:2:1268
-3309:0:4365
-3310:3:3042
-3311:0:4365
-3312:2:1270
-3313:0:4365
-3314:3:3043
-3315:0:4365
-3316:2:1271
-3317:2:1275
-3318:2:1276
-3319:2:1284
-3320:2:1285
-3321:2:1289
-3322:2:1290
-3323:2:1284
-3324:2:1285
-3325:2:1289
-3326:2:1290
-3327:2:1298
-3328:2:1303
-3329:2:1307
-3330:2:1308
-3331:2:1315
-3332:2:1316
-3333:2:1327
-3334:2:1328
-3335:2:1329
-3336:2:1327
-3337:2:1328
-3338:2:1329
-3339:2:1340
-3340:2:1345
-3341:2:1346
-3342:0:4365
-3343:2:1358
-3344:0:4365
-3345:2:1454
-3346:0:4365
-3347:3:3042
-3348:0:4365
-3349:2:1455
-3350:0:4365
-3351:3:3043
-3352:0:4365
-3353:2:1652
-3354:0:4365
-3355:2:1653
-3356:0:4365
-3357:2:1657
-3358:0:4365
-3359:2:1660
-3360:0:4365
-3361:3:3042
-3362:0:4365
-3363:2:1665
-3364:2:1669
-3365:2:1670
-3366:2:1678
-3367:2:1679
-3368:2:1683
-3369:2:1684
-3370:2:1678
-3371:2:1679
-3372:2:1680
-3373:2:1692
-3374:2:1697
-3375:2:1701
-3376:2:1702
-3377:2:1709
-3378:2:1710
-3379:2:1721
-3380:2:1722
-3381:2:1723
-3382:2:1721
-3383:2:1722
-3384:2:1723
-3385:2:1734
-3386:2:1739
-3387:2:1740
-3388:0:4365
-3389:3:3043
-3390:0:4365
-3391:2:1752
-3392:0:4365
-3393:3:3042
-3394:0:4365
-3395:2:1754
-3396:0:4365
-3397:3:3043
-3398:0:4365
-3399:2:1755
-3400:2:1759
-3401:2:1760
-3402:2:1768
-3403:2:1769
-3404:2:1773
-3405:2:1774
-3406:2:1768
-3407:2:1769
-3408:2:1773
-3409:2:1774
-3410:2:1782
-3411:2:1787
-3412:2:1791
-3413:2:1792
-3414:2:1799
-3415:2:1800
-3416:2:1811
-3417:2:1812
-3418:2:1813
-3419:2:1811
-3420:2:1812
-3421:2:1813
-3422:2:1824
-3423:2:1829
-3424:2:1830
-3425:0:4365
-3426:2:1842
-3427:0:4365
-3428:3:3042
-3429:0:4365
-3430:2:1844
-3431:0:4365
-3432:3:3043
-3433:0:4365
-3434:2:1845
-3435:2:1849
-3436:2:1850
-3437:2:1858
-3438:2:1859
-3439:2:1863
-3440:2:1864
-3441:2:1858
-3442:2:1859
-3443:2:1863
-3444:2:1864
-3445:2:1872
-3446:2:1877
-3447:2:1881
-3448:2:1882
-3449:2:1889
-3450:2:1890
-3451:2:1901
-3452:2:1902
-3453:2:1903
-3454:2:1901
-3455:2:1902
-3456:2:1903
-3457:2:1914
-3458:2:1919
-3459:2:1920
-3460:0:4365
-3461:2:1932
-3462:0:4365
-3463:3:3042
-3464:0:4365
-3465:2:1934
-3466:0:4365
-3467:3:3043
-3468:0:4365
-3469:2:1935
-3470:0:4365
-3471:2:1936
-3472:0:4365
-3473:2:2129
-3474:0:4365
-3475:2:2130
-3476:0:4365
-3477:2:2134
-3478:0:4365
-3479:3:3042
-3480:0:4365
-3481:2:2136
-3482:0:4365
-3483:3:3043
-3484:0:4365
-3485:2:2137
-3486:2:2141
-3487:2:2142
-3488:2:2150
-3489:2:2151
-3490:2:2155
-3491:2:2156
-3492:2:2150
-3493:2:2151
-3494:2:2155
-3495:2:2156
-3496:2:2164
-3497:2:2169
-3498:2:2173
-3499:2:2174
-3500:2:2181
-3501:2:2182
-3502:2:2193
-3503:2:2194
-3504:2:2195
-3505:2:2193
-3506:2:2194
-3507:2:2195
-3508:2:2206
-3509:2:2211
-3510:2:2212
-3511:0:4365
-3512:2:2224
-3513:0:4365
-3514:3:3042
-3515:0:4365
-3516:2:2226
-3517:0:4365
-3518:3:3043
-3519:0:4365
-3520:2:1936
-3521:0:4365
-3522:2:2129
-3523:0:4365
-3524:2:2130
-3525:0:4365
-3526:2:2134
-3527:0:4365
-3528:3:3042
-3529:0:4365
-3530:2:2136
-3531:0:4365
-3532:3:3043
-3533:0:4365
-3534:2:2137
-3535:2:2141
-3536:2:2142
-3537:2:2150
-3538:2:2151
-3539:2:2155
-3540:2:2156
-3541:2:2150
-3542:2:2151
-3543:2:2152
-3544:2:2164
-3545:2:2169
-3546:2:2173
-3547:2:2174
-3548:2:2181
-3549:2:2182
-3550:2:2193
-3551:2:2194
-3552:2:2195
-3553:2:2193
-3554:2:2194
-3555:2:2195
-3556:2:2206
-3557:2:2211
-3558:2:2212
-3559:0:4365
-3560:2:2224
-3561:0:4365
-3562:3:3042
-3563:0:4365
-3564:2:2226
-3565:0:4365
-3566:3:3043
-3567:0:4365
-3568:2:2230
-3569:0:4365
-3570:3:3042
-3571:0:4365
-3572:2:2235
-3573:2:2239
-3574:2:2240
-3575:2:2248
-3576:2:2249
-3577:2:2253
-3578:2:2254
-3579:2:2248
-3580:2:2249
-3581:2:2250
-3582:2:2262
-3583:2:2267
-3584:2:2271
-3585:2:2272
-3586:2:2279
-3587:2:2280
-3588:2:2291
-3589:2:2292
-3590:2:2293
-3591:2:2291
-3592:2:2292
-3593:2:2293
-3594:2:2304
-3595:2:2309
-3596:2:2310
-3597:0:4365
-3598:3:3043
-3599:0:4365
-3600:2:2322
-3601:0:4365
-3602:2:1169
-3603:0:4365
-3604:3:3042
-3605:0:4365
-3606:2:1170
-3607:0:4365
-3608:3:3043
-3609:0:4365
-3610:3:3044
-3611:0:4365
-3612:3:3257
-3613:0:4365
-3614:3:3362
-3615:0:4365
-3616:3:3363
-3617:0:4365
-3618:3:3367
-3619:0:4365
-3620:3:3373
-3621:3:3377
-3622:3:3378
-3623:3:3386
-3624:3:3387
-3625:3:3391
-3626:3:3392
-3627:3:3386
-3628:3:3387
-3629:3:3391
-3630:3:3392
-3631:3:3400
-3632:3:3405
-3633:3:3409
-3634:3:3410
-3635:3:3417
-3636:3:3418
-3637:3:3429
-3638:3:3430
-3639:3:3431
-3640:3:3429
-3641:3:3430
-3642:3:3431
-3643:3:3442
-3644:3:3447
-3645:3:3448
-3646:0:4365
-3647:3:3460
-3648:0:4365
-3649:3:3461
-3650:0:4365
-3651:2:1173
-3652:0:4365
-3653:3:3462
-3654:0:4365
-3655:2:1179
-3656:0:4365
-3657:2:1180
-3658:0:4365
-3659:3:3461
-3660:0:4365
-3661:2:1181
-3662:2:1185
-3663:2:1186
-3664:2:1194
-3665:2:1195
-3666:2:1199
-3667:2:1200
-3668:2:1194
-3669:2:1195
-3670:2:1199
-3671:2:1200
-3672:2:1208
-3673:2:1213
-3674:2:1217
-3675:2:1218
-3676:2:1225
-3677:2:1226
-3678:2:1237
-3679:2:1238
-3680:2:1239
-3681:2:1237
-3682:2:1238
-3683:2:1239
-3684:2:1250
-3685:2:1255
-3686:2:1256
-3687:0:4365
-3688:3:3462
-3689:0:4365
-3690:2:1268
-3691:0:4365
-3692:3:3461
-3693:0:4365
-3694:2:1270
-3695:0:4365
-3696:3:3462
-3697:0:4365
-3698:2:1271
-3699:2:1275
-3700:2:1276
-3701:2:1284
-3702:2:1285
-3703:2:1289
-3704:2:1290
-3705:2:1284
-3706:2:1285
-3707:2:1289
-3708:2:1290
-3709:2:1298
-3710:2:1303
-3711:2:1307
-3712:2:1308
-3713:2:1315
-3714:2:1316
-3715:2:1327
-3716:2:1328
-3717:2:1329
-3718:2:1327
-3719:2:1328
-3720:2:1329
-3721:2:1340
-3722:2:1345
-3723:2:1346
-3724:0:4365
-3725:2:1358
-3726:0:4365
-3727:2:1360
-3728:0:4365
-3729:3:3461
-3730:0:4365
-3731:2:1361
-3732:0:4365
-3733:3:3462
-3734:0:4365
-3735:2:1362
-3736:2:1366
-3737:2:1367
-3738:2:1375
-3739:2:1376
-3740:2:1380
-3741:2:1381
-3742:2:1375
-3743:2:1376
-3744:2:1380
-3745:2:1381
-3746:2:1389
-3747:2:1394
-3748:2:1398
-3749:2:1399
-3750:2:1406
-3751:2:1407
-3752:2:1418
-3753:2:1419
-3754:2:1420
-3755:2:1418
-3756:2:1419
-3757:2:1420
-3758:2:1431
-3759:2:1436
-3760:2:1437
-3761:0:4365
-3762:2:1449
-3763:0:4365
-3764:3:3461
-3765:0:4365
-3766:2:1451
-3767:0:4365
-3768:3:3462
-3769:0:4365
-3770:2:1652
-3771:0:4365
-3772:2:1653
-3773:0:4365
-3774:2:1657
-3775:0:4365
-3776:2:1180
-3777:0:4365
-3778:3:3461
-3779:0:4365
-3780:2:1181
-3781:2:1185
-3782:2:1186
-3783:2:1194
-3784:2:1195
-3785:2:1199
-3786:2:1200
-3787:2:1194
-3788:2:1195
-3789:2:1196
-3790:2:1208
-3791:2:1213
-3792:2:1217
-3793:2:1218
-3794:2:1225
-3795:2:1226
-3796:2:1237
-3797:2:1238
-3798:2:1239
-3799:2:1237
-3800:2:1238
-3801:2:1239
-3802:2:1250
-3803:2:1255
-3804:2:1256
-3805:0:4365
-3806:3:3462
-3807:0:4365
-3808:2:1268
-3809:0:4365
-3810:3:3461
-3811:0:4365
-3812:2:1270
-3813:0:4365
-3814:3:3462
-3815:0:4365
-3816:2:1271
-3817:2:1275
-3818:2:1276
-3819:2:1284
-3820:2:1285
-3821:2:1289
-3822:2:1290
-3823:2:1284
-3824:2:1285
-3825:2:1289
-3826:2:1290
-3827:2:1298
-3828:2:1303
-3829:2:1307
-3830:2:1308
-3831:2:1315
-3832:2:1316
-3833:2:1327
-3834:2:1328
-3835:2:1329
-3836:2:1327
-3837:2:1328
-3838:2:1329
-3839:2:1340
-3840:2:1345
-3841:2:1346
-3842:0:4365
-3843:2:1358
-3844:0:4365
-3845:2:1454
-3846:0:4365
-3847:3:3461
-3848:0:4365
-3849:2:1455
-3850:0:4365
-3851:3:3462
-3852:0:4365
-3853:2:1652
-3854:0:4365
-3855:2:1653
-3856:0:4365
-3857:2:1657
-3858:0:4365
-3859:2:1660
-3860:0:4365
-3861:3:3461
-3862:0:4365
-3863:2:1665
-3864:2:1669
-3865:2:1670
-3866:2:1678
-3867:2:1679
-3868:2:1683
-3869:2:1684
-3870:2:1678
-3871:2:1679
-3872:2:1680
-3873:2:1692
-3874:2:1697
-3875:2:1701
-3876:2:1702
-3877:2:1709
-3878:2:1710
-3879:2:1721
-3880:2:1722
-3881:2:1723
-3882:2:1721
-3883:2:1722
-3884:2:1723
-3885:2:1734
-3886:2:1739
-3887:2:1740
-3888:0:4365
-3889:3:3462
-3890:0:4365
-3891:2:1752
-3892:0:4365
-3893:3:3461
-3894:0:4365
-3895:2:1754
-3896:0:4365
-3897:3:3462
-3898:0:4365
-3899:2:1755
-3900:2:1759
-3901:2:1760
-3902:2:1768
-3903:2:1769
-3904:2:1773
-3905:2:1774
-3906:2:1768
-3907:2:1769
-3908:2:1773
-3909:2:1774
-3910:2:1782
-3911:2:1787
-3912:2:1791
-3913:2:1792
-3914:2:1799
-3915:2:1800
-3916:2:1811
-3917:2:1812
-3918:2:1813
-3919:2:1811
-3920:2:1812
-3921:2:1813
-3922:2:1824
-3923:2:1829
-3924:2:1830
-3925:0:4365
-3926:2:1842
-3927:0:4365
-3928:3:3461
-3929:0:4365
-3930:2:1844
-3931:0:4365
-3932:3:3462
-3933:0:4365
-3934:2:1845
-3935:2:1849
-3936:2:1850
-3937:2:1858
-3938:2:1859
-3939:2:1863
-3940:2:1864
-3941:2:1858
-3942:2:1859
-3943:2:1863
-3944:2:1864
-3945:2:1872
-3946:2:1877
-3947:2:1881
-3948:2:1882
-3949:2:1889
-3950:2:1890
-3951:2:1901
-3952:2:1902
-3953:2:1903
-3954:2:1901
-3955:2:1902
-3956:2:1903
-3957:2:1914
-3958:2:1919
-3959:2:1920
-3960:0:4365
-3961:2:1932
-3962:0:4365
-3963:3:3461
-3964:0:4365
-3965:2:1934
-3966:0:4365
-3967:3:3462
-3968:0:4365
-3969:2:1935
-3970:0:4365
-3971:2:1936
-3972:0:4365
-3973:2:2129
-3974:0:4365
-3975:2:2130
-3976:0:4365
-3977:2:2134
-3978:0:4365
-3979:3:3461
-3980:0:4365
-3981:2:2136
-3982:0:4365
-3983:3:3462
-3984:0:4365
-3985:2:2137
-3986:2:2141
-3987:2:2142
-3988:2:2150
-3989:2:2151
-3990:2:2155
-3991:2:2156
-3992:2:2150
-3993:2:2151
-3994:2:2155
-3995:2:2156
-3996:2:2164
-3997:2:2169
-3998:2:2173
-3999:2:2174
-4000:2:2181
-4001:2:2182
-4002:2:2193
-4003:2:2194
-4004:2:2195
-4005:2:2193
-4006:2:2194
-4007:2:2195
-4008:2:2206
-4009:2:2211
-4010:2:2212
-4011:0:4365
-4012:2:2224
-4013:0:4365
-4014:3:3461
-4015:0:4365
-4016:2:2226
-4017:0:4365
-4018:3:3462
-4019:0:4365
-4020:2:1936
-4021:0:4365
-4022:2:2129
-4023:0:4365
-4024:2:2130
-4025:0:4365
-4026:2:2134
-4027:0:4365
-4028:3:3461
-4029:0:4365
-4030:2:2136
-4031:0:4365
-4032:3:3462
-4033:0:4365
-4034:2:2137
-4035:2:2141
-4036:2:2142
-4037:2:2150
-4038:2:2151
-4039:2:2155
-4040:2:2156
-4041:2:2150
-4042:2:2151
-4043:2:2152
-4044:2:2164
-4045:2:2169
-4046:2:2173
-4047:2:2174
-4048:2:2181
-4049:2:2182
-4050:2:2193
-4051:2:2194
-4052:2:2195
-4053:2:2193
-4054:2:2194
-4055:2:2195
-4056:2:2206
-4057:2:2211
-4058:2:2212
-4059:0:4365
-4060:2:2224
-4061:0:4365
-4062:3:3461
-4063:0:4365
-4064:2:2226
-4065:0:4365
-4066:3:3462
-4067:0:4365
-4068:2:2230
-4069:0:4365
-4070:3:3461
-4071:0:4365
-4072:2:2235
-4073:2:2239
-4074:2:2240
-4075:2:2248
-4076:2:2249
-4077:2:2253
-4078:2:2254
-4079:2:2248
-4080:2:2249
-4081:2:2250
-4082:2:2262
-4083:2:2267
-4084:2:2271
-4085:2:2272
-4086:2:2279
-4087:2:2280
-4088:2:2291
-4089:2:2292
-4090:2:2293
-4091:2:2291
-4092:2:2292
-4093:2:2293
-4094:2:2304
-4095:2:2309
-4096:2:2310
-4097:0:4365
-4098:3:3462
-4099:0:4365
-4100:2:2322
-4101:0:4365
-4102:2:1169
-4103:0:4365
-4104:3:3461
-4105:0:4365
-4106:2:1170
-4107:0:4365
-4108:3:3462
-4109:0:4365
-4110:3:3463
-4111:0:4365
-4112:3:3469
-4113:0:4365
-4114:3:3470
-4115:3:3474
-4116:3:3475
-4117:3:3483
-4118:3:3484
-4119:3:3488
-4120:3:3489
-4121:3:3483
-4122:3:3484
-4123:3:3488
-4124:3:3489
-4125:3:3497
-4126:3:3502
-4127:3:3506
-4128:3:3507
-4129:3:3514
-4130:3:3515
-4131:3:3526
-4132:3:3527
-4133:3:3528
-4134:3:3526
-4135:3:3527
-4136:3:3528
-4137:3:3539
-4138:3:3544
-4139:3:3545
-4140:0:4365
-4141:3:3557
-4142:0:4365
-4143:3:3558
-4144:0:4365
-4145:2:1173
-4146:0:4365
-4147:3:3559
-4148:0:4365
-4149:2:1179
-4150:0:4365
-4151:2:1180
-4152:0:4365
-4153:3:3558
-4154:0:4365
-4155:2:1181
-4156:2:1185
-4157:2:1186
-4158:2:1194
-4159:2:1195
-4160:2:1199
-4161:2:1200
-4162:2:1194
-4163:2:1195
-4164:2:1199
-4165:2:1200
-4166:2:1208
-4167:2:1213
-4168:2:1217
-4169:2:1218
-4170:2:1225
-4171:2:1226
-4172:2:1237
-4173:2:1238
-4174:2:1239
-4175:2:1237
-4176:2:1238
-4177:2:1239
-4178:2:1250
-4179:2:1255
-4180:2:1256
-4181:0:4365
-4182:3:3559
-4183:0:4365
-4184:2:1268
-4185:0:4365
-4186:3:3558
-4187:0:4365
-4188:2:1270
-4189:0:4365
-4190:3:3559
-4191:0:4365
-4192:2:1271
-4193:2:1275
-4194:2:1276
-4195:2:1284
-4196:2:1285
-4197:2:1289
-4198:2:1290
-4199:2:1284
-4200:2:1285
-4201:2:1289
-4202:2:1290
-4203:2:1298
-4204:2:1303
-4205:2:1307
-4206:2:1308
-4207:2:1315
-4208:2:1316
-4209:2:1327
-4210:2:1328
-4211:2:1329
-4212:2:1327
-4213:2:1328
-4214:2:1329
-4215:2:1340
-4216:2:1345
-4217:2:1346
-4218:0:4365
-4219:2:1358
-4220:0:4365
-4221:2:1360
-4222:0:4365
-4223:3:3558
-4224:0:4365
-4225:2:1361
-4226:0:4365
-4227:3:3559
-4228:0:4365
-4229:2:1362
-4230:2:1366
-4231:2:1367
-4232:2:1375
-4233:2:1376
-4234:2:1380
-4235:2:1381
-4236:2:1375
-4237:2:1376
-4238:2:1380
-4239:2:1381
-4240:2:1389
-4241:2:1394
-4242:2:1398
-4243:2:1399
-4244:2:1406
-4245:2:1407
-4246:2:1418
-4247:2:1419
-4248:2:1420
-4249:2:1418
-4250:2:1419
-4251:2:1420
-4252:2:1431
-4253:2:1436
-4254:2:1437
-4255:0:4365
-4256:2:1449
-4257:0:4365
-4258:3:3558
-4259:0:4365
-4260:2:1451
-4261:0:4365
-4262:3:3559
-4263:0:4365
-4264:2:1652
-4265:0:4365
-4266:2:1653
-4267:0:4365
-4268:2:1657
-4269:0:4365
-4270:2:1180
-4271:0:4365
-4272:3:3558
-4273:0:4365
-4274:2:1181
-4275:2:1185
-4276:2:1186
-4277:2:1194
-4278:2:1195
-4279:2:1199
-4280:2:1200
-4281:2:1194
-4282:2:1195
-4283:2:1196
-4284:2:1208
-4285:2:1213
-4286:2:1217
-4287:2:1218
-4288:2:1225
-4289:2:1226
-4290:2:1237
-4291:2:1238
-4292:2:1239
-4293:2:1237
-4294:2:1238
-4295:2:1239
-4296:2:1250
-4297:2:1255
-4298:2:1256
-4299:0:4365
-4300:3:3559
-4301:0:4365
-4302:2:1268
-4303:0:4365
-4304:3:3558
-4305:0:4365
-4306:2:1270
-4307:0:4365
-4308:3:3559
-4309:0:4365
-4310:2:1271
-4311:2:1275
-4312:2:1276
-4313:2:1284
-4314:2:1285
-4315:2:1289
-4316:2:1290
-4317:2:1284
-4318:2:1285
-4319:2:1289
-4320:2:1290
-4321:2:1298
-4322:2:1303
-4323:2:1307
-4324:2:1308
-4325:2:1315
-4326:2:1316
-4327:2:1327
-4328:2:1328
-4329:2:1329
-4330:2:1327
-4331:2:1328
-4332:2:1329
-4333:2:1340
-4334:2:1345
-4335:2:1346
-4336:0:4365
-4337:2:1358
-4338:0:4365
-4339:2:1454
-4340:0:4365
-4341:3:3558
-4342:0:4365
-4343:2:1455
-4344:0:4365
-4345:3:3559
-4346:0:4365
-4347:2:1652
-4348:0:4365
-4349:2:1653
-4350:0:4365
-4351:2:1657
-4352:0:4365
-4353:2:1660
-4354:0:4365
-4355:3:3558
-4356:0:4365
-4357:2:1665
-4358:2:1669
-4359:2:1670
-4360:2:1678
-4361:2:1679
-4362:2:1683
-4363:2:1684
-4364:2:1678
-4365:2:1679
-4366:2:1680
-4367:2:1692
-4368:2:1697
-4369:2:1701
-4370:2:1702
-4371:2:1709
-4372:2:1710
-4373:2:1721
-4374:2:1722
-4375:2:1723
-4376:2:1721
-4377:2:1722
-4378:2:1723
-4379:2:1734
-4380:2:1739
-4381:2:1740
-4382:0:4365
-4383:3:3559
-4384:0:4365
-4385:2:1752
-4386:0:4365
-4387:3:3558
-4388:0:4365
-4389:2:1754
-4390:0:4365
-4391:3:3559
-4392:0:4365
-4393:2:1755
-4394:2:1759
-4395:2:1760
-4396:2:1768
-4397:2:1769
-4398:2:1773
-4399:2:1774
-4400:2:1768
-4401:2:1769
-4402:2:1773
-4403:2:1774
-4404:2:1782
-4405:2:1787
-4406:2:1791
-4407:2:1792
-4408:2:1799
-4409:2:1800
-4410:2:1811
-4411:2:1812
-4412:2:1813
-4413:2:1811
-4414:2:1812
-4415:2:1813
-4416:2:1824
-4417:2:1829
-4418:2:1830
-4419:0:4365
-4420:2:1842
-4421:0:4365
-4422:3:3558
-4423:0:4365
-4424:2:1844
-4425:0:4365
-4426:3:3559
-4427:0:4365
-4428:2:1845
-4429:2:1849
-4430:2:1850
-4431:2:1858
-4432:2:1859
-4433:2:1863
-4434:2:1864
-4435:2:1858
-4436:2:1859
-4437:2:1863
-4438:2:1864
-4439:2:1872
-4440:2:1877
-4441:2:1881
-4442:2:1882
-4443:2:1889
-4444:2:1890
-4445:2:1901
-4446:2:1902
-4447:2:1903
-4448:2:1901
-4449:2:1902
-4450:2:1903
-4451:2:1914
-4452:2:1919
-4453:2:1920
-4454:0:4365
-4455:2:1932
-4456:0:4365
-4457:3:3558
-4458:0:4365
-4459:2:1934
-4460:0:4365
-4461:3:3559
-4462:0:4365
-4463:2:1935
-4464:0:4365
-4465:2:1936
-4466:0:4365
-4467:2:2129
-4468:0:4365
-4469:2:2130
-4470:0:4365
-4471:2:2134
-4472:0:4365
-4473:3:3558
-4474:0:4365
-4475:2:2136
-4476:0:4365
-4477:3:3559
-4478:0:4365
-4479:2:2137
-4480:2:2141
-4481:2:2142
-4482:2:2150
-4483:2:2151
-4484:2:2155
-4485:2:2156
-4486:2:2150
-4487:2:2151
-4488:2:2155
-4489:2:2156
-4490:2:2164
-4491:2:2169
-4492:2:2173
-4493:2:2174
-4494:2:2181
-4495:2:2182
-4496:2:2193
-4497:2:2194
-4498:2:2195
-4499:2:2193
-4500:2:2194
-4501:2:2195
-4502:2:2206
-4503:2:2211
-4504:2:2212
-4505:0:4365
-4506:2:2224
-4507:0:4365
-4508:3:3558
-4509:0:4365
-4510:2:2226
-4511:0:4365
-4512:3:3559
-4513:0:4365
-4514:2:1936
-4515:0:4365
-4516:2:2129
-4517:0:4365
-4518:2:2130
-4519:0:4365
-4520:2:2134
-4521:0:4365
-4522:3:3558
-4523:0:4365
-4524:2:2136
-4525:0:4365
-4526:3:3559
-4527:0:4365
-4528:2:2137
-4529:2:2141
-4530:2:2142
-4531:2:2150
-4532:2:2151
-4533:2:2155
-4534:2:2156
-4535:2:2150
-4536:2:2151
-4537:2:2152
-4538:2:2164
-4539:2:2169
-4540:2:2173
-4541:2:2174
-4542:2:2181
-4543:2:2182
-4544:2:2193
-4545:2:2194
-4546:2:2195
-4547:2:2193
-4548:2:2194
-4549:2:2195
-4550:2:2206
-4551:2:2211
-4552:2:2212
-4553:0:4365
-4554:2:2224
-4555:0:4365
-4556:3:3558
-4557:0:4365
-4558:2:2226
-4559:0:4365
-4560:3:3559
-4561:0:4365
-4562:2:2230
-4563:0:4365
-4564:3:3558
-4565:0:4365
-4566:2:2235
-4567:2:2239
-4568:2:2240
-4569:2:2248
-4570:2:2249
-4571:2:2253
-4572:2:2254
-4573:2:2248
-4574:2:2249
-4575:2:2250
-4576:2:2262
-4577:2:2267
-4578:2:2271
-4579:2:2272
-4580:2:2279
-4581:2:2280
-4582:2:2291
-4583:2:2292
-4584:2:2293
-4585:2:2291
-4586:2:2292
-4587:2:2293
-4588:2:2304
-4589:2:2309
-4590:2:2310
-4591:0:4365
-4592:3:3559
-4593:0:4365
-4594:2:2322
-4595:0:4365
-4596:2:1169
-4597:0:4365
-4598:3:3558
-4599:0:4365
-4600:2:1170
-4601:0:4365
-4602:3:3559
-4603:0:4365
-4604:3:3560
-4605:0:4365
-4606:3:3566
-4607:0:4365
-4608:3:3569
-4609:3:3570
-4610:3:3582
-4611:3:3583
-4612:3:3587
-4613:3:3588
-4614:3:3582
-4615:3:3583
-4616:3:3587
-4617:3:3588
-4618:3:3596
-4619:3:3601
-4620:3:3605
-4621:3:3606
-4622:3:3613
-4623:3:3614
-4624:3:3625
-4625:3:3626
-4626:3:3627
-4627:3:3625
-4628:3:3626
-4629:3:3627
-4630:3:3638
-4631:3:3643
-4632:3:3644
-4633:0:4365
-4634:3:3656
-4635:0:4365
-4636:3:3657
-4637:0:4365
-4638:2:1173
-4639:0:4365
-4640:3:3658
-4641:0:4365
-4642:2:1179
-4643:0:4365
-4644:2:1180
-4645:0:4365
-4646:3:3657
-4647:0:4365
-4648:2:1181
-4649:2:1185
-4650:2:1186
-4651:2:1194
-4652:2:1195
-4653:2:1199
-4654:2:1200
-4655:2:1194
-4656:2:1195
-4657:2:1199
-4658:2:1200
-4659:2:1208
-4660:2:1213
-4661:2:1217
-4662:2:1218
-4663:2:1225
-4664:2:1226
-4665:2:1237
-4666:2:1238
-4667:2:1239
-4668:2:1237
-4669:2:1238
-4670:2:1239
-4671:2:1250
-4672:2:1255
-4673:2:1256
-4674:0:4365
-4675:3:3658
-4676:0:4365
-4677:2:1268
-4678:0:4365
-4679:3:3657
-4680:0:4365
-4681:2:1270
-4682:0:4365
-4683:3:3658
-4684:0:4365
-4685:2:1271
-4686:2:1275
-4687:2:1276
-4688:2:1284
-4689:2:1285
-4690:2:1289
-4691:2:1290
-4692:2:1284
-4693:2:1285
-4694:2:1289
-4695:2:1290
-4696:2:1298
-4697:2:1303
-4698:2:1307
-4699:2:1308
-4700:2:1315
-4701:2:1316
-4702:2:1327
-4703:2:1328
-4704:2:1329
-4705:2:1327
-4706:2:1328
-4707:2:1329
-4708:2:1340
-4709:2:1345
-4710:2:1346
-4711:0:4365
-4712:2:1358
-4713:0:4365
-4714:2:1360
-4715:0:4365
-4716:3:3657
-4717:0:4365
-4718:2:1361
-4719:0:4365
-4720:3:3658
-4721:0:4365
-4722:2:1362
-4723:2:1366
-4724:2:1367
-4725:2:1375
-4726:2:1376
-4727:2:1380
-4728:2:1381
-4729:2:1375
-4730:2:1376
-4731:2:1380
-4732:2:1381
-4733:2:1389
-4734:2:1394
-4735:2:1398
-4736:2:1399
-4737:2:1406
-4738:2:1407
-4739:2:1418
-4740:2:1419
-4741:2:1420
-4742:2:1418
-4743:2:1419
-4744:2:1420
-4745:2:1431
-4746:2:1436
-4747:2:1437
-4748:0:4365
-4749:2:1449
-4750:0:4365
-4751:3:3657
-4752:0:4365
-4753:2:1451
-4754:0:4365
-4755:3:3658
-4756:0:4365
-4757:2:1652
-4758:0:4365
-4759:2:1653
-4760:0:4365
-4761:2:1657
-4762:0:4365
-4763:2:1180
-4764:0:4365
-4765:3:3657
-4766:0:4365
-4767:2:1181
-4768:2:1185
-4769:2:1186
-4770:2:1194
-4771:2:1195
-4772:2:1199
-4773:2:1200
-4774:2:1194
-4775:2:1195
-4776:2:1196
-4777:2:1208
-4778:2:1213
-4779:2:1217
-4780:2:1218
-4781:2:1225
-4782:2:1226
-4783:2:1237
-4784:2:1238
-4785:2:1239
-4786:2:1237
-4787:2:1238
-4788:2:1239
-4789:2:1250
-4790:2:1255
-4791:2:1256
-4792:0:4365
-4793:3:3658
-4794:0:4365
-4795:2:1268
-4796:0:4365
-4797:3:3657
-4798:0:4365
-4799:2:1270
-4800:0:4365
-4801:3:3658
-4802:0:4365
-4803:2:1271
-4804:2:1275
-4805:2:1276
-4806:2:1284
-4807:2:1285
-4808:2:1289
-4809:2:1290
-4810:2:1284
-4811:2:1285
-4812:2:1289
-4813:2:1290
-4814:2:1298
-4815:2:1303
-4816:2:1307
-4817:2:1308
-4818:2:1315
-4819:2:1316
-4820:2:1327
-4821:2:1328
-4822:2:1329
-4823:2:1327
-4824:2:1328
-4825:2:1329
-4826:2:1340
-4827:2:1345
-4828:2:1346
-4829:0:4365
-4830:2:1358
-4831:0:4365
-4832:2:1454
-4833:0:4365
-4834:3:3657
-4835:0:4365
-4836:2:1455
-4837:0:4365
-4838:3:3658
-4839:0:4365
-4840:2:1652
-4841:0:4365
-4842:2:1653
-4843:0:4365
-4844:2:1657
-4845:0:4365
-4846:2:1660
-4847:0:4365
-4848:3:3657
-4849:0:4365
-4850:2:1665
-4851:2:1669
-4852:2:1670
-4853:2:1678
-4854:2:1679
-4855:2:1683
-4856:2:1684
-4857:2:1678
-4858:2:1679
-4859:2:1680
-4860:2:1692
-4861:2:1697
-4862:2:1701
-4863:2:1702
-4864:2:1709
-4865:2:1710
-4866:2:1721
-4867:2:1722
-4868:2:1723
-4869:2:1721
-4870:2:1722
-4871:2:1723
-4872:2:1734
-4873:2:1739
-4874:2:1740
-4875:0:4365
-4876:3:3658
-4877:0:4365
-4878:2:1752
-4879:0:4365
-4880:3:3657
-4881:0:4365
-4882:2:1754
-4883:0:4365
-4884:3:3658
-4885:0:4365
-4886:2:1755
-4887:2:1759
-4888:2:1760
-4889:2:1768
-4890:2:1769
-4891:2:1773
-4892:2:1774
-4893:2:1768
-4894:2:1769
-4895:2:1773
-4896:2:1774
-4897:2:1782
-4898:2:1787
-4899:2:1791
-4900:2:1792
-4901:2:1799
-4902:2:1800
-4903:2:1811
-4904:2:1812
-4905:2:1813
-4906:2:1811
-4907:2:1812
-4908:2:1813
-4909:2:1824
-4910:2:1829
-4911:2:1830
-4912:0:4365
-4913:2:1842
-4914:0:4365
-4915:3:3657
-4916:0:4365
-4917:2:1844
-4918:0:4365
-4919:3:3658
-4920:0:4365
-4921:2:1845
-4922:2:1849
-4923:2:1850
-4924:2:1858
-4925:2:1859
-4926:2:1863
-4927:2:1864
-4928:2:1858
-4929:2:1859
-4930:2:1863
-4931:2:1864
-4932:2:1872
-4933:2:1877
-4934:2:1881
-4935:2:1882
-4936:2:1889
-4937:2:1890
-4938:2:1901
-4939:2:1902
-4940:2:1903
-4941:2:1901
-4942:2:1902
-4943:2:1903
-4944:2:1914
-4945:2:1919
-4946:2:1920
-4947:0:4365
-4948:2:1932
-4949:0:4365
-4950:3:3657
-4951:0:4365
-4952:2:1934
-4953:0:4365
-4954:3:3658
-4955:0:4365
-4956:2:1935
-4957:0:4365
-4958:2:1936
-4959:0:4365
-4960:2:2129
-4961:0:4365
-4962:2:2130
-4963:0:4365
-4964:2:2134
-4965:0:4365
-4966:3:3657
-4967:0:4365
-4968:2:2136
-4969:0:4365
-4970:3:3658
-4971:0:4365
-4972:2:2137
-4973:2:2141
-4974:2:2142
-4975:2:2150
-4976:2:2151
-4977:2:2155
-4978:2:2156
-4979:2:2150
-4980:2:2151
-4981:2:2155
-4982:2:2156
-4983:2:2164
-4984:2:2169
-4985:2:2173
-4986:2:2174
-4987:2:2181
-4988:2:2182
-4989:2:2193
-4990:2:2194
-4991:2:2195
-4992:2:2193
-4993:2:2194
-4994:2:2195
-4995:2:2206
-4996:2:2211
-4997:2:2212
-4998:0:4365
-4999:2:2224
-5000:0:4365
-5001:3:3657
-5002:0:4365
-5003:2:2226
-5004:0:4365
-5005:3:3658
-5006:0:4365
-5007:2:1936
-5008:0:4365
-5009:2:2129
-5010:0:4365
-5011:2:2130
-5012:0:4365
-5013:2:2134
-5014:0:4365
-5015:3:3657
-5016:0:4365
-5017:2:2136
-5018:0:4365
-5019:3:3658
-5020:0:4365
-5021:2:2137
-5022:2:2141
-5023:2:2142
-5024:2:2150
-5025:2:2151
-5026:2:2155
-5027:2:2156
-5028:2:2150
-5029:2:2151
-5030:2:2152
-5031:2:2164
-5032:2:2169
-5033:2:2173
-5034:2:2174
-5035:2:2181
-5036:2:2182
-5037:2:2193
-5038:2:2194
-5039:2:2195
-5040:2:2193
-5041:2:2194
-5042:2:2195
-5043:2:2206
-5044:2:2211
-5045:2:2212
-5046:0:4365
-5047:2:2224
-5048:0:4365
-5049:3:3657
-5050:0:4365
-5051:2:2226
-5052:0:4365
-5053:3:3658
-5054:0:4365
-5055:2:2230
-5056:0:4365
-5057:3:3657
-5058:0:4365
-5059:2:2235
-5060:2:2239
-5061:2:2240
-5062:2:2248
-5063:2:2249
-5064:2:2253
-5065:2:2254
-5066:2:2248
-5067:2:2249
-5068:2:2250
-5069:2:2262
-5070:2:2267
-5071:2:2271
-5072:2:2272
-5073:2:2279
-5074:2:2280
-5075:2:2291
-5076:2:2292
-5077:2:2293
-5078:2:2291
-5079:2:2292
-5080:2:2293
-5081:2:2304
-5082:2:2309
-5083:2:2310
-5084:0:4365
-5085:3:3658
-5086:0:4365
-5087:2:2322
-5088:0:4365
-5089:2:1169
-5090:0:4365
-5091:3:3657
-5092:0:4365
-5093:2:1170
-5094:0:4365
-5095:3:3658
-5096:0:4365
-5097:3:3659
-5098:0:4365
-5099:3:3665
-5100:0:4365
-5101:3:3666
-5102:0:4365
-5103:3:3667
-5104:0:4365
-5105:3:3668
-5106:0:4365
-5107:3:3669
-5108:3:3673
-5109:3:3674
-5110:3:3682
-5111:3:3683
-5112:3:3687
-5113:3:3688
-5114:3:3682
-5115:3:3683
-5116:3:3687
-5117:3:3688
-5118:3:3696
-5119:3:3701
-5120:3:3705
-5121:3:3706
-5122:3:3713
-5123:3:3714
-5124:3:3725
-5125:3:3726
-5126:3:3727
-5127:3:3725
-5128:3:3726
-5129:3:3727
-5130:3:3738
-5131:3:3743
-5132:3:3744
-5133:0:4365
-5134:3:3756
-5135:0:4365
-5136:3:3757
-5137:0:4365
-5138:2:1173
-5139:0:4365
-5140:3:3758
-5141:0:4365
-5142:2:1179
-5143:0:4365
-5144:2:1180
-5145:0:4365
-5146:3:3757
-5147:0:4365
-5148:2:1181
-5149:2:1185
-5150:2:1186
-5151:2:1194
-5152:2:1195
-5153:2:1199
-5154:2:1200
-5155:2:1194
-5156:2:1195
-5157:2:1199
-5158:2:1200
-5159:2:1208
-5160:2:1213
-5161:2:1217
-5162:2:1218
-5163:2:1225
-5164:2:1226
-5165:2:1237
-5166:2:1238
-5167:2:1239
-5168:2:1237
-5169:2:1238
-5170:2:1239
-5171:2:1250
-5172:2:1255
-5173:2:1256
-5174:0:4365
-5175:3:3758
-5176:0:4365
-5177:2:1268
-5178:0:4365
-5179:3:3757
-5180:0:4365
-5181:2:1270
-5182:0:4365
-5183:3:3758
-5184:0:4365
-5185:2:1271
-5186:2:1275
-5187:2:1276
-5188:2:1284
-5189:2:1285
-5190:2:1289
-5191:2:1290
-5192:2:1284
-5193:2:1285
-5194:2:1289
-5195:2:1290
-5196:2:1298
-5197:2:1303
-5198:2:1307
-5199:2:1308
-5200:2:1315
-5201:2:1316
-5202:2:1327
-5203:2:1328
-5204:2:1329
-5205:2:1327
-5206:2:1328
-5207:2:1329
-5208:2:1340
-5209:2:1345
-5210:2:1346
-5211:0:4365
-5212:2:1358
-5213:0:4365
-5214:2:1360
-5215:0:4365
-5216:3:3757
-5217:0:4365
-5218:2:1361
-5219:0:4365
-5220:3:3758
-5221:0:4365
-5222:2:1362
-5223:2:1366
-5224:2:1367
-5225:2:1375
-5226:2:1376
-5227:2:1380
-5228:2:1381
-5229:2:1375
-5230:2:1376
-5231:2:1380
-5232:2:1381
-5233:2:1389
-5234:2:1394
-5235:2:1398
-5236:2:1399
-5237:2:1406
-5238:2:1407
-5239:2:1418
-5240:2:1419
-5241:2:1420
-5242:2:1418
-5243:2:1419
-5244:2:1420
-5245:2:1431
-5246:2:1436
-5247:2:1437
-5248:0:4365
-5249:2:1449
-5250:0:4365
-5251:3:3757
-5252:0:4365
-5253:2:1451
-5254:0:4365
-5255:3:3758
-5256:0:4365
-5257:2:1652
-5258:0:4365
-5259:2:1653
-5260:0:4365
-5261:2:1657
-5262:0:4365
-5263:2:1180
-5264:0:4365
-5265:3:3757
-5266:0:4365
-5267:2:1181
-5268:2:1185
-5269:2:1186
-5270:2:1194
-5271:2:1195
-5272:2:1199
-5273:2:1200
-5274:2:1194
-5275:2:1195
-5276:2:1196
-5277:2:1208
-5278:2:1213
-5279:2:1217
-5280:2:1218
-5281:2:1225
-5282:2:1226
-5283:2:1237
-5284:2:1238
-5285:2:1239
-5286:2:1237
-5287:2:1238
-5288:2:1239
-5289:2:1250
-5290:2:1255
-5291:2:1256
-5292:0:4365
-5293:3:3758
-5294:0:4365
-5295:2:1268
-5296:0:4365
-5297:3:3757
-5298:0:4365
-5299:2:1270
-5300:0:4365
-5301:3:3758
-5302:0:4365
-5303:2:1271
-5304:2:1275
-5305:2:1276
-5306:2:1284
-5307:2:1285
-5308:2:1289
-5309:2:1290
-5310:2:1284
-5311:2:1285
-5312:2:1289
-5313:2:1290
-5314:2:1298
-5315:2:1303
-5316:2:1307
-5317:2:1308
-5318:2:1315
-5319:2:1316
-5320:2:1327
-5321:2:1328
-5322:2:1329
-5323:2:1327
-5324:2:1328
-5325:2:1329
-5326:2:1340
-5327:2:1345
-5328:2:1346
-5329:0:4365
-5330:2:1358
-5331:0:4365
-5332:2:1454
-5333:0:4365
-5334:3:3757
-5335:0:4365
-5336:2:1455
-5337:0:4365
-5338:3:3758
-5339:0:4365
-5340:2:1652
-5341:0:4365
-5342:2:1653
-5343:0:4365
-5344:2:1657
-5345:0:4365
-5346:2:1660
-5347:0:4365
-5348:3:3757
-5349:0:4365
-5350:2:1665
-5351:2:1669
-5352:2:1670
-5353:2:1678
-5354:2:1679
-5355:2:1683
-5356:2:1684
-5357:2:1678
-5358:2:1679
-5359:2:1680
-5360:2:1692
-5361:2:1697
-5362:2:1701
-5363:2:1702
-5364:2:1709
-5365:2:1710
-5366:2:1721
-5367:2:1722
-5368:2:1723
-5369:2:1721
-5370:2:1722
-5371:2:1723
-5372:2:1734
-5373:2:1739
-5374:2:1740
-5375:0:4365
-5376:3:3758
-5377:0:4365
-5378:2:1752
-5379:0:4365
-5380:3:3757
-5381:0:4365
-5382:2:1754
-5383:0:4365
-5384:3:3758
-5385:0:4365
-5386:2:1755
-5387:2:1759
-5388:2:1760
-5389:2:1768
-5390:2:1769
-5391:2:1773
-5392:2:1774
-5393:2:1768
-5394:2:1769
-5395:2:1773
-5396:2:1774
-5397:2:1782
-5398:2:1787
-5399:2:1791
-5400:2:1792
-5401:2:1799
-5402:2:1800
-5403:2:1811
-5404:2:1812
-5405:2:1813
-5406:2:1811
-5407:2:1812
-5408:2:1813
-5409:2:1824
-5410:2:1829
-5411:2:1830
-5412:0:4365
-5413:2:1842
-5414:0:4365
-5415:3:3757
-5416:0:4365
-5417:2:1844
-5418:0:4365
-5419:3:3758
-5420:0:4365
-5421:2:1845
-5422:2:1849
-5423:2:1850
-5424:2:1858
-5425:2:1859
-5426:2:1863
-5427:2:1864
-5428:2:1858
-5429:2:1859
-5430:2:1863
-5431:2:1864
-5432:2:1872
-5433:2:1877
-5434:2:1881
-5435:2:1882
-5436:2:1889
-5437:2:1890
-5438:2:1901
-5439:2:1902
-5440:2:1903
-5441:2:1901
-5442:2:1902
-5443:2:1903
-5444:2:1914
-5445:2:1919
-5446:2:1920
-5447:0:4365
-5448:2:1932
-5449:0:4365
-5450:3:3757
-5451:0:4365
-5452:2:1934
-5453:0:4365
-5454:3:3758
-5455:0:4365
-5456:2:1935
-5457:0:4365
-5458:2:1936
-5459:0:4365
-5460:2:2129
-5461:0:4365
-5462:2:2130
-5463:0:4365
-5464:2:2134
-5465:0:4365
-5466:3:3757
-5467:0:4365
-5468:2:2136
-5469:0:4365
-5470:3:3758
-5471:0:4365
-5472:2:2137
-5473:2:2141
-5474:2:2142
-5475:2:2150
-5476:2:2151
-5477:2:2155
-5478:2:2156
-5479:2:2150
-5480:2:2151
-5481:2:2155
-5482:2:2156
-5483:2:2164
-5484:2:2169
-5485:2:2173
-5486:2:2174
-5487:2:2181
-5488:2:2182
-5489:2:2193
-5490:2:2194
-5491:2:2195
-5492:2:2193
-5493:2:2194
-5494:2:2195
-5495:2:2206
-5496:2:2211
-5497:2:2212
-5498:0:4365
-5499:2:2224
-5500:0:4365
-5501:3:3757
-5502:0:4365
-5503:2:2226
-5504:0:4365
-5505:3:3758
-5506:0:4365
-5507:2:1936
-5508:0:4365
-5509:2:2129
-5510:0:4365
-5511:2:2130
-5512:0:4365
-5513:2:2134
-5514:0:4365
-5515:3:3757
-5516:0:4365
-5517:2:2136
-5518:0:4365
-5519:3:3758
-5520:0:4365
-5521:2:2137
-5522:2:2141
-5523:2:2142
-5524:2:2150
-5525:2:2151
-5526:2:2155
-5527:2:2156
-5528:2:2150
-5529:2:2151
-5530:2:2152
-5531:2:2164
-5532:2:2169
-5533:2:2173
-5534:2:2174
-5535:2:2181
-5536:2:2182
-5537:2:2193
-5538:2:2194
-5539:2:2195
-5540:2:2193
-5541:2:2194
-5542:2:2195
-5543:2:2206
-5544:2:2211
-5545:2:2212
-5546:0:4365
-5547:2:2224
-5548:0:4365
-5549:3:3757
-5550:0:4365
-5551:2:2226
-5552:0:4365
-5553:3:3758
-5554:0:4365
-5555:2:2230
-5556:0:4365
-5557:3:3757
-5558:0:4365
-5559:2:2235
-5560:2:2239
-5561:2:2240
-5562:2:2248
-5563:2:2249
-5564:2:2253
-5565:2:2254
-5566:2:2248
-5567:2:2249
-5568:2:2250
-5569:2:2262
-5570:2:2267
-5571:2:2271
-5572:2:2272
-5573:2:2279
-5574:2:2280
-5575:2:2291
-5576:2:2292
-5577:2:2293
-5578:2:2291
-5579:2:2292
-5580:2:2293
-5581:2:2304
-5582:2:2309
-5583:2:2310
-5584:0:4365
-5585:3:3758
-5586:0:4365
-5587:2:2322
-5588:0:4365
-5589:2:1169
-5590:0:4365
-5591:3:3757
-5592:0:4365
-5593:2:1170
-5594:0:4365
-5595:3:3758
-5596:0:4365
-5597:3:3759
-5598:0:4365
-5599:3:3972
-5600:0:4365
-5601:3:3980
-5602:0:4365
-5603:3:3981
-5604:3:3985
-5605:3:3986
-5606:3:3994
-5607:3:3995
-5608:3:3999
-5609:3:4000
-5610:3:3994
-5611:3:3995
-5612:3:3999
-5613:3:4000
-5614:3:4008
-5615:3:4013
-5616:3:4017
-5617:3:4018
-5618:3:4025
-5619:3:4026
-5620:3:4037
-5621:3:4038
-5622:3:4039
-5623:3:4037
-5624:3:4038
-5625:3:4039
-5626:3:4050
-5627:3:4055
-5628:3:4056
-5629:0:4365
-5630:3:4068
-5631:0:4365
-5632:3:4069
-5633:0:4365
-5634:2:1173
-5635:0:4365
-5636:3:4070
-5637:0:4365
-5638:2:1179
-5639:0:4365
-5640:2:1180
-5641:0:4365
-5642:3:4069
-5643:0:4365
-5644:2:1181
-5645:2:1185
-5646:2:1186
-5647:2:1194
-5648:2:1195
-5649:2:1199
-5650:2:1200
-5651:2:1194
-5652:2:1195
-5653:2:1199
-5654:2:1200
-5655:2:1208
-5656:2:1213
-5657:2:1217
-5658:2:1218
-5659:2:1225
-5660:2:1226
-5661:2:1237
-5662:2:1238
-5663:2:1239
-5664:2:1237
-5665:2:1238
-5666:2:1239
-5667:2:1250
-5668:2:1255
-5669:2:1256
-5670:0:4365
-5671:3:4070
-5672:0:4365
-5673:2:1268
-5674:0:4365
-5675:3:4069
-5676:0:4365
-5677:2:1270
-5678:0:4365
-5679:3:4070
-5680:0:4365
-5681:2:1271
-5682:2:1275
-5683:2:1276
-5684:2:1284
-5685:2:1285
-5686:2:1289
-5687:2:1290
-5688:2:1284
-5689:2:1285
-5690:2:1289
-5691:2:1290
-5692:2:1298
-5693:2:1303
-5694:2:1307
-5695:2:1308
-5696:2:1315
-5697:2:1316
-5698:2:1327
-5699:2:1328
-5700:2:1329
-5701:2:1327
-5702:2:1328
-5703:2:1329
-5704:2:1340
-5705:2:1345
-5706:2:1346
-5707:0:4365
-5708:2:1358
-5709:0:4365
-5710:2:1360
-5711:0:4365
-5712:3:4069
-5713:0:4365
-5714:2:1361
-5715:0:4365
-5716:3:4070
-5717:0:4365
-5718:2:1362
-5719:2:1366
-5720:2:1367
-5721:2:1375
-5722:2:1376
-5723:2:1380
-5724:2:1381
-5725:2:1375
-5726:2:1376
-5727:2:1380
-5728:2:1381
-5729:2:1389
-5730:2:1394
-5731:2:1398
-5732:2:1399
-5733:2:1406
-5734:2:1407
-5735:2:1418
-5736:2:1419
-5737:2:1420
-5738:2:1418
-5739:2:1419
-5740:2:1420
-5741:2:1431
-5742:2:1436
-5743:2:1437
-5744:0:4365
-5745:2:1449
-5746:0:4365
-5747:3:4069
-5748:0:4365
-5749:2:1451
-5750:0:4365
-5751:3:4070
-5752:0:4365
-5753:2:1652
-5754:0:4365
-5755:2:1653
-5756:0:4365
-5757:2:1657
-5758:0:4365
-5759:2:1180
-5760:0:4365
-5761:3:4069
-5762:0:4365
-5763:2:1181
-5764:2:1185
-5765:2:1186
-5766:2:1194
-5767:2:1195
-5768:2:1199
-5769:2:1200
-5770:2:1194
-5771:2:1195
-5772:2:1196
-5773:2:1208
-5774:2:1213
-5775:2:1217
-5776:2:1218
-5777:2:1225
-5778:2:1226
-5779:2:1237
-5780:2:1238
-5781:2:1239
-5782:2:1237
-5783:2:1238
-5784:2:1239
-5785:2:1250
-5786:2:1255
-5787:2:1256
-5788:0:4365
-5789:3:4070
-5790:0:4365
-5791:2:1268
-5792:0:4365
-5793:3:4069
-5794:0:4365
-5795:2:1270
-5796:0:4365
-5797:3:4070
-5798:0:4365
-5799:2:1271
-5800:2:1275
-5801:2:1276
-5802:2:1284
-5803:2:1285
-5804:2:1289
-5805:2:1290
-5806:2:1284
-5807:2:1285
-5808:2:1289
-5809:2:1290
-5810:2:1298
-5811:2:1303
-5812:2:1307
-5813:2:1308
-5814:2:1315
-5815:2:1316
-5816:2:1327
-5817:2:1328
-5818:2:1329
-5819:2:1327
-5820:2:1328
-5821:2:1329
-5822:2:1340
-5823:2:1345
-5824:2:1346
-5825:0:4365
-5826:2:1358
-5827:0:4365
-5828:2:1454
-5829:0:4365
-5830:3:4069
-5831:0:4365
-5832:2:1455
-5833:0:4365
-5834:3:4070
-5835:0:4365
-5836:2:1652
-5837:0:4365
-5838:2:1653
-5839:0:4365
-5840:2:1657
-5841:0:4365
-5842:2:1660
-5843:0:4365
-5844:3:4069
-5845:0:4365
-5846:2:1665
-5847:2:1669
-5848:2:1670
-5849:2:1678
-5850:2:1679
-5851:2:1683
-5852:2:1684
-5853:2:1678
-5854:2:1679
-5855:2:1680
-5856:2:1692
-5857:2:1697
-5858:2:1701
-5859:2:1702
-5860:2:1709
-5861:2:1710
-5862:2:1721
-5863:2:1722
-5864:2:1723
-5865:2:1721
-5866:2:1722
-5867:2:1723
-5868:2:1734
-5869:2:1739
-5870:2:1740
-5871:0:4365
-5872:3:4070
-5873:0:4365
-5874:2:1752
-5875:0:4365
-5876:3:4069
-5877:0:4365
-5878:2:1754
-5879:0:4365
-5880:3:4070
-5881:0:4365
-5882:2:1755
-5883:2:1759
-5884:2:1760
-5885:2:1768
-5886:2:1769
-5887:2:1773
-5888:2:1774
-5889:2:1768
-5890:2:1769
-5891:2:1773
-5892:2:1774
-5893:2:1782
-5894:2:1787
-5895:2:1791
-5896:2:1792
-5897:2:1799
-5898:2:1800
-5899:2:1811
-5900:2:1812
-5901:2:1813
-5902:2:1811
-5903:2:1812
-5904:2:1813
-5905:2:1824
-5906:2:1829
-5907:2:1830
-5908:0:4365
-5909:2:1842
-5910:0:4365
-5911:3:4069
-5912:0:4365
-5913:2:1844
-5914:0:4365
-5915:3:4070
-5916:0:4365
-5917:2:1845
-5918:2:1849
-5919:2:1850
-5920:2:1858
-5921:2:1859
-5922:2:1863
-5923:2:1864
-5924:2:1858
-5925:2:1859
-5926:2:1863
-5927:2:1864
-5928:2:1872
-5929:2:1877
-5930:2:1881
-5931:2:1882
-5932:2:1889
-5933:2:1890
-5934:2:1901
-5935:2:1902
-5936:2:1903
-5937:2:1901
-5938:2:1902
-5939:2:1903
-5940:2:1914
-5941:2:1919
-5942:2:1920
-5943:0:4365
-5944:2:1932
-5945:0:4365
-5946:3:4069
-5947:0:4365
-5948:2:1934
-5949:0:4365
-5950:3:4070
-5951:0:4365
-5952:2:1935
-5953:0:4365
-5954:2:1936
-5955:0:4365
-5956:2:2129
-5957:0:4365
-5958:2:2130
-5959:0:4365
-5960:2:2134
-5961:0:4365
-5962:3:4069
-5963:0:4365
-5964:2:2136
-5965:0:4365
-5966:3:4070
-5967:0:4365
-5968:2:2137
-5969:2:2141
-5970:2:2142
-5971:2:2150
-5972:2:2151
-5973:2:2155
-5974:2:2156
-5975:2:2150
-5976:2:2151
-5977:2:2155
-5978:2:2156
-5979:2:2164
-5980:2:2169
-5981:2:2173
-5982:2:2174
-5983:2:2181
-5984:2:2182
-5985:2:2193
-5986:2:2194
-5987:2:2195
-5988:2:2193
-5989:2:2194
-5990:2:2195
-5991:2:2206
-5992:2:2211
-5993:2:2212
-5994:0:4365
-5995:2:2224
-5996:0:4365
-5997:3:4069
-5998:0:4365
-5999:2:2226
-6000:0:4365
-6001:3:4070
-6002:0:4365
-6003:2:1936
-6004:0:4365
-6005:2:2129
-6006:0:4365
-6007:2:2130
-6008:0:4365
-6009:2:2134
-6010:0:4365
-6011:3:4069
-6012:0:4365
-6013:2:2136
-6014:0:4365
-6015:3:4070
-6016:0:4365
-6017:2:2137
-6018:2:2141
-6019:2:2142
-6020:2:2150
-6021:2:2151
-6022:2:2155
-6023:2:2156
-6024:2:2150
-6025:2:2151
-6026:2:2152
-6027:2:2164
-6028:2:2169
-6029:2:2173
-6030:2:2174
-6031:2:2181
-6032:2:2182
-6033:2:2193
-6034:2:2194
-6035:2:2195
-6036:2:2193
-6037:2:2194
-6038:2:2195
-6039:2:2206
-6040:2:2211
-6041:2:2212
-6042:0:4365
-6043:2:2224
-6044:0:4365
-6045:3:4069
-6046:0:4365
-6047:2:2226
-6048:0:4365
-6049:3:4070
-6050:0:4365
-6051:2:2230
-6052:0:4365
-6053:3:4069
-6054:0:4365
-6055:2:2235
-6056:2:2239
-6057:2:2240
-6058:2:2248
-6059:2:2249
-6060:2:2253
-6061:2:2254
-6062:2:2248
-6063:2:2249
-6064:2:2250
-6065:2:2262
-6066:2:2267
-6067:2:2271
-6068:2:2272
-6069:2:2279
-6070:2:2280
-6071:2:2291
-6072:2:2292
-6073:2:2293
-6074:2:2291
-6075:2:2292
-6076:2:2293
-6077:2:2304
-6078:2:2309
-6079:2:2310
-6080:0:4365
-6081:3:4070
-6082:0:4365
-6083:2:2322
-6084:0:4365
-6085:2:1169
-6086:0:4365
-6087:3:4069
-6088:0:4365
-6089:2:1170
-6090:0:4365
-6091:3:4070
-6092:0:4365
-6093:3:4071
-6094:0:4365
-6095:3:4081
-6096:0:4365
-6097:3:3666
-6098:0:4365
-6099:3:3667
-6100:0:4365
-6101:3:3668
-6102:0:4365
-6103:3:3669
-6104:3:3673
-6105:3:3674
-6106:3:3682
-6107:3:3683
-6108:3:3687
-6109:3:3688
-6110:3:3682
-6111:3:3683
-6112:3:3687
-6113:3:3688
-6114:3:3696
-6115:3:3701
-6116:3:3705
-6117:3:3706
-6118:3:3713
-6119:3:3714
-6120:3:3725
-6121:3:3726
-6122:3:3727
-6123:3:3725
-6124:3:3726
-6125:3:3727
-6126:3:3738
-6127:3:3743
-6128:3:3744
-6129:0:4365
-6130:3:3756
-6131:0:4365
-6132:3:3757
-6133:0:4365
-6134:2:1173
-6135:0:4365
-6136:3:3758
-6137:0:4365
-6138:2:1179
-6139:0:4365
-6140:2:1180
-6141:0:4365
-6142:3:3757
-6143:0:4365
-6144:2:1181
-6145:2:1185
-6146:2:1186
-6147:2:1194
-6148:2:1195
-6149:2:1199
-6150:2:1200
-6151:2:1194
-6152:2:1195
-6153:2:1199
-6154:2:1200
-6155:2:1208
-6156:2:1213
-6157:2:1217
-6158:2:1218
-6159:2:1225
-6160:2:1226
-6161:2:1237
-6162:2:1238
-6163:2:1239
-6164:2:1237
-6165:2:1238
-6166:2:1239
-6167:2:1250
-6168:2:1255
-6169:2:1256
-6170:0:4365
-6171:3:3758
-6172:0:4365
-6173:2:1268
-6174:0:4365
-6175:3:3757
-6176:0:4365
-6177:2:1270
-6178:0:4365
-6179:3:3758
-6180:0:4365
-6181:2:1271
-6182:2:1275
-6183:2:1276
-6184:2:1284
-6185:2:1285
-6186:2:1289
-6187:2:1290
-6188:2:1284
-6189:2:1285
-6190:2:1289
-6191:2:1290
-6192:2:1298
-6193:2:1303
-6194:2:1307
-6195:2:1308
-6196:2:1315
-6197:2:1316
-6198:2:1327
-6199:2:1328
-6200:2:1329
-6201:2:1327
-6202:2:1328
-6203:2:1329
-6204:2:1340
-6205:2:1345
-6206:2:1346
-6207:0:4365
-6208:2:1358
-6209:0:4365
-6210:2:1360
-6211:0:4365
-6212:3:3757
-6213:0:4365
-6214:2:1361
-6215:0:4365
-6216:3:3758
-6217:0:4365
-6218:2:1362
-6219:2:1366
-6220:2:1367
-6221:2:1375
-6222:2:1376
-6223:2:1380
-6224:2:1381
-6225:2:1375
-6226:2:1376
-6227:2:1380
-6228:2:1381
-6229:2:1389
-6230:2:1394
-6231:2:1398
-6232:2:1399
-6233:2:1406
-6234:2:1407
-6235:2:1418
-6236:2:1419
-6237:2:1420
-6238:2:1418
-6239:2:1419
-6240:2:1420
-6241:2:1431
-6242:2:1436
-6243:2:1437
-6244:0:4365
-6245:2:1449
-6246:0:4365
-6247:3:3757
-6248:0:4365
-6249:2:1451
-6250:0:4365
-6251:3:3758
-6252:0:4365
-6253:2:1652
-6254:0:4365
-6255:2:1653
-6256:0:4365
-6257:2:1657
-6258:0:4365
-6259:2:1180
-6260:0:4365
-6261:3:3757
-6262:0:4365
-6263:2:1181
-6264:2:1185
-6265:2:1186
-6266:2:1194
-6267:2:1195
-6268:2:1199
-6269:2:1200
-6270:2:1194
-6271:2:1195
-6272:2:1196
-6273:2:1208
-6274:2:1213
-6275:2:1217
-6276:2:1218
-6277:2:1225
-6278:2:1226
-6279:2:1237
-6280:2:1238
-6281:2:1239
-6282:2:1237
-6283:2:1238
-6284:2:1239
-6285:2:1250
-6286:2:1255
-6287:2:1256
-6288:0:4365
-6289:3:3758
-6290:0:4365
-6291:2:1268
-6292:0:4365
-6293:3:3757
-6294:0:4365
-6295:2:1270
-6296:0:4365
-6297:3:3758
-6298:0:4365
-6299:2:1271
-6300:2:1275
-6301:2:1276
-6302:2:1284
-6303:2:1285
-6304:2:1289
-6305:2:1290
-6306:2:1284
-6307:2:1285
-6308:2:1289
-6309:2:1290
-6310:2:1298
-6311:2:1303
-6312:2:1307
-6313:2:1308
-6314:2:1315
-6315:2:1316
-6316:2:1327
-6317:2:1328
-6318:2:1329
-6319:2:1327
-6320:2:1328
-6321:2:1329
-6322:2:1340
-6323:2:1345
-6324:2:1346
-6325:0:4365
-6326:2:1358
-6327:0:4365
-6328:2:1454
-6329:0:4365
-6330:3:3757
-6331:0:4365
-6332:2:1455
-6333:0:4365
-6334:3:3758
-6335:0:4365
-6336:2:1652
-6337:0:4365
-6338:2:1653
-6339:0:4365
-6340:2:1657
-6341:0:4365
-6342:2:1660
-6343:0:4365
-6344:3:3757
-6345:0:4365
-6346:2:1665
-6347:2:1669
-6348:2:1670
-6349:2:1678
-6350:2:1679
-6351:2:1683
-6352:2:1684
-6353:2:1678
-6354:2:1679
-6355:2:1680
-6356:2:1692
-6357:2:1697
-6358:2:1701
-6359:2:1702
-6360:2:1709
-6361:2:1710
-6362:2:1721
-6363:2:1722
-6364:2:1723
-6365:2:1721
-6366:2:1722
-6367:2:1723
-6368:2:1734
-6369:2:1739
-6370:2:1740
-6371:0:4365
-6372:3:3758
-6373:0:4365
-6374:2:1752
-6375:0:4365
-6376:3:3757
-6377:0:4365
-6378:2:1754
-6379:0:4365
-6380:3:3758
-6381:0:4365
-6382:2:1755
-6383:2:1759
-6384:2:1760
-6385:2:1768
-6386:2:1769
-6387:2:1773
-6388:2:1774
-6389:2:1768
-6390:2:1769
-6391:2:1773
-6392:2:1774
-6393:2:1782
-6394:2:1787
-6395:2:1791
-6396:2:1792
-6397:2:1799
-6398:2:1800
-6399:2:1811
-6400:2:1812
-6401:2:1813
-6402:2:1811
-6403:2:1812
-6404:2:1813
-6405:2:1824
-6406:2:1829
-6407:2:1830
-6408:0:4365
-6409:2:1842
-6410:0:4365
-6411:3:3757
-6412:0:4365
-6413:2:1844
-6414:0:4365
-6415:3:3758
-6416:0:4365
-6417:2:1845
-6418:2:1849
-6419:2:1850
-6420:2:1858
-6421:2:1859
-6422:2:1863
-6423:2:1864
-6424:2:1858
-6425:2:1859
-6426:2:1863
-6427:2:1864
-6428:2:1872
-6429:2:1877
-6430:2:1881
-6431:2:1882
-6432:2:1889
-6433:2:1890
-6434:2:1901
-6435:2:1902
-6436:2:1903
-6437:2:1901
-6438:2:1902
-6439:2:1903
-6440:2:1914
-6441:2:1919
-6442:2:1920
-6443:0:4365
-6444:2:1932
-6445:0:4365
-6446:3:3757
-6447:0:4365
-6448:2:1934
-6449:0:4365
-6450:3:3758
-6451:0:4365
-6452:2:1935
-6453:0:4365
-6454:2:1936
-6455:0:4365
-6456:2:2129
-6457:0:4365
-6458:2:2130
-6459:0:4365
-6460:2:2134
-6461:0:4365
-6462:3:3757
-6463:0:4365
-6464:2:2136
-6465:0:4365
-6466:3:3758
-6467:0:4365
-6468:2:2137
-6469:2:2141
-6470:2:2142
-6471:2:2150
-6472:2:2151
-6473:2:2155
-6474:2:2156
-6475:2:2150
-6476:2:2151
-6477:2:2155
-6478:2:2156
-6479:2:2164
-6480:2:2169
-6481:2:2173
-6482:2:2174
-6483:2:2181
-6484:2:2182
-6485:2:2193
-6486:2:2194
-6487:2:2195
-6488:2:2193
-6489:2:2194
-6490:2:2195
-6491:2:2206
-6492:2:2211
-6493:2:2212
-6494:0:4365
-6495:2:2224
-6496:0:4365
-6497:3:3757
-6498:0:4365
-6499:2:2226
-6500:0:4365
-6501:3:3758
-6502:0:4365
-6503:2:1936
-6504:0:4365
-6505:2:2129
-6506:0:4365
-6507:2:2130
-6508:0:4365
-6509:2:2134
-6510:0:4365
-6511:3:3757
-6512:0:4365
-6513:2:2136
-6514:0:4365
-6515:3:3758
-6516:0:4365
-6517:2:2137
-6518:2:2141
-6519:2:2142
-6520:2:2150
-6521:2:2151
-6522:2:2155
-6523:2:2156
-6524:2:2150
-6525:2:2151
-6526:2:2152
-6527:2:2164
-6528:2:2169
-6529:2:2173
-6530:2:2174
-6531:2:2181
-6532:2:2182
-6533:2:2193
-6534:2:2194
-6535:2:2195
-6536:2:2193
-6537:2:2194
-6538:2:2195
-6539:2:2206
-6540:2:2211
-6541:2:2212
-6542:0:4365
-6543:2:2224
-6544:0:4365
-6545:3:3757
-6546:0:4365
-6547:2:2226
-6548:0:4365
-6549:3:3758
-6550:0:4365
-6551:2:2230
-6552:0:4365
-6553:3:3757
-6554:0:4365
-6555:2:2235
-6556:2:2239
-6557:2:2240
-6558:2:2248
-6559:2:2249
-6560:2:2253
-6561:2:2254
-6562:2:2248
-6563:2:2249
-6564:2:2250
-6565:2:2262
-6566:2:2267
-6567:2:2271
-6568:2:2272
-6569:2:2279
-6570:2:2280
-6571:2:2291
-6572:2:2292
-6573:2:2293
-6574:2:2291
-6575:2:2292
-6576:2:2293
-6577:2:2304
-6578:2:2309
-6579:2:2310
-6580:0:4365
-6581:3:3758
-6582:0:4365
-6583:2:2322
-6584:0:4365
-6585:2:1169
-6586:0:4365
-6587:3:3757
-6588:0:4365
-6589:2:1170
-6590:0:4365
-6591:3:3758
-6592:0:4365
-6593:3:3759
-6594:0:4365
-6595:3:3972
-6596:0:4365
-6597:3:4077
-6598:0:4365
-6599:3:4078
-6600:0:4365
-6601:3:4082
-6602:0:4365
-6603:3:4088
-6604:0:4365
-6605:3:4092
-6606:3:4093
-6607:3:4097
-6608:3:4101
-6609:3:4102
-6610:3:4097
-6611:3:4101
-6612:3:4102
-6613:3:4106
-6614:3:4114
-6615:3:4115
-6616:3:4120
-6617:3:4127
-6618:3:4128
-6619:3:4127
-6620:3:4128
-6621:3:4135
-6622:3:4140
-6623:0:4365
-6624:3:4151
-6625:0:4365
-6626:3:4155
-6627:3:4156
-6628:3:4160
-6629:3:4164
-6630:3:4165
-6631:3:4160
-6632:3:4164
-6633:3:4165
-6634:3:4169
-6635:3:4177
-6636:3:4178
-6637:3:4183
-6638:3:4190
-6639:3:4191
-6640:3:4190
-6641:3:4191
-6642:3:4198
-6643:3:4203
-6644:0:4365
-6645:3:4151
-6646:0:4365
-6647:3:4155
-6648:3:4156
-6649:3:4160
-6650:3:4164
-6651:3:4165
-6652:3:4160
-6653:3:4164
-6654:3:4165
-6655:3:4169
-6656:3:4177
-6657:3:4178
-6658:3:4183
-6659:3:4190
-6660:3:4191
-6661:3:4190
-6662:3:4191
-6663:3:4198
-6664:3:4203
-6665:0:4365
-6666:3:4214
-6667:0:4365
-6668:3:4222
-6669:3:4223
-6670:3:4227
-6671:3:4231
-6672:3:4232
-6673:3:4227
-6674:3:4231
-6675:3:4232
-6676:3:4236
-6677:3:4244
-6678:3:4245
-6679:3:4250
-6680:3:4257
-6681:3:4258
-6682:3:4257
-6683:3:4258
-6684:3:4265
-6685:3:4270
-6686:0:4365
-6687:3:4285
-6688:0:4365
-6689:3:4286
-6690:0:4365
-6691:2:1173
-6692:0:4365
-6693:3:4287
-6694:0:4365
-6695:2:1179
-6696:0:4365
-6697:2:1180
-6698:0:4365
-6699:3:4286
-6700:0:4365
-6701:2:1181
-6702:2:1185
-6703:2:1186
-6704:2:1194
-6705:2:1195
-6706:2:1199
-6707:2:1200
-6708:2:1194
-6709:2:1195
-6710:2:1199
-6711:2:1200
-6712:2:1208
-6713:2:1213
-6714:2:1217
-6715:2:1218
-6716:2:1225
-6717:2:1226
-6718:2:1237
-6719:2:1238
-6720:2:1239
-6721:2:1237
-6722:2:1238
-6723:2:1239
-6724:2:1250
-6725:2:1255
-6726:2:1256
-6727:0:4365
-6728:3:4287
-6729:0:4365
-6730:2:1268
-6731:0:4365
-6732:3:4286
-6733:0:4365
-6734:2:1270
-6735:0:4365
-6736:3:4287
-6737:0:4365
-6738:2:1271
-6739:2:1275
-6740:2:1276
-6741:2:1284
-6742:2:1285
-6743:2:1289
-6744:2:1290
-6745:2:1284
-6746:2:1285
-6747:2:1289
-6748:2:1290
-6749:2:1298
-6750:2:1303
-6751:2:1307
-6752:2:1308
-6753:2:1315
-6754:2:1316
-6755:2:1327
-6756:2:1328
-6757:2:1329
-6758:2:1327
-6759:2:1328
-6760:2:1329
-6761:2:1340
-6762:2:1345
-6763:2:1346
-6764:0:4365
-6765:2:1358
-6766:0:4365
-6767:2:1360
-6768:0:4365
-6769:3:4286
-6770:0:4365
-6771:2:1361
-6772:0:4365
-6773:3:4287
-6774:0:4365
-6775:2:1362
-6776:2:1366
-6777:2:1367
-6778:2:1375
-6779:2:1376
-6780:2:1380
-6781:2:1381
-6782:2:1375
-6783:2:1376
-6784:2:1380
-6785:2:1381
-6786:2:1389
-6787:2:1394
-6788:2:1398
-6789:2:1399
-6790:2:1406
-6791:2:1407
-6792:2:1418
-6793:2:1419
-6794:2:1420
-6795:2:1418
-6796:2:1419
-6797:2:1420
-6798:2:1431
-6799:2:1436
-6800:2:1437
-6801:0:4365
-6802:2:1449
-6803:0:4365
-6804:3:4286
-6805:0:4365
-6806:2:1451
-6807:0:4365
-6808:3:4287
-6809:0:4365
-6810:2:1652
-6811:0:4365
-6812:2:1653
-6813:0:4365
-6814:2:1657
-6815:0:4365
-6816:2:1180
-6817:0:4365
-6818:3:4286
-6819:0:4365
-6820:2:1181
-6821:2:1185
-6822:2:1186
-6823:2:1194
-6824:2:1195
-6825:2:1199
-6826:2:1200
-6827:2:1194
-6828:2:1195
-6829:2:1196
-6830:2:1208
-6831:2:1213
-6832:2:1217
-6833:2:1218
-6834:2:1225
-6835:2:1226
-6836:2:1237
-6837:2:1238
-6838:2:1239
-6839:2:1237
-6840:2:1238
-6841:2:1239
-6842:2:1250
-6843:2:1255
-6844:2:1256
-6845:0:4365
-6846:3:4287
-6847:0:4365
-6848:2:1268
-6849:0:4365
-6850:3:4286
-6851:0:4365
-6852:2:1270
-6853:0:4365
-6854:3:4287
-6855:0:4365
-6856:2:1271
-6857:2:1275
-6858:2:1276
-6859:2:1284
-6860:2:1285
-6861:2:1289
-6862:2:1290
-6863:2:1284
-6864:2:1285
-6865:2:1289
-6866:2:1290
-6867:2:1298
-6868:2:1303
-6869:2:1307
-6870:2:1308
-6871:2:1315
-6872:2:1316
-6873:2:1327
-6874:2:1328
-6875:2:1329
-6876:2:1327
-6877:2:1328
-6878:2:1329
-6879:2:1340
-6880:2:1345
-6881:2:1346
-6882:0:4365
-6883:2:1358
-6884:0:4365
-6885:2:1454
-6886:0:4365
-6887:3:4286
-6888:0:4365
-6889:2:1455
-6890:0:4365
-6891:3:4287
-6892:0:4365
-6893:2:1652
-6894:0:4365
-6895:2:1653
-6896:0:4365
-6897:2:1657
-6898:0:4365
-6899:2:1660
-6900:0:4365
-6901:3:4286
-6902:0:4365
-6903:2:1665
-6904:2:1669
-6905:2:1670
-6906:2:1678
-6907:2:1679
-6908:2:1683
-6909:2:1684
-6910:2:1678
-6911:2:1679
-6912:2:1680
-6913:2:1692
-6914:2:1697
-6915:2:1701
-6916:2:1702
-6917:2:1709
-6918:2:1710
-6919:2:1721
-6920:2:1722
-6921:2:1723
-6922:2:1721
-6923:2:1722
-6924:2:1723
-6925:2:1734
-6926:2:1739
-6927:2:1740
-6928:0:4365
-6929:3:4287
-6930:0:4365
-6931:2:1752
-6932:0:4365
-6933:3:4286
-6934:0:4365
-6935:2:1754
-6936:0:4365
-6937:3:4287
-6938:0:4365
-6939:2:1755
-6940:2:1759
-6941:2:1760
-6942:2:1768
-6943:2:1769
-6944:2:1773
-6945:2:1774
-6946:2:1768
-6947:2:1769
-6948:2:1773
-6949:2:1774
-6950:2:1782
-6951:2:1787
-6952:2:1791
-6953:2:1792
-6954:2:1799
-6955:2:1800
-6956:2:1811
-6957:2:1812
-6958:2:1813
-6959:2:1811
-6960:2:1812
-6961:2:1813
-6962:2:1824
-6963:2:1829
-6964:2:1830
-6965:0:4365
-6966:2:1842
-6967:0:4365
-6968:3:4286
-6969:0:4365
-6970:2:1844
-6971:0:4365
-6972:3:4287
-6973:0:4365
-6974:2:1845
-6975:2:1849
-6976:2:1850
-6977:2:1858
-6978:2:1859
-6979:2:1863
-6980:2:1864
-6981:2:1858
-6982:2:1859
-6983:2:1863
-6984:2:1864
-6985:2:1872
-6986:2:1877
-6987:2:1881
-6988:2:1882
-6989:2:1889
-6990:2:1890
-6991:2:1901
-6992:2:1902
-6993:2:1903
-6994:2:1901
-6995:2:1902
-6996:2:1903
-6997:2:1914
-6998:2:1919
-6999:2:1920
-7000:0:4365
-7001:2:1932
-7002:0:4365
-7003:3:4286
-7004:0:4365
-7005:2:1934
-7006:0:4365
-7007:3:4287
-7008:0:4365
-7009:2:1935
-7010:0:4365
-7011:2:1936
-7012:0:4365
-7013:2:2129
-7014:0:4365
-7015:2:2130
-7016:0:4365
-7017:2:2134
-7018:0:4365
-7019:3:4286
-7020:0:4365
-7021:2:2136
-7022:0:4365
-7023:3:4287
-7024:0:4365
-7025:2:2137
-7026:2:2141
-7027:2:2142
-7028:2:2150
-7029:2:2151
-7030:2:2155
-7031:2:2156
-7032:2:2150
-7033:2:2151
-7034:2:2155
-7035:2:2156
-7036:2:2164
-7037:2:2169
-7038:2:2173
-7039:2:2174
-7040:2:2181
-7041:2:2182
-7042:2:2193
-7043:2:2194
-7044:2:2195
-7045:2:2193
-7046:2:2194
-7047:2:2195
-7048:2:2206
-7049:2:2211
-7050:2:2212
-7051:0:4365
-7052:2:2224
-7053:0:4365
-7054:3:4286
-7055:0:4365
-7056:2:2226
-7057:0:4365
-7058:3:4287
-7059:0:4365
-7060:2:1936
-7061:0:4365
-7062:2:2129
-7063:0:4365
-7064:2:2130
-7065:0:4365
-7066:2:2134
-7067:0:4365
-7068:3:4286
-7069:0:4365
-7070:2:2136
-7071:0:4365
-7072:3:4287
-7073:0:4365
-7074:2:2137
-7075:2:2141
-7076:2:2142
-7077:2:2150
-7078:2:2151
-7079:2:2155
-7080:2:2156
-7081:2:2150
-7082:2:2151
-7083:2:2152
-7084:2:2164
-7085:2:2169
-7086:2:2173
-7087:2:2174
-7088:2:2181
-7089:2:2182
-7090:2:2193
-7091:2:2194
-7092:2:2195
-7093:2:2193
-7094:2:2194
-7095:2:2195
-7096:2:2206
-7097:2:2211
-7098:2:2212
-7099:0:4365
-7100:2:2224
-7101:0:4365
-7102:3:4286
-7103:0:4365
-7104:2:2226
-7105:0:4365
-7106:3:4287
-7107:0:4365
-7108:2:2230
-7109:0:4365
-7110:3:4286
-7111:0:4365
-7112:2:2235
-7113:2:2239
-7114:2:2240
-7115:2:2248
-7116:2:2249
-7117:2:2253
-7118:2:2254
-7119:2:2248
-7120:2:2249
-7121:2:2250
-7122:2:2262
-7123:2:2267
-7124:2:2271
-7125:2:2272
-7126:2:2279
-7127:2:2280
-7128:2:2291
-7129:2:2292
-7130:2:2293
-7131:2:2291
-7132:2:2292
-7133:2:2293
-7134:2:2304
-7135:2:2309
-7136:2:2310
-7137:0:4365
-7138:3:4287
-7139:0:4365
-7140:2:2322
-7141:0:4365
-7142:2:1169
-7143:0:4365
-7144:3:4286
-7145:0:4365
-7146:2:1170
-7147:0:4365
-7148:3:4287
-7149:0:4365
-7150:3:4288
-7151:0:4365
-7152:3:4294
-7153:0:4365
-7154:3:4295
-7155:0:4365
-7156:3:2338
-7157:0:4365
-7158:3:2339
-7159:3:2343
-7160:3:2344
-7161:3:2352
-7162:3:2353
-7163:3:2357
-7164:3:2358
-7165:3:2352
-7166:3:2353
-7167:3:2357
-7168:3:2358
-7169:3:2366
-7170:3:2371
-7171:3:2375
-7172:3:2376
-7173:3:2383
-7174:3:2384
-7175:3:2395
-7176:3:2396
-7177:3:2397
-7178:3:2395
-7179:3:2396
-7180:3:2397
-7181:3:2408
-7182:3:2413
-7183:3:2414
-7184:0:4365
-7185:3:2426
-7186:0:4365
-7187:3:2427
-7188:0:4365
-7189:2:1173
-7190:0:4365
-7191:3:2428
-7192:0:4365
-7193:2:1179
-7194:0:4365
-7195:2:1180
-7196:0:4365
-7197:3:2427
-7198:0:4365
-7199:2:1181
-7200:2:1185
-7201:2:1186
-7202:2:1194
-7203:2:1195
-7204:2:1199
-7205:2:1200
-7206:2:1194
-7207:2:1195
-7208:2:1199
-7209:2:1200
-7210:2:1208
-7211:2:1213
-7212:2:1217
-7213:2:1218
-7214:2:1225
-7215:2:1226
-7216:2:1237
-7217:2:1238
-7218:2:1239
-7219:2:1237
-7220:2:1238
-7221:2:1239
-7222:2:1250
-7223:2:1255
-7224:2:1256
-7225:0:4365
-7226:3:2428
-7227:0:4365
-7228:2:1268
-7229:0:4365
-7230:3:2427
-7231:0:4365
-7232:2:1270
-7233:0:4365
-7234:3:2428
-7235:0:4365
-7236:2:1271
-7237:2:1275
-7238:2:1276
-7239:2:1284
-7240:2:1285
-7241:2:1289
-7242:2:1290
-7243:2:1284
-7244:2:1285
-7245:2:1289
-7246:2:1290
-7247:2:1298
-7248:2:1303
-7249:2:1307
-7250:2:1308
-7251:2:1315
-7252:2:1316
-7253:2:1327
-7254:2:1328
-7255:2:1329
-7256:2:1327
-7257:2:1328
-7258:2:1329
-7259:2:1340
-7260:2:1345
-7261:2:1346
-7262:0:4365
-7263:2:1358
-7264:0:4365
-7265:2:1360
-7266:0:4365
-7267:3:2427
-7268:0:4365
-7269:2:1361
-7270:0:4365
-7271:3:2428
-7272:0:4365
-7273:2:1362
-7274:2:1366
-7275:2:1367
-7276:2:1375
-7277:2:1376
-7278:2:1380
-7279:2:1381
-7280:2:1375
-7281:2:1376
-7282:2:1380
-7283:2:1381
-7284:2:1389
-7285:2:1394
-7286:2:1398
-7287:2:1399
-7288:2:1406
-7289:2:1407
-7290:2:1418
-7291:2:1419
-7292:2:1420
-7293:2:1418
-7294:2:1419
-7295:2:1420
-7296:2:1431
-7297:2:1436
-7298:2:1437
-7299:0:4365
-7300:2:1449
-7301:0:4365
-7302:3:2427
-7303:0:4365
-7304:2:1451
-7305:0:4365
-7306:3:2428
-7307:0:4365
-7308:2:1652
-7309:0:4365
-7310:2:1653
-7311:0:4365
-7312:2:1657
-7313:0:4365
-7314:2:1180
-7315:0:4365
-7316:3:2427
-7317:0:4365
-7318:2:1181
-7319:2:1185
-7320:2:1186
-7321:2:1194
-7322:2:1195
-7323:2:1199
-7324:2:1200
-7325:2:1194
-7326:2:1195
-7327:2:1196
-7328:2:1208
-7329:2:1213
-7330:2:1217
-7331:2:1218
-7332:2:1225
-7333:2:1226
-7334:2:1237
-7335:2:1238
-7336:2:1239
-7337:2:1237
-7338:2:1238
-7339:2:1239
-7340:2:1250
-7341:2:1255
-7342:2:1256
-7343:0:4365
-7344:3:2428
-7345:0:4365
-7346:2:1268
-7347:0:4365
-7348:3:2427
-7349:0:4365
-7350:2:1270
-7351:0:4365
-7352:3:2428
-7353:0:4365
-7354:2:1271
-7355:2:1275
-7356:2:1276
-7357:2:1284
-7358:2:1285
-7359:2:1289
-7360:2:1290
-7361:2:1284
-7362:2:1285
-7363:2:1289
-7364:2:1290
-7365:2:1298
-7366:2:1303
-7367:2:1307
-7368:2:1308
-7369:2:1315
-7370:2:1316
-7371:2:1327
-7372:2:1328
-7373:2:1329
-7374:2:1327
-7375:2:1328
-7376:2:1329
-7377:2:1340
-7378:2:1345
-7379:2:1346
-7380:0:4365
-7381:2:1358
-7382:0:4365
-7383:2:1454
-7384:0:4365
-7385:3:2427
-7386:0:4365
-7387:2:1455
-7388:0:4365
-7389:3:2428
-7390:0:4365
-7391:2:1652
-7392:0:4365
-7393:2:1653
-7394:0:4365
-7395:2:1657
-7396:0:4365
-7397:2:1660
-7398:0:4365
-7399:3:2427
-7400:0:4365
-7401:2:1665
-7402:2:1669
-7403:2:1670
-7404:2:1678
-7405:2:1679
-7406:2:1683
-7407:2:1684
-7408:2:1678
-7409:2:1679
-7410:2:1680
-7411:2:1692
-7412:2:1697
-7413:2:1701
-7414:2:1702
-7415:2:1709
-7416:2:1710
-7417:2:1721
-7418:2:1722
-7419:2:1723
-7420:2:1721
-7421:2:1722
-7422:2:1723
-7423:2:1734
-7424:2:1739
-7425:2:1740
-7426:0:4365
-7427:3:2428
-7428:0:4365
-7429:2:1752
-7430:0:4365
-7431:3:2427
-7432:0:4365
-7433:2:1754
-7434:0:4365
-7435:3:2428
-7436:0:4365
-7437:2:1755
-7438:2:1759
-7439:2:1760
-7440:2:1768
-7441:2:1769
-7442:2:1773
-7443:2:1774
-7444:2:1768
-7445:2:1769
-7446:2:1773
-7447:2:1774
-7448:2:1782
-7449:2:1787
-7450:2:1791
-7451:2:1792
-7452:2:1799
-7453:2:1800
-7454:2:1811
-7455:2:1812
-7456:2:1813
-7457:2:1811
-7458:2:1812
-7459:2:1813
-7460:2:1824
-7461:2:1829
-7462:2:1830
-7463:0:4365
-7464:2:1842
-7465:0:4365
-7466:3:2427
-7467:0:4365
-7468:2:1844
-7469:0:4365
-7470:3:2428
-7471:0:4365
-7472:2:1845
-7473:2:1849
-7474:2:1850
-7475:2:1858
-7476:2:1859
-7477:2:1863
-7478:2:1864
-7479:2:1858
-7480:2:1859
-7481:2:1863
-7482:2:1864
-7483:2:1872
-7484:2:1877
-7485:2:1881
-7486:2:1882
-7487:2:1889
-7488:2:1890
-7489:2:1901
-7490:2:1902
-7491:2:1903
-7492:2:1901
-7493:2:1902
-7494:2:1903
-7495:2:1914
-7496:2:1919
-7497:2:1920
-7498:0:4365
-7499:2:1932
-7500:0:4365
-7501:3:2427
-7502:0:4365
-7503:2:1934
-7504:0:4365
-7505:3:2428
-7506:0:4365
-7507:2:1935
-7508:0:4365
-7509:2:1936
-7510:0:4365
-7511:2:2129
-7512:0:4365
-7513:2:2130
-7514:0:4365
-7515:2:2134
-7516:0:4365
-7517:3:2427
-7518:0:4365
-7519:2:2136
-7520:0:4365
-7521:3:2428
-7522:0:4365
-7523:2:2137
-7524:2:2141
-7525:2:2142
-7526:2:2150
-7527:2:2151
-7528:2:2155
-7529:2:2156
-7530:2:2150
-7531:2:2151
-7532:2:2155
-7533:2:2156
-7534:2:2164
-7535:2:2169
-7536:2:2173
-7537:2:2174
-7538:2:2181
-7539:2:2182
-7540:2:2193
-7541:2:2194
-7542:2:2195
-7543:2:2193
-7544:2:2194
-7545:2:2195
-7546:2:2206
-7547:2:2211
-7548:2:2212
-7549:0:4365
-7550:2:2224
-7551:0:4365
-7552:3:2427
-7553:0:4365
-7554:2:2226
-7555:0:4365
-7556:3:2428
-7557:0:4365
-7558:2:1936
-7559:0:4365
-7560:2:2129
-7561:0:4365
-7562:2:2130
-7563:0:4365
-7564:2:2134
-7565:0:4365
-7566:3:2427
-7567:0:4365
-7568:2:2136
-7569:0:4365
-7570:3:2428
-7571:0:4365
-7572:2:2137
-7573:2:2141
-7574:2:2142
-7575:2:2150
-7576:2:2151
-7577:2:2155
-7578:2:2156
-7579:2:2150
-7580:2:2151
-7581:2:2152
-7582:2:2164
-7583:2:2169
-7584:2:2173
-7585:2:2174
-7586:2:2181
-7587:2:2182
-7588:2:2193
-7589:2:2194
-7590:2:2195
-7591:2:2193
-7592:2:2194
-7593:2:2195
-7594:2:2206
-7595:2:2211
-7596:2:2212
-7597:0:4365
-7598:2:2224
-7599:0:4365
-7600:3:2427
-7601:0:4365
-7602:2:2226
-7603:0:4365
-7604:3:2428
-7605:0:4365
-7606:2:2230
-7607:0:4365
-7608:3:2427
-7609:0:4365
-7610:2:2235
-7611:2:2239
-7612:2:2240
-7613:2:2248
-7614:2:2249
-7615:2:2253
-7616:2:2254
-7617:2:2248
-7618:2:2249
-7619:2:2250
-7620:2:2262
-7621:2:2267
-7622:2:2271
-7623:2:2272
-7624:2:2279
-7625:2:2280
-7626:2:2291
-7627:2:2292
-7628:2:2293
-7629:2:2291
-7630:2:2292
-7631:2:2293
-7632:2:2304
-7633:2:2309
-7634:2:2310
-7635:0:4365
-7636:3:2428
-7637:0:4365
-7638:2:2322
-7639:0:4365
-7640:2:1169
-7641:0:4365
-7642:3:2427
-7643:0:4365
-7644:2:1170
-7645:0:4365
-7646:3:2428
-7647:0:4365
-7648:3:2429
-7649:0:4365
-7650:3:2435
-7651:3:2436
-7652:0:4365
-7653:3:2440
-7654:3:2444
-7655:3:2445
-7656:3:2453
-7657:3:2454
-7658:3:2458
-7659:3:2459
-7660:3:2453
-7661:3:2454
-7662:3:2458
-7663:3:2459
-7664:3:2467
-7665:3:2472
-7666:3:2473
-7667:3:2484
-7668:3:2485
-7669:3:2496
-7670:3:2497
-7671:3:2498
-7672:3:2496
-7673:3:2497
-7674:3:2498
-7675:3:2509
-7676:3:2514
-7677:3:2515
-7678:0:4365
-7679:3:2527
-7680:0:4365
-7681:3:2528
-7682:0:4365
-7683:2:1173
-7684:0:4365
-7685:3:2529
-7686:0:4365
-7687:2:1179
-7688:0:4365
-7689:2:1180
-7690:0:4365
-7691:3:2528
-7692:0:4365
-7693:2:1181
-7694:2:1185
-7695:2:1186
-7696:2:1194
-7697:2:1195
-7698:2:1199
-7699:2:1200
-7700:2:1194
-7701:2:1195
-7702:2:1199
-7703:2:1200
-7704:2:1208
-7705:2:1213
-7706:2:1217
-7707:2:1218
-7708:2:1225
-7709:2:1226
-7710:2:1237
-7711:2:1238
-7712:2:1239
-7713:2:1237
-7714:2:1238
-7715:2:1239
-7716:2:1250
-7717:2:1255
-7718:2:1256
-7719:0:4365
-7720:3:2529
-7721:0:4365
-7722:2:1268
-7723:0:4365
-7724:3:2528
-7725:0:4365
-7726:2:1270
-7727:0:4365
-7728:3:2529
-7729:0:4365
-7730:2:1271
-7731:2:1275
-7732:2:1276
-7733:2:1284
-7734:2:1285
-7735:2:1289
-7736:2:1290
-7737:2:1284
-7738:2:1285
-7739:2:1289
-7740:2:1290
-7741:2:1298
-7742:2:1303
-7743:2:1307
-7744:2:1308
-7745:2:1315
-7746:2:1316
-7747:2:1327
-7748:2:1328
-7749:2:1329
-7750:2:1327
-7751:2:1328
-7752:2:1329
-7753:2:1340
-7754:2:1345
-7755:2:1346
-7756:0:4365
-7757:2:1358
-7758:0:4365
-7759:2:1360
-7760:0:4365
-7761:3:2528
-7762:0:4365
-7763:2:1361
-7764:0:4365
-7765:3:2529
-7766:0:4365
-7767:2:1362
-7768:2:1366
-7769:2:1367
-7770:2:1375
-7771:2:1376
-7772:2:1380
-7773:2:1381
-7774:2:1375
-7775:2:1376
-7776:2:1380
-7777:2:1381
-7778:2:1389
-7779:2:1394
-7780:2:1398
-7781:2:1399
-7782:2:1406
-7783:2:1407
-7784:2:1418
-7785:2:1419
-7786:2:1420
-7787:2:1418
-7788:2:1419
-7789:2:1420
-7790:2:1431
-7791:2:1436
-7792:2:1437
-7793:0:4365
-7794:2:1449
-7795:0:4365
-7796:3:2528
-7797:0:4365
-7798:2:1451
-7799:0:4365
-7800:3:2529
-7801:0:4365
-7802:2:1652
-7803:0:4365
-7804:2:1653
-7805:0:4365
-7806:2:1657
-7807:0:4365
-7808:2:1180
-7809:0:4365
-7810:3:2528
-7811:0:4365
-7812:2:1181
-7813:2:1185
-7814:2:1186
-7815:2:1194
-7816:2:1195
-7817:2:1199
-7818:2:1200
-7819:2:1194
-7820:2:1195
-7821:2:1196
-7822:2:1208
-7823:2:1213
-7824:2:1217
-7825:2:1218
-7826:2:1225
-7827:2:1226
-7828:2:1237
-7829:2:1238
-7830:2:1239
-7831:2:1237
-7832:2:1238
-7833:2:1239
-7834:2:1250
-7835:2:1255
-7836:2:1256
-7837:0:4365
-7838:3:2529
-7839:0:4365
-7840:2:1268
-7841:0:4365
-7842:3:2528
-7843:0:4365
-7844:2:1270
-7845:0:4365
-7846:3:2529
-7847:0:4365
-7848:2:1271
-7849:2:1275
-7850:2:1276
-7851:2:1284
-7852:2:1285
-7853:2:1289
-7854:2:1290
-7855:2:1284
-7856:2:1285
-7857:2:1289
-7858:2:1290
-7859:2:1298
-7860:2:1303
-7861:2:1307
-7862:2:1308
-7863:2:1315
-7864:2:1316
-7865:2:1327
-7866:2:1328
-7867:2:1329
-7868:2:1327
-7869:2:1328
-7870:2:1329
-7871:2:1340
-7872:2:1345
-7873:2:1346
-7874:0:4365
-7875:2:1358
-7876:0:4365
-7877:2:1454
-7878:0:4365
-7879:3:2528
-7880:0:4365
-7881:2:1455
-7882:0:4365
-7883:3:2529
-7884:0:4365
-7885:2:1652
-7886:0:4365
-7887:2:1653
-7888:0:4365
-7889:2:1657
-7890:0:4365
-7891:2:1660
-7892:0:4365
-7893:3:2528
-7894:0:4365
-7895:2:1665
-7896:2:1669
-7897:2:1670
-7898:2:1678
-7899:2:1679
-7900:2:1683
-7901:2:1684
-7902:2:1678
-7903:2:1679
-7904:2:1680
-7905:2:1692
-7906:2:1697
-7907:2:1701
-7908:2:1702
-7909:2:1709
-7910:2:1710
-7911:2:1721
-7912:2:1722
-7913:2:1723
-7914:2:1721
-7915:2:1722
-7916:2:1723
-7917:2:1734
-7918:2:1739
-7919:2:1740
-7920:0:4365
-7921:3:2529
-7922:0:4365
-7923:2:1752
-7924:0:4365
-7925:3:2528
-7926:0:4365
-7927:2:1754
-7928:0:4365
-7929:3:2529
-7930:0:4365
-7931:2:1755
-7932:2:1759
-7933:2:1760
-7934:2:1768
-7935:2:1769
-7936:2:1773
-7937:2:1774
-7938:2:1768
-7939:2:1769
-7940:2:1773
-7941:2:1774
-7942:2:1782
-7943:2:1787
-7944:2:1791
-7945:2:1792
-7946:2:1799
-7947:2:1800
-7948:2:1811
-7949:2:1812
-7950:2:1813
-7951:2:1811
-7952:2:1812
-7953:2:1813
-7954:2:1824
-7955:2:1829
-7956:2:1830
-7957:0:4365
-7958:2:1842
-7959:0:4365
-7960:3:2528
-7961:0:4365
-7962:2:1844
-7963:0:4365
-7964:3:2529
-7965:0:4365
-7966:2:1845
-7967:2:1849
-7968:2:1850
-7969:2:1858
-7970:2:1859
-7971:2:1863
-7972:2:1864
-7973:2:1858
-7974:2:1859
-7975:2:1863
-7976:2:1864
-7977:2:1872
-7978:2:1877
-7979:2:1881
-7980:2:1882
-7981:2:1889
-7982:2:1890
-7983:2:1901
-7984:2:1902
-7985:2:1903
-7986:2:1901
-7987:2:1902
-7988:2:1903
-7989:2:1914
-7990:2:1919
-7991:2:1920
-7992:0:4365
-7993:2:1932
-7994:0:4365
-7995:3:2528
-7996:0:4365
-7997:2:1934
-7998:0:4365
-7999:3:2529
-8000:0:4365
-8001:2:1935
-8002:0:4365
-8003:2:1936
-8004:0:4365
-8005:2:2129
-8006:0:4365
-8007:2:2130
-8008:0:4365
-8009:2:2134
-8010:0:4365
-8011:3:2528
-8012:0:4365
-8013:2:2136
-8014:0:4365
-8015:3:2529
-8016:0:4365
-8017:2:2137
-8018:2:2141
-8019:2:2142
-8020:2:2150
-8021:2:2151
-8022:2:2155
-8023:2:2156
-8024:2:2150
-8025:2:2151
-8026:2:2155
-8027:2:2156
-8028:2:2164
-8029:2:2169
-8030:2:2173
-8031:2:2174
-8032:2:2181
-8033:2:2182
-8034:2:2193
-8035:2:2194
-8036:2:2195
-8037:2:2193
-8038:2:2194
-8039:2:2195
-8040:2:2206
-8041:2:2211
-8042:2:2212
-8043:0:4365
-8044:2:2224
-8045:0:4365
-8046:3:2528
-8047:0:4365
-8048:2:2226
-8049:0:4365
-8050:3:2529
-8051:0:4365
-8052:2:1936
-8053:0:4365
-8054:2:2129
-8055:0:4365
-8056:2:2130
-8057:0:4365
-8058:2:2134
-8059:0:4365
-8060:3:2528
-8061:0:4365
-8062:2:2136
-8063:0:4365
-8064:3:2529
-8065:0:4365
-8066:2:2137
-8067:2:2141
-8068:2:2142
-8069:2:2150
-8070:2:2151
-8071:2:2155
-8072:2:2156
-8073:2:2150
-8074:2:2151
-8075:2:2152
-8076:2:2164
-8077:2:2169
-8078:2:2173
-8079:2:2174
-8080:2:2181
-8081:2:2182
-8082:2:2193
-8083:2:2194
-8084:2:2195
-8085:2:2193
-8086:2:2194
-8087:2:2195
-8088:2:2206
-8089:2:2211
-8090:2:2212
-8091:0:4365
-8092:2:2224
-8093:0:4365
-8094:3:2528
-8095:0:4365
-8096:2:2226
-8097:0:4365
-8098:3:2529
-8099:0:4365
-8100:2:2230
-8101:0:4365
-8102:3:2528
-8103:0:4365
-8104:2:2235
-8105:2:2239
-8106:2:2240
-8107:2:2248
-8108:2:2249
-8109:2:2253
-8110:2:2254
-8111:2:2248
-8112:2:2249
-8113:2:2250
-8114:2:2262
-8115:2:2267
-8116:2:2271
-8117:2:2272
-8118:2:2279
-8119:2:2280
-8120:2:2291
-8121:2:2292
-8122:2:2293
-8123:2:2291
-8124:2:2292
-8125:2:2293
-8126:2:2304
-8127:2:2309
-8128:2:2310
-8129:0:4365
-8130:3:2529
-8131:0:4365
-8132:2:2322
-8133:0:4365
-8134:2:1169
-8135:0:4365
-8136:3:2528
-8137:0:4365
-8138:2:1170
-8139:0:4365
-8140:3:2529
-8141:0:4365
-8142:3:2530
-8143:0:4365
-8144:3:2536
-8145:0:4365
-8146:3:2537
-8147:0:4365
-8148:3:2547
-8149:0:4365
-8150:3:2548
-8151:0:4365
-8152:3:2552
-8153:3:2553
-8154:3:2557
-8155:3:2561
-8156:3:2562
-8157:3:2557
-8158:3:2561
-8159:3:2562
-8160:3:2566
-8161:3:2574
-8162:3:2575
-8163:3:2580
-8164:3:2587
-8165:3:2588
-8166:3:2587
-8167:3:2588
-8168:3:2595
-8169:3:2600
-8170:0:4365
-8171:3:2611
-8172:0:4365
-8173:3:2615
-8174:3:2616
-8175:3:2620
-8176:3:2624
-8177:3:2625
-8178:3:2620
-8179:3:2624
-8180:3:2625
-8181:3:2629
-8182:3:2637
-8183:3:2638
-8184:3:2643
-8185:3:2650
-8186:3:2651
-8187:3:2650
-8188:3:2651
-8189:3:2658
-8190:3:2663
-8191:0:4365
-8192:3:2611
-8193:0:4365
-8194:3:2615
-8195:3:2616
-8196:3:2620
-8197:3:2624
-8198:3:2625
-8199:3:2620
-8200:3:2624
-8201:3:2625
-8202:3:2629
-8203:3:2637
-8204:3:2638
-8205:3:2643
-8206:3:2650
-8207:3:2651
-8208:3:2650
-8209:3:2651
-8210:3:2658
-8211:3:2663
-8212:0:4365
-8213:3:2674
-8214:0:4365
-8215:3:2682
-8216:3:2683
-8217:3:2687
-8218:3:2691
-8219:3:2692
-8220:3:2687
-8221:3:2691
-8222:3:2692
-8223:3:2696
-8224:3:2704
-8225:3:2705
-8226:3:2710
-8227:3:2717
-8228:3:2718
-8229:3:2717
-8230:3:2718
-8231:3:2725
-8232:3:2730
-8233:0:4365
-8234:3:2745
-8235:0:4365
-8236:3:2746
-8237:0:4365
-8238:2:1173
-8239:0:4365
-8240:3:2747
-8241:0:4365
-8242:2:1179
-8243:0:4365
-8244:2:1180
-8245:0:4365
-8246:3:2746
-8247:0:4365
-8248:2:1181
-8249:2:1185
-8250:2:1186
-8251:2:1194
-8252:2:1195
-8253:2:1199
-8254:2:1200
-8255:2:1194
-8256:2:1195
-8257:2:1199
-8258:2:1200
-8259:2:1208
-8260:2:1213
-8261:2:1217
-8262:2:1218
-8263:2:1225
-8264:2:1226
-8265:2:1237
-8266:2:1238
-8267:2:1239
-8268:2:1237
-8269:2:1238
-8270:2:1239
-8271:2:1250
-8272:2:1255
-8273:2:1256
-8274:0:4365
-8275:3:2747
-8276:0:4365
-8277:2:1268
-8278:0:4365
-8279:3:2746
-8280:0:4365
-8281:2:1270
-8282:0:4365
-8283:3:2747
-8284:0:4365
-8285:2:1271
-8286:2:1275
-8287:2:1276
-8288:2:1284
-8289:2:1285
-8290:2:1289
-8291:2:1290
-8292:2:1284
-8293:2:1285
-8294:2:1289
-8295:2:1290
-8296:2:1298
-8297:2:1303
-8298:2:1307
-8299:2:1308
-8300:2:1315
-8301:2:1316
-8302:2:1327
-8303:2:1328
-8304:2:1329
-8305:2:1327
-8306:2:1328
-8307:2:1329
-8308:2:1340
-8309:2:1345
-8310:2:1346
-8311:0:4365
-8312:2:1358
-8313:0:4365
-8314:2:1360
-8315:0:4365
-8316:3:2746
-8317:0:4365
-8318:2:1361
-8319:0:4365
-8320:3:2747
-8321:0:4365
-8322:2:1362
-8323:2:1366
-8324:2:1367
-8325:2:1375
-8326:2:1376
-8327:2:1380
-8328:2:1381
-8329:2:1375
-8330:2:1376
-8331:2:1380
-8332:2:1381
-8333:2:1389
-8334:2:1394
-8335:2:1398
-8336:2:1399
-8337:2:1406
-8338:2:1407
-8339:2:1418
-8340:2:1419
-8341:2:1420
-8342:2:1418
-8343:2:1419
-8344:2:1420
-8345:2:1431
-8346:2:1436
-8347:2:1437
-8348:0:4365
-8349:2:1449
-8350:0:4365
-8351:3:2746
-8352:0:4365
-8353:2:1451
-8354:0:4365
-8355:3:2747
-8356:0:4365
-8357:2:1652
-8358:0:4365
-8359:2:1653
-8360:0:4365
-8361:2:1657
-8362:0:4365
-8363:2:1180
-8364:0:4365
-8365:3:2746
-8366:0:4365
-8367:2:1181
-8368:2:1185
-8369:2:1186
-8370:2:1194
-8371:2:1195
-8372:2:1199
-8373:2:1200
-8374:2:1194
-8375:2:1195
-8376:2:1196
-8377:2:1208
-8378:2:1213
-8379:2:1217
-8380:2:1218
-8381:2:1225
-8382:2:1226
-8383:2:1237
-8384:2:1238
-8385:2:1239
-8386:2:1237
-8387:2:1238
-8388:2:1239
-8389:2:1250
-8390:2:1255
-8391:2:1256
-8392:0:4365
-8393:3:2747
-8394:0:4365
-8395:2:1268
-8396:0:4365
-8397:3:2746
-8398:0:4365
-8399:2:1270
-8400:0:4365
-8401:3:2747
-8402:0:4365
-8403:2:1271
-8404:2:1275
-8405:2:1276
-8406:2:1284
-8407:2:1285
-8408:2:1289
-8409:2:1290
-8410:2:1284
-8411:2:1285
-8412:2:1289
-8413:2:1290
-8414:2:1298
-8415:2:1303
-8416:2:1307
-8417:2:1308
-8418:2:1315
-8419:2:1316
-8420:2:1327
-8421:2:1328
-8422:2:1329
-8423:2:1327
-8424:2:1328
-8425:2:1329
-8426:2:1340
-8427:2:1345
-8428:2:1346
-8429:0:4365
-8430:2:1358
-8431:0:4365
-8432:2:1454
-8433:0:4365
-8434:3:2746
-8435:0:4365
-8436:2:1455
-8437:0:4365
-8438:3:2747
-8439:0:4365
-8440:2:1652
-8441:0:4365
-8442:2:1653
-8443:0:4365
-8444:2:1657
-8445:0:4365
-8446:2:1660
-8447:0:4365
-8448:3:2746
-8449:0:4365
-8450:2:1665
-8451:2:1669
-8452:2:1670
-8453:2:1678
-8454:2:1679
-8455:2:1683
-8456:2:1684
-8457:2:1678
-8458:2:1679
-8459:2:1680
-8460:2:1692
-8461:2:1697
-8462:2:1701
-8463:2:1702
-8464:2:1709
-8465:2:1710
-8466:2:1721
-8467:2:1722
-8468:2:1723
-8469:2:1721
-8470:2:1722
-8471:2:1723
-8472:2:1734
-8473:2:1739
-8474:2:1740
-8475:0:4365
-8476:3:2747
-8477:0:4365
-8478:2:1752
-8479:0:4365
-8480:3:2746
-8481:0:4365
-8482:2:1754
-8483:0:4365
-8484:3:2747
-8485:0:4365
-8486:2:1755
-8487:2:1759
-8488:2:1760
-8489:2:1768
-8490:2:1769
-8491:2:1773
-8492:2:1774
-8493:2:1768
-8494:2:1769
-8495:2:1773
-8496:2:1774
-8497:2:1782
-8498:2:1787
-8499:2:1791
-8500:2:1792
-8501:2:1799
-8502:2:1800
-8503:2:1811
-8504:2:1812
-8505:2:1813
-8506:2:1811
-8507:2:1812
-8508:2:1813
-8509:2:1824
-8510:2:1829
-8511:2:1830
-8512:0:4365
-8513:2:1842
-8514:0:4365
-8515:3:2746
-8516:0:4365
-8517:2:1844
-8518:0:4365
-8519:3:2747
-8520:0:4365
-8521:2:1845
-8522:2:1849
-8523:2:1850
-8524:2:1858
-8525:2:1859
-8526:2:1863
-8527:2:1864
-8528:2:1858
-8529:2:1859
-8530:2:1863
-8531:2:1864
-8532:2:1872
-8533:2:1877
-8534:2:1881
-8535:2:1882
-8536:2:1889
-8537:2:1890
-8538:2:1901
-8539:2:1902
-8540:2:1903
-8541:2:1901
-8542:2:1902
-8543:2:1903
-8544:2:1914
-8545:2:1919
-8546:2:1920
-8547:0:4365
-8548:2:1932
-8549:0:4365
-8550:3:2746
-8551:0:4365
-8552:2:1934
-8553:0:4365
-8554:3:2747
-8555:0:4365
-8556:2:1935
-8557:0:4365
-8558:2:1936
-8559:0:4365
-8560:2:2129
-8561:0:4365
-8562:2:2130
-8563:0:4365
-8564:2:2134
-8565:0:4365
-8566:3:2746
-8567:0:4365
-8568:2:2136
-8569:0:4365
-8570:3:2747
-8571:0:4365
-8572:2:2137
-8573:2:2141
-8574:2:2142
-8575:2:2150
-8576:2:2151
-8577:2:2155
-8578:2:2156
-8579:2:2150
-8580:2:2151
-8581:2:2155
-8582:2:2156
-8583:2:2164
-8584:2:2169
-8585:2:2173
-8586:2:2174
-8587:2:2181
-8588:2:2182
-8589:2:2193
-8590:2:2194
-8591:2:2195
-8592:2:2193
-8593:2:2194
-8594:2:2195
-8595:2:2206
-8596:2:2211
-8597:2:2212
-8598:0:4365
-8599:2:2224
-8600:0:4365
-8601:3:2746
-8602:0:4365
-8603:2:2226
-8604:0:4365
-8605:3:2747
-8606:0:4365
-8607:2:1936
-8608:0:4365
-8609:2:2129
-8610:0:4365
-8611:2:2130
-8612:0:4365
-8613:2:2134
-8614:0:4365
-8615:3:2746
-8616:0:4365
-8617:2:2136
-8618:0:4365
-8619:3:2747
-8620:0:4365
-8621:2:2137
-8622:2:2141
-8623:2:2142
-8624:2:2150
-8625:2:2151
-8626:2:2155
-8627:2:2156
-8628:2:2150
-8629:2:2151
-8630:2:2152
-8631:2:2164
-8632:2:2169
-8633:2:2173
-8634:2:2174
-8635:2:2181
-8636:2:2182
-8637:2:2193
-8638:2:2194
-8639:2:2195
-8640:2:2193
-8641:2:2194
-8642:2:2195
-8643:2:2206
-8644:2:2211
-8645:2:2212
-8646:0:4365
-8647:2:2224
-8648:0:4365
-8649:3:2746
-8650:0:4365
-8651:2:2226
-8652:0:4365
-8653:3:2747
-8654:0:4365
-8655:2:2230
-8656:0:4365
-8657:3:2746
-8658:0:4365
-8659:2:2235
-8660:2:2239
-8661:2:2240
-8662:2:2248
-8663:2:2249
-8664:2:2253
-8665:2:2254
-8666:2:2248
-8667:2:2249
-8668:2:2250
-8669:2:2262
-8670:2:2267
-8671:2:2271
-8672:2:2272
-8673:2:2279
-8674:2:2280
-8675:2:2291
-8676:2:2292
-8677:2:2293
-8678:2:2291
-8679:2:2292
-8680:2:2293
-8681:2:2304
-8682:2:2309
-8683:2:2310
-8684:0:4365
-8685:3:2747
-8686:0:4365
-8687:2:2322
-8688:0:4365
-8689:2:1169
-8690:0:4365
-8691:3:2746
-8692:0:4365
-8693:2:1170
-8694:0:4365
-8695:3:2747
-8696:0:4365
-8697:3:2748
-8698:0:4365
-8699:3:2754
-8700:0:4365
-8701:3:2755
-8702:3:2759
-8703:3:2760
-8704:3:2768
-8705:3:2769
-8706:3:2773
-8707:3:2774
-8708:3:2768
-8709:3:2769
-8710:3:2773
-8711:3:2774
-8712:3:2782
-8713:3:2787
-8714:3:2791
-8715:3:2792
-8716:3:2799
-8717:3:2800
-8718:3:2811
-8719:3:2812
-8720:3:2813
-8721:3:2811
-8722:3:2812
-8723:3:2813
-8724:3:2824
-8725:3:2829
-8726:3:2830
-8727:0:4365
-8728:3:2842
-8729:0:4365
-8730:3:2843
-8731:0:4365
-8732:2:1173
-8733:0:4365
-8734:3:2844
-8735:0:4365
-8736:2:1179
-8737:0:4365
-8738:2:1180
-8739:0:4365
-8740:3:2843
-8741:0:4365
-8742:2:1181
-8743:2:1185
-8744:2:1186
-8745:2:1194
-8746:2:1195
-8747:2:1199
-8748:2:1200
-8749:2:1194
-8750:2:1195
-8751:2:1199
-8752:2:1200
-8753:2:1208
-8754:2:1213
-8755:2:1217
-8756:2:1218
-8757:2:1225
-8758:2:1226
-8759:2:1237
-8760:2:1238
-8761:2:1239
-8762:2:1237
-8763:2:1238
-8764:2:1239
-8765:2:1250
-8766:2:1255
-8767:2:1256
-8768:0:4365
-8769:3:2844
-8770:0:4365
-8771:2:1268
-8772:0:4365
-8773:3:2843
-8774:0:4365
-8775:2:1270
-8776:0:4365
-8777:3:2844
-8778:0:4365
-8779:2:1271
-8780:2:1275
-8781:2:1276
-8782:2:1284
-8783:2:1285
-8784:2:1289
-8785:2:1290
-8786:2:1284
-8787:2:1285
-8788:2:1289
-8789:2:1290
-8790:2:1298
-8791:2:1303
-8792:2:1307
-8793:2:1308
-8794:2:1315
-8795:2:1316
-8796:2:1327
-8797:2:1328
-8798:2:1329
-8799:2:1327
-8800:2:1328
-8801:2:1329
-8802:2:1340
-8803:2:1345
-8804:2:1346
-8805:0:4365
-8806:2:1358
-8807:0:4365
-8808:2:1360
-8809:0:4365
-8810:3:2843
-8811:0:4365
-8812:2:1361
-8813:0:4365
-8814:3:2844
-8815:0:4365
-8816:2:1362
-8817:2:1366
-8818:2:1367
-8819:2:1375
-8820:2:1376
-8821:2:1380
-8822:2:1381
-8823:2:1375
-8824:2:1376
-8825:2:1380
-8826:2:1381
-8827:2:1389
-8828:2:1394
-8829:2:1398
-8830:2:1399
-8831:2:1406
-8832:2:1407
-8833:2:1418
-8834:2:1419
-8835:2:1420
-8836:2:1418
-8837:2:1419
-8838:2:1420
-8839:2:1431
-8840:2:1436
-8841:2:1437
-8842:0:4365
-8843:2:1449
-8844:0:4365
-8845:3:2843
-8846:0:4365
-8847:2:1451
-8848:0:4365
-8849:3:2844
-8850:0:4365
-8851:2:1652
-8852:0:4365
-8853:2:1653
-8854:0:4365
-8855:2:1657
-8856:0:4365
-8857:2:1180
-8858:0:4365
-8859:3:2843
-8860:0:4365
-8861:2:1181
-8862:2:1185
-8863:2:1186
-8864:2:1194
-8865:2:1195
-8866:2:1199
-8867:2:1200
-8868:2:1194
-8869:2:1195
-8870:2:1196
-8871:2:1208
-8872:2:1213
-8873:2:1217
-8874:2:1218
-8875:2:1225
-8876:2:1226
-8877:2:1237
-8878:2:1238
-8879:2:1239
-8880:2:1237
-8881:2:1238
-8882:2:1239
-8883:2:1250
-8884:2:1255
-8885:2:1256
-8886:0:4365
-8887:3:2844
-8888:0:4365
-8889:2:1268
-8890:0:4365
-8891:3:2843
-8892:0:4365
-8893:2:1270
-8894:0:4365
-8895:3:2844
-8896:0:4365
-8897:2:1271
-8898:2:1275
-8899:2:1276
-8900:2:1284
-8901:2:1285
-8902:2:1289
-8903:2:1290
-8904:2:1284
-8905:2:1285
-8906:2:1289
-8907:2:1290
-8908:2:1298
-8909:2:1303
-8910:2:1307
-8911:2:1308
-8912:2:1315
-8913:2:1316
-8914:2:1327
-8915:2:1328
-8916:2:1329
-8917:2:1327
-8918:2:1328
-8919:2:1329
-8920:2:1340
-8921:2:1345
-8922:2:1346
-8923:0:4365
-8924:2:1358
-8925:0:4365
-8926:2:1454
-8927:0:4365
-8928:3:2843
-8929:0:4365
-8930:2:1455
-8931:0:4365
-8932:3:2844
-8933:0:4365
-8934:2:1652
-8935:0:4365
-8936:2:1653
-8937:0:4365
-8938:2:1657
-8939:0:4365
-8940:2:1660
-8941:0:4365
-8942:3:2843
-8943:0:4365
-8944:2:1665
-8945:2:1669
-8946:2:1670
-8947:2:1678
-8948:2:1679
-8949:2:1683
-8950:2:1684
-8951:2:1678
-8952:2:1679
-8953:2:1680
-8954:2:1692
-8955:2:1697
-8956:2:1701
-8957:2:1702
-8958:2:1709
-8959:2:1710
-8960:2:1721
-8961:2:1722
-8962:2:1723
-8963:2:1721
-8964:2:1722
-8965:2:1723
-8966:2:1734
-8967:2:1739
-8968:2:1740
-8969:0:4365
-8970:3:2844
-8971:0:4365
-8972:2:1752
-8973:0:4365
-8974:3:2843
-8975:0:4365
-8976:2:1754
-8977:0:4365
-8978:3:2844
-8979:0:4365
-8980:2:1755
-8981:2:1759
-8982:2:1760
-8983:2:1768
-8984:2:1769
-8985:2:1773
-8986:2:1774
-8987:2:1768
-8988:2:1769
-8989:2:1773
-8990:2:1774
-8991:2:1782
-8992:2:1787
-8993:2:1791
-8994:2:1792
-8995:2:1799
-8996:2:1800
-8997:2:1811
-8998:2:1812
-8999:2:1813
-9000:2:1811
-9001:2:1812
-9002:2:1813
-9003:2:1824
-9004:2:1829
-9005:2:1830
-9006:0:4365
-9007:2:1842
-9008:0:4365
-9009:3:2843
-9010:0:4365
-9011:2:1844
-9012:0:4365
-9013:3:2844
-9014:0:4365
-9015:2:1845
-9016:2:1849
-9017:2:1850
-9018:2:1858
-9019:2:1859
-9020:2:1863
-9021:2:1864
-9022:2:1858
-9023:2:1859
-9024:2:1863
-9025:2:1864
-9026:2:1872
-9027:2:1877
-9028:2:1881
-9029:2:1882
-9030:2:1889
-9031:2:1890
-9032:2:1901
-9033:2:1902
-9034:2:1903
-9035:2:1901
-9036:2:1902
-9037:2:1903
-9038:2:1914
-9039:2:1919
-9040:2:1920
-9041:0:4365
-9042:2:1932
-9043:0:4365
-9044:3:2843
-9045:0:4365
-9046:2:1934
-9047:0:4365
-9048:3:2844
-9049:0:4365
-9050:2:1935
-9051:0:4365
-9052:2:1936
-9053:0:4365
-9054:2:2129
-9055:0:4365
-9056:2:2130
-9057:0:4365
-9058:2:2134
-9059:0:4365
-9060:3:2843
-9061:0:4365
-9062:2:2136
-9063:0:4365
-9064:3:2844
-9065:0:4365
-9066:2:2137
-9067:2:2141
-9068:2:2142
-9069:2:2150
-9070:2:2151
-9071:2:2155
-9072:2:2156
-9073:2:2150
-9074:2:2151
-9075:2:2155
-9076:2:2156
-9077:2:2164
-9078:2:2169
-9079:2:2173
-9080:2:2174
-9081:2:2181
-9082:2:2182
-9083:2:2193
-9084:2:2194
-9085:2:2195
-9086:2:2193
-9087:2:2194
-9088:2:2195
-9089:2:2206
-9090:2:2211
-9091:2:2212
-9092:0:4365
-9093:2:2224
-9094:0:4365
-9095:3:2843
-9096:0:4365
-9097:2:2226
-9098:0:4365
-9099:3:2844
-9100:0:4365
-9101:2:1936
-9102:0:4365
-9103:2:2129
-9104:0:4365
-9105:2:2130
-9106:0:4365
-9107:2:2134
-9108:0:4365
-9109:3:2843
-9110:0:4365
-9111:2:2136
-9112:0:4365
-9113:3:2844
-9114:0:4365
-9115:2:2137
-9116:2:2141
-9117:2:2142
-9118:2:2150
-9119:2:2151
-9120:2:2155
-9121:2:2156
-9122:2:2150
-9123:2:2151
-9124:2:2152
-9125:2:2164
-9126:2:2169
-9127:2:2173
-9128:2:2174
-9129:2:2181
-9130:2:2182
-9131:2:2193
-9132:2:2194
-9133:2:2195
-9134:2:2193
-9135:2:2194
-9136:2:2195
-9137:2:2206
-9138:2:2211
-9139:2:2212
-9140:0:4365
-9141:2:2224
-9142:0:4365
-9143:3:2843
-9144:0:4365
-9145:2:2226
-9146:0:4365
-9147:3:2844
-9148:0:4365
-9149:2:2230
-9150:0:4365
-9151:3:2843
-9152:0:4365
-9153:2:2235
-9154:2:2239
-9155:2:2240
-9156:2:2248
-9157:2:2249
-9158:2:2253
-9159:2:2254
-9160:2:2248
-9161:2:2249
-9162:2:2250
-9163:2:2262
-9164:2:2267
-9165:2:2271
-9166:2:2272
-9167:2:2279
-9168:2:2280
-9169:2:2291
-9170:2:2292
-9171:2:2293
-9172:2:2291
-9173:2:2292
-9174:2:2293
-9175:2:2304
-9176:2:2309
-9177:2:2310
-9178:0:4365
-9179:3:2844
-9180:0:4365
-9181:2:2322
-9182:0:4365
-9183:2:1169
-9184:0:4365
-9185:3:2843
-9186:0:4365
-9187:2:1170
-9188:0:4365
-9189:3:2844
-9190:0:4365
-9191:3:2845
-9192:0:4365
-9193:3:2851
-9194:0:4365
-9195:3:2854
-9196:3:2855
-9197:3:2867
-9198:3:2868
-9199:3:2872
-9200:3:2873
-9201:3:2867
-9202:3:2868
-9203:3:2872
-9204:3:2873
-9205:3:2881
-9206:3:2886
-9207:3:2890
-9208:3:2891
-9209:3:2898
-9210:3:2899
-9211:3:2910
-9212:3:2911
-9213:3:2912
-9214:3:2910
-9215:3:2911
-9216:3:2912
-9217:3:2923
-9218:3:2928
-9219:3:2929
-9220:0:4365
-9221:3:2941
-9222:0:4365
-9223:3:2942
-9224:0:4365
-9225:2:1173
-9226:0:4365
-9227:3:2943
-9228:0:4365
-9229:2:1179
-9230:0:4365
-9231:2:1180
-9232:0:4365
-9233:3:2942
-9234:0:4365
-9235:2:1181
-9236:2:1185
-9237:2:1186
-9238:2:1194
-9239:2:1195
-9240:2:1199
-9241:2:1200
-9242:2:1194
-9243:2:1195
-9244:2:1199
-9245:2:1200
-9246:2:1208
-9247:2:1213
-9248:2:1217
-9249:2:1218
-9250:2:1225
-9251:2:1226
-9252:2:1237
-9253:2:1238
-9254:2:1239
-9255:2:1237
-9256:2:1238
-9257:2:1239
-9258:2:1250
-9259:2:1255
-9260:2:1256
-9261:0:4365
-9262:3:2943
-9263:0:4365
-9264:2:1268
-9265:0:4365
-9266:3:2942
-9267:0:4365
-9268:2:1270
-9269:0:4365
-9270:3:2943
-9271:0:4365
-9272:2:1271
-9273:2:1275
-9274:2:1276
-9275:2:1284
-9276:2:1285
-9277:2:1289
-9278:2:1290
-9279:2:1284
-9280:2:1285
-9281:2:1289
-9282:2:1290
-9283:2:1298
-9284:2:1303
-9285:2:1307
-9286:2:1308
-9287:2:1315
-9288:2:1316
-9289:2:1327
-9290:2:1328
-9291:2:1329
-9292:2:1327
-9293:2:1328
-9294:2:1329
-9295:2:1340
-9296:2:1345
-9297:2:1346
-9298:0:4365
-9299:2:1358
-9300:0:4365
-9301:2:1360
-9302:0:4365
-9303:3:2942
-9304:0:4365
-9305:2:1361
-9306:0:4365
-9307:3:2943
-9308:0:4365
-9309:2:1362
-9310:2:1366
-9311:2:1367
-9312:2:1375
-9313:2:1376
-9314:2:1380
-9315:2:1381
-9316:2:1375
-9317:2:1376
-9318:2:1380
-9319:2:1381
-9320:2:1389
-9321:2:1394
-9322:2:1398
-9323:2:1399
-9324:2:1406
-9325:2:1407
-9326:2:1418
-9327:2:1419
-9328:2:1420
-9329:2:1418
-9330:2:1419
-9331:2:1420
-9332:2:1431
-9333:2:1436
-9334:2:1437
-9335:0:4365
-9336:2:1449
-9337:0:4365
-9338:3:2942
-9339:0:4365
-9340:2:1451
-9341:0:4365
-9342:3:2943
-9343:0:4365
-9344:2:1652
-9345:0:4365
-9346:2:1653
-9347:0:4365
-9348:2:1657
-9349:0:4365
-9350:2:1180
-9351:0:4365
-9352:3:2942
-9353:0:4365
-9354:2:1181
-9355:2:1185
-9356:2:1186
-9357:2:1194
-9358:2:1195
-9359:2:1199
-9360:2:1200
-9361:2:1194
-9362:2:1195
-9363:2:1196
-9364:2:1208
-9365:2:1213
-9366:2:1217
-9367:2:1218
-9368:2:1225
-9369:2:1226
-9370:2:1237
-9371:2:1238
-9372:2:1239
-9373:2:1237
-9374:2:1238
-9375:2:1239
-9376:2:1250
-9377:2:1255
-9378:2:1256
-9379:0:4365
-9380:3:2943
-9381:0:4365
-9382:2:1268
-9383:0:4365
-9384:3:2942
-9385:0:4365
-9386:2:1270
-9387:0:4365
-9388:3:2943
-9389:0:4365
-9390:2:1271
-9391:2:1275
-9392:2:1276
-9393:2:1284
-9394:2:1285
-9395:2:1289
-9396:2:1290
-9397:2:1284
-9398:2:1285
-9399:2:1289
-9400:2:1290
-9401:2:1298
-9402:2:1303
-9403:2:1307
-9404:2:1308
-9405:2:1315
-9406:2:1316
-9407:2:1327
-9408:2:1328
-9409:2:1329
-9410:2:1327
-9411:2:1328
-9412:2:1329
-9413:2:1340
-9414:2:1345
-9415:2:1346
-9416:0:4365
-9417:2:1358
-9418:0:4365
-9419:2:1454
-9420:0:4365
-9421:3:2942
-9422:0:4365
-9423:2:1455
-9424:0:4365
-9425:3:2943
-9426:0:4365
-9427:2:1652
-9428:0:4365
-9429:2:1653
-9430:0:4365
-9431:2:1657
-9432:0:4365
-9433:2:1660
-9434:0:4365
-9435:3:2942
-9436:0:4365
-9437:2:1665
-9438:2:1669
-9439:2:1670
-9440:2:1678
-9441:2:1679
-9442:2:1683
-9443:2:1684
-9444:2:1678
-9445:2:1679
-9446:2:1680
-9447:2:1692
-9448:2:1697
-9449:2:1701
-9450:2:1702
-9451:2:1709
-9452:2:1710
-9453:2:1721
-9454:2:1722
-9455:2:1723
-9456:2:1721
-9457:2:1722
-9458:2:1723
-9459:2:1734
-9460:2:1739
-9461:2:1740
-9462:0:4365
-9463:3:2943
-9464:0:4365
-9465:2:1752
-9466:0:4365
-9467:3:2942
-9468:0:4365
-9469:2:1754
-9470:0:4365
-9471:3:2943
-9472:0:4365
-9473:2:1755
-9474:2:1759
-9475:2:1760
-9476:2:1768
-9477:2:1769
-9478:2:1773
-9479:2:1774
-9480:2:1768
-9481:2:1769
-9482:2:1773
-9483:2:1774
-9484:2:1782
-9485:2:1787
-9486:2:1791
-9487:2:1792
-9488:2:1799
-9489:2:1800
-9490:2:1811
-9491:2:1812
-9492:2:1813
-9493:2:1811
-9494:2:1812
-9495:2:1813
-9496:2:1824
-9497:2:1829
-9498:2:1830
-9499:0:4365
-9500:2:1842
-9501:0:4365
-9502:3:2942
-9503:0:4365
-9504:2:1844
-9505:0:4365
-9506:3:2943
-9507:0:4365
-9508:2:1845
-9509:2:1849
-9510:2:1850
-9511:2:1858
-9512:2:1859
-9513:2:1863
-9514:2:1864
-9515:2:1858
-9516:2:1859
-9517:2:1863
-9518:2:1864
-9519:2:1872
-9520:2:1877
-9521:2:1881
-9522:2:1882
-9523:2:1889
-9524:2:1890
-9525:2:1901
-9526:2:1902
-9527:2:1903
-9528:2:1901
-9529:2:1902
-9530:2:1903
-9531:2:1914
-9532:2:1919
-9533:2:1920
-9534:0:4365
-9535:2:1932
-9536:0:4365
-9537:3:2942
-9538:0:4365
-9539:2:1934
-9540:0:4365
-9541:3:2943
-9542:0:4365
-9543:2:1935
-9544:0:4365
-9545:2:1936
-9546:0:4365
-9547:2:2129
-9548:0:4365
-9549:2:2130
-9550:0:4365
-9551:2:2134
-9552:0:4365
-9553:3:2942
-9554:0:4365
-9555:2:2136
-9556:0:4365
-9557:3:2943
-9558:0:4365
-9559:2:2137
-9560:2:2141
-9561:2:2142
-9562:2:2150
-9563:2:2151
-9564:2:2155
-9565:2:2156
-9566:2:2150
-9567:2:2151
-9568:2:2155
-9569:2:2156
-9570:2:2164
-9571:2:2169
-9572:2:2173
-9573:2:2174
-9574:2:2181
-9575:2:2182
-9576:2:2193
-9577:2:2194
-9578:2:2195
-9579:2:2193
-9580:2:2194
-9581:2:2195
-9582:2:2206
-9583:2:2211
-9584:2:2212
-9585:0:4365
-9586:2:2224
-9587:0:4365
-9588:3:2942
-9589:0:4365
-9590:2:2226
-9591:0:4365
-9592:3:2943
-9593:0:4365
-9594:2:1936
-9595:0:4365
-9596:2:2129
-9597:0:4365
-9598:2:2130
-9599:0:4365
-9600:2:2134
-9601:0:4365
-9602:3:2942
-9603:0:4365
-9604:2:2136
-9605:0:4365
-9606:3:2943
-9607:0:4365
-9608:2:2137
-9609:2:2141
-9610:2:2142
-9611:2:2150
-9612:2:2151
-9613:2:2155
-9614:2:2156
-9615:2:2150
-9616:2:2151
-9617:2:2152
-9618:2:2164
-9619:2:2169
-9620:2:2173
-9621:2:2174
-9622:2:2181
-9623:2:2182
-9624:2:2193
-9625:2:2194
-9626:2:2195
-9627:2:2193
-9628:2:2194
-9629:2:2195
-9630:2:2206
-9631:2:2211
-9632:2:2212
-9633:0:4365
-9634:2:2224
-9635:0:4365
-9636:3:2942
-9637:0:4365
-9638:2:2226
-9639:0:4365
-9640:3:2943
-9641:0:4365
-9642:2:2230
-9643:0:4365
-9644:3:2942
-9645:0:4365
-9646:2:2235
-9647:2:2239
-9648:2:2240
-9649:2:2248
-9650:2:2249
-9651:2:2253
-9652:2:2254
-9653:2:2248
-9654:2:2249
-9655:2:2250
-9656:2:2262
-9657:2:2267
-9658:2:2271
-9659:2:2272
-9660:2:2279
-9661:2:2280
-9662:2:2291
-9663:2:2292
-9664:2:2293
-9665:2:2291
-9666:2:2292
-9667:2:2293
-9668:2:2304
-9669:2:2309
-9670:2:2310
-9671:0:4365
-9672:3:2943
-9673:0:4365
-9674:2:2322
-9675:0:4365
-9676:2:1169
-9677:0:4365
-9678:3:2942
-9679:0:4365
-9680:2:1170
-9681:0:4365
-9682:3:2943
-9683:0:4365
-9684:3:2944
-9685:0:4365
-9686:3:2950
-9687:0:4365
-9688:3:2951
-9689:0:4365
-9690:3:2952
-9691:0:4365
-9692:3:2953
-9693:0:4365
-9694:3:2954
-9695:3:2958
-9696:3:2959
-9697:3:2967
-9698:3:2968
-9699:3:2972
-9700:3:2973
-9701:3:2967
-9702:3:2968
-9703:3:2972
-9704:3:2973
-9705:3:2981
-9706:3:2986
-9707:3:2990
-9708:3:2991
-9709:3:2998
-9710:3:2999
-9711:3:3010
-9712:3:3011
-9713:3:3012
-9714:3:3010
-9715:3:3011
-9716:3:3012
-9717:3:3023
-9718:3:3028
-9719:3:3029
-9720:0:4365
-9721:3:3041
-9722:0:4365
-9723:3:3042
-9724:0:4365
-9725:2:1173
-9726:0:4365
-9727:3:3043
-9728:0:4365
-9729:2:1179
-9730:0:4365
-9731:2:1180
-9732:0:4365
-9733:3:3042
-9734:0:4365
-9735:2:1181
-9736:2:1185
-9737:2:1186
-9738:2:1194
-9739:2:1195
-9740:2:1199
-9741:2:1200
-9742:2:1194
-9743:2:1195
-9744:2:1199
-9745:2:1200
-9746:2:1208
-9747:2:1213
-9748:2:1217
-9749:2:1218
-9750:2:1225
-9751:2:1226
-9752:2:1237
-9753:2:1238
-9754:2:1239
-9755:2:1237
-9756:2:1238
-9757:2:1239
-9758:2:1250
-9759:2:1255
-9760:2:1256
-9761:0:4365
-9762:3:3043
-9763:0:4365
-9764:2:1268
-9765:0:4365
-9766:3:3042
-9767:0:4365
-9768:2:1270
-9769:0:4365
-9770:3:3043
-9771:0:4365
-9772:2:1271
-9773:2:1275
-9774:2:1276
-9775:2:1284
-9776:2:1285
-9777:2:1289
-9778:2:1290
-9779:2:1284
-9780:2:1285
-9781:2:1289
-9782:2:1290
-9783:2:1298
-9784:2:1303
-9785:2:1307
-9786:2:1308
-9787:2:1315
-9788:2:1316
-9789:2:1327
-9790:2:1328
-9791:2:1329
-9792:2:1327
-9793:2:1328
-9794:2:1329
-9795:2:1340
-9796:2:1345
-9797:2:1346
-9798:0:4365
-9799:2:1358
-9800:0:4365
-9801:2:1360
-9802:0:4365
-9803:3:3042
-9804:0:4365
-9805:2:1361
-9806:0:4365
-9807:3:3043
-9808:0:4365
-9809:2:1362
-9810:2:1366
-9811:2:1367
-9812:2:1375
-9813:2:1376
-9814:2:1380
-9815:2:1381
-9816:2:1375
-9817:2:1376
-9818:2:1380
-9819:2:1381
-9820:2:1389
-9821:2:1394
-9822:2:1398
-9823:2:1399
-9824:2:1406
-9825:2:1407
-9826:2:1418
-9827:2:1419
-9828:2:1420
-9829:2:1418
-9830:2:1419
-9831:2:1420
-9832:2:1431
-9833:2:1436
-9834:2:1437
-9835:0:4365
-9836:2:1449
-9837:0:4365
-9838:3:3042
-9839:0:4365
-9840:2:1451
-9841:0:4365
-9842:3:3043
-9843:0:4365
-9844:2:1652
-9845:0:4365
-9846:2:1653
-9847:0:4365
-9848:2:1657
-9849:0:4365
-9850:2:1180
-9851:0:4365
-9852:3:3042
-9853:0:4365
-9854:2:1181
-9855:2:1185
-9856:2:1186
-9857:2:1194
-9858:2:1195
-9859:2:1199
-9860:2:1200
-9861:2:1194
-9862:2:1195
-9863:2:1196
-9864:2:1208
-9865:2:1213
-9866:2:1217
-9867:2:1218
-9868:2:1225
-9869:2:1226
-9870:2:1237
-9871:2:1238
-9872:2:1239
-9873:2:1237
-9874:2:1238
-9875:2:1239
-9876:2:1250
-9877:2:1255
-9878:2:1256
-9879:0:4365
-9880:3:3043
-9881:0:4365
-9882:2:1268
-9883:0:4365
-9884:3:3042
-9885:0:4365
-9886:2:1270
-9887:0:4365
-9888:3:3043
-9889:0:4365
-9890:2:1271
-9891:2:1275
-9892:2:1276
-9893:2:1284
-9894:2:1285
-9895:2:1289
-9896:2:1290
-9897:2:1284
-9898:2:1285
-9899:2:1289
-9900:2:1290
-9901:2:1298
-9902:2:1303
-9903:2:1307
-9904:2:1308
-9905:2:1315
-9906:2:1316
-9907:2:1327
-9908:2:1328
-9909:2:1329
-9910:2:1327
-9911:2:1328
-9912:2:1329
-9913:2:1340
-9914:2:1345
-9915:2:1346
-9916:0:4365
-9917:2:1358
-9918:0:4365
-9919:2:1454
-9920:0:4365
-9921:3:3042
-9922:0:4365
-9923:2:1455
-9924:0:4365
-9925:3:3043
-9926:0:4365
-9927:2:1652
-9928:0:4365
-9929:2:1653
-9930:0:4365
-9931:2:1657
-9932:0:4365
-9933:2:1660
-9934:0:4365
-9935:3:3042
-9936:0:4365
-9937:2:1665
-9938:2:1669
-9939:2:1670
-9940:2:1678
-9941:2:1679
-9942:2:1683
-9943:2:1684
-9944:2:1678
-9945:2:1679
-9946:2:1680
-9947:2:1692
-9948:2:1697
-9949:2:1701
-9950:2:1702
-9951:2:1709
-9952:2:1710
-9953:2:1721
-9954:2:1722
-9955:2:1723
-9956:2:1721
-9957:2:1722
-9958:2:1723
-9959:2:1734
-9960:2:1739
-9961:2:1740
-9962:0:4365
-9963:3:3043
-9964:0:4365
-9965:2:1752
-9966:0:4365
-9967:3:3042
-9968:0:4365
-9969:2:1754
-9970:0:4365
-9971:3:3043
-9972:0:4365
-9973:2:1755
-9974:2:1759
-9975:2:1760
-9976:2:1768
-9977:2:1769
-9978:2:1773
-9979:2:1774
-9980:2:1768
-9981:2:1769
-9982:2:1773
-9983:2:1774
-9984:2:1782
-9985:2:1787
-9986:2:1791
-9987:2:1792
-9988:2:1799
-9989:2:1800
-9990:2:1811
-9991:2:1812
-9992:2:1813
-9993:2:1811
-9994:2:1812
-9995:2:1813
-9996:2:1824
-9997:2:1829
-9998:2:1830
-9999:0:4365
-10000:2:1842
-10001:0:4365
-10002:3:3042
-10003:0:4365
-10004:2:1844
-10005:0:4365
-10006:3:3043
-10007:0:4365
-10008:2:1845
-10009:2:1849
-10010:2:1850
-10011:2:1858
-10012:2:1859
-10013:2:1863
-10014:2:1864
-10015:2:1858
-10016:2:1859
-10017:2:1863
-10018:2:1864
-10019:2:1872
-10020:2:1877
-10021:2:1881
-10022:2:1882
-10023:2:1889
-10024:2:1890
-10025:2:1901
-10026:2:1902
-10027:2:1903
-10028:2:1901
-10029:2:1902
-10030:2:1903
-10031:2:1914
-10032:2:1919
-10033:2:1920
-10034:0:4365
-10035:2:1932
-10036:0:4365
-10037:3:3042
-10038:0:4365
-10039:2:1934
-10040:0:4365
-10041:3:3043
-10042:0:4365
-10043:2:1935
-10044:0:4365
-10045:2:1936
-10046:0:4365
-10047:2:2129
-10048:0:4365
-10049:2:2130
-10050:0:4365
-10051:2:2134
-10052:0:4365
-10053:3:3042
-10054:0:4365
-10055:2:2136
-10056:0:4365
-10057:3:3043
-10058:0:4365
-10059:2:2137
-10060:2:2141
-10061:2:2142
-10062:2:2150
-10063:2:2151
-10064:2:2155
-10065:2:2156
-10066:2:2150
-10067:2:2151
-10068:2:2155
-10069:2:2156
-10070:2:2164
-10071:2:2169
-10072:2:2173
-10073:2:2174
-10074:2:2181
-10075:2:2182
-10076:2:2193
-10077:2:2194
-10078:2:2195
-10079:2:2193
-10080:2:2194
-10081:2:2195
-10082:2:2206
-10083:2:2211
-10084:2:2212
-10085:0:4365
-10086:2:2224
-10087:0:4365
-10088:3:3042
-10089:0:4365
-10090:2:2226
-10091:0:4365
-10092:3:3043
-10093:0:4365
-10094:2:1936
-10095:0:4365
-10096:2:2129
-10097:0:4365
-10098:2:2130
-10099:0:4365
-10100:2:2134
-10101:0:4365
-10102:3:3042
-10103:0:4365
-10104:2:2136
-10105:0:4365
-10106:3:3043
-10107:0:4365
-10108:2:2137
-10109:2:2141
-10110:2:2142
-10111:2:2150
-10112:2:2151
-10113:2:2155
-10114:2:2156
-10115:2:2150
-10116:2:2151
-10117:2:2152
-10118:2:2164
-10119:2:2169
-10120:2:2173
-10121:2:2174
-10122:2:2181
-10123:2:2182
-10124:2:2193
-10125:2:2194
-10126:2:2195
-10127:2:2193
-10128:2:2194
-10129:2:2195
-10130:2:2206
-10131:2:2211
-10132:2:2212
-10133:0:4365
-10134:2:2224
-10135:0:4365
-10136:3:3042
-10137:0:4365
-10138:2:2226
-10139:0:4365
-10140:3:3043
-10141:0:4365
-10142:2:2230
-10143:0:4365
-10144:3:3042
-10145:0:4365
-10146:2:2235
-10147:2:2239
-10148:2:2240
-10149:2:2248
-10150:2:2249
-10151:2:2253
-10152:2:2254
-10153:2:2248
-10154:2:2249
-10155:2:2250
-10156:2:2262
-10157:2:2267
-10158:2:2271
-10159:2:2272
-10160:2:2279
-10161:2:2280
-10162:2:2291
-10163:2:2292
-10164:2:2293
-10165:2:2291
-10166:2:2292
-10167:2:2293
-10168:2:2304
-10169:2:2309
-10170:2:2310
-10171:0:4365
-10172:3:3043
-10173:0:4365
-10174:2:2322
-10175:0:4365
-10176:2:1169
-10177:0:4365
-10178:3:3042
-10179:0:4365
-10180:2:1170
-10181:0:4365
-10182:3:3043
-10183:0:4365
-10184:3:3044
-10185:0:4365
-10186:3:3257
-10187:0:4365
-10188:3:3265
-10189:0:4365
-10190:3:3266
-10191:3:3270
-10192:3:3271
-10193:3:3279
-10194:3:3280
-10195:3:3284
-10196:3:3285
-10197:3:3279
-10198:3:3280
-10199:3:3284
-10200:3:3285
-10201:3:3293
-10202:3:3298
-10203:3:3302
-10204:3:3303
-10205:3:3310
-10206:3:3311
-10207:3:3322
-10208:3:3323
-10209:3:3324
-10210:3:3322
-10211:3:3323
-10212:3:3324
-10213:3:3335
-10214:3:3340
-10215:3:3341
-10216:0:4365
-10217:3:3353
-10218:0:4365
-10219:3:3354
-10220:0:4365
-10221:2:1173
-10222:0:4365
-10223:3:3355
-10224:0:4365
-10225:2:1179
-10226:0:4365
-10227:2:1180
-10228:0:4365
-10229:3:3354
-10230:0:4365
-10231:2:1181
-10232:2:1185
-10233:2:1186
-10234:2:1194
-10235:2:1195
-10236:2:1199
-10237:2:1200
-10238:2:1194
-10239:2:1195
-10240:2:1199
-10241:2:1200
-10242:2:1208
-10243:2:1213
-10244:2:1217
-10245:2:1218
-10246:2:1225
-10247:2:1226
-10248:2:1237
-10249:2:1238
-10250:2:1239
-10251:2:1237
-10252:2:1238
-10253:2:1239
-10254:2:1250
-10255:2:1255
-10256:2:1256
-10257:0:4365
-10258:3:3355
-10259:0:4365
-10260:2:1268
-10261:0:4365
-10262:3:3354
-10263:0:4365
-10264:2:1270
-10265:0:4365
-10266:3:3355
-10267:0:4365
-10268:2:1271
-10269:2:1275
-10270:2:1276
-10271:2:1284
-10272:2:1285
-10273:2:1289
-10274:2:1290
-10275:2:1284
-10276:2:1285
-10277:2:1289
-10278:2:1290
-10279:2:1298
-10280:2:1303
-10281:2:1307
-10282:2:1308
-10283:2:1315
-10284:2:1316
-10285:2:1327
-10286:2:1328
-10287:2:1329
-10288:2:1327
-10289:2:1328
-10290:2:1329
-10291:2:1340
-10292:2:1345
-10293:2:1346
-10294:0:4365
-10295:2:1358
-10296:0:4365
-10297:2:1360
-10298:0:4365
-10299:3:3354
-10300:0:4365
-10301:2:1361
-10302:0:4365
-10303:3:3355
-10304:0:4365
-10305:2:1362
-10306:2:1366
-10307:2:1367
-10308:2:1375
-10309:2:1376
-10310:2:1380
-10311:2:1381
-10312:2:1375
-10313:2:1376
-10314:2:1380
-10315:2:1381
-10316:2:1389
-10317:2:1394
-10318:2:1398
-10319:2:1399
-10320:2:1406
-10321:2:1407
-10322:2:1418
-10323:2:1419
-10324:2:1420
-10325:2:1418
-10326:2:1419
-10327:2:1420
-10328:2:1431
-10329:2:1436
-10330:2:1437
-10331:0:4365
-10332:2:1449
-10333:0:4365
-10334:3:3354
-10335:0:4365
-10336:2:1451
-10337:0:4365
-10338:3:3355
-10339:0:4365
-10340:2:1652
-10341:0:4365
-10342:2:1653
-10343:0:4365
-10344:2:1657
-10345:0:4365
-10346:2:1180
-10347:0:4365
-10348:3:3354
-10349:0:4365
-10350:2:1181
-10351:2:1185
-10352:2:1186
-10353:2:1194
-10354:2:1195
-10355:2:1199
-10356:2:1200
-10357:2:1194
-10358:2:1195
-10359:2:1196
-10360:2:1208
-10361:2:1213
-10362:2:1217
-10363:2:1218
-10364:2:1225
-10365:2:1226
-10366:2:1237
-10367:2:1238
-10368:2:1239
-10369:2:1237
-10370:2:1238
-10371:2:1239
-10372:2:1250
-10373:2:1255
-10374:2:1256
-10375:0:4365
-10376:3:3355
-10377:0:4365
-10378:2:1268
-10379:0:4365
-10380:3:3354
-10381:0:4365
-10382:2:1270
-10383:0:4365
-10384:3:3355
-10385:0:4365
-10386:2:1271
-10387:2:1275
-10388:2:1276
-10389:2:1284
-10390:2:1285
-10391:2:1289
-10392:2:1290
-10393:2:1284
-10394:2:1285
-10395:2:1289
-10396:2:1290
-10397:2:1298
-10398:2:1303
-10399:2:1307
-10400:2:1308
-10401:2:1315
-10402:2:1316
-10403:2:1327
-10404:2:1328
-10405:2:1329
-10406:2:1327
-10407:2:1328
-10408:2:1329
-10409:2:1340
-10410:2:1345
-10411:2:1346
-10412:0:4365
-10413:2:1358
-10414:0:4365
-10415:2:1454
-10416:0:4365
-10417:3:3354
-10418:0:4365
-10419:2:1455
-10420:0:4365
-10421:3:3355
-10422:0:4365
-10423:2:1652
-10424:0:4365
-10425:2:1653
-10426:0:4365
-10427:2:1657
-10428:0:4365
-10429:2:1660
-10430:0:4365
-10431:3:3354
-10432:0:4365
-10433:2:1665
-10434:2:1669
-10435:2:1670
-10436:2:1678
-10437:2:1679
-10438:2:1683
-10439:2:1684
-10440:2:1678
-10441:2:1679
-10442:2:1680
-10443:2:1692
-10444:2:1697
-10445:2:1701
-10446:2:1702
-10447:2:1709
-10448:2:1710
-10449:2:1721
-10450:2:1722
-10451:2:1723
-10452:2:1721
-10453:2:1722
-10454:2:1723
-10455:2:1734
-10456:2:1739
-10457:2:1740
-10458:0:4365
-10459:3:3355
-10460:0:4365
-10461:2:1752
-10462:0:4365
-10463:3:3354
-10464:0:4365
-10465:2:1754
-10466:0:4365
-10467:3:3355
-10468:0:4365
-10469:2:1755
-10470:2:1759
-10471:2:1760
-10472:2:1768
-10473:2:1769
-10474:2:1773
-10475:2:1774
-10476:2:1768
-10477:2:1769
-10478:2:1773
-10479:2:1774
-10480:2:1782
-10481:2:1787
-10482:2:1791
-10483:2:1792
-10484:2:1799
-10485:2:1800
-10486:2:1811
-10487:2:1812
-10488:2:1813
-10489:2:1811
-10490:2:1812
-10491:2:1813
-10492:2:1824
-10493:2:1829
-10494:2:1830
-10495:0:4365
-10496:2:1842
-10497:0:4365
-10498:3:3354
-10499:0:4365
-10500:2:1844
-10501:0:4365
-10502:3:3355
-10503:0:4365
-10504:2:1845
-10505:2:1849
-10506:2:1850
-10507:2:1858
-10508:2:1859
-10509:2:1863
-10510:2:1864
-10511:2:1858
-10512:2:1859
-10513:2:1863
-10514:2:1864
-10515:2:1872
-10516:2:1877
-10517:2:1881
-10518:2:1882
-10519:2:1889
-10520:2:1890
-10521:2:1901
-10522:2:1902
-10523:2:1903
-10524:2:1901
-10525:2:1902
-10526:2:1903
-10527:2:1914
-10528:2:1919
-10529:2:1920
-10530:0:4365
-10531:2:1932
-10532:0:4365
-10533:3:3354
-10534:0:4365
-10535:2:1934
-10536:0:4365
-10537:3:3355
-10538:0:4365
-10539:2:1935
-10540:0:4365
-10541:2:1936
-10542:0:4365
-10543:2:2129
-10544:0:4365
-10545:2:2130
-10546:0:4365
-10547:2:2134
-10548:0:4365
-10549:3:3354
-10550:0:4365
-10551:2:2136
-10552:0:4365
-10553:3:3355
-10554:0:4365
-10555:2:2137
-10556:2:2141
-10557:2:2142
-10558:2:2150
-10559:2:2151
-10560:2:2155
-10561:2:2156
-10562:2:2150
-10563:2:2151
-10564:2:2155
-10565:2:2156
-10566:2:2164
-10567:2:2169
-10568:2:2173
-10569:2:2174
-10570:2:2181
-10571:2:2182
-10572:2:2193
-10573:2:2194
-10574:2:2195
-10575:2:2193
-10576:2:2194
-10577:2:2195
-10578:2:2206
-10579:2:2211
-10580:2:2212
-10581:0:4365
-10582:2:2224
-10583:0:4365
-10584:3:3354
-10585:0:4365
-10586:2:2226
-10587:0:4365
-10588:3:3355
-10589:0:4365
-10590:2:1936
-10591:0:4365
-10592:2:2129
-10593:0:4365
-10594:2:2130
-10595:0:4365
-10596:2:2134
-10597:0:4365
-10598:3:3354
-10599:0:4365
-10600:2:2136
-10601:0:4365
-10602:3:3355
-10603:0:4365
-10604:2:2137
-10605:2:2141
-10606:2:2142
-10607:2:2150
-10608:2:2151
-10609:2:2155
-10610:2:2156
-10611:2:2150
-10612:2:2151
-10613:2:2152
-10614:2:2164
-10615:2:2169
-10616:2:2173
-10617:2:2174
-10618:2:2181
-10619:2:2182
-10620:2:2193
-10621:2:2194
-10622:2:2195
-10623:2:2193
-10624:2:2194
-10625:2:2195
-10626:2:2206
-10627:2:2211
-10628:2:2212
-10629:0:4365
-10630:2:2224
-10631:0:4365
-10632:3:3354
-10633:0:4365
-10634:2:2226
-10635:0:4365
-10636:3:3355
-10637:0:4365
-10638:2:2230
-10639:0:4365
-10640:3:3354
-10641:0:4365
-10642:2:2235
-10643:2:2239
-10644:2:2240
-10645:2:2248
-10646:2:2249
-10647:2:2253
-10648:2:2254
-10649:2:2248
-10650:2:2249
-10651:2:2250
-10652:2:2262
-10653:2:2267
-10654:2:2271
-10655:2:2272
-10656:2:2279
-10657:2:2280
-10658:2:2291
-10659:2:2292
-10660:2:2293
-10661:2:2291
-10662:2:2292
-10663:2:2293
-10664:2:2304
-10665:2:2309
-10666:2:2310
-10667:0:4365
-10668:3:3355
-10669:0:4365
-10670:2:2322
-10671:0:4365
-10672:2:1169
-10673:0:4365
-10674:3:3354
-10675:0:4365
-10676:2:1170
-10677:0:4365
-10678:3:3355
-10679:0:4365
-10680:3:3356
-10681:0:4365
-10682:3:3366
-10683:0:4365
-10684:3:2951
-10685:0:4365
-10686:3:2952
-10687:0:4365
-10688:3:2953
-10689:0:4365
-10690:3:2954
-10691:3:2958
-10692:3:2959
-10693:3:2967
-10694:3:2968
-10695:3:2972
-10696:3:2973
-10697:3:2967
-10698:3:2968
-10699:3:2972
-10700:3:2973
-10701:3:2981
-10702:3:2986
-10703:3:2990
-10704:3:2991
-10705:3:2998
-10706:3:2999
-10707:3:3010
-10708:3:3011
-10709:3:3012
-10710:3:3010
-10711:3:3011
-10712:3:3012
-10713:3:3023
-10714:3:3028
-10715:3:3029
-10716:0:4365
-10717:3:3041
-10718:0:4365
-10719:3:3042
-10720:0:4365
-10721:2:1173
-10722:0:4365
-10723:3:3043
-10724:0:4365
-10725:2:1179
-10726:0:4365
-10727:2:1180
-10728:0:4365
-10729:3:3042
-10730:0:4365
-10731:2:1181
-10732:2:1185
-10733:2:1186
-10734:2:1194
-10735:2:1195
-10736:2:1199
-10737:2:1200
-10738:2:1194
-10739:2:1195
-10740:2:1199
-10741:2:1200
-10742:2:1208
-10743:2:1213
-10744:2:1217
-10745:2:1218
-10746:2:1225
-10747:2:1226
-10748:2:1237
-10749:2:1238
-10750:2:1239
-10751:2:1237
-10752:2:1238
-10753:2:1239
-10754:2:1250
-10755:2:1255
-10756:2:1256
-10757:0:4365
-10758:3:3043
-10759:0:4365
-10760:2:1268
-10761:0:4365
-10762:3:3042
-10763:0:4365
-10764:2:1270
-10765:0:4365
-10766:3:3043
-10767:0:4365
-10768:2:1271
-10769:2:1275
-10770:2:1276
-10771:2:1284
-10772:2:1285
-10773:2:1289
-10774:2:1290
-10775:2:1284
-10776:2:1285
-10777:2:1289
-10778:2:1290
-10779:2:1298
-10780:2:1303
-10781:2:1307
-10782:2:1308
-10783:2:1315
-10784:2:1316
-10785:2:1327
-10786:2:1328
-10787:2:1329
-10788:2:1327
-10789:2:1328
-10790:2:1329
-10791:2:1340
-10792:2:1345
-10793:2:1346
-10794:0:4365
-10795:2:1358
-10796:0:4365
-10797:2:1360
-10798:0:4365
-10799:3:3042
-10800:0:4365
-10801:2:1361
-10802:0:4365
-10803:3:3043
-10804:0:4365
-10805:2:1362
-10806:2:1366
-10807:2:1367
-10808:2:1375
-10809:2:1376
-10810:2:1380
-10811:2:1381
-10812:2:1375
-10813:2:1376
-10814:2:1380
-10815:2:1381
-10816:2:1389
-10817:2:1394
-10818:2:1398
-10819:2:1399
-10820:2:1406
-10821:2:1407
-10822:2:1418
-10823:2:1419
-10824:2:1420
-10825:2:1418
-10826:2:1419
-10827:2:1420
-10828:2:1431
-10829:2:1436
-10830:2:1437
-10831:0:4365
-10832:2:1449
-10833:0:4365
-10834:3:3042
-10835:0:4365
-10836:2:1451
-10837:0:4365
-10838:3:3043
-10839:0:4365
-10840:2:1652
-10841:0:4365
-10842:2:1653
-10843:0:4365
-10844:2:1657
-10845:0:4365
-10846:2:1180
-10847:0:4365
-10848:3:3042
-10849:0:4365
-10850:2:1181
-10851:2:1185
-10852:2:1186
-10853:2:1194
-10854:2:1195
-10855:2:1199
-10856:2:1200
-10857:2:1194
-10858:2:1195
-10859:2:1196
-10860:2:1208
-10861:2:1213
-10862:2:1217
-10863:2:1218
-10864:2:1225
-10865:2:1226
-10866:2:1237
-10867:2:1238
-10868:2:1239
-10869:2:1237
-10870:2:1238
-10871:2:1239
-10872:2:1250
-10873:2:1255
-10874:2:1256
-10875:0:4365
-10876:3:3043
-10877:0:4365
-10878:2:1268
-10879:0:4365
-10880:3:3042
-10881:0:4365
-10882:2:1270
-10883:0:4365
-10884:3:3043
-10885:0:4365
-10886:2:1271
-10887:2:1275
-10888:2:1276
-10889:2:1284
-10890:2:1285
-10891:2:1289
-10892:2:1290
-10893:2:1284
-10894:2:1285
-10895:2:1289
-10896:2:1290
-10897:2:1298
-10898:2:1303
-10899:2:1307
-10900:2:1308
-10901:2:1315
-10902:2:1316
-10903:2:1327
-10904:2:1328
-10905:2:1329
-10906:2:1327
-10907:2:1328
-10908:2:1329
-10909:2:1340
-10910:2:1345
-10911:2:1346
-10912:0:4365
-10913:2:1358
-10914:0:4365
-10915:2:1454
-10916:0:4365
-10917:3:3042
-10918:0:4365
-10919:2:1455
-10920:0:4365
-10921:3:3043
-10922:0:4365
-10923:2:1652
-10924:0:4365
-10925:2:1653
-10926:0:4365
-10927:2:1657
-10928:0:4365
-10929:2:1660
-10930:0:4365
-10931:3:3042
-10932:0:4365
-10933:2:1665
-10934:2:1669
-10935:2:1670
-10936:2:1678
-10937:2:1679
-10938:2:1683
-10939:2:1684
-10940:2:1678
-10941:2:1679
-10942:2:1680
-10943:2:1692
-10944:2:1697
-10945:2:1701
-10946:2:1702
-10947:2:1709
-10948:2:1710
-10949:2:1721
-10950:2:1722
-10951:2:1723
-10952:2:1721
-10953:2:1722
-10954:2:1723
-10955:2:1734
-10956:2:1739
-10957:2:1740
-10958:0:4365
-10959:3:3043
-10960:0:4365
-10961:2:1752
-10962:0:4365
-10963:3:3042
-10964:0:4365
-10965:2:1754
-10966:0:4365
-10967:3:3043
-10968:0:4365
-10969:2:1755
-10970:2:1759
-10971:2:1760
-10972:2:1768
-10973:2:1769
-10974:2:1773
-10975:2:1774
-10976:2:1768
-10977:2:1769
-10978:2:1773
-10979:2:1774
-10980:2:1782
-10981:2:1787
-10982:2:1791
-10983:2:1792
-10984:2:1799
-10985:2:1800
-10986:2:1811
-10987:2:1812
-10988:2:1813
-10989:2:1811
-10990:2:1812
-10991:2:1813
-10992:2:1824
-10993:2:1829
-10994:2:1830
-10995:0:4365
-10996:2:1842
-10997:0:4365
-10998:3:3042
-10999:0:4365
-11000:2:1844
-11001:0:4365
-11002:3:3043
-11003:0:4365
-11004:2:1845
-11005:2:1849
-11006:2:1850
-11007:2:1858
-11008:2:1859
-11009:2:1863
-11010:2:1864
-11011:2:1858
-11012:2:1859
-11013:2:1863
-11014:2:1864
-11015:2:1872
-11016:2:1877
-11017:2:1881
-11018:2:1882
-11019:2:1889
-11020:2:1890
-11021:2:1901
-11022:2:1902
-11023:2:1903
-11024:2:1901
-11025:2:1902
-11026:2:1903
-11027:2:1914
-11028:2:1919
-11029:2:1920
-11030:0:4365
-11031:2:1932
-11032:0:4365
-11033:3:3042
-11034:0:4365
-11035:2:1934
-11036:0:4365
-11037:3:3043
-11038:0:4365
-11039:2:1935
-11040:0:4365
-11041:2:1936
-11042:0:4365
-11043:2:2129
-11044:0:4365
-11045:2:2130
-11046:0:4365
-11047:2:2134
-11048:0:4365
-11049:3:3042
-11050:0:4365
-11051:2:2136
-11052:0:4365
-11053:3:3043
-11054:0:4365
-11055:2:2137
-11056:2:2141
-11057:2:2142
-11058:2:2150
-11059:2:2151
-11060:2:2155
-11061:2:2156
-11062:2:2150
-11063:2:2151
-11064:2:2155
-11065:2:2156
-11066:2:2164
-11067:2:2169
-11068:2:2173
-11069:2:2174
-11070:2:2181
-11071:2:2182
-11072:2:2193
-11073:2:2194
-11074:2:2195
-11075:2:2193
-11076:2:2194
-11077:2:2195
-11078:2:2206
-11079:2:2211
-11080:2:2212
-11081:0:4365
-11082:2:2224
-11083:0:4365
-11084:3:3042
-11085:0:4365
-11086:2:2226
-11087:0:4365
-11088:3:3043
-11089:0:4365
-11090:2:1936
-11091:0:4365
-11092:2:2129
-11093:0:4365
-11094:2:2130
-11095:0:4365
-11096:2:2134
-11097:0:4365
-11098:3:3042
-11099:0:4365
-11100:2:2136
-11101:0:4365
-11102:3:3043
-11103:0:4365
-11104:2:2137
-11105:2:2141
-11106:2:2142
-11107:2:2150
-11108:2:2151
-11109:2:2155
-11110:2:2156
-11111:2:2150
-11112:2:2151
-11113:2:2152
-11114:2:2164
-11115:2:2169
-11116:2:2173
-11117:2:2174
-11118:2:2181
-11119:2:2182
-11120:2:2193
-11121:2:2194
-11122:2:2195
-11123:2:2193
-11124:2:2194
-11125:2:2195
-11126:2:2206
-11127:2:2211
-11128:2:2212
-11129:0:4365
-11130:2:2224
-11131:0:4365
-11132:3:3042
-11133:0:4365
-11134:2:2226
-11135:0:4365
-11136:3:3043
-11137:0:4365
-11138:2:2230
-11139:0:4365
-11140:3:3042
-11141:0:4365
-11142:2:2235
-11143:2:2239
-11144:2:2240
-11145:2:2248
-11146:2:2249
-11147:2:2253
-11148:2:2254
-11149:2:2248
-11150:2:2249
-11151:2:2250
-11152:2:2262
-11153:2:2267
-11154:2:2271
-11155:2:2272
-11156:2:2279
-11157:2:2280
-11158:2:2291
-11159:2:2292
-11160:2:2293
-11161:2:2291
-11162:2:2292
-11163:2:2293
-11164:2:2304
-11165:2:2309
-11166:2:2310
-11167:0:4365
-11168:3:3043
-11169:0:4365
-11170:2:2322
-11171:0:4365
-11172:2:1169
-11173:0:4365
-11174:3:3042
-11175:0:4365
-11176:2:1170
-11177:0:4365
-11178:3:3043
-11179:0:4365
-11180:3:3044
-11181:0:4365
-11182:3:3257
-11183:0:4365
-11184:3:3362
-11185:0:4365
-11186:3:3363
-11187:0:4365
-11188:3:3367
-11189:0:4365
-11190:3:3373
-11191:3:3377
-11192:3:3378
-11193:3:3386
-11194:3:3387
-11195:3:3391
-11196:3:3392
-11197:3:3386
-11198:3:3387
-11199:3:3391
-11200:3:3392
-11201:3:3400
-11202:3:3405
-11203:3:3409
-11204:3:3410
-11205:3:3417
-11206:3:3418
-11207:3:3429
-11208:3:3430
-11209:3:3431
-11210:3:3429
-11211:3:3430
-11212:3:3431
-11213:3:3442
-11214:3:3447
-11215:3:3448
-11216:0:4365
-11217:3:3460
-11218:0:4365
-11219:3:3461
-11220:0:4365
-11221:2:1173
-11222:0:4365
-11223:3:3462
-11224:0:4365
-11225:2:1179
-11226:0:4365
-11227:2:1180
-11228:0:4365
-11229:3:3461
-11230:0:4365
-11231:2:1181
-11232:2:1185
-11233:2:1186
-11234:2:1194
-11235:2:1195
-11236:2:1199
-11237:2:1200
-11238:2:1194
-11239:2:1195
-11240:2:1199
-11241:2:1200
-11242:2:1208
-11243:2:1213
-11244:2:1217
-11245:2:1218
-11246:2:1225
-11247:2:1226
-11248:2:1237
-11249:2:1238
-11250:2:1239
-11251:2:1237
-11252:2:1238
-11253:2:1239
-11254:2:1250
-11255:2:1255
-11256:2:1256
-11257:0:4365
-11258:3:3462
-11259:0:4365
-11260:2:1268
-11261:0:4365
-11262:3:3461
-11263:0:4365
-11264:2:1270
-11265:0:4365
-11266:3:3462
-11267:0:4365
-11268:2:1271
-11269:2:1275
-11270:2:1276
-11271:2:1284
-11272:2:1285
-11273:2:1289
-11274:2:1290
-11275:2:1284
-11276:2:1285
-11277:2:1289
-11278:2:1290
-11279:2:1298
-11280:2:1303
-11281:2:1307
-11282:2:1308
-11283:2:1315
-11284:2:1316
-11285:2:1327
-11286:2:1328
-11287:2:1329
-11288:2:1327
-11289:2:1328
-11290:2:1329
-11291:2:1340
-11292:2:1345
-11293:2:1346
-11294:0:4365
-11295:2:1358
-11296:0:4365
-11297:2:1360
-11298:0:4365
-11299:3:3461
-11300:0:4365
-11301:2:1361
-11302:0:4365
-11303:3:3462
-11304:0:4365
-11305:2:1362
-11306:2:1366
-11307:2:1367
-11308:2:1375
-11309:2:1376
-11310:2:1380
-11311:2:1381
-11312:2:1375
-11313:2:1376
-11314:2:1380
-11315:2:1381
-11316:2:1389
-11317:2:1394
-11318:2:1398
-11319:2:1399
-11320:2:1406
-11321:2:1407
-11322:2:1418
-11323:2:1419
-11324:2:1420
-11325:2:1418
-11326:2:1419
-11327:2:1420
-11328:2:1431
-11329:2:1436
-11330:2:1437
-11331:0:4365
-11332:2:1449
-11333:0:4365
-11334:3:3461
-11335:0:4365
-11336:2:1451
-11337:0:4365
-11338:3:3462
-11339:0:4365
-11340:2:1652
-11341:0:4365
-11342:2:1653
-11343:0:4365
-11344:2:1657
-11345:0:4365
-11346:2:1180
-11347:0:4365
-11348:3:3461
-11349:0:4365
-11350:2:1181
-11351:2:1185
-11352:2:1186
-11353:2:1194
-11354:2:1195
-11355:2:1199
-11356:2:1200
-11357:2:1194
-11358:2:1195
-11359:2:1196
-11360:2:1208
-11361:2:1213
-11362:2:1217
-11363:2:1218
-11364:2:1225
-11365:2:1226
-11366:2:1237
-11367:2:1238
-11368:2:1239
-11369:2:1237
-11370:2:1238
-11371:2:1239
-11372:2:1250
-11373:2:1255
-11374:2:1256
-11375:0:4365
-11376:3:3462
-11377:0:4365
-11378:2:1268
-11379:0:4365
-11380:3:3461
-11381:0:4365
-11382:2:1270
-11383:0:4365
-11384:3:3462
-11385:0:4365
-11386:2:1271
-11387:2:1275
-11388:2:1276
-11389:2:1284
-11390:2:1285
-11391:2:1289
-11392:2:1290
-11393:2:1284
-11394:2:1285
-11395:2:1289
-11396:2:1290
-11397:2:1298
-11398:2:1303
-11399:2:1307
-11400:2:1308
-11401:2:1315
-11402:2:1316
-11403:2:1327
-11404:2:1328
-11405:2:1329
-11406:2:1327
-11407:2:1328
-11408:2:1329
-11409:2:1340
-11410:2:1345
-11411:2:1346
-11412:0:4365
-11413:2:1358
-11414:0:4365
-11415:2:1454
-11416:0:4365
-11417:3:3461
-11418:0:4365
-11419:2:1455
-11420:0:4365
-11421:3:3462
-11422:0:4365
-11423:2:1652
-11424:0:4365
-11425:2:1653
-11426:0:4365
-11427:2:1657
-11428:0:4365
-11429:2:1660
-11430:0:4365
-11431:3:3461
-11432:0:4365
-11433:2:1665
-11434:2:1669
-11435:2:1670
-11436:2:1678
-11437:2:1679
-11438:2:1683
-11439:2:1684
-11440:2:1678
-11441:2:1679
-11442:2:1680
-11443:2:1692
-11444:2:1697
-11445:2:1701
-11446:2:1702
-11447:2:1709
-11448:2:1710
-11449:2:1721
-11450:2:1722
-11451:2:1723
-11452:2:1721
-11453:2:1722
-11454:2:1723
-11455:2:1734
-11456:2:1739
-11457:2:1740
-11458:0:4365
-11459:3:3462
-11460:0:4365
-11461:2:1752
-11462:0:4365
-11463:3:3461
-11464:0:4365
-11465:2:1754
-11466:0:4365
-11467:3:3462
-11468:0:4365
-11469:2:1755
-11470:2:1759
-11471:2:1760
-11472:2:1768
-11473:2:1769
-11474:2:1773
-11475:2:1774
-11476:2:1768
-11477:2:1769
-11478:2:1773
-11479:2:1774
-11480:2:1782
-11481:2:1787
-11482:2:1791
-11483:2:1792
-11484:2:1799
-11485:2:1800
-11486:2:1811
-11487:2:1812
-11488:2:1813
-11489:2:1811
-11490:2:1812
-11491:2:1813
-11492:2:1824
-11493:2:1829
-11494:2:1830
-11495:0:4365
-11496:2:1842
-11497:0:4365
-11498:3:3461
-11499:0:4365
-11500:2:1844
-11501:0:4365
-11502:3:3462
-11503:0:4365
-11504:2:1845
-11505:2:1849
-11506:2:1850
-11507:2:1858
-11508:2:1859
-11509:2:1863
-11510:2:1864
-11511:2:1858
-11512:2:1859
-11513:2:1863
-11514:2:1864
-11515:2:1872
-11516:2:1877
-11517:2:1881
-11518:2:1882
-11519:2:1889
-11520:2:1890
-11521:2:1901
-11522:2:1902
-11523:2:1903
-11524:2:1901
-11525:2:1902
-11526:2:1903
-11527:2:1914
-11528:2:1919
-11529:2:1920
-11530:0:4365
-11531:2:1932
-11532:0:4365
-11533:3:3461
-11534:0:4365
-11535:2:1934
-11536:0:4365
-11537:3:3462
-11538:0:4365
-11539:2:1935
-11540:0:4365
-11541:2:1936
-11542:0:4365
-11543:2:2129
-11544:0:4365
-11545:2:2130
-11546:0:4365
-11547:2:2134
-11548:0:4365
-11549:3:3461
-11550:0:4365
-11551:2:2136
-11552:0:4365
-11553:3:3462
-11554:0:4365
-11555:2:2137
-11556:2:2141
-11557:2:2142
-11558:2:2150
-11559:2:2151
-11560:2:2155
-11561:2:2156
-11562:2:2150
-11563:2:2151
-11564:2:2155
-11565:2:2156
-11566:2:2164
-11567:2:2169
-11568:2:2173
-11569:2:2174
-11570:2:2181
-11571:2:2182
-11572:2:2193
-11573:2:2194
-11574:2:2195
-11575:2:2193
-11576:2:2194
-11577:2:2195
-11578:2:2206
-11579:2:2211
-11580:2:2212
-11581:0:4365
-11582:2:2224
-11583:0:4365
-11584:3:3461
-11585:0:4365
-11586:2:2226
-11587:0:4365
-11588:3:3462
-11589:0:4365
-11590:2:1936
-11591:0:4365
-11592:2:2129
-11593:0:4365
-11594:2:2130
-11595:0:4365
-11596:2:2134
-11597:0:4365
-11598:3:3461
-11599:0:4365
-11600:2:2136
-11601:0:4365
-11602:3:3462
-11603:0:4365
-11604:2:2137
-11605:2:2141
-11606:2:2142
-11607:2:2150
-11608:2:2151
-11609:2:2155
-11610:2:2156
-11611:2:2150
-11612:2:2151
-11613:2:2152
-11614:2:2164
-11615:2:2169
-11616:2:2173
-11617:2:2174
-11618:2:2181
-11619:2:2182
-11620:2:2193
-11621:2:2194
-11622:2:2195
-11623:2:2193
-11624:2:2194
-11625:2:2195
-11626:2:2206
-11627:2:2211
-11628:2:2212
-11629:0:4365
-11630:2:2224
-11631:0:4365
-11632:3:3461
-11633:0:4365
-11634:2:2226
-11635:0:4365
-11636:3:3462
-11637:0:4365
-11638:2:2230
-11639:0:4365
-11640:3:3461
-11641:0:4365
-11642:2:2235
-11643:2:2239
-11644:2:2240
-11645:2:2248
-11646:2:2249
-11647:2:2253
-11648:2:2254
-11649:2:2248
-11650:2:2249
-11651:2:2250
-11652:2:2262
-11653:2:2267
-11654:2:2271
-11655:2:2272
-11656:2:2279
-11657:2:2280
-11658:2:2291
-11659:2:2292
-11660:2:2293
-11661:2:2291
-11662:2:2292
-11663:2:2293
-11664:2:2304
-11665:2:2309
-11666:2:2310
-11667:0:4365
-11668:3:3462
-11669:0:4365
-11670:2:2322
-11671:0:4365
-11672:2:1169
-11673:0:4365
-11674:3:3461
-11675:0:4365
-11676:2:1170
-11677:0:4365
-11678:3:3462
-11679:0:4365
-11680:3:3463
-11681:0:4365
-11682:3:3469
-11683:0:4365
-11684:3:3470
-11685:3:3474
-11686:3:3475
-11687:3:3483
-11688:3:3484
-11689:3:3488
-11690:3:3489
-11691:3:3483
-11692:3:3484
-11693:3:3488
-11694:3:3489
-11695:3:3497
-11696:3:3502
-11697:3:3506
-11698:3:3507
-11699:3:3514
-11700:3:3515
-11701:3:3526
-11702:3:3527
-11703:3:3528
-11704:3:3526
-11705:3:3527
-11706:3:3528
-11707:3:3539
-11708:3:3544
-11709:3:3545
-11710:0:4365
-11711:3:3557
-11712:0:4365
-11713:3:3558
-11714:0:4365
-11715:2:1173
-11716:0:4365
-11717:3:3559
-11718:0:4365
-11719:2:1179
-11720:0:4365
-11721:2:1180
-11722:0:4365
-11723:3:3558
-11724:0:4365
-11725:2:1181
-11726:2:1185
-11727:2:1186
-11728:2:1194
-11729:2:1195
-11730:2:1199
-11731:2:1200
-11732:2:1194
-11733:2:1195
-11734:2:1199
-11735:2:1200
-11736:2:1208
-11737:2:1213
-11738:2:1217
-11739:2:1218
-11740:2:1225
-11741:2:1226
-11742:2:1237
-11743:2:1238
-11744:2:1239
-11745:2:1237
-11746:2:1238
-11747:2:1239
-11748:2:1250
-11749:2:1255
-11750:2:1256
-11751:0:4365
-11752:3:3559
-11753:0:4365
-11754:2:1268
-11755:0:4365
-11756:3:3558
-11757:0:4365
-11758:2:1270
-11759:0:4365
-11760:3:3559
-11761:0:4365
-11762:2:1271
-11763:2:1275
-11764:2:1276
-11765:2:1284
-11766:2:1285
-11767:2:1289
-11768:2:1290
-11769:2:1284
-11770:2:1285
-11771:2:1289
-11772:2:1290
-11773:2:1298
-11774:2:1303
-11775:2:1307
-11776:2:1308
-11777:2:1315
-11778:2:1316
-11779:2:1327
-11780:2:1328
-11781:2:1329
-11782:2:1327
-11783:2:1328
-11784:2:1329
-11785:2:1340
-11786:2:1345
-11787:2:1346
-11788:0:4365
-11789:2:1358
-11790:0:4365
-11791:2:1360
-11792:0:4365
-11793:3:3558
-11794:0:4365
-11795:2:1361
-11796:0:4365
-11797:3:3559
-11798:0:4365
-11799:2:1362
-11800:2:1366
-11801:2:1367
-11802:2:1375
-11803:2:1376
-11804:2:1380
-11805:2:1381
-11806:2:1375
-11807:2:1376
-11808:2:1380
-11809:2:1381
-11810:2:1389
-11811:2:1394
-11812:2:1398
-11813:2:1399
-11814:2:1406
-11815:2:1407
-11816:2:1418
-11817:2:1419
-11818:2:1420
-11819:2:1418
-11820:2:1419
-11821:2:1420
-11822:2:1431
-11823:2:1436
-11824:2:1437
-11825:0:4365
-11826:2:1449
-11827:0:4365
-11828:3:3558
-11829:0:4365
-11830:2:1451
-11831:0:4365
-11832:3:3559
-11833:0:4365
-11834:2:1652
-11835:0:4365
-11836:2:1653
-11837:0:4365
-11838:2:1657
-11839:0:4365
-11840:2:1180
-11841:0:4365
-11842:3:3558
-11843:0:4365
-11844:2:1181
-11845:2:1185
-11846:2:1186
-11847:2:1194
-11848:2:1195
-11849:2:1199
-11850:2:1200
-11851:2:1194
-11852:2:1195
-11853:2:1196
-11854:2:1208
-11855:2:1213
-11856:2:1217
-11857:2:1218
-11858:2:1225
-11859:2:1226
-11860:2:1237
-11861:2:1238
-11862:2:1239
-11863:2:1237
-11864:2:1238
-11865:2:1239
-11866:2:1250
-11867:2:1255
-11868:2:1256
-11869:0:4365
-11870:3:3559
-11871:0:4365
-11872:2:1268
-11873:0:4365
-11874:3:3558
-11875:0:4365
-11876:2:1270
-11877:0:4365
-11878:3:3559
-11879:0:4365
-11880:2:1271
-11881:2:1275
-11882:2:1276
-11883:2:1284
-11884:2:1285
-11885:2:1289
-11886:2:1290
-11887:2:1284
-11888:2:1285
-11889:2:1289
-11890:2:1290
-11891:2:1298
-11892:2:1303
-11893:2:1307
-11894:2:1308
-11895:2:1315
-11896:2:1316
-11897:2:1327
-11898:2:1328
-11899:2:1329
-11900:2:1327
-11901:2:1328
-11902:2:1329
-11903:2:1340
-11904:2:1345
-11905:2:1346
-11906:0:4365
-11907:2:1358
-11908:0:4365
-11909:2:1454
-11910:0:4365
-11911:3:3558
-11912:0:4365
-11913:2:1455
-11914:0:4365
-11915:3:3559
-11916:0:4365
-11917:2:1652
-11918:0:4365
-11919:2:1653
-11920:0:4365
-11921:2:1657
-11922:0:4365
-11923:2:1660
-11924:0:4365
-11925:3:3558
-11926:0:4365
-11927:2:1665
-11928:2:1669
-11929:2:1670
-11930:2:1678
-11931:2:1679
-11932:2:1683
-11933:2:1684
-11934:2:1678
-11935:2:1679
-11936:2:1680
-11937:2:1692
-11938:2:1697
-11939:2:1701
-11940:2:1702
-11941:2:1709
-11942:2:1710
-11943:2:1721
-11944:2:1722
-11945:2:1723
-11946:2:1721
-11947:2:1722
-11948:2:1723
-11949:2:1734
-11950:2:1739
-11951:2:1740
-11952:0:4365
-11953:3:3559
-11954:0:4365
-11955:2:1752
-11956:0:4365
-11957:3:3558
-11958:0:4365
-11959:2:1754
-11960:0:4365
-11961:3:3559
-11962:0:4365
-11963:2:1755
-11964:2:1759
-11965:2:1760
-11966:2:1768
-11967:2:1769
-11968:2:1773
-11969:2:1774
-11970:2:1768
-11971:2:1769
-11972:2:1773
-11973:2:1774
-11974:2:1782
-11975:2:1787
-11976:2:1791
-11977:2:1792
-11978:2:1799
-11979:2:1800
-11980:2:1811
-11981:2:1812
-11982:2:1813
-11983:2:1811
-11984:2:1812
-11985:2:1813
-11986:2:1824
-11987:2:1829
-11988:2:1830
-11989:0:4365
-11990:2:1842
-11991:0:4365
-11992:3:3558
-11993:0:4365
-11994:2:1844
-11995:0:4365
-11996:3:3559
-11997:0:4365
-11998:2:1845
-11999:2:1849
-12000:2:1850
-12001:2:1858
-12002:2:1859
-12003:2:1863
-12004:2:1864
-12005:2:1858
-12006:2:1859
-12007:2:1863
-12008:2:1864
-12009:2:1872
-12010:2:1877
-12011:2:1881
-12012:2:1882
-12013:2:1889
-12014:2:1890
-12015:2:1901
-12016:2:1902
-12017:2:1903
-12018:2:1901
-12019:2:1902
-12020:2:1903
-12021:2:1914
-12022:2:1919
-12023:2:1920
-12024:0:4365
-12025:2:1932
-12026:0:4365
-12027:3:3558
-12028:0:4365
-12029:2:1934
-12030:0:4365
-12031:3:3559
-12032:0:4365
-12033:2:1935
-12034:0:4365
-12035:2:1936
-12036:0:4365
-12037:2:2129
-12038:0:4365
-12039:2:2130
-12040:0:4365
-12041:2:2134
-12042:0:4365
-12043:3:3558
-12044:0:4365
-12045:2:2136
-12046:0:4365
-12047:3:3559
-12048:0:4365
-12049:2:2137
-12050:2:2141
-12051:2:2142
-12052:2:2150
-12053:2:2151
-12054:2:2155
-12055:2:2156
-12056:2:2150
-12057:2:2151
-12058:2:2155
-12059:2:2156
-12060:2:2164
-12061:2:2169
-12062:2:2173
-12063:2:2174
-12064:2:2181
-12065:2:2182
-12066:2:2193
-12067:2:2194
-12068:2:2195
-12069:2:2193
-12070:2:2194
-12071:2:2195
-12072:2:2206
-12073:2:2211
-12074:2:2212
-12075:0:4365
-12076:2:2224
-12077:0:4365
-12078:3:3558
-12079:0:4365
-12080:2:2226
-12081:0:4365
-12082:3:3559
-12083:0:4365
-12084:2:1936
-12085:0:4365
-12086:2:2129
-12087:0:4365
-12088:2:2130
-12089:0:4365
-12090:2:2134
-12091:0:4365
-12092:3:3558
-12093:0:4365
-12094:2:2136
-12095:0:4365
-12096:3:3559
-12097:0:4365
-12098:2:2137
-12099:2:2141
-12100:2:2142
-12101:2:2150
-12102:2:2151
-12103:2:2155
-12104:2:2156
-12105:2:2150
-12106:2:2151
-12107:2:2152
-12108:2:2164
-12109:2:2169
-12110:2:2173
-12111:2:2174
-12112:2:2181
-12113:2:2182
-12114:2:2193
-12115:2:2194
-12116:2:2195
-12117:2:2193
-12118:2:2194
-12119:2:2195
-12120:2:2206
-12121:2:2211
-12122:2:2212
-12123:0:4365
-12124:2:2224
-12125:0:4365
-12126:3:3558
-12127:0:4365
-12128:2:2226
-12129:0:4365
-12130:3:3559
-12131:0:4365
-12132:2:2230
-12133:0:4365
-12134:3:3558
-12135:0:4365
-12136:2:2235
-12137:2:2239
-12138:2:2240
-12139:2:2248
-12140:2:2249
-12141:2:2253
-12142:2:2254
-12143:2:2248
-12144:2:2249
-12145:2:2250
-12146:2:2262
-12147:2:2267
-12148:2:2271
-12149:2:2272
-12150:2:2279
-12151:2:2280
-12152:2:2291
-12153:2:2292
-12154:2:2293
-12155:2:2291
-12156:2:2292
-12157:2:2293
-12158:2:2304
-12159:2:2309
-12160:2:2310
-12161:0:4365
-12162:3:3559
-12163:0:4365
-12164:2:2322
-12165:0:4365
-12166:2:1169
-12167:0:4365
-12168:3:3558
-12169:0:4365
-12170:2:1170
-12171:0:4365
-12172:3:3559
-12173:0:4365
-12174:3:3560
-12175:0:4365
-12176:3:3566
-12177:0:4365
-12178:3:3569
-12179:3:3570
-12180:3:3582
-12181:3:3583
-12182:3:3587
-12183:3:3588
-12184:3:3582
-12185:3:3583
-12186:3:3587
-12187:3:3588
-12188:3:3596
-12189:3:3601
-12190:3:3605
-12191:3:3606
-12192:3:3613
-12193:3:3614
-12194:3:3625
-12195:3:3626
-12196:3:3627
-12197:3:3625
-12198:3:3626
-12199:3:3627
-12200:3:3638
-12201:3:3643
-12202:3:3644
-12203:0:4365
-12204:3:3656
-12205:0:4365
-12206:3:3657
-12207:0:4365
-12208:2:1173
-12209:0:4365
-12210:3:3658
-12211:0:4365
-12212:2:1179
-12213:0:4365
-12214:2:1180
-12215:0:4365
-12216:3:3657
-12217:0:4365
-12218:2:1181
-12219:2:1185
-12220:2:1186
-12221:2:1194
-12222:2:1195
-12223:2:1199
-12224:2:1200
-12225:2:1194
-12226:2:1195
-12227:2:1199
-12228:2:1200
-12229:2:1208
-12230:2:1213
-12231:2:1217
-12232:2:1218
-12233:2:1225
-12234:2:1226
-12235:2:1237
-12236:2:1238
-12237:2:1239
-12238:2:1237
-12239:2:1238
-12240:2:1239
-12241:2:1250
-12242:2:1255
-12243:2:1256
-12244:0:4365
-12245:3:3658
-12246:0:4365
-12247:2:1268
-12248:0:4365
-12249:3:3657
-12250:0:4365
-12251:2:1270
-12252:0:4365
-12253:3:3658
-12254:0:4365
-12255:2:1271
-12256:2:1275
-12257:2:1276
-12258:2:1284
-12259:2:1285
-12260:2:1289
-12261:2:1290
-12262:2:1284
-12263:2:1285
-12264:2:1289
-12265:2:1290
-12266:2:1298
-12267:2:1303
-12268:2:1307
-12269:2:1308
-12270:2:1315
-12271:2:1316
-12272:2:1327
-12273:2:1328
-12274:2:1329
-12275:2:1327
-12276:2:1328
-12277:2:1329
-12278:2:1340
-12279:2:1345
-12280:2:1346
-12281:0:4365
-12282:2:1358
-12283:0:4365
-12284:2:1360
-12285:0:4365
-12286:3:3657
-12287:0:4365
-12288:2:1361
-12289:0:4365
-12290:3:3658
-12291:0:4365
-12292:2:1362
-12293:2:1366
-12294:2:1367
-12295:2:1375
-12296:2:1376
-12297:2:1380
-12298:2:1381
-12299:2:1375
-12300:2:1376
-12301:2:1380
-12302:2:1381
-12303:2:1389
-12304:2:1394
-12305:2:1398
-12306:2:1399
-12307:2:1406
-12308:2:1407
-12309:2:1418
-12310:2:1419
-12311:2:1420
-12312:2:1418
-12313:2:1419
-12314:2:1420
-12315:2:1431
-12316:2:1436
-12317:2:1437
-12318:0:4365
-12319:2:1449
-12320:0:4365
-12321:3:3657
-12322:0:4365
-12323:2:1451
-12324:0:4365
-12325:3:3658
-12326:0:4365
-12327:2:1652
-12328:0:4365
-12329:2:1653
-12330:0:4365
-12331:2:1657
-12332:0:4365
-12333:2:1180
-12334:0:4365
-12335:3:3657
-12336:0:4365
-12337:2:1181
-12338:2:1185
-12339:2:1186
-12340:2:1194
-12341:2:1195
-12342:2:1199
-12343:2:1200
-12344:2:1194
-12345:2:1195
-12346:2:1196
-12347:2:1208
-12348:2:1213
-12349:2:1217
-12350:2:1218
-12351:2:1225
-12352:2:1226
-12353:2:1237
-12354:2:1238
-12355:2:1239
-12356:2:1237
-12357:2:1238
-12358:2:1239
-12359:2:1250
-12360:2:1255
-12361:2:1256
-12362:0:4365
-12363:3:3658
-12364:0:4365
-12365:2:1268
-12366:0:4365
-12367:3:3657
-12368:0:4365
-12369:2:1270
-12370:0:4365
-12371:3:3658
-12372:0:4365
-12373:2:1271
-12374:2:1275
-12375:2:1276
-12376:2:1284
-12377:2:1285
-12378:2:1289
-12379:2:1290
-12380:2:1284
-12381:2:1285
-12382:2:1289
-12383:2:1290
-12384:2:1298
-12385:2:1303
-12386:2:1307
-12387:2:1308
-12388:2:1315
-12389:2:1316
-12390:2:1327
-12391:2:1328
-12392:2:1329
-12393:2:1327
-12394:2:1328
-12395:2:1329
-12396:2:1340
-12397:2:1345
-12398:2:1346
-12399:0:4365
-12400:2:1358
-12401:0:4365
-12402:2:1454
-12403:0:4365
-12404:3:3657
-12405:0:4365
-12406:2:1455
-12407:0:4365
-12408:3:3658
-12409:0:4365
-12410:2:1652
-12411:0:4365
-12412:2:1653
-12413:0:4365
-12414:2:1657
-12415:0:4365
-12416:2:1660
-12417:0:4365
-12418:3:3657
-12419:0:4365
-12420:2:1665
-12421:2:1669
-12422:2:1670
-12423:2:1678
-12424:2:1679
-12425:2:1683
-12426:2:1684
-12427:2:1678
-12428:2:1679
-12429:2:1680
-12430:2:1692
-12431:2:1697
-12432:2:1701
-12433:2:1702
-12434:2:1709
-12435:2:1710
-12436:2:1721
-12437:2:1722
-12438:2:1723
-12439:2:1721
-12440:2:1722
-12441:2:1723
-12442:2:1734
-12443:2:1739
-12444:2:1740
-12445:0:4365
-12446:3:3658
-12447:0:4365
-12448:2:1752
-12449:0:4365
-12450:3:3657
-12451:0:4365
-12452:2:1754
-12453:0:4365
-12454:3:3658
-12455:0:4365
-12456:2:1755
-12457:2:1759
-12458:2:1760
-12459:2:1768
-12460:2:1769
-12461:2:1773
-12462:2:1774
-12463:2:1768
-12464:2:1769
-12465:2:1773
-12466:2:1774
-12467:2:1782
-12468:2:1787
-12469:2:1791
-12470:2:1792
-12471:2:1799
-12472:2:1800
-12473:2:1811
-12474:2:1812
-12475:2:1813
-12476:2:1811
-12477:2:1812
-12478:2:1813
-12479:2:1824
-12480:2:1829
-12481:2:1830
-12482:0:4365
-12483:2:1842
-12484:0:4365
-12485:3:3657
-12486:0:4365
-12487:2:1844
-12488:0:4365
-12489:3:3658
-12490:0:4365
-12491:2:1845
-12492:2:1849
-12493:2:1850
-12494:2:1858
-12495:2:1859
-12496:2:1863
-12497:2:1864
-12498:2:1858
-12499:2:1859
-12500:2:1863
-12501:2:1864
-12502:2:1872
-12503:2:1877
-12504:2:1881
-12505:2:1882
-12506:2:1889
-12507:2:1890
-12508:2:1901
-12509:2:1902
-12510:2:1903
-12511:2:1901
-12512:2:1902
-12513:2:1903
-12514:2:1914
-12515:2:1919
-12516:2:1920
-12517:0:4365
-12518:2:1932
-12519:0:4365
-12520:3:3657
-12521:0:4365
-12522:2:1934
-12523:0:4365
-12524:3:3658
-12525:0:4365
-12526:2:1935
-12527:0:4365
-12528:2:1936
-12529:0:4365
-12530:2:2129
-12531:0:4365
-12532:2:2130
-12533:0:4365
-12534:2:2134
-12535:0:4365
-12536:3:3657
-12537:0:4365
-12538:2:2136
-12539:0:4365
-12540:3:3658
-12541:0:4365
-12542:2:2137
-12543:2:2141
-12544:2:2142
-12545:2:2150
-12546:2:2151
-12547:2:2155
-12548:2:2156
-12549:2:2150
-12550:2:2151
-12551:2:2155
-12552:2:2156
-12553:2:2164
-12554:2:2169
-12555:2:2173
-12556:2:2174
-12557:2:2181
-12558:2:2182
-12559:2:2193
-12560:2:2194
-12561:2:2195
-12562:2:2193
-12563:2:2194
-12564:2:2195
-12565:2:2206
-12566:2:2211
-12567:2:2212
-12568:0:4365
-12569:2:2224
-12570:0:4365
-12571:3:3657
-12572:0:4365
-12573:2:2226
-12574:0:4365
-12575:3:3658
-12576:0:4365
-12577:2:1936
-12578:0:4365
-12579:2:2129
-12580:0:4365
-12581:2:2130
-12582:0:4365
-12583:2:2134
-12584:0:4365
-12585:3:3657
-12586:0:4365
-12587:2:2136
-12588:0:4365
-12589:3:3658
-12590:0:4365
-12591:2:2137
-12592:2:2141
-12593:2:2142
-12594:2:2150
-12595:2:2151
-12596:2:2155
-12597:2:2156
-12598:2:2150
-12599:2:2151
-12600:2:2152
-12601:2:2164
-12602:2:2169
-12603:2:2173
-12604:2:2174
-12605:2:2181
-12606:2:2182
-12607:2:2193
-12608:2:2194
-12609:2:2195
-12610:2:2193
-12611:2:2194
-12612:2:2195
-12613:2:2206
-12614:2:2211
-12615:2:2212
-12616:0:4365
-12617:2:2224
-12618:0:4365
-12619:3:3657
-12620:0:4365
-12621:2:2226
-12622:0:4365
-12623:3:3658
-12624:0:4365
-12625:2:2230
-12626:0:4365
-12627:3:3657
-12628:0:4365
-12629:2:2235
-12630:2:2239
-12631:2:2240
-12632:2:2248
-12633:2:2249
-12634:2:2253
-12635:2:2254
-12636:2:2248
-12637:2:2249
-12638:2:2250
-12639:2:2262
-12640:2:2267
-12641:2:2271
-12642:2:2272
-12643:2:2279
-12644:2:2280
-12645:2:2291
-12646:2:2292
-12647:2:2293
-12648:2:2291
-12649:2:2292
-12650:2:2293
-12651:2:2304
-12652:2:2309
-12653:2:2310
-12654:0:4365
-12655:3:3658
-12656:0:4365
-12657:2:2322
-12658:0:4365
-12659:2:1169
-12660:0:4365
-12661:3:3657
-12662:0:4365
-12663:2:1170
-12664:0:4365
-12665:3:3658
-12666:0:4365
-12667:3:3659
-12668:0:4365
-12669:3:3665
-12670:0:4365
-12671:3:3666
-12672:0:4365
-12673:3:3667
-12674:0:4365
-12675:3:3668
-12676:0:4365
-12677:3:3669
-12678:3:3673
-12679:3:3674
-12680:3:3682
-12681:3:3683
-12682:3:3687
-12683:3:3688
-12684:3:3682
-12685:3:3683
-12686:3:3687
-12687:3:3688
-12688:3:3696
-12689:3:3701
-12690:3:3705
-12691:3:3706
-12692:3:3713
-12693:3:3714
-12694:3:3725
-12695:3:3726
-12696:3:3727
-12697:3:3725
-12698:3:3726
-12699:3:3727
-12700:3:3738
-12701:3:3743
-12702:3:3744
-12703:0:4365
-12704:3:3756
-12705:0:4365
-12706:3:3757
-12707:0:4365
-12708:2:1173
-12709:0:4365
-12710:3:3758
-12711:0:4365
-12712:2:1179
-12713:0:4365
-12714:2:1180
-12715:0:4365
-12716:3:3757
-12717:0:4365
-12718:2:1181
-12719:2:1185
-12720:2:1186
-12721:2:1194
-12722:2:1195
-12723:2:1199
-12724:2:1200
-12725:2:1194
-12726:2:1195
-12727:2:1199
-12728:2:1200
-12729:2:1208
-12730:2:1213
-12731:2:1217
-12732:2:1218
-12733:2:1225
-12734:2:1226
-12735:2:1237
-12736:2:1238
-12737:2:1239
-12738:2:1237
-12739:2:1238
-12740:2:1239
-12741:2:1250
-12742:2:1255
-12743:2:1256
-12744:0:4365
-12745:3:3758
-12746:0:4365
-12747:2:1268
-12748:0:4365
-12749:3:3757
-12750:0:4365
-12751:2:1270
-12752:0:4365
-12753:3:3758
-12754:0:4365
-12755:2:1271
-12756:2:1275
-12757:2:1276
-12758:2:1284
-12759:2:1285
-12760:2:1289
-12761:2:1290
-12762:2:1284
-12763:2:1285
-12764:2:1289
-12765:2:1290
-12766:2:1298
-12767:2:1303
-12768:2:1307
-12769:2:1308
-12770:2:1315
-12771:2:1316
-12772:2:1327
-12773:2:1328
-12774:2:1329
-12775:2:1327
-12776:2:1328
-12777:2:1329
-12778:2:1340
-12779:2:1345
-12780:2:1346
-12781:0:4365
-12782:2:1358
-12783:0:4365
-12784:2:1360
-12785:0:4365
-12786:3:3757
-12787:0:4365
-12788:2:1361
-12789:0:4365
-12790:3:3758
-12791:0:4365
-12792:2:1362
-12793:2:1366
-12794:2:1367
-12795:2:1375
-12796:2:1376
-12797:2:1380
-12798:2:1381
-12799:2:1375
-12800:2:1376
-12801:2:1380
-12802:2:1381
-12803:2:1389
-12804:2:1394
-12805:2:1398
-12806:2:1399
-12807:2:1406
-12808:2:1407
-12809:2:1418
-12810:2:1419
-12811:2:1420
-12812:2:1418
-12813:2:1419
-12814:2:1420
-12815:2:1431
-12816:2:1436
-12817:2:1437
-12818:0:4365
-12819:2:1449
-12820:0:4365
-12821:3:3757
-12822:0:4365
-12823:2:1451
-12824:0:4365
-12825:3:3758
-12826:0:4365
-12827:2:1652
-12828:0:4365
-12829:2:1653
-12830:0:4365
-12831:2:1657
-12832:0:4365
-12833:2:1180
-12834:0:4365
-12835:3:3757
-12836:0:4365
-12837:2:1181
-12838:2:1185
-12839:2:1186
-12840:2:1194
-12841:2:1195
-12842:2:1199
-12843:2:1200
-12844:2:1194
-12845:2:1195
-12846:2:1196
-12847:2:1208
-12848:2:1213
-12849:2:1217
-12850:2:1218
-12851:2:1225
-12852:2:1226
-12853:2:1237
-12854:2:1238
-12855:2:1239
-12856:2:1237
-12857:2:1238
-12858:2:1239
-12859:2:1250
-12860:2:1255
-12861:2:1256
-12862:0:4365
-12863:3:3758
-12864:0:4365
-12865:2:1268
-12866:0:4365
-12867:3:3757
-12868:0:4365
-12869:2:1270
-12870:0:4365
-12871:3:3758
-12872:0:4365
-12873:2:1271
-12874:2:1275
-12875:2:1276
-12876:2:1284
-12877:2:1285
-12878:2:1289
-12879:2:1290
-12880:2:1284
-12881:2:1285
-12882:2:1289
-12883:2:1290
-12884:2:1298
-12885:2:1303
-12886:2:1307
-12887:2:1308
-12888:2:1315
-12889:2:1316
-12890:2:1327
-12891:2:1328
-12892:2:1329
-12893:2:1327
-12894:2:1328
-12895:2:1329
-12896:2:1340
-12897:2:1345
-12898:2:1346
-12899:0:4365
-12900:2:1358
-12901:0:4365
-12902:2:1454
-12903:0:4365
-12904:3:3757
-12905:0:4365
-12906:2:1455
-12907:0:4365
-12908:3:3758
-12909:0:4365
-12910:2:1652
-12911:0:4365
-12912:2:1653
-12913:0:4365
-12914:2:1657
-12915:0:4365
-12916:2:1660
-12917:0:4365
-12918:3:3757
-12919:0:4365
-12920:2:1665
-12921:2:1669
-12922:2:1670
-12923:2:1678
-12924:2:1679
-12925:2:1683
-12926:2:1684
-12927:2:1678
-12928:2:1679
-12929:2:1680
-12930:2:1692
-12931:2:1697
-12932:2:1701
-12933:2:1702
-12934:2:1709
-12935:2:1710
-12936:2:1721
-12937:2:1722
-12938:2:1723
-12939:2:1721
-12940:2:1722
-12941:2:1723
-12942:2:1734
-12943:2:1739
-12944:2:1740
-12945:0:4365
-12946:3:3758
-12947:0:4365
-12948:2:1752
-12949:0:4365
-12950:3:3757
-12951:0:4365
-12952:2:1754
-12953:0:4365
-12954:3:3758
-12955:0:4365
-12956:2:1755
-12957:2:1759
-12958:2:1760
-12959:2:1768
-12960:2:1769
-12961:2:1773
-12962:2:1774
-12963:2:1768
-12964:2:1769
-12965:2:1773
-12966:2:1774
-12967:2:1782
-12968:2:1787
-12969:2:1791
-12970:2:1792
-12971:2:1799
-12972:2:1800
-12973:2:1811
-12974:2:1812
-12975:2:1813
-12976:2:1811
-12977:2:1812
-12978:2:1813
-12979:2:1824
-12980:2:1829
-12981:2:1830
-12982:0:4365
-12983:2:1842
-12984:0:4365
-12985:3:3757
-12986:0:4365
-12987:2:1844
-12988:0:4365
-12989:3:3758
-12990:0:4365
-12991:2:1845
-12992:2:1849
-12993:2:1850
-12994:2:1858
-12995:2:1859
-12996:2:1863
-12997:2:1864
-12998:2:1858
-12999:2:1859
-13000:2:1863
-13001:2:1864
-13002:2:1872
-13003:2:1877
-13004:2:1881
-13005:2:1882
-13006:2:1889
-13007:2:1890
-13008:2:1901
-13009:2:1902
-13010:2:1903
-13011:2:1901
-13012:2:1902
-13013:2:1903
-13014:2:1914
-13015:2:1919
-13016:2:1920
-13017:0:4365
-13018:2:1932
-13019:0:4365
-13020:3:3757
-13021:0:4365
-13022:2:1934
-13023:0:4365
-13024:3:3758
-13025:0:4365
-13026:2:1935
-13027:0:4365
-13028:2:1936
-13029:0:4365
-13030:2:2129
-13031:0:4365
-13032:2:2130
-13033:0:4365
-13034:2:2134
-13035:0:4365
-13036:3:3757
-13037:0:4365
-13038:2:2136
-13039:0:4365
-13040:3:3758
-13041:0:4365
-13042:2:2137
-13043:2:2141
-13044:2:2142
-13045:2:2150
-13046:2:2151
-13047:2:2155
-13048:2:2156
-13049:2:2150
-13050:2:2151
-13051:2:2155
-13052:2:2156
-13053:2:2164
-13054:2:2169
-13055:2:2173
-13056:2:2174
-13057:2:2181
-13058:2:2182
-13059:2:2193
-13060:2:2194
-13061:2:2195
-13062:2:2193
-13063:2:2194
-13064:2:2195
-13065:2:2206
-13066:2:2211
-13067:2:2212
-13068:0:4365
-13069:2:2224
-13070:0:4365
-13071:3:3757
-13072:0:4365
-13073:2:2226
-13074:0:4365
-13075:3:3758
-13076:0:4365
-13077:2:1936
-13078:0:4365
-13079:2:2129
-13080:0:4365
-13081:2:2130
-13082:0:4365
-13083:2:2134
-13084:0:4365
-13085:3:3757
-13086:0:4365
-13087:2:2136
-13088:0:4365
-13089:3:3758
-13090:0:4365
-13091:2:2137
-13092:2:2141
-13093:2:2142
-13094:2:2150
-13095:2:2151
-13096:2:2155
-13097:2:2156
-13098:2:2150
-13099:2:2151
-13100:2:2152
-13101:2:2164
-13102:2:2169
-13103:2:2173
-13104:2:2174
-13105:2:2181
-13106:2:2182
-13107:2:2193
-13108:2:2194
-13109:2:2195
-13110:2:2193
-13111:2:2194
-13112:2:2195
-13113:2:2206
-13114:2:2211
-13115:2:2212
-13116:0:4365
-13117:2:2224
-13118:0:4365
-13119:3:3757
-13120:0:4365
-13121:2:2226
-13122:0:4365
-13123:3:3758
-13124:0:4365
-13125:2:2230
-13126:0:4365
-13127:3:3757
-13128:0:4365
-13129:2:2235
-13130:2:2239
-13131:2:2240
-13132:2:2248
-13133:2:2249
-13134:2:2253
-13135:2:2254
-13136:2:2248
-13137:2:2249
-13138:2:2250
-13139:2:2262
-13140:2:2267
-13141:2:2271
-13142:2:2272
-13143:2:2279
-13144:2:2280
-13145:2:2291
-13146:2:2292
-13147:2:2293
-13148:2:2291
-13149:2:2292
-13150:2:2293
-13151:2:2304
-13152:2:2309
-13153:2:2310
-13154:0:4365
-13155:3:3758
-13156:0:4365
-13157:2:2322
-13158:0:4365
-13159:2:1169
-13160:0:4365
-13161:3:3757
-13162:0:4365
-13163:2:1170
-13164:0:4365
-13165:3:3758
-13166:0:4365
-13167:3:3759
-13168:0:4365
-13169:3:3972
-13170:0:4365
-13171:3:3980
-13172:0:4365
-13173:3:3981
-13174:3:3985
-13175:3:3986
-13176:3:3994
-13177:3:3995
-13178:3:3999
-13179:3:4000
-13180:3:3994
-13181:3:3995
-13182:3:3999
-13183:3:4000
-13184:3:4008
-13185:3:4013
-13186:3:4017
-13187:3:4018
-13188:3:4025
-13189:3:4026
-13190:3:4037
-13191:3:4038
-13192:3:4039
-13193:3:4037
-13194:3:4038
-13195:3:4039
-13196:3:4050
-13197:3:4055
-13198:3:4056
-13199:0:4365
-13200:3:4068
-13201:0:4365
-13202:3:4069
-13203:0:4365
-13204:2:1173
-13205:0:4365
-13206:3:4070
-13207:0:4365
-13208:2:1179
-13209:0:4365
-13210:2:1180
-13211:0:4365
-13212:3:4069
-13213:0:4365
-13214:2:1181
-13215:2:1185
-13216:2:1186
-13217:2:1194
-13218:2:1195
-13219:2:1199
-13220:2:1200
-13221:2:1194
-13222:2:1195
-13223:2:1199
-13224:2:1200
-13225:2:1208
-13226:2:1213
-13227:2:1217
-13228:2:1218
-13229:2:1225
-13230:2:1226
-13231:2:1237
-13232:2:1238
-13233:2:1239
-13234:2:1237
-13235:2:1238
-13236:2:1239
-13237:2:1250
-13238:2:1255
-13239:2:1256
-13240:0:4365
-13241:3:4070
-13242:0:4365
-13243:2:1268
-13244:0:4365
-13245:3:4069
-13246:0:4365
-13247:2:1270
-13248:0:4365
-13249:3:4070
-13250:0:4365
-13251:2:1271
-13252:2:1275
-13253:2:1276
-13254:2:1284
-13255:2:1285
-13256:2:1289
-13257:2:1290
-13258:2:1284
-13259:2:1285
-13260:2:1289
-13261:2:1290
-13262:2:1298
-13263:2:1303
-13264:2:1307
-13265:2:1308
-13266:2:1315
-13267:2:1316
-13268:2:1327
-13269:2:1328
-13270:2:1329
-13271:2:1327
-13272:2:1328
-13273:2:1329
-13274:2:1340
-13275:2:1345
-13276:2:1346
-13277:0:4365
-13278:2:1358
-13279:0:4365
-13280:2:1360
-13281:0:4365
-13282:3:4069
-13283:0:4365
-13284:2:1361
-13285:0:4365
-13286:3:4070
-13287:0:4365
-13288:2:1362
-13289:2:1366
-13290:2:1367
-13291:2:1375
-13292:2:1376
-13293:2:1380
-13294:2:1381
-13295:2:1375
-13296:2:1376
-13297:2:1380
-13298:2:1381
-13299:2:1389
-13300:2:1394
-13301:2:1398
-13302:2:1399
-13303:2:1406
-13304:2:1407
-13305:2:1418
-13306:2:1419
-13307:2:1420
-13308:2:1418
-13309:2:1419
-13310:2:1420
-13311:2:1431
-13312:2:1436
-13313:2:1437
-13314:0:4365
-13315:2:1449
-13316:0:4365
-13317:3:4069
-13318:0:4365
-13319:2:1451
-13320:0:4365
-13321:3:4070
-13322:0:4365
-13323:2:1652
-13324:0:4365
-13325:2:1653
-13326:0:4365
-13327:2:1657
-13328:0:4365
-13329:2:1180
-13330:0:4365
-13331:3:4069
-13332:0:4365
-13333:2:1181
-13334:2:1185
-13335:2:1186
-13336:2:1194
-13337:2:1195
-13338:2:1199
-13339:2:1200
-13340:2:1194
-13341:2:1195
-13342:2:1196
-13343:2:1208
-13344:2:1213
-13345:2:1217
-13346:2:1218
-13347:2:1225
-13348:2:1226
-13349:2:1237
-13350:2:1238
-13351:2:1239
-13352:2:1237
-13353:2:1238
-13354:2:1239
-13355:2:1250
-13356:2:1255
-13357:2:1256
-13358:0:4365
-13359:3:4070
-13360:0:4365
-13361:2:1268
-13362:0:4365
-13363:3:4069
-13364:0:4365
-13365:2:1270
-13366:0:4365
-13367:3:4070
-13368:0:4365
-13369:2:1271
-13370:2:1275
-13371:2:1276
-13372:2:1284
-13373:2:1285
-13374:2:1289
-13375:2:1290
-13376:2:1284
-13377:2:1285
-13378:2:1289
-13379:2:1290
-13380:2:1298
-13381:2:1303
-13382:2:1307
-13383:2:1308
-13384:2:1315
-13385:2:1316
-13386:2:1327
-13387:2:1328
-13388:2:1329
-13389:2:1327
-13390:2:1328
-13391:2:1329
-13392:2:1340
-13393:2:1345
-13394:2:1346
-13395:0:4365
-13396:2:1358
-13397:0:4365
-13398:2:1454
-13399:0:4365
-13400:3:4069
-13401:0:4365
-13402:2:1455
-13403:0:4365
-13404:3:4070
-13405:0:4365
-13406:2:1652
-13407:0:4365
-13408:2:1653
-13409:0:4365
-13410:2:1657
-13411:0:4365
-13412:2:1660
-13413:0:4365
-13414:3:4069
-13415:0:4365
-13416:2:1665
-13417:2:1669
-13418:2:1670
-13419:2:1678
-13420:2:1679
-13421:2:1683
-13422:2:1684
-13423:2:1678
-13424:2:1679
-13425:2:1680
-13426:2:1692
-13427:2:1697
-13428:2:1701
-13429:2:1702
-13430:2:1709
-13431:2:1710
-13432:2:1721
-13433:2:1722
-13434:2:1723
-13435:2:1721
-13436:2:1722
-13437:2:1723
-13438:2:1734
-13439:2:1739
-13440:2:1740
-13441:0:4365
-13442:3:4070
-13443:0:4365
-13444:2:1752
-13445:0:4365
-13446:3:4069
-13447:0:4365
-13448:2:1754
-13449:0:4365
-13450:3:4070
-13451:0:4365
-13452:2:1755
-13453:2:1759
-13454:2:1760
-13455:2:1768
-13456:2:1769
-13457:2:1773
-13458:2:1774
-13459:2:1768
-13460:2:1769
-13461:2:1773
-13462:2:1774
-13463:2:1782
-13464:2:1787
-13465:2:1791
-13466:2:1792
-13467:2:1799
-13468:2:1800
-13469:2:1811
-13470:2:1812
-13471:2:1813
-13472:2:1811
-13473:2:1812
-13474:2:1813
-13475:2:1824
-13476:2:1829
-13477:2:1830
-13478:0:4365
-13479:2:1842
-13480:0:4365
-13481:3:4069
-13482:0:4365
-13483:2:1844
-13484:0:4365
-13485:3:4070
-13486:0:4365
-13487:2:1845
-13488:2:1849
-13489:2:1850
-13490:2:1858
-13491:2:1859
-13492:2:1863
-13493:2:1864
-13494:2:1858
-13495:2:1859
-13496:2:1863
-13497:2:1864
-13498:2:1872
-13499:2:1877
-13500:2:1881
-13501:2:1882
-13502:2:1889
-13503:2:1890
-13504:2:1901
-13505:2:1902
-13506:2:1903
-13507:2:1901
-13508:2:1902
-13509:2:1903
-13510:2:1914
-13511:2:1919
-13512:2:1920
-13513:0:4365
-13514:2:1932
-13515:0:4365
-13516:3:4069
-13517:0:4365
-13518:2:1934
-13519:0:4365
-13520:3:4070
-13521:0:4365
-13522:2:1935
-13523:0:4365
-13524:2:1936
-13525:0:4365
-13526:2:2129
-13527:0:4365
-13528:2:2130
-13529:0:4365
-13530:2:2134
-13531:0:4365
-13532:3:4069
-13533:0:4365
-13534:2:2136
-13535:0:4365
-13536:3:4070
-13537:0:4365
-13538:2:2137
-13539:2:2141
-13540:2:2142
-13541:2:2150
-13542:2:2151
-13543:2:2155
-13544:2:2156
-13545:2:2150
-13546:2:2151
-13547:2:2155
-13548:2:2156
-13549:2:2164
-13550:2:2169
-13551:2:2173
-13552:2:2174
-13553:2:2181
-13554:2:2182
-13555:2:2193
-13556:2:2194
-13557:2:2195
-13558:2:2193
-13559:2:2194
-13560:2:2195
-13561:2:2206
-13562:2:2211
-13563:2:2212
-13564:0:4365
-13565:2:2224
-13566:0:4365
-13567:3:4069
-13568:0:4365
-13569:2:2226
-13570:0:4365
-13571:3:4070
-13572:0:4365
-13573:2:1936
-13574:0:4365
-13575:2:2129
-13576:0:4365
-13577:2:2130
-13578:0:4365
-13579:2:2134
-13580:0:4365
-13581:3:4069
-13582:0:4365
-13583:2:2136
-13584:0:4365
-13585:3:4070
-13586:0:4365
-13587:2:2137
-13588:2:2141
-13589:2:2142
-13590:2:2150
-13591:2:2151
-13592:2:2155
-13593:2:2156
-13594:2:2150
-13595:2:2151
-13596:2:2152
-13597:2:2164
-13598:2:2169
-13599:2:2173
-13600:2:2174
-13601:2:2181
-13602:2:2182
-13603:2:2193
-13604:2:2194
-13605:2:2195
-13606:2:2193
-13607:2:2194
-13608:2:2195
-13609:2:2206
-13610:2:2211
-13611:2:2212
-13612:0:4365
-13613:2:2224
-13614:0:4365
-13615:3:4069
-13616:0:4365
-13617:2:2226
-13618:0:4365
-13619:3:4070
-13620:0:4365
-13621:2:2230
-13622:0:4365
-13623:3:4069
-13624:0:4365
-13625:2:2235
-13626:2:2239
-13627:2:2240
-13628:2:2248
-13629:2:2249
-13630:2:2253
-13631:2:2254
-13632:2:2248
-13633:2:2249
-13634:2:2250
-13635:2:2262
-13636:2:2267
-13637:2:2271
-13638:2:2272
-13639:2:2279
-13640:2:2280
-13641:2:2291
-13642:2:2292
-13643:2:2293
-13644:2:2291
-13645:2:2292
-13646:2:2293
-13647:2:2304
-13648:2:2309
-13649:2:2310
-13650:0:4365
-13651:3:4070
-13652:0:4365
-13653:2:2322
-13654:0:4365
-13655:2:1169
-13656:0:4365
-13657:3:4069
-13658:0:4365
-13659:2:1170
-13660:0:4365
-13661:3:4070
-13662:0:4365
-13663:3:4071
-13664:0:4365
-13665:3:4081
-13666:0:4365
-13667:3:3666
-13668:0:4365
-13669:3:3667
-13670:0:4365
-13671:3:3668
-13672:0:4365
-13673:3:3669
-13674:3:3673
-13675:3:3674
-13676:3:3682
-13677:3:3683
-13678:3:3687
-13679:3:3688
-13680:3:3682
-13681:3:3683
-13682:3:3687
-13683:3:3688
-13684:3:3696
-13685:3:3701
-13686:3:3705
-13687:3:3706
-13688:3:3713
-13689:3:3714
-13690:3:3725
-13691:3:3726
-13692:3:3727
-13693:3:3725
-13694:3:3726
-13695:3:3727
-13696:3:3738
-13697:3:3743
-13698:3:3744
-13699:0:4365
-13700:3:3756
-13701:0:4365
-13702:3:3757
-13703:0:4365
-13704:2:1173
-13705:0:4365
-13706:3:3758
-13707:0:4365
-13708:2:1179
-13709:0:4365
-13710:2:1180
-13711:0:4365
-13712:3:3757
-13713:0:4365
-13714:2:1181
-13715:2:1185
-13716:2:1186
-13717:2:1194
-13718:2:1195
-13719:2:1199
-13720:2:1200
-13721:2:1194
-13722:2:1195
-13723:2:1199
-13724:2:1200
-13725:2:1208
-13726:2:1213
-13727:2:1217
-13728:2:1218
-13729:2:1225
-13730:2:1226
-13731:2:1237
-13732:2:1238
-13733:2:1239
-13734:2:1237
-13735:2:1238
-13736:2:1239
-13737:2:1250
-13738:2:1255
-13739:2:1256
-13740:0:4365
-13741:3:3758
-13742:0:4365
-13743:2:1268
-13744:0:4365
-13745:3:3757
-13746:0:4365
-13747:2:1270
-13748:0:4365
-13749:3:3758
-13750:0:4365
-13751:2:1271
-13752:2:1275
-13753:2:1276
-13754:2:1284
-13755:2:1285
-13756:2:1289
-13757:2:1290
-13758:2:1284
-13759:2:1285
-13760:2:1289
-13761:2:1290
-13762:2:1298
-13763:2:1303
-13764:2:1307
-13765:2:1308
-13766:2:1315
-13767:2:1316
-13768:2:1327
-13769:2:1328
-13770:2:1329
-13771:2:1327
-13772:2:1328
-13773:2:1329
-13774:2:1340
-13775:2:1345
-13776:2:1346
-13777:0:4365
-13778:2:1358
-13779:0:4365
-13780:2:1360
-13781:0:4365
-13782:3:3757
-13783:0:4365
-13784:2:1361
-13785:0:4365
-13786:3:3758
-13787:0:4365
-13788:2:1362
-13789:2:1366
-13790:2:1367
-13791:2:1375
-13792:2:1376
-13793:2:1380
-13794:2:1381
-13795:2:1375
-13796:2:1376
-13797:2:1380
-13798:2:1381
-13799:2:1389
-13800:2:1394
-13801:2:1398
-13802:2:1399
-13803:2:1406
-13804:2:1407
-13805:2:1418
-13806:2:1419
-13807:2:1420
-13808:2:1418
-13809:2:1419
-13810:2:1420
-13811:2:1431
-13812:2:1436
-13813:2:1437
-13814:0:4365
-13815:2:1449
-13816:0:4365
-13817:3:3757
-13818:0:4365
-13819:2:1451
-13820:0:4365
-13821:3:3758
-13822:0:4365
-13823:2:1652
-13824:0:4365
-13825:2:1653
-13826:0:4365
-13827:2:1657
-13828:0:4365
-13829:2:1180
-13830:0:4365
-13831:3:3757
-13832:0:4365
-13833:2:1181
-13834:2:1185
-13835:2:1186
-13836:2:1194
-13837:2:1195
-13838:2:1199
-13839:2:1200
-13840:2:1194
-13841:2:1195
-13842:2:1196
-13843:2:1208
-13844:2:1213
-13845:2:1217
-13846:2:1218
-13847:2:1225
-13848:2:1226
-13849:2:1237
-13850:2:1238
-13851:2:1239
-13852:2:1237
-13853:2:1238
-13854:2:1239
-13855:2:1250
-13856:2:1255
-13857:2:1256
-13858:0:4365
-13859:3:3758
-13860:0:4365
-13861:2:1268
-13862:0:4365
-13863:3:3757
-13864:0:4365
-13865:2:1270
-13866:0:4365
-13867:3:3758
-13868:0:4365
-13869:2:1271
-13870:2:1275
-13871:2:1276
-13872:2:1284
-13873:2:1285
-13874:2:1289
-13875:2:1290
-13876:2:1284
-13877:2:1285
-13878:2:1289
-13879:2:1290
-13880:2:1298
-13881:2:1303
-13882:2:1307
-13883:2:1308
-13884:2:1315
-13885:2:1316
-13886:2:1327
-13887:2:1328
-13888:2:1329
-13889:2:1327
-13890:2:1328
-13891:2:1329
-13892:2:1340
-13893:2:1345
-13894:2:1346
-13895:0:4365
-13896:2:1358
-13897:0:4365
-13898:2:1454
-13899:0:4365
-13900:3:3757
-13901:0:4365
-13902:2:1455
-13903:0:4365
-13904:3:3758
-13905:0:4365
-13906:2:1652
-13907:0:4365
-13908:2:1653
-13909:0:4365
-13910:2:1657
-13911:0:4365
-13912:2:1660
-13913:0:4365
-13914:3:3757
-13915:0:4365
-13916:2:1665
-13917:2:1669
-13918:2:1670
-13919:2:1678
-13920:2:1679
-13921:2:1683
-13922:2:1684
-13923:2:1678
-13924:2:1679
-13925:2:1680
-13926:2:1692
-13927:2:1697
-13928:2:1701
-13929:2:1702
-13930:2:1709
-13931:2:1710
-13932:2:1721
-13933:2:1722
-13934:2:1723
-13935:2:1721
-13936:2:1722
-13937:2:1723
-13938:2:1734
-13939:2:1739
-13940:2:1740
-13941:0:4365
-13942:3:3758
-13943:0:4365
-13944:2:1752
-13945:0:4365
-13946:3:3757
-13947:0:4365
-13948:2:1754
-13949:0:4365
-13950:3:3758
-13951:0:4365
-13952:2:1755
-13953:2:1759
-13954:2:1760
-13955:2:1768
-13956:2:1769
-13957:2:1773
-13958:2:1774
-13959:2:1768
-13960:2:1769
-13961:2:1773
-13962:2:1774
-13963:2:1782
-13964:2:1787
-13965:2:1791
-13966:2:1792
-13967:2:1799
-13968:2:1800
-13969:2:1811
-13970:2:1812
-13971:2:1813
-13972:2:1811
-13973:2:1812
-13974:2:1813
-13975:2:1824
-13976:2:1829
-13977:2:1830
-13978:0:4365
-13979:2:1842
-13980:0:4365
-13981:3:3757
-13982:0:4365
-13983:2:1844
-13984:0:4365
-13985:3:3758
-13986:0:4365
-13987:2:1845
-13988:2:1849
-13989:2:1850
-13990:2:1858
-13991:2:1859
-13992:2:1863
-13993:2:1864
-13994:2:1858
-13995:2:1859
-13996:2:1863
-13997:2:1864
-13998:2:1872
-13999:2:1877
-14000:2:1881
-14001:2:1882
-14002:2:1889
-14003:2:1890
-14004:2:1901
-14005:2:1902
-14006:2:1903
-14007:2:1901
-14008:2:1902
-14009:2:1903
-14010:2:1914
-14011:2:1919
-14012:2:1920
-14013:0:4365
-14014:2:1932
-14015:0:4365
-14016:3:3757
-14017:0:4365
-14018:2:1934
-14019:0:4365
-14020:3:3758
-14021:0:4365
-14022:2:1935
-14023:0:4365
-14024:2:1936
-14025:0:4365
-14026:2:2129
-14027:0:4365
-14028:2:2130
-14029:0:4365
-14030:2:2134
-14031:0:4365
-14032:3:3757
-14033:0:4365
-14034:2:2136
-14035:0:4365
-14036:3:3758
-14037:0:4365
-14038:2:2137
-14039:2:2141
-14040:2:2142
-14041:2:2150
-14042:2:2151
-14043:2:2155
-14044:2:2156
-14045:2:2150
-14046:2:2151
-14047:2:2155
-14048:2:2156
-14049:2:2164
-14050:2:2169
-14051:2:2173
-14052:2:2174
-14053:2:2181
-14054:2:2182
-14055:2:2193
-14056:2:2194
-14057:2:2195
-14058:2:2193
-14059:2:2194
-14060:2:2195
-14061:2:2206
-14062:2:2211
-14063:2:2212
-14064:0:4365
-14065:2:2224
-14066:0:4365
-14067:3:3757
-14068:0:4365
-14069:2:2226
-14070:0:4365
-14071:3:3758
-14072:0:4365
-14073:2:1936
-14074:0:4365
-14075:2:2129
-14076:0:4365
-14077:2:2130
-14078:0:4365
-14079:2:2134
-14080:0:4365
-14081:3:3757
-14082:0:4365
-14083:2:2136
-14084:0:4365
-14085:3:3758
-14086:0:4365
-14087:2:2137
-14088:2:2141
-14089:2:2142
-14090:2:2150
-14091:2:2151
-14092:2:2155
-14093:2:2156
-14094:2:2150
-14095:2:2151
-14096:2:2152
-14097:2:2164
-14098:2:2169
-14099:2:2173
-14100:2:2174
-14101:2:2181
-14102:2:2182
-14103:2:2193
-14104:2:2194
-14105:2:2195
-14106:2:2193
-14107:2:2194
-14108:2:2195
-14109:2:2206
-14110:2:2211
-14111:2:2212
-14112:0:4365
-14113:2:2224
-14114:0:4365
-14115:3:3757
-14116:0:4365
-14117:2:2226
-14118:0:4365
-14119:3:3758
-14120:0:4365
-14121:2:2230
-14122:0:4365
-14123:3:3757
-14124:0:4365
-14125:2:2235
-14126:2:2239
-14127:2:2240
-14128:2:2248
-14129:2:2249
-14130:2:2253
-14131:2:2254
-14132:2:2248
-14133:2:2249
-14134:2:2250
-14135:2:2262
-14136:2:2267
-14137:2:2271
-14138:2:2272
-14139:2:2279
-14140:2:2280
-14141:2:2291
-14142:2:2292
-14143:2:2293
-14144:2:2291
-14145:2:2292
-14146:2:2293
-14147:2:2304
-14148:2:2309
-14149:2:2310
-14150:0:4365
-14151:3:3758
-14152:0:4365
-14153:2:2322
-14154:0:4365
-14155:2:1169
-14156:0:4365
-14157:3:3757
-14158:0:4365
-14159:2:1170
-14160:0:4365
-14161:3:3758
-14162:0:4365
-14163:3:3759
-14164:0:4365
-14165:3:3972
-14166:0:4365
-14167:3:4077
-14168:0:4365
-14169:3:4078
-14170:0:4365
-14171:3:4082
-14172:0:4365
-14173:3:4088
-14174:0:4365
-14175:3:4092
-14176:3:4093
-14177:3:4097
-14178:3:4101
-14179:3:4102
-14180:3:4097
-14181:3:4101
-14182:3:4102
-14183:3:4106
-14184:3:4114
-14185:3:4115
-14186:3:4120
-14187:3:4127
-14188:3:4128
-14189:3:4127
-14190:3:4128
-14191:3:4135
-14192:3:4140
-14193:0:4365
-14194:3:4151
-14195:0:4365
-14196:3:4155
-14197:3:4156
-14198:3:4160
-14199:3:4164
-14200:3:4165
-14201:3:4160
-14202:3:4164
-14203:3:4165
-14204:3:4169
-14205:3:4177
-14206:3:4178
-14207:3:4183
-14208:3:4190
-14209:3:4191
-14210:3:4190
-14211:3:4191
-14212:3:4198
-14213:3:4203
-14214:0:4365
-14215:3:4151
-14216:0:4365
-14217:3:4155
-14218:3:4156
-14219:3:4160
-14220:3:4164
-14221:3:4165
-14222:3:4160
-14223:3:4164
-14224:3:4165
-14225:3:4169
-14226:3:4177
-14227:3:4178
-14228:3:4183
-14229:3:4190
-14230:3:4191
-14231:3:4190
-14232:3:4191
-14233:3:4198
-14234:3:4203
-14235:0:4365
-14236:3:4214
-14237:0:4365
-14238:3:4222
-14239:3:4223
-14240:3:4227
-14241:3:4231
-14242:3:4232
-14243:3:4227
-14244:3:4231
-14245:3:4232
-14246:3:4236
-14247:3:4244
-14248:3:4245
-14249:3:4250
-14250:3:4257
-14251:3:4258
-14252:3:4257
-14253:3:4258
-14254:3:4265
-14255:3:4270
-14256:0:4365
-14257:3:4285
-14258:0:4365
-14259:3:4286
-14260:0:4365
-14261:2:1173
-14262:0:4365
-14263:3:4287
-14264:0:4365
-14265:2:1179
-14266:0:4365
-14267:2:1180
-14268:0:4365
-14269:3:4286
-14270:0:4365
-14271:2:1181
-14272:2:1185
-14273:2:1186
-14274:2:1194
-14275:2:1195
-14276:2:1199
-14277:2:1200
-14278:2:1194
-14279:2:1195
-14280:2:1199
-14281:2:1200
-14282:2:1208
-14283:2:1213
-14284:2:1217
-14285:2:1218
-14286:2:1225
-14287:2:1226
-14288:2:1237
-14289:2:1238
-14290:2:1239
-14291:2:1237
-14292:2:1238
-14293:2:1239
-14294:2:1250
-14295:2:1255
-14296:2:1256
-14297:0:4365
-14298:3:4287
-14299:0:4365
-14300:2:1268
-14301:0:4365
-14302:3:4286
-14303:0:4365
-14304:2:1270
-14305:0:4365
-14306:3:4287
-14307:0:4365
-14308:2:1271
-14309:2:1275
-14310:2:1276
-14311:2:1284
-14312:2:1285
-14313:2:1289
-14314:2:1290
-14315:2:1284
-14316:2:1285
-14317:2:1289
-14318:2:1290
-14319:2:1298
-14320:2:1303
-14321:2:1307
-14322:2:1308
-14323:2:1315
-14324:2:1316
-14325:2:1327
-14326:2:1328
-14327:2:1329
-14328:2:1327
-14329:2:1328
-14330:2:1329
-14331:2:1340
-14332:2:1345
-14333:2:1346
-14334:0:4365
-14335:2:1358
-14336:0:4365
-14337:2:1360
-14338:0:4365
-14339:3:4286
-14340:0:4365
-14341:2:1361
-14342:0:4365
-14343:3:4287
-14344:0:4365
-14345:2:1362
-14346:2:1366
-14347:2:1367
-14348:2:1375
-14349:2:1376
-14350:2:1380
-14351:2:1381
-14352:2:1375
-14353:2:1376
-14354:2:1380
-14355:2:1381
-14356:2:1389
-14357:2:1394
-14358:2:1398
-14359:2:1399
-14360:2:1406
-14361:2:1407
-14362:2:1418
-14363:2:1419
-14364:2:1420
-14365:2:1418
-14366:2:1419
-14367:2:1420
-14368:2:1431
-14369:2:1436
-14370:2:1437
-14371:0:4365
-14372:2:1449
-14373:0:4365
-14374:3:4286
-14375:0:4365
-14376:2:1451
-14377:0:4365
-14378:3:4287
-14379:0:4365
-14380:2:1652
-14381:0:4365
-14382:2:1653
-14383:0:4365
-14384:2:1657
-14385:0:4365
-14386:2:1180
-14387:0:4365
-14388:3:4286
-14389:0:4365
-14390:2:1181
-14391:2:1185
-14392:2:1186
-14393:2:1194
-14394:2:1195
-14395:2:1199
-14396:2:1200
-14397:2:1194
-14398:2:1195
-14399:2:1196
-14400:2:1208
-14401:2:1213
-14402:2:1217
-14403:2:1218
-14404:2:1225
-14405:2:1226
-14406:2:1237
-14407:2:1238
-14408:2:1239
-14409:2:1237
-14410:2:1238
-14411:2:1239
-14412:2:1250
-14413:2:1255
-14414:2:1256
-14415:0:4365
-14416:3:4287
-14417:0:4365
-14418:2:1268
-14419:0:4365
-14420:3:4286
-14421:0:4365
-14422:2:1270
-14423:0:4365
-14424:3:4287
-14425:0:4365
-14426:2:1271
-14427:2:1275
-14428:2:1276
-14429:2:1284
-14430:2:1285
-14431:2:1289
-14432:2:1290
-14433:2:1284
-14434:2:1285
-14435:2:1289
-14436:2:1290
-14437:2:1298
-14438:2:1303
-14439:2:1307
-14440:2:1308
-14441:2:1315
-14442:2:1316
-14443:2:1327
-14444:2:1328
-14445:2:1329
-14446:2:1327
-14447:2:1328
-14448:2:1329
-14449:2:1340
-14450:2:1345
-14451:2:1346
-14452:0:4365
-14453:2:1358
-14454:0:4365
-14455:2:1454
-14456:0:4365
-14457:3:4286
-14458:0:4365
-14459:2:1455
-14460:0:4365
-14461:3:4287
-14462:0:4365
-14463:2:1652
-14464:0:4365
-14465:2:1653
-14466:0:4365
-14467:2:1657
-14468:0:4365
-14469:2:1660
-14470:0:4365
-14471:3:4286
-14472:0:4365
-14473:2:1665
-14474:2:1669
-14475:2:1670
-14476:2:1678
-14477:2:1679
-14478:2:1683
-14479:2:1684
-14480:2:1678
-14481:2:1679
-14482:2:1680
-14483:2:1692
-14484:2:1697
-14485:2:1701
-14486:2:1702
-14487:2:1709
-14488:2:1710
-14489:2:1721
-14490:2:1722
-14491:2:1723
-14492:2:1721
-14493:2:1722
-14494:2:1723
-14495:2:1734
-14496:2:1739
-14497:2:1740
-14498:0:4365
-14499:3:4287
-14500:0:4365
-14501:2:1752
-14502:0:4365
-14503:3:4286
-14504:0:4365
-14505:2:1754
-14506:0:4365
-14507:3:4287
-14508:0:4365
-14509:2:1755
-14510:2:1759
-14511:2:1760
-14512:2:1768
-14513:2:1769
-14514:2:1773
-14515:2:1774
-14516:2:1768
-14517:2:1769
-14518:2:1773
-14519:2:1774
-14520:2:1782
-14521:2:1787
-14522:2:1791
-14523:2:1792
-14524:2:1799
-14525:2:1800
-14526:2:1811
-14527:2:1812
-14528:2:1813
-14529:2:1811
-14530:2:1812
-14531:2:1813
-14532:2:1824
-14533:2:1829
-14534:2:1830
-14535:0:4365
-14536:2:1842
-14537:0:4365
-14538:3:4286
-14539:0:4365
-14540:2:1844
-14541:0:4365
-14542:3:4287
-14543:0:4365
-14544:2:1845
-14545:2:1849
-14546:2:1850
-14547:2:1858
-14548:2:1859
-14549:2:1863
-14550:2:1864
-14551:2:1858
-14552:2:1859
-14553:2:1863
-14554:2:1864
-14555:2:1872
-14556:2:1877
-14557:2:1881
-14558:2:1882
-14559:2:1889
-14560:2:1890
-14561:2:1901
-14562:2:1902
-14563:2:1903
-14564:2:1901
-14565:2:1902
-14566:2:1903
-14567:2:1914
-14568:2:1919
-14569:2:1920
-14570:0:4365
-14571:2:1932
-14572:0:4365
-14573:3:4286
-14574:0:4365
-14575:2:1934
-14576:0:4365
-14577:3:4287
-14578:0:4365
-14579:2:1935
-14580:0:4365
-14581:2:1936
-14582:0:4365
-14583:2:2129
-14584:0:4365
-14585:2:2130
-14586:0:4365
-14587:2:2134
-14588:0:4365
-14589:3:4286
-14590:0:4365
-14591:2:2136
-14592:0:4365
-14593:3:4287
-14594:0:4365
-14595:2:2137
-14596:2:2141
-14597:2:2142
-14598:2:2150
-14599:2:2151
-14600:2:2155
-14601:2:2156
-14602:2:2150
-14603:2:2151
-14604:2:2155
-14605:2:2156
-14606:2:2164
-14607:2:2169
-14608:2:2173
-14609:2:2174
-14610:2:2181
-14611:2:2182
-14612:2:2193
-14613:2:2194
-14614:2:2195
-14615:2:2193
-14616:2:2194
-14617:2:2195
-14618:2:2206
-14619:2:2211
-14620:2:2212
-14621:0:4365
-14622:2:2224
-14623:0:4365
-14624:3:4286
-14625:0:4365
-14626:2:2226
-14627:0:4365
-14628:3:4287
-14629:0:4365
-14630:2:1936
-14631:0:4365
-14632:2:2129
-14633:0:4365
-14634:2:2130
-14635:0:4365
-14636:2:2134
-14637:0:4365
-14638:3:4286
-14639:0:4365
-14640:2:2136
-14641:0:4365
-14642:3:4287
-14643:0:4365
-14644:2:2137
-14645:2:2141
-14646:2:2142
-14647:2:2150
-14648:2:2151
-14649:2:2155
-14650:2:2156
-14651:2:2150
-14652:2:2151
-14653:2:2152
-14654:2:2164
-14655:2:2169
-14656:2:2173
-14657:2:2174
-14658:2:2181
-14659:2:2182
-14660:2:2193
-14661:2:2194
-14662:2:2195
-14663:2:2193
-14664:2:2194
-14665:2:2195
-14666:2:2206
-14667:2:2211
-14668:2:2212
-14669:0:4365
-14670:2:2224
-14671:0:4365
-14672:3:4286
-14673:0:4365
-14674:2:2226
-14675:0:4365
-14676:3:4287
-14677:0:4365
-14678:2:2230
-14679:0:4365
-14680:3:4286
-14681:0:4365
-14682:2:2235
-14683:2:2239
-14684:2:2240
-14685:2:2248
-14686:2:2249
-14687:2:2253
-14688:2:2254
-14689:2:2248
-14690:2:2249
-14691:2:2250
-14692:2:2262
-14693:2:2267
-14694:2:2271
-14695:2:2272
-14696:2:2279
-14697:2:2280
-14698:2:2291
-14699:2:2292
-14700:2:2293
-14701:2:2291
-14702:2:2292
-14703:2:2293
-14704:2:2304
-14705:2:2309
-14706:2:2310
-14707:0:4365
-14708:3:4287
-14709:0:4365
-14710:2:2322
-14711:0:4365
-14712:2:1169
-14713:0:4365
-14714:3:4286
-14715:0:4365
-14716:2:1170
-14717:0:4365
-14718:3:4287
-14719:0:4365
-14720:3:4288
-14721:0:4365
-14722:3:4294
-14723:0:4365
-14724:3:4295
-14725:0:4365
-14726:3:2338
-14727:0:4365
-14728:3:2339
-14729:3:2343
-14730:3:2344
-14731:3:2352
-14732:3:2353
-14733:3:2357
-14734:3:2358
-14735:3:2352
-14736:3:2353
-14737:3:2357
-14738:3:2358
-14739:3:2366
-14740:3:2371
-14741:3:2375
-14742:3:2376
-14743:3:2383
-14744:3:2384
-14745:3:2395
-14746:3:2396
-14747:3:2397
-14748:3:2395
-14749:3:2396
-14750:3:2397
-14751:3:2408
-14752:3:2413
-14753:3:2414
-14754:0:4365
-14755:3:2426
-14756:0:4365
-14757:3:2427
-14758:0:4365
-14759:2:1173
-14760:0:4365
-14761:3:2428
-14762:0:4365
-14763:2:1179
-14764:0:4365
-14765:2:1180
-14766:0:4365
-14767:3:2427
-14768:0:4365
-14769:2:1181
-14770:2:1185
-14771:2:1186
-14772:2:1194
-14773:2:1195
-14774:2:1199
-14775:2:1200
-14776:2:1194
-14777:2:1195
-14778:2:1199
-14779:2:1200
-14780:2:1208
-14781:2:1213
-14782:2:1217
-14783:2:1218
-14784:2:1225
-14785:2:1226
-14786:2:1237
-14787:2:1238
-14788:2:1239
-14789:2:1237
-14790:2:1238
-14791:2:1239
-14792:2:1250
-14793:2:1255
-14794:2:1256
-14795:0:4365
-14796:3:2428
-14797:0:4365
-14798:2:1268
-14799:0:4365
-14800:3:2427
-14801:0:4365
-14802:2:1270
-14803:0:4365
-14804:3:2428
-14805:0:4365
-14806:2:1271
-14807:2:1275
-14808:2:1276
-14809:2:1284
-14810:2:1285
-14811:2:1289
-14812:2:1290
-14813:2:1284
-14814:2:1285
-14815:2:1289
-14816:2:1290
-14817:2:1298
-14818:2:1303
-14819:2:1307
-14820:2:1308
-14821:2:1315
-14822:2:1316
-14823:2:1327
-14824:2:1328
-14825:2:1329
-14826:2:1327
-14827:2:1328
-14828:2:1329
-14829:2:1340
-14830:2:1345
-14831:2:1346
-14832:0:4365
-14833:2:1358
-14834:0:4365
-14835:2:1360
-14836:0:4365
-14837:3:2427
-14838:0:4365
-14839:2:1361
-14840:0:4365
-14841:3:2428
-14842:0:4365
-14843:2:1362
-14844:2:1366
-14845:2:1367
-14846:2:1375
-14847:2:1376
-14848:2:1380
-14849:2:1381
-14850:2:1375
-14851:2:1376
-14852:2:1380
-14853:2:1381
-14854:2:1389
-14855:2:1394
-14856:2:1398
-14857:2:1399
-14858:2:1406
-14859:2:1407
-14860:2:1418
-14861:2:1419
-14862:2:1420
-14863:2:1418
-14864:2:1419
-14865:2:1420
-14866:2:1431
-14867:2:1436
-14868:2:1437
-14869:0:4365
-14870:2:1449
-14871:0:4365
-14872:3:2427
-14873:0:4365
-14874:2:1451
-14875:0:4365
-14876:3:2428
-14877:0:4365
-14878:2:1652
-14879:0:4365
-14880:2:1653
-14881:0:4365
-14882:2:1657
-14883:0:4365
-14884:2:1180
-14885:0:4365
-14886:3:2427
-14887:0:4365
-14888:2:1181
-14889:2:1185
-14890:2:1186
-14891:2:1194
-14892:2:1195
-14893:2:1199
-14894:2:1200
-14895:2:1194
-14896:2:1195
-14897:2:1196
-14898:2:1208
-14899:2:1213
-14900:2:1217
-14901:2:1218
-14902:2:1225
-14903:2:1226
-14904:2:1237
-14905:2:1238
-14906:2:1239
-14907:2:1237
-14908:2:1238
-14909:2:1239
-14910:2:1250
-14911:2:1255
-14912:2:1256
-14913:0:4365
-14914:3:2428
-14915:0:4365
-14916:2:1268
-14917:0:4365
-14918:3:2427
-14919:0:4365
-14920:2:1270
-14921:0:4365
-14922:3:2428
-14923:0:4365
-14924:2:1271
-14925:2:1275
-14926:2:1276
-14927:2:1284
-14928:2:1285
-14929:2:1289
-14930:2:1290
-14931:2:1284
-14932:2:1285
-14933:2:1289
-14934:2:1290
-14935:2:1298
-14936:2:1303
-14937:2:1307
-14938:2:1308
-14939:2:1315
-14940:2:1316
-14941:2:1327
-14942:2:1328
-14943:2:1329
-14944:2:1327
-14945:2:1328
-14946:2:1329
-14947:2:1340
-14948:2:1345
-14949:2:1346
-14950:0:4365
-14951:2:1358
-14952:0:4365
-14953:2:1454
-14954:0:4365
-14955:3:2427
-14956:0:4365
-14957:2:1455
-14958:0:4365
-14959:3:2428
-14960:0:4365
-14961:2:1652
-14962:0:4365
-14963:2:1653
-14964:0:4365
-14965:2:1657
-14966:0:4365
-14967:2:1660
-14968:0:4365
-14969:3:2427
-14970:0:4365
-14971:2:1665
-14972:2:1669
-14973:2:1670
-14974:2:1678
-14975:2:1679
-14976:2:1683
-14977:2:1684
-14978:2:1678
-14979:2:1679
-14980:2:1680
-14981:2:1692
-14982:2:1697
-14983:2:1701
-14984:2:1702
-14985:2:1709
-14986:2:1710
-14987:2:1721
-14988:2:1722
-14989:2:1723
-14990:2:1721
-14991:2:1722
-14992:2:1723
-14993:2:1734
-14994:2:1739
-14995:2:1740
-14996:0:4365
-14997:3:2428
-14998:0:4365
-14999:2:1752
-15000:0:4365
-15001:3:2427
-15002:0:4365
-15003:2:1754
-15004:0:4365
-15005:3:2428
-15006:0:4365
-15007:2:1755
-15008:2:1759
-15009:2:1760
-15010:2:1768
-15011:2:1769
-15012:2:1773
-15013:2:1774
-15014:2:1768
-15015:2:1769
-15016:2:1773
-15017:2:1774
-15018:2:1782
-15019:2:1787
-15020:2:1791
-15021:2:1792
-15022:2:1799
-15023:2:1800
-15024:2:1811
-15025:2:1812
-15026:2:1813
-15027:2:1811
-15028:2:1812
-15029:2:1813
-15030:2:1824
-15031:2:1829
-15032:2:1830
-15033:0:4365
-15034:2:1842
-15035:0:4365
-15036:3:2427
-15037:0:4365
-15038:2:1844
-15039:0:4363
-15040:3:2428
-15041:0:4369
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.define b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.log
deleted file mode 100644 (file)
index d503334..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_nested.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-Depth=    3880 States=    1e+06 Transitions= 1.18e+07 Memory=   527.190        t=   9.48 R=   1e+05
-Depth=    3880 States=    2e+06 Transitions= 2.39e+07 Memory=   588.225        t=   19.6 R=   1e+05
-Depth=    3880 States=    3e+06 Transitions= 3.61e+07 Memory=   649.260        t=   30.3 R=   1e+05
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.spin.input
deleted file mode 100644 (file)
index c94928c..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-#define READER_NEST_LEVEL 1
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-#define get_pid()      ((_pid < 1) -> 0 : 1)
-#elif defined(TEST_SIGNAL_ON_READ)
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-#else
-#define get_pid()      (_pid)
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               if
-               :: get_readerid() == 0 ->
-progress_reader:
-                       skip;
-               fi;
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               if
-               :: get_readerid() == 0 ->
-progress_reader:
-                       skip;
-               fi;
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_nested.spin.input.trail
deleted file mode 100644 (file)
index 6f29ad2..0000000
+++ /dev/null
@@ -1,11161 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1660
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1665
-243:2:1669
-244:2:1670
-245:2:1678
-246:2:1679
-247:2:1683
-248:2:1684
-249:2:1678
-250:2:1679
-251:2:1680
-252:2:1692
-253:2:1697
-254:2:1701
-255:2:1702
-256:2:1709
-257:2:1710
-258:2:1721
-259:2:1722
-260:2:1723
-261:2:1721
-262:2:1722
-263:2:1723
-264:2:1734
-265:2:1739
-266:2:1740
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1752
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1754
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1755
-279:2:1759
-280:2:1760
-281:2:1768
-282:2:1769
-283:2:1773
-284:2:1774
-285:2:1768
-286:2:1769
-287:2:1773
-288:2:1774
-289:2:1782
-290:2:1787
-291:2:1791
-292:2:1792
-293:2:1799
-294:2:1800
-295:2:1811
-296:2:1812
-297:2:1813
-298:2:1811
-299:2:1812
-300:2:1813
-301:2:1824
-302:2:1829
-303:2:1830
-304:0:4365
-305:2:1842
-306:0:4365
-307:3:2528
-308:0:4365
-309:2:1844
-310:0:4365
-311:3:2529
-312:0:4365
-313:2:1845
-314:2:1849
-315:2:1850
-316:2:1858
-317:2:1859
-318:2:1863
-319:2:1864
-320:2:1858
-321:2:1859
-322:2:1863
-323:2:1864
-324:2:1872
-325:2:1877
-326:2:1881
-327:2:1882
-328:2:1889
-329:2:1890
-330:2:1901
-331:2:1902
-332:2:1903
-333:2:1901
-334:2:1902
-335:2:1903
-336:2:1914
-337:2:1919
-338:2:1920
-339:0:4365
-340:2:1932
-341:0:4365
-342:3:2528
-343:0:4365
-344:2:1934
-345:0:4365
-346:3:2529
-347:0:4365
-348:2:1935
-349:0:4365
-350:2:1936
-351:0:4365
-352:2:2129
-353:0:4365
-354:2:2130
-355:0:4365
-356:2:2134
-357:0:4365
-358:3:2528
-359:0:4365
-360:2:2136
-361:0:4365
-362:3:2529
-363:0:4365
-364:2:2137
-365:2:2141
-366:2:2142
-367:2:2150
-368:2:2151
-369:2:2155
-370:2:2156
-371:2:2150
-372:2:2151
-373:2:2155
-374:2:2156
-375:2:2164
-376:2:2169
-377:2:2173
-378:2:2174
-379:2:2181
-380:2:2182
-381:2:2193
-382:2:2194
-383:2:2195
-384:2:2193
-385:2:2194
-386:2:2195
-387:2:2206
-388:2:2211
-389:2:2212
-390:0:4365
-391:2:2224
-392:0:4365
-393:3:2528
-394:0:4365
-395:2:2226
-396:0:4365
-397:3:2529
-398:0:4365
-399:2:2230
-400:0:4365
-401:3:2528
-402:0:4365
-403:2:2235
-404:2:2239
-405:2:2240
-406:2:2248
-407:2:2249
-408:2:2253
-409:2:2254
-410:2:2248
-411:2:2249
-412:2:2250
-413:2:2262
-414:2:2267
-415:2:2271
-416:2:2272
-417:2:2279
-418:2:2280
-419:2:2291
-420:2:2292
-421:2:2293
-422:2:2291
-423:2:2292
-424:2:2293
-425:2:2304
-426:2:2309
-427:2:2310
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:2322
-432:0:4365
-433:2:1169
-434:0:4365
-435:3:2528
-436:0:4365
-437:2:1170
-438:0:4365
-439:3:2529
-440:0:4365
-441:3:2530
-442:0:4365
-443:3:2536
-444:0:4365
-445:3:2537
-446:0:4365
-447:3:2547
-448:0:4365
-449:3:2548
-450:0:4365
-451:3:2552
-452:3:2553
-453:3:2557
-454:3:2561
-455:3:2562
-456:3:2557
-457:3:2561
-458:3:2562
-459:3:2566
-460:3:2574
-461:3:2575
-462:3:2580
-463:3:2587
-464:3:2588
-465:3:2587
-466:3:2588
-467:3:2595
-468:3:2600
-469:0:4365
-470:3:2611
-471:0:4365
-472:3:2615
-473:3:2616
-474:3:2620
-475:3:2624
-476:3:2625
-477:3:2620
-478:3:2624
-479:3:2625
-480:3:2629
-481:3:2637
-482:3:2638
-483:3:2643
-484:3:2650
-485:3:2651
-486:3:2650
-487:3:2651
-488:3:2658
-489:3:2663
-490:0:4365
-491:3:2611
-492:0:4365
-493:3:2615
-494:3:2616
-495:3:2620
-496:3:2624
-497:3:2625
-498:3:2620
-499:3:2624
-500:3:2625
-501:3:2629
-502:3:2637
-503:3:2638
-504:3:2643
-505:3:2650
-506:3:2651
-507:3:2650
-508:3:2651
-509:3:2658
-510:3:2663
-511:0:4365
-512:3:2674
-513:0:4365
-514:3:2682
-515:3:2683
-516:3:2687
-517:3:2691
-518:3:2692
-519:3:2687
-520:3:2691
-521:3:2692
-522:3:2696
-523:3:2704
-524:3:2705
-525:3:2710
-526:3:2717
-527:3:2718
-528:3:2717
-529:3:2718
-530:3:2725
-531:3:2730
-532:0:4365
-533:3:2745
-534:0:4365
-535:3:2746
-536:0:4365
-537:2:1173
-538:0:4365
-539:3:2747
-540:0:4365
-541:2:1179
-542:0:4365
-543:2:1180
-544:0:4365
-545:3:2746
-546:0:4365
-547:2:1181
-548:2:1185
-549:2:1186
-550:2:1194
-551:2:1195
-552:2:1199
-553:2:1200
-554:2:1194
-555:2:1195
-556:2:1199
-557:2:1200
-558:2:1208
-559:2:1213
-560:2:1217
-561:2:1218
-562:2:1225
-563:2:1226
-564:2:1237
-565:2:1238
-566:2:1239
-567:2:1237
-568:2:1238
-569:2:1239
-570:2:1250
-571:2:1255
-572:2:1256
-573:0:4365
-574:3:2747
-575:0:4365
-576:2:1268
-577:0:4365
-578:3:2746
-579:0:4365
-580:2:1270
-581:0:4365
-582:3:2747
-583:0:4365
-584:2:1271
-585:2:1275
-586:2:1276
-587:2:1284
-588:2:1285
-589:2:1289
-590:2:1290
-591:2:1284
-592:2:1285
-593:2:1289
-594:2:1290
-595:2:1298
-596:2:1303
-597:2:1307
-598:2:1308
-599:2:1315
-600:2:1316
-601:2:1327
-602:2:1328
-603:2:1329
-604:2:1327
-605:2:1328
-606:2:1329
-607:2:1340
-608:2:1345
-609:2:1346
-610:0:4365
-611:2:1358
-612:0:4365
-613:2:1360
-614:0:4365
-615:3:2746
-616:0:4365
-617:2:1361
-618:0:4365
-619:3:2747
-620:0:4365
-621:2:1362
-622:2:1366
-623:2:1367
-624:2:1375
-625:2:1376
-626:2:1380
-627:2:1381
-628:2:1375
-629:2:1376
-630:2:1380
-631:2:1381
-632:2:1389
-633:2:1394
-634:2:1398
-635:2:1399
-636:2:1406
-637:2:1407
-638:2:1418
-639:2:1419
-640:2:1420
-641:2:1418
-642:2:1419
-643:2:1420
-644:2:1431
-645:2:1436
-646:2:1437
-647:0:4365
-648:2:1449
-649:0:4365
-650:3:2746
-651:0:4365
-652:2:1451
-653:0:4365
-654:3:2747
-655:0:4365
-656:2:1652
-657:0:4365
-658:2:1653
-659:0:4365
-660:2:1657
-661:0:4365
-662:2:1660
-663:0:4365
-664:3:2746
-665:0:4365
-666:2:1665
-667:2:1669
-668:2:1670
-669:2:1678
-670:2:1679
-671:2:1683
-672:2:1684
-673:2:1678
-674:2:1679
-675:2:1680
-676:2:1692
-677:2:1697
-678:2:1701
-679:2:1702
-680:2:1709
-681:2:1710
-682:2:1721
-683:2:1722
-684:2:1723
-685:2:1721
-686:2:1722
-687:2:1723
-688:2:1734
-689:2:1739
-690:2:1740
-691:0:4365
-692:3:2747
-693:0:4365
-694:2:1752
-695:0:4365
-696:3:2746
-697:0:4365
-698:2:1754
-699:0:4365
-700:3:2747
-701:0:4365
-702:2:1755
-703:2:1759
-704:2:1760
-705:2:1768
-706:2:1769
-707:2:1773
-708:2:1774
-709:2:1768
-710:2:1769
-711:2:1773
-712:2:1774
-713:2:1782
-714:2:1787
-715:2:1791
-716:2:1792
-717:2:1799
-718:2:1800
-719:2:1811
-720:2:1812
-721:2:1813
-722:2:1811
-723:2:1812
-724:2:1813
-725:2:1824
-726:2:1829
-727:2:1830
-728:0:4365
-729:2:1842
-730:0:4365
-731:3:2746
-732:0:4365
-733:2:1844
-734:0:4365
-735:3:2747
-736:0:4365
-737:2:1845
-738:2:1849
-739:2:1850
-740:2:1858
-741:2:1859
-742:2:1863
-743:2:1864
-744:2:1858
-745:2:1859
-746:2:1863
-747:2:1864
-748:2:1872
-749:2:1877
-750:2:1881
-751:2:1882
-752:2:1889
-753:2:1890
-754:2:1901
-755:2:1902
-756:2:1903
-757:2:1901
-758:2:1902
-759:2:1903
-760:2:1914
-761:2:1919
-762:2:1920
-763:0:4365
-764:2:1932
-765:0:4365
-766:3:2746
-767:0:4365
-768:2:1934
-769:0:4365
-770:3:2747
-771:0:4365
-772:2:1935
-773:0:4365
-774:2:1936
-775:0:4365
-776:2:2129
-777:0:4365
-778:2:2130
-779:0:4365
-780:2:2134
-781:0:4365
-782:3:2746
-783:0:4365
-784:2:2136
-785:0:4365
-786:3:2747
-787:0:4365
-788:2:2137
-789:2:2141
-790:2:2142
-791:2:2150
-792:2:2151
-793:2:2155
-794:2:2156
-795:2:2150
-796:2:2151
-797:2:2155
-798:2:2156
-799:2:2164
-800:2:2169
-801:2:2173
-802:2:2174
-803:2:2181
-804:2:2182
-805:2:2193
-806:2:2194
-807:2:2195
-808:2:2193
-809:2:2194
-810:2:2195
-811:2:2206
-812:2:2211
-813:2:2212
-814:0:4365
-815:2:2224
-816:0:4365
-817:3:2746
-818:0:4365
-819:2:2226
-820:0:4365
-821:3:2747
-822:0:4365
-823:2:2230
-824:0:4365
-825:3:2746
-826:0:4365
-827:2:2235
-828:2:2239
-829:2:2240
-830:2:2248
-831:2:2249
-832:2:2253
-833:2:2254
-834:2:2248
-835:2:2249
-836:2:2250
-837:2:2262
-838:2:2267
-839:2:2271
-840:2:2272
-841:2:2279
-842:2:2280
-843:2:2291
-844:2:2292
-845:2:2293
-846:2:2291
-847:2:2292
-848:2:2293
-849:2:2304
-850:2:2309
-851:2:2310
-852:0:4365
-853:3:2747
-854:0:4365
-855:2:2322
-856:0:4365
-857:2:1169
-858:0:4365
-859:3:2746
-860:0:4365
-861:2:1170
-862:0:4365
-863:3:2747
-864:0:4365
-865:3:2748
-866:0:4365
-867:3:2754
-868:0:4365
-869:3:2755
-870:3:2759
-871:3:2760
-872:3:2768
-873:3:2769
-874:3:2773
-875:3:2774
-876:3:2768
-877:3:2769
-878:3:2773
-879:3:2774
-880:3:2782
-881:3:2787
-882:3:2791
-883:3:2792
-884:3:2799
-885:3:2800
-886:3:2811
-887:3:2812
-888:3:2813
-889:3:2811
-890:3:2812
-891:3:2813
-892:3:2824
-893:3:2829
-894:3:2830
-895:0:4365
-896:3:2842
-897:0:4365
-898:3:2843
-899:0:4365
-900:2:1173
-901:0:4365
-902:3:2844
-903:0:4365
-904:2:1179
-905:0:4365
-906:2:1180
-907:0:4365
-908:3:2843
-909:0:4365
-910:2:1181
-911:2:1185
-912:2:1186
-913:2:1194
-914:2:1195
-915:2:1199
-916:2:1200
-917:2:1194
-918:2:1195
-919:2:1199
-920:2:1200
-921:2:1208
-922:2:1213
-923:2:1217
-924:2:1218
-925:2:1225
-926:2:1226
-927:2:1237
-928:2:1238
-929:2:1239
-930:2:1237
-931:2:1238
-932:2:1239
-933:2:1250
-934:2:1255
-935:2:1256
-936:0:4365
-937:3:2844
-938:0:4365
-939:2:1268
-940:0:4365
-941:3:2843
-942:0:4365
-943:2:1270
-944:0:4365
-945:3:2844
-946:0:4365
-947:2:1271
-948:2:1275
-949:2:1276
-950:2:1284
-951:2:1285
-952:2:1289
-953:2:1290
-954:2:1284
-955:2:1285
-956:2:1289
-957:2:1290
-958:2:1298
-959:2:1303
-960:2:1307
-961:2:1308
-962:2:1315
-963:2:1316
-964:2:1327
-965:2:1328
-966:2:1329
-967:2:1327
-968:2:1328
-969:2:1329
-970:2:1340
-971:2:1345
-972:2:1346
-973:0:4365
-974:2:1358
-975:0:4365
-976:2:1360
-977:0:4365
-978:3:2843
-979:0:4365
-980:2:1361
-981:0:4365
-982:3:2844
-983:0:4365
-984:2:1362
-985:2:1366
-986:2:1367
-987:2:1375
-988:2:1376
-989:2:1380
-990:2:1381
-991:2:1375
-992:2:1376
-993:2:1380
-994:2:1381
-995:2:1389
-996:2:1394
-997:2:1398
-998:2:1399
-999:2:1406
-1000:2:1407
-1001:2:1418
-1002:2:1419
-1003:2:1420
-1004:2:1418
-1005:2:1419
-1006:2:1420
-1007:2:1431
-1008:2:1436
-1009:2:1437
-1010:0:4365
-1011:2:1449
-1012:0:4365
-1013:3:2843
-1014:0:4365
-1015:2:1451
-1016:0:4365
-1017:3:2844
-1018:0:4365
-1019:2:1652
-1020:0:4365
-1021:2:1653
-1022:0:4365
-1023:2:1657
-1024:0:4365
-1025:2:1660
-1026:0:4365
-1027:3:2843
-1028:0:4365
-1029:2:1665
-1030:2:1669
-1031:2:1670
-1032:2:1678
-1033:2:1679
-1034:2:1683
-1035:2:1684
-1036:2:1678
-1037:2:1679
-1038:2:1680
-1039:2:1692
-1040:2:1697
-1041:2:1701
-1042:2:1702
-1043:2:1709
-1044:2:1710
-1045:2:1721
-1046:2:1722
-1047:2:1723
-1048:2:1721
-1049:2:1722
-1050:2:1723
-1051:2:1734
-1052:2:1739
-1053:2:1740
-1054:0:4365
-1055:3:2844
-1056:0:4365
-1057:2:1752
-1058:0:4365
-1059:3:2843
-1060:0:4365
-1061:2:1754
-1062:0:4365
-1063:3:2844
-1064:0:4365
-1065:2:1755
-1066:2:1759
-1067:2:1760
-1068:2:1768
-1069:2:1769
-1070:2:1773
-1071:2:1774
-1072:2:1768
-1073:2:1769
-1074:2:1773
-1075:2:1774
-1076:2:1782
-1077:2:1787
-1078:2:1791
-1079:2:1792
-1080:2:1799
-1081:2:1800
-1082:2:1811
-1083:2:1812
-1084:2:1813
-1085:2:1811
-1086:2:1812
-1087:2:1813
-1088:2:1824
-1089:2:1829
-1090:2:1830
-1091:0:4365
-1092:2:1842
-1093:0:4365
-1094:3:2843
-1095:0:4365
-1096:2:1844
-1097:0:4365
-1098:3:2844
-1099:0:4365
-1100:2:1845
-1101:2:1849
-1102:2:1850
-1103:2:1858
-1104:2:1859
-1105:2:1863
-1106:2:1864
-1107:2:1858
-1108:2:1859
-1109:2:1863
-1110:2:1864
-1111:2:1872
-1112:2:1877
-1113:2:1881
-1114:2:1882
-1115:2:1889
-1116:2:1890
-1117:2:1901
-1118:2:1902
-1119:2:1903
-1120:2:1901
-1121:2:1902
-1122:2:1903
-1123:2:1914
-1124:2:1919
-1125:2:1920
-1126:0:4365
-1127:2:1932
-1128:0:4365
-1129:3:2843
-1130:0:4365
-1131:2:1934
-1132:0:4365
-1133:3:2844
-1134:0:4365
-1135:2:1935
-1136:0:4365
-1137:2:1936
-1138:0:4365
-1139:2:2129
-1140:0:4365
-1141:2:2130
-1142:0:4365
-1143:2:2134
-1144:0:4365
-1145:3:2843
-1146:0:4365
-1147:2:2136
-1148:0:4365
-1149:3:2844
-1150:0:4365
-1151:2:2137
-1152:2:2141
-1153:2:2142
-1154:2:2150
-1155:2:2151
-1156:2:2155
-1157:2:2156
-1158:2:2150
-1159:2:2151
-1160:2:2155
-1161:2:2156
-1162:2:2164
-1163:2:2169
-1164:2:2173
-1165:2:2174
-1166:2:2181
-1167:2:2182
-1168:2:2193
-1169:2:2194
-1170:2:2195
-1171:2:2193
-1172:2:2194
-1173:2:2195
-1174:2:2206
-1175:2:2211
-1176:2:2212
-1177:0:4365
-1178:2:2224
-1179:0:4365
-1180:3:2843
-1181:0:4365
-1182:2:2226
-1183:0:4365
-1184:3:2844
-1185:0:4365
-1186:2:2230
-1187:0:4365
-1188:3:2843
-1189:0:4365
-1190:2:2235
-1191:2:2239
-1192:2:2240
-1193:2:2248
-1194:2:2249
-1195:2:2253
-1196:2:2254
-1197:2:2248
-1198:2:2249
-1199:2:2250
-1200:2:2262
-1201:2:2267
-1202:2:2271
-1203:2:2272
-1204:2:2279
-1205:2:2280
-1206:2:2291
-1207:2:2292
-1208:2:2293
-1209:2:2291
-1210:2:2292
-1211:2:2293
-1212:2:2304
-1213:2:2309
-1214:2:2310
-1215:0:4365
-1216:3:2844
-1217:0:4365
-1218:2:2322
-1219:0:4365
-1220:2:1169
-1221:0:4365
-1222:3:2843
-1223:0:4365
-1224:2:1170
-1225:0:4365
-1226:3:2844
-1227:0:4365
-1228:3:2845
-1229:0:4365
-1230:3:2851
-1231:0:4365
-1232:3:2854
-1233:3:2855
-1234:3:2867
-1235:3:2868
-1236:3:2872
-1237:3:2873
-1238:3:2867
-1239:3:2868
-1240:3:2872
-1241:3:2873
-1242:3:2881
-1243:3:2886
-1244:3:2890
-1245:3:2891
-1246:3:2898
-1247:3:2899
-1248:3:2910
-1249:3:2911
-1250:3:2912
-1251:3:2910
-1252:3:2911
-1253:3:2912
-1254:3:2923
-1255:3:2928
-1256:3:2929
-1257:0:4365
-1258:3:2941
-1259:0:4365
-1260:3:2942
-1261:0:4365
-1262:2:1173
-1263:0:4365
-1264:3:2943
-1265:0:4365
-1266:2:1179
-1267:0:4365
-1268:2:1180
-1269:0:4365
-1270:3:2942
-1271:0:4365
-1272:2:1181
-1273:2:1185
-1274:2:1186
-1275:2:1194
-1276:2:1195
-1277:2:1199
-1278:2:1200
-1279:2:1194
-1280:2:1195
-1281:2:1199
-1282:2:1200
-1283:2:1208
-1284:2:1213
-1285:2:1217
-1286:2:1218
-1287:2:1225
-1288:2:1226
-1289:2:1237
-1290:2:1238
-1291:2:1239
-1292:2:1237
-1293:2:1238
-1294:2:1239
-1295:2:1250
-1296:2:1255
-1297:2:1256
-1298:0:4365
-1299:3:2943
-1300:0:4365
-1301:2:1268
-1302:0:4365
-1303:3:2942
-1304:0:4365
-1305:2:1270
-1306:0:4365
-1307:3:2943
-1308:0:4365
-1309:2:1271
-1310:2:1275
-1311:2:1276
-1312:2:1284
-1313:2:1285
-1314:2:1289
-1315:2:1290
-1316:2:1284
-1317:2:1285
-1318:2:1289
-1319:2:1290
-1320:2:1298
-1321:2:1303
-1322:2:1307
-1323:2:1308
-1324:2:1315
-1325:2:1316
-1326:2:1327
-1327:2:1328
-1328:2:1329
-1329:2:1327
-1330:2:1328
-1331:2:1329
-1332:2:1340
-1333:2:1345
-1334:2:1346
-1335:0:4365
-1336:2:1358
-1337:0:4365
-1338:2:1360
-1339:0:4365
-1340:3:2942
-1341:0:4365
-1342:2:1361
-1343:0:4365
-1344:3:2943
-1345:0:4365
-1346:2:1362
-1347:2:1366
-1348:2:1367
-1349:2:1375
-1350:2:1376
-1351:2:1380
-1352:2:1381
-1353:2:1375
-1354:2:1376
-1355:2:1380
-1356:2:1381
-1357:2:1389
-1358:2:1394
-1359:2:1398
-1360:2:1399
-1361:2:1406
-1362:2:1407
-1363:2:1418
-1364:2:1419
-1365:2:1420
-1366:2:1418
-1367:2:1419
-1368:2:1420
-1369:2:1431
-1370:2:1436
-1371:2:1437
-1372:0:4365
-1373:2:1449
-1374:0:4365
-1375:3:2942
-1376:0:4365
-1377:2:1451
-1378:0:4365
-1379:3:2943
-1380:0:4365
-1381:2:1652
-1382:0:4365
-1383:2:1653
-1384:0:4365
-1385:2:1657
-1386:0:4365
-1387:2:1660
-1388:0:4365
-1389:3:2942
-1390:0:4365
-1391:2:1665
-1392:2:1669
-1393:2:1670
-1394:2:1678
-1395:2:1679
-1396:2:1683
-1397:2:1684
-1398:2:1678
-1399:2:1679
-1400:2:1680
-1401:2:1692
-1402:2:1697
-1403:2:1701
-1404:2:1702
-1405:2:1709
-1406:2:1710
-1407:2:1721
-1408:2:1722
-1409:2:1723
-1410:2:1721
-1411:2:1722
-1412:2:1723
-1413:2:1734
-1414:2:1739
-1415:2:1740
-1416:0:4365
-1417:3:2943
-1418:0:4365
-1419:2:1752
-1420:0:4365
-1421:3:2942
-1422:0:4365
-1423:2:1754
-1424:0:4365
-1425:3:2943
-1426:0:4365
-1427:2:1755
-1428:2:1759
-1429:2:1760
-1430:2:1768
-1431:2:1769
-1432:2:1773
-1433:2:1774
-1434:2:1768
-1435:2:1769
-1436:2:1773
-1437:2:1774
-1438:2:1782
-1439:2:1787
-1440:2:1791
-1441:2:1792
-1442:2:1799
-1443:2:1800
-1444:2:1811
-1445:2:1812
-1446:2:1813
-1447:2:1811
-1448:2:1812
-1449:2:1813
-1450:2:1824
-1451:2:1829
-1452:2:1830
-1453:0:4365
-1454:2:1842
-1455:0:4365
-1456:3:2942
-1457:0:4365
-1458:2:1844
-1459:0:4365
-1460:3:2943
-1461:0:4365
-1462:2:1845
-1463:2:1849
-1464:2:1850
-1465:2:1858
-1466:2:1859
-1467:2:1863
-1468:2:1864
-1469:2:1858
-1470:2:1859
-1471:2:1863
-1472:2:1864
-1473:2:1872
-1474:2:1877
-1475:2:1881
-1476:2:1882
-1477:2:1889
-1478:2:1890
-1479:2:1901
-1480:2:1902
-1481:2:1903
-1482:2:1901
-1483:2:1902
-1484:2:1903
-1485:2:1914
-1486:2:1919
-1487:2:1920
-1488:0:4365
-1489:2:1932
-1490:0:4365
-1491:3:2942
-1492:0:4365
-1493:2:1934
-1494:0:4365
-1495:3:2943
-1496:0:4365
-1497:2:1935
-1498:0:4365
-1499:2:1936
-1500:0:4365
-1501:2:2129
-1502:0:4365
-1503:2:2130
-1504:0:4365
-1505:2:2134
-1506:0:4365
-1507:3:2942
-1508:0:4365
-1509:2:2136
-1510:0:4365
-1511:3:2943
-1512:0:4365
-1513:2:2137
-1514:2:2141
-1515:2:2142
-1516:2:2150
-1517:2:2151
-1518:2:2155
-1519:2:2156
-1520:2:2150
-1521:2:2151
-1522:2:2155
-1523:2:2156
-1524:2:2164
-1525:2:2169
-1526:2:2173
-1527:2:2174
-1528:2:2181
-1529:2:2182
-1530:2:2193
-1531:2:2194
-1532:2:2195
-1533:2:2193
-1534:2:2194
-1535:2:2195
-1536:2:2206
-1537:2:2211
-1538:2:2212
-1539:0:4365
-1540:2:2224
-1541:0:4365
-1542:3:2942
-1543:0:4365
-1544:2:2226
-1545:0:4365
-1546:3:2943
-1547:0:4365
-1548:2:2230
-1549:0:4365
-1550:3:2942
-1551:0:4365
-1552:2:2235
-1553:2:2239
-1554:2:2240
-1555:2:2248
-1556:2:2249
-1557:2:2253
-1558:2:2254
-1559:2:2248
-1560:2:2249
-1561:2:2250
-1562:2:2262
-1563:2:2267
-1564:2:2271
-1565:2:2272
-1566:2:2279
-1567:2:2280
-1568:2:2291
-1569:2:2292
-1570:2:2293
-1571:2:2291
-1572:2:2292
-1573:2:2293
-1574:2:2304
-1575:2:2309
-1576:2:2310
-1577:0:4365
-1578:3:2943
-1579:0:4365
-1580:2:2322
-1581:0:4365
-1582:2:1169
-1583:0:4365
-1584:3:2942
-1585:0:4365
-1586:2:1170
-1587:0:4365
-1588:3:2943
-1589:0:4365
-1590:3:2944
-1591:0:4365
-1592:3:2950
-1593:0:4365
-1594:3:2951
-1595:0:4365
-1596:3:2952
-1597:0:4365
-1598:3:2953
-1599:0:4365
-1600:3:2954
-1601:3:2958
-1602:3:2959
-1603:3:2967
-1604:3:2968
-1605:3:2972
-1606:3:2973
-1607:3:2967
-1608:3:2968
-1609:3:2972
-1610:3:2973
-1611:3:2981
-1612:3:2986
-1613:3:2990
-1614:3:2991
-1615:3:2998
-1616:3:2999
-1617:3:3010
-1618:3:3011
-1619:3:3012
-1620:3:3010
-1621:3:3011
-1622:3:3012
-1623:3:3023
-1624:3:3028
-1625:3:3029
-1626:0:4365
-1627:3:3041
-1628:0:4365
-1629:3:3042
-1630:0:4365
-1631:2:1173
-1632:0:4365
-1633:3:3043
-1634:0:4365
-1635:2:1179
-1636:0:4365
-1637:2:1180
-1638:0:4365
-1639:3:3042
-1640:0:4365
-1641:2:1181
-1642:2:1185
-1643:2:1186
-1644:2:1194
-1645:2:1195
-1646:2:1199
-1647:2:1200
-1648:2:1194
-1649:2:1195
-1650:2:1199
-1651:2:1200
-1652:2:1208
-1653:2:1213
-1654:2:1217
-1655:2:1218
-1656:2:1225
-1657:2:1226
-1658:2:1237
-1659:2:1238
-1660:2:1239
-1661:2:1237
-1662:2:1238
-1663:2:1239
-1664:2:1250
-1665:2:1255
-1666:2:1256
-1667:0:4365
-1668:3:3043
-1669:0:4365
-1670:2:1268
-1671:0:4365
-1672:3:3042
-1673:0:4365
-1674:2:1270
-1675:0:4365
-1676:3:3043
-1677:0:4365
-1678:2:1271
-1679:2:1275
-1680:2:1276
-1681:2:1284
-1682:2:1285
-1683:2:1289
-1684:2:1290
-1685:2:1284
-1686:2:1285
-1687:2:1289
-1688:2:1290
-1689:2:1298
-1690:2:1303
-1691:2:1307
-1692:2:1308
-1693:2:1315
-1694:2:1316
-1695:2:1327
-1696:2:1328
-1697:2:1329
-1698:2:1327
-1699:2:1328
-1700:2:1329
-1701:2:1340
-1702:2:1345
-1703:2:1346
-1704:0:4365
-1705:2:1358
-1706:0:4365
-1707:2:1360
-1708:0:4365
-1709:3:3042
-1710:0:4365
-1711:2:1361
-1712:0:4365
-1713:3:3043
-1714:0:4365
-1715:2:1362
-1716:2:1366
-1717:2:1367
-1718:2:1375
-1719:2:1376
-1720:2:1380
-1721:2:1381
-1722:2:1375
-1723:2:1376
-1724:2:1380
-1725:2:1381
-1726:2:1389
-1727:2:1394
-1728:2:1398
-1729:2:1399
-1730:2:1406
-1731:2:1407
-1732:2:1418
-1733:2:1419
-1734:2:1420
-1735:2:1418
-1736:2:1419
-1737:2:1420
-1738:2:1431
-1739:2:1436
-1740:2:1437
-1741:0:4365
-1742:2:1449
-1743:0:4365
-1744:3:3042
-1745:0:4365
-1746:2:1451
-1747:0:4365
-1748:3:3043
-1749:0:4365
-1750:2:1652
-1751:0:4365
-1752:2:1653
-1753:0:4365
-1754:2:1657
-1755:0:4365
-1756:2:1660
-1757:0:4365
-1758:3:3042
-1759:0:4365
-1760:2:1665
-1761:2:1669
-1762:2:1670
-1763:2:1678
-1764:2:1679
-1765:2:1683
-1766:2:1684
-1767:2:1678
-1768:2:1679
-1769:2:1680
-1770:2:1692
-1771:2:1697
-1772:2:1701
-1773:2:1702
-1774:2:1709
-1775:2:1710
-1776:2:1721
-1777:2:1722
-1778:2:1723
-1779:2:1721
-1780:2:1722
-1781:2:1723
-1782:2:1734
-1783:2:1739
-1784:2:1740
-1785:0:4365
-1786:3:3043
-1787:0:4365
-1788:2:1752
-1789:0:4365
-1790:3:3042
-1791:0:4365
-1792:2:1754
-1793:0:4365
-1794:3:3043
-1795:0:4365
-1796:2:1755
-1797:2:1759
-1798:2:1760
-1799:2:1768
-1800:2:1769
-1801:2:1773
-1802:2:1774
-1803:2:1768
-1804:2:1769
-1805:2:1773
-1806:2:1774
-1807:2:1782
-1808:2:1787
-1809:2:1791
-1810:2:1792
-1811:2:1799
-1812:2:1800
-1813:2:1811
-1814:2:1812
-1815:2:1813
-1816:2:1811
-1817:2:1812
-1818:2:1813
-1819:2:1824
-1820:2:1829
-1821:2:1830
-1822:0:4365
-1823:2:1842
-1824:0:4365
-1825:3:3042
-1826:0:4365
-1827:2:1844
-1828:0:4365
-1829:3:3043
-1830:0:4365
-1831:2:1845
-1832:2:1849
-1833:2:1850
-1834:2:1858
-1835:2:1859
-1836:2:1863
-1837:2:1864
-1838:2:1858
-1839:2:1859
-1840:2:1863
-1841:2:1864
-1842:2:1872
-1843:2:1877
-1844:2:1881
-1845:2:1882
-1846:2:1889
-1847:2:1890
-1848:2:1901
-1849:2:1902
-1850:2:1903
-1851:2:1901
-1852:2:1902
-1853:2:1903
-1854:2:1914
-1855:2:1919
-1856:2:1920
-1857:0:4365
-1858:2:1932
-1859:0:4365
-1860:3:3042
-1861:0:4365
-1862:2:1934
-1863:0:4365
-1864:3:3043
-1865:0:4365
-1866:2:1935
-1867:0:4365
-1868:2:1936
-1869:0:4365
-1870:2:2129
-1871:0:4365
-1872:2:2130
-1873:0:4365
-1874:2:2134
-1875:0:4365
-1876:3:3042
-1877:0:4365
-1878:2:2136
-1879:0:4365
-1880:3:3043
-1881:0:4365
-1882:2:2137
-1883:2:2141
-1884:2:2142
-1885:2:2150
-1886:2:2151
-1887:2:2155
-1888:2:2156
-1889:2:2150
-1890:2:2151
-1891:2:2155
-1892:2:2156
-1893:2:2164
-1894:2:2169
-1895:2:2173
-1896:2:2174
-1897:2:2181
-1898:2:2182
-1899:2:2193
-1900:2:2194
-1901:2:2195
-1902:2:2193
-1903:2:2194
-1904:2:2195
-1905:2:2206
-1906:2:2211
-1907:2:2212
-1908:0:4365
-1909:2:2224
-1910:0:4365
-1911:3:3042
-1912:0:4365
-1913:2:2226
-1914:0:4365
-1915:3:3043
-1916:0:4365
-1917:2:2230
-1918:0:4365
-1919:3:3042
-1920:0:4365
-1921:2:2235
-1922:2:2239
-1923:2:2240
-1924:2:2248
-1925:2:2249
-1926:2:2253
-1927:2:2254
-1928:2:2248
-1929:2:2249
-1930:2:2250
-1931:2:2262
-1932:2:2267
-1933:2:2271
-1934:2:2272
-1935:2:2279
-1936:2:2280
-1937:2:2291
-1938:2:2292
-1939:2:2293
-1940:2:2291
-1941:2:2292
-1942:2:2293
-1943:2:2304
-1944:2:2309
-1945:2:2310
-1946:0:4365
-1947:3:3043
-1948:0:4365
-1949:2:2322
-1950:0:4365
-1951:2:1169
-1952:0:4365
-1953:3:3042
-1954:0:4365
-1955:2:1170
-1956:0:4365
-1957:3:3043
-1958:0:4365
-1959:3:3044
-1960:0:4365
-1961:3:3257
-1962:0:4365
-1963:3:3265
-1964:0:4365
-1965:3:3266
-1966:3:3270
-1967:3:3271
-1968:3:3279
-1969:3:3280
-1970:3:3284
-1971:3:3285
-1972:3:3279
-1973:3:3280
-1974:3:3284
-1975:3:3285
-1976:3:3293
-1977:3:3298
-1978:3:3302
-1979:3:3303
-1980:3:3310
-1981:3:3311
-1982:3:3322
-1983:3:3323
-1984:3:3324
-1985:3:3322
-1986:3:3323
-1987:3:3324
-1988:3:3335
-1989:3:3340
-1990:3:3341
-1991:0:4365
-1992:3:3353
-1993:0:4365
-1994:3:3354
-1995:0:4365
-1996:2:1173
-1997:0:4365
-1998:3:3355
-1999:0:4365
-2000:2:1179
-2001:0:4365
-2002:2:1180
-2003:0:4365
-2004:3:3354
-2005:0:4365
-2006:2:1181
-2007:2:1185
-2008:2:1186
-2009:2:1194
-2010:2:1195
-2011:2:1199
-2012:2:1200
-2013:2:1194
-2014:2:1195
-2015:2:1199
-2016:2:1200
-2017:2:1208
-2018:2:1213
-2019:2:1217
-2020:2:1218
-2021:2:1225
-2022:2:1226
-2023:2:1237
-2024:2:1238
-2025:2:1239
-2026:2:1237
-2027:2:1238
-2028:2:1239
-2029:2:1250
-2030:2:1255
-2031:2:1256
-2032:0:4365
-2033:3:3355
-2034:0:4365
-2035:2:1268
-2036:0:4365
-2037:3:3354
-2038:0:4365
-2039:2:1270
-2040:0:4365
-2041:3:3355
-2042:0:4365
-2043:2:1271
-2044:2:1275
-2045:2:1276
-2046:2:1284
-2047:2:1285
-2048:2:1289
-2049:2:1290
-2050:2:1284
-2051:2:1285
-2052:2:1289
-2053:2:1290
-2054:2:1298
-2055:2:1303
-2056:2:1307
-2057:2:1308
-2058:2:1315
-2059:2:1316
-2060:2:1327
-2061:2:1328
-2062:2:1329
-2063:2:1327
-2064:2:1328
-2065:2:1329
-2066:2:1340
-2067:2:1345
-2068:2:1346
-2069:0:4365
-2070:2:1358
-2071:0:4365
-2072:2:1360
-2073:0:4365
-2074:3:3354
-2075:0:4365
-2076:2:1361
-2077:0:4365
-2078:3:3355
-2079:0:4365
-2080:2:1362
-2081:2:1366
-2082:2:1367
-2083:2:1375
-2084:2:1376
-2085:2:1380
-2086:2:1381
-2087:2:1375
-2088:2:1376
-2089:2:1380
-2090:2:1381
-2091:2:1389
-2092:2:1394
-2093:2:1398
-2094:2:1399
-2095:2:1406
-2096:2:1407
-2097:2:1418
-2098:2:1419
-2099:2:1420
-2100:2:1418
-2101:2:1419
-2102:2:1420
-2103:2:1431
-2104:2:1436
-2105:2:1437
-2106:0:4365
-2107:2:1449
-2108:0:4365
-2109:3:3354
-2110:0:4365
-2111:2:1451
-2112:0:4365
-2113:3:3355
-2114:0:4365
-2115:2:1652
-2116:0:4365
-2117:2:1653
-2118:0:4365
-2119:2:1657
-2120:0:4365
-2121:2:1660
-2122:0:4365
-2123:3:3354
-2124:0:4365
-2125:2:1665
-2126:2:1669
-2127:2:1670
-2128:2:1678
-2129:2:1679
-2130:2:1683
-2131:2:1684
-2132:2:1678
-2133:2:1679
-2134:2:1680
-2135:2:1692
-2136:2:1697
-2137:2:1701
-2138:2:1702
-2139:2:1709
-2140:2:1710
-2141:2:1721
-2142:2:1722
-2143:2:1723
-2144:2:1721
-2145:2:1722
-2146:2:1723
-2147:2:1734
-2148:2:1739
-2149:2:1740
-2150:0:4365
-2151:3:3355
-2152:0:4365
-2153:2:1752
-2154:0:4365
-2155:3:3354
-2156:0:4365
-2157:2:1754
-2158:0:4365
-2159:3:3355
-2160:0:4365
-2161:2:1755
-2162:2:1759
-2163:2:1760
-2164:2:1768
-2165:2:1769
-2166:2:1773
-2167:2:1774
-2168:2:1768
-2169:2:1769
-2170:2:1773
-2171:2:1774
-2172:2:1782
-2173:2:1787
-2174:2:1791
-2175:2:1792
-2176:2:1799
-2177:2:1800
-2178:2:1811
-2179:2:1812
-2180:2:1813
-2181:2:1811
-2182:2:1812
-2183:2:1813
-2184:2:1824
-2185:2:1829
-2186:2:1830
-2187:0:4365
-2188:2:1842
-2189:0:4365
-2190:3:3354
-2191:0:4365
-2192:2:1844
-2193:0:4365
-2194:3:3355
-2195:0:4365
-2196:2:1845
-2197:2:1849
-2198:2:1850
-2199:2:1858
-2200:2:1859
-2201:2:1863
-2202:2:1864
-2203:2:1858
-2204:2:1859
-2205:2:1863
-2206:2:1864
-2207:2:1872
-2208:2:1877
-2209:2:1881
-2210:2:1882
-2211:2:1889
-2212:2:1890
-2213:2:1901
-2214:2:1902
-2215:2:1903
-2216:2:1901
-2217:2:1902
-2218:2:1903
-2219:2:1914
-2220:2:1919
-2221:2:1920
-2222:0:4365
-2223:2:1932
-2224:0:4365
-2225:3:3354
-2226:0:4365
-2227:2:1934
-2228:0:4365
-2229:3:3355
-2230:0:4365
-2231:2:1935
-2232:0:4365
-2233:2:1936
-2234:0:4365
-2235:2:2129
-2236:0:4365
-2237:2:2130
-2238:0:4365
-2239:2:2134
-2240:0:4365
-2241:3:3354
-2242:0:4365
-2243:2:2136
-2244:0:4365
-2245:3:3355
-2246:0:4365
-2247:2:2137
-2248:2:2141
-2249:2:2142
-2250:2:2150
-2251:2:2151
-2252:2:2155
-2253:2:2156
-2254:2:2150
-2255:2:2151
-2256:2:2155
-2257:2:2156
-2258:2:2164
-2259:2:2169
-2260:2:2173
-2261:2:2174
-2262:2:2181
-2263:2:2182
-2264:2:2193
-2265:2:2194
-2266:2:2195
-2267:2:2193
-2268:2:2194
-2269:2:2195
-2270:2:2206
-2271:2:2211
-2272:2:2212
-2273:0:4365
-2274:2:2224
-2275:0:4365
-2276:3:3354
-2277:0:4365
-2278:2:2226
-2279:0:4365
-2280:3:3355
-2281:0:4365
-2282:2:2230
-2283:0:4365
-2284:3:3354
-2285:0:4365
-2286:2:2235
-2287:2:2239
-2288:2:2240
-2289:2:2248
-2290:2:2249
-2291:2:2253
-2292:2:2254
-2293:2:2248
-2294:2:2249
-2295:2:2250
-2296:2:2262
-2297:2:2267
-2298:2:2271
-2299:2:2272
-2300:2:2279
-2301:2:2280
-2302:2:2291
-2303:2:2292
-2304:2:2293
-2305:2:2291
-2306:2:2292
-2307:2:2293
-2308:2:2304
-2309:2:2309
-2310:2:2310
-2311:0:4365
-2312:3:3355
-2313:0:4365
-2314:2:2322
-2315:0:4365
-2316:2:1169
-2317:0:4365
-2318:3:3354
-2319:0:4365
-2320:2:1170
-2321:0:4365
-2322:3:3355
-2323:0:4365
-2324:3:3356
-2325:0:4365
-2326:3:3366
-2327:0:4365
-2328:3:2951
-2329:0:4365
-2330:3:2952
-2331:0:4365
-2332:3:2953
-2333:0:4365
-2334:3:2954
-2335:3:2958
-2336:3:2959
-2337:3:2967
-2338:3:2968
-2339:3:2972
-2340:3:2973
-2341:3:2967
-2342:3:2968
-2343:3:2972
-2344:3:2973
-2345:3:2981
-2346:3:2986
-2347:3:2990
-2348:3:2991
-2349:3:2998
-2350:3:2999
-2351:3:3010
-2352:3:3011
-2353:3:3012
-2354:3:3010
-2355:3:3011
-2356:3:3012
-2357:3:3023
-2358:3:3028
-2359:3:3029
-2360:0:4365
-2361:3:3041
-2362:0:4365
-2363:3:3042
-2364:0:4365
-2365:2:1173
-2366:0:4365
-2367:3:3043
-2368:0:4365
-2369:2:1179
-2370:0:4365
-2371:2:1180
-2372:0:4365
-2373:3:3042
-2374:0:4365
-2375:2:1181
-2376:2:1185
-2377:2:1186
-2378:2:1194
-2379:2:1195
-2380:2:1199
-2381:2:1200
-2382:2:1194
-2383:2:1195
-2384:2:1199
-2385:2:1200
-2386:2:1208
-2387:2:1213
-2388:2:1217
-2389:2:1218
-2390:2:1225
-2391:2:1226
-2392:2:1237
-2393:2:1238
-2394:2:1239
-2395:2:1237
-2396:2:1238
-2397:2:1239
-2398:2:1250
-2399:2:1255
-2400:2:1256
-2401:0:4365
-2402:3:3043
-2403:0:4365
-2404:2:1268
-2405:0:4365
-2406:3:3042
-2407:0:4365
-2408:2:1270
-2409:0:4365
-2410:3:3043
-2411:0:4365
-2412:2:1271
-2413:2:1275
-2414:2:1276
-2415:2:1284
-2416:2:1285
-2417:2:1289
-2418:2:1290
-2419:2:1284
-2420:2:1285
-2421:2:1289
-2422:2:1290
-2423:2:1298
-2424:2:1303
-2425:2:1307
-2426:2:1308
-2427:2:1315
-2428:2:1316
-2429:2:1327
-2430:2:1328
-2431:2:1329
-2432:2:1327
-2433:2:1328
-2434:2:1329
-2435:2:1340
-2436:2:1345
-2437:2:1346
-2438:0:4365
-2439:2:1358
-2440:0:4365
-2441:2:1360
-2442:0:4365
-2443:3:3042
-2444:0:4365
-2445:2:1361
-2446:0:4365
-2447:3:3043
-2448:0:4365
-2449:2:1362
-2450:2:1366
-2451:2:1367
-2452:2:1375
-2453:2:1376
-2454:2:1380
-2455:2:1381
-2456:2:1375
-2457:2:1376
-2458:2:1380
-2459:2:1381
-2460:2:1389
-2461:2:1394
-2462:2:1398
-2463:2:1399
-2464:2:1406
-2465:2:1407
-2466:2:1418
-2467:2:1419
-2468:2:1420
-2469:2:1418
-2470:2:1419
-2471:2:1420
-2472:2:1431
-2473:2:1436
-2474:2:1437
-2475:0:4365
-2476:2:1449
-2477:0:4365
-2478:3:3042
-2479:0:4365
-2480:2:1451
-2481:0:4365
-2482:3:3043
-2483:0:4365
-2484:2:1652
-2485:0:4365
-2486:2:1653
-2487:0:4365
-2488:2:1657
-2489:0:4365
-2490:2:1660
-2491:0:4365
-2492:3:3042
-2493:0:4365
-2494:2:1665
-2495:2:1669
-2496:2:1670
-2497:2:1678
-2498:2:1679
-2499:2:1683
-2500:2:1684
-2501:2:1678
-2502:2:1679
-2503:2:1680
-2504:2:1692
-2505:2:1697
-2506:2:1701
-2507:2:1702
-2508:2:1709
-2509:2:1710
-2510:2:1721
-2511:2:1722
-2512:2:1723
-2513:2:1721
-2514:2:1722
-2515:2:1723
-2516:2:1734
-2517:2:1739
-2518:2:1740
-2519:0:4365
-2520:3:3043
-2521:0:4365
-2522:2:1752
-2523:0:4365
-2524:3:3042
-2525:0:4365
-2526:2:1754
-2527:0:4365
-2528:3:3043
-2529:0:4365
-2530:2:1755
-2531:2:1759
-2532:2:1760
-2533:2:1768
-2534:2:1769
-2535:2:1773
-2536:2:1774
-2537:2:1768
-2538:2:1769
-2539:2:1773
-2540:2:1774
-2541:2:1782
-2542:2:1787
-2543:2:1791
-2544:2:1792
-2545:2:1799
-2546:2:1800
-2547:2:1811
-2548:2:1812
-2549:2:1813
-2550:2:1811
-2551:2:1812
-2552:2:1813
-2553:2:1824
-2554:2:1829
-2555:2:1830
-2556:0:4365
-2557:2:1842
-2558:0:4365
-2559:3:3042
-2560:0:4365
-2561:2:1844
-2562:0:4365
-2563:3:3043
-2564:0:4365
-2565:2:1845
-2566:2:1849
-2567:2:1850
-2568:2:1858
-2569:2:1859
-2570:2:1863
-2571:2:1864
-2572:2:1858
-2573:2:1859
-2574:2:1863
-2575:2:1864
-2576:2:1872
-2577:2:1877
-2578:2:1881
-2579:2:1882
-2580:2:1889
-2581:2:1890
-2582:2:1901
-2583:2:1902
-2584:2:1903
-2585:2:1901
-2586:2:1902
-2587:2:1903
-2588:2:1914
-2589:2:1919
-2590:2:1920
-2591:0:4365
-2592:2:1932
-2593:0:4365
-2594:3:3042
-2595:0:4365
-2596:2:1934
-2597:0:4365
-2598:3:3043
-2599:0:4365
-2600:2:1935
-2601:0:4365
-2602:2:1936
-2603:0:4365
-2604:2:2129
-2605:0:4365
-2606:2:2130
-2607:0:4365
-2608:2:2134
-2609:0:4365
-2610:3:3042
-2611:0:4365
-2612:2:2136
-2613:0:4365
-2614:3:3043
-2615:0:4365
-2616:2:2137
-2617:2:2141
-2618:2:2142
-2619:2:2150
-2620:2:2151
-2621:2:2155
-2622:2:2156
-2623:2:2150
-2624:2:2151
-2625:2:2155
-2626:2:2156
-2627:2:2164
-2628:2:2169
-2629:2:2173
-2630:2:2174
-2631:2:2181
-2632:2:2182
-2633:2:2193
-2634:2:2194
-2635:2:2195
-2636:2:2193
-2637:2:2194
-2638:2:2195
-2639:2:2206
-2640:2:2211
-2641:2:2212
-2642:0:4365
-2643:2:2224
-2644:0:4365
-2645:3:3042
-2646:0:4365
-2647:2:2226
-2648:0:4365
-2649:3:3043
-2650:0:4365
-2651:2:2230
-2652:0:4365
-2653:3:3042
-2654:0:4365
-2655:2:2235
-2656:2:2239
-2657:2:2240
-2658:2:2248
-2659:2:2249
-2660:2:2253
-2661:2:2254
-2662:2:2248
-2663:2:2249
-2664:2:2250
-2665:2:2262
-2666:2:2267
-2667:2:2271
-2668:2:2272
-2669:2:2279
-2670:2:2280
-2671:2:2291
-2672:2:2292
-2673:2:2293
-2674:2:2291
-2675:2:2292
-2676:2:2293
-2677:2:2304
-2678:2:2309
-2679:2:2310
-2680:0:4365
-2681:3:3043
-2682:0:4365
-2683:2:2322
-2684:0:4365
-2685:2:1169
-2686:0:4365
-2687:3:3042
-2688:0:4365
-2689:2:1170
-2690:0:4365
-2691:3:3043
-2692:0:4365
-2693:3:3044
-2694:0:4365
-2695:3:3257
-2696:0:4365
-2697:3:3362
-2698:0:4365
-2699:3:3363
-2700:0:4365
-2701:3:3367
-2702:0:4365
-2703:3:3373
-2704:3:3377
-2705:3:3378
-2706:3:3386
-2707:3:3387
-2708:3:3391
-2709:3:3392
-2710:3:3386
-2711:3:3387
-2712:3:3391
-2713:3:3392
-2714:3:3400
-2715:3:3405
-2716:3:3409
-2717:3:3410
-2718:3:3417
-2719:3:3418
-2720:3:3429
-2721:3:3430
-2722:3:3431
-2723:3:3429
-2724:3:3430
-2725:3:3431
-2726:3:3442
-2727:3:3447
-2728:3:3448
-2729:0:4365
-2730:3:3460
-2731:0:4365
-2732:3:3461
-2733:0:4365
-2734:2:1173
-2735:0:4365
-2736:3:3462
-2737:0:4365
-2738:2:1179
-2739:0:4365
-2740:2:1180
-2741:0:4365
-2742:3:3461
-2743:0:4365
-2744:2:1181
-2745:2:1185
-2746:2:1186
-2747:2:1194
-2748:2:1195
-2749:2:1199
-2750:2:1200
-2751:2:1194
-2752:2:1195
-2753:2:1199
-2754:2:1200
-2755:2:1208
-2756:2:1213
-2757:2:1217
-2758:2:1218
-2759:2:1225
-2760:2:1226
-2761:2:1237
-2762:2:1238
-2763:2:1239
-2764:2:1237
-2765:2:1238
-2766:2:1239
-2767:2:1250
-2768:2:1255
-2769:2:1256
-2770:0:4365
-2771:3:3462
-2772:0:4365
-2773:2:1268
-2774:0:4365
-2775:3:3461
-2776:0:4365
-2777:2:1270
-2778:0:4365
-2779:3:3462
-2780:0:4365
-2781:2:1271
-2782:2:1275
-2783:2:1276
-2784:2:1284
-2785:2:1285
-2786:2:1289
-2787:2:1290
-2788:2:1284
-2789:2:1285
-2790:2:1289
-2791:2:1290
-2792:2:1298
-2793:2:1303
-2794:2:1307
-2795:2:1308
-2796:2:1315
-2797:2:1316
-2798:2:1327
-2799:2:1328
-2800:2:1329
-2801:2:1327
-2802:2:1328
-2803:2:1329
-2804:2:1340
-2805:2:1345
-2806:2:1346
-2807:0:4365
-2808:2:1358
-2809:0:4365
-2810:2:1360
-2811:0:4365
-2812:3:3461
-2813:0:4365
-2814:2:1361
-2815:0:4365
-2816:3:3462
-2817:0:4365
-2818:2:1362
-2819:2:1366
-2820:2:1367
-2821:2:1375
-2822:2:1376
-2823:2:1380
-2824:2:1381
-2825:2:1375
-2826:2:1376
-2827:2:1380
-2828:2:1381
-2829:2:1389
-2830:2:1394
-2831:2:1398
-2832:2:1399
-2833:2:1406
-2834:2:1407
-2835:2:1418
-2836:2:1419
-2837:2:1420
-2838:2:1418
-2839:2:1419
-2840:2:1420
-2841:2:1431
-2842:2:1436
-2843:2:1437
-2844:0:4365
-2845:2:1449
-2846:0:4365
-2847:3:3461
-2848:0:4365
-2849:2:1451
-2850:0:4365
-2851:3:3462
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3461
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3462
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3461
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3462
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3461
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3462
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3461
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3462
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3461
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3462
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3461
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3462
-3019:0:4365
-3020:2:2230
-3021:0:4365
-3022:3:3461
-3023:0:4365
-3024:2:2235
-3025:2:2239
-3026:2:2240
-3027:2:2248
-3028:2:2249
-3029:2:2253
-3030:2:2254
-3031:2:2248
-3032:2:2249
-3033:2:2250
-3034:2:2262
-3035:2:2267
-3036:2:2271
-3037:2:2272
-3038:2:2279
-3039:2:2280
-3040:2:2291
-3041:2:2292
-3042:2:2293
-3043:2:2291
-3044:2:2292
-3045:2:2293
-3046:2:2304
-3047:2:2309
-3048:2:2310
-3049:0:4365
-3050:3:3462
-3051:0:4365
-3052:2:2322
-3053:0:4365
-3054:2:1169
-3055:0:4365
-3056:3:3461
-3057:0:4365
-3058:2:1170
-3059:0:4365
-3060:3:3462
-3061:0:4365
-3062:3:3463
-3063:0:4365
-3064:3:3469
-3065:0:4365
-3066:3:3470
-3067:3:3474
-3068:3:3475
-3069:3:3483
-3070:3:3484
-3071:3:3488
-3072:3:3489
-3073:3:3483
-3074:3:3484
-3075:3:3488
-3076:3:3489
-3077:3:3497
-3078:3:3502
-3079:3:3506
-3080:3:3507
-3081:3:3514
-3082:3:3515
-3083:3:3526
-3084:3:3527
-3085:3:3528
-3086:3:3526
-3087:3:3527
-3088:3:3528
-3089:3:3539
-3090:3:3544
-3091:3:3545
-3092:0:4365
-3093:3:3557
-3094:0:4365
-3095:3:3558
-3096:0:4365
-3097:2:1173
-3098:0:4365
-3099:3:3559
-3100:0:4365
-3101:2:1179
-3102:0:4365
-3103:2:1180
-3104:0:4365
-3105:3:3558
-3106:0:4365
-3107:2:1181
-3108:2:1185
-3109:2:1186
-3110:2:1194
-3111:2:1195
-3112:2:1199
-3113:2:1200
-3114:2:1194
-3115:2:1195
-3116:2:1199
-3117:2:1200
-3118:2:1208
-3119:2:1213
-3120:2:1217
-3121:2:1218
-3122:2:1225
-3123:2:1226
-3124:2:1237
-3125:2:1238
-3126:2:1239
-3127:2:1237
-3128:2:1238
-3129:2:1239
-3130:2:1250
-3131:2:1255
-3132:2:1256
-3133:0:4365
-3134:3:3559
-3135:0:4365
-3136:2:1268
-3137:0:4365
-3138:3:3558
-3139:0:4365
-3140:2:1270
-3141:0:4365
-3142:3:3559
-3143:0:4365
-3144:2:1271
-3145:2:1275
-3146:2:1276
-3147:2:1284
-3148:2:1285
-3149:2:1289
-3150:2:1290
-3151:2:1284
-3152:2:1285
-3153:2:1289
-3154:2:1290
-3155:2:1298
-3156:2:1303
-3157:2:1307
-3158:2:1308
-3159:2:1315
-3160:2:1316
-3161:2:1327
-3162:2:1328
-3163:2:1329
-3164:2:1327
-3165:2:1328
-3166:2:1329
-3167:2:1340
-3168:2:1345
-3169:2:1346
-3170:0:4365
-3171:2:1358
-3172:0:4365
-3173:2:1360
-3174:0:4365
-3175:3:3558
-3176:0:4365
-3177:2:1361
-3178:0:4365
-3179:3:3559
-3180:0:4365
-3181:2:1362
-3182:2:1366
-3183:2:1367
-3184:2:1375
-3185:2:1376
-3186:2:1380
-3187:2:1381
-3188:2:1375
-3189:2:1376
-3190:2:1380
-3191:2:1381
-3192:2:1389
-3193:2:1394
-3194:2:1398
-3195:2:1399
-3196:2:1406
-3197:2:1407
-3198:2:1418
-3199:2:1419
-3200:2:1420
-3201:2:1418
-3202:2:1419
-3203:2:1420
-3204:2:1431
-3205:2:1436
-3206:2:1437
-3207:0:4365
-3208:2:1449
-3209:0:4365
-3210:3:3558
-3211:0:4365
-3212:2:1451
-3213:0:4365
-3214:3:3559
-3215:0:4365
-3216:2:1652
-3217:0:4365
-3218:2:1653
-3219:0:4365
-3220:2:1657
-3221:0:4365
-3222:2:1660
-3223:0:4365
-3224:3:3558
-3225:0:4365
-3226:2:1665
-3227:2:1669
-3228:2:1670
-3229:2:1678
-3230:2:1679
-3231:2:1683
-3232:2:1684
-3233:2:1678
-3234:2:1679
-3235:2:1680
-3236:2:1692
-3237:2:1697
-3238:2:1701
-3239:2:1702
-3240:2:1709
-3241:2:1710
-3242:2:1721
-3243:2:1722
-3244:2:1723
-3245:2:1721
-3246:2:1722
-3247:2:1723
-3248:2:1734
-3249:2:1739
-3250:2:1740
-3251:0:4365
-3252:3:3559
-3253:0:4365
-3254:2:1752
-3255:0:4365
-3256:3:3558
-3257:0:4365
-3258:2:1754
-3259:0:4365
-3260:3:3559
-3261:0:4365
-3262:2:1755
-3263:2:1759
-3264:2:1760
-3265:2:1768
-3266:2:1769
-3267:2:1773
-3268:2:1774
-3269:2:1768
-3270:2:1769
-3271:2:1773
-3272:2:1774
-3273:2:1782
-3274:2:1787
-3275:2:1791
-3276:2:1792
-3277:2:1799
-3278:2:1800
-3279:2:1811
-3280:2:1812
-3281:2:1813
-3282:2:1811
-3283:2:1812
-3284:2:1813
-3285:2:1824
-3286:2:1829
-3287:2:1830
-3288:0:4365
-3289:2:1842
-3290:0:4365
-3291:3:3558
-3292:0:4365
-3293:2:1844
-3294:0:4365
-3295:3:3559
-3296:0:4365
-3297:2:1845
-3298:2:1849
-3299:2:1850
-3300:2:1858
-3301:2:1859
-3302:2:1863
-3303:2:1864
-3304:2:1858
-3305:2:1859
-3306:2:1863
-3307:2:1864
-3308:2:1872
-3309:2:1877
-3310:2:1881
-3311:2:1882
-3312:2:1889
-3313:2:1890
-3314:2:1901
-3315:2:1902
-3316:2:1903
-3317:2:1901
-3318:2:1902
-3319:2:1903
-3320:2:1914
-3321:2:1919
-3322:2:1920
-3323:0:4365
-3324:2:1932
-3325:0:4365
-3326:3:3558
-3327:0:4365
-3328:2:1934
-3329:0:4365
-3330:3:3559
-3331:0:4365
-3332:2:1935
-3333:0:4365
-3334:2:1936
-3335:0:4365
-3336:2:2129
-3337:0:4365
-3338:2:2130
-3339:0:4365
-3340:2:2134
-3341:0:4365
-3342:3:3558
-3343:0:4365
-3344:2:2136
-3345:0:4365
-3346:3:3559
-3347:0:4365
-3348:2:2137
-3349:2:2141
-3350:2:2142
-3351:2:2150
-3352:2:2151
-3353:2:2155
-3354:2:2156
-3355:2:2150
-3356:2:2151
-3357:2:2155
-3358:2:2156
-3359:2:2164
-3360:2:2169
-3361:2:2173
-3362:2:2174
-3363:2:2181
-3364:2:2182
-3365:2:2193
-3366:2:2194
-3367:2:2195
-3368:2:2193
-3369:2:2194
-3370:2:2195
-3371:2:2206
-3372:2:2211
-3373:2:2212
-3374:0:4365
-3375:2:2224
-3376:0:4365
-3377:3:3558
-3378:0:4365
-3379:2:2226
-3380:0:4365
-3381:3:3559
-3382:0:4365
-3383:2:2230
-3384:0:4365
-3385:3:3558
-3386:0:4365
-3387:2:2235
-3388:2:2239
-3389:2:2240
-3390:2:2248
-3391:2:2249
-3392:2:2253
-3393:2:2254
-3394:2:2248
-3395:2:2249
-3396:2:2250
-3397:2:2262
-3398:2:2267
-3399:2:2271
-3400:2:2272
-3401:2:2279
-3402:2:2280
-3403:2:2291
-3404:2:2292
-3405:2:2293
-3406:2:2291
-3407:2:2292
-3408:2:2293
-3409:2:2304
-3410:2:2309
-3411:2:2310
-3412:0:4365
-3413:3:3559
-3414:0:4365
-3415:2:2322
-3416:0:4365
-3417:2:1169
-3418:0:4365
-3419:3:3558
-3420:0:4365
-3421:2:1170
-3422:0:4365
-3423:3:3559
-3424:0:4365
-3425:3:3560
-3426:0:4365
-3427:3:3566
-3428:0:4365
-3429:3:3569
-3430:3:3570
-3431:3:3582
-3432:3:3583
-3433:3:3587
-3434:3:3588
-3435:3:3582
-3436:3:3583
-3437:3:3587
-3438:3:3588
-3439:3:3596
-3440:3:3601
-3441:3:3605
-3442:3:3606
-3443:3:3613
-3444:3:3614
-3445:3:3625
-3446:3:3626
-3447:3:3627
-3448:3:3625
-3449:3:3626
-3450:3:3627
-3451:3:3638
-3452:3:3643
-3453:3:3644
-3454:0:4365
-3455:3:3656
-3456:0:4365
-3457:3:3657
-3458:0:4365
-3459:2:1173
-3460:0:4365
-3461:3:3658
-3462:0:4365
-3463:2:1179
-3464:0:4365
-3465:2:1180
-3466:0:4365
-3467:3:3657
-3468:0:4365
-3469:2:1181
-3470:2:1185
-3471:2:1186
-3472:2:1194
-3473:2:1195
-3474:2:1199
-3475:2:1200
-3476:2:1194
-3477:2:1195
-3478:2:1199
-3479:2:1200
-3480:2:1208
-3481:2:1213
-3482:2:1217
-3483:2:1218
-3484:2:1225
-3485:2:1226
-3486:2:1237
-3487:2:1238
-3488:2:1239
-3489:2:1237
-3490:2:1238
-3491:2:1239
-3492:2:1250
-3493:2:1255
-3494:2:1256
-3495:0:4365
-3496:3:3658
-3497:0:4365
-3498:2:1268
-3499:0:4365
-3500:3:3657
-3501:0:4365
-3502:2:1270
-3503:0:4365
-3504:3:3658
-3505:0:4365
-3506:2:1271
-3507:2:1275
-3508:2:1276
-3509:2:1284
-3510:2:1285
-3511:2:1289
-3512:2:1290
-3513:2:1284
-3514:2:1285
-3515:2:1289
-3516:2:1290
-3517:2:1298
-3518:2:1303
-3519:2:1307
-3520:2:1308
-3521:2:1315
-3522:2:1316
-3523:2:1327
-3524:2:1328
-3525:2:1329
-3526:2:1327
-3527:2:1328
-3528:2:1329
-3529:2:1340
-3530:2:1345
-3531:2:1346
-3532:0:4365
-3533:2:1358
-3534:0:4365
-3535:2:1360
-3536:0:4365
-3537:3:3657
-3538:0:4365
-3539:2:1361
-3540:0:4365
-3541:3:3658
-3542:0:4365
-3543:2:1362
-3544:2:1366
-3545:2:1367
-3546:2:1375
-3547:2:1376
-3548:2:1380
-3549:2:1381
-3550:2:1375
-3551:2:1376
-3552:2:1380
-3553:2:1381
-3554:2:1389
-3555:2:1394
-3556:2:1398
-3557:2:1399
-3558:2:1406
-3559:2:1407
-3560:2:1418
-3561:2:1419
-3562:2:1420
-3563:2:1418
-3564:2:1419
-3565:2:1420
-3566:2:1431
-3567:2:1436
-3568:2:1437
-3569:0:4365
-3570:2:1449
-3571:0:4365
-3572:3:3657
-3573:0:4365
-3574:2:1451
-3575:0:4365
-3576:3:3658
-3577:0:4365
-3578:2:1652
-3579:0:4365
-3580:2:1653
-3581:0:4365
-3582:2:1657
-3583:0:4365
-3584:2:1660
-3585:0:4365
-3586:3:3657
-3587:0:4365
-3588:2:1665
-3589:2:1669
-3590:2:1670
-3591:2:1678
-3592:2:1679
-3593:2:1683
-3594:2:1684
-3595:2:1678
-3596:2:1679
-3597:2:1680
-3598:2:1692
-3599:2:1697
-3600:2:1701
-3601:2:1702
-3602:2:1709
-3603:2:1710
-3604:2:1721
-3605:2:1722
-3606:2:1723
-3607:2:1721
-3608:2:1722
-3609:2:1723
-3610:2:1734
-3611:2:1739
-3612:2:1740
-3613:0:4365
-3614:3:3658
-3615:0:4365
-3616:2:1752
-3617:0:4365
-3618:3:3657
-3619:0:4365
-3620:2:1754
-3621:0:4365
-3622:3:3658
-3623:0:4365
-3624:2:1755
-3625:2:1759
-3626:2:1760
-3627:2:1768
-3628:2:1769
-3629:2:1773
-3630:2:1774
-3631:2:1768
-3632:2:1769
-3633:2:1773
-3634:2:1774
-3635:2:1782
-3636:2:1787
-3637:2:1791
-3638:2:1792
-3639:2:1799
-3640:2:1800
-3641:2:1811
-3642:2:1812
-3643:2:1813
-3644:2:1811
-3645:2:1812
-3646:2:1813
-3647:2:1824
-3648:2:1829
-3649:2:1830
-3650:0:4365
-3651:2:1842
-3652:0:4365
-3653:3:3657
-3654:0:4365
-3655:2:1844
-3656:0:4365
-3657:3:3658
-3658:0:4365
-3659:2:1845
-3660:2:1849
-3661:2:1850
-3662:2:1858
-3663:2:1859
-3664:2:1863
-3665:2:1864
-3666:2:1858
-3667:2:1859
-3668:2:1863
-3669:2:1864
-3670:2:1872
-3671:2:1877
-3672:2:1881
-3673:2:1882
-3674:2:1889
-3675:2:1890
-3676:2:1901
-3677:2:1902
-3678:2:1903
-3679:2:1901
-3680:2:1902
-3681:2:1903
-3682:2:1914
-3683:2:1919
-3684:2:1920
-3685:0:4365
-3686:2:1932
-3687:0:4365
-3688:3:3657
-3689:0:4365
-3690:2:1934
-3691:0:4365
-3692:3:3658
-3693:0:4365
-3694:2:1935
-3695:0:4365
-3696:2:1936
-3697:0:4365
-3698:2:2129
-3699:0:4365
-3700:2:2130
-3701:0:4365
-3702:2:2134
-3703:0:4365
-3704:3:3657
-3705:0:4365
-3706:2:2136
-3707:0:4365
-3708:3:3658
-3709:0:4365
-3710:2:2137
-3711:2:2141
-3712:2:2142
-3713:2:2150
-3714:2:2151
-3715:2:2155
-3716:2:2156
-3717:2:2150
-3718:2:2151
-3719:2:2155
-3720:2:2156
-3721:2:2164
-3722:2:2169
-3723:2:2173
-3724:2:2174
-3725:2:2181
-3726:2:2182
-3727:2:2193
-3728:2:2194
-3729:2:2195
-3730:2:2193
-3731:2:2194
-3732:2:2195
-3733:2:2206
-3734:2:2211
-3735:2:2212
-3736:0:4365
-3737:2:2224
-3738:0:4365
-3739:3:3657
-3740:0:4365
-3741:2:2226
-3742:0:4365
-3743:3:3658
-3744:0:4365
-3745:2:2230
-3746:0:4365
-3747:3:3657
-3748:0:4365
-3749:2:2235
-3750:2:2239
-3751:2:2240
-3752:2:2248
-3753:2:2249
-3754:2:2253
-3755:2:2254
-3756:2:2248
-3757:2:2249
-3758:2:2250
-3759:2:2262
-3760:2:2267
-3761:2:2271
-3762:2:2272
-3763:2:2279
-3764:2:2280
-3765:2:2291
-3766:2:2292
-3767:2:2293
-3768:2:2291
-3769:2:2292
-3770:2:2293
-3771:2:2304
-3772:2:2309
-3773:2:2310
-3774:0:4365
-3775:3:3658
-3776:0:4365
-3777:2:2322
-3778:0:4365
-3779:2:1169
-3780:0:4365
-3781:3:3657
-3782:0:4365
-3783:2:1170
-3784:0:4365
-3785:3:3658
-3786:0:4365
-3787:3:3659
-3788:0:4365
-3789:3:3665
-3790:0:4365
-3791:3:3666
-3792:0:4365
-3793:3:3667
-3794:0:4365
-3795:3:3668
-3796:0:4365
-3797:3:3669
-3798:3:3673
-3799:3:3674
-3800:3:3682
-3801:3:3683
-3802:3:3687
-3803:3:3688
-3804:3:3682
-3805:3:3683
-3806:3:3687
-3807:3:3688
-3808:3:3696
-3809:3:3701
-3810:3:3705
-3811:3:3706
-3812:3:3713
-3813:3:3714
-3814:3:3725
-3815:3:3726
-3816:3:3727
-3817:3:3725
-3818:3:3726
-3819:3:3727
-3820:3:3738
-3821:3:3743
-3822:3:3744
-3823:0:4365
-3824:3:3756
-3825:0:4365
-3826:3:3757
-3827:0:4365
-3828:2:1173
-3829:0:4365
-3830:3:3758
-3831:0:4365
-3832:2:1179
-3833:0:4365
-3834:2:1180
-3835:0:4365
-3836:3:3757
-3837:0:4365
-3838:2:1181
-3839:2:1185
-3840:2:1186
-3841:2:1194
-3842:2:1195
-3843:2:1199
-3844:2:1200
-3845:2:1194
-3846:2:1195
-3847:2:1199
-3848:2:1200
-3849:2:1208
-3850:2:1213
-3851:2:1217
-3852:2:1218
-3853:2:1225
-3854:2:1226
-3855:2:1237
-3856:2:1238
-3857:2:1239
-3858:2:1237
-3859:2:1238
-3860:2:1239
-3861:2:1250
-3862:2:1255
-3863:2:1256
-3864:0:4365
-3865:3:3758
-3866:0:4365
-3867:2:1268
-3868:0:4365
-3869:3:3757
-3870:0:4365
-3871:2:1270
-3872:0:4365
-3873:3:3758
-3874:0:4365
-3875:2:1271
-3876:2:1275
-3877:2:1276
-3878:2:1284
-3879:2:1285
-3880:2:1289
-3881:2:1290
-3882:2:1284
-3883:2:1285
-3884:2:1289
-3885:2:1290
-3886:2:1298
-3887:2:1303
-3888:2:1307
-3889:2:1308
-3890:2:1315
-3891:2:1316
-3892:2:1327
-3893:2:1328
-3894:2:1329
-3895:2:1327
-3896:2:1328
-3897:2:1329
-3898:2:1340
-3899:2:1345
-3900:2:1346
-3901:0:4365
-3902:2:1358
-3903:0:4365
-3904:2:1360
-3905:0:4365
-3906:3:3757
-3907:0:4365
-3908:2:1361
-3909:0:4365
-3910:3:3758
-3911:0:4365
-3912:2:1362
-3913:2:1366
-3914:2:1367
-3915:2:1375
-3916:2:1376
-3917:2:1380
-3918:2:1381
-3919:2:1375
-3920:2:1376
-3921:2:1380
-3922:2:1381
-3923:2:1389
-3924:2:1394
-3925:2:1398
-3926:2:1399
-3927:2:1406
-3928:2:1407
-3929:2:1418
-3930:2:1419
-3931:2:1420
-3932:2:1418
-3933:2:1419
-3934:2:1420
-3935:2:1431
-3936:2:1436
-3937:2:1437
-3938:0:4365
-3939:2:1449
-3940:0:4365
-3941:3:3757
-3942:0:4365
-3943:2:1451
-3944:0:4365
-3945:3:3758
-3946:0:4365
-3947:2:1652
-3948:0:4365
-3949:2:1653
-3950:0:4365
-3951:2:1657
-3952:0:4365
-3953:2:1660
-3954:0:4365
-3955:3:3757
-3956:0:4365
-3957:2:1665
-3958:2:1669
-3959:2:1670
-3960:2:1678
-3961:2:1679
-3962:2:1683
-3963:2:1684
-3964:2:1678
-3965:2:1679
-3966:2:1680
-3967:2:1692
-3968:2:1697
-3969:2:1701
-3970:2:1702
-3971:2:1709
-3972:2:1710
-3973:2:1721
-3974:2:1722
-3975:2:1723
-3976:2:1721
-3977:2:1722
-3978:2:1723
-3979:2:1734
-3980:2:1739
-3981:2:1740
-3982:0:4365
-3983:3:3758
-3984:0:4365
-3985:2:1752
-3986:0:4365
-3987:3:3757
-3988:0:4365
-3989:2:1754
-3990:0:4365
-3991:3:3758
-3992:0:4365
-3993:2:1755
-3994:2:1759
-3995:2:1760
-3996:2:1768
-3997:2:1769
-3998:2:1773
-3999:2:1774
-4000:2:1768
-4001:2:1769
-4002:2:1773
-4003:2:1774
-4004:2:1782
-4005:2:1787
-4006:2:1791
-4007:2:1792
-4008:2:1799
-4009:2:1800
-4010:2:1811
-4011:2:1812
-4012:2:1813
-4013:2:1811
-4014:2:1812
-4015:2:1813
-4016:2:1824
-4017:2:1829
-4018:2:1830
-4019:0:4365
-4020:2:1842
-4021:0:4365
-4022:3:3757
-4023:0:4365
-4024:2:1844
-4025:0:4365
-4026:3:3758
-4027:0:4365
-4028:2:1845
-4029:2:1849
-4030:2:1850
-4031:2:1858
-4032:2:1859
-4033:2:1863
-4034:2:1864
-4035:2:1858
-4036:2:1859
-4037:2:1863
-4038:2:1864
-4039:2:1872
-4040:2:1877
-4041:2:1881
-4042:2:1882
-4043:2:1889
-4044:2:1890
-4045:2:1901
-4046:2:1902
-4047:2:1903
-4048:2:1901
-4049:2:1902
-4050:2:1903
-4051:2:1914
-4052:2:1919
-4053:2:1920
-4054:0:4365
-4055:2:1932
-4056:0:4365
-4057:3:3757
-4058:0:4365
-4059:2:1934
-4060:0:4365
-4061:3:3758
-4062:0:4365
-4063:2:1935
-4064:0:4365
-4065:2:1936
-4066:0:4365
-4067:2:2129
-4068:0:4365
-4069:2:2130
-4070:0:4365
-4071:2:2134
-4072:0:4365
-4073:3:3757
-4074:0:4365
-4075:2:2136
-4076:0:4365
-4077:3:3758
-4078:0:4365
-4079:2:2137
-4080:2:2141
-4081:2:2142
-4082:2:2150
-4083:2:2151
-4084:2:2155
-4085:2:2156
-4086:2:2150
-4087:2:2151
-4088:2:2155
-4089:2:2156
-4090:2:2164
-4091:2:2169
-4092:2:2173
-4093:2:2174
-4094:2:2181
-4095:2:2182
-4096:2:2193
-4097:2:2194
-4098:2:2195
-4099:2:2193
-4100:2:2194
-4101:2:2195
-4102:2:2206
-4103:2:2211
-4104:2:2212
-4105:0:4365
-4106:2:2224
-4107:0:4365
-4108:3:3757
-4109:0:4365
-4110:2:2226
-4111:0:4365
-4112:3:3758
-4113:0:4365
-4114:2:2230
-4115:0:4365
-4116:3:3757
-4117:0:4365
-4118:2:2235
-4119:2:2239
-4120:2:2240
-4121:2:2248
-4122:2:2249
-4123:2:2253
-4124:2:2254
-4125:2:2248
-4126:2:2249
-4127:2:2250
-4128:2:2262
-4129:2:2267
-4130:2:2271
-4131:2:2272
-4132:2:2279
-4133:2:2280
-4134:2:2291
-4135:2:2292
-4136:2:2293
-4137:2:2291
-4138:2:2292
-4139:2:2293
-4140:2:2304
-4141:2:2309
-4142:2:2310
-4143:0:4365
-4144:3:3758
-4145:0:4365
-4146:2:2322
-4147:0:4365
-4148:2:1169
-4149:0:4365
-4150:3:3757
-4151:0:4365
-4152:2:1170
-4153:0:4365
-4154:3:3758
-4155:0:4365
-4156:3:3759
-4157:0:4365
-4158:3:3972
-4159:0:4365
-4160:3:3980
-4161:0:4365
-4162:3:3981
-4163:3:3985
-4164:3:3986
-4165:3:3994
-4166:3:3995
-4167:3:3999
-4168:3:4000
-4169:3:3994
-4170:3:3995
-4171:3:3999
-4172:3:4000
-4173:3:4008
-4174:3:4013
-4175:3:4017
-4176:3:4018
-4177:3:4025
-4178:3:4026
-4179:3:4037
-4180:3:4038
-4181:3:4039
-4182:3:4037
-4183:3:4038
-4184:3:4039
-4185:3:4050
-4186:3:4055
-4187:3:4056
-4188:0:4365
-4189:3:4068
-4190:0:4365
-4191:3:4069
-4192:0:4365
-4193:2:1173
-4194:0:4365
-4195:3:4070
-4196:0:4365
-4197:2:1179
-4198:0:4365
-4199:2:1180
-4200:0:4365
-4201:3:4069
-4202:0:4365
-4203:2:1181
-4204:2:1185
-4205:2:1186
-4206:2:1194
-4207:2:1195
-4208:2:1199
-4209:2:1200
-4210:2:1194
-4211:2:1195
-4212:2:1199
-4213:2:1200
-4214:2:1208
-4215:2:1213
-4216:2:1217
-4217:2:1218
-4218:2:1225
-4219:2:1226
-4220:2:1237
-4221:2:1238
-4222:2:1239
-4223:2:1237
-4224:2:1238
-4225:2:1239
-4226:2:1250
-4227:2:1255
-4228:2:1256
-4229:0:4365
-4230:3:4070
-4231:0:4365
-4232:2:1268
-4233:0:4365
-4234:3:4069
-4235:0:4365
-4236:2:1270
-4237:0:4365
-4238:3:4070
-4239:0:4365
-4240:2:1271
-4241:2:1275
-4242:2:1276
-4243:2:1284
-4244:2:1285
-4245:2:1289
-4246:2:1290
-4247:2:1284
-4248:2:1285
-4249:2:1289
-4250:2:1290
-4251:2:1298
-4252:2:1303
-4253:2:1307
-4254:2:1308
-4255:2:1315
-4256:2:1316
-4257:2:1327
-4258:2:1328
-4259:2:1329
-4260:2:1327
-4261:2:1328
-4262:2:1329
-4263:2:1340
-4264:2:1345
-4265:2:1346
-4266:0:4365
-4267:2:1358
-4268:0:4365
-4269:2:1360
-4270:0:4365
-4271:3:4069
-4272:0:4365
-4273:2:1361
-4274:0:4365
-4275:3:4070
-4276:0:4365
-4277:2:1362
-4278:2:1366
-4279:2:1367
-4280:2:1375
-4281:2:1376
-4282:2:1380
-4283:2:1381
-4284:2:1375
-4285:2:1376
-4286:2:1380
-4287:2:1381
-4288:2:1389
-4289:2:1394
-4290:2:1398
-4291:2:1399
-4292:2:1406
-4293:2:1407
-4294:2:1418
-4295:2:1419
-4296:2:1420
-4297:2:1418
-4298:2:1419
-4299:2:1420
-4300:2:1431
-4301:2:1436
-4302:2:1437
-4303:0:4365
-4304:2:1449
-4305:0:4365
-4306:3:4069
-4307:0:4365
-4308:2:1451
-4309:0:4365
-4310:3:4070
-4311:0:4365
-4312:2:1652
-4313:0:4365
-4314:2:1653
-4315:0:4365
-4316:2:1657
-4317:0:4365
-4318:2:1660
-4319:0:4365
-4320:3:4069
-4321:0:4365
-4322:2:1665
-4323:2:1669
-4324:2:1670
-4325:2:1678
-4326:2:1679
-4327:2:1683
-4328:2:1684
-4329:2:1678
-4330:2:1679
-4331:2:1680
-4332:2:1692
-4333:2:1697
-4334:2:1701
-4335:2:1702
-4336:2:1709
-4337:2:1710
-4338:2:1721
-4339:2:1722
-4340:2:1723
-4341:2:1721
-4342:2:1722
-4343:2:1723
-4344:2:1734
-4345:2:1739
-4346:2:1740
-4347:0:4365
-4348:3:4070
-4349:0:4365
-4350:2:1752
-4351:0:4365
-4352:3:4069
-4353:0:4365
-4354:2:1754
-4355:0:4365
-4356:3:4070
-4357:0:4365
-4358:2:1755
-4359:2:1759
-4360:2:1760
-4361:2:1768
-4362:2:1769
-4363:2:1773
-4364:2:1774
-4365:2:1768
-4366:2:1769
-4367:2:1773
-4368:2:1774
-4369:2:1782
-4370:2:1787
-4371:2:1791
-4372:2:1792
-4373:2:1799
-4374:2:1800
-4375:2:1811
-4376:2:1812
-4377:2:1813
-4378:2:1811
-4379:2:1812
-4380:2:1813
-4381:2:1824
-4382:2:1829
-4383:2:1830
-4384:0:4365
-4385:2:1842
-4386:0:4365
-4387:3:4069
-4388:0:4365
-4389:2:1844
-4390:0:4365
-4391:3:4070
-4392:0:4365
-4393:2:1845
-4394:2:1849
-4395:2:1850
-4396:2:1858
-4397:2:1859
-4398:2:1863
-4399:2:1864
-4400:2:1858
-4401:2:1859
-4402:2:1863
-4403:2:1864
-4404:2:1872
-4405:2:1877
-4406:2:1881
-4407:2:1882
-4408:2:1889
-4409:2:1890
-4410:2:1901
-4411:2:1902
-4412:2:1903
-4413:2:1901
-4414:2:1902
-4415:2:1903
-4416:2:1914
-4417:2:1919
-4418:2:1920
-4419:0:4365
-4420:2:1932
-4421:0:4365
-4422:3:4069
-4423:0:4365
-4424:2:1934
-4425:0:4365
-4426:3:4070
-4427:0:4365
-4428:2:1935
-4429:0:4365
-4430:2:1936
-4431:0:4365
-4432:2:2129
-4433:0:4365
-4434:2:2130
-4435:0:4365
-4436:2:2134
-4437:0:4365
-4438:3:4069
-4439:0:4365
-4440:2:2136
-4441:0:4365
-4442:3:4070
-4443:0:4365
-4444:2:2137
-4445:2:2141
-4446:2:2142
-4447:2:2150
-4448:2:2151
-4449:2:2155
-4450:2:2156
-4451:2:2150
-4452:2:2151
-4453:2:2155
-4454:2:2156
-4455:2:2164
-4456:2:2169
-4457:2:2173
-4458:2:2174
-4459:2:2181
-4460:2:2182
-4461:2:2193
-4462:2:2194
-4463:2:2195
-4464:2:2193
-4465:2:2194
-4466:2:2195
-4467:2:2206
-4468:2:2211
-4469:2:2212
-4470:0:4365
-4471:2:2224
-4472:0:4365
-4473:3:4069
-4474:0:4365
-4475:2:2226
-4476:0:4365
-4477:3:4070
-4478:0:4365
-4479:2:2230
-4480:0:4365
-4481:3:4069
-4482:0:4365
-4483:2:2235
-4484:2:2239
-4485:2:2240
-4486:2:2248
-4487:2:2249
-4488:2:2253
-4489:2:2254
-4490:2:2248
-4491:2:2249
-4492:2:2250
-4493:2:2262
-4494:2:2267
-4495:2:2271
-4496:2:2272
-4497:2:2279
-4498:2:2280
-4499:2:2291
-4500:2:2292
-4501:2:2293
-4502:2:2291
-4503:2:2292
-4504:2:2293
-4505:2:2304
-4506:2:2309
-4507:2:2310
-4508:0:4365
-4509:3:4070
-4510:0:4365
-4511:2:2322
-4512:0:4365
-4513:2:1169
-4514:0:4365
-4515:3:4069
-4516:0:4365
-4517:2:1170
-4518:0:4365
-4519:3:4070
-4520:0:4365
-4521:3:4071
-4522:0:4365
-4523:3:4081
-4524:0:4365
-4525:3:3666
-4526:0:4365
-4527:3:3667
-4528:0:4365
-4529:3:3668
-4530:0:4365
-4531:3:3669
-4532:3:3673
-4533:3:3674
-4534:3:3682
-4535:3:3683
-4536:3:3687
-4537:3:3688
-4538:3:3682
-4539:3:3683
-4540:3:3687
-4541:3:3688
-4542:3:3696
-4543:3:3701
-4544:3:3705
-4545:3:3706
-4546:3:3713
-4547:3:3714
-4548:3:3725
-4549:3:3726
-4550:3:3727
-4551:3:3725
-4552:3:3726
-4553:3:3727
-4554:3:3738
-4555:3:3743
-4556:3:3744
-4557:0:4365
-4558:3:3756
-4559:0:4365
-4560:3:3757
-4561:0:4365
-4562:2:1173
-4563:0:4365
-4564:3:3758
-4565:0:4365
-4566:2:1179
-4567:0:4365
-4568:2:1180
-4569:0:4365
-4570:3:3757
-4571:0:4365
-4572:2:1181
-4573:2:1185
-4574:2:1186
-4575:2:1194
-4576:2:1195
-4577:2:1199
-4578:2:1200
-4579:2:1194
-4580:2:1195
-4581:2:1199
-4582:2:1200
-4583:2:1208
-4584:2:1213
-4585:2:1217
-4586:2:1218
-4587:2:1225
-4588:2:1226
-4589:2:1237
-4590:2:1238
-4591:2:1239
-4592:2:1237
-4593:2:1238
-4594:2:1239
-4595:2:1250
-4596:2:1255
-4597:2:1256
-4598:0:4365
-4599:3:3758
-4600:0:4365
-4601:2:1268
-4602:0:4365
-4603:3:3757
-4604:0:4365
-4605:2:1270
-4606:0:4365
-4607:3:3758
-4608:0:4365
-4609:2:1271
-4610:2:1275
-4611:2:1276
-4612:2:1284
-4613:2:1285
-4614:2:1289
-4615:2:1290
-4616:2:1284
-4617:2:1285
-4618:2:1289
-4619:2:1290
-4620:2:1298
-4621:2:1303
-4622:2:1307
-4623:2:1308
-4624:2:1315
-4625:2:1316
-4626:2:1327
-4627:2:1328
-4628:2:1329
-4629:2:1327
-4630:2:1328
-4631:2:1329
-4632:2:1340
-4633:2:1345
-4634:2:1346
-4635:0:4365
-4636:2:1358
-4637:0:4365
-4638:2:1360
-4639:0:4365
-4640:3:3757
-4641:0:4365
-4642:2:1361
-4643:0:4365
-4644:3:3758
-4645:0:4365
-4646:2:1362
-4647:2:1366
-4648:2:1367
-4649:2:1375
-4650:2:1376
-4651:2:1380
-4652:2:1381
-4653:2:1375
-4654:2:1376
-4655:2:1380
-4656:2:1381
-4657:2:1389
-4658:2:1394
-4659:2:1398
-4660:2:1399
-4661:2:1406
-4662:2:1407
-4663:2:1418
-4664:2:1419
-4665:2:1420
-4666:2:1418
-4667:2:1419
-4668:2:1420
-4669:2:1431
-4670:2:1436
-4671:2:1437
-4672:0:4365
-4673:2:1449
-4674:0:4365
-4675:3:3757
-4676:0:4365
-4677:2:1451
-4678:0:4365
-4679:3:3758
-4680:0:4365
-4681:2:1652
-4682:0:4365
-4683:2:1653
-4684:0:4365
-4685:2:1657
-4686:0:4365
-4687:2:1660
-4688:0:4365
-4689:3:3757
-4690:0:4365
-4691:2:1665
-4692:2:1669
-4693:2:1670
-4694:2:1678
-4695:2:1679
-4696:2:1683
-4697:2:1684
-4698:2:1678
-4699:2:1679
-4700:2:1680
-4701:2:1692
-4702:2:1697
-4703:2:1701
-4704:2:1702
-4705:2:1709
-4706:2:1710
-4707:2:1721
-4708:2:1722
-4709:2:1723
-4710:2:1721
-4711:2:1722
-4712:2:1723
-4713:2:1734
-4714:2:1739
-4715:2:1740
-4716:0:4365
-4717:3:3758
-4718:0:4365
-4719:2:1752
-4720:0:4365
-4721:3:3757
-4722:0:4365
-4723:2:1754
-4724:0:4365
-4725:3:3758
-4726:0:4365
-4727:2:1755
-4728:2:1759
-4729:2:1760
-4730:2:1768
-4731:2:1769
-4732:2:1773
-4733:2:1774
-4734:2:1768
-4735:2:1769
-4736:2:1773
-4737:2:1774
-4738:2:1782
-4739:2:1787
-4740:2:1791
-4741:2:1792
-4742:2:1799
-4743:2:1800
-4744:2:1811
-4745:2:1812
-4746:2:1813
-4747:2:1811
-4748:2:1812
-4749:2:1813
-4750:2:1824
-4751:2:1829
-4752:2:1830
-4753:0:4365
-4754:2:1842
-4755:0:4365
-4756:3:3757
-4757:0:4365
-4758:2:1844
-4759:0:4365
-4760:3:3758
-4761:0:4365
-4762:2:1845
-4763:2:1849
-4764:2:1850
-4765:2:1858
-4766:2:1859
-4767:2:1863
-4768:2:1864
-4769:2:1858
-4770:2:1859
-4771:2:1863
-4772:2:1864
-4773:2:1872
-4774:2:1877
-4775:2:1881
-4776:2:1882
-4777:2:1889
-4778:2:1890
-4779:2:1901
-4780:2:1902
-4781:2:1903
-4782:2:1901
-4783:2:1902
-4784:2:1903
-4785:2:1914
-4786:2:1919
-4787:2:1920
-4788:0:4365
-4789:2:1932
-4790:0:4365
-4791:3:3757
-4792:0:4365
-4793:2:1934
-4794:0:4365
-4795:3:3758
-4796:0:4365
-4797:2:1935
-4798:0:4365
-4799:2:1936
-4800:0:4365
-4801:2:2129
-4802:0:4365
-4803:2:2130
-4804:0:4365
-4805:2:2134
-4806:0:4365
-4807:3:3757
-4808:0:4365
-4809:2:2136
-4810:0:4365
-4811:3:3758
-4812:0:4365
-4813:2:2137
-4814:2:2141
-4815:2:2142
-4816:2:2150
-4817:2:2151
-4818:2:2155
-4819:2:2156
-4820:2:2150
-4821:2:2151
-4822:2:2155
-4823:2:2156
-4824:2:2164
-4825:2:2169
-4826:2:2173
-4827:2:2174
-4828:2:2181
-4829:2:2182
-4830:2:2193
-4831:2:2194
-4832:2:2195
-4833:2:2193
-4834:2:2194
-4835:2:2195
-4836:2:2206
-4837:2:2211
-4838:2:2212
-4839:0:4365
-4840:2:2224
-4841:0:4365
-4842:3:3757
-4843:0:4365
-4844:2:2226
-4845:0:4365
-4846:3:3758
-4847:0:4365
-4848:2:2230
-4849:0:4365
-4850:3:3757
-4851:0:4365
-4852:2:2235
-4853:2:2239
-4854:2:2240
-4855:2:2248
-4856:2:2249
-4857:2:2253
-4858:2:2254
-4859:2:2248
-4860:2:2249
-4861:2:2250
-4862:2:2262
-4863:2:2267
-4864:2:2271
-4865:2:2272
-4866:2:2279
-4867:2:2280
-4868:2:2291
-4869:2:2292
-4870:2:2293
-4871:2:2291
-4872:2:2292
-4873:2:2293
-4874:2:2304
-4875:2:2309
-4876:2:2310
-4877:0:4365
-4878:3:3758
-4879:0:4365
-4880:2:2322
-4881:0:4365
-4882:2:1169
-4883:0:4365
-4884:3:3757
-4885:0:4365
-4886:2:1170
-4887:0:4365
-4888:3:3758
-4889:0:4365
-4890:3:3759
-4891:0:4365
-4892:3:3972
-4893:0:4365
-4894:3:4077
-4895:0:4365
-4896:3:4078
-4897:0:4365
-4898:3:4082
-4899:0:4365
-4900:3:4088
-4901:0:4365
-4902:3:4092
-4903:3:4093
-4904:3:4097
-4905:3:4101
-4906:3:4102
-4907:3:4097
-4908:3:4101
-4909:3:4102
-4910:3:4106
-4911:3:4114
-4912:3:4115
-4913:3:4120
-4914:3:4127
-4915:3:4128
-4916:3:4127
-4917:3:4128
-4918:3:4135
-4919:3:4140
-4920:0:4365
-4921:3:4151
-4922:0:4365
-4923:3:4155
-4924:3:4156
-4925:3:4160
-4926:3:4164
-4927:3:4165
-4928:3:4160
-4929:3:4164
-4930:3:4165
-4931:3:4169
-4932:3:4177
-4933:3:4178
-4934:3:4183
-4935:3:4190
-4936:3:4191
-4937:3:4190
-4938:3:4191
-4939:3:4198
-4940:3:4203
-4941:0:4365
-4942:3:4151
-4943:0:4365
-4944:3:4155
-4945:3:4156
-4946:3:4160
-4947:3:4164
-4948:3:4165
-4949:3:4160
-4950:3:4164
-4951:3:4165
-4952:3:4169
-4953:3:4177
-4954:3:4178
-4955:3:4183
-4956:3:4190
-4957:3:4191
-4958:3:4190
-4959:3:4191
-4960:3:4198
-4961:3:4203
-4962:0:4365
-4963:3:4214
-4964:0:4365
-4965:3:4222
-4966:3:4223
-4967:3:4227
-4968:3:4231
-4969:3:4232
-4970:3:4227
-4971:3:4231
-4972:3:4232
-4973:3:4236
-4974:3:4244
-4975:3:4245
-4976:3:4250
-4977:3:4257
-4978:3:4258
-4979:3:4257
-4980:3:4258
-4981:3:4265
-4982:3:4270
-4983:0:4365
-4984:3:4285
-4985:0:4365
-4986:3:4286
-4987:0:4365
-4988:2:1173
-4989:0:4365
-4990:3:4287
-4991:0:4365
-4992:2:1179
-4993:0:4365
-4994:2:1180
-4995:0:4365
-4996:3:4286
-4997:0:4365
-4998:2:1181
-4999:2:1185
-5000:2:1186
-5001:2:1194
-5002:2:1195
-5003:2:1199
-5004:2:1200
-5005:2:1194
-5006:2:1195
-5007:2:1199
-5008:2:1200
-5009:2:1208
-5010:2:1213
-5011:2:1217
-5012:2:1218
-5013:2:1225
-5014:2:1226
-5015:2:1237
-5016:2:1238
-5017:2:1239
-5018:2:1237
-5019:2:1238
-5020:2:1239
-5021:2:1250
-5022:2:1255
-5023:2:1256
-5024:0:4365
-5025:3:4287
-5026:0:4365
-5027:2:1268
-5028:0:4365
-5029:3:4286
-5030:0:4365
-5031:2:1270
-5032:0:4365
-5033:3:4287
-5034:0:4365
-5035:2:1271
-5036:2:1275
-5037:2:1276
-5038:2:1284
-5039:2:1285
-5040:2:1289
-5041:2:1290
-5042:2:1284
-5043:2:1285
-5044:2:1289
-5045:2:1290
-5046:2:1298
-5047:2:1303
-5048:2:1307
-5049:2:1308
-5050:2:1315
-5051:2:1316
-5052:2:1327
-5053:2:1328
-5054:2:1329
-5055:2:1327
-5056:2:1328
-5057:2:1329
-5058:2:1340
-5059:2:1345
-5060:2:1346
-5061:0:4365
-5062:2:1358
-5063:0:4365
-5064:2:1360
-5065:0:4365
-5066:3:4286
-5067:0:4365
-5068:2:1361
-5069:0:4365
-5070:3:4287
-5071:0:4365
-5072:2:1362
-5073:2:1366
-5074:2:1367
-5075:2:1375
-5076:2:1376
-5077:2:1380
-5078:2:1381
-5079:2:1375
-5080:2:1376
-5081:2:1380
-5082:2:1381
-5083:2:1389
-5084:2:1394
-5085:2:1398
-5086:2:1399
-5087:2:1406
-5088:2:1407
-5089:2:1418
-5090:2:1419
-5091:2:1420
-5092:2:1418
-5093:2:1419
-5094:2:1420
-5095:2:1431
-5096:2:1436
-5097:2:1437
-5098:0:4365
-5099:2:1449
-5100:0:4365
-5101:3:4286
-5102:0:4365
-5103:2:1451
-5104:0:4365
-5105:3:4287
-5106:0:4365
-5107:2:1652
-5108:0:4365
-5109:2:1653
-5110:0:4365
-5111:2:1657
-5112:0:4365
-5113:2:1660
-5114:0:4365
-5115:3:4286
-5116:0:4365
-5117:2:1665
-5118:2:1669
-5119:2:1670
-5120:2:1678
-5121:2:1679
-5122:2:1683
-5123:2:1684
-5124:2:1678
-5125:2:1679
-5126:2:1680
-5127:2:1692
-5128:2:1697
-5129:2:1701
-5130:2:1702
-5131:2:1709
-5132:2:1710
-5133:2:1721
-5134:2:1722
-5135:2:1723
-5136:2:1721
-5137:2:1722
-5138:2:1723
-5139:2:1734
-5140:2:1739
-5141:2:1740
-5142:0:4365
-5143:3:4287
-5144:0:4365
-5145:2:1752
-5146:0:4365
-5147:3:4286
-5148:0:4365
-5149:2:1754
-5150:0:4365
-5151:3:4287
-5152:0:4365
-5153:2:1755
-5154:2:1759
-5155:2:1760
-5156:2:1768
-5157:2:1769
-5158:2:1773
-5159:2:1774
-5160:2:1768
-5161:2:1769
-5162:2:1773
-5163:2:1774
-5164:2:1782
-5165:2:1787
-5166:2:1791
-5167:2:1792
-5168:2:1799
-5169:2:1800
-5170:2:1811
-5171:2:1812
-5172:2:1813
-5173:2:1811
-5174:2:1812
-5175:2:1813
-5176:2:1824
-5177:2:1829
-5178:2:1830
-5179:0:4365
-5180:2:1842
-5181:0:4365
-5182:3:4286
-5183:0:4365
-5184:2:1844
-5185:0:4365
-5186:3:4287
-5187:0:4365
-5188:2:1845
-5189:2:1849
-5190:2:1850
-5191:2:1858
-5192:2:1859
-5193:2:1863
-5194:2:1864
-5195:2:1858
-5196:2:1859
-5197:2:1863
-5198:2:1864
-5199:2:1872
-5200:2:1877
-5201:2:1881
-5202:2:1882
-5203:2:1889
-5204:2:1890
-5205:2:1901
-5206:2:1902
-5207:2:1903
-5208:2:1901
-5209:2:1902
-5210:2:1903
-5211:2:1914
-5212:2:1919
-5213:2:1920
-5214:0:4365
-5215:2:1932
-5216:0:4365
-5217:3:4286
-5218:0:4365
-5219:2:1934
-5220:0:4365
-5221:3:4287
-5222:0:4365
-5223:2:1935
-5224:0:4365
-5225:2:1936
-5226:0:4365
-5227:2:2129
-5228:0:4365
-5229:2:2130
-5230:0:4365
-5231:2:2134
-5232:0:4365
-5233:3:4286
-5234:0:4365
-5235:2:2136
-5236:0:4365
-5237:3:4287
-5238:0:4365
-5239:2:2137
-5240:2:2141
-5241:2:2142
-5242:2:2150
-5243:2:2151
-5244:2:2155
-5245:2:2156
-5246:2:2150
-5247:2:2151
-5248:2:2155
-5249:2:2156
-5250:2:2164
-5251:2:2169
-5252:2:2173
-5253:2:2174
-5254:2:2181
-5255:2:2182
-5256:2:2193
-5257:2:2194
-5258:2:2195
-5259:2:2193
-5260:2:2194
-5261:2:2195
-5262:2:2206
-5263:2:2211
-5264:2:2212
-5265:0:4365
-5266:2:2224
-5267:0:4365
-5268:3:4286
-5269:0:4365
-5270:2:2226
-5271:0:4365
-5272:3:4287
-5273:0:4365
-5274:2:2230
-5275:0:4365
-5276:3:4286
-5277:0:4365
-5278:2:2235
-5279:2:2239
-5280:2:2240
-5281:2:2248
-5282:2:2249
-5283:2:2253
-5284:2:2254
-5285:2:2248
-5286:2:2249
-5287:2:2250
-5288:2:2262
-5289:2:2267
-5290:2:2271
-5291:2:2272
-5292:2:2279
-5293:2:2280
-5294:2:2291
-5295:2:2292
-5296:2:2293
-5297:2:2291
-5298:2:2292
-5299:2:2293
-5300:2:2304
-5301:2:2309
-5302:2:2310
-5303:0:4365
-5304:3:4287
-5305:0:4365
-5306:2:2322
-5307:0:4365
-5308:2:1169
-5309:0:4365
-5310:3:4286
-5311:0:4365
-5312:2:1170
-5313:0:4365
-5314:3:4287
-5315:0:4365
-5316:3:4288
-5317:0:4365
-5318:3:4294
-5319:0:4365
-5320:3:4295
-5321:0:4365
-5322:3:2338
-5323:0:4365
-5324:3:2339
-5325:3:2343
-5326:3:2344
-5327:3:2352
-5328:3:2353
-5329:3:2357
-5330:3:2358
-5331:3:2352
-5332:3:2353
-5333:3:2357
-5334:3:2358
-5335:3:2366
-5336:3:2371
-5337:3:2375
-5338:3:2376
-5339:3:2383
-5340:3:2384
-5341:3:2395
-5342:3:2396
-5343:3:2397
-5344:3:2395
-5345:3:2396
-5346:3:2397
-5347:3:2408
-5348:3:2413
-5349:3:2414
-5350:0:4365
-5351:3:2426
-5352:0:4365
-5353:3:2427
-5354:0:4365
-5355:2:1173
-5356:0:4365
-5357:3:2428
-5358:0:4365
-5359:2:1179
-5360:0:4365
-5361:2:1180
-5362:0:4365
-5363:3:2427
-5364:0:4365
-5365:2:1181
-5366:2:1185
-5367:2:1186
-5368:2:1194
-5369:2:1195
-5370:2:1199
-5371:2:1200
-5372:2:1194
-5373:2:1195
-5374:2:1199
-5375:2:1200
-5376:2:1208
-5377:2:1213
-5378:2:1217
-5379:2:1218
-5380:2:1225
-5381:2:1226
-5382:2:1237
-5383:2:1238
-5384:2:1239
-5385:2:1237
-5386:2:1238
-5387:2:1239
-5388:2:1250
-5389:2:1255
-5390:2:1256
-5391:0:4365
-5392:3:2428
-5393:0:4365
-5394:2:1268
-5395:0:4365
-5396:3:2427
-5397:0:4365
-5398:2:1270
-5399:0:4365
-5400:3:2428
-5401:0:4365
-5402:2:1271
-5403:2:1275
-5404:2:1276
-5405:2:1284
-5406:2:1285
-5407:2:1289
-5408:2:1290
-5409:2:1284
-5410:2:1285
-5411:2:1289
-5412:2:1290
-5413:2:1298
-5414:2:1303
-5415:2:1307
-5416:2:1308
-5417:2:1315
-5418:2:1316
-5419:2:1327
-5420:2:1328
-5421:2:1329
-5422:2:1327
-5423:2:1328
-5424:2:1329
-5425:2:1340
-5426:2:1345
-5427:2:1346
-5428:0:4365
-5429:2:1358
-5430:0:4365
-5431:2:1360
-5432:0:4365
-5433:3:2427
-5434:0:4365
-5435:2:1361
-5436:0:4365
-5437:3:2428
-5438:0:4365
-5439:2:1362
-5440:2:1366
-5441:2:1367
-5442:2:1375
-5443:2:1376
-5444:2:1380
-5445:2:1381
-5446:2:1375
-5447:2:1376
-5448:2:1380
-5449:2:1381
-5450:2:1389
-5451:2:1394
-5452:2:1398
-5453:2:1399
-5454:2:1406
-5455:2:1407
-5456:2:1418
-5457:2:1419
-5458:2:1420
-5459:2:1418
-5460:2:1419
-5461:2:1420
-5462:2:1431
-5463:2:1436
-5464:2:1437
-5465:0:4365
-5466:2:1449
-5467:0:4365
-5468:3:2427
-5469:0:4365
-5470:2:1451
-5471:0:4365
-5472:3:2428
-5473:0:4365
-5474:2:1652
-5475:0:4365
-5476:2:1653
-5477:0:4365
-5478:2:1657
-5479:0:4365
-5480:2:1660
-5481:0:4365
-5482:3:2427
-5483:0:4365
-5484:2:1665
-5485:2:1669
-5486:2:1670
-5487:2:1678
-5488:2:1679
-5489:2:1683
-5490:2:1684
-5491:2:1678
-5492:2:1679
-5493:2:1680
-5494:2:1692
-5495:2:1697
-5496:2:1701
-5497:2:1702
-5498:2:1709
-5499:2:1710
-5500:2:1721
-5501:2:1722
-5502:2:1723
-5503:2:1721
-5504:2:1722
-5505:2:1723
-5506:2:1734
-5507:2:1739
-5508:2:1740
-5509:0:4365
-5510:3:2428
-5511:0:4365
-5512:2:1752
-5513:0:4365
-5514:3:2427
-5515:0:4365
-5516:2:1754
-5517:0:4365
-5518:3:2428
-5519:0:4365
-5520:2:1755
-5521:2:1759
-5522:2:1760
-5523:2:1768
-5524:2:1769
-5525:2:1773
-5526:2:1774
-5527:2:1768
-5528:2:1769
-5529:2:1773
-5530:2:1774
-5531:2:1782
-5532:2:1787
-5533:2:1791
-5534:2:1792
-5535:2:1799
-5536:2:1800
-5537:2:1811
-5538:2:1812
-5539:2:1813
-5540:2:1811
-5541:2:1812
-5542:2:1813
-5543:2:1824
-5544:2:1829
-5545:2:1830
-5546:0:4365
-5547:2:1842
-5548:0:4365
-5549:3:2427
-5550:0:4365
-5551:2:1844
-5552:0:4365
-5553:3:2428
-5554:0:4365
-5555:2:1845
-5556:2:1849
-5557:2:1850
-5558:2:1858
-5559:2:1859
-5560:2:1863
-5561:2:1864
-5562:2:1858
-5563:2:1859
-5564:2:1863
-5565:2:1864
-5566:2:1872
-5567:2:1877
-5568:2:1881
-5569:2:1882
-5570:2:1889
-5571:2:1890
-5572:2:1901
-5573:2:1902
-5574:2:1903
-5575:2:1901
-5576:2:1902
-5577:2:1903
-5578:2:1914
-5579:2:1919
-5580:2:1920
-5581:0:4365
-5582:2:1932
-5583:0:4365
-5584:3:2427
-5585:0:4365
-5586:2:1934
-5587:0:4365
-5588:3:2428
-5589:0:4365
-5590:2:1935
-5591:0:4365
-5592:2:1936
-5593:0:4365
-5594:2:2129
-5595:0:4365
-5596:2:2130
-5597:0:4365
-5598:2:2134
-5599:0:4365
-5600:3:2427
-5601:0:4365
-5602:2:2136
-5603:0:4365
-5604:3:2428
-5605:0:4365
-5606:2:2137
-5607:2:2141
-5608:2:2142
-5609:2:2150
-5610:2:2151
-5611:2:2155
-5612:2:2156
-5613:2:2150
-5614:2:2151
-5615:2:2155
-5616:2:2156
-5617:2:2164
-5618:2:2169
-5619:2:2173
-5620:2:2174
-5621:2:2181
-5622:2:2182
-5623:2:2193
-5624:2:2194
-5625:2:2195
-5626:2:2193
-5627:2:2194
-5628:2:2195
-5629:2:2206
-5630:2:2211
-5631:2:2212
-5632:0:4365
-5633:2:2224
-5634:0:4365
-5635:3:2427
-5636:0:4365
-5637:2:2226
-5638:0:4365
-5639:3:2428
-5640:0:4365
-5641:2:2230
-5642:0:4365
-5643:3:2427
-5644:0:4365
-5645:2:2235
-5646:2:2239
-5647:2:2240
-5648:2:2248
-5649:2:2249
-5650:2:2253
-5651:2:2254
-5652:2:2248
-5653:2:2249
-5654:2:2250
-5655:2:2262
-5656:2:2267
-5657:2:2271
-5658:2:2272
-5659:2:2279
-5660:2:2280
-5661:2:2291
-5662:2:2292
-5663:2:2293
-5664:2:2291
-5665:2:2292
-5666:2:2293
-5667:2:2304
-5668:2:2309
-5669:2:2310
-5670:0:4365
-5671:3:2428
-5672:0:4365
-5673:2:2322
-5674:0:4365
-5675:2:1169
-5676:0:4365
-5677:3:2427
-5678:0:4365
-5679:2:1170
-5680:0:4365
-5681:3:2428
-5682:0:4365
-5683:3:2429
-5684:0:4365
-5685:3:2435
-5686:3:2436
-5687:0:4365
-5688:3:2440
-5689:3:2444
-5690:3:2445
-5691:3:2453
-5692:3:2454
-5693:3:2458
-5694:3:2459
-5695:3:2453
-5696:3:2454
-5697:3:2458
-5698:3:2459
-5699:3:2467
-5700:3:2472
-5701:3:2473
-5702:3:2484
-5703:3:2485
-5704:3:2496
-5705:3:2497
-5706:3:2498
-5707:3:2496
-5708:3:2497
-5709:3:2498
-5710:3:2509
-5711:3:2514
-5712:3:2515
-5713:0:4365
-5714:3:2527
-5715:0:4365
-5716:3:2528
-5717:0:4365
-5718:2:1173
-5719:0:4365
-5720:3:2529
-5721:0:4365
-5722:2:1179
-5723:0:4365
-5724:2:1180
-5725:0:4365
-5726:3:2528
-5727:0:4365
-5728:2:1181
-5729:2:1185
-5730:2:1186
-5731:2:1194
-5732:2:1195
-5733:2:1199
-5734:2:1200
-5735:2:1194
-5736:2:1195
-5737:2:1199
-5738:2:1200
-5739:2:1208
-5740:2:1213
-5741:2:1217
-5742:2:1218
-5743:2:1225
-5744:2:1226
-5745:2:1237
-5746:2:1238
-5747:2:1239
-5748:2:1237
-5749:2:1238
-5750:2:1239
-5751:2:1250
-5752:2:1255
-5753:2:1256
-5754:0:4365
-5755:3:2529
-5756:0:4365
-5757:2:1268
-5758:0:4365
-5759:3:2528
-5760:0:4365
-5761:2:1270
-5762:0:4365
-5763:3:2529
-5764:0:4365
-5765:2:1271
-5766:2:1275
-5767:2:1276
-5768:2:1284
-5769:2:1285
-5770:2:1289
-5771:2:1290
-5772:2:1284
-5773:2:1285
-5774:2:1289
-5775:2:1290
-5776:2:1298
-5777:2:1303
-5778:2:1307
-5779:2:1308
-5780:2:1315
-5781:2:1316
-5782:2:1327
-5783:2:1328
-5784:2:1329
-5785:2:1327
-5786:2:1328
-5787:2:1329
-5788:2:1340
-5789:2:1345
-5790:2:1346
-5791:0:4365
-5792:2:1358
-5793:0:4365
-5794:2:1360
-5795:0:4365
-5796:3:2528
-5797:0:4365
-5798:2:1361
-5799:0:4365
-5800:3:2529
-5801:0:4365
-5802:2:1362
-5803:2:1366
-5804:2:1367
-5805:2:1375
-5806:2:1376
-5807:2:1380
-5808:2:1381
-5809:2:1375
-5810:2:1376
-5811:2:1380
-5812:2:1381
-5813:2:1389
-5814:2:1394
-5815:2:1398
-5816:2:1399
-5817:2:1406
-5818:2:1407
-5819:2:1418
-5820:2:1419
-5821:2:1420
-5822:2:1418
-5823:2:1419
-5824:2:1420
-5825:2:1431
-5826:2:1436
-5827:2:1437
-5828:0:4365
-5829:2:1449
-5830:0:4365
-5831:3:2528
-5832:0:4365
-5833:2:1451
-5834:0:4365
-5835:3:2529
-5836:0:4365
-5837:2:1652
-5838:0:4365
-5839:2:1653
-5840:0:4365
-5841:2:1657
-5842:0:4365
-5843:2:1660
-5844:0:4365
-5845:3:2528
-5846:0:4365
-5847:2:1665
-5848:2:1669
-5849:2:1670
-5850:2:1678
-5851:2:1679
-5852:2:1683
-5853:2:1684
-5854:2:1678
-5855:2:1679
-5856:2:1680
-5857:2:1692
-5858:2:1697
-5859:2:1701
-5860:2:1702
-5861:2:1709
-5862:2:1710
-5863:2:1721
-5864:2:1722
-5865:2:1723
-5866:2:1721
-5867:2:1722
-5868:2:1723
-5869:2:1734
-5870:2:1739
-5871:2:1740
-5872:0:4365
-5873:3:2529
-5874:0:4365
-5875:2:1752
-5876:0:4365
-5877:3:2528
-5878:0:4365
-5879:2:1754
-5880:0:4365
-5881:3:2529
-5882:0:4365
-5883:2:1755
-5884:2:1759
-5885:2:1760
-5886:2:1768
-5887:2:1769
-5888:2:1773
-5889:2:1774
-5890:2:1768
-5891:2:1769
-5892:2:1773
-5893:2:1774
-5894:2:1782
-5895:2:1787
-5896:2:1791
-5897:2:1792
-5898:2:1799
-5899:2:1800
-5900:2:1811
-5901:2:1812
-5902:2:1813
-5903:2:1811
-5904:2:1812
-5905:2:1813
-5906:2:1824
-5907:2:1829
-5908:2:1830
-5909:0:4365
-5910:2:1842
-5911:0:4365
-5912:3:2528
-5913:0:4365
-5914:2:1844
-5915:0:4365
-5916:3:2529
-5917:0:4365
-5918:2:1845
-5919:2:1849
-5920:2:1850
-5921:2:1858
-5922:2:1859
-5923:2:1863
-5924:2:1864
-5925:2:1858
-5926:2:1859
-5927:2:1863
-5928:2:1864
-5929:2:1872
-5930:2:1877
-5931:2:1881
-5932:2:1882
-5933:2:1889
-5934:2:1890
-5935:2:1901
-5936:2:1902
-5937:2:1903
-5938:2:1901
-5939:2:1902
-5940:2:1903
-5941:2:1914
-5942:2:1919
-5943:2:1920
-5944:0:4365
-5945:2:1932
-5946:0:4365
-5947:3:2528
-5948:0:4365
-5949:2:1934
-5950:0:4365
-5951:3:2529
-5952:0:4365
-5953:2:1935
-5954:0:4365
-5955:2:1936
-5956:0:4365
-5957:2:2129
-5958:0:4365
-5959:2:2130
-5960:0:4365
-5961:2:2134
-5962:0:4365
-5963:3:2528
-5964:0:4365
-5965:2:2136
-5966:0:4365
-5967:3:2529
-5968:0:4365
-5969:2:2137
-5970:2:2141
-5971:2:2142
-5972:2:2150
-5973:2:2151
-5974:2:2155
-5975:2:2156
-5976:2:2150
-5977:2:2151
-5978:2:2155
-5979:2:2156
-5980:2:2164
-5981:2:2169
-5982:2:2173
-5983:2:2174
-5984:2:2181
-5985:2:2182
-5986:2:2193
-5987:2:2194
-5988:2:2195
-5989:2:2193
-5990:2:2194
-5991:2:2195
-5992:2:2206
-5993:2:2211
-5994:2:2212
-5995:0:4365
-5996:2:2224
-5997:0:4365
-5998:3:2528
-5999:0:4365
-6000:2:2226
-6001:0:4365
-6002:3:2529
-6003:0:4365
-6004:2:2230
-6005:0:4365
-6006:3:2528
-6007:0:4365
-6008:2:2235
-6009:2:2239
-6010:2:2240
-6011:2:2248
-6012:2:2249
-6013:2:2253
-6014:2:2254
-6015:2:2248
-6016:2:2249
-6017:2:2250
-6018:2:2262
-6019:2:2267
-6020:2:2271
-6021:2:2272
-6022:2:2279
-6023:2:2280
-6024:2:2291
-6025:2:2292
-6026:2:2293
-6027:2:2291
-6028:2:2292
-6029:2:2293
-6030:2:2304
-6031:2:2309
-6032:2:2310
-6033:0:4365
-6034:3:2529
-6035:0:4365
-6036:2:2322
-6037:0:4365
-6038:2:1169
-6039:0:4365
-6040:3:2528
-6041:0:4365
-6042:2:1170
-6043:0:4365
-6044:3:2529
-6045:0:4365
-6046:3:2530
-6047:0:4365
-6048:3:2536
-6049:0:4365
-6050:3:2537
-6051:0:4365
-6052:3:2547
-6053:0:4365
-6054:3:2548
-6055:0:4365
-6056:3:2552
-6057:3:2553
-6058:3:2557
-6059:3:2561
-6060:3:2562
-6061:3:2557
-6062:3:2561
-6063:3:2562
-6064:3:2566
-6065:3:2574
-6066:3:2575
-6067:3:2580
-6068:3:2587
-6069:3:2588
-6070:3:2587
-6071:3:2588
-6072:3:2595
-6073:3:2600
-6074:0:4365
-6075:3:2611
-6076:0:4365
-6077:3:2615
-6078:3:2616
-6079:3:2620
-6080:3:2624
-6081:3:2625
-6082:3:2620
-6083:3:2624
-6084:3:2625
-6085:3:2629
-6086:3:2637
-6087:3:2638
-6088:3:2643
-6089:3:2650
-6090:3:2651
-6091:3:2650
-6092:3:2651
-6093:3:2658
-6094:3:2663
-6095:0:4365
-6096:3:2611
-6097:0:4365
-6098:3:2615
-6099:3:2616
-6100:3:2620
-6101:3:2624
-6102:3:2625
-6103:3:2620
-6104:3:2624
-6105:3:2625
-6106:3:2629
-6107:3:2637
-6108:3:2638
-6109:3:2643
-6110:3:2650
-6111:3:2651
-6112:3:2650
-6113:3:2651
-6114:3:2658
-6115:3:2663
-6116:0:4365
-6117:3:2674
-6118:0:4365
-6119:3:2682
-6120:3:2683
-6121:3:2687
-6122:3:2691
-6123:3:2692
-6124:3:2687
-6125:3:2691
-6126:3:2692
-6127:3:2696
-6128:3:2704
-6129:3:2705
-6130:3:2710
-6131:3:2717
-6132:3:2718
-6133:3:2717
-6134:3:2718
-6135:3:2725
-6136:3:2730
-6137:0:4365
-6138:3:2745
-6139:0:4365
-6140:3:2746
-6141:0:4365
-6142:2:1173
-6143:0:4365
-6144:3:2747
-6145:0:4365
-6146:2:1179
-6147:0:4365
-6148:2:1180
-6149:0:4365
-6150:3:2746
-6151:0:4365
-6152:2:1181
-6153:2:1185
-6154:2:1186
-6155:2:1194
-6156:2:1195
-6157:2:1199
-6158:2:1200
-6159:2:1194
-6160:2:1195
-6161:2:1199
-6162:2:1200
-6163:2:1208
-6164:2:1213
-6165:2:1217
-6166:2:1218
-6167:2:1225
-6168:2:1226
-6169:2:1237
-6170:2:1238
-6171:2:1239
-6172:2:1237
-6173:2:1238
-6174:2:1239
-6175:2:1250
-6176:2:1255
-6177:2:1256
-6178:0:4365
-6179:3:2747
-6180:0:4365
-6181:2:1268
-6182:0:4365
-6183:3:2746
-6184:0:4365
-6185:2:1270
-6186:0:4365
-6187:3:2747
-6188:0:4365
-6189:2:1271
-6190:2:1275
-6191:2:1276
-6192:2:1284
-6193:2:1285
-6194:2:1289
-6195:2:1290
-6196:2:1284
-6197:2:1285
-6198:2:1289
-6199:2:1290
-6200:2:1298
-6201:2:1303
-6202:2:1307
-6203:2:1308
-6204:2:1315
-6205:2:1316
-6206:2:1327
-6207:2:1328
-6208:2:1329
-6209:2:1327
-6210:2:1328
-6211:2:1329
-6212:2:1340
-6213:2:1345
-6214:2:1346
-6215:0:4365
-6216:2:1358
-6217:0:4365
-6218:2:1360
-6219:0:4365
-6220:3:2746
-6221:0:4365
-6222:2:1361
-6223:0:4365
-6224:3:2747
-6225:0:4365
-6226:2:1362
-6227:2:1366
-6228:2:1367
-6229:2:1375
-6230:2:1376
-6231:2:1380
-6232:2:1381
-6233:2:1375
-6234:2:1376
-6235:2:1380
-6236:2:1381
-6237:2:1389
-6238:2:1394
-6239:2:1398
-6240:2:1399
-6241:2:1406
-6242:2:1407
-6243:2:1418
-6244:2:1419
-6245:2:1420
-6246:2:1418
-6247:2:1419
-6248:2:1420
-6249:2:1431
-6250:2:1436
-6251:2:1437
-6252:0:4365
-6253:2:1449
-6254:0:4365
-6255:3:2746
-6256:0:4365
-6257:2:1451
-6258:0:4365
-6259:3:2747
-6260:0:4365
-6261:2:1652
-6262:0:4365
-6263:2:1653
-6264:0:4365
-6265:2:1657
-6266:0:4365
-6267:2:1660
-6268:0:4365
-6269:3:2746
-6270:0:4365
-6271:2:1665
-6272:2:1669
-6273:2:1670
-6274:2:1678
-6275:2:1679
-6276:2:1683
-6277:2:1684
-6278:2:1678
-6279:2:1679
-6280:2:1680
-6281:2:1692
-6282:2:1697
-6283:2:1701
-6284:2:1702
-6285:2:1709
-6286:2:1710
-6287:2:1721
-6288:2:1722
-6289:2:1723
-6290:2:1721
-6291:2:1722
-6292:2:1723
-6293:2:1734
-6294:2:1739
-6295:2:1740
-6296:0:4365
-6297:3:2747
-6298:0:4365
-6299:2:1752
-6300:0:4365
-6301:3:2746
-6302:0:4365
-6303:2:1754
-6304:0:4365
-6305:3:2747
-6306:0:4365
-6307:2:1755
-6308:2:1759
-6309:2:1760
-6310:2:1768
-6311:2:1769
-6312:2:1773
-6313:2:1774
-6314:2:1768
-6315:2:1769
-6316:2:1773
-6317:2:1774
-6318:2:1782
-6319:2:1787
-6320:2:1791
-6321:2:1792
-6322:2:1799
-6323:2:1800
-6324:2:1811
-6325:2:1812
-6326:2:1813
-6327:2:1811
-6328:2:1812
-6329:2:1813
-6330:2:1824
-6331:2:1829
-6332:2:1830
-6333:0:4365
-6334:2:1842
-6335:0:4365
-6336:3:2746
-6337:0:4365
-6338:2:1844
-6339:0:4365
-6340:3:2747
-6341:0:4365
-6342:2:1845
-6343:2:1849
-6344:2:1850
-6345:2:1858
-6346:2:1859
-6347:2:1863
-6348:2:1864
-6349:2:1858
-6350:2:1859
-6351:2:1863
-6352:2:1864
-6353:2:1872
-6354:2:1877
-6355:2:1881
-6356:2:1882
-6357:2:1889
-6358:2:1890
-6359:2:1901
-6360:2:1902
-6361:2:1903
-6362:2:1901
-6363:2:1902
-6364:2:1903
-6365:2:1914
-6366:2:1919
-6367:2:1920
-6368:0:4365
-6369:2:1932
-6370:0:4365
-6371:3:2746
-6372:0:4365
-6373:2:1934
-6374:0:4365
-6375:3:2747
-6376:0:4365
-6377:2:1935
-6378:0:4365
-6379:2:1936
-6380:0:4365
-6381:2:2129
-6382:0:4365
-6383:2:2130
-6384:0:4365
-6385:2:2134
-6386:0:4365
-6387:3:2746
-6388:0:4365
-6389:2:2136
-6390:0:4365
-6391:3:2747
-6392:0:4365
-6393:2:2137
-6394:2:2141
-6395:2:2142
-6396:2:2150
-6397:2:2151
-6398:2:2155
-6399:2:2156
-6400:2:2150
-6401:2:2151
-6402:2:2155
-6403:2:2156
-6404:2:2164
-6405:2:2169
-6406:2:2173
-6407:2:2174
-6408:2:2181
-6409:2:2182
-6410:2:2193
-6411:2:2194
-6412:2:2195
-6413:2:2193
-6414:2:2194
-6415:2:2195
-6416:2:2206
-6417:2:2211
-6418:2:2212
-6419:0:4365
-6420:2:2224
-6421:0:4365
-6422:3:2746
-6423:0:4365
-6424:2:2226
-6425:0:4365
-6426:3:2747
-6427:0:4365
-6428:2:2230
-6429:0:4365
-6430:3:2746
-6431:0:4365
-6432:2:2235
-6433:2:2239
-6434:2:2240
-6435:2:2248
-6436:2:2249
-6437:2:2253
-6438:2:2254
-6439:2:2248
-6440:2:2249
-6441:2:2250
-6442:2:2262
-6443:2:2267
-6444:2:2271
-6445:2:2272
-6446:2:2279
-6447:2:2280
-6448:2:2291
-6449:2:2292
-6450:2:2293
-6451:2:2291
-6452:2:2292
-6453:2:2293
-6454:2:2304
-6455:2:2309
-6456:2:2310
-6457:0:4365
-6458:3:2747
-6459:0:4365
-6460:2:2322
-6461:0:4365
-6462:2:1169
-6463:0:4365
-6464:3:2746
-6465:0:4365
-6466:2:1170
-6467:0:4365
-6468:3:2747
-6469:0:4365
-6470:3:2748
-6471:0:4365
-6472:3:2754
-6473:0:4365
-6474:3:2755
-6475:3:2759
-6476:3:2760
-6477:3:2768
-6478:3:2769
-6479:3:2773
-6480:3:2774
-6481:3:2768
-6482:3:2769
-6483:3:2773
-6484:3:2774
-6485:3:2782
-6486:3:2787
-6487:3:2791
-6488:3:2792
-6489:3:2799
-6490:3:2800
-6491:3:2811
-6492:3:2812
-6493:3:2813
-6494:3:2811
-6495:3:2812
-6496:3:2813
-6497:3:2824
-6498:3:2829
-6499:3:2830
-6500:0:4365
-6501:3:2842
-6502:0:4365
-6503:3:2843
-6504:0:4365
-6505:2:1173
-6506:0:4365
-6507:3:2844
-6508:0:4365
-6509:2:1179
-6510:0:4365
-6511:2:1180
-6512:0:4365
-6513:3:2843
-6514:0:4365
-6515:2:1181
-6516:2:1185
-6517:2:1186
-6518:2:1194
-6519:2:1195
-6520:2:1199
-6521:2:1200
-6522:2:1194
-6523:2:1195
-6524:2:1199
-6525:2:1200
-6526:2:1208
-6527:2:1213
-6528:2:1217
-6529:2:1218
-6530:2:1225
-6531:2:1226
-6532:2:1237
-6533:2:1238
-6534:2:1239
-6535:2:1237
-6536:2:1238
-6537:2:1239
-6538:2:1250
-6539:2:1255
-6540:2:1256
-6541:0:4365
-6542:3:2844
-6543:0:4365
-6544:2:1268
-6545:0:4365
-6546:3:2843
-6547:0:4365
-6548:2:1270
-6549:0:4365
-6550:3:2844
-6551:0:4365
-6552:2:1271
-6553:2:1275
-6554:2:1276
-6555:2:1284
-6556:2:1285
-6557:2:1289
-6558:2:1290
-6559:2:1284
-6560:2:1285
-6561:2:1289
-6562:2:1290
-6563:2:1298
-6564:2:1303
-6565:2:1307
-6566:2:1308
-6567:2:1315
-6568:2:1316
-6569:2:1327
-6570:2:1328
-6571:2:1329
-6572:2:1327
-6573:2:1328
-6574:2:1329
-6575:2:1340
-6576:2:1345
-6577:2:1346
-6578:0:4365
-6579:2:1358
-6580:0:4365
-6581:2:1360
-6582:0:4365
-6583:3:2843
-6584:0:4365
-6585:2:1361
-6586:0:4365
-6587:3:2844
-6588:0:4365
-6589:2:1362
-6590:2:1366
-6591:2:1367
-6592:2:1375
-6593:2:1376
-6594:2:1380
-6595:2:1381
-6596:2:1375
-6597:2:1376
-6598:2:1380
-6599:2:1381
-6600:2:1389
-6601:2:1394
-6602:2:1398
-6603:2:1399
-6604:2:1406
-6605:2:1407
-6606:2:1418
-6607:2:1419
-6608:2:1420
-6609:2:1418
-6610:2:1419
-6611:2:1420
-6612:2:1431
-6613:2:1436
-6614:2:1437
-6615:0:4365
-6616:2:1449
-6617:0:4365
-6618:3:2843
-6619:0:4365
-6620:2:1451
-6621:0:4365
-6622:3:2844
-6623:0:4365
-6624:2:1652
-6625:0:4365
-6626:2:1653
-6627:0:4365
-6628:2:1657
-6629:0:4365
-6630:2:1660
-6631:0:4365
-6632:3:2843
-6633:0:4365
-6634:2:1665
-6635:2:1669
-6636:2:1670
-6637:2:1678
-6638:2:1679
-6639:2:1683
-6640:2:1684
-6641:2:1678
-6642:2:1679
-6643:2:1680
-6644:2:1692
-6645:2:1697
-6646:2:1701
-6647:2:1702
-6648:2:1709
-6649:2:1710
-6650:2:1721
-6651:2:1722
-6652:2:1723
-6653:2:1721
-6654:2:1722
-6655:2:1723
-6656:2:1734
-6657:2:1739
-6658:2:1740
-6659:0:4365
-6660:3:2844
-6661:0:4365
-6662:2:1752
-6663:0:4365
-6664:3:2843
-6665:0:4365
-6666:2:1754
-6667:0:4365
-6668:3:2844
-6669:0:4365
-6670:2:1755
-6671:2:1759
-6672:2:1760
-6673:2:1768
-6674:2:1769
-6675:2:1773
-6676:2:1774
-6677:2:1768
-6678:2:1769
-6679:2:1773
-6680:2:1774
-6681:2:1782
-6682:2:1787
-6683:2:1791
-6684:2:1792
-6685:2:1799
-6686:2:1800
-6687:2:1811
-6688:2:1812
-6689:2:1813
-6690:2:1811
-6691:2:1812
-6692:2:1813
-6693:2:1824
-6694:2:1829
-6695:2:1830
-6696:0:4365
-6697:2:1842
-6698:0:4365
-6699:3:2843
-6700:0:4365
-6701:2:1844
-6702:0:4365
-6703:3:2844
-6704:0:4365
-6705:2:1845
-6706:2:1849
-6707:2:1850
-6708:2:1858
-6709:2:1859
-6710:2:1863
-6711:2:1864
-6712:2:1858
-6713:2:1859
-6714:2:1863
-6715:2:1864
-6716:2:1872
-6717:2:1877
-6718:2:1881
-6719:2:1882
-6720:2:1889
-6721:2:1890
-6722:2:1901
-6723:2:1902
-6724:2:1903
-6725:2:1901
-6726:2:1902
-6727:2:1903
-6728:2:1914
-6729:2:1919
-6730:2:1920
-6731:0:4365
-6732:2:1932
-6733:0:4365
-6734:3:2843
-6735:0:4365
-6736:2:1934
-6737:0:4365
-6738:3:2844
-6739:0:4365
-6740:2:1935
-6741:0:4365
-6742:2:1936
-6743:0:4365
-6744:2:2129
-6745:0:4365
-6746:2:2130
-6747:0:4365
-6748:2:2134
-6749:0:4365
-6750:3:2843
-6751:0:4365
-6752:2:2136
-6753:0:4365
-6754:3:2844
-6755:0:4365
-6756:2:2137
-6757:2:2141
-6758:2:2142
-6759:2:2150
-6760:2:2151
-6761:2:2155
-6762:2:2156
-6763:2:2150
-6764:2:2151
-6765:2:2155
-6766:2:2156
-6767:2:2164
-6768:2:2169
-6769:2:2173
-6770:2:2174
-6771:2:2181
-6772:2:2182
-6773:2:2193
-6774:2:2194
-6775:2:2195
-6776:2:2193
-6777:2:2194
-6778:2:2195
-6779:2:2206
-6780:2:2211
-6781:2:2212
-6782:0:4365
-6783:2:2224
-6784:0:4365
-6785:3:2843
-6786:0:4365
-6787:2:2226
-6788:0:4365
-6789:3:2844
-6790:0:4365
-6791:2:2230
-6792:0:4365
-6793:3:2843
-6794:0:4365
-6795:2:2235
-6796:2:2239
-6797:2:2240
-6798:2:2248
-6799:2:2249
-6800:2:2253
-6801:2:2254
-6802:2:2248
-6803:2:2249
-6804:2:2250
-6805:2:2262
-6806:2:2267
-6807:2:2271
-6808:2:2272
-6809:2:2279
-6810:2:2280
-6811:2:2291
-6812:2:2292
-6813:2:2293
-6814:2:2291
-6815:2:2292
-6816:2:2293
-6817:2:2304
-6818:2:2309
-6819:2:2310
-6820:0:4365
-6821:3:2844
-6822:0:4365
-6823:2:2322
-6824:0:4365
-6825:2:1169
-6826:0:4365
-6827:3:2843
-6828:0:4365
-6829:2:1170
-6830:0:4365
-6831:3:2844
-6832:0:4365
-6833:3:2845
-6834:0:4365
-6835:3:2851
-6836:0:4365
-6837:3:2854
-6838:3:2855
-6839:3:2867
-6840:3:2868
-6841:3:2872
-6842:3:2873
-6843:3:2867
-6844:3:2868
-6845:3:2872
-6846:3:2873
-6847:3:2881
-6848:3:2886
-6849:3:2890
-6850:3:2891
-6851:3:2898
-6852:3:2899
-6853:3:2910
-6854:3:2911
-6855:3:2912
-6856:3:2910
-6857:3:2911
-6858:3:2912
-6859:3:2923
-6860:3:2928
-6861:3:2929
-6862:0:4365
-6863:3:2941
-6864:0:4365
-6865:3:2942
-6866:0:4365
-6867:2:1173
-6868:0:4365
-6869:3:2943
-6870:0:4365
-6871:2:1179
-6872:0:4365
-6873:2:1180
-6874:0:4365
-6875:3:2942
-6876:0:4365
-6877:2:1181
-6878:2:1185
-6879:2:1186
-6880:2:1194
-6881:2:1195
-6882:2:1199
-6883:2:1200
-6884:2:1194
-6885:2:1195
-6886:2:1199
-6887:2:1200
-6888:2:1208
-6889:2:1213
-6890:2:1217
-6891:2:1218
-6892:2:1225
-6893:2:1226
-6894:2:1237
-6895:2:1238
-6896:2:1239
-6897:2:1237
-6898:2:1238
-6899:2:1239
-6900:2:1250
-6901:2:1255
-6902:2:1256
-6903:0:4365
-6904:3:2943
-6905:0:4365
-6906:2:1268
-6907:0:4365
-6908:3:2942
-6909:0:4365
-6910:2:1270
-6911:0:4365
-6912:3:2943
-6913:0:4365
-6914:2:1271
-6915:2:1275
-6916:2:1276
-6917:2:1284
-6918:2:1285
-6919:2:1289
-6920:2:1290
-6921:2:1284
-6922:2:1285
-6923:2:1289
-6924:2:1290
-6925:2:1298
-6926:2:1303
-6927:2:1307
-6928:2:1308
-6929:2:1315
-6930:2:1316
-6931:2:1327
-6932:2:1328
-6933:2:1329
-6934:2:1327
-6935:2:1328
-6936:2:1329
-6937:2:1340
-6938:2:1345
-6939:2:1346
-6940:0:4365
-6941:2:1358
-6942:0:4365
-6943:2:1360
-6944:0:4365
-6945:3:2942
-6946:0:4365
-6947:2:1361
-6948:0:4365
-6949:3:2943
-6950:0:4365
-6951:2:1362
-6952:2:1366
-6953:2:1367
-6954:2:1375
-6955:2:1376
-6956:2:1380
-6957:2:1381
-6958:2:1375
-6959:2:1376
-6960:2:1380
-6961:2:1381
-6962:2:1389
-6963:2:1394
-6964:2:1398
-6965:2:1399
-6966:2:1406
-6967:2:1407
-6968:2:1418
-6969:2:1419
-6970:2:1420
-6971:2:1418
-6972:2:1419
-6973:2:1420
-6974:2:1431
-6975:2:1436
-6976:2:1437
-6977:0:4365
-6978:2:1449
-6979:0:4365
-6980:3:2942
-6981:0:4365
-6982:2:1451
-6983:0:4365
-6984:3:2943
-6985:0:4365
-6986:2:1652
-6987:0:4365
-6988:2:1653
-6989:0:4365
-6990:2:1657
-6991:0:4365
-6992:2:1660
-6993:0:4365
-6994:3:2942
-6995:0:4365
-6996:2:1665
-6997:2:1669
-6998:2:1670
-6999:2:1678
-7000:2:1679
-7001:2:1683
-7002:2:1684
-7003:2:1678
-7004:2:1679
-7005:2:1680
-7006:2:1692
-7007:2:1697
-7008:2:1701
-7009:2:1702
-7010:2:1709
-7011:2:1710
-7012:2:1721
-7013:2:1722
-7014:2:1723
-7015:2:1721
-7016:2:1722
-7017:2:1723
-7018:2:1734
-7019:2:1739
-7020:2:1740
-7021:0:4365
-7022:3:2943
-7023:0:4365
-7024:2:1752
-7025:0:4365
-7026:3:2942
-7027:0:4365
-7028:2:1754
-7029:0:4365
-7030:3:2943
-7031:0:4365
-7032:2:1755
-7033:2:1759
-7034:2:1760
-7035:2:1768
-7036:2:1769
-7037:2:1773
-7038:2:1774
-7039:2:1768
-7040:2:1769
-7041:2:1773
-7042:2:1774
-7043:2:1782
-7044:2:1787
-7045:2:1791
-7046:2:1792
-7047:2:1799
-7048:2:1800
-7049:2:1811
-7050:2:1812
-7051:2:1813
-7052:2:1811
-7053:2:1812
-7054:2:1813
-7055:2:1824
-7056:2:1829
-7057:2:1830
-7058:0:4365
-7059:2:1842
-7060:0:4365
-7061:3:2942
-7062:0:4365
-7063:2:1844
-7064:0:4365
-7065:3:2943
-7066:0:4365
-7067:2:1845
-7068:2:1849
-7069:2:1850
-7070:2:1858
-7071:2:1859
-7072:2:1863
-7073:2:1864
-7074:2:1858
-7075:2:1859
-7076:2:1863
-7077:2:1864
-7078:2:1872
-7079:2:1877
-7080:2:1881
-7081:2:1882
-7082:2:1889
-7083:2:1890
-7084:2:1901
-7085:2:1902
-7086:2:1903
-7087:2:1901
-7088:2:1902
-7089:2:1903
-7090:2:1914
-7091:2:1919
-7092:2:1920
-7093:0:4365
-7094:2:1932
-7095:0:4365
-7096:3:2942
-7097:0:4365
-7098:2:1934
-7099:0:4365
-7100:3:2943
-7101:0:4365
-7102:2:1935
-7103:0:4365
-7104:2:1936
-7105:0:4365
-7106:2:2129
-7107:0:4365
-7108:2:2130
-7109:0:4365
-7110:2:2134
-7111:0:4365
-7112:3:2942
-7113:0:4365
-7114:2:2136
-7115:0:4365
-7116:3:2943
-7117:0:4365
-7118:2:2137
-7119:2:2141
-7120:2:2142
-7121:2:2150
-7122:2:2151
-7123:2:2155
-7124:2:2156
-7125:2:2150
-7126:2:2151
-7127:2:2155
-7128:2:2156
-7129:2:2164
-7130:2:2169
-7131:2:2173
-7132:2:2174
-7133:2:2181
-7134:2:2182
-7135:2:2193
-7136:2:2194
-7137:2:2195
-7138:2:2193
-7139:2:2194
-7140:2:2195
-7141:2:2206
-7142:2:2211
-7143:2:2212
-7144:0:4365
-7145:2:2224
-7146:0:4365
-7147:3:2942
-7148:0:4365
-7149:2:2226
-7150:0:4365
-7151:3:2943
-7152:0:4365
-7153:2:2230
-7154:0:4365
-7155:3:2942
-7156:0:4365
-7157:2:2235
-7158:2:2239
-7159:2:2240
-7160:2:2248
-7161:2:2249
-7162:2:2253
-7163:2:2254
-7164:2:2248
-7165:2:2249
-7166:2:2250
-7167:2:2262
-7168:2:2267
-7169:2:2271
-7170:2:2272
-7171:2:2279
-7172:2:2280
-7173:2:2291
-7174:2:2292
-7175:2:2293
-7176:2:2291
-7177:2:2292
-7178:2:2293
-7179:2:2304
-7180:2:2309
-7181:2:2310
-7182:0:4365
-7183:3:2943
-7184:0:4365
-7185:2:2322
-7186:0:4365
-7187:2:1169
-7188:0:4365
-7189:3:2942
-7190:0:4365
-7191:2:1170
-7192:0:4365
-7193:3:2943
-7194:0:4365
-7195:3:2944
-7196:0:4365
-7197:3:2950
-7198:0:4365
-7199:3:2951
-7200:0:4365
-7201:3:2952
-7202:0:4365
-7203:3:2953
-7204:0:4365
-7205:3:2954
-7206:3:2958
-7207:3:2959
-7208:3:2967
-7209:3:2968
-7210:3:2972
-7211:3:2973
-7212:3:2967
-7213:3:2968
-7214:3:2972
-7215:3:2973
-7216:3:2981
-7217:3:2986
-7218:3:2990
-7219:3:2991
-7220:3:2998
-7221:3:2999
-7222:3:3010
-7223:3:3011
-7224:3:3012
-7225:3:3010
-7226:3:3011
-7227:3:3012
-7228:3:3023
-7229:3:3028
-7230:3:3029
-7231:0:4365
-7232:3:3041
-7233:0:4365
-7234:3:3042
-7235:0:4365
-7236:2:1173
-7237:0:4365
-7238:3:3043
-7239:0:4365
-7240:2:1179
-7241:0:4365
-7242:2:1180
-7243:0:4365
-7244:3:3042
-7245:0:4365
-7246:2:1181
-7247:2:1185
-7248:2:1186
-7249:2:1194
-7250:2:1195
-7251:2:1199
-7252:2:1200
-7253:2:1194
-7254:2:1195
-7255:2:1199
-7256:2:1200
-7257:2:1208
-7258:2:1213
-7259:2:1217
-7260:2:1218
-7261:2:1225
-7262:2:1226
-7263:2:1237
-7264:2:1238
-7265:2:1239
-7266:2:1237
-7267:2:1238
-7268:2:1239
-7269:2:1250
-7270:2:1255
-7271:2:1256
-7272:0:4365
-7273:3:3043
-7274:0:4365
-7275:2:1268
-7276:0:4365
-7277:3:3042
-7278:0:4365
-7279:2:1270
-7280:0:4365
-7281:3:3043
-7282:0:4365
-7283:2:1271
-7284:2:1275
-7285:2:1276
-7286:2:1284
-7287:2:1285
-7288:2:1289
-7289:2:1290
-7290:2:1284
-7291:2:1285
-7292:2:1289
-7293:2:1290
-7294:2:1298
-7295:2:1303
-7296:2:1307
-7297:2:1308
-7298:2:1315
-7299:2:1316
-7300:2:1327
-7301:2:1328
-7302:2:1329
-7303:2:1327
-7304:2:1328
-7305:2:1329
-7306:2:1340
-7307:2:1345
-7308:2:1346
-7309:0:4365
-7310:2:1358
-7311:0:4365
-7312:2:1360
-7313:0:4365
-7314:3:3042
-7315:0:4365
-7316:2:1361
-7317:0:4365
-7318:3:3043
-7319:0:4365
-7320:2:1362
-7321:2:1366
-7322:2:1367
-7323:2:1375
-7324:2:1376
-7325:2:1380
-7326:2:1381
-7327:2:1375
-7328:2:1376
-7329:2:1380
-7330:2:1381
-7331:2:1389
-7332:2:1394
-7333:2:1398
-7334:2:1399
-7335:2:1406
-7336:2:1407
-7337:2:1418
-7338:2:1419
-7339:2:1420
-7340:2:1418
-7341:2:1419
-7342:2:1420
-7343:2:1431
-7344:2:1436
-7345:2:1437
-7346:0:4365
-7347:2:1449
-7348:0:4365
-7349:3:3042
-7350:0:4365
-7351:2:1451
-7352:0:4365
-7353:3:3043
-7354:0:4365
-7355:2:1652
-7356:0:4365
-7357:2:1653
-7358:0:4365
-7359:2:1657
-7360:0:4365
-7361:2:1660
-7362:0:4365
-7363:3:3042
-7364:0:4365
-7365:2:1665
-7366:2:1669
-7367:2:1670
-7368:2:1678
-7369:2:1679
-7370:2:1683
-7371:2:1684
-7372:2:1678
-7373:2:1679
-7374:2:1680
-7375:2:1692
-7376:2:1697
-7377:2:1701
-7378:2:1702
-7379:2:1709
-7380:2:1710
-7381:2:1721
-7382:2:1722
-7383:2:1723
-7384:2:1721
-7385:2:1722
-7386:2:1723
-7387:2:1734
-7388:2:1739
-7389:2:1740
-7390:0:4365
-7391:3:3043
-7392:0:4365
-7393:2:1752
-7394:0:4365
-7395:3:3042
-7396:0:4365
-7397:2:1754
-7398:0:4365
-7399:3:3043
-7400:0:4365
-7401:2:1755
-7402:2:1759
-7403:2:1760
-7404:2:1768
-7405:2:1769
-7406:2:1773
-7407:2:1774
-7408:2:1768
-7409:2:1769
-7410:2:1773
-7411:2:1774
-7412:2:1782
-7413:2:1787
-7414:2:1791
-7415:2:1792
-7416:2:1799
-7417:2:1800
-7418:2:1811
-7419:2:1812
-7420:2:1813
-7421:2:1811
-7422:2:1812
-7423:2:1813
-7424:2:1824
-7425:2:1829
-7426:2:1830
-7427:0:4365
-7428:2:1842
-7429:0:4365
-7430:3:3042
-7431:0:4365
-7432:2:1844
-7433:0:4365
-7434:3:3043
-7435:0:4365
-7436:2:1845
-7437:2:1849
-7438:2:1850
-7439:2:1858
-7440:2:1859
-7441:2:1863
-7442:2:1864
-7443:2:1858
-7444:2:1859
-7445:2:1863
-7446:2:1864
-7447:2:1872
-7448:2:1877
-7449:2:1881
-7450:2:1882
-7451:2:1889
-7452:2:1890
-7453:2:1901
-7454:2:1902
-7455:2:1903
-7456:2:1901
-7457:2:1902
-7458:2:1903
-7459:2:1914
-7460:2:1919
-7461:2:1920
-7462:0:4365
-7463:2:1932
-7464:0:4365
-7465:3:3042
-7466:0:4365
-7467:2:1934
-7468:0:4365
-7469:3:3043
-7470:0:4365
-7471:2:1935
-7472:0:4365
-7473:2:1936
-7474:0:4365
-7475:2:2129
-7476:0:4365
-7477:2:2130
-7478:0:4365
-7479:2:2134
-7480:0:4365
-7481:3:3042
-7482:0:4365
-7483:2:2136
-7484:0:4365
-7485:3:3043
-7486:0:4365
-7487:2:2137
-7488:2:2141
-7489:2:2142
-7490:2:2150
-7491:2:2151
-7492:2:2155
-7493:2:2156
-7494:2:2150
-7495:2:2151
-7496:2:2155
-7497:2:2156
-7498:2:2164
-7499:2:2169
-7500:2:2173
-7501:2:2174
-7502:2:2181
-7503:2:2182
-7504:2:2193
-7505:2:2194
-7506:2:2195
-7507:2:2193
-7508:2:2194
-7509:2:2195
-7510:2:2206
-7511:2:2211
-7512:2:2212
-7513:0:4365
-7514:2:2224
-7515:0:4365
-7516:3:3042
-7517:0:4365
-7518:2:2226
-7519:0:4365
-7520:3:3043
-7521:0:4365
-7522:2:2230
-7523:0:4365
-7524:3:3042
-7525:0:4365
-7526:2:2235
-7527:2:2239
-7528:2:2240
-7529:2:2248
-7530:2:2249
-7531:2:2253
-7532:2:2254
-7533:2:2248
-7534:2:2249
-7535:2:2250
-7536:2:2262
-7537:2:2267
-7538:2:2271
-7539:2:2272
-7540:2:2279
-7541:2:2280
-7542:2:2291
-7543:2:2292
-7544:2:2293
-7545:2:2291
-7546:2:2292
-7547:2:2293
-7548:2:2304
-7549:2:2309
-7550:2:2310
-7551:0:4365
-7552:3:3043
-7553:0:4365
-7554:2:2322
-7555:0:4365
-7556:2:1169
-7557:0:4365
-7558:3:3042
-7559:0:4365
-7560:2:1170
-7561:0:4365
-7562:3:3043
-7563:0:4365
-7564:3:3044
-7565:0:4365
-7566:3:3257
-7567:0:4365
-7568:3:3265
-7569:0:4365
-7570:3:3266
-7571:3:3270
-7572:3:3271
-7573:3:3279
-7574:3:3280
-7575:3:3284
-7576:3:3285
-7577:3:3279
-7578:3:3280
-7579:3:3284
-7580:3:3285
-7581:3:3293
-7582:3:3298
-7583:3:3302
-7584:3:3303
-7585:3:3310
-7586:3:3311
-7587:3:3322
-7588:3:3323
-7589:3:3324
-7590:3:3322
-7591:3:3323
-7592:3:3324
-7593:3:3335
-7594:3:3340
-7595:3:3341
-7596:0:4365
-7597:3:3353
-7598:0:4365
-7599:3:3354
-7600:0:4365
-7601:2:1173
-7602:0:4365
-7603:3:3355
-7604:0:4365
-7605:2:1179
-7606:0:4365
-7607:2:1180
-7608:0:4365
-7609:3:3354
-7610:0:4365
-7611:2:1181
-7612:2:1185
-7613:2:1186
-7614:2:1194
-7615:2:1195
-7616:2:1199
-7617:2:1200
-7618:2:1194
-7619:2:1195
-7620:2:1199
-7621:2:1200
-7622:2:1208
-7623:2:1213
-7624:2:1217
-7625:2:1218
-7626:2:1225
-7627:2:1226
-7628:2:1237
-7629:2:1238
-7630:2:1239
-7631:2:1237
-7632:2:1238
-7633:2:1239
-7634:2:1250
-7635:2:1255
-7636:2:1256
-7637:0:4365
-7638:3:3355
-7639:0:4365
-7640:2:1268
-7641:0:4365
-7642:3:3354
-7643:0:4365
-7644:2:1270
-7645:0:4365
-7646:3:3355
-7647:0:4365
-7648:2:1271
-7649:2:1275
-7650:2:1276
-7651:2:1284
-7652:2:1285
-7653:2:1289
-7654:2:1290
-7655:2:1284
-7656:2:1285
-7657:2:1289
-7658:2:1290
-7659:2:1298
-7660:2:1303
-7661:2:1307
-7662:2:1308
-7663:2:1315
-7664:2:1316
-7665:2:1327
-7666:2:1328
-7667:2:1329
-7668:2:1327
-7669:2:1328
-7670:2:1329
-7671:2:1340
-7672:2:1345
-7673:2:1346
-7674:0:4365
-7675:2:1358
-7676:0:4365
-7677:2:1360
-7678:0:4365
-7679:3:3354
-7680:0:4365
-7681:2:1361
-7682:0:4365
-7683:3:3355
-7684:0:4365
-7685:2:1362
-7686:2:1366
-7687:2:1367
-7688:2:1375
-7689:2:1376
-7690:2:1380
-7691:2:1381
-7692:2:1375
-7693:2:1376
-7694:2:1380
-7695:2:1381
-7696:2:1389
-7697:2:1394
-7698:2:1398
-7699:2:1399
-7700:2:1406
-7701:2:1407
-7702:2:1418
-7703:2:1419
-7704:2:1420
-7705:2:1418
-7706:2:1419
-7707:2:1420
-7708:2:1431
-7709:2:1436
-7710:2:1437
-7711:0:4365
-7712:2:1449
-7713:0:4365
-7714:3:3354
-7715:0:4365
-7716:2:1451
-7717:0:4365
-7718:3:3355
-7719:0:4365
-7720:2:1652
-7721:0:4365
-7722:2:1653
-7723:0:4365
-7724:2:1657
-7725:0:4365
-7726:2:1660
-7727:0:4365
-7728:3:3354
-7729:0:4365
-7730:2:1665
-7731:2:1669
-7732:2:1670
-7733:2:1678
-7734:2:1679
-7735:2:1683
-7736:2:1684
-7737:2:1678
-7738:2:1679
-7739:2:1680
-7740:2:1692
-7741:2:1697
-7742:2:1701
-7743:2:1702
-7744:2:1709
-7745:2:1710
-7746:2:1721
-7747:2:1722
-7748:2:1723
-7749:2:1721
-7750:2:1722
-7751:2:1723
-7752:2:1734
-7753:2:1739
-7754:2:1740
-7755:0:4365
-7756:3:3355
-7757:0:4365
-7758:2:1752
-7759:0:4365
-7760:3:3354
-7761:0:4365
-7762:2:1754
-7763:0:4365
-7764:3:3355
-7765:0:4365
-7766:2:1755
-7767:2:1759
-7768:2:1760
-7769:2:1768
-7770:2:1769
-7771:2:1773
-7772:2:1774
-7773:2:1768
-7774:2:1769
-7775:2:1773
-7776:2:1774
-7777:2:1782
-7778:2:1787
-7779:2:1791
-7780:2:1792
-7781:2:1799
-7782:2:1800
-7783:2:1811
-7784:2:1812
-7785:2:1813
-7786:2:1811
-7787:2:1812
-7788:2:1813
-7789:2:1824
-7790:2:1829
-7791:2:1830
-7792:0:4365
-7793:2:1842
-7794:0:4365
-7795:3:3354
-7796:0:4365
-7797:2:1844
-7798:0:4365
-7799:3:3355
-7800:0:4365
-7801:2:1845
-7802:2:1849
-7803:2:1850
-7804:2:1858
-7805:2:1859
-7806:2:1863
-7807:2:1864
-7808:2:1858
-7809:2:1859
-7810:2:1863
-7811:2:1864
-7812:2:1872
-7813:2:1877
-7814:2:1881
-7815:2:1882
-7816:2:1889
-7817:2:1890
-7818:2:1901
-7819:2:1902
-7820:2:1903
-7821:2:1901
-7822:2:1902
-7823:2:1903
-7824:2:1914
-7825:2:1919
-7826:2:1920
-7827:0:4365
-7828:2:1932
-7829:0:4365
-7830:3:3354
-7831:0:4365
-7832:2:1934
-7833:0:4365
-7834:3:3355
-7835:0:4365
-7836:2:1935
-7837:0:4365
-7838:2:1936
-7839:0:4365
-7840:2:2129
-7841:0:4365
-7842:2:2130
-7843:0:4365
-7844:2:2134
-7845:0:4365
-7846:3:3354
-7847:0:4365
-7848:2:2136
-7849:0:4365
-7850:3:3355
-7851:0:4365
-7852:2:2137
-7853:2:2141
-7854:2:2142
-7855:2:2150
-7856:2:2151
-7857:2:2155
-7858:2:2156
-7859:2:2150
-7860:2:2151
-7861:2:2155
-7862:2:2156
-7863:2:2164
-7864:2:2169
-7865:2:2173
-7866:2:2174
-7867:2:2181
-7868:2:2182
-7869:2:2193
-7870:2:2194
-7871:2:2195
-7872:2:2193
-7873:2:2194
-7874:2:2195
-7875:2:2206
-7876:2:2211
-7877:2:2212
-7878:0:4365
-7879:2:2224
-7880:0:4365
-7881:3:3354
-7882:0:4365
-7883:2:2226
-7884:0:4365
-7885:3:3355
-7886:0:4365
-7887:2:2230
-7888:0:4365
-7889:3:3354
-7890:0:4365
-7891:2:2235
-7892:2:2239
-7893:2:2240
-7894:2:2248
-7895:2:2249
-7896:2:2253
-7897:2:2254
-7898:2:2248
-7899:2:2249
-7900:2:2250
-7901:2:2262
-7902:2:2267
-7903:2:2271
-7904:2:2272
-7905:2:2279
-7906:2:2280
-7907:2:2291
-7908:2:2292
-7909:2:2293
-7910:2:2291
-7911:2:2292
-7912:2:2293
-7913:2:2304
-7914:2:2309
-7915:2:2310
-7916:0:4365
-7917:3:3355
-7918:0:4365
-7919:2:2322
-7920:0:4365
-7921:2:1169
-7922:0:4365
-7923:3:3354
-7924:0:4365
-7925:2:1170
-7926:0:4365
-7927:3:3355
-7928:0:4365
-7929:3:3356
-7930:0:4365
-7931:3:3366
-7932:0:4365
-7933:3:2951
-7934:0:4365
-7935:3:2952
-7936:0:4365
-7937:3:2953
-7938:0:4365
-7939:3:2954
-7940:3:2958
-7941:3:2959
-7942:3:2967
-7943:3:2968
-7944:3:2972
-7945:3:2973
-7946:3:2967
-7947:3:2968
-7948:3:2972
-7949:3:2973
-7950:3:2981
-7951:3:2986
-7952:3:2990
-7953:3:2991
-7954:3:2998
-7955:3:2999
-7956:3:3010
-7957:3:3011
-7958:3:3012
-7959:3:3010
-7960:3:3011
-7961:3:3012
-7962:3:3023
-7963:3:3028
-7964:3:3029
-7965:0:4365
-7966:3:3041
-7967:0:4365
-7968:3:3042
-7969:0:4365
-7970:2:1173
-7971:0:4365
-7972:3:3043
-7973:0:4365
-7974:2:1179
-7975:0:4365
-7976:2:1180
-7977:0:4365
-7978:3:3042
-7979:0:4365
-7980:2:1181
-7981:2:1185
-7982:2:1186
-7983:2:1194
-7984:2:1195
-7985:2:1199
-7986:2:1200
-7987:2:1194
-7988:2:1195
-7989:2:1199
-7990:2:1200
-7991:2:1208
-7992:2:1213
-7993:2:1217
-7994:2:1218
-7995:2:1225
-7996:2:1226
-7997:2:1237
-7998:2:1238
-7999:2:1239
-8000:2:1237
-8001:2:1238
-8002:2:1239
-8003:2:1250
-8004:2:1255
-8005:2:1256
-8006:0:4365
-8007:3:3043
-8008:0:4365
-8009:2:1268
-8010:0:4365
-8011:3:3042
-8012:0:4365
-8013:2:1270
-8014:0:4365
-8015:3:3043
-8016:0:4365
-8017:2:1271
-8018:2:1275
-8019:2:1276
-8020:2:1284
-8021:2:1285
-8022:2:1289
-8023:2:1290
-8024:2:1284
-8025:2:1285
-8026:2:1289
-8027:2:1290
-8028:2:1298
-8029:2:1303
-8030:2:1307
-8031:2:1308
-8032:2:1315
-8033:2:1316
-8034:2:1327
-8035:2:1328
-8036:2:1329
-8037:2:1327
-8038:2:1328
-8039:2:1329
-8040:2:1340
-8041:2:1345
-8042:2:1346
-8043:0:4365
-8044:2:1358
-8045:0:4365
-8046:2:1360
-8047:0:4365
-8048:3:3042
-8049:0:4365
-8050:2:1361
-8051:0:4365
-8052:3:3043
-8053:0:4365
-8054:2:1362
-8055:2:1366
-8056:2:1367
-8057:2:1375
-8058:2:1376
-8059:2:1380
-8060:2:1381
-8061:2:1375
-8062:2:1376
-8063:2:1380
-8064:2:1381
-8065:2:1389
-8066:2:1394
-8067:2:1398
-8068:2:1399
-8069:2:1406
-8070:2:1407
-8071:2:1418
-8072:2:1419
-8073:2:1420
-8074:2:1418
-8075:2:1419
-8076:2:1420
-8077:2:1431
-8078:2:1436
-8079:2:1437
-8080:0:4365
-8081:2:1449
-8082:0:4365
-8083:3:3042
-8084:0:4365
-8085:2:1451
-8086:0:4365
-8087:3:3043
-8088:0:4365
-8089:2:1652
-8090:0:4365
-8091:2:1653
-8092:0:4365
-8093:2:1657
-8094:0:4365
-8095:2:1660
-8096:0:4365
-8097:3:3042
-8098:0:4365
-8099:2:1665
-8100:2:1669
-8101:2:1670
-8102:2:1678
-8103:2:1679
-8104:2:1683
-8105:2:1684
-8106:2:1678
-8107:2:1679
-8108:2:1680
-8109:2:1692
-8110:2:1697
-8111:2:1701
-8112:2:1702
-8113:2:1709
-8114:2:1710
-8115:2:1721
-8116:2:1722
-8117:2:1723
-8118:2:1721
-8119:2:1722
-8120:2:1723
-8121:2:1734
-8122:2:1739
-8123:2:1740
-8124:0:4365
-8125:3:3043
-8126:0:4365
-8127:2:1752
-8128:0:4365
-8129:3:3042
-8130:0:4365
-8131:2:1754
-8132:0:4365
-8133:3:3043
-8134:0:4365
-8135:2:1755
-8136:2:1759
-8137:2:1760
-8138:2:1768
-8139:2:1769
-8140:2:1773
-8141:2:1774
-8142:2:1768
-8143:2:1769
-8144:2:1773
-8145:2:1774
-8146:2:1782
-8147:2:1787
-8148:2:1791
-8149:2:1792
-8150:2:1799
-8151:2:1800
-8152:2:1811
-8153:2:1812
-8154:2:1813
-8155:2:1811
-8156:2:1812
-8157:2:1813
-8158:2:1824
-8159:2:1829
-8160:2:1830
-8161:0:4365
-8162:2:1842
-8163:0:4365
-8164:3:3042
-8165:0:4365
-8166:2:1844
-8167:0:4365
-8168:3:3043
-8169:0:4365
-8170:2:1845
-8171:2:1849
-8172:2:1850
-8173:2:1858
-8174:2:1859
-8175:2:1863
-8176:2:1864
-8177:2:1858
-8178:2:1859
-8179:2:1863
-8180:2:1864
-8181:2:1872
-8182:2:1877
-8183:2:1881
-8184:2:1882
-8185:2:1889
-8186:2:1890
-8187:2:1901
-8188:2:1902
-8189:2:1903
-8190:2:1901
-8191:2:1902
-8192:2:1903
-8193:2:1914
-8194:2:1919
-8195:2:1920
-8196:0:4365
-8197:2:1932
-8198:0:4365
-8199:3:3042
-8200:0:4365
-8201:2:1934
-8202:0:4365
-8203:3:3043
-8204:0:4365
-8205:2:1935
-8206:0:4365
-8207:2:1936
-8208:0:4365
-8209:2:2129
-8210:0:4365
-8211:2:2130
-8212:0:4365
-8213:2:2134
-8214:0:4365
-8215:3:3042
-8216:0:4365
-8217:2:2136
-8218:0:4365
-8219:3:3043
-8220:0:4365
-8221:2:2137
-8222:2:2141
-8223:2:2142
-8224:2:2150
-8225:2:2151
-8226:2:2155
-8227:2:2156
-8228:2:2150
-8229:2:2151
-8230:2:2155
-8231:2:2156
-8232:2:2164
-8233:2:2169
-8234:2:2173
-8235:2:2174
-8236:2:2181
-8237:2:2182
-8238:2:2193
-8239:2:2194
-8240:2:2195
-8241:2:2193
-8242:2:2194
-8243:2:2195
-8244:2:2206
-8245:2:2211
-8246:2:2212
-8247:0:4365
-8248:2:2224
-8249:0:4365
-8250:3:3042
-8251:0:4365
-8252:2:2226
-8253:0:4365
-8254:3:3043
-8255:0:4365
-8256:2:2230
-8257:0:4365
-8258:3:3042
-8259:0:4365
-8260:2:2235
-8261:2:2239
-8262:2:2240
-8263:2:2248
-8264:2:2249
-8265:2:2253
-8266:2:2254
-8267:2:2248
-8268:2:2249
-8269:2:2250
-8270:2:2262
-8271:2:2267
-8272:2:2271
-8273:2:2272
-8274:2:2279
-8275:2:2280
-8276:2:2291
-8277:2:2292
-8278:2:2293
-8279:2:2291
-8280:2:2292
-8281:2:2293
-8282:2:2304
-8283:2:2309
-8284:2:2310
-8285:0:4365
-8286:3:3043
-8287:0:4365
-8288:2:2322
-8289:0:4365
-8290:2:1169
-8291:0:4365
-8292:3:3042
-8293:0:4365
-8294:2:1170
-8295:0:4365
-8296:3:3043
-8297:0:4365
-8298:3:3044
-8299:0:4365
-8300:3:3257
-8301:0:4365
-8302:3:3362
-8303:0:4365
-8304:3:3363
-8305:0:4365
-8306:3:3367
-8307:0:4365
-8308:3:3373
-8309:3:3377
-8310:3:3378
-8311:3:3386
-8312:3:3387
-8313:3:3391
-8314:3:3392
-8315:3:3386
-8316:3:3387
-8317:3:3391
-8318:3:3392
-8319:3:3400
-8320:3:3405
-8321:3:3409
-8322:3:3410
-8323:3:3417
-8324:3:3418
-8325:3:3429
-8326:3:3430
-8327:3:3431
-8328:3:3429
-8329:3:3430
-8330:3:3431
-8331:3:3442
-8332:3:3447
-8333:3:3448
-8334:0:4365
-8335:3:3460
-8336:0:4365
-8337:3:3461
-8338:0:4365
-8339:2:1173
-8340:0:4365
-8341:3:3462
-8342:0:4365
-8343:2:1179
-8344:0:4365
-8345:2:1180
-8346:0:4365
-8347:3:3461
-8348:0:4365
-8349:2:1181
-8350:2:1185
-8351:2:1186
-8352:2:1194
-8353:2:1195
-8354:2:1199
-8355:2:1200
-8356:2:1194
-8357:2:1195
-8358:2:1199
-8359:2:1200
-8360:2:1208
-8361:2:1213
-8362:2:1217
-8363:2:1218
-8364:2:1225
-8365:2:1226
-8366:2:1237
-8367:2:1238
-8368:2:1239
-8369:2:1237
-8370:2:1238
-8371:2:1239
-8372:2:1250
-8373:2:1255
-8374:2:1256
-8375:0:4365
-8376:3:3462
-8377:0:4365
-8378:2:1268
-8379:0:4365
-8380:3:3461
-8381:0:4365
-8382:2:1270
-8383:0:4365
-8384:3:3462
-8385:0:4365
-8386:2:1271
-8387:2:1275
-8388:2:1276
-8389:2:1284
-8390:2:1285
-8391:2:1289
-8392:2:1290
-8393:2:1284
-8394:2:1285
-8395:2:1289
-8396:2:1290
-8397:2:1298
-8398:2:1303
-8399:2:1307
-8400:2:1308
-8401:2:1315
-8402:2:1316
-8403:2:1327
-8404:2:1328
-8405:2:1329
-8406:2:1327
-8407:2:1328
-8408:2:1329
-8409:2:1340
-8410:2:1345
-8411:2:1346
-8412:0:4365
-8413:2:1358
-8414:0:4365
-8415:2:1360
-8416:0:4365
-8417:3:3461
-8418:0:4365
-8419:2:1361
-8420:0:4365
-8421:3:3462
-8422:0:4365
-8423:2:1362
-8424:2:1366
-8425:2:1367
-8426:2:1375
-8427:2:1376
-8428:2:1380
-8429:2:1381
-8430:2:1375
-8431:2:1376
-8432:2:1380
-8433:2:1381
-8434:2:1389
-8435:2:1394
-8436:2:1398
-8437:2:1399
-8438:2:1406
-8439:2:1407
-8440:2:1418
-8441:2:1419
-8442:2:1420
-8443:2:1418
-8444:2:1419
-8445:2:1420
-8446:2:1431
-8447:2:1436
-8448:2:1437
-8449:0:4365
-8450:2:1449
-8451:0:4365
-8452:3:3461
-8453:0:4365
-8454:2:1451
-8455:0:4365
-8456:3:3462
-8457:0:4365
-8458:2:1652
-8459:0:4365
-8460:2:1653
-8461:0:4365
-8462:2:1657
-8463:0:4365
-8464:2:1660
-8465:0:4365
-8466:3:3461
-8467:0:4365
-8468:2:1665
-8469:2:1669
-8470:2:1670
-8471:2:1678
-8472:2:1679
-8473:2:1683
-8474:2:1684
-8475:2:1678
-8476:2:1679
-8477:2:1680
-8478:2:1692
-8479:2:1697
-8480:2:1701
-8481:2:1702
-8482:2:1709
-8483:2:1710
-8484:2:1721
-8485:2:1722
-8486:2:1723
-8487:2:1721
-8488:2:1722
-8489:2:1723
-8490:2:1734
-8491:2:1739
-8492:2:1740
-8493:0:4365
-8494:3:3462
-8495:0:4365
-8496:2:1752
-8497:0:4365
-8498:3:3461
-8499:0:4365
-8500:2:1754
-8501:0:4365
-8502:3:3462
-8503:0:4365
-8504:2:1755
-8505:2:1759
-8506:2:1760
-8507:2:1768
-8508:2:1769
-8509:2:1773
-8510:2:1774
-8511:2:1768
-8512:2:1769
-8513:2:1773
-8514:2:1774
-8515:2:1782
-8516:2:1787
-8517:2:1791
-8518:2:1792
-8519:2:1799
-8520:2:1800
-8521:2:1811
-8522:2:1812
-8523:2:1813
-8524:2:1811
-8525:2:1812
-8526:2:1813
-8527:2:1824
-8528:2:1829
-8529:2:1830
-8530:0:4365
-8531:2:1842
-8532:0:4365
-8533:3:3461
-8534:0:4365
-8535:2:1844
-8536:0:4365
-8537:3:3462
-8538:0:4365
-8539:2:1845
-8540:2:1849
-8541:2:1850
-8542:2:1858
-8543:2:1859
-8544:2:1863
-8545:2:1864
-8546:2:1858
-8547:2:1859
-8548:2:1863
-8549:2:1864
-8550:2:1872
-8551:2:1877
-8552:2:1881
-8553:2:1882
-8554:2:1889
-8555:2:1890
-8556:2:1901
-8557:2:1902
-8558:2:1903
-8559:2:1901
-8560:2:1902
-8561:2:1903
-8562:2:1914
-8563:2:1919
-8564:2:1920
-8565:0:4365
-8566:2:1932
-8567:0:4365
-8568:3:3461
-8569:0:4365
-8570:2:1934
-8571:0:4365
-8572:3:3462
-8573:0:4365
-8574:2:1935
-8575:0:4365
-8576:2:1936
-8577:0:4365
-8578:2:2129
-8579:0:4365
-8580:2:2130
-8581:0:4365
-8582:2:2134
-8583:0:4365
-8584:3:3461
-8585:0:4365
-8586:2:2136
-8587:0:4365
-8588:3:3462
-8589:0:4365
-8590:2:2137
-8591:2:2141
-8592:2:2142
-8593:2:2150
-8594:2:2151
-8595:2:2155
-8596:2:2156
-8597:2:2150
-8598:2:2151
-8599:2:2155
-8600:2:2156
-8601:2:2164
-8602:2:2169
-8603:2:2173
-8604:2:2174
-8605:2:2181
-8606:2:2182
-8607:2:2193
-8608:2:2194
-8609:2:2195
-8610:2:2193
-8611:2:2194
-8612:2:2195
-8613:2:2206
-8614:2:2211
-8615:2:2212
-8616:0:4365
-8617:2:2224
-8618:0:4365
-8619:3:3461
-8620:0:4365
-8621:2:2226
-8622:0:4365
-8623:3:3462
-8624:0:4365
-8625:2:2230
-8626:0:4365
-8627:3:3461
-8628:0:4365
-8629:2:2235
-8630:2:2239
-8631:2:2240
-8632:2:2248
-8633:2:2249
-8634:2:2253
-8635:2:2254
-8636:2:2248
-8637:2:2249
-8638:2:2250
-8639:2:2262
-8640:2:2267
-8641:2:2271
-8642:2:2272
-8643:2:2279
-8644:2:2280
-8645:2:2291
-8646:2:2292
-8647:2:2293
-8648:2:2291
-8649:2:2292
-8650:2:2293
-8651:2:2304
-8652:2:2309
-8653:2:2310
-8654:0:4365
-8655:3:3462
-8656:0:4365
-8657:2:2322
-8658:0:4365
-8659:2:1169
-8660:0:4365
-8661:3:3461
-8662:0:4365
-8663:2:1170
-8664:0:4365
-8665:3:3462
-8666:0:4365
-8667:3:3463
-8668:0:4365
-8669:3:3469
-8670:0:4365
-8671:3:3470
-8672:3:3474
-8673:3:3475
-8674:3:3483
-8675:3:3484
-8676:3:3488
-8677:3:3489
-8678:3:3483
-8679:3:3484
-8680:3:3488
-8681:3:3489
-8682:3:3497
-8683:3:3502
-8684:3:3506
-8685:3:3507
-8686:3:3514
-8687:3:3515
-8688:3:3526
-8689:3:3527
-8690:3:3528
-8691:3:3526
-8692:3:3527
-8693:3:3528
-8694:3:3539
-8695:3:3544
-8696:3:3545
-8697:0:4365
-8698:3:3557
-8699:0:4365
-8700:3:3558
-8701:0:4365
-8702:2:1173
-8703:0:4365
-8704:3:3559
-8705:0:4365
-8706:2:1179
-8707:0:4365
-8708:2:1180
-8709:0:4365
-8710:3:3558
-8711:0:4365
-8712:2:1181
-8713:2:1185
-8714:2:1186
-8715:2:1194
-8716:2:1195
-8717:2:1199
-8718:2:1200
-8719:2:1194
-8720:2:1195
-8721:2:1199
-8722:2:1200
-8723:2:1208
-8724:2:1213
-8725:2:1217
-8726:2:1218
-8727:2:1225
-8728:2:1226
-8729:2:1237
-8730:2:1238
-8731:2:1239
-8732:2:1237
-8733:2:1238
-8734:2:1239
-8735:2:1250
-8736:2:1255
-8737:2:1256
-8738:0:4365
-8739:3:3559
-8740:0:4365
-8741:2:1268
-8742:0:4365
-8743:3:3558
-8744:0:4365
-8745:2:1270
-8746:0:4365
-8747:3:3559
-8748:0:4365
-8749:2:1271
-8750:2:1275
-8751:2:1276
-8752:2:1284
-8753:2:1285
-8754:2:1289
-8755:2:1290
-8756:2:1284
-8757:2:1285
-8758:2:1289
-8759:2:1290
-8760:2:1298
-8761:2:1303
-8762:2:1307
-8763:2:1308
-8764:2:1315
-8765:2:1316
-8766:2:1327
-8767:2:1328
-8768:2:1329
-8769:2:1327
-8770:2:1328
-8771:2:1329
-8772:2:1340
-8773:2:1345
-8774:2:1346
-8775:0:4365
-8776:2:1358
-8777:0:4365
-8778:2:1360
-8779:0:4365
-8780:3:3558
-8781:0:4365
-8782:2:1361
-8783:0:4365
-8784:3:3559
-8785:0:4365
-8786:2:1362
-8787:2:1366
-8788:2:1367
-8789:2:1375
-8790:2:1376
-8791:2:1380
-8792:2:1381
-8793:2:1375
-8794:2:1376
-8795:2:1380
-8796:2:1381
-8797:2:1389
-8798:2:1394
-8799:2:1398
-8800:2:1399
-8801:2:1406
-8802:2:1407
-8803:2:1418
-8804:2:1419
-8805:2:1420
-8806:2:1418
-8807:2:1419
-8808:2:1420
-8809:2:1431
-8810:2:1436
-8811:2:1437
-8812:0:4365
-8813:2:1449
-8814:0:4365
-8815:3:3558
-8816:0:4365
-8817:2:1451
-8818:0:4365
-8819:3:3559
-8820:0:4365
-8821:2:1652
-8822:0:4365
-8823:2:1653
-8824:0:4365
-8825:2:1657
-8826:0:4365
-8827:2:1660
-8828:0:4365
-8829:3:3558
-8830:0:4365
-8831:2:1665
-8832:2:1669
-8833:2:1670
-8834:2:1678
-8835:2:1679
-8836:2:1683
-8837:2:1684
-8838:2:1678
-8839:2:1679
-8840:2:1680
-8841:2:1692
-8842:2:1697
-8843:2:1701
-8844:2:1702
-8845:2:1709
-8846:2:1710
-8847:2:1721
-8848:2:1722
-8849:2:1723
-8850:2:1721
-8851:2:1722
-8852:2:1723
-8853:2:1734
-8854:2:1739
-8855:2:1740
-8856:0:4365
-8857:3:3559
-8858:0:4365
-8859:2:1752
-8860:0:4365
-8861:3:3558
-8862:0:4365
-8863:2:1754
-8864:0:4365
-8865:3:3559
-8866:0:4365
-8867:2:1755
-8868:2:1759
-8869:2:1760
-8870:2:1768
-8871:2:1769
-8872:2:1773
-8873:2:1774
-8874:2:1768
-8875:2:1769
-8876:2:1773
-8877:2:1774
-8878:2:1782
-8879:2:1787
-8880:2:1791
-8881:2:1792
-8882:2:1799
-8883:2:1800
-8884:2:1811
-8885:2:1812
-8886:2:1813
-8887:2:1811
-8888:2:1812
-8889:2:1813
-8890:2:1824
-8891:2:1829
-8892:2:1830
-8893:0:4365
-8894:2:1842
-8895:0:4365
-8896:3:3558
-8897:0:4365
-8898:2:1844
-8899:0:4365
-8900:3:3559
-8901:0:4365
-8902:2:1845
-8903:2:1849
-8904:2:1850
-8905:2:1858
-8906:2:1859
-8907:2:1863
-8908:2:1864
-8909:2:1858
-8910:2:1859
-8911:2:1863
-8912:2:1864
-8913:2:1872
-8914:2:1877
-8915:2:1881
-8916:2:1882
-8917:2:1889
-8918:2:1890
-8919:2:1901
-8920:2:1902
-8921:2:1903
-8922:2:1901
-8923:2:1902
-8924:2:1903
-8925:2:1914
-8926:2:1919
-8927:2:1920
-8928:0:4365
-8929:2:1932
-8930:0:4365
-8931:3:3558
-8932:0:4365
-8933:2:1934
-8934:0:4365
-8935:3:3559
-8936:0:4365
-8937:2:1935
-8938:0:4365
-8939:2:1936
-8940:0:4365
-8941:2:2129
-8942:0:4365
-8943:2:2130
-8944:0:4365
-8945:2:2134
-8946:0:4365
-8947:3:3558
-8948:0:4365
-8949:2:2136
-8950:0:4365
-8951:3:3559
-8952:0:4365
-8953:2:2137
-8954:2:2141
-8955:2:2142
-8956:2:2150
-8957:2:2151
-8958:2:2155
-8959:2:2156
-8960:2:2150
-8961:2:2151
-8962:2:2155
-8963:2:2156
-8964:2:2164
-8965:2:2169
-8966:2:2173
-8967:2:2174
-8968:2:2181
-8969:2:2182
-8970:2:2193
-8971:2:2194
-8972:2:2195
-8973:2:2193
-8974:2:2194
-8975:2:2195
-8976:2:2206
-8977:2:2211
-8978:2:2212
-8979:0:4365
-8980:2:2224
-8981:0:4365
-8982:3:3558
-8983:0:4365
-8984:2:2226
-8985:0:4365
-8986:3:3559
-8987:0:4365
-8988:2:2230
-8989:0:4365
-8990:3:3558
-8991:0:4365
-8992:2:2235
-8993:2:2239
-8994:2:2240
-8995:2:2248
-8996:2:2249
-8997:2:2253
-8998:2:2254
-8999:2:2248
-9000:2:2249
-9001:2:2250
-9002:2:2262
-9003:2:2267
-9004:2:2271
-9005:2:2272
-9006:2:2279
-9007:2:2280
-9008:2:2291
-9009:2:2292
-9010:2:2293
-9011:2:2291
-9012:2:2292
-9013:2:2293
-9014:2:2304
-9015:2:2309
-9016:2:2310
-9017:0:4365
-9018:3:3559
-9019:0:4365
-9020:2:2322
-9021:0:4365
-9022:2:1169
-9023:0:4365
-9024:3:3558
-9025:0:4365
-9026:2:1170
-9027:0:4365
-9028:3:3559
-9029:0:4365
-9030:3:3560
-9031:0:4365
-9032:3:3566
-9033:0:4365
-9034:3:3569
-9035:3:3570
-9036:3:3582
-9037:3:3583
-9038:3:3587
-9039:3:3588
-9040:3:3582
-9041:3:3583
-9042:3:3587
-9043:3:3588
-9044:3:3596
-9045:3:3601
-9046:3:3605
-9047:3:3606
-9048:3:3613
-9049:3:3614
-9050:3:3625
-9051:3:3626
-9052:3:3627
-9053:3:3625
-9054:3:3626
-9055:3:3627
-9056:3:3638
-9057:3:3643
-9058:3:3644
-9059:0:4365
-9060:3:3656
-9061:0:4365
-9062:3:3657
-9063:0:4365
-9064:2:1173
-9065:0:4365
-9066:3:3658
-9067:0:4365
-9068:2:1179
-9069:0:4365
-9070:2:1180
-9071:0:4365
-9072:3:3657
-9073:0:4365
-9074:2:1181
-9075:2:1185
-9076:2:1186
-9077:2:1194
-9078:2:1195
-9079:2:1199
-9080:2:1200
-9081:2:1194
-9082:2:1195
-9083:2:1199
-9084:2:1200
-9085:2:1208
-9086:2:1213
-9087:2:1217
-9088:2:1218
-9089:2:1225
-9090:2:1226
-9091:2:1237
-9092:2:1238
-9093:2:1239
-9094:2:1237
-9095:2:1238
-9096:2:1239
-9097:2:1250
-9098:2:1255
-9099:2:1256
-9100:0:4365
-9101:3:3658
-9102:0:4365
-9103:2:1268
-9104:0:4365
-9105:3:3657
-9106:0:4365
-9107:2:1270
-9108:0:4365
-9109:3:3658
-9110:0:4365
-9111:2:1271
-9112:2:1275
-9113:2:1276
-9114:2:1284
-9115:2:1285
-9116:2:1289
-9117:2:1290
-9118:2:1284
-9119:2:1285
-9120:2:1289
-9121:2:1290
-9122:2:1298
-9123:2:1303
-9124:2:1307
-9125:2:1308
-9126:2:1315
-9127:2:1316
-9128:2:1327
-9129:2:1328
-9130:2:1329
-9131:2:1327
-9132:2:1328
-9133:2:1329
-9134:2:1340
-9135:2:1345
-9136:2:1346
-9137:0:4365
-9138:2:1358
-9139:0:4365
-9140:2:1360
-9141:0:4365
-9142:3:3657
-9143:0:4365
-9144:2:1361
-9145:0:4365
-9146:3:3658
-9147:0:4365
-9148:2:1362
-9149:2:1366
-9150:2:1367
-9151:2:1375
-9152:2:1376
-9153:2:1380
-9154:2:1381
-9155:2:1375
-9156:2:1376
-9157:2:1380
-9158:2:1381
-9159:2:1389
-9160:2:1394
-9161:2:1398
-9162:2:1399
-9163:2:1406
-9164:2:1407
-9165:2:1418
-9166:2:1419
-9167:2:1420
-9168:2:1418
-9169:2:1419
-9170:2:1420
-9171:2:1431
-9172:2:1436
-9173:2:1437
-9174:0:4365
-9175:2:1449
-9176:0:4365
-9177:3:3657
-9178:0:4365
-9179:2:1451
-9180:0:4365
-9181:3:3658
-9182:0:4365
-9183:2:1652
-9184:0:4365
-9185:2:1653
-9186:0:4365
-9187:2:1657
-9188:0:4365
-9189:2:1660
-9190:0:4365
-9191:3:3657
-9192:0:4365
-9193:2:1665
-9194:2:1669
-9195:2:1670
-9196:2:1678
-9197:2:1679
-9198:2:1683
-9199:2:1684
-9200:2:1678
-9201:2:1679
-9202:2:1680
-9203:2:1692
-9204:2:1697
-9205:2:1701
-9206:2:1702
-9207:2:1709
-9208:2:1710
-9209:2:1721
-9210:2:1722
-9211:2:1723
-9212:2:1721
-9213:2:1722
-9214:2:1723
-9215:2:1734
-9216:2:1739
-9217:2:1740
-9218:0:4365
-9219:3:3658
-9220:0:4365
-9221:2:1752
-9222:0:4365
-9223:3:3657
-9224:0:4365
-9225:2:1754
-9226:0:4365
-9227:3:3658
-9228:0:4365
-9229:2:1755
-9230:2:1759
-9231:2:1760
-9232:2:1768
-9233:2:1769
-9234:2:1773
-9235:2:1774
-9236:2:1768
-9237:2:1769
-9238:2:1773
-9239:2:1774
-9240:2:1782
-9241:2:1787
-9242:2:1791
-9243:2:1792
-9244:2:1799
-9245:2:1800
-9246:2:1811
-9247:2:1812
-9248:2:1813
-9249:2:1811
-9250:2:1812
-9251:2:1813
-9252:2:1824
-9253:2:1829
-9254:2:1830
-9255:0:4365
-9256:2:1842
-9257:0:4365
-9258:3:3657
-9259:0:4365
-9260:2:1844
-9261:0:4365
-9262:3:3658
-9263:0:4365
-9264:2:1845
-9265:2:1849
-9266:2:1850
-9267:2:1858
-9268:2:1859
-9269:2:1863
-9270:2:1864
-9271:2:1858
-9272:2:1859
-9273:2:1863
-9274:2:1864
-9275:2:1872
-9276:2:1877
-9277:2:1881
-9278:2:1882
-9279:2:1889
-9280:2:1890
-9281:2:1901
-9282:2:1902
-9283:2:1903
-9284:2:1901
-9285:2:1902
-9286:2:1903
-9287:2:1914
-9288:2:1919
-9289:2:1920
-9290:0:4365
-9291:2:1932
-9292:0:4365
-9293:3:3657
-9294:0:4365
-9295:2:1934
-9296:0:4365
-9297:3:3658
-9298:0:4365
-9299:2:1935
-9300:0:4365
-9301:2:1936
-9302:0:4365
-9303:2:2129
-9304:0:4365
-9305:2:2130
-9306:0:4365
-9307:2:2134
-9308:0:4365
-9309:3:3657
-9310:0:4365
-9311:2:2136
-9312:0:4365
-9313:3:3658
-9314:0:4365
-9315:2:2137
-9316:2:2141
-9317:2:2142
-9318:2:2150
-9319:2:2151
-9320:2:2155
-9321:2:2156
-9322:2:2150
-9323:2:2151
-9324:2:2155
-9325:2:2156
-9326:2:2164
-9327:2:2169
-9328:2:2173
-9329:2:2174
-9330:2:2181
-9331:2:2182
-9332:2:2193
-9333:2:2194
-9334:2:2195
-9335:2:2193
-9336:2:2194
-9337:2:2195
-9338:2:2206
-9339:2:2211
-9340:2:2212
-9341:0:4365
-9342:2:2224
-9343:0:4365
-9344:3:3657
-9345:0:4365
-9346:2:2226
-9347:0:4365
-9348:3:3658
-9349:0:4365
-9350:2:2230
-9351:0:4365
-9352:3:3657
-9353:0:4365
-9354:2:2235
-9355:2:2239
-9356:2:2240
-9357:2:2248
-9358:2:2249
-9359:2:2253
-9360:2:2254
-9361:2:2248
-9362:2:2249
-9363:2:2250
-9364:2:2262
-9365:2:2267
-9366:2:2271
-9367:2:2272
-9368:2:2279
-9369:2:2280
-9370:2:2291
-9371:2:2292
-9372:2:2293
-9373:2:2291
-9374:2:2292
-9375:2:2293
-9376:2:2304
-9377:2:2309
-9378:2:2310
-9379:0:4365
-9380:3:3658
-9381:0:4365
-9382:2:2322
-9383:0:4365
-9384:2:1169
-9385:0:4365
-9386:3:3657
-9387:0:4365
-9388:2:1170
-9389:0:4365
-9390:3:3658
-9391:0:4365
-9392:3:3659
-9393:0:4365
-9394:3:3665
-9395:0:4365
-9396:3:3666
-9397:0:4365
-9398:3:3667
-9399:0:4365
-9400:3:3668
-9401:0:4365
-9402:3:3669
-9403:3:3673
-9404:3:3674
-9405:3:3682
-9406:3:3683
-9407:3:3687
-9408:3:3688
-9409:3:3682
-9410:3:3683
-9411:3:3687
-9412:3:3688
-9413:3:3696
-9414:3:3701
-9415:3:3705
-9416:3:3706
-9417:3:3713
-9418:3:3714
-9419:3:3725
-9420:3:3726
-9421:3:3727
-9422:3:3725
-9423:3:3726
-9424:3:3727
-9425:3:3738
-9426:3:3743
-9427:3:3744
-9428:0:4365
-9429:3:3756
-9430:0:4365
-9431:3:3757
-9432:0:4365
-9433:2:1173
-9434:0:4365
-9435:3:3758
-9436:0:4365
-9437:2:1179
-9438:0:4365
-9439:2:1180
-9440:0:4365
-9441:3:3757
-9442:0:4365
-9443:2:1181
-9444:2:1185
-9445:2:1186
-9446:2:1194
-9447:2:1195
-9448:2:1199
-9449:2:1200
-9450:2:1194
-9451:2:1195
-9452:2:1199
-9453:2:1200
-9454:2:1208
-9455:2:1213
-9456:2:1217
-9457:2:1218
-9458:2:1225
-9459:2:1226
-9460:2:1237
-9461:2:1238
-9462:2:1239
-9463:2:1237
-9464:2:1238
-9465:2:1239
-9466:2:1250
-9467:2:1255
-9468:2:1256
-9469:0:4365
-9470:3:3758
-9471:0:4365
-9472:2:1268
-9473:0:4365
-9474:3:3757
-9475:0:4365
-9476:2:1270
-9477:0:4365
-9478:3:3758
-9479:0:4365
-9480:2:1271
-9481:2:1275
-9482:2:1276
-9483:2:1284
-9484:2:1285
-9485:2:1289
-9486:2:1290
-9487:2:1284
-9488:2:1285
-9489:2:1289
-9490:2:1290
-9491:2:1298
-9492:2:1303
-9493:2:1307
-9494:2:1308
-9495:2:1315
-9496:2:1316
-9497:2:1327
-9498:2:1328
-9499:2:1329
-9500:2:1327
-9501:2:1328
-9502:2:1329
-9503:2:1340
-9504:2:1345
-9505:2:1346
-9506:0:4365
-9507:2:1358
-9508:0:4365
-9509:2:1360
-9510:0:4365
-9511:3:3757
-9512:0:4365
-9513:2:1361
-9514:0:4365
-9515:3:3758
-9516:0:4365
-9517:2:1362
-9518:2:1366
-9519:2:1367
-9520:2:1375
-9521:2:1376
-9522:2:1380
-9523:2:1381
-9524:2:1375
-9525:2:1376
-9526:2:1380
-9527:2:1381
-9528:2:1389
-9529:2:1394
-9530:2:1398
-9531:2:1399
-9532:2:1406
-9533:2:1407
-9534:2:1418
-9535:2:1419
-9536:2:1420
-9537:2:1418
-9538:2:1419
-9539:2:1420
-9540:2:1431
-9541:2:1436
-9542:2:1437
-9543:0:4365
-9544:2:1449
-9545:0:4365
-9546:3:3757
-9547:0:4365
-9548:2:1451
-9549:0:4365
-9550:3:3758
-9551:0:4365
-9552:2:1652
-9553:0:4365
-9554:2:1653
-9555:0:4365
-9556:2:1657
-9557:0:4365
-9558:2:1660
-9559:0:4365
-9560:3:3757
-9561:0:4365
-9562:2:1665
-9563:2:1669
-9564:2:1670
-9565:2:1678
-9566:2:1679
-9567:2:1683
-9568:2:1684
-9569:2:1678
-9570:2:1679
-9571:2:1680
-9572:2:1692
-9573:2:1697
-9574:2:1701
-9575:2:1702
-9576:2:1709
-9577:2:1710
-9578:2:1721
-9579:2:1722
-9580:2:1723
-9581:2:1721
-9582:2:1722
-9583:2:1723
-9584:2:1734
-9585:2:1739
-9586:2:1740
-9587:0:4365
-9588:3:3758
-9589:0:4365
-9590:2:1752
-9591:0:4365
-9592:3:3757
-9593:0:4365
-9594:2:1754
-9595:0:4365
-9596:3:3758
-9597:0:4365
-9598:2:1755
-9599:2:1759
-9600:2:1760
-9601:2:1768
-9602:2:1769
-9603:2:1773
-9604:2:1774
-9605:2:1768
-9606:2:1769
-9607:2:1773
-9608:2:1774
-9609:2:1782
-9610:2:1787
-9611:2:1791
-9612:2:1792
-9613:2:1799
-9614:2:1800
-9615:2:1811
-9616:2:1812
-9617:2:1813
-9618:2:1811
-9619:2:1812
-9620:2:1813
-9621:2:1824
-9622:2:1829
-9623:2:1830
-9624:0:4365
-9625:2:1842
-9626:0:4365
-9627:3:3757
-9628:0:4365
-9629:2:1844
-9630:0:4365
-9631:3:3758
-9632:0:4365
-9633:2:1845
-9634:2:1849
-9635:2:1850
-9636:2:1858
-9637:2:1859
-9638:2:1863
-9639:2:1864
-9640:2:1858
-9641:2:1859
-9642:2:1863
-9643:2:1864
-9644:2:1872
-9645:2:1877
-9646:2:1881
-9647:2:1882
-9648:2:1889
-9649:2:1890
-9650:2:1901
-9651:2:1902
-9652:2:1903
-9653:2:1901
-9654:2:1902
-9655:2:1903
-9656:2:1914
-9657:2:1919
-9658:2:1920
-9659:0:4365
-9660:2:1932
-9661:0:4365
-9662:3:3757
-9663:0:4365
-9664:2:1934
-9665:0:4365
-9666:3:3758
-9667:0:4365
-9668:2:1935
-9669:0:4365
-9670:2:1936
-9671:0:4365
-9672:2:2129
-9673:0:4365
-9674:2:2130
-9675:0:4365
-9676:2:2134
-9677:0:4365
-9678:3:3757
-9679:0:4365
-9680:2:2136
-9681:0:4365
-9682:3:3758
-9683:0:4365
-9684:2:2137
-9685:2:2141
-9686:2:2142
-9687:2:2150
-9688:2:2151
-9689:2:2155
-9690:2:2156
-9691:2:2150
-9692:2:2151
-9693:2:2155
-9694:2:2156
-9695:2:2164
-9696:2:2169
-9697:2:2173
-9698:2:2174
-9699:2:2181
-9700:2:2182
-9701:2:2193
-9702:2:2194
-9703:2:2195
-9704:2:2193
-9705:2:2194
-9706:2:2195
-9707:2:2206
-9708:2:2211
-9709:2:2212
-9710:0:4365
-9711:2:2224
-9712:0:4365
-9713:3:3757
-9714:0:4365
-9715:2:2226
-9716:0:4365
-9717:3:3758
-9718:0:4365
-9719:2:2230
-9720:0:4365
-9721:3:3757
-9722:0:4365
-9723:2:2235
-9724:2:2239
-9725:2:2240
-9726:2:2248
-9727:2:2249
-9728:2:2253
-9729:2:2254
-9730:2:2248
-9731:2:2249
-9732:2:2250
-9733:2:2262
-9734:2:2267
-9735:2:2271
-9736:2:2272
-9737:2:2279
-9738:2:2280
-9739:2:2291
-9740:2:2292
-9741:2:2293
-9742:2:2291
-9743:2:2292
-9744:2:2293
-9745:2:2304
-9746:2:2309
-9747:2:2310
-9748:0:4365
-9749:3:3758
-9750:0:4365
-9751:2:2322
-9752:0:4365
-9753:2:1169
-9754:0:4365
-9755:3:3757
-9756:0:4365
-9757:2:1170
-9758:0:4365
-9759:3:3758
-9760:0:4365
-9761:3:3759
-9762:0:4365
-9763:3:3972
-9764:0:4365
-9765:3:3980
-9766:0:4365
-9767:3:3981
-9768:3:3985
-9769:3:3986
-9770:3:3994
-9771:3:3995
-9772:3:3999
-9773:3:4000
-9774:3:3994
-9775:3:3995
-9776:3:3999
-9777:3:4000
-9778:3:4008
-9779:3:4013
-9780:3:4017
-9781:3:4018
-9782:3:4025
-9783:3:4026
-9784:3:4037
-9785:3:4038
-9786:3:4039
-9787:3:4037
-9788:3:4038
-9789:3:4039
-9790:3:4050
-9791:3:4055
-9792:3:4056
-9793:0:4365
-9794:3:4068
-9795:0:4365
-9796:3:4069
-9797:0:4365
-9798:2:1173
-9799:0:4365
-9800:3:4070
-9801:0:4365
-9802:2:1179
-9803:0:4365
-9804:2:1180
-9805:0:4365
-9806:3:4069
-9807:0:4365
-9808:2:1181
-9809:2:1185
-9810:2:1186
-9811:2:1194
-9812:2:1195
-9813:2:1199
-9814:2:1200
-9815:2:1194
-9816:2:1195
-9817:2:1199
-9818:2:1200
-9819:2:1208
-9820:2:1213
-9821:2:1217
-9822:2:1218
-9823:2:1225
-9824:2:1226
-9825:2:1237
-9826:2:1238
-9827:2:1239
-9828:2:1237
-9829:2:1238
-9830:2:1239
-9831:2:1250
-9832:2:1255
-9833:2:1256
-9834:0:4365
-9835:3:4070
-9836:0:4365
-9837:2:1268
-9838:0:4365
-9839:3:4069
-9840:0:4365
-9841:2:1270
-9842:0:4365
-9843:3:4070
-9844:0:4365
-9845:2:1271
-9846:2:1275
-9847:2:1276
-9848:2:1284
-9849:2:1285
-9850:2:1289
-9851:2:1290
-9852:2:1284
-9853:2:1285
-9854:2:1289
-9855:2:1290
-9856:2:1298
-9857:2:1303
-9858:2:1307
-9859:2:1308
-9860:2:1315
-9861:2:1316
-9862:2:1327
-9863:2:1328
-9864:2:1329
-9865:2:1327
-9866:2:1328
-9867:2:1329
-9868:2:1340
-9869:2:1345
-9870:2:1346
-9871:0:4365
-9872:2:1358
-9873:0:4365
-9874:2:1360
-9875:0:4365
-9876:3:4069
-9877:0:4365
-9878:2:1361
-9879:0:4365
-9880:3:4070
-9881:0:4365
-9882:2:1362
-9883:2:1366
-9884:2:1367
-9885:2:1375
-9886:2:1376
-9887:2:1380
-9888:2:1381
-9889:2:1375
-9890:2:1376
-9891:2:1380
-9892:2:1381
-9893:2:1389
-9894:2:1394
-9895:2:1398
-9896:2:1399
-9897:2:1406
-9898:2:1407
-9899:2:1418
-9900:2:1419
-9901:2:1420
-9902:2:1418
-9903:2:1419
-9904:2:1420
-9905:2:1431
-9906:2:1436
-9907:2:1437
-9908:0:4365
-9909:2:1449
-9910:0:4365
-9911:3:4069
-9912:0:4365
-9913:2:1451
-9914:0:4365
-9915:3:4070
-9916:0:4365
-9917:2:1652
-9918:0:4365
-9919:2:1653
-9920:0:4365
-9921:2:1657
-9922:0:4365
-9923:2:1660
-9924:0:4365
-9925:3:4069
-9926:0:4365
-9927:2:1665
-9928:2:1669
-9929:2:1670
-9930:2:1678
-9931:2:1679
-9932:2:1683
-9933:2:1684
-9934:2:1678
-9935:2:1679
-9936:2:1680
-9937:2:1692
-9938:2:1697
-9939:2:1701
-9940:2:1702
-9941:2:1709
-9942:2:1710
-9943:2:1721
-9944:2:1722
-9945:2:1723
-9946:2:1721
-9947:2:1722
-9948:2:1723
-9949:2:1734
-9950:2:1739
-9951:2:1740
-9952:0:4365
-9953:3:4070
-9954:0:4365
-9955:2:1752
-9956:0:4365
-9957:3:4069
-9958:0:4365
-9959:2:1754
-9960:0:4365
-9961:3:4070
-9962:0:4365
-9963:2:1755
-9964:2:1759
-9965:2:1760
-9966:2:1768
-9967:2:1769
-9968:2:1773
-9969:2:1774
-9970:2:1768
-9971:2:1769
-9972:2:1773
-9973:2:1774
-9974:2:1782
-9975:2:1787
-9976:2:1791
-9977:2:1792
-9978:2:1799
-9979:2:1800
-9980:2:1811
-9981:2:1812
-9982:2:1813
-9983:2:1811
-9984:2:1812
-9985:2:1813
-9986:2:1824
-9987:2:1829
-9988:2:1830
-9989:0:4365
-9990:2:1842
-9991:0:4365
-9992:3:4069
-9993:0:4365
-9994:2:1844
-9995:0:4365
-9996:3:4070
-9997:0:4365
-9998:2:1845
-9999:2:1849
-10000:2:1850
-10001:2:1858
-10002:2:1859
-10003:2:1863
-10004:2:1864
-10005:2:1858
-10006:2:1859
-10007:2:1863
-10008:2:1864
-10009:2:1872
-10010:2:1877
-10011:2:1881
-10012:2:1882
-10013:2:1889
-10014:2:1890
-10015:2:1901
-10016:2:1902
-10017:2:1903
-10018:2:1901
-10019:2:1902
-10020:2:1903
-10021:2:1914
-10022:2:1919
-10023:2:1920
-10024:0:4365
-10025:2:1932
-10026:0:4365
-10027:3:4069
-10028:0:4365
-10029:2:1934
-10030:0:4365
-10031:3:4070
-10032:0:4365
-10033:2:1935
-10034:0:4365
-10035:2:1936
-10036:0:4365
-10037:2:2129
-10038:0:4365
-10039:2:2130
-10040:0:4365
-10041:2:2134
-10042:0:4365
-10043:3:4069
-10044:0:4365
-10045:2:2136
-10046:0:4365
-10047:3:4070
-10048:0:4365
-10049:2:2137
-10050:2:2141
-10051:2:2142
-10052:2:2150
-10053:2:2151
-10054:2:2155
-10055:2:2156
-10056:2:2150
-10057:2:2151
-10058:2:2155
-10059:2:2156
-10060:2:2164
-10061:2:2169
-10062:2:2173
-10063:2:2174
-10064:2:2181
-10065:2:2182
-10066:2:2193
-10067:2:2194
-10068:2:2195
-10069:2:2193
-10070:2:2194
-10071:2:2195
-10072:2:2206
-10073:2:2211
-10074:2:2212
-10075:0:4365
-10076:2:2224
-10077:0:4365
-10078:3:4069
-10079:0:4365
-10080:2:2226
-10081:0:4365
-10082:3:4070
-10083:0:4365
-10084:2:2230
-10085:0:4365
-10086:3:4069
-10087:0:4365
-10088:2:2235
-10089:2:2239
-10090:2:2240
-10091:2:2248
-10092:2:2249
-10093:2:2253
-10094:2:2254
-10095:2:2248
-10096:2:2249
-10097:2:2250
-10098:2:2262
-10099:2:2267
-10100:2:2271
-10101:2:2272
-10102:2:2279
-10103:2:2280
-10104:2:2291
-10105:2:2292
-10106:2:2293
-10107:2:2291
-10108:2:2292
-10109:2:2293
-10110:2:2304
-10111:2:2309
-10112:2:2310
-10113:0:4365
-10114:3:4070
-10115:0:4365
-10116:2:2322
-10117:0:4365
-10118:2:1169
-10119:0:4365
-10120:3:4069
-10121:0:4365
-10122:2:1170
-10123:0:4365
-10124:3:4070
-10125:0:4365
-10126:3:4071
-10127:0:4365
-10128:3:4081
-10129:0:4365
-10130:3:3666
-10131:0:4365
-10132:3:3667
-10133:0:4365
-10134:3:3668
-10135:0:4365
-10136:3:3669
-10137:3:3673
-10138:3:3674
-10139:3:3682
-10140:3:3683
-10141:3:3687
-10142:3:3688
-10143:3:3682
-10144:3:3683
-10145:3:3687
-10146:3:3688
-10147:3:3696
-10148:3:3701
-10149:3:3705
-10150:3:3706
-10151:3:3713
-10152:3:3714
-10153:3:3725
-10154:3:3726
-10155:3:3727
-10156:3:3725
-10157:3:3726
-10158:3:3727
-10159:3:3738
-10160:3:3743
-10161:3:3744
-10162:0:4365
-10163:3:3756
-10164:0:4365
-10165:3:3757
-10166:0:4365
-10167:2:1173
-10168:0:4365
-10169:3:3758
-10170:0:4365
-10171:2:1179
-10172:0:4365
-10173:2:1180
-10174:0:4365
-10175:3:3757
-10176:0:4365
-10177:2:1181
-10178:2:1185
-10179:2:1186
-10180:2:1194
-10181:2:1195
-10182:2:1199
-10183:2:1200
-10184:2:1194
-10185:2:1195
-10186:2:1199
-10187:2:1200
-10188:2:1208
-10189:2:1213
-10190:2:1217
-10191:2:1218
-10192:2:1225
-10193:2:1226
-10194:2:1237
-10195:2:1238
-10196:2:1239
-10197:2:1237
-10198:2:1238
-10199:2:1239
-10200:2:1250
-10201:2:1255
-10202:2:1256
-10203:0:4365
-10204:3:3758
-10205:0:4365
-10206:2:1268
-10207:0:4365
-10208:3:3757
-10209:0:4365
-10210:2:1270
-10211:0:4365
-10212:3:3758
-10213:0:4365
-10214:2:1271
-10215:2:1275
-10216:2:1276
-10217:2:1284
-10218:2:1285
-10219:2:1289
-10220:2:1290
-10221:2:1284
-10222:2:1285
-10223:2:1289
-10224:2:1290
-10225:2:1298
-10226:2:1303
-10227:2:1307
-10228:2:1308
-10229:2:1315
-10230:2:1316
-10231:2:1327
-10232:2:1328
-10233:2:1329
-10234:2:1327
-10235:2:1328
-10236:2:1329
-10237:2:1340
-10238:2:1345
-10239:2:1346
-10240:0:4365
-10241:2:1358
-10242:0:4365
-10243:2:1360
-10244:0:4365
-10245:3:3757
-10246:0:4365
-10247:2:1361
-10248:0:4365
-10249:3:3758
-10250:0:4365
-10251:2:1362
-10252:2:1366
-10253:2:1367
-10254:2:1375
-10255:2:1376
-10256:2:1380
-10257:2:1381
-10258:2:1375
-10259:2:1376
-10260:2:1380
-10261:2:1381
-10262:2:1389
-10263:2:1394
-10264:2:1398
-10265:2:1399
-10266:2:1406
-10267:2:1407
-10268:2:1418
-10269:2:1419
-10270:2:1420
-10271:2:1418
-10272:2:1419
-10273:2:1420
-10274:2:1431
-10275:2:1436
-10276:2:1437
-10277:0:4365
-10278:2:1449
-10279:0:4365
-10280:3:3757
-10281:0:4365
-10282:2:1451
-10283:0:4365
-10284:3:3758
-10285:0:4365
-10286:2:1652
-10287:0:4365
-10288:2:1653
-10289:0:4365
-10290:2:1657
-10291:0:4365
-10292:2:1660
-10293:0:4365
-10294:3:3757
-10295:0:4365
-10296:2:1665
-10297:2:1669
-10298:2:1670
-10299:2:1678
-10300:2:1679
-10301:2:1683
-10302:2:1684
-10303:2:1678
-10304:2:1679
-10305:2:1680
-10306:2:1692
-10307:2:1697
-10308:2:1701
-10309:2:1702
-10310:2:1709
-10311:2:1710
-10312:2:1721
-10313:2:1722
-10314:2:1723
-10315:2:1721
-10316:2:1722
-10317:2:1723
-10318:2:1734
-10319:2:1739
-10320:2:1740
-10321:0:4365
-10322:3:3758
-10323:0:4365
-10324:2:1752
-10325:0:4365
-10326:3:3757
-10327:0:4365
-10328:2:1754
-10329:0:4365
-10330:3:3758
-10331:0:4365
-10332:2:1755
-10333:2:1759
-10334:2:1760
-10335:2:1768
-10336:2:1769
-10337:2:1773
-10338:2:1774
-10339:2:1768
-10340:2:1769
-10341:2:1773
-10342:2:1774
-10343:2:1782
-10344:2:1787
-10345:2:1791
-10346:2:1792
-10347:2:1799
-10348:2:1800
-10349:2:1811
-10350:2:1812
-10351:2:1813
-10352:2:1811
-10353:2:1812
-10354:2:1813
-10355:2:1824
-10356:2:1829
-10357:2:1830
-10358:0:4365
-10359:2:1842
-10360:0:4365
-10361:3:3757
-10362:0:4365
-10363:2:1844
-10364:0:4365
-10365:3:3758
-10366:0:4365
-10367:2:1845
-10368:2:1849
-10369:2:1850
-10370:2:1858
-10371:2:1859
-10372:2:1863
-10373:2:1864
-10374:2:1858
-10375:2:1859
-10376:2:1863
-10377:2:1864
-10378:2:1872
-10379:2:1877
-10380:2:1881
-10381:2:1882
-10382:2:1889
-10383:2:1890
-10384:2:1901
-10385:2:1902
-10386:2:1903
-10387:2:1901
-10388:2:1902
-10389:2:1903
-10390:2:1914
-10391:2:1919
-10392:2:1920
-10393:0:4365
-10394:2:1932
-10395:0:4365
-10396:3:3757
-10397:0:4365
-10398:2:1934
-10399:0:4365
-10400:3:3758
-10401:0:4365
-10402:2:1935
-10403:0:4365
-10404:2:1936
-10405:0:4365
-10406:2:2129
-10407:0:4365
-10408:2:2130
-10409:0:4365
-10410:2:2134
-10411:0:4365
-10412:3:3757
-10413:0:4365
-10414:2:2136
-10415:0:4365
-10416:3:3758
-10417:0:4365
-10418:2:2137
-10419:2:2141
-10420:2:2142
-10421:2:2150
-10422:2:2151
-10423:2:2155
-10424:2:2156
-10425:2:2150
-10426:2:2151
-10427:2:2155
-10428:2:2156
-10429:2:2164
-10430:2:2169
-10431:2:2173
-10432:2:2174
-10433:2:2181
-10434:2:2182
-10435:2:2193
-10436:2:2194
-10437:2:2195
-10438:2:2193
-10439:2:2194
-10440:2:2195
-10441:2:2206
-10442:2:2211
-10443:2:2212
-10444:0:4365
-10445:2:2224
-10446:0:4365
-10447:3:3757
-10448:0:4365
-10449:2:2226
-10450:0:4365
-10451:3:3758
-10452:0:4365
-10453:2:2230
-10454:0:4365
-10455:3:3757
-10456:0:4365
-10457:2:2235
-10458:2:2239
-10459:2:2240
-10460:2:2248
-10461:2:2249
-10462:2:2253
-10463:2:2254
-10464:2:2248
-10465:2:2249
-10466:2:2250
-10467:2:2262
-10468:2:2267
-10469:2:2271
-10470:2:2272
-10471:2:2279
-10472:2:2280
-10473:2:2291
-10474:2:2292
-10475:2:2293
-10476:2:2291
-10477:2:2292
-10478:2:2293
-10479:2:2304
-10480:2:2309
-10481:2:2310
-10482:0:4365
-10483:3:3758
-10484:0:4365
-10485:2:2322
-10486:0:4365
-10487:2:1169
-10488:0:4365
-10489:3:3757
-10490:0:4365
-10491:2:1170
-10492:0:4365
-10493:3:3758
-10494:0:4365
-10495:3:3759
-10496:0:4365
-10497:3:3972
-10498:0:4365
-10499:3:4077
-10500:0:4365
-10501:3:4078
-10502:0:4365
-10503:3:4082
-10504:0:4365
-10505:3:4088
-10506:0:4365
-10507:3:4092
-10508:3:4093
-10509:3:4097
-10510:3:4101
-10511:3:4102
-10512:3:4097
-10513:3:4101
-10514:3:4102
-10515:3:4106
-10516:3:4114
-10517:3:4115
-10518:3:4120
-10519:3:4127
-10520:3:4128
-10521:3:4127
-10522:3:4128
-10523:3:4135
-10524:3:4140
-10525:0:4365
-10526:3:4151
-10527:0:4365
-10528:3:4155
-10529:3:4156
-10530:3:4160
-10531:3:4164
-10532:3:4165
-10533:3:4160
-10534:3:4164
-10535:3:4165
-10536:3:4169
-10537:3:4177
-10538:3:4178
-10539:3:4183
-10540:3:4190
-10541:3:4191
-10542:3:4190
-10543:3:4191
-10544:3:4198
-10545:3:4203
-10546:0:4365
-10547:3:4151
-10548:0:4365
-10549:3:4155
-10550:3:4156
-10551:3:4160
-10552:3:4164
-10553:3:4165
-10554:3:4160
-10555:3:4164
-10556:3:4165
-10557:3:4169
-10558:3:4177
-10559:3:4178
-10560:3:4183
-10561:3:4190
-10562:3:4191
-10563:3:4190
-10564:3:4191
-10565:3:4198
-10566:3:4203
-10567:0:4365
-10568:3:4214
-10569:0:4365
-10570:3:4222
-10571:3:4223
-10572:3:4227
-10573:3:4231
-10574:3:4232
-10575:3:4227
-10576:3:4231
-10577:3:4232
-10578:3:4236
-10579:3:4244
-10580:3:4245
-10581:3:4250
-10582:3:4257
-10583:3:4258
-10584:3:4257
-10585:3:4258
-10586:3:4265
-10587:3:4270
-10588:0:4365
-10589:3:4285
-10590:0:4365
-10591:3:4286
-10592:0:4365
-10593:2:1173
-10594:0:4365
-10595:3:4287
-10596:0:4365
-10597:2:1179
-10598:0:4365
-10599:2:1180
-10600:0:4365
-10601:3:4286
-10602:0:4365
-10603:2:1181
-10604:2:1185
-10605:2:1186
-10606:2:1194
-10607:2:1195
-10608:2:1199
-10609:2:1200
-10610:2:1194
-10611:2:1195
-10612:2:1199
-10613:2:1200
-10614:2:1208
-10615:2:1213
-10616:2:1217
-10617:2:1218
-10618:2:1225
-10619:2:1226
-10620:2:1237
-10621:2:1238
-10622:2:1239
-10623:2:1237
-10624:2:1238
-10625:2:1239
-10626:2:1250
-10627:2:1255
-10628:2:1256
-10629:0:4365
-10630:3:4287
-10631:0:4365
-10632:2:1268
-10633:0:4365
-10634:3:4286
-10635:0:4365
-10636:2:1270
-10637:0:4365
-10638:3:4287
-10639:0:4365
-10640:2:1271
-10641:2:1275
-10642:2:1276
-10643:2:1284
-10644:2:1285
-10645:2:1289
-10646:2:1290
-10647:2:1284
-10648:2:1285
-10649:2:1289
-10650:2:1290
-10651:2:1298
-10652:2:1303
-10653:2:1307
-10654:2:1308
-10655:2:1315
-10656:2:1316
-10657:2:1327
-10658:2:1328
-10659:2:1329
-10660:2:1327
-10661:2:1328
-10662:2:1329
-10663:2:1340
-10664:2:1345
-10665:2:1346
-10666:0:4365
-10667:2:1358
-10668:0:4365
-10669:2:1360
-10670:0:4365
-10671:3:4286
-10672:0:4365
-10673:2:1361
-10674:0:4365
-10675:3:4287
-10676:0:4365
-10677:2:1362
-10678:2:1366
-10679:2:1367
-10680:2:1375
-10681:2:1376
-10682:2:1380
-10683:2:1381
-10684:2:1375
-10685:2:1376
-10686:2:1380
-10687:2:1381
-10688:2:1389
-10689:2:1394
-10690:2:1398
-10691:2:1399
-10692:2:1406
-10693:2:1407
-10694:2:1418
-10695:2:1419
-10696:2:1420
-10697:2:1418
-10698:2:1419
-10699:2:1420
-10700:2:1431
-10701:2:1436
-10702:2:1437
-10703:0:4365
-10704:2:1449
-10705:0:4365
-10706:3:4286
-10707:0:4365
-10708:2:1451
-10709:0:4365
-10710:3:4287
-10711:0:4365
-10712:2:1652
-10713:0:4365
-10714:2:1653
-10715:0:4365
-10716:2:1657
-10717:0:4365
-10718:2:1660
-10719:0:4365
-10720:3:4286
-10721:0:4365
-10722:2:1665
-10723:2:1669
-10724:2:1670
-10725:2:1678
-10726:2:1679
-10727:2:1683
-10728:2:1684
-10729:2:1678
-10730:2:1679
-10731:2:1680
-10732:2:1692
-10733:2:1697
-10734:2:1701
-10735:2:1702
-10736:2:1709
-10737:2:1710
-10738:2:1721
-10739:2:1722
-10740:2:1723
-10741:2:1721
-10742:2:1722
-10743:2:1723
-10744:2:1734
-10745:2:1739
-10746:2:1740
-10747:0:4365
-10748:3:4287
-10749:0:4365
-10750:2:1752
-10751:0:4365
-10752:3:4286
-10753:0:4365
-10754:2:1754
-10755:0:4365
-10756:3:4287
-10757:0:4365
-10758:2:1755
-10759:2:1759
-10760:2:1760
-10761:2:1768
-10762:2:1769
-10763:2:1773
-10764:2:1774
-10765:2:1768
-10766:2:1769
-10767:2:1773
-10768:2:1774
-10769:2:1782
-10770:2:1787
-10771:2:1791
-10772:2:1792
-10773:2:1799
-10774:2:1800
-10775:2:1811
-10776:2:1812
-10777:2:1813
-10778:2:1811
-10779:2:1812
-10780:2:1813
-10781:2:1824
-10782:2:1829
-10783:2:1830
-10784:0:4365
-10785:2:1842
-10786:0:4365
-10787:3:4286
-10788:0:4365
-10789:2:1844
-10790:0:4365
-10791:3:4287
-10792:0:4365
-10793:2:1845
-10794:2:1849
-10795:2:1850
-10796:2:1858
-10797:2:1859
-10798:2:1863
-10799:2:1864
-10800:2:1858
-10801:2:1859
-10802:2:1863
-10803:2:1864
-10804:2:1872
-10805:2:1877
-10806:2:1881
-10807:2:1882
-10808:2:1889
-10809:2:1890
-10810:2:1901
-10811:2:1902
-10812:2:1903
-10813:2:1901
-10814:2:1902
-10815:2:1903
-10816:2:1914
-10817:2:1919
-10818:2:1920
-10819:0:4365
-10820:2:1932
-10821:0:4365
-10822:3:4286
-10823:0:4365
-10824:2:1934
-10825:0:4365
-10826:3:4287
-10827:0:4365
-10828:2:1935
-10829:0:4365
-10830:2:1936
-10831:0:4365
-10832:2:2129
-10833:0:4365
-10834:2:2130
-10835:0:4365
-10836:2:2134
-10837:0:4365
-10838:3:4286
-10839:0:4365
-10840:2:2136
-10841:0:4365
-10842:3:4287
-10843:0:4365
-10844:2:2137
-10845:2:2141
-10846:2:2142
-10847:2:2150
-10848:2:2151
-10849:2:2155
-10850:2:2156
-10851:2:2150
-10852:2:2151
-10853:2:2155
-10854:2:2156
-10855:2:2164
-10856:2:2169
-10857:2:2173
-10858:2:2174
-10859:2:2181
-10860:2:2182
-10861:2:2193
-10862:2:2194
-10863:2:2195
-10864:2:2193
-10865:2:2194
-10866:2:2195
-10867:2:2206
-10868:2:2211
-10869:2:2212
-10870:0:4365
-10871:2:2224
-10872:0:4365
-10873:3:4286
-10874:0:4365
-10875:2:2226
-10876:0:4365
-10877:3:4287
-10878:0:4365
-10879:2:2230
-10880:0:4365
-10881:3:4286
-10882:0:4365
-10883:2:2235
-10884:2:2239
-10885:2:2240
-10886:2:2248
-10887:2:2249
-10888:2:2253
-10889:2:2254
-10890:2:2248
-10891:2:2249
-10892:2:2250
-10893:2:2262
-10894:2:2267
-10895:2:2271
-10896:2:2272
-10897:2:2279
-10898:2:2280
-10899:2:2291
-10900:2:2292
-10901:2:2293
-10902:2:2291
-10903:2:2292
-10904:2:2293
-10905:2:2304
-10906:2:2309
-10907:2:2310
-10908:0:4365
-10909:3:4287
-10910:0:4365
-10911:2:2322
-10912:0:4365
-10913:2:1169
-10914:0:4365
-10915:3:4286
-10916:0:4365
-10917:2:1170
-10918:0:4365
-10919:3:4287
-10920:0:4365
-10921:3:4288
-10922:0:4365
-10923:3:4294
-10924:0:4365
-10925:3:4295
-10926:0:4365
-10927:3:2338
-10928:0:4365
-10929:3:2339
-10930:3:2343
-10931:3:2344
-10932:3:2352
-10933:3:2353
-10934:3:2357
-10935:3:2358
-10936:3:2352
-10937:3:2353
-10938:3:2357
-10939:3:2358
-10940:3:2366
-10941:3:2371
-10942:3:2375
-10943:3:2376
-10944:3:2383
-10945:3:2384
-10946:3:2395
-10947:3:2396
-10948:3:2397
-10949:3:2395
-10950:3:2396
-10951:3:2397
-10952:3:2408
-10953:3:2413
-10954:3:2414
-10955:0:4365
-10956:3:2426
-10957:0:4365
-10958:3:2427
-10959:0:4365
-10960:2:1173
-10961:0:4365
-10962:3:2428
-10963:0:4365
-10964:2:1179
-10965:0:4365
-10966:2:1180
-10967:0:4365
-10968:3:2427
-10969:0:4365
-10970:2:1181
-10971:2:1185
-10972:2:1186
-10973:2:1194
-10974:2:1195
-10975:2:1199
-10976:2:1200
-10977:2:1194
-10978:2:1195
-10979:2:1199
-10980:2:1200
-10981:2:1208
-10982:2:1213
-10983:2:1217
-10984:2:1218
-10985:2:1225
-10986:2:1226
-10987:2:1237
-10988:2:1238
-10989:2:1239
-10990:2:1237
-10991:2:1238
-10992:2:1239
-10993:2:1250
-10994:2:1255
-10995:2:1256
-10996:0:4365
-10997:3:2428
-10998:0:4365
-10999:2:1268
-11000:0:4365
-11001:3:2427
-11002:0:4365
-11003:2:1270
-11004:0:4365
-11005:3:2428
-11006:0:4365
-11007:2:1271
-11008:2:1275
-11009:2:1276
-11010:2:1284
-11011:2:1285
-11012:2:1289
-11013:2:1290
-11014:2:1284
-11015:2:1285
-11016:2:1289
-11017:2:1290
-11018:2:1298
-11019:2:1303
-11020:2:1307
-11021:2:1308
-11022:2:1315
-11023:2:1316
-11024:2:1327
-11025:2:1328
-11026:2:1329
-11027:2:1327
-11028:2:1328
-11029:2:1329
-11030:2:1340
-11031:2:1345
-11032:2:1346
-11033:0:4365
-11034:2:1358
-11035:0:4365
-11036:2:1360
-11037:0:4365
-11038:3:2427
-11039:0:4365
-11040:2:1361
-11041:0:4365
-11042:3:2428
-11043:0:4365
-11044:2:1362
-11045:2:1366
-11046:2:1367
-11047:2:1375
-11048:2:1376
-11049:2:1380
-11050:2:1381
-11051:2:1375
-11052:2:1376
-11053:2:1380
-11054:2:1381
-11055:2:1389
-11056:2:1394
-11057:2:1398
-11058:2:1399
-11059:2:1406
-11060:2:1407
-11061:2:1418
-11062:2:1419
-11063:2:1420
-11064:2:1418
-11065:2:1419
-11066:2:1420
-11067:2:1431
-11068:2:1436
-11069:2:1437
-11070:0:4365
-11071:2:1449
-11072:0:4365
-11073:3:2427
-11074:0:4365
-11075:2:1451
-11076:0:4365
-11077:3:2428
-11078:0:4365
-11079:2:1652
-11080:0:4365
-11081:2:1653
-11082:0:4365
-11083:2:1657
-11084:0:4365
-11085:2:1660
-11086:0:4365
-11087:3:2427
-11088:0:4365
-11089:2:1665
-11090:2:1669
-11091:2:1670
-11092:2:1678
-11093:2:1679
-11094:2:1683
-11095:2:1684
-11096:2:1678
-11097:2:1679
-11098:2:1680
-11099:2:1692
-11100:2:1697
-11101:2:1701
-11102:2:1702
-11103:2:1709
-11104:2:1710
-11105:2:1721
-11106:2:1722
-11107:2:1723
-11108:2:1721
-11109:2:1722
-11110:2:1723
-11111:2:1734
-11112:2:1739
-11113:2:1740
-11114:0:4365
-11115:3:2428
-11116:0:4365
-11117:2:1752
-11118:0:4365
-11119:3:2427
-11120:0:4365
-11121:2:1754
-11122:0:4365
-11123:3:2428
-11124:0:4365
-11125:2:1755
-11126:2:1759
-11127:2:1760
-11128:2:1768
-11129:2:1769
-11130:2:1773
-11131:2:1774
-11132:2:1768
-11133:2:1769
-11134:2:1773
-11135:2:1774
-11136:2:1782
-11137:2:1787
-11138:2:1791
-11139:2:1792
-11140:2:1799
-11141:2:1800
-11142:2:1811
-11143:2:1812
-11144:2:1813
-11145:2:1811
-11146:2:1812
-11147:2:1813
-11148:2:1824
-11149:2:1829
-11150:2:1830
-11151:0:4365
-11152:2:1842
-11153:0:4365
-11154:3:2427
-11155:0:4365
-11156:2:1844
-11157:0:4363
-11158:3:2428
-11159:0:4369
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.define b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 3afaead..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-Depth=    6009 States=    1e+06 Transitions= 1.08e+07 Memory=   534.904        t=   9.22 R=   1e+05
-Depth=    6009 States=    2e+06 Transitions=  3.4e+07 Memory=   603.557        t=   31.1 R=   6e+04
-Depth=    7527 States=    3e+06 Transitions= 4.91e+07 Memory=   672.209        t=   45.6 R=   7e+04
-pan: resizing hashtable to -w22..  done
-Depth=   68651 States=    4e+06 Transitions= 6.74e+07 Memory=   772.080        t=   62.9 R=   6e+04
-Depth=   68651 States=    5e+06 Transitions= 8.62e+07 Memory=   840.733        t=   80.2 R=   6e+04
-Depth=   68651 States=    6e+06 Transitions= 1.03e+08 Memory=   909.385        t=   95.7 R=   6e+04
-Depth=   68651 States=    7e+06 Transitions= 1.21e+08 Memory=   978.037        t=    112 R=   6e+04
-Depth=   68651 States=    8e+06 Transitions= 1.37e+08 Memory=  1046.690        t=    128 R=   6e+04
-Depth=   68651 States=    9e+06 Transitions= 1.52e+08 Memory=  1115.440        t=    143 R=   6e+04
-pan: resizing hashtable to -w24..  done
-Depth=   68651 States=    1e+07 Transitions= 1.72e+08 Memory=  1308.186        t=    163 R=   6e+04
-Depth=   68651 States=  1.1e+07 Transitions= 1.89e+08 Memory=  1376.838        t=    178 R=   6e+04
-Depth=   68651 States=  1.2e+07 Transitions= 2.05e+08 Memory=  1445.490        t=    193 R=   6e+04
-Depth=   68651 States=  1.3e+07 Transitions= 2.22e+08 Memory=  1514.143        t=    208 R=   6e+04
-Depth=   68651 States=  1.4e+07 Transitions= 2.39e+08 Memory=  1582.893        t=    224 R=   6e+04
-pan: claim violated! (at depth 2141)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 68651, errors: 1
- 14155711 states, stored
-2.2815817e+08 states, matched
-2.4231388e+08 transitions (= stored+matched)
-8.5461256e+08 atomic steps
-hash conflicts: 1.1483359e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 1565.993      equivalent memory usage for states (stored*(State-vector + overhead))
- 1008.042      actual memory usage for states (compression: 64.37%)
-               state-vector as stored = 47 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1593.537      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 158, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 400, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 227, "(1)"
-       line 409, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 256, "(1)"
-       line 419, "pan.___", state 286, "(1)"
-       line 400, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 366, "(1)"
-       line 409, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 395, "(1)"
-       line 419, "pan.___", state 425, "(1)"
-       line 541, "pan.___", state 456, "-end-"
-       (19 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 400, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 70, "(1)"
-       line 419, "pan.___", state 100, "(1)"
-       line 400, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 158, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 400, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 247, "(1)"
-       line 419, "pan.___", state 277, "(1)"
-       line 400, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 330, "(1)"
-       line 409, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 359, "(1)"
-       line 419, "pan.___", state 389, "(1)"
-       line 615, "pan.___", state 411, "-end-"
-       (18 of 411 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 410, "pan.___", state 153, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 400, "pan.___", state 209, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 223, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 254, "(1)"
-       line 414, "pan.___", state 267, "(1)"
-       line 400, "pan.___", state 300, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 314, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 345, "(1)"
-       line 414, "pan.___", state 358, "(1)"
-       line 400, "pan.___", state 395, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 409, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 440, "(1)"
-       line 414, "pan.___", state 453, "(1)"
-       line 400, "pan.___", state 488, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 533, "(1)"
-       line 414, "pan.___", state 546, "(1)"
-       line 400, "pan.___", state 582, "(1)"
-       line 404, "pan.___", state 594, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 638, "(1)"
-       line 404, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 731, "(1)"
-       line 404, "pan.___", state 777, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 795, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 821, "(1)"
-       line 419, "pan.___", state 838, "(1)"
-       line 404, "pan.___", state 868, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 886, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 912, "(1)"
-       line 419, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 963, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 981, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1007, "(1)"
-       line 419, "pan.___", state 1024, "(1)"
-       line 400, "pan.___", state 1050, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1053, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1053, "else"
-       line 400, "pan.___", state 1056, "(1)"
-       line 404, "pan.___", state 1064, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1066, "(1)"
-       line 404, "pan.___", state 1067, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1067, "else"
-       line 404, "pan.___", state 1070, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 402, "pan.___", state 1076, "((i<1))"
-       line 402, "pan.___", state 1076, "((i>=1))"
-       line 409, "pan.___", state 1082, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1095, "(1)"
-       line 410, "pan.___", state 1096, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 1096, "else"
-       line 410, "pan.___", state 1099, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 414, "pan.___", state 1108, "(1)"
-       line 414, "pan.___", state 1109, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 1109, "else"
-       line 414, "pan.___", state 1112, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 412, "pan.___", state 1118, "((i<1))"
-       line 412, "pan.___", state 1118, "((i>=1))"
-       line 419, "pan.___", state 1125, "(1)"
-       line 419, "pan.___", state 1126, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 1126, "else"
-       line 419, "pan.___", state 1129, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 404, "pan.___", state 1164, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1208, "(1)"
-       line 404, "pan.___", state 1254, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1298, "(1)"
-       line 400, "pan.___", state 1334, "(1)"
-       line 404, "pan.___", state 1346, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1390, "(1)"
-       line 404, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1483, "(1)"
-       line 404, "pan.___", state 1529, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1547, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1573, "(1)"
-       line 419, "pan.___", state 1590, "(1)"
-       line 404, "pan.___", state 1620, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1638, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1664, "(1)"
-       line 419, "pan.___", state 1681, "(1)"
-       line 404, "pan.___", state 1715, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1733, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1759, "(1)"
-       line 419, "pan.___", state 1776, "(1)"
-       line 400, "pan.___", state 1802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1804, "(1)"
-       line 400, "pan.___", state 1805, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1805, "else"
-       line 400, "pan.___", state 1808, "(1)"
-       line 404, "pan.___", state 1816, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1818, "(1)"
-       line 404, "pan.___", state 1819, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1819, "else"
-       line 404, "pan.___", state 1822, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 402, "pan.___", state 1828, "((i<1))"
-       line 402, "pan.___", state 1828, "((i>=1))"
-       line 409, "pan.___", state 1834, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1847, "(1)"
-       line 410, "pan.___", state 1848, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 1848, "else"
-       line 410, "pan.___", state 1851, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 414, "pan.___", state 1860, "(1)"
-       line 414, "pan.___", state 1861, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 1861, "else"
-       line 414, "pan.___", state 1864, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 412, "pan.___", state 1870, "((i<1))"
-       line 412, "pan.___", state 1870, "((i>=1))"
-       line 419, "pan.___", state 1877, "(1)"
-       line 419, "pan.___", state 1878, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 1878, "else"
-       line 419, "pan.___", state 1881, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 404, "pan.___", state 1916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1960, "(1)"
-       line 404, "pan.___", state 2007, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 2051, "(1)"
-       line 404, "pan.___", state 2102, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 2146, "(1)"
-       line 703, "pan.___", state 2192, "-end-"
-       (144 of 2192 states)
-unreached in proctype :init:
-       line 710, "pan.___", state 9, "((j<2))"
-       line 710, "pan.___", state 9, "((j>=2))"
-       line 711, "pan.___", state 20, "((j<2))"
-       line 711, "pan.___", state 20, "((j>=2))"
-       line 716, "pan.___", state 33, "((j<2))"
-       line 716, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 750, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 227 seconds
-pan: rate 62472.797 states/second
-pan: avg transition delay 9.3511e-07 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 5de16b8..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index d437aad..0000000
+++ /dev/null
@@ -1,2144 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:3107
-2:4:3059
-3:4:3062
-4:4:3062
-5:4:3065
-6:4:3073
-7:4:3073
-8:4:3076
-9:4:3082
-10:4:3086
-11:4:3086
-12:4:3089
-13:4:3097
-14:4:3101
-15:4:3102
-16:0:3107
-17:4:3104
-18:0:3107
-19:3:869
-20:0:3107
-21:3:875
-22:0:3107
-23:3:876
-24:0:3107
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:3107
-45:3:964
-46:0:3107
-47:3:966
-48:3:967
-49:0:3107
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:3107
-69:3:1058
-70:0:3107
-71:3:1060
-72:0:3107
-73:3:1061
-74:0:3107
-75:3:1071
-76:0:3107
-77:3:1072
-78:3:1076
-79:3:1077
-80:3:1085
-81:3:1086
-82:3:1090
-83:3:1091
-84:3:1099
-85:3:1104
-86:3:1108
-87:3:1109
-88:3:1116
-89:3:1117
-90:3:1128
-91:3:1129
-92:3:1130
-93:3:1141
-94:3:1146
-95:3:1147
-96:0:3107
-97:3:1162
-98:0:3107
-99:3:1163
-100:3:1167
-101:3:1168
-102:3:1176
-103:3:1177
-104:3:1181
-105:3:1182
-106:3:1190
-107:3:1195
-108:3:1199
-109:3:1200
-110:3:1207
-111:3:1208
-112:3:1219
-113:3:1220
-114:3:1221
-115:3:1232
-116:3:1237
-117:3:1238
-118:0:3107
-119:3:1253
-120:0:3107
-121:3:1258
-122:3:1262
-123:3:1263
-124:3:1271
-125:3:1272
-126:3:1276
-127:3:1277
-128:3:1285
-129:3:1290
-130:3:1294
-131:3:1295
-132:3:1302
-133:3:1303
-134:3:1314
-135:3:1315
-136:3:1316
-137:3:1327
-138:3:1332
-139:3:1333
-140:0:3107
-141:3:1348
-142:0:3107
-143:3:1350
-144:0:3107
-145:3:1351
-146:3:1355
-147:3:1356
-148:3:1364
-149:3:1365
-150:3:1369
-151:3:1370
-152:3:1378
-153:3:1383
-154:3:1387
-155:3:1388
-156:3:1395
-157:3:1396
-158:3:1407
-159:3:1408
-160:3:1409
-161:3:1420
-162:3:1425
-163:3:1426
-164:0:3107
-165:3:1438
-166:0:3107
-167:3:1440
-168:0:3107
-169:3:1443
-170:3:1444
-171:3:1456
-172:3:1457
-173:3:1461
-174:3:1462
-175:3:1470
-176:3:1475
-177:3:1479
-178:3:1480
-179:3:1487
-180:3:1488
-181:3:1499
-182:3:1500
-183:3:1501
-184:3:1512
-185:3:1517
-186:3:1518
-187:0:3107
-188:3:1530
-189:0:3107
-190:3:1532
-191:0:3107
-192:3:1533
-193:0:3107
-194:3:1534
-195:0:3107
-196:3:1535
-197:0:3107
-198:3:1536
-199:3:1540
-200:3:1541
-201:3:1549
-202:3:1550
-203:3:1554
-204:3:1555
-205:3:1563
-206:3:1568
-207:3:1572
-208:3:1573
-209:3:1580
-210:3:1581
-211:3:1592
-212:3:1593
-213:3:1594
-214:3:1605
-215:3:1610
-216:3:1611
-217:0:3107
-218:3:1623
-219:0:3107
-220:3:1904
-221:0:3107
-222:3:2002
-223:0:3107
-224:3:2003
-225:0:3107
-226:3:2007
-227:0:3107
-228:3:2013
-229:3:2017
-230:3:2018
-231:3:2026
-232:3:2027
-233:3:2031
-234:3:2032
-235:3:2040
-236:3:2045
-237:3:2049
-238:3:2050
-239:3:2057
-240:3:2058
-241:3:2069
-242:3:2070
-243:3:2071
-244:3:2082
-245:3:2087
-246:3:2088
-247:0:3107
-248:3:2100
-249:0:3107
-250:3:2102
-251:0:3107
-252:3:2103
-253:3:2107
-254:3:2108
-255:3:2116
-256:3:2117
-257:3:2121
-258:3:2122
-259:3:2130
-260:3:2135
-261:3:2139
-262:3:2140
-263:3:2147
-264:3:2148
-265:3:2159
-266:3:2160
-267:3:2161
-268:3:2172
-269:3:2177
-270:3:2178
-271:0:3107
-272:3:2190
-273:0:3107
-274:3:2192
-275:0:3107
-276:3:2195
-277:3:2196
-278:3:2208
-279:3:2209
-280:3:2213
-281:3:2214
-282:3:2222
-283:3:2227
-284:3:2231
-285:3:2232
-286:3:2239
-287:3:2240
-288:3:2251
-289:3:2252
-290:3:2253
-291:3:2264
-292:3:2269
-293:3:2270
-294:0:3107
-295:3:2282
-296:0:3107
-297:3:2284
-298:0:3107
-299:3:2285
-300:0:3107
-301:3:2286
-302:0:3107
-303:3:2287
-304:0:3107
-305:3:2288
-306:3:2292
-307:3:2293
-308:3:2301
-309:3:2302
-310:3:2306
-311:3:2307
-312:3:2315
-313:3:2320
-314:3:2324
-315:3:2325
-316:3:2332
-317:3:2333
-318:3:2344
-319:3:2345
-320:3:2346
-321:3:2357
-322:3:2362
-323:3:2363
-324:0:3107
-325:3:2375
-326:0:3107
-327:3:2656
-328:0:3107
-329:3:2754
-330:0:3107
-331:3:2755
-332:0:3107
-333:3:2759
-334:0:3107
-335:3:2765
-336:3:2769
-337:3:2770
-338:3:2778
-339:3:2779
-340:3:2783
-341:3:2784
-342:3:2792
-343:3:2797
-344:3:2801
-345:3:2802
-346:3:2809
-347:3:2810
-348:3:2821
-349:3:2822
-350:3:2823
-351:3:2834
-352:3:2839
-353:3:2840
-354:0:3107
-355:3:2855
-356:0:3107
-357:3:2856
-358:3:2860
-359:3:2861
-360:3:2869
-361:3:2870
-362:3:2874
-363:3:2875
-364:3:2883
-365:3:2888
-366:3:2892
-367:3:2893
-368:3:2900
-369:3:2901
-370:3:2912
-371:3:2913
-372:3:2914
-373:3:2925
-374:3:2930
-375:3:2931
-376:0:3107
-377:3:2946
-378:0:3107
-379:3:2951
-380:3:2955
-381:3:2956
-382:3:2964
-383:3:2965
-384:3:2969
-385:3:2970
-386:3:2978
-387:3:2983
-388:3:2987
-389:3:2988
-390:3:2995
-391:3:2996
-392:3:3007
-393:3:3008
-394:3:3009
-395:3:3020
-396:3:3025
-397:3:3026
-398:0:3107
-399:3:3041
-400:0:3107
-401:3:3043
-402:0:3107
-403:3:3044
-404:0:3107
-405:3:876
-406:0:3107
-407:3:877
-408:3:881
-409:3:882
-410:3:890
-411:3:891
-412:3:895
-413:3:896
-414:3:904
-415:3:909
-416:3:913
-417:3:914
-418:3:921
-419:3:922
-420:3:933
-421:3:934
-422:3:935
-423:3:946
-424:3:951
-425:3:952
-426:0:3107
-427:3:964
-428:0:3107
-429:3:966
-430:3:967
-431:0:3107
-432:3:971
-433:3:975
-434:3:976
-435:3:984
-436:3:985
-437:3:989
-438:3:990
-439:3:998
-440:3:1003
-441:3:1004
-442:3:1015
-443:3:1016
-444:3:1027
-445:3:1028
-446:3:1029
-447:3:1040
-448:3:1045
-449:3:1046
-450:0:3107
-451:3:1058
-452:0:3107
-453:3:1060
-454:0:3107
-455:3:1061
-456:0:3107
-457:3:1071
-458:0:3107
-459:3:1072
-460:3:1076
-461:3:1077
-462:3:1085
-463:3:1086
-464:3:1090
-465:3:1091
-466:3:1099
-467:3:1104
-468:3:1108
-469:3:1109
-470:3:1116
-471:3:1117
-472:3:1128
-473:3:1129
-474:3:1130
-475:3:1141
-476:3:1146
-477:3:1147
-478:0:3107
-479:3:1162
-480:0:3107
-481:3:1163
-482:3:1167
-483:3:1168
-484:3:1176
-485:3:1177
-486:3:1181
-487:3:1182
-488:3:1190
-489:3:1195
-490:3:1199
-491:3:1200
-492:3:1207
-493:3:1208
-494:3:1219
-495:3:1220
-496:3:1221
-497:3:1232
-498:3:1237
-499:3:1238
-500:0:3107
-501:3:1253
-502:0:3107
-503:3:1258
-504:3:1262
-505:3:1263
-506:3:1271
-507:3:1272
-508:3:1276
-509:3:1277
-510:3:1285
-511:3:1290
-512:3:1294
-513:3:1295
-514:3:1302
-515:3:1303
-516:3:1314
-517:3:1315
-518:3:1316
-519:3:1327
-520:3:1332
-521:3:1333
-522:0:3107
-523:3:1348
-524:0:3107
-525:3:1350
-526:0:3107
-527:3:1351
-528:3:1355
-529:3:1356
-530:3:1364
-531:3:1365
-532:3:1369
-533:3:1370
-534:3:1378
-535:3:1383
-536:3:1387
-537:3:1388
-538:3:1395
-539:3:1396
-540:3:1407
-541:3:1408
-542:3:1409
-543:3:1420
-544:3:1425
-545:3:1426
-546:0:3107
-547:3:1438
-548:0:3107
-549:3:1440
-550:0:3107
-551:3:1443
-552:3:1444
-553:3:1456
-554:3:1457
-555:3:1461
-556:3:1462
-557:3:1470
-558:3:1475
-559:3:1479
-560:3:1480
-561:3:1487
-562:3:1488
-563:3:1499
-564:3:1500
-565:3:1501
-566:3:1512
-567:3:1517
-568:3:1518
-569:0:3107
-570:3:1530
-571:0:3107
-572:3:1532
-573:0:3107
-574:3:1533
-575:0:3107
-576:3:1534
-577:0:3107
-578:3:1535
-579:0:3107
-580:3:1536
-581:3:1540
-582:3:1541
-583:3:1549
-584:3:1550
-585:3:1554
-586:3:1555
-587:3:1563
-588:3:1568
-589:3:1572
-590:3:1573
-591:3:1580
-592:3:1581
-593:3:1592
-594:3:1593
-595:3:1594
-596:3:1605
-597:3:1610
-598:3:1611
-599:0:3107
-600:3:1623
-601:0:3107
-602:3:1904
-603:0:3107
-604:3:2002
-605:0:3107
-606:3:2003
-607:0:3107
-608:3:2007
-609:0:3107
-610:3:2013
-611:3:2017
-612:3:2018
-613:3:2026
-614:3:2027
-615:3:2031
-616:3:2032
-617:3:2040
-618:3:2045
-619:3:2049
-620:3:2050
-621:3:2057
-622:3:2058
-623:3:2069
-624:3:2070
-625:3:2071
-626:3:2082
-627:3:2087
-628:3:2088
-629:0:3107
-630:3:2100
-631:0:3107
-632:3:2102
-633:0:3107
-634:3:2103
-635:3:2107
-636:3:2108
-637:3:2116
-638:3:2117
-639:3:2121
-640:3:2122
-641:3:2130
-642:3:2135
-643:3:2139
-644:3:2140
-645:3:2147
-646:3:2148
-647:3:2159
-648:3:2160
-649:3:2161
-650:3:2172
-651:3:2177
-652:3:2178
-653:0:3107
-654:3:2190
-655:0:3107
-656:3:2192
-657:0:3107
-658:3:2195
-659:3:2196
-660:3:2208
-661:3:2209
-662:3:2213
-663:3:2214
-664:3:2222
-665:3:2227
-666:3:2231
-667:3:2232
-668:3:2239
-669:3:2240
-670:3:2251
-671:3:2252
-672:3:2253
-673:3:2264
-674:3:2269
-675:3:2270
-676:0:3107
-677:3:2282
-678:0:3107
-679:3:2284
-680:0:3107
-681:3:2285
-682:0:3107
-683:3:2286
-684:0:3107
-685:3:2287
-686:0:3107
-687:3:2288
-688:3:2292
-689:3:2293
-690:3:2301
-691:3:2302
-692:3:2306
-693:3:2307
-694:3:2315
-695:3:2320
-696:3:2324
-697:3:2325
-698:3:2332
-699:3:2333
-700:3:2344
-701:3:2345
-702:3:2346
-703:3:2357
-704:3:2362
-705:3:2363
-706:0:3107
-707:3:2375
-708:0:3107
-709:3:2656
-710:0:3107
-711:3:2754
-712:0:3107
-713:3:2755
-714:0:3107
-715:3:2759
-716:0:3107
-717:3:2765
-718:3:2769
-719:3:2770
-720:3:2778
-721:3:2779
-722:3:2783
-723:3:2784
-724:3:2792
-725:3:2797
-726:3:2801
-727:3:2802
-728:3:2809
-729:3:2810
-730:3:2821
-731:3:2822
-732:3:2823
-733:3:2834
-734:3:2839
-735:3:2840
-736:0:3107
-737:3:2855
-738:0:3107
-739:3:2856
-740:3:2860
-741:3:2861
-742:3:2869
-743:3:2870
-744:3:2874
-745:3:2875
-746:3:2883
-747:3:2888
-748:3:2892
-749:3:2893
-750:3:2900
-751:3:2901
-752:3:2912
-753:3:2913
-754:3:2914
-755:3:2925
-756:3:2930
-757:3:2931
-758:0:3107
-759:3:2946
-760:0:3107
-761:3:2951
-762:3:2955
-763:3:2956
-764:3:2964
-765:3:2965
-766:3:2969
-767:3:2970
-768:3:2978
-769:3:2983
-770:3:2987
-771:3:2988
-772:3:2995
-773:3:2996
-774:3:3007
-775:3:3008
-776:3:3009
-777:3:3020
-778:3:3025
-779:3:3026
-780:0:3107
-781:3:3041
-782:0:3107
-783:3:3043
-784:0:3107
-785:3:3044
-786:0:3107
-787:3:876
-788:0:3107
-789:3:877
-790:3:881
-791:3:882
-792:3:890
-793:3:891
-794:3:895
-795:3:896
-796:3:904
-797:3:909
-798:3:913
-799:3:914
-800:3:921
-801:3:922
-802:3:933
-803:3:934
-804:3:935
-805:3:946
-806:3:951
-807:3:952
-808:0:3107
-809:3:964
-810:0:3107
-811:3:966
-812:3:967
-813:0:3107
-814:3:971
-815:3:975
-816:3:976
-817:3:984
-818:3:985
-819:3:989
-820:3:990
-821:3:998
-822:3:1003
-823:3:1004
-824:3:1015
-825:3:1016
-826:3:1027
-827:3:1028
-828:3:1029
-829:3:1040
-830:3:1045
-831:3:1046
-832:0:3107
-833:3:1058
-834:0:3107
-835:3:1060
-836:0:3107
-837:3:1061
-838:0:3107
-839:3:1071
-840:0:3107
-841:3:1072
-842:3:1076
-843:3:1077
-844:3:1085
-845:3:1086
-846:3:1090
-847:3:1091
-848:3:1099
-849:3:1104
-850:3:1108
-851:3:1109
-852:3:1116
-853:3:1117
-854:3:1128
-855:3:1129
-856:3:1130
-857:3:1141
-858:3:1146
-859:3:1147
-860:0:3107
-861:3:1162
-862:0:3107
-863:3:1163
-864:3:1167
-865:3:1168
-866:3:1176
-867:3:1177
-868:3:1181
-869:3:1182
-870:3:1190
-871:3:1195
-872:3:1199
-873:3:1200
-874:3:1207
-875:3:1208
-876:3:1219
-877:3:1220
-878:3:1221
-879:3:1232
-880:3:1237
-881:3:1238
-882:0:3107
-883:3:1253
-884:0:3107
-885:3:1258
-886:3:1262
-887:3:1263
-888:3:1271
-889:3:1272
-890:3:1276
-891:3:1277
-892:3:1285
-893:3:1290
-894:3:1294
-895:3:1295
-896:3:1302
-897:3:1303
-898:3:1314
-899:3:1315
-900:3:1316
-901:3:1327
-902:3:1332
-903:3:1333
-904:0:3107
-905:3:1348
-906:0:3107
-907:3:1350
-908:0:3107
-909:3:1351
-910:3:1355
-911:3:1356
-912:3:1364
-913:3:1365
-914:3:1369
-915:3:1370
-916:3:1378
-917:3:1383
-918:3:1387
-919:3:1388
-920:3:1395
-921:3:1396
-922:3:1407
-923:3:1408
-924:3:1409
-925:3:1420
-926:3:1425
-927:3:1426
-928:0:3107
-929:3:1438
-930:0:3107
-931:3:1440
-932:0:3107
-933:3:1443
-934:3:1444
-935:3:1456
-936:3:1457
-937:3:1461
-938:3:1462
-939:3:1470
-940:3:1475
-941:3:1479
-942:3:1480
-943:3:1487
-944:3:1488
-945:3:1499
-946:3:1500
-947:3:1501
-948:3:1512
-949:3:1517
-950:3:1518
-951:0:3107
-952:3:1530
-953:0:3107
-954:3:1532
-955:0:3107
-956:3:1533
-957:0:3107
-958:3:1534
-959:0:3107
-960:3:1535
-961:0:3107
-962:3:1536
-963:3:1540
-964:3:1541
-965:3:1549
-966:3:1550
-967:3:1554
-968:3:1555
-969:3:1563
-970:3:1568
-971:3:1572
-972:3:1573
-973:3:1580
-974:3:1581
-975:3:1592
-976:3:1593
-977:3:1594
-978:3:1605
-979:3:1610
-980:3:1611
-981:0:3107
-982:3:1623
-983:0:3107
-984:3:1904
-985:0:3107
-986:3:2002
-987:0:3107
-988:3:2003
-989:0:3107
-990:3:2007
-991:0:3107
-992:3:2013
-993:3:2017
-994:3:2018
-995:3:2026
-996:3:2027
-997:3:2031
-998:3:2032
-999:3:2040
-1000:3:2045
-1001:3:2049
-1002:3:2050
-1003:3:2057
-1004:3:2058
-1005:3:2069
-1006:3:2070
-1007:3:2071
-1008:3:2082
-1009:3:2087
-1010:3:2088
-1011:0:3107
-1012:3:2100
-1013:0:3107
-1014:3:2102
-1015:0:3107
-1016:3:2103
-1017:3:2107
-1018:3:2108
-1019:3:2116
-1020:3:2117
-1021:3:2121
-1022:3:2122
-1023:3:2130
-1024:3:2135
-1025:3:2139
-1026:3:2140
-1027:3:2147
-1028:3:2148
-1029:3:2159
-1030:3:2160
-1031:3:2161
-1032:3:2172
-1033:3:2177
-1034:3:2178
-1035:0:3107
-1036:3:2190
-1037:0:3107
-1038:3:2192
-1039:0:3107
-1040:3:2195
-1041:3:2196
-1042:3:2208
-1043:3:2209
-1044:3:2213
-1045:3:2214
-1046:3:2222
-1047:3:2227
-1048:3:2231
-1049:3:2232
-1050:3:2239
-1051:3:2240
-1052:3:2251
-1053:3:2252
-1054:3:2253
-1055:3:2264
-1056:3:2269
-1057:3:2270
-1058:0:3107
-1059:3:2282
-1060:0:3107
-1061:3:2284
-1062:0:3107
-1063:3:2285
-1064:0:3107
-1065:3:2286
-1066:0:3107
-1067:3:2287
-1068:0:3107
-1069:3:2288
-1070:3:2292
-1071:3:2293
-1072:3:2301
-1073:3:2302
-1074:3:2306
-1075:3:2307
-1076:3:2315
-1077:3:2320
-1078:3:2324
-1079:3:2325
-1080:3:2332
-1081:3:2333
-1082:3:2344
-1083:3:2345
-1084:3:2346
-1085:3:2357
-1086:3:2362
-1087:3:2363
-1088:0:3107
-1089:3:2375
-1090:0:3107
-1091:3:2656
-1092:0:3107
-1093:3:2754
-1094:0:3107
-1095:3:2755
-1096:0:3107
-1097:3:2759
-1098:0:3107
-1099:3:2765
-1100:3:2769
-1101:3:2770
-1102:3:2778
-1103:3:2779
-1104:3:2783
-1105:3:2784
-1106:3:2792
-1107:3:2797
-1108:3:2801
-1109:3:2802
-1110:3:2809
-1111:3:2810
-1112:3:2821
-1113:3:2822
-1114:3:2823
-1115:3:2834
-1116:3:2839
-1117:3:2840
-1118:0:3107
-1119:3:2855
-1120:0:3107
-1121:3:2856
-1122:3:2860
-1123:3:2861
-1124:3:2869
-1125:3:2870
-1126:3:2874
-1127:3:2875
-1128:3:2883
-1129:3:2888
-1130:3:2892
-1131:3:2893
-1132:3:2900
-1133:3:2901
-1134:3:2912
-1135:3:2913
-1136:3:2914
-1137:3:2925
-1138:3:2930
-1139:3:2931
-1140:0:3107
-1141:3:2946
-1142:0:3107
-1143:3:2951
-1144:3:2955
-1145:3:2956
-1146:3:2964
-1147:3:2965
-1148:3:2969
-1149:3:2970
-1150:3:2978
-1151:3:2983
-1152:3:2987
-1153:3:2988
-1154:3:2995
-1155:3:2996
-1156:3:3007
-1157:3:3008
-1158:3:3009
-1159:3:3020
-1160:3:3025
-1161:3:3026
-1162:0:3107
-1163:3:3041
-1164:0:3107
-1165:3:3043
-1166:0:3107
-1167:3:3044
-1168:0:3107
-1169:3:876
-1170:0:3107
-1171:3:877
-1172:3:881
-1173:3:882
-1174:3:890
-1175:3:891
-1176:3:895
-1177:3:896
-1178:3:904
-1179:3:909
-1180:3:913
-1181:3:914
-1182:3:921
-1183:3:922
-1184:3:933
-1185:3:934
-1186:3:935
-1187:3:946
-1188:3:951
-1189:3:952
-1190:0:3107
-1191:3:964
-1192:0:3107
-1193:3:966
-1194:3:967
-1195:0:3107
-1196:3:971
-1197:3:975
-1198:3:976
-1199:3:984
-1200:3:985
-1201:3:989
-1202:3:990
-1203:3:998
-1204:3:1003
-1205:3:1004
-1206:3:1015
-1207:3:1016
-1208:3:1027
-1209:3:1028
-1210:3:1029
-1211:3:1040
-1212:3:1045
-1213:3:1046
-1214:0:3107
-1215:3:1058
-1216:0:3107
-1217:3:1060
-1218:0:3107
-1219:3:1061
-1220:0:3107
-1221:3:1071
-1222:0:3107
-1223:3:1072
-1224:3:1076
-1225:3:1077
-1226:3:1085
-1227:3:1086
-1228:3:1090
-1229:3:1091
-1230:3:1099
-1231:3:1104
-1232:3:1108
-1233:3:1109
-1234:3:1116
-1235:3:1117
-1236:3:1128
-1237:3:1129
-1238:3:1130
-1239:3:1141
-1240:3:1146
-1241:3:1147
-1242:0:3107
-1243:3:1162
-1244:0:3107
-1245:3:1163
-1246:3:1167
-1247:3:1168
-1248:3:1176
-1249:3:1177
-1250:3:1181
-1251:3:1182
-1252:3:1190
-1253:3:1195
-1254:3:1199
-1255:3:1200
-1256:3:1207
-1257:3:1208
-1258:3:1219
-1259:3:1220
-1260:3:1221
-1261:3:1232
-1262:3:1237
-1263:3:1238
-1264:0:3107
-1265:3:1253
-1266:0:3107
-1267:3:1258
-1268:3:1262
-1269:3:1263
-1270:3:1271
-1271:3:1272
-1272:3:1276
-1273:3:1277
-1274:3:1285
-1275:3:1290
-1276:3:1294
-1277:3:1295
-1278:3:1302
-1279:3:1303
-1280:3:1314
-1281:3:1315
-1282:3:1316
-1283:3:1327
-1284:3:1332
-1285:3:1333
-1286:0:3107
-1287:3:1348
-1288:0:3107
-1289:3:1350
-1290:0:3107
-1291:3:1351
-1292:3:1355
-1293:3:1356
-1294:3:1364
-1295:3:1365
-1296:3:1369
-1297:3:1370
-1298:3:1378
-1299:3:1383
-1300:3:1387
-1301:3:1388
-1302:3:1395
-1303:3:1396
-1304:3:1407
-1305:3:1408
-1306:3:1409
-1307:3:1420
-1308:3:1425
-1309:3:1426
-1310:0:3107
-1311:3:1438
-1312:0:3107
-1313:3:1440
-1314:0:3107
-1315:3:1443
-1316:3:1444
-1317:3:1456
-1318:3:1457
-1319:3:1461
-1320:3:1462
-1321:3:1470
-1322:3:1475
-1323:3:1479
-1324:3:1480
-1325:3:1487
-1326:3:1488
-1327:3:1499
-1328:3:1500
-1329:3:1501
-1330:3:1512
-1331:3:1517
-1332:3:1518
-1333:0:3107
-1334:3:1530
-1335:0:3107
-1336:3:1532
-1337:0:3107
-1338:3:1533
-1339:0:3107
-1340:3:1534
-1341:0:3107
-1342:3:1535
-1343:0:3107
-1344:3:1536
-1345:3:1540
-1346:3:1541
-1347:3:1549
-1348:3:1550
-1349:3:1554
-1350:3:1555
-1351:3:1563
-1352:3:1568
-1353:3:1572
-1354:3:1573
-1355:3:1580
-1356:3:1581
-1357:3:1592
-1358:3:1593
-1359:3:1594
-1360:3:1605
-1361:3:1610
-1362:3:1611
-1363:0:3107
-1364:3:1623
-1365:0:3107
-1366:3:1904
-1367:0:3107
-1368:3:2002
-1369:0:3107
-1370:3:2003
-1371:0:3107
-1372:3:2007
-1373:0:3107
-1374:3:2013
-1375:3:2017
-1376:3:2018
-1377:3:2026
-1378:3:2027
-1379:3:2031
-1380:3:2032
-1381:3:2040
-1382:3:2045
-1383:3:2049
-1384:3:2050
-1385:3:2057
-1386:3:2058
-1387:3:2069
-1388:3:2070
-1389:3:2071
-1390:3:2082
-1391:3:2087
-1392:3:2088
-1393:0:3107
-1394:3:2100
-1395:0:3107
-1396:3:2102
-1397:0:3107
-1398:3:2103
-1399:3:2107
-1400:3:2108
-1401:3:2116
-1402:3:2117
-1403:3:2121
-1404:3:2122
-1405:3:2130
-1406:3:2135
-1407:3:2139
-1408:3:2140
-1409:3:2147
-1410:3:2148
-1411:3:2159
-1412:3:2160
-1413:3:2161
-1414:3:2172
-1415:3:2177
-1416:3:2178
-1417:0:3107
-1418:3:2190
-1419:0:3107
-1420:3:2192
-1421:0:3107
-1422:3:2195
-1423:3:2196
-1424:3:2208
-1425:3:2209
-1426:3:2213
-1427:3:2214
-1428:3:2222
-1429:3:2227
-1430:3:2231
-1431:3:2232
-1432:3:2239
-1433:3:2240
-1434:3:2251
-1435:3:2252
-1436:3:2253
-1437:3:2264
-1438:3:2269
-1439:3:2270
-1440:0:3107
-1441:3:2282
-1442:0:3107
-1443:3:2284
-1444:0:3107
-1445:3:2285
-1446:0:3107
-1447:3:2286
-1448:0:3107
-1449:3:2287
-1450:0:3107
-1451:3:2288
-1452:3:2292
-1453:3:2293
-1454:3:2301
-1455:3:2302
-1456:3:2306
-1457:3:2307
-1458:3:2315
-1459:3:2320
-1460:3:2324
-1461:3:2325
-1462:3:2332
-1463:3:2333
-1464:3:2344
-1465:3:2345
-1466:3:2346
-1467:3:2357
-1468:3:2362
-1469:3:2363
-1470:0:3107
-1471:3:2375
-1472:0:3107
-1473:3:2656
-1474:0:3107
-1475:3:2754
-1476:0:3107
-1477:3:2755
-1478:0:3107
-1479:3:2759
-1480:0:3107
-1481:3:2765
-1482:3:2769
-1483:3:2770
-1484:3:2778
-1485:3:2779
-1486:3:2783
-1487:3:2784
-1488:3:2792
-1489:3:2797
-1490:3:2801
-1491:3:2802
-1492:3:2809
-1493:3:2810
-1494:3:2821
-1495:3:2822
-1496:3:2823
-1497:3:2834
-1498:3:2839
-1499:3:2840
-1500:0:3107
-1501:3:2855
-1502:0:3107
-1503:3:2856
-1504:3:2860
-1505:3:2861
-1506:3:2869
-1507:3:2870
-1508:3:2874
-1509:3:2875
-1510:3:2883
-1511:3:2888
-1512:3:2892
-1513:3:2893
-1514:3:2900
-1515:3:2901
-1516:3:2912
-1517:3:2913
-1518:3:2914
-1519:3:2925
-1520:3:2930
-1521:3:2931
-1522:0:3107
-1523:3:2946
-1524:0:3107
-1525:3:2951
-1526:3:2955
-1527:3:2956
-1528:3:2964
-1529:3:2965
-1530:3:2969
-1531:3:2970
-1532:3:2978
-1533:3:2983
-1534:3:2987
-1535:3:2988
-1536:3:2995
-1537:3:2996
-1538:3:3007
-1539:3:3008
-1540:3:3009
-1541:3:3020
-1542:3:3025
-1543:3:3026
-1544:0:3107
-1545:3:3041
-1546:0:3107
-1547:3:3043
-1548:0:3107
-1549:3:3044
-1550:0:3107
-1551:3:876
-1552:0:3107
-1553:3:877
-1554:3:881
-1555:3:882
-1556:3:890
-1557:3:891
-1558:3:895
-1559:3:896
-1560:3:904
-1561:3:909
-1562:3:913
-1563:3:914
-1564:3:921
-1565:3:922
-1566:3:933
-1567:3:934
-1568:3:935
-1569:3:946
-1570:3:951
-1571:3:952
-1572:0:3107
-1573:3:964
-1574:0:3107
-1575:3:966
-1576:3:967
-1577:0:3107
-1578:3:971
-1579:3:975
-1580:3:976
-1581:3:984
-1582:3:985
-1583:3:989
-1584:3:990
-1585:3:998
-1586:3:1011
-1587:3:1012
-1588:3:1015
-1589:3:1016
-1590:3:1027
-1591:3:1028
-1592:3:1029
-1593:3:1040
-1594:3:1045
-1595:3:1048
-1596:3:1049
-1597:0:3107
-1598:3:1058
-1599:0:3107
-1600:3:1060
-1601:0:3107
-1602:3:1061
-1603:0:3107
-1604:3:1071
-1605:0:3107
-1606:3:1072
-1607:3:1076
-1608:3:1077
-1609:3:1085
-1610:3:1086
-1611:3:1090
-1612:3:1091
-1613:3:1099
-1614:3:1112
-1615:3:1113
-1616:3:1116
-1617:3:1117
-1618:3:1128
-1619:3:1129
-1620:3:1130
-1621:3:1141
-1622:3:1146
-1623:3:1149
-1624:3:1150
-1625:0:3107
-1626:3:1162
-1627:0:3107
-1628:3:1163
-1629:3:1167
-1630:3:1168
-1631:3:1176
-1632:3:1177
-1633:3:1181
-1634:3:1182
-1635:3:1190
-1636:3:1203
-1637:3:1204
-1638:3:1207
-1639:3:1208
-1640:3:1219
-1641:3:1220
-1642:3:1221
-1643:3:1232
-1644:3:1237
-1645:3:1240
-1646:3:1241
-1647:0:3107
-1648:3:1253
-1649:0:3107
-1650:3:1258
-1651:3:1262
-1652:3:1263
-1653:3:1271
-1654:3:1272
-1655:3:1276
-1656:3:1277
-1657:3:1285
-1658:3:1298
-1659:3:1299
-1660:3:1302
-1661:3:1303
-1662:3:1314
-1663:3:1315
-1664:3:1316
-1665:3:1327
-1666:3:1332
-1667:3:1335
-1668:3:1336
-1669:0:3107
-1670:3:1348
-1671:0:3107
-1672:3:1350
-1673:0:3107
-1674:3:1351
-1675:3:1355
-1676:3:1356
-1677:3:1364
-1678:3:1365
-1679:3:1369
-1680:3:1370
-1681:3:1378
-1682:3:1391
-1683:3:1392
-1684:3:1395
-1685:3:1396
-1686:3:1407
-1687:3:1408
-1688:3:1409
-1689:3:1420
-1690:3:1425
-1691:3:1428
-1692:3:1429
-1693:0:3107
-1694:3:1438
-1695:0:3107
-1696:3:1440
-1697:0:3107
-1698:3:1443
-1699:3:1444
-1700:3:1456
-1701:3:1457
-1702:3:1461
-1703:3:1462
-1704:3:1470
-1705:3:1483
-1706:3:1484
-1707:3:1487
-1708:3:1488
-1709:3:1499
-1710:3:1500
-1711:3:1501
-1712:3:1512
-1713:3:1517
-1714:3:1520
-1715:3:1521
-1716:0:3107
-1717:3:1530
-1718:0:3107
-1719:3:1532
-1720:0:3107
-1721:3:1533
-1722:0:3107
-1723:3:1534
-1724:0:3107
-1725:3:1535
-1726:0:3107
-1727:3:1536
-1728:3:1540
-1729:3:1541
-1730:3:1549
-1731:3:1550
-1732:3:1554
-1733:3:1555
-1734:3:1563
-1735:3:1576
-1736:3:1577
-1737:3:1580
-1738:3:1581
-1739:3:1592
-1740:3:1593
-1741:3:1594
-1742:3:1605
-1743:3:1610
-1744:3:1613
-1745:3:1614
-1746:0:3107
-1747:3:1623
-1748:0:3107
-1749:3:1904
-1750:0:3107
-1751:3:2002
-1752:0:3107
-1753:3:2003
-1754:0:3107
-1755:3:2007
-1756:0:3107
-1757:3:2013
-1758:3:2017
-1759:3:2018
-1760:3:2026
-1761:3:2027
-1762:3:2031
-1763:3:2032
-1764:3:2040
-1765:3:2053
-1766:3:2054
-1767:3:2057
-1768:3:2058
-1769:3:2069
-1770:3:2070
-1771:3:2071
-1772:3:2082
-1773:3:2087
-1774:3:2090
-1775:3:2091
-1776:0:3107
-1777:3:2100
-1778:0:3107
-1779:3:2102
-1780:0:3107
-1781:3:2103
-1782:3:2107
-1783:3:2108
-1784:3:2116
-1785:3:2117
-1786:3:2121
-1787:3:2122
-1788:3:2130
-1789:3:2143
-1790:3:2144
-1791:3:2147
-1792:3:2148
-1793:3:2159
-1794:3:2160
-1795:3:2161
-1796:3:2172
-1797:3:2177
-1798:3:2180
-1799:3:2181
-1800:0:3107
-1801:3:2190
-1802:0:3107
-1803:3:2192
-1804:0:3107
-1805:3:2195
-1806:3:2196
-1807:3:2208
-1808:3:2209
-1809:3:2213
-1810:3:2214
-1811:3:2222
-1812:3:2235
-1813:3:2236
-1814:3:2239
-1815:3:2240
-1816:3:2251
-1817:3:2252
-1818:3:2253
-1819:3:2264
-1820:3:2269
-1821:3:2272
-1822:3:2273
-1823:0:3107
-1824:3:2282
-1825:0:3107
-1826:3:2284
-1827:0:3107
-1828:3:2285
-1829:0:3107
-1830:3:2286
-1831:0:3107
-1832:3:2287
-1833:0:3107
-1834:3:2288
-1835:3:2292
-1836:3:2293
-1837:3:2301
-1838:3:2302
-1839:3:2306
-1840:3:2307
-1841:3:2315
-1842:3:2328
-1843:3:2329
-1844:3:2332
-1845:3:2333
-1846:3:2344
-1847:3:2345
-1848:3:2346
-1849:3:2357
-1850:3:2362
-1851:3:2365
-1852:3:2366
-1853:0:3107
-1854:3:2375
-1855:0:3107
-1856:3:2656
-1857:0:3107
-1858:3:2754
-1859:0:3107
-1860:3:2755
-1861:0:3107
-1862:3:2759
-1863:0:3107
-1864:3:2765
-1865:3:2769
-1866:3:2770
-1867:3:2778
-1868:3:2779
-1869:3:2783
-1870:3:2784
-1871:3:2792
-1872:3:2805
-1873:3:2806
-1874:3:2809
-1875:3:2810
-1876:3:2821
-1877:3:2822
-1878:3:2823
-1879:3:2834
-1880:3:2839
-1881:3:2842
-1882:3:2843
-1883:0:3107
-1884:3:2855
-1885:0:3107
-1886:3:2856
-1887:3:2860
-1888:3:2861
-1889:3:2869
-1890:3:2870
-1891:3:2874
-1892:3:2875
-1893:3:2883
-1894:3:2896
-1895:3:2897
-1896:3:2900
-1897:3:2901
-1898:3:2912
-1899:3:2913
-1900:3:2914
-1901:3:2925
-1902:3:2930
-1903:3:2933
-1904:3:2934
-1905:0:3107
-1906:3:2946
-1907:0:3107
-1908:3:2951
-1909:3:2955
-1910:3:2956
-1911:3:2964
-1912:3:2965
-1913:3:2969
-1914:3:2970
-1915:3:2978
-1916:3:2991
-1917:3:2992
-1918:3:2995
-1919:3:2996
-1920:3:3007
-1921:3:3008
-1922:3:3009
-1923:3:3020
-1924:3:3025
-1925:3:3028
-1926:3:3029
-1927:0:3107
-1928:3:3041
-1929:0:3107
-1930:3:3043
-1931:0:3107
-1932:3:3044
-1933:0:3107
-1934:3:3047
-1935:0:3107
-1936:3:3052
-1937:0:3107
-1938:2:458
-1939:0:3107
-1940:3:3053
-1941:0:3107
-1942:2:464
-1943:0:3107
-1944:3:3052
-1945:0:3107
-1946:2:465
-1947:0:3107
-1948:3:3053
-1949:0:3107
-1950:2:466
-1951:0:3107
-1952:3:3052
-1953:0:3107
-1954:2:467
-1955:0:3107
-1956:3:3053
-1957:0:3107
-1958:1:2
-1959:0:3107
-1960:3:3052
-1961:0:3107
-1962:2:468
-1963:0:3107
-1964:3:3053
-1965:0:3107
-1966:1:8
-1967:0:3107
-1968:3:3052
-1969:0:3107
-1970:2:467
-1971:0:3107
-1972:3:3053
-1973:0:3107
-1974:1:9
-1975:0:3107
-1976:3:3052
-1977:0:3107
-1978:2:468
-1979:0:3107
-1980:3:3053
-1981:0:3107
-1982:1:10
-1983:0:3107
-1984:3:3052
-1985:0:3107
-1986:2:467
-1987:0:3107
-1988:3:3053
-1989:0:3107
-1990:1:11
-1991:0:3107
-1992:3:3052
-1993:0:3107
-1994:2:468
-1995:0:3107
-1996:3:3053
-1997:0:3107
-1998:1:12
-1999:1:16
-2000:1:17
-2001:1:25
-2002:1:26
-2003:1:30
-2004:1:31
-2005:1:39
-2006:1:44
-2007:1:48
-2008:1:49
-2009:1:56
-2010:1:57
-2011:1:68
-2012:1:69
-2013:1:70
-2014:1:81
-2015:1:86
-2016:1:87
-2017:0:3107
-2018:3:3052
-2019:0:3107
-2020:2:467
-2021:0:3107
-2022:3:3053
-2023:0:3107
-2024:1:99
-2025:0:3107
-2026:3:3052
-2027:0:3107
-2028:2:468
-2029:0:3107
-2030:3:3053
-2031:0:3107
-2032:2:469
-2033:0:3107
-2034:3:3052
-2035:0:3107
-2036:2:475
-2037:0:3107
-2038:3:3053
-2039:0:3107
-2040:2:476
-2041:0:3107
-2042:3:3052
-2043:0:3107
-2044:2:477
-2045:2:481
-2046:2:482
-2047:2:490
-2048:2:491
-2049:2:495
-2050:2:496
-2051:2:504
-2052:2:509
-2053:2:513
-2054:2:514
-2055:2:521
-2056:2:522
-2057:2:533
-2058:2:534
-2059:2:535
-2060:2:546
-2061:2:551
-2062:2:552
-2063:0:3107
-2064:3:3053
-2065:0:3107
-2066:2:564
-2067:0:3107
-2068:3:3052
-2069:0:3107
-2070:2:565
-2071:2:569
-2072:2:570
-2073:2:578
-2074:2:579
-2075:2:583
-2076:2:584
-2077:2:592
-2078:2:597
-2079:2:601
-2080:2:602
-2081:2:609
-2082:2:610
-2083:2:621
-2084:2:622
-2085:2:623
-2086:2:634
-2087:2:639
-2088:2:640
-2089:0:3107
-2090:3:3053
-2091:0:3107
-2092:2:652
-2093:0:3107
-2094:3:3052
-2095:0:3107
-2096:2:653
-2097:0:3107
-2098:3:3053
-2099:0:3107
-2100:2:654
-2101:2:658
-2102:2:659
-2103:2:667
-2104:2:668
-2105:2:672
-2106:2:673
-2107:2:681
-2108:2:686
-2109:2:690
-2110:2:691
-2111:2:698
-2112:2:699
-2113:2:710
-2114:2:711
-2115:2:712
-2116:2:723
-2117:2:728
-2118:2:729
-2119:0:3107
-2120:3:3052
-2121:0:3107
-2122:2:741
-2123:0:3107
-2124:3:3053
-2125:0:3107
-2126:2:750
-2127:0:3107
-2128:3:3052
-2129:0:3107
-2130:2:753
-2131:0:3107
-2132:3:3053
-2133:0:3107
-2134:2:758
-2135:0:3107
-2136:3:3052
-2137:0:3107
-2138:2:759
-2139:0:3105
-2140:3:3053
-2141:0:3111
-2142:2:647
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.define b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 5bcef22..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-Depth=    5678 States=    1e+06 Transitions= 8.21e+06 Memory=   534.904        t=   6.72 R=   1e+05
-Depth=    5678 States=    2e+06 Transitions=  1.6e+07 Memory=   603.557        t=   13.4 R=   1e+05
-Depth=   16003 States=    3e+06 Transitions= 2.49e+07 Memory=   672.209        t=   21.5 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=   31043 States=    4e+06 Transitions= 3.44e+07 Memory=   771.983        t=   30.1 R=   1e+05
-Depth=   31043 States=    5e+06 Transitions= 4.41e+07 Memory=   840.635        t=   38.4 R=   1e+05
-Depth=   31043 States=    6e+06 Transitions= 5.25e+07 Memory=   909.287        t=   45.7 R=   1e+05
-Depth=   31043 States=    7e+06 Transitions= 6.12e+07 Memory=   977.940        t=   53.4 R=   1e+05
-Depth=   31043 States=    8e+06 Transitions= 6.95e+07 Memory=  1046.690        t=   60.8 R=   1e+05
-Depth=   31043 States=    9e+06 Transitions= 7.78e+07 Memory=  1115.342        t=   68.5 R=   1e+05
-pan: resizing hashtable to -w24..  done
-Depth=   31043 States=    1e+07 Transitions= 8.68e+07 Memory=  1308.088        t=   77.9 R=   1e+05
-Depth=   31043 States=  1.1e+07 Transitions= 1.01e+08 Memory=  1376.740        t=   90.1 R=   1e+05
-Depth=   31043 States=  1.2e+07 Transitions= 1.13e+08 Memory=  1445.393        t=    101 R=   1e+05
-Depth=   31043 States=  1.3e+07 Transitions= 1.25e+08 Memory=  1514.045        t=    111 R=   1e+05
-Depth=   31043 States=  1.4e+07 Transitions= 1.38e+08 Memory=  1582.795        t=    122 R=   1e+05
-pan: claim violated! (at depth 1774)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 31043, errors: 1
- 14288659 states, stored
-1.2755714e+08 states, matched
-1.418458e+08 transitions (= stored+matched)
-4.6616273e+08 atomic steps
-hash conflicts:  65726574 (resolved)
-
-Stats on memory usage (in Megabytes):
- 1253.659      equivalent memory usage for states (stored*(State-vector + overhead))
- 1017.191      actual memory usage for states (compression: 81.14%)
-               state-vector as stored = 47 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1602.619      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 175, "pan.___", state 243, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 265, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 291, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 304, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 320, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 334, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 352, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 365, "(1)"
-       line 413, "pan.___", state 378, "(1)"
-       line 418, "pan.___", state 395, "(1)"
-       line 399, "pan.___", state 414, "(1)"
-       line 403, "pan.___", state 426, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 444, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 470, "(1)"
-       line 418, "pan.___", state 487, "(1)"
-       line 403, "pan.___", state 519, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 537, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 563, "(1)"
-       line 418, "pan.___", state 580, "(1)"
-       line 179, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 175, "pan.___", state 629, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 651, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 677, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 690, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 714, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 716, "(1)"
-       line 399, "pan.___", state 717, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 717, "else"
-       line 399, "pan.___", state 720, "(1)"
-       line 403, "pan.___", state 728, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 730, "(1)"
-       line 403, "pan.___", state 731, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 731, "else"
-       line 403, "pan.___", state 734, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 401, "pan.___", state 740, "((i<1))"
-       line 401, "pan.___", state 740, "((i>=1))"
-       line 408, "pan.___", state 746, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 759, "(1)"
-       line 409, "pan.___", state 760, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 760, "else"
-       line 409, "pan.___", state 763, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 413, "pan.___", state 772, "(1)"
-       line 413, "pan.___", state 773, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 773, "else"
-       line 413, "pan.___", state 776, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 411, "pan.___", state 782, "((i<1))"
-       line 411, "pan.___", state 782, "((i>=1))"
-       line 418, "pan.___", state 789, "(1)"
-       line 418, "pan.___", state 790, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 790, "else"
-       line 418, "pan.___", state 793, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 403, "pan.___", state 828, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 846, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 872, "(1)"
-       line 418, "pan.___", state 889, "(1)"
-       line 403, "pan.___", state 918, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 936, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 979, "(1)"
-       line 399, "pan.___", state 998, "(1)"
-       line 403, "pan.___", state 1010, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1028, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1054, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 403, "pan.___", state 1103, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1121, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1147, "(1)"
-       line 418, "pan.___", state 1164, "(1)"
-       line 179, "pan.___", state 1187, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1200, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 175, "pan.___", state 1213, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1235, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1252, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1261, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1300, "(1)"
-       line 399, "pan.___", state 1301, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1301, "else"
-       line 399, "pan.___", state 1304, "(1)"
-       line 403, "pan.___", state 1312, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1314, "(1)"
-       line 403, "pan.___", state 1315, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1315, "else"
-       line 403, "pan.___", state 1318, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 401, "pan.___", state 1324, "((i<1))"
-       line 401, "pan.___", state 1324, "((i>=1))"
-       line 408, "pan.___", state 1330, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1343, "(1)"
-       line 409, "pan.___", state 1344, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 1344, "else"
-       line 409, "pan.___", state 1347, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 413, "pan.___", state 1356, "(1)"
-       line 413, "pan.___", state 1357, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 1357, "else"
-       line 413, "pan.___", state 1360, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 411, "pan.___", state 1366, "((i<1))"
-       line 411, "pan.___", state 1366, "((i>=1))"
-       line 418, "pan.___", state 1373, "(1)"
-       line 418, "pan.___", state 1374, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 1374, "else"
-       line 418, "pan.___", state 1377, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 179, "pan.___", state 1406, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1419, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 175, "pan.___", state 1432, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1454, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1471, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1480, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1493, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 702, "pan.___", state 1520, "-end-"
-       (144 of 1520 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 125 seconds
-pan: rate 114108.44 states/second
-pan: avg transition delay 8.8279e-07 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index ccf5f5c..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_RMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 1e5e132..0000000
+++ /dev/null
@@ -1,1777 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2435
-2:4:2387
-3:4:2390
-4:4:2390
-5:4:2393
-6:4:2401
-7:4:2401
-8:4:2404
-9:4:2410
-10:4:2414
-11:4:2414
-12:4:2417
-13:4:2425
-14:4:2429
-15:4:2430
-16:0:2435
-17:4:2432
-18:0:2435
-19:3:869
-20:0:2435
-21:3:875
-22:0:2435
-23:3:876
-24:0:2435
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:2435
-45:3:964
-46:0:2435
-47:3:966
-48:3:967
-49:0:2435
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:2435
-69:3:1058
-70:0:2435
-71:3:1060
-72:0:2435
-73:3:1061
-74:0:2435
-75:3:1071
-76:0:2435
-77:3:1075
-78:3:1076
-79:3:1080
-80:3:1084
-81:3:1085
-82:3:1089
-83:3:1097
-84:3:1098
-85:0:2435
-86:3:1106
-87:0:2435
-88:3:1110
-89:3:1111
-90:3:1115
-91:3:1119
-92:3:1120
-93:3:1124
-94:3:1132
-95:3:1133
-96:0:2435
-97:3:1141
-98:0:2435
-99:3:1149
-100:3:1150
-101:3:1154
-102:3:1158
-103:3:1159
-104:3:1163
-105:3:1171
-106:3:1172
-107:0:2435
-108:3:1180
-109:0:2435
-110:3:1182
-111:0:2435
-112:3:1183
-113:3:1187
-114:3:1188
-115:3:1196
-116:3:1197
-117:3:1201
-118:3:1202
-119:3:1210
-120:3:1215
-121:3:1219
-122:3:1220
-123:3:1227
-124:3:1228
-125:3:1239
-126:3:1240
-127:3:1241
-128:3:1252
-129:3:1257
-130:3:1258
-131:0:2435
-132:3:1270
-133:0:2435
-134:3:1272
-135:0:2435
-136:3:1275
-137:3:1276
-138:3:1288
-139:3:1289
-140:3:1293
-141:3:1294
-142:3:1302
-143:3:1307
-144:3:1311
-145:3:1312
-146:3:1319
-147:3:1320
-148:3:1331
-149:3:1332
-150:3:1333
-151:3:1344
-152:3:1349
-153:3:1350
-154:0:2435
-155:3:1362
-156:0:2435
-157:3:1364
-158:0:2435
-159:3:1365
-160:0:2435
-161:3:1366
-162:0:2435
-163:3:1367
-164:0:2435
-165:3:1368
-166:3:1372
-167:3:1373
-168:3:1381
-169:3:1382
-170:3:1386
-171:3:1387
-172:3:1395
-173:3:1400
-174:3:1404
-175:3:1405
-176:3:1412
-177:3:1413
-178:3:1424
-179:3:1425
-180:3:1426
-181:3:1437
-182:3:1442
-183:3:1443
-184:0:2435
-185:3:1455
-186:0:2435
-187:3:1568
-188:0:2435
-189:3:1666
-190:0:2435
-191:3:1667
-192:0:2435
-193:3:1671
-194:0:2435
-195:3:1677
-196:3:1681
-197:3:1682
-198:3:1690
-199:3:1691
-200:3:1695
-201:3:1696
-202:3:1704
-203:3:1709
-204:3:1713
-205:3:1714
-206:3:1721
-207:3:1722
-208:3:1733
-209:3:1734
-210:3:1735
-211:3:1746
-212:3:1751
-213:3:1752
-214:0:2435
-215:3:1764
-216:0:2435
-217:3:1766
-218:0:2435
-219:3:1767
-220:3:1771
-221:3:1772
-222:3:1780
-223:3:1781
-224:3:1785
-225:3:1786
-226:3:1794
-227:3:1799
-228:3:1803
-229:3:1804
-230:3:1811
-231:3:1812
-232:3:1823
-233:3:1824
-234:3:1825
-235:3:1836
-236:3:1841
-237:3:1842
-238:0:2435
-239:3:1854
-240:0:2435
-241:3:1856
-242:0:2435
-243:3:1859
-244:3:1860
-245:3:1872
-246:3:1873
-247:3:1877
-248:3:1878
-249:3:1886
-250:3:1891
-251:3:1895
-252:3:1896
-253:3:1903
-254:3:1904
-255:3:1915
-256:3:1916
-257:3:1917
-258:3:1928
-259:3:1933
-260:3:1934
-261:0:2435
-262:3:1946
-263:0:2435
-264:3:1948
-265:0:2435
-266:3:1949
-267:0:2435
-268:3:1950
-269:0:2435
-270:3:1951
-271:0:2435
-272:3:1952
-273:3:1956
-274:3:1957
-275:3:1965
-276:3:1966
-277:3:1970
-278:3:1971
-279:3:1979
-280:3:1984
-281:3:1988
-282:3:1989
-283:3:1996
-284:3:1997
-285:3:2008
-286:3:2009
-287:3:2010
-288:3:2021
-289:3:2026
-290:3:2027
-291:0:2435
-292:3:2039
-293:0:2435
-294:3:2152
-295:0:2435
-296:3:2250
-297:0:2435
-298:3:2251
-299:0:2435
-300:3:2255
-301:0:2435
-302:3:2264
-303:3:2265
-304:3:2269
-305:3:2273
-306:3:2274
-307:3:2278
-308:3:2286
-309:3:2287
-310:0:2435
-311:3:2295
-312:0:2435
-313:3:2299
-314:3:2300
-315:3:2304
-316:3:2308
-317:3:2309
-318:3:2313
-319:3:2321
-320:3:2322
-321:0:2435
-322:3:2330
-323:0:2435
-324:3:2338
-325:3:2339
-326:3:2343
-327:3:2347
-328:3:2348
-329:3:2352
-330:3:2360
-331:3:2361
-332:0:2435
-333:3:2369
-334:0:2435
-335:3:2371
-336:0:2435
-337:3:2372
-338:0:2435
-339:3:876
-340:0:2435
-341:3:877
-342:3:881
-343:3:882
-344:3:890
-345:3:891
-346:3:895
-347:3:896
-348:3:904
-349:3:909
-350:3:913
-351:3:914
-352:3:921
-353:3:922
-354:3:933
-355:3:934
-356:3:935
-357:3:946
-358:3:951
-359:3:952
-360:0:2435
-361:3:964
-362:0:2435
-363:3:966
-364:3:967
-365:0:2435
-366:3:971
-367:3:975
-368:3:976
-369:3:984
-370:3:985
-371:3:989
-372:3:990
-373:3:998
-374:3:1003
-375:3:1004
-376:3:1015
-377:3:1016
-378:3:1027
-379:3:1028
-380:3:1029
-381:3:1040
-382:3:1045
-383:3:1046
-384:0:2435
-385:3:1058
-386:0:2435
-387:3:1060
-388:0:2435
-389:3:1061
-390:0:2435
-391:3:1071
-392:0:2435
-393:3:1075
-394:3:1076
-395:3:1080
-396:3:1084
-397:3:1085
-398:3:1089
-399:3:1097
-400:3:1098
-401:0:2435
-402:3:1106
-403:0:2435
-404:3:1110
-405:3:1111
-406:3:1115
-407:3:1119
-408:3:1120
-409:3:1124
-410:3:1132
-411:3:1133
-412:0:2435
-413:3:1141
-414:0:2435
-415:3:1149
-416:3:1150
-417:3:1154
-418:3:1158
-419:3:1159
-420:3:1163
-421:3:1171
-422:3:1172
-423:0:2435
-424:3:1180
-425:0:2435
-426:3:1182
-427:0:2435
-428:3:1183
-429:3:1187
-430:3:1188
-431:3:1196
-432:3:1197
-433:3:1201
-434:3:1202
-435:3:1210
-436:3:1215
-437:3:1219
-438:3:1220
-439:3:1227
-440:3:1228
-441:3:1239
-442:3:1240
-443:3:1241
-444:3:1252
-445:3:1257
-446:3:1258
-447:0:2435
-448:3:1270
-449:0:2435
-450:3:1272
-451:0:2435
-452:3:1275
-453:3:1276
-454:3:1288
-455:3:1289
-456:3:1293
-457:3:1294
-458:3:1302
-459:3:1307
-460:3:1311
-461:3:1312
-462:3:1319
-463:3:1320
-464:3:1331
-465:3:1332
-466:3:1333
-467:3:1344
-468:3:1349
-469:3:1350
-470:0:2435
-471:3:1362
-472:0:2435
-473:3:1364
-474:0:2435
-475:3:1365
-476:0:2435
-477:3:1366
-478:0:2435
-479:3:1367
-480:0:2435
-481:3:1368
-482:3:1372
-483:3:1373
-484:3:1381
-485:3:1382
-486:3:1386
-487:3:1387
-488:3:1395
-489:3:1400
-490:3:1404
-491:3:1405
-492:3:1412
-493:3:1413
-494:3:1424
-495:3:1425
-496:3:1426
-497:3:1437
-498:3:1442
-499:3:1443
-500:0:2435
-501:3:1455
-502:0:2435
-503:3:1568
-504:0:2435
-505:3:1666
-506:0:2435
-507:3:1667
-508:0:2435
-509:3:1671
-510:0:2435
-511:3:1677
-512:3:1681
-513:3:1682
-514:3:1690
-515:3:1691
-516:3:1695
-517:3:1696
-518:3:1704
-519:3:1709
-520:3:1713
-521:3:1714
-522:3:1721
-523:3:1722
-524:3:1733
-525:3:1734
-526:3:1735
-527:3:1746
-528:3:1751
-529:3:1752
-530:0:2435
-531:3:1764
-532:0:2435
-533:3:1766
-534:0:2435
-535:3:1767
-536:3:1771
-537:3:1772
-538:3:1780
-539:3:1781
-540:3:1785
-541:3:1786
-542:3:1794
-543:3:1799
-544:3:1803
-545:3:1804
-546:3:1811
-547:3:1812
-548:3:1823
-549:3:1824
-550:3:1825
-551:3:1836
-552:3:1841
-553:3:1842
-554:0:2435
-555:3:1854
-556:0:2435
-557:3:1856
-558:0:2435
-559:3:1859
-560:3:1860
-561:3:1872
-562:3:1873
-563:3:1877
-564:3:1878
-565:3:1886
-566:3:1891
-567:3:1895
-568:3:1896
-569:3:1903
-570:3:1904
-571:3:1915
-572:3:1916
-573:3:1917
-574:3:1928
-575:3:1933
-576:3:1934
-577:0:2435
-578:3:1946
-579:0:2435
-580:3:1948
-581:0:2435
-582:3:1949
-583:0:2435
-584:3:1950
-585:0:2435
-586:3:1951
-587:0:2435
-588:3:1952
-589:3:1956
-590:3:1957
-591:3:1965
-592:3:1966
-593:3:1970
-594:3:1971
-595:3:1979
-596:3:1984
-597:3:1988
-598:3:1989
-599:3:1996
-600:3:1997
-601:3:2008
-602:3:2009
-603:3:2010
-604:3:2021
-605:3:2026
-606:3:2027
-607:0:2435
-608:3:2039
-609:0:2435
-610:3:2152
-611:0:2435
-612:3:2250
-613:0:2435
-614:3:2251
-615:0:2435
-616:3:2255
-617:0:2435
-618:3:2264
-619:3:2265
-620:3:2269
-621:3:2273
-622:3:2274
-623:3:2278
-624:3:2286
-625:3:2287
-626:0:2435
-627:3:2295
-628:0:2435
-629:3:2299
-630:3:2300
-631:3:2304
-632:3:2308
-633:3:2309
-634:3:2313
-635:3:2321
-636:3:2322
-637:0:2435
-638:3:2330
-639:0:2435
-640:3:2338
-641:3:2339
-642:3:2343
-643:3:2347
-644:3:2348
-645:3:2352
-646:3:2360
-647:3:2361
-648:0:2435
-649:3:2369
-650:0:2435
-651:3:2371
-652:0:2435
-653:3:2372
-654:0:2435
-655:3:876
-656:0:2435
-657:3:877
-658:3:881
-659:3:882
-660:3:890
-661:3:891
-662:3:895
-663:3:896
-664:3:904
-665:3:909
-666:3:913
-667:3:914
-668:3:921
-669:3:922
-670:3:933
-671:3:934
-672:3:935
-673:3:946
-674:3:951
-675:3:952
-676:0:2435
-677:3:964
-678:0:2435
-679:3:966
-680:3:967
-681:0:2435
-682:3:971
-683:3:975
-684:3:976
-685:3:984
-686:3:985
-687:3:989
-688:3:990
-689:3:998
-690:3:1003
-691:3:1004
-692:3:1015
-693:3:1016
-694:3:1027
-695:3:1028
-696:3:1029
-697:3:1040
-698:3:1045
-699:3:1046
-700:0:2435
-701:3:1058
-702:0:2435
-703:3:1060
-704:0:2435
-705:3:1061
-706:0:2435
-707:3:1071
-708:0:2435
-709:3:1075
-710:3:1076
-711:3:1080
-712:3:1084
-713:3:1085
-714:3:1089
-715:3:1097
-716:3:1098
-717:0:2435
-718:3:1106
-719:0:2435
-720:3:1110
-721:3:1111
-722:3:1115
-723:3:1119
-724:3:1120
-725:3:1124
-726:3:1132
-727:3:1133
-728:0:2435
-729:3:1141
-730:0:2435
-731:3:1149
-732:3:1150
-733:3:1154
-734:3:1158
-735:3:1159
-736:3:1163
-737:3:1171
-738:3:1172
-739:0:2435
-740:3:1180
-741:0:2435
-742:3:1182
-743:0:2435
-744:3:1183
-745:3:1187
-746:3:1188
-747:3:1196
-748:3:1197
-749:3:1201
-750:3:1202
-751:3:1210
-752:3:1215
-753:3:1219
-754:3:1220
-755:3:1227
-756:3:1228
-757:3:1239
-758:3:1240
-759:3:1241
-760:3:1252
-761:3:1257
-762:3:1258
-763:0:2435
-764:3:1270
-765:0:2435
-766:3:1272
-767:0:2435
-768:3:1275
-769:3:1276
-770:3:1288
-771:3:1289
-772:3:1293
-773:3:1294
-774:3:1302
-775:3:1307
-776:3:1311
-777:3:1312
-778:3:1319
-779:3:1320
-780:3:1331
-781:3:1332
-782:3:1333
-783:3:1344
-784:3:1349
-785:3:1350
-786:0:2435
-787:3:1362
-788:0:2435
-789:3:1364
-790:0:2435
-791:3:1365
-792:0:2435
-793:3:1366
-794:0:2435
-795:3:1367
-796:0:2435
-797:3:1368
-798:3:1372
-799:3:1373
-800:3:1381
-801:3:1382
-802:3:1386
-803:3:1387
-804:3:1395
-805:3:1400
-806:3:1404
-807:3:1405
-808:3:1412
-809:3:1413
-810:3:1424
-811:3:1425
-812:3:1426
-813:3:1437
-814:3:1442
-815:3:1443
-816:0:2435
-817:3:1455
-818:0:2435
-819:3:1568
-820:0:2435
-821:3:1666
-822:0:2435
-823:3:1667
-824:0:2435
-825:3:1671
-826:0:2435
-827:3:1677
-828:3:1681
-829:3:1682
-830:3:1690
-831:3:1691
-832:3:1695
-833:3:1696
-834:3:1704
-835:3:1709
-836:3:1713
-837:3:1714
-838:3:1721
-839:3:1722
-840:3:1733
-841:3:1734
-842:3:1735
-843:3:1746
-844:3:1751
-845:3:1752
-846:0:2435
-847:3:1764
-848:0:2435
-849:3:1766
-850:0:2435
-851:3:1767
-852:3:1771
-853:3:1772
-854:3:1780
-855:3:1781
-856:3:1785
-857:3:1786
-858:3:1794
-859:3:1799
-860:3:1803
-861:3:1804
-862:3:1811
-863:3:1812
-864:3:1823
-865:3:1824
-866:3:1825
-867:3:1836
-868:3:1841
-869:3:1842
-870:0:2435
-871:3:1854
-872:0:2435
-873:3:1856
-874:0:2435
-875:3:1859
-876:3:1860
-877:3:1872
-878:3:1873
-879:3:1877
-880:3:1878
-881:3:1886
-882:3:1891
-883:3:1895
-884:3:1896
-885:3:1903
-886:3:1904
-887:3:1915
-888:3:1916
-889:3:1917
-890:3:1928
-891:3:1933
-892:3:1934
-893:0:2435
-894:3:1946
-895:0:2435
-896:3:1948
-897:0:2435
-898:3:1949
-899:0:2435
-900:3:1950
-901:0:2435
-902:3:1951
-903:0:2435
-904:3:1952
-905:3:1956
-906:3:1957
-907:3:1965
-908:3:1966
-909:3:1970
-910:3:1971
-911:3:1979
-912:3:1984
-913:3:1988
-914:3:1989
-915:3:1996
-916:3:1997
-917:3:2008
-918:3:2009
-919:3:2010
-920:3:2021
-921:3:2026
-922:3:2027
-923:0:2435
-924:3:2039
-925:0:2435
-926:3:2152
-927:0:2435
-928:3:2250
-929:0:2435
-930:3:2251
-931:0:2435
-932:3:2255
-933:0:2435
-934:3:2264
-935:3:2265
-936:3:2269
-937:3:2273
-938:3:2274
-939:3:2278
-940:3:2286
-941:3:2287
-942:0:2435
-943:3:2295
-944:0:2435
-945:3:2299
-946:3:2300
-947:3:2304
-948:3:2308
-949:3:2309
-950:3:2313
-951:3:2321
-952:3:2322
-953:0:2435
-954:3:2330
-955:0:2435
-956:3:2338
-957:3:2339
-958:3:2343
-959:3:2347
-960:3:2348
-961:3:2352
-962:3:2360
-963:3:2361
-964:0:2435
-965:3:2369
-966:0:2435
-967:3:2371
-968:0:2435
-969:3:2372
-970:0:2435
-971:3:876
-972:0:2435
-973:3:877
-974:3:881
-975:3:882
-976:3:890
-977:3:891
-978:3:895
-979:3:896
-980:3:904
-981:3:909
-982:3:913
-983:3:914
-984:3:921
-985:3:922
-986:3:933
-987:3:934
-988:3:935
-989:3:946
-990:3:951
-991:3:952
-992:0:2435
-993:3:964
-994:0:2435
-995:3:966
-996:3:967
-997:0:2435
-998:3:971
-999:3:975
-1000:3:976
-1001:3:984
-1002:3:985
-1003:3:989
-1004:3:990
-1005:3:998
-1006:3:1003
-1007:3:1004
-1008:3:1015
-1009:3:1016
-1010:3:1027
-1011:3:1028
-1012:3:1029
-1013:3:1040
-1014:3:1045
-1015:3:1046
-1016:0:2435
-1017:3:1058
-1018:0:2435
-1019:3:1060
-1020:0:2435
-1021:3:1061
-1022:0:2435
-1023:3:1071
-1024:0:2435
-1025:3:1075
-1026:3:1076
-1027:3:1080
-1028:3:1084
-1029:3:1085
-1030:3:1089
-1031:3:1097
-1032:3:1098
-1033:0:2435
-1034:3:1106
-1035:0:2435
-1036:3:1110
-1037:3:1111
-1038:3:1115
-1039:3:1119
-1040:3:1120
-1041:3:1124
-1042:3:1132
-1043:3:1133
-1044:0:2435
-1045:3:1141
-1046:0:2435
-1047:3:1149
-1048:3:1150
-1049:3:1154
-1050:3:1158
-1051:3:1159
-1052:3:1163
-1053:3:1171
-1054:3:1172
-1055:0:2435
-1056:3:1180
-1057:0:2435
-1058:3:1182
-1059:0:2435
-1060:3:1183
-1061:3:1187
-1062:3:1188
-1063:3:1196
-1064:3:1197
-1065:3:1201
-1066:3:1202
-1067:3:1210
-1068:3:1215
-1069:3:1219
-1070:3:1220
-1071:3:1227
-1072:3:1228
-1073:3:1239
-1074:3:1240
-1075:3:1241
-1076:3:1252
-1077:3:1257
-1078:3:1258
-1079:0:2435
-1080:3:1270
-1081:0:2435
-1082:3:1272
-1083:0:2435
-1084:3:1275
-1085:3:1276
-1086:3:1288
-1087:3:1289
-1088:3:1293
-1089:3:1294
-1090:3:1302
-1091:3:1307
-1092:3:1311
-1093:3:1312
-1094:3:1319
-1095:3:1320
-1096:3:1331
-1097:3:1332
-1098:3:1333
-1099:3:1344
-1100:3:1349
-1101:3:1350
-1102:0:2435
-1103:3:1362
-1104:0:2435
-1105:3:1364
-1106:0:2435
-1107:3:1365
-1108:0:2435
-1109:3:1366
-1110:0:2435
-1111:3:1367
-1112:0:2435
-1113:3:1368
-1114:3:1372
-1115:3:1373
-1116:3:1381
-1117:3:1382
-1118:3:1386
-1119:3:1387
-1120:3:1395
-1121:3:1400
-1122:3:1404
-1123:3:1405
-1124:3:1412
-1125:3:1413
-1126:3:1424
-1127:3:1425
-1128:3:1426
-1129:3:1437
-1130:3:1442
-1131:3:1443
-1132:0:2435
-1133:3:1455
-1134:0:2435
-1135:3:1568
-1136:0:2435
-1137:3:1666
-1138:0:2435
-1139:3:1667
-1140:0:2435
-1141:3:1671
-1142:0:2435
-1143:3:1677
-1144:3:1681
-1145:3:1682
-1146:3:1690
-1147:3:1691
-1148:3:1695
-1149:3:1696
-1150:3:1704
-1151:3:1709
-1152:3:1713
-1153:3:1714
-1154:3:1721
-1155:3:1722
-1156:3:1733
-1157:3:1734
-1158:3:1735
-1159:3:1746
-1160:3:1751
-1161:3:1752
-1162:0:2435
-1163:3:1764
-1164:0:2435
-1165:3:1766
-1166:0:2435
-1167:3:1767
-1168:3:1771
-1169:3:1772
-1170:3:1780
-1171:3:1781
-1172:3:1785
-1173:3:1786
-1174:3:1794
-1175:3:1799
-1176:3:1803
-1177:3:1804
-1178:3:1811
-1179:3:1812
-1180:3:1823
-1181:3:1824
-1182:3:1825
-1183:3:1836
-1184:3:1841
-1185:3:1842
-1186:0:2435
-1187:3:1854
-1188:0:2435
-1189:3:1856
-1190:0:2435
-1191:3:1859
-1192:3:1860
-1193:3:1872
-1194:3:1873
-1195:3:1877
-1196:3:1878
-1197:3:1886
-1198:3:1891
-1199:3:1895
-1200:3:1896
-1201:3:1903
-1202:3:1904
-1203:3:1915
-1204:3:1916
-1205:3:1917
-1206:3:1928
-1207:3:1933
-1208:3:1934
-1209:0:2435
-1210:3:1946
-1211:0:2435
-1212:3:1948
-1213:0:2435
-1214:3:1949
-1215:0:2435
-1216:3:1950
-1217:0:2435
-1218:3:1951
-1219:0:2435
-1220:3:1952
-1221:3:1956
-1222:3:1957
-1223:3:1965
-1224:3:1966
-1225:3:1970
-1226:3:1971
-1227:3:1979
-1228:3:1984
-1229:3:1988
-1230:3:1989
-1231:3:1996
-1232:3:1997
-1233:3:2008
-1234:3:2009
-1235:3:2010
-1236:3:2021
-1237:3:2026
-1238:3:2027
-1239:0:2435
-1240:3:2039
-1241:0:2435
-1242:3:2152
-1243:0:2435
-1244:3:2250
-1245:0:2435
-1246:3:2251
-1247:0:2435
-1248:3:2255
-1249:0:2435
-1250:3:2264
-1251:3:2265
-1252:3:2269
-1253:3:2273
-1254:3:2274
-1255:3:2278
-1256:3:2286
-1257:3:2287
-1258:0:2435
-1259:3:2295
-1260:0:2435
-1261:3:2299
-1262:3:2300
-1263:3:2304
-1264:3:2308
-1265:3:2309
-1266:3:2313
-1267:3:2321
-1268:3:2322
-1269:0:2435
-1270:3:2330
-1271:0:2435
-1272:3:2338
-1273:3:2339
-1274:3:2343
-1275:3:2347
-1276:3:2348
-1277:3:2352
-1278:3:2360
-1279:3:2361
-1280:0:2435
-1281:3:2369
-1282:0:2435
-1283:3:2371
-1284:0:2435
-1285:3:2372
-1286:0:2435
-1287:3:876
-1288:0:2435
-1289:3:877
-1290:3:881
-1291:3:882
-1292:3:890
-1293:3:891
-1294:3:895
-1295:3:896
-1296:3:904
-1297:3:909
-1298:3:913
-1299:3:914
-1300:3:921
-1301:3:922
-1302:3:933
-1303:3:934
-1304:3:935
-1305:3:946
-1306:3:951
-1307:3:952
-1308:0:2435
-1309:3:964
-1310:0:2435
-1311:3:966
-1312:3:967
-1313:0:2435
-1314:3:971
-1315:3:975
-1316:3:976
-1317:3:984
-1318:3:985
-1319:3:989
-1320:3:990
-1321:3:998
-1322:3:1011
-1323:3:1012
-1324:3:1015
-1325:3:1016
-1326:3:1027
-1327:3:1028
-1328:3:1029
-1329:3:1040
-1330:3:1045
-1331:3:1048
-1332:3:1049
-1333:0:2435
-1334:3:1058
-1335:0:2435
-1336:3:1060
-1337:0:2435
-1338:3:1061
-1339:0:2435
-1340:3:1071
-1341:0:2435
-1342:2:458
-1343:0:2435
-1344:2:464
-1345:0:2435
-1346:2:465
-1347:0:2435
-1348:2:466
-1349:0:2435
-1350:2:467
-1351:0:2435
-1352:1:2
-1353:0:2435
-1354:2:468
-1355:0:2435
-1356:1:8
-1357:0:2435
-1358:1:9
-1359:0:2435
-1360:1:10
-1361:0:2435
-1362:1:11
-1363:0:2435
-1364:2:467
-1365:0:2435
-1366:1:12
-1367:1:16
-1368:1:17
-1369:1:25
-1370:1:26
-1371:1:30
-1372:1:31
-1373:1:39
-1374:1:44
-1375:1:48
-1376:1:49
-1377:1:56
-1378:1:57
-1379:1:68
-1380:1:69
-1381:1:70
-1382:1:81
-1383:1:86
-1384:1:87
-1385:0:2435
-1386:2:468
-1387:0:2435
-1388:3:1075
-1389:3:1076
-1390:3:1080
-1391:3:1084
-1392:3:1085
-1393:3:1089
-1394:3:1094
-1395:0:2435
-1396:3:1106
-1397:0:2435
-1398:3:1110
-1399:3:1111
-1400:3:1115
-1401:3:1119
-1402:3:1120
-1403:3:1124
-1404:3:1132
-1405:3:1133
-1406:0:2435
-1407:3:1141
-1408:0:2435
-1409:3:1149
-1410:3:1150
-1411:3:1154
-1412:3:1158
-1413:3:1159
-1414:3:1163
-1415:3:1171
-1416:3:1172
-1417:0:2435
-1418:3:1180
-1419:0:2435
-1420:3:1182
-1421:0:2435
-1422:3:1183
-1423:3:1187
-1424:3:1188
-1425:3:1196
-1426:3:1197
-1427:3:1201
-1428:3:1202
-1429:3:1210
-1430:3:1215
-1431:3:1219
-1432:3:1220
-1433:3:1227
-1434:3:1228
-1435:3:1239
-1436:3:1240
-1437:3:1241
-1438:3:1252
-1439:3:1257
-1440:3:1258
-1441:0:2435
-1442:3:1270
-1443:0:2435
-1444:3:1272
-1445:0:2435
-1446:3:1275
-1447:3:1276
-1448:3:1288
-1449:3:1289
-1450:3:1293
-1451:3:1294
-1452:3:1302
-1453:3:1307
-1454:3:1311
-1455:3:1312
-1456:3:1319
-1457:3:1320
-1458:3:1331
-1459:3:1332
-1460:3:1333
-1461:3:1344
-1462:3:1349
-1463:3:1350
-1464:0:2435
-1465:3:1362
-1466:0:2435
-1467:3:1364
-1468:0:2435
-1469:3:1365
-1470:0:2435
-1471:3:1366
-1472:0:2435
-1473:3:1367
-1474:0:2435
-1475:3:1368
-1476:3:1372
-1477:3:1373
-1478:3:1381
-1479:3:1382
-1480:3:1386
-1481:3:1387
-1482:3:1395
-1483:3:1400
-1484:3:1404
-1485:3:1405
-1486:3:1412
-1487:3:1413
-1488:3:1424
-1489:3:1425
-1490:3:1426
-1491:3:1437
-1492:3:1442
-1493:3:1443
-1494:0:2435
-1495:3:1455
-1496:0:2435
-1497:3:1568
-1498:0:2435
-1499:3:1666
-1500:0:2435
-1501:3:1667
-1502:0:2435
-1503:3:1671
-1504:0:2435
-1505:3:1677
-1506:3:1681
-1507:3:1682
-1508:3:1690
-1509:3:1691
-1510:3:1695
-1511:3:1696
-1512:3:1704
-1513:3:1709
-1514:3:1713
-1515:3:1714
-1516:3:1721
-1517:3:1722
-1518:3:1733
-1519:3:1734
-1520:3:1735
-1521:3:1746
-1522:3:1751
-1523:3:1752
-1524:0:2435
-1525:3:1764
-1526:0:2435
-1527:3:1766
-1528:0:2435
-1529:3:1767
-1530:3:1771
-1531:3:1772
-1532:3:1780
-1533:3:1781
-1534:3:1785
-1535:3:1786
-1536:3:1794
-1537:3:1799
-1538:3:1803
-1539:3:1804
-1540:3:1811
-1541:3:1812
-1542:3:1823
-1543:3:1824
-1544:3:1825
-1545:3:1836
-1546:3:1841
-1547:3:1842
-1548:0:2435
-1549:3:1854
-1550:0:2435
-1551:3:1856
-1552:0:2435
-1553:3:1859
-1554:3:1860
-1555:3:1872
-1556:3:1873
-1557:3:1877
-1558:3:1878
-1559:3:1886
-1560:3:1891
-1561:3:1895
-1562:3:1896
-1563:3:1903
-1564:3:1904
-1565:3:1915
-1566:3:1916
-1567:3:1917
-1568:3:1928
-1569:3:1933
-1570:3:1934
-1571:0:2435
-1572:3:1946
-1573:0:2435
-1574:3:1948
-1575:0:2435
-1576:3:1949
-1577:0:2435
-1578:3:1950
-1579:0:2435
-1580:3:1951
-1581:0:2435
-1582:3:1952
-1583:3:1956
-1584:3:1957
-1585:3:1965
-1586:3:1966
-1587:3:1970
-1588:3:1971
-1589:3:1979
-1590:3:1984
-1591:3:1988
-1592:3:1989
-1593:3:1996
-1594:3:1997
-1595:3:2008
-1596:3:2009
-1597:3:2010
-1598:3:2021
-1599:3:2026
-1600:3:2027
-1601:0:2435
-1602:3:2039
-1603:0:2435
-1604:3:2152
-1605:0:2435
-1606:3:2250
-1607:0:2435
-1608:3:2251
-1609:0:2435
-1610:3:2255
-1611:0:2435
-1612:3:2264
-1613:3:2265
-1614:3:2269
-1615:3:2273
-1616:3:2274
-1617:3:2278
-1618:3:2286
-1619:3:2287
-1620:0:2435
-1621:3:2295
-1622:0:2435
-1623:3:2299
-1624:3:2300
-1625:3:2304
-1626:3:2308
-1627:3:2309
-1628:3:2313
-1629:3:2321
-1630:3:2322
-1631:0:2435
-1632:3:2330
-1633:0:2435
-1634:3:2338
-1635:3:2339
-1636:3:2343
-1637:3:2347
-1638:3:2348
-1639:3:2352
-1640:3:2360
-1641:3:2361
-1642:0:2435
-1643:3:2369
-1644:0:2435
-1645:3:2371
-1646:0:2435
-1647:3:2372
-1648:0:2435
-1649:3:2375
-1650:0:2435
-1651:3:2380
-1652:0:2435
-1653:2:467
-1654:0:2435
-1655:3:2381
-1656:0:2435
-1657:1:99
-1658:0:2435
-1659:3:2380
-1660:0:2435
-1661:2:468
-1662:0:2435
-1663:3:2381
-1664:0:2435
-1665:2:469
-1666:0:2435
-1667:3:2380
-1668:0:2435
-1669:2:475
-1670:0:2435
-1671:3:2381
-1672:0:2435
-1673:2:476
-1674:0:2435
-1675:3:2380
-1676:0:2435
-1677:2:477
-1678:2:481
-1679:2:482
-1680:2:490
-1681:2:491
-1682:2:495
-1683:2:496
-1684:2:504
-1685:2:509
-1686:2:513
-1687:2:514
-1688:2:521
-1689:2:522
-1690:2:533
-1691:2:534
-1692:2:535
-1693:2:546
-1694:2:558
-1695:2:559
-1696:0:2435
-1697:3:2381
-1698:0:2435
-1699:2:564
-1700:0:2435
-1701:3:2380
-1702:0:2435
-1703:2:565
-1704:2:569
-1705:2:570
-1706:2:578
-1707:2:579
-1708:2:583
-1709:2:584
-1710:2:592
-1711:2:597
-1712:2:601
-1713:2:602
-1714:2:609
-1715:2:610
-1716:2:621
-1717:2:622
-1718:2:623
-1719:2:634
-1720:2:646
-1721:2:647
-1722:0:2435
-1723:3:2381
-1724:0:2435
-1725:2:652
-1726:0:2435
-1727:3:2380
-1728:0:2435
-1729:2:653
-1730:0:2435
-1731:3:2381
-1732:0:2435
-1733:2:654
-1734:2:658
-1735:2:659
-1736:2:667
-1737:2:668
-1738:2:672
-1739:2:673
-1740:2:681
-1741:2:686
-1742:2:690
-1743:2:691
-1744:2:698
-1745:2:699
-1746:2:710
-1747:2:711
-1748:2:712
-1749:2:723
-1750:2:735
-1751:2:736
-1752:0:2435
-1753:3:2380
-1754:0:2435
-1755:2:741
-1756:0:2435
-1757:3:2381
-1758:0:2435
-1759:2:750
-1760:0:2435
-1761:3:2380
-1762:0:2435
-1763:2:753
-1764:0:2435
-1765:3:2381
-1766:0:2435
-1767:2:758
-1768:0:2435
-1769:3:2380
-1770:0:2435
-1771:2:759
-1772:0:2433
-1773:3:2381
-1774:0:2439
-1775:0:2435
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.define b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 0423ec5..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-Depth=   10656 States=    1e+06 Transitions= 8.86e+06 Memory=   534.807        t=   7.38 R=   1e+05
-Depth=   35214 States=    2e+06 Transitions= 1.82e+07 Memory=   603.557        t=   15.5 R=   1e+05
-Depth=   35214 States=    3e+06 Transitions= 2.73e+07 Memory=   672.209        t=   23.8 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=   35214 States=    4e+06 Transitions= 4.08e+07 Memory=   771.885        t=   35.9 R=   1e+05
-pan: claim violated! (at depth 1650)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 35214, errors: 1
-  4154272 states, stored
- 38595853 states, matched
- 42750125 transitions (= stored+matched)
-1.4058824e+08 atomic steps
-hash conflicts:  21492325 (resolved)
-
-Stats on memory usage (in Megabytes):
-  364.488      equivalent memory usage for states (stored*(State-vector + overhead))
-  292.863      actual memory usage for states (compression: 80.35%)
-               state-vector as stored = 46 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  782.529      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 227, "(1)"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 366, "(1)"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (19 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 330, "(1)"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (18 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 401, "pan.___", state 134, "((i<1))"
-       line 401, "pan.___", state 134, "((i>=1))"
-       line 409, "pan.___", state 153, "(1)"
-       line 409, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 154, "else"
-       line 409, "pan.___", state 157, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 413, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 167, "else"
-       line 413, "pan.___", state 170, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 411, "pan.___", state 176, "((i<1))"
-       line 411, "pan.___", state 176, "((i>=1))"
-       line 418, "pan.___", state 183, "(1)"
-       line 418, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 184, "else"
-       line 418, "pan.___", state 187, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 369, "pan.___", state 193, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 646, "pan.___", state 202, "((write_lock==0))"
-       line 646, "pan.___", state 202, "else"
-       line 644, "pan.___", state 203, "(1)"
-       line 160, "pan.___", state 209, "(1)"
-       line 164, "pan.___", state 217, "(1)"
-       line 164, "pan.___", state 218, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 164, "pan.___", state 218, "else"
-       line 162, "pan.___", state 223, "((j<1))"
-       line 162, "pan.___", state 223, "((j>=1))"
-       line 168, "pan.___", state 229, "(1)"
-       line 168, "pan.___", state 230, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 168, "pan.___", state 230, "else"
-       line 160, "pan.___", state 241, "(1)"
-       line 168, "pan.___", state 261, "(1)"
-       line 160, "pan.___", state 277, "(1)"
-       line 164, "pan.___", state 285, "(1)"
-       line 168, "pan.___", state 297, "(1)"
-       line 399, "pan.___", state 311, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 325, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 343, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 356, "(1)"
-       line 413, "pan.___", state 369, "(1)"
-       line 418, "pan.___", state 386, "(1)"
-       line 399, "pan.___", state 405, "(1)"
-       line 403, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 461, "(1)"
-       line 418, "pan.___", state 478, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 164, "pan.___", state 594, "(1)"
-       line 168, "pan.___", state 606, "(1)"
-       line 160, "pan.___", state 618, "(1)"
-       line 168, "pan.___", state 638, "(1)"
-       line 164, "pan.___", state 662, "(1)"
-       line 168, "pan.___", state 674, "(1)"
-       line 399, "pan.___", state 696, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 698, "(1)"
-       line 399, "pan.___", state 699, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 699, "else"
-       line 399, "pan.___", state 702, "(1)"
-       line 403, "pan.___", state 710, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 712, "(1)"
-       line 403, "pan.___", state 713, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 713, "else"
-       line 403, "pan.___", state 716, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 401, "pan.___", state 722, "((i<1))"
-       line 401, "pan.___", state 722, "((i>=1))"
-       line 408, "pan.___", state 728, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 741, "(1)"
-       line 409, "pan.___", state 742, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 742, "else"
-       line 409, "pan.___", state 745, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 413, "pan.___", state 754, "(1)"
-       line 413, "pan.___", state 755, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 755, "else"
-       line 413, "pan.___", state 758, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 411, "pan.___", state 764, "((i<1))"
-       line 411, "pan.___", state 764, "((i>=1))"
-       line 418, "pan.___", state 771, "(1)"
-       line 418, "pan.___", state 772, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 772, "else"
-       line 418, "pan.___", state 775, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 403, "pan.___", state 810, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 828, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 854, "(1)"
-       line 418, "pan.___", state 871, "(1)"
-       line 403, "pan.___", state 900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 918, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 944, "(1)"
-       line 418, "pan.___", state 961, "(1)"
-       line 399, "pan.___", state 980, "(1)"
-       line 403, "pan.___", state 992, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1010, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1036, "(1)"
-       line 418, "pan.___", state 1053, "(1)"
-       line 403, "pan.___", state 1085, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1103, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1129, "(1)"
-       line 418, "pan.___", state 1146, "(1)"
-       line 164, "pan.___", state 1169, "(1)"
-       line 168, "pan.___", state 1181, "(1)"
-       line 160, "pan.___", state 1193, "(1)"
-       line 168, "pan.___", state 1213, "(1)"
-       line 164, "pan.___", state 1237, "(1)"
-       line 168, "pan.___", state 1249, "(1)"
-       line 399, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1273, "(1)"
-       line 399, "pan.___", state 1274, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1274, "else"
-       line 399, "pan.___", state 1277, "(1)"
-       line 403, "pan.___", state 1285, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1287, "(1)"
-       line 403, "pan.___", state 1288, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1288, "else"
-       line 403, "pan.___", state 1291, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 401, "pan.___", state 1297, "((i<1))"
-       line 401, "pan.___", state 1297, "((i>=1))"
-       line 408, "pan.___", state 1303, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1316, "(1)"
-       line 409, "pan.___", state 1317, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 1317, "else"
-       line 409, "pan.___", state 1320, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 413, "pan.___", state 1329, "(1)"
-       line 413, "pan.___", state 1330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 1330, "else"
-       line 413, "pan.___", state 1333, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 411, "pan.___", state 1339, "((i<1))"
-       line 411, "pan.___", state 1339, "((i>=1))"
-       line 418, "pan.___", state 1346, "(1)"
-       line 418, "pan.___", state 1347, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 1347, "else"
-       line 418, "pan.___", state 1350, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 164, "pan.___", state 1379, "(1)"
-       line 168, "pan.___", state 1391, "(1)"
-       line 160, "pan.___", state 1403, "(1)"
-       line 168, "pan.___", state 1423, "(1)"
-       line 164, "pan.___", state 1447, "(1)"
-       line 168, "pan.___", state 1459, "(1)"
-       line 702, "pan.___", state 1484, "-end-"
-       (160 of 1484 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 37.6 seconds
-pan: rate 110515.35 states/second
-pan: avg transition delay 8.793e-07 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index d5d174d..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index f2ce974..0000000
+++ /dev/null
@@ -1,1653 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2399
-2:4:2351
-3:4:2354
-4:4:2354
-5:4:2357
-6:4:2365
-7:4:2365
-8:4:2368
-9:4:2374
-10:4:2378
-11:4:2378
-12:4:2381
-13:4:2389
-14:4:2393
-15:4:2394
-16:0:2399
-17:4:2396
-18:0:2399
-19:3:869
-20:0:2399
-21:3:875
-22:0:2399
-23:3:876
-24:0:2399
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:2399
-45:3:964
-46:0:2399
-47:3:966
-48:3:967
-49:0:2399
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:2399
-69:3:1058
-70:0:2399
-71:3:1060
-72:0:2399
-73:3:1061
-74:0:2399
-75:3:1071
-76:0:2399
-77:3:1072
-78:3:1079
-79:3:1080
-80:3:1087
-81:3:1092
-82:0:2399
-83:3:1103
-84:0:2399
-85:3:1104
-86:3:1111
-87:3:1112
-88:3:1119
-89:3:1124
-90:0:2399
-91:3:1135
-92:0:2399
-93:3:1140
-94:3:1147
-95:3:1148
-96:3:1155
-97:3:1160
-98:0:2399
-99:3:1171
-100:0:2399
-101:3:1173
-102:0:2399
-103:3:1174
-104:3:1178
-105:3:1179
-106:3:1187
-107:3:1188
-108:3:1192
-109:3:1193
-110:3:1201
-111:3:1206
-112:3:1210
-113:3:1211
-114:3:1218
-115:3:1219
-116:3:1230
-117:3:1231
-118:3:1232
-119:3:1243
-120:3:1248
-121:3:1249
-122:0:2399
-123:3:1261
-124:0:2399
-125:3:1263
-126:0:2399
-127:3:1266
-128:3:1267
-129:3:1279
-130:3:1280
-131:3:1284
-132:3:1285
-133:3:1293
-134:3:1298
-135:3:1302
-136:3:1303
-137:3:1310
-138:3:1311
-139:3:1322
-140:3:1323
-141:3:1324
-142:3:1335
-143:3:1340
-144:3:1341
-145:0:2399
-146:3:1353
-147:0:2399
-148:3:1355
-149:0:2399
-150:3:1356
-151:0:2399
-152:3:1357
-153:0:2399
-154:3:1358
-155:0:2399
-156:3:1359
-157:3:1363
-158:3:1364
-159:3:1372
-160:3:1373
-161:3:1377
-162:3:1378
-163:3:1386
-164:3:1391
-165:3:1395
-166:3:1396
-167:3:1403
-168:3:1404
-169:3:1415
-170:3:1416
-171:3:1417
-172:3:1428
-173:3:1433
-174:3:1434
-175:0:2399
-176:3:1446
-177:0:2399
-178:3:1550
-179:0:2399
-180:3:1648
-181:0:2399
-182:3:1649
-183:0:2399
-184:3:1653
-185:0:2399
-186:3:1659
-187:3:1663
-188:3:1664
-189:3:1672
-190:3:1673
-191:3:1677
-192:3:1678
-193:3:1686
-194:3:1691
-195:3:1695
-196:3:1696
-197:3:1703
-198:3:1704
-199:3:1715
-200:3:1716
-201:3:1717
-202:3:1728
-203:3:1733
-204:3:1734
-205:0:2399
-206:3:1746
-207:0:2399
-208:3:1748
-209:0:2399
-210:3:1749
-211:3:1753
-212:3:1754
-213:3:1762
-214:3:1763
-215:3:1767
-216:3:1768
-217:3:1776
-218:3:1781
-219:3:1785
-220:3:1786
-221:3:1793
-222:3:1794
-223:3:1805
-224:3:1806
-225:3:1807
-226:3:1818
-227:3:1823
-228:3:1824
-229:0:2399
-230:3:1836
-231:0:2399
-232:3:1838
-233:0:2399
-234:3:1841
-235:3:1842
-236:3:1854
-237:3:1855
-238:3:1859
-239:3:1860
-240:3:1868
-241:3:1873
-242:3:1877
-243:3:1878
-244:3:1885
-245:3:1886
-246:3:1897
-247:3:1898
-248:3:1899
-249:3:1910
-250:3:1915
-251:3:1916
-252:0:2399
-253:3:1928
-254:0:2399
-255:3:1930
-256:0:2399
-257:3:1931
-258:0:2399
-259:3:1932
-260:0:2399
-261:3:1933
-262:0:2399
-263:3:1934
-264:3:1938
-265:3:1939
-266:3:1947
-267:3:1948
-268:3:1952
-269:3:1953
-270:3:1961
-271:3:1966
-272:3:1970
-273:3:1971
-274:3:1978
-275:3:1979
-276:3:1990
-277:3:1991
-278:3:1992
-279:3:2003
-280:3:2008
-281:3:2009
-282:0:2399
-283:3:2021
-284:0:2399
-285:3:2125
-286:0:2399
-287:3:2223
-288:0:2399
-289:3:2224
-290:0:2399
-291:3:2228
-292:0:2399
-293:3:2234
-294:3:2241
-295:3:2242
-296:3:2249
-297:3:2254
-298:0:2399
-299:3:2265
-300:0:2399
-301:3:2266
-302:3:2273
-303:3:2274
-304:3:2281
-305:3:2286
-306:0:2399
-307:3:2297
-308:0:2399
-309:3:2302
-310:3:2309
-311:3:2310
-312:3:2317
-313:3:2322
-314:0:2399
-315:3:2333
-316:0:2399
-317:3:2335
-318:0:2399
-319:3:2336
-320:0:2399
-321:3:876
-322:0:2399
-323:3:877
-324:3:881
-325:3:882
-326:3:890
-327:3:891
-328:3:895
-329:3:896
-330:3:904
-331:3:909
-332:3:913
-333:3:914
-334:3:921
-335:3:922
-336:3:933
-337:3:934
-338:3:935
-339:3:946
-340:3:951
-341:3:952
-342:0:2399
-343:3:964
-344:0:2399
-345:3:966
-346:3:967
-347:0:2399
-348:3:971
-349:3:975
-350:3:976
-351:3:984
-352:3:985
-353:3:989
-354:3:990
-355:3:998
-356:3:1003
-357:3:1004
-358:3:1015
-359:3:1016
-360:3:1027
-361:3:1028
-362:3:1029
-363:3:1040
-364:3:1045
-365:3:1046
-366:0:2399
-367:3:1058
-368:0:2399
-369:3:1060
-370:0:2399
-371:3:1061
-372:0:2399
-373:3:1071
-374:0:2399
-375:3:1072
-376:3:1079
-377:3:1080
-378:3:1087
-379:3:1092
-380:0:2399
-381:3:1103
-382:0:2399
-383:3:1104
-384:3:1111
-385:3:1112
-386:3:1119
-387:3:1124
-388:0:2399
-389:3:1135
-390:0:2399
-391:3:1140
-392:3:1147
-393:3:1148
-394:3:1155
-395:3:1160
-396:0:2399
-397:3:1171
-398:0:2399
-399:3:1173
-400:0:2399
-401:3:1174
-402:3:1178
-403:3:1179
-404:3:1187
-405:3:1188
-406:3:1192
-407:3:1193
-408:3:1201
-409:3:1206
-410:3:1210
-411:3:1211
-412:3:1218
-413:3:1219
-414:3:1230
-415:3:1231
-416:3:1232
-417:3:1243
-418:3:1248
-419:3:1249
-420:0:2399
-421:3:1261
-422:0:2399
-423:3:1263
-424:0:2399
-425:3:1266
-426:3:1267
-427:3:1279
-428:3:1280
-429:3:1284
-430:3:1285
-431:3:1293
-432:3:1298
-433:3:1302
-434:3:1303
-435:3:1310
-436:3:1311
-437:3:1322
-438:3:1323
-439:3:1324
-440:3:1335
-441:3:1340
-442:3:1341
-443:0:2399
-444:3:1353
-445:0:2399
-446:3:1355
-447:0:2399
-448:3:1356
-449:0:2399
-450:3:1357
-451:0:2399
-452:3:1358
-453:0:2399
-454:3:1359
-455:3:1363
-456:3:1364
-457:3:1372
-458:3:1373
-459:3:1377
-460:3:1378
-461:3:1386
-462:3:1391
-463:3:1395
-464:3:1396
-465:3:1403
-466:3:1404
-467:3:1415
-468:3:1416
-469:3:1417
-470:3:1428
-471:3:1433
-472:3:1434
-473:0:2399
-474:3:1446
-475:0:2399
-476:3:1550
-477:0:2399
-478:3:1648
-479:0:2399
-480:3:1649
-481:0:2399
-482:3:1653
-483:0:2399
-484:3:1659
-485:3:1663
-486:3:1664
-487:3:1672
-488:3:1673
-489:3:1677
-490:3:1678
-491:3:1686
-492:3:1691
-493:3:1695
-494:3:1696
-495:3:1703
-496:3:1704
-497:3:1715
-498:3:1716
-499:3:1717
-500:3:1728
-501:3:1733
-502:3:1734
-503:0:2399
-504:3:1746
-505:0:2399
-506:3:1748
-507:0:2399
-508:3:1749
-509:3:1753
-510:3:1754
-511:3:1762
-512:3:1763
-513:3:1767
-514:3:1768
-515:3:1776
-516:3:1781
-517:3:1785
-518:3:1786
-519:3:1793
-520:3:1794
-521:3:1805
-522:3:1806
-523:3:1807
-524:3:1818
-525:3:1823
-526:3:1824
-527:0:2399
-528:3:1836
-529:0:2399
-530:3:1838
-531:0:2399
-532:3:1841
-533:3:1842
-534:3:1854
-535:3:1855
-536:3:1859
-537:3:1860
-538:3:1868
-539:3:1873
-540:3:1877
-541:3:1878
-542:3:1885
-543:3:1886
-544:3:1897
-545:3:1898
-546:3:1899
-547:3:1910
-548:3:1915
-549:3:1916
-550:0:2399
-551:3:1928
-552:0:2399
-553:3:1930
-554:0:2399
-555:3:1931
-556:0:2399
-557:3:1932
-558:0:2399
-559:3:1933
-560:0:2399
-561:3:1934
-562:3:1938
-563:3:1939
-564:3:1947
-565:3:1948
-566:3:1952
-567:3:1953
-568:3:1961
-569:3:1966
-570:3:1970
-571:3:1971
-572:3:1978
-573:3:1979
-574:3:1990
-575:3:1991
-576:3:1992
-577:3:2003
-578:3:2008
-579:3:2009
-580:0:2399
-581:3:2021
-582:0:2399
-583:3:2125
-584:0:2399
-585:3:2223
-586:0:2399
-587:3:2224
-588:0:2399
-589:3:2228
-590:0:2399
-591:3:2234
-592:3:2241
-593:3:2242
-594:3:2249
-595:3:2254
-596:0:2399
-597:3:2265
-598:0:2399
-599:3:2266
-600:3:2273
-601:3:2274
-602:3:2281
-603:3:2286
-604:0:2399
-605:3:2297
-606:0:2399
-607:3:2302
-608:3:2309
-609:3:2310
-610:3:2317
-611:3:2322
-612:0:2399
-613:3:2333
-614:0:2399
-615:3:2335
-616:0:2399
-617:3:2336
-618:0:2399
-619:3:876
-620:0:2399
-621:3:877
-622:3:881
-623:3:882
-624:3:890
-625:3:891
-626:3:895
-627:3:896
-628:3:904
-629:3:909
-630:3:913
-631:3:914
-632:3:921
-633:3:922
-634:3:933
-635:3:934
-636:3:935
-637:3:946
-638:3:951
-639:3:952
-640:0:2399
-641:3:964
-642:0:2399
-643:3:966
-644:3:967
-645:0:2399
-646:3:971
-647:3:975
-648:3:976
-649:3:984
-650:3:985
-651:3:989
-652:3:990
-653:3:998
-654:3:1003
-655:3:1004
-656:3:1015
-657:3:1016
-658:3:1027
-659:3:1028
-660:3:1029
-661:3:1040
-662:3:1045
-663:3:1046
-664:0:2399
-665:3:1058
-666:0:2399
-667:3:1060
-668:0:2399
-669:3:1061
-670:0:2399
-671:3:1071
-672:0:2399
-673:3:1072
-674:3:1079
-675:3:1080
-676:3:1087
-677:3:1092
-678:0:2399
-679:3:1103
-680:0:2399
-681:3:1104
-682:3:1111
-683:3:1112
-684:3:1119
-685:3:1124
-686:0:2399
-687:3:1135
-688:0:2399
-689:3:1140
-690:3:1147
-691:3:1148
-692:3:1155
-693:3:1160
-694:0:2399
-695:3:1171
-696:0:2399
-697:3:1173
-698:0:2399
-699:3:1174
-700:3:1178
-701:3:1179
-702:3:1187
-703:3:1188
-704:3:1192
-705:3:1193
-706:3:1201
-707:3:1206
-708:3:1210
-709:3:1211
-710:3:1218
-711:3:1219
-712:3:1230
-713:3:1231
-714:3:1232
-715:3:1243
-716:3:1248
-717:3:1249
-718:0:2399
-719:3:1261
-720:0:2399
-721:3:1263
-722:0:2399
-723:3:1266
-724:3:1267
-725:3:1279
-726:3:1280
-727:3:1284
-728:3:1285
-729:3:1293
-730:3:1298
-731:3:1302
-732:3:1303
-733:3:1310
-734:3:1311
-735:3:1322
-736:3:1323
-737:3:1324
-738:3:1335
-739:3:1340
-740:3:1341
-741:0:2399
-742:3:1353
-743:0:2399
-744:3:1355
-745:0:2399
-746:3:1356
-747:0:2399
-748:3:1357
-749:0:2399
-750:3:1358
-751:0:2399
-752:3:1359
-753:3:1363
-754:3:1364
-755:3:1372
-756:3:1373
-757:3:1377
-758:3:1378
-759:3:1386
-760:3:1391
-761:3:1395
-762:3:1396
-763:3:1403
-764:3:1404
-765:3:1415
-766:3:1416
-767:3:1417
-768:3:1428
-769:3:1433
-770:3:1434
-771:0:2399
-772:3:1446
-773:0:2399
-774:3:1550
-775:0:2399
-776:3:1648
-777:0:2399
-778:3:1649
-779:0:2399
-780:3:1653
-781:0:2399
-782:3:1659
-783:3:1663
-784:3:1664
-785:3:1672
-786:3:1673
-787:3:1677
-788:3:1678
-789:3:1686
-790:3:1691
-791:3:1695
-792:3:1696
-793:3:1703
-794:3:1704
-795:3:1715
-796:3:1716
-797:3:1717
-798:3:1728
-799:3:1733
-800:3:1734
-801:0:2399
-802:3:1746
-803:0:2399
-804:3:1748
-805:0:2399
-806:3:1749
-807:3:1753
-808:3:1754
-809:3:1762
-810:3:1763
-811:3:1767
-812:3:1768
-813:3:1776
-814:3:1781
-815:3:1785
-816:3:1786
-817:3:1793
-818:3:1794
-819:3:1805
-820:3:1806
-821:3:1807
-822:3:1818
-823:3:1823
-824:3:1824
-825:0:2399
-826:3:1836
-827:0:2399
-828:3:1838
-829:0:2399
-830:3:1841
-831:3:1842
-832:3:1854
-833:3:1855
-834:3:1859
-835:3:1860
-836:3:1868
-837:3:1873
-838:3:1877
-839:3:1878
-840:3:1885
-841:3:1886
-842:3:1897
-843:3:1898
-844:3:1899
-845:3:1910
-846:3:1915
-847:3:1916
-848:0:2399
-849:3:1928
-850:0:2399
-851:3:1930
-852:0:2399
-853:3:1931
-854:0:2399
-855:3:1932
-856:0:2399
-857:3:1933
-858:0:2399
-859:3:1934
-860:3:1938
-861:3:1939
-862:3:1947
-863:3:1948
-864:3:1952
-865:3:1953
-866:3:1961
-867:3:1966
-868:3:1970
-869:3:1971
-870:3:1978
-871:3:1979
-872:3:1990
-873:3:1991
-874:3:1992
-875:3:2003
-876:3:2008
-877:3:2009
-878:0:2399
-879:3:2021
-880:0:2399
-881:3:2125
-882:0:2399
-883:3:2223
-884:0:2399
-885:3:2224
-886:0:2399
-887:3:2228
-888:0:2399
-889:3:2234
-890:3:2241
-891:3:2242
-892:3:2249
-893:3:2254
-894:0:2399
-895:3:2265
-896:0:2399
-897:3:2266
-898:3:2273
-899:3:2274
-900:3:2281
-901:3:2286
-902:0:2399
-903:3:2297
-904:0:2399
-905:3:2302
-906:3:2309
-907:3:2310
-908:3:2317
-909:3:2322
-910:0:2399
-911:3:2333
-912:0:2399
-913:3:2335
-914:0:2399
-915:3:2336
-916:0:2399
-917:3:876
-918:0:2399
-919:3:877
-920:3:881
-921:3:882
-922:3:890
-923:3:891
-924:3:895
-925:3:896
-926:3:904
-927:3:909
-928:3:913
-929:3:914
-930:3:921
-931:3:922
-932:3:933
-933:3:934
-934:3:935
-935:3:946
-936:3:951
-937:3:952
-938:0:2399
-939:3:964
-940:0:2399
-941:3:966
-942:3:967
-943:0:2399
-944:3:971
-945:3:975
-946:3:976
-947:3:984
-948:3:985
-949:3:989
-950:3:990
-951:3:998
-952:3:1003
-953:3:1004
-954:3:1015
-955:3:1016
-956:3:1027
-957:3:1028
-958:3:1029
-959:3:1040
-960:3:1045
-961:3:1046
-962:0:2399
-963:3:1058
-964:0:2399
-965:3:1060
-966:0:2399
-967:3:1061
-968:0:2399
-969:3:1071
-970:0:2399
-971:3:1072
-972:3:1079
-973:3:1080
-974:3:1087
-975:3:1092
-976:0:2399
-977:3:1103
-978:0:2399
-979:3:1104
-980:3:1111
-981:3:1112
-982:3:1119
-983:3:1124
-984:0:2399
-985:3:1135
-986:0:2399
-987:3:1140
-988:3:1147
-989:3:1148
-990:3:1155
-991:3:1160
-992:0:2399
-993:3:1171
-994:0:2399
-995:3:1173
-996:0:2399
-997:3:1174
-998:3:1178
-999:3:1179
-1000:3:1187
-1001:3:1188
-1002:3:1192
-1003:3:1193
-1004:3:1201
-1005:3:1206
-1006:3:1210
-1007:3:1211
-1008:3:1218
-1009:3:1219
-1010:3:1230
-1011:3:1231
-1012:3:1232
-1013:3:1243
-1014:3:1248
-1015:3:1249
-1016:0:2399
-1017:3:1261
-1018:0:2399
-1019:3:1263
-1020:0:2399
-1021:3:1266
-1022:3:1267
-1023:3:1279
-1024:3:1280
-1025:3:1284
-1026:3:1285
-1027:3:1293
-1028:3:1298
-1029:3:1302
-1030:3:1303
-1031:3:1310
-1032:3:1311
-1033:3:1322
-1034:3:1323
-1035:3:1324
-1036:3:1335
-1037:3:1340
-1038:3:1341
-1039:0:2399
-1040:3:1353
-1041:0:2399
-1042:3:1355
-1043:0:2399
-1044:3:1356
-1045:0:2399
-1046:3:1357
-1047:0:2399
-1048:3:1358
-1049:0:2399
-1050:3:1359
-1051:3:1363
-1052:3:1364
-1053:3:1372
-1054:3:1373
-1055:3:1377
-1056:3:1378
-1057:3:1386
-1058:3:1391
-1059:3:1395
-1060:3:1396
-1061:3:1403
-1062:3:1404
-1063:3:1415
-1064:3:1416
-1065:3:1417
-1066:3:1428
-1067:3:1433
-1068:3:1434
-1069:0:2399
-1070:3:1446
-1071:0:2399
-1072:3:1550
-1073:0:2399
-1074:3:1648
-1075:0:2399
-1076:3:1649
-1077:0:2399
-1078:3:1653
-1079:0:2399
-1080:3:1659
-1081:3:1663
-1082:3:1664
-1083:3:1672
-1084:3:1673
-1085:3:1677
-1086:3:1678
-1087:3:1686
-1088:3:1691
-1089:3:1695
-1090:3:1696
-1091:3:1703
-1092:3:1704
-1093:3:1715
-1094:3:1716
-1095:3:1717
-1096:3:1728
-1097:3:1733
-1098:3:1734
-1099:0:2399
-1100:3:1746
-1101:0:2399
-1102:3:1748
-1103:0:2399
-1104:3:1749
-1105:3:1753
-1106:3:1754
-1107:3:1762
-1108:3:1763
-1109:3:1767
-1110:3:1768
-1111:3:1776
-1112:3:1781
-1113:3:1785
-1114:3:1786
-1115:3:1793
-1116:3:1794
-1117:3:1805
-1118:3:1806
-1119:3:1807
-1120:3:1818
-1121:3:1823
-1122:3:1824
-1123:0:2399
-1124:3:1836
-1125:0:2399
-1126:3:1838
-1127:0:2399
-1128:3:1841
-1129:3:1842
-1130:3:1854
-1131:3:1855
-1132:3:1859
-1133:3:1860
-1134:3:1868
-1135:3:1873
-1136:3:1877
-1137:3:1878
-1138:3:1885
-1139:3:1886
-1140:3:1897
-1141:3:1898
-1142:3:1899
-1143:3:1910
-1144:3:1915
-1145:3:1916
-1146:0:2399
-1147:3:1928
-1148:0:2399
-1149:3:1930
-1150:0:2399
-1151:3:1931
-1152:0:2399
-1153:3:1932
-1154:0:2399
-1155:3:1933
-1156:0:2399
-1157:3:1934
-1158:3:1938
-1159:3:1939
-1160:3:1947
-1161:3:1948
-1162:3:1952
-1163:3:1953
-1164:3:1961
-1165:3:1966
-1166:3:1970
-1167:3:1971
-1168:3:1978
-1169:3:1979
-1170:3:1990
-1171:3:1991
-1172:3:1992
-1173:3:2003
-1174:3:2008
-1175:3:2009
-1176:0:2399
-1177:3:2021
-1178:0:2399
-1179:3:2125
-1180:0:2399
-1181:3:2223
-1182:0:2399
-1183:3:2224
-1184:0:2399
-1185:3:2228
-1186:0:2399
-1187:3:2234
-1188:3:2241
-1189:3:2242
-1190:3:2249
-1191:3:2254
-1192:0:2399
-1193:3:2265
-1194:0:2399
-1195:3:2266
-1196:3:2273
-1197:3:2274
-1198:3:2281
-1199:3:2286
-1200:0:2399
-1201:3:2297
-1202:0:2399
-1203:3:2302
-1204:3:2309
-1205:3:2310
-1206:3:2317
-1207:3:2322
-1208:0:2399
-1209:3:2333
-1210:0:2399
-1211:3:2335
-1212:0:2399
-1213:3:2336
-1214:0:2399
-1215:3:876
-1216:0:2399
-1217:3:877
-1218:3:881
-1219:3:882
-1220:3:890
-1221:3:891
-1222:3:895
-1223:3:896
-1224:3:904
-1225:3:909
-1226:3:913
-1227:3:914
-1228:3:921
-1229:3:922
-1230:3:933
-1231:3:934
-1232:3:935
-1233:3:946
-1234:3:951
-1235:3:952
-1236:0:2399
-1237:3:964
-1238:0:2399
-1239:3:966
-1240:3:967
-1241:0:2399
-1242:3:971
-1243:3:975
-1244:3:976
-1245:3:984
-1246:3:985
-1247:3:989
-1248:3:990
-1249:3:998
-1250:3:1003
-1251:3:1004
-1252:3:1015
-1253:3:1016
-1254:3:1027
-1255:3:1028
-1256:3:1029
-1257:3:1040
-1258:3:1045
-1259:3:1046
-1260:0:2399
-1261:3:1058
-1262:0:2399
-1263:3:1060
-1264:0:2399
-1265:3:1061
-1266:0:2399
-1267:3:1071
-1268:0:2399
-1269:3:1072
-1270:3:1079
-1271:3:1080
-1272:3:1087
-1273:3:1092
-1274:0:2399
-1275:3:1103
-1276:0:2399
-1277:2:458
-1278:0:2399
-1279:2:464
-1280:0:2399
-1281:2:465
-1282:0:2399
-1283:2:466
-1284:0:2399
-1285:2:467
-1286:0:2399
-1287:1:2
-1288:0:2399
-1289:2:468
-1290:0:2399
-1291:1:8
-1292:0:2399
-1293:1:9
-1294:0:2399
-1295:1:10
-1296:0:2399
-1297:1:11
-1298:0:2399
-1299:2:467
-1300:0:2399
-1301:1:12
-1302:1:16
-1303:1:17
-1304:1:25
-1305:1:26
-1306:1:30
-1307:1:31
-1308:1:39
-1309:1:44
-1310:1:48
-1311:1:49
-1312:1:56
-1313:1:57
-1314:1:68
-1315:1:69
-1316:1:70
-1317:1:81
-1318:1:93
-1319:1:94
-1320:0:2399
-1321:2:468
-1322:0:2399
-1323:1:99
-1324:0:2399
-1325:2:469
-1326:0:2399
-1327:2:475
-1328:0:2399
-1329:2:476
-1330:0:2399
-1331:2:477
-1332:2:481
-1333:2:482
-1334:2:490
-1335:2:491
-1336:2:495
-1337:2:496
-1338:2:504
-1339:2:509
-1340:2:513
-1341:2:514
-1342:2:521
-1343:2:522
-1344:2:533
-1345:2:534
-1346:2:535
-1347:2:546
-1348:2:558
-1349:2:559
-1350:0:2399
-1351:2:564
-1352:0:2399
-1353:2:565
-1354:2:569
-1355:2:570
-1356:2:578
-1357:2:579
-1358:2:583
-1359:2:584
-1360:2:592
-1361:2:597
-1362:2:601
-1363:2:602
-1364:2:609
-1365:2:610
-1366:2:621
-1367:2:622
-1368:2:623
-1369:2:634
-1370:2:646
-1371:2:647
-1372:0:2399
-1373:2:652
-1374:0:2399
-1375:2:653
-1376:0:2399
-1377:2:654
-1378:2:658
-1379:2:659
-1380:2:667
-1381:2:668
-1382:2:672
-1383:2:673
-1384:2:681
-1385:2:686
-1386:2:690
-1387:2:691
-1388:2:698
-1389:2:699
-1390:2:710
-1391:2:711
-1392:2:712
-1393:2:723
-1394:2:735
-1395:2:736
-1396:0:2399
-1397:2:741
-1398:0:2399
-1399:2:750
-1400:0:2399
-1401:2:753
-1402:0:2399
-1403:2:758
-1404:0:2399
-1405:3:1104
-1406:3:1111
-1407:3:1114
-1408:3:1115
-1409:3:1119
-1410:3:1124
-1411:0:2399
-1412:3:1135
-1413:0:2399
-1414:3:1140
-1415:3:1147
-1416:3:1148
-1417:3:1155
-1418:3:1160
-1419:0:2399
-1420:3:1171
-1421:0:2399
-1422:3:1173
-1423:0:2399
-1424:3:1174
-1425:3:1178
-1426:3:1179
-1427:3:1187
-1428:3:1188
-1429:3:1192
-1430:3:1193
-1431:3:1201
-1432:3:1206
-1433:3:1210
-1434:3:1211
-1435:3:1218
-1436:3:1219
-1437:3:1230
-1438:3:1231
-1439:3:1232
-1440:3:1243
-1441:3:1248
-1442:3:1249
-1443:0:2399
-1444:3:1261
-1445:0:2399
-1446:3:1263
-1447:0:2399
-1448:3:1266
-1449:3:1267
-1450:3:1279
-1451:3:1280
-1452:3:1284
-1453:3:1285
-1454:3:1293
-1455:3:1298
-1456:3:1302
-1457:3:1303
-1458:3:1310
-1459:3:1311
-1460:3:1322
-1461:3:1323
-1462:3:1324
-1463:3:1335
-1464:3:1340
-1465:3:1341
-1466:0:2399
-1467:3:1353
-1468:0:2399
-1469:3:1355
-1470:0:2399
-1471:3:1356
-1472:0:2399
-1473:3:1357
-1474:0:2399
-1475:3:1358
-1476:0:2399
-1477:3:1359
-1478:3:1363
-1479:3:1364
-1480:3:1372
-1481:3:1373
-1482:3:1377
-1483:3:1378
-1484:3:1386
-1485:3:1391
-1486:3:1395
-1487:3:1396
-1488:3:1403
-1489:3:1404
-1490:3:1415
-1491:3:1416
-1492:3:1417
-1493:3:1428
-1494:3:1433
-1495:3:1434
-1496:0:2399
-1497:3:1446
-1498:0:2399
-1499:3:1550
-1500:0:2399
-1501:3:1648
-1502:0:2399
-1503:3:1649
-1504:0:2399
-1505:3:1653
-1506:0:2399
-1507:3:1659
-1508:3:1663
-1509:3:1664
-1510:3:1672
-1511:3:1673
-1512:3:1677
-1513:3:1678
-1514:3:1686
-1515:3:1691
-1516:3:1695
-1517:3:1696
-1518:3:1703
-1519:3:1704
-1520:3:1715
-1521:3:1716
-1522:3:1717
-1523:3:1728
-1524:3:1733
-1525:3:1734
-1526:0:2399
-1527:3:1746
-1528:0:2399
-1529:3:1748
-1530:0:2399
-1531:3:1749
-1532:3:1753
-1533:3:1754
-1534:3:1762
-1535:3:1763
-1536:3:1767
-1537:3:1768
-1538:3:1776
-1539:3:1781
-1540:3:1785
-1541:3:1786
-1542:3:1793
-1543:3:1794
-1544:3:1805
-1545:3:1806
-1546:3:1807
-1547:3:1818
-1548:3:1823
-1549:3:1824
-1550:0:2399
-1551:3:1836
-1552:0:2399
-1553:3:1838
-1554:0:2399
-1555:3:1841
-1556:3:1842
-1557:3:1854
-1558:3:1855
-1559:3:1859
-1560:3:1860
-1561:3:1868
-1562:3:1873
-1563:3:1877
-1564:3:1878
-1565:3:1885
-1566:3:1886
-1567:3:1897
-1568:3:1898
-1569:3:1899
-1570:3:1910
-1571:3:1915
-1572:3:1916
-1573:0:2399
-1574:3:1928
-1575:0:2399
-1576:3:1930
-1577:0:2399
-1578:3:1931
-1579:0:2399
-1580:3:1932
-1581:0:2399
-1582:3:1933
-1583:0:2399
-1584:3:1934
-1585:3:1938
-1586:3:1939
-1587:3:1947
-1588:3:1948
-1589:3:1952
-1590:3:1953
-1591:3:1961
-1592:3:1966
-1593:3:1970
-1594:3:1971
-1595:3:1978
-1596:3:1979
-1597:3:1990
-1598:3:1991
-1599:3:1992
-1600:3:2003
-1601:3:2008
-1602:3:2009
-1603:0:2399
-1604:3:2021
-1605:0:2399
-1606:3:2125
-1607:0:2399
-1608:3:2223
-1609:0:2399
-1610:3:2224
-1611:0:2399
-1612:3:2228
-1613:0:2399
-1614:3:2234
-1615:3:2241
-1616:3:2242
-1617:3:2249
-1618:3:2254
-1619:0:2399
-1620:3:2265
-1621:0:2399
-1622:3:2266
-1623:3:2273
-1624:3:2276
-1625:3:2277
-1626:3:2281
-1627:3:2286
-1628:0:2399
-1629:3:2297
-1630:0:2399
-1631:3:2302
-1632:3:2309
-1633:3:2310
-1634:3:2317
-1635:3:2322
-1636:0:2399
-1637:3:2333
-1638:0:2399
-1639:3:2335
-1640:0:2399
-1641:3:2336
-1642:0:2399
-1643:3:2339
-1644:0:2399
-1645:3:2344
-1646:0:2399
-1647:2:759
-1648:0:2397
-1649:3:2345
-1650:0:2403
-1651:2:518
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.define b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 5d7d35c..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-Depth=    8352 States=    1e+06 Transitions= 1.05e+07 Memory=   534.807        t=   8.93 R=   1e+05
-pan: claim violated! (at depth 1352)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 8352, errors: 1
-  1456373 states, stored
- 13442538 states, matched
- 14898911 transitions (= stored+matched)
- 50580660 atomic steps
-hash conflicts:   5166006 (resolved)
-
-Stats on memory usage (in Megabytes):
-  127.779      equivalent memory usage for states (stored*(State-vector + overhead))
-  100.443      actual memory usage for states (compression: 78.61%)
-               state-vector as stored = 44 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  566.154      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 179, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1003, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1013, "(1)"
-       line 164, "pan.___", state 1021, "(1)"
-       line 168, "pan.___", state 1033, "(1)"
-       line 175, "pan.___", state 1044, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1066, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1076, "(1)"
-       line 164, "pan.___", state 1084, "(1)"
-       line 168, "pan.___", state 1096, "(1)"
-       line 175, "pan.___", state 1111, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1133, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1143, "(1)"
-       line 164, "pan.___", state 1151, "(1)"
-       line 168, "pan.___", state 1163, "(1)"
-       line 702, "pan.___", state 1188, "-end-"
-       (100 of 1188 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 12.8 seconds
-pan: rate 113424.69 states/second
-pan: avg transition delay 8.6181e-07 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 103464e..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define SINGLE_FLIP
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index e81c46c..0000000
+++ /dev/null
@@ -1,1355 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2103
-2:4:2055
-3:4:2058
-4:4:2058
-5:4:2061
-6:4:2069
-7:4:2069
-8:4:2072
-9:4:2078
-10:4:2082
-11:4:2082
-12:4:2085
-13:4:2093
-14:4:2097
-15:4:2098
-16:0:2103
-17:4:2100
-18:0:2103
-19:3:869
-20:0:2103
-21:3:875
-22:0:2103
-23:3:876
-24:0:2103
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:2103
-45:3:964
-46:0:2103
-47:3:966
-48:3:967
-49:0:2103
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:2103
-69:3:1058
-70:0:2103
-71:3:1060
-72:0:2103
-73:3:1061
-74:0:2103
-75:3:1071
-76:0:2103
-77:3:1075
-78:3:1076
-79:3:1080
-80:3:1084
-81:3:1085
-82:3:1089
-83:3:1097
-84:3:1098
-85:3:1103
-86:3:1110
-87:3:1111
-88:3:1118
-89:3:1123
-90:0:2103
-91:3:1134
-92:0:2103
-93:3:1138
-94:3:1139
-95:3:1143
-96:3:1147
-97:3:1148
-98:3:1152
-99:3:1160
-100:3:1161
-101:3:1166
-102:3:1173
-103:3:1174
-104:3:1181
-105:3:1186
-106:0:2103
-107:3:1197
-108:0:2103
-109:3:1205
-110:3:1206
-111:3:1210
-112:3:1214
-113:3:1215
-114:3:1219
-115:3:1227
-116:3:1228
-117:3:1233
-118:3:1240
-119:3:1241
-120:3:1248
-121:3:1253
-122:0:2103
-123:3:1264
-124:0:2103
-125:3:1266
-126:0:2103
-127:3:1267
-128:3:1271
-129:3:1272
-130:3:1280
-131:3:1281
-132:3:1285
-133:3:1286
-134:3:1294
-135:3:1299
-136:3:1303
-137:3:1304
-138:3:1311
-139:3:1312
-140:3:1323
-141:3:1324
-142:3:1325
-143:3:1336
-144:3:1341
-145:3:1342
-146:0:2103
-147:3:1354
-148:0:2103
-149:3:1356
-150:0:2103
-151:3:1359
-152:3:1360
-153:3:1372
-154:3:1373
-155:3:1377
-156:3:1378
-157:3:1386
-158:3:1391
-159:3:1395
-160:3:1396
-161:3:1403
-162:3:1404
-163:3:1415
-164:3:1416
-165:3:1417
-166:3:1428
-167:3:1433
-168:3:1434
-169:0:2103
-170:3:1446
-171:0:2103
-172:3:1448
-173:0:2103
-174:3:1449
-175:0:2103
-176:3:1450
-177:0:2103
-178:3:1451
-179:0:2103
-180:3:1452
-181:3:1456
-182:3:1457
-183:3:1465
-184:3:1466
-185:3:1470
-186:3:1471
-187:3:1479
-188:3:1484
-189:3:1488
-190:3:1489
-191:3:1496
-192:3:1497
-193:3:1508
-194:3:1509
-195:3:1510
-196:3:1521
-197:3:1526
-198:3:1527
-199:0:2103
-200:3:1539
-201:0:2103
-202:3:1736
-203:0:2103
-204:3:1834
-205:0:2103
-206:3:1835
-207:0:2103
-208:3:1839
-209:0:2103
-210:3:1848
-211:3:1849
-212:3:1853
-213:3:1857
-214:3:1858
-215:3:1862
-216:3:1870
-217:3:1871
-218:3:1876
-219:3:1883
-220:3:1884
-221:3:1891
-222:3:1896
-223:0:2103
-224:3:1907
-225:0:2103
-226:3:1911
-227:3:1912
-228:3:1916
-229:3:1920
-230:3:1921
-231:3:1925
-232:3:1933
-233:3:1934
-234:3:1939
-235:3:1946
-236:3:1947
-237:3:1954
-238:3:1959
-239:0:2103
-240:3:1970
-241:0:2103
-242:3:1978
-243:3:1979
-244:3:1983
-245:3:1987
-246:3:1988
-247:3:1992
-248:3:2000
-249:3:2001
-250:3:2006
-251:3:2013
-252:3:2014
-253:3:2021
-254:3:2026
-255:0:2103
-256:3:2037
-257:0:2103
-258:3:2039
-259:0:2103
-260:3:2040
-261:0:2103
-262:3:876
-263:0:2103
-264:3:877
-265:3:881
-266:3:882
-267:3:890
-268:3:891
-269:3:895
-270:3:896
-271:3:904
-272:3:909
-273:3:913
-274:3:914
-275:3:921
-276:3:922
-277:3:933
-278:3:934
-279:3:935
-280:3:946
-281:3:951
-282:3:952
-283:0:2103
-284:3:964
-285:0:2103
-286:3:966
-287:3:967
-288:0:2103
-289:3:971
-290:3:975
-291:3:976
-292:3:984
-293:3:985
-294:3:989
-295:3:990
-296:3:998
-297:3:1003
-298:3:1004
-299:3:1015
-300:3:1016
-301:3:1027
-302:3:1028
-303:3:1029
-304:3:1040
-305:3:1045
-306:3:1046
-307:0:2103
-308:3:1058
-309:0:2103
-310:3:1060
-311:0:2103
-312:3:1061
-313:0:2103
-314:3:1071
-315:0:2103
-316:3:1075
-317:3:1076
-318:3:1080
-319:3:1084
-320:3:1085
-321:3:1089
-322:3:1097
-323:3:1098
-324:3:1103
-325:3:1110
-326:3:1111
-327:3:1118
-328:3:1123
-329:0:2103
-330:3:1134
-331:0:2103
-332:3:1138
-333:3:1139
-334:3:1143
-335:3:1147
-336:3:1148
-337:3:1152
-338:3:1160
-339:3:1161
-340:3:1166
-341:3:1173
-342:3:1174
-343:3:1181
-344:3:1186
-345:0:2103
-346:3:1197
-347:0:2103
-348:3:1205
-349:3:1206
-350:3:1210
-351:3:1214
-352:3:1215
-353:3:1219
-354:3:1227
-355:3:1228
-356:3:1233
-357:3:1240
-358:3:1241
-359:3:1248
-360:3:1253
-361:0:2103
-362:3:1264
-363:0:2103
-364:3:1266
-365:0:2103
-366:3:1267
-367:3:1271
-368:3:1272
-369:3:1280
-370:3:1281
-371:3:1285
-372:3:1286
-373:3:1294
-374:3:1299
-375:3:1303
-376:3:1304
-377:3:1311
-378:3:1312
-379:3:1323
-380:3:1324
-381:3:1325
-382:3:1336
-383:3:1341
-384:3:1342
-385:0:2103
-386:3:1354
-387:0:2103
-388:3:1356
-389:0:2103
-390:3:1359
-391:3:1360
-392:3:1372
-393:3:1373
-394:3:1377
-395:3:1378
-396:3:1386
-397:3:1391
-398:3:1395
-399:3:1396
-400:3:1403
-401:3:1404
-402:3:1415
-403:3:1416
-404:3:1417
-405:3:1428
-406:3:1433
-407:3:1434
-408:0:2103
-409:3:1446
-410:0:2103
-411:3:1448
-412:0:2103
-413:3:1449
-414:0:2103
-415:3:1450
-416:0:2103
-417:3:1451
-418:0:2103
-419:3:1452
-420:3:1456
-421:3:1457
-422:3:1465
-423:3:1466
-424:3:1470
-425:3:1471
-426:3:1479
-427:3:1484
-428:3:1488
-429:3:1489
-430:3:1496
-431:3:1497
-432:3:1508
-433:3:1509
-434:3:1510
-435:3:1521
-436:3:1526
-437:3:1527
-438:0:2103
-439:3:1539
-440:0:2103
-441:3:1736
-442:0:2103
-443:3:1834
-444:0:2103
-445:3:1835
-446:0:2103
-447:3:1839
-448:0:2103
-449:3:1848
-450:3:1849
-451:3:1853
-452:3:1857
-453:3:1858
-454:3:1862
-455:3:1870
-456:3:1871
-457:3:1876
-458:3:1883
-459:3:1884
-460:3:1891
-461:3:1896
-462:0:2103
-463:3:1907
-464:0:2103
-465:3:1911
-466:3:1912
-467:3:1916
-468:3:1920
-469:3:1921
-470:3:1925
-471:3:1933
-472:3:1934
-473:3:1939
-474:3:1946
-475:3:1947
-476:3:1954
-477:3:1959
-478:0:2103
-479:3:1970
-480:0:2103
-481:3:1978
-482:3:1979
-483:3:1983
-484:3:1987
-485:3:1988
-486:3:1992
-487:3:2000
-488:3:2001
-489:3:2006
-490:3:2013
-491:3:2014
-492:3:2021
-493:3:2026
-494:0:2103
-495:3:2037
-496:0:2103
-497:3:2039
-498:0:2103
-499:3:2040
-500:0:2103
-501:3:876
-502:0:2103
-503:3:877
-504:3:881
-505:3:882
-506:3:890
-507:3:891
-508:3:895
-509:3:896
-510:3:904
-511:3:909
-512:3:913
-513:3:914
-514:3:921
-515:3:922
-516:3:933
-517:3:934
-518:3:935
-519:3:946
-520:3:951
-521:3:952
-522:0:2103
-523:3:964
-524:0:2103
-525:3:966
-526:3:967
-527:0:2103
-528:3:971
-529:3:975
-530:3:976
-531:3:984
-532:3:985
-533:3:989
-534:3:990
-535:3:998
-536:3:1003
-537:3:1004
-538:3:1015
-539:3:1016
-540:3:1027
-541:3:1028
-542:3:1029
-543:3:1040
-544:3:1045
-545:3:1046
-546:0:2103
-547:3:1058
-548:0:2103
-549:3:1060
-550:0:2103
-551:3:1061
-552:0:2103
-553:3:1071
-554:0:2103
-555:3:1075
-556:3:1076
-557:3:1080
-558:3:1084
-559:3:1085
-560:3:1089
-561:3:1097
-562:3:1098
-563:3:1103
-564:3:1110
-565:3:1111
-566:3:1118
-567:3:1123
-568:0:2103
-569:3:1134
-570:0:2103
-571:3:1138
-572:3:1139
-573:3:1143
-574:3:1147
-575:3:1148
-576:3:1152
-577:3:1160
-578:3:1161
-579:3:1166
-580:3:1173
-581:3:1174
-582:3:1181
-583:3:1186
-584:0:2103
-585:3:1197
-586:0:2103
-587:3:1205
-588:3:1206
-589:3:1210
-590:3:1214
-591:3:1215
-592:3:1219
-593:3:1227
-594:3:1228
-595:3:1233
-596:3:1240
-597:3:1241
-598:3:1248
-599:3:1253
-600:0:2103
-601:3:1264
-602:0:2103
-603:3:1266
-604:0:2103
-605:3:1267
-606:3:1271
-607:3:1272
-608:3:1280
-609:3:1281
-610:3:1285
-611:3:1286
-612:3:1294
-613:3:1299
-614:3:1303
-615:3:1304
-616:3:1311
-617:3:1312
-618:3:1323
-619:3:1324
-620:3:1325
-621:3:1336
-622:3:1341
-623:3:1342
-624:0:2103
-625:3:1354
-626:0:2103
-627:3:1356
-628:0:2103
-629:3:1359
-630:3:1360
-631:3:1372
-632:3:1373
-633:3:1377
-634:3:1378
-635:3:1386
-636:3:1391
-637:3:1395
-638:3:1396
-639:3:1403
-640:3:1404
-641:3:1415
-642:3:1416
-643:3:1417
-644:3:1428
-645:3:1433
-646:3:1434
-647:0:2103
-648:3:1446
-649:0:2103
-650:3:1448
-651:0:2103
-652:3:1449
-653:0:2103
-654:3:1450
-655:0:2103
-656:3:1451
-657:0:2103
-658:3:1452
-659:3:1456
-660:3:1457
-661:3:1465
-662:3:1466
-663:3:1470
-664:3:1471
-665:3:1479
-666:3:1484
-667:3:1488
-668:3:1489
-669:3:1496
-670:3:1497
-671:3:1508
-672:3:1509
-673:3:1510
-674:3:1521
-675:3:1526
-676:3:1527
-677:0:2103
-678:3:1539
-679:0:2103
-680:3:1736
-681:0:2103
-682:3:1834
-683:0:2103
-684:3:1835
-685:0:2103
-686:3:1839
-687:0:2103
-688:3:1848
-689:3:1849
-690:3:1853
-691:3:1857
-692:3:1858
-693:3:1862
-694:3:1870
-695:3:1871
-696:3:1876
-697:3:1883
-698:3:1884
-699:3:1891
-700:3:1896
-701:0:2103
-702:3:1907
-703:0:2103
-704:3:1911
-705:3:1912
-706:3:1916
-707:3:1920
-708:3:1921
-709:3:1925
-710:3:1933
-711:3:1934
-712:3:1939
-713:3:1946
-714:3:1947
-715:3:1954
-716:3:1959
-717:0:2103
-718:3:1970
-719:0:2103
-720:3:1978
-721:3:1979
-722:3:1983
-723:3:1987
-724:3:1988
-725:3:1992
-726:3:2000
-727:3:2001
-728:3:2006
-729:3:2013
-730:3:2014
-731:3:2021
-732:3:2026
-733:0:2103
-734:3:2037
-735:0:2103
-736:3:2039
-737:0:2103
-738:3:2040
-739:0:2103
-740:3:876
-741:0:2103
-742:3:877
-743:3:881
-744:3:882
-745:3:890
-746:3:891
-747:3:895
-748:3:896
-749:3:904
-750:3:909
-751:3:913
-752:3:914
-753:3:921
-754:3:922
-755:3:933
-756:3:934
-757:3:935
-758:3:946
-759:3:951
-760:3:952
-761:0:2103
-762:3:964
-763:0:2103
-764:3:966
-765:3:967
-766:0:2103
-767:3:971
-768:3:975
-769:3:976
-770:3:984
-771:3:985
-772:3:989
-773:3:990
-774:3:998
-775:3:1003
-776:3:1004
-777:3:1015
-778:3:1016
-779:3:1027
-780:3:1028
-781:3:1029
-782:3:1040
-783:3:1045
-784:3:1046
-785:0:2103
-786:3:1058
-787:0:2103
-788:3:1060
-789:0:2103
-790:3:1061
-791:0:2103
-792:3:1071
-793:0:2103
-794:3:1075
-795:3:1076
-796:3:1080
-797:3:1084
-798:3:1085
-799:3:1089
-800:3:1097
-801:3:1098
-802:3:1103
-803:3:1110
-804:3:1111
-805:3:1118
-806:3:1123
-807:0:2103
-808:3:1134
-809:0:2103
-810:3:1138
-811:3:1139
-812:3:1143
-813:3:1147
-814:3:1148
-815:3:1152
-816:3:1160
-817:3:1161
-818:3:1166
-819:3:1173
-820:3:1174
-821:3:1181
-822:3:1186
-823:0:2103
-824:3:1197
-825:0:2103
-826:3:1205
-827:3:1206
-828:3:1210
-829:3:1214
-830:3:1215
-831:3:1219
-832:3:1227
-833:3:1228
-834:3:1233
-835:3:1240
-836:3:1241
-837:3:1248
-838:3:1253
-839:0:2103
-840:3:1264
-841:0:2103
-842:3:1266
-843:0:2103
-844:3:1267
-845:3:1271
-846:3:1272
-847:3:1280
-848:3:1281
-849:3:1285
-850:3:1286
-851:3:1294
-852:3:1299
-853:3:1303
-854:3:1304
-855:3:1311
-856:3:1312
-857:3:1323
-858:3:1324
-859:3:1325
-860:3:1336
-861:3:1341
-862:3:1342
-863:0:2103
-864:3:1354
-865:0:2103
-866:3:1356
-867:0:2103
-868:3:1359
-869:3:1360
-870:3:1372
-871:3:1373
-872:3:1377
-873:3:1378
-874:3:1386
-875:3:1391
-876:3:1395
-877:3:1396
-878:3:1403
-879:3:1404
-880:3:1415
-881:3:1416
-882:3:1417
-883:3:1428
-884:3:1433
-885:3:1434
-886:0:2103
-887:3:1446
-888:0:2103
-889:3:1448
-890:0:2103
-891:3:1449
-892:0:2103
-893:3:1450
-894:0:2103
-895:3:1451
-896:0:2103
-897:3:1452
-898:3:1456
-899:3:1457
-900:3:1465
-901:3:1466
-902:3:1470
-903:3:1471
-904:3:1479
-905:3:1484
-906:3:1488
-907:3:1489
-908:3:1496
-909:3:1497
-910:3:1508
-911:3:1509
-912:3:1510
-913:3:1521
-914:3:1526
-915:3:1527
-916:0:2103
-917:3:1539
-918:0:2103
-919:3:1736
-920:0:2103
-921:3:1834
-922:0:2103
-923:3:1835
-924:0:2103
-925:3:1839
-926:0:2103
-927:3:1848
-928:3:1849
-929:3:1853
-930:3:1857
-931:3:1858
-932:3:1862
-933:3:1870
-934:3:1871
-935:3:1876
-936:3:1883
-937:3:1884
-938:3:1891
-939:3:1896
-940:0:2103
-941:3:1907
-942:0:2103
-943:2:458
-944:0:2103
-945:2:464
-946:0:2103
-947:2:465
-948:0:2103
-949:2:466
-950:0:2103
-951:2:467
-952:0:2103
-953:1:2
-954:0:2103
-955:2:468
-956:0:2103
-957:1:8
-958:0:2103
-959:1:9
-960:0:2103
-961:1:10
-962:0:2103
-963:1:11
-964:0:2103
-965:2:467
-966:0:2103
-967:1:12
-968:1:16
-969:1:17
-970:1:25
-971:1:26
-972:1:30
-973:1:31
-974:1:39
-975:1:44
-976:1:48
-977:1:49
-978:1:63
-979:1:64
-980:1:68
-981:1:69
-982:1:70
-983:1:81
-984:1:86
-985:1:87
-986:0:2103
-987:2:468
-988:0:2103
-989:1:99
-990:0:2103
-991:2:469
-992:0:2103
-993:2:475
-994:0:2103
-995:2:476
-996:0:2103
-997:2:477
-998:2:481
-999:2:482
-1000:2:490
-1001:2:491
-1002:2:495
-1003:2:496
-1004:2:504
-1005:2:509
-1006:2:513
-1007:2:514
-1008:2:528
-1009:2:529
-1010:2:533
-1011:2:534
-1012:2:535
-1013:2:546
-1014:2:551
-1015:2:552
-1016:0:2103
-1017:2:564
-1018:0:2103
-1019:2:565
-1020:2:569
-1021:2:570
-1022:2:578
-1023:2:579
-1024:2:583
-1025:2:584
-1026:2:592
-1027:2:597
-1028:2:601
-1029:2:602
-1030:2:616
-1031:2:617
-1032:2:621
-1033:2:622
-1034:2:623
-1035:2:634
-1036:2:639
-1037:2:640
-1038:0:2103
-1039:2:652
-1040:0:2103
-1041:2:653
-1042:0:2103
-1043:3:1911
-1044:3:1912
-1045:3:1916
-1046:3:1920
-1047:3:1921
-1048:3:1925
-1049:3:1933
-1050:3:1934
-1051:3:1939
-1052:3:1946
-1053:3:1947
-1054:3:1954
-1055:3:1959
-1056:0:2103
-1057:3:1970
-1058:0:2103
-1059:3:1978
-1060:3:1979
-1061:3:1983
-1062:3:1987
-1063:3:1988
-1064:3:1992
-1065:3:2000
-1066:3:2001
-1067:3:2006
-1068:3:2013
-1069:3:2014
-1070:3:2021
-1071:3:2026
-1072:0:2103
-1073:3:2037
-1074:0:2103
-1075:3:2039
-1076:0:2103
-1077:3:2040
-1078:0:2103
-1079:3:876
-1080:0:2103
-1081:3:877
-1082:3:881
-1083:3:882
-1084:3:890
-1085:3:891
-1086:3:895
-1087:3:896
-1088:3:904
-1089:3:909
-1090:3:913
-1091:3:914
-1092:3:921
-1093:3:922
-1094:3:933
-1095:3:934
-1096:3:935
-1097:3:946
-1098:3:951
-1099:3:952
-1100:0:2103
-1101:3:964
-1102:0:2103
-1103:3:966
-1104:3:967
-1105:0:2103
-1106:3:971
-1107:3:975
-1108:3:976
-1109:3:984
-1110:3:985
-1111:3:989
-1112:3:990
-1113:3:998
-1114:3:1003
-1115:3:1004
-1116:3:1015
-1117:3:1016
-1118:3:1027
-1119:3:1028
-1120:3:1029
-1121:3:1040
-1122:3:1045
-1123:3:1046
-1124:0:2103
-1125:3:1058
-1126:0:2103
-1127:3:1060
-1128:0:2103
-1129:3:1061
-1130:0:2103
-1131:3:1071
-1132:0:2103
-1133:3:1075
-1134:3:1076
-1135:3:1080
-1136:3:1084
-1137:3:1085
-1138:3:1089
-1139:3:1097
-1140:3:1098
-1141:3:1103
-1142:3:1110
-1143:3:1111
-1144:3:1118
-1145:3:1123
-1146:0:2103
-1147:3:1134
-1148:0:2103
-1149:2:654
-1150:2:658
-1151:2:659
-1152:2:667
-1153:2:668
-1154:2:672
-1155:2:673
-1156:2:681
-1157:2:686
-1158:2:690
-1159:2:691
-1160:2:698
-1161:2:699
-1162:2:710
-1163:2:711
-1164:2:712
-1165:2:723
-1166:2:735
-1167:2:736
-1168:0:2103
-1169:2:741
-1170:0:2103
-1171:2:750
-1172:0:2103
-1173:2:753
-1174:0:2103
-1175:2:758
-1176:0:2103
-1177:3:1138
-1178:3:1139
-1179:3:1143
-1180:3:1144
-1181:3:1152
-1182:3:1160
-1183:3:1161
-1184:3:1166
-1185:3:1173
-1186:3:1174
-1187:3:1181
-1188:3:1186
-1189:0:2103
-1190:3:1197
-1191:0:2103
-1192:3:1205
-1193:3:1206
-1194:3:1210
-1195:3:1214
-1196:3:1215
-1197:3:1219
-1198:3:1227
-1199:3:1228
-1200:3:1233
-1201:3:1240
-1202:3:1241
-1203:3:1248
-1204:3:1253
-1205:0:2103
-1206:3:1264
-1207:0:2103
-1208:3:1266
-1209:0:2103
-1210:3:1267
-1211:3:1271
-1212:3:1272
-1213:3:1280
-1214:3:1281
-1215:3:1285
-1216:3:1286
-1217:3:1294
-1218:3:1299
-1219:3:1303
-1220:3:1304
-1221:3:1311
-1222:3:1312
-1223:3:1323
-1224:3:1324
-1225:3:1325
-1226:3:1336
-1227:3:1341
-1228:3:1342
-1229:0:2103
-1230:3:1354
-1231:0:2103
-1232:3:1356
-1233:0:2103
-1234:3:1359
-1235:3:1360
-1236:3:1372
-1237:3:1373
-1238:3:1377
-1239:3:1378
-1240:3:1386
-1241:3:1391
-1242:3:1395
-1243:3:1396
-1244:3:1403
-1245:3:1404
-1246:3:1415
-1247:3:1416
-1248:3:1417
-1249:3:1428
-1250:3:1433
-1251:3:1434
-1252:0:2103
-1253:3:1446
-1254:0:2103
-1255:3:1448
-1256:0:2103
-1257:3:1449
-1258:0:2103
-1259:3:1450
-1260:0:2103
-1261:3:1451
-1262:0:2103
-1263:3:1452
-1264:3:1456
-1265:3:1457
-1266:3:1465
-1267:3:1466
-1268:3:1470
-1269:3:1471
-1270:3:1479
-1271:3:1484
-1272:3:1488
-1273:3:1489
-1274:3:1496
-1275:3:1497
-1276:3:1508
-1277:3:1509
-1278:3:1510
-1279:3:1521
-1280:3:1526
-1281:3:1527
-1282:0:2103
-1283:3:1539
-1284:0:2103
-1285:3:1736
-1286:0:2103
-1287:3:1834
-1288:0:2103
-1289:3:1835
-1290:0:2103
-1291:3:1839
-1292:0:2103
-1293:3:1848
-1294:3:1849
-1295:3:1853
-1296:3:1857
-1297:3:1858
-1298:3:1862
-1299:3:1870
-1300:3:1871
-1301:3:1876
-1302:3:1883
-1303:3:1884
-1304:3:1891
-1305:3:1896
-1306:0:2103
-1307:3:1907
-1308:0:2103
-1309:3:1911
-1310:3:1912
-1311:3:1916
-1312:3:1920
-1313:3:1921
-1314:3:1925
-1315:3:1933
-1316:3:1934
-1317:3:1939
-1318:3:1946
-1319:3:1947
-1320:3:1954
-1321:3:1959
-1322:0:2103
-1323:3:1970
-1324:0:2103
-1325:3:1978
-1326:3:1979
-1327:3:1983
-1328:3:1987
-1329:3:1988
-1330:3:1992
-1331:3:2000
-1332:3:2001
-1333:3:2006
-1334:3:2013
-1335:3:2014
-1336:3:2021
-1337:3:2026
-1338:0:2103
-1339:3:2037
-1340:0:2103
-1341:3:2039
-1342:0:2103
-1343:3:2040
-1344:0:2103
-1345:3:2043
-1346:0:2103
-1347:3:2048
-1348:0:2103
-1349:2:759
-1350:0:2101
-1351:3:2049
-1352:0:2107
-1353:3:1181
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress.ltl b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.define b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.log
deleted file mode 100644 (file)
index e3ec127..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 1803: Claim reached state 9 (line 748)
-Depth=    5838 States=    1e+06 Transitions= 1.06e+07 Memory=   494.865        t=   9.24 R=   1e+05
-Depth=    5838 States=    2e+06 Transitions= 1.97e+07 Memory=   532.658        t=   17.7 R=   1e+05
-Depth=    5838 States=    3e+06 Transitions= 3.15e+07 Memory=   555.315        t=   28.4 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=    6855 States=    4e+06 Transitions= 4.32e+07 Memory=   613.096        t=   39.1 R=   1e+05
-Depth=    9059 States=    5e+06 Transitions= 5.48e+07 Memory=   642.295        t=   49.5 R=   1e+05
-Depth=    9059 States=    6e+06 Transitions= 6.91e+07 Memory=   672.178        t=   62.5 R=   1e+05
-Depth=    9059 States=    7e+06 Transitions= 7.99e+07 Memory=   706.455        t=   72.5 R=   1e+05
-Depth=    9059 States=    8e+06 Transitions= 9.23e+07 Memory=   735.752        t=     84 R=   1e+05
-Depth=    9059 States=    9e+06 Transitions= 1.04e+08 Memory=   766.318        t=   94.5 R=   1e+05
-pan: resizing hashtable to -w24..  done
-Depth=    9059 States=    1e+07 Transitions= 1.16e+08 Memory=   920.002        t=    106 R=   9e+04
-Depth=    9059 States=  1.1e+07 Transitions=  1.3e+08 Memory=   945.002        t=    119 R=   9e+04
-Depth=    9059 States=  1.2e+07 Transitions= 1.54e+08 Memory=   967.756        t=    140 R=   9e+04
-Depth=    9059 States=  1.3e+07 Transitions= 1.72e+08 Memory=   995.002        t=    157 R=   8e+04
-Depth=    9059 States=  1.4e+07 Transitions= 1.92e+08 Memory=  1022.736        t=    175 R=   8e+04
-Depth=    9059 States=  1.5e+07 Transitions=  2.1e+08 Memory=  1050.080        t=    191 R=   8e+04
-Depth=    9059 States=  1.6e+07 Transitions= 2.22e+08 Memory=  1082.502        t=    203 R=   8e+04
-Depth=    9059 States=  1.7e+07 Transitions= 2.41e+08 Memory=  1108.479        t=    219 R=   8e+04
-Depth=    9059 States=  1.8e+07 Transitions= 2.58e+08 Memory=  1134.455        t=    235 R=   8e+04
-Depth=    9059 States=  1.9e+07 Transitions=  2.7e+08 Memory=  1164.533        t=    246 R=   8e+04
-Depth=    9059 States=    2e+07 Transitions= 2.83e+08 Memory=  1193.830        t=    258 R=   8e+04
-Depth=    9059 States=  2.1e+07 Transitions= 3.03e+08 Memory=  1219.026        t=    276 R=   8e+04
-Depth=    9059 States=  2.2e+07 Transitions= 3.19e+08 Memory=  1248.420        t=    291 R=   8e+04
-Depth=    9059 States=  2.3e+07 Transitions= 3.42e+08 Memory=  1271.858        t=    312 R=   7e+04
-Depth=    9059 States=  2.4e+07 Transitions=  3.6e+08 Memory=  1298.908        t=    328 R=   7e+04
-Depth=    9059 States=  2.5e+07 Transitions= 3.84e+08 Memory=  1323.127        t=    350 R=   7e+04
-Depth=    9059 States=  2.6e+07 Transitions=    4e+08 Memory=  1348.518        t=    365 R=   7e+04
-Depth=    9059 States=  2.7e+07 Transitions= 4.16e+08 Memory=  1379.865        t=    380 R=   7e+04
-Depth=    9059 States=  2.8e+07 Transitions= 4.26e+08 Memory=  1411.115        t=    389 R=   7e+04
-Depth=    9059 States=  2.9e+07 Transitions= 4.42e+08 Memory=  1439.631        t=    404 R=   7e+04
-Depth=    9059 States=    3e+07 Transitions= 4.64e+08 Memory=  1462.385        t=    423 R=   7e+04
-Depth=    9059 States=  3.1e+07 Transitions= 4.82e+08 Memory=  1490.998        t=    439 R=   7e+04
-Depth=    9059 States=  3.2e+07 Transitions= 4.99e+08 Memory=  1519.514        t=    456 R=   7e+04
-Depth=    9059 States=  3.3e+07 Transitions= 5.18e+08 Memory=  1545.393        t=    473 R=   7e+04
-Depth=    9059 States=  3.4e+07 Transitions= 5.33e+08 Memory=  1578.108        t=    486 R=   7e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9059 States=  3.5e+07 Transitions= 5.49e+08 Memory=  2098.994        t=    504 R=   7e+04
-Depth=    9059 States=  3.6e+07 Transitions= 5.74e+08 Memory=  2121.651        t=    528 R=   7e+04
-Depth=    9059 States=  3.7e+07 Transitions= 5.96e+08 Memory=  2147.334        t=    547 R=   7e+04
-Depth=    9059 States=  3.8e+07 Transitions= 6.17e+08 Memory=  2170.186        t=    567 R=   7e+04
-Depth=    9059 States=  3.9e+07 Transitions=  6.3e+08 Memory=  2199.776        t=    578 R=   7e+04
-Depth=    9059 States=    4e+07 Transitions= 6.53e+08 Memory=  2225.459        t=    599 R=   7e+04
-Depth=    9059 States=  4.1e+07 Transitions= 6.69e+08 Memory=  2250.361        t=    614 R=   7e+04
-Depth=    9059 States=  4.2e+07 Transitions= 6.85e+08 Memory=  2279.268        t=    628 R=   7e+04
-Depth=    9059 States=  4.3e+07 Transitions= 7.03e+08 Memory=  2304.463        t=    644 R=   7e+04
-Depth=    9059 States=  4.4e+07 Transitions= 7.13e+08 Memory=  2338.252        t=    654 R=   7e+04
-Depth=    9059 States=  4.5e+07 Transitions= 7.25e+08 Memory=  2366.768        t=    665 R=   7e+04
-Depth=    9059 States=  4.6e+07 Transitions= 7.41e+08 Memory=  2393.330        t=    679 R=   7e+04
-Depth=    9059 States=  4.7e+07 Transitions= 7.57e+08 Memory=  2420.381        t=    694 R=   7e+04
-Depth=    9059 States=  4.8e+07 Transitions= 7.72e+08 Memory=  2447.041        t=    708 R=   7e+04
-Depth=    9059 States=  4.9e+07 Transitions= 7.88e+08 Memory=  2476.143        t=    722 R=   7e+04
-Depth=    9059 States=    5e+07 Transitions= 8.04e+08 Memory=  2501.045        t=    737 R=   7e+04
-Depth=    9059 States=  5.1e+07 Transitions=  8.2e+08 Memory=  2530.440        t=    752 R=   7e+04
-Depth=    9059 States=  5.2e+07 Transitions= 8.37e+08 Memory=  2554.854        t=    766 R=   7e+04
-Depth=    9059 States=  5.3e+07 Transitions=  8.5e+08 Memory=  2583.467        t=    779 R=   7e+04
-Depth=    9059 States=  5.4e+07 Transitions= 8.66e+08 Memory=  2611.299        t=    794 R=   7e+04
-Depth=    9059 States=  5.5e+07 Transitions= 8.79e+08 Memory=  2640.791        t=    805 R=   7e+04
-Depth=    9059 States=  5.6e+07 Transitions=  8.9e+08 Memory=  2672.139        t=    815 R=   7e+04
-Depth=    9059 States=  5.7e+07 Transitions= 9.05e+08 Memory=  2702.705        t=    829 R=   7e+04
-Depth=    9059 States=  5.8e+07 Transitions= 9.22e+08 Memory=  2727.998        t=    845 R=   7e+04
-Depth=    9059 States=  5.9e+07 Transitions= 9.38e+08 Memory=  2754.463        t=    859 R=   7e+04
-Depth=    9059 States=    6e+07 Transitions= 9.49e+08 Memory=  2789.717        t=    870 R=   7e+04
-Depth=    9059 States=  6.1e+07 Transitions= 9.62e+08 Memory=  2817.744        t=    881 R=   7e+04
-Depth=    9059 States=  6.2e+07 Transitions= 9.79e+08 Memory=  2838.447        t=    896 R=   7e+04
-Depth=    9059 States=  6.3e+07 Transitions=    1e+09 Memory=  2863.154        t=    919 R=   7e+04
-Depth=    9059 States=  6.4e+07 Transitions= 1.02e+09 Memory=  2889.131        t=    936 R=   7e+04
-Depth=    9059 States=  6.5e+07 Transitions= 1.04e+09 Memory=  2919.502        t=    952 R=   7e+04
-Depth=    9059 States=  6.6e+07 Transitions= 1.06e+09 Memory=  2943.916        t=    968 R=   7e+04
-Depth=    9059 States=  6.7e+07 Transitions= 1.07e+09 Memory=  2978.975        t=    979 R=   7e+04
-Depth=    9059 States=  6.8e+07 Transitions= 1.09e+09 Memory=  3003.877        t=    996 R=   7e+04
-Depth=    9059 States=  6.9e+07 Transitions= 1.11e+09 Memory=  3028.584        t= 1.01e+03 R=   7e+04
-Depth=    9059 States=    7e+07 Transitions= 1.12e+09 Memory=  3058.174        t= 1.02e+03 R=   7e+04
-Depth=    9059 States=  7.1e+07 Transitions= 1.13e+09 Memory=  3088.350        t= 1.04e+03 R=   7e+04
-Depth=    9059 States=  7.2e+07 Transitions= 1.15e+09 Memory=  3113.350        t= 1.05e+03 R=   7e+04
-Depth=    9059 States=  7.3e+07 Transitions= 1.17e+09 Memory=  3142.158        t= 1.07e+03 R=   7e+04
-Depth=    9059 States=  7.4e+07 Transitions= 1.19e+09 Memory=  3166.279        t= 1.09e+03 R=   7e+04
-Depth=    9059 States=  7.5e+07 Transitions= 1.21e+09 Memory=  3192.744        t= 1.11e+03 R=   7e+04
-Depth=    9059 States=  7.6e+07 Transitions= 1.23e+09 Memory=  3217.256        t= 1.13e+03 R=   7e+04
-Depth=    9059 States=  7.7e+07 Transitions= 1.25e+09 Memory=  3242.549        t= 1.14e+03 R=   7e+04
-Depth=    9059 States=  7.8e+07 Transitions= 1.26e+09 Memory=  3273.115        t= 1.16e+03 R=   7e+04
-Depth=    9059 States=  7.9e+07 Transitions= 1.27e+09 Memory=  3303.975        t= 1.17e+03 R=   7e+04
-Depth=    9059 States=    8e+07 Transitions= 1.29e+09 Memory=  3334.541        t= 1.18e+03 R=   7e+04
-Depth=    9059 States=  8.1e+07 Transitions= 1.31e+09 Memory=  3356.221        t= 1.2e+03 R=   7e+04
-Depth=    9059 States=  8.2e+07 Transitions= 1.33e+09 Memory=  3385.127        t= 1.22e+03 R=   7e+04
-Depth=    9059 States=  8.3e+07 Transitions= 1.35e+09 Memory=  3412.959        t= 1.23e+03 R=   7e+04
-Depth=    9059 States=  8.4e+07 Transitions= 1.37e+09 Memory=  3438.936        t= 1.25e+03 R=   7e+04
-Depth=    9059 States=  8.5e+07 Transitions= 1.38e+09 Memory=  3471.455        t= 1.26e+03 R=   7e+04
-Depth=    9059 States=  8.6e+07 Transitions=  1.4e+09 Memory=  3498.115        t= 1.28e+03 R=   7e+04
-Depth=    9059 States=  8.7e+07 Transitions= 1.42e+09 Memory=  3519.014        t= 1.3e+03 R=   7e+04
-Depth=    9059 States=  8.8e+07 Transitions= 1.44e+09 Memory=  3546.162        t= 1.32e+03 R=   7e+04
-Depth=    9059 States=  8.9e+07 Transitions= 1.46e+09 Memory=  3567.842        t= 1.34e+03 R=   7e+04
-Depth=    9059 States=    9e+07 Transitions= 1.48e+09 Memory=  3598.799        t= 1.35e+03 R=   7e+04
-Depth=    9059 States=  9.1e+07 Transitions=  1.5e+09 Memory=  3622.920        t= 1.37e+03 R=   7e+04
-Depth=    9059 States=  9.2e+07 Transitions= 1.52e+09 Memory=  3648.701        t= 1.39e+03 R=   7e+04
-Depth=    9059 States=  9.3e+07 Transitions= 1.53e+09 Memory=  3676.045        t= 1.4e+03 R=   7e+04
-Depth=    9059 States=  9.4e+07 Transitions= 1.55e+09 Memory=  3702.412        t= 1.42e+03 R=   7e+04
-Depth=    9059 States=  9.5e+07 Transitions= 1.56e+09 Memory=  3735.713        t= 1.43e+03 R=   7e+04
-Depth=    9059 States=  9.6e+07 Transitions= 1.57e+09 Memory=  3764.522        t= 1.44e+03 R=   7e+04
-Depth=    9059 States=  9.7e+07 Transitions= 1.59e+09 Memory=  3790.693        t= 1.45e+03 R=   7e+04
-Depth=    9059 States=  9.8e+07 Transitions= 1.61e+09 Memory=  3817.940        t= 1.47e+03 R=   7e+04
-Depth=    9059 States=  9.9e+07 Transitions= 1.62e+09 Memory=  3845.283        t= 1.48e+03 R=   7e+04
-Depth=    9059 States=    1e+08 Transitions= 1.64e+09 Memory=  3873.213        t= 1.5e+03 R=   7e+04
-Depth=    9059 States= 1.01e+08 Transitions= 1.65e+09 Memory=  3897.920        t= 1.51e+03 R=   7e+04
-Depth=    9059 States= 1.02e+08 Transitions= 1.67e+09 Memory=  3926.631        t= 1.53e+03 R=   7e+04
-Depth=    9059 States= 1.03e+08 Transitions= 1.68e+09 Memory=  3952.315        t= 1.54e+03 R=   7e+04
-Depth=    9059 States= 1.04e+08 Transitions=  1.7e+09 Memory=  3981.026        t= 1.56e+03 R=   7e+04
-Depth=    9059 States= 1.05e+08 Transitions= 1.71e+09 Memory=  4010.029        t= 1.57e+03 R=   7e+04
-Depth=    9059 States= 1.06e+08 Transitions= 1.73e+09 Memory=  4038.838        t= 1.58e+03 R=   7e+04
-Depth=    9059 States= 1.07e+08 Transitions= 1.74e+09 Memory=  4070.381        t= 1.59e+03 R=   7e+04
-Depth=    9059 States= 1.08e+08 Transitions= 1.75e+09 Memory=  4099.385        t= 1.61e+03 R=   7e+04
-Depth=    9059 States= 1.09e+08 Transitions= 1.77e+09 Memory=  4126.338        t= 1.62e+03 R=   7e+04
-Depth=    9059 States=  1.1e+08 Transitions= 1.79e+09 Memory=  4151.924        t= 1.64e+03 R=   7e+04
-Depth=    9059 States= 1.11e+08 Transitions=  1.8e+09 Memory=  4187.276        t= 1.65e+03 R=   7e+04
-Depth=    9059 States= 1.12e+08 Transitions= 1.81e+09 Memory=  4214.326        t= 1.66e+03 R=   7e+04
-Depth=    9059 States= 1.13e+08 Transitions= 1.83e+09 Memory=  4237.471        t= 1.67e+03 R=   7e+04
-Depth=    9059 States= 1.14e+08 Transitions= 1.85e+09 Memory=  4261.104        t= 1.7e+03 R=   7e+04
-Depth=    9059 States= 1.15e+08 Transitions= 1.87e+09 Memory=  4286.690        t= 1.71e+03 R=   7e+04
-Depth=    9059 States= 1.16e+08 Transitions= 1.89e+09 Memory=  4314.619        t= 1.73e+03 R=   7e+04
-Depth=    9059 States= 1.17e+08 Transitions= 1.91e+09 Memory=  4341.768        t= 1.75e+03 R=   7e+04
-Depth=    9059 States= 1.18e+08 Transitions= 1.92e+09 Memory=  4375.166        t= 1.76e+03 R=   7e+04
-Depth=    9059 States= 1.19e+08 Transitions= 1.94e+09 Memory=  4401.338        t= 1.78e+03 R=   7e+04
-Depth=    9059 States=  1.2e+08 Transitions= 1.95e+09 Memory=  4426.436        t= 1.79e+03 R=   7e+04
-Depth=    9059 States= 1.21e+08 Transitions= 1.97e+09 Memory=  4456.807        t= 1.8e+03 R=   7e+04
-Depth=    9059 States= 1.22e+08 Transitions= 1.98e+09 Memory=  4486.592        t= 1.82e+03 R=   7e+04
-Depth=    9059 States= 1.23e+08 Transitions=    2e+09 Memory=  4511.787        t= 1.83e+03 R=   7e+04
-Depth=    9059 States= 1.24e+08 Transitions= 2.02e+09 Memory=  4540.108        t= 1.85e+03 R=   7e+04
-Depth=    9059 States= 1.25e+08 Transitions= 2.04e+09 Memory=  4564.033        t= 1.87e+03 R=   7e+04
-Depth=    9059 States= 1.26e+08 Transitions= 2.06e+09 Memory=  4591.865        t= 1.89e+03 R=   7e+04
-Depth=    9059 States= 1.27e+08 Transitions= 2.08e+09 Memory=  4615.889        t= 1.91e+03 R=   7e+04
-Depth=    9059 States= 1.28e+08 Transitions=  2.1e+09 Memory=  4640.303        t= 1.92e+03 R=   7e+04
-Depth=    9059 States= 1.29e+08 Transitions= 2.11e+09 Memory=  4670.479        t= 1.94e+03 R=   7e+04
-Depth=    9059 States=  1.3e+08 Transitions= 2.12e+09 Memory=  4702.998        t= 1.95e+03 R=   7e+04
-Depth=    9059 States= 1.31e+08 Transitions= 2.14e+09 Memory=  4732.393        t= 1.96e+03 R=   7e+04
-Depth=    9059 States= 1.32e+08 Transitions= 2.16e+09 Memory=  4754.756        t= 1.98e+03 R=   7e+04
-Depth=    9059 States= 1.33e+08 Transitions= 2.18e+09 Memory=  4783.174        t=  2e+03 R=   7e+04
-Depth=    9059 States= 1.34e+08 Transitions= 2.19e+09 Memory=  4810.518        t= 2.01e+03 R=   7e+04
-Depth=    9059 States= 1.35e+08 Transitions= 2.21e+09 Memory=  4837.568        t= 2.03e+03 R=   7e+04
-pan: resizing hashtable to -w28..  done
-Depth=    9059 States= 1.36e+08 Transitions= 2.23e+09 Memory=  6885.568        t= 2.06e+03 R=   7e+04
-Depth=    9059 States= 1.37e+08 Transitions= 2.24e+09 Memory=  6885.568        t= 2.08e+03 R=   7e+04
-Depth=    9059 States= 1.38e+08 Transitions= 2.27e+09 Memory=  6900.412        t= 2.1e+03 R=   7e+04
-Depth=    9059 States= 1.39e+08 Transitions= 2.29e+09 Memory=  6927.658        t= 2.12e+03 R=   7e+04
-Depth=    9059 States=  1.4e+08 Transitions= 2.31e+09 Memory=  6950.315        t= 2.14e+03 R=   7e+04
-Depth=    9059 States= 1.41e+08 Transitions= 2.33e+09 Memory=  6981.858        t= 2.15e+03 R=   7e+04
-Depth=    9059 States= 1.42e+08 Transitions= 2.35e+09 Memory=  7005.295        t= 2.17e+03 R=   7e+04
-Depth=    9059 States= 1.43e+08 Transitions= 2.36e+09 Memory=  7031.076        t= 2.18e+03 R=   7e+04
-Depth=    9059 States= 1.44e+08 Transitions= 2.38e+09 Memory=  7056.955        t= 2.2e+03 R=   7e+04
-Depth=    9059 States= 1.45e+08 Transitions=  2.4e+09 Memory=  7084.494        t= 2.22e+03 R=   7e+04
-Depth=    9059 States= 1.46e+08 Transitions= 2.41e+09 Memory=  7115.744        t= 2.23e+03 R=   7e+04
-Depth=    9059 States= 1.47e+08 Transitions= 2.42e+09 Memory=  7146.604        t= 2.24e+03 R=   7e+04
-Depth=    9059 States= 1.48e+08 Transitions= 2.44e+09 Memory=  7172.287        t= 2.25e+03 R=   7e+04
-Depth=    9059 States= 1.49e+08 Transitions= 2.45e+09 Memory=  7200.315        t= 2.26e+03 R=   7e+04
-Depth=    9059 States=  1.5e+08 Transitions= 2.47e+09 Memory=  7226.389        t= 2.28e+03 R=   7e+04
-Depth=    9059 States= 1.51e+08 Transitions= 2.48e+09 Memory=  7253.733        t= 2.29e+03 R=   7e+04
-Depth=    9059 States= 1.52e+08 Transitions=  2.5e+09 Memory=  7279.709        t= 2.31e+03 R=   7e+04
-Depth=    9059 States= 1.53e+08 Transitions= 2.52e+09 Memory=  7309.104        t= 2.32e+03 R=   7e+04
-Depth=    9059 States= 1.54e+08 Transitions= 2.53e+09 Memory=  7334.592        t= 2.34e+03 R=   7e+04
-Depth=    9059 States= 1.55e+08 Transitions= 2.55e+09 Memory=  7362.229        t= 2.35e+03 R=   7e+04
-Depth=    9059 States= 1.56e+08 Transitions= 2.56e+09 Memory=  7391.135        t= 2.36e+03 R=   7e+04
-Depth=    9059 States= 1.57e+08 Transitions= 2.57e+09 Memory=  7420.822        t= 2.38e+03 R=   7e+04
-Depth=    9059 States= 1.58e+08 Transitions= 2.59e+09 Memory=  7452.854        t= 2.39e+03 R=   7e+04
-Depth=    9059 States= 1.59e+08 Transitions=  2.6e+09 Memory=  7481.760        t= 2.4e+03 R=   7e+04
-Depth=    9059 States=  1.6e+08 Transitions= 2.62e+09 Memory=  7509.299        t= 2.41e+03 R=   7e+04
-Depth=    9059 States= 1.61e+08 Transitions= 2.63e+09 Memory=  7534.201        t= 2.43e+03 R=   7e+04
-Depth=    9059 States= 1.62e+08 Transitions= 2.65e+09 Memory=  7567.600        t= 2.44e+03 R=   7e+04
-Depth=    9059 States= 1.63e+08 Transitions= 2.66e+09 Memory=  7594.846        t= 2.45e+03 R=   7e+04
-Depth=    9059 States= 1.64e+08 Transitions= 2.67e+09 Memory=  7619.455        t= 2.47e+03 R=   7e+04
-Depth=    9059 States= 1.65e+08 Transitions=  2.7e+09 Memory=  7642.502        t= 2.49e+03 R=   7e+04
-Depth=    9059 States= 1.66e+08 Transitions= 2.72e+09 Memory=  7669.260        t= 2.51e+03 R=   7e+04
-Depth=    9059 States= 1.67e+08 Transitions= 2.73e+09 Memory=  7696.799        t= 2.52e+03 R=   7e+04
-Depth=    9059 States= 1.68e+08 Transitions= 2.75e+09 Memory=  7723.850        t= 2.54e+03 R=   7e+04
-Depth=    9059 States= 1.69e+08 Transitions= 2.77e+09 Memory=  7757.053        t= 2.55e+03 R=   7e+04
-Depth=    9059 States=  1.7e+08 Transitions= 2.78e+09 Memory=  7782.346        t= 2.57e+03 R=   7e+04
-Depth=    9059 States= 1.71e+08 Transitions=  2.8e+09 Memory=  7808.908        t= 2.58e+03 R=   7e+04
-Depth=    9059 States= 1.72e+08 Transitions= 2.81e+09 Memory=  7838.791        t= 2.59e+03 R=   7e+04
-Depth=    9059 States= 1.73e+08 Transitions= 2.83e+09 Memory=  7867.893        t= 2.61e+03 R=   7e+04
-Depth=    9059 States= 1.74e+08 Transitions= 2.85e+09 Memory=  7892.990        t= 2.62e+03 R=   7e+04
-Depth=    9059 States= 1.75e+08 Transitions= 2.86e+09 Memory=  7922.190        t= 2.64e+03 R=   7e+04
-Depth=    9059 States= 1.76e+08 Transitions= 2.89e+09 Memory=  7945.627        t= 2.66e+03 R=   7e+04
-Depth=    9059 States= 1.77e+08 Transitions=  2.9e+09 Memory=  7973.947        t= 2.68e+03 R=   7e+04
-Depth=    9059 States= 1.78e+08 Transitions= 2.93e+09 Memory=  7997.483        t= 2.7e+03 R=   7e+04
-Depth=    9059 States= 1.79e+08 Transitions= 2.94e+09 Memory=  8020.920        t= 2.71e+03 R=   7e+04
-Depth=    9059 States=  1.8e+08 Transitions= 2.96e+09 Memory=  8050.412        t= 2.73e+03 R=   7e+04
-Depth=    9059 States= 1.81e+08 Transitions= 2.97e+09 Memory=  8085.666        t= 2.74e+03 R=   7e+04
-Depth=    9059 States= 1.82e+08 Transitions= 2.98e+09 Memory=  8114.279        t= 2.75e+03 R=   7e+04
-Depth=    9059 States= 1.83e+08 Transitions=    3e+09 Memory=  8137.131        t= 2.77e+03 R=   7e+04
-Depth=    9059 States= 1.84e+08 Transitions= 3.02e+09 Memory=  8165.451        t= 2.79e+03 R=   7e+04
-Depth=    9059 States= 1.85e+08 Transitions= 3.04e+09 Memory=  8193.186        t= 2.8e+03 R=   7e+04
-Depth=    9059 States= 1.86e+08 Transitions= 3.06e+09 Memory=  8218.674        t= 2.82e+03 R=   7e+04
-Depth=    9059 States= 1.87e+08 Transitions= 3.08e+09 Memory=  8255.100        t= 2.83e+03 R=   7e+04
-Depth=    9059 States= 1.88e+08 Transitions= 3.09e+09 Memory=  8279.221        t= 2.85e+03 R=   7e+04
-Depth=    9059 States= 1.89e+08 Transitions= 3.12e+09 Memory=  8298.264        t= 2.87e+03 R=   7e+04
-Depth=    9059 States=  1.9e+08 Transitions= 3.14e+09 Memory=  8325.998        t= 2.89e+03 R=   7e+04
-Depth=    9059 States= 1.91e+08 Transitions= 3.16e+09 Memory=  8349.338        t= 2.91e+03 R=   7e+04
-Depth=    9059 States= 1.92e+08 Transitions= 3.17e+09 Memory=  8379.221        t= 2.92e+03 R=   7e+04
-Depth=    9059 States= 1.93e+08 Transitions= 3.19e+09 Memory=  8403.440        t= 2.94e+03 R=   7e+04
-Depth=    9059 States= 1.94e+08 Transitions= 3.21e+09 Memory=  8430.100        t= 2.96e+03 R=   7e+04
-Depth=    9059 States= 1.95e+08 Transitions= 3.23e+09 Memory=  8455.295        t= 2.97e+03 R=   7e+04
-Depth=    9059 States= 1.96e+08 Transitions= 3.25e+09 Memory=  8482.932        t= 2.99e+03 R=   7e+04
-Depth=    9059 States= 1.97e+08 Transitions= 3.26e+09 Memory=  8515.256        t=  3e+03 R=   7e+04
-Depth=    9059 States= 1.98e+08 Transitions= 3.27e+09 Memory=  8542.502        t= 3.01e+03 R=   7e+04
-Depth=    9059 States= 1.99e+08 Transitions= 3.29e+09 Memory=  8569.260        t= 3.02e+03 R=   7e+04
-Depth=    9059 States=    2e+08 Transitions=  3.3e+09 Memory=  8598.459        t= 3.04e+03 R=   7e+04
-Depth=    9059 States= 2.01e+08 Transitions= 3.32e+09 Memory=  8624.631        t= 3.05e+03 R=   7e+04
-Depth=    9059 States= 2.02e+08 Transitions= 3.33e+09 Memory=  8652.365        t= 3.07e+03 R=   7e+04
-Depth=    9059 States= 2.03e+08 Transitions= 3.35e+09 Memory=  8678.440        t= 3.08e+03 R=   7e+04
-Depth=    9059 States= 2.04e+08 Transitions= 3.36e+09 Memory=  8706.369        t= 3.1e+03 R=   7e+04
-Depth=    9059 States= 2.05e+08 Transitions= 3.38e+09 Memory=  8732.932        t= 3.11e+03 R=   7e+04
-Depth=    9059 States= 2.06e+08 Transitions= 3.39e+09 Memory=  8760.276        t= 3.12e+03 R=   7e+04
-Depth=    9059 States= 2.07e+08 Transitions= 3.41e+09 Memory=  8789.475        t= 3.14e+03 R=   7e+04
-Depth=    9059 States= 2.08e+08 Transitions= 3.42e+09 Memory=  8819.455        t= 3.15e+03 R=   7e+04
-Depth=    9059 States= 2.09e+08 Transitions= 3.43e+09 Memory=  8851.779        t= 3.16e+03 R=   7e+04
-Depth=    9059 States=  2.1e+08 Transitions= 3.45e+09 Memory=  8880.100        t= 3.17e+03 R=   7e+04
-Depth=    9059 States= 2.11e+08 Transitions= 3.46e+09 Memory=  8907.053        t= 3.19e+03 R=   7e+04
-Depth=    9059 States= 2.12e+08 Transitions= 3.48e+09 Memory=  8932.639        t= 3.2e+03 R=   7e+04
-Depth=    9059 States= 2.13e+08 Transitions= 3.49e+09 Memory=  8964.572        t= 3.22e+03 R=   7e+04
-Depth=    9059 States= 2.14e+08 Transitions= 3.51e+09 Memory=  8991.526        t= 3.23e+03 R=   7e+04
-Depth=    9059 States= 2.15e+08 Transitions= 3.52e+09 Memory=  9018.088        t= 3.24e+03 R=   7e+04
-Depth=    9059 States= 2.16e+08 Transitions= 3.54e+09 Memory=  9039.865        t= 3.26e+03 R=   7e+04
-Depth=    9059 States= 2.17e+08 Transitions= 3.56e+09 Memory=  9067.600        t= 3.28e+03 R=   7e+04
-Depth=    9059 States= 2.18e+08 Transitions= 3.58e+09 Memory=  9094.260        t= 3.3e+03 R=   7e+04
-Depth=    9059 States= 2.19e+08 Transitions=  3.6e+09 Memory=  9122.483        t= 3.31e+03 R=   7e+04
-Depth=    9059 States=  2.2e+08 Transitions= 3.61e+09 Memory=  9153.635        t= 3.32e+03 R=   7e+04
-Depth=    9059 States= 2.21e+08 Transitions= 3.63e+09 Memory=  9181.272        t= 3.34e+03 R=   7e+04
-Depth=    9059 States= 2.22e+08 Transitions= 3.65e+09 Memory=  9207.639        t= 3.36e+03 R=   7e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 9059, errors: 0
- 88961904 states, stored (2.22145e+08 visited)
-3.4291111e+09 states, matched
-3.6512561e+09 transitions (= visited+matched)
-1.2885947e+10 atomic steps
-hash conflicts: 7.2188776e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 7805.343      equivalent memory usage for states (stored*(State-vector + overhead))
- 6706.219      actual memory usage for states (compression: 85.92%)
-               state-vector as stored = 51 byte + 28 byte overhead
- 2048.000      memory used for hash table (-w28)
-  457.764      memory used for DFS stack (-m10000000)
-    1.122      memory lost to fragmentation
- 9210.861      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 3.36e+03 seconds
-pan: rate 66138.803 states/second
-pan: avg transition delay 9.1989e-07 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 91b1126..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define READER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index 7c42af1..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4401
-2:4:4353
-3:4:4356
-4:4:4356
-5:4:4359
-6:4:4367
-7:4:4367
-8:4:4370
-9:4:4376
-10:4:4380
-11:4:4380
-12:4:4383
-13:4:4391
-14:4:4395
-15:4:4396
-16:0:4401
-17:4:4398
-18:0:4401
-19:3:2479
-20:0:4401
-21:3:2485
-22:0:4401
-23:3:2486
-24:0:4401
-25:3:2487
-26:3:2491
-27:3:2492
-28:3:2500
-29:3:2501
-30:3:2505
-31:3:2506
-32:3:2514
-33:3:2519
-34:3:2523
-35:3:2524
-36:3:2531
-37:3:2532
-38:3:2543
-39:3:2544
-40:3:2545
-41:3:2556
-42:3:2561
-43:3:2562
-44:0:4401
-45:3:2574
-46:0:4401
-47:3:2576
-48:3:2577
-49:0:4401
-50:3:2581
-51:3:2585
-52:3:2586
-53:3:2594
-54:3:2595
-55:3:2599
-56:3:2600
-57:3:2608
-58:3:2613
-59:3:2614
-60:3:2625
-61:3:2626
-62:3:2637
-63:3:2638
-64:3:2639
-65:3:2650
-66:3:2655
-67:3:2656
-68:0:4401
-69:3:2668
-70:0:4401
-71:3:2670
-72:0:4401
-73:3:2671
-74:0:4401
-75:3:2681
-76:0:4401
-77:3:2682
-78:0:4401
-79:3:2686
-80:3:2687
-81:3:2691
-82:3:2695
-83:3:2696
-84:3:2700
-85:3:2708
-86:3:2709
-87:3:2714
-88:3:2721
-89:3:2722
-90:3:2729
-91:3:2734
-92:0:4401
-93:3:2745
-94:0:4401
-95:3:2749
-96:3:2750
-97:3:2754
-98:3:2758
-99:3:2759
-100:3:2763
-101:3:2771
-102:3:2772
-103:3:2777
-104:3:2784
-105:3:2785
-106:3:2792
-107:3:2797
-108:0:4401
-109:3:2808
-110:0:4401
-111:3:2816
-112:3:2817
-113:3:2821
-114:3:2825
-115:3:2826
-116:3:2830
-117:3:2838
-118:3:2839
-119:3:2844
-120:3:2851
-121:3:2852
-122:3:2859
-123:3:2864
-124:0:4401
-125:3:2879
-126:0:4401
-127:3:2881
-128:0:4401
-129:3:2882
-130:3:2886
-131:3:2887
-132:3:2895
-133:3:2896
-134:3:2900
-135:3:2901
-136:3:2909
-137:3:2914
-138:3:2918
-139:3:2919
-140:3:2926
-141:3:2927
-142:3:2938
-143:3:2939
-144:3:2940
-145:3:2951
-146:3:2956
-147:3:2957
-148:0:4401
-149:3:2969
-150:0:4401
-151:3:2971
-152:0:4401
-153:3:2974
-154:3:2975
-155:3:2987
-156:3:2988
-157:3:2992
-158:3:2993
-159:3:3001
-160:3:3006
-161:3:3010
-162:3:3011
-163:3:3018
-164:3:3019
-165:3:3030
-166:3:3031
-167:3:3032
-168:3:3043
-169:3:3048
-170:3:3049
-171:0:4401
-172:3:3061
-173:0:4401
-174:3:3063
-175:0:4401
-176:3:3064
-177:0:4401
-178:3:3065
-179:0:4401
-180:3:3066
-181:0:4401
-182:3:3067
-183:3:3071
-184:3:3072
-185:3:3080
-186:3:3081
-187:3:3085
-188:3:3086
-189:3:3094
-190:3:3099
-191:3:3103
-192:3:3104
-193:3:3111
-194:3:3112
-195:3:3123
-196:3:3124
-197:3:3125
-198:3:3136
-199:3:3141
-200:3:3142
-201:0:4401
-202:3:3154
-203:0:4401
-204:3:3356
-205:0:4401
-206:3:3454
-207:0:4401
-208:3:3455
-209:0:4401
-210:3:3459
-211:0:4401
-212:3:3465
-213:3:3469
-214:3:3470
-215:3:3478
-216:3:3479
-217:3:3483
-218:3:3484
-219:3:3492
-220:3:3497
-221:3:3501
-222:3:3502
-223:3:3509
-224:3:3510
-225:3:3521
-226:3:3522
-227:3:3523
-228:3:3534
-229:3:3539
-230:3:3540
-231:0:4401
-232:3:3552
-233:0:4401
-234:3:3554
-235:0:4401
-236:3:3555
-237:3:3559
-238:3:3560
-239:3:3568
-240:3:3569
-241:3:3573
-242:3:3574
-243:3:3582
-244:3:3587
-245:3:3591
-246:3:3592
-247:3:3599
-248:3:3600
-249:3:3611
-250:3:3612
-251:3:3613
-252:3:3624
-253:3:3629
-254:3:3630
-255:0:4401
-256:3:3642
-257:0:4401
-258:3:3644
-259:0:4401
-260:3:3647
-261:3:3648
-262:3:3660
-263:3:3661
-264:3:3665
-265:3:3666
-266:3:3674
-267:3:3679
-268:3:3683
-269:3:3684
-270:3:3691
-271:3:3692
-272:3:3703
-273:3:3704
-274:3:3705
-275:3:3716
-276:3:3721
-277:3:3722
-278:0:4401
-279:3:3734
-280:0:4401
-281:3:3736
-282:0:4401
-283:3:3737
-284:0:4401
-285:3:3738
-286:0:4401
-287:3:3739
-288:0:4401
-289:3:3740
-290:3:3744
-291:3:3745
-292:3:3753
-293:3:3754
-294:3:3758
-295:3:3759
-296:3:3767
-297:3:3772
-298:3:3776
-299:3:3777
-300:3:3784
-301:3:3785
-302:3:3796
-303:3:3797
-304:3:3798
-305:3:3809
-306:3:3814
-307:3:3815
-308:0:4401
-309:3:3827
-310:0:4401
-311:3:4029
-312:0:4401
-313:3:4127
-314:0:4401
-315:3:4128
-316:0:4401
-317:3:4132
-318:0:4401
-319:3:4138
-320:0:4401
-321:3:4142
-322:3:4143
-323:3:4147
-324:3:4151
-325:3:4152
-326:3:4156
-327:3:4164
-328:3:4165
-329:3:4170
-330:3:4177
-331:3:4178
-332:3:4185
-333:3:4190
-334:0:4401
-335:3:4201
-336:0:4401
-337:3:4205
-338:3:4206
-339:3:4210
-340:3:4214
-341:3:4215
-342:3:4219
-343:3:4227
-344:3:4228
-345:3:4233
-346:3:4240
-347:3:4241
-348:3:4248
-349:3:4253
-350:0:4401
-351:3:4264
-352:0:4401
-353:3:4272
-354:3:4273
-355:3:4277
-356:3:4281
-357:3:4282
-358:3:4286
-359:3:4294
-360:3:4295
-361:3:4300
-362:3:4307
-363:3:4308
-364:3:4315
-365:3:4320
-366:0:4401
-367:3:4335
-368:0:4401
-369:3:4337
-370:0:4401
-371:3:4338
-372:0:4401
-373:3:2486
-374:0:4401
-375:3:2487
-376:3:2491
-377:3:2492
-378:3:2500
-379:3:2501
-380:3:2505
-381:3:2506
-382:3:2514
-383:3:2519
-384:3:2523
-385:3:2524
-386:3:2531
-387:3:2532
-388:3:2543
-389:3:2544
-390:3:2545
-391:3:2556
-392:3:2561
-393:3:2562
-394:0:4401
-395:3:2574
-396:0:4401
-397:3:2576
-398:3:2577
-399:0:4401
-400:3:2581
-401:3:2585
-402:3:2586
-403:3:2594
-404:3:2595
-405:3:2599
-406:3:2600
-407:3:2608
-408:3:2613
-409:3:2614
-410:3:2625
-411:3:2626
-412:3:2637
-413:3:2638
-414:3:2639
-415:3:2650
-416:3:2655
-417:3:2656
-418:0:4401
-419:3:2668
-420:0:4401
-421:3:2670
-422:0:4401
-423:3:2671
-424:0:4401
-425:3:2681
-426:0:4401
-427:3:2682
-428:0:4401
-429:3:2686
-430:3:2687
-431:3:2691
-432:3:2695
-433:3:2696
-434:3:2700
-435:3:2708
-436:3:2709
-437:3:2714
-438:3:2721
-439:3:2722
-440:3:2729
-441:3:2734
-442:0:4401
-443:3:2745
-444:0:4401
-445:3:2749
-446:3:2750
-447:3:2754
-448:3:2758
-449:3:2759
-450:3:2763
-451:3:2771
-452:3:2772
-453:3:2777
-454:3:2784
-455:3:2785
-456:3:2792
-457:3:2797
-458:0:4401
-459:3:2808
-460:0:4401
-461:3:2816
-462:3:2817
-463:3:2821
-464:3:2825
-465:3:2826
-466:3:2830
-467:3:2838
-468:3:2839
-469:3:2844
-470:3:2851
-471:3:2852
-472:3:2859
-473:3:2864
-474:0:4401
-475:3:2879
-476:0:4401
-477:3:2881
-478:0:4401
-479:3:2882
-480:3:2886
-481:3:2887
-482:3:2895
-483:3:2896
-484:3:2900
-485:3:2901
-486:3:2909
-487:3:2914
-488:3:2918
-489:3:2919
-490:3:2926
-491:3:2927
-492:3:2938
-493:3:2939
-494:3:2940
-495:3:2951
-496:3:2956
-497:3:2957
-498:0:4401
-499:3:2969
-500:0:4401
-501:3:2971
-502:0:4401
-503:3:2974
-504:3:2975
-505:3:2987
-506:3:2988
-507:3:2992
-508:3:2993
-509:3:3001
-510:3:3006
-511:3:3010
-512:3:3011
-513:3:3018
-514:3:3019
-515:3:3030
-516:3:3031
-517:3:3032
-518:3:3043
-519:3:3048
-520:3:3049
-521:0:4401
-522:3:3061
-523:0:4401
-524:3:3063
-525:0:4401
-526:3:3064
-527:0:4401
-528:3:3065
-529:0:4401
-530:3:3066
-531:0:4401
-532:3:3067
-533:3:3071
-534:3:3072
-535:3:3080
-536:3:3081
-537:3:3085
-538:3:3086
-539:3:3094
-540:3:3099
-541:3:3103
-542:3:3104
-543:3:3111
-544:3:3112
-545:3:3123
-546:3:3124
-547:3:3125
-548:3:3136
-549:3:3141
-550:3:3142
-551:0:4401
-552:3:3154
-553:0:4401
-554:3:3356
-555:0:4401
-556:3:3454
-557:0:4401
-558:3:3455
-559:0:4401
-560:3:3459
-561:0:4401
-562:3:3465
-563:3:3469
-564:3:3470
-565:3:3478
-566:3:3479
-567:3:3483
-568:3:3484
-569:3:3492
-570:3:3497
-571:3:3501
-572:3:3502
-573:3:3509
-574:3:3510
-575:3:3521
-576:3:3522
-577:3:3523
-578:3:3534
-579:3:3539
-580:3:3540
-581:0:4401
-582:3:3552
-583:0:4401
-584:3:3554
-585:0:4401
-586:3:3555
-587:3:3559
-588:3:3560
-589:3:3568
-590:3:3569
-591:3:3573
-592:3:3574
-593:3:3582
-594:3:3587
-595:3:3591
-596:3:3592
-597:3:3599
-598:3:3600
-599:3:3611
-600:3:3612
-601:3:3613
-602:3:3624
-603:3:3629
-604:3:3630
-605:0:4401
-606:3:3642
-607:0:4401
-608:3:3644
-609:0:4401
-610:3:3647
-611:3:3648
-612:3:3660
-613:3:3661
-614:3:3665
-615:3:3666
-616:3:3674
-617:3:3679
-618:3:3683
-619:3:3684
-620:3:3691
-621:3:3692
-622:3:3703
-623:3:3704
-624:3:3705
-625:3:3716
-626:3:3721
-627:3:3722
-628:0:4401
-629:3:3734
-630:0:4401
-631:3:3736
-632:0:4401
-633:3:3737
-634:0:4401
-635:3:3738
-636:0:4401
-637:3:3739
-638:0:4401
-639:3:3740
-640:3:3744
-641:3:3745
-642:3:3753
-643:3:3754
-644:3:3758
-645:3:3759
-646:3:3767
-647:3:3772
-648:3:3776
-649:3:3777
-650:3:3784
-651:3:3785
-652:3:3796
-653:3:3797
-654:3:3798
-655:3:3809
-656:3:3814
-657:3:3815
-658:0:4401
-659:3:3827
-660:0:4401
-661:3:4029
-662:0:4401
-663:3:4127
-664:0:4401
-665:3:4128
-666:0:4401
-667:3:4132
-668:0:4401
-669:3:4138
-670:0:4401
-671:3:4142
-672:3:4143
-673:3:4147
-674:3:4151
-675:3:4152
-676:3:4156
-677:3:4164
-678:3:4165
-679:3:4170
-680:3:4177
-681:3:4178
-682:3:4185
-683:3:4190
-684:0:4401
-685:3:4201
-686:0:4401
-687:3:4205
-688:3:4206
-689:3:4210
-690:3:4214
-691:3:4215
-692:3:4219
-693:3:4227
-694:3:4228
-695:3:4233
-696:3:4240
-697:3:4241
-698:3:4248
-699:3:4253
-700:0:4401
-701:3:4264
-702:0:4401
-703:3:4272
-704:3:4273
-705:3:4277
-706:3:4281
-707:3:4282
-708:3:4286
-709:3:4294
-710:3:4295
-711:3:4300
-712:3:4307
-713:3:4308
-714:3:4315
-715:3:4320
-716:0:4401
-717:3:4335
-718:0:4401
-719:3:4337
-720:0:4401
-721:3:4338
-722:0:4401
-723:3:2486
-724:0:4401
-725:3:2487
-726:3:2491
-727:3:2492
-728:3:2500
-729:3:2501
-730:3:2505
-731:3:2506
-732:3:2514
-733:3:2519
-734:3:2523
-735:3:2524
-736:3:2531
-737:3:2532
-738:3:2543
-739:3:2544
-740:3:2545
-741:3:2556
-742:3:2561
-743:3:2562
-744:0:4401
-745:3:2574
-746:0:4401
-747:3:2576
-748:3:2577
-749:0:4401
-750:3:2581
-751:3:2585
-752:3:2586
-753:3:2594
-754:3:2595
-755:3:2599
-756:3:2600
-757:3:2608
-758:3:2613
-759:3:2614
-760:3:2625
-761:3:2626
-762:3:2637
-763:3:2638
-764:3:2639
-765:3:2650
-766:3:2655
-767:3:2656
-768:0:4401
-769:3:2668
-770:0:4401
-771:3:2670
-772:0:4401
-773:3:2671
-774:0:4401
-775:3:2681
-776:0:4401
-777:3:2682
-778:0:4401
-779:3:2686
-780:3:2687
-781:3:2691
-782:3:2695
-783:3:2696
-784:3:2700
-785:3:2708
-786:3:2709
-787:3:2714
-788:3:2721
-789:3:2722
-790:3:2729
-791:3:2734
-792:0:4401
-793:3:2745
-794:0:4401
-795:3:2749
-796:3:2750
-797:3:2754
-798:3:2758
-799:3:2759
-800:3:2763
-801:3:2771
-802:3:2772
-803:3:2777
-804:3:2784
-805:3:2785
-806:3:2792
-807:3:2797
-808:0:4401
-809:3:2808
-810:0:4401
-811:3:2816
-812:3:2817
-813:3:2821
-814:3:2825
-815:3:2826
-816:3:2830
-817:3:2838
-818:3:2839
-819:3:2844
-820:3:2851
-821:3:2852
-822:3:2859
-823:3:2864
-824:0:4401
-825:3:2879
-826:0:4401
-827:3:2881
-828:0:4401
-829:3:2882
-830:3:2886
-831:3:2887
-832:3:2895
-833:3:2896
-834:3:2900
-835:3:2901
-836:3:2909
-837:3:2914
-838:3:2918
-839:3:2919
-840:3:2926
-841:3:2927
-842:3:2938
-843:3:2939
-844:3:2940
-845:3:2951
-846:3:2956
-847:3:2957
-848:0:4401
-849:3:2969
-850:0:4401
-851:3:2971
-852:0:4401
-853:3:2974
-854:3:2975
-855:3:2987
-856:3:2988
-857:3:2992
-858:3:2993
-859:3:3001
-860:3:3006
-861:3:3010
-862:3:3011
-863:3:3018
-864:3:3019
-865:3:3030
-866:3:3031
-867:3:3032
-868:3:3043
-869:3:3048
-870:3:3049
-871:0:4401
-872:3:3061
-873:0:4401
-874:3:3063
-875:0:4401
-876:3:3064
-877:0:4401
-878:3:3065
-879:0:4401
-880:3:3066
-881:0:4401
-882:3:3067
-883:3:3071
-884:3:3072
-885:3:3080
-886:3:3081
-887:3:3085
-888:3:3086
-889:3:3094
-890:3:3099
-891:3:3103
-892:3:3104
-893:3:3111
-894:3:3112
-895:3:3123
-896:3:3124
-897:3:3125
-898:3:3136
-899:3:3141
-900:3:3142
-901:0:4401
-902:3:3154
-903:0:4401
-904:3:3356
-905:0:4401
-906:3:3454
-907:0:4401
-908:3:3455
-909:0:4401
-910:3:3459
-911:0:4401
-912:3:3465
-913:3:3469
-914:3:3470
-915:3:3478
-916:3:3479
-917:3:3483
-918:3:3484
-919:3:3492
-920:3:3497
-921:3:3501
-922:3:3502
-923:3:3509
-924:3:3510
-925:3:3521
-926:3:3522
-927:3:3523
-928:3:3534
-929:3:3539
-930:3:3540
-931:0:4401
-932:3:3552
-933:0:4401
-934:3:3554
-935:0:4401
-936:3:3555
-937:3:3559
-938:3:3560
-939:3:3568
-940:3:3569
-941:3:3573
-942:3:3574
-943:3:3582
-944:3:3587
-945:3:3591
-946:3:3592
-947:3:3599
-948:3:3600
-949:3:3611
-950:3:3612
-951:3:3613
-952:3:3624
-953:3:3629
-954:3:3630
-955:0:4401
-956:3:3642
-957:0:4401
-958:3:3644
-959:0:4401
-960:3:3647
-961:3:3648
-962:3:3660
-963:3:3661
-964:3:3665
-965:3:3666
-966:3:3674
-967:3:3679
-968:3:3683
-969:3:3684
-970:3:3691
-971:3:3692
-972:3:3703
-973:3:3704
-974:3:3705
-975:3:3716
-976:3:3721
-977:3:3722
-978:0:4401
-979:3:3734
-980:0:4401
-981:3:3736
-982:0:4401
-983:3:3737
-984:0:4401
-985:3:3738
-986:0:4401
-987:3:3739
-988:0:4401
-989:3:3740
-990:3:3744
-991:3:3745
-992:3:3753
-993:3:3754
-994:3:3758
-995:3:3759
-996:3:3767
-997:3:3772
-998:3:3776
-999:3:3777
-1000:3:3784
-1001:3:3785
-1002:3:3796
-1003:3:3797
-1004:3:3798
-1005:3:3809
-1006:3:3814
-1007:3:3815
-1008:0:4401
-1009:3:3827
-1010:0:4401
-1011:3:4029
-1012:0:4401
-1013:3:4127
-1014:0:4401
-1015:3:4128
-1016:0:4401
-1017:3:4132
-1018:0:4401
-1019:3:4138
-1020:0:4401
-1021:3:4142
-1022:3:4143
-1023:3:4147
-1024:3:4151
-1025:3:4152
-1026:3:4156
-1027:3:4164
-1028:3:4165
-1029:3:4170
-1030:3:4177
-1031:3:4178
-1032:3:4185
-1033:3:4190
-1034:0:4401
-1035:3:4201
-1036:0:4401
-1037:3:4205
-1038:3:4206
-1039:3:4210
-1040:3:4214
-1041:3:4215
-1042:3:4219
-1043:3:4227
-1044:3:4228
-1045:3:4233
-1046:3:4240
-1047:3:4241
-1048:3:4248
-1049:3:4253
-1050:0:4401
-1051:3:4264
-1052:0:4401
-1053:3:4272
-1054:3:4273
-1055:3:4277
-1056:3:4281
-1057:3:4282
-1058:3:4286
-1059:3:4294
-1060:3:4295
-1061:3:4300
-1062:3:4307
-1063:3:4308
-1064:3:4315
-1065:3:4320
-1066:0:4401
-1067:3:4335
-1068:0:4401
-1069:3:4337
-1070:0:4401
-1071:3:4338
-1072:0:4401
-1073:3:4341
-1074:0:4401
-1075:3:4346
-1076:0:4401
-1077:2:1236
-1078:0:4401
-1079:3:4347
-1080:0:4401
-1081:2:1242
-1082:0:4401
-1083:3:4346
-1084:0:4401
-1085:2:1243
-1086:0:4401
-1087:3:4347
-1088:0:4401
-1089:2:1244
-1090:0:4401
-1091:3:4346
-1092:0:4401
-1093:2:1245
-1094:0:4401
-1095:3:4347
-1096:0:4401
-1097:1:2
-1098:0:4401
-1099:3:4346
-1100:0:4401
-1101:2:1246
-1102:0:4401
-1103:3:4347
-1104:0:4401
-1105:1:8
-1106:0:4401
-1107:3:4346
-1108:0:4401
-1109:2:1245
-1110:0:4401
-1111:3:4347
-1112:0:4401
-1113:1:9
-1114:0:4401
-1115:3:4346
-1116:0:4401
-1117:2:1246
-1118:0:4401
-1119:3:4347
-1120:0:4401
-1121:1:10
-1122:0:4401
-1123:3:4346
-1124:0:4401
-1125:2:1245
-1126:0:4401
-1127:3:4347
-1128:0:4401
-1129:1:11
-1130:0:4401
-1131:3:4346
-1132:0:4401
-1133:2:1246
-1134:0:4401
-1135:3:4347
-1136:0:4401
-1137:1:14
-1138:0:4401
-1139:3:4346
-1140:0:4401
-1141:2:1245
-1142:0:4401
-1143:3:4347
-1144:0:4401
-1145:1:15
-1146:0:4401
-1147:3:4346
-1148:0:4401
-1149:2:1246
-1150:0:4401
-1151:3:4347
-1152:0:4401
-1153:1:16
-1154:1:20
-1155:1:21
-1156:1:29
-1157:1:30
-1158:1:34
-1159:1:35
-1160:1:43
-1161:1:48
-1162:1:52
-1163:1:53
-1164:1:60
-1165:1:61
-1166:1:72
-1167:1:73
-1168:1:74
-1169:1:85
-1170:1:90
-1171:1:91
-1172:0:4401
-1173:3:4346
-1174:0:4401
-1175:2:1245
-1176:0:4401
-1177:3:4347
-1178:0:4401
-1179:1:103
-1180:0:4401
-1181:3:4346
-1182:0:4401
-1183:2:1246
-1184:0:4401
-1185:3:4347
-1186:0:4401
-1187:2:1247
-1188:0:4401
-1189:3:4346
-1190:0:4401
-1191:2:1253
-1192:0:4401
-1193:3:4347
-1194:0:4401
-1195:2:1254
-1196:0:4399
-1197:3:4346
-1198:0:4405
-1199:3:4347
-1200:0:4405
-1201:2:1257
-1202:0:4405
-1203:3:4346
-1204:0:4405
-1205:2:1258
-1206:0:4405
-1207:3:4347
-1208:0:4405
-1209:2:1259
-1210:2:1263
-1211:2:1264
-1212:2:1272
-1213:2:1273
-1214:2:1277
-1215:2:1278
-1216:2:1286
-1217:2:1291
-1218:2:1295
-1219:2:1296
-1220:2:1303
-1221:2:1304
-1222:2:1315
-1223:2:1316
-1224:2:1317
-1225:2:1328
-1226:2:1333
-1227:2:1334
-1228:0:4405
-1229:3:4346
-1230:0:4405
-1231:2:1346
-1232:0:4405
-1233:3:4347
-1234:0:4405
-1235:2:1347
-1236:0:4405
-1237:3:4346
-1238:0:4405
-1239:1:104
--1:-1:-1
-1240:0:4405
-1241:3:4347
-1242:0:4405
-1243:3:4346
-1244:0:4405
-1245:2:1348
-1246:0:4405
-1247:3:4347
-1248:0:4405
-1249:2:1347
-1250:0:4405
-1251:3:4346
-1252:0:4405
-1253:1:105
-1254:0:4405
-1255:3:4347
-1256:0:4405
-1257:3:4346
-1258:0:4405
-1259:2:1348
-1260:0:4405
-1261:3:4347
-1262:0:4405
-1263:2:1347
-1264:0:4405
-1265:3:4346
-1266:0:4405
-1267:1:104
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.define b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.log
deleted file mode 100644 (file)
index fc83245..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 1194: Claim reached state 9 (line 748)
-Depth=    3253 States=    1e+06 Transitions= 1.06e+07 Memory=   484.416        t=   9.64 R=   1e+05
-Depth=    3253 States=    2e+06 Transitions= 2.04e+07 Memory=   501.311        t=   18.6 R=   1e+05
-Depth=    3253 States=    3e+06 Transitions= 3.44e+07 Memory=   516.252        t=   31.6 R=   9e+04
-pan: resizing hashtable to -w22..  done
-Depth=    7995 States=    4e+06 Transitions= 4.66e+07 Memory=   563.486        t=   42.8 R=   9e+04
-Depth=    7995 States=    5e+06 Transitions= 6.05e+07 Memory=   580.674        t=   55.6 R=   9e+04
-Depth=    7995 States=    6e+06 Transitions= 7.12e+07 Memory=   599.229        t=   65.5 R=   9e+04
-Depth=    7995 States=    7e+06 Transitions= 8.58e+07 Memory=   613.975        t=   78.9 R=   9e+04
-Depth=    7995 States=    8e+06 Transitions= 9.62e+07 Memory=   631.846        t=   88.7 R=   9e+04
-Depth=    7995 States=    9e+06 Transitions=  1.1e+08 Memory=   646.592        t=    101 R=   9e+04
-pan: resizing hashtable to -w24..  done
-Depth=    7995 States=    1e+07 Transitions= 1.32e+08 Memory=   783.869        t=    122 R=   8e+04
-Depth=    7995 States=  1.1e+07 Transitions= 1.52e+08 Memory=   799.104        t=    140 R=   8e+04
-Depth=    7995 States=  1.2e+07 Transitions= 1.71e+08 Memory=   814.533        t=    157 R=   8e+04
-Depth=    7995 States=  1.3e+07 Transitions=  1.9e+08 Memory=   829.670        t=    174 R=   7e+04
-Depth=    7995 States=  1.4e+07 Transitions= 2.01e+08 Memory=   848.029        t=    185 R=   8e+04
-Depth=    7995 States=  1.5e+07 Transitions= 2.21e+08 Memory=   862.287        t=    203 R=   7e+04
-Depth=    7995 States=  1.6e+07 Transitions= 2.35e+08 Memory=   877.815        t=    215 R=   7e+04
-Depth=    7995 States=  1.7e+07 Transitions= 2.44e+08 Memory=   897.736        t=    223 R=   8e+04
-Depth=    7995 States=  1.8e+07 Transitions= 2.57e+08 Memory=   911.115        t=    235 R=   8e+04
-Depth=    7995 States=  1.9e+07 Transitions= 2.69e+08 Memory=   927.033        t=    246 R=   8e+04
-Depth=    8341 States=    2e+07 Transitions= 2.83e+08 Memory=   943.440        t=    259 R=   8e+04
-Depth=    8341 States=  2.1e+07 Transitions= 2.96e+08 Memory=   961.604        t=    271 R=   8e+04
-Depth=    8341 States=  2.2e+07 Transitions= 3.07e+08 Memory=   978.791        t=    281 R=   8e+04
-Depth=    8341 States=  2.3e+07 Transitions=  3.2e+08 Memory=   996.369        t=    293 R=   8e+04
-Depth=    8341 States=  2.4e+07 Transitions= 3.32e+08 Memory=  1013.264        t=    304 R=   8e+04
-Depth=    8341 States=  2.5e+07 Transitions= 3.48e+08 Memory=  1024.885        t=    319 R=   8e+04
-Depth=    8341 States=  2.6e+07 Transitions= 3.72e+08 Memory=  1038.947        t=    341 R=   8e+04
-Depth=    8341 States=  2.7e+07 Transitions= 3.91e+08 Memory=  1055.158        t=    358 R=   8e+04
-Depth=    8341 States=  2.8e+07 Transitions= 4.09e+08 Memory=  1069.904        t=    374 R=   7e+04
-Depth=    8341 States=  2.9e+07 Transitions= 4.25e+08 Memory=  1086.701        t=    389 R=   7e+04
-Depth=    8341 States=    3e+07 Transitions= 4.43e+08 Memory=  1102.131        t=    405 R=   7e+04
-Depth=    8341 States=  3.1e+07 Transitions= 4.58e+08 Memory=  1117.268        t=    419 R=   7e+04
-Depth=    8341 States=  3.2e+07 Transitions= 4.68e+08 Memory=  1136.213        t=    429 R=   7e+04
-Depth=    8341 States=  3.3e+07 Transitions=  4.8e+08 Memory=  1151.154        t=    440 R=   8e+04
-Depth=    8341 States=  3.4e+07 Transitions= 4.92e+08 Memory=  1166.779        t=    451 R=   8e+04
-pan: resizing hashtable to -w26..  done
-Depth=    8687 States=  3.5e+07 Transitions= 5.05e+08 Memory=  1679.658        t=    464 R=   8e+04
-Depth=    8687 States=  3.6e+07 Transitions= 5.18e+08 Memory=  1697.432        t=    477 R=   8e+04
-Depth=    8687 States=  3.7e+07 Transitions= 5.29e+08 Memory=  1714.326        t=    487 R=   8e+04
-Depth=    8687 States=  3.8e+07 Transitions= 5.44e+08 Memory=  1730.244        t=    500 R=   8e+04
-Depth=    8687 States=  3.9e+07 Transitions= 5.55e+08 Memory=  1747.920        t=    511 R=   8e+04
-Depth=    8687 States=    4e+07 Transitions= 5.69e+08 Memory=  1761.885        t=    523 R=   8e+04
-Depth=    8687 States=  4.1e+07 Transitions= 5.92e+08 Memory=  1775.850        t=    544 R=   8e+04
-Depth=    8687 States=  4.2e+07 Transitions= 6.12e+08 Memory=  1790.498        t=    562 R=   7e+04
-Depth=    8687 States=  4.3e+07 Transitions= 6.29e+08 Memory=  1807.783        t=    578 R=   7e+04
-Depth=    8687 States=  4.4e+07 Transitions= 6.48e+08 Memory=  1822.432        t=    595 R=   7e+04
-Depth=    8687 States=  4.5e+07 Transitions= 6.61e+08 Memory=  1838.838        t=    606 R=   7e+04
-Depth=    8687 States=  4.6e+07 Transitions= 6.81e+08 Memory=  1853.291        t=    625 R=   7e+04
-Depth=    8687 States=  4.7e+07 Transitions= 6.93e+08 Memory=  1870.772        t=    635 R=   7e+04
-Depth=    8687 States=  4.8e+07 Transitions= 7.02e+08 Memory=  1889.912        t=    644 R=   7e+04
-Depth=    8687 States=  4.9e+07 Transitions= 7.15e+08 Memory=  1902.998        t=    656 R=   7e+04
-Depth=    8687 States=    5e+07 Transitions= 7.27e+08 Memory=  1919.600        t=    667 R=   7e+04
-Depth=    9033 States=  5.1e+07 Transitions= 7.42e+08 Memory=  1935.518        t=    681 R=   7e+04
-Depth=    9033 States=  5.2e+07 Transitions= 7.53e+08 Memory=  1954.170        t=    691 R=   8e+04
-Depth=    9033 States=  5.3e+07 Transitions= 7.66e+08 Memory=  1969.990        t=    703 R=   8e+04
-Depth=    9033 States=  5.4e+07 Transitions= 7.77e+08 Memory=  1988.545        t=    713 R=   8e+04
-Depth=    9033 States=  5.5e+07 Transitions=  7.9e+08 Memory=  2004.756        t=    725 R=   8e+04
-Depth=    9033 States=  5.6e+07 Transitions=  8.1e+08 Memory=  2016.084        t=    743 R=   8e+04
-Depth=    9033 States=  5.7e+07 Transitions= 8.32e+08 Memory=  2030.440        t=    763 R=   7e+04
-Depth=    9033 States=  5.8e+07 Transitions= 8.51e+08 Memory=  2046.260        t=    781 R=   7e+04
-Depth=    9033 States=  5.9e+07 Transitions=  8.7e+08 Memory=  2061.592        t=    797 R=   7e+04
-Depth=    9033 States=    6e+07 Transitions= 8.83e+08 Memory=  2078.779        t=    809 R=   7e+04
-Depth=    9033 States=  6.1e+07 Transitions= 9.01e+08 Memory=  2094.014        t=    826 R=   7e+04
-Depth=    9033 States=  6.2e+07 Transitions= 9.16e+08 Memory=  2108.467        t=    840 R=   7e+04
-Depth=    9033 States=  6.3e+07 Transitions= 9.26e+08 Memory=  2126.924        t=    849 R=   7e+04
-Depth=    9033 States=  6.4e+07 Transitions= 9.38e+08 Memory=  2142.158        t=    860 R=   7e+04
-Depth=    9033 States=  6.5e+07 Transitions= 9.51e+08 Memory=  2157.295        t=    871 R=   7e+04
-Depth=    9379 States=  6.6e+07 Transitions= 9.63e+08 Memory=  2173.115        t=    883 R=   7e+04
-Depth=    9379 States=  6.7e+07 Transitions= 9.77e+08 Memory=  2190.401        t=    895 R=   7e+04
-Depth=    9379 States=  6.8e+07 Transitions= 9.88e+08 Memory=  2208.955        t=    905 R=   8e+04
-Depth=    9379 States=  6.9e+07 Transitions=    1e+09 Memory=  2223.311        t=    919 R=   8e+04
-Depth=    9379 States=    7e+07 Transitions= 1.01e+09 Memory=  2242.256        t=    928 R=   8e+04
-Depth=    9379 States=  7.1e+07 Transitions= 1.03e+09 Memory=  2257.295        t=    940 R=   8e+04
-Depth=    9379 States=  7.2e+07 Transitions= 1.05e+09 Memory=  2269.307        t=    960 R=   8e+04
-Depth=    9379 States=  7.3e+07 Transitions= 1.07e+09 Memory=  2283.760        t=    979 R=   7e+04
-Depth=    9379 States=  7.4e+07 Transitions= 1.09e+09 Memory=  2299.385        t=    996 R=   7e+04
-Depth=    9379 States=  7.5e+07 Transitions= 1.11e+09 Memory=  2314.619        t= 1.01e+03 R=   7e+04
-Depth=    9379 States=  7.6e+07 Transitions= 1.12e+09 Memory=  2333.369        t= 1.02e+03 R=   7e+04
-Depth=    9379 States=  7.7e+07 Transitions= 1.14e+09 Memory=  2347.139        t= 1.04e+03 R=   7e+04
-Depth=    9379 States=  7.8e+07 Transitions= 1.15e+09 Memory=  2385.029        t= 1.06e+03 R=   7e+04
-Depth=    9379 States=  7.9e+07 Transitions= 1.17e+09 Memory=  2453.682        t= 1.07e+03 R=   7e+04
-Depth=    9379 States=    8e+07 Transitions= 1.18e+09 Memory=  2522.236        t= 1.08e+03 R=   7e+04
-Depth=    9379 States=  8.1e+07 Transitions=  1.2e+09 Memory=  2590.889        t= 1.1e+03 R=   7e+04
-Depth=    9379 States=  8.2e+07 Transitions= 1.22e+09 Memory=  2624.287        t= 1.12e+03 R=   7e+04
-Depth=    9379 States=  8.3e+07 Transitions= 1.23e+09 Memory=  2640.303        t= 1.13e+03 R=   7e+04
-Depth=    9379 States=  8.4e+07 Transitions= 1.25e+09 Memory=  2654.170        t= 1.15e+03 R=   7e+04
-Depth=    9379 States=  8.5e+07 Transitions= 1.27e+09 Memory=  2669.111        t= 1.16e+03 R=   7e+04
-Depth=    9379 States=  8.6e+07 Transitions= 1.29e+09 Memory=  2684.053        t= 1.18e+03 R=   7e+04
-Depth=    9379 States=  8.7e+07 Transitions= 1.31e+09 Memory=  2698.604        t= 1.2e+03 R=   7e+04
-Depth=    9379 States=  8.8e+07 Transitions= 1.33e+09 Memory=  2719.697        t= 1.22e+03 R=   7e+04
-Depth=    9379 States=  8.9e+07 Transitions= 1.35e+09 Memory=  2788.350        t= 1.24e+03 R=   7e+04
-Depth=    9379 States=    9e+07 Transitions= 1.37e+09 Memory=  2819.990        t= 1.26e+03 R=   7e+04
-Depth=    9379 States=  9.1e+07 Transitions= 1.39e+09 Memory=  2846.553        t= 1.27e+03 R=   7e+04
-Depth=    9379 States=  9.2e+07 Transitions=  1.4e+09 Memory=  2864.912        t= 1.28e+03 R=   7e+04
-Depth=    9379 States=  9.3e+07 Transitions= 1.41e+09 Memory=  2877.901        t= 1.3e+03 R=   7e+04
-Depth=    9379 States=  9.4e+07 Transitions= 1.44e+09 Memory=  2892.842        t= 1.31e+03 R=   7e+04
-Depth=    9379 States=  9.5e+07 Transitions= 1.45e+09 Memory=  2908.076        t= 1.33e+03 R=   7e+04
-Depth=    9379 States=  9.6e+07 Transitions= 1.47e+09 Memory=  2922.627        t= 1.35e+03 R=   7e+04
-Depth=    9379 States=  9.7e+07 Transitions= 1.49e+09 Memory=  2940.693        t= 1.36e+03 R=   7e+04
-Depth=    9379 States=  9.8e+07 Transitions= 1.51e+09 Memory=  2953.291        t= 1.38e+03 R=   7e+04
-Depth=    9379 States=  9.9e+07 Transitions= 1.53e+09 Memory=  2968.526        t= 1.4e+03 R=   7e+04
-Depth=    9379 States=    1e+08 Transitions= 1.56e+09 Memory=  2981.709        t= 1.42e+03 R=   7e+04
-Depth=    9379 States= 1.01e+08 Transitions= 1.57e+09 Memory=  2997.236        t= 1.44e+03 R=   7e+04
-Depth=    9379 States= 1.02e+08 Transitions= 1.59e+09 Memory=  3011.592        t= 1.46e+03 R=   7e+04
-Depth=    9379 States= 1.03e+08 Transitions= 1.61e+09 Memory=  3037.861        t= 1.47e+03 R=   7e+04
-Depth=    9379 States= 1.04e+08 Transitions= 1.63e+09 Memory=  3106.514        t= 1.49e+03 R=   7e+04
-Depth=    9379 States= 1.05e+08 Transitions= 1.65e+09 Memory=  3175.166        t= 1.51e+03 R=   7e+04
-Depth=    9379 States= 1.06e+08 Transitions= 1.67e+09 Memory=  3223.897        t= 1.52e+03 R=   7e+04
-Depth=    9379 States= 1.07e+08 Transitions= 1.68e+09 Memory=  3246.846        t= 1.54e+03 R=   7e+04
-Depth=    9379 States= 1.08e+08 Transitions=  1.7e+09 Memory=  3283.467        t= 1.56e+03 R=   7e+04
-Depth=    9379 States= 1.09e+08 Transitions= 1.72e+09 Memory=  3316.670        t= 1.57e+03 R=   7e+04
-Depth=    9379 States=  1.1e+08 Transitions= 1.73e+09 Memory=  3344.209        t= 1.59e+03 R=   7e+04
-Depth=    9379 States= 1.11e+08 Transitions= 1.75e+09 Memory=  3376.338        t= 1.6e+03 R=   7e+04
-Depth=    9379 States= 1.12e+08 Transitions= 1.76e+09 Memory=  3396.943        t= 1.62e+03 R=   7e+04
-Depth=    9379 States= 1.13e+08 Transitions= 1.78e+09 Memory=  3426.143        t= 1.63e+03 R=   7e+04
-Depth=    9379 States= 1.14e+08 Transitions=  1.8e+09 Memory=  3452.705        t= 1.65e+03 R=   7e+04
-Depth=    9379 States= 1.15e+08 Transitions= 1.81e+09 Memory=  3493.818        t= 1.66e+03 R=   7e+04
-Depth=    9379 States= 1.16e+08 Transitions= 1.83e+09 Memory=  3533.369        t= 1.67e+03 R=   7e+04
-Depth=    9379 States= 1.17e+08 Transitions= 1.84e+09 Memory=  3566.182        t= 1.69e+03 R=   7e+04
-Depth=    9379 States= 1.18e+08 Transitions= 1.86e+09 Memory=  3582.881        t= 1.7e+03 R=   7e+04
-Depth=    9379 States= 1.19e+08 Transitions= 1.88e+09 Memory=  3630.830        t= 1.72e+03 R=   7e+04
-Depth=    9379 States=  1.2e+08 Transitions= 1.89e+09 Memory=  3692.744        t= 1.74e+03 R=   7e+04
-Depth=    9379 States= 1.21e+08 Transitions= 1.91e+09 Memory=  3750.361        t= 1.75e+03 R=   7e+04
-Depth=    9379 States= 1.22e+08 Transitions= 1.92e+09 Memory=  3767.354        t= 1.76e+03 R=   7e+04
-Depth=    9379 States= 1.23e+08 Transitions= 1.94e+09 Memory=  3781.904        t= 1.78e+03 R=   7e+04
-Depth=    9379 States= 1.24e+08 Transitions= 1.96e+09 Memory=  3797.529        t= 1.8e+03 R=   7e+04
-Depth=    9379 States= 1.25e+08 Transitions= 1.98e+09 Memory=  3810.908        t= 1.82e+03 R=   7e+04
-Depth=    9379 States= 1.26e+08 Transitions=    2e+09 Memory=  3826.143        t= 1.83e+03 R=   7e+04
-Depth=    9379 States= 1.27e+08 Transitions= 2.02e+09 Memory=  3839.717        t= 1.86e+03 R=   7e+04
-Depth=    9379 States= 1.28e+08 Transitions= 2.04e+09 Memory=  3881.709        t= 1.87e+03 R=   7e+04
-Depth=    9379 States= 1.29e+08 Transitions= 2.06e+09 Memory=  3946.553        t= 1.89e+03 R=   7e+04
-Depth=    9379 States=  1.3e+08 Transitions= 2.08e+09 Memory=  3970.479        t= 1.91e+03 R=   7e+04
-Depth=    9379 States= 1.31e+08 Transitions= 2.09e+09 Memory=  3991.768        t= 1.92e+03 R=   7e+04
-Depth=    9379 States= 1.32e+08 Transitions=  2.1e+09 Memory=  4007.490        t= 1.93e+03 R=   7e+04
-Depth=    9379 States= 1.33e+08 Transitions= 2.13e+09 Memory=  4020.772        t= 1.95e+03 R=   7e+04
-Depth=    9379 States= 1.34e+08 Transitions= 2.14e+09 Memory=  4036.201        t= 1.97e+03 R=   7e+04
-Depth=    9379 States= 1.35e+08 Transitions= 2.16e+09 Memory=  4051.924        t= 1.98e+03 R=   7e+04
-pan: resizing hashtable to -w28..  done
-Depth=    9379 States= 1.36e+08 Transitions= 2.18e+09 Memory=  6099.924        t= 2.02e+03 R=   7e+04
-Depth=    9379 States= 1.37e+08 Transitions=  2.2e+09 Memory=  6099.924        t= 2.03e+03 R=   7e+04
-Depth=    9379 States= 1.38e+08 Transitions= 2.22e+09 Memory=  6099.924        t= 2.05e+03 R=   7e+04
-Depth=    9379 States= 1.39e+08 Transitions= 2.24e+09 Memory=  6099.924        t= 2.07e+03 R=   7e+04
-Depth=    9379 States=  1.4e+08 Transitions= 2.26e+09 Memory=  6108.518        t= 2.09e+03 R=   7e+04
-Depth=    9379 States= 1.41e+08 Transitions= 2.28e+09 Memory=  6124.729        t= 2.1e+03 R=   7e+04
-Depth=    9379 States= 1.42e+08 Transitions=  2.3e+09 Memory=  6138.889        t= 2.12e+03 R=   7e+04
-Depth=    9379 States= 1.43e+08 Transitions= 2.31e+09 Memory=  6178.928        t= 2.13e+03 R=   7e+04
-Depth=    9379 States= 1.44e+08 Transitions= 2.33e+09 Memory=  6247.483        t= 2.15e+03 R=   7e+04
-Depth=    9379 States= 1.45e+08 Transitions= 2.35e+09 Memory=  6316.135        t= 2.17e+03 R=   7e+04
-Depth=    9379 States= 1.46e+08 Transitions= 2.37e+09 Memory=  6353.440        t= 2.19e+03 R=   7e+04
-Depth=    9379 States= 1.47e+08 Transitions= 2.39e+09 Memory=  6381.662        t= 2.21e+03 R=   7e+04
-Depth=    9379 States= 1.48e+08 Transitions= 2.41e+09 Memory=  6422.190        t= 2.22e+03 R=   7e+04
-Depth=    9379 States= 1.49e+08 Transitions= 2.42e+09 Memory=  6449.143        t= 2.23e+03 R=   7e+04
-Depth=    9379 States=  1.5e+08 Transitions= 2.44e+09 Memory=  6472.580        t= 2.25e+03 R=   7e+04
-Depth=    9379 States= 1.51e+08 Transitions= 2.45e+09 Memory=  6503.733        t= 2.26e+03 R=   7e+04
-Depth=    9379 States= 1.52e+08 Transitions= 2.47e+09 Memory=  6531.369        t= 2.28e+03 R=   7e+04
-Depth=    9379 States= 1.53e+08 Transitions= 2.49e+09 Memory=  6554.123        t= 2.29e+03 R=   7e+04
-Depth=    9379 States= 1.54e+08 Transitions=  2.5e+09 Memory=  6585.373        t= 2.31e+03 R=   7e+04
-Depth=    9379 States= 1.55e+08 Transitions= 2.52e+09 Memory=  6622.776        t= 2.32e+03 R=   7e+04
-Depth=    9379 States= 1.56e+08 Transitions= 2.54e+09 Memory=  6671.213        t= 2.34e+03 R=   7e+04
-Depth=    9379 States= 1.57e+08 Transitions= 2.55e+09 Memory=  6696.115        t= 2.35e+03 R=   7e+04
-Depth=    9379 States= 1.58e+08 Transitions= 2.57e+09 Memory=  6722.776        t= 2.37e+03 R=   7e+04
-Depth=    9379 States= 1.59e+08 Transitions= 2.58e+09 Memory=  6764.572        t= 2.38e+03 R=   7e+04
-Depth=    9379 States=  1.6e+08 Transitions=  2.6e+09 Memory=  6830.490        t= 2.4e+03 R=   7e+04
-Depth=    9379 States= 1.61e+08 Transitions= 2.62e+09 Memory=  6879.026        t= 2.41e+03 R=   7e+04
-Depth=    9379 States= 1.62e+08 Transitions= 2.63e+09 Memory=  6895.432        t= 2.42e+03 R=   7e+04
-Depth=    9379 States= 1.63e+08 Transitions= 2.65e+09 Memory=  6909.787        t= 2.44e+03 R=   7e+04
-Depth=    9379 States= 1.64e+08 Transitions= 2.67e+09 Memory=  6925.217        t= 2.46e+03 R=   7e+04
-Depth=    9379 States= 1.65e+08 Transitions= 2.69e+09 Memory=  6938.986        t= 2.48e+03 R=   7e+04
-Depth=    9379 States= 1.66e+08 Transitions= 2.71e+09 Memory=  6953.537        t= 2.5e+03 R=   7e+04
-Depth=    9379 States= 1.67e+08 Transitions= 2.73e+09 Memory=  6967.893        t= 2.52e+03 R=   7e+04
-Depth=    9379 States= 1.68e+08 Transitions= 2.75e+09 Memory=  7022.190        t= 2.53e+03 R=   7e+04
-Depth=    9379 States= 1.69e+08 Transitions= 2.77e+09 Memory=  7076.779        t= 2.55e+03 R=   7e+04
-Depth=    9379 States=  1.7e+08 Transitions= 2.79e+09 Memory=  7102.365        t= 2.57e+03 R=   7e+04
-Depth=    9379 States= 1.71e+08 Transitions=  2.8e+09 Memory=  7119.162        t= 2.58e+03 R=   7e+04
-Depth=    9379 States= 1.72e+08 Transitions= 2.81e+09 Memory=  7135.178        t= 2.59e+03 R=   7e+04
-Depth=    9379 States= 1.73e+08 Transitions= 2.84e+09 Memory=  7150.022        t= 2.61e+03 R=   7e+04
-Depth=    9379 States= 1.74e+08 Transitions= 2.85e+09 Memory=  7164.475        t= 2.63e+03 R=   7e+04
-Depth=    9379 States= 1.75e+08 Transitions= 2.87e+09 Memory=  7180.295        t= 2.64e+03 R=   7e+04
-Depth=    9379 States= 1.76e+08 Transitions= 2.89e+09 Memory=  7198.264        t= 2.66e+03 R=   7e+04
-Depth=    9379 States= 1.77e+08 Transitions=  2.9e+09 Memory=  7211.447        t= 2.67e+03 R=   7e+04
-Depth=    9379 States= 1.78e+08 Transitions= 2.93e+09 Memory=  7224.338        t= 2.7e+03 R=   7e+04
-Depth=    9379 States= 1.79e+08 Transitions= 2.95e+09 Memory=  7239.084        t= 2.72e+03 R=   7e+04
-Depth=    9379 States=  1.8e+08 Transitions= 2.97e+09 Memory=  7253.342        t= 2.74e+03 R=   7e+04
-Depth=    9379 States= 1.81e+08 Transitions= 2.99e+09 Memory=  7268.283        t= 2.75e+03 R=   7e+04
-Depth=    9379 States= 1.82e+08 Transitions= 3.01e+09 Memory=  7283.615        t= 2.77e+03 R=   7e+04
-Depth=    9379 States= 1.83e+08 Transitions= 3.02e+09 Memory=  7335.276        t= 2.78e+03 R=   7e+04
-Depth=    9379 States= 1.84e+08 Transitions= 3.04e+09 Memory=  7403.928        t= 2.8e+03 R=   7e+04
-Depth=    9379 States= 1.85e+08 Transitions= 3.06e+09 Memory=  7472.580        t= 2.82e+03 R=   7e+04
-Depth=    9379 States= 1.86e+08 Transitions= 3.08e+09 Memory=  7501.877        t= 2.84e+03 R=   7e+04
-Depth=    9379 States= 1.87e+08 Transitions=  3.1e+09 Memory=  7528.147        t= 2.85e+03 R=   7e+04
-Depth=    9379 States= 1.88e+08 Transitions= 3.11e+09 Memory=  7566.135        t= 2.87e+03 R=   7e+04
-Depth=    9379 States= 1.89e+08 Transitions= 3.13e+09 Memory=  7593.479        t= 2.88e+03 R=   7e+04
-Depth=    9379 States=  1.9e+08 Transitions= 3.15e+09 Memory=  7625.119        t= 2.9e+03 R=   7e+04
-Depth=    9379 States= 1.91e+08 Transitions= 3.16e+09 Memory=  7647.483        t= 2.91e+03 R=   7e+04
-Depth=    9379 States= 1.92e+08 Transitions= 3.18e+09 Memory=  7677.951        t= 2.93e+03 R=   7e+04
-Depth=    9379 States= 1.93e+08 Transitions=  3.2e+09 Memory=  7698.947        t= 2.94e+03 R=   7e+04
-Depth=    9379 States= 1.94e+08 Transitions= 3.21e+09 Memory=  7732.443        t= 2.96e+03 R=   7e+04
-Depth=    9379 States= 1.95e+08 Transitions= 3.23e+09 Memory=  7772.092        t= 2.97e+03 R=   7e+04
-Depth=    9379 States= 1.96e+08 Transitions= 3.24e+09 Memory=  7815.451        t= 2.98e+03 R=   7e+04
-Depth=    9379 States= 1.97e+08 Transitions= 3.26e+09 Memory=  7839.865        t=  3e+03 R=   7e+04
-Depth=    9379 States= 1.98e+08 Transitions= 3.28e+09 Memory=  7869.651        t= 3.01e+03 R=   7e+04
-Depth=    9379 States= 1.99e+08 Transitions= 3.29e+09 Memory=  7921.018        t= 3.03e+03 R=   7e+04
-Depth=    9379 States=    2e+08 Transitions= 3.31e+09 Memory=  7986.740        t= 3.05e+03 R=   7e+04
-Depth=    9379 States= 2.01e+08 Transitions= 3.33e+09 Memory=  8023.752        t= 3.06e+03 R=   7e+04
-Depth=    9379 States= 2.02e+08 Transitions= 3.34e+09 Memory=  8039.768        t= 3.07e+03 R=   7e+04
-Depth=    9379 States= 2.03e+08 Transitions= 3.36e+09 Memory=  8053.830        t= 3.09e+03 R=   7e+04
-Depth=    9379 States= 2.04e+08 Transitions= 3.38e+09 Memory=  8068.772        t= 3.11e+03 R=   7e+04
-Depth=    9379 States= 2.05e+08 Transitions=  3.4e+09 Memory=  8083.127        t= 3.13e+03 R=   7e+04
-Depth=    9379 States= 2.06e+08 Transitions= 3.42e+09 Memory=  8098.068        t= 3.15e+03 R=   7e+04
-Depth=    9379 States= 2.07e+08 Transitions= 3.44e+09 Memory=  8115.744        t= 3.16e+03 R=   7e+04
-Depth=    9379 States= 2.08e+08 Transitions= 3.46e+09 Memory=  8178.537        t= 3.18e+03 R=   7e+04
-Depth=    9379 States= 2.09e+08 Transitions= 3.48e+09 Memory=  8220.627        t= 3.2e+03 R=   7e+04
-Depth=    9379 States=  2.1e+08 Transitions= 3.49e+09 Memory=  8246.799        t= 3.21e+03 R=   7e+04
-Depth=    9379 States= 2.11e+08 Transitions=  3.5e+09 Memory=  8263.791        t= 3.22e+03 R=   7e+04
-Depth=    9379 States= 2.12e+08 Transitions= 3.52e+09 Memory=  8279.514        t= 3.24e+03 R=   7e+04
-Depth=    9379 States= 2.13e+08 Transitions= 3.54e+09 Memory=  8293.772        t= 3.26e+03 R=   7e+04
-Depth=    9379 States= 2.14e+08 Transitions= 3.56e+09 Memory=  8309.201        t= 3.28e+03 R=   7e+04
-Depth=    9379 States= 2.15e+08 Transitions= 3.58e+09 Memory=  8323.752        t= 3.29e+03 R=   7e+04
-Depth=    9379 States= 2.16e+08 Transitions=  3.6e+09 Memory=  8342.990        t= 3.31e+03 R=   7e+04
-Depth=    9379 States= 2.17e+08 Transitions= 3.61e+09 Memory=  8355.197        t= 3.32e+03 R=   7e+04
-Depth=    9379 States= 2.18e+08 Transitions= 3.64e+09 Memory=  8368.674        t= 3.35e+03 R=   7e+04
-Depth=    9379 States= 2.19e+08 Transitions= 3.66e+09 Memory=  8382.932        t= 3.37e+03 R=   7e+04
-Depth=    9379 States=  2.2e+08 Transitions= 3.68e+09 Memory=  8398.459        t= 3.38e+03 R=   7e+04
-Depth=    9379 States= 2.21e+08 Transitions=  3.7e+09 Memory=  8412.912        t= 3.4e+03 R=   6e+04
-Depth=    9379 States= 2.22e+08 Transitions= 3.71e+09 Memory=  8428.244        t= 3.42e+03 R=   6e+04
-Depth=    9379 States= 2.23e+08 Transitions= 3.73e+09 Memory=  8491.721        t= 3.43e+03 R=   6e+04
-Depth=    9379 States= 2.24e+08 Transitions= 3.75e+09 Memory=  8560.373        t= 3.45e+03 R=   6e+04
-Depth=    9379 States= 2.25e+08 Transitions= 3.77e+09 Memory=  8621.604        t= 3.47e+03 R=   6e+04
-Depth=    9379 States= 2.26e+08 Transitions= 3.79e+09 Memory=  8648.850        t= 3.48e+03 R=   6e+04
-Depth=    9379 States= 2.27e+08 Transitions= 3.81e+09 Memory=  8671.994        t= 3.5e+03 R=   6e+04
-Depth=    9379 States= 2.28e+08 Transitions= 3.82e+09 Memory=  8710.861        t= 3.51e+03 R=   6e+04
-Depth=    9379 States= 2.29e+08 Transitions= 3.84e+09 Memory=  8742.893        t= 3.53e+03 R=   6e+04
-Depth=    9379 States=  2.3e+08 Transitions= 3.85e+09 Memory=  8771.799        t= 3.54e+03 R=   6e+04
-Depth=    9379 States= 2.31e+08 Transitions= 3.87e+09 Memory=  8792.600        t= 3.56e+03 R=   6e+04
-Depth=    9379 States= 2.32e+08 Transitions= 3.89e+09 Memory=  8828.733        t= 3.57e+03 R=   6e+04
-Depth=    9379 States= 2.33e+08 Transitions=  3.9e+09 Memory=  8843.869        t= 3.59e+03 R=   6e+04
-Depth=    9379 States= 2.34e+08 Transitions= 3.92e+09 Memory=  8884.787        t= 3.6e+03 R=   6e+04
-Depth=    9379 States= 2.35e+08 Transitions= 3.93e+09 Memory=  8924.240        t= 3.62e+03 R=   6e+04
-Depth=    9379 States= 2.36e+08 Transitions= 3.95e+09 Memory=  8960.276        t= 3.63e+03 R=   6e+04
-Depth=    9379 States= 2.37e+08 Transitions= 3.97e+09 Memory=  8984.494        t= 3.65e+03 R=   6e+04
-Depth=    9379 States= 2.38e+08 Transitions= 3.98e+09 Memory=  9016.428        t= 3.66e+03 R=   6e+04
-Depth=    9379 States= 2.39e+08 Transitions=    4e+09 Memory=  9077.365        t= 3.68e+03 R=   6e+04
-Depth=    9379 States=  2.4e+08 Transitions= 4.02e+09 Memory=  9143.088        t= 3.7e+03 R=   6e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 9379, errors: 0
- 88114592 states, stored (2.40192e+08 visited)
-3.782223e+09 states, matched
-4.0224152e+09 transitions (= visited+matched)
-1.4282782e+10 atomic steps
-hash conflicts: 5.384059e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 7731.001      equivalent memory usage for states (stored*(State-vector + overhead))
- 6648.180      actual memory usage for states (compression: 85.99%)
-               state-vector as stored = 51 byte + 28 byte overhead
- 2048.000      memory used for hash table (-w28)
-  457.764      memory used for DFS stack (-m10000000)
-    1.188      memory lost to fragmentation
- 9152.756      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 3.7e+03 seconds
-pan: rate 64918.749 states/second
-pan: avg transition delay 9.1982e-07 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 43221e7..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.define b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.log b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index f870a6e..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-depth 15: Claim reached state 9 (line 750)
-depth 1194: Claim reached state 9 (line 749)
-Depth=    3253 States=    1e+06 Transitions= 1.06e+07 Memory=   484.416        t=   9.57 R=   1e+05
-Depth=    3253 States=    2e+06 Transitions= 2.04e+07 Memory=   501.311        t=   18.5 R=   1e+05
-pan: acceptance cycle (at depth 1938)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 23684, errors: 1
-   682672 states, stored (2.81536e+06 visited)
- 30226122 states, matched
- 33041487 transitions (= visited+matched)
-1.1631626e+08 atomic steps
-hash conflicts:   6056013 (resolved)
-
-Stats on memory usage (in Megabytes):
-   59.896      equivalent memory usage for states (stored*(State-vector + overhead))
-   47.456      actual memory usage for states (compression: 79.23%)
-               state-vector as stored = 45 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  513.127      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 158, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 400, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 256, "(1)"
-       line 419, "pan.___", state 286, "(1)"
-       line 400, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 395, "(1)"
-       line 419, "pan.___", state 425, "(1)"
-       line 541, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 400, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 70, "(1)"
-       line 419, "pan.___", state 100, "(1)"
-       line 400, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 158, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 400, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 247, "(1)"
-       line 419, "pan.___", state 277, "(1)"
-       line 400, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 359, "(1)"
-       line 419, "pan.___", state 389, "(1)"
-       line 615, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 402, "pan.___", state 134, "((i<1))"
-       line 402, "pan.___", state 134, "((i>=1))"
-       line 410, "pan.___", state 153, "(1)"
-       line 410, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 154, "else"
-       line 410, "pan.___", state 157, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 414, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 167, "else"
-       line 414, "pan.___", state 170, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 412, "pan.___", state 176, "((i<1))"
-       line 412, "pan.___", state 176, "((i>=1))"
-       line 419, "pan.___", state 183, "(1)"
-       line 419, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 184, "else"
-       line 419, "pan.___", state 187, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 370, "pan.___", state 193, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 647, "pan.___", state 202, "((write_lock==0))"
-       line 647, "pan.___", state 202, "else"
-       line 645, "pan.___", state 203, "(1)"
-       line 176, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 180, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 225, "((j<1))"
-       line 178, "pan.___", state 225, "((j>=1))"
-       line 184, "pan.___", state 230, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 161, "pan.___", state 240, "(1)"
-       line 165, "pan.___", state 248, "(1)"
-       line 165, "pan.___", state 249, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 165, "pan.___", state 249, "else"
-       line 163, "pan.___", state 254, "((j<1))"
-       line 163, "pan.___", state 254, "((j>=1))"
-       line 169, "pan.___", state 260, "(1)"
-       line 169, "pan.___", state 261, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 169, "pan.___", state 261, "else"
-       line 171, "pan.___", state 264, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 171, "pan.___", state 264, "else"
-       line 176, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 180, "pan.___", state 280, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 288, "((j<1))"
-       line 178, "pan.___", state 288, "((j>=1))"
-       line 184, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 303, "(1)"
-       line 165, "pan.___", state 311, "(1)"
-       line 165, "pan.___", state 312, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 165, "pan.___", state 312, "else"
-       line 163, "pan.___", state 317, "((j<1))"
-       line 163, "pan.___", state 317, "((j>=1))"
-       line 169, "pan.___", state 323, "(1)"
-       line 169, "pan.___", state 324, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 324, "else"
-       line 171, "pan.___", state 327, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 171, "pan.___", state 327, "else"
-       line 215, "pan.___", state 333, "((i<1))"
-       line 215, "pan.___", state 333, "((i>=1))"
-       line 176, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 180, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 355, "((j<1))"
-       line 178, "pan.___", state 355, "((j>=1))"
-       line 184, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 161, "pan.___", state 370, "(1)"
-       line 165, "pan.___", state 378, "(1)"
-       line 165, "pan.___", state 379, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 165, "pan.___", state 379, "else"
-       line 163, "pan.___", state 384, "((j<1))"
-       line 163, "pan.___", state 384, "((j>=1))"
-       line 169, "pan.___", state 390, "(1)"
-       line 169, "pan.___", state 391, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 169, "pan.___", state 391, "else"
-       line 171, "pan.___", state 394, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 171, "pan.___", state 394, "else"
-       line 400, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 410, "(1)"
-       line 404, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 424, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 402, "pan.___", state 430, "((i<1))"
-       line 402, "pan.___", state 430, "((i>=1))"
-       line 409, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 449, "(1)"
-       line 410, "pan.___", state 450, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 450, "else"
-       line 410, "pan.___", state 453, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 414, "pan.___", state 462, "(1)"
-       line 414, "pan.___", state 463, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 463, "else"
-       line 414, "pan.___", state 466, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 412, "pan.___", state 472, "((i<1))"
-       line 412, "pan.___", state 472, "((i>=1))"
-       line 419, "pan.___", state 479, "(1)"
-       line 419, "pan.___", state 480, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 480, "else"
-       line 419, "pan.___", state 483, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 370, "pan.___", state 489, "(1)"
-       line 662, "pan.___", state 492, "cached_urcu_gp_ctr.val[( ((_pid<2)) ? (0) : (1) )] = (tmp^(1<<7))"
-       line 400, "pan.___", state 498, "(1)"
-       line 400, "pan.___", state 499, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 499, "else"
-       line 400, "pan.___", state 502, "(1)"
-       line 404, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 516, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 402, "pan.___", state 522, "((i<1))"
-       line 402, "pan.___", state 522, "((i>=1))"
-       line 409, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 541, "(1)"
-       line 410, "pan.___", state 542, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 542, "else"
-       line 410, "pan.___", state 545, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 414, "pan.___", state 554, "(1)"
-       line 414, "pan.___", state 555, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 555, "else"
-       line 414, "pan.___", state 558, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 412, "pan.___", state 564, "((i<1))"
-       line 412, "pan.___", state 564, "((i>=1))"
-       line 419, "pan.___", state 571, "(1)"
-       line 419, "pan.___", state 572, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 572, "else"
-       line 419, "pan.___", state 575, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 370, "pan.___", state 581, "(1)"
-       line 400, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 595, "(1)"
-       line 404, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 609, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 402, "pan.___", state 615, "((i<1))"
-       line 402, "pan.___", state 615, "((i>=1))"
-       line 409, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 634, "(1)"
-       line 410, "pan.___", state 635, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 635, "else"
-       line 410, "pan.___", state 638, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 414, "pan.___", state 647, "(1)"
-       line 414, "pan.___", state 648, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 648, "else"
-       line 414, "pan.___", state 651, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 412, "pan.___", state 657, "((i<1))"
-       line 412, "pan.___", state 657, "((i>=1))"
-       line 419, "pan.___", state 664, "(1)"
-       line 419, "pan.___", state 665, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 665, "else"
-       line 419, "pan.___", state 668, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 370, "pan.___", state 674, "(1)"
-       line 400, "pan.___", state 679, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 681, "(1)"
-       line 400, "pan.___", state 682, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 682, "else"
-       line 400, "pan.___", state 685, "(1)"
-       line 404, "pan.___", state 693, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 695, "(1)"
-       line 404, "pan.___", state 696, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 696, "else"
-       line 404, "pan.___", state 699, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 402, "pan.___", state 705, "((i<1))"
-       line 402, "pan.___", state 705, "((i>=1))"
-       line 409, "pan.___", state 711, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 724, "(1)"
-       line 410, "pan.___", state 725, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 725, "else"
-       line 410, "pan.___", state 728, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 414, "pan.___", state 737, "(1)"
-       line 414, "pan.___", state 738, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 738, "else"
-       line 414, "pan.___", state 741, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 412, "pan.___", state 747, "((i<1))"
-       line 412, "pan.___", state 747, "((i>=1))"
-       line 419, "pan.___", state 754, "(1)"
-       line 419, "pan.___", state 755, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 755, "else"
-       line 419, "pan.___", state 758, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 370, "pan.___", state 764, "(1)"
-       line 430, "pan.___", state 767, "(((tmp2&((1<<7)-1))&&((tmp2^cached_urcu_gp_ctr.val[( ((_pid<2)) ? (0) : (1) )])&(1<<7))))"
-       line 430, "pan.___", state 767, "else"
-       line 400, "pan.___", state 777, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 779, "(1)"
-       line 400, "pan.___", state 780, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 780, "else"
-       line 400, "pan.___", state 783, "(1)"
-       line 404, "pan.___", state 791, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 793, "(1)"
-       line 404, "pan.___", state 794, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 794, "else"
-       line 404, "pan.___", state 797, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 402, "pan.___", state 803, "((i<1))"
-       line 402, "pan.___", state 803, "((i>=1))"
-       line 409, "pan.___", state 809, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 822, "(1)"
-       line 410, "pan.___", state 823, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 823, "else"
-       line 410, "pan.___", state 826, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 414, "pan.___", state 835, "(1)"
-       line 414, "pan.___", state 836, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 836, "else"
-       line 414, "pan.___", state 839, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 412, "pan.___", state 845, "((i<1))"
-       line 412, "pan.___", state 845, "((i>=1))"
-       line 419, "pan.___", state 852, "(1)"
-       line 419, "pan.___", state 853, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 853, "else"
-       line 419, "pan.___", state 856, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 370, "pan.___", state 862, "(1)"
-       line 449, "pan.___", state 870, "((tmp<1))"
-       line 449, "pan.___", state 870, "((tmp>=1))"
-       line 462, "pan.___", state 873, "tmp = 0"
-       line 400, "pan.___", state 877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 883, "(1)"
-       line 404, "pan.___", state 891, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 897, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 903, "((i<1))"
-       line 402, "pan.___", state 903, "((i>=1))"
-       line 409, "pan.___", state 909, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 922, "(1)"
-       line 410, "pan.___", state 923, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 923, "else"
-       line 410, "pan.___", state 926, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 414, "pan.___", state 935, "(1)"
-       line 414, "pan.___", state 936, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 936, "else"
-       line 414, "pan.___", state 939, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 945, "((i<1))"
-       line 412, "pan.___", state 945, "((i>=1))"
-       line 419, "pan.___", state 952, "(1)"
-       line 419, "pan.___", state 953, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 953, "else"
-       line 419, "pan.___", state 956, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 370, "pan.___", state 962, "(1)"
-       line 671, "pan.___", state 963, "tmp = cached_urcu_gp_ctr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 400, "pan.___", state 967, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 973, "(1)"
-       line 404, "pan.___", state 981, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 987, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 402, "pan.___", state 993, "((i<1))"
-       line 402, "pan.___", state 993, "((i>=1))"
-       line 409, "pan.___", state 999, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1012, "(1)"
-       line 410, "pan.___", state 1013, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 1013, "else"
-       line 410, "pan.___", state 1016, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 414, "pan.___", state 1025, "(1)"
-       line 414, "pan.___", state 1026, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 1026, "else"
-       line 414, "pan.___", state 1029, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 412, "pan.___", state 1035, "((i<1))"
-       line 412, "pan.___", state 1035, "((i>=1))"
-       line 419, "pan.___", state 1042, "(1)"
-       line 419, "pan.___", state 1043, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 1043, "else"
-       line 419, "pan.___", state 1046, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 370, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1061, "(1)"
-       line 404, "pan.___", state 1073, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1091, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1117, "(1)"
-       line 419, "pan.___", state 1134, "(1)"
-       line 404, "pan.___", state 1166, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1184, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1210, "(1)"
-       line 419, "pan.___", state 1227, "(1)"
-       line 400, "pan.___", state 1242, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1256, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1287, "(1)"
-       line 414, "pan.___", state 1300, "(1)"
-       line 419, "pan.___", state 1317, "(1)"
-       line 400, "pan.___", state 1340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1342, "(1)"
-       line 400, "pan.___", state 1343, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1343, "else"
-       line 400, "pan.___", state 1346, "(1)"
-       line 404, "pan.___", state 1354, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1356, "(1)"
-       line 404, "pan.___", state 1357, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1357, "else"
-       line 404, "pan.___", state 1360, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 402, "pan.___", state 1366, "((i<1))"
-       line 402, "pan.___", state 1366, "((i>=1))"
-       line 409, "pan.___", state 1372, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1385, "(1)"
-       line 410, "pan.___", state 1386, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 1386, "else"
-       line 410, "pan.___", state 1389, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 414, "pan.___", state 1398, "(1)"
-       line 414, "pan.___", state 1399, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 1399, "else"
-       line 414, "pan.___", state 1402, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 412, "pan.___", state 1408, "((i<1))"
-       line 412, "pan.___", state 1408, "((i>=1))"
-       line 419, "pan.___", state 1415, "(1)"
-       line 419, "pan.___", state 1416, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 1416, "else"
-       line 419, "pan.___", state 1419, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 180, "pan.___", state 1448, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 184, "pan.___", state 1461, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 161, "pan.___", state 1471, "(1)"
-       line 165, "pan.___", state 1479, "(1)"
-       line 169, "pan.___", state 1491, "(1)"
-       line 176, "pan.___", state 1502, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 184, "pan.___", state 1524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 1534, "(1)"
-       line 165, "pan.___", state 1542, "(1)"
-       line 169, "pan.___", state 1554, "(1)"
-       line 176, "pan.___", state 1569, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 180, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 184, "pan.___", state 1591, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 161, "pan.___", state 1601, "(1)"
-       line 165, "pan.___", state 1609, "(1)"
-       line 169, "pan.___", state 1621, "(1)"
-       line 370, "pan.___", state 1642, "(1)"
-       line 696, "pan.___", state 1643, "(1)"
-       line 703, "pan.___", state 1646, "-end-"
-       (308 of 1646 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 752, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 30.2 seconds
-pan: rate 93347.646 states/second
-pan: avg transition delay 9.1279e-07 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.spin.input b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index eb1d4e6..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-reader/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index c5a6fbf..0000000
+++ /dev/null
@@ -1,23572 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2561
-2:4:2513
-3:4:2516
-4:4:2516
-5:4:2519
-6:4:2527
-7:4:2527
-8:4:2530
-9:4:2536
-10:4:2540
-11:4:2540
-12:4:2543
-13:4:2551
-14:4:2555
-15:4:2556
-16:0:2561
-17:4:2558
-18:0:2561
-19:3:869
-20:0:2561
-21:3:875
-22:0:2561
-23:3:876
-24:0:2561
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:2559
-45:3:964
-46:0:2565
-47:3:966
-48:3:967
-49:0:2565
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:2565
-69:3:1058
-70:0:2565
-71:3:1060
-72:0:2565
-73:3:1061
-74:0:2565
-75:3:1071
-76:0:2565
-77:3:1075
-78:3:1076
-79:3:1080
-80:3:1084
-81:3:1085
-82:3:1089
-83:3:1097
-84:3:1098
-85:3:1103
-86:3:1110
-87:3:1111
-88:3:1118
-89:3:1123
-90:0:2565
-91:3:1134
-92:0:2565
-93:3:1138
-94:3:1139
-95:3:1143
-96:3:1147
-97:3:1148
-98:3:1152
-99:3:1160
-100:3:1161
-101:3:1166
-102:3:1173
-103:3:1174
-104:3:1181
-105:3:1186
-106:0:2565
-107:3:1197
-108:0:2565
-109:3:1205
-110:3:1206
-111:3:1210
-112:3:1214
-113:3:1215
-114:3:1219
-115:3:1227
-116:3:1228
-117:3:1233
-118:3:1240
-119:3:1241
-120:3:1248
-121:3:1253
-122:0:2565
-123:3:1264
-124:0:2565
-125:3:1266
-126:0:2565
-127:3:1267
-128:3:1271
-129:3:1272
-130:3:1280
-131:3:1281
-132:3:1285
-133:3:1286
-134:3:1294
-135:3:1299
-136:3:1303
-137:3:1304
-138:3:1311
-139:3:1312
-140:3:1323
-141:3:1324
-142:3:1325
-143:3:1336
-144:3:1341
-145:3:1342
-146:0:2565
-147:3:1354
-148:0:2565
-149:3:1356
-150:0:2565
-151:3:1359
-152:3:1360
-153:3:1372
-154:3:1373
-155:3:1377
-156:3:1378
-157:3:1386
-158:3:1391
-159:3:1395
-160:3:1396
-161:3:1403
-162:3:1404
-163:3:1415
-164:3:1416
-165:3:1417
-166:3:1428
-167:3:1433
-168:3:1434
-169:0:2565
-170:3:1446
-171:0:2565
-172:3:1448
-173:0:2565
-174:3:1449
-175:0:2565
-176:3:1450
-177:0:2565
-178:3:1451
-179:0:2565
-180:3:1452
-181:3:1456
-182:3:1457
-183:3:1465
-184:3:1466
-185:3:1470
-186:3:1471
-187:3:1479
-188:3:1484
-189:3:1488
-190:3:1489
-191:3:1496
-192:3:1497
-193:3:1508
-194:3:1509
-195:3:1510
-196:3:1521
-197:3:1526
-198:3:1527
-199:0:2565
-200:3:1539
-201:0:2565
-202:3:1631
-203:0:2565
-204:3:1729
-205:0:2565
-206:3:1730
-207:0:2565
-208:3:1734
-209:0:2565
-210:3:1740
-211:3:1744
-212:3:1745
-213:3:1753
-214:3:1754
-215:3:1758
-216:3:1759
-217:3:1767
-218:3:1772
-219:3:1776
-220:3:1777
-221:3:1784
-222:3:1785
-223:3:1796
-224:3:1797
-225:3:1798
-226:3:1809
-227:3:1814
-228:3:1815
-229:0:2565
-230:3:1827
-231:0:2565
-232:3:1829
-233:0:2565
-234:3:1830
-235:3:1834
-236:3:1835
-237:3:1843
-238:3:1844
-239:3:1848
-240:3:1849
-241:3:1857
-242:3:1862
-243:3:1866
-244:3:1867
-245:3:1874
-246:3:1875
-247:3:1886
-248:3:1887
-249:3:1888
-250:3:1899
-251:3:1904
-252:3:1905
-253:0:2565
-254:3:1917
-255:0:2565
-256:3:1919
-257:0:2565
-258:2:458
-259:0:2565
-260:2:464
-261:0:2565
-262:2:465
-263:0:2565
-264:2:466
-265:0:2565
-266:2:467
-267:0:2565
-268:1:2
-269:0:2565
-270:2:468
-271:0:2565
-272:1:8
-273:0:2565
-274:1:9
-275:0:2565
-276:1:10
-277:0:2565
-278:1:11
-279:0:2565
-280:2:467
-281:0:2565
-282:1:12
-283:1:16
-284:1:17
-285:1:25
-286:1:26
-287:1:30
-288:1:31
-289:1:39
-290:1:44
-291:1:48
-292:1:49
-293:1:56
-294:1:57
-295:1:68
-296:1:69
-297:1:70
-298:1:81
-299:1:86
-300:1:87
-301:0:2565
-302:2:468
-303:0:2565
-304:1:99
-305:0:2565
-306:2:469
-307:0:2565
-308:2:475
-309:0:2565
-310:2:476
-311:0:2565
-312:2:477
-313:2:481
-314:2:482
-315:2:490
-316:2:491
-317:2:495
-318:2:496
-319:2:504
-320:2:509
-321:2:513
-322:2:514
-323:2:521
-324:2:522
-325:2:533
-326:2:534
-327:2:535
-328:2:546
-329:2:551
-330:2:552
-331:0:2565
-332:2:564
-333:0:2565
-334:2:565
-335:2:569
-336:2:570
-337:2:578
-338:2:579
-339:2:583
-340:2:584
-341:2:592
-342:2:597
-343:2:601
-344:2:602
-345:2:609
-346:2:610
-347:2:621
-348:2:622
-349:2:623
-350:2:634
-351:2:639
-352:2:640
-353:0:2565
-354:2:652
-355:0:2565
-356:2:653
-357:0:2565
-358:2:654
-359:2:658
-360:2:659
-361:2:667
-362:2:668
-363:2:672
-364:2:673
-365:2:681
-366:2:686
-367:2:690
-368:2:691
-369:2:698
-370:2:699
-371:2:710
-372:2:711
-373:2:712
-374:2:723
-375:2:728
-376:2:729
-377:0:2565
-378:2:741
-379:0:2565
-380:2:750
-381:0:2565
-382:2:753
-383:0:2565
-384:2:758
-385:0:2565
-386:2:759
-387:0:2565
-388:2:760
-389:0:2565
-390:2:761
-391:0:2565
-392:2:762
-393:0:2565
-394:2:763
-395:0:2565
-396:2:765
-397:0:2565
-398:2:766
-399:2:770
-400:2:771
-401:2:779
-402:2:780
-403:2:781
-404:2:793
-405:2:798
-406:2:802
-407:2:803
-408:2:810
-409:2:811
-410:2:822
-411:2:823
-412:2:824
-413:2:835
-414:2:840
-415:2:841
-416:0:2565
-417:3:1922
-418:3:1923
-419:3:1935
-420:3:1936
-421:3:1940
-422:3:1941
-423:3:1949
-424:3:1954
-425:3:1958
-426:3:1959
-427:3:1966
-428:3:1967
-429:3:1978
-430:3:1979
-431:3:1980
-432:3:1991
-433:3:1996
-434:3:1997
-435:0:2565
-436:3:2009
-437:0:2565
-438:3:2011
-439:0:2565
-440:3:2012
-441:0:2565
-442:3:2013
-443:0:2565
-444:3:2014
-445:0:2565
-446:3:2015
-447:3:2019
-448:3:2020
-449:3:2028
-450:3:2029
-451:3:2033
-452:3:2034
-453:3:2042
-454:3:2047
-455:3:2051
-456:3:2052
-457:3:2059
-458:3:2060
-459:3:2071
-460:3:2072
-461:3:2073
-462:3:2084
-463:3:2089
-464:3:2090
-465:0:2565
-466:3:2102
-467:0:2565
-468:3:2104
-469:0:2565
-470:3:2105
-471:3:2109
-472:3:2110
-473:3:2118
-474:3:2119
-475:3:2123
-476:3:2124
-477:3:2132
-478:3:2137
-479:3:2141
-480:3:2142
-481:3:2149
-482:3:2150
-483:3:2161
-484:3:2162
-485:3:2163
-486:3:2174
-487:3:2179
-488:3:2180
-489:0:2565
-490:3:2192
-491:0:2565
-492:2:853
-493:0:2565
-494:3:2013
-495:0:2565
-496:2:857
-497:0:2565
-498:2:465
-499:0:2565
-500:3:2014
-501:0:2565
-502:3:2015
-503:3:2019
-504:3:2020
-505:3:2028
-506:3:2029
-507:3:2033
-508:3:2034
-509:3:2042
-510:3:2047
-511:3:2051
-512:3:2052
-513:3:2059
-514:3:2060
-515:3:2071
-516:3:2072
-517:3:2073
-518:3:2084
-519:3:2089
-520:3:2090
-521:0:2565
-522:3:2102
-523:0:2565
-524:3:2104
-525:0:2565
-526:3:2105
-527:3:2109
-528:3:2110
-529:3:2118
-530:3:2119
-531:3:2123
-532:3:2124
-533:3:2132
-534:3:2137
-535:3:2141
-536:3:2142
-537:3:2149
-538:3:2150
-539:3:2161
-540:3:2162
-541:3:2163
-542:3:2174
-543:3:2179
-544:3:2180
-545:0:2565
-546:3:2192
-547:0:2565
-548:2:466
-549:0:2565
-550:3:2013
-551:0:2565
-552:3:2014
-553:0:2565
-554:3:2015
-555:3:2019
-556:3:2020
-557:3:2028
-558:3:2029
-559:3:2033
-560:3:2034
-561:3:2042
-562:3:2047
-563:3:2051
-564:3:2052
-565:3:2059
-566:3:2060
-567:3:2071
-568:3:2072
-569:3:2073
-570:3:2084
-571:3:2089
-572:3:2090
-573:0:2565
-574:3:2102
-575:0:2565
-576:3:2104
-577:0:2565
-578:3:2105
-579:3:2109
-580:3:2110
-581:3:2118
-582:3:2119
-583:3:2123
-584:3:2124
-585:3:2132
-586:3:2137
-587:3:2141
-588:3:2142
-589:3:2149
-590:3:2150
-591:3:2161
-592:3:2162
-593:3:2163
-594:3:2174
-595:3:2179
-596:3:2180
-597:0:2565
-598:2:467
-599:0:2565
-600:3:2192
-601:0:2565
-602:3:2013
-603:0:2565
-604:3:2014
-605:0:2565
-606:3:2015
-607:3:2019
-608:3:2020
-609:3:2028
-610:3:2029
-611:3:2033
-612:3:2034
-613:3:2042
-614:3:2047
-615:3:2051
-616:3:2052
-617:3:2059
-618:3:2060
-619:3:2071
-620:3:2072
-621:3:2073
-622:3:2084
-623:3:2089
-624:3:2090
-625:0:2565
-626:3:2102
-627:0:2565
-628:3:2104
-629:0:2565
-630:1:102
-631:0:2565
-632:2:468
-633:0:2565
-634:3:2105
-635:3:2109
-636:3:2110
-637:3:2118
-638:3:2119
-639:3:2123
-640:3:2124
-641:3:2132
-642:3:2137
-643:3:2141
-644:3:2142
-645:3:2149
-646:3:2150
-647:3:2161
-648:3:2162
-649:3:2163
-650:3:2174
-651:3:2179
-652:3:2180
-653:0:2565
-654:3:2192
-655:0:2565
-656:3:2013
-657:0:2565
-658:3:2014
-659:0:2565
-660:3:2015
-661:3:2019
-662:3:2020
-663:3:2028
-664:3:2029
-665:3:2033
-666:3:2034
-667:3:2042
-668:3:2047
-669:3:2051
-670:3:2052
-671:3:2059
-672:3:2060
-673:3:2071
-674:3:2072
-675:3:2073
-676:3:2084
-677:3:2089
-678:3:2090
-679:0:2565
-680:3:2102
-681:0:2565
-682:3:2104
-683:0:2565
-684:2:467
-685:0:2565
-686:2:468
-687:0:2565
-688:3:2105
-689:3:2109
-690:3:2110
-691:3:2118
-692:3:2119
-693:3:2123
-694:3:2124
-695:3:2132
-696:3:2137
-697:3:2141
-698:3:2142
-699:3:2149
-700:3:2150
-701:3:2161
-702:3:2162
-703:3:2163
-704:3:2174
-705:3:2179
-706:3:2180
-707:0:2565
-708:3:2192
-709:0:2565
-710:3:2013
-711:0:2565
-712:3:2014
-713:0:2565
-714:3:2015
-715:3:2019
-716:3:2020
-717:3:2028
-718:3:2029
-719:3:2033
-720:3:2034
-721:3:2042
-722:3:2047
-723:3:2051
-724:3:2052
-725:3:2059
-726:3:2060
-727:3:2071
-728:3:2072
-729:3:2073
-730:3:2084
-731:3:2089
-732:3:2090
-733:0:2565
-734:3:2102
-735:0:2565
-736:2:467
-737:0:2565
-738:1:108
-739:0:2565
-740:2:468
-741:0:2565
-742:3:2104
-743:0:2565
-744:3:2105
-745:3:2109
-746:3:2110
-747:3:2118
-748:3:2119
-749:3:2123
-750:3:2124
-751:3:2132
-752:3:2137
-753:3:2141
-754:3:2142
-755:3:2149
-756:3:2150
-757:3:2161
-758:3:2162
-759:3:2163
-760:3:2174
-761:3:2179
-762:3:2180
-763:0:2565
-764:3:2192
-765:0:2565
-766:3:2013
-767:0:2565
-768:3:2014
-769:0:2565
-770:3:2015
-771:3:2019
-772:3:2020
-773:3:2028
-774:3:2029
-775:3:2033
-776:3:2034
-777:3:2042
-778:3:2047
-779:3:2051
-780:3:2052
-781:3:2059
-782:3:2060
-783:3:2071
-784:3:2072
-785:3:2073
-786:3:2084
-787:3:2089
-788:3:2090
-789:0:2565
-790:3:2102
-791:0:2565
-792:2:467
-793:0:2565
-794:2:468
-795:0:2565
-796:3:2104
-797:0:2565
-798:3:2105
-799:3:2109
-800:3:2110
-801:3:2118
-802:3:2119
-803:3:2123
-804:3:2124
-805:3:2132
-806:3:2137
-807:3:2141
-808:3:2142
-809:3:2149
-810:3:2150
-811:3:2161
-812:3:2162
-813:3:2163
-814:3:2174
-815:3:2179
-816:3:2180
-817:0:2565
-818:3:2192
-819:0:2565
-820:3:2013
-821:0:2565
-822:3:2014
-823:0:2565
-824:3:2015
-825:3:2019
-826:3:2020
-827:3:2028
-828:3:2029
-829:3:2033
-830:3:2034
-831:3:2042
-832:3:2047
-833:3:2051
-834:3:2052
-835:3:2059
-836:3:2060
-837:3:2071
-838:3:2072
-839:3:2073
-840:3:2084
-841:3:2089
-842:3:2090
-843:0:2565
-844:2:467
-845:0:2565
-846:1:109
-847:1:113
-848:1:114
-849:1:122
-850:1:123
-851:1:124
-852:1:136
-853:1:141
-854:1:145
-855:1:146
-856:1:153
-857:1:154
-858:1:165
-859:1:166
-860:1:167
-861:1:178
-862:1:183
-863:1:184
-864:0:2565
-865:3:2102
-866:0:2565
-867:2:468
-868:0:2565
-869:3:2104
-870:0:2565
-871:3:2105
-872:3:2109
-873:3:2110
-874:3:2118
-875:3:2119
-876:3:2123
-877:3:2124
-878:3:2132
-879:3:2137
-880:3:2141
-881:3:2142
-882:3:2149
-883:3:2150
-884:3:2161
-885:3:2169
-886:3:2170
-887:3:2174
-888:3:2179
-889:3:2180
-890:0:2565
-891:3:2192
-892:0:2565
-893:3:2013
-894:0:2565
-895:3:2014
-896:0:2565
-897:3:2015
-898:3:2019
-899:3:2020
-900:3:2028
-901:3:2029
-902:3:2033
-903:3:2034
-904:3:2042
-905:3:2047
-906:3:2051
-907:3:2052
-908:3:2059
-909:3:2060
-910:3:2071
-911:3:2079
-912:3:2080
-913:3:2084
-914:3:2089
-915:3:2090
-916:0:2565
-917:2:467
-918:0:2565
-919:3:2102
-920:0:2565
-921:3:2104
-922:0:2565
-923:3:2105
-924:3:2109
-925:3:2110
-926:3:2118
-927:3:2119
-928:3:2123
-929:3:2124
-930:3:2132
-931:3:2137
-932:3:2141
-933:3:2142
-934:3:2149
-935:3:2150
-936:3:2161
-937:3:2169
-938:3:2170
-939:3:2174
-940:3:2179
-941:3:2180
-942:0:2565
-943:3:2192
-944:0:2565
-945:3:2013
-946:0:2565
-947:3:2014
-948:0:2565
-949:1:196
-950:0:2565
-951:2:468
-952:0:2565
-953:3:2015
-954:3:2019
-955:3:2020
-956:3:2028
-957:3:2029
-958:3:2033
-959:3:2034
-960:3:2042
-961:3:2047
-962:3:2051
-963:3:2052
-964:3:2059
-965:3:2060
-966:3:2071
-967:3:2079
-968:3:2080
-969:3:2084
-970:3:2089
-971:3:2090
-972:0:2565
-973:3:2102
-974:0:2565
-975:3:2104
-976:0:2565
-977:3:2105
-978:3:2109
-979:3:2110
-980:3:2118
-981:3:2119
-982:3:2123
-983:3:2124
-984:3:2132
-985:3:2137
-986:3:2141
-987:3:2142
-988:3:2149
-989:3:2150
-990:3:2161
-991:3:2169
-992:3:2170
-993:3:2174
-994:3:2179
-995:3:2180
-996:0:2565
-997:3:2192
-998:0:2565
-999:3:2013
-1000:0:2565
-1001:3:2014
-1002:0:2565
-1003:2:469
-1004:0:2565
-1005:2:475
-1006:0:2565
-1007:2:476
-1008:0:2565
-1009:3:2015
-1010:3:2019
-1011:3:2020
-1012:3:2028
-1013:3:2029
-1014:3:2033
-1015:3:2034
-1016:3:2042
-1017:3:2047
-1018:3:2051
-1019:3:2052
-1020:3:2059
-1021:3:2060
-1022:3:2071
-1023:3:2079
-1024:3:2080
-1025:3:2084
-1026:3:2089
-1027:3:2090
-1028:0:2565
-1029:3:2102
-1030:0:2565
-1031:3:2104
-1032:0:2565
-1033:3:2105
-1034:3:2109
-1035:3:2110
-1036:3:2118
-1037:3:2119
-1038:3:2123
-1039:3:2124
-1040:3:2132
-1041:3:2137
-1042:3:2141
-1043:3:2142
-1044:3:2149
-1045:3:2150
-1046:3:2161
-1047:3:2169
-1048:3:2170
-1049:3:2174
-1050:3:2179
-1051:3:2180
-1052:0:2565
-1053:3:2192
-1054:0:2565
-1055:3:2013
-1056:0:2565
-1057:2:477
-1058:2:481
-1059:2:482
-1060:2:490
-1061:2:491
-1062:2:495
-1063:2:496
-1064:2:504
-1065:2:509
-1066:2:513
-1067:2:514
-1068:2:521
-1069:2:522
-1070:2:533
-1071:2:534
-1072:2:535
-1073:2:546
-1074:2:551
-1075:2:552
-1076:0:2565
-1077:3:2014
-1078:0:2565
-1079:3:2015
-1080:3:2019
-1081:3:2020
-1082:3:2028
-1083:3:2029
-1084:3:2033
-1085:3:2034
-1086:3:2042
-1087:3:2047
-1088:3:2051
-1089:3:2052
-1090:3:2059
-1091:3:2060
-1092:3:2071
-1093:3:2079
-1094:3:2080
-1095:3:2084
-1096:3:2089
-1097:3:2090
-1098:0:2565
-1099:3:2102
-1100:0:2565
-1101:3:2104
-1102:0:2565
-1103:3:2105
-1104:3:2109
-1105:3:2110
-1106:3:2118
-1107:3:2119
-1108:3:2123
-1109:3:2124
-1110:3:2132
-1111:3:2137
-1112:3:2141
-1113:3:2142
-1114:3:2149
-1115:3:2150
-1116:3:2161
-1117:3:2169
-1118:3:2170
-1119:3:2174
-1120:3:2179
-1121:3:2180
-1122:0:2565
-1123:3:2192
-1124:0:2565
-1125:2:564
-1126:0:2565
-1127:3:2013
-1128:0:2565
-1129:3:2014
-1130:0:2565
-1131:3:2015
-1132:3:2019
-1133:3:2020
-1134:3:2028
-1135:3:2029
-1136:3:2033
-1137:3:2034
-1138:3:2042
-1139:3:2047
-1140:3:2051
-1141:3:2052
-1142:3:2059
-1143:3:2060
-1144:3:2071
-1145:3:2079
-1146:3:2080
-1147:3:2084
-1148:3:2089
-1149:3:2090
-1150:0:2565
-1151:3:2102
-1152:0:2565
-1153:3:2104
-1154:0:2565
-1155:3:2105
-1156:3:2109
-1157:3:2110
-1158:3:2118
-1159:3:2119
-1160:3:2123
-1161:3:2124
-1162:3:2132
-1163:3:2137
-1164:3:2141
-1165:3:2142
-1166:3:2149
-1167:3:2150
-1168:3:2161
-1169:3:2169
-1170:3:2170
-1171:3:2174
-1172:3:2179
-1173:3:2180
-1174:0:2565
-1175:2:565
-1176:2:569
-1177:2:570
-1178:2:578
-1179:2:579
-1180:2:583
-1181:2:584
-1182:2:592
-1183:2:597
-1184:2:601
-1185:2:602
-1186:2:609
-1187:2:610
-1188:2:621
-1189:2:622
-1190:2:623
-1191:2:634
-1192:2:639
-1193:2:640
-1194:0:2565
-1195:3:2192
-1196:0:2565
-1197:3:2013
-1198:0:2565
-1199:2:652
-1200:0:2565
-1201:3:2014
-1202:0:2565
-1203:3:2015
-1204:3:2019
-1205:3:2020
-1206:3:2028
-1207:3:2029
-1208:3:2033
-1209:3:2034
-1210:3:2042
-1211:3:2047
-1212:3:2051
-1213:3:2052
-1214:3:2059
-1215:3:2060
-1216:3:2071
-1217:3:2079
-1218:3:2080
-1219:3:2084
-1220:3:2089
-1221:3:2090
-1222:0:2565
-1223:3:2102
-1224:0:2565
-1225:3:2104
-1226:0:2565
-1227:3:2105
-1228:3:2109
-1229:3:2110
-1230:3:2118
-1231:3:2119
-1232:3:2123
-1233:3:2124
-1234:3:2132
-1235:3:2137
-1236:3:2141
-1237:3:2142
-1238:3:2149
-1239:3:2150
-1240:3:2161
-1241:3:2169
-1242:3:2170
-1243:3:2174
-1244:3:2179
-1245:3:2180
-1246:0:2565
-1247:3:2192
-1248:0:2565
-1249:2:653
-1250:0:2565
-1251:3:2013
-1252:0:2565
-1253:3:2014
-1254:0:2565
-1255:3:2015
-1256:3:2019
-1257:3:2020
-1258:3:2028
-1259:3:2029
-1260:3:2033
-1261:3:2034
-1262:3:2042
-1263:3:2047
-1264:3:2051
-1265:3:2052
-1266:3:2059
-1267:3:2060
-1268:3:2071
-1269:3:2079
-1270:3:2080
-1271:3:2084
-1272:3:2089
-1273:3:2090
-1274:0:2565
-1275:3:2102
-1276:0:2565
-1277:3:2104
-1278:0:2565
-1279:3:2105
-1280:3:2109
-1281:3:2110
-1282:3:2118
-1283:3:2119
-1284:3:2123
-1285:3:2124
-1286:3:2132
-1287:3:2137
-1288:3:2141
-1289:3:2142
-1290:3:2149
-1291:3:2150
-1292:3:2161
-1293:3:2169
-1294:3:2170
-1295:3:2174
-1296:3:2179
-1297:3:2180
-1298:0:2565
-1299:2:654
-1300:2:658
-1301:2:659
-1302:2:667
-1303:2:668
-1304:2:672
-1305:2:673
-1306:2:681
-1307:2:686
-1308:2:690
-1309:2:691
-1310:2:698
-1311:2:699
-1312:2:710
-1313:2:711
-1314:2:712
-1315:2:723
-1316:2:728
-1317:2:729
-1318:0:2565
-1319:3:2192
-1320:0:2565
-1321:3:2013
-1322:0:2565
-1323:3:2014
-1324:0:2565
-1325:3:2015
-1326:3:2019
-1327:3:2020
-1328:3:2028
-1329:3:2029
-1330:3:2033
-1331:3:2034
-1332:3:2042
-1333:3:2047
-1334:3:2051
-1335:3:2052
-1336:3:2059
-1337:3:2060
-1338:3:2071
-1339:3:2079
-1340:3:2080
-1341:3:2084
-1342:3:2089
-1343:3:2090
-1344:0:2565
-1345:3:2102
-1346:0:2565
-1347:3:2104
-1348:0:2565
-1349:2:741
-1350:0:2565
-1351:2:750
-1352:0:2565
-1353:2:753
-1354:0:2565
-1355:3:2105
-1356:3:2109
-1357:3:2110
-1358:3:2118
-1359:3:2119
-1360:3:2123
-1361:3:2124
-1362:3:2132
-1363:3:2137
-1364:3:2141
-1365:3:2142
-1366:3:2149
-1367:3:2150
-1368:3:2161
-1369:3:2169
-1370:3:2170
-1371:3:2174
-1372:3:2179
-1373:3:2180
-1374:0:2565
-1375:3:2192
-1376:0:2565
-1377:3:2013
-1378:0:2565
-1379:3:2014
-1380:0:2565
-1381:3:2015
-1382:3:2019
-1383:3:2020
-1384:3:2028
-1385:3:2029
-1386:3:2033
-1387:3:2034
-1388:3:2042
-1389:3:2047
-1390:3:2051
-1391:3:2052
-1392:3:2059
-1393:3:2060
-1394:3:2071
-1395:3:2079
-1396:3:2080
-1397:3:2084
-1398:3:2089
-1399:3:2090
-1400:0:2565
-1401:3:2102
-1402:0:2565
-1403:2:758
-1404:0:2565
-1405:3:2104
-1406:0:2565
-1407:3:2105
-1408:3:2109
-1409:3:2110
-1410:3:2118
-1411:3:2119
-1412:3:2123
-1413:3:2124
-1414:3:2132
-1415:3:2137
-1416:3:2141
-1417:3:2142
-1418:3:2149
-1419:3:2150
-1420:3:2161
-1421:3:2169
-1422:3:2170
-1423:3:2174
-1424:3:2179
-1425:3:2180
-1426:0:2565
-1427:3:2192
-1428:0:2565
-1429:3:2013
-1430:0:2565
-1431:3:2014
-1432:0:2565
-1433:3:2015
-1434:3:2019
-1435:3:2020
-1436:3:2028
-1437:3:2029
-1438:3:2033
-1439:3:2034
-1440:3:2042
-1441:3:2047
-1442:3:2051
-1443:3:2052
-1444:3:2059
-1445:3:2060
-1446:3:2071
-1447:3:2079
-1448:3:2080
-1449:3:2084
-1450:3:2089
-1451:3:2090
-1452:0:2565
-1453:2:759
-1454:0:2565
-1455:3:2102
-1456:0:2565
-1457:3:2104
-1458:0:2565
-1459:3:2105
-1460:3:2109
-1461:3:2110
-1462:3:2118
-1463:3:2119
-1464:3:2123
-1465:3:2124
-1466:3:2132
-1467:3:2137
-1468:3:2141
-1469:3:2142
-1470:3:2149
-1471:3:2150
-1472:3:2161
-1473:3:2169
-1474:3:2170
-1475:3:2174
-1476:3:2179
-1477:3:2180
-1478:0:2565
-1479:3:2192
-1480:0:2565
-1481:3:2013
-1482:0:2565
-1483:3:2014
-1484:0:2565
-1485:2:760
-1486:0:2565
-1487:2:761
-1488:0:2565
-1489:2:762
-1490:0:2565
-1491:2:763
-1492:0:2565
-1493:3:2015
-1494:3:2019
-1495:3:2020
-1496:3:2028
-1497:3:2029
-1498:3:2033
-1499:3:2034
-1500:3:2042
-1501:3:2047
-1502:3:2051
-1503:3:2052
-1504:3:2059
-1505:3:2060
-1506:3:2071
-1507:3:2079
-1508:3:2080
-1509:3:2084
-1510:3:2089
-1511:3:2090
-1512:0:2565
-1513:3:2102
-1514:0:2565
-1515:3:2104
-1516:0:2565
-1517:3:2105
-1518:3:2109
-1519:3:2110
-1520:3:2118
-1521:3:2119
-1522:3:2123
-1523:3:2124
-1524:3:2132
-1525:3:2137
-1526:3:2141
-1527:3:2142
-1528:3:2149
-1529:3:2150
-1530:3:2161
-1531:3:2169
-1532:3:2170
-1533:3:2174
-1534:3:2179
-1535:3:2180
-1536:0:2565
-1537:3:2192
-1538:0:2565
-1539:3:2013
-1540:0:2565
-1541:2:765
-1542:0:2565
-1543:3:2014
-1544:0:2565
-1545:3:2015
-1546:3:2019
-1547:3:2020
-1548:3:2028
-1549:3:2029
-1550:3:2033
-1551:3:2034
-1552:3:2042
-1553:3:2047
-1554:3:2051
-1555:3:2052
-1556:3:2059
-1557:3:2060
-1558:3:2071
-1559:3:2079
-1560:3:2080
-1561:3:2084
-1562:3:2089
-1563:3:2090
-1564:0:2565
-1565:3:2102
-1566:0:2565
-1567:3:2104
-1568:0:2565
-1569:3:2105
-1570:3:2109
-1571:3:2110
-1572:3:2118
-1573:3:2119
-1574:3:2123
-1575:3:2124
-1576:3:2132
-1577:3:2137
-1578:3:2141
-1579:3:2142
-1580:3:2149
-1581:3:2150
-1582:3:2161
-1583:3:2169
-1584:3:2170
-1585:3:2174
-1586:3:2179
-1587:3:2180
-1588:0:2565
-1589:3:2192
-1590:0:2565
-1591:2:766
-1592:2:770
-1593:2:771
-1594:2:779
-1595:2:780
-1596:2:781
-1597:2:793
-1598:2:798
-1599:2:802
-1600:2:803
-1601:2:810
-1602:2:811
-1603:2:822
-1604:2:823
-1605:2:824
-1606:2:835
-1607:2:840
-1608:2:841
-1609:0:2565
-1610:3:2013
-1611:0:2565
-1612:3:2014
-1613:0:2565
-1614:3:2015
-1615:3:2019
-1616:3:2020
-1617:3:2028
-1618:3:2029
-1619:3:2033
-1620:3:2034
-1621:3:2042
-1622:3:2047
-1623:3:2051
-1624:3:2052
-1625:3:2059
-1626:3:2060
-1627:3:2071
-1628:3:2079
-1629:3:2080
-1630:3:2084
-1631:3:2089
-1632:3:2090
-1633:0:2565
-1634:3:2102
-1635:0:2565
-1636:3:2104
-1637:0:2565
-1638:3:2105
-1639:3:2109
-1640:3:2110
-1641:3:2118
-1642:3:2119
-1643:3:2123
-1644:3:2124
-1645:3:2132
-1646:3:2137
-1647:3:2141
-1648:3:2142
-1649:3:2149
-1650:3:2150
-1651:3:2161
-1652:3:2169
-1653:3:2170
-1654:3:2174
-1655:3:2179
-1656:3:2180
-1657:0:2565
-1658:2:853
-1659:0:2565
-1660:3:2192
-1661:0:2565
-1662:3:2013
-1663:0:2565
-1664:2:857
-1665:0:2565
-1666:2:465
-1667:0:2565
-1668:3:2014
-1669:0:2565
-1670:3:2015
-1671:3:2019
-1672:3:2020
-1673:3:2028
-1674:3:2029
-1675:3:2033
-1676:3:2034
-1677:3:2042
-1678:3:2047
-1679:3:2051
-1680:3:2052
-1681:3:2059
-1682:3:2060
-1683:3:2071
-1684:3:2079
-1685:3:2080
-1686:3:2084
-1687:3:2089
-1688:3:2090
-1689:0:2565
-1690:3:2102
-1691:0:2565
-1692:3:2104
-1693:0:2565
-1694:3:2105
-1695:3:2109
-1696:3:2110
-1697:3:2118
-1698:3:2119
-1699:3:2123
-1700:3:2124
-1701:3:2132
-1702:3:2137
-1703:3:2141
-1704:3:2142
-1705:3:2149
-1706:3:2150
-1707:3:2161
-1708:3:2169
-1709:3:2170
-1710:3:2174
-1711:3:2179
-1712:3:2180
-1713:0:2565
-1714:3:2192
-1715:0:2565
-1716:2:466
-1717:0:2565
-1718:3:2013
-1719:0:2565
-1720:3:2014
-1721:0:2565
-1722:3:2015
-1723:3:2019
-1724:3:2020
-1725:3:2028
-1726:3:2029
-1727:3:2033
-1728:3:2034
-1729:3:2042
-1730:3:2047
-1731:3:2051
-1732:3:2052
-1733:3:2059
-1734:3:2060
-1735:3:2071
-1736:3:2079
-1737:3:2080
-1738:3:2084
-1739:3:2089
-1740:3:2090
-1741:0:2565
-1742:3:2102
-1743:0:2565
-1744:3:2104
-1745:0:2565
-1746:3:2105
-1747:3:2109
-1748:3:2110
-1749:3:2118
-1750:3:2119
-1751:3:2123
-1752:3:2124
-1753:3:2132
-1754:3:2137
-1755:3:2141
-1756:3:2142
-1757:3:2149
-1758:3:2150
-1759:3:2161
-1760:3:2169
-1761:3:2170
-1762:3:2174
-1763:3:2179
-1764:3:2180
-1765:0:2565
-1766:2:467
-1767:0:2565
-1768:3:2192
-1769:0:2565
-1770:3:2013
-1771:0:2565
-1772:3:2014
-1773:0:2565
-1774:3:2015
-1775:3:2019
-1776:3:2020
-1777:3:2028
-1778:3:2029
-1779:3:2033
-1780:3:2034
-1781:3:2042
-1782:3:2047
-1783:3:2051
-1784:3:2052
-1785:3:2059
-1786:3:2060
-1787:3:2071
-1788:3:2079
-1789:3:2080
-1790:3:2084
-1791:3:2089
-1792:3:2090
-1793:0:2565
-1794:3:2102
-1795:0:2565
-1796:3:2104
-1797:0:2565
-1798:1:199
-1799:0:2565
-1800:2:468
-1801:0:2565
-1802:1:205
-1803:0:2565
-1804:3:2105
-1805:3:2109
-1806:3:2110
-1807:3:2118
-1808:3:2119
-1809:3:2123
-1810:3:2124
-1811:3:2132
-1812:3:2137
-1813:3:2141
-1814:3:2142
-1815:3:2149
-1816:3:2150
-1817:3:2161
-1818:3:2169
-1819:3:2170
-1820:3:2174
-1821:3:2179
-1822:3:2180
-1823:0:2565
-1824:3:2192
-1825:0:2565
-1826:3:2013
-1827:0:2565
-1828:3:2014
-1829:0:2565
-1830:3:2015
-1831:3:2019
-1832:3:2020
-1833:3:2028
-1834:3:2029
-1835:3:2033
-1836:3:2034
-1837:3:2042
-1838:3:2047
-1839:3:2051
-1840:3:2052
-1841:3:2059
-1842:3:2060
-1843:3:2071
-1844:3:2079
-1845:3:2080
-1846:3:2084
-1847:3:2089
-1848:3:2090
-1849:0:2565
-1850:3:2102
-1851:0:2565
-1852:3:2104
-1853:0:2565
-1854:2:467
-1855:0:2565
-1856:2:468
-1857:0:2565
-1858:3:2105
-1859:3:2109
-1860:3:2110
-1861:3:2118
-1862:3:2119
-1863:3:2123
-1864:3:2124
-1865:3:2132
-1866:3:2137
-1867:3:2141
-1868:3:2142
-1869:3:2149
-1870:3:2150
-1871:3:2161
-1872:3:2169
-1873:3:2170
-1874:3:2174
-1875:3:2179
-1876:3:2180
-1877:0:2565
-1878:3:2192
-1879:0:2565
-1880:3:2013
-1881:0:2565
-1882:3:2014
-1883:0:2565
-1884:3:2015
-1885:3:2019
-1886:3:2020
-1887:3:2028
-1888:3:2029
-1889:3:2033
-1890:3:2034
-1891:3:2042
-1892:3:2047
-1893:3:2051
-1894:3:2052
-1895:3:2059
-1896:3:2060
-1897:3:2071
-1898:3:2079
-1899:3:2080
-1900:3:2084
-1901:3:2089
-1902:3:2090
-1903:0:2565
-1904:3:2102
-1905:0:2565
-1906:2:467
-1907:0:2565
-1908:1:206
-1909:0:2565
-1910:2:468
-1911:0:2565
-1912:3:2104
-1913:0:2565
-1914:3:2105
-1915:3:2109
-1916:3:2110
-1917:3:2118
-1918:3:2119
-1919:3:2123
-1920:3:2124
-1921:3:2132
-1922:3:2137
-1923:3:2141
-1924:3:2142
-1925:3:2149
-1926:3:2150
-1927:3:2161
-1928:3:2169
-1929:3:2170
-1930:3:2174
-1931:3:2179
-1932:3:2180
-1933:0:2565
-1934:3:2192
-1935:0:2565
-1936:3:2013
-1937:0:2565
-1938:3:2014
--1:-1:-1
-1939:0:2565
-1940:3:2015
-1941:3:2019
-1942:3:2020
-1943:3:2028
-1944:3:2029
-1945:3:2033
-1946:3:2034
-1947:3:2042
-1948:3:2047
-1949:3:2051
-1950:3:2052
-1951:3:2059
-1952:3:2060
-1953:3:2071
-1954:3:2079
-1955:3:2080
-1956:3:2084
-1957:3:2089
-1958:3:2090
-1959:0:2565
-1960:3:2102
-1961:0:2565
-1962:2:467
-1963:0:2565
-1964:2:468
-1965:0:2565
-1966:3:2104
-1967:0:2565
-1968:3:2105
-1969:3:2109
-1970:3:2110
-1971:3:2118
-1972:3:2119
-1973:3:2123
-1974:3:2124
-1975:3:2132
-1976:3:2137
-1977:3:2141
-1978:3:2142
-1979:3:2149
-1980:3:2150
-1981:3:2161
-1982:3:2169
-1983:3:2170
-1984:3:2174
-1985:3:2179
-1986:3:2180
-1987:0:2565
-1988:3:2192
-1989:0:2565
-1990:3:2013
-1991:0:2565
-1992:3:2014
-1993:0:2565
-1994:3:2015
-1995:3:2019
-1996:3:2020
-1997:3:2028
-1998:3:2029
-1999:3:2033
-2000:3:2034
-2001:3:2042
-2002:3:2047
-2003:3:2051
-2004:3:2052
-2005:3:2059
-2006:3:2060
-2007:3:2071
-2008:3:2079
-2009:3:2080
-2010:3:2084
-2011:3:2089
-2012:3:2090
-2013:0:2565
-2014:2:467
-2015:0:2565
-2016:1:207
-2017:1:211
-2018:1:212
-2019:1:220
-2020:1:221
-2021:1:222
-2022:1:234
-2023:1:239
-2024:1:243
-2025:1:244
-2026:1:251
-2027:1:252
-2028:1:263
-2029:1:264
-2030:1:265
-2031:1:276
-2032:1:281
-2033:1:282
-2034:0:2565
-2035:3:2102
-2036:0:2565
-2037:2:468
-2038:0:2565
-2039:3:2104
-2040:0:2565
-2041:3:2105
-2042:3:2109
-2043:3:2110
-2044:3:2118
-2045:3:2119
-2046:3:2123
-2047:3:2124
-2048:3:2132
-2049:3:2137
-2050:3:2141
-2051:3:2142
-2052:3:2149
-2053:3:2150
-2054:3:2161
-2055:3:2169
-2056:3:2170
-2057:3:2174
-2058:3:2179
-2059:3:2180
-2060:0:2565
-2061:3:2192
-2062:0:2565
-2063:3:2013
-2064:0:2565
-2065:3:2014
-2066:0:2565
-2067:3:2015
-2068:3:2019
-2069:3:2020
-2070:3:2028
-2071:3:2029
-2072:3:2033
-2073:3:2034
-2074:3:2042
-2075:3:2047
-2076:3:2051
-2077:3:2052
-2078:3:2059
-2079:3:2060
-2080:3:2071
-2081:3:2079
-2082:3:2080
-2083:3:2084
-2084:3:2089
-2085:3:2090
-2086:0:2565
-2087:2:467
-2088:0:2565
-2089:3:2102
-2090:0:2565
-2091:3:2104
-2092:0:2565
-2093:3:2105
-2094:3:2109
-2095:3:2110
-2096:3:2118
-2097:3:2119
-2098:3:2123
-2099:3:2124
-2100:3:2132
-2101:3:2137
-2102:3:2141
-2103:3:2142
-2104:3:2149
-2105:3:2150
-2106:3:2161
-2107:3:2169
-2108:3:2170
-2109:3:2174
-2110:3:2179
-2111:3:2180
-2112:0:2565
-2113:3:2192
-2114:0:2565
-2115:3:2013
-2116:0:2565
-2117:3:2014
-2118:0:2565
-2119:1:294
-2120:0:2565
-2121:2:468
-2122:0:2565
-2123:3:2015
-2124:3:2019
-2125:3:2020
-2126:3:2028
-2127:3:2029
-2128:3:2033
-2129:3:2034
-2130:3:2042
-2131:3:2047
-2132:3:2051
-2133:3:2052
-2134:3:2059
-2135:3:2060
-2136:3:2071
-2137:3:2079
-2138:3:2080
-2139:3:2084
-2140:3:2089
-2141:3:2090
-2142:0:2565
-2143:3:2102
-2144:0:2565
-2145:3:2104
-2146:0:2565
-2147:3:2105
-2148:3:2109
-2149:3:2110
-2150:3:2118
-2151:3:2119
-2152:3:2123
-2153:3:2124
-2154:3:2132
-2155:3:2137
-2156:3:2141
-2157:3:2142
-2158:3:2149
-2159:3:2150
-2160:3:2161
-2161:3:2169
-2162:3:2170
-2163:3:2174
-2164:3:2179
-2165:3:2180
-2166:0:2565
-2167:3:2192
-2168:0:2565
-2169:3:2013
-2170:0:2565
-2171:3:2014
-2172:0:2565
-2173:2:469
-2174:0:2565
-2175:2:475
-2176:0:2565
-2177:2:476
-2178:0:2565
-2179:3:2015
-2180:3:2019
-2181:3:2020
-2182:3:2028
-2183:3:2029
-2184:3:2033
-2185:3:2034
-2186:3:2042
-2187:3:2047
-2188:3:2051
-2189:3:2052
-2190:3:2059
-2191:3:2060
-2192:3:2071
-2193:3:2079
-2194:3:2080
-2195:3:2084
-2196:3:2089
-2197:3:2090
-2198:0:2565
-2199:3:2102
-2200:0:2565
-2201:3:2104
-2202:0:2565
-2203:3:2105
-2204:3:2109
-2205:3:2110
-2206:3:2118
-2207:3:2119
-2208:3:2123
-2209:3:2124
-2210:3:2132
-2211:3:2137
-2212:3:2141
-2213:3:2142
-2214:3:2149
-2215:3:2150
-2216:3:2161
-2217:3:2169
-2218:3:2170
-2219:3:2174
-2220:3:2179
-2221:3:2180
-2222:0:2565
-2223:3:2192
-2224:0:2565
-2225:3:2013
-2226:0:2565
-2227:2:477
-2228:2:481
-2229:2:482
-2230:2:490
-2231:2:491
-2232:2:495
-2233:2:496
-2234:2:504
-2235:2:509
-2236:2:513
-2237:2:514
-2238:2:521
-2239:2:522
-2240:2:533
-2241:2:534
-2242:2:535
-2243:2:546
-2244:2:551
-2245:2:552
-2246:0:2565
-2247:3:2014
-2248:0:2565
-2249:3:2015
-2250:3:2019
-2251:3:2020
-2252:3:2028
-2253:3:2029
-2254:3:2033
-2255:3:2034
-2256:3:2042
-2257:3:2047
-2258:3:2051
-2259:3:2052
-2260:3:2059
-2261:3:2060
-2262:3:2071
-2263:3:2079
-2264:3:2080
-2265:3:2084
-2266:3:2089
-2267:3:2090
-2268:0:2565
-2269:3:2102
-2270:0:2565
-2271:3:2104
-2272:0:2565
-2273:3:2105
-2274:3:2109
-2275:3:2110
-2276:3:2118
-2277:3:2119
-2278:3:2123
-2279:3:2124
-2280:3:2132
-2281:3:2137
-2282:3:2141
-2283:3:2142
-2284:3:2149
-2285:3:2150
-2286:3:2161
-2287:3:2169
-2288:3:2170
-2289:3:2174
-2290:3:2179
-2291:3:2180
-2292:0:2565
-2293:3:2192
-2294:0:2565
-2295:2:564
-2296:0:2565
-2297:3:2013
-2298:0:2565
-2299:3:2014
-2300:0:2565
-2301:3:2015
-2302:3:2019
-2303:3:2020
-2304:3:2028
-2305:3:2029
-2306:3:2033
-2307:3:2034
-2308:3:2042
-2309:3:2047
-2310:3:2051
-2311:3:2052
-2312:3:2059
-2313:3:2060
-2314:3:2071
-2315:3:2079
-2316:3:2080
-2317:3:2084
-2318:3:2089
-2319:3:2090
-2320:0:2565
-2321:3:2102
-2322:0:2565
-2323:3:2104
-2324:0:2565
-2325:3:2105
-2326:3:2109
-2327:3:2110
-2328:3:2118
-2329:3:2119
-2330:3:2123
-2331:3:2124
-2332:3:2132
-2333:3:2137
-2334:3:2141
-2335:3:2142
-2336:3:2149
-2337:3:2150
-2338:3:2161
-2339:3:2169
-2340:3:2170
-2341:3:2174
-2342:3:2179
-2343:3:2180
-2344:0:2565
-2345:2:565
-2346:2:569
-2347:2:570
-2348:2:578
-2349:2:579
-2350:2:583
-2351:2:584
-2352:2:592
-2353:2:597
-2354:2:601
-2355:2:602
-2356:2:609
-2357:2:610
-2358:2:621
-2359:2:622
-2360:2:623
-2361:2:634
-2362:2:639
-2363:2:640
-2364:0:2565
-2365:3:2192
-2366:0:2565
-2367:3:2013
-2368:0:2565
-2369:2:652
-2370:0:2565
-2371:3:2014
-2372:0:2565
-2373:3:2015
-2374:3:2019
-2375:3:2020
-2376:3:2028
-2377:3:2029
-2378:3:2033
-2379:3:2034
-2380:3:2042
-2381:3:2047
-2382:3:2051
-2383:3:2052
-2384:3:2059
-2385:3:2060
-2386:3:2071
-2387:3:2079
-2388:3:2080
-2389:3:2084
-2390:3:2089
-2391:3:2090
-2392:0:2565
-2393:3:2102
-2394:0:2565
-2395:3:2104
-2396:0:2565
-2397:3:2105
-2398:3:2109
-2399:3:2110
-2400:3:2118
-2401:3:2119
-2402:3:2123
-2403:3:2124
-2404:3:2132
-2405:3:2137
-2406:3:2141
-2407:3:2142
-2408:3:2149
-2409:3:2150
-2410:3:2161
-2411:3:2169
-2412:3:2170
-2413:3:2174
-2414:3:2179
-2415:3:2180
-2416:0:2565
-2417:3:2192
-2418:0:2565
-2419:2:653
-2420:0:2565
-2421:3:2013
-2422:0:2565
-2423:3:2014
-2424:0:2565
-2425:3:2015
-2426:3:2019
-2427:3:2020
-2428:3:2028
-2429:3:2029
-2430:3:2033
-2431:3:2034
-2432:3:2042
-2433:3:2047
-2434:3:2051
-2435:3:2052
-2436:3:2059
-2437:3:2060
-2438:3:2071
-2439:3:2079
-2440:3:2080
-2441:3:2084
-2442:3:2089
-2443:3:2090
-2444:0:2565
-2445:3:2102
-2446:0:2565
-2447:3:2104
-2448:0:2565
-2449:3:2105
-2450:3:2109
-2451:3:2110
-2452:3:2118
-2453:3:2119
-2454:3:2123
-2455:3:2124
-2456:3:2132
-2457:3:2137
-2458:3:2141
-2459:3:2142
-2460:3:2149
-2461:3:2150
-2462:3:2161
-2463:3:2169
-2464:3:2170
-2465:3:2174
-2466:3:2179
-2467:3:2180
-2468:0:2565
-2469:2:654
-2470:2:658
-2471:2:659
-2472:2:667
-2473:2:668
-2474:2:672
-2475:2:673
-2476:2:681
-2477:2:686
-2478:2:690
-2479:2:691
-2480:2:698
-2481:2:699
-2482:2:710
-2483:2:711
-2484:2:712
-2485:2:723
-2486:2:728
-2487:2:729
-2488:0:2565
-2489:3:2192
-2490:0:2565
-2491:3:2013
-2492:0:2565
-2493:3:2014
-2494:0:2565
-2495:3:2015
-2496:3:2019
-2497:3:2020
-2498:3:2028
-2499:3:2029
-2500:3:2033
-2501:3:2034
-2502:3:2042
-2503:3:2047
-2504:3:2051
-2505:3:2052
-2506:3:2059
-2507:3:2060
-2508:3:2071
-2509:3:2079
-2510:3:2080
-2511:3:2084
-2512:3:2089
-2513:3:2090
-2514:0:2565
-2515:3:2102
-2516:0:2565
-2517:3:2104
-2518:0:2565
-2519:2:741
-2520:0:2565
-2521:2:750
-2522:0:2565
-2523:2:753
-2524:0:2565
-2525:3:2105
-2526:3:2109
-2527:3:2110
-2528:3:2118
-2529:3:2119
-2530:3:2123
-2531:3:2124
-2532:3:2132
-2533:3:2137
-2534:3:2141
-2535:3:2142
-2536:3:2149
-2537:3:2150
-2538:3:2161
-2539:3:2169
-2540:3:2170
-2541:3:2174
-2542:3:2179
-2543:3:2180
-2544:0:2565
-2545:3:2192
-2546:0:2565
-2547:3:2013
-2548:0:2565
-2549:3:2014
-2550:0:2565
-2551:3:2015
-2552:3:2019
-2553:3:2020
-2554:3:2028
-2555:3:2029
-2556:3:2033
-2557:3:2034
-2558:3:2042
-2559:3:2047
-2560:3:2051
-2561:3:2052
-2562:3:2059
-2563:3:2060
-2564:3:2071
-2565:3:2079
-2566:3:2080
-2567:3:2084
-2568:3:2089
-2569:3:2090
-2570:0:2565
-2571:3:2102
-2572:0:2565
-2573:2:758
-2574:0:2565
-2575:3:2104
-2576:0:2565
-2577:3:2105
-2578:3:2109
-2579:3:2110
-2580:3:2118
-2581:3:2119
-2582:3:2123
-2583:3:2124
-2584:3:2132
-2585:3:2137
-2586:3:2141
-2587:3:2142
-2588:3:2149
-2589:3:2150
-2590:3:2161
-2591:3:2169
-2592:3:2170
-2593:3:2174
-2594:3:2179
-2595:3:2180
-2596:0:2565
-2597:3:2192
-2598:0:2565
-2599:3:2013
-2600:0:2565
-2601:3:2014
-2602:0:2565
-2603:3:2015
-2604:3:2019
-2605:3:2020
-2606:3:2028
-2607:3:2029
-2608:3:2033
-2609:3:2034
-2610:3:2042
-2611:3:2047
-2612:3:2051
-2613:3:2052
-2614:3:2059
-2615:3:2060
-2616:3:2071
-2617:3:2079
-2618:3:2080
-2619:3:2084
-2620:3:2089
-2621:3:2090
-2622:0:2565
-2623:2:759
-2624:0:2565
-2625:3:2102
-2626:0:2565
-2627:3:2104
-2628:0:2565
-2629:3:2105
-2630:3:2109
-2631:3:2110
-2632:3:2118
-2633:3:2119
-2634:3:2123
-2635:3:2124
-2636:3:2132
-2637:3:2137
-2638:3:2141
-2639:3:2142
-2640:3:2149
-2641:3:2150
-2642:3:2161
-2643:3:2169
-2644:3:2170
-2645:3:2174
-2646:3:2179
-2647:3:2180
-2648:0:2565
-2649:3:2192
-2650:0:2565
-2651:3:2013
-2652:0:2565
-2653:3:2014
-2654:0:2565
-2655:2:760
-2656:0:2565
-2657:2:761
-2658:0:2565
-2659:2:762
-2660:0:2565
-2661:2:763
-2662:0:2565
-2663:3:2015
-2664:3:2019
-2665:3:2020
-2666:3:2028
-2667:3:2029
-2668:3:2033
-2669:3:2034
-2670:3:2042
-2671:3:2047
-2672:3:2051
-2673:3:2052
-2674:3:2059
-2675:3:2060
-2676:3:2071
-2677:3:2079
-2678:3:2080
-2679:3:2084
-2680:3:2089
-2681:3:2090
-2682:0:2565
-2683:3:2102
-2684:0:2565
-2685:3:2104
-2686:0:2565
-2687:3:2105
-2688:3:2109
-2689:3:2110
-2690:3:2118
-2691:3:2119
-2692:3:2123
-2693:3:2124
-2694:3:2132
-2695:3:2137
-2696:3:2141
-2697:3:2142
-2698:3:2149
-2699:3:2150
-2700:3:2161
-2701:3:2169
-2702:3:2170
-2703:3:2174
-2704:3:2179
-2705:3:2180
-2706:0:2565
-2707:3:2192
-2708:0:2565
-2709:3:2013
-2710:0:2565
-2711:2:765
-2712:0:2565
-2713:3:2014
-2714:0:2565
-2715:3:2015
-2716:3:2019
-2717:3:2020
-2718:3:2028
-2719:3:2029
-2720:3:2033
-2721:3:2034
-2722:3:2042
-2723:3:2047
-2724:3:2051
-2725:3:2052
-2726:3:2059
-2727:3:2060
-2728:3:2071
-2729:3:2079
-2730:3:2080
-2731:3:2084
-2732:3:2089
-2733:3:2090
-2734:0:2565
-2735:3:2102
-2736:0:2565
-2737:3:2104
-2738:0:2565
-2739:3:2105
-2740:3:2109
-2741:3:2110
-2742:3:2118
-2743:3:2119
-2744:3:2123
-2745:3:2124
-2746:3:2132
-2747:3:2137
-2748:3:2141
-2749:3:2142
-2750:3:2149
-2751:3:2150
-2752:3:2161
-2753:3:2169
-2754:3:2170
-2755:3:2174
-2756:3:2179
-2757:3:2180
-2758:0:2565
-2759:3:2192
-2760:0:2565
-2761:2:766
-2762:2:770
-2763:2:771
-2764:2:779
-2765:2:780
-2766:2:781
-2767:2:793
-2768:2:798
-2769:2:802
-2770:2:803
-2771:2:810
-2772:2:811
-2773:2:822
-2774:2:823
-2775:2:824
-2776:2:835
-2777:2:840
-2778:2:841
-2779:0:2565
-2780:3:2013
-2781:0:2565
-2782:3:2014
-2783:0:2565
-2784:3:2015
-2785:3:2019
-2786:3:2020
-2787:3:2028
-2788:3:2029
-2789:3:2033
-2790:3:2034
-2791:3:2042
-2792:3:2047
-2793:3:2051
-2794:3:2052
-2795:3:2059
-2796:3:2060
-2797:3:2071
-2798:3:2079
-2799:3:2080
-2800:3:2084
-2801:3:2089
-2802:3:2090
-2803:0:2565
-2804:3:2102
-2805:0:2565
-2806:3:2104
-2807:0:2565
-2808:3:2105
-2809:3:2109
-2810:3:2110
-2811:3:2118
-2812:3:2119
-2813:3:2123
-2814:3:2124
-2815:3:2132
-2816:3:2137
-2817:3:2141
-2818:3:2142
-2819:3:2149
-2820:3:2150
-2821:3:2161
-2822:3:2169
-2823:3:2170
-2824:3:2174
-2825:3:2179
-2826:3:2180
-2827:0:2565
-2828:2:853
-2829:0:2565
-2830:3:2192
-2831:0:2565
-2832:3:2013
-2833:0:2565
-2834:2:857
-2835:0:2565
-2836:2:465
-2837:0:2565
-2838:3:2014
-2839:0:2565
-2840:3:2015
-2841:3:2019
-2842:3:2020
-2843:3:2028
-2844:3:2029
-2845:3:2033
-2846:3:2034
-2847:3:2042
-2848:3:2047
-2849:3:2051
-2850:3:2052
-2851:3:2059
-2852:3:2060
-2853:3:2071
-2854:3:2079
-2855:3:2080
-2856:3:2084
-2857:3:2089
-2858:3:2090
-2859:0:2565
-2860:3:2102
-2861:0:2565
-2862:3:2104
-2863:0:2565
-2864:3:2105
-2865:3:2109
-2866:3:2110
-2867:3:2118
-2868:3:2119
-2869:3:2123
-2870:3:2124
-2871:3:2132
-2872:3:2137
-2873:3:2141
-2874:3:2142
-2875:3:2149
-2876:3:2150
-2877:3:2161
-2878:3:2169
-2879:3:2170
-2880:3:2174
-2881:3:2179
-2882:3:2180
-2883:0:2565
-2884:3:2192
-2885:0:2565
-2886:2:466
-2887:0:2565
-2888:3:2013
-2889:0:2565
-2890:3:2014
-2891:0:2565
-2892:3:2015
-2893:3:2019
-2894:3:2020
-2895:3:2028
-2896:3:2029
-2897:3:2033
-2898:3:2034
-2899:3:2042
-2900:3:2047
-2901:3:2051
-2902:3:2052
-2903:3:2059
-2904:3:2060
-2905:3:2071
-2906:3:2079
-2907:3:2080
-2908:3:2084
-2909:3:2089
-2910:3:2090
-2911:0:2565
-2912:3:2102
-2913:0:2565
-2914:3:2104
-2915:0:2565
-2916:3:2105
-2917:3:2109
-2918:3:2110
-2919:3:2118
-2920:3:2119
-2921:3:2123
-2922:3:2124
-2923:3:2132
-2924:3:2137
-2925:3:2141
-2926:3:2142
-2927:3:2149
-2928:3:2150
-2929:3:2161
-2930:3:2169
-2931:3:2170
-2932:3:2174
-2933:3:2179
-2934:3:2180
-2935:0:2565
-2936:2:467
-2937:0:2565
-2938:3:2192
-2939:0:2565
-2940:3:2013
-2941:0:2565
-2942:3:2014
-2943:0:2565
-2944:3:2015
-2945:3:2019
-2946:3:2020
-2947:3:2028
-2948:3:2029
-2949:3:2033
-2950:3:2034
-2951:3:2042
-2952:3:2047
-2953:3:2051
-2954:3:2052
-2955:3:2059
-2956:3:2060
-2957:3:2071
-2958:3:2079
-2959:3:2080
-2960:3:2084
-2961:3:2089
-2962:3:2090
-2963:0:2565
-2964:3:2102
-2965:0:2565
-2966:3:2104
-2967:0:2565
-2968:1:297
-2969:0:2565
-2970:2:468
-2971:0:2565
-2972:3:2105
-2973:3:2109
-2974:3:2110
-2975:3:2118
-2976:3:2119
-2977:3:2123
-2978:3:2124
-2979:3:2132
-2980:3:2137
-2981:3:2141
-2982:3:2142
-2983:3:2149
-2984:3:2150
-2985:3:2161
-2986:3:2169
-2987:3:2170
-2988:3:2174
-2989:3:2179
-2990:3:2180
-2991:0:2565
-2992:3:2192
-2993:0:2565
-2994:3:2013
-2995:0:2565
-2996:3:2014
-2997:0:2565
-2998:3:2015
-2999:3:2019
-3000:3:2020
-3001:3:2028
-3002:3:2029
-3003:3:2033
-3004:3:2034
-3005:3:2042
-3006:3:2047
-3007:3:2051
-3008:3:2052
-3009:3:2059
-3010:3:2060
-3011:3:2071
-3012:3:2079
-3013:3:2080
-3014:3:2084
-3015:3:2089
-3016:3:2090
-3017:0:2565
-3018:3:2102
-3019:0:2565
-3020:3:2104
-3021:0:2565
-3022:2:467
-3023:0:2565
-3024:2:468
-3025:0:2565
-3026:3:2105
-3027:3:2109
-3028:3:2110
-3029:3:2118
-3030:3:2119
-3031:3:2123
-3032:3:2124
-3033:3:2132
-3034:3:2137
-3035:3:2141
-3036:3:2142
-3037:3:2149
-3038:3:2150
-3039:3:2161
-3040:3:2169
-3041:3:2170
-3042:3:2174
-3043:3:2179
-3044:3:2180
-3045:0:2565
-3046:3:2192
-3047:0:2565
-3048:3:2013
-3049:0:2565
-3050:3:2014
-3051:0:2565
-3052:3:2015
-3053:3:2019
-3054:3:2020
-3055:3:2028
-3056:3:2029
-3057:3:2033
-3058:3:2034
-3059:3:2042
-3060:3:2047
-3061:3:2051
-3062:3:2052
-3063:3:2059
-3064:3:2060
-3065:3:2071
-3066:3:2079
-3067:3:2080
-3068:3:2084
-3069:3:2089
-3070:3:2090
-3071:0:2565
-3072:3:2102
-3073:0:2565
-3074:2:467
-3075:0:2565
-3076:1:303
-3077:0:2565
-3078:2:468
-3079:0:2565
-3080:1:312
-3081:0:2565
-3082:3:2104
-3083:0:2565
-3084:3:2105
-3085:3:2109
-3086:3:2110
-3087:3:2118
-3088:3:2119
-3089:3:2123
-3090:3:2124
-3091:3:2132
-3092:3:2137
-3093:3:2141
-3094:3:2142
-3095:3:2149
-3096:3:2150
-3097:3:2161
-3098:3:2169
-3099:3:2170
-3100:3:2174
-3101:3:2179
-3102:3:2180
-3103:0:2565
-3104:3:2192
-3105:0:2565
-3106:3:2013
-3107:0:2565
-3108:3:2014
-3109:0:2565
-3110:3:2015
-3111:3:2019
-3112:3:2020
-3113:3:2028
-3114:3:2029
-3115:3:2033
-3116:3:2034
-3117:3:2042
-3118:3:2047
-3119:3:2051
-3120:3:2052
-3121:3:2059
-3122:3:2060
-3123:3:2071
-3124:3:2079
-3125:3:2080
-3126:3:2084
-3127:3:2089
-3128:3:2090
-3129:0:2565
-3130:3:2102
-3131:0:2565
-3132:2:467
-3133:0:2565
-3134:2:468
-3135:0:2565
-3136:3:2104
-3137:0:2565
-3138:3:2105
-3139:3:2109
-3140:3:2110
-3141:3:2118
-3142:3:2119
-3143:3:2123
-3144:3:2124
-3145:3:2132
-3146:3:2137
-3147:3:2141
-3148:3:2142
-3149:3:2149
-3150:3:2150
-3151:3:2161
-3152:3:2169
-3153:3:2170
-3154:3:2174
-3155:3:2179
-3156:3:2180
-3157:0:2565
-3158:3:2192
-3159:0:2565
-3160:3:2013
-3161:0:2565
-3162:3:2014
-3163:0:2565
-3164:3:2015
-3165:3:2019
-3166:3:2020
-3167:3:2028
-3168:3:2029
-3169:3:2033
-3170:3:2034
-3171:3:2042
-3172:3:2047
-3173:3:2051
-3174:3:2052
-3175:3:2059
-3176:3:2060
-3177:3:2071
-3178:3:2079
-3179:3:2080
-3180:3:2084
-3181:3:2089
-3182:3:2090
-3183:0:2565
-3184:2:467
-3185:0:2565
-3186:1:314
-3187:0:2565
-3188:3:2102
-3189:0:2565
-3190:2:468
-3191:0:2565
-3192:3:2104
-3193:0:2565
-3194:3:2105
-3195:3:2109
-3196:3:2110
-3197:3:2118
-3198:3:2119
-3199:3:2123
-3200:3:2124
-3201:3:2132
-3202:3:2137
-3203:3:2141
-3204:3:2142
-3205:3:2149
-3206:3:2150
-3207:3:2161
-3208:3:2169
-3209:3:2170
-3210:3:2174
-3211:3:2179
-3212:3:2180
-3213:0:2565
-3214:3:2192
-3215:0:2565
-3216:3:2013
-3217:0:2565
-3218:3:2014
-3219:0:2565
-3220:3:2015
-3221:3:2019
-3222:3:2020
-3223:3:2028
-3224:3:2029
-3225:3:2033
-3226:3:2034
-3227:3:2042
-3228:3:2047
-3229:3:2051
-3230:3:2052
-3231:3:2059
-3232:3:2060
-3233:3:2071
-3234:3:2079
-3235:3:2080
-3236:3:2084
-3237:3:2089
-3238:3:2090
-3239:0:2565
-3240:2:469
-3241:0:2565
-3242:3:2102
-3243:0:2565
-3244:2:475
-3245:0:2565
-3246:2:476
-3247:0:2565
-3248:3:2104
-3249:0:2565
-3250:3:2105
-3251:3:2109
-3252:3:2110
-3253:3:2118
-3254:3:2119
-3255:3:2123
-3256:3:2124
-3257:3:2132
-3258:3:2137
-3259:3:2141
-3260:3:2142
-3261:3:2149
-3262:3:2150
-3263:3:2161
-3264:3:2169
-3265:3:2170
-3266:3:2174
-3267:3:2179
-3268:3:2180
-3269:0:2565
-3270:3:2192
-3271:0:2565
-3272:3:2013
-3273:0:2565
-3274:3:2014
-3275:0:2565
-3276:3:2015
-3277:3:2019
-3278:3:2020
-3279:3:2028
-3280:3:2029
-3281:3:2033
-3282:3:2034
-3283:3:2042
-3284:3:2047
-3285:3:2051
-3286:3:2052
-3287:3:2059
-3288:3:2060
-3289:3:2071
-3290:3:2079
-3291:3:2080
-3292:3:2084
-3293:3:2089
-3294:3:2090
-3295:0:2565
-3296:2:477
-3297:2:481
-3298:2:482
-3299:2:490
-3300:2:491
-3301:2:492
-3302:2:504
-3303:2:509
-3304:2:513
-3305:2:514
-3306:2:521
-3307:2:522
-3308:2:533
-3309:2:534
-3310:2:535
-3311:2:546
-3312:2:551
-3313:2:552
-3314:0:2565
-3315:3:2102
-3316:0:2565
-3317:3:2104
-3318:0:2565
-3319:3:2105
-3320:3:2109
-3321:3:2110
-3322:3:2118
-3323:3:2119
-3324:3:2123
-3325:3:2124
-3326:3:2132
-3327:3:2137
-3328:3:2141
-3329:3:2142
-3330:3:2149
-3331:3:2150
-3332:3:2161
-3333:3:2169
-3334:3:2170
-3335:3:2174
-3336:3:2179
-3337:3:2180
-3338:0:2565
-3339:3:2192
-3340:0:2565
-3341:3:2013
-3342:0:2565
-3343:3:2014
-3344:0:2565
-3345:2:564
-3346:0:2565
-3347:3:2015
-3348:3:2019
-3349:3:2020
-3350:3:2028
-3351:3:2029
-3352:3:2033
-3353:3:2034
-3354:3:2042
-3355:3:2047
-3356:3:2051
-3357:3:2052
-3358:3:2059
-3359:3:2060
-3360:3:2071
-3361:3:2079
-3362:3:2080
-3363:3:2084
-3364:3:2089
-3365:3:2090
-3366:0:2565
-3367:3:2102
-3368:0:2565
-3369:3:2104
-3370:0:2565
-3371:3:2105
-3372:3:2109
-3373:3:2110
-3374:3:2118
-3375:3:2119
-3376:3:2123
-3377:3:2124
-3378:3:2132
-3379:3:2137
-3380:3:2141
-3381:3:2142
-3382:3:2149
-3383:3:2150
-3384:3:2161
-3385:3:2169
-3386:3:2170
-3387:3:2174
-3388:3:2179
-3389:3:2180
-3390:0:2565
-3391:3:2192
-3392:0:2565
-3393:3:2013
-3394:0:2565
-3395:2:565
-3396:2:569
-3397:2:570
-3398:2:578
-3399:2:579
-3400:2:583
-3401:2:584
-3402:2:592
-3403:2:597
-3404:2:601
-3405:2:602
-3406:2:609
-3407:2:610
-3408:2:621
-3409:2:622
-3410:2:623
-3411:2:634
-3412:2:639
-3413:2:640
-3414:0:2565
-3415:2:744
-3416:0:2565
-3417:3:2014
-3418:0:2565
-3419:3:2015
-3420:3:2019
-3421:3:2020
-3422:3:2028
-3423:3:2029
-3424:3:2033
-3425:3:2034
-3426:3:2042
-3427:3:2047
-3428:3:2051
-3429:3:2052
-3430:3:2059
-3431:3:2060
-3432:3:2071
-3433:3:2079
-3434:3:2080
-3435:3:2084
-3436:3:2089
-3437:3:2090
-3438:0:2565
-3439:3:2102
-3440:0:2565
-3441:3:2104
-3442:0:2565
-3443:3:2105
-3444:3:2109
-3445:3:2110
-3446:3:2118
-3447:3:2119
-3448:3:2123
-3449:3:2124
-3450:3:2132
-3451:3:2137
-3452:3:2141
-3453:3:2142
-3454:3:2149
-3455:3:2150
-3456:3:2161
-3457:3:2169
-3458:3:2170
-3459:3:2174
-3460:3:2179
-3461:3:2180
-3462:0:2565
-3463:3:2192
-3464:0:2565
-3465:2:745
-3466:0:2565
-3467:3:2013
-3468:0:2565
-3469:2:750
-3470:0:2565
-3471:2:753
-3472:0:2565
-3473:3:2014
-3474:0:2565
-3475:3:2015
-3476:3:2019
-3477:3:2020
-3478:3:2028
-3479:3:2029
-3480:3:2033
-3481:3:2034
-3482:3:2042
-3483:3:2047
-3484:3:2051
-3485:3:2052
-3486:3:2059
-3487:3:2060
-3488:3:2071
-3489:3:2079
-3490:3:2080
-3491:3:2084
-3492:3:2089
-3493:3:2090
-3494:0:2565
-3495:3:2102
-3496:0:2565
-3497:3:2104
-3498:0:2565
-3499:3:2105
-3500:3:2109
-3501:3:2110
-3502:3:2118
-3503:3:2119
-3504:3:2123
-3505:3:2124
-3506:3:2132
-3507:3:2137
-3508:3:2141
-3509:3:2142
-3510:3:2149
-3511:3:2150
-3512:3:2161
-3513:3:2169
-3514:3:2170
-3515:3:2174
-3516:3:2179
-3517:3:2180
-3518:0:2565
-3519:3:2192
-3520:0:2565
-3521:2:758
-3522:0:2565
-3523:3:2013
-3524:0:2565
-3525:3:2014
-3526:0:2565
-3527:3:2015
-3528:3:2019
-3529:3:2020
-3530:3:2028
-3531:3:2029
-3532:3:2033
-3533:3:2034
-3534:3:2042
-3535:3:2047
-3536:3:2051
-3537:3:2052
-3538:3:2059
-3539:3:2060
-3540:3:2071
-3541:3:2079
-3542:3:2080
-3543:3:2084
-3544:3:2089
-3545:3:2090
-3546:0:2565
-3547:3:2102
-3548:0:2565
-3549:3:2104
-3550:0:2565
-3551:3:2105
-3552:3:2109
-3553:3:2110
-3554:3:2118
-3555:3:2119
-3556:3:2123
-3557:3:2124
-3558:3:2132
-3559:3:2137
-3560:3:2141
-3561:3:2142
-3562:3:2149
-3563:3:2150
-3564:3:2161
-3565:3:2169
-3566:3:2170
-3567:3:2174
-3568:3:2179
-3569:3:2180
-3570:0:2565
-3571:2:759
-3572:0:2565
-3573:3:2192
-3574:0:2565
-3575:3:2013
-3576:0:2565
-3577:3:2014
-3578:0:2565
-3579:3:2015
-3580:3:2019
-3581:3:2020
-3582:3:2028
-3583:3:2029
-3584:3:2033
-3585:3:2034
-3586:3:2042
-3587:3:2047
-3588:3:2051
-3589:3:2052
-3590:3:2059
-3591:3:2060
-3592:3:2071
-3593:3:2079
-3594:3:2080
-3595:3:2084
-3596:3:2089
-3597:3:2090
-3598:0:2565
-3599:3:2102
-3600:0:2565
-3601:3:2104
-3602:0:2565
-3603:2:760
-3604:0:2565
-3605:2:761
-3606:0:2565
-3607:2:762
-3608:0:2565
-3609:2:763
-3610:0:2565
-3611:3:2105
-3612:3:2109
-3613:3:2110
-3614:3:2118
-3615:3:2119
-3616:3:2123
-3617:3:2124
-3618:3:2132
-3619:3:2137
-3620:3:2141
-3621:3:2142
-3622:3:2149
-3623:3:2150
-3624:3:2161
-3625:3:2169
-3626:3:2170
-3627:3:2174
-3628:3:2179
-3629:3:2180
-3630:0:2565
-3631:3:2192
-3632:0:2565
-3633:3:2013
-3634:0:2565
-3635:3:2014
-3636:0:2565
-3637:3:2015
-3638:3:2019
-3639:3:2020
-3640:3:2028
-3641:3:2029
-3642:3:2033
-3643:3:2034
-3644:3:2042
-3645:3:2047
-3646:3:2051
-3647:3:2052
-3648:3:2059
-3649:3:2060
-3650:3:2071
-3651:3:2079
-3652:3:2080
-3653:3:2084
-3654:3:2089
-3655:3:2090
-3656:0:2565
-3657:3:2102
-3658:0:2565
-3659:2:765
-3660:0:2565
-3661:3:2104
-3662:0:2565
-3663:3:2105
-3664:3:2109
-3665:3:2110
-3666:3:2118
-3667:3:2119
-3668:3:2123
-3669:3:2124
-3670:3:2132
-3671:3:2137
-3672:3:2141
-3673:3:2142
-3674:3:2149
-3675:3:2150
-3676:3:2161
-3677:3:2169
-3678:3:2170
-3679:3:2174
-3680:3:2179
-3681:3:2180
-3682:0:2565
-3683:3:2192
-3684:0:2565
-3685:3:2013
-3686:0:2565
-3687:3:2014
-3688:0:2565
-3689:3:2015
-3690:3:2019
-3691:3:2020
-3692:3:2028
-3693:3:2029
-3694:3:2033
-3695:3:2034
-3696:3:2042
-3697:3:2047
-3698:3:2051
-3699:3:2052
-3700:3:2059
-3701:3:2060
-3702:3:2071
-3703:3:2079
-3704:3:2080
-3705:3:2084
-3706:3:2089
-3707:3:2090
-3708:0:2565
-3709:2:766
-3710:2:770
-3711:2:771
-3712:2:779
-3713:2:780
-3714:2:781
-3715:2:793
-3716:2:798
-3717:2:802
-3718:2:803
-3719:2:810
-3720:2:811
-3721:2:822
-3722:2:823
-3723:2:824
-3724:2:835
-3725:2:840
-3726:2:841
-3727:0:2565
-3728:3:2102
-3729:0:2565
-3730:3:2104
-3731:0:2565
-3732:3:2105
-3733:3:2109
-3734:3:2110
-3735:3:2118
-3736:3:2119
-3737:3:2123
-3738:3:2124
-3739:3:2132
-3740:3:2137
-3741:3:2141
-3742:3:2142
-3743:3:2149
-3744:3:2150
-3745:3:2161
-3746:3:2169
-3747:3:2170
-3748:3:2174
-3749:3:2179
-3750:3:2180
-3751:0:2565
-3752:3:2192
-3753:0:2565
-3754:3:2013
-3755:0:2565
-3756:3:2014
-3757:0:2565
-3758:2:853
-3759:0:2565
-3760:2:857
-3761:0:2565
-3762:2:465
-3763:0:2565
-3764:3:2015
-3765:3:2019
-3766:3:2020
-3767:3:2028
-3768:3:2029
-3769:3:2033
-3770:3:2034
-3771:3:2042
-3772:3:2047
-3773:3:2051
-3774:3:2052
-3775:3:2059
-3776:3:2060
-3777:3:2071
-3778:3:2079
-3779:3:2080
-3780:3:2084
-3781:3:2089
-3782:3:2090
-3783:0:2565
-3784:3:2102
-3785:0:2565
-3786:3:2104
-3787:0:2565
-3788:3:2105
-3789:3:2109
-3790:3:2110
-3791:3:2118
-3792:3:2119
-3793:3:2123
-3794:3:2124
-3795:3:2132
-3796:3:2137
-3797:3:2141
-3798:3:2142
-3799:3:2149
-3800:3:2150
-3801:3:2161
-3802:3:2169
-3803:3:2170
-3804:3:2174
-3805:3:2179
-3806:3:2180
-3807:0:2565
-3808:3:2192
-3809:0:2565
-3810:3:2013
-3811:0:2565
-3812:2:466
-3813:0:2565
-3814:3:2014
-3815:0:2565
-3816:3:2015
-3817:3:2019
-3818:3:2020
-3819:3:2028
-3820:3:2029
-3821:3:2033
-3822:3:2034
-3823:3:2042
-3824:3:2047
-3825:3:2051
-3826:3:2052
-3827:3:2059
-3828:3:2060
-3829:3:2071
-3830:3:2079
-3831:3:2080
-3832:3:2084
-3833:3:2089
-3834:3:2090
-3835:0:2565
-3836:3:2102
-3837:0:2565
-3838:3:2104
-3839:0:2565
-3840:3:2105
-3841:3:2109
-3842:3:2110
-3843:3:2118
-3844:3:2119
-3845:3:2123
-3846:3:2124
-3847:3:2132
-3848:3:2137
-3849:3:2141
-3850:3:2142
-3851:3:2149
-3852:3:2150
-3853:3:2161
-3854:3:2169
-3855:3:2170
-3856:3:2174
-3857:3:2179
-3858:3:2180
-3859:0:2565
-3860:3:2192
-3861:0:2565
-3862:2:467
-3863:0:2565
-3864:3:2013
-3865:0:2565
-3866:3:2014
-3867:0:2565
-3868:3:2015
-3869:3:2019
-3870:3:2020
-3871:3:2028
-3872:3:2029
-3873:3:2033
-3874:3:2034
-3875:3:2042
-3876:3:2047
-3877:3:2051
-3878:3:2052
-3879:3:2059
-3880:3:2060
-3881:3:2071
-3882:3:2079
-3883:3:2080
-3884:3:2084
-3885:3:2089
-3886:3:2090
-3887:0:2565
-3888:3:2102
-3889:0:2565
-3890:3:2104
-3891:0:2565
-3892:3:2105
-3893:3:2109
-3894:3:2110
-3895:3:2118
-3896:3:2119
-3897:3:2123
-3898:3:2124
-3899:3:2132
-3900:3:2137
-3901:3:2141
-3902:3:2142
-3903:3:2149
-3904:3:2150
-3905:3:2161
-3906:3:2169
-3907:3:2170
-3908:3:2174
-3909:3:2179
-3910:3:2180
-3911:0:2565
-3912:1:317
-3913:0:2565
-3914:3:2192
-3915:0:2565
-3916:3:2013
-3917:0:2565
-3918:2:468
-3919:0:2565
-3920:1:323
-3921:0:2565
-3922:1:324
-3923:0:2565
-3924:3:2014
-3925:0:2565
-3926:3:2015
-3927:3:2019
-3928:3:2020
-3929:3:2028
-3930:3:2029
-3931:3:2033
-3932:3:2034
-3933:3:2042
-3934:3:2047
-3935:3:2051
-3936:3:2052
-3937:3:2059
-3938:3:2060
-3939:3:2071
-3940:3:2079
-3941:3:2080
-3942:3:2084
-3943:3:2089
-3944:3:2090
-3945:0:2565
-3946:3:2102
-3947:0:2565
-3948:3:2104
-3949:0:2565
-3950:3:2105
-3951:3:2109
-3952:3:2110
-3953:3:2118
-3954:3:2119
-3955:3:2123
-3956:3:2124
-3957:3:2132
-3958:3:2137
-3959:3:2141
-3960:3:2142
-3961:3:2149
-3962:3:2150
-3963:3:2161
-3964:3:2169
-3965:3:2170
-3966:3:2174
-3967:3:2179
-3968:3:2180
-3969:0:2565
-3970:3:2192
-3971:0:2565
-3972:3:2013
-3973:0:2565
-3974:2:467
-3975:0:2565
-3976:2:468
-3977:0:2565
-3978:3:2014
-3979:0:2565
-3980:3:2015
-3981:3:2019
-3982:3:2020
-3983:3:2028
-3984:3:2029
-3985:3:2033
-3986:3:2034
-3987:3:2042
-3988:3:2047
-3989:3:2051
-3990:3:2052
-3991:3:2059
-3992:3:2060
-3993:3:2071
-3994:3:2079
-3995:3:2080
-3996:3:2084
-3997:3:2089
-3998:3:2090
-3999:0:2565
-4000:3:2102
-4001:0:2565
-4002:3:2104
-4003:0:2565
-4004:3:2105
-4005:3:2109
-4006:3:2110
-4007:3:2118
-4008:3:2119
-4009:3:2123
-4010:3:2124
-4011:3:2132
-4012:3:2137
-4013:3:2141
-4014:3:2142
-4015:3:2149
-4016:3:2150
-4017:3:2161
-4018:3:2169
-4019:3:2170
-4020:3:2174
-4021:3:2179
-4022:3:2180
-4023:0:2565
-4024:3:2192
-4025:0:2565
-4026:2:467
-4027:0:2565
-4028:1:329
-4029:0:2565
-4030:3:2013
-4031:0:2565
-4032:2:468
-4033:0:2565
-4034:3:2014
-4035:0:2565
-4036:3:2015
-4037:3:2019
-4038:3:2020
-4039:3:2028
-4040:3:2029
-4041:3:2033
-4042:3:2034
-4043:3:2042
-4044:3:2047
-4045:3:2051
-4046:3:2052
-4047:3:2059
-4048:3:2060
-4049:3:2071
-4050:3:2079
-4051:3:2080
-4052:3:2084
-4053:3:2089
-4054:3:2090
-4055:0:2565
-4056:3:2102
-4057:0:2565
-4058:3:2104
-4059:0:2565
-4060:3:2105
-4061:3:2109
-4062:3:2110
-4063:3:2118
-4064:3:2119
-4065:3:2123
-4066:3:2124
-4067:3:2132
-4068:3:2137
-4069:3:2141
-4070:3:2142
-4071:3:2149
-4072:3:2150
-4073:3:2161
-4074:3:2169
-4075:3:2170
-4076:3:2174
-4077:3:2179
-4078:3:2180
-4079:0:2565
-4080:3:2192
-4081:0:2565
-4082:2:467
-4083:0:2565
-4084:3:2013
-4085:0:2565
-4086:3:2014
-4087:0:2565
-4088:3:2015
-4089:3:2019
-4090:3:2020
-4091:3:2028
-4092:3:2029
-4093:3:2033
-4094:3:2034
-4095:3:2042
-4096:3:2047
-4097:3:2051
-4098:3:2052
-4099:3:2059
-4100:3:2060
-4101:3:2071
-4102:3:2079
-4103:3:2080
-4104:3:2084
-4105:3:2089
-4106:3:2090
-4107:0:2565
-4108:3:2102
-4109:0:2565
-4110:3:2104
-4111:0:2565
-4112:3:2105
-4113:3:2109
-4114:3:2110
-4115:3:2118
-4116:3:2119
-4117:3:2123
-4118:3:2124
-4119:3:2132
-4120:3:2137
-4121:3:2141
-4122:3:2142
-4123:3:2149
-4124:3:2150
-4125:3:2161
-4126:3:2169
-4127:3:2170
-4128:3:2174
-4129:3:2179
-4130:3:2180
-4131:0:2565
-4132:1:330
-4133:0:2565
-4134:3:2192
-4135:0:2565
-4136:3:2013
-4137:0:2565
-4138:2:468
-4139:0:2565
-4140:3:2014
-4141:0:2565
-4142:3:2015
-4143:3:2019
-4144:3:2020
-4145:3:2028
-4146:3:2029
-4147:3:2033
-4148:3:2034
-4149:3:2042
-4150:3:2047
-4151:3:2051
-4152:3:2052
-4153:3:2059
-4154:3:2060
-4155:3:2071
-4156:3:2079
-4157:3:2080
-4158:3:2084
-4159:3:2089
-4160:3:2090
-4161:0:2565
-4162:3:2102
-4163:0:2565
-4164:3:2104
-4165:0:2565
-4166:3:2105
-4167:3:2109
-4168:3:2110
-4169:3:2118
-4170:3:2119
-4171:3:2123
-4172:3:2124
-4173:3:2132
-4174:3:2137
-4175:3:2141
-4176:3:2142
-4177:3:2149
-4178:3:2150
-4179:3:2161
-4180:3:2169
-4181:3:2170
-4182:3:2174
-4183:3:2179
-4184:3:2180
-4185:0:2565
-4186:3:2192
-4187:0:2565
-4188:2:467
-4189:0:2565
-4190:3:2013
-4191:0:2565
-4192:3:2014
-4193:0:2565
-4194:3:2015
-4195:3:2019
-4196:3:2020
-4197:3:2028
-4198:3:2029
-4199:3:2033
-4200:3:2034
-4201:3:2042
-4202:3:2047
-4203:3:2051
-4204:3:2052
-4205:3:2059
-4206:3:2060
-4207:3:2071
-4208:3:2079
-4209:3:2080
-4210:3:2084
-4211:3:2089
-4212:3:2090
-4213:0:2565
-4214:3:2102
-4215:0:2565
-4216:3:2104
-4217:0:2565
-4218:3:2105
-4219:3:2109
-4220:3:2110
-4221:3:2118
-4222:3:2119
-4223:3:2123
-4224:3:2124
-4225:3:2132
-4226:3:2137
-4227:3:2141
-4228:3:2142
-4229:3:2149
-4230:3:2150
-4231:3:2161
-4232:3:2169
-4233:3:2170
-4234:3:2174
-4235:3:2179
-4236:3:2180
-4237:0:2565
-4238:1:331
-4239:0:2565
-4240:3:2192
-4241:0:2565
-4242:3:2013
-4243:0:2565
-4244:2:468
-4245:0:2565
-4246:1:332
-4247:0:2565
-4248:1:333
-4249:0:2565
-4250:1:334
-4251:0:2565
-4252:3:2014
-4253:0:2565
-4254:3:2015
-4255:3:2019
-4256:3:2020
-4257:3:2028
-4258:3:2029
-4259:3:2033
-4260:3:2034
-4261:3:2042
-4262:3:2047
-4263:3:2051
-4264:3:2052
-4265:3:2059
-4266:3:2060
-4267:3:2071
-4268:3:2079
-4269:3:2080
-4270:3:2084
-4271:3:2089
-4272:3:2090
-4273:0:2565
-4274:3:2102
-4275:0:2565
-4276:3:2104
-4277:0:2565
-4278:3:2105
-4279:3:2109
-4280:3:2110
-4281:3:2118
-4282:3:2119
-4283:3:2123
-4284:3:2124
-4285:3:2132
-4286:3:2137
-4287:3:2141
-4288:3:2142
-4289:3:2149
-4290:3:2150
-4291:3:2161
-4292:3:2169
-4293:3:2170
-4294:3:2174
-4295:3:2179
-4296:3:2180
-4297:0:2565
-4298:3:2192
-4299:0:2565
-4300:3:2013
-4301:0:2565
-4302:2:467
-4303:0:2565
-4304:2:468
-4305:0:2565
-4306:3:2014
-4307:0:2565
-4308:3:2015
-4309:3:2019
-4310:3:2020
-4311:3:2028
-4312:3:2029
-4313:3:2033
-4314:3:2034
-4315:3:2042
-4316:3:2047
-4317:3:2051
-4318:3:2052
-4319:3:2059
-4320:3:2060
-4321:3:2071
-4322:3:2079
-4323:3:2080
-4324:3:2084
-4325:3:2089
-4326:3:2090
-4327:0:2565
-4328:3:2102
-4329:0:2565
-4330:3:2104
-4331:0:2565
-4332:3:2105
-4333:3:2109
-4334:3:2110
-4335:3:2118
-4336:3:2119
-4337:3:2123
-4338:3:2124
-4339:3:2132
-4340:3:2137
-4341:3:2141
-4342:3:2142
-4343:3:2149
-4344:3:2150
-4345:3:2161
-4346:3:2169
-4347:3:2170
-4348:3:2174
-4349:3:2179
-4350:3:2180
-4351:0:2565
-4352:3:2192
-4353:0:2565
-4354:2:467
-4355:0:2565
-4356:1:336
-4357:0:2565
-4358:3:2013
-4359:0:2565
-4360:2:468
-4361:0:2565
-4362:3:2014
-4363:0:2565
-4364:3:2015
-4365:3:2019
-4366:3:2020
-4367:3:2028
-4368:3:2029
-4369:3:2033
-4370:3:2034
-4371:3:2042
-4372:3:2047
-4373:3:2051
-4374:3:2052
-4375:3:2059
-4376:3:2060
-4377:3:2071
-4378:3:2079
-4379:3:2080
-4380:3:2084
-4381:3:2089
-4382:3:2090
-4383:0:2565
-4384:3:2102
-4385:0:2565
-4386:3:2104
-4387:0:2565
-4388:3:2105
-4389:3:2109
-4390:3:2110
-4391:3:2118
-4392:3:2119
-4393:3:2123
-4394:3:2124
-4395:3:2132
-4396:3:2137
-4397:3:2141
-4398:3:2142
-4399:3:2149
-4400:3:2150
-4401:3:2161
-4402:3:2169
-4403:3:2170
-4404:3:2174
-4405:3:2179
-4406:3:2180
-4407:0:2565
-4408:3:2192
-4409:0:2565
-4410:2:469
-4411:0:2565
-4412:3:2013
-4413:0:2565
-4414:2:475
-4415:0:2565
-4416:2:476
-4417:0:2565
-4418:3:2014
-4419:0:2565
-4420:3:2015
-4421:3:2019
-4422:3:2020
-4423:3:2028
-4424:3:2029
-4425:3:2033
-4426:3:2034
-4427:3:2042
-4428:3:2047
-4429:3:2051
-4430:3:2052
-4431:3:2059
-4432:3:2060
-4433:3:2071
-4434:3:2079
-4435:3:2080
-4436:3:2084
-4437:3:2089
-4438:3:2090
-4439:0:2565
-4440:3:2102
-4441:0:2565
-4442:3:2104
-4443:0:2565
-4444:3:2105
-4445:3:2109
-4446:3:2110
-4447:3:2118
-4448:3:2119
-4449:3:2123
-4450:3:2124
-4451:3:2132
-4452:3:2137
-4453:3:2141
-4454:3:2142
-4455:3:2149
-4456:3:2150
-4457:3:2161
-4458:3:2169
-4459:3:2170
-4460:3:2174
-4461:3:2179
-4462:3:2180
-4463:0:2565
-4464:3:2192
-4465:0:2565
-4466:2:477
-4467:2:481
-4468:2:482
-4469:2:490
-4470:2:491
-4471:2:492
-4472:2:504
-4473:2:509
-4474:2:513
-4475:2:514
-4476:2:521
-4477:2:522
-4478:2:533
-4479:2:534
-4480:2:535
-4481:2:546
-4482:2:551
-4483:2:552
-4484:0:2565
-4485:3:2013
-4486:0:2565
-4487:3:2014
-4488:0:2565
-4489:3:2015
-4490:3:2019
-4491:3:2020
-4492:3:2028
-4493:3:2029
-4494:3:2033
-4495:3:2034
-4496:3:2042
-4497:3:2047
-4498:3:2051
-4499:3:2052
-4500:3:2059
-4501:3:2060
-4502:3:2071
-4503:3:2079
-4504:3:2080
-4505:3:2084
-4506:3:2089
-4507:3:2090
-4508:0:2565
-4509:3:2102
-4510:0:2565
-4511:3:2104
-4512:0:2565
-4513:3:2105
-4514:3:2109
-4515:3:2110
-4516:3:2118
-4517:3:2119
-4518:3:2123
-4519:3:2124
-4520:3:2132
-4521:3:2137
-4522:3:2141
-4523:3:2142
-4524:3:2149
-4525:3:2150
-4526:3:2161
-4527:3:2169
-4528:3:2170
-4529:3:2174
-4530:3:2179
-4531:3:2180
-4532:0:2565
-4533:2:564
-4534:0:2565
-4535:3:2192
-4536:0:2565
-4537:3:2013
-4538:0:2565
-4539:3:2014
-4540:0:2565
-4541:3:2015
-4542:3:2019
-4543:3:2020
-4544:3:2028
-4545:3:2029
-4546:3:2033
-4547:3:2034
-4548:3:2042
-4549:3:2047
-4550:3:2051
-4551:3:2052
-4552:3:2059
-4553:3:2060
-4554:3:2071
-4555:3:2079
-4556:3:2080
-4557:3:2084
-4558:3:2089
-4559:3:2090
-4560:0:2565
-4561:3:2102
-4562:0:2565
-4563:3:2104
-4564:0:2565
-4565:2:565
-4566:2:569
-4567:2:570
-4568:2:578
-4569:2:579
-4570:2:583
-4571:2:584
-4572:2:592
-4573:2:597
-4574:2:601
-4575:2:602
-4576:2:609
-4577:2:610
-4578:2:621
-4579:2:622
-4580:2:623
-4581:2:634
-4582:2:639
-4583:2:640
-4584:0:2565
-4585:2:744
-4586:0:2565
-4587:3:2105
-4588:3:2109
-4589:3:2110
-4590:3:2118
-4591:3:2119
-4592:3:2123
-4593:3:2124
-4594:3:2132
-4595:3:2137
-4596:3:2141
-4597:3:2142
-4598:3:2149
-4599:3:2150
-4600:3:2161
-4601:3:2169
-4602:3:2170
-4603:3:2174
-4604:3:2179
-4605:3:2180
-4606:0:2565
-4607:3:2192
-4608:0:2565
-4609:3:2013
-4610:0:2565
-4611:3:2014
-4612:0:2565
-4613:3:2015
-4614:3:2019
-4615:3:2020
-4616:3:2028
-4617:3:2029
-4618:3:2033
-4619:3:2034
-4620:3:2042
-4621:3:2047
-4622:3:2051
-4623:3:2052
-4624:3:2059
-4625:3:2060
-4626:3:2071
-4627:3:2079
-4628:3:2080
-4629:3:2084
-4630:3:2089
-4631:3:2090
-4632:0:2565
-4633:3:2102
-4634:0:2565
-4635:2:745
-4636:0:2565
-4637:2:750
-4638:0:2565
-4639:2:753
-4640:0:2565
-4641:3:2104
-4642:0:2565
-4643:3:2105
-4644:3:2109
-4645:3:2110
-4646:3:2118
-4647:3:2119
-4648:3:2123
-4649:3:2124
-4650:3:2132
-4651:3:2137
-4652:3:2141
-4653:3:2142
-4654:3:2149
-4655:3:2150
-4656:3:2161
-4657:3:2169
-4658:3:2170
-4659:3:2174
-4660:3:2179
-4661:3:2180
-4662:0:2565
-4663:3:2192
-4664:0:2565
-4665:3:2013
-4666:0:2565
-4667:3:2014
-4668:0:2565
-4669:3:2015
-4670:3:2019
-4671:3:2020
-4672:3:2028
-4673:3:2029
-4674:3:2033
-4675:3:2034
-4676:3:2042
-4677:3:2047
-4678:3:2051
-4679:3:2052
-4680:3:2059
-4681:3:2060
-4682:3:2071
-4683:3:2079
-4684:3:2080
-4685:3:2084
-4686:3:2089
-4687:3:2090
-4688:0:2565
-4689:2:758
-4690:0:2565
-4691:3:2102
-4692:0:2565
-4693:3:2104
-4694:0:2565
-4695:3:2105
-4696:3:2109
-4697:3:2110
-4698:3:2118
-4699:3:2119
-4700:3:2123
-4701:3:2124
-4702:3:2132
-4703:3:2137
-4704:3:2141
-4705:3:2142
-4706:3:2149
-4707:3:2150
-4708:3:2161
-4709:3:2169
-4710:3:2170
-4711:3:2174
-4712:3:2179
-4713:3:2180
-4714:0:2565
-4715:3:2192
-4716:0:2565
-4717:3:2013
-4718:0:2565
-4719:3:2014
-4720:0:2565
-4721:2:759
-4722:0:2565
-4723:3:2015
-4724:3:2019
-4725:3:2020
-4726:3:2028
-4727:3:2029
-4728:3:2033
-4729:3:2034
-4730:3:2042
-4731:3:2047
-4732:3:2051
-4733:3:2052
-4734:3:2059
-4735:3:2060
-4736:3:2071
-4737:3:2079
-4738:3:2080
-4739:3:2084
-4740:3:2089
-4741:3:2090
-4742:0:2565
-4743:3:2102
-4744:0:2565
-4745:3:2104
-4746:0:2565
-4747:3:2105
-4748:3:2109
-4749:3:2110
-4750:3:2118
-4751:3:2119
-4752:3:2123
-4753:3:2124
-4754:3:2132
-4755:3:2137
-4756:3:2141
-4757:3:2142
-4758:3:2149
-4759:3:2150
-4760:3:2161
-4761:3:2169
-4762:3:2170
-4763:3:2174
-4764:3:2179
-4765:3:2180
-4766:0:2565
-4767:3:2192
-4768:0:2565
-4769:3:2013
-4770:0:2565
-4771:2:760
-4772:0:2565
-4773:2:761
-4774:0:2565
-4775:2:762
-4776:0:2565
-4777:2:763
-4778:0:2565
-4779:3:2014
-4780:0:2565
-4781:3:2015
-4782:3:2019
-4783:3:2020
-4784:3:2028
-4785:3:2029
-4786:3:2033
-4787:3:2034
-4788:3:2042
-4789:3:2047
-4790:3:2051
-4791:3:2052
-4792:3:2059
-4793:3:2060
-4794:3:2071
-4795:3:2079
-4796:3:2080
-4797:3:2084
-4798:3:2089
-4799:3:2090
-4800:0:2565
-4801:3:2102
-4802:0:2565
-4803:3:2104
-4804:0:2565
-4805:3:2105
-4806:3:2109
-4807:3:2110
-4808:3:2118
-4809:3:2119
-4810:3:2123
-4811:3:2124
-4812:3:2132
-4813:3:2137
-4814:3:2141
-4815:3:2142
-4816:3:2149
-4817:3:2150
-4818:3:2161
-4819:3:2169
-4820:3:2170
-4821:3:2174
-4822:3:2179
-4823:3:2180
-4824:0:2565
-4825:3:2192
-4826:0:2565
-4827:2:765
-4828:0:2565
-4829:3:2013
-4830:0:2565
-4831:3:2014
-4832:0:2565
-4833:3:2015
-4834:3:2019
-4835:3:2020
-4836:3:2028
-4837:3:2029
-4838:3:2033
-4839:3:2034
-4840:3:2042
-4841:3:2047
-4842:3:2051
-4843:3:2052
-4844:3:2059
-4845:3:2060
-4846:3:2071
-4847:3:2079
-4848:3:2080
-4849:3:2084
-4850:3:2089
-4851:3:2090
-4852:0:2565
-4853:3:2102
-4854:0:2565
-4855:3:2104
-4856:0:2565
-4857:3:2105
-4858:3:2109
-4859:3:2110
-4860:3:2118
-4861:3:2119
-4862:3:2123
-4863:3:2124
-4864:3:2132
-4865:3:2137
-4866:3:2141
-4867:3:2142
-4868:3:2149
-4869:3:2150
-4870:3:2161
-4871:3:2169
-4872:3:2170
-4873:3:2174
-4874:3:2179
-4875:3:2180
-4876:0:2565
-4877:2:766
-4878:2:770
-4879:2:771
-4880:2:779
-4881:2:780
-4882:2:781
-4883:2:793
-4884:2:798
-4885:2:802
-4886:2:803
-4887:2:810
-4888:2:811
-4889:2:822
-4890:2:823
-4891:2:824
-4892:2:835
-4893:2:840
-4894:2:841
-4895:0:2565
-4896:3:2192
-4897:0:2565
-4898:3:2013
-4899:0:2565
-4900:3:2014
-4901:0:2565
-4902:3:2015
-4903:3:2019
-4904:3:2020
-4905:3:2028
-4906:3:2029
-4907:3:2033
-4908:3:2034
-4909:3:2042
-4910:3:2047
-4911:3:2051
-4912:3:2052
-4913:3:2059
-4914:3:2060
-4915:3:2071
-4916:3:2079
-4917:3:2080
-4918:3:2084
-4919:3:2089
-4920:3:2090
-4921:0:2565
-4922:3:2102
-4923:0:2565
-4924:3:2104
-4925:0:2565
-4926:2:853
-4927:0:2565
-4928:2:857
-4929:0:2565
-4930:2:465
-4931:0:2565
-4932:3:2105
-4933:3:2109
-4934:3:2110
-4935:3:2118
-4936:3:2119
-4937:3:2123
-4938:3:2124
-4939:3:2132
-4940:3:2137
-4941:3:2141
-4942:3:2142
-4943:3:2149
-4944:3:2150
-4945:3:2161
-4946:3:2169
-4947:3:2170
-4948:3:2174
-4949:3:2179
-4950:3:2180
-4951:0:2565
-4952:3:2192
-4953:0:2565
-4954:3:2013
-4955:0:2565
-4956:3:2014
-4957:0:2565
-4958:3:2015
-4959:3:2019
-4960:3:2020
-4961:3:2028
-4962:3:2029
-4963:3:2033
-4964:3:2034
-4965:3:2042
-4966:3:2047
-4967:3:2051
-4968:3:2052
-4969:3:2059
-4970:3:2060
-4971:3:2071
-4972:3:2079
-4973:3:2080
-4974:3:2084
-4975:3:2089
-4976:3:2090
-4977:0:2565
-4978:3:2102
-4979:0:2565
-4980:2:466
-4981:0:2565
-4982:3:2104
-4983:0:2565
-4984:3:2105
-4985:3:2109
-4986:3:2110
-4987:3:2118
-4988:3:2119
-4989:3:2123
-4990:3:2124
-4991:3:2132
-4992:3:2137
-4993:3:2141
-4994:3:2142
-4995:3:2149
-4996:3:2150
-4997:3:2161
-4998:3:2169
-4999:3:2170
-5000:3:2174
-5001:3:2179
-5002:3:2180
-5003:0:2565
-5004:3:2192
-5005:0:2565
-5006:3:2013
-5007:0:2565
-5008:3:2014
-5009:0:2565
-5010:3:2015
-5011:3:2019
-5012:3:2020
-5013:3:2028
-5014:3:2029
-5015:3:2033
-5016:3:2034
-5017:3:2042
-5018:3:2047
-5019:3:2051
-5020:3:2052
-5021:3:2059
-5022:3:2060
-5023:3:2071
-5024:3:2079
-5025:3:2080
-5026:3:2084
-5027:3:2089
-5028:3:2090
-5029:0:2565
-5030:2:467
-5031:0:2565
-5032:3:2102
-5033:0:2565
-5034:3:2104
-5035:0:2565
-5036:3:2105
-5037:3:2109
-5038:3:2110
-5039:3:2118
-5040:3:2119
-5041:3:2123
-5042:3:2124
-5043:3:2132
-5044:3:2137
-5045:3:2141
-5046:3:2142
-5047:3:2149
-5048:3:2150
-5049:3:2161
-5050:3:2169
-5051:3:2170
-5052:3:2174
-5053:3:2179
-5054:3:2180
-5055:0:2565
-5056:3:2192
-5057:0:2565
-5058:3:2013
-5059:0:2565
-5060:3:2014
-5061:0:2565
-5062:1:339
-5063:0:2565
-5064:2:468
-5065:0:2565
-5066:3:2015
-5067:3:2019
-5068:3:2020
-5069:3:2028
-5070:3:2029
-5071:3:2033
-5072:3:2034
-5073:3:2042
-5074:3:2047
-5075:3:2051
-5076:3:2052
-5077:3:2059
-5078:3:2060
-5079:3:2071
-5080:3:2079
-5081:3:2080
-5082:3:2084
-5083:3:2089
-5084:3:2090
-5085:0:2565
-5086:3:2102
-5087:0:2565
-5088:3:2104
-5089:0:2565
-5090:3:2105
-5091:3:2109
-5092:3:2110
-5093:3:2118
-5094:3:2119
-5095:3:2123
-5096:3:2124
-5097:3:2132
-5098:3:2137
-5099:3:2141
-5100:3:2142
-5101:3:2149
-5102:3:2150
-5103:3:2161
-5104:3:2169
-5105:3:2170
-5106:3:2174
-5107:3:2179
-5108:3:2180
-5109:0:2565
-5110:3:2192
-5111:0:2565
-5112:3:2013
-5113:0:2565
-5114:3:2014
-5115:0:2565
-5116:2:467
-5117:0:2565
-5118:2:468
-5119:0:2565
-5120:3:2015
-5121:3:2019
-5122:3:2020
-5123:3:2028
-5124:3:2029
-5125:3:2033
-5126:3:2034
-5127:3:2042
-5128:3:2047
-5129:3:2051
-5130:3:2052
-5131:3:2059
-5132:3:2060
-5133:3:2071
-5134:3:2079
-5135:3:2080
-5136:3:2084
-5137:3:2089
-5138:3:2090
-5139:0:2565
-5140:3:2102
-5141:0:2565
-5142:3:2104
-5143:0:2565
-5144:3:2105
-5145:3:2109
-5146:3:2110
-5147:3:2118
-5148:3:2119
-5149:3:2123
-5150:3:2124
-5151:3:2132
-5152:3:2137
-5153:3:2141
-5154:3:2142
-5155:3:2149
-5156:3:2150
-5157:3:2161
-5158:3:2169
-5159:3:2170
-5160:3:2174
-5161:3:2179
-5162:3:2180
-5163:0:2565
-5164:3:2192
-5165:0:2565
-5166:3:2013
-5167:0:2565
-5168:2:467
-5169:0:2565
-5170:1:345
-5171:0:2565
-5172:2:468
-5173:0:2565
-5174:3:2014
-5175:0:2565
-5176:3:2015
-5177:3:2019
-5178:3:2020
-5179:3:2028
-5180:3:2029
-5181:3:2033
-5182:3:2034
-5183:3:2042
-5184:3:2047
-5185:3:2051
-5186:3:2052
-5187:3:2059
-5188:3:2060
-5189:3:2071
-5190:3:2079
-5191:3:2080
-5192:3:2084
-5193:3:2089
-5194:3:2090
-5195:0:2565
-5196:3:2102
-5197:0:2565
-5198:3:2104
-5199:0:2565
-5200:3:2105
-5201:3:2109
-5202:3:2110
-5203:3:2118
-5204:3:2119
-5205:3:2123
-5206:3:2124
-5207:3:2132
-5208:3:2137
-5209:3:2141
-5210:3:2142
-5211:3:2149
-5212:3:2150
-5213:3:2161
-5214:3:2169
-5215:3:2170
-5216:3:2174
-5217:3:2179
-5218:3:2180
-5219:0:2565
-5220:3:2192
-5221:0:2565
-5222:3:2013
-5223:0:2565
-5224:2:467
-5225:0:2565
-5226:2:468
-5227:0:2565
-5228:3:2014
-5229:0:2565
-5230:3:2015
-5231:3:2019
-5232:3:2020
-5233:3:2028
-5234:3:2029
-5235:3:2033
-5236:3:2034
-5237:3:2042
-5238:3:2047
-5239:3:2051
-5240:3:2052
-5241:3:2059
-5242:3:2060
-5243:3:2071
-5244:3:2079
-5245:3:2080
-5246:3:2084
-5247:3:2089
-5248:3:2090
-5249:0:2565
-5250:3:2102
-5251:0:2565
-5252:3:2104
-5253:0:2565
-5254:3:2105
-5255:3:2109
-5256:3:2110
-5257:3:2118
-5258:3:2119
-5259:3:2123
-5260:3:2124
-5261:3:2132
-5262:3:2137
-5263:3:2141
-5264:3:2142
-5265:3:2149
-5266:3:2150
-5267:3:2161
-5268:3:2169
-5269:3:2170
-5270:3:2174
-5271:3:2179
-5272:3:2180
-5273:0:2565
-5274:3:2192
-5275:0:2565
-5276:2:467
-5277:0:2565
-5278:1:346
-5279:1:350
-5280:1:351
-5281:1:359
-5282:1:360
-5283:1:361
-5284:1:373
-5285:1:378
-5286:1:382
-5287:1:383
-5288:1:390
-5289:1:391
-5290:1:402
-5291:1:403
-5292:1:404
-5293:1:415
-5294:1:420
-5295:1:421
-5296:0:2565
-5297:3:2013
-5298:0:2565
-5299:2:468
-5300:0:2565
-5301:3:2014
-5302:0:2565
-5303:3:2015
-5304:3:2019
-5305:3:2020
-5306:3:2028
-5307:3:2029
-5308:3:2033
-5309:3:2034
-5310:3:2042
-5311:3:2047
-5312:3:2051
-5313:3:2052
-5314:3:2059
-5315:3:2060
-5316:3:2071
-5317:3:2079
-5318:3:2080
-5319:3:2084
-5320:3:2089
-5321:3:2090
-5322:0:2565
-5323:3:2102
-5324:0:2565
-5325:3:2104
-5326:0:2565
-5327:3:2105
-5328:3:2109
-5329:3:2110
-5330:3:2118
-5331:3:2119
-5332:3:2123
-5333:3:2124
-5334:3:2132
-5335:3:2137
-5336:3:2141
-5337:3:2142
-5338:3:2149
-5339:3:2150
-5340:3:2161
-5341:3:2169
-5342:3:2170
-5343:3:2174
-5344:3:2179
-5345:3:2180
-5346:0:2565
-5347:3:2192
-5348:0:2565
-5349:2:467
-5350:0:2565
-5351:3:2013
-5352:0:2565
-5353:3:2014
-5354:0:2565
-5355:3:2015
-5356:3:2019
-5357:3:2020
-5358:3:2028
-5359:3:2029
-5360:3:2033
-5361:3:2034
-5362:3:2042
-5363:3:2047
-5364:3:2051
-5365:3:2052
-5366:3:2059
-5367:3:2060
-5368:3:2071
-5369:3:2079
-5370:3:2080
-5371:3:2084
-5372:3:2089
-5373:3:2090
-5374:0:2565
-5375:3:2102
-5376:0:2565
-5377:3:2104
-5378:0:2565
-5379:3:2105
-5380:3:2109
-5381:3:2110
-5382:3:2118
-5383:3:2119
-5384:3:2123
-5385:3:2124
-5386:3:2132
-5387:3:2137
-5388:3:2141
-5389:3:2142
-5390:3:2149
-5391:3:2150
-5392:3:2161
-5393:3:2169
-5394:3:2170
-5395:3:2174
-5396:3:2179
-5397:3:2180
-5398:0:2565
-5399:1:433
-5400:0:2565
-5401:3:2192
-5402:0:2565
-5403:3:2013
-5404:0:2565
-5405:2:468
-5406:0:2565
-5407:3:2014
-5408:0:2565
-5409:3:2015
-5410:3:2019
-5411:3:2020
-5412:3:2028
-5413:3:2029
-5414:3:2033
-5415:3:2034
-5416:3:2042
-5417:3:2047
-5418:3:2051
-5419:3:2052
-5420:3:2059
-5421:3:2060
-5422:3:2071
-5423:3:2079
-5424:3:2080
-5425:3:2084
-5426:3:2089
-5427:3:2090
-5428:0:2565
-5429:3:2102
-5430:0:2565
-5431:3:2104
-5432:0:2565
-5433:3:2105
-5434:3:2109
-5435:3:2110
-5436:3:2118
-5437:3:2119
-5438:3:2123
-5439:3:2124
-5440:3:2132
-5441:3:2137
-5442:3:2141
-5443:3:2142
-5444:3:2149
-5445:3:2150
-5446:3:2161
-5447:3:2169
-5448:3:2170
-5449:3:2174
-5450:3:2179
-5451:3:2180
-5452:0:2565
-5453:3:2192
-5454:0:2565
-5455:2:469
-5456:0:2565
-5457:3:2013
-5458:0:2565
-5459:2:475
-5460:0:2565
-5461:2:476
-5462:0:2565
-5463:3:2014
-5464:0:2565
-5465:3:2015
-5466:3:2019
-5467:3:2020
-5468:3:2028
-5469:3:2029
-5470:3:2033
-5471:3:2034
-5472:3:2042
-5473:3:2047
-5474:3:2051
-5475:3:2052
-5476:3:2059
-5477:3:2060
-5478:3:2071
-5479:3:2079
-5480:3:2080
-5481:3:2084
-5482:3:2089
-5483:3:2090
-5484:0:2565
-5485:3:2102
-5486:0:2565
-5487:3:2104
-5488:0:2565
-5489:3:2105
-5490:3:2109
-5491:3:2110
-5492:3:2118
-5493:3:2119
-5494:3:2123
-5495:3:2124
-5496:3:2132
-5497:3:2137
-5498:3:2141
-5499:3:2142
-5500:3:2149
-5501:3:2150
-5502:3:2161
-5503:3:2169
-5504:3:2170
-5505:3:2174
-5506:3:2179
-5507:3:2180
-5508:0:2565
-5509:3:2192
-5510:0:2565
-5511:2:477
-5512:2:481
-5513:2:482
-5514:2:490
-5515:2:491
-5516:2:495
-5517:2:496
-5518:2:504
-5519:2:509
-5520:2:513
-5521:2:514
-5522:2:521
-5523:2:522
-5524:2:533
-5525:2:534
-5526:2:535
-5527:2:546
-5528:2:551
-5529:2:552
-5530:0:2565
-5531:3:2013
-5532:0:2565
-5533:3:2014
-5534:0:2565
-5535:3:2015
-5536:3:2019
-5537:3:2020
-5538:3:2028
-5539:3:2029
-5540:3:2033
-5541:3:2034
-5542:3:2042
-5543:3:2047
-5544:3:2051
-5545:3:2052
-5546:3:2059
-5547:3:2060
-5548:3:2071
-5549:3:2079
-5550:3:2080
-5551:3:2084
-5552:3:2089
-5553:3:2090
-5554:0:2565
-5555:3:2102
-5556:0:2565
-5557:3:2104
-5558:0:2565
-5559:3:2105
-5560:3:2109
-5561:3:2110
-5562:3:2118
-5563:3:2119
-5564:3:2123
-5565:3:2124
-5566:3:2132
-5567:3:2137
-5568:3:2141
-5569:3:2142
-5570:3:2149
-5571:3:2150
-5572:3:2161
-5573:3:2169
-5574:3:2170
-5575:3:2174
-5576:3:2179
-5577:3:2180
-5578:0:2565
-5579:2:564
-5580:0:2565
-5581:3:2192
-5582:0:2565
-5583:3:2013
-5584:0:2565
-5585:3:2014
-5586:0:2565
-5587:3:2015
-5588:3:2019
-5589:3:2020
-5590:3:2028
-5591:3:2029
-5592:3:2033
-5593:3:2034
-5594:3:2042
-5595:3:2047
-5596:3:2051
-5597:3:2052
-5598:3:2059
-5599:3:2060
-5600:3:2071
-5601:3:2079
-5602:3:2080
-5603:3:2084
-5604:3:2089
-5605:3:2090
-5606:0:2565
-5607:3:2102
-5608:0:2565
-5609:3:2104
-5610:0:2565
-5611:2:565
-5612:2:569
-5613:2:570
-5614:2:578
-5615:2:579
-5616:2:583
-5617:2:584
-5618:2:592
-5619:2:597
-5620:2:601
-5621:2:602
-5622:2:609
-5623:2:610
-5624:2:621
-5625:2:622
-5626:2:623
-5627:2:634
-5628:2:639
-5629:2:640
-5630:0:2565
-5631:2:744
-5632:0:2565
-5633:3:2105
-5634:3:2109
-5635:3:2110
-5636:3:2118
-5637:3:2119
-5638:3:2123
-5639:3:2124
-5640:3:2132
-5641:3:2137
-5642:3:2141
-5643:3:2142
-5644:3:2149
-5645:3:2150
-5646:3:2161
-5647:3:2169
-5648:3:2170
-5649:3:2174
-5650:3:2179
-5651:3:2180
-5652:0:2565
-5653:3:2192
-5654:0:2565
-5655:3:2013
-5656:0:2565
-5657:3:2014
-5658:0:2565
-5659:3:2015
-5660:3:2019
-5661:3:2020
-5662:3:2028
-5663:3:2029
-5664:3:2033
-5665:3:2034
-5666:3:2042
-5667:3:2047
-5668:3:2051
-5669:3:2052
-5670:3:2059
-5671:3:2060
-5672:3:2071
-5673:3:2079
-5674:3:2080
-5675:3:2084
-5676:3:2089
-5677:3:2090
-5678:0:2565
-5679:3:2102
-5680:0:2565
-5681:2:745
-5682:0:2565
-5683:2:750
-5684:0:2565
-5685:2:753
-5686:0:2565
-5687:3:2104
-5688:0:2565
-5689:3:2105
-5690:3:2109
-5691:3:2110
-5692:3:2118
-5693:3:2119
-5694:3:2123
-5695:3:2124
-5696:3:2132
-5697:3:2137
-5698:3:2141
-5699:3:2142
-5700:3:2149
-5701:3:2150
-5702:3:2161
-5703:3:2169
-5704:3:2170
-5705:3:2174
-5706:3:2179
-5707:3:2180
-5708:0:2565
-5709:3:2192
-5710:0:2565
-5711:3:2013
-5712:0:2565
-5713:3:2014
-5714:0:2565
-5715:3:2015
-5716:3:2019
-5717:3:2020
-5718:3:2028
-5719:3:2029
-5720:3:2033
-5721:3:2034
-5722:3:2042
-5723:3:2047
-5724:3:2051
-5725:3:2052
-5726:3:2059
-5727:3:2060
-5728:3:2071
-5729:3:2079
-5730:3:2080
-5731:3:2084
-5732:3:2089
-5733:3:2090
-5734:0:2565
-5735:2:758
-5736:0:2565
-5737:3:2102
-5738:0:2565
-5739:3:2104
-5740:0:2565
-5741:3:2105
-5742:3:2109
-5743:3:2110
-5744:3:2118
-5745:3:2119
-5746:3:2123
-5747:3:2124
-5748:3:2132
-5749:3:2137
-5750:3:2141
-5751:3:2142
-5752:3:2149
-5753:3:2150
-5754:3:2161
-5755:3:2169
-5756:3:2170
-5757:3:2174
-5758:3:2179
-5759:3:2180
-5760:0:2565
-5761:3:2192
-5762:0:2565
-5763:3:2013
-5764:0:2565
-5765:3:2014
-5766:0:2565
-5767:2:759
-5768:0:2565
-5769:3:2015
-5770:3:2019
-5771:3:2020
-5772:3:2028
-5773:3:2029
-5774:3:2033
-5775:3:2034
-5776:3:2042
-5777:3:2047
-5778:3:2051
-5779:3:2052
-5780:3:2059
-5781:3:2060
-5782:3:2071
-5783:3:2079
-5784:3:2080
-5785:3:2084
-5786:3:2089
-5787:3:2090
-5788:0:2565
-5789:3:2102
-5790:0:2565
-5791:3:2104
-5792:0:2565
-5793:3:2105
-5794:3:2109
-5795:3:2110
-5796:3:2118
-5797:3:2119
-5798:3:2123
-5799:3:2124
-5800:3:2132
-5801:3:2137
-5802:3:2141
-5803:3:2142
-5804:3:2149
-5805:3:2150
-5806:3:2161
-5807:3:2169
-5808:3:2170
-5809:3:2174
-5810:3:2179
-5811:3:2180
-5812:0:2565
-5813:3:2192
-5814:0:2565
-5815:3:2013
-5816:0:2565
-5817:2:760
-5818:0:2565
-5819:2:761
-5820:0:2565
-5821:2:762
-5822:0:2565
-5823:2:763
-5824:0:2565
-5825:3:2014
-5826:0:2565
-5827:3:2015
-5828:3:2019
-5829:3:2020
-5830:3:2028
-5831:3:2029
-5832:3:2033
-5833:3:2034
-5834:3:2042
-5835:3:2047
-5836:3:2051
-5837:3:2052
-5838:3:2059
-5839:3:2060
-5840:3:2071
-5841:3:2079
-5842:3:2080
-5843:3:2084
-5844:3:2089
-5845:3:2090
-5846:0:2565
-5847:3:2102
-5848:0:2565
-5849:3:2104
-5850:0:2565
-5851:3:2105
-5852:3:2109
-5853:3:2110
-5854:3:2118
-5855:3:2119
-5856:3:2123
-5857:3:2124
-5858:3:2132
-5859:3:2137
-5860:3:2141
-5861:3:2142
-5862:3:2149
-5863:3:2150
-5864:3:2161
-5865:3:2169
-5866:3:2170
-5867:3:2174
-5868:3:2179
-5869:3:2180
-5870:0:2565
-5871:3:2192
-5872:0:2565
-5873:2:765
-5874:0:2565
-5875:3:2013
-5876:0:2565
-5877:3:2014
-5878:0:2565
-5879:3:2015
-5880:3:2019
-5881:3:2020
-5882:3:2028
-5883:3:2029
-5884:3:2033
-5885:3:2034
-5886:3:2042
-5887:3:2047
-5888:3:2051
-5889:3:2052
-5890:3:2059
-5891:3:2060
-5892:3:2071
-5893:3:2079
-5894:3:2080
-5895:3:2084
-5896:3:2089
-5897:3:2090
-5898:0:2565
-5899:3:2102
-5900:0:2565
-5901:3:2104
-5902:0:2565
-5903:3:2105
-5904:3:2109
-5905:3:2110
-5906:3:2118
-5907:3:2119
-5908:3:2123
-5909:3:2124
-5910:3:2132
-5911:3:2137
-5912:3:2141
-5913:3:2142
-5914:3:2149
-5915:3:2150
-5916:3:2161
-5917:3:2169
-5918:3:2170
-5919:3:2174
-5920:3:2179
-5921:3:2180
-5922:0:2565
-5923:2:766
-5924:2:770
-5925:2:771
-5926:2:779
-5927:2:780
-5928:2:781
-5929:2:793
-5930:2:798
-5931:2:802
-5932:2:803
-5933:2:810
-5934:2:811
-5935:2:822
-5936:2:823
-5937:2:824
-5938:2:835
-5939:2:840
-5940:2:841
-5941:0:2565
-5942:3:2192
-5943:0:2565
-5944:3:2013
-5945:0:2565
-5946:3:2014
-5947:0:2565
-5948:3:2015
-5949:3:2019
-5950:3:2020
-5951:3:2028
-5952:3:2029
-5953:3:2033
-5954:3:2034
-5955:3:2042
-5956:3:2047
-5957:3:2051
-5958:3:2052
-5959:3:2059
-5960:3:2060
-5961:3:2071
-5962:3:2079
-5963:3:2080
-5964:3:2084
-5965:3:2089
-5966:3:2090
-5967:0:2565
-5968:3:2102
-5969:0:2565
-5970:3:2104
-5971:0:2565
-5972:2:853
-5973:0:2565
-5974:2:857
-5975:0:2565
-5976:2:465
-5977:0:2565
-5978:3:2105
-5979:3:2109
-5980:3:2110
-5981:3:2118
-5982:3:2119
-5983:3:2123
-5984:3:2124
-5985:3:2132
-5986:3:2137
-5987:3:2141
-5988:3:2142
-5989:3:2149
-5990:3:2150
-5991:3:2161
-5992:3:2169
-5993:3:2170
-5994:3:2174
-5995:3:2179
-5996:3:2180
-5997:0:2565
-5998:3:2192
-5999:0:2565
-6000:3:2013
-6001:0:2565
-6002:3:2014
-6003:0:2565
-6004:3:2015
-6005:3:2019
-6006:3:2020
-6007:3:2028
-6008:3:2029
-6009:3:2033
-6010:3:2034
-6011:3:2042
-6012:3:2047
-6013:3:2051
-6014:3:2052
-6015:3:2059
-6016:3:2060
-6017:3:2071
-6018:3:2079
-6019:3:2080
-6020:3:2084
-6021:3:2089
-6022:3:2090
-6023:0:2565
-6024:3:2102
-6025:0:2565
-6026:2:466
-6027:0:2565
-6028:3:2104
-6029:0:2565
-6030:3:2105
-6031:3:2109
-6032:3:2110
-6033:3:2118
-6034:3:2119
-6035:3:2123
-6036:3:2124
-6037:3:2132
-6038:3:2137
-6039:3:2141
-6040:3:2142
-6041:3:2149
-6042:3:2150
-6043:3:2161
-6044:3:2169
-6045:3:2170
-6046:3:2174
-6047:3:2179
-6048:3:2180
-6049:0:2565
-6050:3:2192
-6051:0:2565
-6052:3:2013
-6053:0:2565
-6054:3:2014
-6055:0:2565
-6056:3:2015
-6057:3:2019
-6058:3:2020
-6059:3:2028
-6060:3:2029
-6061:3:2033
-6062:3:2034
-6063:3:2042
-6064:3:2047
-6065:3:2051
-6066:3:2052
-6067:3:2059
-6068:3:2060
-6069:3:2071
-6070:3:2079
-6071:3:2080
-6072:3:2084
-6073:3:2089
-6074:3:2090
-6075:0:2565
-6076:2:467
-6077:0:2565
-6078:3:2102
-6079:0:2565
-6080:3:2104
-6081:0:2565
-6082:3:2105
-6083:3:2109
-6084:3:2110
-6085:3:2118
-6086:3:2119
-6087:3:2123
-6088:3:2124
-6089:3:2132
-6090:3:2137
-6091:3:2141
-6092:3:2142
-6093:3:2149
-6094:3:2150
-6095:3:2161
-6096:3:2169
-6097:3:2170
-6098:3:2174
-6099:3:2179
-6100:3:2180
-6101:0:2565
-6102:3:2192
-6103:0:2565
-6104:3:2013
-6105:0:2565
-6106:3:2014
-6107:0:2565
-6108:1:436
-6109:0:2565
-6110:2:468
-6111:0:2565
-6112:3:2015
-6113:3:2019
-6114:3:2020
-6115:3:2028
-6116:3:2029
-6117:3:2033
-6118:3:2034
-6119:3:2042
-6120:3:2047
-6121:3:2051
-6122:3:2052
-6123:3:2059
-6124:3:2060
-6125:3:2071
-6126:3:2079
-6127:3:2080
-6128:3:2084
-6129:3:2089
-6130:3:2090
-6131:0:2565
-6132:3:2102
-6133:0:2565
-6134:3:2104
-6135:0:2565
-6136:3:2105
-6137:3:2109
-6138:3:2110
-6139:3:2118
-6140:3:2119
-6141:3:2123
-6142:3:2124
-6143:3:2132
-6144:3:2137
-6145:3:2141
-6146:3:2142
-6147:3:2149
-6148:3:2150
-6149:3:2161
-6150:3:2169
-6151:3:2170
-6152:3:2174
-6153:3:2179
-6154:3:2180
-6155:0:2565
-6156:3:2192
-6157:0:2565
-6158:3:2013
-6159:0:2565
-6160:3:2014
-6161:0:2565
-6162:2:467
-6163:0:2565
-6164:2:468
-6165:0:2565
-6166:3:2015
-6167:3:2019
-6168:3:2020
-6169:3:2028
-6170:3:2029
-6171:3:2033
-6172:3:2034
-6173:3:2042
-6174:3:2047
-6175:3:2051
-6176:3:2052
-6177:3:2059
-6178:3:2060
-6179:3:2071
-6180:3:2079
-6181:3:2080
-6182:3:2084
-6183:3:2089
-6184:3:2090
-6185:0:2565
-6186:3:2102
-6187:0:2565
-6188:3:2104
-6189:0:2565
-6190:3:2105
-6191:3:2109
-6192:3:2110
-6193:3:2118
-6194:3:2119
-6195:3:2123
-6196:3:2124
-6197:3:2132
-6198:3:2137
-6199:3:2141
-6200:3:2142
-6201:3:2149
-6202:3:2150
-6203:3:2161
-6204:3:2169
-6205:3:2170
-6206:3:2174
-6207:3:2179
-6208:3:2180
-6209:0:2565
-6210:3:2192
-6211:0:2565
-6212:3:2013
-6213:0:2565
-6214:2:467
-6215:0:2565
-6216:1:442
-6217:0:2565
-6218:2:468
-6219:0:2565
-6220:1:446
-6221:0:2565
-6222:1:9
-6223:0:2565
-6224:1:10
-6225:0:2565
-6226:1:11
-6227:0:2565
-6228:3:2014
-6229:0:2565
-6230:3:2015
-6231:3:2019
-6232:3:2020
-6233:3:2028
-6234:3:2029
-6235:3:2033
-6236:3:2034
-6237:3:2042
-6238:3:2047
-6239:3:2051
-6240:3:2052
-6241:3:2059
-6242:3:2060
-6243:3:2071
-6244:3:2079
-6245:3:2080
-6246:3:2084
-6247:3:2089
-6248:3:2090
-6249:0:2565
-6250:3:2102
-6251:0:2565
-6252:3:2104
-6253:0:2565
-6254:3:2105
-6255:3:2109
-6256:3:2110
-6257:3:2118
-6258:3:2119
-6259:3:2123
-6260:3:2124
-6261:3:2132
-6262:3:2137
-6263:3:2141
-6264:3:2142
-6265:3:2149
-6266:3:2150
-6267:3:2161
-6268:3:2169
-6269:3:2170
-6270:3:2174
-6271:3:2179
-6272:3:2180
-6273:0:2565
-6274:3:2192
-6275:0:2565
-6276:3:2013
-6277:0:2565
-6278:2:467
-6279:0:2565
-6280:2:468
-6281:0:2565
-6282:3:2014
-6283:0:2565
-6284:3:2015
-6285:3:2019
-6286:3:2020
-6287:3:2028
-6288:3:2029
-6289:3:2033
-6290:3:2034
-6291:3:2042
-6292:3:2047
-6293:3:2051
-6294:3:2052
-6295:3:2059
-6296:3:2060
-6297:3:2071
-6298:3:2079
-6299:3:2080
-6300:3:2084
-6301:3:2089
-6302:3:2090
-6303:0:2565
-6304:3:2102
-6305:0:2565
-6306:3:2104
-6307:0:2565
-6308:3:2105
-6309:3:2109
-6310:3:2110
-6311:3:2118
-6312:3:2119
-6313:3:2123
-6314:3:2124
-6315:3:2132
-6316:3:2137
-6317:3:2141
-6318:3:2142
-6319:3:2149
-6320:3:2150
-6321:3:2161
-6322:3:2169
-6323:3:2170
-6324:3:2174
-6325:3:2179
-6326:3:2180
-6327:0:2565
-6328:3:2192
-6329:0:2565
-6330:2:467
-6331:0:2565
-6332:1:12
-6333:1:16
-6334:1:17
-6335:1:25
-6336:1:26
-6337:1:27
-6338:1:39
-6339:1:44
-6340:1:48
-6341:1:49
-6342:1:56
-6343:1:57
-6344:1:68
-6345:1:69
-6346:1:70
-6347:1:81
-6348:1:86
-6349:1:87
-6350:0:2565
-6351:3:2013
-6352:0:2565
-6353:2:468
-6354:0:2565
-6355:3:2014
-6356:0:2565
-6357:3:2015
-6358:3:2019
-6359:3:2020
-6360:3:2028
-6361:3:2029
-6362:3:2033
-6363:3:2034
-6364:3:2042
-6365:3:2047
-6366:3:2051
-6367:3:2052
-6368:3:2059
-6369:3:2060
-6370:3:2071
-6371:3:2079
-6372:3:2080
-6373:3:2084
-6374:3:2089
-6375:3:2090
-6376:0:2565
-6377:3:2102
-6378:0:2565
-6379:3:2104
-6380:0:2565
-6381:3:2105
-6382:3:2109
-6383:3:2110
-6384:3:2118
-6385:3:2119
-6386:3:2123
-6387:3:2124
-6388:3:2132
-6389:3:2137
-6390:3:2141
-6391:3:2142
-6392:3:2149
-6393:3:2150
-6394:3:2161
-6395:3:2169
-6396:3:2170
-6397:3:2174
-6398:3:2179
-6399:3:2180
-6400:0:2565
-6401:3:2192
-6402:0:2565
-6403:2:467
-6404:0:2565
-6405:3:2013
-6406:0:2565
-6407:3:2014
-6408:0:2565
-6409:3:2015
-6410:3:2019
-6411:3:2020
-6412:3:2028
-6413:3:2029
-6414:3:2033
-6415:3:2034
-6416:3:2042
-6417:3:2047
-6418:3:2051
-6419:3:2052
-6420:3:2059
-6421:3:2060
-6422:3:2071
-6423:3:2079
-6424:3:2080
-6425:3:2084
-6426:3:2089
-6427:3:2090
-6428:0:2565
-6429:3:2102
-6430:0:2565
-6431:3:2104
-6432:0:2565
-6433:3:2105
-6434:3:2109
-6435:3:2110
-6436:3:2118
-6437:3:2119
-6438:3:2123
-6439:3:2124
-6440:3:2132
-6441:3:2137
-6442:3:2141
-6443:3:2142
-6444:3:2149
-6445:3:2150
-6446:3:2161
-6447:3:2169
-6448:3:2170
-6449:3:2174
-6450:3:2179
-6451:3:2180
-6452:0:2565
-6453:1:99
-6454:0:2565
-6455:3:2192
-6456:0:2565
-6457:3:2013
-6458:0:2565
-6459:2:468
-6460:0:2565
-6461:3:2014
-6462:0:2565
-6463:3:2015
-6464:3:2019
-6465:3:2020
-6466:3:2028
-6467:3:2029
-6468:3:2033
-6469:3:2034
-6470:3:2042
-6471:3:2047
-6472:3:2051
-6473:3:2052
-6474:3:2059
-6475:3:2060
-6476:3:2071
-6477:3:2079
-6478:3:2080
-6479:3:2084
-6480:3:2089
-6481:3:2090
-6482:0:2565
-6483:3:2102
-6484:0:2565
-6485:3:2104
-6486:0:2565
-6487:3:2105
-6488:3:2109
-6489:3:2110
-6490:3:2118
-6491:3:2119
-6492:3:2123
-6493:3:2124
-6494:3:2132
-6495:3:2137
-6496:3:2141
-6497:3:2142
-6498:3:2149
-6499:3:2150
-6500:3:2161
-6501:3:2169
-6502:3:2170
-6503:3:2174
-6504:3:2179
-6505:3:2180
-6506:0:2565
-6507:3:2192
-6508:0:2565
-6509:2:469
-6510:0:2565
-6511:3:2013
-6512:0:2565
-6513:2:475
-6514:0:2565
-6515:2:476
-6516:0:2565
-6517:3:2014
-6518:0:2565
-6519:3:2015
-6520:3:2019
-6521:3:2020
-6522:3:2028
-6523:3:2029
-6524:3:2033
-6525:3:2034
-6526:3:2042
-6527:3:2047
-6528:3:2051
-6529:3:2052
-6530:3:2059
-6531:3:2060
-6532:3:2071
-6533:3:2079
-6534:3:2080
-6535:3:2084
-6536:3:2089
-6537:3:2090
-6538:0:2565
-6539:3:2102
-6540:0:2565
-6541:3:2104
-6542:0:2565
-6543:3:2105
-6544:3:2109
-6545:3:2110
-6546:3:2118
-6547:3:2119
-6548:3:2123
-6549:3:2124
-6550:3:2132
-6551:3:2137
-6552:3:2141
-6553:3:2142
-6554:3:2149
-6555:3:2150
-6556:3:2161
-6557:3:2169
-6558:3:2170
-6559:3:2174
-6560:3:2179
-6561:3:2180
-6562:0:2565
-6563:3:2192
-6564:0:2565
-6565:2:477
-6566:2:481
-6567:2:482
-6568:2:490
-6569:2:491
-6570:2:495
-6571:2:496
-6572:2:504
-6573:2:509
-6574:2:513
-6575:2:514
-6576:2:521
-6577:2:522
-6578:2:533
-6579:2:534
-6580:2:535
-6581:2:546
-6582:2:551
-6583:2:552
-6584:0:2565
-6585:3:2013
-6586:0:2565
-6587:3:2014
-6588:0:2565
-6589:3:2015
-6590:3:2019
-6591:3:2020
-6592:3:2028
-6593:3:2029
-6594:3:2033
-6595:3:2034
-6596:3:2042
-6597:3:2047
-6598:3:2051
-6599:3:2052
-6600:3:2059
-6601:3:2060
-6602:3:2071
-6603:3:2079
-6604:3:2080
-6605:3:2084
-6606:3:2089
-6607:3:2090
-6608:0:2565
-6609:3:2102
-6610:0:2565
-6611:3:2104
-6612:0:2565
-6613:3:2105
-6614:3:2109
-6615:3:2110
-6616:3:2118
-6617:3:2119
-6618:3:2123
-6619:3:2124
-6620:3:2132
-6621:3:2137
-6622:3:2141
-6623:3:2142
-6624:3:2149
-6625:3:2150
-6626:3:2161
-6627:3:2169
-6628:3:2170
-6629:3:2174
-6630:3:2179
-6631:3:2180
-6632:0:2565
-6633:2:564
-6634:0:2565
-6635:3:2192
-6636:0:2565
-6637:3:2013
-6638:0:2565
-6639:3:2014
-6640:0:2565
-6641:3:2015
-6642:3:2019
-6643:3:2020
-6644:3:2028
-6645:3:2029
-6646:3:2033
-6647:3:2034
-6648:3:2042
-6649:3:2047
-6650:3:2051
-6651:3:2052
-6652:3:2059
-6653:3:2060
-6654:3:2071
-6655:3:2079
-6656:3:2080
-6657:3:2084
-6658:3:2089
-6659:3:2090
-6660:0:2565
-6661:3:2102
-6662:0:2565
-6663:3:2104
-6664:0:2565
-6665:2:565
-6666:2:569
-6667:2:570
-6668:2:578
-6669:2:579
-6670:2:583
-6671:2:584
-6672:2:592
-6673:2:597
-6674:2:601
-6675:2:602
-6676:2:609
-6677:2:610
-6678:2:621
-6679:2:622
-6680:2:623
-6681:2:634
-6682:2:639
-6683:2:640
-6684:0:2565
-6685:2:652
-6686:0:2565
-6687:3:2105
-6688:3:2109
-6689:3:2110
-6690:3:2118
-6691:3:2119
-6692:3:2123
-6693:3:2124
-6694:3:2132
-6695:3:2137
-6696:3:2141
-6697:3:2142
-6698:3:2149
-6699:3:2150
-6700:3:2161
-6701:3:2169
-6702:3:2170
-6703:3:2174
-6704:3:2179
-6705:3:2180
-6706:0:2565
-6707:3:2192
-6708:0:2565
-6709:3:2013
-6710:0:2565
-6711:3:2014
-6712:0:2565
-6713:3:2015
-6714:3:2019
-6715:3:2020
-6716:3:2028
-6717:3:2029
-6718:3:2033
-6719:3:2034
-6720:3:2042
-6721:3:2047
-6722:3:2051
-6723:3:2052
-6724:3:2059
-6725:3:2060
-6726:3:2071
-6727:3:2079
-6728:3:2080
-6729:3:2084
-6730:3:2089
-6731:3:2090
-6732:0:2565
-6733:3:2102
-6734:0:2565
-6735:2:653
-6736:0:2565
-6737:3:2104
-6738:0:2565
-6739:3:2105
-6740:3:2109
-6741:3:2110
-6742:3:2118
-6743:3:2119
-6744:3:2123
-6745:3:2124
-6746:3:2132
-6747:3:2137
-6748:3:2141
-6749:3:2142
-6750:3:2149
-6751:3:2150
-6752:3:2161
-6753:3:2169
-6754:3:2170
-6755:3:2174
-6756:3:2179
-6757:3:2180
-6758:0:2565
-6759:3:2192
-6760:0:2565
-6761:3:2013
-6762:0:2565
-6763:3:2014
-6764:0:2565
-6765:3:2015
-6766:3:2019
-6767:3:2020
-6768:3:2028
-6769:3:2029
-6770:3:2033
-6771:3:2034
-6772:3:2042
-6773:3:2047
-6774:3:2051
-6775:3:2052
-6776:3:2059
-6777:3:2060
-6778:3:2071
-6779:3:2079
-6780:3:2080
-6781:3:2084
-6782:3:2089
-6783:3:2090
-6784:0:2565
-6785:2:654
-6786:2:658
-6787:2:659
-6788:2:667
-6789:2:668
-6790:2:672
-6791:2:673
-6792:2:681
-6793:2:686
-6794:2:690
-6795:2:691
-6796:2:698
-6797:2:699
-6798:2:710
-6799:2:711
-6800:2:712
-6801:2:723
-6802:2:728
-6803:2:729
-6804:0:2565
-6805:3:2102
-6806:0:2565
-6807:3:2104
-6808:0:2565
-6809:3:2105
-6810:3:2109
-6811:3:2110
-6812:3:2118
-6813:3:2119
-6814:3:2123
-6815:3:2124
-6816:3:2132
-6817:3:2137
-6818:3:2141
-6819:3:2142
-6820:3:2149
-6821:3:2150
-6822:3:2161
-6823:3:2169
-6824:3:2170
-6825:3:2174
-6826:3:2179
-6827:3:2180
-6828:0:2565
-6829:3:2192
-6830:0:2565
-6831:3:2013
-6832:0:2565
-6833:3:2014
-6834:0:2565
-6835:2:741
-6836:0:2565
-6837:2:750
-6838:0:2565
-6839:2:753
-6840:0:2565
-6841:3:2015
-6842:3:2019
-6843:3:2020
-6844:3:2028
-6845:3:2029
-6846:3:2033
-6847:3:2034
-6848:3:2042
-6849:3:2047
-6850:3:2051
-6851:3:2052
-6852:3:2059
-6853:3:2060
-6854:3:2071
-6855:3:2079
-6856:3:2080
-6857:3:2084
-6858:3:2089
-6859:3:2090
-6860:0:2565
-6861:3:2102
-6862:0:2565
-6863:3:2104
-6864:0:2565
-6865:3:2105
-6866:3:2109
-6867:3:2110
-6868:3:2118
-6869:3:2119
-6870:3:2123
-6871:3:2124
-6872:3:2132
-6873:3:2137
-6874:3:2141
-6875:3:2142
-6876:3:2149
-6877:3:2150
-6878:3:2161
-6879:3:2169
-6880:3:2170
-6881:3:2174
-6882:3:2179
-6883:3:2180
-6884:0:2565
-6885:3:2192
-6886:0:2565
-6887:3:2013
-6888:0:2565
-6889:2:758
-6890:0:2565
-6891:3:2014
-6892:0:2565
-6893:3:2015
-6894:3:2019
-6895:3:2020
-6896:3:2028
-6897:3:2029
-6898:3:2033
-6899:3:2034
-6900:3:2042
-6901:3:2047
-6902:3:2051
-6903:3:2052
-6904:3:2059
-6905:3:2060
-6906:3:2071
-6907:3:2079
-6908:3:2080
-6909:3:2084
-6910:3:2089
-6911:3:2090
-6912:0:2565
-6913:3:2102
-6914:0:2565
-6915:3:2104
-6916:0:2565
-6917:3:2105
-6918:3:2109
-6919:3:2110
-6920:3:2118
-6921:3:2119
-6922:3:2123
-6923:3:2124
-6924:3:2132
-6925:3:2137
-6926:3:2141
-6927:3:2142
-6928:3:2149
-6929:3:2150
-6930:3:2161
-6931:3:2169
-6932:3:2170
-6933:3:2174
-6934:3:2179
-6935:3:2180
-6936:0:2565
-6937:3:2192
-6938:0:2565
-6939:2:759
-6940:0:2565
-6941:3:2013
-6942:0:2565
-6943:3:2014
-6944:0:2565
-6945:3:2015
-6946:3:2019
-6947:3:2020
-6948:3:2028
-6949:3:2029
-6950:3:2033
-6951:3:2034
-6952:3:2042
-6953:3:2047
-6954:3:2051
-6955:3:2052
-6956:3:2059
-6957:3:2060
-6958:3:2071
-6959:3:2079
-6960:3:2080
-6961:3:2084
-6962:3:2089
-6963:3:2090
-6964:0:2565
-6965:3:2102
-6966:0:2565
-6967:3:2104
-6968:0:2565
-6969:3:2105
-6970:3:2109
-6971:3:2110
-6972:3:2118
-6973:3:2119
-6974:3:2123
-6975:3:2124
-6976:3:2132
-6977:3:2137
-6978:3:2141
-6979:3:2142
-6980:3:2149
-6981:3:2150
-6982:3:2161
-6983:3:2169
-6984:3:2170
-6985:3:2174
-6986:3:2179
-6987:3:2180
-6988:0:2565
-6989:2:760
-6990:0:2565
-6991:3:2192
-6992:0:2565
-6993:3:2013
-6994:0:2565
-6995:2:761
-6996:0:2565
-6997:2:762
-6998:0:2565
-6999:2:763
-7000:0:2565
-7001:3:2014
-7002:0:2565
-7003:3:2015
-7004:3:2019
-7005:3:2020
-7006:3:2028
-7007:3:2029
-7008:3:2033
-7009:3:2034
-7010:3:2042
-7011:3:2047
-7012:3:2051
-7013:3:2052
-7014:3:2059
-7015:3:2060
-7016:3:2071
-7017:3:2079
-7018:3:2080
-7019:3:2084
-7020:3:2089
-7021:3:2090
-7022:0:2565
-7023:3:2102
-7024:0:2565
-7025:3:2104
-7026:0:2565
-7027:3:2105
-7028:3:2109
-7029:3:2110
-7030:3:2118
-7031:3:2119
-7032:3:2123
-7033:3:2124
-7034:3:2132
-7035:3:2137
-7036:3:2141
-7037:3:2142
-7038:3:2149
-7039:3:2150
-7040:3:2161
-7041:3:2169
-7042:3:2170
-7043:3:2174
-7044:3:2179
-7045:3:2180
-7046:0:2565
-7047:3:2192
-7048:0:2565
-7049:2:765
-7050:0:2565
-7051:3:2013
-7052:0:2565
-7053:3:2014
-7054:0:2565
-7055:3:2015
-7056:3:2019
-7057:3:2020
-7058:3:2028
-7059:3:2029
-7060:3:2033
-7061:3:2034
-7062:3:2042
-7063:3:2047
-7064:3:2051
-7065:3:2052
-7066:3:2059
-7067:3:2060
-7068:3:2071
-7069:3:2079
-7070:3:2080
-7071:3:2084
-7072:3:2089
-7073:3:2090
-7074:0:2565
-7075:3:2102
-7076:0:2565
-7077:3:2104
-7078:0:2565
-7079:3:2105
-7080:3:2109
-7081:3:2110
-7082:3:2118
-7083:3:2119
-7084:3:2123
-7085:3:2124
-7086:3:2132
-7087:3:2137
-7088:3:2141
-7089:3:2142
-7090:3:2149
-7091:3:2150
-7092:3:2161
-7093:3:2169
-7094:3:2170
-7095:3:2174
-7096:3:2179
-7097:3:2180
-7098:0:2565
-7099:2:766
-7100:2:770
-7101:2:771
-7102:2:779
-7103:2:780
-7104:2:781
-7105:2:793
-7106:2:798
-7107:2:802
-7108:2:803
-7109:2:810
-7110:2:811
-7111:2:822
-7112:2:823
-7113:2:824
-7114:2:835
-7115:2:840
-7116:2:841
-7117:0:2565
-7118:3:2192
-7119:0:2565
-7120:3:2013
-7121:0:2565
-7122:3:2014
-7123:0:2565
-7124:3:2015
-7125:3:2019
-7126:3:2020
-7127:3:2028
-7128:3:2029
-7129:3:2033
-7130:3:2034
-7131:3:2042
-7132:3:2047
-7133:3:2051
-7134:3:2052
-7135:3:2059
-7136:3:2060
-7137:3:2071
-7138:3:2079
-7139:3:2080
-7140:3:2084
-7141:3:2089
-7142:3:2090
-7143:0:2565
-7144:3:2102
-7145:0:2565
-7146:3:2104
-7147:0:2565
-7148:2:853
-7149:0:2565
-7150:2:857
-7151:0:2565
-7152:2:465
-7153:0:2565
-7154:3:2105
-7155:3:2109
-7156:3:2110
-7157:3:2118
-7158:3:2119
-7159:3:2123
-7160:3:2124
-7161:3:2132
-7162:3:2137
-7163:3:2141
-7164:3:2142
-7165:3:2149
-7166:3:2150
-7167:3:2161
-7168:3:2169
-7169:3:2170
-7170:3:2174
-7171:3:2179
-7172:3:2180
-7173:0:2565
-7174:3:2192
-7175:0:2565
-7176:3:2013
-7177:0:2565
-7178:3:2014
-7179:0:2565
-7180:3:2015
-7181:3:2019
-7182:3:2020
-7183:3:2028
-7184:3:2029
-7185:3:2033
-7186:3:2034
-7187:3:2042
-7188:3:2047
-7189:3:2051
-7190:3:2052
-7191:3:2059
-7192:3:2060
-7193:3:2071
-7194:3:2079
-7195:3:2080
-7196:3:2084
-7197:3:2089
-7198:3:2090
-7199:0:2565
-7200:3:2102
-7201:0:2565
-7202:2:466
-7203:0:2565
-7204:3:2104
-7205:0:2565
-7206:3:2105
-7207:3:2109
-7208:3:2110
-7209:3:2118
-7210:3:2119
-7211:3:2123
-7212:3:2124
-7213:3:2132
-7214:3:2137
-7215:3:2141
-7216:3:2142
-7217:3:2149
-7218:3:2150
-7219:3:2161
-7220:3:2169
-7221:3:2170
-7222:3:2174
-7223:3:2179
-7224:3:2180
-7225:0:2565
-7226:3:2192
-7227:0:2565
-7228:3:2013
-7229:0:2565
-7230:3:2014
-7231:0:2565
-7232:3:2015
-7233:3:2019
-7234:3:2020
-7235:3:2028
-7236:3:2029
-7237:3:2033
-7238:3:2034
-7239:3:2042
-7240:3:2047
-7241:3:2051
-7242:3:2052
-7243:3:2059
-7244:3:2060
-7245:3:2071
-7246:3:2079
-7247:3:2080
-7248:3:2084
-7249:3:2089
-7250:3:2090
-7251:0:2565
-7252:2:467
-7253:0:2565
-7254:3:2102
-7255:0:2565
-7256:3:2104
-7257:0:2565
-7258:3:2105
-7259:3:2109
-7260:3:2110
-7261:3:2118
-7262:3:2119
-7263:3:2123
-7264:3:2124
-7265:3:2132
-7266:3:2137
-7267:3:2141
-7268:3:2142
-7269:3:2149
-7270:3:2150
-7271:3:2161
-7272:3:2169
-7273:3:2170
-7274:3:2174
-7275:3:2179
-7276:3:2180
-7277:0:2565
-7278:3:2192
-7279:0:2565
-7280:3:2013
-7281:0:2565
-7282:3:2014
-7283:0:2565
-7284:1:102
-7285:0:2565
-7286:2:468
-7287:0:2565
-7288:3:2015
-7289:3:2019
-7290:3:2020
-7291:3:2028
-7292:3:2029
-7293:3:2033
-7294:3:2034
-7295:3:2042
-7296:3:2047
-7297:3:2051
-7298:3:2052
-7299:3:2059
-7300:3:2060
-7301:3:2071
-7302:3:2079
-7303:3:2080
-7304:3:2084
-7305:3:2089
-7306:3:2090
-7307:0:2565
-7308:3:2102
-7309:0:2565
-7310:3:2104
-7311:0:2565
-7312:3:2105
-7313:3:2109
-7314:3:2110
-7315:3:2118
-7316:3:2119
-7317:3:2123
-7318:3:2124
-7319:3:2132
-7320:3:2137
-7321:3:2141
-7322:3:2142
-7323:3:2149
-7324:3:2150
-7325:3:2161
-7326:3:2169
-7327:3:2170
-7328:3:2174
-7329:3:2179
-7330:3:2180
-7331:0:2565
-7332:3:2192
-7333:0:2565
-7334:3:2013
-7335:0:2565
-7336:3:2014
-7337:0:2565
-7338:2:467
-7339:0:2565
-7340:2:468
-7341:0:2565
-7342:3:2015
-7343:3:2019
-7344:3:2020
-7345:3:2028
-7346:3:2029
-7347:3:2033
-7348:3:2034
-7349:3:2042
-7350:3:2047
-7351:3:2051
-7352:3:2052
-7353:3:2059
-7354:3:2060
-7355:3:2071
-7356:3:2079
-7357:3:2080
-7358:3:2084
-7359:3:2089
-7360:3:2090
-7361:0:2565
-7362:3:2102
-7363:0:2565
-7364:3:2104
-7365:0:2565
-7366:3:2105
-7367:3:2109
-7368:3:2110
-7369:3:2118
-7370:3:2119
-7371:3:2123
-7372:3:2124
-7373:3:2132
-7374:3:2137
-7375:3:2141
-7376:3:2142
-7377:3:2149
-7378:3:2150
-7379:3:2161
-7380:3:2169
-7381:3:2170
-7382:3:2174
-7383:3:2179
-7384:3:2180
-7385:0:2565
-7386:3:2192
-7387:0:2565
-7388:3:2013
-7389:0:2565
-7390:2:467
-7391:0:2565
-7392:1:108
-7393:0:2565
-7394:2:468
-7395:0:2565
-7396:3:2014
-7397:0:2565
-7398:3:2015
-7399:3:2019
-7400:3:2020
-7401:3:2028
-7402:3:2029
-7403:3:2033
-7404:3:2034
-7405:3:2042
-7406:3:2047
-7407:3:2051
-7408:3:2052
-7409:3:2059
-7410:3:2060
-7411:3:2071
-7412:3:2079
-7413:3:2080
-7414:3:2084
-7415:3:2089
-7416:3:2090
-7417:0:2565
-7418:3:2102
-7419:0:2565
-7420:3:2104
-7421:0:2565
-7422:3:2105
-7423:3:2109
-7424:3:2110
-7425:3:2118
-7426:3:2119
-7427:3:2123
-7428:3:2124
-7429:3:2132
-7430:3:2137
-7431:3:2141
-7432:3:2142
-7433:3:2149
-7434:3:2150
-7435:3:2161
-7436:3:2169
-7437:3:2170
-7438:3:2174
-7439:3:2179
-7440:3:2180
-7441:0:2565
-7442:3:2192
-7443:0:2565
-7444:3:2013
-7445:0:2565
-7446:2:467
-7447:0:2565
-7448:2:468
-7449:0:2565
-7450:3:2014
-7451:0:2565
-7452:3:2015
-7453:3:2019
-7454:3:2020
-7455:3:2028
-7456:3:2029
-7457:3:2033
-7458:3:2034
-7459:3:2042
-7460:3:2047
-7461:3:2051
-7462:3:2052
-7463:3:2059
-7464:3:2060
-7465:3:2071
-7466:3:2079
-7467:3:2080
-7468:3:2084
-7469:3:2089
-7470:3:2090
-7471:0:2565
-7472:3:2102
-7473:0:2565
-7474:3:2104
-7475:0:2565
-7476:3:2105
-7477:3:2109
-7478:3:2110
-7479:3:2118
-7480:3:2119
-7481:3:2123
-7482:3:2124
-7483:3:2132
-7484:3:2137
-7485:3:2141
-7486:3:2142
-7487:3:2149
-7488:3:2150
-7489:3:2161
-7490:3:2169
-7491:3:2170
-7492:3:2174
-7493:3:2179
-7494:3:2180
-7495:0:2565
-7496:3:2192
-7497:0:2565
-7498:2:467
-7499:0:2565
-7500:1:109
-7501:1:113
-7502:1:114
-7503:1:122
-7504:1:123
-7505:1:124
-7506:1:136
-7507:1:141
-7508:1:145
-7509:1:146
-7510:1:153
-7511:1:154
-7512:1:165
-7513:1:166
-7514:1:167
-7515:1:178
-7516:1:183
-7517:1:184
-7518:0:2565
-7519:3:2013
-7520:0:2565
-7521:2:468
-7522:0:2565
-7523:3:2014
-7524:0:2565
-7525:3:2015
-7526:3:2019
-7527:3:2020
-7528:3:2028
-7529:3:2029
-7530:3:2033
-7531:3:2034
-7532:3:2042
-7533:3:2047
-7534:3:2051
-7535:3:2052
-7536:3:2059
-7537:3:2060
-7538:3:2071
-7539:3:2079
-7540:3:2080
-7541:3:2084
-7542:3:2089
-7543:3:2090
-7544:0:2565
-7545:3:2102
-7546:0:2565
-7547:3:2104
-7548:0:2565
-7549:3:2105
-7550:3:2109
-7551:3:2110
-7552:3:2118
-7553:3:2119
-7554:3:2123
-7555:3:2124
-7556:3:2132
-7557:3:2137
-7558:3:2141
-7559:3:2142
-7560:3:2149
-7561:3:2150
-7562:3:2161
-7563:3:2169
-7564:3:2170
-7565:3:2174
-7566:3:2179
-7567:3:2180
-7568:0:2565
-7569:3:2192
-7570:0:2565
-7571:2:467
-7572:0:2565
-7573:3:2013
-7574:0:2565
-7575:3:2014
-7576:0:2565
-7577:3:2015
-7578:3:2019
-7579:3:2020
-7580:3:2028
-7581:3:2029
-7582:3:2033
-7583:3:2034
-7584:3:2042
-7585:3:2047
-7586:3:2051
-7587:3:2052
-7588:3:2059
-7589:3:2060
-7590:3:2071
-7591:3:2079
-7592:3:2080
-7593:3:2084
-7594:3:2089
-7595:3:2090
-7596:0:2565
-7597:3:2102
-7598:0:2565
-7599:3:2104
-7600:0:2565
-7601:3:2105
-7602:3:2109
-7603:3:2110
-7604:3:2118
-7605:3:2119
-7606:3:2123
-7607:3:2124
-7608:3:2132
-7609:3:2137
-7610:3:2141
-7611:3:2142
-7612:3:2149
-7613:3:2150
-7614:3:2161
-7615:3:2169
-7616:3:2170
-7617:3:2174
-7618:3:2179
-7619:3:2180
-7620:0:2565
-7621:1:196
-7622:0:2565
-7623:3:2192
-7624:0:2565
-7625:3:2013
-7626:0:2565
-7627:2:468
-7628:0:2565
-7629:3:2014
-7630:0:2565
-7631:3:2015
-7632:3:2019
-7633:3:2020
-7634:3:2028
-7635:3:2029
-7636:3:2033
-7637:3:2034
-7638:3:2042
-7639:3:2047
-7640:3:2051
-7641:3:2052
-7642:3:2059
-7643:3:2060
-7644:3:2071
-7645:3:2079
-7646:3:2080
-7647:3:2084
-7648:3:2089
-7649:3:2090
-7650:0:2565
-7651:3:2102
-7652:0:2565
-7653:3:2104
-7654:0:2565
-7655:3:2105
-7656:3:2109
-7657:3:2110
-7658:3:2118
-7659:3:2119
-7660:3:2123
-7661:3:2124
-7662:3:2132
-7663:3:2137
-7664:3:2141
-7665:3:2142
-7666:3:2149
-7667:3:2150
-7668:3:2161
-7669:3:2169
-7670:3:2170
-7671:3:2174
-7672:3:2179
-7673:3:2180
-7674:0:2565
-7675:3:2192
-7676:0:2565
-7677:2:469
-7678:0:2565
-7679:3:2013
-7680:0:2565
-7681:2:475
-7682:0:2565
-7683:2:476
-7684:0:2565
-7685:3:2014
-7686:0:2565
-7687:3:2015
-7688:3:2019
-7689:3:2020
-7690:3:2028
-7691:3:2029
-7692:3:2033
-7693:3:2034
-7694:3:2042
-7695:3:2047
-7696:3:2051
-7697:3:2052
-7698:3:2059
-7699:3:2060
-7700:3:2071
-7701:3:2079
-7702:3:2080
-7703:3:2084
-7704:3:2089
-7705:3:2090
-7706:0:2565
-7707:3:2102
-7708:0:2565
-7709:3:2104
-7710:0:2565
-7711:3:2105
-7712:3:2109
-7713:3:2110
-7714:3:2118
-7715:3:2119
-7716:3:2123
-7717:3:2124
-7718:3:2132
-7719:3:2137
-7720:3:2141
-7721:3:2142
-7722:3:2149
-7723:3:2150
-7724:3:2161
-7725:3:2169
-7726:3:2170
-7727:3:2174
-7728:3:2179
-7729:3:2180
-7730:0:2565
-7731:3:2192
-7732:0:2565
-7733:2:477
-7734:2:481
-7735:2:482
-7736:2:490
-7737:2:491
-7738:2:495
-7739:2:496
-7740:2:504
-7741:2:509
-7742:2:513
-7743:2:514
-7744:2:521
-7745:2:522
-7746:2:533
-7747:2:534
-7748:2:535
-7749:2:546
-7750:2:551
-7751:2:552
-7752:0:2565
-7753:3:2013
-7754:0:2565
-7755:3:2014
-7756:0:2565
-7757:3:2015
-7758:3:2019
-7759:3:2020
-7760:3:2028
-7761:3:2029
-7762:3:2033
-7763:3:2034
-7764:3:2042
-7765:3:2047
-7766:3:2051
-7767:3:2052
-7768:3:2059
-7769:3:2060
-7770:3:2071
-7771:3:2079
-7772:3:2080
-7773:3:2084
-7774:3:2089
-7775:3:2090
-7776:0:2565
-7777:3:2102
-7778:0:2565
-7779:3:2104
-7780:0:2565
-7781:3:2105
-7782:3:2109
-7783:3:2110
-7784:3:2118
-7785:3:2119
-7786:3:2123
-7787:3:2124
-7788:3:2132
-7789:3:2137
-7790:3:2141
-7791:3:2142
-7792:3:2149
-7793:3:2150
-7794:3:2161
-7795:3:2169
-7796:3:2170
-7797:3:2174
-7798:3:2179
-7799:3:2180
-7800:0:2565
-7801:2:564
-7802:0:2565
-7803:3:2192
-7804:0:2565
-7805:3:2013
-7806:0:2565
-7807:3:2014
-7808:0:2565
-7809:3:2015
-7810:3:2019
-7811:3:2020
-7812:3:2028
-7813:3:2029
-7814:3:2033
-7815:3:2034
-7816:3:2042
-7817:3:2047
-7818:3:2051
-7819:3:2052
-7820:3:2059
-7821:3:2060
-7822:3:2071
-7823:3:2079
-7824:3:2080
-7825:3:2084
-7826:3:2089
-7827:3:2090
-7828:0:2565
-7829:3:2102
-7830:0:2565
-7831:3:2104
-7832:0:2565
-7833:2:565
-7834:2:569
-7835:2:570
-7836:2:578
-7837:2:579
-7838:2:583
-7839:2:584
-7840:2:592
-7841:2:597
-7842:2:601
-7843:2:602
-7844:2:609
-7845:2:610
-7846:2:621
-7847:2:622
-7848:2:623
-7849:2:634
-7850:2:639
-7851:2:640
-7852:0:2565
-7853:2:652
-7854:0:2565
-7855:3:2105
-7856:3:2109
-7857:3:2110
-7858:3:2118
-7859:3:2119
-7860:3:2123
-7861:3:2124
-7862:3:2132
-7863:3:2137
-7864:3:2141
-7865:3:2142
-7866:3:2149
-7867:3:2150
-7868:3:2161
-7869:3:2169
-7870:3:2170
-7871:3:2174
-7872:3:2179
-7873:3:2180
-7874:0:2565
-7875:3:2192
-7876:0:2565
-7877:3:2013
-7878:0:2565
-7879:3:2014
-7880:0:2565
-7881:3:2015
-7882:3:2019
-7883:3:2020
-7884:3:2028
-7885:3:2029
-7886:3:2033
-7887:3:2034
-7888:3:2042
-7889:3:2047
-7890:3:2051
-7891:3:2052
-7892:3:2059
-7893:3:2060
-7894:3:2071
-7895:3:2079
-7896:3:2080
-7897:3:2084
-7898:3:2089
-7899:3:2090
-7900:0:2565
-7901:3:2102
-7902:0:2565
-7903:2:653
-7904:0:2565
-7905:3:2104
-7906:0:2565
-7907:3:2105
-7908:3:2109
-7909:3:2110
-7910:3:2118
-7911:3:2119
-7912:3:2123
-7913:3:2124
-7914:3:2132
-7915:3:2137
-7916:3:2141
-7917:3:2142
-7918:3:2149
-7919:3:2150
-7920:3:2161
-7921:3:2169
-7922:3:2170
-7923:3:2174
-7924:3:2179
-7925:3:2180
-7926:0:2565
-7927:3:2192
-7928:0:2565
-7929:3:2013
-7930:0:2565
-7931:3:2014
-7932:0:2565
-7933:3:2015
-7934:3:2019
-7935:3:2020
-7936:3:2028
-7937:3:2029
-7938:3:2033
-7939:3:2034
-7940:3:2042
-7941:3:2047
-7942:3:2051
-7943:3:2052
-7944:3:2059
-7945:3:2060
-7946:3:2071
-7947:3:2079
-7948:3:2080
-7949:3:2084
-7950:3:2089
-7951:3:2090
-7952:0:2565
-7953:2:654
-7954:2:658
-7955:2:659
-7956:2:667
-7957:2:668
-7958:2:672
-7959:2:673
-7960:2:681
-7961:2:686
-7962:2:690
-7963:2:691
-7964:2:698
-7965:2:699
-7966:2:710
-7967:2:711
-7968:2:712
-7969:2:723
-7970:2:728
-7971:2:729
-7972:0:2565
-7973:3:2102
-7974:0:2565
-7975:3:2104
-7976:0:2565
-7977:3:2105
-7978:3:2109
-7979:3:2110
-7980:3:2118
-7981:3:2119
-7982:3:2123
-7983:3:2124
-7984:3:2132
-7985:3:2137
-7986:3:2141
-7987:3:2142
-7988:3:2149
-7989:3:2150
-7990:3:2161
-7991:3:2169
-7992:3:2170
-7993:3:2174
-7994:3:2179
-7995:3:2180
-7996:0:2565
-7997:3:2192
-7998:0:2565
-7999:3:2013
-8000:0:2565
-8001:3:2014
-8002:0:2565
-8003:2:741
-8004:0:2565
-8005:2:750
-8006:0:2565
-8007:2:753
-8008:0:2565
-8009:3:2015
-8010:3:2019
-8011:3:2020
-8012:3:2028
-8013:3:2029
-8014:3:2033
-8015:3:2034
-8016:3:2042
-8017:3:2047
-8018:3:2051
-8019:3:2052
-8020:3:2059
-8021:3:2060
-8022:3:2071
-8023:3:2079
-8024:3:2080
-8025:3:2084
-8026:3:2089
-8027:3:2090
-8028:0:2565
-8029:3:2102
-8030:0:2565
-8031:3:2104
-8032:0:2565
-8033:3:2105
-8034:3:2109
-8035:3:2110
-8036:3:2118
-8037:3:2119
-8038:3:2123
-8039:3:2124
-8040:3:2132
-8041:3:2137
-8042:3:2141
-8043:3:2142
-8044:3:2149
-8045:3:2150
-8046:3:2161
-8047:3:2169
-8048:3:2170
-8049:3:2174
-8050:3:2179
-8051:3:2180
-8052:0:2565
-8053:3:2192
-8054:0:2565
-8055:3:2013
-8056:0:2565
-8057:2:758
-8058:0:2565
-8059:3:2014
-8060:0:2565
-8061:3:2015
-8062:3:2019
-8063:3:2020
-8064:3:2028
-8065:3:2029
-8066:3:2033
-8067:3:2034
-8068:3:2042
-8069:3:2047
-8070:3:2051
-8071:3:2052
-8072:3:2059
-8073:3:2060
-8074:3:2071
-8075:3:2079
-8076:3:2080
-8077:3:2084
-8078:3:2089
-8079:3:2090
-8080:0:2565
-8081:3:2102
-8082:0:2565
-8083:3:2104
-8084:0:2565
-8085:3:2105
-8086:3:2109
-8087:3:2110
-8088:3:2118
-8089:3:2119
-8090:3:2123
-8091:3:2124
-8092:3:2132
-8093:3:2137
-8094:3:2141
-8095:3:2142
-8096:3:2149
-8097:3:2150
-8098:3:2161
-8099:3:2169
-8100:3:2170
-8101:3:2174
-8102:3:2179
-8103:3:2180
-8104:0:2565
-8105:3:2192
-8106:0:2565
-8107:2:759
-8108:0:2565
-8109:3:2013
-8110:0:2565
-8111:3:2014
-8112:0:2565
-8113:3:2015
-8114:3:2019
-8115:3:2020
-8116:3:2028
-8117:3:2029
-8118:3:2033
-8119:3:2034
-8120:3:2042
-8121:3:2047
-8122:3:2051
-8123:3:2052
-8124:3:2059
-8125:3:2060
-8126:3:2071
-8127:3:2079
-8128:3:2080
-8129:3:2084
-8130:3:2089
-8131:3:2090
-8132:0:2565
-8133:3:2102
-8134:0:2565
-8135:3:2104
-8136:0:2565
-8137:3:2105
-8138:3:2109
-8139:3:2110
-8140:3:2118
-8141:3:2119
-8142:3:2123
-8143:3:2124
-8144:3:2132
-8145:3:2137
-8146:3:2141
-8147:3:2142
-8148:3:2149
-8149:3:2150
-8150:3:2161
-8151:3:2169
-8152:3:2170
-8153:3:2174
-8154:3:2179
-8155:3:2180
-8156:0:2565
-8157:2:760
-8158:0:2565
-8159:3:2192
-8160:0:2565
-8161:3:2013
-8162:0:2565
-8163:2:761
-8164:0:2565
-8165:2:762
-8166:0:2565
-8167:2:763
-8168:0:2565
-8169:3:2014
-8170:0:2565
-8171:3:2015
-8172:3:2019
-8173:3:2020
-8174:3:2028
-8175:3:2029
-8176:3:2033
-8177:3:2034
-8178:3:2042
-8179:3:2047
-8180:3:2051
-8181:3:2052
-8182:3:2059
-8183:3:2060
-8184:3:2071
-8185:3:2079
-8186:3:2080
-8187:3:2084
-8188:3:2089
-8189:3:2090
-8190:0:2565
-8191:3:2102
-8192:0:2565
-8193:3:2104
-8194:0:2565
-8195:3:2105
-8196:3:2109
-8197:3:2110
-8198:3:2118
-8199:3:2119
-8200:3:2123
-8201:3:2124
-8202:3:2132
-8203:3:2137
-8204:3:2141
-8205:3:2142
-8206:3:2149
-8207:3:2150
-8208:3:2161
-8209:3:2169
-8210:3:2170
-8211:3:2174
-8212:3:2179
-8213:3:2180
-8214:0:2565
-8215:3:2192
-8216:0:2565
-8217:2:765
-8218:0:2565
-8219:3:2013
-8220:0:2565
-8221:3:2014
-8222:0:2565
-8223:3:2015
-8224:3:2019
-8225:3:2020
-8226:3:2028
-8227:3:2029
-8228:3:2033
-8229:3:2034
-8230:3:2042
-8231:3:2047
-8232:3:2051
-8233:3:2052
-8234:3:2059
-8235:3:2060
-8236:3:2071
-8237:3:2079
-8238:3:2080
-8239:3:2084
-8240:3:2089
-8241:3:2090
-8242:0:2565
-8243:3:2102
-8244:0:2565
-8245:3:2104
-8246:0:2565
-8247:3:2105
-8248:3:2109
-8249:3:2110
-8250:3:2118
-8251:3:2119
-8252:3:2123
-8253:3:2124
-8254:3:2132
-8255:3:2137
-8256:3:2141
-8257:3:2142
-8258:3:2149
-8259:3:2150
-8260:3:2161
-8261:3:2169
-8262:3:2170
-8263:3:2174
-8264:3:2179
-8265:3:2180
-8266:0:2565
-8267:2:766
-8268:2:770
-8269:2:771
-8270:2:779
-8271:2:780
-8272:2:781
-8273:2:793
-8274:2:798
-8275:2:802
-8276:2:803
-8277:2:810
-8278:2:811
-8279:2:822
-8280:2:823
-8281:2:824
-8282:2:835
-8283:2:840
-8284:2:841
-8285:0:2565
-8286:3:2192
-8287:0:2565
-8288:3:2013
-8289:0:2565
-8290:3:2014
-8291:0:2565
-8292:3:2015
-8293:3:2019
-8294:3:2020
-8295:3:2028
-8296:3:2029
-8297:3:2033
-8298:3:2034
-8299:3:2042
-8300:3:2047
-8301:3:2051
-8302:3:2052
-8303:3:2059
-8304:3:2060
-8305:3:2071
-8306:3:2079
-8307:3:2080
-8308:3:2084
-8309:3:2089
-8310:3:2090
-8311:0:2565
-8312:3:2102
-8313:0:2565
-8314:3:2104
-8315:0:2565
-8316:2:853
-8317:0:2565
-8318:2:857
-8319:0:2565
-8320:2:465
-8321:0:2565
-8322:3:2105
-8323:3:2109
-8324:3:2110
-8325:3:2118
-8326:3:2119
-8327:3:2123
-8328:3:2124
-8329:3:2132
-8330:3:2137
-8331:3:2141
-8332:3:2142
-8333:3:2149
-8334:3:2150
-8335:3:2161
-8336:3:2169
-8337:3:2170
-8338:3:2174
-8339:3:2179
-8340:3:2180
-8341:0:2565
-8342:3:2192
-8343:0:2565
-8344:3:2013
-8345:0:2565
-8346:3:2014
-8347:0:2565
-8348:3:2015
-8349:3:2019
-8350:3:2020
-8351:3:2028
-8352:3:2029
-8353:3:2033
-8354:3:2034
-8355:3:2042
-8356:3:2047
-8357:3:2051
-8358:3:2052
-8359:3:2059
-8360:3:2060
-8361:3:2071
-8362:3:2079
-8363:3:2080
-8364:3:2084
-8365:3:2089
-8366:3:2090
-8367:0:2565
-8368:3:2102
-8369:0:2565
-8370:2:466
-8371:0:2565
-8372:3:2104
-8373:0:2565
-8374:3:2105
-8375:3:2109
-8376:3:2110
-8377:3:2118
-8378:3:2119
-8379:3:2123
-8380:3:2124
-8381:3:2132
-8382:3:2137
-8383:3:2141
-8384:3:2142
-8385:3:2149
-8386:3:2150
-8387:3:2161
-8388:3:2169
-8389:3:2170
-8390:3:2174
-8391:3:2179
-8392:3:2180
-8393:0:2565
-8394:3:2192
-8395:0:2565
-8396:3:2013
-8397:0:2565
-8398:3:2014
-8399:0:2565
-8400:3:2015
-8401:3:2019
-8402:3:2020
-8403:3:2028
-8404:3:2029
-8405:3:2033
-8406:3:2034
-8407:3:2042
-8408:3:2047
-8409:3:2051
-8410:3:2052
-8411:3:2059
-8412:3:2060
-8413:3:2071
-8414:3:2079
-8415:3:2080
-8416:3:2084
-8417:3:2089
-8418:3:2090
-8419:0:2565
-8420:2:467
-8421:0:2565
-8422:3:2102
-8423:0:2565
-8424:3:2104
-8425:0:2565
-8426:3:2105
-8427:3:2109
-8428:3:2110
-8429:3:2118
-8430:3:2119
-8431:3:2123
-8432:3:2124
-8433:3:2132
-8434:3:2137
-8435:3:2141
-8436:3:2142
-8437:3:2149
-8438:3:2150
-8439:3:2161
-8440:3:2169
-8441:3:2170
-8442:3:2174
-8443:3:2179
-8444:3:2180
-8445:0:2565
-8446:3:2192
-8447:0:2565
-8448:3:2013
-8449:0:2565
-8450:3:2014
-8451:0:2565
-8452:1:199
-8453:0:2565
-8454:2:468
-8455:0:2565
-8456:1:205
-8457:0:2565
-8458:3:2015
-8459:3:2019
-8460:3:2020
-8461:3:2028
-8462:3:2029
-8463:3:2033
-8464:3:2034
-8465:3:2042
-8466:3:2047
-8467:3:2051
-8468:3:2052
-8469:3:2059
-8470:3:2060
-8471:3:2071
-8472:3:2079
-8473:3:2080
-8474:3:2084
-8475:3:2089
-8476:3:2090
-8477:0:2565
-8478:3:2102
-8479:0:2565
-8480:3:2104
-8481:0:2565
-8482:3:2105
-8483:3:2109
-8484:3:2110
-8485:3:2118
-8486:3:2119
-8487:3:2123
-8488:3:2124
-8489:3:2132
-8490:3:2137
-8491:3:2141
-8492:3:2142
-8493:3:2149
-8494:3:2150
-8495:3:2161
-8496:3:2169
-8497:3:2170
-8498:3:2174
-8499:3:2179
-8500:3:2180
-8501:0:2565
-8502:3:2192
-8503:0:2565
-8504:3:2013
-8505:0:2565
-8506:3:2014
-8507:0:2565
-8508:2:467
-8509:0:2565
-8510:2:468
-8511:0:2565
-8512:3:2015
-8513:3:2019
-8514:3:2020
-8515:3:2028
-8516:3:2029
-8517:3:2033
-8518:3:2034
-8519:3:2042
-8520:3:2047
-8521:3:2051
-8522:3:2052
-8523:3:2059
-8524:3:2060
-8525:3:2071
-8526:3:2079
-8527:3:2080
-8528:3:2084
-8529:3:2089
-8530:3:2090
-8531:0:2565
-8532:3:2102
-8533:0:2565
-8534:3:2104
-8535:0:2565
-8536:3:2105
-8537:3:2109
-8538:3:2110
-8539:3:2118
-8540:3:2119
-8541:3:2123
-8542:3:2124
-8543:3:2132
-8544:3:2137
-8545:3:2141
-8546:3:2142
-8547:3:2149
-8548:3:2150
-8549:3:2161
-8550:3:2169
-8551:3:2170
-8552:3:2174
-8553:3:2179
-8554:3:2180
-8555:0:2565
-8556:3:2192
-8557:0:2565
-8558:3:2013
-8559:0:2565
-8560:2:467
-8561:0:2565
-8562:1:206
-8563:0:2565
-8564:2:468
-8565:0:2565
-8566:2:467
-8567:0:2565
-8568:3:2014
-8569:0:2565
-8570:3:2015
-8571:3:2019
-8572:3:2020
-8573:3:2028
-8574:3:2029
-8575:3:2033
-8576:3:2034
-8577:3:2042
-8578:3:2047
-8579:3:2051
-8580:3:2052
-8581:3:2059
-8582:3:2060
-8583:3:2071
-8584:3:2079
-8585:3:2080
-8586:3:2084
-8587:3:2089
-8588:3:2090
-8589:0:2565
-8590:3:2102
-8591:0:2565
-8592:3:2104
-8593:0:2565
-8594:3:2105
-8595:3:2109
-8596:3:2110
-8597:3:2118
-8598:3:2119
-8599:3:2123
-8600:3:2124
-8601:3:2132
-8602:3:2137
-8603:3:2141
-8604:3:2142
-8605:3:2149
-8606:3:2150
-8607:3:2161
-8608:3:2169
-8609:3:2170
-8610:3:2174
-8611:3:2179
-8612:3:2180
-8613:0:2565
-8614:3:2192
-8615:0:2565
-8616:3:2013
-8617:0:2565
-8618:1:207
-8619:1:211
-8620:1:212
-8621:1:220
-8622:1:221
-8623:1:222
-8624:1:234
-8625:1:239
-8626:1:243
-8627:1:244
-8628:1:251
-8629:1:252
-8630:1:263
-8631:1:264
-8632:1:265
-8633:1:276
-8634:1:281
-8635:1:282
-8636:0:2565
-8637:3:2014
-8638:0:2565
-8639:3:2015
-8640:3:2019
-8641:3:2020
-8642:3:2028
-8643:3:2029
-8644:3:2033
-8645:3:2034
-8646:3:2042
-8647:3:2047
-8648:3:2051
-8649:3:2052
-8650:3:2059
-8651:3:2060
-8652:3:2071
-8653:3:2079
-8654:3:2080
-8655:3:2084
-8656:3:2089
-8657:3:2090
-8658:0:2565
-8659:1:294
-8660:0:2565
-8661:3:2102
-8662:0:2565
-8663:2:468
-8664:0:2565
-8665:3:2104
-8666:0:2565
-8667:3:2105
-8668:3:2109
-8669:3:2110
-8670:3:2118
-8671:3:2119
-8672:3:2123
-8673:3:2124
-8674:3:2132
-8675:3:2137
-8676:3:2141
-8677:3:2142
-8678:3:2149
-8679:3:2150
-8680:3:2161
-8681:3:2169
-8682:3:2170
-8683:3:2174
-8684:3:2179
-8685:3:2180
-8686:0:2565
-8687:3:2192
-8688:0:2565
-8689:3:2013
-8690:0:2565
-8691:3:2014
-8692:0:2565
-8693:3:2015
-8694:3:2019
-8695:3:2020
-8696:3:2028
-8697:3:2029
-8698:3:2033
-8699:3:2034
-8700:3:2042
-8701:3:2047
-8702:3:2051
-8703:3:2052
-8704:3:2059
-8705:3:2060
-8706:3:2071
-8707:3:2079
-8708:3:2080
-8709:3:2084
-8710:3:2089
-8711:3:2090
-8712:0:2565
-8713:2:469
-8714:0:2565
-8715:3:2102
-8716:0:2565
-8717:2:475
-8718:0:2565
-8719:3:2104
-8720:0:2565
-8721:3:2105
-8722:3:2109
-8723:3:2110
-8724:3:2118
-8725:3:2119
-8726:3:2123
-8727:3:2124
-8728:3:2132
-8729:3:2137
-8730:3:2141
-8731:3:2142
-8732:3:2149
-8733:3:2150
-8734:3:2161
-8735:3:2169
-8736:3:2170
-8737:3:2174
-8738:3:2179
-8739:3:2180
-8740:0:2565
-8741:3:2192
-8742:0:2565
-8743:3:2013
-8744:0:2565
-8745:1:295
-8746:0:2565
-8747:2:476
-8748:0:2565
-8749:1:296
-8750:0:2565
-8751:3:2014
-8752:0:2565
-8753:3:2015
-8754:3:2019
-8755:3:2020
-8756:3:2028
-8757:3:2029
-8758:3:2033
-8759:3:2034
-8760:3:2042
-8761:3:2047
-8762:3:2051
-8763:3:2052
-8764:3:2059
-8765:3:2060
-8766:3:2071
-8767:3:2079
-8768:3:2080
-8769:3:2084
-8770:3:2089
-8771:3:2090
-8772:0:2565
-8773:3:2102
-8774:0:2565
-8775:3:2104
-8776:0:2565
-8777:3:2105
-8778:3:2109
-8779:3:2110
-8780:3:2118
-8781:3:2119
-8782:3:2123
-8783:3:2124
-8784:3:2132
-8785:3:2137
-8786:3:2141
-8787:3:2142
-8788:3:2149
-8789:3:2150
-8790:3:2161
-8791:3:2169
-8792:3:2170
-8793:3:2174
-8794:3:2179
-8795:3:2180
-8796:0:2565
-8797:3:2192
-8798:0:2565
-8799:3:2013
-8800:0:2565
-8801:1:295
-8802:0:2565
-8803:3:2014
-8804:0:2565
-8805:3:2015
-8806:3:2019
-8807:3:2020
-8808:3:2028
-8809:3:2029
-8810:3:2033
-8811:3:2034
-8812:3:2042
-8813:3:2047
-8814:3:2051
-8815:3:2052
-8816:3:2059
-8817:3:2060
-8818:3:2071
-8819:3:2079
-8820:3:2080
-8821:3:2084
-8822:3:2089
-8823:3:2090
-8824:0:2565
-8825:3:2102
-8826:0:2565
-8827:3:2104
-8828:0:2565
-8829:3:2105
-8830:3:2109
-8831:3:2110
-8832:3:2118
-8833:3:2119
-8834:3:2123
-8835:3:2124
-8836:3:2132
-8837:3:2137
-8838:3:2141
-8839:3:2142
-8840:3:2149
-8841:3:2150
-8842:3:2161
-8843:3:2169
-8844:3:2170
-8845:3:2174
-8846:3:2179
-8847:3:2180
-8848:0:2565
-8849:3:2192
-8850:0:2565
-8851:2:477
-8852:2:481
-8853:2:482
-8854:2:490
-8855:2:491
-8856:2:495
-8857:2:496
-8858:2:504
-8859:2:509
-8860:2:513
-8861:2:514
-8862:2:521
-8863:2:522
-8864:2:533
-8865:2:534
-8866:2:535
-8867:2:546
-8868:2:551
-8869:2:552
-8870:0:2565
-8871:3:2013
-8872:0:2565
-8873:1:296
-8874:0:2565
-8875:3:2014
-8876:0:2565
-8877:3:2015
-8878:3:2019
-8879:3:2020
-8880:3:2028
-8881:3:2029
-8882:3:2033
-8883:3:2034
-8884:3:2042
-8885:3:2047
-8886:3:2051
-8887:3:2052
-8888:3:2059
-8889:3:2060
-8890:3:2071
-8891:3:2079
-8892:3:2080
-8893:3:2084
-8894:3:2089
-8895:3:2090
-8896:0:2565
-8897:3:2102
-8898:0:2565
-8899:3:2104
-8900:0:2565
-8901:3:2105
-8902:3:2109
-8903:3:2110
-8904:3:2118
-8905:3:2119
-8906:3:2123
-8907:3:2124
-8908:3:2132
-8909:3:2137
-8910:3:2141
-8911:3:2142
-8912:3:2149
-8913:3:2150
-8914:3:2161
-8915:3:2169
-8916:3:2170
-8917:3:2174
-8918:3:2179
-8919:3:2180
-8920:0:2565
-8921:3:2192
-8922:0:2565
-8923:3:2013
-8924:0:2565
-8925:1:295
-8926:0:2565
-8927:3:2014
-8928:0:2565
-8929:3:2015
-8930:3:2019
-8931:3:2020
-8932:3:2028
-8933:3:2029
-8934:3:2033
-8935:3:2034
-8936:3:2042
-8937:3:2047
-8938:3:2051
-8939:3:2052
-8940:3:2059
-8941:3:2060
-8942:3:2071
-8943:3:2079
-8944:3:2080
-8945:3:2084
-8946:3:2089
-8947:3:2090
-8948:0:2565
-8949:3:2102
-8950:0:2565
-8951:3:2104
-8952:0:2565
-8953:3:2105
-8954:3:2109
-8955:3:2110
-8956:3:2118
-8957:3:2119
-8958:3:2123
-8959:3:2124
-8960:3:2132
-8961:3:2137
-8962:3:2141
-8963:3:2142
-8964:3:2149
-8965:3:2150
-8966:3:2161
-8967:3:2169
-8968:3:2170
-8969:3:2174
-8970:3:2179
-8971:3:2180
-8972:0:2565
-8973:3:2192
-8974:0:2565
-8975:2:564
-8976:0:2565
-8977:3:2013
-8978:0:2565
-8979:1:296
-8980:0:2565
-8981:3:2014
-8982:0:2565
-8983:3:2015
-8984:3:2019
-8985:3:2020
-8986:3:2028
-8987:3:2029
-8988:3:2033
-8989:3:2034
-8990:3:2042
-8991:3:2047
-8992:3:2051
-8993:3:2052
-8994:3:2059
-8995:3:2060
-8996:3:2071
-8997:3:2079
-8998:3:2080
-8999:3:2084
-9000:3:2089
-9001:3:2090
-9002:0:2565
-9003:3:2102
-9004:0:2565
-9005:3:2104
-9006:0:2565
-9007:3:2105
-9008:3:2109
-9009:3:2110
-9010:3:2118
-9011:3:2119
-9012:3:2123
-9013:3:2124
-9014:3:2132
-9015:3:2137
-9016:3:2141
-9017:3:2142
-9018:3:2149
-9019:3:2150
-9020:3:2161
-9021:3:2169
-9022:3:2170
-9023:3:2174
-9024:3:2179
-9025:3:2180
-9026:0:2565
-9027:3:2192
-9028:0:2565
-9029:3:2013
-9030:0:2565
-9031:1:295
-9032:0:2565
-9033:3:2014
-9034:0:2565
-9035:3:2015
-9036:3:2019
-9037:3:2020
-9038:3:2028
-9039:3:2029
-9040:3:2033
-9041:3:2034
-9042:3:2042
-9043:3:2047
-9044:3:2051
-9045:3:2052
-9046:3:2059
-9047:3:2060
-9048:3:2071
-9049:3:2079
-9050:3:2080
-9051:3:2084
-9052:3:2089
-9053:3:2090
-9054:0:2565
-9055:3:2102
-9056:0:2565
-9057:3:2104
-9058:0:2565
-9059:3:2105
-9060:3:2109
-9061:3:2110
-9062:3:2118
-9063:3:2119
-9064:3:2123
-9065:3:2124
-9066:3:2132
-9067:3:2137
-9068:3:2141
-9069:3:2142
-9070:3:2149
-9071:3:2150
-9072:3:2161
-9073:3:2169
-9074:3:2170
-9075:3:2174
-9076:3:2179
-9077:3:2180
-9078:0:2565
-9079:3:2192
-9080:0:2565
-9081:2:565
-9082:2:569
-9083:2:570
-9084:2:578
-9085:2:579
-9086:2:583
-9087:2:584
-9088:2:592
-9089:2:597
-9090:2:601
-9091:2:602
-9092:2:609
-9093:2:610
-9094:2:621
-9095:2:622
-9096:2:623
-9097:2:634
-9098:2:639
-9099:2:640
-9100:0:2565
-9101:3:2013
-9102:0:2565
-9103:2:652
-9104:0:2565
-9105:1:296
-9106:0:2565
-9107:3:2014
-9108:0:2565
-9109:3:2015
-9110:3:2019
-9111:3:2020
-9112:3:2028
-9113:3:2029
-9114:3:2033
-9115:3:2034
-9116:3:2042
-9117:3:2047
-9118:3:2051
-9119:3:2052
-9120:3:2059
-9121:3:2060
-9122:3:2071
-9123:3:2079
-9124:3:2080
-9125:3:2084
-9126:3:2089
-9127:3:2090
-9128:0:2565
-9129:3:2102
-9130:0:2565
-9131:3:2104
-9132:0:2565
-9133:3:2105
-9134:3:2109
-9135:3:2110
-9136:3:2118
-9137:3:2119
-9138:3:2123
-9139:3:2124
-9140:3:2132
-9141:3:2137
-9142:3:2141
-9143:3:2142
-9144:3:2149
-9145:3:2150
-9146:3:2161
-9147:3:2169
-9148:3:2170
-9149:3:2174
-9150:3:2179
-9151:3:2180
-9152:0:2565
-9153:3:2192
-9154:0:2565
-9155:3:2013
-9156:0:2565
-9157:1:295
-9158:0:2565
-9159:3:2014
-9160:0:2565
-9161:3:2015
-9162:3:2019
-9163:3:2020
-9164:3:2028
-9165:3:2029
-9166:3:2033
-9167:3:2034
-9168:3:2042
-9169:3:2047
-9170:3:2051
-9171:3:2052
-9172:3:2059
-9173:3:2060
-9174:3:2071
-9175:3:2079
-9176:3:2080
-9177:3:2084
-9178:3:2089
-9179:3:2090
-9180:0:2565
-9181:3:2102
-9182:0:2565
-9183:3:2104
-9184:0:2565
-9185:3:2105
-9186:3:2109
-9187:3:2110
-9188:3:2118
-9189:3:2119
-9190:3:2123
-9191:3:2124
-9192:3:2132
-9193:3:2137
-9194:3:2141
-9195:3:2142
-9196:3:2149
-9197:3:2150
-9198:3:2161
-9199:3:2169
-9200:3:2170
-9201:3:2174
-9202:3:2179
-9203:3:2180
-9204:0:2565
-9205:3:2192
-9206:0:2565
-9207:2:653
-9208:0:2565
-9209:3:2013
-9210:0:2565
-9211:1:296
-9212:0:2565
-9213:3:2014
-9214:0:2565
-9215:3:2015
-9216:3:2019
-9217:3:2020
-9218:3:2028
-9219:3:2029
-9220:3:2033
-9221:3:2034
-9222:3:2042
-9223:3:2047
-9224:3:2051
-9225:3:2052
-9226:3:2059
-9227:3:2060
-9228:3:2071
-9229:3:2079
-9230:3:2080
-9231:3:2084
-9232:3:2089
-9233:3:2090
-9234:0:2565
-9235:3:2102
-9236:0:2565
-9237:3:2104
-9238:0:2565
-9239:3:2105
-9240:3:2109
-9241:3:2110
-9242:3:2118
-9243:3:2119
-9244:3:2123
-9245:3:2124
-9246:3:2132
-9247:3:2137
-9248:3:2141
-9249:3:2142
-9250:3:2149
-9251:3:2150
-9252:3:2161
-9253:3:2169
-9254:3:2170
-9255:3:2174
-9256:3:2179
-9257:3:2180
-9258:0:2565
-9259:3:2192
-9260:0:2565
-9261:3:2013
-9262:0:2565
-9263:1:295
-9264:0:2565
-9265:3:2014
-9266:0:2565
-9267:3:2015
-9268:3:2019
-9269:3:2020
-9270:3:2028
-9271:3:2029
-9272:3:2033
-9273:3:2034
-9274:3:2042
-9275:3:2047
-9276:3:2051
-9277:3:2052
-9278:3:2059
-9279:3:2060
-9280:3:2071
-9281:3:2079
-9282:3:2080
-9283:3:2084
-9284:3:2089
-9285:3:2090
-9286:0:2565
-9287:3:2102
-9288:0:2565
-9289:3:2104
-9290:0:2565
-9291:3:2105
-9292:3:2109
-9293:3:2110
-9294:3:2118
-9295:3:2119
-9296:3:2123
-9297:3:2124
-9298:3:2132
-9299:3:2137
-9300:3:2141
-9301:3:2142
-9302:3:2149
-9303:3:2150
-9304:3:2161
-9305:3:2169
-9306:3:2170
-9307:3:2174
-9308:3:2179
-9309:3:2180
-9310:0:2565
-9311:3:2192
-9312:0:2565
-9313:2:654
-9314:2:658
-9315:2:659
-9316:2:667
-9317:2:668
-9318:2:672
-9319:2:673
-9320:2:681
-9321:2:686
-9322:2:690
-9323:2:691
-9324:2:698
-9325:2:699
-9326:2:710
-9327:2:711
-9328:2:712
-9329:2:723
-9330:2:728
-9331:2:729
-9332:0:2565
-9333:3:2013
-9334:0:2565
-9335:1:296
-9336:0:2565
-9337:3:2014
-9338:0:2565
-9339:3:2015
-9340:3:2019
-9341:3:2020
-9342:3:2028
-9343:3:2029
-9344:3:2033
-9345:3:2034
-9346:3:2042
-9347:3:2047
-9348:3:2051
-9349:3:2052
-9350:3:2059
-9351:3:2060
-9352:3:2071
-9353:3:2079
-9354:3:2080
-9355:3:2084
-9356:3:2089
-9357:3:2090
-9358:0:2565
-9359:3:2102
-9360:0:2565
-9361:3:2104
-9362:0:2565
-9363:3:2105
-9364:3:2109
-9365:3:2110
-9366:3:2118
-9367:3:2119
-9368:3:2123
-9369:3:2124
-9370:3:2132
-9371:3:2137
-9372:3:2141
-9373:3:2142
-9374:3:2149
-9375:3:2150
-9376:3:2161
-9377:3:2169
-9378:3:2170
-9379:3:2174
-9380:3:2179
-9381:3:2180
-9382:0:2565
-9383:3:2192
-9384:0:2565
-9385:3:2013
-9386:0:2565
-9387:2:741
-9388:0:2565
-9389:2:750
-9390:0:2565
-9391:3:2014
-9392:0:2565
-9393:3:2015
-9394:3:2019
-9395:3:2020
-9396:3:2028
-9397:3:2029
-9398:3:2033
-9399:3:2034
-9400:3:2042
-9401:3:2047
-9402:3:2051
-9403:3:2052
-9404:3:2059
-9405:3:2060
-9406:3:2071
-9407:3:2079
-9408:3:2080
-9409:3:2084
-9410:3:2089
-9411:3:2090
-9412:0:2565
-9413:3:2102
-9414:0:2565
-9415:1:295
-9416:0:2565
-9417:2:753
-9418:0:2565
-9419:1:296
-9420:0:2565
-9421:3:2104
-9422:0:2565
-9423:3:2105
-9424:3:2109
-9425:3:2110
-9426:3:2118
-9427:3:2119
-9428:3:2123
-9429:3:2124
-9430:3:2132
-9431:3:2137
-9432:3:2141
-9433:3:2142
-9434:3:2149
-9435:3:2150
-9436:3:2161
-9437:3:2169
-9438:3:2170
-9439:3:2174
-9440:3:2179
-9441:3:2180
-9442:0:2565
-9443:3:2192
-9444:0:2565
-9445:3:2013
-9446:0:2565
-9447:3:2014
-9448:0:2565
-9449:3:2015
-9450:3:2019
-9451:3:2020
-9452:3:2028
-9453:3:2029
-9454:3:2033
-9455:3:2034
-9456:3:2042
-9457:3:2047
-9458:3:2051
-9459:3:2052
-9460:3:2059
-9461:3:2060
-9462:3:2071
-9463:3:2079
-9464:3:2080
-9465:3:2084
-9466:3:2089
-9467:3:2090
-9468:0:2565
-9469:3:2102
-9470:0:2565
-9471:1:295
-9472:0:2565
-9473:3:2104
-9474:0:2565
-9475:3:2105
-9476:3:2109
-9477:3:2110
-9478:3:2118
-9479:3:2119
-9480:3:2123
-9481:3:2124
-9482:3:2132
-9483:3:2137
-9484:3:2141
-9485:3:2142
-9486:3:2149
-9487:3:2150
-9488:3:2161
-9489:3:2169
-9490:3:2170
-9491:3:2174
-9492:3:2179
-9493:3:2180
-9494:0:2565
-9495:3:2192
-9496:0:2565
-9497:3:2013
-9498:0:2565
-9499:3:2014
-9500:0:2565
-9501:3:2015
-9502:3:2019
-9503:3:2020
-9504:3:2028
-9505:3:2029
-9506:3:2033
-9507:3:2034
-9508:3:2042
-9509:3:2047
-9510:3:2051
-9511:3:2052
-9512:3:2059
-9513:3:2060
-9514:3:2071
-9515:3:2079
-9516:3:2080
-9517:3:2084
-9518:3:2089
-9519:3:2090
-9520:0:2565
-9521:2:758
-9522:0:2565
-9523:3:2102
-9524:0:2565
-9525:1:296
-9526:0:2565
-9527:3:2104
-9528:0:2565
-9529:3:2105
-9530:3:2109
-9531:3:2110
-9532:3:2118
-9533:3:2119
-9534:3:2123
-9535:3:2124
-9536:3:2132
-9537:3:2137
-9538:3:2141
-9539:3:2142
-9540:3:2149
-9541:3:2150
-9542:3:2161
-9543:3:2169
-9544:3:2170
-9545:3:2174
-9546:3:2179
-9547:3:2180
-9548:0:2565
-9549:3:2192
-9550:0:2565
-9551:3:2013
-9552:0:2565
-9553:3:2014
-9554:0:2565
-9555:3:2015
-9556:3:2019
-9557:3:2020
-9558:3:2028
-9559:3:2029
-9560:3:2033
-9561:3:2034
-9562:3:2042
-9563:3:2047
-9564:3:2051
-9565:3:2052
-9566:3:2059
-9567:3:2060
-9568:3:2071
-9569:3:2079
-9570:3:2080
-9571:3:2084
-9572:3:2089
-9573:3:2090
-9574:0:2565
-9575:3:2102
-9576:0:2565
-9577:1:295
-9578:0:2565
-9579:3:2104
-9580:0:2565
-9581:3:2105
-9582:3:2109
-9583:3:2110
-9584:3:2118
-9585:3:2119
-9586:3:2123
-9587:3:2124
-9588:3:2132
-9589:3:2137
-9590:3:2141
-9591:3:2142
-9592:3:2149
-9593:3:2150
-9594:3:2161
-9595:3:2169
-9596:3:2170
-9597:3:2174
-9598:3:2179
-9599:3:2180
-9600:0:2565
-9601:3:2192
-9602:0:2565
-9603:3:2013
-9604:0:2565
-9605:3:2014
-9606:0:2565
-9607:3:2015
-9608:3:2019
-9609:3:2020
-9610:3:2028
-9611:3:2029
-9612:3:2033
-9613:3:2034
-9614:3:2042
-9615:3:2047
-9616:3:2051
-9617:3:2052
-9618:3:2059
-9619:3:2060
-9620:3:2071
-9621:3:2079
-9622:3:2080
-9623:3:2084
-9624:3:2089
-9625:3:2090
-9626:0:2565
-9627:2:759
-9628:0:2565
-9629:3:2102
-9630:0:2565
-9631:1:296
-9632:0:2565
-9633:3:2104
-9634:0:2565
-9635:3:2105
-9636:3:2109
-9637:3:2110
-9638:3:2118
-9639:3:2119
-9640:3:2123
-9641:3:2124
-9642:3:2132
-9643:3:2137
-9644:3:2141
-9645:3:2142
-9646:3:2149
-9647:3:2150
-9648:3:2161
-9649:3:2169
-9650:3:2170
-9651:3:2174
-9652:3:2179
-9653:3:2180
-9654:0:2565
-9655:3:2192
-9656:0:2565
-9657:3:2013
-9658:0:2565
-9659:3:2014
-9660:0:2565
-9661:3:2015
-9662:3:2019
-9663:3:2020
-9664:3:2028
-9665:3:2029
-9666:3:2033
-9667:3:2034
-9668:3:2042
-9669:3:2047
-9670:3:2051
-9671:3:2052
-9672:3:2059
-9673:3:2060
-9674:3:2071
-9675:3:2079
-9676:3:2080
-9677:3:2084
-9678:3:2089
-9679:3:2090
-9680:0:2565
-9681:3:2102
-9682:0:2565
-9683:2:760
-9684:0:2565
-9685:2:761
-9686:0:2565
-9687:2:762
-9688:0:2565
-9689:3:2104
-9690:0:2565
-9691:3:2105
-9692:3:2109
-9693:3:2110
-9694:3:2118
-9695:3:2119
-9696:3:2123
-9697:3:2124
-9698:3:2132
-9699:3:2137
-9700:3:2141
-9701:3:2142
-9702:3:2149
-9703:3:2150
-9704:3:2161
-9705:3:2169
-9706:3:2170
-9707:3:2174
-9708:3:2179
-9709:3:2180
-9710:0:2565
-9711:3:2192
-9712:0:2565
-9713:3:2013
-9714:0:2565
-9715:1:295
-9716:0:2565
-9717:2:763
-9718:0:2565
-9719:1:296
-9720:0:2565
-9721:3:2014
-9722:0:2565
-9723:3:2015
-9724:3:2019
-9725:3:2020
-9726:3:2028
-9727:3:2029
-9728:3:2033
-9729:3:2034
-9730:3:2042
-9731:3:2047
-9732:3:2051
-9733:3:2052
-9734:3:2059
-9735:3:2060
-9736:3:2071
-9737:3:2079
-9738:3:2080
-9739:3:2084
-9740:3:2089
-9741:3:2090
-9742:0:2565
-9743:3:2102
-9744:0:2565
-9745:3:2104
-9746:0:2565
-9747:3:2105
-9748:3:2109
-9749:3:2110
-9750:3:2118
-9751:3:2119
-9752:3:2123
-9753:3:2124
-9754:3:2132
-9755:3:2137
-9756:3:2141
-9757:3:2142
-9758:3:2149
-9759:3:2150
-9760:3:2161
-9761:3:2169
-9762:3:2170
-9763:3:2174
-9764:3:2179
-9765:3:2180
-9766:0:2565
-9767:3:2192
-9768:0:2565
-9769:3:2013
-9770:0:2565
-9771:1:295
-9772:0:2565
-9773:3:2014
-9774:0:2565
-9775:3:2015
-9776:3:2019
-9777:3:2020
-9778:3:2028
-9779:3:2029
-9780:3:2033
-9781:3:2034
-9782:3:2042
-9783:3:2047
-9784:3:2051
-9785:3:2052
-9786:3:2059
-9787:3:2060
-9788:3:2071
-9789:3:2079
-9790:3:2080
-9791:3:2084
-9792:3:2089
-9793:3:2090
-9794:0:2565
-9795:3:2102
-9796:0:2565
-9797:3:2104
-9798:0:2565
-9799:3:2105
-9800:3:2109
-9801:3:2110
-9802:3:2118
-9803:3:2119
-9804:3:2123
-9805:3:2124
-9806:3:2132
-9807:3:2137
-9808:3:2141
-9809:3:2142
-9810:3:2149
-9811:3:2150
-9812:3:2161
-9813:3:2169
-9814:3:2170
-9815:3:2174
-9816:3:2179
-9817:3:2180
-9818:0:2565
-9819:3:2192
-9820:0:2565
-9821:2:765
-9822:0:2565
-9823:3:2013
-9824:0:2565
-9825:1:296
-9826:0:2565
-9827:3:2014
-9828:0:2565
-9829:3:2015
-9830:3:2019
-9831:3:2020
-9832:3:2028
-9833:3:2029
-9834:3:2033
-9835:3:2034
-9836:3:2042
-9837:3:2047
-9838:3:2051
-9839:3:2052
-9840:3:2059
-9841:3:2060
-9842:3:2071
-9843:3:2079
-9844:3:2080
-9845:3:2084
-9846:3:2089
-9847:3:2090
-9848:0:2565
-9849:3:2102
-9850:0:2565
-9851:3:2104
-9852:0:2565
-9853:3:2105
-9854:3:2109
-9855:3:2110
-9856:3:2118
-9857:3:2119
-9858:3:2123
-9859:3:2124
-9860:3:2132
-9861:3:2137
-9862:3:2141
-9863:3:2142
-9864:3:2149
-9865:3:2150
-9866:3:2161
-9867:3:2169
-9868:3:2170
-9869:3:2174
-9870:3:2179
-9871:3:2180
-9872:0:2565
-9873:3:2192
-9874:0:2565
-9875:3:2013
-9876:0:2565
-9877:2:766
-9878:2:770
-9879:2:771
-9880:2:779
-9881:2:788
-9882:2:789
-9883:2:793
-9884:2:798
-9885:2:802
-9886:2:803
-9887:2:810
-9888:2:811
-9889:2:822
-9890:2:823
-9891:2:826
-9892:2:827
-9893:2:835
-9894:2:840
-9895:2:841
-9896:0:2565
-9897:3:2014
-9898:0:2565
-9899:3:2015
-9900:3:2019
-9901:3:2020
-9902:3:2028
-9903:3:2029
-9904:3:2033
-9905:3:2034
-9906:3:2042
-9907:3:2047
-9908:3:2051
-9909:3:2052
-9910:3:2059
-9911:3:2060
-9912:3:2071
-9913:3:2079
-9914:3:2080
-9915:3:2084
-9916:3:2089
-9917:3:2090
-9918:0:2565
-9919:3:2102
-9920:0:2565
-9921:3:2104
-9922:0:2565
-9923:3:2105
-9924:3:2109
-9925:3:2110
-9926:3:2118
-9927:3:2119
-9928:3:2123
-9929:3:2124
-9930:3:2132
-9931:3:2137
-9932:3:2141
-9933:3:2142
-9934:3:2149
-9935:3:2150
-9936:3:2161
-9937:3:2169
-9938:3:2170
-9939:3:2174
-9940:3:2179
-9941:3:2180
-9942:0:2565
-9943:3:2192
-9944:0:2565
-9945:2:853
-9946:0:2565
-9947:3:2013
-9948:0:2565
-9949:2:857
-9950:0:2565
-9951:2:465
-9952:0:2565
-9953:3:2014
-9954:0:2565
-9955:3:2015
-9956:3:2019
-9957:3:2020
-9958:3:2028
-9959:3:2029
-9960:3:2033
-9961:3:2034
-9962:3:2042
-9963:3:2047
-9964:3:2051
-9965:3:2052
-9966:3:2059
-9967:3:2060
-9968:3:2071
-9969:3:2079
-9970:3:2080
-9971:3:2084
-9972:3:2089
-9973:3:2090
-9974:0:2565
-9975:3:2102
-9976:0:2565
-9977:3:2104
-9978:0:2565
-9979:3:2105
-9980:3:2109
-9981:3:2110
-9982:3:2118
-9983:3:2119
-9984:3:2123
-9985:3:2124
-9986:3:2132
-9987:3:2137
-9988:3:2141
-9989:3:2142
-9990:3:2149
-9991:3:2150
-9992:3:2161
-9993:3:2169
-9994:3:2170
-9995:3:2174
-9996:3:2179
-9997:3:2180
-9998:0:2565
-9999:3:2192
-10000:0:2565
-10001:2:466
-10002:0:2565
-10003:3:2013
-10004:0:2565
-10005:3:2014
-10006:0:2565
-10007:3:2015
-10008:3:2019
-10009:3:2020
-10010:3:2028
-10011:3:2029
-10012:3:2033
-10013:3:2034
-10014:3:2042
-10015:3:2047
-10016:3:2051
-10017:3:2052
-10018:3:2059
-10019:3:2060
-10020:3:2071
-10021:3:2079
-10022:3:2080
-10023:3:2084
-10024:3:2089
-10025:3:2090
-10026:0:2565
-10027:3:2102
-10028:0:2565
-10029:3:2104
-10030:0:2565
-10031:3:2105
-10032:3:2109
-10033:3:2110
-10034:3:2118
-10035:3:2119
-10036:3:2123
-10037:3:2124
-10038:3:2132
-10039:3:2137
-10040:3:2141
-10041:3:2142
-10042:3:2149
-10043:3:2150
-10044:3:2161
-10045:3:2169
-10046:3:2170
-10047:3:2174
-10048:3:2179
-10049:3:2180
-10050:0:2565
-10051:2:467
-10052:0:2565
-10053:3:2192
-10054:0:2565
-10055:3:2013
-10056:0:2565
-10057:3:2014
-10058:0:2565
-10059:3:2015
-10060:3:2019
-10061:3:2020
-10062:3:2028
-10063:3:2029
-10064:3:2033
-10065:3:2034
-10066:3:2042
-10067:3:2047
-10068:3:2051
-10069:3:2052
-10070:3:2059
-10071:3:2060
-10072:3:2071
-10073:3:2079
-10074:3:2080
-10075:3:2084
-10076:3:2089
-10077:3:2090
-10078:0:2565
-10079:3:2102
-10080:0:2565
-10081:3:2104
-10082:0:2565
-10083:1:297
-10084:0:2565
-10085:2:468
-10086:0:2565
-10087:3:2105
-10088:3:2109
-10089:3:2110
-10090:3:2118
-10091:3:2119
-10092:3:2123
-10093:3:2124
-10094:3:2132
-10095:3:2137
-10096:3:2141
-10097:3:2142
-10098:3:2149
-10099:3:2150
-10100:3:2161
-10101:3:2169
-10102:3:2170
-10103:3:2174
-10104:3:2179
-10105:3:2180
-10106:0:2565
-10107:3:2192
-10108:0:2565
-10109:3:2013
-10110:0:2565
-10111:3:2014
-10112:0:2565
-10113:3:2015
-10114:3:2019
-10115:3:2020
-10116:3:2028
-10117:3:2029
-10118:3:2033
-10119:3:2034
-10120:3:2042
-10121:3:2047
-10122:3:2051
-10123:3:2052
-10124:3:2059
-10125:3:2060
-10126:3:2071
-10127:3:2079
-10128:3:2080
-10129:3:2084
-10130:3:2089
-10131:3:2090
-10132:0:2565
-10133:3:2102
-10134:0:2565
-10135:3:2104
-10136:0:2565
-10137:2:467
-10138:0:2565
-10139:2:468
-10140:0:2565
-10141:3:2105
-10142:3:2109
-10143:3:2110
-10144:3:2118
-10145:3:2119
-10146:3:2123
-10147:3:2124
-10148:3:2132
-10149:3:2137
-10150:3:2141
-10151:3:2142
-10152:3:2149
-10153:3:2150
-10154:3:2161
-10155:3:2169
-10156:3:2170
-10157:3:2174
-10158:3:2179
-10159:3:2180
-10160:0:2565
-10161:3:2192
-10162:0:2565
-10163:3:2013
-10164:0:2565
-10165:3:2014
-10166:0:2565
-10167:3:2015
-10168:3:2019
-10169:3:2020
-10170:3:2028
-10171:3:2029
-10172:3:2033
-10173:3:2034
-10174:3:2042
-10175:3:2047
-10176:3:2051
-10177:3:2052
-10178:3:2059
-10179:3:2060
-10180:3:2071
-10181:3:2079
-10182:3:2080
-10183:3:2084
-10184:3:2089
-10185:3:2090
-10186:0:2565
-10187:3:2102
-10188:0:2565
-10189:2:467
-10190:0:2565
-10191:1:303
-10192:0:2565
-10193:2:468
-10194:0:2565
-10195:1:312
-10196:0:2565
-10197:3:2104
-10198:0:2565
-10199:3:2105
-10200:3:2109
-10201:3:2110
-10202:3:2118
-10203:3:2119
-10204:3:2123
-10205:3:2124
-10206:3:2132
-10207:3:2137
-10208:3:2141
-10209:3:2142
-10210:3:2149
-10211:3:2150
-10212:3:2161
-10213:3:2169
-10214:3:2170
-10215:3:2174
-10216:3:2179
-10217:3:2180
-10218:0:2565
-10219:3:2192
-10220:0:2565
-10221:3:2013
-10222:0:2565
-10223:3:2014
-10224:0:2565
-10225:3:2015
-10226:3:2019
-10227:3:2020
-10228:3:2028
-10229:3:2029
-10230:3:2033
-10231:3:2034
-10232:3:2042
-10233:3:2047
-10234:3:2051
-10235:3:2052
-10236:3:2059
-10237:3:2060
-10238:3:2071
-10239:3:2079
-10240:3:2080
-10241:3:2084
-10242:3:2089
-10243:3:2090
-10244:0:2565
-10245:3:2102
-10246:0:2565
-10247:2:467
-10248:0:2565
-10249:2:468
-10250:0:2565
-10251:3:2104
-10252:0:2565
-10253:3:2105
-10254:3:2109
-10255:3:2110
-10256:3:2118
-10257:3:2119
-10258:3:2123
-10259:3:2124
-10260:3:2132
-10261:3:2137
-10262:3:2141
-10263:3:2142
-10264:3:2149
-10265:3:2150
-10266:3:2161
-10267:3:2169
-10268:3:2170
-10269:3:2174
-10270:3:2179
-10271:3:2180
-10272:0:2565
-10273:3:2192
-10274:0:2565
-10275:3:2013
-10276:0:2565
-10277:3:2014
-10278:0:2565
-10279:3:2015
-10280:3:2019
-10281:3:2020
-10282:3:2028
-10283:3:2029
-10284:3:2033
-10285:3:2034
-10286:3:2042
-10287:3:2047
-10288:3:2051
-10289:3:2052
-10290:3:2059
-10291:3:2060
-10292:3:2071
-10293:3:2079
-10294:3:2080
-10295:3:2084
-10296:3:2089
-10297:3:2090
-10298:0:2565
-10299:2:467
-10300:0:2565
-10301:1:314
-10302:0:2565
-10303:3:2102
-10304:0:2565
-10305:2:468
-10306:0:2565
-10307:3:2104
-10308:0:2565
-10309:3:2105
-10310:3:2109
-10311:3:2110
-10312:3:2118
-10313:3:2119
-10314:3:2123
-10315:3:2124
-10316:3:2132
-10317:3:2137
-10318:3:2141
-10319:3:2142
-10320:3:2149
-10321:3:2150
-10322:3:2161
-10323:3:2169
-10324:3:2170
-10325:3:2174
-10326:3:2179
-10327:3:2180
-10328:0:2565
-10329:3:2192
-10330:0:2565
-10331:3:2013
-10332:0:2565
-10333:3:2014
-10334:0:2565
-10335:3:2015
-10336:3:2019
-10337:3:2020
-10338:3:2028
-10339:3:2029
-10340:3:2033
-10341:3:2034
-10342:3:2042
-10343:3:2047
-10344:3:2051
-10345:3:2052
-10346:3:2059
-10347:3:2060
-10348:3:2071
-10349:3:2079
-10350:3:2080
-10351:3:2084
-10352:3:2089
-10353:3:2090
-10354:0:2565
-10355:2:469
-10356:0:2565
-10357:3:2102
-10358:0:2565
-10359:2:475
-10360:0:2565
-10361:2:476
-10362:0:2565
-10363:3:2104
-10364:0:2565
-10365:3:2105
-10366:3:2109
-10367:3:2110
-10368:3:2118
-10369:3:2119
-10370:3:2123
-10371:3:2124
-10372:3:2132
-10373:3:2137
-10374:3:2141
-10375:3:2142
-10376:3:2149
-10377:3:2150
-10378:3:2161
-10379:3:2169
-10380:3:2170
-10381:3:2174
-10382:3:2179
-10383:3:2180
-10384:0:2565
-10385:3:2192
-10386:0:2565
-10387:3:2013
-10388:0:2565
-10389:3:2014
-10390:0:2565
-10391:3:2015
-10392:3:2019
-10393:3:2020
-10394:3:2028
-10395:3:2029
-10396:3:2033
-10397:3:2034
-10398:3:2042
-10399:3:2047
-10400:3:2051
-10401:3:2052
-10402:3:2059
-10403:3:2060
-10404:3:2071
-10405:3:2079
-10406:3:2080
-10407:3:2084
-10408:3:2089
-10409:3:2090
-10410:0:2565
-10411:2:477
-10412:2:481
-10413:2:482
-10414:2:490
-10415:2:499
-10416:2:500
-10417:2:504
-10418:2:509
-10419:2:513
-10420:2:514
-10421:2:521
-10422:2:522
-10423:2:533
-10424:2:534
-10425:2:537
-10426:2:538
-10427:2:546
-10428:2:551
-10429:2:552
-10430:0:2565
-10431:3:2102
-10432:0:2565
-10433:3:2104
-10434:0:2565
-10435:3:2105
-10436:3:2109
-10437:3:2110
-10438:3:2118
-10439:3:2119
-10440:3:2123
-10441:3:2124
-10442:3:2132
-10443:3:2137
-10444:3:2141
-10445:3:2142
-10446:3:2149
-10447:3:2150
-10448:3:2161
-10449:3:2169
-10450:3:2170
-10451:3:2174
-10452:3:2179
-10453:3:2180
-10454:0:2565
-10455:3:2192
-10456:0:2565
-10457:3:2013
-10458:0:2565
-10459:3:2014
-10460:0:2565
-10461:2:564
-10462:0:2565
-10463:3:2015
-10464:3:2019
-10465:3:2020
-10466:3:2028
-10467:3:2029
-10468:3:2033
-10469:3:2034
-10470:3:2042
-10471:3:2047
-10472:3:2051
-10473:3:2052
-10474:3:2059
-10475:3:2060
-10476:3:2071
-10477:3:2079
-10478:3:2080
-10479:3:2084
-10480:3:2089
-10481:3:2090
-10482:0:2565
-10483:3:2102
-10484:0:2565
-10485:3:2104
-10486:0:2565
-10487:3:2105
-10488:3:2109
-10489:3:2110
-10490:3:2118
-10491:3:2119
-10492:3:2123
-10493:3:2124
-10494:3:2132
-10495:3:2137
-10496:3:2141
-10497:3:2142
-10498:3:2149
-10499:3:2150
-10500:3:2161
-10501:3:2169
-10502:3:2170
-10503:3:2174
-10504:3:2179
-10505:3:2180
-10506:0:2565
-10507:3:2192
-10508:0:2565
-10509:3:2013
-10510:0:2565
-10511:2:565
-10512:2:569
-10513:2:570
-10514:2:578
-10515:2:587
-10516:2:588
-10517:2:592
-10518:2:597
-10519:2:601
-10520:2:602
-10521:2:609
-10522:2:610
-10523:2:621
-10524:2:622
-10525:2:625
-10526:2:626
-10527:2:634
-10528:2:639
-10529:2:640
-10530:0:2565
-10531:2:744
-10532:0:2565
-10533:3:2014
-10534:0:2565
-10535:3:2015
-10536:3:2019
-10537:3:2020
-10538:3:2028
-10539:3:2029
-10540:3:2033
-10541:3:2034
-10542:3:2042
-10543:3:2047
-10544:3:2051
-10545:3:2052
-10546:3:2059
-10547:3:2060
-10548:3:2071
-10549:3:2079
-10550:3:2080
-10551:3:2084
-10552:3:2089
-10553:3:2090
-10554:0:2565
-10555:3:2102
-10556:0:2565
-10557:3:2104
-10558:0:2565
-10559:3:2105
-10560:3:2109
-10561:3:2110
-10562:3:2118
-10563:3:2119
-10564:3:2123
-10565:3:2124
-10566:3:2132
-10567:3:2137
-10568:3:2141
-10569:3:2142
-10570:3:2149
-10571:3:2150
-10572:3:2161
-10573:3:2169
-10574:3:2170
-10575:3:2174
-10576:3:2179
-10577:3:2180
-10578:0:2565
-10579:3:2192
-10580:0:2565
-10581:2:745
-10582:0:2565
-10583:3:2013
-10584:0:2565
-10585:2:750
-10586:0:2565
-10587:2:753
-10588:0:2565
-10589:3:2014
-10590:0:2565
-10591:3:2015
-10592:3:2019
-10593:3:2020
-10594:3:2028
-10595:3:2029
-10596:3:2033
-10597:3:2034
-10598:3:2042
-10599:3:2047
-10600:3:2051
-10601:3:2052
-10602:3:2059
-10603:3:2060
-10604:3:2071
-10605:3:2079
-10606:3:2080
-10607:3:2084
-10608:3:2089
-10609:3:2090
-10610:0:2565
-10611:3:2102
-10612:0:2565
-10613:3:2104
-10614:0:2565
-10615:3:2105
-10616:3:2109
-10617:3:2110
-10618:3:2118
-10619:3:2119
-10620:3:2123
-10621:3:2124
-10622:3:2132
-10623:3:2137
-10624:3:2141
-10625:3:2142
-10626:3:2149
-10627:3:2150
-10628:3:2161
-10629:3:2169
-10630:3:2170
-10631:3:2174
-10632:3:2179
-10633:3:2180
-10634:0:2565
-10635:3:2192
-10636:0:2565
-10637:2:758
-10638:0:2565
-10639:3:2013
-10640:0:2565
-10641:3:2014
-10642:0:2565
-10643:3:2015
-10644:3:2019
-10645:3:2020
-10646:3:2028
-10647:3:2029
-10648:3:2033
-10649:3:2034
-10650:3:2042
-10651:3:2047
-10652:3:2051
-10653:3:2052
-10654:3:2059
-10655:3:2060
-10656:3:2071
-10657:3:2079
-10658:3:2080
-10659:3:2084
-10660:3:2089
-10661:3:2090
-10662:0:2565
-10663:3:2102
-10664:0:2565
-10665:3:2104
-10666:0:2565
-10667:3:2105
-10668:3:2109
-10669:3:2110
-10670:3:2118
-10671:3:2119
-10672:3:2123
-10673:3:2124
-10674:3:2132
-10675:3:2137
-10676:3:2141
-10677:3:2142
-10678:3:2149
-10679:3:2150
-10680:3:2161
-10681:3:2169
-10682:3:2170
-10683:3:2174
-10684:3:2179
-10685:3:2180
-10686:0:2565
-10687:2:759
-10688:0:2565
-10689:3:2192
-10690:0:2565
-10691:3:2013
-10692:0:2565
-10693:3:2014
-10694:0:2565
-10695:3:2015
-10696:3:2019
-10697:3:2020
-10698:3:2028
-10699:3:2029
-10700:3:2033
-10701:3:2034
-10702:3:2042
-10703:3:2047
-10704:3:2051
-10705:3:2052
-10706:3:2059
-10707:3:2060
-10708:3:2071
-10709:3:2079
-10710:3:2080
-10711:3:2084
-10712:3:2089
-10713:3:2090
-10714:0:2565
-10715:3:2102
-10716:0:2565
-10717:3:2104
-10718:0:2565
-10719:2:760
-10720:0:2565
-10721:2:761
-10722:0:2565
-10723:2:762
-10724:0:2565
-10725:2:763
-10726:0:2565
-10727:3:2105
-10728:3:2109
-10729:3:2110
-10730:3:2118
-10731:3:2119
-10732:3:2123
-10733:3:2124
-10734:3:2132
-10735:3:2137
-10736:3:2141
-10737:3:2142
-10738:3:2149
-10739:3:2150
-10740:3:2161
-10741:3:2169
-10742:3:2170
-10743:3:2174
-10744:3:2179
-10745:3:2180
-10746:0:2565
-10747:3:2192
-10748:0:2565
-10749:3:2013
-10750:0:2565
-10751:3:2014
-10752:0:2565
-10753:3:2015
-10754:3:2019
-10755:3:2020
-10756:3:2028
-10757:3:2029
-10758:3:2033
-10759:3:2034
-10760:3:2042
-10761:3:2047
-10762:3:2051
-10763:3:2052
-10764:3:2059
-10765:3:2060
-10766:3:2071
-10767:3:2079
-10768:3:2080
-10769:3:2084
-10770:3:2089
-10771:3:2090
-10772:0:2565
-10773:3:2102
-10774:0:2565
-10775:2:765
-10776:0:2565
-10777:3:2104
-10778:0:2565
-10779:3:2105
-10780:3:2109
-10781:3:2110
-10782:3:2118
-10783:3:2119
-10784:3:2123
-10785:3:2124
-10786:3:2132
-10787:3:2137
-10788:3:2141
-10789:3:2142
-10790:3:2149
-10791:3:2150
-10792:3:2161
-10793:3:2169
-10794:3:2170
-10795:3:2174
-10796:3:2179
-10797:3:2180
-10798:0:2565
-10799:3:2192
-10800:0:2565
-10801:3:2013
-10802:0:2565
-10803:3:2014
-10804:0:2565
-10805:3:2015
-10806:3:2019
-10807:3:2020
-10808:3:2028
-10809:3:2029
-10810:3:2033
-10811:3:2034
-10812:3:2042
-10813:3:2047
-10814:3:2051
-10815:3:2052
-10816:3:2059
-10817:3:2060
-10818:3:2071
-10819:3:2079
-10820:3:2080
-10821:3:2084
-10822:3:2089
-10823:3:2090
-10824:0:2565
-10825:2:766
-10826:2:770
-10827:2:771
-10828:2:779
-10829:2:788
-10830:2:789
-10831:2:793
-10832:2:798
-10833:2:802
-10834:2:803
-10835:2:810
-10836:2:811
-10837:2:822
-10838:2:823
-10839:2:826
-10840:2:827
-10841:2:835
-10842:2:840
-10843:2:841
-10844:0:2565
-10845:3:2102
-10846:0:2565
-10847:3:2104
-10848:0:2565
-10849:3:2105
-10850:3:2109
-10851:3:2110
-10852:3:2118
-10853:3:2119
-10854:3:2123
-10855:3:2124
-10856:3:2132
-10857:3:2137
-10858:3:2141
-10859:3:2142
-10860:3:2149
-10861:3:2150
-10862:3:2161
-10863:3:2169
-10864:3:2170
-10865:3:2174
-10866:3:2179
-10867:3:2180
-10868:0:2565
-10869:3:2192
-10870:0:2565
-10871:3:2013
-10872:0:2565
-10873:3:2014
-10874:0:2565
-10875:2:853
-10876:0:2565
-10877:2:857
-10878:0:2565
-10879:2:465
-10880:0:2565
-10881:3:2015
-10882:3:2019
-10883:3:2020
-10884:3:2028
-10885:3:2029
-10886:3:2033
-10887:3:2034
-10888:3:2042
-10889:3:2047
-10890:3:2051
-10891:3:2052
-10892:3:2059
-10893:3:2060
-10894:3:2071
-10895:3:2079
-10896:3:2080
-10897:3:2084
-10898:3:2089
-10899:3:2090
-10900:0:2565
-10901:3:2102
-10902:0:2565
-10903:3:2104
-10904:0:2565
-10905:3:2105
-10906:3:2109
-10907:3:2110
-10908:3:2118
-10909:3:2119
-10910:3:2123
-10911:3:2124
-10912:3:2132
-10913:3:2137
-10914:3:2141
-10915:3:2142
-10916:3:2149
-10917:3:2150
-10918:3:2161
-10919:3:2169
-10920:3:2170
-10921:3:2174
-10922:3:2179
-10923:3:2180
-10924:0:2565
-10925:3:2192
-10926:0:2565
-10927:3:2013
-10928:0:2565
-10929:2:466
-10930:0:2565
-10931:3:2014
-10932:0:2565
-10933:3:2015
-10934:3:2019
-10935:3:2020
-10936:3:2028
-10937:3:2029
-10938:3:2033
-10939:3:2034
-10940:3:2042
-10941:3:2047
-10942:3:2051
-10943:3:2052
-10944:3:2059
-10945:3:2060
-10946:3:2071
-10947:3:2079
-10948:3:2080
-10949:3:2084
-10950:3:2089
-10951:3:2090
-10952:0:2565
-10953:3:2102
-10954:0:2565
-10955:3:2104
-10956:0:2565
-10957:3:2105
-10958:3:2109
-10959:3:2110
-10960:3:2118
-10961:3:2119
-10962:3:2123
-10963:3:2124
-10964:3:2132
-10965:3:2137
-10966:3:2141
-10967:3:2142
-10968:3:2149
-10969:3:2150
-10970:3:2161
-10971:3:2169
-10972:3:2170
-10973:3:2174
-10974:3:2179
-10975:3:2180
-10976:0:2565
-10977:3:2192
-10978:0:2565
-10979:2:467
-10980:0:2565
-10981:3:2013
-10982:0:2565
-10983:3:2014
-10984:0:2565
-10985:3:2015
-10986:3:2019
-10987:3:2020
-10988:3:2028
-10989:3:2029
-10990:3:2033
-10991:3:2034
-10992:3:2042
-10993:3:2047
-10994:3:2051
-10995:3:2052
-10996:3:2059
-10997:3:2060
-10998:3:2071
-10999:3:2079
-11000:3:2080
-11001:3:2084
-11002:3:2089
-11003:3:2090
-11004:0:2565
-11005:3:2102
-11006:0:2565
-11007:3:2104
-11008:0:2565
-11009:3:2105
-11010:3:2109
-11011:3:2110
-11012:3:2118
-11013:3:2119
-11014:3:2123
-11015:3:2124
-11016:3:2132
-11017:3:2137
-11018:3:2141
-11019:3:2142
-11020:3:2149
-11021:3:2150
-11022:3:2161
-11023:3:2169
-11024:3:2170
-11025:3:2174
-11026:3:2179
-11027:3:2180
-11028:0:2565
-11029:1:317
-11030:0:2565
-11031:3:2192
-11032:0:2565
-11033:3:2013
-11034:0:2565
-11035:2:468
-11036:0:2565
-11037:1:323
-11038:0:2565
-11039:1:324
-11040:0:2565
-11041:3:2014
-11042:0:2565
-11043:3:2015
-11044:3:2019
-11045:3:2020
-11046:3:2028
-11047:3:2029
-11048:3:2033
-11049:3:2034
-11050:3:2042
-11051:3:2047
-11052:3:2051
-11053:3:2052
-11054:3:2059
-11055:3:2060
-11056:3:2071
-11057:3:2079
-11058:3:2080
-11059:3:2084
-11060:3:2089
-11061:3:2090
-11062:0:2565
-11063:3:2102
-11064:0:2565
-11065:3:2104
-11066:0:2565
-11067:3:2105
-11068:3:2109
-11069:3:2110
-11070:3:2118
-11071:3:2119
-11072:3:2123
-11073:3:2124
-11074:3:2132
-11075:3:2137
-11076:3:2141
-11077:3:2142
-11078:3:2149
-11079:3:2150
-11080:3:2161
-11081:3:2169
-11082:3:2170
-11083:3:2174
-11084:3:2179
-11085:3:2180
-11086:0:2565
-11087:3:2192
-11088:0:2565
-11089:3:2013
-11090:0:2565
-11091:2:467
-11092:0:2565
-11093:2:468
-11094:0:2565
-11095:3:2014
-11096:0:2565
-11097:3:2015
-11098:3:2019
-11099:3:2020
-11100:3:2028
-11101:3:2029
-11102:3:2033
-11103:3:2034
-11104:3:2042
-11105:3:2047
-11106:3:2051
-11107:3:2052
-11108:3:2059
-11109:3:2060
-11110:3:2071
-11111:3:2079
-11112:3:2080
-11113:3:2084
-11114:3:2089
-11115:3:2090
-11116:0:2565
-11117:3:2102
-11118:0:2565
-11119:3:2104
-11120:0:2565
-11121:3:2105
-11122:3:2109
-11123:3:2110
-11124:3:2118
-11125:3:2119
-11126:3:2123
-11127:3:2124
-11128:3:2132
-11129:3:2137
-11130:3:2141
-11131:3:2142
-11132:3:2149
-11133:3:2150
-11134:3:2161
-11135:3:2169
-11136:3:2170
-11137:3:2174
-11138:3:2179
-11139:3:2180
-11140:0:2565
-11141:3:2192
-11142:0:2565
-11143:2:467
-11144:0:2565
-11145:1:329
-11146:0:2565
-11147:3:2013
-11148:0:2565
-11149:2:468
-11150:0:2565
-11151:3:2014
-11152:0:2565
-11153:3:2015
-11154:3:2019
-11155:3:2020
-11156:3:2028
-11157:3:2029
-11158:3:2033
-11159:3:2034
-11160:3:2042
-11161:3:2047
-11162:3:2051
-11163:3:2052
-11164:3:2059
-11165:3:2060
-11166:3:2071
-11167:3:2079
-11168:3:2080
-11169:3:2084
-11170:3:2089
-11171:3:2090
-11172:0:2565
-11173:3:2102
-11174:0:2565
-11175:3:2104
-11176:0:2565
-11177:3:2105
-11178:3:2109
-11179:3:2110
-11180:3:2118
-11181:3:2119
-11182:3:2123
-11183:3:2124
-11184:3:2132
-11185:3:2137
-11186:3:2141
-11187:3:2142
-11188:3:2149
-11189:3:2150
-11190:3:2161
-11191:3:2169
-11192:3:2170
-11193:3:2174
-11194:3:2179
-11195:3:2180
-11196:0:2565
-11197:3:2192
-11198:0:2565
-11199:2:467
-11200:0:2565
-11201:3:2013
-11202:0:2565
-11203:3:2014
-11204:0:2565
-11205:3:2015
-11206:3:2019
-11207:3:2020
-11208:3:2028
-11209:3:2029
-11210:3:2033
-11211:3:2034
-11212:3:2042
-11213:3:2047
-11214:3:2051
-11215:3:2052
-11216:3:2059
-11217:3:2060
-11218:3:2071
-11219:3:2079
-11220:3:2080
-11221:3:2084
-11222:3:2089
-11223:3:2090
-11224:0:2565
-11225:3:2102
-11226:0:2565
-11227:3:2104
-11228:0:2565
-11229:3:2105
-11230:3:2109
-11231:3:2110
-11232:3:2118
-11233:3:2119
-11234:3:2123
-11235:3:2124
-11236:3:2132
-11237:3:2137
-11238:3:2141
-11239:3:2142
-11240:3:2149
-11241:3:2150
-11242:3:2161
-11243:3:2169
-11244:3:2170
-11245:3:2174
-11246:3:2179
-11247:3:2180
-11248:0:2565
-11249:1:330
-11250:0:2565
-11251:3:2192
-11252:0:2565
-11253:3:2013
-11254:0:2565
-11255:2:468
-11256:0:2565
-11257:3:2014
-11258:0:2565
-11259:3:2015
-11260:3:2019
-11261:3:2020
-11262:3:2028
-11263:3:2029
-11264:3:2033
-11265:3:2034
-11266:3:2042
-11267:3:2047
-11268:3:2051
-11269:3:2052
-11270:3:2059
-11271:3:2060
-11272:3:2071
-11273:3:2079
-11274:3:2080
-11275:3:2084
-11276:3:2089
-11277:3:2090
-11278:0:2565
-11279:3:2102
-11280:0:2565
-11281:3:2104
-11282:0:2565
-11283:3:2105
-11284:3:2109
-11285:3:2110
-11286:3:2118
-11287:3:2119
-11288:3:2123
-11289:3:2124
-11290:3:2132
-11291:3:2137
-11292:3:2141
-11293:3:2142
-11294:3:2149
-11295:3:2150
-11296:3:2161
-11297:3:2169
-11298:3:2170
-11299:3:2174
-11300:3:2179
-11301:3:2180
-11302:0:2565
-11303:3:2192
-11304:0:2565
-11305:2:467
-11306:0:2565
-11307:3:2013
-11308:0:2565
-11309:3:2014
-11310:0:2565
-11311:3:2015
-11312:3:2019
-11313:3:2020
-11314:3:2028
-11315:3:2029
-11316:3:2033
-11317:3:2034
-11318:3:2042
-11319:3:2047
-11320:3:2051
-11321:3:2052
-11322:3:2059
-11323:3:2060
-11324:3:2071
-11325:3:2079
-11326:3:2080
-11327:3:2084
-11328:3:2089
-11329:3:2090
-11330:0:2565
-11331:3:2102
-11332:0:2565
-11333:3:2104
-11334:0:2565
-11335:3:2105
-11336:3:2109
-11337:3:2110
-11338:3:2118
-11339:3:2119
-11340:3:2123
-11341:3:2124
-11342:3:2132
-11343:3:2137
-11344:3:2141
-11345:3:2142
-11346:3:2149
-11347:3:2150
-11348:3:2161
-11349:3:2169
-11350:3:2170
-11351:3:2174
-11352:3:2179
-11353:3:2180
-11354:0:2565
-11355:1:331
-11356:0:2565
-11357:3:2192
-11358:0:2565
-11359:3:2013
-11360:0:2565
-11361:2:468
-11362:0:2565
-11363:1:332
-11364:0:2565
-11365:1:333
-11366:0:2565
-11367:1:334
-11368:0:2565
-11369:3:2014
-11370:0:2565
-11371:3:2015
-11372:3:2019
-11373:3:2020
-11374:3:2028
-11375:3:2029
-11376:3:2033
-11377:3:2034
-11378:3:2042
-11379:3:2047
-11380:3:2051
-11381:3:2052
-11382:3:2059
-11383:3:2060
-11384:3:2071
-11385:3:2079
-11386:3:2080
-11387:3:2084
-11388:3:2089
-11389:3:2090
-11390:0:2565
-11391:3:2102
-11392:0:2565
-11393:3:2104
-11394:0:2565
-11395:3:2105
-11396:3:2109
-11397:3:2110
-11398:3:2118
-11399:3:2119
-11400:3:2123
-11401:3:2124
-11402:3:2132
-11403:3:2137
-11404:3:2141
-11405:3:2142
-11406:3:2149
-11407:3:2150
-11408:3:2161
-11409:3:2169
-11410:3:2170
-11411:3:2174
-11412:3:2179
-11413:3:2180
-11414:0:2565
-11415:3:2192
-11416:0:2565
-11417:3:2013
-11418:0:2565
-11419:2:467
-11420:0:2565
-11421:2:468
-11422:0:2565
-11423:3:2014
-11424:0:2565
-11425:3:2015
-11426:3:2019
-11427:3:2020
-11428:3:2028
-11429:3:2029
-11430:3:2033
-11431:3:2034
-11432:3:2042
-11433:3:2047
-11434:3:2051
-11435:3:2052
-11436:3:2059
-11437:3:2060
-11438:3:2071
-11439:3:2079
-11440:3:2080
-11441:3:2084
-11442:3:2089
-11443:3:2090
-11444:0:2565
-11445:3:2102
-11446:0:2565
-11447:3:2104
-11448:0:2565
-11449:3:2105
-11450:3:2109
-11451:3:2110
-11452:3:2118
-11453:3:2119
-11454:3:2123
-11455:3:2124
-11456:3:2132
-11457:3:2137
-11458:3:2141
-11459:3:2142
-11460:3:2149
-11461:3:2150
-11462:3:2161
-11463:3:2169
-11464:3:2170
-11465:3:2174
-11466:3:2179
-11467:3:2180
-11468:0:2565
-11469:3:2192
-11470:0:2565
-11471:2:467
-11472:0:2565
-11473:1:336
-11474:0:2565
-11475:3:2013
-11476:0:2565
-11477:2:468
-11478:0:2565
-11479:3:2014
-11480:0:2565
-11481:3:2015
-11482:3:2019
-11483:3:2020
-11484:3:2028
-11485:3:2029
-11486:3:2033
-11487:3:2034
-11488:3:2042
-11489:3:2047
-11490:3:2051
-11491:3:2052
-11492:3:2059
-11493:3:2060
-11494:3:2071
-11495:3:2079
-11496:3:2080
-11497:3:2084
-11498:3:2089
-11499:3:2090
-11500:0:2565
-11501:3:2102
-11502:0:2565
-11503:3:2104
-11504:0:2565
-11505:3:2105
-11506:3:2109
-11507:3:2110
-11508:3:2118
-11509:3:2119
-11510:3:2123
-11511:3:2124
-11512:3:2132
-11513:3:2137
-11514:3:2141
-11515:3:2142
-11516:3:2149
-11517:3:2150
-11518:3:2161
-11519:3:2169
-11520:3:2170
-11521:3:2174
-11522:3:2179
-11523:3:2180
-11524:0:2565
-11525:3:2192
-11526:0:2565
-11527:2:469
-11528:0:2565
-11529:3:2013
-11530:0:2565
-11531:2:475
-11532:0:2565
-11533:2:476
-11534:0:2565
-11535:3:2014
-11536:0:2565
-11537:3:2015
-11538:3:2019
-11539:3:2020
-11540:3:2028
-11541:3:2029
-11542:3:2033
-11543:3:2034
-11544:3:2042
-11545:3:2047
-11546:3:2051
-11547:3:2052
-11548:3:2059
-11549:3:2060
-11550:3:2071
-11551:3:2079
-11552:3:2080
-11553:3:2084
-11554:3:2089
-11555:3:2090
-11556:0:2565
-11557:3:2102
-11558:0:2565
-11559:3:2104
-11560:0:2565
-11561:3:2105
-11562:3:2109
-11563:3:2110
-11564:3:2118
-11565:3:2119
-11566:3:2123
-11567:3:2124
-11568:3:2132
-11569:3:2137
-11570:3:2141
-11571:3:2142
-11572:3:2149
-11573:3:2150
-11574:3:2161
-11575:3:2169
-11576:3:2170
-11577:3:2174
-11578:3:2179
-11579:3:2180
-11580:0:2565
-11581:3:2192
-11582:0:2565
-11583:2:477
-11584:2:481
-11585:2:482
-11586:2:490
-11587:2:499
-11588:2:500
-11589:2:504
-11590:2:509
-11591:2:513
-11592:2:514
-11593:2:521
-11594:2:522
-11595:2:533
-11596:2:534
-11597:2:537
-11598:2:538
-11599:2:546
-11600:2:551
-11601:2:552
-11602:0:2565
-11603:3:2013
-11604:0:2565
-11605:3:2014
-11606:0:2565
-11607:3:2015
-11608:3:2019
-11609:3:2020
-11610:3:2028
-11611:3:2029
-11612:3:2033
-11613:3:2034
-11614:3:2042
-11615:3:2047
-11616:3:2051
-11617:3:2052
-11618:3:2059
-11619:3:2060
-11620:3:2071
-11621:3:2079
-11622:3:2080
-11623:3:2084
-11624:3:2089
-11625:3:2090
-11626:0:2565
-11627:3:2102
-11628:0:2565
-11629:3:2104
-11630:0:2565
-11631:3:2105
-11632:3:2109
-11633:3:2110
-11634:3:2118
-11635:3:2119
-11636:3:2123
-11637:3:2124
-11638:3:2132
-11639:3:2137
-11640:3:2141
-11641:3:2142
-11642:3:2149
-11643:3:2150
-11644:3:2161
-11645:3:2169
-11646:3:2170
-11647:3:2174
-11648:3:2179
-11649:3:2180
-11650:0:2565
-11651:2:564
-11652:0:2565
-11653:3:2192
-11654:0:2565
-11655:3:2013
-11656:0:2565
-11657:3:2014
-11658:0:2565
-11659:3:2015
-11660:3:2019
-11661:3:2020
-11662:3:2028
-11663:3:2029
-11664:3:2033
-11665:3:2034
-11666:3:2042
-11667:3:2047
-11668:3:2051
-11669:3:2052
-11670:3:2059
-11671:3:2060
-11672:3:2071
-11673:3:2079
-11674:3:2080
-11675:3:2084
-11676:3:2089
-11677:3:2090
-11678:0:2565
-11679:3:2102
-11680:0:2565
-11681:3:2104
-11682:0:2565
-11683:2:565
-11684:2:569
-11685:2:570
-11686:2:578
-11687:2:587
-11688:2:588
-11689:2:592
-11690:2:597
-11691:2:601
-11692:2:602
-11693:2:609
-11694:2:610
-11695:2:621
-11696:2:622
-11697:2:625
-11698:2:626
-11699:2:634
-11700:2:639
-11701:2:640
-11702:0:2565
-11703:2:744
-11704:0:2565
-11705:3:2105
-11706:3:2109
-11707:3:2110
-11708:3:2118
-11709:3:2119
-11710:3:2123
-11711:3:2124
-11712:3:2132
-11713:3:2137
-11714:3:2141
-11715:3:2142
-11716:3:2149
-11717:3:2150
-11718:3:2161
-11719:3:2169
-11720:3:2170
-11721:3:2174
-11722:3:2179
-11723:3:2180
-11724:0:2565
-11725:3:2192
-11726:0:2565
-11727:3:2013
-11728:0:2565
-11729:3:2014
-11730:0:2565
-11731:3:2015
-11732:3:2019
-11733:3:2020
-11734:3:2028
-11735:3:2029
-11736:3:2033
-11737:3:2034
-11738:3:2042
-11739:3:2047
-11740:3:2051
-11741:3:2052
-11742:3:2059
-11743:3:2060
-11744:3:2071
-11745:3:2079
-11746:3:2080
-11747:3:2084
-11748:3:2089
-11749:3:2090
-11750:0:2565
-11751:3:2102
-11752:0:2565
-11753:2:745
-11754:0:2565
-11755:2:750
-11756:0:2565
-11757:2:753
-11758:0:2565
-11759:3:2104
-11760:0:2565
-11761:3:2105
-11762:3:2109
-11763:3:2110
-11764:3:2118
-11765:3:2119
-11766:3:2123
-11767:3:2124
-11768:3:2132
-11769:3:2137
-11770:3:2141
-11771:3:2142
-11772:3:2149
-11773:3:2150
-11774:3:2161
-11775:3:2169
-11776:3:2170
-11777:3:2174
-11778:3:2179
-11779:3:2180
-11780:0:2565
-11781:3:2192
-11782:0:2565
-11783:3:2013
-11784:0:2565
-11785:3:2014
-11786:0:2565
-11787:3:2015
-11788:3:2019
-11789:3:2020
-11790:3:2028
-11791:3:2029
-11792:3:2033
-11793:3:2034
-11794:3:2042
-11795:3:2047
-11796:3:2051
-11797:3:2052
-11798:3:2059
-11799:3:2060
-11800:3:2071
-11801:3:2079
-11802:3:2080
-11803:3:2084
-11804:3:2089
-11805:3:2090
-11806:0:2565
-11807:2:758
-11808:0:2565
-11809:3:2102
-11810:0:2565
-11811:3:2104
-11812:0:2565
-11813:3:2105
-11814:3:2109
-11815:3:2110
-11816:3:2118
-11817:3:2119
-11818:3:2123
-11819:3:2124
-11820:3:2132
-11821:3:2137
-11822:3:2141
-11823:3:2142
-11824:3:2149
-11825:3:2150
-11826:3:2161
-11827:3:2169
-11828:3:2170
-11829:3:2174
-11830:3:2179
-11831:3:2180
-11832:0:2565
-11833:3:2192
-11834:0:2565
-11835:3:2013
-11836:0:2565
-11837:3:2014
-11838:0:2565
-11839:2:759
-11840:0:2565
-11841:3:2015
-11842:3:2019
-11843:3:2020
-11844:3:2028
-11845:3:2029
-11846:3:2033
-11847:3:2034
-11848:3:2042
-11849:3:2047
-11850:3:2051
-11851:3:2052
-11852:3:2059
-11853:3:2060
-11854:3:2071
-11855:3:2079
-11856:3:2080
-11857:3:2084
-11858:3:2089
-11859:3:2090
-11860:0:2565
-11861:3:2102
-11862:0:2565
-11863:3:2104
-11864:0:2565
-11865:3:2105
-11866:3:2109
-11867:3:2110
-11868:3:2118
-11869:3:2119
-11870:3:2123
-11871:3:2124
-11872:3:2132
-11873:3:2137
-11874:3:2141
-11875:3:2142
-11876:3:2149
-11877:3:2150
-11878:3:2161
-11879:3:2169
-11880:3:2170
-11881:3:2174
-11882:3:2179
-11883:3:2180
-11884:0:2565
-11885:3:2192
-11886:0:2565
-11887:3:2013
-11888:0:2565
-11889:2:760
-11890:0:2565
-11891:2:761
-11892:0:2565
-11893:2:762
-11894:0:2565
-11895:2:763
-11896:0:2565
-11897:3:2014
-11898:0:2565
-11899:3:2015
-11900:3:2019
-11901:3:2020
-11902:3:2028
-11903:3:2029
-11904:3:2033
-11905:3:2034
-11906:3:2042
-11907:3:2047
-11908:3:2051
-11909:3:2052
-11910:3:2059
-11911:3:2060
-11912:3:2071
-11913:3:2079
-11914:3:2080
-11915:3:2084
-11916:3:2089
-11917:3:2090
-11918:0:2565
-11919:3:2102
-11920:0:2565
-11921:3:2104
-11922:0:2565
-11923:3:2105
-11924:3:2109
-11925:3:2110
-11926:3:2118
-11927:3:2119
-11928:3:2123
-11929:3:2124
-11930:3:2132
-11931:3:2137
-11932:3:2141
-11933:3:2142
-11934:3:2149
-11935:3:2150
-11936:3:2161
-11937:3:2169
-11938:3:2170
-11939:3:2174
-11940:3:2179
-11941:3:2180
-11942:0:2565
-11943:3:2192
-11944:0:2565
-11945:2:765
-11946:0:2565
-11947:3:2013
-11948:0:2565
-11949:3:2014
-11950:0:2565
-11951:3:2015
-11952:3:2019
-11953:3:2020
-11954:3:2028
-11955:3:2029
-11956:3:2033
-11957:3:2034
-11958:3:2042
-11959:3:2047
-11960:3:2051
-11961:3:2052
-11962:3:2059
-11963:3:2060
-11964:3:2071
-11965:3:2079
-11966:3:2080
-11967:3:2084
-11968:3:2089
-11969:3:2090
-11970:0:2565
-11971:3:2102
-11972:0:2565
-11973:3:2104
-11974:0:2565
-11975:3:2105
-11976:3:2109
-11977:3:2110
-11978:3:2118
-11979:3:2119
-11980:3:2123
-11981:3:2124
-11982:3:2132
-11983:3:2137
-11984:3:2141
-11985:3:2142
-11986:3:2149
-11987:3:2150
-11988:3:2161
-11989:3:2169
-11990:3:2170
-11991:3:2174
-11992:3:2179
-11993:3:2180
-11994:0:2565
-11995:2:766
-11996:2:770
-11997:2:771
-11998:2:779
-11999:2:788
-12000:2:789
-12001:2:793
-12002:2:798
-12003:2:802
-12004:2:803
-12005:2:810
-12006:2:811
-12007:2:822
-12008:2:823
-12009:2:826
-12010:2:827
-12011:2:835
-12012:2:840
-12013:2:841
-12014:0:2565
-12015:3:2192
-12016:0:2565
-12017:3:2013
-12018:0:2565
-12019:3:2014
-12020:0:2565
-12021:3:2015
-12022:3:2019
-12023:3:2020
-12024:3:2028
-12025:3:2029
-12026:3:2033
-12027:3:2034
-12028:3:2042
-12029:3:2047
-12030:3:2051
-12031:3:2052
-12032:3:2059
-12033:3:2060
-12034:3:2071
-12035:3:2079
-12036:3:2080
-12037:3:2084
-12038:3:2089
-12039:3:2090
-12040:0:2565
-12041:3:2102
-12042:0:2565
-12043:3:2104
-12044:0:2565
-12045:2:853
-12046:0:2565
-12047:2:857
-12048:0:2565
-12049:2:465
-12050:0:2565
-12051:3:2105
-12052:3:2109
-12053:3:2110
-12054:3:2118
-12055:3:2119
-12056:3:2123
-12057:3:2124
-12058:3:2132
-12059:3:2137
-12060:3:2141
-12061:3:2142
-12062:3:2149
-12063:3:2150
-12064:3:2161
-12065:3:2169
-12066:3:2170
-12067:3:2174
-12068:3:2179
-12069:3:2180
-12070:0:2565
-12071:3:2192
-12072:0:2565
-12073:3:2013
-12074:0:2565
-12075:3:2014
-12076:0:2565
-12077:3:2015
-12078:3:2019
-12079:3:2020
-12080:3:2028
-12081:3:2029
-12082:3:2033
-12083:3:2034
-12084:3:2042
-12085:3:2047
-12086:3:2051
-12087:3:2052
-12088:3:2059
-12089:3:2060
-12090:3:2071
-12091:3:2079
-12092:3:2080
-12093:3:2084
-12094:3:2089
-12095:3:2090
-12096:0:2565
-12097:3:2102
-12098:0:2565
-12099:2:466
-12100:0:2565
-12101:3:2104
-12102:0:2565
-12103:3:2105
-12104:3:2109
-12105:3:2110
-12106:3:2118
-12107:3:2119
-12108:3:2123
-12109:3:2124
-12110:3:2132
-12111:3:2137
-12112:3:2141
-12113:3:2142
-12114:3:2149
-12115:3:2150
-12116:3:2161
-12117:3:2169
-12118:3:2170
-12119:3:2174
-12120:3:2179
-12121:3:2180
-12122:0:2565
-12123:3:2192
-12124:0:2565
-12125:3:2013
-12126:0:2565
-12127:3:2014
-12128:0:2565
-12129:3:2015
-12130:3:2019
-12131:3:2020
-12132:3:2028
-12133:3:2029
-12134:3:2033
-12135:3:2034
-12136:3:2042
-12137:3:2047
-12138:3:2051
-12139:3:2052
-12140:3:2059
-12141:3:2060
-12142:3:2071
-12143:3:2079
-12144:3:2080
-12145:3:2084
-12146:3:2089
-12147:3:2090
-12148:0:2565
-12149:2:467
-12150:0:2565
-12151:3:2102
-12152:0:2565
-12153:3:2104
-12154:0:2565
-12155:3:2105
-12156:3:2109
-12157:3:2110
-12158:3:2118
-12159:3:2119
-12160:3:2123
-12161:3:2124
-12162:3:2132
-12163:3:2137
-12164:3:2141
-12165:3:2142
-12166:3:2149
-12167:3:2150
-12168:3:2161
-12169:3:2169
-12170:3:2170
-12171:3:2174
-12172:3:2179
-12173:3:2180
-12174:0:2565
-12175:3:2192
-12176:0:2565
-12177:3:2013
-12178:0:2565
-12179:3:2014
-12180:0:2565
-12181:1:339
-12182:0:2565
-12183:2:468
-12184:0:2565
-12185:3:2015
-12186:3:2019
-12187:3:2020
-12188:3:2028
-12189:3:2029
-12190:3:2033
-12191:3:2034
-12192:3:2042
-12193:3:2047
-12194:3:2051
-12195:3:2052
-12196:3:2059
-12197:3:2060
-12198:3:2071
-12199:3:2079
-12200:3:2080
-12201:3:2084
-12202:3:2089
-12203:3:2090
-12204:0:2565
-12205:3:2102
-12206:0:2565
-12207:3:2104
-12208:0:2565
-12209:3:2105
-12210:3:2109
-12211:3:2110
-12212:3:2118
-12213:3:2119
-12214:3:2123
-12215:3:2124
-12216:3:2132
-12217:3:2137
-12218:3:2141
-12219:3:2142
-12220:3:2149
-12221:3:2150
-12222:3:2161
-12223:3:2169
-12224:3:2170
-12225:3:2174
-12226:3:2179
-12227:3:2180
-12228:0:2565
-12229:3:2192
-12230:0:2565
-12231:3:2013
-12232:0:2565
-12233:3:2014
-12234:0:2565
-12235:2:467
-12236:0:2565
-12237:2:468
-12238:0:2565
-12239:3:2015
-12240:3:2019
-12241:3:2020
-12242:3:2028
-12243:3:2029
-12244:3:2033
-12245:3:2034
-12246:3:2042
-12247:3:2047
-12248:3:2051
-12249:3:2052
-12250:3:2059
-12251:3:2060
-12252:3:2071
-12253:3:2079
-12254:3:2080
-12255:3:2084
-12256:3:2089
-12257:3:2090
-12258:0:2565
-12259:3:2102
-12260:0:2565
-12261:3:2104
-12262:0:2565
-12263:3:2105
-12264:3:2109
-12265:3:2110
-12266:3:2118
-12267:3:2119
-12268:3:2123
-12269:3:2124
-12270:3:2132
-12271:3:2137
-12272:3:2141
-12273:3:2142
-12274:3:2149
-12275:3:2150
-12276:3:2161
-12277:3:2169
-12278:3:2170
-12279:3:2174
-12280:3:2179
-12281:3:2180
-12282:0:2565
-12283:3:2192
-12284:0:2565
-12285:3:2013
-12286:0:2565
-12287:2:467
-12288:0:2565
-12289:1:345
-12290:0:2565
-12291:2:468
-12292:0:2565
-12293:3:2014
-12294:0:2565
-12295:3:2015
-12296:3:2019
-12297:3:2020
-12298:3:2028
-12299:3:2029
-12300:3:2033
-12301:3:2034
-12302:3:2042
-12303:3:2047
-12304:3:2051
-12305:3:2052
-12306:3:2059
-12307:3:2060
-12308:3:2071
-12309:3:2079
-12310:3:2080
-12311:3:2084
-12312:3:2089
-12313:3:2090
-12314:0:2565
-12315:3:2102
-12316:0:2565
-12317:3:2104
-12318:0:2565
-12319:3:2105
-12320:3:2109
-12321:3:2110
-12322:3:2118
-12323:3:2119
-12324:3:2123
-12325:3:2124
-12326:3:2132
-12327:3:2137
-12328:3:2141
-12329:3:2142
-12330:3:2149
-12331:3:2150
-12332:3:2161
-12333:3:2169
-12334:3:2170
-12335:3:2174
-12336:3:2179
-12337:3:2180
-12338:0:2565
-12339:3:2192
-12340:0:2565
-12341:3:2013
-12342:0:2565
-12343:2:467
-12344:0:2565
-12345:2:468
-12346:0:2565
-12347:3:2014
-12348:0:2565
-12349:3:2015
-12350:3:2019
-12351:3:2020
-12352:3:2028
-12353:3:2029
-12354:3:2033
-12355:3:2034
-12356:3:2042
-12357:3:2047
-12358:3:2051
-12359:3:2052
-12360:3:2059
-12361:3:2060
-12362:3:2071
-12363:3:2079
-12364:3:2080
-12365:3:2084
-12366:3:2089
-12367:3:2090
-12368:0:2565
-12369:3:2102
-12370:0:2565
-12371:3:2104
-12372:0:2565
-12373:3:2105
-12374:3:2109
-12375:3:2110
-12376:3:2118
-12377:3:2119
-12378:3:2123
-12379:3:2124
-12380:3:2132
-12381:3:2137
-12382:3:2141
-12383:3:2142
-12384:3:2149
-12385:3:2150
-12386:3:2161
-12387:3:2169
-12388:3:2170
-12389:3:2174
-12390:3:2179
-12391:3:2180
-12392:0:2565
-12393:3:2192
-12394:0:2565
-12395:2:467
-12396:0:2565
-12397:1:346
-12398:1:350
-12399:1:351
-12400:1:359
-12401:1:368
-12402:1:369
-12403:1:373
-12404:1:378
-12405:1:382
-12406:1:383
-12407:1:390
-12408:1:391
-12409:1:402
-12410:1:403
-12411:1:406
-12412:1:407
-12413:1:415
-12414:1:420
-12415:1:421
-12416:0:2565
-12417:3:2013
-12418:0:2565
-12419:2:468
-12420:0:2565
-12421:3:2014
-12422:0:2565
-12423:3:2015
-12424:3:2019
-12425:3:2020
-12426:3:2028
-12427:3:2029
-12428:3:2033
-12429:3:2034
-12430:3:2042
-12431:3:2047
-12432:3:2051
-12433:3:2052
-12434:3:2059
-12435:3:2060
-12436:3:2071
-12437:3:2079
-12438:3:2080
-12439:3:2084
-12440:3:2089
-12441:3:2090
-12442:0:2565
-12443:3:2102
-12444:0:2565
-12445:3:2104
-12446:0:2565
-12447:3:2105
-12448:3:2109
-12449:3:2110
-12450:3:2118
-12451:3:2119
-12452:3:2123
-12453:3:2124
-12454:3:2132
-12455:3:2137
-12456:3:2141
-12457:3:2142
-12458:3:2149
-12459:3:2150
-12460:3:2161
-12461:3:2169
-12462:3:2170
-12463:3:2174
-12464:3:2179
-12465:3:2180
-12466:0:2565
-12467:3:2192
-12468:0:2565
-12469:2:467
-12470:0:2565
-12471:3:2013
-12472:0:2565
-12473:3:2014
-12474:0:2565
-12475:3:2015
-12476:3:2019
-12477:3:2020
-12478:3:2028
-12479:3:2029
-12480:3:2033
-12481:3:2034
-12482:3:2042
-12483:3:2047
-12484:3:2051
-12485:3:2052
-12486:3:2059
-12487:3:2060
-12488:3:2071
-12489:3:2079
-12490:3:2080
-12491:3:2084
-12492:3:2089
-12493:3:2090
-12494:0:2565
-12495:3:2102
-12496:0:2565
-12497:3:2104
-12498:0:2565
-12499:3:2105
-12500:3:2109
-12501:3:2110
-12502:3:2118
-12503:3:2119
-12504:3:2123
-12505:3:2124
-12506:3:2132
-12507:3:2137
-12508:3:2141
-12509:3:2142
-12510:3:2149
-12511:3:2150
-12512:3:2161
-12513:3:2169
-12514:3:2170
-12515:3:2174
-12516:3:2179
-12517:3:2180
-12518:0:2565
-12519:1:433
-12520:0:2565
-12521:3:2192
-12522:0:2565
-12523:3:2013
-12524:0:2565
-12525:2:468
-12526:0:2565
-12527:3:2014
-12528:0:2565
-12529:3:2015
-12530:3:2019
-12531:3:2020
-12532:3:2028
-12533:3:2029
-12534:3:2033
-12535:3:2034
-12536:3:2042
-12537:3:2047
-12538:3:2051
-12539:3:2052
-12540:3:2059
-12541:3:2060
-12542:3:2071
-12543:3:2079
-12544:3:2080
-12545:3:2084
-12546:3:2089
-12547:3:2090
-12548:0:2565
-12549:3:2102
-12550:0:2565
-12551:3:2104
-12552:0:2565
-12553:3:2105
-12554:3:2109
-12555:3:2110
-12556:3:2118
-12557:3:2119
-12558:3:2123
-12559:3:2124
-12560:3:2132
-12561:3:2137
-12562:3:2141
-12563:3:2142
-12564:3:2149
-12565:3:2150
-12566:3:2161
-12567:3:2169
-12568:3:2170
-12569:3:2174
-12570:3:2179
-12571:3:2180
-12572:0:2565
-12573:3:2192
-12574:0:2565
-12575:2:469
-12576:0:2565
-12577:3:2013
-12578:0:2565
-12579:2:475
-12580:0:2565
-12581:2:476
-12582:0:2565
-12583:3:2014
-12584:0:2565
-12585:3:2015
-12586:3:2019
-12587:3:2020
-12588:3:2028
-12589:3:2029
-12590:3:2033
-12591:3:2034
-12592:3:2042
-12593:3:2047
-12594:3:2051
-12595:3:2052
-12596:3:2059
-12597:3:2060
-12598:3:2071
-12599:3:2079
-12600:3:2080
-12601:3:2084
-12602:3:2089
-12603:3:2090
-12604:0:2565
-12605:3:2102
-12606:0:2565
-12607:3:2104
-12608:0:2565
-12609:3:2105
-12610:3:2109
-12611:3:2110
-12612:3:2118
-12613:3:2119
-12614:3:2123
-12615:3:2124
-12616:3:2132
-12617:3:2137
-12618:3:2141
-12619:3:2142
-12620:3:2149
-12621:3:2150
-12622:3:2161
-12623:3:2169
-12624:3:2170
-12625:3:2174
-12626:3:2179
-12627:3:2180
-12628:0:2565
-12629:3:2192
-12630:0:2565
-12631:2:477
-12632:2:481
-12633:2:482
-12634:2:490
-12635:2:499
-12636:2:500
-12637:2:504
-12638:2:509
-12639:2:513
-12640:2:514
-12641:2:521
-12642:2:522
-12643:2:533
-12644:2:534
-12645:2:537
-12646:2:538
-12647:2:546
-12648:2:551
-12649:2:552
-12650:0:2565
-12651:3:2013
-12652:0:2565
-12653:3:2014
-12654:0:2565
-12655:3:2015
-12656:3:2019
-12657:3:2020
-12658:3:2028
-12659:3:2029
-12660:3:2033
-12661:3:2034
-12662:3:2042
-12663:3:2047
-12664:3:2051
-12665:3:2052
-12666:3:2059
-12667:3:2060
-12668:3:2071
-12669:3:2079
-12670:3:2080
-12671:3:2084
-12672:3:2089
-12673:3:2090
-12674:0:2565
-12675:3:2102
-12676:0:2565
-12677:3:2104
-12678:0:2565
-12679:3:2105
-12680:3:2109
-12681:3:2110
-12682:3:2118
-12683:3:2119
-12684:3:2123
-12685:3:2124
-12686:3:2132
-12687:3:2137
-12688:3:2141
-12689:3:2142
-12690:3:2149
-12691:3:2150
-12692:3:2161
-12693:3:2169
-12694:3:2170
-12695:3:2174
-12696:3:2179
-12697:3:2180
-12698:0:2565
-12699:2:564
-12700:0:2565
-12701:3:2192
-12702:0:2565
-12703:3:2013
-12704:0:2565
-12705:3:2014
-12706:0:2565
-12707:3:2015
-12708:3:2019
-12709:3:2020
-12710:3:2028
-12711:3:2029
-12712:3:2033
-12713:3:2034
-12714:3:2042
-12715:3:2047
-12716:3:2051
-12717:3:2052
-12718:3:2059
-12719:3:2060
-12720:3:2071
-12721:3:2079
-12722:3:2080
-12723:3:2084
-12724:3:2089
-12725:3:2090
-12726:0:2565
-12727:3:2102
-12728:0:2565
-12729:3:2104
-12730:0:2565
-12731:2:565
-12732:2:569
-12733:2:570
-12734:2:578
-12735:2:587
-12736:2:588
-12737:2:592
-12738:2:597
-12739:2:601
-12740:2:602
-12741:2:609
-12742:2:610
-12743:2:621
-12744:2:622
-12745:2:625
-12746:2:626
-12747:2:634
-12748:2:639
-12749:2:640
-12750:0:2565
-12751:2:744
-12752:0:2565
-12753:3:2105
-12754:3:2109
-12755:3:2110
-12756:3:2118
-12757:3:2119
-12758:3:2123
-12759:3:2124
-12760:3:2132
-12761:3:2137
-12762:3:2141
-12763:3:2142
-12764:3:2149
-12765:3:2150
-12766:3:2161
-12767:3:2169
-12768:3:2170
-12769:3:2174
-12770:3:2179
-12771:3:2180
-12772:0:2565
-12773:3:2192
-12774:0:2565
-12775:3:2013
-12776:0:2565
-12777:3:2014
-12778:0:2565
-12779:3:2015
-12780:3:2019
-12781:3:2020
-12782:3:2028
-12783:3:2029
-12784:3:2033
-12785:3:2034
-12786:3:2042
-12787:3:2047
-12788:3:2051
-12789:3:2052
-12790:3:2059
-12791:3:2060
-12792:3:2071
-12793:3:2079
-12794:3:2080
-12795:3:2084
-12796:3:2089
-12797:3:2090
-12798:0:2565
-12799:3:2102
-12800:0:2565
-12801:2:745
-12802:0:2565
-12803:2:750
-12804:0:2565
-12805:2:753
-12806:0:2565
-12807:3:2104
-12808:0:2565
-12809:3:2105
-12810:3:2109
-12811:3:2110
-12812:3:2118
-12813:3:2119
-12814:3:2123
-12815:3:2124
-12816:3:2132
-12817:3:2137
-12818:3:2141
-12819:3:2142
-12820:3:2149
-12821:3:2150
-12822:3:2161
-12823:3:2169
-12824:3:2170
-12825:3:2174
-12826:3:2179
-12827:3:2180
-12828:0:2565
-12829:3:2192
-12830:0:2565
-12831:3:2013
-12832:0:2565
-12833:3:2014
-12834:0:2565
-12835:3:2015
-12836:3:2019
-12837:3:2020
-12838:3:2028
-12839:3:2029
-12840:3:2033
-12841:3:2034
-12842:3:2042
-12843:3:2047
-12844:3:2051
-12845:3:2052
-12846:3:2059
-12847:3:2060
-12848:3:2071
-12849:3:2079
-12850:3:2080
-12851:3:2084
-12852:3:2089
-12853:3:2090
-12854:0:2565
-12855:2:758
-12856:0:2565
-12857:3:2102
-12858:0:2565
-12859:3:2104
-12860:0:2565
-12861:3:2105
-12862:3:2109
-12863:3:2110
-12864:3:2118
-12865:3:2119
-12866:3:2123
-12867:3:2124
-12868:3:2132
-12869:3:2137
-12870:3:2141
-12871:3:2142
-12872:3:2149
-12873:3:2150
-12874:3:2161
-12875:3:2169
-12876:3:2170
-12877:3:2174
-12878:3:2179
-12879:3:2180
-12880:0:2565
-12881:3:2192
-12882:0:2565
-12883:3:2013
-12884:0:2565
-12885:3:2014
-12886:0:2565
-12887:2:759
-12888:0:2565
-12889:3:2015
-12890:3:2019
-12891:3:2020
-12892:3:2028
-12893:3:2029
-12894:3:2033
-12895:3:2034
-12896:3:2042
-12897:3:2047
-12898:3:2051
-12899:3:2052
-12900:3:2059
-12901:3:2060
-12902:3:2071
-12903:3:2079
-12904:3:2080
-12905:3:2084
-12906:3:2089
-12907:3:2090
-12908:0:2565
-12909:3:2102
-12910:0:2565
-12911:3:2104
-12912:0:2565
-12913:3:2105
-12914:3:2109
-12915:3:2110
-12916:3:2118
-12917:3:2119
-12918:3:2123
-12919:3:2124
-12920:3:2132
-12921:3:2137
-12922:3:2141
-12923:3:2142
-12924:3:2149
-12925:3:2150
-12926:3:2161
-12927:3:2169
-12928:3:2170
-12929:3:2174
-12930:3:2179
-12931:3:2180
-12932:0:2565
-12933:3:2192
-12934:0:2565
-12935:3:2013
-12936:0:2565
-12937:2:760
-12938:0:2565
-12939:2:761
-12940:0:2565
-12941:2:762
-12942:0:2565
-12943:2:763
-12944:0:2565
-12945:3:2014
-12946:0:2565
-12947:3:2015
-12948:3:2019
-12949:3:2020
-12950:3:2028
-12951:3:2029
-12952:3:2033
-12953:3:2034
-12954:3:2042
-12955:3:2047
-12956:3:2051
-12957:3:2052
-12958:3:2059
-12959:3:2060
-12960:3:2071
-12961:3:2079
-12962:3:2080
-12963:3:2084
-12964:3:2089
-12965:3:2090
-12966:0:2565
-12967:3:2102
-12968:0:2565
-12969:3:2104
-12970:0:2565
-12971:3:2105
-12972:3:2109
-12973:3:2110
-12974:3:2118
-12975:3:2119
-12976:3:2123
-12977:3:2124
-12978:3:2132
-12979:3:2137
-12980:3:2141
-12981:3:2142
-12982:3:2149
-12983:3:2150
-12984:3:2161
-12985:3:2169
-12986:3:2170
-12987:3:2174
-12988:3:2179
-12989:3:2180
-12990:0:2565
-12991:3:2192
-12992:0:2565
-12993:2:765
-12994:0:2565
-12995:3:2013
-12996:0:2565
-12997:3:2014
-12998:0:2565
-12999:3:2015
-13000:3:2019
-13001:3:2020
-13002:3:2028
-13003:3:2029
-13004:3:2033
-13005:3:2034
-13006:3:2042
-13007:3:2047
-13008:3:2051
-13009:3:2052
-13010:3:2059
-13011:3:2060
-13012:3:2071
-13013:3:2079
-13014:3:2080
-13015:3:2084
-13016:3:2089
-13017:3:2090
-13018:0:2565
-13019:3:2102
-13020:0:2565
-13021:3:2104
-13022:0:2565
-13023:3:2105
-13024:3:2109
-13025:3:2110
-13026:3:2118
-13027:3:2119
-13028:3:2123
-13029:3:2124
-13030:3:2132
-13031:3:2137
-13032:3:2141
-13033:3:2142
-13034:3:2149
-13035:3:2150
-13036:3:2161
-13037:3:2169
-13038:3:2170
-13039:3:2174
-13040:3:2179
-13041:3:2180
-13042:0:2565
-13043:2:766
-13044:2:770
-13045:2:771
-13046:2:779
-13047:2:788
-13048:2:789
-13049:2:793
-13050:2:798
-13051:2:802
-13052:2:803
-13053:2:810
-13054:2:811
-13055:2:822
-13056:2:823
-13057:2:826
-13058:2:827
-13059:2:835
-13060:2:840
-13061:2:841
-13062:0:2565
-13063:3:2192
-13064:0:2565
-13065:3:2013
-13066:0:2565
-13067:3:2014
-13068:0:2565
-13069:3:2015
-13070:3:2019
-13071:3:2020
-13072:3:2028
-13073:3:2029
-13074:3:2033
-13075:3:2034
-13076:3:2042
-13077:3:2047
-13078:3:2051
-13079:3:2052
-13080:3:2059
-13081:3:2060
-13082:3:2071
-13083:3:2079
-13084:3:2080
-13085:3:2084
-13086:3:2089
-13087:3:2090
-13088:0:2565
-13089:3:2102
-13090:0:2565
-13091:3:2104
-13092:0:2565
-13093:2:853
-13094:0:2565
-13095:2:857
-13096:0:2565
-13097:2:465
-13098:0:2565
-13099:3:2105
-13100:3:2109
-13101:3:2110
-13102:3:2118
-13103:3:2119
-13104:3:2123
-13105:3:2124
-13106:3:2132
-13107:3:2137
-13108:3:2141
-13109:3:2142
-13110:3:2149
-13111:3:2150
-13112:3:2161
-13113:3:2169
-13114:3:2170
-13115:3:2174
-13116:3:2179
-13117:3:2180
-13118:0:2565
-13119:3:2192
-13120:0:2565
-13121:3:2013
-13122:0:2565
-13123:3:2014
-13124:0:2565
-13125:3:2015
-13126:3:2019
-13127:3:2020
-13128:3:2028
-13129:3:2029
-13130:3:2033
-13131:3:2034
-13132:3:2042
-13133:3:2047
-13134:3:2051
-13135:3:2052
-13136:3:2059
-13137:3:2060
-13138:3:2071
-13139:3:2079
-13140:3:2080
-13141:3:2084
-13142:3:2089
-13143:3:2090
-13144:0:2565
-13145:3:2102
-13146:0:2565
-13147:2:466
-13148:0:2565
-13149:3:2104
-13150:0:2565
-13151:3:2105
-13152:3:2109
-13153:3:2110
-13154:3:2118
-13155:3:2119
-13156:3:2123
-13157:3:2124
-13158:3:2132
-13159:3:2137
-13160:3:2141
-13161:3:2142
-13162:3:2149
-13163:3:2150
-13164:3:2161
-13165:3:2169
-13166:3:2170
-13167:3:2174
-13168:3:2179
-13169:3:2180
-13170:0:2565
-13171:3:2192
-13172:0:2565
-13173:3:2013
-13174:0:2565
-13175:3:2014
-13176:0:2565
-13177:3:2015
-13178:3:2019
-13179:3:2020
-13180:3:2028
-13181:3:2029
-13182:3:2033
-13183:3:2034
-13184:3:2042
-13185:3:2047
-13186:3:2051
-13187:3:2052
-13188:3:2059
-13189:3:2060
-13190:3:2071
-13191:3:2079
-13192:3:2080
-13193:3:2084
-13194:3:2089
-13195:3:2090
-13196:0:2565
-13197:2:467
-13198:0:2565
-13199:3:2102
-13200:0:2565
-13201:3:2104
-13202:0:2565
-13203:3:2105
-13204:3:2109
-13205:3:2110
-13206:3:2118
-13207:3:2119
-13208:3:2123
-13209:3:2124
-13210:3:2132
-13211:3:2137
-13212:3:2141
-13213:3:2142
-13214:3:2149
-13215:3:2150
-13216:3:2161
-13217:3:2169
-13218:3:2170
-13219:3:2174
-13220:3:2179
-13221:3:2180
-13222:0:2565
-13223:3:2192
-13224:0:2565
-13225:3:2013
-13226:0:2565
-13227:3:2014
-13228:0:2565
-13229:1:436
-13230:0:2565
-13231:2:468
-13232:0:2565
-13233:3:2015
-13234:3:2019
-13235:3:2020
-13236:3:2028
-13237:3:2029
-13238:3:2033
-13239:3:2034
-13240:3:2042
-13241:3:2047
-13242:3:2051
-13243:3:2052
-13244:3:2059
-13245:3:2060
-13246:3:2071
-13247:3:2079
-13248:3:2080
-13249:3:2084
-13250:3:2089
-13251:3:2090
-13252:0:2565
-13253:3:2102
-13254:0:2565
-13255:3:2104
-13256:0:2565
-13257:3:2105
-13258:3:2109
-13259:3:2110
-13260:3:2118
-13261:3:2119
-13262:3:2123
-13263:3:2124
-13264:3:2132
-13265:3:2137
-13266:3:2141
-13267:3:2142
-13268:3:2149
-13269:3:2150
-13270:3:2161
-13271:3:2169
-13272:3:2170
-13273:3:2174
-13274:3:2179
-13275:3:2180
-13276:0:2565
-13277:3:2192
-13278:0:2565
-13279:3:2013
-13280:0:2565
-13281:3:2014
-13282:0:2565
-13283:2:467
-13284:0:2565
-13285:2:468
-13286:0:2565
-13287:3:2015
-13288:3:2019
-13289:3:2020
-13290:3:2028
-13291:3:2029
-13292:3:2033
-13293:3:2034
-13294:3:2042
-13295:3:2047
-13296:3:2051
-13297:3:2052
-13298:3:2059
-13299:3:2060
-13300:3:2071
-13301:3:2079
-13302:3:2080
-13303:3:2084
-13304:3:2089
-13305:3:2090
-13306:0:2565
-13307:3:2102
-13308:0:2565
-13309:3:2104
-13310:0:2565
-13311:3:2105
-13312:3:2109
-13313:3:2110
-13314:3:2118
-13315:3:2119
-13316:3:2123
-13317:3:2124
-13318:3:2132
-13319:3:2137
-13320:3:2141
-13321:3:2142
-13322:3:2149
-13323:3:2150
-13324:3:2161
-13325:3:2169
-13326:3:2170
-13327:3:2174
-13328:3:2179
-13329:3:2180
-13330:0:2565
-13331:3:2192
-13332:0:2565
-13333:3:2013
-13334:0:2565
-13335:2:467
-13336:0:2565
-13337:1:442
-13338:0:2565
-13339:2:468
-13340:0:2565
-13341:1:446
-13342:0:2565
-13343:1:9
-13344:0:2565
-13345:1:10
-13346:0:2565
-13347:1:11
-13348:0:2565
-13349:3:2014
-13350:0:2565
-13351:3:2015
-13352:3:2019
-13353:3:2020
-13354:3:2028
-13355:3:2029
-13356:3:2033
-13357:3:2034
-13358:3:2042
-13359:3:2047
-13360:3:2051
-13361:3:2052
-13362:3:2059
-13363:3:2060
-13364:3:2071
-13365:3:2079
-13366:3:2080
-13367:3:2084
-13368:3:2089
-13369:3:2090
-13370:0:2565
-13371:3:2102
-13372:0:2565
-13373:3:2104
-13374:0:2565
-13375:3:2105
-13376:3:2109
-13377:3:2110
-13378:3:2118
-13379:3:2119
-13380:3:2123
-13381:3:2124
-13382:3:2132
-13383:3:2137
-13384:3:2141
-13385:3:2142
-13386:3:2149
-13387:3:2150
-13388:3:2161
-13389:3:2169
-13390:3:2170
-13391:3:2174
-13392:3:2179
-13393:3:2180
-13394:0:2565
-13395:3:2192
-13396:0:2565
-13397:3:2013
-13398:0:2565
-13399:2:467
-13400:0:2565
-13401:2:468
-13402:0:2565
-13403:3:2014
-13404:0:2565
-13405:3:2015
-13406:3:2019
-13407:3:2020
-13408:3:2028
-13409:3:2029
-13410:3:2033
-13411:3:2034
-13412:3:2042
-13413:3:2047
-13414:3:2051
-13415:3:2052
-13416:3:2059
-13417:3:2060
-13418:3:2071
-13419:3:2079
-13420:3:2080
-13421:3:2084
-13422:3:2089
-13423:3:2090
-13424:0:2565
-13425:3:2102
-13426:0:2565
-13427:3:2104
-13428:0:2565
-13429:3:2105
-13430:3:2109
-13431:3:2110
-13432:3:2118
-13433:3:2119
-13434:3:2123
-13435:3:2124
-13436:3:2132
-13437:3:2137
-13438:3:2141
-13439:3:2142
-13440:3:2149
-13441:3:2150
-13442:3:2161
-13443:3:2169
-13444:3:2170
-13445:3:2174
-13446:3:2179
-13447:3:2180
-13448:0:2565
-13449:3:2192
-13450:0:2565
-13451:2:467
-13452:0:2565
-13453:1:12
-13454:1:16
-13455:1:17
-13456:1:25
-13457:1:34
-13458:1:35
-13459:1:39
-13460:1:44
-13461:1:48
-13462:1:49
-13463:1:56
-13464:1:57
-13465:1:68
-13466:1:69
-13467:1:72
-13468:1:73
-13469:1:81
-13470:1:86
-13471:1:87
-13472:0:2565
-13473:3:2013
-13474:0:2565
-13475:2:468
-13476:0:2565
-13477:3:2014
-13478:0:2565
-13479:3:2015
-13480:3:2019
-13481:3:2020
-13482:3:2028
-13483:3:2029
-13484:3:2033
-13485:3:2034
-13486:3:2042
-13487:3:2047
-13488:3:2051
-13489:3:2052
-13490:3:2059
-13491:3:2060
-13492:3:2071
-13493:3:2079
-13494:3:2080
-13495:3:2084
-13496:3:2089
-13497:3:2090
-13498:0:2565
-13499:3:2102
-13500:0:2565
-13501:3:2104
-13502:0:2565
-13503:3:2105
-13504:3:2109
-13505:3:2110
-13506:3:2118
-13507:3:2119
-13508:3:2123
-13509:3:2124
-13510:3:2132
-13511:3:2137
-13512:3:2141
-13513:3:2142
-13514:3:2149
-13515:3:2150
-13516:3:2161
-13517:3:2169
-13518:3:2170
-13519:3:2174
-13520:3:2179
-13521:3:2180
-13522:0:2565
-13523:3:2192
-13524:0:2565
-13525:2:467
-13526:0:2565
-13527:3:2013
-13528:0:2565
-13529:3:2014
-13530:0:2565
-13531:3:2015
-13532:3:2019
-13533:3:2020
-13534:3:2028
-13535:3:2029
-13536:3:2033
-13537:3:2034
-13538:3:2042
-13539:3:2047
-13540:3:2051
-13541:3:2052
-13542:3:2059
-13543:3:2060
-13544:3:2071
-13545:3:2079
-13546:3:2080
-13547:3:2084
-13548:3:2089
-13549:3:2090
-13550:0:2565
-13551:3:2102
-13552:0:2565
-13553:3:2104
-13554:0:2565
-13555:3:2105
-13556:3:2109
-13557:3:2110
-13558:3:2118
-13559:3:2119
-13560:3:2123
-13561:3:2124
-13562:3:2132
-13563:3:2137
-13564:3:2141
-13565:3:2142
-13566:3:2149
-13567:3:2150
-13568:3:2161
-13569:3:2169
-13570:3:2170
-13571:3:2174
-13572:3:2179
-13573:3:2180
-13574:0:2565
-13575:1:99
-13576:0:2565
-13577:3:2192
-13578:0:2565
-13579:3:2013
-13580:0:2565
-13581:2:468
-13582:0:2565
-13583:3:2014
-13584:0:2565
-13585:3:2015
-13586:3:2019
-13587:3:2020
-13588:3:2028
-13589:3:2029
-13590:3:2033
-13591:3:2034
-13592:3:2042
-13593:3:2047
-13594:3:2051
-13595:3:2052
-13596:3:2059
-13597:3:2060
-13598:3:2071
-13599:3:2079
-13600:3:2080
-13601:3:2084
-13602:3:2089
-13603:3:2090
-13604:0:2565
-13605:3:2102
-13606:0:2565
-13607:3:2104
-13608:0:2565
-13609:3:2105
-13610:3:2109
-13611:3:2110
-13612:3:2118
-13613:3:2119
-13614:3:2123
-13615:3:2124
-13616:3:2132
-13617:3:2137
-13618:3:2141
-13619:3:2142
-13620:3:2149
-13621:3:2150
-13622:3:2161
-13623:3:2169
-13624:3:2170
-13625:3:2174
-13626:3:2179
-13627:3:2180
-13628:0:2565
-13629:3:2192
-13630:0:2565
-13631:2:469
-13632:0:2565
-13633:3:2013
-13634:0:2565
-13635:2:475
-13636:0:2565
-13637:2:476
-13638:0:2565
-13639:3:2014
-13640:0:2565
-13641:3:2015
-13642:3:2019
-13643:3:2020
-13644:3:2028
-13645:3:2029
-13646:3:2033
-13647:3:2034
-13648:3:2042
-13649:3:2047
-13650:3:2051
-13651:3:2052
-13652:3:2059
-13653:3:2060
-13654:3:2071
-13655:3:2079
-13656:3:2080
-13657:3:2084
-13658:3:2089
-13659:3:2090
-13660:0:2565
-13661:3:2102
-13662:0:2565
-13663:3:2104
-13664:0:2565
-13665:3:2105
-13666:3:2109
-13667:3:2110
-13668:3:2118
-13669:3:2119
-13670:3:2123
-13671:3:2124
-13672:3:2132
-13673:3:2137
-13674:3:2141
-13675:3:2142
-13676:3:2149
-13677:3:2150
-13678:3:2161
-13679:3:2169
-13680:3:2170
-13681:3:2174
-13682:3:2179
-13683:3:2180
-13684:0:2565
-13685:3:2192
-13686:0:2565
-13687:2:477
-13688:2:481
-13689:2:482
-13690:2:490
-13691:2:499
-13692:2:500
-13693:2:504
-13694:2:509
-13695:2:513
-13696:2:514
-13697:2:521
-13698:2:522
-13699:2:533
-13700:2:534
-13701:2:537
-13702:2:538
-13703:2:546
-13704:2:551
-13705:2:552
-13706:0:2565
-13707:3:2013
-13708:0:2565
-13709:3:2014
-13710:0:2565
-13711:3:2015
-13712:3:2019
-13713:3:2020
-13714:3:2028
-13715:3:2029
-13716:3:2033
-13717:3:2034
-13718:3:2042
-13719:3:2047
-13720:3:2051
-13721:3:2052
-13722:3:2059
-13723:3:2060
-13724:3:2071
-13725:3:2079
-13726:3:2080
-13727:3:2084
-13728:3:2089
-13729:3:2090
-13730:0:2565
-13731:3:2102
-13732:0:2565
-13733:3:2104
-13734:0:2565
-13735:3:2105
-13736:3:2109
-13737:3:2110
-13738:3:2118
-13739:3:2119
-13740:3:2123
-13741:3:2124
-13742:3:2132
-13743:3:2137
-13744:3:2141
-13745:3:2142
-13746:3:2149
-13747:3:2150
-13748:3:2161
-13749:3:2169
-13750:3:2170
-13751:3:2174
-13752:3:2179
-13753:3:2180
-13754:0:2565
-13755:2:564
-13756:0:2565
-13757:3:2192
-13758:0:2565
-13759:3:2013
-13760:0:2565
-13761:3:2014
-13762:0:2565
-13763:3:2015
-13764:3:2019
-13765:3:2020
-13766:3:2028
-13767:3:2029
-13768:3:2033
-13769:3:2034
-13770:3:2042
-13771:3:2047
-13772:3:2051
-13773:3:2052
-13774:3:2059
-13775:3:2060
-13776:3:2071
-13777:3:2079
-13778:3:2080
-13779:3:2084
-13780:3:2089
-13781:3:2090
-13782:0:2565
-13783:3:2102
-13784:0:2565
-13785:3:2104
-13786:0:2565
-13787:2:565
-13788:2:569
-13789:2:570
-13790:2:578
-13791:2:587
-13792:2:588
-13793:2:592
-13794:2:597
-13795:2:601
-13796:2:602
-13797:2:609
-13798:2:610
-13799:2:621
-13800:2:622
-13801:2:625
-13802:2:626
-13803:2:634
-13804:2:639
-13805:2:640
-13806:0:2565
-13807:2:652
-13808:0:2565
-13809:3:2105
-13810:3:2109
-13811:3:2110
-13812:3:2118
-13813:3:2119
-13814:3:2123
-13815:3:2124
-13816:3:2132
-13817:3:2137
-13818:3:2141
-13819:3:2142
-13820:3:2149
-13821:3:2150
-13822:3:2161
-13823:3:2169
-13824:3:2170
-13825:3:2174
-13826:3:2179
-13827:3:2180
-13828:0:2565
-13829:3:2192
-13830:0:2565
-13831:3:2013
-13832:0:2565
-13833:3:2014
-13834:0:2565
-13835:3:2015
-13836:3:2019
-13837:3:2020
-13838:3:2028
-13839:3:2029
-13840:3:2033
-13841:3:2034
-13842:3:2042
-13843:3:2047
-13844:3:2051
-13845:3:2052
-13846:3:2059
-13847:3:2060
-13848:3:2071
-13849:3:2079
-13850:3:2080
-13851:3:2084
-13852:3:2089
-13853:3:2090
-13854:0:2565
-13855:3:2102
-13856:0:2565
-13857:2:653
-13858:0:2565
-13859:3:2104
-13860:0:2565
-13861:3:2105
-13862:3:2109
-13863:3:2110
-13864:3:2118
-13865:3:2119
-13866:3:2123
-13867:3:2124
-13868:3:2132
-13869:3:2137
-13870:3:2141
-13871:3:2142
-13872:3:2149
-13873:3:2150
-13874:3:2161
-13875:3:2169
-13876:3:2170
-13877:3:2174
-13878:3:2179
-13879:3:2180
-13880:0:2565
-13881:3:2192
-13882:0:2565
-13883:3:2013
-13884:0:2565
-13885:3:2014
-13886:0:2565
-13887:3:2015
-13888:3:2019
-13889:3:2020
-13890:3:2028
-13891:3:2029
-13892:3:2033
-13893:3:2034
-13894:3:2042
-13895:3:2047
-13896:3:2051
-13897:3:2052
-13898:3:2059
-13899:3:2060
-13900:3:2071
-13901:3:2079
-13902:3:2080
-13903:3:2084
-13904:3:2089
-13905:3:2090
-13906:0:2565
-13907:2:654
-13908:2:658
-13909:2:659
-13910:2:667
-13911:2:676
-13912:2:677
-13913:2:681
-13914:2:686
-13915:2:690
-13916:2:691
-13917:2:698
-13918:2:699
-13919:2:710
-13920:2:711
-13921:2:714
-13922:2:715
-13923:2:723
-13924:2:728
-13925:2:729
-13926:0:2565
-13927:3:2102
-13928:0:2565
-13929:3:2104
-13930:0:2565
-13931:3:2105
-13932:3:2109
-13933:3:2110
-13934:3:2118
-13935:3:2119
-13936:3:2123
-13937:3:2124
-13938:3:2132
-13939:3:2137
-13940:3:2141
-13941:3:2142
-13942:3:2149
-13943:3:2150
-13944:3:2161
-13945:3:2169
-13946:3:2170
-13947:3:2174
-13948:3:2179
-13949:3:2180
-13950:0:2565
-13951:3:2192
-13952:0:2565
-13953:3:2013
-13954:0:2565
-13955:3:2014
-13956:0:2565
-13957:1:100
-13958:0:2565
-13959:1:101
-13960:0:2565
-13961:3:2015
-13962:3:2019
-13963:3:2020
-13964:3:2028
-13965:3:2029
-13966:3:2033
-13967:3:2034
-13968:3:2042
-13969:3:2047
-13970:3:2051
-13971:3:2052
-13972:3:2059
-13973:3:2060
-13974:3:2071
-13975:3:2079
-13976:3:2080
-13977:3:2084
-13978:3:2089
-13979:3:2090
-13980:0:2565
-13981:3:2102
-13982:0:2565
-13983:3:2104
-13984:0:2565
-13985:3:2105
-13986:3:2109
-13987:3:2110
-13988:3:2118
-13989:3:2119
-13990:3:2123
-13991:3:2124
-13992:3:2132
-13993:3:2137
-13994:3:2141
-13995:3:2142
-13996:3:2149
-13997:3:2150
-13998:3:2161
-13999:3:2169
-14000:3:2170
-14001:3:2174
-14002:3:2179
-14003:3:2180
-14004:0:2565
-14005:3:2192
-14006:0:2565
-14007:3:2013
-14008:0:2565
-14009:3:2014
-14010:0:2565
-14011:1:100
-14012:0:2565
-14013:3:2015
-14014:3:2019
-14015:3:2020
-14016:3:2028
-14017:3:2029
-14018:3:2033
-14019:3:2034
-14020:3:2042
-14021:3:2047
-14022:3:2051
-14023:3:2052
-14024:3:2059
-14025:3:2060
-14026:3:2071
-14027:3:2079
-14028:3:2080
-14029:3:2084
-14030:3:2089
-14031:3:2090
-14032:0:2565
-14033:3:2102
-14034:0:2565
-14035:3:2104
-14036:0:2565
-14037:3:2105
-14038:3:2109
-14039:3:2110
-14040:3:2118
-14041:3:2119
-14042:3:2123
-14043:3:2124
-14044:3:2132
-14045:3:2137
-14046:3:2141
-14047:3:2142
-14048:3:2149
-14049:3:2150
-14050:3:2161
-14051:3:2169
-14052:3:2170
-14053:3:2174
-14054:3:2179
-14055:3:2180
-14056:0:2565
-14057:3:2192
-14058:0:2565
-14059:3:2013
-14060:0:2565
-14061:2:741
-14062:0:2565
-14063:2:750
-14064:0:2565
-14065:2:753
-14066:0:2565
-14067:1:101
-14068:0:2565
-14069:3:2014
-14070:0:2565
-14071:3:2015
-14072:3:2019
-14073:3:2020
-14074:3:2028
-14075:3:2029
-14076:3:2033
-14077:3:2034
-14078:3:2042
-14079:3:2047
-14080:3:2051
-14081:3:2052
-14082:3:2059
-14083:3:2060
-14084:3:2071
-14085:3:2079
-14086:3:2080
-14087:3:2084
-14088:3:2089
-14089:3:2090
-14090:0:2565
-14091:3:2102
-14092:0:2565
-14093:3:2104
-14094:0:2565
-14095:3:2105
-14096:3:2109
-14097:3:2110
-14098:3:2118
-14099:3:2119
-14100:3:2123
-14101:3:2124
-14102:3:2132
-14103:3:2137
-14104:3:2141
-14105:3:2142
-14106:3:2149
-14107:3:2150
-14108:3:2161
-14109:3:2169
-14110:3:2170
-14111:3:2174
-14112:3:2179
-14113:3:2180
-14114:0:2565
-14115:3:2192
-14116:0:2565
-14117:3:2013
-14118:0:2565
-14119:1:100
-14120:0:2565
-14121:3:2014
-14122:0:2565
-14123:3:2015
-14124:3:2019
-14125:3:2020
-14126:3:2028
-14127:3:2029
-14128:3:2033
-14129:3:2034
-14130:3:2042
-14131:3:2047
-14132:3:2051
-14133:3:2052
-14134:3:2059
-14135:3:2060
-14136:3:2071
-14137:3:2079
-14138:3:2080
-14139:3:2084
-14140:3:2089
-14141:3:2090
-14142:0:2565
-14143:3:2102
-14144:0:2565
-14145:3:2104
-14146:0:2565
-14147:3:2105
-14148:3:2109
-14149:3:2110
-14150:3:2118
-14151:3:2119
-14152:3:2123
-14153:3:2124
-14154:3:2132
-14155:3:2137
-14156:3:2141
-14157:3:2142
-14158:3:2149
-14159:3:2150
-14160:3:2161
-14161:3:2169
-14162:3:2170
-14163:3:2174
-14164:3:2179
-14165:3:2180
-14166:0:2565
-14167:3:2192
-14168:0:2565
-14169:2:758
-14170:0:2565
-14171:3:2013
-14172:0:2565
-14173:1:101
-14174:0:2565
-14175:3:2014
-14176:0:2565
-14177:3:2015
-14178:3:2019
-14179:3:2020
-14180:3:2028
-14181:3:2029
-14182:3:2033
-14183:3:2034
-14184:3:2042
-14185:3:2047
-14186:3:2051
-14187:3:2052
-14188:3:2059
-14189:3:2060
-14190:3:2071
-14191:3:2079
-14192:3:2080
-14193:3:2084
-14194:3:2089
-14195:3:2090
-14196:0:2565
-14197:3:2102
-14198:0:2565
-14199:3:2104
-14200:0:2565
-14201:3:2105
-14202:3:2109
-14203:3:2110
-14204:3:2118
-14205:3:2119
-14206:3:2123
-14207:3:2124
-14208:3:2132
-14209:3:2137
-14210:3:2141
-14211:3:2142
-14212:3:2149
-14213:3:2150
-14214:3:2161
-14215:3:2169
-14216:3:2170
-14217:3:2174
-14218:3:2179
-14219:3:2180
-14220:0:2565
-14221:3:2192
-14222:0:2565
-14223:3:2013
-14224:0:2565
-14225:1:100
-14226:0:2565
-14227:3:2014
-14228:0:2565
-14229:3:2015
-14230:3:2019
-14231:3:2020
-14232:3:2028
-14233:3:2029
-14234:3:2033
-14235:3:2034
-14236:3:2042
-14237:3:2047
-14238:3:2051
-14239:3:2052
-14240:3:2059
-14241:3:2060
-14242:3:2071
-14243:3:2079
-14244:3:2080
-14245:3:2084
-14246:3:2089
-14247:3:2090
-14248:0:2565
-14249:3:2102
-14250:0:2565
-14251:3:2104
-14252:0:2565
-14253:3:2105
-14254:3:2109
-14255:3:2110
-14256:3:2118
-14257:3:2119
-14258:3:2123
-14259:3:2124
-14260:3:2132
-14261:3:2137
-14262:3:2141
-14263:3:2142
-14264:3:2149
-14265:3:2150
-14266:3:2161
-14267:3:2169
-14268:3:2170
-14269:3:2174
-14270:3:2179
-14271:3:2180
-14272:0:2565
-14273:3:2192
-14274:0:2565
-14275:2:759
-14276:0:2565
-14277:3:2013
-14278:0:2565
-14279:1:101
-14280:0:2565
-14281:3:2014
-14282:0:2565
-14283:3:2015
-14284:3:2019
-14285:3:2020
-14286:3:2028
-14287:3:2029
-14288:3:2033
-14289:3:2034
-14290:3:2042
-14291:3:2047
-14292:3:2051
-14293:3:2052
-14294:3:2059
-14295:3:2060
-14296:3:2071
-14297:3:2079
-14298:3:2080
-14299:3:2084
-14300:3:2089
-14301:3:2090
-14302:0:2565
-14303:3:2102
-14304:0:2565
-14305:3:2104
-14306:0:2565
-14307:3:2105
-14308:3:2109
-14309:3:2110
-14310:3:2118
-14311:3:2119
-14312:3:2123
-14313:3:2124
-14314:3:2132
-14315:3:2137
-14316:3:2141
-14317:3:2142
-14318:3:2149
-14319:3:2150
-14320:3:2161
-14321:3:2169
-14322:3:2170
-14323:3:2174
-14324:3:2179
-14325:3:2180
-14326:0:2565
-14327:3:2192
-14328:0:2565
-14329:3:2013
-14330:0:2565
-14331:1:100
-14332:0:2565
-14333:3:2014
-14334:0:2565
-14335:3:2015
-14336:3:2019
-14337:3:2020
-14338:3:2028
-14339:3:2029
-14340:3:2033
-14341:3:2034
-14342:3:2042
-14343:3:2047
-14344:3:2051
-14345:3:2052
-14346:3:2059
-14347:3:2060
-14348:3:2071
-14349:3:2079
-14350:3:2080
-14351:3:2084
-14352:3:2089
-14353:3:2090
-14354:0:2565
-14355:3:2102
-14356:0:2565
-14357:3:2104
-14358:0:2565
-14359:3:2105
-14360:3:2109
-14361:3:2110
-14362:3:2118
-14363:3:2119
-14364:3:2123
-14365:3:2124
-14366:3:2132
-14367:3:2137
-14368:3:2141
-14369:3:2142
-14370:3:2149
-14371:3:2150
-14372:3:2161
-14373:3:2169
-14374:3:2170
-14375:3:2174
-14376:3:2179
-14377:3:2180
-14378:0:2565
-14379:3:2192
-14380:0:2565
-14381:2:760
-14382:0:2565
-14383:3:2013
-14384:0:2565
-14385:2:761
-14386:0:2565
-14387:2:762
-14388:0:2565
-14389:2:763
-14390:0:2565
-14391:1:101
-14392:0:2565
-14393:3:2014
-14394:0:2565
-14395:3:2015
-14396:3:2019
-14397:3:2020
-14398:3:2028
-14399:3:2029
-14400:3:2033
-14401:3:2034
-14402:3:2042
-14403:3:2047
-14404:3:2051
-14405:3:2052
-14406:3:2059
-14407:3:2060
-14408:3:2071
-14409:3:2079
-14410:3:2080
-14411:3:2084
-14412:3:2089
-14413:3:2090
-14414:0:2565
-14415:3:2102
-14416:0:2565
-14417:3:2104
-14418:0:2565
-14419:3:2105
-14420:3:2109
-14421:3:2110
-14422:3:2118
-14423:3:2119
-14424:3:2123
-14425:3:2124
-14426:3:2132
-14427:3:2137
-14428:3:2141
-14429:3:2142
-14430:3:2149
-14431:3:2150
-14432:3:2161
-14433:3:2169
-14434:3:2170
-14435:3:2174
-14436:3:2179
-14437:3:2180
-14438:0:2565
-14439:3:2192
-14440:0:2565
-14441:3:2013
-14442:0:2565
-14443:1:100
-14444:0:2565
-14445:3:2014
-14446:0:2565
-14447:3:2015
-14448:3:2019
-14449:3:2020
-14450:3:2028
-14451:3:2029
-14452:3:2033
-14453:3:2034
-14454:3:2042
-14455:3:2047
-14456:3:2051
-14457:3:2052
-14458:3:2059
-14459:3:2060
-14460:3:2071
-14461:3:2079
-14462:3:2080
-14463:3:2084
-14464:3:2089
-14465:3:2090
-14466:0:2565
-14467:3:2102
-14468:0:2565
-14469:3:2104
-14470:0:2565
-14471:3:2105
-14472:3:2109
-14473:3:2110
-14474:3:2118
-14475:3:2119
-14476:3:2123
-14477:3:2124
-14478:3:2132
-14479:3:2137
-14480:3:2141
-14481:3:2142
-14482:3:2149
-14483:3:2150
-14484:3:2161
-14485:3:2169
-14486:3:2170
-14487:3:2174
-14488:3:2179
-14489:3:2180
-14490:0:2565
-14491:3:2192
-14492:0:2565
-14493:2:765
-14494:0:2565
-14495:3:2013
-14496:0:2565
-14497:1:101
-14498:0:2565
-14499:3:2014
-14500:0:2565
-14501:3:2015
-14502:3:2019
-14503:3:2020
-14504:3:2028
-14505:3:2029
-14506:3:2033
-14507:3:2034
-14508:3:2042
-14509:3:2047
-14510:3:2051
-14511:3:2052
-14512:3:2059
-14513:3:2060
-14514:3:2071
-14515:3:2079
-14516:3:2080
-14517:3:2084
-14518:3:2089
-14519:3:2090
-14520:0:2565
-14521:3:2102
-14522:0:2565
-14523:3:2104
-14524:0:2565
-14525:3:2105
-14526:3:2109
-14527:3:2110
-14528:3:2118
-14529:3:2119
-14530:3:2123
-14531:3:2124
-14532:3:2132
-14533:3:2137
-14534:3:2141
-14535:3:2142
-14536:3:2149
-14537:3:2150
-14538:3:2161
-14539:3:2169
-14540:3:2170
-14541:3:2174
-14542:3:2179
-14543:3:2180
-14544:0:2565
-14545:3:2192
-14546:0:2565
-14547:3:2013
-14548:0:2565
-14549:2:766
-14550:2:770
-14551:2:771
-14552:2:779
-14553:2:788
-14554:2:789
-14555:2:793
-14556:2:798
-14557:2:802
-14558:2:803
-14559:2:810
-14560:2:811
-14561:2:822
-14562:2:823
-14563:2:826
-14564:2:827
-14565:2:835
-14566:2:840
-14567:2:841
-14568:0:2565
-14569:3:2014
-14570:0:2565
-14571:3:2015
-14572:3:2019
-14573:3:2020
-14574:3:2028
-14575:3:2029
-14576:3:2033
-14577:3:2034
-14578:3:2042
-14579:3:2047
-14580:3:2051
-14581:3:2052
-14582:3:2059
-14583:3:2060
-14584:3:2071
-14585:3:2079
-14586:3:2080
-14587:3:2084
-14588:3:2089
-14589:3:2090
-14590:0:2565
-14591:3:2102
-14592:0:2565
-14593:3:2104
-14594:0:2565
-14595:3:2105
-14596:3:2109
-14597:3:2110
-14598:3:2118
-14599:3:2119
-14600:3:2123
-14601:3:2124
-14602:3:2132
-14603:3:2137
-14604:3:2141
-14605:3:2142
-14606:3:2149
-14607:3:2150
-14608:3:2161
-14609:3:2169
-14610:3:2170
-14611:3:2174
-14612:3:2179
-14613:3:2180
-14614:0:2565
-14615:3:2192
-14616:0:2565
-14617:2:853
-14618:0:2565
-14619:3:2013
-14620:0:2565
-14621:2:857
-14622:0:2565
-14623:2:465
-14624:0:2565
-14625:3:2014
-14626:0:2565
-14627:3:2015
-14628:3:2019
-14629:3:2020
-14630:3:2028
-14631:3:2029
-14632:3:2033
-14633:3:2034
-14634:3:2042
-14635:3:2047
-14636:3:2051
-14637:3:2052
-14638:3:2059
-14639:3:2060
-14640:3:2071
-14641:3:2079
-14642:3:2080
-14643:3:2084
-14644:3:2089
-14645:3:2090
-14646:0:2565
-14647:3:2102
-14648:0:2565
-14649:3:2104
-14650:0:2565
-14651:3:2105
-14652:3:2109
-14653:3:2110
-14654:3:2118
-14655:3:2119
-14656:3:2123
-14657:3:2124
-14658:3:2132
-14659:3:2137
-14660:3:2141
-14661:3:2142
-14662:3:2149
-14663:3:2150
-14664:3:2161
-14665:3:2169
-14666:3:2170
-14667:3:2174
-14668:3:2179
-14669:3:2180
-14670:0:2565
-14671:3:2192
-14672:0:2565
-14673:2:466
-14674:0:2565
-14675:3:2013
-14676:0:2565
-14677:3:2014
-14678:0:2565
-14679:3:2015
-14680:3:2019
-14681:3:2020
-14682:3:2028
-14683:3:2029
-14684:3:2033
-14685:3:2034
-14686:3:2042
-14687:3:2047
-14688:3:2051
-14689:3:2052
-14690:3:2059
-14691:3:2060
-14692:3:2071
-14693:3:2079
-14694:3:2080
-14695:3:2084
-14696:3:2089
-14697:3:2090
-14698:0:2565
-14699:3:2102
-14700:0:2565
-14701:3:2104
-14702:0:2565
-14703:3:2105
-14704:3:2109
-14705:3:2110
-14706:3:2118
-14707:3:2119
-14708:3:2123
-14709:3:2124
-14710:3:2132
-14711:3:2137
-14712:3:2141
-14713:3:2142
-14714:3:2149
-14715:3:2150
-14716:3:2161
-14717:3:2169
-14718:3:2170
-14719:3:2174
-14720:3:2179
-14721:3:2180
-14722:0:2565
-14723:2:467
-14724:0:2565
-14725:3:2192
-14726:0:2565
-14727:3:2013
-14728:0:2565
-14729:3:2014
-14730:0:2565
-14731:3:2015
-14732:3:2019
-14733:3:2020
-14734:3:2028
-14735:3:2029
-14736:3:2033
-14737:3:2034
-14738:3:2042
-14739:3:2047
-14740:3:2051
-14741:3:2052
-14742:3:2059
-14743:3:2060
-14744:3:2071
-14745:3:2079
-14746:3:2080
-14747:3:2084
-14748:3:2089
-14749:3:2090
-14750:0:2565
-14751:3:2102
-14752:0:2565
-14753:3:2104
-14754:0:2565
-14755:1:102
-14756:0:2565
-14757:2:468
-14758:0:2565
-14759:3:2105
-14760:3:2109
-14761:3:2110
-14762:3:2118
-14763:3:2119
-14764:3:2123
-14765:3:2124
-14766:3:2132
-14767:3:2137
-14768:3:2141
-14769:3:2142
-14770:3:2149
-14771:3:2150
-14772:3:2161
-14773:3:2169
-14774:3:2170
-14775:3:2174
-14776:3:2179
-14777:3:2180
-14778:0:2565
-14779:3:2192
-14780:0:2565
-14781:3:2013
-14782:0:2565
-14783:3:2014
-14784:0:2565
-14785:3:2015
-14786:3:2019
-14787:3:2020
-14788:3:2028
-14789:3:2029
-14790:3:2033
-14791:3:2034
-14792:3:2042
-14793:3:2047
-14794:3:2051
-14795:3:2052
-14796:3:2059
-14797:3:2060
-14798:3:2071
-14799:3:2079
-14800:3:2080
-14801:3:2084
-14802:3:2089
-14803:3:2090
-14804:0:2565
-14805:3:2102
-14806:0:2565
-14807:3:2104
-14808:0:2565
-14809:2:467
-14810:0:2565
-14811:2:468
-14812:0:2565
-14813:3:2105
-14814:3:2109
-14815:3:2110
-14816:3:2118
-14817:3:2119
-14818:3:2123
-14819:3:2124
-14820:3:2132
-14821:3:2137
-14822:3:2141
-14823:3:2142
-14824:3:2149
-14825:3:2150
-14826:3:2161
-14827:3:2169
-14828:3:2170
-14829:3:2174
-14830:3:2179
-14831:3:2180
-14832:0:2565
-14833:3:2192
-14834:0:2565
-14835:3:2013
-14836:0:2565
-14837:3:2014
-14838:0:2565
-14839:3:2015
-14840:3:2019
-14841:3:2020
-14842:3:2028
-14843:3:2029
-14844:3:2033
-14845:3:2034
-14846:3:2042
-14847:3:2047
-14848:3:2051
-14849:3:2052
-14850:3:2059
-14851:3:2060
-14852:3:2071
-14853:3:2079
-14854:3:2080
-14855:3:2084
-14856:3:2089
-14857:3:2090
-14858:0:2565
-14859:3:2102
-14860:0:2565
-14861:2:467
-14862:0:2565
-14863:1:108
-14864:0:2565
-14865:2:468
-14866:0:2565
-14867:3:2104
-14868:0:2565
-14869:3:2105
-14870:3:2109
-14871:3:2110
-14872:3:2118
-14873:3:2119
-14874:3:2123
-14875:3:2124
-14876:3:2132
-14877:3:2137
-14878:3:2141
-14879:3:2142
-14880:3:2149
-14881:3:2150
-14882:3:2161
-14883:3:2169
-14884:3:2170
-14885:3:2174
-14886:3:2179
-14887:3:2180
-14888:0:2565
-14889:3:2192
-14890:0:2565
-14891:3:2013
-14892:0:2565
-14893:3:2014
-14894:0:2565
-14895:3:2015
-14896:3:2019
-14897:3:2020
-14898:3:2028
-14899:3:2029
-14900:3:2033
-14901:3:2034
-14902:3:2042
-14903:3:2047
-14904:3:2051
-14905:3:2052
-14906:3:2059
-14907:3:2060
-14908:3:2071
-14909:3:2079
-14910:3:2080
-14911:3:2084
-14912:3:2089
-14913:3:2090
-14914:0:2565
-14915:3:2102
-14916:0:2565
-14917:2:467
-14918:0:2565
-14919:2:468
-14920:0:2565
-14921:3:2104
-14922:0:2565
-14923:3:2105
-14924:3:2109
-14925:3:2110
-14926:3:2118
-14927:3:2119
-14928:3:2123
-14929:3:2124
-14930:3:2132
-14931:3:2137
-14932:3:2141
-14933:3:2142
-14934:3:2149
-14935:3:2150
-14936:3:2161
-14937:3:2169
-14938:3:2170
-14939:3:2174
-14940:3:2179
-14941:3:2180
-14942:0:2565
-14943:3:2192
-14944:0:2565
-14945:3:2013
-14946:0:2565
-14947:3:2014
-14948:0:2565
-14949:3:2015
-14950:3:2019
-14951:3:2020
-14952:3:2028
-14953:3:2029
-14954:3:2033
-14955:3:2034
-14956:3:2042
-14957:3:2047
-14958:3:2051
-14959:3:2052
-14960:3:2059
-14961:3:2060
-14962:3:2071
-14963:3:2079
-14964:3:2080
-14965:3:2084
-14966:3:2089
-14967:3:2090
-14968:0:2565
-14969:2:467
-14970:0:2565
-14971:1:109
-14972:1:113
-14973:1:114
-14974:1:122
-14975:1:123
-14976:1:124
-14977:1:136
-14978:1:141
-14979:1:145
-14980:1:146
-14981:1:153
-14982:1:154
-14983:1:165
-14984:1:166
-14985:1:167
-14986:1:178
-14987:1:183
-14988:1:184
-14989:0:2565
-14990:3:2102
-14991:0:2565
-14992:3:2104
-14993:0:2565
-14994:1:196
-14995:0:2565
-14996:3:2105
-14997:3:2109
-14998:3:2110
-14999:3:2118
-15000:3:2119
-15001:3:2123
-15002:3:2124
-15003:3:2132
-15004:3:2137
-15005:3:2141
-15006:3:2142
-15007:3:2149
-15008:3:2150
-15009:3:2161
-15010:3:2169
-15011:3:2170
-15012:3:2174
-15013:3:2179
-15014:3:2180
-15015:0:2565
-15016:1:197
-15017:0:2565
-15018:3:2192
-15019:0:2565
-15020:3:2013
-15021:0:2565
-15022:2:468
-15023:0:2565
-15024:1:198
-15025:0:2565
-15026:3:2014
-15027:0:2565
-15028:3:2015
-15029:3:2019
-15030:3:2020
-15031:3:2028
-15032:3:2029
-15033:3:2033
-15034:3:2034
-15035:3:2042
-15036:3:2047
-15037:3:2051
-15038:3:2052
-15039:3:2059
-15040:3:2060
-15041:3:2071
-15042:3:2079
-15043:3:2080
-15044:3:2084
-15045:3:2089
-15046:3:2090
-15047:0:2565
-15048:3:2102
-15049:0:2565
-15050:3:2104
-15051:0:2565
-15052:3:2105
-15053:3:2109
-15054:3:2110
-15055:3:2118
-15056:3:2119
-15057:3:2123
-15058:3:2124
-15059:3:2132
-15060:3:2137
-15061:3:2141
-15062:3:2142
-15063:3:2149
-15064:3:2150
-15065:3:2161
-15066:3:2169
-15067:3:2170
-15068:3:2174
-15069:3:2179
-15070:3:2180
-15071:0:2565
-15072:3:2192
-15073:0:2565
-15074:3:2013
-15075:0:2565
-15076:1:197
-15077:0:2565
-15078:3:2014
-15079:0:2565
-15080:3:2015
-15081:3:2019
-15082:3:2020
-15083:3:2028
-15084:3:2029
-15085:3:2033
-15086:3:2034
-15087:3:2042
-15088:3:2047
-15089:3:2051
-15090:3:2052
-15091:3:2059
-15092:3:2060
-15093:3:2071
-15094:3:2079
-15095:3:2080
-15096:3:2084
-15097:3:2089
-15098:3:2090
-15099:0:2565
-15100:3:2102
-15101:0:2565
-15102:3:2104
-15103:0:2565
-15104:3:2105
-15105:3:2109
-15106:3:2110
-15107:3:2118
-15108:3:2119
-15109:3:2123
-15110:3:2124
-15111:3:2132
-15112:3:2137
-15113:3:2141
-15114:3:2142
-15115:3:2149
-15116:3:2150
-15117:3:2161
-15118:3:2169
-15119:3:2170
-15120:3:2174
-15121:3:2179
-15122:3:2180
-15123:0:2565
-15124:3:2192
-15125:0:2565
-15126:2:469
-15127:0:2565
-15128:3:2013
-15129:0:2565
-15130:2:475
-15131:0:2565
-15132:2:476
-15133:0:2565
-15134:1:198
-15135:0:2565
-15136:3:2014
-15137:0:2565
-15138:3:2015
-15139:3:2019
-15140:3:2020
-15141:3:2028
-15142:3:2029
-15143:3:2033
-15144:3:2034
-15145:3:2042
-15146:3:2047
-15147:3:2051
-15148:3:2052
-15149:3:2059
-15150:3:2060
-15151:3:2071
-15152:3:2079
-15153:3:2080
-15154:3:2084
-15155:3:2089
-15156:3:2090
-15157:0:2565
-15158:3:2102
-15159:0:2565
-15160:3:2104
-15161:0:2565
-15162:3:2105
-15163:3:2109
-15164:3:2110
-15165:3:2118
-15166:3:2119
-15167:3:2123
-15168:3:2124
-15169:3:2132
-15170:3:2137
-15171:3:2141
-15172:3:2142
-15173:3:2149
-15174:3:2150
-15175:3:2161
-15176:3:2169
-15177:3:2170
-15178:3:2174
-15179:3:2179
-15180:3:2180
-15181:0:2565
-15182:3:2192
-15183:0:2565
-15184:3:2013
-15185:0:2565
-15186:1:197
-15187:0:2565
-15188:3:2014
-15189:0:2565
-15190:3:2015
-15191:3:2019
-15192:3:2020
-15193:3:2028
-15194:3:2029
-15195:3:2033
-15196:3:2034
-15197:3:2042
-15198:3:2047
-15199:3:2051
-15200:3:2052
-15201:3:2059
-15202:3:2060
-15203:3:2071
-15204:3:2079
-15205:3:2080
-15206:3:2084
-15207:3:2089
-15208:3:2090
-15209:0:2565
-15210:3:2102
-15211:0:2565
-15212:3:2104
-15213:0:2565
-15214:3:2105
-15215:3:2109
-15216:3:2110
-15217:3:2118
-15218:3:2119
-15219:3:2123
-15220:3:2124
-15221:3:2132
-15222:3:2137
-15223:3:2141
-15224:3:2142
-15225:3:2149
-15226:3:2150
-15227:3:2161
-15228:3:2169
-15229:3:2170
-15230:3:2174
-15231:3:2179
-15232:3:2180
-15233:0:2565
-15234:3:2192
-15235:0:2565
-15236:2:477
-15237:2:481
-15238:2:482
-15239:2:490
-15240:2:491
-15241:2:495
-15242:2:496
-15243:2:504
-15244:2:509
-15245:2:513
-15246:2:514
-15247:2:521
-15248:2:522
-15249:2:533
-15250:2:534
-15251:2:535
-15252:2:546
-15253:2:551
-15254:2:552
-15255:0:2565
-15256:3:2013
-15257:0:2565
-15258:1:198
-15259:0:2565
-15260:3:2014
-15261:0:2565
-15262:3:2015
-15263:3:2019
-15264:3:2020
-15265:3:2028
-15266:3:2029
-15267:3:2033
-15268:3:2034
-15269:3:2042
-15270:3:2047
-15271:3:2051
-15272:3:2052
-15273:3:2059
-15274:3:2060
-15275:3:2071
-15276:3:2079
-15277:3:2080
-15278:3:2084
-15279:3:2089
-15280:3:2090
-15281:0:2565
-15282:3:2102
-15283:0:2565
-15284:3:2104
-15285:0:2565
-15286:3:2105
-15287:3:2109
-15288:3:2110
-15289:3:2118
-15290:3:2119
-15291:3:2123
-15292:3:2124
-15293:3:2132
-15294:3:2137
-15295:3:2141
-15296:3:2142
-15297:3:2149
-15298:3:2150
-15299:3:2161
-15300:3:2169
-15301:3:2170
-15302:3:2174
-15303:3:2179
-15304:3:2180
-15305:0:2565
-15306:3:2192
-15307:0:2565
-15308:3:2013
-15309:0:2565
-15310:1:197
-15311:0:2565
-15312:3:2014
-15313:0:2565
-15314:3:2015
-15315:3:2019
-15316:3:2020
-15317:3:2028
-15318:3:2029
-15319:3:2033
-15320:3:2034
-15321:3:2042
-15322:3:2047
-15323:3:2051
-15324:3:2052
-15325:3:2059
-15326:3:2060
-15327:3:2071
-15328:3:2079
-15329:3:2080
-15330:3:2084
-15331:3:2089
-15332:3:2090
-15333:0:2565
-15334:3:2102
-15335:0:2565
-15336:3:2104
-15337:0:2565
-15338:3:2105
-15339:3:2109
-15340:3:2110
-15341:3:2118
-15342:3:2119
-15343:3:2123
-15344:3:2124
-15345:3:2132
-15346:3:2137
-15347:3:2141
-15348:3:2142
-15349:3:2149
-15350:3:2150
-15351:3:2161
-15352:3:2169
-15353:3:2170
-15354:3:2174
-15355:3:2179
-15356:3:2180
-15357:0:2565
-15358:3:2192
-15359:0:2565
-15360:2:564
-15361:0:2565
-15362:3:2013
-15363:0:2565
-15364:1:198
-15365:0:2565
-15366:3:2014
-15367:0:2565
-15368:3:2015
-15369:3:2019
-15370:3:2020
-15371:3:2028
-15372:3:2029
-15373:3:2033
-15374:3:2034
-15375:3:2042
-15376:3:2047
-15377:3:2051
-15378:3:2052
-15379:3:2059
-15380:3:2060
-15381:3:2071
-15382:3:2079
-15383:3:2080
-15384:3:2084
-15385:3:2089
-15386:3:2090
-15387:0:2565
-15388:3:2102
-15389:0:2565
-15390:3:2104
-15391:0:2565
-15392:3:2105
-15393:3:2109
-15394:3:2110
-15395:3:2118
-15396:3:2119
-15397:3:2123
-15398:3:2124
-15399:3:2132
-15400:3:2137
-15401:3:2141
-15402:3:2142
-15403:3:2149
-15404:3:2150
-15405:3:2161
-15406:3:2169
-15407:3:2170
-15408:3:2174
-15409:3:2179
-15410:3:2180
-15411:0:2565
-15412:3:2192
-15413:0:2565
-15414:3:2013
-15415:0:2565
-15416:2:565
-15417:2:569
-15418:2:570
-15419:2:578
-15420:2:579
-15421:2:583
-15422:2:584
-15423:2:592
-15424:2:597
-15425:2:601
-15426:2:602
-15427:2:609
-15428:2:610
-15429:2:621
-15430:2:622
-15431:2:623
-15432:2:634
-15433:2:639
-15434:2:640
-15435:0:2565
-15436:3:2014
-15437:0:2565
-15438:3:2015
-15439:3:2019
-15440:3:2020
-15441:3:2028
-15442:3:2029
-15443:3:2033
-15444:3:2034
-15445:3:2042
-15446:3:2047
-15447:3:2051
-15448:3:2052
-15449:3:2059
-15450:3:2060
-15451:3:2071
-15452:3:2079
-15453:3:2080
-15454:3:2084
-15455:3:2089
-15456:3:2090
-15457:0:2565
-15458:3:2102
-15459:0:2565
-15460:1:197
-15461:0:2565
-15462:2:652
-15463:0:2565
-15464:1:198
-15465:0:2565
-15466:3:2104
-15467:0:2565
-15468:3:2105
-15469:3:2109
-15470:3:2110
-15471:3:2118
-15472:3:2119
-15473:3:2123
-15474:3:2124
-15475:3:2132
-15476:3:2137
-15477:3:2141
-15478:3:2142
-15479:3:2149
-15480:3:2150
-15481:3:2161
-15482:3:2169
-15483:3:2170
-15484:3:2174
-15485:3:2179
-15486:3:2180
-15487:0:2565
-15488:3:2192
-15489:0:2565
-15490:3:2013
-15491:0:2565
-15492:3:2014
-15493:0:2565
-15494:3:2015
-15495:3:2019
-15496:3:2020
-15497:3:2028
-15498:3:2029
-15499:3:2033
-15500:3:2034
-15501:3:2042
-15502:3:2047
-15503:3:2051
-15504:3:2052
-15505:3:2059
-15506:3:2060
-15507:3:2071
-15508:3:2079
-15509:3:2080
-15510:3:2084
-15511:3:2089
-15512:3:2090
-15513:0:2565
-15514:3:2102
-15515:0:2565
-15516:1:197
-15517:0:2565
-15518:3:2104
-15519:0:2565
-15520:3:2105
-15521:3:2109
-15522:3:2110
-15523:3:2118
-15524:3:2119
-15525:3:2123
-15526:3:2124
-15527:3:2132
-15528:3:2137
-15529:3:2141
-15530:3:2142
-15531:3:2149
-15532:3:2150
-15533:3:2161
-15534:3:2169
-15535:3:2170
-15536:3:2174
-15537:3:2179
-15538:3:2180
-15539:0:2565
-15540:3:2192
-15541:0:2565
-15542:3:2013
-15543:0:2565
-15544:3:2014
-15545:0:2565
-15546:3:2015
-15547:3:2019
-15548:3:2020
-15549:3:2028
-15550:3:2029
-15551:3:2033
-15552:3:2034
-15553:3:2042
-15554:3:2047
-15555:3:2051
-15556:3:2052
-15557:3:2059
-15558:3:2060
-15559:3:2071
-15560:3:2079
-15561:3:2080
-15562:3:2084
-15563:3:2089
-15564:3:2090
-15565:0:2565
-15566:2:653
-15567:0:2565
-15568:3:2102
-15569:0:2565
-15570:1:198
-15571:0:2565
-15572:3:2104
-15573:0:2565
-15574:3:2105
-15575:3:2109
-15576:3:2110
-15577:3:2118
-15578:3:2119
-15579:3:2123
-15580:3:2124
-15581:3:2132
-15582:3:2137
-15583:3:2141
-15584:3:2142
-15585:3:2149
-15586:3:2150
-15587:3:2161
-15588:3:2169
-15589:3:2170
-15590:3:2174
-15591:3:2179
-15592:3:2180
-15593:0:2565
-15594:3:2192
-15595:0:2565
-15596:3:2013
-15597:0:2565
-15598:3:2014
-15599:0:2565
-15600:3:2015
-15601:3:2019
-15602:3:2020
-15603:3:2028
-15604:3:2029
-15605:3:2033
-15606:3:2034
-15607:3:2042
-15608:3:2047
-15609:3:2051
-15610:3:2052
-15611:3:2059
-15612:3:2060
-15613:3:2071
-15614:3:2079
-15615:3:2080
-15616:3:2084
-15617:3:2089
-15618:3:2090
-15619:0:2565
-15620:3:2102
-15621:0:2565
-15622:1:197
-15623:0:2565
-15624:3:2104
-15625:0:2565
-15626:3:2105
-15627:3:2109
-15628:3:2110
-15629:3:2118
-15630:3:2119
-15631:3:2123
-15632:3:2124
-15633:3:2132
-15634:3:2137
-15635:3:2141
-15636:3:2142
-15637:3:2149
-15638:3:2150
-15639:3:2161
-15640:3:2169
-15641:3:2170
-15642:3:2174
-15643:3:2179
-15644:3:2180
-15645:0:2565
-15646:3:2192
-15647:0:2565
-15648:3:2013
-15649:0:2565
-15650:3:2014
-15651:0:2565
-15652:3:2015
-15653:3:2019
-15654:3:2020
-15655:3:2028
-15656:3:2029
-15657:3:2033
-15658:3:2034
-15659:3:2042
-15660:3:2047
-15661:3:2051
-15662:3:2052
-15663:3:2059
-15664:3:2060
-15665:3:2071
-15666:3:2079
-15667:3:2080
-15668:3:2084
-15669:3:2089
-15670:3:2090
-15671:0:2565
-15672:2:654
-15673:2:658
-15674:2:659
-15675:2:667
-15676:2:668
-15677:2:672
-15678:2:673
-15679:2:681
-15680:2:686
-15681:2:690
-15682:2:691
-15683:2:698
-15684:2:699
-15685:2:710
-15686:2:711
-15687:2:712
-15688:2:723
-15689:2:728
-15690:2:729
-15691:0:2565
-15692:3:2102
-15693:0:2565
-15694:1:198
-15695:0:2565
-15696:3:2104
-15697:0:2565
-15698:3:2105
-15699:3:2109
-15700:3:2110
-15701:3:2118
-15702:3:2119
-15703:3:2123
-15704:3:2124
-15705:3:2132
-15706:3:2137
-15707:3:2141
-15708:3:2142
-15709:3:2149
-15710:3:2150
-15711:3:2161
-15712:3:2169
-15713:3:2170
-15714:3:2174
-15715:3:2179
-15716:3:2180
-15717:0:2565
-15718:3:2192
-15719:0:2565
-15720:3:2013
-15721:0:2565
-15722:3:2014
-15723:0:2565
-15724:3:2015
-15725:3:2019
-15726:3:2020
-15727:3:2028
-15728:3:2029
-15729:3:2033
-15730:3:2034
-15731:3:2042
-15732:3:2047
-15733:3:2051
-15734:3:2052
-15735:3:2059
-15736:3:2060
-15737:3:2071
-15738:3:2079
-15739:3:2080
-15740:3:2084
-15741:3:2089
-15742:3:2090
-15743:0:2565
-15744:3:2102
-15745:0:2565
-15746:2:741
-15747:0:2565
-15748:2:750
-15749:0:2565
-15750:3:2104
-15751:0:2565
-15752:3:2105
-15753:3:2109
-15754:3:2110
-15755:3:2118
-15756:3:2119
-15757:3:2123
-15758:3:2124
-15759:3:2132
-15760:3:2137
-15761:3:2141
-15762:3:2142
-15763:3:2149
-15764:3:2150
-15765:3:2161
-15766:3:2169
-15767:3:2170
-15768:3:2174
-15769:3:2179
-15770:3:2180
-15771:0:2565
-15772:3:2192
-15773:0:2565
-15774:3:2013
-15775:0:2565
-15776:1:197
-15777:0:2565
-15778:2:753
-15779:0:2565
-15780:1:198
-15781:0:2565
-15782:3:2014
-15783:0:2565
-15784:3:2015
-15785:3:2019
-15786:3:2020
-15787:3:2028
-15788:3:2029
-15789:3:2033
-15790:3:2034
-15791:3:2042
-15792:3:2047
-15793:3:2051
-15794:3:2052
-15795:3:2059
-15796:3:2060
-15797:3:2071
-15798:3:2079
-15799:3:2080
-15800:3:2084
-15801:3:2089
-15802:3:2090
-15803:0:2565
-15804:3:2102
-15805:0:2565
-15806:3:2104
-15807:0:2565
-15808:3:2105
-15809:3:2109
-15810:3:2110
-15811:3:2118
-15812:3:2119
-15813:3:2123
-15814:3:2124
-15815:3:2132
-15816:3:2137
-15817:3:2141
-15818:3:2142
-15819:3:2149
-15820:3:2150
-15821:3:2161
-15822:3:2169
-15823:3:2170
-15824:3:2174
-15825:3:2179
-15826:3:2180
-15827:0:2565
-15828:3:2192
-15829:0:2565
-15830:3:2013
-15831:0:2565
-15832:1:197
-15833:0:2565
-15834:3:2014
-15835:0:2565
-15836:3:2015
-15837:3:2019
-15838:3:2020
-15839:3:2028
-15840:3:2029
-15841:3:2033
-15842:3:2034
-15843:3:2042
-15844:3:2047
-15845:3:2051
-15846:3:2052
-15847:3:2059
-15848:3:2060
-15849:3:2071
-15850:3:2079
-15851:3:2080
-15852:3:2084
-15853:3:2089
-15854:3:2090
-15855:0:2565
-15856:3:2102
-15857:0:2565
-15858:3:2104
-15859:0:2565
-15860:3:2105
-15861:3:2109
-15862:3:2110
-15863:3:2118
-15864:3:2119
-15865:3:2123
-15866:3:2124
-15867:3:2132
-15868:3:2137
-15869:3:2141
-15870:3:2142
-15871:3:2149
-15872:3:2150
-15873:3:2161
-15874:3:2169
-15875:3:2170
-15876:3:2174
-15877:3:2179
-15878:3:2180
-15879:0:2565
-15880:3:2192
-15881:0:2565
-15882:2:758
-15883:0:2565
-15884:3:2013
-15885:0:2565
-15886:1:198
-15887:0:2565
-15888:3:2014
-15889:0:2565
-15890:3:2015
-15891:3:2019
-15892:3:2020
-15893:3:2028
-15894:3:2029
-15895:3:2033
-15896:3:2034
-15897:3:2042
-15898:3:2047
-15899:3:2051
-15900:3:2052
-15901:3:2059
-15902:3:2060
-15903:3:2071
-15904:3:2079
-15905:3:2080
-15906:3:2084
-15907:3:2089
-15908:3:2090
-15909:0:2565
-15910:3:2102
-15911:0:2565
-15912:3:2104
-15913:0:2565
-15914:3:2105
-15915:3:2109
-15916:3:2110
-15917:3:2118
-15918:3:2119
-15919:3:2123
-15920:3:2124
-15921:3:2132
-15922:3:2137
-15923:3:2141
-15924:3:2142
-15925:3:2149
-15926:3:2150
-15927:3:2161
-15928:3:2169
-15929:3:2170
-15930:3:2174
-15931:3:2179
-15932:3:2180
-15933:0:2565
-15934:3:2192
-15935:0:2565
-15936:3:2013
-15937:0:2565
-15938:1:197
-15939:0:2565
-15940:3:2014
-15941:0:2565
-15942:3:2015
-15943:3:2019
-15944:3:2020
-15945:3:2028
-15946:3:2029
-15947:3:2033
-15948:3:2034
-15949:3:2042
-15950:3:2047
-15951:3:2051
-15952:3:2052
-15953:3:2059
-15954:3:2060
-15955:3:2071
-15956:3:2079
-15957:3:2080
-15958:3:2084
-15959:3:2089
-15960:3:2090
-15961:0:2565
-15962:3:2102
-15963:0:2565
-15964:3:2104
-15965:0:2565
-15966:3:2105
-15967:3:2109
-15968:3:2110
-15969:3:2118
-15970:3:2119
-15971:3:2123
-15972:3:2124
-15973:3:2132
-15974:3:2137
-15975:3:2141
-15976:3:2142
-15977:3:2149
-15978:3:2150
-15979:3:2161
-15980:3:2169
-15981:3:2170
-15982:3:2174
-15983:3:2179
-15984:3:2180
-15985:0:2565
-15986:3:2192
-15987:0:2565
-15988:2:759
-15989:0:2565
-15990:3:2013
-15991:0:2565
-15992:1:198
-15993:0:2565
-15994:3:2014
-15995:0:2565
-15996:3:2015
-15997:3:2019
-15998:3:2020
-15999:3:2028
-16000:3:2029
-16001:3:2033
-16002:3:2034
-16003:3:2042
-16004:3:2047
-16005:3:2051
-16006:3:2052
-16007:3:2059
-16008:3:2060
-16009:3:2071
-16010:3:2079
-16011:3:2080
-16012:3:2084
-16013:3:2089
-16014:3:2090
-16015:0:2565
-16016:3:2102
-16017:0:2565
-16018:3:2104
-16019:0:2565
-16020:3:2105
-16021:3:2109
-16022:3:2110
-16023:3:2118
-16024:3:2119
-16025:3:2123
-16026:3:2124
-16027:3:2132
-16028:3:2137
-16029:3:2141
-16030:3:2142
-16031:3:2149
-16032:3:2150
-16033:3:2161
-16034:3:2169
-16035:3:2170
-16036:3:2174
-16037:3:2179
-16038:3:2180
-16039:0:2565
-16040:3:2192
-16041:0:2565
-16042:3:2013
-16043:0:2565
-16044:1:197
-16045:0:2565
-16046:3:2014
-16047:0:2565
-16048:3:2015
-16049:3:2019
-16050:3:2020
-16051:3:2028
-16052:3:2029
-16053:3:2033
-16054:3:2034
-16055:3:2042
-16056:3:2047
-16057:3:2051
-16058:3:2052
-16059:3:2059
-16060:3:2060
-16061:3:2071
-16062:3:2079
-16063:3:2080
-16064:3:2084
-16065:3:2089
-16066:3:2090
-16067:0:2565
-16068:3:2102
-16069:0:2565
-16070:3:2104
-16071:0:2565
-16072:3:2105
-16073:3:2109
-16074:3:2110
-16075:3:2118
-16076:3:2119
-16077:3:2123
-16078:3:2124
-16079:3:2132
-16080:3:2137
-16081:3:2141
-16082:3:2142
-16083:3:2149
-16084:3:2150
-16085:3:2161
-16086:3:2169
-16087:3:2170
-16088:3:2174
-16089:3:2179
-16090:3:2180
-16091:0:2565
-16092:3:2192
-16093:0:2565
-16094:2:760
-16095:0:2565
-16096:3:2013
-16097:0:2565
-16098:2:761
-16099:0:2565
-16100:2:762
-16101:0:2565
-16102:2:763
-16103:0:2565
-16104:1:198
-16105:0:2565
-16106:3:2014
-16107:0:2565
-16108:3:2015
-16109:3:2019
-16110:3:2020
-16111:3:2028
-16112:3:2029
-16113:3:2033
-16114:3:2034
-16115:3:2042
-16116:3:2047
-16117:3:2051
-16118:3:2052
-16119:3:2059
-16120:3:2060
-16121:3:2071
-16122:3:2079
-16123:3:2080
-16124:3:2084
-16125:3:2089
-16126:3:2090
-16127:0:2565
-16128:3:2102
-16129:0:2565
-16130:3:2104
-16131:0:2565
-16132:3:2105
-16133:3:2109
-16134:3:2110
-16135:3:2118
-16136:3:2119
-16137:3:2123
-16138:3:2124
-16139:3:2132
-16140:3:2137
-16141:3:2141
-16142:3:2142
-16143:3:2149
-16144:3:2150
-16145:3:2161
-16146:3:2169
-16147:3:2170
-16148:3:2174
-16149:3:2179
-16150:3:2180
-16151:0:2565
-16152:3:2192
-16153:0:2565
-16154:3:2013
-16155:0:2565
-16156:1:197
-16157:0:2565
-16158:3:2014
-16159:0:2565
-16160:3:2015
-16161:3:2019
-16162:3:2020
-16163:3:2028
-16164:3:2029
-16165:3:2033
-16166:3:2034
-16167:3:2042
-16168:3:2047
-16169:3:2051
-16170:3:2052
-16171:3:2059
-16172:3:2060
-16173:3:2071
-16174:3:2079
-16175:3:2080
-16176:3:2084
-16177:3:2089
-16178:3:2090
-16179:0:2565
-16180:3:2102
-16181:0:2565
-16182:3:2104
-16183:0:2565
-16184:3:2105
-16185:3:2109
-16186:3:2110
-16187:3:2118
-16188:3:2119
-16189:3:2123
-16190:3:2124
-16191:3:2132
-16192:3:2137
-16193:3:2141
-16194:3:2142
-16195:3:2149
-16196:3:2150
-16197:3:2161
-16198:3:2169
-16199:3:2170
-16200:3:2174
-16201:3:2179
-16202:3:2180
-16203:0:2565
-16204:3:2192
-16205:0:2565
-16206:2:765
-16207:0:2565
-16208:3:2013
-16209:0:2565
-16210:1:198
-16211:0:2565
-16212:3:2014
-16213:0:2565
-16214:3:2015
-16215:3:2019
-16216:3:2020
-16217:3:2028
-16218:3:2029
-16219:3:2033
-16220:3:2034
-16221:3:2042
-16222:3:2047
-16223:3:2051
-16224:3:2052
-16225:3:2059
-16226:3:2060
-16227:3:2071
-16228:3:2079
-16229:3:2080
-16230:3:2084
-16231:3:2089
-16232:3:2090
-16233:0:2565
-16234:3:2102
-16235:0:2565
-16236:3:2104
-16237:0:2565
-16238:3:2105
-16239:3:2109
-16240:3:2110
-16241:3:2118
-16242:3:2119
-16243:3:2123
-16244:3:2124
-16245:3:2132
-16246:3:2137
-16247:3:2141
-16248:3:2142
-16249:3:2149
-16250:3:2150
-16251:3:2161
-16252:3:2169
-16253:3:2170
-16254:3:2174
-16255:3:2179
-16256:3:2180
-16257:0:2565
-16258:3:2192
-16259:0:2565
-16260:3:2013
-16261:0:2565
-16262:2:766
-16263:2:770
-16264:2:771
-16265:2:779
-16266:2:788
-16267:2:789
-16268:2:793
-16269:2:798
-16270:2:802
-16271:2:803
-16272:2:810
-16273:2:811
-16274:2:822
-16275:2:823
-16276:2:826
-16277:2:827
-16278:2:835
-16279:2:840
-16280:2:841
-16281:0:2565
-16282:3:2014
-16283:0:2565
-16284:3:2015
-16285:3:2019
-16286:3:2020
-16287:3:2028
-16288:3:2029
-16289:3:2033
-16290:3:2034
-16291:3:2042
-16292:3:2047
-16293:3:2051
-16294:3:2052
-16295:3:2059
-16296:3:2060
-16297:3:2071
-16298:3:2079
-16299:3:2080
-16300:3:2084
-16301:3:2089
-16302:3:2090
-16303:0:2565
-16304:3:2102
-16305:0:2565
-16306:3:2104
-16307:0:2565
-16308:3:2105
-16309:3:2109
-16310:3:2110
-16311:3:2118
-16312:3:2119
-16313:3:2123
-16314:3:2124
-16315:3:2132
-16316:3:2137
-16317:3:2141
-16318:3:2142
-16319:3:2149
-16320:3:2150
-16321:3:2161
-16322:3:2169
-16323:3:2170
-16324:3:2174
-16325:3:2179
-16326:3:2180
-16327:0:2565
-16328:3:2192
-16329:0:2565
-16330:2:853
-16331:0:2565
-16332:3:2013
-16333:0:2565
-16334:2:857
-16335:0:2565
-16336:2:465
-16337:0:2565
-16338:3:2014
-16339:0:2565
-16340:3:2015
-16341:3:2019
-16342:3:2020
-16343:3:2028
-16344:3:2029
-16345:3:2033
-16346:3:2034
-16347:3:2042
-16348:3:2047
-16349:3:2051
-16350:3:2052
-16351:3:2059
-16352:3:2060
-16353:3:2071
-16354:3:2079
-16355:3:2080
-16356:3:2084
-16357:3:2089
-16358:3:2090
-16359:0:2565
-16360:3:2102
-16361:0:2565
-16362:3:2104
-16363:0:2565
-16364:3:2105
-16365:3:2109
-16366:3:2110
-16367:3:2118
-16368:3:2119
-16369:3:2123
-16370:3:2124
-16371:3:2132
-16372:3:2137
-16373:3:2141
-16374:3:2142
-16375:3:2149
-16376:3:2150
-16377:3:2161
-16378:3:2169
-16379:3:2170
-16380:3:2174
-16381:3:2179
-16382:3:2180
-16383:0:2565
-16384:3:2192
-16385:0:2565
-16386:2:466
-16387:0:2565
-16388:3:2013
-16389:0:2565
-16390:3:2014
-16391:0:2565
-16392:3:2015
-16393:3:2019
-16394:3:2020
-16395:3:2028
-16396:3:2029
-16397:3:2033
-16398:3:2034
-16399:3:2042
-16400:3:2047
-16401:3:2051
-16402:3:2052
-16403:3:2059
-16404:3:2060
-16405:3:2071
-16406:3:2079
-16407:3:2080
-16408:3:2084
-16409:3:2089
-16410:3:2090
-16411:0:2565
-16412:3:2102
-16413:0:2565
-16414:3:2104
-16415:0:2565
-16416:3:2105
-16417:3:2109
-16418:3:2110
-16419:3:2118
-16420:3:2119
-16421:3:2123
-16422:3:2124
-16423:3:2132
-16424:3:2137
-16425:3:2141
-16426:3:2142
-16427:3:2149
-16428:3:2150
-16429:3:2161
-16430:3:2169
-16431:3:2170
-16432:3:2174
-16433:3:2179
-16434:3:2180
-16435:0:2565
-16436:2:467
-16437:0:2565
-16438:3:2192
-16439:0:2565
-16440:3:2013
-16441:0:2565
-16442:3:2014
-16443:0:2565
-16444:3:2015
-16445:3:2019
-16446:3:2020
-16447:3:2028
-16448:3:2029
-16449:3:2033
-16450:3:2034
-16451:3:2042
-16452:3:2047
-16453:3:2051
-16454:3:2052
-16455:3:2059
-16456:3:2060
-16457:3:2071
-16458:3:2079
-16459:3:2080
-16460:3:2084
-16461:3:2089
-16462:3:2090
-16463:0:2565
-16464:3:2102
-16465:0:2565
-16466:3:2104
-16467:0:2565
-16468:1:199
-16469:0:2565
-16470:2:468
-16471:0:2565
-16472:1:205
-16473:0:2565
-16474:3:2105
-16475:3:2109
-16476:3:2110
-16477:3:2118
-16478:3:2119
-16479:3:2123
-16480:3:2124
-16481:3:2132
-16482:3:2137
-16483:3:2141
-16484:3:2142
-16485:3:2149
-16486:3:2150
-16487:3:2161
-16488:3:2169
-16489:3:2170
-16490:3:2174
-16491:3:2179
-16492:3:2180
-16493:0:2565
-16494:3:2192
-16495:0:2565
-16496:3:2013
-16497:0:2565
-16498:3:2014
-16499:0:2565
-16500:3:2015
-16501:3:2019
-16502:3:2020
-16503:3:2028
-16504:3:2029
-16505:3:2033
-16506:3:2034
-16507:3:2042
-16508:3:2047
-16509:3:2051
-16510:3:2052
-16511:3:2059
-16512:3:2060
-16513:3:2071
-16514:3:2079
-16515:3:2080
-16516:3:2084
-16517:3:2089
-16518:3:2090
-16519:0:2565
-16520:3:2102
-16521:0:2565
-16522:3:2104
-16523:0:2565
-16524:2:467
-16525:0:2565
-16526:2:468
-16527:0:2565
-16528:3:2105
-16529:3:2109
-16530:3:2110
-16531:3:2118
-16532:3:2119
-16533:3:2123
-16534:3:2124
-16535:3:2132
-16536:3:2137
-16537:3:2141
-16538:3:2142
-16539:3:2149
-16540:3:2150
-16541:3:2161
-16542:3:2169
-16543:3:2170
-16544:3:2174
-16545:3:2179
-16546:3:2180
-16547:0:2565
-16548:3:2192
-16549:0:2565
-16550:3:2013
-16551:0:2565
-16552:3:2014
-16553:0:2565
-16554:3:2015
-16555:3:2019
-16556:3:2020
-16557:3:2028
-16558:3:2029
-16559:3:2033
-16560:3:2034
-16561:3:2042
-16562:3:2047
-16563:3:2051
-16564:3:2052
-16565:3:2059
-16566:3:2060
-16567:3:2071
-16568:3:2079
-16569:3:2080
-16570:3:2084
-16571:3:2089
-16572:3:2090
-16573:0:2565
-16574:3:2102
-16575:0:2565
-16576:2:467
-16577:0:2565
-16578:1:206
-16579:0:2565
-16580:2:468
-16581:0:2565
-16582:3:2104
-16583:0:2565
-16584:3:2105
-16585:3:2109
-16586:3:2110
-16587:3:2118
-16588:3:2119
-16589:3:2123
-16590:3:2124
-16591:3:2132
-16592:3:2137
-16593:3:2141
-16594:3:2142
-16595:3:2149
-16596:3:2150
-16597:3:2161
-16598:3:2169
-16599:3:2170
-16600:3:2174
-16601:3:2179
-16602:3:2180
-16603:0:2565
-16604:3:2192
-16605:0:2565
-16606:3:2013
-16607:0:2565
-16608:3:2014
-16609:0:2565
-16610:3:2015
-16611:3:2019
-16612:3:2020
-16613:3:2028
-16614:3:2029
-16615:3:2033
-16616:3:2034
-16617:3:2042
-16618:3:2047
-16619:3:2051
-16620:3:2052
-16621:3:2059
-16622:3:2060
-16623:3:2071
-16624:3:2079
-16625:3:2080
-16626:3:2084
-16627:3:2089
-16628:3:2090
-16629:0:2565
-16630:3:2102
-16631:0:2565
-16632:2:467
-16633:0:2565
-16634:2:468
-16635:0:2565
-16636:3:2104
-16637:0:2565
-16638:3:2105
-16639:3:2109
-16640:3:2110
-16641:3:2118
-16642:3:2119
-16643:3:2123
-16644:3:2124
-16645:3:2132
-16646:3:2137
-16647:3:2141
-16648:3:2142
-16649:3:2149
-16650:3:2150
-16651:3:2161
-16652:3:2169
-16653:3:2170
-16654:3:2174
-16655:3:2179
-16656:3:2180
-16657:0:2565
-16658:3:2192
-16659:0:2565
-16660:3:2013
-16661:0:2565
-16662:3:2014
-16663:0:2565
-16664:3:2015
-16665:3:2019
-16666:3:2020
-16667:3:2028
-16668:3:2029
-16669:3:2033
-16670:3:2034
-16671:3:2042
-16672:3:2047
-16673:3:2051
-16674:3:2052
-16675:3:2059
-16676:3:2060
-16677:3:2071
-16678:3:2079
-16679:3:2080
-16680:3:2084
-16681:3:2089
-16682:3:2090
-16683:0:2565
-16684:2:467
-16685:0:2565
-16686:1:207
-16687:1:211
-16688:1:212
-16689:1:220
-16690:1:229
-16691:1:230
-16692:1:234
-16693:1:239
-16694:1:243
-16695:1:244
-16696:1:251
-16697:1:252
-16698:1:263
-16699:1:264
-16700:1:267
-16701:1:268
-16702:1:276
-16703:1:281
-16704:1:282
-16705:0:2565
-16706:3:2102
-16707:0:2565
-16708:2:468
-16709:0:2565
-16710:3:2104
-16711:0:2565
-16712:3:2105
-16713:3:2109
-16714:3:2110
-16715:3:2118
-16716:3:2119
-16717:3:2123
-16718:3:2124
-16719:3:2132
-16720:3:2137
-16721:3:2141
-16722:3:2142
-16723:3:2149
-16724:3:2150
-16725:3:2161
-16726:3:2169
-16727:3:2170
-16728:3:2174
-16729:3:2179
-16730:3:2180
-16731:0:2565
-16732:3:2192
-16733:0:2565
-16734:3:2013
-16735:0:2565
-16736:3:2014
-16737:0:2565
-16738:3:2015
-16739:3:2019
-16740:3:2020
-16741:3:2028
-16742:3:2029
-16743:3:2033
-16744:3:2034
-16745:3:2042
-16746:3:2047
-16747:3:2051
-16748:3:2052
-16749:3:2059
-16750:3:2060
-16751:3:2071
-16752:3:2079
-16753:3:2080
-16754:3:2084
-16755:3:2089
-16756:3:2090
-16757:0:2565
-16758:2:467
-16759:0:2565
-16760:3:2102
-16761:0:2565
-16762:3:2104
-16763:0:2565
-16764:3:2105
-16765:3:2109
-16766:3:2110
-16767:3:2118
-16768:3:2119
-16769:3:2123
-16770:3:2124
-16771:3:2132
-16772:3:2137
-16773:3:2141
-16774:3:2142
-16775:3:2149
-16776:3:2150
-16777:3:2161
-16778:3:2169
-16779:3:2170
-16780:3:2174
-16781:3:2179
-16782:3:2180
-16783:0:2565
-16784:3:2192
-16785:0:2565
-16786:3:2013
-16787:0:2565
-16788:3:2014
-16789:0:2565
-16790:1:294
-16791:0:2565
-16792:2:468
-16793:0:2565
-16794:3:2015
-16795:3:2019
-16796:3:2020
-16797:3:2028
-16798:3:2029
-16799:3:2033
-16800:3:2034
-16801:3:2042
-16802:3:2047
-16803:3:2051
-16804:3:2052
-16805:3:2059
-16806:3:2060
-16807:3:2071
-16808:3:2079
-16809:3:2080
-16810:3:2084
-16811:3:2089
-16812:3:2090
-16813:0:2565
-16814:3:2102
-16815:0:2565
-16816:3:2104
-16817:0:2565
-16818:3:2105
-16819:3:2109
-16820:3:2110
-16821:3:2118
-16822:3:2119
-16823:3:2123
-16824:3:2124
-16825:3:2132
-16826:3:2137
-16827:3:2141
-16828:3:2142
-16829:3:2149
-16830:3:2150
-16831:3:2161
-16832:3:2169
-16833:3:2170
-16834:3:2174
-16835:3:2179
-16836:3:2180
-16837:0:2565
-16838:3:2192
-16839:0:2565
-16840:3:2013
-16841:0:2565
-16842:3:2014
-16843:0:2565
-16844:2:469
-16845:0:2565
-16846:2:475
-16847:0:2565
-16848:2:476
-16849:0:2565
-16850:3:2015
-16851:3:2019
-16852:3:2020
-16853:3:2028
-16854:3:2029
-16855:3:2033
-16856:3:2034
-16857:3:2042
-16858:3:2047
-16859:3:2051
-16860:3:2052
-16861:3:2059
-16862:3:2060
-16863:3:2071
-16864:3:2079
-16865:3:2080
-16866:3:2084
-16867:3:2089
-16868:3:2090
-16869:0:2565
-16870:3:2102
-16871:0:2565
-16872:3:2104
-16873:0:2565
-16874:3:2105
-16875:3:2109
-16876:3:2110
-16877:3:2118
-16878:3:2119
-16879:3:2123
-16880:3:2124
-16881:3:2132
-16882:3:2137
-16883:3:2141
-16884:3:2142
-16885:3:2149
-16886:3:2150
-16887:3:2161
-16888:3:2169
-16889:3:2170
-16890:3:2174
-16891:3:2179
-16892:3:2180
-16893:0:2565
-16894:3:2192
-16895:0:2565
-16896:3:2013
-16897:0:2565
-16898:2:477
-16899:2:481
-16900:2:482
-16901:2:490
-16902:2:499
-16903:2:500
-16904:2:504
-16905:2:509
-16906:2:513
-16907:2:514
-16908:2:521
-16909:2:522
-16910:2:533
-16911:2:534
-16912:2:537
-16913:2:538
-16914:2:546
-16915:2:551
-16916:2:552
-16917:0:2565
-16918:3:2014
-16919:0:2565
-16920:3:2015
-16921:3:2019
-16922:3:2020
-16923:3:2028
-16924:3:2029
-16925:3:2033
-16926:3:2034
-16927:3:2042
-16928:3:2047
-16929:3:2051
-16930:3:2052
-16931:3:2059
-16932:3:2060
-16933:3:2071
-16934:3:2079
-16935:3:2080
-16936:3:2084
-16937:3:2089
-16938:3:2090
-16939:0:2565
-16940:3:2102
-16941:0:2565
-16942:3:2104
-16943:0:2565
-16944:3:2105
-16945:3:2109
-16946:3:2110
-16947:3:2118
-16948:3:2119
-16949:3:2123
-16950:3:2124
-16951:3:2132
-16952:3:2137
-16953:3:2141
-16954:3:2142
-16955:3:2149
-16956:3:2150
-16957:3:2161
-16958:3:2169
-16959:3:2170
-16960:3:2174
-16961:3:2179
-16962:3:2180
-16963:0:2565
-16964:3:2192
-16965:0:2565
-16966:2:564
-16967:0:2565
-16968:3:2013
-16969:0:2565
-16970:3:2014
-16971:0:2565
-16972:3:2015
-16973:3:2019
-16974:3:2020
-16975:3:2028
-16976:3:2029
-16977:3:2033
-16978:3:2034
-16979:3:2042
-16980:3:2047
-16981:3:2051
-16982:3:2052
-16983:3:2059
-16984:3:2060
-16985:3:2071
-16986:3:2079
-16987:3:2080
-16988:3:2084
-16989:3:2089
-16990:3:2090
-16991:0:2565
-16992:3:2102
-16993:0:2565
-16994:3:2104
-16995:0:2565
-16996:3:2105
-16997:3:2109
-16998:3:2110
-16999:3:2118
-17000:3:2119
-17001:3:2123
-17002:3:2124
-17003:3:2132
-17004:3:2137
-17005:3:2141
-17006:3:2142
-17007:3:2149
-17008:3:2150
-17009:3:2161
-17010:3:2169
-17011:3:2170
-17012:3:2174
-17013:3:2179
-17014:3:2180
-17015:0:2565
-17016:2:565
-17017:2:569
-17018:2:570
-17019:2:578
-17020:2:587
-17021:2:588
-17022:2:592
-17023:2:597
-17024:2:601
-17025:2:602
-17026:2:609
-17027:2:610
-17028:2:621
-17029:2:622
-17030:2:625
-17031:2:626
-17032:2:634
-17033:2:639
-17034:2:640
-17035:0:2565
-17036:3:2192
-17037:0:2565
-17038:3:2013
-17039:0:2565
-17040:2:652
-17041:0:2565
-17042:3:2014
-17043:0:2565
-17044:3:2015
-17045:3:2019
-17046:3:2020
-17047:3:2028
-17048:3:2029
-17049:3:2033
-17050:3:2034
-17051:3:2042
-17052:3:2047
-17053:3:2051
-17054:3:2052
-17055:3:2059
-17056:3:2060
-17057:3:2071
-17058:3:2079
-17059:3:2080
-17060:3:2084
-17061:3:2089
-17062:3:2090
-17063:0:2565
-17064:3:2102
-17065:0:2565
-17066:3:2104
-17067:0:2565
-17068:3:2105
-17069:3:2109
-17070:3:2110
-17071:3:2118
-17072:3:2119
-17073:3:2123
-17074:3:2124
-17075:3:2132
-17076:3:2137
-17077:3:2141
-17078:3:2142
-17079:3:2149
-17080:3:2150
-17081:3:2161
-17082:3:2169
-17083:3:2170
-17084:3:2174
-17085:3:2179
-17086:3:2180
-17087:0:2565
-17088:3:2192
-17089:0:2565
-17090:2:653
-17091:0:2565
-17092:3:2013
-17093:0:2565
-17094:3:2014
-17095:0:2565
-17096:3:2015
-17097:3:2019
-17098:3:2020
-17099:3:2028
-17100:3:2029
-17101:3:2033
-17102:3:2034
-17103:3:2042
-17104:3:2047
-17105:3:2051
-17106:3:2052
-17107:3:2059
-17108:3:2060
-17109:3:2071
-17110:3:2079
-17111:3:2080
-17112:3:2084
-17113:3:2089
-17114:3:2090
-17115:0:2565
-17116:3:2102
-17117:0:2565
-17118:3:2104
-17119:0:2565
-17120:3:2105
-17121:3:2109
-17122:3:2110
-17123:3:2118
-17124:3:2119
-17125:3:2123
-17126:3:2124
-17127:3:2132
-17128:3:2137
-17129:3:2141
-17130:3:2142
-17131:3:2149
-17132:3:2150
-17133:3:2161
-17134:3:2169
-17135:3:2170
-17136:3:2174
-17137:3:2179
-17138:3:2180
-17139:0:2565
-17140:2:654
-17141:2:658
-17142:2:659
-17143:2:667
-17144:2:676
-17145:2:677
-17146:2:681
-17147:2:686
-17148:2:690
-17149:2:691
-17150:2:698
-17151:2:699
-17152:2:710
-17153:2:711
-17154:2:714
-17155:2:715
-17156:2:723
-17157:2:728
-17158:2:729
-17159:0:2565
-17160:3:2192
-17161:0:2565
-17162:3:2013
-17163:0:2565
-17164:3:2014
-17165:0:2565
-17166:3:2015
-17167:3:2019
-17168:3:2020
-17169:3:2028
-17170:3:2029
-17171:3:2033
-17172:3:2034
-17173:3:2042
-17174:3:2047
-17175:3:2051
-17176:3:2052
-17177:3:2059
-17178:3:2060
-17179:3:2071
-17180:3:2079
-17181:3:2080
-17182:3:2084
-17183:3:2089
-17184:3:2090
-17185:0:2565
-17186:3:2102
-17187:0:2565
-17188:3:2104
-17189:0:2565
-17190:1:295
-17191:0:2565
-17192:1:296
-17193:0:2565
-17194:3:2105
-17195:3:2109
-17196:3:2110
-17197:3:2118
-17198:3:2119
-17199:3:2123
-17200:3:2124
-17201:3:2132
-17202:3:2137
-17203:3:2141
-17204:3:2142
-17205:3:2149
-17206:3:2150
-17207:3:2161
-17208:3:2169
-17209:3:2170
-17210:3:2174
-17211:3:2179
-17212:3:2180
-17213:0:2565
-17214:3:2192
-17215:0:2565
-17216:3:2013
-17217:0:2565
-17218:3:2014
-17219:0:2565
-17220:3:2015
-17221:3:2019
-17222:3:2020
-17223:3:2028
-17224:3:2029
-17225:3:2033
-17226:3:2034
-17227:3:2042
-17228:3:2047
-17229:3:2051
-17230:3:2052
-17231:3:2059
-17232:3:2060
-17233:3:2071
-17234:3:2079
-17235:3:2080
-17236:3:2084
-17237:3:2089
-17238:3:2090
-17239:0:2565
-17240:3:2102
-17241:0:2565
-17242:3:2104
-17243:0:2565
-17244:1:295
-17245:0:2565
-17246:3:2105
-17247:3:2109
-17248:3:2110
-17249:3:2118
-17250:3:2119
-17251:3:2123
-17252:3:2124
-17253:3:2132
-17254:3:2137
-17255:3:2141
-17256:3:2142
-17257:3:2149
-17258:3:2150
-17259:3:2161
-17260:3:2169
-17261:3:2170
-17262:3:2174
-17263:3:2179
-17264:3:2180
-17265:0:2565
-17266:3:2192
-17267:0:2565
-17268:3:2013
-17269:0:2565
-17270:3:2014
-17271:0:2565
-17272:3:2015
-17273:3:2019
-17274:3:2020
-17275:3:2028
-17276:3:2029
-17277:3:2033
-17278:3:2034
-17279:3:2042
-17280:3:2047
-17281:3:2051
-17282:3:2052
-17283:3:2059
-17284:3:2060
-17285:3:2071
-17286:3:2079
-17287:3:2080
-17288:3:2084
-17289:3:2089
-17290:3:2090
-17291:0:2565
-17292:3:2102
-17293:0:2565
-17294:2:741
-17295:0:2565
-17296:2:750
-17297:0:2565
-17298:2:753
-17299:0:2565
-17300:1:296
-17301:0:2565
-17302:2:758
-17303:0:2565
-17304:2:759
-17305:0:2565
-17306:2:760
-17307:0:2565
-17308:2:761
-17309:0:2565
-17310:2:762
-17311:0:2565
-17312:2:763
-17313:0:2565
-17314:2:765
-17315:0:2565
-17316:2:766
-17317:2:770
-17318:2:771
-17319:2:779
-17320:2:780
-17321:2:781
-17322:2:793
-17323:2:798
-17324:2:802
-17325:2:803
-17326:2:810
-17327:2:811
-17328:2:822
-17329:2:823
-17330:2:824
-17331:2:835
-17332:2:840
-17333:2:841
-17334:0:2565
-17335:3:2104
-17336:0:2565
-17337:3:2105
-17338:3:2109
-17339:3:2110
-17340:3:2118
-17341:3:2119
-17342:3:2123
-17343:3:2124
-17344:3:2132
-17345:3:2137
-17346:3:2141
-17347:3:2142
-17348:3:2149
-17349:3:2150
-17350:3:2161
-17351:3:2169
-17352:3:2170
-17353:3:2174
-17354:3:2179
-17355:3:2180
-17356:0:2565
-17357:3:2192
-17358:0:2565
-17359:3:2013
-17360:0:2565
-17361:3:2014
-17362:0:2565
-17363:3:2015
-17364:3:2019
-17365:3:2020
-17366:3:2028
-17367:3:2029
-17368:3:2033
-17369:3:2034
-17370:3:2042
-17371:3:2047
-17372:3:2051
-17373:3:2052
-17374:3:2059
-17375:3:2060
-17376:3:2071
-17377:3:2079
-17378:3:2080
-17379:3:2084
-17380:3:2089
-17381:3:2090
-17382:0:2565
-17383:3:2102
-17384:0:2565
-17385:2:853
-17386:0:2565
-17387:2:857
-17388:0:2565
-17389:3:2104
-17390:0:2565
-17391:3:2105
-17392:3:2109
-17393:3:2110
-17394:3:2118
-17395:3:2119
-17396:3:2123
-17397:3:2124
-17398:3:2132
-17399:3:2137
-17400:3:2141
-17401:3:2142
-17402:3:2149
-17403:3:2150
-17404:3:2161
-17405:3:2169
-17406:3:2170
-17407:3:2174
-17408:3:2179
-17409:3:2180
-17410:0:2565
-17411:3:2192
-17412:0:2565
-17413:1:295
-17414:0:2565
-17415:3:2013
-17416:0:2565
-17417:2:465
-17418:0:2565
-17419:1:296
-17420:0:2565
-17421:3:2014
-17422:0:2565
-17423:3:2015
-17424:3:2019
-17425:3:2020
-17426:3:2028
-17427:3:2029
-17428:3:2033
-17429:3:2034
-17430:3:2042
-17431:3:2047
-17432:3:2051
-17433:3:2052
-17434:3:2059
-17435:3:2060
-17436:3:2071
-17437:3:2079
-17438:3:2080
-17439:3:2084
-17440:3:2089
-17441:3:2090
-17442:0:2565
-17443:3:2102
-17444:0:2565
-17445:3:2104
-17446:0:2565
-17447:3:2105
-17448:3:2109
-17449:3:2110
-17450:3:2118
-17451:3:2119
-17452:3:2123
-17453:3:2124
-17454:3:2132
-17455:3:2137
-17456:3:2141
-17457:3:2142
-17458:3:2149
-17459:3:2150
-17460:3:2161
-17461:3:2169
-17462:3:2170
-17463:3:2174
-17464:3:2179
-17465:3:2180
-17466:0:2565
-17467:3:2192
-17468:0:2565
-17469:3:2013
-17470:0:2565
-17471:1:295
-17472:0:2565
-17473:3:2014
-17474:0:2565
-17475:3:2015
-17476:3:2019
-17477:3:2020
-17478:3:2028
-17479:3:2029
-17480:3:2033
-17481:3:2034
-17482:3:2042
-17483:3:2047
-17484:3:2051
-17485:3:2052
-17486:3:2059
-17487:3:2060
-17488:3:2071
-17489:3:2079
-17490:3:2080
-17491:3:2084
-17492:3:2089
-17493:3:2090
-17494:0:2565
-17495:3:2102
-17496:0:2565
-17497:3:2104
-17498:0:2565
-17499:3:2105
-17500:3:2109
-17501:3:2110
-17502:3:2118
-17503:3:2119
-17504:3:2123
-17505:3:2124
-17506:3:2132
-17507:3:2137
-17508:3:2141
-17509:3:2142
-17510:3:2149
-17511:3:2150
-17512:3:2161
-17513:3:2169
-17514:3:2170
-17515:3:2174
-17516:3:2179
-17517:3:2180
-17518:0:2565
-17519:3:2192
-17520:0:2565
-17521:2:466
-17522:0:2565
-17523:3:2013
-17524:0:2565
-17525:1:296
-17526:0:2565
-17527:2:467
-17528:0:2565
-17529:2:468
-17530:0:2565
-17531:1:297
-17532:0:2565
-17533:2:467
-17534:0:2565
-17535:3:2014
-17536:0:2565
-17537:3:2015
-17538:3:2019
-17539:3:2020
-17540:3:2028
-17541:3:2029
-17542:3:2033
-17543:3:2034
-17544:3:2042
-17545:3:2047
-17546:3:2051
-17547:3:2052
-17548:3:2059
-17549:3:2060
-17550:3:2071
-17551:3:2079
-17552:3:2080
-17553:3:2084
-17554:3:2089
-17555:3:2090
-17556:0:2565
-17557:3:2102
-17558:0:2565
-17559:3:2104
-17560:0:2565
-17561:3:2105
-17562:3:2109
-17563:3:2110
-17564:3:2118
-17565:3:2119
-17566:3:2123
-17567:3:2124
-17568:3:2132
-17569:3:2137
-17570:3:2141
-17571:3:2142
-17572:3:2149
-17573:3:2150
-17574:3:2161
-17575:3:2169
-17576:3:2170
-17577:3:2174
-17578:3:2179
-17579:3:2180
-17580:0:2565
-17581:3:2192
-17582:0:2565
-17583:3:2013
-17584:0:2565
-17585:1:303
-17586:0:2565
-17587:2:468
-17588:0:2565
-17589:1:312
-17590:0:2565
-17591:2:467
-17592:0:2565
-17593:2:468
-17594:0:2565
-17595:1:314
-17596:0:2565
-17597:3:2014
-17598:0:2565
-17599:3:2015
-17600:3:2019
-17601:3:2020
-17602:3:2028
-17603:3:2029
-17604:3:2033
-17605:3:2034
-17606:3:2042
-17607:3:2047
-17608:3:2051
-17609:3:2052
-17610:3:2059
-17611:3:2060
-17612:3:2071
-17613:3:2079
-17614:3:2080
-17615:3:2084
-17616:3:2089
-17617:3:2090
-17618:0:2565
-17619:3:2102
-17620:0:2565
-17621:3:2104
-17622:0:2565
-17623:3:2105
-17624:3:2109
-17625:3:2110
-17626:3:2118
-17627:3:2119
-17628:3:2123
-17629:3:2124
-17630:3:2132
-17631:3:2137
-17632:3:2141
-17633:3:2142
-17634:3:2149
-17635:3:2150
-17636:3:2161
-17637:3:2169
-17638:3:2170
-17639:3:2174
-17640:3:2179
-17641:3:2180
-17642:0:2565
-17643:3:2192
-17644:0:2565
-17645:3:2013
-17646:0:2565
-17647:2:469
-17648:0:2565
-17649:2:475
-17650:0:2565
-17651:3:2014
-17652:0:2565
-17653:3:2015
-17654:3:2019
-17655:3:2020
-17656:3:2028
-17657:3:2029
-17658:3:2033
-17659:3:2034
-17660:3:2042
-17661:3:2047
-17662:3:2051
-17663:3:2052
-17664:3:2059
-17665:3:2060
-17666:3:2071
-17667:3:2079
-17668:3:2080
-17669:3:2084
-17670:3:2089
-17671:3:2090
-17672:0:2565
-17673:1:315
-17674:0:2565
-17675:3:2102
-17676:0:2565
-17677:2:476
-17678:0:2565
-17679:1:316
-17680:0:2565
-17681:3:2104
-17682:0:2565
-17683:3:2105
-17684:3:2109
-17685:3:2110
-17686:3:2118
-17687:3:2119
-17688:3:2123
-17689:3:2124
-17690:3:2132
-17691:3:2137
-17692:3:2141
-17693:3:2142
-17694:3:2149
-17695:3:2150
-17696:3:2161
-17697:3:2169
-17698:3:2170
-17699:3:2174
-17700:3:2179
-17701:3:2180
-17702:0:2565
-17703:3:2192
-17704:0:2565
-17705:3:2013
-17706:0:2565
-17707:3:2014
-17708:0:2565
-17709:3:2015
-17710:3:2019
-17711:3:2020
-17712:3:2028
-17713:3:2029
-17714:3:2033
-17715:3:2034
-17716:3:2042
-17717:3:2047
-17718:3:2051
-17719:3:2052
-17720:3:2059
-17721:3:2060
-17722:3:2071
-17723:3:2079
-17724:3:2080
-17725:3:2084
-17726:3:2089
-17727:3:2090
-17728:0:2565
-17729:3:2102
-17730:0:2565
-17731:2:477
-17732:2:481
-17733:2:482
-17734:2:490
-17735:2:499
-17736:2:500
-17737:2:504
-17738:2:509
-17739:2:513
-17740:2:514
-17741:2:521
-17742:2:522
-17743:2:533
-17744:2:534
-17745:2:537
-17746:2:538
-17747:2:546
-17748:2:551
-17749:2:552
-17750:0:2565
-17751:3:2104
-17752:0:2565
-17753:3:2105
-17754:3:2109
-17755:3:2110
-17756:3:2118
-17757:3:2119
-17758:3:2123
-17759:3:2124
-17760:3:2132
-17761:3:2137
-17762:3:2141
-17763:3:2142
-17764:3:2149
-17765:3:2150
-17766:3:2161
-17767:3:2169
-17768:3:2170
-17769:3:2174
-17770:3:2179
-17771:3:2180
-17772:0:2565
-17773:3:2192
-17774:0:2565
-17775:3:2013
-17776:0:2565
-17777:3:2014
-17778:0:2565
-17779:3:2015
-17780:3:2019
-17781:3:2020
-17782:3:2028
-17783:3:2029
-17784:3:2033
-17785:3:2034
-17786:3:2042
-17787:3:2047
-17788:3:2051
-17789:3:2052
-17790:3:2059
-17791:3:2060
-17792:3:2071
-17793:3:2079
-17794:3:2080
-17795:3:2084
-17796:3:2089
-17797:3:2090
-17798:0:2565
-17799:2:564
-17800:0:2565
-17801:3:2102
-17802:0:2565
-17803:3:2104
-17804:0:2565
-17805:3:2105
-17806:3:2109
-17807:3:2110
-17808:3:2118
-17809:3:2119
-17810:3:2123
-17811:3:2124
-17812:3:2132
-17813:3:2137
-17814:3:2141
-17815:3:2142
-17816:3:2149
-17817:3:2150
-17818:3:2161
-17819:3:2169
-17820:3:2170
-17821:3:2174
-17822:3:2179
-17823:3:2180
-17824:0:2565
-17825:3:2192
-17826:0:2565
-17827:3:2013
-17828:0:2565
-17829:3:2014
-17830:0:2565
-17831:2:565
-17832:2:569
-17833:2:570
-17834:2:578
-17835:2:579
-17836:2:580
-17837:2:592
-17838:2:597
-17839:2:601
-17840:2:602
-17841:2:609
-17842:2:610
-17843:2:621
-17844:2:622
-17845:2:623
-17846:2:634
-17847:2:639
-17848:2:640
-17849:0:2565
-17850:3:2015
-17851:3:2019
-17852:3:2020
-17853:3:2028
-17854:3:2029
-17855:3:2033
-17856:3:2034
-17857:3:2042
-17858:3:2047
-17859:3:2051
-17860:3:2052
-17861:3:2059
-17862:3:2060
-17863:3:2071
-17864:3:2079
-17865:3:2080
-17866:3:2084
-17867:3:2089
-17868:3:2090
-17869:0:2565
-17870:3:2102
-17871:0:2565
-17872:3:2104
-17873:0:2565
-17874:3:2105
-17875:3:2109
-17876:3:2110
-17877:3:2118
-17878:3:2119
-17879:3:2123
-17880:3:2124
-17881:3:2132
-17882:3:2137
-17883:3:2141
-17884:3:2142
-17885:3:2149
-17886:3:2150
-17887:3:2161
-17888:3:2169
-17889:3:2170
-17890:3:2174
-17891:3:2179
-17892:3:2180
-17893:0:2565
-17894:3:2192
-17895:0:2565
-17896:1:315
-17897:0:2565
-17898:3:2013
-17899:0:2565
-17900:2:744
-17901:0:2565
-17902:1:316
-17903:0:2565
-17904:3:2014
-17905:0:2565
-17906:3:2015
-17907:3:2019
-17908:3:2020
-17909:3:2028
-17910:3:2029
-17911:3:2033
-17912:3:2034
-17913:3:2042
-17914:3:2047
-17915:3:2051
-17916:3:2052
-17917:3:2059
-17918:3:2060
-17919:3:2071
-17920:3:2079
-17921:3:2080
-17922:3:2084
-17923:3:2089
-17924:3:2090
-17925:0:2565
-17926:3:2102
-17927:0:2565
-17928:3:2104
-17929:0:2565
-17930:3:2105
-17931:3:2109
-17932:3:2110
-17933:3:2118
-17934:3:2119
-17935:3:2123
-17936:3:2124
-17937:3:2132
-17938:3:2137
-17939:3:2141
-17940:3:2142
-17941:3:2149
-17942:3:2150
-17943:3:2161
-17944:3:2169
-17945:3:2170
-17946:3:2174
-17947:3:2179
-17948:3:2180
-17949:0:2565
-17950:3:2192
-17951:0:2565
-17952:3:2013
-17953:0:2565
-17954:1:315
-17955:0:2565
-17956:3:2014
-17957:0:2565
-17958:3:2015
-17959:3:2019
-17960:3:2020
-17961:3:2028
-17962:3:2029
-17963:3:2033
-17964:3:2034
-17965:3:2042
-17966:3:2047
-17967:3:2051
-17968:3:2052
-17969:3:2059
-17970:3:2060
-17971:3:2071
-17972:3:2079
-17973:3:2080
-17974:3:2084
-17975:3:2089
-17976:3:2090
-17977:0:2565
-17978:3:2102
-17979:0:2565
-17980:3:2104
-17981:0:2565
-17982:3:2105
-17983:3:2109
-17984:3:2110
-17985:3:2118
-17986:3:2119
-17987:3:2123
-17988:3:2124
-17989:3:2132
-17990:3:2137
-17991:3:2141
-17992:3:2142
-17993:3:2149
-17994:3:2150
-17995:3:2161
-17996:3:2169
-17997:3:2170
-17998:3:2174
-17999:3:2179
-18000:3:2180
-18001:0:2565
-18002:3:2192
-18003:0:2565
-18004:2:745
-18005:0:2565
-18006:3:2013
-18007:0:2565
-18008:2:750
-18009:0:2565
-18010:2:753
-18011:0:2565
-18012:1:316
-18013:0:2565
-18014:3:2014
-18015:0:2565
-18016:3:2015
-18017:3:2019
-18018:3:2020
-18019:3:2028
-18020:3:2029
-18021:3:2033
-18022:3:2034
-18023:3:2042
-18024:3:2047
-18025:3:2051
-18026:3:2052
-18027:3:2059
-18028:3:2060
-18029:3:2071
-18030:3:2079
-18031:3:2080
-18032:3:2084
-18033:3:2089
-18034:3:2090
-18035:0:2565
-18036:3:2102
-18037:0:2565
-18038:3:2104
-18039:0:2565
-18040:3:2105
-18041:3:2109
-18042:3:2110
-18043:3:2118
-18044:3:2119
-18045:3:2123
-18046:3:2124
-18047:3:2132
-18048:3:2137
-18049:3:2141
-18050:3:2142
-18051:3:2149
-18052:3:2150
-18053:3:2161
-18054:3:2169
-18055:3:2170
-18056:3:2174
-18057:3:2179
-18058:3:2180
-18059:0:2565
-18060:3:2192
-18061:0:2565
-18062:3:2013
-18063:0:2565
-18064:1:315
-18065:0:2565
-18066:3:2014
-18067:0:2565
-18068:3:2015
-18069:3:2019
-18070:3:2020
-18071:3:2028
-18072:3:2029
-18073:3:2033
-18074:3:2034
-18075:3:2042
-18076:3:2047
-18077:3:2051
-18078:3:2052
-18079:3:2059
-18080:3:2060
-18081:3:2071
-18082:3:2079
-18083:3:2080
-18084:3:2084
-18085:3:2089
-18086:3:2090
-18087:0:2565
-18088:3:2102
-18089:0:2565
-18090:3:2104
-18091:0:2565
-18092:3:2105
-18093:3:2109
-18094:3:2110
-18095:3:2118
-18096:3:2119
-18097:3:2123
-18098:3:2124
-18099:3:2132
-18100:3:2137
-18101:3:2141
-18102:3:2142
-18103:3:2149
-18104:3:2150
-18105:3:2161
-18106:3:2169
-18107:3:2170
-18108:3:2174
-18109:3:2179
-18110:3:2180
-18111:0:2565
-18112:3:2192
-18113:0:2565
-18114:2:758
-18115:0:2565
-18116:3:2013
-18117:0:2565
-18118:1:316
-18119:0:2565
-18120:3:2014
-18121:0:2565
-18122:3:2015
-18123:3:2019
-18124:3:2020
-18125:3:2028
-18126:3:2029
-18127:3:2033
-18128:3:2034
-18129:3:2042
-18130:3:2047
-18131:3:2051
-18132:3:2052
-18133:3:2059
-18134:3:2060
-18135:3:2071
-18136:3:2079
-18137:3:2080
-18138:3:2084
-18139:3:2089
-18140:3:2090
-18141:0:2565
-18142:3:2102
-18143:0:2565
-18144:3:2104
-18145:0:2565
-18146:3:2105
-18147:3:2109
-18148:3:2110
-18149:3:2118
-18150:3:2119
-18151:3:2123
-18152:3:2124
-18153:3:2132
-18154:3:2137
-18155:3:2141
-18156:3:2142
-18157:3:2149
-18158:3:2150
-18159:3:2161
-18160:3:2169
-18161:3:2170
-18162:3:2174
-18163:3:2179
-18164:3:2180
-18165:0:2565
-18166:3:2192
-18167:0:2565
-18168:3:2013
-18169:0:2565
-18170:1:315
-18171:0:2565
-18172:3:2014
-18173:0:2565
-18174:3:2015
-18175:3:2019
-18176:3:2020
-18177:3:2028
-18178:3:2029
-18179:3:2033
-18180:3:2034
-18181:3:2042
-18182:3:2047
-18183:3:2051
-18184:3:2052
-18185:3:2059
-18186:3:2060
-18187:3:2071
-18188:3:2079
-18189:3:2080
-18190:3:2084
-18191:3:2089
-18192:3:2090
-18193:0:2565
-18194:3:2102
-18195:0:2565
-18196:3:2104
-18197:0:2565
-18198:3:2105
-18199:3:2109
-18200:3:2110
-18201:3:2118
-18202:3:2119
-18203:3:2123
-18204:3:2124
-18205:3:2132
-18206:3:2137
-18207:3:2141
-18208:3:2142
-18209:3:2149
-18210:3:2150
-18211:3:2161
-18212:3:2169
-18213:3:2170
-18214:3:2174
-18215:3:2179
-18216:3:2180
-18217:0:2565
-18218:3:2192
-18219:0:2565
-18220:2:759
-18221:0:2565
-18222:3:2013
-18223:0:2565
-18224:1:316
-18225:0:2565
-18226:3:2014
-18227:0:2565
-18228:3:2015
-18229:3:2019
-18230:3:2020
-18231:3:2028
-18232:3:2029
-18233:3:2033
-18234:3:2034
-18235:3:2042
-18236:3:2047
-18237:3:2051
-18238:3:2052
-18239:3:2059
-18240:3:2060
-18241:3:2071
-18242:3:2079
-18243:3:2080
-18244:3:2084
-18245:3:2089
-18246:3:2090
-18247:0:2565
-18248:3:2102
-18249:0:2565
-18250:3:2104
-18251:0:2565
-18252:3:2105
-18253:3:2109
-18254:3:2110
-18255:3:2118
-18256:3:2119
-18257:3:2123
-18258:3:2124
-18259:3:2132
-18260:3:2137
-18261:3:2141
-18262:3:2142
-18263:3:2149
-18264:3:2150
-18265:3:2161
-18266:3:2169
-18267:3:2170
-18268:3:2174
-18269:3:2179
-18270:3:2180
-18271:0:2565
-18272:3:2192
-18273:0:2565
-18274:3:2013
-18275:0:2565
-18276:2:760
-18277:0:2565
-18278:2:761
-18279:0:2565
-18280:2:762
-18281:0:2565
-18282:3:2014
-18283:0:2565
-18284:3:2015
-18285:3:2019
-18286:3:2020
-18287:3:2028
-18288:3:2029
-18289:3:2033
-18290:3:2034
-18291:3:2042
-18292:3:2047
-18293:3:2051
-18294:3:2052
-18295:3:2059
-18296:3:2060
-18297:3:2071
-18298:3:2079
-18299:3:2080
-18300:3:2084
-18301:3:2089
-18302:3:2090
-18303:0:2565
-18304:3:2102
-18305:0:2565
-18306:1:315
-18307:0:2565
-18308:2:763
-18309:0:2565
-18310:1:316
-18311:0:2565
-18312:3:2104
-18313:0:2565
-18314:3:2105
-18315:3:2109
-18316:3:2110
-18317:3:2118
-18318:3:2119
-18319:3:2123
-18320:3:2124
-18321:3:2132
-18322:3:2137
-18323:3:2141
-18324:3:2142
-18325:3:2149
-18326:3:2150
-18327:3:2161
-18328:3:2169
-18329:3:2170
-18330:3:2174
-18331:3:2179
-18332:3:2180
-18333:0:2565
-18334:3:2192
-18335:0:2565
-18336:3:2013
-18337:0:2565
-18338:3:2014
-18339:0:2565
-18340:3:2015
-18341:3:2019
-18342:3:2020
-18343:3:2028
-18344:3:2029
-18345:3:2033
-18346:3:2034
-18347:3:2042
-18348:3:2047
-18349:3:2051
-18350:3:2052
-18351:3:2059
-18352:3:2060
-18353:3:2071
-18354:3:2079
-18355:3:2080
-18356:3:2084
-18357:3:2089
-18358:3:2090
-18359:0:2565
-18360:3:2102
-18361:0:2565
-18362:1:315
-18363:0:2565
-18364:3:2104
-18365:0:2565
-18366:3:2105
-18367:3:2109
-18368:3:2110
-18369:3:2118
-18370:3:2119
-18371:3:2123
-18372:3:2124
-18373:3:2132
-18374:3:2137
-18375:3:2141
-18376:3:2142
-18377:3:2149
-18378:3:2150
-18379:3:2161
-18380:3:2169
-18381:3:2170
-18382:3:2174
-18383:3:2179
-18384:3:2180
-18385:0:2565
-18386:3:2192
-18387:0:2565
-18388:3:2013
-18389:0:2565
-18390:3:2014
-18391:0:2565
-18392:3:2015
-18393:3:2019
-18394:3:2020
-18395:3:2028
-18396:3:2029
-18397:3:2033
-18398:3:2034
-18399:3:2042
-18400:3:2047
-18401:3:2051
-18402:3:2052
-18403:3:2059
-18404:3:2060
-18405:3:2071
-18406:3:2079
-18407:3:2080
-18408:3:2084
-18409:3:2089
-18410:3:2090
-18411:0:2565
-18412:2:765
-18413:0:2565
-18414:3:2102
-18415:0:2565
-18416:1:316
-18417:0:2565
-18418:3:2104
-18419:0:2565
-18420:3:2105
-18421:3:2109
-18422:3:2110
-18423:3:2118
-18424:3:2119
-18425:3:2123
-18426:3:2124
-18427:3:2132
-18428:3:2137
-18429:3:2141
-18430:3:2142
-18431:3:2149
-18432:3:2150
-18433:3:2161
-18434:3:2169
-18435:3:2170
-18436:3:2174
-18437:3:2179
-18438:3:2180
-18439:0:2565
-18440:3:2192
-18441:0:2565
-18442:3:2013
-18443:0:2565
-18444:3:2014
-18445:0:2565
-18446:3:2015
-18447:3:2019
-18448:3:2020
-18449:3:2028
-18450:3:2029
-18451:3:2033
-18452:3:2034
-18453:3:2042
-18454:3:2047
-18455:3:2051
-18456:3:2052
-18457:3:2059
-18458:3:2060
-18459:3:2071
-18460:3:2079
-18461:3:2080
-18462:3:2084
-18463:3:2089
-18464:3:2090
-18465:0:2565
-18466:3:2102
-18467:0:2565
-18468:2:766
-18469:2:770
-18470:2:771
-18471:2:779
-18472:2:788
-18473:2:789
-18474:2:793
-18475:2:798
-18476:2:802
-18477:2:803
-18478:2:810
-18479:2:811
-18480:2:822
-18481:2:823
-18482:2:826
-18483:2:827
-18484:2:835
-18485:2:840
-18486:2:841
-18487:0:2565
-18488:3:2104
-18489:0:2565
-18490:3:2105
-18491:3:2109
-18492:3:2110
-18493:3:2118
-18494:3:2119
-18495:3:2123
-18496:3:2124
-18497:3:2132
-18498:3:2137
-18499:3:2141
-18500:3:2142
-18501:3:2149
-18502:3:2150
-18503:3:2161
-18504:3:2169
-18505:3:2170
-18506:3:2174
-18507:3:2179
-18508:3:2180
-18509:0:2565
-18510:3:2192
-18511:0:2565
-18512:3:2013
-18513:0:2565
-18514:3:2014
-18515:0:2565
-18516:3:2015
-18517:3:2019
-18518:3:2020
-18519:3:2028
-18520:3:2029
-18521:3:2033
-18522:3:2034
-18523:3:2042
-18524:3:2047
-18525:3:2051
-18526:3:2052
-18527:3:2059
-18528:3:2060
-18529:3:2071
-18530:3:2079
-18531:3:2080
-18532:3:2084
-18533:3:2089
-18534:3:2090
-18535:0:2565
-18536:2:853
-18537:0:2565
-18538:3:2102
-18539:0:2565
-18540:2:857
-18541:0:2565
-18542:2:465
-18543:0:2565
-18544:3:2104
-18545:0:2565
-18546:3:2105
-18547:3:2109
-18548:3:2110
-18549:3:2118
-18550:3:2119
-18551:3:2123
-18552:3:2124
-18553:3:2132
-18554:3:2137
-18555:3:2141
-18556:3:2142
-18557:3:2149
-18558:3:2150
-18559:3:2161
-18560:3:2169
-18561:3:2170
-18562:3:2174
-18563:3:2179
-18564:3:2180
-18565:0:2565
-18566:3:2192
-18567:0:2565
-18568:3:2013
-18569:0:2565
-18570:3:2014
-18571:0:2565
-18572:3:2015
-18573:3:2019
-18574:3:2020
-18575:3:2028
-18576:3:2029
-18577:3:2033
-18578:3:2034
-18579:3:2042
-18580:3:2047
-18581:3:2051
-18582:3:2052
-18583:3:2059
-18584:3:2060
-18585:3:2071
-18586:3:2079
-18587:3:2080
-18588:3:2084
-18589:3:2089
-18590:3:2090
-18591:0:2565
-18592:2:466
-18593:0:2565
-18594:3:2102
-18595:0:2565
-18596:3:2104
-18597:0:2565
-18598:3:2105
-18599:3:2109
-18600:3:2110
-18601:3:2118
-18602:3:2119
-18603:3:2123
-18604:3:2124
-18605:3:2132
-18606:3:2137
-18607:3:2141
-18608:3:2142
-18609:3:2149
-18610:3:2150
-18611:3:2161
-18612:3:2169
-18613:3:2170
-18614:3:2174
-18615:3:2179
-18616:3:2180
-18617:0:2565
-18618:3:2192
-18619:0:2565
-18620:3:2013
-18621:0:2565
-18622:3:2014
-18623:0:2565
-18624:2:467
-18625:0:2565
-18626:3:2015
-18627:3:2019
-18628:3:2020
-18629:3:2028
-18630:3:2029
-18631:3:2033
-18632:3:2034
-18633:3:2042
-18634:3:2047
-18635:3:2051
-18636:3:2052
-18637:3:2059
-18638:3:2060
-18639:3:2071
-18640:3:2079
-18641:3:2080
-18642:3:2084
-18643:3:2089
-18644:3:2090
-18645:0:2565
-18646:3:2102
-18647:0:2565
-18648:3:2104
-18649:0:2565
-18650:3:2105
-18651:3:2109
-18652:3:2110
-18653:3:2118
-18654:3:2119
-18655:3:2123
-18656:3:2124
-18657:3:2132
-18658:3:2137
-18659:3:2141
-18660:3:2142
-18661:3:2149
-18662:3:2150
-18663:3:2161
-18664:3:2169
-18665:3:2170
-18666:3:2174
-18667:3:2179
-18668:3:2180
-18669:0:2565
-18670:3:2192
-18671:0:2565
-18672:3:2013
-18673:0:2565
-18674:1:317
-18675:0:2565
-18676:2:468
-18677:0:2565
-18678:1:323
-18679:0:2565
-18680:1:324
-18681:0:2565
-18682:3:2014
-18683:0:2565
-18684:3:2015
-18685:3:2019
-18686:3:2020
-18687:3:2028
-18688:3:2029
-18689:3:2033
-18690:3:2034
-18691:3:2042
-18692:3:2047
-18693:3:2051
-18694:3:2052
-18695:3:2059
-18696:3:2060
-18697:3:2071
-18698:3:2079
-18699:3:2080
-18700:3:2084
-18701:3:2089
-18702:3:2090
-18703:0:2565
-18704:3:2102
-18705:0:2565
-18706:3:2104
-18707:0:2565
-18708:3:2105
-18709:3:2109
-18710:3:2110
-18711:3:2118
-18712:3:2119
-18713:3:2123
-18714:3:2124
-18715:3:2132
-18716:3:2137
-18717:3:2141
-18718:3:2142
-18719:3:2149
-18720:3:2150
-18721:3:2161
-18722:3:2169
-18723:3:2170
-18724:3:2174
-18725:3:2179
-18726:3:2180
-18727:0:2565
-18728:3:2192
-18729:0:2565
-18730:3:2013
-18731:0:2565
-18732:2:467
-18733:0:2565
-18734:2:468
-18735:0:2565
-18736:3:2014
-18737:0:2565
-18738:3:2015
-18739:3:2019
-18740:3:2020
-18741:3:2028
-18742:3:2029
-18743:3:2033
-18744:3:2034
-18745:3:2042
-18746:3:2047
-18747:3:2051
-18748:3:2052
-18749:3:2059
-18750:3:2060
-18751:3:2071
-18752:3:2079
-18753:3:2080
-18754:3:2084
-18755:3:2089
-18756:3:2090
-18757:0:2565
-18758:3:2102
-18759:0:2565
-18760:3:2104
-18761:0:2565
-18762:3:2105
-18763:3:2109
-18764:3:2110
-18765:3:2118
-18766:3:2119
-18767:3:2123
-18768:3:2124
-18769:3:2132
-18770:3:2137
-18771:3:2141
-18772:3:2142
-18773:3:2149
-18774:3:2150
-18775:3:2161
-18776:3:2169
-18777:3:2170
-18778:3:2174
-18779:3:2179
-18780:3:2180
-18781:0:2565
-18782:3:2192
-18783:0:2565
-18784:2:467
-18785:0:2565
-18786:1:329
-18787:0:2565
-18788:3:2013
-18789:0:2565
-18790:2:468
-18791:0:2565
-18792:3:2014
-18793:0:2565
-18794:3:2015
-18795:3:2019
-18796:3:2020
-18797:3:2028
-18798:3:2029
-18799:3:2033
-18800:3:2034
-18801:3:2042
-18802:3:2047
-18803:3:2051
-18804:3:2052
-18805:3:2059
-18806:3:2060
-18807:3:2071
-18808:3:2079
-18809:3:2080
-18810:3:2084
-18811:3:2089
-18812:3:2090
-18813:0:2565
-18814:3:2102
-18815:0:2565
-18816:3:2104
-18817:0:2565
-18818:3:2105
-18819:3:2109
-18820:3:2110
-18821:3:2118
-18822:3:2119
-18823:3:2123
-18824:3:2124
-18825:3:2132
-18826:3:2137
-18827:3:2141
-18828:3:2142
-18829:3:2149
-18830:3:2150
-18831:3:2161
-18832:3:2169
-18833:3:2170
-18834:3:2174
-18835:3:2179
-18836:3:2180
-18837:0:2565
-18838:3:2192
-18839:0:2565
-18840:2:467
-18841:0:2565
-18842:3:2013
-18843:0:2565
-18844:3:2014
-18845:0:2565
-18846:3:2015
-18847:3:2019
-18848:3:2020
-18849:3:2028
-18850:3:2029
-18851:3:2033
-18852:3:2034
-18853:3:2042
-18854:3:2047
-18855:3:2051
-18856:3:2052
-18857:3:2059
-18858:3:2060
-18859:3:2071
-18860:3:2079
-18861:3:2080
-18862:3:2084
-18863:3:2089
-18864:3:2090
-18865:0:2565
-18866:3:2102
-18867:0:2565
-18868:3:2104
-18869:0:2565
-18870:3:2105
-18871:3:2109
-18872:3:2110
-18873:3:2118
-18874:3:2119
-18875:3:2123
-18876:3:2124
-18877:3:2132
-18878:3:2137
-18879:3:2141
-18880:3:2142
-18881:3:2149
-18882:3:2150
-18883:3:2161
-18884:3:2169
-18885:3:2170
-18886:3:2174
-18887:3:2179
-18888:3:2180
-18889:0:2565
-18890:1:330
-18891:0:2565
-18892:3:2192
-18893:0:2565
-18894:3:2013
-18895:0:2565
-18896:2:468
-18897:0:2565
-18898:3:2014
-18899:0:2565
-18900:3:2015
-18901:3:2019
-18902:3:2020
-18903:3:2028
-18904:3:2029
-18905:3:2033
-18906:3:2034
-18907:3:2042
-18908:3:2047
-18909:3:2051
-18910:3:2052
-18911:3:2059
-18912:3:2060
-18913:3:2071
-18914:3:2079
-18915:3:2080
-18916:3:2084
-18917:3:2089
-18918:3:2090
-18919:0:2565
-18920:3:2102
-18921:0:2565
-18922:3:2104
-18923:0:2565
-18924:3:2105
-18925:3:2109
-18926:3:2110
-18927:3:2118
-18928:3:2119
-18929:3:2123
-18930:3:2124
-18931:3:2132
-18932:3:2137
-18933:3:2141
-18934:3:2142
-18935:3:2149
-18936:3:2150
-18937:3:2161
-18938:3:2169
-18939:3:2170
-18940:3:2174
-18941:3:2179
-18942:3:2180
-18943:0:2565
-18944:3:2192
-18945:0:2565
-18946:2:467
-18947:0:2565
-18948:3:2013
-18949:0:2565
-18950:3:2014
-18951:0:2565
-18952:3:2015
-18953:3:2019
-18954:3:2020
-18955:3:2028
-18956:3:2029
-18957:3:2033
-18958:3:2034
-18959:3:2042
-18960:3:2047
-18961:3:2051
-18962:3:2052
-18963:3:2059
-18964:3:2060
-18965:3:2071
-18966:3:2079
-18967:3:2080
-18968:3:2084
-18969:3:2089
-18970:3:2090
-18971:0:2565
-18972:3:2102
-18973:0:2565
-18974:3:2104
-18975:0:2565
-18976:3:2105
-18977:3:2109
-18978:3:2110
-18979:3:2118
-18980:3:2119
-18981:3:2123
-18982:3:2124
-18983:3:2132
-18984:3:2137
-18985:3:2141
-18986:3:2142
-18987:3:2149
-18988:3:2150
-18989:3:2161
-18990:3:2169
-18991:3:2170
-18992:3:2174
-18993:3:2179
-18994:3:2180
-18995:0:2565
-18996:1:331
-18997:0:2565
-18998:3:2192
-18999:0:2565
-19000:3:2013
-19001:0:2565
-19002:2:468
-19003:0:2565
-19004:1:332
-19005:0:2565
-19006:1:333
-19007:0:2565
-19008:1:334
-19009:0:2565
-19010:3:2014
-19011:0:2565
-19012:3:2015
-19013:3:2019
-19014:3:2020
-19015:3:2028
-19016:3:2029
-19017:3:2033
-19018:3:2034
-19019:3:2042
-19020:3:2047
-19021:3:2051
-19022:3:2052
-19023:3:2059
-19024:3:2060
-19025:3:2071
-19026:3:2079
-19027:3:2080
-19028:3:2084
-19029:3:2089
-19030:3:2090
-19031:0:2565
-19032:3:2102
-19033:0:2565
-19034:3:2104
-19035:0:2565
-19036:3:2105
-19037:3:2109
-19038:3:2110
-19039:3:2118
-19040:3:2119
-19041:3:2123
-19042:3:2124
-19043:3:2132
-19044:3:2137
-19045:3:2141
-19046:3:2142
-19047:3:2149
-19048:3:2150
-19049:3:2161
-19050:3:2169
-19051:3:2170
-19052:3:2174
-19053:3:2179
-19054:3:2180
-19055:0:2565
-19056:3:2192
-19057:0:2565
-19058:3:2013
-19059:0:2565
-19060:2:467
-19061:0:2565
-19062:2:468
-19063:0:2565
-19064:3:2014
-19065:0:2565
-19066:3:2015
-19067:3:2019
-19068:3:2020
-19069:3:2028
-19070:3:2029
-19071:3:2033
-19072:3:2034
-19073:3:2042
-19074:3:2047
-19075:3:2051
-19076:3:2052
-19077:3:2059
-19078:3:2060
-19079:3:2071
-19080:3:2079
-19081:3:2080
-19082:3:2084
-19083:3:2089
-19084:3:2090
-19085:0:2565
-19086:3:2102
-19087:0:2565
-19088:3:2104
-19089:0:2565
-19090:3:2105
-19091:3:2109
-19092:3:2110
-19093:3:2118
-19094:3:2119
-19095:3:2123
-19096:3:2124
-19097:3:2132
-19098:3:2137
-19099:3:2141
-19100:3:2142
-19101:3:2149
-19102:3:2150
-19103:3:2161
-19104:3:2169
-19105:3:2170
-19106:3:2174
-19107:3:2179
-19108:3:2180
-19109:0:2565
-19110:3:2192
-19111:0:2565
-19112:2:467
-19113:0:2565
-19114:1:336
-19115:0:2565
-19116:3:2013
-19117:0:2565
-19118:2:468
-19119:0:2565
-19120:3:2014
-19121:0:2565
-19122:3:2015
-19123:3:2019
-19124:3:2020
-19125:3:2028
-19126:3:2029
-19127:3:2033
-19128:3:2034
-19129:3:2042
-19130:3:2047
-19131:3:2051
-19132:3:2052
-19133:3:2059
-19134:3:2060
-19135:3:2071
-19136:3:2079
-19137:3:2080
-19138:3:2084
-19139:3:2089
-19140:3:2090
-19141:0:2565
-19142:3:2102
-19143:0:2565
-19144:3:2104
-19145:0:2565
-19146:3:2105
-19147:3:2109
-19148:3:2110
-19149:3:2118
-19150:3:2119
-19151:3:2123
-19152:3:2124
-19153:3:2132
-19154:3:2137
-19155:3:2141
-19156:3:2142
-19157:3:2149
-19158:3:2150
-19159:3:2161
-19160:3:2169
-19161:3:2170
-19162:3:2174
-19163:3:2179
-19164:3:2180
-19165:0:2565
-19166:3:2192
-19167:0:2565
-19168:2:469
-19169:0:2565
-19170:3:2013
-19171:0:2565
-19172:2:475
-19173:0:2565
-19174:2:476
-19175:0:2565
-19176:3:2014
-19177:0:2565
-19178:3:2015
-19179:3:2019
-19180:3:2020
-19181:3:2028
-19182:3:2029
-19183:3:2033
-19184:3:2034
-19185:3:2042
-19186:3:2047
-19187:3:2051
-19188:3:2052
-19189:3:2059
-19190:3:2060
-19191:3:2071
-19192:3:2079
-19193:3:2080
-19194:3:2084
-19195:3:2089
-19196:3:2090
-19197:0:2565
-19198:3:2102
-19199:0:2565
-19200:3:2104
-19201:0:2565
-19202:3:2105
-19203:3:2109
-19204:3:2110
-19205:3:2118
-19206:3:2119
-19207:3:2123
-19208:3:2124
-19209:3:2132
-19210:3:2137
-19211:3:2141
-19212:3:2142
-19213:3:2149
-19214:3:2150
-19215:3:2161
-19216:3:2169
-19217:3:2170
-19218:3:2174
-19219:3:2179
-19220:3:2180
-19221:0:2565
-19222:3:2192
-19223:0:2565
-19224:2:477
-19225:2:481
-19226:2:482
-19227:2:490
-19228:2:499
-19229:2:500
-19230:2:504
-19231:2:509
-19232:2:513
-19233:2:514
-19234:2:521
-19235:2:522
-19236:2:533
-19237:2:534
-19238:2:537
-19239:2:538
-19240:2:546
-19241:2:551
-19242:2:552
-19243:0:2565
-19244:3:2013
-19245:0:2565
-19246:3:2014
-19247:0:2565
-19248:3:2015
-19249:3:2019
-19250:3:2020
-19251:3:2028
-19252:3:2029
-19253:3:2033
-19254:3:2034
-19255:3:2042
-19256:3:2047
-19257:3:2051
-19258:3:2052
-19259:3:2059
-19260:3:2060
-19261:3:2071
-19262:3:2079
-19263:3:2080
-19264:3:2084
-19265:3:2089
-19266:3:2090
-19267:0:2565
-19268:3:2102
-19269:0:2565
-19270:3:2104
-19271:0:2565
-19272:3:2105
-19273:3:2109
-19274:3:2110
-19275:3:2118
-19276:3:2119
-19277:3:2123
-19278:3:2124
-19279:3:2132
-19280:3:2137
-19281:3:2141
-19282:3:2142
-19283:3:2149
-19284:3:2150
-19285:3:2161
-19286:3:2169
-19287:3:2170
-19288:3:2174
-19289:3:2179
-19290:3:2180
-19291:0:2565
-19292:2:564
-19293:0:2565
-19294:3:2192
-19295:0:2565
-19296:3:2013
-19297:0:2565
-19298:3:2014
-19299:0:2565
-19300:3:2015
-19301:3:2019
-19302:3:2020
-19303:3:2028
-19304:3:2029
-19305:3:2033
-19306:3:2034
-19307:3:2042
-19308:3:2047
-19309:3:2051
-19310:3:2052
-19311:3:2059
-19312:3:2060
-19313:3:2071
-19314:3:2079
-19315:3:2080
-19316:3:2084
-19317:3:2089
-19318:3:2090
-19319:0:2565
-19320:3:2102
-19321:0:2565
-19322:3:2104
-19323:0:2565
-19324:2:565
-19325:2:569
-19326:2:570
-19327:2:578
-19328:2:587
-19329:2:588
-19330:2:592
-19331:2:597
-19332:2:601
-19333:2:602
-19334:2:609
-19335:2:610
-19336:2:621
-19337:2:622
-19338:2:625
-19339:2:626
-19340:2:634
-19341:2:639
-19342:2:640
-19343:0:2565
-19344:2:744
-19345:0:2565
-19346:3:2105
-19347:3:2109
-19348:3:2110
-19349:3:2118
-19350:3:2119
-19351:3:2123
-19352:3:2124
-19353:3:2132
-19354:3:2137
-19355:3:2141
-19356:3:2142
-19357:3:2149
-19358:3:2150
-19359:3:2161
-19360:3:2169
-19361:3:2170
-19362:3:2174
-19363:3:2179
-19364:3:2180
-19365:0:2565
-19366:3:2192
-19367:0:2565
-19368:3:2013
-19369:0:2565
-19370:3:2014
-19371:0:2565
-19372:3:2015
-19373:3:2019
-19374:3:2020
-19375:3:2028
-19376:3:2029
-19377:3:2033
-19378:3:2034
-19379:3:2042
-19380:3:2047
-19381:3:2051
-19382:3:2052
-19383:3:2059
-19384:3:2060
-19385:3:2071
-19386:3:2079
-19387:3:2080
-19388:3:2084
-19389:3:2089
-19390:3:2090
-19391:0:2565
-19392:3:2102
-19393:0:2565
-19394:1:337
-19395:0:2565
-19396:1:338
-19397:0:2565
-19398:3:2104
-19399:0:2565
-19400:3:2105
-19401:3:2109
-19402:3:2110
-19403:3:2118
-19404:3:2119
-19405:3:2123
-19406:3:2124
-19407:3:2132
-19408:3:2137
-19409:3:2141
-19410:3:2142
-19411:3:2149
-19412:3:2150
-19413:3:2161
-19414:3:2169
-19415:3:2170
-19416:3:2174
-19417:3:2179
-19418:3:2180
-19419:0:2565
-19420:3:2192
-19421:0:2565
-19422:3:2013
-19423:0:2565
-19424:3:2014
-19425:0:2565
-19426:3:2015
-19427:3:2019
-19428:3:2020
-19429:3:2028
-19430:3:2029
-19431:3:2033
-19432:3:2034
-19433:3:2042
-19434:3:2047
-19435:3:2051
-19436:3:2052
-19437:3:2059
-19438:3:2060
-19439:3:2071
-19440:3:2079
-19441:3:2080
-19442:3:2084
-19443:3:2089
-19444:3:2090
-19445:0:2565
-19446:3:2102
-19447:0:2565
-19448:1:337
-19449:0:2565
-19450:3:2104
-19451:0:2565
-19452:3:2105
-19453:3:2109
-19454:3:2110
-19455:3:2118
-19456:3:2119
-19457:3:2123
-19458:3:2124
-19459:3:2132
-19460:3:2137
-19461:3:2141
-19462:3:2142
-19463:3:2149
-19464:3:2150
-19465:3:2161
-19466:3:2169
-19467:3:2170
-19468:3:2174
-19469:3:2179
-19470:3:2180
-19471:0:2565
-19472:3:2192
-19473:0:2565
-19474:3:2013
-19475:0:2565
-19476:3:2014
-19477:0:2565
-19478:3:2015
-19479:3:2019
-19480:3:2020
-19481:3:2028
-19482:3:2029
-19483:3:2033
-19484:3:2034
-19485:3:2042
-19486:3:2047
-19487:3:2051
-19488:3:2052
-19489:3:2059
-19490:3:2060
-19491:3:2071
-19492:3:2079
-19493:3:2080
-19494:3:2084
-19495:3:2089
-19496:3:2090
-19497:0:2565
-19498:2:745
-19499:0:2565
-19500:3:2102
-19501:0:2565
-19502:2:750
-19503:0:2565
-19504:2:753
-19505:0:2565
-19506:1:338
-19507:0:2565
-19508:3:2104
-19509:0:2565
-19510:3:2105
-19511:3:2109
-19512:3:2110
-19513:3:2118
-19514:3:2119
-19515:3:2123
-19516:3:2124
-19517:3:2132
-19518:3:2137
-19519:3:2141
-19520:3:2142
-19521:3:2149
-19522:3:2150
-19523:3:2161
-19524:3:2169
-19525:3:2170
-19526:3:2174
-19527:3:2179
-19528:3:2180
-19529:0:2565
-19530:3:2192
-19531:0:2565
-19532:3:2013
-19533:0:2565
-19534:3:2014
-19535:0:2565
-19536:3:2015
-19537:3:2019
-19538:3:2020
-19539:3:2028
-19540:3:2029
-19541:3:2033
-19542:3:2034
-19543:3:2042
-19544:3:2047
-19545:3:2051
-19546:3:2052
-19547:3:2059
-19548:3:2060
-19549:3:2071
-19550:3:2079
-19551:3:2080
-19552:3:2084
-19553:3:2089
-19554:3:2090
-19555:0:2565
-19556:3:2102
-19557:0:2565
-19558:1:337
-19559:0:2565
-19560:3:2104
-19561:0:2565
-19562:3:2105
-19563:3:2109
-19564:3:2110
-19565:3:2118
-19566:3:2119
-19567:3:2123
-19568:3:2124
-19569:3:2132
-19570:3:2137
-19571:3:2141
-19572:3:2142
-19573:3:2149
-19574:3:2150
-19575:3:2161
-19576:3:2169
-19577:3:2170
-19578:3:2174
-19579:3:2179
-19580:3:2180
-19581:0:2565
-19582:3:2192
-19583:0:2565
-19584:3:2013
-19585:0:2565
-19586:3:2014
-19587:0:2565
-19588:3:2015
-19589:3:2019
-19590:3:2020
-19591:3:2028
-19592:3:2029
-19593:3:2033
-19594:3:2034
-19595:3:2042
-19596:3:2047
-19597:3:2051
-19598:3:2052
-19599:3:2059
-19600:3:2060
-19601:3:2071
-19602:3:2079
-19603:3:2080
-19604:3:2084
-19605:3:2089
-19606:3:2090
-19607:0:2565
-19608:2:758
-19609:0:2565
-19610:3:2102
-19611:0:2565
-19612:1:338
-19613:0:2565
-19614:3:2104
-19615:0:2565
-19616:3:2105
-19617:3:2109
-19618:3:2110
-19619:3:2118
-19620:3:2119
-19621:3:2123
-19622:3:2124
-19623:3:2132
-19624:3:2137
-19625:3:2141
-19626:3:2142
-19627:3:2149
-19628:3:2150
-19629:3:2161
-19630:3:2169
-19631:3:2170
-19632:3:2174
-19633:3:2179
-19634:3:2180
-19635:0:2565
-19636:3:2192
-19637:0:2565
-19638:3:2013
-19639:0:2565
-19640:3:2014
-19641:0:2565
-19642:3:2015
-19643:3:2019
-19644:3:2020
-19645:3:2028
-19646:3:2029
-19647:3:2033
-19648:3:2034
-19649:3:2042
-19650:3:2047
-19651:3:2051
-19652:3:2052
-19653:3:2059
-19654:3:2060
-19655:3:2071
-19656:3:2079
-19657:3:2080
-19658:3:2084
-19659:3:2089
-19660:3:2090
-19661:0:2565
-19662:3:2102
-19663:0:2565
-19664:1:337
-19665:0:2565
-19666:3:2104
-19667:0:2565
-19668:3:2105
-19669:3:2109
-19670:3:2110
-19671:3:2118
-19672:3:2119
-19673:3:2123
-19674:3:2124
-19675:3:2132
-19676:3:2137
-19677:3:2141
-19678:3:2142
-19679:3:2149
-19680:3:2150
-19681:3:2161
-19682:3:2169
-19683:3:2170
-19684:3:2174
-19685:3:2179
-19686:3:2180
-19687:0:2565
-19688:3:2192
-19689:0:2565
-19690:3:2013
-19691:0:2565
-19692:3:2014
-19693:0:2565
-19694:3:2015
-19695:3:2019
-19696:3:2020
-19697:3:2028
-19698:3:2029
-19699:3:2033
-19700:3:2034
-19701:3:2042
-19702:3:2047
-19703:3:2051
-19704:3:2052
-19705:3:2059
-19706:3:2060
-19707:3:2071
-19708:3:2079
-19709:3:2080
-19710:3:2084
-19711:3:2089
-19712:3:2090
-19713:0:2565
-19714:2:759
-19715:0:2565
-19716:3:2102
-19717:0:2565
-19718:1:338
-19719:0:2565
-19720:3:2104
-19721:0:2565
-19722:3:2105
-19723:3:2109
-19724:3:2110
-19725:3:2118
-19726:3:2119
-19727:3:2123
-19728:3:2124
-19729:3:2132
-19730:3:2137
-19731:3:2141
-19732:3:2142
-19733:3:2149
-19734:3:2150
-19735:3:2161
-19736:3:2169
-19737:3:2170
-19738:3:2174
-19739:3:2179
-19740:3:2180
-19741:0:2565
-19742:3:2192
-19743:0:2565
-19744:3:2013
-19745:0:2565
-19746:3:2014
-19747:0:2565
-19748:3:2015
-19749:3:2019
-19750:3:2020
-19751:3:2028
-19752:3:2029
-19753:3:2033
-19754:3:2034
-19755:3:2042
-19756:3:2047
-19757:3:2051
-19758:3:2052
-19759:3:2059
-19760:3:2060
-19761:3:2071
-19762:3:2079
-19763:3:2080
-19764:3:2084
-19765:3:2089
-19766:3:2090
-19767:0:2565
-19768:3:2102
-19769:0:2565
-19770:2:760
-19771:0:2565
-19772:2:761
-19773:0:2565
-19774:2:762
-19775:0:2565
-19776:3:2104
-19777:0:2565
-19778:3:2105
-19779:3:2109
-19780:3:2110
-19781:3:2118
-19782:3:2119
-19783:3:2123
-19784:3:2124
-19785:3:2132
-19786:3:2137
-19787:3:2141
-19788:3:2142
-19789:3:2149
-19790:3:2150
-19791:3:2161
-19792:3:2169
-19793:3:2170
-19794:3:2174
-19795:3:2179
-19796:3:2180
-19797:0:2565
-19798:3:2192
-19799:0:2565
-19800:1:337
-19801:0:2565
-19802:3:2013
-19803:0:2565
-19804:2:763
-19805:0:2565
-19806:1:338
-19807:0:2565
-19808:3:2014
-19809:0:2565
-19810:3:2015
-19811:3:2019
-19812:3:2020
-19813:3:2028
-19814:3:2029
-19815:3:2033
-19816:3:2034
-19817:3:2042
-19818:3:2047
-19819:3:2051
-19820:3:2052
-19821:3:2059
-19822:3:2060
-19823:3:2071
-19824:3:2079
-19825:3:2080
-19826:3:2084
-19827:3:2089
-19828:3:2090
-19829:0:2565
-19830:3:2102
-19831:0:2565
-19832:3:2104
-19833:0:2565
-19834:3:2105
-19835:3:2109
-19836:3:2110
-19837:3:2118
-19838:3:2119
-19839:3:2123
-19840:3:2124
-19841:3:2132
-19842:3:2137
-19843:3:2141
-19844:3:2142
-19845:3:2149
-19846:3:2150
-19847:3:2161
-19848:3:2169
-19849:3:2170
-19850:3:2174
-19851:3:2179
-19852:3:2180
-19853:0:2565
-19854:3:2192
-19855:0:2565
-19856:3:2013
-19857:0:2565
-19858:1:337
-19859:0:2565
-19860:3:2014
-19861:0:2565
-19862:3:2015
-19863:3:2019
-19864:3:2020
-19865:3:2028
-19866:3:2029
-19867:3:2033
-19868:3:2034
-19869:3:2042
-19870:3:2047
-19871:3:2051
-19872:3:2052
-19873:3:2059
-19874:3:2060
-19875:3:2071
-19876:3:2079
-19877:3:2080
-19878:3:2084
-19879:3:2089
-19880:3:2090
-19881:0:2565
-19882:3:2102
-19883:0:2565
-19884:3:2104
-19885:0:2565
-19886:3:2105
-19887:3:2109
-19888:3:2110
-19889:3:2118
-19890:3:2119
-19891:3:2123
-19892:3:2124
-19893:3:2132
-19894:3:2137
-19895:3:2141
-19896:3:2142
-19897:3:2149
-19898:3:2150
-19899:3:2161
-19900:3:2169
-19901:3:2170
-19902:3:2174
-19903:3:2179
-19904:3:2180
-19905:0:2565
-19906:3:2192
-19907:0:2565
-19908:2:765
-19909:0:2565
-19910:3:2013
-19911:0:2565
-19912:1:338
-19913:0:2565
-19914:3:2014
-19915:0:2565
-19916:3:2015
-19917:3:2019
-19918:3:2020
-19919:3:2028
-19920:3:2029
-19921:3:2033
-19922:3:2034
-19923:3:2042
-19924:3:2047
-19925:3:2051
-19926:3:2052
-19927:3:2059
-19928:3:2060
-19929:3:2071
-19930:3:2079
-19931:3:2080
-19932:3:2084
-19933:3:2089
-19934:3:2090
-19935:0:2565
-19936:3:2102
-19937:0:2565
-19938:3:2104
-19939:0:2565
-19940:3:2105
-19941:3:2109
-19942:3:2110
-19943:3:2118
-19944:3:2119
-19945:3:2123
-19946:3:2124
-19947:3:2132
-19948:3:2137
-19949:3:2141
-19950:3:2142
-19951:3:2149
-19952:3:2150
-19953:3:2161
-19954:3:2169
-19955:3:2170
-19956:3:2174
-19957:3:2179
-19958:3:2180
-19959:0:2565
-19960:3:2192
-19961:0:2565
-19962:3:2013
-19963:0:2565
-19964:2:766
-19965:2:770
-19966:2:771
-19967:2:779
-19968:2:788
-19969:2:789
-19970:2:793
-19971:2:798
-19972:2:802
-19973:2:803
-19974:2:810
-19975:2:811
-19976:2:822
-19977:2:823
-19978:2:826
-19979:2:827
-19980:2:835
-19981:2:840
-19982:2:841
-19983:0:2565
-19984:3:2014
-19985:0:2565
-19986:3:2015
-19987:3:2019
-19988:3:2020
-19989:3:2028
-19990:3:2029
-19991:3:2033
-19992:3:2034
-19993:3:2042
-19994:3:2047
-19995:3:2051
-19996:3:2052
-19997:3:2059
-19998:3:2060
-19999:3:2071
-20000:3:2079
-20001:3:2080
-20002:3:2084
-20003:3:2089
-20004:3:2090
-20005:0:2565
-20006:3:2102
-20007:0:2565
-20008:3:2104
-20009:0:2565
-20010:3:2105
-20011:3:2109
-20012:3:2110
-20013:3:2118
-20014:3:2119
-20015:3:2123
-20016:3:2124
-20017:3:2132
-20018:3:2137
-20019:3:2141
-20020:3:2142
-20021:3:2149
-20022:3:2150
-20023:3:2161
-20024:3:2169
-20025:3:2170
-20026:3:2174
-20027:3:2179
-20028:3:2180
-20029:0:2565
-20030:3:2192
-20031:0:2565
-20032:2:853
-20033:0:2565
-20034:3:2013
-20035:0:2565
-20036:2:857
-20037:0:2565
-20038:2:465
-20039:0:2565
-20040:3:2014
-20041:0:2565
-20042:3:2015
-20043:3:2019
-20044:3:2020
-20045:3:2028
-20046:3:2029
-20047:3:2033
-20048:3:2034
-20049:3:2042
-20050:3:2047
-20051:3:2051
-20052:3:2052
-20053:3:2059
-20054:3:2060
-20055:3:2071
-20056:3:2079
-20057:3:2080
-20058:3:2084
-20059:3:2089
-20060:3:2090
-20061:0:2565
-20062:3:2102
-20063:0:2565
-20064:3:2104
-20065:0:2565
-20066:3:2105
-20067:3:2109
-20068:3:2110
-20069:3:2118
-20070:3:2119
-20071:3:2123
-20072:3:2124
-20073:3:2132
-20074:3:2137
-20075:3:2141
-20076:3:2142
-20077:3:2149
-20078:3:2150
-20079:3:2161
-20080:3:2169
-20081:3:2170
-20082:3:2174
-20083:3:2179
-20084:3:2180
-20085:0:2565
-20086:3:2192
-20087:0:2565
-20088:2:466
-20089:0:2565
-20090:3:2013
-20091:0:2565
-20092:3:2014
-20093:0:2565
-20094:3:2015
-20095:3:2019
-20096:3:2020
-20097:3:2028
-20098:3:2029
-20099:3:2033
-20100:3:2034
-20101:3:2042
-20102:3:2047
-20103:3:2051
-20104:3:2052
-20105:3:2059
-20106:3:2060
-20107:3:2071
-20108:3:2079
-20109:3:2080
-20110:3:2084
-20111:3:2089
-20112:3:2090
-20113:0:2565
-20114:3:2102
-20115:0:2565
-20116:3:2104
-20117:0:2565
-20118:3:2105
-20119:3:2109
-20120:3:2110
-20121:3:2118
-20122:3:2119
-20123:3:2123
-20124:3:2124
-20125:3:2132
-20126:3:2137
-20127:3:2141
-20128:3:2142
-20129:3:2149
-20130:3:2150
-20131:3:2161
-20132:3:2169
-20133:3:2170
-20134:3:2174
-20135:3:2179
-20136:3:2180
-20137:0:2565
-20138:2:467
-20139:0:2565
-20140:3:2192
-20141:0:2565
-20142:3:2013
-20143:0:2565
-20144:3:2014
-20145:0:2565
-20146:3:2015
-20147:3:2019
-20148:3:2020
-20149:3:2028
-20150:3:2029
-20151:3:2033
-20152:3:2034
-20153:3:2042
-20154:3:2047
-20155:3:2051
-20156:3:2052
-20157:3:2059
-20158:3:2060
-20159:3:2071
-20160:3:2079
-20161:3:2080
-20162:3:2084
-20163:3:2089
-20164:3:2090
-20165:0:2565
-20166:3:2102
-20167:0:2565
-20168:3:2104
-20169:0:2565
-20170:1:339
-20171:0:2565
-20172:2:468
-20173:0:2565
-20174:3:2105
-20175:3:2109
-20176:3:2110
-20177:3:2118
-20178:3:2119
-20179:3:2123
-20180:3:2124
-20181:3:2132
-20182:3:2137
-20183:3:2141
-20184:3:2142
-20185:3:2149
-20186:3:2150
-20187:3:2161
-20188:3:2169
-20189:3:2170
-20190:3:2174
-20191:3:2179
-20192:3:2180
-20193:0:2565
-20194:3:2192
-20195:0:2565
-20196:3:2013
-20197:0:2565
-20198:3:2014
-20199:0:2565
-20200:3:2015
-20201:3:2019
-20202:3:2020
-20203:3:2028
-20204:3:2029
-20205:3:2033
-20206:3:2034
-20207:3:2042
-20208:3:2047
-20209:3:2051
-20210:3:2052
-20211:3:2059
-20212:3:2060
-20213:3:2071
-20214:3:2079
-20215:3:2080
-20216:3:2084
-20217:3:2089
-20218:3:2090
-20219:0:2565
-20220:3:2102
-20221:0:2565
-20222:3:2104
-20223:0:2565
-20224:2:467
-20225:0:2565
-20226:2:468
-20227:0:2565
-20228:3:2105
-20229:3:2109
-20230:3:2110
-20231:3:2118
-20232:3:2119
-20233:3:2123
-20234:3:2124
-20235:3:2132
-20236:3:2137
-20237:3:2141
-20238:3:2142
-20239:3:2149
-20240:3:2150
-20241:3:2161
-20242:3:2169
-20243:3:2170
-20244:3:2174
-20245:3:2179
-20246:3:2180
-20247:0:2565
-20248:3:2192
-20249:0:2565
-20250:3:2013
-20251:0:2565
-20252:3:2014
-20253:0:2565
-20254:3:2015
-20255:3:2019
-20256:3:2020
-20257:3:2028
-20258:3:2029
-20259:3:2033
-20260:3:2034
-20261:3:2042
-20262:3:2047
-20263:3:2051
-20264:3:2052
-20265:3:2059
-20266:3:2060
-20267:3:2071
-20268:3:2079
-20269:3:2080
-20270:3:2084
-20271:3:2089
-20272:3:2090
-20273:0:2565
-20274:3:2102
-20275:0:2565
-20276:2:467
-20277:0:2565
-20278:1:345
-20279:0:2565
-20280:2:468
-20281:0:2565
-20282:3:2104
-20283:0:2565
-20284:3:2105
-20285:3:2109
-20286:3:2110
-20287:3:2118
-20288:3:2119
-20289:3:2123
-20290:3:2124
-20291:3:2132
-20292:3:2137
-20293:3:2141
-20294:3:2142
-20295:3:2149
-20296:3:2150
-20297:3:2161
-20298:3:2169
-20299:3:2170
-20300:3:2174
-20301:3:2179
-20302:3:2180
-20303:0:2565
-20304:3:2192
-20305:0:2565
-20306:3:2013
-20307:0:2565
-20308:3:2014
-20309:0:2565
-20310:3:2015
-20311:3:2019
-20312:3:2020
-20313:3:2028
-20314:3:2029
-20315:3:2033
-20316:3:2034
-20317:3:2042
-20318:3:2047
-20319:3:2051
-20320:3:2052
-20321:3:2059
-20322:3:2060
-20323:3:2071
-20324:3:2079
-20325:3:2080
-20326:3:2084
-20327:3:2089
-20328:3:2090
-20329:0:2565
-20330:3:2102
-20331:0:2565
-20332:2:467
-20333:0:2565
-20334:2:468
-20335:0:2565
-20336:3:2104
-20337:0:2565
-20338:3:2105
-20339:3:2109
-20340:3:2110
-20341:3:2118
-20342:3:2119
-20343:3:2123
-20344:3:2124
-20345:3:2132
-20346:3:2137
-20347:3:2141
-20348:3:2142
-20349:3:2149
-20350:3:2150
-20351:3:2161
-20352:3:2169
-20353:3:2170
-20354:3:2174
-20355:3:2179
-20356:3:2180
-20357:0:2565
-20358:3:2192
-20359:0:2565
-20360:3:2013
-20361:0:2565
-20362:3:2014
-20363:0:2565
-20364:3:2015
-20365:3:2019
-20366:3:2020
-20367:3:2028
-20368:3:2029
-20369:3:2033
-20370:3:2034
-20371:3:2042
-20372:3:2047
-20373:3:2051
-20374:3:2052
-20375:3:2059
-20376:3:2060
-20377:3:2071
-20378:3:2079
-20379:3:2080
-20380:3:2084
-20381:3:2089
-20382:3:2090
-20383:0:2565
-20384:2:467
-20385:0:2565
-20386:1:346
-20387:1:350
-20388:1:351
-20389:1:359
-20390:1:360
-20391:1:361
-20392:1:373
-20393:1:378
-20394:1:382
-20395:1:383
-20396:1:390
-20397:1:391
-20398:1:402
-20399:1:403
-20400:1:404
-20401:1:415
-20402:1:420
-20403:1:421
-20404:0:2565
-20405:3:2102
-20406:0:2565
-20407:3:2104
-20408:0:2565
-20409:1:433
-20410:0:2565
-20411:3:2105
-20412:3:2109
-20413:3:2110
-20414:3:2118
-20415:3:2119
-20416:3:2123
-20417:3:2124
-20418:3:2132
-20419:3:2137
-20420:3:2141
-20421:3:2142
-20422:3:2149
-20423:3:2150
-20424:3:2161
-20425:3:2169
-20426:3:2170
-20427:3:2174
-20428:3:2179
-20429:3:2180
-20430:0:2565
-20431:1:434
-20432:0:2565
-20433:3:2192
-20434:0:2565
-20435:3:2013
-20436:0:2565
-20437:2:468
-20438:0:2565
-20439:1:435
-20440:0:2565
-20441:3:2014
-20442:0:2565
-20443:3:2015
-20444:3:2019
-20445:3:2020
-20446:3:2028
-20447:3:2029
-20448:3:2033
-20449:3:2034
-20450:3:2042
-20451:3:2047
-20452:3:2051
-20453:3:2052
-20454:3:2059
-20455:3:2060
-20456:3:2071
-20457:3:2079
-20458:3:2080
-20459:3:2084
-20460:3:2089
-20461:3:2090
-20462:0:2565
-20463:3:2102
-20464:0:2565
-20465:3:2104
-20466:0:2565
-20467:3:2105
-20468:3:2109
-20469:3:2110
-20470:3:2118
-20471:3:2119
-20472:3:2123
-20473:3:2124
-20474:3:2132
-20475:3:2137
-20476:3:2141
-20477:3:2142
-20478:3:2149
-20479:3:2150
-20480:3:2161
-20481:3:2169
-20482:3:2170
-20483:3:2174
-20484:3:2179
-20485:3:2180
-20486:0:2565
-20487:3:2192
-20488:0:2565
-20489:3:2013
-20490:0:2565
-20491:1:434
-20492:0:2565
-20493:3:2014
-20494:0:2565
-20495:3:2015
-20496:3:2019
-20497:3:2020
-20498:3:2028
-20499:3:2029
-20500:3:2033
-20501:3:2034
-20502:3:2042
-20503:3:2047
-20504:3:2051
-20505:3:2052
-20506:3:2059
-20507:3:2060
-20508:3:2071
-20509:3:2079
-20510:3:2080
-20511:3:2084
-20512:3:2089
-20513:3:2090
-20514:0:2565
-20515:3:2102
-20516:0:2565
-20517:3:2104
-20518:0:2565
-20519:3:2105
-20520:3:2109
-20521:3:2110
-20522:3:2118
-20523:3:2119
-20524:3:2123
-20525:3:2124
-20526:3:2132
-20527:3:2137
-20528:3:2141
-20529:3:2142
-20530:3:2149
-20531:3:2150
-20532:3:2161
-20533:3:2169
-20534:3:2170
-20535:3:2174
-20536:3:2179
-20537:3:2180
-20538:0:2565
-20539:3:2192
-20540:0:2565
-20541:2:469
-20542:0:2565
-20543:3:2013
-20544:0:2565
-20545:2:475
-20546:0:2565
-20547:2:476
-20548:0:2565
-20549:1:435
-20550:0:2565
-20551:3:2014
-20552:0:2565
-20553:3:2015
-20554:3:2019
-20555:3:2020
-20556:3:2028
-20557:3:2029
-20558:3:2033
-20559:3:2034
-20560:3:2042
-20561:3:2047
-20562:3:2051
-20563:3:2052
-20564:3:2059
-20565:3:2060
-20566:3:2071
-20567:3:2079
-20568:3:2080
-20569:3:2084
-20570:3:2089
-20571:3:2090
-20572:0:2565
-20573:3:2102
-20574:0:2565
-20575:3:2104
-20576:0:2565
-20577:3:2105
-20578:3:2109
-20579:3:2110
-20580:3:2118
-20581:3:2119
-20582:3:2123
-20583:3:2124
-20584:3:2132
-20585:3:2137
-20586:3:2141
-20587:3:2142
-20588:3:2149
-20589:3:2150
-20590:3:2161
-20591:3:2169
-20592:3:2170
-20593:3:2174
-20594:3:2179
-20595:3:2180
-20596:0:2565
-20597:3:2192
-20598:0:2565
-20599:3:2013
-20600:0:2565
-20601:1:434
-20602:0:2565
-20603:3:2014
-20604:0:2565
-20605:3:2015
-20606:3:2019
-20607:3:2020
-20608:3:2028
-20609:3:2029
-20610:3:2033
-20611:3:2034
-20612:3:2042
-20613:3:2047
-20614:3:2051
-20615:3:2052
-20616:3:2059
-20617:3:2060
-20618:3:2071
-20619:3:2079
-20620:3:2080
-20621:3:2084
-20622:3:2089
-20623:3:2090
-20624:0:2565
-20625:3:2102
-20626:0:2565
-20627:3:2104
-20628:0:2565
-20629:3:2105
-20630:3:2109
-20631:3:2110
-20632:3:2118
-20633:3:2119
-20634:3:2123
-20635:3:2124
-20636:3:2132
-20637:3:2137
-20638:3:2141
-20639:3:2142
-20640:3:2149
-20641:3:2150
-20642:3:2161
-20643:3:2169
-20644:3:2170
-20645:3:2174
-20646:3:2179
-20647:3:2180
-20648:0:2565
-20649:3:2192
-20650:0:2565
-20651:2:477
-20652:2:481
-20653:2:482
-20654:2:490
-20655:2:491
-20656:2:495
-20657:2:496
-20658:2:504
-20659:2:509
-20660:2:513
-20661:2:514
-20662:2:521
-20663:2:522
-20664:2:533
-20665:2:534
-20666:2:535
-20667:2:546
-20668:2:551
-20669:2:552
-20670:0:2565
-20671:3:2013
-20672:0:2565
-20673:1:435
-20674:0:2565
-20675:3:2014
-20676:0:2565
-20677:3:2015
-20678:3:2019
-20679:3:2020
-20680:3:2028
-20681:3:2029
-20682:3:2033
-20683:3:2034
-20684:3:2042
-20685:3:2047
-20686:3:2051
-20687:3:2052
-20688:3:2059
-20689:3:2060
-20690:3:2071
-20691:3:2079
-20692:3:2080
-20693:3:2084
-20694:3:2089
-20695:3:2090
-20696:0:2565
-20697:3:2102
-20698:0:2565
-20699:3:2104
-20700:0:2565
-20701:3:2105
-20702:3:2109
-20703:3:2110
-20704:3:2118
-20705:3:2119
-20706:3:2123
-20707:3:2124
-20708:3:2132
-20709:3:2137
-20710:3:2141
-20711:3:2142
-20712:3:2149
-20713:3:2150
-20714:3:2161
-20715:3:2169
-20716:3:2170
-20717:3:2174
-20718:3:2179
-20719:3:2180
-20720:0:2565
-20721:3:2192
-20722:0:2565
-20723:3:2013
-20724:0:2565
-20725:1:434
-20726:0:2565
-20727:3:2014
-20728:0:2565
-20729:3:2015
-20730:3:2019
-20731:3:2020
-20732:3:2028
-20733:3:2029
-20734:3:2033
-20735:3:2034
-20736:3:2042
-20737:3:2047
-20738:3:2051
-20739:3:2052
-20740:3:2059
-20741:3:2060
-20742:3:2071
-20743:3:2079
-20744:3:2080
-20745:3:2084
-20746:3:2089
-20747:3:2090
-20748:0:2565
-20749:3:2102
-20750:0:2565
-20751:3:2104
-20752:0:2565
-20753:3:2105
-20754:3:2109
-20755:3:2110
-20756:3:2118
-20757:3:2119
-20758:3:2123
-20759:3:2124
-20760:3:2132
-20761:3:2137
-20762:3:2141
-20763:3:2142
-20764:3:2149
-20765:3:2150
-20766:3:2161
-20767:3:2169
-20768:3:2170
-20769:3:2174
-20770:3:2179
-20771:3:2180
-20772:0:2565
-20773:3:2192
-20774:0:2565
-20775:2:564
-20776:0:2565
-20777:3:2013
-20778:0:2565
-20779:1:435
-20780:0:2565
-20781:3:2014
-20782:0:2565
-20783:3:2015
-20784:3:2019
-20785:3:2020
-20786:3:2028
-20787:3:2029
-20788:3:2033
-20789:3:2034
-20790:3:2042
-20791:3:2047
-20792:3:2051
-20793:3:2052
-20794:3:2059
-20795:3:2060
-20796:3:2071
-20797:3:2079
-20798:3:2080
-20799:3:2084
-20800:3:2089
-20801:3:2090
-20802:0:2565
-20803:3:2102
-20804:0:2565
-20805:3:2104
-20806:0:2565
-20807:3:2105
-20808:3:2109
-20809:3:2110
-20810:3:2118
-20811:3:2119
-20812:3:2123
-20813:3:2124
-20814:3:2132
-20815:3:2137
-20816:3:2141
-20817:3:2142
-20818:3:2149
-20819:3:2150
-20820:3:2161
-20821:3:2169
-20822:3:2170
-20823:3:2174
-20824:3:2179
-20825:3:2180
-20826:0:2565
-20827:3:2192
-20828:0:2565
-20829:3:2013
-20830:0:2565
-20831:2:565
-20832:2:569
-20833:2:570
-20834:2:578
-20835:2:579
-20836:2:583
-20837:2:584
-20838:2:592
-20839:2:597
-20840:2:601
-20841:2:602
-20842:2:609
-20843:2:610
-20844:2:621
-20845:2:622
-20846:2:623
-20847:2:634
-20848:2:639
-20849:2:640
-20850:0:2565
-20851:3:2014
-20852:0:2565
-20853:3:2015
-20854:3:2019
-20855:3:2020
-20856:3:2028
-20857:3:2029
-20858:3:2033
-20859:3:2034
-20860:3:2042
-20861:3:2047
-20862:3:2051
-20863:3:2052
-20864:3:2059
-20865:3:2060
-20866:3:2071
-20867:3:2079
-20868:3:2080
-20869:3:2084
-20870:3:2089
-20871:3:2090
-20872:0:2565
-20873:3:2102
-20874:0:2565
-20875:1:434
-20876:0:2565
-20877:2:744
-20878:0:2565
-20879:1:435
-20880:0:2565
-20881:3:2104
-20882:0:2565
-20883:3:2105
-20884:3:2109
-20885:3:2110
-20886:3:2118
-20887:3:2119
-20888:3:2123
-20889:3:2124
-20890:3:2132
-20891:3:2137
-20892:3:2141
-20893:3:2142
-20894:3:2149
-20895:3:2150
-20896:3:2161
-20897:3:2169
-20898:3:2170
-20899:3:2174
-20900:3:2179
-20901:3:2180
-20902:0:2565
-20903:3:2192
-20904:0:2565
-20905:3:2013
-20906:0:2565
-20907:3:2014
-20908:0:2565
-20909:3:2015
-20910:3:2019
-20911:3:2020
-20912:3:2028
-20913:3:2029
-20914:3:2033
-20915:3:2034
-20916:3:2042
-20917:3:2047
-20918:3:2051
-20919:3:2052
-20920:3:2059
-20921:3:2060
-20922:3:2071
-20923:3:2079
-20924:3:2080
-20925:3:2084
-20926:3:2089
-20927:3:2090
-20928:0:2565
-20929:3:2102
-20930:0:2565
-20931:1:434
-20932:0:2565
-20933:3:2104
-20934:0:2565
-20935:3:2105
-20936:3:2109
-20937:3:2110
-20938:3:2118
-20939:3:2119
-20940:3:2123
-20941:3:2124
-20942:3:2132
-20943:3:2137
-20944:3:2141
-20945:3:2142
-20946:3:2149
-20947:3:2150
-20948:3:2161
-20949:3:2169
-20950:3:2170
-20951:3:2174
-20952:3:2179
-20953:3:2180
-20954:0:2565
-20955:3:2192
-20956:0:2565
-20957:3:2013
-20958:0:2565
-20959:3:2014
-20960:0:2565
-20961:3:2015
-20962:3:2019
-20963:3:2020
-20964:3:2028
-20965:3:2029
-20966:3:2033
-20967:3:2034
-20968:3:2042
-20969:3:2047
-20970:3:2051
-20971:3:2052
-20972:3:2059
-20973:3:2060
-20974:3:2071
-20975:3:2079
-20976:3:2080
-20977:3:2084
-20978:3:2089
-20979:3:2090
-20980:0:2565
-20981:2:745
-20982:0:2565
-20983:3:2102
-20984:0:2565
-20985:2:750
-20986:0:2565
-20987:2:753
-20988:0:2565
-20989:1:435
-20990:0:2565
-20991:3:2104
-20992:0:2565
-20993:3:2105
-20994:3:2109
-20995:3:2110
-20996:3:2118
-20997:3:2119
-20998:3:2123
-20999:3:2124
-21000:3:2132
-21001:3:2137
-21002:3:2141
-21003:3:2142
-21004:3:2149
-21005:3:2150
-21006:3:2161
-21007:3:2169
-21008:3:2170
-21009:3:2174
-21010:3:2179
-21011:3:2180
-21012:0:2565
-21013:3:2192
-21014:0:2565
-21015:3:2013
-21016:0:2565
-21017:3:2014
-21018:0:2565
-21019:3:2015
-21020:3:2019
-21021:3:2020
-21022:3:2028
-21023:3:2029
-21024:3:2033
-21025:3:2034
-21026:3:2042
-21027:3:2047
-21028:3:2051
-21029:3:2052
-21030:3:2059
-21031:3:2060
-21032:3:2071
-21033:3:2079
-21034:3:2080
-21035:3:2084
-21036:3:2089
-21037:3:2090
-21038:0:2565
-21039:3:2102
-21040:0:2565
-21041:1:434
-21042:0:2565
-21043:3:2104
-21044:0:2565
-21045:3:2105
-21046:3:2109
-21047:3:2110
-21048:3:2118
-21049:3:2119
-21050:3:2123
-21051:3:2124
-21052:3:2132
-21053:3:2137
-21054:3:2141
-21055:3:2142
-21056:3:2149
-21057:3:2150
-21058:3:2161
-21059:3:2169
-21060:3:2170
-21061:3:2174
-21062:3:2179
-21063:3:2180
-21064:0:2565
-21065:3:2192
-21066:0:2565
-21067:3:2013
-21068:0:2565
-21069:3:2014
-21070:0:2565
-21071:3:2015
-21072:3:2019
-21073:3:2020
-21074:3:2028
-21075:3:2029
-21076:3:2033
-21077:3:2034
-21078:3:2042
-21079:3:2047
-21080:3:2051
-21081:3:2052
-21082:3:2059
-21083:3:2060
-21084:3:2071
-21085:3:2079
-21086:3:2080
-21087:3:2084
-21088:3:2089
-21089:3:2090
-21090:0:2565
-21091:2:758
-21092:0:2565
-21093:3:2102
-21094:0:2565
-21095:1:435
-21096:0:2565
-21097:3:2104
-21098:0:2565
-21099:3:2105
-21100:3:2109
-21101:3:2110
-21102:3:2118
-21103:3:2119
-21104:3:2123
-21105:3:2124
-21106:3:2132
-21107:3:2137
-21108:3:2141
-21109:3:2142
-21110:3:2149
-21111:3:2150
-21112:3:2161
-21113:3:2169
-21114:3:2170
-21115:3:2174
-21116:3:2179
-21117:3:2180
-21118:0:2565
-21119:3:2192
-21120:0:2565
-21121:3:2013
-21122:0:2565
-21123:3:2014
-21124:0:2565
-21125:3:2015
-21126:3:2019
-21127:3:2020
-21128:3:2028
-21129:3:2029
-21130:3:2033
-21131:3:2034
-21132:3:2042
-21133:3:2047
-21134:3:2051
-21135:3:2052
-21136:3:2059
-21137:3:2060
-21138:3:2071
-21139:3:2079
-21140:3:2080
-21141:3:2084
-21142:3:2089
-21143:3:2090
-21144:0:2565
-21145:3:2102
-21146:0:2565
-21147:1:434
-21148:0:2565
-21149:3:2104
-21150:0:2565
-21151:3:2105
-21152:3:2109
-21153:3:2110
-21154:3:2118
-21155:3:2119
-21156:3:2123
-21157:3:2124
-21158:3:2132
-21159:3:2137
-21160:3:2141
-21161:3:2142
-21162:3:2149
-21163:3:2150
-21164:3:2161
-21165:3:2169
-21166:3:2170
-21167:3:2174
-21168:3:2179
-21169:3:2180
-21170:0:2565
-21171:3:2192
-21172:0:2565
-21173:3:2013
-21174:0:2565
-21175:3:2014
-21176:0:2565
-21177:3:2015
-21178:3:2019
-21179:3:2020
-21180:3:2028
-21181:3:2029
-21182:3:2033
-21183:3:2034
-21184:3:2042
-21185:3:2047
-21186:3:2051
-21187:3:2052
-21188:3:2059
-21189:3:2060
-21190:3:2071
-21191:3:2079
-21192:3:2080
-21193:3:2084
-21194:3:2089
-21195:3:2090
-21196:0:2565
-21197:2:759
-21198:0:2565
-21199:3:2102
-21200:0:2565
-21201:1:435
-21202:0:2565
-21203:3:2104
-21204:0:2565
-21205:3:2105
-21206:3:2109
-21207:3:2110
-21208:3:2118
-21209:3:2119
-21210:3:2123
-21211:3:2124
-21212:3:2132
-21213:3:2137
-21214:3:2141
-21215:3:2142
-21216:3:2149
-21217:3:2150
-21218:3:2161
-21219:3:2169
-21220:3:2170
-21221:3:2174
-21222:3:2179
-21223:3:2180
-21224:0:2565
-21225:3:2192
-21226:0:2565
-21227:3:2013
-21228:0:2565
-21229:3:2014
-21230:0:2565
-21231:3:2015
-21232:3:2019
-21233:3:2020
-21234:3:2028
-21235:3:2029
-21236:3:2033
-21237:3:2034
-21238:3:2042
-21239:3:2047
-21240:3:2051
-21241:3:2052
-21242:3:2059
-21243:3:2060
-21244:3:2071
-21245:3:2079
-21246:3:2080
-21247:3:2084
-21248:3:2089
-21249:3:2090
-21250:0:2565
-21251:3:2102
-21252:0:2565
-21253:2:760
-21254:0:2565
-21255:2:761
-21256:0:2565
-21257:2:762
-21258:0:2565
-21259:3:2104
-21260:0:2565
-21261:3:2105
-21262:3:2109
-21263:3:2110
-21264:3:2118
-21265:3:2119
-21266:3:2123
-21267:3:2124
-21268:3:2132
-21269:3:2137
-21270:3:2141
-21271:3:2142
-21272:3:2149
-21273:3:2150
-21274:3:2161
-21275:3:2169
-21276:3:2170
-21277:3:2174
-21278:3:2179
-21279:3:2180
-21280:0:2565
-21281:3:2192
-21282:0:2565
-21283:1:434
-21284:0:2565
-21285:3:2013
-21286:0:2565
-21287:2:763
-21288:0:2565
-21289:1:435
-21290:0:2565
-21291:3:2014
-21292:0:2565
-21293:3:2015
-21294:3:2019
-21295:3:2020
-21296:3:2028
-21297:3:2029
-21298:3:2033
-21299:3:2034
-21300:3:2042
-21301:3:2047
-21302:3:2051
-21303:3:2052
-21304:3:2059
-21305:3:2060
-21306:3:2071
-21307:3:2079
-21308:3:2080
-21309:3:2084
-21310:3:2089
-21311:3:2090
-21312:0:2565
-21313:3:2102
-21314:0:2565
-21315:3:2104
-21316:0:2565
-21317:3:2105
-21318:3:2109
-21319:3:2110
-21320:3:2118
-21321:3:2119
-21322:3:2123
-21323:3:2124
-21324:3:2132
-21325:3:2137
-21326:3:2141
-21327:3:2142
-21328:3:2149
-21329:3:2150
-21330:3:2161
-21331:3:2169
-21332:3:2170
-21333:3:2174
-21334:3:2179
-21335:3:2180
-21336:0:2565
-21337:3:2192
-21338:0:2565
-21339:3:2013
-21340:0:2565
-21341:1:434
-21342:0:2565
-21343:3:2014
-21344:0:2565
-21345:3:2015
-21346:3:2019
-21347:3:2020
-21348:3:2028
-21349:3:2029
-21350:3:2033
-21351:3:2034
-21352:3:2042
-21353:3:2047
-21354:3:2051
-21355:3:2052
-21356:3:2059
-21357:3:2060
-21358:3:2071
-21359:3:2079
-21360:3:2080
-21361:3:2084
-21362:3:2089
-21363:3:2090
-21364:0:2565
-21365:3:2102
-21366:0:2565
-21367:3:2104
-21368:0:2565
-21369:3:2105
-21370:3:2109
-21371:3:2110
-21372:3:2118
-21373:3:2119
-21374:3:2123
-21375:3:2124
-21376:3:2132
-21377:3:2137
-21378:3:2141
-21379:3:2142
-21380:3:2149
-21381:3:2150
-21382:3:2161
-21383:3:2169
-21384:3:2170
-21385:3:2174
-21386:3:2179
-21387:3:2180
-21388:0:2565
-21389:3:2192
-21390:0:2565
-21391:2:765
-21392:0:2565
-21393:3:2013
-21394:0:2565
-21395:1:435
-21396:0:2565
-21397:3:2014
-21398:0:2565
-21399:3:2015
-21400:3:2019
-21401:3:2020
-21402:3:2028
-21403:3:2029
-21404:3:2033
-21405:3:2034
-21406:3:2042
-21407:3:2047
-21408:3:2051
-21409:3:2052
-21410:3:2059
-21411:3:2060
-21412:3:2071
-21413:3:2079
-21414:3:2080
-21415:3:2084
-21416:3:2089
-21417:3:2090
-21418:0:2565
-21419:3:2102
-21420:0:2565
-21421:3:2104
-21422:0:2565
-21423:3:2105
-21424:3:2109
-21425:3:2110
-21426:3:2118
-21427:3:2119
-21428:3:2123
-21429:3:2124
-21430:3:2132
-21431:3:2137
-21432:3:2141
-21433:3:2142
-21434:3:2149
-21435:3:2150
-21436:3:2161
-21437:3:2169
-21438:3:2170
-21439:3:2174
-21440:3:2179
-21441:3:2180
-21442:0:2565
-21443:3:2192
-21444:0:2565
-21445:3:2013
-21446:0:2565
-21447:2:766
-21448:2:770
-21449:2:771
-21450:2:779
-21451:2:788
-21452:2:789
-21453:2:793
-21454:2:798
-21455:2:802
-21456:2:803
-21457:2:810
-21458:2:811
-21459:2:822
-21460:2:823
-21461:2:826
-21462:2:827
-21463:2:835
-21464:2:840
-21465:2:841
-21466:0:2565
-21467:3:2014
-21468:0:2565
-21469:3:2015
-21470:3:2019
-21471:3:2020
-21472:3:2028
-21473:3:2029
-21474:3:2033
-21475:3:2034
-21476:3:2042
-21477:3:2047
-21478:3:2051
-21479:3:2052
-21480:3:2059
-21481:3:2060
-21482:3:2071
-21483:3:2079
-21484:3:2080
-21485:3:2084
-21486:3:2089
-21487:3:2090
-21488:0:2565
-21489:3:2102
-21490:0:2565
-21491:3:2104
-21492:0:2565
-21493:3:2105
-21494:3:2109
-21495:3:2110
-21496:3:2118
-21497:3:2119
-21498:3:2123
-21499:3:2124
-21500:3:2132
-21501:3:2137
-21502:3:2141
-21503:3:2142
-21504:3:2149
-21505:3:2150
-21506:3:2161
-21507:3:2169
-21508:3:2170
-21509:3:2174
-21510:3:2179
-21511:3:2180
-21512:0:2565
-21513:3:2192
-21514:0:2565
-21515:2:853
-21516:0:2565
-21517:3:2013
-21518:0:2565
-21519:2:857
-21520:0:2565
-21521:2:465
-21522:0:2565
-21523:3:2014
-21524:0:2565
-21525:3:2015
-21526:3:2019
-21527:3:2020
-21528:3:2028
-21529:3:2029
-21530:3:2033
-21531:3:2034
-21532:3:2042
-21533:3:2047
-21534:3:2051
-21535:3:2052
-21536:3:2059
-21537:3:2060
-21538:3:2071
-21539:3:2079
-21540:3:2080
-21541:3:2084
-21542:3:2089
-21543:3:2090
-21544:0:2565
-21545:3:2102
-21546:0:2565
-21547:3:2104
-21548:0:2565
-21549:3:2105
-21550:3:2109
-21551:3:2110
-21552:3:2118
-21553:3:2119
-21554:3:2123
-21555:3:2124
-21556:3:2132
-21557:3:2137
-21558:3:2141
-21559:3:2142
-21560:3:2149
-21561:3:2150
-21562:3:2161
-21563:3:2169
-21564:3:2170
-21565:3:2174
-21566:3:2179
-21567:3:2180
-21568:0:2565
-21569:3:2192
-21570:0:2565
-21571:2:466
-21572:0:2565
-21573:3:2013
-21574:0:2565
-21575:3:2014
-21576:0:2565
-21577:3:2015
-21578:3:2019
-21579:3:2020
-21580:3:2028
-21581:3:2029
-21582:3:2033
-21583:3:2034
-21584:3:2042
-21585:3:2047
-21586:3:2051
-21587:3:2052
-21588:3:2059
-21589:3:2060
-21590:3:2071
-21591:3:2079
-21592:3:2080
-21593:3:2084
-21594:3:2089
-21595:3:2090
-21596:0:2565
-21597:3:2102
-21598:0:2565
-21599:3:2104
-21600:0:2565
-21601:3:2105
-21602:3:2109
-21603:3:2110
-21604:3:2118
-21605:3:2119
-21606:3:2123
-21607:3:2124
-21608:3:2132
-21609:3:2137
-21610:3:2141
-21611:3:2142
-21612:3:2149
-21613:3:2150
-21614:3:2161
-21615:3:2169
-21616:3:2170
-21617:3:2174
-21618:3:2179
-21619:3:2180
-21620:0:2565
-21621:2:467
-21622:0:2565
-21623:3:2192
-21624:0:2565
-21625:3:2013
-21626:0:2565
-21627:3:2014
-21628:0:2565
-21629:3:2015
-21630:3:2019
-21631:3:2020
-21632:3:2028
-21633:3:2029
-21634:3:2033
-21635:3:2034
-21636:3:2042
-21637:3:2047
-21638:3:2051
-21639:3:2052
-21640:3:2059
-21641:3:2060
-21642:3:2071
-21643:3:2079
-21644:3:2080
-21645:3:2084
-21646:3:2089
-21647:3:2090
-21648:0:2565
-21649:3:2102
-21650:0:2565
-21651:3:2104
-21652:0:2565
-21653:1:436
-21654:0:2565
-21655:2:468
-21656:0:2565
-21657:3:2105
-21658:3:2109
-21659:3:2110
-21660:3:2118
-21661:3:2119
-21662:3:2123
-21663:3:2124
-21664:3:2132
-21665:3:2137
-21666:3:2141
-21667:3:2142
-21668:3:2149
-21669:3:2150
-21670:3:2161
-21671:3:2169
-21672:3:2170
-21673:3:2174
-21674:3:2179
-21675:3:2180
-21676:0:2565
-21677:3:2192
-21678:0:2565
-21679:3:2013
-21680:0:2565
-21681:3:2014
-21682:0:2565
-21683:3:2015
-21684:3:2019
-21685:3:2020
-21686:3:2028
-21687:3:2029
-21688:3:2033
-21689:3:2034
-21690:3:2042
-21691:3:2047
-21692:3:2051
-21693:3:2052
-21694:3:2059
-21695:3:2060
-21696:3:2071
-21697:3:2079
-21698:3:2080
-21699:3:2084
-21700:3:2089
-21701:3:2090
-21702:0:2565
-21703:3:2102
-21704:0:2565
-21705:3:2104
-21706:0:2565
-21707:2:467
-21708:0:2565
-21709:2:468
-21710:0:2565
-21711:3:2105
-21712:3:2109
-21713:3:2110
-21714:3:2118
-21715:3:2119
-21716:3:2123
-21717:3:2124
-21718:3:2132
-21719:3:2137
-21720:3:2141
-21721:3:2142
-21722:3:2149
-21723:3:2150
-21724:3:2161
-21725:3:2169
-21726:3:2170
-21727:3:2174
-21728:3:2179
-21729:3:2180
-21730:0:2565
-21731:3:2192
-21732:0:2565
-21733:3:2013
-21734:0:2565
-21735:3:2014
-21736:0:2565
-21737:3:2015
-21738:3:2019
-21739:3:2020
-21740:3:2028
-21741:3:2029
-21742:3:2033
-21743:3:2034
-21744:3:2042
-21745:3:2047
-21746:3:2051
-21747:3:2052
-21748:3:2059
-21749:3:2060
-21750:3:2071
-21751:3:2079
-21752:3:2080
-21753:3:2084
-21754:3:2089
-21755:3:2090
-21756:0:2565
-21757:3:2102
-21758:0:2565
-21759:2:467
-21760:0:2565
-21761:1:442
-21762:0:2565
-21763:2:468
-21764:0:2565
-21765:1:446
-21766:0:2565
-21767:1:9
-21768:0:2565
-21769:1:10
-21770:0:2565
-21771:1:11
-21772:0:2565
-21773:3:2104
-21774:0:2565
-21775:3:2105
-21776:3:2109
-21777:3:2110
-21778:3:2118
-21779:3:2119
-21780:3:2123
-21781:3:2124
-21782:3:2132
-21783:3:2137
-21784:3:2141
-21785:3:2142
-21786:3:2149
-21787:3:2150
-21788:3:2161
-21789:3:2169
-21790:3:2170
-21791:3:2174
-21792:3:2179
-21793:3:2180
-21794:0:2565
-21795:3:2192
-21796:0:2565
-21797:3:2013
-21798:0:2565
-21799:3:2014
-21800:0:2565
-21801:3:2015
-21802:3:2019
-21803:3:2020
-21804:3:2028
-21805:3:2029
-21806:3:2033
-21807:3:2034
-21808:3:2042
-21809:3:2047
-21810:3:2051
-21811:3:2052
-21812:3:2059
-21813:3:2060
-21814:3:2071
-21815:3:2079
-21816:3:2080
-21817:3:2084
-21818:3:2089
-21819:3:2090
-21820:0:2565
-21821:3:2102
-21822:0:2565
-21823:2:467
-21824:0:2565
-21825:2:468
-21826:0:2565
-21827:3:2104
-21828:0:2565
-21829:3:2105
-21830:3:2109
-21831:3:2110
-21832:3:2118
-21833:3:2119
-21834:3:2123
-21835:3:2124
-21836:3:2132
-21837:3:2137
-21838:3:2141
-21839:3:2142
-21840:3:2149
-21841:3:2150
-21842:3:2161
-21843:3:2169
-21844:3:2170
-21845:3:2174
-21846:3:2179
-21847:3:2180
-21848:0:2565
-21849:3:2192
-21850:0:2565
-21851:3:2013
-21852:0:2565
-21853:3:2014
-21854:0:2565
-21855:3:2015
-21856:3:2019
-21857:3:2020
-21858:3:2028
-21859:3:2029
-21860:3:2033
-21861:3:2034
-21862:3:2042
-21863:3:2047
-21864:3:2051
-21865:3:2052
-21866:3:2059
-21867:3:2060
-21868:3:2071
-21869:3:2079
-21870:3:2080
-21871:3:2084
-21872:3:2089
-21873:3:2090
-21874:0:2565
-21875:2:467
-21876:0:2565
-21877:1:12
-21878:1:16
-21879:1:17
-21880:1:25
-21881:1:26
-21882:1:27
-21883:1:39
-21884:1:44
-21885:1:48
-21886:1:49
-21887:1:56
-21888:1:57
-21889:1:68
-21890:1:69
-21891:1:70
-21892:1:81
-21893:1:86
-21894:1:87
-21895:0:2565
-21896:3:2102
-21897:0:2565
-21898:3:2104
-21899:0:2565
-21900:1:99
-21901:0:2565
-21902:3:2105
-21903:3:2109
-21904:3:2110
-21905:3:2118
-21906:3:2119
-21907:3:2123
-21908:3:2124
-21909:3:2132
-21910:3:2137
-21911:3:2141
-21912:3:2142
-21913:3:2149
-21914:3:2150
-21915:3:2161
-21916:3:2169
-21917:3:2170
-21918:3:2174
-21919:3:2179
-21920:3:2180
-21921:0:2565
-21922:1:100
-21923:0:2565
-21924:3:2192
-21925:0:2565
-21926:3:2013
-21927:0:2565
-21928:2:468
-21929:0:2565
-21930:1:101
-21931:0:2565
-21932:3:2014
-21933:0:2565
-21934:3:2015
-21935:3:2019
-21936:3:2020
-21937:3:2028
-21938:3:2029
-21939:3:2033
-21940:3:2034
-21941:3:2042
-21942:3:2047
-21943:3:2051
-21944:3:2052
-21945:3:2059
-21946:3:2060
-21947:3:2071
-21948:3:2079
-21949:3:2080
-21950:3:2084
-21951:3:2089
-21952:3:2090
-21953:0:2565
-21954:3:2102
-21955:0:2565
-21956:3:2104
-21957:0:2565
-21958:3:2105
-21959:3:2109
-21960:3:2110
-21961:3:2118
-21962:3:2119
-21963:3:2123
-21964:3:2124
-21965:3:2132
-21966:3:2137
-21967:3:2141
-21968:3:2142
-21969:3:2149
-21970:3:2150
-21971:3:2161
-21972:3:2169
-21973:3:2170
-21974:3:2174
-21975:3:2179
-21976:3:2180
-21977:0:2565
-21978:3:2192
-21979:0:2565
-21980:3:2013
-21981:0:2565
-21982:1:100
-21983:0:2565
-21984:3:2014
-21985:0:2565
-21986:3:2015
-21987:3:2019
-21988:3:2020
-21989:3:2028
-21990:3:2029
-21991:3:2033
-21992:3:2034
-21993:3:2042
-21994:3:2047
-21995:3:2051
-21996:3:2052
-21997:3:2059
-21998:3:2060
-21999:3:2071
-22000:3:2079
-22001:3:2080
-22002:3:2084
-22003:3:2089
-22004:3:2090
-22005:0:2565
-22006:3:2102
-22007:0:2565
-22008:3:2104
-22009:0:2565
-22010:3:2105
-22011:3:2109
-22012:3:2110
-22013:3:2118
-22014:3:2119
-22015:3:2123
-22016:3:2124
-22017:3:2132
-22018:3:2137
-22019:3:2141
-22020:3:2142
-22021:3:2149
-22022:3:2150
-22023:3:2161
-22024:3:2169
-22025:3:2170
-22026:3:2174
-22027:3:2179
-22028:3:2180
-22029:0:2565
-22030:3:2192
-22031:0:2565
-22032:2:469
-22033:0:2565
-22034:3:2013
-22035:0:2565
-22036:2:475
-22037:0:2565
-22038:2:476
-22039:0:2565
-22040:1:101
-22041:0:2565
-22042:3:2014
-22043:0:2565
-22044:3:2015
-22045:3:2019
-22046:3:2020
-22047:3:2028
-22048:3:2029
-22049:3:2033
-22050:3:2034
-22051:3:2042
-22052:3:2047
-22053:3:2051
-22054:3:2052
-22055:3:2059
-22056:3:2060
-22057:3:2071
-22058:3:2079
-22059:3:2080
-22060:3:2084
-22061:3:2089
-22062:3:2090
-22063:0:2565
-22064:3:2102
-22065:0:2565
-22066:3:2104
-22067:0:2565
-22068:3:2105
-22069:3:2109
-22070:3:2110
-22071:3:2118
-22072:3:2119
-22073:3:2123
-22074:3:2124
-22075:3:2132
-22076:3:2137
-22077:3:2141
-22078:3:2142
-22079:3:2149
-22080:3:2150
-22081:3:2161
-22082:3:2169
-22083:3:2170
-22084:3:2174
-22085:3:2179
-22086:3:2180
-22087:0:2565
-22088:3:2192
-22089:0:2565
-22090:3:2013
-22091:0:2565
-22092:1:100
-22093:0:2565
-22094:3:2014
-22095:0:2565
-22096:3:2015
-22097:3:2019
-22098:3:2020
-22099:3:2028
-22100:3:2029
-22101:3:2033
-22102:3:2034
-22103:3:2042
-22104:3:2047
-22105:3:2051
-22106:3:2052
-22107:3:2059
-22108:3:2060
-22109:3:2071
-22110:3:2079
-22111:3:2080
-22112:3:2084
-22113:3:2089
-22114:3:2090
-22115:0:2565
-22116:3:2102
-22117:0:2565
-22118:3:2104
-22119:0:2565
-22120:3:2105
-22121:3:2109
-22122:3:2110
-22123:3:2118
-22124:3:2119
-22125:3:2123
-22126:3:2124
-22127:3:2132
-22128:3:2137
-22129:3:2141
-22130:3:2142
-22131:3:2149
-22132:3:2150
-22133:3:2161
-22134:3:2169
-22135:3:2170
-22136:3:2174
-22137:3:2179
-22138:3:2180
-22139:0:2565
-22140:3:2192
-22141:0:2565
-22142:2:477
-22143:2:481
-22144:2:482
-22145:2:490
-22146:2:491
-22147:2:495
-22148:2:496
-22149:2:504
-22150:2:509
-22151:2:513
-22152:2:514
-22153:2:521
-22154:2:522
-22155:2:533
-22156:2:534
-22157:2:535
-22158:2:546
-22159:2:551
-22160:2:552
-22161:0:2565
-22162:3:2013
-22163:0:2565
-22164:1:101
-22165:0:2565
-22166:3:2014
-22167:0:2565
-22168:3:2015
-22169:3:2019
-22170:3:2020
-22171:3:2028
-22172:3:2029
-22173:3:2033
-22174:3:2034
-22175:3:2042
-22176:3:2047
-22177:3:2051
-22178:3:2052
-22179:3:2059
-22180:3:2060
-22181:3:2071
-22182:3:2079
-22183:3:2080
-22184:3:2084
-22185:3:2089
-22186:3:2090
-22187:0:2565
-22188:3:2102
-22189:0:2565
-22190:3:2104
-22191:0:2565
-22192:3:2105
-22193:3:2109
-22194:3:2110
-22195:3:2118
-22196:3:2119
-22197:3:2123
-22198:3:2124
-22199:3:2132
-22200:3:2137
-22201:3:2141
-22202:3:2142
-22203:3:2149
-22204:3:2150
-22205:3:2161
-22206:3:2169
-22207:3:2170
-22208:3:2174
-22209:3:2179
-22210:3:2180
-22211:0:2565
-22212:3:2192
-22213:0:2565
-22214:3:2013
-22215:0:2565
-22216:1:100
-22217:0:2565
-22218:3:2014
-22219:0:2565
-22220:3:2015
-22221:3:2019
-22222:3:2020
-22223:3:2028
-22224:3:2029
-22225:3:2033
-22226:3:2034
-22227:3:2042
-22228:3:2047
-22229:3:2051
-22230:3:2052
-22231:3:2059
-22232:3:2060
-22233:3:2071
-22234:3:2079
-22235:3:2080
-22236:3:2084
-22237:3:2089
-22238:3:2090
-22239:0:2565
-22240:3:2102
-22241:0:2565
-22242:3:2104
-22243:0:2565
-22244:3:2105
-22245:3:2109
-22246:3:2110
-22247:3:2118
-22248:3:2119
-22249:3:2123
-22250:3:2124
-22251:3:2132
-22252:3:2137
-22253:3:2141
-22254:3:2142
-22255:3:2149
-22256:3:2150
-22257:3:2161
-22258:3:2169
-22259:3:2170
-22260:3:2174
-22261:3:2179
-22262:3:2180
-22263:0:2565
-22264:3:2192
-22265:0:2565
-22266:2:564
-22267:0:2565
-22268:3:2013
-22269:0:2565
-22270:1:101
-22271:0:2565
-22272:3:2014
-22273:0:2565
-22274:3:2015
-22275:3:2019
-22276:3:2020
-22277:3:2028
-22278:3:2029
-22279:3:2033
-22280:3:2034
-22281:3:2042
-22282:3:2047
-22283:3:2051
-22284:3:2052
-22285:3:2059
-22286:3:2060
-22287:3:2071
-22288:3:2079
-22289:3:2080
-22290:3:2084
-22291:3:2089
-22292:3:2090
-22293:0:2565
-22294:3:2102
-22295:0:2565
-22296:3:2104
-22297:0:2565
-22298:3:2105
-22299:3:2109
-22300:3:2110
-22301:3:2118
-22302:3:2119
-22303:3:2123
-22304:3:2124
-22305:3:2132
-22306:3:2137
-22307:3:2141
-22308:3:2142
-22309:3:2149
-22310:3:2150
-22311:3:2161
-22312:3:2169
-22313:3:2170
-22314:3:2174
-22315:3:2179
-22316:3:2180
-22317:0:2565
-22318:3:2192
-22319:0:2565
-22320:3:2013
-22321:0:2565
-22322:2:565
-22323:2:569
-22324:2:570
-22325:2:578
-22326:2:579
-22327:2:583
-22328:2:584
-22329:2:592
-22330:2:597
-22331:2:601
-22332:2:602
-22333:2:609
-22334:2:610
-22335:2:621
-22336:2:622
-22337:2:623
-22338:2:634
-22339:2:639
-22340:2:640
-22341:0:2565
-22342:3:2014
-22343:0:2565
-22344:3:2015
-22345:3:2019
-22346:3:2020
-22347:3:2028
-22348:3:2029
-22349:3:2033
-22350:3:2034
-22351:3:2042
-22352:3:2047
-22353:3:2051
-22354:3:2052
-22355:3:2059
-22356:3:2060
-22357:3:2071
-22358:3:2079
-22359:3:2080
-22360:3:2084
-22361:3:2089
-22362:3:2090
-22363:0:2565
-22364:3:2102
-22365:0:2565
-22366:1:100
-22367:0:2565
-22368:2:652
-22369:0:2565
-22370:1:101
-22371:0:2565
-22372:3:2104
-22373:0:2565
-22374:3:2105
-22375:3:2109
-22376:3:2110
-22377:3:2118
-22378:3:2119
-22379:3:2123
-22380:3:2124
-22381:3:2132
-22382:3:2137
-22383:3:2141
-22384:3:2142
-22385:3:2149
-22386:3:2150
-22387:3:2161
-22388:3:2169
-22389:3:2170
-22390:3:2174
-22391:3:2179
-22392:3:2180
-22393:0:2565
-22394:3:2192
-22395:0:2565
-22396:3:2013
-22397:0:2565
-22398:3:2014
-22399:0:2565
-22400:3:2015
-22401:3:2019
-22402:3:2020
-22403:3:2028
-22404:3:2029
-22405:3:2033
-22406:3:2034
-22407:3:2042
-22408:3:2047
-22409:3:2051
-22410:3:2052
-22411:3:2059
-22412:3:2060
-22413:3:2071
-22414:3:2079
-22415:3:2080
-22416:3:2084
-22417:3:2089
-22418:3:2090
-22419:0:2565
-22420:3:2102
-22421:0:2565
-22422:1:100
-22423:0:2565
-22424:3:2104
-22425:0:2565
-22426:3:2105
-22427:3:2109
-22428:3:2110
-22429:3:2118
-22430:3:2119
-22431:3:2123
-22432:3:2124
-22433:3:2132
-22434:3:2137
-22435:3:2141
-22436:3:2142
-22437:3:2149
-22438:3:2150
-22439:3:2161
-22440:3:2169
-22441:3:2170
-22442:3:2174
-22443:3:2179
-22444:3:2180
-22445:0:2565
-22446:3:2192
-22447:0:2565
-22448:3:2013
-22449:0:2565
-22450:3:2014
-22451:0:2565
-22452:3:2015
-22453:3:2019
-22454:3:2020
-22455:3:2028
-22456:3:2029
-22457:3:2033
-22458:3:2034
-22459:3:2042
-22460:3:2047
-22461:3:2051
-22462:3:2052
-22463:3:2059
-22464:3:2060
-22465:3:2071
-22466:3:2079
-22467:3:2080
-22468:3:2084
-22469:3:2089
-22470:3:2090
-22471:0:2565
-22472:2:653
-22473:0:2565
-22474:3:2102
-22475:0:2565
-22476:1:101
-22477:0:2565
-22478:3:2104
-22479:0:2565
-22480:3:2105
-22481:3:2109
-22482:3:2110
-22483:3:2118
-22484:3:2119
-22485:3:2123
-22486:3:2124
-22487:3:2132
-22488:3:2137
-22489:3:2141
-22490:3:2142
-22491:3:2149
-22492:3:2150
-22493:3:2161
-22494:3:2169
-22495:3:2170
-22496:3:2174
-22497:3:2179
-22498:3:2180
-22499:0:2565
-22500:3:2192
-22501:0:2565
-22502:3:2013
-22503:0:2565
-22504:3:2014
-22505:0:2565
-22506:3:2015
-22507:3:2019
-22508:3:2020
-22509:3:2028
-22510:3:2029
-22511:3:2033
-22512:3:2034
-22513:3:2042
-22514:3:2047
-22515:3:2051
-22516:3:2052
-22517:3:2059
-22518:3:2060
-22519:3:2071
-22520:3:2079
-22521:3:2080
-22522:3:2084
-22523:3:2089
-22524:3:2090
-22525:0:2565
-22526:3:2102
-22527:0:2565
-22528:1:100
-22529:0:2565
-22530:3:2104
-22531:0:2565
-22532:3:2105
-22533:3:2109
-22534:3:2110
-22535:3:2118
-22536:3:2119
-22537:3:2123
-22538:3:2124
-22539:3:2132
-22540:3:2137
-22541:3:2141
-22542:3:2142
-22543:3:2149
-22544:3:2150
-22545:3:2161
-22546:3:2169
-22547:3:2170
-22548:3:2174
-22549:3:2179
-22550:3:2180
-22551:0:2565
-22552:3:2192
-22553:0:2565
-22554:3:2013
-22555:0:2565
-22556:3:2014
-22557:0:2565
-22558:3:2015
-22559:3:2019
-22560:3:2020
-22561:3:2028
-22562:3:2029
-22563:3:2033
-22564:3:2034
-22565:3:2042
-22566:3:2047
-22567:3:2051
-22568:3:2052
-22569:3:2059
-22570:3:2060
-22571:3:2071
-22572:3:2079
-22573:3:2080
-22574:3:2084
-22575:3:2089
-22576:3:2090
-22577:0:2565
-22578:2:654
-22579:2:658
-22580:2:659
-22581:2:667
-22582:2:668
-22583:2:672
-22584:2:673
-22585:2:681
-22586:2:686
-22587:2:690
-22588:2:691
-22589:2:698
-22590:2:699
-22591:2:710
-22592:2:711
-22593:2:712
-22594:2:723
-22595:2:728
-22596:2:729
-22597:0:2565
-22598:3:2102
-22599:0:2565
-22600:1:101
-22601:0:2565
-22602:3:2104
-22603:0:2565
-22604:3:2105
-22605:3:2109
-22606:3:2110
-22607:3:2118
-22608:3:2119
-22609:3:2123
-22610:3:2124
-22611:3:2132
-22612:3:2137
-22613:3:2141
-22614:3:2142
-22615:3:2149
-22616:3:2150
-22617:3:2161
-22618:3:2169
-22619:3:2170
-22620:3:2174
-22621:3:2179
-22622:3:2180
-22623:0:2565
-22624:3:2192
-22625:0:2565
-22626:3:2013
-22627:0:2565
-22628:3:2014
-22629:0:2565
-22630:3:2015
-22631:3:2019
-22632:3:2020
-22633:3:2028
-22634:3:2029
-22635:3:2033
-22636:3:2034
-22637:3:2042
-22638:3:2047
-22639:3:2051
-22640:3:2052
-22641:3:2059
-22642:3:2060
-22643:3:2071
-22644:3:2079
-22645:3:2080
-22646:3:2084
-22647:3:2089
-22648:3:2090
-22649:0:2565
-22650:3:2102
-22651:0:2565
-22652:2:741
-22653:0:2565
-22654:2:750
-22655:0:2565
-22656:3:2104
-22657:0:2565
-22658:3:2105
-22659:3:2109
-22660:3:2110
-22661:3:2118
-22662:3:2119
-22663:3:2123
-22664:3:2124
-22665:3:2132
-22666:3:2137
-22667:3:2141
-22668:3:2142
-22669:3:2149
-22670:3:2150
-22671:3:2161
-22672:3:2169
-22673:3:2170
-22674:3:2174
-22675:3:2179
-22676:3:2180
-22677:0:2565
-22678:3:2192
-22679:0:2565
-22680:3:2013
-22681:0:2565
-22682:1:100
-22683:0:2565
-22684:2:753
-22685:0:2565
-22686:1:101
-22687:0:2565
-22688:2:758
-22689:0:2565
-22690:2:759
-22691:0:2565
-22692:2:760
-22693:0:2565
-22694:2:761
-22695:0:2565
-22696:2:762
-22697:0:2565
-22698:2:763
-22699:0:2565
-22700:2:765
-22701:0:2565
-22702:2:766
-22703:2:770
-22704:2:771
-22705:2:779
-22706:2:780
-22707:2:781
-22708:2:793
-22709:2:798
-22710:2:802
-22711:2:803
-22712:2:810
-22713:2:811
-22714:2:822
-22715:2:823
-22716:2:824
-22717:2:835
-22718:2:840
-22719:2:841
-22720:0:2565
-22721:3:2014
-22722:0:2565
-22723:3:2015
-22724:3:2019
-22725:3:2020
-22726:3:2028
-22727:3:2029
-22728:3:2033
-22729:3:2034
-22730:3:2042
-22731:3:2047
-22732:3:2051
-22733:3:2052
-22734:3:2059
-22735:3:2060
-22736:3:2071
-22737:3:2079
-22738:3:2080
-22739:3:2084
-22740:3:2089
-22741:3:2090
-22742:0:2565
-22743:3:2102
-22744:0:2565
-22745:3:2104
-22746:0:2565
-22747:3:2105
-22748:3:2109
-22749:3:2110
-22750:3:2118
-22751:3:2119
-22752:3:2123
-22753:3:2124
-22754:3:2132
-22755:3:2137
-22756:3:2141
-22757:3:2142
-22758:3:2149
-22759:3:2150
-22760:3:2161
-22761:3:2169
-22762:3:2170
-22763:3:2174
-22764:3:2179
-22765:3:2180
-22766:0:2565
-22767:3:2192
-22768:0:2565
-22769:3:2013
-22770:0:2565
-22771:2:853
-22772:0:2565
-22773:2:857
-22774:0:2565
-22775:3:2014
-22776:0:2565
-22777:3:2015
-22778:3:2019
-22779:3:2020
-22780:3:2028
-22781:3:2029
-22782:3:2033
-22783:3:2034
-22784:3:2042
-22785:3:2047
-22786:3:2051
-22787:3:2052
-22788:3:2059
-22789:3:2060
-22790:3:2071
-22791:3:2079
-22792:3:2080
-22793:3:2084
-22794:3:2089
-22795:3:2090
-22796:0:2565
-22797:3:2102
-22798:0:2565
-22799:1:100
-22800:0:2565
-22801:2:465
-22802:0:2565
-22803:1:101
-22804:0:2565
-22805:3:2104
-22806:0:2565
-22807:3:2105
-22808:3:2109
-22809:3:2110
-22810:3:2118
-22811:3:2119
-22812:3:2123
-22813:3:2124
-22814:3:2132
-22815:3:2137
-22816:3:2141
-22817:3:2142
-22818:3:2149
-22819:3:2150
-22820:3:2161
-22821:3:2169
-22822:3:2170
-22823:3:2174
-22824:3:2179
-22825:3:2180
-22826:0:2565
-22827:3:2192
-22828:0:2565
-22829:3:2013
-22830:0:2565
-22831:3:2014
-22832:0:2565
-22833:3:2015
-22834:3:2019
-22835:3:2020
-22836:3:2028
-22837:3:2029
-22838:3:2033
-22839:3:2034
-22840:3:2042
-22841:3:2047
-22842:3:2051
-22843:3:2052
-22844:3:2059
-22845:3:2060
-22846:3:2071
-22847:3:2079
-22848:3:2080
-22849:3:2084
-22850:3:2089
-22851:3:2090
-22852:0:2565
-22853:3:2102
-22854:0:2565
-22855:1:100
-22856:0:2565
-22857:3:2104
-22858:0:2565
-22859:3:2105
-22860:3:2109
-22861:3:2110
-22862:3:2118
-22863:3:2119
-22864:3:2123
-22865:3:2124
-22866:3:2132
-22867:3:2137
-22868:3:2141
-22869:3:2142
-22870:3:2149
-22871:3:2150
-22872:3:2161
-22873:3:2169
-22874:3:2170
-22875:3:2174
-22876:3:2179
-22877:3:2180
-22878:0:2565
-22879:3:2192
-22880:0:2565
-22881:3:2013
-22882:0:2565
-22883:3:2014
-22884:0:2565
-22885:3:2015
-22886:3:2019
-22887:3:2020
-22888:3:2028
-22889:3:2029
-22890:3:2033
-22891:3:2034
-22892:3:2042
-22893:3:2047
-22894:3:2051
-22895:3:2052
-22896:3:2059
-22897:3:2060
-22898:3:2071
-22899:3:2079
-22900:3:2080
-22901:3:2084
-22902:3:2089
-22903:3:2090
-22904:0:2565
-22905:2:466
-22906:0:2565
-22907:3:2102
-22908:0:2565
-22909:1:101
-22910:0:2565
-22911:2:467
-22912:0:2565
-22913:2:468
-22914:0:2565
-22915:1:102
-22916:0:2565
-22917:2:467
-22918:0:2565
-22919:3:2104
-22920:0:2565
-22921:3:2105
-22922:3:2109
-22923:3:2110
-22924:3:2118
-22925:3:2119
-22926:3:2123
-22927:3:2124
-22928:3:2132
-22929:3:2137
-22930:3:2141
-22931:3:2142
-22932:3:2149
-22933:3:2150
-22934:3:2161
-22935:3:2169
-22936:3:2170
-22937:3:2174
-22938:3:2179
-22939:3:2180
-22940:0:2565
-22941:3:2192
-22942:0:2565
-22943:3:2013
-22944:0:2565
-22945:3:2014
-22946:0:2565
-22947:3:2015
-22948:3:2019
-22949:3:2020
-22950:3:2028
-22951:3:2029
-22952:3:2033
-22953:3:2034
-22954:3:2042
-22955:3:2047
-22956:3:2051
-22957:3:2052
-22958:3:2059
-22959:3:2060
-22960:3:2071
-22961:3:2079
-22962:3:2080
-22963:3:2084
-22964:3:2089
-22965:3:2090
-22966:0:2565
-22967:3:2102
-22968:0:2565
-22969:1:108
-22970:0:2565
-22971:3:2104
-22972:0:2565
-22973:3:2105
-22974:3:2109
-22975:3:2110
-22976:3:2118
-22977:3:2119
-22978:3:2123
-22979:3:2124
-22980:3:2132
-22981:3:2137
-22982:3:2141
-22983:3:2142
-22984:3:2149
-22985:3:2150
-22986:3:2161
-22987:3:2169
-22988:3:2170
-22989:3:2174
-22990:3:2179
-22991:3:2180
-22992:0:2565
-22993:3:2192
-22994:0:2565
-22995:3:2013
-22996:0:2565
-22997:3:2014
-22998:0:2565
-22999:3:2015
-23000:3:2019
-23001:3:2020
-23002:3:2028
-23003:3:2029
-23004:3:2033
-23005:3:2034
-23006:3:2042
-23007:3:2047
-23008:3:2051
-23009:3:2052
-23010:3:2059
-23011:3:2060
-23012:3:2071
-23013:3:2079
-23014:3:2080
-23015:3:2084
-23016:3:2089
-23017:3:2090
-23018:0:2565
-23019:1:109
-23020:1:113
-23021:1:114
-23022:1:122
-23023:1:123
-23024:1:124
-23025:1:136
-23026:1:141
-23027:1:145
-23028:1:146
-23029:1:153
-23030:1:154
-23031:1:165
-23032:1:166
-23033:1:167
-23034:1:178
-23035:1:183
-23036:1:184
-23037:0:2565
-23038:1:196
-23039:0:2565
-23040:3:2102
-23041:0:2565
-23042:1:197
-23043:0:2565
-23044:2:468
-23045:0:2565
-23046:1:198
-23047:0:2565
-23048:2:469
-23049:0:2565
-23050:2:475
-23051:0:2565
-23052:2:476
-23053:0:2565
-23054:2:477
-23055:2:481
-23056:2:482
-23057:2:490
-23058:2:491
-23059:2:495
-23060:2:496
-23061:2:504
-23062:2:509
-23063:2:513
-23064:2:514
-23065:2:521
-23066:2:522
-23067:2:533
-23068:2:534
-23069:2:535
-23070:2:546
-23071:2:551
-23072:2:552
-23073:0:2565
-23074:2:564
-23075:0:2565
-23076:2:565
-23077:2:569
-23078:2:570
-23079:2:578
-23080:2:579
-23081:2:583
-23082:2:584
-23083:2:592
-23084:2:597
-23085:2:601
-23086:2:602
-23087:2:609
-23088:2:610
-23089:2:621
-23090:2:622
-23091:2:623
-23092:2:634
-23093:2:639
-23094:2:640
-23095:0:2565
-23096:3:2104
-23097:0:2565
-23098:3:2105
-23099:3:2109
-23100:3:2110
-23101:3:2118
-23102:3:2119
-23103:3:2123
-23104:3:2124
-23105:3:2132
-23106:3:2137
-23107:3:2141
-23108:3:2142
-23109:3:2149
-23110:3:2150
-23111:3:2161
-23112:3:2169
-23113:3:2170
-23114:3:2174
-23115:3:2179
-23116:3:2180
-23117:0:2565
-23118:3:2192
-23119:0:2565
-23120:3:2013
-23121:0:2565
-23122:3:2014
-23123:0:2565
-23124:3:2015
-23125:3:2019
-23126:3:2020
-23127:3:2028
-23128:3:2029
-23129:3:2033
-23130:3:2034
-23131:3:2042
-23132:3:2047
-23133:3:2051
-23134:3:2052
-23135:3:2059
-23136:3:2060
-23137:3:2071
-23138:3:2079
-23139:3:2080
-23140:3:2084
-23141:3:2089
-23142:3:2090
-23143:0:2565
-23144:3:2102
-23145:0:2565
-23146:1:197
-23147:0:2565
-23148:2:652
-23149:0:2565
-23150:1:198
-23151:0:2565
-23152:2:653
-23153:0:2565
-23154:2:654
-23155:2:658
-23156:2:659
-23157:2:667
-23158:2:668
-23159:2:672
-23160:2:673
-23161:2:681
-23162:2:686
-23163:2:690
-23164:2:691
-23165:2:698
-23166:2:699
-23167:2:710
-23168:2:711
-23169:2:712
-23170:2:723
-23171:2:728
-23172:2:729
-23173:0:2565
-23174:2:741
-23175:0:2565
-23176:2:750
-23177:0:2565
-23178:2:753
-23179:0:2565
-23180:2:758
-23181:0:2565
-23182:2:759
-23183:0:2565
-23184:2:760
-23185:0:2565
-23186:2:761
-23187:0:2565
-23188:2:762
-23189:0:2565
-23190:2:763
-23191:0:2565
-23192:2:765
-23193:0:2565
-23194:2:766
-23195:2:770
-23196:2:771
-23197:2:779
-23198:2:780
-23199:2:781
-23200:2:793
-23201:2:798
-23202:2:802
-23203:2:803
-23204:2:810
-23205:2:811
-23206:2:822
-23207:2:823
-23208:2:824
-23209:2:835
-23210:2:840
-23211:2:841
-23212:0:2565
-23213:3:2104
-23214:0:2565
-23215:3:2105
-23216:3:2109
-23217:3:2110
-23218:3:2118
-23219:3:2119
-23220:3:2123
-23221:3:2124
-23222:3:2132
-23223:3:2137
-23224:3:2141
-23225:3:2142
-23226:3:2149
-23227:3:2150
-23228:3:2161
-23229:3:2169
-23230:3:2170
-23231:3:2174
-23232:3:2179
-23233:3:2180
-23234:0:2565
-23235:3:2192
-23236:0:2565
-23237:3:2013
-23238:0:2565
-23239:3:2014
-23240:0:2565
-23241:3:2015
-23242:3:2019
-23243:3:2020
-23244:3:2028
-23245:3:2029
-23246:3:2033
-23247:3:2034
-23248:3:2042
-23249:3:2047
-23250:3:2051
-23251:3:2052
-23252:3:2059
-23253:3:2060
-23254:3:2071
-23255:3:2079
-23256:3:2080
-23257:3:2084
-23258:3:2089
-23259:3:2090
-23260:0:2565
-23261:3:2102
-23262:0:2565
-23263:2:853
-23264:0:2565
-23265:2:857
-23266:0:2565
-23267:1:197
-23268:0:2565
-23269:2:465
-23270:0:2565
-23271:1:198
-23272:0:2565
-23273:3:2104
-23274:0:2565
-23275:3:2105
-23276:3:2109
-23277:3:2110
-23278:3:2118
-23279:3:2119
-23280:3:2123
-23281:3:2124
-23282:3:2132
-23283:3:2137
-23284:3:2141
-23285:3:2142
-23286:3:2149
-23287:3:2150
-23288:3:2161
-23289:3:2169
-23290:3:2170
-23291:3:2174
-23292:3:2179
-23293:3:2180
-23294:0:2565
-23295:3:2192
-23296:0:2565
-23297:3:2013
-23298:0:2565
-23299:3:2014
-23300:0:2565
-23301:3:2015
-23302:3:2019
-23303:3:2020
-23304:3:2028
-23305:3:2029
-23306:3:2033
-23307:3:2034
-23308:3:2042
-23309:3:2047
-23310:3:2051
-23311:3:2052
-23312:3:2059
-23313:3:2060
-23314:3:2071
-23315:3:2079
-23316:3:2080
-23317:3:2084
-23318:3:2089
-23319:3:2090
-23320:0:2565
-23321:3:2102
-23322:0:2565
-23323:1:197
-23324:0:2565
-23325:3:2104
-23326:0:2565
-23327:3:2105
-23328:3:2109
-23329:3:2110
-23330:3:2118
-23331:3:2119
-23332:3:2123
-23333:3:2124
-23334:3:2132
-23335:3:2137
-23336:3:2141
-23337:3:2142
-23338:3:2149
-23339:3:2150
-23340:3:2161
-23341:3:2169
-23342:3:2170
-23343:3:2174
-23344:3:2179
-23345:3:2180
-23346:0:2565
-23347:3:2192
-23348:0:2565
-23349:3:2013
-23350:0:2565
-23351:3:2014
-23352:0:2565
-23353:3:2015
-23354:3:2019
-23355:3:2020
-23356:3:2028
-23357:3:2029
-23358:3:2033
-23359:3:2034
-23360:3:2042
-23361:3:2047
-23362:3:2051
-23363:3:2052
-23364:3:2059
-23365:3:2060
-23366:3:2071
-23367:3:2079
-23368:3:2080
-23369:3:2084
-23370:3:2089
-23371:3:2090
-23372:0:2565
-23373:2:466
-23374:0:2565
-23375:3:2102
-23376:0:2565
-23377:1:198
-23378:0:2565
-23379:3:2104
-23380:0:2565
-23381:3:2105
-23382:3:2109
-23383:3:2110
-23384:3:2118
-23385:3:2119
-23386:3:2123
-23387:3:2124
-23388:3:2132
-23389:3:2137
-23390:3:2141
-23391:3:2142
-23392:3:2149
-23393:3:2150
-23394:3:2161
-23395:3:2169
-23396:3:2170
-23397:3:2174
-23398:3:2179
-23399:3:2180
-23400:0:2565
-23401:3:2192
-23402:0:2565
-23403:3:2013
-23404:0:2565
-23405:3:2014
-23406:0:2565
-23407:3:2015
-23408:3:2019
-23409:3:2020
-23410:3:2028
-23411:3:2029
-23412:3:2033
-23413:3:2034
-23414:3:2042
-23415:3:2047
-23416:3:2051
-23417:3:2052
-23418:3:2059
-23419:3:2060
-23420:3:2071
-23421:3:2079
-23422:3:2080
-23423:3:2084
-23424:3:2089
-23425:3:2090
-23426:0:2565
-23427:3:2102
-23428:0:2565
-23429:1:199
-23430:0:2565
-23431:3:2104
-23432:0:2565
-23433:3:2105
-23434:3:2109
-23435:3:2110
-23436:3:2118
-23437:3:2119
-23438:3:2123
-23439:3:2124
-23440:3:2132
-23441:3:2137
-23442:3:2141
-23443:3:2142
-23444:3:2149
-23445:3:2150
-23446:3:2161
-23447:3:2169
-23448:3:2170
-23449:3:2174
-23450:3:2179
-23451:3:2180
-23452:0:2565
-23453:3:2192
-23454:0:2565
-23455:3:2013
-23456:0:2565
-23457:3:2014
-23458:0:2565
-23459:3:2015
-23460:3:2019
-23461:3:2020
-23462:3:2028
-23463:3:2029
-23464:3:2033
-23465:3:2034
-23466:3:2042
-23467:3:2047
-23468:3:2051
-23469:3:2052
-23470:3:2059
-23471:3:2060
-23472:3:2071
-23473:3:2079
-23474:3:2080
-23475:3:2084
-23476:3:2089
-23477:3:2090
-23478:0:2565
-23479:2:467
-23480:0:2565
-23481:3:2102
-23482:0:2565
-23483:2:468
-23484:0:2565
-23485:1:205
-23486:0:2565
-23487:3:2104
-23488:0:2565
-23489:3:2105
-23490:3:2109
-23491:3:2110
-23492:3:2118
-23493:3:2119
-23494:3:2123
-23495:3:2124
-23496:3:2132
-23497:3:2137
-23498:3:2141
-23499:3:2142
-23500:3:2149
-23501:3:2150
-23502:3:2161
-23503:3:2169
-23504:3:2170
-23505:3:2174
-23506:3:2179
-23507:3:2180
-23508:0:2565
-23509:3:2192
-23510:0:2565
-23511:3:2013
-23512:0:2565
-23513:3:2014
-23514:0:2565
-23515:3:2015
-23516:3:2019
-23517:3:2020
-23518:3:2028
-23519:3:2029
-23520:3:2033
-23521:3:2034
-23522:3:2042
-23523:3:2047
-23524:3:2051
-23525:3:2052
-23526:3:2059
-23527:3:2060
-23528:3:2071
-23529:3:2079
-23530:3:2080
-23531:3:2084
-23532:3:2089
-23533:3:2090
-23534:0:2565
-23535:3:2102
-23536:0:2565
-23537:2:467
-23538:0:2565
-23539:2:468
-23540:0:2565
-23541:3:2104
-23542:0:2565
-23543:3:2105
-23544:3:2109
-23545:3:2110
-23546:3:2118
-23547:3:2119
-23548:3:2123
-23549:3:2124
-23550:3:2132
-23551:3:2137
-23552:3:2141
-23553:3:2142
-23554:3:2149
-23555:3:2150
-23556:3:2161
-23557:3:2169
-23558:3:2170
-23559:3:2174
-23560:3:2179
-23561:3:2180
-23562:0:2565
-23563:3:2192
-23564:0:2565
-23565:3:2013
-23566:0:2565
-23567:3:2014
-23568:0:2565
-23569:1:206
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/DEFINES b/formal-model/urcu-nosched-model/result-signal-over-writer/DEFINES
deleted file mode 100644 (file)
index ec600f0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/Makefile b/formal-model/urcu-nosched-model/result-signal-over-writer/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/asserts.log b/formal-model/urcu-nosched-model/result-signal-over-writer/asserts.log
deleted file mode 100644 (file)
index c102ffb..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 40 byte, depth reached 7872, errors: 0
-    20128 states, stored
-   191477 states, matched
-   211605 transitions (= stored+matched)
-   712166 atomic steps
-hash conflicts:       942 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.305      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.467      actual memory usage for states (unsuccessful compression: 112.36%)
-               state-vector as stored = 48 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.229      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 401, ".input.spin", state 330, "(1)"
-       line 612, ".input.spin", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 397, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 406, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 59, "(1)"
-       line 416, ".input.spin", state 89, "(1)"
-       line 397, ".input.spin", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 160, "(1)"
-       line 650, ".input.spin", state 213, "(1)"
-       line 173, ".input.spin", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 233, "(1)"
-       line 158, ".input.spin", state 254, "(1)"
-       line 162, ".input.spin", state 262, "(1)"
-       line 166, ".input.spin", state 274, "(1)"
-       line 173, ".input.spin", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, ".input.spin", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 317, "(1)"
-       line 162, ".input.spin", state 325, "(1)"
-       line 166, ".input.spin", state 337, "(1)"
-       line 173, ".input.spin", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, ".input.spin", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 384, "(1)"
-       line 162, ".input.spin", state 392, "(1)"
-       line 166, ".input.spin", state 404, "(1)"
-       line 397, ".input.spin", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 441, "(1)"
-       line 406, ".input.spin", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 470, "(1)"
-       line 416, ".input.spin", state 500, "(1)"
-       line 397, ".input.spin", state 526, "(1)"
-       line 401, ".input.spin", state 540, "(1)"
-       line 406, ".input.spin", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 599, "(1)"
-       line 401, ".input.spin", state 640, "(1)"
-       line 406, ".input.spin", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 699, "(1)"
-       line 173, ".input.spin", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 722, "(1)"
-       line 177, ".input.spin", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 731, "(1)"
-       line 177, ".input.spin", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 732, "else"
-       line 175, ".input.spin", state 737, "((j<1))"
-       line 175, ".input.spin", state 737, "((j>=1))"
-       line 181, ".input.spin", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 752, "(1)"
-       line 162, ".input.spin", state 760, "(1)"
-       line 162, ".input.spin", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 761, "else"
-       line 160, ".input.spin", state 766, "((j<1))"
-       line 160, ".input.spin", state 766, "((j>=1))"
-       line 166, ".input.spin", state 772, "(1)"
-       line 166, ".input.spin", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 773, "else"
-       line 168, ".input.spin", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 776, "else"
-       line 173, ".input.spin", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, ".input.spin", state 785, "(1)"
-       line 177, ".input.spin", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 794, "(1)"
-       line 177, ".input.spin", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, ".input.spin", state 795, "else"
-       line 175, ".input.spin", state 800, "((j<1))"
-       line 175, ".input.spin", state 800, "((j>=1))"
-       line 181, ".input.spin", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 815, "(1)"
-       line 162, ".input.spin", state 823, "(1)"
-       line 162, ".input.spin", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, ".input.spin", state 824, "else"
-       line 160, ".input.spin", state 829, "((j<1))"
-       line 160, ".input.spin", state 829, "((j>=1))"
-       line 166, ".input.spin", state 835, "(1)"
-       line 166, ".input.spin", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, ".input.spin", state 836, "else"
-       line 168, ".input.spin", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, ".input.spin", state 839, "else"
-       line 200, ".input.spin", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, ".input.spin", state 841, "else"
-       line 212, ".input.spin", state 845, "((i<1))"
-       line 212, ".input.spin", state 845, "((i>=1))"
-       line 173, ".input.spin", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 852, "(1)"
-       line 177, ".input.spin", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 861, "(1)"
-       line 177, ".input.spin", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 862, "else"
-       line 175, ".input.spin", state 867, "((j<1))"
-       line 175, ".input.spin", state 867, "((j>=1))"
-       line 181, ".input.spin", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 882, "(1)"
-       line 162, ".input.spin", state 890, "(1)"
-       line 162, ".input.spin", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 891, "else"
-       line 160, ".input.spin", state 896, "((j<1))"
-       line 160, ".input.spin", state 896, "((j>=1))"
-       line 166, ".input.spin", state 902, "(1)"
-       line 166, ".input.spin", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 903, "else"
-       line 168, ".input.spin", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 906, "else"
-       line 200, ".input.spin", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, ".input.spin", state 908, "else"
-       line 219, ".input.spin", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, ".input.spin", state 909, "else"
-       line 354, ".input.spin", state 915, "((sighand_exec==1))"
-       line 354, ".input.spin", state 915, "else"
-       line 360, ".input.spin", state 918, "sighand_exec = 1"
-       line 397, ".input.spin", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, ".input.spin", state 933, "(1)"
-       line 397, ".input.spin", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, ".input.spin", state 934, "else"
-       line 397, ".input.spin", state 937, "(1)"
-       line 401, ".input.spin", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 947, "(1)"
-       line 401, ".input.spin", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, ".input.spin", state 948, "else"
-       line 401, ".input.spin", state 951, "(1)"
-       line 401, ".input.spin", state 952, "(1)"
-       line 401, ".input.spin", state 952, "(1)"
-       line 399, ".input.spin", state 957, "((i<1))"
-       line 399, ".input.spin", state 957, "((i>=1))"
-       line 406, ".input.spin", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 976, "(1)"
-       line 407, ".input.spin", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, ".input.spin", state 977, "else"
-       line 407, ".input.spin", state 980, "(1)"
-       line 407, ".input.spin", state 981, "(1)"
-       line 407, ".input.spin", state 981, "(1)"
-       line 411, ".input.spin", state 989, "(1)"
-       line 411, ".input.spin", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, ".input.spin", state 990, "else"
-       line 411, ".input.spin", state 993, "(1)"
-       line 411, ".input.spin", state 994, "(1)"
-       line 411, ".input.spin", state 994, "(1)"
-       line 409, ".input.spin", state 999, "((i<1))"
-       line 409, ".input.spin", state 999, "((i>=1))"
-       line 416, ".input.spin", state 1006, "(1)"
-       line 416, ".input.spin", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, ".input.spin", state 1007, "else"
-       line 416, ".input.spin", state 1010, "(1)"
-       line 416, ".input.spin", state 1011, "(1)"
-       line 416, ".input.spin", state 1011, "(1)"
-       line 418, ".input.spin", state 1014, "(1)"
-       line 418, ".input.spin", state 1014, "(1)"
-       line 360, ".input.spin", state 1023, "sighand_exec = 1"
-       line 401, ".input.spin", state 1054, "(1)"
-       line 406, ".input.spin", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1113, "(1)"
-       line 401, ".input.spin", state 1151, "(1)"
-       line 406, ".input.spin", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1210, "(1)"
-       line 397, ".input.spin", state 1236, "(1)"
-       line 401, ".input.spin", state 1250, "(1)"
-       line 406, ".input.spin", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1309, "(1)"
-       line 401, ".input.spin", state 1350, "(1)"
-       line 406, ".input.spin", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1409, "(1)"
-       line 173, ".input.spin", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 1432, "(1)"
-       line 177, ".input.spin", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1441, "(1)"
-       line 177, ".input.spin", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 1442, "else"
-       line 175, ".input.spin", state 1447, "((j<1))"
-       line 175, ".input.spin", state 1447, "((j>=1))"
-       line 181, ".input.spin", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1462, "(1)"
-       line 162, ".input.spin", state 1470, "(1)"
-       line 162, ".input.spin", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 1471, "else"
-       line 160, ".input.spin", state 1476, "((j<1))"
-       line 160, ".input.spin", state 1476, "((j>=1))"
-       line 166, ".input.spin", state 1482, "(1)"
-       line 166, ".input.spin", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 1483, "else"
-       line 168, ".input.spin", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 1486, "else"
-       line 173, ".input.spin", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, ".input.spin", state 1495, "(1)"
-       line 177, ".input.spin", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 1504, "(1)"
-       line 177, ".input.spin", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, ".input.spin", state 1505, "else"
-       line 175, ".input.spin", state 1510, "((j<1))"
-       line 175, ".input.spin", state 1510, "((j>=1))"
-       line 181, ".input.spin", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 1525, "(1)"
-       line 162, ".input.spin", state 1533, "(1)"
-       line 162, ".input.spin", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, ".input.spin", state 1534, "else"
-       line 160, ".input.spin", state 1539, "((j<1))"
-       line 160, ".input.spin", state 1539, "((j>=1))"
-       line 166, ".input.spin", state 1545, "(1)"
-       line 166, ".input.spin", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, ".input.spin", state 1546, "else"
-       line 168, ".input.spin", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, ".input.spin", state 1549, "else"
-       line 200, ".input.spin", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, ".input.spin", state 1551, "else"
-       line 212, ".input.spin", state 1555, "((i<1))"
-       line 212, ".input.spin", state 1555, "((i>=1))"
-       line 173, ".input.spin", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 1562, "(1)"
-       line 177, ".input.spin", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1571, "(1)"
-       line 177, ".input.spin", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 1572, "else"
-       line 175, ".input.spin", state 1577, "((j<1))"
-       line 175, ".input.spin", state 1577, "((j>=1))"
-       line 181, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1592, "(1)"
-       line 162, ".input.spin", state 1600, "(1)"
-       line 162, ".input.spin", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 1601, "else"
-       line 160, ".input.spin", state 1606, "((j<1))"
-       line 160, ".input.spin", state 1606, "((j>=1))"
-       line 166, ".input.spin", state 1612, "(1)"
-       line 166, ".input.spin", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 1613, "else"
-       line 168, ".input.spin", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 1616, "else"
-       line 200, ".input.spin", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, ".input.spin", state 1618, "else"
-       line 219, ".input.spin", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, ".input.spin", state 1619, "else"
-       line 354, ".input.spin", state 1625, "((sighand_exec==1))"
-       line 354, ".input.spin", state 1625, "else"
-       line 360, ".input.spin", state 1628, "sighand_exec = 1"
-       line 397, ".input.spin", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, ".input.spin", state 1643, "(1)"
-       line 397, ".input.spin", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, ".input.spin", state 1644, "else"
-       line 397, ".input.spin", state 1647, "(1)"
-       line 401, ".input.spin", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 1657, "(1)"
-       line 401, ".input.spin", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, ".input.spin", state 1658, "else"
-       line 401, ".input.spin", state 1661, "(1)"
-       line 401, ".input.spin", state 1662, "(1)"
-       line 401, ".input.spin", state 1662, "(1)"
-       line 399, ".input.spin", state 1667, "((i<1))"
-       line 399, ".input.spin", state 1667, "((i>=1))"
-       line 406, ".input.spin", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 1686, "(1)"
-       line 407, ".input.spin", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, ".input.spin", state 1687, "else"
-       line 407, ".input.spin", state 1690, "(1)"
-       line 407, ".input.spin", state 1691, "(1)"
-       line 407, ".input.spin", state 1691, "(1)"
-       line 411, ".input.spin", state 1699, "(1)"
-       line 411, ".input.spin", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, ".input.spin", state 1700, "else"
-       line 411, ".input.spin", state 1703, "(1)"
-       line 411, ".input.spin", state 1704, "(1)"
-       line 411, ".input.spin", state 1704, "(1)"
-       line 409, ".input.spin", state 1709, "((i<1))"
-       line 409, ".input.spin", state 1709, "((i>=1))"
-       line 416, ".input.spin", state 1716, "(1)"
-       line 416, ".input.spin", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, ".input.spin", state 1717, "else"
-       line 416, ".input.spin", state 1720, "(1)"
-       line 416, ".input.spin", state 1721, "(1)"
-       line 416, ".input.spin", state 1721, "(1)"
-       line 418, ".input.spin", state 1724, "(1)"
-       line 418, ".input.spin", state 1724, "(1)"
-       line 360, ".input.spin", state 1733, "sighand_exec = 1"
-       line 177, ".input.spin", state 1758, "(1)"
-       line 181, ".input.spin", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1779, "(1)"
-       line 162, ".input.spin", state 1787, "(1)"
-       line 166, ".input.spin", state 1799, "(1)"
-       line 173, ".input.spin", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, ".input.spin", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 1842, "(1)"
-       line 162, ".input.spin", state 1850, "(1)"
-       line 166, ".input.spin", state 1862, "(1)"
-       line 173, ".input.spin", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, ".input.spin", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1909, "(1)"
-       line 162, ".input.spin", state 1917, "(1)"
-       line 166, ".input.spin", state 1929, "(1)"
-       line 700, ".input.spin", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 0.12 seconds
-pan: rate 167733.33 states/second
-pan: avg transition delay 5.6709e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/asserts.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/asserts.spin.input
deleted file mode 100644 (file)
index 953115f..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/asserts.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/references.txt b/formal-model/urcu-nosched-model/result-signal-over-writer/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/DEFINES b/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/DEFINES
deleted file mode 100644 (file)
index ec600f0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/Makefile b/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.log b/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.log
deleted file mode 100644 (file)
index c102ffb..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 40 byte, depth reached 7872, errors: 0
-    20128 states, stored
-   191477 states, matched
-   211605 transitions (= stored+matched)
-   712166 atomic steps
-hash conflicts:       942 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.305      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.467      actual memory usage for states (unsuccessful compression: 112.36%)
-               state-vector as stored = 48 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.229      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 401, ".input.spin", state 330, "(1)"
-       line 612, ".input.spin", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 397, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 406, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 59, "(1)"
-       line 416, ".input.spin", state 89, "(1)"
-       line 397, ".input.spin", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 160, "(1)"
-       line 650, ".input.spin", state 213, "(1)"
-       line 173, ".input.spin", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 233, "(1)"
-       line 158, ".input.spin", state 254, "(1)"
-       line 162, ".input.spin", state 262, "(1)"
-       line 166, ".input.spin", state 274, "(1)"
-       line 173, ".input.spin", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, ".input.spin", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 317, "(1)"
-       line 162, ".input.spin", state 325, "(1)"
-       line 166, ".input.spin", state 337, "(1)"
-       line 173, ".input.spin", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, ".input.spin", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 384, "(1)"
-       line 162, ".input.spin", state 392, "(1)"
-       line 166, ".input.spin", state 404, "(1)"
-       line 397, ".input.spin", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 441, "(1)"
-       line 406, ".input.spin", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 470, "(1)"
-       line 416, ".input.spin", state 500, "(1)"
-       line 397, ".input.spin", state 526, "(1)"
-       line 401, ".input.spin", state 540, "(1)"
-       line 406, ".input.spin", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 599, "(1)"
-       line 401, ".input.spin", state 640, "(1)"
-       line 406, ".input.spin", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 699, "(1)"
-       line 173, ".input.spin", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 722, "(1)"
-       line 177, ".input.spin", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 731, "(1)"
-       line 177, ".input.spin", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 732, "else"
-       line 175, ".input.spin", state 737, "((j<1))"
-       line 175, ".input.spin", state 737, "((j>=1))"
-       line 181, ".input.spin", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 752, "(1)"
-       line 162, ".input.spin", state 760, "(1)"
-       line 162, ".input.spin", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 761, "else"
-       line 160, ".input.spin", state 766, "((j<1))"
-       line 160, ".input.spin", state 766, "((j>=1))"
-       line 166, ".input.spin", state 772, "(1)"
-       line 166, ".input.spin", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 773, "else"
-       line 168, ".input.spin", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 776, "else"
-       line 173, ".input.spin", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, ".input.spin", state 785, "(1)"
-       line 177, ".input.spin", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 794, "(1)"
-       line 177, ".input.spin", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, ".input.spin", state 795, "else"
-       line 175, ".input.spin", state 800, "((j<1))"
-       line 175, ".input.spin", state 800, "((j>=1))"
-       line 181, ".input.spin", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 815, "(1)"
-       line 162, ".input.spin", state 823, "(1)"
-       line 162, ".input.spin", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, ".input.spin", state 824, "else"
-       line 160, ".input.spin", state 829, "((j<1))"
-       line 160, ".input.spin", state 829, "((j>=1))"
-       line 166, ".input.spin", state 835, "(1)"
-       line 166, ".input.spin", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, ".input.spin", state 836, "else"
-       line 168, ".input.spin", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, ".input.spin", state 839, "else"
-       line 200, ".input.spin", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, ".input.spin", state 841, "else"
-       line 212, ".input.spin", state 845, "((i<1))"
-       line 212, ".input.spin", state 845, "((i>=1))"
-       line 173, ".input.spin", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 852, "(1)"
-       line 177, ".input.spin", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 861, "(1)"
-       line 177, ".input.spin", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 862, "else"
-       line 175, ".input.spin", state 867, "((j<1))"
-       line 175, ".input.spin", state 867, "((j>=1))"
-       line 181, ".input.spin", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 882, "(1)"
-       line 162, ".input.spin", state 890, "(1)"
-       line 162, ".input.spin", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 891, "else"
-       line 160, ".input.spin", state 896, "((j<1))"
-       line 160, ".input.spin", state 896, "((j>=1))"
-       line 166, ".input.spin", state 902, "(1)"
-       line 166, ".input.spin", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 903, "else"
-       line 168, ".input.spin", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 906, "else"
-       line 200, ".input.spin", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, ".input.spin", state 908, "else"
-       line 219, ".input.spin", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, ".input.spin", state 909, "else"
-       line 354, ".input.spin", state 915, "((sighand_exec==1))"
-       line 354, ".input.spin", state 915, "else"
-       line 360, ".input.spin", state 918, "sighand_exec = 1"
-       line 397, ".input.spin", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, ".input.spin", state 933, "(1)"
-       line 397, ".input.spin", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, ".input.spin", state 934, "else"
-       line 397, ".input.spin", state 937, "(1)"
-       line 401, ".input.spin", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 947, "(1)"
-       line 401, ".input.spin", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, ".input.spin", state 948, "else"
-       line 401, ".input.spin", state 951, "(1)"
-       line 401, ".input.spin", state 952, "(1)"
-       line 401, ".input.spin", state 952, "(1)"
-       line 399, ".input.spin", state 957, "((i<1))"
-       line 399, ".input.spin", state 957, "((i>=1))"
-       line 406, ".input.spin", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 976, "(1)"
-       line 407, ".input.spin", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, ".input.spin", state 977, "else"
-       line 407, ".input.spin", state 980, "(1)"
-       line 407, ".input.spin", state 981, "(1)"
-       line 407, ".input.spin", state 981, "(1)"
-       line 411, ".input.spin", state 989, "(1)"
-       line 411, ".input.spin", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, ".input.spin", state 990, "else"
-       line 411, ".input.spin", state 993, "(1)"
-       line 411, ".input.spin", state 994, "(1)"
-       line 411, ".input.spin", state 994, "(1)"
-       line 409, ".input.spin", state 999, "((i<1))"
-       line 409, ".input.spin", state 999, "((i>=1))"
-       line 416, ".input.spin", state 1006, "(1)"
-       line 416, ".input.spin", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, ".input.spin", state 1007, "else"
-       line 416, ".input.spin", state 1010, "(1)"
-       line 416, ".input.spin", state 1011, "(1)"
-       line 416, ".input.spin", state 1011, "(1)"
-       line 418, ".input.spin", state 1014, "(1)"
-       line 418, ".input.spin", state 1014, "(1)"
-       line 360, ".input.spin", state 1023, "sighand_exec = 1"
-       line 401, ".input.spin", state 1054, "(1)"
-       line 406, ".input.spin", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1113, "(1)"
-       line 401, ".input.spin", state 1151, "(1)"
-       line 406, ".input.spin", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1210, "(1)"
-       line 397, ".input.spin", state 1236, "(1)"
-       line 401, ".input.spin", state 1250, "(1)"
-       line 406, ".input.spin", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1309, "(1)"
-       line 401, ".input.spin", state 1350, "(1)"
-       line 406, ".input.spin", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1409, "(1)"
-       line 173, ".input.spin", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 1432, "(1)"
-       line 177, ".input.spin", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1441, "(1)"
-       line 177, ".input.spin", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 1442, "else"
-       line 175, ".input.spin", state 1447, "((j<1))"
-       line 175, ".input.spin", state 1447, "((j>=1))"
-       line 181, ".input.spin", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1462, "(1)"
-       line 162, ".input.spin", state 1470, "(1)"
-       line 162, ".input.spin", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 1471, "else"
-       line 160, ".input.spin", state 1476, "((j<1))"
-       line 160, ".input.spin", state 1476, "((j>=1))"
-       line 166, ".input.spin", state 1482, "(1)"
-       line 166, ".input.spin", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 1483, "else"
-       line 168, ".input.spin", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 1486, "else"
-       line 173, ".input.spin", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, ".input.spin", state 1495, "(1)"
-       line 177, ".input.spin", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 1504, "(1)"
-       line 177, ".input.spin", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, ".input.spin", state 1505, "else"
-       line 175, ".input.spin", state 1510, "((j<1))"
-       line 175, ".input.spin", state 1510, "((j>=1))"
-       line 181, ".input.spin", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 1525, "(1)"
-       line 162, ".input.spin", state 1533, "(1)"
-       line 162, ".input.spin", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, ".input.spin", state 1534, "else"
-       line 160, ".input.spin", state 1539, "((j<1))"
-       line 160, ".input.spin", state 1539, "((j>=1))"
-       line 166, ".input.spin", state 1545, "(1)"
-       line 166, ".input.spin", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, ".input.spin", state 1546, "else"
-       line 168, ".input.spin", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, ".input.spin", state 1549, "else"
-       line 200, ".input.spin", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, ".input.spin", state 1551, "else"
-       line 212, ".input.spin", state 1555, "((i<1))"
-       line 212, ".input.spin", state 1555, "((i>=1))"
-       line 173, ".input.spin", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 1562, "(1)"
-       line 177, ".input.spin", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1571, "(1)"
-       line 177, ".input.spin", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 1572, "else"
-       line 175, ".input.spin", state 1577, "((j<1))"
-       line 175, ".input.spin", state 1577, "((j>=1))"
-       line 181, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1592, "(1)"
-       line 162, ".input.spin", state 1600, "(1)"
-       line 162, ".input.spin", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 1601, "else"
-       line 160, ".input.spin", state 1606, "((j<1))"
-       line 160, ".input.spin", state 1606, "((j>=1))"
-       line 166, ".input.spin", state 1612, "(1)"
-       line 166, ".input.spin", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 1613, "else"
-       line 168, ".input.spin", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 1616, "else"
-       line 200, ".input.spin", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, ".input.spin", state 1618, "else"
-       line 219, ".input.spin", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, ".input.spin", state 1619, "else"
-       line 354, ".input.spin", state 1625, "((sighand_exec==1))"
-       line 354, ".input.spin", state 1625, "else"
-       line 360, ".input.spin", state 1628, "sighand_exec = 1"
-       line 397, ".input.spin", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, ".input.spin", state 1643, "(1)"
-       line 397, ".input.spin", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, ".input.spin", state 1644, "else"
-       line 397, ".input.spin", state 1647, "(1)"
-       line 401, ".input.spin", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 1657, "(1)"
-       line 401, ".input.spin", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, ".input.spin", state 1658, "else"
-       line 401, ".input.spin", state 1661, "(1)"
-       line 401, ".input.spin", state 1662, "(1)"
-       line 401, ".input.spin", state 1662, "(1)"
-       line 399, ".input.spin", state 1667, "((i<1))"
-       line 399, ".input.spin", state 1667, "((i>=1))"
-       line 406, ".input.spin", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 1686, "(1)"
-       line 407, ".input.spin", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, ".input.spin", state 1687, "else"
-       line 407, ".input.spin", state 1690, "(1)"
-       line 407, ".input.spin", state 1691, "(1)"
-       line 407, ".input.spin", state 1691, "(1)"
-       line 411, ".input.spin", state 1699, "(1)"
-       line 411, ".input.spin", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, ".input.spin", state 1700, "else"
-       line 411, ".input.spin", state 1703, "(1)"
-       line 411, ".input.spin", state 1704, "(1)"
-       line 411, ".input.spin", state 1704, "(1)"
-       line 409, ".input.spin", state 1709, "((i<1))"
-       line 409, ".input.spin", state 1709, "((i>=1))"
-       line 416, ".input.spin", state 1716, "(1)"
-       line 416, ".input.spin", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, ".input.spin", state 1717, "else"
-       line 416, ".input.spin", state 1720, "(1)"
-       line 416, ".input.spin", state 1721, "(1)"
-       line 416, ".input.spin", state 1721, "(1)"
-       line 418, ".input.spin", state 1724, "(1)"
-       line 418, ".input.spin", state 1724, "(1)"
-       line 360, ".input.spin", state 1733, "sighand_exec = 1"
-       line 177, ".input.spin", state 1758, "(1)"
-       line 181, ".input.spin", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1779, "(1)"
-       line 162, ".input.spin", state 1787, "(1)"
-       line 166, ".input.spin", state 1799, "(1)"
-       line 173, ".input.spin", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, ".input.spin", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 1842, "(1)"
-       line 162, ".input.spin", state 1850, "(1)"
-       line 166, ".input.spin", state 1862, "(1)"
-       line 173, ".input.spin", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, ".input.spin", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1909, "(1)"
-       line 162, ".input.spin", state 1917, "(1)"
-       line 166, ".input.spin", state 1929, "(1)"
-       line 700, ".input.spin", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 0.12 seconds
-pan: rate 167733.33 states/second
-pan: avg transition delay 5.6709e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.spin.input
deleted file mode 100644 (file)
index 953115f..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/references.txt b/formal-model/urcu-nosched-model/result-signal-over-writer/result-signal-over-writer/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/.input.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/.input.define
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/.input.spin b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/.input.spin
deleted file mode 100644 (file)
index f2737c4..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-
-#define NR_READERS 2
-#define NR_WRITERS 1
-
-#define NR_PROCS 3
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/DEFINES b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/DEFINES
deleted file mode 100644 (file)
index 12c751b..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#define NR_READERS 2
-#define NR_WRITERS 1
-
-#define NR_PROCS 3
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/Makefile b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/Makefile
deleted file mode 100644 (file)
index ca932b7..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.log
deleted file mode 100644 (file)
index 75f2427..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-spin: line 295 replacement value: tmp
-spin: line 295 ".input.spin", Error: formal par of wait_for_quiescent_state contains replacement value saw '-2'' near 'readerid'
-spin: 1 error(s) - aborting
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.spin.input
deleted file mode 100644 (file)
index b06898a..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#define read_free_race (read_generation == last_free_gen)
-#define read_free      (free_done && data_access)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/references.txt b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.sh b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin
deleted file mode 100644 (file)
index 61d9052..0000000
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin.bkp2 b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin.bkp2
deleted file mode 100644 (file)
index b1c8311..0000000
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_WRITERS 1
-#define NR_READERS 3
-
-/* Number of reader and writer processes */
-#define NR_PROCS 5
-
-/* Includes reader, writer and init process */
-#define MAX_NR_PROCS 5
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-               skip;
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-               skip;
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_writerid() (get_pid())
-#define get_readerid() (get_writerrid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       skip;
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2, nest)
-{
-       nest_i = 0;
-       do
-       :: nest_i < nest ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               ooo_mem(i);
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= nest -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < nest ->
-               ooo_mem(i);
-               smp_mb(i);
-               ooo_mem(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= nest -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [2] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2, 2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [1] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               ooo_mem(i);
-               smp_mb(i);
-               ooo_mem(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin.bkp5 b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu.spin.bkp5
deleted file mode 100644 (file)
index 324ee39..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.log
deleted file mode 100644 (file)
index 6a04aba..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 566)
-Depth=    4234 States=    1e+06 Transitions=  1.7e+07 Memory=   527.287        t=   31.3 R=   3e+04
-Depth=    4234 States=    2e+06 Transitions= 3.44e+07 Memory=   588.322        t=   63.9 R=   3e+04
-Depth=    4234 States=    3e+06 Transitions=  5.2e+07 Memory=   649.358        t=     97 R=   3e+04
-pan: resizing hashtable to -w22..  done
-Depth=    4234 States=    4e+06 Transitions= 6.97e+07 Memory=   741.416        t=    130 R=   3e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 4234, errors: 0
-  4027146 states, stored
- 66145121 states, matched
- 70172267 transitions (= stored+matched)
-2.6437688e+08 atomic steps
-hash conflicts:  47318190 (resolved)
-
-Stats on memory usage (in Megabytes):
-  322.609      equivalent memory usage for states (stored*(State-vector + overhead))
-  253.418      actual memory usage for states (compression: 78.55%)
-               state-vector as stored = 38 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  743.076      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 288, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 61, "(1)"
-       line 307, "pan.___", state 91, "(1)"
-       line 288, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 149, "(1)"
-       line 307, "pan.___", state 179, "(1)"
-       line 288, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 238, "(1)"
-       line 307, "pan.___", state 268, "(1)"
-       line 158, "pan.___", state 289, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 291, "(1)"
-       line 162, "pan.___", state 298, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 300, "(1)"
-       line 162, "pan.___", state 301, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 301, "else"
-       line 160, "pan.___", state 306, "((j<1))"
-       line 160, "pan.___", state 306, "((j>=1))"
-       line 166, "pan.___", state 311, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 321, "(1)"
-       line 147, "pan.___", state 329, "(1)"
-       line 147, "pan.___", state 330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 330, "else"
-       line 145, "pan.___", state 335, "((j<1))"
-       line 145, "pan.___", state 335, "((j>=1))"
-       line 151, "pan.___", state 341, "(1)"
-       line 151, "pan.___", state 342, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 342, "else"
-       line 153, "pan.___", state 345, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 345, "else"
-       line 185, "pan.___", state 347, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 347, "else"
-       line 158, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 354, "(1)"
-       line 162, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 162, "pan.___", state 363, "(1)"
-       line 162, "pan.___", state 364, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 162, "pan.___", state 364, "else"
-       line 160, "pan.___", state 369, "((j<1))"
-       line 160, "pan.___", state 369, "((j>=1))"
-       line 166, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 384, "(1)"
-       line 147, "pan.___", state 392, "(1)"
-       line 147, "pan.___", state 393, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 147, "pan.___", state 393, "else"
-       line 145, "pan.___", state 398, "((j<1))"
-       line 145, "pan.___", state 398, "((j>=1))"
-       line 151, "pan.___", state 404, "(1)"
-       line 151, "pan.___", state 405, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 151, "pan.___", state 405, "else"
-       line 153, "pan.___", state 408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 153, "pan.___", state 408, "else"
-       line 185, "pan.___", state 410, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 185, "pan.___", state 410, "else"
-       line 199, "pan.___", state 414, "((i<1))"
-       line 199, "pan.___", state 414, "((i>=1))"
-       line 158, "pan.___", state 419, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 421, "(1)"
-       line 162, "pan.___", state 428, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 430, "(1)"
-       line 162, "pan.___", state 431, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 431, "else"
-       line 160, "pan.___", state 436, "((j<1))"
-       line 160, "pan.___", state 436, "((j>=1))"
-       line 166, "pan.___", state 441, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 451, "(1)"
-       line 147, "pan.___", state 459, "(1)"
-       line 147, "pan.___", state 460, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 460, "else"
-       line 145, "pan.___", state 465, "((j<1))"
-       line 145, "pan.___", state 465, "((j>=1))"
-       line 151, "pan.___", state 471, "(1)"
-       line 151, "pan.___", state 472, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 472, "else"
-       line 153, "pan.___", state 475, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 475, "else"
-       line 185, "pan.___", state 477, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 477, "else"
-       line 288, "pan.___", state 492, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 537, "(1)"
-       line 307, "pan.___", state 567, "(1)"
-       line 288, "pan.___", state 580, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 612, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 625, "(1)"
-       line 307, "pan.___", state 655, "(1)"
-       line 288, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 713, "(1)"
-       line 307, "pan.___", state 743, "(1)"
-       line 158, "pan.___", state 758, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 760, "(1)"
-       line 162, "pan.___", state 767, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 769, "(1)"
-       line 162, "pan.___", state 770, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 770, "else"
-       line 160, "pan.___", state 775, "((j<1))"
-       line 160, "pan.___", state 775, "((j>=1))"
-       line 166, "pan.___", state 780, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 790, "(1)"
-       line 147, "pan.___", state 798, "(1)"
-       line 147, "pan.___", state 799, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 799, "else"
-       line 145, "pan.___", state 804, "((j<1))"
-       line 145, "pan.___", state 804, "((j>=1))"
-       line 151, "pan.___", state 810, "(1)"
-       line 151, "pan.___", state 811, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 811, "else"
-       line 153, "pan.___", state 814, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 814, "else"
-       line 185, "pan.___", state 816, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 816, "else"
-       line 158, "pan.___", state 821, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 823, "(1)"
-       line 162, "pan.___", state 830, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 162, "pan.___", state 832, "(1)"
-       line 162, "pan.___", state 833, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 162, "pan.___", state 833, "else"
-       line 160, "pan.___", state 838, "((j<1))"
-       line 160, "pan.___", state 838, "((j>=1))"
-       line 166, "pan.___", state 843, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 853, "(1)"
-       line 147, "pan.___", state 861, "(1)"
-       line 147, "pan.___", state 862, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 147, "pan.___", state 862, "else"
-       line 145, "pan.___", state 867, "((j<1))"
-       line 145, "pan.___", state 867, "((j>=1))"
-       line 151, "pan.___", state 873, "(1)"
-       line 151, "pan.___", state 874, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 151, "pan.___", state 874, "else"
-       line 153, "pan.___", state 877, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 153, "pan.___", state 877, "else"
-       line 185, "pan.___", state 879, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 185, "pan.___", state 879, "else"
-       line 199, "pan.___", state 883, "((i<1))"
-       line 199, "pan.___", state 883, "((i>=1))"
-       line 158, "pan.___", state 888, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 890, "(1)"
-       line 162, "pan.___", state 897, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 899, "(1)"
-       line 162, "pan.___", state 900, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 900, "else"
-       line 160, "pan.___", state 905, "((j<1))"
-       line 160, "pan.___", state 905, "((j>=1))"
-       line 166, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 920, "(1)"
-       line 147, "pan.___", state 928, "(1)"
-       line 147, "pan.___", state 929, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 929, "else"
-       line 145, "pan.___", state 934, "((j<1))"
-       line 145, "pan.___", state 934, "((j>=1))"
-       line 151, "pan.___", state 940, "(1)"
-       line 151, "pan.___", state 941, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 941, "else"
-       line 153, "pan.___", state 944, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 944, "else"
-       line 185, "pan.___", state 946, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 946, "else"
-       line 288, "pan.___", state 956, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 988, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1001, "(1)"
-       line 307, "pan.___", state 1031, "(1)"
-       line 288, "pan.___", state 1052, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1084, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1097, "(1)"
-       line 307, "pan.___", state 1127, "(1)"
-       line 433, "pan.___", state 1140, "-end-"
-       (125 of 1140 states)
-unreached in proctype urcu_writer
-       line 288, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 59, "(1)"
-       line 302, "pan.___", state 72, "(1)"
-       line 307, "pan.___", state 89, "(1)"
-       line 288, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 151, "(1)"
-       line 302, "pan.___", state 164, "(1)"
-       line 467, "pan.___", state 195, "(1)"
-       line 158, "pan.___", state 205, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 214, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 237, "(1)"
-       line 147, "pan.___", state 245, "(1)"
-       line 151, "pan.___", state 257, "(1)"
-       line 158, "pan.___", state 268, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 290, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 300, "(1)"
-       line 147, "pan.___", state 308, "(1)"
-       line 151, "pan.___", state 320, "(1)"
-       line 158, "pan.___", state 335, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 344, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 357, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 367, "(1)"
-       line 147, "pan.___", state 375, "(1)"
-       line 151, "pan.___", state 387, "(1)"
-       line 288, "pan.___", state 403, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 448, "(1)"
-       line 302, "pan.___", state 461, "(1)"
-       line 307, "pan.___", state 478, "(1)"
-       line 288, "pan.___", state 495, "(1)"
-       line 292, "pan.___", state 507, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 525, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 551, "(1)"
-       line 307, "pan.___", state 568, "(1)"
-       line 292, "pan.___", state 598, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 642, "(1)"
-       line 307, "pan.___", state 659, "(1)"
-       line 162, "pan.___", state 681, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 694, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 704, "(1)"
-       line 147, "pan.___", state 712, "(1)"
-       line 151, "pan.___", state 724, "(1)"
-       line 158, "pan.___", state 735, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 757, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 767, "(1)"
-       line 147, "pan.___", state 775, "(1)"
-       line 151, "pan.___", state 787, "(1)"
-       line 158, "pan.___", state 802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 811, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 824, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 834, "(1)"
-       line 147, "pan.___", state 842, "(1)"
-       line 151, "pan.___", state 854, "(1)"
-       line 288, "pan.___", state 878, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 288, "pan.___", state 880, "(1)"
-       line 288, "pan.___", state 881, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 288, "pan.___", state 881, "else"
-       line 288, "pan.___", state 884, "(1)"
-       line 292, "pan.___", state 892, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 894, "(1)"
-       line 292, "pan.___", state 895, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 292, "pan.___", state 895, "else"
-       line 292, "pan.___", state 898, "(1)"
-       line 292, "pan.___", state 899, "(1)"
-       line 292, "pan.___", state 899, "(1)"
-       line 290, "pan.___", state 904, "((i<1))"
-       line 290, "pan.___", state 904, "((i>=1))"
-       line 297, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 923, "(1)"
-       line 298, "pan.___", state 924, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 298, "pan.___", state 924, "else"
-       line 298, "pan.___", state 927, "(1)"
-       line 298, "pan.___", state 928, "(1)"
-       line 298, "pan.___", state 928, "(1)"
-       line 302, "pan.___", state 936, "(1)"
-       line 302, "pan.___", state 937, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 302, "pan.___", state 937, "else"
-       line 302, "pan.___", state 940, "(1)"
-       line 302, "pan.___", state 941, "(1)"
-       line 302, "pan.___", state 941, "(1)"
-       line 300, "pan.___", state 946, "((i<1))"
-       line 300, "pan.___", state 946, "((i>=1))"
-       line 307, "pan.___", state 953, "(1)"
-       line 307, "pan.___", state 954, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 307, "pan.___", state 954, "else"
-       line 307, "pan.___", state 957, "(1)"
-       line 307, "pan.___", state 958, "(1)"
-       line 307, "pan.___", state 958, "(1)"
-       line 309, "pan.___", state 961, "(1)"
-       line 309, "pan.___", state 961, "(1)"
-       line 292, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1008, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1034, "(1)"
-       line 307, "pan.___", state 1051, "(1)"
-       line 292, "pan.___", state 1078, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1096, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1122, "(1)"
-       line 307, "pan.___", state 1139, "(1)"
-       line 288, "pan.___", state 1156, "(1)"
-       line 292, "pan.___", state 1168, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1186, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1212, "(1)"
-       line 307, "pan.___", state 1229, "(1)"
-       line 292, "pan.___", state 1259, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1277, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1303, "(1)"
-       line 307, "pan.___", state 1320, "(1)"
-       line 162, "pan.___", state 1342, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1355, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1365, "(1)"
-       line 147, "pan.___", state 1373, "(1)"
-       line 151, "pan.___", state 1385, "(1)"
-       line 158, "pan.___", state 1396, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 1418, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 1428, "(1)"
-       line 147, "pan.___", state 1436, "(1)"
-       line 151, "pan.___", state 1448, "(1)"
-       line 158, "pan.___", state 1463, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 1472, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1485, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1495, "(1)"
-       line 147, "pan.___", state 1503, "(1)"
-       line 151, "pan.___", state 1515, "(1)"
-       line 288, "pan.___", state 1539, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 288, "pan.___", state 1541, "(1)"
-       line 288, "pan.___", state 1542, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 288, "pan.___", state 1542, "else"
-       line 288, "pan.___", state 1545, "(1)"
-       line 292, "pan.___", state 1553, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 1555, "(1)"
-       line 292, "pan.___", state 1556, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 292, "pan.___", state 1556, "else"
-       line 292, "pan.___", state 1559, "(1)"
-       line 292, "pan.___", state 1560, "(1)"
-       line 292, "pan.___", state 1560, "(1)"
-       line 290, "pan.___", state 1565, "((i<1))"
-       line 290, "pan.___", state 1565, "((i>=1))"
-       line 297, "pan.___", state 1571, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1584, "(1)"
-       line 298, "pan.___", state 1585, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 298, "pan.___", state 1585, "else"
-       line 298, "pan.___", state 1588, "(1)"
-       line 298, "pan.___", state 1589, "(1)"
-       line 298, "pan.___", state 1589, "(1)"
-       line 302, "pan.___", state 1597, "(1)"
-       line 302, "pan.___", state 1598, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 302, "pan.___", state 1598, "else"
-       line 302, "pan.___", state 1601, "(1)"
-       line 302, "pan.___", state 1602, "(1)"
-       line 302, "pan.___", state 1602, "(1)"
-       line 300, "pan.___", state 1607, "((i<1))"
-       line 300, "pan.___", state 1607, "((i>=1))"
-       line 307, "pan.___", state 1614, "(1)"
-       line 307, "pan.___", state 1615, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 307, "pan.___", state 1615, "else"
-       line 307, "pan.___", state 1618, "(1)"
-       line 307, "pan.___", state 1619, "(1)"
-       line 307, "pan.___", state 1619, "(1)"
-       line 309, "pan.___", state 1622, "(1)"
-       line 309, "pan.___", state 1622, "(1)"
-       line 162, "pan.___", state 1646, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1659, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1669, "(1)"
-       line 147, "pan.___", state 1677, "(1)"
-       line 151, "pan.___", state 1689, "(1)"
-       line 158, "pan.___", state 1700, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 1722, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 1732, "(1)"
-       line 147, "pan.___", state 1740, "(1)"
-       line 151, "pan.___", state 1752, "(1)"
-       line 158, "pan.___", state 1767, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 1776, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1789, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1799, "(1)"
-       line 147, "pan.___", state 1807, "(1)"
-       line 151, "pan.___", state 1819, "(1)"
-       line 510, "pan.___", state 1845, "-end-"
-       (158 of 1845 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 571, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 131 seconds
-pan: rate 30683.017 states/second
-pan: avg transition delay 1.8704e-06 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.ltl b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.spin.input
deleted file mode 100644 (file)
index 18f99c4..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 0d22946..0000000
+++ /dev/null
@@ -1,1902 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:3013
-2:2:1132
-3:0:3013
-4:1:0
-5:0:3013
-6:1:1
-7:0:3013
-8:1:2
-9:0:3013
-10:1:3
-11:0:3013
-12:3:2969
-13:0:3013
-14:3:2970
-15:0:3013
-16:3:2971
-17:0:3013
-18:3:2972
-19:0:3013
-20:3:2973
-21:0:3013
-22:3:2974
-23:0:3013
-24:3:2971
-25:0:3013
-26:3:2972
-27:0:3013
-28:3:2973
-29:0:3013
-30:3:2974
-31:0:3013
-32:3:2975
-33:0:3013
-34:3:2980
-35:0:3013
-36:3:2981
-37:0:3013
-38:3:2982
-39:0:3013
-40:3:2983
-41:0:3013
-42:3:2984
-43:0:3013
-44:3:2985
-45:0:3013
-46:3:2982
-47:0:3013
-48:3:2983
-49:0:3013
-50:3:2984
-51:0:3013
-52:3:2985
-53:0:3013
-54:3:2986
-55:0:3013
-56:3:2992
-57:0:3013
-58:3:2993
-59:0:3013
-60:3:2994
-61:0:3013
-62:3:2995
-63:0:3013
-64:3:2996
-65:0:3013
-66:3:2997
-67:0:3013
-68:3:2998
-69:0:3013
-70:3:2995
-71:0:3013
-72:2:1133
-73:0:3013
-74:2:1134
-75:2:1138
-76:2:1139
-77:2:1147
-78:2:1148
-79:2:1152
-80:2:1153
-81:2:1161
-82:2:1166
-83:2:1170
-84:2:1171
-85:2:1178
-86:2:1179
-87:2:1190
-88:2:1191
-89:2:1192
-90:2:1203
-91:2:1208
-92:2:1209
-93:0:3013
-94:2:1221
-95:2:1222
-96:0:3013
-97:2:1226
-98:2:1230
-99:2:1231
-100:2:1239
-101:2:1240
-102:2:1244
-103:2:1245
-104:2:1253
-105:2:1258
-106:2:1259
-107:2:1270
-108:2:1271
-109:2:1282
-110:2:1283
-111:2:1284
-112:2:1295
-113:2:1300
-114:2:1301
-115:0:3013
-116:2:1313
-117:0:3013
-118:2:1314
-119:0:3013
-120:2:1324
-121:0:3013
-122:2:1325
-123:0:3013
-124:2:1329
-125:2:1330
-126:2:1334
-127:2:1338
-128:2:1339
-129:2:1343
-130:2:1351
-131:2:1352
-132:2:1357
-133:2:1364
-134:2:1365
-135:2:1372
-136:2:1377
-137:0:3013
-138:2:1388
-139:0:3013
-140:2:1392
-141:2:1393
-142:2:1397
-143:2:1401
-144:2:1402
-145:2:1406
-146:2:1414
-147:2:1415
-148:2:1420
-149:2:1427
-150:2:1428
-151:2:1435
-152:2:1440
-153:0:3013
-154:2:1451
-155:0:3013
-156:2:1459
-157:2:1460
-158:2:1464
-159:2:1468
-160:2:1469
-161:2:1473
-162:2:1481
-163:2:1482
-164:2:1487
-165:2:1494
-166:2:1495
-167:2:1502
-168:2:1507
-169:0:3013
-170:2:1522
-171:0:3013
-172:2:1523
-173:2:1527
-174:2:1528
-175:2:1536
-176:2:1537
-177:2:1541
-178:2:1542
-179:2:1550
-180:2:1555
-181:2:1559
-182:2:1560
-183:2:1567
-184:2:1568
-185:2:1579
-186:2:1580
-187:2:1581
-188:2:1592
-189:2:1597
-190:2:1598
-191:0:3013
-192:2:1610
-193:0:3013
-194:2:1613
-195:2:1614
-196:2:1626
-197:2:1627
-198:2:1631
-199:2:1632
-200:2:1640
-201:2:1645
-202:2:1649
-203:2:1650
-204:2:1657
-205:2:1658
-206:2:1669
-207:2:1670
-208:2:1671
-209:2:1682
-210:2:1687
-211:2:1688
-212:0:3013
-213:2:1700
-214:0:3013
-215:2:1701
-216:0:3013
-217:2:1702
-218:0:3013
-219:2:1703
-220:0:3013
-221:2:1704
-222:2:1708
-223:2:1709
-224:2:1717
-225:2:1718
-226:2:1722
-227:2:1723
-228:2:1731
-229:2:1736
-230:2:1740
-231:2:1741
-232:2:1748
-233:2:1749
-234:2:1760
-235:2:1761
-236:2:1762
-237:2:1773
-238:2:1778
-239:2:1779
-240:0:3013
-241:2:1989
-242:0:3013
-243:2:2085
-244:0:3013
-245:2:2086
-246:0:3013
-247:2:2090
-248:0:3013
-249:2:2096
-250:2:2100
-251:2:2101
-252:2:2109
-253:2:2110
-254:2:2114
-255:2:2115
-256:2:2123
-257:2:2128
-258:2:2132
-259:2:2133
-260:2:2140
-261:2:2141
-262:2:2152
-263:2:2153
-264:2:2154
-265:2:2165
-266:2:2170
-267:2:2171
-268:0:3013
-269:2:2183
-270:0:3013
-271:2:2184
-272:2:2188
-273:2:2189
-274:2:2197
-275:2:2198
-276:2:2202
-277:2:2203
-278:2:2211
-279:2:2216
-280:2:2220
-281:2:2221
-282:2:2228
-283:2:2229
-284:2:2240
-285:2:2241
-286:2:2242
-287:2:2253
-288:2:2258
-289:2:2259
-290:0:3013
-291:2:2271
-292:0:3013
-293:2:2274
-294:2:2275
-295:2:2287
-296:2:2288
-297:2:2292
-298:2:2293
-299:2:2301
-300:2:2306
-301:2:2310
-302:2:2311
-303:2:2318
-304:2:2319
-305:2:2330
-306:2:2331
-307:2:2332
-308:2:2343
-309:2:2348
-310:2:2349
-311:0:3013
-312:2:2361
-313:0:3013
-314:2:2362
-315:0:3013
-316:2:2363
-317:0:3013
-318:2:2364
-319:0:3013
-320:2:2365
-321:2:2369
-322:2:2370
-323:2:2378
-324:2:2379
-325:2:2383
-326:2:2384
-327:2:2392
-328:2:2397
-329:2:2401
-330:2:2402
-331:2:2409
-332:2:2410
-333:2:2421
-334:2:2422
-335:2:2423
-336:2:2434
-337:2:2439
-338:2:2440
-339:0:3013
-340:2:2650
-341:0:3013
-342:2:2746
-343:0:3013
-344:2:2747
-345:0:3013
-346:2:2751
-347:0:3013
-348:2:2757
-349:0:3013
-350:2:2761
-351:2:2762
-352:2:2766
-353:2:2770
-354:2:2771
-355:2:2775
-356:2:2783
-357:2:2784
-358:2:2789
-359:2:2796
-360:2:2797
-361:2:2804
-362:2:2809
-363:0:3013
-364:2:2820
-365:0:3013
-366:2:2824
-367:2:2825
-368:2:2829
-369:2:2833
-370:2:2834
-371:2:2838
-372:2:2846
-373:2:2847
-374:2:2852
-375:2:2859
-376:2:2860
-377:2:2867
-378:2:2872
-379:0:3013
-380:2:2883
-381:0:3013
-382:2:2891
-383:2:2892
-384:2:2896
-385:2:2900
-386:2:2901
-387:2:2905
-388:2:2913
-389:2:2914
-390:2:2919
-391:2:2926
-392:2:2927
-393:2:2934
-394:2:2939
-395:0:3013
-396:2:2954
-397:0:3013
-398:2:2955
-399:0:3013
-400:2:1133
-401:0:3013
-402:2:1134
-403:2:1138
-404:2:1139
-405:2:1147
-406:2:1148
-407:2:1152
-408:2:1153
-409:2:1161
-410:2:1166
-411:2:1170
-412:2:1171
-413:2:1178
-414:2:1179
-415:2:1190
-416:2:1191
-417:2:1192
-418:2:1203
-419:2:1208
-420:2:1209
-421:0:3013
-422:2:1221
-423:2:1222
-424:0:3013
-425:2:1226
-426:2:1230
-427:2:1231
-428:2:1239
-429:2:1240
-430:2:1244
-431:2:1245
-432:2:1253
-433:2:1258
-434:2:1259
-435:2:1270
-436:2:1271
-437:2:1282
-438:2:1283
-439:2:1284
-440:2:1295
-441:2:1300
-442:2:1301
-443:0:3013
-444:2:1313
-445:0:3013
-446:2:1314
-447:0:3013
-448:2:1324
-449:0:3013
-450:2:1325
-451:0:3013
-452:2:1329
-453:2:1330
-454:2:1334
-455:2:1338
-456:2:1339
-457:2:1343
-458:2:1351
-459:2:1352
-460:2:1357
-461:2:1364
-462:2:1365
-463:2:1372
-464:2:1377
-465:0:3013
-466:2:1388
-467:0:3013
-468:2:1392
-469:2:1393
-470:2:1397
-471:2:1401
-472:2:1402
-473:2:1406
-474:2:1414
-475:2:1415
-476:2:1420
-477:2:1427
-478:2:1428
-479:2:1435
-480:2:1440
-481:0:3013
-482:2:1451
-483:0:3013
-484:2:1459
-485:2:1460
-486:2:1464
-487:2:1468
-488:2:1469
-489:2:1473
-490:2:1481
-491:2:1482
-492:2:1487
-493:2:1494
-494:2:1495
-495:2:1502
-496:2:1507
-497:0:3013
-498:2:1522
-499:0:3013
-500:2:1523
-501:2:1527
-502:2:1528
-503:2:1536
-504:2:1537
-505:2:1541
-506:2:1542
-507:2:1550
-508:2:1555
-509:2:1559
-510:2:1560
-511:2:1567
-512:2:1568
-513:2:1579
-514:2:1580
-515:2:1581
-516:2:1592
-517:2:1597
-518:2:1598
-519:0:3013
-520:2:1610
-521:0:3013
-522:2:1613
-523:2:1614
-524:2:1626
-525:2:1627
-526:2:1631
-527:2:1632
-528:2:1640
-529:2:1645
-530:2:1649
-531:2:1650
-532:2:1657
-533:2:1658
-534:2:1669
-535:2:1670
-536:2:1671
-537:2:1682
-538:2:1687
-539:2:1688
-540:0:3013
-541:2:1700
-542:0:3013
-543:2:1701
-544:0:3013
-545:2:1702
-546:0:3013
-547:2:1703
-548:0:3013
-549:2:1704
-550:2:1708
-551:2:1709
-552:2:1717
-553:2:1718
-554:2:1722
-555:2:1723
-556:2:1731
-557:2:1736
-558:2:1740
-559:2:1741
-560:2:1748
-561:2:1749
-562:2:1760
-563:2:1761
-564:2:1762
-565:2:1773
-566:2:1778
-567:2:1779
-568:0:3013
-569:2:1989
-570:0:3013
-571:2:2085
-572:0:3013
-573:2:2086
-574:0:3013
-575:2:2090
-576:0:3013
-577:2:2096
-578:2:2100
-579:2:2101
-580:2:2109
-581:2:2110
-582:2:2114
-583:2:2115
-584:2:2123
-585:2:2128
-586:2:2132
-587:2:2133
-588:2:2140
-589:2:2141
-590:2:2152
-591:2:2153
-592:2:2154
-593:2:2165
-594:2:2170
-595:2:2171
-596:0:3013
-597:2:2183
-598:0:3013
-599:2:2184
-600:2:2188
-601:2:2189
-602:2:2197
-603:2:2198
-604:2:2202
-605:2:2203
-606:2:2211
-607:2:2216
-608:2:2220
-609:2:2221
-610:2:2228
-611:2:2229
-612:2:2240
-613:2:2241
-614:2:2242
-615:2:2253
-616:2:2258
-617:2:2259
-618:0:3013
-619:2:2271
-620:0:3013
-621:2:2274
-622:2:2275
-623:2:2287
-624:2:2288
-625:2:2292
-626:2:2293
-627:2:2301
-628:2:2306
-629:2:2310
-630:2:2311
-631:2:2318
-632:2:2319
-633:2:2330
-634:2:2331
-635:2:2332
-636:2:2343
-637:2:2348
-638:2:2349
-639:0:3013
-640:2:2361
-641:0:3013
-642:2:2362
-643:0:3013
-644:2:2363
-645:0:3013
-646:2:2364
-647:0:3013
-648:2:2365
-649:2:2369
-650:2:2370
-651:2:2378
-652:2:2379
-653:2:2383
-654:2:2384
-655:2:2392
-656:2:2397
-657:2:2401
-658:2:2402
-659:2:2409
-660:2:2410
-661:2:2421
-662:2:2422
-663:2:2423
-664:2:2434
-665:2:2439
-666:2:2440
-667:0:3013
-668:2:2650
-669:0:3013
-670:2:2746
-671:0:3013
-672:2:2747
-673:0:3013
-674:2:2751
-675:0:3013
-676:2:2757
-677:0:3013
-678:2:2761
-679:2:2762
-680:2:2766
-681:2:2770
-682:2:2771
-683:2:2775
-684:2:2783
-685:2:2784
-686:2:2789
-687:2:2796
-688:2:2797
-689:2:2804
-690:2:2809
-691:0:3013
-692:2:2820
-693:0:3013
-694:2:2824
-695:2:2825
-696:2:2829
-697:2:2833
-698:2:2834
-699:2:2838
-700:2:2846
-701:2:2847
-702:2:2852
-703:2:2859
-704:2:2860
-705:2:2867
-706:2:2872
-707:0:3013
-708:2:2883
-709:0:3013
-710:2:2891
-711:2:2892
-712:2:2896
-713:2:2900
-714:2:2901
-715:2:2905
-716:2:2913
-717:2:2914
-718:2:2919
-719:2:2926
-720:2:2927
-721:2:2934
-722:2:2939
-723:0:3013
-724:2:2954
-725:0:3013
-726:2:2955
-727:0:3013
-728:2:1133
-729:0:3013
-730:2:1134
-731:2:1138
-732:2:1139
-733:2:1147
-734:2:1148
-735:2:1152
-736:2:1153
-737:2:1161
-738:2:1166
-739:2:1170
-740:2:1171
-741:2:1178
-742:2:1179
-743:2:1190
-744:2:1191
-745:2:1192
-746:2:1203
-747:2:1208
-748:2:1209
-749:0:3013
-750:2:1221
-751:2:1222
-752:0:3013
-753:2:1226
-754:2:1230
-755:2:1231
-756:2:1239
-757:2:1240
-758:2:1244
-759:2:1245
-760:2:1253
-761:2:1258
-762:2:1259
-763:2:1270
-764:2:1271
-765:2:1282
-766:2:1283
-767:2:1284
-768:2:1295
-769:2:1300
-770:2:1301
-771:0:3013
-772:2:1313
-773:0:3013
-774:2:1314
-775:0:3013
-776:2:1324
-777:0:3013
-778:2:1325
-779:0:3013
-780:2:1329
-781:2:1330
-782:2:1334
-783:2:1338
-784:2:1339
-785:2:1343
-786:2:1351
-787:2:1352
-788:2:1357
-789:2:1364
-790:2:1365
-791:2:1372
-792:2:1377
-793:0:3013
-794:2:1388
-795:0:3013
-796:2:1392
-797:2:1393
-798:2:1397
-799:2:1401
-800:2:1402
-801:2:1406
-802:2:1414
-803:2:1415
-804:2:1420
-805:2:1427
-806:2:1428
-807:2:1435
-808:2:1440
-809:0:3013
-810:2:1451
-811:0:3013
-812:2:1459
-813:2:1460
-814:2:1464
-815:2:1468
-816:2:1469
-817:2:1473
-818:2:1481
-819:2:1482
-820:2:1487
-821:2:1494
-822:2:1495
-823:2:1502
-824:2:1507
-825:0:3013
-826:2:1522
-827:0:3013
-828:2:1523
-829:2:1527
-830:2:1528
-831:2:1536
-832:2:1537
-833:2:1541
-834:2:1542
-835:2:1550
-836:2:1555
-837:2:1559
-838:2:1560
-839:2:1567
-840:2:1568
-841:2:1579
-842:2:1580
-843:2:1581
-844:2:1592
-845:2:1597
-846:2:1598
-847:0:3013
-848:2:1610
-849:0:3013
-850:2:1613
-851:2:1614
-852:2:1626
-853:2:1627
-854:2:1631
-855:2:1632
-856:2:1640
-857:2:1645
-858:2:1649
-859:2:1650
-860:2:1657
-861:2:1658
-862:2:1669
-863:2:1670
-864:2:1671
-865:2:1682
-866:2:1687
-867:2:1688
-868:0:3013
-869:2:1700
-870:0:3013
-871:2:1701
-872:0:3013
-873:2:1702
-874:0:3013
-875:2:1703
-876:0:3013
-877:2:1704
-878:2:1708
-879:2:1709
-880:2:1717
-881:2:1718
-882:2:1722
-883:2:1723
-884:2:1731
-885:2:1736
-886:2:1740
-887:2:1741
-888:2:1748
-889:2:1749
-890:2:1760
-891:2:1761
-892:2:1762
-893:2:1773
-894:2:1778
-895:2:1779
-896:0:3013
-897:2:1989
-898:0:3013
-899:2:2085
-900:0:3013
-901:2:2086
-902:0:3013
-903:2:2090
-904:0:3013
-905:2:2096
-906:2:2100
-907:2:2101
-908:2:2109
-909:2:2110
-910:2:2114
-911:2:2115
-912:2:2123
-913:2:2128
-914:2:2132
-915:2:2133
-916:2:2140
-917:2:2141
-918:2:2152
-919:2:2153
-920:2:2154
-921:2:2165
-922:2:2170
-923:2:2171
-924:0:3013
-925:2:2183
-926:0:3013
-927:2:2184
-928:2:2188
-929:2:2189
-930:2:2197
-931:2:2198
-932:2:2202
-933:2:2203
-934:2:2211
-935:2:2216
-936:2:2220
-937:2:2221
-938:2:2228
-939:2:2229
-940:2:2240
-941:2:2241
-942:2:2242
-943:2:2253
-944:2:2258
-945:2:2259
-946:0:3013
-947:2:2271
-948:0:3013
-949:2:2274
-950:2:2275
-951:2:2287
-952:2:2288
-953:2:2292
-954:2:2293
-955:2:2301
-956:2:2306
-957:2:2310
-958:2:2311
-959:2:2318
-960:2:2319
-961:2:2330
-962:2:2331
-963:2:2332
-964:2:2343
-965:2:2348
-966:2:2349
-967:0:3013
-968:2:2361
-969:0:3013
-970:2:2362
-971:0:3013
-972:2:2363
-973:0:3013
-974:2:2364
-975:0:3013
-976:2:2365
-977:2:2369
-978:2:2370
-979:2:2378
-980:2:2379
-981:2:2383
-982:2:2384
-983:2:2392
-984:2:2397
-985:2:2401
-986:2:2402
-987:2:2409
-988:2:2410
-989:2:2421
-990:2:2422
-991:2:2423
-992:2:2434
-993:2:2439
-994:2:2440
-995:0:3013
-996:2:2650
-997:0:3013
-998:2:2746
-999:0:3013
-1000:2:2747
-1001:0:3013
-1002:2:2751
-1003:0:3013
-1004:2:2757
-1005:0:3013
-1006:2:2761
-1007:2:2762
-1008:2:2766
-1009:2:2770
-1010:2:2771
-1011:2:2775
-1012:2:2783
-1013:2:2784
-1014:2:2789
-1015:2:2796
-1016:2:2797
-1017:2:2804
-1018:2:2809
-1019:0:3013
-1020:2:2820
-1021:0:3013
-1022:2:2824
-1023:2:2825
-1024:2:2829
-1025:2:2833
-1026:2:2834
-1027:2:2838
-1028:2:2846
-1029:2:2847
-1030:2:2852
-1031:2:2859
-1032:2:2860
-1033:2:2867
-1034:2:2872
-1035:0:3013
-1036:2:2883
-1037:0:3013
-1038:2:2891
-1039:2:2892
-1040:2:2896
-1041:2:2900
-1042:2:2901
-1043:2:2905
-1044:2:2913
-1045:2:2914
-1046:2:2919
-1047:2:2926
-1048:2:2927
-1049:2:2934
-1050:2:2939
-1051:0:3013
-1052:2:2954
-1053:0:3013
-1054:2:2955
-1055:0:3013
-1056:2:1133
-1057:0:3013
-1058:2:1134
-1059:2:1138
-1060:2:1139
-1061:2:1147
-1062:2:1148
-1063:2:1152
-1064:2:1153
-1065:2:1161
-1066:2:1166
-1067:2:1170
-1068:2:1171
-1069:2:1178
-1070:2:1179
-1071:2:1190
-1072:2:1191
-1073:2:1192
-1074:2:1203
-1075:2:1208
-1076:2:1209
-1077:0:3013
-1078:2:1221
-1079:2:1222
-1080:0:3013
-1081:2:1226
-1082:2:1230
-1083:2:1231
-1084:2:1239
-1085:2:1240
-1086:2:1244
-1087:2:1245
-1088:2:1253
-1089:2:1258
-1090:2:1259
-1091:2:1270
-1092:2:1271
-1093:2:1282
-1094:2:1283
-1095:2:1284
-1096:2:1295
-1097:2:1300
-1098:2:1301
-1099:0:3013
-1100:2:1313
-1101:0:3013
-1102:2:1314
-1103:0:3013
-1104:2:1324
-1105:0:3013
-1106:2:1325
-1107:0:3013
-1108:2:1329
-1109:2:1330
-1110:2:1334
-1111:2:1338
-1112:2:1339
-1113:2:1343
-1114:2:1351
-1115:2:1352
-1116:2:1357
-1117:2:1364
-1118:2:1365
-1119:2:1372
-1120:2:1377
-1121:0:3013
-1122:2:1388
-1123:0:3013
-1124:2:1392
-1125:2:1393
-1126:2:1397
-1127:2:1401
-1128:2:1402
-1129:2:1406
-1130:2:1414
-1131:2:1415
-1132:2:1420
-1133:2:1427
-1134:2:1428
-1135:2:1435
-1136:2:1440
-1137:0:3013
-1138:2:1451
-1139:0:3013
-1140:2:1459
-1141:2:1460
-1142:2:1464
-1143:2:1468
-1144:2:1469
-1145:2:1473
-1146:2:1481
-1147:2:1482
-1148:2:1487
-1149:2:1494
-1150:2:1495
-1151:2:1502
-1152:2:1507
-1153:0:3013
-1154:2:1522
-1155:0:3013
-1156:2:1523
-1157:2:1527
-1158:2:1528
-1159:2:1536
-1160:2:1537
-1161:2:1541
-1162:2:1542
-1163:2:1550
-1164:2:1555
-1165:2:1559
-1166:2:1560
-1167:2:1567
-1168:2:1568
-1169:2:1579
-1170:2:1580
-1171:2:1581
-1172:2:1592
-1173:2:1597
-1174:2:1598
-1175:0:3013
-1176:2:1610
-1177:0:3013
-1178:2:1613
-1179:2:1614
-1180:2:1626
-1181:2:1627
-1182:2:1631
-1183:2:1632
-1184:2:1640
-1185:2:1645
-1186:2:1649
-1187:2:1650
-1188:2:1657
-1189:2:1658
-1190:2:1669
-1191:2:1670
-1192:2:1671
-1193:2:1682
-1194:2:1687
-1195:2:1688
-1196:0:3013
-1197:2:1700
-1198:0:3013
-1199:2:1701
-1200:0:3013
-1201:2:1702
-1202:0:3013
-1203:2:1703
-1204:0:3013
-1205:2:1704
-1206:2:1708
-1207:2:1709
-1208:2:1717
-1209:2:1718
-1210:2:1722
-1211:2:1723
-1212:2:1731
-1213:2:1736
-1214:2:1740
-1215:2:1741
-1216:2:1748
-1217:2:1749
-1218:2:1760
-1219:2:1761
-1220:2:1762
-1221:2:1773
-1222:2:1778
-1223:2:1779
-1224:0:3013
-1225:2:1989
-1226:0:3013
-1227:2:2085
-1228:0:3013
-1229:2:2086
-1230:0:3013
-1231:2:2090
-1232:0:3013
-1233:2:2096
-1234:2:2100
-1235:2:2101
-1236:2:2109
-1237:2:2110
-1238:2:2114
-1239:2:2115
-1240:2:2123
-1241:2:2128
-1242:2:2132
-1243:2:2133
-1244:2:2140
-1245:2:2141
-1246:2:2152
-1247:2:2153
-1248:2:2154
-1249:2:2165
-1250:2:2170
-1251:2:2171
-1252:0:3013
-1253:2:2183
-1254:0:3013
-1255:2:2184
-1256:2:2188
-1257:2:2189
-1258:2:2197
-1259:2:2198
-1260:2:2202
-1261:2:2203
-1262:2:2211
-1263:2:2216
-1264:2:2220
-1265:2:2221
-1266:2:2228
-1267:2:2229
-1268:2:2240
-1269:2:2241
-1270:2:2242
-1271:2:2253
-1272:2:2258
-1273:2:2259
-1274:0:3013
-1275:2:2271
-1276:0:3013
-1277:2:2274
-1278:2:2275
-1279:2:2287
-1280:2:2288
-1281:2:2292
-1282:2:2293
-1283:2:2301
-1284:2:2306
-1285:2:2310
-1286:2:2311
-1287:2:2318
-1288:2:2319
-1289:2:2330
-1290:2:2331
-1291:2:2332
-1292:2:2343
-1293:2:2348
-1294:2:2349
-1295:0:3013
-1296:2:2361
-1297:0:3013
-1298:2:2362
-1299:0:3013
-1300:2:2363
-1301:0:3013
-1302:2:2364
-1303:0:3013
-1304:2:2365
-1305:2:2369
-1306:2:2370
-1307:2:2378
-1308:2:2379
-1309:2:2383
-1310:2:2384
-1311:2:2392
-1312:2:2397
-1313:2:2401
-1314:2:2402
-1315:2:2409
-1316:2:2410
-1317:2:2421
-1318:2:2422
-1319:2:2423
-1320:2:2434
-1321:2:2439
-1322:2:2440
-1323:0:3013
-1324:2:2650
-1325:0:3013
-1326:2:2746
-1327:0:3013
-1328:2:2747
-1329:0:3013
-1330:2:2751
-1331:0:3013
-1332:2:2757
-1333:0:3013
-1334:2:2761
-1335:2:2762
-1336:2:2766
-1337:2:2770
-1338:2:2771
-1339:2:2775
-1340:2:2783
-1341:2:2784
-1342:2:2789
-1343:2:2796
-1344:2:2797
-1345:2:2804
-1346:2:2809
-1347:0:3013
-1348:2:2820
-1349:0:3013
-1350:2:2824
-1351:2:2825
-1352:2:2829
-1353:2:2833
-1354:2:2834
-1355:2:2838
-1356:2:2846
-1357:2:2847
-1358:2:2852
-1359:2:2859
-1360:2:2860
-1361:2:2867
-1362:2:2872
-1363:0:3013
-1364:2:2883
-1365:0:3013
-1366:2:2891
-1367:2:2892
-1368:2:2896
-1369:2:2900
-1370:2:2901
-1371:2:2905
-1372:2:2913
-1373:2:2914
-1374:2:2919
-1375:2:2926
-1376:2:2927
-1377:2:2934
-1378:2:2939
-1379:0:3013
-1380:2:2954
-1381:0:3013
-1382:2:2955
-1383:0:3013
-1384:2:1133
-1385:0:3013
-1386:2:1134
-1387:2:1138
-1388:2:1139
-1389:2:1147
-1390:2:1148
-1391:2:1152
-1392:2:1153
-1393:2:1161
-1394:2:1166
-1395:2:1170
-1396:2:1171
-1397:2:1178
-1398:2:1179
-1399:2:1190
-1400:2:1191
-1401:2:1192
-1402:2:1203
-1403:2:1208
-1404:2:1209
-1405:0:3013
-1406:2:1221
-1407:2:1222
-1408:0:3013
-1409:2:1226
-1410:2:1230
-1411:2:1231
-1412:2:1239
-1413:2:1240
-1414:2:1244
-1415:2:1245
-1416:2:1253
-1417:2:1258
-1418:2:1259
-1419:2:1270
-1420:2:1271
-1421:2:1282
-1422:2:1283
-1423:2:1284
-1424:2:1295
-1425:2:1300
-1426:2:1301
-1427:0:3013
-1428:2:1313
-1429:0:3013
-1430:2:1314
-1431:0:3013
-1432:2:1324
-1433:0:3013
-1434:2:1325
-1435:0:3013
-1436:2:1329
-1437:2:1330
-1438:2:1334
-1439:2:1338
-1440:2:1339
-1441:2:1343
-1442:2:1351
-1443:2:1352
-1444:2:1357
-1445:2:1364
-1446:2:1365
-1447:2:1372
-1448:2:1377
-1449:0:3013
-1450:2:1388
-1451:0:3013
-1452:1:4
-1453:1:8
-1454:1:9
-1455:1:17
-1456:1:18
-1457:1:22
-1458:1:23
-1459:1:31
-1460:1:36
-1461:1:40
-1462:1:41
-1463:1:48
-1464:1:49
-1465:1:60
-1466:1:61
-1467:1:62
-1468:1:73
-1469:1:85
-1470:1:86
-1471:0:3013
-1472:1:91
-1473:0:3013
-1474:1:92
-1475:1:96
-1476:1:97
-1477:1:105
-1478:1:106
-1479:1:110
-1480:1:111
-1481:1:119
-1482:1:124
-1483:1:128
-1484:1:129
-1485:1:136
-1486:1:137
-1487:1:148
-1488:1:149
-1489:1:150
-1490:1:161
-1491:1:173
-1492:1:174
-1493:0:3013
-1494:1:179
-1495:0:3013
-1496:1:180
-1497:0:3013
-1498:1:181
-1499:1:185
-1500:1:186
-1501:1:194
-1502:1:195
-1503:1:199
-1504:1:200
-1505:1:208
-1506:1:213
-1507:1:217
-1508:1:218
-1509:1:225
-1510:1:226
-1511:1:237
-1512:1:238
-1513:1:239
-1514:1:250
-1515:1:262
-1516:1:263
-1517:0:3013
-1518:1:268
-1519:0:3013
-1520:1:469
-1521:0:3013
-1522:1:470
-1523:0:3013
-1524:1:3
-1525:0:3013
-1526:1:4
-1527:1:8
-1528:1:9
-1529:1:17
-1530:1:18
-1531:1:19
-1532:1:31
-1533:1:36
-1534:1:40
-1535:1:41
-1536:1:48
-1537:1:49
-1538:1:60
-1539:1:61
-1540:1:62
-1541:1:73
-1542:1:85
-1543:1:86
-1544:0:3013
-1545:1:91
-1546:0:3013
-1547:1:92
-1548:1:96
-1549:1:97
-1550:1:105
-1551:1:106
-1552:1:110
-1553:1:111
-1554:1:119
-1555:1:124
-1556:1:128
-1557:1:129
-1558:1:136
-1559:1:137
-1560:1:148
-1561:1:149
-1562:1:150
-1563:1:161
-1564:1:173
-1565:1:174
-1566:0:3013
-1567:1:271
-1568:0:3013
-1569:1:272
-1570:0:3013
-1571:1:469
-1572:0:3013
-1573:1:470
-1574:0:3013
-1575:1:475
-1576:0:3013
-1577:1:480
-1578:1:484
-1579:1:485
-1580:1:493
-1581:1:494
-1582:1:495
-1583:1:507
-1584:1:512
-1585:1:516
-1586:1:517
-1587:1:524
-1588:1:525
-1589:1:536
-1590:1:537
-1591:1:538
-1592:1:549
-1593:1:561
-1594:1:562
-1595:0:3013
-1596:1:567
-1597:0:3013
-1598:2:1392
-1599:2:1393
-1600:2:1397
-1601:2:1401
-1602:2:1402
-1603:2:1406
-1604:2:1414
-1605:2:1415
-1606:2:1420
-1607:2:1427
-1608:2:1428
-1609:2:1435
-1610:2:1440
-1611:0:3013
-1612:2:1451
-1613:0:3013
-1614:2:1459
-1615:2:1460
-1616:2:1464
-1617:2:1468
-1618:2:1469
-1619:2:1473
-1620:2:1481
-1621:2:1482
-1622:2:1487
-1623:2:1494
-1624:2:1495
-1625:2:1502
-1626:2:1507
-1627:0:3013
-1628:3:2996
-1629:0:3013
-1630:3:2997
-1631:0:3013
-1632:3:2998
-1633:0:3013
-1634:3:2999
-1635:0:3013
-1636:3:3005
-1637:0:3013
-1638:3:3010
-1639:0:3013
-1640:2:1522
-1641:0:3013
-1642:2:1523
-1643:2:1527
-1644:2:1528
-1645:2:1536
-1646:2:1537
-1647:2:1541
-1648:2:1542
-1649:2:1550
-1650:2:1555
-1651:2:1559
-1652:2:1560
-1653:2:1567
-1654:2:1568
-1655:2:1579
-1656:2:1587
-1657:2:1588
-1658:2:1592
-1659:2:1597
-1660:2:1598
-1661:0:3013
-1662:2:1610
-1663:0:3013
-1664:2:1613
-1665:2:1614
-1666:2:1626
-1667:2:1627
-1668:2:1631
-1669:2:1632
-1670:2:1640
-1671:2:1645
-1672:2:1649
-1673:2:1650
-1674:2:1657
-1675:2:1658
-1676:2:1669
-1677:2:1677
-1678:2:1678
-1679:2:1682
-1680:2:1687
-1681:2:1688
-1682:0:3013
-1683:2:1700
-1684:0:3013
-1685:2:1701
-1686:0:3013
-1687:2:1702
-1688:0:3013
-1689:2:1703
-1690:0:3013
-1691:2:1704
-1692:2:1708
-1693:2:1709
-1694:2:1717
-1695:2:1718
-1696:2:1722
-1697:2:1723
-1698:2:1731
-1699:2:1736
-1700:2:1740
-1701:2:1741
-1702:2:1748
-1703:2:1749
-1704:2:1760
-1705:2:1761
-1706:2:1762
-1707:2:1773
-1708:2:1778
-1709:2:1779
-1710:0:3013
-1711:2:1989
-1712:0:3013
-1713:2:2085
-1714:0:3013
-1715:2:2086
-1716:0:3013
-1717:2:2090
-1718:0:3013
-1719:2:2096
-1720:2:2100
-1721:2:2101
-1722:2:2109
-1723:2:2110
-1724:2:2114
-1725:2:2115
-1726:2:2123
-1727:2:2128
-1728:2:2132
-1729:2:2133
-1730:2:2140
-1731:2:2141
-1732:2:2152
-1733:2:2153
-1734:2:2154
-1735:2:2165
-1736:2:2170
-1737:2:2171
-1738:0:3013
-1739:2:2183
-1740:0:3013
-1741:2:2184
-1742:2:2188
-1743:2:2189
-1744:2:2197
-1745:2:2198
-1746:2:2202
-1747:2:2203
-1748:2:2211
-1749:2:2216
-1750:2:2220
-1751:2:2221
-1752:2:2228
-1753:2:2229
-1754:2:2240
-1755:2:2241
-1756:2:2242
-1757:2:2253
-1758:2:2258
-1759:2:2259
-1760:0:3013
-1761:2:2271
-1762:0:3013
-1763:2:2274
-1764:2:2275
-1765:2:2287
-1766:2:2288
-1767:2:2292
-1768:2:2293
-1769:2:2301
-1770:2:2306
-1771:2:2310
-1772:2:2311
-1773:2:2318
-1774:2:2319
-1775:2:2330
-1776:2:2331
-1777:2:2332
-1778:2:2343
-1779:2:2348
-1780:2:2349
-1781:0:3013
-1782:2:2361
-1783:0:3013
-1784:2:2362
-1785:0:3013
-1786:2:2363
-1787:0:3013
-1788:2:2364
-1789:0:3013
-1790:2:2365
-1791:2:2369
-1792:2:2370
-1793:2:2378
-1794:2:2379
-1795:2:2383
-1796:2:2384
-1797:2:2392
-1798:2:2397
-1799:2:2401
-1800:2:2402
-1801:2:2409
-1802:2:2410
-1803:2:2421
-1804:2:2422
-1805:2:2423
-1806:2:2434
-1807:2:2439
-1808:2:2440
-1809:0:3013
-1810:2:2650
-1811:0:3013
-1812:2:2746
-1813:0:3013
-1814:2:2747
-1815:0:3013
-1816:2:2751
-1817:0:3013
-1818:2:2757
-1819:0:3013
-1820:2:2761
-1821:2:2762
-1822:2:2766
-1823:2:2770
-1824:2:2771
-1825:2:2775
-1826:2:2783
-1827:2:2784
-1828:2:2789
-1829:2:2796
-1830:2:2797
-1831:2:2804
-1832:2:2809
-1833:0:3013
-1834:2:2820
-1835:0:3013
-1836:2:2824
-1837:2:2825
-1838:2:2829
-1839:2:2833
-1840:2:2834
-1841:2:2838
-1842:2:2846
-1843:2:2847
-1844:2:2852
-1845:2:2859
-1846:2:2860
-1847:2:2867
-1848:2:2872
-1849:0:3013
-1850:2:2883
-1851:0:3013
-1852:2:2891
-1853:2:2892
-1854:2:2896
-1855:2:2900
-1856:2:2901
-1857:2:2905
-1858:2:2913
-1859:2:2914
-1860:2:2919
-1861:2:2926
-1862:2:2927
-1863:2:2934
-1864:2:2939
-1865:0:3013
-1866:2:2954
-1867:0:3013
-1868:2:2955
-1869:0:3013
-1870:2:2958
-1871:0:3013
-1872:2:2963
-1873:0:3013
-1874:1:568
-1875:1:572
-1876:1:573
-1877:1:581
-1878:1:582
-1879:1:586
-1880:1:587
-1881:1:595
-1882:1:600
-1883:1:604
-1884:1:605
-1885:1:612
-1886:1:613
-1887:1:624
-1888:1:625
-1889:1:626
-1890:1:637
-1891:1:642
-1892:1:643
-1893:0:3013
-1894:2:2964
-1895:0:3013
-1896:1:655
-1897:0:3011
-1898:2:2963
-1899:0:3017
-1900:1:655
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.define
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.log
deleted file mode 100644 (file)
index 708dee2..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_nested.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 566)
-Depth=    4234 States=    1e+06 Transitions=  1.7e+07 Memory=   527.287        t=   31.2 R=   3e+04
-Depth=    4234 States=    2e+06 Transitions= 3.44e+07 Memory=   588.322        t=   63.7 R=   3e+04
-Depth=    4234 States=    3e+06 Transitions=  5.2e+07 Memory=   649.358        t=   96.8 R=   3e+04
-pan: resizing hashtable to -w22..  done
-Depth=    4234 States=    4e+06 Transitions= 6.97e+07 Memory=   741.416        t=    130 R=   3e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 4234, errors: 0
-  4027146 states, stored
- 66145121 states, matched
- 70172267 transitions (= stored+matched)
-2.6437688e+08 atomic steps
-hash conflicts:  47318190 (resolved)
-
-Stats on memory usage (in Megabytes):
-  322.609      equivalent memory usage for states (stored*(State-vector + overhead))
-  253.418      actual memory usage for states (compression: 78.55%)
-               state-vector as stored = 38 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  743.076      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 288, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 61, "(1)"
-       line 307, "pan.___", state 91, "(1)"
-       line 288, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 149, "(1)"
-       line 307, "pan.___", state 179, "(1)"
-       line 288, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 238, "(1)"
-       line 307, "pan.___", state 268, "(1)"
-       line 158, "pan.___", state 289, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 291, "(1)"
-       line 162, "pan.___", state 298, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 300, "(1)"
-       line 162, "pan.___", state 301, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 301, "else"
-       line 160, "pan.___", state 306, "((j<1))"
-       line 160, "pan.___", state 306, "((j>=1))"
-       line 166, "pan.___", state 311, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 321, "(1)"
-       line 147, "pan.___", state 329, "(1)"
-       line 147, "pan.___", state 330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 330, "else"
-       line 145, "pan.___", state 335, "((j<1))"
-       line 145, "pan.___", state 335, "((j>=1))"
-       line 151, "pan.___", state 341, "(1)"
-       line 151, "pan.___", state 342, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 342, "else"
-       line 153, "pan.___", state 345, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 345, "else"
-       line 185, "pan.___", state 347, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 347, "else"
-       line 158, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 354, "(1)"
-       line 162, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 162, "pan.___", state 363, "(1)"
-       line 162, "pan.___", state 364, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 162, "pan.___", state 364, "else"
-       line 160, "pan.___", state 369, "((j<1))"
-       line 160, "pan.___", state 369, "((j>=1))"
-       line 166, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 384, "(1)"
-       line 147, "pan.___", state 392, "(1)"
-       line 147, "pan.___", state 393, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 147, "pan.___", state 393, "else"
-       line 145, "pan.___", state 398, "((j<1))"
-       line 145, "pan.___", state 398, "((j>=1))"
-       line 151, "pan.___", state 404, "(1)"
-       line 151, "pan.___", state 405, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 151, "pan.___", state 405, "else"
-       line 153, "pan.___", state 408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 153, "pan.___", state 408, "else"
-       line 185, "pan.___", state 410, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 185, "pan.___", state 410, "else"
-       line 199, "pan.___", state 414, "((i<1))"
-       line 199, "pan.___", state 414, "((i>=1))"
-       line 158, "pan.___", state 419, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 421, "(1)"
-       line 162, "pan.___", state 428, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 430, "(1)"
-       line 162, "pan.___", state 431, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 431, "else"
-       line 160, "pan.___", state 436, "((j<1))"
-       line 160, "pan.___", state 436, "((j>=1))"
-       line 166, "pan.___", state 441, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 451, "(1)"
-       line 147, "pan.___", state 459, "(1)"
-       line 147, "pan.___", state 460, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 460, "else"
-       line 145, "pan.___", state 465, "((j<1))"
-       line 145, "pan.___", state 465, "((j>=1))"
-       line 151, "pan.___", state 471, "(1)"
-       line 151, "pan.___", state 472, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 472, "else"
-       line 153, "pan.___", state 475, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 475, "else"
-       line 185, "pan.___", state 477, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 477, "else"
-       line 288, "pan.___", state 492, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 537, "(1)"
-       line 307, "pan.___", state 567, "(1)"
-       line 288, "pan.___", state 580, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 612, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 625, "(1)"
-       line 307, "pan.___", state 655, "(1)"
-       line 288, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 713, "(1)"
-       line 307, "pan.___", state 743, "(1)"
-       line 158, "pan.___", state 758, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 760, "(1)"
-       line 162, "pan.___", state 767, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 769, "(1)"
-       line 162, "pan.___", state 770, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 770, "else"
-       line 160, "pan.___", state 775, "((j<1))"
-       line 160, "pan.___", state 775, "((j>=1))"
-       line 166, "pan.___", state 780, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 790, "(1)"
-       line 147, "pan.___", state 798, "(1)"
-       line 147, "pan.___", state 799, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 799, "else"
-       line 145, "pan.___", state 804, "((j<1))"
-       line 145, "pan.___", state 804, "((j>=1))"
-       line 151, "pan.___", state 810, "(1)"
-       line 151, "pan.___", state 811, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 811, "else"
-       line 153, "pan.___", state 814, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 814, "else"
-       line 185, "pan.___", state 816, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 816, "else"
-       line 158, "pan.___", state 821, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 823, "(1)"
-       line 162, "pan.___", state 830, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 162, "pan.___", state 832, "(1)"
-       line 162, "pan.___", state 833, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 162, "pan.___", state 833, "else"
-       line 160, "pan.___", state 838, "((j<1))"
-       line 160, "pan.___", state 838, "((j>=1))"
-       line 166, "pan.___", state 843, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 853, "(1)"
-       line 147, "pan.___", state 861, "(1)"
-       line 147, "pan.___", state 862, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 147, "pan.___", state 862, "else"
-       line 145, "pan.___", state 867, "((j<1))"
-       line 145, "pan.___", state 867, "((j>=1))"
-       line 151, "pan.___", state 873, "(1)"
-       line 151, "pan.___", state 874, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 151, "pan.___", state 874, "else"
-       line 153, "pan.___", state 877, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 153, "pan.___", state 877, "else"
-       line 185, "pan.___", state 879, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 185, "pan.___", state 879, "else"
-       line 199, "pan.___", state 883, "((i<1))"
-       line 199, "pan.___", state 883, "((i>=1))"
-       line 158, "pan.___", state 888, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 890, "(1)"
-       line 162, "pan.___", state 897, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 899, "(1)"
-       line 162, "pan.___", state 900, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 900, "else"
-       line 160, "pan.___", state 905, "((j<1))"
-       line 160, "pan.___", state 905, "((j>=1))"
-       line 166, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 920, "(1)"
-       line 147, "pan.___", state 928, "(1)"
-       line 147, "pan.___", state 929, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 929, "else"
-       line 145, "pan.___", state 934, "((j<1))"
-       line 145, "pan.___", state 934, "((j>=1))"
-       line 151, "pan.___", state 940, "(1)"
-       line 151, "pan.___", state 941, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 941, "else"
-       line 153, "pan.___", state 944, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 944, "else"
-       line 185, "pan.___", state 946, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 946, "else"
-       line 288, "pan.___", state 956, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 988, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1001, "(1)"
-       line 307, "pan.___", state 1031, "(1)"
-       line 288, "pan.___", state 1052, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1084, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1097, "(1)"
-       line 307, "pan.___", state 1127, "(1)"
-       line 433, "pan.___", state 1140, "-end-"
-       (125 of 1140 states)
-unreached in proctype urcu_writer
-       line 288, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 59, "(1)"
-       line 302, "pan.___", state 72, "(1)"
-       line 307, "pan.___", state 89, "(1)"
-       line 288, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 151, "(1)"
-       line 302, "pan.___", state 164, "(1)"
-       line 467, "pan.___", state 195, "(1)"
-       line 158, "pan.___", state 205, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 214, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 237, "(1)"
-       line 147, "pan.___", state 245, "(1)"
-       line 151, "pan.___", state 257, "(1)"
-       line 158, "pan.___", state 268, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 290, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 300, "(1)"
-       line 147, "pan.___", state 308, "(1)"
-       line 151, "pan.___", state 320, "(1)"
-       line 158, "pan.___", state 335, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 344, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 357, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 367, "(1)"
-       line 147, "pan.___", state 375, "(1)"
-       line 151, "pan.___", state 387, "(1)"
-       line 288, "pan.___", state 403, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 448, "(1)"
-       line 302, "pan.___", state 461, "(1)"
-       line 307, "pan.___", state 478, "(1)"
-       line 288, "pan.___", state 495, "(1)"
-       line 292, "pan.___", state 507, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 525, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 551, "(1)"
-       line 307, "pan.___", state 568, "(1)"
-       line 292, "pan.___", state 598, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 642, "(1)"
-       line 307, "pan.___", state 659, "(1)"
-       line 162, "pan.___", state 681, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 694, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 704, "(1)"
-       line 147, "pan.___", state 712, "(1)"
-       line 151, "pan.___", state 724, "(1)"
-       line 158, "pan.___", state 735, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 757, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 767, "(1)"
-       line 147, "pan.___", state 775, "(1)"
-       line 151, "pan.___", state 787, "(1)"
-       line 158, "pan.___", state 802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 811, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 824, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 834, "(1)"
-       line 147, "pan.___", state 842, "(1)"
-       line 151, "pan.___", state 854, "(1)"
-       line 288, "pan.___", state 878, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 288, "pan.___", state 880, "(1)"
-       line 288, "pan.___", state 881, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 288, "pan.___", state 881, "else"
-       line 288, "pan.___", state 884, "(1)"
-       line 292, "pan.___", state 892, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 894, "(1)"
-       line 292, "pan.___", state 895, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 292, "pan.___", state 895, "else"
-       line 292, "pan.___", state 898, "(1)"
-       line 292, "pan.___", state 899, "(1)"
-       line 292, "pan.___", state 899, "(1)"
-       line 290, "pan.___", state 904, "((i<1))"
-       line 290, "pan.___", state 904, "((i>=1))"
-       line 297, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 923, "(1)"
-       line 298, "pan.___", state 924, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 298, "pan.___", state 924, "else"
-       line 298, "pan.___", state 927, "(1)"
-       line 298, "pan.___", state 928, "(1)"
-       line 298, "pan.___", state 928, "(1)"
-       line 302, "pan.___", state 936, "(1)"
-       line 302, "pan.___", state 937, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 302, "pan.___", state 937, "else"
-       line 302, "pan.___", state 940, "(1)"
-       line 302, "pan.___", state 941, "(1)"
-       line 302, "pan.___", state 941, "(1)"
-       line 300, "pan.___", state 946, "((i<1))"
-       line 300, "pan.___", state 946, "((i>=1))"
-       line 307, "pan.___", state 953, "(1)"
-       line 307, "pan.___", state 954, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 307, "pan.___", state 954, "else"
-       line 307, "pan.___", state 957, "(1)"
-       line 307, "pan.___", state 958, "(1)"
-       line 307, "pan.___", state 958, "(1)"
-       line 309, "pan.___", state 961, "(1)"
-       line 309, "pan.___", state 961, "(1)"
-       line 292, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1008, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1034, "(1)"
-       line 307, "pan.___", state 1051, "(1)"
-       line 292, "pan.___", state 1078, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1096, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1122, "(1)"
-       line 307, "pan.___", state 1139, "(1)"
-       line 288, "pan.___", state 1156, "(1)"
-       line 292, "pan.___", state 1168, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1186, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1212, "(1)"
-       line 307, "pan.___", state 1229, "(1)"
-       line 292, "pan.___", state 1259, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1277, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1303, "(1)"
-       line 307, "pan.___", state 1320, "(1)"
-       line 162, "pan.___", state 1342, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1355, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1365, "(1)"
-       line 147, "pan.___", state 1373, "(1)"
-       line 151, "pan.___", state 1385, "(1)"
-       line 158, "pan.___", state 1396, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 1418, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 1428, "(1)"
-       line 147, "pan.___", state 1436, "(1)"
-       line 151, "pan.___", state 1448, "(1)"
-       line 158, "pan.___", state 1463, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 1472, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1485, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1495, "(1)"
-       line 147, "pan.___", state 1503, "(1)"
-       line 151, "pan.___", state 1515, "(1)"
-       line 288, "pan.___", state 1539, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 288, "pan.___", state 1541, "(1)"
-       line 288, "pan.___", state 1542, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 288, "pan.___", state 1542, "else"
-       line 288, "pan.___", state 1545, "(1)"
-       line 292, "pan.___", state 1553, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 1555, "(1)"
-       line 292, "pan.___", state 1556, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 292, "pan.___", state 1556, "else"
-       line 292, "pan.___", state 1559, "(1)"
-       line 292, "pan.___", state 1560, "(1)"
-       line 292, "pan.___", state 1560, "(1)"
-       line 290, "pan.___", state 1565, "((i<1))"
-       line 290, "pan.___", state 1565, "((i>=1))"
-       line 297, "pan.___", state 1571, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1584, "(1)"
-       line 298, "pan.___", state 1585, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 298, "pan.___", state 1585, "else"
-       line 298, "pan.___", state 1588, "(1)"
-       line 298, "pan.___", state 1589, "(1)"
-       line 298, "pan.___", state 1589, "(1)"
-       line 302, "pan.___", state 1597, "(1)"
-       line 302, "pan.___", state 1598, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 302, "pan.___", state 1598, "else"
-       line 302, "pan.___", state 1601, "(1)"
-       line 302, "pan.___", state 1602, "(1)"
-       line 302, "pan.___", state 1602, "(1)"
-       line 300, "pan.___", state 1607, "((i<1))"
-       line 300, "pan.___", state 1607, "((i>=1))"
-       line 307, "pan.___", state 1614, "(1)"
-       line 307, "pan.___", state 1615, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 307, "pan.___", state 1615, "else"
-       line 307, "pan.___", state 1618, "(1)"
-       line 307, "pan.___", state 1619, "(1)"
-       line 307, "pan.___", state 1619, "(1)"
-       line 309, "pan.___", state 1622, "(1)"
-       line 309, "pan.___", state 1622, "(1)"
-       line 162, "pan.___", state 1646, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1659, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1669, "(1)"
-       line 147, "pan.___", state 1677, "(1)"
-       line 151, "pan.___", state 1689, "(1)"
-       line 158, "pan.___", state 1700, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 1722, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 1732, "(1)"
-       line 147, "pan.___", state 1740, "(1)"
-       line 151, "pan.___", state 1752, "(1)"
-       line 158, "pan.___", state 1767, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 1776, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1789, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1799, "(1)"
-       line 147, "pan.___", state 1807, "(1)"
-       line 151, "pan.___", state 1819, "(1)"
-       line 510, "pan.___", state 1845, "-end-"
-       (158 of 1845 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 571, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 131 seconds
-pan: rate 30755.659 states/second
-pan: avg transition delay 1.866e-06 usec
-cp .input.spin urcu_free_nested.spin.input
-cp .input.spin.trail urcu_free_nested.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.spin.input
deleted file mode 100644 (file)
index 18f99c4..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_nested.spin.input.trail
deleted file mode 100644 (file)
index 2cefe6b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:0:2679
-5:3:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.log
deleted file mode 100644 (file)
index c722840..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-spin: line 291 "pan.___", Error: syntax error  saw 'operator: ='
-spin: line 291 "pan.___", Error: syntax error  saw 'operator: ='
-spin: 2 error(s) - aborting
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 1346c4e..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 3d2a95e..0000000
+++ /dev/null
@@ -1,2082 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:3537
-2:3:3489
-3:3:3492
-4:3:3492
-5:3:3495
-6:3:3503
-7:3:3503
-8:3:3506
-9:3:3512
-10:3:3516
-11:3:3516
-12:3:3519
-13:3:3527
-14:3:3531
-15:3:3532
-16:0:3537
-17:3:3534
-18:0:3537
-19:2:1310
-20:0:3537
-21:2:1316
-22:0:3537
-23:2:1317
-24:0:3537
-25:2:1318
-26:2:1322
-27:2:1323
-28:2:1331
-29:2:1332
-30:2:1336
-31:2:1337
-32:2:1345
-33:2:1350
-34:2:1354
-35:2:1355
-36:2:1362
-37:2:1363
-38:2:1374
-39:2:1375
-40:2:1376
-41:2:1387
-42:2:1392
-43:2:1393
-44:0:3537
-45:2:1405
-46:2:1406
-47:0:3537
-48:2:1410
-49:2:1414
-50:2:1415
-51:2:1423
-52:2:1424
-53:2:1428
-54:2:1429
-55:2:1437
-56:2:1442
-57:2:1443
-58:2:1454
-59:2:1455
-60:2:1466
-61:2:1467
-62:2:1468
-63:2:1479
-64:2:1484
-65:2:1485
-66:0:3537
-67:2:1497
-68:0:3537
-69:2:1498
-70:0:3537
-71:2:1508
-72:0:3537
-73:2:1509
-74:0:3537
-75:2:1510
-76:2:1514
-77:2:1515
-78:2:1523
-79:2:1524
-80:2:1528
-81:2:1529
-82:2:1537
-83:2:1542
-84:2:1546
-85:2:1547
-86:2:1554
-87:2:1555
-88:2:1566
-89:2:1567
-90:2:1568
-91:2:1579
-92:2:1584
-93:2:1585
-94:0:3537
-95:2:1600
-96:0:3537
-97:2:1601
-98:2:1605
-99:2:1606
-100:2:1614
-101:2:1615
-102:2:1619
-103:2:1620
-104:2:1628
-105:2:1633
-106:2:1637
-107:2:1638
-108:2:1645
-109:2:1646
-110:2:1657
-111:2:1658
-112:2:1659
-113:2:1670
-114:2:1675
-115:2:1676
-116:0:3537
-117:2:1691
-118:0:3537
-119:2:1696
-120:2:1700
-121:2:1701
-122:2:1709
-123:2:1710
-124:2:1714
-125:2:1715
-126:2:1723
-127:2:1728
-128:2:1732
-129:2:1733
-130:2:1740
-131:2:1741
-132:2:1752
-133:2:1753
-134:2:1754
-135:2:1765
-136:2:1770
-137:2:1771
-138:0:3537
-139:2:1790
-140:0:3537
-141:2:1791
-142:2:1795
-143:2:1796
-144:2:1804
-145:2:1805
-146:2:1809
-147:2:1810
-148:2:1818
-149:2:1823
-150:2:1827
-151:2:1828
-152:2:1835
-153:2:1836
-154:2:1847
-155:2:1848
-156:2:1849
-157:2:1860
-158:2:1865
-159:2:1866
-160:0:3537
-161:2:1878
-162:0:3537
-163:2:1881
-164:2:1882
-165:2:1894
-166:2:1895
-167:2:1899
-168:2:1900
-169:2:1908
-170:2:1913
-171:2:1917
-172:2:1918
-173:2:1925
-174:2:1926
-175:2:1937
-176:2:1938
-177:2:1939
-178:2:1950
-179:2:1955
-180:2:1956
-181:0:3537
-182:2:1968
-183:0:3537
-184:2:1969
-185:0:3537
-186:2:1970
-187:0:3537
-188:2:1971
-189:0:3537
-190:2:1972
-191:2:1976
-192:2:1977
-193:2:1985
-194:2:1986
-195:2:1990
-196:2:1991
-197:2:1999
-198:2:2004
-199:2:2008
-200:2:2009
-201:2:2016
-202:2:2017
-203:2:2028
-204:2:2029
-205:2:2030
-206:2:2041
-207:2:2046
-208:2:2047
-209:0:3537
-210:2:2341
-211:0:3537
-212:2:2437
-213:0:3537
-214:2:2438
-215:0:3537
-216:2:2442
-217:0:3537
-218:2:2448
-219:2:2452
-220:2:2453
-221:2:2461
-222:2:2462
-223:2:2466
-224:2:2467
-225:2:2475
-226:2:2480
-227:2:2484
-228:2:2485
-229:2:2492
-230:2:2493
-231:2:2504
-232:2:2505
-233:2:2506
-234:2:2517
-235:2:2522
-236:2:2523
-237:0:3537
-238:2:2535
-239:0:3537
-240:2:2536
-241:2:2540
-242:2:2541
-243:2:2549
-244:2:2550
-245:2:2554
-246:2:2555
-247:2:2563
-248:2:2568
-249:2:2572
-250:2:2573
-251:2:2580
-252:2:2581
-253:2:2592
-254:2:2593
-255:2:2594
-256:2:2605
-257:2:2610
-258:2:2611
-259:0:3537
-260:2:2623
-261:0:3537
-262:2:2626
-263:2:2627
-264:2:2639
-265:2:2640
-266:2:2644
-267:2:2645
-268:2:2653
-269:2:2658
-270:2:2662
-271:2:2663
-272:2:2670
-273:2:2671
-274:2:2682
-275:2:2683
-276:2:2684
-277:2:2695
-278:2:2700
-279:2:2701
-280:0:3537
-281:2:2713
-282:0:3537
-283:2:2714
-284:0:3537
-285:2:2715
-286:0:3537
-287:2:2716
-288:0:3537
-289:2:2717
-290:2:2721
-291:2:2722
-292:2:2730
-293:2:2731
-294:2:2735
-295:2:2736
-296:2:2744
-297:2:2749
-298:2:2753
-299:2:2754
-300:2:2761
-301:2:2762
-302:2:2773
-303:2:2774
-304:2:2775
-305:2:2786
-306:2:2791
-307:2:2792
-308:0:3537
-309:2:3086
-310:0:3537
-311:2:3182
-312:0:3537
-313:2:3183
-314:0:3537
-315:2:3187
-316:0:3537
-317:2:3193
-318:0:3537
-319:2:3194
-320:2:3198
-321:2:3199
-322:2:3207
-323:2:3208
-324:2:3212
-325:2:3213
-326:2:3221
-327:2:3226
-328:2:3230
-329:2:3231
-330:2:3238
-331:2:3239
-332:2:3250
-333:2:3251
-334:2:3252
-335:2:3263
-336:2:3268
-337:2:3269
-338:0:3537
-339:2:3284
-340:0:3537
-341:2:3285
-342:2:3289
-343:2:3290
-344:2:3298
-345:2:3299
-346:2:3303
-347:2:3304
-348:2:3312
-349:2:3317
-350:2:3321
-351:2:3322
-352:2:3329
-353:2:3330
-354:2:3341
-355:2:3342
-356:2:3343
-357:2:3354
-358:2:3359
-359:2:3360
-360:0:3537
-361:2:3375
-362:0:3537
-363:2:3380
-364:2:3384
-365:2:3385
-366:2:3393
-367:2:3394
-368:2:3398
-369:2:3399
-370:2:3407
-371:2:3412
-372:2:3416
-373:2:3417
-374:2:3424
-375:2:3425
-376:2:3436
-377:2:3437
-378:2:3438
-379:2:3449
-380:2:3454
-381:2:3455
-382:0:3537
-383:2:3474
-384:0:3537
-385:2:3475
-386:0:3537
-387:2:1317
-388:0:3537
-389:2:1318
-390:2:1322
-391:2:1323
-392:2:1331
-393:2:1332
-394:2:1336
-395:2:1337
-396:2:1345
-397:2:1350
-398:2:1354
-399:2:1355
-400:2:1362
-401:2:1363
-402:2:1374
-403:2:1375
-404:2:1376
-405:2:1387
-406:2:1392
-407:2:1393
-408:0:3537
-409:2:1405
-410:2:1406
-411:0:3537
-412:2:1410
-413:2:1414
-414:2:1415
-415:2:1423
-416:2:1424
-417:2:1428
-418:2:1429
-419:2:1437
-420:2:1442
-421:2:1443
-422:2:1454
-423:2:1455
-424:2:1466
-425:2:1467
-426:2:1468
-427:2:1479
-428:2:1484
-429:2:1485
-430:0:3537
-431:2:1497
-432:0:3537
-433:2:1498
-434:0:3537
-435:2:1508
-436:0:3537
-437:2:1509
-438:0:3537
-439:2:1510
-440:2:1514
-441:2:1515
-442:2:1523
-443:2:1524
-444:2:1528
-445:2:1529
-446:2:1537
-447:2:1542
-448:2:1546
-449:2:1547
-450:2:1554
-451:2:1555
-452:2:1566
-453:2:1567
-454:2:1568
-455:2:1579
-456:2:1584
-457:2:1585
-458:0:3537
-459:2:1600
-460:0:3537
-461:2:1601
-462:2:1605
-463:2:1606
-464:2:1614
-465:2:1615
-466:2:1619
-467:2:1620
-468:2:1628
-469:2:1633
-470:2:1637
-471:2:1638
-472:2:1645
-473:2:1646
-474:2:1657
-475:2:1658
-476:2:1659
-477:2:1670
-478:2:1675
-479:2:1676
-480:0:3537
-481:2:1691
-482:0:3537
-483:2:1696
-484:2:1700
-485:2:1701
-486:2:1709
-487:2:1710
-488:2:1714
-489:2:1715
-490:2:1723
-491:2:1728
-492:2:1732
-493:2:1733
-494:2:1740
-495:2:1741
-496:2:1752
-497:2:1753
-498:2:1754
-499:2:1765
-500:2:1770
-501:2:1771
-502:0:3537
-503:2:1790
-504:0:3537
-505:2:1791
-506:2:1795
-507:2:1796
-508:2:1804
-509:2:1805
-510:2:1809
-511:2:1810
-512:2:1818
-513:2:1823
-514:2:1827
-515:2:1828
-516:2:1835
-517:2:1836
-518:2:1847
-519:2:1848
-520:2:1849
-521:2:1860
-522:2:1865
-523:2:1866
-524:0:3537
-525:2:1878
-526:0:3537
-527:2:1881
-528:2:1882
-529:2:1894
-530:2:1895
-531:2:1899
-532:2:1900
-533:2:1908
-534:2:1913
-535:2:1917
-536:2:1918
-537:2:1925
-538:2:1926
-539:2:1937
-540:2:1938
-541:2:1939
-542:2:1950
-543:2:1955
-544:2:1956
-545:0:3537
-546:2:1968
-547:0:3537
-548:2:1969
-549:0:3537
-550:2:1970
-551:0:3537
-552:2:1971
-553:0:3537
-554:2:1972
-555:2:1976
-556:2:1977
-557:2:1985
-558:2:1986
-559:2:1990
-560:2:1991
-561:2:1999
-562:2:2004
-563:2:2008
-564:2:2009
-565:2:2016
-566:2:2017
-567:2:2028
-568:2:2029
-569:2:2030
-570:2:2041
-571:2:2046
-572:2:2047
-573:0:3537
-574:2:2341
-575:0:3537
-576:2:2437
-577:0:3537
-578:2:2438
-579:0:3537
-580:2:2442
-581:0:3537
-582:2:2448
-583:2:2452
-584:2:2453
-585:2:2461
-586:2:2462
-587:2:2466
-588:2:2467
-589:2:2475
-590:2:2480
-591:2:2484
-592:2:2485
-593:2:2492
-594:2:2493
-595:2:2504
-596:2:2505
-597:2:2506
-598:2:2517
-599:2:2522
-600:2:2523
-601:0:3537
-602:2:2535
-603:0:3537
-604:2:2536
-605:2:2540
-606:2:2541
-607:2:2549
-608:2:2550
-609:2:2554
-610:2:2555
-611:2:2563
-612:2:2568
-613:2:2572
-614:2:2573
-615:2:2580
-616:2:2581
-617:2:2592
-618:2:2593
-619:2:2594
-620:2:2605
-621:2:2610
-622:2:2611
-623:0:3537
-624:2:2623
-625:0:3537
-626:2:2626
-627:2:2627
-628:2:2639
-629:2:2640
-630:2:2644
-631:2:2645
-632:2:2653
-633:2:2658
-634:2:2662
-635:2:2663
-636:2:2670
-637:2:2671
-638:2:2682
-639:2:2683
-640:2:2684
-641:2:2695
-642:2:2700
-643:2:2701
-644:0:3537
-645:2:2713
-646:0:3537
-647:2:2714
-648:0:3537
-649:2:2715
-650:0:3537
-651:2:2716
-652:0:3537
-653:2:2717
-654:2:2721
-655:2:2722
-656:2:2730
-657:2:2731
-658:2:2735
-659:2:2736
-660:2:2744
-661:2:2749
-662:2:2753
-663:2:2754
-664:2:2761
-665:2:2762
-666:2:2773
-667:2:2774
-668:2:2775
-669:2:2786
-670:2:2791
-671:2:2792
-672:0:3537
-673:2:3086
-674:0:3537
-675:2:3182
-676:0:3537
-677:2:3183
-678:0:3537
-679:2:3187
-680:0:3537
-681:2:3193
-682:0:3537
-683:2:3194
-684:2:3198
-685:2:3199
-686:2:3207
-687:2:3208
-688:2:3212
-689:2:3213
-690:2:3221
-691:2:3226
-692:2:3230
-693:2:3231
-694:2:3238
-695:2:3239
-696:2:3250
-697:2:3251
-698:2:3252
-699:2:3263
-700:2:3268
-701:2:3269
-702:0:3537
-703:2:3284
-704:0:3537
-705:2:3285
-706:2:3289
-707:2:3290
-708:2:3298
-709:2:3299
-710:2:3303
-711:2:3304
-712:2:3312
-713:2:3317
-714:2:3321
-715:2:3322
-716:2:3329
-717:2:3330
-718:2:3341
-719:2:3342
-720:2:3343
-721:2:3354
-722:2:3359
-723:2:3360
-724:0:3537
-725:2:3375
-726:0:3537
-727:2:3380
-728:2:3384
-729:2:3385
-730:2:3393
-731:2:3394
-732:2:3398
-733:2:3399
-734:2:3407
-735:2:3412
-736:2:3416
-737:2:3417
-738:2:3424
-739:2:3425
-740:2:3436
-741:2:3437
-742:2:3438
-743:2:3449
-744:2:3454
-745:2:3455
-746:0:3537
-747:2:3474
-748:0:3537
-749:2:3475
-750:0:3537
-751:2:1317
-752:0:3537
-753:2:1318
-754:2:1322
-755:2:1323
-756:2:1331
-757:2:1332
-758:2:1336
-759:2:1337
-760:2:1345
-761:2:1350
-762:2:1354
-763:2:1355
-764:2:1362
-765:2:1363
-766:2:1374
-767:2:1375
-768:2:1376
-769:2:1387
-770:2:1392
-771:2:1393
-772:0:3537
-773:2:1405
-774:2:1406
-775:0:3537
-776:2:1410
-777:2:1414
-778:2:1415
-779:2:1423
-780:2:1424
-781:2:1428
-782:2:1429
-783:2:1437
-784:2:1442
-785:2:1443
-786:2:1454
-787:2:1455
-788:2:1466
-789:2:1467
-790:2:1468
-791:2:1479
-792:2:1484
-793:2:1485
-794:0:3537
-795:2:1497
-796:0:3537
-797:2:1498
-798:0:3537
-799:2:1508
-800:0:3537
-801:2:1509
-802:0:3537
-803:2:1510
-804:2:1514
-805:2:1515
-806:2:1523
-807:2:1524
-808:2:1528
-809:2:1529
-810:2:1537
-811:2:1542
-812:2:1546
-813:2:1547
-814:2:1554
-815:2:1555
-816:2:1566
-817:2:1567
-818:2:1568
-819:2:1579
-820:2:1584
-821:2:1585
-822:0:3537
-823:2:1600
-824:0:3537
-825:2:1601
-826:2:1605
-827:2:1606
-828:2:1614
-829:2:1615
-830:2:1619
-831:2:1620
-832:2:1628
-833:2:1633
-834:2:1637
-835:2:1638
-836:2:1645
-837:2:1646
-838:2:1657
-839:2:1658
-840:2:1659
-841:2:1670
-842:2:1675
-843:2:1676
-844:0:3537
-845:2:1691
-846:0:3537
-847:2:1696
-848:2:1700
-849:2:1701
-850:2:1709
-851:2:1710
-852:2:1714
-853:2:1715
-854:2:1723
-855:2:1728
-856:2:1732
-857:2:1733
-858:2:1740
-859:2:1741
-860:2:1752
-861:2:1753
-862:2:1754
-863:2:1765
-864:2:1770
-865:2:1771
-866:0:3537
-867:2:1790
-868:0:3537
-869:2:1791
-870:2:1795
-871:2:1796
-872:2:1804
-873:2:1805
-874:2:1809
-875:2:1810
-876:2:1818
-877:2:1823
-878:2:1827
-879:2:1828
-880:2:1835
-881:2:1836
-882:2:1847
-883:2:1848
-884:2:1849
-885:2:1860
-886:2:1865
-887:2:1866
-888:0:3537
-889:2:1878
-890:0:3537
-891:2:1881
-892:2:1882
-893:2:1894
-894:2:1895
-895:2:1899
-896:2:1900
-897:2:1908
-898:2:1913
-899:2:1917
-900:2:1918
-901:2:1925
-902:2:1926
-903:2:1937
-904:2:1938
-905:2:1939
-906:2:1950
-907:2:1955
-908:2:1956
-909:0:3537
-910:2:1968
-911:0:3537
-912:2:1969
-913:0:3537
-914:2:1970
-915:0:3537
-916:2:1971
-917:0:3537
-918:2:1972
-919:2:1976
-920:2:1977
-921:2:1985
-922:2:1986
-923:2:1990
-924:2:1991
-925:2:1999
-926:2:2004
-927:2:2008
-928:2:2009
-929:2:2016
-930:2:2017
-931:2:2028
-932:2:2029
-933:2:2030
-934:2:2041
-935:2:2046
-936:2:2047
-937:0:3537
-938:2:2341
-939:0:3537
-940:2:2437
-941:0:3537
-942:2:2438
-943:0:3537
-944:2:2442
-945:0:3537
-946:2:2448
-947:2:2452
-948:2:2453
-949:2:2461
-950:2:2462
-951:2:2466
-952:2:2467
-953:2:2475
-954:2:2480
-955:2:2484
-956:2:2485
-957:2:2492
-958:2:2493
-959:2:2504
-960:2:2505
-961:2:2506
-962:2:2517
-963:2:2522
-964:2:2523
-965:0:3537
-966:2:2535
-967:0:3537
-968:2:2536
-969:2:2540
-970:2:2541
-971:2:2549
-972:2:2550
-973:2:2554
-974:2:2555
-975:2:2563
-976:2:2568
-977:2:2572
-978:2:2573
-979:2:2580
-980:2:2581
-981:2:2592
-982:2:2593
-983:2:2594
-984:2:2605
-985:2:2610
-986:2:2611
-987:0:3537
-988:2:2623
-989:0:3537
-990:2:2626
-991:2:2627
-992:2:2639
-993:2:2640
-994:2:2644
-995:2:2645
-996:2:2653
-997:2:2658
-998:2:2662
-999:2:2663
-1000:2:2670
-1001:2:2671
-1002:2:2682
-1003:2:2683
-1004:2:2684
-1005:2:2695
-1006:2:2700
-1007:2:2701
-1008:0:3537
-1009:2:2713
-1010:0:3537
-1011:2:2714
-1012:0:3537
-1013:2:2715
-1014:0:3537
-1015:2:2716
-1016:0:3537
-1017:2:2717
-1018:2:2721
-1019:2:2722
-1020:2:2730
-1021:2:2731
-1022:2:2735
-1023:2:2736
-1024:2:2744
-1025:2:2749
-1026:2:2753
-1027:2:2754
-1028:2:2761
-1029:2:2762
-1030:2:2773
-1031:2:2774
-1032:2:2775
-1033:2:2786
-1034:2:2791
-1035:2:2792
-1036:0:3537
-1037:2:3086
-1038:0:3537
-1039:2:3182
-1040:0:3537
-1041:2:3183
-1042:0:3537
-1043:2:3187
-1044:0:3537
-1045:2:3193
-1046:0:3537
-1047:2:3194
-1048:2:3198
-1049:2:3199
-1050:2:3207
-1051:2:3208
-1052:2:3212
-1053:2:3213
-1054:2:3221
-1055:2:3226
-1056:2:3230
-1057:2:3231
-1058:2:3238
-1059:2:3239
-1060:2:3250
-1061:2:3251
-1062:2:3252
-1063:2:3263
-1064:2:3268
-1065:2:3269
-1066:0:3537
-1067:2:3284
-1068:0:3537
-1069:2:3285
-1070:2:3289
-1071:2:3290
-1072:2:3298
-1073:2:3299
-1074:2:3303
-1075:2:3304
-1076:2:3312
-1077:2:3317
-1078:2:3321
-1079:2:3322
-1080:2:3329
-1081:2:3330
-1082:2:3341
-1083:2:3342
-1084:2:3343
-1085:2:3354
-1086:2:3359
-1087:2:3360
-1088:0:3537
-1089:2:3375
-1090:0:3537
-1091:2:3380
-1092:2:3384
-1093:2:3385
-1094:2:3393
-1095:2:3394
-1096:2:3398
-1097:2:3399
-1098:2:3407
-1099:2:3412
-1100:2:3416
-1101:2:3417
-1102:2:3424
-1103:2:3425
-1104:2:3436
-1105:2:3437
-1106:2:3438
-1107:2:3449
-1108:2:3454
-1109:2:3455
-1110:0:3537
-1111:2:3474
-1112:0:3537
-1113:2:3475
-1114:0:3537
-1115:2:1317
-1116:0:3537
-1117:2:1318
-1118:2:1322
-1119:2:1323
-1120:2:1331
-1121:2:1332
-1122:2:1336
-1123:2:1337
-1124:2:1345
-1125:2:1350
-1126:2:1354
-1127:2:1355
-1128:2:1362
-1129:2:1363
-1130:2:1374
-1131:2:1375
-1132:2:1376
-1133:2:1387
-1134:2:1392
-1135:2:1393
-1136:0:3537
-1137:2:1405
-1138:2:1406
-1139:0:3537
-1140:2:1410
-1141:2:1414
-1142:2:1415
-1143:2:1423
-1144:2:1424
-1145:2:1428
-1146:2:1429
-1147:2:1437
-1148:2:1442
-1149:2:1443
-1150:2:1454
-1151:2:1455
-1152:2:1466
-1153:2:1467
-1154:2:1468
-1155:2:1479
-1156:2:1484
-1157:2:1485
-1158:0:3537
-1159:2:1497
-1160:0:3537
-1161:2:1498
-1162:0:3537
-1163:2:1508
-1164:0:3537
-1165:2:1509
-1166:0:3537
-1167:2:1510
-1168:2:1514
-1169:2:1515
-1170:2:1523
-1171:2:1524
-1172:2:1528
-1173:2:1529
-1174:2:1537
-1175:2:1542
-1176:2:1546
-1177:2:1547
-1178:2:1554
-1179:2:1555
-1180:2:1566
-1181:2:1567
-1182:2:1568
-1183:2:1579
-1184:2:1584
-1185:2:1585
-1186:0:3537
-1187:2:1600
-1188:0:3537
-1189:2:1601
-1190:2:1605
-1191:2:1606
-1192:2:1614
-1193:2:1615
-1194:2:1619
-1195:2:1620
-1196:2:1628
-1197:2:1633
-1198:2:1637
-1199:2:1638
-1200:2:1645
-1201:2:1646
-1202:2:1657
-1203:2:1658
-1204:2:1659
-1205:2:1670
-1206:2:1675
-1207:2:1676
-1208:0:3537
-1209:2:1691
-1210:0:3537
-1211:2:1696
-1212:2:1700
-1213:2:1701
-1214:2:1709
-1215:2:1710
-1216:2:1714
-1217:2:1715
-1218:2:1723
-1219:2:1728
-1220:2:1732
-1221:2:1733
-1222:2:1740
-1223:2:1741
-1224:2:1752
-1225:2:1753
-1226:2:1754
-1227:2:1765
-1228:2:1770
-1229:2:1771
-1230:0:3537
-1231:2:1790
-1232:0:3537
-1233:2:1791
-1234:2:1795
-1235:2:1796
-1236:2:1804
-1237:2:1805
-1238:2:1809
-1239:2:1810
-1240:2:1818
-1241:2:1823
-1242:2:1827
-1243:2:1828
-1244:2:1835
-1245:2:1836
-1246:2:1847
-1247:2:1848
-1248:2:1849
-1249:2:1860
-1250:2:1865
-1251:2:1866
-1252:0:3537
-1253:2:1878
-1254:0:3537
-1255:2:1881
-1256:2:1882
-1257:2:1894
-1258:2:1895
-1259:2:1899
-1260:2:1900
-1261:2:1908
-1262:2:1913
-1263:2:1917
-1264:2:1918
-1265:2:1925
-1266:2:1926
-1267:2:1937
-1268:2:1938
-1269:2:1939
-1270:2:1950
-1271:2:1955
-1272:2:1956
-1273:0:3537
-1274:2:1968
-1275:0:3537
-1276:2:1969
-1277:0:3537
-1278:2:1970
-1279:0:3537
-1280:2:1971
-1281:0:3537
-1282:2:1972
-1283:2:1976
-1284:2:1977
-1285:2:1985
-1286:2:1986
-1287:2:1990
-1288:2:1991
-1289:2:1999
-1290:2:2004
-1291:2:2008
-1292:2:2009
-1293:2:2016
-1294:2:2017
-1295:2:2028
-1296:2:2029
-1297:2:2030
-1298:2:2041
-1299:2:2046
-1300:2:2047
-1301:0:3537
-1302:2:2341
-1303:0:3537
-1304:2:2437
-1305:0:3537
-1306:2:2438
-1307:0:3537
-1308:2:2442
-1309:0:3537
-1310:2:2448
-1311:2:2452
-1312:2:2453
-1313:2:2461
-1314:2:2462
-1315:2:2466
-1316:2:2467
-1317:2:2475
-1318:2:2480
-1319:2:2484
-1320:2:2485
-1321:2:2492
-1322:2:2493
-1323:2:2504
-1324:2:2505
-1325:2:2506
-1326:2:2517
-1327:2:2522
-1328:2:2523
-1329:0:3537
-1330:2:2535
-1331:0:3537
-1332:2:2536
-1333:2:2540
-1334:2:2541
-1335:2:2549
-1336:2:2550
-1337:2:2554
-1338:2:2555
-1339:2:2563
-1340:2:2568
-1341:2:2572
-1342:2:2573
-1343:2:2580
-1344:2:2581
-1345:2:2592
-1346:2:2593
-1347:2:2594
-1348:2:2605
-1349:2:2610
-1350:2:2611
-1351:0:3537
-1352:2:2623
-1353:0:3537
-1354:2:2626
-1355:2:2627
-1356:2:2639
-1357:2:2640
-1358:2:2644
-1359:2:2645
-1360:2:2653
-1361:2:2658
-1362:2:2662
-1363:2:2663
-1364:2:2670
-1365:2:2671
-1366:2:2682
-1367:2:2683
-1368:2:2684
-1369:2:2695
-1370:2:2700
-1371:2:2701
-1372:0:3537
-1373:2:2713
-1374:0:3537
-1375:2:2714
-1376:0:3537
-1377:2:2715
-1378:0:3537
-1379:2:2716
-1380:0:3537
-1381:2:2717
-1382:2:2721
-1383:2:2722
-1384:2:2730
-1385:2:2731
-1386:2:2735
-1387:2:2736
-1388:2:2744
-1389:2:2749
-1390:2:2753
-1391:2:2754
-1392:2:2761
-1393:2:2762
-1394:2:2773
-1395:2:2774
-1396:2:2775
-1397:2:2786
-1398:2:2791
-1399:2:2792
-1400:0:3537
-1401:2:3086
-1402:0:3537
-1403:2:3182
-1404:0:3537
-1405:2:3183
-1406:0:3537
-1407:2:3187
-1408:0:3537
-1409:2:3193
-1410:0:3537
-1411:2:3194
-1412:2:3198
-1413:2:3199
-1414:2:3207
-1415:2:3208
-1416:2:3212
-1417:2:3213
-1418:2:3221
-1419:2:3226
-1420:2:3230
-1421:2:3231
-1422:2:3238
-1423:2:3239
-1424:2:3250
-1425:2:3251
-1426:2:3252
-1427:2:3263
-1428:2:3268
-1429:2:3269
-1430:0:3537
-1431:2:3284
-1432:0:3537
-1433:2:3285
-1434:2:3289
-1435:2:3290
-1436:2:3298
-1437:2:3299
-1438:2:3303
-1439:2:3304
-1440:2:3312
-1441:2:3317
-1442:2:3321
-1443:2:3322
-1444:2:3329
-1445:2:3330
-1446:2:3341
-1447:2:3342
-1448:2:3343
-1449:2:3354
-1450:2:3359
-1451:2:3360
-1452:0:3537
-1453:2:3375
-1454:0:3537
-1455:2:3380
-1456:2:3384
-1457:2:3385
-1458:2:3393
-1459:2:3394
-1460:2:3398
-1461:2:3399
-1462:2:3407
-1463:2:3412
-1464:2:3416
-1465:2:3417
-1466:2:3424
-1467:2:3425
-1468:2:3436
-1469:2:3437
-1470:2:3438
-1471:2:3449
-1472:2:3454
-1473:2:3455
-1474:0:3537
-1475:2:3474
-1476:0:3537
-1477:2:3475
-1478:0:3537
-1479:2:1317
-1480:0:3537
-1481:2:1318
-1482:2:1322
-1483:2:1323
-1484:2:1331
-1485:2:1332
-1486:2:1336
-1487:2:1337
-1488:2:1345
-1489:2:1350
-1490:2:1354
-1491:2:1355
-1492:2:1362
-1493:2:1363
-1494:2:1374
-1495:2:1375
-1496:2:1376
-1497:2:1387
-1498:2:1392
-1499:2:1393
-1500:0:3537
-1501:2:1405
-1502:2:1406
-1503:0:3537
-1504:2:1410
-1505:2:1414
-1506:2:1415
-1507:2:1423
-1508:2:1424
-1509:2:1428
-1510:2:1429
-1511:2:1437
-1512:2:1450
-1513:2:1451
-1514:2:1454
-1515:2:1455
-1516:2:1466
-1517:2:1467
-1518:2:1468
-1519:2:1479
-1520:2:1484
-1521:2:1487
-1522:2:1488
-1523:0:3537
-1524:2:1497
-1525:0:3537
-1526:2:1498
-1527:0:3537
-1528:2:1508
-1529:0:3537
-1530:2:1509
-1531:0:3537
-1532:2:1510
-1533:2:1514
-1534:2:1515
-1535:2:1523
-1536:2:1524
-1537:2:1528
-1538:2:1529
-1539:2:1537
-1540:2:1550
-1541:2:1551
-1542:2:1554
-1543:2:1555
-1544:2:1566
-1545:2:1567
-1546:2:1568
-1547:2:1579
-1548:2:1584
-1549:2:1587
-1550:2:1588
-1551:0:3537
-1552:2:1600
-1553:0:3537
-1554:2:1601
-1555:2:1605
-1556:2:1606
-1557:2:1614
-1558:2:1615
-1559:2:1619
-1560:2:1620
-1561:2:1628
-1562:2:1641
-1563:2:1642
-1564:2:1645
-1565:2:1646
-1566:2:1657
-1567:2:1658
-1568:2:1659
-1569:2:1670
-1570:2:1675
-1571:2:1678
-1572:2:1679
-1573:0:3537
-1574:2:1691
-1575:0:3537
-1576:2:1696
-1577:2:1700
-1578:2:1701
-1579:2:1709
-1580:2:1710
-1581:2:1714
-1582:2:1715
-1583:2:1723
-1584:2:1736
-1585:2:1737
-1586:2:1740
-1587:2:1741
-1588:2:1752
-1589:2:1753
-1590:2:1754
-1591:2:1765
-1592:2:1770
-1593:2:1773
-1594:2:1774
-1595:0:3537
-1596:2:1790
-1597:0:3537
-1598:2:1791
-1599:2:1795
-1600:2:1796
-1601:2:1804
-1602:2:1805
-1603:2:1809
-1604:2:1810
-1605:2:1818
-1606:2:1831
-1607:2:1832
-1608:2:1835
-1609:2:1836
-1610:2:1847
-1611:2:1848
-1612:2:1849
-1613:2:1860
-1614:2:1865
-1615:2:1868
-1616:2:1869
-1617:0:3537
-1618:2:1878
-1619:0:3537
-1620:2:1881
-1621:2:1882
-1622:2:1894
-1623:2:1895
-1624:2:1899
-1625:2:1900
-1626:2:1908
-1627:2:1921
-1628:2:1922
-1629:2:1925
-1630:2:1926
-1631:2:1937
-1632:2:1938
-1633:2:1939
-1634:2:1950
-1635:2:1955
-1636:2:1958
-1637:2:1959
-1638:0:3537
-1639:2:1968
-1640:0:3537
-1641:2:1969
-1642:0:3537
-1643:2:1970
-1644:0:3537
-1645:2:1971
-1646:0:3537
-1647:2:1972
-1648:2:1976
-1649:2:1977
-1650:2:1985
-1651:2:1986
-1652:2:1990
-1653:2:1991
-1654:2:1999
-1655:2:2012
-1656:2:2013
-1657:2:2016
-1658:2:2017
-1659:2:2028
-1660:2:2029
-1661:2:2030
-1662:2:2041
-1663:2:2046
-1664:2:2049
-1665:2:2050
-1666:0:3537
-1667:2:2341
-1668:0:3537
-1669:2:2437
-1670:0:3537
-1671:2:2438
-1672:0:3537
-1673:2:2442
-1674:0:3537
-1675:2:2448
-1676:2:2452
-1677:2:2453
-1678:2:2461
-1679:2:2462
-1680:2:2466
-1681:2:2467
-1682:2:2475
-1683:2:2488
-1684:2:2489
-1685:2:2492
-1686:2:2493
-1687:2:2504
-1688:2:2505
-1689:2:2506
-1690:2:2517
-1691:2:2522
-1692:2:2525
-1693:2:2526
-1694:0:3537
-1695:2:2535
-1696:0:3537
-1697:2:2536
-1698:2:2540
-1699:2:2541
-1700:2:2549
-1701:2:2550
-1702:2:2554
-1703:2:2555
-1704:2:2563
-1705:2:2576
-1706:2:2577
-1707:2:2580
-1708:2:2581
-1709:2:2592
-1710:2:2593
-1711:2:2594
-1712:2:2605
-1713:2:2610
-1714:2:2613
-1715:2:2614
-1716:0:3537
-1717:2:2623
-1718:0:3537
-1719:2:2626
-1720:2:2627
-1721:2:2639
-1722:2:2640
-1723:2:2644
-1724:2:2645
-1725:2:2653
-1726:2:2666
-1727:2:2667
-1728:2:2670
-1729:2:2671
-1730:2:2682
-1731:2:2683
-1732:2:2684
-1733:2:2695
-1734:2:2700
-1735:2:2703
-1736:2:2704
-1737:0:3537
-1738:2:2713
-1739:0:3537
-1740:2:2714
-1741:0:3537
-1742:2:2715
-1743:0:3537
-1744:2:2716
-1745:0:3537
-1746:2:2717
-1747:2:2721
-1748:2:2722
-1749:2:2730
-1750:2:2731
-1751:2:2735
-1752:2:2736
-1753:2:2744
-1754:2:2757
-1755:2:2758
-1756:2:2761
-1757:2:2762
-1758:2:2773
-1759:2:2774
-1760:2:2775
-1761:2:2786
-1762:2:2791
-1763:2:2794
-1764:2:2795
-1765:0:3537
-1766:2:3086
-1767:0:3537
-1768:2:3182
-1769:0:3537
-1770:2:3183
-1771:0:3537
-1772:2:3187
-1773:0:3537
-1774:2:3193
-1775:0:3537
-1776:2:3194
-1777:2:3198
-1778:2:3199
-1779:2:3207
-1780:2:3208
-1781:2:3212
-1782:2:3213
-1783:2:3221
-1784:2:3234
-1785:2:3235
-1786:2:3238
-1787:2:3239
-1788:2:3250
-1789:2:3251
-1790:2:3252
-1791:2:3263
-1792:2:3268
-1793:2:3271
-1794:2:3272
-1795:0:3537
-1796:2:3284
-1797:0:3537
-1798:2:3285
-1799:2:3289
-1800:2:3290
-1801:2:3298
-1802:2:3299
-1803:2:3303
-1804:2:3304
-1805:2:3312
-1806:2:3325
-1807:2:3326
-1808:2:3329
-1809:2:3330
-1810:2:3341
-1811:2:3342
-1812:2:3343
-1813:2:3354
-1814:2:3359
-1815:2:3362
-1816:2:3363
-1817:0:3537
-1818:2:3375
-1819:0:3537
-1820:2:3380
-1821:2:3384
-1822:2:3385
-1823:2:3393
-1824:2:3394
-1825:2:3398
-1826:2:3399
-1827:2:3407
-1828:2:3420
-1829:2:3421
-1830:2:3424
-1831:2:3425
-1832:2:3436
-1833:2:3437
-1834:2:3438
-1835:2:3449
-1836:2:3454
-1837:2:3457
-1838:2:3458
-1839:0:3537
-1840:2:3474
-1841:0:3537
-1842:2:3475
-1843:0:3537
-1844:2:3478
-1845:0:3537
-1846:2:3483
-1847:0:3537
-1848:1:2
-1849:0:3537
-1850:2:3484
-1851:0:3537
-1852:1:8
-1853:0:3537
-1854:2:3483
-1855:0:3537
-1856:1:9
-1857:0:3537
-1858:2:3484
-1859:0:3537
-1860:1:10
-1861:0:3537
-1862:2:3483
-1863:0:3537
-1864:1:11
-1865:0:3537
-1866:2:3484
-1867:0:3537
-1868:1:12
-1869:1:16
-1870:1:17
-1871:1:25
-1872:1:26
-1873:1:30
-1874:1:31
-1875:1:39
-1876:1:44
-1877:1:48
-1878:1:49
-1879:1:56
-1880:1:57
-1881:1:68
-1882:1:69
-1883:1:70
-1884:1:81
-1885:1:86
-1886:1:87
-1887:0:3537
-1888:2:3483
-1889:0:3537
-1890:1:99
-1891:0:3537
-1892:2:3484
-1893:0:3537
-1894:1:100
-1895:1:104
-1896:1:105
-1897:1:113
-1898:1:114
-1899:1:118
-1900:1:119
-1901:1:127
-1902:1:132
-1903:1:136
-1904:1:137
-1905:1:144
-1906:1:145
-1907:1:156
-1908:1:157
-1909:1:158
-1910:1:169
-1911:1:174
-1912:1:175
-1913:0:3537
-1914:2:3483
-1915:0:3537
-1916:1:187
-1917:0:3537
-1918:2:3484
-1919:0:3537
-1920:1:188
-1921:0:3537
-1922:2:3483
-1923:0:3537
-1924:1:189
-1925:1:193
-1926:1:194
-1927:1:202
-1928:1:203
-1929:1:207
-1930:1:208
-1931:1:216
-1932:1:221
-1933:1:225
-1934:1:226
-1935:1:233
-1936:1:234
-1937:1:245
-1938:1:246
-1939:1:247
-1940:1:258
-1941:1:263
-1942:1:264
-1943:0:3537
-1944:2:3484
-1945:0:3537
-1946:1:276
-1947:0:3537
-1948:2:3483
-1949:0:3537
-1950:1:561
-1951:0:3537
-1952:2:3484
-1953:0:3537
-1954:1:562
-1955:0:3537
-1956:2:3483
-1957:0:3537
-1958:1:11
-1959:0:3537
-1960:2:3484
-1961:0:3537
-1962:1:12
-1963:1:16
-1964:1:17
-1965:1:25
-1966:1:26
-1967:1:27
-1968:1:39
-1969:1:44
-1970:1:48
-1971:1:49
-1972:1:56
-1973:1:57
-1974:1:68
-1975:1:69
-1976:1:70
-1977:1:81
-1978:1:86
-1979:1:87
-1980:0:3537
-1981:2:3483
-1982:0:3537
-1983:1:99
-1984:0:3537
-1985:2:3484
-1986:0:3537
-1987:1:100
-1988:1:104
-1989:1:105
-1990:1:113
-1991:1:114
-1992:1:118
-1993:1:119
-1994:1:127
-1995:1:132
-1996:1:136
-1997:1:137
-1998:1:144
-1999:1:145
-2000:1:156
-2001:1:157
-2002:1:158
-2003:1:169
-2004:1:174
-2005:1:175
-2006:0:3537
-2007:2:3483
-2008:0:3537
-2009:1:279
-2010:0:3537
-2011:2:3484
-2012:0:3537
-2013:1:280
-2014:0:3537
-2015:2:3483
-2016:0:3537
-2017:1:561
-2018:0:3537
-2019:2:3484
-2020:0:3537
-2021:1:562
-2022:0:3537
-2023:2:3483
-2024:0:3537
-2025:1:567
-2026:0:3537
-2027:2:3484
-2028:0:3537
-2029:1:572
-2030:1:576
-2031:1:577
-2032:1:585
-2033:1:586
-2034:1:587
-2035:1:599
-2036:1:604
-2037:1:608
-2038:1:609
-2039:1:616
-2040:1:617
-2041:1:628
-2042:1:629
-2043:1:630
-2044:1:641
-2045:1:646
-2046:1:647
-2047:0:3537
-2048:2:3483
-2049:0:3537
-2050:1:659
-2051:0:3537
-2052:2:3484
-2053:0:3537
-2054:1:660
-2055:1:664
-2056:1:665
-2057:1:673
-2058:1:674
-2059:1:678
-2060:1:679
-2061:1:687
-2062:1:692
-2063:1:696
-2064:1:697
-2065:1:704
-2066:1:705
-2067:1:716
-2068:1:717
-2069:1:718
-2070:1:729
-2071:1:734
-2072:1:735
-2073:0:3537
-2074:2:3483
-2075:0:3537
-2076:1:747
-2077:0:3535
-2078:2:3484
-2079:0:3541
-2080:1:1280
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 6a46f80..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 567)
-Depth=    5645 States=    1e+06 Transitions= 1.47e+07 Memory=   527.287        t=   27.1 R=   4e+04
-pan: claim violated! (at depth 1736)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 5645, errors: 1
-  1039881 states, stored
- 14441478 states, matched
- 15481359 transitions (= stored+matched)
- 57000435 atomic steps
-hash conflicts:   2892596 (resolved)
-
-Stats on memory usage (in Megabytes):
-   83.303      equivalent memory usage for states (stored*(State-vector + overhead))
-   64.050      actual memory usage for states (compression: 76.89%)
-               state-vector as stored = 37 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  529.729      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 289, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 61, "(1)"
-       line 308, "pan.___", state 91, "(1)"
-       line 289, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 149, "(1)"
-       line 308, "pan.___", state 179, "(1)"
-       line 289, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 238, "(1)"
-       line 308, "pan.___", state 268, "(1)"
-       line 159, "pan.___", state 289, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 291, "(1)"
-       line 163, "pan.___", state 298, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 300, "(1)"
-       line 163, "pan.___", state 301, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 301, "else"
-       line 161, "pan.___", state 306, "((j<1))"
-       line 161, "pan.___", state 306, "((j>=1))"
-       line 167, "pan.___", state 311, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 313, "(1)"
-       line 167, "pan.___", state 314, "((cache_dirty_generation_ptr.bitfield&(1<<_pid)))"
-       line 167, "pan.___", state 314, "else"
-       line 177, "pan.___", state 319, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 177, "pan.___", state 319, "else"
-       line 159, "pan.___", state 324, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 326, "(1)"
-       line 163, "pan.___", state 333, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 163, "pan.___", state 335, "(1)"
-       line 163, "pan.___", state 336, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 163, "pan.___", state 336, "else"
-       line 161, "pan.___", state 341, "((j<1))"
-       line 161, "pan.___", state 341, "((j>=1))"
-       line 167, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 348, "(1)"
-       line 167, "pan.___", state 349, "((cache_dirty_generation_ptr.bitfield&(1<<i)))"
-       line 167, "pan.___", state 349, "else"
-       line 177, "pan.___", state 354, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 177, "pan.___", state 354, "else"
-       line 200, "pan.___", state 358, "((i<1))"
-       line 200, "pan.___", state 358, "((i>=1))"
-       line 159, "pan.___", state 363, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 365, "(1)"
-       line 163, "pan.___", state 372, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 374, "(1)"
-       line 163, "pan.___", state 375, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 375, "else"
-       line 161, "pan.___", state 380, "((j<1))"
-       line 161, "pan.___", state 380, "((j>=1))"
-       line 167, "pan.___", state 385, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 387, "(1)"
-       line 167, "pan.___", state 388, "((cache_dirty_generation_ptr.bitfield&(1<<_pid)))"
-       line 167, "pan.___", state 388, "else"
-       line 177, "pan.___", state 393, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 177, "pan.___", state 393, "else"
-       line 289, "pan.___", state 408, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 440, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 453, "(1)"
-       line 308, "pan.___", state 483, "(1)"
-       line 289, "pan.___", state 496, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 541, "(1)"
-       line 308, "pan.___", state 571, "(1)"
-       line 289, "pan.___", state 584, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 629, "(1)"
-       line 308, "pan.___", state 659, "(1)"
-       line 159, "pan.___", state 674, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 676, "(1)"
-       line 163, "pan.___", state 683, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 685, "(1)"
-       line 163, "pan.___", state 686, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 686, "else"
-       line 161, "pan.___", state 691, "((j<1))"
-       line 161, "pan.___", state 691, "((j>=1))"
-       line 167, "pan.___", state 696, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 698, "(1)"
-       line 167, "pan.___", state 699, "((cache_dirty_generation_ptr.bitfield&(1<<_pid)))"
-       line 167, "pan.___", state 699, "else"
-       line 177, "pan.___", state 704, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 177, "pan.___", state 704, "else"
-       line 159, "pan.___", state 709, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 711, "(1)"
-       line 163, "pan.___", state 718, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 163, "pan.___", state 720, "(1)"
-       line 163, "pan.___", state 721, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 163, "pan.___", state 721, "else"
-       line 161, "pan.___", state 726, "((j<1))"
-       line 161, "pan.___", state 726, "((j>=1))"
-       line 167, "pan.___", state 731, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 733, "(1)"
-       line 167, "pan.___", state 734, "((cache_dirty_generation_ptr.bitfield&(1<<i)))"
-       line 167, "pan.___", state 734, "else"
-       line 177, "pan.___", state 739, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 177, "pan.___", state 739, "else"
-       line 200, "pan.___", state 743, "((i<1))"
-       line 200, "pan.___", state 743, "((i>=1))"
-       line 159, "pan.___", state 748, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 750, "(1)"
-       line 163, "pan.___", state 757, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 759, "(1)"
-       line 163, "pan.___", state 760, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 760, "else"
-       line 161, "pan.___", state 765, "((j<1))"
-       line 161, "pan.___", state 765, "((j>=1))"
-       line 167, "pan.___", state 770, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 772, "(1)"
-       line 167, "pan.___", state 773, "((cache_dirty_generation_ptr.bitfield&(1<<_pid)))"
-       line 167, "pan.___", state 773, "else"
-       line 177, "pan.___", state 778, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 177, "pan.___", state 778, "else"
-       line 289, "pan.___", state 788, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 820, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 833, "(1)"
-       line 308, "pan.___", state 863, "(1)"
-       line 289, "pan.___", state 884, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 916, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 929, "(1)"
-       line 308, "pan.___", state 959, "(1)"
-       line 434, "pan.___", state 972, "-end-"
-       (95 of 972 states)
-unreached in proctype urcu_writer
-       line 289, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 20, "(1)"
-       line 293, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 34, "(1)"
-       line 293, "pan.___", state 35, "(1)"
-       line 293, "pan.___", state 35, "(1)"
-       line 291, "pan.___", state 40, "((i<1))"
-       line 291, "pan.___", state 40, "((i>=1))"
-       line 298, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 59, "(1)"
-       line 299, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 60, "else"
-       line 299, "pan.___", state 63, "(1)"
-       line 299, "pan.___", state 64, "(1)"
-       line 299, "pan.___", state 64, "(1)"
-       line 303, "pan.___", state 72, "(1)"
-       line 303, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 73, "else"
-       line 303, "pan.___", state 76, "(1)"
-       line 303, "pan.___", state 77, "(1)"
-       line 303, "pan.___", state 77, "(1)"
-       line 301, "pan.___", state 82, "((i<1))"
-       line 301, "pan.___", state 82, "((i>=1))"
-       line 308, "pan.___", state 89, "(1)"
-       line 308, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 90, "else"
-       line 308, "pan.___", state 93, "(1)"
-       line 308, "pan.___", state 94, "(1)"
-       line 308, "pan.___", state 94, "(1)"
-       line 310, "pan.___", state 97, "(1)"
-       line 310, "pan.___", state 97, "(1)"
-       line 456, "pan.___", state 101, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 454, "pan.___", state 102, "old_gen = cached_generation_ptr.val[_pid]"
-       line 289, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 112, "(1)"
-       line 293, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 126, "(1)"
-       line 293, "pan.___", state 127, "(1)"
-       line 293, "pan.___", state 127, "(1)"
-       line 299, "pan.___", state 151, "(1)"
-       line 303, "pan.___", state 164, "(1)"
-       line 310, "pan.___", state 189, "(1)"
-       line 310, "pan.___", state 189, "(1)"
-       line 468, "pan.___", state 195, "(1)"
-       line 159, "pan.___", state 205, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 214, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 240, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 262, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 279, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 288, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 301, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 319, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 333, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 351, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 364, "(1)"
-       line 303, "pan.___", state 377, "(1)"
-       line 308, "pan.___", state 394, "(1)"
-       line 289, "pan.___", state 411, "(1)"
-       line 293, "pan.___", state 423, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 441, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 467, "(1)"
-       line 308, "pan.___", state 484, "(1)"
-       line 293, "pan.___", state 514, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 532, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 558, "(1)"
-       line 308, "pan.___", state 575, "(1)"
-       line 163, "pan.___", state 597, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 610, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 623, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 645, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 662, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 671, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 684, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 710, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 712, "(1)"
-       line 289, "pan.___", state 713, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 713, "else"
-       line 289, "pan.___", state 716, "(1)"
-       line 293, "pan.___", state 724, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 726, "(1)"
-       line 293, "pan.___", state 727, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 727, "else"
-       line 293, "pan.___", state 730, "(1)"
-       line 293, "pan.___", state 731, "(1)"
-       line 293, "pan.___", state 731, "(1)"
-       line 291, "pan.___", state 736, "((i<1))"
-       line 291, "pan.___", state 736, "((i>=1))"
-       line 298, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 755, "(1)"
-       line 299, "pan.___", state 756, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 756, "else"
-       line 299, "pan.___", state 759, "(1)"
-       line 299, "pan.___", state 760, "(1)"
-       line 299, "pan.___", state 760, "(1)"
-       line 303, "pan.___", state 768, "(1)"
-       line 303, "pan.___", state 769, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 769, "else"
-       line 303, "pan.___", state 772, "(1)"
-       line 303, "pan.___", state 773, "(1)"
-       line 303, "pan.___", state 773, "(1)"
-       line 301, "pan.___", state 778, "((i<1))"
-       line 301, "pan.___", state 778, "((i>=1))"
-       line 308, "pan.___", state 785, "(1)"
-       line 308, "pan.___", state 786, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 786, "else"
-       line 308, "pan.___", state 789, "(1)"
-       line 308, "pan.___", state 790, "(1)"
-       line 308, "pan.___", state 790, "(1)"
-       line 310, "pan.___", state 793, "(1)"
-       line 310, "pan.___", state 793, "(1)"
-       line 293, "pan.___", state 822, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 840, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 866, "(1)"
-       line 308, "pan.___", state 883, "(1)"
-       line 293, "pan.___", state 910, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 928, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 954, "(1)"
-       line 308, "pan.___", state 971, "(1)"
-       line 289, "pan.___", state 988, "(1)"
-       line 293, "pan.___", state 1000, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1018, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 1044, "(1)"
-       line 308, "pan.___", state 1061, "(1)"
-       line 293, "pan.___", state 1091, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1109, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 1135, "(1)"
-       line 308, "pan.___", state 1152, "(1)"
-       line 163, "pan.___", state 1174, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1187, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1200, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 1222, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1239, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 1248, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1261, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 1287, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 1289, "(1)"
-       line 289, "pan.___", state 1290, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 1290, "else"
-       line 289, "pan.___", state 1293, "(1)"
-       line 293, "pan.___", state 1301, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 1303, "(1)"
-       line 293, "pan.___", state 1304, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 1304, "else"
-       line 293, "pan.___", state 1307, "(1)"
-       line 293, "pan.___", state 1308, "(1)"
-       line 293, "pan.___", state 1308, "(1)"
-       line 291, "pan.___", state 1313, "((i<1))"
-       line 291, "pan.___", state 1313, "((i>=1))"
-       line 298, "pan.___", state 1319, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 1332, "(1)"
-       line 299, "pan.___", state 1333, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 1333, "else"
-       line 299, "pan.___", state 1336, "(1)"
-       line 299, "pan.___", state 1337, "(1)"
-       line 299, "pan.___", state 1337, "(1)"
-       line 303, "pan.___", state 1345, "(1)"
-       line 303, "pan.___", state 1346, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 1346, "else"
-       line 303, "pan.___", state 1349, "(1)"
-       line 303, "pan.___", state 1350, "(1)"
-       line 303, "pan.___", state 1350, "(1)"
-       line 301, "pan.___", state 1355, "((i<1))"
-       line 301, "pan.___", state 1355, "((i>=1))"
-       line 308, "pan.___", state 1362, "(1)"
-       line 308, "pan.___", state 1363, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 1363, "else"
-       line 308, "pan.___", state 1366, "(1)"
-       line 308, "pan.___", state 1367, "(1)"
-       line 308, "pan.___", state 1367, "(1)"
-       line 310, "pan.___", state 1370, "(1)"
-       line 310, "pan.___", state 1370, "(1)"
-       line 163, "pan.___", state 1394, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1407, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1420, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 1442, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1459, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 1468, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1481, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 511, "pan.___", state 1509, "-end-"
-       (143 of 1509 states)
-unreached in proctype :init:
-       line 518, "pan.___", state 9, "((j<2))"
-       line 518, "pan.___", state 9, "((j>=2))"
-       line 519, "pan.___", state 20, "((j<2))"
-       line 519, "pan.___", state 20, "((j>=2))"
-       line 524, "pan.___", state 33, "((j<2))"
-       line 524, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 572, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 28.5 seconds
-pan: rate 36487.053 states/second
-pan: avg transition delay 1.8409e-06 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 899fdb4..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-#define NO_RMB
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 0aacf1a..0000000
+++ /dev/null
@@ -1,1739 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2529
-2:3:2481
-3:3:2484
-4:3:2484
-5:3:2487
-6:3:2495
-7:3:2495
-8:3:2498
-9:3:2504
-10:3:2508
-11:3:2508
-12:3:2511
-13:3:2519
-14:3:2523
-15:3:2524
-16:0:2529
-17:3:2526
-18:0:2529
-19:2:974
-20:0:2529
-21:2:980
-22:0:2529
-23:2:981
-24:0:2529
-25:2:982
-26:2:986
-27:2:987
-28:2:995
-29:2:996
-30:2:1000
-31:2:1001
-32:2:1009
-33:2:1014
-34:2:1018
-35:2:1019
-36:2:1026
-37:2:1027
-38:2:1038
-39:2:1039
-40:2:1040
-41:2:1051
-42:2:1056
-43:2:1057
-44:0:2529
-45:2:1069
-46:2:1070
-47:0:2529
-48:2:1074
-49:2:1078
-50:2:1079
-51:2:1087
-52:2:1088
-53:2:1092
-54:2:1093
-55:2:1101
-56:2:1106
-57:2:1107
-58:2:1118
-59:2:1119
-60:2:1130
-61:2:1131
-62:2:1132
-63:2:1143
-64:2:1148
-65:2:1149
-66:0:2529
-67:2:1161
-68:0:2529
-69:2:1162
-70:0:2529
-71:2:1172
-72:0:2529
-73:2:1173
-74:0:2529
-75:2:1177
-76:2:1178
-77:2:1182
-78:2:1186
-79:2:1187
-80:2:1191
-81:2:1199
-82:2:1200
-83:0:2529
-84:2:1208
-85:0:2529
-86:2:1212
-87:2:1213
-88:2:1217
-89:2:1221
-90:2:1222
-91:2:1226
-92:2:1234
-93:2:1235
-94:0:2529
-95:2:1243
-96:0:2529
-97:2:1251
-98:2:1252
-99:2:1256
-100:2:1260
-101:2:1261
-102:2:1265
-103:2:1273
-104:2:1274
-105:0:2529
-106:2:1286
-107:0:2529
-108:2:1287
-109:2:1291
-110:2:1292
-111:2:1300
-112:2:1301
-113:2:1305
-114:2:1306
-115:2:1314
-116:2:1319
-117:2:1323
-118:2:1324
-119:2:1331
-120:2:1332
-121:2:1343
-122:2:1344
-123:2:1345
-124:2:1356
-125:2:1361
-126:2:1362
-127:0:2529
-128:2:1374
-129:0:2529
-130:2:1377
-131:2:1378
-132:2:1390
-133:2:1391
-134:2:1395
-135:2:1396
-136:2:1404
-137:2:1409
-138:2:1413
-139:2:1414
-140:2:1421
-141:2:1422
-142:2:1433
-143:2:1434
-144:2:1435
-145:2:1446
-146:2:1451
-147:2:1452
-148:0:2529
-149:2:1464
-150:0:2529
-151:2:1465
-152:0:2529
-153:2:1466
-154:0:2529
-155:2:1467
-156:0:2529
-157:2:1468
-158:2:1472
-159:2:1473
-160:2:1481
-161:2:1482
-162:2:1486
-163:2:1487
-164:2:1495
-165:2:1500
-166:2:1504
-167:2:1505
-168:2:1512
-169:2:1513
-170:2:1524
-171:2:1525
-172:2:1526
-173:2:1537
-174:2:1542
-175:2:1543
-176:0:2529
-177:2:1669
-178:0:2529
-179:2:1765
-180:0:2529
-181:2:1766
-182:0:2529
-183:2:1770
-184:0:2529
-185:2:1776
-186:2:1780
-187:2:1781
-188:2:1789
-189:2:1790
-190:2:1794
-191:2:1795
-192:2:1803
-193:2:1808
-194:2:1812
-195:2:1813
-196:2:1820
-197:2:1821
-198:2:1832
-199:2:1833
-200:2:1834
-201:2:1845
-202:2:1850
-203:2:1851
-204:0:2529
-205:2:1863
-206:0:2529
-207:2:1864
-208:2:1868
-209:2:1869
-210:2:1877
-211:2:1878
-212:2:1882
-213:2:1883
-214:2:1891
-215:2:1896
-216:2:1900
-217:2:1901
-218:2:1908
-219:2:1909
-220:2:1920
-221:2:1921
-222:2:1922
-223:2:1933
-224:2:1938
-225:2:1939
-226:0:2529
-227:2:1951
-228:0:2529
-229:2:1954
-230:2:1955
-231:2:1967
-232:2:1968
-233:2:1972
-234:2:1973
-235:2:1981
-236:2:1986
-237:2:1990
-238:2:1991
-239:2:1998
-240:2:1999
-241:2:2010
-242:2:2011
-243:2:2012
-244:2:2023
-245:2:2028
-246:2:2029
-247:0:2529
-248:2:2041
-249:0:2529
-250:2:2042
-251:0:2529
-252:2:2043
-253:0:2529
-254:2:2044
-255:0:2529
-256:2:2045
-257:2:2049
-258:2:2050
-259:2:2058
-260:2:2059
-261:2:2063
-262:2:2064
-263:2:2072
-264:2:2077
-265:2:2081
-266:2:2082
-267:2:2089
-268:2:2090
-269:2:2101
-270:2:2102
-271:2:2103
-272:2:2114
-273:2:2119
-274:2:2120
-275:0:2529
-276:2:2246
-277:0:2529
-278:2:2342
-279:0:2529
-280:2:2343
-281:0:2529
-282:2:2347
-283:0:2529
-284:2:2353
-285:0:2529
-286:2:2357
-287:2:2358
-288:2:2362
-289:2:2366
-290:2:2367
-291:2:2371
-292:2:2379
-293:2:2380
-294:0:2529
-295:2:2388
-296:0:2529
-297:2:2392
-298:2:2393
-299:2:2397
-300:2:2401
-301:2:2402
-302:2:2406
-303:2:2414
-304:2:2415
-305:0:2529
-306:2:2423
-307:0:2529
-308:2:2431
-309:2:2432
-310:2:2436
-311:2:2440
-312:2:2441
-313:2:2445
-314:2:2453
-315:2:2454
-316:0:2529
-317:2:2466
-318:0:2529
-319:2:2467
-320:0:2529
-321:2:981
-322:0:2529
-323:2:982
-324:2:986
-325:2:987
-326:2:995
-327:2:996
-328:2:1000
-329:2:1001
-330:2:1009
-331:2:1014
-332:2:1018
-333:2:1019
-334:2:1026
-335:2:1027
-336:2:1038
-337:2:1039
-338:2:1040
-339:2:1051
-340:2:1056
-341:2:1057
-342:0:2529
-343:2:1069
-344:2:1070
-345:0:2529
-346:2:1074
-347:2:1078
-348:2:1079
-349:2:1087
-350:2:1088
-351:2:1092
-352:2:1093
-353:2:1101
-354:2:1106
-355:2:1107
-356:2:1118
-357:2:1119
-358:2:1130
-359:2:1131
-360:2:1132
-361:2:1143
-362:2:1148
-363:2:1149
-364:0:2529
-365:2:1161
-366:0:2529
-367:2:1162
-368:0:2529
-369:2:1172
-370:0:2529
-371:2:1173
-372:0:2529
-373:2:1177
-374:2:1178
-375:2:1182
-376:2:1186
-377:2:1187
-378:2:1191
-379:2:1199
-380:2:1200
-381:0:2529
-382:2:1208
-383:0:2529
-384:2:1212
-385:2:1213
-386:2:1217
-387:2:1221
-388:2:1222
-389:2:1226
-390:2:1234
-391:2:1235
-392:0:2529
-393:2:1243
-394:0:2529
-395:2:1251
-396:2:1252
-397:2:1256
-398:2:1260
-399:2:1261
-400:2:1265
-401:2:1273
-402:2:1274
-403:0:2529
-404:2:1286
-405:0:2529
-406:2:1287
-407:2:1291
-408:2:1292
-409:2:1300
-410:2:1301
-411:2:1305
-412:2:1306
-413:2:1314
-414:2:1319
-415:2:1323
-416:2:1324
-417:2:1331
-418:2:1332
-419:2:1343
-420:2:1344
-421:2:1345
-422:2:1356
-423:2:1361
-424:2:1362
-425:0:2529
-426:2:1374
-427:0:2529
-428:2:1377
-429:2:1378
-430:2:1390
-431:2:1391
-432:2:1395
-433:2:1396
-434:2:1404
-435:2:1409
-436:2:1413
-437:2:1414
-438:2:1421
-439:2:1422
-440:2:1433
-441:2:1434
-442:2:1435
-443:2:1446
-444:2:1451
-445:2:1452
-446:0:2529
-447:2:1464
-448:0:2529
-449:2:1465
-450:0:2529
-451:2:1466
-452:0:2529
-453:2:1467
-454:0:2529
-455:2:1468
-456:2:1472
-457:2:1473
-458:2:1481
-459:2:1482
-460:2:1486
-461:2:1487
-462:2:1495
-463:2:1500
-464:2:1504
-465:2:1505
-466:2:1512
-467:2:1513
-468:2:1524
-469:2:1525
-470:2:1526
-471:2:1537
-472:2:1542
-473:2:1543
-474:0:2529
-475:2:1669
-476:0:2529
-477:2:1765
-478:0:2529
-479:2:1766
-480:0:2529
-481:2:1770
-482:0:2529
-483:2:1776
-484:2:1780
-485:2:1781
-486:2:1789
-487:2:1790
-488:2:1794
-489:2:1795
-490:2:1803
-491:2:1808
-492:2:1812
-493:2:1813
-494:2:1820
-495:2:1821
-496:2:1832
-497:2:1833
-498:2:1834
-499:2:1845
-500:2:1850
-501:2:1851
-502:0:2529
-503:2:1863
-504:0:2529
-505:2:1864
-506:2:1868
-507:2:1869
-508:2:1877
-509:2:1878
-510:2:1882
-511:2:1883
-512:2:1891
-513:2:1896
-514:2:1900
-515:2:1901
-516:2:1908
-517:2:1909
-518:2:1920
-519:2:1921
-520:2:1922
-521:2:1933
-522:2:1938
-523:2:1939
-524:0:2529
-525:2:1951
-526:0:2529
-527:2:1954
-528:2:1955
-529:2:1967
-530:2:1968
-531:2:1972
-532:2:1973
-533:2:1981
-534:2:1986
-535:2:1990
-536:2:1991
-537:2:1998
-538:2:1999
-539:2:2010
-540:2:2011
-541:2:2012
-542:2:2023
-543:2:2028
-544:2:2029
-545:0:2529
-546:2:2041
-547:0:2529
-548:2:2042
-549:0:2529
-550:2:2043
-551:0:2529
-552:2:2044
-553:0:2529
-554:2:2045
-555:2:2049
-556:2:2050
-557:2:2058
-558:2:2059
-559:2:2063
-560:2:2064
-561:2:2072
-562:2:2077
-563:2:2081
-564:2:2082
-565:2:2089
-566:2:2090
-567:2:2101
-568:2:2102
-569:2:2103
-570:2:2114
-571:2:2119
-572:2:2120
-573:0:2529
-574:2:2246
-575:0:2529
-576:2:2342
-577:0:2529
-578:2:2343
-579:0:2529
-580:2:2347
-581:0:2529
-582:2:2353
-583:0:2529
-584:2:2357
-585:2:2358
-586:2:2362
-587:2:2366
-588:2:2367
-589:2:2371
-590:2:2379
-591:2:2380
-592:0:2529
-593:2:2388
-594:0:2529
-595:2:2392
-596:2:2393
-597:2:2397
-598:2:2401
-599:2:2402
-600:2:2406
-601:2:2414
-602:2:2415
-603:0:2529
-604:2:2423
-605:0:2529
-606:2:2431
-607:2:2432
-608:2:2436
-609:2:2440
-610:2:2441
-611:2:2445
-612:2:2453
-613:2:2454
-614:0:2529
-615:2:2466
-616:0:2529
-617:2:2467
-618:0:2529
-619:2:981
-620:0:2529
-621:2:982
-622:2:986
-623:2:987
-624:2:995
-625:2:996
-626:2:1000
-627:2:1001
-628:2:1009
-629:2:1014
-630:2:1018
-631:2:1019
-632:2:1026
-633:2:1027
-634:2:1038
-635:2:1039
-636:2:1040
-637:2:1051
-638:2:1056
-639:2:1057
-640:0:2529
-641:2:1069
-642:2:1070
-643:0:2529
-644:2:1074
-645:2:1078
-646:2:1079
-647:2:1087
-648:2:1088
-649:2:1092
-650:2:1093
-651:2:1101
-652:2:1106
-653:2:1107
-654:2:1118
-655:2:1119
-656:2:1130
-657:2:1131
-658:2:1132
-659:2:1143
-660:2:1148
-661:2:1149
-662:0:2529
-663:2:1161
-664:0:2529
-665:2:1162
-666:0:2529
-667:2:1172
-668:0:2529
-669:2:1173
-670:0:2529
-671:2:1177
-672:2:1178
-673:2:1182
-674:2:1186
-675:2:1187
-676:2:1191
-677:2:1199
-678:2:1200
-679:0:2529
-680:2:1208
-681:0:2529
-682:2:1212
-683:2:1213
-684:2:1217
-685:2:1221
-686:2:1222
-687:2:1226
-688:2:1234
-689:2:1235
-690:0:2529
-691:2:1243
-692:0:2529
-693:2:1251
-694:2:1252
-695:2:1256
-696:2:1260
-697:2:1261
-698:2:1265
-699:2:1273
-700:2:1274
-701:0:2529
-702:2:1286
-703:0:2529
-704:2:1287
-705:2:1291
-706:2:1292
-707:2:1300
-708:2:1301
-709:2:1305
-710:2:1306
-711:2:1314
-712:2:1319
-713:2:1323
-714:2:1324
-715:2:1331
-716:2:1332
-717:2:1343
-718:2:1344
-719:2:1345
-720:2:1356
-721:2:1361
-722:2:1362
-723:0:2529
-724:2:1374
-725:0:2529
-726:2:1377
-727:2:1378
-728:2:1390
-729:2:1391
-730:2:1395
-731:2:1396
-732:2:1404
-733:2:1409
-734:2:1413
-735:2:1414
-736:2:1421
-737:2:1422
-738:2:1433
-739:2:1434
-740:2:1435
-741:2:1446
-742:2:1451
-743:2:1452
-744:0:2529
-745:2:1464
-746:0:2529
-747:2:1465
-748:0:2529
-749:2:1466
-750:0:2529
-751:2:1467
-752:0:2529
-753:2:1468
-754:2:1472
-755:2:1473
-756:2:1481
-757:2:1482
-758:2:1486
-759:2:1487
-760:2:1495
-761:2:1500
-762:2:1504
-763:2:1505
-764:2:1512
-765:2:1513
-766:2:1524
-767:2:1525
-768:2:1526
-769:2:1537
-770:2:1542
-771:2:1543
-772:0:2529
-773:2:1669
-774:0:2529
-775:2:1765
-776:0:2529
-777:2:1766
-778:0:2529
-779:2:1770
-780:0:2529
-781:2:1776
-782:2:1780
-783:2:1781
-784:2:1789
-785:2:1790
-786:2:1794
-787:2:1795
-788:2:1803
-789:2:1808
-790:2:1812
-791:2:1813
-792:2:1820
-793:2:1821
-794:2:1832
-795:2:1833
-796:2:1834
-797:2:1845
-798:2:1850
-799:2:1851
-800:0:2529
-801:2:1863
-802:0:2529
-803:2:1864
-804:2:1868
-805:2:1869
-806:2:1877
-807:2:1878
-808:2:1882
-809:2:1883
-810:2:1891
-811:2:1896
-812:2:1900
-813:2:1901
-814:2:1908
-815:2:1909
-816:2:1920
-817:2:1921
-818:2:1922
-819:2:1933
-820:2:1938
-821:2:1939
-822:0:2529
-823:2:1951
-824:0:2529
-825:2:1954
-826:2:1955
-827:2:1967
-828:2:1968
-829:2:1972
-830:2:1973
-831:2:1981
-832:2:1986
-833:2:1990
-834:2:1991
-835:2:1998
-836:2:1999
-837:2:2010
-838:2:2011
-839:2:2012
-840:2:2023
-841:2:2028
-842:2:2029
-843:0:2529
-844:2:2041
-845:0:2529
-846:2:2042
-847:0:2529
-848:2:2043
-849:0:2529
-850:2:2044
-851:0:2529
-852:2:2045
-853:2:2049
-854:2:2050
-855:2:2058
-856:2:2059
-857:2:2063
-858:2:2064
-859:2:2072
-860:2:2077
-861:2:2081
-862:2:2082
-863:2:2089
-864:2:2090
-865:2:2101
-866:2:2102
-867:2:2103
-868:2:2114
-869:2:2119
-870:2:2120
-871:0:2529
-872:2:2246
-873:0:2529
-874:2:2342
-875:0:2529
-876:2:2343
-877:0:2529
-878:2:2347
-879:0:2529
-880:2:2353
-881:0:2529
-882:2:2357
-883:2:2358
-884:2:2362
-885:2:2366
-886:2:2367
-887:2:2371
-888:2:2379
-889:2:2380
-890:0:2529
-891:2:2388
-892:0:2529
-893:2:2392
-894:2:2393
-895:2:2397
-896:2:2401
-897:2:2402
-898:2:2406
-899:2:2414
-900:2:2415
-901:0:2529
-902:2:2423
-903:0:2529
-904:2:2431
-905:2:2432
-906:2:2436
-907:2:2440
-908:2:2441
-909:2:2445
-910:2:2453
-911:2:2454
-912:0:2529
-913:2:2466
-914:0:2529
-915:2:2467
-916:0:2529
-917:2:981
-918:0:2529
-919:2:982
-920:2:986
-921:2:987
-922:2:995
-923:2:996
-924:2:1000
-925:2:1001
-926:2:1009
-927:2:1014
-928:2:1018
-929:2:1019
-930:2:1026
-931:2:1027
-932:2:1038
-933:2:1039
-934:2:1040
-935:2:1051
-936:2:1056
-937:2:1057
-938:0:2529
-939:2:1069
-940:2:1070
-941:0:2529
-942:2:1074
-943:2:1078
-944:2:1079
-945:2:1087
-946:2:1088
-947:2:1092
-948:2:1093
-949:2:1101
-950:2:1106
-951:2:1107
-952:2:1118
-953:2:1119
-954:2:1130
-955:2:1131
-956:2:1132
-957:2:1143
-958:2:1148
-959:2:1149
-960:0:2529
-961:2:1161
-962:0:2529
-963:2:1162
-964:0:2529
-965:2:1172
-966:0:2529
-967:2:1173
-968:0:2529
-969:2:1177
-970:2:1178
-971:2:1182
-972:2:1186
-973:2:1187
-974:2:1191
-975:2:1199
-976:2:1200
-977:0:2529
-978:2:1208
-979:0:2529
-980:2:1212
-981:2:1213
-982:2:1217
-983:2:1221
-984:2:1222
-985:2:1226
-986:2:1234
-987:2:1235
-988:0:2529
-989:2:1243
-990:0:2529
-991:2:1251
-992:2:1252
-993:2:1256
-994:2:1260
-995:2:1261
-996:2:1265
-997:2:1273
-998:2:1274
-999:0:2529
-1000:2:1286
-1001:0:2529
-1002:2:1287
-1003:2:1291
-1004:2:1292
-1005:2:1300
-1006:2:1301
-1007:2:1305
-1008:2:1306
-1009:2:1314
-1010:2:1319
-1011:2:1323
-1012:2:1324
-1013:2:1331
-1014:2:1332
-1015:2:1343
-1016:2:1344
-1017:2:1345
-1018:2:1356
-1019:2:1361
-1020:2:1362
-1021:0:2529
-1022:2:1374
-1023:0:2529
-1024:2:1377
-1025:2:1378
-1026:2:1390
-1027:2:1391
-1028:2:1395
-1029:2:1396
-1030:2:1404
-1031:2:1409
-1032:2:1413
-1033:2:1414
-1034:2:1421
-1035:2:1422
-1036:2:1433
-1037:2:1434
-1038:2:1435
-1039:2:1446
-1040:2:1451
-1041:2:1452
-1042:0:2529
-1043:2:1464
-1044:0:2529
-1045:2:1465
-1046:0:2529
-1047:2:1466
-1048:0:2529
-1049:2:1467
-1050:0:2529
-1051:2:1468
-1052:2:1472
-1053:2:1473
-1054:2:1481
-1055:2:1482
-1056:2:1486
-1057:2:1487
-1058:2:1495
-1059:2:1500
-1060:2:1504
-1061:2:1505
-1062:2:1512
-1063:2:1513
-1064:2:1524
-1065:2:1525
-1066:2:1526
-1067:2:1537
-1068:2:1542
-1069:2:1543
-1070:0:2529
-1071:2:1669
-1072:0:2529
-1073:2:1765
-1074:0:2529
-1075:2:1766
-1076:0:2529
-1077:2:1770
-1078:0:2529
-1079:2:1776
-1080:2:1780
-1081:2:1781
-1082:2:1789
-1083:2:1790
-1084:2:1794
-1085:2:1795
-1086:2:1803
-1087:2:1808
-1088:2:1812
-1089:2:1813
-1090:2:1820
-1091:2:1821
-1092:2:1832
-1093:2:1833
-1094:2:1834
-1095:2:1845
-1096:2:1850
-1097:2:1851
-1098:0:2529
-1099:2:1863
-1100:0:2529
-1101:2:1864
-1102:2:1868
-1103:2:1869
-1104:2:1877
-1105:2:1878
-1106:2:1882
-1107:2:1883
-1108:2:1891
-1109:2:1896
-1110:2:1900
-1111:2:1901
-1112:2:1908
-1113:2:1909
-1114:2:1920
-1115:2:1921
-1116:2:1922
-1117:2:1933
-1118:2:1938
-1119:2:1939
-1120:0:2529
-1121:2:1951
-1122:0:2529
-1123:2:1954
-1124:2:1955
-1125:2:1967
-1126:2:1968
-1127:2:1972
-1128:2:1973
-1129:2:1981
-1130:2:1986
-1131:2:1990
-1132:2:1991
-1133:2:1998
-1134:2:1999
-1135:2:2010
-1136:2:2011
-1137:2:2012
-1138:2:2023
-1139:2:2028
-1140:2:2029
-1141:0:2529
-1142:2:2041
-1143:0:2529
-1144:2:2042
-1145:0:2529
-1146:2:2043
-1147:0:2529
-1148:2:2044
-1149:0:2529
-1150:2:2045
-1151:2:2049
-1152:2:2050
-1153:2:2058
-1154:2:2059
-1155:2:2063
-1156:2:2064
-1157:2:2072
-1158:2:2077
-1159:2:2081
-1160:2:2082
-1161:2:2089
-1162:2:2090
-1163:2:2101
-1164:2:2102
-1165:2:2103
-1166:2:2114
-1167:2:2119
-1168:2:2120
-1169:0:2529
-1170:2:2246
-1171:0:2529
-1172:2:2342
-1173:0:2529
-1174:2:2343
-1175:0:2529
-1176:2:2347
-1177:0:2529
-1178:2:2353
-1179:0:2529
-1180:2:2357
-1181:2:2358
-1182:2:2362
-1183:2:2366
-1184:2:2367
-1185:2:2371
-1186:2:2379
-1187:2:2380
-1188:0:2529
-1189:2:2388
-1190:0:2529
-1191:2:2392
-1192:2:2393
-1193:2:2397
-1194:2:2401
-1195:2:2402
-1196:2:2406
-1197:2:2414
-1198:2:2415
-1199:0:2529
-1200:2:2423
-1201:0:2529
-1202:2:2431
-1203:2:2432
-1204:2:2436
-1205:2:2440
-1206:2:2441
-1207:2:2445
-1208:2:2453
-1209:2:2454
-1210:0:2529
-1211:2:2466
-1212:0:2529
-1213:2:2467
-1214:0:2529
-1215:2:981
-1216:0:2529
-1217:2:982
-1218:2:986
-1219:2:987
-1220:2:995
-1221:2:996
-1222:2:1000
-1223:2:1001
-1224:2:1009
-1225:2:1014
-1226:2:1018
-1227:2:1019
-1228:2:1026
-1229:2:1027
-1230:2:1038
-1231:2:1039
-1232:2:1040
-1233:2:1051
-1234:2:1056
-1235:2:1057
-1236:0:2529
-1237:2:1069
-1238:2:1070
-1239:0:2529
-1240:2:1074
-1241:2:1078
-1242:2:1079
-1243:2:1087
-1244:2:1088
-1245:2:1092
-1246:2:1093
-1247:2:1101
-1248:2:1114
-1249:2:1115
-1250:2:1118
-1251:2:1119
-1252:2:1130
-1253:2:1131
-1254:2:1132
-1255:2:1143
-1256:2:1148
-1257:2:1151
-1258:2:1152
-1259:0:2529
-1260:2:1161
-1261:0:2529
-1262:2:1162
-1263:0:2529
-1264:2:1172
-1265:0:2529
-1266:2:1173
-1267:0:2529
-1268:1:2
-1269:0:2529
-1270:1:8
-1271:0:2529
-1272:1:9
-1273:0:2529
-1274:1:10
-1275:0:2529
-1276:1:11
-1277:0:2529
-1278:1:12
-1279:1:16
-1280:1:17
-1281:1:25
-1282:1:26
-1283:1:30
-1284:1:31
-1285:1:39
-1286:1:44
-1287:1:48
-1288:1:49
-1289:1:56
-1290:1:57
-1291:1:68
-1292:1:69
-1293:1:70
-1294:1:81
-1295:1:86
-1296:1:87
-1297:0:2529
-1298:2:1177
-1299:2:1178
-1300:2:1182
-1301:2:1186
-1302:2:1187
-1303:2:1191
-1304:2:1196
-1305:0:2529
-1306:2:1208
-1307:0:2529
-1308:2:1212
-1309:2:1213
-1310:2:1217
-1311:2:1221
-1312:2:1222
-1313:2:1226
-1314:2:1234
-1315:2:1235
-1316:0:2529
-1317:2:1243
-1318:0:2529
-1319:2:1251
-1320:2:1252
-1321:2:1256
-1322:2:1260
-1323:2:1261
-1324:2:1265
-1325:2:1273
-1326:2:1274
-1327:0:2529
-1328:2:1286
-1329:0:2529
-1330:2:1287
-1331:2:1291
-1332:2:1292
-1333:2:1300
-1334:2:1301
-1335:2:1305
-1336:2:1306
-1337:2:1314
-1338:2:1319
-1339:2:1323
-1340:2:1324
-1341:2:1331
-1342:2:1332
-1343:2:1343
-1344:2:1344
-1345:2:1345
-1346:2:1356
-1347:2:1361
-1348:2:1362
-1349:0:2529
-1350:2:1374
-1351:0:2529
-1352:2:1377
-1353:2:1378
-1354:2:1390
-1355:2:1391
-1356:2:1395
-1357:2:1396
-1358:2:1404
-1359:2:1409
-1360:2:1413
-1361:2:1414
-1362:2:1421
-1363:2:1422
-1364:2:1433
-1365:2:1434
-1366:2:1435
-1367:2:1446
-1368:2:1451
-1369:2:1452
-1370:0:2529
-1371:2:1464
-1372:0:2529
-1373:2:1465
-1374:0:2529
-1375:2:1466
-1376:0:2529
-1377:2:1467
-1378:0:2529
-1379:2:1468
-1380:2:1472
-1381:2:1473
-1382:2:1481
-1383:2:1482
-1384:2:1486
-1385:2:1487
-1386:2:1495
-1387:2:1500
-1388:2:1504
-1389:2:1505
-1390:2:1512
-1391:2:1513
-1392:2:1524
-1393:2:1525
-1394:2:1526
-1395:2:1537
-1396:2:1542
-1397:2:1543
-1398:0:2529
-1399:2:1669
-1400:0:2529
-1401:2:1765
-1402:0:2529
-1403:2:1766
-1404:0:2529
-1405:2:1770
-1406:0:2529
-1407:2:1776
-1408:2:1780
-1409:2:1781
-1410:2:1789
-1411:2:1790
-1412:2:1794
-1413:2:1795
-1414:2:1803
-1415:2:1808
-1416:2:1812
-1417:2:1813
-1418:2:1820
-1419:2:1821
-1420:2:1832
-1421:2:1833
-1422:2:1834
-1423:2:1845
-1424:2:1850
-1425:2:1851
-1426:0:2529
-1427:2:1863
-1428:0:2529
-1429:2:1864
-1430:2:1868
-1431:2:1869
-1432:2:1877
-1433:2:1878
-1434:2:1882
-1435:2:1883
-1436:2:1891
-1437:2:1896
-1438:2:1900
-1439:2:1901
-1440:2:1908
-1441:2:1909
-1442:2:1920
-1443:2:1921
-1444:2:1922
-1445:2:1933
-1446:2:1938
-1447:2:1939
-1448:0:2529
-1449:2:1951
-1450:0:2529
-1451:2:1954
-1452:2:1955
-1453:2:1967
-1454:2:1968
-1455:2:1972
-1456:2:1973
-1457:2:1981
-1458:2:1986
-1459:2:1990
-1460:2:1991
-1461:2:1998
-1462:2:1999
-1463:2:2010
-1464:2:2011
-1465:2:2012
-1466:2:2023
-1467:2:2028
-1468:2:2029
-1469:0:2529
-1470:2:2041
-1471:0:2529
-1472:2:2042
-1473:0:2529
-1474:2:2043
-1475:0:2529
-1476:2:2044
-1477:0:2529
-1478:2:2045
-1479:2:2049
-1480:2:2050
-1481:2:2058
-1482:2:2059
-1483:2:2063
-1484:2:2064
-1485:2:2072
-1486:2:2077
-1487:2:2081
-1488:2:2082
-1489:2:2089
-1490:2:2090
-1491:2:2101
-1492:2:2102
-1493:2:2103
-1494:2:2114
-1495:2:2119
-1496:2:2120
-1497:0:2529
-1498:2:2246
-1499:0:2529
-1500:2:2342
-1501:0:2529
-1502:2:2343
-1503:0:2529
-1504:2:2347
-1505:0:2529
-1506:2:2353
-1507:0:2529
-1508:2:2357
-1509:2:2358
-1510:2:2362
-1511:2:2366
-1512:2:2367
-1513:2:2371
-1514:2:2379
-1515:2:2380
-1516:0:2529
-1517:2:2388
-1518:0:2529
-1519:2:2392
-1520:2:2393
-1521:2:2397
-1522:2:2401
-1523:2:2402
-1524:2:2406
-1525:2:2414
-1526:2:2415
-1527:0:2529
-1528:2:2423
-1529:0:2529
-1530:2:2431
-1531:2:2432
-1532:2:2436
-1533:2:2440
-1534:2:2441
-1535:2:2445
-1536:2:2453
-1537:2:2454
-1538:0:2529
-1539:2:2466
-1540:0:2529
-1541:2:2467
-1542:0:2529
-1543:2:2470
-1544:0:2529
-1545:2:2475
-1546:0:2529
-1547:1:99
-1548:0:2529
-1549:2:2476
-1550:0:2529
-1551:1:100
-1552:1:104
-1553:1:105
-1554:1:113
-1555:1:114
-1556:1:118
-1557:1:119
-1558:1:127
-1559:1:132
-1560:1:136
-1561:1:137
-1562:1:144
-1563:1:145
-1564:1:156
-1565:1:157
-1566:1:158
-1567:1:169
-1568:1:181
-1569:1:182
-1570:0:2529
-1571:2:2475
-1572:0:2529
-1573:1:187
-1574:0:2529
-1575:2:2476
-1576:0:2529
-1577:1:188
-1578:0:2529
-1579:2:2475
-1580:0:2529
-1581:1:189
-1582:1:193
-1583:1:194
-1584:1:202
-1585:1:203
-1586:1:207
-1587:1:208
-1588:1:216
-1589:1:221
-1590:1:225
-1591:1:226
-1592:1:233
-1593:1:234
-1594:1:245
-1595:1:246
-1596:1:247
-1597:1:258
-1598:1:270
-1599:1:271
-1600:0:2529
-1601:2:2476
-1602:0:2529
-1603:1:276
-1604:0:2529
-1605:2:2475
-1606:0:2529
-1607:1:393
-1608:0:2529
-1609:2:2476
-1610:0:2529
-1611:1:394
-1612:0:2529
-1613:2:2475
-1614:0:2529
-1615:1:11
-1616:0:2529
-1617:2:2476
-1618:0:2529
-1619:1:12
-1620:1:16
-1621:1:17
-1622:1:25
-1623:1:26
-1624:1:27
-1625:1:39
-1626:1:44
-1627:1:48
-1628:1:49
-1629:1:56
-1630:1:57
-1631:1:68
-1632:1:69
-1633:1:70
-1634:1:81
-1635:1:93
-1636:1:94
-1637:0:2529
-1638:2:2475
-1639:0:2529
-1640:1:99
-1641:0:2529
-1642:2:2476
-1643:0:2529
-1644:1:100
-1645:1:104
-1646:1:105
-1647:1:113
-1648:1:114
-1649:1:118
-1650:1:119
-1651:1:127
-1652:1:132
-1653:1:136
-1654:1:137
-1655:1:144
-1656:1:145
-1657:1:156
-1658:1:157
-1659:1:158
-1660:1:169
-1661:1:181
-1662:1:182
-1663:0:2529
-1664:2:2475
-1665:0:2529
-1666:1:279
-1667:0:2529
-1668:2:2476
-1669:0:2529
-1670:1:280
-1671:0:2529
-1672:2:2475
-1673:0:2529
-1674:1:393
-1675:0:2529
-1676:2:2476
-1677:0:2529
-1678:1:394
-1679:0:2529
-1680:2:2475
-1681:0:2529
-1682:1:399
-1683:0:2529
-1684:2:2476
-1685:0:2529
-1686:1:404
-1687:1:408
-1688:1:409
-1689:1:417
-1690:1:418
-1691:1:419
-1692:1:431
-1693:1:436
-1694:1:440
-1695:1:441
-1696:1:448
-1697:1:449
-1698:1:460
-1699:1:461
-1700:1:462
-1701:1:473
-1702:1:485
-1703:1:486
-1704:0:2529
-1705:2:2475
-1706:0:2529
-1707:1:491
-1708:0:2529
-1709:2:2476
-1710:0:2529
-1711:1:492
-1712:1:496
-1713:1:497
-1714:1:505
-1715:1:506
-1716:1:510
-1717:1:511
-1718:1:519
-1719:1:524
-1720:1:528
-1721:1:529
-1722:1:536
-1723:1:537
-1724:1:548
-1725:1:549
-1726:1:550
-1727:1:561
-1728:1:566
-1729:1:567
-1730:0:2529
-1731:2:2475
-1732:0:2529
-1733:1:579
-1734:0:2527
-1735:2:2476
-1736:0:2533
-1737:1:662
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 477c85d..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 567)
-pan: claim violated! (at depth 1889)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 6646, errors: 1
-   377244 states, stored
-  5291719 states, matched
-  5668963 transitions (= stored+matched)
- 20822372 atomic steps
-hash conflicts:    405371 (resolved)
-
-Stats on memory usage (in Megabytes):
-   30.221      equivalent memory usage for states (stored*(State-vector + overhead))
-   23.526      actual memory usage for states (compression: 77.85%)
-               state-vector as stored = 37 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  489.201      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 289, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 61, "(1)"
-       line 308, "pan.___", state 91, "(1)"
-       line 289, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 149, "(1)"
-       line 308, "pan.___", state 179, "(1)"
-       line 289, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 238, "(1)"
-       line 308, "pan.___", state 268, "(1)"
-       line 144, "pan.___", state 290, "(1)"
-       line 148, "pan.___", state 298, "(1)"
-       line 148, "pan.___", state 299, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 299, "else"
-       line 146, "pan.___", state 304, "((j<1))"
-       line 146, "pan.___", state 304, "((j>=1))"
-       line 152, "pan.___", state 310, "(1)"
-       line 152, "pan.___", state 311, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 311, "else"
-       line 186, "pan.___", state 316, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 316, "else"
-       line 144, "pan.___", state 322, "(1)"
-       line 148, "pan.___", state 330, "(1)"
-       line 148, "pan.___", state 331, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 148, "pan.___", state 331, "else"
-       line 146, "pan.___", state 336, "((j<1))"
-       line 146, "pan.___", state 336, "((j>=1))"
-       line 152, "pan.___", state 342, "(1)"
-       line 152, "pan.___", state 343, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 152, "pan.___", state 343, "else"
-       line 186, "pan.___", state 348, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 186, "pan.___", state 348, "else"
-       line 200, "pan.___", state 352, "((i<1))"
-       line 200, "pan.___", state 352, "((i>=1))"
-       line 144, "pan.___", state 358, "(1)"
-       line 148, "pan.___", state 366, "(1)"
-       line 148, "pan.___", state 367, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 367, "else"
-       line 146, "pan.___", state 372, "((j<1))"
-       line 146, "pan.___", state 372, "((j>=1))"
-       line 152, "pan.___", state 378, "(1)"
-       line 152, "pan.___", state 379, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 379, "else"
-       line 186, "pan.___", state 384, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 384, "else"
-       line 289, "pan.___", state 399, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 415, "(1)"
-       line 298, "pan.___", state 431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 444, "(1)"
-       line 308, "pan.___", state 474, "(1)"
-       line 289, "pan.___", state 487, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 519, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 532, "(1)"
-       line 308, "pan.___", state 562, "(1)"
-       line 289, "pan.___", state 575, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 607, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 620, "(1)"
-       line 308, "pan.___", state 650, "(1)"
-       line 144, "pan.___", state 666, "(1)"
-       line 148, "pan.___", state 674, "(1)"
-       line 148, "pan.___", state 675, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 675, "else"
-       line 146, "pan.___", state 680, "((j<1))"
-       line 146, "pan.___", state 680, "((j>=1))"
-       line 152, "pan.___", state 686, "(1)"
-       line 152, "pan.___", state 687, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 687, "else"
-       line 186, "pan.___", state 692, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 692, "else"
-       line 144, "pan.___", state 698, "(1)"
-       line 148, "pan.___", state 706, "(1)"
-       line 148, "pan.___", state 707, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 148, "pan.___", state 707, "else"
-       line 146, "pan.___", state 712, "((j<1))"
-       line 146, "pan.___", state 712, "((j>=1))"
-       line 152, "pan.___", state 718, "(1)"
-       line 152, "pan.___", state 719, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 152, "pan.___", state 719, "else"
-       line 186, "pan.___", state 724, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 186, "pan.___", state 724, "else"
-       line 200, "pan.___", state 728, "((i<1))"
-       line 200, "pan.___", state 728, "((i>=1))"
-       line 144, "pan.___", state 734, "(1)"
-       line 148, "pan.___", state 742, "(1)"
-       line 148, "pan.___", state 743, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 743, "else"
-       line 146, "pan.___", state 748, "((j<1))"
-       line 146, "pan.___", state 748, "((j>=1))"
-       line 152, "pan.___", state 754, "(1)"
-       line 152, "pan.___", state 755, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 755, "else"
-       line 186, "pan.___", state 760, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 760, "else"
-       line 289, "pan.___", state 770, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 802, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 815, "(1)"
-       line 308, "pan.___", state 845, "(1)"
-       line 289, "pan.___", state 866, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 882, "(1)"
-       line 298, "pan.___", state 898, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 911, "(1)"
-       line 308, "pan.___", state 941, "(1)"
-       line 434, "pan.___", state 954, "-end-"
-       (79 of 954 states)
-unreached in proctype urcu_writer
-       line 289, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 20, "(1)"
-       line 293, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 34, "(1)"
-       line 293, "pan.___", state 35, "(1)"
-       line 293, "pan.___", state 35, "(1)"
-       line 291, "pan.___", state 40, "((i<1))"
-       line 291, "pan.___", state 40, "((i>=1))"
-       line 298, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 59, "(1)"
-       line 299, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 60, "else"
-       line 299, "pan.___", state 63, "(1)"
-       line 299, "pan.___", state 64, "(1)"
-       line 299, "pan.___", state 64, "(1)"
-       line 303, "pan.___", state 72, "(1)"
-       line 303, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 73, "else"
-       line 303, "pan.___", state 76, "(1)"
-       line 303, "pan.___", state 77, "(1)"
-       line 303, "pan.___", state 77, "(1)"
-       line 301, "pan.___", state 82, "((i<1))"
-       line 301, "pan.___", state 82, "((i>=1))"
-       line 308, "pan.___", state 89, "(1)"
-       line 308, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 90, "else"
-       line 308, "pan.___", state 93, "(1)"
-       line 308, "pan.___", state 94, "(1)"
-       line 308, "pan.___", state 94, "(1)"
-       line 310, "pan.___", state 97, "(1)"
-       line 310, "pan.___", state 97, "(1)"
-       line 456, "pan.___", state 101, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 454, "pan.___", state 102, "old_gen = cached_generation_ptr.val[_pid]"
-       line 289, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 112, "(1)"
-       line 293, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 126, "(1)"
-       line 293, "pan.___", state 127, "(1)"
-       line 293, "pan.___", state 127, "(1)"
-       line 291, "pan.___", state 132, "((i<1))"
-       line 291, "pan.___", state 132, "((i>=1))"
-       line 299, "pan.___", state 151, "(1)"
-       line 299, "pan.___", state 152, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 152, "else"
-       line 299, "pan.___", state 155, "(1)"
-       line 299, "pan.___", state 156, "(1)"
-       line 299, "pan.___", state 156, "(1)"
-       line 303, "pan.___", state 164, "(1)"
-       line 303, "pan.___", state 165, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 165, "else"
-       line 303, "pan.___", state 168, "(1)"
-       line 303, "pan.___", state 169, "(1)"
-       line 303, "pan.___", state 169, "(1)"
-       line 301, "pan.___", state 174, "((i<1))"
-       line 301, "pan.___", state 174, "((i>=1))"
-       line 308, "pan.___", state 181, "(1)"
-       line 308, "pan.___", state 182, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 182, "else"
-       line 308, "pan.___", state 185, "(1)"
-       line 308, "pan.___", state 186, "(1)"
-       line 308, "pan.___", state 186, "(1)"
-       line 310, "pan.___", state 189, "(1)"
-       line 310, "pan.___", state 189, "(1)"
-       line 468, "pan.___", state 195, "(1)"
-       line 462, "pan.___", state 198, "((write_lock==0))"
-       line 462, "pan.___", state 198, "else"
-       line 460, "pan.___", state 199, "(1)"
-       line 144, "pan.___", state 206, "(1)"
-       line 148, "pan.___", state 214, "(1)"
-       line 148, "pan.___", state 215, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 215, "else"
-       line 146, "pan.___", state 220, "((j<1))"
-       line 146, "pan.___", state 220, "((j>=1))"
-       line 152, "pan.___", state 226, "(1)"
-       line 152, "pan.___", state 227, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 227, "else"
-       line 186, "pan.___", state 232, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 232, "else"
-       line 144, "pan.___", state 238, "(1)"
-       line 152, "pan.___", state 258, "(1)"
-       line 144, "pan.___", state 274, "(1)"
-       line 148, "pan.___", state 282, "(1)"
-       line 152, "pan.___", state 294, "(1)"
-       line 289, "pan.___", state 310, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 324, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 342, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 355, "(1)"
-       line 303, "pan.___", state 368, "(1)"
-       line 308, "pan.___", state 385, "(1)"
-       line 289, "pan.___", state 402, "(1)"
-       line 293, "pan.___", state 414, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 432, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 458, "(1)"
-       line 308, "pan.___", state 475, "(1)"
-       line 293, "pan.___", state 505, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 523, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 549, "(1)"
-       line 308, "pan.___", state 566, "(1)"
-       line 148, "pan.___", state 588, "(1)"
-       line 152, "pan.___", state 600, "(1)"
-       line 144, "pan.___", state 612, "(1)"
-       line 152, "pan.___", state 632, "(1)"
-       line 148, "pan.___", state 656, "(1)"
-       line 152, "pan.___", state 668, "(1)"
-       line 289, "pan.___", state 692, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 694, "(1)"
-       line 289, "pan.___", state 695, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 695, "else"
-       line 289, "pan.___", state 698, "(1)"
-       line 293, "pan.___", state 706, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 708, "(1)"
-       line 293, "pan.___", state 709, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 709, "else"
-       line 293, "pan.___", state 712, "(1)"
-       line 293, "pan.___", state 713, "(1)"
-       line 293, "pan.___", state 713, "(1)"
-       line 291, "pan.___", state 718, "((i<1))"
-       line 291, "pan.___", state 718, "((i>=1))"
-       line 298, "pan.___", state 724, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 737, "(1)"
-       line 299, "pan.___", state 738, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 738, "else"
-       line 299, "pan.___", state 741, "(1)"
-       line 299, "pan.___", state 742, "(1)"
-       line 299, "pan.___", state 742, "(1)"
-       line 303, "pan.___", state 750, "(1)"
-       line 303, "pan.___", state 751, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 751, "else"
-       line 303, "pan.___", state 754, "(1)"
-       line 303, "pan.___", state 755, "(1)"
-       line 303, "pan.___", state 755, "(1)"
-       line 301, "pan.___", state 760, "((i<1))"
-       line 301, "pan.___", state 760, "((i>=1))"
-       line 308, "pan.___", state 767, "(1)"
-       line 308, "pan.___", state 768, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 768, "else"
-       line 308, "pan.___", state 771, "(1)"
-       line 308, "pan.___", state 772, "(1)"
-       line 308, "pan.___", state 772, "(1)"
-       line 310, "pan.___", state 775, "(1)"
-       line 310, "pan.___", state 775, "(1)"
-       line 293, "pan.___", state 804, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 822, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 848, "(1)"
-       line 308, "pan.___", state 865, "(1)"
-       line 293, "pan.___", state 892, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 936, "(1)"
-       line 308, "pan.___", state 953, "(1)"
-       line 289, "pan.___", state 970, "(1)"
-       line 293, "pan.___", state 982, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1000, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 1026, "(1)"
-       line 308, "pan.___", state 1043, "(1)"
-       line 293, "pan.___", state 1073, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1091, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 1117, "(1)"
-       line 308, "pan.___", state 1134, "(1)"
-       line 148, "pan.___", state 1156, "(1)"
-       line 152, "pan.___", state 1168, "(1)"
-       line 144, "pan.___", state 1180, "(1)"
-       line 152, "pan.___", state 1200, "(1)"
-       line 148, "pan.___", state 1224, "(1)"
-       line 152, "pan.___", state 1236, "(1)"
-       line 289, "pan.___", state 1260, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 1262, "(1)"
-       line 289, "pan.___", state 1263, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 1263, "else"
-       line 289, "pan.___", state 1266, "(1)"
-       line 293, "pan.___", state 1274, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 1276, "(1)"
-       line 293, "pan.___", state 1277, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 1277, "else"
-       line 293, "pan.___", state 1280, "(1)"
-       line 293, "pan.___", state 1281, "(1)"
-       line 293, "pan.___", state 1281, "(1)"
-       line 291, "pan.___", state 1286, "((i<1))"
-       line 291, "pan.___", state 1286, "((i>=1))"
-       line 298, "pan.___", state 1292, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 1305, "(1)"
-       line 299, "pan.___", state 1306, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 1306, "else"
-       line 299, "pan.___", state 1309, "(1)"
-       line 299, "pan.___", state 1310, "(1)"
-       line 299, "pan.___", state 1310, "(1)"
-       line 303, "pan.___", state 1318, "(1)"
-       line 303, "pan.___", state 1319, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 1319, "else"
-       line 303, "pan.___", state 1322, "(1)"
-       line 303, "pan.___", state 1323, "(1)"
-       line 303, "pan.___", state 1323, "(1)"
-       line 301, "pan.___", state 1328, "((i<1))"
-       line 301, "pan.___", state 1328, "((i>=1))"
-       line 308, "pan.___", state 1335, "(1)"
-       line 308, "pan.___", state 1336, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 1336, "else"
-       line 308, "pan.___", state 1339, "(1)"
-       line 308, "pan.___", state 1340, "(1)"
-       line 308, "pan.___", state 1340, "(1)"
-       line 310, "pan.___", state 1343, "(1)"
-       line 310, "pan.___", state 1343, "(1)"
-       line 148, "pan.___", state 1367, "(1)"
-       line 152, "pan.___", state 1379, "(1)"
-       line 144, "pan.___", state 1391, "(1)"
-       line 152, "pan.___", state 1411, "(1)"
-       line 148, "pan.___", state 1435, "(1)"
-       line 152, "pan.___", state 1447, "(1)"
-       line 511, "pan.___", state 1473, "-end-"
-       (159 of 1473 states)
-unreached in proctype :init:
-       line 518, "pan.___", state 9, "((j<2))"
-       line 518, "pan.___", state 9, "((j>=2))"
-       line 519, "pan.___", state 20, "((j<2))"
-       line 519, "pan.___", state 20, "((j>=2))"
-       line 524, "pan.___", state 33, "((j<2))"
-       line 524, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 572, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 10.4 seconds
-pan: rate 36378.399 states/second
-pan: avg transition delay 1.8293e-06 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index 12cde50..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-#define NO_WMB
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index ec82525..0000000
+++ /dev/null
@@ -1,1892 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2475
-2:3:2427
-3:3:2430
-4:3:2430
-5:3:2433
-6:3:2441
-7:3:2441
-8:3:2444
-9:3:2450
-10:3:2454
-11:3:2454
-12:3:2457
-13:3:2465
-14:3:2469
-15:3:2470
-16:0:2475
-17:3:2472
-18:0:2475
-19:2:956
-20:0:2475
-21:2:962
-22:0:2475
-23:2:963
-24:0:2475
-25:2:964
-26:2:968
-27:2:969
-28:2:977
-29:2:978
-30:2:982
-31:2:983
-32:2:991
-33:2:996
-34:2:1000
-35:2:1001
-36:2:1008
-37:2:1009
-38:2:1020
-39:2:1021
-40:2:1022
-41:2:1033
-42:2:1038
-43:2:1039
-44:0:2475
-45:2:1051
-46:2:1052
-47:0:2475
-48:2:1056
-49:2:1060
-50:2:1061
-51:2:1069
-52:2:1070
-53:2:1074
-54:2:1075
-55:2:1083
-56:2:1088
-57:2:1089
-58:2:1100
-59:2:1101
-60:2:1112
-61:2:1113
-62:2:1114
-63:2:1125
-64:2:1130
-65:2:1131
-66:0:2475
-67:2:1143
-68:0:2475
-69:2:1144
-70:0:2475
-71:2:1154
-72:0:2475
-73:2:1155
-74:0:2475
-75:2:1156
-76:2:1163
-77:2:1164
-78:2:1171
-79:2:1176
-80:0:2475
-81:2:1187
-82:0:2475
-83:2:1188
-84:2:1195
-85:2:1196
-86:2:1203
-87:2:1208
-88:0:2475
-89:2:1219
-90:0:2475
-91:2:1224
-92:2:1231
-93:2:1232
-94:2:1239
-95:2:1244
-96:0:2475
-97:2:1259
-98:0:2475
-99:2:1260
-100:2:1264
-101:2:1265
-102:2:1273
-103:2:1274
-104:2:1278
-105:2:1279
-106:2:1287
-107:2:1292
-108:2:1296
-109:2:1297
-110:2:1304
-111:2:1305
-112:2:1316
-113:2:1317
-114:2:1318
-115:2:1329
-116:2:1334
-117:2:1335
-118:0:2475
-119:2:1347
-120:0:2475
-121:2:1350
-122:2:1351
-123:2:1363
-124:2:1364
-125:2:1368
-126:2:1369
-127:2:1377
-128:2:1382
-129:2:1386
-130:2:1387
-131:2:1394
-132:2:1395
-133:2:1406
-134:2:1407
-135:2:1408
-136:2:1419
-137:2:1424
-138:2:1425
-139:0:2475
-140:2:1437
-141:0:2475
-142:2:1438
-143:0:2475
-144:2:1439
-145:0:2475
-146:2:1440
-147:0:2475
-148:2:1441
-149:2:1445
-150:2:1446
-151:2:1454
-152:2:1455
-153:2:1459
-154:2:1460
-155:2:1468
-156:2:1473
-157:2:1477
-158:2:1478
-159:2:1485
-160:2:1486
-161:2:1497
-162:2:1498
-163:2:1499
-164:2:1510
-165:2:1515
-166:2:1516
-167:0:2475
-168:2:1633
-169:0:2475
-170:2:1729
-171:0:2475
-172:2:1730
-173:0:2475
-174:2:1734
-175:0:2475
-176:2:1740
-177:2:1744
-178:2:1745
-179:2:1753
-180:2:1754
-181:2:1758
-182:2:1759
-183:2:1767
-184:2:1772
-185:2:1776
-186:2:1777
-187:2:1784
-188:2:1785
-189:2:1796
-190:2:1797
-191:2:1798
-192:2:1809
-193:2:1814
-194:2:1815
-195:0:2475
-196:2:1827
-197:0:2475
-198:2:1828
-199:2:1832
-200:2:1833
-201:2:1841
-202:2:1842
-203:2:1846
-204:2:1847
-205:2:1855
-206:2:1860
-207:2:1864
-208:2:1865
-209:2:1872
-210:2:1873
-211:2:1884
-212:2:1885
-213:2:1886
-214:2:1897
-215:2:1902
-216:2:1903
-217:0:2475
-218:2:1915
-219:0:2475
-220:2:1918
-221:2:1919
-222:2:1931
-223:2:1932
-224:2:1936
-225:2:1937
-226:2:1945
-227:2:1950
-228:2:1954
-229:2:1955
-230:2:1962
-231:2:1963
-232:2:1974
-233:2:1975
-234:2:1976
-235:2:1987
-236:2:1992
-237:2:1993
-238:0:2475
-239:2:2005
-240:0:2475
-241:2:2006
-242:0:2475
-243:2:2007
-244:0:2475
-245:2:2008
-246:0:2475
-247:2:2009
-248:2:2013
-249:2:2014
-250:2:2022
-251:2:2023
-252:2:2027
-253:2:2028
-254:2:2036
-255:2:2041
-256:2:2045
-257:2:2046
-258:2:2053
-259:2:2054
-260:2:2065
-261:2:2066
-262:2:2067
-263:2:2078
-264:2:2083
-265:2:2084
-266:0:2475
-267:2:2201
-268:0:2475
-269:2:2297
-270:0:2475
-271:2:2298
-272:0:2475
-273:2:2302
-274:0:2475
-275:2:2308
-276:0:2475
-277:2:2309
-278:2:2316
-279:2:2317
-280:2:2324
-281:2:2329
-282:0:2475
-283:2:2340
-284:0:2475
-285:2:2341
-286:2:2348
-287:2:2349
-288:2:2356
-289:2:2361
-290:0:2475
-291:2:2372
-292:0:2475
-293:2:2377
-294:2:2384
-295:2:2385
-296:2:2392
-297:2:2397
-298:0:2475
-299:2:2412
-300:0:2475
-301:2:2413
-302:0:2475
-303:2:963
-304:0:2475
-305:2:964
-306:2:968
-307:2:969
-308:2:977
-309:2:978
-310:2:982
-311:2:983
-312:2:991
-313:2:996
-314:2:1000
-315:2:1001
-316:2:1008
-317:2:1009
-318:2:1020
-319:2:1021
-320:2:1022
-321:2:1033
-322:2:1038
-323:2:1039
-324:0:2475
-325:2:1051
-326:2:1052
-327:0:2475
-328:2:1056
-329:2:1060
-330:2:1061
-331:2:1069
-332:2:1070
-333:2:1074
-334:2:1075
-335:2:1083
-336:2:1088
-337:2:1089
-338:2:1100
-339:2:1101
-340:2:1112
-341:2:1113
-342:2:1114
-343:2:1125
-344:2:1130
-345:2:1131
-346:0:2475
-347:2:1143
-348:0:2475
-349:2:1144
-350:0:2475
-351:2:1154
-352:0:2475
-353:2:1155
-354:0:2475
-355:2:1156
-356:2:1163
-357:2:1164
-358:2:1171
-359:2:1176
-360:0:2475
-361:2:1187
-362:0:2475
-363:2:1188
-364:2:1195
-365:2:1196
-366:2:1203
-367:2:1208
-368:0:2475
-369:2:1219
-370:0:2475
-371:2:1224
-372:2:1231
-373:2:1232
-374:2:1239
-375:2:1244
-376:0:2475
-377:2:1259
-378:0:2475
-379:2:1260
-380:2:1264
-381:2:1265
-382:2:1273
-383:2:1274
-384:2:1278
-385:2:1279
-386:2:1287
-387:2:1292
-388:2:1296
-389:2:1297
-390:2:1304
-391:2:1305
-392:2:1316
-393:2:1317
-394:2:1318
-395:2:1329
-396:2:1334
-397:2:1335
-398:0:2475
-399:2:1347
-400:0:2475
-401:2:1350
-402:2:1351
-403:2:1363
-404:2:1364
-405:2:1368
-406:2:1369
-407:2:1377
-408:2:1382
-409:2:1386
-410:2:1387
-411:2:1394
-412:2:1395
-413:2:1406
-414:2:1407
-415:2:1408
-416:2:1419
-417:2:1424
-418:2:1425
-419:0:2475
-420:2:1437
-421:0:2475
-422:2:1438
-423:0:2475
-424:2:1439
-425:0:2475
-426:2:1440
-427:0:2475
-428:2:1441
-429:2:1445
-430:2:1446
-431:2:1454
-432:2:1455
-433:2:1459
-434:2:1460
-435:2:1468
-436:2:1473
-437:2:1477
-438:2:1478
-439:2:1485
-440:2:1486
-441:2:1497
-442:2:1498
-443:2:1499
-444:2:1510
-445:2:1515
-446:2:1516
-447:0:2475
-448:2:1633
-449:0:2475
-450:2:1729
-451:0:2475
-452:2:1730
-453:0:2475
-454:2:1734
-455:0:2475
-456:2:1740
-457:2:1744
-458:2:1745
-459:2:1753
-460:2:1754
-461:2:1758
-462:2:1759
-463:2:1767
-464:2:1772
-465:2:1776
-466:2:1777
-467:2:1784
-468:2:1785
-469:2:1796
-470:2:1797
-471:2:1798
-472:2:1809
-473:2:1814
-474:2:1815
-475:0:2475
-476:2:1827
-477:0:2475
-478:2:1828
-479:2:1832
-480:2:1833
-481:2:1841
-482:2:1842
-483:2:1846
-484:2:1847
-485:2:1855
-486:2:1860
-487:2:1864
-488:2:1865
-489:2:1872
-490:2:1873
-491:2:1884
-492:2:1885
-493:2:1886
-494:2:1897
-495:2:1902
-496:2:1903
-497:0:2475
-498:2:1915
-499:0:2475
-500:2:1918
-501:2:1919
-502:2:1931
-503:2:1932
-504:2:1936
-505:2:1937
-506:2:1945
-507:2:1950
-508:2:1954
-509:2:1955
-510:2:1962
-511:2:1963
-512:2:1974
-513:2:1975
-514:2:1976
-515:2:1987
-516:2:1992
-517:2:1993
-518:0:2475
-519:2:2005
-520:0:2475
-521:2:2006
-522:0:2475
-523:2:2007
-524:0:2475
-525:2:2008
-526:0:2475
-527:2:2009
-528:2:2013
-529:2:2014
-530:2:2022
-531:2:2023
-532:2:2027
-533:2:2028
-534:2:2036
-535:2:2041
-536:2:2045
-537:2:2046
-538:2:2053
-539:2:2054
-540:2:2065
-541:2:2066
-542:2:2067
-543:2:2078
-544:2:2083
-545:2:2084
-546:0:2475
-547:2:2201
-548:0:2475
-549:2:2297
-550:0:2475
-551:2:2298
-552:0:2475
-553:2:2302
-554:0:2475
-555:2:2308
-556:0:2475
-557:2:2309
-558:2:2316
-559:2:2317
-560:2:2324
-561:2:2329
-562:0:2475
-563:2:2340
-564:0:2475
-565:2:2341
-566:2:2348
-567:2:2349
-568:2:2356
-569:2:2361
-570:0:2475
-571:2:2372
-572:0:2475
-573:2:2377
-574:2:2384
-575:2:2385
-576:2:2392
-577:2:2397
-578:0:2475
-579:2:2412
-580:0:2475
-581:2:2413
-582:0:2475
-583:2:963
-584:0:2475
-585:2:964
-586:2:968
-587:2:969
-588:2:977
-589:2:978
-590:2:982
-591:2:983
-592:2:991
-593:2:996
-594:2:1000
-595:2:1001
-596:2:1008
-597:2:1009
-598:2:1020
-599:2:1021
-600:2:1022
-601:2:1033
-602:2:1038
-603:2:1039
-604:0:2475
-605:2:1051
-606:2:1052
-607:0:2475
-608:2:1056
-609:2:1060
-610:2:1061
-611:2:1069
-612:2:1070
-613:2:1074
-614:2:1075
-615:2:1083
-616:2:1088
-617:2:1089
-618:2:1100
-619:2:1101
-620:2:1112
-621:2:1113
-622:2:1114
-623:2:1125
-624:2:1130
-625:2:1131
-626:0:2475
-627:2:1143
-628:0:2475
-629:2:1144
-630:0:2475
-631:2:1154
-632:0:2475
-633:2:1155
-634:0:2475
-635:2:1156
-636:2:1163
-637:2:1164
-638:2:1171
-639:2:1176
-640:0:2475
-641:2:1187
-642:0:2475
-643:2:1188
-644:2:1195
-645:2:1196
-646:2:1203
-647:2:1208
-648:0:2475
-649:2:1219
-650:0:2475
-651:2:1224
-652:2:1231
-653:2:1232
-654:2:1239
-655:2:1244
-656:0:2475
-657:2:1259
-658:0:2475
-659:2:1260
-660:2:1264
-661:2:1265
-662:2:1273
-663:2:1274
-664:2:1278
-665:2:1279
-666:2:1287
-667:2:1292
-668:2:1296
-669:2:1297
-670:2:1304
-671:2:1305
-672:2:1316
-673:2:1317
-674:2:1318
-675:2:1329
-676:2:1334
-677:2:1335
-678:0:2475
-679:2:1347
-680:0:2475
-681:2:1350
-682:2:1351
-683:2:1363
-684:2:1364
-685:2:1368
-686:2:1369
-687:2:1377
-688:2:1382
-689:2:1386
-690:2:1387
-691:2:1394
-692:2:1395
-693:2:1406
-694:2:1407
-695:2:1408
-696:2:1419
-697:2:1424
-698:2:1425
-699:0:2475
-700:2:1437
-701:0:2475
-702:2:1438
-703:0:2475
-704:2:1439
-705:0:2475
-706:2:1440
-707:0:2475
-708:2:1441
-709:2:1445
-710:2:1446
-711:2:1454
-712:2:1455
-713:2:1459
-714:2:1460
-715:2:1468
-716:2:1473
-717:2:1477
-718:2:1478
-719:2:1485
-720:2:1486
-721:2:1497
-722:2:1498
-723:2:1499
-724:2:1510
-725:2:1515
-726:2:1516
-727:0:2475
-728:2:1633
-729:0:2475
-730:2:1729
-731:0:2475
-732:2:1730
-733:0:2475
-734:2:1734
-735:0:2475
-736:2:1740
-737:2:1744
-738:2:1745
-739:2:1753
-740:2:1754
-741:2:1758
-742:2:1759
-743:2:1767
-744:2:1772
-745:2:1776
-746:2:1777
-747:2:1784
-748:2:1785
-749:2:1796
-750:2:1797
-751:2:1798
-752:2:1809
-753:2:1814
-754:2:1815
-755:0:2475
-756:2:1827
-757:0:2475
-758:2:1828
-759:2:1832
-760:2:1833
-761:2:1841
-762:2:1842
-763:2:1846
-764:2:1847
-765:2:1855
-766:2:1860
-767:2:1864
-768:2:1865
-769:2:1872
-770:2:1873
-771:2:1884
-772:2:1885
-773:2:1886
-774:2:1897
-775:2:1902
-776:2:1903
-777:0:2475
-778:2:1915
-779:0:2475
-780:2:1918
-781:2:1919
-782:2:1931
-783:2:1932
-784:2:1936
-785:2:1937
-786:2:1945
-787:2:1950
-788:2:1954
-789:2:1955
-790:2:1962
-791:2:1963
-792:2:1974
-793:2:1975
-794:2:1976
-795:2:1987
-796:2:1992
-797:2:1993
-798:0:2475
-799:2:2005
-800:0:2475
-801:2:2006
-802:0:2475
-803:2:2007
-804:0:2475
-805:2:2008
-806:0:2475
-807:2:2009
-808:2:2013
-809:2:2014
-810:2:2022
-811:2:2023
-812:2:2027
-813:2:2028
-814:2:2036
-815:2:2041
-816:2:2045
-817:2:2046
-818:2:2053
-819:2:2054
-820:2:2065
-821:2:2066
-822:2:2067
-823:2:2078
-824:2:2083
-825:2:2084
-826:0:2475
-827:2:2201
-828:0:2475
-829:2:2297
-830:0:2475
-831:2:2298
-832:0:2475
-833:2:2302
-834:0:2475
-835:2:2308
-836:0:2475
-837:2:2309
-838:2:2316
-839:2:2317
-840:2:2324
-841:2:2329
-842:0:2475
-843:2:2340
-844:0:2475
-845:2:2341
-846:2:2348
-847:2:2349
-848:2:2356
-849:2:2361
-850:0:2475
-851:2:2372
-852:0:2475
-853:2:2377
-854:2:2384
-855:2:2385
-856:2:2392
-857:2:2397
-858:0:2475
-859:2:2412
-860:0:2475
-861:2:2413
-862:0:2475
-863:2:963
-864:0:2475
-865:2:964
-866:2:968
-867:2:969
-868:2:977
-869:2:978
-870:2:982
-871:2:983
-872:2:991
-873:2:996
-874:2:1000
-875:2:1001
-876:2:1008
-877:2:1009
-878:2:1020
-879:2:1021
-880:2:1022
-881:2:1033
-882:2:1038
-883:2:1039
-884:0:2475
-885:2:1051
-886:2:1052
-887:0:2475
-888:2:1056
-889:2:1060
-890:2:1061
-891:2:1069
-892:2:1070
-893:2:1074
-894:2:1075
-895:2:1083
-896:2:1088
-897:2:1089
-898:2:1100
-899:2:1101
-900:2:1112
-901:2:1113
-902:2:1114
-903:2:1125
-904:2:1130
-905:2:1131
-906:0:2475
-907:2:1143
-908:0:2475
-909:2:1144
-910:0:2475
-911:2:1154
-912:0:2475
-913:2:1155
-914:0:2475
-915:2:1156
-916:2:1163
-917:2:1164
-918:2:1171
-919:2:1176
-920:0:2475
-921:2:1187
-922:0:2475
-923:2:1188
-924:2:1195
-925:2:1196
-926:2:1203
-927:2:1208
-928:0:2475
-929:2:1219
-930:0:2475
-931:2:1224
-932:2:1231
-933:2:1232
-934:2:1239
-935:2:1244
-936:0:2475
-937:2:1259
-938:0:2475
-939:2:1260
-940:2:1264
-941:2:1265
-942:2:1273
-943:2:1274
-944:2:1278
-945:2:1279
-946:2:1287
-947:2:1292
-948:2:1296
-949:2:1297
-950:2:1304
-951:2:1305
-952:2:1316
-953:2:1317
-954:2:1318
-955:2:1329
-956:2:1334
-957:2:1335
-958:0:2475
-959:2:1347
-960:0:2475
-961:2:1350
-962:2:1351
-963:2:1363
-964:2:1364
-965:2:1368
-966:2:1369
-967:2:1377
-968:2:1382
-969:2:1386
-970:2:1387
-971:2:1394
-972:2:1395
-973:2:1406
-974:2:1407
-975:2:1408
-976:2:1419
-977:2:1424
-978:2:1425
-979:0:2475
-980:2:1437
-981:0:2475
-982:2:1438
-983:0:2475
-984:2:1439
-985:0:2475
-986:2:1440
-987:0:2475
-988:2:1441
-989:2:1445
-990:2:1446
-991:2:1454
-992:2:1455
-993:2:1459
-994:2:1460
-995:2:1468
-996:2:1473
-997:2:1477
-998:2:1478
-999:2:1485
-1000:2:1486
-1001:2:1497
-1002:2:1498
-1003:2:1499
-1004:2:1510
-1005:2:1515
-1006:2:1516
-1007:0:2475
-1008:2:1633
-1009:0:2475
-1010:2:1729
-1011:0:2475
-1012:2:1730
-1013:0:2475
-1014:2:1734
-1015:0:2475
-1016:2:1740
-1017:2:1744
-1018:2:1745
-1019:2:1753
-1020:2:1754
-1021:2:1758
-1022:2:1759
-1023:2:1767
-1024:2:1772
-1025:2:1776
-1026:2:1777
-1027:2:1784
-1028:2:1785
-1029:2:1796
-1030:2:1797
-1031:2:1798
-1032:2:1809
-1033:2:1814
-1034:2:1815
-1035:0:2475
-1036:2:1827
-1037:0:2475
-1038:2:1828
-1039:2:1832
-1040:2:1833
-1041:2:1841
-1042:2:1842
-1043:2:1846
-1044:2:1847
-1045:2:1855
-1046:2:1860
-1047:2:1864
-1048:2:1865
-1049:2:1872
-1050:2:1873
-1051:2:1884
-1052:2:1885
-1053:2:1886
-1054:2:1897
-1055:2:1902
-1056:2:1903
-1057:0:2475
-1058:2:1915
-1059:0:2475
-1060:2:1918
-1061:2:1919
-1062:2:1931
-1063:2:1932
-1064:2:1936
-1065:2:1937
-1066:2:1945
-1067:2:1950
-1068:2:1954
-1069:2:1955
-1070:2:1962
-1071:2:1963
-1072:2:1974
-1073:2:1975
-1074:2:1976
-1075:2:1987
-1076:2:1992
-1077:2:1993
-1078:0:2475
-1079:2:2005
-1080:0:2475
-1081:2:2006
-1082:0:2475
-1083:2:2007
-1084:0:2475
-1085:2:2008
-1086:0:2475
-1087:2:2009
-1088:2:2013
-1089:2:2014
-1090:2:2022
-1091:2:2023
-1092:2:2027
-1093:2:2028
-1094:2:2036
-1095:2:2041
-1096:2:2045
-1097:2:2046
-1098:2:2053
-1099:2:2054
-1100:2:2065
-1101:2:2066
-1102:2:2067
-1103:2:2078
-1104:2:2083
-1105:2:2084
-1106:0:2475
-1107:2:2201
-1108:0:2475
-1109:2:2297
-1110:0:2475
-1111:2:2298
-1112:0:2475
-1113:2:2302
-1114:0:2475
-1115:2:2308
-1116:0:2475
-1117:2:2309
-1118:2:2316
-1119:2:2317
-1120:2:2324
-1121:2:2329
-1122:0:2475
-1123:2:2340
-1124:0:2475
-1125:2:2341
-1126:2:2348
-1127:2:2349
-1128:2:2356
-1129:2:2361
-1130:0:2475
-1131:2:2372
-1132:0:2475
-1133:2:2377
-1134:2:2384
-1135:2:2385
-1136:2:2392
-1137:2:2397
-1138:0:2475
-1139:2:2412
-1140:0:2475
-1141:2:2413
-1142:0:2475
-1143:2:963
-1144:0:2475
-1145:2:964
-1146:2:968
-1147:2:969
-1148:2:977
-1149:2:978
-1150:2:982
-1151:2:983
-1152:2:991
-1153:2:996
-1154:2:1000
-1155:2:1001
-1156:2:1008
-1157:2:1009
-1158:2:1020
-1159:2:1021
-1160:2:1022
-1161:2:1033
-1162:2:1038
-1163:2:1039
-1164:0:2475
-1165:2:1051
-1166:2:1052
-1167:0:2475
-1168:2:1056
-1169:2:1060
-1170:2:1061
-1171:2:1069
-1172:2:1070
-1173:2:1074
-1174:2:1075
-1175:2:1083
-1176:2:1088
-1177:2:1089
-1178:2:1100
-1179:2:1101
-1180:2:1112
-1181:2:1113
-1182:2:1114
-1183:2:1125
-1184:2:1130
-1185:2:1131
-1186:0:2475
-1187:2:1143
-1188:0:2475
-1189:2:1144
-1190:0:2475
-1191:2:1154
-1192:0:2475
-1193:2:1155
-1194:0:2475
-1195:2:1156
-1196:2:1163
-1197:2:1164
-1198:2:1171
-1199:2:1176
-1200:0:2475
-1201:2:1187
-1202:0:2475
-1203:1:2
-1204:0:2475
-1205:1:8
-1206:0:2475
-1207:1:9
-1208:0:2475
-1209:1:10
-1210:0:2475
-1211:1:11
-1212:0:2475
-1213:1:12
-1214:1:16
-1215:1:17
-1216:1:25
-1217:1:26
-1218:1:30
-1219:1:31
-1220:1:39
-1221:1:44
-1222:1:48
-1223:1:49
-1224:1:56
-1225:1:57
-1226:1:68
-1227:1:69
-1228:1:70
-1229:1:81
-1230:1:93
-1231:1:94
-1232:0:2475
-1233:1:99
-1234:0:2475
-1235:1:100
-1236:1:104
-1237:1:105
-1238:1:113
-1239:1:114
-1240:1:118
-1241:1:119
-1242:1:127
-1243:1:132
-1244:1:136
-1245:1:137
-1246:1:144
-1247:1:145
-1248:1:156
-1249:1:157
-1250:1:158
-1251:1:169
-1252:1:181
-1253:1:182
-1254:0:2475
-1255:1:187
-1256:0:2475
-1257:1:188
-1258:0:2475
-1259:1:189
-1260:1:193
-1261:1:194
-1262:1:202
-1263:1:203
-1264:1:207
-1265:1:208
-1266:1:216
-1267:1:221
-1268:1:225
-1269:1:226
-1270:1:233
-1271:1:234
-1272:1:245
-1273:1:246
-1274:1:247
-1275:1:258
-1276:1:270
-1277:1:271
-1278:0:2475
-1279:1:276
-1280:0:2475
-1281:1:384
-1282:0:2475
-1283:1:385
-1284:0:2475
-1285:1:11
-1286:0:2475
-1287:1:12
-1288:1:16
-1289:1:17
-1290:1:25
-1291:1:26
-1292:1:27
-1293:1:39
-1294:1:44
-1295:1:48
-1296:1:49
-1297:1:56
-1298:1:57
-1299:1:68
-1300:1:69
-1301:1:70
-1302:1:81
-1303:1:93
-1304:1:94
-1305:0:2475
-1306:1:99
-1307:0:2475
-1308:1:100
-1309:1:104
-1310:1:105
-1311:1:113
-1312:1:114
-1313:1:118
-1314:1:119
-1315:1:127
-1316:1:132
-1317:1:136
-1318:1:137
-1319:1:144
-1320:1:145
-1321:1:156
-1322:1:157
-1323:1:158
-1324:1:169
-1325:1:181
-1326:1:182
-1327:0:2475
-1328:1:279
-1329:0:2475
-1330:1:280
-1331:0:2475
-1332:1:384
-1333:0:2475
-1334:1:385
-1335:0:2475
-1336:1:390
-1337:0:2475
-1338:1:395
-1339:1:399
-1340:1:400
-1341:1:408
-1342:1:409
-1343:1:410
-1344:1:422
-1345:1:427
-1346:1:431
-1347:1:432
-1348:1:439
-1349:1:440
-1350:1:451
-1351:1:452
-1352:1:453
-1353:1:464
-1354:1:476
-1355:1:477
-1356:0:2475
-1357:1:482
-1358:0:2475
-1359:1:483
-1360:1:487
-1361:1:488
-1362:1:496
-1363:1:497
-1364:1:501
-1365:1:502
-1366:1:510
-1367:1:515
-1368:1:519
-1369:1:520
-1370:1:527
-1371:1:528
-1372:1:539
-1373:1:540
-1374:1:541
-1375:1:552
-1376:1:564
-1377:1:565
-1378:0:2475
-1379:1:570
-1380:0:2475
-1381:1:571
-1382:1:575
-1383:1:576
-1384:1:584
-1385:1:585
-1386:1:589
-1387:1:590
-1388:1:598
-1389:1:603
-1390:1:607
-1391:1:608
-1392:1:615
-1393:1:616
-1394:1:627
-1395:1:628
-1396:1:629
-1397:1:640
-1398:1:652
-1399:1:653
-1400:0:2475
-1401:1:658
-1402:0:2475
-1403:1:659
-1404:0:2475
-1405:1:660
-1406:0:2475
-1407:1:760
-1408:0:2475
-1409:1:761
-1410:0:2475
-1411:1:765
-1412:0:2475
-1413:1:766
-1414:1:770
-1415:1:771
-1416:1:779
-1417:1:780
-1418:1:784
-1419:1:785
-1420:1:793
-1421:1:798
-1422:1:802
-1423:1:803
-1424:1:810
-1425:1:811
-1426:1:822
-1427:1:823
-1428:1:824
-1429:1:835
-1430:1:847
-1431:1:848
-1432:0:2475
-1433:1:853
-1434:0:2475
-1435:1:660
-1436:0:2475
-1437:1:760
-1438:0:2475
-1439:1:761
-1440:0:2475
-1441:1:765
-1442:0:2475
-1443:1:766
-1444:1:770
-1445:1:771
-1446:1:779
-1447:1:780
-1448:1:781
-1449:1:793
-1450:1:798
-1451:1:802
-1452:1:803
-1453:1:810
-1454:1:811
-1455:1:822
-1456:1:823
-1457:1:824
-1458:1:835
-1459:1:847
-1460:1:848
-1461:0:2475
-1462:1:853
-1463:0:2475
-1464:1:857
-1465:0:2475
-1466:1:862
-1467:1:866
-1468:1:867
-1469:1:875
-1470:1:876
-1471:1:877
-1472:1:889
-1473:1:894
-1474:1:898
-1475:1:899
-1476:1:906
-1477:1:907
-1478:1:918
-1479:1:919
-1480:1:920
-1481:1:931
-1482:1:943
-1483:1:944
-1484:0:2475
-1485:1:9
-1486:0:2475
-1487:1:10
-1488:0:2475
-1489:1:11
-1490:0:2475
-1491:1:12
-1492:1:16
-1493:1:17
-1494:1:25
-1495:1:26
-1496:1:30
-1497:1:31
-1498:1:39
-1499:1:44
-1500:1:48
-1501:1:49
-1502:1:56
-1503:1:57
-1504:1:68
-1505:1:69
-1506:1:70
-1507:1:81
-1508:1:93
-1509:1:94
-1510:0:2475
-1511:1:99
-1512:0:2475
-1513:1:100
-1514:1:104
-1515:1:105
-1516:1:113
-1517:1:114
-1518:1:118
-1519:1:119
-1520:1:127
-1521:1:132
-1522:1:136
-1523:1:137
-1524:1:144
-1525:1:145
-1526:1:156
-1527:1:157
-1528:1:158
-1529:1:169
-1530:1:181
-1531:1:182
-1532:0:2475
-1533:1:187
-1534:0:2475
-1535:1:188
-1536:0:2475
-1537:1:189
-1538:1:193
-1539:1:194
-1540:1:202
-1541:1:203
-1542:1:207
-1543:1:208
-1544:1:216
-1545:1:221
-1546:1:225
-1547:1:226
-1548:1:233
-1549:1:234
-1550:1:245
-1551:1:246
-1552:1:247
-1553:1:258
-1554:1:270
-1555:1:271
-1556:0:2475
-1557:1:276
-1558:0:2475
-1559:1:384
-1560:0:2475
-1561:1:385
-1562:0:2475
-1563:1:11
-1564:0:2475
-1565:1:12
-1566:1:16
-1567:1:17
-1568:1:25
-1569:1:34
-1570:1:35
-1571:1:39
-1572:1:44
-1573:1:48
-1574:1:49
-1575:1:56
-1576:1:57
-1577:1:68
-1578:1:69
-1579:1:72
-1580:1:73
-1581:1:81
-1582:1:93
-1583:1:94
-1584:0:2475
-1585:1:99
-1586:0:2475
-1587:1:100
-1588:1:104
-1589:1:105
-1590:1:113
-1591:1:122
-1592:1:123
-1593:1:127
-1594:1:132
-1595:1:136
-1596:1:137
-1597:1:144
-1598:1:145
-1599:1:156
-1600:1:157
-1601:1:160
-1602:1:161
-1603:1:169
-1604:1:181
-1605:1:182
-1606:0:2475
-1607:1:279
-1608:0:2475
-1609:1:280
-1610:0:2475
-1611:1:384
-1612:0:2475
-1613:1:385
-1614:0:2475
-1615:1:390
-1616:0:2475
-1617:1:395
-1618:1:399
-1619:1:400
-1620:1:408
-1621:1:417
-1622:1:418
-1623:1:422
-1624:1:427
-1625:1:431
-1626:1:432
-1627:1:439
-1628:1:440
-1629:1:451
-1630:1:452
-1631:1:455
-1632:1:456
-1633:1:464
-1634:1:476
-1635:1:477
-1636:0:2475
-1637:1:482
-1638:0:2475
-1639:2:1188
-1640:2:1195
-1641:2:1198
-1642:2:1199
-1643:2:1203
-1644:2:1208
-1645:0:2475
-1646:2:1219
-1647:0:2475
-1648:2:1224
-1649:2:1231
-1650:2:1232
-1651:2:1239
-1652:2:1244
-1653:0:2475
-1654:2:1259
-1655:0:2475
-1656:2:1260
-1657:2:1264
-1658:2:1265
-1659:2:1273
-1660:2:1274
-1661:2:1278
-1662:2:1279
-1663:2:1287
-1664:2:1292
-1665:2:1296
-1666:2:1297
-1667:2:1304
-1668:2:1305
-1669:2:1316
-1670:2:1317
-1671:2:1318
-1672:2:1329
-1673:2:1334
-1674:2:1335
-1675:0:2475
-1676:2:1347
-1677:0:2475
-1678:2:1350
-1679:2:1351
-1680:2:1363
-1681:2:1364
-1682:2:1368
-1683:2:1369
-1684:2:1377
-1685:2:1382
-1686:2:1386
-1687:2:1387
-1688:2:1394
-1689:2:1395
-1690:2:1406
-1691:2:1407
-1692:2:1408
-1693:2:1419
-1694:2:1424
-1695:2:1425
-1696:0:2475
-1697:2:1437
-1698:0:2475
-1699:2:1438
-1700:0:2475
-1701:2:1439
-1702:0:2475
-1703:2:1440
-1704:0:2475
-1705:2:1441
-1706:2:1445
-1707:2:1446
-1708:2:1454
-1709:2:1455
-1710:2:1459
-1711:2:1460
-1712:2:1468
-1713:2:1473
-1714:2:1477
-1715:2:1478
-1716:2:1485
-1717:2:1486
-1718:2:1497
-1719:2:1498
-1720:2:1499
-1721:2:1510
-1722:2:1515
-1723:2:1516
-1724:0:2475
-1725:2:1633
-1726:0:2475
-1727:2:1729
-1728:0:2475
-1729:2:1730
-1730:0:2475
-1731:2:1734
-1732:0:2475
-1733:2:1740
-1734:2:1744
-1735:2:1745
-1736:2:1753
-1737:2:1754
-1738:2:1758
-1739:2:1759
-1740:2:1767
-1741:2:1772
-1742:2:1776
-1743:2:1777
-1744:2:1784
-1745:2:1785
-1746:2:1796
-1747:2:1797
-1748:2:1798
-1749:2:1809
-1750:2:1814
-1751:2:1815
-1752:0:2475
-1753:2:1827
-1754:0:2475
-1755:2:1828
-1756:2:1832
-1757:2:1833
-1758:2:1841
-1759:2:1842
-1760:2:1846
-1761:2:1847
-1762:2:1855
-1763:2:1860
-1764:2:1864
-1765:2:1865
-1766:2:1872
-1767:2:1873
-1768:2:1884
-1769:2:1885
-1770:2:1886
-1771:2:1897
-1772:2:1902
-1773:2:1903
-1774:0:2475
-1775:2:1915
-1776:0:2475
-1777:2:1918
-1778:2:1919
-1779:2:1931
-1780:2:1932
-1781:2:1936
-1782:2:1937
-1783:2:1945
-1784:2:1950
-1785:2:1954
-1786:2:1955
-1787:2:1962
-1788:2:1963
-1789:2:1974
-1790:2:1975
-1791:2:1976
-1792:2:1987
-1793:2:1992
-1794:2:1993
-1795:0:2475
-1796:2:2005
-1797:0:2475
-1798:2:2006
-1799:0:2475
-1800:2:2007
-1801:0:2475
-1802:2:2008
-1803:0:2475
-1804:2:2009
-1805:2:2013
-1806:2:2014
-1807:2:2022
-1808:2:2023
-1809:2:2027
-1810:2:2028
-1811:2:2036
-1812:2:2041
-1813:2:2045
-1814:2:2046
-1815:2:2053
-1816:2:2054
-1817:2:2065
-1818:2:2066
-1819:2:2067
-1820:2:2078
-1821:2:2083
-1822:2:2084
-1823:0:2475
-1824:2:2201
-1825:0:2475
-1826:2:2297
-1827:0:2475
-1828:2:2298
-1829:0:2475
-1830:2:2302
-1831:0:2475
-1832:2:2308
-1833:0:2475
-1834:2:2309
-1835:2:2316
-1836:2:2317
-1837:2:2324
-1838:2:2329
-1839:0:2475
-1840:2:2340
-1841:0:2475
-1842:2:2341
-1843:2:2348
-1844:2:2351
-1845:2:2352
-1846:2:2356
-1847:2:2361
-1848:0:2475
-1849:2:2372
-1850:0:2475
-1851:2:2377
-1852:2:2384
-1853:2:2385
-1854:2:2392
-1855:2:2397
-1856:0:2475
-1857:2:2412
-1858:0:2475
-1859:2:2413
-1860:0:2475
-1861:2:2416
-1862:0:2475
-1863:2:2421
-1864:0:2475
-1865:1:483
-1866:1:487
-1867:1:488
-1868:1:496
-1869:1:497
-1870:1:498
-1871:1:510
-1872:1:515
-1873:1:519
-1874:1:520
-1875:1:527
-1876:1:528
-1877:1:539
-1878:1:540
-1879:1:541
-1880:1:552
-1881:1:557
-1882:1:558
-1883:0:2475
-1884:2:2422
-1885:0:2475
-1886:1:570
-1887:0:2473
-1888:2:2421
-1889:0:2479
-1890:1:151
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 6a9d040..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 567)
-pan: claim violated! (at depth 1353)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3705, errors: 1
-   216253 states, stored
-  2924019 states, matched
-  3140272 transitions (= stored+matched)
- 11791015 atomic steps
-hash conflicts:    155585 (resolved)
-
-Stats on memory usage (in Megabytes):
-   17.324      equivalent memory usage for states (stored*(State-vector + overhead))
-   13.576      actual memory usage for states (compression: 78.37%)
-               state-vector as stored = 38 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  479.338      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 289, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 61, "(1)"
-       line 308, "pan.___", state 91, "(1)"
-       line 289, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 149, "(1)"
-       line 308, "pan.___", state 179, "(1)"
-       line 289, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 238, "(1)"
-       line 308, "pan.___", state 268, "(1)"
-       line 159, "pan.___", state 289, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 291, "(1)"
-       line 163, "pan.___", state 298, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 300, "(1)"
-       line 163, "pan.___", state 301, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 301, "else"
-       line 161, "pan.___", state 306, "((j<1))"
-       line 161, "pan.___", state 306, "((j>=1))"
-       line 167, "pan.___", state 311, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 321, "(1)"
-       line 148, "pan.___", state 329, "(1)"
-       line 148, "pan.___", state 330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 330, "else"
-       line 146, "pan.___", state 335, "((j<1))"
-       line 146, "pan.___", state 335, "((j>=1))"
-       line 152, "pan.___", state 341, "(1)"
-       line 152, "pan.___", state 342, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 342, "else"
-       line 154, "pan.___", state 345, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 154, "pan.___", state 345, "else"
-       line 186, "pan.___", state 347, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 186, "pan.___", state 347, "else"
-       line 159, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 354, "(1)"
-       line 163, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 163, "pan.___", state 363, "(1)"
-       line 163, "pan.___", state 364, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 163, "pan.___", state 364, "else"
-       line 161, "pan.___", state 369, "((j<1))"
-       line 161, "pan.___", state 369, "((j>=1))"
-       line 167, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 384, "(1)"
-       line 148, "pan.___", state 392, "(1)"
-       line 148, "pan.___", state 393, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 148, "pan.___", state 393, "else"
-       line 146, "pan.___", state 398, "((j<1))"
-       line 146, "pan.___", state 398, "((j>=1))"
-       line 152, "pan.___", state 404, "(1)"
-       line 152, "pan.___", state 405, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 152, "pan.___", state 405, "else"
-       line 154, "pan.___", state 408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 154, "pan.___", state 408, "else"
-       line 186, "pan.___", state 410, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 186, "pan.___", state 410, "else"
-       line 200, "pan.___", state 414, "((i<1))"
-       line 200, "pan.___", state 414, "((i>=1))"
-       line 159, "pan.___", state 419, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 421, "(1)"
-       line 163, "pan.___", state 428, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 430, "(1)"
-       line 163, "pan.___", state 431, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 431, "else"
-       line 161, "pan.___", state 436, "((j<1))"
-       line 161, "pan.___", state 436, "((j>=1))"
-       line 167, "pan.___", state 441, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 451, "(1)"
-       line 148, "pan.___", state 459, "(1)"
-       line 148, "pan.___", state 460, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 460, "else"
-       line 146, "pan.___", state 465, "((j<1))"
-       line 146, "pan.___", state 465, "((j>=1))"
-       line 152, "pan.___", state 471, "(1)"
-       line 152, "pan.___", state 472, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 472, "else"
-       line 154, "pan.___", state 475, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 154, "pan.___", state 475, "else"
-       line 186, "pan.___", state 477, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 186, "pan.___", state 477, "else"
-       line 289, "pan.___", state 492, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 537, "(1)"
-       line 308, "pan.___", state 567, "(1)"
-       line 289, "pan.___", state 580, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 612, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 625, "(1)"
-       line 308, "pan.___", state 655, "(1)"
-       line 289, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 713, "(1)"
-       line 308, "pan.___", state 743, "(1)"
-       line 159, "pan.___", state 758, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 760, "(1)"
-       line 163, "pan.___", state 767, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 769, "(1)"
-       line 163, "pan.___", state 770, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 770, "else"
-       line 161, "pan.___", state 775, "((j<1))"
-       line 161, "pan.___", state 775, "((j>=1))"
-       line 167, "pan.___", state 780, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 790, "(1)"
-       line 148, "pan.___", state 798, "(1)"
-       line 148, "pan.___", state 799, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 799, "else"
-       line 146, "pan.___", state 804, "((j<1))"
-       line 146, "pan.___", state 804, "((j>=1))"
-       line 152, "pan.___", state 810, "(1)"
-       line 152, "pan.___", state 811, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 811, "else"
-       line 154, "pan.___", state 814, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 154, "pan.___", state 814, "else"
-       line 186, "pan.___", state 816, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 186, "pan.___", state 816, "else"
-       line 159, "pan.___", state 821, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 823, "(1)"
-       line 163, "pan.___", state 830, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 163, "pan.___", state 832, "(1)"
-       line 163, "pan.___", state 833, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 163, "pan.___", state 833, "else"
-       line 161, "pan.___", state 838, "((j<1))"
-       line 161, "pan.___", state 838, "((j>=1))"
-       line 167, "pan.___", state 843, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 853, "(1)"
-       line 148, "pan.___", state 861, "(1)"
-       line 148, "pan.___", state 862, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 148, "pan.___", state 862, "else"
-       line 146, "pan.___", state 867, "((j<1))"
-       line 146, "pan.___", state 867, "((j>=1))"
-       line 152, "pan.___", state 873, "(1)"
-       line 152, "pan.___", state 874, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 152, "pan.___", state 874, "else"
-       line 154, "pan.___", state 877, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 154, "pan.___", state 877, "else"
-       line 186, "pan.___", state 879, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 186, "pan.___", state 879, "else"
-       line 200, "pan.___", state 883, "((i<1))"
-       line 200, "pan.___", state 883, "((i>=1))"
-       line 159, "pan.___", state 888, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 890, "(1)"
-       line 163, "pan.___", state 897, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 899, "(1)"
-       line 163, "pan.___", state 900, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 900, "else"
-       line 161, "pan.___", state 905, "((j<1))"
-       line 161, "pan.___", state 905, "((j>=1))"
-       line 167, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 920, "(1)"
-       line 148, "pan.___", state 928, "(1)"
-       line 148, "pan.___", state 929, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 929, "else"
-       line 146, "pan.___", state 934, "((j<1))"
-       line 146, "pan.___", state 934, "((j>=1))"
-       line 152, "pan.___", state 940, "(1)"
-       line 152, "pan.___", state 941, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 941, "else"
-       line 154, "pan.___", state 944, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 154, "pan.___", state 944, "else"
-       line 186, "pan.___", state 946, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 186, "pan.___", state 946, "else"
-       line 289, "pan.___", state 956, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 988, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 1001, "(1)"
-       line 308, "pan.___", state 1031, "(1)"
-       line 289, "pan.___", state 1052, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1084, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 1097, "(1)"
-       line 308, "pan.___", state 1127, "(1)"
-       line 434, "pan.___", state 1140, "-end-"
-       (125 of 1140 states)
-unreached in proctype urcu_writer
-       line 289, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 59, "(1)"
-       line 303, "pan.___", state 72, "(1)"
-       line 308, "pan.___", state 89, "(1)"
-       line 289, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 151, "(1)"
-       line 303, "pan.___", state 164, "(1)"
-       line 468, "pan.___", state 195, "(1)"
-       line 159, "pan.___", state 205, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 214, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 237, "(1)"
-       line 148, "pan.___", state 245, "(1)"
-       line 152, "pan.___", state 257, "(1)"
-       line 159, "pan.___", state 268, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 290, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 300, "(1)"
-       line 148, "pan.___", state 308, "(1)"
-       line 152, "pan.___", state 320, "(1)"
-       line 159, "pan.___", state 335, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 344, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 357, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 367, "(1)"
-       line 148, "pan.___", state 375, "(1)"
-       line 152, "pan.___", state 387, "(1)"
-       line 289, "pan.___", state 403, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 448, "(1)"
-       line 303, "pan.___", state 461, "(1)"
-       line 308, "pan.___", state 478, "(1)"
-       line 289, "pan.___", state 495, "(1)"
-       line 293, "pan.___", state 507, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 525, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 551, "(1)"
-       line 308, "pan.___", state 568, "(1)"
-       line 293, "pan.___", state 598, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 642, "(1)"
-       line 308, "pan.___", state 659, "(1)"
-       line 163, "pan.___", state 681, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 694, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 704, "(1)"
-       line 148, "pan.___", state 712, "(1)"
-       line 152, "pan.___", state 724, "(1)"
-       line 159, "pan.___", state 735, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 757, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 767, "(1)"
-       line 148, "pan.___", state 775, "(1)"
-       line 152, "pan.___", state 787, "(1)"
-       line 159, "pan.___", state 802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 811, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 824, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 834, "(1)"
-       line 148, "pan.___", state 842, "(1)"
-       line 152, "pan.___", state 854, "(1)"
-       line 289, "pan.___", state 878, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 880, "(1)"
-       line 289, "pan.___", state 881, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 881, "else"
-       line 289, "pan.___", state 884, "(1)"
-       line 293, "pan.___", state 892, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 894, "(1)"
-       line 293, "pan.___", state 895, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 895, "else"
-       line 293, "pan.___", state 898, "(1)"
-       line 293, "pan.___", state 899, "(1)"
-       line 293, "pan.___", state 899, "(1)"
-       line 291, "pan.___", state 904, "((i<1))"
-       line 291, "pan.___", state 904, "((i>=1))"
-       line 298, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 923, "(1)"
-       line 299, "pan.___", state 924, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 924, "else"
-       line 299, "pan.___", state 927, "(1)"
-       line 299, "pan.___", state 928, "(1)"
-       line 299, "pan.___", state 928, "(1)"
-       line 303, "pan.___", state 936, "(1)"
-       line 303, "pan.___", state 937, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 937, "else"
-       line 303, "pan.___", state 940, "(1)"
-       line 303, "pan.___", state 941, "(1)"
-       line 303, "pan.___", state 941, "(1)"
-       line 301, "pan.___", state 946, "((i<1))"
-       line 301, "pan.___", state 946, "((i>=1))"
-       line 308, "pan.___", state 953, "(1)"
-       line 308, "pan.___", state 954, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 954, "else"
-       line 308, "pan.___", state 957, "(1)"
-       line 308, "pan.___", state 958, "(1)"
-       line 308, "pan.___", state 958, "(1)"
-       line 310, "pan.___", state 961, "(1)"
-       line 310, "pan.___", state 961, "(1)"
-       line 163, "pan.___", state 985, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 998, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 1008, "(1)"
-       line 148, "pan.___", state 1016, "(1)"
-       line 152, "pan.___", state 1028, "(1)"
-       line 159, "pan.___", state 1039, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 1061, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 1071, "(1)"
-       line 148, "pan.___", state 1079, "(1)"
-       line 152, "pan.___", state 1091, "(1)"
-       line 159, "pan.___", state 1106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 1115, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1128, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 1138, "(1)"
-       line 148, "pan.___", state 1146, "(1)"
-       line 152, "pan.___", state 1158, "(1)"
-       line 511, "pan.___", state 1184, "-end-"
-       (100 of 1184 states)
-unreached in proctype :init:
-       line 518, "pan.___", state 9, "((j<2))"
-       line 518, "pan.___", state 9, "((j>=2))"
-       line 519, "pan.___", state 20, "((j<2))"
-       line 519, "pan.___", state 20, "((j>=2))"
-       line 524, "pan.___", state 33, "((j<2))"
-       line 524, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 572, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 5.58 seconds
-pan: rate 38755.018 states/second
-pan: avg transition delay 1.7769e-06 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 244a7b2..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-#define SINGLE_FLIP
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 363553e..0000000
+++ /dev/null
@@ -1,1356 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2372
-2:3:2324
-3:3:2327
-4:3:2327
-5:3:2330
-6:3:2338
-7:3:2338
-8:3:2341
-9:3:2347
-10:3:2351
-11:3:2351
-12:3:2354
-13:3:2362
-14:3:2366
-15:3:2367
-16:0:2372
-17:3:2369
-18:0:2372
-19:2:1142
-20:0:2372
-21:2:1148
-22:0:2372
-23:2:1149
-24:0:2372
-25:2:1150
-26:2:1154
-27:2:1155
-28:2:1163
-29:2:1164
-30:2:1168
-31:2:1169
-32:2:1177
-33:2:1182
-34:2:1186
-35:2:1187
-36:2:1194
-37:2:1195
-38:2:1206
-39:2:1207
-40:2:1208
-41:2:1219
-42:2:1224
-43:2:1225
-44:0:2372
-45:2:1237
-46:2:1238
-47:0:2372
-48:2:1242
-49:2:1246
-50:2:1247
-51:2:1255
-52:2:1256
-53:2:1260
-54:2:1261
-55:2:1269
-56:2:1274
-57:2:1275
-58:2:1286
-59:2:1287
-60:2:1298
-61:2:1299
-62:2:1300
-63:2:1311
-64:2:1316
-65:2:1317
-66:0:2372
-67:2:1329
-68:0:2372
-69:2:1330
-70:0:2372
-71:2:1340
-72:0:2372
-73:2:1341
-74:0:2372
-75:2:1345
-76:2:1346
-77:2:1350
-78:2:1354
-79:2:1355
-80:2:1359
-81:2:1367
-82:2:1368
-83:2:1373
-84:2:1380
-85:2:1381
-86:2:1388
-87:2:1393
-88:0:2372
-89:2:1404
-90:0:2372
-91:2:1408
-92:2:1409
-93:2:1413
-94:2:1417
-95:2:1418
-96:2:1422
-97:2:1430
-98:2:1431
-99:2:1436
-100:2:1443
-101:2:1444
-102:2:1451
-103:2:1456
-104:0:2372
-105:2:1467
-106:0:2372
-107:2:1475
-108:2:1476
-109:2:1480
-110:2:1484
-111:2:1485
-112:2:1489
-113:2:1497
-114:2:1498
-115:2:1503
-116:2:1510
-117:2:1511
-118:2:1518
-119:2:1523
-120:0:2372
-121:2:1538
-122:0:2372
-123:2:1539
-124:2:1543
-125:2:1544
-126:2:1552
-127:2:1553
-128:2:1557
-129:2:1558
-130:2:1566
-131:2:1571
-132:2:1575
-133:2:1576
-134:2:1583
-135:2:1584
-136:2:1595
-137:2:1596
-138:2:1597
-139:2:1608
-140:2:1613
-141:2:1614
-142:0:2372
-143:2:1626
-144:0:2372
-145:2:1629
-146:2:1630
-147:2:1642
-148:2:1643
-149:2:1647
-150:2:1648
-151:2:1656
-152:2:1661
-153:2:1665
-154:2:1666
-155:2:1673
-156:2:1674
-157:2:1685
-158:2:1686
-159:2:1687
-160:2:1698
-161:2:1703
-162:2:1704
-163:0:2372
-164:2:1716
-165:0:2372
-166:2:1717
-167:0:2372
-168:2:1718
-169:0:2372
-170:2:1719
-171:0:2372
-172:2:1720
-173:2:1724
-174:2:1725
-175:2:1733
-176:2:1734
-177:2:1738
-178:2:1739
-179:2:1747
-180:2:1752
-181:2:1756
-182:2:1757
-183:2:1764
-184:2:1765
-185:2:1776
-186:2:1777
-187:2:1778
-188:2:1789
-189:2:1794
-190:2:1795
-191:0:2372
-192:2:2005
-193:0:2372
-194:2:2101
-195:0:2372
-196:2:2102
-197:0:2372
-198:2:2106
-199:0:2372
-200:2:2112
-201:0:2372
-202:2:2116
-203:2:2117
-204:2:2121
-205:2:2125
-206:2:2126
-207:2:2130
-208:2:2138
-209:2:2139
-210:2:2144
-211:2:2151
-212:2:2152
-213:2:2159
-214:2:2164
-215:0:2372
-216:2:2175
-217:0:2372
-218:2:2179
-219:2:2180
-220:2:2184
-221:2:2188
-222:2:2189
-223:2:2193
-224:2:2201
-225:2:2202
-226:2:2207
-227:2:2214
-228:2:2215
-229:2:2222
-230:2:2227
-231:0:2372
-232:2:2238
-233:0:2372
-234:2:2246
-235:2:2247
-236:2:2251
-237:2:2255
-238:2:2256
-239:2:2260
-240:2:2268
-241:2:2269
-242:2:2274
-243:2:2281
-244:2:2282
-245:2:2289
-246:2:2294
-247:0:2372
-248:2:2309
-249:0:2372
-250:2:2310
-251:0:2372
-252:2:1149
-253:0:2372
-254:2:1150
-255:2:1154
-256:2:1155
-257:2:1163
-258:2:1164
-259:2:1168
-260:2:1169
-261:2:1177
-262:2:1182
-263:2:1186
-264:2:1187
-265:2:1194
-266:2:1195
-267:2:1206
-268:2:1207
-269:2:1208
-270:2:1219
-271:2:1224
-272:2:1225
-273:0:2372
-274:2:1237
-275:2:1238
-276:0:2372
-277:2:1242
-278:2:1246
-279:2:1247
-280:2:1255
-281:2:1256
-282:2:1260
-283:2:1261
-284:2:1269
-285:2:1274
-286:2:1275
-287:2:1286
-288:2:1287
-289:2:1298
-290:2:1299
-291:2:1300
-292:2:1311
-293:2:1316
-294:2:1317
-295:0:2372
-296:2:1329
-297:0:2372
-298:2:1330
-299:0:2372
-300:2:1340
-301:0:2372
-302:2:1341
-303:0:2372
-304:2:1345
-305:2:1346
-306:2:1350
-307:2:1354
-308:2:1355
-309:2:1359
-310:2:1367
-311:2:1368
-312:2:1373
-313:2:1380
-314:2:1381
-315:2:1388
-316:2:1393
-317:0:2372
-318:2:1404
-319:0:2372
-320:2:1408
-321:2:1409
-322:2:1413
-323:2:1417
-324:2:1418
-325:2:1422
-326:2:1430
-327:2:1431
-328:2:1436
-329:2:1443
-330:2:1444
-331:2:1451
-332:2:1456
-333:0:2372
-334:2:1467
-335:0:2372
-336:2:1475
-337:2:1476
-338:2:1480
-339:2:1484
-340:2:1485
-341:2:1489
-342:2:1497
-343:2:1498
-344:2:1503
-345:2:1510
-346:2:1511
-347:2:1518
-348:2:1523
-349:0:2372
-350:2:1538
-351:0:2372
-352:2:1539
-353:2:1543
-354:2:1544
-355:2:1552
-356:2:1553
-357:2:1557
-358:2:1558
-359:2:1566
-360:2:1571
-361:2:1575
-362:2:1576
-363:2:1583
-364:2:1584
-365:2:1595
-366:2:1596
-367:2:1597
-368:2:1608
-369:2:1613
-370:2:1614
-371:0:2372
-372:2:1626
-373:0:2372
-374:2:1629
-375:2:1630
-376:2:1642
-377:2:1643
-378:2:1647
-379:2:1648
-380:2:1656
-381:2:1661
-382:2:1665
-383:2:1666
-384:2:1673
-385:2:1674
-386:2:1685
-387:2:1686
-388:2:1687
-389:2:1698
-390:2:1703
-391:2:1704
-392:0:2372
-393:2:1716
-394:0:2372
-395:2:1717
-396:0:2372
-397:2:1718
-398:0:2372
-399:2:1719
-400:0:2372
-401:2:1720
-402:2:1724
-403:2:1725
-404:2:1733
-405:2:1734
-406:2:1738
-407:2:1739
-408:2:1747
-409:2:1752
-410:2:1756
-411:2:1757
-412:2:1764
-413:2:1765
-414:2:1776
-415:2:1777
-416:2:1778
-417:2:1789
-418:2:1794
-419:2:1795
-420:0:2372
-421:2:2005
-422:0:2372
-423:2:2101
-424:0:2372
-425:2:2102
-426:0:2372
-427:2:2106
-428:0:2372
-429:2:2112
-430:0:2372
-431:2:2116
-432:2:2117
-433:2:2121
-434:2:2125
-435:2:2126
-436:2:2130
-437:2:2138
-438:2:2139
-439:2:2144
-440:2:2151
-441:2:2152
-442:2:2159
-443:2:2164
-444:0:2372
-445:2:2175
-446:0:2372
-447:2:2179
-448:2:2180
-449:2:2184
-450:2:2188
-451:2:2189
-452:2:2193
-453:2:2201
-454:2:2202
-455:2:2207
-456:2:2214
-457:2:2215
-458:2:2222
-459:2:2227
-460:0:2372
-461:2:2238
-462:0:2372
-463:2:2246
-464:2:2247
-465:2:2251
-466:2:2255
-467:2:2256
-468:2:2260
-469:2:2268
-470:2:2269
-471:2:2274
-472:2:2281
-473:2:2282
-474:2:2289
-475:2:2294
-476:0:2372
-477:2:2309
-478:0:2372
-479:2:2310
-480:0:2372
-481:2:1149
-482:0:2372
-483:2:1150
-484:2:1154
-485:2:1155
-486:2:1163
-487:2:1164
-488:2:1168
-489:2:1169
-490:2:1177
-491:2:1182
-492:2:1186
-493:2:1187
-494:2:1194
-495:2:1195
-496:2:1206
-497:2:1207
-498:2:1208
-499:2:1219
-500:2:1224
-501:2:1225
-502:0:2372
-503:2:1237
-504:2:1238
-505:0:2372
-506:2:1242
-507:2:1246
-508:2:1247
-509:2:1255
-510:2:1256
-511:2:1260
-512:2:1261
-513:2:1269
-514:2:1274
-515:2:1275
-516:2:1286
-517:2:1287
-518:2:1298
-519:2:1299
-520:2:1300
-521:2:1311
-522:2:1316
-523:2:1317
-524:0:2372
-525:2:1329
-526:0:2372
-527:2:1330
-528:0:2372
-529:2:1340
-530:0:2372
-531:2:1341
-532:0:2372
-533:2:1345
-534:2:1346
-535:2:1350
-536:2:1354
-537:2:1355
-538:2:1359
-539:2:1367
-540:2:1368
-541:2:1373
-542:2:1380
-543:2:1381
-544:2:1388
-545:2:1393
-546:0:2372
-547:2:1404
-548:0:2372
-549:2:1408
-550:2:1409
-551:2:1413
-552:2:1417
-553:2:1418
-554:2:1422
-555:2:1430
-556:2:1431
-557:2:1436
-558:2:1443
-559:2:1444
-560:2:1451
-561:2:1456
-562:0:2372
-563:2:1467
-564:0:2372
-565:2:1475
-566:2:1476
-567:2:1480
-568:2:1484
-569:2:1485
-570:2:1489
-571:2:1497
-572:2:1498
-573:2:1503
-574:2:1510
-575:2:1511
-576:2:1518
-577:2:1523
-578:0:2372
-579:2:1538
-580:0:2372
-581:2:1539
-582:2:1543
-583:2:1544
-584:2:1552
-585:2:1553
-586:2:1557
-587:2:1558
-588:2:1566
-589:2:1571
-590:2:1575
-591:2:1576
-592:2:1583
-593:2:1584
-594:2:1595
-595:2:1596
-596:2:1597
-597:2:1608
-598:2:1613
-599:2:1614
-600:0:2372
-601:2:1626
-602:0:2372
-603:2:1629
-604:2:1630
-605:2:1642
-606:2:1643
-607:2:1647
-608:2:1648
-609:2:1656
-610:2:1661
-611:2:1665
-612:2:1666
-613:2:1673
-614:2:1674
-615:2:1685
-616:2:1686
-617:2:1687
-618:2:1698
-619:2:1703
-620:2:1704
-621:0:2372
-622:2:1716
-623:0:2372
-624:2:1717
-625:0:2372
-626:2:1718
-627:0:2372
-628:2:1719
-629:0:2372
-630:2:1720
-631:2:1724
-632:2:1725
-633:2:1733
-634:2:1734
-635:2:1738
-636:2:1739
-637:2:1747
-638:2:1752
-639:2:1756
-640:2:1757
-641:2:1764
-642:2:1765
-643:2:1776
-644:2:1777
-645:2:1778
-646:2:1789
-647:2:1794
-648:2:1795
-649:0:2372
-650:2:2005
-651:0:2372
-652:2:2101
-653:0:2372
-654:2:2102
-655:0:2372
-656:2:2106
-657:0:2372
-658:2:2112
-659:0:2372
-660:2:2116
-661:2:2117
-662:2:2121
-663:2:2125
-664:2:2126
-665:2:2130
-666:2:2138
-667:2:2139
-668:2:2144
-669:2:2151
-670:2:2152
-671:2:2159
-672:2:2164
-673:0:2372
-674:2:2175
-675:0:2372
-676:2:2179
-677:2:2180
-678:2:2184
-679:2:2188
-680:2:2189
-681:2:2193
-682:2:2201
-683:2:2202
-684:2:2207
-685:2:2214
-686:2:2215
-687:2:2222
-688:2:2227
-689:0:2372
-690:2:2238
-691:0:2372
-692:2:2246
-693:2:2247
-694:2:2251
-695:2:2255
-696:2:2256
-697:2:2260
-698:2:2268
-699:2:2269
-700:2:2274
-701:2:2281
-702:2:2282
-703:2:2289
-704:2:2294
-705:0:2372
-706:2:2309
-707:0:2372
-708:2:2310
-709:0:2372
-710:2:1149
-711:0:2372
-712:2:1150
-713:2:1154
-714:2:1155
-715:2:1163
-716:2:1164
-717:2:1168
-718:2:1169
-719:2:1177
-720:2:1182
-721:2:1186
-722:2:1187
-723:2:1194
-724:2:1195
-725:2:1206
-726:2:1207
-727:2:1208
-728:2:1219
-729:2:1224
-730:2:1225
-731:0:2372
-732:2:1237
-733:2:1238
-734:0:2372
-735:2:1242
-736:2:1246
-737:2:1247
-738:2:1255
-739:2:1256
-740:2:1260
-741:2:1261
-742:2:1269
-743:2:1274
-744:2:1275
-745:2:1286
-746:2:1287
-747:2:1298
-748:2:1299
-749:2:1300
-750:2:1311
-751:2:1316
-752:2:1317
-753:0:2372
-754:2:1329
-755:0:2372
-756:2:1330
-757:0:2372
-758:2:1340
-759:0:2372
-760:2:1341
-761:0:2372
-762:2:1345
-763:2:1346
-764:2:1350
-765:2:1354
-766:2:1355
-767:2:1359
-768:2:1367
-769:2:1368
-770:2:1373
-771:2:1380
-772:2:1381
-773:2:1388
-774:2:1393
-775:0:2372
-776:2:1404
-777:0:2372
-778:2:1408
-779:2:1409
-780:2:1413
-781:2:1417
-782:2:1418
-783:2:1422
-784:2:1430
-785:2:1431
-786:2:1436
-787:2:1443
-788:2:1444
-789:2:1451
-790:2:1456
-791:0:2372
-792:2:1467
-793:0:2372
-794:2:1475
-795:2:1476
-796:2:1480
-797:2:1484
-798:2:1485
-799:2:1489
-800:2:1497
-801:2:1498
-802:2:1503
-803:2:1510
-804:2:1511
-805:2:1518
-806:2:1523
-807:0:2372
-808:2:1538
-809:0:2372
-810:2:1539
-811:2:1543
-812:2:1544
-813:2:1552
-814:2:1553
-815:2:1557
-816:2:1558
-817:2:1566
-818:2:1571
-819:2:1575
-820:2:1576
-821:2:1583
-822:2:1584
-823:2:1595
-824:2:1596
-825:2:1597
-826:2:1608
-827:2:1613
-828:2:1614
-829:0:2372
-830:2:1626
-831:0:2372
-832:2:1629
-833:2:1630
-834:2:1642
-835:2:1643
-836:2:1647
-837:2:1648
-838:2:1656
-839:2:1661
-840:2:1665
-841:2:1666
-842:2:1673
-843:2:1674
-844:2:1685
-845:2:1686
-846:2:1687
-847:2:1698
-848:2:1703
-849:2:1704
-850:0:2372
-851:2:1716
-852:0:2372
-853:2:1717
-854:0:2372
-855:2:1718
-856:0:2372
-857:2:1719
-858:0:2372
-859:2:1720
-860:2:1724
-861:2:1725
-862:2:1733
-863:2:1734
-864:2:1738
-865:2:1739
-866:2:1747
-867:2:1752
-868:2:1756
-869:2:1757
-870:2:1764
-871:2:1765
-872:2:1776
-873:2:1777
-874:2:1778
-875:2:1789
-876:2:1794
-877:2:1795
-878:0:2372
-879:2:2005
-880:0:2372
-881:2:2101
-882:0:2372
-883:2:2102
-884:0:2372
-885:2:2106
-886:0:2372
-887:2:2112
-888:0:2372
-889:2:2116
-890:2:2117
-891:2:2121
-892:2:2125
-893:2:2126
-894:2:2130
-895:2:2138
-896:2:2139
-897:2:2144
-898:2:2151
-899:2:2152
-900:2:2159
-901:2:2164
-902:0:2372
-903:2:2175
-904:0:2372
-905:1:2
-906:0:2372
-907:1:8
-908:0:2372
-909:1:9
-910:0:2372
-911:1:10
-912:0:2372
-913:1:11
-914:0:2372
-915:1:12
-916:1:16
-917:1:17
-918:1:25
-919:1:26
-920:1:30
-921:1:31
-922:1:39
-923:1:44
-924:1:48
-925:1:49
-926:1:63
-927:1:64
-928:1:68
-929:1:69
-930:1:70
-931:1:81
-932:1:86
-933:1:87
-934:0:2372
-935:1:99
-936:0:2372
-937:1:100
-938:1:104
-939:1:105
-940:1:113
-941:1:114
-942:1:118
-943:1:119
-944:1:127
-945:1:132
-946:1:136
-947:1:137
-948:1:151
-949:1:152
-950:1:156
-951:1:157
-952:1:158
-953:1:169
-954:1:174
-955:1:175
-956:0:2372
-957:1:187
-958:0:2372
-959:1:188
-960:0:2372
-961:2:2179
-962:2:2180
-963:2:2184
-964:2:2188
-965:2:2189
-966:2:2193
-967:2:2201
-968:2:2202
-969:2:2207
-970:2:2214
-971:2:2215
-972:2:2222
-973:2:2227
-974:0:2372
-975:2:2238
-976:0:2372
-977:2:2246
-978:2:2247
-979:2:2251
-980:2:2255
-981:2:2256
-982:2:2260
-983:2:2268
-984:2:2269
-985:2:2274
-986:2:2281
-987:2:2282
-988:2:2289
-989:2:2294
-990:0:2372
-991:2:2309
-992:0:2372
-993:2:2310
-994:0:2372
-995:2:1149
-996:0:2372
-997:2:1150
-998:2:1154
-999:2:1155
-1000:2:1163
-1001:2:1164
-1002:2:1168
-1003:2:1169
-1004:2:1177
-1005:2:1182
-1006:2:1186
-1007:2:1187
-1008:2:1194
-1009:2:1195
-1010:2:1206
-1011:2:1207
-1012:2:1208
-1013:2:1219
-1014:2:1224
-1015:2:1225
-1016:0:2372
-1017:2:1237
-1018:2:1238
-1019:0:2372
-1020:2:1242
-1021:2:1246
-1022:2:1247
-1023:2:1255
-1024:2:1256
-1025:2:1260
-1026:2:1261
-1027:2:1269
-1028:2:1274
-1029:2:1275
-1030:2:1286
-1031:2:1287
-1032:2:1298
-1033:2:1299
-1034:2:1300
-1035:2:1311
-1036:2:1316
-1037:2:1317
-1038:0:2372
-1039:2:1329
-1040:0:2372
-1041:2:1330
-1042:0:2372
-1043:2:1340
-1044:0:2372
-1045:2:1341
-1046:0:2372
-1047:2:1345
-1048:2:1346
-1049:2:1350
-1050:2:1354
-1051:2:1355
-1052:2:1359
-1053:2:1367
-1054:2:1368
-1055:2:1373
-1056:2:1380
-1057:2:1381
-1058:2:1388
-1059:2:1393
-1060:0:2372
-1061:2:1404
-1062:0:2372
-1063:1:189
-1064:1:193
-1065:1:194
-1066:1:202
-1067:1:203
-1068:1:207
-1069:1:208
-1070:1:216
-1071:1:221
-1072:1:225
-1073:1:226
-1074:1:233
-1075:1:234
-1076:1:245
-1077:1:246
-1078:1:247
-1079:1:258
-1080:1:270
-1081:1:271
-1082:0:2372
-1083:1:276
-1084:0:2372
-1085:1:477
-1086:0:2372
-1087:1:478
-1088:0:2372
-1089:1:11
-1090:0:2372
-1091:1:12
-1092:1:16
-1093:1:17
-1094:1:25
-1095:1:26
-1096:1:27
-1097:1:39
-1098:1:44
-1099:1:48
-1100:1:49
-1101:1:56
-1102:1:57
-1103:1:68
-1104:1:69
-1105:1:70
-1106:1:81
-1107:1:93
-1108:1:94
-1109:0:2372
-1110:1:99
-1111:0:2372
-1112:1:100
-1113:1:104
-1114:1:105
-1115:1:113
-1116:1:114
-1117:1:118
-1118:1:119
-1119:1:127
-1120:1:132
-1121:1:136
-1122:1:137
-1123:1:144
-1124:1:145
-1125:1:156
-1126:1:157
-1127:1:158
-1128:1:169
-1129:1:181
-1130:1:182
-1131:0:2372
-1132:1:279
-1133:0:2372
-1134:1:280
-1135:0:2372
-1136:1:477
-1137:0:2372
-1138:1:478
-1139:0:2372
-1140:1:483
-1141:0:2372
-1142:1:488
-1143:1:492
-1144:1:493
-1145:1:501
-1146:1:502
-1147:1:503
-1148:1:515
-1149:1:520
-1150:1:524
-1151:1:525
-1152:1:532
-1153:1:533
-1154:1:544
-1155:1:545
-1156:1:546
-1157:1:557
-1158:1:569
-1159:1:570
-1160:0:2372
-1161:1:575
-1162:0:2372
-1163:2:1408
-1164:2:1409
-1165:2:1413
-1166:2:1417
-1167:2:1418
-1168:2:1422
-1169:2:1430
-1170:2:1431
-1171:2:1436
-1172:2:1443
-1173:2:1444
-1174:2:1451
-1175:2:1456
-1176:0:2372
-1177:2:1467
-1178:0:2372
-1179:2:1475
-1180:2:1476
-1181:2:1480
-1182:2:1484
-1183:2:1485
-1184:2:1489
-1185:2:1497
-1186:2:1498
-1187:2:1503
-1188:2:1510
-1189:2:1511
-1190:2:1518
-1191:2:1523
-1192:0:2372
-1193:2:1538
-1194:0:2372
-1195:2:1539
-1196:2:1543
-1197:2:1544
-1198:2:1552
-1199:2:1553
-1200:2:1557
-1201:2:1558
-1202:2:1566
-1203:2:1571
-1204:2:1575
-1205:2:1576
-1206:2:1583
-1207:2:1584
-1208:2:1595
-1209:2:1596
-1210:2:1597
-1211:2:1608
-1212:2:1613
-1213:2:1614
-1214:0:2372
-1215:2:1626
-1216:0:2372
-1217:2:1629
-1218:2:1630
-1219:2:1642
-1220:2:1643
-1221:2:1647
-1222:2:1648
-1223:2:1656
-1224:2:1661
-1225:2:1665
-1226:2:1666
-1227:2:1673
-1228:2:1674
-1229:2:1685
-1230:2:1686
-1231:2:1687
-1232:2:1698
-1233:2:1703
-1234:2:1704
-1235:0:2372
-1236:2:1716
-1237:0:2372
-1238:2:1717
-1239:0:2372
-1240:2:1718
-1241:0:2372
-1242:2:1719
-1243:0:2372
-1244:2:1720
-1245:2:1724
-1246:2:1725
-1247:2:1733
-1248:2:1734
-1249:2:1738
-1250:2:1739
-1251:2:1747
-1252:2:1752
-1253:2:1756
-1254:2:1757
-1255:2:1764
-1256:2:1765
-1257:2:1776
-1258:2:1777
-1259:2:1778
-1260:2:1789
-1261:2:1794
-1262:2:1795
-1263:0:2372
-1264:2:2005
-1265:0:2372
-1266:2:2101
-1267:0:2372
-1268:2:2102
-1269:0:2372
-1270:2:2106
-1271:0:2372
-1272:2:2112
-1273:0:2372
-1274:2:2116
-1275:2:2117
-1276:2:2121
-1277:2:2125
-1278:2:2126
-1279:2:2130
-1280:2:2138
-1281:2:2139
-1282:2:2144
-1283:2:2151
-1284:2:2152
-1285:2:2159
-1286:2:2164
-1287:0:2372
-1288:2:2175
-1289:0:2372
-1290:2:2179
-1291:2:2180
-1292:2:2184
-1293:2:2188
-1294:2:2189
-1295:2:2193
-1296:2:2201
-1297:2:2202
-1298:2:2207
-1299:2:2214
-1300:2:2215
-1301:2:2222
-1302:2:2227
-1303:0:2372
-1304:2:2238
-1305:0:2372
-1306:2:2246
-1307:2:2247
-1308:2:2251
-1309:2:2255
-1310:2:2256
-1311:2:2260
-1312:2:2268
-1313:2:2269
-1314:2:2274
-1315:2:2281
-1316:2:2282
-1317:2:2289
-1318:2:2294
-1319:0:2372
-1320:2:2309
-1321:0:2372
-1322:2:2310
-1323:0:2372
-1324:2:2313
-1325:0:2372
-1326:2:2318
-1327:0:2372
-1328:1:576
-1329:1:580
-1330:1:581
-1331:1:589
-1332:1:590
-1333:1:594
-1334:1:595
-1335:1:603
-1336:1:608
-1337:1:612
-1338:1:613
-1339:1:620
-1340:1:621
-1341:1:632
-1342:1:633
-1343:1:634
-1344:1:645
-1345:1:650
-1346:1:651
-1347:0:2372
-1348:2:2319
-1349:0:2372
-1350:1:663
-1351:0:2370
-1352:2:2318
-1353:0:2376
-1354:1:241
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress.ltl b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.log
deleted file mode 100644 (file)
index ceb438f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-spin: line 296 replacement value: tmp
-spin: line 296 "pan.___", Error: formal par of wait_for_quiescent_state contains replacement value     saw '-2'' near 'readerid'
-spin: 1 error(s) - aborting
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index cc55960..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#define READER_PROGRESS
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#define read_free_race (read_generation == last_free_gen)
-#define read_free      (free_done && data_access)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.log
deleted file mode 100644 (file)
index 985f839..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 28f1299..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#define WRITER_PROGRESS
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#define read_free_race (read_generation == last_free_gen)
-#define read_free      (free_done && data_access)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.define b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.log b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index 26b6236..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-spin: line 297 replacement value: tmp
-spin: line 297 "pan.___", Error: formal par of wait_for_quiescent_state contains replacement value     saw '-2'' near 'readerid'
-spin: 1 error(s) - aborting
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index 43e979c..0000000
+++ /dev/null
@@ -1,411 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#define read_free_race (read_generation == last_free_gen)
-#define read_free      (free_done && data_access)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index ff6f1c5..0000000
+++ /dev/null
@@ -1,4590 +0,0 @@
--2:2:-2
--4:-4:-4
-1:0:2223
-2:2:908
-3:0:2223
-4:1:0
-5:0:2223
-6:1:1
-7:0:2223
-8:1:2
-9:0:2223
-10:1:3
-11:0:2223
-12:2:909
-13:0:2223
-14:2:910
-15:2:914
-16:2:915
-17:2:922
-18:2:926
-19:2:927
-20:2:934
-21:2:938
-22:2:939
-23:2:946
-24:2:947
-25:2:957
-26:2:958
-27:2:968
-28:2:969
-29:0:2221
-30:2:981
-31:2:982
-32:0:2227
-33:2:986
-34:2:990
-35:2:991
-36:2:998
-37:2:1002
-38:2:1003
-39:2:1010
-40:2:1011
-41:2:1022
-42:2:1023
-43:2:1033
-44:2:1034
-45:2:1044
-46:2:1045
-47:0:2227
-48:2:1057
-49:0:2227
-50:2:1058
-51:0:2227
-52:2:1068
-53:0:2227
-54:2:1069
-55:0:2227
-56:2:1073
-57:2:1074
-58:2:1080
-59:2:1081
-60:2:1087
-61:2:1088
-62:2:1093
-63:2:1099
-64:2:1105
-65:0:2227
-66:2:1116
-67:0:2227
-68:2:1120
-69:2:1121
-70:2:1127
-71:2:1128
-72:2:1134
-73:2:1135
-74:2:1140
-75:2:1146
-76:2:1152
-77:0:2227
-78:2:1163
-79:0:2227
-80:2:1171
-81:2:1172
-82:2:1178
-83:2:1179
-84:2:1185
-85:2:1186
-86:2:1191
-87:2:1197
-88:2:1203
-89:0:2227
-90:2:1218
-91:0:2227
-92:2:1219
-93:2:1223
-94:2:1224
-95:2:1231
-96:2:1235
-97:2:1236
-98:2:1243
-99:2:1247
-100:2:1248
-101:2:1255
-102:2:1256
-103:2:1266
-104:2:1267
-105:2:1277
-106:2:1278
-107:0:2227
-108:2:1290
-109:0:2227
-110:2:1293
-111:2:1294
-112:2:1305
-113:2:1309
-114:2:1310
-115:2:1317
-116:2:1321
-117:2:1322
-118:2:1329
-119:2:1330
-120:2:1340
-121:2:1341
-122:2:1351
-123:2:1352
-124:0:2227
-125:2:1364
-126:0:2227
-127:2:1365
-128:0:2227
-129:2:1366
-130:0:2227
-131:2:1367
-132:0:2227
-133:2:1368
-134:2:1372
-135:2:1373
-136:2:1380
-137:2:1384
-138:2:1385
-139:2:1392
-140:2:1396
-141:2:1397
-142:2:1404
-143:2:1405
-144:2:1415
-145:2:1416
-146:2:1426
-147:2:1427
-148:0:2227
-149:2:1511
-150:0:2227
-151:2:1591
-152:0:2227
-153:2:1592
-154:0:2227
-155:2:1596
-156:0:2227
-157:2:1602
-158:2:1606
-159:2:1607
-160:2:1614
-161:2:1618
-162:2:1619
-163:2:1626
-164:2:1630
-165:2:1631
-166:2:1638
-167:2:1639
-168:2:1649
-169:2:1650
-170:2:1660
-171:2:1661
-172:0:2227
-173:2:1673
-174:0:2227
-175:2:1674
-176:2:1678
-177:2:1679
-178:2:1686
-179:2:1690
-180:2:1691
-181:2:1698
-182:2:1702
-183:2:1703
-184:2:1710
-185:2:1711
-186:2:1721
-187:2:1722
-188:2:1732
-189:2:1733
-190:0:2227
-191:2:1745
-192:0:2227
-193:1:4
-194:1:8
-195:1:9
-196:1:16
-197:1:20
-198:1:21
-199:1:28
-200:1:32
-201:1:33
-202:1:40
-203:1:41
-204:1:51
-205:1:52
-206:1:62
-207:1:63
-208:0:2227
-209:1:75
-210:0:2227
-211:1:76
-212:1:80
-213:1:81
-214:1:88
-215:1:92
-216:1:93
-217:1:100
-218:1:104
-219:1:105
-220:1:112
-221:1:113
-222:1:123
-223:1:124
-224:1:134
-225:1:135
-226:0:2227
-227:1:147
-228:0:2227
-229:1:148
-230:0:2227
-231:1:149
-232:1:153
-233:1:154
-234:1:161
-235:1:165
-236:1:166
-237:1:173
-238:1:177
-239:1:178
-240:1:185
-241:1:186
-242:1:196
-243:1:197
-244:1:207
-245:1:208
-246:0:2227
-247:1:220
-248:0:2227
-249:1:373
-250:0:2227
-251:1:374
-252:0:2227
-253:1:3
-254:0:2227
-255:1:4
-256:1:8
-257:1:9
-258:1:16
-259:1:17
-260:1:28
-261:1:32
-262:1:33
-263:1:40
-264:1:41
-265:1:51
-266:1:52
-267:1:62
-268:1:63
-269:0:2227
-270:2:1748
-271:2:1749
-272:2:1760
-273:2:1764
-274:2:1765
-275:2:1772
-276:2:1776
-277:2:1777
-278:2:1784
-279:2:1785
-280:2:1795
-281:2:1796
-282:2:1806
-283:2:1807
-284:0:2227
-285:2:1819
-286:0:2227
-287:2:1820
-288:0:2227
-289:2:1821
-290:0:2227
-291:2:1822
-292:0:2227
-293:2:1823
-294:2:1827
-295:2:1828
-296:2:1835
-297:2:1839
-298:2:1840
-299:2:1847
-300:2:1851
-301:2:1852
-302:2:1859
-303:2:1860
-304:2:1870
-305:2:1871
-306:2:1881
-307:2:1882
-308:0:2227
-309:2:1894
-310:0:2227
-311:2:1895
-312:2:1899
-313:2:1900
-314:2:1907
-315:2:1911
-316:2:1912
-317:2:1919
-318:2:1923
-319:2:1924
-320:2:1931
-321:2:1932
-322:2:1942
-323:2:1943
-324:2:1953
-325:2:1954
-326:0:2227
-327:2:1821
-328:0:2227
-329:1:75
-330:0:2227
-331:2:1822
-332:0:2227
-333:2:1823
-334:2:1827
-335:2:1828
-336:2:1835
-337:2:1839
-338:2:1840
-339:2:1847
-340:2:1851
-341:2:1852
-342:2:1859
-343:2:1860
-344:2:1870
-345:2:1871
-346:2:1881
-347:2:1882
-348:0:2227
-349:2:1894
-350:0:2227
-351:2:1895
-352:2:1899
-353:2:1900
-354:2:1907
-355:2:1911
-356:2:1912
-357:2:1919
-358:2:1923
-359:2:1924
-360:2:1931
-361:2:1932
-362:2:1942
-363:2:1943
-364:2:1953
-365:2:1954
-366:0:2227
-367:2:1821
-368:0:2227
-369:1:76
-370:1:80
-371:1:81
-372:1:88
-373:1:92
-374:1:93
-375:1:100
-376:1:104
-377:1:105
-378:1:112
-379:1:113
-380:1:123
-381:1:124
-382:1:134
-383:1:135
-384:0:2227
-385:1:223
-386:0:2227
-387:2:1822
-388:0:2227
-389:2:1823
-390:2:1827
-391:2:1828
-392:2:1835
-393:2:1839
-394:2:1840
-395:2:1847
-396:2:1851
-397:2:1852
-398:2:1859
-399:2:1860
-400:2:1870
-401:2:1871
-402:2:1881
-403:2:1882
-404:0:2227
-405:2:1894
-406:0:2227
-407:2:1895
-408:2:1899
-409:2:1900
-410:2:1907
-411:2:1911
-412:2:1912
-413:2:1919
-414:2:1923
-415:2:1924
-416:2:1931
-417:2:1932
-418:2:1942
-419:2:1943
-420:2:1953
-421:2:1954
-422:0:2227
-423:2:1821
-424:0:2227
-425:1:224
-426:0:2227
-427:1:373
-428:0:2227
-429:1:374
-430:0:2227
-431:1:379
-432:0:2227
-433:2:1822
-434:0:2227
-435:2:1823
-436:2:1827
-437:2:1828
-438:2:1835
-439:2:1839
-440:2:1840
-441:2:1847
-442:2:1851
-443:2:1852
-444:2:1859
-445:2:1860
-446:2:1870
-447:2:1871
-448:2:1881
-449:2:1882
-450:0:2227
-451:2:1894
-452:0:2227
-453:2:1895
-454:2:1899
-455:2:1900
-456:2:1907
-457:2:1911
-458:2:1912
-459:2:1919
-460:2:1923
-461:2:1924
-462:2:1931
-463:2:1932
-464:2:1942
-465:2:1943
-466:2:1953
-467:2:1954
-468:0:2227
-469:2:1821
-470:0:2227
-471:1:384
-472:1:388
-473:1:389
-474:1:396
-475:1:397
-476:1:408
-477:1:412
-478:1:413
-479:1:420
-480:1:421
-481:1:431
-482:1:432
-483:1:442
-484:1:443
-485:0:2227
-486:2:1822
-487:0:2227
-488:2:1823
-489:2:1827
-490:2:1828
-491:2:1835
-492:2:1839
-493:2:1840
-494:2:1847
-495:2:1851
-496:2:1852
-497:2:1859
-498:2:1860
-499:2:1870
-500:2:1871
-501:2:1881
-502:2:1882
-503:0:2227
-504:2:1894
-505:0:2227
-506:2:1895
-507:2:1899
-508:2:1900
-509:2:1907
-510:2:1911
-511:2:1912
-512:2:1919
-513:2:1923
-514:2:1924
-515:2:1931
-516:2:1932
-517:2:1942
-518:2:1943
-519:2:1953
-520:2:1954
-521:0:2227
-522:2:1821
-523:0:2227
-524:2:1822
-525:0:2227
-526:2:1823
-527:2:1827
-528:2:1828
-529:2:1835
-530:2:1839
-531:2:1840
-532:2:1847
-533:2:1851
-534:2:1852
-535:2:1859
-536:2:1860
-537:2:1870
-538:2:1871
-539:2:1881
-540:2:1882
-541:0:2227
-542:1:455
-543:0:2227
-544:2:1894
-545:0:2227
-546:2:1895
-547:2:1899
-548:2:1900
-549:2:1907
-550:2:1911
-551:2:1912
-552:2:1919
-553:2:1923
-554:2:1924
-555:2:1931
-556:2:1932
-557:2:1942
-558:2:1943
-559:2:1953
-560:2:1954
-561:0:2227
-562:2:1821
-563:0:2227
-564:2:1822
-565:0:2227
-566:2:1823
-567:2:1827
-568:2:1828
-569:2:1835
-570:2:1839
-571:2:1840
-572:2:1847
-573:2:1851
-574:2:1852
-575:2:1859
-576:2:1860
-577:2:1870
-578:2:1871
-579:2:1881
-580:2:1882
-581:0:2227
-582:1:456
-583:1:460
-584:1:461
-585:1:468
-586:1:472
-587:1:473
-588:1:480
-589:1:484
-590:1:485
-591:1:492
-592:1:493
-593:1:503
-594:1:504
-595:1:514
-596:1:515
-597:0:2227
-598:2:1894
-599:0:2227
-600:2:1895
-601:2:1899
-602:2:1900
-603:2:1907
-604:2:1911
-605:2:1912
-606:2:1919
-607:2:1923
-608:2:1924
-609:2:1931
-610:2:1932
-611:2:1942
-612:2:1943
-613:2:1953
-614:2:1954
-615:0:2227
-616:2:1821
-617:0:2227
-618:2:1822
-619:0:2227
-620:2:1823
-621:2:1827
-622:2:1828
-623:2:1835
-624:2:1839
-625:2:1840
-626:2:1847
-627:2:1851
-628:2:1852
-629:2:1859
-630:2:1860
-631:2:1870
-632:2:1871
-633:2:1881
-634:2:1882
-635:0:2227
-636:1:527
-637:0:2227
-638:2:1894
-639:0:2227
-640:2:1895
-641:2:1899
-642:2:1900
-643:2:1907
-644:2:1911
-645:2:1912
-646:2:1919
-647:2:1923
-648:2:1924
-649:2:1931
-650:2:1932
-651:2:1942
-652:2:1943
-653:2:1953
-654:2:1954
-655:0:2227
-656:2:1821
-657:0:2227
-658:2:1822
-659:0:2227
-660:2:1823
-661:2:1827
-662:2:1828
-663:2:1835
-664:2:1839
-665:2:1840
-666:2:1847
-667:2:1851
-668:2:1852
-669:2:1859
-670:2:1860
-671:2:1870
-672:2:1871
-673:2:1881
-674:2:1882
-675:0:2227
-676:1:528
-677:1:532
-678:1:533
-679:1:540
-680:1:544
-681:1:545
-682:1:552
-683:1:556
-684:1:557
-685:1:564
-686:1:565
-687:1:575
-688:1:576
-689:1:586
-690:1:587
-691:0:2227
-692:2:1894
-693:0:2227
-694:2:1895
-695:2:1899
-696:2:1900
-697:2:1907
-698:2:1911
-699:2:1912
-700:2:1919
-701:2:1923
-702:2:1924
-703:2:1931
-704:2:1932
-705:2:1942
-706:2:1943
-707:2:1953
-708:2:1954
-709:0:2227
-710:2:1821
-711:0:2227
-712:2:1822
-713:0:2227
-714:2:1823
-715:2:1827
-716:2:1828
-717:2:1835
-718:2:1839
-719:2:1840
-720:2:1847
-721:2:1851
-722:2:1852
-723:2:1859
-724:2:1860
-725:2:1870
-726:2:1871
-727:2:1881
-728:2:1882
-729:0:2227
-730:1:599
-731:0:2227
-732:1:600
-733:0:2227
-734:1:601
-735:0:2227
-736:1:746
-737:0:2227
-738:1:747
-739:0:2227
-740:2:1894
-741:0:2227
-742:2:1895
-743:2:1899
-744:2:1900
-745:2:1907
-746:2:1911
-747:2:1912
-748:2:1919
-749:2:1923
-750:2:1924
-751:2:1931
-752:2:1932
-753:2:1942
-754:2:1943
-755:2:1953
-756:2:1954
-757:0:2227
-758:2:1821
-759:0:2227
-760:2:1822
-761:0:2227
-762:2:1823
-763:2:1827
-764:2:1828
-765:2:1835
-766:2:1839
-767:2:1840
-768:2:1847
-769:2:1851
-770:2:1852
-771:2:1859
-772:2:1860
-773:2:1870
-774:2:1871
-775:2:1881
-776:2:1882
-777:0:2227
-778:1:751
-779:0:2227
-780:2:1894
-781:0:2227
-782:2:1895
-783:2:1899
-784:2:1900
-785:2:1907
-786:2:1911
-787:2:1912
-788:2:1919
-789:2:1923
-790:2:1924
-791:2:1931
-792:2:1932
-793:2:1942
-794:2:1943
-795:2:1953
-796:2:1954
-797:0:2227
-798:2:1821
-799:0:2227
-800:2:1822
-801:0:2227
-802:2:1823
-803:2:1827
-804:2:1828
-805:2:1835
-806:2:1839
-807:2:1840
-808:2:1847
-809:2:1851
-810:2:1852
-811:2:1859
-812:2:1860
-813:2:1870
-814:2:1871
-815:2:1881
-816:2:1882
-817:0:2227
-818:1:752
-819:1:756
-820:1:757
-821:1:764
-822:1:768
-823:1:769
-824:1:776
-825:1:780
-826:1:781
-827:1:788
-828:1:789
-829:1:799
-830:1:800
-831:1:810
-832:1:811
-833:0:2227
-834:2:1894
-835:0:2227
-836:2:1895
-837:2:1899
-838:2:1900
-839:2:1907
-840:2:1911
-841:2:1912
-842:2:1919
-843:2:1923
-844:2:1924
-845:2:1931
-846:2:1932
-847:2:1942
-848:2:1943
-849:2:1953
-850:2:1954
-851:0:2227
-852:2:1821
-853:0:2227
-854:2:1822
-855:0:2227
-856:2:1823
-857:2:1827
-858:2:1828
-859:2:1835
-860:2:1839
-861:2:1840
-862:2:1847
-863:2:1851
-864:2:1852
-865:2:1859
-866:2:1860
-867:2:1870
-868:2:1871
-869:2:1881
-870:2:1882
-871:0:2227
-872:1:823
-873:0:2227
-874:1:601
-875:0:2227
-876:1:746
-877:0:2227
-878:1:747
-879:0:2227
-880:2:1894
-881:0:2227
-882:2:1895
-883:2:1899
-884:2:1900
-885:2:1907
-886:2:1911
-887:2:1912
-888:2:1919
-889:2:1923
-890:2:1924
-891:2:1931
-892:2:1932
-893:2:1942
-894:2:1943
-895:2:1953
-896:2:1954
-897:0:2227
-898:2:1821
-899:0:2227
-900:2:1822
-901:0:2227
-902:2:1823
-903:2:1827
-904:2:1828
-905:2:1835
-906:2:1839
-907:2:1840
-908:2:1847
-909:2:1851
-910:2:1852
-911:2:1859
-912:2:1860
-913:2:1870
-914:2:1871
-915:2:1881
-916:2:1882
-917:0:2227
-918:1:751
-919:0:2227
-920:2:1894
-921:0:2227
-922:2:1895
-923:2:1899
-924:2:1900
-925:2:1907
-926:2:1911
-927:2:1912
-928:2:1919
-929:2:1923
-930:2:1924
-931:2:1931
-932:2:1932
-933:2:1942
-934:2:1943
-935:2:1953
-936:2:1954
-937:0:2227
-938:2:1821
-939:0:2227
-940:2:1822
-941:0:2227
-942:2:1823
-943:2:1827
-944:2:1828
-945:2:1835
-946:2:1839
-947:2:1840
-948:2:1847
-949:2:1851
-950:2:1852
-951:2:1859
-952:2:1860
-953:2:1870
-954:2:1871
-955:2:1881
-956:2:1882
-957:0:2227
-958:1:752
-959:1:756
-960:1:757
-961:1:764
-962:1:765
-963:1:776
-964:1:780
-965:1:781
-966:1:788
-967:1:789
-968:1:799
-969:1:800
-970:1:810
-971:1:811
-972:0:2227
-973:2:1894
-974:0:2227
-975:2:1895
-976:2:1899
-977:2:1900
-978:2:1907
-979:2:1911
-980:2:1912
-981:2:1919
-982:2:1923
-983:2:1924
-984:2:1931
-985:2:1932
-986:2:1942
-987:2:1943
-988:2:1953
-989:2:1954
-990:0:2227
-991:2:1821
-992:0:2227
-993:2:1822
-994:0:2227
-995:2:1823
-996:2:1827
-997:2:1828
-998:2:1835
-999:2:1839
-1000:2:1840
-1001:2:1847
-1002:2:1851
-1003:2:1852
-1004:2:1859
-1005:2:1860
-1006:2:1870
-1007:2:1871
-1008:2:1881
-1009:2:1882
-1010:0:2227
-1011:2:1894
-1012:0:2227
-1013:1:823
-1014:0:2227
-1015:1:827
-1016:0:2227
-1017:2:1895
-1018:2:1899
-1019:2:1900
-1020:2:1907
-1021:2:1911
-1022:2:1912
-1023:2:1919
-1024:2:1923
-1025:2:1924
-1026:2:1931
-1027:2:1932
-1028:2:1942
-1029:2:1943
-1030:2:1953
-1031:2:1954
-1032:0:2227
-1033:2:1821
-1034:0:2227
-1035:2:1822
-1036:0:2227
-1037:2:1823
-1038:2:1827
-1039:2:1828
-1040:2:1835
-1041:2:1839
-1042:2:1840
-1043:2:1847
-1044:2:1851
-1045:2:1852
-1046:2:1859
-1047:2:1860
-1048:2:1870
-1049:2:1871
-1050:2:1881
-1051:2:1882
-1052:0:2227
-1053:2:1894
-1054:0:2227
-1055:1:832
-1056:1:836
-1057:1:837
-1058:1:844
-1059:1:845
-1060:1:856
-1061:1:860
-1062:1:861
-1063:1:868
-1064:1:869
-1065:1:879
-1066:1:880
-1067:1:890
-1068:1:891
-1069:0:2227
-1070:1:1
-1071:0:2227
-1072:1:2
-1073:0:2227
-1074:1:3
-1075:0:2227
-1076:2:1895
-1077:2:1899
-1078:2:1900
-1079:2:1907
-1080:2:1911
-1081:2:1912
-1082:2:1919
-1083:2:1923
-1084:2:1924
-1085:2:1931
-1086:2:1932
-1087:2:1949
-1088:2:1950
-1089:2:1953
-1090:2:1954
-1091:0:2227
-1092:2:1821
-1093:0:2227
-1094:2:1822
-1095:0:2227
-1096:2:1823
-1097:2:1827
-1098:2:1828
-1099:2:1835
-1100:2:1839
-1101:2:1840
-1102:2:1847
-1103:2:1851
-1104:2:1852
-1105:2:1859
-1106:2:1860
-1107:2:1877
-1108:2:1878
-1109:2:1881
-1110:2:1882
-1111:0:2227
-1112:2:1894
-1113:0:2227
-1114:1:4
-1115:1:8
-1116:1:9
-1117:1:16
-1118:1:20
-1119:1:21
-1120:1:28
-1121:1:32
-1122:1:33
-1123:1:40
-1124:1:41
-1125:1:51
-1126:1:52
-1127:1:62
-1128:1:63
-1129:0:2227
-1130:2:1895
-1131:2:1899
-1132:2:1900
-1133:2:1907
-1134:2:1911
-1135:2:1912
-1136:2:1919
-1137:2:1923
-1138:2:1924
-1139:2:1931
-1140:2:1932
-1141:2:1949
-1142:2:1950
-1143:2:1953
-1144:2:1954
-1145:0:2227
-1146:2:1821
-1147:0:2227
-1148:2:1822
-1149:0:2227
-1150:2:1823
-1151:2:1827
-1152:2:1828
-1153:2:1835
-1154:2:1839
-1155:2:1840
-1156:2:1847
-1157:2:1851
-1158:2:1852
-1159:2:1859
-1160:2:1860
-1161:2:1877
-1162:2:1878
-1163:2:1881
-1164:2:1882
-1165:0:2227
-1166:2:1894
-1167:0:2227
-1168:1:75
-1169:0:2227
-1170:2:1895
-1171:2:1899
-1172:2:1900
-1173:2:1907
-1174:2:1911
-1175:2:1912
-1176:2:1919
-1177:2:1923
-1178:2:1924
-1179:2:1931
-1180:2:1932
-1181:2:1949
-1182:2:1950
-1183:2:1953
-1184:2:1954
-1185:0:2227
-1186:2:1821
-1187:0:2227
-1188:2:1822
-1189:0:2227
-1190:2:1823
-1191:2:1827
-1192:2:1828
-1193:2:1835
-1194:2:1839
-1195:2:1840
-1196:2:1847
-1197:2:1851
-1198:2:1852
-1199:2:1859
-1200:2:1860
-1201:2:1877
-1202:2:1878
-1203:2:1881
-1204:2:1882
-1205:0:2227
-1206:2:1894
-1207:0:2227
-1208:1:76
-1209:1:80
-1210:1:81
-1211:1:88
-1212:1:92
-1213:1:93
-1214:1:100
-1215:1:104
-1216:1:105
-1217:1:112
-1218:1:113
-1219:1:123
-1220:1:124
-1221:1:134
-1222:1:135
-1223:0:2227
-1224:1:147
-1225:0:2227
-1226:2:1895
-1227:2:1899
-1228:2:1900
-1229:2:1907
-1230:2:1911
-1231:2:1912
-1232:2:1919
-1233:2:1923
-1234:2:1924
-1235:2:1931
-1236:2:1932
-1237:2:1949
-1238:2:1950
-1239:2:1953
-1240:2:1954
-1241:0:2227
-1242:2:1821
-1243:0:2227
-1244:2:1822
-1245:0:2227
-1246:2:1823
-1247:2:1827
-1248:2:1828
-1249:2:1835
-1250:2:1839
-1251:2:1840
-1252:2:1847
-1253:2:1851
-1254:2:1852
-1255:2:1859
-1256:2:1860
-1257:2:1877
-1258:2:1878
-1259:2:1881
-1260:2:1882
-1261:0:2227
-1262:2:1894
-1263:0:2227
-1264:1:148
-1265:0:2227
-1266:2:1895
-1267:2:1899
-1268:2:1900
-1269:2:1907
-1270:2:1911
-1271:2:1912
-1272:2:1919
-1273:2:1923
-1274:2:1924
-1275:2:1931
-1276:2:1932
-1277:2:1949
-1278:2:1950
-1279:2:1953
-1280:2:1954
-1281:0:2227
-1282:2:1821
-1283:0:2227
-1284:2:1822
-1285:0:2227
-1286:2:1823
-1287:2:1827
-1288:2:1828
-1289:2:1835
-1290:2:1839
-1291:2:1840
-1292:2:1847
-1293:2:1851
-1294:2:1852
-1295:2:1859
-1296:2:1860
-1297:2:1877
-1298:2:1878
-1299:2:1881
-1300:2:1882
-1301:0:2227
-1302:2:1894
-1303:0:2227
-1304:1:149
-1305:1:153
-1306:1:154
-1307:1:161
-1308:1:165
-1309:1:166
-1310:1:173
-1311:1:177
-1312:1:178
-1313:1:185
-1314:1:186
-1315:1:196
-1316:1:197
-1317:1:207
-1318:1:208
-1319:0:2227
-1320:2:1895
-1321:2:1899
-1322:2:1900
-1323:2:1907
-1324:2:1911
-1325:2:1912
-1326:2:1919
-1327:2:1923
-1328:2:1924
-1329:2:1931
-1330:2:1932
-1331:2:1949
-1332:2:1950
-1333:2:1953
-1334:2:1954
-1335:0:2227
-1336:2:1821
-1337:0:2227
-1338:2:1822
-1339:0:2227
-1340:2:1823
-1341:2:1827
-1342:2:1828
-1343:2:1835
-1344:2:1839
-1345:2:1840
-1346:2:1847
-1347:2:1851
-1348:2:1852
-1349:2:1859
-1350:2:1860
-1351:2:1877
-1352:2:1878
-1353:2:1881
-1354:2:1882
-1355:0:2227
-1356:2:1894
-1357:0:2227
-1358:1:220
-1359:0:2227
-1360:1:373
-1361:0:2227
-1362:1:374
-1363:0:2227
-1364:1:3
-1365:0:2227
-1366:2:1895
-1367:2:1899
-1368:2:1900
-1369:2:1907
-1370:2:1911
-1371:2:1912
-1372:2:1919
-1373:2:1923
-1374:2:1924
-1375:2:1931
-1376:2:1932
-1377:2:1949
-1378:2:1950
-1379:2:1953
-1380:2:1954
-1381:0:2227
-1382:2:1821
-1383:0:2227
-1384:2:1822
-1385:0:2227
-1386:2:1823
-1387:2:1827
-1388:2:1828
-1389:2:1835
-1390:2:1839
-1391:2:1840
-1392:2:1847
-1393:2:1851
-1394:2:1852
-1395:2:1859
-1396:2:1860
-1397:2:1877
-1398:2:1878
-1399:2:1881
-1400:2:1882
-1401:0:2227
-1402:2:1894
-1403:0:2227
-1404:1:4
-1405:1:8
-1406:1:9
-1407:1:16
-1408:1:17
-1409:1:28
-1410:1:32
-1411:1:33
-1412:1:40
-1413:1:41
-1414:1:51
-1415:1:52
-1416:1:62
-1417:1:63
-1418:0:2227
-1419:2:1895
-1420:2:1899
-1421:2:1900
-1422:2:1907
-1423:2:1911
-1424:2:1912
-1425:2:1919
-1426:2:1923
-1427:2:1924
-1428:2:1931
-1429:2:1932
-1430:2:1949
-1431:2:1950
-1432:2:1953
-1433:2:1954
-1434:0:2227
-1435:2:1821
-1436:0:2227
-1437:2:1822
--1:-1:-1
-1438:0:2227
-1439:2:1823
-1440:2:1827
-1441:2:1828
-1442:2:1835
-1443:2:1839
-1444:2:1840
-1445:2:1847
-1446:2:1851
-1447:2:1852
-1448:2:1859
-1449:2:1860
-1450:2:1877
-1451:2:1878
-1452:2:1881
-1453:2:1882
-1454:0:2227
-1455:2:1894
-1456:0:2227
-1457:1:75
-1458:0:2227
-1459:2:1895
-1460:2:1899
-1461:2:1900
-1462:2:1907
-1463:2:1911
-1464:2:1912
-1465:2:1919
-1466:2:1923
-1467:2:1924
-1468:2:1931
-1469:2:1932
-1470:2:1949
-1471:2:1950
-1472:2:1953
-1473:2:1954
-1474:0:2227
-1475:2:1821
-1476:0:2227
-1477:2:1822
-1478:0:2227
-1479:2:1823
-1480:2:1827
-1481:2:1828
-1482:2:1835
-1483:2:1839
-1484:2:1840
-1485:2:1847
-1486:2:1851
-1487:2:1852
-1488:2:1859
-1489:2:1860
-1490:2:1877
-1491:2:1878
-1492:2:1881
-1493:2:1882
-1494:0:2227
-1495:2:1894
-1496:0:2227
-1497:1:76
-1498:1:80
-1499:1:81
-1500:1:88
-1501:1:92
-1502:1:93
-1503:1:100
-1504:1:104
-1505:1:105
-1506:1:112
-1507:1:113
-1508:1:123
-1509:1:124
-1510:1:134
-1511:1:135
-1512:0:2227
-1513:1:223
-1514:0:2227
-1515:2:1895
-1516:2:1899
-1517:2:1900
-1518:2:1907
-1519:2:1911
-1520:2:1912
-1521:2:1919
-1522:2:1923
-1523:2:1924
-1524:2:1931
-1525:2:1932
-1526:2:1949
-1527:2:1950
-1528:2:1953
-1529:2:1954
-1530:0:2227
-1531:2:1821
-1532:0:2227
-1533:2:1822
-1534:0:2227
-1535:2:1823
-1536:2:1827
-1537:2:1828
-1538:2:1835
-1539:2:1839
-1540:2:1840
-1541:2:1847
-1542:2:1851
-1543:2:1852
-1544:2:1859
-1545:2:1860
-1546:2:1877
-1547:2:1878
-1548:2:1881
-1549:2:1882
-1550:0:2227
-1551:2:1894
-1552:0:2227
-1553:1:224
-1554:0:2227
-1555:1:373
-1556:0:2227
-1557:1:374
-1558:0:2227
-1559:1:379
-1560:0:2227
-1561:2:1895
-1562:2:1899
-1563:2:1900
-1564:2:1907
-1565:2:1911
-1566:2:1912
-1567:2:1919
-1568:2:1923
-1569:2:1924
-1570:2:1931
-1571:2:1932
-1572:2:1949
-1573:2:1950
-1574:2:1953
-1575:2:1954
-1576:0:2227
-1577:2:1821
-1578:0:2227
-1579:2:1822
-1580:0:2227
-1581:2:1823
-1582:2:1827
-1583:2:1828
-1584:2:1835
-1585:2:1839
-1586:2:1840
-1587:2:1847
-1588:2:1851
-1589:2:1852
-1590:2:1859
-1591:2:1860
-1592:2:1877
-1593:2:1878
-1594:2:1881
-1595:2:1882
-1596:0:2227
-1597:2:1894
-1598:0:2227
-1599:1:384
-1600:1:388
-1601:1:389
-1602:1:396
-1603:1:397
-1604:1:408
-1605:1:412
-1606:1:413
-1607:1:420
-1608:1:421
-1609:1:431
-1610:1:432
-1611:1:442
-1612:1:443
-1613:0:2227
-1614:2:1895
-1615:2:1899
-1616:2:1900
-1617:2:1907
-1618:2:1911
-1619:2:1912
-1620:2:1919
-1621:2:1923
-1622:2:1924
-1623:2:1931
-1624:2:1932
-1625:2:1949
-1626:2:1950
-1627:2:1953
-1628:2:1954
-1629:0:2227
-1630:2:1821
-1631:0:2227
-1632:2:1822
-1633:0:2227
-1634:2:1823
-1635:2:1827
-1636:2:1828
-1637:2:1835
-1638:2:1839
-1639:2:1840
-1640:2:1847
-1641:2:1851
-1642:2:1852
-1643:2:1859
-1644:2:1860
-1645:2:1877
-1646:2:1878
-1647:2:1881
-1648:2:1882
-1649:0:2227
-1650:2:1894
-1651:0:2227
-1652:1:455
-1653:0:2227
-1654:2:1895
-1655:2:1899
-1656:2:1900
-1657:2:1907
-1658:2:1911
-1659:2:1912
-1660:2:1919
-1661:2:1923
-1662:2:1924
-1663:2:1931
-1664:2:1932
-1665:2:1949
-1666:2:1950
-1667:2:1953
-1668:2:1954
-1669:0:2227
-1670:2:1821
-1671:0:2227
-1672:2:1822
-1673:0:2227
-1674:2:1823
-1675:2:1827
-1676:2:1828
-1677:2:1835
-1678:2:1839
-1679:2:1840
-1680:2:1847
-1681:2:1851
-1682:2:1852
-1683:2:1859
-1684:2:1860
-1685:2:1877
-1686:2:1878
-1687:2:1881
-1688:2:1882
-1689:0:2227
-1690:2:1894
-1691:0:2227
-1692:1:456
-1693:1:460
-1694:1:461
-1695:1:468
-1696:1:472
-1697:1:473
-1698:1:480
-1699:1:484
-1700:1:485
-1701:1:492
-1702:1:493
-1703:1:503
-1704:1:504
-1705:1:514
-1706:1:515
-1707:0:2227
-1708:2:1895
-1709:2:1899
-1710:2:1900
-1711:2:1907
-1712:2:1911
-1713:2:1912
-1714:2:1919
-1715:2:1923
-1716:2:1924
-1717:2:1931
-1718:2:1932
-1719:2:1949
-1720:2:1950
-1721:2:1953
-1722:2:1954
-1723:0:2227
-1724:2:1821
-1725:0:2227
-1726:2:1822
-1727:0:2227
-1728:2:1823
-1729:2:1827
-1730:2:1828
-1731:2:1835
-1732:2:1839
-1733:2:1840
-1734:2:1847
-1735:2:1851
-1736:2:1852
-1737:2:1859
-1738:2:1860
-1739:2:1877
-1740:2:1878
-1741:2:1881
-1742:2:1882
-1743:0:2227
-1744:2:1894
-1745:0:2227
-1746:1:527
-1747:0:2227
-1748:2:1895
-1749:2:1899
-1750:2:1900
-1751:2:1907
-1752:2:1911
-1753:2:1912
-1754:2:1919
-1755:2:1923
-1756:2:1924
-1757:2:1931
-1758:2:1932
-1759:2:1949
-1760:2:1950
-1761:2:1953
-1762:2:1954
-1763:0:2227
-1764:2:1821
-1765:0:2227
-1766:2:1822
-1767:0:2227
-1768:2:1823
-1769:2:1827
-1770:2:1828
-1771:2:1835
-1772:2:1839
-1773:2:1840
-1774:2:1847
-1775:2:1851
-1776:2:1852
-1777:2:1859
-1778:2:1860
-1779:2:1877
-1780:2:1878
-1781:2:1881
-1782:2:1882
-1783:0:2227
-1784:2:1894
-1785:0:2227
-1786:1:528
-1787:1:532
-1788:1:533
-1789:1:540
-1790:1:544
-1791:1:545
-1792:1:552
-1793:1:556
-1794:1:557
-1795:1:564
-1796:1:565
-1797:1:575
-1798:1:576
-1799:1:586
-1800:1:587
-1801:0:2227
-1802:2:1895
-1803:2:1899
-1804:2:1900
-1805:2:1907
-1806:2:1911
-1807:2:1912
-1808:2:1919
-1809:2:1923
-1810:2:1924
-1811:2:1931
-1812:2:1932
-1813:2:1949
-1814:2:1950
-1815:2:1953
-1816:2:1954
-1817:0:2227
-1818:2:1821
-1819:0:2227
-1820:2:1822
-1821:0:2227
-1822:2:1823
-1823:2:1827
-1824:2:1828
-1825:2:1835
-1826:2:1839
-1827:2:1840
-1828:2:1847
-1829:2:1851
-1830:2:1852
-1831:2:1859
-1832:2:1860
-1833:2:1877
-1834:2:1878
-1835:2:1881
-1836:2:1882
-1837:0:2227
-1838:2:1894
-1839:0:2227
-1840:1:599
-1841:0:2227
-1842:1:600
-1843:0:2227
-1844:1:601
-1845:0:2227
-1846:1:746
-1847:0:2227
-1848:1:747
-1849:0:2227
-1850:2:1895
-1851:2:1899
-1852:2:1900
-1853:2:1907
-1854:2:1911
-1855:2:1912
-1856:2:1919
-1857:2:1923
-1858:2:1924
-1859:2:1931
-1860:2:1932
-1861:2:1949
-1862:2:1950
-1863:2:1953
-1864:2:1954
-1865:0:2227
-1866:2:1821
-1867:0:2227
-1868:2:1822
-1869:0:2227
-1870:2:1823
-1871:2:1827
-1872:2:1828
-1873:2:1835
-1874:2:1839
-1875:2:1840
-1876:2:1847
-1877:2:1851
-1878:2:1852
-1879:2:1859
-1880:2:1860
-1881:2:1877
-1882:2:1878
-1883:2:1881
-1884:2:1882
-1885:0:2227
-1886:2:1894
-1887:0:2227
-1888:1:751
-1889:0:2227
-1890:2:1895
-1891:2:1899
-1892:2:1900
-1893:2:1907
-1894:2:1911
-1895:2:1912
-1896:2:1919
-1897:2:1923
-1898:2:1924
-1899:2:1931
-1900:2:1932
-1901:2:1949
-1902:2:1950
-1903:2:1953
-1904:2:1954
-1905:0:2227
-1906:2:1821
-1907:0:2227
-1908:2:1822
-1909:0:2227
-1910:2:1823
-1911:2:1827
-1912:2:1828
-1913:2:1835
-1914:2:1839
-1915:2:1840
-1916:2:1847
-1917:2:1851
-1918:2:1852
-1919:2:1859
-1920:2:1860
-1921:2:1877
-1922:2:1878
-1923:2:1881
-1924:2:1882
-1925:0:2227
-1926:2:1894
-1927:0:2227
-1928:1:752
-1929:1:756
-1930:1:757
-1931:1:764
-1932:1:768
-1933:1:769
-1934:1:776
-1935:1:780
-1936:1:781
-1937:1:788
-1938:1:789
-1939:1:799
-1940:1:800
-1941:1:810
-1942:1:811
-1943:0:2227
-1944:2:1895
-1945:2:1899
-1946:2:1900
-1947:2:1907
-1948:2:1911
-1949:2:1912
-1950:2:1919
-1951:2:1923
-1952:2:1924
-1953:2:1931
-1954:2:1932
-1955:2:1949
-1956:2:1950
-1957:2:1953
-1958:2:1954
-1959:0:2227
-1960:2:1821
-1961:0:2227
-1962:2:1822
-1963:0:2227
-1964:2:1823
-1965:2:1827
-1966:2:1828
-1967:2:1835
-1968:2:1839
-1969:2:1840
-1970:2:1847
-1971:2:1851
-1972:2:1852
-1973:2:1859
-1974:2:1860
-1975:2:1877
-1976:2:1878
-1977:2:1881
-1978:2:1882
-1979:0:2227
-1980:2:1894
-1981:0:2227
-1982:1:823
-1983:0:2227
-1984:1:601
-1985:0:2227
-1986:1:746
-1987:0:2227
-1988:1:747
-1989:0:2227
-1990:2:1895
-1991:2:1899
-1992:2:1900
-1993:2:1907
-1994:2:1911
-1995:2:1912
-1996:2:1919
-1997:2:1923
-1998:2:1924
-1999:2:1931
-2000:2:1932
-2001:2:1949
-2002:2:1950
-2003:2:1953
-2004:2:1954
-2005:0:2227
-2006:2:1821
-2007:0:2227
-2008:2:1822
-2009:0:2227
-2010:2:1823
-2011:2:1827
-2012:2:1828
-2013:2:1835
-2014:2:1839
-2015:2:1840
-2016:2:1847
-2017:2:1851
-2018:2:1852
-2019:2:1859
-2020:2:1860
-2021:2:1877
-2022:2:1878
-2023:2:1881
-2024:2:1882
-2025:0:2227
-2026:2:1894
-2027:0:2227
-2028:1:751
-2029:0:2227
-2030:2:1895
-2031:2:1899
-2032:2:1900
-2033:2:1907
-2034:2:1911
-2035:2:1912
-2036:2:1919
-2037:2:1923
-2038:2:1924
-2039:2:1931
-2040:2:1932
-2041:2:1949
-2042:2:1950
-2043:2:1953
-2044:2:1954
-2045:0:2227
-2046:2:1821
-2047:0:2227
-2048:2:1822
-2049:0:2227
-2050:2:1823
-2051:2:1827
-2052:2:1828
-2053:2:1835
-2054:2:1839
-2055:2:1840
-2056:2:1847
-2057:2:1851
-2058:2:1852
-2059:2:1859
-2060:2:1860
-2061:2:1877
-2062:2:1878
-2063:2:1881
-2064:2:1882
-2065:0:2227
-2066:2:1894
-2067:0:2227
-2068:1:752
-2069:1:756
-2070:1:757
-2071:1:764
-2072:1:765
-2073:1:776
-2074:1:780
-2075:1:781
-2076:1:788
-2077:1:789
-2078:1:799
-2079:1:800
-2080:1:810
-2081:1:811
-2082:0:2227
-2083:2:1895
-2084:2:1899
-2085:2:1900
-2086:2:1907
-2087:2:1911
-2088:2:1912
-2089:2:1919
-2090:2:1923
-2091:2:1924
-2092:2:1931
-2093:2:1932
-2094:2:1949
-2095:2:1950
-2096:2:1953
-2097:2:1954
-2098:0:2227
-2099:2:1821
-2100:0:2227
-2101:2:1822
-2102:0:2227
-2103:2:1823
-2104:2:1827
-2105:2:1828
-2106:2:1835
-2107:2:1839
-2108:2:1840
-2109:2:1847
-2110:2:1851
-2111:2:1852
-2112:2:1859
-2113:2:1860
-2114:2:1877
-2115:2:1878
-2116:2:1881
-2117:2:1882
-2118:0:2227
-2119:2:1894
-2120:0:2227
-2121:1:823
-2122:0:2227
-2123:1:827
-2124:0:2227
-2125:2:1895
-2126:2:1899
-2127:2:1900
-2128:2:1907
-2129:2:1911
-2130:2:1912
-2131:2:1919
-2132:2:1923
-2133:2:1924
-2134:2:1931
-2135:2:1932
-2136:2:1949
-2137:2:1950
-2138:2:1953
-2139:2:1954
-2140:0:2227
-2141:2:1821
-2142:0:2227
-2143:2:1822
-2144:0:2227
-2145:2:1823
-2146:2:1827
-2147:2:1828
-2148:2:1835
-2149:2:1839
-2150:2:1840
-2151:2:1847
-2152:2:1851
-2153:2:1852
-2154:2:1859
-2155:2:1860
-2156:2:1877
-2157:2:1878
-2158:2:1881
-2159:2:1882
-2160:0:2227
-2161:2:1894
-2162:0:2227
-2163:1:832
-2164:1:836
-2165:1:837
-2166:1:844
-2167:1:845
-2168:1:856
-2169:1:860
-2170:1:861
-2171:1:868
-2172:1:869
-2173:1:879
-2174:1:880
-2175:1:890
-2176:1:891
-2177:0:2227
-2178:1:1
-2179:0:2227
-2180:1:2
-2181:0:2227
-2182:1:3
-2183:0:2227
-2184:2:1895
-2185:2:1899
-2186:2:1900
-2187:2:1907
-2188:2:1911
-2189:2:1912
-2190:2:1919
-2191:2:1923
-2192:2:1924
-2193:2:1931
-2194:2:1932
-2195:2:1949
-2196:2:1950
-2197:2:1953
-2198:2:1954
-2199:0:2227
-2200:2:1821
-2201:0:2227
-2202:2:1822
-2203:0:2227
-2204:2:1823
-2205:2:1827
-2206:2:1828
-2207:2:1835
-2208:2:1839
-2209:2:1840
-2210:2:1847
-2211:2:1851
-2212:2:1852
-2213:2:1859
-2214:2:1860
-2215:2:1877
-2216:2:1878
-2217:2:1881
-2218:2:1882
-2219:0:2227
-2220:2:1894
-2221:0:2227
-2222:1:4
-2223:1:8
-2224:1:9
-2225:1:16
-2226:1:20
-2227:1:21
-2228:1:28
-2229:1:32
-2230:1:33
-2231:1:40
-2232:1:41
-2233:1:51
-2234:1:52
-2235:1:62
-2236:1:63
-2237:0:2227
-2238:2:1895
-2239:2:1899
-2240:2:1900
-2241:2:1907
-2242:2:1911
-2243:2:1912
-2244:2:1919
-2245:2:1923
-2246:2:1924
-2247:2:1931
-2248:2:1932
-2249:2:1949
-2250:2:1950
-2251:2:1953
-2252:2:1954
-2253:0:2227
-2254:2:1821
-2255:0:2227
-2256:2:1822
-2257:0:2227
-2258:2:1823
-2259:2:1827
-2260:2:1828
-2261:2:1835
-2262:2:1839
-2263:2:1840
-2264:2:1847
-2265:2:1851
-2266:2:1852
-2267:2:1859
-2268:2:1860
-2269:2:1877
-2270:2:1878
-2271:2:1881
-2272:2:1882
-2273:0:2227
-2274:2:1894
-2275:0:2227
-2276:1:75
-2277:0:2227
-2278:2:1895
-2279:2:1899
-2280:2:1900
-2281:2:1907
-2282:2:1911
-2283:2:1912
-2284:2:1919
-2285:2:1923
-2286:2:1924
-2287:2:1931
-2288:2:1932
-2289:2:1949
-2290:2:1950
-2291:2:1953
-2292:2:1954
-2293:0:2227
-2294:2:1821
-2295:0:2227
-2296:2:1822
-2297:0:2227
-2298:2:1823
-2299:2:1827
-2300:2:1828
-2301:2:1835
-2302:2:1839
-2303:2:1840
-2304:2:1847
-2305:2:1851
-2306:2:1852
-2307:2:1859
-2308:2:1860
-2309:2:1877
-2310:2:1878
-2311:2:1881
-2312:2:1882
-2313:0:2227
-2314:2:1894
-2315:0:2227
-2316:1:76
-2317:1:80
-2318:1:81
-2319:1:88
-2320:1:92
-2321:1:93
-2322:1:100
-2323:1:104
-2324:1:105
-2325:1:112
-2326:1:113
-2327:1:123
-2328:1:124
-2329:1:134
-2330:1:135
-2331:0:2227
-2332:1:147
-2333:0:2227
-2334:2:1895
-2335:2:1899
-2336:2:1900
-2337:2:1907
-2338:2:1911
-2339:2:1912
-2340:2:1919
-2341:2:1923
-2342:2:1924
-2343:2:1931
-2344:2:1932
-2345:2:1949
-2346:2:1950
-2347:2:1953
-2348:2:1954
-2349:0:2227
-2350:2:1821
-2351:0:2227
-2352:2:1822
-2353:0:2227
-2354:2:1823
-2355:2:1827
-2356:2:1828
-2357:2:1835
-2358:2:1839
-2359:2:1840
-2360:2:1847
-2361:2:1851
-2362:2:1852
-2363:2:1859
-2364:2:1860
-2365:2:1877
-2366:2:1878
-2367:2:1881
-2368:2:1882
-2369:0:2227
-2370:2:1894
-2371:0:2227
-2372:1:148
-2373:0:2227
-2374:2:1895
-2375:2:1899
-2376:2:1900
-2377:2:1907
-2378:2:1911
-2379:2:1912
-2380:2:1919
-2381:2:1923
-2382:2:1924
-2383:2:1931
-2384:2:1932
-2385:2:1949
-2386:2:1950
-2387:2:1953
-2388:2:1954
-2389:0:2227
-2390:2:1821
-2391:0:2227
-2392:2:1822
-2393:0:2227
-2394:2:1823
-2395:2:1827
-2396:2:1828
-2397:2:1835
-2398:2:1839
-2399:2:1840
-2400:2:1847
-2401:2:1851
-2402:2:1852
-2403:2:1859
-2404:2:1860
-2405:2:1877
-2406:2:1878
-2407:2:1881
-2408:2:1882
-2409:0:2227
-2410:2:1894
-2411:0:2227
-2412:1:149
-2413:1:153
-2414:1:154
-2415:1:161
-2416:1:165
-2417:1:166
-2418:1:173
-2419:1:177
-2420:1:178
-2421:1:185
-2422:1:186
-2423:1:196
-2424:1:197
-2425:1:207
-2426:1:208
-2427:0:2227
-2428:2:1895
-2429:2:1899
-2430:2:1900
-2431:2:1907
-2432:2:1911
-2433:2:1912
-2434:2:1919
-2435:2:1923
-2436:2:1924
-2437:2:1931
-2438:2:1932
-2439:2:1949
-2440:2:1950
-2441:2:1953
-2442:2:1954
-2443:0:2227
-2444:2:1821
-2445:0:2227
-2446:2:1822
-2447:0:2227
-2448:2:1823
-2449:2:1827
-2450:2:1828
-2451:2:1835
-2452:2:1839
-2453:2:1840
-2454:2:1847
-2455:2:1851
-2456:2:1852
-2457:2:1859
-2458:2:1860
-2459:2:1877
-2460:2:1878
-2461:2:1881
-2462:2:1882
-2463:0:2227
-2464:2:1894
-2465:0:2227
-2466:1:220
-2467:0:2227
-2468:1:373
-2469:0:2227
-2470:1:374
-2471:0:2227
-2472:1:3
-2473:0:2227
-2474:2:1895
-2475:2:1899
-2476:2:1900
-2477:2:1907
-2478:2:1911
-2479:2:1912
-2480:2:1919
-2481:2:1923
-2482:2:1924
-2483:2:1931
-2484:2:1932
-2485:2:1949
-2486:2:1950
-2487:2:1953
-2488:2:1954
-2489:0:2227
-2490:2:1821
-2491:0:2227
-2492:2:1822
-2493:0:2227
-2494:2:1823
-2495:2:1827
-2496:2:1828
-2497:2:1835
-2498:2:1839
-2499:2:1840
-2500:2:1847
-2501:2:1851
-2502:2:1852
-2503:2:1859
-2504:2:1860
-2505:2:1877
-2506:2:1878
-2507:2:1881
-2508:2:1882
-2509:0:2227
-2510:2:1894
-2511:0:2227
-2512:1:4
-2513:1:8
-2514:1:9
-2515:1:24
-2516:1:25
-2517:1:28
-2518:1:32
-2519:1:33
-2520:1:40
-2521:1:41
-2522:1:51
-2523:1:54
-2524:1:55
-2525:1:62
-2526:1:63
-2527:0:2227
-2528:2:1895
-2529:2:1899
-2530:2:1900
-2531:2:1907
-2532:2:1911
-2533:2:1912
-2534:2:1919
-2535:2:1923
-2536:2:1924
-2537:2:1931
-2538:2:1932
-2539:2:1949
-2540:2:1950
-2541:2:1953
-2542:2:1954
-2543:0:2227
-2544:2:1821
-2545:0:2227
-2546:2:1822
-2547:0:2227
-2548:2:1823
-2549:2:1827
-2550:2:1828
-2551:2:1835
-2552:2:1839
-2553:2:1840
-2554:2:1847
-2555:2:1851
-2556:2:1852
-2557:2:1859
-2558:2:1860
-2559:2:1877
-2560:2:1878
-2561:2:1881
-2562:2:1882
-2563:0:2227
-2564:2:1894
-2565:0:2227
-2566:1:75
-2567:0:2227
-2568:2:1895
-2569:2:1899
-2570:2:1900
-2571:2:1907
-2572:2:1911
-2573:2:1912
-2574:2:1919
-2575:2:1923
-2576:2:1924
-2577:2:1931
-2578:2:1932
-2579:2:1949
-2580:2:1950
-2581:2:1953
-2582:2:1954
-2583:0:2227
-2584:2:1821
-2585:0:2227
-2586:2:1822
-2587:0:2227
-2588:2:1823
-2589:2:1827
-2590:2:1828
-2591:2:1835
-2592:2:1839
-2593:2:1840
-2594:2:1847
-2595:2:1851
-2596:2:1852
-2597:2:1859
-2598:2:1860
-2599:2:1877
-2600:2:1878
-2601:2:1881
-2602:2:1882
-2603:0:2227
-2604:2:1894
-2605:0:2227
-2606:1:76
-2607:1:80
-2608:1:81
-2609:1:96
-2610:1:97
-2611:1:100
-2612:1:104
-2613:1:105
-2614:1:112
-2615:1:113
-2616:1:123
-2617:1:126
-2618:1:127
-2619:1:134
-2620:1:135
-2621:0:2227
-2622:1:223
-2623:0:2227
-2624:2:1895
-2625:2:1899
-2626:2:1900
-2627:2:1907
-2628:2:1911
-2629:2:1912
-2630:2:1919
-2631:2:1923
-2632:2:1924
-2633:2:1931
-2634:2:1932
-2635:2:1949
-2636:2:1950
-2637:2:1953
-2638:2:1954
-2639:0:2227
-2640:2:1821
-2641:0:2227
-2642:2:1822
-2643:0:2227
-2644:2:1823
-2645:2:1827
-2646:2:1828
-2647:2:1835
-2648:2:1839
-2649:2:1840
-2650:2:1847
-2651:2:1851
-2652:2:1852
-2653:2:1859
-2654:2:1860
-2655:2:1877
-2656:2:1878
-2657:2:1881
-2658:2:1882
-2659:0:2227
-2660:2:1894
-2661:0:2227
-2662:1:224
-2663:0:2227
-2664:1:373
-2665:0:2227
-2666:1:374
-2667:0:2227
-2668:1:379
-2669:0:2227
-2670:2:1895
-2671:2:1899
-2672:2:1900
-2673:2:1907
-2674:2:1911
-2675:2:1912
-2676:2:1919
-2677:2:1923
-2678:2:1924
-2679:2:1931
-2680:2:1932
-2681:2:1949
-2682:2:1950
-2683:2:1953
-2684:2:1954
-2685:0:2227
-2686:2:1821
-2687:0:2227
-2688:2:1822
-2689:0:2227
-2690:2:1823
-2691:2:1827
-2692:2:1828
-2693:2:1835
-2694:2:1839
-2695:2:1840
-2696:2:1847
-2697:2:1851
-2698:2:1852
-2699:2:1859
-2700:2:1860
-2701:2:1877
-2702:2:1878
-2703:2:1881
-2704:2:1882
-2705:0:2227
-2706:2:1894
-2707:0:2227
-2708:1:384
-2709:1:388
-2710:1:389
-2711:1:404
-2712:1:405
-2713:1:408
-2714:1:412
-2715:1:413
-2716:1:420
-2717:1:421
-2718:1:431
-2719:1:434
-2720:1:435
-2721:1:442
-2722:1:443
-2723:0:2227
-2724:2:1895
-2725:2:1899
-2726:2:1900
-2727:2:1907
-2728:2:1911
-2729:2:1912
-2730:2:1919
-2731:2:1923
-2732:2:1924
-2733:2:1931
-2734:2:1932
-2735:2:1949
-2736:2:1950
-2737:2:1953
-2738:2:1954
-2739:0:2227
-2740:2:1821
-2741:0:2227
-2742:2:1822
-2743:0:2227
-2744:2:1823
-2745:2:1827
-2746:2:1828
-2747:2:1835
-2748:2:1839
-2749:2:1840
-2750:2:1847
-2751:2:1851
-2752:2:1852
-2753:2:1859
-2754:2:1860
-2755:2:1877
-2756:2:1878
-2757:2:1881
-2758:2:1882
-2759:0:2227
-2760:2:1894
-2761:0:2227
-2762:1:455
-2763:0:2227
-2764:2:1895
-2765:2:1899
-2766:2:1900
-2767:2:1907
-2768:2:1911
-2769:2:1912
-2770:2:1919
-2771:2:1923
-2772:2:1924
-2773:2:1931
-2774:2:1932
-2775:2:1949
-2776:2:1950
-2777:2:1953
-2778:2:1954
-2779:0:2227
-2780:2:1821
-2781:0:2227
-2782:2:1822
-2783:0:2227
-2784:2:1823
-2785:2:1827
-2786:2:1828
-2787:2:1835
-2788:2:1839
-2789:2:1840
-2790:2:1847
-2791:2:1851
-2792:2:1852
-2793:2:1859
-2794:2:1860
-2795:2:1877
-2796:2:1878
-2797:2:1881
-2798:2:1882
-2799:0:2227
-2800:2:1894
-2801:0:2227
-2802:1:456
-2803:1:460
-2804:1:461
-2805:1:476
-2806:1:477
-2807:1:480
-2808:1:484
-2809:1:485
-2810:1:492
-2811:1:493
-2812:1:503
-2813:1:506
-2814:1:507
-2815:1:514
-2816:1:515
-2817:0:2227
-2818:2:1895
-2819:2:1899
-2820:2:1900
-2821:2:1907
-2822:2:1911
-2823:2:1912
-2824:2:1919
-2825:2:1923
-2826:2:1924
-2827:2:1931
-2828:2:1932
-2829:2:1949
-2830:2:1950
-2831:2:1953
-2832:2:1954
-2833:0:2227
-2834:2:1821
-2835:0:2227
-2836:2:1822
-2837:0:2227
-2838:2:1823
-2839:2:1827
-2840:2:1828
-2841:2:1835
-2842:2:1839
-2843:2:1840
-2844:2:1847
-2845:2:1851
-2846:2:1852
-2847:2:1859
-2848:2:1860
-2849:2:1877
-2850:2:1878
-2851:2:1881
-2852:2:1882
-2853:0:2227
-2854:2:1894
-2855:0:2227
-2856:1:527
-2857:0:2227
-2858:2:1895
-2859:2:1899
-2860:2:1900
-2861:2:1907
-2862:2:1911
-2863:2:1912
-2864:2:1919
-2865:2:1923
-2866:2:1924
-2867:2:1931
-2868:2:1932
-2869:2:1949
-2870:2:1950
-2871:2:1953
-2872:2:1954
-2873:0:2227
-2874:2:1821
-2875:0:2227
-2876:2:1822
-2877:0:2227
-2878:2:1823
-2879:2:1827
-2880:2:1828
-2881:2:1835
-2882:2:1839
-2883:2:1840
-2884:2:1847
-2885:2:1851
-2886:2:1852
-2887:2:1859
-2888:2:1860
-2889:2:1877
-2890:2:1878
-2891:2:1881
-2892:2:1882
-2893:0:2227
-2894:2:1894
-2895:0:2227
-2896:1:528
-2897:1:532
-2898:1:533
-2899:1:548
-2900:1:549
-2901:1:552
-2902:1:556
-2903:1:557
-2904:1:564
-2905:1:565
-2906:1:575
-2907:1:578
-2908:1:579
-2909:1:586
-2910:1:587
-2911:0:2227
-2912:2:1895
-2913:2:1899
-2914:2:1900
-2915:2:1907
-2916:2:1911
-2917:2:1912
-2918:2:1919
-2919:2:1923
-2920:2:1924
-2921:2:1931
-2922:2:1932
-2923:2:1949
-2924:2:1950
-2925:2:1953
-2926:2:1954
-2927:0:2227
-2928:2:1821
-2929:0:2227
-2930:2:1822
-2931:0:2227
-2932:2:1823
-2933:2:1827
-2934:2:1828
-2935:2:1835
-2936:2:1839
-2937:2:1840
-2938:2:1847
-2939:2:1851
-2940:2:1852
-2941:2:1859
-2942:2:1860
-2943:2:1877
-2944:2:1878
-2945:2:1881
-2946:2:1882
-2947:0:2227
-2948:2:1894
-2949:0:2227
-2950:1:599
-2951:0:2227
-2952:1:600
-2953:0:2227
-2954:1:601
-2955:0:2227
-2956:1:746
-2957:0:2227
-2958:1:747
-2959:0:2227
-2960:2:1895
-2961:2:1899
-2962:2:1900
-2963:2:1907
-2964:2:1911
-2965:2:1912
-2966:2:1919
-2967:2:1923
-2968:2:1924
-2969:2:1931
-2970:2:1932
-2971:2:1949
-2972:2:1950
-2973:2:1953
-2974:2:1954
-2975:0:2227
-2976:2:1821
-2977:0:2227
-2978:2:1822
-2979:0:2227
-2980:2:1823
-2981:2:1827
-2982:2:1828
-2983:2:1835
-2984:2:1839
-2985:2:1840
-2986:2:1847
-2987:2:1851
-2988:2:1852
-2989:2:1859
-2990:2:1860
-2991:2:1877
-2992:2:1878
-2993:2:1881
-2994:2:1882
-2995:0:2227
-2996:2:1894
-2997:0:2227
-2998:1:751
-2999:0:2227
-3000:2:1895
-3001:2:1899
-3002:2:1900
-3003:2:1907
-3004:2:1911
-3005:2:1912
-3006:2:1919
-3007:2:1923
-3008:2:1924
-3009:2:1931
-3010:2:1932
-3011:2:1949
-3012:2:1950
-3013:2:1953
-3014:2:1954
-3015:0:2227
-3016:2:1821
-3017:0:2227
-3018:2:1822
-3019:0:2227
-3020:2:1823
-3021:2:1827
-3022:2:1828
-3023:2:1835
-3024:2:1839
-3025:2:1840
-3026:2:1847
-3027:2:1851
-3028:2:1852
-3029:2:1859
-3030:2:1860
-3031:2:1877
-3032:2:1878
-3033:2:1881
-3034:2:1882
-3035:0:2227
-3036:2:1894
-3037:0:2227
-3038:1:752
-3039:1:756
-3040:1:757
-3041:1:772
-3042:1:773
-3043:1:776
-3044:1:780
-3045:1:781
-3046:1:788
-3047:1:789
-3048:1:799
-3049:1:802
-3050:1:803
-3051:1:810
-3052:1:811
-3053:0:2227
-3054:2:1895
-3055:2:1899
-3056:2:1900
-3057:2:1907
-3058:2:1911
-3059:2:1912
-3060:2:1919
-3061:2:1923
-3062:2:1924
-3063:2:1931
-3064:2:1932
-3065:2:1949
-3066:2:1950
-3067:2:1953
-3068:2:1954
-3069:0:2227
-3070:2:1821
-3071:0:2227
-3072:2:1822
-3073:0:2227
-3074:2:1823
-3075:2:1827
-3076:2:1828
-3077:2:1835
-3078:2:1839
-3079:2:1840
-3080:2:1847
-3081:2:1851
-3082:2:1852
-3083:2:1859
-3084:2:1860
-3085:2:1877
-3086:2:1878
-3087:2:1881
-3088:2:1882
-3089:0:2227
-3090:2:1894
-3091:0:2227
-3092:1:823
-3093:0:2227
-3094:1:601
-3095:0:2227
-3096:1:746
-3097:0:2227
-3098:1:747
-3099:0:2227
-3100:2:1895
-3101:2:1899
-3102:2:1900
-3103:2:1907
-3104:2:1911
-3105:2:1912
-3106:2:1919
-3107:2:1923
-3108:2:1924
-3109:2:1931
-3110:2:1932
-3111:2:1949
-3112:2:1950
-3113:2:1953
-3114:2:1954
-3115:0:2227
-3116:2:1821
-3117:0:2227
-3118:2:1822
-3119:0:2227
-3120:2:1823
-3121:2:1827
-3122:2:1828
-3123:2:1835
-3124:2:1839
-3125:2:1840
-3126:2:1847
-3127:2:1851
-3128:2:1852
-3129:2:1859
-3130:2:1860
-3131:2:1877
-3132:2:1878
-3133:2:1881
-3134:2:1882
-3135:0:2227
-3136:2:1894
-3137:0:2227
-3138:1:751
-3139:0:2227
-3140:2:1895
-3141:2:1899
-3142:2:1900
-3143:2:1907
-3144:2:1911
-3145:2:1912
-3146:2:1919
-3147:2:1923
-3148:2:1924
-3149:2:1931
-3150:2:1932
-3151:2:1949
-3152:2:1950
-3153:2:1953
-3154:2:1954
-3155:0:2227
-3156:2:1821
-3157:0:2227
-3158:2:1822
-3159:0:2227
-3160:2:1823
-3161:2:1827
-3162:2:1828
-3163:2:1835
-3164:2:1839
-3165:2:1840
-3166:2:1847
-3167:2:1851
-3168:2:1852
-3169:2:1859
-3170:2:1860
-3171:2:1877
-3172:2:1878
-3173:2:1881
-3174:2:1882
-3175:0:2227
-3176:2:1894
-3177:0:2227
-3178:1:752
-3179:1:756
-3180:1:757
-3181:1:772
-3182:1:773
-3183:1:776
-3184:1:780
-3185:1:781
-3186:1:788
-3187:1:789
-3188:1:799
-3189:1:802
-3190:1:803
-3191:1:810
-3192:1:811
-3193:0:2227
-3194:2:1895
-3195:2:1899
-3196:2:1900
-3197:2:1907
-3198:2:1911
-3199:2:1912
-3200:2:1919
-3201:2:1923
-3202:2:1924
-3203:2:1931
-3204:2:1932
-3205:2:1949
-3206:2:1950
-3207:2:1953
-3208:2:1954
-3209:0:2227
-3210:2:1821
-3211:0:2227
-3212:2:1822
-3213:0:2227
-3214:2:1823
-3215:2:1827
-3216:2:1828
-3217:2:1835
-3218:2:1839
-3219:2:1840
-3220:2:1847
-3221:2:1851
-3222:2:1852
-3223:2:1859
-3224:2:1860
-3225:2:1877
-3226:2:1878
-3227:2:1881
-3228:2:1882
-3229:0:2227
-3230:2:1894
-3231:0:2227
-3232:1:823
-3233:0:2227
-3234:1:827
-3235:0:2227
-3236:2:1895
-3237:2:1899
-3238:2:1900
-3239:2:1907
-3240:2:1911
-3241:2:1912
-3242:2:1919
-3243:2:1923
-3244:2:1924
-3245:2:1931
-3246:2:1932
-3247:2:1949
-3248:2:1950
-3249:2:1953
-3250:2:1954
-3251:0:2227
-3252:2:1821
-3253:0:2227
-3254:2:1822
-3255:0:2227
-3256:2:1823
-3257:2:1827
-3258:2:1828
-3259:2:1835
-3260:2:1839
-3261:2:1840
-3262:2:1847
-3263:2:1851
-3264:2:1852
-3265:2:1859
-3266:2:1860
-3267:2:1877
-3268:2:1878
-3269:2:1881
-3270:2:1882
-3271:0:2227
-3272:2:1894
-3273:0:2227
-3274:1:832
-3275:1:836
-3276:1:837
-3277:1:852
-3278:1:853
-3279:1:856
-3280:1:860
-3281:1:861
-3282:1:868
-3283:1:869
-3284:1:879
-3285:1:882
-3286:1:883
-3287:1:890
-3288:1:891
-3289:0:2227
-3290:1:1
-3291:0:2227
-3292:1:2
-3293:0:2227
-3294:1:3
-3295:0:2227
-3296:2:1895
-3297:2:1899
-3298:2:1900
-3299:2:1907
-3300:2:1911
-3301:2:1912
-3302:2:1919
-3303:2:1923
-3304:2:1924
-3305:2:1931
-3306:2:1932
-3307:2:1949
-3308:2:1950
-3309:2:1953
-3310:2:1954
-3311:0:2227
-3312:2:1821
-3313:0:2227
-3314:2:1822
-3315:0:2227
-3316:2:1823
-3317:2:1827
-3318:2:1828
-3319:2:1835
-3320:2:1839
-3321:2:1840
-3322:2:1847
-3323:2:1851
-3324:2:1852
-3325:2:1859
-3326:2:1860
-3327:2:1877
-3328:2:1878
-3329:2:1881
-3330:2:1882
-3331:0:2227
-3332:2:1894
-3333:0:2227
-3334:1:4
-3335:1:8
-3336:1:9
-3337:1:24
-3338:1:25
-3339:1:28
-3340:1:32
-3341:1:33
-3342:1:40
-3343:1:41
-3344:1:51
-3345:1:54
-3346:1:55
-3347:1:62
-3348:1:63
-3349:0:2227
-3350:2:1895
-3351:2:1899
-3352:2:1900
-3353:2:1907
-3354:2:1911
-3355:2:1912
-3356:2:1919
-3357:2:1923
-3358:2:1924
-3359:2:1931
-3360:2:1932
-3361:2:1949
-3362:2:1950
-3363:2:1953
-3364:2:1954
-3365:0:2227
-3366:2:1821
-3367:0:2227
-3368:2:1822
-3369:0:2227
-3370:2:1823
-3371:2:1827
-3372:2:1828
-3373:2:1835
-3374:2:1839
-3375:2:1840
-3376:2:1847
-3377:2:1851
-3378:2:1852
-3379:2:1859
-3380:2:1860
-3381:2:1877
-3382:2:1878
-3383:2:1881
-3384:2:1882
-3385:0:2227
-3386:2:1894
-3387:0:2227
-3388:1:75
-3389:0:2227
-3390:2:1895
-3391:2:1899
-3392:2:1900
-3393:2:1907
-3394:2:1911
-3395:2:1912
-3396:2:1919
-3397:2:1923
-3398:2:1924
-3399:2:1931
-3400:2:1932
-3401:2:1949
-3402:2:1950
-3403:2:1953
-3404:2:1954
-3405:0:2227
-3406:2:1821
-3407:0:2227
-3408:2:1822
-3409:0:2227
-3410:2:1823
-3411:2:1827
-3412:2:1828
-3413:2:1835
-3414:2:1839
-3415:2:1840
-3416:2:1847
-3417:2:1851
-3418:2:1852
-3419:2:1859
-3420:2:1860
-3421:2:1877
-3422:2:1878
-3423:2:1881
-3424:2:1882
-3425:0:2227
-3426:2:1894
-3427:0:2227
-3428:1:76
-3429:1:80
-3430:1:81
-3431:1:96
-3432:1:97
-3433:1:100
-3434:1:104
-3435:1:105
-3436:1:112
-3437:1:113
-3438:1:123
-3439:1:126
-3440:1:127
-3441:1:134
-3442:1:135
-3443:0:2227
-3444:1:147
-3445:0:2227
-3446:2:1895
-3447:2:1899
-3448:2:1900
-3449:2:1907
-3450:2:1911
-3451:2:1912
-3452:2:1919
-3453:2:1923
-3454:2:1924
-3455:2:1931
-3456:2:1932
-3457:2:1949
-3458:2:1950
-3459:2:1953
-3460:2:1954
-3461:0:2227
-3462:2:1821
-3463:0:2227
-3464:2:1822
-3465:0:2227
-3466:2:1823
-3467:2:1827
-3468:2:1828
-3469:2:1835
-3470:2:1839
-3471:2:1840
-3472:2:1847
-3473:2:1851
-3474:2:1852
-3475:2:1859
-3476:2:1860
-3477:2:1877
-3478:2:1878
-3479:2:1881
-3480:2:1882
-3481:0:2227
-3482:2:1894
-3483:0:2227
-3484:1:148
-3485:0:2227
-3486:2:1895
-3487:2:1899
-3488:2:1900
-3489:2:1907
-3490:2:1911
-3491:2:1912
-3492:2:1919
-3493:2:1923
-3494:2:1924
-3495:2:1931
-3496:2:1932
-3497:2:1949
-3498:2:1950
-3499:2:1953
-3500:2:1954
-3501:0:2227
-3502:2:1821
-3503:0:2227
-3504:2:1822
-3505:0:2227
-3506:2:1823
-3507:2:1827
-3508:2:1828
-3509:2:1835
-3510:2:1839
-3511:2:1840
-3512:2:1847
-3513:2:1851
-3514:2:1852
-3515:2:1859
-3516:2:1860
-3517:2:1877
-3518:2:1878
-3519:2:1881
-3520:2:1882
-3521:0:2227
-3522:2:1894
-3523:0:2227
-3524:1:149
-3525:1:153
-3526:1:154
-3527:1:169
-3528:1:170
-3529:1:173
-3530:1:177
-3531:1:178
-3532:1:185
-3533:1:186
-3534:1:196
-3535:1:199
-3536:1:200
-3537:1:207
-3538:1:208
-3539:0:2227
-3540:2:1895
-3541:2:1899
-3542:2:1900
-3543:2:1907
-3544:2:1911
-3545:2:1912
-3546:2:1919
-3547:2:1923
-3548:2:1924
-3549:2:1931
-3550:2:1932
-3551:2:1949
-3552:2:1950
-3553:2:1953
-3554:2:1954
-3555:0:2227
-3556:2:1821
-3557:0:2227
-3558:2:1822
-3559:0:2227
-3560:2:1823
-3561:2:1827
-3562:2:1828
-3563:2:1835
-3564:2:1839
-3565:2:1840
-3566:2:1847
-3567:2:1851
-3568:2:1852
-3569:2:1859
-3570:2:1860
-3571:2:1877
-3572:2:1878
-3573:2:1881
-3574:2:1882
-3575:0:2227
-3576:1:220
-3577:0:2227
-3578:1:373
-3579:0:2227
-3580:1:374
-3581:0:2227
-3582:1:3
-3583:0:2227
-3584:1:4
-3585:1:8
-3586:1:9
-3587:1:16
-3588:1:17
-3589:1:28
-3590:1:32
-3591:1:33
-3592:1:40
-3593:1:41
-3594:1:51
-3595:1:52
-3596:1:62
-3597:1:63
-3598:0:2227
-3599:1:75
-3600:0:2227
-3601:1:76
-3602:1:80
-3603:1:81
-3604:1:88
-3605:1:92
-3606:1:93
-3607:1:100
-3608:1:104
-3609:1:105
-3610:1:112
-3611:1:113
-3612:1:123
-3613:1:124
-3614:1:134
-3615:1:135
-3616:0:2227
-3617:1:223
-3618:0:2227
-3619:1:224
-3620:0:2227
-3621:1:373
-3622:0:2227
-3623:1:374
-3624:0:2227
-3625:1:379
-3626:0:2227
-3627:1:384
-3628:1:388
-3629:1:389
-3630:1:396
-3631:1:397
-3632:1:408
-3633:1:412
-3634:1:413
-3635:1:420
-3636:1:421
-3637:1:431
-3638:1:432
-3639:1:442
-3640:1:443
-3641:0:2227
-3642:1:455
-3643:0:2227
-3644:1:456
-3645:1:460
-3646:1:461
-3647:1:468
-3648:1:472
-3649:1:473
-3650:1:480
-3651:1:484
-3652:1:485
-3653:1:492
-3654:1:493
-3655:1:503
-3656:1:504
-3657:1:514
-3658:1:515
-3659:0:2227
-3660:1:527
-3661:0:2227
-3662:1:528
-3663:1:532
-3664:1:533
-3665:1:540
-3666:1:544
-3667:1:545
-3668:1:552
-3669:1:556
-3670:1:557
-3671:1:564
-3672:1:565
-3673:1:575
-3674:1:576
-3675:1:586
-3676:1:587
-3677:0:2227
-3678:1:599
-3679:0:2227
-3680:1:600
-3681:0:2227
-3682:1:601
-3683:0:2227
-3684:1:746
-3685:0:2227
-3686:1:747
-3687:0:2227
-3688:1:751
-3689:0:2227
-3690:1:752
-3691:1:756
-3692:1:757
-3693:1:764
-3694:1:768
-3695:1:769
-3696:1:776
-3697:1:780
-3698:1:781
-3699:1:788
-3700:1:789
-3701:1:799
-3702:1:800
-3703:1:810
-3704:1:811
-3705:0:2227
-3706:1:823
-3707:0:2227
-3708:1:601
-3709:0:2227
-3710:1:746
-3711:0:2227
-3712:1:747
-3713:0:2227
-3714:1:751
-3715:0:2227
-3716:1:752
-3717:1:756
-3718:1:757
-3719:1:764
-3720:1:765
-3721:1:776
-3722:1:780
-3723:1:781
-3724:1:788
-3725:1:789
-3726:1:799
-3727:1:800
-3728:1:810
-3729:1:811
-3730:0:2227
-3731:1:823
-3732:0:2227
-3733:1:827
-3734:0:2227
-3735:1:832
-3736:1:836
-3737:1:837
-3738:1:844
-3739:1:845
-3740:1:856
-3741:1:860
-3742:1:861
-3743:1:868
-3744:1:869
-3745:1:879
-3746:1:880
-3747:1:890
-3748:1:891
-3749:0:2227
-3750:1:1
-3751:0:2227
-3752:1:2
-3753:0:2227
-3754:1:3
-3755:0:2227
-3756:1:4
-3757:1:8
-3758:1:9
-3759:1:16
-3760:1:20
-3761:1:21
-3762:1:28
-3763:1:32
-3764:1:33
-3765:1:40
-3766:1:41
-3767:1:51
-3768:1:52
-3769:1:62
-3770:1:63
-3771:0:2227
-3772:1:75
-3773:0:2227
-3774:1:76
-3775:1:80
-3776:1:81
-3777:1:88
-3778:1:92
-3779:1:93
-3780:1:100
-3781:1:104
-3782:1:105
-3783:1:112
-3784:1:113
-3785:1:123
-3786:1:124
-3787:1:134
-3788:1:135
-3789:0:2227
-3790:1:147
-3791:0:2227
-3792:1:148
-3793:0:2227
-3794:1:149
-3795:1:153
-3796:1:154
-3797:1:161
-3798:1:165
-3799:1:166
-3800:1:173
-3801:1:177
-3802:1:178
-3803:1:185
-3804:1:186
-3805:1:196
-3806:1:197
-3807:1:207
-3808:1:208
-3809:0:2227
-3810:1:220
-3811:0:2227
-3812:2:1894
-3813:0:2227
-3814:1:373
-3815:0:2227
-3816:2:1895
-3817:2:1899
-3818:2:1900
-3819:2:1907
-3820:2:1911
-3821:2:1912
-3822:2:1919
-3823:2:1923
-3824:2:1924
-3825:2:1931
-3826:2:1932
-3827:2:1949
-3828:2:1950
-3829:2:1953
-3830:2:1954
-3831:0:2227
-3832:2:1821
-3833:0:2227
-3834:1:374
-3835:0:2227
-3836:1:3
-3837:0:2227
-3838:1:4
-3839:1:8
-3840:1:9
-3841:1:16
-3842:1:17
-3843:1:28
-3844:1:32
-3845:1:33
-3846:1:40
-3847:1:41
-3848:1:51
-3849:1:52
-3850:1:62
-3851:1:63
-3852:0:2227
-3853:1:75
-3854:0:2227
-3855:1:76
-3856:1:80
-3857:1:81
-3858:1:88
-3859:1:92
-3860:1:93
-3861:1:100
-3862:1:104
-3863:1:105
-3864:1:112
-3865:1:113
-3866:1:123
-3867:1:124
-3868:1:134
-3869:1:135
-3870:0:2227
-3871:1:223
-3872:0:2227
-3873:1:224
-3874:0:2227
-3875:1:373
-3876:0:2227
-3877:1:374
-3878:0:2227
-3879:1:379
-3880:0:2227
-3881:1:384
-3882:1:388
-3883:1:389
-3884:1:396
-3885:1:397
-3886:1:408
-3887:1:412
-3888:1:413
-3889:1:420
-3890:1:421
-3891:1:431
-3892:1:432
-3893:1:442
-3894:1:443
-3895:0:2227
-3896:1:455
-3897:0:2227
-3898:1:456
-3899:1:460
-3900:1:461
-3901:1:468
-3902:1:472
-3903:1:473
-3904:1:480
-3905:1:484
-3906:1:485
-3907:1:492
-3908:1:493
-3909:1:503
-3910:1:504
-3911:1:514
-3912:1:515
-3913:0:2227
-3914:1:527
-3915:0:2227
-3916:1:528
-3917:1:532
-3918:1:533
-3919:1:540
-3920:1:544
-3921:1:545
-3922:1:552
-3923:1:556
-3924:1:557
-3925:1:564
-3926:1:565
-3927:1:575
-3928:1:576
-3929:1:586
-3930:1:587
-3931:0:2227
-3932:1:599
-3933:0:2227
-3934:1:600
-3935:0:2227
-3936:1:601
-3937:0:2227
-3938:1:746
-3939:0:2227
-3940:1:747
-3941:0:2227
-3942:1:751
-3943:0:2227
-3944:1:752
-3945:1:756
-3946:1:757
-3947:1:764
-3948:1:768
-3949:1:769
-3950:1:776
-3951:1:780
-3952:1:781
-3953:1:788
-3954:1:789
-3955:1:799
-3956:1:800
-3957:1:810
-3958:1:811
-3959:0:2227
-3960:1:823
-3961:0:2227
-3962:1:601
-3963:0:2227
-3964:1:746
-3965:0:2227
-3966:1:747
-3967:0:2227
-3968:1:751
-3969:0:2227
-3970:1:752
-3971:1:756
-3972:1:757
-3973:1:764
-3974:1:765
-3975:1:776
-3976:1:780
-3977:1:781
-3978:1:788
-3979:1:789
-3980:1:799
-3981:1:800
-3982:1:810
-3983:1:811
-3984:0:2227
-3985:1:823
-3986:0:2227
-3987:1:827
-3988:0:2227
-3989:1:832
-3990:1:836
-3991:1:837
-3992:1:844
-3993:1:845
-3994:1:856
-3995:1:860
-3996:1:861
-3997:1:868
-3998:1:869
-3999:1:879
-4000:1:880
-4001:1:890
-4002:1:891
-4003:0:2227
-4004:1:1
-4005:0:2227
-4006:1:2
-4007:0:2227
-4008:1:3
-4009:0:2227
-4010:1:4
-4011:1:8
-4012:1:9
-4013:1:16
-4014:1:20
-4015:1:21
-4016:1:28
-4017:1:32
-4018:1:33
-4019:1:40
-4020:1:41
-4021:1:51
-4022:1:52
-4023:1:62
-4024:1:63
-4025:0:2227
-4026:1:75
-4027:0:2227
-4028:1:76
-4029:1:80
-4030:1:81
-4031:1:88
-4032:1:92
-4033:1:93
-4034:1:100
-4035:1:104
-4036:1:105
-4037:1:112
-4038:1:113
-4039:1:123
-4040:1:124
-4041:1:134
-4042:1:135
-4043:0:2227
-4044:1:147
-4045:0:2227
-4046:1:148
-4047:0:2227
-4048:1:149
-4049:1:153
-4050:1:154
-4051:1:161
-4052:1:165
-4053:1:166
-4054:1:173
-4055:1:177
-4056:1:178
-4057:1:185
-4058:1:186
-4059:1:196
-4060:1:197
-4061:1:207
-4062:1:208
-4063:0:2227
-4064:1:220
-4065:0:2227
-4066:1:373
-4067:0:2227
-4068:1:374
-4069:0:2227
-4070:2:1822
-4071:0:2227
-4072:1:3
-4073:0:2227
-4074:1:4
-4075:1:8
-4076:1:9
-4077:1:16
-4078:1:17
-4079:1:28
-4080:1:32
-4081:1:33
-4082:1:40
-4083:1:41
-4084:1:51
-4085:1:52
-4086:1:62
-4087:1:63
-4088:0:2227
-4089:1:75
-4090:0:2227
-4091:1:76
-4092:1:80
-4093:1:81
-4094:1:88
-4095:1:92
-4096:1:93
-4097:1:100
-4098:1:104
-4099:1:105
-4100:1:112
-4101:1:113
-4102:1:123
-4103:1:124
-4104:1:134
-4105:1:135
-4106:0:2227
-4107:1:223
-4108:0:2227
-4109:1:224
-4110:0:2227
-4111:1:373
-4112:0:2227
-4113:1:374
-4114:0:2227
-4115:1:379
-4116:0:2227
-4117:1:384
-4118:1:388
-4119:1:389
-4120:1:396
-4121:1:397
-4122:1:408
-4123:1:412
-4124:1:413
-4125:1:420
-4126:1:421
-4127:1:431
-4128:1:432
-4129:1:442
-4130:1:443
-4131:0:2227
-4132:1:455
-4133:0:2227
-4134:1:456
-4135:1:460
-4136:1:461
-4137:1:468
-4138:1:472
-4139:1:473
-4140:1:480
-4141:1:484
-4142:1:485
-4143:1:492
-4144:1:493
-4145:1:503
-4146:1:504
-4147:1:514
-4148:1:515
-4149:0:2227
-4150:1:527
-4151:0:2227
-4152:1:528
-4153:1:532
-4154:1:533
-4155:1:540
-4156:1:544
-4157:1:545
-4158:1:552
-4159:1:556
-4160:1:557
-4161:1:564
-4162:1:565
-4163:1:575
-4164:1:576
-4165:1:586
-4166:1:587
-4167:0:2227
-4168:1:599
-4169:0:2227
-4170:1:600
-4171:0:2227
-4172:1:601
-4173:0:2227
-4174:1:746
-4175:0:2227
-4176:1:747
-4177:0:2227
-4178:1:751
-4179:0:2227
-4180:1:752
-4181:1:756
-4182:1:757
-4183:1:764
-4184:1:768
-4185:1:769
-4186:1:776
-4187:1:780
-4188:1:781
-4189:1:788
-4190:1:789
-4191:1:799
-4192:1:800
-4193:1:810
-4194:1:811
-4195:0:2227
-4196:1:823
-4197:0:2227
-4198:1:601
-4199:0:2227
-4200:1:746
-4201:0:2227
-4202:1:747
-4203:0:2227
-4204:1:751
-4205:0:2227
-4206:1:752
-4207:1:756
-4208:1:757
-4209:1:764
-4210:1:765
-4211:1:776
-4212:1:780
-4213:1:781
-4214:1:788
-4215:1:789
-4216:1:799
-4217:1:800
-4218:1:810
-4219:1:811
-4220:0:2227
-4221:1:823
-4222:0:2227
-4223:1:827
-4224:0:2227
-4225:1:832
-4226:1:836
-4227:1:837
-4228:1:852
-4229:1:853
-4230:1:856
-4231:1:860
-4232:1:861
-4233:1:868
-4234:1:869
-4235:1:879
-4236:1:882
-4237:1:883
-4238:1:890
-4239:1:891
-4240:0:2227
-4241:1:1
-4242:0:2227
-4243:1:2
-4244:0:2227
-4245:1:3
-4246:0:2227
-4247:2:1823
-4248:2:1827
-4249:2:1828
-4250:2:1835
-4251:2:1839
-4252:2:1840
-4253:2:1847
-4254:2:1851
-4255:2:1852
-4256:2:1859
-4257:2:1860
-4258:2:1877
-4259:2:1878
-4260:2:1881
-4261:2:1882
-4262:0:2227
-4263:2:1894
-4264:0:2227
-4265:2:1895
-4266:2:1899
-4267:2:1900
-4268:2:1907
-4269:2:1911
-4270:2:1912
-4271:2:1919
-4272:2:1923
-4273:2:1924
-4274:2:1931
-4275:2:1932
-4276:2:1949
-4277:2:1950
-4278:2:1953
-4279:2:1954
-4280:0:2227
-4281:2:1821
-4282:0:2227
-4283:2:1822
-4284:0:2227
-4285:1:4
-4286:1:8
-4287:1:9
-4288:1:16
-4289:1:17
-4290:1:28
-4291:1:32
-4292:1:33
-4293:1:40
-4294:1:41
-4295:1:51
-4296:1:52
-4297:1:62
-4298:1:63
-4299:0:2227
-4300:2:1823
-4301:2:1827
-4302:2:1828
-4303:2:1835
-4304:2:1839
-4305:2:1840
-4306:2:1847
-4307:2:1851
-4308:2:1852
-4309:2:1859
-4310:2:1860
-4311:2:1877
-4312:2:1878
-4313:2:1881
-4314:2:1882
-4315:0:2227
-4316:2:1894
-4317:0:2227
-4318:2:1895
-4319:2:1899
-4320:2:1900
-4321:2:1907
-4322:2:1911
-4323:2:1912
-4324:2:1919
-4325:2:1923
-4326:2:1924
-4327:2:1931
-4328:2:1932
-4329:2:1949
-4330:2:1950
-4331:2:1953
-4332:2:1954
-4333:0:2227
-4334:2:1821
-4335:0:2227
-4336:2:1822
-4337:0:2227
-4338:1:75
-4339:0:2227
-4340:2:1823
-4341:2:1827
-4342:2:1828
-4343:2:1835
-4344:2:1839
-4345:2:1840
-4346:2:1847
-4347:2:1851
-4348:2:1852
-4349:2:1859
-4350:2:1860
-4351:2:1877
-4352:2:1878
-4353:2:1881
-4354:2:1882
-4355:0:2227
-4356:2:1894
-4357:0:2227
-4358:2:1895
-4359:2:1899
-4360:2:1900
-4361:2:1907
-4362:2:1911
-4363:2:1912
-4364:2:1919
-4365:2:1923
-4366:2:1924
-4367:2:1931
-4368:2:1932
-4369:2:1949
-4370:2:1950
-4371:2:1953
-4372:2:1954
-4373:0:2227
-4374:2:1821
-4375:0:2227
-4376:2:1822
-4377:0:2227
-4378:1:76
-4379:1:80
-4380:1:81
-4381:1:88
-4382:1:92
-4383:1:93
-4384:1:100
-4385:1:104
-4386:1:105
-4387:1:112
-4388:1:113
-4389:1:123
-4390:1:124
-4391:1:134
-4392:1:135
-4393:0:2227
-4394:1:147
-4395:0:2227
-4396:2:1823
-4397:2:1827
-4398:2:1828
-4399:2:1835
-4400:2:1839
-4401:2:1840
-4402:2:1847
-4403:2:1851
-4404:2:1852
-4405:2:1859
-4406:2:1860
-4407:2:1877
-4408:2:1878
-4409:2:1881
-4410:2:1882
-4411:0:2227
-4412:2:1894
-4413:0:2227
-4414:2:1895
-4415:2:1899
-4416:2:1900
-4417:2:1907
-4418:2:1911
-4419:2:1912
-4420:2:1919
-4421:2:1923
-4422:2:1924
-4423:2:1931
-4424:2:1932
-4425:2:1949
-4426:2:1950
-4427:2:1953
-4428:2:1954
-4429:0:2227
-4430:2:1821
-4431:0:2227
-4432:2:1822
-4433:0:2227
-4434:1:148
-4435:0:2227
-4436:2:1823
-4437:2:1827
-4438:2:1828
-4439:2:1835
-4440:2:1839
-4441:2:1840
-4442:2:1847
-4443:2:1851
-4444:2:1852
-4445:2:1859
-4446:2:1860
-4447:2:1877
-4448:2:1878
-4449:2:1881
-4450:2:1882
-4451:0:2227
-4452:2:1894
-4453:0:2227
-4454:2:1895
-4455:2:1899
-4456:2:1900
-4457:2:1907
-4458:2:1911
-4459:2:1912
-4460:2:1919
-4461:2:1923
-4462:2:1924
-4463:2:1931
-4464:2:1932
-4465:2:1949
-4466:2:1950
-4467:2:1953
-4468:2:1954
-4469:0:2227
-4470:2:1821
-4471:0:2227
-4472:2:1822
-4473:0:2227
-4474:1:149
-4475:1:153
-4476:1:154
-4477:1:161
-4478:1:165
-4479:1:166
-4480:1:173
-4481:1:177
-4482:1:178
-4483:1:185
-4484:1:186
-4485:1:196
-4486:1:197
-4487:1:207
-4488:1:208
-4489:0:2227
-4490:2:1823
-4491:2:1827
-4492:2:1828
-4493:2:1835
-4494:2:1839
-4495:2:1840
-4496:2:1847
-4497:2:1851
-4498:2:1852
-4499:2:1859
-4500:2:1860
-4501:2:1877
-4502:2:1878
-4503:2:1881
-4504:2:1882
-4505:0:2227
-4506:2:1894
-4507:0:2227
-4508:2:1895
-4509:2:1899
-4510:2:1900
-4511:2:1907
-4512:2:1911
-4513:2:1912
-4514:2:1919
-4515:2:1923
-4516:2:1924
-4517:2:1931
-4518:2:1932
-4519:2:1949
-4520:2:1950
-4521:2:1953
-4522:2:1954
-4523:0:2227
-4524:2:1821
-4525:0:2227
-4526:2:1822
-4527:0:2227
-4528:1:220
-4529:0:2227
-4530:1:373
-4531:0:2227
-4532:1:374
-4533:0:2227
-4534:1:3
-4535:0:2227
-4536:2:1823
-4537:2:1827
-4538:2:1828
-4539:2:1835
-4540:2:1839
-4541:2:1840
-4542:2:1847
-4543:2:1851
-4544:2:1852
-4545:2:1859
-4546:2:1860
-4547:2:1877
-4548:2:1878
-4549:2:1881
-4550:2:1882
-4551:0:2227
-4552:2:1894
-4553:0:2227
-4554:2:1895
-4555:2:1899
-4556:2:1900
-4557:2:1907
-4558:2:1911
-4559:2:1912
-4560:2:1919
-4561:2:1923
-4562:2:1924
-4563:2:1931
-4564:2:1932
-4565:2:1949
-4566:2:1950
-4567:2:1953
-4568:2:1954
-4569:0:2227
-4570:2:1821
-4571:0:2227
-4572:2:1822
-4573:0:2227
-4574:1:4
-4575:1:8
-4576:1:9
-4577:1:16
-4578:1:17
-4579:1:28
-4580:1:32
-4581:1:33
-4582:1:40
-4583:1:41
-4584:1:51
-4585:1:52
-4586:1:62
-4587:1:63
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu.sh b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu.spin b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu.spin
deleted file mode 100644 (file)
index 2cfcb70..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.log
deleted file mode 100644 (file)
index 9a22c47..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 741)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10669, errors: 0
-    20146 states, stored
-   191615 states, matched
-   211761 transitions (= stored+matched)
-   712676 atomic steps
-hash conflicts:      1523 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.614      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.661      actual memory usage for states (unsuccessful compression: 102.92%)
-               state-vector as stored = 58 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.326      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 401, "pan.___", state 330, "(1)"
-       line 612, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 397, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 406, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 59, "(1)"
-       line 416, "pan.___", state 89, "(1)"
-       line 397, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 160, "(1)"
-       line 650, "pan.___", state 213, "(1)"
-       line 173, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 233, "(1)"
-       line 158, "pan.___", state 254, "(1)"
-       line 162, "pan.___", state 262, "(1)"
-       line 166, "pan.___", state 274, "(1)"
-       line 173, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 317, "(1)"
-       line 162, "pan.___", state 325, "(1)"
-       line 166, "pan.___", state 337, "(1)"
-       line 173, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 384, "(1)"
-       line 162, "pan.___", state 392, "(1)"
-       line 166, "pan.___", state 404, "(1)"
-       line 397, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 401, "pan.___", state 441, "(1)"
-       line 406, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 470, "(1)"
-       line 416, "pan.___", state 500, "(1)"
-       line 397, "pan.___", state 526, "(1)"
-       line 401, "pan.___", state 540, "(1)"
-       line 406, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 599, "(1)"
-       line 401, "pan.___", state 640, "(1)"
-       line 406, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 699, "(1)"
-       line 173, "pan.___", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, "pan.___", state 722, "(1)"
-       line 177, "pan.___", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 731, "(1)"
-       line 177, "pan.___", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, "pan.___", state 732, "else"
-       line 175, "pan.___", state 737, "((j<1))"
-       line 175, "pan.___", state 737, "((j>=1))"
-       line 181, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 752, "(1)"
-       line 162, "pan.___", state 760, "(1)"
-       line 162, "pan.___", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, "pan.___", state 761, "else"
-       line 160, "pan.___", state 766, "((j<1))"
-       line 160, "pan.___", state 766, "((j>=1))"
-       line 166, "pan.___", state 772, "(1)"
-       line 166, "pan.___", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, "pan.___", state 773, "else"
-       line 168, "pan.___", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, "pan.___", state 776, "else"
-       line 173, "pan.___", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, "pan.___", state 785, "(1)"
-       line 177, "pan.___", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, "pan.___", state 794, "(1)"
-       line 177, "pan.___", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, "pan.___", state 795, "else"
-       line 175, "pan.___", state 800, "((j<1))"
-       line 175, "pan.___", state 800, "((j>=1))"
-       line 181, "pan.___", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 815, "(1)"
-       line 162, "pan.___", state 823, "(1)"
-       line 162, "pan.___", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, "pan.___", state 824, "else"
-       line 160, "pan.___", state 829, "((j<1))"
-       line 160, "pan.___", state 829, "((j>=1))"
-       line 166, "pan.___", state 835, "(1)"
-       line 166, "pan.___", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, "pan.___", state 836, "else"
-       line 168, "pan.___", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, "pan.___", state 839, "else"
-       line 200, "pan.___", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, "pan.___", state 841, "else"
-       line 212, "pan.___", state 845, "((i<1))"
-       line 212, "pan.___", state 845, "((i>=1))"
-       line 173, "pan.___", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, "pan.___", state 852, "(1)"
-       line 177, "pan.___", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 861, "(1)"
-       line 177, "pan.___", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, "pan.___", state 862, "else"
-       line 175, "pan.___", state 867, "((j<1))"
-       line 175, "pan.___", state 867, "((j>=1))"
-       line 181, "pan.___", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 882, "(1)"
-       line 162, "pan.___", state 890, "(1)"
-       line 162, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, "pan.___", state 891, "else"
-       line 160, "pan.___", state 896, "((j<1))"
-       line 160, "pan.___", state 896, "((j>=1))"
-       line 166, "pan.___", state 902, "(1)"
-       line 166, "pan.___", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, "pan.___", state 903, "else"
-       line 168, "pan.___", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, "pan.___", state 906, "else"
-       line 200, "pan.___", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, "pan.___", state 908, "else"
-       line 219, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, "pan.___", state 909, "else"
-       line 354, "pan.___", state 915, "((sighand_exec==1))"
-       line 354, "pan.___", state 915, "else"
-       line 360, "pan.___", state 918, "sighand_exec = 1"
-       line 397, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, "pan.___", state 933, "(1)"
-       line 397, "pan.___", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, "pan.___", state 934, "else"
-       line 397, "pan.___", state 937, "(1)"
-       line 401, "pan.___", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, "pan.___", state 947, "(1)"
-       line 401, "pan.___", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, "pan.___", state 948, "else"
-       line 401, "pan.___", state 951, "(1)"
-       line 401, "pan.___", state 952, "(1)"
-       line 401, "pan.___", state 952, "(1)"
-       line 399, "pan.___", state 957, "((i<1))"
-       line 399, "pan.___", state 957, "((i>=1))"
-       line 406, "pan.___", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 976, "(1)"
-       line 407, "pan.___", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, "pan.___", state 977, "else"
-       line 407, "pan.___", state 980, "(1)"
-       line 407, "pan.___", state 981, "(1)"
-       line 407, "pan.___", state 981, "(1)"
-       line 411, "pan.___", state 989, "(1)"
-       line 411, "pan.___", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, "pan.___", state 990, "else"
-       line 411, "pan.___", state 993, "(1)"
-       line 411, "pan.___", state 994, "(1)"
-       line 411, "pan.___", state 994, "(1)"
-       line 409, "pan.___", state 999, "((i<1))"
-       line 409, "pan.___", state 999, "((i>=1))"
-       line 416, "pan.___", state 1006, "(1)"
-       line 416, "pan.___", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, "pan.___", state 1007, "else"
-       line 416, "pan.___", state 1010, "(1)"
-       line 416, "pan.___", state 1011, "(1)"
-       line 416, "pan.___", state 1011, "(1)"
-       line 418, "pan.___", state 1014, "(1)"
-       line 418, "pan.___", state 1014, "(1)"
-       line 360, "pan.___", state 1023, "sighand_exec = 1"
-       line 401, "pan.___", state 1054, "(1)"
-       line 406, "pan.___", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 1113, "(1)"
-       line 401, "pan.___", state 1151, "(1)"
-       line 406, "pan.___", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 1210, "(1)"
-       line 397, "pan.___", state 1236, "(1)"
-       line 401, "pan.___", state 1250, "(1)"
-       line 406, "pan.___", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 1309, "(1)"
-       line 401, "pan.___", state 1350, "(1)"
-       line 406, "pan.___", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 1409, "(1)"
-       line 173, "pan.___", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, "pan.___", state 1432, "(1)"
-       line 177, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 1441, "(1)"
-       line 177, "pan.___", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, "pan.___", state 1442, "else"
-       line 175, "pan.___", state 1447, "((j<1))"
-       line 175, "pan.___", state 1447, "((j>=1))"
-       line 181, "pan.___", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 1462, "(1)"
-       line 162, "pan.___", state 1470, "(1)"
-       line 162, "pan.___", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, "pan.___", state 1471, "else"
-       line 160, "pan.___", state 1476, "((j<1))"
-       line 160, "pan.___", state 1476, "((j>=1))"
-       line 166, "pan.___", state 1482, "(1)"
-       line 166, "pan.___", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, "pan.___", state 1483, "else"
-       line 168, "pan.___", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, "pan.___", state 1486, "else"
-       line 173, "pan.___", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, "pan.___", state 1495, "(1)"
-       line 177, "pan.___", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, "pan.___", state 1504, "(1)"
-       line 177, "pan.___", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, "pan.___", state 1505, "else"
-       line 175, "pan.___", state 1510, "((j<1))"
-       line 175, "pan.___", state 1510, "((j>=1))"
-       line 181, "pan.___", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 1525, "(1)"
-       line 162, "pan.___", state 1533, "(1)"
-       line 162, "pan.___", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, "pan.___", state 1534, "else"
-       line 160, "pan.___", state 1539, "((j<1))"
-       line 160, "pan.___", state 1539, "((j>=1))"
-       line 166, "pan.___", state 1545, "(1)"
-       line 166, "pan.___", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, "pan.___", state 1546, "else"
-       line 168, "pan.___", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, "pan.___", state 1549, "else"
-       line 200, "pan.___", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, "pan.___", state 1551, "else"
-       line 212, "pan.___", state 1555, "((i<1))"
-       line 212, "pan.___", state 1555, "((i>=1))"
-       line 173, "pan.___", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, "pan.___", state 1562, "(1)"
-       line 177, "pan.___", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 1571, "(1)"
-       line 177, "pan.___", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, "pan.___", state 1572, "else"
-       line 175, "pan.___", state 1577, "((j<1))"
-       line 175, "pan.___", state 1577, "((j>=1))"
-       line 181, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 1592, "(1)"
-       line 162, "pan.___", state 1600, "(1)"
-       line 162, "pan.___", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, "pan.___", state 1601, "else"
-       line 160, "pan.___", state 1606, "((j<1))"
-       line 160, "pan.___", state 1606, "((j>=1))"
-       line 166, "pan.___", state 1612, "(1)"
-       line 166, "pan.___", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, "pan.___", state 1613, "else"
-       line 168, "pan.___", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, "pan.___", state 1616, "else"
-       line 200, "pan.___", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, "pan.___", state 1618, "else"
-       line 219, "pan.___", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, "pan.___", state 1619, "else"
-       line 354, "pan.___", state 1625, "((sighand_exec==1))"
-       line 354, "pan.___", state 1625, "else"
-       line 360, "pan.___", state 1628, "sighand_exec = 1"
-       line 397, "pan.___", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, "pan.___", state 1643, "(1)"
-       line 397, "pan.___", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, "pan.___", state 1644, "else"
-       line 397, "pan.___", state 1647, "(1)"
-       line 401, "pan.___", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, "pan.___", state 1657, "(1)"
-       line 401, "pan.___", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, "pan.___", state 1658, "else"
-       line 401, "pan.___", state 1661, "(1)"
-       line 401, "pan.___", state 1662, "(1)"
-       line 401, "pan.___", state 1662, "(1)"
-       line 399, "pan.___", state 1667, "((i<1))"
-       line 399, "pan.___", state 1667, "((i>=1))"
-       line 406, "pan.___", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 1686, "(1)"
-       line 407, "pan.___", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, "pan.___", state 1687, "else"
-       line 407, "pan.___", state 1690, "(1)"
-       line 407, "pan.___", state 1691, "(1)"
-       line 407, "pan.___", state 1691, "(1)"
-       line 411, "pan.___", state 1699, "(1)"
-       line 411, "pan.___", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, "pan.___", state 1700, "else"
-       line 411, "pan.___", state 1703, "(1)"
-       line 411, "pan.___", state 1704, "(1)"
-       line 411, "pan.___", state 1704, "(1)"
-       line 409, "pan.___", state 1709, "((i<1))"
-       line 409, "pan.___", state 1709, "((i>=1))"
-       line 416, "pan.___", state 1716, "(1)"
-       line 416, "pan.___", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, "pan.___", state 1717, "else"
-       line 416, "pan.___", state 1720, "(1)"
-       line 416, "pan.___", state 1721, "(1)"
-       line 416, "pan.___", state 1721, "(1)"
-       line 418, "pan.___", state 1724, "(1)"
-       line 418, "pan.___", state 1724, "(1)"
-       line 360, "pan.___", state 1733, "sighand_exec = 1"
-       line 177, "pan.___", state 1758, "(1)"
-       line 181, "pan.___", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 1779, "(1)"
-       line 162, "pan.___", state 1787, "(1)"
-       line 166, "pan.___", state 1799, "(1)"
-       line 173, "pan.___", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, "pan.___", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, "pan.___", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 1842, "(1)"
-       line 162, "pan.___", state 1850, "(1)"
-       line 166, "pan.___", state 1862, "(1)"
-       line 173, "pan.___", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, "pan.___", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 1909, "(1)"
-       line 162, "pan.___", state 1917, "(1)"
-       line 166, "pan.___", state 1929, "(1)"
-       line 700, "pan.___", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 746, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 0.15 seconds
-pan: rate 134306.67 states/second
-pan: avg transition delay 7.0835e-07 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.ltl b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.spin.input
deleted file mode 100644 (file)
index 953115f..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 837f3d9..0000000
+++ /dev/null
@@ -1,15043 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1180
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1181
-243:2:1185
-244:2:1186
-245:2:1194
-246:2:1195
-247:2:1199
-248:2:1200
-249:2:1194
-250:2:1195
-251:2:1196
-252:2:1208
-253:2:1213
-254:2:1217
-255:2:1218
-256:2:1225
-257:2:1226
-258:2:1237
-259:2:1238
-260:2:1239
-261:2:1237
-262:2:1238
-263:2:1239
-264:2:1250
-265:2:1255
-266:2:1256
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1268
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1270
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1271
-279:2:1275
-280:2:1276
-281:2:1284
-282:2:1285
-283:2:1289
-284:2:1290
-285:2:1284
-286:2:1285
-287:2:1289
-288:2:1290
-289:2:1298
-290:2:1303
-291:2:1307
-292:2:1308
-293:2:1315
-294:2:1316
-295:2:1327
-296:2:1328
-297:2:1329
-298:2:1327
-299:2:1328
-300:2:1329
-301:2:1340
-302:2:1345
-303:2:1346
-304:0:4365
-305:2:1358
-306:0:4365
-307:2:1454
-308:0:4365
-309:3:2528
-310:0:4365
-311:2:1455
-312:0:4365
-313:3:2529
-314:0:4365
-315:2:1652
-316:0:4365
-317:2:1653
-318:0:4365
-319:2:1657
-320:0:4365
-321:2:1660
-322:0:4365
-323:3:2528
-324:0:4365
-325:2:1665
-326:2:1669
-327:2:1670
-328:2:1678
-329:2:1679
-330:2:1683
-331:2:1684
-332:2:1678
-333:2:1679
-334:2:1680
-335:2:1692
-336:2:1697
-337:2:1701
-338:2:1702
-339:2:1709
-340:2:1710
-341:2:1721
-342:2:1722
-343:2:1723
-344:2:1721
-345:2:1722
-346:2:1723
-347:2:1734
-348:2:1739
-349:2:1740
-350:0:4365
-351:3:2529
-352:0:4365
-353:2:1752
-354:0:4365
-355:3:2528
-356:0:4365
-357:2:1754
-358:0:4365
-359:3:2529
-360:0:4365
-361:2:1755
-362:2:1759
-363:2:1760
-364:2:1768
-365:2:1769
-366:2:1773
-367:2:1774
-368:2:1768
-369:2:1769
-370:2:1773
-371:2:1774
-372:2:1782
-373:2:1787
-374:2:1791
-375:2:1792
-376:2:1799
-377:2:1800
-378:2:1811
-379:2:1812
-380:2:1813
-381:2:1811
-382:2:1812
-383:2:1813
-384:2:1824
-385:2:1829
-386:2:1830
-387:0:4365
-388:2:1842
-389:0:4365
-390:3:2528
-391:0:4365
-392:2:1844
-393:0:4365
-394:3:2529
-395:0:4365
-396:2:1845
-397:2:1849
-398:2:1850
-399:2:1858
-400:2:1859
-401:2:1863
-402:2:1864
-403:2:1858
-404:2:1859
-405:2:1863
-406:2:1864
-407:2:1872
-408:2:1877
-409:2:1881
-410:2:1882
-411:2:1889
-412:2:1890
-413:2:1901
-414:2:1902
-415:2:1903
-416:2:1901
-417:2:1902
-418:2:1903
-419:2:1914
-420:2:1919
-421:2:1920
-422:0:4365
-423:2:1932
-424:0:4365
-425:3:2528
-426:0:4365
-427:2:1934
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:1935
-432:0:4365
-433:2:1936
-434:0:4365
-435:2:2129
-436:0:4365
-437:2:2130
-438:0:4365
-439:2:2134
-440:0:4365
-441:3:2528
-442:0:4365
-443:2:2136
-444:0:4365
-445:3:2529
-446:0:4365
-447:2:2137
-448:2:2141
-449:2:2142
-450:2:2150
-451:2:2151
-452:2:2155
-453:2:2156
-454:2:2150
-455:2:2151
-456:2:2155
-457:2:2156
-458:2:2164
-459:2:2169
-460:2:2173
-461:2:2174
-462:2:2181
-463:2:2182
-464:2:2193
-465:2:2194
-466:2:2195
-467:2:2193
-468:2:2194
-469:2:2195
-470:2:2206
-471:2:2211
-472:2:2212
-473:0:4365
-474:2:2224
-475:0:4365
-476:3:2528
-477:0:4365
-478:2:2226
-479:0:4365
-480:3:2529
-481:0:4365
-482:2:1936
-483:0:4365
-484:2:2129
-485:0:4365
-486:2:2130
-487:0:4365
-488:2:2134
-489:0:4365
-490:3:2528
-491:0:4365
-492:2:2136
-493:0:4365
-494:3:2529
-495:0:4365
-496:2:2137
-497:2:2141
-498:2:2142
-499:2:2150
-500:2:2151
-501:2:2155
-502:2:2156
-503:2:2150
-504:2:2151
-505:2:2152
-506:2:2164
-507:2:2169
-508:2:2173
-509:2:2174
-510:2:2181
-511:2:2182
-512:2:2193
-513:2:2194
-514:2:2195
-515:2:2193
-516:2:2194
-517:2:2195
-518:2:2206
-519:2:2211
-520:2:2212
-521:0:4365
-522:2:2224
-523:0:4365
-524:3:2528
-525:0:4365
-526:2:2226
-527:0:4365
-528:3:2529
-529:0:4365
-530:2:2230
-531:0:4365
-532:3:2528
-533:0:4365
-534:2:2235
-535:2:2239
-536:2:2240
-537:2:2248
-538:2:2249
-539:2:2253
-540:2:2254
-541:2:2248
-542:2:2249
-543:2:2250
-544:2:2262
-545:2:2267
-546:2:2271
-547:2:2272
-548:2:2279
-549:2:2280
-550:2:2291
-551:2:2292
-552:2:2293
-553:2:2291
-554:2:2292
-555:2:2293
-556:2:2304
-557:2:2309
-558:2:2310
-559:0:4365
-560:3:2529
-561:0:4365
-562:2:2322
-563:0:4365
-564:2:1169
-565:0:4365
-566:3:2528
-567:0:4365
-568:2:1170
-569:0:4365
-570:3:2529
-571:0:4365
-572:3:2530
-573:0:4365
-574:3:2536
-575:0:4365
-576:3:2537
-577:0:4365
-578:3:2547
-579:0:4365
-580:3:2548
-581:0:4365
-582:3:2552
-583:3:2553
-584:3:2557
-585:3:2561
-586:3:2562
-587:3:2557
-588:3:2561
-589:3:2562
-590:3:2566
-591:3:2574
-592:3:2575
-593:3:2580
-594:3:2587
-595:3:2588
-596:3:2587
-597:3:2588
-598:3:2595
-599:3:2600
-600:0:4365
-601:3:2611
-602:0:4365
-603:3:2615
-604:3:2616
-605:3:2620
-606:3:2624
-607:3:2625
-608:3:2620
-609:3:2624
-610:3:2625
-611:3:2629
-612:3:2637
-613:3:2638
-614:3:2643
-615:3:2650
-616:3:2651
-617:3:2650
-618:3:2651
-619:3:2658
-620:3:2663
-621:0:4365
-622:3:2611
-623:0:4365
-624:3:2615
-625:3:2616
-626:3:2620
-627:3:2624
-628:3:2625
-629:3:2620
-630:3:2624
-631:3:2625
-632:3:2629
-633:3:2637
-634:3:2638
-635:3:2643
-636:3:2650
-637:3:2651
-638:3:2650
-639:3:2651
-640:3:2658
-641:3:2663
-642:0:4365
-643:3:2674
-644:0:4365
-645:3:2682
-646:3:2683
-647:3:2687
-648:3:2691
-649:3:2692
-650:3:2687
-651:3:2691
-652:3:2692
-653:3:2696
-654:3:2704
-655:3:2705
-656:3:2710
-657:3:2717
-658:3:2718
-659:3:2717
-660:3:2718
-661:3:2725
-662:3:2730
-663:0:4365
-664:3:2745
-665:0:4365
-666:3:2746
-667:0:4365
-668:2:1173
-669:0:4365
-670:3:2747
-671:0:4365
-672:2:1179
-673:0:4365
-674:2:1180
-675:0:4365
-676:3:2746
-677:0:4365
-678:2:1181
-679:2:1185
-680:2:1186
-681:2:1194
-682:2:1195
-683:2:1199
-684:2:1200
-685:2:1194
-686:2:1195
-687:2:1199
-688:2:1200
-689:2:1208
-690:2:1213
-691:2:1217
-692:2:1218
-693:2:1225
-694:2:1226
-695:2:1237
-696:2:1238
-697:2:1239
-698:2:1237
-699:2:1238
-700:2:1239
-701:2:1250
-702:2:1255
-703:2:1256
-704:0:4365
-705:3:2747
-706:0:4365
-707:2:1268
-708:0:4365
-709:3:2746
-710:0:4365
-711:2:1270
-712:0:4365
-713:3:2747
-714:0:4365
-715:2:1271
-716:2:1275
-717:2:1276
-718:2:1284
-719:2:1285
-720:2:1289
-721:2:1290
-722:2:1284
-723:2:1285
-724:2:1289
-725:2:1290
-726:2:1298
-727:2:1303
-728:2:1307
-729:2:1308
-730:2:1315
-731:2:1316
-732:2:1327
-733:2:1328
-734:2:1329
-735:2:1327
-736:2:1328
-737:2:1329
-738:2:1340
-739:2:1345
-740:2:1346
-741:0:4365
-742:2:1358
-743:0:4365
-744:2:1360
-745:0:4365
-746:3:2746
-747:0:4365
-748:2:1361
-749:0:4365
-750:3:2747
-751:0:4365
-752:2:1362
-753:2:1366
-754:2:1367
-755:2:1375
-756:2:1376
-757:2:1380
-758:2:1381
-759:2:1375
-760:2:1376
-761:2:1380
-762:2:1381
-763:2:1389
-764:2:1394
-765:2:1398
-766:2:1399
-767:2:1406
-768:2:1407
-769:2:1418
-770:2:1419
-771:2:1420
-772:2:1418
-773:2:1419
-774:2:1420
-775:2:1431
-776:2:1436
-777:2:1437
-778:0:4365
-779:2:1449
-780:0:4365
-781:3:2746
-782:0:4365
-783:2:1451
-784:0:4365
-785:3:2747
-786:0:4365
-787:2:1652
-788:0:4365
-789:2:1653
-790:0:4365
-791:2:1657
-792:0:4365
-793:2:1180
-794:0:4365
-795:3:2746
-796:0:4365
-797:2:1181
-798:2:1185
-799:2:1186
-800:2:1194
-801:2:1195
-802:2:1199
-803:2:1200
-804:2:1194
-805:2:1195
-806:2:1196
-807:2:1208
-808:2:1213
-809:2:1217
-810:2:1218
-811:2:1225
-812:2:1226
-813:2:1237
-814:2:1238
-815:2:1239
-816:2:1237
-817:2:1238
-818:2:1239
-819:2:1250
-820:2:1255
-821:2:1256
-822:0:4365
-823:3:2747
-824:0:4365
-825:2:1268
-826:0:4365
-827:3:2746
-828:0:4365
-829:2:1270
-830:0:4365
-831:3:2747
-832:0:4365
-833:2:1271
-834:2:1275
-835:2:1276
-836:2:1284
-837:2:1285
-838:2:1289
-839:2:1290
-840:2:1284
-841:2:1285
-842:2:1289
-843:2:1290
-844:2:1298
-845:2:1303
-846:2:1307
-847:2:1308
-848:2:1315
-849:2:1316
-850:2:1327
-851:2:1328
-852:2:1329
-853:2:1327
-854:2:1328
-855:2:1329
-856:2:1340
-857:2:1345
-858:2:1346
-859:0:4365
-860:2:1358
-861:0:4365
-862:2:1454
-863:0:4365
-864:3:2746
-865:0:4365
-866:2:1455
-867:0:4365
-868:3:2747
-869:0:4365
-870:2:1652
-871:0:4365
-872:2:1653
-873:0:4365
-874:2:1657
-875:0:4365
-876:2:1660
-877:0:4365
-878:3:2746
-879:0:4365
-880:2:1665
-881:2:1669
-882:2:1670
-883:2:1678
-884:2:1679
-885:2:1683
-886:2:1684
-887:2:1678
-888:2:1679
-889:2:1680
-890:2:1692
-891:2:1697
-892:2:1701
-893:2:1702
-894:2:1709
-895:2:1710
-896:2:1721
-897:2:1722
-898:2:1723
-899:2:1721
-900:2:1722
-901:2:1723
-902:2:1734
-903:2:1739
-904:2:1740
-905:0:4365
-906:3:2747
-907:0:4365
-908:2:1752
-909:0:4365
-910:3:2746
-911:0:4365
-912:2:1754
-913:0:4365
-914:3:2747
-915:0:4365
-916:2:1755
-917:2:1759
-918:2:1760
-919:2:1768
-920:2:1769
-921:2:1773
-922:2:1774
-923:2:1768
-924:2:1769
-925:2:1773
-926:2:1774
-927:2:1782
-928:2:1787
-929:2:1791
-930:2:1792
-931:2:1799
-932:2:1800
-933:2:1811
-934:2:1812
-935:2:1813
-936:2:1811
-937:2:1812
-938:2:1813
-939:2:1824
-940:2:1829
-941:2:1830
-942:0:4365
-943:2:1842
-944:0:4365
-945:3:2746
-946:0:4365
-947:2:1844
-948:0:4365
-949:3:2747
-950:0:4365
-951:2:1845
-952:2:1849
-953:2:1850
-954:2:1858
-955:2:1859
-956:2:1863
-957:2:1864
-958:2:1858
-959:2:1859
-960:2:1863
-961:2:1864
-962:2:1872
-963:2:1877
-964:2:1881
-965:2:1882
-966:2:1889
-967:2:1890
-968:2:1901
-969:2:1902
-970:2:1903
-971:2:1901
-972:2:1902
-973:2:1903
-974:2:1914
-975:2:1919
-976:2:1920
-977:0:4365
-978:2:1932
-979:0:4365
-980:3:2746
-981:0:4365
-982:2:1934
-983:0:4365
-984:3:2747
-985:0:4365
-986:2:1935
-987:0:4365
-988:2:1936
-989:0:4365
-990:2:2129
-991:0:4365
-992:2:2130
-993:0:4365
-994:2:2134
-995:0:4365
-996:3:2746
-997:0:4365
-998:2:2136
-999:0:4365
-1000:3:2747
-1001:0:4365
-1002:2:2137
-1003:2:2141
-1004:2:2142
-1005:2:2150
-1006:2:2151
-1007:2:2155
-1008:2:2156
-1009:2:2150
-1010:2:2151
-1011:2:2155
-1012:2:2156
-1013:2:2164
-1014:2:2169
-1015:2:2173
-1016:2:2174
-1017:2:2181
-1018:2:2182
-1019:2:2193
-1020:2:2194
-1021:2:2195
-1022:2:2193
-1023:2:2194
-1024:2:2195
-1025:2:2206
-1026:2:2211
-1027:2:2212
-1028:0:4365
-1029:2:2224
-1030:0:4365
-1031:3:2746
-1032:0:4365
-1033:2:2226
-1034:0:4365
-1035:3:2747
-1036:0:4365
-1037:2:1936
-1038:0:4365
-1039:2:2129
-1040:0:4365
-1041:2:2130
-1042:0:4365
-1043:2:2134
-1044:0:4365
-1045:3:2746
-1046:0:4365
-1047:2:2136
-1048:0:4365
-1049:3:2747
-1050:0:4365
-1051:2:2137
-1052:2:2141
-1053:2:2142
-1054:2:2150
-1055:2:2151
-1056:2:2155
-1057:2:2156
-1058:2:2150
-1059:2:2151
-1060:2:2152
-1061:2:2164
-1062:2:2169
-1063:2:2173
-1064:2:2174
-1065:2:2181
-1066:2:2182
-1067:2:2193
-1068:2:2194
-1069:2:2195
-1070:2:2193
-1071:2:2194
-1072:2:2195
-1073:2:2206
-1074:2:2211
-1075:2:2212
-1076:0:4365
-1077:2:2224
-1078:0:4365
-1079:3:2746
-1080:0:4365
-1081:2:2226
-1082:0:4365
-1083:3:2747
-1084:0:4365
-1085:2:2230
-1086:0:4365
-1087:3:2746
-1088:0:4365
-1089:2:2235
-1090:2:2239
-1091:2:2240
-1092:2:2248
-1093:2:2249
-1094:2:2253
-1095:2:2254
-1096:2:2248
-1097:2:2249
-1098:2:2250
-1099:2:2262
-1100:2:2267
-1101:2:2271
-1102:2:2272
-1103:2:2279
-1104:2:2280
-1105:2:2291
-1106:2:2292
-1107:2:2293
-1108:2:2291
-1109:2:2292
-1110:2:2293
-1111:2:2304
-1112:2:2309
-1113:2:2310
-1114:0:4365
-1115:3:2747
-1116:0:4365
-1117:2:2322
-1118:0:4365
-1119:2:1169
-1120:0:4365
-1121:3:2746
-1122:0:4365
-1123:2:1170
-1124:0:4365
-1125:3:2747
-1126:0:4365
-1127:3:2748
-1128:0:4365
-1129:3:2754
-1130:0:4365
-1131:3:2755
-1132:3:2759
-1133:3:2760
-1134:3:2768
-1135:3:2769
-1136:3:2773
-1137:3:2774
-1138:3:2768
-1139:3:2769
-1140:3:2773
-1141:3:2774
-1142:3:2782
-1143:3:2787
-1144:3:2791
-1145:3:2792
-1146:3:2799
-1147:3:2800
-1148:3:2811
-1149:3:2812
-1150:3:2813
-1151:3:2811
-1152:3:2812
-1153:3:2813
-1154:3:2824
-1155:3:2829
-1156:3:2830
-1157:0:4365
-1158:3:2842
-1159:0:4365
-1160:3:2843
-1161:0:4365
-1162:2:1173
-1163:0:4365
-1164:3:2844
-1165:0:4365
-1166:2:1179
-1167:0:4365
-1168:2:1180
-1169:0:4365
-1170:3:2843
-1171:0:4365
-1172:2:1181
-1173:2:1185
-1174:2:1186
-1175:2:1194
-1176:2:1195
-1177:2:1199
-1178:2:1200
-1179:2:1194
-1180:2:1195
-1181:2:1199
-1182:2:1200
-1183:2:1208
-1184:2:1213
-1185:2:1217
-1186:2:1218
-1187:2:1225
-1188:2:1226
-1189:2:1237
-1190:2:1238
-1191:2:1239
-1192:2:1237
-1193:2:1238
-1194:2:1239
-1195:2:1250
-1196:2:1255
-1197:2:1256
-1198:0:4365
-1199:3:2844
-1200:0:4365
-1201:2:1268
-1202:0:4365
-1203:3:2843
-1204:0:4365
-1205:2:1270
-1206:0:4365
-1207:3:2844
-1208:0:4365
-1209:2:1271
-1210:2:1275
-1211:2:1276
-1212:2:1284
-1213:2:1285
-1214:2:1289
-1215:2:1290
-1216:2:1284
-1217:2:1285
-1218:2:1289
-1219:2:1290
-1220:2:1298
-1221:2:1303
-1222:2:1307
-1223:2:1308
-1224:2:1315
-1225:2:1316
-1226:2:1327
-1227:2:1328
-1228:2:1329
-1229:2:1327
-1230:2:1328
-1231:2:1329
-1232:2:1340
-1233:2:1345
-1234:2:1346
-1235:0:4365
-1236:2:1358
-1237:0:4365
-1238:2:1360
-1239:0:4365
-1240:3:2843
-1241:0:4365
-1242:2:1361
-1243:0:4365
-1244:3:2844
-1245:0:4365
-1246:2:1362
-1247:2:1366
-1248:2:1367
-1249:2:1375
-1250:2:1376
-1251:2:1380
-1252:2:1381
-1253:2:1375
-1254:2:1376
-1255:2:1380
-1256:2:1381
-1257:2:1389
-1258:2:1394
-1259:2:1398
-1260:2:1399
-1261:2:1406
-1262:2:1407
-1263:2:1418
-1264:2:1419
-1265:2:1420
-1266:2:1418
-1267:2:1419
-1268:2:1420
-1269:2:1431
-1270:2:1436
-1271:2:1437
-1272:0:4365
-1273:2:1449
-1274:0:4365
-1275:3:2843
-1276:0:4365
-1277:2:1451
-1278:0:4365
-1279:3:2844
-1280:0:4365
-1281:2:1652
-1282:0:4365
-1283:2:1653
-1284:0:4365
-1285:2:1657
-1286:0:4365
-1287:2:1180
-1288:0:4365
-1289:3:2843
-1290:0:4365
-1291:2:1181
-1292:2:1185
-1293:2:1186
-1294:2:1194
-1295:2:1195
-1296:2:1199
-1297:2:1200
-1298:2:1194
-1299:2:1195
-1300:2:1196
-1301:2:1208
-1302:2:1213
-1303:2:1217
-1304:2:1218
-1305:2:1225
-1306:2:1226
-1307:2:1237
-1308:2:1238
-1309:2:1239
-1310:2:1237
-1311:2:1238
-1312:2:1239
-1313:2:1250
-1314:2:1255
-1315:2:1256
-1316:0:4365
-1317:3:2844
-1318:0:4365
-1319:2:1268
-1320:0:4365
-1321:3:2843
-1322:0:4365
-1323:2:1270
-1324:0:4365
-1325:3:2844
-1326:0:4365
-1327:2:1271
-1328:2:1275
-1329:2:1276
-1330:2:1284
-1331:2:1285
-1332:2:1289
-1333:2:1290
-1334:2:1284
-1335:2:1285
-1336:2:1289
-1337:2:1290
-1338:2:1298
-1339:2:1303
-1340:2:1307
-1341:2:1308
-1342:2:1315
-1343:2:1316
-1344:2:1327
-1345:2:1328
-1346:2:1329
-1347:2:1327
-1348:2:1328
-1349:2:1329
-1350:2:1340
-1351:2:1345
-1352:2:1346
-1353:0:4365
-1354:2:1358
-1355:0:4365
-1356:2:1454
-1357:0:4365
-1358:3:2843
-1359:0:4365
-1360:2:1455
-1361:0:4365
-1362:3:2844
-1363:0:4365
-1364:2:1652
-1365:0:4365
-1366:2:1653
-1367:0:4365
-1368:2:1657
-1369:0:4365
-1370:2:1660
-1371:0:4365
-1372:3:2843
-1373:0:4365
-1374:2:1665
-1375:2:1669
-1376:2:1670
-1377:2:1678
-1378:2:1679
-1379:2:1683
-1380:2:1684
-1381:2:1678
-1382:2:1679
-1383:2:1680
-1384:2:1692
-1385:2:1697
-1386:2:1701
-1387:2:1702
-1388:2:1709
-1389:2:1710
-1390:2:1721
-1391:2:1722
-1392:2:1723
-1393:2:1721
-1394:2:1722
-1395:2:1723
-1396:2:1734
-1397:2:1739
-1398:2:1740
-1399:0:4365
-1400:3:2844
-1401:0:4365
-1402:2:1752
-1403:0:4365
-1404:3:2843
-1405:0:4365
-1406:2:1754
-1407:0:4365
-1408:3:2844
-1409:0:4365
-1410:2:1755
-1411:2:1759
-1412:2:1760
-1413:2:1768
-1414:2:1769
-1415:2:1773
-1416:2:1774
-1417:2:1768
-1418:2:1769
-1419:2:1773
-1420:2:1774
-1421:2:1782
-1422:2:1787
-1423:2:1791
-1424:2:1792
-1425:2:1799
-1426:2:1800
-1427:2:1811
-1428:2:1812
-1429:2:1813
-1430:2:1811
-1431:2:1812
-1432:2:1813
-1433:2:1824
-1434:2:1829
-1435:2:1830
-1436:0:4365
-1437:2:1842
-1438:0:4365
-1439:3:2843
-1440:0:4365
-1441:2:1844
-1442:0:4365
-1443:3:2844
-1444:0:4365
-1445:2:1845
-1446:2:1849
-1447:2:1850
-1448:2:1858
-1449:2:1859
-1450:2:1863
-1451:2:1864
-1452:2:1858
-1453:2:1859
-1454:2:1863
-1455:2:1864
-1456:2:1872
-1457:2:1877
-1458:2:1881
-1459:2:1882
-1460:2:1889
-1461:2:1890
-1462:2:1901
-1463:2:1902
-1464:2:1903
-1465:2:1901
-1466:2:1902
-1467:2:1903
-1468:2:1914
-1469:2:1919
-1470:2:1920
-1471:0:4365
-1472:2:1932
-1473:0:4365
-1474:3:2843
-1475:0:4365
-1476:2:1934
-1477:0:4365
-1478:3:2844
-1479:0:4365
-1480:2:1935
-1481:0:4365
-1482:2:1936
-1483:0:4365
-1484:2:2129
-1485:0:4365
-1486:2:2130
-1487:0:4365
-1488:2:2134
-1489:0:4365
-1490:3:2843
-1491:0:4365
-1492:2:2136
-1493:0:4365
-1494:3:2844
-1495:0:4365
-1496:2:2137
-1497:2:2141
-1498:2:2142
-1499:2:2150
-1500:2:2151
-1501:2:2155
-1502:2:2156
-1503:2:2150
-1504:2:2151
-1505:2:2155
-1506:2:2156
-1507:2:2164
-1508:2:2169
-1509:2:2173
-1510:2:2174
-1511:2:2181
-1512:2:2182
-1513:2:2193
-1514:2:2194
-1515:2:2195
-1516:2:2193
-1517:2:2194
-1518:2:2195
-1519:2:2206
-1520:2:2211
-1521:2:2212
-1522:0:4365
-1523:2:2224
-1524:0:4365
-1525:3:2843
-1526:0:4365
-1527:2:2226
-1528:0:4365
-1529:3:2844
-1530:0:4365
-1531:2:1936
-1532:0:4365
-1533:2:2129
-1534:0:4365
-1535:2:2130
-1536:0:4365
-1537:2:2134
-1538:0:4365
-1539:3:2843
-1540:0:4365
-1541:2:2136
-1542:0:4365
-1543:3:2844
-1544:0:4365
-1545:2:2137
-1546:2:2141
-1547:2:2142
-1548:2:2150
-1549:2:2151
-1550:2:2155
-1551:2:2156
-1552:2:2150
-1553:2:2151
-1554:2:2152
-1555:2:2164
-1556:2:2169
-1557:2:2173
-1558:2:2174
-1559:2:2181
-1560:2:2182
-1561:2:2193
-1562:2:2194
-1563:2:2195
-1564:2:2193
-1565:2:2194
-1566:2:2195
-1567:2:2206
-1568:2:2211
-1569:2:2212
-1570:0:4365
-1571:2:2224
-1572:0:4365
-1573:3:2843
-1574:0:4365
-1575:2:2226
-1576:0:4365
-1577:3:2844
-1578:0:4365
-1579:2:2230
-1580:0:4365
-1581:3:2843
-1582:0:4365
-1583:2:2235
-1584:2:2239
-1585:2:2240
-1586:2:2248
-1587:2:2249
-1588:2:2253
-1589:2:2254
-1590:2:2248
-1591:2:2249
-1592:2:2250
-1593:2:2262
-1594:2:2267
-1595:2:2271
-1596:2:2272
-1597:2:2279
-1598:2:2280
-1599:2:2291
-1600:2:2292
-1601:2:2293
-1602:2:2291
-1603:2:2292
-1604:2:2293
-1605:2:2304
-1606:2:2309
-1607:2:2310
-1608:0:4365
-1609:3:2844
-1610:0:4365
-1611:2:2322
-1612:0:4365
-1613:2:1169
-1614:0:4365
-1615:3:2843
-1616:0:4365
-1617:2:1170
-1618:0:4365
-1619:3:2844
-1620:0:4365
-1621:3:2845
-1622:0:4365
-1623:3:2851
-1624:0:4365
-1625:3:2854
-1626:3:2855
-1627:3:2867
-1628:3:2868
-1629:3:2872
-1630:3:2873
-1631:3:2867
-1632:3:2868
-1633:3:2872
-1634:3:2873
-1635:3:2881
-1636:3:2886
-1637:3:2890
-1638:3:2891
-1639:3:2898
-1640:3:2899
-1641:3:2910
-1642:3:2911
-1643:3:2912
-1644:3:2910
-1645:3:2911
-1646:3:2912
-1647:3:2923
-1648:3:2928
-1649:3:2929
-1650:0:4365
-1651:3:2941
-1652:0:4365
-1653:3:2942
-1654:0:4365
-1655:2:1173
-1656:0:4365
-1657:3:2943
-1658:0:4365
-1659:2:1179
-1660:0:4365
-1661:2:1180
-1662:0:4365
-1663:3:2942
-1664:0:4365
-1665:2:1181
-1666:2:1185
-1667:2:1186
-1668:2:1194
-1669:2:1195
-1670:2:1199
-1671:2:1200
-1672:2:1194
-1673:2:1195
-1674:2:1199
-1675:2:1200
-1676:2:1208
-1677:2:1213
-1678:2:1217
-1679:2:1218
-1680:2:1225
-1681:2:1226
-1682:2:1237
-1683:2:1238
-1684:2:1239
-1685:2:1237
-1686:2:1238
-1687:2:1239
-1688:2:1250
-1689:2:1255
-1690:2:1256
-1691:0:4365
-1692:3:2943
-1693:0:4365
-1694:2:1268
-1695:0:4365
-1696:3:2942
-1697:0:4365
-1698:2:1270
-1699:0:4365
-1700:3:2943
-1701:0:4365
-1702:2:1271
-1703:2:1275
-1704:2:1276
-1705:2:1284
-1706:2:1285
-1707:2:1289
-1708:2:1290
-1709:2:1284
-1710:2:1285
-1711:2:1289
-1712:2:1290
-1713:2:1298
-1714:2:1303
-1715:2:1307
-1716:2:1308
-1717:2:1315
-1718:2:1316
-1719:2:1327
-1720:2:1328
-1721:2:1329
-1722:2:1327
-1723:2:1328
-1724:2:1329
-1725:2:1340
-1726:2:1345
-1727:2:1346
-1728:0:4365
-1729:2:1358
-1730:0:4365
-1731:2:1360
-1732:0:4365
-1733:3:2942
-1734:0:4365
-1735:2:1361
-1736:0:4365
-1737:3:2943
-1738:0:4365
-1739:2:1362
-1740:2:1366
-1741:2:1367
-1742:2:1375
-1743:2:1376
-1744:2:1380
-1745:2:1381
-1746:2:1375
-1747:2:1376
-1748:2:1380
-1749:2:1381
-1750:2:1389
-1751:2:1394
-1752:2:1398
-1753:2:1399
-1754:2:1406
-1755:2:1407
-1756:2:1418
-1757:2:1419
-1758:2:1420
-1759:2:1418
-1760:2:1419
-1761:2:1420
-1762:2:1431
-1763:2:1436
-1764:2:1437
-1765:0:4365
-1766:2:1449
-1767:0:4365
-1768:3:2942
-1769:0:4365
-1770:2:1451
-1771:0:4365
-1772:3:2943
-1773:0:4365
-1774:2:1652
-1775:0:4365
-1776:2:1653
-1777:0:4365
-1778:2:1657
-1779:0:4365
-1780:2:1180
-1781:0:4365
-1782:3:2942
-1783:0:4365
-1784:2:1181
-1785:2:1185
-1786:2:1186
-1787:2:1194
-1788:2:1195
-1789:2:1199
-1790:2:1200
-1791:2:1194
-1792:2:1195
-1793:2:1196
-1794:2:1208
-1795:2:1213
-1796:2:1217
-1797:2:1218
-1798:2:1225
-1799:2:1226
-1800:2:1237
-1801:2:1238
-1802:2:1239
-1803:2:1237
-1804:2:1238
-1805:2:1239
-1806:2:1250
-1807:2:1255
-1808:2:1256
-1809:0:4365
-1810:3:2943
-1811:0:4365
-1812:2:1268
-1813:0:4365
-1814:3:2942
-1815:0:4365
-1816:2:1270
-1817:0:4365
-1818:3:2943
-1819:0:4365
-1820:2:1271
-1821:2:1275
-1822:2:1276
-1823:2:1284
-1824:2:1285
-1825:2:1289
-1826:2:1290
-1827:2:1284
-1828:2:1285
-1829:2:1289
-1830:2:1290
-1831:2:1298
-1832:2:1303
-1833:2:1307
-1834:2:1308
-1835:2:1315
-1836:2:1316
-1837:2:1327
-1838:2:1328
-1839:2:1329
-1840:2:1327
-1841:2:1328
-1842:2:1329
-1843:2:1340
-1844:2:1345
-1845:2:1346
-1846:0:4365
-1847:2:1358
-1848:0:4365
-1849:2:1454
-1850:0:4365
-1851:3:2942
-1852:0:4365
-1853:2:1455
-1854:0:4365
-1855:3:2943
-1856:0:4365
-1857:2:1652
-1858:0:4365
-1859:2:1653
-1860:0:4365
-1861:2:1657
-1862:0:4365
-1863:2:1660
-1864:0:4365
-1865:3:2942
-1866:0:4365
-1867:2:1665
-1868:2:1669
-1869:2:1670
-1870:2:1678
-1871:2:1679
-1872:2:1683
-1873:2:1684
-1874:2:1678
-1875:2:1679
-1876:2:1680
-1877:2:1692
-1878:2:1697
-1879:2:1701
-1880:2:1702
-1881:2:1709
-1882:2:1710
-1883:2:1721
-1884:2:1722
-1885:2:1723
-1886:2:1721
-1887:2:1722
-1888:2:1723
-1889:2:1734
-1890:2:1739
-1891:2:1740
-1892:0:4365
-1893:3:2943
-1894:0:4365
-1895:2:1752
-1896:0:4365
-1897:3:2942
-1898:0:4365
-1899:2:1754
-1900:0:4365
-1901:3:2943
-1902:0:4365
-1903:2:1755
-1904:2:1759
-1905:2:1760
-1906:2:1768
-1907:2:1769
-1908:2:1773
-1909:2:1774
-1910:2:1768
-1911:2:1769
-1912:2:1773
-1913:2:1774
-1914:2:1782
-1915:2:1787
-1916:2:1791
-1917:2:1792
-1918:2:1799
-1919:2:1800
-1920:2:1811
-1921:2:1812
-1922:2:1813
-1923:2:1811
-1924:2:1812
-1925:2:1813
-1926:2:1824
-1927:2:1829
-1928:2:1830
-1929:0:4365
-1930:2:1842
-1931:0:4365
-1932:3:2942
-1933:0:4365
-1934:2:1844
-1935:0:4365
-1936:3:2943
-1937:0:4365
-1938:2:1845
-1939:2:1849
-1940:2:1850
-1941:2:1858
-1942:2:1859
-1943:2:1863
-1944:2:1864
-1945:2:1858
-1946:2:1859
-1947:2:1863
-1948:2:1864
-1949:2:1872
-1950:2:1877
-1951:2:1881
-1952:2:1882
-1953:2:1889
-1954:2:1890
-1955:2:1901
-1956:2:1902
-1957:2:1903
-1958:2:1901
-1959:2:1902
-1960:2:1903
-1961:2:1914
-1962:2:1919
-1963:2:1920
-1964:0:4365
-1965:2:1932
-1966:0:4365
-1967:3:2942
-1968:0:4365
-1969:2:1934
-1970:0:4365
-1971:3:2943
-1972:0:4365
-1973:2:1935
-1974:0:4365
-1975:2:1936
-1976:0:4365
-1977:2:2129
-1978:0:4365
-1979:2:2130
-1980:0:4365
-1981:2:2134
-1982:0:4365
-1983:3:2942
-1984:0:4365
-1985:2:2136
-1986:0:4365
-1987:3:2943
-1988:0:4365
-1989:2:2137
-1990:2:2141
-1991:2:2142
-1992:2:2150
-1993:2:2151
-1994:2:2155
-1995:2:2156
-1996:2:2150
-1997:2:2151
-1998:2:2155
-1999:2:2156
-2000:2:2164
-2001:2:2169
-2002:2:2173
-2003:2:2174
-2004:2:2181
-2005:2:2182
-2006:2:2193
-2007:2:2194
-2008:2:2195
-2009:2:2193
-2010:2:2194
-2011:2:2195
-2012:2:2206
-2013:2:2211
-2014:2:2212
-2015:0:4365
-2016:2:2224
-2017:0:4365
-2018:3:2942
-2019:0:4365
-2020:2:2226
-2021:0:4365
-2022:3:2943
-2023:0:4365
-2024:2:1936
-2025:0:4365
-2026:2:2129
-2027:0:4365
-2028:2:2130
-2029:0:4365
-2030:2:2134
-2031:0:4365
-2032:3:2942
-2033:0:4365
-2034:2:2136
-2035:0:4365
-2036:3:2943
-2037:0:4365
-2038:2:2137
-2039:2:2141
-2040:2:2142
-2041:2:2150
-2042:2:2151
-2043:2:2155
-2044:2:2156
-2045:2:2150
-2046:2:2151
-2047:2:2152
-2048:2:2164
-2049:2:2169
-2050:2:2173
-2051:2:2174
-2052:2:2181
-2053:2:2182
-2054:2:2193
-2055:2:2194
-2056:2:2195
-2057:2:2193
-2058:2:2194
-2059:2:2195
-2060:2:2206
-2061:2:2211
-2062:2:2212
-2063:0:4365
-2064:2:2224
-2065:0:4365
-2066:3:2942
-2067:0:4365
-2068:2:2226
-2069:0:4365
-2070:3:2943
-2071:0:4365
-2072:2:2230
-2073:0:4365
-2074:3:2942
-2075:0:4365
-2076:2:2235
-2077:2:2239
-2078:2:2240
-2079:2:2248
-2080:2:2249
-2081:2:2253
-2082:2:2254
-2083:2:2248
-2084:2:2249
-2085:2:2250
-2086:2:2262
-2087:2:2267
-2088:2:2271
-2089:2:2272
-2090:2:2279
-2091:2:2280
-2092:2:2291
-2093:2:2292
-2094:2:2293
-2095:2:2291
-2096:2:2292
-2097:2:2293
-2098:2:2304
-2099:2:2309
-2100:2:2310
-2101:0:4365
-2102:3:2943
-2103:0:4365
-2104:2:2322
-2105:0:4365
-2106:2:1169
-2107:0:4365
-2108:3:2942
-2109:0:4365
-2110:2:1170
-2111:0:4365
-2112:3:2943
-2113:0:4365
-2114:3:2944
-2115:0:4365
-2116:3:2950
-2117:0:4365
-2118:3:2951
-2119:0:4365
-2120:3:2952
-2121:0:4365
-2122:3:2953
-2123:0:4365
-2124:3:2954
-2125:3:2958
-2126:3:2959
-2127:3:2967
-2128:3:2968
-2129:3:2972
-2130:3:2973
-2131:3:2967
-2132:3:2968
-2133:3:2972
-2134:3:2973
-2135:3:2981
-2136:3:2986
-2137:3:2990
-2138:3:2991
-2139:3:2998
-2140:3:2999
-2141:3:3010
-2142:3:3011
-2143:3:3012
-2144:3:3010
-2145:3:3011
-2146:3:3012
-2147:3:3023
-2148:3:3028
-2149:3:3029
-2150:0:4365
-2151:3:3041
-2152:0:4365
-2153:3:3042
-2154:0:4365
-2155:2:1173
-2156:0:4365
-2157:3:3043
-2158:0:4365
-2159:2:1179
-2160:0:4365
-2161:2:1180
-2162:0:4365
-2163:3:3042
-2164:0:4365
-2165:2:1181
-2166:2:1185
-2167:2:1186
-2168:2:1194
-2169:2:1195
-2170:2:1199
-2171:2:1200
-2172:2:1194
-2173:2:1195
-2174:2:1199
-2175:2:1200
-2176:2:1208
-2177:2:1213
-2178:2:1217
-2179:2:1218
-2180:2:1225
-2181:2:1226
-2182:2:1237
-2183:2:1238
-2184:2:1239
-2185:2:1237
-2186:2:1238
-2187:2:1239
-2188:2:1250
-2189:2:1255
-2190:2:1256
-2191:0:4365
-2192:3:3043
-2193:0:4365
-2194:2:1268
-2195:0:4365
-2196:3:3042
-2197:0:4365
-2198:2:1270
-2199:0:4365
-2200:3:3043
-2201:0:4365
-2202:2:1271
-2203:2:1275
-2204:2:1276
-2205:2:1284
-2206:2:1285
-2207:2:1289
-2208:2:1290
-2209:2:1284
-2210:2:1285
-2211:2:1289
-2212:2:1290
-2213:2:1298
-2214:2:1303
-2215:2:1307
-2216:2:1308
-2217:2:1315
-2218:2:1316
-2219:2:1327
-2220:2:1328
-2221:2:1329
-2222:2:1327
-2223:2:1328
-2224:2:1329
-2225:2:1340
-2226:2:1345
-2227:2:1346
-2228:0:4365
-2229:2:1358
-2230:0:4365
-2231:2:1360
-2232:0:4365
-2233:3:3042
-2234:0:4365
-2235:2:1361
-2236:0:4365
-2237:3:3043
-2238:0:4365
-2239:2:1362
-2240:2:1366
-2241:2:1367
-2242:2:1375
-2243:2:1376
-2244:2:1380
-2245:2:1381
-2246:2:1375
-2247:2:1376
-2248:2:1380
-2249:2:1381
-2250:2:1389
-2251:2:1394
-2252:2:1398
-2253:2:1399
-2254:2:1406
-2255:2:1407
-2256:2:1418
-2257:2:1419
-2258:2:1420
-2259:2:1418
-2260:2:1419
-2261:2:1420
-2262:2:1431
-2263:2:1436
-2264:2:1437
-2265:0:4365
-2266:2:1449
-2267:0:4365
-2268:3:3042
-2269:0:4365
-2270:2:1451
-2271:0:4365
-2272:3:3043
-2273:0:4365
-2274:2:1652
-2275:0:4365
-2276:2:1653
-2277:0:4365
-2278:2:1657
-2279:0:4365
-2280:2:1180
-2281:0:4365
-2282:3:3042
-2283:0:4365
-2284:2:1181
-2285:2:1185
-2286:2:1186
-2287:2:1194
-2288:2:1195
-2289:2:1199
-2290:2:1200
-2291:2:1194
-2292:2:1195
-2293:2:1196
-2294:2:1208
-2295:2:1213
-2296:2:1217
-2297:2:1218
-2298:2:1225
-2299:2:1226
-2300:2:1237
-2301:2:1238
-2302:2:1239
-2303:2:1237
-2304:2:1238
-2305:2:1239
-2306:2:1250
-2307:2:1255
-2308:2:1256
-2309:0:4365
-2310:3:3043
-2311:0:4365
-2312:2:1268
-2313:0:4365
-2314:3:3042
-2315:0:4365
-2316:2:1270
-2317:0:4365
-2318:3:3043
-2319:0:4365
-2320:2:1271
-2321:2:1275
-2322:2:1276
-2323:2:1284
-2324:2:1285
-2325:2:1289
-2326:2:1290
-2327:2:1284
-2328:2:1285
-2329:2:1289
-2330:2:1290
-2331:2:1298
-2332:2:1303
-2333:2:1307
-2334:2:1308
-2335:2:1315
-2336:2:1316
-2337:2:1327
-2338:2:1328
-2339:2:1329
-2340:2:1327
-2341:2:1328
-2342:2:1329
-2343:2:1340
-2344:2:1345
-2345:2:1346
-2346:0:4365
-2347:2:1358
-2348:0:4365
-2349:2:1454
-2350:0:4365
-2351:3:3042
-2352:0:4365
-2353:2:1455
-2354:0:4365
-2355:3:3043
-2356:0:4365
-2357:2:1652
-2358:0:4365
-2359:2:1653
-2360:0:4365
-2361:2:1657
-2362:0:4365
-2363:2:1660
-2364:0:4365
-2365:3:3042
-2366:0:4365
-2367:2:1665
-2368:2:1669
-2369:2:1670
-2370:2:1678
-2371:2:1679
-2372:2:1683
-2373:2:1684
-2374:2:1678
-2375:2:1679
-2376:2:1680
-2377:2:1692
-2378:2:1697
-2379:2:1701
-2380:2:1702
-2381:2:1709
-2382:2:1710
-2383:2:1721
-2384:2:1722
-2385:2:1723
-2386:2:1721
-2387:2:1722
-2388:2:1723
-2389:2:1734
-2390:2:1739
-2391:2:1740
-2392:0:4365
-2393:3:3043
-2394:0:4365
-2395:2:1752
-2396:0:4365
-2397:3:3042
-2398:0:4365
-2399:2:1754
-2400:0:4365
-2401:3:3043
-2402:0:4365
-2403:2:1755
-2404:2:1759
-2405:2:1760
-2406:2:1768
-2407:2:1769
-2408:2:1773
-2409:2:1774
-2410:2:1768
-2411:2:1769
-2412:2:1773
-2413:2:1774
-2414:2:1782
-2415:2:1787
-2416:2:1791
-2417:2:1792
-2418:2:1799
-2419:2:1800
-2420:2:1811
-2421:2:1812
-2422:2:1813
-2423:2:1811
-2424:2:1812
-2425:2:1813
-2426:2:1824
-2427:2:1829
-2428:2:1830
-2429:0:4365
-2430:2:1842
-2431:0:4365
-2432:3:3042
-2433:0:4365
-2434:2:1844
-2435:0:4365
-2436:3:3043
-2437:0:4365
-2438:2:1845
-2439:2:1849
-2440:2:1850
-2441:2:1858
-2442:2:1859
-2443:2:1863
-2444:2:1864
-2445:2:1858
-2446:2:1859
-2447:2:1863
-2448:2:1864
-2449:2:1872
-2450:2:1877
-2451:2:1881
-2452:2:1882
-2453:2:1889
-2454:2:1890
-2455:2:1901
-2456:2:1902
-2457:2:1903
-2458:2:1901
-2459:2:1902
-2460:2:1903
-2461:2:1914
-2462:2:1919
-2463:2:1920
-2464:0:4365
-2465:2:1932
-2466:0:4365
-2467:3:3042
-2468:0:4365
-2469:2:1934
-2470:0:4365
-2471:3:3043
-2472:0:4365
-2473:2:1935
-2474:0:4365
-2475:2:1936
-2476:0:4365
-2477:2:2129
-2478:0:4365
-2479:2:2130
-2480:0:4365
-2481:2:2134
-2482:0:4365
-2483:3:3042
-2484:0:4365
-2485:2:2136
-2486:0:4365
-2487:3:3043
-2488:0:4365
-2489:2:2137
-2490:2:2141
-2491:2:2142
-2492:2:2150
-2493:2:2151
-2494:2:2155
-2495:2:2156
-2496:2:2150
-2497:2:2151
-2498:2:2155
-2499:2:2156
-2500:2:2164
-2501:2:2169
-2502:2:2173
-2503:2:2174
-2504:2:2181
-2505:2:2182
-2506:2:2193
-2507:2:2194
-2508:2:2195
-2509:2:2193
-2510:2:2194
-2511:2:2195
-2512:2:2206
-2513:2:2211
-2514:2:2212
-2515:0:4365
-2516:2:2224
-2517:0:4365
-2518:3:3042
-2519:0:4365
-2520:2:2226
-2521:0:4365
-2522:3:3043
-2523:0:4365
-2524:2:1936
-2525:0:4365
-2526:2:2129
-2527:0:4365
-2528:2:2130
-2529:0:4365
-2530:2:2134
-2531:0:4365
-2532:3:3042
-2533:0:4365
-2534:2:2136
-2535:0:4365
-2536:3:3043
-2537:0:4365
-2538:2:2137
-2539:2:2141
-2540:2:2142
-2541:2:2150
-2542:2:2151
-2543:2:2155
-2544:2:2156
-2545:2:2150
-2546:2:2151
-2547:2:2152
-2548:2:2164
-2549:2:2169
-2550:2:2173
-2551:2:2174
-2552:2:2181
-2553:2:2182
-2554:2:2193
-2555:2:2194
-2556:2:2195
-2557:2:2193
-2558:2:2194
-2559:2:2195
-2560:2:2206
-2561:2:2211
-2562:2:2212
-2563:0:4365
-2564:2:2224
-2565:0:4365
-2566:3:3042
-2567:0:4365
-2568:2:2226
-2569:0:4365
-2570:3:3043
-2571:0:4365
-2572:2:2230
-2573:0:4365
-2574:3:3042
-2575:0:4365
-2576:2:2235
-2577:2:2239
-2578:2:2240
-2579:2:2248
-2580:2:2249
-2581:2:2253
-2582:2:2254
-2583:2:2248
-2584:2:2249
-2585:2:2250
-2586:2:2262
-2587:2:2267
-2588:2:2271
-2589:2:2272
-2590:2:2279
-2591:2:2280
-2592:2:2291
-2593:2:2292
-2594:2:2293
-2595:2:2291
-2596:2:2292
-2597:2:2293
-2598:2:2304
-2599:2:2309
-2600:2:2310
-2601:0:4365
-2602:3:3043
-2603:0:4365
-2604:2:2322
-2605:0:4365
-2606:2:1169
-2607:0:4365
-2608:3:3042
-2609:0:4365
-2610:2:1170
-2611:0:4365
-2612:3:3043
-2613:0:4365
-2614:3:3044
-2615:0:4365
-2616:3:3257
-2617:0:4365
-2618:3:3265
-2619:0:4365
-2620:3:3266
-2621:3:3270
-2622:3:3271
-2623:3:3279
-2624:3:3280
-2625:3:3284
-2626:3:3285
-2627:3:3279
-2628:3:3280
-2629:3:3284
-2630:3:3285
-2631:3:3293
-2632:3:3298
-2633:3:3302
-2634:3:3303
-2635:3:3310
-2636:3:3311
-2637:3:3322
-2638:3:3323
-2639:3:3324
-2640:3:3322
-2641:3:3323
-2642:3:3324
-2643:3:3335
-2644:3:3340
-2645:3:3341
-2646:0:4365
-2647:3:3353
-2648:0:4365
-2649:3:3354
-2650:0:4365
-2651:2:1173
-2652:0:4365
-2653:3:3355
-2654:0:4365
-2655:2:1179
-2656:0:4365
-2657:2:1180
-2658:0:4365
-2659:3:3354
-2660:0:4365
-2661:2:1181
-2662:2:1185
-2663:2:1186
-2664:2:1194
-2665:2:1195
-2666:2:1199
-2667:2:1200
-2668:2:1194
-2669:2:1195
-2670:2:1199
-2671:2:1200
-2672:2:1208
-2673:2:1213
-2674:2:1217
-2675:2:1218
-2676:2:1225
-2677:2:1226
-2678:2:1237
-2679:2:1238
-2680:2:1239
-2681:2:1237
-2682:2:1238
-2683:2:1239
-2684:2:1250
-2685:2:1255
-2686:2:1256
-2687:0:4365
-2688:3:3355
-2689:0:4365
-2690:2:1268
-2691:0:4365
-2692:3:3354
-2693:0:4365
-2694:2:1270
-2695:0:4365
-2696:3:3355
-2697:0:4365
-2698:2:1271
-2699:2:1275
-2700:2:1276
-2701:2:1284
-2702:2:1285
-2703:2:1289
-2704:2:1290
-2705:2:1284
-2706:2:1285
-2707:2:1289
-2708:2:1290
-2709:2:1298
-2710:2:1303
-2711:2:1307
-2712:2:1308
-2713:2:1315
-2714:2:1316
-2715:2:1327
-2716:2:1328
-2717:2:1329
-2718:2:1327
-2719:2:1328
-2720:2:1329
-2721:2:1340
-2722:2:1345
-2723:2:1346
-2724:0:4365
-2725:2:1358
-2726:0:4365
-2727:2:1360
-2728:0:4365
-2729:3:3354
-2730:0:4365
-2731:2:1361
-2732:0:4365
-2733:3:3355
-2734:0:4365
-2735:2:1362
-2736:2:1366
-2737:2:1367
-2738:2:1375
-2739:2:1376
-2740:2:1380
-2741:2:1381
-2742:2:1375
-2743:2:1376
-2744:2:1380
-2745:2:1381
-2746:2:1389
-2747:2:1394
-2748:2:1398
-2749:2:1399
-2750:2:1406
-2751:2:1407
-2752:2:1418
-2753:2:1419
-2754:2:1420
-2755:2:1418
-2756:2:1419
-2757:2:1420
-2758:2:1431
-2759:2:1436
-2760:2:1437
-2761:0:4365
-2762:2:1449
-2763:0:4365
-2764:3:3354
-2765:0:4365
-2766:2:1451
-2767:0:4365
-2768:3:3355
-2769:0:4365
-2770:2:1652
-2771:0:4365
-2772:2:1653
-2773:0:4365
-2774:2:1657
-2775:0:4365
-2776:2:1180
-2777:0:4365
-2778:3:3354
-2779:0:4365
-2780:2:1181
-2781:2:1185
-2782:2:1186
-2783:2:1194
-2784:2:1195
-2785:2:1199
-2786:2:1200
-2787:2:1194
-2788:2:1195
-2789:2:1196
-2790:2:1208
-2791:2:1213
-2792:2:1217
-2793:2:1218
-2794:2:1225
-2795:2:1226
-2796:2:1237
-2797:2:1238
-2798:2:1239
-2799:2:1237
-2800:2:1238
-2801:2:1239
-2802:2:1250
-2803:2:1255
-2804:2:1256
-2805:0:4365
-2806:3:3355
-2807:0:4365
-2808:2:1268
-2809:0:4365
-2810:3:3354
-2811:0:4365
-2812:2:1270
-2813:0:4365
-2814:3:3355
-2815:0:4365
-2816:2:1271
-2817:2:1275
-2818:2:1276
-2819:2:1284
-2820:2:1285
-2821:2:1289
-2822:2:1290
-2823:2:1284
-2824:2:1285
-2825:2:1289
-2826:2:1290
-2827:2:1298
-2828:2:1303
-2829:2:1307
-2830:2:1308
-2831:2:1315
-2832:2:1316
-2833:2:1327
-2834:2:1328
-2835:2:1329
-2836:2:1327
-2837:2:1328
-2838:2:1329
-2839:2:1340
-2840:2:1345
-2841:2:1346
-2842:0:4365
-2843:2:1358
-2844:0:4365
-2845:2:1454
-2846:0:4365
-2847:3:3354
-2848:0:4365
-2849:2:1455
-2850:0:4365
-2851:3:3355
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3354
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3355
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3354
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3355
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3354
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3355
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3354
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3355
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3354
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3355
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3354
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3355
-3019:0:4365
-3020:2:1936
-3021:0:4365
-3022:2:2129
-3023:0:4365
-3024:2:2130
-3025:0:4365
-3026:2:2134
-3027:0:4365
-3028:3:3354
-3029:0:4365
-3030:2:2136
-3031:0:4365
-3032:3:3355
-3033:0:4365
-3034:2:2137
-3035:2:2141
-3036:2:2142
-3037:2:2150
-3038:2:2151
-3039:2:2155
-3040:2:2156
-3041:2:2150
-3042:2:2151
-3043:2:2152
-3044:2:2164
-3045:2:2169
-3046:2:2173
-3047:2:2174
-3048:2:2181
-3049:2:2182
-3050:2:2193
-3051:2:2194
-3052:2:2195
-3053:2:2193
-3054:2:2194
-3055:2:2195
-3056:2:2206
-3057:2:2211
-3058:2:2212
-3059:0:4365
-3060:2:2224
-3061:0:4365
-3062:3:3354
-3063:0:4365
-3064:2:2226
-3065:0:4365
-3066:3:3355
-3067:0:4365
-3068:2:2230
-3069:0:4365
-3070:3:3354
-3071:0:4365
-3072:2:2235
-3073:2:2239
-3074:2:2240
-3075:2:2248
-3076:2:2249
-3077:2:2253
-3078:2:2254
-3079:2:2248
-3080:2:2249
-3081:2:2250
-3082:2:2262
-3083:2:2267
-3084:2:2271
-3085:2:2272
-3086:2:2279
-3087:2:2280
-3088:2:2291
-3089:2:2292
-3090:2:2293
-3091:2:2291
-3092:2:2292
-3093:2:2293
-3094:2:2304
-3095:2:2309
-3096:2:2310
-3097:0:4365
-3098:3:3355
-3099:0:4365
-3100:2:2322
-3101:0:4365
-3102:2:1169
-3103:0:4365
-3104:3:3354
-3105:0:4365
-3106:2:1170
-3107:0:4365
-3108:3:3355
-3109:0:4365
-3110:3:3356
-3111:0:4365
-3112:3:3366
-3113:0:4365
-3114:3:2951
-3115:0:4365
-3116:3:2952
-3117:0:4365
-3118:3:2953
-3119:0:4365
-3120:3:2954
-3121:3:2958
-3122:3:2959
-3123:3:2967
-3124:3:2968
-3125:3:2972
-3126:3:2973
-3127:3:2967
-3128:3:2968
-3129:3:2972
-3130:3:2973
-3131:3:2981
-3132:3:2986
-3133:3:2990
-3134:3:2991
-3135:3:2998
-3136:3:2999
-3137:3:3010
-3138:3:3011
-3139:3:3012
-3140:3:3010
-3141:3:3011
-3142:3:3012
-3143:3:3023
-3144:3:3028
-3145:3:3029
-3146:0:4365
-3147:3:3041
-3148:0:4365
-3149:3:3042
-3150:0:4365
-3151:2:1173
-3152:0:4365
-3153:3:3043
-3154:0:4365
-3155:2:1179
-3156:0:4365
-3157:2:1180
-3158:0:4365
-3159:3:3042
-3160:0:4365
-3161:2:1181
-3162:2:1185
-3163:2:1186
-3164:2:1194
-3165:2:1195
-3166:2:1199
-3167:2:1200
-3168:2:1194
-3169:2:1195
-3170:2:1199
-3171:2:1200
-3172:2:1208
-3173:2:1213
-3174:2:1217
-3175:2:1218
-3176:2:1225
-3177:2:1226
-3178:2:1237
-3179:2:1238
-3180:2:1239
-3181:2:1237
-3182:2:1238
-3183:2:1239
-3184:2:1250
-3185:2:1255
-3186:2:1256
-3187:0:4365
-3188:3:3043
-3189:0:4365
-3190:2:1268
-3191:0:4365
-3192:3:3042
-3193:0:4365
-3194:2:1270
-3195:0:4365
-3196:3:3043
-3197:0:4365
-3198:2:1271
-3199:2:1275
-3200:2:1276
-3201:2:1284
-3202:2:1285
-3203:2:1289
-3204:2:1290
-3205:2:1284
-3206:2:1285
-3207:2:1289
-3208:2:1290
-3209:2:1298
-3210:2:1303
-3211:2:1307
-3212:2:1308
-3213:2:1315
-3214:2:1316
-3215:2:1327
-3216:2:1328
-3217:2:1329
-3218:2:1327
-3219:2:1328
-3220:2:1329
-3221:2:1340
-3222:2:1345
-3223:2:1346
-3224:0:4365
-3225:2:1358
-3226:0:4365
-3227:2:1360
-3228:0:4365
-3229:3:3042
-3230:0:4365
-3231:2:1361
-3232:0:4365
-3233:3:3043
-3234:0:4365
-3235:2:1362
-3236:2:1366
-3237:2:1367
-3238:2:1375
-3239:2:1376
-3240:2:1380
-3241:2:1381
-3242:2:1375
-3243:2:1376
-3244:2:1380
-3245:2:1381
-3246:2:1389
-3247:2:1394
-3248:2:1398
-3249:2:1399
-3250:2:1406
-3251:2:1407
-3252:2:1418
-3253:2:1419
-3254:2:1420
-3255:2:1418
-3256:2:1419
-3257:2:1420
-3258:2:1431
-3259:2:1436
-3260:2:1437
-3261:0:4365
-3262:2:1449
-3263:0:4365
-3264:3:3042
-3265:0:4365
-3266:2:1451
-3267:0:4365
-3268:3:3043
-3269:0:4365
-3270:2:1652
-3271:0:4365
-3272:2:1653
-3273:0:4365
-3274:2:1657
-3275:0:4365
-3276:2:1180
-3277:0:4365
-3278:3:3042
-3279:0:4365
-3280:2:1181
-3281:2:1185
-3282:2:1186
-3283:2:1194
-3284:2:1195
-3285:2:1199
-3286:2:1200
-3287:2:1194
-3288:2:1195
-3289:2:1196
-3290:2:1208
-3291:2:1213
-3292:2:1217
-3293:2:1218
-3294:2:1225
-3295:2:1226
-3296:2:1237
-3297:2:1238
-3298:2:1239
-3299:2:1237
-3300:2:1238
-3301:2:1239
-3302:2:1250
-3303:2:1255
-3304:2:1256
-3305:0:4365
-3306:3:3043
-3307:0:4365
-3308:2:1268
-3309:0:4365
-3310:3:3042
-3311:0:4365
-3312:2:1270
-3313:0:4365
-3314:3:3043
-3315:0:4365
-3316:2:1271
-3317:2:1275
-3318:2:1276
-3319:2:1284
-3320:2:1285
-3321:2:1289
-3322:2:1290
-3323:2:1284
-3324:2:1285
-3325:2:1289
-3326:2:1290
-3327:2:1298
-3328:2:1303
-3329:2:1307
-3330:2:1308
-3331:2:1315
-3332:2:1316
-3333:2:1327
-3334:2:1328
-3335:2:1329
-3336:2:1327
-3337:2:1328
-3338:2:1329
-3339:2:1340
-3340:2:1345
-3341:2:1346
-3342:0:4365
-3343:2:1358
-3344:0:4365
-3345:2:1454
-3346:0:4365
-3347:3:3042
-3348:0:4365
-3349:2:1455
-3350:0:4365
-3351:3:3043
-3352:0:4365
-3353:2:1652
-3354:0:4365
-3355:2:1653
-3356:0:4365
-3357:2:1657
-3358:0:4365
-3359:2:1660
-3360:0:4365
-3361:3:3042
-3362:0:4365
-3363:2:1665
-3364:2:1669
-3365:2:1670
-3366:2:1678
-3367:2:1679
-3368:2:1683
-3369:2:1684
-3370:2:1678
-3371:2:1679
-3372:2:1680
-3373:2:1692
-3374:2:1697
-3375:2:1701
-3376:2:1702
-3377:2:1709
-3378:2:1710
-3379:2:1721
-3380:2:1722
-3381:2:1723
-3382:2:1721
-3383:2:1722
-3384:2:1723
-3385:2:1734
-3386:2:1739
-3387:2:1740
-3388:0:4365
-3389:3:3043
-3390:0:4365
-3391:2:1752
-3392:0:4365
-3393:3:3042
-3394:0:4365
-3395:2:1754
-3396:0:4365
-3397:3:3043
-3398:0:4365
-3399:2:1755
-3400:2:1759
-3401:2:1760
-3402:2:1768
-3403:2:1769
-3404:2:1773
-3405:2:1774
-3406:2:1768
-3407:2:1769
-3408:2:1773
-3409:2:1774
-3410:2:1782
-3411:2:1787
-3412:2:1791
-3413:2:1792
-3414:2:1799
-3415:2:1800
-3416:2:1811
-3417:2:1812
-3418:2:1813
-3419:2:1811
-3420:2:1812
-3421:2:1813
-3422:2:1824
-3423:2:1829
-3424:2:1830
-3425:0:4365
-3426:2:1842
-3427:0:4365
-3428:3:3042
-3429:0:4365
-3430:2:1844
-3431:0:4365
-3432:3:3043
-3433:0:4365
-3434:2:1845
-3435:2:1849
-3436:2:1850
-3437:2:1858
-3438:2:1859
-3439:2:1863
-3440:2:1864
-3441:2:1858
-3442:2:1859
-3443:2:1863
-3444:2:1864
-3445:2:1872
-3446:2:1877
-3447:2:1881
-3448:2:1882
-3449:2:1889
-3450:2:1890
-3451:2:1901
-3452:2:1902
-3453:2:1903
-3454:2:1901
-3455:2:1902
-3456:2:1903
-3457:2:1914
-3458:2:1919
-3459:2:1920
-3460:0:4365
-3461:2:1932
-3462:0:4365
-3463:3:3042
-3464:0:4365
-3465:2:1934
-3466:0:4365
-3467:3:3043
-3468:0:4365
-3469:2:1935
-3470:0:4365
-3471:2:1936
-3472:0:4365
-3473:2:2129
-3474:0:4365
-3475:2:2130
-3476:0:4365
-3477:2:2134
-3478:0:4365
-3479:3:3042
-3480:0:4365
-3481:2:2136
-3482:0:4365
-3483:3:3043
-3484:0:4365
-3485:2:2137
-3486:2:2141
-3487:2:2142
-3488:2:2150
-3489:2:2151
-3490:2:2155
-3491:2:2156
-3492:2:2150
-3493:2:2151
-3494:2:2155
-3495:2:2156
-3496:2:2164
-3497:2:2169
-3498:2:2173
-3499:2:2174
-3500:2:2181
-3501:2:2182
-3502:2:2193
-3503:2:2194
-3504:2:2195
-3505:2:2193
-3506:2:2194
-3507:2:2195
-3508:2:2206
-3509:2:2211
-3510:2:2212
-3511:0:4365
-3512:2:2224
-3513:0:4365
-3514:3:3042
-3515:0:4365
-3516:2:2226
-3517:0:4365
-3518:3:3043
-3519:0:4365
-3520:2:1936
-3521:0:4365
-3522:2:2129
-3523:0:4365
-3524:2:2130
-3525:0:4365
-3526:2:2134
-3527:0:4365
-3528:3:3042
-3529:0:4365
-3530:2:2136
-3531:0:4365
-3532:3:3043
-3533:0:4365
-3534:2:2137
-3535:2:2141
-3536:2:2142
-3537:2:2150
-3538:2:2151
-3539:2:2155
-3540:2:2156
-3541:2:2150
-3542:2:2151
-3543:2:2152
-3544:2:2164
-3545:2:2169
-3546:2:2173
-3547:2:2174
-3548:2:2181
-3549:2:2182
-3550:2:2193
-3551:2:2194
-3552:2:2195
-3553:2:2193
-3554:2:2194
-3555:2:2195
-3556:2:2206
-3557:2:2211
-3558:2:2212
-3559:0:4365
-3560:2:2224
-3561:0:4365
-3562:3:3042
-3563:0:4365
-3564:2:2226
-3565:0:4365
-3566:3:3043
-3567:0:4365
-3568:2:2230
-3569:0:4365
-3570:3:3042
-3571:0:4365
-3572:2:2235
-3573:2:2239
-3574:2:2240
-3575:2:2248
-3576:2:2249
-3577:2:2253
-3578:2:2254
-3579:2:2248
-3580:2:2249
-3581:2:2250
-3582:2:2262
-3583:2:2267
-3584:2:2271
-3585:2:2272
-3586:2:2279
-3587:2:2280
-3588:2:2291
-3589:2:2292
-3590:2:2293
-3591:2:2291
-3592:2:2292
-3593:2:2293
-3594:2:2304
-3595:2:2309
-3596:2:2310
-3597:0:4365
-3598:3:3043
-3599:0:4365
-3600:2:2322
-3601:0:4365
-3602:2:1169
-3603:0:4365
-3604:3:3042
-3605:0:4365
-3606:2:1170
-3607:0:4365
-3608:3:3043
-3609:0:4365
-3610:3:3044
-3611:0:4365
-3612:3:3257
-3613:0:4365
-3614:3:3362
-3615:0:4365
-3616:3:3363
-3617:0:4365
-3618:3:3367
-3619:0:4365
-3620:3:3373
-3621:3:3377
-3622:3:3378
-3623:3:3386
-3624:3:3387
-3625:3:3391
-3626:3:3392
-3627:3:3386
-3628:3:3387
-3629:3:3391
-3630:3:3392
-3631:3:3400
-3632:3:3405
-3633:3:3409
-3634:3:3410
-3635:3:3417
-3636:3:3418
-3637:3:3429
-3638:3:3430
-3639:3:3431
-3640:3:3429
-3641:3:3430
-3642:3:3431
-3643:3:3442
-3644:3:3447
-3645:3:3448
-3646:0:4365
-3647:3:3460
-3648:0:4365
-3649:3:3461
-3650:0:4365
-3651:2:1173
-3652:0:4365
-3653:3:3462
-3654:0:4365
-3655:2:1179
-3656:0:4365
-3657:2:1180
-3658:0:4365
-3659:3:3461
-3660:0:4365
-3661:2:1181
-3662:2:1185
-3663:2:1186
-3664:2:1194
-3665:2:1195
-3666:2:1199
-3667:2:1200
-3668:2:1194
-3669:2:1195
-3670:2:1199
-3671:2:1200
-3672:2:1208
-3673:2:1213
-3674:2:1217
-3675:2:1218
-3676:2:1225
-3677:2:1226
-3678:2:1237
-3679:2:1238
-3680:2:1239
-3681:2:1237
-3682:2:1238
-3683:2:1239
-3684:2:1250
-3685:2:1255
-3686:2:1256
-3687:0:4365
-3688:3:3462
-3689:0:4365
-3690:2:1268
-3691:0:4365
-3692:3:3461
-3693:0:4365
-3694:2:1270
-3695:0:4365
-3696:3:3462
-3697:0:4365
-3698:2:1271
-3699:2:1275
-3700:2:1276
-3701:2:1284
-3702:2:1285
-3703:2:1289
-3704:2:1290
-3705:2:1284
-3706:2:1285
-3707:2:1289
-3708:2:1290
-3709:2:1298
-3710:2:1303
-3711:2:1307
-3712:2:1308
-3713:2:1315
-3714:2:1316
-3715:2:1327
-3716:2:1328
-3717:2:1329
-3718:2:1327
-3719:2:1328
-3720:2:1329
-3721:2:1340
-3722:2:1345
-3723:2:1346
-3724:0:4365
-3725:2:1358
-3726:0:4365
-3727:2:1360
-3728:0:4365
-3729:3:3461
-3730:0:4365
-3731:2:1361
-3732:0:4365
-3733:3:3462
-3734:0:4365
-3735:2:1362
-3736:2:1366
-3737:2:1367
-3738:2:1375
-3739:2:1376
-3740:2:1380
-3741:2:1381
-3742:2:1375
-3743:2:1376
-3744:2:1380
-3745:2:1381
-3746:2:1389
-3747:2:1394
-3748:2:1398
-3749:2:1399
-3750:2:1406
-3751:2:1407
-3752:2:1418
-3753:2:1419
-3754:2:1420
-3755:2:1418
-3756:2:1419
-3757:2:1420
-3758:2:1431
-3759:2:1436
-3760:2:1437
-3761:0:4365
-3762:2:1449
-3763:0:4365
-3764:3:3461
-3765:0:4365
-3766:2:1451
-3767:0:4365
-3768:3:3462
-3769:0:4365
-3770:2:1652
-3771:0:4365
-3772:2:1653
-3773:0:4365
-3774:2:1657
-3775:0:4365
-3776:2:1180
-3777:0:4365
-3778:3:3461
-3779:0:4365
-3780:2:1181
-3781:2:1185
-3782:2:1186
-3783:2:1194
-3784:2:1195
-3785:2:1199
-3786:2:1200
-3787:2:1194
-3788:2:1195
-3789:2:1196
-3790:2:1208
-3791:2:1213
-3792:2:1217
-3793:2:1218
-3794:2:1225
-3795:2:1226
-3796:2:1237
-3797:2:1238
-3798:2:1239
-3799:2:1237
-3800:2:1238
-3801:2:1239
-3802:2:1250
-3803:2:1255
-3804:2:1256
-3805:0:4365
-3806:3:3462
-3807:0:4365
-3808:2:1268
-3809:0:4365
-3810:3:3461
-3811:0:4365
-3812:2:1270
-3813:0:4365
-3814:3:3462
-3815:0:4365
-3816:2:1271
-3817:2:1275
-3818:2:1276
-3819:2:1284
-3820:2:1285
-3821:2:1289
-3822:2:1290
-3823:2:1284
-3824:2:1285
-3825:2:1289
-3826:2:1290
-3827:2:1298
-3828:2:1303
-3829:2:1307
-3830:2:1308
-3831:2:1315
-3832:2:1316
-3833:2:1327
-3834:2:1328
-3835:2:1329
-3836:2:1327
-3837:2:1328
-3838:2:1329
-3839:2:1340
-3840:2:1345
-3841:2:1346
-3842:0:4365
-3843:2:1358
-3844:0:4365
-3845:2:1454
-3846:0:4365
-3847:3:3461
-3848:0:4365
-3849:2:1455
-3850:0:4365
-3851:3:3462
-3852:0:4365
-3853:2:1652
-3854:0:4365
-3855:2:1653
-3856:0:4365
-3857:2:1657
-3858:0:4365
-3859:2:1660
-3860:0:4365
-3861:3:3461
-3862:0:4365
-3863:2:1665
-3864:2:1669
-3865:2:1670
-3866:2:1678
-3867:2:1679
-3868:2:1683
-3869:2:1684
-3870:2:1678
-3871:2:1679
-3872:2:1680
-3873:2:1692
-3874:2:1697
-3875:2:1701
-3876:2:1702
-3877:2:1709
-3878:2:1710
-3879:2:1721
-3880:2:1722
-3881:2:1723
-3882:2:1721
-3883:2:1722
-3884:2:1723
-3885:2:1734
-3886:2:1739
-3887:2:1740
-3888:0:4365
-3889:3:3462
-3890:0:4365
-3891:2:1752
-3892:0:4365
-3893:3:3461
-3894:0:4365
-3895:2:1754
-3896:0:4365
-3897:3:3462
-3898:0:4365
-3899:2:1755
-3900:2:1759
-3901:2:1760
-3902:2:1768
-3903:2:1769
-3904:2:1773
-3905:2:1774
-3906:2:1768
-3907:2:1769
-3908:2:1773
-3909:2:1774
-3910:2:1782
-3911:2:1787
-3912:2:1791
-3913:2:1792
-3914:2:1799
-3915:2:1800
-3916:2:1811
-3917:2:1812
-3918:2:1813
-3919:2:1811
-3920:2:1812
-3921:2:1813
-3922:2:1824
-3923:2:1829
-3924:2:1830
-3925:0:4365
-3926:2:1842
-3927:0:4365
-3928:3:3461
-3929:0:4365
-3930:2:1844
-3931:0:4365
-3932:3:3462
-3933:0:4365
-3934:2:1845
-3935:2:1849
-3936:2:1850
-3937:2:1858
-3938:2:1859
-3939:2:1863
-3940:2:1864
-3941:2:1858
-3942:2:1859
-3943:2:1863
-3944:2:1864
-3945:2:1872
-3946:2:1877
-3947:2:1881
-3948:2:1882
-3949:2:1889
-3950:2:1890
-3951:2:1901
-3952:2:1902
-3953:2:1903
-3954:2:1901
-3955:2:1902
-3956:2:1903
-3957:2:1914
-3958:2:1919
-3959:2:1920
-3960:0:4365
-3961:2:1932
-3962:0:4365
-3963:3:3461
-3964:0:4365
-3965:2:1934
-3966:0:4365
-3967:3:3462
-3968:0:4365
-3969:2:1935
-3970:0:4365
-3971:2:1936
-3972:0:4365
-3973:2:2129
-3974:0:4365
-3975:2:2130
-3976:0:4365
-3977:2:2134
-3978:0:4365
-3979:3:3461
-3980:0:4365
-3981:2:2136
-3982:0:4365
-3983:3:3462
-3984:0:4365
-3985:2:2137
-3986:2:2141
-3987:2:2142
-3988:2:2150
-3989:2:2151
-3990:2:2155
-3991:2:2156
-3992:2:2150
-3993:2:2151
-3994:2:2155
-3995:2:2156
-3996:2:2164
-3997:2:2169
-3998:2:2173
-3999:2:2174
-4000:2:2181
-4001:2:2182
-4002:2:2193
-4003:2:2194
-4004:2:2195
-4005:2:2193
-4006:2:2194
-4007:2:2195
-4008:2:2206
-4009:2:2211
-4010:2:2212
-4011:0:4365
-4012:2:2224
-4013:0:4365
-4014:3:3461
-4015:0:4365
-4016:2:2226
-4017:0:4365
-4018:3:3462
-4019:0:4365
-4020:2:1936
-4021:0:4365
-4022:2:2129
-4023:0:4365
-4024:2:2130
-4025:0:4365
-4026:2:2134
-4027:0:4365
-4028:3:3461
-4029:0:4365
-4030:2:2136
-4031:0:4365
-4032:3:3462
-4033:0:4365
-4034:2:2137
-4035:2:2141
-4036:2:2142
-4037:2:2150
-4038:2:2151
-4039:2:2155
-4040:2:2156
-4041:2:2150
-4042:2:2151
-4043:2:2152
-4044:2:2164
-4045:2:2169
-4046:2:2173
-4047:2:2174
-4048:2:2181
-4049:2:2182
-4050:2:2193
-4051:2:2194
-4052:2:2195
-4053:2:2193
-4054:2:2194
-4055:2:2195
-4056:2:2206
-4057:2:2211
-4058:2:2212
-4059:0:4365
-4060:2:2224
-4061:0:4365
-4062:3:3461
-4063:0:4365
-4064:2:2226
-4065:0:4365
-4066:3:3462
-4067:0:4365
-4068:2:2230
-4069:0:4365
-4070:3:3461
-4071:0:4365
-4072:2:2235
-4073:2:2239
-4074:2:2240
-4075:2:2248
-4076:2:2249
-4077:2:2253
-4078:2:2254
-4079:2:2248
-4080:2:2249
-4081:2:2250
-4082:2:2262
-4083:2:2267
-4084:2:2271
-4085:2:2272
-4086:2:2279
-4087:2:2280
-4088:2:2291
-4089:2:2292
-4090:2:2293
-4091:2:2291
-4092:2:2292
-4093:2:2293
-4094:2:2304
-4095:2:2309
-4096:2:2310
-4097:0:4365
-4098:3:3462
-4099:0:4365
-4100:2:2322
-4101:0:4365
-4102:2:1169
-4103:0:4365
-4104:3:3461
-4105:0:4365
-4106:2:1170
-4107:0:4365
-4108:3:3462
-4109:0:4365
-4110:3:3463
-4111:0:4365
-4112:3:3469
-4113:0:4365
-4114:3:3470
-4115:3:3474
-4116:3:3475
-4117:3:3483
-4118:3:3484
-4119:3:3488
-4120:3:3489
-4121:3:3483
-4122:3:3484
-4123:3:3488
-4124:3:3489
-4125:3:3497
-4126:3:3502
-4127:3:3506
-4128:3:3507
-4129:3:3514
-4130:3:3515
-4131:3:3526
-4132:3:3527
-4133:3:3528
-4134:3:3526
-4135:3:3527
-4136:3:3528
-4137:3:3539
-4138:3:3544
-4139:3:3545
-4140:0:4365
-4141:3:3557
-4142:0:4365
-4143:3:3558
-4144:0:4365
-4145:2:1173
-4146:0:4365
-4147:3:3559
-4148:0:4365
-4149:2:1179
-4150:0:4365
-4151:2:1180
-4152:0:4365
-4153:3:3558
-4154:0:4365
-4155:2:1181
-4156:2:1185
-4157:2:1186
-4158:2:1194
-4159:2:1195
-4160:2:1199
-4161:2:1200
-4162:2:1194
-4163:2:1195
-4164:2:1199
-4165:2:1200
-4166:2:1208
-4167:2:1213
-4168:2:1217
-4169:2:1218
-4170:2:1225
-4171:2:1226
-4172:2:1237
-4173:2:1238
-4174:2:1239
-4175:2:1237
-4176:2:1238
-4177:2:1239
-4178:2:1250
-4179:2:1255
-4180:2:1256
-4181:0:4365
-4182:3:3559
-4183:0:4365
-4184:2:1268
-4185:0:4365
-4186:3:3558
-4187:0:4365
-4188:2:1270
-4189:0:4365
-4190:3:3559
-4191:0:4365
-4192:2:1271
-4193:2:1275
-4194:2:1276
-4195:2:1284
-4196:2:1285
-4197:2:1289
-4198:2:1290
-4199:2:1284
-4200:2:1285
-4201:2:1289
-4202:2:1290
-4203:2:1298
-4204:2:1303
-4205:2:1307
-4206:2:1308
-4207:2:1315
-4208:2:1316
-4209:2:1327
-4210:2:1328
-4211:2:1329
-4212:2:1327
-4213:2:1328
-4214:2:1329
-4215:2:1340
-4216:2:1345
-4217:2:1346
-4218:0:4365
-4219:2:1358
-4220:0:4365
-4221:2:1360
-4222:0:4365
-4223:3:3558
-4224:0:4365
-4225:2:1361
-4226:0:4365
-4227:3:3559
-4228:0:4365
-4229:2:1362
-4230:2:1366
-4231:2:1367
-4232:2:1375
-4233:2:1376
-4234:2:1380
-4235:2:1381
-4236:2:1375
-4237:2:1376
-4238:2:1380
-4239:2:1381
-4240:2:1389
-4241:2:1394
-4242:2:1398
-4243:2:1399
-4244:2:1406
-4245:2:1407
-4246:2:1418
-4247:2:1419
-4248:2:1420
-4249:2:1418
-4250:2:1419
-4251:2:1420
-4252:2:1431
-4253:2:1436
-4254:2:1437
-4255:0:4365
-4256:2:1449
-4257:0:4365
-4258:3:3558
-4259:0:4365
-4260:2:1451
-4261:0:4365
-4262:3:3559
-4263:0:4365
-4264:2:1652
-4265:0:4365
-4266:2:1653
-4267:0:4365
-4268:2:1657
-4269:0:4365
-4270:2:1180
-4271:0:4365
-4272:3:3558
-4273:0:4365
-4274:2:1181
-4275:2:1185
-4276:2:1186
-4277:2:1194
-4278:2:1195
-4279:2:1199
-4280:2:1200
-4281:2:1194
-4282:2:1195
-4283:2:1196
-4284:2:1208
-4285:2:1213
-4286:2:1217
-4287:2:1218
-4288:2:1225
-4289:2:1226
-4290:2:1237
-4291:2:1238
-4292:2:1239
-4293:2:1237
-4294:2:1238
-4295:2:1239
-4296:2:1250
-4297:2:1255
-4298:2:1256
-4299:0:4365
-4300:3:3559
-4301:0:4365
-4302:2:1268
-4303:0:4365
-4304:3:3558
-4305:0:4365
-4306:2:1270
-4307:0:4365
-4308:3:3559
-4309:0:4365
-4310:2:1271
-4311:2:1275
-4312:2:1276
-4313:2:1284
-4314:2:1285
-4315:2:1289
-4316:2:1290
-4317:2:1284
-4318:2:1285
-4319:2:1289
-4320:2:1290
-4321:2:1298
-4322:2:1303
-4323:2:1307
-4324:2:1308
-4325:2:1315
-4326:2:1316
-4327:2:1327
-4328:2:1328
-4329:2:1329
-4330:2:1327
-4331:2:1328
-4332:2:1329
-4333:2:1340
-4334:2:1345
-4335:2:1346
-4336:0:4365
-4337:2:1358
-4338:0:4365
-4339:2:1454
-4340:0:4365
-4341:3:3558
-4342:0:4365
-4343:2:1455
-4344:0:4365
-4345:3:3559
-4346:0:4365
-4347:2:1652
-4348:0:4365
-4349:2:1653
-4350:0:4365
-4351:2:1657
-4352:0:4365
-4353:2:1660
-4354:0:4365
-4355:3:3558
-4356:0:4365
-4357:2:1665
-4358:2:1669
-4359:2:1670
-4360:2:1678
-4361:2:1679
-4362:2:1683
-4363:2:1684
-4364:2:1678
-4365:2:1679
-4366:2:1680
-4367:2:1692
-4368:2:1697
-4369:2:1701
-4370:2:1702
-4371:2:1709
-4372:2:1710
-4373:2:1721
-4374:2:1722
-4375:2:1723
-4376:2:1721
-4377:2:1722
-4378:2:1723
-4379:2:1734
-4380:2:1739
-4381:2:1740
-4382:0:4365
-4383:3:3559
-4384:0:4365
-4385:2:1752
-4386:0:4365
-4387:3:3558
-4388:0:4365
-4389:2:1754
-4390:0:4365
-4391:3:3559
-4392:0:4365
-4393:2:1755
-4394:2:1759
-4395:2:1760
-4396:2:1768
-4397:2:1769
-4398:2:1773
-4399:2:1774
-4400:2:1768
-4401:2:1769
-4402:2:1773
-4403:2:1774
-4404:2:1782
-4405:2:1787
-4406:2:1791
-4407:2:1792
-4408:2:1799
-4409:2:1800
-4410:2:1811
-4411:2:1812
-4412:2:1813
-4413:2:1811
-4414:2:1812
-4415:2:1813
-4416:2:1824
-4417:2:1829
-4418:2:1830
-4419:0:4365
-4420:2:1842
-4421:0:4365
-4422:3:3558
-4423:0:4365
-4424:2:1844
-4425:0:4365
-4426:3:3559
-4427:0:4365
-4428:2:1845
-4429:2:1849
-4430:2:1850
-4431:2:1858
-4432:2:1859
-4433:2:1863
-4434:2:1864
-4435:2:1858
-4436:2:1859
-4437:2:1863
-4438:2:1864
-4439:2:1872
-4440:2:1877
-4441:2:1881
-4442:2:1882
-4443:2:1889
-4444:2:1890
-4445:2:1901
-4446:2:1902
-4447:2:1903
-4448:2:1901
-4449:2:1902
-4450:2:1903
-4451:2:1914
-4452:2:1919
-4453:2:1920
-4454:0:4365
-4455:2:1932
-4456:0:4365
-4457:3:3558
-4458:0:4365
-4459:2:1934
-4460:0:4365
-4461:3:3559
-4462:0:4365
-4463:2:1935
-4464:0:4365
-4465:2:1936
-4466:0:4365
-4467:2:2129
-4468:0:4365
-4469:2:2130
-4470:0:4365
-4471:2:2134
-4472:0:4365
-4473:3:3558
-4474:0:4365
-4475:2:2136
-4476:0:4365
-4477:3:3559
-4478:0:4365
-4479:2:2137
-4480:2:2141
-4481:2:2142
-4482:2:2150
-4483:2:2151
-4484:2:2155
-4485:2:2156
-4486:2:2150
-4487:2:2151
-4488:2:2155
-4489:2:2156
-4490:2:2164
-4491:2:2169
-4492:2:2173
-4493:2:2174
-4494:2:2181
-4495:2:2182
-4496:2:2193
-4497:2:2194
-4498:2:2195
-4499:2:2193
-4500:2:2194
-4501:2:2195
-4502:2:2206
-4503:2:2211
-4504:2:2212
-4505:0:4365
-4506:2:2224
-4507:0:4365
-4508:3:3558
-4509:0:4365
-4510:2:2226
-4511:0:4365
-4512:3:3559
-4513:0:4365
-4514:2:1936
-4515:0:4365
-4516:2:2129
-4517:0:4365
-4518:2:2130
-4519:0:4365
-4520:2:2134
-4521:0:4365
-4522:3:3558
-4523:0:4365
-4524:2:2136
-4525:0:4365
-4526:3:3559
-4527:0:4365
-4528:2:2137
-4529:2:2141
-4530:2:2142
-4531:2:2150
-4532:2:2151
-4533:2:2155
-4534:2:2156
-4535:2:2150
-4536:2:2151
-4537:2:2152
-4538:2:2164
-4539:2:2169
-4540:2:2173
-4541:2:2174
-4542:2:2181
-4543:2:2182
-4544:2:2193
-4545:2:2194
-4546:2:2195
-4547:2:2193
-4548:2:2194
-4549:2:2195
-4550:2:2206
-4551:2:2211
-4552:2:2212
-4553:0:4365
-4554:2:2224
-4555:0:4365
-4556:3:3558
-4557:0:4365
-4558:2:2226
-4559:0:4365
-4560:3:3559
-4561:0:4365
-4562:2:2230
-4563:0:4365
-4564:3:3558
-4565:0:4365
-4566:2:2235
-4567:2:2239
-4568:2:2240
-4569:2:2248
-4570:2:2249
-4571:2:2253
-4572:2:2254
-4573:2:2248
-4574:2:2249
-4575:2:2250
-4576:2:2262
-4577:2:2267
-4578:2:2271
-4579:2:2272
-4580:2:2279
-4581:2:2280
-4582:2:2291
-4583:2:2292
-4584:2:2293
-4585:2:2291
-4586:2:2292
-4587:2:2293
-4588:2:2304
-4589:2:2309
-4590:2:2310
-4591:0:4365
-4592:3:3559
-4593:0:4365
-4594:2:2322
-4595:0:4365
-4596:2:1169
-4597:0:4365
-4598:3:3558
-4599:0:4365
-4600:2:1170
-4601:0:4365
-4602:3:3559
-4603:0:4365
-4604:3:3560
-4605:0:4365
-4606:3:3566
-4607:0:4365
-4608:3:3569
-4609:3:3570
-4610:3:3582
-4611:3:3583
-4612:3:3587
-4613:3:3588
-4614:3:3582
-4615:3:3583
-4616:3:3587
-4617:3:3588
-4618:3:3596
-4619:3:3601
-4620:3:3605
-4621:3:3606
-4622:3:3613
-4623:3:3614
-4624:3:3625
-4625:3:3626
-4626:3:3627
-4627:3:3625
-4628:3:3626
-4629:3:3627
-4630:3:3638
-4631:3:3643
-4632:3:3644
-4633:0:4365
-4634:3:3656
-4635:0:4365
-4636:3:3657
-4637:0:4365
-4638:2:1173
-4639:0:4365
-4640:3:3658
-4641:0:4365
-4642:2:1179
-4643:0:4365
-4644:2:1180
-4645:0:4365
-4646:3:3657
-4647:0:4365
-4648:2:1181
-4649:2:1185
-4650:2:1186
-4651:2:1194
-4652:2:1195
-4653:2:1199
-4654:2:1200
-4655:2:1194
-4656:2:1195
-4657:2:1199
-4658:2:1200
-4659:2:1208
-4660:2:1213
-4661:2:1217
-4662:2:1218
-4663:2:1225
-4664:2:1226
-4665:2:1237
-4666:2:1238
-4667:2:1239
-4668:2:1237
-4669:2:1238
-4670:2:1239
-4671:2:1250
-4672:2:1255
-4673:2:1256
-4674:0:4365
-4675:3:3658
-4676:0:4365
-4677:2:1268
-4678:0:4365
-4679:3:3657
-4680:0:4365
-4681:2:1270
-4682:0:4365
-4683:3:3658
-4684:0:4365
-4685:2:1271
-4686:2:1275
-4687:2:1276
-4688:2:1284
-4689:2:1285
-4690:2:1289
-4691:2:1290
-4692:2:1284
-4693:2:1285
-4694:2:1289
-4695:2:1290
-4696:2:1298
-4697:2:1303
-4698:2:1307
-4699:2:1308
-4700:2:1315
-4701:2:1316
-4702:2:1327
-4703:2:1328
-4704:2:1329
-4705:2:1327
-4706:2:1328
-4707:2:1329
-4708:2:1340
-4709:2:1345
-4710:2:1346
-4711:0:4365
-4712:2:1358
-4713:0:4365
-4714:2:1360
-4715:0:4365
-4716:3:3657
-4717:0:4365
-4718:2:1361
-4719:0:4365
-4720:3:3658
-4721:0:4365
-4722:2:1362
-4723:2:1366
-4724:2:1367
-4725:2:1375
-4726:2:1376
-4727:2:1380
-4728:2:1381
-4729:2:1375
-4730:2:1376
-4731:2:1380
-4732:2:1381
-4733:2:1389
-4734:2:1394
-4735:2:1398
-4736:2:1399
-4737:2:1406
-4738:2:1407
-4739:2:1418
-4740:2:1419
-4741:2:1420
-4742:2:1418
-4743:2:1419
-4744:2:1420
-4745:2:1431
-4746:2:1436
-4747:2:1437
-4748:0:4365
-4749:2:1449
-4750:0:4365
-4751:3:3657
-4752:0:4365
-4753:2:1451
-4754:0:4365
-4755:3:3658
-4756:0:4365
-4757:2:1652
-4758:0:4365
-4759:2:1653
-4760:0:4365
-4761:2:1657
-4762:0:4365
-4763:2:1180
-4764:0:4365
-4765:3:3657
-4766:0:4365
-4767:2:1181
-4768:2:1185
-4769:2:1186
-4770:2:1194
-4771:2:1195
-4772:2:1199
-4773:2:1200
-4774:2:1194
-4775:2:1195
-4776:2:1196
-4777:2:1208
-4778:2:1213
-4779:2:1217
-4780:2:1218
-4781:2:1225
-4782:2:1226
-4783:2:1237
-4784:2:1238
-4785:2:1239
-4786:2:1237
-4787:2:1238
-4788:2:1239
-4789:2:1250
-4790:2:1255
-4791:2:1256
-4792:0:4365
-4793:3:3658
-4794:0:4365
-4795:2:1268
-4796:0:4365
-4797:3:3657
-4798:0:4365
-4799:2:1270
-4800:0:4365
-4801:3:3658
-4802:0:4365
-4803:2:1271
-4804:2:1275
-4805:2:1276
-4806:2:1284
-4807:2:1285
-4808:2:1289
-4809:2:1290
-4810:2:1284
-4811:2:1285
-4812:2:1289
-4813:2:1290
-4814:2:1298
-4815:2:1303
-4816:2:1307
-4817:2:1308
-4818:2:1315
-4819:2:1316
-4820:2:1327
-4821:2:1328
-4822:2:1329
-4823:2:1327
-4824:2:1328
-4825:2:1329
-4826:2:1340
-4827:2:1345
-4828:2:1346
-4829:0:4365
-4830:2:1358
-4831:0:4365
-4832:2:1454
-4833:0:4365
-4834:3:3657
-4835:0:4365
-4836:2:1455
-4837:0:4365
-4838:3:3658
-4839:0:4365
-4840:2:1652
-4841:0:4365
-4842:2:1653
-4843:0:4365
-4844:2:1657
-4845:0:4365
-4846:2:1660
-4847:0:4365
-4848:3:3657
-4849:0:4365
-4850:2:1665
-4851:2:1669
-4852:2:1670
-4853:2:1678
-4854:2:1679
-4855:2:1683
-4856:2:1684
-4857:2:1678
-4858:2:1679
-4859:2:1680
-4860:2:1692
-4861:2:1697
-4862:2:1701
-4863:2:1702
-4864:2:1709
-4865:2:1710
-4866:2:1721
-4867:2:1722
-4868:2:1723
-4869:2:1721
-4870:2:1722
-4871:2:1723
-4872:2:1734
-4873:2:1739
-4874:2:1740
-4875:0:4365
-4876:3:3658
-4877:0:4365
-4878:2:1752
-4879:0:4365
-4880:3:3657
-4881:0:4365
-4882:2:1754
-4883:0:4365
-4884:3:3658
-4885:0:4365
-4886:2:1755
-4887:2:1759
-4888:2:1760
-4889:2:1768
-4890:2:1769
-4891:2:1773
-4892:2:1774
-4893:2:1768
-4894:2:1769
-4895:2:1773
-4896:2:1774
-4897:2:1782
-4898:2:1787
-4899:2:1791
-4900:2:1792
-4901:2:1799
-4902:2:1800
-4903:2:1811
-4904:2:1812
-4905:2:1813
-4906:2:1811
-4907:2:1812
-4908:2:1813
-4909:2:1824
-4910:2:1829
-4911:2:1830
-4912:0:4365
-4913:2:1842
-4914:0:4365
-4915:3:3657
-4916:0:4365
-4917:2:1844
-4918:0:4365
-4919:3:3658
-4920:0:4365
-4921:2:1845
-4922:2:1849
-4923:2:1850
-4924:2:1858
-4925:2:1859
-4926:2:1863
-4927:2:1864
-4928:2:1858
-4929:2:1859
-4930:2:1863
-4931:2:1864
-4932:2:1872
-4933:2:1877
-4934:2:1881
-4935:2:1882
-4936:2:1889
-4937:2:1890
-4938:2:1901
-4939:2:1902
-4940:2:1903
-4941:2:1901
-4942:2:1902
-4943:2:1903
-4944:2:1914
-4945:2:1919
-4946:2:1920
-4947:0:4365
-4948:2:1932
-4949:0:4365
-4950:3:3657
-4951:0:4365
-4952:2:1934
-4953:0:4365
-4954:3:3658
-4955:0:4365
-4956:2:1935
-4957:0:4365
-4958:2:1936
-4959:0:4365
-4960:2:2129
-4961:0:4365
-4962:2:2130
-4963:0:4365
-4964:2:2134
-4965:0:4365
-4966:3:3657
-4967:0:4365
-4968:2:2136
-4969:0:4365
-4970:3:3658
-4971:0:4365
-4972:2:2137
-4973:2:2141
-4974:2:2142
-4975:2:2150
-4976:2:2151
-4977:2:2155
-4978:2:2156
-4979:2:2150
-4980:2:2151
-4981:2:2155
-4982:2:2156
-4983:2:2164
-4984:2:2169
-4985:2:2173
-4986:2:2174
-4987:2:2181
-4988:2:2182
-4989:2:2193
-4990:2:2194
-4991:2:2195
-4992:2:2193
-4993:2:2194
-4994:2:2195
-4995:2:2206
-4996:2:2211
-4997:2:2212
-4998:0:4365
-4999:2:2224
-5000:0:4365
-5001:3:3657
-5002:0:4365
-5003:2:2226
-5004:0:4365
-5005:3:3658
-5006:0:4365
-5007:2:1936
-5008:0:4365
-5009:2:2129
-5010:0:4365
-5011:2:2130
-5012:0:4365
-5013:2:2134
-5014:0:4365
-5015:3:3657
-5016:0:4365
-5017:2:2136
-5018:0:4365
-5019:3:3658
-5020:0:4365
-5021:2:2137
-5022:2:2141
-5023:2:2142
-5024:2:2150
-5025:2:2151
-5026:2:2155
-5027:2:2156
-5028:2:2150
-5029:2:2151
-5030:2:2152
-5031:2:2164
-5032:2:2169
-5033:2:2173
-5034:2:2174
-5035:2:2181
-5036:2:2182
-5037:2:2193
-5038:2:2194
-5039:2:2195
-5040:2:2193
-5041:2:2194
-5042:2:2195
-5043:2:2206
-5044:2:2211
-5045:2:2212
-5046:0:4365
-5047:2:2224
-5048:0:4365
-5049:3:3657
-5050:0:4365
-5051:2:2226
-5052:0:4365
-5053:3:3658
-5054:0:4365
-5055:2:2230
-5056:0:4365
-5057:3:3657
-5058:0:4365
-5059:2:2235
-5060:2:2239
-5061:2:2240
-5062:2:2248
-5063:2:2249
-5064:2:2253
-5065:2:2254
-5066:2:2248
-5067:2:2249
-5068:2:2250
-5069:2:2262
-5070:2:2267
-5071:2:2271
-5072:2:2272
-5073:2:2279
-5074:2:2280
-5075:2:2291
-5076:2:2292
-5077:2:2293
-5078:2:2291
-5079:2:2292
-5080:2:2293
-5081:2:2304
-5082:2:2309
-5083:2:2310
-5084:0:4365
-5085:3:3658
-5086:0:4365
-5087:2:2322
-5088:0:4365
-5089:2:1169
-5090:0:4365
-5091:3:3657
-5092:0:4365
-5093:2:1170
-5094:0:4365
-5095:3:3658
-5096:0:4365
-5097:3:3659
-5098:0:4365
-5099:3:3665
-5100:0:4365
-5101:3:3666
-5102:0:4365
-5103:3:3667
-5104:0:4365
-5105:3:3668
-5106:0:4365
-5107:3:3669
-5108:3:3673
-5109:3:3674
-5110:3:3682
-5111:3:3683
-5112:3:3687
-5113:3:3688
-5114:3:3682
-5115:3:3683
-5116:3:3687
-5117:3:3688
-5118:3:3696
-5119:3:3701
-5120:3:3705
-5121:3:3706
-5122:3:3713
-5123:3:3714
-5124:3:3725
-5125:3:3726
-5126:3:3727
-5127:3:3725
-5128:3:3726
-5129:3:3727
-5130:3:3738
-5131:3:3743
-5132:3:3744
-5133:0:4365
-5134:3:3756
-5135:0:4365
-5136:3:3757
-5137:0:4365
-5138:2:1173
-5139:0:4365
-5140:3:3758
-5141:0:4365
-5142:2:1179
-5143:0:4365
-5144:2:1180
-5145:0:4365
-5146:3:3757
-5147:0:4365
-5148:2:1181
-5149:2:1185
-5150:2:1186
-5151:2:1194
-5152:2:1195
-5153:2:1199
-5154:2:1200
-5155:2:1194
-5156:2:1195
-5157:2:1199
-5158:2:1200
-5159:2:1208
-5160:2:1213
-5161:2:1217
-5162:2:1218
-5163:2:1225
-5164:2:1226
-5165:2:1237
-5166:2:1238
-5167:2:1239
-5168:2:1237
-5169:2:1238
-5170:2:1239
-5171:2:1250
-5172:2:1255
-5173:2:1256
-5174:0:4365
-5175:3:3758
-5176:0:4365
-5177:2:1268
-5178:0:4365
-5179:3:3757
-5180:0:4365
-5181:2:1270
-5182:0:4365
-5183:3:3758
-5184:0:4365
-5185:2:1271
-5186:2:1275
-5187:2:1276
-5188:2:1284
-5189:2:1285
-5190:2:1289
-5191:2:1290
-5192:2:1284
-5193:2:1285
-5194:2:1289
-5195:2:1290
-5196:2:1298
-5197:2:1303
-5198:2:1307
-5199:2:1308
-5200:2:1315
-5201:2:1316
-5202:2:1327
-5203:2:1328
-5204:2:1329
-5205:2:1327
-5206:2:1328
-5207:2:1329
-5208:2:1340
-5209:2:1345
-5210:2:1346
-5211:0:4365
-5212:2:1358
-5213:0:4365
-5214:2:1360
-5215:0:4365
-5216:3:3757
-5217:0:4365
-5218:2:1361
-5219:0:4365
-5220:3:3758
-5221:0:4365
-5222:2:1362
-5223:2:1366
-5224:2:1367
-5225:2:1375
-5226:2:1376
-5227:2:1380
-5228:2:1381
-5229:2:1375
-5230:2:1376
-5231:2:1380
-5232:2:1381
-5233:2:1389
-5234:2:1394
-5235:2:1398
-5236:2:1399
-5237:2:1406
-5238:2:1407
-5239:2:1418
-5240:2:1419
-5241:2:1420
-5242:2:1418
-5243:2:1419
-5244:2:1420
-5245:2:1431
-5246:2:1436
-5247:2:1437
-5248:0:4365
-5249:2:1449
-5250:0:4365
-5251:3:3757
-5252:0:4365
-5253:2:1451
-5254:0:4365
-5255:3:3758
-5256:0:4365
-5257:2:1652
-5258:0:4365
-5259:2:1653
-5260:0:4365
-5261:2:1657
-5262:0:4365
-5263:2:1180
-5264:0:4365
-5265:3:3757
-5266:0:4365
-5267:2:1181
-5268:2:1185
-5269:2:1186
-5270:2:1194
-5271:2:1195
-5272:2:1199
-5273:2:1200
-5274:2:1194
-5275:2:1195
-5276:2:1196
-5277:2:1208
-5278:2:1213
-5279:2:1217
-5280:2:1218
-5281:2:1225
-5282:2:1226
-5283:2:1237
-5284:2:1238
-5285:2:1239
-5286:2:1237
-5287:2:1238
-5288:2:1239
-5289:2:1250
-5290:2:1255
-5291:2:1256
-5292:0:4365
-5293:3:3758
-5294:0:4365
-5295:2:1268
-5296:0:4365
-5297:3:3757
-5298:0:4365
-5299:2:1270
-5300:0:4365
-5301:3:3758
-5302:0:4365
-5303:2:1271
-5304:2:1275
-5305:2:1276
-5306:2:1284
-5307:2:1285
-5308:2:1289
-5309:2:1290
-5310:2:1284
-5311:2:1285
-5312:2:1289
-5313:2:1290
-5314:2:1298
-5315:2:1303
-5316:2:1307
-5317:2:1308
-5318:2:1315
-5319:2:1316
-5320:2:1327
-5321:2:1328
-5322:2:1329
-5323:2:1327
-5324:2:1328
-5325:2:1329
-5326:2:1340
-5327:2:1345
-5328:2:1346
-5329:0:4365
-5330:2:1358
-5331:0:4365
-5332:2:1454
-5333:0:4365
-5334:3:3757
-5335:0:4365
-5336:2:1455
-5337:0:4365
-5338:3:3758
-5339:0:4365
-5340:2:1652
-5341:0:4365
-5342:2:1653
-5343:0:4365
-5344:2:1657
-5345:0:4365
-5346:2:1660
-5347:0:4365
-5348:3:3757
-5349:0:4365
-5350:2:1665
-5351:2:1669
-5352:2:1670
-5353:2:1678
-5354:2:1679
-5355:2:1683
-5356:2:1684
-5357:2:1678
-5358:2:1679
-5359:2:1680
-5360:2:1692
-5361:2:1697
-5362:2:1701
-5363:2:1702
-5364:2:1709
-5365:2:1710
-5366:2:1721
-5367:2:1722
-5368:2:1723
-5369:2:1721
-5370:2:1722
-5371:2:1723
-5372:2:1734
-5373:2:1739
-5374:2:1740
-5375:0:4365
-5376:3:3758
-5377:0:4365
-5378:2:1752
-5379:0:4365
-5380:3:3757
-5381:0:4365
-5382:2:1754
-5383:0:4365
-5384:3:3758
-5385:0:4365
-5386:2:1755
-5387:2:1759
-5388:2:1760
-5389:2:1768
-5390:2:1769
-5391:2:1773
-5392:2:1774
-5393:2:1768
-5394:2:1769
-5395:2:1773
-5396:2:1774
-5397:2:1782
-5398:2:1787
-5399:2:1791
-5400:2:1792
-5401:2:1799
-5402:2:1800
-5403:2:1811
-5404:2:1812
-5405:2:1813
-5406:2:1811
-5407:2:1812
-5408:2:1813
-5409:2:1824
-5410:2:1829
-5411:2:1830
-5412:0:4365
-5413:2:1842
-5414:0:4365
-5415:3:3757
-5416:0:4365
-5417:2:1844
-5418:0:4365
-5419:3:3758
-5420:0:4365
-5421:2:1845
-5422:2:1849
-5423:2:1850
-5424:2:1858
-5425:2:1859
-5426:2:1863
-5427:2:1864
-5428:2:1858
-5429:2:1859
-5430:2:1863
-5431:2:1864
-5432:2:1872
-5433:2:1877
-5434:2:1881
-5435:2:1882
-5436:2:1889
-5437:2:1890
-5438:2:1901
-5439:2:1902
-5440:2:1903
-5441:2:1901
-5442:2:1902
-5443:2:1903
-5444:2:1914
-5445:2:1919
-5446:2:1920
-5447:0:4365
-5448:2:1932
-5449:0:4365
-5450:3:3757
-5451:0:4365
-5452:2:1934
-5453:0:4365
-5454:3:3758
-5455:0:4365
-5456:2:1935
-5457:0:4365
-5458:2:1936
-5459:0:4365
-5460:2:2129
-5461:0:4365
-5462:2:2130
-5463:0:4365
-5464:2:2134
-5465:0:4365
-5466:3:3757
-5467:0:4365
-5468:2:2136
-5469:0:4365
-5470:3:3758
-5471:0:4365
-5472:2:2137
-5473:2:2141
-5474:2:2142
-5475:2:2150
-5476:2:2151
-5477:2:2155
-5478:2:2156
-5479:2:2150
-5480:2:2151
-5481:2:2155
-5482:2:2156
-5483:2:2164
-5484:2:2169
-5485:2:2173
-5486:2:2174
-5487:2:2181
-5488:2:2182
-5489:2:2193
-5490:2:2194
-5491:2:2195
-5492:2:2193
-5493:2:2194
-5494:2:2195
-5495:2:2206
-5496:2:2211
-5497:2:2212
-5498:0:4365
-5499:2:2224
-5500:0:4365
-5501:3:3757
-5502:0:4365
-5503:2:2226
-5504:0:4365
-5505:3:3758
-5506:0:4365
-5507:2:1936
-5508:0:4365
-5509:2:2129
-5510:0:4365
-5511:2:2130
-5512:0:4365
-5513:2:2134
-5514:0:4365
-5515:3:3757
-5516:0:4365
-5517:2:2136
-5518:0:4365
-5519:3:3758
-5520:0:4365
-5521:2:2137
-5522:2:2141
-5523:2:2142
-5524:2:2150
-5525:2:2151
-5526:2:2155
-5527:2:2156
-5528:2:2150
-5529:2:2151
-5530:2:2152
-5531:2:2164
-5532:2:2169
-5533:2:2173
-5534:2:2174
-5535:2:2181
-5536:2:2182
-5537:2:2193
-5538:2:2194
-5539:2:2195
-5540:2:2193
-5541:2:2194
-5542:2:2195
-5543:2:2206
-5544:2:2211
-5545:2:2212
-5546:0:4365
-5547:2:2224
-5548:0:4365
-5549:3:3757
-5550:0:4365
-5551:2:2226
-5552:0:4365
-5553:3:3758
-5554:0:4365
-5555:2:2230
-5556:0:4365
-5557:3:3757
-5558:0:4365
-5559:2:2235
-5560:2:2239
-5561:2:2240
-5562:2:2248
-5563:2:2249
-5564:2:2253
-5565:2:2254
-5566:2:2248
-5567:2:2249
-5568:2:2250
-5569:2:2262
-5570:2:2267
-5571:2:2271
-5572:2:2272
-5573:2:2279
-5574:2:2280
-5575:2:2291
-5576:2:2292
-5577:2:2293
-5578:2:2291
-5579:2:2292
-5580:2:2293
-5581:2:2304
-5582:2:2309
-5583:2:2310
-5584:0:4365
-5585:3:3758
-5586:0:4365
-5587:2:2322
-5588:0:4365
-5589:2:1169
-5590:0:4365
-5591:3:3757
-5592:0:4365
-5593:2:1170
-5594:0:4365
-5595:3:3758
-5596:0:4365
-5597:3:3759
-5598:0:4365
-5599:3:3972
-5600:0:4365
-5601:3:3980
-5602:0:4365
-5603:3:3981
-5604:3:3985
-5605:3:3986
-5606:3:3994
-5607:3:3995
-5608:3:3999
-5609:3:4000
-5610:3:3994
-5611:3:3995
-5612:3:3999
-5613:3:4000
-5614:3:4008
-5615:3:4013
-5616:3:4017
-5617:3:4018
-5618:3:4025
-5619:3:4026
-5620:3:4037
-5621:3:4038
-5622:3:4039
-5623:3:4037
-5624:3:4038
-5625:3:4039
-5626:3:4050
-5627:3:4055
-5628:3:4056
-5629:0:4365
-5630:3:4068
-5631:0:4365
-5632:3:4069
-5633:0:4365
-5634:2:1173
-5635:0:4365
-5636:3:4070
-5637:0:4365
-5638:2:1179
-5639:0:4365
-5640:2:1180
-5641:0:4365
-5642:3:4069
-5643:0:4365
-5644:2:1181
-5645:2:1185
-5646:2:1186
-5647:2:1194
-5648:2:1195
-5649:2:1199
-5650:2:1200
-5651:2:1194
-5652:2:1195
-5653:2:1199
-5654:2:1200
-5655:2:1208
-5656:2:1213
-5657:2:1217
-5658:2:1218
-5659:2:1225
-5660:2:1226
-5661:2:1237
-5662:2:1238
-5663:2:1239
-5664:2:1237
-5665:2:1238
-5666:2:1239
-5667:2:1250
-5668:2:1255
-5669:2:1256
-5670:0:4365
-5671:3:4070
-5672:0:4365
-5673:2:1268
-5674:0:4365
-5675:3:4069
-5676:0:4365
-5677:2:1270
-5678:0:4365
-5679:3:4070
-5680:0:4365
-5681:2:1271
-5682:2:1275
-5683:2:1276
-5684:2:1284
-5685:2:1285
-5686:2:1289
-5687:2:1290
-5688:2:1284
-5689:2:1285
-5690:2:1289
-5691:2:1290
-5692:2:1298
-5693:2:1303
-5694:2:1307
-5695:2:1308
-5696:2:1315
-5697:2:1316
-5698:2:1327
-5699:2:1328
-5700:2:1329
-5701:2:1327
-5702:2:1328
-5703:2:1329
-5704:2:1340
-5705:2:1345
-5706:2:1346
-5707:0:4365
-5708:2:1358
-5709:0:4365
-5710:2:1360
-5711:0:4365
-5712:3:4069
-5713:0:4365
-5714:2:1361
-5715:0:4365
-5716:3:4070
-5717:0:4365
-5718:2:1362
-5719:2:1366
-5720:2:1367
-5721:2:1375
-5722:2:1376
-5723:2:1380
-5724:2:1381
-5725:2:1375
-5726:2:1376
-5727:2:1380
-5728:2:1381
-5729:2:1389
-5730:2:1394
-5731:2:1398
-5732:2:1399
-5733:2:1406
-5734:2:1407
-5735:2:1418
-5736:2:1419
-5737:2:1420
-5738:2:1418
-5739:2:1419
-5740:2:1420
-5741:2:1431
-5742:2:1436
-5743:2:1437
-5744:0:4365
-5745:2:1449
-5746:0:4365
-5747:3:4069
-5748:0:4365
-5749:2:1451
-5750:0:4365
-5751:3:4070
-5752:0:4365
-5753:2:1652
-5754:0:4365
-5755:2:1653
-5756:0:4365
-5757:2:1657
-5758:0:4365
-5759:2:1180
-5760:0:4365
-5761:3:4069
-5762:0:4365
-5763:2:1181
-5764:2:1185
-5765:2:1186
-5766:2:1194
-5767:2:1195
-5768:2:1199
-5769:2:1200
-5770:2:1194
-5771:2:1195
-5772:2:1196
-5773:2:1208
-5774:2:1213
-5775:2:1217
-5776:2:1218
-5777:2:1225
-5778:2:1226
-5779:2:1237
-5780:2:1238
-5781:2:1239
-5782:2:1237
-5783:2:1238
-5784:2:1239
-5785:2:1250
-5786:2:1255
-5787:2:1256
-5788:0:4365
-5789:3:4070
-5790:0:4365
-5791:2:1268
-5792:0:4365
-5793:3:4069
-5794:0:4365
-5795:2:1270
-5796:0:4365
-5797:3:4070
-5798:0:4365
-5799:2:1271
-5800:2:1275
-5801:2:1276
-5802:2:1284
-5803:2:1285
-5804:2:1289
-5805:2:1290
-5806:2:1284
-5807:2:1285
-5808:2:1289
-5809:2:1290
-5810:2:1298
-5811:2:1303
-5812:2:1307
-5813:2:1308
-5814:2:1315
-5815:2:1316
-5816:2:1327
-5817:2:1328
-5818:2:1329
-5819:2:1327
-5820:2:1328
-5821:2:1329
-5822:2:1340
-5823:2:1345
-5824:2:1346
-5825:0:4365
-5826:2:1358
-5827:0:4365
-5828:2:1454
-5829:0:4365
-5830:3:4069
-5831:0:4365
-5832:2:1455
-5833:0:4365
-5834:3:4070
-5835:0:4365
-5836:2:1652
-5837:0:4365
-5838:2:1653
-5839:0:4365
-5840:2:1657
-5841:0:4365
-5842:2:1660
-5843:0:4365
-5844:3:4069
-5845:0:4365
-5846:2:1665
-5847:2:1669
-5848:2:1670
-5849:2:1678
-5850:2:1679
-5851:2:1683
-5852:2:1684
-5853:2:1678
-5854:2:1679
-5855:2:1680
-5856:2:1692
-5857:2:1697
-5858:2:1701
-5859:2:1702
-5860:2:1709
-5861:2:1710
-5862:2:1721
-5863:2:1722
-5864:2:1723
-5865:2:1721
-5866:2:1722
-5867:2:1723
-5868:2:1734
-5869:2:1739
-5870:2:1740
-5871:0:4365
-5872:3:4070
-5873:0:4365
-5874:2:1752
-5875:0:4365
-5876:3:4069
-5877:0:4365
-5878:2:1754
-5879:0:4365
-5880:3:4070
-5881:0:4365
-5882:2:1755
-5883:2:1759
-5884:2:1760
-5885:2:1768
-5886:2:1769
-5887:2:1773
-5888:2:1774
-5889:2:1768
-5890:2:1769
-5891:2:1773
-5892:2:1774
-5893:2:1782
-5894:2:1787
-5895:2:1791
-5896:2:1792
-5897:2:1799
-5898:2:1800
-5899:2:1811
-5900:2:1812
-5901:2:1813
-5902:2:1811
-5903:2:1812
-5904:2:1813
-5905:2:1824
-5906:2:1829
-5907:2:1830
-5908:0:4365
-5909:2:1842
-5910:0:4365
-5911:3:4069
-5912:0:4365
-5913:2:1844
-5914:0:4365
-5915:3:4070
-5916:0:4365
-5917:2:1845
-5918:2:1849
-5919:2:1850
-5920:2:1858
-5921:2:1859
-5922:2:1863
-5923:2:1864
-5924:2:1858
-5925:2:1859
-5926:2:1863
-5927:2:1864
-5928:2:1872
-5929:2:1877
-5930:2:1881
-5931:2:1882
-5932:2:1889
-5933:2:1890
-5934:2:1901
-5935:2:1902
-5936:2:1903
-5937:2:1901
-5938:2:1902
-5939:2:1903
-5940:2:1914
-5941:2:1919
-5942:2:1920
-5943:0:4365
-5944:2:1932
-5945:0:4365
-5946:3:4069
-5947:0:4365
-5948:2:1934
-5949:0:4365
-5950:3:4070
-5951:0:4365
-5952:2:1935
-5953:0:4365
-5954:2:1936
-5955:0:4365
-5956:2:2129
-5957:0:4365
-5958:2:2130
-5959:0:4365
-5960:2:2134
-5961:0:4365
-5962:3:4069
-5963:0:4365
-5964:2:2136
-5965:0:4365
-5966:3:4070
-5967:0:4365
-5968:2:2137
-5969:2:2141
-5970:2:2142
-5971:2:2150
-5972:2:2151
-5973:2:2155
-5974:2:2156
-5975:2:2150
-5976:2:2151
-5977:2:2155
-5978:2:2156
-5979:2:2164
-5980:2:2169
-5981:2:2173
-5982:2:2174
-5983:2:2181
-5984:2:2182
-5985:2:2193
-5986:2:2194
-5987:2:2195
-5988:2:2193
-5989:2:2194
-5990:2:2195
-5991:2:2206
-5992:2:2211
-5993:2:2212
-5994:0:4365
-5995:2:2224
-5996:0:4365
-5997:3:4069
-5998:0:4365
-5999:2:2226
-6000:0:4365
-6001:3:4070
-6002:0:4365
-6003:2:1936
-6004:0:4365
-6005:2:2129
-6006:0:4365
-6007:2:2130
-6008:0:4365
-6009:2:2134
-6010:0:4365
-6011:3:4069
-6012:0:4365
-6013:2:2136
-6014:0:4365
-6015:3:4070
-6016:0:4365
-6017:2:2137
-6018:2:2141
-6019:2:2142
-6020:2:2150
-6021:2:2151
-6022:2:2155
-6023:2:2156
-6024:2:2150
-6025:2:2151
-6026:2:2152
-6027:2:2164
-6028:2:2169
-6029:2:2173
-6030:2:2174
-6031:2:2181
-6032:2:2182
-6033:2:2193
-6034:2:2194
-6035:2:2195
-6036:2:2193
-6037:2:2194
-6038:2:2195
-6039:2:2206
-6040:2:2211
-6041:2:2212
-6042:0:4365
-6043:2:2224
-6044:0:4365
-6045:3:4069
-6046:0:4365
-6047:2:2226
-6048:0:4365
-6049:3:4070
-6050:0:4365
-6051:2:2230
-6052:0:4365
-6053:3:4069
-6054:0:4365
-6055:2:2235
-6056:2:2239
-6057:2:2240
-6058:2:2248
-6059:2:2249
-6060:2:2253
-6061:2:2254
-6062:2:2248
-6063:2:2249
-6064:2:2250
-6065:2:2262
-6066:2:2267
-6067:2:2271
-6068:2:2272
-6069:2:2279
-6070:2:2280
-6071:2:2291
-6072:2:2292
-6073:2:2293
-6074:2:2291
-6075:2:2292
-6076:2:2293
-6077:2:2304
-6078:2:2309
-6079:2:2310
-6080:0:4365
-6081:3:4070
-6082:0:4365
-6083:2:2322
-6084:0:4365
-6085:2:1169
-6086:0:4365
-6087:3:4069
-6088:0:4365
-6089:2:1170
-6090:0:4365
-6091:3:4070
-6092:0:4365
-6093:3:4071
-6094:0:4365
-6095:3:4081
-6096:0:4365
-6097:3:3666
-6098:0:4365
-6099:3:3667
-6100:0:4365
-6101:3:3668
-6102:0:4365
-6103:3:3669
-6104:3:3673
-6105:3:3674
-6106:3:3682
-6107:3:3683
-6108:3:3687
-6109:3:3688
-6110:3:3682
-6111:3:3683
-6112:3:3687
-6113:3:3688
-6114:3:3696
-6115:3:3701
-6116:3:3705
-6117:3:3706
-6118:3:3713
-6119:3:3714
-6120:3:3725
-6121:3:3726
-6122:3:3727
-6123:3:3725
-6124:3:3726
-6125:3:3727
-6126:3:3738
-6127:3:3743
-6128:3:3744
-6129:0:4365
-6130:3:3756
-6131:0:4365
-6132:3:3757
-6133:0:4365
-6134:2:1173
-6135:0:4365
-6136:3:3758
-6137:0:4365
-6138:2:1179
-6139:0:4365
-6140:2:1180
-6141:0:4365
-6142:3:3757
-6143:0:4365
-6144:2:1181
-6145:2:1185
-6146:2:1186
-6147:2:1194
-6148:2:1195
-6149:2:1199
-6150:2:1200
-6151:2:1194
-6152:2:1195
-6153:2:1199
-6154:2:1200
-6155:2:1208
-6156:2:1213
-6157:2:1217
-6158:2:1218
-6159:2:1225
-6160:2:1226
-6161:2:1237
-6162:2:1238
-6163:2:1239
-6164:2:1237
-6165:2:1238
-6166:2:1239
-6167:2:1250
-6168:2:1255
-6169:2:1256
-6170:0:4365
-6171:3:3758
-6172:0:4365
-6173:2:1268
-6174:0:4365
-6175:3:3757
-6176:0:4365
-6177:2:1270
-6178:0:4365
-6179:3:3758
-6180:0:4365
-6181:2:1271
-6182:2:1275
-6183:2:1276
-6184:2:1284
-6185:2:1285
-6186:2:1289
-6187:2:1290
-6188:2:1284
-6189:2:1285
-6190:2:1289
-6191:2:1290
-6192:2:1298
-6193:2:1303
-6194:2:1307
-6195:2:1308
-6196:2:1315
-6197:2:1316
-6198:2:1327
-6199:2:1328
-6200:2:1329
-6201:2:1327
-6202:2:1328
-6203:2:1329
-6204:2:1340
-6205:2:1345
-6206:2:1346
-6207:0:4365
-6208:2:1358
-6209:0:4365
-6210:2:1360
-6211:0:4365
-6212:3:3757
-6213:0:4365
-6214:2:1361
-6215:0:4365
-6216:3:3758
-6217:0:4365
-6218:2:1362
-6219:2:1366
-6220:2:1367
-6221:2:1375
-6222:2:1376
-6223:2:1380
-6224:2:1381
-6225:2:1375
-6226:2:1376
-6227:2:1380
-6228:2:1381
-6229:2:1389
-6230:2:1394
-6231:2:1398
-6232:2:1399
-6233:2:1406
-6234:2:1407
-6235:2:1418
-6236:2:1419
-6237:2:1420
-6238:2:1418
-6239:2:1419
-6240:2:1420
-6241:2:1431
-6242:2:1436
-6243:2:1437
-6244:0:4365
-6245:2:1449
-6246:0:4365
-6247:3:3757
-6248:0:4365
-6249:2:1451
-6250:0:4365
-6251:3:3758
-6252:0:4365
-6253:2:1652
-6254:0:4365
-6255:2:1653
-6256:0:4365
-6257:2:1657
-6258:0:4365
-6259:2:1180
-6260:0:4365
-6261:3:3757
-6262:0:4365
-6263:2:1181
-6264:2:1185
-6265:2:1186
-6266:2:1194
-6267:2:1195
-6268:2:1199
-6269:2:1200
-6270:2:1194
-6271:2:1195
-6272:2:1196
-6273:2:1208
-6274:2:1213
-6275:2:1217
-6276:2:1218
-6277:2:1225
-6278:2:1226
-6279:2:1237
-6280:2:1238
-6281:2:1239
-6282:2:1237
-6283:2:1238
-6284:2:1239
-6285:2:1250
-6286:2:1255
-6287:2:1256
-6288:0:4365
-6289:3:3758
-6290:0:4365
-6291:2:1268
-6292:0:4365
-6293:3:3757
-6294:0:4365
-6295:2:1270
-6296:0:4365
-6297:3:3758
-6298:0:4365
-6299:2:1271
-6300:2:1275
-6301:2:1276
-6302:2:1284
-6303:2:1285
-6304:2:1289
-6305:2:1290
-6306:2:1284
-6307:2:1285
-6308:2:1289
-6309:2:1290
-6310:2:1298
-6311:2:1303
-6312:2:1307
-6313:2:1308
-6314:2:1315
-6315:2:1316
-6316:2:1327
-6317:2:1328
-6318:2:1329
-6319:2:1327
-6320:2:1328
-6321:2:1329
-6322:2:1340
-6323:2:1345
-6324:2:1346
-6325:0:4365
-6326:2:1358
-6327:0:4365
-6328:2:1454
-6329:0:4365
-6330:3:3757
-6331:0:4365
-6332:2:1455
-6333:0:4365
-6334:3:3758
-6335:0:4365
-6336:2:1652
-6337:0:4365
-6338:2:1653
-6339:0:4365
-6340:2:1657
-6341:0:4365
-6342:2:1660
-6343:0:4365
-6344:3:3757
-6345:0:4365
-6346:2:1665
-6347:2:1669
-6348:2:1670
-6349:2:1678
-6350:2:1679
-6351:2:1683
-6352:2:1684
-6353:2:1678
-6354:2:1679
-6355:2:1680
-6356:2:1692
-6357:2:1697
-6358:2:1701
-6359:2:1702
-6360:2:1709
-6361:2:1710
-6362:2:1721
-6363:2:1722
-6364:2:1723
-6365:2:1721
-6366:2:1722
-6367:2:1723
-6368:2:1734
-6369:2:1739
-6370:2:1740
-6371:0:4365
-6372:3:3758
-6373:0:4365
-6374:2:1752
-6375:0:4365
-6376:3:3757
-6377:0:4365
-6378:2:1754
-6379:0:4365
-6380:3:3758
-6381:0:4365
-6382:2:1755
-6383:2:1759
-6384:2:1760
-6385:2:1768
-6386:2:1769
-6387:2:1773
-6388:2:1774
-6389:2:1768
-6390:2:1769
-6391:2:1773
-6392:2:1774
-6393:2:1782
-6394:2:1787
-6395:2:1791
-6396:2:1792
-6397:2:1799
-6398:2:1800
-6399:2:1811
-6400:2:1812
-6401:2:1813
-6402:2:1811
-6403:2:1812
-6404:2:1813
-6405:2:1824
-6406:2:1829
-6407:2:1830
-6408:0:4365
-6409:2:1842
-6410:0:4365
-6411:3:3757
-6412:0:4365
-6413:2:1844
-6414:0:4365
-6415:3:3758
-6416:0:4365
-6417:2:1845
-6418:2:1849
-6419:2:1850
-6420:2:1858
-6421:2:1859
-6422:2:1863
-6423:2:1864
-6424:2:1858
-6425:2:1859
-6426:2:1863
-6427:2:1864
-6428:2:1872
-6429:2:1877
-6430:2:1881
-6431:2:1882
-6432:2:1889
-6433:2:1890
-6434:2:1901
-6435:2:1902
-6436:2:1903
-6437:2:1901
-6438:2:1902
-6439:2:1903
-6440:2:1914
-6441:2:1919
-6442:2:1920
-6443:0:4365
-6444:2:1932
-6445:0:4365
-6446:3:3757
-6447:0:4365
-6448:2:1934
-6449:0:4365
-6450:3:3758
-6451:0:4365
-6452:2:1935
-6453:0:4365
-6454:2:1936
-6455:0:4365
-6456:2:2129
-6457:0:4365
-6458:2:2130
-6459:0:4365
-6460:2:2134
-6461:0:4365
-6462:3:3757
-6463:0:4365
-6464:2:2136
-6465:0:4365
-6466:3:3758
-6467:0:4365
-6468:2:2137
-6469:2:2141
-6470:2:2142
-6471:2:2150
-6472:2:2151
-6473:2:2155
-6474:2:2156
-6475:2:2150
-6476:2:2151
-6477:2:2155
-6478:2:2156
-6479:2:2164
-6480:2:2169
-6481:2:2173
-6482:2:2174
-6483:2:2181
-6484:2:2182
-6485:2:2193
-6486:2:2194
-6487:2:2195
-6488:2:2193
-6489:2:2194
-6490:2:2195
-6491:2:2206
-6492:2:2211
-6493:2:2212
-6494:0:4365
-6495:2:2224
-6496:0:4365
-6497:3:3757
-6498:0:4365
-6499:2:2226
-6500:0:4365
-6501:3:3758
-6502:0:4365
-6503:2:1936
-6504:0:4365
-6505:2:2129
-6506:0:4365
-6507:2:2130
-6508:0:4365
-6509:2:2134
-6510:0:4365
-6511:3:3757
-6512:0:4365
-6513:2:2136
-6514:0:4365
-6515:3:3758
-6516:0:4365
-6517:2:2137
-6518:2:2141
-6519:2:2142
-6520:2:2150
-6521:2:2151
-6522:2:2155
-6523:2:2156
-6524:2:2150
-6525:2:2151
-6526:2:2152
-6527:2:2164
-6528:2:2169
-6529:2:2173
-6530:2:2174
-6531:2:2181
-6532:2:2182
-6533:2:2193
-6534:2:2194
-6535:2:2195
-6536:2:2193
-6537:2:2194
-6538:2:2195
-6539:2:2206
-6540:2:2211
-6541:2:2212
-6542:0:4365
-6543:2:2224
-6544:0:4365
-6545:3:3757
-6546:0:4365
-6547:2:2226
-6548:0:4365
-6549:3:3758
-6550:0:4365
-6551:2:2230
-6552:0:4365
-6553:3:3757
-6554:0:4365
-6555:2:2235
-6556:2:2239
-6557:2:2240
-6558:2:2248
-6559:2:2249
-6560:2:2253
-6561:2:2254
-6562:2:2248
-6563:2:2249
-6564:2:2250
-6565:2:2262
-6566:2:2267
-6567:2:2271
-6568:2:2272
-6569:2:2279
-6570:2:2280
-6571:2:2291
-6572:2:2292
-6573:2:2293
-6574:2:2291
-6575:2:2292
-6576:2:2293
-6577:2:2304
-6578:2:2309
-6579:2:2310
-6580:0:4365
-6581:3:3758
-6582:0:4365
-6583:2:2322
-6584:0:4365
-6585:2:1169
-6586:0:4365
-6587:3:3757
-6588:0:4365
-6589:2:1170
-6590:0:4365
-6591:3:3758
-6592:0:4365
-6593:3:3759
-6594:0:4365
-6595:3:3972
-6596:0:4365
-6597:3:4077
-6598:0:4365
-6599:3:4078
-6600:0:4365
-6601:3:4082
-6602:0:4365
-6603:3:4088
-6604:0:4365
-6605:3:4092
-6606:3:4093
-6607:3:4097
-6608:3:4101
-6609:3:4102
-6610:3:4097
-6611:3:4101
-6612:3:4102
-6613:3:4106
-6614:3:4114
-6615:3:4115
-6616:3:4120
-6617:3:4127
-6618:3:4128
-6619:3:4127
-6620:3:4128
-6621:3:4135
-6622:3:4140
-6623:0:4365
-6624:3:4151
-6625:0:4365
-6626:3:4155
-6627:3:4156
-6628:3:4160
-6629:3:4164
-6630:3:4165
-6631:3:4160
-6632:3:4164
-6633:3:4165
-6634:3:4169
-6635:3:4177
-6636:3:4178
-6637:3:4183
-6638:3:4190
-6639:3:4191
-6640:3:4190
-6641:3:4191
-6642:3:4198
-6643:3:4203
-6644:0:4365
-6645:3:4151
-6646:0:4365
-6647:3:4155
-6648:3:4156
-6649:3:4160
-6650:3:4164
-6651:3:4165
-6652:3:4160
-6653:3:4164
-6654:3:4165
-6655:3:4169
-6656:3:4177
-6657:3:4178
-6658:3:4183
-6659:3:4190
-6660:3:4191
-6661:3:4190
-6662:3:4191
-6663:3:4198
-6664:3:4203
-6665:0:4365
-6666:3:4214
-6667:0:4365
-6668:3:4222
-6669:3:4223
-6670:3:4227
-6671:3:4231
-6672:3:4232
-6673:3:4227
-6674:3:4231
-6675:3:4232
-6676:3:4236
-6677:3:4244
-6678:3:4245
-6679:3:4250
-6680:3:4257
-6681:3:4258
-6682:3:4257
-6683:3:4258
-6684:3:4265
-6685:3:4270
-6686:0:4365
-6687:3:4285
-6688:0:4365
-6689:3:4286
-6690:0:4365
-6691:2:1173
-6692:0:4365
-6693:3:4287
-6694:0:4365
-6695:2:1179
-6696:0:4365
-6697:2:1180
-6698:0:4365
-6699:3:4286
-6700:0:4365
-6701:2:1181
-6702:2:1185
-6703:2:1186
-6704:2:1194
-6705:2:1195
-6706:2:1199
-6707:2:1200
-6708:2:1194
-6709:2:1195
-6710:2:1199
-6711:2:1200
-6712:2:1208
-6713:2:1213
-6714:2:1217
-6715:2:1218
-6716:2:1225
-6717:2:1226
-6718:2:1237
-6719:2:1238
-6720:2:1239
-6721:2:1237
-6722:2:1238
-6723:2:1239
-6724:2:1250
-6725:2:1255
-6726:2:1256
-6727:0:4365
-6728:3:4287
-6729:0:4365
-6730:2:1268
-6731:0:4365
-6732:3:4286
-6733:0:4365
-6734:2:1270
-6735:0:4365
-6736:3:4287
-6737:0:4365
-6738:2:1271
-6739:2:1275
-6740:2:1276
-6741:2:1284
-6742:2:1285
-6743:2:1289
-6744:2:1290
-6745:2:1284
-6746:2:1285
-6747:2:1289
-6748:2:1290
-6749:2:1298
-6750:2:1303
-6751:2:1307
-6752:2:1308
-6753:2:1315
-6754:2:1316
-6755:2:1327
-6756:2:1328
-6757:2:1329
-6758:2:1327
-6759:2:1328
-6760:2:1329
-6761:2:1340
-6762:2:1345
-6763:2:1346
-6764:0:4365
-6765:2:1358
-6766:0:4365
-6767:2:1360
-6768:0:4365
-6769:3:4286
-6770:0:4365
-6771:2:1361
-6772:0:4365
-6773:3:4287
-6774:0:4365
-6775:2:1362
-6776:2:1366
-6777:2:1367
-6778:2:1375
-6779:2:1376
-6780:2:1380
-6781:2:1381
-6782:2:1375
-6783:2:1376
-6784:2:1380
-6785:2:1381
-6786:2:1389
-6787:2:1394
-6788:2:1398
-6789:2:1399
-6790:2:1406
-6791:2:1407
-6792:2:1418
-6793:2:1419
-6794:2:1420
-6795:2:1418
-6796:2:1419
-6797:2:1420
-6798:2:1431
-6799:2:1436
-6800:2:1437
-6801:0:4365
-6802:2:1449
-6803:0:4365
-6804:3:4286
-6805:0:4365
-6806:2:1451
-6807:0:4365
-6808:3:4287
-6809:0:4365
-6810:2:1652
-6811:0:4365
-6812:2:1653
-6813:0:4365
-6814:2:1657
-6815:0:4365
-6816:2:1180
-6817:0:4365
-6818:3:4286
-6819:0:4365
-6820:2:1181
-6821:2:1185
-6822:2:1186
-6823:2:1194
-6824:2:1195
-6825:2:1199
-6826:2:1200
-6827:2:1194
-6828:2:1195
-6829:2:1196
-6830:2:1208
-6831:2:1213
-6832:2:1217
-6833:2:1218
-6834:2:1225
-6835:2:1226
-6836:2:1237
-6837:2:1238
-6838:2:1239
-6839:2:1237
-6840:2:1238
-6841:2:1239
-6842:2:1250
-6843:2:1255
-6844:2:1256
-6845:0:4365
-6846:3:4287
-6847:0:4365
-6848:2:1268
-6849:0:4365
-6850:3:4286
-6851:0:4365
-6852:2:1270
-6853:0:4365
-6854:3:4287
-6855:0:4365
-6856:2:1271
-6857:2:1275
-6858:2:1276
-6859:2:1284
-6860:2:1285
-6861:2:1289
-6862:2:1290
-6863:2:1284
-6864:2:1285
-6865:2:1289
-6866:2:1290
-6867:2:1298
-6868:2:1303
-6869:2:1307
-6870:2:1308
-6871:2:1315
-6872:2:1316
-6873:2:1327
-6874:2:1328
-6875:2:1329
-6876:2:1327
-6877:2:1328
-6878:2:1329
-6879:2:1340
-6880:2:1345
-6881:2:1346
-6882:0:4365
-6883:2:1358
-6884:0:4365
-6885:2:1454
-6886:0:4365
-6887:3:4286
-6888:0:4365
-6889:2:1455
-6890:0:4365
-6891:3:4287
-6892:0:4365
-6893:2:1652
-6894:0:4365
-6895:2:1653
-6896:0:4365
-6897:2:1657
-6898:0:4365
-6899:2:1660
-6900:0:4365
-6901:3:4286
-6902:0:4365
-6903:2:1665
-6904:2:1669
-6905:2:1670
-6906:2:1678
-6907:2:1679
-6908:2:1683
-6909:2:1684
-6910:2:1678
-6911:2:1679
-6912:2:1680
-6913:2:1692
-6914:2:1697
-6915:2:1701
-6916:2:1702
-6917:2:1709
-6918:2:1710
-6919:2:1721
-6920:2:1722
-6921:2:1723
-6922:2:1721
-6923:2:1722
-6924:2:1723
-6925:2:1734
-6926:2:1739
-6927:2:1740
-6928:0:4365
-6929:3:4287
-6930:0:4365
-6931:2:1752
-6932:0:4365
-6933:3:4286
-6934:0:4365
-6935:2:1754
-6936:0:4365
-6937:3:4287
-6938:0:4365
-6939:2:1755
-6940:2:1759
-6941:2:1760
-6942:2:1768
-6943:2:1769
-6944:2:1773
-6945:2:1774
-6946:2:1768
-6947:2:1769
-6948:2:1773
-6949:2:1774
-6950:2:1782
-6951:2:1787
-6952:2:1791
-6953:2:1792
-6954:2:1799
-6955:2:1800
-6956:2:1811
-6957:2:1812
-6958:2:1813
-6959:2:1811
-6960:2:1812
-6961:2:1813
-6962:2:1824
-6963:2:1829
-6964:2:1830
-6965:0:4365
-6966:2:1842
-6967:0:4365
-6968:3:4286
-6969:0:4365
-6970:2:1844
-6971:0:4365
-6972:3:4287
-6973:0:4365
-6974:2:1845
-6975:2:1849
-6976:2:1850
-6977:2:1858
-6978:2:1859
-6979:2:1863
-6980:2:1864
-6981:2:1858
-6982:2:1859
-6983:2:1863
-6984:2:1864
-6985:2:1872
-6986:2:1877
-6987:2:1881
-6988:2:1882
-6989:2:1889
-6990:2:1890
-6991:2:1901
-6992:2:1902
-6993:2:1903
-6994:2:1901
-6995:2:1902
-6996:2:1903
-6997:2:1914
-6998:2:1919
-6999:2:1920
-7000:0:4365
-7001:2:1932
-7002:0:4365
-7003:3:4286
-7004:0:4365
-7005:2:1934
-7006:0:4365
-7007:3:4287
-7008:0:4365
-7009:2:1935
-7010:0:4365
-7011:2:1936
-7012:0:4365
-7013:2:2129
-7014:0:4365
-7015:2:2130
-7016:0:4365
-7017:2:2134
-7018:0:4365
-7019:3:4286
-7020:0:4365
-7021:2:2136
-7022:0:4365
-7023:3:4287
-7024:0:4365
-7025:2:2137
-7026:2:2141
-7027:2:2142
-7028:2:2150
-7029:2:2151
-7030:2:2155
-7031:2:2156
-7032:2:2150
-7033:2:2151
-7034:2:2155
-7035:2:2156
-7036:2:2164
-7037:2:2169
-7038:2:2173
-7039:2:2174
-7040:2:2181
-7041:2:2182
-7042:2:2193
-7043:2:2194
-7044:2:2195
-7045:2:2193
-7046:2:2194
-7047:2:2195
-7048:2:2206
-7049:2:2211
-7050:2:2212
-7051:0:4365
-7052:2:2224
-7053:0:4365
-7054:3:4286
-7055:0:4365
-7056:2:2226
-7057:0:4365
-7058:3:4287
-7059:0:4365
-7060:2:1936
-7061:0:4365
-7062:2:2129
-7063:0:4365
-7064:2:2130
-7065:0:4365
-7066:2:2134
-7067:0:4365
-7068:3:4286
-7069:0:4365
-7070:2:2136
-7071:0:4365
-7072:3:4287
-7073:0:4365
-7074:2:2137
-7075:2:2141
-7076:2:2142
-7077:2:2150
-7078:2:2151
-7079:2:2155
-7080:2:2156
-7081:2:2150
-7082:2:2151
-7083:2:2152
-7084:2:2164
-7085:2:2169
-7086:2:2173
-7087:2:2174
-7088:2:2181
-7089:2:2182
-7090:2:2193
-7091:2:2194
-7092:2:2195
-7093:2:2193
-7094:2:2194
-7095:2:2195
-7096:2:2206
-7097:2:2211
-7098:2:2212
-7099:0:4365
-7100:2:2224
-7101:0:4365
-7102:3:4286
-7103:0:4365
-7104:2:2226
-7105:0:4365
-7106:3:4287
-7107:0:4365
-7108:2:2230
-7109:0:4365
-7110:3:4286
-7111:0:4365
-7112:2:2235
-7113:2:2239
-7114:2:2240
-7115:2:2248
-7116:2:2249
-7117:2:2253
-7118:2:2254
-7119:2:2248
-7120:2:2249
-7121:2:2250
-7122:2:2262
-7123:2:2267
-7124:2:2271
-7125:2:2272
-7126:2:2279
-7127:2:2280
-7128:2:2291
-7129:2:2292
-7130:2:2293
-7131:2:2291
-7132:2:2292
-7133:2:2293
-7134:2:2304
-7135:2:2309
-7136:2:2310
-7137:0:4365
-7138:3:4287
-7139:0:4365
-7140:2:2322
-7141:0:4365
-7142:2:1169
-7143:0:4365
-7144:3:4286
-7145:0:4365
-7146:2:1170
-7147:0:4365
-7148:3:4287
-7149:0:4365
-7150:3:4288
-7151:0:4365
-7152:3:4294
-7153:0:4365
-7154:3:4295
-7155:0:4365
-7156:3:2338
-7157:0:4365
-7158:3:2339
-7159:3:2343
-7160:3:2344
-7161:3:2352
-7162:3:2353
-7163:3:2357
-7164:3:2358
-7165:3:2352
-7166:3:2353
-7167:3:2357
-7168:3:2358
-7169:3:2366
-7170:3:2371
-7171:3:2375
-7172:3:2376
-7173:3:2383
-7174:3:2384
-7175:3:2395
-7176:3:2396
-7177:3:2397
-7178:3:2395
-7179:3:2396
-7180:3:2397
-7181:3:2408
-7182:3:2413
-7183:3:2414
-7184:0:4365
-7185:3:2426
-7186:0:4365
-7187:3:2427
-7188:0:4365
-7189:2:1173
-7190:0:4365
-7191:3:2428
-7192:0:4365
-7193:2:1179
-7194:0:4365
-7195:2:1180
-7196:0:4365
-7197:3:2427
-7198:0:4365
-7199:2:1181
-7200:2:1185
-7201:2:1186
-7202:2:1194
-7203:2:1195
-7204:2:1199
-7205:2:1200
-7206:2:1194
-7207:2:1195
-7208:2:1199
-7209:2:1200
-7210:2:1208
-7211:2:1213
-7212:2:1217
-7213:2:1218
-7214:2:1225
-7215:2:1226
-7216:2:1237
-7217:2:1238
-7218:2:1239
-7219:2:1237
-7220:2:1238
-7221:2:1239
-7222:2:1250
-7223:2:1255
-7224:2:1256
-7225:0:4365
-7226:3:2428
-7227:0:4365
-7228:2:1268
-7229:0:4365
-7230:3:2427
-7231:0:4365
-7232:2:1270
-7233:0:4365
-7234:3:2428
-7235:0:4365
-7236:2:1271
-7237:2:1275
-7238:2:1276
-7239:2:1284
-7240:2:1285
-7241:2:1289
-7242:2:1290
-7243:2:1284
-7244:2:1285
-7245:2:1289
-7246:2:1290
-7247:2:1298
-7248:2:1303
-7249:2:1307
-7250:2:1308
-7251:2:1315
-7252:2:1316
-7253:2:1327
-7254:2:1328
-7255:2:1329
-7256:2:1327
-7257:2:1328
-7258:2:1329
-7259:2:1340
-7260:2:1345
-7261:2:1346
-7262:0:4365
-7263:2:1358
-7264:0:4365
-7265:2:1360
-7266:0:4365
-7267:3:2427
-7268:0:4365
-7269:2:1361
-7270:0:4365
-7271:3:2428
-7272:0:4365
-7273:2:1362
-7274:2:1366
-7275:2:1367
-7276:2:1375
-7277:2:1376
-7278:2:1380
-7279:2:1381
-7280:2:1375
-7281:2:1376
-7282:2:1380
-7283:2:1381
-7284:2:1389
-7285:2:1394
-7286:2:1398
-7287:2:1399
-7288:2:1406
-7289:2:1407
-7290:2:1418
-7291:2:1419
-7292:2:1420
-7293:2:1418
-7294:2:1419
-7295:2:1420
-7296:2:1431
-7297:2:1436
-7298:2:1437
-7299:0:4365
-7300:2:1449
-7301:0:4365
-7302:3:2427
-7303:0:4365
-7304:2:1451
-7305:0:4365
-7306:3:2428
-7307:0:4365
-7308:2:1652
-7309:0:4365
-7310:2:1653
-7311:0:4365
-7312:2:1657
-7313:0:4365
-7314:2:1180
-7315:0:4365
-7316:3:2427
-7317:0:4365
-7318:2:1181
-7319:2:1185
-7320:2:1186
-7321:2:1194
-7322:2:1195
-7323:2:1199
-7324:2:1200
-7325:2:1194
-7326:2:1195
-7327:2:1196
-7328:2:1208
-7329:2:1213
-7330:2:1217
-7331:2:1218
-7332:2:1225
-7333:2:1226
-7334:2:1237
-7335:2:1238
-7336:2:1239
-7337:2:1237
-7338:2:1238
-7339:2:1239
-7340:2:1250
-7341:2:1255
-7342:2:1256
-7343:0:4365
-7344:3:2428
-7345:0:4365
-7346:2:1268
-7347:0:4365
-7348:3:2427
-7349:0:4365
-7350:2:1270
-7351:0:4365
-7352:3:2428
-7353:0:4365
-7354:2:1271
-7355:2:1275
-7356:2:1276
-7357:2:1284
-7358:2:1285
-7359:2:1289
-7360:2:1290
-7361:2:1284
-7362:2:1285
-7363:2:1289
-7364:2:1290
-7365:2:1298
-7366:2:1303
-7367:2:1307
-7368:2:1308
-7369:2:1315
-7370:2:1316
-7371:2:1327
-7372:2:1328
-7373:2:1329
-7374:2:1327
-7375:2:1328
-7376:2:1329
-7377:2:1340
-7378:2:1345
-7379:2:1346
-7380:0:4365
-7381:2:1358
-7382:0:4365
-7383:2:1454
-7384:0:4365
-7385:3:2427
-7386:0:4365
-7387:2:1455
-7388:0:4365
-7389:3:2428
-7390:0:4365
-7391:2:1652
-7392:0:4365
-7393:2:1653
-7394:0:4365
-7395:2:1657
-7396:0:4365
-7397:2:1660
-7398:0:4365
-7399:3:2427
-7400:0:4365
-7401:2:1665
-7402:2:1669
-7403:2:1670
-7404:2:1678
-7405:2:1679
-7406:2:1683
-7407:2:1684
-7408:2:1678
-7409:2:1679
-7410:2:1680
-7411:2:1692
-7412:2:1697
-7413:2:1701
-7414:2:1702
-7415:2:1709
-7416:2:1710
-7417:2:1721
-7418:2:1722
-7419:2:1723
-7420:2:1721
-7421:2:1722
-7422:2:1723
-7423:2:1734
-7424:2:1739
-7425:2:1740
-7426:0:4365
-7427:3:2428
-7428:0:4365
-7429:2:1752
-7430:0:4365
-7431:3:2427
-7432:0:4365
-7433:2:1754
-7434:0:4365
-7435:3:2428
-7436:0:4365
-7437:2:1755
-7438:2:1759
-7439:2:1760
-7440:2:1768
-7441:2:1769
-7442:2:1773
-7443:2:1774
-7444:2:1768
-7445:2:1769
-7446:2:1773
-7447:2:1774
-7448:2:1782
-7449:2:1787
-7450:2:1791
-7451:2:1792
-7452:2:1799
-7453:2:1800
-7454:2:1811
-7455:2:1812
-7456:2:1813
-7457:2:1811
-7458:2:1812
-7459:2:1813
-7460:2:1824
-7461:2:1829
-7462:2:1830
-7463:0:4365
-7464:2:1842
-7465:0:4365
-7466:3:2427
-7467:0:4365
-7468:2:1844
-7469:0:4365
-7470:3:2428
-7471:0:4365
-7472:2:1845
-7473:2:1849
-7474:2:1850
-7475:2:1858
-7476:2:1859
-7477:2:1863
-7478:2:1864
-7479:2:1858
-7480:2:1859
-7481:2:1863
-7482:2:1864
-7483:2:1872
-7484:2:1877
-7485:2:1881
-7486:2:1882
-7487:2:1889
-7488:2:1890
-7489:2:1901
-7490:2:1902
-7491:2:1903
-7492:2:1901
-7493:2:1902
-7494:2:1903
-7495:2:1914
-7496:2:1919
-7497:2:1920
-7498:0:4365
-7499:2:1932
-7500:0:4365
-7501:3:2427
-7502:0:4365
-7503:2:1934
-7504:0:4365
-7505:3:2428
-7506:0:4365
-7507:2:1935
-7508:0:4365
-7509:2:1936
-7510:0:4365
-7511:2:2129
-7512:0:4365
-7513:2:2130
-7514:0:4365
-7515:2:2134
-7516:0:4365
-7517:3:2427
-7518:0:4365
-7519:2:2136
-7520:0:4365
-7521:3:2428
-7522:0:4365
-7523:2:2137
-7524:2:2141
-7525:2:2142
-7526:2:2150
-7527:2:2151
-7528:2:2155
-7529:2:2156
-7530:2:2150
-7531:2:2151
-7532:2:2155
-7533:2:2156
-7534:2:2164
-7535:2:2169
-7536:2:2173
-7537:2:2174
-7538:2:2181
-7539:2:2182
-7540:2:2193
-7541:2:2194
-7542:2:2195
-7543:2:2193
-7544:2:2194
-7545:2:2195
-7546:2:2206
-7547:2:2211
-7548:2:2212
-7549:0:4365
-7550:2:2224
-7551:0:4365
-7552:3:2427
-7553:0:4365
-7554:2:2226
-7555:0:4365
-7556:3:2428
-7557:0:4365
-7558:2:1936
-7559:0:4365
-7560:2:2129
-7561:0:4365
-7562:2:2130
-7563:0:4365
-7564:2:2134
-7565:0:4365
-7566:3:2427
-7567:0:4365
-7568:2:2136
-7569:0:4365
-7570:3:2428
-7571:0:4365
-7572:2:2137
-7573:2:2141
-7574:2:2142
-7575:2:2150
-7576:2:2151
-7577:2:2155
-7578:2:2156
-7579:2:2150
-7580:2:2151
-7581:2:2152
-7582:2:2164
-7583:2:2169
-7584:2:2173
-7585:2:2174
-7586:2:2181
-7587:2:2182
-7588:2:2193
-7589:2:2194
-7590:2:2195
-7591:2:2193
-7592:2:2194
-7593:2:2195
-7594:2:2206
-7595:2:2211
-7596:2:2212
-7597:0:4365
-7598:2:2224
-7599:0:4365
-7600:3:2427
-7601:0:4365
-7602:2:2226
-7603:0:4365
-7604:3:2428
-7605:0:4365
-7606:2:2230
-7607:0:4365
-7608:3:2427
-7609:0:4365
-7610:2:2235
-7611:2:2239
-7612:2:2240
-7613:2:2248
-7614:2:2249
-7615:2:2253
-7616:2:2254
-7617:2:2248
-7618:2:2249
-7619:2:2250
-7620:2:2262
-7621:2:2267
-7622:2:2271
-7623:2:2272
-7624:2:2279
-7625:2:2280
-7626:2:2291
-7627:2:2292
-7628:2:2293
-7629:2:2291
-7630:2:2292
-7631:2:2293
-7632:2:2304
-7633:2:2309
-7634:2:2310
-7635:0:4365
-7636:3:2428
-7637:0:4365
-7638:2:2322
-7639:0:4365
-7640:2:1169
-7641:0:4365
-7642:3:2427
-7643:0:4365
-7644:2:1170
-7645:0:4365
-7646:3:2428
-7647:0:4365
-7648:3:2429
-7649:0:4365
-7650:3:2435
-7651:3:2436
-7652:0:4365
-7653:3:2440
-7654:3:2444
-7655:3:2445
-7656:3:2453
-7657:3:2454
-7658:3:2458
-7659:3:2459
-7660:3:2453
-7661:3:2454
-7662:3:2458
-7663:3:2459
-7664:3:2467
-7665:3:2472
-7666:3:2473
-7667:3:2484
-7668:3:2485
-7669:3:2496
-7670:3:2497
-7671:3:2498
-7672:3:2496
-7673:3:2497
-7674:3:2498
-7675:3:2509
-7676:3:2514
-7677:3:2515
-7678:0:4365
-7679:3:2527
-7680:0:4365
-7681:3:2528
-7682:0:4365
-7683:2:1173
-7684:0:4365
-7685:3:2529
-7686:0:4365
-7687:2:1179
-7688:0:4365
-7689:2:1180
-7690:0:4365
-7691:3:2528
-7692:0:4365
-7693:2:1181
-7694:2:1185
-7695:2:1186
-7696:2:1194
-7697:2:1195
-7698:2:1199
-7699:2:1200
-7700:2:1194
-7701:2:1195
-7702:2:1199
-7703:2:1200
-7704:2:1208
-7705:2:1213
-7706:2:1217
-7707:2:1218
-7708:2:1225
-7709:2:1226
-7710:2:1237
-7711:2:1238
-7712:2:1239
-7713:2:1237
-7714:2:1238
-7715:2:1239
-7716:2:1250
-7717:2:1255
-7718:2:1256
-7719:0:4365
-7720:3:2529
-7721:0:4365
-7722:2:1268
-7723:0:4365
-7724:3:2528
-7725:0:4365
-7726:2:1270
-7727:0:4365
-7728:3:2529
-7729:0:4365
-7730:2:1271
-7731:2:1275
-7732:2:1276
-7733:2:1284
-7734:2:1285
-7735:2:1289
-7736:2:1290
-7737:2:1284
-7738:2:1285
-7739:2:1289
-7740:2:1290
-7741:2:1298
-7742:2:1303
-7743:2:1307
-7744:2:1308
-7745:2:1315
-7746:2:1316
-7747:2:1327
-7748:2:1328
-7749:2:1329
-7750:2:1327
-7751:2:1328
-7752:2:1329
-7753:2:1340
-7754:2:1345
-7755:2:1346
-7756:0:4365
-7757:2:1358
-7758:0:4365
-7759:2:1360
-7760:0:4365
-7761:3:2528
-7762:0:4365
-7763:2:1361
-7764:0:4365
-7765:3:2529
-7766:0:4365
-7767:2:1362
-7768:2:1366
-7769:2:1367
-7770:2:1375
-7771:2:1376
-7772:2:1380
-7773:2:1381
-7774:2:1375
-7775:2:1376
-7776:2:1380
-7777:2:1381
-7778:2:1389
-7779:2:1394
-7780:2:1398
-7781:2:1399
-7782:2:1406
-7783:2:1407
-7784:2:1418
-7785:2:1419
-7786:2:1420
-7787:2:1418
-7788:2:1419
-7789:2:1420
-7790:2:1431
-7791:2:1436
-7792:2:1437
-7793:0:4365
-7794:2:1449
-7795:0:4365
-7796:3:2528
-7797:0:4365
-7798:2:1451
-7799:0:4365
-7800:3:2529
-7801:0:4365
-7802:2:1652
-7803:0:4365
-7804:2:1653
-7805:0:4365
-7806:2:1657
-7807:0:4365
-7808:2:1180
-7809:0:4365
-7810:3:2528
-7811:0:4365
-7812:2:1181
-7813:2:1185
-7814:2:1186
-7815:2:1194
-7816:2:1195
-7817:2:1199
-7818:2:1200
-7819:2:1194
-7820:2:1195
-7821:2:1196
-7822:2:1208
-7823:2:1213
-7824:2:1217
-7825:2:1218
-7826:2:1225
-7827:2:1226
-7828:2:1237
-7829:2:1238
-7830:2:1239
-7831:2:1237
-7832:2:1238
-7833:2:1239
-7834:2:1250
-7835:2:1255
-7836:2:1256
-7837:0:4365
-7838:3:2529
-7839:0:4365
-7840:2:1268
-7841:0:4365
-7842:3:2528
-7843:0:4365
-7844:2:1270
-7845:0:4365
-7846:3:2529
-7847:0:4365
-7848:2:1271
-7849:2:1275
-7850:2:1276
-7851:2:1284
-7852:2:1285
-7853:2:1289
-7854:2:1290
-7855:2:1284
-7856:2:1285
-7857:2:1289
-7858:2:1290
-7859:2:1298
-7860:2:1303
-7861:2:1307
-7862:2:1308
-7863:2:1315
-7864:2:1316
-7865:2:1327
-7866:2:1328
-7867:2:1329
-7868:2:1327
-7869:2:1328
-7870:2:1329
-7871:2:1340
-7872:2:1345
-7873:2:1346
-7874:0:4365
-7875:2:1358
-7876:0:4365
-7877:2:1454
-7878:0:4365
-7879:3:2528
-7880:0:4365
-7881:2:1455
-7882:0:4365
-7883:3:2529
-7884:0:4365
-7885:2:1652
-7886:0:4365
-7887:2:1653
-7888:0:4365
-7889:2:1657
-7890:0:4365
-7891:2:1660
-7892:0:4365
-7893:3:2528
-7894:0:4365
-7895:2:1665
-7896:2:1669
-7897:2:1670
-7898:2:1678
-7899:2:1679
-7900:2:1683
-7901:2:1684
-7902:2:1678
-7903:2:1679
-7904:2:1680
-7905:2:1692
-7906:2:1697
-7907:2:1701
-7908:2:1702
-7909:2:1709
-7910:2:1710
-7911:2:1721
-7912:2:1722
-7913:2:1723
-7914:2:1721
-7915:2:1722
-7916:2:1723
-7917:2:1734
-7918:2:1739
-7919:2:1740
-7920:0:4365
-7921:3:2529
-7922:0:4365
-7923:2:1752
-7924:0:4365
-7925:3:2528
-7926:0:4365
-7927:2:1754
-7928:0:4365
-7929:3:2529
-7930:0:4365
-7931:2:1755
-7932:2:1759
-7933:2:1760
-7934:2:1768
-7935:2:1769
-7936:2:1773
-7937:2:1774
-7938:2:1768
-7939:2:1769
-7940:2:1773
-7941:2:1774
-7942:2:1782
-7943:2:1787
-7944:2:1791
-7945:2:1792
-7946:2:1799
-7947:2:1800
-7948:2:1811
-7949:2:1812
-7950:2:1813
-7951:2:1811
-7952:2:1812
-7953:2:1813
-7954:2:1824
-7955:2:1829
-7956:2:1830
-7957:0:4365
-7958:2:1842
-7959:0:4365
-7960:3:2528
-7961:0:4365
-7962:2:1844
-7963:0:4365
-7964:3:2529
-7965:0:4365
-7966:2:1845
-7967:2:1849
-7968:2:1850
-7969:2:1858
-7970:2:1859
-7971:2:1863
-7972:2:1864
-7973:2:1858
-7974:2:1859
-7975:2:1863
-7976:2:1864
-7977:2:1872
-7978:2:1877
-7979:2:1881
-7980:2:1882
-7981:2:1889
-7982:2:1890
-7983:2:1901
-7984:2:1902
-7985:2:1903
-7986:2:1901
-7987:2:1902
-7988:2:1903
-7989:2:1914
-7990:2:1919
-7991:2:1920
-7992:0:4365
-7993:2:1932
-7994:0:4365
-7995:3:2528
-7996:0:4365
-7997:2:1934
-7998:0:4365
-7999:3:2529
-8000:0:4365
-8001:2:1935
-8002:0:4365
-8003:2:1936
-8004:0:4365
-8005:2:2129
-8006:0:4365
-8007:2:2130
-8008:0:4365
-8009:2:2134
-8010:0:4365
-8011:3:2528
-8012:0:4365
-8013:2:2136
-8014:0:4365
-8015:3:2529
-8016:0:4365
-8017:2:2137
-8018:2:2141
-8019:2:2142
-8020:2:2150
-8021:2:2151
-8022:2:2155
-8023:2:2156
-8024:2:2150
-8025:2:2151
-8026:2:2155
-8027:2:2156
-8028:2:2164
-8029:2:2169
-8030:2:2173
-8031:2:2174
-8032:2:2181
-8033:2:2182
-8034:2:2193
-8035:2:2194
-8036:2:2195
-8037:2:2193
-8038:2:2194
-8039:2:2195
-8040:2:2206
-8041:2:2211
-8042:2:2212
-8043:0:4365
-8044:2:2224
-8045:0:4365
-8046:3:2528
-8047:0:4365
-8048:2:2226
-8049:0:4365
-8050:3:2529
-8051:0:4365
-8052:2:1936
-8053:0:4365
-8054:2:2129
-8055:0:4365
-8056:2:2130
-8057:0:4365
-8058:2:2134
-8059:0:4365
-8060:3:2528
-8061:0:4365
-8062:2:2136
-8063:0:4365
-8064:3:2529
-8065:0:4365
-8066:2:2137
-8067:2:2141
-8068:2:2142
-8069:2:2150
-8070:2:2151
-8071:2:2155
-8072:2:2156
-8073:2:2150
-8074:2:2151
-8075:2:2152
-8076:2:2164
-8077:2:2169
-8078:2:2173
-8079:2:2174
-8080:2:2181
-8081:2:2182
-8082:2:2193
-8083:2:2194
-8084:2:2195
-8085:2:2193
-8086:2:2194
-8087:2:2195
-8088:2:2206
-8089:2:2211
-8090:2:2212
-8091:0:4365
-8092:2:2224
-8093:0:4365
-8094:3:2528
-8095:0:4365
-8096:2:2226
-8097:0:4365
-8098:3:2529
-8099:0:4365
-8100:2:2230
-8101:0:4365
-8102:3:2528
-8103:0:4365
-8104:2:2235
-8105:2:2239
-8106:2:2240
-8107:2:2248
-8108:2:2249
-8109:2:2253
-8110:2:2254
-8111:2:2248
-8112:2:2249
-8113:2:2250
-8114:2:2262
-8115:2:2267
-8116:2:2271
-8117:2:2272
-8118:2:2279
-8119:2:2280
-8120:2:2291
-8121:2:2292
-8122:2:2293
-8123:2:2291
-8124:2:2292
-8125:2:2293
-8126:2:2304
-8127:2:2309
-8128:2:2310
-8129:0:4365
-8130:3:2529
-8131:0:4365
-8132:2:2322
-8133:0:4365
-8134:2:1169
-8135:0:4365
-8136:3:2528
-8137:0:4365
-8138:2:1170
-8139:0:4365
-8140:3:2529
-8141:0:4365
-8142:3:2530
-8143:0:4365
-8144:3:2536
-8145:0:4365
-8146:3:2537
-8147:0:4365
-8148:3:2547
-8149:0:4365
-8150:3:2548
-8151:0:4365
-8152:3:2552
-8153:3:2553
-8154:3:2557
-8155:3:2561
-8156:3:2562
-8157:3:2557
-8158:3:2561
-8159:3:2562
-8160:3:2566
-8161:3:2574
-8162:3:2575
-8163:3:2580
-8164:3:2587
-8165:3:2588
-8166:3:2587
-8167:3:2588
-8168:3:2595
-8169:3:2600
-8170:0:4365
-8171:3:2611
-8172:0:4365
-8173:3:2615
-8174:3:2616
-8175:3:2620
-8176:3:2624
-8177:3:2625
-8178:3:2620
-8179:3:2624
-8180:3:2625
-8181:3:2629
-8182:3:2637
-8183:3:2638
-8184:3:2643
-8185:3:2650
-8186:3:2651
-8187:3:2650
-8188:3:2651
-8189:3:2658
-8190:3:2663
-8191:0:4365
-8192:3:2611
-8193:0:4365
-8194:3:2615
-8195:3:2616
-8196:3:2620
-8197:3:2624
-8198:3:2625
-8199:3:2620
-8200:3:2624
-8201:3:2625
-8202:3:2629
-8203:3:2637
-8204:3:2638
-8205:3:2643
-8206:3:2650
-8207:3:2651
-8208:3:2650
-8209:3:2651
-8210:3:2658
-8211:3:2663
-8212:0:4365
-8213:3:2674
-8214:0:4365
-8215:3:2682
-8216:3:2683
-8217:3:2687
-8218:3:2691
-8219:3:2692
-8220:3:2687
-8221:3:2691
-8222:3:2692
-8223:3:2696
-8224:3:2704
-8225:3:2705
-8226:3:2710
-8227:3:2717
-8228:3:2718
-8229:3:2717
-8230:3:2718
-8231:3:2725
-8232:3:2730
-8233:0:4365
-8234:3:2745
-8235:0:4365
-8236:3:2746
-8237:0:4365
-8238:2:1173
-8239:0:4365
-8240:3:2747
-8241:0:4365
-8242:2:1179
-8243:0:4365
-8244:2:1180
-8245:0:4365
-8246:3:2746
-8247:0:4365
-8248:2:1181
-8249:2:1185
-8250:2:1186
-8251:2:1194
-8252:2:1195
-8253:2:1199
-8254:2:1200
-8255:2:1194
-8256:2:1195
-8257:2:1199
-8258:2:1200
-8259:2:1208
-8260:2:1213
-8261:2:1217
-8262:2:1218
-8263:2:1225
-8264:2:1226
-8265:2:1237
-8266:2:1238
-8267:2:1239
-8268:2:1237
-8269:2:1238
-8270:2:1239
-8271:2:1250
-8272:2:1255
-8273:2:1256
-8274:0:4365
-8275:3:2747
-8276:0:4365
-8277:2:1268
-8278:0:4365
-8279:3:2746
-8280:0:4365
-8281:2:1270
-8282:0:4365
-8283:3:2747
-8284:0:4365
-8285:2:1271
-8286:2:1275
-8287:2:1276
-8288:2:1284
-8289:2:1285
-8290:2:1289
-8291:2:1290
-8292:2:1284
-8293:2:1285
-8294:2:1289
-8295:2:1290
-8296:2:1298
-8297:2:1303
-8298:2:1307
-8299:2:1308
-8300:2:1315
-8301:2:1316
-8302:2:1327
-8303:2:1328
-8304:2:1329
-8305:2:1327
-8306:2:1328
-8307:2:1329
-8308:2:1340
-8309:2:1345
-8310:2:1346
-8311:0:4365
-8312:2:1358
-8313:0:4365
-8314:2:1360
-8315:0:4365
-8316:3:2746
-8317:0:4365
-8318:2:1361
-8319:0:4365
-8320:3:2747
-8321:0:4365
-8322:2:1362
-8323:2:1366
-8324:2:1367
-8325:2:1375
-8326:2:1376
-8327:2:1380
-8328:2:1381
-8329:2:1375
-8330:2:1376
-8331:2:1380
-8332:2:1381
-8333:2:1389
-8334:2:1394
-8335:2:1398
-8336:2:1399
-8337:2:1406
-8338:2:1407
-8339:2:1418
-8340:2:1419
-8341:2:1420
-8342:2:1418
-8343:2:1419
-8344:2:1420
-8345:2:1431
-8346:2:1436
-8347:2:1437
-8348:0:4365
-8349:2:1449
-8350:0:4365
-8351:3:2746
-8352:0:4365
-8353:2:1451
-8354:0:4365
-8355:3:2747
-8356:0:4365
-8357:2:1652
-8358:0:4365
-8359:2:1653
-8360:0:4365
-8361:2:1657
-8362:0:4365
-8363:2:1180
-8364:0:4365
-8365:3:2746
-8366:0:4365
-8367:2:1181
-8368:2:1185
-8369:2:1186
-8370:2:1194
-8371:2:1195
-8372:2:1199
-8373:2:1200
-8374:2:1194
-8375:2:1195
-8376:2:1196
-8377:2:1208
-8378:2:1213
-8379:2:1217
-8380:2:1218
-8381:2:1225
-8382:2:1226
-8383:2:1237
-8384:2:1238
-8385:2:1239
-8386:2:1237
-8387:2:1238
-8388:2:1239
-8389:2:1250
-8390:2:1255
-8391:2:1256
-8392:0:4365
-8393:3:2747
-8394:0:4365
-8395:2:1268
-8396:0:4365
-8397:3:2746
-8398:0:4365
-8399:2:1270
-8400:0:4365
-8401:3:2747
-8402:0:4365
-8403:2:1271
-8404:2:1275
-8405:2:1276
-8406:2:1284
-8407:2:1285
-8408:2:1289
-8409:2:1290
-8410:2:1284
-8411:2:1285
-8412:2:1289
-8413:2:1290
-8414:2:1298
-8415:2:1303
-8416:2:1307
-8417:2:1308
-8418:2:1315
-8419:2:1316
-8420:2:1327
-8421:2:1328
-8422:2:1329
-8423:2:1327
-8424:2:1328
-8425:2:1329
-8426:2:1340
-8427:2:1345
-8428:2:1346
-8429:0:4365
-8430:2:1358
-8431:0:4365
-8432:2:1454
-8433:0:4365
-8434:3:2746
-8435:0:4365
-8436:2:1455
-8437:0:4365
-8438:3:2747
-8439:0:4365
-8440:2:1652
-8441:0:4365
-8442:2:1653
-8443:0:4365
-8444:2:1657
-8445:0:4365
-8446:2:1660
-8447:0:4365
-8448:3:2746
-8449:0:4365
-8450:2:1665
-8451:2:1669
-8452:2:1670
-8453:2:1678
-8454:2:1679
-8455:2:1683
-8456:2:1684
-8457:2:1678
-8458:2:1679
-8459:2:1680
-8460:2:1692
-8461:2:1697
-8462:2:1701
-8463:2:1702
-8464:2:1709
-8465:2:1710
-8466:2:1721
-8467:2:1722
-8468:2:1723
-8469:2:1721
-8470:2:1722
-8471:2:1723
-8472:2:1734
-8473:2:1739
-8474:2:1740
-8475:0:4365
-8476:3:2747
-8477:0:4365
-8478:2:1752
-8479:0:4365
-8480:3:2746
-8481:0:4365
-8482:2:1754
-8483:0:4365
-8484:3:2747
-8485:0:4365
-8486:2:1755
-8487:2:1759
-8488:2:1760
-8489:2:1768
-8490:2:1769
-8491:2:1773
-8492:2:1774
-8493:2:1768
-8494:2:1769
-8495:2:1773
-8496:2:1774
-8497:2:1782
-8498:2:1787
-8499:2:1791
-8500:2:1792
-8501:2:1799
-8502:2:1800
-8503:2:1811
-8504:2:1812
-8505:2:1813
-8506:2:1811
-8507:2:1812
-8508:2:1813
-8509:2:1824
-8510:2:1829
-8511:2:1830
-8512:0:4365
-8513:2:1842
-8514:0:4365
-8515:3:2746
-8516:0:4365
-8517:2:1844
-8518:0:4365
-8519:3:2747
-8520:0:4365
-8521:2:1845
-8522:2:1849
-8523:2:1850
-8524:2:1858
-8525:2:1859
-8526:2:1863
-8527:2:1864
-8528:2:1858
-8529:2:1859
-8530:2:1863
-8531:2:1864
-8532:2:1872
-8533:2:1877
-8534:2:1881
-8535:2:1882
-8536:2:1889
-8537:2:1890
-8538:2:1901
-8539:2:1902
-8540:2:1903
-8541:2:1901
-8542:2:1902
-8543:2:1903
-8544:2:1914
-8545:2:1919
-8546:2:1920
-8547:0:4365
-8548:2:1932
-8549:0:4365
-8550:3:2746
-8551:0:4365
-8552:2:1934
-8553:0:4365
-8554:3:2747
-8555:0:4365
-8556:2:1935
-8557:0:4365
-8558:2:1936
-8559:0:4365
-8560:2:2129
-8561:0:4365
-8562:2:2130
-8563:0:4365
-8564:2:2134
-8565:0:4365
-8566:3:2746
-8567:0:4365
-8568:2:2136
-8569:0:4365
-8570:3:2747
-8571:0:4365
-8572:2:2137
-8573:2:2141
-8574:2:2142
-8575:2:2150
-8576:2:2151
-8577:2:2155
-8578:2:2156
-8579:2:2150
-8580:2:2151
-8581:2:2155
-8582:2:2156
-8583:2:2164
-8584:2:2169
-8585:2:2173
-8586:2:2174
-8587:2:2181
-8588:2:2182
-8589:2:2193
-8590:2:2194
-8591:2:2195
-8592:2:2193
-8593:2:2194
-8594:2:2195
-8595:2:2206
-8596:2:2211
-8597:2:2212
-8598:0:4365
-8599:2:2224
-8600:0:4365
-8601:3:2746
-8602:0:4365
-8603:2:2226
-8604:0:4365
-8605:3:2747
-8606:0:4365
-8607:2:1936
-8608:0:4365
-8609:2:2129
-8610:0:4365
-8611:2:2130
-8612:0:4365
-8613:2:2134
-8614:0:4365
-8615:3:2746
-8616:0:4365
-8617:2:2136
-8618:0:4365
-8619:3:2747
-8620:0:4365
-8621:2:2137
-8622:2:2141
-8623:2:2142
-8624:2:2150
-8625:2:2151
-8626:2:2155
-8627:2:2156
-8628:2:2150
-8629:2:2151
-8630:2:2152
-8631:2:2164
-8632:2:2169
-8633:2:2173
-8634:2:2174
-8635:2:2181
-8636:2:2182
-8637:2:2193
-8638:2:2194
-8639:2:2195
-8640:2:2193
-8641:2:2194
-8642:2:2195
-8643:2:2206
-8644:2:2211
-8645:2:2212
-8646:0:4365
-8647:2:2224
-8648:0:4365
-8649:3:2746
-8650:0:4365
-8651:2:2226
-8652:0:4365
-8653:3:2747
-8654:0:4365
-8655:2:2230
-8656:0:4365
-8657:3:2746
-8658:0:4365
-8659:2:2235
-8660:2:2239
-8661:2:2240
-8662:2:2248
-8663:2:2249
-8664:2:2253
-8665:2:2254
-8666:2:2248
-8667:2:2249
-8668:2:2250
-8669:2:2262
-8670:2:2267
-8671:2:2271
-8672:2:2272
-8673:2:2279
-8674:2:2280
-8675:2:2291
-8676:2:2292
-8677:2:2293
-8678:2:2291
-8679:2:2292
-8680:2:2293
-8681:2:2304
-8682:2:2309
-8683:2:2310
-8684:0:4365
-8685:3:2747
-8686:0:4365
-8687:2:2322
-8688:0:4365
-8689:2:1169
-8690:0:4365
-8691:3:2746
-8692:0:4365
-8693:2:1170
-8694:0:4365
-8695:3:2747
-8696:0:4365
-8697:3:2748
-8698:0:4365
-8699:3:2754
-8700:0:4365
-8701:3:2755
-8702:3:2759
-8703:3:2760
-8704:3:2768
-8705:3:2769
-8706:3:2773
-8707:3:2774
-8708:3:2768
-8709:3:2769
-8710:3:2773
-8711:3:2774
-8712:3:2782
-8713:3:2787
-8714:3:2791
-8715:3:2792
-8716:3:2799
-8717:3:2800
-8718:3:2811
-8719:3:2812
-8720:3:2813
-8721:3:2811
-8722:3:2812
-8723:3:2813
-8724:3:2824
-8725:3:2829
-8726:3:2830
-8727:0:4365
-8728:3:2842
-8729:0:4365
-8730:3:2843
-8731:0:4365
-8732:2:1173
-8733:0:4365
-8734:3:2844
-8735:0:4365
-8736:2:1179
-8737:0:4365
-8738:2:1180
-8739:0:4365
-8740:3:2843
-8741:0:4365
-8742:2:1181
-8743:2:1185
-8744:2:1186
-8745:2:1194
-8746:2:1195
-8747:2:1199
-8748:2:1200
-8749:2:1194
-8750:2:1195
-8751:2:1199
-8752:2:1200
-8753:2:1208
-8754:2:1213
-8755:2:1217
-8756:2:1218
-8757:2:1225
-8758:2:1226
-8759:2:1237
-8760:2:1238
-8761:2:1239
-8762:2:1237
-8763:2:1238
-8764:2:1239
-8765:2:1250
-8766:2:1255
-8767:2:1256
-8768:0:4365
-8769:3:2844
-8770:0:4365
-8771:2:1268
-8772:0:4365
-8773:3:2843
-8774:0:4365
-8775:2:1270
-8776:0:4365
-8777:3:2844
-8778:0:4365
-8779:2:1271
-8780:2:1275
-8781:2:1276
-8782:2:1284
-8783:2:1285
-8784:2:1289
-8785:2:1290
-8786:2:1284
-8787:2:1285
-8788:2:1289
-8789:2:1290
-8790:2:1298
-8791:2:1303
-8792:2:1307
-8793:2:1308
-8794:2:1315
-8795:2:1316
-8796:2:1327
-8797:2:1328
-8798:2:1329
-8799:2:1327
-8800:2:1328
-8801:2:1329
-8802:2:1340
-8803:2:1345
-8804:2:1346
-8805:0:4365
-8806:2:1358
-8807:0:4365
-8808:2:1360
-8809:0:4365
-8810:3:2843
-8811:0:4365
-8812:2:1361
-8813:0:4365
-8814:3:2844
-8815:0:4365
-8816:2:1362
-8817:2:1366
-8818:2:1367
-8819:2:1375
-8820:2:1376
-8821:2:1380
-8822:2:1381
-8823:2:1375
-8824:2:1376
-8825:2:1380
-8826:2:1381
-8827:2:1389
-8828:2:1394
-8829:2:1398
-8830:2:1399
-8831:2:1406
-8832:2:1407
-8833:2:1418
-8834:2:1419
-8835:2:1420
-8836:2:1418
-8837:2:1419
-8838:2:1420
-8839:2:1431
-8840:2:1436
-8841:2:1437
-8842:0:4365
-8843:2:1449
-8844:0:4365
-8845:3:2843
-8846:0:4365
-8847:2:1451
-8848:0:4365
-8849:3:2844
-8850:0:4365
-8851:2:1652
-8852:0:4365
-8853:2:1653
-8854:0:4365
-8855:2:1657
-8856:0:4365
-8857:2:1180
-8858:0:4365
-8859:3:2843
-8860:0:4365
-8861:2:1181
-8862:2:1185
-8863:2:1186
-8864:2:1194
-8865:2:1195
-8866:2:1199
-8867:2:1200
-8868:2:1194
-8869:2:1195
-8870:2:1196
-8871:2:1208
-8872:2:1213
-8873:2:1217
-8874:2:1218
-8875:2:1225
-8876:2:1226
-8877:2:1237
-8878:2:1238
-8879:2:1239
-8880:2:1237
-8881:2:1238
-8882:2:1239
-8883:2:1250
-8884:2:1255
-8885:2:1256
-8886:0:4365
-8887:3:2844
-8888:0:4365
-8889:2:1268
-8890:0:4365
-8891:3:2843
-8892:0:4365
-8893:2:1270
-8894:0:4365
-8895:3:2844
-8896:0:4365
-8897:2:1271
-8898:2:1275
-8899:2:1276
-8900:2:1284
-8901:2:1285
-8902:2:1289
-8903:2:1290
-8904:2:1284
-8905:2:1285
-8906:2:1289
-8907:2:1290
-8908:2:1298
-8909:2:1303
-8910:2:1307
-8911:2:1308
-8912:2:1315
-8913:2:1316
-8914:2:1327
-8915:2:1328
-8916:2:1329
-8917:2:1327
-8918:2:1328
-8919:2:1329
-8920:2:1340
-8921:2:1345
-8922:2:1346
-8923:0:4365
-8924:2:1358
-8925:0:4365
-8926:2:1454
-8927:0:4365
-8928:3:2843
-8929:0:4365
-8930:2:1455
-8931:0:4365
-8932:3:2844
-8933:0:4365
-8934:2:1652
-8935:0:4365
-8936:2:1653
-8937:0:4365
-8938:2:1657
-8939:0:4365
-8940:2:1660
-8941:0:4365
-8942:3:2843
-8943:0:4365
-8944:2:1665
-8945:2:1669
-8946:2:1670
-8947:2:1678
-8948:2:1679
-8949:2:1683
-8950:2:1684
-8951:2:1678
-8952:2:1679
-8953:2:1680
-8954:2:1692
-8955:2:1697
-8956:2:1701
-8957:2:1702
-8958:2:1709
-8959:2:1710
-8960:2:1721
-8961:2:1722
-8962:2:1723
-8963:2:1721
-8964:2:1722
-8965:2:1723
-8966:2:1734
-8967:2:1739
-8968:2:1740
-8969:0:4365
-8970:3:2844
-8971:0:4365
-8972:2:1752
-8973:0:4365
-8974:3:2843
-8975:0:4365
-8976:2:1754
-8977:0:4365
-8978:3:2844
-8979:0:4365
-8980:2:1755
-8981:2:1759
-8982:2:1760
-8983:2:1768
-8984:2:1769
-8985:2:1773
-8986:2:1774
-8987:2:1768
-8988:2:1769
-8989:2:1773
-8990:2:1774
-8991:2:1782
-8992:2:1787
-8993:2:1791
-8994:2:1792
-8995:2:1799
-8996:2:1800
-8997:2:1811
-8998:2:1812
-8999:2:1813
-9000:2:1811
-9001:2:1812
-9002:2:1813
-9003:2:1824
-9004:2:1829
-9005:2:1830
-9006:0:4365
-9007:2:1842
-9008:0:4365
-9009:3:2843
-9010:0:4365
-9011:2:1844
-9012:0:4365
-9013:3:2844
-9014:0:4365
-9015:2:1845
-9016:2:1849
-9017:2:1850
-9018:2:1858
-9019:2:1859
-9020:2:1863
-9021:2:1864
-9022:2:1858
-9023:2:1859
-9024:2:1863
-9025:2:1864
-9026:2:1872
-9027:2:1877
-9028:2:1881
-9029:2:1882
-9030:2:1889
-9031:2:1890
-9032:2:1901
-9033:2:1902
-9034:2:1903
-9035:2:1901
-9036:2:1902
-9037:2:1903
-9038:2:1914
-9039:2:1919
-9040:2:1920
-9041:0:4365
-9042:2:1932
-9043:0:4365
-9044:3:2843
-9045:0:4365
-9046:2:1934
-9047:0:4365
-9048:3:2844
-9049:0:4365
-9050:2:1935
-9051:0:4365
-9052:2:1936
-9053:0:4365
-9054:2:2129
-9055:0:4365
-9056:2:2130
-9057:0:4365
-9058:2:2134
-9059:0:4365
-9060:3:2843
-9061:0:4365
-9062:2:2136
-9063:0:4365
-9064:3:2844
-9065:0:4365
-9066:2:2137
-9067:2:2141
-9068:2:2142
-9069:2:2150
-9070:2:2151
-9071:2:2155
-9072:2:2156
-9073:2:2150
-9074:2:2151
-9075:2:2155
-9076:2:2156
-9077:2:2164
-9078:2:2169
-9079:2:2173
-9080:2:2174
-9081:2:2181
-9082:2:2182
-9083:2:2193
-9084:2:2194
-9085:2:2195
-9086:2:2193
-9087:2:2194
-9088:2:2195
-9089:2:2206
-9090:2:2211
-9091:2:2212
-9092:0:4365
-9093:2:2224
-9094:0:4365
-9095:3:2843
-9096:0:4365
-9097:2:2226
-9098:0:4365
-9099:3:2844
-9100:0:4365
-9101:2:1936
-9102:0:4365
-9103:2:2129
-9104:0:4365
-9105:2:2130
-9106:0:4365
-9107:2:2134
-9108:0:4365
-9109:3:2843
-9110:0:4365
-9111:2:2136
-9112:0:4365
-9113:3:2844
-9114:0:4365
-9115:2:2137
-9116:2:2141
-9117:2:2142
-9118:2:2150
-9119:2:2151
-9120:2:2155
-9121:2:2156
-9122:2:2150
-9123:2:2151
-9124:2:2152
-9125:2:2164
-9126:2:2169
-9127:2:2173
-9128:2:2174
-9129:2:2181
-9130:2:2182
-9131:2:2193
-9132:2:2194
-9133:2:2195
-9134:2:2193
-9135:2:2194
-9136:2:2195
-9137:2:2206
-9138:2:2211
-9139:2:2212
-9140:0:4365
-9141:2:2224
-9142:0:4365
-9143:3:2843
-9144:0:4365
-9145:2:2226
-9146:0:4365
-9147:3:2844
-9148:0:4365
-9149:2:2230
-9150:0:4365
-9151:3:2843
-9152:0:4365
-9153:2:2235
-9154:2:2239
-9155:2:2240
-9156:2:2248
-9157:2:2249
-9158:2:2253
-9159:2:2254
-9160:2:2248
-9161:2:2249
-9162:2:2250
-9163:2:2262
-9164:2:2267
-9165:2:2271
-9166:2:2272
-9167:2:2279
-9168:2:2280
-9169:2:2291
-9170:2:2292
-9171:2:2293
-9172:2:2291
-9173:2:2292
-9174:2:2293
-9175:2:2304
-9176:2:2309
-9177:2:2310
-9178:0:4365
-9179:3:2844
-9180:0:4365
-9181:2:2322
-9182:0:4365
-9183:2:1169
-9184:0:4365
-9185:3:2843
-9186:0:4365
-9187:2:1170
-9188:0:4365
-9189:3:2844
-9190:0:4365
-9191:3:2845
-9192:0:4365
-9193:3:2851
-9194:0:4365
-9195:3:2854
-9196:3:2855
-9197:3:2867
-9198:3:2868
-9199:3:2872
-9200:3:2873
-9201:3:2867
-9202:3:2868
-9203:3:2872
-9204:3:2873
-9205:3:2881
-9206:3:2886
-9207:3:2890
-9208:3:2891
-9209:3:2898
-9210:3:2899
-9211:3:2910
-9212:3:2911
-9213:3:2912
-9214:3:2910
-9215:3:2911
-9216:3:2912
-9217:3:2923
-9218:3:2928
-9219:3:2929
-9220:0:4365
-9221:3:2941
-9222:0:4365
-9223:3:2942
-9224:0:4365
-9225:2:1173
-9226:0:4365
-9227:3:2943
-9228:0:4365
-9229:2:1179
-9230:0:4365
-9231:2:1180
-9232:0:4365
-9233:3:2942
-9234:0:4365
-9235:2:1181
-9236:2:1185
-9237:2:1186
-9238:2:1194
-9239:2:1195
-9240:2:1199
-9241:2:1200
-9242:2:1194
-9243:2:1195
-9244:2:1199
-9245:2:1200
-9246:2:1208
-9247:2:1213
-9248:2:1217
-9249:2:1218
-9250:2:1225
-9251:2:1226
-9252:2:1237
-9253:2:1238
-9254:2:1239
-9255:2:1237
-9256:2:1238
-9257:2:1239
-9258:2:1250
-9259:2:1255
-9260:2:1256
-9261:0:4365
-9262:3:2943
-9263:0:4365
-9264:2:1268
-9265:0:4365
-9266:3:2942
-9267:0:4365
-9268:2:1270
-9269:0:4365
-9270:3:2943
-9271:0:4365
-9272:2:1271
-9273:2:1275
-9274:2:1276
-9275:2:1284
-9276:2:1285
-9277:2:1289
-9278:2:1290
-9279:2:1284
-9280:2:1285
-9281:2:1289
-9282:2:1290
-9283:2:1298
-9284:2:1303
-9285:2:1307
-9286:2:1308
-9287:2:1315
-9288:2:1316
-9289:2:1327
-9290:2:1328
-9291:2:1329
-9292:2:1327
-9293:2:1328
-9294:2:1329
-9295:2:1340
-9296:2:1345
-9297:2:1346
-9298:0:4365
-9299:2:1358
-9300:0:4365
-9301:2:1360
-9302:0:4365
-9303:3:2942
-9304:0:4365
-9305:2:1361
-9306:0:4365
-9307:3:2943
-9308:0:4365
-9309:2:1362
-9310:2:1366
-9311:2:1367
-9312:2:1375
-9313:2:1376
-9314:2:1380
-9315:2:1381
-9316:2:1375
-9317:2:1376
-9318:2:1380
-9319:2:1381
-9320:2:1389
-9321:2:1394
-9322:2:1398
-9323:2:1399
-9324:2:1406
-9325:2:1407
-9326:2:1418
-9327:2:1419
-9328:2:1420
-9329:2:1418
-9330:2:1419
-9331:2:1420
-9332:2:1431
-9333:2:1436
-9334:2:1437
-9335:0:4365
-9336:2:1449
-9337:0:4365
-9338:3:2942
-9339:0:4365
-9340:2:1451
-9341:0:4365
-9342:3:2943
-9343:0:4365
-9344:2:1652
-9345:0:4365
-9346:2:1653
-9347:0:4365
-9348:2:1657
-9349:0:4365
-9350:2:1180
-9351:0:4365
-9352:3:2942
-9353:0:4365
-9354:2:1181
-9355:2:1185
-9356:2:1186
-9357:2:1194
-9358:2:1195
-9359:2:1199
-9360:2:1200
-9361:2:1194
-9362:2:1195
-9363:2:1196
-9364:2:1208
-9365:2:1213
-9366:2:1217
-9367:2:1218
-9368:2:1225
-9369:2:1226
-9370:2:1237
-9371:2:1238
-9372:2:1239
-9373:2:1237
-9374:2:1238
-9375:2:1239
-9376:2:1250
-9377:2:1255
-9378:2:1256
-9379:0:4365
-9380:3:2943
-9381:0:4365
-9382:2:1268
-9383:0:4365
-9384:3:2942
-9385:0:4365
-9386:2:1270
-9387:0:4365
-9388:3:2943
-9389:0:4365
-9390:2:1271
-9391:2:1275
-9392:2:1276
-9393:2:1284
-9394:2:1285
-9395:2:1289
-9396:2:1290
-9397:2:1284
-9398:2:1285
-9399:2:1289
-9400:2:1290
-9401:2:1298
-9402:2:1303
-9403:2:1307
-9404:2:1308
-9405:2:1315
-9406:2:1316
-9407:2:1327
-9408:2:1328
-9409:2:1329
-9410:2:1327
-9411:2:1328
-9412:2:1329
-9413:2:1340
-9414:2:1345
-9415:2:1346
-9416:0:4365
-9417:2:1358
-9418:0:4365
-9419:2:1454
-9420:0:4365
-9421:3:2942
-9422:0:4365
-9423:2:1455
-9424:0:4365
-9425:3:2943
-9426:0:4365
-9427:2:1652
-9428:0:4365
-9429:2:1653
-9430:0:4365
-9431:2:1657
-9432:0:4365
-9433:2:1660
-9434:0:4365
-9435:3:2942
-9436:0:4365
-9437:2:1665
-9438:2:1669
-9439:2:1670
-9440:2:1678
-9441:2:1679
-9442:2:1683
-9443:2:1684
-9444:2:1678
-9445:2:1679
-9446:2:1680
-9447:2:1692
-9448:2:1697
-9449:2:1701
-9450:2:1702
-9451:2:1709
-9452:2:1710
-9453:2:1721
-9454:2:1722
-9455:2:1723
-9456:2:1721
-9457:2:1722
-9458:2:1723
-9459:2:1734
-9460:2:1739
-9461:2:1740
-9462:0:4365
-9463:3:2943
-9464:0:4365
-9465:2:1752
-9466:0:4365
-9467:3:2942
-9468:0:4365
-9469:2:1754
-9470:0:4365
-9471:3:2943
-9472:0:4365
-9473:2:1755
-9474:2:1759
-9475:2:1760
-9476:2:1768
-9477:2:1769
-9478:2:1773
-9479:2:1774
-9480:2:1768
-9481:2:1769
-9482:2:1773
-9483:2:1774
-9484:2:1782
-9485:2:1787
-9486:2:1791
-9487:2:1792
-9488:2:1799
-9489:2:1800
-9490:2:1811
-9491:2:1812
-9492:2:1813
-9493:2:1811
-9494:2:1812
-9495:2:1813
-9496:2:1824
-9497:2:1829
-9498:2:1830
-9499:0:4365
-9500:2:1842
-9501:0:4365
-9502:3:2942
-9503:0:4365
-9504:2:1844
-9505:0:4365
-9506:3:2943
-9507:0:4365
-9508:2:1845
-9509:2:1849
-9510:2:1850
-9511:2:1858
-9512:2:1859
-9513:2:1863
-9514:2:1864
-9515:2:1858
-9516:2:1859
-9517:2:1863
-9518:2:1864
-9519:2:1872
-9520:2:1877
-9521:2:1881
-9522:2:1882
-9523:2:1889
-9524:2:1890
-9525:2:1901
-9526:2:1902
-9527:2:1903
-9528:2:1901
-9529:2:1902
-9530:2:1903
-9531:2:1914
-9532:2:1919
-9533:2:1920
-9534:0:4365
-9535:2:1932
-9536:0:4365
-9537:3:2942
-9538:0:4365
-9539:2:1934
-9540:0:4365
-9541:3:2943
-9542:0:4365
-9543:2:1935
-9544:0:4365
-9545:2:1936
-9546:0:4365
-9547:2:2129
-9548:0:4365
-9549:2:2130
-9550:0:4365
-9551:2:2134
-9552:0:4365
-9553:3:2942
-9554:0:4365
-9555:2:2136
-9556:0:4365
-9557:3:2943
-9558:0:4365
-9559:2:2137
-9560:2:2141
-9561:2:2142
-9562:2:2150
-9563:2:2151
-9564:2:2155
-9565:2:2156
-9566:2:2150
-9567:2:2151
-9568:2:2155
-9569:2:2156
-9570:2:2164
-9571:2:2169
-9572:2:2173
-9573:2:2174
-9574:2:2181
-9575:2:2182
-9576:2:2193
-9577:2:2194
-9578:2:2195
-9579:2:2193
-9580:2:2194
-9581:2:2195
-9582:2:2206
-9583:2:2211
-9584:2:2212
-9585:0:4365
-9586:2:2224
-9587:0:4365
-9588:3:2942
-9589:0:4365
-9590:2:2226
-9591:0:4365
-9592:3:2943
-9593:0:4365
-9594:2:1936
-9595:0:4365
-9596:2:2129
-9597:0:4365
-9598:2:2130
-9599:0:4365
-9600:2:2134
-9601:0:4365
-9602:3:2942
-9603:0:4365
-9604:2:2136
-9605:0:4365
-9606:3:2943
-9607:0:4365
-9608:2:2137
-9609:2:2141
-9610:2:2142
-9611:2:2150
-9612:2:2151
-9613:2:2155
-9614:2:2156
-9615:2:2150
-9616:2:2151
-9617:2:2152
-9618:2:2164
-9619:2:2169
-9620:2:2173
-9621:2:2174
-9622:2:2181
-9623:2:2182
-9624:2:2193
-9625:2:2194
-9626:2:2195
-9627:2:2193
-9628:2:2194
-9629:2:2195
-9630:2:2206
-9631:2:2211
-9632:2:2212
-9633:0:4365
-9634:2:2224
-9635:0:4365
-9636:3:2942
-9637:0:4365
-9638:2:2226
-9639:0:4365
-9640:3:2943
-9641:0:4365
-9642:2:2230
-9643:0:4365
-9644:3:2942
-9645:0:4365
-9646:2:2235
-9647:2:2239
-9648:2:2240
-9649:2:2248
-9650:2:2249
-9651:2:2253
-9652:2:2254
-9653:2:2248
-9654:2:2249
-9655:2:2250
-9656:2:2262
-9657:2:2267
-9658:2:2271
-9659:2:2272
-9660:2:2279
-9661:2:2280
-9662:2:2291
-9663:2:2292
-9664:2:2293
-9665:2:2291
-9666:2:2292
-9667:2:2293
-9668:2:2304
-9669:2:2309
-9670:2:2310
-9671:0:4365
-9672:3:2943
-9673:0:4365
-9674:2:2322
-9675:0:4365
-9676:2:1169
-9677:0:4365
-9678:3:2942
-9679:0:4365
-9680:2:1170
-9681:0:4365
-9682:3:2943
-9683:0:4365
-9684:3:2944
-9685:0:4365
-9686:3:2950
-9687:0:4365
-9688:3:2951
-9689:0:4365
-9690:3:2952
-9691:0:4365
-9692:3:2953
-9693:0:4365
-9694:3:2954
-9695:3:2958
-9696:3:2959
-9697:3:2967
-9698:3:2968
-9699:3:2972
-9700:3:2973
-9701:3:2967
-9702:3:2968
-9703:3:2972
-9704:3:2973
-9705:3:2981
-9706:3:2986
-9707:3:2990
-9708:3:2991
-9709:3:2998
-9710:3:2999
-9711:3:3010
-9712:3:3011
-9713:3:3012
-9714:3:3010
-9715:3:3011
-9716:3:3012
-9717:3:3023
-9718:3:3028
-9719:3:3029
-9720:0:4365
-9721:3:3041
-9722:0:4365
-9723:3:3042
-9724:0:4365
-9725:2:1173
-9726:0:4365
-9727:3:3043
-9728:0:4365
-9729:2:1179
-9730:0:4365
-9731:2:1180
-9732:0:4365
-9733:3:3042
-9734:0:4365
-9735:2:1181
-9736:2:1185
-9737:2:1186
-9738:2:1194
-9739:2:1195
-9740:2:1199
-9741:2:1200
-9742:2:1194
-9743:2:1195
-9744:2:1199
-9745:2:1200
-9746:2:1208
-9747:2:1213
-9748:2:1217
-9749:2:1218
-9750:2:1225
-9751:2:1226
-9752:2:1237
-9753:2:1238
-9754:2:1239
-9755:2:1237
-9756:2:1238
-9757:2:1239
-9758:2:1250
-9759:2:1255
-9760:2:1256
-9761:0:4365
-9762:3:3043
-9763:0:4365
-9764:2:1268
-9765:0:4365
-9766:3:3042
-9767:0:4365
-9768:2:1270
-9769:0:4365
-9770:3:3043
-9771:0:4365
-9772:2:1271
-9773:2:1275
-9774:2:1276
-9775:2:1284
-9776:2:1285
-9777:2:1289
-9778:2:1290
-9779:2:1284
-9780:2:1285
-9781:2:1289
-9782:2:1290
-9783:2:1298
-9784:2:1303
-9785:2:1307
-9786:2:1308
-9787:2:1315
-9788:2:1316
-9789:2:1327
-9790:2:1328
-9791:2:1329
-9792:2:1327
-9793:2:1328
-9794:2:1329
-9795:2:1340
-9796:2:1345
-9797:2:1346
-9798:0:4365
-9799:2:1358
-9800:0:4365
-9801:2:1360
-9802:0:4365
-9803:3:3042
-9804:0:4365
-9805:2:1361
-9806:0:4365
-9807:3:3043
-9808:0:4365
-9809:2:1362
-9810:2:1366
-9811:2:1367
-9812:2:1375
-9813:2:1376
-9814:2:1380
-9815:2:1381
-9816:2:1375
-9817:2:1376
-9818:2:1380
-9819:2:1381
-9820:2:1389
-9821:2:1394
-9822:2:1398
-9823:2:1399
-9824:2:1406
-9825:2:1407
-9826:2:1418
-9827:2:1419
-9828:2:1420
-9829:2:1418
-9830:2:1419
-9831:2:1420
-9832:2:1431
-9833:2:1436
-9834:2:1437
-9835:0:4365
-9836:2:1449
-9837:0:4365
-9838:3:3042
-9839:0:4365
-9840:2:1451
-9841:0:4365
-9842:3:3043
-9843:0:4365
-9844:2:1652
-9845:0:4365
-9846:2:1653
-9847:0:4365
-9848:2:1657
-9849:0:4365
-9850:2:1180
-9851:0:4365
-9852:3:3042
-9853:0:4365
-9854:2:1181
-9855:2:1185
-9856:2:1186
-9857:2:1194
-9858:2:1195
-9859:2:1199
-9860:2:1200
-9861:2:1194
-9862:2:1195
-9863:2:1196
-9864:2:1208
-9865:2:1213
-9866:2:1217
-9867:2:1218
-9868:2:1225
-9869:2:1226
-9870:2:1237
-9871:2:1238
-9872:2:1239
-9873:2:1237
-9874:2:1238
-9875:2:1239
-9876:2:1250
-9877:2:1255
-9878:2:1256
-9879:0:4365
-9880:3:3043
-9881:0:4365
-9882:2:1268
-9883:0:4365
-9884:3:3042
-9885:0:4365
-9886:2:1270
-9887:0:4365
-9888:3:3043
-9889:0:4365
-9890:2:1271
-9891:2:1275
-9892:2:1276
-9893:2:1284
-9894:2:1285
-9895:2:1289
-9896:2:1290
-9897:2:1284
-9898:2:1285
-9899:2:1289
-9900:2:1290
-9901:2:1298
-9902:2:1303
-9903:2:1307
-9904:2:1308
-9905:2:1315
-9906:2:1316
-9907:2:1327
-9908:2:1328
-9909:2:1329
-9910:2:1327
-9911:2:1328
-9912:2:1329
-9913:2:1340
-9914:2:1345
-9915:2:1346
-9916:0:4365
-9917:2:1358
-9918:0:4365
-9919:2:1454
-9920:0:4365
-9921:3:3042
-9922:0:4365
-9923:2:1455
-9924:0:4365
-9925:3:3043
-9926:0:4365
-9927:2:1652
-9928:0:4365
-9929:2:1653
-9930:0:4365
-9931:2:1657
-9932:0:4365
-9933:2:1660
-9934:0:4365
-9935:3:3042
-9936:0:4365
-9937:2:1665
-9938:2:1669
-9939:2:1670
-9940:2:1678
-9941:2:1679
-9942:2:1683
-9943:2:1684
-9944:2:1678
-9945:2:1679
-9946:2:1680
-9947:2:1692
-9948:2:1697
-9949:2:1701
-9950:2:1702
-9951:2:1709
-9952:2:1710
-9953:2:1721
-9954:2:1722
-9955:2:1723
-9956:2:1721
-9957:2:1722
-9958:2:1723
-9959:2:1734
-9960:2:1739
-9961:2:1740
-9962:0:4365
-9963:3:3043
-9964:0:4365
-9965:2:1752
-9966:0:4365
-9967:3:3042
-9968:0:4365
-9969:2:1754
-9970:0:4365
-9971:3:3043
-9972:0:4365
-9973:2:1755
-9974:2:1759
-9975:2:1760
-9976:2:1768
-9977:2:1769
-9978:2:1773
-9979:2:1774
-9980:2:1768
-9981:2:1769
-9982:2:1773
-9983:2:1774
-9984:2:1782
-9985:2:1787
-9986:2:1791
-9987:2:1792
-9988:2:1799
-9989:2:1800
-9990:2:1811
-9991:2:1812
-9992:2:1813
-9993:2:1811
-9994:2:1812
-9995:2:1813
-9996:2:1824
-9997:2:1829
-9998:2:1830
-9999:0:4365
-10000:2:1842
-10001:0:4365
-10002:3:3042
-10003:0:4365
-10004:2:1844
-10005:0:4365
-10006:3:3043
-10007:0:4365
-10008:2:1845
-10009:2:1849
-10010:2:1850
-10011:2:1858
-10012:2:1859
-10013:2:1863
-10014:2:1864
-10015:2:1858
-10016:2:1859
-10017:2:1863
-10018:2:1864
-10019:2:1872
-10020:2:1877
-10021:2:1881
-10022:2:1882
-10023:2:1889
-10024:2:1890
-10025:2:1901
-10026:2:1902
-10027:2:1903
-10028:2:1901
-10029:2:1902
-10030:2:1903
-10031:2:1914
-10032:2:1919
-10033:2:1920
-10034:0:4365
-10035:2:1932
-10036:0:4365
-10037:3:3042
-10038:0:4365
-10039:2:1934
-10040:0:4365
-10041:3:3043
-10042:0:4365
-10043:2:1935
-10044:0:4365
-10045:2:1936
-10046:0:4365
-10047:2:2129
-10048:0:4365
-10049:2:2130
-10050:0:4365
-10051:2:2134
-10052:0:4365
-10053:3:3042
-10054:0:4365
-10055:2:2136
-10056:0:4365
-10057:3:3043
-10058:0:4365
-10059:2:2137
-10060:2:2141
-10061:2:2142
-10062:2:2150
-10063:2:2151
-10064:2:2155
-10065:2:2156
-10066:2:2150
-10067:2:2151
-10068:2:2155
-10069:2:2156
-10070:2:2164
-10071:2:2169
-10072:2:2173
-10073:2:2174
-10074:2:2181
-10075:2:2182
-10076:2:2193
-10077:2:2194
-10078:2:2195
-10079:2:2193
-10080:2:2194
-10081:2:2195
-10082:2:2206
-10083:2:2211
-10084:2:2212
-10085:0:4365
-10086:2:2224
-10087:0:4365
-10088:3:3042
-10089:0:4365
-10090:2:2226
-10091:0:4365
-10092:3:3043
-10093:0:4365
-10094:2:1936
-10095:0:4365
-10096:2:2129
-10097:0:4365
-10098:2:2130
-10099:0:4365
-10100:2:2134
-10101:0:4365
-10102:3:3042
-10103:0:4365
-10104:2:2136
-10105:0:4365
-10106:3:3043
-10107:0:4365
-10108:2:2137
-10109:2:2141
-10110:2:2142
-10111:2:2150
-10112:2:2151
-10113:2:2155
-10114:2:2156
-10115:2:2150
-10116:2:2151
-10117:2:2152
-10118:2:2164
-10119:2:2169
-10120:2:2173
-10121:2:2174
-10122:2:2181
-10123:2:2182
-10124:2:2193
-10125:2:2194
-10126:2:2195
-10127:2:2193
-10128:2:2194
-10129:2:2195
-10130:2:2206
-10131:2:2211
-10132:2:2212
-10133:0:4365
-10134:2:2224
-10135:0:4365
-10136:3:3042
-10137:0:4365
-10138:2:2226
-10139:0:4365
-10140:3:3043
-10141:0:4365
-10142:2:2230
-10143:0:4365
-10144:3:3042
-10145:0:4365
-10146:2:2235
-10147:2:2239
-10148:2:2240
-10149:2:2248
-10150:2:2249
-10151:2:2253
-10152:2:2254
-10153:2:2248
-10154:2:2249
-10155:2:2250
-10156:2:2262
-10157:2:2267
-10158:2:2271
-10159:2:2272
-10160:2:2279
-10161:2:2280
-10162:2:2291
-10163:2:2292
-10164:2:2293
-10165:2:2291
-10166:2:2292
-10167:2:2293
-10168:2:2304
-10169:2:2309
-10170:2:2310
-10171:0:4365
-10172:3:3043
-10173:0:4365
-10174:2:2322
-10175:0:4365
-10176:2:1169
-10177:0:4365
-10178:3:3042
-10179:0:4365
-10180:2:1170
-10181:0:4365
-10182:3:3043
-10183:0:4365
-10184:3:3044
-10185:0:4365
-10186:3:3257
-10187:0:4365
-10188:3:3265
-10189:0:4365
-10190:3:3266
-10191:3:3270
-10192:3:3271
-10193:3:3279
-10194:3:3280
-10195:3:3284
-10196:3:3285
-10197:3:3279
-10198:3:3280
-10199:3:3284
-10200:3:3285
-10201:3:3293
-10202:3:3298
-10203:3:3302
-10204:3:3303
-10205:3:3310
-10206:3:3311
-10207:3:3322
-10208:3:3323
-10209:3:3324
-10210:3:3322
-10211:3:3323
-10212:3:3324
-10213:3:3335
-10214:3:3340
-10215:3:3341
-10216:0:4365
-10217:3:3353
-10218:0:4365
-10219:3:3354
-10220:0:4365
-10221:2:1173
-10222:0:4365
-10223:3:3355
-10224:0:4365
-10225:2:1179
-10226:0:4365
-10227:2:1180
-10228:0:4365
-10229:3:3354
-10230:0:4365
-10231:2:1181
-10232:2:1185
-10233:2:1186
-10234:2:1194
-10235:2:1195
-10236:2:1199
-10237:2:1200
-10238:2:1194
-10239:2:1195
-10240:2:1199
-10241:2:1200
-10242:2:1208
-10243:2:1213
-10244:2:1217
-10245:2:1218
-10246:2:1225
-10247:2:1226
-10248:2:1237
-10249:2:1238
-10250:2:1239
-10251:2:1237
-10252:2:1238
-10253:2:1239
-10254:2:1250
-10255:2:1255
-10256:2:1256
-10257:0:4365
-10258:3:3355
-10259:0:4365
-10260:2:1268
-10261:0:4365
-10262:3:3354
-10263:0:4365
-10264:2:1270
-10265:0:4365
-10266:3:3355
-10267:0:4365
-10268:2:1271
-10269:2:1275
-10270:2:1276
-10271:2:1284
-10272:2:1285
-10273:2:1289
-10274:2:1290
-10275:2:1284
-10276:2:1285
-10277:2:1289
-10278:2:1290
-10279:2:1298
-10280:2:1303
-10281:2:1307
-10282:2:1308
-10283:2:1315
-10284:2:1316
-10285:2:1327
-10286:2:1328
-10287:2:1329
-10288:2:1327
-10289:2:1328
-10290:2:1329
-10291:2:1340
-10292:2:1345
-10293:2:1346
-10294:0:4365
-10295:2:1358
-10296:0:4365
-10297:2:1360
-10298:0:4365
-10299:3:3354
-10300:0:4365
-10301:2:1361
-10302:0:4365
-10303:3:3355
-10304:0:4365
-10305:2:1362
-10306:2:1366
-10307:2:1367
-10308:2:1375
-10309:2:1376
-10310:2:1380
-10311:2:1381
-10312:2:1375
-10313:2:1376
-10314:2:1380
-10315:2:1381
-10316:2:1389
-10317:2:1394
-10318:2:1398
-10319:2:1399
-10320:2:1406
-10321:2:1407
-10322:2:1418
-10323:2:1419
-10324:2:1420
-10325:2:1418
-10326:2:1419
-10327:2:1420
-10328:2:1431
-10329:2:1436
-10330:2:1437
-10331:0:4365
-10332:2:1449
-10333:0:4365
-10334:3:3354
-10335:0:4365
-10336:2:1451
-10337:0:4365
-10338:3:3355
-10339:0:4365
-10340:2:1652
-10341:0:4365
-10342:2:1653
-10343:0:4365
-10344:2:1657
-10345:0:4365
-10346:2:1180
-10347:0:4365
-10348:3:3354
-10349:0:4365
-10350:2:1181
-10351:2:1185
-10352:2:1186
-10353:2:1194
-10354:2:1195
-10355:2:1199
-10356:2:1200
-10357:2:1194
-10358:2:1195
-10359:2:1196
-10360:2:1208
-10361:2:1213
-10362:2:1217
-10363:2:1218
-10364:2:1225
-10365:2:1226
-10366:2:1237
-10367:2:1238
-10368:2:1239
-10369:2:1237
-10370:2:1238
-10371:2:1239
-10372:2:1250
-10373:2:1255
-10374:2:1256
-10375:0:4365
-10376:3:3355
-10377:0:4365
-10378:2:1268
-10379:0:4365
-10380:3:3354
-10381:0:4365
-10382:2:1270
-10383:0:4365
-10384:3:3355
-10385:0:4365
-10386:2:1271
-10387:2:1275
-10388:2:1276
-10389:2:1284
-10390:2:1285
-10391:2:1289
-10392:2:1290
-10393:2:1284
-10394:2:1285
-10395:2:1289
-10396:2:1290
-10397:2:1298
-10398:2:1303
-10399:2:1307
-10400:2:1308
-10401:2:1315
-10402:2:1316
-10403:2:1327
-10404:2:1328
-10405:2:1329
-10406:2:1327
-10407:2:1328
-10408:2:1329
-10409:2:1340
-10410:2:1345
-10411:2:1346
-10412:0:4365
-10413:2:1358
-10414:0:4365
-10415:2:1454
-10416:0:4365
-10417:3:3354
-10418:0:4365
-10419:2:1455
-10420:0:4365
-10421:3:3355
-10422:0:4365
-10423:2:1652
-10424:0:4365
-10425:2:1653
-10426:0:4365
-10427:2:1657
-10428:0:4365
-10429:2:1660
-10430:0:4365
-10431:3:3354
-10432:0:4365
-10433:2:1665
-10434:2:1669
-10435:2:1670
-10436:2:1678
-10437:2:1679
-10438:2:1683
-10439:2:1684
-10440:2:1678
-10441:2:1679
-10442:2:1680
-10443:2:1692
-10444:2:1697
-10445:2:1701
-10446:2:1702
-10447:2:1709
-10448:2:1710
-10449:2:1721
-10450:2:1722
-10451:2:1723
-10452:2:1721
-10453:2:1722
-10454:2:1723
-10455:2:1734
-10456:2:1739
-10457:2:1740
-10458:0:4365
-10459:3:3355
-10460:0:4365
-10461:2:1752
-10462:0:4365
-10463:3:3354
-10464:0:4365
-10465:2:1754
-10466:0:4365
-10467:3:3355
-10468:0:4365
-10469:2:1755
-10470:2:1759
-10471:2:1760
-10472:2:1768
-10473:2:1769
-10474:2:1773
-10475:2:1774
-10476:2:1768
-10477:2:1769
-10478:2:1773
-10479:2:1774
-10480:2:1782
-10481:2:1787
-10482:2:1791
-10483:2:1792
-10484:2:1799
-10485:2:1800
-10486:2:1811
-10487:2:1812
-10488:2:1813
-10489:2:1811
-10490:2:1812
-10491:2:1813
-10492:2:1824
-10493:2:1829
-10494:2:1830
-10495:0:4365
-10496:2:1842
-10497:0:4365
-10498:3:3354
-10499:0:4365
-10500:2:1844
-10501:0:4365
-10502:3:3355
-10503:0:4365
-10504:2:1845
-10505:2:1849
-10506:2:1850
-10507:2:1858
-10508:2:1859
-10509:2:1863
-10510:2:1864
-10511:2:1858
-10512:2:1859
-10513:2:1863
-10514:2:1864
-10515:2:1872
-10516:2:1877
-10517:2:1881
-10518:2:1882
-10519:2:1889
-10520:2:1890
-10521:2:1901
-10522:2:1902
-10523:2:1903
-10524:2:1901
-10525:2:1902
-10526:2:1903
-10527:2:1914
-10528:2:1919
-10529:2:1920
-10530:0:4365
-10531:2:1932
-10532:0:4365
-10533:3:3354
-10534:0:4365
-10535:2:1934
-10536:0:4365
-10537:3:3355
-10538:0:4365
-10539:2:1935
-10540:0:4365
-10541:2:1936
-10542:0:4365
-10543:2:2129
-10544:0:4365
-10545:2:2130
-10546:0:4365
-10547:2:2134
-10548:0:4365
-10549:3:3354
-10550:0:4365
-10551:2:2136
-10552:0:4365
-10553:3:3355
-10554:0:4365
-10555:2:2137
-10556:2:2141
-10557:2:2142
-10558:2:2150
-10559:2:2151
-10560:2:2155
-10561:2:2156
-10562:2:2150
-10563:2:2151
-10564:2:2155
-10565:2:2156
-10566:2:2164
-10567:2:2169
-10568:2:2173
-10569:2:2174
-10570:2:2181
-10571:2:2182
-10572:2:2193
-10573:2:2194
-10574:2:2195
-10575:2:2193
-10576:2:2194
-10577:2:2195
-10578:2:2206
-10579:2:2211
-10580:2:2212
-10581:0:4365
-10582:2:2224
-10583:0:4365
-10584:3:3354
-10585:0:4365
-10586:2:2226
-10587:0:4365
-10588:3:3355
-10589:0:4365
-10590:2:1936
-10591:0:4365
-10592:2:2129
-10593:0:4365
-10594:2:2130
-10595:0:4365
-10596:2:2134
-10597:0:4365
-10598:3:3354
-10599:0:4365
-10600:2:2136
-10601:0:4365
-10602:3:3355
-10603:0:4365
-10604:2:2137
-10605:2:2141
-10606:2:2142
-10607:2:2150
-10608:2:2151
-10609:2:2155
-10610:2:2156
-10611:2:2150
-10612:2:2151
-10613:2:2152
-10614:2:2164
-10615:2:2169
-10616:2:2173
-10617:2:2174
-10618:2:2181
-10619:2:2182
-10620:2:2193
-10621:2:2194
-10622:2:2195
-10623:2:2193
-10624:2:2194
-10625:2:2195
-10626:2:2206
-10627:2:2211
-10628:2:2212
-10629:0:4365
-10630:2:2224
-10631:0:4365
-10632:3:3354
-10633:0:4365
-10634:2:2226
-10635:0:4365
-10636:3:3355
-10637:0:4365
-10638:2:2230
-10639:0:4365
-10640:3:3354
-10641:0:4365
-10642:2:2235
-10643:2:2239
-10644:2:2240
-10645:2:2248
-10646:2:2249
-10647:2:2253
-10648:2:2254
-10649:2:2248
-10650:2:2249
-10651:2:2250
-10652:2:2262
-10653:2:2267
-10654:2:2271
-10655:2:2272
-10656:2:2279
-10657:2:2280
-10658:2:2291
-10659:2:2292
-10660:2:2293
-10661:2:2291
-10662:2:2292
-10663:2:2293
-10664:2:2304
-10665:2:2309
-10666:2:2310
-10667:0:4365
-10668:3:3355
-10669:0:4365
-10670:2:2322
-10671:0:4365
-10672:2:1169
-10673:0:4365
-10674:3:3354
-10675:0:4365
-10676:2:1170
-10677:0:4365
-10678:3:3355
-10679:0:4365
-10680:3:3356
-10681:0:4365
-10682:3:3366
-10683:0:4365
-10684:3:2951
-10685:0:4365
-10686:3:2952
-10687:0:4365
-10688:3:2953
-10689:0:4365
-10690:3:2954
-10691:3:2958
-10692:3:2959
-10693:3:2967
-10694:3:2968
-10695:3:2972
-10696:3:2973
-10697:3:2967
-10698:3:2968
-10699:3:2972
-10700:3:2973
-10701:3:2981
-10702:3:2986
-10703:3:2990
-10704:3:2991
-10705:3:2998
-10706:3:2999
-10707:3:3010
-10708:3:3011
-10709:3:3012
-10710:3:3010
-10711:3:3011
-10712:3:3012
-10713:3:3023
-10714:3:3028
-10715:3:3029
-10716:0:4365
-10717:3:3041
-10718:0:4365
-10719:3:3042
-10720:0:4365
-10721:2:1173
-10722:0:4365
-10723:3:3043
-10724:0:4365
-10725:2:1179
-10726:0:4365
-10727:2:1180
-10728:0:4365
-10729:3:3042
-10730:0:4365
-10731:2:1181
-10732:2:1185
-10733:2:1186
-10734:2:1194
-10735:2:1195
-10736:2:1199
-10737:2:1200
-10738:2:1194
-10739:2:1195
-10740:2:1199
-10741:2:1200
-10742:2:1208
-10743:2:1213
-10744:2:1217
-10745:2:1218
-10746:2:1225
-10747:2:1226
-10748:2:1237
-10749:2:1238
-10750:2:1239
-10751:2:1237
-10752:2:1238
-10753:2:1239
-10754:2:1250
-10755:2:1255
-10756:2:1256
-10757:0:4365
-10758:3:3043
-10759:0:4365
-10760:2:1268
-10761:0:4365
-10762:3:3042
-10763:0:4365
-10764:2:1270
-10765:0:4365
-10766:3:3043
-10767:0:4365
-10768:2:1271
-10769:2:1275
-10770:2:1276
-10771:2:1284
-10772:2:1285
-10773:2:1289
-10774:2:1290
-10775:2:1284
-10776:2:1285
-10777:2:1289
-10778:2:1290
-10779:2:1298
-10780:2:1303
-10781:2:1307
-10782:2:1308
-10783:2:1315
-10784:2:1316
-10785:2:1327
-10786:2:1328
-10787:2:1329
-10788:2:1327
-10789:2:1328
-10790:2:1329
-10791:2:1340
-10792:2:1345
-10793:2:1346
-10794:0:4365
-10795:2:1358
-10796:0:4365
-10797:2:1360
-10798:0:4365
-10799:3:3042
-10800:0:4365
-10801:2:1361
-10802:0:4365
-10803:3:3043
-10804:0:4365
-10805:2:1362
-10806:2:1366
-10807:2:1367
-10808:2:1375
-10809:2:1376
-10810:2:1380
-10811:2:1381
-10812:2:1375
-10813:2:1376
-10814:2:1380
-10815:2:1381
-10816:2:1389
-10817:2:1394
-10818:2:1398
-10819:2:1399
-10820:2:1406
-10821:2:1407
-10822:2:1418
-10823:2:1419
-10824:2:1420
-10825:2:1418
-10826:2:1419
-10827:2:1420
-10828:2:1431
-10829:2:1436
-10830:2:1437
-10831:0:4365
-10832:2:1449
-10833:0:4365
-10834:3:3042
-10835:0:4365
-10836:2:1451
-10837:0:4365
-10838:3:3043
-10839:0:4365
-10840:2:1652
-10841:0:4365
-10842:2:1653
-10843:0:4365
-10844:2:1657
-10845:0:4365
-10846:2:1180
-10847:0:4365
-10848:3:3042
-10849:0:4365
-10850:2:1181
-10851:2:1185
-10852:2:1186
-10853:2:1194
-10854:2:1195
-10855:2:1199
-10856:2:1200
-10857:2:1194
-10858:2:1195
-10859:2:1196
-10860:2:1208
-10861:2:1213
-10862:2:1217
-10863:2:1218
-10864:2:1225
-10865:2:1226
-10866:2:1237
-10867:2:1238
-10868:2:1239
-10869:2:1237
-10870:2:1238
-10871:2:1239
-10872:2:1250
-10873:2:1255
-10874:2:1256
-10875:0:4365
-10876:3:3043
-10877:0:4365
-10878:2:1268
-10879:0:4365
-10880:3:3042
-10881:0:4365
-10882:2:1270
-10883:0:4365
-10884:3:3043
-10885:0:4365
-10886:2:1271
-10887:2:1275
-10888:2:1276
-10889:2:1284
-10890:2:1285
-10891:2:1289
-10892:2:1290
-10893:2:1284
-10894:2:1285
-10895:2:1289
-10896:2:1290
-10897:2:1298
-10898:2:1303
-10899:2:1307
-10900:2:1308
-10901:2:1315
-10902:2:1316
-10903:2:1327
-10904:2:1328
-10905:2:1329
-10906:2:1327
-10907:2:1328
-10908:2:1329
-10909:2:1340
-10910:2:1345
-10911:2:1346
-10912:0:4365
-10913:2:1358
-10914:0:4365
-10915:2:1454
-10916:0:4365
-10917:3:3042
-10918:0:4365
-10919:2:1455
-10920:0:4365
-10921:3:3043
-10922:0:4365
-10923:2:1652
-10924:0:4365
-10925:2:1653
-10926:0:4365
-10927:2:1657
-10928:0:4365
-10929:2:1660
-10930:0:4365
-10931:3:3042
-10932:0:4365
-10933:2:1665
-10934:2:1669
-10935:2:1670
-10936:2:1678
-10937:2:1679
-10938:2:1683
-10939:2:1684
-10940:2:1678
-10941:2:1679
-10942:2:1680
-10943:2:1692
-10944:2:1697
-10945:2:1701
-10946:2:1702
-10947:2:1709
-10948:2:1710
-10949:2:1721
-10950:2:1722
-10951:2:1723
-10952:2:1721
-10953:2:1722
-10954:2:1723
-10955:2:1734
-10956:2:1739
-10957:2:1740
-10958:0:4365
-10959:3:3043
-10960:0:4365
-10961:2:1752
-10962:0:4365
-10963:3:3042
-10964:0:4365
-10965:2:1754
-10966:0:4365
-10967:3:3043
-10968:0:4365
-10969:2:1755
-10970:2:1759
-10971:2:1760
-10972:2:1768
-10973:2:1769
-10974:2:1773
-10975:2:1774
-10976:2:1768
-10977:2:1769
-10978:2:1773
-10979:2:1774
-10980:2:1782
-10981:2:1787
-10982:2:1791
-10983:2:1792
-10984:2:1799
-10985:2:1800
-10986:2:1811
-10987:2:1812
-10988:2:1813
-10989:2:1811
-10990:2:1812
-10991:2:1813
-10992:2:1824
-10993:2:1829
-10994:2:1830
-10995:0:4365
-10996:2:1842
-10997:0:4365
-10998:3:3042
-10999:0:4365
-11000:2:1844
-11001:0:4365
-11002:3:3043
-11003:0:4365
-11004:2:1845
-11005:2:1849
-11006:2:1850
-11007:2:1858
-11008:2:1859
-11009:2:1863
-11010:2:1864
-11011:2:1858
-11012:2:1859
-11013:2:1863
-11014:2:1864
-11015:2:1872
-11016:2:1877
-11017:2:1881
-11018:2:1882
-11019:2:1889
-11020:2:1890
-11021:2:1901
-11022:2:1902
-11023:2:1903
-11024:2:1901
-11025:2:1902
-11026:2:1903
-11027:2:1914
-11028:2:1919
-11029:2:1920
-11030:0:4365
-11031:2:1932
-11032:0:4365
-11033:3:3042
-11034:0:4365
-11035:2:1934
-11036:0:4365
-11037:3:3043
-11038:0:4365
-11039:2:1935
-11040:0:4365
-11041:2:1936
-11042:0:4365
-11043:2:2129
-11044:0:4365
-11045:2:2130
-11046:0:4365
-11047:2:2134
-11048:0:4365
-11049:3:3042
-11050:0:4365
-11051:2:2136
-11052:0:4365
-11053:3:3043
-11054:0:4365
-11055:2:2137
-11056:2:2141
-11057:2:2142
-11058:2:2150
-11059:2:2151
-11060:2:2155
-11061:2:2156
-11062:2:2150
-11063:2:2151
-11064:2:2155
-11065:2:2156
-11066:2:2164
-11067:2:2169
-11068:2:2173
-11069:2:2174
-11070:2:2181
-11071:2:2182
-11072:2:2193
-11073:2:2194
-11074:2:2195
-11075:2:2193
-11076:2:2194
-11077:2:2195
-11078:2:2206
-11079:2:2211
-11080:2:2212
-11081:0:4365
-11082:2:2224
-11083:0:4365
-11084:3:3042
-11085:0:4365
-11086:2:2226
-11087:0:4365
-11088:3:3043
-11089:0:4365
-11090:2:1936
-11091:0:4365
-11092:2:2129
-11093:0:4365
-11094:2:2130
-11095:0:4365
-11096:2:2134
-11097:0:4365
-11098:3:3042
-11099:0:4365
-11100:2:2136
-11101:0:4365
-11102:3:3043
-11103:0:4365
-11104:2:2137
-11105:2:2141
-11106:2:2142
-11107:2:2150
-11108:2:2151
-11109:2:2155
-11110:2:2156
-11111:2:2150
-11112:2:2151
-11113:2:2152
-11114:2:2164
-11115:2:2169
-11116:2:2173
-11117:2:2174
-11118:2:2181
-11119:2:2182
-11120:2:2193
-11121:2:2194
-11122:2:2195
-11123:2:2193
-11124:2:2194
-11125:2:2195
-11126:2:2206
-11127:2:2211
-11128:2:2212
-11129:0:4365
-11130:2:2224
-11131:0:4365
-11132:3:3042
-11133:0:4365
-11134:2:2226
-11135:0:4365
-11136:3:3043
-11137:0:4365
-11138:2:2230
-11139:0:4365
-11140:3:3042
-11141:0:4365
-11142:2:2235
-11143:2:2239
-11144:2:2240
-11145:2:2248
-11146:2:2249
-11147:2:2253
-11148:2:2254
-11149:2:2248
-11150:2:2249
-11151:2:2250
-11152:2:2262
-11153:2:2267
-11154:2:2271
-11155:2:2272
-11156:2:2279
-11157:2:2280
-11158:2:2291
-11159:2:2292
-11160:2:2293
-11161:2:2291
-11162:2:2292
-11163:2:2293
-11164:2:2304
-11165:2:2309
-11166:2:2310
-11167:0:4365
-11168:3:3043
-11169:0:4365
-11170:2:2322
-11171:0:4365
-11172:2:1169
-11173:0:4365
-11174:3:3042
-11175:0:4365
-11176:2:1170
-11177:0:4365
-11178:3:3043
-11179:0:4365
-11180:3:3044
-11181:0:4365
-11182:3:3257
-11183:0:4365
-11184:3:3362
-11185:0:4365
-11186:3:3363
-11187:0:4365
-11188:3:3367
-11189:0:4365
-11190:3:3373
-11191:3:3377
-11192:3:3378
-11193:3:3386
-11194:3:3387
-11195:3:3391
-11196:3:3392
-11197:3:3386
-11198:3:3387
-11199:3:3391
-11200:3:3392
-11201:3:3400
-11202:3:3405
-11203:3:3409
-11204:3:3410
-11205:3:3417
-11206:3:3418
-11207:3:3429
-11208:3:3430
-11209:3:3431
-11210:3:3429
-11211:3:3430
-11212:3:3431
-11213:3:3442
-11214:3:3447
-11215:3:3448
-11216:0:4365
-11217:3:3460
-11218:0:4365
-11219:3:3461
-11220:0:4365
-11221:2:1173
-11222:0:4365
-11223:3:3462
-11224:0:4365
-11225:2:1179
-11226:0:4365
-11227:2:1180
-11228:0:4365
-11229:3:3461
-11230:0:4365
-11231:2:1181
-11232:2:1185
-11233:2:1186
-11234:2:1194
-11235:2:1195
-11236:2:1199
-11237:2:1200
-11238:2:1194
-11239:2:1195
-11240:2:1199
-11241:2:1200
-11242:2:1208
-11243:2:1213
-11244:2:1217
-11245:2:1218
-11246:2:1225
-11247:2:1226
-11248:2:1237
-11249:2:1238
-11250:2:1239
-11251:2:1237
-11252:2:1238
-11253:2:1239
-11254:2:1250
-11255:2:1255
-11256:2:1256
-11257:0:4365
-11258:3:3462
-11259:0:4365
-11260:2:1268
-11261:0:4365
-11262:3:3461
-11263:0:4365
-11264:2:1270
-11265:0:4365
-11266:3:3462
-11267:0:4365
-11268:2:1271
-11269:2:1275
-11270:2:1276
-11271:2:1284
-11272:2:1285
-11273:2:1289
-11274:2:1290
-11275:2:1284
-11276:2:1285
-11277:2:1289
-11278:2:1290
-11279:2:1298
-11280:2:1303
-11281:2:1307
-11282:2:1308
-11283:2:1315
-11284:2:1316
-11285:2:1327
-11286:2:1328
-11287:2:1329
-11288:2:1327
-11289:2:1328
-11290:2:1329
-11291:2:1340
-11292:2:1345
-11293:2:1346
-11294:0:4365
-11295:2:1358
-11296:0:4365
-11297:2:1360
-11298:0:4365
-11299:3:3461
-11300:0:4365
-11301:2:1361
-11302:0:4365
-11303:3:3462
-11304:0:4365
-11305:2:1362
-11306:2:1366
-11307:2:1367
-11308:2:1375
-11309:2:1376
-11310:2:1380
-11311:2:1381
-11312:2:1375
-11313:2:1376
-11314:2:1380
-11315:2:1381
-11316:2:1389
-11317:2:1394
-11318:2:1398
-11319:2:1399
-11320:2:1406
-11321:2:1407
-11322:2:1418
-11323:2:1419
-11324:2:1420
-11325:2:1418
-11326:2:1419
-11327:2:1420
-11328:2:1431
-11329:2:1436
-11330:2:1437
-11331:0:4365
-11332:2:1449
-11333:0:4365
-11334:3:3461
-11335:0:4365
-11336:2:1451
-11337:0:4365
-11338:3:3462
-11339:0:4365
-11340:2:1652
-11341:0:4365
-11342:2:1653
-11343:0:4365
-11344:2:1657
-11345:0:4365
-11346:2:1180
-11347:0:4365
-11348:3:3461
-11349:0:4365
-11350:2:1181
-11351:2:1185
-11352:2:1186
-11353:2:1194
-11354:2:1195
-11355:2:1199
-11356:2:1200
-11357:2:1194
-11358:2:1195
-11359:2:1196
-11360:2:1208
-11361:2:1213
-11362:2:1217
-11363:2:1218
-11364:2:1225
-11365:2:1226
-11366:2:1237
-11367:2:1238
-11368:2:1239
-11369:2:1237
-11370:2:1238
-11371:2:1239
-11372:2:1250
-11373:2:1255
-11374:2:1256
-11375:0:4365
-11376:3:3462
-11377:0:4365
-11378:2:1268
-11379:0:4365
-11380:3:3461
-11381:0:4365
-11382:2:1270
-11383:0:4365
-11384:3:3462
-11385:0:4365
-11386:2:1271
-11387:2:1275
-11388:2:1276
-11389:2:1284
-11390:2:1285
-11391:2:1289
-11392:2:1290
-11393:2:1284
-11394:2:1285
-11395:2:1289
-11396:2:1290
-11397:2:1298
-11398:2:1303
-11399:2:1307
-11400:2:1308
-11401:2:1315
-11402:2:1316
-11403:2:1327
-11404:2:1328
-11405:2:1329
-11406:2:1327
-11407:2:1328
-11408:2:1329
-11409:2:1340
-11410:2:1345
-11411:2:1346
-11412:0:4365
-11413:2:1358
-11414:0:4365
-11415:2:1454
-11416:0:4365
-11417:3:3461
-11418:0:4365
-11419:2:1455
-11420:0:4365
-11421:3:3462
-11422:0:4365
-11423:2:1652
-11424:0:4365
-11425:2:1653
-11426:0:4365
-11427:2:1657
-11428:0:4365
-11429:2:1660
-11430:0:4365
-11431:3:3461
-11432:0:4365
-11433:2:1665
-11434:2:1669
-11435:2:1670
-11436:2:1678
-11437:2:1679
-11438:2:1683
-11439:2:1684
-11440:2:1678
-11441:2:1679
-11442:2:1680
-11443:2:1692
-11444:2:1697
-11445:2:1701
-11446:2:1702
-11447:2:1709
-11448:2:1710
-11449:2:1721
-11450:2:1722
-11451:2:1723
-11452:2:1721
-11453:2:1722
-11454:2:1723
-11455:2:1734
-11456:2:1739
-11457:2:1740
-11458:0:4365
-11459:3:3462
-11460:0:4365
-11461:2:1752
-11462:0:4365
-11463:3:3461
-11464:0:4365
-11465:2:1754
-11466:0:4365
-11467:3:3462
-11468:0:4365
-11469:2:1755
-11470:2:1759
-11471:2:1760
-11472:2:1768
-11473:2:1769
-11474:2:1773
-11475:2:1774
-11476:2:1768
-11477:2:1769
-11478:2:1773
-11479:2:1774
-11480:2:1782
-11481:2:1787
-11482:2:1791
-11483:2:1792
-11484:2:1799
-11485:2:1800
-11486:2:1811
-11487:2:1812
-11488:2:1813
-11489:2:1811
-11490:2:1812
-11491:2:1813
-11492:2:1824
-11493:2:1829
-11494:2:1830
-11495:0:4365
-11496:2:1842
-11497:0:4365
-11498:3:3461
-11499:0:4365
-11500:2:1844
-11501:0:4365
-11502:3:3462
-11503:0:4365
-11504:2:1845
-11505:2:1849
-11506:2:1850
-11507:2:1858
-11508:2:1859
-11509:2:1863
-11510:2:1864
-11511:2:1858
-11512:2:1859
-11513:2:1863
-11514:2:1864
-11515:2:1872
-11516:2:1877
-11517:2:1881
-11518:2:1882
-11519:2:1889
-11520:2:1890
-11521:2:1901
-11522:2:1902
-11523:2:1903
-11524:2:1901
-11525:2:1902
-11526:2:1903
-11527:2:1914
-11528:2:1919
-11529:2:1920
-11530:0:4365
-11531:2:1932
-11532:0:4365
-11533:3:3461
-11534:0:4365
-11535:2:1934
-11536:0:4365
-11537:3:3462
-11538:0:4365
-11539:2:1935
-11540:0:4365
-11541:2:1936
-11542:0:4365
-11543:2:2129
-11544:0:4365
-11545:2:2130
-11546:0:4365
-11547:2:2134
-11548:0:4365
-11549:3:3461
-11550:0:4365
-11551:2:2136
-11552:0:4365
-11553:3:3462
-11554:0:4365
-11555:2:2137
-11556:2:2141
-11557:2:2142
-11558:2:2150
-11559:2:2151
-11560:2:2155
-11561:2:2156
-11562:2:2150
-11563:2:2151
-11564:2:2155
-11565:2:2156
-11566:2:2164
-11567:2:2169
-11568:2:2173
-11569:2:2174
-11570:2:2181
-11571:2:2182
-11572:2:2193
-11573:2:2194
-11574:2:2195
-11575:2:2193
-11576:2:2194
-11577:2:2195
-11578:2:2206
-11579:2:2211
-11580:2:2212
-11581:0:4365
-11582:2:2224
-11583:0:4365
-11584:3:3461
-11585:0:4365
-11586:2:2226
-11587:0:4365
-11588:3:3462
-11589:0:4365
-11590:2:1936
-11591:0:4365
-11592:2:2129
-11593:0:4365
-11594:2:2130
-11595:0:4365
-11596:2:2134
-11597:0:4365
-11598:3:3461
-11599:0:4365
-11600:2:2136
-11601:0:4365
-11602:3:3462
-11603:0:4365
-11604:2:2137
-11605:2:2141
-11606:2:2142
-11607:2:2150
-11608:2:2151
-11609:2:2155
-11610:2:2156
-11611:2:2150
-11612:2:2151
-11613:2:2152
-11614:2:2164
-11615:2:2169
-11616:2:2173
-11617:2:2174
-11618:2:2181
-11619:2:2182
-11620:2:2193
-11621:2:2194
-11622:2:2195
-11623:2:2193
-11624:2:2194
-11625:2:2195
-11626:2:2206
-11627:2:2211
-11628:2:2212
-11629:0:4365
-11630:2:2224
-11631:0:4365
-11632:3:3461
-11633:0:4365
-11634:2:2226
-11635:0:4365
-11636:3:3462
-11637:0:4365
-11638:2:2230
-11639:0:4365
-11640:3:3461
-11641:0:4365
-11642:2:2235
-11643:2:2239
-11644:2:2240
-11645:2:2248
-11646:2:2249
-11647:2:2253
-11648:2:2254
-11649:2:2248
-11650:2:2249
-11651:2:2250
-11652:2:2262
-11653:2:2267
-11654:2:2271
-11655:2:2272
-11656:2:2279
-11657:2:2280
-11658:2:2291
-11659:2:2292
-11660:2:2293
-11661:2:2291
-11662:2:2292
-11663:2:2293
-11664:2:2304
-11665:2:2309
-11666:2:2310
-11667:0:4365
-11668:3:3462
-11669:0:4365
-11670:2:2322
-11671:0:4365
-11672:2:1169
-11673:0:4365
-11674:3:3461
-11675:0:4365
-11676:2:1170
-11677:0:4365
-11678:3:3462
-11679:0:4365
-11680:3:3463
-11681:0:4365
-11682:3:3469
-11683:0:4365
-11684:3:3470
-11685:3:3474
-11686:3:3475
-11687:3:3483
-11688:3:3484
-11689:3:3488
-11690:3:3489
-11691:3:3483
-11692:3:3484
-11693:3:3488
-11694:3:3489
-11695:3:3497
-11696:3:3502
-11697:3:3506
-11698:3:3507
-11699:3:3514
-11700:3:3515
-11701:3:3526
-11702:3:3527
-11703:3:3528
-11704:3:3526
-11705:3:3527
-11706:3:3528
-11707:3:3539
-11708:3:3544
-11709:3:3545
-11710:0:4365
-11711:3:3557
-11712:0:4365
-11713:3:3558
-11714:0:4365
-11715:2:1173
-11716:0:4365
-11717:3:3559
-11718:0:4365
-11719:2:1179
-11720:0:4365
-11721:2:1180
-11722:0:4365
-11723:3:3558
-11724:0:4365
-11725:2:1181
-11726:2:1185
-11727:2:1186
-11728:2:1194
-11729:2:1195
-11730:2:1199
-11731:2:1200
-11732:2:1194
-11733:2:1195
-11734:2:1199
-11735:2:1200
-11736:2:1208
-11737:2:1213
-11738:2:1217
-11739:2:1218
-11740:2:1225
-11741:2:1226
-11742:2:1237
-11743:2:1238
-11744:2:1239
-11745:2:1237
-11746:2:1238
-11747:2:1239
-11748:2:1250
-11749:2:1255
-11750:2:1256
-11751:0:4365
-11752:3:3559
-11753:0:4365
-11754:2:1268
-11755:0:4365
-11756:3:3558
-11757:0:4365
-11758:2:1270
-11759:0:4365
-11760:3:3559
-11761:0:4365
-11762:2:1271
-11763:2:1275
-11764:2:1276
-11765:2:1284
-11766:2:1285
-11767:2:1289
-11768:2:1290
-11769:2:1284
-11770:2:1285
-11771:2:1289
-11772:2:1290
-11773:2:1298
-11774:2:1303
-11775:2:1307
-11776:2:1308
-11777:2:1315
-11778:2:1316
-11779:2:1327
-11780:2:1328
-11781:2:1329
-11782:2:1327
-11783:2:1328
-11784:2:1329
-11785:2:1340
-11786:2:1345
-11787:2:1346
-11788:0:4365
-11789:2:1358
-11790:0:4365
-11791:2:1360
-11792:0:4365
-11793:3:3558
-11794:0:4365
-11795:2:1361
-11796:0:4365
-11797:3:3559
-11798:0:4365
-11799:2:1362
-11800:2:1366
-11801:2:1367
-11802:2:1375
-11803:2:1376
-11804:2:1380
-11805:2:1381
-11806:2:1375
-11807:2:1376
-11808:2:1380
-11809:2:1381
-11810:2:1389
-11811:2:1394
-11812:2:1398
-11813:2:1399
-11814:2:1406
-11815:2:1407
-11816:2:1418
-11817:2:1419
-11818:2:1420
-11819:2:1418
-11820:2:1419
-11821:2:1420
-11822:2:1431
-11823:2:1436
-11824:2:1437
-11825:0:4365
-11826:2:1449
-11827:0:4365
-11828:3:3558
-11829:0:4365
-11830:2:1451
-11831:0:4365
-11832:3:3559
-11833:0:4365
-11834:2:1652
-11835:0:4365
-11836:2:1653
-11837:0:4365
-11838:2:1657
-11839:0:4365
-11840:2:1180
-11841:0:4365
-11842:3:3558
-11843:0:4365
-11844:2:1181
-11845:2:1185
-11846:2:1186
-11847:2:1194
-11848:2:1195
-11849:2:1199
-11850:2:1200
-11851:2:1194
-11852:2:1195
-11853:2:1196
-11854:2:1208
-11855:2:1213
-11856:2:1217
-11857:2:1218
-11858:2:1225
-11859:2:1226
-11860:2:1237
-11861:2:1238
-11862:2:1239
-11863:2:1237
-11864:2:1238
-11865:2:1239
-11866:2:1250
-11867:2:1255
-11868:2:1256
-11869:0:4365
-11870:3:3559
-11871:0:4365
-11872:2:1268
-11873:0:4365
-11874:3:3558
-11875:0:4365
-11876:2:1270
-11877:0:4365
-11878:3:3559
-11879:0:4365
-11880:2:1271
-11881:2:1275
-11882:2:1276
-11883:2:1284
-11884:2:1285
-11885:2:1289
-11886:2:1290
-11887:2:1284
-11888:2:1285
-11889:2:1289
-11890:2:1290
-11891:2:1298
-11892:2:1303
-11893:2:1307
-11894:2:1308
-11895:2:1315
-11896:2:1316
-11897:2:1327
-11898:2:1328
-11899:2:1329
-11900:2:1327
-11901:2:1328
-11902:2:1329
-11903:2:1340
-11904:2:1345
-11905:2:1346
-11906:0:4365
-11907:2:1358
-11908:0:4365
-11909:2:1454
-11910:0:4365
-11911:3:3558
-11912:0:4365
-11913:2:1455
-11914:0:4365
-11915:3:3559
-11916:0:4365
-11917:2:1652
-11918:0:4365
-11919:2:1653
-11920:0:4365
-11921:2:1657
-11922:0:4365
-11923:2:1660
-11924:0:4365
-11925:3:3558
-11926:0:4365
-11927:2:1665
-11928:2:1669
-11929:2:1670
-11930:2:1678
-11931:2:1679
-11932:2:1683
-11933:2:1684
-11934:2:1678
-11935:2:1679
-11936:2:1680
-11937:2:1692
-11938:2:1697
-11939:2:1701
-11940:2:1702
-11941:2:1709
-11942:2:1710
-11943:2:1721
-11944:2:1722
-11945:2:1723
-11946:2:1721
-11947:2:1722
-11948:2:1723
-11949:2:1734
-11950:2:1739
-11951:2:1740
-11952:0:4365
-11953:3:3559
-11954:0:4365
-11955:2:1752
-11956:0:4365
-11957:3:3558
-11958:0:4365
-11959:2:1754
-11960:0:4365
-11961:3:3559
-11962:0:4365
-11963:2:1755
-11964:2:1759
-11965:2:1760
-11966:2:1768
-11967:2:1769
-11968:2:1773
-11969:2:1774
-11970:2:1768
-11971:2:1769
-11972:2:1773
-11973:2:1774
-11974:2:1782
-11975:2:1787
-11976:2:1791
-11977:2:1792
-11978:2:1799
-11979:2:1800
-11980:2:1811
-11981:2:1812
-11982:2:1813
-11983:2:1811
-11984:2:1812
-11985:2:1813
-11986:2:1824
-11987:2:1829
-11988:2:1830
-11989:0:4365
-11990:2:1842
-11991:0:4365
-11992:3:3558
-11993:0:4365
-11994:2:1844
-11995:0:4365
-11996:3:3559
-11997:0:4365
-11998:2:1845
-11999:2:1849
-12000:2:1850
-12001:2:1858
-12002:2:1859
-12003:2:1863
-12004:2:1864
-12005:2:1858
-12006:2:1859
-12007:2:1863
-12008:2:1864
-12009:2:1872
-12010:2:1877
-12011:2:1881
-12012:2:1882
-12013:2:1889
-12014:2:1890
-12015:2:1901
-12016:2:1902
-12017:2:1903
-12018:2:1901
-12019:2:1902
-12020:2:1903
-12021:2:1914
-12022:2:1919
-12023:2:1920
-12024:0:4365
-12025:2:1932
-12026:0:4365
-12027:3:3558
-12028:0:4365
-12029:2:1934
-12030:0:4365
-12031:3:3559
-12032:0:4365
-12033:2:1935
-12034:0:4365
-12035:2:1936
-12036:0:4365
-12037:2:2129
-12038:0:4365
-12039:2:2130
-12040:0:4365
-12041:2:2134
-12042:0:4365
-12043:3:3558
-12044:0:4365
-12045:2:2136
-12046:0:4365
-12047:3:3559
-12048:0:4365
-12049:2:2137
-12050:2:2141
-12051:2:2142
-12052:2:2150
-12053:2:2151
-12054:2:2155
-12055:2:2156
-12056:2:2150
-12057:2:2151
-12058:2:2155
-12059:2:2156
-12060:2:2164
-12061:2:2169
-12062:2:2173
-12063:2:2174
-12064:2:2181
-12065:2:2182
-12066:2:2193
-12067:2:2194
-12068:2:2195
-12069:2:2193
-12070:2:2194
-12071:2:2195
-12072:2:2206
-12073:2:2211
-12074:2:2212
-12075:0:4365
-12076:2:2224
-12077:0:4365
-12078:3:3558
-12079:0:4365
-12080:2:2226
-12081:0:4365
-12082:3:3559
-12083:0:4365
-12084:2:1936
-12085:0:4365
-12086:2:2129
-12087:0:4365
-12088:2:2130
-12089:0:4365
-12090:2:2134
-12091:0:4365
-12092:3:3558
-12093:0:4365
-12094:2:2136
-12095:0:4365
-12096:3:3559
-12097:0:4365
-12098:2:2137
-12099:2:2141
-12100:2:2142
-12101:2:2150
-12102:2:2151
-12103:2:2155
-12104:2:2156
-12105:2:2150
-12106:2:2151
-12107:2:2152
-12108:2:2164
-12109:2:2169
-12110:2:2173
-12111:2:2174
-12112:2:2181
-12113:2:2182
-12114:2:2193
-12115:2:2194
-12116:2:2195
-12117:2:2193
-12118:2:2194
-12119:2:2195
-12120:2:2206
-12121:2:2211
-12122:2:2212
-12123:0:4365
-12124:2:2224
-12125:0:4365
-12126:3:3558
-12127:0:4365
-12128:2:2226
-12129:0:4365
-12130:3:3559
-12131:0:4365
-12132:2:2230
-12133:0:4365
-12134:3:3558
-12135:0:4365
-12136:2:2235
-12137:2:2239
-12138:2:2240
-12139:2:2248
-12140:2:2249
-12141:2:2253
-12142:2:2254
-12143:2:2248
-12144:2:2249
-12145:2:2250
-12146:2:2262
-12147:2:2267
-12148:2:2271
-12149:2:2272
-12150:2:2279
-12151:2:2280
-12152:2:2291
-12153:2:2292
-12154:2:2293
-12155:2:2291
-12156:2:2292
-12157:2:2293
-12158:2:2304
-12159:2:2309
-12160:2:2310
-12161:0:4365
-12162:3:3559
-12163:0:4365
-12164:2:2322
-12165:0:4365
-12166:2:1169
-12167:0:4365
-12168:3:3558
-12169:0:4365
-12170:2:1170
-12171:0:4365
-12172:3:3559
-12173:0:4365
-12174:3:3560
-12175:0:4365
-12176:3:3566
-12177:0:4365
-12178:3:3569
-12179:3:3570
-12180:3:3582
-12181:3:3583
-12182:3:3587
-12183:3:3588
-12184:3:3582
-12185:3:3583
-12186:3:3587
-12187:3:3588
-12188:3:3596
-12189:3:3601
-12190:3:3605
-12191:3:3606
-12192:3:3613
-12193:3:3614
-12194:3:3625
-12195:3:3626
-12196:3:3627
-12197:3:3625
-12198:3:3626
-12199:3:3627
-12200:3:3638
-12201:3:3643
-12202:3:3644
-12203:0:4365
-12204:3:3656
-12205:0:4365
-12206:3:3657
-12207:0:4365
-12208:2:1173
-12209:0:4365
-12210:3:3658
-12211:0:4365
-12212:2:1179
-12213:0:4365
-12214:2:1180
-12215:0:4365
-12216:3:3657
-12217:0:4365
-12218:2:1181
-12219:2:1185
-12220:2:1186
-12221:2:1194
-12222:2:1195
-12223:2:1199
-12224:2:1200
-12225:2:1194
-12226:2:1195
-12227:2:1199
-12228:2:1200
-12229:2:1208
-12230:2:1213
-12231:2:1217
-12232:2:1218
-12233:2:1225
-12234:2:1226
-12235:2:1237
-12236:2:1238
-12237:2:1239
-12238:2:1237
-12239:2:1238
-12240:2:1239
-12241:2:1250
-12242:2:1255
-12243:2:1256
-12244:0:4365
-12245:3:3658
-12246:0:4365
-12247:2:1268
-12248:0:4365
-12249:3:3657
-12250:0:4365
-12251:2:1270
-12252:0:4365
-12253:3:3658
-12254:0:4365
-12255:2:1271
-12256:2:1275
-12257:2:1276
-12258:2:1284
-12259:2:1285
-12260:2:1289
-12261:2:1290
-12262:2:1284
-12263:2:1285
-12264:2:1289
-12265:2:1290
-12266:2:1298
-12267:2:1303
-12268:2:1307
-12269:2:1308
-12270:2:1315
-12271:2:1316
-12272:2:1327
-12273:2:1328
-12274:2:1329
-12275:2:1327
-12276:2:1328
-12277:2:1329
-12278:2:1340
-12279:2:1345
-12280:2:1346
-12281:0:4365
-12282:2:1358
-12283:0:4365
-12284:2:1360
-12285:0:4365
-12286:3:3657
-12287:0:4365
-12288:2:1361
-12289:0:4365
-12290:3:3658
-12291:0:4365
-12292:2:1362
-12293:2:1366
-12294:2:1367
-12295:2:1375
-12296:2:1376
-12297:2:1380
-12298:2:1381
-12299:2:1375
-12300:2:1376
-12301:2:1380
-12302:2:1381
-12303:2:1389
-12304:2:1394
-12305:2:1398
-12306:2:1399
-12307:2:1406
-12308:2:1407
-12309:2:1418
-12310:2:1419
-12311:2:1420
-12312:2:1418
-12313:2:1419
-12314:2:1420
-12315:2:1431
-12316:2:1436
-12317:2:1437
-12318:0:4365
-12319:2:1449
-12320:0:4365
-12321:3:3657
-12322:0:4365
-12323:2:1451
-12324:0:4365
-12325:3:3658
-12326:0:4365
-12327:2:1652
-12328:0:4365
-12329:2:1653
-12330:0:4365
-12331:2:1657
-12332:0:4365
-12333:2:1180
-12334:0:4365
-12335:3:3657
-12336:0:4365
-12337:2:1181
-12338:2:1185
-12339:2:1186
-12340:2:1194
-12341:2:1195
-12342:2:1199
-12343:2:1200
-12344:2:1194
-12345:2:1195
-12346:2:1196
-12347:2:1208
-12348:2:1213
-12349:2:1217
-12350:2:1218
-12351:2:1225
-12352:2:1226
-12353:2:1237
-12354:2:1238
-12355:2:1239
-12356:2:1237
-12357:2:1238
-12358:2:1239
-12359:2:1250
-12360:2:1255
-12361:2:1256
-12362:0:4365
-12363:3:3658
-12364:0:4365
-12365:2:1268
-12366:0:4365
-12367:3:3657
-12368:0:4365
-12369:2:1270
-12370:0:4365
-12371:3:3658
-12372:0:4365
-12373:2:1271
-12374:2:1275
-12375:2:1276
-12376:2:1284
-12377:2:1285
-12378:2:1289
-12379:2:1290
-12380:2:1284
-12381:2:1285
-12382:2:1289
-12383:2:1290
-12384:2:1298
-12385:2:1303
-12386:2:1307
-12387:2:1308
-12388:2:1315
-12389:2:1316
-12390:2:1327
-12391:2:1328
-12392:2:1329
-12393:2:1327
-12394:2:1328
-12395:2:1329
-12396:2:1340
-12397:2:1345
-12398:2:1346
-12399:0:4365
-12400:2:1358
-12401:0:4365
-12402:2:1454
-12403:0:4365
-12404:3:3657
-12405:0:4365
-12406:2:1455
-12407:0:4365
-12408:3:3658
-12409:0:4365
-12410:2:1652
-12411:0:4365
-12412:2:1653
-12413:0:4365
-12414:2:1657
-12415:0:4365
-12416:2:1660
-12417:0:4365
-12418:3:3657
-12419:0:4365
-12420:2:1665
-12421:2:1669
-12422:2:1670
-12423:2:1678
-12424:2:1679
-12425:2:1683
-12426:2:1684
-12427:2:1678
-12428:2:1679
-12429:2:1680
-12430:2:1692
-12431:2:1697
-12432:2:1701
-12433:2:1702
-12434:2:1709
-12435:2:1710
-12436:2:1721
-12437:2:1722
-12438:2:1723
-12439:2:1721
-12440:2:1722
-12441:2:1723
-12442:2:1734
-12443:2:1739
-12444:2:1740
-12445:0:4365
-12446:3:3658
-12447:0:4365
-12448:2:1752
-12449:0:4365
-12450:3:3657
-12451:0:4365
-12452:2:1754
-12453:0:4365
-12454:3:3658
-12455:0:4365
-12456:2:1755
-12457:2:1759
-12458:2:1760
-12459:2:1768
-12460:2:1769
-12461:2:1773
-12462:2:1774
-12463:2:1768
-12464:2:1769
-12465:2:1773
-12466:2:1774
-12467:2:1782
-12468:2:1787
-12469:2:1791
-12470:2:1792
-12471:2:1799
-12472:2:1800
-12473:2:1811
-12474:2:1812
-12475:2:1813
-12476:2:1811
-12477:2:1812
-12478:2:1813
-12479:2:1824
-12480:2:1829
-12481:2:1830
-12482:0:4365
-12483:2:1842
-12484:0:4365
-12485:3:3657
-12486:0:4365
-12487:2:1844
-12488:0:4365
-12489:3:3658
-12490:0:4365
-12491:2:1845
-12492:2:1849
-12493:2:1850
-12494:2:1858
-12495:2:1859
-12496:2:1863
-12497:2:1864
-12498:2:1858
-12499:2:1859
-12500:2:1863
-12501:2:1864
-12502:2:1872
-12503:2:1877
-12504:2:1881
-12505:2:1882
-12506:2:1889
-12507:2:1890
-12508:2:1901
-12509:2:1902
-12510:2:1903
-12511:2:1901
-12512:2:1902
-12513:2:1903
-12514:2:1914
-12515:2:1919
-12516:2:1920
-12517:0:4365
-12518:2:1932
-12519:0:4365
-12520:3:3657
-12521:0:4365
-12522:2:1934
-12523:0:4365
-12524:3:3658
-12525:0:4365
-12526:2:1935
-12527:0:4365
-12528:2:1936
-12529:0:4365
-12530:2:2129
-12531:0:4365
-12532:2:2130
-12533:0:4365
-12534:2:2134
-12535:0:4365
-12536:3:3657
-12537:0:4365
-12538:2:2136
-12539:0:4365
-12540:3:3658
-12541:0:4365
-12542:2:2137
-12543:2:2141
-12544:2:2142
-12545:2:2150
-12546:2:2151
-12547:2:2155
-12548:2:2156
-12549:2:2150
-12550:2:2151
-12551:2:2155
-12552:2:2156
-12553:2:2164
-12554:2:2169
-12555:2:2173
-12556:2:2174
-12557:2:2181
-12558:2:2182
-12559:2:2193
-12560:2:2194
-12561:2:2195
-12562:2:2193
-12563:2:2194
-12564:2:2195
-12565:2:2206
-12566:2:2211
-12567:2:2212
-12568:0:4365
-12569:2:2224
-12570:0:4365
-12571:3:3657
-12572:0:4365
-12573:2:2226
-12574:0:4365
-12575:3:3658
-12576:0:4365
-12577:2:1936
-12578:0:4365
-12579:2:2129
-12580:0:4365
-12581:2:2130
-12582:0:4365
-12583:2:2134
-12584:0:4365
-12585:3:3657
-12586:0:4365
-12587:2:2136
-12588:0:4365
-12589:3:3658
-12590:0:4365
-12591:2:2137
-12592:2:2141
-12593:2:2142
-12594:2:2150
-12595:2:2151
-12596:2:2155
-12597:2:2156
-12598:2:2150
-12599:2:2151
-12600:2:2152
-12601:2:2164
-12602:2:2169
-12603:2:2173
-12604:2:2174
-12605:2:2181
-12606:2:2182
-12607:2:2193
-12608:2:2194
-12609:2:2195
-12610:2:2193
-12611:2:2194
-12612:2:2195
-12613:2:2206
-12614:2:2211
-12615:2:2212
-12616:0:4365
-12617:2:2224
-12618:0:4365
-12619:3:3657
-12620:0:4365
-12621:2:2226
-12622:0:4365
-12623:3:3658
-12624:0:4365
-12625:2:2230
-12626:0:4365
-12627:3:3657
-12628:0:4365
-12629:2:2235
-12630:2:2239
-12631:2:2240
-12632:2:2248
-12633:2:2249
-12634:2:2253
-12635:2:2254
-12636:2:2248
-12637:2:2249
-12638:2:2250
-12639:2:2262
-12640:2:2267
-12641:2:2271
-12642:2:2272
-12643:2:2279
-12644:2:2280
-12645:2:2291
-12646:2:2292
-12647:2:2293
-12648:2:2291
-12649:2:2292
-12650:2:2293
-12651:2:2304
-12652:2:2309
-12653:2:2310
-12654:0:4365
-12655:3:3658
-12656:0:4365
-12657:2:2322
-12658:0:4365
-12659:2:1169
-12660:0:4365
-12661:3:3657
-12662:0:4365
-12663:2:1170
-12664:0:4365
-12665:3:3658
-12666:0:4365
-12667:3:3659
-12668:0:4365
-12669:3:3665
-12670:0:4365
-12671:3:3666
-12672:0:4365
-12673:3:3667
-12674:0:4365
-12675:3:3668
-12676:0:4365
-12677:3:3669
-12678:3:3673
-12679:3:3674
-12680:3:3682
-12681:3:3683
-12682:3:3687
-12683:3:3688
-12684:3:3682
-12685:3:3683
-12686:3:3687
-12687:3:3688
-12688:3:3696
-12689:3:3701
-12690:3:3705
-12691:3:3706
-12692:3:3713
-12693:3:3714
-12694:3:3725
-12695:3:3726
-12696:3:3727
-12697:3:3725
-12698:3:3726
-12699:3:3727
-12700:3:3738
-12701:3:3743
-12702:3:3744
-12703:0:4365
-12704:3:3756
-12705:0:4365
-12706:3:3757
-12707:0:4365
-12708:2:1173
-12709:0:4365
-12710:3:3758
-12711:0:4365
-12712:2:1179
-12713:0:4365
-12714:2:1180
-12715:0:4365
-12716:3:3757
-12717:0:4365
-12718:2:1181
-12719:2:1185
-12720:2:1186
-12721:2:1194
-12722:2:1195
-12723:2:1199
-12724:2:1200
-12725:2:1194
-12726:2:1195
-12727:2:1199
-12728:2:1200
-12729:2:1208
-12730:2:1213
-12731:2:1217
-12732:2:1218
-12733:2:1225
-12734:2:1226
-12735:2:1237
-12736:2:1238
-12737:2:1239
-12738:2:1237
-12739:2:1238
-12740:2:1239
-12741:2:1250
-12742:2:1255
-12743:2:1256
-12744:0:4365
-12745:3:3758
-12746:0:4365
-12747:2:1268
-12748:0:4365
-12749:3:3757
-12750:0:4365
-12751:2:1270
-12752:0:4365
-12753:3:3758
-12754:0:4365
-12755:2:1271
-12756:2:1275
-12757:2:1276
-12758:2:1284
-12759:2:1285
-12760:2:1289
-12761:2:1290
-12762:2:1284
-12763:2:1285
-12764:2:1289
-12765:2:1290
-12766:2:1298
-12767:2:1303
-12768:2:1307
-12769:2:1308
-12770:2:1315
-12771:2:1316
-12772:2:1327
-12773:2:1328
-12774:2:1329
-12775:2:1327
-12776:2:1328
-12777:2:1329
-12778:2:1340
-12779:2:1345
-12780:2:1346
-12781:0:4365
-12782:2:1358
-12783:0:4365
-12784:2:1360
-12785:0:4365
-12786:3:3757
-12787:0:4365
-12788:2:1361
-12789:0:4365
-12790:3:3758
-12791:0:4365
-12792:2:1362
-12793:2:1366
-12794:2:1367
-12795:2:1375
-12796:2:1376
-12797:2:1380
-12798:2:1381
-12799:2:1375
-12800:2:1376
-12801:2:1380
-12802:2:1381
-12803:2:1389
-12804:2:1394
-12805:2:1398
-12806:2:1399
-12807:2:1406
-12808:2:1407
-12809:2:1418
-12810:2:1419
-12811:2:1420
-12812:2:1418
-12813:2:1419
-12814:2:1420
-12815:2:1431
-12816:2:1436
-12817:2:1437
-12818:0:4365
-12819:2:1449
-12820:0:4365
-12821:3:3757
-12822:0:4365
-12823:2:1451
-12824:0:4365
-12825:3:3758
-12826:0:4365
-12827:2:1652
-12828:0:4365
-12829:2:1653
-12830:0:4365
-12831:2:1657
-12832:0:4365
-12833:2:1180
-12834:0:4365
-12835:3:3757
-12836:0:4365
-12837:2:1181
-12838:2:1185
-12839:2:1186
-12840:2:1194
-12841:2:1195
-12842:2:1199
-12843:2:1200
-12844:2:1194
-12845:2:1195
-12846:2:1196
-12847:2:1208
-12848:2:1213
-12849:2:1217
-12850:2:1218
-12851:2:1225
-12852:2:1226
-12853:2:1237
-12854:2:1238
-12855:2:1239
-12856:2:1237
-12857:2:1238
-12858:2:1239
-12859:2:1250
-12860:2:1255
-12861:2:1256
-12862:0:4365
-12863:3:3758
-12864:0:4365
-12865:2:1268
-12866:0:4365
-12867:3:3757
-12868:0:4365
-12869:2:1270
-12870:0:4365
-12871:3:3758
-12872:0:4365
-12873:2:1271
-12874:2:1275
-12875:2:1276
-12876:2:1284
-12877:2:1285
-12878:2:1289
-12879:2:1290
-12880:2:1284
-12881:2:1285
-12882:2:1289
-12883:2:1290
-12884:2:1298
-12885:2:1303
-12886:2:1307
-12887:2:1308
-12888:2:1315
-12889:2:1316
-12890:2:1327
-12891:2:1328
-12892:2:1329
-12893:2:1327
-12894:2:1328
-12895:2:1329
-12896:2:1340
-12897:2:1345
-12898:2:1346
-12899:0:4365
-12900:2:1358
-12901:0:4365
-12902:2:1454
-12903:0:4365
-12904:3:3757
-12905:0:4365
-12906:2:1455
-12907:0:4365
-12908:3:3758
-12909:0:4365
-12910:2:1652
-12911:0:4365
-12912:2:1653
-12913:0:4365
-12914:2:1657
-12915:0:4365
-12916:2:1660
-12917:0:4365
-12918:3:3757
-12919:0:4365
-12920:2:1665
-12921:2:1669
-12922:2:1670
-12923:2:1678
-12924:2:1679
-12925:2:1683
-12926:2:1684
-12927:2:1678
-12928:2:1679
-12929:2:1680
-12930:2:1692
-12931:2:1697
-12932:2:1701
-12933:2:1702
-12934:2:1709
-12935:2:1710
-12936:2:1721
-12937:2:1722
-12938:2:1723
-12939:2:1721
-12940:2:1722
-12941:2:1723
-12942:2:1734
-12943:2:1739
-12944:2:1740
-12945:0:4365
-12946:3:3758
-12947:0:4365
-12948:2:1752
-12949:0:4365
-12950:3:3757
-12951:0:4365
-12952:2:1754
-12953:0:4365
-12954:3:3758
-12955:0:4365
-12956:2:1755
-12957:2:1759
-12958:2:1760
-12959:2:1768
-12960:2:1769
-12961:2:1773
-12962:2:1774
-12963:2:1768
-12964:2:1769
-12965:2:1773
-12966:2:1774
-12967:2:1782
-12968:2:1787
-12969:2:1791
-12970:2:1792
-12971:2:1799
-12972:2:1800
-12973:2:1811
-12974:2:1812
-12975:2:1813
-12976:2:1811
-12977:2:1812
-12978:2:1813
-12979:2:1824
-12980:2:1829
-12981:2:1830
-12982:0:4365
-12983:2:1842
-12984:0:4365
-12985:3:3757
-12986:0:4365
-12987:2:1844
-12988:0:4365
-12989:3:3758
-12990:0:4365
-12991:2:1845
-12992:2:1849
-12993:2:1850
-12994:2:1858
-12995:2:1859
-12996:2:1863
-12997:2:1864
-12998:2:1858
-12999:2:1859
-13000:2:1863
-13001:2:1864
-13002:2:1872
-13003:2:1877
-13004:2:1881
-13005:2:1882
-13006:2:1889
-13007:2:1890
-13008:2:1901
-13009:2:1902
-13010:2:1903
-13011:2:1901
-13012:2:1902
-13013:2:1903
-13014:2:1914
-13015:2:1919
-13016:2:1920
-13017:0:4365
-13018:2:1932
-13019:0:4365
-13020:3:3757
-13021:0:4365
-13022:2:1934
-13023:0:4365
-13024:3:3758
-13025:0:4365
-13026:2:1935
-13027:0:4365
-13028:2:1936
-13029:0:4365
-13030:2:2129
-13031:0:4365
-13032:2:2130
-13033:0:4365
-13034:2:2134
-13035:0:4365
-13036:3:3757
-13037:0:4365
-13038:2:2136
-13039:0:4365
-13040:3:3758
-13041:0:4365
-13042:2:2137
-13043:2:2141
-13044:2:2142
-13045:2:2150
-13046:2:2151
-13047:2:2155
-13048:2:2156
-13049:2:2150
-13050:2:2151
-13051:2:2155
-13052:2:2156
-13053:2:2164
-13054:2:2169
-13055:2:2173
-13056:2:2174
-13057:2:2181
-13058:2:2182
-13059:2:2193
-13060:2:2194
-13061:2:2195
-13062:2:2193
-13063:2:2194
-13064:2:2195
-13065:2:2206
-13066:2:2211
-13067:2:2212
-13068:0:4365
-13069:2:2224
-13070:0:4365
-13071:3:3757
-13072:0:4365
-13073:2:2226
-13074:0:4365
-13075:3:3758
-13076:0:4365
-13077:2:1936
-13078:0:4365
-13079:2:2129
-13080:0:4365
-13081:2:2130
-13082:0:4365
-13083:2:2134
-13084:0:4365
-13085:3:3757
-13086:0:4365
-13087:2:2136
-13088:0:4365
-13089:3:3758
-13090:0:4365
-13091:2:2137
-13092:2:2141
-13093:2:2142
-13094:2:2150
-13095:2:2151
-13096:2:2155
-13097:2:2156
-13098:2:2150
-13099:2:2151
-13100:2:2152
-13101:2:2164
-13102:2:2169
-13103:2:2173
-13104:2:2174
-13105:2:2181
-13106:2:2182
-13107:2:2193
-13108:2:2194
-13109:2:2195
-13110:2:2193
-13111:2:2194
-13112:2:2195
-13113:2:2206
-13114:2:2211
-13115:2:2212
-13116:0:4365
-13117:2:2224
-13118:0:4365
-13119:3:3757
-13120:0:4365
-13121:2:2226
-13122:0:4365
-13123:3:3758
-13124:0:4365
-13125:2:2230
-13126:0:4365
-13127:3:3757
-13128:0:4365
-13129:2:2235
-13130:2:2239
-13131:2:2240
-13132:2:2248
-13133:2:2249
-13134:2:2253
-13135:2:2254
-13136:2:2248
-13137:2:2249
-13138:2:2250
-13139:2:2262
-13140:2:2267
-13141:2:2271
-13142:2:2272
-13143:2:2279
-13144:2:2280
-13145:2:2291
-13146:2:2292
-13147:2:2293
-13148:2:2291
-13149:2:2292
-13150:2:2293
-13151:2:2304
-13152:2:2309
-13153:2:2310
-13154:0:4365
-13155:3:3758
-13156:0:4365
-13157:2:2322
-13158:0:4365
-13159:2:1169
-13160:0:4365
-13161:3:3757
-13162:0:4365
-13163:2:1170
-13164:0:4365
-13165:3:3758
-13166:0:4365
-13167:3:3759
-13168:0:4365
-13169:3:3972
-13170:0:4365
-13171:3:3980
-13172:0:4365
-13173:3:3981
-13174:3:3985
-13175:3:3986
-13176:3:3994
-13177:3:3995
-13178:3:3999
-13179:3:4000
-13180:3:3994
-13181:3:3995
-13182:3:3999
-13183:3:4000
-13184:3:4008
-13185:3:4013
-13186:3:4017
-13187:3:4018
-13188:3:4025
-13189:3:4026
-13190:3:4037
-13191:3:4038
-13192:3:4039
-13193:3:4037
-13194:3:4038
-13195:3:4039
-13196:3:4050
-13197:3:4055
-13198:3:4056
-13199:0:4365
-13200:3:4068
-13201:0:4365
-13202:3:4069
-13203:0:4365
-13204:2:1173
-13205:0:4365
-13206:3:4070
-13207:0:4365
-13208:2:1179
-13209:0:4365
-13210:2:1180
-13211:0:4365
-13212:3:4069
-13213:0:4365
-13214:2:1181
-13215:2:1185
-13216:2:1186
-13217:2:1194
-13218:2:1195
-13219:2:1199
-13220:2:1200
-13221:2:1194
-13222:2:1195
-13223:2:1199
-13224:2:1200
-13225:2:1208
-13226:2:1213
-13227:2:1217
-13228:2:1218
-13229:2:1225
-13230:2:1226
-13231:2:1237
-13232:2:1238
-13233:2:1239
-13234:2:1237
-13235:2:1238
-13236:2:1239
-13237:2:1250
-13238:2:1255
-13239:2:1256
-13240:0:4365
-13241:3:4070
-13242:0:4365
-13243:2:1268
-13244:0:4365
-13245:3:4069
-13246:0:4365
-13247:2:1270
-13248:0:4365
-13249:3:4070
-13250:0:4365
-13251:2:1271
-13252:2:1275
-13253:2:1276
-13254:2:1284
-13255:2:1285
-13256:2:1289
-13257:2:1290
-13258:2:1284
-13259:2:1285
-13260:2:1289
-13261:2:1290
-13262:2:1298
-13263:2:1303
-13264:2:1307
-13265:2:1308
-13266:2:1315
-13267:2:1316
-13268:2:1327
-13269:2:1328
-13270:2:1329
-13271:2:1327
-13272:2:1328
-13273:2:1329
-13274:2:1340
-13275:2:1345
-13276:2:1346
-13277:0:4365
-13278:2:1358
-13279:0:4365
-13280:2:1360
-13281:0:4365
-13282:3:4069
-13283:0:4365
-13284:2:1361
-13285:0:4365
-13286:3:4070
-13287:0:4365
-13288:2:1362
-13289:2:1366
-13290:2:1367
-13291:2:1375
-13292:2:1376
-13293:2:1380
-13294:2:1381
-13295:2:1375
-13296:2:1376
-13297:2:1380
-13298:2:1381
-13299:2:1389
-13300:2:1394
-13301:2:1398
-13302:2:1399
-13303:2:1406
-13304:2:1407
-13305:2:1418
-13306:2:1419
-13307:2:1420
-13308:2:1418
-13309:2:1419
-13310:2:1420
-13311:2:1431
-13312:2:1436
-13313:2:1437
-13314:0:4365
-13315:2:1449
-13316:0:4365
-13317:3:4069
-13318:0:4365
-13319:2:1451
-13320:0:4365
-13321:3:4070
-13322:0:4365
-13323:2:1652
-13324:0:4365
-13325:2:1653
-13326:0:4365
-13327:2:1657
-13328:0:4365
-13329:2:1180
-13330:0:4365
-13331:3:4069
-13332:0:4365
-13333:2:1181
-13334:2:1185
-13335:2:1186
-13336:2:1194
-13337:2:1195
-13338:2:1199
-13339:2:1200
-13340:2:1194
-13341:2:1195
-13342:2:1196
-13343:2:1208
-13344:2:1213
-13345:2:1217
-13346:2:1218
-13347:2:1225
-13348:2:1226
-13349:2:1237
-13350:2:1238
-13351:2:1239
-13352:2:1237
-13353:2:1238
-13354:2:1239
-13355:2:1250
-13356:2:1255
-13357:2:1256
-13358:0:4365
-13359:3:4070
-13360:0:4365
-13361:2:1268
-13362:0:4365
-13363:3:4069
-13364:0:4365
-13365:2:1270
-13366:0:4365
-13367:3:4070
-13368:0:4365
-13369:2:1271
-13370:2:1275
-13371:2:1276
-13372:2:1284
-13373:2:1285
-13374:2:1289
-13375:2:1290
-13376:2:1284
-13377:2:1285
-13378:2:1289
-13379:2:1290
-13380:2:1298
-13381:2:1303
-13382:2:1307
-13383:2:1308
-13384:2:1315
-13385:2:1316
-13386:2:1327
-13387:2:1328
-13388:2:1329
-13389:2:1327
-13390:2:1328
-13391:2:1329
-13392:2:1340
-13393:2:1345
-13394:2:1346
-13395:0:4365
-13396:2:1358
-13397:0:4365
-13398:2:1454
-13399:0:4365
-13400:3:4069
-13401:0:4365
-13402:2:1455
-13403:0:4365
-13404:3:4070
-13405:0:4365
-13406:2:1652
-13407:0:4365
-13408:2:1653
-13409:0:4365
-13410:2:1657
-13411:0:4365
-13412:2:1660
-13413:0:4365
-13414:3:4069
-13415:0:4365
-13416:2:1665
-13417:2:1669
-13418:2:1670
-13419:2:1678
-13420:2:1679
-13421:2:1683
-13422:2:1684
-13423:2:1678
-13424:2:1679
-13425:2:1680
-13426:2:1692
-13427:2:1697
-13428:2:1701
-13429:2:1702
-13430:2:1709
-13431:2:1710
-13432:2:1721
-13433:2:1722
-13434:2:1723
-13435:2:1721
-13436:2:1722
-13437:2:1723
-13438:2:1734
-13439:2:1739
-13440:2:1740
-13441:0:4365
-13442:3:4070
-13443:0:4365
-13444:2:1752
-13445:0:4365
-13446:3:4069
-13447:0:4365
-13448:2:1754
-13449:0:4365
-13450:3:4070
-13451:0:4365
-13452:2:1755
-13453:2:1759
-13454:2:1760
-13455:2:1768
-13456:2:1769
-13457:2:1773
-13458:2:1774
-13459:2:1768
-13460:2:1769
-13461:2:1773
-13462:2:1774
-13463:2:1782
-13464:2:1787
-13465:2:1791
-13466:2:1792
-13467:2:1799
-13468:2:1800
-13469:2:1811
-13470:2:1812
-13471:2:1813
-13472:2:1811
-13473:2:1812
-13474:2:1813
-13475:2:1824
-13476:2:1829
-13477:2:1830
-13478:0:4365
-13479:2:1842
-13480:0:4365
-13481:3:4069
-13482:0:4365
-13483:2:1844
-13484:0:4365
-13485:3:4070
-13486:0:4365
-13487:2:1845
-13488:2:1849
-13489:2:1850
-13490:2:1858
-13491:2:1859
-13492:2:1863
-13493:2:1864
-13494:2:1858
-13495:2:1859
-13496:2:1863
-13497:2:1864
-13498:2:1872
-13499:2:1877
-13500:2:1881
-13501:2:1882
-13502:2:1889
-13503:2:1890
-13504:2:1901
-13505:2:1902
-13506:2:1903
-13507:2:1901
-13508:2:1902
-13509:2:1903
-13510:2:1914
-13511:2:1919
-13512:2:1920
-13513:0:4365
-13514:2:1932
-13515:0:4365
-13516:3:4069
-13517:0:4365
-13518:2:1934
-13519:0:4365
-13520:3:4070
-13521:0:4365
-13522:2:1935
-13523:0:4365
-13524:2:1936
-13525:0:4365
-13526:2:2129
-13527:0:4365
-13528:2:2130
-13529:0:4365
-13530:2:2134
-13531:0:4365
-13532:3:4069
-13533:0:4365
-13534:2:2136
-13535:0:4365
-13536:3:4070
-13537:0:4365
-13538:2:2137
-13539:2:2141
-13540:2:2142
-13541:2:2150
-13542:2:2151
-13543:2:2155
-13544:2:2156
-13545:2:2150
-13546:2:2151
-13547:2:2155
-13548:2:2156
-13549:2:2164
-13550:2:2169
-13551:2:2173
-13552:2:2174
-13553:2:2181
-13554:2:2182
-13555:2:2193
-13556:2:2194
-13557:2:2195
-13558:2:2193
-13559:2:2194
-13560:2:2195
-13561:2:2206
-13562:2:2211
-13563:2:2212
-13564:0:4365
-13565:2:2224
-13566:0:4365
-13567:3:4069
-13568:0:4365
-13569:2:2226
-13570:0:4365
-13571:3:4070
-13572:0:4365
-13573:2:1936
-13574:0:4365
-13575:2:2129
-13576:0:4365
-13577:2:2130
-13578:0:4365
-13579:2:2134
-13580:0:4365
-13581:3:4069
-13582:0:4365
-13583:2:2136
-13584:0:4365
-13585:3:4070
-13586:0:4365
-13587:2:2137
-13588:2:2141
-13589:2:2142
-13590:2:2150
-13591:2:2151
-13592:2:2155
-13593:2:2156
-13594:2:2150
-13595:2:2151
-13596:2:2152
-13597:2:2164
-13598:2:2169
-13599:2:2173
-13600:2:2174
-13601:2:2181
-13602:2:2182
-13603:2:2193
-13604:2:2194
-13605:2:2195
-13606:2:2193
-13607:2:2194
-13608:2:2195
-13609:2:2206
-13610:2:2211
-13611:2:2212
-13612:0:4365
-13613:2:2224
-13614:0:4365
-13615:3:4069
-13616:0:4365
-13617:2:2226
-13618:0:4365
-13619:3:4070
-13620:0:4365
-13621:2:2230
-13622:0:4365
-13623:3:4069
-13624:0:4365
-13625:2:2235
-13626:2:2239
-13627:2:2240
-13628:2:2248
-13629:2:2249
-13630:2:2253
-13631:2:2254
-13632:2:2248
-13633:2:2249
-13634:2:2250
-13635:2:2262
-13636:2:2267
-13637:2:2271
-13638:2:2272
-13639:2:2279
-13640:2:2280
-13641:2:2291
-13642:2:2292
-13643:2:2293
-13644:2:2291
-13645:2:2292
-13646:2:2293
-13647:2:2304
-13648:2:2309
-13649:2:2310
-13650:0:4365
-13651:3:4070
-13652:0:4365
-13653:2:2322
-13654:0:4365
-13655:2:1169
-13656:0:4365
-13657:3:4069
-13658:0:4365
-13659:2:1170
-13660:0:4365
-13661:3:4070
-13662:0:4365
-13663:3:4071
-13664:0:4365
-13665:3:4081
-13666:0:4365
-13667:3:3666
-13668:0:4365
-13669:3:3667
-13670:0:4365
-13671:3:3668
-13672:0:4365
-13673:3:3669
-13674:3:3673
-13675:3:3674
-13676:3:3682
-13677:3:3683
-13678:3:3687
-13679:3:3688
-13680:3:3682
-13681:3:3683
-13682:3:3687
-13683:3:3688
-13684:3:3696
-13685:3:3701
-13686:3:3705
-13687:3:3706
-13688:3:3713
-13689:3:3714
-13690:3:3725
-13691:3:3726
-13692:3:3727
-13693:3:3725
-13694:3:3726
-13695:3:3727
-13696:3:3738
-13697:3:3743
-13698:3:3744
-13699:0:4365
-13700:3:3756
-13701:0:4365
-13702:3:3757
-13703:0:4365
-13704:2:1173
-13705:0:4365
-13706:3:3758
-13707:0:4365
-13708:2:1179
-13709:0:4365
-13710:2:1180
-13711:0:4365
-13712:3:3757
-13713:0:4365
-13714:2:1181
-13715:2:1185
-13716:2:1186
-13717:2:1194
-13718:2:1195
-13719:2:1199
-13720:2:1200
-13721:2:1194
-13722:2:1195
-13723:2:1199
-13724:2:1200
-13725:2:1208
-13726:2:1213
-13727:2:1217
-13728:2:1218
-13729:2:1225
-13730:2:1226
-13731:2:1237
-13732:2:1238
-13733:2:1239
-13734:2:1237
-13735:2:1238
-13736:2:1239
-13737:2:1250
-13738:2:1255
-13739:2:1256
-13740:0:4365
-13741:3:3758
-13742:0:4365
-13743:2:1268
-13744:0:4365
-13745:3:3757
-13746:0:4365
-13747:2:1270
-13748:0:4365
-13749:3:3758
-13750:0:4365
-13751:2:1271
-13752:2:1275
-13753:2:1276
-13754:2:1284
-13755:2:1285
-13756:2:1289
-13757:2:1290
-13758:2:1284
-13759:2:1285
-13760:2:1289
-13761:2:1290
-13762:2:1298
-13763:2:1303
-13764:2:1307
-13765:2:1308
-13766:2:1315
-13767:2:1316
-13768:2:1327
-13769:2:1328
-13770:2:1329
-13771:2:1327
-13772:2:1328
-13773:2:1329
-13774:2:1340
-13775:2:1345
-13776:2:1346
-13777:0:4365
-13778:2:1358
-13779:0:4365
-13780:2:1360
-13781:0:4365
-13782:3:3757
-13783:0:4365
-13784:2:1361
-13785:0:4365
-13786:3:3758
-13787:0:4365
-13788:2:1362
-13789:2:1366
-13790:2:1367
-13791:2:1375
-13792:2:1376
-13793:2:1380
-13794:2:1381
-13795:2:1375
-13796:2:1376
-13797:2:1380
-13798:2:1381
-13799:2:1389
-13800:2:1394
-13801:2:1398
-13802:2:1399
-13803:2:1406
-13804:2:1407
-13805:2:1418
-13806:2:1419
-13807:2:1420
-13808:2:1418
-13809:2:1419
-13810:2:1420
-13811:2:1431
-13812:2:1436
-13813:2:1437
-13814:0:4365
-13815:2:1449
-13816:0:4365
-13817:3:3757
-13818:0:4365
-13819:2:1451
-13820:0:4365
-13821:3:3758
-13822:0:4365
-13823:2:1652
-13824:0:4365
-13825:2:1653
-13826:0:4365
-13827:2:1657
-13828:0:4365
-13829:2:1180
-13830:0:4365
-13831:3:3757
-13832:0:4365
-13833:2:1181
-13834:2:1185
-13835:2:1186
-13836:2:1194
-13837:2:1195
-13838:2:1199
-13839:2:1200
-13840:2:1194
-13841:2:1195
-13842:2:1196
-13843:2:1208
-13844:2:1213
-13845:2:1217
-13846:2:1218
-13847:2:1225
-13848:2:1226
-13849:2:1237
-13850:2:1238
-13851:2:1239
-13852:2:1237
-13853:2:1238
-13854:2:1239
-13855:2:1250
-13856:2:1255
-13857:2:1256
-13858:0:4365
-13859:3:3758
-13860:0:4365
-13861:2:1268
-13862:0:4365
-13863:3:3757
-13864:0:4365
-13865:2:1270
-13866:0:4365
-13867:3:3758
-13868:0:4365
-13869:2:1271
-13870:2:1275
-13871:2:1276
-13872:2:1284
-13873:2:1285
-13874:2:1289
-13875:2:1290
-13876:2:1284
-13877:2:1285
-13878:2:1289
-13879:2:1290
-13880:2:1298
-13881:2:1303
-13882:2:1307
-13883:2:1308
-13884:2:1315
-13885:2:1316
-13886:2:1327
-13887:2:1328
-13888:2:1329
-13889:2:1327
-13890:2:1328
-13891:2:1329
-13892:2:1340
-13893:2:1345
-13894:2:1346
-13895:0:4365
-13896:2:1358
-13897:0:4365
-13898:2:1454
-13899:0:4365
-13900:3:3757
-13901:0:4365
-13902:2:1455
-13903:0:4365
-13904:3:3758
-13905:0:4365
-13906:2:1652
-13907:0:4365
-13908:2:1653
-13909:0:4365
-13910:2:1657
-13911:0:4365
-13912:2:1660
-13913:0:4365
-13914:3:3757
-13915:0:4365
-13916:2:1665
-13917:2:1669
-13918:2:1670
-13919:2:1678
-13920:2:1679
-13921:2:1683
-13922:2:1684
-13923:2:1678
-13924:2:1679
-13925:2:1680
-13926:2:1692
-13927:2:1697
-13928:2:1701
-13929:2:1702
-13930:2:1709
-13931:2:1710
-13932:2:1721
-13933:2:1722
-13934:2:1723
-13935:2:1721
-13936:2:1722
-13937:2:1723
-13938:2:1734
-13939:2:1739
-13940:2:1740
-13941:0:4365
-13942:3:3758
-13943:0:4365
-13944:2:1752
-13945:0:4365
-13946:3:3757
-13947:0:4365
-13948:2:1754
-13949:0:4365
-13950:3:3758
-13951:0:4365
-13952:2:1755
-13953:2:1759
-13954:2:1760
-13955:2:1768
-13956:2:1769
-13957:2:1773
-13958:2:1774
-13959:2:1768
-13960:2:1769
-13961:2:1773
-13962:2:1774
-13963:2:1782
-13964:2:1787
-13965:2:1791
-13966:2:1792
-13967:2:1799
-13968:2:1800
-13969:2:1811
-13970:2:1812
-13971:2:1813
-13972:2:1811
-13973:2:1812
-13974:2:1813
-13975:2:1824
-13976:2:1829
-13977:2:1830
-13978:0:4365
-13979:2:1842
-13980:0:4365
-13981:3:3757
-13982:0:4365
-13983:2:1844
-13984:0:4365
-13985:3:3758
-13986:0:4365
-13987:2:1845
-13988:2:1849
-13989:2:1850
-13990:2:1858
-13991:2:1859
-13992:2:1863
-13993:2:1864
-13994:2:1858
-13995:2:1859
-13996:2:1863
-13997:2:1864
-13998:2:1872
-13999:2:1877
-14000:2:1881
-14001:2:1882
-14002:2:1889
-14003:2:1890
-14004:2:1901
-14005:2:1902
-14006:2:1903
-14007:2:1901
-14008:2:1902
-14009:2:1903
-14010:2:1914
-14011:2:1919
-14012:2:1920
-14013:0:4365
-14014:2:1932
-14015:0:4365
-14016:3:3757
-14017:0:4365
-14018:2:1934
-14019:0:4365
-14020:3:3758
-14021:0:4365
-14022:2:1935
-14023:0:4365
-14024:2:1936
-14025:0:4365
-14026:2:2129
-14027:0:4365
-14028:2:2130
-14029:0:4365
-14030:2:2134
-14031:0:4365
-14032:3:3757
-14033:0:4365
-14034:2:2136
-14035:0:4365
-14036:3:3758
-14037:0:4365
-14038:2:2137
-14039:2:2141
-14040:2:2142
-14041:2:2150
-14042:2:2151
-14043:2:2155
-14044:2:2156
-14045:2:2150
-14046:2:2151
-14047:2:2155
-14048:2:2156
-14049:2:2164
-14050:2:2169
-14051:2:2173
-14052:2:2174
-14053:2:2181
-14054:2:2182
-14055:2:2193
-14056:2:2194
-14057:2:2195
-14058:2:2193
-14059:2:2194
-14060:2:2195
-14061:2:2206
-14062:2:2211
-14063:2:2212
-14064:0:4365
-14065:2:2224
-14066:0:4365
-14067:3:3757
-14068:0:4365
-14069:2:2226
-14070:0:4365
-14071:3:3758
-14072:0:4365
-14073:2:1936
-14074:0:4365
-14075:2:2129
-14076:0:4365
-14077:2:2130
-14078:0:4365
-14079:2:2134
-14080:0:4365
-14081:3:3757
-14082:0:4365
-14083:2:2136
-14084:0:4365
-14085:3:3758
-14086:0:4365
-14087:2:2137
-14088:2:2141
-14089:2:2142
-14090:2:2150
-14091:2:2151
-14092:2:2155
-14093:2:2156
-14094:2:2150
-14095:2:2151
-14096:2:2152
-14097:2:2164
-14098:2:2169
-14099:2:2173
-14100:2:2174
-14101:2:2181
-14102:2:2182
-14103:2:2193
-14104:2:2194
-14105:2:2195
-14106:2:2193
-14107:2:2194
-14108:2:2195
-14109:2:2206
-14110:2:2211
-14111:2:2212
-14112:0:4365
-14113:2:2224
-14114:0:4365
-14115:3:3757
-14116:0:4365
-14117:2:2226
-14118:0:4365
-14119:3:3758
-14120:0:4365
-14121:2:2230
-14122:0:4365
-14123:3:3757
-14124:0:4365
-14125:2:2235
-14126:2:2239
-14127:2:2240
-14128:2:2248
-14129:2:2249
-14130:2:2253
-14131:2:2254
-14132:2:2248
-14133:2:2249
-14134:2:2250
-14135:2:2262
-14136:2:2267
-14137:2:2271
-14138:2:2272
-14139:2:2279
-14140:2:2280
-14141:2:2291
-14142:2:2292
-14143:2:2293
-14144:2:2291
-14145:2:2292
-14146:2:2293
-14147:2:2304
-14148:2:2309
-14149:2:2310
-14150:0:4365
-14151:3:3758
-14152:0:4365
-14153:2:2322
-14154:0:4365
-14155:2:1169
-14156:0:4365
-14157:3:3757
-14158:0:4365
-14159:2:1170
-14160:0:4365
-14161:3:3758
-14162:0:4365
-14163:3:3759
-14164:0:4365
-14165:3:3972
-14166:0:4365
-14167:3:4077
-14168:0:4365
-14169:3:4078
-14170:0:4365
-14171:3:4082
-14172:0:4365
-14173:3:4088
-14174:0:4365
-14175:3:4092
-14176:3:4093
-14177:3:4097
-14178:3:4101
-14179:3:4102
-14180:3:4097
-14181:3:4101
-14182:3:4102
-14183:3:4106
-14184:3:4114
-14185:3:4115
-14186:3:4120
-14187:3:4127
-14188:3:4128
-14189:3:4127
-14190:3:4128
-14191:3:4135
-14192:3:4140
-14193:0:4365
-14194:3:4151
-14195:0:4365
-14196:3:4155
-14197:3:4156
-14198:3:4160
-14199:3:4164
-14200:3:4165
-14201:3:4160
-14202:3:4164
-14203:3:4165
-14204:3:4169
-14205:3:4177
-14206:3:4178
-14207:3:4183
-14208:3:4190
-14209:3:4191
-14210:3:4190
-14211:3:4191
-14212:3:4198
-14213:3:4203
-14214:0:4365
-14215:3:4151
-14216:0:4365
-14217:3:4155
-14218:3:4156
-14219:3:4160
-14220:3:4164
-14221:3:4165
-14222:3:4160
-14223:3:4164
-14224:3:4165
-14225:3:4169
-14226:3:4177
-14227:3:4178
-14228:3:4183
-14229:3:4190
-14230:3:4191
-14231:3:4190
-14232:3:4191
-14233:3:4198
-14234:3:4203
-14235:0:4365
-14236:3:4214
-14237:0:4365
-14238:3:4222
-14239:3:4223
-14240:3:4227
-14241:3:4231
-14242:3:4232
-14243:3:4227
-14244:3:4231
-14245:3:4232
-14246:3:4236
-14247:3:4244
-14248:3:4245
-14249:3:4250
-14250:3:4257
-14251:3:4258
-14252:3:4257
-14253:3:4258
-14254:3:4265
-14255:3:4270
-14256:0:4365
-14257:3:4285
-14258:0:4365
-14259:3:4286
-14260:0:4365
-14261:2:1173
-14262:0:4365
-14263:3:4287
-14264:0:4365
-14265:2:1179
-14266:0:4365
-14267:2:1180
-14268:0:4365
-14269:3:4286
-14270:0:4365
-14271:2:1181
-14272:2:1185
-14273:2:1186
-14274:2:1194
-14275:2:1195
-14276:2:1199
-14277:2:1200
-14278:2:1194
-14279:2:1195
-14280:2:1199
-14281:2:1200
-14282:2:1208
-14283:2:1213
-14284:2:1217
-14285:2:1218
-14286:2:1225
-14287:2:1226
-14288:2:1237
-14289:2:1238
-14290:2:1239
-14291:2:1237
-14292:2:1238
-14293:2:1239
-14294:2:1250
-14295:2:1255
-14296:2:1256
-14297:0:4365
-14298:3:4287
-14299:0:4365
-14300:2:1268
-14301:0:4365
-14302:3:4286
-14303:0:4365
-14304:2:1270
-14305:0:4365
-14306:3:4287
-14307:0:4365
-14308:2:1271
-14309:2:1275
-14310:2:1276
-14311:2:1284
-14312:2:1285
-14313:2:1289
-14314:2:1290
-14315:2:1284
-14316:2:1285
-14317:2:1289
-14318:2:1290
-14319:2:1298
-14320:2:1303
-14321:2:1307
-14322:2:1308
-14323:2:1315
-14324:2:1316
-14325:2:1327
-14326:2:1328
-14327:2:1329
-14328:2:1327
-14329:2:1328
-14330:2:1329
-14331:2:1340
-14332:2:1345
-14333:2:1346
-14334:0:4365
-14335:2:1358
-14336:0:4365
-14337:2:1360
-14338:0:4365
-14339:3:4286
-14340:0:4365
-14341:2:1361
-14342:0:4365
-14343:3:4287
-14344:0:4365
-14345:2:1362
-14346:2:1366
-14347:2:1367
-14348:2:1375
-14349:2:1376
-14350:2:1380
-14351:2:1381
-14352:2:1375
-14353:2:1376
-14354:2:1380
-14355:2:1381
-14356:2:1389
-14357:2:1394
-14358:2:1398
-14359:2:1399
-14360:2:1406
-14361:2:1407
-14362:2:1418
-14363:2:1419
-14364:2:1420
-14365:2:1418
-14366:2:1419
-14367:2:1420
-14368:2:1431
-14369:2:1436
-14370:2:1437
-14371:0:4365
-14372:2:1449
-14373:0:4365
-14374:3:4286
-14375:0:4365
-14376:2:1451
-14377:0:4365
-14378:3:4287
-14379:0:4365
-14380:2:1652
-14381:0:4365
-14382:2:1653
-14383:0:4365
-14384:2:1657
-14385:0:4365
-14386:2:1180
-14387:0:4365
-14388:3:4286
-14389:0:4365
-14390:2:1181
-14391:2:1185
-14392:2:1186
-14393:2:1194
-14394:2:1195
-14395:2:1199
-14396:2:1200
-14397:2:1194
-14398:2:1195
-14399:2:1196
-14400:2:1208
-14401:2:1213
-14402:2:1217
-14403:2:1218
-14404:2:1225
-14405:2:1226
-14406:2:1237
-14407:2:1238
-14408:2:1239
-14409:2:1237
-14410:2:1238
-14411:2:1239
-14412:2:1250
-14413:2:1255
-14414:2:1256
-14415:0:4365
-14416:3:4287
-14417:0:4365
-14418:2:1268
-14419:0:4365
-14420:3:4286
-14421:0:4365
-14422:2:1270
-14423:0:4365
-14424:3:4287
-14425:0:4365
-14426:2:1271
-14427:2:1275
-14428:2:1276
-14429:2:1284
-14430:2:1285
-14431:2:1289
-14432:2:1290
-14433:2:1284
-14434:2:1285
-14435:2:1289
-14436:2:1290
-14437:2:1298
-14438:2:1303
-14439:2:1307
-14440:2:1308
-14441:2:1315
-14442:2:1316
-14443:2:1327
-14444:2:1328
-14445:2:1329
-14446:2:1327
-14447:2:1328
-14448:2:1329
-14449:2:1340
-14450:2:1345
-14451:2:1346
-14452:0:4365
-14453:2:1358
-14454:0:4365
-14455:2:1454
-14456:0:4365
-14457:3:4286
-14458:0:4365
-14459:2:1455
-14460:0:4365
-14461:3:4287
-14462:0:4365
-14463:2:1652
-14464:0:4365
-14465:2:1653
-14466:0:4365
-14467:2:1657
-14468:0:4365
-14469:2:1660
-14470:0:4365
-14471:3:4286
-14472:0:4365
-14473:2:1665
-14474:2:1669
-14475:2:1670
-14476:2:1678
-14477:2:1679
-14478:2:1683
-14479:2:1684
-14480:2:1678
-14481:2:1679
-14482:2:1680
-14483:2:1692
-14484:2:1697
-14485:2:1701
-14486:2:1702
-14487:2:1709
-14488:2:1710
-14489:2:1721
-14490:2:1722
-14491:2:1723
-14492:2:1721
-14493:2:1722
-14494:2:1723
-14495:2:1734
-14496:2:1739
-14497:2:1740
-14498:0:4365
-14499:3:4287
-14500:0:4365
-14501:2:1752
-14502:0:4365
-14503:3:4286
-14504:0:4365
-14505:2:1754
-14506:0:4365
-14507:3:4287
-14508:0:4365
-14509:2:1755
-14510:2:1759
-14511:2:1760
-14512:2:1768
-14513:2:1769
-14514:2:1773
-14515:2:1774
-14516:2:1768
-14517:2:1769
-14518:2:1773
-14519:2:1774
-14520:2:1782
-14521:2:1787
-14522:2:1791
-14523:2:1792
-14524:2:1799
-14525:2:1800
-14526:2:1811
-14527:2:1812
-14528:2:1813
-14529:2:1811
-14530:2:1812
-14531:2:1813
-14532:2:1824
-14533:2:1829
-14534:2:1830
-14535:0:4365
-14536:2:1842
-14537:0:4365
-14538:3:4286
-14539:0:4365
-14540:2:1844
-14541:0:4365
-14542:3:4287
-14543:0:4365
-14544:2:1845
-14545:2:1849
-14546:2:1850
-14547:2:1858
-14548:2:1859
-14549:2:1863
-14550:2:1864
-14551:2:1858
-14552:2:1859
-14553:2:1863
-14554:2:1864
-14555:2:1872
-14556:2:1877
-14557:2:1881
-14558:2:1882
-14559:2:1889
-14560:2:1890
-14561:2:1901
-14562:2:1902
-14563:2:1903
-14564:2:1901
-14565:2:1902
-14566:2:1903
-14567:2:1914
-14568:2:1919
-14569:2:1920
-14570:0:4365
-14571:2:1932
-14572:0:4365
-14573:3:4286
-14574:0:4365
-14575:2:1934
-14576:0:4365
-14577:3:4287
-14578:0:4365
-14579:2:1935
-14580:0:4365
-14581:2:1936
-14582:0:4365
-14583:2:2129
-14584:0:4365
-14585:2:2130
-14586:0:4365
-14587:2:2134
-14588:0:4365
-14589:3:4286
-14590:0:4365
-14591:2:2136
-14592:0:4365
-14593:3:4287
-14594:0:4365
-14595:2:2137
-14596:2:2141
-14597:2:2142
-14598:2:2150
-14599:2:2151
-14600:2:2155
-14601:2:2156
-14602:2:2150
-14603:2:2151
-14604:2:2155
-14605:2:2156
-14606:2:2164
-14607:2:2169
-14608:2:2173
-14609:2:2174
-14610:2:2181
-14611:2:2182
-14612:2:2193
-14613:2:2194
-14614:2:2195
-14615:2:2193
-14616:2:2194
-14617:2:2195
-14618:2:2206
-14619:2:2211
-14620:2:2212
-14621:0:4365
-14622:2:2224
-14623:0:4365
-14624:3:4286
-14625:0:4365
-14626:2:2226
-14627:0:4365
-14628:3:4287
-14629:0:4365
-14630:2:1936
-14631:0:4365
-14632:2:2129
-14633:0:4365
-14634:2:2130
-14635:0:4365
-14636:2:2134
-14637:0:4365
-14638:3:4286
-14639:0:4365
-14640:2:2136
-14641:0:4365
-14642:3:4287
-14643:0:4365
-14644:2:2137
-14645:2:2141
-14646:2:2142
-14647:2:2150
-14648:2:2151
-14649:2:2155
-14650:2:2156
-14651:2:2150
-14652:2:2151
-14653:2:2152
-14654:2:2164
-14655:2:2169
-14656:2:2173
-14657:2:2174
-14658:2:2181
-14659:2:2182
-14660:2:2193
-14661:2:2194
-14662:2:2195
-14663:2:2193
-14664:2:2194
-14665:2:2195
-14666:2:2206
-14667:2:2211
-14668:2:2212
-14669:0:4365
-14670:2:2224
-14671:0:4365
-14672:3:4286
-14673:0:4365
-14674:2:2226
-14675:0:4365
-14676:3:4287
-14677:0:4365
-14678:2:2230
-14679:0:4365
-14680:3:4286
-14681:0:4365
-14682:2:2235
-14683:2:2239
-14684:2:2240
-14685:2:2248
-14686:2:2249
-14687:2:2253
-14688:2:2254
-14689:2:2248
-14690:2:2249
-14691:2:2250
-14692:2:2262
-14693:2:2267
-14694:2:2271
-14695:2:2272
-14696:2:2279
-14697:2:2280
-14698:2:2291
-14699:2:2292
-14700:2:2293
-14701:2:2291
-14702:2:2292
-14703:2:2293
-14704:2:2304
-14705:2:2309
-14706:2:2310
-14707:0:4365
-14708:3:4287
-14709:0:4365
-14710:2:2322
-14711:0:4365
-14712:2:1169
-14713:0:4365
-14714:3:4286
-14715:0:4365
-14716:2:1170
-14717:0:4365
-14718:3:4287
-14719:0:4365
-14720:3:4288
-14721:0:4365
-14722:3:4294
-14723:0:4365
-14724:3:4295
-14725:0:4365
-14726:3:2338
-14727:0:4365
-14728:3:2339
-14729:3:2343
-14730:3:2344
-14731:3:2352
-14732:3:2353
-14733:3:2357
-14734:3:2358
-14735:3:2352
-14736:3:2353
-14737:3:2357
-14738:3:2358
-14739:3:2366
-14740:3:2371
-14741:3:2375
-14742:3:2376
-14743:3:2383
-14744:3:2384
-14745:3:2395
-14746:3:2396
-14747:3:2397
-14748:3:2395
-14749:3:2396
-14750:3:2397
-14751:3:2408
-14752:3:2413
-14753:3:2414
-14754:0:4365
-14755:3:2426
-14756:0:4365
-14757:3:2427
-14758:0:4365
-14759:2:1173
-14760:0:4365
-14761:3:2428
-14762:0:4365
-14763:2:1179
-14764:0:4365
-14765:2:1180
-14766:0:4365
-14767:3:2427
-14768:0:4365
-14769:2:1181
-14770:2:1185
-14771:2:1186
-14772:2:1194
-14773:2:1195
-14774:2:1199
-14775:2:1200
-14776:2:1194
-14777:2:1195
-14778:2:1199
-14779:2:1200
-14780:2:1208
-14781:2:1213
-14782:2:1217
-14783:2:1218
-14784:2:1225
-14785:2:1226
-14786:2:1237
-14787:2:1238
-14788:2:1239
-14789:2:1237
-14790:2:1238
-14791:2:1239
-14792:2:1250
-14793:2:1255
-14794:2:1256
-14795:0:4365
-14796:3:2428
-14797:0:4365
-14798:2:1268
-14799:0:4365
-14800:3:2427
-14801:0:4365
-14802:2:1270
-14803:0:4365
-14804:3:2428
-14805:0:4365
-14806:2:1271
-14807:2:1275
-14808:2:1276
-14809:2:1284
-14810:2:1285
-14811:2:1289
-14812:2:1290
-14813:2:1284
-14814:2:1285
-14815:2:1289
-14816:2:1290
-14817:2:1298
-14818:2:1303
-14819:2:1307
-14820:2:1308
-14821:2:1315
-14822:2:1316
-14823:2:1327
-14824:2:1328
-14825:2:1329
-14826:2:1327
-14827:2:1328
-14828:2:1329
-14829:2:1340
-14830:2:1345
-14831:2:1346
-14832:0:4365
-14833:2:1358
-14834:0:4365
-14835:2:1360
-14836:0:4365
-14837:3:2427
-14838:0:4365
-14839:2:1361
-14840:0:4365
-14841:3:2428
-14842:0:4365
-14843:2:1362
-14844:2:1366
-14845:2:1367
-14846:2:1375
-14847:2:1376
-14848:2:1380
-14849:2:1381
-14850:2:1375
-14851:2:1376
-14852:2:1380
-14853:2:1381
-14854:2:1389
-14855:2:1394
-14856:2:1398
-14857:2:1399
-14858:2:1406
-14859:2:1407
-14860:2:1418
-14861:2:1419
-14862:2:1420
-14863:2:1418
-14864:2:1419
-14865:2:1420
-14866:2:1431
-14867:2:1436
-14868:2:1437
-14869:0:4365
-14870:2:1449
-14871:0:4365
-14872:3:2427
-14873:0:4365
-14874:2:1451
-14875:0:4365
-14876:3:2428
-14877:0:4365
-14878:2:1652
-14879:0:4365
-14880:2:1653
-14881:0:4365
-14882:2:1657
-14883:0:4365
-14884:2:1180
-14885:0:4365
-14886:3:2427
-14887:0:4365
-14888:2:1181
-14889:2:1185
-14890:2:1186
-14891:2:1194
-14892:2:1195
-14893:2:1199
-14894:2:1200
-14895:2:1194
-14896:2:1195
-14897:2:1196
-14898:2:1208
-14899:2:1213
-14900:2:1217
-14901:2:1218
-14902:2:1225
-14903:2:1226
-14904:2:1237
-14905:2:1238
-14906:2:1239
-14907:2:1237
-14908:2:1238
-14909:2:1239
-14910:2:1250
-14911:2:1255
-14912:2:1256
-14913:0:4365
-14914:3:2428
-14915:0:4365
-14916:2:1268
-14917:0:4365
-14918:3:2427
-14919:0:4365
-14920:2:1270
-14921:0:4365
-14922:3:2428
-14923:0:4365
-14924:2:1271
-14925:2:1275
-14926:2:1276
-14927:2:1284
-14928:2:1285
-14929:2:1289
-14930:2:1290
-14931:2:1284
-14932:2:1285
-14933:2:1289
-14934:2:1290
-14935:2:1298
-14936:2:1303
-14937:2:1307
-14938:2:1308
-14939:2:1315
-14940:2:1316
-14941:2:1327
-14942:2:1328
-14943:2:1329
-14944:2:1327
-14945:2:1328
-14946:2:1329
-14947:2:1340
-14948:2:1345
-14949:2:1346
-14950:0:4365
-14951:2:1358
-14952:0:4365
-14953:2:1454
-14954:0:4365
-14955:3:2427
-14956:0:4365
-14957:2:1455
-14958:0:4365
-14959:3:2428
-14960:0:4365
-14961:2:1652
-14962:0:4365
-14963:2:1653
-14964:0:4365
-14965:2:1657
-14966:0:4365
-14967:2:1660
-14968:0:4365
-14969:3:2427
-14970:0:4365
-14971:2:1665
-14972:2:1669
-14973:2:1670
-14974:2:1678
-14975:2:1679
-14976:2:1683
-14977:2:1684
-14978:2:1678
-14979:2:1679
-14980:2:1680
-14981:2:1692
-14982:2:1697
-14983:2:1701
-14984:2:1702
-14985:2:1709
-14986:2:1710
-14987:2:1721
-14988:2:1722
-14989:2:1723
-14990:2:1721
-14991:2:1722
-14992:2:1723
-14993:2:1734
-14994:2:1739
-14995:2:1740
-14996:0:4365
-14997:3:2428
-14998:0:4365
-14999:2:1752
-15000:0:4365
-15001:3:2427
-15002:0:4365
-15003:2:1754
-15004:0:4365
-15005:3:2428
-15006:0:4365
-15007:2:1755
-15008:2:1759
-15009:2:1760
-15010:2:1768
-15011:2:1769
-15012:2:1773
-15013:2:1774
-15014:2:1768
-15015:2:1769
-15016:2:1773
-15017:2:1774
-15018:2:1782
-15019:2:1787
-15020:2:1791
-15021:2:1792
-15022:2:1799
-15023:2:1800
-15024:2:1811
-15025:2:1812
-15026:2:1813
-15027:2:1811
-15028:2:1812
-15029:2:1813
-15030:2:1824
-15031:2:1829
-15032:2:1830
-15033:0:4365
-15034:2:1842
-15035:0:4365
-15036:3:2427
-15037:0:4365
-15038:2:1844
-15039:0:4363
-15040:3:2428
-15041:0:4369
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.define b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.log
deleted file mode 100644 (file)
index 1bc5996..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_nested.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 715)
-Depth=   22961 States=    1e+06 Transitions= 8.79e+06 Memory=   535.002        t=   17.2 R=   6e+04
-Depth=   22961 States=    2e+06 Transitions= 1.79e+07 Memory=   603.654        t=   34.7 R=   6e+04
-Depth=   25030 States=    3e+06 Transitions= 2.69e+07 Memory=   672.404        t=   52.6 R=   6e+04
-pan: resizing hashtable to -w22..  done
-Depth=   25030 States=    4e+06 Transitions= 3.73e+07 Memory=   772.080        t=   74.4 R=   5e+04
-Depth=   25030 States=    5e+06 Transitions= 4.77e+07 Memory=   840.830        t=   96.2 R=   5e+04
-Depth=   25030 States=    6e+06 Transitions= 5.45e+07 Memory=   909.483        t=    110 R=   5e+04
-Depth=   25030 States=    7e+06 Transitions= 6.05e+07 Memory=   978.135        t=    122 R=   6e+04
-Depth=   25030 States=    8e+06 Transitions= 6.68e+07 Memory=  1046.787        t=    135 R=   6e+04
-Depth=   25030 States=    9e+06 Transitions= 7.29e+07 Memory=  1115.537        t=    148 R=   6e+04
-pan: resizing hashtable to -w24..  done
-Depth=   25030 States=    1e+07 Transitions= 7.91e+07 Memory=  1308.283        t=    162 R=   6e+04
-Depth=   25030 States=  1.1e+07 Transitions=  8.5e+07 Memory=  1376.936        t=    174 R=   6e+04
-Depth=   25030 States=  1.2e+07 Transitions= 9.12e+07 Memory=  1445.588        t=    186 R=   6e+04
-Depth=   25030 States=  1.3e+07 Transitions= 9.79e+07 Memory=  1514.240        t=    200 R=   7e+04
-Depth=   25030 States=  1.4e+07 Transitions= 1.09e+08 Memory=  1582.990        t=    222 R=   6e+04
-Depth=   25030 States=  1.5e+07 Transitions= 1.18e+08 Memory=  1651.643        t=    240 R=   6e+04
-Depth=   25030 States=  1.6e+07 Transitions= 1.27e+08 Memory=  1720.295        t=    258 R=   6e+04
-Depth=   25030 States=  1.7e+07 Transitions= 1.36e+08 Memory=  1788.947        t=    276 R=   6e+04
-Depth=   25030 States=  1.8e+07 Transitions= 1.44e+08 Memory=  1857.697        t=    292 R=   6e+04
-Depth=   25030 States=  1.9e+07 Transitions= 1.54e+08 Memory=  1926.350        t=    313 R=   6e+04
-Depth=   25030 States=    2e+07 Transitions= 1.64e+08 Memory=  1995.002        t=    333 R=   6e+04
-Depth=   25104 States=  2.1e+07 Transitions= 1.73e+08 Memory=  2063.654        t=    350 R=   6e+04
-Depth=   25104 States=  2.2e+07 Transitions= 1.83e+08 Memory=  2132.404        t=    370 R=   6e+04
-Depth=   25104 States=  2.3e+07 Transitions= 1.89e+08 Memory=  2201.057        t=    384 R=   6e+04
-Depth=   25152 States=  2.4e+07 Transitions= 1.98e+08 Memory=  2269.709        t=    402 R=   6e+04
-Depth=   25152 States=  2.5e+07 Transitions= 2.08e+08 Memory=  2338.361        t=    421 R=   6e+04
-Depth=   25152 States=  2.6e+07 Transitions= 2.15e+08 Memory=  2407.111        t=    436 R=   6e+04
-Depth=   25152 States=  2.7e+07 Transitions= 2.24e+08 Memory=  2475.764        t=    454 R=   6e+04
-Depth=   25152 States=  2.8e+07 Transitions= 2.33e+08 Memory=  2544.416        t=    471 R=   6e+04
-Depth=   25152 States=  2.9e+07 Transitions= 2.42e+08 Memory=  2613.068        t=    490 R=   6e+04
-Depth=   32255 States=    3e+07 Transitions=  2.5e+08 Memory=  2681.818        t=    506 R=   6e+04
-Depth=   33413 States=  3.1e+07 Transitions= 2.61e+08 Memory=  2750.471        t=    530 R=   6e+04
-Depth=   33413 States=  3.2e+07 Transitions= 2.73e+08 Memory=  2819.123        t=    555 R=   6e+04
-Depth=   33413 States=  3.3e+07 Transitions= 2.83e+08 Memory=  2887.873        t=    576 R=   6e+04
-Depth=   33413 States=  3.4e+07 Transitions= 2.94e+08 Memory=  2956.526        t=    598 R=   6e+04
-pan: resizing hashtable to -w26..  done
-Depth=   33413 States=  3.5e+07 Transitions= 3.03e+08 Memory=  3521.260        t=    624 R=   6e+04
-Depth=   33413 States=  3.6e+07 Transitions= 3.15e+08 Memory=  3589.912        t=    648 R=   6e+04
-Depth=   33413 States=  3.7e+07 Transitions= 3.25e+08 Memory=  3658.565        t=    667 R=   6e+04
-Depth=   33413 States=  3.8e+07 Transitions= 3.34e+08 Memory=  3727.315        t=    687 R=   6e+04
-Depth=   33413 States=  3.9e+07 Transitions=  3.4e+08 Memory=  3795.967        t=    699 R=   6e+04
-Depth=   33413 States=    4e+07 Transitions= 3.48e+08 Memory=  3864.619        t=    715 R=   6e+04
-Depth=   33413 States=  4.1e+07 Transitions= 3.58e+08 Memory=  3933.272        t=    735 R=   6e+04
-Depth=   33413 States=  4.2e+07 Transitions= 3.64e+08 Memory=  4002.022        t=    747 R=   6e+04
-Depth=   33413 States=  4.3e+07 Transitions= 3.72e+08 Memory=  4070.674        t=    762 R=   6e+04
-Depth=   33413 States=  4.4e+07 Transitions= 3.82e+08 Memory=  4139.326        t=    783 R=   6e+04
-Depth=   33413 States=  4.5e+07 Transitions= 3.89e+08 Memory=  4207.979        t=    799 R=   6e+04
-Depth=   33413 States=  4.6e+07 Transitions= 3.95e+08 Memory=  4276.631        t=    810 R=   6e+04
-Depth=   33413 States=  4.7e+07 Transitions= 4.01e+08 Memory=  4345.381        t=    823 R=   6e+04
-Depth=   33413 States=  4.8e+07 Transitions= 4.07e+08 Memory=  4414.033        t=    835 R=   6e+04
-Depth=   33413 States=  4.9e+07 Transitions= 4.16e+08 Memory=  4482.686        t=    852 R=   6e+04
-Depth=   33413 States=    5e+07 Transitions= 4.25e+08 Memory=  4551.338        t=    871 R=   6e+04
-Depth=   33413 States=  5.1e+07 Transitions= 4.31e+08 Memory=  4620.088        t=    883 R=   6e+04
-Depth=   33413 States=  5.2e+07 Transitions= 4.37e+08 Memory=  4688.740        t=    896 R=   6e+04
-Depth=   33413 States=  5.3e+07 Transitions= 4.43e+08 Memory=  4757.393        t=    907 R=   6e+04
-Depth=   33413 States=  5.4e+07 Transitions=  4.5e+08 Memory=  4826.045        t=    922 R=   6e+04
-Depth=   33413 States=  5.5e+07 Transitions= 4.62e+08 Memory=  4894.795        t=    947 R=   6e+04
-Depth=   33413 States=  5.6e+07 Transitions= 4.71e+08 Memory=  4963.447        t=    966 R=   6e+04
-Depth=   33413 States=  5.7e+07 Transitions= 4.81e+08 Memory=  5032.100        t=    987 R=   6e+04
-Depth=   33413 States=  5.8e+07 Transitions= 4.92e+08 Memory=  5100.752        t= 1.01e+03 R=   6e+04
-Depth=   33413 States=  5.9e+07 Transitions= 5.05e+08 Memory=  5169.502        t= 1.03e+03 R=   6e+04
-Depth=   33413 States=    6e+07 Transitions= 5.18e+08 Memory=  5238.154        t= 1.06e+03 R=   6e+04
-Depth=   33413 States=  6.1e+07 Transitions= 5.27e+08 Memory=  5306.807        t= 1.08e+03 R=   6e+04
-Depth=   33413 States=  6.2e+07 Transitions= 5.37e+08 Memory=  5375.459        t= 1.1e+03 R=   6e+04
-Depth=   33413 States=  6.3e+07 Transitions= 5.47e+08 Memory=  5444.111        t= 1.12e+03 R=   6e+04
-Depth=   33413 States=  6.4e+07 Transitions= 5.54e+08 Memory=  5512.861        t= 1.13e+03 R=   6e+04
-Depth=   33413 States=  6.5e+07 Transitions=  5.6e+08 Memory=  5581.514        t= 1.14e+03 R=   6e+04
-Depth=   33413 States=  6.6e+07 Transitions= 5.66e+08 Memory=  5650.166        t= 1.16e+03 R=   6e+04
-Depth=   33413 States=  6.7e+07 Transitions= 5.73e+08 Memory=  5718.818        t= 1.17e+03 R=   6e+04
-Depth=   33413 States=  6.8e+07 Transitions= 5.82e+08 Memory=  5787.568        t= 1.19e+03 R=   6e+04
-Depth=   33413 States=  6.9e+07 Transitions=  5.9e+08 Memory=  5856.221        t= 1.21e+03 R=   6e+04
-Depth=   33413 States=    7e+07 Transitions= 5.99e+08 Memory=  5924.873        t= 1.22e+03 R=   6e+04
-Depth=   33413 States=  7.1e+07 Transitions= 6.08e+08 Memory=  5993.526        t= 1.24e+03 R=   6e+04
-Depth=   33413 States=  7.2e+07 Transitions= 6.18e+08 Memory=  6062.276        t= 1.26e+03 R=   6e+04
-Depth=   33413 States=  7.3e+07 Transitions= 6.27e+08 Memory=  6130.928        t= 1.28e+03 R=   6e+04
-Depth=   33413 States=  7.4e+07 Transitions= 6.33e+08 Memory=  6199.580        t= 1.29e+03 R=   6e+04
-Depth=   33413 States=  7.5e+07 Transitions= 6.39e+08 Memory=  6268.233        t= 1.31e+03 R=   6e+04
-Depth=   33413 States=  7.6e+07 Transitions= 6.45e+08 Memory=  6336.983        t= 1.32e+03 R=   6e+04
-Depth=   33413 States=  7.7e+07 Transitions= 6.55e+08 Memory=  6405.635        t= 1.34e+03 R=   6e+04
-Depth=   33413 States=  7.8e+07 Transitions= 6.61e+08 Memory=  6474.287        t= 1.35e+03 R=   6e+04
-Depth=   33413 States=  7.9e+07 Transitions= 6.71e+08 Memory=  6542.940        t= 1.37e+03 R=   6e+04
-Depth=   33413 States=    8e+07 Transitions= 6.77e+08 Memory=  6611.592        t= 1.38e+03 R=   6e+04
-Depth=   33413 States=  8.1e+07 Transitions= 6.83e+08 Memory=  6680.342        t= 1.4e+03 R=   6e+04
-Depth=   33413 States=  8.2e+07 Transitions= 6.91e+08 Memory=  6748.994        t= 1.41e+03 R=   6e+04
-Depth=   33413 States=  8.3e+07 Transitions= 6.97e+08 Memory=  6817.647        t= 1.43e+03 R=   6e+04
-Depth=   33413 States=  8.4e+07 Transitions= 7.06e+08 Memory=  6886.299        t= 1.44e+03 R=   6e+04
-Depth=   33413 States=  8.5e+07 Transitions= 7.15e+08 Memory=  6955.049        t= 1.46e+03 R=   6e+04
-Depth=   33413 States=  8.6e+07 Transitions= 7.24e+08 Memory=  7023.701        t= 1.48e+03 R=   6e+04
-Depth=   33413 States=  8.7e+07 Transitions= 7.35e+08 Memory=  7092.354        t= 1.5e+03 R=   6e+04
-Depth=   33413 States=  8.8e+07 Transitions= 7.46e+08 Memory=  7161.006        t= 1.52e+03 R=   6e+04
-Depth=   33413 States=  8.9e+07 Transitions= 7.61e+08 Memory=  7229.756        t= 1.56e+03 R=   6e+04
-Depth=   33413 States=    9e+07 Transitions= 7.83e+08 Memory=  7298.408        t= 1.6e+03 R=   6e+04
-Depth=   33413 States=  9.1e+07 Transitions= 7.97e+08 Memory=  7367.061        t= 1.63e+03 R=   6e+04
-Depth=   33413 States=  9.2e+07 Transitions= 8.12e+08 Memory=  7435.713        t= 1.66e+03 R=   6e+04
-Depth=   33413 States=  9.3e+07 Transitions= 8.24e+08 Memory=  7504.463        t= 1.68e+03 R=   6e+04
-Depth=   33413 States=  9.4e+07 Transitions= 8.32e+08 Memory=  7573.115        t= 1.7e+03 R=   6e+04
-Depth=   33413 States=  9.5e+07 Transitions= 8.46e+08 Memory=  7641.768        t= 1.73e+03 R=   5e+04
-Depth=   33413 States=  9.6e+07 Transitions= 8.57e+08 Memory=  7710.420        t= 1.75e+03 R=   5e+04
-Depth=   33413 States=  9.7e+07 Transitions= 8.71e+08 Memory=  7779.072        t= 1.78e+03 R=   5e+04
-Depth=   33413 States=  9.8e+07 Transitions= 8.84e+08 Memory=  7847.822        t= 1.81e+03 R=   5e+04
-Depth=   33413 States=  9.9e+07 Transitions= 8.97e+08 Memory=  7916.475        t= 1.83e+03 R=   5e+04
-Depth=   33413 States=    1e+08 Transitions= 9.08e+08 Memory=  7985.127        t= 1.85e+03 R=   5e+04
-Depth=   33413 States= 1.01e+08 Transitions= 9.22e+08 Memory=  8053.779        t= 1.88e+03 R=   5e+04
-Depth=   33413 States= 1.02e+08 Transitions= 9.35e+08 Memory=  8122.529        t= 1.91e+03 R=   5e+04
-Depth=   33413 States= 1.03e+08 Transitions= 9.47e+08 Memory=  8191.182        t= 1.93e+03 R=   5e+04
-Depth=   33413 States= 1.04e+08 Transitions= 9.59e+08 Memory=  8259.834        t= 1.96e+03 R=   5e+04
-Depth=   33413 States= 1.05e+08 Transitions= 9.68e+08 Memory=  8328.486        t= 1.97e+03 R=   5e+04
-Depth=   33413 States= 1.06e+08 Transitions= 9.78e+08 Memory=  8397.236        t=  2e+03 R=   5e+04
-Depth=   33413 States= 1.07e+08 Transitions= 9.97e+08 Memory=  8465.889        t= 2.04e+03 R=   5e+04
-Depth=   33413 States= 1.08e+08 Transitions= 1.01e+09 Memory=  8534.541        t= 2.06e+03 R=   5e+04
-Depth=   33413 States= 1.09e+08 Transitions= 1.02e+09 Memory=  8603.193        t= 2.09e+03 R=   5e+04
-Depth=   33413 States=  1.1e+08 Transitions= 1.03e+09 Memory=  8671.846        t= 2.1e+03 R=   5e+04
-Depth=   33413 States= 1.11e+08 Transitions= 1.05e+09 Memory=  8740.596        t= 2.13e+03 R=   5e+04
-Depth=   33413 States= 1.12e+08 Transitions= 1.06e+09 Memory=  8809.248        t= 2.17e+03 R=   5e+04
-Depth=   33413 States= 1.13e+08 Transitions= 1.08e+09 Memory=  8877.901        t= 2.19e+03 R=   5e+04
-Depth=   33413 States= 1.14e+08 Transitions= 1.09e+09 Memory=  8946.553        t= 2.22e+03 R=   5e+04
-Depth=   33413 States= 1.15e+08 Transitions=  1.1e+09 Memory=  9015.303        t= 2.24e+03 R=   5e+04
-Depth=   33413 States= 1.16e+08 Transitions= 1.11e+09 Memory=  9083.955        t= 2.26e+03 R=   5e+04
-Depth=   33413 States= 1.17e+08 Transitions= 1.11e+09 Memory=  9152.608        t= 2.27e+03 R=   5e+04
-Depth=   33413 States= 1.18e+08 Transitions= 1.12e+09 Memory=  9221.260        t= 2.29e+03 R=   5e+04
-Depth=   33413 States= 1.19e+08 Transitions= 1.13e+09 Memory=  9290.010        t= 2.3e+03 R=   5e+04
-Depth=   33413 States=  1.2e+08 Transitions= 1.14e+09 Memory=  9358.662        t= 2.32e+03 R=   5e+04
-Depth=   33413 States= 1.21e+08 Transitions= 1.15e+09 Memory=  9427.315        t= 2.34e+03 R=   5e+04
-Depth=   33413 States= 1.22e+08 Transitions= 1.17e+09 Memory=  9495.967        t= 2.38e+03 R=   5e+04
-Depth=   33413 States= 1.23e+08 Transitions= 1.18e+09 Memory=  9564.717        t= 2.41e+03 R=   5e+04
-Depth=   33413 States= 1.24e+08 Transitions= 1.19e+09 Memory=  9633.369        t= 2.43e+03 R=   5e+04
-Depth=   33413 States= 1.25e+08 Transitions=  1.2e+09 Memory=  9702.022        t= 2.46e+03 R=   5e+04
-Depth=   33413 States= 1.26e+08 Transitions= 1.22e+09 Memory=  9770.674        t= 2.48e+03 R=   5e+04
-Depth=   33413 States= 1.27e+08 Transitions= 1.23e+09 Memory=  9839.326        t= 2.51e+03 R=   5e+04
-Depth=   33413 States= 1.28e+08 Transitions= 1.24e+09 Memory=  9908.076        t= 2.54e+03 R=   5e+04
-Depth=   33413 States= 1.29e+08 Transitions= 1.25e+09 Memory=  9976.729        t= 2.56e+03 R=   5e+04
-Depth=   33413 States=  1.3e+08 Transitions= 1.26e+09 Memory= 10045.381        t= 2.58e+03 R=   5e+04
-Depth=   33413 States= 1.31e+08 Transitions= 1.27e+09 Memory= 10114.033        t= 2.61e+03 R=   5e+04
-Depth=   33413 States= 1.32e+08 Transitions= 1.28e+09 Memory= 10182.783        t= 2.62e+03 R=   5e+04
-Depth=   33413 States= 1.33e+08 Transitions= 1.29e+09 Memory= 10251.436        t= 2.64e+03 R=   5e+04
-Depth=   33413 States= 1.34e+08 Transitions=  1.3e+09 Memory= 10320.088        t= 2.66e+03 R=   5e+04
-Depth=   33413 States= 1.35e+08 Transitions= 1.31e+09 Memory= 10388.740        t= 2.68e+03 R=   5e+04
-pan: resizing hashtable to -w28..  done
-Depth=   33413 States= 1.36e+08 Transitions= 1.32e+09 Memory= 12441.428        t= 2.73e+03 R=   5e+04
-Depth=   33413 States= 1.37e+08 Transitions= 1.32e+09 Memory= 12510.178        t= 2.75e+03 R=   5e+04
-Depth=   33413 States= 1.38e+08 Transitions= 1.33e+09 Memory= 12578.830        t= 2.77e+03 R=   5e+04
-Depth=   33413 States= 1.39e+08 Transitions= 1.35e+09 Memory= 12647.483        t= 2.79e+03 R=   5e+04
-Depth=   33413 States=  1.4e+08 Transitions= 1.36e+09 Memory= 12716.135        t= 2.82e+03 R=   5e+04
-Depth=   33413 States= 1.41e+08 Transitions= 1.37e+09 Memory= 12784.787        t= 2.84e+03 R=   5e+04
-Depth=   33413 States= 1.42e+08 Transitions= 1.38e+09 Memory= 12853.537        t= 2.86e+03 R=   5e+04
-Depth=   33413 States= 1.43e+08 Transitions=  1.4e+09 Memory= 12922.190        t= 2.9e+03 R=   5e+04
-Depth=   33413 States= 1.44e+08 Transitions= 1.41e+09 Memory= 12990.842        t= 2.91e+03 R=   5e+04
-Depth=   33413 States= 1.45e+08 Transitions= 1.42e+09 Memory= 13059.494        t= 2.93e+03 R=   5e+04
-Depth=   33413 States= 1.46e+08 Transitions= 1.43e+09 Memory= 13128.244        t= 2.96e+03 R=   5e+04
-Depth=   33413 States= 1.47e+08 Transitions= 1.45e+09 Memory= 13196.897        t=  3e+03 R=   5e+04
-Depth=   33413 States= 1.48e+08 Transitions= 1.47e+09 Memory= 13265.549        t= 3.03e+03 R=   5e+04
-Depth=   33413 States= 1.49e+08 Transitions= 1.48e+09 Memory= 13334.201        t= 3.06e+03 R=   5e+04
-Depth=   33413 States=  1.5e+08 Transitions=  1.5e+09 Memory= 13402.951        t= 3.09e+03 R=   5e+04
-Depth=   33413 States= 1.51e+08 Transitions=  1.5e+09 Memory= 13471.604        t= 3.11e+03 R=   5e+04
-Depth=   33413 States= 1.52e+08 Transitions= 1.52e+09 Memory= 13540.256        t= 3.13e+03 R=   5e+04
-Depth=   33413 States= 1.53e+08 Transitions= 1.53e+09 Memory= 13608.908        t= 3.15e+03 R=   5e+04
-Depth=   33413 States= 1.54e+08 Transitions= 1.55e+09 Memory= 13677.658        t= 3.19e+03 R=   5e+04
-Depth=   33413 States= 1.55e+08 Transitions= 1.56e+09 Memory= 13746.311        t= 3.22e+03 R=   5e+04
-Depth=   33413 States= 1.56e+08 Transitions= 1.58e+09 Memory= 13814.963        t= 3.25e+03 R=   5e+04
-Depth=   33413 States= 1.57e+08 Transitions= 1.59e+09 Memory= 13883.615        t= 3.29e+03 R=   5e+04
-Depth=   33413 States= 1.58e+08 Transitions=  1.6e+09 Memory= 13952.268        t= 3.31e+03 R=   5e+04
-Depth=   33413 States= 1.59e+08 Transitions= 1.61e+09 Memory= 14021.018        t= 3.33e+03 R=   5e+04
-Depth=   33413 States=  1.6e+08 Transitions= 1.63e+09 Memory= 14089.670        t= 3.36e+03 R=   5e+04
-Depth=   33413 States= 1.61e+08 Transitions= 1.64e+09 Memory= 14158.322        t= 3.39e+03 R=   5e+04
-Depth=   33413 States= 1.62e+08 Transitions= 1.66e+09 Memory= 14226.975        t= 3.42e+03 R=   5e+04
-Depth=   33413 States= 1.63e+08 Transitions= 1.67e+09 Memory= 14295.725        t= 3.45e+03 R=   5e+04
-Depth=   33413 States= 1.64e+08 Transitions= 1.69e+09 Memory= 14364.377        t= 3.48e+03 R=   5e+04
-Depth=   33413 States= 1.65e+08 Transitions=  1.7e+09 Memory= 14433.029        t= 3.5e+03 R=   5e+04
-Depth=   33413 States= 1.66e+08 Transitions= 1.71e+09 Memory= 14501.682        t= 3.52e+03 R=   5e+04
-Depth=   33413 States= 1.67e+08 Transitions= 1.72e+09 Memory= 14570.432        t= 3.55e+03 R=   5e+04
-Depth=   33413 States= 1.68e+08 Transitions= 1.73e+09 Memory= 14639.084        t= 3.57e+03 R=   5e+04
-Depth=   33413 States= 1.69e+08 Transitions= 1.74e+09 Memory= 14707.736        t= 3.59e+03 R=   5e+04
-Depth=   33413 States=  1.7e+08 Transitions= 1.76e+09 Memory= 14776.389        t= 3.62e+03 R=   5e+04
-Depth=   33413 States= 1.71e+08 Transitions= 1.77e+09 Memory= 14845.041        t= 3.64e+03 R=   5e+04
-Depth=   33413 States= 1.72e+08 Transitions= 1.77e+09 Memory= 14913.791        t= 3.65e+03 R=   5e+04
-Depth=   33413 States= 1.73e+08 Transitions= 1.78e+09 Memory= 14982.443        t= 3.66e+03 R=   5e+04
-Depth=   33413 States= 1.74e+08 Transitions= 1.79e+09 Memory= 15051.096        t= 3.68e+03 R=   5e+04
-Depth=   33413 States= 1.75e+08 Transitions= 1.79e+09 Memory= 15119.748        t= 3.69e+03 R=   5e+04
-Depth=   33413 States= 1.76e+08 Transitions=  1.8e+09 Memory= 15188.498        t= 3.71e+03 R=   5e+04
-Depth=   33413 States= 1.77e+08 Transitions=  1.8e+09 Memory= 15257.151        t= 3.72e+03 R=   5e+04
-Depth=   33413 States= 1.78e+08 Transitions= 1.81e+09 Memory= 15325.803        t= 3.73e+03 R=   5e+04
-Depth=   33413 States= 1.79e+08 Transitions= 1.82e+09 Memory= 15394.455        t= 3.75e+03 R=   5e+04
-Depth=   33413 States=  1.8e+08 Transitions= 1.83e+09 Memory= 15463.205        t= 3.76e+03 R=   5e+04
-Depth=   33413 States= 1.81e+08 Transitions= 1.83e+09 Memory= 15531.858        t= 3.77e+03 R=   5e+04
-Depth=   33413 States= 1.82e+08 Transitions= 1.84e+09 Memory= 15600.510        t= 3.79e+03 R=   5e+04
-Depth=   33413 States= 1.83e+08 Transitions= 1.85e+09 Memory= 15669.162        t= 3.8e+03 R=   5e+04
-Depth=   33413 States= 1.84e+08 Transitions= 1.86e+09 Memory= 15737.912        t= 3.82e+03 R=   5e+04
-Depth=   33413 States= 1.85e+08 Transitions= 1.87e+09 Memory= 15806.565        t= 3.84e+03 R=   5e+04
-Depth=   33413 States= 1.86e+08 Transitions= 1.88e+09 Memory= 15875.217        t= 3.87e+03 R=   5e+04
-Depth=   33413 States= 1.87e+08 Transitions= 1.89e+09 Memory= 15943.869        t= 3.89e+03 R=   5e+04
-Depth=   33413 States= 1.88e+08 Transitions=  1.9e+09 Memory= 16012.522        t= 3.91e+03 R=   5e+04
-Depth=   33413 States= 1.89e+08 Transitions= 1.91e+09 Memory= 16081.272        t= 3.94e+03 R=   5e+04
-Depth=   33413 States=  1.9e+08 Transitions= 1.92e+09 Memory= 16149.924        t= 3.96e+03 R=   5e+04
-Depth=   33413 States= 1.91e+08 Transitions= 1.94e+09 Memory= 16218.576        t= 3.98e+03 R=   5e+04
-Depth=   33413 States= 1.92e+08 Transitions= 1.95e+09 Memory= 16287.229        t= 4.02e+03 R=   5e+04
-Depth=   33413 States= 1.93e+08 Transitions= 1.96e+09 Memory= 16355.979        t= 4.05e+03 R=   5e+04
-Depth=   33413 States= 1.94e+08 Transitions= 1.97e+09 Memory= 16424.631        t= 4.09e+03 R=   5e+04
-Depth=   33413 States= 1.95e+08 Transitions= 1.99e+09 Memory= 16493.283        t= 4.17e+03 R=   5e+04
-Depth=   33413 States= 1.96e+08 Transitions=    2e+09 Memory= 16561.936        t= 4.26e+03 R=   5e+04
-Depth=   33413 States= 1.97e+08 Transitions= 2.02e+09 Memory= 16630.686        t= 4.36e+03 R=   5e+04
-Depth=   33413 States= 1.98e+08 Transitions= 2.04e+09 Memory= 16699.338        t= 4.45e+03 R=   4e+04
-Depth=   33413 States= 1.99e+08 Transitions= 2.05e+09 Memory= 16767.990        t= 4.53e+03 R=   4e+04
-Depth=   33413 States=    2e+08 Transitions= 2.06e+09 Memory= 16836.643        t= 4.59e+03 R=   4e+04
-Depth=   33413 States= 2.01e+08 Transitions= 2.07e+09 Memory= 16905.393        t= 4.64e+03 R=   4e+04
-Depth=   33413 States= 2.02e+08 Transitions= 2.07e+09 Memory= 16974.045        t= 4.7e+03 R=   4e+04
-Depth=   33413 States= 2.03e+08 Transitions= 2.08e+09 Memory= 17042.697        t= 4.78e+03 R=   4e+04
-Depth=   33413 States= 2.04e+08 Transitions=  2.1e+09 Memory= 17111.350        t= 4.9e+03 R=   4e+04
-Depth=   33413 States= 2.05e+08 Transitions= 2.11e+09 Memory= 17180.002        t= 5.05e+03 R=   4e+04
-Depth=   33413 States= 2.06e+08 Transitions= 2.13e+09 Memory= 17248.752        t= 5.25e+03 R=   4e+04
-Depth=   33413 States= 2.07e+08 Transitions= 2.14e+09 Memory= 17317.404        t= 5.45e+03 R=   4e+04
-Depth=   33413 States= 2.08e+08 Transitions= 2.15e+09 Memory= 17386.057        t= 5.65e+03 R=   4e+04
-Depth=   33413 States= 2.09e+08 Transitions= 2.16e+09 Memory= 17454.709        t= 5.86e+03 R=   4e+04
-Depth=   33413 States=  2.1e+08 Transitions= 2.17e+09 Memory= 17523.459        t= 6.1e+03 R=   3e+04
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.spin.input
deleted file mode 100644 (file)
index c94928c..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-#define READER_NEST_LEVEL 1
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-#define get_pid()      ((_pid < 1) -> 0 : 1)
-#elif defined(TEST_SIGNAL_ON_READ)
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-#else
-#define get_pid()      (_pid)
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               if
-               :: get_readerid() == 0 ->
-progress_reader:
-                       skip;
-               fi;
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               if
-               :: get_readerid() == 0 ->
-progress_reader:
-                       skip;
-               fi;
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_nested.spin.input.trail
deleted file mode 100644 (file)
index 6f29ad2..0000000
+++ /dev/null
@@ -1,11161 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1660
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1665
-243:2:1669
-244:2:1670
-245:2:1678
-246:2:1679
-247:2:1683
-248:2:1684
-249:2:1678
-250:2:1679
-251:2:1680
-252:2:1692
-253:2:1697
-254:2:1701
-255:2:1702
-256:2:1709
-257:2:1710
-258:2:1721
-259:2:1722
-260:2:1723
-261:2:1721
-262:2:1722
-263:2:1723
-264:2:1734
-265:2:1739
-266:2:1740
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1752
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1754
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1755
-279:2:1759
-280:2:1760
-281:2:1768
-282:2:1769
-283:2:1773
-284:2:1774
-285:2:1768
-286:2:1769
-287:2:1773
-288:2:1774
-289:2:1782
-290:2:1787
-291:2:1791
-292:2:1792
-293:2:1799
-294:2:1800
-295:2:1811
-296:2:1812
-297:2:1813
-298:2:1811
-299:2:1812
-300:2:1813
-301:2:1824
-302:2:1829
-303:2:1830
-304:0:4365
-305:2:1842
-306:0:4365
-307:3:2528
-308:0:4365
-309:2:1844
-310:0:4365
-311:3:2529
-312:0:4365
-313:2:1845
-314:2:1849
-315:2:1850
-316:2:1858
-317:2:1859
-318:2:1863
-319:2:1864
-320:2:1858
-321:2:1859
-322:2:1863
-323:2:1864
-324:2:1872
-325:2:1877
-326:2:1881
-327:2:1882
-328:2:1889
-329:2:1890
-330:2:1901
-331:2:1902
-332:2:1903
-333:2:1901
-334:2:1902
-335:2:1903
-336:2:1914
-337:2:1919
-338:2:1920
-339:0:4365
-340:2:1932
-341:0:4365
-342:3:2528
-343:0:4365
-344:2:1934
-345:0:4365
-346:3:2529
-347:0:4365
-348:2:1935
-349:0:4365
-350:2:1936
-351:0:4365
-352:2:2129
-353:0:4365
-354:2:2130
-355:0:4365
-356:2:2134
-357:0:4365
-358:3:2528
-359:0:4365
-360:2:2136
-361:0:4365
-362:3:2529
-363:0:4365
-364:2:2137
-365:2:2141
-366:2:2142
-367:2:2150
-368:2:2151
-369:2:2155
-370:2:2156
-371:2:2150
-372:2:2151
-373:2:2155
-374:2:2156
-375:2:2164
-376:2:2169
-377:2:2173
-378:2:2174
-379:2:2181
-380:2:2182
-381:2:2193
-382:2:2194
-383:2:2195
-384:2:2193
-385:2:2194
-386:2:2195
-387:2:2206
-388:2:2211
-389:2:2212
-390:0:4365
-391:2:2224
-392:0:4365
-393:3:2528
-394:0:4365
-395:2:2226
-396:0:4365
-397:3:2529
-398:0:4365
-399:2:2230
-400:0:4365
-401:3:2528
-402:0:4365
-403:2:2235
-404:2:2239
-405:2:2240
-406:2:2248
-407:2:2249
-408:2:2253
-409:2:2254
-410:2:2248
-411:2:2249
-412:2:2250
-413:2:2262
-414:2:2267
-415:2:2271
-416:2:2272
-417:2:2279
-418:2:2280
-419:2:2291
-420:2:2292
-421:2:2293
-422:2:2291
-423:2:2292
-424:2:2293
-425:2:2304
-426:2:2309
-427:2:2310
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:2322
-432:0:4365
-433:2:1169
-434:0:4365
-435:3:2528
-436:0:4365
-437:2:1170
-438:0:4365
-439:3:2529
-440:0:4365
-441:3:2530
-442:0:4365
-443:3:2536
-444:0:4365
-445:3:2537
-446:0:4365
-447:3:2547
-448:0:4365
-449:3:2548
-450:0:4365
-451:3:2552
-452:3:2553
-453:3:2557
-454:3:2561
-455:3:2562
-456:3:2557
-457:3:2561
-458:3:2562
-459:3:2566
-460:3:2574
-461:3:2575
-462:3:2580
-463:3:2587
-464:3:2588
-465:3:2587
-466:3:2588
-467:3:2595
-468:3:2600
-469:0:4365
-470:3:2611
-471:0:4365
-472:3:2615
-473:3:2616
-474:3:2620
-475:3:2624
-476:3:2625
-477:3:2620
-478:3:2624
-479:3:2625
-480:3:2629
-481:3:2637
-482:3:2638
-483:3:2643
-484:3:2650
-485:3:2651
-486:3:2650
-487:3:2651
-488:3:2658
-489:3:2663
-490:0:4365
-491:3:2611
-492:0:4365
-493:3:2615
-494:3:2616
-495:3:2620
-496:3:2624
-497:3:2625
-498:3:2620
-499:3:2624
-500:3:2625
-501:3:2629
-502:3:2637
-503:3:2638
-504:3:2643
-505:3:2650
-506:3:2651
-507:3:2650
-508:3:2651
-509:3:2658
-510:3:2663
-511:0:4365
-512:3:2674
-513:0:4365
-514:3:2682
-515:3:2683
-516:3:2687
-517:3:2691
-518:3:2692
-519:3:2687
-520:3:2691
-521:3:2692
-522:3:2696
-523:3:2704
-524:3:2705
-525:3:2710
-526:3:2717
-527:3:2718
-528:3:2717
-529:3:2718
-530:3:2725
-531:3:2730
-532:0:4365
-533:3:2745
-534:0:4365
-535:3:2746
-536:0:4365
-537:2:1173
-538:0:4365
-539:3:2747
-540:0:4365
-541:2:1179
-542:0:4365
-543:2:1180
-544:0:4365
-545:3:2746
-546:0:4365
-547:2:1181
-548:2:1185
-549:2:1186
-550:2:1194
-551:2:1195
-552:2:1199
-553:2:1200
-554:2:1194
-555:2:1195
-556:2:1199
-557:2:1200
-558:2:1208
-559:2:1213
-560:2:1217
-561:2:1218
-562:2:1225
-563:2:1226
-564:2:1237
-565:2:1238
-566:2:1239
-567:2:1237
-568:2:1238
-569:2:1239
-570:2:1250
-571:2:1255
-572:2:1256
-573:0:4365
-574:3:2747
-575:0:4365
-576:2:1268
-577:0:4365
-578:3:2746
-579:0:4365
-580:2:1270
-581:0:4365
-582:3:2747
-583:0:4365
-584:2:1271
-585:2:1275
-586:2:1276
-587:2:1284
-588:2:1285
-589:2:1289
-590:2:1290
-591:2:1284
-592:2:1285
-593:2:1289
-594:2:1290
-595:2:1298
-596:2:1303
-597:2:1307
-598:2:1308
-599:2:1315
-600:2:1316
-601:2:1327
-602:2:1328
-603:2:1329
-604:2:1327
-605:2:1328
-606:2:1329
-607:2:1340
-608:2:1345
-609:2:1346
-610:0:4365
-611:2:1358
-612:0:4365
-613:2:1360
-614:0:4365
-615:3:2746
-616:0:4365
-617:2:1361
-618:0:4365
-619:3:2747
-620:0:4365
-621:2:1362
-622:2:1366
-623:2:1367
-624:2:1375
-625:2:1376
-626:2:1380
-627:2:1381
-628:2:1375
-629:2:1376
-630:2:1380
-631:2:1381
-632:2:1389
-633:2:1394
-634:2:1398
-635:2:1399
-636:2:1406
-637:2:1407
-638:2:1418
-639:2:1419
-640:2:1420
-641:2:1418
-642:2:1419
-643:2:1420
-644:2:1431
-645:2:1436
-646:2:1437
-647:0:4365
-648:2:1449
-649:0:4365
-650:3:2746
-651:0:4365
-652:2:1451
-653:0:4365
-654:3:2747
-655:0:4365
-656:2:1652
-657:0:4365
-658:2:1653
-659:0:4365
-660:2:1657
-661:0:4365
-662:2:1660
-663:0:4365
-664:3:2746
-665:0:4365
-666:2:1665
-667:2:1669
-668:2:1670
-669:2:1678
-670:2:1679
-671:2:1683
-672:2:1684
-673:2:1678
-674:2:1679
-675:2:1680
-676:2:1692
-677:2:1697
-678:2:1701
-679:2:1702
-680:2:1709
-681:2:1710
-682:2:1721
-683:2:1722
-684:2:1723
-685:2:1721
-686:2:1722
-687:2:1723
-688:2:1734
-689:2:1739
-690:2:1740
-691:0:4365
-692:3:2747
-693:0:4365
-694:2:1752
-695:0:4365
-696:3:2746
-697:0:4365
-698:2:1754
-699:0:4365
-700:3:2747
-701:0:4365
-702:2:1755
-703:2:1759
-704:2:1760
-705:2:1768
-706:2:1769
-707:2:1773
-708:2:1774
-709:2:1768
-710:2:1769
-711:2:1773
-712:2:1774
-713:2:1782
-714:2:1787
-715:2:1791
-716:2:1792
-717:2:1799
-718:2:1800
-719:2:1811
-720:2:1812
-721:2:1813
-722:2:1811
-723:2:1812
-724:2:1813
-725:2:1824
-726:2:1829
-727:2:1830
-728:0:4365
-729:2:1842
-730:0:4365
-731:3:2746
-732:0:4365
-733:2:1844
-734:0:4365
-735:3:2747
-736:0:4365
-737:2:1845
-738:2:1849
-739:2:1850
-740:2:1858
-741:2:1859
-742:2:1863
-743:2:1864
-744:2:1858
-745:2:1859
-746:2:1863
-747:2:1864
-748:2:1872
-749:2:1877
-750:2:1881
-751:2:1882
-752:2:1889
-753:2:1890
-754:2:1901
-755:2:1902
-756:2:1903
-757:2:1901
-758:2:1902
-759:2:1903
-760:2:1914
-761:2:1919
-762:2:1920
-763:0:4365
-764:2:1932
-765:0:4365
-766:3:2746
-767:0:4365
-768:2:1934
-769:0:4365
-770:3:2747
-771:0:4365
-772:2:1935
-773:0:4365
-774:2:1936
-775:0:4365
-776:2:2129
-777:0:4365
-778:2:2130
-779:0:4365
-780:2:2134
-781:0:4365
-782:3:2746
-783:0:4365
-784:2:2136
-785:0:4365
-786:3:2747
-787:0:4365
-788:2:2137
-789:2:2141
-790:2:2142
-791:2:2150
-792:2:2151
-793:2:2155
-794:2:2156
-795:2:2150
-796:2:2151
-797:2:2155
-798:2:2156
-799:2:2164
-800:2:2169
-801:2:2173
-802:2:2174
-803:2:2181
-804:2:2182
-805:2:2193
-806:2:2194
-807:2:2195
-808:2:2193
-809:2:2194
-810:2:2195
-811:2:2206
-812:2:2211
-813:2:2212
-814:0:4365
-815:2:2224
-816:0:4365
-817:3:2746
-818:0:4365
-819:2:2226
-820:0:4365
-821:3:2747
-822:0:4365
-823:2:2230
-824:0:4365
-825:3:2746
-826:0:4365
-827:2:2235
-828:2:2239
-829:2:2240
-830:2:2248
-831:2:2249
-832:2:2253
-833:2:2254
-834:2:2248
-835:2:2249
-836:2:2250
-837:2:2262
-838:2:2267
-839:2:2271
-840:2:2272
-841:2:2279
-842:2:2280
-843:2:2291
-844:2:2292
-845:2:2293
-846:2:2291
-847:2:2292
-848:2:2293
-849:2:2304
-850:2:2309
-851:2:2310
-852:0:4365
-853:3:2747
-854:0:4365
-855:2:2322
-856:0:4365
-857:2:1169
-858:0:4365
-859:3:2746
-860:0:4365
-861:2:1170
-862:0:4365
-863:3:2747
-864:0:4365
-865:3:2748
-866:0:4365
-867:3:2754
-868:0:4365
-869:3:2755
-870:3:2759
-871:3:2760
-872:3:2768
-873:3:2769
-874:3:2773
-875:3:2774
-876:3:2768
-877:3:2769
-878:3:2773
-879:3:2774
-880:3:2782
-881:3:2787
-882:3:2791
-883:3:2792
-884:3:2799
-885:3:2800
-886:3:2811
-887:3:2812
-888:3:2813
-889:3:2811
-890:3:2812
-891:3:2813
-892:3:2824
-893:3:2829
-894:3:2830
-895:0:4365
-896:3:2842
-897:0:4365
-898:3:2843
-899:0:4365
-900:2:1173
-901:0:4365
-902:3:2844
-903:0:4365
-904:2:1179
-905:0:4365
-906:2:1180
-907:0:4365
-908:3:2843
-909:0:4365
-910:2:1181
-911:2:1185
-912:2:1186
-913:2:1194
-914:2:1195
-915:2:1199
-916:2:1200
-917:2:1194
-918:2:1195
-919:2:1199
-920:2:1200
-921:2:1208
-922:2:1213
-923:2:1217
-924:2:1218
-925:2:1225
-926:2:1226
-927:2:1237
-928:2:1238
-929:2:1239
-930:2:1237
-931:2:1238
-932:2:1239
-933:2:1250
-934:2:1255
-935:2:1256
-936:0:4365
-937:3:2844
-938:0:4365
-939:2:1268
-940:0:4365
-941:3:2843
-942:0:4365
-943:2:1270
-944:0:4365
-945:3:2844
-946:0:4365
-947:2:1271
-948:2:1275
-949:2:1276
-950:2:1284
-951:2:1285
-952:2:1289
-953:2:1290
-954:2:1284
-955:2:1285
-956:2:1289
-957:2:1290
-958:2:1298
-959:2:1303
-960:2:1307
-961:2:1308
-962:2:1315
-963:2:1316
-964:2:1327
-965:2:1328
-966:2:1329
-967:2:1327
-968:2:1328
-969:2:1329
-970:2:1340
-971:2:1345
-972:2:1346
-973:0:4365
-974:2:1358
-975:0:4365
-976:2:1360
-977:0:4365
-978:3:2843
-979:0:4365
-980:2:1361
-981:0:4365
-982:3:2844
-983:0:4365
-984:2:1362
-985:2:1366
-986:2:1367
-987:2:1375
-988:2:1376
-989:2:1380
-990:2:1381
-991:2:1375
-992:2:1376
-993:2:1380
-994:2:1381
-995:2:1389
-996:2:1394
-997:2:1398
-998:2:1399
-999:2:1406
-1000:2:1407
-1001:2:1418
-1002:2:1419
-1003:2:1420
-1004:2:1418
-1005:2:1419
-1006:2:1420
-1007:2:1431
-1008:2:1436
-1009:2:1437
-1010:0:4365
-1011:2:1449
-1012:0:4365
-1013:3:2843
-1014:0:4365
-1015:2:1451
-1016:0:4365
-1017:3:2844
-1018:0:4365
-1019:2:1652
-1020:0:4365
-1021:2:1653
-1022:0:4365
-1023:2:1657
-1024:0:4365
-1025:2:1660
-1026:0:4365
-1027:3:2843
-1028:0:4365
-1029:2:1665
-1030:2:1669
-1031:2:1670
-1032:2:1678
-1033:2:1679
-1034:2:1683
-1035:2:1684
-1036:2:1678
-1037:2:1679
-1038:2:1680
-1039:2:1692
-1040:2:1697
-1041:2:1701
-1042:2:1702
-1043:2:1709
-1044:2:1710
-1045:2:1721
-1046:2:1722
-1047:2:1723
-1048:2:1721
-1049:2:1722
-1050:2:1723
-1051:2:1734
-1052:2:1739
-1053:2:1740
-1054:0:4365
-1055:3:2844
-1056:0:4365
-1057:2:1752
-1058:0:4365
-1059:3:2843
-1060:0:4365
-1061:2:1754
-1062:0:4365
-1063:3:2844
-1064:0:4365
-1065:2:1755
-1066:2:1759
-1067:2:1760
-1068:2:1768
-1069:2:1769
-1070:2:1773
-1071:2:1774
-1072:2:1768
-1073:2:1769
-1074:2:1773
-1075:2:1774
-1076:2:1782
-1077:2:1787
-1078:2:1791
-1079:2:1792
-1080:2:1799
-1081:2:1800
-1082:2:1811
-1083:2:1812
-1084:2:1813
-1085:2:1811
-1086:2:1812
-1087:2:1813
-1088:2:1824
-1089:2:1829
-1090:2:1830
-1091:0:4365
-1092:2:1842
-1093:0:4365
-1094:3:2843
-1095:0:4365
-1096:2:1844
-1097:0:4365
-1098:3:2844
-1099:0:4365
-1100:2:1845
-1101:2:1849
-1102:2:1850
-1103:2:1858
-1104:2:1859
-1105:2:1863
-1106:2:1864
-1107:2:1858
-1108:2:1859
-1109:2:1863
-1110:2:1864
-1111:2:1872
-1112:2:1877
-1113:2:1881
-1114:2:1882
-1115:2:1889
-1116:2:1890
-1117:2:1901
-1118:2:1902
-1119:2:1903
-1120:2:1901
-1121:2:1902
-1122:2:1903
-1123:2:1914
-1124:2:1919
-1125:2:1920
-1126:0:4365
-1127:2:1932
-1128:0:4365
-1129:3:2843
-1130:0:4365
-1131:2:1934
-1132:0:4365
-1133:3:2844
-1134:0:4365
-1135:2:1935
-1136:0:4365
-1137:2:1936
-1138:0:4365
-1139:2:2129
-1140:0:4365
-1141:2:2130
-1142:0:4365
-1143:2:2134
-1144:0:4365
-1145:3:2843
-1146:0:4365
-1147:2:2136
-1148:0:4365
-1149:3:2844
-1150:0:4365
-1151:2:2137
-1152:2:2141
-1153:2:2142
-1154:2:2150
-1155:2:2151
-1156:2:2155
-1157:2:2156
-1158:2:2150
-1159:2:2151
-1160:2:2155
-1161:2:2156
-1162:2:2164
-1163:2:2169
-1164:2:2173
-1165:2:2174
-1166:2:2181
-1167:2:2182
-1168:2:2193
-1169:2:2194
-1170:2:2195
-1171:2:2193
-1172:2:2194
-1173:2:2195
-1174:2:2206
-1175:2:2211
-1176:2:2212
-1177:0:4365
-1178:2:2224
-1179:0:4365
-1180:3:2843
-1181:0:4365
-1182:2:2226
-1183:0:4365
-1184:3:2844
-1185:0:4365
-1186:2:2230
-1187:0:4365
-1188:3:2843
-1189:0:4365
-1190:2:2235
-1191:2:2239
-1192:2:2240
-1193:2:2248
-1194:2:2249
-1195:2:2253
-1196:2:2254
-1197:2:2248
-1198:2:2249
-1199:2:2250
-1200:2:2262
-1201:2:2267
-1202:2:2271
-1203:2:2272
-1204:2:2279
-1205:2:2280
-1206:2:2291
-1207:2:2292
-1208:2:2293
-1209:2:2291
-1210:2:2292
-1211:2:2293
-1212:2:2304
-1213:2:2309
-1214:2:2310
-1215:0:4365
-1216:3:2844
-1217:0:4365
-1218:2:2322
-1219:0:4365
-1220:2:1169
-1221:0:4365
-1222:3:2843
-1223:0:4365
-1224:2:1170
-1225:0:4365
-1226:3:2844
-1227:0:4365
-1228:3:2845
-1229:0:4365
-1230:3:2851
-1231:0:4365
-1232:3:2854
-1233:3:2855
-1234:3:2867
-1235:3:2868
-1236:3:2872
-1237:3:2873
-1238:3:2867
-1239:3:2868
-1240:3:2872
-1241:3:2873
-1242:3:2881
-1243:3:2886
-1244:3:2890
-1245:3:2891
-1246:3:2898
-1247:3:2899
-1248:3:2910
-1249:3:2911
-1250:3:2912
-1251:3:2910
-1252:3:2911
-1253:3:2912
-1254:3:2923
-1255:3:2928
-1256:3:2929
-1257:0:4365
-1258:3:2941
-1259:0:4365
-1260:3:2942
-1261:0:4365
-1262:2:1173
-1263:0:4365
-1264:3:2943
-1265:0:4365
-1266:2:1179
-1267:0:4365
-1268:2:1180
-1269:0:4365
-1270:3:2942
-1271:0:4365
-1272:2:1181
-1273:2:1185
-1274:2:1186
-1275:2:1194
-1276:2:1195
-1277:2:1199
-1278:2:1200
-1279:2:1194
-1280:2:1195
-1281:2:1199
-1282:2:1200
-1283:2:1208
-1284:2:1213
-1285:2:1217
-1286:2:1218
-1287:2:1225
-1288:2:1226
-1289:2:1237
-1290:2:1238
-1291:2:1239
-1292:2:1237
-1293:2:1238
-1294:2:1239
-1295:2:1250
-1296:2:1255
-1297:2:1256
-1298:0:4365
-1299:3:2943
-1300:0:4365
-1301:2:1268
-1302:0:4365
-1303:3:2942
-1304:0:4365
-1305:2:1270
-1306:0:4365
-1307:3:2943
-1308:0:4365
-1309:2:1271
-1310:2:1275
-1311:2:1276
-1312:2:1284
-1313:2:1285
-1314:2:1289
-1315:2:1290
-1316:2:1284
-1317:2:1285
-1318:2:1289
-1319:2:1290
-1320:2:1298
-1321:2:1303
-1322:2:1307
-1323:2:1308
-1324:2:1315
-1325:2:1316
-1326:2:1327
-1327:2:1328
-1328:2:1329
-1329:2:1327
-1330:2:1328
-1331:2:1329
-1332:2:1340
-1333:2:1345
-1334:2:1346
-1335:0:4365
-1336:2:1358
-1337:0:4365
-1338:2:1360
-1339:0:4365
-1340:3:2942
-1341:0:4365
-1342:2:1361
-1343:0:4365
-1344:3:2943
-1345:0:4365
-1346:2:1362
-1347:2:1366
-1348:2:1367
-1349:2:1375
-1350:2:1376
-1351:2:1380
-1352:2:1381
-1353:2:1375
-1354:2:1376
-1355:2:1380
-1356:2:1381
-1357:2:1389
-1358:2:1394
-1359:2:1398
-1360:2:1399
-1361:2:1406
-1362:2:1407
-1363:2:1418
-1364:2:1419
-1365:2:1420
-1366:2:1418
-1367:2:1419
-1368:2:1420
-1369:2:1431
-1370:2:1436
-1371:2:1437
-1372:0:4365
-1373:2:1449
-1374:0:4365
-1375:3:2942
-1376:0:4365
-1377:2:1451
-1378:0:4365
-1379:3:2943
-1380:0:4365
-1381:2:1652
-1382:0:4365
-1383:2:1653
-1384:0:4365
-1385:2:1657
-1386:0:4365
-1387:2:1660
-1388:0:4365
-1389:3:2942
-1390:0:4365
-1391:2:1665
-1392:2:1669
-1393:2:1670
-1394:2:1678
-1395:2:1679
-1396:2:1683
-1397:2:1684
-1398:2:1678
-1399:2:1679
-1400:2:1680
-1401:2:1692
-1402:2:1697
-1403:2:1701
-1404:2:1702
-1405:2:1709
-1406:2:1710
-1407:2:1721
-1408:2:1722
-1409:2:1723
-1410:2:1721
-1411:2:1722
-1412:2:1723
-1413:2:1734
-1414:2:1739
-1415:2:1740
-1416:0:4365
-1417:3:2943
-1418:0:4365
-1419:2:1752
-1420:0:4365
-1421:3:2942
-1422:0:4365
-1423:2:1754
-1424:0:4365
-1425:3:2943
-1426:0:4365
-1427:2:1755
-1428:2:1759
-1429:2:1760
-1430:2:1768
-1431:2:1769
-1432:2:1773
-1433:2:1774
-1434:2:1768
-1435:2:1769
-1436:2:1773
-1437:2:1774
-1438:2:1782
-1439:2:1787
-1440:2:1791
-1441:2:1792
-1442:2:1799
-1443:2:1800
-1444:2:1811
-1445:2:1812
-1446:2:1813
-1447:2:1811
-1448:2:1812
-1449:2:1813
-1450:2:1824
-1451:2:1829
-1452:2:1830
-1453:0:4365
-1454:2:1842
-1455:0:4365
-1456:3:2942
-1457:0:4365
-1458:2:1844
-1459:0:4365
-1460:3:2943
-1461:0:4365
-1462:2:1845
-1463:2:1849
-1464:2:1850
-1465:2:1858
-1466:2:1859
-1467:2:1863
-1468:2:1864
-1469:2:1858
-1470:2:1859
-1471:2:1863
-1472:2:1864
-1473:2:1872
-1474:2:1877
-1475:2:1881
-1476:2:1882
-1477:2:1889
-1478:2:1890
-1479:2:1901
-1480:2:1902
-1481:2:1903
-1482:2:1901
-1483:2:1902
-1484:2:1903
-1485:2:1914
-1486:2:1919
-1487:2:1920
-1488:0:4365
-1489:2:1932
-1490:0:4365
-1491:3:2942
-1492:0:4365
-1493:2:1934
-1494:0:4365
-1495:3:2943
-1496:0:4365
-1497:2:1935
-1498:0:4365
-1499:2:1936
-1500:0:4365
-1501:2:2129
-1502:0:4365
-1503:2:2130
-1504:0:4365
-1505:2:2134
-1506:0:4365
-1507:3:2942
-1508:0:4365
-1509:2:2136
-1510:0:4365
-1511:3:2943
-1512:0:4365
-1513:2:2137
-1514:2:2141
-1515:2:2142
-1516:2:2150
-1517:2:2151
-1518:2:2155
-1519:2:2156
-1520:2:2150
-1521:2:2151
-1522:2:2155
-1523:2:2156
-1524:2:2164
-1525:2:2169
-1526:2:2173
-1527:2:2174
-1528:2:2181
-1529:2:2182
-1530:2:2193
-1531:2:2194
-1532:2:2195
-1533:2:2193
-1534:2:2194
-1535:2:2195
-1536:2:2206
-1537:2:2211
-1538:2:2212
-1539:0:4365
-1540:2:2224
-1541:0:4365
-1542:3:2942
-1543:0:4365
-1544:2:2226
-1545:0:4365
-1546:3:2943
-1547:0:4365
-1548:2:2230
-1549:0:4365
-1550:3:2942
-1551:0:4365
-1552:2:2235
-1553:2:2239
-1554:2:2240
-1555:2:2248
-1556:2:2249
-1557:2:2253
-1558:2:2254
-1559:2:2248
-1560:2:2249
-1561:2:2250
-1562:2:2262
-1563:2:2267
-1564:2:2271
-1565:2:2272
-1566:2:2279
-1567:2:2280
-1568:2:2291
-1569:2:2292
-1570:2:2293
-1571:2:2291
-1572:2:2292
-1573:2:2293
-1574:2:2304
-1575:2:2309
-1576:2:2310
-1577:0:4365
-1578:3:2943
-1579:0:4365
-1580:2:2322
-1581:0:4365
-1582:2:1169
-1583:0:4365
-1584:3:2942
-1585:0:4365
-1586:2:1170
-1587:0:4365
-1588:3:2943
-1589:0:4365
-1590:3:2944
-1591:0:4365
-1592:3:2950
-1593:0:4365
-1594:3:2951
-1595:0:4365
-1596:3:2952
-1597:0:4365
-1598:3:2953
-1599:0:4365
-1600:3:2954
-1601:3:2958
-1602:3:2959
-1603:3:2967
-1604:3:2968
-1605:3:2972
-1606:3:2973
-1607:3:2967
-1608:3:2968
-1609:3:2972
-1610:3:2973
-1611:3:2981
-1612:3:2986
-1613:3:2990
-1614:3:2991
-1615:3:2998
-1616:3:2999
-1617:3:3010
-1618:3:3011
-1619:3:3012
-1620:3:3010
-1621:3:3011
-1622:3:3012
-1623:3:3023
-1624:3:3028
-1625:3:3029
-1626:0:4365
-1627:3:3041
-1628:0:4365
-1629:3:3042
-1630:0:4365
-1631:2:1173
-1632:0:4365
-1633:3:3043
-1634:0:4365
-1635:2:1179
-1636:0:4365
-1637:2:1180
-1638:0:4365
-1639:3:3042
-1640:0:4365
-1641:2:1181
-1642:2:1185
-1643:2:1186
-1644:2:1194
-1645:2:1195
-1646:2:1199
-1647:2:1200
-1648:2:1194
-1649:2:1195
-1650:2:1199
-1651:2:1200
-1652:2:1208
-1653:2:1213
-1654:2:1217
-1655:2:1218
-1656:2:1225
-1657:2:1226
-1658:2:1237
-1659:2:1238
-1660:2:1239
-1661:2:1237
-1662:2:1238
-1663:2:1239
-1664:2:1250
-1665:2:1255
-1666:2:1256
-1667:0:4365
-1668:3:3043
-1669:0:4365
-1670:2:1268
-1671:0:4365
-1672:3:3042
-1673:0:4365
-1674:2:1270
-1675:0:4365
-1676:3:3043
-1677:0:4365
-1678:2:1271
-1679:2:1275
-1680:2:1276
-1681:2:1284
-1682:2:1285
-1683:2:1289
-1684:2:1290
-1685:2:1284
-1686:2:1285
-1687:2:1289
-1688:2:1290
-1689:2:1298
-1690:2:1303
-1691:2:1307
-1692:2:1308
-1693:2:1315
-1694:2:1316
-1695:2:1327
-1696:2:1328
-1697:2:1329
-1698:2:1327
-1699:2:1328
-1700:2:1329
-1701:2:1340
-1702:2:1345
-1703:2:1346
-1704:0:4365
-1705:2:1358
-1706:0:4365
-1707:2:1360
-1708:0:4365
-1709:3:3042
-1710:0:4365
-1711:2:1361
-1712:0:4365
-1713:3:3043
-1714:0:4365
-1715:2:1362
-1716:2:1366
-1717:2:1367
-1718:2:1375
-1719:2:1376
-1720:2:1380
-1721:2:1381
-1722:2:1375
-1723:2:1376
-1724:2:1380
-1725:2:1381
-1726:2:1389
-1727:2:1394
-1728:2:1398
-1729:2:1399
-1730:2:1406
-1731:2:1407
-1732:2:1418
-1733:2:1419
-1734:2:1420
-1735:2:1418
-1736:2:1419
-1737:2:1420
-1738:2:1431
-1739:2:1436
-1740:2:1437
-1741:0:4365
-1742:2:1449
-1743:0:4365
-1744:3:3042
-1745:0:4365
-1746:2:1451
-1747:0:4365
-1748:3:3043
-1749:0:4365
-1750:2:1652
-1751:0:4365
-1752:2:1653
-1753:0:4365
-1754:2:1657
-1755:0:4365
-1756:2:1660
-1757:0:4365
-1758:3:3042
-1759:0:4365
-1760:2:1665
-1761:2:1669
-1762:2:1670
-1763:2:1678
-1764:2:1679
-1765:2:1683
-1766:2:1684
-1767:2:1678
-1768:2:1679
-1769:2:1680
-1770:2:1692
-1771:2:1697
-1772:2:1701
-1773:2:1702
-1774:2:1709
-1775:2:1710
-1776:2:1721
-1777:2:1722
-1778:2:1723
-1779:2:1721
-1780:2:1722
-1781:2:1723
-1782:2:1734
-1783:2:1739
-1784:2:1740
-1785:0:4365
-1786:3:3043
-1787:0:4365
-1788:2:1752
-1789:0:4365
-1790:3:3042
-1791:0:4365
-1792:2:1754
-1793:0:4365
-1794:3:3043
-1795:0:4365
-1796:2:1755
-1797:2:1759
-1798:2:1760
-1799:2:1768
-1800:2:1769
-1801:2:1773
-1802:2:1774
-1803:2:1768
-1804:2:1769
-1805:2:1773
-1806:2:1774
-1807:2:1782
-1808:2:1787
-1809:2:1791
-1810:2:1792
-1811:2:1799
-1812:2:1800
-1813:2:1811
-1814:2:1812
-1815:2:1813
-1816:2:1811
-1817:2:1812
-1818:2:1813
-1819:2:1824
-1820:2:1829
-1821:2:1830
-1822:0:4365
-1823:2:1842
-1824:0:4365
-1825:3:3042
-1826:0:4365
-1827:2:1844
-1828:0:4365
-1829:3:3043
-1830:0:4365
-1831:2:1845
-1832:2:1849
-1833:2:1850
-1834:2:1858
-1835:2:1859
-1836:2:1863
-1837:2:1864
-1838:2:1858
-1839:2:1859
-1840:2:1863
-1841:2:1864
-1842:2:1872
-1843:2:1877
-1844:2:1881
-1845:2:1882
-1846:2:1889
-1847:2:1890
-1848:2:1901
-1849:2:1902
-1850:2:1903
-1851:2:1901
-1852:2:1902
-1853:2:1903
-1854:2:1914
-1855:2:1919
-1856:2:1920
-1857:0:4365
-1858:2:1932
-1859:0:4365
-1860:3:3042
-1861:0:4365
-1862:2:1934
-1863:0:4365
-1864:3:3043
-1865:0:4365
-1866:2:1935
-1867:0:4365
-1868:2:1936
-1869:0:4365
-1870:2:2129
-1871:0:4365
-1872:2:2130
-1873:0:4365
-1874:2:2134
-1875:0:4365
-1876:3:3042
-1877:0:4365
-1878:2:2136
-1879:0:4365
-1880:3:3043
-1881:0:4365
-1882:2:2137
-1883:2:2141
-1884:2:2142
-1885:2:2150
-1886:2:2151
-1887:2:2155
-1888:2:2156
-1889:2:2150
-1890:2:2151
-1891:2:2155
-1892:2:2156
-1893:2:2164
-1894:2:2169
-1895:2:2173
-1896:2:2174
-1897:2:2181
-1898:2:2182
-1899:2:2193
-1900:2:2194
-1901:2:2195
-1902:2:2193
-1903:2:2194
-1904:2:2195
-1905:2:2206
-1906:2:2211
-1907:2:2212
-1908:0:4365
-1909:2:2224
-1910:0:4365
-1911:3:3042
-1912:0:4365
-1913:2:2226
-1914:0:4365
-1915:3:3043
-1916:0:4365
-1917:2:2230
-1918:0:4365
-1919:3:3042
-1920:0:4365
-1921:2:2235
-1922:2:2239
-1923:2:2240
-1924:2:2248
-1925:2:2249
-1926:2:2253
-1927:2:2254
-1928:2:2248
-1929:2:2249
-1930:2:2250
-1931:2:2262
-1932:2:2267
-1933:2:2271
-1934:2:2272
-1935:2:2279
-1936:2:2280
-1937:2:2291
-1938:2:2292
-1939:2:2293
-1940:2:2291
-1941:2:2292
-1942:2:2293
-1943:2:2304
-1944:2:2309
-1945:2:2310
-1946:0:4365
-1947:3:3043
-1948:0:4365
-1949:2:2322
-1950:0:4365
-1951:2:1169
-1952:0:4365
-1953:3:3042
-1954:0:4365
-1955:2:1170
-1956:0:4365
-1957:3:3043
-1958:0:4365
-1959:3:3044
-1960:0:4365
-1961:3:3257
-1962:0:4365
-1963:3:3265
-1964:0:4365
-1965:3:3266
-1966:3:3270
-1967:3:3271
-1968:3:3279
-1969:3:3280
-1970:3:3284
-1971:3:3285
-1972:3:3279
-1973:3:3280
-1974:3:3284
-1975:3:3285
-1976:3:3293
-1977:3:3298
-1978:3:3302
-1979:3:3303
-1980:3:3310
-1981:3:3311
-1982:3:3322
-1983:3:3323
-1984:3:3324
-1985:3:3322
-1986:3:3323
-1987:3:3324
-1988:3:3335
-1989:3:3340
-1990:3:3341
-1991:0:4365
-1992:3:3353
-1993:0:4365
-1994:3:3354
-1995:0:4365
-1996:2:1173
-1997:0:4365
-1998:3:3355
-1999:0:4365
-2000:2:1179
-2001:0:4365
-2002:2:1180
-2003:0:4365
-2004:3:3354
-2005:0:4365
-2006:2:1181
-2007:2:1185
-2008:2:1186
-2009:2:1194
-2010:2:1195
-2011:2:1199
-2012:2:1200
-2013:2:1194
-2014:2:1195
-2015:2:1199
-2016:2:1200
-2017:2:1208
-2018:2:1213
-2019:2:1217
-2020:2:1218
-2021:2:1225
-2022:2:1226
-2023:2:1237
-2024:2:1238
-2025:2:1239
-2026:2:1237
-2027:2:1238
-2028:2:1239
-2029:2:1250
-2030:2:1255
-2031:2:1256
-2032:0:4365
-2033:3:3355
-2034:0:4365
-2035:2:1268
-2036:0:4365
-2037:3:3354
-2038:0:4365
-2039:2:1270
-2040:0:4365
-2041:3:3355
-2042:0:4365
-2043:2:1271
-2044:2:1275
-2045:2:1276
-2046:2:1284
-2047:2:1285
-2048:2:1289
-2049:2:1290
-2050:2:1284
-2051:2:1285
-2052:2:1289
-2053:2:1290
-2054:2:1298
-2055:2:1303
-2056:2:1307
-2057:2:1308
-2058:2:1315
-2059:2:1316
-2060:2:1327
-2061:2:1328
-2062:2:1329
-2063:2:1327
-2064:2:1328
-2065:2:1329
-2066:2:1340
-2067:2:1345
-2068:2:1346
-2069:0:4365
-2070:2:1358
-2071:0:4365
-2072:2:1360
-2073:0:4365
-2074:3:3354
-2075:0:4365
-2076:2:1361
-2077:0:4365
-2078:3:3355
-2079:0:4365
-2080:2:1362
-2081:2:1366
-2082:2:1367
-2083:2:1375
-2084:2:1376
-2085:2:1380
-2086:2:1381
-2087:2:1375
-2088:2:1376
-2089:2:1380
-2090:2:1381
-2091:2:1389
-2092:2:1394
-2093:2:1398
-2094:2:1399
-2095:2:1406
-2096:2:1407
-2097:2:1418
-2098:2:1419
-2099:2:1420
-2100:2:1418
-2101:2:1419
-2102:2:1420
-2103:2:1431
-2104:2:1436
-2105:2:1437
-2106:0:4365
-2107:2:1449
-2108:0:4365
-2109:3:3354
-2110:0:4365
-2111:2:1451
-2112:0:4365
-2113:3:3355
-2114:0:4365
-2115:2:1652
-2116:0:4365
-2117:2:1653
-2118:0:4365
-2119:2:1657
-2120:0:4365
-2121:2:1660
-2122:0:4365
-2123:3:3354
-2124:0:4365
-2125:2:1665
-2126:2:1669
-2127:2:1670
-2128:2:1678
-2129:2:1679
-2130:2:1683
-2131:2:1684
-2132:2:1678
-2133:2:1679
-2134:2:1680
-2135:2:1692
-2136:2:1697
-2137:2:1701
-2138:2:1702
-2139:2:1709
-2140:2:1710
-2141:2:1721
-2142:2:1722
-2143:2:1723
-2144:2:1721
-2145:2:1722
-2146:2:1723
-2147:2:1734
-2148:2:1739
-2149:2:1740
-2150:0:4365
-2151:3:3355
-2152:0:4365
-2153:2:1752
-2154:0:4365
-2155:3:3354
-2156:0:4365
-2157:2:1754
-2158:0:4365
-2159:3:3355
-2160:0:4365
-2161:2:1755
-2162:2:1759
-2163:2:1760
-2164:2:1768
-2165:2:1769
-2166:2:1773
-2167:2:1774
-2168:2:1768
-2169:2:1769
-2170:2:1773
-2171:2:1774
-2172:2:1782
-2173:2:1787
-2174:2:1791
-2175:2:1792
-2176:2:1799
-2177:2:1800
-2178:2:1811
-2179:2:1812
-2180:2:1813
-2181:2:1811
-2182:2:1812
-2183:2:1813
-2184:2:1824
-2185:2:1829
-2186:2:1830
-2187:0:4365
-2188:2:1842
-2189:0:4365
-2190:3:3354
-2191:0:4365
-2192:2:1844
-2193:0:4365
-2194:3:3355
-2195:0:4365
-2196:2:1845
-2197:2:1849
-2198:2:1850
-2199:2:1858
-2200:2:1859
-2201:2:1863
-2202:2:1864
-2203:2:1858
-2204:2:1859
-2205:2:1863
-2206:2:1864
-2207:2:1872
-2208:2:1877
-2209:2:1881
-2210:2:1882
-2211:2:1889
-2212:2:1890
-2213:2:1901
-2214:2:1902
-2215:2:1903
-2216:2:1901
-2217:2:1902
-2218:2:1903
-2219:2:1914
-2220:2:1919
-2221:2:1920
-2222:0:4365
-2223:2:1932
-2224:0:4365
-2225:3:3354
-2226:0:4365
-2227:2:1934
-2228:0:4365
-2229:3:3355
-2230:0:4365
-2231:2:1935
-2232:0:4365
-2233:2:1936
-2234:0:4365
-2235:2:2129
-2236:0:4365
-2237:2:2130
-2238:0:4365
-2239:2:2134
-2240:0:4365
-2241:3:3354
-2242:0:4365
-2243:2:2136
-2244:0:4365
-2245:3:3355
-2246:0:4365
-2247:2:2137
-2248:2:2141
-2249:2:2142
-2250:2:2150
-2251:2:2151
-2252:2:2155
-2253:2:2156
-2254:2:2150
-2255:2:2151
-2256:2:2155
-2257:2:2156
-2258:2:2164
-2259:2:2169
-2260:2:2173
-2261:2:2174
-2262:2:2181
-2263:2:2182
-2264:2:2193
-2265:2:2194
-2266:2:2195
-2267:2:2193
-2268:2:2194
-2269:2:2195
-2270:2:2206
-2271:2:2211
-2272:2:2212
-2273:0:4365
-2274:2:2224
-2275:0:4365
-2276:3:3354
-2277:0:4365
-2278:2:2226
-2279:0:4365
-2280:3:3355
-2281:0:4365
-2282:2:2230
-2283:0:4365
-2284:3:3354
-2285:0:4365
-2286:2:2235
-2287:2:2239
-2288:2:2240
-2289:2:2248
-2290:2:2249
-2291:2:2253
-2292:2:2254
-2293:2:2248
-2294:2:2249
-2295:2:2250
-2296:2:2262
-2297:2:2267
-2298:2:2271
-2299:2:2272
-2300:2:2279
-2301:2:2280
-2302:2:2291
-2303:2:2292
-2304:2:2293
-2305:2:2291
-2306:2:2292
-2307:2:2293
-2308:2:2304
-2309:2:2309
-2310:2:2310
-2311:0:4365
-2312:3:3355
-2313:0:4365
-2314:2:2322
-2315:0:4365
-2316:2:1169
-2317:0:4365
-2318:3:3354
-2319:0:4365
-2320:2:1170
-2321:0:4365
-2322:3:3355
-2323:0:4365
-2324:3:3356
-2325:0:4365
-2326:3:3366
-2327:0:4365
-2328:3:2951
-2329:0:4365
-2330:3:2952
-2331:0:4365
-2332:3:2953
-2333:0:4365
-2334:3:2954
-2335:3:2958
-2336:3:2959
-2337:3:2967
-2338:3:2968
-2339:3:2972
-2340:3:2973
-2341:3:2967
-2342:3:2968
-2343:3:2972
-2344:3:2973
-2345:3:2981
-2346:3:2986
-2347:3:2990
-2348:3:2991
-2349:3:2998
-2350:3:2999
-2351:3:3010
-2352:3:3011
-2353:3:3012
-2354:3:3010
-2355:3:3011
-2356:3:3012
-2357:3:3023
-2358:3:3028
-2359:3:3029
-2360:0:4365
-2361:3:3041
-2362:0:4365
-2363:3:3042
-2364:0:4365
-2365:2:1173
-2366:0:4365
-2367:3:3043
-2368:0:4365
-2369:2:1179
-2370:0:4365
-2371:2:1180
-2372:0:4365
-2373:3:3042
-2374:0:4365
-2375:2:1181
-2376:2:1185
-2377:2:1186
-2378:2:1194
-2379:2:1195
-2380:2:1199
-2381:2:1200
-2382:2:1194
-2383:2:1195
-2384:2:1199
-2385:2:1200
-2386:2:1208
-2387:2:1213
-2388:2:1217
-2389:2:1218
-2390:2:1225
-2391:2:1226
-2392:2:1237
-2393:2:1238
-2394:2:1239
-2395:2:1237
-2396:2:1238
-2397:2:1239
-2398:2:1250
-2399:2:1255
-2400:2:1256
-2401:0:4365
-2402:3:3043
-2403:0:4365
-2404:2:1268
-2405:0:4365
-2406:3:3042
-2407:0:4365
-2408:2:1270
-2409:0:4365
-2410:3:3043
-2411:0:4365
-2412:2:1271
-2413:2:1275
-2414:2:1276
-2415:2:1284
-2416:2:1285
-2417:2:1289
-2418:2:1290
-2419:2:1284
-2420:2:1285
-2421:2:1289
-2422:2:1290
-2423:2:1298
-2424:2:1303
-2425:2:1307
-2426:2:1308
-2427:2:1315
-2428:2:1316
-2429:2:1327
-2430:2:1328
-2431:2:1329
-2432:2:1327
-2433:2:1328
-2434:2:1329
-2435:2:1340
-2436:2:1345
-2437:2:1346
-2438:0:4365
-2439:2:1358
-2440:0:4365
-2441:2:1360
-2442:0:4365
-2443:3:3042
-2444:0:4365
-2445:2:1361
-2446:0:4365
-2447:3:3043
-2448:0:4365
-2449:2:1362
-2450:2:1366
-2451:2:1367
-2452:2:1375
-2453:2:1376
-2454:2:1380
-2455:2:1381
-2456:2:1375
-2457:2:1376
-2458:2:1380
-2459:2:1381
-2460:2:1389
-2461:2:1394
-2462:2:1398
-2463:2:1399
-2464:2:1406
-2465:2:1407
-2466:2:1418
-2467:2:1419
-2468:2:1420
-2469:2:1418
-2470:2:1419
-2471:2:1420
-2472:2:1431
-2473:2:1436
-2474:2:1437
-2475:0:4365
-2476:2:1449
-2477:0:4365
-2478:3:3042
-2479:0:4365
-2480:2:1451
-2481:0:4365
-2482:3:3043
-2483:0:4365
-2484:2:1652
-2485:0:4365
-2486:2:1653
-2487:0:4365
-2488:2:1657
-2489:0:4365
-2490:2:1660
-2491:0:4365
-2492:3:3042
-2493:0:4365
-2494:2:1665
-2495:2:1669
-2496:2:1670
-2497:2:1678
-2498:2:1679
-2499:2:1683
-2500:2:1684
-2501:2:1678
-2502:2:1679
-2503:2:1680
-2504:2:1692
-2505:2:1697
-2506:2:1701
-2507:2:1702
-2508:2:1709
-2509:2:1710
-2510:2:1721
-2511:2:1722
-2512:2:1723
-2513:2:1721
-2514:2:1722
-2515:2:1723
-2516:2:1734
-2517:2:1739
-2518:2:1740
-2519:0:4365
-2520:3:3043
-2521:0:4365
-2522:2:1752
-2523:0:4365
-2524:3:3042
-2525:0:4365
-2526:2:1754
-2527:0:4365
-2528:3:3043
-2529:0:4365
-2530:2:1755
-2531:2:1759
-2532:2:1760
-2533:2:1768
-2534:2:1769
-2535:2:1773
-2536:2:1774
-2537:2:1768
-2538:2:1769
-2539:2:1773
-2540:2:1774
-2541:2:1782
-2542:2:1787
-2543:2:1791
-2544:2:1792
-2545:2:1799
-2546:2:1800
-2547:2:1811
-2548:2:1812
-2549:2:1813
-2550:2:1811
-2551:2:1812
-2552:2:1813
-2553:2:1824
-2554:2:1829
-2555:2:1830
-2556:0:4365
-2557:2:1842
-2558:0:4365
-2559:3:3042
-2560:0:4365
-2561:2:1844
-2562:0:4365
-2563:3:3043
-2564:0:4365
-2565:2:1845
-2566:2:1849
-2567:2:1850
-2568:2:1858
-2569:2:1859
-2570:2:1863
-2571:2:1864
-2572:2:1858
-2573:2:1859
-2574:2:1863
-2575:2:1864
-2576:2:1872
-2577:2:1877
-2578:2:1881
-2579:2:1882
-2580:2:1889
-2581:2:1890
-2582:2:1901
-2583:2:1902
-2584:2:1903
-2585:2:1901
-2586:2:1902
-2587:2:1903
-2588:2:1914
-2589:2:1919
-2590:2:1920
-2591:0:4365
-2592:2:1932
-2593:0:4365
-2594:3:3042
-2595:0:4365
-2596:2:1934
-2597:0:4365
-2598:3:3043
-2599:0:4365
-2600:2:1935
-2601:0:4365
-2602:2:1936
-2603:0:4365
-2604:2:2129
-2605:0:4365
-2606:2:2130
-2607:0:4365
-2608:2:2134
-2609:0:4365
-2610:3:3042
-2611:0:4365
-2612:2:2136
-2613:0:4365
-2614:3:3043
-2615:0:4365
-2616:2:2137
-2617:2:2141
-2618:2:2142
-2619:2:2150
-2620:2:2151
-2621:2:2155
-2622:2:2156
-2623:2:2150
-2624:2:2151
-2625:2:2155
-2626:2:2156
-2627:2:2164
-2628:2:2169
-2629:2:2173
-2630:2:2174
-2631:2:2181
-2632:2:2182
-2633:2:2193
-2634:2:2194
-2635:2:2195
-2636:2:2193
-2637:2:2194
-2638:2:2195
-2639:2:2206
-2640:2:2211
-2641:2:2212
-2642:0:4365
-2643:2:2224
-2644:0:4365
-2645:3:3042
-2646:0:4365
-2647:2:2226
-2648:0:4365
-2649:3:3043
-2650:0:4365
-2651:2:2230
-2652:0:4365
-2653:3:3042
-2654:0:4365
-2655:2:2235
-2656:2:2239
-2657:2:2240
-2658:2:2248
-2659:2:2249
-2660:2:2253
-2661:2:2254
-2662:2:2248
-2663:2:2249
-2664:2:2250
-2665:2:2262
-2666:2:2267
-2667:2:2271
-2668:2:2272
-2669:2:2279
-2670:2:2280
-2671:2:2291
-2672:2:2292
-2673:2:2293
-2674:2:2291
-2675:2:2292
-2676:2:2293
-2677:2:2304
-2678:2:2309
-2679:2:2310
-2680:0:4365
-2681:3:3043
-2682:0:4365
-2683:2:2322
-2684:0:4365
-2685:2:1169
-2686:0:4365
-2687:3:3042
-2688:0:4365
-2689:2:1170
-2690:0:4365
-2691:3:3043
-2692:0:4365
-2693:3:3044
-2694:0:4365
-2695:3:3257
-2696:0:4365
-2697:3:3362
-2698:0:4365
-2699:3:3363
-2700:0:4365
-2701:3:3367
-2702:0:4365
-2703:3:3373
-2704:3:3377
-2705:3:3378
-2706:3:3386
-2707:3:3387
-2708:3:3391
-2709:3:3392
-2710:3:3386
-2711:3:3387
-2712:3:3391
-2713:3:3392
-2714:3:3400
-2715:3:3405
-2716:3:3409
-2717:3:3410
-2718:3:3417
-2719:3:3418
-2720:3:3429
-2721:3:3430
-2722:3:3431
-2723:3:3429
-2724:3:3430
-2725:3:3431
-2726:3:3442
-2727:3:3447
-2728:3:3448
-2729:0:4365
-2730:3:3460
-2731:0:4365
-2732:3:3461
-2733:0:4365
-2734:2:1173
-2735:0:4365
-2736:3:3462
-2737:0:4365
-2738:2:1179
-2739:0:4365
-2740:2:1180
-2741:0:4365
-2742:3:3461
-2743:0:4365
-2744:2:1181
-2745:2:1185
-2746:2:1186
-2747:2:1194
-2748:2:1195
-2749:2:1199
-2750:2:1200
-2751:2:1194
-2752:2:1195
-2753:2:1199
-2754:2:1200
-2755:2:1208
-2756:2:1213
-2757:2:1217
-2758:2:1218
-2759:2:1225
-2760:2:1226
-2761:2:1237
-2762:2:1238
-2763:2:1239
-2764:2:1237
-2765:2:1238
-2766:2:1239
-2767:2:1250
-2768:2:1255
-2769:2:1256
-2770:0:4365
-2771:3:3462
-2772:0:4365
-2773:2:1268
-2774:0:4365
-2775:3:3461
-2776:0:4365
-2777:2:1270
-2778:0:4365
-2779:3:3462
-2780:0:4365
-2781:2:1271
-2782:2:1275
-2783:2:1276
-2784:2:1284
-2785:2:1285
-2786:2:1289
-2787:2:1290
-2788:2:1284
-2789:2:1285
-2790:2:1289
-2791:2:1290
-2792:2:1298
-2793:2:1303
-2794:2:1307
-2795:2:1308
-2796:2:1315
-2797:2:1316
-2798:2:1327
-2799:2:1328
-2800:2:1329
-2801:2:1327
-2802:2:1328
-2803:2:1329
-2804:2:1340
-2805:2:1345
-2806:2:1346
-2807:0:4365
-2808:2:1358
-2809:0:4365
-2810:2:1360
-2811:0:4365
-2812:3:3461
-2813:0:4365
-2814:2:1361
-2815:0:4365
-2816:3:3462
-2817:0:4365
-2818:2:1362
-2819:2:1366
-2820:2:1367
-2821:2:1375
-2822:2:1376
-2823:2:1380
-2824:2:1381
-2825:2:1375
-2826:2:1376
-2827:2:1380
-2828:2:1381
-2829:2:1389
-2830:2:1394
-2831:2:1398
-2832:2:1399
-2833:2:1406
-2834:2:1407
-2835:2:1418
-2836:2:1419
-2837:2:1420
-2838:2:1418
-2839:2:1419
-2840:2:1420
-2841:2:1431
-2842:2:1436
-2843:2:1437
-2844:0:4365
-2845:2:1449
-2846:0:4365
-2847:3:3461
-2848:0:4365
-2849:2:1451
-2850:0:4365
-2851:3:3462
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3461
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3462
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3461
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3462
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3461
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3462
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3461
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3462
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3461
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3462
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3461
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3462
-3019:0:4365
-3020:2:2230
-3021:0:4365
-3022:3:3461
-3023:0:4365
-3024:2:2235
-3025:2:2239
-3026:2:2240
-3027:2:2248
-3028:2:2249
-3029:2:2253
-3030:2:2254
-3031:2:2248
-3032:2:2249
-3033:2:2250
-3034:2:2262
-3035:2:2267
-3036:2:2271
-3037:2:2272
-3038:2:2279
-3039:2:2280
-3040:2:2291
-3041:2:2292
-3042:2:2293
-3043:2:2291
-3044:2:2292
-3045:2:2293
-3046:2:2304
-3047:2:2309
-3048:2:2310
-3049:0:4365
-3050:3:3462
-3051:0:4365
-3052:2:2322
-3053:0:4365
-3054:2:1169
-3055:0:4365
-3056:3:3461
-3057:0:4365
-3058:2:1170
-3059:0:4365
-3060:3:3462
-3061:0:4365
-3062:3:3463
-3063:0:4365
-3064:3:3469
-3065:0:4365
-3066:3:3470
-3067:3:3474
-3068:3:3475
-3069:3:3483
-3070:3:3484
-3071:3:3488
-3072:3:3489
-3073:3:3483
-3074:3:3484
-3075:3:3488
-3076:3:3489
-3077:3:3497
-3078:3:3502
-3079:3:3506
-3080:3:3507
-3081:3:3514
-3082:3:3515
-3083:3:3526
-3084:3:3527
-3085:3:3528
-3086:3:3526
-3087:3:3527
-3088:3:3528
-3089:3:3539
-3090:3:3544
-3091:3:3545
-3092:0:4365
-3093:3:3557
-3094:0:4365
-3095:3:3558
-3096:0:4365
-3097:2:1173
-3098:0:4365
-3099:3:3559
-3100:0:4365
-3101:2:1179
-3102:0:4365
-3103:2:1180
-3104:0:4365
-3105:3:3558
-3106:0:4365
-3107:2:1181
-3108:2:1185
-3109:2:1186
-3110:2:1194
-3111:2:1195
-3112:2:1199
-3113:2:1200
-3114:2:1194
-3115:2:1195
-3116:2:1199
-3117:2:1200
-3118:2:1208
-3119:2:1213
-3120:2:1217
-3121:2:1218
-3122:2:1225
-3123:2:1226
-3124:2:1237
-3125:2:1238
-3126:2:1239
-3127:2:1237
-3128:2:1238
-3129:2:1239
-3130:2:1250
-3131:2:1255
-3132:2:1256
-3133:0:4365
-3134:3:3559
-3135:0:4365
-3136:2:1268
-3137:0:4365
-3138:3:3558
-3139:0:4365
-3140:2:1270
-3141:0:4365
-3142:3:3559
-3143:0:4365
-3144:2:1271
-3145:2:1275
-3146:2:1276
-3147:2:1284
-3148:2:1285
-3149:2:1289
-3150:2:1290
-3151:2:1284
-3152:2:1285
-3153:2:1289
-3154:2:1290
-3155:2:1298
-3156:2:1303
-3157:2:1307
-3158:2:1308
-3159:2:1315
-3160:2:1316
-3161:2:1327
-3162:2:1328
-3163:2:1329
-3164:2:1327
-3165:2:1328
-3166:2:1329
-3167:2:1340
-3168:2:1345
-3169:2:1346
-3170:0:4365
-3171:2:1358
-3172:0:4365
-3173:2:1360
-3174:0:4365
-3175:3:3558
-3176:0:4365
-3177:2:1361
-3178:0:4365
-3179:3:3559
-3180:0:4365
-3181:2:1362
-3182:2:1366
-3183:2:1367
-3184:2:1375
-3185:2:1376
-3186:2:1380
-3187:2:1381
-3188:2:1375
-3189:2:1376
-3190:2:1380
-3191:2:1381
-3192:2:1389
-3193:2:1394
-3194:2:1398
-3195:2:1399
-3196:2:1406
-3197:2:1407
-3198:2:1418
-3199:2:1419
-3200:2:1420
-3201:2:1418
-3202:2:1419
-3203:2:1420
-3204:2:1431
-3205:2:1436
-3206:2:1437
-3207:0:4365
-3208:2:1449
-3209:0:4365
-3210:3:3558
-3211:0:4365
-3212:2:1451
-3213:0:4365
-3214:3:3559
-3215:0:4365
-3216:2:1652
-3217:0:4365
-3218:2:1653
-3219:0:4365
-3220:2:1657
-3221:0:4365
-3222:2:1660
-3223:0:4365
-3224:3:3558
-3225:0:4365
-3226:2:1665
-3227:2:1669
-3228:2:1670
-3229:2:1678
-3230:2:1679
-3231:2:1683
-3232:2:1684
-3233:2:1678
-3234:2:1679
-3235:2:1680
-3236:2:1692
-3237:2:1697
-3238:2:1701
-3239:2:1702
-3240:2:1709
-3241:2:1710
-3242:2:1721
-3243:2:1722
-3244:2:1723
-3245:2:1721
-3246:2:1722
-3247:2:1723
-3248:2:1734
-3249:2:1739
-3250:2:1740
-3251:0:4365
-3252:3:3559
-3253:0:4365
-3254:2:1752
-3255:0:4365
-3256:3:3558
-3257:0:4365
-3258:2:1754
-3259:0:4365
-3260:3:3559
-3261:0:4365
-3262:2:1755
-3263:2:1759
-3264:2:1760
-3265:2:1768
-3266:2:1769
-3267:2:1773
-3268:2:1774
-3269:2:1768
-3270:2:1769
-3271:2:1773
-3272:2:1774
-3273:2:1782
-3274:2:1787
-3275:2:1791
-3276:2:1792
-3277:2:1799
-3278:2:1800
-3279:2:1811
-3280:2:1812
-3281:2:1813
-3282:2:1811
-3283:2:1812
-3284:2:1813
-3285:2:1824
-3286:2:1829
-3287:2:1830
-3288:0:4365
-3289:2:1842
-3290:0:4365
-3291:3:3558
-3292:0:4365
-3293:2:1844
-3294:0:4365
-3295:3:3559
-3296:0:4365
-3297:2:1845
-3298:2:1849
-3299:2:1850
-3300:2:1858
-3301:2:1859
-3302:2:1863
-3303:2:1864
-3304:2:1858
-3305:2:1859
-3306:2:1863
-3307:2:1864
-3308:2:1872
-3309:2:1877
-3310:2:1881
-3311:2:1882
-3312:2:1889
-3313:2:1890
-3314:2:1901
-3315:2:1902
-3316:2:1903
-3317:2:1901
-3318:2:1902
-3319:2:1903
-3320:2:1914
-3321:2:1919
-3322:2:1920
-3323:0:4365
-3324:2:1932
-3325:0:4365
-3326:3:3558
-3327:0:4365
-3328:2:1934
-3329:0:4365
-3330:3:3559
-3331:0:4365
-3332:2:1935
-3333:0:4365
-3334:2:1936
-3335:0:4365
-3336:2:2129
-3337:0:4365
-3338:2:2130
-3339:0:4365
-3340:2:2134
-3341:0:4365
-3342:3:3558
-3343:0:4365
-3344:2:2136
-3345:0:4365
-3346:3:3559
-3347:0:4365
-3348:2:2137
-3349:2:2141
-3350:2:2142
-3351:2:2150
-3352:2:2151
-3353:2:2155
-3354:2:2156
-3355:2:2150
-3356:2:2151
-3357:2:2155
-3358:2:2156
-3359:2:2164
-3360:2:2169
-3361:2:2173
-3362:2:2174
-3363:2:2181
-3364:2:2182
-3365:2:2193
-3366:2:2194
-3367:2:2195
-3368:2:2193
-3369:2:2194
-3370:2:2195
-3371:2:2206
-3372:2:2211
-3373:2:2212
-3374:0:4365
-3375:2:2224
-3376:0:4365
-3377:3:3558
-3378:0:4365
-3379:2:2226
-3380:0:4365
-3381:3:3559
-3382:0:4365
-3383:2:2230
-3384:0:4365
-3385:3:3558
-3386:0:4365
-3387:2:2235
-3388:2:2239
-3389:2:2240
-3390:2:2248
-3391:2:2249
-3392:2:2253
-3393:2:2254
-3394:2:2248
-3395:2:2249
-3396:2:2250
-3397:2:2262
-3398:2:2267
-3399:2:2271
-3400:2:2272
-3401:2:2279
-3402:2:2280
-3403:2:2291
-3404:2:2292
-3405:2:2293
-3406:2:2291
-3407:2:2292
-3408:2:2293
-3409:2:2304
-3410:2:2309
-3411:2:2310
-3412:0:4365
-3413:3:3559
-3414:0:4365
-3415:2:2322
-3416:0:4365
-3417:2:1169
-3418:0:4365
-3419:3:3558
-3420:0:4365
-3421:2:1170
-3422:0:4365
-3423:3:3559
-3424:0:4365
-3425:3:3560
-3426:0:4365
-3427:3:3566
-3428:0:4365
-3429:3:3569
-3430:3:3570
-3431:3:3582
-3432:3:3583
-3433:3:3587
-3434:3:3588
-3435:3:3582
-3436:3:3583
-3437:3:3587
-3438:3:3588
-3439:3:3596
-3440:3:3601
-3441:3:3605
-3442:3:3606
-3443:3:3613
-3444:3:3614
-3445:3:3625
-3446:3:3626
-3447:3:3627
-3448:3:3625
-3449:3:3626
-3450:3:3627
-3451:3:3638
-3452:3:3643
-3453:3:3644
-3454:0:4365
-3455:3:3656
-3456:0:4365
-3457:3:3657
-3458:0:4365
-3459:2:1173
-3460:0:4365
-3461:3:3658
-3462:0:4365
-3463:2:1179
-3464:0:4365
-3465:2:1180
-3466:0:4365
-3467:3:3657
-3468:0:4365
-3469:2:1181
-3470:2:1185
-3471:2:1186
-3472:2:1194
-3473:2:1195
-3474:2:1199
-3475:2:1200
-3476:2:1194
-3477:2:1195
-3478:2:1199
-3479:2:1200
-3480:2:1208
-3481:2:1213
-3482:2:1217
-3483:2:1218
-3484:2:1225
-3485:2:1226
-3486:2:1237
-3487:2:1238
-3488:2:1239
-3489:2:1237
-3490:2:1238
-3491:2:1239
-3492:2:1250
-3493:2:1255
-3494:2:1256
-3495:0:4365
-3496:3:3658
-3497:0:4365
-3498:2:1268
-3499:0:4365
-3500:3:3657
-3501:0:4365
-3502:2:1270
-3503:0:4365
-3504:3:3658
-3505:0:4365
-3506:2:1271
-3507:2:1275
-3508:2:1276
-3509:2:1284
-3510:2:1285
-3511:2:1289
-3512:2:1290
-3513:2:1284
-3514:2:1285
-3515:2:1289
-3516:2:1290
-3517:2:1298
-3518:2:1303
-3519:2:1307
-3520:2:1308
-3521:2:1315
-3522:2:1316
-3523:2:1327
-3524:2:1328
-3525:2:1329
-3526:2:1327
-3527:2:1328
-3528:2:1329
-3529:2:1340
-3530:2:1345
-3531:2:1346
-3532:0:4365
-3533:2:1358
-3534:0:4365
-3535:2:1360
-3536:0:4365
-3537:3:3657
-3538:0:4365
-3539:2:1361
-3540:0:4365
-3541:3:3658
-3542:0:4365
-3543:2:1362
-3544:2:1366
-3545:2:1367
-3546:2:1375
-3547:2:1376
-3548:2:1380
-3549:2:1381
-3550:2:1375
-3551:2:1376
-3552:2:1380
-3553:2:1381
-3554:2:1389
-3555:2:1394
-3556:2:1398
-3557:2:1399
-3558:2:1406
-3559:2:1407
-3560:2:1418
-3561:2:1419
-3562:2:1420
-3563:2:1418
-3564:2:1419
-3565:2:1420
-3566:2:1431
-3567:2:1436
-3568:2:1437
-3569:0:4365
-3570:2:1449
-3571:0:4365
-3572:3:3657
-3573:0:4365
-3574:2:1451
-3575:0:4365
-3576:3:3658
-3577:0:4365
-3578:2:1652
-3579:0:4365
-3580:2:1653
-3581:0:4365
-3582:2:1657
-3583:0:4365
-3584:2:1660
-3585:0:4365
-3586:3:3657
-3587:0:4365
-3588:2:1665
-3589:2:1669
-3590:2:1670
-3591:2:1678
-3592:2:1679
-3593:2:1683
-3594:2:1684
-3595:2:1678
-3596:2:1679
-3597:2:1680
-3598:2:1692
-3599:2:1697
-3600:2:1701
-3601:2:1702
-3602:2:1709
-3603:2:1710
-3604:2:1721
-3605:2:1722
-3606:2:1723
-3607:2:1721
-3608:2:1722
-3609:2:1723
-3610:2:1734
-3611:2:1739
-3612:2:1740
-3613:0:4365
-3614:3:3658
-3615:0:4365
-3616:2:1752
-3617:0:4365
-3618:3:3657
-3619:0:4365
-3620:2:1754
-3621:0:4365
-3622:3:3658
-3623:0:4365
-3624:2:1755
-3625:2:1759
-3626:2:1760
-3627:2:1768
-3628:2:1769
-3629:2:1773
-3630:2:1774
-3631:2:1768
-3632:2:1769
-3633:2:1773
-3634:2:1774
-3635:2:1782
-3636:2:1787
-3637:2:1791
-3638:2:1792
-3639:2:1799
-3640:2:1800
-3641:2:1811
-3642:2:1812
-3643:2:1813
-3644:2:1811
-3645:2:1812
-3646:2:1813
-3647:2:1824
-3648:2:1829
-3649:2:1830
-3650:0:4365
-3651:2:1842
-3652:0:4365
-3653:3:3657
-3654:0:4365
-3655:2:1844
-3656:0:4365
-3657:3:3658
-3658:0:4365
-3659:2:1845
-3660:2:1849
-3661:2:1850
-3662:2:1858
-3663:2:1859
-3664:2:1863
-3665:2:1864
-3666:2:1858
-3667:2:1859
-3668:2:1863
-3669:2:1864
-3670:2:1872
-3671:2:1877
-3672:2:1881
-3673:2:1882
-3674:2:1889
-3675:2:1890
-3676:2:1901
-3677:2:1902
-3678:2:1903
-3679:2:1901
-3680:2:1902
-3681:2:1903
-3682:2:1914
-3683:2:1919
-3684:2:1920
-3685:0:4365
-3686:2:1932
-3687:0:4365
-3688:3:3657
-3689:0:4365
-3690:2:1934
-3691:0:4365
-3692:3:3658
-3693:0:4365
-3694:2:1935
-3695:0:4365
-3696:2:1936
-3697:0:4365
-3698:2:2129
-3699:0:4365
-3700:2:2130
-3701:0:4365
-3702:2:2134
-3703:0:4365
-3704:3:3657
-3705:0:4365
-3706:2:2136
-3707:0:4365
-3708:3:3658
-3709:0:4365
-3710:2:2137
-3711:2:2141
-3712:2:2142
-3713:2:2150
-3714:2:2151
-3715:2:2155
-3716:2:2156
-3717:2:2150
-3718:2:2151
-3719:2:2155
-3720:2:2156
-3721:2:2164
-3722:2:2169
-3723:2:2173
-3724:2:2174
-3725:2:2181
-3726:2:2182
-3727:2:2193
-3728:2:2194
-3729:2:2195
-3730:2:2193
-3731:2:2194
-3732:2:2195
-3733:2:2206
-3734:2:2211
-3735:2:2212
-3736:0:4365
-3737:2:2224
-3738:0:4365
-3739:3:3657
-3740:0:4365
-3741:2:2226
-3742:0:4365
-3743:3:3658
-3744:0:4365
-3745:2:2230
-3746:0:4365
-3747:3:3657
-3748:0:4365
-3749:2:2235
-3750:2:2239
-3751:2:2240
-3752:2:2248
-3753:2:2249
-3754:2:2253
-3755:2:2254
-3756:2:2248
-3757:2:2249
-3758:2:2250
-3759:2:2262
-3760:2:2267
-3761:2:2271
-3762:2:2272
-3763:2:2279
-3764:2:2280
-3765:2:2291
-3766:2:2292
-3767:2:2293
-3768:2:2291
-3769:2:2292
-3770:2:2293
-3771:2:2304
-3772:2:2309
-3773:2:2310
-3774:0:4365
-3775:3:3658
-3776:0:4365
-3777:2:2322
-3778:0:4365
-3779:2:1169
-3780:0:4365
-3781:3:3657
-3782:0:4365
-3783:2:1170
-3784:0:4365
-3785:3:3658
-3786:0:4365
-3787:3:3659
-3788:0:4365
-3789:3:3665
-3790:0:4365
-3791:3:3666
-3792:0:4365
-3793:3:3667
-3794:0:4365
-3795:3:3668
-3796:0:4365
-3797:3:3669
-3798:3:3673
-3799:3:3674
-3800:3:3682
-3801:3:3683
-3802:3:3687
-3803:3:3688
-3804:3:3682
-3805:3:3683
-3806:3:3687
-3807:3:3688
-3808:3:3696
-3809:3:3701
-3810:3:3705
-3811:3:3706
-3812:3:3713
-3813:3:3714
-3814:3:3725
-3815:3:3726
-3816:3:3727
-3817:3:3725
-3818:3:3726
-3819:3:3727
-3820:3:3738
-3821:3:3743
-3822:3:3744
-3823:0:4365
-3824:3:3756
-3825:0:4365
-3826:3:3757
-3827:0:4365
-3828:2:1173
-3829:0:4365
-3830:3:3758
-3831:0:4365
-3832:2:1179
-3833:0:4365
-3834:2:1180
-3835:0:4365
-3836:3:3757
-3837:0:4365
-3838:2:1181
-3839:2:1185
-3840:2:1186
-3841:2:1194
-3842:2:1195
-3843:2:1199
-3844:2:1200
-3845:2:1194
-3846:2:1195
-3847:2:1199
-3848:2:1200
-3849:2:1208
-3850:2:1213
-3851:2:1217
-3852:2:1218
-3853:2:1225
-3854:2:1226
-3855:2:1237
-3856:2:1238
-3857:2:1239
-3858:2:1237
-3859:2:1238
-3860:2:1239
-3861:2:1250
-3862:2:1255
-3863:2:1256
-3864:0:4365
-3865:3:3758
-3866:0:4365
-3867:2:1268
-3868:0:4365
-3869:3:3757
-3870:0:4365
-3871:2:1270
-3872:0:4365
-3873:3:3758
-3874:0:4365
-3875:2:1271
-3876:2:1275
-3877:2:1276
-3878:2:1284
-3879:2:1285
-3880:2:1289
-3881:2:1290
-3882:2:1284
-3883:2:1285
-3884:2:1289
-3885:2:1290
-3886:2:1298
-3887:2:1303
-3888:2:1307
-3889:2:1308
-3890:2:1315
-3891:2:1316
-3892:2:1327
-3893:2:1328
-3894:2:1329
-3895:2:1327
-3896:2:1328
-3897:2:1329
-3898:2:1340
-3899:2:1345
-3900:2:1346
-3901:0:4365
-3902:2:1358
-3903:0:4365
-3904:2:1360
-3905:0:4365
-3906:3:3757
-3907:0:4365
-3908:2:1361
-3909:0:4365
-3910:3:3758
-3911:0:4365
-3912:2:1362
-3913:2:1366
-3914:2:1367
-3915:2:1375
-3916:2:1376
-3917:2:1380
-3918:2:1381
-3919:2:1375
-3920:2:1376
-3921:2:1380
-3922:2:1381
-3923:2:1389
-3924:2:1394
-3925:2:1398
-3926:2:1399
-3927:2:1406
-3928:2:1407
-3929:2:1418
-3930:2:1419
-3931:2:1420
-3932:2:1418
-3933:2:1419
-3934:2:1420
-3935:2:1431
-3936:2:1436
-3937:2:1437
-3938:0:4365
-3939:2:1449
-3940:0:4365
-3941:3:3757
-3942:0:4365
-3943:2:1451
-3944:0:4365
-3945:3:3758
-3946:0:4365
-3947:2:1652
-3948:0:4365
-3949:2:1653
-3950:0:4365
-3951:2:1657
-3952:0:4365
-3953:2:1660
-3954:0:4365
-3955:3:3757
-3956:0:4365
-3957:2:1665
-3958:2:1669
-3959:2:1670
-3960:2:1678
-3961:2:1679
-3962:2:1683
-3963:2:1684
-3964:2:1678
-3965:2:1679
-3966:2:1680
-3967:2:1692
-3968:2:1697
-3969:2:1701
-3970:2:1702
-3971:2:1709
-3972:2:1710
-3973:2:1721
-3974:2:1722
-3975:2:1723
-3976:2:1721
-3977:2:1722
-3978:2:1723
-3979:2:1734
-3980:2:1739
-3981:2:1740
-3982:0:4365
-3983:3:3758
-3984:0:4365
-3985:2:1752
-3986:0:4365
-3987:3:3757
-3988:0:4365
-3989:2:1754
-3990:0:4365
-3991:3:3758
-3992:0:4365
-3993:2:1755
-3994:2:1759
-3995:2:1760
-3996:2:1768
-3997:2:1769
-3998:2:1773
-3999:2:1774
-4000:2:1768
-4001:2:1769
-4002:2:1773
-4003:2:1774
-4004:2:1782
-4005:2:1787
-4006:2:1791
-4007:2:1792
-4008:2:1799
-4009:2:1800
-4010:2:1811
-4011:2:1812
-4012:2:1813
-4013:2:1811
-4014:2:1812
-4015:2:1813
-4016:2:1824
-4017:2:1829
-4018:2:1830
-4019:0:4365
-4020:2:1842
-4021:0:4365
-4022:3:3757
-4023:0:4365
-4024:2:1844
-4025:0:4365
-4026:3:3758
-4027:0:4365
-4028:2:1845
-4029:2:1849
-4030:2:1850
-4031:2:1858
-4032:2:1859
-4033:2:1863
-4034:2:1864
-4035:2:1858
-4036:2:1859
-4037:2:1863
-4038:2:1864
-4039:2:1872
-4040:2:1877
-4041:2:1881
-4042:2:1882
-4043:2:1889
-4044:2:1890
-4045:2:1901
-4046:2:1902
-4047:2:1903
-4048:2:1901
-4049:2:1902
-4050:2:1903
-4051:2:1914
-4052:2:1919
-4053:2:1920
-4054:0:4365
-4055:2:1932
-4056:0:4365
-4057:3:3757
-4058:0:4365
-4059:2:1934
-4060:0:4365
-4061:3:3758
-4062:0:4365
-4063:2:1935
-4064:0:4365
-4065:2:1936
-4066:0:4365
-4067:2:2129
-4068:0:4365
-4069:2:2130
-4070:0:4365
-4071:2:2134
-4072:0:4365
-4073:3:3757
-4074:0:4365
-4075:2:2136
-4076:0:4365
-4077:3:3758
-4078:0:4365
-4079:2:2137
-4080:2:2141
-4081:2:2142
-4082:2:2150
-4083:2:2151
-4084:2:2155
-4085:2:2156
-4086:2:2150
-4087:2:2151
-4088:2:2155
-4089:2:2156
-4090:2:2164
-4091:2:2169
-4092:2:2173
-4093:2:2174
-4094:2:2181
-4095:2:2182
-4096:2:2193
-4097:2:2194
-4098:2:2195
-4099:2:2193
-4100:2:2194
-4101:2:2195
-4102:2:2206
-4103:2:2211
-4104:2:2212
-4105:0:4365
-4106:2:2224
-4107:0:4365
-4108:3:3757
-4109:0:4365
-4110:2:2226
-4111:0:4365
-4112:3:3758
-4113:0:4365
-4114:2:2230
-4115:0:4365
-4116:3:3757
-4117:0:4365
-4118:2:2235
-4119:2:2239
-4120:2:2240
-4121:2:2248
-4122:2:2249
-4123:2:2253
-4124:2:2254
-4125:2:2248
-4126:2:2249
-4127:2:2250
-4128:2:2262
-4129:2:2267
-4130:2:2271
-4131:2:2272
-4132:2:2279
-4133:2:2280
-4134:2:2291
-4135:2:2292
-4136:2:2293
-4137:2:2291
-4138:2:2292
-4139:2:2293
-4140:2:2304
-4141:2:2309
-4142:2:2310
-4143:0:4365
-4144:3:3758
-4145:0:4365
-4146:2:2322
-4147:0:4365
-4148:2:1169
-4149:0:4365
-4150:3:3757
-4151:0:4365
-4152:2:1170
-4153:0:4365
-4154:3:3758
-4155:0:4365
-4156:3:3759
-4157:0:4365
-4158:3:3972
-4159:0:4365
-4160:3:3980
-4161:0:4365
-4162:3:3981
-4163:3:3985
-4164:3:3986
-4165:3:3994
-4166:3:3995
-4167:3:3999
-4168:3:4000
-4169:3:3994
-4170:3:3995
-4171:3:3999
-4172:3:4000
-4173:3:4008
-4174:3:4013
-4175:3:4017
-4176:3:4018
-4177:3:4025
-4178:3:4026
-4179:3:4037
-4180:3:4038
-4181:3:4039
-4182:3:4037
-4183:3:4038
-4184:3:4039
-4185:3:4050
-4186:3:4055
-4187:3:4056
-4188:0:4365
-4189:3:4068
-4190:0:4365
-4191:3:4069
-4192:0:4365
-4193:2:1173
-4194:0:4365
-4195:3:4070
-4196:0:4365
-4197:2:1179
-4198:0:4365
-4199:2:1180
-4200:0:4365
-4201:3:4069
-4202:0:4365
-4203:2:1181
-4204:2:1185
-4205:2:1186
-4206:2:1194
-4207:2:1195
-4208:2:1199
-4209:2:1200
-4210:2:1194
-4211:2:1195
-4212:2:1199
-4213:2:1200
-4214:2:1208
-4215:2:1213
-4216:2:1217
-4217:2:1218
-4218:2:1225
-4219:2:1226
-4220:2:1237
-4221:2:1238
-4222:2:1239
-4223:2:1237
-4224:2:1238
-4225:2:1239
-4226:2:1250
-4227:2:1255
-4228:2:1256
-4229:0:4365
-4230:3:4070
-4231:0:4365
-4232:2:1268
-4233:0:4365
-4234:3:4069
-4235:0:4365
-4236:2:1270
-4237:0:4365
-4238:3:4070
-4239:0:4365
-4240:2:1271
-4241:2:1275
-4242:2:1276
-4243:2:1284
-4244:2:1285
-4245:2:1289
-4246:2:1290
-4247:2:1284
-4248:2:1285
-4249:2:1289
-4250:2:1290
-4251:2:1298
-4252:2:1303
-4253:2:1307
-4254:2:1308
-4255:2:1315
-4256:2:1316
-4257:2:1327
-4258:2:1328
-4259:2:1329
-4260:2:1327
-4261:2:1328
-4262:2:1329
-4263:2:1340
-4264:2:1345
-4265:2:1346
-4266:0:4365
-4267:2:1358
-4268:0:4365
-4269:2:1360
-4270:0:4365
-4271:3:4069
-4272:0:4365
-4273:2:1361
-4274:0:4365
-4275:3:4070
-4276:0:4365
-4277:2:1362
-4278:2:1366
-4279:2:1367
-4280:2:1375
-4281:2:1376
-4282:2:1380
-4283:2:1381
-4284:2:1375
-4285:2:1376
-4286:2:1380
-4287:2:1381
-4288:2:1389
-4289:2:1394
-4290:2:1398
-4291:2:1399
-4292:2:1406
-4293:2:1407
-4294:2:1418
-4295:2:1419
-4296:2:1420
-4297:2:1418
-4298:2:1419
-4299:2:1420
-4300:2:1431
-4301:2:1436
-4302:2:1437
-4303:0:4365
-4304:2:1449
-4305:0:4365
-4306:3:4069
-4307:0:4365
-4308:2:1451
-4309:0:4365
-4310:3:4070
-4311:0:4365
-4312:2:1652
-4313:0:4365
-4314:2:1653
-4315:0:4365
-4316:2:1657
-4317:0:4365
-4318:2:1660
-4319:0:4365
-4320:3:4069
-4321:0:4365
-4322:2:1665
-4323:2:1669
-4324:2:1670
-4325:2:1678
-4326:2:1679
-4327:2:1683
-4328:2:1684
-4329:2:1678
-4330:2:1679
-4331:2:1680
-4332:2:1692
-4333:2:1697
-4334:2:1701
-4335:2:1702
-4336:2:1709
-4337:2:1710
-4338:2:1721
-4339:2:1722
-4340:2:1723
-4341:2:1721
-4342:2:1722
-4343:2:1723
-4344:2:1734
-4345:2:1739
-4346:2:1740
-4347:0:4365
-4348:3:4070
-4349:0:4365
-4350:2:1752
-4351:0:4365
-4352:3:4069
-4353:0:4365
-4354:2:1754
-4355:0:4365
-4356:3:4070
-4357:0:4365
-4358:2:1755
-4359:2:1759
-4360:2:1760
-4361:2:1768
-4362:2:1769
-4363:2:1773
-4364:2:1774
-4365:2:1768
-4366:2:1769
-4367:2:1773
-4368:2:1774
-4369:2:1782
-4370:2:1787
-4371:2:1791
-4372:2:1792
-4373:2:1799
-4374:2:1800
-4375:2:1811
-4376:2:1812
-4377:2:1813
-4378:2:1811
-4379:2:1812
-4380:2:1813
-4381:2:1824
-4382:2:1829
-4383:2:1830
-4384:0:4365
-4385:2:1842
-4386:0:4365
-4387:3:4069
-4388:0:4365
-4389:2:1844
-4390:0:4365
-4391:3:4070
-4392:0:4365
-4393:2:1845
-4394:2:1849
-4395:2:1850
-4396:2:1858
-4397:2:1859
-4398:2:1863
-4399:2:1864
-4400:2:1858
-4401:2:1859
-4402:2:1863
-4403:2:1864
-4404:2:1872
-4405:2:1877
-4406:2:1881
-4407:2:1882
-4408:2:1889
-4409:2:1890
-4410:2:1901
-4411:2:1902
-4412:2:1903
-4413:2:1901
-4414:2:1902
-4415:2:1903
-4416:2:1914
-4417:2:1919
-4418:2:1920
-4419:0:4365
-4420:2:1932
-4421:0:4365
-4422:3:4069
-4423:0:4365
-4424:2:1934
-4425:0:4365
-4426:3:4070
-4427:0:4365
-4428:2:1935
-4429:0:4365
-4430:2:1936
-4431:0:4365
-4432:2:2129
-4433:0:4365
-4434:2:2130
-4435:0:4365
-4436:2:2134
-4437:0:4365
-4438:3:4069
-4439:0:4365
-4440:2:2136
-4441:0:4365
-4442:3:4070
-4443:0:4365
-4444:2:2137
-4445:2:2141
-4446:2:2142
-4447:2:2150
-4448:2:2151
-4449:2:2155
-4450:2:2156
-4451:2:2150
-4452:2:2151
-4453:2:2155
-4454:2:2156
-4455:2:2164
-4456:2:2169
-4457:2:2173
-4458:2:2174
-4459:2:2181
-4460:2:2182
-4461:2:2193
-4462:2:2194
-4463:2:2195
-4464:2:2193
-4465:2:2194
-4466:2:2195
-4467:2:2206
-4468:2:2211
-4469:2:2212
-4470:0:4365
-4471:2:2224
-4472:0:4365
-4473:3:4069
-4474:0:4365
-4475:2:2226
-4476:0:4365
-4477:3:4070
-4478:0:4365
-4479:2:2230
-4480:0:4365
-4481:3:4069
-4482:0:4365
-4483:2:2235
-4484:2:2239
-4485:2:2240
-4486:2:2248
-4487:2:2249
-4488:2:2253
-4489:2:2254
-4490:2:2248
-4491:2:2249
-4492:2:2250
-4493:2:2262
-4494:2:2267
-4495:2:2271
-4496:2:2272
-4497:2:2279
-4498:2:2280
-4499:2:2291
-4500:2:2292
-4501:2:2293
-4502:2:2291
-4503:2:2292
-4504:2:2293
-4505:2:2304
-4506:2:2309
-4507:2:2310
-4508:0:4365
-4509:3:4070
-4510:0:4365
-4511:2:2322
-4512:0:4365
-4513:2:1169
-4514:0:4365
-4515:3:4069
-4516:0:4365
-4517:2:1170
-4518:0:4365
-4519:3:4070
-4520:0:4365
-4521:3:4071
-4522:0:4365
-4523:3:4081
-4524:0:4365
-4525:3:3666
-4526:0:4365
-4527:3:3667
-4528:0:4365
-4529:3:3668
-4530:0:4365
-4531:3:3669
-4532:3:3673
-4533:3:3674
-4534:3:3682
-4535:3:3683
-4536:3:3687
-4537:3:3688
-4538:3:3682
-4539:3:3683
-4540:3:3687
-4541:3:3688
-4542:3:3696
-4543:3:3701
-4544:3:3705
-4545:3:3706
-4546:3:3713
-4547:3:3714
-4548:3:3725
-4549:3:3726
-4550:3:3727
-4551:3:3725
-4552:3:3726
-4553:3:3727
-4554:3:3738
-4555:3:3743
-4556:3:3744
-4557:0:4365
-4558:3:3756
-4559:0:4365
-4560:3:3757
-4561:0:4365
-4562:2:1173
-4563:0:4365
-4564:3:3758
-4565:0:4365
-4566:2:1179
-4567:0:4365
-4568:2:1180
-4569:0:4365
-4570:3:3757
-4571:0:4365
-4572:2:1181
-4573:2:1185
-4574:2:1186
-4575:2:1194
-4576:2:1195
-4577:2:1199
-4578:2:1200
-4579:2:1194
-4580:2:1195
-4581:2:1199
-4582:2:1200
-4583:2:1208
-4584:2:1213
-4585:2:1217
-4586:2:1218
-4587:2:1225
-4588:2:1226
-4589:2:1237
-4590:2:1238
-4591:2:1239
-4592:2:1237
-4593:2:1238
-4594:2:1239
-4595:2:1250
-4596:2:1255
-4597:2:1256
-4598:0:4365
-4599:3:3758
-4600:0:4365
-4601:2:1268
-4602:0:4365
-4603:3:3757
-4604:0:4365
-4605:2:1270
-4606:0:4365
-4607:3:3758
-4608:0:4365
-4609:2:1271
-4610:2:1275
-4611:2:1276
-4612:2:1284
-4613:2:1285
-4614:2:1289
-4615:2:1290
-4616:2:1284
-4617:2:1285
-4618:2:1289
-4619:2:1290
-4620:2:1298
-4621:2:1303
-4622:2:1307
-4623:2:1308
-4624:2:1315
-4625:2:1316
-4626:2:1327
-4627:2:1328
-4628:2:1329
-4629:2:1327
-4630:2:1328
-4631:2:1329
-4632:2:1340
-4633:2:1345
-4634:2:1346
-4635:0:4365
-4636:2:1358
-4637:0:4365
-4638:2:1360
-4639:0:4365
-4640:3:3757
-4641:0:4365
-4642:2:1361
-4643:0:4365
-4644:3:3758
-4645:0:4365
-4646:2:1362
-4647:2:1366
-4648:2:1367
-4649:2:1375
-4650:2:1376
-4651:2:1380
-4652:2:1381
-4653:2:1375
-4654:2:1376
-4655:2:1380
-4656:2:1381
-4657:2:1389
-4658:2:1394
-4659:2:1398
-4660:2:1399
-4661:2:1406
-4662:2:1407
-4663:2:1418
-4664:2:1419
-4665:2:1420
-4666:2:1418
-4667:2:1419
-4668:2:1420
-4669:2:1431
-4670:2:1436
-4671:2:1437
-4672:0:4365
-4673:2:1449
-4674:0:4365
-4675:3:3757
-4676:0:4365
-4677:2:1451
-4678:0:4365
-4679:3:3758
-4680:0:4365
-4681:2:1652
-4682:0:4365
-4683:2:1653
-4684:0:4365
-4685:2:1657
-4686:0:4365
-4687:2:1660
-4688:0:4365
-4689:3:3757
-4690:0:4365
-4691:2:1665
-4692:2:1669
-4693:2:1670
-4694:2:1678
-4695:2:1679
-4696:2:1683
-4697:2:1684
-4698:2:1678
-4699:2:1679
-4700:2:1680
-4701:2:1692
-4702:2:1697
-4703:2:1701
-4704:2:1702
-4705:2:1709
-4706:2:1710
-4707:2:1721
-4708:2:1722
-4709:2:1723
-4710:2:1721
-4711:2:1722
-4712:2:1723
-4713:2:1734
-4714:2:1739
-4715:2:1740
-4716:0:4365
-4717:3:3758
-4718:0:4365
-4719:2:1752
-4720:0:4365
-4721:3:3757
-4722:0:4365
-4723:2:1754
-4724:0:4365
-4725:3:3758
-4726:0:4365
-4727:2:1755
-4728:2:1759
-4729:2:1760
-4730:2:1768
-4731:2:1769
-4732:2:1773
-4733:2:1774
-4734:2:1768
-4735:2:1769
-4736:2:1773
-4737:2:1774
-4738:2:1782
-4739:2:1787
-4740:2:1791
-4741:2:1792
-4742:2:1799
-4743:2:1800
-4744:2:1811
-4745:2:1812
-4746:2:1813
-4747:2:1811
-4748:2:1812
-4749:2:1813
-4750:2:1824
-4751:2:1829
-4752:2:1830
-4753:0:4365
-4754:2:1842
-4755:0:4365
-4756:3:3757
-4757:0:4365
-4758:2:1844
-4759:0:4365
-4760:3:3758
-4761:0:4365
-4762:2:1845
-4763:2:1849
-4764:2:1850
-4765:2:1858
-4766:2:1859
-4767:2:1863
-4768:2:1864
-4769:2:1858
-4770:2:1859
-4771:2:1863
-4772:2:1864
-4773:2:1872
-4774:2:1877
-4775:2:1881
-4776:2:1882
-4777:2:1889
-4778:2:1890
-4779:2:1901
-4780:2:1902
-4781:2:1903
-4782:2:1901
-4783:2:1902
-4784:2:1903
-4785:2:1914
-4786:2:1919
-4787:2:1920
-4788:0:4365
-4789:2:1932
-4790:0:4365
-4791:3:3757
-4792:0:4365
-4793:2:1934
-4794:0:4365
-4795:3:3758
-4796:0:4365
-4797:2:1935
-4798:0:4365
-4799:2:1936
-4800:0:4365
-4801:2:2129
-4802:0:4365
-4803:2:2130
-4804:0:4365
-4805:2:2134
-4806:0:4365
-4807:3:3757
-4808:0:4365
-4809:2:2136
-4810:0:4365
-4811:3:3758
-4812:0:4365
-4813:2:2137
-4814:2:2141
-4815:2:2142
-4816:2:2150
-4817:2:2151
-4818:2:2155
-4819:2:2156
-4820:2:2150
-4821:2:2151
-4822:2:2155
-4823:2:2156
-4824:2:2164
-4825:2:2169
-4826:2:2173
-4827:2:2174
-4828:2:2181
-4829:2:2182
-4830:2:2193
-4831:2:2194
-4832:2:2195
-4833:2:2193
-4834:2:2194
-4835:2:2195
-4836:2:2206
-4837:2:2211
-4838:2:2212
-4839:0:4365
-4840:2:2224
-4841:0:4365
-4842:3:3757
-4843:0:4365
-4844:2:2226
-4845:0:4365
-4846:3:3758
-4847:0:4365
-4848:2:2230
-4849:0:4365
-4850:3:3757
-4851:0:4365
-4852:2:2235
-4853:2:2239
-4854:2:2240
-4855:2:2248
-4856:2:2249
-4857:2:2253
-4858:2:2254
-4859:2:2248
-4860:2:2249
-4861:2:2250
-4862:2:2262
-4863:2:2267
-4864:2:2271
-4865:2:2272
-4866:2:2279
-4867:2:2280
-4868:2:2291
-4869:2:2292
-4870:2:2293
-4871:2:2291
-4872:2:2292
-4873:2:2293
-4874:2:2304
-4875:2:2309
-4876:2:2310
-4877:0:4365
-4878:3:3758
-4879:0:4365
-4880:2:2322
-4881:0:4365
-4882:2:1169
-4883:0:4365
-4884:3:3757
-4885:0:4365
-4886:2:1170
-4887:0:4365
-4888:3:3758
-4889:0:4365
-4890:3:3759
-4891:0:4365
-4892:3:3972
-4893:0:4365
-4894:3:4077
-4895:0:4365
-4896:3:4078
-4897:0:4365
-4898:3:4082
-4899:0:4365
-4900:3:4088
-4901:0:4365
-4902:3:4092
-4903:3:4093
-4904:3:4097
-4905:3:4101
-4906:3:4102
-4907:3:4097
-4908:3:4101
-4909:3:4102
-4910:3:4106
-4911:3:4114
-4912:3:4115
-4913:3:4120
-4914:3:4127
-4915:3:4128
-4916:3:4127
-4917:3:4128
-4918:3:4135
-4919:3:4140
-4920:0:4365
-4921:3:4151
-4922:0:4365
-4923:3:4155
-4924:3:4156
-4925:3:4160
-4926:3:4164
-4927:3:4165
-4928:3:4160
-4929:3:4164
-4930:3:4165
-4931:3:4169
-4932:3:4177
-4933:3:4178
-4934:3:4183
-4935:3:4190
-4936:3:4191
-4937:3:4190
-4938:3:4191
-4939:3:4198
-4940:3:4203
-4941:0:4365
-4942:3:4151
-4943:0:4365
-4944:3:4155
-4945:3:4156
-4946:3:4160
-4947:3:4164
-4948:3:4165
-4949:3:4160
-4950:3:4164
-4951:3:4165
-4952:3:4169
-4953:3:4177
-4954:3:4178
-4955:3:4183
-4956:3:4190
-4957:3:4191
-4958:3:4190
-4959:3:4191
-4960:3:4198
-4961:3:4203
-4962:0:4365
-4963:3:4214
-4964:0:4365
-4965:3:4222
-4966:3:4223
-4967:3:4227
-4968:3:4231
-4969:3:4232
-4970:3:4227
-4971:3:4231
-4972:3:4232
-4973:3:4236
-4974:3:4244
-4975:3:4245
-4976:3:4250
-4977:3:4257
-4978:3:4258
-4979:3:4257
-4980:3:4258
-4981:3:4265
-4982:3:4270
-4983:0:4365
-4984:3:4285
-4985:0:4365
-4986:3:4286
-4987:0:4365
-4988:2:1173
-4989:0:4365
-4990:3:4287
-4991:0:4365
-4992:2:1179
-4993:0:4365
-4994:2:1180
-4995:0:4365
-4996:3:4286
-4997:0:4365
-4998:2:1181
-4999:2:1185
-5000:2:1186
-5001:2:1194
-5002:2:1195
-5003:2:1199
-5004:2:1200
-5005:2:1194
-5006:2:1195
-5007:2:1199
-5008:2:1200
-5009:2:1208
-5010:2:1213
-5011:2:1217
-5012:2:1218
-5013:2:1225
-5014:2:1226
-5015:2:1237
-5016:2:1238
-5017:2:1239
-5018:2:1237
-5019:2:1238
-5020:2:1239
-5021:2:1250
-5022:2:1255
-5023:2:1256
-5024:0:4365
-5025:3:4287
-5026:0:4365
-5027:2:1268
-5028:0:4365
-5029:3:4286
-5030:0:4365
-5031:2:1270
-5032:0:4365
-5033:3:4287
-5034:0:4365
-5035:2:1271
-5036:2:1275
-5037:2:1276
-5038:2:1284
-5039:2:1285
-5040:2:1289
-5041:2:1290
-5042:2:1284
-5043:2:1285
-5044:2:1289
-5045:2:1290
-5046:2:1298
-5047:2:1303
-5048:2:1307
-5049:2:1308
-5050:2:1315
-5051:2:1316
-5052:2:1327
-5053:2:1328
-5054:2:1329
-5055:2:1327
-5056:2:1328
-5057:2:1329
-5058:2:1340
-5059:2:1345
-5060:2:1346
-5061:0:4365
-5062:2:1358
-5063:0:4365
-5064:2:1360
-5065:0:4365
-5066:3:4286
-5067:0:4365
-5068:2:1361
-5069:0:4365
-5070:3:4287
-5071:0:4365
-5072:2:1362
-5073:2:1366
-5074:2:1367
-5075:2:1375
-5076:2:1376
-5077:2:1380
-5078:2:1381
-5079:2:1375
-5080:2:1376
-5081:2:1380
-5082:2:1381
-5083:2:1389
-5084:2:1394
-5085:2:1398
-5086:2:1399
-5087:2:1406
-5088:2:1407
-5089:2:1418
-5090:2:1419
-5091:2:1420
-5092:2:1418
-5093:2:1419
-5094:2:1420
-5095:2:1431
-5096:2:1436
-5097:2:1437
-5098:0:4365
-5099:2:1449
-5100:0:4365
-5101:3:4286
-5102:0:4365
-5103:2:1451
-5104:0:4365
-5105:3:4287
-5106:0:4365
-5107:2:1652
-5108:0:4365
-5109:2:1653
-5110:0:4365
-5111:2:1657
-5112:0:4365
-5113:2:1660
-5114:0:4365
-5115:3:4286
-5116:0:4365
-5117:2:1665
-5118:2:1669
-5119:2:1670
-5120:2:1678
-5121:2:1679
-5122:2:1683
-5123:2:1684
-5124:2:1678
-5125:2:1679
-5126:2:1680
-5127:2:1692
-5128:2:1697
-5129:2:1701
-5130:2:1702
-5131:2:1709
-5132:2:1710
-5133:2:1721
-5134:2:1722
-5135:2:1723
-5136:2:1721
-5137:2:1722
-5138:2:1723
-5139:2:1734
-5140:2:1739
-5141:2:1740
-5142:0:4365
-5143:3:4287
-5144:0:4365
-5145:2:1752
-5146:0:4365
-5147:3:4286
-5148:0:4365
-5149:2:1754
-5150:0:4365
-5151:3:4287
-5152:0:4365
-5153:2:1755
-5154:2:1759
-5155:2:1760
-5156:2:1768
-5157:2:1769
-5158:2:1773
-5159:2:1774
-5160:2:1768
-5161:2:1769
-5162:2:1773
-5163:2:1774
-5164:2:1782
-5165:2:1787
-5166:2:1791
-5167:2:1792
-5168:2:1799
-5169:2:1800
-5170:2:1811
-5171:2:1812
-5172:2:1813
-5173:2:1811
-5174:2:1812
-5175:2:1813
-5176:2:1824
-5177:2:1829
-5178:2:1830
-5179:0:4365
-5180:2:1842
-5181:0:4365
-5182:3:4286
-5183:0:4365
-5184:2:1844
-5185:0:4365
-5186:3:4287
-5187:0:4365
-5188:2:1845
-5189:2:1849
-5190:2:1850
-5191:2:1858
-5192:2:1859
-5193:2:1863
-5194:2:1864
-5195:2:1858
-5196:2:1859
-5197:2:1863
-5198:2:1864
-5199:2:1872
-5200:2:1877
-5201:2:1881
-5202:2:1882
-5203:2:1889
-5204:2:1890
-5205:2:1901
-5206:2:1902
-5207:2:1903
-5208:2:1901
-5209:2:1902
-5210:2:1903
-5211:2:1914
-5212:2:1919
-5213:2:1920
-5214:0:4365
-5215:2:1932
-5216:0:4365
-5217:3:4286
-5218:0:4365
-5219:2:1934
-5220:0:4365
-5221:3:4287
-5222:0:4365
-5223:2:1935
-5224:0:4365
-5225:2:1936
-5226:0:4365
-5227:2:2129
-5228:0:4365
-5229:2:2130
-5230:0:4365
-5231:2:2134
-5232:0:4365
-5233:3:4286
-5234:0:4365
-5235:2:2136
-5236:0:4365
-5237:3:4287
-5238:0:4365
-5239:2:2137
-5240:2:2141
-5241:2:2142
-5242:2:2150
-5243:2:2151
-5244:2:2155
-5245:2:2156
-5246:2:2150
-5247:2:2151
-5248:2:2155
-5249:2:2156
-5250:2:2164
-5251:2:2169
-5252:2:2173
-5253:2:2174
-5254:2:2181
-5255:2:2182
-5256:2:2193
-5257:2:2194
-5258:2:2195
-5259:2:2193
-5260:2:2194
-5261:2:2195
-5262:2:2206
-5263:2:2211
-5264:2:2212
-5265:0:4365
-5266:2:2224
-5267:0:4365
-5268:3:4286
-5269:0:4365
-5270:2:2226
-5271:0:4365
-5272:3:4287
-5273:0:4365
-5274:2:2230
-5275:0:4365
-5276:3:4286
-5277:0:4365
-5278:2:2235
-5279:2:2239
-5280:2:2240
-5281:2:2248
-5282:2:2249
-5283:2:2253
-5284:2:2254
-5285:2:2248
-5286:2:2249
-5287:2:2250
-5288:2:2262
-5289:2:2267
-5290:2:2271
-5291:2:2272
-5292:2:2279
-5293:2:2280
-5294:2:2291
-5295:2:2292
-5296:2:2293
-5297:2:2291
-5298:2:2292
-5299:2:2293
-5300:2:2304
-5301:2:2309
-5302:2:2310
-5303:0:4365
-5304:3:4287
-5305:0:4365
-5306:2:2322
-5307:0:4365
-5308:2:1169
-5309:0:4365
-5310:3:4286
-5311:0:4365
-5312:2:1170
-5313:0:4365
-5314:3:4287
-5315:0:4365
-5316:3:4288
-5317:0:4365
-5318:3:4294
-5319:0:4365
-5320:3:4295
-5321:0:4365
-5322:3:2338
-5323:0:4365
-5324:3:2339
-5325:3:2343
-5326:3:2344
-5327:3:2352
-5328:3:2353
-5329:3:2357
-5330:3:2358
-5331:3:2352
-5332:3:2353
-5333:3:2357
-5334:3:2358
-5335:3:2366
-5336:3:2371
-5337:3:2375
-5338:3:2376
-5339:3:2383
-5340:3:2384
-5341:3:2395
-5342:3:2396
-5343:3:2397
-5344:3:2395
-5345:3:2396
-5346:3:2397
-5347:3:2408
-5348:3:2413
-5349:3:2414
-5350:0:4365
-5351:3:2426
-5352:0:4365
-5353:3:2427
-5354:0:4365
-5355:2:1173
-5356:0:4365
-5357:3:2428
-5358:0:4365
-5359:2:1179
-5360:0:4365
-5361:2:1180
-5362:0:4365
-5363:3:2427
-5364:0:4365
-5365:2:1181
-5366:2:1185
-5367:2:1186
-5368:2:1194
-5369:2:1195
-5370:2:1199
-5371:2:1200
-5372:2:1194
-5373:2:1195
-5374:2:1199
-5375:2:1200
-5376:2:1208
-5377:2:1213
-5378:2:1217
-5379:2:1218
-5380:2:1225
-5381:2:1226
-5382:2:1237
-5383:2:1238
-5384:2:1239
-5385:2:1237
-5386:2:1238
-5387:2:1239
-5388:2:1250
-5389:2:1255
-5390:2:1256
-5391:0:4365
-5392:3:2428
-5393:0:4365
-5394:2:1268
-5395:0:4365
-5396:3:2427
-5397:0:4365
-5398:2:1270
-5399:0:4365
-5400:3:2428
-5401:0:4365
-5402:2:1271
-5403:2:1275
-5404:2:1276
-5405:2:1284
-5406:2:1285
-5407:2:1289
-5408:2:1290
-5409:2:1284
-5410:2:1285
-5411:2:1289
-5412:2:1290
-5413:2:1298
-5414:2:1303
-5415:2:1307
-5416:2:1308
-5417:2:1315
-5418:2:1316
-5419:2:1327
-5420:2:1328
-5421:2:1329
-5422:2:1327
-5423:2:1328
-5424:2:1329
-5425:2:1340
-5426:2:1345
-5427:2:1346
-5428:0:4365
-5429:2:1358
-5430:0:4365
-5431:2:1360
-5432:0:4365
-5433:3:2427
-5434:0:4365
-5435:2:1361
-5436:0:4365
-5437:3:2428
-5438:0:4365
-5439:2:1362
-5440:2:1366
-5441:2:1367
-5442:2:1375
-5443:2:1376
-5444:2:1380
-5445:2:1381
-5446:2:1375
-5447:2:1376
-5448:2:1380
-5449:2:1381
-5450:2:1389
-5451:2:1394
-5452:2:1398
-5453:2:1399
-5454:2:1406
-5455:2:1407
-5456:2:1418
-5457:2:1419
-5458:2:1420
-5459:2:1418
-5460:2:1419
-5461:2:1420
-5462:2:1431
-5463:2:1436
-5464:2:1437
-5465:0:4365
-5466:2:1449
-5467:0:4365
-5468:3:2427
-5469:0:4365
-5470:2:1451
-5471:0:4365
-5472:3:2428
-5473:0:4365
-5474:2:1652
-5475:0:4365
-5476:2:1653
-5477:0:4365
-5478:2:1657
-5479:0:4365
-5480:2:1660
-5481:0:4365
-5482:3:2427
-5483:0:4365
-5484:2:1665
-5485:2:1669
-5486:2:1670
-5487:2:1678
-5488:2:1679
-5489:2:1683
-5490:2:1684
-5491:2:1678
-5492:2:1679
-5493:2:1680
-5494:2:1692
-5495:2:1697
-5496:2:1701
-5497:2:1702
-5498:2:1709
-5499:2:1710
-5500:2:1721
-5501:2:1722
-5502:2:1723
-5503:2:1721
-5504:2:1722
-5505:2:1723
-5506:2:1734
-5507:2:1739
-5508:2:1740
-5509:0:4365
-5510:3:2428
-5511:0:4365
-5512:2:1752
-5513:0:4365
-5514:3:2427
-5515:0:4365
-5516:2:1754
-5517:0:4365
-5518:3:2428
-5519:0:4365
-5520:2:1755
-5521:2:1759
-5522:2:1760
-5523:2:1768
-5524:2:1769
-5525:2:1773
-5526:2:1774
-5527:2:1768
-5528:2:1769
-5529:2:1773
-5530:2:1774
-5531:2:1782
-5532:2:1787
-5533:2:1791
-5534:2:1792
-5535:2:1799
-5536:2:1800
-5537:2:1811
-5538:2:1812
-5539:2:1813
-5540:2:1811
-5541:2:1812
-5542:2:1813
-5543:2:1824
-5544:2:1829
-5545:2:1830
-5546:0:4365
-5547:2:1842
-5548:0:4365
-5549:3:2427
-5550:0:4365
-5551:2:1844
-5552:0:4365
-5553:3:2428
-5554:0:4365
-5555:2:1845
-5556:2:1849
-5557:2:1850
-5558:2:1858
-5559:2:1859
-5560:2:1863
-5561:2:1864
-5562:2:1858
-5563:2:1859
-5564:2:1863
-5565:2:1864
-5566:2:1872
-5567:2:1877
-5568:2:1881
-5569:2:1882
-5570:2:1889
-5571:2:1890
-5572:2:1901
-5573:2:1902
-5574:2:1903
-5575:2:1901
-5576:2:1902
-5577:2:1903
-5578:2:1914
-5579:2:1919
-5580:2:1920
-5581:0:4365
-5582:2:1932
-5583:0:4365
-5584:3:2427
-5585:0:4365
-5586:2:1934
-5587:0:4365
-5588:3:2428
-5589:0:4365
-5590:2:1935
-5591:0:4365
-5592:2:1936
-5593:0:4365
-5594:2:2129
-5595:0:4365
-5596:2:2130
-5597:0:4365
-5598:2:2134
-5599:0:4365
-5600:3:2427
-5601:0:4365
-5602:2:2136
-5603:0:4365
-5604:3:2428
-5605:0:4365
-5606:2:2137
-5607:2:2141
-5608:2:2142
-5609:2:2150
-5610:2:2151
-5611:2:2155
-5612:2:2156
-5613:2:2150
-5614:2:2151
-5615:2:2155
-5616:2:2156
-5617:2:2164
-5618:2:2169
-5619:2:2173
-5620:2:2174
-5621:2:2181
-5622:2:2182
-5623:2:2193
-5624:2:2194
-5625:2:2195
-5626:2:2193
-5627:2:2194
-5628:2:2195
-5629:2:2206
-5630:2:2211
-5631:2:2212
-5632:0:4365
-5633:2:2224
-5634:0:4365
-5635:3:2427
-5636:0:4365
-5637:2:2226
-5638:0:4365
-5639:3:2428
-5640:0:4365
-5641:2:2230
-5642:0:4365
-5643:3:2427
-5644:0:4365
-5645:2:2235
-5646:2:2239
-5647:2:2240
-5648:2:2248
-5649:2:2249
-5650:2:2253
-5651:2:2254
-5652:2:2248
-5653:2:2249
-5654:2:2250
-5655:2:2262
-5656:2:2267
-5657:2:2271
-5658:2:2272
-5659:2:2279
-5660:2:2280
-5661:2:2291
-5662:2:2292
-5663:2:2293
-5664:2:2291
-5665:2:2292
-5666:2:2293
-5667:2:2304
-5668:2:2309
-5669:2:2310
-5670:0:4365
-5671:3:2428
-5672:0:4365
-5673:2:2322
-5674:0:4365
-5675:2:1169
-5676:0:4365
-5677:3:2427
-5678:0:4365
-5679:2:1170
-5680:0:4365
-5681:3:2428
-5682:0:4365
-5683:3:2429
-5684:0:4365
-5685:3:2435
-5686:3:2436
-5687:0:4365
-5688:3:2440
-5689:3:2444
-5690:3:2445
-5691:3:2453
-5692:3:2454
-5693:3:2458
-5694:3:2459
-5695:3:2453
-5696:3:2454
-5697:3:2458
-5698:3:2459
-5699:3:2467
-5700:3:2472
-5701:3:2473
-5702:3:2484
-5703:3:2485
-5704:3:2496
-5705:3:2497
-5706:3:2498
-5707:3:2496
-5708:3:2497
-5709:3:2498
-5710:3:2509
-5711:3:2514
-5712:3:2515
-5713:0:4365
-5714:3:2527
-5715:0:4365
-5716:3:2528
-5717:0:4365
-5718:2:1173
-5719:0:4365
-5720:3:2529
-5721:0:4365
-5722:2:1179
-5723:0:4365
-5724:2:1180
-5725:0:4365
-5726:3:2528
-5727:0:4365
-5728:2:1181
-5729:2:1185
-5730:2:1186
-5731:2:1194
-5732:2:1195
-5733:2:1199
-5734:2:1200
-5735:2:1194
-5736:2:1195
-5737:2:1199
-5738:2:1200
-5739:2:1208
-5740:2:1213
-5741:2:1217
-5742:2:1218
-5743:2:1225
-5744:2:1226
-5745:2:1237
-5746:2:1238
-5747:2:1239
-5748:2:1237
-5749:2:1238
-5750:2:1239
-5751:2:1250
-5752:2:1255
-5753:2:1256
-5754:0:4365
-5755:3:2529
-5756:0:4365
-5757:2:1268
-5758:0:4365
-5759:3:2528
-5760:0:4365
-5761:2:1270
-5762:0:4365
-5763:3:2529
-5764:0:4365
-5765:2:1271
-5766:2:1275
-5767:2:1276
-5768:2:1284
-5769:2:1285
-5770:2:1289
-5771:2:1290
-5772:2:1284
-5773:2:1285
-5774:2:1289
-5775:2:1290
-5776:2:1298
-5777:2:1303
-5778:2:1307
-5779:2:1308
-5780:2:1315
-5781:2:1316
-5782:2:1327
-5783:2:1328
-5784:2:1329
-5785:2:1327
-5786:2:1328
-5787:2:1329
-5788:2:1340
-5789:2:1345
-5790:2:1346
-5791:0:4365
-5792:2:1358
-5793:0:4365
-5794:2:1360
-5795:0:4365
-5796:3:2528
-5797:0:4365
-5798:2:1361
-5799:0:4365
-5800:3:2529
-5801:0:4365
-5802:2:1362
-5803:2:1366
-5804:2:1367
-5805:2:1375
-5806:2:1376
-5807:2:1380
-5808:2:1381
-5809:2:1375
-5810:2:1376
-5811:2:1380
-5812:2:1381
-5813:2:1389
-5814:2:1394
-5815:2:1398
-5816:2:1399
-5817:2:1406
-5818:2:1407
-5819:2:1418
-5820:2:1419
-5821:2:1420
-5822:2:1418
-5823:2:1419
-5824:2:1420
-5825:2:1431
-5826:2:1436
-5827:2:1437
-5828:0:4365
-5829:2:1449
-5830:0:4365
-5831:3:2528
-5832:0:4365
-5833:2:1451
-5834:0:4365
-5835:3:2529
-5836:0:4365
-5837:2:1652
-5838:0:4365
-5839:2:1653
-5840:0:4365
-5841:2:1657
-5842:0:4365
-5843:2:1660
-5844:0:4365
-5845:3:2528
-5846:0:4365
-5847:2:1665
-5848:2:1669
-5849:2:1670
-5850:2:1678
-5851:2:1679
-5852:2:1683
-5853:2:1684
-5854:2:1678
-5855:2:1679
-5856:2:1680
-5857:2:1692
-5858:2:1697
-5859:2:1701
-5860:2:1702
-5861:2:1709
-5862:2:1710
-5863:2:1721
-5864:2:1722
-5865:2:1723
-5866:2:1721
-5867:2:1722
-5868:2:1723
-5869:2:1734
-5870:2:1739
-5871:2:1740
-5872:0:4365
-5873:3:2529
-5874:0:4365
-5875:2:1752
-5876:0:4365
-5877:3:2528
-5878:0:4365
-5879:2:1754
-5880:0:4365
-5881:3:2529
-5882:0:4365
-5883:2:1755
-5884:2:1759
-5885:2:1760
-5886:2:1768
-5887:2:1769
-5888:2:1773
-5889:2:1774
-5890:2:1768
-5891:2:1769
-5892:2:1773
-5893:2:1774
-5894:2:1782
-5895:2:1787
-5896:2:1791
-5897:2:1792
-5898:2:1799
-5899:2:1800
-5900:2:1811
-5901:2:1812
-5902:2:1813
-5903:2:1811
-5904:2:1812
-5905:2:1813
-5906:2:1824
-5907:2:1829
-5908:2:1830
-5909:0:4365
-5910:2:1842
-5911:0:4365
-5912:3:2528
-5913:0:4365
-5914:2:1844
-5915:0:4365
-5916:3:2529
-5917:0:4365
-5918:2:1845
-5919:2:1849
-5920:2:1850
-5921:2:1858
-5922:2:1859
-5923:2:1863
-5924:2:1864
-5925:2:1858
-5926:2:1859
-5927:2:1863
-5928:2:1864
-5929:2:1872
-5930:2:1877
-5931:2:1881
-5932:2:1882
-5933:2:1889
-5934:2:1890
-5935:2:1901
-5936:2:1902
-5937:2:1903
-5938:2:1901
-5939:2:1902
-5940:2:1903
-5941:2:1914
-5942:2:1919
-5943:2:1920
-5944:0:4365
-5945:2:1932
-5946:0:4365
-5947:3:2528
-5948:0:4365
-5949:2:1934
-5950:0:4365
-5951:3:2529
-5952:0:4365
-5953:2:1935
-5954:0:4365
-5955:2:1936
-5956:0:4365
-5957:2:2129
-5958:0:4365
-5959:2:2130
-5960:0:4365
-5961:2:2134
-5962:0:4365
-5963:3:2528
-5964:0:4365
-5965:2:2136
-5966:0:4365
-5967:3:2529
-5968:0:4365
-5969:2:2137
-5970:2:2141
-5971:2:2142
-5972:2:2150
-5973:2:2151
-5974:2:2155
-5975:2:2156
-5976:2:2150
-5977:2:2151
-5978:2:2155
-5979:2:2156
-5980:2:2164
-5981:2:2169
-5982:2:2173
-5983:2:2174
-5984:2:2181
-5985:2:2182
-5986:2:2193
-5987:2:2194
-5988:2:2195
-5989:2:2193
-5990:2:2194
-5991:2:2195
-5992:2:2206
-5993:2:2211
-5994:2:2212
-5995:0:4365
-5996:2:2224
-5997:0:4365
-5998:3:2528
-5999:0:4365
-6000:2:2226
-6001:0:4365
-6002:3:2529
-6003:0:4365
-6004:2:2230
-6005:0:4365
-6006:3:2528
-6007:0:4365
-6008:2:2235
-6009:2:2239
-6010:2:2240
-6011:2:2248
-6012:2:2249
-6013:2:2253
-6014:2:2254
-6015:2:2248
-6016:2:2249
-6017:2:2250
-6018:2:2262
-6019:2:2267
-6020:2:2271
-6021:2:2272
-6022:2:2279
-6023:2:2280
-6024:2:2291
-6025:2:2292
-6026:2:2293
-6027:2:2291
-6028:2:2292
-6029:2:2293
-6030:2:2304
-6031:2:2309
-6032:2:2310
-6033:0:4365
-6034:3:2529
-6035:0:4365
-6036:2:2322
-6037:0:4365
-6038:2:1169
-6039:0:4365
-6040:3:2528
-6041:0:4365
-6042:2:1170
-6043:0:4365
-6044:3:2529
-6045:0:4365
-6046:3:2530
-6047:0:4365
-6048:3:2536
-6049:0:4365
-6050:3:2537
-6051:0:4365
-6052:3:2547
-6053:0:4365
-6054:3:2548
-6055:0:4365
-6056:3:2552
-6057:3:2553
-6058:3:2557
-6059:3:2561
-6060:3:2562
-6061:3:2557
-6062:3:2561
-6063:3:2562
-6064:3:2566
-6065:3:2574
-6066:3:2575
-6067:3:2580
-6068:3:2587
-6069:3:2588
-6070:3:2587
-6071:3:2588
-6072:3:2595
-6073:3:2600
-6074:0:4365
-6075:3:2611
-6076:0:4365
-6077:3:2615
-6078:3:2616
-6079:3:2620
-6080:3:2624
-6081:3:2625
-6082:3:2620
-6083:3:2624
-6084:3:2625
-6085:3:2629
-6086:3:2637
-6087:3:2638
-6088:3:2643
-6089:3:2650
-6090:3:2651
-6091:3:2650
-6092:3:2651
-6093:3:2658
-6094:3:2663
-6095:0:4365
-6096:3:2611
-6097:0:4365
-6098:3:2615
-6099:3:2616
-6100:3:2620
-6101:3:2624
-6102:3:2625
-6103:3:2620
-6104:3:2624
-6105:3:2625
-6106:3:2629
-6107:3:2637
-6108:3:2638
-6109:3:2643
-6110:3:2650
-6111:3:2651
-6112:3:2650
-6113:3:2651
-6114:3:2658
-6115:3:2663
-6116:0:4365
-6117:3:2674
-6118:0:4365
-6119:3:2682
-6120:3:2683
-6121:3:2687
-6122:3:2691
-6123:3:2692
-6124:3:2687
-6125:3:2691
-6126:3:2692
-6127:3:2696
-6128:3:2704
-6129:3:2705
-6130:3:2710
-6131:3:2717
-6132:3:2718
-6133:3:2717
-6134:3:2718
-6135:3:2725
-6136:3:2730
-6137:0:4365
-6138:3:2745
-6139:0:4365
-6140:3:2746
-6141:0:4365
-6142:2:1173
-6143:0:4365
-6144:3:2747
-6145:0:4365
-6146:2:1179
-6147:0:4365
-6148:2:1180
-6149:0:4365
-6150:3:2746
-6151:0:4365
-6152:2:1181
-6153:2:1185
-6154:2:1186
-6155:2:1194
-6156:2:1195
-6157:2:1199
-6158:2:1200
-6159:2:1194
-6160:2:1195
-6161:2:1199
-6162:2:1200
-6163:2:1208
-6164:2:1213
-6165:2:1217
-6166:2:1218
-6167:2:1225
-6168:2:1226
-6169:2:1237
-6170:2:1238
-6171:2:1239
-6172:2:1237
-6173:2:1238
-6174:2:1239
-6175:2:1250
-6176:2:1255
-6177:2:1256
-6178:0:4365
-6179:3:2747
-6180:0:4365
-6181:2:1268
-6182:0:4365
-6183:3:2746
-6184:0:4365
-6185:2:1270
-6186:0:4365
-6187:3:2747
-6188:0:4365
-6189:2:1271
-6190:2:1275
-6191:2:1276
-6192:2:1284
-6193:2:1285
-6194:2:1289
-6195:2:1290
-6196:2:1284
-6197:2:1285
-6198:2:1289
-6199:2:1290
-6200:2:1298
-6201:2:1303
-6202:2:1307
-6203:2:1308
-6204:2:1315
-6205:2:1316
-6206:2:1327
-6207:2:1328
-6208:2:1329
-6209:2:1327
-6210:2:1328
-6211:2:1329
-6212:2:1340
-6213:2:1345
-6214:2:1346
-6215:0:4365
-6216:2:1358
-6217:0:4365
-6218:2:1360
-6219:0:4365
-6220:3:2746
-6221:0:4365
-6222:2:1361
-6223:0:4365
-6224:3:2747
-6225:0:4365
-6226:2:1362
-6227:2:1366
-6228:2:1367
-6229:2:1375
-6230:2:1376
-6231:2:1380
-6232:2:1381
-6233:2:1375
-6234:2:1376
-6235:2:1380
-6236:2:1381
-6237:2:1389
-6238:2:1394
-6239:2:1398
-6240:2:1399
-6241:2:1406
-6242:2:1407
-6243:2:1418
-6244:2:1419
-6245:2:1420
-6246:2:1418
-6247:2:1419
-6248:2:1420
-6249:2:1431
-6250:2:1436
-6251:2:1437
-6252:0:4365
-6253:2:1449
-6254:0:4365
-6255:3:2746
-6256:0:4365
-6257:2:1451
-6258:0:4365
-6259:3:2747
-6260:0:4365
-6261:2:1652
-6262:0:4365
-6263:2:1653
-6264:0:4365
-6265:2:1657
-6266:0:4365
-6267:2:1660
-6268:0:4365
-6269:3:2746
-6270:0:4365
-6271:2:1665
-6272:2:1669
-6273:2:1670
-6274:2:1678
-6275:2:1679
-6276:2:1683
-6277:2:1684
-6278:2:1678
-6279:2:1679
-6280:2:1680
-6281:2:1692
-6282:2:1697
-6283:2:1701
-6284:2:1702
-6285:2:1709
-6286:2:1710
-6287:2:1721
-6288:2:1722
-6289:2:1723
-6290:2:1721
-6291:2:1722
-6292:2:1723
-6293:2:1734
-6294:2:1739
-6295:2:1740
-6296:0:4365
-6297:3:2747
-6298:0:4365
-6299:2:1752
-6300:0:4365
-6301:3:2746
-6302:0:4365
-6303:2:1754
-6304:0:4365
-6305:3:2747
-6306:0:4365
-6307:2:1755
-6308:2:1759
-6309:2:1760
-6310:2:1768
-6311:2:1769
-6312:2:1773
-6313:2:1774
-6314:2:1768
-6315:2:1769
-6316:2:1773
-6317:2:1774
-6318:2:1782
-6319:2:1787
-6320:2:1791
-6321:2:1792
-6322:2:1799
-6323:2:1800
-6324:2:1811
-6325:2:1812
-6326:2:1813
-6327:2:1811
-6328:2:1812
-6329:2:1813
-6330:2:1824
-6331:2:1829
-6332:2:1830
-6333:0:4365
-6334:2:1842
-6335:0:4365
-6336:3:2746
-6337:0:4365
-6338:2:1844
-6339:0:4365
-6340:3:2747
-6341:0:4365
-6342:2:1845
-6343:2:1849
-6344:2:1850
-6345:2:1858
-6346:2:1859
-6347:2:1863
-6348:2:1864
-6349:2:1858
-6350:2:1859
-6351:2:1863
-6352:2:1864
-6353:2:1872
-6354:2:1877
-6355:2:1881
-6356:2:1882
-6357:2:1889
-6358:2:1890
-6359:2:1901
-6360:2:1902
-6361:2:1903
-6362:2:1901
-6363:2:1902
-6364:2:1903
-6365:2:1914
-6366:2:1919
-6367:2:1920
-6368:0:4365
-6369:2:1932
-6370:0:4365
-6371:3:2746
-6372:0:4365
-6373:2:1934
-6374:0:4365
-6375:3:2747
-6376:0:4365
-6377:2:1935
-6378:0:4365
-6379:2:1936
-6380:0:4365
-6381:2:2129
-6382:0:4365
-6383:2:2130
-6384:0:4365
-6385:2:2134
-6386:0:4365
-6387:3:2746
-6388:0:4365
-6389:2:2136
-6390:0:4365
-6391:3:2747
-6392:0:4365
-6393:2:2137
-6394:2:2141
-6395:2:2142
-6396:2:2150
-6397:2:2151
-6398:2:2155
-6399:2:2156
-6400:2:2150
-6401:2:2151
-6402:2:2155
-6403:2:2156
-6404:2:2164
-6405:2:2169
-6406:2:2173
-6407:2:2174
-6408:2:2181
-6409:2:2182
-6410:2:2193
-6411:2:2194
-6412:2:2195
-6413:2:2193
-6414:2:2194
-6415:2:2195
-6416:2:2206
-6417:2:2211
-6418:2:2212
-6419:0:4365
-6420:2:2224
-6421:0:4365
-6422:3:2746
-6423:0:4365
-6424:2:2226
-6425:0:4365
-6426:3:2747
-6427:0:4365
-6428:2:2230
-6429:0:4365
-6430:3:2746
-6431:0:4365
-6432:2:2235
-6433:2:2239
-6434:2:2240
-6435:2:2248
-6436:2:2249
-6437:2:2253
-6438:2:2254
-6439:2:2248
-6440:2:2249
-6441:2:2250
-6442:2:2262
-6443:2:2267
-6444:2:2271
-6445:2:2272
-6446:2:2279
-6447:2:2280
-6448:2:2291
-6449:2:2292
-6450:2:2293
-6451:2:2291
-6452:2:2292
-6453:2:2293
-6454:2:2304
-6455:2:2309
-6456:2:2310
-6457:0:4365
-6458:3:2747
-6459:0:4365
-6460:2:2322
-6461:0:4365
-6462:2:1169
-6463:0:4365
-6464:3:2746
-6465:0:4365
-6466:2:1170
-6467:0:4365
-6468:3:2747
-6469:0:4365
-6470:3:2748
-6471:0:4365
-6472:3:2754
-6473:0:4365
-6474:3:2755
-6475:3:2759
-6476:3:2760
-6477:3:2768
-6478:3:2769
-6479:3:2773
-6480:3:2774
-6481:3:2768
-6482:3:2769
-6483:3:2773
-6484:3:2774
-6485:3:2782
-6486:3:2787
-6487:3:2791
-6488:3:2792
-6489:3:2799
-6490:3:2800
-6491:3:2811
-6492:3:2812
-6493:3:2813
-6494:3:2811
-6495:3:2812
-6496:3:2813
-6497:3:2824
-6498:3:2829
-6499:3:2830
-6500:0:4365
-6501:3:2842
-6502:0:4365
-6503:3:2843
-6504:0:4365
-6505:2:1173
-6506:0:4365
-6507:3:2844
-6508:0:4365
-6509:2:1179
-6510:0:4365
-6511:2:1180
-6512:0:4365
-6513:3:2843
-6514:0:4365
-6515:2:1181
-6516:2:1185
-6517:2:1186
-6518:2:1194
-6519:2:1195
-6520:2:1199
-6521:2:1200
-6522:2:1194
-6523:2:1195
-6524:2:1199
-6525:2:1200
-6526:2:1208
-6527:2:1213
-6528:2:1217
-6529:2:1218
-6530:2:1225
-6531:2:1226
-6532:2:1237
-6533:2:1238
-6534:2:1239
-6535:2:1237
-6536:2:1238
-6537:2:1239
-6538:2:1250
-6539:2:1255
-6540:2:1256
-6541:0:4365
-6542:3:2844
-6543:0:4365
-6544:2:1268
-6545:0:4365
-6546:3:2843
-6547:0:4365
-6548:2:1270
-6549:0:4365
-6550:3:2844
-6551:0:4365
-6552:2:1271
-6553:2:1275
-6554:2:1276
-6555:2:1284
-6556:2:1285
-6557:2:1289
-6558:2:1290
-6559:2:1284
-6560:2:1285
-6561:2:1289
-6562:2:1290
-6563:2:1298
-6564:2:1303
-6565:2:1307
-6566:2:1308
-6567:2:1315
-6568:2:1316
-6569:2:1327
-6570:2:1328
-6571:2:1329
-6572:2:1327
-6573:2:1328
-6574:2:1329
-6575:2:1340
-6576:2:1345
-6577:2:1346
-6578:0:4365
-6579:2:1358
-6580:0:4365
-6581:2:1360
-6582:0:4365
-6583:3:2843
-6584:0:4365
-6585:2:1361
-6586:0:4365
-6587:3:2844
-6588:0:4365
-6589:2:1362
-6590:2:1366
-6591:2:1367
-6592:2:1375
-6593:2:1376
-6594:2:1380
-6595:2:1381
-6596:2:1375
-6597:2:1376
-6598:2:1380
-6599:2:1381
-6600:2:1389
-6601:2:1394
-6602:2:1398
-6603:2:1399
-6604:2:1406
-6605:2:1407
-6606:2:1418
-6607:2:1419
-6608:2:1420
-6609:2:1418
-6610:2:1419
-6611:2:1420
-6612:2:1431
-6613:2:1436
-6614:2:1437
-6615:0:4365
-6616:2:1449
-6617:0:4365
-6618:3:2843
-6619:0:4365
-6620:2:1451
-6621:0:4365
-6622:3:2844
-6623:0:4365
-6624:2:1652
-6625:0:4365
-6626:2:1653
-6627:0:4365
-6628:2:1657
-6629:0:4365
-6630:2:1660
-6631:0:4365
-6632:3:2843
-6633:0:4365
-6634:2:1665
-6635:2:1669
-6636:2:1670
-6637:2:1678
-6638:2:1679
-6639:2:1683
-6640:2:1684
-6641:2:1678
-6642:2:1679
-6643:2:1680
-6644:2:1692
-6645:2:1697
-6646:2:1701
-6647:2:1702
-6648:2:1709
-6649:2:1710
-6650:2:1721
-6651:2:1722
-6652:2:1723
-6653:2:1721
-6654:2:1722
-6655:2:1723
-6656:2:1734
-6657:2:1739
-6658:2:1740
-6659:0:4365
-6660:3:2844
-6661:0:4365
-6662:2:1752
-6663:0:4365
-6664:3:2843
-6665:0:4365
-6666:2:1754
-6667:0:4365
-6668:3:2844
-6669:0:4365
-6670:2:1755
-6671:2:1759
-6672:2:1760
-6673:2:1768
-6674:2:1769
-6675:2:1773
-6676:2:1774
-6677:2:1768
-6678:2:1769
-6679:2:1773
-6680:2:1774
-6681:2:1782
-6682:2:1787
-6683:2:1791
-6684:2:1792
-6685:2:1799
-6686:2:1800
-6687:2:1811
-6688:2:1812
-6689:2:1813
-6690:2:1811
-6691:2:1812
-6692:2:1813
-6693:2:1824
-6694:2:1829
-6695:2:1830
-6696:0:4365
-6697:2:1842
-6698:0:4365
-6699:3:2843
-6700:0:4365
-6701:2:1844
-6702:0:4365
-6703:3:2844
-6704:0:4365
-6705:2:1845
-6706:2:1849
-6707:2:1850
-6708:2:1858
-6709:2:1859
-6710:2:1863
-6711:2:1864
-6712:2:1858
-6713:2:1859
-6714:2:1863
-6715:2:1864
-6716:2:1872
-6717:2:1877
-6718:2:1881
-6719:2:1882
-6720:2:1889
-6721:2:1890
-6722:2:1901
-6723:2:1902
-6724:2:1903
-6725:2:1901
-6726:2:1902
-6727:2:1903
-6728:2:1914
-6729:2:1919
-6730:2:1920
-6731:0:4365
-6732:2:1932
-6733:0:4365
-6734:3:2843
-6735:0:4365
-6736:2:1934
-6737:0:4365
-6738:3:2844
-6739:0:4365
-6740:2:1935
-6741:0:4365
-6742:2:1936
-6743:0:4365
-6744:2:2129
-6745:0:4365
-6746:2:2130
-6747:0:4365
-6748:2:2134
-6749:0:4365
-6750:3:2843
-6751:0:4365
-6752:2:2136
-6753:0:4365
-6754:3:2844
-6755:0:4365
-6756:2:2137
-6757:2:2141
-6758:2:2142
-6759:2:2150
-6760:2:2151
-6761:2:2155
-6762:2:2156
-6763:2:2150
-6764:2:2151
-6765:2:2155
-6766:2:2156
-6767:2:2164
-6768:2:2169
-6769:2:2173
-6770:2:2174
-6771:2:2181
-6772:2:2182
-6773:2:2193
-6774:2:2194
-6775:2:2195
-6776:2:2193
-6777:2:2194
-6778:2:2195
-6779:2:2206
-6780:2:2211
-6781:2:2212
-6782:0:4365
-6783:2:2224
-6784:0:4365
-6785:3:2843
-6786:0:4365
-6787:2:2226
-6788:0:4365
-6789:3:2844
-6790:0:4365
-6791:2:2230
-6792:0:4365
-6793:3:2843
-6794:0:4365
-6795:2:2235
-6796:2:2239
-6797:2:2240
-6798:2:2248
-6799:2:2249
-6800:2:2253
-6801:2:2254
-6802:2:2248
-6803:2:2249
-6804:2:2250
-6805:2:2262
-6806:2:2267
-6807:2:2271
-6808:2:2272
-6809:2:2279
-6810:2:2280
-6811:2:2291
-6812:2:2292
-6813:2:2293
-6814:2:2291
-6815:2:2292
-6816:2:2293
-6817:2:2304
-6818:2:2309
-6819:2:2310
-6820:0:4365
-6821:3:2844
-6822:0:4365
-6823:2:2322
-6824:0:4365
-6825:2:1169
-6826:0:4365
-6827:3:2843
-6828:0:4365
-6829:2:1170
-6830:0:4365
-6831:3:2844
-6832:0:4365
-6833:3:2845
-6834:0:4365
-6835:3:2851
-6836:0:4365
-6837:3:2854
-6838:3:2855
-6839:3:2867
-6840:3:2868
-6841:3:2872
-6842:3:2873
-6843:3:2867
-6844:3:2868
-6845:3:2872
-6846:3:2873
-6847:3:2881
-6848:3:2886
-6849:3:2890
-6850:3:2891
-6851:3:2898
-6852:3:2899
-6853:3:2910
-6854:3:2911
-6855:3:2912
-6856:3:2910
-6857:3:2911
-6858:3:2912
-6859:3:2923
-6860:3:2928
-6861:3:2929
-6862:0:4365
-6863:3:2941
-6864:0:4365
-6865:3:2942
-6866:0:4365
-6867:2:1173
-6868:0:4365
-6869:3:2943
-6870:0:4365
-6871:2:1179
-6872:0:4365
-6873:2:1180
-6874:0:4365
-6875:3:2942
-6876:0:4365
-6877:2:1181
-6878:2:1185
-6879:2:1186
-6880:2:1194
-6881:2:1195
-6882:2:1199
-6883:2:1200
-6884:2:1194
-6885:2:1195
-6886:2:1199
-6887:2:1200
-6888:2:1208
-6889:2:1213
-6890:2:1217
-6891:2:1218
-6892:2:1225
-6893:2:1226
-6894:2:1237
-6895:2:1238
-6896:2:1239
-6897:2:1237
-6898:2:1238
-6899:2:1239
-6900:2:1250
-6901:2:1255
-6902:2:1256
-6903:0:4365
-6904:3:2943
-6905:0:4365
-6906:2:1268
-6907:0:4365
-6908:3:2942
-6909:0:4365
-6910:2:1270
-6911:0:4365
-6912:3:2943
-6913:0:4365
-6914:2:1271
-6915:2:1275
-6916:2:1276
-6917:2:1284
-6918:2:1285
-6919:2:1289
-6920:2:1290
-6921:2:1284
-6922:2:1285
-6923:2:1289
-6924:2:1290
-6925:2:1298
-6926:2:1303
-6927:2:1307
-6928:2:1308
-6929:2:1315
-6930:2:1316
-6931:2:1327
-6932:2:1328
-6933:2:1329
-6934:2:1327
-6935:2:1328
-6936:2:1329
-6937:2:1340
-6938:2:1345
-6939:2:1346
-6940:0:4365
-6941:2:1358
-6942:0:4365
-6943:2:1360
-6944:0:4365
-6945:3:2942
-6946:0:4365
-6947:2:1361
-6948:0:4365
-6949:3:2943
-6950:0:4365
-6951:2:1362
-6952:2:1366
-6953:2:1367
-6954:2:1375
-6955:2:1376
-6956:2:1380
-6957:2:1381
-6958:2:1375
-6959:2:1376
-6960:2:1380
-6961:2:1381
-6962:2:1389
-6963:2:1394
-6964:2:1398
-6965:2:1399
-6966:2:1406
-6967:2:1407
-6968:2:1418
-6969:2:1419
-6970:2:1420
-6971:2:1418
-6972:2:1419
-6973:2:1420
-6974:2:1431
-6975:2:1436
-6976:2:1437
-6977:0:4365
-6978:2:1449
-6979:0:4365
-6980:3:2942
-6981:0:4365
-6982:2:1451
-6983:0:4365
-6984:3:2943
-6985:0:4365
-6986:2:1652
-6987:0:4365
-6988:2:1653
-6989:0:4365
-6990:2:1657
-6991:0:4365
-6992:2:1660
-6993:0:4365
-6994:3:2942
-6995:0:4365
-6996:2:1665
-6997:2:1669
-6998:2:1670
-6999:2:1678
-7000:2:1679
-7001:2:1683
-7002:2:1684
-7003:2:1678
-7004:2:1679
-7005:2:1680
-7006:2:1692
-7007:2:1697
-7008:2:1701
-7009:2:1702
-7010:2:1709
-7011:2:1710
-7012:2:1721
-7013:2:1722
-7014:2:1723
-7015:2:1721
-7016:2:1722
-7017:2:1723
-7018:2:1734
-7019:2:1739
-7020:2:1740
-7021:0:4365
-7022:3:2943
-7023:0:4365
-7024:2:1752
-7025:0:4365
-7026:3:2942
-7027:0:4365
-7028:2:1754
-7029:0:4365
-7030:3:2943
-7031:0:4365
-7032:2:1755
-7033:2:1759
-7034:2:1760
-7035:2:1768
-7036:2:1769
-7037:2:1773
-7038:2:1774
-7039:2:1768
-7040:2:1769
-7041:2:1773
-7042:2:1774
-7043:2:1782
-7044:2:1787
-7045:2:1791
-7046:2:1792
-7047:2:1799
-7048:2:1800
-7049:2:1811
-7050:2:1812
-7051:2:1813
-7052:2:1811
-7053:2:1812
-7054:2:1813
-7055:2:1824
-7056:2:1829
-7057:2:1830
-7058:0:4365
-7059:2:1842
-7060:0:4365
-7061:3:2942
-7062:0:4365
-7063:2:1844
-7064:0:4365
-7065:3:2943
-7066:0:4365
-7067:2:1845
-7068:2:1849
-7069:2:1850
-7070:2:1858
-7071:2:1859
-7072:2:1863
-7073:2:1864
-7074:2:1858
-7075:2:1859
-7076:2:1863
-7077:2:1864
-7078:2:1872
-7079:2:1877
-7080:2:1881
-7081:2:1882
-7082:2:1889
-7083:2:1890
-7084:2:1901
-7085:2:1902
-7086:2:1903
-7087:2:1901
-7088:2:1902
-7089:2:1903
-7090:2:1914
-7091:2:1919
-7092:2:1920
-7093:0:4365
-7094:2:1932
-7095:0:4365
-7096:3:2942
-7097:0:4365
-7098:2:1934
-7099:0:4365
-7100:3:2943
-7101:0:4365
-7102:2:1935
-7103:0:4365
-7104:2:1936
-7105:0:4365
-7106:2:2129
-7107:0:4365
-7108:2:2130
-7109:0:4365
-7110:2:2134
-7111:0:4365
-7112:3:2942
-7113:0:4365
-7114:2:2136
-7115:0:4365
-7116:3:2943
-7117:0:4365
-7118:2:2137
-7119:2:2141
-7120:2:2142
-7121:2:2150
-7122:2:2151
-7123:2:2155
-7124:2:2156
-7125:2:2150
-7126:2:2151
-7127:2:2155
-7128:2:2156
-7129:2:2164
-7130:2:2169
-7131:2:2173
-7132:2:2174
-7133:2:2181
-7134:2:2182
-7135:2:2193
-7136:2:2194
-7137:2:2195
-7138:2:2193
-7139:2:2194
-7140:2:2195
-7141:2:2206
-7142:2:2211
-7143:2:2212
-7144:0:4365
-7145:2:2224
-7146:0:4365
-7147:3:2942
-7148:0:4365
-7149:2:2226
-7150:0:4365
-7151:3:2943
-7152:0:4365
-7153:2:2230
-7154:0:4365
-7155:3:2942
-7156:0:4365
-7157:2:2235
-7158:2:2239
-7159:2:2240
-7160:2:2248
-7161:2:2249
-7162:2:2253
-7163:2:2254
-7164:2:2248
-7165:2:2249
-7166:2:2250
-7167:2:2262
-7168:2:2267
-7169:2:2271
-7170:2:2272
-7171:2:2279
-7172:2:2280
-7173:2:2291
-7174:2:2292
-7175:2:2293
-7176:2:2291
-7177:2:2292
-7178:2:2293
-7179:2:2304
-7180:2:2309
-7181:2:2310
-7182:0:4365
-7183:3:2943
-7184:0:4365
-7185:2:2322
-7186:0:4365
-7187:2:1169
-7188:0:4365
-7189:3:2942
-7190:0:4365
-7191:2:1170
-7192:0:4365
-7193:3:2943
-7194:0:4365
-7195:3:2944
-7196:0:4365
-7197:3:2950
-7198:0:4365
-7199:3:2951
-7200:0:4365
-7201:3:2952
-7202:0:4365
-7203:3:2953
-7204:0:4365
-7205:3:2954
-7206:3:2958
-7207:3:2959
-7208:3:2967
-7209:3:2968
-7210:3:2972
-7211:3:2973
-7212:3:2967
-7213:3:2968
-7214:3:2972
-7215:3:2973
-7216:3:2981
-7217:3:2986
-7218:3:2990
-7219:3:2991
-7220:3:2998
-7221:3:2999
-7222:3:3010
-7223:3:3011
-7224:3:3012
-7225:3:3010
-7226:3:3011
-7227:3:3012
-7228:3:3023
-7229:3:3028
-7230:3:3029
-7231:0:4365
-7232:3:3041
-7233:0:4365
-7234:3:3042
-7235:0:4365
-7236:2:1173
-7237:0:4365
-7238:3:3043
-7239:0:4365
-7240:2:1179
-7241:0:4365
-7242:2:1180
-7243:0:4365
-7244:3:3042
-7245:0:4365
-7246:2:1181
-7247:2:1185
-7248:2:1186
-7249:2:1194
-7250:2:1195
-7251:2:1199
-7252:2:1200
-7253:2:1194
-7254:2:1195
-7255:2:1199
-7256:2:1200
-7257:2:1208
-7258:2:1213
-7259:2:1217
-7260:2:1218
-7261:2:1225
-7262:2:1226
-7263:2:1237
-7264:2:1238
-7265:2:1239
-7266:2:1237
-7267:2:1238
-7268:2:1239
-7269:2:1250
-7270:2:1255
-7271:2:1256
-7272:0:4365
-7273:3:3043
-7274:0:4365
-7275:2:1268
-7276:0:4365
-7277:3:3042
-7278:0:4365
-7279:2:1270
-7280:0:4365
-7281:3:3043
-7282:0:4365
-7283:2:1271
-7284:2:1275
-7285:2:1276
-7286:2:1284
-7287:2:1285
-7288:2:1289
-7289:2:1290
-7290:2:1284
-7291:2:1285
-7292:2:1289
-7293:2:1290
-7294:2:1298
-7295:2:1303
-7296:2:1307
-7297:2:1308
-7298:2:1315
-7299:2:1316
-7300:2:1327
-7301:2:1328
-7302:2:1329
-7303:2:1327
-7304:2:1328
-7305:2:1329
-7306:2:1340
-7307:2:1345
-7308:2:1346
-7309:0:4365
-7310:2:1358
-7311:0:4365
-7312:2:1360
-7313:0:4365
-7314:3:3042
-7315:0:4365
-7316:2:1361
-7317:0:4365
-7318:3:3043
-7319:0:4365
-7320:2:1362
-7321:2:1366
-7322:2:1367
-7323:2:1375
-7324:2:1376
-7325:2:1380
-7326:2:1381
-7327:2:1375
-7328:2:1376
-7329:2:1380
-7330:2:1381
-7331:2:1389
-7332:2:1394
-7333:2:1398
-7334:2:1399
-7335:2:1406
-7336:2:1407
-7337:2:1418
-7338:2:1419
-7339:2:1420
-7340:2:1418
-7341:2:1419
-7342:2:1420
-7343:2:1431
-7344:2:1436
-7345:2:1437
-7346:0:4365
-7347:2:1449
-7348:0:4365
-7349:3:3042
-7350:0:4365
-7351:2:1451
-7352:0:4365
-7353:3:3043
-7354:0:4365
-7355:2:1652
-7356:0:4365
-7357:2:1653
-7358:0:4365
-7359:2:1657
-7360:0:4365
-7361:2:1660
-7362:0:4365
-7363:3:3042
-7364:0:4365
-7365:2:1665
-7366:2:1669
-7367:2:1670
-7368:2:1678
-7369:2:1679
-7370:2:1683
-7371:2:1684
-7372:2:1678
-7373:2:1679
-7374:2:1680
-7375:2:1692
-7376:2:1697
-7377:2:1701
-7378:2:1702
-7379:2:1709
-7380:2:1710
-7381:2:1721
-7382:2:1722
-7383:2:1723
-7384:2:1721
-7385:2:1722
-7386:2:1723
-7387:2:1734
-7388:2:1739
-7389:2:1740
-7390:0:4365
-7391:3:3043
-7392:0:4365
-7393:2:1752
-7394:0:4365
-7395:3:3042
-7396:0:4365
-7397:2:1754
-7398:0:4365
-7399:3:3043
-7400:0:4365
-7401:2:1755
-7402:2:1759
-7403:2:1760
-7404:2:1768
-7405:2:1769
-7406:2:1773
-7407:2:1774
-7408:2:1768
-7409:2:1769
-7410:2:1773
-7411:2:1774
-7412:2:1782
-7413:2:1787
-7414:2:1791
-7415:2:1792
-7416:2:1799
-7417:2:1800
-7418:2:1811
-7419:2:1812
-7420:2:1813
-7421:2:1811
-7422:2:1812
-7423:2:1813
-7424:2:1824
-7425:2:1829
-7426:2:1830
-7427:0:4365
-7428:2:1842
-7429:0:4365
-7430:3:3042
-7431:0:4365
-7432:2:1844
-7433:0:4365
-7434:3:3043
-7435:0:4365
-7436:2:1845
-7437:2:1849
-7438:2:1850
-7439:2:1858
-7440:2:1859
-7441:2:1863
-7442:2:1864
-7443:2:1858
-7444:2:1859
-7445:2:1863
-7446:2:1864
-7447:2:1872
-7448:2:1877
-7449:2:1881
-7450:2:1882
-7451:2:1889
-7452:2:1890
-7453:2:1901
-7454:2:1902
-7455:2:1903
-7456:2:1901
-7457:2:1902
-7458:2:1903
-7459:2:1914
-7460:2:1919
-7461:2:1920
-7462:0:4365
-7463:2:1932
-7464:0:4365
-7465:3:3042
-7466:0:4365
-7467:2:1934
-7468:0:4365
-7469:3:3043
-7470:0:4365
-7471:2:1935
-7472:0:4365
-7473:2:1936
-7474:0:4365
-7475:2:2129
-7476:0:4365
-7477:2:2130
-7478:0:4365
-7479:2:2134
-7480:0:4365
-7481:3:3042
-7482:0:4365
-7483:2:2136
-7484:0:4365
-7485:3:3043
-7486:0:4365
-7487:2:2137
-7488:2:2141
-7489:2:2142
-7490:2:2150
-7491:2:2151
-7492:2:2155
-7493:2:2156
-7494:2:2150
-7495:2:2151
-7496:2:2155
-7497:2:2156
-7498:2:2164
-7499:2:2169
-7500:2:2173
-7501:2:2174
-7502:2:2181
-7503:2:2182
-7504:2:2193
-7505:2:2194
-7506:2:2195
-7507:2:2193
-7508:2:2194
-7509:2:2195
-7510:2:2206
-7511:2:2211
-7512:2:2212
-7513:0:4365
-7514:2:2224
-7515:0:4365
-7516:3:3042
-7517:0:4365
-7518:2:2226
-7519:0:4365
-7520:3:3043
-7521:0:4365
-7522:2:2230
-7523:0:4365
-7524:3:3042
-7525:0:4365
-7526:2:2235
-7527:2:2239
-7528:2:2240
-7529:2:2248
-7530:2:2249
-7531:2:2253
-7532:2:2254
-7533:2:2248
-7534:2:2249
-7535:2:2250
-7536:2:2262
-7537:2:2267
-7538:2:2271
-7539:2:2272
-7540:2:2279
-7541:2:2280
-7542:2:2291
-7543:2:2292
-7544:2:2293
-7545:2:2291
-7546:2:2292
-7547:2:2293
-7548:2:2304
-7549:2:2309
-7550:2:2310
-7551:0:4365
-7552:3:3043
-7553:0:4365
-7554:2:2322
-7555:0:4365
-7556:2:1169
-7557:0:4365
-7558:3:3042
-7559:0:4365
-7560:2:1170
-7561:0:4365
-7562:3:3043
-7563:0:4365
-7564:3:3044
-7565:0:4365
-7566:3:3257
-7567:0:4365
-7568:3:3265
-7569:0:4365
-7570:3:3266
-7571:3:3270
-7572:3:3271
-7573:3:3279
-7574:3:3280
-7575:3:3284
-7576:3:3285
-7577:3:3279
-7578:3:3280
-7579:3:3284
-7580:3:3285
-7581:3:3293
-7582:3:3298
-7583:3:3302
-7584:3:3303
-7585:3:3310
-7586:3:3311
-7587:3:3322
-7588:3:3323
-7589:3:3324
-7590:3:3322
-7591:3:3323
-7592:3:3324
-7593:3:3335
-7594:3:3340
-7595:3:3341
-7596:0:4365
-7597:3:3353
-7598:0:4365
-7599:3:3354
-7600:0:4365
-7601:2:1173
-7602:0:4365
-7603:3:3355
-7604:0:4365
-7605:2:1179
-7606:0:4365
-7607:2:1180
-7608:0:4365
-7609:3:3354
-7610:0:4365
-7611:2:1181
-7612:2:1185
-7613:2:1186
-7614:2:1194
-7615:2:1195
-7616:2:1199
-7617:2:1200
-7618:2:1194
-7619:2:1195
-7620:2:1199
-7621:2:1200
-7622:2:1208
-7623:2:1213
-7624:2:1217
-7625:2:1218
-7626:2:1225
-7627:2:1226
-7628:2:1237
-7629:2:1238
-7630:2:1239
-7631:2:1237
-7632:2:1238
-7633:2:1239
-7634:2:1250
-7635:2:1255
-7636:2:1256
-7637:0:4365
-7638:3:3355
-7639:0:4365
-7640:2:1268
-7641:0:4365
-7642:3:3354
-7643:0:4365
-7644:2:1270
-7645:0:4365
-7646:3:3355
-7647:0:4365
-7648:2:1271
-7649:2:1275
-7650:2:1276
-7651:2:1284
-7652:2:1285
-7653:2:1289
-7654:2:1290
-7655:2:1284
-7656:2:1285
-7657:2:1289
-7658:2:1290
-7659:2:1298
-7660:2:1303
-7661:2:1307
-7662:2:1308
-7663:2:1315
-7664:2:1316
-7665:2:1327
-7666:2:1328
-7667:2:1329
-7668:2:1327
-7669:2:1328
-7670:2:1329
-7671:2:1340
-7672:2:1345
-7673:2:1346
-7674:0:4365
-7675:2:1358
-7676:0:4365
-7677:2:1360
-7678:0:4365
-7679:3:3354
-7680:0:4365
-7681:2:1361
-7682:0:4365
-7683:3:3355
-7684:0:4365
-7685:2:1362
-7686:2:1366
-7687:2:1367
-7688:2:1375
-7689:2:1376
-7690:2:1380
-7691:2:1381
-7692:2:1375
-7693:2:1376
-7694:2:1380
-7695:2:1381
-7696:2:1389
-7697:2:1394
-7698:2:1398
-7699:2:1399
-7700:2:1406
-7701:2:1407
-7702:2:1418
-7703:2:1419
-7704:2:1420
-7705:2:1418
-7706:2:1419
-7707:2:1420
-7708:2:1431
-7709:2:1436
-7710:2:1437
-7711:0:4365
-7712:2:1449
-7713:0:4365
-7714:3:3354
-7715:0:4365
-7716:2:1451
-7717:0:4365
-7718:3:3355
-7719:0:4365
-7720:2:1652
-7721:0:4365
-7722:2:1653
-7723:0:4365
-7724:2:1657
-7725:0:4365
-7726:2:1660
-7727:0:4365
-7728:3:3354
-7729:0:4365
-7730:2:1665
-7731:2:1669
-7732:2:1670
-7733:2:1678
-7734:2:1679
-7735:2:1683
-7736:2:1684
-7737:2:1678
-7738:2:1679
-7739:2:1680
-7740:2:1692
-7741:2:1697
-7742:2:1701
-7743:2:1702
-7744:2:1709
-7745:2:1710
-7746:2:1721
-7747:2:1722
-7748:2:1723
-7749:2:1721
-7750:2:1722
-7751:2:1723
-7752:2:1734
-7753:2:1739
-7754:2:1740
-7755:0:4365
-7756:3:3355
-7757:0:4365
-7758:2:1752
-7759:0:4365
-7760:3:3354
-7761:0:4365
-7762:2:1754
-7763:0:4365
-7764:3:3355
-7765:0:4365
-7766:2:1755
-7767:2:1759
-7768:2:1760
-7769:2:1768
-7770:2:1769
-7771:2:1773
-7772:2:1774
-7773:2:1768
-7774:2:1769
-7775:2:1773
-7776:2:1774
-7777:2:1782
-7778:2:1787
-7779:2:1791
-7780:2:1792
-7781:2:1799
-7782:2:1800
-7783:2:1811
-7784:2:1812
-7785:2:1813
-7786:2:1811
-7787:2:1812
-7788:2:1813
-7789:2:1824
-7790:2:1829
-7791:2:1830
-7792:0:4365
-7793:2:1842
-7794:0:4365
-7795:3:3354
-7796:0:4365
-7797:2:1844
-7798:0:4365
-7799:3:3355
-7800:0:4365
-7801:2:1845
-7802:2:1849
-7803:2:1850
-7804:2:1858
-7805:2:1859
-7806:2:1863
-7807:2:1864
-7808:2:1858
-7809:2:1859
-7810:2:1863
-7811:2:1864
-7812:2:1872
-7813:2:1877
-7814:2:1881
-7815:2:1882
-7816:2:1889
-7817:2:1890
-7818:2:1901
-7819:2:1902
-7820:2:1903
-7821:2:1901
-7822:2:1902
-7823:2:1903
-7824:2:1914
-7825:2:1919
-7826:2:1920
-7827:0:4365
-7828:2:1932
-7829:0:4365
-7830:3:3354
-7831:0:4365
-7832:2:1934
-7833:0:4365
-7834:3:3355
-7835:0:4365
-7836:2:1935
-7837:0:4365
-7838:2:1936
-7839:0:4365
-7840:2:2129
-7841:0:4365
-7842:2:2130
-7843:0:4365
-7844:2:2134
-7845:0:4365
-7846:3:3354
-7847:0:4365
-7848:2:2136
-7849:0:4365
-7850:3:3355
-7851:0:4365
-7852:2:2137
-7853:2:2141
-7854:2:2142
-7855:2:2150
-7856:2:2151
-7857:2:2155
-7858:2:2156
-7859:2:2150
-7860:2:2151
-7861:2:2155
-7862:2:2156
-7863:2:2164
-7864:2:2169
-7865:2:2173
-7866:2:2174
-7867:2:2181
-7868:2:2182
-7869:2:2193
-7870:2:2194
-7871:2:2195
-7872:2:2193
-7873:2:2194
-7874:2:2195
-7875:2:2206
-7876:2:2211
-7877:2:2212
-7878:0:4365
-7879:2:2224
-7880:0:4365
-7881:3:3354
-7882:0:4365
-7883:2:2226
-7884:0:4365
-7885:3:3355
-7886:0:4365
-7887:2:2230
-7888:0:4365
-7889:3:3354
-7890:0:4365
-7891:2:2235
-7892:2:2239
-7893:2:2240
-7894:2:2248
-7895:2:2249
-7896:2:2253
-7897:2:2254
-7898:2:2248
-7899:2:2249
-7900:2:2250
-7901:2:2262
-7902:2:2267
-7903:2:2271
-7904:2:2272
-7905:2:2279
-7906:2:2280
-7907:2:2291
-7908:2:2292
-7909:2:2293
-7910:2:2291
-7911:2:2292
-7912:2:2293
-7913:2:2304
-7914:2:2309
-7915:2:2310
-7916:0:4365
-7917:3:3355
-7918:0:4365
-7919:2:2322
-7920:0:4365
-7921:2:1169
-7922:0:4365
-7923:3:3354
-7924:0:4365
-7925:2:1170
-7926:0:4365
-7927:3:3355
-7928:0:4365
-7929:3:3356
-7930:0:4365
-7931:3:3366
-7932:0:4365
-7933:3:2951
-7934:0:4365
-7935:3:2952
-7936:0:4365
-7937:3:2953
-7938:0:4365
-7939:3:2954
-7940:3:2958
-7941:3:2959
-7942:3:2967
-7943:3:2968
-7944:3:2972
-7945:3:2973
-7946:3:2967
-7947:3:2968
-7948:3:2972
-7949:3:2973
-7950:3:2981
-7951:3:2986
-7952:3:2990
-7953:3:2991
-7954:3:2998
-7955:3:2999
-7956:3:3010
-7957:3:3011
-7958:3:3012
-7959:3:3010
-7960:3:3011
-7961:3:3012
-7962:3:3023
-7963:3:3028
-7964:3:3029
-7965:0:4365
-7966:3:3041
-7967:0:4365
-7968:3:3042
-7969:0:4365
-7970:2:1173
-7971:0:4365
-7972:3:3043
-7973:0:4365
-7974:2:1179
-7975:0:4365
-7976:2:1180
-7977:0:4365
-7978:3:3042
-7979:0:4365
-7980:2:1181
-7981:2:1185
-7982:2:1186
-7983:2:1194
-7984:2:1195
-7985:2:1199
-7986:2:1200
-7987:2:1194
-7988:2:1195
-7989:2:1199
-7990:2:1200
-7991:2:1208
-7992:2:1213
-7993:2:1217
-7994:2:1218
-7995:2:1225
-7996:2:1226
-7997:2:1237
-7998:2:1238
-7999:2:1239
-8000:2:1237
-8001:2:1238
-8002:2:1239
-8003:2:1250
-8004:2:1255
-8005:2:1256
-8006:0:4365
-8007:3:3043
-8008:0:4365
-8009:2:1268
-8010:0:4365
-8011:3:3042
-8012:0:4365
-8013:2:1270
-8014:0:4365
-8015:3:3043
-8016:0:4365
-8017:2:1271
-8018:2:1275
-8019:2:1276
-8020:2:1284
-8021:2:1285
-8022:2:1289
-8023:2:1290
-8024:2:1284
-8025:2:1285
-8026:2:1289
-8027:2:1290
-8028:2:1298
-8029:2:1303
-8030:2:1307
-8031:2:1308
-8032:2:1315
-8033:2:1316
-8034:2:1327
-8035:2:1328
-8036:2:1329
-8037:2:1327
-8038:2:1328
-8039:2:1329
-8040:2:1340
-8041:2:1345
-8042:2:1346
-8043:0:4365
-8044:2:1358
-8045:0:4365
-8046:2:1360
-8047:0:4365
-8048:3:3042
-8049:0:4365
-8050:2:1361
-8051:0:4365
-8052:3:3043
-8053:0:4365
-8054:2:1362
-8055:2:1366
-8056:2:1367
-8057:2:1375
-8058:2:1376
-8059:2:1380
-8060:2:1381
-8061:2:1375
-8062:2:1376
-8063:2:1380
-8064:2:1381
-8065:2:1389
-8066:2:1394
-8067:2:1398
-8068:2:1399
-8069:2:1406
-8070:2:1407
-8071:2:1418
-8072:2:1419
-8073:2:1420
-8074:2:1418
-8075:2:1419
-8076:2:1420
-8077:2:1431
-8078:2:1436
-8079:2:1437
-8080:0:4365
-8081:2:1449
-8082:0:4365
-8083:3:3042
-8084:0:4365
-8085:2:1451
-8086:0:4365
-8087:3:3043
-8088:0:4365
-8089:2:1652
-8090:0:4365
-8091:2:1653
-8092:0:4365
-8093:2:1657
-8094:0:4365
-8095:2:1660
-8096:0:4365
-8097:3:3042
-8098:0:4365
-8099:2:1665
-8100:2:1669
-8101:2:1670
-8102:2:1678
-8103:2:1679
-8104:2:1683
-8105:2:1684
-8106:2:1678
-8107:2:1679
-8108:2:1680
-8109:2:1692
-8110:2:1697
-8111:2:1701
-8112:2:1702
-8113:2:1709
-8114:2:1710
-8115:2:1721
-8116:2:1722
-8117:2:1723
-8118:2:1721
-8119:2:1722
-8120:2:1723
-8121:2:1734
-8122:2:1739
-8123:2:1740
-8124:0:4365
-8125:3:3043
-8126:0:4365
-8127:2:1752
-8128:0:4365
-8129:3:3042
-8130:0:4365
-8131:2:1754
-8132:0:4365
-8133:3:3043
-8134:0:4365
-8135:2:1755
-8136:2:1759
-8137:2:1760
-8138:2:1768
-8139:2:1769
-8140:2:1773
-8141:2:1774
-8142:2:1768
-8143:2:1769
-8144:2:1773
-8145:2:1774
-8146:2:1782
-8147:2:1787
-8148:2:1791
-8149:2:1792
-8150:2:1799
-8151:2:1800
-8152:2:1811
-8153:2:1812
-8154:2:1813
-8155:2:1811
-8156:2:1812
-8157:2:1813
-8158:2:1824
-8159:2:1829
-8160:2:1830
-8161:0:4365
-8162:2:1842
-8163:0:4365
-8164:3:3042
-8165:0:4365
-8166:2:1844
-8167:0:4365
-8168:3:3043
-8169:0:4365
-8170:2:1845
-8171:2:1849
-8172:2:1850
-8173:2:1858
-8174:2:1859
-8175:2:1863
-8176:2:1864
-8177:2:1858
-8178:2:1859
-8179:2:1863
-8180:2:1864
-8181:2:1872
-8182:2:1877
-8183:2:1881
-8184:2:1882
-8185:2:1889
-8186:2:1890
-8187:2:1901
-8188:2:1902
-8189:2:1903
-8190:2:1901
-8191:2:1902
-8192:2:1903
-8193:2:1914
-8194:2:1919
-8195:2:1920
-8196:0:4365
-8197:2:1932
-8198:0:4365
-8199:3:3042
-8200:0:4365
-8201:2:1934
-8202:0:4365
-8203:3:3043
-8204:0:4365
-8205:2:1935
-8206:0:4365
-8207:2:1936
-8208:0:4365
-8209:2:2129
-8210:0:4365
-8211:2:2130
-8212:0:4365
-8213:2:2134
-8214:0:4365
-8215:3:3042
-8216:0:4365
-8217:2:2136
-8218:0:4365
-8219:3:3043
-8220:0:4365
-8221:2:2137
-8222:2:2141
-8223:2:2142
-8224:2:2150
-8225:2:2151
-8226:2:2155
-8227:2:2156
-8228:2:2150
-8229:2:2151
-8230:2:2155
-8231:2:2156
-8232:2:2164
-8233:2:2169
-8234:2:2173
-8235:2:2174
-8236:2:2181
-8237:2:2182
-8238:2:2193
-8239:2:2194
-8240:2:2195
-8241:2:2193
-8242:2:2194
-8243:2:2195
-8244:2:2206
-8245:2:2211
-8246:2:2212
-8247:0:4365
-8248:2:2224
-8249:0:4365
-8250:3:3042
-8251:0:4365
-8252:2:2226
-8253:0:4365
-8254:3:3043
-8255:0:4365
-8256:2:2230
-8257:0:4365
-8258:3:3042
-8259:0:4365
-8260:2:2235
-8261:2:2239
-8262:2:2240
-8263:2:2248
-8264:2:2249
-8265:2:2253
-8266:2:2254
-8267:2:2248
-8268:2:2249
-8269:2:2250
-8270:2:2262
-8271:2:2267
-8272:2:2271
-8273:2:2272
-8274:2:2279
-8275:2:2280
-8276:2:2291
-8277:2:2292
-8278:2:2293
-8279:2:2291
-8280:2:2292
-8281:2:2293
-8282:2:2304
-8283:2:2309
-8284:2:2310
-8285:0:4365
-8286:3:3043
-8287:0:4365
-8288:2:2322
-8289:0:4365
-8290:2:1169
-8291:0:4365
-8292:3:3042
-8293:0:4365
-8294:2:1170
-8295:0:4365
-8296:3:3043
-8297:0:4365
-8298:3:3044
-8299:0:4365
-8300:3:3257
-8301:0:4365
-8302:3:3362
-8303:0:4365
-8304:3:3363
-8305:0:4365
-8306:3:3367
-8307:0:4365
-8308:3:3373
-8309:3:3377
-8310:3:3378
-8311:3:3386
-8312:3:3387
-8313:3:3391
-8314:3:3392
-8315:3:3386
-8316:3:3387
-8317:3:3391
-8318:3:3392
-8319:3:3400
-8320:3:3405
-8321:3:3409
-8322:3:3410
-8323:3:3417
-8324:3:3418
-8325:3:3429
-8326:3:3430
-8327:3:3431
-8328:3:3429
-8329:3:3430
-8330:3:3431
-8331:3:3442
-8332:3:3447
-8333:3:3448
-8334:0:4365
-8335:3:3460
-8336:0:4365
-8337:3:3461
-8338:0:4365
-8339:2:1173
-8340:0:4365
-8341:3:3462
-8342:0:4365
-8343:2:1179
-8344:0:4365
-8345:2:1180
-8346:0:4365
-8347:3:3461
-8348:0:4365
-8349:2:1181
-8350:2:1185
-8351:2:1186
-8352:2:1194
-8353:2:1195
-8354:2:1199
-8355:2:1200
-8356:2:1194
-8357:2:1195
-8358:2:1199
-8359:2:1200
-8360:2:1208
-8361:2:1213
-8362:2:1217
-8363:2:1218
-8364:2:1225
-8365:2:1226
-8366:2:1237
-8367:2:1238
-8368:2:1239
-8369:2:1237
-8370:2:1238
-8371:2:1239
-8372:2:1250
-8373:2:1255
-8374:2:1256
-8375:0:4365
-8376:3:3462
-8377:0:4365
-8378:2:1268
-8379:0:4365
-8380:3:3461
-8381:0:4365
-8382:2:1270
-8383:0:4365
-8384:3:3462
-8385:0:4365
-8386:2:1271
-8387:2:1275
-8388:2:1276
-8389:2:1284
-8390:2:1285
-8391:2:1289
-8392:2:1290
-8393:2:1284
-8394:2:1285
-8395:2:1289
-8396:2:1290
-8397:2:1298
-8398:2:1303
-8399:2:1307
-8400:2:1308
-8401:2:1315
-8402:2:1316
-8403:2:1327
-8404:2:1328
-8405:2:1329
-8406:2:1327
-8407:2:1328
-8408:2:1329
-8409:2:1340
-8410:2:1345
-8411:2:1346
-8412:0:4365
-8413:2:1358
-8414:0:4365
-8415:2:1360
-8416:0:4365
-8417:3:3461
-8418:0:4365
-8419:2:1361
-8420:0:4365
-8421:3:3462
-8422:0:4365
-8423:2:1362
-8424:2:1366
-8425:2:1367
-8426:2:1375
-8427:2:1376
-8428:2:1380
-8429:2:1381
-8430:2:1375
-8431:2:1376
-8432:2:1380
-8433:2:1381
-8434:2:1389
-8435:2:1394
-8436:2:1398
-8437:2:1399
-8438:2:1406
-8439:2:1407
-8440:2:1418
-8441:2:1419
-8442:2:1420
-8443:2:1418
-8444:2:1419
-8445:2:1420
-8446:2:1431
-8447:2:1436
-8448:2:1437
-8449:0:4365
-8450:2:1449
-8451:0:4365
-8452:3:3461
-8453:0:4365
-8454:2:1451
-8455:0:4365
-8456:3:3462
-8457:0:4365
-8458:2:1652
-8459:0:4365
-8460:2:1653
-8461:0:4365
-8462:2:1657
-8463:0:4365
-8464:2:1660
-8465:0:4365
-8466:3:3461
-8467:0:4365
-8468:2:1665
-8469:2:1669
-8470:2:1670
-8471:2:1678
-8472:2:1679
-8473:2:1683
-8474:2:1684
-8475:2:1678
-8476:2:1679
-8477:2:1680
-8478:2:1692
-8479:2:1697
-8480:2:1701
-8481:2:1702
-8482:2:1709
-8483:2:1710
-8484:2:1721
-8485:2:1722
-8486:2:1723
-8487:2:1721
-8488:2:1722
-8489:2:1723
-8490:2:1734
-8491:2:1739
-8492:2:1740
-8493:0:4365
-8494:3:3462
-8495:0:4365
-8496:2:1752
-8497:0:4365
-8498:3:3461
-8499:0:4365
-8500:2:1754
-8501:0:4365
-8502:3:3462
-8503:0:4365
-8504:2:1755
-8505:2:1759
-8506:2:1760
-8507:2:1768
-8508:2:1769
-8509:2:1773
-8510:2:1774
-8511:2:1768
-8512:2:1769
-8513:2:1773
-8514:2:1774
-8515:2:1782
-8516:2:1787
-8517:2:1791
-8518:2:1792
-8519:2:1799
-8520:2:1800
-8521:2:1811
-8522:2:1812
-8523:2:1813
-8524:2:1811
-8525:2:1812
-8526:2:1813
-8527:2:1824
-8528:2:1829
-8529:2:1830
-8530:0:4365
-8531:2:1842
-8532:0:4365
-8533:3:3461
-8534:0:4365
-8535:2:1844
-8536:0:4365
-8537:3:3462
-8538:0:4365
-8539:2:1845
-8540:2:1849
-8541:2:1850
-8542:2:1858
-8543:2:1859
-8544:2:1863
-8545:2:1864
-8546:2:1858
-8547:2:1859
-8548:2:1863
-8549:2:1864
-8550:2:1872
-8551:2:1877
-8552:2:1881
-8553:2:1882
-8554:2:1889
-8555:2:1890
-8556:2:1901
-8557:2:1902
-8558:2:1903
-8559:2:1901
-8560:2:1902
-8561:2:1903
-8562:2:1914
-8563:2:1919
-8564:2:1920
-8565:0:4365
-8566:2:1932
-8567:0:4365
-8568:3:3461
-8569:0:4365
-8570:2:1934
-8571:0:4365
-8572:3:3462
-8573:0:4365
-8574:2:1935
-8575:0:4365
-8576:2:1936
-8577:0:4365
-8578:2:2129
-8579:0:4365
-8580:2:2130
-8581:0:4365
-8582:2:2134
-8583:0:4365
-8584:3:3461
-8585:0:4365
-8586:2:2136
-8587:0:4365
-8588:3:3462
-8589:0:4365
-8590:2:2137
-8591:2:2141
-8592:2:2142
-8593:2:2150
-8594:2:2151
-8595:2:2155
-8596:2:2156
-8597:2:2150
-8598:2:2151
-8599:2:2155
-8600:2:2156
-8601:2:2164
-8602:2:2169
-8603:2:2173
-8604:2:2174
-8605:2:2181
-8606:2:2182
-8607:2:2193
-8608:2:2194
-8609:2:2195
-8610:2:2193
-8611:2:2194
-8612:2:2195
-8613:2:2206
-8614:2:2211
-8615:2:2212
-8616:0:4365
-8617:2:2224
-8618:0:4365
-8619:3:3461
-8620:0:4365
-8621:2:2226
-8622:0:4365
-8623:3:3462
-8624:0:4365
-8625:2:2230
-8626:0:4365
-8627:3:3461
-8628:0:4365
-8629:2:2235
-8630:2:2239
-8631:2:2240
-8632:2:2248
-8633:2:2249
-8634:2:2253
-8635:2:2254
-8636:2:2248
-8637:2:2249
-8638:2:2250
-8639:2:2262
-8640:2:2267
-8641:2:2271
-8642:2:2272
-8643:2:2279
-8644:2:2280
-8645:2:2291
-8646:2:2292
-8647:2:2293
-8648:2:2291
-8649:2:2292
-8650:2:2293
-8651:2:2304
-8652:2:2309
-8653:2:2310
-8654:0:4365
-8655:3:3462
-8656:0:4365
-8657:2:2322
-8658:0:4365
-8659:2:1169
-8660:0:4365
-8661:3:3461
-8662:0:4365
-8663:2:1170
-8664:0:4365
-8665:3:3462
-8666:0:4365
-8667:3:3463
-8668:0:4365
-8669:3:3469
-8670:0:4365
-8671:3:3470
-8672:3:3474
-8673:3:3475
-8674:3:3483
-8675:3:3484
-8676:3:3488
-8677:3:3489
-8678:3:3483
-8679:3:3484
-8680:3:3488
-8681:3:3489
-8682:3:3497
-8683:3:3502
-8684:3:3506
-8685:3:3507
-8686:3:3514
-8687:3:3515
-8688:3:3526
-8689:3:3527
-8690:3:3528
-8691:3:3526
-8692:3:3527
-8693:3:3528
-8694:3:3539
-8695:3:3544
-8696:3:3545
-8697:0:4365
-8698:3:3557
-8699:0:4365
-8700:3:3558
-8701:0:4365
-8702:2:1173
-8703:0:4365
-8704:3:3559
-8705:0:4365
-8706:2:1179
-8707:0:4365
-8708:2:1180
-8709:0:4365
-8710:3:3558
-8711:0:4365
-8712:2:1181
-8713:2:1185
-8714:2:1186
-8715:2:1194
-8716:2:1195
-8717:2:1199
-8718:2:1200
-8719:2:1194
-8720:2:1195
-8721:2:1199
-8722:2:1200
-8723:2:1208
-8724:2:1213
-8725:2:1217
-8726:2:1218
-8727:2:1225
-8728:2:1226
-8729:2:1237
-8730:2:1238
-8731:2:1239
-8732:2:1237
-8733:2:1238
-8734:2:1239
-8735:2:1250
-8736:2:1255
-8737:2:1256
-8738:0:4365
-8739:3:3559
-8740:0:4365
-8741:2:1268
-8742:0:4365
-8743:3:3558
-8744:0:4365
-8745:2:1270
-8746:0:4365
-8747:3:3559
-8748:0:4365
-8749:2:1271
-8750:2:1275
-8751:2:1276
-8752:2:1284
-8753:2:1285
-8754:2:1289
-8755:2:1290
-8756:2:1284
-8757:2:1285
-8758:2:1289
-8759:2:1290
-8760:2:1298
-8761:2:1303
-8762:2:1307
-8763:2:1308
-8764:2:1315
-8765:2:1316
-8766:2:1327
-8767:2:1328
-8768:2:1329
-8769:2:1327
-8770:2:1328
-8771:2:1329
-8772:2:1340
-8773:2:1345
-8774:2:1346
-8775:0:4365
-8776:2:1358
-8777:0:4365
-8778:2:1360
-8779:0:4365
-8780:3:3558
-8781:0:4365
-8782:2:1361
-8783:0:4365
-8784:3:3559
-8785:0:4365
-8786:2:1362
-8787:2:1366
-8788:2:1367
-8789:2:1375
-8790:2:1376
-8791:2:1380
-8792:2:1381
-8793:2:1375
-8794:2:1376
-8795:2:1380
-8796:2:1381
-8797:2:1389
-8798:2:1394
-8799:2:1398
-8800:2:1399
-8801:2:1406
-8802:2:1407
-8803:2:1418
-8804:2:1419
-8805:2:1420
-8806:2:1418
-8807:2:1419
-8808:2:1420
-8809:2:1431
-8810:2:1436
-8811:2:1437
-8812:0:4365
-8813:2:1449
-8814:0:4365
-8815:3:3558
-8816:0:4365
-8817:2:1451
-8818:0:4365
-8819:3:3559
-8820:0:4365
-8821:2:1652
-8822:0:4365
-8823:2:1653
-8824:0:4365
-8825:2:1657
-8826:0:4365
-8827:2:1660
-8828:0:4365
-8829:3:3558
-8830:0:4365
-8831:2:1665
-8832:2:1669
-8833:2:1670
-8834:2:1678
-8835:2:1679
-8836:2:1683
-8837:2:1684
-8838:2:1678
-8839:2:1679
-8840:2:1680
-8841:2:1692
-8842:2:1697
-8843:2:1701
-8844:2:1702
-8845:2:1709
-8846:2:1710
-8847:2:1721
-8848:2:1722
-8849:2:1723
-8850:2:1721
-8851:2:1722
-8852:2:1723
-8853:2:1734
-8854:2:1739
-8855:2:1740
-8856:0:4365
-8857:3:3559
-8858:0:4365
-8859:2:1752
-8860:0:4365
-8861:3:3558
-8862:0:4365
-8863:2:1754
-8864:0:4365
-8865:3:3559
-8866:0:4365
-8867:2:1755
-8868:2:1759
-8869:2:1760
-8870:2:1768
-8871:2:1769
-8872:2:1773
-8873:2:1774
-8874:2:1768
-8875:2:1769
-8876:2:1773
-8877:2:1774
-8878:2:1782
-8879:2:1787
-8880:2:1791
-8881:2:1792
-8882:2:1799
-8883:2:1800
-8884:2:1811
-8885:2:1812
-8886:2:1813
-8887:2:1811
-8888:2:1812
-8889:2:1813
-8890:2:1824
-8891:2:1829
-8892:2:1830
-8893:0:4365
-8894:2:1842
-8895:0:4365
-8896:3:3558
-8897:0:4365
-8898:2:1844
-8899:0:4365
-8900:3:3559
-8901:0:4365
-8902:2:1845
-8903:2:1849
-8904:2:1850
-8905:2:1858
-8906:2:1859
-8907:2:1863
-8908:2:1864
-8909:2:1858
-8910:2:1859
-8911:2:1863
-8912:2:1864
-8913:2:1872
-8914:2:1877
-8915:2:1881
-8916:2:1882
-8917:2:1889
-8918:2:1890
-8919:2:1901
-8920:2:1902
-8921:2:1903
-8922:2:1901
-8923:2:1902
-8924:2:1903
-8925:2:1914
-8926:2:1919
-8927:2:1920
-8928:0:4365
-8929:2:1932
-8930:0:4365
-8931:3:3558
-8932:0:4365
-8933:2:1934
-8934:0:4365
-8935:3:3559
-8936:0:4365
-8937:2:1935
-8938:0:4365
-8939:2:1936
-8940:0:4365
-8941:2:2129
-8942:0:4365
-8943:2:2130
-8944:0:4365
-8945:2:2134
-8946:0:4365
-8947:3:3558
-8948:0:4365
-8949:2:2136
-8950:0:4365
-8951:3:3559
-8952:0:4365
-8953:2:2137
-8954:2:2141
-8955:2:2142
-8956:2:2150
-8957:2:2151
-8958:2:2155
-8959:2:2156
-8960:2:2150
-8961:2:2151
-8962:2:2155
-8963:2:2156
-8964:2:2164
-8965:2:2169
-8966:2:2173
-8967:2:2174
-8968:2:2181
-8969:2:2182
-8970:2:2193
-8971:2:2194
-8972:2:2195
-8973:2:2193
-8974:2:2194
-8975:2:2195
-8976:2:2206
-8977:2:2211
-8978:2:2212
-8979:0:4365
-8980:2:2224
-8981:0:4365
-8982:3:3558
-8983:0:4365
-8984:2:2226
-8985:0:4365
-8986:3:3559
-8987:0:4365
-8988:2:2230
-8989:0:4365
-8990:3:3558
-8991:0:4365
-8992:2:2235
-8993:2:2239
-8994:2:2240
-8995:2:2248
-8996:2:2249
-8997:2:2253
-8998:2:2254
-8999:2:2248
-9000:2:2249
-9001:2:2250
-9002:2:2262
-9003:2:2267
-9004:2:2271
-9005:2:2272
-9006:2:2279
-9007:2:2280
-9008:2:2291
-9009:2:2292
-9010:2:2293
-9011:2:2291
-9012:2:2292
-9013:2:2293
-9014:2:2304
-9015:2:2309
-9016:2:2310
-9017:0:4365
-9018:3:3559
-9019:0:4365
-9020:2:2322
-9021:0:4365
-9022:2:1169
-9023:0:4365
-9024:3:3558
-9025:0:4365
-9026:2:1170
-9027:0:4365
-9028:3:3559
-9029:0:4365
-9030:3:3560
-9031:0:4365
-9032:3:3566
-9033:0:4365
-9034:3:3569
-9035:3:3570
-9036:3:3582
-9037:3:3583
-9038:3:3587
-9039:3:3588
-9040:3:3582
-9041:3:3583
-9042:3:3587
-9043:3:3588
-9044:3:3596
-9045:3:3601
-9046:3:3605
-9047:3:3606
-9048:3:3613
-9049:3:3614
-9050:3:3625
-9051:3:3626
-9052:3:3627
-9053:3:3625
-9054:3:3626
-9055:3:3627
-9056:3:3638
-9057:3:3643
-9058:3:3644
-9059:0:4365
-9060:3:3656
-9061:0:4365
-9062:3:3657
-9063:0:4365
-9064:2:1173
-9065:0:4365
-9066:3:3658
-9067:0:4365
-9068:2:1179
-9069:0:4365
-9070:2:1180
-9071:0:4365
-9072:3:3657
-9073:0:4365
-9074:2:1181
-9075:2:1185
-9076:2:1186
-9077:2:1194
-9078:2:1195
-9079:2:1199
-9080:2:1200
-9081:2:1194
-9082:2:1195
-9083:2:1199
-9084:2:1200
-9085:2:1208
-9086:2:1213
-9087:2:1217
-9088:2:1218
-9089:2:1225
-9090:2:1226
-9091:2:1237
-9092:2:1238
-9093:2:1239
-9094:2:1237
-9095:2:1238
-9096:2:1239
-9097:2:1250
-9098:2:1255
-9099:2:1256
-9100:0:4365
-9101:3:3658
-9102:0:4365
-9103:2:1268
-9104:0:4365
-9105:3:3657
-9106:0:4365
-9107:2:1270
-9108:0:4365
-9109:3:3658
-9110:0:4365
-9111:2:1271
-9112:2:1275
-9113:2:1276
-9114:2:1284
-9115:2:1285
-9116:2:1289
-9117:2:1290
-9118:2:1284
-9119:2:1285
-9120:2:1289
-9121:2:1290
-9122:2:1298
-9123:2:1303
-9124:2:1307
-9125:2:1308
-9126:2:1315
-9127:2:1316
-9128:2:1327
-9129:2:1328
-9130:2:1329
-9131:2:1327
-9132:2:1328
-9133:2:1329
-9134:2:1340
-9135:2:1345
-9136:2:1346
-9137:0:4365
-9138:2:1358
-9139:0:4365
-9140:2:1360
-9141:0:4365
-9142:3:3657
-9143:0:4365
-9144:2:1361
-9145:0:4365
-9146:3:3658
-9147:0:4365
-9148:2:1362
-9149:2:1366
-9150:2:1367
-9151:2:1375
-9152:2:1376
-9153:2:1380
-9154:2:1381
-9155:2:1375
-9156:2:1376
-9157:2:1380
-9158:2:1381
-9159:2:1389
-9160:2:1394
-9161:2:1398
-9162:2:1399
-9163:2:1406
-9164:2:1407
-9165:2:1418
-9166:2:1419
-9167:2:1420
-9168:2:1418
-9169:2:1419
-9170:2:1420
-9171:2:1431
-9172:2:1436
-9173:2:1437
-9174:0:4365
-9175:2:1449
-9176:0:4365
-9177:3:3657
-9178:0:4365
-9179:2:1451
-9180:0:4365
-9181:3:3658
-9182:0:4365
-9183:2:1652
-9184:0:4365
-9185:2:1653
-9186:0:4365
-9187:2:1657
-9188:0:4365
-9189:2:1660
-9190:0:4365
-9191:3:3657
-9192:0:4365
-9193:2:1665
-9194:2:1669
-9195:2:1670
-9196:2:1678
-9197:2:1679
-9198:2:1683
-9199:2:1684
-9200:2:1678
-9201:2:1679
-9202:2:1680
-9203:2:1692
-9204:2:1697
-9205:2:1701
-9206:2:1702
-9207:2:1709
-9208:2:1710
-9209:2:1721
-9210:2:1722
-9211:2:1723
-9212:2:1721
-9213:2:1722
-9214:2:1723
-9215:2:1734
-9216:2:1739
-9217:2:1740
-9218:0:4365
-9219:3:3658
-9220:0:4365
-9221:2:1752
-9222:0:4365
-9223:3:3657
-9224:0:4365
-9225:2:1754
-9226:0:4365
-9227:3:3658
-9228:0:4365
-9229:2:1755
-9230:2:1759
-9231:2:1760
-9232:2:1768
-9233:2:1769
-9234:2:1773
-9235:2:1774
-9236:2:1768
-9237:2:1769
-9238:2:1773
-9239:2:1774
-9240:2:1782
-9241:2:1787
-9242:2:1791
-9243:2:1792
-9244:2:1799
-9245:2:1800
-9246:2:1811
-9247:2:1812
-9248:2:1813
-9249:2:1811
-9250:2:1812
-9251:2:1813
-9252:2:1824
-9253:2:1829
-9254:2:1830
-9255:0:4365
-9256:2:1842
-9257:0:4365
-9258:3:3657
-9259:0:4365
-9260:2:1844
-9261:0:4365
-9262:3:3658
-9263:0:4365
-9264:2:1845
-9265:2:1849
-9266:2:1850
-9267:2:1858
-9268:2:1859
-9269:2:1863
-9270:2:1864
-9271:2:1858
-9272:2:1859
-9273:2:1863
-9274:2:1864
-9275:2:1872
-9276:2:1877
-9277:2:1881
-9278:2:1882
-9279:2:1889
-9280:2:1890
-9281:2:1901
-9282:2:1902
-9283:2:1903
-9284:2:1901
-9285:2:1902
-9286:2:1903
-9287:2:1914
-9288:2:1919
-9289:2:1920
-9290:0:4365
-9291:2:1932
-9292:0:4365
-9293:3:3657
-9294:0:4365
-9295:2:1934
-9296:0:4365
-9297:3:3658
-9298:0:4365
-9299:2:1935
-9300:0:4365
-9301:2:1936
-9302:0:4365
-9303:2:2129
-9304:0:4365
-9305:2:2130
-9306:0:4365
-9307:2:2134
-9308:0:4365
-9309:3:3657
-9310:0:4365
-9311:2:2136
-9312:0:4365
-9313:3:3658
-9314:0:4365
-9315:2:2137
-9316:2:2141
-9317:2:2142
-9318:2:2150
-9319:2:2151
-9320:2:2155
-9321:2:2156
-9322:2:2150
-9323:2:2151
-9324:2:2155
-9325:2:2156
-9326:2:2164
-9327:2:2169
-9328:2:2173
-9329:2:2174
-9330:2:2181
-9331:2:2182
-9332:2:2193
-9333:2:2194
-9334:2:2195
-9335:2:2193
-9336:2:2194
-9337:2:2195
-9338:2:2206
-9339:2:2211
-9340:2:2212
-9341:0:4365
-9342:2:2224
-9343:0:4365
-9344:3:3657
-9345:0:4365
-9346:2:2226
-9347:0:4365
-9348:3:3658
-9349:0:4365
-9350:2:2230
-9351:0:4365
-9352:3:3657
-9353:0:4365
-9354:2:2235
-9355:2:2239
-9356:2:2240
-9357:2:2248
-9358:2:2249
-9359:2:2253
-9360:2:2254
-9361:2:2248
-9362:2:2249
-9363:2:2250
-9364:2:2262
-9365:2:2267
-9366:2:2271
-9367:2:2272
-9368:2:2279
-9369:2:2280
-9370:2:2291
-9371:2:2292
-9372:2:2293
-9373:2:2291
-9374:2:2292
-9375:2:2293
-9376:2:2304
-9377:2:2309
-9378:2:2310
-9379:0:4365
-9380:3:3658
-9381:0:4365
-9382:2:2322
-9383:0:4365
-9384:2:1169
-9385:0:4365
-9386:3:3657
-9387:0:4365
-9388:2:1170
-9389:0:4365
-9390:3:3658
-9391:0:4365
-9392:3:3659
-9393:0:4365
-9394:3:3665
-9395:0:4365
-9396:3:3666
-9397:0:4365
-9398:3:3667
-9399:0:4365
-9400:3:3668
-9401:0:4365
-9402:3:3669
-9403:3:3673
-9404:3:3674
-9405:3:3682
-9406:3:3683
-9407:3:3687
-9408:3:3688
-9409:3:3682
-9410:3:3683
-9411:3:3687
-9412:3:3688
-9413:3:3696
-9414:3:3701
-9415:3:3705
-9416:3:3706
-9417:3:3713
-9418:3:3714
-9419:3:3725
-9420:3:3726
-9421:3:3727
-9422:3:3725
-9423:3:3726
-9424:3:3727
-9425:3:3738
-9426:3:3743
-9427:3:3744
-9428:0:4365
-9429:3:3756
-9430:0:4365
-9431:3:3757
-9432:0:4365
-9433:2:1173
-9434:0:4365
-9435:3:3758
-9436:0:4365
-9437:2:1179
-9438:0:4365
-9439:2:1180
-9440:0:4365
-9441:3:3757
-9442:0:4365
-9443:2:1181
-9444:2:1185
-9445:2:1186
-9446:2:1194
-9447:2:1195
-9448:2:1199
-9449:2:1200
-9450:2:1194
-9451:2:1195
-9452:2:1199
-9453:2:1200
-9454:2:1208
-9455:2:1213
-9456:2:1217
-9457:2:1218
-9458:2:1225
-9459:2:1226
-9460:2:1237
-9461:2:1238
-9462:2:1239
-9463:2:1237
-9464:2:1238
-9465:2:1239
-9466:2:1250
-9467:2:1255
-9468:2:1256
-9469:0:4365
-9470:3:3758
-9471:0:4365
-9472:2:1268
-9473:0:4365
-9474:3:3757
-9475:0:4365
-9476:2:1270
-9477:0:4365
-9478:3:3758
-9479:0:4365
-9480:2:1271
-9481:2:1275
-9482:2:1276
-9483:2:1284
-9484:2:1285
-9485:2:1289
-9486:2:1290
-9487:2:1284
-9488:2:1285
-9489:2:1289
-9490:2:1290
-9491:2:1298
-9492:2:1303
-9493:2:1307
-9494:2:1308
-9495:2:1315
-9496:2:1316
-9497:2:1327
-9498:2:1328
-9499:2:1329
-9500:2:1327
-9501:2:1328
-9502:2:1329
-9503:2:1340
-9504:2:1345
-9505:2:1346
-9506:0:4365
-9507:2:1358
-9508:0:4365
-9509:2:1360
-9510:0:4365
-9511:3:3757
-9512:0:4365
-9513:2:1361
-9514:0:4365
-9515:3:3758
-9516:0:4365
-9517:2:1362
-9518:2:1366
-9519:2:1367
-9520:2:1375
-9521:2:1376
-9522:2:1380
-9523:2:1381
-9524:2:1375
-9525:2:1376
-9526:2:1380
-9527:2:1381
-9528:2:1389
-9529:2:1394
-9530:2:1398
-9531:2:1399
-9532:2:1406
-9533:2:1407
-9534:2:1418
-9535:2:1419
-9536:2:1420
-9537:2:1418
-9538:2:1419
-9539:2:1420
-9540:2:1431
-9541:2:1436
-9542:2:1437
-9543:0:4365
-9544:2:1449
-9545:0:4365
-9546:3:3757
-9547:0:4365
-9548:2:1451
-9549:0:4365
-9550:3:3758
-9551:0:4365
-9552:2:1652
-9553:0:4365
-9554:2:1653
-9555:0:4365
-9556:2:1657
-9557:0:4365
-9558:2:1660
-9559:0:4365
-9560:3:3757
-9561:0:4365
-9562:2:1665
-9563:2:1669
-9564:2:1670
-9565:2:1678
-9566:2:1679
-9567:2:1683
-9568:2:1684
-9569:2:1678
-9570:2:1679
-9571:2:1680
-9572:2:1692
-9573:2:1697
-9574:2:1701
-9575:2:1702
-9576:2:1709
-9577:2:1710
-9578:2:1721
-9579:2:1722
-9580:2:1723
-9581:2:1721
-9582:2:1722
-9583:2:1723
-9584:2:1734
-9585:2:1739
-9586:2:1740
-9587:0:4365
-9588:3:3758
-9589:0:4365
-9590:2:1752
-9591:0:4365
-9592:3:3757
-9593:0:4365
-9594:2:1754
-9595:0:4365
-9596:3:3758
-9597:0:4365
-9598:2:1755
-9599:2:1759
-9600:2:1760
-9601:2:1768
-9602:2:1769
-9603:2:1773
-9604:2:1774
-9605:2:1768
-9606:2:1769
-9607:2:1773
-9608:2:1774
-9609:2:1782
-9610:2:1787
-9611:2:1791
-9612:2:1792
-9613:2:1799
-9614:2:1800
-9615:2:1811
-9616:2:1812
-9617:2:1813
-9618:2:1811
-9619:2:1812
-9620:2:1813
-9621:2:1824
-9622:2:1829
-9623:2:1830
-9624:0:4365
-9625:2:1842
-9626:0:4365
-9627:3:3757
-9628:0:4365
-9629:2:1844
-9630:0:4365
-9631:3:3758
-9632:0:4365
-9633:2:1845
-9634:2:1849
-9635:2:1850
-9636:2:1858
-9637:2:1859
-9638:2:1863
-9639:2:1864
-9640:2:1858
-9641:2:1859
-9642:2:1863
-9643:2:1864
-9644:2:1872
-9645:2:1877
-9646:2:1881
-9647:2:1882
-9648:2:1889
-9649:2:1890
-9650:2:1901
-9651:2:1902
-9652:2:1903
-9653:2:1901
-9654:2:1902
-9655:2:1903
-9656:2:1914
-9657:2:1919
-9658:2:1920
-9659:0:4365
-9660:2:1932
-9661:0:4365
-9662:3:3757
-9663:0:4365
-9664:2:1934
-9665:0:4365
-9666:3:3758
-9667:0:4365
-9668:2:1935
-9669:0:4365
-9670:2:1936
-9671:0:4365
-9672:2:2129
-9673:0:4365
-9674:2:2130
-9675:0:4365
-9676:2:2134
-9677:0:4365
-9678:3:3757
-9679:0:4365
-9680:2:2136
-9681:0:4365
-9682:3:3758
-9683:0:4365
-9684:2:2137
-9685:2:2141
-9686:2:2142
-9687:2:2150
-9688:2:2151
-9689:2:2155
-9690:2:2156
-9691:2:2150
-9692:2:2151
-9693:2:2155
-9694:2:2156
-9695:2:2164
-9696:2:2169
-9697:2:2173
-9698:2:2174
-9699:2:2181
-9700:2:2182
-9701:2:2193
-9702:2:2194
-9703:2:2195
-9704:2:2193
-9705:2:2194
-9706:2:2195
-9707:2:2206
-9708:2:2211
-9709:2:2212
-9710:0:4365
-9711:2:2224
-9712:0:4365
-9713:3:3757
-9714:0:4365
-9715:2:2226
-9716:0:4365
-9717:3:3758
-9718:0:4365
-9719:2:2230
-9720:0:4365
-9721:3:3757
-9722:0:4365
-9723:2:2235
-9724:2:2239
-9725:2:2240
-9726:2:2248
-9727:2:2249
-9728:2:2253
-9729:2:2254
-9730:2:2248
-9731:2:2249
-9732:2:2250
-9733:2:2262
-9734:2:2267
-9735:2:2271
-9736:2:2272
-9737:2:2279
-9738:2:2280
-9739:2:2291
-9740:2:2292
-9741:2:2293
-9742:2:2291
-9743:2:2292
-9744:2:2293
-9745:2:2304
-9746:2:2309
-9747:2:2310
-9748:0:4365
-9749:3:3758
-9750:0:4365
-9751:2:2322
-9752:0:4365
-9753:2:1169
-9754:0:4365
-9755:3:3757
-9756:0:4365
-9757:2:1170
-9758:0:4365
-9759:3:3758
-9760:0:4365
-9761:3:3759
-9762:0:4365
-9763:3:3972
-9764:0:4365
-9765:3:3980
-9766:0:4365
-9767:3:3981
-9768:3:3985
-9769:3:3986
-9770:3:3994
-9771:3:3995
-9772:3:3999
-9773:3:4000
-9774:3:3994
-9775:3:3995
-9776:3:3999
-9777:3:4000
-9778:3:4008
-9779:3:4013
-9780:3:4017
-9781:3:4018
-9782:3:4025
-9783:3:4026
-9784:3:4037
-9785:3:4038
-9786:3:4039
-9787:3:4037
-9788:3:4038
-9789:3:4039
-9790:3:4050
-9791:3:4055
-9792:3:4056
-9793:0:4365
-9794:3:4068
-9795:0:4365
-9796:3:4069
-9797:0:4365
-9798:2:1173
-9799:0:4365
-9800:3:4070
-9801:0:4365
-9802:2:1179
-9803:0:4365
-9804:2:1180
-9805:0:4365
-9806:3:4069
-9807:0:4365
-9808:2:1181
-9809:2:1185
-9810:2:1186
-9811:2:1194
-9812:2:1195
-9813:2:1199
-9814:2:1200
-9815:2:1194
-9816:2:1195
-9817:2:1199
-9818:2:1200
-9819:2:1208
-9820:2:1213
-9821:2:1217
-9822:2:1218
-9823:2:1225
-9824:2:1226
-9825:2:1237
-9826:2:1238
-9827:2:1239
-9828:2:1237
-9829:2:1238
-9830:2:1239
-9831:2:1250
-9832:2:1255
-9833:2:1256
-9834:0:4365
-9835:3:4070
-9836:0:4365
-9837:2:1268
-9838:0:4365
-9839:3:4069
-9840:0:4365
-9841:2:1270
-9842:0:4365
-9843:3:4070
-9844:0:4365
-9845:2:1271
-9846:2:1275
-9847:2:1276
-9848:2:1284
-9849:2:1285
-9850:2:1289
-9851:2:1290
-9852:2:1284
-9853:2:1285
-9854:2:1289
-9855:2:1290
-9856:2:1298
-9857:2:1303
-9858:2:1307
-9859:2:1308
-9860:2:1315
-9861:2:1316
-9862:2:1327
-9863:2:1328
-9864:2:1329
-9865:2:1327
-9866:2:1328
-9867:2:1329
-9868:2:1340
-9869:2:1345
-9870:2:1346
-9871:0:4365
-9872:2:1358
-9873:0:4365
-9874:2:1360
-9875:0:4365
-9876:3:4069
-9877:0:4365
-9878:2:1361
-9879:0:4365
-9880:3:4070
-9881:0:4365
-9882:2:1362
-9883:2:1366
-9884:2:1367
-9885:2:1375
-9886:2:1376
-9887:2:1380
-9888:2:1381
-9889:2:1375
-9890:2:1376
-9891:2:1380
-9892:2:1381
-9893:2:1389
-9894:2:1394
-9895:2:1398
-9896:2:1399
-9897:2:1406
-9898:2:1407
-9899:2:1418
-9900:2:1419
-9901:2:1420
-9902:2:1418
-9903:2:1419
-9904:2:1420
-9905:2:1431
-9906:2:1436
-9907:2:1437
-9908:0:4365
-9909:2:1449
-9910:0:4365
-9911:3:4069
-9912:0:4365
-9913:2:1451
-9914:0:4365
-9915:3:4070
-9916:0:4365
-9917:2:1652
-9918:0:4365
-9919:2:1653
-9920:0:4365
-9921:2:1657
-9922:0:4365
-9923:2:1660
-9924:0:4365
-9925:3:4069
-9926:0:4365
-9927:2:1665
-9928:2:1669
-9929:2:1670
-9930:2:1678
-9931:2:1679
-9932:2:1683
-9933:2:1684
-9934:2:1678
-9935:2:1679
-9936:2:1680
-9937:2:1692
-9938:2:1697
-9939:2:1701
-9940:2:1702
-9941:2:1709
-9942:2:1710
-9943:2:1721
-9944:2:1722
-9945:2:1723
-9946:2:1721
-9947:2:1722
-9948:2:1723
-9949:2:1734
-9950:2:1739
-9951:2:1740
-9952:0:4365
-9953:3:4070
-9954:0:4365
-9955:2:1752
-9956:0:4365
-9957:3:4069
-9958:0:4365
-9959:2:1754
-9960:0:4365
-9961:3:4070
-9962:0:4365
-9963:2:1755
-9964:2:1759
-9965:2:1760
-9966:2:1768
-9967:2:1769
-9968:2:1773
-9969:2:1774
-9970:2:1768
-9971:2:1769
-9972:2:1773
-9973:2:1774
-9974:2:1782
-9975:2:1787
-9976:2:1791
-9977:2:1792
-9978:2:1799
-9979:2:1800
-9980:2:1811
-9981:2:1812
-9982:2:1813
-9983:2:1811
-9984:2:1812
-9985:2:1813
-9986:2:1824
-9987:2:1829
-9988:2:1830
-9989:0:4365
-9990:2:1842
-9991:0:4365
-9992:3:4069
-9993:0:4365
-9994:2:1844
-9995:0:4365
-9996:3:4070
-9997:0:4365
-9998:2:1845
-9999:2:1849
-10000:2:1850
-10001:2:1858
-10002:2:1859
-10003:2:1863
-10004:2:1864
-10005:2:1858
-10006:2:1859
-10007:2:1863
-10008:2:1864
-10009:2:1872
-10010:2:1877
-10011:2:1881
-10012:2:1882
-10013:2:1889
-10014:2:1890
-10015:2:1901
-10016:2:1902
-10017:2:1903
-10018:2:1901
-10019:2:1902
-10020:2:1903
-10021:2:1914
-10022:2:1919
-10023:2:1920
-10024:0:4365
-10025:2:1932
-10026:0:4365
-10027:3:4069
-10028:0:4365
-10029:2:1934
-10030:0:4365
-10031:3:4070
-10032:0:4365
-10033:2:1935
-10034:0:4365
-10035:2:1936
-10036:0:4365
-10037:2:2129
-10038:0:4365
-10039:2:2130
-10040:0:4365
-10041:2:2134
-10042:0:4365
-10043:3:4069
-10044:0:4365
-10045:2:2136
-10046:0:4365
-10047:3:4070
-10048:0:4365
-10049:2:2137
-10050:2:2141
-10051:2:2142
-10052:2:2150
-10053:2:2151
-10054:2:2155
-10055:2:2156
-10056:2:2150
-10057:2:2151
-10058:2:2155
-10059:2:2156
-10060:2:2164
-10061:2:2169
-10062:2:2173
-10063:2:2174
-10064:2:2181
-10065:2:2182
-10066:2:2193
-10067:2:2194
-10068:2:2195
-10069:2:2193
-10070:2:2194
-10071:2:2195
-10072:2:2206
-10073:2:2211
-10074:2:2212
-10075:0:4365
-10076:2:2224
-10077:0:4365
-10078:3:4069
-10079:0:4365
-10080:2:2226
-10081:0:4365
-10082:3:4070
-10083:0:4365
-10084:2:2230
-10085:0:4365
-10086:3:4069
-10087:0:4365
-10088:2:2235
-10089:2:2239
-10090:2:2240
-10091:2:2248
-10092:2:2249
-10093:2:2253
-10094:2:2254
-10095:2:2248
-10096:2:2249
-10097:2:2250
-10098:2:2262
-10099:2:2267
-10100:2:2271
-10101:2:2272
-10102:2:2279
-10103:2:2280
-10104:2:2291
-10105:2:2292
-10106:2:2293
-10107:2:2291
-10108:2:2292
-10109:2:2293
-10110:2:2304
-10111:2:2309
-10112:2:2310
-10113:0:4365
-10114:3:4070
-10115:0:4365
-10116:2:2322
-10117:0:4365
-10118:2:1169
-10119:0:4365
-10120:3:4069
-10121:0:4365
-10122:2:1170
-10123:0:4365
-10124:3:4070
-10125:0:4365
-10126:3:4071
-10127:0:4365
-10128:3:4081
-10129:0:4365
-10130:3:3666
-10131:0:4365
-10132:3:3667
-10133:0:4365
-10134:3:3668
-10135:0:4365
-10136:3:3669
-10137:3:3673
-10138:3:3674
-10139:3:3682
-10140:3:3683
-10141:3:3687
-10142:3:3688
-10143:3:3682
-10144:3:3683
-10145:3:3687
-10146:3:3688
-10147:3:3696
-10148:3:3701
-10149:3:3705
-10150:3:3706
-10151:3:3713
-10152:3:3714
-10153:3:3725
-10154:3:3726
-10155:3:3727
-10156:3:3725
-10157:3:3726
-10158:3:3727
-10159:3:3738
-10160:3:3743
-10161:3:3744
-10162:0:4365
-10163:3:3756
-10164:0:4365
-10165:3:3757
-10166:0:4365
-10167:2:1173
-10168:0:4365
-10169:3:3758
-10170:0:4365
-10171:2:1179
-10172:0:4365
-10173:2:1180
-10174:0:4365
-10175:3:3757
-10176:0:4365
-10177:2:1181
-10178:2:1185
-10179:2:1186
-10180:2:1194
-10181:2:1195
-10182:2:1199
-10183:2:1200
-10184:2:1194
-10185:2:1195
-10186:2:1199
-10187:2:1200
-10188:2:1208
-10189:2:1213
-10190:2:1217
-10191:2:1218
-10192:2:1225
-10193:2:1226
-10194:2:1237
-10195:2:1238
-10196:2:1239
-10197:2:1237
-10198:2:1238
-10199:2:1239
-10200:2:1250
-10201:2:1255
-10202:2:1256
-10203:0:4365
-10204:3:3758
-10205:0:4365
-10206:2:1268
-10207:0:4365
-10208:3:3757
-10209:0:4365
-10210:2:1270
-10211:0:4365
-10212:3:3758
-10213:0:4365
-10214:2:1271
-10215:2:1275
-10216:2:1276
-10217:2:1284
-10218:2:1285
-10219:2:1289
-10220:2:1290
-10221:2:1284
-10222:2:1285
-10223:2:1289
-10224:2:1290
-10225:2:1298
-10226:2:1303
-10227:2:1307
-10228:2:1308
-10229:2:1315
-10230:2:1316
-10231:2:1327
-10232:2:1328
-10233:2:1329
-10234:2:1327
-10235:2:1328
-10236:2:1329
-10237:2:1340
-10238:2:1345
-10239:2:1346
-10240:0:4365
-10241:2:1358
-10242:0:4365
-10243:2:1360
-10244:0:4365
-10245:3:3757
-10246:0:4365
-10247:2:1361
-10248:0:4365
-10249:3:3758
-10250:0:4365
-10251:2:1362
-10252:2:1366
-10253:2:1367
-10254:2:1375
-10255:2:1376
-10256:2:1380
-10257:2:1381
-10258:2:1375
-10259:2:1376
-10260:2:1380
-10261:2:1381
-10262:2:1389
-10263:2:1394
-10264:2:1398
-10265:2:1399
-10266:2:1406
-10267:2:1407
-10268:2:1418
-10269:2:1419
-10270:2:1420
-10271:2:1418
-10272:2:1419
-10273:2:1420
-10274:2:1431
-10275:2:1436
-10276:2:1437
-10277:0:4365
-10278:2:1449
-10279:0:4365
-10280:3:3757
-10281:0:4365
-10282:2:1451
-10283:0:4365
-10284:3:3758
-10285:0:4365
-10286:2:1652
-10287:0:4365
-10288:2:1653
-10289:0:4365
-10290:2:1657
-10291:0:4365
-10292:2:1660
-10293:0:4365
-10294:3:3757
-10295:0:4365
-10296:2:1665
-10297:2:1669
-10298:2:1670
-10299:2:1678
-10300:2:1679
-10301:2:1683
-10302:2:1684
-10303:2:1678
-10304:2:1679
-10305:2:1680
-10306:2:1692
-10307:2:1697
-10308:2:1701
-10309:2:1702
-10310:2:1709
-10311:2:1710
-10312:2:1721
-10313:2:1722
-10314:2:1723
-10315:2:1721
-10316:2:1722
-10317:2:1723
-10318:2:1734
-10319:2:1739
-10320:2:1740
-10321:0:4365
-10322:3:3758
-10323:0:4365
-10324:2:1752
-10325:0:4365
-10326:3:3757
-10327:0:4365
-10328:2:1754
-10329:0:4365
-10330:3:3758
-10331:0:4365
-10332:2:1755
-10333:2:1759
-10334:2:1760
-10335:2:1768
-10336:2:1769
-10337:2:1773
-10338:2:1774
-10339:2:1768
-10340:2:1769
-10341:2:1773
-10342:2:1774
-10343:2:1782
-10344:2:1787
-10345:2:1791
-10346:2:1792
-10347:2:1799
-10348:2:1800
-10349:2:1811
-10350:2:1812
-10351:2:1813
-10352:2:1811
-10353:2:1812
-10354:2:1813
-10355:2:1824
-10356:2:1829
-10357:2:1830
-10358:0:4365
-10359:2:1842
-10360:0:4365
-10361:3:3757
-10362:0:4365
-10363:2:1844
-10364:0:4365
-10365:3:3758
-10366:0:4365
-10367:2:1845
-10368:2:1849
-10369:2:1850
-10370:2:1858
-10371:2:1859
-10372:2:1863
-10373:2:1864
-10374:2:1858
-10375:2:1859
-10376:2:1863
-10377:2:1864
-10378:2:1872
-10379:2:1877
-10380:2:1881
-10381:2:1882
-10382:2:1889
-10383:2:1890
-10384:2:1901
-10385:2:1902
-10386:2:1903
-10387:2:1901
-10388:2:1902
-10389:2:1903
-10390:2:1914
-10391:2:1919
-10392:2:1920
-10393:0:4365
-10394:2:1932
-10395:0:4365
-10396:3:3757
-10397:0:4365
-10398:2:1934
-10399:0:4365
-10400:3:3758
-10401:0:4365
-10402:2:1935
-10403:0:4365
-10404:2:1936
-10405:0:4365
-10406:2:2129
-10407:0:4365
-10408:2:2130
-10409:0:4365
-10410:2:2134
-10411:0:4365
-10412:3:3757
-10413:0:4365
-10414:2:2136
-10415:0:4365
-10416:3:3758
-10417:0:4365
-10418:2:2137
-10419:2:2141
-10420:2:2142
-10421:2:2150
-10422:2:2151
-10423:2:2155
-10424:2:2156
-10425:2:2150
-10426:2:2151
-10427:2:2155
-10428:2:2156
-10429:2:2164
-10430:2:2169
-10431:2:2173
-10432:2:2174
-10433:2:2181
-10434:2:2182
-10435:2:2193
-10436:2:2194
-10437:2:2195
-10438:2:2193
-10439:2:2194
-10440:2:2195
-10441:2:2206
-10442:2:2211
-10443:2:2212
-10444:0:4365
-10445:2:2224
-10446:0:4365
-10447:3:3757
-10448:0:4365
-10449:2:2226
-10450:0:4365
-10451:3:3758
-10452:0:4365
-10453:2:2230
-10454:0:4365
-10455:3:3757
-10456:0:4365
-10457:2:2235
-10458:2:2239
-10459:2:2240
-10460:2:2248
-10461:2:2249
-10462:2:2253
-10463:2:2254
-10464:2:2248
-10465:2:2249
-10466:2:2250
-10467:2:2262
-10468:2:2267
-10469:2:2271
-10470:2:2272
-10471:2:2279
-10472:2:2280
-10473:2:2291
-10474:2:2292
-10475:2:2293
-10476:2:2291
-10477:2:2292
-10478:2:2293
-10479:2:2304
-10480:2:2309
-10481:2:2310
-10482:0:4365
-10483:3:3758
-10484:0:4365
-10485:2:2322
-10486:0:4365
-10487:2:1169
-10488:0:4365
-10489:3:3757
-10490:0:4365
-10491:2:1170
-10492:0:4365
-10493:3:3758
-10494:0:4365
-10495:3:3759
-10496:0:4365
-10497:3:3972
-10498:0:4365
-10499:3:4077
-10500:0:4365
-10501:3:4078
-10502:0:4365
-10503:3:4082
-10504:0:4365
-10505:3:4088
-10506:0:4365
-10507:3:4092
-10508:3:4093
-10509:3:4097
-10510:3:4101
-10511:3:4102
-10512:3:4097
-10513:3:4101
-10514:3:4102
-10515:3:4106
-10516:3:4114
-10517:3:4115
-10518:3:4120
-10519:3:4127
-10520:3:4128
-10521:3:4127
-10522:3:4128
-10523:3:4135
-10524:3:4140
-10525:0:4365
-10526:3:4151
-10527:0:4365
-10528:3:4155
-10529:3:4156
-10530:3:4160
-10531:3:4164
-10532:3:4165
-10533:3:4160
-10534:3:4164
-10535:3:4165
-10536:3:4169
-10537:3:4177
-10538:3:4178
-10539:3:4183
-10540:3:4190
-10541:3:4191
-10542:3:4190
-10543:3:4191
-10544:3:4198
-10545:3:4203
-10546:0:4365
-10547:3:4151
-10548:0:4365
-10549:3:4155
-10550:3:4156
-10551:3:4160
-10552:3:4164
-10553:3:4165
-10554:3:4160
-10555:3:4164
-10556:3:4165
-10557:3:4169
-10558:3:4177
-10559:3:4178
-10560:3:4183
-10561:3:4190
-10562:3:4191
-10563:3:4190
-10564:3:4191
-10565:3:4198
-10566:3:4203
-10567:0:4365
-10568:3:4214
-10569:0:4365
-10570:3:4222
-10571:3:4223
-10572:3:4227
-10573:3:4231
-10574:3:4232
-10575:3:4227
-10576:3:4231
-10577:3:4232
-10578:3:4236
-10579:3:4244
-10580:3:4245
-10581:3:4250
-10582:3:4257
-10583:3:4258
-10584:3:4257
-10585:3:4258
-10586:3:4265
-10587:3:4270
-10588:0:4365
-10589:3:4285
-10590:0:4365
-10591:3:4286
-10592:0:4365
-10593:2:1173
-10594:0:4365
-10595:3:4287
-10596:0:4365
-10597:2:1179
-10598:0:4365
-10599:2:1180
-10600:0:4365
-10601:3:4286
-10602:0:4365
-10603:2:1181
-10604:2:1185
-10605:2:1186
-10606:2:1194
-10607:2:1195
-10608:2:1199
-10609:2:1200
-10610:2:1194
-10611:2:1195
-10612:2:1199
-10613:2:1200
-10614:2:1208
-10615:2:1213
-10616:2:1217
-10617:2:1218
-10618:2:1225
-10619:2:1226
-10620:2:1237
-10621:2:1238
-10622:2:1239
-10623:2:1237
-10624:2:1238
-10625:2:1239
-10626:2:1250
-10627:2:1255
-10628:2:1256
-10629:0:4365
-10630:3:4287
-10631:0:4365
-10632:2:1268
-10633:0:4365
-10634:3:4286
-10635:0:4365
-10636:2:1270
-10637:0:4365
-10638:3:4287
-10639:0:4365
-10640:2:1271
-10641:2:1275
-10642:2:1276
-10643:2:1284
-10644:2:1285
-10645:2:1289
-10646:2:1290
-10647:2:1284
-10648:2:1285
-10649:2:1289
-10650:2:1290
-10651:2:1298
-10652:2:1303
-10653:2:1307
-10654:2:1308
-10655:2:1315
-10656:2:1316
-10657:2:1327
-10658:2:1328
-10659:2:1329
-10660:2:1327
-10661:2:1328
-10662:2:1329
-10663:2:1340
-10664:2:1345
-10665:2:1346
-10666:0:4365
-10667:2:1358
-10668:0:4365
-10669:2:1360
-10670:0:4365
-10671:3:4286
-10672:0:4365
-10673:2:1361
-10674:0:4365
-10675:3:4287
-10676:0:4365
-10677:2:1362
-10678:2:1366
-10679:2:1367
-10680:2:1375
-10681:2:1376
-10682:2:1380
-10683:2:1381
-10684:2:1375
-10685:2:1376
-10686:2:1380
-10687:2:1381
-10688:2:1389
-10689:2:1394
-10690:2:1398
-10691:2:1399
-10692:2:1406
-10693:2:1407
-10694:2:1418
-10695:2:1419
-10696:2:1420
-10697:2:1418
-10698:2:1419
-10699:2:1420
-10700:2:1431
-10701:2:1436
-10702:2:1437
-10703:0:4365
-10704:2:1449
-10705:0:4365
-10706:3:4286
-10707:0:4365
-10708:2:1451
-10709:0:4365
-10710:3:4287
-10711:0:4365
-10712:2:1652
-10713:0:4365
-10714:2:1653
-10715:0:4365
-10716:2:1657
-10717:0:4365
-10718:2:1660
-10719:0:4365
-10720:3:4286
-10721:0:4365
-10722:2:1665
-10723:2:1669
-10724:2:1670
-10725:2:1678
-10726:2:1679
-10727:2:1683
-10728:2:1684
-10729:2:1678
-10730:2:1679
-10731:2:1680
-10732:2:1692
-10733:2:1697
-10734:2:1701
-10735:2:1702
-10736:2:1709
-10737:2:1710
-10738:2:1721
-10739:2:1722
-10740:2:1723
-10741:2:1721
-10742:2:1722
-10743:2:1723
-10744:2:1734
-10745:2:1739
-10746:2:1740
-10747:0:4365
-10748:3:4287
-10749:0:4365
-10750:2:1752
-10751:0:4365
-10752:3:4286
-10753:0:4365
-10754:2:1754
-10755:0:4365
-10756:3:4287
-10757:0:4365
-10758:2:1755
-10759:2:1759
-10760:2:1760
-10761:2:1768
-10762:2:1769
-10763:2:1773
-10764:2:1774
-10765:2:1768
-10766:2:1769
-10767:2:1773
-10768:2:1774
-10769:2:1782
-10770:2:1787
-10771:2:1791
-10772:2:1792
-10773:2:1799
-10774:2:1800
-10775:2:1811
-10776:2:1812
-10777:2:1813
-10778:2:1811
-10779:2:1812
-10780:2:1813
-10781:2:1824
-10782:2:1829
-10783:2:1830
-10784:0:4365
-10785:2:1842
-10786:0:4365
-10787:3:4286
-10788:0:4365
-10789:2:1844
-10790:0:4365
-10791:3:4287
-10792:0:4365
-10793:2:1845
-10794:2:1849
-10795:2:1850
-10796:2:1858
-10797:2:1859
-10798:2:1863
-10799:2:1864
-10800:2:1858
-10801:2:1859
-10802:2:1863
-10803:2:1864
-10804:2:1872
-10805:2:1877
-10806:2:1881
-10807:2:1882
-10808:2:1889
-10809:2:1890
-10810:2:1901
-10811:2:1902
-10812:2:1903
-10813:2:1901
-10814:2:1902
-10815:2:1903
-10816:2:1914
-10817:2:1919
-10818:2:1920
-10819:0:4365
-10820:2:1932
-10821:0:4365
-10822:3:4286
-10823:0:4365
-10824:2:1934
-10825:0:4365
-10826:3:4287
-10827:0:4365
-10828:2:1935
-10829:0:4365
-10830:2:1936
-10831:0:4365
-10832:2:2129
-10833:0:4365
-10834:2:2130
-10835:0:4365
-10836:2:2134
-10837:0:4365
-10838:3:4286
-10839:0:4365
-10840:2:2136
-10841:0:4365
-10842:3:4287
-10843:0:4365
-10844:2:2137
-10845:2:2141
-10846:2:2142
-10847:2:2150
-10848:2:2151
-10849:2:2155
-10850:2:2156
-10851:2:2150
-10852:2:2151
-10853:2:2155
-10854:2:2156
-10855:2:2164
-10856:2:2169
-10857:2:2173
-10858:2:2174
-10859:2:2181
-10860:2:2182
-10861:2:2193
-10862:2:2194
-10863:2:2195
-10864:2:2193
-10865:2:2194
-10866:2:2195
-10867:2:2206
-10868:2:2211
-10869:2:2212
-10870:0:4365
-10871:2:2224
-10872:0:4365
-10873:3:4286
-10874:0:4365
-10875:2:2226
-10876:0:4365
-10877:3:4287
-10878:0:4365
-10879:2:2230
-10880:0:4365
-10881:3:4286
-10882:0:4365
-10883:2:2235
-10884:2:2239
-10885:2:2240
-10886:2:2248
-10887:2:2249
-10888:2:2253
-10889:2:2254
-10890:2:2248
-10891:2:2249
-10892:2:2250
-10893:2:2262
-10894:2:2267
-10895:2:2271
-10896:2:2272
-10897:2:2279
-10898:2:2280
-10899:2:2291
-10900:2:2292
-10901:2:2293
-10902:2:2291
-10903:2:2292
-10904:2:2293
-10905:2:2304
-10906:2:2309
-10907:2:2310
-10908:0:4365
-10909:3:4287
-10910:0:4365
-10911:2:2322
-10912:0:4365
-10913:2:1169
-10914:0:4365
-10915:3:4286
-10916:0:4365
-10917:2:1170
-10918:0:4365
-10919:3:4287
-10920:0:4365
-10921:3:4288
-10922:0:4365
-10923:3:4294
-10924:0:4365
-10925:3:4295
-10926:0:4365
-10927:3:2338
-10928:0:4365
-10929:3:2339
-10930:3:2343
-10931:3:2344
-10932:3:2352
-10933:3:2353
-10934:3:2357
-10935:3:2358
-10936:3:2352
-10937:3:2353
-10938:3:2357
-10939:3:2358
-10940:3:2366
-10941:3:2371
-10942:3:2375
-10943:3:2376
-10944:3:2383
-10945:3:2384
-10946:3:2395
-10947:3:2396
-10948:3:2397
-10949:3:2395
-10950:3:2396
-10951:3:2397
-10952:3:2408
-10953:3:2413
-10954:3:2414
-10955:0:4365
-10956:3:2426
-10957:0:4365
-10958:3:2427
-10959:0:4365
-10960:2:1173
-10961:0:4365
-10962:3:2428
-10963:0:4365
-10964:2:1179
-10965:0:4365
-10966:2:1180
-10967:0:4365
-10968:3:2427
-10969:0:4365
-10970:2:1181
-10971:2:1185
-10972:2:1186
-10973:2:1194
-10974:2:1195
-10975:2:1199
-10976:2:1200
-10977:2:1194
-10978:2:1195
-10979:2:1199
-10980:2:1200
-10981:2:1208
-10982:2:1213
-10983:2:1217
-10984:2:1218
-10985:2:1225
-10986:2:1226
-10987:2:1237
-10988:2:1238
-10989:2:1239
-10990:2:1237
-10991:2:1238
-10992:2:1239
-10993:2:1250
-10994:2:1255
-10995:2:1256
-10996:0:4365
-10997:3:2428
-10998:0:4365
-10999:2:1268
-11000:0:4365
-11001:3:2427
-11002:0:4365
-11003:2:1270
-11004:0:4365
-11005:3:2428
-11006:0:4365
-11007:2:1271
-11008:2:1275
-11009:2:1276
-11010:2:1284
-11011:2:1285
-11012:2:1289
-11013:2:1290
-11014:2:1284
-11015:2:1285
-11016:2:1289
-11017:2:1290
-11018:2:1298
-11019:2:1303
-11020:2:1307
-11021:2:1308
-11022:2:1315
-11023:2:1316
-11024:2:1327
-11025:2:1328
-11026:2:1329
-11027:2:1327
-11028:2:1328
-11029:2:1329
-11030:2:1340
-11031:2:1345
-11032:2:1346
-11033:0:4365
-11034:2:1358
-11035:0:4365
-11036:2:1360
-11037:0:4365
-11038:3:2427
-11039:0:4365
-11040:2:1361
-11041:0:4365
-11042:3:2428
-11043:0:4365
-11044:2:1362
-11045:2:1366
-11046:2:1367
-11047:2:1375
-11048:2:1376
-11049:2:1380
-11050:2:1381
-11051:2:1375
-11052:2:1376
-11053:2:1380
-11054:2:1381
-11055:2:1389
-11056:2:1394
-11057:2:1398
-11058:2:1399
-11059:2:1406
-11060:2:1407
-11061:2:1418
-11062:2:1419
-11063:2:1420
-11064:2:1418
-11065:2:1419
-11066:2:1420
-11067:2:1431
-11068:2:1436
-11069:2:1437
-11070:0:4365
-11071:2:1449
-11072:0:4365
-11073:3:2427
-11074:0:4365
-11075:2:1451
-11076:0:4365
-11077:3:2428
-11078:0:4365
-11079:2:1652
-11080:0:4365
-11081:2:1653
-11082:0:4365
-11083:2:1657
-11084:0:4365
-11085:2:1660
-11086:0:4365
-11087:3:2427
-11088:0:4365
-11089:2:1665
-11090:2:1669
-11091:2:1670
-11092:2:1678
-11093:2:1679
-11094:2:1683
-11095:2:1684
-11096:2:1678
-11097:2:1679
-11098:2:1680
-11099:2:1692
-11100:2:1697
-11101:2:1701
-11102:2:1702
-11103:2:1709
-11104:2:1710
-11105:2:1721
-11106:2:1722
-11107:2:1723
-11108:2:1721
-11109:2:1722
-11110:2:1723
-11111:2:1734
-11112:2:1739
-11113:2:1740
-11114:0:4365
-11115:3:2428
-11116:0:4365
-11117:2:1752
-11118:0:4365
-11119:3:2427
-11120:0:4365
-11121:2:1754
-11122:0:4365
-11123:3:2428
-11124:0:4365
-11125:2:1755
-11126:2:1759
-11127:2:1760
-11128:2:1768
-11129:2:1769
-11130:2:1773
-11131:2:1774
-11132:2:1768
-11133:2:1769
-11134:2:1773
-11135:2:1774
-11136:2:1782
-11137:2:1787
-11138:2:1791
-11139:2:1792
-11140:2:1799
-11141:2:1800
-11142:2:1811
-11143:2:1812
-11144:2:1813
-11145:2:1811
-11146:2:1812
-11147:2:1813
-11148:2:1824
-11149:2:1829
-11150:2:1830
-11151:0:4365
-11152:2:1842
-11153:0:4365
-11154:3:2427
-11155:0:4365
-11156:2:1844
-11157:0:4363
-11158:3:2428
-11159:0:4369
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.define b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 4cee7dc..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 72 byte, depth reached 10856, errors: 0
-   161519 states, stored
-  1724866 states, matched
-  1886385 transitions (= stored+matched)
-  6692565 atomic steps
-hash conflicts:     84009 (resolved)
-
-Stats on memory usage (in Megabytes):
-   15.404      equivalent memory usage for states (stored*(State-vector + overhead))
-   10.421      actual memory usage for states (compression: 67.65%)
-               state-vector as stored = 40 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  476.115      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 403, "pan.___", state 330, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 652, "pan.___", state 213, "(1)"
-       line 403, "pan.___", state 239, "(1)"
-       line 403, "pan.___", state 525, "(1)"
-       line 399, "pan.___", state 610, "(1)"
-       line 403, "pan.___", state 624, "(1)"
-       line 403, "pan.___", state 724, "(1)"
-       line 399, "pan.___", state 805, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 807, "(1)"
-       line 399, "pan.___", state 808, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 808, "else"
-       line 399, "pan.___", state 811, "(1)"
-       line 403, "pan.___", state 819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 821, "(1)"
-       line 403, "pan.___", state 822, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 822, "else"
-       line 403, "pan.___", state 825, "(1)"
-       line 403, "pan.___", state 826, "(1)"
-       line 403, "pan.___", state 826, "(1)"
-       line 401, "pan.___", state 831, "((j<1))"
-       line 401, "pan.___", state 831, "((j>=1))"
-       line 408, "pan.___", state 837, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 850, "(1)"
-       line 409, "pan.___", state 851, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 851, "else"
-       line 409, "pan.___", state 854, "(1)"
-       line 409, "pan.___", state 855, "(1)"
-       line 409, "pan.___", state 855, "(1)"
-       line 413, "pan.___", state 863, "(1)"
-       line 413, "pan.___", state 864, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 864, "else"
-       line 413, "pan.___", state 867, "(1)"
-       line 413, "pan.___", state 868, "(1)"
-       line 413, "pan.___", state 868, "(1)"
-       line 411, "pan.___", state 873, "((j<1))"
-       line 411, "pan.___", state 873, "((j>=1))"
-       line 418, "pan.___", state 880, "(1)"
-       line 418, "pan.___", state 881, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 881, "else"
-       line 418, "pan.___", state 884, "(1)"
-       line 418, "pan.___", state 885, "(1)"
-       line 418, "pan.___", state 885, "(1)"
-       line 399, "pan.___", state 896, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 898, "(1)"
-       line 399, "pan.___", state 899, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 899, "else"
-       line 399, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 910, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 912, "(1)"
-       line 403, "pan.___", state 913, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 913, "else"
-       line 403, "pan.___", state 916, "(1)"
-       line 403, "pan.___", state 917, "(1)"
-       line 403, "pan.___", state 917, "(1)"
-       line 401, "pan.___", state 922, "((j<1))"
-       line 401, "pan.___", state 922, "((j>=1))"
-       line 408, "pan.___", state 928, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 941, "(1)"
-       line 409, "pan.___", state 942, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 942, "else"
-       line 409, "pan.___", state 945, "(1)"
-       line 409, "pan.___", state 946, "(1)"
-       line 409, "pan.___", state 946, "(1)"
-       line 413, "pan.___", state 954, "(1)"
-       line 413, "pan.___", state 955, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 955, "else"
-       line 413, "pan.___", state 958, "(1)"
-       line 413, "pan.___", state 959, "(1)"
-       line 413, "pan.___", state 959, "(1)"
-       line 411, "pan.___", state 964, "((j<1))"
-       line 411, "pan.___", state 964, "((j>=1))"
-       line 418, "pan.___", state 971, "(1)"
-       line 418, "pan.___", state 972, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 972, "else"
-       line 418, "pan.___", state 975, "(1)"
-       line 418, "pan.___", state 976, "(1)"
-       line 418, "pan.___", state 976, "(1)"
-       line 194, "pan.___", state 981, "(1)"
-       line 194, "pan.___", state 981, "(1)"
-       line 214, "pan.___", state 985, "((i<1))"
-       line 214, "pan.___", state 985, "((i>=1))"
-       line 399, "pan.___", state 991, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 993, "(1)"
-       line 399, "pan.___", state 994, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 994, "else"
-       line 399, "pan.___", state 997, "(1)"
-       line 403, "pan.___", state 1005, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1007, "(1)"
-       line 403, "pan.___", state 1008, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1008, "else"
-       line 403, "pan.___", state 1011, "(1)"
-       line 403, "pan.___", state 1012, "(1)"
-       line 403, "pan.___", state 1012, "(1)"
-       line 401, "pan.___", state 1017, "((j<1))"
-       line 401, "pan.___", state 1017, "((j>=1))"
-       line 408, "pan.___", state 1023, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1036, "(1)"
-       line 409, "pan.___", state 1037, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1037, "else"
-       line 409, "pan.___", state 1040, "(1)"
-       line 409, "pan.___", state 1041, "(1)"
-       line 409, "pan.___", state 1041, "(1)"
-       line 413, "pan.___", state 1049, "(1)"
-       line 413, "pan.___", state 1050, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1050, "else"
-       line 413, "pan.___", state 1053, "(1)"
-       line 413, "pan.___", state 1054, "(1)"
-       line 413, "pan.___", state 1054, "(1)"
-       line 411, "pan.___", state 1059, "((j<1))"
-       line 411, "pan.___", state 1059, "((j>=1))"
-       line 418, "pan.___", state 1066, "(1)"
-       line 418, "pan.___", state 1067, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1067, "else"
-       line 418, "pan.___", state 1070, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 194, "pan.___", state 1076, "(1)"
-       line 194, "pan.___", state 1076, "(1)"
-       line 221, "pan.___", state 1077, "(1)"
-       line 221, "pan.___", state 1077, "(1)"
-       line 356, "pan.___", state 1083, "((sighand_exec==1))"
-       line 356, "pan.___", state 1083, "else"
-       line 362, "pan.___", state 1086, "sighand_exec = 1"
-       line 399, "pan.___", state 1099, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1101, "(1)"
-       line 399, "pan.___", state 1102, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1102, "else"
-       line 399, "pan.___", state 1105, "(1)"
-       line 403, "pan.___", state 1113, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1115, "(1)"
-       line 403, "pan.___", state 1116, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1116, "else"
-       line 403, "pan.___", state 1119, "(1)"
-       line 403, "pan.___", state 1120, "(1)"
-       line 403, "pan.___", state 1120, "(1)"
-       line 401, "pan.___", state 1125, "((i<1))"
-       line 401, "pan.___", state 1125, "((i>=1))"
-       line 408, "pan.___", state 1131, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1144, "(1)"
-       line 409, "pan.___", state 1145, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1145, "else"
-       line 409, "pan.___", state 1148, "(1)"
-       line 409, "pan.___", state 1149, "(1)"
-       line 409, "pan.___", state 1149, "(1)"
-       line 413, "pan.___", state 1157, "(1)"
-       line 413, "pan.___", state 1158, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1158, "else"
-       line 413, "pan.___", state 1161, "(1)"
-       line 413, "pan.___", state 1162, "(1)"
-       line 413, "pan.___", state 1162, "(1)"
-       line 411, "pan.___", state 1167, "((i<1))"
-       line 411, "pan.___", state 1167, "((i>=1))"
-       line 418, "pan.___", state 1174, "(1)"
-       line 418, "pan.___", state 1175, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1175, "else"
-       line 418, "pan.___", state 1178, "(1)"
-       line 418, "pan.___", state 1179, "(1)"
-       line 418, "pan.___", state 1179, "(1)"
-       line 420, "pan.___", state 1182, "(1)"
-       line 420, "pan.___", state 1182, "(1)"
-       line 362, "pan.___", state 1191, "sighand_exec = 1"
-       line 403, "pan.___", state 1222, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 399, "pan.___", state 1404, "(1)"
-       line 403, "pan.___", state 1418, "(1)"
-       line 403, "pan.___", state 1518, "(1)"
-       line 399, "pan.___", state 1599, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1601, "(1)"
-       line 399, "pan.___", state 1602, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1602, "else"
-       line 399, "pan.___", state 1605, "(1)"
-       line 403, "pan.___", state 1613, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1615, "(1)"
-       line 403, "pan.___", state 1616, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1616, "else"
-       line 403, "pan.___", state 1619, "(1)"
-       line 403, "pan.___", state 1620, "(1)"
-       line 403, "pan.___", state 1620, "(1)"
-       line 401, "pan.___", state 1625, "((j<1))"
-       line 401, "pan.___", state 1625, "((j>=1))"
-       line 408, "pan.___", state 1631, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1644, "(1)"
-       line 409, "pan.___", state 1645, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1645, "else"
-       line 409, "pan.___", state 1648, "(1)"
-       line 409, "pan.___", state 1649, "(1)"
-       line 409, "pan.___", state 1649, "(1)"
-       line 413, "pan.___", state 1657, "(1)"
-       line 413, "pan.___", state 1658, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1658, "else"
-       line 413, "pan.___", state 1661, "(1)"
-       line 413, "pan.___", state 1662, "(1)"
-       line 413, "pan.___", state 1662, "(1)"
-       line 411, "pan.___", state 1667, "((j<1))"
-       line 411, "pan.___", state 1667, "((j>=1))"
-       line 418, "pan.___", state 1674, "(1)"
-       line 418, "pan.___", state 1675, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1675, "else"
-       line 418, "pan.___", state 1678, "(1)"
-       line 418, "pan.___", state 1679, "(1)"
-       line 418, "pan.___", state 1679, "(1)"
-       line 399, "pan.___", state 1690, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1692, "(1)"
-       line 399, "pan.___", state 1693, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1693, "else"
-       line 399, "pan.___", state 1696, "(1)"
-       line 403, "pan.___", state 1704, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1706, "(1)"
-       line 403, "pan.___", state 1707, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1707, "else"
-       line 403, "pan.___", state 1710, "(1)"
-       line 403, "pan.___", state 1711, "(1)"
-       line 403, "pan.___", state 1711, "(1)"
-       line 401, "pan.___", state 1716, "((j<1))"
-       line 401, "pan.___", state 1716, "((j>=1))"
-       line 408, "pan.___", state 1722, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1735, "(1)"
-       line 409, "pan.___", state 1736, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1736, "else"
-       line 409, "pan.___", state 1739, "(1)"
-       line 409, "pan.___", state 1740, "(1)"
-       line 409, "pan.___", state 1740, "(1)"
-       line 413, "pan.___", state 1748, "(1)"
-       line 413, "pan.___", state 1749, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1749, "else"
-       line 413, "pan.___", state 1752, "(1)"
-       line 413, "pan.___", state 1753, "(1)"
-       line 413, "pan.___", state 1753, "(1)"
-       line 411, "pan.___", state 1758, "((j<1))"
-       line 411, "pan.___", state 1758, "((j>=1))"
-       line 418, "pan.___", state 1765, "(1)"
-       line 418, "pan.___", state 1766, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1766, "else"
-       line 418, "pan.___", state 1769, "(1)"
-       line 418, "pan.___", state 1770, "(1)"
-       line 418, "pan.___", state 1770, "(1)"
-       line 194, "pan.___", state 1775, "(1)"
-       line 194, "pan.___", state 1775, "(1)"
-       line 214, "pan.___", state 1779, "((i<1))"
-       line 214, "pan.___", state 1779, "((i>=1))"
-       line 399, "pan.___", state 1785, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1787, "(1)"
-       line 399, "pan.___", state 1788, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1788, "else"
-       line 399, "pan.___", state 1791, "(1)"
-       line 403, "pan.___", state 1799, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1801, "(1)"
-       line 403, "pan.___", state 1802, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1802, "else"
-       line 403, "pan.___", state 1805, "(1)"
-       line 403, "pan.___", state 1806, "(1)"
-       line 403, "pan.___", state 1806, "(1)"
-       line 401, "pan.___", state 1811, "((j<1))"
-       line 401, "pan.___", state 1811, "((j>=1))"
-       line 408, "pan.___", state 1817, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1830, "(1)"
-       line 409, "pan.___", state 1831, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1831, "else"
-       line 409, "pan.___", state 1834, "(1)"
-       line 409, "pan.___", state 1835, "(1)"
-       line 409, "pan.___", state 1835, "(1)"
-       line 413, "pan.___", state 1843, "(1)"
-       line 413, "pan.___", state 1844, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1844, "else"
-       line 413, "pan.___", state 1847, "(1)"
-       line 413, "pan.___", state 1848, "(1)"
-       line 413, "pan.___", state 1848, "(1)"
-       line 411, "pan.___", state 1853, "((j<1))"
-       line 411, "pan.___", state 1853, "((j>=1))"
-       line 418, "pan.___", state 1860, "(1)"
-       line 418, "pan.___", state 1861, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1861, "else"
-       line 418, "pan.___", state 1864, "(1)"
-       line 418, "pan.___", state 1865, "(1)"
-       line 418, "pan.___", state 1865, "(1)"
-       line 194, "pan.___", state 1870, "(1)"
-       line 194, "pan.___", state 1870, "(1)"
-       line 221, "pan.___", state 1871, "(1)"
-       line 221, "pan.___", state 1871, "(1)"
-       line 356, "pan.___", state 1877, "((sighand_exec==1))"
-       line 356, "pan.___", state 1877, "else"
-       line 362, "pan.___", state 1880, "sighand_exec = 1"
-       line 399, "pan.___", state 1893, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1895, "(1)"
-       line 399, "pan.___", state 1896, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1896, "else"
-       line 399, "pan.___", state 1899, "(1)"
-       line 403, "pan.___", state 1907, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1909, "(1)"
-       line 403, "pan.___", state 1910, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1910, "else"
-       line 403, "pan.___", state 1913, "(1)"
-       line 403, "pan.___", state 1914, "(1)"
-       line 403, "pan.___", state 1914, "(1)"
-       line 401, "pan.___", state 1919, "((i<1))"
-       line 401, "pan.___", state 1919, "((i>=1))"
-       line 408, "pan.___", state 1925, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1938, "(1)"
-       line 409, "pan.___", state 1939, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1939, "else"
-       line 409, "pan.___", state 1942, "(1)"
-       line 409, "pan.___", state 1943, "(1)"
-       line 409, "pan.___", state 1943, "(1)"
-       line 413, "pan.___", state 1951, "(1)"
-       line 413, "pan.___", state 1952, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1952, "else"
-       line 413, "pan.___", state 1955, "(1)"
-       line 413, "pan.___", state 1956, "(1)"
-       line 413, "pan.___", state 1956, "(1)"
-       line 411, "pan.___", state 1961, "((i<1))"
-       line 411, "pan.___", state 1961, "((i>=1))"
-       line 418, "pan.___", state 1968, "(1)"
-       line 418, "pan.___", state 1969, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1969, "else"
-       line 418, "pan.___", state 1972, "(1)"
-       line 418, "pan.___", state 1973, "(1)"
-       line 418, "pan.___", state 1973, "(1)"
-       line 420, "pan.___", state 1976, "(1)"
-       line 420, "pan.___", state 1976, "(1)"
-       line 362, "pan.___", state 1985, "sighand_exec = 1"
-       line 403, "pan.___", state 2016, "(1)"
-       line 702, "pan.___", state 2304, "-end-"
-       (221 of 2304 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 748, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.47 seconds
-pan: rate 109876.87 states/second
-pan: avg transition delay 7.7927e-07 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 48411ec..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 00fba51..0000000
+++ /dev/null
@@ -1,2172 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4249
-2:4:4201
-3:4:4204
-4:4:4204
-5:4:4207
-6:4:4215
-7:4:4215
-8:4:4218
-9:4:4224
-10:4:4228
-11:4:4228
-12:4:4231
-13:4:4239
-14:4:4243
-15:4:4244
-16:0:4249
-17:4:4246
-18:0:4249
-19:3:1991
-20:0:4249
-21:3:1997
-22:0:4249
-23:3:1998
-24:0:4249
-25:3:1999
-26:3:2003
-27:3:2004
-28:3:2012
-29:3:2013
-30:3:2017
-31:3:2018
-32:3:2026
-33:3:2031
-34:3:2035
-35:3:2036
-36:3:2043
-37:3:2044
-38:3:2055
-39:3:2056
-40:3:2057
-41:3:2068
-42:3:2073
-43:3:2074
-44:0:4249
-45:3:2086
-46:0:4249
-47:3:2088
-48:3:2089
-49:0:4249
-50:3:2093
-51:3:2097
-52:3:2098
-53:3:2106
-54:3:2107
-55:3:2111
-56:3:2112
-57:3:2120
-58:3:2125
-59:3:2126
-60:3:2137
-61:3:2138
-62:3:2149
-63:3:2150
-64:3:2151
-65:3:2162
-66:3:2167
-67:3:2168
-68:0:4249
-69:3:2180
-70:0:4249
-71:3:2182
-72:0:4249
-73:3:2183
-74:0:4249
-75:3:2193
-76:0:4249
-77:3:2194
-78:0:4249
-79:3:2195
-80:3:2199
-81:3:2200
-82:3:2208
-83:3:2209
-84:3:2213
-85:3:2214
-86:3:2222
-87:3:2227
-88:3:2231
-89:3:2232
-90:3:2239
-91:3:2240
-92:3:2251
-93:3:2252
-94:3:2253
-95:3:2264
-96:3:2269
-97:3:2270
-98:0:4249
-99:3:2285
-100:0:4249
-101:3:2286
-102:3:2290
-103:3:2291
-104:3:2299
-105:3:2300
-106:3:2304
-107:3:2305
-108:3:2313
-109:3:2318
-110:3:2322
-111:3:2323
-112:3:2330
-113:3:2331
-114:3:2342
-115:3:2343
-116:3:2344
-117:3:2355
-118:3:2360
-119:3:2361
-120:0:4249
-121:3:2376
-122:0:4249
-123:3:2381
-124:3:2385
-125:3:2386
-126:3:2394
-127:3:2395
-128:3:2399
-129:3:2400
-130:3:2408
-131:3:2413
-132:3:2417
-133:3:2418
-134:3:2425
-135:3:2426
-136:3:2437
-137:3:2438
-138:3:2439
-139:3:2450
-140:3:2455
-141:3:2456
-142:0:4249
-143:3:2475
-144:0:4249
-145:3:2477
-146:0:4249
-147:3:2478
-148:3:2482
-149:3:2483
-150:3:2491
-151:3:2492
-152:3:2496
-153:3:2497
-154:3:2505
-155:3:2510
-156:3:2514
-157:3:2515
-158:3:2522
-159:3:2523
-160:3:2534
-161:3:2535
-162:3:2536
-163:3:2547
-164:3:2552
-165:3:2553
-166:0:4249
-167:3:2565
-168:0:4249
-169:3:2567
-170:0:4249
-171:3:2570
-172:3:2571
-173:3:2583
-174:3:2584
-175:3:2588
-176:3:2589
-177:3:2597
-178:3:2602
-179:3:2606
-180:3:2607
-181:3:2614
-182:3:2615
-183:3:2626
-184:3:2627
-185:3:2628
-186:3:2639
-187:3:2644
-188:3:2645
-189:0:4249
-190:3:2657
-191:0:4249
-192:3:2659
-193:0:4249
-194:3:2660
-195:0:4249
-196:3:2661
-197:0:4249
-198:3:2662
-199:0:4249
-200:3:2663
-201:3:2667
-202:3:2668
-203:3:2676
-204:3:2677
-205:3:2681
-206:3:2682
-207:3:2690
-208:3:2695
-209:3:2699
-210:3:2700
-211:3:2707
-212:3:2708
-213:3:2719
-214:3:2720
-215:3:2721
-216:3:2732
-217:3:2737
-218:3:2738
-219:0:4249
-220:3:2750
-221:0:4249
-222:3:3036
-223:0:4249
-224:3:3134
-225:0:4249
-226:3:3135
-227:0:4249
-228:3:3139
-229:0:4249
-230:3:3145
-231:3:3149
-232:3:3150
-233:3:3158
-234:3:3159
-235:3:3163
-236:3:3164
-237:3:3172
-238:3:3177
-239:3:3181
-240:3:3182
-241:3:3189
-242:3:3190
-243:3:3201
-244:3:3202
-245:3:3203
-246:3:3214
-247:3:3219
-248:3:3220
-249:0:4249
-250:3:3232
-251:0:4249
-252:3:3234
-253:0:4249
-254:3:3235
-255:3:3239
-256:3:3240
-257:3:3248
-258:3:3249
-259:3:3253
-260:3:3254
-261:3:3262
-262:3:3267
-263:3:3271
-264:3:3272
-265:3:3279
-266:3:3280
-267:3:3291
-268:3:3292
-269:3:3293
-270:3:3304
-271:3:3309
-272:3:3310
-273:0:4249
-274:3:3322
-275:0:4249
-276:3:3324
-277:0:4249
-278:3:3327
-279:3:3328
-280:3:3340
-281:3:3341
-282:3:3345
-283:3:3346
-284:3:3354
-285:3:3359
-286:3:3363
-287:3:3364
-288:3:3371
-289:3:3372
-290:3:3383
-291:3:3384
-292:3:3385
-293:3:3396
-294:3:3401
-295:3:3402
-296:0:4249
-297:3:3414
-298:0:4249
-299:3:3416
-300:0:4249
-301:3:3417
-302:0:4249
-303:3:3418
-304:0:4249
-305:3:3419
-306:0:4249
-307:3:3420
-308:3:3424
-309:3:3425
-310:3:3433
-311:3:3434
-312:3:3438
-313:3:3439
-314:3:3447
-315:3:3452
-316:3:3456
-317:3:3457
-318:3:3464
-319:3:3465
-320:3:3476
-321:3:3477
-322:3:3478
-323:3:3489
-324:3:3494
-325:3:3495
-326:0:4249
-327:3:3507
-328:0:4249
-329:3:3793
-330:0:4249
-331:3:3891
-332:0:4249
-333:3:3892
-334:0:4249
-335:3:3896
-336:0:4249
-337:3:3902
-338:0:4249
-339:3:3903
-340:3:3907
-341:3:3908
-342:3:3916
-343:3:3917
-344:3:3921
-345:3:3922
-346:3:3930
-347:3:3935
-348:3:3939
-349:3:3940
-350:3:3947
-351:3:3948
-352:3:3959
-353:3:3960
-354:3:3961
-355:3:3972
-356:3:3977
-357:3:3978
-358:0:4249
-359:3:3993
-360:0:4249
-361:3:3994
-362:3:3998
-363:3:3999
-364:3:4007
-365:3:4008
-366:3:4012
-367:3:4013
-368:3:4021
-369:3:4026
-370:3:4030
-371:3:4031
-372:3:4038
-373:3:4039
-374:3:4050
-375:3:4051
-376:3:4052
-377:3:4063
-378:3:4068
-379:3:4069
-380:0:4249
-381:3:4084
-382:0:4249
-383:3:4089
-384:3:4093
-385:3:4094
-386:3:4102
-387:3:4103
-388:3:4107
-389:3:4108
-390:3:4116
-391:3:4121
-392:3:4125
-393:3:4126
-394:3:4133
-395:3:4134
-396:3:4145
-397:3:4146
-398:3:4147
-399:3:4158
-400:3:4163
-401:3:4164
-402:0:4249
-403:3:4183
-404:0:4249
-405:3:4185
-406:0:4249
-407:3:4186
-408:0:4249
-409:3:1998
-410:0:4249
-411:3:1999
-412:3:2003
-413:3:2004
-414:3:2012
-415:3:2013
-416:3:2017
-417:3:2018
-418:3:2026
-419:3:2031
-420:3:2035
-421:3:2036
-422:3:2043
-423:3:2044
-424:3:2055
-425:3:2056
-426:3:2057
-427:3:2068
-428:3:2073
-429:3:2074
-430:0:4249
-431:3:2086
-432:0:4249
-433:3:2088
-434:3:2089
-435:0:4249
-436:3:2093
-437:3:2097
-438:3:2098
-439:3:2106
-440:3:2107
-441:3:2111
-442:3:2112
-443:3:2120
-444:3:2125
-445:3:2126
-446:3:2137
-447:3:2138
-448:3:2149
-449:3:2150
-450:3:2151
-451:3:2162
-452:3:2167
-453:3:2168
-454:0:4249
-455:3:2180
-456:0:4249
-457:3:2182
-458:0:4249
-459:3:2183
-460:0:4249
-461:3:2193
-462:0:4249
-463:3:2194
-464:0:4249
-465:3:2195
-466:3:2199
-467:3:2200
-468:3:2208
-469:3:2209
-470:3:2213
-471:3:2214
-472:3:2222
-473:3:2227
-474:3:2231
-475:3:2232
-476:3:2239
-477:3:2240
-478:3:2251
-479:3:2252
-480:3:2253
-481:3:2264
-482:3:2269
-483:3:2270
-484:0:4249
-485:3:2285
-486:0:4249
-487:3:2286
-488:3:2290
-489:3:2291
-490:3:2299
-491:3:2300
-492:3:2304
-493:3:2305
-494:3:2313
-495:3:2318
-496:3:2322
-497:3:2323
-498:3:2330
-499:3:2331
-500:3:2342
-501:3:2343
-502:3:2344
-503:3:2355
-504:3:2360
-505:3:2361
-506:0:4249
-507:3:2376
-508:0:4249
-509:3:2381
-510:3:2385
-511:3:2386
-512:3:2394
-513:3:2395
-514:3:2399
-515:3:2400
-516:3:2408
-517:3:2413
-518:3:2417
-519:3:2418
-520:3:2425
-521:3:2426
-522:3:2437
-523:3:2438
-524:3:2439
-525:3:2450
-526:3:2455
-527:3:2456
-528:0:4249
-529:3:2475
-530:0:4249
-531:3:2477
-532:0:4249
-533:3:2478
-534:3:2482
-535:3:2483
-536:3:2491
-537:3:2492
-538:3:2496
-539:3:2497
-540:3:2505
-541:3:2510
-542:3:2514
-543:3:2515
-544:3:2522
-545:3:2523
-546:3:2534
-547:3:2535
-548:3:2536
-549:3:2547
-550:3:2552
-551:3:2553
-552:0:4249
-553:3:2565
-554:0:4249
-555:3:2567
-556:0:4249
-557:3:2570
-558:3:2571
-559:3:2583
-560:3:2584
-561:3:2588
-562:3:2589
-563:3:2597
-564:3:2602
-565:3:2606
-566:3:2607
-567:3:2614
-568:3:2615
-569:3:2626
-570:3:2627
-571:3:2628
-572:3:2639
-573:3:2644
-574:3:2645
-575:0:4249
-576:3:2657
-577:0:4249
-578:3:2659
-579:0:4249
-580:3:2660
-581:0:4249
-582:3:2661
-583:0:4249
-584:3:2662
-585:0:4249
-586:3:2663
-587:3:2667
-588:3:2668
-589:3:2676
-590:3:2677
-591:3:2681
-592:3:2682
-593:3:2690
-594:3:2695
-595:3:2699
-596:3:2700
-597:3:2707
-598:3:2708
-599:3:2719
-600:3:2720
-601:3:2721
-602:3:2732
-603:3:2737
-604:3:2738
-605:0:4249
-606:3:2750
-607:0:4249
-608:3:3036
-609:0:4249
-610:3:3134
-611:0:4249
-612:3:3135
-613:0:4249
-614:3:3139
-615:0:4249
-616:3:3145
-617:3:3149
-618:3:3150
-619:3:3158
-620:3:3159
-621:3:3163
-622:3:3164
-623:3:3172
-624:3:3177
-625:3:3181
-626:3:3182
-627:3:3189
-628:3:3190
-629:3:3201
-630:3:3202
-631:3:3203
-632:3:3214
-633:3:3219
-634:3:3220
-635:0:4249
-636:3:3232
-637:0:4249
-638:3:3234
-639:0:4249
-640:3:3235
-641:3:3239
-642:3:3240
-643:3:3248
-644:3:3249
-645:3:3253
-646:3:3254
-647:3:3262
-648:3:3267
-649:3:3271
-650:3:3272
-651:3:3279
-652:3:3280
-653:3:3291
-654:3:3292
-655:3:3293
-656:3:3304
-657:3:3309
-658:3:3310
-659:0:4249
-660:3:3322
-661:0:4249
-662:3:3324
-663:0:4249
-664:3:3327
-665:3:3328
-666:3:3340
-667:3:3341
-668:3:3345
-669:3:3346
-670:3:3354
-671:3:3359
-672:3:3363
-673:3:3364
-674:3:3371
-675:3:3372
-676:3:3383
-677:3:3384
-678:3:3385
-679:3:3396
-680:3:3401
-681:3:3402
-682:0:4249
-683:3:3414
-684:0:4249
-685:3:3416
-686:0:4249
-687:3:3417
-688:0:4249
-689:3:3418
-690:0:4249
-691:3:3419
-692:0:4249
-693:3:3420
-694:3:3424
-695:3:3425
-696:3:3433
-697:3:3434
-698:3:3438
-699:3:3439
-700:3:3447
-701:3:3452
-702:3:3456
-703:3:3457
-704:3:3464
-705:3:3465
-706:3:3476
-707:3:3477
-708:3:3478
-709:3:3489
-710:3:3494
-711:3:3495
-712:0:4249
-713:3:3507
-714:0:4249
-715:3:3793
-716:0:4249
-717:3:3891
-718:0:4249
-719:3:3892
-720:0:4249
-721:3:3896
-722:0:4249
-723:3:3902
-724:0:4249
-725:3:3903
-726:3:3907
-727:3:3908
-728:3:3916
-729:3:3917
-730:3:3921
-731:3:3922
-732:3:3930
-733:3:3935
-734:3:3939
-735:3:3940
-736:3:3947
-737:3:3948
-738:3:3959
-739:3:3960
-740:3:3961
-741:3:3972
-742:3:3977
-743:3:3978
-744:0:4249
-745:3:3993
-746:0:4249
-747:3:3994
-748:3:3998
-749:3:3999
-750:3:4007
-751:3:4008
-752:3:4012
-753:3:4013
-754:3:4021
-755:3:4026
-756:3:4030
-757:3:4031
-758:3:4038
-759:3:4039
-760:3:4050
-761:3:4051
-762:3:4052
-763:3:4063
-764:3:4068
-765:3:4069
-766:0:4249
-767:3:4084
-768:0:4249
-769:3:4089
-770:3:4093
-771:3:4094
-772:3:4102
-773:3:4103
-774:3:4107
-775:3:4108
-776:3:4116
-777:3:4121
-778:3:4125
-779:3:4126
-780:3:4133
-781:3:4134
-782:3:4145
-783:3:4146
-784:3:4147
-785:3:4158
-786:3:4163
-787:3:4164
-788:0:4249
-789:3:4183
-790:0:4249
-791:3:4185
-792:0:4249
-793:3:4186
-794:0:4249
-795:3:1998
-796:0:4249
-797:3:1999
-798:3:2003
-799:3:2004
-800:3:2012
-801:3:2013
-802:3:2017
-803:3:2018
-804:3:2026
-805:3:2031
-806:3:2035
-807:3:2036
-808:3:2043
-809:3:2044
-810:3:2055
-811:3:2056
-812:3:2057
-813:3:2068
-814:3:2073
-815:3:2074
-816:0:4249
-817:3:2086
-818:0:4249
-819:3:2088
-820:3:2089
-821:0:4249
-822:3:2093
-823:3:2097
-824:3:2098
-825:3:2106
-826:3:2107
-827:3:2111
-828:3:2112
-829:3:2120
-830:3:2125
-831:3:2126
-832:3:2137
-833:3:2138
-834:3:2149
-835:3:2150
-836:3:2151
-837:3:2162
-838:3:2167
-839:3:2168
-840:0:4249
-841:3:2180
-842:0:4249
-843:3:2182
-844:0:4249
-845:3:2183
-846:0:4249
-847:3:2193
-848:0:4249
-849:3:2194
-850:0:4249
-851:3:2195
-852:3:2199
-853:3:2200
-854:3:2208
-855:3:2209
-856:3:2213
-857:3:2214
-858:3:2222
-859:3:2227
-860:3:2231
-861:3:2232
-862:3:2239
-863:3:2240
-864:3:2251
-865:3:2252
-866:3:2253
-867:3:2264
-868:3:2269
-869:3:2270
-870:0:4249
-871:3:2285
-872:0:4249
-873:3:2286
-874:3:2290
-875:3:2291
-876:3:2299
-877:3:2300
-878:3:2304
-879:3:2305
-880:3:2313
-881:3:2318
-882:3:2322
-883:3:2323
-884:3:2330
-885:3:2331
-886:3:2342
-887:3:2343
-888:3:2344
-889:3:2355
-890:3:2360
-891:3:2361
-892:0:4249
-893:3:2376
-894:0:4249
-895:3:2381
-896:3:2385
-897:3:2386
-898:3:2394
-899:3:2395
-900:3:2399
-901:3:2400
-902:3:2408
-903:3:2413
-904:3:2417
-905:3:2418
-906:3:2425
-907:3:2426
-908:3:2437
-909:3:2438
-910:3:2439
-911:3:2450
-912:3:2455
-913:3:2456
-914:0:4249
-915:3:2475
-916:0:4249
-917:3:2477
-918:0:4249
-919:3:2478
-920:3:2482
-921:3:2483
-922:3:2491
-923:3:2492
-924:3:2496
-925:3:2497
-926:3:2505
-927:3:2510
-928:3:2514
-929:3:2515
-930:3:2522
-931:3:2523
-932:3:2534
-933:3:2535
-934:3:2536
-935:3:2547
-936:3:2552
-937:3:2553
-938:0:4249
-939:3:2565
-940:0:4249
-941:3:2567
-942:0:4249
-943:3:2570
-944:3:2571
-945:3:2583
-946:3:2584
-947:3:2588
-948:3:2589
-949:3:2597
-950:3:2602
-951:3:2606
-952:3:2607
-953:3:2614
-954:3:2615
-955:3:2626
-956:3:2627
-957:3:2628
-958:3:2639
-959:3:2644
-960:3:2645
-961:0:4249
-962:3:2657
-963:0:4249
-964:3:2659
-965:0:4249
-966:3:2660
-967:0:4249
-968:3:2661
-969:0:4249
-970:3:2662
-971:0:4249
-972:3:2663
-973:3:2667
-974:3:2668
-975:3:2676
-976:3:2677
-977:3:2681
-978:3:2682
-979:3:2690
-980:3:2695
-981:3:2699
-982:3:2700
-983:3:2707
-984:3:2708
-985:3:2719
-986:3:2720
-987:3:2721
-988:3:2732
-989:3:2737
-990:3:2738
-991:0:4249
-992:3:2750
-993:0:4249
-994:3:3036
-995:0:4249
-996:3:3134
-997:0:4249
-998:3:3135
-999:0:4249
-1000:3:3139
-1001:0:4249
-1002:3:3145
-1003:3:3149
-1004:3:3150
-1005:3:3158
-1006:3:3159
-1007:3:3163
-1008:3:3164
-1009:3:3172
-1010:3:3177
-1011:3:3181
-1012:3:3182
-1013:3:3189
-1014:3:3190
-1015:3:3201
-1016:3:3202
-1017:3:3203
-1018:3:3214
-1019:3:3219
-1020:3:3220
-1021:0:4249
-1022:3:3232
-1023:0:4249
-1024:3:3234
-1025:0:4249
-1026:3:3235
-1027:3:3239
-1028:3:3240
-1029:3:3248
-1030:3:3249
-1031:3:3253
-1032:3:3254
-1033:3:3262
-1034:3:3267
-1035:3:3271
-1036:3:3272
-1037:3:3279
-1038:3:3280
-1039:3:3291
-1040:3:3292
-1041:3:3293
-1042:3:3304
-1043:3:3309
-1044:3:3310
-1045:0:4249
-1046:3:3322
-1047:0:4249
-1048:3:3324
-1049:0:4249
-1050:3:3327
-1051:3:3328
-1052:3:3340
-1053:3:3341
-1054:3:3345
-1055:3:3346
-1056:3:3354
-1057:3:3359
-1058:3:3363
-1059:3:3364
-1060:3:3371
-1061:3:3372
-1062:3:3383
-1063:3:3384
-1064:3:3385
-1065:3:3396
-1066:3:3401
-1067:3:3402
-1068:0:4249
-1069:3:3414
-1070:0:4249
-1071:3:3416
-1072:0:4249
-1073:3:3417
-1074:0:4249
-1075:3:3418
-1076:0:4249
-1077:3:3419
-1078:0:4249
-1079:3:3420
-1080:3:3424
-1081:3:3425
-1082:3:3433
-1083:3:3434
-1084:3:3438
-1085:3:3439
-1086:3:3447
-1087:3:3452
-1088:3:3456
-1089:3:3457
-1090:3:3464
-1091:3:3465
-1092:3:3476
-1093:3:3477
-1094:3:3478
-1095:3:3489
-1096:3:3494
-1097:3:3495
-1098:0:4249
-1099:3:3507
-1100:0:4249
-1101:3:3793
-1102:0:4249
-1103:3:3891
-1104:0:4249
-1105:3:3892
-1106:0:4249
-1107:3:3896
-1108:0:4249
-1109:3:3902
-1110:0:4249
-1111:3:3903
-1112:3:3907
-1113:3:3908
-1114:3:3916
-1115:3:3917
-1116:3:3921
-1117:3:3922
-1118:3:3930
-1119:3:3935
-1120:3:3939
-1121:3:3940
-1122:3:3947
-1123:3:3948
-1124:3:3959
-1125:3:3960
-1126:3:3961
-1127:3:3972
-1128:3:3977
-1129:3:3978
-1130:0:4249
-1131:3:3993
-1132:0:4249
-1133:3:3994
-1134:3:3998
-1135:3:3999
-1136:3:4007
-1137:3:4008
-1138:3:4012
-1139:3:4013
-1140:3:4021
-1141:3:4026
-1142:3:4030
-1143:3:4031
-1144:3:4038
-1145:3:4039
-1146:3:4050
-1147:3:4051
-1148:3:4052
-1149:3:4063
-1150:3:4068
-1151:3:4069
-1152:0:4249
-1153:3:4084
-1154:0:4249
-1155:3:4089
-1156:3:4093
-1157:3:4094
-1158:3:4102
-1159:3:4103
-1160:3:4107
-1161:3:4108
-1162:3:4116
-1163:3:4121
-1164:3:4125
-1165:3:4126
-1166:3:4133
-1167:3:4134
-1168:3:4145
-1169:3:4146
-1170:3:4147
-1171:3:4158
-1172:3:4163
-1173:3:4164
-1174:0:4249
-1175:3:4183
-1176:0:4249
-1177:3:4185
-1178:0:4249
-1179:3:4186
-1180:0:4249
-1181:3:1998
-1182:0:4249
-1183:3:1999
-1184:3:2003
-1185:3:2004
-1186:3:2012
-1187:3:2013
-1188:3:2017
-1189:3:2018
-1190:3:2026
-1191:3:2031
-1192:3:2035
-1193:3:2036
-1194:3:2043
-1195:3:2044
-1196:3:2055
-1197:3:2056
-1198:3:2057
-1199:3:2068
-1200:3:2073
-1201:3:2074
-1202:0:4249
-1203:3:2086
-1204:0:4249
-1205:3:2088
-1206:3:2089
-1207:0:4249
-1208:3:2093
-1209:3:2097
-1210:3:2098
-1211:3:2106
-1212:3:2107
-1213:3:2111
-1214:3:2112
-1215:3:2120
-1216:3:2125
-1217:3:2126
-1218:3:2137
-1219:3:2138
-1220:3:2149
-1221:3:2150
-1222:3:2151
-1223:3:2162
-1224:3:2167
-1225:3:2168
-1226:0:4249
-1227:3:2180
-1228:0:4249
-1229:3:2182
-1230:0:4249
-1231:3:2183
-1232:0:4249
-1233:3:2193
-1234:0:4249
-1235:3:2194
-1236:0:4249
-1237:3:2195
-1238:3:2199
-1239:3:2200
-1240:3:2208
-1241:3:2209
-1242:3:2213
-1243:3:2214
-1244:3:2222
-1245:3:2227
-1246:3:2231
-1247:3:2232
-1248:3:2239
-1249:3:2240
-1250:3:2251
-1251:3:2252
-1252:3:2253
-1253:3:2264
-1254:3:2269
-1255:3:2270
-1256:0:4249
-1257:3:2285
-1258:0:4249
-1259:3:2286
-1260:3:2290
-1261:3:2291
-1262:3:2299
-1263:3:2300
-1264:3:2304
-1265:3:2305
-1266:3:2313
-1267:3:2318
-1268:3:2322
-1269:3:2323
-1270:3:2330
-1271:3:2331
-1272:3:2342
-1273:3:2343
-1274:3:2344
-1275:3:2355
-1276:3:2360
-1277:3:2361
-1278:0:4249
-1279:3:2376
-1280:0:4249
-1281:3:2381
-1282:3:2385
-1283:3:2386
-1284:3:2394
-1285:3:2395
-1286:3:2399
-1287:3:2400
-1288:3:2408
-1289:3:2413
-1290:3:2417
-1291:3:2418
-1292:3:2425
-1293:3:2426
-1294:3:2437
-1295:3:2438
-1296:3:2439
-1297:3:2450
-1298:3:2455
-1299:3:2456
-1300:0:4249
-1301:3:2475
-1302:0:4249
-1303:3:2477
-1304:0:4249
-1305:3:2478
-1306:3:2482
-1307:3:2483
-1308:3:2491
-1309:3:2492
-1310:3:2496
-1311:3:2497
-1312:3:2505
-1313:3:2510
-1314:3:2514
-1315:3:2515
-1316:3:2522
-1317:3:2523
-1318:3:2534
-1319:3:2535
-1320:3:2536
-1321:3:2547
-1322:3:2552
-1323:3:2553
-1324:0:4249
-1325:3:2565
-1326:0:4249
-1327:3:2567
-1328:0:4249
-1329:3:2570
-1330:3:2571
-1331:3:2583
-1332:3:2584
-1333:3:2588
-1334:3:2589
-1335:3:2597
-1336:3:2602
-1337:3:2606
-1338:3:2607
-1339:3:2614
-1340:3:2615
-1341:3:2626
-1342:3:2627
-1343:3:2628
-1344:3:2639
-1345:3:2644
-1346:3:2645
-1347:0:4249
-1348:3:2657
-1349:0:4249
-1350:3:2659
-1351:0:4249
-1352:3:2660
-1353:0:4249
-1354:3:2661
-1355:0:4249
-1356:3:2662
-1357:0:4249
-1358:3:2663
-1359:3:2667
-1360:3:2668
-1361:3:2676
-1362:3:2677
-1363:3:2681
-1364:3:2682
-1365:3:2690
-1366:3:2695
-1367:3:2699
-1368:3:2700
-1369:3:2707
-1370:3:2708
-1371:3:2719
-1372:3:2720
-1373:3:2721
-1374:3:2732
-1375:3:2737
-1376:3:2738
-1377:0:4249
-1378:3:2750
-1379:0:4249
-1380:3:3036
-1381:0:4249
-1382:3:3134
-1383:0:4249
-1384:3:3135
-1385:0:4249
-1386:3:3139
-1387:0:4249
-1388:3:3145
-1389:3:3149
-1390:3:3150
-1391:3:3158
-1392:3:3159
-1393:3:3163
-1394:3:3164
-1395:3:3172
-1396:3:3177
-1397:3:3181
-1398:3:3182
-1399:3:3189
-1400:3:3190
-1401:3:3201
-1402:3:3202
-1403:3:3203
-1404:3:3214
-1405:3:3219
-1406:3:3220
-1407:0:4249
-1408:3:3232
-1409:0:4249
-1410:3:3234
-1411:0:4249
-1412:3:3235
-1413:3:3239
-1414:3:3240
-1415:3:3248
-1416:3:3249
-1417:3:3253
-1418:3:3254
-1419:3:3262
-1420:3:3267
-1421:3:3271
-1422:3:3272
-1423:3:3279
-1424:3:3280
-1425:3:3291
-1426:3:3292
-1427:3:3293
-1428:3:3304
-1429:3:3309
-1430:3:3310
-1431:0:4249
-1432:3:3322
-1433:0:4249
-1434:3:3324
-1435:0:4249
-1436:3:3327
-1437:3:3328
-1438:3:3340
-1439:3:3341
-1440:3:3345
-1441:3:3346
-1442:3:3354
-1443:3:3359
-1444:3:3363
-1445:3:3364
-1446:3:3371
-1447:3:3372
-1448:3:3383
-1449:3:3384
-1450:3:3385
-1451:3:3396
-1452:3:3401
-1453:3:3402
-1454:0:4249
-1455:3:3414
-1456:0:4249
-1457:3:3416
-1458:0:4249
-1459:3:3417
-1460:0:4249
-1461:3:3418
-1462:0:4249
-1463:3:3419
-1464:0:4249
-1465:3:3420
-1466:3:3424
-1467:3:3425
-1468:3:3433
-1469:3:3434
-1470:3:3438
-1471:3:3439
-1472:3:3447
-1473:3:3452
-1474:3:3456
-1475:3:3457
-1476:3:3464
-1477:3:3465
-1478:3:3476
-1479:3:3477
-1480:3:3478
-1481:3:3489
-1482:3:3494
-1483:3:3495
-1484:0:4249
-1485:3:3507
-1486:0:4249
-1487:3:3793
-1488:0:4249
-1489:3:3891
-1490:0:4249
-1491:3:3892
-1492:0:4249
-1493:3:3896
-1494:0:4249
-1495:3:3902
-1496:0:4249
-1497:3:3903
-1498:3:3907
-1499:3:3908
-1500:3:3916
-1501:3:3917
-1502:3:3921
-1503:3:3922
-1504:3:3930
-1505:3:3935
-1506:3:3939
-1507:3:3940
-1508:3:3947
-1509:3:3948
-1510:3:3959
-1511:3:3960
-1512:3:3961
-1513:3:3972
-1514:3:3977
-1515:3:3978
-1516:0:4249
-1517:3:3993
-1518:0:4249
-1519:3:3994
-1520:3:3998
-1521:3:3999
-1522:3:4007
-1523:3:4008
-1524:3:4012
-1525:3:4013
-1526:3:4021
-1527:3:4026
-1528:3:4030
-1529:3:4031
-1530:3:4038
-1531:3:4039
-1532:3:4050
-1533:3:4051
-1534:3:4052
-1535:3:4063
-1536:3:4068
-1537:3:4069
-1538:0:4249
-1539:3:4084
-1540:0:4249
-1541:3:4089
-1542:3:4093
-1543:3:4094
-1544:3:4102
-1545:3:4103
-1546:3:4107
-1547:3:4108
-1548:3:4116
-1549:3:4121
-1550:3:4125
-1551:3:4126
-1552:3:4133
-1553:3:4134
-1554:3:4145
-1555:3:4146
-1556:3:4147
-1557:3:4158
-1558:3:4163
-1559:3:4164
-1560:0:4249
-1561:3:4183
-1562:0:4249
-1563:3:4185
-1564:0:4249
-1565:3:4186
-1566:0:4249
-1567:3:1998
-1568:0:4249
-1569:3:1999
-1570:3:2003
-1571:3:2004
-1572:3:2012
-1573:3:2013
-1574:3:2017
-1575:3:2018
-1576:3:2026
-1577:3:2031
-1578:3:2035
-1579:3:2036
-1580:3:2043
-1581:3:2044
-1582:3:2055
-1583:3:2056
-1584:3:2057
-1585:3:2068
-1586:3:2073
-1587:3:2074
-1588:0:4249
-1589:3:2086
-1590:0:4249
-1591:3:2088
-1592:3:2089
-1593:0:4249
-1594:3:2093
-1595:3:2097
-1596:3:2098
-1597:3:2106
-1598:3:2107
-1599:3:2111
-1600:3:2112
-1601:3:2120
-1602:3:2133
-1603:3:2134
-1604:3:2137
-1605:3:2138
-1606:3:2149
-1607:3:2150
-1608:3:2151
-1609:3:2162
-1610:3:2167
-1611:3:2170
-1612:3:2171
-1613:0:4249
-1614:3:2180
-1615:0:4249
-1616:3:2182
-1617:0:4249
-1618:3:2183
-1619:0:4249
-1620:3:2193
-1621:0:4249
-1622:3:2194
-1623:0:4249
-1624:3:2195
-1625:3:2199
-1626:3:2200
-1627:3:2208
-1628:3:2209
-1629:3:2213
-1630:3:2214
-1631:3:2222
-1632:3:2235
-1633:3:2236
-1634:3:2239
-1635:3:2240
-1636:3:2251
-1637:3:2252
-1638:3:2253
-1639:3:2264
-1640:3:2269
-1641:3:2272
-1642:3:2273
-1643:0:4249
-1644:3:2285
-1645:0:4249
-1646:3:2286
-1647:3:2290
-1648:3:2291
-1649:3:2299
-1650:3:2300
-1651:3:2304
-1652:3:2305
-1653:3:2313
-1654:3:2326
-1655:3:2327
-1656:3:2330
-1657:3:2331
-1658:3:2342
-1659:3:2343
-1660:3:2344
-1661:3:2355
-1662:3:2360
-1663:3:2363
-1664:3:2364
-1665:0:4249
-1666:3:2376
-1667:0:4249
-1668:3:2381
-1669:3:2385
-1670:3:2386
-1671:3:2394
-1672:3:2395
-1673:3:2399
-1674:3:2400
-1675:3:2408
-1676:3:2421
-1677:3:2422
-1678:3:2425
-1679:3:2426
-1680:3:2437
-1681:3:2438
-1682:3:2439
-1683:3:2450
-1684:3:2455
-1685:3:2458
-1686:3:2459
-1687:0:4249
-1688:3:2475
-1689:0:4249
-1690:3:2477
-1691:0:4249
-1692:3:2478
-1693:3:2482
-1694:3:2483
-1695:3:2491
-1696:3:2492
-1697:3:2496
-1698:3:2497
-1699:3:2505
-1700:3:2518
-1701:3:2519
-1702:3:2522
-1703:3:2523
-1704:3:2534
-1705:3:2535
-1706:3:2536
-1707:3:2547
-1708:3:2552
-1709:3:2555
-1710:3:2556
-1711:0:4249
-1712:3:2565
-1713:0:4249
-1714:3:2567
-1715:0:4249
-1716:3:2570
-1717:3:2571
-1718:3:2583
-1719:3:2584
-1720:3:2588
-1721:3:2589
-1722:3:2597
-1723:3:2610
-1724:3:2611
-1725:3:2614
-1726:3:2615
-1727:3:2626
-1728:3:2627
-1729:3:2628
-1730:3:2639
-1731:3:2644
-1732:3:2647
-1733:3:2648
-1734:0:4249
-1735:3:2657
-1736:0:4249
-1737:3:2659
-1738:0:4249
-1739:3:2660
-1740:0:4249
-1741:3:2661
-1742:0:4249
-1743:3:2662
-1744:0:4249
-1745:3:2663
-1746:3:2667
-1747:3:2668
-1748:3:2676
-1749:3:2677
-1750:3:2681
-1751:3:2682
-1752:3:2690
-1753:3:2703
-1754:3:2704
-1755:3:2707
-1756:3:2708
-1757:3:2719
-1758:3:2720
-1759:3:2721
-1760:3:2732
-1761:3:2737
-1762:3:2740
-1763:3:2741
-1764:0:4249
-1765:3:2750
-1766:0:4249
-1767:3:3036
-1768:0:4249
-1769:3:3134
-1770:0:4249
-1771:3:3135
-1772:0:4249
-1773:3:3139
-1774:0:4249
-1775:3:3145
-1776:3:3149
-1777:3:3150
-1778:3:3158
-1779:3:3159
-1780:3:3163
-1781:3:3164
-1782:3:3172
-1783:3:3185
-1784:3:3186
-1785:3:3189
-1786:3:3190
-1787:3:3201
-1788:3:3202
-1789:3:3203
-1790:3:3214
-1791:3:3219
-1792:3:3222
-1793:3:3223
-1794:0:4249
-1795:3:3232
-1796:0:4249
-1797:3:3234
-1798:0:4249
-1799:3:3235
-1800:3:3239
-1801:3:3240
-1802:3:3248
-1803:3:3249
-1804:3:3253
-1805:3:3254
-1806:3:3262
-1807:3:3275
-1808:3:3276
-1809:3:3279
-1810:3:3280
-1811:3:3291
-1812:3:3292
-1813:3:3293
-1814:3:3304
-1815:3:3309
-1816:3:3312
-1817:3:3313
-1818:0:4249
-1819:3:3322
-1820:0:4249
-1821:3:3324
-1822:0:4249
-1823:3:3327
-1824:3:3328
-1825:3:3340
-1826:3:3341
-1827:3:3345
-1828:3:3346
-1829:3:3354
-1830:3:3367
-1831:3:3368
-1832:3:3371
-1833:3:3372
-1834:3:3383
-1835:3:3384
-1836:3:3385
-1837:3:3396
-1838:3:3401
-1839:3:3404
-1840:3:3405
-1841:0:4249
-1842:3:3414
-1843:0:4249
-1844:3:3416
-1845:0:4249
-1846:3:3417
-1847:0:4249
-1848:3:3418
-1849:0:4249
-1850:3:3419
-1851:0:4249
-1852:3:3420
-1853:3:3424
-1854:3:3425
-1855:3:3433
-1856:3:3434
-1857:3:3438
-1858:3:3439
-1859:3:3447
-1860:3:3460
-1861:3:3461
-1862:3:3464
-1863:3:3465
-1864:3:3476
-1865:3:3477
-1866:3:3478
-1867:3:3489
-1868:3:3494
-1869:3:3497
-1870:3:3498
-1871:0:4249
-1872:3:3507
-1873:0:4249
-1874:3:3793
-1875:0:4249
-1876:3:3891
-1877:0:4249
-1878:3:3892
-1879:0:4249
-1880:3:3896
-1881:0:4249
-1882:3:3902
-1883:0:4249
-1884:3:3903
-1885:3:3907
-1886:3:3908
-1887:3:3916
-1888:3:3917
-1889:3:3921
-1890:3:3922
-1891:3:3930
-1892:3:3943
-1893:3:3944
-1894:3:3947
-1895:3:3948
-1896:3:3959
-1897:3:3960
-1898:3:3961
-1899:3:3972
-1900:3:3977
-1901:3:3980
-1902:3:3981
-1903:0:4249
-1904:3:3993
-1905:0:4249
-1906:3:3994
-1907:3:3998
-1908:3:3999
-1909:3:4007
-1910:3:4008
-1911:3:4012
-1912:3:4013
-1913:3:4021
-1914:3:4034
-1915:3:4035
-1916:3:4038
-1917:3:4039
-1918:3:4050
-1919:3:4051
-1920:3:4052
-1921:3:4063
-1922:3:4068
-1923:3:4071
-1924:3:4072
-1925:0:4249
-1926:3:4084
-1927:0:4249
-1928:3:4089
-1929:3:4093
-1930:3:4094
-1931:3:4102
-1932:3:4103
-1933:3:4107
-1934:3:4108
-1935:3:4116
-1936:3:4129
-1937:3:4130
-1938:3:4133
-1939:3:4134
-1940:3:4145
-1941:3:4146
-1942:3:4147
-1943:3:4158
-1944:3:4163
-1945:3:4166
-1946:3:4167
-1947:0:4249
-1948:3:4183
-1949:0:4249
-1950:3:4185
-1951:0:4249
-1952:3:4186
-1953:0:4249
-1954:3:4189
-1955:0:4249
-1956:3:4194
-1957:0:4249
-1958:2:1016
-1959:0:4249
-1960:3:4195
-1961:0:4249
-1962:2:1022
-1963:0:4249
-1964:3:4194
-1965:0:4249
-1966:2:1023
-1967:0:4249
-1968:3:4195
-1969:0:4249
-1970:2:1024
-1971:0:4249
-1972:3:4194
-1973:0:4249
-1974:2:1025
-1975:0:4249
-1976:3:4195
-1977:0:4249
-1978:1:2
-1979:0:4249
-1980:3:4194
-1981:0:4249
-1982:2:1026
-1983:0:4249
-1984:3:4195
-1985:0:4249
-1986:1:8
-1987:0:4249
-1988:3:4194
-1989:0:4249
-1990:2:1025
-1991:0:4249
-1992:3:4195
-1993:0:4249
-1994:1:9
-1995:0:4249
-1996:3:4194
-1997:0:4249
-1998:2:1026
-1999:0:4249
-2000:3:4195
-2001:0:4249
-2002:1:10
-2003:0:4249
-2004:3:4194
-2005:0:4249
-2006:2:1025
-2007:0:4249
-2008:3:4195
-2009:0:4249
-2010:1:11
-2011:0:4249
-2012:3:4194
-2013:0:4249
-2014:2:1026
-2015:0:4249
-2016:3:4195
-2017:0:4249
-2018:1:12
-2019:1:16
-2020:1:17
-2021:1:25
-2022:1:26
-2023:1:30
-2024:1:31
-2025:1:39
-2026:1:44
-2027:1:48
-2028:1:49
-2029:1:56
-2030:1:57
-2031:1:68
-2032:1:69
-2033:1:70
-2034:1:81
-2035:1:86
-2036:1:87
-2037:0:4249
-2038:3:4194
-2039:0:4249
-2040:2:1025
-2041:0:4249
-2042:3:4195
-2043:0:4249
-2044:1:99
-2045:0:4249
-2046:3:4194
-2047:0:4249
-2048:2:1026
-2049:0:4249
-2050:3:4195
-2051:0:4249
-2052:2:1027
-2053:0:4249
-2054:3:4194
-2055:0:4249
-2056:2:1028
-2057:0:4249
-2058:3:4195
-2059:0:4249
-2060:2:1039
-2061:0:4249
-2062:3:4194
-2063:0:4249
-2064:2:1040
-2065:0:4249
-2066:3:4195
-2067:0:4249
-2068:2:1041
-2069:2:1045
-2070:2:1046
-2071:2:1054
-2072:2:1055
-2073:2:1059
-2074:2:1060
-2075:2:1068
-2076:2:1073
-2077:2:1077
-2078:2:1078
-2079:2:1085
-2080:2:1086
-2081:2:1097
-2082:2:1098
-2083:2:1099
-2084:2:1110
-2085:2:1115
-2086:2:1116
-2087:0:4249
-2088:3:4194
-2089:0:4249
-2090:2:1128
-2091:0:4249
-2092:3:4195
-2093:0:4249
-2094:2:1129
-2095:2:1133
-2096:2:1134
-2097:2:1142
-2098:2:1143
-2099:2:1147
-2100:2:1148
-2101:2:1156
-2102:2:1161
-2103:2:1165
-2104:2:1166
-2105:2:1173
-2106:2:1174
-2107:2:1185
-2108:2:1186
-2109:2:1187
-2110:2:1198
-2111:2:1203
-2112:2:1204
-2113:0:4249
-2114:3:4194
-2115:0:4249
-2116:2:1216
-2117:0:4249
-2118:3:4195
-2119:0:4249
-2120:2:1217
-2121:0:4249
-2122:3:4194
-2123:0:4249
-2124:2:1218
-2125:2:1222
-2126:2:1223
-2127:2:1231
-2128:2:1232
-2129:2:1236
-2130:2:1237
-2131:2:1245
-2132:2:1250
-2133:2:1254
-2134:2:1255
-2135:2:1262
-2136:2:1263
-2137:2:1274
-2138:2:1275
-2139:2:1276
-2140:2:1287
-2141:2:1292
-2142:2:1293
-2143:0:4249
-2144:3:4195
-2145:0:4249
-2146:2:1305
-2147:0:4249
-2148:3:4194
-2149:0:4249
-2150:2:1590
-2151:0:4249
-2152:3:4195
-2153:0:4249
-2154:2:1591
-2155:0:4249
-2156:3:4194
-2157:0:4249
-2158:2:1596
-2159:0:4249
-2160:3:4195
-2161:0:4249
-2162:2:1601
-2163:0:4249
-2164:3:4194
-2165:0:4249
-2166:2:1602
-2167:0:4247
-2168:3:4195
-2169:0:4253
-2170:2:1211
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.define b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 5eb694e..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10519, errors: 0
-    20146 states, stored
-   191615 states, matched
-   211761 transitions (= stored+matched)
-   711676 atomic steps
-hash conflicts:      1222 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.614      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.509      actual memory usage for states (compression: 93.51%)
-               state-vector as stored = 51 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.229      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 160, "(1)"
-       line 651, "pan.___", state 213, "(1)"
-       line 174, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 233, "(1)"
-       line 174, "pan.___", state 257, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 266, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 279, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 296, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 305, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 318, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 341, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 357, "(1)"
-       line 407, "pan.___", state 373, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 386, "(1)"
-       line 417, "pan.___", state 416, "(1)"
-       line 398, "pan.___", state 442, "(1)"
-       line 402, "pan.___", state 456, "(1)"
-       line 407, "pan.___", state 472, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 515, "(1)"
-       line 402, "pan.___", state 556, "(1)"
-       line 407, "pan.___", state 572, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 615, "(1)"
-       line 174, "pan.___", state 636, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 638, "(1)"
-       line 178, "pan.___", state 645, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 647, "(1)"
-       line 178, "pan.___", state 648, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 648, "else"
-       line 176, "pan.___", state 653, "((j<1))"
-       line 176, "pan.___", state 653, "((j>=1))"
-       line 182, "pan.___", state 658, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 660, "(1)"
-       line 182, "pan.___", state 661, "((cache_dirty_generation_ptr.bitfield&(1<<0)))"
-       line 182, "pan.___", state 661, "else"
-       line 174, "pan.___", state 671, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 673, "(1)"
-       line 178, "pan.___", state 680, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 682, "(1)"
-       line 178, "pan.___", state 683, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 683, "else"
-       line 176, "pan.___", state 688, "((j<1))"
-       line 176, "pan.___", state 688, "((j>=1))"
-       line 182, "pan.___", state 693, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 695, "(1)"
-       line 182, "pan.___", state 696, "((cache_dirty_generation_ptr.bitfield&(1<<i)))"
-       line 182, "pan.___", state 696, "else"
-       line 192, "pan.___", state 701, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 192, "pan.___", state 701, "else"
-       line 213, "pan.___", state 705, "((i<1))"
-       line 213, "pan.___", state 705, "((i>=1))"
-       line 174, "pan.___", state 710, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 712, "(1)"
-       line 178, "pan.___", state 719, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 721, "(1)"
-       line 178, "pan.___", state 722, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 722, "else"
-       line 176, "pan.___", state 727, "((j<1))"
-       line 176, "pan.___", state 727, "((j>=1))"
-       line 182, "pan.___", state 732, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 734, "(1)"
-       line 182, "pan.___", state 735, "((cache_dirty_generation_ptr.bitfield&(1<<0)))"
-       line 182, "pan.___", state 735, "else"
-       line 192, "pan.___", state 740, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 192, "pan.___", state 740, "else"
-       line 220, "pan.___", state 741, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 741, "else"
-       line 355, "pan.___", state 747, "((sighand_exec==1))"
-       line 355, "pan.___", state 747, "else"
-       line 361, "pan.___", state 750, "sighand_exec = 1"
-       line 398, "pan.___", state 763, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 765, "(1)"
-       line 398, "pan.___", state 766, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 766, "else"
-       line 398, "pan.___", state 769, "(1)"
-       line 402, "pan.___", state 777, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 779, "(1)"
-       line 402, "pan.___", state 780, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 780, "else"
-       line 402, "pan.___", state 783, "(1)"
-       line 402, "pan.___", state 784, "(1)"
-       line 402, "pan.___", state 784, "(1)"
-       line 400, "pan.___", state 789, "((i<1))"
-       line 400, "pan.___", state 789, "((i>=1))"
-       line 407, "pan.___", state 795, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 808, "(1)"
-       line 408, "pan.___", state 809, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 809, "else"
-       line 408, "pan.___", state 812, "(1)"
-       line 408, "pan.___", state 813, "(1)"
-       line 408, "pan.___", state 813, "(1)"
-       line 412, "pan.___", state 821, "(1)"
-       line 412, "pan.___", state 822, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 822, "else"
-       line 412, "pan.___", state 825, "(1)"
-       line 412, "pan.___", state 826, "(1)"
-       line 412, "pan.___", state 826, "(1)"
-       line 410, "pan.___", state 831, "((i<1))"
-       line 410, "pan.___", state 831, "((i>=1))"
-       line 417, "pan.___", state 838, "(1)"
-       line 417, "pan.___", state 839, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 839, "else"
-       line 417, "pan.___", state 842, "(1)"
-       line 417, "pan.___", state 843, "(1)"
-       line 417, "pan.___", state 843, "(1)"
-       line 419, "pan.___", state 846, "(1)"
-       line 419, "pan.___", state 846, "(1)"
-       line 361, "pan.___", state 855, "sighand_exec = 1"
-       line 402, "pan.___", state 886, "(1)"
-       line 407, "pan.___", state 902, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 945, "(1)"
-       line 402, "pan.___", state 983, "(1)"
-       line 407, "pan.___", state 999, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1042, "(1)"
-       line 398, "pan.___", state 1068, "(1)"
-       line 402, "pan.___", state 1082, "(1)"
-       line 407, "pan.___", state 1098, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1141, "(1)"
-       line 402, "pan.___", state 1182, "(1)"
-       line 407, "pan.___", state 1198, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1241, "(1)"
-       line 174, "pan.___", state 1262, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1264, "(1)"
-       line 178, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1273, "(1)"
-       line 178, "pan.___", state 1274, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1274, "else"
-       line 176, "pan.___", state 1279, "((j<1))"
-       line 176, "pan.___", state 1279, "((j>=1))"
-       line 182, "pan.___", state 1284, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1286, "(1)"
-       line 182, "pan.___", state 1287, "((cache_dirty_generation_ptr.bitfield&(1<<0)))"
-       line 182, "pan.___", state 1287, "else"
-       line 174, "pan.___", state 1297, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 1299, "(1)"
-       line 178, "pan.___", state 1306, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1308, "(1)"
-       line 178, "pan.___", state 1309, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 1309, "else"
-       line 176, "pan.___", state 1314, "((j<1))"
-       line 176, "pan.___", state 1314, "((j>=1))"
-       line 182, "pan.___", state 1319, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1321, "(1)"
-       line 182, "pan.___", state 1322, "((cache_dirty_generation_ptr.bitfield&(1<<i)))"
-       line 182, "pan.___", state 1322, "else"
-       line 192, "pan.___", state 1327, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 192, "pan.___", state 1327, "else"
-       line 213, "pan.___", state 1331, "((i<1))"
-       line 213, "pan.___", state 1331, "((i>=1))"
-       line 174, "pan.___", state 1336, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1338, "(1)"
-       line 178, "pan.___", state 1345, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1347, "(1)"
-       line 178, "pan.___", state 1348, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1348, "else"
-       line 176, "pan.___", state 1353, "((j<1))"
-       line 176, "pan.___", state 1353, "((j>=1))"
-       line 182, "pan.___", state 1358, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1360, "(1)"
-       line 182, "pan.___", state 1361, "((cache_dirty_generation_ptr.bitfield&(1<<0)))"
-       line 182, "pan.___", state 1361, "else"
-       line 192, "pan.___", state 1366, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 192, "pan.___", state 1366, "else"
-       line 220, "pan.___", state 1367, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 1367, "else"
-       line 355, "pan.___", state 1373, "((sighand_exec==1))"
-       line 355, "pan.___", state 1373, "else"
-       line 361, "pan.___", state 1376, "sighand_exec = 1"
-       line 398, "pan.___", state 1389, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 1391, "(1)"
-       line 398, "pan.___", state 1392, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 1392, "else"
-       line 398, "pan.___", state 1395, "(1)"
-       line 402, "pan.___", state 1403, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 1405, "(1)"
-       line 402, "pan.___", state 1406, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 1406, "else"
-       line 402, "pan.___", state 1409, "(1)"
-       line 402, "pan.___", state 1410, "(1)"
-       line 402, "pan.___", state 1410, "(1)"
-       line 400, "pan.___", state 1415, "((i<1))"
-       line 400, "pan.___", state 1415, "((i>=1))"
-       line 407, "pan.___", state 1421, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 1434, "(1)"
-       line 408, "pan.___", state 1435, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 1435, "else"
-       line 408, "pan.___", state 1438, "(1)"
-       line 408, "pan.___", state 1439, "(1)"
-       line 408, "pan.___", state 1439, "(1)"
-       line 412, "pan.___", state 1447, "(1)"
-       line 412, "pan.___", state 1448, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 1448, "else"
-       line 412, "pan.___", state 1451, "(1)"
-       line 412, "pan.___", state 1452, "(1)"
-       line 412, "pan.___", state 1452, "(1)"
-       line 410, "pan.___", state 1457, "((i<1))"
-       line 410, "pan.___", state 1457, "((i>=1))"
-       line 417, "pan.___", state 1464, "(1)"
-       line 417, "pan.___", state 1465, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1465, "else"
-       line 417, "pan.___", state 1468, "(1)"
-       line 417, "pan.___", state 1469, "(1)"
-       line 417, "pan.___", state 1469, "(1)"
-       line 419, "pan.___", state 1472, "(1)"
-       line 419, "pan.___", state 1472, "(1)"
-       line 361, "pan.___", state 1481, "sighand_exec = 1"
-       line 178, "pan.___", state 1506, "(1)"
-       line 182, "pan.___", state 1517, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1530, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1539, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1552, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 1569, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1591, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 701, "pan.___", state 1632, "-end-"
-       (167 of 1632 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 747, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 0.15 seconds
-pan: rate 134306.67 states/second
-pan: avg transition delay 7.0835e-07 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 525bc1e..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define NO_RMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 8219815..0000000
+++ /dev/null
@@ -1,1805 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2905
-2:4:2857
-3:4:2860
-4:4:2860
-5:4:2863
-6:4:2871
-7:4:2871
-8:4:2874
-9:4:2880
-10:4:2884
-11:4:2884
-12:4:2887
-13:4:2895
-14:4:2899
-15:4:2900
-16:0:2905
-17:4:2902
-18:0:2905
-19:3:1319
-20:0:2905
-21:3:1325
-22:0:2905
-23:3:1326
-24:0:2905
-25:3:1327
-26:3:1331
-27:3:1332
-28:3:1340
-29:3:1341
-30:3:1345
-31:3:1346
-32:3:1354
-33:3:1359
-34:3:1363
-35:3:1364
-36:3:1371
-37:3:1372
-38:3:1383
-39:3:1384
-40:3:1385
-41:3:1396
-42:3:1401
-43:3:1402
-44:0:2905
-45:3:1414
-46:0:2905
-47:3:1416
-48:3:1417
-49:0:2905
-50:3:1421
-51:3:1425
-52:3:1426
-53:3:1434
-54:3:1435
-55:3:1439
-56:3:1440
-57:3:1448
-58:3:1453
-59:3:1454
-60:3:1465
-61:3:1466
-62:3:1477
-63:3:1478
-64:3:1479
-65:3:1490
-66:3:1495
-67:3:1496
-68:0:2905
-69:3:1508
-70:0:2905
-71:3:1510
-72:0:2905
-73:3:1511
-74:0:2905
-75:3:1521
-76:0:2905
-77:3:1522
-78:0:2905
-79:3:1526
-80:3:1527
-81:3:1531
-82:3:1535
-83:3:1536
-84:3:1540
-85:3:1548
-86:3:1549
-87:0:2905
-88:3:1557
-89:0:2905
-90:3:1561
-91:3:1562
-92:3:1566
-93:3:1570
-94:3:1571
-95:3:1575
-96:3:1583
-97:3:1584
-98:0:2905
-99:3:1592
-100:0:2905
-101:3:1600
-102:3:1601
-103:3:1605
-104:3:1609
-105:3:1610
-106:3:1614
-107:3:1622
-108:3:1623
-109:0:2905
-110:3:1635
-111:0:2905
-112:3:1637
-113:0:2905
-114:3:1638
-115:3:1642
-116:3:1643
-117:3:1651
-118:3:1652
-119:3:1656
-120:3:1657
-121:3:1665
-122:3:1670
-123:3:1674
-124:3:1675
-125:3:1682
-126:3:1683
-127:3:1694
-128:3:1695
-129:3:1696
-130:3:1707
-131:3:1712
-132:3:1713
-133:0:2905
-134:3:1725
-135:0:2905
-136:3:1727
-137:0:2905
-138:3:1730
-139:3:1731
-140:3:1743
-141:3:1744
-142:3:1748
-143:3:1749
-144:3:1757
-145:3:1762
-146:3:1766
-147:3:1767
-148:3:1774
-149:3:1775
-150:3:1786
-151:3:1787
-152:3:1788
-153:3:1799
-154:3:1804
-155:3:1805
-156:0:2905
-157:3:1817
-158:0:2905
-159:3:1819
-160:0:2905
-161:3:1820
-162:0:2905
-163:3:1821
-164:0:2905
-165:3:1822
-166:0:2905
-167:3:1823
-168:3:1827
-169:3:1828
-170:3:1836
-171:3:1837
-172:3:1841
-173:3:1842
-174:3:1850
-175:3:1855
-176:3:1859
-177:3:1860
-178:3:1867
-179:3:1868
-180:3:1879
-181:3:1880
-182:3:1881
-183:3:1892
-184:3:1897
-185:3:1898
-186:0:2905
-187:3:1910
-188:0:2905
-189:3:2028
-190:0:2905
-191:3:2126
-192:0:2905
-193:3:2127
-194:0:2905
-195:3:2131
-196:0:2905
-197:3:2137
-198:3:2141
-199:3:2142
-200:3:2150
-201:3:2151
-202:3:2155
-203:3:2156
-204:3:2164
-205:3:2169
-206:3:2173
-207:3:2174
-208:3:2181
-209:3:2182
-210:3:2193
-211:3:2194
-212:3:2195
-213:3:2206
-214:3:2211
-215:3:2212
-216:0:2905
-217:3:2224
-218:0:2905
-219:3:2226
-220:0:2905
-221:3:2227
-222:3:2231
-223:3:2232
-224:3:2240
-225:3:2241
-226:3:2245
-227:3:2246
-228:3:2254
-229:3:2259
-230:3:2263
-231:3:2264
-232:3:2271
-233:3:2272
-234:3:2283
-235:3:2284
-236:3:2285
-237:3:2296
-238:3:2301
-239:3:2302
-240:0:2905
-241:3:2314
-242:0:2905
-243:3:2316
-244:0:2905
-245:3:2319
-246:3:2320
-247:3:2332
-248:3:2333
-249:3:2337
-250:3:2338
-251:3:2346
-252:3:2351
-253:3:2355
-254:3:2356
-255:3:2363
-256:3:2364
-257:3:2375
-258:3:2376
-259:3:2377
-260:3:2388
-261:3:2393
-262:3:2394
-263:0:2905
-264:3:2406
-265:0:2905
-266:3:2408
-267:0:2905
-268:3:2409
-269:0:2905
-270:3:2410
-271:0:2905
-272:3:2411
-273:0:2905
-274:3:2412
-275:3:2416
-276:3:2417
-277:3:2425
-278:3:2426
-279:3:2430
-280:3:2431
-281:3:2439
-282:3:2444
-283:3:2448
-284:3:2449
-285:3:2456
-286:3:2457
-287:3:2468
-288:3:2469
-289:3:2470
-290:3:2481
-291:3:2486
-292:3:2487
-293:0:2905
-294:3:2499
-295:0:2905
-296:3:2617
-297:0:2905
-298:3:2715
-299:0:2905
-300:3:2716
-301:0:2905
-302:3:2720
-303:0:2905
-304:3:2726
-305:0:2905
-306:3:2730
-307:3:2731
-308:3:2735
-309:3:2739
-310:3:2740
-311:3:2744
-312:3:2752
-313:3:2753
-314:0:2905
-315:3:2761
-316:0:2905
-317:3:2765
-318:3:2766
-319:3:2770
-320:3:2774
-321:3:2775
-322:3:2779
-323:3:2787
-324:3:2788
-325:0:2905
-326:3:2796
-327:0:2905
-328:3:2804
-329:3:2805
-330:3:2809
-331:3:2813
-332:3:2814
-333:3:2818
-334:3:2826
-335:3:2827
-336:0:2905
-337:3:2839
-338:0:2905
-339:3:2841
-340:0:2905
-341:3:2842
-342:0:2905
-343:3:1326
-344:0:2905
-345:3:1327
-346:3:1331
-347:3:1332
-348:3:1340
-349:3:1341
-350:3:1345
-351:3:1346
-352:3:1354
-353:3:1359
-354:3:1363
-355:3:1364
-356:3:1371
-357:3:1372
-358:3:1383
-359:3:1384
-360:3:1385
-361:3:1396
-362:3:1401
-363:3:1402
-364:0:2905
-365:3:1414
-366:0:2905
-367:3:1416
-368:3:1417
-369:0:2905
-370:3:1421
-371:3:1425
-372:3:1426
-373:3:1434
-374:3:1435
-375:3:1439
-376:3:1440
-377:3:1448
-378:3:1453
-379:3:1454
-380:3:1465
-381:3:1466
-382:3:1477
-383:3:1478
-384:3:1479
-385:3:1490
-386:3:1495
-387:3:1496
-388:0:2905
-389:3:1508
-390:0:2905
-391:3:1510
-392:0:2905
-393:3:1511
-394:0:2905
-395:3:1521
-396:0:2905
-397:3:1522
-398:0:2905
-399:3:1526
-400:3:1527
-401:3:1531
-402:3:1535
-403:3:1536
-404:3:1540
-405:3:1548
-406:3:1549
-407:0:2905
-408:3:1557
-409:0:2905
-410:3:1561
-411:3:1562
-412:3:1566
-413:3:1570
-414:3:1571
-415:3:1575
-416:3:1583
-417:3:1584
-418:0:2905
-419:3:1592
-420:0:2905
-421:3:1600
-422:3:1601
-423:3:1605
-424:3:1609
-425:3:1610
-426:3:1614
-427:3:1622
-428:3:1623
-429:0:2905
-430:3:1635
-431:0:2905
-432:3:1637
-433:0:2905
-434:3:1638
-435:3:1642
-436:3:1643
-437:3:1651
-438:3:1652
-439:3:1656
-440:3:1657
-441:3:1665
-442:3:1670
-443:3:1674
-444:3:1675
-445:3:1682
-446:3:1683
-447:3:1694
-448:3:1695
-449:3:1696
-450:3:1707
-451:3:1712
-452:3:1713
-453:0:2905
-454:3:1725
-455:0:2905
-456:3:1727
-457:0:2905
-458:3:1730
-459:3:1731
-460:3:1743
-461:3:1744
-462:3:1748
-463:3:1749
-464:3:1757
-465:3:1762
-466:3:1766
-467:3:1767
-468:3:1774
-469:3:1775
-470:3:1786
-471:3:1787
-472:3:1788
-473:3:1799
-474:3:1804
-475:3:1805
-476:0:2905
-477:3:1817
-478:0:2905
-479:3:1819
-480:0:2905
-481:3:1820
-482:0:2905
-483:3:1821
-484:0:2905
-485:3:1822
-486:0:2905
-487:3:1823
-488:3:1827
-489:3:1828
-490:3:1836
-491:3:1837
-492:3:1841
-493:3:1842
-494:3:1850
-495:3:1855
-496:3:1859
-497:3:1860
-498:3:1867
-499:3:1868
-500:3:1879
-501:3:1880
-502:3:1881
-503:3:1892
-504:3:1897
-505:3:1898
-506:0:2905
-507:3:1910
-508:0:2905
-509:3:2028
-510:0:2905
-511:3:2126
-512:0:2905
-513:3:2127
-514:0:2905
-515:3:2131
-516:0:2905
-517:3:2137
-518:3:2141
-519:3:2142
-520:3:2150
-521:3:2151
-522:3:2155
-523:3:2156
-524:3:2164
-525:3:2169
-526:3:2173
-527:3:2174
-528:3:2181
-529:3:2182
-530:3:2193
-531:3:2194
-532:3:2195
-533:3:2206
-534:3:2211
-535:3:2212
-536:0:2905
-537:3:2224
-538:0:2905
-539:3:2226
-540:0:2905
-541:3:2227
-542:3:2231
-543:3:2232
-544:3:2240
-545:3:2241
-546:3:2245
-547:3:2246
-548:3:2254
-549:3:2259
-550:3:2263
-551:3:2264
-552:3:2271
-553:3:2272
-554:3:2283
-555:3:2284
-556:3:2285
-557:3:2296
-558:3:2301
-559:3:2302
-560:0:2905
-561:3:2314
-562:0:2905
-563:3:2316
-564:0:2905
-565:3:2319
-566:3:2320
-567:3:2332
-568:3:2333
-569:3:2337
-570:3:2338
-571:3:2346
-572:3:2351
-573:3:2355
-574:3:2356
-575:3:2363
-576:3:2364
-577:3:2375
-578:3:2376
-579:3:2377
-580:3:2388
-581:3:2393
-582:3:2394
-583:0:2905
-584:3:2406
-585:0:2905
-586:3:2408
-587:0:2905
-588:3:2409
-589:0:2905
-590:3:2410
-591:0:2905
-592:3:2411
-593:0:2905
-594:3:2412
-595:3:2416
-596:3:2417
-597:3:2425
-598:3:2426
-599:3:2430
-600:3:2431
-601:3:2439
-602:3:2444
-603:3:2448
-604:3:2449
-605:3:2456
-606:3:2457
-607:3:2468
-608:3:2469
-609:3:2470
-610:3:2481
-611:3:2486
-612:3:2487
-613:0:2905
-614:3:2499
-615:0:2905
-616:3:2617
-617:0:2905
-618:3:2715
-619:0:2905
-620:3:2716
-621:0:2905
-622:3:2720
-623:0:2905
-624:3:2726
-625:0:2905
-626:3:2730
-627:3:2731
-628:3:2735
-629:3:2739
-630:3:2740
-631:3:2744
-632:3:2752
-633:3:2753
-634:0:2905
-635:3:2761
-636:0:2905
-637:3:2765
-638:3:2766
-639:3:2770
-640:3:2774
-641:3:2775
-642:3:2779
-643:3:2787
-644:3:2788
-645:0:2905
-646:3:2796
-647:0:2905
-648:3:2804
-649:3:2805
-650:3:2809
-651:3:2813
-652:3:2814
-653:3:2818
-654:3:2826
-655:3:2827
-656:0:2905
-657:3:2839
-658:0:2905
-659:3:2841
-660:0:2905
-661:3:2842
-662:0:2905
-663:3:1326
-664:0:2905
-665:3:1327
-666:3:1331
-667:3:1332
-668:3:1340
-669:3:1341
-670:3:1345
-671:3:1346
-672:3:1354
-673:3:1359
-674:3:1363
-675:3:1364
-676:3:1371
-677:3:1372
-678:3:1383
-679:3:1384
-680:3:1385
-681:3:1396
-682:3:1401
-683:3:1402
-684:0:2905
-685:3:1414
-686:0:2905
-687:3:1416
-688:3:1417
-689:0:2905
-690:3:1421
-691:3:1425
-692:3:1426
-693:3:1434
-694:3:1435
-695:3:1439
-696:3:1440
-697:3:1448
-698:3:1453
-699:3:1454
-700:3:1465
-701:3:1466
-702:3:1477
-703:3:1478
-704:3:1479
-705:3:1490
-706:3:1495
-707:3:1496
-708:0:2905
-709:3:1508
-710:0:2905
-711:3:1510
-712:0:2905
-713:3:1511
-714:0:2905
-715:3:1521
-716:0:2905
-717:3:1522
-718:0:2905
-719:3:1526
-720:3:1527
-721:3:1531
-722:3:1535
-723:3:1536
-724:3:1540
-725:3:1548
-726:3:1549
-727:0:2905
-728:3:1557
-729:0:2905
-730:3:1561
-731:3:1562
-732:3:1566
-733:3:1570
-734:3:1571
-735:3:1575
-736:3:1583
-737:3:1584
-738:0:2905
-739:3:1592
-740:0:2905
-741:3:1600
-742:3:1601
-743:3:1605
-744:3:1609
-745:3:1610
-746:3:1614
-747:3:1622
-748:3:1623
-749:0:2905
-750:3:1635
-751:0:2905
-752:3:1637
-753:0:2905
-754:3:1638
-755:3:1642
-756:3:1643
-757:3:1651
-758:3:1652
-759:3:1656
-760:3:1657
-761:3:1665
-762:3:1670
-763:3:1674
-764:3:1675
-765:3:1682
-766:3:1683
-767:3:1694
-768:3:1695
-769:3:1696
-770:3:1707
-771:3:1712
-772:3:1713
-773:0:2905
-774:3:1725
-775:0:2905
-776:3:1727
-777:0:2905
-778:3:1730
-779:3:1731
-780:3:1743
-781:3:1744
-782:3:1748
-783:3:1749
-784:3:1757
-785:3:1762
-786:3:1766
-787:3:1767
-788:3:1774
-789:3:1775
-790:3:1786
-791:3:1787
-792:3:1788
-793:3:1799
-794:3:1804
-795:3:1805
-796:0:2905
-797:3:1817
-798:0:2905
-799:3:1819
-800:0:2905
-801:3:1820
-802:0:2905
-803:3:1821
-804:0:2905
-805:3:1822
-806:0:2905
-807:3:1823
-808:3:1827
-809:3:1828
-810:3:1836
-811:3:1837
-812:3:1841
-813:3:1842
-814:3:1850
-815:3:1855
-816:3:1859
-817:3:1860
-818:3:1867
-819:3:1868
-820:3:1879
-821:3:1880
-822:3:1881
-823:3:1892
-824:3:1897
-825:3:1898
-826:0:2905
-827:3:1910
-828:0:2905
-829:3:2028
-830:0:2905
-831:3:2126
-832:0:2905
-833:3:2127
-834:0:2905
-835:3:2131
-836:0:2905
-837:3:2137
-838:3:2141
-839:3:2142
-840:3:2150
-841:3:2151
-842:3:2155
-843:3:2156
-844:3:2164
-845:3:2169
-846:3:2173
-847:3:2174
-848:3:2181
-849:3:2182
-850:3:2193
-851:3:2194
-852:3:2195
-853:3:2206
-854:3:2211
-855:3:2212
-856:0:2905
-857:3:2224
-858:0:2905
-859:3:2226
-860:0:2905
-861:3:2227
-862:3:2231
-863:3:2232
-864:3:2240
-865:3:2241
-866:3:2245
-867:3:2246
-868:3:2254
-869:3:2259
-870:3:2263
-871:3:2264
-872:3:2271
-873:3:2272
-874:3:2283
-875:3:2284
-876:3:2285
-877:3:2296
-878:3:2301
-879:3:2302
-880:0:2905
-881:3:2314
-882:0:2905
-883:3:2316
-884:0:2905
-885:3:2319
-886:3:2320
-887:3:2332
-888:3:2333
-889:3:2337
-890:3:2338
-891:3:2346
-892:3:2351
-893:3:2355
-894:3:2356
-895:3:2363
-896:3:2364
-897:3:2375
-898:3:2376
-899:3:2377
-900:3:2388
-901:3:2393
-902:3:2394
-903:0:2905
-904:3:2406
-905:0:2905
-906:3:2408
-907:0:2905
-908:3:2409
-909:0:2905
-910:3:2410
-911:0:2905
-912:3:2411
-913:0:2905
-914:3:2412
-915:3:2416
-916:3:2417
-917:3:2425
-918:3:2426
-919:3:2430
-920:3:2431
-921:3:2439
-922:3:2444
-923:3:2448
-924:3:2449
-925:3:2456
-926:3:2457
-927:3:2468
-928:3:2469
-929:3:2470
-930:3:2481
-931:3:2486
-932:3:2487
-933:0:2905
-934:3:2499
-935:0:2905
-936:3:2617
-937:0:2905
-938:3:2715
-939:0:2905
-940:3:2716
-941:0:2905
-942:3:2720
-943:0:2905
-944:3:2726
-945:0:2905
-946:3:2730
-947:3:2731
-948:3:2735
-949:3:2739
-950:3:2740
-951:3:2744
-952:3:2752
-953:3:2753
-954:0:2905
-955:3:2761
-956:0:2905
-957:3:2765
-958:3:2766
-959:3:2770
-960:3:2774
-961:3:2775
-962:3:2779
-963:3:2787
-964:3:2788
-965:0:2905
-966:3:2796
-967:0:2905
-968:3:2804
-969:3:2805
-970:3:2809
-971:3:2813
-972:3:2814
-973:3:2818
-974:3:2826
-975:3:2827
-976:0:2905
-977:3:2839
-978:0:2905
-979:3:2841
-980:0:2905
-981:3:2842
-982:0:2905
-983:3:1326
-984:0:2905
-985:3:1327
-986:3:1331
-987:3:1332
-988:3:1340
-989:3:1341
-990:3:1345
-991:3:1346
-992:3:1354
-993:3:1359
-994:3:1363
-995:3:1364
-996:3:1371
-997:3:1372
-998:3:1383
-999:3:1384
-1000:3:1385
-1001:3:1396
-1002:3:1401
-1003:3:1402
-1004:0:2905
-1005:3:1414
-1006:0:2905
-1007:3:1416
-1008:3:1417
-1009:0:2905
-1010:3:1421
-1011:3:1425
-1012:3:1426
-1013:3:1434
-1014:3:1435
-1015:3:1439
-1016:3:1440
-1017:3:1448
-1018:3:1453
-1019:3:1454
-1020:3:1465
-1021:3:1466
-1022:3:1477
-1023:3:1478
-1024:3:1479
-1025:3:1490
-1026:3:1495
-1027:3:1496
-1028:0:2905
-1029:3:1508
-1030:0:2905
-1031:3:1510
-1032:0:2905
-1033:3:1511
-1034:0:2905
-1035:3:1521
-1036:0:2905
-1037:3:1522
-1038:0:2905
-1039:3:1526
-1040:3:1527
-1041:3:1531
-1042:3:1535
-1043:3:1536
-1044:3:1540
-1045:3:1548
-1046:3:1549
-1047:0:2905
-1048:3:1557
-1049:0:2905
-1050:3:1561
-1051:3:1562
-1052:3:1566
-1053:3:1570
-1054:3:1571
-1055:3:1575
-1056:3:1583
-1057:3:1584
-1058:0:2905
-1059:3:1592
-1060:0:2905
-1061:3:1600
-1062:3:1601
-1063:3:1605
-1064:3:1609
-1065:3:1610
-1066:3:1614
-1067:3:1622
-1068:3:1623
-1069:0:2905
-1070:3:1635
-1071:0:2905
-1072:3:1637
-1073:0:2905
-1074:3:1638
-1075:3:1642
-1076:3:1643
-1077:3:1651
-1078:3:1652
-1079:3:1656
-1080:3:1657
-1081:3:1665
-1082:3:1670
-1083:3:1674
-1084:3:1675
-1085:3:1682
-1086:3:1683
-1087:3:1694
-1088:3:1695
-1089:3:1696
-1090:3:1707
-1091:3:1712
-1092:3:1713
-1093:0:2905
-1094:3:1725
-1095:0:2905
-1096:3:1727
-1097:0:2905
-1098:3:1730
-1099:3:1731
-1100:3:1743
-1101:3:1744
-1102:3:1748
-1103:3:1749
-1104:3:1757
-1105:3:1762
-1106:3:1766
-1107:3:1767
-1108:3:1774
-1109:3:1775
-1110:3:1786
-1111:3:1787
-1112:3:1788
-1113:3:1799
-1114:3:1804
-1115:3:1805
-1116:0:2905
-1117:3:1817
-1118:0:2905
-1119:3:1819
-1120:0:2905
-1121:3:1820
-1122:0:2905
-1123:3:1821
-1124:0:2905
-1125:3:1822
-1126:0:2905
-1127:3:1823
-1128:3:1827
-1129:3:1828
-1130:3:1836
-1131:3:1837
-1132:3:1841
-1133:3:1842
-1134:3:1850
-1135:3:1855
-1136:3:1859
-1137:3:1860
-1138:3:1867
-1139:3:1868
-1140:3:1879
-1141:3:1880
-1142:3:1881
-1143:3:1892
-1144:3:1897
-1145:3:1898
-1146:0:2905
-1147:3:1910
-1148:0:2905
-1149:3:2028
-1150:0:2905
-1151:3:2126
-1152:0:2905
-1153:3:2127
-1154:0:2905
-1155:3:2131
-1156:0:2905
-1157:3:2137
-1158:3:2141
-1159:3:2142
-1160:3:2150
-1161:3:2151
-1162:3:2155
-1163:3:2156
-1164:3:2164
-1165:3:2169
-1166:3:2173
-1167:3:2174
-1168:3:2181
-1169:3:2182
-1170:3:2193
-1171:3:2194
-1172:3:2195
-1173:3:2206
-1174:3:2211
-1175:3:2212
-1176:0:2905
-1177:3:2224
-1178:0:2905
-1179:3:2226
-1180:0:2905
-1181:3:2227
-1182:3:2231
-1183:3:2232
-1184:3:2240
-1185:3:2241
-1186:3:2245
-1187:3:2246
-1188:3:2254
-1189:3:2259
-1190:3:2263
-1191:3:2264
-1192:3:2271
-1193:3:2272
-1194:3:2283
-1195:3:2284
-1196:3:2285
-1197:3:2296
-1198:3:2301
-1199:3:2302
-1200:0:2905
-1201:3:2314
-1202:0:2905
-1203:3:2316
-1204:0:2905
-1205:3:2319
-1206:3:2320
-1207:3:2332
-1208:3:2333
-1209:3:2337
-1210:3:2338
-1211:3:2346
-1212:3:2351
-1213:3:2355
-1214:3:2356
-1215:3:2363
-1216:3:2364
-1217:3:2375
-1218:3:2376
-1219:3:2377
-1220:3:2388
-1221:3:2393
-1222:3:2394
-1223:0:2905
-1224:3:2406
-1225:0:2905
-1226:3:2408
-1227:0:2905
-1228:3:2409
-1229:0:2905
-1230:3:2410
-1231:0:2905
-1232:3:2411
-1233:0:2905
-1234:3:2412
-1235:3:2416
-1236:3:2417
-1237:3:2425
-1238:3:2426
-1239:3:2430
-1240:3:2431
-1241:3:2439
-1242:3:2444
-1243:3:2448
-1244:3:2449
-1245:3:2456
-1246:3:2457
-1247:3:2468
-1248:3:2469
-1249:3:2470
-1250:3:2481
-1251:3:2486
-1252:3:2487
-1253:0:2905
-1254:3:2499
-1255:0:2905
-1256:3:2617
-1257:0:2905
-1258:3:2715
-1259:0:2905
-1260:3:2716
-1261:0:2905
-1262:3:2720
-1263:0:2905
-1264:3:2726
-1265:0:2905
-1266:3:2730
-1267:3:2731
-1268:3:2735
-1269:3:2739
-1270:3:2740
-1271:3:2744
-1272:3:2752
-1273:3:2753
-1274:0:2905
-1275:3:2761
-1276:0:2905
-1277:3:2765
-1278:3:2766
-1279:3:2770
-1280:3:2774
-1281:3:2775
-1282:3:2779
-1283:3:2787
-1284:3:2788
-1285:0:2905
-1286:3:2796
-1287:0:2905
-1288:3:2804
-1289:3:2805
-1290:3:2809
-1291:3:2813
-1292:3:2814
-1293:3:2818
-1294:3:2826
-1295:3:2827
-1296:0:2905
-1297:3:2839
-1298:0:2905
-1299:3:2841
-1300:0:2905
-1301:3:2842
-1302:0:2905
-1303:3:1326
-1304:0:2905
-1305:3:1327
-1306:3:1331
-1307:3:1332
-1308:3:1340
-1309:3:1341
-1310:3:1345
-1311:3:1346
-1312:3:1354
-1313:3:1359
-1314:3:1363
-1315:3:1364
-1316:3:1371
-1317:3:1372
-1318:3:1383
-1319:3:1384
-1320:3:1385
-1321:3:1396
-1322:3:1401
-1323:3:1402
-1324:0:2905
-1325:3:1414
-1326:0:2905
-1327:3:1416
-1328:3:1417
-1329:0:2905
-1330:3:1421
-1331:3:1425
-1332:3:1426
-1333:3:1434
-1334:3:1435
-1335:3:1439
-1336:3:1440
-1337:3:1448
-1338:3:1461
-1339:3:1462
-1340:3:1465
-1341:3:1466
-1342:3:1477
-1343:3:1478
-1344:3:1479
-1345:3:1490
-1346:3:1495
-1347:3:1498
-1348:3:1499
-1349:0:2905
-1350:3:1508
-1351:0:2905
-1352:3:1510
-1353:0:2905
-1354:3:1511
-1355:0:2905
-1356:3:1521
-1357:0:2905
-1358:3:1522
-1359:0:2905
-1360:2:680
-1361:0:2905
-1362:2:686
-1363:0:2905
-1364:2:687
-1365:0:2905
-1366:2:688
-1367:0:2905
-1368:2:689
-1369:0:2905
-1370:1:2
-1371:0:2905
-1372:2:690
-1373:0:2905
-1374:1:8
-1375:0:2905
-1376:1:9
-1377:0:2905
-1378:1:10
-1379:0:2905
-1380:1:11
-1381:0:2905
-1382:2:689
-1383:0:2905
-1384:1:12
-1385:1:16
-1386:1:17
-1387:1:25
-1388:1:26
-1389:1:30
-1390:1:31
-1391:1:39
-1392:1:44
-1393:1:48
-1394:1:49
-1395:1:56
-1396:1:57
-1397:1:68
-1398:1:69
-1399:1:70
-1400:1:81
-1401:1:86
-1402:1:87
-1403:0:2905
-1404:2:690
-1405:0:2905
-1406:3:1526
-1407:3:1527
-1408:3:1531
-1409:3:1535
-1410:3:1536
-1411:3:1540
-1412:3:1545
-1413:0:2905
-1414:3:1557
-1415:0:2905
-1416:3:1561
-1417:3:1562
-1418:3:1566
-1419:3:1570
-1420:3:1571
-1421:3:1575
-1422:3:1583
-1423:3:1584
-1424:0:2905
-1425:3:1592
-1426:0:2905
-1427:3:1600
-1428:3:1601
-1429:3:1605
-1430:3:1609
-1431:3:1610
-1432:3:1614
-1433:3:1622
-1434:3:1623
-1435:0:2905
-1436:3:1635
-1437:0:2905
-1438:3:1637
-1439:0:2905
-1440:3:1638
-1441:3:1642
-1442:3:1643
-1443:3:1651
-1444:3:1652
-1445:3:1656
-1446:3:1657
-1447:3:1665
-1448:3:1670
-1449:3:1674
-1450:3:1675
-1451:3:1682
-1452:3:1683
-1453:3:1694
-1454:3:1695
-1455:3:1696
-1456:3:1707
-1457:3:1712
-1458:3:1713
-1459:0:2905
-1460:3:1725
-1461:0:2905
-1462:3:1727
-1463:0:2905
-1464:3:1730
-1465:3:1731
-1466:3:1743
-1467:3:1744
-1468:3:1748
-1469:3:1749
-1470:3:1757
-1471:3:1762
-1472:3:1766
-1473:3:1767
-1474:3:1774
-1475:3:1775
-1476:3:1786
-1477:3:1787
-1478:3:1788
-1479:3:1799
-1480:3:1804
-1481:3:1805
-1482:0:2905
-1483:3:1817
-1484:0:2905
-1485:3:1819
-1486:0:2905
-1487:3:1820
-1488:0:2905
-1489:3:1821
-1490:0:2905
-1491:3:1822
-1492:0:2905
-1493:3:1823
-1494:3:1827
-1495:3:1828
-1496:3:1836
-1497:3:1837
-1498:3:1841
-1499:3:1842
-1500:3:1850
-1501:3:1855
-1502:3:1859
-1503:3:1860
-1504:3:1867
-1505:3:1868
-1506:3:1879
-1507:3:1880
-1508:3:1881
-1509:3:1892
-1510:3:1897
-1511:3:1898
-1512:0:2905
-1513:3:1910
-1514:0:2905
-1515:3:2028
-1516:0:2905
-1517:3:2126
-1518:0:2905
-1519:3:2127
-1520:0:2905
-1521:3:2131
-1522:0:2905
-1523:3:2137
-1524:3:2141
-1525:3:2142
-1526:3:2150
-1527:3:2151
-1528:3:2155
-1529:3:2156
-1530:3:2164
-1531:3:2169
-1532:3:2173
-1533:3:2174
-1534:3:2181
-1535:3:2182
-1536:3:2193
-1537:3:2194
-1538:3:2195
-1539:3:2206
-1540:3:2211
-1541:3:2212
-1542:0:2905
-1543:3:2224
-1544:0:2905
-1545:3:2226
-1546:0:2905
-1547:3:2227
-1548:3:2231
-1549:3:2232
-1550:3:2240
-1551:3:2241
-1552:3:2245
-1553:3:2246
-1554:3:2254
-1555:3:2259
-1556:3:2263
-1557:3:2264
-1558:3:2271
-1559:3:2272
-1560:3:2283
-1561:3:2284
-1562:3:2285
-1563:3:2296
-1564:3:2301
-1565:3:2302
-1566:0:2905
-1567:3:2314
-1568:0:2905
-1569:3:2316
-1570:0:2905
-1571:3:2319
-1572:3:2320
-1573:3:2332
-1574:3:2333
-1575:3:2337
-1576:3:2338
-1577:3:2346
-1578:3:2351
-1579:3:2355
-1580:3:2356
-1581:3:2363
-1582:3:2364
-1583:3:2375
-1584:3:2376
-1585:3:2377
-1586:3:2388
-1587:3:2393
-1588:3:2394
-1589:0:2905
-1590:3:2406
-1591:0:2905
-1592:3:2408
-1593:0:2905
-1594:3:2409
-1595:0:2905
-1596:3:2410
-1597:0:2905
-1598:3:2411
-1599:0:2905
-1600:3:2412
-1601:3:2416
-1602:3:2417
-1603:3:2425
-1604:3:2426
-1605:3:2430
-1606:3:2431
-1607:3:2439
-1608:3:2444
-1609:3:2448
-1610:3:2449
-1611:3:2456
-1612:3:2457
-1613:3:2468
-1614:3:2469
-1615:3:2470
-1616:3:2481
-1617:3:2486
-1618:3:2487
-1619:0:2905
-1620:3:2499
-1621:0:2905
-1622:3:2617
-1623:0:2905
-1624:3:2715
-1625:0:2905
-1626:3:2716
-1627:0:2905
-1628:3:2720
-1629:0:2905
-1630:3:2726
-1631:0:2905
-1632:3:2730
-1633:3:2731
-1634:3:2735
-1635:3:2739
-1636:3:2740
-1637:3:2744
-1638:3:2752
-1639:3:2753
-1640:0:2905
-1641:3:2761
-1642:0:2905
-1643:3:2765
-1644:3:2766
-1645:3:2770
-1646:3:2774
-1647:3:2775
-1648:3:2779
-1649:3:2787
-1650:3:2788
-1651:0:2905
-1652:3:2796
-1653:0:2905
-1654:3:2804
-1655:3:2805
-1656:3:2809
-1657:3:2813
-1658:3:2814
-1659:3:2818
-1660:3:2826
-1661:3:2827
-1662:0:2905
-1663:3:2839
-1664:0:2905
-1665:3:2841
-1666:0:2905
-1667:3:2842
-1668:0:2905
-1669:3:2845
-1670:0:2905
-1671:3:2850
-1672:0:2905
-1673:2:689
-1674:0:2905
-1675:3:2851
-1676:0:2905
-1677:1:99
-1678:0:2905
-1679:3:2850
-1680:0:2905
-1681:2:690
-1682:0:2905
-1683:3:2851
-1684:0:2905
-1685:2:691
-1686:0:2905
-1687:3:2850
-1688:0:2905
-1689:2:692
-1690:0:2905
-1691:3:2851
-1692:0:2905
-1693:2:703
-1694:0:2905
-1695:3:2850
-1696:0:2905
-1697:2:704
-1698:0:2905
-1699:3:2851
-1700:0:2905
-1701:2:705
-1702:2:709
-1703:2:710
-1704:2:718
-1705:2:719
-1706:2:723
-1707:2:724
-1708:2:732
-1709:2:737
-1710:2:741
-1711:2:742
-1712:2:749
-1713:2:750
-1714:2:761
-1715:2:762
-1716:2:763
-1717:2:774
-1718:2:786
-1719:2:787
-1720:0:2905
-1721:3:2850
-1722:0:2905
-1723:2:792
-1724:0:2905
-1725:3:2851
-1726:0:2905
-1727:2:793
-1728:2:797
-1729:2:798
-1730:2:806
-1731:2:807
-1732:2:811
-1733:2:812
-1734:2:820
-1735:2:825
-1736:2:829
-1737:2:830
-1738:2:837
-1739:2:838
-1740:2:849
-1741:2:850
-1742:2:851
-1743:2:862
-1744:2:874
-1745:2:875
-1746:0:2905
-1747:3:2850
-1748:0:2905
-1749:2:880
-1750:0:2905
-1751:3:2851
-1752:0:2905
-1753:2:881
-1754:0:2905
-1755:3:2850
-1756:0:2905
-1757:2:882
-1758:2:886
-1759:2:887
-1760:2:895
-1761:2:896
-1762:2:900
-1763:2:901
-1764:2:909
-1765:2:914
-1766:2:918
-1767:2:919
-1768:2:926
-1769:2:927
-1770:2:938
-1771:2:939
-1772:2:940
-1773:2:951
-1774:2:963
-1775:2:964
-1776:0:2905
-1777:3:2851
-1778:0:2905
-1779:2:969
-1780:0:2905
-1781:3:2850
-1782:0:2905
-1783:2:1086
-1784:0:2905
-1785:3:2851
-1786:0:2905
-1787:2:1087
-1788:0:2905
-1789:3:2850
-1790:0:2905
-1791:2:1092
-1792:0:2905
-1793:3:2851
-1794:0:2905
-1795:2:1097
-1796:0:2905
-1797:3:2850
-1798:0:2905
-1799:2:1098
-1800:0:2903
-1801:3:2851
-1802:0:2909
-1803:3:1630
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.define b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index a346ed9..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10499, errors: 0
-   159431 states, stored
-  1505398 states, matched
-  1664829 transitions (= stored+matched)
-  5794809 atomic steps
-hash conflicts:     62144 (resolved)
-
-Stats on memory usage (in Megabytes):
-   12.772      equivalent memory usage for states (stored*(State-vector + overhead))
-    8.936      actual memory usage for states (compression: 69.96%)
-               state-vector as stored = 31 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  474.651      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 651, "pan.___", state 213, "(1)"
-       line 402, "pan.___", state 348, "(1)"
-       line 398, "pan.___", state 433, "(1)"
-       line 402, "pan.___", state 447, "(1)"
-       line 402, "pan.___", state 547, "(1)"
-       line 159, "pan.___", state 628, "(1)"
-       line 163, "pan.___", state 636, "(1)"
-       line 163, "pan.___", state 637, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 637, "else"
-       line 161, "pan.___", state 642, "((j<1))"
-       line 161, "pan.___", state 642, "((j>=1))"
-       line 167, "pan.___", state 648, "(1)"
-       line 167, "pan.___", state 649, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 649, "else"
-       line 159, "pan.___", state 660, "(1)"
-       line 163, "pan.___", state 668, "(1)"
-       line 163, "pan.___", state 669, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 669, "else"
-       line 161, "pan.___", state 674, "((j<1))"
-       line 161, "pan.___", state 674, "((j>=1))"
-       line 167, "pan.___", state 680, "(1)"
-       line 167, "pan.___", state 681, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 681, "else"
-       line 201, "pan.___", state 686, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 201, "pan.___", state 686, "else"
-       line 213, "pan.___", state 690, "((i<1))"
-       line 213, "pan.___", state 690, "((i>=1))"
-       line 159, "pan.___", state 696, "(1)"
-       line 163, "pan.___", state 704, "(1)"
-       line 163, "pan.___", state 705, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 705, "else"
-       line 161, "pan.___", state 710, "((j<1))"
-       line 161, "pan.___", state 710, "((j>=1))"
-       line 167, "pan.___", state 716, "(1)"
-       line 167, "pan.___", state 717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 717, "else"
-       line 201, "pan.___", state 722, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 201, "pan.___", state 722, "else"
-       line 220, "pan.___", state 723, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 220, "pan.___", state 723, "else"
-       line 355, "pan.___", state 729, "((sighand_exec==1))"
-       line 355, "pan.___", state 729, "else"
-       line 361, "pan.___", state 732, "sighand_exec = 1"
-       line 398, "pan.___", state 745, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 747, "(1)"
-       line 398, "pan.___", state 748, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 748, "else"
-       line 398, "pan.___", state 751, "(1)"
-       line 402, "pan.___", state 759, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 761, "(1)"
-       line 402, "pan.___", state 762, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 762, "else"
-       line 402, "pan.___", state 765, "(1)"
-       line 402, "pan.___", state 766, "(1)"
-       line 402, "pan.___", state 766, "(1)"
-       line 400, "pan.___", state 771, "((i<1))"
-       line 400, "pan.___", state 771, "((i>=1))"
-       line 407, "pan.___", state 777, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 790, "(1)"
-       line 408, "pan.___", state 791, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 791, "else"
-       line 408, "pan.___", state 794, "(1)"
-       line 408, "pan.___", state 795, "(1)"
-       line 408, "pan.___", state 795, "(1)"
-       line 412, "pan.___", state 803, "(1)"
-       line 412, "pan.___", state 804, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 804, "else"
-       line 412, "pan.___", state 807, "(1)"
-       line 412, "pan.___", state 808, "(1)"
-       line 412, "pan.___", state 808, "(1)"
-       line 410, "pan.___", state 813, "((i<1))"
-       line 410, "pan.___", state 813, "((i>=1))"
-       line 417, "pan.___", state 820, "(1)"
-       line 417, "pan.___", state 821, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 821, "else"
-       line 417, "pan.___", state 824, "(1)"
-       line 417, "pan.___", state 825, "(1)"
-       line 417, "pan.___", state 825, "(1)"
-       line 419, "pan.___", state 828, "(1)"
-       line 419, "pan.___", state 828, "(1)"
-       line 361, "pan.___", state 837, "sighand_exec = 1"
-       line 402, "pan.___", state 868, "(1)"
-       line 402, "pan.___", state 965, "(1)"
-       line 398, "pan.___", state 1050, "(1)"
-       line 402, "pan.___", state 1064, "(1)"
-       line 402, "pan.___", state 1164, "(1)"
-       line 159, "pan.___", state 1245, "(1)"
-       line 163, "pan.___", state 1253, "(1)"
-       line 163, "pan.___", state 1254, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1254, "else"
-       line 161, "pan.___", state 1259, "((j<1))"
-       line 161, "pan.___", state 1259, "((j>=1))"
-       line 167, "pan.___", state 1265, "(1)"
-       line 167, "pan.___", state 1266, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1266, "else"
-       line 159, "pan.___", state 1277, "(1)"
-       line 163, "pan.___", state 1285, "(1)"
-       line 163, "pan.___", state 1286, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 1286, "else"
-       line 161, "pan.___", state 1291, "((j<1))"
-       line 161, "pan.___", state 1291, "((j>=1))"
-       line 167, "pan.___", state 1297, "(1)"
-       line 167, "pan.___", state 1298, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 1298, "else"
-       line 201, "pan.___", state 1303, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 201, "pan.___", state 1303, "else"
-       line 213, "pan.___", state 1307, "((i<1))"
-       line 213, "pan.___", state 1307, "((i>=1))"
-       line 159, "pan.___", state 1313, "(1)"
-       line 163, "pan.___", state 1321, "(1)"
-       line 163, "pan.___", state 1322, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1322, "else"
-       line 161, "pan.___", state 1327, "((j<1))"
-       line 161, "pan.___", state 1327, "((j>=1))"
-       line 167, "pan.___", state 1333, "(1)"
-       line 167, "pan.___", state 1334, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1334, "else"
-       line 201, "pan.___", state 1339, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 201, "pan.___", state 1339, "else"
-       line 220, "pan.___", state 1340, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 220, "pan.___", state 1340, "else"
-       line 355, "pan.___", state 1346, "((sighand_exec==1))"
-       line 355, "pan.___", state 1346, "else"
-       line 361, "pan.___", state 1349, "sighand_exec = 1"
-       line 398, "pan.___", state 1362, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 1364, "(1)"
-       line 398, "pan.___", state 1365, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 1365, "else"
-       line 398, "pan.___", state 1368, "(1)"
-       line 402, "pan.___", state 1376, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 1378, "(1)"
-       line 402, "pan.___", state 1379, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 1379, "else"
-       line 402, "pan.___", state 1382, "(1)"
-       line 402, "pan.___", state 1383, "(1)"
-       line 402, "pan.___", state 1383, "(1)"
-       line 400, "pan.___", state 1388, "((i<1))"
-       line 400, "pan.___", state 1388, "((i>=1))"
-       line 407, "pan.___", state 1394, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 1407, "(1)"
-       line 408, "pan.___", state 1408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 1408, "else"
-       line 408, "pan.___", state 1411, "(1)"
-       line 408, "pan.___", state 1412, "(1)"
-       line 408, "pan.___", state 1412, "(1)"
-       line 412, "pan.___", state 1420, "(1)"
-       line 412, "pan.___", state 1421, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 1421, "else"
-       line 412, "pan.___", state 1424, "(1)"
-       line 412, "pan.___", state 1425, "(1)"
-       line 412, "pan.___", state 1425, "(1)"
-       line 410, "pan.___", state 1430, "((i<1))"
-       line 410, "pan.___", state 1430, "((i>=1))"
-       line 417, "pan.___", state 1437, "(1)"
-       line 417, "pan.___", state 1438, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1438, "else"
-       line 417, "pan.___", state 1441, "(1)"
-       line 417, "pan.___", state 1442, "(1)"
-       line 417, "pan.___", state 1442, "(1)"
-       line 419, "pan.___", state 1445, "(1)"
-       line 419, "pan.___", state 1445, "(1)"
-       line 361, "pan.___", state 1454, "sighand_exec = 1"
-       line 701, "pan.___", state 1596, "-end-"
-       (111 of 1596 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 747, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.23 seconds
-pan: rate  129618.7 states/second
-pan: avg transition delay 7.3881e-07 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index 808154e..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index 522df0a..0000000
+++ /dev/null
@@ -1,1677 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2833
-2:4:2785
-3:4:2788
-4:4:2788
-5:4:2791
-6:4:2799
-7:4:2799
-8:4:2802
-9:4:2808
-10:4:2812
-11:4:2812
-12:4:2815
-13:4:2823
-14:4:2827
-15:4:2828
-16:0:2833
-17:4:2830
-18:0:2833
-19:3:1283
-20:0:2833
-21:3:1289
-22:0:2833
-23:3:1290
-24:0:2833
-25:3:1291
-26:3:1295
-27:3:1296
-28:3:1304
-29:3:1305
-30:3:1309
-31:3:1310
-32:3:1318
-33:3:1323
-34:3:1327
-35:3:1328
-36:3:1335
-37:3:1336
-38:3:1347
-39:3:1348
-40:3:1349
-41:3:1360
-42:3:1365
-43:3:1366
-44:0:2833
-45:3:1378
-46:0:2833
-47:3:1380
-48:3:1381
-49:0:2833
-50:3:1385
-51:3:1389
-52:3:1390
-53:3:1398
-54:3:1399
-55:3:1403
-56:3:1404
-57:3:1412
-58:3:1417
-59:3:1418
-60:3:1429
-61:3:1430
-62:3:1441
-63:3:1442
-64:3:1443
-65:3:1454
-66:3:1459
-67:3:1460
-68:0:2833
-69:3:1472
-70:0:2833
-71:3:1474
-72:0:2833
-73:3:1475
-74:0:2833
-75:3:1485
-76:0:2833
-77:3:1486
-78:0:2833
-79:3:1487
-80:3:1494
-81:3:1495
-82:3:1502
-83:3:1507
-84:0:2833
-85:3:1518
-86:0:2833
-87:3:1519
-88:3:1526
-89:3:1527
-90:3:1534
-91:3:1539
-92:0:2833
-93:3:1550
-94:0:2833
-95:3:1555
-96:3:1562
-97:3:1563
-98:3:1570
-99:3:1575
-100:0:2833
-101:3:1590
-102:0:2833
-103:3:1592
-104:0:2833
-105:3:1593
-106:3:1597
-107:3:1598
-108:3:1606
-109:3:1607
-110:3:1611
-111:3:1612
-112:3:1620
-113:3:1625
-114:3:1629
-115:3:1630
-116:3:1637
-117:3:1638
-118:3:1649
-119:3:1650
-120:3:1651
-121:3:1662
-122:3:1667
-123:3:1668
-124:0:2833
-125:3:1680
-126:0:2833
-127:3:1682
-128:0:2833
-129:3:1685
-130:3:1686
-131:3:1698
-132:3:1699
-133:3:1703
-134:3:1704
-135:3:1712
-136:3:1717
-137:3:1721
-138:3:1722
-139:3:1729
-140:3:1730
-141:3:1741
-142:3:1742
-143:3:1743
-144:3:1754
-145:3:1759
-146:3:1760
-147:0:2833
-148:3:1772
-149:0:2833
-150:3:1774
-151:0:2833
-152:3:1775
-153:0:2833
-154:3:1776
-155:0:2833
-156:3:1777
-157:0:2833
-158:3:1778
-159:3:1782
-160:3:1783
-161:3:1791
-162:3:1792
-163:3:1796
-164:3:1797
-165:3:1805
-166:3:1810
-167:3:1814
-168:3:1815
-169:3:1822
-170:3:1823
-171:3:1834
-172:3:1835
-173:3:1836
-174:3:1847
-175:3:1852
-176:3:1853
-177:0:2833
-178:3:1865
-179:0:2833
-180:3:1974
-181:0:2833
-182:3:2072
-183:0:2833
-184:3:2073
-185:0:2833
-186:3:2077
-187:0:2833
-188:3:2083
-189:3:2087
-190:3:2088
-191:3:2096
-192:3:2097
-193:3:2101
-194:3:2102
-195:3:2110
-196:3:2115
-197:3:2119
-198:3:2120
-199:3:2127
-200:3:2128
-201:3:2139
-202:3:2140
-203:3:2141
-204:3:2152
-205:3:2157
-206:3:2158
-207:0:2833
-208:3:2170
-209:0:2833
-210:3:2172
-211:0:2833
-212:3:2173
-213:3:2177
-214:3:2178
-215:3:2186
-216:3:2187
-217:3:2191
-218:3:2192
-219:3:2200
-220:3:2205
-221:3:2209
-222:3:2210
-223:3:2217
-224:3:2218
-225:3:2229
-226:3:2230
-227:3:2231
-228:3:2242
-229:3:2247
-230:3:2248
-231:0:2833
-232:3:2260
-233:0:2833
-234:3:2262
-235:0:2833
-236:3:2265
-237:3:2266
-238:3:2278
-239:3:2279
-240:3:2283
-241:3:2284
-242:3:2292
-243:3:2297
-244:3:2301
-245:3:2302
-246:3:2309
-247:3:2310
-248:3:2321
-249:3:2322
-250:3:2323
-251:3:2334
-252:3:2339
-253:3:2340
-254:0:2833
-255:3:2352
-256:0:2833
-257:3:2354
-258:0:2833
-259:3:2355
-260:0:2833
-261:3:2356
-262:0:2833
-263:3:2357
-264:0:2833
-265:3:2358
-266:3:2362
-267:3:2363
-268:3:2371
-269:3:2372
-270:3:2376
-271:3:2377
-272:3:2385
-273:3:2390
-274:3:2394
-275:3:2395
-276:3:2402
-277:3:2403
-278:3:2414
-279:3:2415
-280:3:2416
-281:3:2427
-282:3:2432
-283:3:2433
-284:0:2833
-285:3:2445
-286:0:2833
-287:3:2554
-288:0:2833
-289:3:2652
-290:0:2833
-291:3:2653
-292:0:2833
-293:3:2657
-294:0:2833
-295:3:2663
-296:0:2833
-297:3:2664
-298:3:2671
-299:3:2672
-300:3:2679
-301:3:2684
-302:0:2833
-303:3:2695
-304:0:2833
-305:3:2696
-306:3:2703
-307:3:2704
-308:3:2711
-309:3:2716
-310:0:2833
-311:3:2727
-312:0:2833
-313:3:2732
-314:3:2739
-315:3:2740
-316:3:2747
-317:3:2752
-318:0:2833
-319:3:2767
-320:0:2833
-321:3:2769
-322:0:2833
-323:3:2770
-324:0:2833
-325:3:1290
-326:0:2833
-327:3:1291
-328:3:1295
-329:3:1296
-330:3:1304
-331:3:1305
-332:3:1309
-333:3:1310
-334:3:1318
-335:3:1323
-336:3:1327
-337:3:1328
-338:3:1335
-339:3:1336
-340:3:1347
-341:3:1348
-342:3:1349
-343:3:1360
-344:3:1365
-345:3:1366
-346:0:2833
-347:3:1378
-348:0:2833
-349:3:1380
-350:3:1381
-351:0:2833
-352:3:1385
-353:3:1389
-354:3:1390
-355:3:1398
-356:3:1399
-357:3:1403
-358:3:1404
-359:3:1412
-360:3:1417
-361:3:1418
-362:3:1429
-363:3:1430
-364:3:1441
-365:3:1442
-366:3:1443
-367:3:1454
-368:3:1459
-369:3:1460
-370:0:2833
-371:3:1472
-372:0:2833
-373:3:1474
-374:0:2833
-375:3:1475
-376:0:2833
-377:3:1485
-378:0:2833
-379:3:1486
-380:0:2833
-381:3:1487
-382:3:1494
-383:3:1495
-384:3:1502
-385:3:1507
-386:0:2833
-387:3:1518
-388:0:2833
-389:3:1519
-390:3:1526
-391:3:1527
-392:3:1534
-393:3:1539
-394:0:2833
-395:3:1550
-396:0:2833
-397:3:1555
-398:3:1562
-399:3:1563
-400:3:1570
-401:3:1575
-402:0:2833
-403:3:1590
-404:0:2833
-405:3:1592
-406:0:2833
-407:3:1593
-408:3:1597
-409:3:1598
-410:3:1606
-411:3:1607
-412:3:1611
-413:3:1612
-414:3:1620
-415:3:1625
-416:3:1629
-417:3:1630
-418:3:1637
-419:3:1638
-420:3:1649
-421:3:1650
-422:3:1651
-423:3:1662
-424:3:1667
-425:3:1668
-426:0:2833
-427:3:1680
-428:0:2833
-429:3:1682
-430:0:2833
-431:3:1685
-432:3:1686
-433:3:1698
-434:3:1699
-435:3:1703
-436:3:1704
-437:3:1712
-438:3:1717
-439:3:1721
-440:3:1722
-441:3:1729
-442:3:1730
-443:3:1741
-444:3:1742
-445:3:1743
-446:3:1754
-447:3:1759
-448:3:1760
-449:0:2833
-450:3:1772
-451:0:2833
-452:3:1774
-453:0:2833
-454:3:1775
-455:0:2833
-456:3:1776
-457:0:2833
-458:3:1777
-459:0:2833
-460:3:1778
-461:3:1782
-462:3:1783
-463:3:1791
-464:3:1792
-465:3:1796
-466:3:1797
-467:3:1805
-468:3:1810
-469:3:1814
-470:3:1815
-471:3:1822
-472:3:1823
-473:3:1834
-474:3:1835
-475:3:1836
-476:3:1847
-477:3:1852
-478:3:1853
-479:0:2833
-480:3:1865
-481:0:2833
-482:3:1974
-483:0:2833
-484:3:2072
-485:0:2833
-486:3:2073
-487:0:2833
-488:3:2077
-489:0:2833
-490:3:2083
-491:3:2087
-492:3:2088
-493:3:2096
-494:3:2097
-495:3:2101
-496:3:2102
-497:3:2110
-498:3:2115
-499:3:2119
-500:3:2120
-501:3:2127
-502:3:2128
-503:3:2139
-504:3:2140
-505:3:2141
-506:3:2152
-507:3:2157
-508:3:2158
-509:0:2833
-510:3:2170
-511:0:2833
-512:3:2172
-513:0:2833
-514:3:2173
-515:3:2177
-516:3:2178
-517:3:2186
-518:3:2187
-519:3:2191
-520:3:2192
-521:3:2200
-522:3:2205
-523:3:2209
-524:3:2210
-525:3:2217
-526:3:2218
-527:3:2229
-528:3:2230
-529:3:2231
-530:3:2242
-531:3:2247
-532:3:2248
-533:0:2833
-534:3:2260
-535:0:2833
-536:3:2262
-537:0:2833
-538:3:2265
-539:3:2266
-540:3:2278
-541:3:2279
-542:3:2283
-543:3:2284
-544:3:2292
-545:3:2297
-546:3:2301
-547:3:2302
-548:3:2309
-549:3:2310
-550:3:2321
-551:3:2322
-552:3:2323
-553:3:2334
-554:3:2339
-555:3:2340
-556:0:2833
-557:3:2352
-558:0:2833
-559:3:2354
-560:0:2833
-561:3:2355
-562:0:2833
-563:3:2356
-564:0:2833
-565:3:2357
-566:0:2833
-567:3:2358
-568:3:2362
-569:3:2363
-570:3:2371
-571:3:2372
-572:3:2376
-573:3:2377
-574:3:2385
-575:3:2390
-576:3:2394
-577:3:2395
-578:3:2402
-579:3:2403
-580:3:2414
-581:3:2415
-582:3:2416
-583:3:2427
-584:3:2432
-585:3:2433
-586:0:2833
-587:3:2445
-588:0:2833
-589:3:2554
-590:0:2833
-591:3:2652
-592:0:2833
-593:3:2653
-594:0:2833
-595:3:2657
-596:0:2833
-597:3:2663
-598:0:2833
-599:3:2664
-600:3:2671
-601:3:2672
-602:3:2679
-603:3:2684
-604:0:2833
-605:3:2695
-606:0:2833
-607:3:2696
-608:3:2703
-609:3:2704
-610:3:2711
-611:3:2716
-612:0:2833
-613:3:2727
-614:0:2833
-615:3:2732
-616:3:2739
-617:3:2740
-618:3:2747
-619:3:2752
-620:0:2833
-621:3:2767
-622:0:2833
-623:3:2769
-624:0:2833
-625:3:2770
-626:0:2833
-627:3:1290
-628:0:2833
-629:3:1291
-630:3:1295
-631:3:1296
-632:3:1304
-633:3:1305
-634:3:1309
-635:3:1310
-636:3:1318
-637:3:1323
-638:3:1327
-639:3:1328
-640:3:1335
-641:3:1336
-642:3:1347
-643:3:1348
-644:3:1349
-645:3:1360
-646:3:1365
-647:3:1366
-648:0:2833
-649:3:1378
-650:0:2833
-651:3:1380
-652:3:1381
-653:0:2833
-654:3:1385
-655:3:1389
-656:3:1390
-657:3:1398
-658:3:1399
-659:3:1403
-660:3:1404
-661:3:1412
-662:3:1417
-663:3:1418
-664:3:1429
-665:3:1430
-666:3:1441
-667:3:1442
-668:3:1443
-669:3:1454
-670:3:1459
-671:3:1460
-672:0:2833
-673:3:1472
-674:0:2833
-675:3:1474
-676:0:2833
-677:3:1475
-678:0:2833
-679:3:1485
-680:0:2833
-681:3:1486
-682:0:2833
-683:3:1487
-684:3:1494
-685:3:1495
-686:3:1502
-687:3:1507
-688:0:2833
-689:3:1518
-690:0:2833
-691:3:1519
-692:3:1526
-693:3:1527
-694:3:1534
-695:3:1539
-696:0:2833
-697:3:1550
-698:0:2833
-699:3:1555
-700:3:1562
-701:3:1563
-702:3:1570
-703:3:1575
-704:0:2833
-705:3:1590
-706:0:2833
-707:3:1592
-708:0:2833
-709:3:1593
-710:3:1597
-711:3:1598
-712:3:1606
-713:3:1607
-714:3:1611
-715:3:1612
-716:3:1620
-717:3:1625
-718:3:1629
-719:3:1630
-720:3:1637
-721:3:1638
-722:3:1649
-723:3:1650
-724:3:1651
-725:3:1662
-726:3:1667
-727:3:1668
-728:0:2833
-729:3:1680
-730:0:2833
-731:3:1682
-732:0:2833
-733:3:1685
-734:3:1686
-735:3:1698
-736:3:1699
-737:3:1703
-738:3:1704
-739:3:1712
-740:3:1717
-741:3:1721
-742:3:1722
-743:3:1729
-744:3:1730
-745:3:1741
-746:3:1742
-747:3:1743
-748:3:1754
-749:3:1759
-750:3:1760
-751:0:2833
-752:3:1772
-753:0:2833
-754:3:1774
-755:0:2833
-756:3:1775
-757:0:2833
-758:3:1776
-759:0:2833
-760:3:1777
-761:0:2833
-762:3:1778
-763:3:1782
-764:3:1783
-765:3:1791
-766:3:1792
-767:3:1796
-768:3:1797
-769:3:1805
-770:3:1810
-771:3:1814
-772:3:1815
-773:3:1822
-774:3:1823
-775:3:1834
-776:3:1835
-777:3:1836
-778:3:1847
-779:3:1852
-780:3:1853
-781:0:2833
-782:3:1865
-783:0:2833
-784:3:1974
-785:0:2833
-786:3:2072
-787:0:2833
-788:3:2073
-789:0:2833
-790:3:2077
-791:0:2833
-792:3:2083
-793:3:2087
-794:3:2088
-795:3:2096
-796:3:2097
-797:3:2101
-798:3:2102
-799:3:2110
-800:3:2115
-801:3:2119
-802:3:2120
-803:3:2127
-804:3:2128
-805:3:2139
-806:3:2140
-807:3:2141
-808:3:2152
-809:3:2157
-810:3:2158
-811:0:2833
-812:3:2170
-813:0:2833
-814:3:2172
-815:0:2833
-816:3:2173
-817:3:2177
-818:3:2178
-819:3:2186
-820:3:2187
-821:3:2191
-822:3:2192
-823:3:2200
-824:3:2205
-825:3:2209
-826:3:2210
-827:3:2217
-828:3:2218
-829:3:2229
-830:3:2230
-831:3:2231
-832:3:2242
-833:3:2247
-834:3:2248
-835:0:2833
-836:3:2260
-837:0:2833
-838:3:2262
-839:0:2833
-840:3:2265
-841:3:2266
-842:3:2278
-843:3:2279
-844:3:2283
-845:3:2284
-846:3:2292
-847:3:2297
-848:3:2301
-849:3:2302
-850:3:2309
-851:3:2310
-852:3:2321
-853:3:2322
-854:3:2323
-855:3:2334
-856:3:2339
-857:3:2340
-858:0:2833
-859:3:2352
-860:0:2833
-861:3:2354
-862:0:2833
-863:3:2355
-864:0:2833
-865:3:2356
-866:0:2833
-867:3:2357
-868:0:2833
-869:3:2358
-870:3:2362
-871:3:2363
-872:3:2371
-873:3:2372
-874:3:2376
-875:3:2377
-876:3:2385
-877:3:2390
-878:3:2394
-879:3:2395
-880:3:2402
-881:3:2403
-882:3:2414
-883:3:2415
-884:3:2416
-885:3:2427
-886:3:2432
-887:3:2433
-888:0:2833
-889:3:2445
-890:0:2833
-891:3:2554
-892:0:2833
-893:3:2652
-894:0:2833
-895:3:2653
-896:0:2833
-897:3:2657
-898:0:2833
-899:3:2663
-900:0:2833
-901:3:2664
-902:3:2671
-903:3:2672
-904:3:2679
-905:3:2684
-906:0:2833
-907:3:2695
-908:0:2833
-909:3:2696
-910:3:2703
-911:3:2704
-912:3:2711
-913:3:2716
-914:0:2833
-915:3:2727
-916:0:2833
-917:3:2732
-918:3:2739
-919:3:2740
-920:3:2747
-921:3:2752
-922:0:2833
-923:3:2767
-924:0:2833
-925:3:2769
-926:0:2833
-927:3:2770
-928:0:2833
-929:3:1290
-930:0:2833
-931:3:1291
-932:3:1295
-933:3:1296
-934:3:1304
-935:3:1305
-936:3:1309
-937:3:1310
-938:3:1318
-939:3:1323
-940:3:1327
-941:3:1328
-942:3:1335
-943:3:1336
-944:3:1347
-945:3:1348
-946:3:1349
-947:3:1360
-948:3:1365
-949:3:1366
-950:0:2833
-951:3:1378
-952:0:2833
-953:3:1380
-954:3:1381
-955:0:2833
-956:3:1385
-957:3:1389
-958:3:1390
-959:3:1398
-960:3:1399
-961:3:1403
-962:3:1404
-963:3:1412
-964:3:1417
-965:3:1418
-966:3:1429
-967:3:1430
-968:3:1441
-969:3:1442
-970:3:1443
-971:3:1454
-972:3:1459
-973:3:1460
-974:0:2833
-975:3:1472
-976:0:2833
-977:3:1474
-978:0:2833
-979:3:1475
-980:0:2833
-981:3:1485
-982:0:2833
-983:3:1486
-984:0:2833
-985:3:1487
-986:3:1494
-987:3:1495
-988:3:1502
-989:3:1507
-990:0:2833
-991:3:1518
-992:0:2833
-993:3:1519
-994:3:1526
-995:3:1527
-996:3:1534
-997:3:1539
-998:0:2833
-999:3:1550
-1000:0:2833
-1001:3:1555
-1002:3:1562
-1003:3:1563
-1004:3:1570
-1005:3:1575
-1006:0:2833
-1007:3:1590
-1008:0:2833
-1009:3:1592
-1010:0:2833
-1011:3:1593
-1012:3:1597
-1013:3:1598
-1014:3:1606
-1015:3:1607
-1016:3:1611
-1017:3:1612
-1018:3:1620
-1019:3:1625
-1020:3:1629
-1021:3:1630
-1022:3:1637
-1023:3:1638
-1024:3:1649
-1025:3:1650
-1026:3:1651
-1027:3:1662
-1028:3:1667
-1029:3:1668
-1030:0:2833
-1031:3:1680
-1032:0:2833
-1033:3:1682
-1034:0:2833
-1035:3:1685
-1036:3:1686
-1037:3:1698
-1038:3:1699
-1039:3:1703
-1040:3:1704
-1041:3:1712
-1042:3:1717
-1043:3:1721
-1044:3:1722
-1045:3:1729
-1046:3:1730
-1047:3:1741
-1048:3:1742
-1049:3:1743
-1050:3:1754
-1051:3:1759
-1052:3:1760
-1053:0:2833
-1054:3:1772
-1055:0:2833
-1056:3:1774
-1057:0:2833
-1058:3:1775
-1059:0:2833
-1060:3:1776
-1061:0:2833
-1062:3:1777
-1063:0:2833
-1064:3:1778
-1065:3:1782
-1066:3:1783
-1067:3:1791
-1068:3:1792
-1069:3:1796
-1070:3:1797
-1071:3:1805
-1072:3:1810
-1073:3:1814
-1074:3:1815
-1075:3:1822
-1076:3:1823
-1077:3:1834
-1078:3:1835
-1079:3:1836
-1080:3:1847
-1081:3:1852
-1082:3:1853
-1083:0:2833
-1084:3:1865
-1085:0:2833
-1086:3:1974
-1087:0:2833
-1088:3:2072
-1089:0:2833
-1090:3:2073
-1091:0:2833
-1092:3:2077
-1093:0:2833
-1094:3:2083
-1095:3:2087
-1096:3:2088
-1097:3:2096
-1098:3:2097
-1099:3:2101
-1100:3:2102
-1101:3:2110
-1102:3:2115
-1103:3:2119
-1104:3:2120
-1105:3:2127
-1106:3:2128
-1107:3:2139
-1108:3:2140
-1109:3:2141
-1110:3:2152
-1111:3:2157
-1112:3:2158
-1113:0:2833
-1114:3:2170
-1115:0:2833
-1116:3:2172
-1117:0:2833
-1118:3:2173
-1119:3:2177
-1120:3:2178
-1121:3:2186
-1122:3:2187
-1123:3:2191
-1124:3:2192
-1125:3:2200
-1126:3:2205
-1127:3:2209
-1128:3:2210
-1129:3:2217
-1130:3:2218
-1131:3:2229
-1132:3:2230
-1133:3:2231
-1134:3:2242
-1135:3:2247
-1136:3:2248
-1137:0:2833
-1138:3:2260
-1139:0:2833
-1140:3:2262
-1141:0:2833
-1142:3:2265
-1143:3:2266
-1144:3:2278
-1145:3:2279
-1146:3:2283
-1147:3:2284
-1148:3:2292
-1149:3:2297
-1150:3:2301
-1151:3:2302
-1152:3:2309
-1153:3:2310
-1154:3:2321
-1155:3:2322
-1156:3:2323
-1157:3:2334
-1158:3:2339
-1159:3:2340
-1160:0:2833
-1161:3:2352
-1162:0:2833
-1163:3:2354
-1164:0:2833
-1165:3:2355
-1166:0:2833
-1167:3:2356
-1168:0:2833
-1169:3:2357
-1170:0:2833
-1171:3:2358
-1172:3:2362
-1173:3:2363
-1174:3:2371
-1175:3:2372
-1176:3:2376
-1177:3:2377
-1178:3:2385
-1179:3:2390
-1180:3:2394
-1181:3:2395
-1182:3:2402
-1183:3:2403
-1184:3:2414
-1185:3:2415
-1186:3:2416
-1187:3:2427
-1188:3:2432
-1189:3:2433
-1190:0:2833
-1191:3:2445
-1192:0:2833
-1193:3:2554
-1194:0:2833
-1195:3:2652
-1196:0:2833
-1197:3:2653
-1198:0:2833
-1199:3:2657
-1200:0:2833
-1201:3:2663
-1202:0:2833
-1203:3:2664
-1204:3:2671
-1205:3:2672
-1206:3:2679
-1207:3:2684
-1208:0:2833
-1209:3:2695
-1210:0:2833
-1211:3:2696
-1212:3:2703
-1213:3:2704
-1214:3:2711
-1215:3:2716
-1216:0:2833
-1217:3:2727
-1218:0:2833
-1219:3:2732
-1220:3:2739
-1221:3:2740
-1222:3:2747
-1223:3:2752
-1224:0:2833
-1225:3:2767
-1226:0:2833
-1227:3:2769
-1228:0:2833
-1229:3:2770
-1230:0:2833
-1231:3:1290
-1232:0:2833
-1233:3:1291
-1234:3:1295
-1235:3:1296
-1236:3:1304
-1237:3:1305
-1238:3:1309
-1239:3:1310
-1240:3:1318
-1241:3:1323
-1242:3:1327
-1243:3:1328
-1244:3:1335
-1245:3:1336
-1246:3:1347
-1247:3:1348
-1248:3:1349
-1249:3:1360
-1250:3:1365
-1251:3:1366
-1252:0:2833
-1253:3:1378
-1254:0:2833
-1255:3:1380
-1256:3:1381
-1257:0:2833
-1258:3:1385
-1259:3:1389
-1260:3:1390
-1261:3:1398
-1262:3:1399
-1263:3:1403
-1264:3:1404
-1265:3:1412
-1266:3:1417
-1267:3:1418
-1268:3:1429
-1269:3:1430
-1270:3:1441
-1271:3:1442
-1272:3:1443
-1273:3:1454
-1274:3:1459
-1275:3:1460
-1276:0:2833
-1277:3:1472
-1278:0:2833
-1279:3:1474
-1280:0:2833
-1281:3:1475
-1282:0:2833
-1283:3:1485
-1284:0:2833
-1285:3:1486
-1286:0:2833
-1287:3:1487
-1288:3:1494
-1289:3:1495
-1290:3:1502
-1291:3:1507
-1292:0:2833
-1293:3:1518
-1294:0:2833
-1295:2:662
-1296:0:2833
-1297:2:668
-1298:0:2833
-1299:2:669
-1300:0:2833
-1301:2:670
-1302:0:2833
-1303:2:671
-1304:0:2833
-1305:1:2
-1306:0:2833
-1307:2:672
-1308:0:2833
-1309:1:8
-1310:0:2833
-1311:1:9
-1312:0:2833
-1313:1:10
-1314:0:2833
-1315:1:11
-1316:0:2833
-1317:2:671
-1318:0:2833
-1319:1:12
-1320:1:16
-1321:1:17
-1322:1:25
-1323:1:26
-1324:1:30
-1325:1:31
-1326:1:39
-1327:1:44
-1328:1:48
-1329:1:49
-1330:1:56
-1331:1:57
-1332:1:68
-1333:1:69
-1334:1:70
-1335:1:81
-1336:1:93
-1337:1:94
-1338:0:2833
-1339:2:672
-1340:0:2833
-1341:1:99
-1342:0:2833
-1343:2:673
-1344:0:2833
-1345:2:674
-1346:0:2833
-1347:2:685
-1348:0:2833
-1349:2:686
-1350:0:2833
-1351:2:687
-1352:2:691
-1353:2:692
-1354:2:700
-1355:2:701
-1356:2:705
-1357:2:706
-1358:2:714
-1359:2:719
-1360:2:723
-1361:2:724
-1362:2:731
-1363:2:732
-1364:2:743
-1365:2:744
-1366:2:745
-1367:2:756
-1368:2:768
-1369:2:769
-1370:0:2833
-1371:2:774
-1372:0:2833
-1373:2:775
-1374:2:779
-1375:2:780
-1376:2:788
-1377:2:789
-1378:2:793
-1379:2:794
-1380:2:802
-1381:2:807
-1382:2:811
-1383:2:812
-1384:2:819
-1385:2:820
-1386:2:831
-1387:2:832
-1388:2:833
-1389:2:844
-1390:2:856
-1391:2:857
-1392:0:2833
-1393:2:862
-1394:0:2833
-1395:2:863
-1396:0:2833
-1397:2:864
-1398:2:868
-1399:2:869
-1400:2:877
-1401:2:878
-1402:2:882
-1403:2:883
-1404:2:891
-1405:2:896
-1406:2:900
-1407:2:901
-1408:2:908
-1409:2:909
-1410:2:920
-1411:2:921
-1412:2:922
-1413:2:933
-1414:2:945
-1415:2:946
-1416:0:2833
-1417:2:951
-1418:0:2833
-1419:2:1059
-1420:0:2833
-1421:2:1060
-1422:0:2833
-1423:2:1065
-1424:0:2833
-1425:2:1070
-1426:0:2833
-1427:3:1519
-1428:3:1526
-1429:3:1529
-1430:3:1530
-1431:3:1534
-1432:3:1539
-1433:0:2833
-1434:3:1550
-1435:0:2833
-1436:3:1555
-1437:3:1562
-1438:3:1563
-1439:3:1570
-1440:3:1575
-1441:0:2833
-1442:3:1590
-1443:0:2833
-1444:3:1592
-1445:0:2833
-1446:3:1593
-1447:3:1597
-1448:3:1598
-1449:3:1606
-1450:3:1607
-1451:3:1611
-1452:3:1612
-1453:3:1620
-1454:3:1625
-1455:3:1629
-1456:3:1630
-1457:3:1637
-1458:3:1638
-1459:3:1649
-1460:3:1650
-1461:3:1651
-1462:3:1662
-1463:3:1667
-1464:3:1668
-1465:0:2833
-1466:3:1680
-1467:0:2833
-1468:3:1682
-1469:0:2833
-1470:3:1685
-1471:3:1686
-1472:3:1698
-1473:3:1699
-1474:3:1703
-1475:3:1704
-1476:3:1712
-1477:3:1717
-1478:3:1721
-1479:3:1722
-1480:3:1729
-1481:3:1730
-1482:3:1741
-1483:3:1742
-1484:3:1743
-1485:3:1754
-1486:3:1759
-1487:3:1760
-1488:0:2833
-1489:3:1772
-1490:0:2833
-1491:3:1774
-1492:0:2833
-1493:3:1775
-1494:0:2833
-1495:3:1776
-1496:0:2833
-1497:3:1777
-1498:0:2833
-1499:3:1778
-1500:3:1782
-1501:3:1783
-1502:3:1791
-1503:3:1792
-1504:3:1796
-1505:3:1797
-1506:3:1805
-1507:3:1810
-1508:3:1814
-1509:3:1815
-1510:3:1822
-1511:3:1823
-1512:3:1834
-1513:3:1835
-1514:3:1836
-1515:3:1847
-1516:3:1852
-1517:3:1853
-1518:0:2833
-1519:3:1865
-1520:0:2833
-1521:3:1974
-1522:0:2833
-1523:3:2072
-1524:0:2833
-1525:3:2073
-1526:0:2833
-1527:3:2077
-1528:0:2833
-1529:3:2083
-1530:3:2087
-1531:3:2088
-1532:3:2096
-1533:3:2097
-1534:3:2101
-1535:3:2102
-1536:3:2110
-1537:3:2115
-1538:3:2119
-1539:3:2120
-1540:3:2127
-1541:3:2128
-1542:3:2139
-1543:3:2140
-1544:3:2141
-1545:3:2152
-1546:3:2157
-1547:3:2158
-1548:0:2833
-1549:3:2170
-1550:0:2833
-1551:3:2172
-1552:0:2833
-1553:3:2173
-1554:3:2177
-1555:3:2178
-1556:3:2186
-1557:3:2187
-1558:3:2191
-1559:3:2192
-1560:3:2200
-1561:3:2205
-1562:3:2209
-1563:3:2210
-1564:3:2217
-1565:3:2218
-1566:3:2229
-1567:3:2230
-1568:3:2231
-1569:3:2242
-1570:3:2247
-1571:3:2248
-1572:0:2833
-1573:3:2260
-1574:0:2833
-1575:3:2262
-1576:0:2833
-1577:3:2265
-1578:3:2266
-1579:3:2278
-1580:3:2279
-1581:3:2283
-1582:3:2284
-1583:3:2292
-1584:3:2297
-1585:3:2301
-1586:3:2302
-1587:3:2309
-1588:3:2310
-1589:3:2321
-1590:3:2322
-1591:3:2323
-1592:3:2334
-1593:3:2339
-1594:3:2340
-1595:0:2833
-1596:3:2352
-1597:0:2833
-1598:3:2354
-1599:0:2833
-1600:3:2355
-1601:0:2833
-1602:3:2356
-1603:0:2833
-1604:3:2357
-1605:0:2833
-1606:3:2358
-1607:3:2362
-1608:3:2363
-1609:3:2371
-1610:3:2372
-1611:3:2376
-1612:3:2377
-1613:3:2385
-1614:3:2390
-1615:3:2394
-1616:3:2395
-1617:3:2402
-1618:3:2403
-1619:3:2414
-1620:3:2415
-1621:3:2416
-1622:3:2427
-1623:3:2432
-1624:3:2433
-1625:0:2833
-1626:3:2445
-1627:0:2833
-1628:3:2554
-1629:0:2833
-1630:3:2652
-1631:0:2833
-1632:3:2653
-1633:0:2833
-1634:3:2657
-1635:0:2833
-1636:3:2663
-1637:0:2833
-1638:3:2664
-1639:3:2671
-1640:3:2672
-1641:3:2679
-1642:3:2684
-1643:0:2833
-1644:3:2695
-1645:0:2833
-1646:3:2696
-1647:3:2703
-1648:3:2706
-1649:3:2707
-1650:3:2711
-1651:3:2716
-1652:0:2833
-1653:3:2727
-1654:0:2833
-1655:3:2732
-1656:3:2739
-1657:3:2740
-1658:3:2747
-1659:3:2752
-1660:0:2833
-1661:3:2767
-1662:0:2833
-1663:3:2769
-1664:0:2833
-1665:3:2770
-1666:0:2833
-1667:3:2773
-1668:0:2833
-1669:3:2778
-1670:0:2833
-1671:2:1071
-1672:0:2831
-1673:3:2779
-1674:0:2837
-1675:1:288
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.define b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.log
deleted file mode 100644 (file)
index f854175..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 6934, errors: 0
-     7626 states, stored
-    67235 states, matched
-    74861 transitions (= stored+matched)
-   248896 atomic steps
-hash conflicts:       113 (resolved)
-
-Stats on memory usage (in Megabytes):
-    0.611      equivalent memory usage for states (stored*(State-vector + overhead))
-    0.867      actual memory usage for states (unsuccessful compression: 141.88%)
-               state-vector as stored = 91 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  466.545      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 160, "(1)"
-       line 651, "pan.___", state 213, "(1)"
-       line 174, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 233, "(1)"
-       line 159, "pan.___", state 254, "(1)"
-       line 163, "pan.___", state 262, "(1)"
-       line 167, "pan.___", state 274, "(1)"
-       line 174, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 317, "(1)"
-       line 163, "pan.___", state 325, "(1)"
-       line 167, "pan.___", state 337, "(1)"
-       line 174, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 384, "(1)"
-       line 163, "pan.___", state 392, "(1)"
-       line 167, "pan.___", state 404, "(1)"
-       line 398, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 441, "(1)"
-       line 407, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 470, "(1)"
-       line 417, "pan.___", state 500, "(1)"
-       line 398, "pan.___", state 526, "(1)"
-       line 402, "pan.___", state 540, "(1)"
-       line 407, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 599, "(1)"
-       line 402, "pan.___", state 640, "(1)"
-       line 407, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 699, "(1)"
-       line 174, "pan.___", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 722, "(1)"
-       line 178, "pan.___", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 731, "(1)"
-       line 178, "pan.___", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 732, "else"
-       line 176, "pan.___", state 737, "((j<1))"
-       line 176, "pan.___", state 737, "((j>=1))"
-       line 182, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 752, "(1)"
-       line 163, "pan.___", state 760, "(1)"
-       line 163, "pan.___", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 761, "else"
-       line 161, "pan.___", state 766, "((j<1))"
-       line 161, "pan.___", state 766, "((j>=1))"
-       line 167, "pan.___", state 772, "(1)"
-       line 167, "pan.___", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 773, "else"
-       line 169, "pan.___", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 776, "else"
-       line 174, "pan.___", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 785, "(1)"
-       line 178, "pan.___", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 794, "(1)"
-       line 178, "pan.___", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 795, "else"
-       line 176, "pan.___", state 800, "((j<1))"
-       line 176, "pan.___", state 800, "((j>=1))"
-       line 182, "pan.___", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 815, "(1)"
-       line 163, "pan.___", state 823, "(1)"
-       line 163, "pan.___", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 824, "else"
-       line 161, "pan.___", state 829, "((j<1))"
-       line 161, "pan.___", state 829, "((j>=1))"
-       line 167, "pan.___", state 835, "(1)"
-       line 167, "pan.___", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 836, "else"
-       line 169, "pan.___", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 839, "else"
-       line 201, "pan.___", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 841, "else"
-       line 213, "pan.___", state 845, "((i<1))"
-       line 213, "pan.___", state 845, "((i>=1))"
-       line 174, "pan.___", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 852, "(1)"
-       line 178, "pan.___", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 861, "(1)"
-       line 178, "pan.___", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 862, "else"
-       line 176, "pan.___", state 867, "((j<1))"
-       line 176, "pan.___", state 867, "((j>=1))"
-       line 182, "pan.___", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 882, "(1)"
-       line 163, "pan.___", state 890, "(1)"
-       line 163, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 891, "else"
-       line 161, "pan.___", state 896, "((j<1))"
-       line 161, "pan.___", state 896, "((j>=1))"
-       line 167, "pan.___", state 902, "(1)"
-       line 167, "pan.___", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 903, "else"
-       line 169, "pan.___", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 906, "else"
-       line 201, "pan.___", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 908, "else"
-       line 220, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 909, "else"
-       line 355, "pan.___", state 915, "((sighand_exec==1))"
-       line 355, "pan.___", state 915, "else"
-       line 361, "pan.___", state 918, "sighand_exec = 1"
-       line 398, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 933, "(1)"
-       line 398, "pan.___", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 934, "else"
-       line 398, "pan.___", state 937, "(1)"
-       line 402, "pan.___", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 947, "(1)"
-       line 402, "pan.___", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 948, "else"
-       line 402, "pan.___", state 951, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 400, "pan.___", state 957, "((i<1))"
-       line 400, "pan.___", state 957, "((i>=1))"
-       line 407, "pan.___", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 976, "(1)"
-       line 408, "pan.___", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 977, "else"
-       line 408, "pan.___", state 980, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 412, "pan.___", state 989, "(1)"
-       line 412, "pan.___", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 990, "else"
-       line 412, "pan.___", state 993, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 410, "pan.___", state 999, "((i<1))"
-       line 410, "pan.___", state 999, "((i>=1))"
-       line 417, "pan.___", state 1006, "(1)"
-       line 417, "pan.___", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1007, "else"
-       line 417, "pan.___", state 1010, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 361, "pan.___", state 1023, "sighand_exec = 1"
-       line 178, "pan.___", state 1048, "(1)"
-       line 182, "pan.___", state 1059, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1069, "(1)"
-       line 163, "pan.___", state 1077, "(1)"
-       line 167, "pan.___", state 1089, "(1)"
-       line 174, "pan.___", state 1100, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1109, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1122, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1132, "(1)"
-       line 163, "pan.___", state 1140, "(1)"
-       line 167, "pan.___", state 1152, "(1)"
-       line 174, "pan.___", state 1167, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1176, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1189, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1199, "(1)"
-       line 163, "pan.___", state 1207, "(1)"
-       line 167, "pan.___", state 1219, "(1)"
-       line 701, "pan.___", state 1258, "-end-"
-       (128 of 1258 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 747, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 0.05 seconds
-pan: rate    152520 states/second
-pan: avg transition delay 6.679e-07 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index c796593..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define SINGLE_FLIP
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 84cf653..0000000
+++ /dev/null
@@ -1,1379 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2904
-2:4:2856
-3:4:2859
-4:4:2859
-5:4:2862
-6:4:2870
-7:4:2870
-8:4:2873
-9:4:2879
-10:4:2883
-11:4:2883
-12:4:2886
-13:4:2894
-14:4:2898
-15:4:2899
-16:0:2904
-17:4:2901
-18:0:2904
-19:3:1655
-20:0:2904
-21:3:1661
-22:0:2904
-23:3:1662
-24:0:2904
-25:3:1663
-26:3:1667
-27:3:1668
-28:3:1676
-29:3:1677
-30:3:1681
-31:3:1682
-32:3:1690
-33:3:1695
-34:3:1699
-35:3:1700
-36:3:1707
-37:3:1708
-38:3:1719
-39:3:1720
-40:3:1721
-41:3:1732
-42:3:1737
-43:3:1738
-44:0:2904
-45:3:1750
-46:0:2904
-47:3:1752
-48:3:1753
-49:0:2904
-50:3:1757
-51:3:1761
-52:3:1762
-53:3:1770
-54:3:1771
-55:3:1775
-56:3:1776
-57:3:1784
-58:3:1789
-59:3:1790
-60:3:1801
-61:3:1802
-62:3:1813
-63:3:1814
-64:3:1815
-65:3:1826
-66:3:1831
-67:3:1832
-68:0:2904
-69:3:1844
-70:0:2904
-71:3:1846
-72:0:2904
-73:3:1847
-74:0:2904
-75:3:1857
-76:0:2904
-77:3:1858
-78:0:2904
-79:3:1862
-80:3:1863
-81:3:1867
-82:3:1871
-83:3:1872
-84:3:1876
-85:3:1884
-86:3:1885
-87:3:1890
-88:3:1897
-89:3:1898
-90:3:1905
-91:3:1910
-92:0:2904
-93:3:1921
-94:0:2904
-95:3:1925
-96:3:1926
-97:3:1930
-98:3:1934
-99:3:1935
-100:3:1939
-101:3:1947
-102:3:1948
-103:3:1953
-104:3:1960
-105:3:1961
-106:3:1968
-107:3:1973
-108:0:2904
-109:3:1984
-110:0:2904
-111:3:1992
-112:3:1993
-113:3:1997
-114:3:2001
-115:3:2002
-116:3:2006
-117:3:2014
-118:3:2015
-119:3:2020
-120:3:2027
-121:3:2028
-122:3:2035
-123:3:2040
-124:0:2904
-125:3:2055
-126:0:2904
-127:3:2057
-128:0:2904
-129:3:2058
-130:3:2062
-131:3:2063
-132:3:2071
-133:3:2072
-134:3:2076
-135:3:2077
-136:3:2085
-137:3:2090
-138:3:2094
-139:3:2095
-140:3:2102
-141:3:2103
-142:3:2114
-143:3:2115
-144:3:2116
-145:3:2127
-146:3:2132
-147:3:2133
-148:0:2904
-149:3:2145
-150:0:2904
-151:3:2147
-152:0:2904
-153:3:2150
-154:3:2151
-155:3:2163
-156:3:2164
-157:3:2168
-158:3:2169
-159:3:2177
-160:3:2182
-161:3:2186
-162:3:2187
-163:3:2194
-164:3:2195
-165:3:2206
-166:3:2207
-167:3:2208
-168:3:2219
-169:3:2224
-170:3:2225
-171:0:2904
-172:3:2237
-173:0:2904
-174:3:2239
-175:0:2904
-176:3:2240
-177:0:2904
-178:3:2241
-179:0:2904
-180:3:2242
-181:0:2904
-182:3:2243
-183:3:2247
-184:3:2248
-185:3:2256
-186:3:2257
-187:3:2261
-188:3:2262
-189:3:2270
-190:3:2275
-191:3:2279
-192:3:2280
-193:3:2287
-194:3:2288
-195:3:2299
-196:3:2300
-197:3:2301
-198:3:2312
-199:3:2317
-200:3:2318
-201:0:2904
-202:3:2330
-203:0:2904
-204:3:2532
-205:0:2904
-206:3:2630
-207:0:2904
-208:3:2631
-209:0:2904
-210:3:2635
-211:0:2904
-212:3:2641
-213:0:2904
-214:3:2645
-215:3:2646
-216:3:2650
-217:3:2654
-218:3:2655
-219:3:2659
-220:3:2667
-221:3:2668
-222:3:2673
-223:3:2680
-224:3:2681
-225:3:2688
-226:3:2693
-227:0:2904
-228:3:2704
-229:0:2904
-230:3:2708
-231:3:2709
-232:3:2713
-233:3:2717
-234:3:2718
-235:3:2722
-236:3:2730
-237:3:2731
-238:3:2736
-239:3:2743
-240:3:2744
-241:3:2751
-242:3:2756
-243:0:2904
-244:3:2767
-245:0:2904
-246:3:2775
-247:3:2776
-248:3:2780
-249:3:2784
-250:3:2785
-251:3:2789
-252:3:2797
-253:3:2798
-254:3:2803
-255:3:2810
-256:3:2811
-257:3:2818
-258:3:2823
-259:0:2904
-260:3:2838
-261:0:2904
-262:3:2840
-263:0:2904
-264:3:2841
-265:0:2904
-266:3:1662
-267:0:2904
-268:3:1663
-269:3:1667
-270:3:1668
-271:3:1676
-272:3:1677
-273:3:1681
-274:3:1682
-275:3:1690
-276:3:1695
-277:3:1699
-278:3:1700
-279:3:1707
-280:3:1708
-281:3:1719
-282:3:1720
-283:3:1721
-284:3:1732
-285:3:1737
-286:3:1738
-287:0:2904
-288:3:1750
-289:0:2904
-290:3:1752
-291:3:1753
-292:0:2904
-293:3:1757
-294:3:1761
-295:3:1762
-296:3:1770
-297:3:1771
-298:3:1775
-299:3:1776
-300:3:1784
-301:3:1789
-302:3:1790
-303:3:1801
-304:3:1802
-305:3:1813
-306:3:1814
-307:3:1815
-308:3:1826
-309:3:1831
-310:3:1832
-311:0:2904
-312:3:1844
-313:0:2904
-314:3:1846
-315:0:2904
-316:3:1847
-317:0:2904
-318:3:1857
-319:0:2904
-320:3:1858
-321:0:2904
-322:3:1862
-323:3:1863
-324:3:1867
-325:3:1871
-326:3:1872
-327:3:1876
-328:3:1884
-329:3:1885
-330:3:1890
-331:3:1897
-332:3:1898
-333:3:1905
-334:3:1910
-335:0:2904
-336:3:1921
-337:0:2904
-338:3:1925
-339:3:1926
-340:3:1930
-341:3:1934
-342:3:1935
-343:3:1939
-344:3:1947
-345:3:1948
-346:3:1953
-347:3:1960
-348:3:1961
-349:3:1968
-350:3:1973
-351:0:2904
-352:3:1984
-353:0:2904
-354:3:1992
-355:3:1993
-356:3:1997
-357:3:2001
-358:3:2002
-359:3:2006
-360:3:2014
-361:3:2015
-362:3:2020
-363:3:2027
-364:3:2028
-365:3:2035
-366:3:2040
-367:0:2904
-368:3:2055
-369:0:2904
-370:3:2057
-371:0:2904
-372:3:2058
-373:3:2062
-374:3:2063
-375:3:2071
-376:3:2072
-377:3:2076
-378:3:2077
-379:3:2085
-380:3:2090
-381:3:2094
-382:3:2095
-383:3:2102
-384:3:2103
-385:3:2114
-386:3:2115
-387:3:2116
-388:3:2127
-389:3:2132
-390:3:2133
-391:0:2904
-392:3:2145
-393:0:2904
-394:3:2147
-395:0:2904
-396:3:2150
-397:3:2151
-398:3:2163
-399:3:2164
-400:3:2168
-401:3:2169
-402:3:2177
-403:3:2182
-404:3:2186
-405:3:2187
-406:3:2194
-407:3:2195
-408:3:2206
-409:3:2207
-410:3:2208
-411:3:2219
-412:3:2224
-413:3:2225
-414:0:2904
-415:3:2237
-416:0:2904
-417:3:2239
-418:0:2904
-419:3:2240
-420:0:2904
-421:3:2241
-422:0:2904
-423:3:2242
-424:0:2904
-425:3:2243
-426:3:2247
-427:3:2248
-428:3:2256
-429:3:2257
-430:3:2261
-431:3:2262
-432:3:2270
-433:3:2275
-434:3:2279
-435:3:2280
-436:3:2287
-437:3:2288
-438:3:2299
-439:3:2300
-440:3:2301
-441:3:2312
-442:3:2317
-443:3:2318
-444:0:2904
-445:3:2330
-446:0:2904
-447:3:2532
-448:0:2904
-449:3:2630
-450:0:2904
-451:3:2631
-452:0:2904
-453:3:2635
-454:0:2904
-455:3:2641
-456:0:2904
-457:3:2645
-458:3:2646
-459:3:2650
-460:3:2654
-461:3:2655
-462:3:2659
-463:3:2667
-464:3:2668
-465:3:2673
-466:3:2680
-467:3:2681
-468:3:2688
-469:3:2693
-470:0:2904
-471:3:2704
-472:0:2904
-473:3:2708
-474:3:2709
-475:3:2713
-476:3:2717
-477:3:2718
-478:3:2722
-479:3:2730
-480:3:2731
-481:3:2736
-482:3:2743
-483:3:2744
-484:3:2751
-485:3:2756
-486:0:2904
-487:3:2767
-488:0:2904
-489:3:2775
-490:3:2776
-491:3:2780
-492:3:2784
-493:3:2785
-494:3:2789
-495:3:2797
-496:3:2798
-497:3:2803
-498:3:2810
-499:3:2811
-500:3:2818
-501:3:2823
-502:0:2904
-503:3:2838
-504:0:2904
-505:3:2840
-506:0:2904
-507:3:2841
-508:0:2904
-509:3:1662
-510:0:2904
-511:3:1663
-512:3:1667
-513:3:1668
-514:3:1676
-515:3:1677
-516:3:1681
-517:3:1682
-518:3:1690
-519:3:1695
-520:3:1699
-521:3:1700
-522:3:1707
-523:3:1708
-524:3:1719
-525:3:1720
-526:3:1721
-527:3:1732
-528:3:1737
-529:3:1738
-530:0:2904
-531:3:1750
-532:0:2904
-533:3:1752
-534:3:1753
-535:0:2904
-536:3:1757
-537:3:1761
-538:3:1762
-539:3:1770
-540:3:1771
-541:3:1775
-542:3:1776
-543:3:1784
-544:3:1789
-545:3:1790
-546:3:1801
-547:3:1802
-548:3:1813
-549:3:1814
-550:3:1815
-551:3:1826
-552:3:1831
-553:3:1832
-554:0:2904
-555:3:1844
-556:0:2904
-557:3:1846
-558:0:2904
-559:3:1847
-560:0:2904
-561:3:1857
-562:0:2904
-563:3:1858
-564:0:2904
-565:3:1862
-566:3:1863
-567:3:1867
-568:3:1871
-569:3:1872
-570:3:1876
-571:3:1884
-572:3:1885
-573:3:1890
-574:3:1897
-575:3:1898
-576:3:1905
-577:3:1910
-578:0:2904
-579:3:1921
-580:0:2904
-581:3:1925
-582:3:1926
-583:3:1930
-584:3:1934
-585:3:1935
-586:3:1939
-587:3:1947
-588:3:1948
-589:3:1953
-590:3:1960
-591:3:1961
-592:3:1968
-593:3:1973
-594:0:2904
-595:3:1984
-596:0:2904
-597:3:1992
-598:3:1993
-599:3:1997
-600:3:2001
-601:3:2002
-602:3:2006
-603:3:2014
-604:3:2015
-605:3:2020
-606:3:2027
-607:3:2028
-608:3:2035
-609:3:2040
-610:0:2904
-611:3:2055
-612:0:2904
-613:3:2057
-614:0:2904
-615:3:2058
-616:3:2062
-617:3:2063
-618:3:2071
-619:3:2072
-620:3:2076
-621:3:2077
-622:3:2085
-623:3:2090
-624:3:2094
-625:3:2095
-626:3:2102
-627:3:2103
-628:3:2114
-629:3:2115
-630:3:2116
-631:3:2127
-632:3:2132
-633:3:2133
-634:0:2904
-635:3:2145
-636:0:2904
-637:3:2147
-638:0:2904
-639:3:2150
-640:3:2151
-641:3:2163
-642:3:2164
-643:3:2168
-644:3:2169
-645:3:2177
-646:3:2182
-647:3:2186
-648:3:2187
-649:3:2194
-650:3:2195
-651:3:2206
-652:3:2207
-653:3:2208
-654:3:2219
-655:3:2224
-656:3:2225
-657:0:2904
-658:3:2237
-659:0:2904
-660:3:2239
-661:0:2904
-662:3:2240
-663:0:2904
-664:3:2241
-665:0:2904
-666:3:2242
-667:0:2904
-668:3:2243
-669:3:2247
-670:3:2248
-671:3:2256
-672:3:2257
-673:3:2261
-674:3:2262
-675:3:2270
-676:3:2275
-677:3:2279
-678:3:2280
-679:3:2287
-680:3:2288
-681:3:2299
-682:3:2300
-683:3:2301
-684:3:2312
-685:3:2317
-686:3:2318
-687:0:2904
-688:3:2330
-689:0:2904
-690:3:2532
-691:0:2904
-692:3:2630
-693:0:2904
-694:3:2631
-695:0:2904
-696:3:2635
-697:0:2904
-698:3:2641
-699:0:2904
-700:3:2645
-701:3:2646
-702:3:2650
-703:3:2654
-704:3:2655
-705:3:2659
-706:3:2667
-707:3:2668
-708:3:2673
-709:3:2680
-710:3:2681
-711:3:2688
-712:3:2693
-713:0:2904
-714:3:2704
-715:0:2904
-716:3:2708
-717:3:2709
-718:3:2713
-719:3:2717
-720:3:2718
-721:3:2722
-722:3:2730
-723:3:2731
-724:3:2736
-725:3:2743
-726:3:2744
-727:3:2751
-728:3:2756
-729:0:2904
-730:3:2767
-731:0:2904
-732:3:2775
-733:3:2776
-734:3:2780
-735:3:2784
-736:3:2785
-737:3:2789
-738:3:2797
-739:3:2798
-740:3:2803
-741:3:2810
-742:3:2811
-743:3:2818
-744:3:2823
-745:0:2904
-746:3:2838
-747:0:2904
-748:3:2840
-749:0:2904
-750:3:2841
-751:0:2904
-752:3:1662
-753:0:2904
-754:3:1663
-755:3:1667
-756:3:1668
-757:3:1676
-758:3:1677
-759:3:1681
-760:3:1682
-761:3:1690
-762:3:1695
-763:3:1699
-764:3:1700
-765:3:1707
-766:3:1708
-767:3:1719
-768:3:1720
-769:3:1721
-770:3:1732
-771:3:1737
-772:3:1738
-773:0:2904
-774:3:1750
-775:0:2904
-776:3:1752
-777:3:1753
-778:0:2904
-779:3:1757
-780:3:1761
-781:3:1762
-782:3:1770
-783:3:1771
-784:3:1775
-785:3:1776
-786:3:1784
-787:3:1789
-788:3:1790
-789:3:1801
-790:3:1802
-791:3:1813
-792:3:1814
-793:3:1815
-794:3:1826
-795:3:1831
-796:3:1832
-797:0:2904
-798:3:1844
-799:0:2904
-800:3:1846
-801:0:2904
-802:3:1847
-803:0:2904
-804:3:1857
-805:0:2904
-806:3:1858
-807:0:2904
-808:3:1862
-809:3:1863
-810:3:1867
-811:3:1871
-812:3:1872
-813:3:1876
-814:3:1884
-815:3:1885
-816:3:1890
-817:3:1897
-818:3:1898
-819:3:1905
-820:3:1910
-821:0:2904
-822:3:1921
-823:0:2904
-824:3:1925
-825:3:1926
-826:3:1930
-827:3:1934
-828:3:1935
-829:3:1939
-830:3:1947
-831:3:1948
-832:3:1953
-833:3:1960
-834:3:1961
-835:3:1968
-836:3:1973
-837:0:2904
-838:3:1984
-839:0:2904
-840:3:1992
-841:3:1993
-842:3:1997
-843:3:2001
-844:3:2002
-845:3:2006
-846:3:2014
-847:3:2015
-848:3:2020
-849:3:2027
-850:3:2028
-851:3:2035
-852:3:2040
-853:0:2904
-854:3:2055
-855:0:2904
-856:3:2057
-857:0:2904
-858:3:2058
-859:3:2062
-860:3:2063
-861:3:2071
-862:3:2072
-863:3:2076
-864:3:2077
-865:3:2085
-866:3:2090
-867:3:2094
-868:3:2095
-869:3:2102
-870:3:2103
-871:3:2114
-872:3:2115
-873:3:2116
-874:3:2127
-875:3:2132
-876:3:2133
-877:0:2904
-878:3:2145
-879:0:2904
-880:3:2147
-881:0:2904
-882:3:2150
-883:3:2151
-884:3:2163
-885:3:2164
-886:3:2168
-887:3:2169
-888:3:2177
-889:3:2182
-890:3:2186
-891:3:2187
-892:3:2194
-893:3:2195
-894:3:2206
-895:3:2207
-896:3:2208
-897:3:2219
-898:3:2224
-899:3:2225
-900:0:2904
-901:3:2237
-902:0:2904
-903:3:2239
-904:0:2904
-905:3:2240
-906:0:2904
-907:3:2241
-908:0:2904
-909:3:2242
-910:0:2904
-911:3:2243
-912:3:2247
-913:3:2248
-914:3:2256
-915:3:2257
-916:3:2261
-917:3:2262
-918:3:2270
-919:3:2275
-920:3:2279
-921:3:2280
-922:3:2287
-923:3:2288
-924:3:2299
-925:3:2300
-926:3:2301
-927:3:2312
-928:3:2317
-929:3:2318
-930:0:2904
-931:3:2330
-932:0:2904
-933:3:2532
-934:0:2904
-935:3:2630
-936:0:2904
-937:3:2631
-938:0:2904
-939:3:2635
-940:0:2904
-941:3:2641
-942:0:2904
-943:3:2645
-944:3:2646
-945:3:2650
-946:3:2654
-947:3:2655
-948:3:2659
-949:3:2667
-950:3:2668
-951:3:2673
-952:3:2680
-953:3:2681
-954:3:2688
-955:3:2693
-956:0:2904
-957:3:2704
-958:0:2904
-959:2:848
-960:0:2904
-961:2:854
-962:0:2904
-963:2:855
-964:0:2904
-965:2:856
-966:0:2904
-967:2:857
-968:0:2904
-969:1:2
-970:0:2904
-971:2:858
-972:0:2904
-973:1:8
-974:0:2904
-975:1:9
-976:0:2904
-977:1:10
-978:0:2904
-979:1:11
-980:0:2904
-981:2:857
-982:0:2904
-983:1:12
-984:1:16
-985:1:17
-986:1:25
-987:1:26
-988:1:30
-989:1:31
-990:1:39
-991:1:44
-992:1:48
-993:1:49
-994:1:63
-995:1:64
-996:1:68
-997:1:69
-998:1:70
-999:1:81
-1000:1:86
-1001:1:87
-1002:0:2904
-1003:2:858
-1004:0:2904
-1005:1:99
-1006:0:2904
-1007:2:859
-1008:0:2904
-1009:2:860
-1010:0:2904
-1011:2:871
-1012:0:2904
-1013:2:872
-1014:0:2904
-1015:2:873
-1016:2:877
-1017:2:878
-1018:2:886
-1019:2:887
-1020:2:891
-1021:2:892
-1022:2:900
-1023:2:905
-1024:2:909
-1025:2:910
-1026:2:924
-1027:2:925
-1028:2:929
-1029:2:930
-1030:2:931
-1031:2:942
-1032:2:947
-1033:2:948
-1034:0:2904
-1035:2:960
-1036:0:2904
-1037:2:961
-1038:2:965
-1039:2:966
-1040:2:974
-1041:2:975
-1042:2:979
-1043:2:980
-1044:2:988
-1045:2:993
-1046:2:997
-1047:2:998
-1048:2:1012
-1049:2:1013
-1050:2:1017
-1051:2:1018
-1052:2:1019
-1053:2:1030
-1054:2:1035
-1055:2:1036
-1056:0:2904
-1057:2:1048
-1058:0:2904
-1059:2:1049
-1060:0:2904
-1061:3:2708
-1062:3:2709
-1063:3:2713
-1064:3:2717
-1065:3:2718
-1066:3:2722
-1067:3:2730
-1068:3:2731
-1069:3:2736
-1070:3:2743
-1071:3:2744
-1072:3:2751
-1073:3:2756
-1074:0:2904
-1075:3:2767
-1076:0:2904
-1077:3:2775
-1078:3:2776
-1079:3:2780
-1080:3:2784
-1081:3:2785
-1082:3:2789
-1083:3:2797
-1084:3:2798
-1085:3:2803
-1086:3:2810
-1087:3:2811
-1088:3:2818
-1089:3:2823
-1090:0:2904
-1091:3:2838
-1092:0:2904
-1093:3:2840
-1094:0:2904
-1095:3:2841
-1096:0:2904
-1097:3:1662
-1098:0:2904
-1099:3:1663
-1100:3:1667
-1101:3:1668
-1102:3:1676
-1103:3:1677
-1104:3:1681
-1105:3:1682
-1106:3:1690
-1107:3:1695
-1108:3:1699
-1109:3:1700
-1110:3:1707
-1111:3:1708
-1112:3:1719
-1113:3:1720
-1114:3:1721
-1115:3:1732
-1116:3:1737
-1117:3:1738
-1118:0:2904
-1119:3:1750
-1120:0:2904
-1121:3:1752
-1122:3:1753
-1123:0:2904
-1124:3:1757
-1125:3:1761
-1126:3:1762
-1127:3:1770
-1128:3:1771
-1129:3:1775
-1130:3:1776
-1131:3:1784
-1132:3:1789
-1133:3:1790
-1134:3:1801
-1135:3:1802
-1136:3:1813
-1137:3:1814
-1138:3:1815
-1139:3:1826
-1140:3:1831
-1141:3:1832
-1142:0:2904
-1143:3:1844
-1144:0:2904
-1145:3:1846
-1146:0:2904
-1147:3:1847
-1148:0:2904
-1149:3:1857
-1150:0:2904
-1151:3:1858
-1152:0:2904
-1153:3:1862
-1154:3:1863
-1155:3:1867
-1156:3:1871
-1157:3:1872
-1158:3:1876
-1159:3:1884
-1160:3:1885
-1161:3:1890
-1162:3:1897
-1163:3:1898
-1164:3:1905
-1165:3:1910
-1166:0:2904
-1167:3:1921
-1168:0:2904
-1169:2:1050
-1170:2:1054
-1171:2:1055
-1172:2:1063
-1173:2:1064
-1174:2:1068
-1175:2:1069
-1176:2:1077
-1177:2:1082
-1178:2:1086
-1179:2:1087
-1180:2:1094
-1181:2:1095
-1182:2:1106
-1183:2:1107
-1184:2:1108
-1185:2:1119
-1186:2:1131
-1187:2:1132
-1188:0:2904
-1189:2:1137
-1190:0:2904
-1191:2:1338
-1192:0:2904
-1193:2:1339
-1194:0:2904
-1195:2:1344
-1196:0:2904
-1197:2:1349
-1198:0:2904
-1199:3:1925
-1200:3:1926
-1201:3:1930
-1202:3:1931
-1203:3:1939
-1204:3:1947
-1205:3:1948
-1206:3:1953
-1207:3:1960
-1208:3:1961
-1209:3:1968
-1210:3:1973
-1211:0:2904
-1212:3:1984
-1213:0:2904
-1214:3:1992
-1215:3:1993
-1216:3:1997
-1217:3:2001
-1218:3:2002
-1219:3:2006
-1220:3:2014
-1221:3:2015
-1222:3:2020
-1223:3:2027
-1224:3:2028
-1225:3:2035
-1226:3:2040
-1227:0:2904
-1228:3:2055
-1229:0:2904
-1230:3:2057
-1231:0:2904
-1232:3:2058
-1233:3:2062
-1234:3:2063
-1235:3:2071
-1236:3:2072
-1237:3:2076
-1238:3:2077
-1239:3:2085
-1240:3:2090
-1241:3:2094
-1242:3:2095
-1243:3:2102
-1244:3:2103
-1245:3:2114
-1246:3:2115
-1247:3:2116
-1248:3:2127
-1249:3:2132
-1250:3:2133
-1251:0:2904
-1252:3:2145
-1253:0:2904
-1254:3:2147
-1255:0:2904
-1256:3:2150
-1257:3:2151
-1258:3:2163
-1259:3:2164
-1260:3:2168
-1261:3:2169
-1262:3:2177
-1263:3:2182
-1264:3:2186
-1265:3:2187
-1266:3:2194
-1267:3:2195
-1268:3:2206
-1269:3:2207
-1270:3:2208
-1271:3:2219
-1272:3:2224
-1273:3:2225
-1274:0:2904
-1275:3:2237
-1276:0:2904
-1277:3:2239
-1278:0:2904
-1279:3:2240
-1280:0:2904
-1281:3:2241
-1282:0:2904
-1283:3:2242
-1284:0:2904
-1285:3:2243
-1286:3:2247
-1287:3:2248
-1288:3:2256
-1289:3:2257
-1290:3:2261
-1291:3:2262
-1292:3:2270
-1293:3:2275
-1294:3:2279
-1295:3:2280
-1296:3:2287
-1297:3:2288
-1298:3:2299
-1299:3:2300
-1300:3:2301
-1301:3:2312
-1302:3:2317
-1303:3:2318
-1304:0:2904
-1305:3:2330
-1306:0:2904
-1307:3:2532
-1308:0:2904
-1309:3:2630
-1310:0:2904
-1311:3:2631
-1312:0:2904
-1313:3:2635
-1314:0:2904
-1315:3:2641
-1316:0:2904
-1317:3:2645
-1318:3:2646
-1319:3:2650
-1320:3:2654
-1321:3:2655
-1322:3:2659
-1323:3:2667
-1324:3:2668
-1325:3:2673
-1326:3:2680
-1327:3:2681
-1328:3:2688
-1329:3:2693
-1330:0:2904
-1331:3:2704
-1332:0:2904
-1333:3:2708
-1334:3:2709
-1335:3:2713
-1336:3:2717
-1337:3:2718
-1338:3:2722
-1339:3:2730
-1340:3:2731
-1341:3:2736
-1342:3:2743
-1343:3:2744
-1344:3:2751
-1345:3:2756
-1346:0:2904
-1347:3:2767
-1348:0:2904
-1349:3:2775
-1350:3:2776
-1351:3:2780
-1352:3:2784
-1353:3:2785
-1354:3:2789
-1355:3:2797
-1356:3:2798
-1357:3:2803
-1358:3:2810
-1359:3:2811
-1360:3:2818
-1361:3:2823
-1362:0:2904
-1363:3:2838
-1364:0:2904
-1365:3:2840
-1366:0:2904
-1367:3:2841
-1368:0:2904
-1369:3:2844
-1370:0:2904
-1371:3:2849
-1372:0:2904
-1373:2:1350
-1374:0:2902
-1375:3:2850
-1376:0:2908
-1377:1:296
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress.ltl b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.define b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.log
deleted file mode 100644 (file)
index a1a6122..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-depth 12: Claim reached state 9 (line 747)
-depth 86: Claim reached state 9 (line 746)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10679, errors: 0
-    38182 states, stored (88898 visited)
-   997091 states, matched
-  1085989 transitions (= visited+matched)
-  3694897 atomic steps
-hash conflicts:      9602 (resolved)
-
-Stats on memory usage (in Megabytes):
-    3.059      equivalent memory usage for states (stored*(State-vector + overhead))
-    2.930      actual memory usage for states (compression: 95.79%)
-               state-vector as stored = 52 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  468.596      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 160, "(1)"
-       line 651, "pan.___", state 213, "(1)"
-       line 174, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 233, "(1)"
-       line 159, "pan.___", state 254, "(1)"
-       line 163, "pan.___", state 262, "(1)"
-       line 167, "pan.___", state 274, "(1)"
-       line 174, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 317, "(1)"
-       line 163, "pan.___", state 325, "(1)"
-       line 167, "pan.___", state 337, "(1)"
-       line 174, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 384, "(1)"
-       line 163, "pan.___", state 392, "(1)"
-       line 167, "pan.___", state 404, "(1)"
-       line 398, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 441, "(1)"
-       line 407, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 470, "(1)"
-       line 417, "pan.___", state 500, "(1)"
-       line 398, "pan.___", state 526, "(1)"
-       line 402, "pan.___", state 540, "(1)"
-       line 407, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 599, "(1)"
-       line 402, "pan.___", state 640, "(1)"
-       line 407, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 699, "(1)"
-       line 174, "pan.___", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 722, "(1)"
-       line 178, "pan.___", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 731, "(1)"
-       line 178, "pan.___", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 732, "else"
-       line 176, "pan.___", state 737, "((j<1))"
-       line 176, "pan.___", state 737, "((j>=1))"
-       line 182, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 752, "(1)"
-       line 163, "pan.___", state 760, "(1)"
-       line 163, "pan.___", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 761, "else"
-       line 161, "pan.___", state 766, "((j<1))"
-       line 161, "pan.___", state 766, "((j>=1))"
-       line 167, "pan.___", state 772, "(1)"
-       line 167, "pan.___", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 773, "else"
-       line 169, "pan.___", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 776, "else"
-       line 174, "pan.___", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 785, "(1)"
-       line 178, "pan.___", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 794, "(1)"
-       line 178, "pan.___", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 795, "else"
-       line 176, "pan.___", state 800, "((j<1))"
-       line 176, "pan.___", state 800, "((j>=1))"
-       line 182, "pan.___", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 815, "(1)"
-       line 163, "pan.___", state 823, "(1)"
-       line 163, "pan.___", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 824, "else"
-       line 161, "pan.___", state 829, "((j<1))"
-       line 161, "pan.___", state 829, "((j>=1))"
-       line 167, "pan.___", state 835, "(1)"
-       line 167, "pan.___", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 836, "else"
-       line 169, "pan.___", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 839, "else"
-       line 201, "pan.___", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 841, "else"
-       line 213, "pan.___", state 845, "((i<1))"
-       line 213, "pan.___", state 845, "((i>=1))"
-       line 174, "pan.___", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 852, "(1)"
-       line 178, "pan.___", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 861, "(1)"
-       line 178, "pan.___", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 862, "else"
-       line 176, "pan.___", state 867, "((j<1))"
-       line 176, "pan.___", state 867, "((j>=1))"
-       line 182, "pan.___", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 882, "(1)"
-       line 163, "pan.___", state 890, "(1)"
-       line 163, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 891, "else"
-       line 161, "pan.___", state 896, "((j<1))"
-       line 161, "pan.___", state 896, "((j>=1))"
-       line 167, "pan.___", state 902, "(1)"
-       line 167, "pan.___", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 903, "else"
-       line 169, "pan.___", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 906, "else"
-       line 201, "pan.___", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 908, "else"
-       line 220, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 909, "else"
-       line 355, "pan.___", state 915, "((sighand_exec==1))"
-       line 355, "pan.___", state 915, "else"
-       line 361, "pan.___", state 918, "sighand_exec = 1"
-       line 398, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 933, "(1)"
-       line 398, "pan.___", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 934, "else"
-       line 398, "pan.___", state 937, "(1)"
-       line 402, "pan.___", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 947, "(1)"
-       line 402, "pan.___", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 948, "else"
-       line 402, "pan.___", state 951, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 400, "pan.___", state 957, "((i<1))"
-       line 400, "pan.___", state 957, "((i>=1))"
-       line 407, "pan.___", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 976, "(1)"
-       line 408, "pan.___", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 977, "else"
-       line 408, "pan.___", state 980, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 412, "pan.___", state 989, "(1)"
-       line 412, "pan.___", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 990, "else"
-       line 412, "pan.___", state 993, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 410, "pan.___", state 999, "((i<1))"
-       line 410, "pan.___", state 999, "((i>=1))"
-       line 417, "pan.___", state 1006, "(1)"
-       line 417, "pan.___", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1007, "else"
-       line 417, "pan.___", state 1010, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 361, "pan.___", state 1023, "sighand_exec = 1"
-       line 402, "pan.___", state 1054, "(1)"
-       line 407, "pan.___", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1113, "(1)"
-       line 402, "pan.___", state 1151, "(1)"
-       line 407, "pan.___", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1210, "(1)"
-       line 398, "pan.___", state 1236, "(1)"
-       line 402, "pan.___", state 1250, "(1)"
-       line 407, "pan.___", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1309, "(1)"
-       line 402, "pan.___", state 1350, "(1)"
-       line 407, "pan.___", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1409, "(1)"
-       line 174, "pan.___", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1432, "(1)"
-       line 178, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1441, "(1)"
-       line 178, "pan.___", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1442, "else"
-       line 176, "pan.___", state 1447, "((j<1))"
-       line 176, "pan.___", state 1447, "((j>=1))"
-       line 182, "pan.___", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1462, "(1)"
-       line 163, "pan.___", state 1470, "(1)"
-       line 163, "pan.___", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1471, "else"
-       line 161, "pan.___", state 1476, "((j<1))"
-       line 161, "pan.___", state 1476, "((j>=1))"
-       line 167, "pan.___", state 1482, "(1)"
-       line 167, "pan.___", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1483, "else"
-       line 169, "pan.___", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 1486, "else"
-       line 174, "pan.___", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 1495, "(1)"
-       line 178, "pan.___", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1504, "(1)"
-       line 178, "pan.___", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 1505, "else"
-       line 176, "pan.___", state 1510, "((j<1))"
-       line 176, "pan.___", state 1510, "((j>=1))"
-       line 182, "pan.___", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1525, "(1)"
-       line 163, "pan.___", state 1533, "(1)"
-       line 163, "pan.___", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 1534, "else"
-       line 161, "pan.___", state 1539, "((j<1))"
-       line 161, "pan.___", state 1539, "((j>=1))"
-       line 167, "pan.___", state 1545, "(1)"
-       line 167, "pan.___", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 1546, "else"
-       line 169, "pan.___", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 1549, "else"
-       line 201, "pan.___", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 1551, "else"
-       line 213, "pan.___", state 1555, "((i<1))"
-       line 213, "pan.___", state 1555, "((i>=1))"
-       line 174, "pan.___", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1562, "(1)"
-       line 178, "pan.___", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1571, "(1)"
-       line 178, "pan.___", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1572, "else"
-       line 176, "pan.___", state 1577, "((j<1))"
-       line 176, "pan.___", state 1577, "((j>=1))"
-       line 182, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1592, "(1)"
-       line 163, "pan.___", state 1600, "(1)"
-       line 163, "pan.___", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1601, "else"
-       line 161, "pan.___", state 1606, "((j<1))"
-       line 161, "pan.___", state 1606, "((j>=1))"
-       line 167, "pan.___", state 1612, "(1)"
-       line 167, "pan.___", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1613, "else"
-       line 169, "pan.___", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 1616, "else"
-       line 201, "pan.___", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 1618, "else"
-       line 220, "pan.___", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 1619, "else"
-       line 355, "pan.___", state 1625, "((sighand_exec==1))"
-       line 355, "pan.___", state 1625, "else"
-       line 361, "pan.___", state 1628, "sighand_exec = 1"
-       line 398, "pan.___", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 1643, "(1)"
-       line 398, "pan.___", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 1644, "else"
-       line 398, "pan.___", state 1647, "(1)"
-       line 402, "pan.___", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 1657, "(1)"
-       line 402, "pan.___", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 1658, "else"
-       line 402, "pan.___", state 1661, "(1)"
-       line 402, "pan.___", state 1662, "(1)"
-       line 402, "pan.___", state 1662, "(1)"
-       line 400, "pan.___", state 1667, "((i<1))"
-       line 400, "pan.___", state 1667, "((i>=1))"
-       line 407, "pan.___", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 1686, "(1)"
-       line 408, "pan.___", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 1687, "else"
-       line 408, "pan.___", state 1690, "(1)"
-       line 408, "pan.___", state 1691, "(1)"
-       line 408, "pan.___", state 1691, "(1)"
-       line 412, "pan.___", state 1699, "(1)"
-       line 412, "pan.___", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 1700, "else"
-       line 412, "pan.___", state 1703, "(1)"
-       line 412, "pan.___", state 1704, "(1)"
-       line 412, "pan.___", state 1704, "(1)"
-       line 410, "pan.___", state 1709, "((i<1))"
-       line 410, "pan.___", state 1709, "((i>=1))"
-       line 417, "pan.___", state 1716, "(1)"
-       line 417, "pan.___", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1717, "else"
-       line 417, "pan.___", state 1720, "(1)"
-       line 417, "pan.___", state 1721, "(1)"
-       line 417, "pan.___", state 1721, "(1)"
-       line 419, "pan.___", state 1724, "(1)"
-       line 419, "pan.___", state 1724, "(1)"
-       line 361, "pan.___", state 1733, "sighand_exec = 1"
-       line 178, "pan.___", state 1758, "(1)"
-       line 182, "pan.___", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1779, "(1)"
-       line 163, "pan.___", state 1787, "(1)"
-       line 167, "pan.___", state 1799, "(1)"
-       line 174, "pan.___", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1842, "(1)"
-       line 163, "pan.___", state 1850, "(1)"
-       line 167, "pan.___", state 1862, "(1)"
-       line 174, "pan.___", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1909, "(1)"
-       line 163, "pan.___", state 1917, "(1)"
-       line 167, "pan.___", state 1929, "(1)"
-       line 701, "pan.___", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 0.85 seconds
-pan: rate 104585.88 states/second
-pan: avg transition delay 7.827e-07 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 5b64404..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define READER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index 7c42af1..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4401
-2:4:4353
-3:4:4356
-4:4:4356
-5:4:4359
-6:4:4367
-7:4:4367
-8:4:4370
-9:4:4376
-10:4:4380
-11:4:4380
-12:4:4383
-13:4:4391
-14:4:4395
-15:4:4396
-16:0:4401
-17:4:4398
-18:0:4401
-19:3:2479
-20:0:4401
-21:3:2485
-22:0:4401
-23:3:2486
-24:0:4401
-25:3:2487
-26:3:2491
-27:3:2492
-28:3:2500
-29:3:2501
-30:3:2505
-31:3:2506
-32:3:2514
-33:3:2519
-34:3:2523
-35:3:2524
-36:3:2531
-37:3:2532
-38:3:2543
-39:3:2544
-40:3:2545
-41:3:2556
-42:3:2561
-43:3:2562
-44:0:4401
-45:3:2574
-46:0:4401
-47:3:2576
-48:3:2577
-49:0:4401
-50:3:2581
-51:3:2585
-52:3:2586
-53:3:2594
-54:3:2595
-55:3:2599
-56:3:2600
-57:3:2608
-58:3:2613
-59:3:2614
-60:3:2625
-61:3:2626
-62:3:2637
-63:3:2638
-64:3:2639
-65:3:2650
-66:3:2655
-67:3:2656
-68:0:4401
-69:3:2668
-70:0:4401
-71:3:2670
-72:0:4401
-73:3:2671
-74:0:4401
-75:3:2681
-76:0:4401
-77:3:2682
-78:0:4401
-79:3:2686
-80:3:2687
-81:3:2691
-82:3:2695
-83:3:2696
-84:3:2700
-85:3:2708
-86:3:2709
-87:3:2714
-88:3:2721
-89:3:2722
-90:3:2729
-91:3:2734
-92:0:4401
-93:3:2745
-94:0:4401
-95:3:2749
-96:3:2750
-97:3:2754
-98:3:2758
-99:3:2759
-100:3:2763
-101:3:2771
-102:3:2772
-103:3:2777
-104:3:2784
-105:3:2785
-106:3:2792
-107:3:2797
-108:0:4401
-109:3:2808
-110:0:4401
-111:3:2816
-112:3:2817
-113:3:2821
-114:3:2825
-115:3:2826
-116:3:2830
-117:3:2838
-118:3:2839
-119:3:2844
-120:3:2851
-121:3:2852
-122:3:2859
-123:3:2864
-124:0:4401
-125:3:2879
-126:0:4401
-127:3:2881
-128:0:4401
-129:3:2882
-130:3:2886
-131:3:2887
-132:3:2895
-133:3:2896
-134:3:2900
-135:3:2901
-136:3:2909
-137:3:2914
-138:3:2918
-139:3:2919
-140:3:2926
-141:3:2927
-142:3:2938
-143:3:2939
-144:3:2940
-145:3:2951
-146:3:2956
-147:3:2957
-148:0:4401
-149:3:2969
-150:0:4401
-151:3:2971
-152:0:4401
-153:3:2974
-154:3:2975
-155:3:2987
-156:3:2988
-157:3:2992
-158:3:2993
-159:3:3001
-160:3:3006
-161:3:3010
-162:3:3011
-163:3:3018
-164:3:3019
-165:3:3030
-166:3:3031
-167:3:3032
-168:3:3043
-169:3:3048
-170:3:3049
-171:0:4401
-172:3:3061
-173:0:4401
-174:3:3063
-175:0:4401
-176:3:3064
-177:0:4401
-178:3:3065
-179:0:4401
-180:3:3066
-181:0:4401
-182:3:3067
-183:3:3071
-184:3:3072
-185:3:3080
-186:3:3081
-187:3:3085
-188:3:3086
-189:3:3094
-190:3:3099
-191:3:3103
-192:3:3104
-193:3:3111
-194:3:3112
-195:3:3123
-196:3:3124
-197:3:3125
-198:3:3136
-199:3:3141
-200:3:3142
-201:0:4401
-202:3:3154
-203:0:4401
-204:3:3356
-205:0:4401
-206:3:3454
-207:0:4401
-208:3:3455
-209:0:4401
-210:3:3459
-211:0:4401
-212:3:3465
-213:3:3469
-214:3:3470
-215:3:3478
-216:3:3479
-217:3:3483
-218:3:3484
-219:3:3492
-220:3:3497
-221:3:3501
-222:3:3502
-223:3:3509
-224:3:3510
-225:3:3521
-226:3:3522
-227:3:3523
-228:3:3534
-229:3:3539
-230:3:3540
-231:0:4401
-232:3:3552
-233:0:4401
-234:3:3554
-235:0:4401
-236:3:3555
-237:3:3559
-238:3:3560
-239:3:3568
-240:3:3569
-241:3:3573
-242:3:3574
-243:3:3582
-244:3:3587
-245:3:3591
-246:3:3592
-247:3:3599
-248:3:3600
-249:3:3611
-250:3:3612
-251:3:3613
-252:3:3624
-253:3:3629
-254:3:3630
-255:0:4401
-256:3:3642
-257:0:4401
-258:3:3644
-259:0:4401
-260:3:3647
-261:3:3648
-262:3:3660
-263:3:3661
-264:3:3665
-265:3:3666
-266:3:3674
-267:3:3679
-268:3:3683
-269:3:3684
-270:3:3691
-271:3:3692
-272:3:3703
-273:3:3704
-274:3:3705
-275:3:3716
-276:3:3721
-277:3:3722
-278:0:4401
-279:3:3734
-280:0:4401
-281:3:3736
-282:0:4401
-283:3:3737
-284:0:4401
-285:3:3738
-286:0:4401
-287:3:3739
-288:0:4401
-289:3:3740
-290:3:3744
-291:3:3745
-292:3:3753
-293:3:3754
-294:3:3758
-295:3:3759
-296:3:3767
-297:3:3772
-298:3:3776
-299:3:3777
-300:3:3784
-301:3:3785
-302:3:3796
-303:3:3797
-304:3:3798
-305:3:3809
-306:3:3814
-307:3:3815
-308:0:4401
-309:3:3827
-310:0:4401
-311:3:4029
-312:0:4401
-313:3:4127
-314:0:4401
-315:3:4128
-316:0:4401
-317:3:4132
-318:0:4401
-319:3:4138
-320:0:4401
-321:3:4142
-322:3:4143
-323:3:4147
-324:3:4151
-325:3:4152
-326:3:4156
-327:3:4164
-328:3:4165
-329:3:4170
-330:3:4177
-331:3:4178
-332:3:4185
-333:3:4190
-334:0:4401
-335:3:4201
-336:0:4401
-337:3:4205
-338:3:4206
-339:3:4210
-340:3:4214
-341:3:4215
-342:3:4219
-343:3:4227
-344:3:4228
-345:3:4233
-346:3:4240
-347:3:4241
-348:3:4248
-349:3:4253
-350:0:4401
-351:3:4264
-352:0:4401
-353:3:4272
-354:3:4273
-355:3:4277
-356:3:4281
-357:3:4282
-358:3:4286
-359:3:4294
-360:3:4295
-361:3:4300
-362:3:4307
-363:3:4308
-364:3:4315
-365:3:4320
-366:0:4401
-367:3:4335
-368:0:4401
-369:3:4337
-370:0:4401
-371:3:4338
-372:0:4401
-373:3:2486
-374:0:4401
-375:3:2487
-376:3:2491
-377:3:2492
-378:3:2500
-379:3:2501
-380:3:2505
-381:3:2506
-382:3:2514
-383:3:2519
-384:3:2523
-385:3:2524
-386:3:2531
-387:3:2532
-388:3:2543
-389:3:2544
-390:3:2545
-391:3:2556
-392:3:2561
-393:3:2562
-394:0:4401
-395:3:2574
-396:0:4401
-397:3:2576
-398:3:2577
-399:0:4401
-400:3:2581
-401:3:2585
-402:3:2586
-403:3:2594
-404:3:2595
-405:3:2599
-406:3:2600
-407:3:2608
-408:3:2613
-409:3:2614
-410:3:2625
-411:3:2626
-412:3:2637
-413:3:2638
-414:3:2639
-415:3:2650
-416:3:2655
-417:3:2656
-418:0:4401
-419:3:2668
-420:0:4401
-421:3:2670
-422:0:4401
-423:3:2671
-424:0:4401
-425:3:2681
-426:0:4401
-427:3:2682
-428:0:4401
-429:3:2686
-430:3:2687
-431:3:2691
-432:3:2695
-433:3:2696
-434:3:2700
-435:3:2708
-436:3:2709
-437:3:2714
-438:3:2721
-439:3:2722
-440:3:2729
-441:3:2734
-442:0:4401
-443:3:2745
-444:0:4401
-445:3:2749
-446:3:2750
-447:3:2754
-448:3:2758
-449:3:2759
-450:3:2763
-451:3:2771
-452:3:2772
-453:3:2777
-454:3:2784
-455:3:2785
-456:3:2792
-457:3:2797
-458:0:4401
-459:3:2808
-460:0:4401
-461:3:2816
-462:3:2817
-463:3:2821
-464:3:2825
-465:3:2826
-466:3:2830
-467:3:2838
-468:3:2839
-469:3:2844
-470:3:2851
-471:3:2852
-472:3:2859
-473:3:2864
-474:0:4401
-475:3:2879
-476:0:4401
-477:3:2881
-478:0:4401
-479:3:2882
-480:3:2886
-481:3:2887
-482:3:2895
-483:3:2896
-484:3:2900
-485:3:2901
-486:3:2909
-487:3:2914
-488:3:2918
-489:3:2919
-490:3:2926
-491:3:2927
-492:3:2938
-493:3:2939
-494:3:2940
-495:3:2951
-496:3:2956
-497:3:2957
-498:0:4401
-499:3:2969
-500:0:4401
-501:3:2971
-502:0:4401
-503:3:2974
-504:3:2975
-505:3:2987
-506:3:2988
-507:3:2992
-508:3:2993
-509:3:3001
-510:3:3006
-511:3:3010
-512:3:3011
-513:3:3018
-514:3:3019
-515:3:3030
-516:3:3031
-517:3:3032
-518:3:3043
-519:3:3048
-520:3:3049
-521:0:4401
-522:3:3061
-523:0:4401
-524:3:3063
-525:0:4401
-526:3:3064
-527:0:4401
-528:3:3065
-529:0:4401
-530:3:3066
-531:0:4401
-532:3:3067
-533:3:3071
-534:3:3072
-535:3:3080
-536:3:3081
-537:3:3085
-538:3:3086
-539:3:3094
-540:3:3099
-541:3:3103
-542:3:3104
-543:3:3111
-544:3:3112
-545:3:3123
-546:3:3124
-547:3:3125
-548:3:3136
-549:3:3141
-550:3:3142
-551:0:4401
-552:3:3154
-553:0:4401
-554:3:3356
-555:0:4401
-556:3:3454
-557:0:4401
-558:3:3455
-559:0:4401
-560:3:3459
-561:0:4401
-562:3:3465
-563:3:3469
-564:3:3470
-565:3:3478
-566:3:3479
-567:3:3483
-568:3:3484
-569:3:3492
-570:3:3497
-571:3:3501
-572:3:3502
-573:3:3509
-574:3:3510
-575:3:3521
-576:3:3522
-577:3:3523
-578:3:3534
-579:3:3539
-580:3:3540
-581:0:4401
-582:3:3552
-583:0:4401
-584:3:3554
-585:0:4401
-586:3:3555
-587:3:3559
-588:3:3560
-589:3:3568
-590:3:3569
-591:3:3573
-592:3:3574
-593:3:3582
-594:3:3587
-595:3:3591
-596:3:3592
-597:3:3599
-598:3:3600
-599:3:3611
-600:3:3612
-601:3:3613
-602:3:3624
-603:3:3629
-604:3:3630
-605:0:4401
-606:3:3642
-607:0:4401
-608:3:3644
-609:0:4401
-610:3:3647
-611:3:3648
-612:3:3660
-613:3:3661
-614:3:3665
-615:3:3666
-616:3:3674
-617:3:3679
-618:3:3683
-619:3:3684
-620:3:3691
-621:3:3692
-622:3:3703
-623:3:3704
-624:3:3705
-625:3:3716
-626:3:3721
-627:3:3722
-628:0:4401
-629:3:3734
-630:0:4401
-631:3:3736
-632:0:4401
-633:3:3737
-634:0:4401
-635:3:3738
-636:0:4401
-637:3:3739
-638:0:4401
-639:3:3740
-640:3:3744
-641:3:3745
-642:3:3753
-643:3:3754
-644:3:3758
-645:3:3759
-646:3:3767
-647:3:3772
-648:3:3776
-649:3:3777
-650:3:3784
-651:3:3785
-652:3:3796
-653:3:3797
-654:3:3798
-655:3:3809
-656:3:3814
-657:3:3815
-658:0:4401
-659:3:3827
-660:0:4401
-661:3:4029
-662:0:4401
-663:3:4127
-664:0:4401
-665:3:4128
-666:0:4401
-667:3:4132
-668:0:4401
-669:3:4138
-670:0:4401
-671:3:4142
-672:3:4143
-673:3:4147
-674:3:4151
-675:3:4152
-676:3:4156
-677:3:4164
-678:3:4165
-679:3:4170
-680:3:4177
-681:3:4178
-682:3:4185
-683:3:4190
-684:0:4401
-685:3:4201
-686:0:4401
-687:3:4205
-688:3:4206
-689:3:4210
-690:3:4214
-691:3:4215
-692:3:4219
-693:3:4227
-694:3:4228
-695:3:4233
-696:3:4240
-697:3:4241
-698:3:4248
-699:3:4253
-700:0:4401
-701:3:4264
-702:0:4401
-703:3:4272
-704:3:4273
-705:3:4277
-706:3:4281
-707:3:4282
-708:3:4286
-709:3:4294
-710:3:4295
-711:3:4300
-712:3:4307
-713:3:4308
-714:3:4315
-715:3:4320
-716:0:4401
-717:3:4335
-718:0:4401
-719:3:4337
-720:0:4401
-721:3:4338
-722:0:4401
-723:3:2486
-724:0:4401
-725:3:2487
-726:3:2491
-727:3:2492
-728:3:2500
-729:3:2501
-730:3:2505
-731:3:2506
-732:3:2514
-733:3:2519
-734:3:2523
-735:3:2524
-736:3:2531
-737:3:2532
-738:3:2543
-739:3:2544
-740:3:2545
-741:3:2556
-742:3:2561
-743:3:2562
-744:0:4401
-745:3:2574
-746:0:4401
-747:3:2576
-748:3:2577
-749:0:4401
-750:3:2581
-751:3:2585
-752:3:2586
-753:3:2594
-754:3:2595
-755:3:2599
-756:3:2600
-757:3:2608
-758:3:2613
-759:3:2614
-760:3:2625
-761:3:2626
-762:3:2637
-763:3:2638
-764:3:2639
-765:3:2650
-766:3:2655
-767:3:2656
-768:0:4401
-769:3:2668
-770:0:4401
-771:3:2670
-772:0:4401
-773:3:2671
-774:0:4401
-775:3:2681
-776:0:4401
-777:3:2682
-778:0:4401
-779:3:2686
-780:3:2687
-781:3:2691
-782:3:2695
-783:3:2696
-784:3:2700
-785:3:2708
-786:3:2709
-787:3:2714
-788:3:2721
-789:3:2722
-790:3:2729
-791:3:2734
-792:0:4401
-793:3:2745
-794:0:4401
-795:3:2749
-796:3:2750
-797:3:2754
-798:3:2758
-799:3:2759
-800:3:2763
-801:3:2771
-802:3:2772
-803:3:2777
-804:3:2784
-805:3:2785
-806:3:2792
-807:3:2797
-808:0:4401
-809:3:2808
-810:0:4401
-811:3:2816
-812:3:2817
-813:3:2821
-814:3:2825
-815:3:2826
-816:3:2830
-817:3:2838
-818:3:2839
-819:3:2844
-820:3:2851
-821:3:2852
-822:3:2859
-823:3:2864
-824:0:4401
-825:3:2879
-826:0:4401
-827:3:2881
-828:0:4401
-829:3:2882
-830:3:2886
-831:3:2887
-832:3:2895
-833:3:2896
-834:3:2900
-835:3:2901
-836:3:2909
-837:3:2914
-838:3:2918
-839:3:2919
-840:3:2926
-841:3:2927
-842:3:2938
-843:3:2939
-844:3:2940
-845:3:2951
-846:3:2956
-847:3:2957
-848:0:4401
-849:3:2969
-850:0:4401
-851:3:2971
-852:0:4401
-853:3:2974
-854:3:2975
-855:3:2987
-856:3:2988
-857:3:2992
-858:3:2993
-859:3:3001
-860:3:3006
-861:3:3010
-862:3:3011
-863:3:3018
-864:3:3019
-865:3:3030
-866:3:3031
-867:3:3032
-868:3:3043
-869:3:3048
-870:3:3049
-871:0:4401
-872:3:3061
-873:0:4401
-874:3:3063
-875:0:4401
-876:3:3064
-877:0:4401
-878:3:3065
-879:0:4401
-880:3:3066
-881:0:4401
-882:3:3067
-883:3:3071
-884:3:3072
-885:3:3080
-886:3:3081
-887:3:3085
-888:3:3086
-889:3:3094
-890:3:3099
-891:3:3103
-892:3:3104
-893:3:3111
-894:3:3112
-895:3:3123
-896:3:3124
-897:3:3125
-898:3:3136
-899:3:3141
-900:3:3142
-901:0:4401
-902:3:3154
-903:0:4401
-904:3:3356
-905:0:4401
-906:3:3454
-907:0:4401
-908:3:3455
-909:0:4401
-910:3:3459
-911:0:4401
-912:3:3465
-913:3:3469
-914:3:3470
-915:3:3478
-916:3:3479
-917:3:3483
-918:3:3484
-919:3:3492
-920:3:3497
-921:3:3501
-922:3:3502
-923:3:3509
-924:3:3510
-925:3:3521
-926:3:3522
-927:3:3523
-928:3:3534
-929:3:3539
-930:3:3540
-931:0:4401
-932:3:3552
-933:0:4401
-934:3:3554
-935:0:4401
-936:3:3555
-937:3:3559
-938:3:3560
-939:3:3568
-940:3:3569
-941:3:3573
-942:3:3574
-943:3:3582
-944:3:3587
-945:3:3591
-946:3:3592
-947:3:3599
-948:3:3600
-949:3:3611
-950:3:3612
-951:3:3613
-952:3:3624
-953:3:3629
-954:3:3630
-955:0:4401
-956:3:3642
-957:0:4401
-958:3:3644
-959:0:4401
-960:3:3647
-961:3:3648
-962:3:3660
-963:3:3661
-964:3:3665
-965:3:3666
-966:3:3674
-967:3:3679
-968:3:3683
-969:3:3684
-970:3:3691
-971:3:3692
-972:3:3703
-973:3:3704
-974:3:3705
-975:3:3716
-976:3:3721
-977:3:3722
-978:0:4401
-979:3:3734
-980:0:4401
-981:3:3736
-982:0:4401
-983:3:3737
-984:0:4401
-985:3:3738
-986:0:4401
-987:3:3739
-988:0:4401
-989:3:3740
-990:3:3744
-991:3:3745
-992:3:3753
-993:3:3754
-994:3:3758
-995:3:3759
-996:3:3767
-997:3:3772
-998:3:3776
-999:3:3777
-1000:3:3784
-1001:3:3785
-1002:3:3796
-1003:3:3797
-1004:3:3798
-1005:3:3809
-1006:3:3814
-1007:3:3815
-1008:0:4401
-1009:3:3827
-1010:0:4401
-1011:3:4029
-1012:0:4401
-1013:3:4127
-1014:0:4401
-1015:3:4128
-1016:0:4401
-1017:3:4132
-1018:0:4401
-1019:3:4138
-1020:0:4401
-1021:3:4142
-1022:3:4143
-1023:3:4147
-1024:3:4151
-1025:3:4152
-1026:3:4156
-1027:3:4164
-1028:3:4165
-1029:3:4170
-1030:3:4177
-1031:3:4178
-1032:3:4185
-1033:3:4190
-1034:0:4401
-1035:3:4201
-1036:0:4401
-1037:3:4205
-1038:3:4206
-1039:3:4210
-1040:3:4214
-1041:3:4215
-1042:3:4219
-1043:3:4227
-1044:3:4228
-1045:3:4233
-1046:3:4240
-1047:3:4241
-1048:3:4248
-1049:3:4253
-1050:0:4401
-1051:3:4264
-1052:0:4401
-1053:3:4272
-1054:3:4273
-1055:3:4277
-1056:3:4281
-1057:3:4282
-1058:3:4286
-1059:3:4294
-1060:3:4295
-1061:3:4300
-1062:3:4307
-1063:3:4308
-1064:3:4315
-1065:3:4320
-1066:0:4401
-1067:3:4335
-1068:0:4401
-1069:3:4337
-1070:0:4401
-1071:3:4338
-1072:0:4401
-1073:3:4341
-1074:0:4401
-1075:3:4346
-1076:0:4401
-1077:2:1236
-1078:0:4401
-1079:3:4347
-1080:0:4401
-1081:2:1242
-1082:0:4401
-1083:3:4346
-1084:0:4401
-1085:2:1243
-1086:0:4401
-1087:3:4347
-1088:0:4401
-1089:2:1244
-1090:0:4401
-1091:3:4346
-1092:0:4401
-1093:2:1245
-1094:0:4401
-1095:3:4347
-1096:0:4401
-1097:1:2
-1098:0:4401
-1099:3:4346
-1100:0:4401
-1101:2:1246
-1102:0:4401
-1103:3:4347
-1104:0:4401
-1105:1:8
-1106:0:4401
-1107:3:4346
-1108:0:4401
-1109:2:1245
-1110:0:4401
-1111:3:4347
-1112:0:4401
-1113:1:9
-1114:0:4401
-1115:3:4346
-1116:0:4401
-1117:2:1246
-1118:0:4401
-1119:3:4347
-1120:0:4401
-1121:1:10
-1122:0:4401
-1123:3:4346
-1124:0:4401
-1125:2:1245
-1126:0:4401
-1127:3:4347
-1128:0:4401
-1129:1:11
-1130:0:4401
-1131:3:4346
-1132:0:4401
-1133:2:1246
-1134:0:4401
-1135:3:4347
-1136:0:4401
-1137:1:14
-1138:0:4401
-1139:3:4346
-1140:0:4401
-1141:2:1245
-1142:0:4401
-1143:3:4347
-1144:0:4401
-1145:1:15
-1146:0:4401
-1147:3:4346
-1148:0:4401
-1149:2:1246
-1150:0:4401
-1151:3:4347
-1152:0:4401
-1153:1:16
-1154:1:20
-1155:1:21
-1156:1:29
-1157:1:30
-1158:1:34
-1159:1:35
-1160:1:43
-1161:1:48
-1162:1:52
-1163:1:53
-1164:1:60
-1165:1:61
-1166:1:72
-1167:1:73
-1168:1:74
-1169:1:85
-1170:1:90
-1171:1:91
-1172:0:4401
-1173:3:4346
-1174:0:4401
-1175:2:1245
-1176:0:4401
-1177:3:4347
-1178:0:4401
-1179:1:103
-1180:0:4401
-1181:3:4346
-1182:0:4401
-1183:2:1246
-1184:0:4401
-1185:3:4347
-1186:0:4401
-1187:2:1247
-1188:0:4401
-1189:3:4346
-1190:0:4401
-1191:2:1253
-1192:0:4401
-1193:3:4347
-1194:0:4401
-1195:2:1254
-1196:0:4399
-1197:3:4346
-1198:0:4405
-1199:3:4347
-1200:0:4405
-1201:2:1257
-1202:0:4405
-1203:3:4346
-1204:0:4405
-1205:2:1258
-1206:0:4405
-1207:3:4347
-1208:0:4405
-1209:2:1259
-1210:2:1263
-1211:2:1264
-1212:2:1272
-1213:2:1273
-1214:2:1277
-1215:2:1278
-1216:2:1286
-1217:2:1291
-1218:2:1295
-1219:2:1296
-1220:2:1303
-1221:2:1304
-1222:2:1315
-1223:2:1316
-1224:2:1317
-1225:2:1328
-1226:2:1333
-1227:2:1334
-1228:0:4405
-1229:3:4346
-1230:0:4405
-1231:2:1346
-1232:0:4405
-1233:3:4347
-1234:0:4405
-1235:2:1347
-1236:0:4405
-1237:3:4346
-1238:0:4405
-1239:1:104
--1:-1:-1
-1240:0:4405
-1241:3:4347
-1242:0:4405
-1243:3:4346
-1244:0:4405
-1245:2:1348
-1246:0:4405
-1247:3:4347
-1248:0:4405
-1249:2:1347
-1250:0:4405
-1251:3:4346
-1252:0:4405
-1253:1:105
-1254:0:4405
-1255:3:4347
-1256:0:4405
-1257:3:4346
-1258:0:4405
-1259:2:1348
-1260:0:4405
-1261:3:4347
-1262:0:4405
-1263:2:1347
-1264:0:4405
-1265:3:4346
-1266:0:4405
-1267:1:104
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.define b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.log
deleted file mode 100644 (file)
index 02c53cf..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-depth 12: Claim reached state 9 (line 747)
-depth 28: Claim reached state 9 (line 746)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10679, errors: 0
-    38555 states, stored (92500 visited)
-  1044204 states, matched
-  1136704 transitions (= visited+matched)
-  3867169 atomic steps
-hash conflicts:      8572 (resolved)
-
-Stats on memory usage (in Megabytes):
-    3.089      equivalent memory usage for states (stored*(State-vector + overhead))
-    2.930      actual memory usage for states (compression: 94.87%)
-               state-vector as stored = 52 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  468.596      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 160, "(1)"
-       line 651, "pan.___", state 213, "(1)"
-       line 174, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 233, "(1)"
-       line 159, "pan.___", state 254, "(1)"
-       line 163, "pan.___", state 262, "(1)"
-       line 167, "pan.___", state 274, "(1)"
-       line 174, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 317, "(1)"
-       line 163, "pan.___", state 325, "(1)"
-       line 167, "pan.___", state 337, "(1)"
-       line 174, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 384, "(1)"
-       line 163, "pan.___", state 392, "(1)"
-       line 167, "pan.___", state 404, "(1)"
-       line 398, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 441, "(1)"
-       line 407, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 470, "(1)"
-       line 417, "pan.___", state 500, "(1)"
-       line 398, "pan.___", state 526, "(1)"
-       line 402, "pan.___", state 540, "(1)"
-       line 407, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 599, "(1)"
-       line 402, "pan.___", state 640, "(1)"
-       line 407, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 699, "(1)"
-       line 174, "pan.___", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 722, "(1)"
-       line 178, "pan.___", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 731, "(1)"
-       line 178, "pan.___", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 732, "else"
-       line 176, "pan.___", state 737, "((j<1))"
-       line 176, "pan.___", state 737, "((j>=1))"
-       line 182, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 752, "(1)"
-       line 163, "pan.___", state 760, "(1)"
-       line 163, "pan.___", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 761, "else"
-       line 161, "pan.___", state 766, "((j<1))"
-       line 161, "pan.___", state 766, "((j>=1))"
-       line 167, "pan.___", state 772, "(1)"
-       line 167, "pan.___", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 773, "else"
-       line 169, "pan.___", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 776, "else"
-       line 174, "pan.___", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 785, "(1)"
-       line 178, "pan.___", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 794, "(1)"
-       line 178, "pan.___", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 795, "else"
-       line 176, "pan.___", state 800, "((j<1))"
-       line 176, "pan.___", state 800, "((j>=1))"
-       line 182, "pan.___", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 815, "(1)"
-       line 163, "pan.___", state 823, "(1)"
-       line 163, "pan.___", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 824, "else"
-       line 161, "pan.___", state 829, "((j<1))"
-       line 161, "pan.___", state 829, "((j>=1))"
-       line 167, "pan.___", state 835, "(1)"
-       line 167, "pan.___", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 836, "else"
-       line 169, "pan.___", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 839, "else"
-       line 201, "pan.___", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 841, "else"
-       line 213, "pan.___", state 845, "((i<1))"
-       line 213, "pan.___", state 845, "((i>=1))"
-       line 174, "pan.___", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 852, "(1)"
-       line 178, "pan.___", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 861, "(1)"
-       line 178, "pan.___", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 862, "else"
-       line 176, "pan.___", state 867, "((j<1))"
-       line 176, "pan.___", state 867, "((j>=1))"
-       line 182, "pan.___", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 882, "(1)"
-       line 163, "pan.___", state 890, "(1)"
-       line 163, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 891, "else"
-       line 161, "pan.___", state 896, "((j<1))"
-       line 161, "pan.___", state 896, "((j>=1))"
-       line 167, "pan.___", state 902, "(1)"
-       line 167, "pan.___", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 903, "else"
-       line 169, "pan.___", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 906, "else"
-       line 201, "pan.___", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 908, "else"
-       line 220, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 909, "else"
-       line 355, "pan.___", state 915, "((sighand_exec==1))"
-       line 355, "pan.___", state 915, "else"
-       line 361, "pan.___", state 918, "sighand_exec = 1"
-       line 398, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 933, "(1)"
-       line 398, "pan.___", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 934, "else"
-       line 398, "pan.___", state 937, "(1)"
-       line 402, "pan.___", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 947, "(1)"
-       line 402, "pan.___", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 948, "else"
-       line 402, "pan.___", state 951, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 400, "pan.___", state 957, "((i<1))"
-       line 400, "pan.___", state 957, "((i>=1))"
-       line 407, "pan.___", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 976, "(1)"
-       line 408, "pan.___", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 977, "else"
-       line 408, "pan.___", state 980, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 412, "pan.___", state 989, "(1)"
-       line 412, "pan.___", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 990, "else"
-       line 412, "pan.___", state 993, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 410, "pan.___", state 999, "((i<1))"
-       line 410, "pan.___", state 999, "((i>=1))"
-       line 417, "pan.___", state 1006, "(1)"
-       line 417, "pan.___", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1007, "else"
-       line 417, "pan.___", state 1010, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 361, "pan.___", state 1023, "sighand_exec = 1"
-       line 402, "pan.___", state 1054, "(1)"
-       line 407, "pan.___", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1113, "(1)"
-       line 402, "pan.___", state 1151, "(1)"
-       line 407, "pan.___", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1210, "(1)"
-       line 398, "pan.___", state 1236, "(1)"
-       line 402, "pan.___", state 1250, "(1)"
-       line 407, "pan.___", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1309, "(1)"
-       line 402, "pan.___", state 1350, "(1)"
-       line 407, "pan.___", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1409, "(1)"
-       line 174, "pan.___", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1432, "(1)"
-       line 178, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1441, "(1)"
-       line 178, "pan.___", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1442, "else"
-       line 176, "pan.___", state 1447, "((j<1))"
-       line 176, "pan.___", state 1447, "((j>=1))"
-       line 182, "pan.___", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1462, "(1)"
-       line 163, "pan.___", state 1470, "(1)"
-       line 163, "pan.___", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1471, "else"
-       line 161, "pan.___", state 1476, "((j<1))"
-       line 161, "pan.___", state 1476, "((j>=1))"
-       line 167, "pan.___", state 1482, "(1)"
-       line 167, "pan.___", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1483, "else"
-       line 169, "pan.___", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 1486, "else"
-       line 174, "pan.___", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 1495, "(1)"
-       line 178, "pan.___", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1504, "(1)"
-       line 178, "pan.___", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 1505, "else"
-       line 176, "pan.___", state 1510, "((j<1))"
-       line 176, "pan.___", state 1510, "((j>=1))"
-       line 182, "pan.___", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1525, "(1)"
-       line 163, "pan.___", state 1533, "(1)"
-       line 163, "pan.___", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 1534, "else"
-       line 161, "pan.___", state 1539, "((j<1))"
-       line 161, "pan.___", state 1539, "((j>=1))"
-       line 167, "pan.___", state 1545, "(1)"
-       line 167, "pan.___", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 1546, "else"
-       line 169, "pan.___", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 1549, "else"
-       line 201, "pan.___", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 1551, "else"
-       line 213, "pan.___", state 1555, "((i<1))"
-       line 213, "pan.___", state 1555, "((i>=1))"
-       line 174, "pan.___", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1562, "(1)"
-       line 178, "pan.___", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1571, "(1)"
-       line 178, "pan.___", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1572, "else"
-       line 176, "pan.___", state 1577, "((j<1))"
-       line 176, "pan.___", state 1577, "((j>=1))"
-       line 182, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1592, "(1)"
-       line 163, "pan.___", state 1600, "(1)"
-       line 163, "pan.___", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1601, "else"
-       line 161, "pan.___", state 1606, "((j<1))"
-       line 161, "pan.___", state 1606, "((j>=1))"
-       line 167, "pan.___", state 1612, "(1)"
-       line 167, "pan.___", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1613, "else"
-       line 169, "pan.___", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 1616, "else"
-       line 201, "pan.___", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 1618, "else"
-       line 220, "pan.___", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 1619, "else"
-       line 355, "pan.___", state 1625, "((sighand_exec==1))"
-       line 355, "pan.___", state 1625, "else"
-       line 361, "pan.___", state 1628, "sighand_exec = 1"
-       line 398, "pan.___", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 1643, "(1)"
-       line 398, "pan.___", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 1644, "else"
-       line 398, "pan.___", state 1647, "(1)"
-       line 402, "pan.___", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 1657, "(1)"
-       line 402, "pan.___", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 1658, "else"
-       line 402, "pan.___", state 1661, "(1)"
-       line 402, "pan.___", state 1662, "(1)"
-       line 402, "pan.___", state 1662, "(1)"
-       line 400, "pan.___", state 1667, "((i<1))"
-       line 400, "pan.___", state 1667, "((i>=1))"
-       line 407, "pan.___", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 1686, "(1)"
-       line 408, "pan.___", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 1687, "else"
-       line 408, "pan.___", state 1690, "(1)"
-       line 408, "pan.___", state 1691, "(1)"
-       line 408, "pan.___", state 1691, "(1)"
-       line 412, "pan.___", state 1699, "(1)"
-       line 412, "pan.___", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 1700, "else"
-       line 412, "pan.___", state 1703, "(1)"
-       line 412, "pan.___", state 1704, "(1)"
-       line 412, "pan.___", state 1704, "(1)"
-       line 410, "pan.___", state 1709, "((i<1))"
-       line 410, "pan.___", state 1709, "((i>=1))"
-       line 417, "pan.___", state 1716, "(1)"
-       line 417, "pan.___", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1717, "else"
-       line 417, "pan.___", state 1720, "(1)"
-       line 417, "pan.___", state 1721, "(1)"
-       line 417, "pan.___", state 1721, "(1)"
-       line 419, "pan.___", state 1724, "(1)"
-       line 419, "pan.___", state 1724, "(1)"
-       line 361, "pan.___", state 1733, "sighand_exec = 1"
-       line 178, "pan.___", state 1758, "(1)"
-       line 182, "pan.___", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1779, "(1)"
-       line 163, "pan.___", state 1787, "(1)"
-       line 167, "pan.___", state 1799, "(1)"
-       line 174, "pan.___", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1842, "(1)"
-       line 163, "pan.___", state 1850, "(1)"
-       line 167, "pan.___", state 1862, "(1)"
-       line 174, "pan.___", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1909, "(1)"
-       line 163, "pan.___", state 1917, "(1)"
-       line 167, "pan.___", state 1929, "(1)"
-       line 701, "pan.___", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 0.89 seconds
-pan: rate 103932.58 states/second
-pan: avg transition delay 7.8297e-07 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 6ba27b1..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.define b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.log b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index cd4e32b..0000000
+++ /dev/null
@@ -1,286 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-depth 12: Claim reached state 9 (line 748)
-depth 28: Claim reached state 9 (line 747)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10679, errors: 0
-    38555 states, stored (92500 visited)
-  1044204 states, matched
-  1136704 transitions (= visited+matched)
-  3867169 atomic steps
-hash conflicts:      6390 (resolved)
-
-Stats on memory usage (in Megabytes):
-    3.089      equivalent memory usage for states (stored*(State-vector + overhead))
-    2.767      actual memory usage for states (compression: 89.58%)
-               state-vector as stored = 47 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  468.498      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 403, "pan.___", state 330, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 160, "(1)"
-       line 652, "pan.___", state 213, "(1)"
-       line 175, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 179, "pan.___", state 233, "(1)"
-       line 160, "pan.___", state 254, "(1)"
-       line 164, "pan.___", state 262, "(1)"
-       line 168, "pan.___", state 274, "(1)"
-       line 175, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 179, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 317, "(1)"
-       line 164, "pan.___", state 325, "(1)"
-       line 168, "pan.___", state 337, "(1)"
-       line 175, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 179, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 183, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 160, "pan.___", state 384, "(1)"
-       line 164, "pan.___", state 392, "(1)"
-       line 168, "pan.___", state 404, "(1)"
-       line 399, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 441, "(1)"
-       line 408, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 470, "(1)"
-       line 418, "pan.___", state 500, "(1)"
-       line 399, "pan.___", state 526, "(1)"
-       line 403, "pan.___", state 540, "(1)"
-       line 408, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 599, "(1)"
-       line 403, "pan.___", state 640, "(1)"
-       line 408, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 699, "(1)"
-       line 399, "pan.___", state 721, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 723, "(1)"
-       line 399, "pan.___", state 724, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 724, "else"
-       line 399, "pan.___", state 727, "(1)"
-       line 403, "pan.___", state 735, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 737, "(1)"
-       line 403, "pan.___", state 738, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 738, "else"
-       line 403, "pan.___", state 741, "(1)"
-       line 403, "pan.___", state 742, "(1)"
-       line 403, "pan.___", state 742, "(1)"
-       line 401, "pan.___", state 747, "((i<1))"
-       line 401, "pan.___", state 747, "((i>=1))"
-       line 408, "pan.___", state 753, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 766, "(1)"
-       line 409, "pan.___", state 767, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 767, "else"
-       line 409, "pan.___", state 770, "(1)"
-       line 409, "pan.___", state 771, "(1)"
-       line 409, "pan.___", state 771, "(1)"
-       line 413, "pan.___", state 779, "(1)"
-       line 413, "pan.___", state 780, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 780, "else"
-       line 413, "pan.___", state 783, "(1)"
-       line 413, "pan.___", state 784, "(1)"
-       line 413, "pan.___", state 784, "(1)"
-       line 411, "pan.___", state 789, "((i<1))"
-       line 411, "pan.___", state 789, "((i>=1))"
-       line 418, "pan.___", state 796, "(1)"
-       line 418, "pan.___", state 797, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 797, "else"
-       line 418, "pan.___", state 800, "(1)"
-       line 418, "pan.___", state 801, "(1)"
-       line 418, "pan.___", state 801, "(1)"
-       line 420, "pan.___", state 804, "(1)"
-       line 420, "pan.___", state 804, "(1)"
-       line 356, "pan.___", state 810, "((sighand_exec==1))"
-       line 356, "pan.___", state 810, "else"
-       line 362, "pan.___", state 813, "sighand_exec = 1"
-       line 399, "pan.___", state 826, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 828, "(1)"
-       line 399, "pan.___", state 829, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 829, "else"
-       line 399, "pan.___", state 832, "(1)"
-       line 403, "pan.___", state 840, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 842, "(1)"
-       line 403, "pan.___", state 843, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 843, "else"
-       line 403, "pan.___", state 846, "(1)"
-       line 403, "pan.___", state 847, "(1)"
-       line 403, "pan.___", state 847, "(1)"
-       line 401, "pan.___", state 852, "((i<1))"
-       line 401, "pan.___", state 852, "((i>=1))"
-       line 408, "pan.___", state 858, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 871, "(1)"
-       line 409, "pan.___", state 872, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 872, "else"
-       line 409, "pan.___", state 875, "(1)"
-       line 409, "pan.___", state 876, "(1)"
-       line 409, "pan.___", state 876, "(1)"
-       line 413, "pan.___", state 884, "(1)"
-       line 413, "pan.___", state 885, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 885, "else"
-       line 413, "pan.___", state 888, "(1)"
-       line 413, "pan.___", state 889, "(1)"
-       line 413, "pan.___", state 889, "(1)"
-       line 411, "pan.___", state 894, "((i<1))"
-       line 411, "pan.___", state 894, "((i>=1))"
-       line 418, "pan.___", state 901, "(1)"
-       line 418, "pan.___", state 902, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 902, "else"
-       line 418, "pan.___", state 905, "(1)"
-       line 418, "pan.___", state 906, "(1)"
-       line 418, "pan.___", state 906, "(1)"
-       line 420, "pan.___", state 909, "(1)"
-       line 420, "pan.___", state 909, "(1)"
-       line 362, "pan.___", state 918, "sighand_exec = 1"
-       line 403, "pan.___", state 949, "(1)"
-       line 408, "pan.___", state 965, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 1008, "(1)"
-       line 403, "pan.___", state 1046, "(1)"
-       line 408, "pan.___", state 1062, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 1105, "(1)"
-       line 399, "pan.___", state 1131, "(1)"
-       line 403, "pan.___", state 1145, "(1)"
-       line 408, "pan.___", state 1161, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 1204, "(1)"
-       line 403, "pan.___", state 1245, "(1)"
-       line 408, "pan.___", state 1261, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 1304, "(1)"
-       line 399, "pan.___", state 1326, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1328, "(1)"
-       line 399, "pan.___", state 1329, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1329, "else"
-       line 399, "pan.___", state 1332, "(1)"
-       line 403, "pan.___", state 1340, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1342, "(1)"
-       line 403, "pan.___", state 1343, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1343, "else"
-       line 403, "pan.___", state 1346, "(1)"
-       line 403, "pan.___", state 1347, "(1)"
-       line 403, "pan.___", state 1347, "(1)"
-       line 401, "pan.___", state 1352, "((i<1))"
-       line 401, "pan.___", state 1352, "((i>=1))"
-       line 408, "pan.___", state 1358, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1371, "(1)"
-       line 409, "pan.___", state 1372, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1372, "else"
-       line 409, "pan.___", state 1375, "(1)"
-       line 409, "pan.___", state 1376, "(1)"
-       line 409, "pan.___", state 1376, "(1)"
-       line 413, "pan.___", state 1384, "(1)"
-       line 413, "pan.___", state 1385, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1385, "else"
-       line 413, "pan.___", state 1388, "(1)"
-       line 413, "pan.___", state 1389, "(1)"
-       line 413, "pan.___", state 1389, "(1)"
-       line 411, "pan.___", state 1394, "((i<1))"
-       line 411, "pan.___", state 1394, "((i>=1))"
-       line 418, "pan.___", state 1401, "(1)"
-       line 418, "pan.___", state 1402, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1402, "else"
-       line 418, "pan.___", state 1405, "(1)"
-       line 418, "pan.___", state 1406, "(1)"
-       line 418, "pan.___", state 1406, "(1)"
-       line 420, "pan.___", state 1409, "(1)"
-       line 420, "pan.___", state 1409, "(1)"
-       line 356, "pan.___", state 1415, "((sighand_exec==1))"
-       line 356, "pan.___", state 1415, "else"
-       line 362, "pan.___", state 1418, "sighand_exec = 1"
-       line 399, "pan.___", state 1431, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1433, "(1)"
-       line 399, "pan.___", state 1434, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1434, "else"
-       line 399, "pan.___", state 1437, "(1)"
-       line 403, "pan.___", state 1445, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1447, "(1)"
-       line 403, "pan.___", state 1448, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1448, "else"
-       line 403, "pan.___", state 1451, "(1)"
-       line 403, "pan.___", state 1452, "(1)"
-       line 403, "pan.___", state 1452, "(1)"
-       line 401, "pan.___", state 1457, "((i<1))"
-       line 401, "pan.___", state 1457, "((i>=1))"
-       line 408, "pan.___", state 1463, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1476, "(1)"
-       line 409, "pan.___", state 1477, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1477, "else"
-       line 409, "pan.___", state 1480, "(1)"
-       line 409, "pan.___", state 1481, "(1)"
-       line 409, "pan.___", state 1481, "(1)"
-       line 413, "pan.___", state 1489, "(1)"
-       line 413, "pan.___", state 1490, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1490, "else"
-       line 413, "pan.___", state 1493, "(1)"
-       line 413, "pan.___", state 1494, "(1)"
-       line 413, "pan.___", state 1494, "(1)"
-       line 411, "pan.___", state 1499, "((i<1))"
-       line 411, "pan.___", state 1499, "((i>=1))"
-       line 418, "pan.___", state 1506, "(1)"
-       line 418, "pan.___", state 1507, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1507, "else"
-       line 418, "pan.___", state 1510, "(1)"
-       line 418, "pan.___", state 1511, "(1)"
-       line 418, "pan.___", state 1511, "(1)"
-       line 420, "pan.___", state 1514, "(1)"
-       line 420, "pan.___", state 1514, "(1)"
-       line 362, "pan.___", state 1523, "sighand_exec = 1"
-       line 179, "pan.___", state 1548, "(1)"
-       line 183, "pan.___", state 1559, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 160, "pan.___", state 1569, "(1)"
-       line 164, "pan.___", state 1577, "(1)"
-       line 168, "pan.___", state 1589, "(1)"
-       line 175, "pan.___", state 1600, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 179, "pan.___", state 1609, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1622, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1632, "(1)"
-       line 164, "pan.___", state 1640, "(1)"
-       line 168, "pan.___", state 1652, "(1)"
-       line 175, "pan.___", state 1667, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 179, "pan.___", state 1676, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 183, "pan.___", state 1689, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 160, "pan.___", state 1699, "(1)"
-       line 164, "pan.___", state 1707, "(1)"
-       line 168, "pan.___", state 1719, "(1)"
-       line 702, "pan.___", state 1758, "-end-"
-       (173 of 1758 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 750, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 0.89 seconds
-pan: rate 103932.58 states/second
-pan: avg transition delay 7.8297e-07 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.spin.input b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index e998d85..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu-nosched-model/result-signal-over-writer/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index 5b0eadd..0000000
+++ /dev/null
@@ -1,4231 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2965
-2:3:2917
-3:3:2920
-4:3:2920
-5:3:2920
-6:3:2923
-7:3:2931
-8:3:2931
-9:3:2931
-10:3:2934
-11:3:2940
-12:3:2944
-13:3:2944
-14:3:2944
-15:3:2947
-16:3:2955
-17:3:2959
-18:3:2960
-19:0:2965
-20:3:2962
-21:0:2965
-22:2:1151
-23:0:2965
-24:2:1157
-25:0:2965
-26:2:1158
-27:0:2965
-28:2:1159
-29:2:1163
-30:2:1164
-31:2:1172
-32:2:1173
-33:2:1177
-34:2:1178
-35:2:1186
-36:2:1191
-37:2:1195
-38:2:1196
-39:2:1203
-40:2:1204
-41:2:1215
-42:2:1216
-43:2:1217
-44:2:1228
-45:2:1233
-46:2:1234
-47:0:2963
-48:2:1246
-49:0:2969
-50:2:1247
-51:0:2969
-52:1:2
-53:0:2969
-54:2:1248
-55:0:2969
-56:1:8
-57:0:2969
-58:1:9
-59:0:2969
-60:2:1247
-61:0:2969
-62:2:1248
-63:0:2969
-64:1:10
-65:0:2969
-66:2:1249
-67:0:2969
-68:2:1255
-69:2:1256
-70:0:2969
-71:2:1260
-72:2:1264
-73:2:1265
-74:2:1273
-75:2:1274
-76:2:1278
-77:2:1279
-78:2:1287
-79:2:1292
-80:2:1293
-81:2:1304
-82:2:1305
-83:2:1316
-84:2:1317
-85:2:1318
-86:2:1329
-87:2:1334
-88:2:1335
-89:0:2969
-90:2:1347
-91:0:2969
-92:2:1348
-93:0:2969
-94:1:13
-95:0:2969
-96:2:1349
-97:0:2969
-98:1:19
-99:0:2969
-100:1:20
-101:0:2969
-102:2:1348
-103:0:2969
-104:2:1349
-105:0:2969
-106:1:21
-107:1:25
-108:1:26
-109:1:34
-110:1:35
-111:1:39
-112:1:40
-113:1:48
-114:1:53
-115:1:57
-116:1:58
-117:1:65
-118:1:66
-119:1:77
-120:1:78
-121:1:79
-122:1:90
-123:1:95
-124:1:96
-125:0:2969
-126:2:1348
-127:0:2969
-128:2:1349
-129:0:2969
-130:1:108
-131:0:2969
-132:2:1348
-133:0:2969
-134:2:1349
-135:0:2969
-136:1:109
-137:1:113
-138:1:114
-139:1:122
-140:1:123
-141:1:127
-142:1:128
-143:1:136
-144:1:141
-145:1:145
-146:1:146
-147:1:153
-148:1:154
-149:1:165
-150:1:166
-151:1:167
-152:1:178
-153:1:183
-154:1:184
-155:0:2969
-156:1:196
-157:0:2969
-158:2:1348
-159:0:2969
-160:2:1349
-161:0:2969
-162:1:197
-163:0:2969
-164:2:1348
-165:0:2969
-166:2:1349
-167:0:2969
-168:1:198
-169:1:202
-170:1:203
-171:1:211
-172:1:212
-173:1:216
-174:1:217
-175:1:225
-176:1:230
-177:1:234
-178:1:235
-179:1:242
-180:1:243
-181:1:254
-182:1:255
-183:1:256
-184:1:267
-185:1:272
-186:1:273
-187:0:2969
-188:2:1348
-189:0:2969
-190:2:1349
-191:0:2969
-192:1:285
-193:0:2969
-194:1:486
-195:0:2969
-196:1:487
-197:0:2969
-198:1:20
-199:0:2969
-200:2:1348
-201:0:2969
-202:2:1349
-203:0:2969
-204:1:21
-205:1:25
-206:1:26
-207:1:34
-208:1:35
-209:1:36
-210:1:48
-211:1:53
-212:1:57
-213:1:58
-214:1:65
-215:1:66
-216:1:77
-217:1:78
-218:1:79
-219:1:90
-220:1:95
-221:1:96
-222:0:2969
-223:2:1348
-224:0:2969
-225:2:1349
-226:0:2969
-227:1:108
-228:0:2969
-229:2:1348
-230:0:2969
-231:2:1349
-232:0:2969
-233:1:109
-234:1:113
-235:1:114
-236:1:122
-237:1:123
-238:1:127
-239:1:128
-240:1:136
-241:1:141
-242:1:145
-243:1:146
-244:1:153
-245:1:154
-246:1:165
-247:1:166
-248:1:167
-249:1:178
-250:1:183
-251:1:184
-252:0:2969
-253:1:288
-254:0:2969
-255:2:1348
-256:0:2969
-257:2:1349
-258:0:2969
-259:1:289
-260:0:2969
-261:1:486
-262:0:2969
-263:1:487
-264:0:2969
-265:1:492
-266:0:2969
-267:2:1348
-268:0:2969
-269:2:1349
-270:0:2969
-271:1:497
-272:1:501
-273:1:502
-274:1:510
-275:1:511
-276:1:512
-277:1:524
-278:1:529
-279:1:533
-280:1:534
-281:1:541
-282:1:542
-283:1:553
-284:1:554
-285:1:555
-286:1:566
-287:1:571
-288:1:572
-289:0:2969
-290:2:1348
-291:0:2969
-292:2:1349
-293:0:2969
-294:1:584
-295:0:2969
-296:2:1348
-297:0:2969
-298:2:1349
-299:0:2969
-300:1:585
-301:1:589
-302:1:590
-303:1:598
-304:1:599
-305:1:603
-306:1:604
-307:1:612
-308:1:617
-309:1:621
-310:1:622
-311:1:629
-312:1:630
-313:1:641
-314:1:642
-315:1:643
-316:1:654
-317:1:659
-318:1:660
-319:0:2969
-320:2:1348
-321:0:2969
-322:2:1349
-323:0:2969
-324:1:672
-325:0:2969
-326:2:1348
-327:0:2969
-328:2:1349
-329:0:2969
-330:1:673
-331:1:677
-332:1:678
-333:1:686
-334:1:687
-335:1:691
-336:1:692
-337:1:700
-338:1:705
-339:1:709
-340:1:710
-341:1:717
-342:1:718
-343:1:729
-344:1:730
-345:1:731
-346:1:742
-347:1:747
-348:1:748
-349:0:2969
-350:2:1348
-351:0:2969
-352:2:1349
-353:0:2969
-354:1:760
-355:0:2969
-356:1:761
-357:0:2969
-358:1:762
-359:0:2969
-360:1:955
-361:0:2969
-362:1:956
-363:0:2969
-364:2:1348
-365:0:2969
-366:2:1349
-367:0:2969
-368:1:960
-369:0:2969
-370:2:1348
-371:0:2969
-372:2:1349
-373:0:2969
-374:1:961
-375:1:965
-376:1:966
-377:1:974
-378:1:975
-379:1:979
-380:1:980
-381:1:988
-382:1:993
-383:1:997
-384:1:998
-385:1:1005
-386:1:1006
-387:1:1017
-388:1:1018
-389:1:1019
-390:1:1030
-391:1:1035
-392:1:1036
-393:0:2969
-394:2:1348
-395:0:2969
-396:2:1349
-397:0:2969
-398:1:1048
-399:0:2969
-400:1:762
-401:0:2969
-402:1:955
-403:0:2969
-404:1:956
-405:0:2969
-406:2:1348
-407:0:2969
-408:2:1349
-409:0:2969
-410:1:960
-411:0:2969
-412:2:1348
-413:0:2969
-414:2:1349
-415:0:2969
-416:1:961
-417:1:965
-418:1:966
-419:1:974
-420:1:975
-421:1:976
-422:1:988
-423:1:993
-424:1:997
-425:1:998
-426:1:1005
-427:1:1006
-428:1:1017
-429:1:1018
-430:1:1019
-431:1:1030
-432:1:1035
-433:1:1036
-434:0:2969
-435:2:1348
-436:0:2969
-437:2:1349
-438:0:2969
-439:1:1048
-440:0:2969
-441:1:1052
-442:0:2969
-443:2:1348
-444:0:2969
-445:2:1349
-446:0:2969
-447:1:1057
-448:1:1061
-449:1:1062
-450:1:1070
-451:1:1071
-452:1:1072
-453:1:1084
-454:1:1089
-455:1:1093
-456:1:1094
-457:1:1101
-458:1:1102
-459:1:1113
-460:1:1114
-461:1:1115
-462:1:1126
-463:1:1131
-464:1:1132
-465:0:2969
-466:1:9
-467:0:2969
-468:2:1348
-469:0:2969
-470:2:1349
-471:0:2969
-472:1:10
-473:0:2969
-474:2:1350
-475:0:2969
-476:2:1356
-477:0:2969
-478:2:1357
-479:0:2969
-480:2:1367
-481:0:2969
-482:2:1368
-483:0:2969
-484:2:1372
-485:2:1373
-486:2:1377
-487:2:1381
-488:2:1382
-489:2:1386
-490:2:1394
-491:2:1395
-492:2:1400
-493:2:1407
-494:2:1408
-495:2:1415
-496:2:1420
-497:0:2969
-498:2:1431
-499:0:2969
-500:2:1435
-501:2:1436
-502:2:1440
-503:2:1444
-504:2:1445
-505:2:1449
-506:2:1457
-507:2:1458
-508:2:1463
-509:2:1470
-510:2:1471
-511:2:1478
-512:2:1483
-513:0:2969
-514:2:1494
-515:0:2969
-516:2:1502
-517:2:1503
-518:2:1507
-519:2:1511
-520:2:1512
-521:2:1516
-522:2:1524
-523:2:1525
-524:2:1530
-525:2:1537
-526:2:1538
-527:2:1545
-528:2:1550
-529:0:2969
-530:2:1565
-531:0:2969
-532:2:1566
-533:0:2969
-534:1:13
-535:0:2969
-536:2:1567
-537:0:2969
-538:1:19
-539:0:2969
-540:1:20
-541:0:2969
-542:2:1566
-543:0:2969
-544:2:1567
-545:0:2969
-546:1:21
-547:1:25
-548:1:26
-549:1:34
-550:1:35
-551:1:39
-552:1:40
-553:1:48
-554:1:53
-555:1:57
-556:1:58
-557:1:65
-558:1:66
-559:1:77
-560:1:78
-561:1:79
-562:1:90
-563:1:95
-564:1:96
-565:0:2969
-566:2:1566
-567:0:2969
-568:2:1567
-569:0:2969
-570:1:108
-571:0:2969
-572:2:1566
-573:0:2969
-574:2:1567
-575:0:2969
-576:1:109
-577:1:113
-578:1:114
-579:1:122
-580:1:123
-581:1:127
-582:1:128
-583:1:136
-584:1:141
-585:1:145
-586:1:146
-587:1:153
-588:1:154
-589:1:165
-590:1:166
-591:1:167
-592:1:178
-593:1:183
-594:1:184
-595:0:2969
-596:1:196
-597:0:2969
-598:2:1566
-599:0:2969
-600:2:1567
-601:0:2969
-602:1:197
-603:0:2969
-604:2:1566
-605:0:2969
-606:2:1567
-607:0:2969
-608:1:198
-609:1:202
-610:1:203
-611:1:211
-612:1:212
-613:1:216
-614:1:217
-615:1:225
-616:1:230
-617:1:234
-618:1:235
-619:1:242
-620:1:243
-621:1:254
-622:1:255
-623:1:256
-624:1:267
-625:1:272
-626:1:273
-627:0:2969
-628:2:1566
-629:0:2969
-630:2:1567
-631:0:2969
-632:1:285
-633:0:2969
-634:1:486
-635:0:2969
-636:1:487
-637:0:2969
-638:1:20
-639:0:2969
-640:2:1566
-641:0:2969
-642:2:1567
-643:0:2969
-644:1:21
-645:1:25
-646:1:26
-647:1:34
-648:1:35
-649:1:36
-650:1:48
-651:1:53
-652:1:57
-653:1:58
-654:1:65
-655:1:66
-656:1:77
-657:1:78
-658:1:79
-659:1:90
-660:1:95
-661:1:96
-662:0:2969
-663:2:1566
-664:0:2969
-665:2:1567
-666:0:2969
-667:1:108
-668:0:2969
-669:2:1566
-670:0:2969
-671:2:1567
-672:0:2969
-673:1:109
-674:1:113
-675:1:114
-676:1:122
-677:1:123
-678:1:127
-679:1:128
-680:1:136
-681:1:141
-682:1:145
-683:1:146
-684:1:153
-685:1:154
-686:1:165
-687:1:166
-688:1:167
-689:1:178
-690:1:183
-691:1:184
-692:0:2969
-693:1:288
-694:0:2969
-695:2:1566
-696:0:2969
-697:2:1567
-698:0:2969
-699:1:289
-700:0:2969
-701:1:486
-702:0:2969
-703:1:487
-704:0:2969
-705:1:492
-706:0:2969
-707:2:1566
-708:0:2969
-709:2:1567
-710:0:2969
-711:1:497
-712:1:501
-713:1:502
-714:1:510
-715:1:511
-716:1:512
-717:1:524
-718:1:529
-719:1:533
-720:1:534
-721:1:541
-722:1:542
-723:1:553
-724:1:554
-725:1:555
-726:1:566
-727:1:571
-728:1:572
-729:0:2969
-730:2:1566
-731:0:2969
-732:2:1567
-733:0:2969
-734:1:584
-735:0:2969
-736:2:1566
-737:0:2969
-738:2:1567
-739:0:2969
-740:1:585
-741:1:589
-742:1:590
-743:1:598
-744:1:599
-745:1:603
-746:1:604
-747:1:612
-748:1:617
-749:1:621
-750:1:622
-751:1:629
-752:1:630
-753:1:641
-754:1:642
-755:1:643
-756:1:654
-757:1:659
-758:1:660
-759:0:2969
-760:2:1566
-761:0:2969
-762:2:1567
-763:0:2969
-764:1:672
-765:0:2969
-766:2:1566
-767:0:2969
-768:2:1567
-769:0:2969
-770:1:673
-771:1:677
-772:1:678
-773:1:686
-774:1:687
-775:1:691
-776:1:692
-777:1:700
-778:1:705
-779:1:709
-780:1:710
-781:1:717
-782:1:718
-783:1:729
-784:1:730
-785:1:731
-786:1:742
-787:1:747
-788:1:748
-789:0:2969
-790:2:1566
-791:0:2969
-792:2:1567
-793:0:2969
-794:1:760
-795:0:2969
-796:1:761
-797:0:2969
-798:1:762
-799:0:2969
-800:1:955
-801:0:2969
-802:1:956
-803:0:2969
-804:2:1566
-805:0:2969
-806:2:1567
-807:0:2969
-808:1:960
-809:0:2969
-810:2:1566
-811:0:2969
-812:2:1567
-813:0:2969
-814:1:961
-815:1:965
-816:1:966
-817:1:974
-818:1:975
-819:1:979
-820:1:980
-821:1:988
-822:1:993
-823:1:997
-824:1:998
-825:1:1005
-826:1:1006
-827:1:1017
-828:1:1018
-829:1:1019
-830:1:1030
-831:1:1035
-832:1:1036
-833:0:2969
-834:2:1566
-835:0:2969
-836:2:1567
-837:0:2969
-838:1:1048
-839:0:2969
-840:1:762
-841:0:2969
-842:1:955
-843:0:2969
-844:1:956
-845:0:2969
-846:2:1566
-847:0:2969
-848:2:1567
-849:0:2969
-850:1:960
-851:0:2969
-852:2:1566
-853:0:2969
-854:2:1567
-855:0:2969
-856:1:961
-857:1:965
-858:1:966
-859:1:974
-860:1:975
-861:1:976
-862:1:988
-863:1:993
-864:1:997
-865:1:998
-866:1:1005
-867:1:1006
-868:1:1017
-869:1:1018
-870:1:1019
-871:1:1030
-872:1:1035
-873:1:1036
-874:0:2969
-875:2:1566
-876:0:2969
-877:2:1567
-878:0:2969
-879:1:1048
-880:0:2969
-881:1:1052
-882:0:2969
-883:2:1566
-884:0:2969
-885:2:1567
-886:0:2969
-887:1:1057
-888:1:1061
-889:1:1062
-890:1:1070
-891:1:1071
-892:1:1072
-893:1:1084
-894:1:1089
-895:1:1093
-896:1:1094
-897:1:1101
-898:1:1102
-899:1:1113
-900:1:1114
-901:1:1115
-902:1:1126
-903:1:1131
-904:1:1132
-905:0:2969
-906:1:9
-907:0:2969
-908:2:1566
-909:0:2969
-910:2:1567
-911:0:2969
-912:1:10
-913:0:2969
-914:2:1568
-915:0:2969
-916:2:1574
-917:0:2969
-918:2:1575
-919:2:1579
-920:2:1580
-921:2:1588
-922:2:1589
-923:2:1593
-924:2:1594
-925:2:1602
-926:2:1607
-927:2:1611
-928:2:1612
-929:2:1619
-930:2:1620
-931:2:1631
-932:2:1632
-933:2:1633
-934:2:1644
-935:2:1649
-936:2:1650
-937:0:2969
-938:2:1662
-939:0:2969
-940:2:1663
-941:0:2969
-942:1:13
-943:0:2969
-944:2:1664
-945:0:2969
-946:1:19
-947:0:2969
-948:1:20
-949:0:2969
-950:2:1663
-951:0:2969
-952:2:1664
-953:0:2969
-954:1:21
-955:1:25
-956:1:26
-957:1:34
-958:1:35
-959:1:39
-960:1:40
-961:1:48
-962:1:53
-963:1:57
-964:1:58
-965:1:65
-966:1:66
-967:1:77
-968:1:78
-969:1:79
-970:1:90
-971:1:95
-972:1:96
-973:0:2969
-974:2:1663
-975:0:2969
-976:2:1664
-977:0:2969
-978:1:108
-979:0:2969
-980:2:1663
-981:0:2969
-982:2:1664
-983:0:2969
-984:1:109
-985:1:113
-986:1:114
-987:1:122
-988:1:123
-989:1:127
-990:1:128
-991:1:136
-992:1:141
-993:1:145
-994:1:146
-995:1:153
-996:1:154
-997:1:165
-998:1:166
-999:1:167
-1000:1:178
-1001:1:183
-1002:1:184
-1003:0:2969
-1004:1:196
-1005:0:2969
-1006:2:1663
-1007:0:2969
-1008:2:1664
-1009:0:2969
-1010:1:197
-1011:0:2969
-1012:2:1663
-1013:0:2969
-1014:2:1664
-1015:0:2969
-1016:1:198
-1017:1:202
-1018:1:203
-1019:1:211
-1020:1:212
-1021:1:216
-1022:1:217
-1023:1:225
-1024:1:230
-1025:1:234
-1026:1:235
-1027:1:242
-1028:1:243
-1029:1:254
-1030:1:255
-1031:1:256
-1032:1:267
-1033:1:272
-1034:1:273
-1035:0:2969
-1036:2:1663
-1037:0:2969
-1038:2:1664
-1039:0:2969
-1040:1:285
-1041:0:2969
-1042:1:486
-1043:0:2969
-1044:1:487
-1045:0:2969
-1046:1:20
-1047:0:2969
-1048:2:1663
-1049:0:2969
-1050:2:1664
-1051:0:2969
-1052:1:21
-1053:1:25
-1054:1:26
-1055:1:34
-1056:1:35
-1057:1:36
-1058:1:48
-1059:1:53
-1060:1:57
-1061:1:58
-1062:1:65
-1063:1:66
-1064:1:77
-1065:1:78
-1066:1:79
-1067:1:90
-1068:1:95
-1069:1:96
-1070:0:2969
-1071:2:1663
-1072:0:2969
-1073:2:1664
-1074:0:2969
-1075:1:108
-1076:0:2969
-1077:2:1663
-1078:0:2969
-1079:2:1664
-1080:0:2969
-1081:1:109
-1082:1:113
-1083:1:114
-1084:1:122
-1085:1:123
-1086:1:127
-1087:1:128
-1088:1:136
-1089:1:141
-1090:1:145
-1091:1:146
-1092:1:153
-1093:1:154
-1094:1:165
-1095:1:166
-1096:1:167
-1097:1:178
-1098:1:183
-1099:1:184
-1100:0:2969
-1101:1:288
-1102:0:2969
-1103:2:1663
-1104:0:2969
-1105:2:1664
-1106:0:2969
-1107:1:289
-1108:0:2969
-1109:1:486
-1110:0:2969
-1111:1:487
-1112:0:2969
-1113:1:492
-1114:0:2969
-1115:2:1663
-1116:0:2969
-1117:2:1664
-1118:0:2969
-1119:1:497
-1120:1:501
-1121:1:502
-1122:1:510
-1123:1:511
-1124:1:512
-1125:1:524
-1126:1:529
-1127:1:533
-1128:1:534
-1129:1:541
-1130:1:542
-1131:1:553
-1132:1:554
-1133:1:555
-1134:1:566
-1135:1:571
-1136:1:572
-1137:0:2969
-1138:2:1663
-1139:0:2969
-1140:2:1664
-1141:0:2969
-1142:1:584
-1143:0:2969
-1144:2:1663
-1145:0:2969
-1146:2:1664
-1147:0:2969
-1148:1:585
-1149:1:589
-1150:1:590
-1151:1:598
-1152:1:599
-1153:1:603
-1154:1:604
-1155:1:612
-1156:1:617
-1157:1:621
-1158:1:622
-1159:1:629
-1160:1:630
-1161:1:641
-1162:1:642
-1163:1:643
-1164:1:654
-1165:1:659
-1166:1:660
-1167:0:2969
-1168:2:1663
-1169:0:2969
-1170:2:1664
-1171:0:2969
-1172:1:672
-1173:0:2969
-1174:2:1663
-1175:0:2969
-1176:2:1664
-1177:0:2969
-1178:1:673
-1179:1:677
-1180:1:678
-1181:1:686
-1182:1:687
-1183:1:691
-1184:1:692
-1185:1:700
-1186:1:705
-1187:1:709
-1188:1:710
-1189:1:717
-1190:1:718
-1191:1:729
-1192:1:730
-1193:1:731
-1194:1:742
-1195:1:747
-1196:1:748
-1197:0:2969
-1198:2:1663
-1199:0:2969
-1200:2:1664
-1201:0:2969
-1202:1:760
-1203:0:2969
-1204:1:761
-1205:0:2969
-1206:1:762
-1207:0:2969
-1208:1:955
-1209:0:2969
-1210:1:956
-1211:0:2969
-1212:2:1663
-1213:0:2969
-1214:2:1664
-1215:0:2969
-1216:1:960
-1217:0:2969
-1218:2:1663
-1219:0:2969
-1220:2:1664
-1221:0:2969
-1222:1:961
-1223:1:965
-1224:1:966
-1225:1:974
-1226:1:975
-1227:1:979
-1228:1:980
-1229:1:988
-1230:1:993
-1231:1:997
-1232:1:998
-1233:1:1005
-1234:1:1006
-1235:1:1017
-1236:1:1018
-1237:1:1019
-1238:1:1030
-1239:1:1035
-1240:1:1036
-1241:0:2969
-1242:2:1663
-1243:0:2969
-1244:2:1664
-1245:0:2969
-1246:1:1048
-1247:0:2969
-1248:1:762
-1249:0:2969
-1250:1:955
-1251:0:2969
-1252:1:956
-1253:0:2969
-1254:2:1663
-1255:0:2969
-1256:2:1664
-1257:0:2969
-1258:1:960
-1259:0:2969
-1260:2:1663
-1261:0:2969
-1262:2:1664
-1263:0:2969
-1264:1:961
-1265:1:965
-1266:1:966
-1267:1:974
-1268:1:975
-1269:1:976
-1270:1:988
-1271:1:993
-1272:1:997
-1273:1:998
-1274:1:1005
-1275:1:1006
-1276:1:1017
-1277:1:1018
-1278:1:1019
-1279:1:1030
-1280:1:1035
-1281:1:1036
-1282:0:2969
-1283:2:1663
-1284:0:2969
-1285:2:1664
-1286:0:2969
-1287:1:1048
-1288:0:2969
-1289:1:1052
-1290:0:2969
-1291:2:1663
-1292:0:2969
-1293:2:1664
-1294:0:2969
-1295:1:1057
-1296:1:1061
-1297:1:1062
-1298:1:1070
-1299:1:1071
-1300:1:1072
-1301:1:1084
-1302:1:1089
-1303:1:1093
-1304:1:1094
-1305:1:1101
-1306:1:1102
-1307:1:1113
-1308:1:1114
-1309:1:1115
-1310:1:1126
-1311:1:1131
-1312:1:1132
-1313:0:2969
-1314:1:9
-1315:0:2969
-1316:2:1663
-1317:0:2969
-1318:2:1664
-1319:0:2969
-1320:1:10
-1321:0:2969
-1322:2:1665
-1323:0:2969
-1324:2:1671
-1325:0:2969
-1326:2:1674
-1327:2:1675
-1328:2:1687
-1329:2:1688
-1330:2:1692
-1331:2:1693
-1332:2:1701
-1333:2:1706
-1334:2:1710
-1335:2:1711
-1336:2:1718
-1337:2:1719
-1338:2:1730
-1339:2:1731
-1340:2:1732
-1341:2:1743
-1342:2:1748
-1343:2:1749
-1344:0:2969
-1345:2:1761
-1346:0:2969
-1347:2:1762
-1348:0:2969
-1349:1:13
-1350:0:2969
-1351:2:1763
-1352:0:2969
-1353:1:19
-1354:0:2969
-1355:1:20
-1356:0:2969
-1357:2:1762
-1358:0:2969
-1359:2:1763
-1360:0:2969
-1361:1:21
-1362:1:25
-1363:1:26
-1364:1:34
-1365:1:35
-1366:1:39
-1367:1:40
-1368:1:48
-1369:1:53
-1370:1:57
-1371:1:58
-1372:1:65
-1373:1:66
-1374:1:77
-1375:1:78
-1376:1:79
-1377:1:90
-1378:1:95
-1379:1:96
-1380:0:2969
-1381:2:1762
-1382:0:2969
-1383:2:1763
-1384:0:2969
-1385:1:108
-1386:0:2969
-1387:2:1762
-1388:0:2969
-1389:2:1763
-1390:0:2969
-1391:1:109
-1392:1:113
-1393:1:114
-1394:1:122
-1395:1:123
-1396:1:127
-1397:1:128
-1398:1:136
-1399:1:141
-1400:1:145
-1401:1:146
-1402:1:153
-1403:1:154
-1404:1:165
-1405:1:166
-1406:1:167
-1407:1:178
-1408:1:183
-1409:1:184
-1410:0:2969
-1411:1:196
-1412:0:2969
-1413:2:1762
-1414:0:2969
-1415:2:1763
-1416:0:2969
-1417:1:197
-1418:0:2969
-1419:2:1762
-1420:0:2969
-1421:2:1763
-1422:0:2969
-1423:1:198
-1424:1:202
-1425:1:203
-1426:1:211
-1427:1:212
-1428:1:216
-1429:1:217
-1430:1:225
-1431:1:230
-1432:1:234
-1433:1:235
-1434:1:242
-1435:1:243
-1436:1:254
-1437:1:255
-1438:1:256
-1439:1:267
-1440:1:272
-1441:1:273
-1442:0:2969
-1443:2:1762
-1444:0:2969
-1445:2:1763
-1446:0:2969
-1447:1:285
-1448:0:2969
-1449:1:486
-1450:0:2969
-1451:1:487
-1452:0:2969
-1453:1:20
-1454:0:2969
-1455:2:1762
-1456:0:2969
-1457:2:1763
-1458:0:2969
-1459:1:21
-1460:1:25
-1461:1:26
-1462:1:34
-1463:1:35
-1464:1:36
-1465:1:48
-1466:1:53
-1467:1:57
-1468:1:58
-1469:1:65
-1470:1:66
-1471:1:77
-1472:1:78
-1473:1:79
-1474:1:90
-1475:1:95
-1476:1:96
-1477:0:2969
-1478:2:1762
-1479:0:2969
-1480:2:1763
-1481:0:2969
-1482:1:108
-1483:0:2969
-1484:2:1762
-1485:0:2969
-1486:2:1763
-1487:0:2969
-1488:1:109
-1489:1:113
-1490:1:114
-1491:1:122
-1492:1:123
-1493:1:127
-1494:1:128
-1495:1:136
-1496:1:141
-1497:1:145
-1498:1:146
-1499:1:153
-1500:1:154
-1501:1:165
-1502:1:166
-1503:1:167
-1504:1:178
-1505:1:183
-1506:1:184
-1507:0:2969
-1508:1:288
-1509:0:2969
-1510:2:1762
-1511:0:2969
-1512:2:1763
-1513:0:2969
-1514:1:289
-1515:0:2969
-1516:1:486
-1517:0:2969
-1518:1:487
-1519:0:2969
-1520:1:492
-1521:0:2969
-1522:2:1762
-1523:0:2969
-1524:2:1763
-1525:0:2969
-1526:1:497
-1527:1:501
-1528:1:502
-1529:1:510
-1530:1:511
-1531:1:512
-1532:1:524
-1533:1:529
-1534:1:533
-1535:1:534
-1536:1:541
-1537:1:542
-1538:1:553
-1539:1:554
-1540:1:555
-1541:1:566
-1542:1:571
-1543:1:572
-1544:0:2969
-1545:2:1762
-1546:0:2969
-1547:2:1763
-1548:0:2969
-1549:1:584
-1550:0:2969
-1551:2:1762
-1552:0:2969
-1553:2:1763
-1554:0:2969
-1555:1:585
-1556:1:589
-1557:1:590
-1558:1:598
-1559:1:599
-1560:1:603
-1561:1:604
-1562:1:612
-1563:1:617
-1564:1:621
-1565:1:622
-1566:1:629
-1567:1:630
-1568:1:641
-1569:1:642
-1570:1:643
-1571:1:654
-1572:1:659
-1573:1:660
-1574:0:2969
-1575:2:1762
-1576:0:2969
-1577:2:1763
-1578:0:2969
-1579:1:672
-1580:0:2969
-1581:2:1762
-1582:0:2969
-1583:2:1763
-1584:0:2969
-1585:1:673
-1586:1:677
-1587:1:678
-1588:1:686
-1589:1:687
-1590:1:691
-1591:1:692
-1592:1:700
-1593:1:705
-1594:1:709
-1595:1:710
-1596:1:717
-1597:1:718
-1598:1:729
-1599:1:730
-1600:1:731
-1601:1:742
-1602:1:747
-1603:1:748
-1604:0:2969
-1605:2:1762
-1606:0:2969
-1607:2:1763
-1608:0:2969
-1609:1:760
-1610:0:2969
-1611:1:761
-1612:0:2969
-1613:1:762
-1614:0:2969
-1615:1:955
-1616:0:2969
-1617:1:956
-1618:0:2969
-1619:2:1762
-1620:0:2969
-1621:2:1763
-1622:0:2969
-1623:1:960
-1624:0:2969
-1625:2:1762
-1626:0:2969
-1627:2:1763
-1628:0:2969
-1629:1:961
-1630:1:965
-1631:1:966
-1632:1:974
-1633:1:975
-1634:1:979
-1635:1:980
-1636:1:988
-1637:1:993
-1638:1:997
-1639:1:998
-1640:1:1005
-1641:1:1006
-1642:1:1017
-1643:1:1018
-1644:1:1019
-1645:1:1030
-1646:1:1035
-1647:1:1036
-1648:0:2969
-1649:2:1762
-1650:0:2969
-1651:2:1763
-1652:0:2969
-1653:1:1048
-1654:0:2969
-1655:1:762
-1656:0:2969
-1657:1:955
-1658:0:2969
-1659:1:956
-1660:0:2969
-1661:2:1762
-1662:0:2969
-1663:2:1763
-1664:0:2969
-1665:1:960
-1666:0:2969
-1667:2:1762
-1668:0:2969
-1669:2:1763
-1670:0:2969
-1671:1:961
-1672:1:965
-1673:1:966
-1674:1:974
-1675:1:975
-1676:1:976
-1677:1:988
-1678:1:993
-1679:1:997
-1680:1:998
-1681:1:1005
-1682:1:1006
-1683:1:1017
-1684:1:1018
-1685:1:1019
-1686:1:1030
-1687:1:1035
-1688:1:1036
-1689:0:2969
-1690:2:1762
-1691:0:2969
-1692:2:1763
-1693:0:2969
-1694:1:1048
-1695:0:2969
-1696:1:1052
-1697:0:2969
-1698:2:1762
-1699:0:2969
-1700:2:1763
-1701:0:2969
-1702:1:1057
-1703:1:1061
-1704:1:1062
-1705:1:1070
-1706:1:1071
-1707:1:1072
-1708:1:1084
-1709:1:1089
-1710:1:1093
-1711:1:1094
-1712:1:1101
-1713:1:1102
-1714:1:1113
-1715:1:1114
-1716:1:1115
-1717:1:1126
-1718:1:1131
-1719:1:1132
-1720:0:2969
-1721:1:9
-1722:0:2969
-1723:2:1762
-1724:0:2969
-1725:2:1763
-1726:0:2969
-1727:1:10
-1728:0:2969
-1729:2:1764
-1730:0:2969
-1731:2:1770
-1732:0:2969
-1733:2:1771
-1734:0:2969
-1735:2:1772
-1736:0:2969
-1737:2:1773
-1738:0:2969
-1739:2:1774
-1740:2:1778
-1741:2:1779
-1742:2:1787
-1743:2:1788
-1744:2:1792
-1745:2:1793
-1746:2:1801
-1747:2:1806
-1748:2:1810
-1749:2:1811
-1750:2:1818
-1751:2:1819
-1752:2:1830
-1753:2:1831
-1754:2:1832
-1755:2:1843
-1756:2:1848
-1757:2:1849
-1758:0:2969
-1759:2:1861
-1760:0:2969
-1761:2:1862
-1762:0:2969
-1763:1:13
-1764:0:2969
-1765:2:1863
-1766:0:2969
-1767:1:19
-1768:0:2969
-1769:1:20
-1770:0:2969
-1771:2:1862
-1772:0:2969
-1773:2:1863
-1774:0:2969
-1775:1:21
-1776:1:25
-1777:1:26
-1778:1:34
-1779:1:35
-1780:1:39
-1781:1:40
-1782:1:48
-1783:1:53
-1784:1:57
-1785:1:58
-1786:1:65
-1787:1:66
-1788:1:77
-1789:1:78
-1790:1:79
-1791:1:90
-1792:1:95
-1793:1:96
-1794:0:2969
-1795:2:1862
-1796:0:2969
-1797:2:1863
-1798:0:2969
-1799:1:108
-1800:0:2969
-1801:2:1862
-1802:0:2969
-1803:2:1863
-1804:0:2969
-1805:1:109
-1806:1:113
-1807:1:114
-1808:1:122
-1809:1:123
-1810:1:127
-1811:1:128
-1812:1:136
-1813:1:141
-1814:1:145
-1815:1:146
-1816:1:153
-1817:1:154
-1818:1:165
-1819:1:166
-1820:1:167
-1821:1:178
-1822:1:183
-1823:1:184
-1824:0:2969
-1825:1:196
-1826:0:2969
-1827:2:1862
-1828:0:2969
-1829:2:1863
-1830:0:2969
-1831:1:197
-1832:0:2969
-1833:2:1862
-1834:0:2969
-1835:2:1863
-1836:0:2969
-1837:1:198
-1838:1:202
-1839:1:203
-1840:1:211
-1841:1:212
-1842:1:216
-1843:1:217
-1844:1:225
-1845:1:230
-1846:1:234
-1847:1:235
-1848:1:242
-1849:1:243
-1850:1:254
-1851:1:255
-1852:1:256
-1853:1:267
-1854:1:272
-1855:1:273
-1856:0:2969
-1857:2:1862
-1858:0:2969
-1859:2:1863
-1860:0:2969
-1861:1:285
-1862:0:2969
-1863:1:486
-1864:0:2969
-1865:1:487
-1866:0:2969
-1867:1:20
-1868:0:2969
-1869:2:1862
-1870:0:2969
-1871:2:1863
-1872:0:2969
-1873:1:21
-1874:1:25
-1875:1:26
-1876:1:34
-1877:1:35
-1878:1:36
-1879:1:48
-1880:1:53
-1881:1:57
-1882:1:58
-1883:1:65
-1884:1:66
-1885:1:77
-1886:1:78
-1887:1:79
-1888:1:90
-1889:1:95
-1890:1:96
-1891:0:2969
-1892:2:1862
-1893:0:2969
-1894:2:1863
-1895:0:2969
-1896:1:108
-1897:0:2969
-1898:2:1862
-1899:0:2969
-1900:2:1863
-1901:0:2969
-1902:1:109
-1903:1:113
-1904:1:114
-1905:1:122
-1906:1:123
-1907:1:127
-1908:1:128
-1909:1:136
-1910:1:141
-1911:1:145
-1912:1:146
-1913:1:153
-1914:1:154
-1915:1:165
-1916:1:166
-1917:1:167
-1918:1:178
-1919:1:183
-1920:1:184
-1921:0:2969
-1922:1:288
-1923:0:2969
-1924:2:1862
-1925:0:2969
-1926:2:1863
-1927:0:2969
-1928:1:289
-1929:0:2969
-1930:1:486
-1931:0:2969
-1932:1:487
-1933:0:2969
-1934:1:492
-1935:0:2969
-1936:2:1862
-1937:0:2969
-1938:2:1863
-1939:0:2969
-1940:1:497
-1941:1:501
-1942:1:502
-1943:1:510
-1944:1:511
-1945:1:512
-1946:1:524
-1947:1:529
-1948:1:533
-1949:1:534
-1950:1:541
-1951:1:542
-1952:1:553
-1953:1:554
-1954:1:555
-1955:1:566
-1956:1:571
-1957:1:572
-1958:0:2969
-1959:2:1862
-1960:0:2969
-1961:2:1863
-1962:0:2969
-1963:1:584
-1964:0:2969
-1965:2:1862
-1966:0:2969
-1967:2:1863
-1968:0:2969
-1969:1:585
-1970:1:589
-1971:1:590
-1972:1:598
-1973:1:599
-1974:1:603
-1975:1:604
-1976:1:612
-1977:1:617
-1978:1:621
-1979:1:622
-1980:1:629
-1981:1:630
-1982:1:641
-1983:1:642
-1984:1:643
-1985:1:654
-1986:1:659
-1987:1:660
-1988:0:2969
-1989:2:1862
-1990:0:2969
-1991:2:1863
-1992:0:2969
-1993:1:672
-1994:0:2969
-1995:2:1862
-1996:0:2969
-1997:2:1863
-1998:0:2969
-1999:1:673
-2000:1:677
-2001:1:678
-2002:1:686
-2003:1:687
-2004:1:691
-2005:1:692
-2006:1:700
-2007:1:705
-2008:1:709
-2009:1:710
-2010:1:717
-2011:1:718
-2012:1:729
-2013:1:730
-2014:1:731
-2015:1:742
-2016:1:747
-2017:1:748
-2018:0:2969
-2019:2:1862
-2020:0:2969
-2021:2:1863
-2022:0:2969
-2023:1:760
-2024:0:2969
-2025:1:761
-2026:0:2969
-2027:1:762
-2028:0:2969
-2029:1:955
-2030:0:2969
-2031:1:956
-2032:0:2969
-2033:2:1862
-2034:0:2969
-2035:2:1863
-2036:0:2969
-2037:1:960
-2038:0:2969
-2039:2:1862
-2040:0:2969
-2041:2:1863
-2042:0:2969
-2043:1:961
-2044:1:965
-2045:1:966
-2046:1:974
-2047:1:975
-2048:1:979
-2049:1:980
-2050:1:988
-2051:1:993
-2052:1:997
-2053:1:998
-2054:1:1005
-2055:1:1006
-2056:1:1017
-2057:1:1018
-2058:1:1019
-2059:1:1030
-2060:1:1035
-2061:1:1036
-2062:0:2969
-2063:2:1862
-2064:0:2969
-2065:2:1863
-2066:0:2969
-2067:1:1048
-2068:0:2969
-2069:1:762
-2070:0:2969
-2071:1:955
-2072:0:2969
-2073:1:956
-2074:0:2969
-2075:2:1862
-2076:0:2969
-2077:2:1863
-2078:0:2969
-2079:1:960
-2080:0:2969
-2081:2:1862
-2082:0:2969
-2083:2:1863
-2084:0:2969
-2085:1:961
-2086:1:965
-2087:1:966
-2088:1:974
-2089:1:975
-2090:1:976
-2091:1:988
-2092:1:993
-2093:1:997
-2094:1:998
-2095:1:1005
-2096:1:1006
-2097:1:1017
-2098:1:1018
-2099:1:1019
-2100:1:1030
-2101:1:1035
-2102:1:1036
-2103:0:2969
-2104:2:1862
-2105:0:2969
-2106:2:1863
-2107:0:2969
-2108:1:1048
-2109:0:2969
-2110:1:1052
-2111:0:2969
-2112:2:1862
-2113:0:2969
-2114:2:1863
-2115:0:2969
-2116:1:1057
-2117:1:1061
-2118:1:1062
-2119:1:1070
-2120:1:1071
-2121:1:1072
-2122:1:1084
-2123:1:1089
-2124:1:1093
-2125:1:1094
-2126:1:1101
-2127:1:1102
-2128:1:1113
-2129:1:1114
-2130:1:1115
-2131:1:1126
-2132:1:1131
-2133:1:1132
-2134:0:2969
-2135:1:9
-2136:0:2969
-2137:2:1862
-2138:0:2969
-2139:2:1863
-2140:0:2969
-2141:1:10
-2142:0:2969
-2143:2:1864
-2144:0:2969
-2145:2:1967
-2146:0:2969
-2147:2:2072
-2148:0:2969
-2149:2:2073
-2150:0:2969
-2151:2:2077
-2152:0:2969
-2153:2:2083
-2154:2:2087
-2155:2:2088
-2156:2:2096
-2157:2:2097
-2158:2:2101
-2159:2:2102
-2160:2:2110
-2161:2:2115
-2162:2:2119
-2163:2:2120
-2164:2:2127
-2165:2:2128
-2166:2:2139
-2167:2:2140
-2168:2:2141
-2169:2:2152
-2170:2:2157
-2171:2:2158
-2172:0:2969
-2173:2:2170
-2174:0:2969
-2175:2:2171
-2176:0:2969
-2177:1:13
-2178:0:2969
-2179:2:2172
-2180:0:2969
-2181:1:19
-2182:0:2969
-2183:1:20
-2184:0:2969
-2185:2:2171
-2186:0:2969
-2187:2:2172
-2188:0:2969
-2189:1:21
-2190:1:25
-2191:1:26
-2192:1:34
-2193:1:35
-2194:1:39
-2195:1:40
-2196:1:48
-2197:1:53
-2198:1:57
-2199:1:58
-2200:1:65
-2201:1:66
-2202:1:77
-2203:1:78
-2204:1:79
-2205:1:90
-2206:1:95
-2207:1:96
-2208:0:2969
-2209:2:2171
-2210:0:2969
-2211:2:2172
-2212:0:2969
-2213:1:108
-2214:0:2969
-2215:2:2171
-2216:0:2969
-2217:2:2172
-2218:0:2969
-2219:1:109
-2220:1:113
-2221:1:114
-2222:1:122
-2223:1:123
-2224:1:127
-2225:1:128
-2226:1:136
-2227:1:141
-2228:1:145
-2229:1:146
-2230:1:153
-2231:1:154
-2232:1:165
-2233:1:166
-2234:1:167
-2235:1:178
-2236:1:183
-2237:1:184
-2238:0:2969
-2239:1:196
-2240:0:2969
-2241:2:2171
-2242:0:2969
-2243:2:2172
-2244:0:2969
-2245:1:197
-2246:0:2969
-2247:2:2171
-2248:0:2969
-2249:2:2172
-2250:0:2969
-2251:1:198
-2252:1:202
-2253:1:203
-2254:1:211
-2255:1:212
-2256:1:216
-2257:1:217
-2258:1:225
-2259:1:230
-2260:1:234
-2261:1:235
-2262:1:242
-2263:1:243
-2264:1:254
-2265:1:255
-2266:1:256
-2267:1:267
-2268:1:272
-2269:1:273
-2270:0:2969
-2271:2:2171
-2272:0:2969
-2273:2:2172
-2274:0:2969
-2275:1:285
-2276:0:2969
-2277:1:486
-2278:0:2969
-2279:1:487
-2280:0:2969
-2281:1:20
-2282:0:2969
-2283:2:2171
-2284:0:2969
-2285:2:2172
-2286:0:2969
-2287:1:21
-2288:1:25
-2289:1:26
-2290:1:34
-2291:1:35
-2292:1:36
-2293:1:48
-2294:1:53
-2295:1:57
-2296:1:58
-2297:1:65
-2298:1:66
-2299:1:77
-2300:1:78
-2301:1:79
-2302:1:90
-2303:1:95
-2304:1:96
-2305:0:2969
-2306:2:2171
-2307:0:2969
-2308:2:2172
-2309:0:2969
-2310:1:108
-2311:0:2969
-2312:2:2171
-2313:0:2969
-2314:2:2172
-2315:0:2969
-2316:1:109
-2317:1:113
-2318:1:114
-2319:1:122
-2320:1:123
-2321:1:127
-2322:1:128
-2323:1:136
-2324:1:141
-2325:1:145
-2326:1:146
-2327:1:153
-2328:1:154
-2329:1:165
-2330:1:166
-2331:1:167
-2332:1:178
-2333:1:183
-2334:1:184
-2335:0:2969
-2336:1:288
-2337:0:2969
-2338:2:2171
-2339:0:2969
-2340:2:2172
-2341:0:2969
-2342:1:289
-2343:0:2969
-2344:1:486
-2345:0:2969
-2346:1:487
-2347:0:2969
-2348:1:492
-2349:0:2969
-2350:2:2171
-2351:0:2969
-2352:2:2172
-2353:0:2969
-2354:1:497
-2355:1:501
-2356:1:502
-2357:1:510
-2358:1:511
-2359:1:512
-2360:1:524
-2361:1:529
-2362:1:533
-2363:1:534
-2364:1:541
-2365:1:542
-2366:1:553
-2367:1:554
-2368:1:555
-2369:1:566
-2370:1:571
-2371:1:572
-2372:0:2969
-2373:2:2171
-2374:0:2969
-2375:2:2172
-2376:0:2969
-2377:1:584
-2378:0:2969
-2379:2:2171
-2380:0:2969
-2381:2:2172
-2382:0:2969
-2383:1:585
-2384:1:589
-2385:1:590
-2386:1:598
-2387:1:599
-2388:1:603
-2389:1:604
-2390:1:612
-2391:1:617
-2392:1:621
-2393:1:622
-2394:1:629
-2395:1:630
-2396:1:641
-2397:1:642
-2398:1:643
-2399:1:654
-2400:1:659
-2401:1:660
-2402:0:2969
-2403:2:2171
-2404:0:2969
-2405:2:2172
-2406:0:2969
-2407:1:672
-2408:0:2969
-2409:2:2171
-2410:0:2969
-2411:2:2172
-2412:0:2969
-2413:1:673
-2414:1:677
-2415:1:678
-2416:1:686
-2417:1:687
-2418:1:691
-2419:1:692
-2420:1:700
-2421:1:705
-2422:1:709
-2423:1:710
-2424:1:717
-2425:1:718
-2426:1:729
-2427:1:730
-2428:1:731
-2429:1:742
-2430:1:747
-2431:1:748
-2432:0:2969
-2433:2:2171
-2434:0:2969
-2435:2:2172
-2436:0:2969
-2437:1:760
-2438:0:2969
-2439:1:761
-2440:0:2969
-2441:1:762
-2442:0:2969
-2443:1:955
-2444:0:2969
-2445:1:956
-2446:0:2969
-2447:2:2171
-2448:0:2969
-2449:2:2172
-2450:0:2969
-2451:1:960
-2452:0:2969
-2453:2:2171
-2454:0:2969
-2455:2:2172
-2456:0:2969
-2457:1:961
-2458:1:965
-2459:1:966
-2460:1:974
-2461:1:975
-2462:1:979
-2463:1:980
-2464:1:988
-2465:1:993
-2466:1:997
-2467:1:998
-2468:1:1005
-2469:1:1006
-2470:1:1017
-2471:1:1018
-2472:1:1019
-2473:1:1030
-2474:1:1035
-2475:1:1036
-2476:0:2969
-2477:2:2171
-2478:0:2969
-2479:2:2172
-2480:0:2969
-2481:1:1048
-2482:0:2969
-2483:1:762
-2484:0:2969
-2485:1:955
-2486:0:2969
-2487:1:956
-2488:0:2969
-2489:2:2171
-2490:0:2969
-2491:2:2172
-2492:0:2969
-2493:1:960
-2494:0:2969
-2495:2:2171
-2496:0:2969
-2497:2:2172
-2498:0:2969
-2499:1:961
-2500:1:965
-2501:1:966
-2502:1:974
-2503:1:975
-2504:1:976
-2505:1:988
-2506:1:993
-2507:1:997
-2508:1:998
-2509:1:1005
-2510:1:1006
-2511:1:1017
-2512:1:1018
-2513:1:1019
-2514:1:1030
-2515:1:1035
-2516:1:1036
-2517:0:2969
-2518:2:2171
-2519:0:2969
-2520:2:2172
-2521:0:2969
-2522:1:1048
-2523:0:2969
-2524:1:1052
-2525:0:2969
-2526:2:2171
-2527:0:2969
-2528:2:2172
-2529:0:2969
-2530:1:1057
-2531:1:1061
-2532:1:1062
-2533:1:1070
-2534:1:1071
-2535:1:1072
-2536:1:1084
-2537:1:1089
-2538:1:1093
-2539:1:1094
-2540:1:1101
-2541:1:1102
-2542:1:1113
-2543:1:1114
-2544:1:1115
-2545:1:1126
-2546:1:1131
-2547:1:1132
-2548:0:2969
-2549:1:9
-2550:0:2969
-2551:2:2171
-2552:0:2969
-2553:2:2172
-2554:0:2969
-2555:1:10
-2556:0:2969
-2557:2:2173
-2558:0:2969
-2559:2:2179
-2560:0:2969
-2561:2:2180
-2562:2:2184
-2563:2:2185
-2564:2:2193
-2565:2:2194
-2566:2:2198
-2567:2:2199
-2568:2:2207
-2569:2:2212
-2570:2:2216
-2571:2:2217
-2572:2:2224
-2573:2:2225
-2574:2:2236
-2575:2:2237
-2576:2:2238
-2577:2:2249
-2578:2:2254
-2579:2:2255
-2580:0:2969
-2581:2:2267
-2582:0:2969
-2583:2:2268
-2584:0:2969
-2585:1:13
-2586:0:2969
-2587:2:2269
-2588:0:2969
-2589:1:19
-2590:0:2969
-2591:1:20
-2592:0:2969
-2593:2:2268
-2594:0:2969
-2595:2:2269
-2596:0:2969
-2597:1:21
-2598:1:25
-2599:1:26
-2600:1:34
-2601:1:35
-2602:1:39
-2603:1:40
-2604:1:48
-2605:1:53
-2606:1:57
-2607:1:58
-2608:1:65
-2609:1:66
-2610:1:77
-2611:1:78
-2612:1:79
-2613:1:90
-2614:1:95
-2615:1:96
-2616:0:2969
-2617:2:2268
-2618:0:2969
-2619:2:2269
-2620:0:2969
-2621:1:108
-2622:0:2969
-2623:2:2268
-2624:0:2969
-2625:2:2269
-2626:0:2969
-2627:1:109
-2628:1:113
-2629:1:114
-2630:1:122
-2631:1:123
-2632:1:127
-2633:1:128
-2634:1:136
-2635:1:141
-2636:1:145
-2637:1:146
-2638:1:153
-2639:1:154
-2640:1:165
-2641:1:166
-2642:1:167
-2643:1:178
-2644:1:183
-2645:1:184
-2646:0:2969
-2647:1:196
-2648:0:2969
-2649:2:2268
-2650:0:2969
-2651:2:2269
-2652:0:2969
-2653:1:197
-2654:0:2969
-2655:2:2268
-2656:0:2969
-2657:2:2269
-2658:0:2969
-2659:1:198
-2660:1:202
-2661:1:203
-2662:1:211
-2663:1:212
-2664:1:216
-2665:1:217
-2666:1:225
-2667:1:230
-2668:1:234
-2669:1:235
-2670:1:242
-2671:1:243
-2672:1:254
-2673:1:255
-2674:1:256
-2675:1:267
-2676:1:272
-2677:1:273
-2678:0:2969
-2679:2:2268
-2680:0:2969
-2681:2:2269
-2682:0:2969
-2683:1:285
-2684:0:2969
-2685:1:486
-2686:0:2969
-2687:1:487
-2688:0:2969
-2689:1:20
-2690:0:2969
-2691:2:2268
-2692:0:2969
-2693:2:2269
-2694:0:2969
-2695:1:21
-2696:1:25
-2697:1:26
-2698:1:34
-2699:1:35
-2700:1:36
-2701:1:48
-2702:1:53
-2703:1:57
-2704:1:58
-2705:1:65
-2706:1:66
-2707:1:77
-2708:1:78
-2709:1:79
-2710:1:90
-2711:1:95
-2712:1:96
-2713:0:2969
-2714:2:2268
-2715:0:2969
-2716:2:2269
-2717:0:2969
-2718:1:108
-2719:0:2969
-2720:2:2268
-2721:0:2969
-2722:2:2269
-2723:0:2969
-2724:1:109
-2725:1:113
-2726:1:114
-2727:1:122
-2728:1:123
-2729:1:127
-2730:1:128
-2731:1:136
-2732:1:141
-2733:1:145
-2734:1:146
-2735:1:153
-2736:1:154
-2737:1:165
-2738:1:166
-2739:1:167
-2740:1:178
-2741:1:183
-2742:1:184
-2743:0:2969
-2744:1:288
-2745:0:2969
-2746:2:2268
-2747:0:2969
-2748:2:2269
-2749:0:2969
-2750:1:289
-2751:0:2969
-2752:1:486
-2753:0:2969
-2754:1:487
-2755:0:2969
-2756:1:492
-2757:0:2969
-2758:2:2268
-2759:0:2969
-2760:2:2269
-2761:0:2969
-2762:1:497
-2763:1:501
-2764:1:502
-2765:1:510
-2766:1:511
-2767:1:512
-2768:1:524
-2769:1:529
-2770:1:533
-2771:1:534
-2772:1:541
-2773:1:542
-2774:1:553
-2775:1:554
-2776:1:555
-2777:1:566
-2778:1:571
-2779:1:572
-2780:0:2969
-2781:2:2268
-2782:0:2969
-2783:2:2269
-2784:0:2969
-2785:1:584
-2786:0:2969
-2787:2:2268
-2788:0:2969
-2789:2:2269
-2790:0:2969
-2791:1:585
-2792:1:589
-2793:1:590
-2794:1:598
-2795:1:599
-2796:1:603
-2797:1:604
-2798:1:612
-2799:1:617
-2800:1:621
-2801:1:622
-2802:1:629
-2803:1:630
-2804:1:641
-2805:1:642
-2806:1:643
-2807:1:654
-2808:1:659
-2809:1:660
-2810:0:2969
-2811:2:2268
-2812:0:2969
-2813:2:2269
-2814:0:2969
-2815:1:672
-2816:0:2969
-2817:2:2268
-2818:0:2969
-2819:2:2269
-2820:0:2969
-2821:1:673
-2822:1:677
-2823:1:678
-2824:1:686
-2825:1:687
-2826:1:691
-2827:1:692
-2828:1:700
-2829:1:705
-2830:1:709
-2831:1:710
-2832:1:717
-2833:1:718
-2834:1:729
-2835:1:730
-2836:1:731
-2837:1:742
-2838:1:747
-2839:1:748
-2840:0:2969
-2841:2:2268
-2842:0:2969
-2843:2:2269
-2844:0:2969
-2845:1:760
-2846:0:2969
-2847:1:761
-2848:0:2969
-2849:1:762
-2850:0:2969
-2851:1:955
-2852:0:2969
-2853:1:956
-2854:0:2969
-2855:2:2268
-2856:0:2969
-2857:2:2269
-2858:0:2969
-2859:1:960
-2860:0:2969
-2861:2:2268
-2862:0:2969
-2863:2:2269
-2864:0:2969
-2865:1:961
-2866:1:965
-2867:1:966
-2868:1:974
-2869:1:975
-2870:1:979
-2871:1:980
-2872:1:988
-2873:1:993
-2874:1:997
-2875:1:998
-2876:1:1005
-2877:1:1006
-2878:1:1017
-2879:1:1018
-2880:1:1019
-2881:1:1030
-2882:1:1035
-2883:1:1036
-2884:0:2969
-2885:2:2268
-2886:0:2969
-2887:2:2269
-2888:0:2969
-2889:1:1048
-2890:0:2969
-2891:1:762
-2892:0:2969
-2893:1:955
-2894:0:2969
-2895:1:956
-2896:0:2969
-2897:2:2268
-2898:0:2969
-2899:2:2269
-2900:0:2969
-2901:1:960
-2902:0:2969
-2903:2:2268
-2904:0:2969
-2905:2:2269
-2906:0:2969
-2907:1:961
-2908:1:965
-2909:1:966
-2910:1:974
-2911:1:975
-2912:1:976
-2913:1:988
-2914:1:993
-2915:1:997
-2916:1:998
-2917:1:1005
-2918:1:1006
-2919:1:1017
-2920:1:1018
-2921:1:1019
-2922:1:1030
-2923:1:1035
-2924:1:1036
-2925:0:2969
-2926:2:2268
-2927:0:2969
-2928:2:2269
-2929:0:2969
-2930:1:1048
-2931:0:2969
-2932:1:1052
-2933:0:2969
-2934:2:2268
-2935:0:2969
-2936:2:2269
-2937:0:2969
-2938:1:1057
-2939:1:1061
-2940:1:1062
-2941:1:1070
-2942:1:1079
-2943:1:1080
-2944:1:1084
-2945:1:1089
-2946:1:1093
-2947:1:1094
-2948:1:1101
-2949:1:1102
-2950:1:1113
-2951:1:1114
-2952:1:1117
-2953:1:1118
-2954:1:1126
-2955:1:1131
-2956:1:1132
-2957:0:2969
-2958:1:9
-2959:0:2969
-2960:2:2268
-2961:0:2969
-2962:2:2269
-2963:0:2969
-2964:1:10
-2965:0:2969
-2966:2:2270
-2967:0:2969
-2968:2:2276
-2969:0:2969
-2970:2:2279
-2971:2:2280
-2972:2:2292
-2973:2:2293
-2974:2:2297
-2975:2:2298
-2976:2:2306
-2977:2:2311
-2978:2:2315
-2979:2:2316
-2980:2:2323
-2981:2:2324
-2982:2:2335
-2983:2:2336
-2984:2:2337
-2985:2:2348
-2986:2:2353
-2987:2:2354
-2988:0:2969
-2989:2:2366
-2990:0:2969
-2991:2:2367
-2992:0:2969
-2993:1:13
-2994:0:2969
-2995:2:2368
-2996:0:2969
-2997:1:19
-2998:0:2969
-2999:1:20
-3000:0:2969
-3001:2:2367
-3002:0:2969
-3003:2:2368
-3004:0:2969
-3005:1:21
-3006:1:25
-3007:1:26
-3008:1:34
-3009:1:35
-3010:1:36
-3011:1:48
-3012:1:53
-3013:1:57
-3014:1:58
-3015:1:65
-3016:1:66
-3017:1:77
-3018:1:78
-3019:1:79
-3020:1:90
-3021:1:95
-3022:1:96
-3023:0:2969
-3024:2:2367
-3025:0:2969
-3026:2:2368
-3027:0:2969
-3028:1:108
-3029:0:2969
-3030:2:2367
-3031:0:2969
-3032:2:2368
-3033:0:2969
-3034:1:109
-3035:1:113
-3036:1:114
-3037:1:122
-3038:1:123
-3039:1:127
-3040:1:128
-3041:1:136
-3042:1:141
-3043:1:145
-3044:1:146
-3045:1:153
-3046:1:154
-3047:1:165
-3048:1:166
-3049:1:167
-3050:1:178
-3051:1:183
-3052:1:184
-3053:0:2969
-3054:1:196
-3055:0:2969
-3056:2:2367
-3057:0:2969
-3058:2:2368
-3059:0:2969
-3060:1:197
-3061:0:2969
-3062:2:2367
-3063:0:2969
-3064:2:2368
-3065:0:2969
-3066:1:198
-3067:1:202
-3068:1:203
-3069:1:211
-3070:1:212
-3071:1:216
-3072:1:217
-3073:1:225
-3074:1:230
-3075:1:234
-3076:1:235
-3077:1:242
-3078:1:243
-3079:1:254
-3080:1:255
-3081:1:256
-3082:1:267
-3083:1:272
-3084:1:273
-3085:0:2969
-3086:2:2367
-3087:0:2969
-3088:2:2368
-3089:0:2969
-3090:1:285
-3091:0:2969
-3092:1:486
-3093:0:2969
-3094:1:487
-3095:0:2969
-3096:1:20
-3097:0:2969
-3098:2:2367
-3099:0:2969
-3100:2:2368
-3101:0:2969
-3102:1:21
-3103:1:25
-3104:1:26
-3105:1:34
-3106:1:35
-3107:1:36
-3108:1:48
-3109:1:53
-3110:1:57
-3111:1:58
-3112:1:65
-3113:1:66
-3114:1:77
-3115:1:78
-3116:1:79
-3117:1:90
-3118:1:95
-3119:1:96
-3120:0:2969
-3121:2:2367
-3122:0:2969
-3123:2:2368
-3124:0:2969
-3125:1:108
-3126:0:2969
-3127:2:2367
-3128:0:2969
-3129:2:2368
-3130:0:2969
-3131:1:109
-3132:1:113
-3133:1:114
-3134:1:122
-3135:1:123
-3136:1:127
-3137:1:128
-3138:1:136
-3139:1:141
-3140:1:145
-3141:1:146
-3142:1:153
-3143:1:154
-3144:1:165
-3145:1:166
-3146:1:167
-3147:1:178
-3148:1:183
-3149:1:184
-3150:0:2969
-3151:1:288
-3152:0:2969
-3153:2:2367
-3154:0:2969
-3155:2:2368
-3156:0:2969
-3157:1:289
-3158:0:2969
-3159:1:486
-3160:0:2969
-3161:1:487
-3162:0:2969
-3163:1:492
-3164:0:2969
-3165:2:2367
-3166:0:2969
-3167:2:2368
-3168:0:2969
-3169:1:497
-3170:1:501
-3171:1:502
-3172:1:510
-3173:1:511
-3174:1:512
-3175:1:524
-3176:1:529
-3177:1:533
-3178:1:534
-3179:1:541
-3180:1:542
-3181:1:553
-3182:1:554
-3183:1:555
-3184:1:566
-3185:1:571
-3186:1:572
-3187:0:2969
-3188:2:2367
-3189:0:2969
-3190:2:2368
-3191:0:2969
-3192:1:584
-3193:0:2969
-3194:2:2367
-3195:0:2969
-3196:2:2368
-3197:0:2969
-3198:1:585
-3199:1:589
-3200:1:590
-3201:1:598
-3202:1:599
-3203:1:603
-3204:1:604
-3205:1:612
-3206:1:617
-3207:1:621
-3208:1:622
-3209:1:629
-3210:1:630
-3211:1:641
-3212:1:642
-3213:1:643
-3214:1:654
-3215:1:659
-3216:1:660
-3217:0:2969
-3218:2:2367
-3219:0:2969
-3220:2:2368
-3221:0:2969
-3222:1:672
-3223:0:2969
-3224:2:2367
-3225:0:2969
-3226:2:2368
-3227:0:2969
-3228:1:673
-3229:1:677
-3230:1:678
-3231:1:686
-3232:1:687
-3233:1:691
-3234:1:692
-3235:1:700
-3236:1:705
-3237:1:709
-3238:1:710
-3239:1:717
-3240:1:718
-3241:1:729
-3242:1:730
-3243:1:731
-3244:1:742
-3245:1:747
-3246:1:748
-3247:0:2969
-3248:2:2367
-3249:0:2969
-3250:2:2368
-3251:0:2969
-3252:1:760
-3253:0:2969
-3254:1:761
-3255:0:2969
-3256:1:762
-3257:0:2969
-3258:1:955
-3259:0:2969
-3260:1:956
-3261:0:2969
-3262:2:2367
-3263:0:2969
-3264:2:2368
-3265:0:2969
-3266:1:960
-3267:0:2969
-3268:2:2367
-3269:0:2969
-3270:2:2368
-3271:0:2969
-3272:1:961
-3273:1:965
-3274:1:966
-3275:1:974
-3276:1:975
-3277:1:979
-3278:1:980
-3279:1:988
-3280:1:993
-3281:1:997
-3282:1:998
-3283:1:1005
-3284:1:1006
-3285:1:1017
-3286:1:1018
-3287:1:1019
-3288:1:1030
-3289:1:1035
-3290:1:1036
-3291:0:2969
-3292:2:2367
-3293:0:2969
-3294:2:2368
-3295:0:2969
-3296:1:1048
-3297:0:2969
-3298:1:762
-3299:0:2969
-3300:1:955
-3301:0:2969
-3302:1:956
-3303:0:2969
-3304:2:2367
-3305:0:2969
-3306:2:2368
-3307:0:2969
-3308:1:960
-3309:0:2969
-3310:2:2367
-3311:0:2969
-3312:2:2368
-3313:0:2969
-3314:1:961
-3315:1:965
-3316:1:966
-3317:1:974
-3318:1:975
-3319:1:976
-3320:1:988
-3321:1:993
-3322:1:997
-3323:1:998
-3324:1:1005
-3325:1:1006
-3326:1:1017
-3327:1:1018
-3328:1:1019
-3329:1:1030
-3330:1:1035
-3331:1:1036
-3332:0:2969
-3333:2:2367
-3334:0:2969
-3335:2:2368
-3336:0:2969
-3337:1:1048
-3338:0:2969
-3339:1:1052
-3340:0:2969
-3341:2:2367
-3342:0:2969
-3343:2:2368
-3344:0:2969
-3345:1:1057
-3346:1:1061
-3347:1:1062
-3348:1:1070
-3349:1:1071
-3350:1:1072
-3351:1:1084
-3352:1:1089
-3353:1:1093
-3354:1:1094
-3355:1:1101
-3356:1:1102
-3357:1:1113
-3358:1:1114
-3359:1:1115
-3360:1:1126
-3361:1:1131
-3362:1:1132
-3363:0:2969
-3364:1:9
-3365:0:2969
-3366:2:2367
-3367:0:2969
-3368:2:2368
-3369:0:2969
-3370:1:10
-3371:0:2969
-3372:2:2369
-3373:0:2969
-3374:2:2375
-3375:0:2969
-3376:2:2376
-3377:0:2969
-3378:2:2377
-3379:0:2969
-3380:2:2378
-3381:0:2969
-3382:2:2379
-3383:2:2383
-3384:2:2384
-3385:2:2392
-3386:2:2393
-3387:2:2397
-3388:2:2398
-3389:2:2406
-3390:2:2411
-3391:2:2415
-3392:2:2416
-3393:2:2423
-3394:2:2424
-3395:2:2435
-3396:2:2443
-3397:2:2444
-3398:2:2448
-3399:2:2453
-3400:2:2454
-3401:0:2969
-3402:2:2466
-3403:0:2969
-3404:2:2467
-3405:0:2969
-3406:1:13
--1:-1:-1
-3407:0:2969
-3408:2:2468
-3409:0:2969
-3410:1:19
-3411:0:2969
-3412:1:20
-3413:0:2969
-3414:2:2467
-3415:0:2969
-3416:2:2468
-3417:0:2969
-3418:1:21
-3419:1:25
-3420:1:26
-3421:1:34
-3422:1:35
-3423:1:39
-3424:1:40
-3425:1:48
-3426:1:53
-3427:1:57
-3428:1:58
-3429:1:65
-3430:1:66
-3431:1:77
-3432:1:78
-3433:1:79
-3434:1:90
-3435:1:95
-3436:1:96
-3437:0:2969
-3438:2:2467
-3439:0:2969
-3440:2:2468
-3441:0:2969
-3442:1:108
-3443:0:2969
-3444:2:2467
-3445:0:2969
-3446:2:2468
-3447:0:2969
-3448:1:109
-3449:1:113
-3450:1:114
-3451:1:122
-3452:1:123
-3453:1:127
-3454:1:128
-3455:1:136
-3456:1:141
-3457:1:145
-3458:1:146
-3459:1:153
-3460:1:154
-3461:1:165
-3462:1:166
-3463:1:167
-3464:1:178
-3465:1:183
-3466:1:184
-3467:0:2969
-3468:1:196
-3469:0:2969
-3470:2:2467
-3471:0:2969
-3472:2:2468
-3473:0:2969
-3474:1:197
-3475:0:2969
-3476:2:2467
-3477:0:2969
-3478:2:2468
-3479:0:2969
-3480:1:198
-3481:1:202
-3482:1:203
-3483:1:211
-3484:1:212
-3485:1:216
-3486:1:217
-3487:1:225
-3488:1:230
-3489:1:234
-3490:1:235
-3491:1:242
-3492:1:243
-3493:1:254
-3494:1:255
-3495:1:256
-3496:1:267
-3497:1:272
-3498:1:273
-3499:0:2969
-3500:2:2467
-3501:0:2969
-3502:2:2468
-3503:0:2969
-3504:1:285
-3505:0:2969
-3506:1:486
-3507:0:2969
-3508:1:487
-3509:0:2969
-3510:1:20
-3511:0:2969
-3512:2:2467
-3513:0:2969
-3514:2:2468
-3515:0:2969
-3516:1:21
-3517:1:25
-3518:1:26
-3519:1:34
-3520:1:35
-3521:1:36
-3522:1:48
-3523:1:53
-3524:1:57
-3525:1:58
-3526:1:65
-3527:1:66
-3528:1:77
-3529:1:78
-3530:1:79
-3531:1:90
-3532:1:95
-3533:1:96
-3534:0:2969
-3535:2:2467
-3536:0:2969
-3537:2:2468
-3538:0:2969
-3539:1:108
-3540:0:2969
-3541:2:2467
-3542:0:2969
-3543:2:2468
-3544:0:2969
-3545:1:109
-3546:1:113
-3547:1:114
-3548:1:122
-3549:1:123
-3550:1:127
-3551:1:128
-3552:1:136
-3553:1:141
-3554:1:145
-3555:1:146
-3556:1:153
-3557:1:154
-3558:1:165
-3559:1:166
-3560:1:167
-3561:1:178
-3562:1:183
-3563:1:184
-3564:0:2969
-3565:1:288
-3566:0:2969
-3567:2:2467
-3568:0:2969
-3569:2:2468
-3570:0:2969
-3571:1:289
-3572:0:2969
-3573:1:486
-3574:0:2969
-3575:1:487
-3576:0:2969
-3577:1:492
-3578:0:2969
-3579:2:2467
-3580:0:2969
-3581:2:2468
-3582:0:2969
-3583:1:497
-3584:1:501
-3585:1:502
-3586:1:510
-3587:1:511
-3588:1:512
-3589:1:524
-3590:1:529
-3591:1:533
-3592:1:534
-3593:1:541
-3594:1:542
-3595:1:553
-3596:1:554
-3597:1:555
-3598:1:566
-3599:1:571
-3600:1:572
-3601:0:2969
-3602:2:2467
-3603:0:2969
-3604:2:2468
-3605:0:2969
-3606:1:584
-3607:0:2969
-3608:2:2467
-3609:0:2969
-3610:2:2468
-3611:0:2969
-3612:1:585
-3613:1:589
-3614:1:590
-3615:1:598
-3616:1:599
-3617:1:603
-3618:1:604
-3619:1:612
-3620:1:617
-3621:1:621
-3622:1:622
-3623:1:629
-3624:1:630
-3625:1:641
-3626:1:642
-3627:1:643
-3628:1:654
-3629:1:659
-3630:1:660
-3631:0:2969
-3632:2:2467
-3633:0:2969
-3634:2:2468
-3635:0:2969
-3636:1:672
-3637:0:2969
-3638:2:2467
-3639:0:2969
-3640:2:2468
-3641:0:2969
-3642:1:673
-3643:1:677
-3644:1:678
-3645:1:686
-3646:1:687
-3647:1:691
-3648:1:692
-3649:1:700
-3650:1:705
-3651:1:709
-3652:1:710
-3653:1:717
-3654:1:718
-3655:1:729
-3656:1:730
-3657:1:731
-3658:1:742
-3659:1:747
-3660:1:748
-3661:0:2969
-3662:2:2467
-3663:0:2969
-3664:2:2468
-3665:0:2969
-3666:1:760
-3667:0:2969
-3668:1:761
-3669:0:2969
-3670:1:762
-3671:0:2969
-3672:1:955
-3673:0:2969
-3674:1:956
-3675:0:2969
-3676:2:2467
-3677:0:2969
-3678:2:2468
-3679:0:2969
-3680:1:960
-3681:0:2969
-3682:2:2467
-3683:0:2969
-3684:2:2468
-3685:0:2969
-3686:1:961
-3687:1:965
-3688:1:966
-3689:1:974
-3690:1:975
-3691:1:979
-3692:1:980
-3693:1:988
-3694:1:993
-3695:1:997
-3696:1:998
-3697:1:1005
-3698:1:1006
-3699:1:1017
-3700:1:1018
-3701:1:1019
-3702:1:1030
-3703:1:1035
-3704:1:1036
-3705:0:2969
-3706:2:2467
-3707:0:2969
-3708:2:2468
-3709:0:2969
-3710:1:1048
-3711:0:2969
-3712:1:762
-3713:0:2969
-3714:1:955
-3715:0:2969
-3716:1:956
-3717:0:2969
-3718:2:2467
-3719:0:2969
-3720:2:2468
-3721:0:2969
-3722:1:960
-3723:0:2969
-3724:2:2467
-3725:0:2969
-3726:2:2468
-3727:0:2969
-3728:1:961
-3729:1:965
-3730:1:966
-3731:1:974
-3732:1:975
-3733:1:976
-3734:1:988
-3735:1:993
-3736:1:997
-3737:1:998
-3738:1:1005
-3739:1:1006
-3740:1:1017
-3741:1:1018
-3742:1:1019
-3743:1:1030
-3744:1:1035
-3745:1:1036
-3746:0:2969
-3747:2:2467
-3748:0:2969
-3749:2:2468
-3750:0:2969
-3751:1:1048
-3752:0:2969
-3753:1:1052
-3754:0:2969
-3755:2:2467
-3756:0:2969
-3757:2:2468
-3758:0:2969
-3759:1:1057
-3760:1:1061
-3761:1:1062
-3762:1:1070
-3763:1:1071
-3764:1:1072
-3765:1:1084
-3766:1:1089
-3767:1:1093
-3768:1:1094
-3769:1:1101
-3770:1:1102
-3771:1:1113
-3772:1:1114
-3773:1:1115
-3774:1:1126
-3775:1:1131
-3776:1:1132
-3777:0:2969
-3778:1:9
-3779:0:2969
-3780:2:2467
-3781:0:2969
-3782:2:2468
-3783:0:2969
-3784:1:10
-3785:0:2969
-3786:2:2469
-3787:0:2969
-3788:2:2475
-3789:0:2969
-3790:2:2476
-3791:2:2480
-3792:2:2481
-3793:2:2489
-3794:2:2490
-3795:2:2494
-3796:2:2495
-3797:2:2503
-3798:2:2508
-3799:2:2512
-3800:2:2513
-3801:2:2520
-3802:2:2521
-3803:2:2532
-3804:2:2540
-3805:2:2541
-3806:2:2545
-3807:2:2550
-3808:2:2551
-3809:0:2969
-3810:2:2563
-3811:0:2969
-3812:2:2564
-3813:0:2969
-3814:1:13
-3815:0:2969
-3816:2:2565
-3817:0:2969
-3818:1:19
-3819:0:2969
-3820:1:20
-3821:0:2969
-3822:2:2564
-3823:0:2969
-3824:2:2565
-3825:0:2969
-3826:1:21
-3827:1:25
-3828:1:26
-3829:1:34
-3830:1:35
-3831:1:39
-3832:1:40
-3833:1:48
-3834:1:53
-3835:1:57
-3836:1:58
-3837:1:65
-3838:1:66
-3839:1:77
-3840:1:78
-3841:1:79
-3842:1:90
-3843:1:95
-3844:1:96
-3845:0:2969
-3846:2:2564
-3847:0:2969
-3848:2:2565
-3849:0:2969
-3850:1:108
-3851:0:2969
-3852:2:2564
-3853:0:2969
-3854:2:2565
-3855:0:2969
-3856:1:109
-3857:1:113
-3858:1:114
-3859:1:122
-3860:1:123
-3861:1:127
-3862:1:128
-3863:1:136
-3864:1:141
-3865:1:145
-3866:1:146
-3867:1:153
-3868:1:154
-3869:1:165
-3870:1:166
-3871:1:167
-3872:1:178
-3873:1:183
-3874:1:184
-3875:0:2969
-3876:1:196
-3877:0:2969
-3878:2:2564
-3879:0:2969
-3880:2:2565
-3881:0:2969
-3882:1:197
-3883:0:2969
-3884:2:2564
-3885:0:2969
-3886:2:2565
-3887:0:2969
-3888:1:198
-3889:1:202
-3890:1:203
-3891:1:211
-3892:1:212
-3893:1:216
-3894:1:217
-3895:1:225
-3896:1:230
-3897:1:234
-3898:1:235
-3899:1:242
-3900:1:243
-3901:1:254
-3902:1:255
-3903:1:256
-3904:1:267
-3905:1:272
-3906:1:273
-3907:0:2969
-3908:2:2564
-3909:0:2969
-3910:2:2565
-3911:0:2969
-3912:1:285
-3913:0:2969
-3914:1:486
-3915:0:2969
-3916:1:487
-3917:0:2969
-3918:1:20
-3919:0:2969
-3920:2:2564
-3921:0:2969
-3922:2:2565
-3923:0:2969
-3924:1:21
-3925:1:25
-3926:1:26
-3927:1:34
-3928:1:35
-3929:1:36
-3930:1:48
-3931:1:53
-3932:1:57
-3933:1:58
-3934:1:65
-3935:1:66
-3936:1:77
-3937:1:78
-3938:1:79
-3939:1:90
-3940:1:95
-3941:1:96
-3942:0:2969
-3943:2:2564
-3944:0:2969
-3945:2:2565
-3946:0:2969
-3947:1:108
-3948:0:2969
-3949:2:2564
-3950:0:2969
-3951:2:2565
-3952:0:2969
-3953:1:109
-3954:1:113
-3955:1:114
-3956:1:122
-3957:1:123
-3958:1:127
-3959:1:128
-3960:1:136
-3961:1:141
-3962:1:145
-3963:1:146
-3964:1:153
-3965:1:154
-3966:1:165
-3967:1:166
-3968:1:167
-3969:1:178
-3970:1:183
-3971:1:184
-3972:0:2969
-3973:1:288
-3974:0:2969
-3975:2:2564
-3976:0:2969
-3977:2:2565
-3978:0:2969
-3979:1:289
-3980:0:2969
-3981:1:486
-3982:0:2969
-3983:1:487
-3984:0:2969
-3985:1:492
-3986:0:2969
-3987:2:2564
-3988:0:2969
-3989:2:2565
-3990:0:2969
-3991:1:497
-3992:1:501
-3993:1:502
-3994:1:510
-3995:1:511
-3996:1:512
-3997:1:524
-3998:1:529
-3999:1:533
-4000:1:534
-4001:1:541
-4002:1:542
-4003:1:553
-4004:1:554
-4005:1:555
-4006:1:566
-4007:1:571
-4008:1:572
-4009:0:2969
-4010:2:2564
-4011:0:2969
-4012:2:2565
-4013:0:2969
-4014:1:584
-4015:0:2969
-4016:2:2564
-4017:0:2969
-4018:2:2565
-4019:0:2969
-4020:1:585
-4021:1:589
-4022:1:590
-4023:1:598
-4024:1:599
-4025:1:603
-4026:1:604
-4027:1:612
-4028:1:617
-4029:1:621
-4030:1:622
-4031:1:629
-4032:1:630
-4033:1:641
-4034:1:642
-4035:1:643
-4036:1:654
-4037:1:659
-4038:1:660
-4039:0:2969
-4040:2:2564
-4041:0:2969
-4042:2:2565
-4043:0:2969
-4044:1:672
-4045:0:2969
-4046:2:2564
-4047:0:2969
-4048:2:2565
-4049:0:2969
-4050:1:673
-4051:1:677
-4052:1:678
-4053:1:686
-4054:1:687
-4055:1:691
-4056:1:692
-4057:1:700
-4058:1:705
-4059:1:709
-4060:1:710
-4061:1:717
-4062:1:718
-4063:1:729
-4064:1:730
-4065:1:731
-4066:1:742
-4067:1:747
-4068:1:748
-4069:0:2969
-4070:2:2564
-4071:0:2969
-4072:2:2565
-4073:0:2969
-4074:1:760
-4075:0:2969
-4076:1:761
-4077:0:2969
-4078:1:762
-4079:0:2969
-4080:1:955
-4081:0:2969
-4082:1:956
-4083:0:2969
-4084:2:2564
-4085:0:2969
-4086:2:2565
-4087:0:2969
-4088:1:960
-4089:0:2969
-4090:2:2564
-4091:0:2969
-4092:2:2565
-4093:0:2969
-4094:1:961
-4095:1:965
-4096:1:966
-4097:1:974
-4098:1:975
-4099:1:979
-4100:1:980
-4101:1:988
-4102:1:993
-4103:1:997
-4104:1:998
-4105:1:1005
-4106:1:1006
-4107:1:1017
-4108:1:1018
-4109:1:1019
-4110:1:1030
-4111:1:1035
-4112:1:1036
-4113:0:2969
-4114:2:2564
-4115:0:2969
-4116:2:2565
-4117:0:2969
-4118:1:1048
-4119:0:2969
-4120:1:762
-4121:0:2969
-4122:1:955
-4123:0:2969
-4124:1:956
-4125:0:2969
-4126:2:2564
-4127:0:2969
-4128:2:2565
-4129:0:2969
-4130:1:960
-4131:0:2969
-4132:2:2564
-4133:0:2969
-4134:2:2565
-4135:0:2969
-4136:1:961
-4137:1:965
-4138:1:966
-4139:1:974
-4140:1:975
-4141:1:976
-4142:1:988
-4143:1:993
-4144:1:997
-4145:1:998
-4146:1:1005
-4147:1:1006
-4148:1:1017
-4149:1:1018
-4150:1:1019
-4151:1:1030
-4152:1:1035
-4153:1:1036
-4154:0:2969
-4155:2:2564
-4156:0:2969
-4157:2:2565
-4158:0:2969
-4159:1:1048
-4160:0:2969
-4161:1:1052
-4162:0:2969
-4163:2:2564
-4164:0:2969
-4165:2:2565
-4166:0:2969
-4167:1:1057
-4168:1:1061
-4169:1:1062
-4170:1:1070
-4171:1:1071
-4172:1:1072
-4173:1:1084
-4174:1:1089
-4175:1:1093
-4176:1:1094
-4177:1:1101
-4178:1:1102
-4179:1:1113
-4180:1:1114
-4181:1:1115
-4182:1:1126
-4183:1:1131
-4184:1:1132
-4185:0:2969
-4186:1:9
-4187:0:2969
-4188:2:2564
-4189:0:2969
-4190:2:2565
-4191:0:2969
-4192:1:10
-4193:0:2969
-4194:2:2566
-4195:0:2969
-4196:1:11
-4197:0:2969
-4198:2:2377
-4199:0:2969
-4200:1:12
-4201:0:2969
-4202:2:2378
-4203:0:2969
-4204:2:2379
-4205:2:2383
-4206:2:2384
-4207:2:2392
-4208:2:2393
-4209:2:2397
-4210:2:2398
-4211:2:2406
-4212:2:2411
-4213:2:2415
-4214:2:2416
-4215:2:2423
-4216:2:2424
-4217:2:2435
-4218:2:2443
-4219:2:2444
-4220:2:2448
-4221:2:2453
-4222:2:2454
-4223:0:2969
-4224:2:2466
-4225:0:2969
-4226:2:2467
-4227:0:2969
-4228:1:13
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/DEFINES b/formal-model/urcu-nosched-model/result-standard-execution-nest/DEFINES
deleted file mode 100644 (file)
index 150a83c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/Makefile b/formal-model/urcu-nosched-model/result-standard-execution-nest/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.log
deleted file mode 100644 (file)
index 51f1ac0..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-Depth=    3212 States=    1e+06 Transitions= 1.17e+07 Memory=   519.572        t=   7.66 R=   1e+05
-Depth=    3212 States=    2e+06 Transitions= 2.38e+07 Memory=   572.990        t=     16 R=   1e+05
-Depth=    3212 States=    3e+06 Transitions= 3.62e+07 Memory=   626.408        t=   24.9 R=   1e+05
-pan: resizing hashtable to -w22..  done
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 48 byte, depth reached 3212, errors: 0
-  3539988 states, stored
- 39085459 states, matched
- 42625447 transitions (= stored+matched)
-1.5602888e+08 atomic steps
-hash conflicts:  28971442 (resolved)
-
-Stats on memory usage (in Megabytes):
-  256.576      equivalent memory usage for states (stored*(State-vector + overhead))
-  196.718      actual memory usage for states (compression: 76.67%)
-               state-vector as stored = 30 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  686.338      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, ".input.spin", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 61, "(1)"
-       line 417, ".input.spin", state 91, "(1)"
-       line 398, ".input.spin", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 151, "(1)"
-       line 417, ".input.spin", state 181, "(1)"
-       line 398, ".input.spin", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 242, "(1)"
-       line 417, ".input.spin", state 272, "(1)"
-       line 398, ".input.spin", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 360, "(1)"
-       line 417, ".input.spin", state 390, "(1)"
-       line 539, ".input.spin", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 398, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 59, "(1)"
-       line 412, ".input.spin", state 72, "(1)"
-       line 417, ".input.spin", state 89, "(1)"
-       line 398, ".input.spin", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 153, "(1)"
-       line 412, ".input.spin", state 166, "(1)"
-       line 651, ".input.spin", state 199, "(1)"
-       line 174, ".input.spin", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 240, "(1)"
-       line 163, ".input.spin", state 248, "(1)"
-       line 167, ".input.spin", state 260, "(1)"
-       line 174, ".input.spin", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 303, "(1)"
-       line 163, ".input.spin", state 311, "(1)"
-       line 167, ".input.spin", state 323, "(1)"
-       line 174, ".input.spin", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 370, "(1)"
-       line 163, ".input.spin", state 378, "(1)"
-       line 167, ".input.spin", state 390, "(1)"
-       line 398, ".input.spin", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 449, "(1)"
-       line 412, ".input.spin", state 462, "(1)"
-       line 417, ".input.spin", state 479, "(1)"
-       line 398, ".input.spin", state 498, "(1)"
-       line 402, ".input.spin", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 554, "(1)"
-       line 417, ".input.spin", state 571, "(1)"
-       line 402, ".input.spin", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 647, "(1)"
-       line 417, ".input.spin", state 664, "(1)"
-       line 178, ".input.spin", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 710, "(1)"
-       line 163, ".input.spin", state 718, "(1)"
-       line 167, ".input.spin", state 730, "(1)"
-       line 174, ".input.spin", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 773, "(1)"
-       line 163, ".input.spin", state 781, "(1)"
-       line 167, ".input.spin", state 793, "(1)"
-       line 174, ".input.spin", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 840, "(1)"
-       line 163, ".input.spin", state 848, "(1)"
-       line 167, ".input.spin", state 860, "(1)"
-       line 398, ".input.spin", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, ".input.spin", state 884, "(1)"
-       line 398, ".input.spin", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, ".input.spin", state 885, "else"
-       line 398, ".input.spin", state 888, "(1)"
-       line 402, ".input.spin", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 898, "(1)"
-       line 402, ".input.spin", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, ".input.spin", state 899, "else"
-       line 402, ".input.spin", state 902, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 400, ".input.spin", state 908, "((i<1))"
-       line 400, ".input.spin", state 908, "((i>=1))"
-       line 407, ".input.spin", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 927, "(1)"
-       line 408, ".input.spin", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, ".input.spin", state 928, "else"
-       line 408, ".input.spin", state 931, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 412, ".input.spin", state 940, "(1)"
-       line 412, ".input.spin", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, ".input.spin", state 941, "else"
-       line 412, ".input.spin", state 944, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 410, ".input.spin", state 950, "((i<1))"
-       line 410, ".input.spin", state 950, "((i>=1))"
-       line 417, ".input.spin", state 957, "(1)"
-       line 417, ".input.spin", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, ".input.spin", state 958, "else"
-       line 417, ".input.spin", state 961, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 402, ".input.spin", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1040, "(1)"
-       line 417, ".input.spin", state 1057, "(1)"
-       line 402, ".input.spin", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1130, "(1)"
-       line 417, ".input.spin", state 1147, "(1)"
-       line 398, ".input.spin", state 1166, "(1)"
-       line 402, ".input.spin", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1222, "(1)"
-       line 417, ".input.spin", state 1239, "(1)"
-       line 402, ".input.spin", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1315, "(1)"
-       line 417, ".input.spin", state 1332, "(1)"
-       line 178, ".input.spin", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1378, "(1)"
-       line 163, ".input.spin", state 1386, "(1)"
-       line 167, ".input.spin", state 1398, "(1)"
-       line 174, ".input.spin", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1441, "(1)"
-       line 163, ".input.spin", state 1449, "(1)"
-       line 167, ".input.spin", state 1461, "(1)"
-       line 174, ".input.spin", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1508, "(1)"
-       line 163, ".input.spin", state 1516, "(1)"
-       line 167, ".input.spin", state 1528, "(1)"
-       line 398, ".input.spin", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, ".input.spin", state 1552, "(1)"
-       line 398, ".input.spin", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, ".input.spin", state 1553, "else"
-       line 398, ".input.spin", state 1556, "(1)"
-       line 402, ".input.spin", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 1566, "(1)"
-       line 402, ".input.spin", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, ".input.spin", state 1567, "else"
-       line 402, ".input.spin", state 1570, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 400, ".input.spin", state 1576, "((i<1))"
-       line 400, ".input.spin", state 1576, "((i>=1))"
-       line 407, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 1595, "(1)"
-       line 408, ".input.spin", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, ".input.spin", state 1596, "else"
-       line 408, ".input.spin", state 1599, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 412, ".input.spin", state 1608, "(1)"
-       line 412, ".input.spin", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, ".input.spin", state 1609, "else"
-       line 412, ".input.spin", state 1612, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 410, ".input.spin", state 1618, "((i<1))"
-       line 410, ".input.spin", state 1618, "((i>=1))"
-       line 417, ".input.spin", state 1625, "(1)"
-       line 417, ".input.spin", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, ".input.spin", state 1626, "else"
-       line 417, ".input.spin", state 1629, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 178, ".input.spin", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1681, "(1)"
-       line 163, ".input.spin", state 1689, "(1)"
-       line 167, ".input.spin", state 1701, "(1)"
-       line 174, ".input.spin", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1744, "(1)"
-       line 163, ".input.spin", state 1752, "(1)"
-       line 167, ".input.spin", state 1764, "(1)"
-       line 174, ".input.spin", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1811, "(1)"
-       line 163, ".input.spin", state 1819, "(1)"
-       line 167, ".input.spin", state 1831, "(1)"
-       line 701, ".input.spin", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 29.8 seconds
-pan: rate 118871.32 states/second
-pan: avg transition delay 6.9864e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.spin.input
deleted file mode 100644 (file)
index f2f00e4..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/references.txt b/formal-model/urcu-nosched-model/result-standard-execution-nest/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu.sh b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu.spin b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu.spin
deleted file mode 100644 (file)
index 2cfcb70..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.log
deleted file mode 100644 (file)
index 884b15e..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-Depth=    3880 States=    1e+06 Transitions= 1.18e+07 Memory=   527.190        t=   9.53 R=   1e+05
-Depth=    3880 States=    2e+06 Transitions= 2.39e+07 Memory=   588.225        t=   19.8 R=   1e+05
-Depth=    3880 States=    3e+06 Transitions= 3.61e+07 Memory=   649.260        t=   30.5 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=    3880 States=    4e+06 Transitions= 4.84e+07 Memory=   741.318        t=   41.1 R=   1e+05
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3880, errors: 0
-  4015564 states, stored
- 44539121 states, matched
- 48554685 transitions (= stored+matched)
-1.7777933e+08 atomic steps
-hash conflicts:  33629695 (resolved)
-
-Stats on memory usage (in Megabytes):
-  321.681      equivalent memory usage for states (stored*(State-vector + overhead))
-  252.629      actual memory usage for states (compression: 78.53%)
-               state-vector as stored = 38 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  742.295      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 61, "(1)"
-       line 417, "pan.___", state 91, "(1)"
-       line 398, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 151, "(1)"
-       line 417, "pan.___", state 181, "(1)"
-       line 398, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 242, "(1)"
-       line 417, "pan.___", state 272, "(1)"
-       line 398, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 360, "(1)"
-       line 417, "pan.___", state 390, "(1)"
-       line 539, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 412, "pan.___", state 72, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 153, "(1)"
-       line 412, "pan.___", state 166, "(1)"
-       line 651, "pan.___", state 199, "(1)"
-       line 174, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 240, "(1)"
-       line 163, "pan.___", state 248, "(1)"
-       line 167, "pan.___", state 260, "(1)"
-       line 174, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 303, "(1)"
-       line 163, "pan.___", state 311, "(1)"
-       line 167, "pan.___", state 323, "(1)"
-       line 174, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 370, "(1)"
-       line 163, "pan.___", state 378, "(1)"
-       line 167, "pan.___", state 390, "(1)"
-       line 398, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 449, "(1)"
-       line 412, "pan.___", state 462, "(1)"
-       line 417, "pan.___", state 479, "(1)"
-       line 398, "pan.___", state 498, "(1)"
-       line 402, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 554, "(1)"
-       line 417, "pan.___", state 571, "(1)"
-       line 402, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 647, "(1)"
-       line 417, "pan.___", state 664, "(1)"
-       line 178, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 710, "(1)"
-       line 163, "pan.___", state 718, "(1)"
-       line 167, "pan.___", state 730, "(1)"
-       line 174, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 773, "(1)"
-       line 163, "pan.___", state 781, "(1)"
-       line 167, "pan.___", state 793, "(1)"
-       line 174, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 840, "(1)"
-       line 163, "pan.___", state 848, "(1)"
-       line 167, "pan.___", state 860, "(1)"
-       line 398, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, "pan.___", state 884, "(1)"
-       line 398, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, "pan.___", state 885, "else"
-       line 398, "pan.___", state 888, "(1)"
-       line 402, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, "pan.___", state 899, "else"
-       line 402, "pan.___", state 902, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 400, "pan.___", state 908, "((i<1))"
-       line 400, "pan.___", state 908, "((i>=1))"
-       line 407, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 927, "(1)"
-       line 408, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, "pan.___", state 928, "else"
-       line 408, "pan.___", state 931, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 412, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, "pan.___", state 941, "else"
-       line 412, "pan.___", state 944, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 410, "pan.___", state 950, "((i<1))"
-       line 410, "pan.___", state 950, "((i>=1))"
-       line 417, "pan.___", state 957, "(1)"
-       line 417, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, "pan.___", state 958, "else"
-       line 417, "pan.___", state 961, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 402, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1040, "(1)"
-       line 417, "pan.___", state 1057, "(1)"
-       line 402, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1130, "(1)"
-       line 417, "pan.___", state 1147, "(1)"
-       line 398, "pan.___", state 1166, "(1)"
-       line 402, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1222, "(1)"
-       line 417, "pan.___", state 1239, "(1)"
-       line 402, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1315, "(1)"
-       line 417, "pan.___", state 1332, "(1)"
-       line 178, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1378, "(1)"
-       line 163, "pan.___", state 1386, "(1)"
-       line 167, "pan.___", state 1398, "(1)"
-       line 174, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1441, "(1)"
-       line 163, "pan.___", state 1449, "(1)"
-       line 167, "pan.___", state 1461, "(1)"
-       line 174, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1508, "(1)"
-       line 163, "pan.___", state 1516, "(1)"
-       line 167, "pan.___", state 1528, "(1)"
-       line 398, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, "pan.___", state 1552, "(1)"
-       line 398, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, "pan.___", state 1553, "else"
-       line 398, "pan.___", state 1556, "(1)"
-       line 402, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 1566, "(1)"
-       line 402, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, "pan.___", state 1567, "else"
-       line 402, "pan.___", state 1570, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 400, "pan.___", state 1576, "((i<1))"
-       line 400, "pan.___", state 1576, "((i>=1))"
-       line 407, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1595, "(1)"
-       line 408, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, "pan.___", state 1596, "else"
-       line 408, "pan.___", state 1599, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 412, "pan.___", state 1608, "(1)"
-       line 412, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, "pan.___", state 1609, "else"
-       line 412, "pan.___", state 1612, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 410, "pan.___", state 1618, "((i<1))"
-       line 410, "pan.___", state 1618, "((i>=1))"
-       line 417, "pan.___", state 1625, "(1)"
-       line 417, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, "pan.___", state 1626, "else"
-       line 417, "pan.___", state 1629, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 178, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1681, "(1)"
-       line 163, "pan.___", state 1689, "(1)"
-       line 167, "pan.___", state 1701, "(1)"
-       line 174, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1744, "(1)"
-       line 163, "pan.___", state 1752, "(1)"
-       line 167, "pan.___", state 1764, "(1)"
-       line 174, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1811, "(1)"
-       line 163, "pan.___", state 1819, "(1)"
-       line 167, "pan.___", state 1831, "(1)"
-       line 701, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 748, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 41.3 seconds
-pan: rate 97205.616 states/second
-pan: avg transition delay 8.5079e-07 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.ltl b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.spin.input
deleted file mode 100644 (file)
index f2f00e4..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 837f3d9..0000000
+++ /dev/null
@@ -1,15043 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1180
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1181
-243:2:1185
-244:2:1186
-245:2:1194
-246:2:1195
-247:2:1199
-248:2:1200
-249:2:1194
-250:2:1195
-251:2:1196
-252:2:1208
-253:2:1213
-254:2:1217
-255:2:1218
-256:2:1225
-257:2:1226
-258:2:1237
-259:2:1238
-260:2:1239
-261:2:1237
-262:2:1238
-263:2:1239
-264:2:1250
-265:2:1255
-266:2:1256
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1268
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1270
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1271
-279:2:1275
-280:2:1276
-281:2:1284
-282:2:1285
-283:2:1289
-284:2:1290
-285:2:1284
-286:2:1285
-287:2:1289
-288:2:1290
-289:2:1298
-290:2:1303
-291:2:1307
-292:2:1308
-293:2:1315
-294:2:1316
-295:2:1327
-296:2:1328
-297:2:1329
-298:2:1327
-299:2:1328
-300:2:1329
-301:2:1340
-302:2:1345
-303:2:1346
-304:0:4365
-305:2:1358
-306:0:4365
-307:2:1454
-308:0:4365
-309:3:2528
-310:0:4365
-311:2:1455
-312:0:4365
-313:3:2529
-314:0:4365
-315:2:1652
-316:0:4365
-317:2:1653
-318:0:4365
-319:2:1657
-320:0:4365
-321:2:1660
-322:0:4365
-323:3:2528
-324:0:4365
-325:2:1665
-326:2:1669
-327:2:1670
-328:2:1678
-329:2:1679
-330:2:1683
-331:2:1684
-332:2:1678
-333:2:1679
-334:2:1680
-335:2:1692
-336:2:1697
-337:2:1701
-338:2:1702
-339:2:1709
-340:2:1710
-341:2:1721
-342:2:1722
-343:2:1723
-344:2:1721
-345:2:1722
-346:2:1723
-347:2:1734
-348:2:1739
-349:2:1740
-350:0:4365
-351:3:2529
-352:0:4365
-353:2:1752
-354:0:4365
-355:3:2528
-356:0:4365
-357:2:1754
-358:0:4365
-359:3:2529
-360:0:4365
-361:2:1755
-362:2:1759
-363:2:1760
-364:2:1768
-365:2:1769
-366:2:1773
-367:2:1774
-368:2:1768
-369:2:1769
-370:2:1773
-371:2:1774
-372:2:1782
-373:2:1787
-374:2:1791
-375:2:1792
-376:2:1799
-377:2:1800
-378:2:1811
-379:2:1812
-380:2:1813
-381:2:1811
-382:2:1812
-383:2:1813
-384:2:1824
-385:2:1829
-386:2:1830
-387:0:4365
-388:2:1842
-389:0:4365
-390:3:2528
-391:0:4365
-392:2:1844
-393:0:4365
-394:3:2529
-395:0:4365
-396:2:1845
-397:2:1849
-398:2:1850
-399:2:1858
-400:2:1859
-401:2:1863
-402:2:1864
-403:2:1858
-404:2:1859
-405:2:1863
-406:2:1864
-407:2:1872
-408:2:1877
-409:2:1881
-410:2:1882
-411:2:1889
-412:2:1890
-413:2:1901
-414:2:1902
-415:2:1903
-416:2:1901
-417:2:1902
-418:2:1903
-419:2:1914
-420:2:1919
-421:2:1920
-422:0:4365
-423:2:1932
-424:0:4365
-425:3:2528
-426:0:4365
-427:2:1934
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:1935
-432:0:4365
-433:2:1936
-434:0:4365
-435:2:2129
-436:0:4365
-437:2:2130
-438:0:4365
-439:2:2134
-440:0:4365
-441:3:2528
-442:0:4365
-443:2:2136
-444:0:4365
-445:3:2529
-446:0:4365
-447:2:2137
-448:2:2141
-449:2:2142
-450:2:2150
-451:2:2151
-452:2:2155
-453:2:2156
-454:2:2150
-455:2:2151
-456:2:2155
-457:2:2156
-458:2:2164
-459:2:2169
-460:2:2173
-461:2:2174
-462:2:2181
-463:2:2182
-464:2:2193
-465:2:2194
-466:2:2195
-467:2:2193
-468:2:2194
-469:2:2195
-470:2:2206
-471:2:2211
-472:2:2212
-473:0:4365
-474:2:2224
-475:0:4365
-476:3:2528
-477:0:4365
-478:2:2226
-479:0:4365
-480:3:2529
-481:0:4365
-482:2:1936
-483:0:4365
-484:2:2129
-485:0:4365
-486:2:2130
-487:0:4365
-488:2:2134
-489:0:4365
-490:3:2528
-491:0:4365
-492:2:2136
-493:0:4365
-494:3:2529
-495:0:4365
-496:2:2137
-497:2:2141
-498:2:2142
-499:2:2150
-500:2:2151
-501:2:2155
-502:2:2156
-503:2:2150
-504:2:2151
-505:2:2152
-506:2:2164
-507:2:2169
-508:2:2173
-509:2:2174
-510:2:2181
-511:2:2182
-512:2:2193
-513:2:2194
-514:2:2195
-515:2:2193
-516:2:2194
-517:2:2195
-518:2:2206
-519:2:2211
-520:2:2212
-521:0:4365
-522:2:2224
-523:0:4365
-524:3:2528
-525:0:4365
-526:2:2226
-527:0:4365
-528:3:2529
-529:0:4365
-530:2:2230
-531:0:4365
-532:3:2528
-533:0:4365
-534:2:2235
-535:2:2239
-536:2:2240
-537:2:2248
-538:2:2249
-539:2:2253
-540:2:2254
-541:2:2248
-542:2:2249
-543:2:2250
-544:2:2262
-545:2:2267
-546:2:2271
-547:2:2272
-548:2:2279
-549:2:2280
-550:2:2291
-551:2:2292
-552:2:2293
-553:2:2291
-554:2:2292
-555:2:2293
-556:2:2304
-557:2:2309
-558:2:2310
-559:0:4365
-560:3:2529
-561:0:4365
-562:2:2322
-563:0:4365
-564:2:1169
-565:0:4365
-566:3:2528
-567:0:4365
-568:2:1170
-569:0:4365
-570:3:2529
-571:0:4365
-572:3:2530
-573:0:4365
-574:3:2536
-575:0:4365
-576:3:2537
-577:0:4365
-578:3:2547
-579:0:4365
-580:3:2548
-581:0:4365
-582:3:2552
-583:3:2553
-584:3:2557
-585:3:2561
-586:3:2562
-587:3:2557
-588:3:2561
-589:3:2562
-590:3:2566
-591:3:2574
-592:3:2575
-593:3:2580
-594:3:2587
-595:3:2588
-596:3:2587
-597:3:2588
-598:3:2595
-599:3:2600
-600:0:4365
-601:3:2611
-602:0:4365
-603:3:2615
-604:3:2616
-605:3:2620
-606:3:2624
-607:3:2625
-608:3:2620
-609:3:2624
-610:3:2625
-611:3:2629
-612:3:2637
-613:3:2638
-614:3:2643
-615:3:2650
-616:3:2651
-617:3:2650
-618:3:2651
-619:3:2658
-620:3:2663
-621:0:4365
-622:3:2611
-623:0:4365
-624:3:2615
-625:3:2616
-626:3:2620
-627:3:2624
-628:3:2625
-629:3:2620
-630:3:2624
-631:3:2625
-632:3:2629
-633:3:2637
-634:3:2638
-635:3:2643
-636:3:2650
-637:3:2651
-638:3:2650
-639:3:2651
-640:3:2658
-641:3:2663
-642:0:4365
-643:3:2674
-644:0:4365
-645:3:2682
-646:3:2683
-647:3:2687
-648:3:2691
-649:3:2692
-650:3:2687
-651:3:2691
-652:3:2692
-653:3:2696
-654:3:2704
-655:3:2705
-656:3:2710
-657:3:2717
-658:3:2718
-659:3:2717
-660:3:2718
-661:3:2725
-662:3:2730
-663:0:4365
-664:3:2745
-665:0:4365
-666:3:2746
-667:0:4365
-668:2:1173
-669:0:4365
-670:3:2747
-671:0:4365
-672:2:1179
-673:0:4365
-674:2:1180
-675:0:4365
-676:3:2746
-677:0:4365
-678:2:1181
-679:2:1185
-680:2:1186
-681:2:1194
-682:2:1195
-683:2:1199
-684:2:1200
-685:2:1194
-686:2:1195
-687:2:1199
-688:2:1200
-689:2:1208
-690:2:1213
-691:2:1217
-692:2:1218
-693:2:1225
-694:2:1226
-695:2:1237
-696:2:1238
-697:2:1239
-698:2:1237
-699:2:1238
-700:2:1239
-701:2:1250
-702:2:1255
-703:2:1256
-704:0:4365
-705:3:2747
-706:0:4365
-707:2:1268
-708:0:4365
-709:3:2746
-710:0:4365
-711:2:1270
-712:0:4365
-713:3:2747
-714:0:4365
-715:2:1271
-716:2:1275
-717:2:1276
-718:2:1284
-719:2:1285
-720:2:1289
-721:2:1290
-722:2:1284
-723:2:1285
-724:2:1289
-725:2:1290
-726:2:1298
-727:2:1303
-728:2:1307
-729:2:1308
-730:2:1315
-731:2:1316
-732:2:1327
-733:2:1328
-734:2:1329
-735:2:1327
-736:2:1328
-737:2:1329
-738:2:1340
-739:2:1345
-740:2:1346
-741:0:4365
-742:2:1358
-743:0:4365
-744:2:1360
-745:0:4365
-746:3:2746
-747:0:4365
-748:2:1361
-749:0:4365
-750:3:2747
-751:0:4365
-752:2:1362
-753:2:1366
-754:2:1367
-755:2:1375
-756:2:1376
-757:2:1380
-758:2:1381
-759:2:1375
-760:2:1376
-761:2:1380
-762:2:1381
-763:2:1389
-764:2:1394
-765:2:1398
-766:2:1399
-767:2:1406
-768:2:1407
-769:2:1418
-770:2:1419
-771:2:1420
-772:2:1418
-773:2:1419
-774:2:1420
-775:2:1431
-776:2:1436
-777:2:1437
-778:0:4365
-779:2:1449
-780:0:4365
-781:3:2746
-782:0:4365
-783:2:1451
-784:0:4365
-785:3:2747
-786:0:4365
-787:2:1652
-788:0:4365
-789:2:1653
-790:0:4365
-791:2:1657
-792:0:4365
-793:2:1180
-794:0:4365
-795:3:2746
-796:0:4365
-797:2:1181
-798:2:1185
-799:2:1186
-800:2:1194
-801:2:1195
-802:2:1199
-803:2:1200
-804:2:1194
-805:2:1195
-806:2:1196
-807:2:1208
-808:2:1213
-809:2:1217
-810:2:1218
-811:2:1225
-812:2:1226
-813:2:1237
-814:2:1238
-815:2:1239
-816:2:1237
-817:2:1238
-818:2:1239
-819:2:1250
-820:2:1255
-821:2:1256
-822:0:4365
-823:3:2747
-824:0:4365
-825:2:1268
-826:0:4365
-827:3:2746
-828:0:4365
-829:2:1270
-830:0:4365
-831:3:2747
-832:0:4365
-833:2:1271
-834:2:1275
-835:2:1276
-836:2:1284
-837:2:1285
-838:2:1289
-839:2:1290
-840:2:1284
-841:2:1285
-842:2:1289
-843:2:1290
-844:2:1298
-845:2:1303
-846:2:1307
-847:2:1308
-848:2:1315
-849:2:1316
-850:2:1327
-851:2:1328
-852:2:1329
-853:2:1327
-854:2:1328
-855:2:1329
-856:2:1340
-857:2:1345
-858:2:1346
-859:0:4365
-860:2:1358
-861:0:4365
-862:2:1454
-863:0:4365
-864:3:2746
-865:0:4365
-866:2:1455
-867:0:4365
-868:3:2747
-869:0:4365
-870:2:1652
-871:0:4365
-872:2:1653
-873:0:4365
-874:2:1657
-875:0:4365
-876:2:1660
-877:0:4365
-878:3:2746
-879:0:4365
-880:2:1665
-881:2:1669
-882:2:1670
-883:2:1678
-884:2:1679
-885:2:1683
-886:2:1684
-887:2:1678
-888:2:1679
-889:2:1680
-890:2:1692
-891:2:1697
-892:2:1701
-893:2:1702
-894:2:1709
-895:2:1710
-896:2:1721
-897:2:1722
-898:2:1723
-899:2:1721
-900:2:1722
-901:2:1723
-902:2:1734
-903:2:1739
-904:2:1740
-905:0:4365
-906:3:2747
-907:0:4365
-908:2:1752
-909:0:4365
-910:3:2746
-911:0:4365
-912:2:1754
-913:0:4365
-914:3:2747
-915:0:4365
-916:2:1755
-917:2:1759
-918:2:1760
-919:2:1768
-920:2:1769
-921:2:1773
-922:2:1774
-923:2:1768
-924:2:1769
-925:2:1773
-926:2:1774
-927:2:1782
-928:2:1787
-929:2:1791
-930:2:1792
-931:2:1799
-932:2:1800
-933:2:1811
-934:2:1812
-935:2:1813
-936:2:1811
-937:2:1812
-938:2:1813
-939:2:1824
-940:2:1829
-941:2:1830
-942:0:4365
-943:2:1842
-944:0:4365
-945:3:2746
-946:0:4365
-947:2:1844
-948:0:4365
-949:3:2747
-950:0:4365
-951:2:1845
-952:2:1849
-953:2:1850
-954:2:1858
-955:2:1859
-956:2:1863
-957:2:1864
-958:2:1858
-959:2:1859
-960:2:1863
-961:2:1864
-962:2:1872
-963:2:1877
-964:2:1881
-965:2:1882
-966:2:1889
-967:2:1890
-968:2:1901
-969:2:1902
-970:2:1903
-971:2:1901
-972:2:1902
-973:2:1903
-974:2:1914
-975:2:1919
-976:2:1920
-977:0:4365
-978:2:1932
-979:0:4365
-980:3:2746
-981:0:4365
-982:2:1934
-983:0:4365
-984:3:2747
-985:0:4365
-986:2:1935
-987:0:4365
-988:2:1936
-989:0:4365
-990:2:2129
-991:0:4365
-992:2:2130
-993:0:4365
-994:2:2134
-995:0:4365
-996:3:2746
-997:0:4365
-998:2:2136
-999:0:4365
-1000:3:2747
-1001:0:4365
-1002:2:2137
-1003:2:2141
-1004:2:2142
-1005:2:2150
-1006:2:2151
-1007:2:2155
-1008:2:2156
-1009:2:2150
-1010:2:2151
-1011:2:2155
-1012:2:2156
-1013:2:2164
-1014:2:2169
-1015:2:2173
-1016:2:2174
-1017:2:2181
-1018:2:2182
-1019:2:2193
-1020:2:2194
-1021:2:2195
-1022:2:2193
-1023:2:2194
-1024:2:2195
-1025:2:2206
-1026:2:2211
-1027:2:2212
-1028:0:4365
-1029:2:2224
-1030:0:4365
-1031:3:2746
-1032:0:4365
-1033:2:2226
-1034:0:4365
-1035:3:2747
-1036:0:4365
-1037:2:1936
-1038:0:4365
-1039:2:2129
-1040:0:4365
-1041:2:2130
-1042:0:4365
-1043:2:2134
-1044:0:4365
-1045:3:2746
-1046:0:4365
-1047:2:2136
-1048:0:4365
-1049:3:2747
-1050:0:4365
-1051:2:2137
-1052:2:2141
-1053:2:2142
-1054:2:2150
-1055:2:2151
-1056:2:2155
-1057:2:2156
-1058:2:2150
-1059:2:2151
-1060:2:2152
-1061:2:2164
-1062:2:2169
-1063:2:2173
-1064:2:2174
-1065:2:2181
-1066:2:2182
-1067:2:2193
-1068:2:2194
-1069:2:2195
-1070:2:2193
-1071:2:2194
-1072:2:2195
-1073:2:2206
-1074:2:2211
-1075:2:2212
-1076:0:4365
-1077:2:2224
-1078:0:4365
-1079:3:2746
-1080:0:4365
-1081:2:2226
-1082:0:4365
-1083:3:2747
-1084:0:4365
-1085:2:2230
-1086:0:4365
-1087:3:2746
-1088:0:4365
-1089:2:2235
-1090:2:2239
-1091:2:2240
-1092:2:2248
-1093:2:2249
-1094:2:2253
-1095:2:2254
-1096:2:2248
-1097:2:2249
-1098:2:2250
-1099:2:2262
-1100:2:2267
-1101:2:2271
-1102:2:2272
-1103:2:2279
-1104:2:2280
-1105:2:2291
-1106:2:2292
-1107:2:2293
-1108:2:2291
-1109:2:2292
-1110:2:2293
-1111:2:2304
-1112:2:2309
-1113:2:2310
-1114:0:4365
-1115:3:2747
-1116:0:4365
-1117:2:2322
-1118:0:4365
-1119:2:1169
-1120:0:4365
-1121:3:2746
-1122:0:4365
-1123:2:1170
-1124:0:4365
-1125:3:2747
-1126:0:4365
-1127:3:2748
-1128:0:4365
-1129:3:2754
-1130:0:4365
-1131:3:2755
-1132:3:2759
-1133:3:2760
-1134:3:2768
-1135:3:2769
-1136:3:2773
-1137:3:2774
-1138:3:2768
-1139:3:2769
-1140:3:2773
-1141:3:2774
-1142:3:2782
-1143:3:2787
-1144:3:2791
-1145:3:2792
-1146:3:2799
-1147:3:2800
-1148:3:2811
-1149:3:2812
-1150:3:2813
-1151:3:2811
-1152:3:2812
-1153:3:2813
-1154:3:2824
-1155:3:2829
-1156:3:2830
-1157:0:4365
-1158:3:2842
-1159:0:4365
-1160:3:2843
-1161:0:4365
-1162:2:1173
-1163:0:4365
-1164:3:2844
-1165:0:4365
-1166:2:1179
-1167:0:4365
-1168:2:1180
-1169:0:4365
-1170:3:2843
-1171:0:4365
-1172:2:1181
-1173:2:1185
-1174:2:1186
-1175:2:1194
-1176:2:1195
-1177:2:1199
-1178:2:1200
-1179:2:1194
-1180:2:1195
-1181:2:1199
-1182:2:1200
-1183:2:1208
-1184:2:1213
-1185:2:1217
-1186:2:1218
-1187:2:1225
-1188:2:1226
-1189:2:1237
-1190:2:1238
-1191:2:1239
-1192:2:1237
-1193:2:1238
-1194:2:1239
-1195:2:1250
-1196:2:1255
-1197:2:1256
-1198:0:4365
-1199:3:2844
-1200:0:4365
-1201:2:1268
-1202:0:4365
-1203:3:2843
-1204:0:4365
-1205:2:1270
-1206:0:4365
-1207:3:2844
-1208:0:4365
-1209:2:1271
-1210:2:1275
-1211:2:1276
-1212:2:1284
-1213:2:1285
-1214:2:1289
-1215:2:1290
-1216:2:1284
-1217:2:1285
-1218:2:1289
-1219:2:1290
-1220:2:1298
-1221:2:1303
-1222:2:1307
-1223:2:1308
-1224:2:1315
-1225:2:1316
-1226:2:1327
-1227:2:1328
-1228:2:1329
-1229:2:1327
-1230:2:1328
-1231:2:1329
-1232:2:1340
-1233:2:1345
-1234:2:1346
-1235:0:4365
-1236:2:1358
-1237:0:4365
-1238:2:1360
-1239:0:4365
-1240:3:2843
-1241:0:4365
-1242:2:1361
-1243:0:4365
-1244:3:2844
-1245:0:4365
-1246:2:1362
-1247:2:1366
-1248:2:1367
-1249:2:1375
-1250:2:1376
-1251:2:1380
-1252:2:1381
-1253:2:1375
-1254:2:1376
-1255:2:1380
-1256:2:1381
-1257:2:1389
-1258:2:1394
-1259:2:1398
-1260:2:1399
-1261:2:1406
-1262:2:1407
-1263:2:1418
-1264:2:1419
-1265:2:1420
-1266:2:1418
-1267:2:1419
-1268:2:1420
-1269:2:1431
-1270:2:1436
-1271:2:1437
-1272:0:4365
-1273:2:1449
-1274:0:4365
-1275:3:2843
-1276:0:4365
-1277:2:1451
-1278:0:4365
-1279:3:2844
-1280:0:4365
-1281:2:1652
-1282:0:4365
-1283:2:1653
-1284:0:4365
-1285:2:1657
-1286:0:4365
-1287:2:1180
-1288:0:4365
-1289:3:2843
-1290:0:4365
-1291:2:1181
-1292:2:1185
-1293:2:1186
-1294:2:1194
-1295:2:1195
-1296:2:1199
-1297:2:1200
-1298:2:1194
-1299:2:1195
-1300:2:1196
-1301:2:1208
-1302:2:1213
-1303:2:1217
-1304:2:1218
-1305:2:1225
-1306:2:1226
-1307:2:1237
-1308:2:1238
-1309:2:1239
-1310:2:1237
-1311:2:1238
-1312:2:1239
-1313:2:1250
-1314:2:1255
-1315:2:1256
-1316:0:4365
-1317:3:2844
-1318:0:4365
-1319:2:1268
-1320:0:4365
-1321:3:2843
-1322:0:4365
-1323:2:1270
-1324:0:4365
-1325:3:2844
-1326:0:4365
-1327:2:1271
-1328:2:1275
-1329:2:1276
-1330:2:1284
-1331:2:1285
-1332:2:1289
-1333:2:1290
-1334:2:1284
-1335:2:1285
-1336:2:1289
-1337:2:1290
-1338:2:1298
-1339:2:1303
-1340:2:1307
-1341:2:1308
-1342:2:1315
-1343:2:1316
-1344:2:1327
-1345:2:1328
-1346:2:1329
-1347:2:1327
-1348:2:1328
-1349:2:1329
-1350:2:1340
-1351:2:1345
-1352:2:1346
-1353:0:4365
-1354:2:1358
-1355:0:4365
-1356:2:1454
-1357:0:4365
-1358:3:2843
-1359:0:4365
-1360:2:1455
-1361:0:4365
-1362:3:2844
-1363:0:4365
-1364:2:1652
-1365:0:4365
-1366:2:1653
-1367:0:4365
-1368:2:1657
-1369:0:4365
-1370:2:1660
-1371:0:4365
-1372:3:2843
-1373:0:4365
-1374:2:1665
-1375:2:1669
-1376:2:1670
-1377:2:1678
-1378:2:1679
-1379:2:1683
-1380:2:1684
-1381:2:1678
-1382:2:1679
-1383:2:1680
-1384:2:1692
-1385:2:1697
-1386:2:1701
-1387:2:1702
-1388:2:1709
-1389:2:1710
-1390:2:1721
-1391:2:1722
-1392:2:1723
-1393:2:1721
-1394:2:1722
-1395:2:1723
-1396:2:1734
-1397:2:1739
-1398:2:1740
-1399:0:4365
-1400:3:2844
-1401:0:4365
-1402:2:1752
-1403:0:4365
-1404:3:2843
-1405:0:4365
-1406:2:1754
-1407:0:4365
-1408:3:2844
-1409:0:4365
-1410:2:1755
-1411:2:1759
-1412:2:1760
-1413:2:1768
-1414:2:1769
-1415:2:1773
-1416:2:1774
-1417:2:1768
-1418:2:1769
-1419:2:1773
-1420:2:1774
-1421:2:1782
-1422:2:1787
-1423:2:1791
-1424:2:1792
-1425:2:1799
-1426:2:1800
-1427:2:1811
-1428:2:1812
-1429:2:1813
-1430:2:1811
-1431:2:1812
-1432:2:1813
-1433:2:1824
-1434:2:1829
-1435:2:1830
-1436:0:4365
-1437:2:1842
-1438:0:4365
-1439:3:2843
-1440:0:4365
-1441:2:1844
-1442:0:4365
-1443:3:2844
-1444:0:4365
-1445:2:1845
-1446:2:1849
-1447:2:1850
-1448:2:1858
-1449:2:1859
-1450:2:1863
-1451:2:1864
-1452:2:1858
-1453:2:1859
-1454:2:1863
-1455:2:1864
-1456:2:1872
-1457:2:1877
-1458:2:1881
-1459:2:1882
-1460:2:1889
-1461:2:1890
-1462:2:1901
-1463:2:1902
-1464:2:1903
-1465:2:1901
-1466:2:1902
-1467:2:1903
-1468:2:1914
-1469:2:1919
-1470:2:1920
-1471:0:4365
-1472:2:1932
-1473:0:4365
-1474:3:2843
-1475:0:4365
-1476:2:1934
-1477:0:4365
-1478:3:2844
-1479:0:4365
-1480:2:1935
-1481:0:4365
-1482:2:1936
-1483:0:4365
-1484:2:2129
-1485:0:4365
-1486:2:2130
-1487:0:4365
-1488:2:2134
-1489:0:4365
-1490:3:2843
-1491:0:4365
-1492:2:2136
-1493:0:4365
-1494:3:2844
-1495:0:4365
-1496:2:2137
-1497:2:2141
-1498:2:2142
-1499:2:2150
-1500:2:2151
-1501:2:2155
-1502:2:2156
-1503:2:2150
-1504:2:2151
-1505:2:2155
-1506:2:2156
-1507:2:2164
-1508:2:2169
-1509:2:2173
-1510:2:2174
-1511:2:2181
-1512:2:2182
-1513:2:2193
-1514:2:2194
-1515:2:2195
-1516:2:2193
-1517:2:2194
-1518:2:2195
-1519:2:2206
-1520:2:2211
-1521:2:2212
-1522:0:4365
-1523:2:2224
-1524:0:4365
-1525:3:2843
-1526:0:4365
-1527:2:2226
-1528:0:4365
-1529:3:2844
-1530:0:4365
-1531:2:1936
-1532:0:4365
-1533:2:2129
-1534:0:4365
-1535:2:2130
-1536:0:4365
-1537:2:2134
-1538:0:4365
-1539:3:2843
-1540:0:4365
-1541:2:2136
-1542:0:4365
-1543:3:2844
-1544:0:4365
-1545:2:2137
-1546:2:2141
-1547:2:2142
-1548:2:2150
-1549:2:2151
-1550:2:2155
-1551:2:2156
-1552:2:2150
-1553:2:2151
-1554:2:2152
-1555:2:2164
-1556:2:2169
-1557:2:2173
-1558:2:2174
-1559:2:2181
-1560:2:2182
-1561:2:2193
-1562:2:2194
-1563:2:2195
-1564:2:2193
-1565:2:2194
-1566:2:2195
-1567:2:2206
-1568:2:2211
-1569:2:2212
-1570:0:4365
-1571:2:2224
-1572:0:4365
-1573:3:2843
-1574:0:4365
-1575:2:2226
-1576:0:4365
-1577:3:2844
-1578:0:4365
-1579:2:2230
-1580:0:4365
-1581:3:2843
-1582:0:4365
-1583:2:2235
-1584:2:2239
-1585:2:2240
-1586:2:2248
-1587:2:2249
-1588:2:2253
-1589:2:2254
-1590:2:2248
-1591:2:2249
-1592:2:2250
-1593:2:2262
-1594:2:2267
-1595:2:2271
-1596:2:2272
-1597:2:2279
-1598:2:2280
-1599:2:2291
-1600:2:2292
-1601:2:2293
-1602:2:2291
-1603:2:2292
-1604:2:2293
-1605:2:2304
-1606:2:2309
-1607:2:2310
-1608:0:4365
-1609:3:2844
-1610:0:4365
-1611:2:2322
-1612:0:4365
-1613:2:1169
-1614:0:4365
-1615:3:2843
-1616:0:4365
-1617:2:1170
-1618:0:4365
-1619:3:2844
-1620:0:4365
-1621:3:2845
-1622:0:4365
-1623:3:2851
-1624:0:4365
-1625:3:2854
-1626:3:2855
-1627:3:2867
-1628:3:2868
-1629:3:2872
-1630:3:2873
-1631:3:2867
-1632:3:2868
-1633:3:2872
-1634:3:2873
-1635:3:2881
-1636:3:2886
-1637:3:2890
-1638:3:2891
-1639:3:2898
-1640:3:2899
-1641:3:2910
-1642:3:2911
-1643:3:2912
-1644:3:2910
-1645:3:2911
-1646:3:2912
-1647:3:2923
-1648:3:2928
-1649:3:2929
-1650:0:4365
-1651:3:2941
-1652:0:4365
-1653:3:2942
-1654:0:4365
-1655:2:1173
-1656:0:4365
-1657:3:2943
-1658:0:4365
-1659:2:1179
-1660:0:4365
-1661:2:1180
-1662:0:4365
-1663:3:2942
-1664:0:4365
-1665:2:1181
-1666:2:1185
-1667:2:1186
-1668:2:1194
-1669:2:1195
-1670:2:1199
-1671:2:1200
-1672:2:1194
-1673:2:1195
-1674:2:1199
-1675:2:1200
-1676:2:1208
-1677:2:1213
-1678:2:1217
-1679:2:1218
-1680:2:1225
-1681:2:1226
-1682:2:1237
-1683:2:1238
-1684:2:1239
-1685:2:1237
-1686:2:1238
-1687:2:1239
-1688:2:1250
-1689:2:1255
-1690:2:1256
-1691:0:4365
-1692:3:2943
-1693:0:4365
-1694:2:1268
-1695:0:4365
-1696:3:2942
-1697:0:4365
-1698:2:1270
-1699:0:4365
-1700:3:2943
-1701:0:4365
-1702:2:1271
-1703:2:1275
-1704:2:1276
-1705:2:1284
-1706:2:1285
-1707:2:1289
-1708:2:1290
-1709:2:1284
-1710:2:1285
-1711:2:1289
-1712:2:1290
-1713:2:1298
-1714:2:1303
-1715:2:1307
-1716:2:1308
-1717:2:1315
-1718:2:1316
-1719:2:1327
-1720:2:1328
-1721:2:1329
-1722:2:1327
-1723:2:1328
-1724:2:1329
-1725:2:1340
-1726:2:1345
-1727:2:1346
-1728:0:4365
-1729:2:1358
-1730:0:4365
-1731:2:1360
-1732:0:4365
-1733:3:2942
-1734:0:4365
-1735:2:1361
-1736:0:4365
-1737:3:2943
-1738:0:4365
-1739:2:1362
-1740:2:1366
-1741:2:1367
-1742:2:1375
-1743:2:1376
-1744:2:1380
-1745:2:1381
-1746:2:1375
-1747:2:1376
-1748:2:1380
-1749:2:1381
-1750:2:1389
-1751:2:1394
-1752:2:1398
-1753:2:1399
-1754:2:1406
-1755:2:1407
-1756:2:1418
-1757:2:1419
-1758:2:1420
-1759:2:1418
-1760:2:1419
-1761:2:1420
-1762:2:1431
-1763:2:1436
-1764:2:1437
-1765:0:4365
-1766:2:1449
-1767:0:4365
-1768:3:2942
-1769:0:4365
-1770:2:1451
-1771:0:4365
-1772:3:2943
-1773:0:4365
-1774:2:1652
-1775:0:4365
-1776:2:1653
-1777:0:4365
-1778:2:1657
-1779:0:4365
-1780:2:1180
-1781:0:4365
-1782:3:2942
-1783:0:4365
-1784:2:1181
-1785:2:1185
-1786:2:1186
-1787:2:1194
-1788:2:1195
-1789:2:1199
-1790:2:1200
-1791:2:1194
-1792:2:1195
-1793:2:1196
-1794:2:1208
-1795:2:1213
-1796:2:1217
-1797:2:1218
-1798:2:1225
-1799:2:1226
-1800:2:1237
-1801:2:1238
-1802:2:1239
-1803:2:1237
-1804:2:1238
-1805:2:1239
-1806:2:1250
-1807:2:1255
-1808:2:1256
-1809:0:4365
-1810:3:2943
-1811:0:4365
-1812:2:1268
-1813:0:4365
-1814:3:2942
-1815:0:4365
-1816:2:1270
-1817:0:4365
-1818:3:2943
-1819:0:4365
-1820:2:1271
-1821:2:1275
-1822:2:1276
-1823:2:1284
-1824:2:1285
-1825:2:1289
-1826:2:1290
-1827:2:1284
-1828:2:1285
-1829:2:1289
-1830:2:1290
-1831:2:1298
-1832:2:1303
-1833:2:1307
-1834:2:1308
-1835:2:1315
-1836:2:1316
-1837:2:1327
-1838:2:1328
-1839:2:1329
-1840:2:1327
-1841:2:1328
-1842:2:1329
-1843:2:1340
-1844:2:1345
-1845:2:1346
-1846:0:4365
-1847:2:1358
-1848:0:4365
-1849:2:1454
-1850:0:4365
-1851:3:2942
-1852:0:4365
-1853:2:1455
-1854:0:4365
-1855:3:2943
-1856:0:4365
-1857:2:1652
-1858:0:4365
-1859:2:1653
-1860:0:4365
-1861:2:1657
-1862:0:4365
-1863:2:1660
-1864:0:4365
-1865:3:2942
-1866:0:4365
-1867:2:1665
-1868:2:1669
-1869:2:1670
-1870:2:1678
-1871:2:1679
-1872:2:1683
-1873:2:1684
-1874:2:1678
-1875:2:1679
-1876:2:1680
-1877:2:1692
-1878:2:1697
-1879:2:1701
-1880:2:1702
-1881:2:1709
-1882:2:1710
-1883:2:1721
-1884:2:1722
-1885:2:1723
-1886:2:1721
-1887:2:1722
-1888:2:1723
-1889:2:1734
-1890:2:1739
-1891:2:1740
-1892:0:4365
-1893:3:2943
-1894:0:4365
-1895:2:1752
-1896:0:4365
-1897:3:2942
-1898:0:4365
-1899:2:1754
-1900:0:4365
-1901:3:2943
-1902:0:4365
-1903:2:1755
-1904:2:1759
-1905:2:1760
-1906:2:1768
-1907:2:1769
-1908:2:1773
-1909:2:1774
-1910:2:1768
-1911:2:1769
-1912:2:1773
-1913:2:1774
-1914:2:1782
-1915:2:1787
-1916:2:1791
-1917:2:1792
-1918:2:1799
-1919:2:1800
-1920:2:1811
-1921:2:1812
-1922:2:1813
-1923:2:1811
-1924:2:1812
-1925:2:1813
-1926:2:1824
-1927:2:1829
-1928:2:1830
-1929:0:4365
-1930:2:1842
-1931:0:4365
-1932:3:2942
-1933:0:4365
-1934:2:1844
-1935:0:4365
-1936:3:2943
-1937:0:4365
-1938:2:1845
-1939:2:1849
-1940:2:1850
-1941:2:1858
-1942:2:1859
-1943:2:1863
-1944:2:1864
-1945:2:1858
-1946:2:1859
-1947:2:1863
-1948:2:1864
-1949:2:1872
-1950:2:1877
-1951:2:1881
-1952:2:1882
-1953:2:1889
-1954:2:1890
-1955:2:1901
-1956:2:1902
-1957:2:1903
-1958:2:1901
-1959:2:1902
-1960:2:1903
-1961:2:1914
-1962:2:1919
-1963:2:1920
-1964:0:4365
-1965:2:1932
-1966:0:4365
-1967:3:2942
-1968:0:4365
-1969:2:1934
-1970:0:4365
-1971:3:2943
-1972:0:4365
-1973:2:1935
-1974:0:4365
-1975:2:1936
-1976:0:4365
-1977:2:2129
-1978:0:4365
-1979:2:2130
-1980:0:4365
-1981:2:2134
-1982:0:4365
-1983:3:2942
-1984:0:4365
-1985:2:2136
-1986:0:4365
-1987:3:2943
-1988:0:4365
-1989:2:2137
-1990:2:2141
-1991:2:2142
-1992:2:2150
-1993:2:2151
-1994:2:2155
-1995:2:2156
-1996:2:2150
-1997:2:2151
-1998:2:2155
-1999:2:2156
-2000:2:2164
-2001:2:2169
-2002:2:2173
-2003:2:2174
-2004:2:2181
-2005:2:2182
-2006:2:2193
-2007:2:2194
-2008:2:2195
-2009:2:2193
-2010:2:2194
-2011:2:2195
-2012:2:2206
-2013:2:2211
-2014:2:2212
-2015:0:4365
-2016:2:2224
-2017:0:4365
-2018:3:2942
-2019:0:4365
-2020:2:2226
-2021:0:4365
-2022:3:2943
-2023:0:4365
-2024:2:1936
-2025:0:4365
-2026:2:2129
-2027:0:4365
-2028:2:2130
-2029:0:4365
-2030:2:2134
-2031:0:4365
-2032:3:2942
-2033:0:4365
-2034:2:2136
-2035:0:4365
-2036:3:2943
-2037:0:4365
-2038:2:2137
-2039:2:2141
-2040:2:2142
-2041:2:2150
-2042:2:2151
-2043:2:2155
-2044:2:2156
-2045:2:2150
-2046:2:2151
-2047:2:2152
-2048:2:2164
-2049:2:2169
-2050:2:2173
-2051:2:2174
-2052:2:2181
-2053:2:2182
-2054:2:2193
-2055:2:2194
-2056:2:2195
-2057:2:2193
-2058:2:2194
-2059:2:2195
-2060:2:2206
-2061:2:2211
-2062:2:2212
-2063:0:4365
-2064:2:2224
-2065:0:4365
-2066:3:2942
-2067:0:4365
-2068:2:2226
-2069:0:4365
-2070:3:2943
-2071:0:4365
-2072:2:2230
-2073:0:4365
-2074:3:2942
-2075:0:4365
-2076:2:2235
-2077:2:2239
-2078:2:2240
-2079:2:2248
-2080:2:2249
-2081:2:2253
-2082:2:2254
-2083:2:2248
-2084:2:2249
-2085:2:2250
-2086:2:2262
-2087:2:2267
-2088:2:2271
-2089:2:2272
-2090:2:2279
-2091:2:2280
-2092:2:2291
-2093:2:2292
-2094:2:2293
-2095:2:2291
-2096:2:2292
-2097:2:2293
-2098:2:2304
-2099:2:2309
-2100:2:2310
-2101:0:4365
-2102:3:2943
-2103:0:4365
-2104:2:2322
-2105:0:4365
-2106:2:1169
-2107:0:4365
-2108:3:2942
-2109:0:4365
-2110:2:1170
-2111:0:4365
-2112:3:2943
-2113:0:4365
-2114:3:2944
-2115:0:4365
-2116:3:2950
-2117:0:4365
-2118:3:2951
-2119:0:4365
-2120:3:2952
-2121:0:4365
-2122:3:2953
-2123:0:4365
-2124:3:2954
-2125:3:2958
-2126:3:2959
-2127:3:2967
-2128:3:2968
-2129:3:2972
-2130:3:2973
-2131:3:2967
-2132:3:2968
-2133:3:2972
-2134:3:2973
-2135:3:2981
-2136:3:2986
-2137:3:2990
-2138:3:2991
-2139:3:2998
-2140:3:2999
-2141:3:3010
-2142:3:3011
-2143:3:3012
-2144:3:3010
-2145:3:3011
-2146:3:3012
-2147:3:3023
-2148:3:3028
-2149:3:3029
-2150:0:4365
-2151:3:3041
-2152:0:4365
-2153:3:3042
-2154:0:4365
-2155:2:1173
-2156:0:4365
-2157:3:3043
-2158:0:4365
-2159:2:1179
-2160:0:4365
-2161:2:1180
-2162:0:4365
-2163:3:3042
-2164:0:4365
-2165:2:1181
-2166:2:1185
-2167:2:1186
-2168:2:1194
-2169:2:1195
-2170:2:1199
-2171:2:1200
-2172:2:1194
-2173:2:1195
-2174:2:1199
-2175:2:1200
-2176:2:1208
-2177:2:1213
-2178:2:1217
-2179:2:1218
-2180:2:1225
-2181:2:1226
-2182:2:1237
-2183:2:1238
-2184:2:1239
-2185:2:1237
-2186:2:1238
-2187:2:1239
-2188:2:1250
-2189:2:1255
-2190:2:1256
-2191:0:4365
-2192:3:3043
-2193:0:4365
-2194:2:1268
-2195:0:4365
-2196:3:3042
-2197:0:4365
-2198:2:1270
-2199:0:4365
-2200:3:3043
-2201:0:4365
-2202:2:1271
-2203:2:1275
-2204:2:1276
-2205:2:1284
-2206:2:1285
-2207:2:1289
-2208:2:1290
-2209:2:1284
-2210:2:1285
-2211:2:1289
-2212:2:1290
-2213:2:1298
-2214:2:1303
-2215:2:1307
-2216:2:1308
-2217:2:1315
-2218:2:1316
-2219:2:1327
-2220:2:1328
-2221:2:1329
-2222:2:1327
-2223:2:1328
-2224:2:1329
-2225:2:1340
-2226:2:1345
-2227:2:1346
-2228:0:4365
-2229:2:1358
-2230:0:4365
-2231:2:1360
-2232:0:4365
-2233:3:3042
-2234:0:4365
-2235:2:1361
-2236:0:4365
-2237:3:3043
-2238:0:4365
-2239:2:1362
-2240:2:1366
-2241:2:1367
-2242:2:1375
-2243:2:1376
-2244:2:1380
-2245:2:1381
-2246:2:1375
-2247:2:1376
-2248:2:1380
-2249:2:1381
-2250:2:1389
-2251:2:1394
-2252:2:1398
-2253:2:1399
-2254:2:1406
-2255:2:1407
-2256:2:1418
-2257:2:1419
-2258:2:1420
-2259:2:1418
-2260:2:1419
-2261:2:1420
-2262:2:1431
-2263:2:1436
-2264:2:1437
-2265:0:4365
-2266:2:1449
-2267:0:4365
-2268:3:3042
-2269:0:4365
-2270:2:1451
-2271:0:4365
-2272:3:3043
-2273:0:4365
-2274:2:1652
-2275:0:4365
-2276:2:1653
-2277:0:4365
-2278:2:1657
-2279:0:4365
-2280:2:1180
-2281:0:4365
-2282:3:3042
-2283:0:4365
-2284:2:1181
-2285:2:1185
-2286:2:1186
-2287:2:1194
-2288:2:1195
-2289:2:1199
-2290:2:1200
-2291:2:1194
-2292:2:1195
-2293:2:1196
-2294:2:1208
-2295:2:1213
-2296:2:1217
-2297:2:1218
-2298:2:1225
-2299:2:1226
-2300:2:1237
-2301:2:1238
-2302:2:1239
-2303:2:1237
-2304:2:1238
-2305:2:1239
-2306:2:1250
-2307:2:1255
-2308:2:1256
-2309:0:4365
-2310:3:3043
-2311:0:4365
-2312:2:1268
-2313:0:4365
-2314:3:3042
-2315:0:4365
-2316:2:1270
-2317:0:4365
-2318:3:3043
-2319:0:4365
-2320:2:1271
-2321:2:1275
-2322:2:1276
-2323:2:1284
-2324:2:1285
-2325:2:1289
-2326:2:1290
-2327:2:1284
-2328:2:1285
-2329:2:1289
-2330:2:1290
-2331:2:1298
-2332:2:1303
-2333:2:1307
-2334:2:1308
-2335:2:1315
-2336:2:1316
-2337:2:1327
-2338:2:1328
-2339:2:1329
-2340:2:1327
-2341:2:1328
-2342:2:1329
-2343:2:1340
-2344:2:1345
-2345:2:1346
-2346:0:4365
-2347:2:1358
-2348:0:4365
-2349:2:1454
-2350:0:4365
-2351:3:3042
-2352:0:4365
-2353:2:1455
-2354:0:4365
-2355:3:3043
-2356:0:4365
-2357:2:1652
-2358:0:4365
-2359:2:1653
-2360:0:4365
-2361:2:1657
-2362:0:4365
-2363:2:1660
-2364:0:4365
-2365:3:3042
-2366:0:4365
-2367:2:1665
-2368:2:1669
-2369:2:1670
-2370:2:1678
-2371:2:1679
-2372:2:1683
-2373:2:1684
-2374:2:1678
-2375:2:1679
-2376:2:1680
-2377:2:1692
-2378:2:1697
-2379:2:1701
-2380:2:1702
-2381:2:1709
-2382:2:1710
-2383:2:1721
-2384:2:1722
-2385:2:1723
-2386:2:1721
-2387:2:1722
-2388:2:1723
-2389:2:1734
-2390:2:1739
-2391:2:1740
-2392:0:4365
-2393:3:3043
-2394:0:4365
-2395:2:1752
-2396:0:4365
-2397:3:3042
-2398:0:4365
-2399:2:1754
-2400:0:4365
-2401:3:3043
-2402:0:4365
-2403:2:1755
-2404:2:1759
-2405:2:1760
-2406:2:1768
-2407:2:1769
-2408:2:1773
-2409:2:1774
-2410:2:1768
-2411:2:1769
-2412:2:1773
-2413:2:1774
-2414:2:1782
-2415:2:1787
-2416:2:1791
-2417:2:1792
-2418:2:1799
-2419:2:1800
-2420:2:1811
-2421:2:1812
-2422:2:1813
-2423:2:1811
-2424:2:1812
-2425:2:1813
-2426:2:1824
-2427:2:1829
-2428:2:1830
-2429:0:4365
-2430:2:1842
-2431:0:4365
-2432:3:3042
-2433:0:4365
-2434:2:1844
-2435:0:4365
-2436:3:3043
-2437:0:4365
-2438:2:1845
-2439:2:1849
-2440:2:1850
-2441:2:1858
-2442:2:1859
-2443:2:1863
-2444:2:1864
-2445:2:1858
-2446:2:1859
-2447:2:1863
-2448:2:1864
-2449:2:1872
-2450:2:1877
-2451:2:1881
-2452:2:1882
-2453:2:1889
-2454:2:1890
-2455:2:1901
-2456:2:1902
-2457:2:1903
-2458:2:1901
-2459:2:1902
-2460:2:1903
-2461:2:1914
-2462:2:1919
-2463:2:1920
-2464:0:4365
-2465:2:1932
-2466:0:4365
-2467:3:3042
-2468:0:4365
-2469:2:1934
-2470:0:4365
-2471:3:3043
-2472:0:4365
-2473:2:1935
-2474:0:4365
-2475:2:1936
-2476:0:4365
-2477:2:2129
-2478:0:4365
-2479:2:2130
-2480:0:4365
-2481:2:2134
-2482:0:4365
-2483:3:3042
-2484:0:4365
-2485:2:2136
-2486:0:4365
-2487:3:3043
-2488:0:4365
-2489:2:2137
-2490:2:2141
-2491:2:2142
-2492:2:2150
-2493:2:2151
-2494:2:2155
-2495:2:2156
-2496:2:2150
-2497:2:2151
-2498:2:2155
-2499:2:2156
-2500:2:2164
-2501:2:2169
-2502:2:2173
-2503:2:2174
-2504:2:2181
-2505:2:2182
-2506:2:2193
-2507:2:2194
-2508:2:2195
-2509:2:2193
-2510:2:2194
-2511:2:2195
-2512:2:2206
-2513:2:2211
-2514:2:2212
-2515:0:4365
-2516:2:2224
-2517:0:4365
-2518:3:3042
-2519:0:4365
-2520:2:2226
-2521:0:4365
-2522:3:3043
-2523:0:4365
-2524:2:1936
-2525:0:4365
-2526:2:2129
-2527:0:4365
-2528:2:2130
-2529:0:4365
-2530:2:2134
-2531:0:4365
-2532:3:3042
-2533:0:4365
-2534:2:2136
-2535:0:4365
-2536:3:3043
-2537:0:4365
-2538:2:2137
-2539:2:2141
-2540:2:2142
-2541:2:2150
-2542:2:2151
-2543:2:2155
-2544:2:2156
-2545:2:2150
-2546:2:2151
-2547:2:2152
-2548:2:2164
-2549:2:2169
-2550:2:2173
-2551:2:2174
-2552:2:2181
-2553:2:2182
-2554:2:2193
-2555:2:2194
-2556:2:2195
-2557:2:2193
-2558:2:2194
-2559:2:2195
-2560:2:2206
-2561:2:2211
-2562:2:2212
-2563:0:4365
-2564:2:2224
-2565:0:4365
-2566:3:3042
-2567:0:4365
-2568:2:2226
-2569:0:4365
-2570:3:3043
-2571:0:4365
-2572:2:2230
-2573:0:4365
-2574:3:3042
-2575:0:4365
-2576:2:2235
-2577:2:2239
-2578:2:2240
-2579:2:2248
-2580:2:2249
-2581:2:2253
-2582:2:2254
-2583:2:2248
-2584:2:2249
-2585:2:2250
-2586:2:2262
-2587:2:2267
-2588:2:2271
-2589:2:2272
-2590:2:2279
-2591:2:2280
-2592:2:2291
-2593:2:2292
-2594:2:2293
-2595:2:2291
-2596:2:2292
-2597:2:2293
-2598:2:2304
-2599:2:2309
-2600:2:2310
-2601:0:4365
-2602:3:3043
-2603:0:4365
-2604:2:2322
-2605:0:4365
-2606:2:1169
-2607:0:4365
-2608:3:3042
-2609:0:4365
-2610:2:1170
-2611:0:4365
-2612:3:3043
-2613:0:4365
-2614:3:3044
-2615:0:4365
-2616:3:3257
-2617:0:4365
-2618:3:3265
-2619:0:4365
-2620:3:3266
-2621:3:3270
-2622:3:3271
-2623:3:3279
-2624:3:3280
-2625:3:3284
-2626:3:3285
-2627:3:3279
-2628:3:3280
-2629:3:3284
-2630:3:3285
-2631:3:3293
-2632:3:3298
-2633:3:3302
-2634:3:3303
-2635:3:3310
-2636:3:3311
-2637:3:3322
-2638:3:3323
-2639:3:3324
-2640:3:3322
-2641:3:3323
-2642:3:3324
-2643:3:3335
-2644:3:3340
-2645:3:3341
-2646:0:4365
-2647:3:3353
-2648:0:4365
-2649:3:3354
-2650:0:4365
-2651:2:1173
-2652:0:4365
-2653:3:3355
-2654:0:4365
-2655:2:1179
-2656:0:4365
-2657:2:1180
-2658:0:4365
-2659:3:3354
-2660:0:4365
-2661:2:1181
-2662:2:1185
-2663:2:1186
-2664:2:1194
-2665:2:1195
-2666:2:1199
-2667:2:1200
-2668:2:1194
-2669:2:1195
-2670:2:1199
-2671:2:1200
-2672:2:1208
-2673:2:1213
-2674:2:1217
-2675:2:1218
-2676:2:1225
-2677:2:1226
-2678:2:1237
-2679:2:1238
-2680:2:1239
-2681:2:1237
-2682:2:1238
-2683:2:1239
-2684:2:1250
-2685:2:1255
-2686:2:1256
-2687:0:4365
-2688:3:3355
-2689:0:4365
-2690:2:1268
-2691:0:4365
-2692:3:3354
-2693:0:4365
-2694:2:1270
-2695:0:4365
-2696:3:3355
-2697:0:4365
-2698:2:1271
-2699:2:1275
-2700:2:1276
-2701:2:1284
-2702:2:1285
-2703:2:1289
-2704:2:1290
-2705:2:1284
-2706:2:1285
-2707:2:1289
-2708:2:1290
-2709:2:1298
-2710:2:1303
-2711:2:1307
-2712:2:1308
-2713:2:1315
-2714:2:1316
-2715:2:1327
-2716:2:1328
-2717:2:1329
-2718:2:1327
-2719:2:1328
-2720:2:1329
-2721:2:1340
-2722:2:1345
-2723:2:1346
-2724:0:4365
-2725:2:1358
-2726:0:4365
-2727:2:1360
-2728:0:4365
-2729:3:3354
-2730:0:4365
-2731:2:1361
-2732:0:4365
-2733:3:3355
-2734:0:4365
-2735:2:1362
-2736:2:1366
-2737:2:1367
-2738:2:1375
-2739:2:1376
-2740:2:1380
-2741:2:1381
-2742:2:1375
-2743:2:1376
-2744:2:1380
-2745:2:1381
-2746:2:1389
-2747:2:1394
-2748:2:1398
-2749:2:1399
-2750:2:1406
-2751:2:1407
-2752:2:1418
-2753:2:1419
-2754:2:1420
-2755:2:1418
-2756:2:1419
-2757:2:1420
-2758:2:1431
-2759:2:1436
-2760:2:1437
-2761:0:4365
-2762:2:1449
-2763:0:4365
-2764:3:3354
-2765:0:4365
-2766:2:1451
-2767:0:4365
-2768:3:3355
-2769:0:4365
-2770:2:1652
-2771:0:4365
-2772:2:1653
-2773:0:4365
-2774:2:1657
-2775:0:4365
-2776:2:1180
-2777:0:4365
-2778:3:3354
-2779:0:4365
-2780:2:1181
-2781:2:1185
-2782:2:1186
-2783:2:1194
-2784:2:1195
-2785:2:1199
-2786:2:1200
-2787:2:1194
-2788:2:1195
-2789:2:1196
-2790:2:1208
-2791:2:1213
-2792:2:1217
-2793:2:1218
-2794:2:1225
-2795:2:1226
-2796:2:1237
-2797:2:1238
-2798:2:1239
-2799:2:1237
-2800:2:1238
-2801:2:1239
-2802:2:1250
-2803:2:1255
-2804:2:1256
-2805:0:4365
-2806:3:3355
-2807:0:4365
-2808:2:1268
-2809:0:4365
-2810:3:3354
-2811:0:4365
-2812:2:1270
-2813:0:4365
-2814:3:3355
-2815:0:4365
-2816:2:1271
-2817:2:1275
-2818:2:1276
-2819:2:1284
-2820:2:1285
-2821:2:1289
-2822:2:1290
-2823:2:1284
-2824:2:1285
-2825:2:1289
-2826:2:1290
-2827:2:1298
-2828:2:1303
-2829:2:1307
-2830:2:1308
-2831:2:1315
-2832:2:1316
-2833:2:1327
-2834:2:1328
-2835:2:1329
-2836:2:1327
-2837:2:1328
-2838:2:1329
-2839:2:1340
-2840:2:1345
-2841:2:1346
-2842:0:4365
-2843:2:1358
-2844:0:4365
-2845:2:1454
-2846:0:4365
-2847:3:3354
-2848:0:4365
-2849:2:1455
-2850:0:4365
-2851:3:3355
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3354
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3355
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3354
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3355
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3354
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3355
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3354
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3355
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3354
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3355
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3354
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3355
-3019:0:4365
-3020:2:1936
-3021:0:4365
-3022:2:2129
-3023:0:4365
-3024:2:2130
-3025:0:4365
-3026:2:2134
-3027:0:4365
-3028:3:3354
-3029:0:4365
-3030:2:2136
-3031:0:4365
-3032:3:3355
-3033:0:4365
-3034:2:2137
-3035:2:2141
-3036:2:2142
-3037:2:2150
-3038:2:2151
-3039:2:2155
-3040:2:2156
-3041:2:2150
-3042:2:2151
-3043:2:2152
-3044:2:2164
-3045:2:2169
-3046:2:2173
-3047:2:2174
-3048:2:2181
-3049:2:2182
-3050:2:2193
-3051:2:2194
-3052:2:2195
-3053:2:2193
-3054:2:2194
-3055:2:2195
-3056:2:2206
-3057:2:2211
-3058:2:2212
-3059:0:4365
-3060:2:2224
-3061:0:4365
-3062:3:3354
-3063:0:4365
-3064:2:2226
-3065:0:4365
-3066:3:3355
-3067:0:4365
-3068:2:2230
-3069:0:4365
-3070:3:3354
-3071:0:4365
-3072:2:2235
-3073:2:2239
-3074:2:2240
-3075:2:2248
-3076:2:2249
-3077:2:2253
-3078:2:2254
-3079:2:2248
-3080:2:2249
-3081:2:2250
-3082:2:2262
-3083:2:2267
-3084:2:2271
-3085:2:2272
-3086:2:2279
-3087:2:2280
-3088:2:2291
-3089:2:2292
-3090:2:2293
-3091:2:2291
-3092:2:2292
-3093:2:2293
-3094:2:2304
-3095:2:2309
-3096:2:2310
-3097:0:4365
-3098:3:3355
-3099:0:4365
-3100:2:2322
-3101:0:4365
-3102:2:1169
-3103:0:4365
-3104:3:3354
-3105:0:4365
-3106:2:1170
-3107:0:4365
-3108:3:3355
-3109:0:4365
-3110:3:3356
-3111:0:4365
-3112:3:3366
-3113:0:4365
-3114:3:2951
-3115:0:4365
-3116:3:2952
-3117:0:4365
-3118:3:2953
-3119:0:4365
-3120:3:2954
-3121:3:2958
-3122:3:2959
-3123:3:2967
-3124:3:2968
-3125:3:2972
-3126:3:2973
-3127:3:2967
-3128:3:2968
-3129:3:2972
-3130:3:2973
-3131:3:2981
-3132:3:2986
-3133:3:2990
-3134:3:2991
-3135:3:2998
-3136:3:2999
-3137:3:3010
-3138:3:3011
-3139:3:3012
-3140:3:3010
-3141:3:3011
-3142:3:3012
-3143:3:3023
-3144:3:3028
-3145:3:3029
-3146:0:4365
-3147:3:3041
-3148:0:4365
-3149:3:3042
-3150:0:4365
-3151:2:1173
-3152:0:4365
-3153:3:3043
-3154:0:4365
-3155:2:1179
-3156:0:4365
-3157:2:1180
-3158:0:4365
-3159:3:3042
-3160:0:4365
-3161:2:1181
-3162:2:1185
-3163:2:1186
-3164:2:1194
-3165:2:1195
-3166:2:1199
-3167:2:1200
-3168:2:1194
-3169:2:1195
-3170:2:1199
-3171:2:1200
-3172:2:1208
-3173:2:1213
-3174:2:1217
-3175:2:1218
-3176:2:1225
-3177:2:1226
-3178:2:1237
-3179:2:1238
-3180:2:1239
-3181:2:1237
-3182:2:1238
-3183:2:1239
-3184:2:1250
-3185:2:1255
-3186:2:1256
-3187:0:4365
-3188:3:3043
-3189:0:4365
-3190:2:1268
-3191:0:4365
-3192:3:3042
-3193:0:4365
-3194:2:1270
-3195:0:4365
-3196:3:3043
-3197:0:4365
-3198:2:1271
-3199:2:1275
-3200:2:1276
-3201:2:1284
-3202:2:1285
-3203:2:1289
-3204:2:1290
-3205:2:1284
-3206:2:1285
-3207:2:1289
-3208:2:1290
-3209:2:1298
-3210:2:1303
-3211:2:1307
-3212:2:1308
-3213:2:1315
-3214:2:1316
-3215:2:1327
-3216:2:1328
-3217:2:1329
-3218:2:1327
-3219:2:1328
-3220:2:1329
-3221:2:1340
-3222:2:1345
-3223:2:1346
-3224:0:4365
-3225:2:1358
-3226:0:4365
-3227:2:1360
-3228:0:4365
-3229:3:3042
-3230:0:4365
-3231:2:1361
-3232:0:4365
-3233:3:3043
-3234:0:4365
-3235:2:1362
-3236:2:1366
-3237:2:1367
-3238:2:1375
-3239:2:1376
-3240:2:1380
-3241:2:1381
-3242:2:1375
-3243:2:1376
-3244:2:1380
-3245:2:1381
-3246:2:1389
-3247:2:1394
-3248:2:1398
-3249:2:1399
-3250:2:1406
-3251:2:1407
-3252:2:1418
-3253:2:1419
-3254:2:1420
-3255:2:1418
-3256:2:1419
-3257:2:1420
-3258:2:1431
-3259:2:1436
-3260:2:1437
-3261:0:4365
-3262:2:1449
-3263:0:4365
-3264:3:3042
-3265:0:4365
-3266:2:1451
-3267:0:4365
-3268:3:3043
-3269:0:4365
-3270:2:1652
-3271:0:4365
-3272:2:1653
-3273:0:4365
-3274:2:1657
-3275:0:4365
-3276:2:1180
-3277:0:4365
-3278:3:3042
-3279:0:4365
-3280:2:1181
-3281:2:1185
-3282:2:1186
-3283:2:1194
-3284:2:1195
-3285:2:1199
-3286:2:1200
-3287:2:1194
-3288:2:1195
-3289:2:1196
-3290:2:1208
-3291:2:1213
-3292:2:1217
-3293:2:1218
-3294:2:1225
-3295:2:1226
-3296:2:1237
-3297:2:1238
-3298:2:1239
-3299:2:1237
-3300:2:1238
-3301:2:1239
-3302:2:1250
-3303:2:1255
-3304:2:1256
-3305:0:4365
-3306:3:3043
-3307:0:4365
-3308:2:1268
-3309:0:4365
-3310:3:3042
-3311:0:4365
-3312:2:1270
-3313:0:4365
-3314:3:3043
-3315:0:4365
-3316:2:1271
-3317:2:1275
-3318:2:1276
-3319:2:1284
-3320:2:1285
-3321:2:1289
-3322:2:1290
-3323:2:1284
-3324:2:1285
-3325:2:1289
-3326:2:1290
-3327:2:1298
-3328:2:1303
-3329:2:1307
-3330:2:1308
-3331:2:1315
-3332:2:1316
-3333:2:1327
-3334:2:1328
-3335:2:1329
-3336:2:1327
-3337:2:1328
-3338:2:1329
-3339:2:1340
-3340:2:1345
-3341:2:1346
-3342:0:4365
-3343:2:1358
-3344:0:4365
-3345:2:1454
-3346:0:4365
-3347:3:3042
-3348:0:4365
-3349:2:1455
-3350:0:4365
-3351:3:3043
-3352:0:4365
-3353:2:1652
-3354:0:4365
-3355:2:1653
-3356:0:4365
-3357:2:1657
-3358:0:4365
-3359:2:1660
-3360:0:4365
-3361:3:3042
-3362:0:4365
-3363:2:1665
-3364:2:1669
-3365:2:1670
-3366:2:1678
-3367:2:1679
-3368:2:1683
-3369:2:1684
-3370:2:1678
-3371:2:1679
-3372:2:1680
-3373:2:1692
-3374:2:1697
-3375:2:1701
-3376:2:1702
-3377:2:1709
-3378:2:1710
-3379:2:1721
-3380:2:1722
-3381:2:1723
-3382:2:1721
-3383:2:1722
-3384:2:1723
-3385:2:1734
-3386:2:1739
-3387:2:1740
-3388:0:4365
-3389:3:3043
-3390:0:4365
-3391:2:1752
-3392:0:4365
-3393:3:3042
-3394:0:4365
-3395:2:1754
-3396:0:4365
-3397:3:3043
-3398:0:4365
-3399:2:1755
-3400:2:1759
-3401:2:1760
-3402:2:1768
-3403:2:1769
-3404:2:1773
-3405:2:1774
-3406:2:1768
-3407:2:1769
-3408:2:1773
-3409:2:1774
-3410:2:1782
-3411:2:1787
-3412:2:1791
-3413:2:1792
-3414:2:1799
-3415:2:1800
-3416:2:1811
-3417:2:1812
-3418:2:1813
-3419:2:1811
-3420:2:1812
-3421:2:1813
-3422:2:1824
-3423:2:1829
-3424:2:1830
-3425:0:4365
-3426:2:1842
-3427:0:4365
-3428:3:3042
-3429:0:4365
-3430:2:1844
-3431:0:4365
-3432:3:3043
-3433:0:4365
-3434:2:1845
-3435:2:1849
-3436:2:1850
-3437:2:1858
-3438:2:1859
-3439:2:1863
-3440:2:1864
-3441:2:1858
-3442:2:1859
-3443:2:1863
-3444:2:1864
-3445:2:1872
-3446:2:1877
-3447:2:1881
-3448:2:1882
-3449:2:1889
-3450:2:1890
-3451:2:1901
-3452:2:1902
-3453:2:1903
-3454:2:1901
-3455:2:1902
-3456:2:1903
-3457:2:1914
-3458:2:1919
-3459:2:1920
-3460:0:4365
-3461:2:1932
-3462:0:4365
-3463:3:3042
-3464:0:4365
-3465:2:1934
-3466:0:4365
-3467:3:3043
-3468:0:4365
-3469:2:1935
-3470:0:4365
-3471:2:1936
-3472:0:4365
-3473:2:2129
-3474:0:4365
-3475:2:2130
-3476:0:4365
-3477:2:2134
-3478:0:4365
-3479:3:3042
-3480:0:4365
-3481:2:2136
-3482:0:4365
-3483:3:3043
-3484:0:4365
-3485:2:2137
-3486:2:2141
-3487:2:2142
-3488:2:2150
-3489:2:2151
-3490:2:2155
-3491:2:2156
-3492:2:2150
-3493:2:2151
-3494:2:2155
-3495:2:2156
-3496:2:2164
-3497:2:2169
-3498:2:2173
-3499:2:2174
-3500:2:2181
-3501:2:2182
-3502:2:2193
-3503:2:2194
-3504:2:2195
-3505:2:2193
-3506:2:2194
-3507:2:2195
-3508:2:2206
-3509:2:2211
-3510:2:2212
-3511:0:4365
-3512:2:2224
-3513:0:4365
-3514:3:3042
-3515:0:4365
-3516:2:2226
-3517:0:4365
-3518:3:3043
-3519:0:4365
-3520:2:1936
-3521:0:4365
-3522:2:2129
-3523:0:4365
-3524:2:2130
-3525:0:4365
-3526:2:2134
-3527:0:4365
-3528:3:3042
-3529:0:4365
-3530:2:2136
-3531:0:4365
-3532:3:3043
-3533:0:4365
-3534:2:2137
-3535:2:2141
-3536:2:2142
-3537:2:2150
-3538:2:2151
-3539:2:2155
-3540:2:2156
-3541:2:2150
-3542:2:2151
-3543:2:2152
-3544:2:2164
-3545:2:2169
-3546:2:2173
-3547:2:2174
-3548:2:2181
-3549:2:2182
-3550:2:2193
-3551:2:2194
-3552:2:2195
-3553:2:2193
-3554:2:2194
-3555:2:2195
-3556:2:2206
-3557:2:2211
-3558:2:2212
-3559:0:4365
-3560:2:2224
-3561:0:4365
-3562:3:3042
-3563:0:4365
-3564:2:2226
-3565:0:4365
-3566:3:3043
-3567:0:4365
-3568:2:2230
-3569:0:4365
-3570:3:3042
-3571:0:4365
-3572:2:2235
-3573:2:2239
-3574:2:2240
-3575:2:2248
-3576:2:2249
-3577:2:2253
-3578:2:2254
-3579:2:2248
-3580:2:2249
-3581:2:2250
-3582:2:2262
-3583:2:2267
-3584:2:2271
-3585:2:2272
-3586:2:2279
-3587:2:2280
-3588:2:2291
-3589:2:2292
-3590:2:2293
-3591:2:2291
-3592:2:2292
-3593:2:2293
-3594:2:2304
-3595:2:2309
-3596:2:2310
-3597:0:4365
-3598:3:3043
-3599:0:4365
-3600:2:2322
-3601:0:4365
-3602:2:1169
-3603:0:4365
-3604:3:3042
-3605:0:4365
-3606:2:1170
-3607:0:4365
-3608:3:3043
-3609:0:4365
-3610:3:3044
-3611:0:4365
-3612:3:3257
-3613:0:4365
-3614:3:3362
-3615:0:4365
-3616:3:3363
-3617:0:4365
-3618:3:3367
-3619:0:4365
-3620:3:3373
-3621:3:3377
-3622:3:3378
-3623:3:3386
-3624:3:3387
-3625:3:3391
-3626:3:3392
-3627:3:3386
-3628:3:3387
-3629:3:3391
-3630:3:3392
-3631:3:3400
-3632:3:3405
-3633:3:3409
-3634:3:3410
-3635:3:3417
-3636:3:3418
-3637:3:3429
-3638:3:3430
-3639:3:3431
-3640:3:3429
-3641:3:3430
-3642:3:3431
-3643:3:3442
-3644:3:3447
-3645:3:3448
-3646:0:4365
-3647:3:3460
-3648:0:4365
-3649:3:3461
-3650:0:4365
-3651:2:1173
-3652:0:4365
-3653:3:3462
-3654:0:4365
-3655:2:1179
-3656:0:4365
-3657:2:1180
-3658:0:4365
-3659:3:3461
-3660:0:4365
-3661:2:1181
-3662:2:1185
-3663:2:1186
-3664:2:1194
-3665:2:1195
-3666:2:1199
-3667:2:1200
-3668:2:1194
-3669:2:1195
-3670:2:1199
-3671:2:1200
-3672:2:1208
-3673:2:1213
-3674:2:1217
-3675:2:1218
-3676:2:1225
-3677:2:1226
-3678:2:1237
-3679:2:1238
-3680:2:1239
-3681:2:1237
-3682:2:1238
-3683:2:1239
-3684:2:1250
-3685:2:1255
-3686:2:1256
-3687:0:4365
-3688:3:3462
-3689:0:4365
-3690:2:1268
-3691:0:4365
-3692:3:3461
-3693:0:4365
-3694:2:1270
-3695:0:4365
-3696:3:3462
-3697:0:4365
-3698:2:1271
-3699:2:1275
-3700:2:1276
-3701:2:1284
-3702:2:1285
-3703:2:1289
-3704:2:1290
-3705:2:1284
-3706:2:1285
-3707:2:1289
-3708:2:1290
-3709:2:1298
-3710:2:1303
-3711:2:1307
-3712:2:1308
-3713:2:1315
-3714:2:1316
-3715:2:1327
-3716:2:1328
-3717:2:1329
-3718:2:1327
-3719:2:1328
-3720:2:1329
-3721:2:1340
-3722:2:1345
-3723:2:1346
-3724:0:4365
-3725:2:1358
-3726:0:4365
-3727:2:1360
-3728:0:4365
-3729:3:3461
-3730:0:4365
-3731:2:1361
-3732:0:4365
-3733:3:3462
-3734:0:4365
-3735:2:1362
-3736:2:1366
-3737:2:1367
-3738:2:1375
-3739:2:1376
-3740:2:1380
-3741:2:1381
-3742:2:1375
-3743:2:1376
-3744:2:1380
-3745:2:1381
-3746:2:1389
-3747:2:1394
-3748:2:1398
-3749:2:1399
-3750:2:1406
-3751:2:1407
-3752:2:1418
-3753:2:1419
-3754:2:1420
-3755:2:1418
-3756:2:1419
-3757:2:1420
-3758:2:1431
-3759:2:1436
-3760:2:1437
-3761:0:4365
-3762:2:1449
-3763:0:4365
-3764:3:3461
-3765:0:4365
-3766:2:1451
-3767:0:4365
-3768:3:3462
-3769:0:4365
-3770:2:1652
-3771:0:4365
-3772:2:1653
-3773:0:4365
-3774:2:1657
-3775:0:4365
-3776:2:1180
-3777:0:4365
-3778:3:3461
-3779:0:4365
-3780:2:1181
-3781:2:1185
-3782:2:1186
-3783:2:1194
-3784:2:1195
-3785:2:1199
-3786:2:1200
-3787:2:1194
-3788:2:1195
-3789:2:1196
-3790:2:1208
-3791:2:1213
-3792:2:1217
-3793:2:1218
-3794:2:1225
-3795:2:1226
-3796:2:1237
-3797:2:1238
-3798:2:1239
-3799:2:1237
-3800:2:1238
-3801:2:1239
-3802:2:1250
-3803:2:1255
-3804:2:1256
-3805:0:4365
-3806:3:3462
-3807:0:4365
-3808:2:1268
-3809:0:4365
-3810:3:3461
-3811:0:4365
-3812:2:1270
-3813:0:4365
-3814:3:3462
-3815:0:4365
-3816:2:1271
-3817:2:1275
-3818:2:1276
-3819:2:1284
-3820:2:1285
-3821:2:1289
-3822:2:1290
-3823:2:1284
-3824:2:1285
-3825:2:1289
-3826:2:1290
-3827:2:1298
-3828:2:1303
-3829:2:1307
-3830:2:1308
-3831:2:1315
-3832:2:1316
-3833:2:1327
-3834:2:1328
-3835:2:1329
-3836:2:1327
-3837:2:1328
-3838:2:1329
-3839:2:1340
-3840:2:1345
-3841:2:1346
-3842:0:4365
-3843:2:1358
-3844:0:4365
-3845:2:1454
-3846:0:4365
-3847:3:3461
-3848:0:4365
-3849:2:1455
-3850:0:4365
-3851:3:3462
-3852:0:4365
-3853:2:1652
-3854:0:4365
-3855:2:1653
-3856:0:4365
-3857:2:1657
-3858:0:4365
-3859:2:1660
-3860:0:4365
-3861:3:3461
-3862:0:4365
-3863:2:1665
-3864:2:1669
-3865:2:1670
-3866:2:1678
-3867:2:1679
-3868:2:1683
-3869:2:1684
-3870:2:1678
-3871:2:1679
-3872:2:1680
-3873:2:1692
-3874:2:1697
-3875:2:1701
-3876:2:1702
-3877:2:1709
-3878:2:1710
-3879:2:1721
-3880:2:1722
-3881:2:1723
-3882:2:1721
-3883:2:1722
-3884:2:1723
-3885:2:1734
-3886:2:1739
-3887:2:1740
-3888:0:4365
-3889:3:3462
-3890:0:4365
-3891:2:1752
-3892:0:4365
-3893:3:3461
-3894:0:4365
-3895:2:1754
-3896:0:4365
-3897:3:3462
-3898:0:4365
-3899:2:1755
-3900:2:1759
-3901:2:1760
-3902:2:1768
-3903:2:1769
-3904:2:1773
-3905:2:1774
-3906:2:1768
-3907:2:1769
-3908:2:1773
-3909:2:1774
-3910:2:1782
-3911:2:1787
-3912:2:1791
-3913:2:1792
-3914:2:1799
-3915:2:1800
-3916:2:1811
-3917:2:1812
-3918:2:1813
-3919:2:1811
-3920:2:1812
-3921:2:1813
-3922:2:1824
-3923:2:1829
-3924:2:1830
-3925:0:4365
-3926:2:1842
-3927:0:4365
-3928:3:3461
-3929:0:4365
-3930:2:1844
-3931:0:4365
-3932:3:3462
-3933:0:4365
-3934:2:1845
-3935:2:1849
-3936:2:1850
-3937:2:1858
-3938:2:1859
-3939:2:1863
-3940:2:1864
-3941:2:1858
-3942:2:1859
-3943:2:1863
-3944:2:1864
-3945:2:1872
-3946:2:1877
-3947:2:1881
-3948:2:1882
-3949:2:1889
-3950:2:1890
-3951:2:1901
-3952:2:1902
-3953:2:1903
-3954:2:1901
-3955:2:1902
-3956:2:1903
-3957:2:1914
-3958:2:1919
-3959:2:1920
-3960:0:4365
-3961:2:1932
-3962:0:4365
-3963:3:3461
-3964:0:4365
-3965:2:1934
-3966:0:4365
-3967:3:3462
-3968:0:4365
-3969:2:1935
-3970:0:4365
-3971:2:1936
-3972:0:4365
-3973:2:2129
-3974:0:4365
-3975:2:2130
-3976:0:4365
-3977:2:2134
-3978:0:4365
-3979:3:3461
-3980:0:4365
-3981:2:2136
-3982:0:4365
-3983:3:3462
-3984:0:4365
-3985:2:2137
-3986:2:2141
-3987:2:2142
-3988:2:2150
-3989:2:2151
-3990:2:2155
-3991:2:2156
-3992:2:2150
-3993:2:2151
-3994:2:2155
-3995:2:2156
-3996:2:2164
-3997:2:2169
-3998:2:2173
-3999:2:2174
-4000:2:2181
-4001:2:2182
-4002:2:2193
-4003:2:2194
-4004:2:2195
-4005:2:2193
-4006:2:2194
-4007:2:2195
-4008:2:2206
-4009:2:2211
-4010:2:2212
-4011:0:4365
-4012:2:2224
-4013:0:4365
-4014:3:3461
-4015:0:4365
-4016:2:2226
-4017:0:4365
-4018:3:3462
-4019:0:4365
-4020:2:1936
-4021:0:4365
-4022:2:2129
-4023:0:4365
-4024:2:2130
-4025:0:4365
-4026:2:2134
-4027:0:4365
-4028:3:3461
-4029:0:4365
-4030:2:2136
-4031:0:4365
-4032:3:3462
-4033:0:4365
-4034:2:2137
-4035:2:2141
-4036:2:2142
-4037:2:2150
-4038:2:2151
-4039:2:2155
-4040:2:2156
-4041:2:2150
-4042:2:2151
-4043:2:2152
-4044:2:2164
-4045:2:2169
-4046:2:2173
-4047:2:2174
-4048:2:2181
-4049:2:2182
-4050:2:2193
-4051:2:2194
-4052:2:2195
-4053:2:2193
-4054:2:2194
-4055:2:2195
-4056:2:2206
-4057:2:2211
-4058:2:2212
-4059:0:4365
-4060:2:2224
-4061:0:4365
-4062:3:3461
-4063:0:4365
-4064:2:2226
-4065:0:4365
-4066:3:3462
-4067:0:4365
-4068:2:2230
-4069:0:4365
-4070:3:3461
-4071:0:4365
-4072:2:2235
-4073:2:2239
-4074:2:2240
-4075:2:2248
-4076:2:2249
-4077:2:2253
-4078:2:2254
-4079:2:2248
-4080:2:2249
-4081:2:2250
-4082:2:2262
-4083:2:2267
-4084:2:2271
-4085:2:2272
-4086:2:2279
-4087:2:2280
-4088:2:2291
-4089:2:2292
-4090:2:2293
-4091:2:2291
-4092:2:2292
-4093:2:2293
-4094:2:2304
-4095:2:2309
-4096:2:2310
-4097:0:4365
-4098:3:3462
-4099:0:4365
-4100:2:2322
-4101:0:4365
-4102:2:1169
-4103:0:4365
-4104:3:3461
-4105:0:4365
-4106:2:1170
-4107:0:4365
-4108:3:3462
-4109:0:4365
-4110:3:3463
-4111:0:4365
-4112:3:3469
-4113:0:4365
-4114:3:3470
-4115:3:3474
-4116:3:3475
-4117:3:3483
-4118:3:3484
-4119:3:3488
-4120:3:3489
-4121:3:3483
-4122:3:3484
-4123:3:3488
-4124:3:3489
-4125:3:3497
-4126:3:3502
-4127:3:3506
-4128:3:3507
-4129:3:3514
-4130:3:3515
-4131:3:3526
-4132:3:3527
-4133:3:3528
-4134:3:3526
-4135:3:3527
-4136:3:3528
-4137:3:3539
-4138:3:3544
-4139:3:3545
-4140:0:4365
-4141:3:3557
-4142:0:4365
-4143:3:3558
-4144:0:4365
-4145:2:1173
-4146:0:4365
-4147:3:3559
-4148:0:4365
-4149:2:1179
-4150:0:4365
-4151:2:1180
-4152:0:4365
-4153:3:3558
-4154:0:4365
-4155:2:1181
-4156:2:1185
-4157:2:1186
-4158:2:1194
-4159:2:1195
-4160:2:1199
-4161:2:1200
-4162:2:1194
-4163:2:1195
-4164:2:1199
-4165:2:1200
-4166:2:1208
-4167:2:1213
-4168:2:1217
-4169:2:1218
-4170:2:1225
-4171:2:1226
-4172:2:1237
-4173:2:1238
-4174:2:1239
-4175:2:1237
-4176:2:1238
-4177:2:1239
-4178:2:1250
-4179:2:1255
-4180:2:1256
-4181:0:4365
-4182:3:3559
-4183:0:4365
-4184:2:1268
-4185:0:4365
-4186:3:3558
-4187:0:4365
-4188:2:1270
-4189:0:4365
-4190:3:3559
-4191:0:4365
-4192:2:1271
-4193:2:1275
-4194:2:1276
-4195:2:1284
-4196:2:1285
-4197:2:1289
-4198:2:1290
-4199:2:1284
-4200:2:1285
-4201:2:1289
-4202:2:1290
-4203:2:1298
-4204:2:1303
-4205:2:1307
-4206:2:1308
-4207:2:1315
-4208:2:1316
-4209:2:1327
-4210:2:1328
-4211:2:1329
-4212:2:1327
-4213:2:1328
-4214:2:1329
-4215:2:1340
-4216:2:1345
-4217:2:1346
-4218:0:4365
-4219:2:1358
-4220:0:4365
-4221:2:1360
-4222:0:4365
-4223:3:3558
-4224:0:4365
-4225:2:1361
-4226:0:4365
-4227:3:3559
-4228:0:4365
-4229:2:1362
-4230:2:1366
-4231:2:1367
-4232:2:1375
-4233:2:1376
-4234:2:1380
-4235:2:1381
-4236:2:1375
-4237:2:1376
-4238:2:1380
-4239:2:1381
-4240:2:1389
-4241:2:1394
-4242:2:1398
-4243:2:1399
-4244:2:1406
-4245:2:1407
-4246:2:1418
-4247:2:1419
-4248:2:1420
-4249:2:1418
-4250:2:1419
-4251:2:1420
-4252:2:1431
-4253:2:1436
-4254:2:1437
-4255:0:4365
-4256:2:1449
-4257:0:4365
-4258:3:3558
-4259:0:4365
-4260:2:1451
-4261:0:4365
-4262:3:3559
-4263:0:4365
-4264:2:1652
-4265:0:4365
-4266:2:1653
-4267:0:4365
-4268:2:1657
-4269:0:4365
-4270:2:1180
-4271:0:4365
-4272:3:3558
-4273:0:4365
-4274:2:1181
-4275:2:1185
-4276:2:1186
-4277:2:1194
-4278:2:1195
-4279:2:1199
-4280:2:1200
-4281:2:1194
-4282:2:1195
-4283:2:1196
-4284:2:1208
-4285:2:1213
-4286:2:1217
-4287:2:1218
-4288:2:1225
-4289:2:1226
-4290:2:1237
-4291:2:1238
-4292:2:1239
-4293:2:1237
-4294:2:1238
-4295:2:1239
-4296:2:1250
-4297:2:1255
-4298:2:1256
-4299:0:4365
-4300:3:3559
-4301:0:4365
-4302:2:1268
-4303:0:4365
-4304:3:3558
-4305:0:4365
-4306:2:1270
-4307:0:4365
-4308:3:3559
-4309:0:4365
-4310:2:1271
-4311:2:1275
-4312:2:1276
-4313:2:1284
-4314:2:1285
-4315:2:1289
-4316:2:1290
-4317:2:1284
-4318:2:1285
-4319:2:1289
-4320:2:1290
-4321:2:1298
-4322:2:1303
-4323:2:1307
-4324:2:1308
-4325:2:1315
-4326:2:1316
-4327:2:1327
-4328:2:1328
-4329:2:1329
-4330:2:1327
-4331:2:1328
-4332:2:1329
-4333:2:1340
-4334:2:1345
-4335:2:1346
-4336:0:4365
-4337:2:1358
-4338:0:4365
-4339:2:1454
-4340:0:4365
-4341:3:3558
-4342:0:4365
-4343:2:1455
-4344:0:4365
-4345:3:3559
-4346:0:4365
-4347:2:1652
-4348:0:4365
-4349:2:1653
-4350:0:4365
-4351:2:1657
-4352:0:4365
-4353:2:1660
-4354:0:4365
-4355:3:3558
-4356:0:4365
-4357:2:1665
-4358:2:1669
-4359:2:1670
-4360:2:1678
-4361:2:1679
-4362:2:1683
-4363:2:1684
-4364:2:1678
-4365:2:1679
-4366:2:1680
-4367:2:1692
-4368:2:1697
-4369:2:1701
-4370:2:1702
-4371:2:1709
-4372:2:1710
-4373:2:1721
-4374:2:1722
-4375:2:1723
-4376:2:1721
-4377:2:1722
-4378:2:1723
-4379:2:1734
-4380:2:1739
-4381:2:1740
-4382:0:4365
-4383:3:3559
-4384:0:4365
-4385:2:1752
-4386:0:4365
-4387:3:3558
-4388:0:4365
-4389:2:1754
-4390:0:4365
-4391:3:3559
-4392:0:4365
-4393:2:1755
-4394:2:1759
-4395:2:1760
-4396:2:1768
-4397:2:1769
-4398:2:1773
-4399:2:1774
-4400:2:1768
-4401:2:1769
-4402:2:1773
-4403:2:1774
-4404:2:1782
-4405:2:1787
-4406:2:1791
-4407:2:1792
-4408:2:1799
-4409:2:1800
-4410:2:1811
-4411:2:1812
-4412:2:1813
-4413:2:1811
-4414:2:1812
-4415:2:1813
-4416:2:1824
-4417:2:1829
-4418:2:1830
-4419:0:4365
-4420:2:1842
-4421:0:4365
-4422:3:3558
-4423:0:4365
-4424:2:1844
-4425:0:4365
-4426:3:3559
-4427:0:4365
-4428:2:1845
-4429:2:1849
-4430:2:1850
-4431:2:1858
-4432:2:1859
-4433:2:1863
-4434:2:1864
-4435:2:1858
-4436:2:1859
-4437:2:1863
-4438:2:1864
-4439:2:1872
-4440:2:1877
-4441:2:1881
-4442:2:1882
-4443:2:1889
-4444:2:1890
-4445:2:1901
-4446:2:1902
-4447:2:1903
-4448:2:1901
-4449:2:1902
-4450:2:1903
-4451:2:1914
-4452:2:1919
-4453:2:1920
-4454:0:4365
-4455:2:1932
-4456:0:4365
-4457:3:3558
-4458:0:4365
-4459:2:1934
-4460:0:4365
-4461:3:3559
-4462:0:4365
-4463:2:1935
-4464:0:4365
-4465:2:1936
-4466:0:4365
-4467:2:2129
-4468:0:4365
-4469:2:2130
-4470:0:4365
-4471:2:2134
-4472:0:4365
-4473:3:3558
-4474:0:4365
-4475:2:2136
-4476:0:4365
-4477:3:3559
-4478:0:4365
-4479:2:2137
-4480:2:2141
-4481:2:2142
-4482:2:2150
-4483:2:2151
-4484:2:2155
-4485:2:2156
-4486:2:2150
-4487:2:2151
-4488:2:2155
-4489:2:2156
-4490:2:2164
-4491:2:2169
-4492:2:2173
-4493:2:2174
-4494:2:2181
-4495:2:2182
-4496:2:2193
-4497:2:2194
-4498:2:2195
-4499:2:2193
-4500:2:2194
-4501:2:2195
-4502:2:2206
-4503:2:2211
-4504:2:2212
-4505:0:4365
-4506:2:2224
-4507:0:4365
-4508:3:3558
-4509:0:4365
-4510:2:2226
-4511:0:4365
-4512:3:3559
-4513:0:4365
-4514:2:1936
-4515:0:4365
-4516:2:2129
-4517:0:4365
-4518:2:2130
-4519:0:4365
-4520:2:2134
-4521:0:4365
-4522:3:3558
-4523:0:4365
-4524:2:2136
-4525:0:4365
-4526:3:3559
-4527:0:4365
-4528:2:2137
-4529:2:2141
-4530:2:2142
-4531:2:2150
-4532:2:2151
-4533:2:2155
-4534:2:2156
-4535:2:2150
-4536:2:2151
-4537:2:2152
-4538:2:2164
-4539:2:2169
-4540:2:2173
-4541:2:2174
-4542:2:2181
-4543:2:2182
-4544:2:2193
-4545:2:2194
-4546:2:2195
-4547:2:2193
-4548:2:2194
-4549:2:2195
-4550:2:2206
-4551:2:2211
-4552:2:2212
-4553:0:4365
-4554:2:2224
-4555:0:4365
-4556:3:3558
-4557:0:4365
-4558:2:2226
-4559:0:4365
-4560:3:3559
-4561:0:4365
-4562:2:2230
-4563:0:4365
-4564:3:3558
-4565:0:4365
-4566:2:2235
-4567:2:2239
-4568:2:2240
-4569:2:2248
-4570:2:2249
-4571:2:2253
-4572:2:2254
-4573:2:2248
-4574:2:2249
-4575:2:2250
-4576:2:2262
-4577:2:2267
-4578:2:2271
-4579:2:2272
-4580:2:2279
-4581:2:2280
-4582:2:2291
-4583:2:2292
-4584:2:2293
-4585:2:2291
-4586:2:2292
-4587:2:2293
-4588:2:2304
-4589:2:2309
-4590:2:2310
-4591:0:4365
-4592:3:3559
-4593:0:4365
-4594:2:2322
-4595:0:4365
-4596:2:1169
-4597:0:4365
-4598:3:3558
-4599:0:4365
-4600:2:1170
-4601:0:4365
-4602:3:3559
-4603:0:4365
-4604:3:3560
-4605:0:4365
-4606:3:3566
-4607:0:4365
-4608:3:3569
-4609:3:3570
-4610:3:3582
-4611:3:3583
-4612:3:3587
-4613:3:3588
-4614:3:3582
-4615:3:3583
-4616:3:3587
-4617:3:3588
-4618:3:3596
-4619:3:3601
-4620:3:3605
-4621:3:3606
-4622:3:3613
-4623:3:3614
-4624:3:3625
-4625:3:3626
-4626:3:3627
-4627:3:3625
-4628:3:3626
-4629:3:3627
-4630:3:3638
-4631:3:3643
-4632:3:3644
-4633:0:4365
-4634:3:3656
-4635:0:4365
-4636:3:3657
-4637:0:4365
-4638:2:1173
-4639:0:4365
-4640:3:3658
-4641:0:4365
-4642:2:1179
-4643:0:4365
-4644:2:1180
-4645:0:4365
-4646:3:3657
-4647:0:4365
-4648:2:1181
-4649:2:1185
-4650:2:1186
-4651:2:1194
-4652:2:1195
-4653:2:1199
-4654:2:1200
-4655:2:1194
-4656:2:1195
-4657:2:1199
-4658:2:1200
-4659:2:1208
-4660:2:1213
-4661:2:1217
-4662:2:1218
-4663:2:1225
-4664:2:1226
-4665:2:1237
-4666:2:1238
-4667:2:1239
-4668:2:1237
-4669:2:1238
-4670:2:1239
-4671:2:1250
-4672:2:1255
-4673:2:1256
-4674:0:4365
-4675:3:3658
-4676:0:4365
-4677:2:1268
-4678:0:4365
-4679:3:3657
-4680:0:4365
-4681:2:1270
-4682:0:4365
-4683:3:3658
-4684:0:4365
-4685:2:1271
-4686:2:1275
-4687:2:1276
-4688:2:1284
-4689:2:1285
-4690:2:1289
-4691:2:1290
-4692:2:1284
-4693:2:1285
-4694:2:1289
-4695:2:1290
-4696:2:1298
-4697:2:1303
-4698:2:1307
-4699:2:1308
-4700:2:1315
-4701:2:1316
-4702:2:1327
-4703:2:1328
-4704:2:1329
-4705:2:1327
-4706:2:1328
-4707:2:1329
-4708:2:1340
-4709:2:1345
-4710:2:1346
-4711:0:4365
-4712:2:1358
-4713:0:4365
-4714:2:1360
-4715:0:4365
-4716:3:3657
-4717:0:4365
-4718:2:1361
-4719:0:4365
-4720:3:3658
-4721:0:4365
-4722:2:1362
-4723:2:1366
-4724:2:1367
-4725:2:1375
-4726:2:1376
-4727:2:1380
-4728:2:1381
-4729:2:1375
-4730:2:1376
-4731:2:1380
-4732:2:1381
-4733:2:1389
-4734:2:1394
-4735:2:1398
-4736:2:1399
-4737:2:1406
-4738:2:1407
-4739:2:1418
-4740:2:1419
-4741:2:1420
-4742:2:1418
-4743:2:1419
-4744:2:1420
-4745:2:1431
-4746:2:1436
-4747:2:1437
-4748:0:4365
-4749:2:1449
-4750:0:4365
-4751:3:3657
-4752:0:4365
-4753:2:1451
-4754:0:4365
-4755:3:3658
-4756:0:4365
-4757:2:1652
-4758:0:4365
-4759:2:1653
-4760:0:4365
-4761:2:1657
-4762:0:4365
-4763:2:1180
-4764:0:4365
-4765:3:3657
-4766:0:4365
-4767:2:1181
-4768:2:1185
-4769:2:1186
-4770:2:1194
-4771:2:1195
-4772:2:1199
-4773:2:1200
-4774:2:1194
-4775:2:1195
-4776:2:1196
-4777:2:1208
-4778:2:1213
-4779:2:1217
-4780:2:1218
-4781:2:1225
-4782:2:1226
-4783:2:1237
-4784:2:1238
-4785:2:1239
-4786:2:1237
-4787:2:1238
-4788:2:1239
-4789:2:1250
-4790:2:1255
-4791:2:1256
-4792:0:4365
-4793:3:3658
-4794:0:4365
-4795:2:1268
-4796:0:4365
-4797:3:3657
-4798:0:4365
-4799:2:1270
-4800:0:4365
-4801:3:3658
-4802:0:4365
-4803:2:1271
-4804:2:1275
-4805:2:1276
-4806:2:1284
-4807:2:1285
-4808:2:1289
-4809:2:1290
-4810:2:1284
-4811:2:1285
-4812:2:1289
-4813:2:1290
-4814:2:1298
-4815:2:1303
-4816:2:1307
-4817:2:1308
-4818:2:1315
-4819:2:1316
-4820:2:1327
-4821:2:1328
-4822:2:1329
-4823:2:1327
-4824:2:1328
-4825:2:1329
-4826:2:1340
-4827:2:1345
-4828:2:1346
-4829:0:4365
-4830:2:1358
-4831:0:4365
-4832:2:1454
-4833:0:4365
-4834:3:3657
-4835:0:4365
-4836:2:1455
-4837:0:4365
-4838:3:3658
-4839:0:4365
-4840:2:1652
-4841:0:4365
-4842:2:1653
-4843:0:4365
-4844:2:1657
-4845:0:4365
-4846:2:1660
-4847:0:4365
-4848:3:3657
-4849:0:4365
-4850:2:1665
-4851:2:1669
-4852:2:1670
-4853:2:1678
-4854:2:1679
-4855:2:1683
-4856:2:1684
-4857:2:1678
-4858:2:1679
-4859:2:1680
-4860:2:1692
-4861:2:1697
-4862:2:1701
-4863:2:1702
-4864:2:1709
-4865:2:1710
-4866:2:1721
-4867:2:1722
-4868:2:1723
-4869:2:1721
-4870:2:1722
-4871:2:1723
-4872:2:1734
-4873:2:1739
-4874:2:1740
-4875:0:4365
-4876:3:3658
-4877:0:4365
-4878:2:1752
-4879:0:4365
-4880:3:3657
-4881:0:4365
-4882:2:1754
-4883:0:4365
-4884:3:3658
-4885:0:4365
-4886:2:1755
-4887:2:1759
-4888:2:1760
-4889:2:1768
-4890:2:1769
-4891:2:1773
-4892:2:1774
-4893:2:1768
-4894:2:1769
-4895:2:1773
-4896:2:1774
-4897:2:1782
-4898:2:1787
-4899:2:1791
-4900:2:1792
-4901:2:1799
-4902:2:1800
-4903:2:1811
-4904:2:1812
-4905:2:1813
-4906:2:1811
-4907:2:1812
-4908:2:1813
-4909:2:1824
-4910:2:1829
-4911:2:1830
-4912:0:4365
-4913:2:1842
-4914:0:4365
-4915:3:3657
-4916:0:4365
-4917:2:1844
-4918:0:4365
-4919:3:3658
-4920:0:4365
-4921:2:1845
-4922:2:1849
-4923:2:1850
-4924:2:1858
-4925:2:1859
-4926:2:1863
-4927:2:1864
-4928:2:1858
-4929:2:1859
-4930:2:1863
-4931:2:1864
-4932:2:1872
-4933:2:1877
-4934:2:1881
-4935:2:1882
-4936:2:1889
-4937:2:1890
-4938:2:1901
-4939:2:1902
-4940:2:1903
-4941:2:1901
-4942:2:1902
-4943:2:1903
-4944:2:1914
-4945:2:1919
-4946:2:1920
-4947:0:4365
-4948:2:1932
-4949:0:4365
-4950:3:3657
-4951:0:4365
-4952:2:1934
-4953:0:4365
-4954:3:3658
-4955:0:4365
-4956:2:1935
-4957:0:4365
-4958:2:1936
-4959:0:4365
-4960:2:2129
-4961:0:4365
-4962:2:2130
-4963:0:4365
-4964:2:2134
-4965:0:4365
-4966:3:3657
-4967:0:4365
-4968:2:2136
-4969:0:4365
-4970:3:3658
-4971:0:4365
-4972:2:2137
-4973:2:2141
-4974:2:2142
-4975:2:2150
-4976:2:2151
-4977:2:2155
-4978:2:2156
-4979:2:2150
-4980:2:2151
-4981:2:2155
-4982:2:2156
-4983:2:2164
-4984:2:2169
-4985:2:2173
-4986:2:2174
-4987:2:2181
-4988:2:2182
-4989:2:2193
-4990:2:2194
-4991:2:2195
-4992:2:2193
-4993:2:2194
-4994:2:2195
-4995:2:2206
-4996:2:2211
-4997:2:2212
-4998:0:4365
-4999:2:2224
-5000:0:4365
-5001:3:3657
-5002:0:4365
-5003:2:2226
-5004:0:4365
-5005:3:3658
-5006:0:4365
-5007:2:1936
-5008:0:4365
-5009:2:2129
-5010:0:4365
-5011:2:2130
-5012:0:4365
-5013:2:2134
-5014:0:4365
-5015:3:3657
-5016:0:4365
-5017:2:2136
-5018:0:4365
-5019:3:3658
-5020:0:4365
-5021:2:2137
-5022:2:2141
-5023:2:2142
-5024:2:2150
-5025:2:2151
-5026:2:2155
-5027:2:2156
-5028:2:2150
-5029:2:2151
-5030:2:2152
-5031:2:2164
-5032:2:2169
-5033:2:2173
-5034:2:2174
-5035:2:2181
-5036:2:2182
-5037:2:2193
-5038:2:2194
-5039:2:2195
-5040:2:2193
-5041:2:2194
-5042:2:2195
-5043:2:2206
-5044:2:2211
-5045:2:2212
-5046:0:4365
-5047:2:2224
-5048:0:4365
-5049:3:3657
-5050:0:4365
-5051:2:2226
-5052:0:4365
-5053:3:3658
-5054:0:4365
-5055:2:2230
-5056:0:4365
-5057:3:3657
-5058:0:4365
-5059:2:2235
-5060:2:2239
-5061:2:2240
-5062:2:2248
-5063:2:2249
-5064:2:2253
-5065:2:2254
-5066:2:2248
-5067:2:2249
-5068:2:2250
-5069:2:2262
-5070:2:2267
-5071:2:2271
-5072:2:2272
-5073:2:2279
-5074:2:2280
-5075:2:2291
-5076:2:2292
-5077:2:2293
-5078:2:2291
-5079:2:2292
-5080:2:2293
-5081:2:2304
-5082:2:2309
-5083:2:2310
-5084:0:4365
-5085:3:3658
-5086:0:4365
-5087:2:2322
-5088:0:4365
-5089:2:1169
-5090:0:4365
-5091:3:3657
-5092:0:4365
-5093:2:1170
-5094:0:4365
-5095:3:3658
-5096:0:4365
-5097:3:3659
-5098:0:4365
-5099:3:3665
-5100:0:4365
-5101:3:3666
-5102:0:4365
-5103:3:3667
-5104:0:4365
-5105:3:3668
-5106:0:4365
-5107:3:3669
-5108:3:3673
-5109:3:3674
-5110:3:3682
-5111:3:3683
-5112:3:3687
-5113:3:3688
-5114:3:3682
-5115:3:3683
-5116:3:3687
-5117:3:3688
-5118:3:3696
-5119:3:3701
-5120:3:3705
-5121:3:3706
-5122:3:3713
-5123:3:3714
-5124:3:3725
-5125:3:3726
-5126:3:3727
-5127:3:3725
-5128:3:3726
-5129:3:3727
-5130:3:3738
-5131:3:3743
-5132:3:3744
-5133:0:4365
-5134:3:3756
-5135:0:4365
-5136:3:3757
-5137:0:4365
-5138:2:1173
-5139:0:4365
-5140:3:3758
-5141:0:4365
-5142:2:1179
-5143:0:4365
-5144:2:1180
-5145:0:4365
-5146:3:3757
-5147:0:4365
-5148:2:1181
-5149:2:1185
-5150:2:1186
-5151:2:1194
-5152:2:1195
-5153:2:1199
-5154:2:1200
-5155:2:1194
-5156:2:1195
-5157:2:1199
-5158:2:1200
-5159:2:1208
-5160:2:1213
-5161:2:1217
-5162:2:1218
-5163:2:1225
-5164:2:1226
-5165:2:1237
-5166:2:1238
-5167:2:1239
-5168:2:1237
-5169:2:1238
-5170:2:1239
-5171:2:1250
-5172:2:1255
-5173:2:1256
-5174:0:4365
-5175:3:3758
-5176:0:4365
-5177:2:1268
-5178:0:4365
-5179:3:3757
-5180:0:4365
-5181:2:1270
-5182:0:4365
-5183:3:3758
-5184:0:4365
-5185:2:1271
-5186:2:1275
-5187:2:1276
-5188:2:1284
-5189:2:1285
-5190:2:1289
-5191:2:1290
-5192:2:1284
-5193:2:1285
-5194:2:1289
-5195:2:1290
-5196:2:1298
-5197:2:1303
-5198:2:1307
-5199:2:1308
-5200:2:1315
-5201:2:1316
-5202:2:1327
-5203:2:1328
-5204:2:1329
-5205:2:1327
-5206:2:1328
-5207:2:1329
-5208:2:1340
-5209:2:1345
-5210:2:1346
-5211:0:4365
-5212:2:1358
-5213:0:4365
-5214:2:1360
-5215:0:4365
-5216:3:3757
-5217:0:4365
-5218:2:1361
-5219:0:4365
-5220:3:3758
-5221:0:4365
-5222:2:1362
-5223:2:1366
-5224:2:1367
-5225:2:1375
-5226:2:1376
-5227:2:1380
-5228:2:1381
-5229:2:1375
-5230:2:1376
-5231:2:1380
-5232:2:1381
-5233:2:1389
-5234:2:1394
-5235:2:1398
-5236:2:1399
-5237:2:1406
-5238:2:1407
-5239:2:1418
-5240:2:1419
-5241:2:1420
-5242:2:1418
-5243:2:1419
-5244:2:1420
-5245:2:1431
-5246:2:1436
-5247:2:1437
-5248:0:4365
-5249:2:1449
-5250:0:4365
-5251:3:3757
-5252:0:4365
-5253:2:1451
-5254:0:4365
-5255:3:3758
-5256:0:4365
-5257:2:1652
-5258:0:4365
-5259:2:1653
-5260:0:4365
-5261:2:1657
-5262:0:4365
-5263:2:1180
-5264:0:4365
-5265:3:3757
-5266:0:4365
-5267:2:1181
-5268:2:1185
-5269:2:1186
-5270:2:1194
-5271:2:1195
-5272:2:1199
-5273:2:1200
-5274:2:1194
-5275:2:1195
-5276:2:1196
-5277:2:1208
-5278:2:1213
-5279:2:1217
-5280:2:1218
-5281:2:1225
-5282:2:1226
-5283:2:1237
-5284:2:1238
-5285:2:1239
-5286:2:1237
-5287:2:1238
-5288:2:1239
-5289:2:1250
-5290:2:1255
-5291:2:1256
-5292:0:4365
-5293:3:3758
-5294:0:4365
-5295:2:1268
-5296:0:4365
-5297:3:3757
-5298:0:4365
-5299:2:1270
-5300:0:4365
-5301:3:3758
-5302:0:4365
-5303:2:1271
-5304:2:1275
-5305:2:1276
-5306:2:1284
-5307:2:1285
-5308:2:1289
-5309:2:1290
-5310:2:1284
-5311:2:1285
-5312:2:1289
-5313:2:1290
-5314:2:1298
-5315:2:1303
-5316:2:1307
-5317:2:1308
-5318:2:1315
-5319:2:1316
-5320:2:1327
-5321:2:1328
-5322:2:1329
-5323:2:1327
-5324:2:1328
-5325:2:1329
-5326:2:1340
-5327:2:1345
-5328:2:1346
-5329:0:4365
-5330:2:1358
-5331:0:4365
-5332:2:1454
-5333:0:4365
-5334:3:3757
-5335:0:4365
-5336:2:1455
-5337:0:4365
-5338:3:3758
-5339:0:4365
-5340:2:1652
-5341:0:4365
-5342:2:1653
-5343:0:4365
-5344:2:1657
-5345:0:4365
-5346:2:1660
-5347:0:4365
-5348:3:3757
-5349:0:4365
-5350:2:1665
-5351:2:1669
-5352:2:1670
-5353:2:1678
-5354:2:1679
-5355:2:1683
-5356:2:1684
-5357:2:1678
-5358:2:1679
-5359:2:1680
-5360:2:1692
-5361:2:1697
-5362:2:1701
-5363:2:1702
-5364:2:1709
-5365:2:1710
-5366:2:1721
-5367:2:1722
-5368:2:1723
-5369:2:1721
-5370:2:1722
-5371:2:1723
-5372:2:1734
-5373:2:1739
-5374:2:1740
-5375:0:4365
-5376:3:3758
-5377:0:4365
-5378:2:1752
-5379:0:4365
-5380:3:3757
-5381:0:4365
-5382:2:1754
-5383:0:4365
-5384:3:3758
-5385:0:4365
-5386:2:1755
-5387:2:1759
-5388:2:1760
-5389:2:1768
-5390:2:1769
-5391:2:1773
-5392:2:1774
-5393:2:1768
-5394:2:1769
-5395:2:1773
-5396:2:1774
-5397:2:1782
-5398:2:1787
-5399:2:1791
-5400:2:1792
-5401:2:1799
-5402:2:1800
-5403:2:1811
-5404:2:1812
-5405:2:1813
-5406:2:1811
-5407:2:1812
-5408:2:1813
-5409:2:1824
-5410:2:1829
-5411:2:1830
-5412:0:4365
-5413:2:1842
-5414:0:4365
-5415:3:3757
-5416:0:4365
-5417:2:1844
-5418:0:4365
-5419:3:3758
-5420:0:4365
-5421:2:1845
-5422:2:1849
-5423:2:1850
-5424:2:1858
-5425:2:1859
-5426:2:1863
-5427:2:1864
-5428:2:1858
-5429:2:1859
-5430:2:1863
-5431:2:1864
-5432:2:1872
-5433:2:1877
-5434:2:1881
-5435:2:1882
-5436:2:1889
-5437:2:1890
-5438:2:1901
-5439:2:1902
-5440:2:1903
-5441:2:1901
-5442:2:1902
-5443:2:1903
-5444:2:1914
-5445:2:1919
-5446:2:1920
-5447:0:4365
-5448:2:1932
-5449:0:4365
-5450:3:3757
-5451:0:4365
-5452:2:1934
-5453:0:4365
-5454:3:3758
-5455:0:4365
-5456:2:1935
-5457:0:4365
-5458:2:1936
-5459:0:4365
-5460:2:2129
-5461:0:4365
-5462:2:2130
-5463:0:4365
-5464:2:2134
-5465:0:4365
-5466:3:3757
-5467:0:4365
-5468:2:2136
-5469:0:4365
-5470:3:3758
-5471:0:4365
-5472:2:2137
-5473:2:2141
-5474:2:2142
-5475:2:2150
-5476:2:2151
-5477:2:2155
-5478:2:2156
-5479:2:2150
-5480:2:2151
-5481:2:2155
-5482:2:2156
-5483:2:2164
-5484:2:2169
-5485:2:2173
-5486:2:2174
-5487:2:2181
-5488:2:2182
-5489:2:2193
-5490:2:2194
-5491:2:2195
-5492:2:2193
-5493:2:2194
-5494:2:2195
-5495:2:2206
-5496:2:2211
-5497:2:2212
-5498:0:4365
-5499:2:2224
-5500:0:4365
-5501:3:3757
-5502:0:4365
-5503:2:2226
-5504:0:4365
-5505:3:3758
-5506:0:4365
-5507:2:1936
-5508:0:4365
-5509:2:2129
-5510:0:4365
-5511:2:2130
-5512:0:4365
-5513:2:2134
-5514:0:4365
-5515:3:3757
-5516:0:4365
-5517:2:2136
-5518:0:4365
-5519:3:3758
-5520:0:4365
-5521:2:2137
-5522:2:2141
-5523:2:2142
-5524:2:2150
-5525:2:2151
-5526:2:2155
-5527:2:2156
-5528:2:2150
-5529:2:2151
-5530:2:2152
-5531:2:2164
-5532:2:2169
-5533:2:2173
-5534:2:2174
-5535:2:2181
-5536:2:2182
-5537:2:2193
-5538:2:2194
-5539:2:2195
-5540:2:2193
-5541:2:2194
-5542:2:2195
-5543:2:2206
-5544:2:2211
-5545:2:2212
-5546:0:4365
-5547:2:2224
-5548:0:4365
-5549:3:3757
-5550:0:4365
-5551:2:2226
-5552:0:4365
-5553:3:3758
-5554:0:4365
-5555:2:2230
-5556:0:4365
-5557:3:3757
-5558:0:4365
-5559:2:2235
-5560:2:2239
-5561:2:2240
-5562:2:2248
-5563:2:2249
-5564:2:2253
-5565:2:2254
-5566:2:2248
-5567:2:2249
-5568:2:2250
-5569:2:2262
-5570:2:2267
-5571:2:2271
-5572:2:2272
-5573:2:2279
-5574:2:2280
-5575:2:2291
-5576:2:2292
-5577:2:2293
-5578:2:2291
-5579:2:2292
-5580:2:2293
-5581:2:2304
-5582:2:2309
-5583:2:2310
-5584:0:4365
-5585:3:3758
-5586:0:4365
-5587:2:2322
-5588:0:4365
-5589:2:1169
-5590:0:4365
-5591:3:3757
-5592:0:4365
-5593:2:1170
-5594:0:4365
-5595:3:3758
-5596:0:4365
-5597:3:3759
-5598:0:4365
-5599:3:3972
-5600:0:4365
-5601:3:3980
-5602:0:4365
-5603:3:3981
-5604:3:3985
-5605:3:3986
-5606:3:3994
-5607:3:3995
-5608:3:3999
-5609:3:4000
-5610:3:3994
-5611:3:3995
-5612:3:3999
-5613:3:4000
-5614:3:4008
-5615:3:4013
-5616:3:4017
-5617:3:4018
-5618:3:4025
-5619:3:4026
-5620:3:4037
-5621:3:4038
-5622:3:4039
-5623:3:4037
-5624:3:4038
-5625:3:4039
-5626:3:4050
-5627:3:4055
-5628:3:4056
-5629:0:4365
-5630:3:4068
-5631:0:4365
-5632:3:4069
-5633:0:4365
-5634:2:1173
-5635:0:4365
-5636:3:4070
-5637:0:4365
-5638:2:1179
-5639:0:4365
-5640:2:1180
-5641:0:4365
-5642:3:4069
-5643:0:4365
-5644:2:1181
-5645:2:1185
-5646:2:1186
-5647:2:1194
-5648:2:1195
-5649:2:1199
-5650:2:1200
-5651:2:1194
-5652:2:1195
-5653:2:1199
-5654:2:1200
-5655:2:1208
-5656:2:1213
-5657:2:1217
-5658:2:1218
-5659:2:1225
-5660:2:1226
-5661:2:1237
-5662:2:1238
-5663:2:1239
-5664:2:1237
-5665:2:1238
-5666:2:1239
-5667:2:1250
-5668:2:1255
-5669:2:1256
-5670:0:4365
-5671:3:4070
-5672:0:4365
-5673:2:1268
-5674:0:4365
-5675:3:4069
-5676:0:4365
-5677:2:1270
-5678:0:4365
-5679:3:4070
-5680:0:4365
-5681:2:1271
-5682:2:1275
-5683:2:1276
-5684:2:1284
-5685:2:1285
-5686:2:1289
-5687:2:1290
-5688:2:1284
-5689:2:1285
-5690:2:1289
-5691:2:1290
-5692:2:1298
-5693:2:1303
-5694:2:1307
-5695:2:1308
-5696:2:1315
-5697:2:1316
-5698:2:1327
-5699:2:1328
-5700:2:1329
-5701:2:1327
-5702:2:1328
-5703:2:1329
-5704:2:1340
-5705:2:1345
-5706:2:1346
-5707:0:4365
-5708:2:1358
-5709:0:4365
-5710:2:1360
-5711:0:4365
-5712:3:4069
-5713:0:4365
-5714:2:1361
-5715:0:4365
-5716:3:4070
-5717:0:4365
-5718:2:1362
-5719:2:1366
-5720:2:1367
-5721:2:1375
-5722:2:1376
-5723:2:1380
-5724:2:1381
-5725:2:1375
-5726:2:1376
-5727:2:1380
-5728:2:1381
-5729:2:1389
-5730:2:1394
-5731:2:1398
-5732:2:1399
-5733:2:1406
-5734:2:1407
-5735:2:1418
-5736:2:1419
-5737:2:1420
-5738:2:1418
-5739:2:1419
-5740:2:1420
-5741:2:1431
-5742:2:1436
-5743:2:1437
-5744:0:4365
-5745:2:1449
-5746:0:4365
-5747:3:4069
-5748:0:4365
-5749:2:1451
-5750:0:4365
-5751:3:4070
-5752:0:4365
-5753:2:1652
-5754:0:4365
-5755:2:1653
-5756:0:4365
-5757:2:1657
-5758:0:4365
-5759:2:1180
-5760:0:4365
-5761:3:4069
-5762:0:4365
-5763:2:1181
-5764:2:1185
-5765:2:1186
-5766:2:1194
-5767:2:1195
-5768:2:1199
-5769:2:1200
-5770:2:1194
-5771:2:1195
-5772:2:1196
-5773:2:1208
-5774:2:1213
-5775:2:1217
-5776:2:1218
-5777:2:1225
-5778:2:1226
-5779:2:1237
-5780:2:1238
-5781:2:1239
-5782:2:1237
-5783:2:1238
-5784:2:1239
-5785:2:1250
-5786:2:1255
-5787:2:1256
-5788:0:4365
-5789:3:4070
-5790:0:4365
-5791:2:1268
-5792:0:4365
-5793:3:4069
-5794:0:4365
-5795:2:1270
-5796:0:4365
-5797:3:4070
-5798:0:4365
-5799:2:1271
-5800:2:1275
-5801:2:1276
-5802:2:1284
-5803:2:1285
-5804:2:1289
-5805:2:1290
-5806:2:1284
-5807:2:1285
-5808:2:1289
-5809:2:1290
-5810:2:1298
-5811:2:1303
-5812:2:1307
-5813:2:1308
-5814:2:1315
-5815:2:1316
-5816:2:1327
-5817:2:1328
-5818:2:1329
-5819:2:1327
-5820:2:1328
-5821:2:1329
-5822:2:1340
-5823:2:1345
-5824:2:1346
-5825:0:4365
-5826:2:1358
-5827:0:4365
-5828:2:1454
-5829:0:4365
-5830:3:4069
-5831:0:4365
-5832:2:1455
-5833:0:4365
-5834:3:4070
-5835:0:4365
-5836:2:1652
-5837:0:4365
-5838:2:1653
-5839:0:4365
-5840:2:1657
-5841:0:4365
-5842:2:1660
-5843:0:4365
-5844:3:4069
-5845:0:4365
-5846:2:1665
-5847:2:1669
-5848:2:1670
-5849:2:1678
-5850:2:1679
-5851:2:1683
-5852:2:1684
-5853:2:1678
-5854:2:1679
-5855:2:1680
-5856:2:1692
-5857:2:1697
-5858:2:1701
-5859:2:1702
-5860:2:1709
-5861:2:1710
-5862:2:1721
-5863:2:1722
-5864:2:1723
-5865:2:1721
-5866:2:1722
-5867:2:1723
-5868:2:1734
-5869:2:1739
-5870:2:1740
-5871:0:4365
-5872:3:4070
-5873:0:4365
-5874:2:1752
-5875:0:4365
-5876:3:4069
-5877:0:4365
-5878:2:1754
-5879:0:4365
-5880:3:4070
-5881:0:4365
-5882:2:1755
-5883:2:1759
-5884:2:1760
-5885:2:1768
-5886:2:1769
-5887:2:1773
-5888:2:1774
-5889:2:1768
-5890:2:1769
-5891:2:1773
-5892:2:1774
-5893:2:1782
-5894:2:1787
-5895:2:1791
-5896:2:1792
-5897:2:1799
-5898:2:1800
-5899:2:1811
-5900:2:1812
-5901:2:1813
-5902:2:1811
-5903:2:1812
-5904:2:1813
-5905:2:1824
-5906:2:1829
-5907:2:1830
-5908:0:4365
-5909:2:1842
-5910:0:4365
-5911:3:4069
-5912:0:4365
-5913:2:1844
-5914:0:4365
-5915:3:4070
-5916:0:4365
-5917:2:1845
-5918:2:1849
-5919:2:1850
-5920:2:1858
-5921:2:1859
-5922:2:1863
-5923:2:1864
-5924:2:1858
-5925:2:1859
-5926:2:1863
-5927:2:1864
-5928:2:1872
-5929:2:1877
-5930:2:1881
-5931:2:1882
-5932:2:1889
-5933:2:1890
-5934:2:1901
-5935:2:1902
-5936:2:1903
-5937:2:1901
-5938:2:1902
-5939:2:1903
-5940:2:1914
-5941:2:1919
-5942:2:1920
-5943:0:4365
-5944:2:1932
-5945:0:4365
-5946:3:4069
-5947:0:4365
-5948:2:1934
-5949:0:4365
-5950:3:4070
-5951:0:4365
-5952:2:1935
-5953:0:4365
-5954:2:1936
-5955:0:4365
-5956:2:2129
-5957:0:4365
-5958:2:2130
-5959:0:4365
-5960:2:2134
-5961:0:4365
-5962:3:4069
-5963:0:4365
-5964:2:2136
-5965:0:4365
-5966:3:4070
-5967:0:4365
-5968:2:2137
-5969:2:2141
-5970:2:2142
-5971:2:2150
-5972:2:2151
-5973:2:2155
-5974:2:2156
-5975:2:2150
-5976:2:2151
-5977:2:2155
-5978:2:2156
-5979:2:2164
-5980:2:2169
-5981:2:2173
-5982:2:2174
-5983:2:2181
-5984:2:2182
-5985:2:2193
-5986:2:2194
-5987:2:2195
-5988:2:2193
-5989:2:2194
-5990:2:2195
-5991:2:2206
-5992:2:2211
-5993:2:2212
-5994:0:4365
-5995:2:2224
-5996:0:4365
-5997:3:4069
-5998:0:4365
-5999:2:2226
-6000:0:4365
-6001:3:4070
-6002:0:4365
-6003:2:1936
-6004:0:4365
-6005:2:2129
-6006:0:4365
-6007:2:2130
-6008:0:4365
-6009:2:2134
-6010:0:4365
-6011:3:4069
-6012:0:4365
-6013:2:2136
-6014:0:4365
-6015:3:4070
-6016:0:4365
-6017:2:2137
-6018:2:2141
-6019:2:2142
-6020:2:2150
-6021:2:2151
-6022:2:2155
-6023:2:2156
-6024:2:2150
-6025:2:2151
-6026:2:2152
-6027:2:2164
-6028:2:2169
-6029:2:2173
-6030:2:2174
-6031:2:2181
-6032:2:2182
-6033:2:2193
-6034:2:2194
-6035:2:2195
-6036:2:2193
-6037:2:2194
-6038:2:2195
-6039:2:2206
-6040:2:2211
-6041:2:2212
-6042:0:4365
-6043:2:2224
-6044:0:4365
-6045:3:4069
-6046:0:4365
-6047:2:2226
-6048:0:4365
-6049:3:4070
-6050:0:4365
-6051:2:2230
-6052:0:4365
-6053:3:4069
-6054:0:4365
-6055:2:2235
-6056:2:2239
-6057:2:2240
-6058:2:2248
-6059:2:2249
-6060:2:2253
-6061:2:2254
-6062:2:2248
-6063:2:2249
-6064:2:2250
-6065:2:2262
-6066:2:2267
-6067:2:2271
-6068:2:2272
-6069:2:2279
-6070:2:2280
-6071:2:2291
-6072:2:2292
-6073:2:2293
-6074:2:2291
-6075:2:2292
-6076:2:2293
-6077:2:2304
-6078:2:2309
-6079:2:2310
-6080:0:4365
-6081:3:4070
-6082:0:4365
-6083:2:2322
-6084:0:4365
-6085:2:1169
-6086:0:4365
-6087:3:4069
-6088:0:4365
-6089:2:1170
-6090:0:4365
-6091:3:4070
-6092:0:4365
-6093:3:4071
-6094:0:4365
-6095:3:4081
-6096:0:4365
-6097:3:3666
-6098:0:4365
-6099:3:3667
-6100:0:4365
-6101:3:3668
-6102:0:4365
-6103:3:3669
-6104:3:3673
-6105:3:3674
-6106:3:3682
-6107:3:3683
-6108:3:3687
-6109:3:3688
-6110:3:3682
-6111:3:3683
-6112:3:3687
-6113:3:3688
-6114:3:3696
-6115:3:3701
-6116:3:3705
-6117:3:3706
-6118:3:3713
-6119:3:3714
-6120:3:3725
-6121:3:3726
-6122:3:3727
-6123:3:3725
-6124:3:3726
-6125:3:3727
-6126:3:3738
-6127:3:3743
-6128:3:3744
-6129:0:4365
-6130:3:3756
-6131:0:4365
-6132:3:3757
-6133:0:4365
-6134:2:1173
-6135:0:4365
-6136:3:3758
-6137:0:4365
-6138:2:1179
-6139:0:4365
-6140:2:1180
-6141:0:4365
-6142:3:3757
-6143:0:4365
-6144:2:1181
-6145:2:1185
-6146:2:1186
-6147:2:1194
-6148:2:1195
-6149:2:1199
-6150:2:1200
-6151:2:1194
-6152:2:1195
-6153:2:1199
-6154:2:1200
-6155:2:1208
-6156:2:1213
-6157:2:1217
-6158:2:1218
-6159:2:1225
-6160:2:1226
-6161:2:1237
-6162:2:1238
-6163:2:1239
-6164:2:1237
-6165:2:1238
-6166:2:1239
-6167:2:1250
-6168:2:1255
-6169:2:1256
-6170:0:4365
-6171:3:3758
-6172:0:4365
-6173:2:1268
-6174:0:4365
-6175:3:3757
-6176:0:4365
-6177:2:1270
-6178:0:4365
-6179:3:3758
-6180:0:4365
-6181:2:1271
-6182:2:1275
-6183:2:1276
-6184:2:1284
-6185:2:1285
-6186:2:1289
-6187:2:1290
-6188:2:1284
-6189:2:1285
-6190:2:1289
-6191:2:1290
-6192:2:1298
-6193:2:1303
-6194:2:1307
-6195:2:1308
-6196:2:1315
-6197:2:1316
-6198:2:1327
-6199:2:1328
-6200:2:1329
-6201:2:1327
-6202:2:1328
-6203:2:1329
-6204:2:1340
-6205:2:1345
-6206:2:1346
-6207:0:4365
-6208:2:1358
-6209:0:4365
-6210:2:1360
-6211:0:4365
-6212:3:3757
-6213:0:4365
-6214:2:1361
-6215:0:4365
-6216:3:3758
-6217:0:4365
-6218:2:1362
-6219:2:1366
-6220:2:1367
-6221:2:1375
-6222:2:1376
-6223:2:1380
-6224:2:1381
-6225:2:1375
-6226:2:1376
-6227:2:1380
-6228:2:1381
-6229:2:1389
-6230:2:1394
-6231:2:1398
-6232:2:1399
-6233:2:1406
-6234:2:1407
-6235:2:1418
-6236:2:1419
-6237:2:1420
-6238:2:1418
-6239:2:1419
-6240:2:1420
-6241:2:1431
-6242:2:1436
-6243:2:1437
-6244:0:4365
-6245:2:1449
-6246:0:4365
-6247:3:3757
-6248:0:4365
-6249:2:1451
-6250:0:4365
-6251:3:3758
-6252:0:4365
-6253:2:1652
-6254:0:4365
-6255:2:1653
-6256:0:4365
-6257:2:1657
-6258:0:4365
-6259:2:1180
-6260:0:4365
-6261:3:3757
-6262:0:4365
-6263:2:1181
-6264:2:1185
-6265:2:1186
-6266:2:1194
-6267:2:1195
-6268:2:1199
-6269:2:1200
-6270:2:1194
-6271:2:1195
-6272:2:1196
-6273:2:1208
-6274:2:1213
-6275:2:1217
-6276:2:1218
-6277:2:1225
-6278:2:1226
-6279:2:1237
-6280:2:1238
-6281:2:1239
-6282:2:1237
-6283:2:1238
-6284:2:1239
-6285:2:1250
-6286:2:1255
-6287:2:1256
-6288:0:4365
-6289:3:3758
-6290:0:4365
-6291:2:1268
-6292:0:4365
-6293:3:3757
-6294:0:4365
-6295:2:1270
-6296:0:4365
-6297:3:3758
-6298:0:4365
-6299:2:1271
-6300:2:1275
-6301:2:1276
-6302:2:1284
-6303:2:1285
-6304:2:1289
-6305:2:1290
-6306:2:1284
-6307:2:1285
-6308:2:1289
-6309:2:1290
-6310:2:1298
-6311:2:1303
-6312:2:1307
-6313:2:1308
-6314:2:1315
-6315:2:1316
-6316:2:1327
-6317:2:1328
-6318:2:1329
-6319:2:1327
-6320:2:1328
-6321:2:1329
-6322:2:1340
-6323:2:1345
-6324:2:1346
-6325:0:4365
-6326:2:1358
-6327:0:4365
-6328:2:1454
-6329:0:4365
-6330:3:3757
-6331:0:4365
-6332:2:1455
-6333:0:4365
-6334:3:3758
-6335:0:4365
-6336:2:1652
-6337:0:4365
-6338:2:1653
-6339:0:4365
-6340:2:1657
-6341:0:4365
-6342:2:1660
-6343:0:4365
-6344:3:3757
-6345:0:4365
-6346:2:1665
-6347:2:1669
-6348:2:1670
-6349:2:1678
-6350:2:1679
-6351:2:1683
-6352:2:1684
-6353:2:1678
-6354:2:1679
-6355:2:1680
-6356:2:1692
-6357:2:1697
-6358:2:1701
-6359:2:1702
-6360:2:1709
-6361:2:1710
-6362:2:1721
-6363:2:1722
-6364:2:1723
-6365:2:1721
-6366:2:1722
-6367:2:1723
-6368:2:1734
-6369:2:1739
-6370:2:1740
-6371:0:4365
-6372:3:3758
-6373:0:4365
-6374:2:1752
-6375:0:4365
-6376:3:3757
-6377:0:4365
-6378:2:1754
-6379:0:4365
-6380:3:3758
-6381:0:4365
-6382:2:1755
-6383:2:1759
-6384:2:1760
-6385:2:1768
-6386:2:1769
-6387:2:1773
-6388:2:1774
-6389:2:1768
-6390:2:1769
-6391:2:1773
-6392:2:1774
-6393:2:1782
-6394:2:1787
-6395:2:1791
-6396:2:1792
-6397:2:1799
-6398:2:1800
-6399:2:1811
-6400:2:1812
-6401:2:1813
-6402:2:1811
-6403:2:1812
-6404:2:1813
-6405:2:1824
-6406:2:1829
-6407:2:1830
-6408:0:4365
-6409:2:1842
-6410:0:4365
-6411:3:3757
-6412:0:4365
-6413:2:1844
-6414:0:4365
-6415:3:3758
-6416:0:4365
-6417:2:1845
-6418:2:1849
-6419:2:1850
-6420:2:1858
-6421:2:1859
-6422:2:1863
-6423:2:1864
-6424:2:1858
-6425:2:1859
-6426:2:1863
-6427:2:1864
-6428:2:1872
-6429:2:1877
-6430:2:1881
-6431:2:1882
-6432:2:1889
-6433:2:1890
-6434:2:1901
-6435:2:1902
-6436:2:1903
-6437:2:1901
-6438:2:1902
-6439:2:1903
-6440:2:1914
-6441:2:1919
-6442:2:1920
-6443:0:4365
-6444:2:1932
-6445:0:4365
-6446:3:3757
-6447:0:4365
-6448:2:1934
-6449:0:4365
-6450:3:3758
-6451:0:4365
-6452:2:1935
-6453:0:4365
-6454:2:1936
-6455:0:4365
-6456:2:2129
-6457:0:4365
-6458:2:2130
-6459:0:4365
-6460:2:2134
-6461:0:4365
-6462:3:3757
-6463:0:4365
-6464:2:2136
-6465:0:4365
-6466:3:3758
-6467:0:4365
-6468:2:2137
-6469:2:2141
-6470:2:2142
-6471:2:2150
-6472:2:2151
-6473:2:2155
-6474:2:2156
-6475:2:2150
-6476:2:2151
-6477:2:2155
-6478:2:2156
-6479:2:2164
-6480:2:2169
-6481:2:2173
-6482:2:2174
-6483:2:2181
-6484:2:2182
-6485:2:2193
-6486:2:2194
-6487:2:2195
-6488:2:2193
-6489:2:2194
-6490:2:2195
-6491:2:2206
-6492:2:2211
-6493:2:2212
-6494:0:4365
-6495:2:2224
-6496:0:4365
-6497:3:3757
-6498:0:4365
-6499:2:2226
-6500:0:4365
-6501:3:3758
-6502:0:4365
-6503:2:1936
-6504:0:4365
-6505:2:2129
-6506:0:4365
-6507:2:2130
-6508:0:4365
-6509:2:2134
-6510:0:4365
-6511:3:3757
-6512:0:4365
-6513:2:2136
-6514:0:4365
-6515:3:3758
-6516:0:4365
-6517:2:2137
-6518:2:2141
-6519:2:2142
-6520:2:2150
-6521:2:2151
-6522:2:2155
-6523:2:2156
-6524:2:2150
-6525:2:2151
-6526:2:2152
-6527:2:2164
-6528:2:2169
-6529:2:2173
-6530:2:2174
-6531:2:2181
-6532:2:2182
-6533:2:2193
-6534:2:2194
-6535:2:2195
-6536:2:2193
-6537:2:2194
-6538:2:2195
-6539:2:2206
-6540:2:2211
-6541:2:2212
-6542:0:4365
-6543:2:2224
-6544:0:4365
-6545:3:3757
-6546:0:4365
-6547:2:2226
-6548:0:4365
-6549:3:3758
-6550:0:4365
-6551:2:2230
-6552:0:4365
-6553:3:3757
-6554:0:4365
-6555:2:2235
-6556:2:2239
-6557:2:2240
-6558:2:2248
-6559:2:2249
-6560:2:2253
-6561:2:2254
-6562:2:2248
-6563:2:2249
-6564:2:2250
-6565:2:2262
-6566:2:2267
-6567:2:2271
-6568:2:2272
-6569:2:2279
-6570:2:2280
-6571:2:2291
-6572:2:2292
-6573:2:2293
-6574:2:2291
-6575:2:2292
-6576:2:2293
-6577:2:2304
-6578:2:2309
-6579:2:2310
-6580:0:4365
-6581:3:3758
-6582:0:4365
-6583:2:2322
-6584:0:4365
-6585:2:1169
-6586:0:4365
-6587:3:3757
-6588:0:4365
-6589:2:1170
-6590:0:4365
-6591:3:3758
-6592:0:4365
-6593:3:3759
-6594:0:4365
-6595:3:3972
-6596:0:4365
-6597:3:4077
-6598:0:4365
-6599:3:4078
-6600:0:4365
-6601:3:4082
-6602:0:4365
-6603:3:4088
-6604:0:4365
-6605:3:4092
-6606:3:4093
-6607:3:4097
-6608:3:4101
-6609:3:4102
-6610:3:4097
-6611:3:4101
-6612:3:4102
-6613:3:4106
-6614:3:4114
-6615:3:4115
-6616:3:4120
-6617:3:4127
-6618:3:4128
-6619:3:4127
-6620:3:4128
-6621:3:4135
-6622:3:4140
-6623:0:4365
-6624:3:4151
-6625:0:4365
-6626:3:4155
-6627:3:4156
-6628:3:4160
-6629:3:4164
-6630:3:4165
-6631:3:4160
-6632:3:4164
-6633:3:4165
-6634:3:4169
-6635:3:4177
-6636:3:4178
-6637:3:4183
-6638:3:4190
-6639:3:4191
-6640:3:4190
-6641:3:4191
-6642:3:4198
-6643:3:4203
-6644:0:4365
-6645:3:4151
-6646:0:4365
-6647:3:4155
-6648:3:4156
-6649:3:4160
-6650:3:4164
-6651:3:4165
-6652:3:4160
-6653:3:4164
-6654:3:4165
-6655:3:4169
-6656:3:4177
-6657:3:4178
-6658:3:4183
-6659:3:4190
-6660:3:4191
-6661:3:4190
-6662:3:4191
-6663:3:4198
-6664:3:4203
-6665:0:4365
-6666:3:4214
-6667:0:4365
-6668:3:4222
-6669:3:4223
-6670:3:4227
-6671:3:4231
-6672:3:4232
-6673:3:4227
-6674:3:4231
-6675:3:4232
-6676:3:4236
-6677:3:4244
-6678:3:4245
-6679:3:4250
-6680:3:4257
-6681:3:4258
-6682:3:4257
-6683:3:4258
-6684:3:4265
-6685:3:4270
-6686:0:4365
-6687:3:4285
-6688:0:4365
-6689:3:4286
-6690:0:4365
-6691:2:1173
-6692:0:4365
-6693:3:4287
-6694:0:4365
-6695:2:1179
-6696:0:4365
-6697:2:1180
-6698:0:4365
-6699:3:4286
-6700:0:4365
-6701:2:1181
-6702:2:1185
-6703:2:1186
-6704:2:1194
-6705:2:1195
-6706:2:1199
-6707:2:1200
-6708:2:1194
-6709:2:1195
-6710:2:1199
-6711:2:1200
-6712:2:1208
-6713:2:1213
-6714:2:1217
-6715:2:1218
-6716:2:1225
-6717:2:1226
-6718:2:1237
-6719:2:1238
-6720:2:1239
-6721:2:1237
-6722:2:1238
-6723:2:1239
-6724:2:1250
-6725:2:1255
-6726:2:1256
-6727:0:4365
-6728:3:4287
-6729:0:4365
-6730:2:1268
-6731:0:4365
-6732:3:4286
-6733:0:4365
-6734:2:1270
-6735:0:4365
-6736:3:4287
-6737:0:4365
-6738:2:1271
-6739:2:1275
-6740:2:1276
-6741:2:1284
-6742:2:1285
-6743:2:1289
-6744:2:1290
-6745:2:1284
-6746:2:1285
-6747:2:1289
-6748:2:1290
-6749:2:1298
-6750:2:1303
-6751:2:1307
-6752:2:1308
-6753:2:1315
-6754:2:1316
-6755:2:1327
-6756:2:1328
-6757:2:1329
-6758:2:1327
-6759:2:1328
-6760:2:1329
-6761:2:1340
-6762:2:1345
-6763:2:1346
-6764:0:4365
-6765:2:1358
-6766:0:4365
-6767:2:1360
-6768:0:4365
-6769:3:4286
-6770:0:4365
-6771:2:1361
-6772:0:4365
-6773:3:4287
-6774:0:4365
-6775:2:1362
-6776:2:1366
-6777:2:1367
-6778:2:1375
-6779:2:1376
-6780:2:1380
-6781:2:1381
-6782:2:1375
-6783:2:1376
-6784:2:1380
-6785:2:1381
-6786:2:1389
-6787:2:1394
-6788:2:1398
-6789:2:1399
-6790:2:1406
-6791:2:1407
-6792:2:1418
-6793:2:1419
-6794:2:1420
-6795:2:1418
-6796:2:1419
-6797:2:1420
-6798:2:1431
-6799:2:1436
-6800:2:1437
-6801:0:4365
-6802:2:1449
-6803:0:4365
-6804:3:4286
-6805:0:4365
-6806:2:1451
-6807:0:4365
-6808:3:4287
-6809:0:4365
-6810:2:1652
-6811:0:4365
-6812:2:1653
-6813:0:4365
-6814:2:1657
-6815:0:4365
-6816:2:1180
-6817:0:4365
-6818:3:4286
-6819:0:4365
-6820:2:1181
-6821:2:1185
-6822:2:1186
-6823:2:1194
-6824:2:1195
-6825:2:1199
-6826:2:1200
-6827:2:1194
-6828:2:1195
-6829:2:1196
-6830:2:1208
-6831:2:1213
-6832:2:1217
-6833:2:1218
-6834:2:1225
-6835:2:1226
-6836:2:1237
-6837:2:1238
-6838:2:1239
-6839:2:1237
-6840:2:1238
-6841:2:1239
-6842:2:1250
-6843:2:1255
-6844:2:1256
-6845:0:4365
-6846:3:4287
-6847:0:4365
-6848:2:1268
-6849:0:4365
-6850:3:4286
-6851:0:4365
-6852:2:1270
-6853:0:4365
-6854:3:4287
-6855:0:4365
-6856:2:1271
-6857:2:1275
-6858:2:1276
-6859:2:1284
-6860:2:1285
-6861:2:1289
-6862:2:1290
-6863:2:1284
-6864:2:1285
-6865:2:1289
-6866:2:1290
-6867:2:1298
-6868:2:1303
-6869:2:1307
-6870:2:1308
-6871:2:1315
-6872:2:1316
-6873:2:1327
-6874:2:1328
-6875:2:1329
-6876:2:1327
-6877:2:1328
-6878:2:1329
-6879:2:1340
-6880:2:1345
-6881:2:1346
-6882:0:4365
-6883:2:1358
-6884:0:4365
-6885:2:1454
-6886:0:4365
-6887:3:4286
-6888:0:4365
-6889:2:1455
-6890:0:4365
-6891:3:4287
-6892:0:4365
-6893:2:1652
-6894:0:4365
-6895:2:1653
-6896:0:4365
-6897:2:1657
-6898:0:4365
-6899:2:1660
-6900:0:4365
-6901:3:4286
-6902:0:4365
-6903:2:1665
-6904:2:1669
-6905:2:1670
-6906:2:1678
-6907:2:1679
-6908:2:1683
-6909:2:1684
-6910:2:1678
-6911:2:1679
-6912:2:1680
-6913:2:1692
-6914:2:1697
-6915:2:1701
-6916:2:1702
-6917:2:1709
-6918:2:1710
-6919:2:1721
-6920:2:1722
-6921:2:1723
-6922:2:1721
-6923:2:1722
-6924:2:1723
-6925:2:1734
-6926:2:1739
-6927:2:1740
-6928:0:4365
-6929:3:4287
-6930:0:4365
-6931:2:1752
-6932:0:4365
-6933:3:4286
-6934:0:4365
-6935:2:1754
-6936:0:4365
-6937:3:4287
-6938:0:4365
-6939:2:1755
-6940:2:1759
-6941:2:1760
-6942:2:1768
-6943:2:1769
-6944:2:1773
-6945:2:1774
-6946:2:1768
-6947:2:1769
-6948:2:1773
-6949:2:1774
-6950:2:1782
-6951:2:1787
-6952:2:1791
-6953:2:1792
-6954:2:1799
-6955:2:1800
-6956:2:1811
-6957:2:1812
-6958:2:1813
-6959:2:1811
-6960:2:1812
-6961:2:1813
-6962:2:1824
-6963:2:1829
-6964:2:1830
-6965:0:4365
-6966:2:1842
-6967:0:4365
-6968:3:4286
-6969:0:4365
-6970:2:1844
-6971:0:4365
-6972:3:4287
-6973:0:4365
-6974:2:1845
-6975:2:1849
-6976:2:1850
-6977:2:1858
-6978:2:1859
-6979:2:1863
-6980:2:1864
-6981:2:1858
-6982:2:1859
-6983:2:1863
-6984:2:1864
-6985:2:1872
-6986:2:1877
-6987:2:1881
-6988:2:1882
-6989:2:1889
-6990:2:1890
-6991:2:1901
-6992:2:1902
-6993:2:1903
-6994:2:1901
-6995:2:1902
-6996:2:1903
-6997:2:1914
-6998:2:1919
-6999:2:1920
-7000:0:4365
-7001:2:1932
-7002:0:4365
-7003:3:4286
-7004:0:4365
-7005:2:1934
-7006:0:4365
-7007:3:4287
-7008:0:4365
-7009:2:1935
-7010:0:4365
-7011:2:1936
-7012:0:4365
-7013:2:2129
-7014:0:4365
-7015:2:2130
-7016:0:4365
-7017:2:2134
-7018:0:4365
-7019:3:4286
-7020:0:4365
-7021:2:2136
-7022:0:4365
-7023:3:4287
-7024:0:4365
-7025:2:2137
-7026:2:2141
-7027:2:2142
-7028:2:2150
-7029:2:2151
-7030:2:2155
-7031:2:2156
-7032:2:2150
-7033:2:2151
-7034:2:2155
-7035:2:2156
-7036:2:2164
-7037:2:2169
-7038:2:2173
-7039:2:2174
-7040:2:2181
-7041:2:2182
-7042:2:2193
-7043:2:2194
-7044:2:2195
-7045:2:2193
-7046:2:2194
-7047:2:2195
-7048:2:2206
-7049:2:2211
-7050:2:2212
-7051:0:4365
-7052:2:2224
-7053:0:4365
-7054:3:4286
-7055:0:4365
-7056:2:2226
-7057:0:4365
-7058:3:4287
-7059:0:4365
-7060:2:1936
-7061:0:4365
-7062:2:2129
-7063:0:4365
-7064:2:2130
-7065:0:4365
-7066:2:2134
-7067:0:4365
-7068:3:4286
-7069:0:4365
-7070:2:2136
-7071:0:4365
-7072:3:4287
-7073:0:4365
-7074:2:2137
-7075:2:2141
-7076:2:2142
-7077:2:2150
-7078:2:2151
-7079:2:2155
-7080:2:2156
-7081:2:2150
-7082:2:2151
-7083:2:2152
-7084:2:2164
-7085:2:2169
-7086:2:2173
-7087:2:2174
-7088:2:2181
-7089:2:2182
-7090:2:2193
-7091:2:2194
-7092:2:2195
-7093:2:2193
-7094:2:2194
-7095:2:2195
-7096:2:2206
-7097:2:2211
-7098:2:2212
-7099:0:4365
-7100:2:2224
-7101:0:4365
-7102:3:4286
-7103:0:4365
-7104:2:2226
-7105:0:4365
-7106:3:4287
-7107:0:4365
-7108:2:2230
-7109:0:4365
-7110:3:4286
-7111:0:4365
-7112:2:2235
-7113:2:2239
-7114:2:2240
-7115:2:2248
-7116:2:2249
-7117:2:2253
-7118:2:2254
-7119:2:2248
-7120:2:2249
-7121:2:2250
-7122:2:2262
-7123:2:2267
-7124:2:2271
-7125:2:2272
-7126:2:2279
-7127:2:2280
-7128:2:2291
-7129:2:2292
-7130:2:2293
-7131:2:2291
-7132:2:2292
-7133:2:2293
-7134:2:2304
-7135:2:2309
-7136:2:2310
-7137:0:4365
-7138:3:4287
-7139:0:4365
-7140:2:2322
-7141:0:4365
-7142:2:1169
-7143:0:4365
-7144:3:4286
-7145:0:4365
-7146:2:1170
-7147:0:4365
-7148:3:4287
-7149:0:4365
-7150:3:4288
-7151:0:4365
-7152:3:4294
-7153:0:4365
-7154:3:4295
-7155:0:4365
-7156:3:2338
-7157:0:4365
-7158:3:2339
-7159:3:2343
-7160:3:2344
-7161:3:2352
-7162:3:2353
-7163:3:2357
-7164:3:2358
-7165:3:2352
-7166:3:2353
-7167:3:2357
-7168:3:2358
-7169:3:2366
-7170:3:2371
-7171:3:2375
-7172:3:2376
-7173:3:2383
-7174:3:2384
-7175:3:2395
-7176:3:2396
-7177:3:2397
-7178:3:2395
-7179:3:2396
-7180:3:2397
-7181:3:2408
-7182:3:2413
-7183:3:2414
-7184:0:4365
-7185:3:2426
-7186:0:4365
-7187:3:2427
-7188:0:4365
-7189:2:1173
-7190:0:4365
-7191:3:2428
-7192:0:4365
-7193:2:1179
-7194:0:4365
-7195:2:1180
-7196:0:4365
-7197:3:2427
-7198:0:4365
-7199:2:1181
-7200:2:1185
-7201:2:1186
-7202:2:1194
-7203:2:1195
-7204:2:1199
-7205:2:1200
-7206:2:1194
-7207:2:1195
-7208:2:1199
-7209:2:1200
-7210:2:1208
-7211:2:1213
-7212:2:1217
-7213:2:1218
-7214:2:1225
-7215:2:1226
-7216:2:1237
-7217:2:1238
-7218:2:1239
-7219:2:1237
-7220:2:1238
-7221:2:1239
-7222:2:1250
-7223:2:1255
-7224:2:1256
-7225:0:4365
-7226:3:2428
-7227:0:4365
-7228:2:1268
-7229:0:4365
-7230:3:2427
-7231:0:4365
-7232:2:1270
-7233:0:4365
-7234:3:2428
-7235:0:4365
-7236:2:1271
-7237:2:1275
-7238:2:1276
-7239:2:1284
-7240:2:1285
-7241:2:1289
-7242:2:1290
-7243:2:1284
-7244:2:1285
-7245:2:1289
-7246:2:1290
-7247:2:1298
-7248:2:1303
-7249:2:1307
-7250:2:1308
-7251:2:1315
-7252:2:1316
-7253:2:1327
-7254:2:1328
-7255:2:1329
-7256:2:1327
-7257:2:1328
-7258:2:1329
-7259:2:1340
-7260:2:1345
-7261:2:1346
-7262:0:4365
-7263:2:1358
-7264:0:4365
-7265:2:1360
-7266:0:4365
-7267:3:2427
-7268:0:4365
-7269:2:1361
-7270:0:4365
-7271:3:2428
-7272:0:4365
-7273:2:1362
-7274:2:1366
-7275:2:1367
-7276:2:1375
-7277:2:1376
-7278:2:1380
-7279:2:1381
-7280:2:1375
-7281:2:1376
-7282:2:1380
-7283:2:1381
-7284:2:1389
-7285:2:1394
-7286:2:1398
-7287:2:1399
-7288:2:1406
-7289:2:1407
-7290:2:1418
-7291:2:1419
-7292:2:1420
-7293:2:1418
-7294:2:1419
-7295:2:1420
-7296:2:1431
-7297:2:1436
-7298:2:1437
-7299:0:4365
-7300:2:1449
-7301:0:4365
-7302:3:2427
-7303:0:4365
-7304:2:1451
-7305:0:4365
-7306:3:2428
-7307:0:4365
-7308:2:1652
-7309:0:4365
-7310:2:1653
-7311:0:4365
-7312:2:1657
-7313:0:4365
-7314:2:1180
-7315:0:4365
-7316:3:2427
-7317:0:4365
-7318:2:1181
-7319:2:1185
-7320:2:1186
-7321:2:1194
-7322:2:1195
-7323:2:1199
-7324:2:1200
-7325:2:1194
-7326:2:1195
-7327:2:1196
-7328:2:1208
-7329:2:1213
-7330:2:1217
-7331:2:1218
-7332:2:1225
-7333:2:1226
-7334:2:1237
-7335:2:1238
-7336:2:1239
-7337:2:1237
-7338:2:1238
-7339:2:1239
-7340:2:1250
-7341:2:1255
-7342:2:1256
-7343:0:4365
-7344:3:2428
-7345:0:4365
-7346:2:1268
-7347:0:4365
-7348:3:2427
-7349:0:4365
-7350:2:1270
-7351:0:4365
-7352:3:2428
-7353:0:4365
-7354:2:1271
-7355:2:1275
-7356:2:1276
-7357:2:1284
-7358:2:1285
-7359:2:1289
-7360:2:1290
-7361:2:1284
-7362:2:1285
-7363:2:1289
-7364:2:1290
-7365:2:1298
-7366:2:1303
-7367:2:1307
-7368:2:1308
-7369:2:1315
-7370:2:1316
-7371:2:1327
-7372:2:1328
-7373:2:1329
-7374:2:1327
-7375:2:1328
-7376:2:1329
-7377:2:1340
-7378:2:1345
-7379:2:1346
-7380:0:4365
-7381:2:1358
-7382:0:4365
-7383:2:1454
-7384:0:4365
-7385:3:2427
-7386:0:4365
-7387:2:1455
-7388:0:4365
-7389:3:2428
-7390:0:4365
-7391:2:1652
-7392:0:4365
-7393:2:1653
-7394:0:4365
-7395:2:1657
-7396:0:4365
-7397:2:1660
-7398:0:4365
-7399:3:2427
-7400:0:4365
-7401:2:1665
-7402:2:1669
-7403:2:1670
-7404:2:1678
-7405:2:1679
-7406:2:1683
-7407:2:1684
-7408:2:1678
-7409:2:1679
-7410:2:1680
-7411:2:1692
-7412:2:1697
-7413:2:1701
-7414:2:1702
-7415:2:1709
-7416:2:1710
-7417:2:1721
-7418:2:1722
-7419:2:1723
-7420:2:1721
-7421:2:1722
-7422:2:1723
-7423:2:1734
-7424:2:1739
-7425:2:1740
-7426:0:4365
-7427:3:2428
-7428:0:4365
-7429:2:1752
-7430:0:4365
-7431:3:2427
-7432:0:4365
-7433:2:1754
-7434:0:4365
-7435:3:2428
-7436:0:4365
-7437:2:1755
-7438:2:1759
-7439:2:1760
-7440:2:1768
-7441:2:1769
-7442:2:1773
-7443:2:1774
-7444:2:1768
-7445:2:1769
-7446:2:1773
-7447:2:1774
-7448:2:1782
-7449:2:1787
-7450:2:1791
-7451:2:1792
-7452:2:1799
-7453:2:1800
-7454:2:1811
-7455:2:1812
-7456:2:1813
-7457:2:1811
-7458:2:1812
-7459:2:1813
-7460:2:1824
-7461:2:1829
-7462:2:1830
-7463:0:4365
-7464:2:1842
-7465:0:4365
-7466:3:2427
-7467:0:4365
-7468:2:1844
-7469:0:4365
-7470:3:2428
-7471:0:4365
-7472:2:1845
-7473:2:1849
-7474:2:1850
-7475:2:1858
-7476:2:1859
-7477:2:1863
-7478:2:1864
-7479:2:1858
-7480:2:1859
-7481:2:1863
-7482:2:1864
-7483:2:1872
-7484:2:1877
-7485:2:1881
-7486:2:1882
-7487:2:1889
-7488:2:1890
-7489:2:1901
-7490:2:1902
-7491:2:1903
-7492:2:1901
-7493:2:1902
-7494:2:1903
-7495:2:1914
-7496:2:1919
-7497:2:1920
-7498:0:4365
-7499:2:1932
-7500:0:4365
-7501:3:2427
-7502:0:4365
-7503:2:1934
-7504:0:4365
-7505:3:2428
-7506:0:4365
-7507:2:1935
-7508:0:4365
-7509:2:1936
-7510:0:4365
-7511:2:2129
-7512:0:4365
-7513:2:2130
-7514:0:4365
-7515:2:2134
-7516:0:4365
-7517:3:2427
-7518:0:4365
-7519:2:2136
-7520:0:4365
-7521:3:2428
-7522:0:4365
-7523:2:2137
-7524:2:2141
-7525:2:2142
-7526:2:2150
-7527:2:2151
-7528:2:2155
-7529:2:2156
-7530:2:2150
-7531:2:2151
-7532:2:2155
-7533:2:2156
-7534:2:2164
-7535:2:2169
-7536:2:2173
-7537:2:2174
-7538:2:2181
-7539:2:2182
-7540:2:2193
-7541:2:2194
-7542:2:2195
-7543:2:2193
-7544:2:2194
-7545:2:2195
-7546:2:2206
-7547:2:2211
-7548:2:2212
-7549:0:4365
-7550:2:2224
-7551:0:4365
-7552:3:2427
-7553:0:4365
-7554:2:2226
-7555:0:4365
-7556:3:2428
-7557:0:4365
-7558:2:1936
-7559:0:4365
-7560:2:2129
-7561:0:4365
-7562:2:2130
-7563:0:4365
-7564:2:2134
-7565:0:4365
-7566:3:2427
-7567:0:4365
-7568:2:2136
-7569:0:4365
-7570:3:2428
-7571:0:4365
-7572:2:2137
-7573:2:2141
-7574:2:2142
-7575:2:2150
-7576:2:2151
-7577:2:2155
-7578:2:2156
-7579:2:2150
-7580:2:2151
-7581:2:2152
-7582:2:2164
-7583:2:2169
-7584:2:2173
-7585:2:2174
-7586:2:2181
-7587:2:2182
-7588:2:2193
-7589:2:2194
-7590:2:2195
-7591:2:2193
-7592:2:2194
-7593:2:2195
-7594:2:2206
-7595:2:2211
-7596:2:2212
-7597:0:4365
-7598:2:2224
-7599:0:4365
-7600:3:2427
-7601:0:4365
-7602:2:2226
-7603:0:4365
-7604:3:2428
-7605:0:4365
-7606:2:2230
-7607:0:4365
-7608:3:2427
-7609:0:4365
-7610:2:2235
-7611:2:2239
-7612:2:2240
-7613:2:2248
-7614:2:2249
-7615:2:2253
-7616:2:2254
-7617:2:2248
-7618:2:2249
-7619:2:2250
-7620:2:2262
-7621:2:2267
-7622:2:2271
-7623:2:2272
-7624:2:2279
-7625:2:2280
-7626:2:2291
-7627:2:2292
-7628:2:2293
-7629:2:2291
-7630:2:2292
-7631:2:2293
-7632:2:2304
-7633:2:2309
-7634:2:2310
-7635:0:4365
-7636:3:2428
-7637:0:4365
-7638:2:2322
-7639:0:4365
-7640:2:1169
-7641:0:4365
-7642:3:2427
-7643:0:4365
-7644:2:1170
-7645:0:4365
-7646:3:2428
-7647:0:4365
-7648:3:2429
-7649:0:4365
-7650:3:2435
-7651:3:2436
-7652:0:4365
-7653:3:2440
-7654:3:2444
-7655:3:2445
-7656:3:2453
-7657:3:2454
-7658:3:2458
-7659:3:2459
-7660:3:2453
-7661:3:2454
-7662:3:2458
-7663:3:2459
-7664:3:2467
-7665:3:2472
-7666:3:2473
-7667:3:2484
-7668:3:2485
-7669:3:2496
-7670:3:2497
-7671:3:2498
-7672:3:2496
-7673:3:2497
-7674:3:2498
-7675:3:2509
-7676:3:2514
-7677:3:2515
-7678:0:4365
-7679:3:2527
-7680:0:4365
-7681:3:2528
-7682:0:4365
-7683:2:1173
-7684:0:4365
-7685:3:2529
-7686:0:4365
-7687:2:1179
-7688:0:4365
-7689:2:1180
-7690:0:4365
-7691:3:2528
-7692:0:4365
-7693:2:1181
-7694:2:1185
-7695:2:1186
-7696:2:1194
-7697:2:1195
-7698:2:1199
-7699:2:1200
-7700:2:1194
-7701:2:1195
-7702:2:1199
-7703:2:1200
-7704:2:1208
-7705:2:1213
-7706:2:1217
-7707:2:1218
-7708:2:1225
-7709:2:1226
-7710:2:1237
-7711:2:1238
-7712:2:1239
-7713:2:1237
-7714:2:1238
-7715:2:1239
-7716:2:1250
-7717:2:1255
-7718:2:1256
-7719:0:4365
-7720:3:2529
-7721:0:4365
-7722:2:1268
-7723:0:4365
-7724:3:2528
-7725:0:4365
-7726:2:1270
-7727:0:4365
-7728:3:2529
-7729:0:4365
-7730:2:1271
-7731:2:1275
-7732:2:1276
-7733:2:1284
-7734:2:1285
-7735:2:1289
-7736:2:1290
-7737:2:1284
-7738:2:1285
-7739:2:1289
-7740:2:1290
-7741:2:1298
-7742:2:1303
-7743:2:1307
-7744:2:1308
-7745:2:1315
-7746:2:1316
-7747:2:1327
-7748:2:1328
-7749:2:1329
-7750:2:1327
-7751:2:1328
-7752:2:1329
-7753:2:1340
-7754:2:1345
-7755:2:1346
-7756:0:4365
-7757:2:1358
-7758:0:4365
-7759:2:1360
-7760:0:4365
-7761:3:2528
-7762:0:4365
-7763:2:1361
-7764:0:4365
-7765:3:2529
-7766:0:4365
-7767:2:1362
-7768:2:1366
-7769:2:1367
-7770:2:1375
-7771:2:1376
-7772:2:1380
-7773:2:1381
-7774:2:1375
-7775:2:1376
-7776:2:1380
-7777:2:1381
-7778:2:1389
-7779:2:1394
-7780:2:1398
-7781:2:1399
-7782:2:1406
-7783:2:1407
-7784:2:1418
-7785:2:1419
-7786:2:1420
-7787:2:1418
-7788:2:1419
-7789:2:1420
-7790:2:1431
-7791:2:1436
-7792:2:1437
-7793:0:4365
-7794:2:1449
-7795:0:4365
-7796:3:2528
-7797:0:4365
-7798:2:1451
-7799:0:4365
-7800:3:2529
-7801:0:4365
-7802:2:1652
-7803:0:4365
-7804:2:1653
-7805:0:4365
-7806:2:1657
-7807:0:4365
-7808:2:1180
-7809:0:4365
-7810:3:2528
-7811:0:4365
-7812:2:1181
-7813:2:1185
-7814:2:1186
-7815:2:1194
-7816:2:1195
-7817:2:1199
-7818:2:1200
-7819:2:1194
-7820:2:1195
-7821:2:1196
-7822:2:1208
-7823:2:1213
-7824:2:1217
-7825:2:1218
-7826:2:1225
-7827:2:1226
-7828:2:1237
-7829:2:1238
-7830:2:1239
-7831:2:1237
-7832:2:1238
-7833:2:1239
-7834:2:1250
-7835:2:1255
-7836:2:1256
-7837:0:4365
-7838:3:2529
-7839:0:4365
-7840:2:1268
-7841:0:4365
-7842:3:2528
-7843:0:4365
-7844:2:1270
-7845:0:4365
-7846:3:2529
-7847:0:4365
-7848:2:1271
-7849:2:1275
-7850:2:1276
-7851:2:1284
-7852:2:1285
-7853:2:1289
-7854:2:1290
-7855:2:1284
-7856:2:1285
-7857:2:1289
-7858:2:1290
-7859:2:1298
-7860:2:1303
-7861:2:1307
-7862:2:1308
-7863:2:1315
-7864:2:1316
-7865:2:1327
-7866:2:1328
-7867:2:1329
-7868:2:1327
-7869:2:1328
-7870:2:1329
-7871:2:1340
-7872:2:1345
-7873:2:1346
-7874:0:4365
-7875:2:1358
-7876:0:4365
-7877:2:1454
-7878:0:4365
-7879:3:2528
-7880:0:4365
-7881:2:1455
-7882:0:4365
-7883:3:2529
-7884:0:4365
-7885:2:1652
-7886:0:4365
-7887:2:1653
-7888:0:4365
-7889:2:1657
-7890:0:4365
-7891:2:1660
-7892:0:4365
-7893:3:2528
-7894:0:4365
-7895:2:1665
-7896:2:1669
-7897:2:1670
-7898:2:1678
-7899:2:1679
-7900:2:1683
-7901:2:1684
-7902:2:1678
-7903:2:1679
-7904:2:1680
-7905:2:1692
-7906:2:1697
-7907:2:1701
-7908:2:1702
-7909:2:1709
-7910:2:1710
-7911:2:1721
-7912:2:1722
-7913:2:1723
-7914:2:1721
-7915:2:1722
-7916:2:1723
-7917:2:1734
-7918:2:1739
-7919:2:1740
-7920:0:4365
-7921:3:2529
-7922:0:4365
-7923:2:1752
-7924:0:4365
-7925:3:2528
-7926:0:4365
-7927:2:1754
-7928:0:4365
-7929:3:2529
-7930:0:4365
-7931:2:1755
-7932:2:1759
-7933:2:1760
-7934:2:1768
-7935:2:1769
-7936:2:1773
-7937:2:1774
-7938:2:1768
-7939:2:1769
-7940:2:1773
-7941:2:1774
-7942:2:1782
-7943:2:1787
-7944:2:1791
-7945:2:1792
-7946:2:1799
-7947:2:1800
-7948:2:1811
-7949:2:1812
-7950:2:1813
-7951:2:1811
-7952:2:1812
-7953:2:1813
-7954:2:1824
-7955:2:1829
-7956:2:1830
-7957:0:4365
-7958:2:1842
-7959:0:4365
-7960:3:2528
-7961:0:4365
-7962:2:1844
-7963:0:4365
-7964:3:2529
-7965:0:4365
-7966:2:1845
-7967:2:1849
-7968:2:1850
-7969:2:1858
-7970:2:1859
-7971:2:1863
-7972:2:1864
-7973:2:1858
-7974:2:1859
-7975:2:1863
-7976:2:1864
-7977:2:1872
-7978:2:1877
-7979:2:1881
-7980:2:1882
-7981:2:1889
-7982:2:1890
-7983:2:1901
-7984:2:1902
-7985:2:1903
-7986:2:1901
-7987:2:1902
-7988:2:1903
-7989:2:1914
-7990:2:1919
-7991:2:1920
-7992:0:4365
-7993:2:1932
-7994:0:4365
-7995:3:2528
-7996:0:4365
-7997:2:1934
-7998:0:4365
-7999:3:2529
-8000:0:4365
-8001:2:1935
-8002:0:4365
-8003:2:1936
-8004:0:4365
-8005:2:2129
-8006:0:4365
-8007:2:2130
-8008:0:4365
-8009:2:2134
-8010:0:4365
-8011:3:2528
-8012:0:4365
-8013:2:2136
-8014:0:4365
-8015:3:2529
-8016:0:4365
-8017:2:2137
-8018:2:2141
-8019:2:2142
-8020:2:2150
-8021:2:2151
-8022:2:2155
-8023:2:2156
-8024:2:2150
-8025:2:2151
-8026:2:2155
-8027:2:2156
-8028:2:2164
-8029:2:2169
-8030:2:2173
-8031:2:2174
-8032:2:2181
-8033:2:2182
-8034:2:2193
-8035:2:2194
-8036:2:2195
-8037:2:2193
-8038:2:2194
-8039:2:2195
-8040:2:2206
-8041:2:2211
-8042:2:2212
-8043:0:4365
-8044:2:2224
-8045:0:4365
-8046:3:2528
-8047:0:4365
-8048:2:2226
-8049:0:4365
-8050:3:2529
-8051:0:4365
-8052:2:1936
-8053:0:4365
-8054:2:2129
-8055:0:4365
-8056:2:2130
-8057:0:4365
-8058:2:2134
-8059:0:4365
-8060:3:2528
-8061:0:4365
-8062:2:2136
-8063:0:4365
-8064:3:2529
-8065:0:4365
-8066:2:2137
-8067:2:2141
-8068:2:2142
-8069:2:2150
-8070:2:2151
-8071:2:2155
-8072:2:2156
-8073:2:2150
-8074:2:2151
-8075:2:2152
-8076:2:2164
-8077:2:2169
-8078:2:2173
-8079:2:2174
-8080:2:2181
-8081:2:2182
-8082:2:2193
-8083:2:2194
-8084:2:2195
-8085:2:2193
-8086:2:2194
-8087:2:2195
-8088:2:2206
-8089:2:2211
-8090:2:2212
-8091:0:4365
-8092:2:2224
-8093:0:4365
-8094:3:2528
-8095:0:4365
-8096:2:2226
-8097:0:4365
-8098:3:2529
-8099:0:4365
-8100:2:2230
-8101:0:4365
-8102:3:2528
-8103:0:4365
-8104:2:2235
-8105:2:2239
-8106:2:2240
-8107:2:2248
-8108:2:2249
-8109:2:2253
-8110:2:2254
-8111:2:2248
-8112:2:2249
-8113:2:2250
-8114:2:2262
-8115:2:2267
-8116:2:2271
-8117:2:2272
-8118:2:2279
-8119:2:2280
-8120:2:2291
-8121:2:2292
-8122:2:2293
-8123:2:2291
-8124:2:2292
-8125:2:2293
-8126:2:2304
-8127:2:2309
-8128:2:2310
-8129:0:4365
-8130:3:2529
-8131:0:4365
-8132:2:2322
-8133:0:4365
-8134:2:1169
-8135:0:4365
-8136:3:2528
-8137:0:4365
-8138:2:1170
-8139:0:4365
-8140:3:2529
-8141:0:4365
-8142:3:2530
-8143:0:4365
-8144:3:2536
-8145:0:4365
-8146:3:2537
-8147:0:4365
-8148:3:2547
-8149:0:4365
-8150:3:2548
-8151:0:4365
-8152:3:2552
-8153:3:2553
-8154:3:2557
-8155:3:2561
-8156:3:2562
-8157:3:2557
-8158:3:2561
-8159:3:2562
-8160:3:2566
-8161:3:2574
-8162:3:2575
-8163:3:2580
-8164:3:2587
-8165:3:2588
-8166:3:2587
-8167:3:2588
-8168:3:2595
-8169:3:2600
-8170:0:4365
-8171:3:2611
-8172:0:4365
-8173:3:2615
-8174:3:2616
-8175:3:2620
-8176:3:2624
-8177:3:2625
-8178:3:2620
-8179:3:2624
-8180:3:2625
-8181:3:2629
-8182:3:2637
-8183:3:2638
-8184:3:2643
-8185:3:2650
-8186:3:2651
-8187:3:2650
-8188:3:2651
-8189:3:2658
-8190:3:2663
-8191:0:4365
-8192:3:2611
-8193:0:4365
-8194:3:2615
-8195:3:2616
-8196:3:2620
-8197:3:2624
-8198:3:2625
-8199:3:2620
-8200:3:2624
-8201:3:2625
-8202:3:2629
-8203:3:2637
-8204:3:2638
-8205:3:2643
-8206:3:2650
-8207:3:2651
-8208:3:2650
-8209:3:2651
-8210:3:2658
-8211:3:2663
-8212:0:4365
-8213:3:2674
-8214:0:4365
-8215:3:2682
-8216:3:2683
-8217:3:2687
-8218:3:2691
-8219:3:2692
-8220:3:2687
-8221:3:2691
-8222:3:2692
-8223:3:2696
-8224:3:2704
-8225:3:2705
-8226:3:2710
-8227:3:2717
-8228:3:2718
-8229:3:2717
-8230:3:2718
-8231:3:2725
-8232:3:2730
-8233:0:4365
-8234:3:2745
-8235:0:4365
-8236:3:2746
-8237:0:4365
-8238:2:1173
-8239:0:4365
-8240:3:2747
-8241:0:4365
-8242:2:1179
-8243:0:4365
-8244:2:1180
-8245:0:4365
-8246:3:2746
-8247:0:4365
-8248:2:1181
-8249:2:1185
-8250:2:1186
-8251:2:1194
-8252:2:1195
-8253:2:1199
-8254:2:1200
-8255:2:1194
-8256:2:1195
-8257:2:1199
-8258:2:1200
-8259:2:1208
-8260:2:1213
-8261:2:1217
-8262:2:1218
-8263:2:1225
-8264:2:1226
-8265:2:1237
-8266:2:1238
-8267:2:1239
-8268:2:1237
-8269:2:1238
-8270:2:1239
-8271:2:1250
-8272:2:1255
-8273:2:1256
-8274:0:4365
-8275:3:2747
-8276:0:4365
-8277:2:1268
-8278:0:4365
-8279:3:2746
-8280:0:4365
-8281:2:1270
-8282:0:4365
-8283:3:2747
-8284:0:4365
-8285:2:1271
-8286:2:1275
-8287:2:1276
-8288:2:1284
-8289:2:1285
-8290:2:1289
-8291:2:1290
-8292:2:1284
-8293:2:1285
-8294:2:1289
-8295:2:1290
-8296:2:1298
-8297:2:1303
-8298:2:1307
-8299:2:1308
-8300:2:1315
-8301:2:1316
-8302:2:1327
-8303:2:1328
-8304:2:1329
-8305:2:1327
-8306:2:1328
-8307:2:1329
-8308:2:1340
-8309:2:1345
-8310:2:1346
-8311:0:4365
-8312:2:1358
-8313:0:4365
-8314:2:1360
-8315:0:4365
-8316:3:2746
-8317:0:4365
-8318:2:1361
-8319:0:4365
-8320:3:2747
-8321:0:4365
-8322:2:1362
-8323:2:1366
-8324:2:1367
-8325:2:1375
-8326:2:1376
-8327:2:1380
-8328:2:1381
-8329:2:1375
-8330:2:1376
-8331:2:1380
-8332:2:1381
-8333:2:1389
-8334:2:1394
-8335:2:1398
-8336:2:1399
-8337:2:1406
-8338:2:1407
-8339:2:1418
-8340:2:1419
-8341:2:1420
-8342:2:1418
-8343:2:1419
-8344:2:1420
-8345:2:1431
-8346:2:1436
-8347:2:1437
-8348:0:4365
-8349:2:1449
-8350:0:4365
-8351:3:2746
-8352:0:4365
-8353:2:1451
-8354:0:4365
-8355:3:2747
-8356:0:4365
-8357:2:1652
-8358:0:4365
-8359:2:1653
-8360:0:4365
-8361:2:1657
-8362:0:4365
-8363:2:1180
-8364:0:4365
-8365:3:2746
-8366:0:4365
-8367:2:1181
-8368:2:1185
-8369:2:1186
-8370:2:1194
-8371:2:1195
-8372:2:1199
-8373:2:1200
-8374:2:1194
-8375:2:1195
-8376:2:1196
-8377:2:1208
-8378:2:1213
-8379:2:1217
-8380:2:1218
-8381:2:1225
-8382:2:1226
-8383:2:1237
-8384:2:1238
-8385:2:1239
-8386:2:1237
-8387:2:1238
-8388:2:1239
-8389:2:1250
-8390:2:1255
-8391:2:1256
-8392:0:4365
-8393:3:2747
-8394:0:4365
-8395:2:1268
-8396:0:4365
-8397:3:2746
-8398:0:4365
-8399:2:1270
-8400:0:4365
-8401:3:2747
-8402:0:4365
-8403:2:1271
-8404:2:1275
-8405:2:1276
-8406:2:1284
-8407:2:1285
-8408:2:1289
-8409:2:1290
-8410:2:1284
-8411:2:1285
-8412:2:1289
-8413:2:1290
-8414:2:1298
-8415:2:1303
-8416:2:1307
-8417:2:1308
-8418:2:1315
-8419:2:1316
-8420:2:1327
-8421:2:1328
-8422:2:1329
-8423:2:1327
-8424:2:1328
-8425:2:1329
-8426:2:1340
-8427:2:1345
-8428:2:1346
-8429:0:4365
-8430:2:1358
-8431:0:4365
-8432:2:1454
-8433:0:4365
-8434:3:2746
-8435:0:4365
-8436:2:1455
-8437:0:4365
-8438:3:2747
-8439:0:4365
-8440:2:1652
-8441:0:4365
-8442:2:1653
-8443:0:4365
-8444:2:1657
-8445:0:4365
-8446:2:1660
-8447:0:4365
-8448:3:2746
-8449:0:4365
-8450:2:1665
-8451:2:1669
-8452:2:1670
-8453:2:1678
-8454:2:1679
-8455:2:1683
-8456:2:1684
-8457:2:1678
-8458:2:1679
-8459:2:1680
-8460:2:1692
-8461:2:1697
-8462:2:1701
-8463:2:1702
-8464:2:1709
-8465:2:1710
-8466:2:1721
-8467:2:1722
-8468:2:1723
-8469:2:1721
-8470:2:1722
-8471:2:1723
-8472:2:1734
-8473:2:1739
-8474:2:1740
-8475:0:4365
-8476:3:2747
-8477:0:4365
-8478:2:1752
-8479:0:4365
-8480:3:2746
-8481:0:4365
-8482:2:1754
-8483:0:4365
-8484:3:2747
-8485:0:4365
-8486:2:1755
-8487:2:1759
-8488:2:1760
-8489:2:1768
-8490:2:1769
-8491:2:1773
-8492:2:1774
-8493:2:1768
-8494:2:1769
-8495:2:1773
-8496:2:1774
-8497:2:1782
-8498:2:1787
-8499:2:1791
-8500:2:1792
-8501:2:1799
-8502:2:1800
-8503:2:1811
-8504:2:1812
-8505:2:1813
-8506:2:1811
-8507:2:1812
-8508:2:1813
-8509:2:1824
-8510:2:1829
-8511:2:1830
-8512:0:4365
-8513:2:1842
-8514:0:4365
-8515:3:2746
-8516:0:4365
-8517:2:1844
-8518:0:4365
-8519:3:2747
-8520:0:4365
-8521:2:1845
-8522:2:1849
-8523:2:1850
-8524:2:1858
-8525:2:1859
-8526:2:1863
-8527:2:1864
-8528:2:1858
-8529:2:1859
-8530:2:1863
-8531:2:1864
-8532:2:1872
-8533:2:1877
-8534:2:1881
-8535:2:1882
-8536:2:1889
-8537:2:1890
-8538:2:1901
-8539:2:1902
-8540:2:1903
-8541:2:1901
-8542:2:1902
-8543:2:1903
-8544:2:1914
-8545:2:1919
-8546:2:1920
-8547:0:4365
-8548:2:1932
-8549:0:4365
-8550:3:2746
-8551:0:4365
-8552:2:1934
-8553:0:4365
-8554:3:2747
-8555:0:4365
-8556:2:1935
-8557:0:4365
-8558:2:1936
-8559:0:4365
-8560:2:2129
-8561:0:4365
-8562:2:2130
-8563:0:4365
-8564:2:2134
-8565:0:4365
-8566:3:2746
-8567:0:4365
-8568:2:2136
-8569:0:4365
-8570:3:2747
-8571:0:4365
-8572:2:2137
-8573:2:2141
-8574:2:2142
-8575:2:2150
-8576:2:2151
-8577:2:2155
-8578:2:2156
-8579:2:2150
-8580:2:2151
-8581:2:2155
-8582:2:2156
-8583:2:2164
-8584:2:2169
-8585:2:2173
-8586:2:2174
-8587:2:2181
-8588:2:2182
-8589:2:2193
-8590:2:2194
-8591:2:2195
-8592:2:2193
-8593:2:2194
-8594:2:2195
-8595:2:2206
-8596:2:2211
-8597:2:2212
-8598:0:4365
-8599:2:2224
-8600:0:4365
-8601:3:2746
-8602:0:4365
-8603:2:2226
-8604:0:4365
-8605:3:2747
-8606:0:4365
-8607:2:1936
-8608:0:4365
-8609:2:2129
-8610:0:4365
-8611:2:2130
-8612:0:4365
-8613:2:2134
-8614:0:4365
-8615:3:2746
-8616:0:4365
-8617:2:2136
-8618:0:4365
-8619:3:2747
-8620:0:4365
-8621:2:2137
-8622:2:2141
-8623:2:2142
-8624:2:2150
-8625:2:2151
-8626:2:2155
-8627:2:2156
-8628:2:2150
-8629:2:2151
-8630:2:2152
-8631:2:2164
-8632:2:2169
-8633:2:2173
-8634:2:2174
-8635:2:2181
-8636:2:2182
-8637:2:2193
-8638:2:2194
-8639:2:2195
-8640:2:2193
-8641:2:2194
-8642:2:2195
-8643:2:2206
-8644:2:2211
-8645:2:2212
-8646:0:4365
-8647:2:2224
-8648:0:4365
-8649:3:2746
-8650:0:4365
-8651:2:2226
-8652:0:4365
-8653:3:2747
-8654:0:4365
-8655:2:2230
-8656:0:4365
-8657:3:2746
-8658:0:4365
-8659:2:2235
-8660:2:2239
-8661:2:2240
-8662:2:2248
-8663:2:2249
-8664:2:2253
-8665:2:2254
-8666:2:2248
-8667:2:2249
-8668:2:2250
-8669:2:2262
-8670:2:2267
-8671:2:2271
-8672:2:2272
-8673:2:2279
-8674:2:2280
-8675:2:2291
-8676:2:2292
-8677:2:2293
-8678:2:2291
-8679:2:2292
-8680:2:2293
-8681:2:2304
-8682:2:2309
-8683:2:2310
-8684:0:4365
-8685:3:2747
-8686:0:4365
-8687:2:2322
-8688:0:4365
-8689:2:1169
-8690:0:4365
-8691:3:2746
-8692:0:4365
-8693:2:1170
-8694:0:4365
-8695:3:2747
-8696:0:4365
-8697:3:2748
-8698:0:4365
-8699:3:2754
-8700:0:4365
-8701:3:2755
-8702:3:2759
-8703:3:2760
-8704:3:2768
-8705:3:2769
-8706:3:2773
-8707:3:2774
-8708:3:2768
-8709:3:2769
-8710:3:2773
-8711:3:2774
-8712:3:2782
-8713:3:2787
-8714:3:2791
-8715:3:2792
-8716:3:2799
-8717:3:2800
-8718:3:2811
-8719:3:2812
-8720:3:2813
-8721:3:2811
-8722:3:2812
-8723:3:2813
-8724:3:2824
-8725:3:2829
-8726:3:2830
-8727:0:4365
-8728:3:2842
-8729:0:4365
-8730:3:2843
-8731:0:4365
-8732:2:1173
-8733:0:4365
-8734:3:2844
-8735:0:4365
-8736:2:1179
-8737:0:4365
-8738:2:1180
-8739:0:4365
-8740:3:2843
-8741:0:4365
-8742:2:1181
-8743:2:1185
-8744:2:1186
-8745:2:1194
-8746:2:1195
-8747:2:1199
-8748:2:1200
-8749:2:1194
-8750:2:1195
-8751:2:1199
-8752:2:1200
-8753:2:1208
-8754:2:1213
-8755:2:1217
-8756:2:1218
-8757:2:1225
-8758:2:1226
-8759:2:1237
-8760:2:1238
-8761:2:1239
-8762:2:1237
-8763:2:1238
-8764:2:1239
-8765:2:1250
-8766:2:1255
-8767:2:1256
-8768:0:4365
-8769:3:2844
-8770:0:4365
-8771:2:1268
-8772:0:4365
-8773:3:2843
-8774:0:4365
-8775:2:1270
-8776:0:4365
-8777:3:2844
-8778:0:4365
-8779:2:1271
-8780:2:1275
-8781:2:1276
-8782:2:1284
-8783:2:1285
-8784:2:1289
-8785:2:1290
-8786:2:1284
-8787:2:1285
-8788:2:1289
-8789:2:1290
-8790:2:1298
-8791:2:1303
-8792:2:1307
-8793:2:1308
-8794:2:1315
-8795:2:1316
-8796:2:1327
-8797:2:1328
-8798:2:1329
-8799:2:1327
-8800:2:1328
-8801:2:1329
-8802:2:1340
-8803:2:1345
-8804:2:1346
-8805:0:4365
-8806:2:1358
-8807:0:4365
-8808:2:1360
-8809:0:4365
-8810:3:2843
-8811:0:4365
-8812:2:1361
-8813:0:4365
-8814:3:2844
-8815:0:4365
-8816:2:1362
-8817:2:1366
-8818:2:1367
-8819:2:1375
-8820:2:1376
-8821:2:1380
-8822:2:1381
-8823:2:1375
-8824:2:1376
-8825:2:1380
-8826:2:1381
-8827:2:1389
-8828:2:1394
-8829:2:1398
-8830:2:1399
-8831:2:1406
-8832:2:1407
-8833:2:1418
-8834:2:1419
-8835:2:1420
-8836:2:1418
-8837:2:1419
-8838:2:1420
-8839:2:1431
-8840:2:1436
-8841:2:1437
-8842:0:4365
-8843:2:1449
-8844:0:4365
-8845:3:2843
-8846:0:4365
-8847:2:1451
-8848:0:4365
-8849:3:2844
-8850:0:4365
-8851:2:1652
-8852:0:4365
-8853:2:1653
-8854:0:4365
-8855:2:1657
-8856:0:4365
-8857:2:1180
-8858:0:4365
-8859:3:2843
-8860:0:4365
-8861:2:1181
-8862:2:1185
-8863:2:1186
-8864:2:1194
-8865:2:1195
-8866:2:1199
-8867:2:1200
-8868:2:1194
-8869:2:1195
-8870:2:1196
-8871:2:1208
-8872:2:1213
-8873:2:1217
-8874:2:1218
-8875:2:1225
-8876:2:1226
-8877:2:1237
-8878:2:1238
-8879:2:1239
-8880:2:1237
-8881:2:1238
-8882:2:1239
-8883:2:1250
-8884:2:1255
-8885:2:1256
-8886:0:4365
-8887:3:2844
-8888:0:4365
-8889:2:1268
-8890:0:4365
-8891:3:2843
-8892:0:4365
-8893:2:1270
-8894:0:4365
-8895:3:2844
-8896:0:4365
-8897:2:1271
-8898:2:1275
-8899:2:1276
-8900:2:1284
-8901:2:1285
-8902:2:1289
-8903:2:1290
-8904:2:1284
-8905:2:1285
-8906:2:1289
-8907:2:1290
-8908:2:1298
-8909:2:1303
-8910:2:1307
-8911:2:1308
-8912:2:1315
-8913:2:1316
-8914:2:1327
-8915:2:1328
-8916:2:1329
-8917:2:1327
-8918:2:1328
-8919:2:1329
-8920:2:1340
-8921:2:1345
-8922:2:1346
-8923:0:4365
-8924:2:1358
-8925:0:4365
-8926:2:1454
-8927:0:4365
-8928:3:2843
-8929:0:4365
-8930:2:1455
-8931:0:4365
-8932:3:2844
-8933:0:4365
-8934:2:1652
-8935:0:4365
-8936:2:1653
-8937:0:4365
-8938:2:1657
-8939:0:4365
-8940:2:1660
-8941:0:4365
-8942:3:2843
-8943:0:4365
-8944:2:1665
-8945:2:1669
-8946:2:1670
-8947:2:1678
-8948:2:1679
-8949:2:1683
-8950:2:1684
-8951:2:1678
-8952:2:1679
-8953:2:1680
-8954:2:1692
-8955:2:1697
-8956:2:1701
-8957:2:1702
-8958:2:1709
-8959:2:1710
-8960:2:1721
-8961:2:1722
-8962:2:1723
-8963:2:1721
-8964:2:1722
-8965:2:1723
-8966:2:1734
-8967:2:1739
-8968:2:1740
-8969:0:4365
-8970:3:2844
-8971:0:4365
-8972:2:1752
-8973:0:4365
-8974:3:2843
-8975:0:4365
-8976:2:1754
-8977:0:4365
-8978:3:2844
-8979:0:4365
-8980:2:1755
-8981:2:1759
-8982:2:1760
-8983:2:1768
-8984:2:1769
-8985:2:1773
-8986:2:1774
-8987:2:1768
-8988:2:1769
-8989:2:1773
-8990:2:1774
-8991:2:1782
-8992:2:1787
-8993:2:1791
-8994:2:1792
-8995:2:1799
-8996:2:1800
-8997:2:1811
-8998:2:1812
-8999:2:1813
-9000:2:1811
-9001:2:1812
-9002:2:1813
-9003:2:1824
-9004:2:1829
-9005:2:1830
-9006:0:4365
-9007:2:1842
-9008:0:4365
-9009:3:2843
-9010:0:4365
-9011:2:1844
-9012:0:4365
-9013:3:2844
-9014:0:4365
-9015:2:1845
-9016:2:1849
-9017:2:1850
-9018:2:1858
-9019:2:1859
-9020:2:1863
-9021:2:1864
-9022:2:1858
-9023:2:1859
-9024:2:1863
-9025:2:1864
-9026:2:1872
-9027:2:1877
-9028:2:1881
-9029:2:1882
-9030:2:1889
-9031:2:1890
-9032:2:1901
-9033:2:1902
-9034:2:1903
-9035:2:1901
-9036:2:1902
-9037:2:1903
-9038:2:1914
-9039:2:1919
-9040:2:1920
-9041:0:4365
-9042:2:1932
-9043:0:4365
-9044:3:2843
-9045:0:4365
-9046:2:1934
-9047:0:4365
-9048:3:2844
-9049:0:4365
-9050:2:1935
-9051:0:4365
-9052:2:1936
-9053:0:4365
-9054:2:2129
-9055:0:4365
-9056:2:2130
-9057:0:4365
-9058:2:2134
-9059:0:4365
-9060:3:2843
-9061:0:4365
-9062:2:2136
-9063:0:4365
-9064:3:2844
-9065:0:4365
-9066:2:2137
-9067:2:2141
-9068:2:2142
-9069:2:2150
-9070:2:2151
-9071:2:2155
-9072:2:2156
-9073:2:2150
-9074:2:2151
-9075:2:2155
-9076:2:2156
-9077:2:2164
-9078:2:2169
-9079:2:2173
-9080:2:2174
-9081:2:2181
-9082:2:2182
-9083:2:2193
-9084:2:2194
-9085:2:2195
-9086:2:2193
-9087:2:2194
-9088:2:2195
-9089:2:2206
-9090:2:2211
-9091:2:2212
-9092:0:4365
-9093:2:2224
-9094:0:4365
-9095:3:2843
-9096:0:4365
-9097:2:2226
-9098:0:4365
-9099:3:2844
-9100:0:4365
-9101:2:1936
-9102:0:4365
-9103:2:2129
-9104:0:4365
-9105:2:2130
-9106:0:4365
-9107:2:2134
-9108:0:4365
-9109:3:2843
-9110:0:4365
-9111:2:2136
-9112:0:4365
-9113:3:2844
-9114:0:4365
-9115:2:2137
-9116:2:2141
-9117:2:2142
-9118:2:2150
-9119:2:2151
-9120:2:2155
-9121:2:2156
-9122:2:2150
-9123:2:2151
-9124:2:2152
-9125:2:2164
-9126:2:2169
-9127:2:2173
-9128:2:2174
-9129:2:2181
-9130:2:2182
-9131:2:2193
-9132:2:2194
-9133:2:2195
-9134:2:2193
-9135:2:2194
-9136:2:2195
-9137:2:2206
-9138:2:2211
-9139:2:2212
-9140:0:4365
-9141:2:2224
-9142:0:4365
-9143:3:2843
-9144:0:4365
-9145:2:2226
-9146:0:4365
-9147:3:2844
-9148:0:4365
-9149:2:2230
-9150:0:4365
-9151:3:2843
-9152:0:4365
-9153:2:2235
-9154:2:2239
-9155:2:2240
-9156:2:2248
-9157:2:2249
-9158:2:2253
-9159:2:2254
-9160:2:2248
-9161:2:2249
-9162:2:2250
-9163:2:2262
-9164:2:2267
-9165:2:2271
-9166:2:2272
-9167:2:2279
-9168:2:2280
-9169:2:2291
-9170:2:2292
-9171:2:2293
-9172:2:2291
-9173:2:2292
-9174:2:2293
-9175:2:2304
-9176:2:2309
-9177:2:2310
-9178:0:4365
-9179:3:2844
-9180:0:4365
-9181:2:2322
-9182:0:4365
-9183:2:1169
-9184:0:4365
-9185:3:2843
-9186:0:4365
-9187:2:1170
-9188:0:4365
-9189:3:2844
-9190:0:4365
-9191:3:2845
-9192:0:4365
-9193:3:2851
-9194:0:4365
-9195:3:2854
-9196:3:2855
-9197:3:2867
-9198:3:2868
-9199:3:2872
-9200:3:2873
-9201:3:2867
-9202:3:2868
-9203:3:2872
-9204:3:2873
-9205:3:2881
-9206:3:2886
-9207:3:2890
-9208:3:2891
-9209:3:2898
-9210:3:2899
-9211:3:2910
-9212:3:2911
-9213:3:2912
-9214:3:2910
-9215:3:2911
-9216:3:2912
-9217:3:2923
-9218:3:2928
-9219:3:2929
-9220:0:4365
-9221:3:2941
-9222:0:4365
-9223:3:2942
-9224:0:4365
-9225:2:1173
-9226:0:4365
-9227:3:2943
-9228:0:4365
-9229:2:1179
-9230:0:4365
-9231:2:1180
-9232:0:4365
-9233:3:2942
-9234:0:4365
-9235:2:1181
-9236:2:1185
-9237:2:1186
-9238:2:1194
-9239:2:1195
-9240:2:1199
-9241:2:1200
-9242:2:1194
-9243:2:1195
-9244:2:1199
-9245:2:1200
-9246:2:1208
-9247:2:1213
-9248:2:1217
-9249:2:1218
-9250:2:1225
-9251:2:1226
-9252:2:1237
-9253:2:1238
-9254:2:1239
-9255:2:1237
-9256:2:1238
-9257:2:1239
-9258:2:1250
-9259:2:1255
-9260:2:1256
-9261:0:4365
-9262:3:2943
-9263:0:4365
-9264:2:1268
-9265:0:4365
-9266:3:2942
-9267:0:4365
-9268:2:1270
-9269:0:4365
-9270:3:2943
-9271:0:4365
-9272:2:1271
-9273:2:1275
-9274:2:1276
-9275:2:1284
-9276:2:1285
-9277:2:1289
-9278:2:1290
-9279:2:1284
-9280:2:1285
-9281:2:1289
-9282:2:1290
-9283:2:1298
-9284:2:1303
-9285:2:1307
-9286:2:1308
-9287:2:1315
-9288:2:1316
-9289:2:1327
-9290:2:1328
-9291:2:1329
-9292:2:1327
-9293:2:1328
-9294:2:1329
-9295:2:1340
-9296:2:1345
-9297:2:1346
-9298:0:4365
-9299:2:1358
-9300:0:4365
-9301:2:1360
-9302:0:4365
-9303:3:2942
-9304:0:4365
-9305:2:1361
-9306:0:4365
-9307:3:2943
-9308:0:4365
-9309:2:1362
-9310:2:1366
-9311:2:1367
-9312:2:1375
-9313:2:1376
-9314:2:1380
-9315:2:1381
-9316:2:1375
-9317:2:1376
-9318:2:1380
-9319:2:1381
-9320:2:1389
-9321:2:1394
-9322:2:1398
-9323:2:1399
-9324:2:1406
-9325:2:1407
-9326:2:1418
-9327:2:1419
-9328:2:1420
-9329:2:1418
-9330:2:1419
-9331:2:1420
-9332:2:1431
-9333:2:1436
-9334:2:1437
-9335:0:4365
-9336:2:1449
-9337:0:4365
-9338:3:2942
-9339:0:4365
-9340:2:1451
-9341:0:4365
-9342:3:2943
-9343:0:4365
-9344:2:1652
-9345:0:4365
-9346:2:1653
-9347:0:4365
-9348:2:1657
-9349:0:4365
-9350:2:1180
-9351:0:4365
-9352:3:2942
-9353:0:4365
-9354:2:1181
-9355:2:1185
-9356:2:1186
-9357:2:1194
-9358:2:1195
-9359:2:1199
-9360:2:1200
-9361:2:1194
-9362:2:1195
-9363:2:1196
-9364:2:1208
-9365:2:1213
-9366:2:1217
-9367:2:1218
-9368:2:1225
-9369:2:1226
-9370:2:1237
-9371:2:1238
-9372:2:1239
-9373:2:1237
-9374:2:1238
-9375:2:1239
-9376:2:1250
-9377:2:1255
-9378:2:1256
-9379:0:4365
-9380:3:2943
-9381:0:4365
-9382:2:1268
-9383:0:4365
-9384:3:2942
-9385:0:4365
-9386:2:1270
-9387:0:4365
-9388:3:2943
-9389:0:4365
-9390:2:1271
-9391:2:1275
-9392:2:1276
-9393:2:1284
-9394:2:1285
-9395:2:1289
-9396:2:1290
-9397:2:1284
-9398:2:1285
-9399:2:1289
-9400:2:1290
-9401:2:1298
-9402:2:1303
-9403:2:1307
-9404:2:1308
-9405:2:1315
-9406:2:1316
-9407:2:1327
-9408:2:1328
-9409:2:1329
-9410:2:1327
-9411:2:1328
-9412:2:1329
-9413:2:1340
-9414:2:1345
-9415:2:1346
-9416:0:4365
-9417:2:1358
-9418:0:4365
-9419:2:1454
-9420:0:4365
-9421:3:2942
-9422:0:4365
-9423:2:1455
-9424:0:4365
-9425:3:2943
-9426:0:4365
-9427:2:1652
-9428:0:4365
-9429:2:1653
-9430:0:4365
-9431:2:1657
-9432:0:4365
-9433:2:1660
-9434:0:4365
-9435:3:2942
-9436:0:4365
-9437:2:1665
-9438:2:1669
-9439:2:1670
-9440:2:1678
-9441:2:1679
-9442:2:1683
-9443:2:1684
-9444:2:1678
-9445:2:1679
-9446:2:1680
-9447:2:1692
-9448:2:1697
-9449:2:1701
-9450:2:1702
-9451:2:1709
-9452:2:1710
-9453:2:1721
-9454:2:1722
-9455:2:1723
-9456:2:1721
-9457:2:1722
-9458:2:1723
-9459:2:1734
-9460:2:1739
-9461:2:1740
-9462:0:4365
-9463:3:2943
-9464:0:4365
-9465:2:1752
-9466:0:4365
-9467:3:2942
-9468:0:4365
-9469:2:1754
-9470:0:4365
-9471:3:2943
-9472:0:4365
-9473:2:1755
-9474:2:1759
-9475:2:1760
-9476:2:1768
-9477:2:1769
-9478:2:1773
-9479:2:1774
-9480:2:1768
-9481:2:1769
-9482:2:1773
-9483:2:1774
-9484:2:1782
-9485:2:1787
-9486:2:1791
-9487:2:1792
-9488:2:1799
-9489:2:1800
-9490:2:1811
-9491:2:1812
-9492:2:1813
-9493:2:1811
-9494:2:1812
-9495:2:1813
-9496:2:1824
-9497:2:1829
-9498:2:1830
-9499:0:4365
-9500:2:1842
-9501:0:4365
-9502:3:2942
-9503:0:4365
-9504:2:1844
-9505:0:4365
-9506:3:2943
-9507:0:4365
-9508:2:1845
-9509:2:1849
-9510:2:1850
-9511:2:1858
-9512:2:1859
-9513:2:1863
-9514:2:1864
-9515:2:1858
-9516:2:1859
-9517:2:1863
-9518:2:1864
-9519:2:1872
-9520:2:1877
-9521:2:1881
-9522:2:1882
-9523:2:1889
-9524:2:1890
-9525:2:1901
-9526:2:1902
-9527:2:1903
-9528:2:1901
-9529:2:1902
-9530:2:1903
-9531:2:1914
-9532:2:1919
-9533:2:1920
-9534:0:4365
-9535:2:1932
-9536:0:4365
-9537:3:2942
-9538:0:4365
-9539:2:1934
-9540:0:4365
-9541:3:2943
-9542:0:4365
-9543:2:1935
-9544:0:4365
-9545:2:1936
-9546:0:4365
-9547:2:2129
-9548:0:4365
-9549:2:2130
-9550:0:4365
-9551:2:2134
-9552:0:4365
-9553:3:2942
-9554:0:4365
-9555:2:2136
-9556:0:4365
-9557:3:2943
-9558:0:4365
-9559:2:2137
-9560:2:2141
-9561:2:2142
-9562:2:2150
-9563:2:2151
-9564:2:2155
-9565:2:2156
-9566:2:2150
-9567:2:2151
-9568:2:2155
-9569:2:2156
-9570:2:2164
-9571:2:2169
-9572:2:2173
-9573:2:2174
-9574:2:2181
-9575:2:2182
-9576:2:2193
-9577:2:2194
-9578:2:2195
-9579:2:2193
-9580:2:2194
-9581:2:2195
-9582:2:2206
-9583:2:2211
-9584:2:2212
-9585:0:4365
-9586:2:2224
-9587:0:4365
-9588:3:2942
-9589:0:4365
-9590:2:2226
-9591:0:4365
-9592:3:2943
-9593:0:4365
-9594:2:1936
-9595:0:4365
-9596:2:2129
-9597:0:4365
-9598:2:2130
-9599:0:4365
-9600:2:2134
-9601:0:4365
-9602:3:2942
-9603:0:4365
-9604:2:2136
-9605:0:4365
-9606:3:2943
-9607:0:4365
-9608:2:2137
-9609:2:2141
-9610:2:2142
-9611:2:2150
-9612:2:2151
-9613:2:2155
-9614:2:2156
-9615:2:2150
-9616:2:2151
-9617:2:2152
-9618:2:2164
-9619:2:2169
-9620:2:2173
-9621:2:2174
-9622:2:2181
-9623:2:2182
-9624:2:2193
-9625:2:2194
-9626:2:2195
-9627:2:2193
-9628:2:2194
-9629:2:2195
-9630:2:2206
-9631:2:2211
-9632:2:2212
-9633:0:4365
-9634:2:2224
-9635:0:4365
-9636:3:2942
-9637:0:4365
-9638:2:2226
-9639:0:4365
-9640:3:2943
-9641:0:4365
-9642:2:2230
-9643:0:4365
-9644:3:2942
-9645:0:4365
-9646:2:2235
-9647:2:2239
-9648:2:2240
-9649:2:2248
-9650:2:2249
-9651:2:2253
-9652:2:2254
-9653:2:2248
-9654:2:2249
-9655:2:2250
-9656:2:2262
-9657:2:2267
-9658:2:2271
-9659:2:2272
-9660:2:2279
-9661:2:2280
-9662:2:2291
-9663:2:2292
-9664:2:2293
-9665:2:2291
-9666:2:2292
-9667:2:2293
-9668:2:2304
-9669:2:2309
-9670:2:2310
-9671:0:4365
-9672:3:2943
-9673:0:4365
-9674:2:2322
-9675:0:4365
-9676:2:1169
-9677:0:4365
-9678:3:2942
-9679:0:4365
-9680:2:1170
-9681:0:4365
-9682:3:2943
-9683:0:4365
-9684:3:2944
-9685:0:4365
-9686:3:2950
-9687:0:4365
-9688:3:2951
-9689:0:4365
-9690:3:2952
-9691:0:4365
-9692:3:2953
-9693:0:4365
-9694:3:2954
-9695:3:2958
-9696:3:2959
-9697:3:2967
-9698:3:2968
-9699:3:2972
-9700:3:2973
-9701:3:2967
-9702:3:2968
-9703:3:2972
-9704:3:2973
-9705:3:2981
-9706:3:2986
-9707:3:2990
-9708:3:2991
-9709:3:2998
-9710:3:2999
-9711:3:3010
-9712:3:3011
-9713:3:3012
-9714:3:3010
-9715:3:3011
-9716:3:3012
-9717:3:3023
-9718:3:3028
-9719:3:3029
-9720:0:4365
-9721:3:3041
-9722:0:4365
-9723:3:3042
-9724:0:4365
-9725:2:1173
-9726:0:4365
-9727:3:3043
-9728:0:4365
-9729:2:1179
-9730:0:4365
-9731:2:1180
-9732:0:4365
-9733:3:3042
-9734:0:4365
-9735:2:1181
-9736:2:1185
-9737:2:1186
-9738:2:1194
-9739:2:1195
-9740:2:1199
-9741:2:1200
-9742:2:1194
-9743:2:1195
-9744:2:1199
-9745:2:1200
-9746:2:1208
-9747:2:1213
-9748:2:1217
-9749:2:1218
-9750:2:1225
-9751:2:1226
-9752:2:1237
-9753:2:1238
-9754:2:1239
-9755:2:1237
-9756:2:1238
-9757:2:1239
-9758:2:1250
-9759:2:1255
-9760:2:1256
-9761:0:4365
-9762:3:3043
-9763:0:4365
-9764:2:1268
-9765:0:4365
-9766:3:3042
-9767:0:4365
-9768:2:1270
-9769:0:4365
-9770:3:3043
-9771:0:4365
-9772:2:1271
-9773:2:1275
-9774:2:1276
-9775:2:1284
-9776:2:1285
-9777:2:1289
-9778:2:1290
-9779:2:1284
-9780:2:1285
-9781:2:1289
-9782:2:1290
-9783:2:1298
-9784:2:1303
-9785:2:1307
-9786:2:1308
-9787:2:1315
-9788:2:1316
-9789:2:1327
-9790:2:1328
-9791:2:1329
-9792:2:1327
-9793:2:1328
-9794:2:1329
-9795:2:1340
-9796:2:1345
-9797:2:1346
-9798:0:4365
-9799:2:1358
-9800:0:4365
-9801:2:1360
-9802:0:4365
-9803:3:3042
-9804:0:4365
-9805:2:1361
-9806:0:4365
-9807:3:3043
-9808:0:4365
-9809:2:1362
-9810:2:1366
-9811:2:1367
-9812:2:1375
-9813:2:1376
-9814:2:1380
-9815:2:1381
-9816:2:1375
-9817:2:1376
-9818:2:1380
-9819:2:1381
-9820:2:1389
-9821:2:1394
-9822:2:1398
-9823:2:1399
-9824:2:1406
-9825:2:1407
-9826:2:1418
-9827:2:1419
-9828:2:1420
-9829:2:1418
-9830:2:1419
-9831:2:1420
-9832:2:1431
-9833:2:1436
-9834:2:1437
-9835:0:4365
-9836:2:1449
-9837:0:4365
-9838:3:3042
-9839:0:4365
-9840:2:1451
-9841:0:4365
-9842:3:3043
-9843:0:4365
-9844:2:1652
-9845:0:4365
-9846:2:1653
-9847:0:4365
-9848:2:1657
-9849:0:4365
-9850:2:1180
-9851:0:4365
-9852:3:3042
-9853:0:4365
-9854:2:1181
-9855:2:1185
-9856:2:1186
-9857:2:1194
-9858:2:1195
-9859:2:1199
-9860:2:1200
-9861:2:1194
-9862:2:1195
-9863:2:1196
-9864:2:1208
-9865:2:1213
-9866:2:1217
-9867:2:1218
-9868:2:1225
-9869:2:1226
-9870:2:1237
-9871:2:1238
-9872:2:1239
-9873:2:1237
-9874:2:1238
-9875:2:1239
-9876:2:1250
-9877:2:1255
-9878:2:1256
-9879:0:4365
-9880:3:3043
-9881:0:4365
-9882:2:1268
-9883:0:4365
-9884:3:3042
-9885:0:4365
-9886:2:1270
-9887:0:4365
-9888:3:3043
-9889:0:4365
-9890:2:1271
-9891:2:1275
-9892:2:1276
-9893:2:1284
-9894:2:1285
-9895:2:1289
-9896:2:1290
-9897:2:1284
-9898:2:1285
-9899:2:1289
-9900:2:1290
-9901:2:1298
-9902:2:1303
-9903:2:1307
-9904:2:1308
-9905:2:1315
-9906:2:1316
-9907:2:1327
-9908:2:1328
-9909:2:1329
-9910:2:1327
-9911:2:1328
-9912:2:1329
-9913:2:1340
-9914:2:1345
-9915:2:1346
-9916:0:4365
-9917:2:1358
-9918:0:4365
-9919:2:1454
-9920:0:4365
-9921:3:3042
-9922:0:4365
-9923:2:1455
-9924:0:4365
-9925:3:3043
-9926:0:4365
-9927:2:1652
-9928:0:4365
-9929:2:1653
-9930:0:4365
-9931:2:1657
-9932:0:4365
-9933:2:1660
-9934:0:4365
-9935:3:3042
-9936:0:4365
-9937:2:1665
-9938:2:1669
-9939:2:1670
-9940:2:1678
-9941:2:1679
-9942:2:1683
-9943:2:1684
-9944:2:1678
-9945:2:1679
-9946:2:1680
-9947:2:1692
-9948:2:1697
-9949:2:1701
-9950:2:1702
-9951:2:1709
-9952:2:1710
-9953:2:1721
-9954:2:1722
-9955:2:1723
-9956:2:1721
-9957:2:1722
-9958:2:1723
-9959:2:1734
-9960:2:1739
-9961:2:1740
-9962:0:4365
-9963:3:3043
-9964:0:4365
-9965:2:1752
-9966:0:4365
-9967:3:3042
-9968:0:4365
-9969:2:1754
-9970:0:4365
-9971:3:3043
-9972:0:4365
-9973:2:1755
-9974:2:1759
-9975:2:1760
-9976:2:1768
-9977:2:1769
-9978:2:1773
-9979:2:1774
-9980:2:1768
-9981:2:1769
-9982:2:1773
-9983:2:1774
-9984:2:1782
-9985:2:1787
-9986:2:1791
-9987:2:1792
-9988:2:1799
-9989:2:1800
-9990:2:1811
-9991:2:1812
-9992:2:1813
-9993:2:1811
-9994:2:1812
-9995:2:1813
-9996:2:1824
-9997:2:1829
-9998:2:1830
-9999:0:4365
-10000:2:1842
-10001:0:4365
-10002:3:3042
-10003:0:4365
-10004:2:1844
-10005:0:4365
-10006:3:3043
-10007:0:4365
-10008:2:1845
-10009:2:1849
-10010:2:1850
-10011:2:1858
-10012:2:1859
-10013:2:1863
-10014:2:1864
-10015:2:1858
-10016:2:1859
-10017:2:1863
-10018:2:1864
-10019:2:1872
-10020:2:1877
-10021:2:1881
-10022:2:1882
-10023:2:1889
-10024:2:1890
-10025:2:1901
-10026:2:1902
-10027:2:1903
-10028:2:1901
-10029:2:1902
-10030:2:1903
-10031:2:1914
-10032:2:1919
-10033:2:1920
-10034:0:4365
-10035:2:1932
-10036:0:4365
-10037:3:3042
-10038:0:4365
-10039:2:1934
-10040:0:4365
-10041:3:3043
-10042:0:4365
-10043:2:1935
-10044:0:4365
-10045:2:1936
-10046:0:4365
-10047:2:2129
-10048:0:4365
-10049:2:2130
-10050:0:4365
-10051:2:2134
-10052:0:4365
-10053:3:3042
-10054:0:4365
-10055:2:2136
-10056:0:4365
-10057:3:3043
-10058:0:4365
-10059:2:2137
-10060:2:2141
-10061:2:2142
-10062:2:2150
-10063:2:2151
-10064:2:2155
-10065:2:2156
-10066:2:2150
-10067:2:2151
-10068:2:2155
-10069:2:2156
-10070:2:2164
-10071:2:2169
-10072:2:2173
-10073:2:2174
-10074:2:2181
-10075:2:2182
-10076:2:2193
-10077:2:2194
-10078:2:2195
-10079:2:2193
-10080:2:2194
-10081:2:2195
-10082:2:2206
-10083:2:2211
-10084:2:2212
-10085:0:4365
-10086:2:2224
-10087:0:4365
-10088:3:3042
-10089:0:4365
-10090:2:2226
-10091:0:4365
-10092:3:3043
-10093:0:4365
-10094:2:1936
-10095:0:4365
-10096:2:2129
-10097:0:4365
-10098:2:2130
-10099:0:4365
-10100:2:2134
-10101:0:4365
-10102:3:3042
-10103:0:4365
-10104:2:2136
-10105:0:4365
-10106:3:3043
-10107:0:4365
-10108:2:2137
-10109:2:2141
-10110:2:2142
-10111:2:2150
-10112:2:2151
-10113:2:2155
-10114:2:2156
-10115:2:2150
-10116:2:2151
-10117:2:2152
-10118:2:2164
-10119:2:2169
-10120:2:2173
-10121:2:2174
-10122:2:2181
-10123:2:2182
-10124:2:2193
-10125:2:2194
-10126:2:2195
-10127:2:2193
-10128:2:2194
-10129:2:2195
-10130:2:2206
-10131:2:2211
-10132:2:2212
-10133:0:4365
-10134:2:2224
-10135:0:4365
-10136:3:3042
-10137:0:4365
-10138:2:2226
-10139:0:4365
-10140:3:3043
-10141:0:4365
-10142:2:2230
-10143:0:4365
-10144:3:3042
-10145:0:4365
-10146:2:2235
-10147:2:2239
-10148:2:2240
-10149:2:2248
-10150:2:2249
-10151:2:2253
-10152:2:2254
-10153:2:2248
-10154:2:2249
-10155:2:2250
-10156:2:2262
-10157:2:2267
-10158:2:2271
-10159:2:2272
-10160:2:2279
-10161:2:2280
-10162:2:2291
-10163:2:2292
-10164:2:2293
-10165:2:2291
-10166:2:2292
-10167:2:2293
-10168:2:2304
-10169:2:2309
-10170:2:2310
-10171:0:4365
-10172:3:3043
-10173:0:4365
-10174:2:2322
-10175:0:4365
-10176:2:1169
-10177:0:4365
-10178:3:3042
-10179:0:4365
-10180:2:1170
-10181:0:4365
-10182:3:3043
-10183:0:4365
-10184:3:3044
-10185:0:4365
-10186:3:3257
-10187:0:4365
-10188:3:3265
-10189:0:4365
-10190:3:3266
-10191:3:3270
-10192:3:3271
-10193:3:3279
-10194:3:3280
-10195:3:3284
-10196:3:3285
-10197:3:3279
-10198:3:3280
-10199:3:3284
-10200:3:3285
-10201:3:3293
-10202:3:3298
-10203:3:3302
-10204:3:3303
-10205:3:3310
-10206:3:3311
-10207:3:3322
-10208:3:3323
-10209:3:3324
-10210:3:3322
-10211:3:3323
-10212:3:3324
-10213:3:3335
-10214:3:3340
-10215:3:3341
-10216:0:4365
-10217:3:3353
-10218:0:4365
-10219:3:3354
-10220:0:4365
-10221:2:1173
-10222:0:4365
-10223:3:3355
-10224:0:4365
-10225:2:1179
-10226:0:4365
-10227:2:1180
-10228:0:4365
-10229:3:3354
-10230:0:4365
-10231:2:1181
-10232:2:1185
-10233:2:1186
-10234:2:1194
-10235:2:1195
-10236:2:1199
-10237:2:1200
-10238:2:1194
-10239:2:1195
-10240:2:1199
-10241:2:1200
-10242:2:1208
-10243:2:1213
-10244:2:1217
-10245:2:1218
-10246:2:1225
-10247:2:1226
-10248:2:1237
-10249:2:1238
-10250:2:1239
-10251:2:1237
-10252:2:1238
-10253:2:1239
-10254:2:1250
-10255:2:1255
-10256:2:1256
-10257:0:4365
-10258:3:3355
-10259:0:4365
-10260:2:1268
-10261:0:4365
-10262:3:3354
-10263:0:4365
-10264:2:1270
-10265:0:4365
-10266:3:3355
-10267:0:4365
-10268:2:1271
-10269:2:1275
-10270:2:1276
-10271:2:1284
-10272:2:1285
-10273:2:1289
-10274:2:1290
-10275:2:1284
-10276:2:1285
-10277:2:1289
-10278:2:1290
-10279:2:1298
-10280:2:1303
-10281:2:1307
-10282:2:1308
-10283:2:1315
-10284:2:1316
-10285:2:1327
-10286:2:1328
-10287:2:1329
-10288:2:1327
-10289:2:1328
-10290:2:1329
-10291:2:1340
-10292:2:1345
-10293:2:1346
-10294:0:4365
-10295:2:1358
-10296:0:4365
-10297:2:1360
-10298:0:4365
-10299:3:3354
-10300:0:4365
-10301:2:1361
-10302:0:4365
-10303:3:3355
-10304:0:4365
-10305:2:1362
-10306:2:1366
-10307:2:1367
-10308:2:1375
-10309:2:1376
-10310:2:1380
-10311:2:1381
-10312:2:1375
-10313:2:1376
-10314:2:1380
-10315:2:1381
-10316:2:1389
-10317:2:1394
-10318:2:1398
-10319:2:1399
-10320:2:1406
-10321:2:1407
-10322:2:1418
-10323:2:1419
-10324:2:1420
-10325:2:1418
-10326:2:1419
-10327:2:1420
-10328:2:1431
-10329:2:1436
-10330:2:1437
-10331:0:4365
-10332:2:1449
-10333:0:4365
-10334:3:3354
-10335:0:4365
-10336:2:1451
-10337:0:4365
-10338:3:3355
-10339:0:4365
-10340:2:1652
-10341:0:4365
-10342:2:1653
-10343:0:4365
-10344:2:1657
-10345:0:4365
-10346:2:1180
-10347:0:4365
-10348:3:3354
-10349:0:4365
-10350:2:1181
-10351:2:1185
-10352:2:1186
-10353:2:1194
-10354:2:1195
-10355:2:1199
-10356:2:1200
-10357:2:1194
-10358:2:1195
-10359:2:1196
-10360:2:1208
-10361:2:1213
-10362:2:1217
-10363:2:1218
-10364:2:1225
-10365:2:1226
-10366:2:1237
-10367:2:1238
-10368:2:1239
-10369:2:1237
-10370:2:1238
-10371:2:1239
-10372:2:1250
-10373:2:1255
-10374:2:1256
-10375:0:4365
-10376:3:3355
-10377:0:4365
-10378:2:1268
-10379:0:4365
-10380:3:3354
-10381:0:4365
-10382:2:1270
-10383:0:4365
-10384:3:3355
-10385:0:4365
-10386:2:1271
-10387:2:1275
-10388:2:1276
-10389:2:1284
-10390:2:1285
-10391:2:1289
-10392:2:1290
-10393:2:1284
-10394:2:1285
-10395:2:1289
-10396:2:1290
-10397:2:1298
-10398:2:1303
-10399:2:1307
-10400:2:1308
-10401:2:1315
-10402:2:1316
-10403:2:1327
-10404:2:1328
-10405:2:1329
-10406:2:1327
-10407:2:1328
-10408:2:1329
-10409:2:1340
-10410:2:1345
-10411:2:1346
-10412:0:4365
-10413:2:1358
-10414:0:4365
-10415:2:1454
-10416:0:4365
-10417:3:3354
-10418:0:4365
-10419:2:1455
-10420:0:4365
-10421:3:3355
-10422:0:4365
-10423:2:1652
-10424:0:4365
-10425:2:1653
-10426:0:4365
-10427:2:1657
-10428:0:4365
-10429:2:1660
-10430:0:4365
-10431:3:3354
-10432:0:4365
-10433:2:1665
-10434:2:1669
-10435:2:1670
-10436:2:1678
-10437:2:1679
-10438:2:1683
-10439:2:1684
-10440:2:1678
-10441:2:1679
-10442:2:1680
-10443:2:1692
-10444:2:1697
-10445:2:1701
-10446:2:1702
-10447:2:1709
-10448:2:1710
-10449:2:1721
-10450:2:1722
-10451:2:1723
-10452:2:1721
-10453:2:1722
-10454:2:1723
-10455:2:1734
-10456:2:1739
-10457:2:1740
-10458:0:4365
-10459:3:3355
-10460:0:4365
-10461:2:1752
-10462:0:4365
-10463:3:3354
-10464:0:4365
-10465:2:1754
-10466:0:4365
-10467:3:3355
-10468:0:4365
-10469:2:1755
-10470:2:1759
-10471:2:1760
-10472:2:1768
-10473:2:1769
-10474:2:1773
-10475:2:1774
-10476:2:1768
-10477:2:1769
-10478:2:1773
-10479:2:1774
-10480:2:1782
-10481:2:1787
-10482:2:1791
-10483:2:1792
-10484:2:1799
-10485:2:1800
-10486:2:1811
-10487:2:1812
-10488:2:1813
-10489:2:1811
-10490:2:1812
-10491:2:1813
-10492:2:1824
-10493:2:1829
-10494:2:1830
-10495:0:4365
-10496:2:1842
-10497:0:4365
-10498:3:3354
-10499:0:4365
-10500:2:1844
-10501:0:4365
-10502:3:3355
-10503:0:4365
-10504:2:1845
-10505:2:1849
-10506:2:1850
-10507:2:1858
-10508:2:1859
-10509:2:1863
-10510:2:1864
-10511:2:1858
-10512:2:1859
-10513:2:1863
-10514:2:1864
-10515:2:1872
-10516:2:1877
-10517:2:1881
-10518:2:1882
-10519:2:1889
-10520:2:1890
-10521:2:1901
-10522:2:1902
-10523:2:1903
-10524:2:1901
-10525:2:1902
-10526:2:1903
-10527:2:1914
-10528:2:1919
-10529:2:1920
-10530:0:4365
-10531:2:1932
-10532:0:4365
-10533:3:3354
-10534:0:4365
-10535:2:1934
-10536:0:4365
-10537:3:3355
-10538:0:4365
-10539:2:1935
-10540:0:4365
-10541:2:1936
-10542:0:4365
-10543:2:2129
-10544:0:4365
-10545:2:2130
-10546:0:4365
-10547:2:2134
-10548:0:4365
-10549:3:3354
-10550:0:4365
-10551:2:2136
-10552:0:4365
-10553:3:3355
-10554:0:4365
-10555:2:2137
-10556:2:2141
-10557:2:2142
-10558:2:2150
-10559:2:2151
-10560:2:2155
-10561:2:2156
-10562:2:2150
-10563:2:2151
-10564:2:2155
-10565:2:2156
-10566:2:2164
-10567:2:2169
-10568:2:2173
-10569:2:2174
-10570:2:2181
-10571:2:2182
-10572:2:2193
-10573:2:2194
-10574:2:2195
-10575:2:2193
-10576:2:2194
-10577:2:2195
-10578:2:2206
-10579:2:2211
-10580:2:2212
-10581:0:4365
-10582:2:2224
-10583:0:4365
-10584:3:3354
-10585:0:4365
-10586:2:2226
-10587:0:4365
-10588:3:3355
-10589:0:4365
-10590:2:1936
-10591:0:4365
-10592:2:2129
-10593:0:4365
-10594:2:2130
-10595:0:4365
-10596:2:2134
-10597:0:4365
-10598:3:3354
-10599:0:4365
-10600:2:2136
-10601:0:4365
-10602:3:3355
-10603:0:4365
-10604:2:2137
-10605:2:2141
-10606:2:2142
-10607:2:2150
-10608:2:2151
-10609:2:2155
-10610:2:2156
-10611:2:2150
-10612:2:2151
-10613:2:2152
-10614:2:2164
-10615:2:2169
-10616:2:2173
-10617:2:2174
-10618:2:2181
-10619:2:2182
-10620:2:2193
-10621:2:2194
-10622:2:2195
-10623:2:2193
-10624:2:2194
-10625:2:2195
-10626:2:2206
-10627:2:2211
-10628:2:2212
-10629:0:4365
-10630:2:2224
-10631:0:4365
-10632:3:3354
-10633:0:4365
-10634:2:2226
-10635:0:4365
-10636:3:3355
-10637:0:4365
-10638:2:2230
-10639:0:4365
-10640:3:3354
-10641:0:4365
-10642:2:2235
-10643:2:2239
-10644:2:2240
-10645:2:2248
-10646:2:2249
-10647:2:2253
-10648:2:2254
-10649:2:2248
-10650:2:2249
-10651:2:2250
-10652:2:2262
-10653:2:2267
-10654:2:2271
-10655:2:2272
-10656:2:2279
-10657:2:2280
-10658:2:2291
-10659:2:2292
-10660:2:2293
-10661:2:2291
-10662:2:2292
-10663:2:2293
-10664:2:2304
-10665:2:2309
-10666:2:2310
-10667:0:4365
-10668:3:3355
-10669:0:4365
-10670:2:2322
-10671:0:4365
-10672:2:1169
-10673:0:4365
-10674:3:3354
-10675:0:4365
-10676:2:1170
-10677:0:4365
-10678:3:3355
-10679:0:4365
-10680:3:3356
-10681:0:4365
-10682:3:3366
-10683:0:4365
-10684:3:2951
-10685:0:4365
-10686:3:2952
-10687:0:4365
-10688:3:2953
-10689:0:4365
-10690:3:2954
-10691:3:2958
-10692:3:2959
-10693:3:2967
-10694:3:2968
-10695:3:2972
-10696:3:2973
-10697:3:2967
-10698:3:2968
-10699:3:2972
-10700:3:2973
-10701:3:2981
-10702:3:2986
-10703:3:2990
-10704:3:2991
-10705:3:2998
-10706:3:2999
-10707:3:3010
-10708:3:3011
-10709:3:3012
-10710:3:3010
-10711:3:3011
-10712:3:3012
-10713:3:3023
-10714:3:3028
-10715:3:3029
-10716:0:4365
-10717:3:3041
-10718:0:4365
-10719:3:3042
-10720:0:4365
-10721:2:1173
-10722:0:4365
-10723:3:3043
-10724:0:4365
-10725:2:1179
-10726:0:4365
-10727:2:1180
-10728:0:4365
-10729:3:3042
-10730:0:4365
-10731:2:1181
-10732:2:1185
-10733:2:1186
-10734:2:1194
-10735:2:1195
-10736:2:1199
-10737:2:1200
-10738:2:1194
-10739:2:1195
-10740:2:1199
-10741:2:1200
-10742:2:1208
-10743:2:1213
-10744:2:1217
-10745:2:1218
-10746:2:1225
-10747:2:1226
-10748:2:1237
-10749:2:1238
-10750:2:1239
-10751:2:1237
-10752:2:1238
-10753:2:1239
-10754:2:1250
-10755:2:1255
-10756:2:1256
-10757:0:4365
-10758:3:3043
-10759:0:4365
-10760:2:1268
-10761:0:4365
-10762:3:3042
-10763:0:4365
-10764:2:1270
-10765:0:4365
-10766:3:3043
-10767:0:4365
-10768:2:1271
-10769:2:1275
-10770:2:1276
-10771:2:1284
-10772:2:1285
-10773:2:1289
-10774:2:1290
-10775:2:1284
-10776:2:1285
-10777:2:1289
-10778:2:1290
-10779:2:1298
-10780:2:1303
-10781:2:1307
-10782:2:1308
-10783:2:1315
-10784:2:1316
-10785:2:1327
-10786:2:1328
-10787:2:1329
-10788:2:1327
-10789:2:1328
-10790:2:1329
-10791:2:1340
-10792:2:1345
-10793:2:1346
-10794:0:4365
-10795:2:1358
-10796:0:4365
-10797:2:1360
-10798:0:4365
-10799:3:3042
-10800:0:4365
-10801:2:1361
-10802:0:4365
-10803:3:3043
-10804:0:4365
-10805:2:1362
-10806:2:1366
-10807:2:1367
-10808:2:1375
-10809:2:1376
-10810:2:1380
-10811:2:1381
-10812:2:1375
-10813:2:1376
-10814:2:1380
-10815:2:1381
-10816:2:1389
-10817:2:1394
-10818:2:1398
-10819:2:1399
-10820:2:1406
-10821:2:1407
-10822:2:1418
-10823:2:1419
-10824:2:1420
-10825:2:1418
-10826:2:1419
-10827:2:1420
-10828:2:1431
-10829:2:1436
-10830:2:1437
-10831:0:4365
-10832:2:1449
-10833:0:4365
-10834:3:3042
-10835:0:4365
-10836:2:1451
-10837:0:4365
-10838:3:3043
-10839:0:4365
-10840:2:1652
-10841:0:4365
-10842:2:1653
-10843:0:4365
-10844:2:1657
-10845:0:4365
-10846:2:1180
-10847:0:4365
-10848:3:3042
-10849:0:4365
-10850:2:1181
-10851:2:1185
-10852:2:1186
-10853:2:1194
-10854:2:1195
-10855:2:1199
-10856:2:1200
-10857:2:1194
-10858:2:1195
-10859:2:1196
-10860:2:1208
-10861:2:1213
-10862:2:1217
-10863:2:1218
-10864:2:1225
-10865:2:1226
-10866:2:1237
-10867:2:1238
-10868:2:1239
-10869:2:1237
-10870:2:1238
-10871:2:1239
-10872:2:1250
-10873:2:1255
-10874:2:1256
-10875:0:4365
-10876:3:3043
-10877:0:4365
-10878:2:1268
-10879:0:4365
-10880:3:3042
-10881:0:4365
-10882:2:1270
-10883:0:4365
-10884:3:3043
-10885:0:4365
-10886:2:1271
-10887:2:1275
-10888:2:1276
-10889:2:1284
-10890:2:1285
-10891:2:1289
-10892:2:1290
-10893:2:1284
-10894:2:1285
-10895:2:1289
-10896:2:1290
-10897:2:1298
-10898:2:1303
-10899:2:1307
-10900:2:1308
-10901:2:1315
-10902:2:1316
-10903:2:1327
-10904:2:1328
-10905:2:1329
-10906:2:1327
-10907:2:1328
-10908:2:1329
-10909:2:1340
-10910:2:1345
-10911:2:1346
-10912:0:4365
-10913:2:1358
-10914:0:4365
-10915:2:1454
-10916:0:4365
-10917:3:3042
-10918:0:4365
-10919:2:1455
-10920:0:4365
-10921:3:3043
-10922:0:4365
-10923:2:1652
-10924:0:4365
-10925:2:1653
-10926:0:4365
-10927:2:1657
-10928:0:4365
-10929:2:1660
-10930:0:4365
-10931:3:3042
-10932:0:4365
-10933:2:1665
-10934:2:1669
-10935:2:1670
-10936:2:1678
-10937:2:1679
-10938:2:1683
-10939:2:1684
-10940:2:1678
-10941:2:1679
-10942:2:1680
-10943:2:1692
-10944:2:1697
-10945:2:1701
-10946:2:1702
-10947:2:1709
-10948:2:1710
-10949:2:1721
-10950:2:1722
-10951:2:1723
-10952:2:1721
-10953:2:1722
-10954:2:1723
-10955:2:1734
-10956:2:1739
-10957:2:1740
-10958:0:4365
-10959:3:3043
-10960:0:4365
-10961:2:1752
-10962:0:4365
-10963:3:3042
-10964:0:4365
-10965:2:1754
-10966:0:4365
-10967:3:3043
-10968:0:4365
-10969:2:1755
-10970:2:1759
-10971:2:1760
-10972:2:1768
-10973:2:1769
-10974:2:1773
-10975:2:1774
-10976:2:1768
-10977:2:1769
-10978:2:1773
-10979:2:1774
-10980:2:1782
-10981:2:1787
-10982:2:1791
-10983:2:1792
-10984:2:1799
-10985:2:1800
-10986:2:1811
-10987:2:1812
-10988:2:1813
-10989:2:1811
-10990:2:1812
-10991:2:1813
-10992:2:1824
-10993:2:1829
-10994:2:1830
-10995:0:4365
-10996:2:1842
-10997:0:4365
-10998:3:3042
-10999:0:4365
-11000:2:1844
-11001:0:4365
-11002:3:3043
-11003:0:4365
-11004:2:1845
-11005:2:1849
-11006:2:1850
-11007:2:1858
-11008:2:1859
-11009:2:1863
-11010:2:1864
-11011:2:1858
-11012:2:1859
-11013:2:1863
-11014:2:1864
-11015:2:1872
-11016:2:1877
-11017:2:1881
-11018:2:1882
-11019:2:1889
-11020:2:1890
-11021:2:1901
-11022:2:1902
-11023:2:1903
-11024:2:1901
-11025:2:1902
-11026:2:1903
-11027:2:1914
-11028:2:1919
-11029:2:1920
-11030:0:4365
-11031:2:1932
-11032:0:4365
-11033:3:3042
-11034:0:4365
-11035:2:1934
-11036:0:4365
-11037:3:3043
-11038:0:4365
-11039:2:1935
-11040:0:4365
-11041:2:1936
-11042:0:4365
-11043:2:2129
-11044:0:4365
-11045:2:2130
-11046:0:4365
-11047:2:2134
-11048:0:4365
-11049:3:3042
-11050:0:4365
-11051:2:2136
-11052:0:4365
-11053:3:3043
-11054:0:4365
-11055:2:2137
-11056:2:2141
-11057:2:2142
-11058:2:2150
-11059:2:2151
-11060:2:2155
-11061:2:2156
-11062:2:2150
-11063:2:2151
-11064:2:2155
-11065:2:2156
-11066:2:2164
-11067:2:2169
-11068:2:2173
-11069:2:2174
-11070:2:2181
-11071:2:2182
-11072:2:2193
-11073:2:2194
-11074:2:2195
-11075:2:2193
-11076:2:2194
-11077:2:2195
-11078:2:2206
-11079:2:2211
-11080:2:2212
-11081:0:4365
-11082:2:2224
-11083:0:4365
-11084:3:3042
-11085:0:4365
-11086:2:2226
-11087:0:4365
-11088:3:3043
-11089:0:4365
-11090:2:1936
-11091:0:4365
-11092:2:2129
-11093:0:4365
-11094:2:2130
-11095:0:4365
-11096:2:2134
-11097:0:4365
-11098:3:3042
-11099:0:4365
-11100:2:2136
-11101:0:4365
-11102:3:3043
-11103:0:4365
-11104:2:2137
-11105:2:2141
-11106:2:2142
-11107:2:2150
-11108:2:2151
-11109:2:2155
-11110:2:2156
-11111:2:2150
-11112:2:2151
-11113:2:2152
-11114:2:2164
-11115:2:2169
-11116:2:2173
-11117:2:2174
-11118:2:2181
-11119:2:2182
-11120:2:2193
-11121:2:2194
-11122:2:2195
-11123:2:2193
-11124:2:2194
-11125:2:2195
-11126:2:2206
-11127:2:2211
-11128:2:2212
-11129:0:4365
-11130:2:2224
-11131:0:4365
-11132:3:3042
-11133:0:4365
-11134:2:2226
-11135:0:4365
-11136:3:3043
-11137:0:4365
-11138:2:2230
-11139:0:4365
-11140:3:3042
-11141:0:4365
-11142:2:2235
-11143:2:2239
-11144:2:2240
-11145:2:2248
-11146:2:2249
-11147:2:2253
-11148:2:2254
-11149:2:2248
-11150:2:2249
-11151:2:2250
-11152:2:2262
-11153:2:2267
-11154:2:2271
-11155:2:2272
-11156:2:2279
-11157:2:2280
-11158:2:2291
-11159:2:2292
-11160:2:2293
-11161:2:2291
-11162:2:2292
-11163:2:2293
-11164:2:2304
-11165:2:2309
-11166:2:2310
-11167:0:4365
-11168:3:3043
-11169:0:4365
-11170:2:2322
-11171:0:4365
-11172:2:1169
-11173:0:4365
-11174:3:3042
-11175:0:4365
-11176:2:1170
-11177:0:4365
-11178:3:3043
-11179:0:4365
-11180:3:3044
-11181:0:4365
-11182:3:3257
-11183:0:4365
-11184:3:3362
-11185:0:4365
-11186:3:3363
-11187:0:4365
-11188:3:3367
-11189:0:4365
-11190:3:3373
-11191:3:3377
-11192:3:3378
-11193:3:3386
-11194:3:3387
-11195:3:3391
-11196:3:3392
-11197:3:3386
-11198:3:3387
-11199:3:3391
-11200:3:3392
-11201:3:3400
-11202:3:3405
-11203:3:3409
-11204:3:3410
-11205:3:3417
-11206:3:3418
-11207:3:3429
-11208:3:3430
-11209:3:3431
-11210:3:3429
-11211:3:3430
-11212:3:3431
-11213:3:3442
-11214:3:3447
-11215:3:3448
-11216:0:4365
-11217:3:3460
-11218:0:4365
-11219:3:3461
-11220:0:4365
-11221:2:1173
-11222:0:4365
-11223:3:3462
-11224:0:4365
-11225:2:1179
-11226:0:4365
-11227:2:1180
-11228:0:4365
-11229:3:3461
-11230:0:4365
-11231:2:1181
-11232:2:1185
-11233:2:1186
-11234:2:1194
-11235:2:1195
-11236:2:1199
-11237:2:1200
-11238:2:1194
-11239:2:1195
-11240:2:1199
-11241:2:1200
-11242:2:1208
-11243:2:1213
-11244:2:1217
-11245:2:1218
-11246:2:1225
-11247:2:1226
-11248:2:1237
-11249:2:1238
-11250:2:1239
-11251:2:1237
-11252:2:1238
-11253:2:1239
-11254:2:1250
-11255:2:1255
-11256:2:1256
-11257:0:4365
-11258:3:3462
-11259:0:4365
-11260:2:1268
-11261:0:4365
-11262:3:3461
-11263:0:4365
-11264:2:1270
-11265:0:4365
-11266:3:3462
-11267:0:4365
-11268:2:1271
-11269:2:1275
-11270:2:1276
-11271:2:1284
-11272:2:1285
-11273:2:1289
-11274:2:1290
-11275:2:1284
-11276:2:1285
-11277:2:1289
-11278:2:1290
-11279:2:1298
-11280:2:1303
-11281:2:1307
-11282:2:1308
-11283:2:1315
-11284:2:1316
-11285:2:1327
-11286:2:1328
-11287:2:1329
-11288:2:1327
-11289:2:1328
-11290:2:1329
-11291:2:1340
-11292:2:1345
-11293:2:1346
-11294:0:4365
-11295:2:1358
-11296:0:4365
-11297:2:1360
-11298:0:4365
-11299:3:3461
-11300:0:4365
-11301:2:1361
-11302:0:4365
-11303:3:3462
-11304:0:4365
-11305:2:1362
-11306:2:1366
-11307:2:1367
-11308:2:1375
-11309:2:1376
-11310:2:1380
-11311:2:1381
-11312:2:1375
-11313:2:1376
-11314:2:1380
-11315:2:1381
-11316:2:1389
-11317:2:1394
-11318:2:1398
-11319:2:1399
-11320:2:1406
-11321:2:1407
-11322:2:1418
-11323:2:1419
-11324:2:1420
-11325:2:1418
-11326:2:1419
-11327:2:1420
-11328:2:1431
-11329:2:1436
-11330:2:1437
-11331:0:4365
-11332:2:1449
-11333:0:4365
-11334:3:3461
-11335:0:4365
-11336:2:1451
-11337:0:4365
-11338:3:3462
-11339:0:4365
-11340:2:1652
-11341:0:4365
-11342:2:1653
-11343:0:4365
-11344:2:1657
-11345:0:4365
-11346:2:1180
-11347:0:4365
-11348:3:3461
-11349:0:4365
-11350:2:1181
-11351:2:1185
-11352:2:1186
-11353:2:1194
-11354:2:1195
-11355:2:1199
-11356:2:1200
-11357:2:1194
-11358:2:1195
-11359:2:1196
-11360:2:1208
-11361:2:1213
-11362:2:1217
-11363:2:1218
-11364:2:1225
-11365:2:1226
-11366:2:1237
-11367:2:1238
-11368:2:1239
-11369:2:1237
-11370:2:1238
-11371:2:1239
-11372:2:1250
-11373:2:1255
-11374:2:1256
-11375:0:4365
-11376:3:3462
-11377:0:4365
-11378:2:1268
-11379:0:4365
-11380:3:3461
-11381:0:4365
-11382:2:1270
-11383:0:4365
-11384:3:3462
-11385:0:4365
-11386:2:1271
-11387:2:1275
-11388:2:1276
-11389:2:1284
-11390:2:1285
-11391:2:1289
-11392:2:1290
-11393:2:1284
-11394:2:1285
-11395:2:1289
-11396:2:1290
-11397:2:1298
-11398:2:1303
-11399:2:1307
-11400:2:1308
-11401:2:1315
-11402:2:1316
-11403:2:1327
-11404:2:1328
-11405:2:1329
-11406:2:1327
-11407:2:1328
-11408:2:1329
-11409:2:1340
-11410:2:1345
-11411:2:1346
-11412:0:4365
-11413:2:1358
-11414:0:4365
-11415:2:1454
-11416:0:4365
-11417:3:3461
-11418:0:4365
-11419:2:1455
-11420:0:4365
-11421:3:3462
-11422:0:4365
-11423:2:1652
-11424:0:4365
-11425:2:1653
-11426:0:4365
-11427:2:1657
-11428:0:4365
-11429:2:1660
-11430:0:4365
-11431:3:3461
-11432:0:4365
-11433:2:1665
-11434:2:1669
-11435:2:1670
-11436:2:1678
-11437:2:1679
-11438:2:1683
-11439:2:1684
-11440:2:1678
-11441:2:1679
-11442:2:1680
-11443:2:1692
-11444:2:1697
-11445:2:1701
-11446:2:1702
-11447:2:1709
-11448:2:1710
-11449:2:1721
-11450:2:1722
-11451:2:1723
-11452:2:1721
-11453:2:1722
-11454:2:1723
-11455:2:1734
-11456:2:1739
-11457:2:1740
-11458:0:4365
-11459:3:3462
-11460:0:4365
-11461:2:1752
-11462:0:4365
-11463:3:3461
-11464:0:4365
-11465:2:1754
-11466:0:4365
-11467:3:3462
-11468:0:4365
-11469:2:1755
-11470:2:1759
-11471:2:1760
-11472:2:1768
-11473:2:1769
-11474:2:1773
-11475:2:1774
-11476:2:1768
-11477:2:1769
-11478:2:1773
-11479:2:1774
-11480:2:1782
-11481:2:1787
-11482:2:1791
-11483:2:1792
-11484:2:1799
-11485:2:1800
-11486:2:1811
-11487:2:1812
-11488:2:1813
-11489:2:1811
-11490:2:1812
-11491:2:1813
-11492:2:1824
-11493:2:1829
-11494:2:1830
-11495:0:4365
-11496:2:1842
-11497:0:4365
-11498:3:3461
-11499:0:4365
-11500:2:1844
-11501:0:4365
-11502:3:3462
-11503:0:4365
-11504:2:1845
-11505:2:1849
-11506:2:1850
-11507:2:1858
-11508:2:1859
-11509:2:1863
-11510:2:1864
-11511:2:1858
-11512:2:1859
-11513:2:1863
-11514:2:1864
-11515:2:1872
-11516:2:1877
-11517:2:1881
-11518:2:1882
-11519:2:1889
-11520:2:1890
-11521:2:1901
-11522:2:1902
-11523:2:1903
-11524:2:1901
-11525:2:1902
-11526:2:1903
-11527:2:1914
-11528:2:1919
-11529:2:1920
-11530:0:4365
-11531:2:1932
-11532:0:4365
-11533:3:3461
-11534:0:4365
-11535:2:1934
-11536:0:4365
-11537:3:3462
-11538:0:4365
-11539:2:1935
-11540:0:4365
-11541:2:1936
-11542:0:4365
-11543:2:2129
-11544:0:4365
-11545:2:2130
-11546:0:4365
-11547:2:2134
-11548:0:4365
-11549:3:3461
-11550:0:4365
-11551:2:2136
-11552:0:4365
-11553:3:3462
-11554:0:4365
-11555:2:2137
-11556:2:2141
-11557:2:2142
-11558:2:2150
-11559:2:2151
-11560:2:2155
-11561:2:2156
-11562:2:2150
-11563:2:2151
-11564:2:2155
-11565:2:2156
-11566:2:2164
-11567:2:2169
-11568:2:2173
-11569:2:2174
-11570:2:2181
-11571:2:2182
-11572:2:2193
-11573:2:2194
-11574:2:2195
-11575:2:2193
-11576:2:2194
-11577:2:2195
-11578:2:2206
-11579:2:2211
-11580:2:2212
-11581:0:4365
-11582:2:2224
-11583:0:4365
-11584:3:3461
-11585:0:4365
-11586:2:2226
-11587:0:4365
-11588:3:3462
-11589:0:4365
-11590:2:1936
-11591:0:4365
-11592:2:2129
-11593:0:4365
-11594:2:2130
-11595:0:4365
-11596:2:2134
-11597:0:4365
-11598:3:3461
-11599:0:4365
-11600:2:2136
-11601:0:4365
-11602:3:3462
-11603:0:4365
-11604:2:2137
-11605:2:2141
-11606:2:2142
-11607:2:2150
-11608:2:2151
-11609:2:2155
-11610:2:2156
-11611:2:2150
-11612:2:2151
-11613:2:2152
-11614:2:2164
-11615:2:2169
-11616:2:2173
-11617:2:2174
-11618:2:2181
-11619:2:2182
-11620:2:2193
-11621:2:2194
-11622:2:2195
-11623:2:2193
-11624:2:2194
-11625:2:2195
-11626:2:2206
-11627:2:2211
-11628:2:2212
-11629:0:4365
-11630:2:2224
-11631:0:4365
-11632:3:3461
-11633:0:4365
-11634:2:2226
-11635:0:4365
-11636:3:3462
-11637:0:4365
-11638:2:2230
-11639:0:4365
-11640:3:3461
-11641:0:4365
-11642:2:2235
-11643:2:2239
-11644:2:2240
-11645:2:2248
-11646:2:2249
-11647:2:2253
-11648:2:2254
-11649:2:2248
-11650:2:2249
-11651:2:2250
-11652:2:2262
-11653:2:2267
-11654:2:2271
-11655:2:2272
-11656:2:2279
-11657:2:2280
-11658:2:2291
-11659:2:2292
-11660:2:2293
-11661:2:2291
-11662:2:2292
-11663:2:2293
-11664:2:2304
-11665:2:2309
-11666:2:2310
-11667:0:4365
-11668:3:3462
-11669:0:4365
-11670:2:2322
-11671:0:4365
-11672:2:1169
-11673:0:4365
-11674:3:3461
-11675:0:4365
-11676:2:1170
-11677:0:4365
-11678:3:3462
-11679:0:4365
-11680:3:3463
-11681:0:4365
-11682:3:3469
-11683:0:4365
-11684:3:3470
-11685:3:3474
-11686:3:3475
-11687:3:3483
-11688:3:3484
-11689:3:3488
-11690:3:3489
-11691:3:3483
-11692:3:3484
-11693:3:3488
-11694:3:3489
-11695:3:3497
-11696:3:3502
-11697:3:3506
-11698:3:3507
-11699:3:3514
-11700:3:3515
-11701:3:3526
-11702:3:3527
-11703:3:3528
-11704:3:3526
-11705:3:3527
-11706:3:3528
-11707:3:3539
-11708:3:3544
-11709:3:3545
-11710:0:4365
-11711:3:3557
-11712:0:4365
-11713:3:3558
-11714:0:4365
-11715:2:1173
-11716:0:4365
-11717:3:3559
-11718:0:4365
-11719:2:1179
-11720:0:4365
-11721:2:1180
-11722:0:4365
-11723:3:3558
-11724:0:4365
-11725:2:1181
-11726:2:1185
-11727:2:1186
-11728:2:1194
-11729:2:1195
-11730:2:1199
-11731:2:1200
-11732:2:1194
-11733:2:1195
-11734:2:1199
-11735:2:1200
-11736:2:1208
-11737:2:1213
-11738:2:1217
-11739:2:1218
-11740:2:1225
-11741:2:1226
-11742:2:1237
-11743:2:1238
-11744:2:1239
-11745:2:1237
-11746:2:1238
-11747:2:1239
-11748:2:1250
-11749:2:1255
-11750:2:1256
-11751:0:4365
-11752:3:3559
-11753:0:4365
-11754:2:1268
-11755:0:4365
-11756:3:3558
-11757:0:4365
-11758:2:1270
-11759:0:4365
-11760:3:3559
-11761:0:4365
-11762:2:1271
-11763:2:1275
-11764:2:1276
-11765:2:1284
-11766:2:1285
-11767:2:1289
-11768:2:1290
-11769:2:1284
-11770:2:1285
-11771:2:1289
-11772:2:1290
-11773:2:1298
-11774:2:1303
-11775:2:1307
-11776:2:1308
-11777:2:1315
-11778:2:1316
-11779:2:1327
-11780:2:1328
-11781:2:1329
-11782:2:1327
-11783:2:1328
-11784:2:1329
-11785:2:1340
-11786:2:1345
-11787:2:1346
-11788:0:4365
-11789:2:1358
-11790:0:4365
-11791:2:1360
-11792:0:4365
-11793:3:3558
-11794:0:4365
-11795:2:1361
-11796:0:4365
-11797:3:3559
-11798:0:4365
-11799:2:1362
-11800:2:1366
-11801:2:1367
-11802:2:1375
-11803:2:1376
-11804:2:1380
-11805:2:1381
-11806:2:1375
-11807:2:1376
-11808:2:1380
-11809:2:1381
-11810:2:1389
-11811:2:1394
-11812:2:1398
-11813:2:1399
-11814:2:1406
-11815:2:1407
-11816:2:1418
-11817:2:1419
-11818:2:1420
-11819:2:1418
-11820:2:1419
-11821:2:1420
-11822:2:1431
-11823:2:1436
-11824:2:1437
-11825:0:4365
-11826:2:1449
-11827:0:4365
-11828:3:3558
-11829:0:4365
-11830:2:1451
-11831:0:4365
-11832:3:3559
-11833:0:4365
-11834:2:1652
-11835:0:4365
-11836:2:1653
-11837:0:4365
-11838:2:1657
-11839:0:4365
-11840:2:1180
-11841:0:4365
-11842:3:3558
-11843:0:4365
-11844:2:1181
-11845:2:1185
-11846:2:1186
-11847:2:1194
-11848:2:1195
-11849:2:1199
-11850:2:1200
-11851:2:1194
-11852:2:1195
-11853:2:1196
-11854:2:1208
-11855:2:1213
-11856:2:1217
-11857:2:1218
-11858:2:1225
-11859:2:1226
-11860:2:1237
-11861:2:1238
-11862:2:1239
-11863:2:1237
-11864:2:1238
-11865:2:1239
-11866:2:1250
-11867:2:1255
-11868:2:1256
-11869:0:4365
-11870:3:3559
-11871:0:4365
-11872:2:1268
-11873:0:4365
-11874:3:3558
-11875:0:4365
-11876:2:1270
-11877:0:4365
-11878:3:3559
-11879:0:4365
-11880:2:1271
-11881:2:1275
-11882:2:1276
-11883:2:1284
-11884:2:1285
-11885:2:1289
-11886:2:1290
-11887:2:1284
-11888:2:1285
-11889:2:1289
-11890:2:1290
-11891:2:1298
-11892:2:1303
-11893:2:1307
-11894:2:1308
-11895:2:1315
-11896:2:1316
-11897:2:1327
-11898:2:1328
-11899:2:1329
-11900:2:1327
-11901:2:1328
-11902:2:1329
-11903:2:1340
-11904:2:1345
-11905:2:1346
-11906:0:4365
-11907:2:1358
-11908:0:4365
-11909:2:1454
-11910:0:4365
-11911:3:3558
-11912:0:4365
-11913:2:1455
-11914:0:4365
-11915:3:3559
-11916:0:4365
-11917:2:1652
-11918:0:4365
-11919:2:1653
-11920:0:4365
-11921:2:1657
-11922:0:4365
-11923:2:1660
-11924:0:4365
-11925:3:3558
-11926:0:4365
-11927:2:1665
-11928:2:1669
-11929:2:1670
-11930:2:1678
-11931:2:1679
-11932:2:1683
-11933:2:1684
-11934:2:1678
-11935:2:1679
-11936:2:1680
-11937:2:1692
-11938:2:1697
-11939:2:1701
-11940:2:1702
-11941:2:1709
-11942:2:1710
-11943:2:1721
-11944:2:1722
-11945:2:1723
-11946:2:1721
-11947:2:1722
-11948:2:1723
-11949:2:1734
-11950:2:1739
-11951:2:1740
-11952:0:4365
-11953:3:3559
-11954:0:4365
-11955:2:1752
-11956:0:4365
-11957:3:3558
-11958:0:4365
-11959:2:1754
-11960:0:4365
-11961:3:3559
-11962:0:4365
-11963:2:1755
-11964:2:1759
-11965:2:1760
-11966:2:1768
-11967:2:1769
-11968:2:1773
-11969:2:1774
-11970:2:1768
-11971:2:1769
-11972:2:1773
-11973:2:1774
-11974:2:1782
-11975:2:1787
-11976:2:1791
-11977:2:1792
-11978:2:1799
-11979:2:1800
-11980:2:1811
-11981:2:1812
-11982:2:1813
-11983:2:1811
-11984:2:1812
-11985:2:1813
-11986:2:1824
-11987:2:1829
-11988:2:1830
-11989:0:4365
-11990:2:1842
-11991:0:4365
-11992:3:3558
-11993:0:4365
-11994:2:1844
-11995:0:4365
-11996:3:3559
-11997:0:4365
-11998:2:1845
-11999:2:1849
-12000:2:1850
-12001:2:1858
-12002:2:1859
-12003:2:1863
-12004:2:1864
-12005:2:1858
-12006:2:1859
-12007:2:1863
-12008:2:1864
-12009:2:1872
-12010:2:1877
-12011:2:1881
-12012:2:1882
-12013:2:1889
-12014:2:1890
-12015:2:1901
-12016:2:1902
-12017:2:1903
-12018:2:1901
-12019:2:1902
-12020:2:1903
-12021:2:1914
-12022:2:1919
-12023:2:1920
-12024:0:4365
-12025:2:1932
-12026:0:4365
-12027:3:3558
-12028:0:4365
-12029:2:1934
-12030:0:4365
-12031:3:3559
-12032:0:4365
-12033:2:1935
-12034:0:4365
-12035:2:1936
-12036:0:4365
-12037:2:2129
-12038:0:4365
-12039:2:2130
-12040:0:4365
-12041:2:2134
-12042:0:4365
-12043:3:3558
-12044:0:4365
-12045:2:2136
-12046:0:4365
-12047:3:3559
-12048:0:4365
-12049:2:2137
-12050:2:2141
-12051:2:2142
-12052:2:2150
-12053:2:2151
-12054:2:2155
-12055:2:2156
-12056:2:2150
-12057:2:2151
-12058:2:2155
-12059:2:2156
-12060:2:2164
-12061:2:2169
-12062:2:2173
-12063:2:2174
-12064:2:2181
-12065:2:2182
-12066:2:2193
-12067:2:2194
-12068:2:2195
-12069:2:2193
-12070:2:2194
-12071:2:2195
-12072:2:2206
-12073:2:2211
-12074:2:2212
-12075:0:4365
-12076:2:2224
-12077:0:4365
-12078:3:3558
-12079:0:4365
-12080:2:2226
-12081:0:4365
-12082:3:3559
-12083:0:4365
-12084:2:1936
-12085:0:4365
-12086:2:2129
-12087:0:4365
-12088:2:2130
-12089:0:4365
-12090:2:2134
-12091:0:4365
-12092:3:3558
-12093:0:4365
-12094:2:2136
-12095:0:4365
-12096:3:3559
-12097:0:4365
-12098:2:2137
-12099:2:2141
-12100:2:2142
-12101:2:2150
-12102:2:2151
-12103:2:2155
-12104:2:2156
-12105:2:2150
-12106:2:2151
-12107:2:2152
-12108:2:2164
-12109:2:2169
-12110:2:2173
-12111:2:2174
-12112:2:2181
-12113:2:2182
-12114:2:2193
-12115:2:2194
-12116:2:2195
-12117:2:2193
-12118:2:2194
-12119:2:2195
-12120:2:2206
-12121:2:2211
-12122:2:2212
-12123:0:4365
-12124:2:2224
-12125:0:4365
-12126:3:3558
-12127:0:4365
-12128:2:2226
-12129:0:4365
-12130:3:3559
-12131:0:4365
-12132:2:2230
-12133:0:4365
-12134:3:3558
-12135:0:4365
-12136:2:2235
-12137:2:2239
-12138:2:2240
-12139:2:2248
-12140:2:2249
-12141:2:2253
-12142:2:2254
-12143:2:2248
-12144:2:2249
-12145:2:2250
-12146:2:2262
-12147:2:2267
-12148:2:2271
-12149:2:2272
-12150:2:2279
-12151:2:2280
-12152:2:2291
-12153:2:2292
-12154:2:2293
-12155:2:2291
-12156:2:2292
-12157:2:2293
-12158:2:2304
-12159:2:2309
-12160:2:2310
-12161:0:4365
-12162:3:3559
-12163:0:4365
-12164:2:2322
-12165:0:4365
-12166:2:1169
-12167:0:4365
-12168:3:3558
-12169:0:4365
-12170:2:1170
-12171:0:4365
-12172:3:3559
-12173:0:4365
-12174:3:3560
-12175:0:4365
-12176:3:3566
-12177:0:4365
-12178:3:3569
-12179:3:3570
-12180:3:3582
-12181:3:3583
-12182:3:3587
-12183:3:3588
-12184:3:3582
-12185:3:3583
-12186:3:3587
-12187:3:3588
-12188:3:3596
-12189:3:3601
-12190:3:3605
-12191:3:3606
-12192:3:3613
-12193:3:3614
-12194:3:3625
-12195:3:3626
-12196:3:3627
-12197:3:3625
-12198:3:3626
-12199:3:3627
-12200:3:3638
-12201:3:3643
-12202:3:3644
-12203:0:4365
-12204:3:3656
-12205:0:4365
-12206:3:3657
-12207:0:4365
-12208:2:1173
-12209:0:4365
-12210:3:3658
-12211:0:4365
-12212:2:1179
-12213:0:4365
-12214:2:1180
-12215:0:4365
-12216:3:3657
-12217:0:4365
-12218:2:1181
-12219:2:1185
-12220:2:1186
-12221:2:1194
-12222:2:1195
-12223:2:1199
-12224:2:1200
-12225:2:1194
-12226:2:1195
-12227:2:1199
-12228:2:1200
-12229:2:1208
-12230:2:1213
-12231:2:1217
-12232:2:1218
-12233:2:1225
-12234:2:1226
-12235:2:1237
-12236:2:1238
-12237:2:1239
-12238:2:1237
-12239:2:1238
-12240:2:1239
-12241:2:1250
-12242:2:1255
-12243:2:1256
-12244:0:4365
-12245:3:3658
-12246:0:4365
-12247:2:1268
-12248:0:4365
-12249:3:3657
-12250:0:4365
-12251:2:1270
-12252:0:4365
-12253:3:3658
-12254:0:4365
-12255:2:1271
-12256:2:1275
-12257:2:1276
-12258:2:1284
-12259:2:1285
-12260:2:1289
-12261:2:1290
-12262:2:1284
-12263:2:1285
-12264:2:1289
-12265:2:1290
-12266:2:1298
-12267:2:1303
-12268:2:1307
-12269:2:1308
-12270:2:1315
-12271:2:1316
-12272:2:1327
-12273:2:1328
-12274:2:1329
-12275:2:1327
-12276:2:1328
-12277:2:1329
-12278:2:1340
-12279:2:1345
-12280:2:1346
-12281:0:4365
-12282:2:1358
-12283:0:4365
-12284:2:1360
-12285:0:4365
-12286:3:3657
-12287:0:4365
-12288:2:1361
-12289:0:4365
-12290:3:3658
-12291:0:4365
-12292:2:1362
-12293:2:1366
-12294:2:1367
-12295:2:1375
-12296:2:1376
-12297:2:1380
-12298:2:1381
-12299:2:1375
-12300:2:1376
-12301:2:1380
-12302:2:1381
-12303:2:1389
-12304:2:1394
-12305:2:1398
-12306:2:1399
-12307:2:1406
-12308:2:1407
-12309:2:1418
-12310:2:1419
-12311:2:1420
-12312:2:1418
-12313:2:1419
-12314:2:1420
-12315:2:1431
-12316:2:1436
-12317:2:1437
-12318:0:4365
-12319:2:1449
-12320:0:4365
-12321:3:3657
-12322:0:4365
-12323:2:1451
-12324:0:4365
-12325:3:3658
-12326:0:4365
-12327:2:1652
-12328:0:4365
-12329:2:1653
-12330:0:4365
-12331:2:1657
-12332:0:4365
-12333:2:1180
-12334:0:4365
-12335:3:3657
-12336:0:4365
-12337:2:1181
-12338:2:1185
-12339:2:1186
-12340:2:1194
-12341:2:1195
-12342:2:1199
-12343:2:1200
-12344:2:1194
-12345:2:1195
-12346:2:1196
-12347:2:1208
-12348:2:1213
-12349:2:1217
-12350:2:1218
-12351:2:1225
-12352:2:1226
-12353:2:1237
-12354:2:1238
-12355:2:1239
-12356:2:1237
-12357:2:1238
-12358:2:1239
-12359:2:1250
-12360:2:1255
-12361:2:1256
-12362:0:4365
-12363:3:3658
-12364:0:4365
-12365:2:1268
-12366:0:4365
-12367:3:3657
-12368:0:4365
-12369:2:1270
-12370:0:4365
-12371:3:3658
-12372:0:4365
-12373:2:1271
-12374:2:1275
-12375:2:1276
-12376:2:1284
-12377:2:1285
-12378:2:1289
-12379:2:1290
-12380:2:1284
-12381:2:1285
-12382:2:1289
-12383:2:1290
-12384:2:1298
-12385:2:1303
-12386:2:1307
-12387:2:1308
-12388:2:1315
-12389:2:1316
-12390:2:1327
-12391:2:1328
-12392:2:1329
-12393:2:1327
-12394:2:1328
-12395:2:1329
-12396:2:1340
-12397:2:1345
-12398:2:1346
-12399:0:4365
-12400:2:1358
-12401:0:4365
-12402:2:1454
-12403:0:4365
-12404:3:3657
-12405:0:4365
-12406:2:1455
-12407:0:4365
-12408:3:3658
-12409:0:4365
-12410:2:1652
-12411:0:4365
-12412:2:1653
-12413:0:4365
-12414:2:1657
-12415:0:4365
-12416:2:1660
-12417:0:4365
-12418:3:3657
-12419:0:4365
-12420:2:1665
-12421:2:1669
-12422:2:1670
-12423:2:1678
-12424:2:1679
-12425:2:1683
-12426:2:1684
-12427:2:1678
-12428:2:1679
-12429:2:1680
-12430:2:1692
-12431:2:1697
-12432:2:1701
-12433:2:1702
-12434:2:1709
-12435:2:1710
-12436:2:1721
-12437:2:1722
-12438:2:1723
-12439:2:1721
-12440:2:1722
-12441:2:1723
-12442:2:1734
-12443:2:1739
-12444:2:1740
-12445:0:4365
-12446:3:3658
-12447:0:4365
-12448:2:1752
-12449:0:4365
-12450:3:3657
-12451:0:4365
-12452:2:1754
-12453:0:4365
-12454:3:3658
-12455:0:4365
-12456:2:1755
-12457:2:1759
-12458:2:1760
-12459:2:1768
-12460:2:1769
-12461:2:1773
-12462:2:1774
-12463:2:1768
-12464:2:1769
-12465:2:1773
-12466:2:1774
-12467:2:1782
-12468:2:1787
-12469:2:1791
-12470:2:1792
-12471:2:1799
-12472:2:1800
-12473:2:1811
-12474:2:1812
-12475:2:1813
-12476:2:1811
-12477:2:1812
-12478:2:1813
-12479:2:1824
-12480:2:1829
-12481:2:1830
-12482:0:4365
-12483:2:1842
-12484:0:4365
-12485:3:3657
-12486:0:4365
-12487:2:1844
-12488:0:4365
-12489:3:3658
-12490:0:4365
-12491:2:1845
-12492:2:1849
-12493:2:1850
-12494:2:1858
-12495:2:1859
-12496:2:1863
-12497:2:1864
-12498:2:1858
-12499:2:1859
-12500:2:1863
-12501:2:1864
-12502:2:1872
-12503:2:1877
-12504:2:1881
-12505:2:1882
-12506:2:1889
-12507:2:1890
-12508:2:1901
-12509:2:1902
-12510:2:1903
-12511:2:1901
-12512:2:1902
-12513:2:1903
-12514:2:1914
-12515:2:1919
-12516:2:1920
-12517:0:4365
-12518:2:1932
-12519:0:4365
-12520:3:3657
-12521:0:4365
-12522:2:1934
-12523:0:4365
-12524:3:3658
-12525:0:4365
-12526:2:1935
-12527:0:4365
-12528:2:1936
-12529:0:4365
-12530:2:2129
-12531:0:4365
-12532:2:2130
-12533:0:4365
-12534:2:2134
-12535:0:4365
-12536:3:3657
-12537:0:4365
-12538:2:2136
-12539:0:4365
-12540:3:3658
-12541:0:4365
-12542:2:2137
-12543:2:2141
-12544:2:2142
-12545:2:2150
-12546:2:2151
-12547:2:2155
-12548:2:2156
-12549:2:2150
-12550:2:2151
-12551:2:2155
-12552:2:2156
-12553:2:2164
-12554:2:2169
-12555:2:2173
-12556:2:2174
-12557:2:2181
-12558:2:2182
-12559:2:2193
-12560:2:2194
-12561:2:2195
-12562:2:2193
-12563:2:2194
-12564:2:2195
-12565:2:2206
-12566:2:2211
-12567:2:2212
-12568:0:4365
-12569:2:2224
-12570:0:4365
-12571:3:3657
-12572:0:4365
-12573:2:2226
-12574:0:4365
-12575:3:3658
-12576:0:4365
-12577:2:1936
-12578:0:4365
-12579:2:2129
-12580:0:4365
-12581:2:2130
-12582:0:4365
-12583:2:2134
-12584:0:4365
-12585:3:3657
-12586:0:4365
-12587:2:2136
-12588:0:4365
-12589:3:3658
-12590:0:4365
-12591:2:2137
-12592:2:2141
-12593:2:2142
-12594:2:2150
-12595:2:2151
-12596:2:2155
-12597:2:2156
-12598:2:2150
-12599:2:2151
-12600:2:2152
-12601:2:2164
-12602:2:2169
-12603:2:2173
-12604:2:2174
-12605:2:2181
-12606:2:2182
-12607:2:2193
-12608:2:2194
-12609:2:2195
-12610:2:2193
-12611:2:2194
-12612:2:2195
-12613:2:2206
-12614:2:2211
-12615:2:2212
-12616:0:4365
-12617:2:2224
-12618:0:4365
-12619:3:3657
-12620:0:4365
-12621:2:2226
-12622:0:4365
-12623:3:3658
-12624:0:4365
-12625:2:2230
-12626:0:4365
-12627:3:3657
-12628:0:4365
-12629:2:2235
-12630:2:2239
-12631:2:2240
-12632:2:2248
-12633:2:2249
-12634:2:2253
-12635:2:2254
-12636:2:2248
-12637:2:2249
-12638:2:2250
-12639:2:2262
-12640:2:2267
-12641:2:2271
-12642:2:2272
-12643:2:2279
-12644:2:2280
-12645:2:2291
-12646:2:2292
-12647:2:2293
-12648:2:2291
-12649:2:2292
-12650:2:2293
-12651:2:2304
-12652:2:2309
-12653:2:2310
-12654:0:4365
-12655:3:3658
-12656:0:4365
-12657:2:2322
-12658:0:4365
-12659:2:1169
-12660:0:4365
-12661:3:3657
-12662:0:4365
-12663:2:1170
-12664:0:4365
-12665:3:3658
-12666:0:4365
-12667:3:3659
-12668:0:4365
-12669:3:3665
-12670:0:4365
-12671:3:3666
-12672:0:4365
-12673:3:3667
-12674:0:4365
-12675:3:3668
-12676:0:4365
-12677:3:3669
-12678:3:3673
-12679:3:3674
-12680:3:3682
-12681:3:3683
-12682:3:3687
-12683:3:3688
-12684:3:3682
-12685:3:3683
-12686:3:3687
-12687:3:3688
-12688:3:3696
-12689:3:3701
-12690:3:3705
-12691:3:3706
-12692:3:3713
-12693:3:3714
-12694:3:3725
-12695:3:3726
-12696:3:3727
-12697:3:3725
-12698:3:3726
-12699:3:3727
-12700:3:3738
-12701:3:3743
-12702:3:3744
-12703:0:4365
-12704:3:3756
-12705:0:4365
-12706:3:3757
-12707:0:4365
-12708:2:1173
-12709:0:4365
-12710:3:3758
-12711:0:4365
-12712:2:1179
-12713:0:4365
-12714:2:1180
-12715:0:4365
-12716:3:3757
-12717:0:4365
-12718:2:1181
-12719:2:1185
-12720:2:1186
-12721:2:1194
-12722:2:1195
-12723:2:1199
-12724:2:1200
-12725:2:1194
-12726:2:1195
-12727:2:1199
-12728:2:1200
-12729:2:1208
-12730:2:1213
-12731:2:1217
-12732:2:1218
-12733:2:1225
-12734:2:1226
-12735:2:1237
-12736:2:1238
-12737:2:1239
-12738:2:1237
-12739:2:1238
-12740:2:1239
-12741:2:1250
-12742:2:1255
-12743:2:1256
-12744:0:4365
-12745:3:3758
-12746:0:4365
-12747:2:1268
-12748:0:4365
-12749:3:3757
-12750:0:4365
-12751:2:1270
-12752:0:4365
-12753:3:3758
-12754:0:4365
-12755:2:1271
-12756:2:1275
-12757:2:1276
-12758:2:1284
-12759:2:1285
-12760:2:1289
-12761:2:1290
-12762:2:1284
-12763:2:1285
-12764:2:1289
-12765:2:1290
-12766:2:1298
-12767:2:1303
-12768:2:1307
-12769:2:1308
-12770:2:1315
-12771:2:1316
-12772:2:1327
-12773:2:1328
-12774:2:1329
-12775:2:1327
-12776:2:1328
-12777:2:1329
-12778:2:1340
-12779:2:1345
-12780:2:1346
-12781:0:4365
-12782:2:1358
-12783:0:4365
-12784:2:1360
-12785:0:4365
-12786:3:3757
-12787:0:4365
-12788:2:1361
-12789:0:4365
-12790:3:3758
-12791:0:4365
-12792:2:1362
-12793:2:1366
-12794:2:1367
-12795:2:1375
-12796:2:1376
-12797:2:1380
-12798:2:1381
-12799:2:1375
-12800:2:1376
-12801:2:1380
-12802:2:1381
-12803:2:1389
-12804:2:1394
-12805:2:1398
-12806:2:1399
-12807:2:1406
-12808:2:1407
-12809:2:1418
-12810:2:1419
-12811:2:1420
-12812:2:1418
-12813:2:1419
-12814:2:1420
-12815:2:1431
-12816:2:1436
-12817:2:1437
-12818:0:4365
-12819:2:1449
-12820:0:4365
-12821:3:3757
-12822:0:4365
-12823:2:1451
-12824:0:4365
-12825:3:3758
-12826:0:4365
-12827:2:1652
-12828:0:4365
-12829:2:1653
-12830:0:4365
-12831:2:1657
-12832:0:4365
-12833:2:1180
-12834:0:4365
-12835:3:3757
-12836:0:4365
-12837:2:1181
-12838:2:1185
-12839:2:1186
-12840:2:1194
-12841:2:1195
-12842:2:1199
-12843:2:1200
-12844:2:1194
-12845:2:1195
-12846:2:1196
-12847:2:1208
-12848:2:1213
-12849:2:1217
-12850:2:1218
-12851:2:1225
-12852:2:1226
-12853:2:1237
-12854:2:1238
-12855:2:1239
-12856:2:1237
-12857:2:1238
-12858:2:1239
-12859:2:1250
-12860:2:1255
-12861:2:1256
-12862:0:4365
-12863:3:3758
-12864:0:4365
-12865:2:1268
-12866:0:4365
-12867:3:3757
-12868:0:4365
-12869:2:1270
-12870:0:4365
-12871:3:3758
-12872:0:4365
-12873:2:1271
-12874:2:1275
-12875:2:1276
-12876:2:1284
-12877:2:1285
-12878:2:1289
-12879:2:1290
-12880:2:1284
-12881:2:1285
-12882:2:1289
-12883:2:1290
-12884:2:1298
-12885:2:1303
-12886:2:1307
-12887:2:1308
-12888:2:1315
-12889:2:1316
-12890:2:1327
-12891:2:1328
-12892:2:1329
-12893:2:1327
-12894:2:1328
-12895:2:1329
-12896:2:1340
-12897:2:1345
-12898:2:1346
-12899:0:4365
-12900:2:1358
-12901:0:4365
-12902:2:1454
-12903:0:4365
-12904:3:3757
-12905:0:4365
-12906:2:1455
-12907:0:4365
-12908:3:3758
-12909:0:4365
-12910:2:1652
-12911:0:4365
-12912:2:1653
-12913:0:4365
-12914:2:1657
-12915:0:4365
-12916:2:1660
-12917:0:4365
-12918:3:3757
-12919:0:4365
-12920:2:1665
-12921:2:1669
-12922:2:1670
-12923:2:1678
-12924:2:1679
-12925:2:1683
-12926:2:1684
-12927:2:1678
-12928:2:1679
-12929:2:1680
-12930:2:1692
-12931:2:1697
-12932:2:1701
-12933:2:1702
-12934:2:1709
-12935:2:1710
-12936:2:1721
-12937:2:1722
-12938:2:1723
-12939:2:1721
-12940:2:1722
-12941:2:1723
-12942:2:1734
-12943:2:1739
-12944:2:1740
-12945:0:4365
-12946:3:3758
-12947:0:4365
-12948:2:1752
-12949:0:4365
-12950:3:3757
-12951:0:4365
-12952:2:1754
-12953:0:4365
-12954:3:3758
-12955:0:4365
-12956:2:1755
-12957:2:1759
-12958:2:1760
-12959:2:1768
-12960:2:1769
-12961:2:1773
-12962:2:1774
-12963:2:1768
-12964:2:1769
-12965:2:1773
-12966:2:1774
-12967:2:1782
-12968:2:1787
-12969:2:1791
-12970:2:1792
-12971:2:1799
-12972:2:1800
-12973:2:1811
-12974:2:1812
-12975:2:1813
-12976:2:1811
-12977:2:1812
-12978:2:1813
-12979:2:1824
-12980:2:1829
-12981:2:1830
-12982:0:4365
-12983:2:1842
-12984:0:4365
-12985:3:3757
-12986:0:4365
-12987:2:1844
-12988:0:4365
-12989:3:3758
-12990:0:4365
-12991:2:1845
-12992:2:1849
-12993:2:1850
-12994:2:1858
-12995:2:1859
-12996:2:1863
-12997:2:1864
-12998:2:1858
-12999:2:1859
-13000:2:1863
-13001:2:1864
-13002:2:1872
-13003:2:1877
-13004:2:1881
-13005:2:1882
-13006:2:1889
-13007:2:1890
-13008:2:1901
-13009:2:1902
-13010:2:1903
-13011:2:1901
-13012:2:1902
-13013:2:1903
-13014:2:1914
-13015:2:1919
-13016:2:1920
-13017:0:4365
-13018:2:1932
-13019:0:4365
-13020:3:3757
-13021:0:4365
-13022:2:1934
-13023:0:4365
-13024:3:3758
-13025:0:4365
-13026:2:1935
-13027:0:4365
-13028:2:1936
-13029:0:4365
-13030:2:2129
-13031:0:4365
-13032:2:2130
-13033:0:4365
-13034:2:2134
-13035:0:4365
-13036:3:3757
-13037:0:4365
-13038:2:2136
-13039:0:4365
-13040:3:3758
-13041:0:4365
-13042:2:2137
-13043:2:2141
-13044:2:2142
-13045:2:2150
-13046:2:2151
-13047:2:2155
-13048:2:2156
-13049:2:2150
-13050:2:2151
-13051:2:2155
-13052:2:2156
-13053:2:2164
-13054:2:2169
-13055:2:2173
-13056:2:2174
-13057:2:2181
-13058:2:2182
-13059:2:2193
-13060:2:2194
-13061:2:2195
-13062:2:2193
-13063:2:2194
-13064:2:2195
-13065:2:2206
-13066:2:2211
-13067:2:2212
-13068:0:4365
-13069:2:2224
-13070:0:4365
-13071:3:3757
-13072:0:4365
-13073:2:2226
-13074:0:4365
-13075:3:3758
-13076:0:4365
-13077:2:1936
-13078:0:4365
-13079:2:2129
-13080:0:4365
-13081:2:2130
-13082:0:4365
-13083:2:2134
-13084:0:4365
-13085:3:3757
-13086:0:4365
-13087:2:2136
-13088:0:4365
-13089:3:3758
-13090:0:4365
-13091:2:2137
-13092:2:2141
-13093:2:2142
-13094:2:2150
-13095:2:2151
-13096:2:2155
-13097:2:2156
-13098:2:2150
-13099:2:2151
-13100:2:2152
-13101:2:2164
-13102:2:2169
-13103:2:2173
-13104:2:2174
-13105:2:2181
-13106:2:2182
-13107:2:2193
-13108:2:2194
-13109:2:2195
-13110:2:2193
-13111:2:2194
-13112:2:2195
-13113:2:2206
-13114:2:2211
-13115:2:2212
-13116:0:4365
-13117:2:2224
-13118:0:4365
-13119:3:3757
-13120:0:4365
-13121:2:2226
-13122:0:4365
-13123:3:3758
-13124:0:4365
-13125:2:2230
-13126:0:4365
-13127:3:3757
-13128:0:4365
-13129:2:2235
-13130:2:2239
-13131:2:2240
-13132:2:2248
-13133:2:2249
-13134:2:2253
-13135:2:2254
-13136:2:2248
-13137:2:2249
-13138:2:2250
-13139:2:2262
-13140:2:2267
-13141:2:2271
-13142:2:2272
-13143:2:2279
-13144:2:2280
-13145:2:2291
-13146:2:2292
-13147:2:2293
-13148:2:2291
-13149:2:2292
-13150:2:2293
-13151:2:2304
-13152:2:2309
-13153:2:2310
-13154:0:4365
-13155:3:3758
-13156:0:4365
-13157:2:2322
-13158:0:4365
-13159:2:1169
-13160:0:4365
-13161:3:3757
-13162:0:4365
-13163:2:1170
-13164:0:4365
-13165:3:3758
-13166:0:4365
-13167:3:3759
-13168:0:4365
-13169:3:3972
-13170:0:4365
-13171:3:3980
-13172:0:4365
-13173:3:3981
-13174:3:3985
-13175:3:3986
-13176:3:3994
-13177:3:3995
-13178:3:3999
-13179:3:4000
-13180:3:3994
-13181:3:3995
-13182:3:3999
-13183:3:4000
-13184:3:4008
-13185:3:4013
-13186:3:4017
-13187:3:4018
-13188:3:4025
-13189:3:4026
-13190:3:4037
-13191:3:4038
-13192:3:4039
-13193:3:4037
-13194:3:4038
-13195:3:4039
-13196:3:4050
-13197:3:4055
-13198:3:4056
-13199:0:4365
-13200:3:4068
-13201:0:4365
-13202:3:4069
-13203:0:4365
-13204:2:1173
-13205:0:4365
-13206:3:4070
-13207:0:4365
-13208:2:1179
-13209:0:4365
-13210:2:1180
-13211:0:4365
-13212:3:4069
-13213:0:4365
-13214:2:1181
-13215:2:1185
-13216:2:1186
-13217:2:1194
-13218:2:1195
-13219:2:1199
-13220:2:1200
-13221:2:1194
-13222:2:1195
-13223:2:1199
-13224:2:1200
-13225:2:1208
-13226:2:1213
-13227:2:1217
-13228:2:1218
-13229:2:1225
-13230:2:1226
-13231:2:1237
-13232:2:1238
-13233:2:1239
-13234:2:1237
-13235:2:1238
-13236:2:1239
-13237:2:1250
-13238:2:1255
-13239:2:1256
-13240:0:4365
-13241:3:4070
-13242:0:4365
-13243:2:1268
-13244:0:4365
-13245:3:4069
-13246:0:4365
-13247:2:1270
-13248:0:4365
-13249:3:4070
-13250:0:4365
-13251:2:1271
-13252:2:1275
-13253:2:1276
-13254:2:1284
-13255:2:1285
-13256:2:1289
-13257:2:1290
-13258:2:1284
-13259:2:1285
-13260:2:1289
-13261:2:1290
-13262:2:1298
-13263:2:1303
-13264:2:1307
-13265:2:1308
-13266:2:1315
-13267:2:1316
-13268:2:1327
-13269:2:1328
-13270:2:1329
-13271:2:1327
-13272:2:1328
-13273:2:1329
-13274:2:1340
-13275:2:1345
-13276:2:1346
-13277:0:4365
-13278:2:1358
-13279:0:4365
-13280:2:1360
-13281:0:4365
-13282:3:4069
-13283:0:4365
-13284:2:1361
-13285:0:4365
-13286:3:4070
-13287:0:4365
-13288:2:1362
-13289:2:1366
-13290:2:1367
-13291:2:1375
-13292:2:1376
-13293:2:1380
-13294:2:1381
-13295:2:1375
-13296:2:1376
-13297:2:1380
-13298:2:1381
-13299:2:1389
-13300:2:1394
-13301:2:1398
-13302:2:1399
-13303:2:1406
-13304:2:1407
-13305:2:1418
-13306:2:1419
-13307:2:1420
-13308:2:1418
-13309:2:1419
-13310:2:1420
-13311:2:1431
-13312:2:1436
-13313:2:1437
-13314:0:4365
-13315:2:1449
-13316:0:4365
-13317:3:4069
-13318:0:4365
-13319:2:1451
-13320:0:4365
-13321:3:4070
-13322:0:4365
-13323:2:1652
-13324:0:4365
-13325:2:1653
-13326:0:4365
-13327:2:1657
-13328:0:4365
-13329:2:1180
-13330:0:4365
-13331:3:4069
-13332:0:4365
-13333:2:1181
-13334:2:1185
-13335:2:1186
-13336:2:1194
-13337:2:1195
-13338:2:1199
-13339:2:1200
-13340:2:1194
-13341:2:1195
-13342:2:1196
-13343:2:1208
-13344:2:1213
-13345:2:1217
-13346:2:1218
-13347:2:1225
-13348:2:1226
-13349:2:1237
-13350:2:1238
-13351:2:1239
-13352:2:1237
-13353:2:1238
-13354:2:1239
-13355:2:1250
-13356:2:1255
-13357:2:1256
-13358:0:4365
-13359:3:4070
-13360:0:4365
-13361:2:1268
-13362:0:4365
-13363:3:4069
-13364:0:4365
-13365:2:1270
-13366:0:4365
-13367:3:4070
-13368:0:4365
-13369:2:1271
-13370:2:1275
-13371:2:1276
-13372:2:1284
-13373:2:1285
-13374:2:1289
-13375:2:1290
-13376:2:1284
-13377:2:1285
-13378:2:1289
-13379:2:1290
-13380:2:1298
-13381:2:1303
-13382:2:1307
-13383:2:1308
-13384:2:1315
-13385:2:1316
-13386:2:1327
-13387:2:1328
-13388:2:1329
-13389:2:1327
-13390:2:1328
-13391:2:1329
-13392:2:1340
-13393:2:1345
-13394:2:1346
-13395:0:4365
-13396:2:1358
-13397:0:4365
-13398:2:1454
-13399:0:4365
-13400:3:4069
-13401:0:4365
-13402:2:1455
-13403:0:4365
-13404:3:4070
-13405:0:4365
-13406:2:1652
-13407:0:4365
-13408:2:1653
-13409:0:4365
-13410:2:1657
-13411:0:4365
-13412:2:1660
-13413:0:4365
-13414:3:4069
-13415:0:4365
-13416:2:1665
-13417:2:1669
-13418:2:1670
-13419:2:1678
-13420:2:1679
-13421:2:1683
-13422:2:1684
-13423:2:1678
-13424:2:1679
-13425:2:1680
-13426:2:1692
-13427:2:1697
-13428:2:1701
-13429:2:1702
-13430:2:1709
-13431:2:1710
-13432:2:1721
-13433:2:1722
-13434:2:1723
-13435:2:1721
-13436:2:1722
-13437:2:1723
-13438:2:1734
-13439:2:1739
-13440:2:1740
-13441:0:4365
-13442:3:4070
-13443:0:4365
-13444:2:1752
-13445:0:4365
-13446:3:4069
-13447:0:4365
-13448:2:1754
-13449:0:4365
-13450:3:4070
-13451:0:4365
-13452:2:1755
-13453:2:1759
-13454:2:1760
-13455:2:1768
-13456:2:1769
-13457:2:1773
-13458:2:1774
-13459:2:1768
-13460:2:1769
-13461:2:1773
-13462:2:1774
-13463:2:1782
-13464:2:1787
-13465:2:1791
-13466:2:1792
-13467:2:1799
-13468:2:1800
-13469:2:1811
-13470:2:1812
-13471:2:1813
-13472:2:1811
-13473:2:1812
-13474:2:1813
-13475:2:1824
-13476:2:1829
-13477:2:1830
-13478:0:4365
-13479:2:1842
-13480:0:4365
-13481:3:4069
-13482:0:4365
-13483:2:1844
-13484:0:4365
-13485:3:4070
-13486:0:4365
-13487:2:1845
-13488:2:1849
-13489:2:1850
-13490:2:1858
-13491:2:1859
-13492:2:1863
-13493:2:1864
-13494:2:1858
-13495:2:1859
-13496:2:1863
-13497:2:1864
-13498:2:1872
-13499:2:1877
-13500:2:1881
-13501:2:1882
-13502:2:1889
-13503:2:1890
-13504:2:1901
-13505:2:1902
-13506:2:1903
-13507:2:1901
-13508:2:1902
-13509:2:1903
-13510:2:1914
-13511:2:1919
-13512:2:1920
-13513:0:4365
-13514:2:1932
-13515:0:4365
-13516:3:4069
-13517:0:4365
-13518:2:1934
-13519:0:4365
-13520:3:4070
-13521:0:4365
-13522:2:1935
-13523:0:4365
-13524:2:1936
-13525:0:4365
-13526:2:2129
-13527:0:4365
-13528:2:2130
-13529:0:4365
-13530:2:2134
-13531:0:4365
-13532:3:4069
-13533:0:4365
-13534:2:2136
-13535:0:4365
-13536:3:4070
-13537:0:4365
-13538:2:2137
-13539:2:2141
-13540:2:2142
-13541:2:2150
-13542:2:2151
-13543:2:2155
-13544:2:2156
-13545:2:2150
-13546:2:2151
-13547:2:2155
-13548:2:2156
-13549:2:2164
-13550:2:2169
-13551:2:2173
-13552:2:2174
-13553:2:2181
-13554:2:2182
-13555:2:2193
-13556:2:2194
-13557:2:2195
-13558:2:2193
-13559:2:2194
-13560:2:2195
-13561:2:2206
-13562:2:2211
-13563:2:2212
-13564:0:4365
-13565:2:2224
-13566:0:4365
-13567:3:4069
-13568:0:4365
-13569:2:2226
-13570:0:4365
-13571:3:4070
-13572:0:4365
-13573:2:1936
-13574:0:4365
-13575:2:2129
-13576:0:4365
-13577:2:2130
-13578:0:4365
-13579:2:2134
-13580:0:4365
-13581:3:4069
-13582:0:4365
-13583:2:2136
-13584:0:4365
-13585:3:4070
-13586:0:4365
-13587:2:2137
-13588:2:2141
-13589:2:2142
-13590:2:2150
-13591:2:2151
-13592:2:2155
-13593:2:2156
-13594:2:2150
-13595:2:2151
-13596:2:2152
-13597:2:2164
-13598:2:2169
-13599:2:2173
-13600:2:2174
-13601:2:2181
-13602:2:2182
-13603:2:2193
-13604:2:2194
-13605:2:2195
-13606:2:2193
-13607:2:2194
-13608:2:2195
-13609:2:2206
-13610:2:2211
-13611:2:2212
-13612:0:4365
-13613:2:2224
-13614:0:4365
-13615:3:4069
-13616:0:4365
-13617:2:2226
-13618:0:4365
-13619:3:4070
-13620:0:4365
-13621:2:2230
-13622:0:4365
-13623:3:4069
-13624:0:4365
-13625:2:2235
-13626:2:2239
-13627:2:2240
-13628:2:2248
-13629:2:2249
-13630:2:2253
-13631:2:2254
-13632:2:2248
-13633:2:2249
-13634:2:2250
-13635:2:2262
-13636:2:2267
-13637:2:2271
-13638:2:2272
-13639:2:2279
-13640:2:2280
-13641:2:2291
-13642:2:2292
-13643:2:2293
-13644:2:2291
-13645:2:2292
-13646:2:2293
-13647:2:2304
-13648:2:2309
-13649:2:2310
-13650:0:4365
-13651:3:4070
-13652:0:4365
-13653:2:2322
-13654:0:4365
-13655:2:1169
-13656:0:4365
-13657:3:4069
-13658:0:4365
-13659:2:1170
-13660:0:4365
-13661:3:4070
-13662:0:4365
-13663:3:4071
-13664:0:4365
-13665:3:4081
-13666:0:4365
-13667:3:3666
-13668:0:4365
-13669:3:3667
-13670:0:4365
-13671:3:3668
-13672:0:4365
-13673:3:3669
-13674:3:3673
-13675:3:3674
-13676:3:3682
-13677:3:3683
-13678:3:3687
-13679:3:3688
-13680:3:3682
-13681:3:3683
-13682:3:3687
-13683:3:3688
-13684:3:3696
-13685:3:3701
-13686:3:3705
-13687:3:3706
-13688:3:3713
-13689:3:3714
-13690:3:3725
-13691:3:3726
-13692:3:3727
-13693:3:3725
-13694:3:3726
-13695:3:3727
-13696:3:3738
-13697:3:3743
-13698:3:3744
-13699:0:4365
-13700:3:3756
-13701:0:4365
-13702:3:3757
-13703:0:4365
-13704:2:1173
-13705:0:4365
-13706:3:3758
-13707:0:4365
-13708:2:1179
-13709:0:4365
-13710:2:1180
-13711:0:4365
-13712:3:3757
-13713:0:4365
-13714:2:1181
-13715:2:1185
-13716:2:1186
-13717:2:1194
-13718:2:1195
-13719:2:1199
-13720:2:1200
-13721:2:1194
-13722:2:1195
-13723:2:1199
-13724:2:1200
-13725:2:1208
-13726:2:1213
-13727:2:1217
-13728:2:1218
-13729:2:1225
-13730:2:1226
-13731:2:1237
-13732:2:1238
-13733:2:1239
-13734:2:1237
-13735:2:1238
-13736:2:1239
-13737:2:1250
-13738:2:1255
-13739:2:1256
-13740:0:4365
-13741:3:3758
-13742:0:4365
-13743:2:1268
-13744:0:4365
-13745:3:3757
-13746:0:4365
-13747:2:1270
-13748:0:4365
-13749:3:3758
-13750:0:4365
-13751:2:1271
-13752:2:1275
-13753:2:1276
-13754:2:1284
-13755:2:1285
-13756:2:1289
-13757:2:1290
-13758:2:1284
-13759:2:1285
-13760:2:1289
-13761:2:1290
-13762:2:1298
-13763:2:1303
-13764:2:1307
-13765:2:1308
-13766:2:1315
-13767:2:1316
-13768:2:1327
-13769:2:1328
-13770:2:1329
-13771:2:1327
-13772:2:1328
-13773:2:1329
-13774:2:1340
-13775:2:1345
-13776:2:1346
-13777:0:4365
-13778:2:1358
-13779:0:4365
-13780:2:1360
-13781:0:4365
-13782:3:3757
-13783:0:4365
-13784:2:1361
-13785:0:4365
-13786:3:3758
-13787:0:4365
-13788:2:1362
-13789:2:1366
-13790:2:1367
-13791:2:1375
-13792:2:1376
-13793:2:1380
-13794:2:1381
-13795:2:1375
-13796:2:1376
-13797:2:1380
-13798:2:1381
-13799:2:1389
-13800:2:1394
-13801:2:1398
-13802:2:1399
-13803:2:1406
-13804:2:1407
-13805:2:1418
-13806:2:1419
-13807:2:1420
-13808:2:1418
-13809:2:1419
-13810:2:1420
-13811:2:1431
-13812:2:1436
-13813:2:1437
-13814:0:4365
-13815:2:1449
-13816:0:4365
-13817:3:3757
-13818:0:4365
-13819:2:1451
-13820:0:4365
-13821:3:3758
-13822:0:4365
-13823:2:1652
-13824:0:4365
-13825:2:1653
-13826:0:4365
-13827:2:1657
-13828:0:4365
-13829:2:1180
-13830:0:4365
-13831:3:3757
-13832:0:4365
-13833:2:1181
-13834:2:1185
-13835:2:1186
-13836:2:1194
-13837:2:1195
-13838:2:1199
-13839:2:1200
-13840:2:1194
-13841:2:1195
-13842:2:1196
-13843:2:1208
-13844:2:1213
-13845:2:1217
-13846:2:1218
-13847:2:1225
-13848:2:1226
-13849:2:1237
-13850:2:1238
-13851:2:1239
-13852:2:1237
-13853:2:1238
-13854:2:1239
-13855:2:1250
-13856:2:1255
-13857:2:1256
-13858:0:4365
-13859:3:3758
-13860:0:4365
-13861:2:1268
-13862:0:4365
-13863:3:3757
-13864:0:4365
-13865:2:1270
-13866:0:4365
-13867:3:3758
-13868:0:4365
-13869:2:1271
-13870:2:1275
-13871:2:1276
-13872:2:1284
-13873:2:1285
-13874:2:1289
-13875:2:1290
-13876:2:1284
-13877:2:1285
-13878:2:1289
-13879:2:1290
-13880:2:1298
-13881:2:1303
-13882:2:1307
-13883:2:1308
-13884:2:1315
-13885:2:1316
-13886:2:1327
-13887:2:1328
-13888:2:1329
-13889:2:1327
-13890:2:1328
-13891:2:1329
-13892:2:1340
-13893:2:1345
-13894:2:1346
-13895:0:4365
-13896:2:1358
-13897:0:4365
-13898:2:1454
-13899:0:4365
-13900:3:3757
-13901:0:4365
-13902:2:1455
-13903:0:4365
-13904:3:3758
-13905:0:4365
-13906:2:1652
-13907:0:4365
-13908:2:1653
-13909:0:4365
-13910:2:1657
-13911:0:4365
-13912:2:1660
-13913:0:4365
-13914:3:3757
-13915:0:4365
-13916:2:1665
-13917:2:1669
-13918:2:1670
-13919:2:1678
-13920:2:1679
-13921:2:1683
-13922:2:1684
-13923:2:1678
-13924:2:1679
-13925:2:1680
-13926:2:1692
-13927:2:1697
-13928:2:1701
-13929:2:1702
-13930:2:1709
-13931:2:1710
-13932:2:1721
-13933:2:1722
-13934:2:1723
-13935:2:1721
-13936:2:1722
-13937:2:1723
-13938:2:1734
-13939:2:1739
-13940:2:1740
-13941:0:4365
-13942:3:3758
-13943:0:4365
-13944:2:1752
-13945:0:4365
-13946:3:3757
-13947:0:4365
-13948:2:1754
-13949:0:4365
-13950:3:3758
-13951:0:4365
-13952:2:1755
-13953:2:1759
-13954:2:1760
-13955:2:1768
-13956:2:1769
-13957:2:1773
-13958:2:1774
-13959:2:1768
-13960:2:1769
-13961:2:1773
-13962:2:1774
-13963:2:1782
-13964:2:1787
-13965:2:1791
-13966:2:1792
-13967:2:1799
-13968:2:1800
-13969:2:1811
-13970:2:1812
-13971:2:1813
-13972:2:1811
-13973:2:1812
-13974:2:1813
-13975:2:1824
-13976:2:1829
-13977:2:1830
-13978:0:4365
-13979:2:1842
-13980:0:4365
-13981:3:3757
-13982:0:4365
-13983:2:1844
-13984:0:4365
-13985:3:3758
-13986:0:4365
-13987:2:1845
-13988:2:1849
-13989:2:1850
-13990:2:1858
-13991:2:1859
-13992:2:1863
-13993:2:1864
-13994:2:1858
-13995:2:1859
-13996:2:1863
-13997:2:1864
-13998:2:1872
-13999:2:1877
-14000:2:1881
-14001:2:1882
-14002:2:1889
-14003:2:1890
-14004:2:1901
-14005:2:1902
-14006:2:1903
-14007:2:1901
-14008:2:1902
-14009:2:1903
-14010:2:1914
-14011:2:1919
-14012:2:1920
-14013:0:4365
-14014:2:1932
-14015:0:4365
-14016:3:3757
-14017:0:4365
-14018:2:1934
-14019:0:4365
-14020:3:3758
-14021:0:4365
-14022:2:1935
-14023:0:4365
-14024:2:1936
-14025:0:4365
-14026:2:2129
-14027:0:4365
-14028:2:2130
-14029:0:4365
-14030:2:2134
-14031:0:4365
-14032:3:3757
-14033:0:4365
-14034:2:2136
-14035:0:4365
-14036:3:3758
-14037:0:4365
-14038:2:2137
-14039:2:2141
-14040:2:2142
-14041:2:2150
-14042:2:2151
-14043:2:2155
-14044:2:2156
-14045:2:2150
-14046:2:2151
-14047:2:2155
-14048:2:2156
-14049:2:2164
-14050:2:2169
-14051:2:2173
-14052:2:2174
-14053:2:2181
-14054:2:2182
-14055:2:2193
-14056:2:2194
-14057:2:2195
-14058:2:2193
-14059:2:2194
-14060:2:2195
-14061:2:2206
-14062:2:2211
-14063:2:2212
-14064:0:4365
-14065:2:2224
-14066:0:4365
-14067:3:3757
-14068:0:4365
-14069:2:2226
-14070:0:4365
-14071:3:3758
-14072:0:4365
-14073:2:1936
-14074:0:4365
-14075:2:2129
-14076:0:4365
-14077:2:2130
-14078:0:4365
-14079:2:2134
-14080:0:4365
-14081:3:3757
-14082:0:4365
-14083:2:2136
-14084:0:4365
-14085:3:3758
-14086:0:4365
-14087:2:2137
-14088:2:2141
-14089:2:2142
-14090:2:2150
-14091:2:2151
-14092:2:2155
-14093:2:2156
-14094:2:2150
-14095:2:2151
-14096:2:2152
-14097:2:2164
-14098:2:2169
-14099:2:2173
-14100:2:2174
-14101:2:2181
-14102:2:2182
-14103:2:2193
-14104:2:2194
-14105:2:2195
-14106:2:2193
-14107:2:2194
-14108:2:2195
-14109:2:2206
-14110:2:2211
-14111:2:2212
-14112:0:4365
-14113:2:2224
-14114:0:4365
-14115:3:3757
-14116:0:4365
-14117:2:2226
-14118:0:4365
-14119:3:3758
-14120:0:4365
-14121:2:2230
-14122:0:4365
-14123:3:3757
-14124:0:4365
-14125:2:2235
-14126:2:2239
-14127:2:2240
-14128:2:2248
-14129:2:2249
-14130:2:2253
-14131:2:2254
-14132:2:2248
-14133:2:2249
-14134:2:2250
-14135:2:2262
-14136:2:2267
-14137:2:2271
-14138:2:2272
-14139:2:2279
-14140:2:2280
-14141:2:2291
-14142:2:2292
-14143:2:2293
-14144:2:2291
-14145:2:2292
-14146:2:2293
-14147:2:2304
-14148:2:2309
-14149:2:2310
-14150:0:4365
-14151:3:3758
-14152:0:4365
-14153:2:2322
-14154:0:4365
-14155:2:1169
-14156:0:4365
-14157:3:3757
-14158:0:4365
-14159:2:1170
-14160:0:4365
-14161:3:3758
-14162:0:4365
-14163:3:3759
-14164:0:4365
-14165:3:3972
-14166:0:4365
-14167:3:4077
-14168:0:4365
-14169:3:4078
-14170:0:4365
-14171:3:4082
-14172:0:4365
-14173:3:4088
-14174:0:4365
-14175:3:4092
-14176:3:4093
-14177:3:4097
-14178:3:4101
-14179:3:4102
-14180:3:4097
-14181:3:4101
-14182:3:4102
-14183:3:4106
-14184:3:4114
-14185:3:4115
-14186:3:4120
-14187:3:4127
-14188:3:4128
-14189:3:4127
-14190:3:4128
-14191:3:4135
-14192:3:4140
-14193:0:4365
-14194:3:4151
-14195:0:4365
-14196:3:4155
-14197:3:4156
-14198:3:4160
-14199:3:4164
-14200:3:4165
-14201:3:4160
-14202:3:4164
-14203:3:4165
-14204:3:4169
-14205:3:4177
-14206:3:4178
-14207:3:4183
-14208:3:4190
-14209:3:4191
-14210:3:4190
-14211:3:4191
-14212:3:4198
-14213:3:4203
-14214:0:4365
-14215:3:4151
-14216:0:4365
-14217:3:4155
-14218:3:4156
-14219:3:4160
-14220:3:4164
-14221:3:4165
-14222:3:4160
-14223:3:4164
-14224:3:4165
-14225:3:4169
-14226:3:4177
-14227:3:4178
-14228:3:4183
-14229:3:4190
-14230:3:4191
-14231:3:4190
-14232:3:4191
-14233:3:4198
-14234:3:4203
-14235:0:4365
-14236:3:4214
-14237:0:4365
-14238:3:4222
-14239:3:4223
-14240:3:4227
-14241:3:4231
-14242:3:4232
-14243:3:4227
-14244:3:4231
-14245:3:4232
-14246:3:4236
-14247:3:4244
-14248:3:4245
-14249:3:4250
-14250:3:4257
-14251:3:4258
-14252:3:4257
-14253:3:4258
-14254:3:4265
-14255:3:4270
-14256:0:4365
-14257:3:4285
-14258:0:4365
-14259:3:4286
-14260:0:4365
-14261:2:1173
-14262:0:4365
-14263:3:4287
-14264:0:4365
-14265:2:1179
-14266:0:4365
-14267:2:1180
-14268:0:4365
-14269:3:4286
-14270:0:4365
-14271:2:1181
-14272:2:1185
-14273:2:1186
-14274:2:1194
-14275:2:1195
-14276:2:1199
-14277:2:1200
-14278:2:1194
-14279:2:1195
-14280:2:1199
-14281:2:1200
-14282:2:1208
-14283:2:1213
-14284:2:1217
-14285:2:1218
-14286:2:1225
-14287:2:1226
-14288:2:1237
-14289:2:1238
-14290:2:1239
-14291:2:1237
-14292:2:1238
-14293:2:1239
-14294:2:1250
-14295:2:1255
-14296:2:1256
-14297:0:4365
-14298:3:4287
-14299:0:4365
-14300:2:1268
-14301:0:4365
-14302:3:4286
-14303:0:4365
-14304:2:1270
-14305:0:4365
-14306:3:4287
-14307:0:4365
-14308:2:1271
-14309:2:1275
-14310:2:1276
-14311:2:1284
-14312:2:1285
-14313:2:1289
-14314:2:1290
-14315:2:1284
-14316:2:1285
-14317:2:1289
-14318:2:1290
-14319:2:1298
-14320:2:1303
-14321:2:1307
-14322:2:1308
-14323:2:1315
-14324:2:1316
-14325:2:1327
-14326:2:1328
-14327:2:1329
-14328:2:1327
-14329:2:1328
-14330:2:1329
-14331:2:1340
-14332:2:1345
-14333:2:1346
-14334:0:4365
-14335:2:1358
-14336:0:4365
-14337:2:1360
-14338:0:4365
-14339:3:4286
-14340:0:4365
-14341:2:1361
-14342:0:4365
-14343:3:4287
-14344:0:4365
-14345:2:1362
-14346:2:1366
-14347:2:1367
-14348:2:1375
-14349:2:1376
-14350:2:1380
-14351:2:1381
-14352:2:1375
-14353:2:1376
-14354:2:1380
-14355:2:1381
-14356:2:1389
-14357:2:1394
-14358:2:1398
-14359:2:1399
-14360:2:1406
-14361:2:1407
-14362:2:1418
-14363:2:1419
-14364:2:1420
-14365:2:1418
-14366:2:1419
-14367:2:1420
-14368:2:1431
-14369:2:1436
-14370:2:1437
-14371:0:4365
-14372:2:1449
-14373:0:4365
-14374:3:4286
-14375:0:4365
-14376:2:1451
-14377:0:4365
-14378:3:4287
-14379:0:4365
-14380:2:1652
-14381:0:4365
-14382:2:1653
-14383:0:4365
-14384:2:1657
-14385:0:4365
-14386:2:1180
-14387:0:4365
-14388:3:4286
-14389:0:4365
-14390:2:1181
-14391:2:1185
-14392:2:1186
-14393:2:1194
-14394:2:1195
-14395:2:1199
-14396:2:1200
-14397:2:1194
-14398:2:1195
-14399:2:1196
-14400:2:1208
-14401:2:1213
-14402:2:1217
-14403:2:1218
-14404:2:1225
-14405:2:1226
-14406:2:1237
-14407:2:1238
-14408:2:1239
-14409:2:1237
-14410:2:1238
-14411:2:1239
-14412:2:1250
-14413:2:1255
-14414:2:1256
-14415:0:4365
-14416:3:4287
-14417:0:4365
-14418:2:1268
-14419:0:4365
-14420:3:4286
-14421:0:4365
-14422:2:1270
-14423:0:4365
-14424:3:4287
-14425:0:4365
-14426:2:1271
-14427:2:1275
-14428:2:1276
-14429:2:1284
-14430:2:1285
-14431:2:1289
-14432:2:1290
-14433:2:1284
-14434:2:1285
-14435:2:1289
-14436:2:1290
-14437:2:1298
-14438:2:1303
-14439:2:1307
-14440:2:1308
-14441:2:1315
-14442:2:1316
-14443:2:1327
-14444:2:1328
-14445:2:1329
-14446:2:1327
-14447:2:1328
-14448:2:1329
-14449:2:1340
-14450:2:1345
-14451:2:1346
-14452:0:4365
-14453:2:1358
-14454:0:4365
-14455:2:1454
-14456:0:4365
-14457:3:4286
-14458:0:4365
-14459:2:1455
-14460:0:4365
-14461:3:4287
-14462:0:4365
-14463:2:1652
-14464:0:4365
-14465:2:1653
-14466:0:4365
-14467:2:1657
-14468:0:4365
-14469:2:1660
-14470:0:4365
-14471:3:4286
-14472:0:4365
-14473:2:1665
-14474:2:1669
-14475:2:1670
-14476:2:1678
-14477:2:1679
-14478:2:1683
-14479:2:1684
-14480:2:1678
-14481:2:1679
-14482:2:1680
-14483:2:1692
-14484:2:1697
-14485:2:1701
-14486:2:1702
-14487:2:1709
-14488:2:1710
-14489:2:1721
-14490:2:1722
-14491:2:1723
-14492:2:1721
-14493:2:1722
-14494:2:1723
-14495:2:1734
-14496:2:1739
-14497:2:1740
-14498:0:4365
-14499:3:4287
-14500:0:4365
-14501:2:1752
-14502:0:4365
-14503:3:4286
-14504:0:4365
-14505:2:1754
-14506:0:4365
-14507:3:4287
-14508:0:4365
-14509:2:1755
-14510:2:1759
-14511:2:1760
-14512:2:1768
-14513:2:1769
-14514:2:1773
-14515:2:1774
-14516:2:1768
-14517:2:1769
-14518:2:1773
-14519:2:1774
-14520:2:1782
-14521:2:1787
-14522:2:1791
-14523:2:1792
-14524:2:1799
-14525:2:1800
-14526:2:1811
-14527:2:1812
-14528:2:1813
-14529:2:1811
-14530:2:1812
-14531:2:1813
-14532:2:1824
-14533:2:1829
-14534:2:1830
-14535:0:4365
-14536:2:1842
-14537:0:4365
-14538:3:4286
-14539:0:4365
-14540:2:1844
-14541:0:4365
-14542:3:4287
-14543:0:4365
-14544:2:1845
-14545:2:1849
-14546:2:1850
-14547:2:1858
-14548:2:1859
-14549:2:1863
-14550:2:1864
-14551:2:1858
-14552:2:1859
-14553:2:1863
-14554:2:1864
-14555:2:1872
-14556:2:1877
-14557:2:1881
-14558:2:1882
-14559:2:1889
-14560:2:1890
-14561:2:1901
-14562:2:1902
-14563:2:1903
-14564:2:1901
-14565:2:1902
-14566:2:1903
-14567:2:1914
-14568:2:1919
-14569:2:1920
-14570:0:4365
-14571:2:1932
-14572:0:4365
-14573:3:4286
-14574:0:4365
-14575:2:1934
-14576:0:4365
-14577:3:4287
-14578:0:4365
-14579:2:1935
-14580:0:4365
-14581:2:1936
-14582:0:4365
-14583:2:2129
-14584:0:4365
-14585:2:2130
-14586:0:4365
-14587:2:2134
-14588:0:4365
-14589:3:4286
-14590:0:4365
-14591:2:2136
-14592:0:4365
-14593:3:4287
-14594:0:4365
-14595:2:2137
-14596:2:2141
-14597:2:2142
-14598:2:2150
-14599:2:2151
-14600:2:2155
-14601:2:2156
-14602:2:2150
-14603:2:2151
-14604:2:2155
-14605:2:2156
-14606:2:2164
-14607:2:2169
-14608:2:2173
-14609:2:2174
-14610:2:2181
-14611:2:2182
-14612:2:2193
-14613:2:2194
-14614:2:2195
-14615:2:2193
-14616:2:2194
-14617:2:2195
-14618:2:2206
-14619:2:2211
-14620:2:2212
-14621:0:4365
-14622:2:2224
-14623:0:4365
-14624:3:4286
-14625:0:4365
-14626:2:2226
-14627:0:4365
-14628:3:4287
-14629:0:4365
-14630:2:1936
-14631:0:4365
-14632:2:2129
-14633:0:4365
-14634:2:2130
-14635:0:4365
-14636:2:2134
-14637:0:4365
-14638:3:4286
-14639:0:4365
-14640:2:2136
-14641:0:4365
-14642:3:4287
-14643:0:4365
-14644:2:2137
-14645:2:2141
-14646:2:2142
-14647:2:2150
-14648:2:2151
-14649:2:2155
-14650:2:2156
-14651:2:2150
-14652:2:2151
-14653:2:2152
-14654:2:2164
-14655:2:2169
-14656:2:2173
-14657:2:2174
-14658:2:2181
-14659:2:2182
-14660:2:2193
-14661:2:2194
-14662:2:2195
-14663:2:2193
-14664:2:2194
-14665:2:2195
-14666:2:2206
-14667:2:2211
-14668:2:2212
-14669:0:4365
-14670:2:2224
-14671:0:4365
-14672:3:4286
-14673:0:4365
-14674:2:2226
-14675:0:4365
-14676:3:4287
-14677:0:4365
-14678:2:2230
-14679:0:4365
-14680:3:4286
-14681:0:4365
-14682:2:2235
-14683:2:2239
-14684:2:2240
-14685:2:2248
-14686:2:2249
-14687:2:2253
-14688:2:2254
-14689:2:2248
-14690:2:2249
-14691:2:2250
-14692:2:2262
-14693:2:2267
-14694:2:2271
-14695:2:2272
-14696:2:2279
-14697:2:2280
-14698:2:2291
-14699:2:2292
-14700:2:2293
-14701:2:2291
-14702:2:2292
-14703:2:2293
-14704:2:2304
-14705:2:2309
-14706:2:2310
-14707:0:4365
-14708:3:4287
-14709:0:4365
-14710:2:2322
-14711:0:4365
-14712:2:1169
-14713:0:4365
-14714:3:4286
-14715:0:4365
-14716:2:1170
-14717:0:4365
-14718:3:4287
-14719:0:4365
-14720:3:4288
-14721:0:4365
-14722:3:4294
-14723:0:4365
-14724:3:4295
-14725:0:4365
-14726:3:2338
-14727:0:4365
-14728:3:2339
-14729:3:2343
-14730:3:2344
-14731:3:2352
-14732:3:2353
-14733:3:2357
-14734:3:2358
-14735:3:2352
-14736:3:2353
-14737:3:2357
-14738:3:2358
-14739:3:2366
-14740:3:2371
-14741:3:2375
-14742:3:2376
-14743:3:2383
-14744:3:2384
-14745:3:2395
-14746:3:2396
-14747:3:2397
-14748:3:2395
-14749:3:2396
-14750:3:2397
-14751:3:2408
-14752:3:2413
-14753:3:2414
-14754:0:4365
-14755:3:2426
-14756:0:4365
-14757:3:2427
-14758:0:4365
-14759:2:1173
-14760:0:4365
-14761:3:2428
-14762:0:4365
-14763:2:1179
-14764:0:4365
-14765:2:1180
-14766:0:4365
-14767:3:2427
-14768:0:4365
-14769:2:1181
-14770:2:1185
-14771:2:1186
-14772:2:1194
-14773:2:1195
-14774:2:1199
-14775:2:1200
-14776:2:1194
-14777:2:1195
-14778:2:1199
-14779:2:1200
-14780:2:1208
-14781:2:1213
-14782:2:1217
-14783:2:1218
-14784:2:1225
-14785:2:1226
-14786:2:1237
-14787:2:1238
-14788:2:1239
-14789:2:1237
-14790:2:1238
-14791:2:1239
-14792:2:1250
-14793:2:1255
-14794:2:1256
-14795:0:4365
-14796:3:2428
-14797:0:4365
-14798:2:1268
-14799:0:4365
-14800:3:2427
-14801:0:4365
-14802:2:1270
-14803:0:4365
-14804:3:2428
-14805:0:4365
-14806:2:1271
-14807:2:1275
-14808:2:1276
-14809:2:1284
-14810:2:1285
-14811:2:1289
-14812:2:1290
-14813:2:1284
-14814:2:1285
-14815:2:1289
-14816:2:1290
-14817:2:1298
-14818:2:1303
-14819:2:1307
-14820:2:1308
-14821:2:1315
-14822:2:1316
-14823:2:1327
-14824:2:1328
-14825:2:1329
-14826:2:1327
-14827:2:1328
-14828:2:1329
-14829:2:1340
-14830:2:1345
-14831:2:1346
-14832:0:4365
-14833:2:1358
-14834:0:4365
-14835:2:1360
-14836:0:4365
-14837:3:2427
-14838:0:4365
-14839:2:1361
-14840:0:4365
-14841:3:2428
-14842:0:4365
-14843:2:1362
-14844:2:1366
-14845:2:1367
-14846:2:1375
-14847:2:1376
-14848:2:1380
-14849:2:1381
-14850:2:1375
-14851:2:1376
-14852:2:1380
-14853:2:1381
-14854:2:1389
-14855:2:1394
-14856:2:1398
-14857:2:1399
-14858:2:1406
-14859:2:1407
-14860:2:1418
-14861:2:1419
-14862:2:1420
-14863:2:1418
-14864:2:1419
-14865:2:1420
-14866:2:1431
-14867:2:1436
-14868:2:1437
-14869:0:4365
-14870:2:1449
-14871:0:4365
-14872:3:2427
-14873:0:4365
-14874:2:1451
-14875:0:4365
-14876:3:2428
-14877:0:4365
-14878:2:1652
-14879:0:4365
-14880:2:1653
-14881:0:4365
-14882:2:1657
-14883:0:4365
-14884:2:1180
-14885:0:4365
-14886:3:2427
-14887:0:4365
-14888:2:1181
-14889:2:1185
-14890:2:1186
-14891:2:1194
-14892:2:1195
-14893:2:1199
-14894:2:1200
-14895:2:1194
-14896:2:1195
-14897:2:1196
-14898:2:1208
-14899:2:1213
-14900:2:1217
-14901:2:1218
-14902:2:1225
-14903:2:1226
-14904:2:1237
-14905:2:1238
-14906:2:1239
-14907:2:1237
-14908:2:1238
-14909:2:1239
-14910:2:1250
-14911:2:1255
-14912:2:1256
-14913:0:4365
-14914:3:2428
-14915:0:4365
-14916:2:1268
-14917:0:4365
-14918:3:2427
-14919:0:4365
-14920:2:1270
-14921:0:4365
-14922:3:2428
-14923:0:4365
-14924:2:1271
-14925:2:1275
-14926:2:1276
-14927:2:1284
-14928:2:1285
-14929:2:1289
-14930:2:1290
-14931:2:1284
-14932:2:1285
-14933:2:1289
-14934:2:1290
-14935:2:1298
-14936:2:1303
-14937:2:1307
-14938:2:1308
-14939:2:1315
-14940:2:1316
-14941:2:1327
-14942:2:1328
-14943:2:1329
-14944:2:1327
-14945:2:1328
-14946:2:1329
-14947:2:1340
-14948:2:1345
-14949:2:1346
-14950:0:4365
-14951:2:1358
-14952:0:4365
-14953:2:1454
-14954:0:4365
-14955:3:2427
-14956:0:4365
-14957:2:1455
-14958:0:4365
-14959:3:2428
-14960:0:4365
-14961:2:1652
-14962:0:4365
-14963:2:1653
-14964:0:4365
-14965:2:1657
-14966:0:4365
-14967:2:1660
-14968:0:4365
-14969:3:2427
-14970:0:4365
-14971:2:1665
-14972:2:1669
-14973:2:1670
-14974:2:1678
-14975:2:1679
-14976:2:1683
-14977:2:1684
-14978:2:1678
-14979:2:1679
-14980:2:1680
-14981:2:1692
-14982:2:1697
-14983:2:1701
-14984:2:1702
-14985:2:1709
-14986:2:1710
-14987:2:1721
-14988:2:1722
-14989:2:1723
-14990:2:1721
-14991:2:1722
-14992:2:1723
-14993:2:1734
-14994:2:1739
-14995:2:1740
-14996:0:4365
-14997:3:2428
-14998:0:4365
-14999:2:1752
-15000:0:4365
-15001:3:2427
-15002:0:4365
-15003:2:1754
-15004:0:4365
-15005:3:2428
-15006:0:4365
-15007:2:1755
-15008:2:1759
-15009:2:1760
-15010:2:1768
-15011:2:1769
-15012:2:1773
-15013:2:1774
-15014:2:1768
-15015:2:1769
-15016:2:1773
-15017:2:1774
-15018:2:1782
-15019:2:1787
-15020:2:1791
-15021:2:1792
-15022:2:1799
-15023:2:1800
-15024:2:1811
-15025:2:1812
-15026:2:1813
-15027:2:1811
-15028:2:1812
-15029:2:1813
-15030:2:1824
-15031:2:1829
-15032:2:1830
-15033:0:4365
-15034:2:1842
-15035:0:4365
-15036:3:2427
-15037:0:4365
-15038:2:1844
-15039:0:4363
-15040:3:2428
-15041:0:4369
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.define b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.log
deleted file mode 100644 (file)
index d503334..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_nested.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-Depth=    3880 States=    1e+06 Transitions= 1.18e+07 Memory=   527.190        t=   9.48 R=   1e+05
-Depth=    3880 States=    2e+06 Transitions= 2.39e+07 Memory=   588.225        t=   19.6 R=   1e+05
-Depth=    3880 States=    3e+06 Transitions= 3.61e+07 Memory=   649.260        t=   30.3 R=   1e+05
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.spin.input
deleted file mode 100644 (file)
index c94928c..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-#define READER_NEST_LEVEL 1
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-#define get_pid()      ((_pid < 1) -> 0 : 1)
-#elif defined(TEST_SIGNAL_ON_READ)
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-#else
-#define get_pid()      (_pid)
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               if
-               :: get_readerid() == 0 ->
-progress_reader:
-                       skip;
-               fi;
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               if
-               :: get_readerid() == 0 ->
-progress_reader:
-                       skip;
-               fi;
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_nested.spin.input.trail
deleted file mode 100644 (file)
index 6f29ad2..0000000
+++ /dev/null
@@ -1,11161 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1660
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1665
-243:2:1669
-244:2:1670
-245:2:1678
-246:2:1679
-247:2:1683
-248:2:1684
-249:2:1678
-250:2:1679
-251:2:1680
-252:2:1692
-253:2:1697
-254:2:1701
-255:2:1702
-256:2:1709
-257:2:1710
-258:2:1721
-259:2:1722
-260:2:1723
-261:2:1721
-262:2:1722
-263:2:1723
-264:2:1734
-265:2:1739
-266:2:1740
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1752
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1754
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1755
-279:2:1759
-280:2:1760
-281:2:1768
-282:2:1769
-283:2:1773
-284:2:1774
-285:2:1768
-286:2:1769
-287:2:1773
-288:2:1774
-289:2:1782
-290:2:1787
-291:2:1791
-292:2:1792
-293:2:1799
-294:2:1800
-295:2:1811
-296:2:1812
-297:2:1813
-298:2:1811
-299:2:1812
-300:2:1813
-301:2:1824
-302:2:1829
-303:2:1830
-304:0:4365
-305:2:1842
-306:0:4365
-307:3:2528
-308:0:4365
-309:2:1844
-310:0:4365
-311:3:2529
-312:0:4365
-313:2:1845
-314:2:1849
-315:2:1850
-316:2:1858
-317:2:1859
-318:2:1863
-319:2:1864
-320:2:1858
-321:2:1859
-322:2:1863
-323:2:1864
-324:2:1872
-325:2:1877
-326:2:1881
-327:2:1882
-328:2:1889
-329:2:1890
-330:2:1901
-331:2:1902
-332:2:1903
-333:2:1901
-334:2:1902
-335:2:1903
-336:2:1914
-337:2:1919
-338:2:1920
-339:0:4365
-340:2:1932
-341:0:4365
-342:3:2528
-343:0:4365
-344:2:1934
-345:0:4365
-346:3:2529
-347:0:4365
-348:2:1935
-349:0:4365
-350:2:1936
-351:0:4365
-352:2:2129
-353:0:4365
-354:2:2130
-355:0:4365
-356:2:2134
-357:0:4365
-358:3:2528
-359:0:4365
-360:2:2136
-361:0:4365
-362:3:2529
-363:0:4365
-364:2:2137
-365:2:2141
-366:2:2142
-367:2:2150
-368:2:2151
-369:2:2155
-370:2:2156
-371:2:2150
-372:2:2151
-373:2:2155
-374:2:2156
-375:2:2164
-376:2:2169
-377:2:2173
-378:2:2174
-379:2:2181
-380:2:2182
-381:2:2193
-382:2:2194
-383:2:2195
-384:2:2193
-385:2:2194
-386:2:2195
-387:2:2206
-388:2:2211
-389:2:2212
-390:0:4365
-391:2:2224
-392:0:4365
-393:3:2528
-394:0:4365
-395:2:2226
-396:0:4365
-397:3:2529
-398:0:4365
-399:2:2230
-400:0:4365
-401:3:2528
-402:0:4365
-403:2:2235
-404:2:2239
-405:2:2240
-406:2:2248
-407:2:2249
-408:2:2253
-409:2:2254
-410:2:2248
-411:2:2249
-412:2:2250
-413:2:2262
-414:2:2267
-415:2:2271
-416:2:2272
-417:2:2279
-418:2:2280
-419:2:2291
-420:2:2292
-421:2:2293
-422:2:2291
-423:2:2292
-424:2:2293
-425:2:2304
-426:2:2309
-427:2:2310
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:2322
-432:0:4365
-433:2:1169
-434:0:4365
-435:3:2528
-436:0:4365
-437:2:1170
-438:0:4365
-439:3:2529
-440:0:4365
-441:3:2530
-442:0:4365
-443:3:2536
-444:0:4365
-445:3:2537
-446:0:4365
-447:3:2547
-448:0:4365
-449:3:2548
-450:0:4365
-451:3:2552
-452:3:2553
-453:3:2557
-454:3:2561
-455:3:2562
-456:3:2557
-457:3:2561
-458:3:2562
-459:3:2566
-460:3:2574
-461:3:2575
-462:3:2580
-463:3:2587
-464:3:2588
-465:3:2587
-466:3:2588
-467:3:2595
-468:3:2600
-469:0:4365
-470:3:2611
-471:0:4365
-472:3:2615
-473:3:2616
-474:3:2620
-475:3:2624
-476:3:2625
-477:3:2620
-478:3:2624
-479:3:2625
-480:3:2629
-481:3:2637
-482:3:2638
-483:3:2643
-484:3:2650
-485:3:2651
-486:3:2650
-487:3:2651
-488:3:2658
-489:3:2663
-490:0:4365
-491:3:2611
-492:0:4365
-493:3:2615
-494:3:2616
-495:3:2620
-496:3:2624
-497:3:2625
-498:3:2620
-499:3:2624
-500:3:2625
-501:3:2629
-502:3:2637
-503:3:2638
-504:3:2643
-505:3:2650
-506:3:2651
-507:3:2650
-508:3:2651
-509:3:2658
-510:3:2663
-511:0:4365
-512:3:2674
-513:0:4365
-514:3:2682
-515:3:2683
-516:3:2687
-517:3:2691
-518:3:2692
-519:3:2687
-520:3:2691
-521:3:2692
-522:3:2696
-523:3:2704
-524:3:2705
-525:3:2710
-526:3:2717
-527:3:2718
-528:3:2717
-529:3:2718
-530:3:2725
-531:3:2730
-532:0:4365
-533:3:2745
-534:0:4365
-535:3:2746
-536:0:4365
-537:2:1173
-538:0:4365
-539:3:2747
-540:0:4365
-541:2:1179
-542:0:4365
-543:2:1180
-544:0:4365
-545:3:2746
-546:0:4365
-547:2:1181
-548:2:1185
-549:2:1186
-550:2:1194
-551:2:1195
-552:2:1199
-553:2:1200
-554:2:1194
-555:2:1195
-556:2:1199
-557:2:1200
-558:2:1208
-559:2:1213
-560:2:1217
-561:2:1218
-562:2:1225
-563:2:1226
-564:2:1237
-565:2:1238
-566:2:1239
-567:2:1237
-568:2:1238
-569:2:1239
-570:2:1250
-571:2:1255
-572:2:1256
-573:0:4365
-574:3:2747
-575:0:4365
-576:2:1268
-577:0:4365
-578:3:2746
-579:0:4365
-580:2:1270
-581:0:4365
-582:3:2747
-583:0:4365
-584:2:1271
-585:2:1275
-586:2:1276
-587:2:1284
-588:2:1285
-589:2:1289
-590:2:1290
-591:2:1284
-592:2:1285
-593:2:1289
-594:2:1290
-595:2:1298
-596:2:1303
-597:2:1307
-598:2:1308
-599:2:1315
-600:2:1316
-601:2:1327
-602:2:1328
-603:2:1329
-604:2:1327
-605:2:1328
-606:2:1329
-607:2:1340
-608:2:1345
-609:2:1346
-610:0:4365
-611:2:1358
-612:0:4365
-613:2:1360
-614:0:4365
-615:3:2746
-616:0:4365
-617:2:1361
-618:0:4365
-619:3:2747
-620:0:4365
-621:2:1362
-622:2:1366
-623:2:1367
-624:2:1375
-625:2:1376
-626:2:1380
-627:2:1381
-628:2:1375
-629:2:1376
-630:2:1380
-631:2:1381
-632:2:1389
-633:2:1394
-634:2:1398
-635:2:1399
-636:2:1406
-637:2:1407
-638:2:1418
-639:2:1419
-640:2:1420
-641:2:1418
-642:2:1419
-643:2:1420
-644:2:1431
-645:2:1436
-646:2:1437
-647:0:4365
-648:2:1449
-649:0:4365
-650:3:2746
-651:0:4365
-652:2:1451
-653:0:4365
-654:3:2747
-655:0:4365
-656:2:1652
-657:0:4365
-658:2:1653
-659:0:4365
-660:2:1657
-661:0:4365
-662:2:1660
-663:0:4365
-664:3:2746
-665:0:4365
-666:2:1665
-667:2:1669
-668:2:1670
-669:2:1678
-670:2:1679
-671:2:1683
-672:2:1684
-673:2:1678
-674:2:1679
-675:2:1680
-676:2:1692
-677:2:1697
-678:2:1701
-679:2:1702
-680:2:1709
-681:2:1710
-682:2:1721
-683:2:1722
-684:2:1723
-685:2:1721
-686:2:1722
-687:2:1723
-688:2:1734
-689:2:1739
-690:2:1740
-691:0:4365
-692:3:2747
-693:0:4365
-694:2:1752
-695:0:4365
-696:3:2746
-697:0:4365
-698:2:1754
-699:0:4365
-700:3:2747
-701:0:4365
-702:2:1755
-703:2:1759
-704:2:1760
-705:2:1768
-706:2:1769
-707:2:1773
-708:2:1774
-709:2:1768
-710:2:1769
-711:2:1773
-712:2:1774
-713:2:1782
-714:2:1787
-715:2:1791
-716:2:1792
-717:2:1799
-718:2:1800
-719:2:1811
-720:2:1812
-721:2:1813
-722:2:1811
-723:2:1812
-724:2:1813
-725:2:1824
-726:2:1829
-727:2:1830
-728:0:4365
-729:2:1842
-730:0:4365
-731:3:2746
-732:0:4365
-733:2:1844
-734:0:4365
-735:3:2747
-736:0:4365
-737:2:1845
-738:2:1849
-739:2:1850
-740:2:1858
-741:2:1859
-742:2:1863
-743:2:1864
-744:2:1858
-745:2:1859
-746:2:1863
-747:2:1864
-748:2:1872
-749:2:1877
-750:2:1881
-751:2:1882
-752:2:1889
-753:2:1890
-754:2:1901
-755:2:1902
-756:2:1903
-757:2:1901
-758:2:1902
-759:2:1903
-760:2:1914
-761:2:1919
-762:2:1920
-763:0:4365
-764:2:1932
-765:0:4365
-766:3:2746
-767:0:4365
-768:2:1934
-769:0:4365
-770:3:2747
-771:0:4365
-772:2:1935
-773:0:4365
-774:2:1936
-775:0:4365
-776:2:2129
-777:0:4365
-778:2:2130
-779:0:4365
-780:2:2134
-781:0:4365
-782:3:2746
-783:0:4365
-784:2:2136
-785:0:4365
-786:3:2747
-787:0:4365
-788:2:2137
-789:2:2141
-790:2:2142
-791:2:2150
-792:2:2151
-793:2:2155
-794:2:2156
-795:2:2150
-796:2:2151
-797:2:2155
-798:2:2156
-799:2:2164
-800:2:2169
-801:2:2173
-802:2:2174
-803:2:2181
-804:2:2182
-805:2:2193
-806:2:2194
-807:2:2195
-808:2:2193
-809:2:2194
-810:2:2195
-811:2:2206
-812:2:2211
-813:2:2212
-814:0:4365
-815:2:2224
-816:0:4365
-817:3:2746
-818:0:4365
-819:2:2226
-820:0:4365
-821:3:2747
-822:0:4365
-823:2:2230
-824:0:4365
-825:3:2746
-826:0:4365
-827:2:2235
-828:2:2239
-829:2:2240
-830:2:2248
-831:2:2249
-832:2:2253
-833:2:2254
-834:2:2248
-835:2:2249
-836:2:2250
-837:2:2262
-838:2:2267
-839:2:2271
-840:2:2272
-841:2:2279
-842:2:2280
-843:2:2291
-844:2:2292
-845:2:2293
-846:2:2291
-847:2:2292
-848:2:2293
-849:2:2304
-850:2:2309
-851:2:2310
-852:0:4365
-853:3:2747
-854:0:4365
-855:2:2322
-856:0:4365
-857:2:1169
-858:0:4365
-859:3:2746
-860:0:4365
-861:2:1170
-862:0:4365
-863:3:2747
-864:0:4365
-865:3:2748
-866:0:4365
-867:3:2754
-868:0:4365
-869:3:2755
-870:3:2759
-871:3:2760
-872:3:2768
-873:3:2769
-874:3:2773
-875:3:2774
-876:3:2768
-877:3:2769
-878:3:2773
-879:3:2774
-880:3:2782
-881:3:2787
-882:3:2791
-883:3:2792
-884:3:2799
-885:3:2800
-886:3:2811
-887:3:2812
-888:3:2813
-889:3:2811
-890:3:2812
-891:3:2813
-892:3:2824
-893:3:2829
-894:3:2830
-895:0:4365
-896:3:2842
-897:0:4365
-898:3:2843
-899:0:4365
-900:2:1173
-901:0:4365
-902:3:2844
-903:0:4365
-904:2:1179
-905:0:4365
-906:2:1180
-907:0:4365
-908:3:2843
-909:0:4365
-910:2:1181
-911:2:1185
-912:2:1186
-913:2:1194
-914:2:1195
-915:2:1199
-916:2:1200
-917:2:1194
-918:2:1195
-919:2:1199
-920:2:1200
-921:2:1208
-922:2:1213
-923:2:1217
-924:2:1218
-925:2:1225
-926:2:1226
-927:2:1237
-928:2:1238
-929:2:1239
-930:2:1237
-931:2:1238
-932:2:1239
-933:2:1250
-934:2:1255
-935:2:1256
-936:0:4365
-937:3:2844
-938:0:4365
-939:2:1268
-940:0:4365
-941:3:2843
-942:0:4365
-943:2:1270
-944:0:4365
-945:3:2844
-946:0:4365
-947:2:1271
-948:2:1275
-949:2:1276
-950:2:1284
-951:2:1285
-952:2:1289
-953:2:1290
-954:2:1284
-955:2:1285
-956:2:1289
-957:2:1290
-958:2:1298
-959:2:1303
-960:2:1307
-961:2:1308
-962:2:1315
-963:2:1316
-964:2:1327
-965:2:1328
-966:2:1329
-967:2:1327
-968:2:1328
-969:2:1329
-970:2:1340
-971:2:1345
-972:2:1346
-973:0:4365
-974:2:1358
-975:0:4365
-976:2:1360
-977:0:4365
-978:3:2843
-979:0:4365
-980:2:1361
-981:0:4365
-982:3:2844
-983:0:4365
-984:2:1362
-985:2:1366
-986:2:1367
-987:2:1375
-988:2:1376
-989:2:1380
-990:2:1381
-991:2:1375
-992:2:1376
-993:2:1380
-994:2:1381
-995:2:1389
-996:2:1394
-997:2:1398
-998:2:1399
-999:2:1406
-1000:2:1407
-1001:2:1418
-1002:2:1419
-1003:2:1420
-1004:2:1418
-1005:2:1419
-1006:2:1420
-1007:2:1431
-1008:2:1436
-1009:2:1437
-1010:0:4365
-1011:2:1449
-1012:0:4365
-1013:3:2843
-1014:0:4365
-1015:2:1451
-1016:0:4365
-1017:3:2844
-1018:0:4365
-1019:2:1652
-1020:0:4365
-1021:2:1653
-1022:0:4365
-1023:2:1657
-1024:0:4365
-1025:2:1660
-1026:0:4365
-1027:3:2843
-1028:0:4365
-1029:2:1665
-1030:2:1669
-1031:2:1670
-1032:2:1678
-1033:2:1679
-1034:2:1683
-1035:2:1684
-1036:2:1678
-1037:2:1679
-1038:2:1680
-1039:2:1692
-1040:2:1697
-1041:2:1701
-1042:2:1702
-1043:2:1709
-1044:2:1710
-1045:2:1721
-1046:2:1722
-1047:2:1723
-1048:2:1721
-1049:2:1722
-1050:2:1723
-1051:2:1734
-1052:2:1739
-1053:2:1740
-1054:0:4365
-1055:3:2844
-1056:0:4365
-1057:2:1752
-1058:0:4365
-1059:3:2843
-1060:0:4365
-1061:2:1754
-1062:0:4365
-1063:3:2844
-1064:0:4365
-1065:2:1755
-1066:2:1759
-1067:2:1760
-1068:2:1768
-1069:2:1769
-1070:2:1773
-1071:2:1774
-1072:2:1768
-1073:2:1769
-1074:2:1773
-1075:2:1774
-1076:2:1782
-1077:2:1787
-1078:2:1791
-1079:2:1792
-1080:2:1799
-1081:2:1800
-1082:2:1811
-1083:2:1812
-1084:2:1813
-1085:2:1811
-1086:2:1812
-1087:2:1813
-1088:2:1824
-1089:2:1829
-1090:2:1830
-1091:0:4365
-1092:2:1842
-1093:0:4365
-1094:3:2843
-1095:0:4365
-1096:2:1844
-1097:0:4365
-1098:3:2844
-1099:0:4365
-1100:2:1845
-1101:2:1849
-1102:2:1850
-1103:2:1858
-1104:2:1859
-1105:2:1863
-1106:2:1864
-1107:2:1858
-1108:2:1859
-1109:2:1863
-1110:2:1864
-1111:2:1872
-1112:2:1877
-1113:2:1881
-1114:2:1882
-1115:2:1889
-1116:2:1890
-1117:2:1901
-1118:2:1902
-1119:2:1903
-1120:2:1901
-1121:2:1902
-1122:2:1903
-1123:2:1914
-1124:2:1919
-1125:2:1920
-1126:0:4365
-1127:2:1932
-1128:0:4365
-1129:3:2843
-1130:0:4365
-1131:2:1934
-1132:0:4365
-1133:3:2844
-1134:0:4365
-1135:2:1935
-1136:0:4365
-1137:2:1936
-1138:0:4365
-1139:2:2129
-1140:0:4365
-1141:2:2130
-1142:0:4365
-1143:2:2134
-1144:0:4365
-1145:3:2843
-1146:0:4365
-1147:2:2136
-1148:0:4365
-1149:3:2844
-1150:0:4365
-1151:2:2137
-1152:2:2141
-1153:2:2142
-1154:2:2150
-1155:2:2151
-1156:2:2155
-1157:2:2156
-1158:2:2150
-1159:2:2151
-1160:2:2155
-1161:2:2156
-1162:2:2164
-1163:2:2169
-1164:2:2173
-1165:2:2174
-1166:2:2181
-1167:2:2182
-1168:2:2193
-1169:2:2194
-1170:2:2195
-1171:2:2193
-1172:2:2194
-1173:2:2195
-1174:2:2206
-1175:2:2211
-1176:2:2212
-1177:0:4365
-1178:2:2224
-1179:0:4365
-1180:3:2843
-1181:0:4365
-1182:2:2226
-1183:0:4365
-1184:3:2844
-1185:0:4365
-1186:2:2230
-1187:0:4365
-1188:3:2843
-1189:0:4365
-1190:2:2235
-1191:2:2239
-1192:2:2240
-1193:2:2248
-1194:2:2249
-1195:2:2253
-1196:2:2254
-1197:2:2248
-1198:2:2249
-1199:2:2250
-1200:2:2262
-1201:2:2267
-1202:2:2271
-1203:2:2272
-1204:2:2279
-1205:2:2280
-1206:2:2291
-1207:2:2292
-1208:2:2293
-1209:2:2291
-1210:2:2292
-1211:2:2293
-1212:2:2304
-1213:2:2309
-1214:2:2310
-1215:0:4365
-1216:3:2844
-1217:0:4365
-1218:2:2322
-1219:0:4365
-1220:2:1169
-1221:0:4365
-1222:3:2843
-1223:0:4365
-1224:2:1170
-1225:0:4365
-1226:3:2844
-1227:0:4365
-1228:3:2845
-1229:0:4365
-1230:3:2851
-1231:0:4365
-1232:3:2854
-1233:3:2855
-1234:3:2867
-1235:3:2868
-1236:3:2872
-1237:3:2873
-1238:3:2867
-1239:3:2868
-1240:3:2872
-1241:3:2873
-1242:3:2881
-1243:3:2886
-1244:3:2890
-1245:3:2891
-1246:3:2898
-1247:3:2899
-1248:3:2910
-1249:3:2911
-1250:3:2912
-1251:3:2910
-1252:3:2911
-1253:3:2912
-1254:3:2923
-1255:3:2928
-1256:3:2929
-1257:0:4365
-1258:3:2941
-1259:0:4365
-1260:3:2942
-1261:0:4365
-1262:2:1173
-1263:0:4365
-1264:3:2943
-1265:0:4365
-1266:2:1179
-1267:0:4365
-1268:2:1180
-1269:0:4365
-1270:3:2942
-1271:0:4365
-1272:2:1181
-1273:2:1185
-1274:2:1186
-1275:2:1194
-1276:2:1195
-1277:2:1199
-1278:2:1200
-1279:2:1194
-1280:2:1195
-1281:2:1199
-1282:2:1200
-1283:2:1208
-1284:2:1213
-1285:2:1217
-1286:2:1218
-1287:2:1225
-1288:2:1226
-1289:2:1237
-1290:2:1238
-1291:2:1239
-1292:2:1237
-1293:2:1238
-1294:2:1239
-1295:2:1250
-1296:2:1255
-1297:2:1256
-1298:0:4365
-1299:3:2943
-1300:0:4365
-1301:2:1268
-1302:0:4365
-1303:3:2942
-1304:0:4365
-1305:2:1270
-1306:0:4365
-1307:3:2943
-1308:0:4365
-1309:2:1271
-1310:2:1275
-1311:2:1276
-1312:2:1284
-1313:2:1285
-1314:2:1289
-1315:2:1290
-1316:2:1284
-1317:2:1285
-1318:2:1289
-1319:2:1290
-1320:2:1298
-1321:2:1303
-1322:2:1307
-1323:2:1308
-1324:2:1315
-1325:2:1316
-1326:2:1327
-1327:2:1328
-1328:2:1329
-1329:2:1327
-1330:2:1328
-1331:2:1329
-1332:2:1340
-1333:2:1345
-1334:2:1346
-1335:0:4365
-1336:2:1358
-1337:0:4365
-1338:2:1360
-1339:0:4365
-1340:3:2942
-1341:0:4365
-1342:2:1361
-1343:0:4365
-1344:3:2943
-1345:0:4365
-1346:2:1362
-1347:2:1366
-1348:2:1367
-1349:2:1375
-1350:2:1376
-1351:2:1380
-1352:2:1381
-1353:2:1375
-1354:2:1376
-1355:2:1380
-1356:2:1381
-1357:2:1389
-1358:2:1394
-1359:2:1398
-1360:2:1399
-1361:2:1406
-1362:2:1407
-1363:2:1418
-1364:2:1419
-1365:2:1420
-1366:2:1418
-1367:2:1419
-1368:2:1420
-1369:2:1431
-1370:2:1436
-1371:2:1437
-1372:0:4365
-1373:2:1449
-1374:0:4365
-1375:3:2942
-1376:0:4365
-1377:2:1451
-1378:0:4365
-1379:3:2943
-1380:0:4365
-1381:2:1652
-1382:0:4365
-1383:2:1653
-1384:0:4365
-1385:2:1657
-1386:0:4365
-1387:2:1660
-1388:0:4365
-1389:3:2942
-1390:0:4365
-1391:2:1665
-1392:2:1669
-1393:2:1670
-1394:2:1678
-1395:2:1679
-1396:2:1683
-1397:2:1684
-1398:2:1678
-1399:2:1679
-1400:2:1680
-1401:2:1692
-1402:2:1697
-1403:2:1701
-1404:2:1702
-1405:2:1709
-1406:2:1710
-1407:2:1721
-1408:2:1722
-1409:2:1723
-1410:2:1721
-1411:2:1722
-1412:2:1723
-1413:2:1734
-1414:2:1739
-1415:2:1740
-1416:0:4365
-1417:3:2943
-1418:0:4365
-1419:2:1752
-1420:0:4365
-1421:3:2942
-1422:0:4365
-1423:2:1754
-1424:0:4365
-1425:3:2943
-1426:0:4365
-1427:2:1755
-1428:2:1759
-1429:2:1760
-1430:2:1768
-1431:2:1769
-1432:2:1773
-1433:2:1774
-1434:2:1768
-1435:2:1769
-1436:2:1773
-1437:2:1774
-1438:2:1782
-1439:2:1787
-1440:2:1791
-1441:2:1792
-1442:2:1799
-1443:2:1800
-1444:2:1811
-1445:2:1812
-1446:2:1813
-1447:2:1811
-1448:2:1812
-1449:2:1813
-1450:2:1824
-1451:2:1829
-1452:2:1830
-1453:0:4365
-1454:2:1842
-1455:0:4365
-1456:3:2942
-1457:0:4365
-1458:2:1844
-1459:0:4365
-1460:3:2943
-1461:0:4365
-1462:2:1845
-1463:2:1849
-1464:2:1850
-1465:2:1858
-1466:2:1859
-1467:2:1863
-1468:2:1864
-1469:2:1858
-1470:2:1859
-1471:2:1863
-1472:2:1864
-1473:2:1872
-1474:2:1877
-1475:2:1881
-1476:2:1882
-1477:2:1889
-1478:2:1890
-1479:2:1901
-1480:2:1902
-1481:2:1903
-1482:2:1901
-1483:2:1902
-1484:2:1903
-1485:2:1914
-1486:2:1919
-1487:2:1920
-1488:0:4365
-1489:2:1932
-1490:0:4365
-1491:3:2942
-1492:0:4365
-1493:2:1934
-1494:0:4365
-1495:3:2943
-1496:0:4365
-1497:2:1935
-1498:0:4365
-1499:2:1936
-1500:0:4365
-1501:2:2129
-1502:0:4365
-1503:2:2130
-1504:0:4365
-1505:2:2134
-1506:0:4365
-1507:3:2942
-1508:0:4365
-1509:2:2136
-1510:0:4365
-1511:3:2943
-1512:0:4365
-1513:2:2137
-1514:2:2141
-1515:2:2142
-1516:2:2150
-1517:2:2151
-1518:2:2155
-1519:2:2156
-1520:2:2150
-1521:2:2151
-1522:2:2155
-1523:2:2156
-1524:2:2164
-1525:2:2169
-1526:2:2173
-1527:2:2174
-1528:2:2181
-1529:2:2182
-1530:2:2193
-1531:2:2194
-1532:2:2195
-1533:2:2193
-1534:2:2194
-1535:2:2195
-1536:2:2206
-1537:2:2211
-1538:2:2212
-1539:0:4365
-1540:2:2224
-1541:0:4365
-1542:3:2942
-1543:0:4365
-1544:2:2226
-1545:0:4365
-1546:3:2943
-1547:0:4365
-1548:2:2230
-1549:0:4365
-1550:3:2942
-1551:0:4365
-1552:2:2235
-1553:2:2239
-1554:2:2240
-1555:2:2248
-1556:2:2249
-1557:2:2253
-1558:2:2254
-1559:2:2248
-1560:2:2249
-1561:2:2250
-1562:2:2262
-1563:2:2267
-1564:2:2271
-1565:2:2272
-1566:2:2279
-1567:2:2280
-1568:2:2291
-1569:2:2292
-1570:2:2293
-1571:2:2291
-1572:2:2292
-1573:2:2293
-1574:2:2304
-1575:2:2309
-1576:2:2310
-1577:0:4365
-1578:3:2943
-1579:0:4365
-1580:2:2322
-1581:0:4365
-1582:2:1169
-1583:0:4365
-1584:3:2942
-1585:0:4365
-1586:2:1170
-1587:0:4365
-1588:3:2943
-1589:0:4365
-1590:3:2944
-1591:0:4365
-1592:3:2950
-1593:0:4365
-1594:3:2951
-1595:0:4365
-1596:3:2952
-1597:0:4365
-1598:3:2953
-1599:0:4365
-1600:3:2954
-1601:3:2958
-1602:3:2959
-1603:3:2967
-1604:3:2968
-1605:3:2972
-1606:3:2973
-1607:3:2967
-1608:3:2968
-1609:3:2972
-1610:3:2973
-1611:3:2981
-1612:3:2986
-1613:3:2990
-1614:3:2991
-1615:3:2998
-1616:3:2999
-1617:3:3010
-1618:3:3011
-1619:3:3012
-1620:3:3010
-1621:3:3011
-1622:3:3012
-1623:3:3023
-1624:3:3028
-1625:3:3029
-1626:0:4365
-1627:3:3041
-1628:0:4365
-1629:3:3042
-1630:0:4365
-1631:2:1173
-1632:0:4365
-1633:3:3043
-1634:0:4365
-1635:2:1179
-1636:0:4365
-1637:2:1180
-1638:0:4365
-1639:3:3042
-1640:0:4365
-1641:2:1181
-1642:2:1185
-1643:2:1186
-1644:2:1194
-1645:2:1195
-1646:2:1199
-1647:2:1200
-1648:2:1194
-1649:2:1195
-1650:2:1199
-1651:2:1200
-1652:2:1208
-1653:2:1213
-1654:2:1217
-1655:2:1218
-1656:2:1225
-1657:2:1226
-1658:2:1237
-1659:2:1238
-1660:2:1239
-1661:2:1237
-1662:2:1238
-1663:2:1239
-1664:2:1250
-1665:2:1255
-1666:2:1256
-1667:0:4365
-1668:3:3043
-1669:0:4365
-1670:2:1268
-1671:0:4365
-1672:3:3042
-1673:0:4365
-1674:2:1270
-1675:0:4365
-1676:3:3043
-1677:0:4365
-1678:2:1271
-1679:2:1275
-1680:2:1276
-1681:2:1284
-1682:2:1285
-1683:2:1289
-1684:2:1290
-1685:2:1284
-1686:2:1285
-1687:2:1289
-1688:2:1290
-1689:2:1298
-1690:2:1303
-1691:2:1307
-1692:2:1308
-1693:2:1315
-1694:2:1316
-1695:2:1327
-1696:2:1328
-1697:2:1329
-1698:2:1327
-1699:2:1328
-1700:2:1329
-1701:2:1340
-1702:2:1345
-1703:2:1346
-1704:0:4365
-1705:2:1358
-1706:0:4365
-1707:2:1360
-1708:0:4365
-1709:3:3042
-1710:0:4365
-1711:2:1361
-1712:0:4365
-1713:3:3043
-1714:0:4365
-1715:2:1362
-1716:2:1366
-1717:2:1367
-1718:2:1375
-1719:2:1376
-1720:2:1380
-1721:2:1381
-1722:2:1375
-1723:2:1376
-1724:2:1380
-1725:2:1381
-1726:2:1389
-1727:2:1394
-1728:2:1398
-1729:2:1399
-1730:2:1406
-1731:2:1407
-1732:2:1418
-1733:2:1419
-1734:2:1420
-1735:2:1418
-1736:2:1419
-1737:2:1420
-1738:2:1431
-1739:2:1436
-1740:2:1437
-1741:0:4365
-1742:2:1449
-1743:0:4365
-1744:3:3042
-1745:0:4365
-1746:2:1451
-1747:0:4365
-1748:3:3043
-1749:0:4365
-1750:2:1652
-1751:0:4365
-1752:2:1653
-1753:0:4365
-1754:2:1657
-1755:0:4365
-1756:2:1660
-1757:0:4365
-1758:3:3042
-1759:0:4365
-1760:2:1665
-1761:2:1669
-1762:2:1670
-1763:2:1678
-1764:2:1679
-1765:2:1683
-1766:2:1684
-1767:2:1678
-1768:2:1679
-1769:2:1680
-1770:2:1692
-1771:2:1697
-1772:2:1701
-1773:2:1702
-1774:2:1709
-1775:2:1710
-1776:2:1721
-1777:2:1722
-1778:2:1723
-1779:2:1721
-1780:2:1722
-1781:2:1723
-1782:2:1734
-1783:2:1739
-1784:2:1740
-1785:0:4365
-1786:3:3043
-1787:0:4365
-1788:2:1752
-1789:0:4365
-1790:3:3042
-1791:0:4365
-1792:2:1754
-1793:0:4365
-1794:3:3043
-1795:0:4365
-1796:2:1755
-1797:2:1759
-1798:2:1760
-1799:2:1768
-1800:2:1769
-1801:2:1773
-1802:2:1774
-1803:2:1768
-1804:2:1769
-1805:2:1773
-1806:2:1774
-1807:2:1782
-1808:2:1787
-1809:2:1791
-1810:2:1792
-1811:2:1799
-1812:2:1800
-1813:2:1811
-1814:2:1812
-1815:2:1813
-1816:2:1811
-1817:2:1812
-1818:2:1813
-1819:2:1824
-1820:2:1829
-1821:2:1830
-1822:0:4365
-1823:2:1842
-1824:0:4365
-1825:3:3042
-1826:0:4365
-1827:2:1844
-1828:0:4365
-1829:3:3043
-1830:0:4365
-1831:2:1845
-1832:2:1849
-1833:2:1850
-1834:2:1858
-1835:2:1859
-1836:2:1863
-1837:2:1864
-1838:2:1858
-1839:2:1859
-1840:2:1863
-1841:2:1864
-1842:2:1872
-1843:2:1877
-1844:2:1881
-1845:2:1882
-1846:2:1889
-1847:2:1890
-1848:2:1901
-1849:2:1902
-1850:2:1903
-1851:2:1901
-1852:2:1902
-1853:2:1903
-1854:2:1914
-1855:2:1919
-1856:2:1920
-1857:0:4365
-1858:2:1932
-1859:0:4365
-1860:3:3042
-1861:0:4365
-1862:2:1934
-1863:0:4365
-1864:3:3043
-1865:0:4365
-1866:2:1935
-1867:0:4365
-1868:2:1936
-1869:0:4365
-1870:2:2129
-1871:0:4365
-1872:2:2130
-1873:0:4365
-1874:2:2134
-1875:0:4365
-1876:3:3042
-1877:0:4365
-1878:2:2136
-1879:0:4365
-1880:3:3043
-1881:0:4365
-1882:2:2137
-1883:2:2141
-1884:2:2142
-1885:2:2150
-1886:2:2151
-1887:2:2155
-1888:2:2156
-1889:2:2150
-1890:2:2151
-1891:2:2155
-1892:2:2156
-1893:2:2164
-1894:2:2169
-1895:2:2173
-1896:2:2174
-1897:2:2181
-1898:2:2182
-1899:2:2193
-1900:2:2194
-1901:2:2195
-1902:2:2193
-1903:2:2194
-1904:2:2195
-1905:2:2206
-1906:2:2211
-1907:2:2212
-1908:0:4365
-1909:2:2224
-1910:0:4365
-1911:3:3042
-1912:0:4365
-1913:2:2226
-1914:0:4365
-1915:3:3043
-1916:0:4365
-1917:2:2230
-1918:0:4365
-1919:3:3042
-1920:0:4365
-1921:2:2235
-1922:2:2239
-1923:2:2240
-1924:2:2248
-1925:2:2249
-1926:2:2253
-1927:2:2254
-1928:2:2248
-1929:2:2249
-1930:2:2250
-1931:2:2262
-1932:2:2267
-1933:2:2271
-1934:2:2272
-1935:2:2279
-1936:2:2280
-1937:2:2291
-1938:2:2292
-1939:2:2293
-1940:2:2291
-1941:2:2292
-1942:2:2293
-1943:2:2304
-1944:2:2309
-1945:2:2310
-1946:0:4365
-1947:3:3043
-1948:0:4365
-1949:2:2322
-1950:0:4365
-1951:2:1169
-1952:0:4365
-1953:3:3042
-1954:0:4365
-1955:2:1170
-1956:0:4365
-1957:3:3043
-1958:0:4365
-1959:3:3044
-1960:0:4365
-1961:3:3257
-1962:0:4365
-1963:3:3265
-1964:0:4365
-1965:3:3266
-1966:3:3270
-1967:3:3271
-1968:3:3279
-1969:3:3280
-1970:3:3284
-1971:3:3285
-1972:3:3279
-1973:3:3280
-1974:3:3284
-1975:3:3285
-1976:3:3293
-1977:3:3298
-1978:3:3302
-1979:3:3303
-1980:3:3310
-1981:3:3311
-1982:3:3322
-1983:3:3323
-1984:3:3324
-1985:3:3322
-1986:3:3323
-1987:3:3324
-1988:3:3335
-1989:3:3340
-1990:3:3341
-1991:0:4365
-1992:3:3353
-1993:0:4365
-1994:3:3354
-1995:0:4365
-1996:2:1173
-1997:0:4365
-1998:3:3355
-1999:0:4365
-2000:2:1179
-2001:0:4365
-2002:2:1180
-2003:0:4365
-2004:3:3354
-2005:0:4365
-2006:2:1181
-2007:2:1185
-2008:2:1186
-2009:2:1194
-2010:2:1195
-2011:2:1199
-2012:2:1200
-2013:2:1194
-2014:2:1195
-2015:2:1199
-2016:2:1200
-2017:2:1208
-2018:2:1213
-2019:2:1217
-2020:2:1218
-2021:2:1225
-2022:2:1226
-2023:2:1237
-2024:2:1238
-2025:2:1239
-2026:2:1237
-2027:2:1238
-2028:2:1239
-2029:2:1250
-2030:2:1255
-2031:2:1256
-2032:0:4365
-2033:3:3355
-2034:0:4365
-2035:2:1268
-2036:0:4365
-2037:3:3354
-2038:0:4365
-2039:2:1270
-2040:0:4365
-2041:3:3355
-2042:0:4365
-2043:2:1271
-2044:2:1275
-2045:2:1276
-2046:2:1284
-2047:2:1285
-2048:2:1289
-2049:2:1290
-2050:2:1284
-2051:2:1285
-2052:2:1289
-2053:2:1290
-2054:2:1298
-2055:2:1303
-2056:2:1307
-2057:2:1308
-2058:2:1315
-2059:2:1316
-2060:2:1327
-2061:2:1328
-2062:2:1329
-2063:2:1327
-2064:2:1328
-2065:2:1329
-2066:2:1340
-2067:2:1345
-2068:2:1346
-2069:0:4365
-2070:2:1358
-2071:0:4365
-2072:2:1360
-2073:0:4365
-2074:3:3354
-2075:0:4365
-2076:2:1361
-2077:0:4365
-2078:3:3355
-2079:0:4365
-2080:2:1362
-2081:2:1366
-2082:2:1367
-2083:2:1375
-2084:2:1376
-2085:2:1380
-2086:2:1381
-2087:2:1375
-2088:2:1376
-2089:2:1380
-2090:2:1381
-2091:2:1389
-2092:2:1394
-2093:2:1398
-2094:2:1399
-2095:2:1406
-2096:2:1407
-2097:2:1418
-2098:2:1419
-2099:2:1420
-2100:2:1418
-2101:2:1419
-2102:2:1420
-2103:2:1431
-2104:2:1436
-2105:2:1437
-2106:0:4365
-2107:2:1449
-2108:0:4365
-2109:3:3354
-2110:0:4365
-2111:2:1451
-2112:0:4365
-2113:3:3355
-2114:0:4365
-2115:2:1652
-2116:0:4365
-2117:2:1653
-2118:0:4365
-2119:2:1657
-2120:0:4365
-2121:2:1660
-2122:0:4365
-2123:3:3354
-2124:0:4365
-2125:2:1665
-2126:2:1669
-2127:2:1670
-2128:2:1678
-2129:2:1679
-2130:2:1683
-2131:2:1684
-2132:2:1678
-2133:2:1679
-2134:2:1680
-2135:2:1692
-2136:2:1697
-2137:2:1701
-2138:2:1702
-2139:2:1709
-2140:2:1710
-2141:2:1721
-2142:2:1722
-2143:2:1723
-2144:2:1721
-2145:2:1722
-2146:2:1723
-2147:2:1734
-2148:2:1739
-2149:2:1740
-2150:0:4365
-2151:3:3355
-2152:0:4365
-2153:2:1752
-2154:0:4365
-2155:3:3354
-2156:0:4365
-2157:2:1754
-2158:0:4365
-2159:3:3355
-2160:0:4365
-2161:2:1755
-2162:2:1759
-2163:2:1760
-2164:2:1768
-2165:2:1769
-2166:2:1773
-2167:2:1774
-2168:2:1768
-2169:2:1769
-2170:2:1773
-2171:2:1774
-2172:2:1782
-2173:2:1787
-2174:2:1791
-2175:2:1792
-2176:2:1799
-2177:2:1800
-2178:2:1811
-2179:2:1812
-2180:2:1813
-2181:2:1811
-2182:2:1812
-2183:2:1813
-2184:2:1824
-2185:2:1829
-2186:2:1830
-2187:0:4365
-2188:2:1842
-2189:0:4365
-2190:3:3354
-2191:0:4365
-2192:2:1844
-2193:0:4365
-2194:3:3355
-2195:0:4365
-2196:2:1845
-2197:2:1849
-2198:2:1850
-2199:2:1858
-2200:2:1859
-2201:2:1863
-2202:2:1864
-2203:2:1858
-2204:2:1859
-2205:2:1863
-2206:2:1864
-2207:2:1872
-2208:2:1877
-2209:2:1881
-2210:2:1882
-2211:2:1889
-2212:2:1890
-2213:2:1901
-2214:2:1902
-2215:2:1903
-2216:2:1901
-2217:2:1902
-2218:2:1903
-2219:2:1914
-2220:2:1919
-2221:2:1920
-2222:0:4365
-2223:2:1932
-2224:0:4365
-2225:3:3354
-2226:0:4365
-2227:2:1934
-2228:0:4365
-2229:3:3355
-2230:0:4365
-2231:2:1935
-2232:0:4365
-2233:2:1936
-2234:0:4365
-2235:2:2129
-2236:0:4365
-2237:2:2130
-2238:0:4365
-2239:2:2134
-2240:0:4365
-2241:3:3354
-2242:0:4365
-2243:2:2136
-2244:0:4365
-2245:3:3355
-2246:0:4365
-2247:2:2137
-2248:2:2141
-2249:2:2142
-2250:2:2150
-2251:2:2151
-2252:2:2155
-2253:2:2156
-2254:2:2150
-2255:2:2151
-2256:2:2155
-2257:2:2156
-2258:2:2164
-2259:2:2169
-2260:2:2173
-2261:2:2174
-2262:2:2181
-2263:2:2182
-2264:2:2193
-2265:2:2194
-2266:2:2195
-2267:2:2193
-2268:2:2194
-2269:2:2195
-2270:2:2206
-2271:2:2211
-2272:2:2212
-2273:0:4365
-2274:2:2224
-2275:0:4365
-2276:3:3354
-2277:0:4365
-2278:2:2226
-2279:0:4365
-2280:3:3355
-2281:0:4365
-2282:2:2230
-2283:0:4365
-2284:3:3354
-2285:0:4365
-2286:2:2235
-2287:2:2239
-2288:2:2240
-2289:2:2248
-2290:2:2249
-2291:2:2253
-2292:2:2254
-2293:2:2248
-2294:2:2249
-2295:2:2250
-2296:2:2262
-2297:2:2267
-2298:2:2271
-2299:2:2272
-2300:2:2279
-2301:2:2280
-2302:2:2291
-2303:2:2292
-2304:2:2293
-2305:2:2291
-2306:2:2292
-2307:2:2293
-2308:2:2304
-2309:2:2309
-2310:2:2310
-2311:0:4365
-2312:3:3355
-2313:0:4365
-2314:2:2322
-2315:0:4365
-2316:2:1169
-2317:0:4365
-2318:3:3354
-2319:0:4365
-2320:2:1170
-2321:0:4365
-2322:3:3355
-2323:0:4365
-2324:3:3356
-2325:0:4365
-2326:3:3366
-2327:0:4365
-2328:3:2951
-2329:0:4365
-2330:3:2952
-2331:0:4365
-2332:3:2953
-2333:0:4365
-2334:3:2954
-2335:3:2958
-2336:3:2959
-2337:3:2967
-2338:3:2968
-2339:3:2972
-2340:3:2973
-2341:3:2967
-2342:3:2968
-2343:3:2972
-2344:3:2973
-2345:3:2981
-2346:3:2986
-2347:3:2990
-2348:3:2991
-2349:3:2998
-2350:3:2999
-2351:3:3010
-2352:3:3011
-2353:3:3012
-2354:3:3010
-2355:3:3011
-2356:3:3012
-2357:3:3023
-2358:3:3028
-2359:3:3029
-2360:0:4365
-2361:3:3041
-2362:0:4365
-2363:3:3042
-2364:0:4365
-2365:2:1173
-2366:0:4365
-2367:3:3043
-2368:0:4365
-2369:2:1179
-2370:0:4365
-2371:2:1180
-2372:0:4365
-2373:3:3042
-2374:0:4365
-2375:2:1181
-2376:2:1185
-2377:2:1186
-2378:2:1194
-2379:2:1195
-2380:2:1199
-2381:2:1200
-2382:2:1194
-2383:2:1195
-2384:2:1199
-2385:2:1200
-2386:2:1208
-2387:2:1213
-2388:2:1217
-2389:2:1218
-2390:2:1225
-2391:2:1226
-2392:2:1237
-2393:2:1238
-2394:2:1239
-2395:2:1237
-2396:2:1238
-2397:2:1239
-2398:2:1250
-2399:2:1255
-2400:2:1256
-2401:0:4365
-2402:3:3043
-2403:0:4365
-2404:2:1268
-2405:0:4365
-2406:3:3042
-2407:0:4365
-2408:2:1270
-2409:0:4365
-2410:3:3043
-2411:0:4365
-2412:2:1271
-2413:2:1275
-2414:2:1276
-2415:2:1284
-2416:2:1285
-2417:2:1289
-2418:2:1290
-2419:2:1284
-2420:2:1285
-2421:2:1289
-2422:2:1290
-2423:2:1298
-2424:2:1303
-2425:2:1307
-2426:2:1308
-2427:2:1315
-2428:2:1316
-2429:2:1327
-2430:2:1328
-2431:2:1329
-2432:2:1327
-2433:2:1328
-2434:2:1329
-2435:2:1340
-2436:2:1345
-2437:2:1346
-2438:0:4365
-2439:2:1358
-2440:0:4365
-2441:2:1360
-2442:0:4365
-2443:3:3042
-2444:0:4365
-2445:2:1361
-2446:0:4365
-2447:3:3043
-2448:0:4365
-2449:2:1362
-2450:2:1366
-2451:2:1367
-2452:2:1375
-2453:2:1376
-2454:2:1380
-2455:2:1381
-2456:2:1375
-2457:2:1376
-2458:2:1380
-2459:2:1381
-2460:2:1389
-2461:2:1394
-2462:2:1398
-2463:2:1399
-2464:2:1406
-2465:2:1407
-2466:2:1418
-2467:2:1419
-2468:2:1420
-2469:2:1418
-2470:2:1419
-2471:2:1420
-2472:2:1431
-2473:2:1436
-2474:2:1437
-2475:0:4365
-2476:2:1449
-2477:0:4365
-2478:3:3042
-2479:0:4365
-2480:2:1451
-2481:0:4365
-2482:3:3043
-2483:0:4365
-2484:2:1652
-2485:0:4365
-2486:2:1653
-2487:0:4365
-2488:2:1657
-2489:0:4365
-2490:2:1660
-2491:0:4365
-2492:3:3042
-2493:0:4365
-2494:2:1665
-2495:2:1669
-2496:2:1670
-2497:2:1678
-2498:2:1679
-2499:2:1683
-2500:2:1684
-2501:2:1678
-2502:2:1679
-2503:2:1680
-2504:2:1692
-2505:2:1697
-2506:2:1701
-2507:2:1702
-2508:2:1709
-2509:2:1710
-2510:2:1721
-2511:2:1722
-2512:2:1723
-2513:2:1721
-2514:2:1722
-2515:2:1723
-2516:2:1734
-2517:2:1739
-2518:2:1740
-2519:0:4365
-2520:3:3043
-2521:0:4365
-2522:2:1752
-2523:0:4365
-2524:3:3042
-2525:0:4365
-2526:2:1754
-2527:0:4365
-2528:3:3043
-2529:0:4365
-2530:2:1755
-2531:2:1759
-2532:2:1760
-2533:2:1768
-2534:2:1769
-2535:2:1773
-2536:2:1774
-2537:2:1768
-2538:2:1769
-2539:2:1773
-2540:2:1774
-2541:2:1782
-2542:2:1787
-2543:2:1791
-2544:2:1792
-2545:2:1799
-2546:2:1800
-2547:2:1811
-2548:2:1812
-2549:2:1813
-2550:2:1811
-2551:2:1812
-2552:2:1813
-2553:2:1824
-2554:2:1829
-2555:2:1830
-2556:0:4365
-2557:2:1842
-2558:0:4365
-2559:3:3042
-2560:0:4365
-2561:2:1844
-2562:0:4365
-2563:3:3043
-2564:0:4365
-2565:2:1845
-2566:2:1849
-2567:2:1850
-2568:2:1858
-2569:2:1859
-2570:2:1863
-2571:2:1864
-2572:2:1858
-2573:2:1859
-2574:2:1863
-2575:2:1864
-2576:2:1872
-2577:2:1877
-2578:2:1881
-2579:2:1882
-2580:2:1889
-2581:2:1890
-2582:2:1901
-2583:2:1902
-2584:2:1903
-2585:2:1901
-2586:2:1902
-2587:2:1903
-2588:2:1914
-2589:2:1919
-2590:2:1920
-2591:0:4365
-2592:2:1932
-2593:0:4365
-2594:3:3042
-2595:0:4365
-2596:2:1934
-2597:0:4365
-2598:3:3043
-2599:0:4365
-2600:2:1935
-2601:0:4365
-2602:2:1936
-2603:0:4365
-2604:2:2129
-2605:0:4365
-2606:2:2130
-2607:0:4365
-2608:2:2134
-2609:0:4365
-2610:3:3042
-2611:0:4365
-2612:2:2136
-2613:0:4365
-2614:3:3043
-2615:0:4365
-2616:2:2137
-2617:2:2141
-2618:2:2142
-2619:2:2150
-2620:2:2151
-2621:2:2155
-2622:2:2156
-2623:2:2150
-2624:2:2151
-2625:2:2155
-2626:2:2156
-2627:2:2164
-2628:2:2169
-2629:2:2173
-2630:2:2174
-2631:2:2181
-2632:2:2182
-2633:2:2193
-2634:2:2194
-2635:2:2195
-2636:2:2193
-2637:2:2194
-2638:2:2195
-2639:2:2206
-2640:2:2211
-2641:2:2212
-2642:0:4365
-2643:2:2224
-2644:0:4365
-2645:3:3042
-2646:0:4365
-2647:2:2226
-2648:0:4365
-2649:3:3043
-2650:0:4365
-2651:2:2230
-2652:0:4365
-2653:3:3042
-2654:0:4365
-2655:2:2235
-2656:2:2239
-2657:2:2240
-2658:2:2248
-2659:2:2249
-2660:2:2253
-2661:2:2254
-2662:2:2248
-2663:2:2249
-2664:2:2250
-2665:2:2262
-2666:2:2267
-2667:2:2271
-2668:2:2272
-2669:2:2279
-2670:2:2280
-2671:2:2291
-2672:2:2292
-2673:2:2293
-2674:2:2291
-2675:2:2292
-2676:2:2293
-2677:2:2304
-2678:2:2309
-2679:2:2310
-2680:0:4365
-2681:3:3043
-2682:0:4365
-2683:2:2322
-2684:0:4365
-2685:2:1169
-2686:0:4365
-2687:3:3042
-2688:0:4365
-2689:2:1170
-2690:0:4365
-2691:3:3043
-2692:0:4365
-2693:3:3044
-2694:0:4365
-2695:3:3257
-2696:0:4365
-2697:3:3362
-2698:0:4365
-2699:3:3363
-2700:0:4365
-2701:3:3367
-2702:0:4365
-2703:3:3373
-2704:3:3377
-2705:3:3378
-2706:3:3386
-2707:3:3387
-2708:3:3391
-2709:3:3392
-2710:3:3386
-2711:3:3387
-2712:3:3391
-2713:3:3392
-2714:3:3400
-2715:3:3405
-2716:3:3409
-2717:3:3410
-2718:3:3417
-2719:3:3418
-2720:3:3429
-2721:3:3430
-2722:3:3431
-2723:3:3429
-2724:3:3430
-2725:3:3431
-2726:3:3442
-2727:3:3447
-2728:3:3448
-2729:0:4365
-2730:3:3460
-2731:0:4365
-2732:3:3461
-2733:0:4365
-2734:2:1173
-2735:0:4365
-2736:3:3462
-2737:0:4365
-2738:2:1179
-2739:0:4365
-2740:2:1180
-2741:0:4365
-2742:3:3461
-2743:0:4365
-2744:2:1181
-2745:2:1185
-2746:2:1186
-2747:2:1194
-2748:2:1195
-2749:2:1199
-2750:2:1200
-2751:2:1194
-2752:2:1195
-2753:2:1199
-2754:2:1200
-2755:2:1208
-2756:2:1213
-2757:2:1217
-2758:2:1218
-2759:2:1225
-2760:2:1226
-2761:2:1237
-2762:2:1238
-2763:2:1239
-2764:2:1237
-2765:2:1238
-2766:2:1239
-2767:2:1250
-2768:2:1255
-2769:2:1256
-2770:0:4365
-2771:3:3462
-2772:0:4365
-2773:2:1268
-2774:0:4365
-2775:3:3461
-2776:0:4365
-2777:2:1270
-2778:0:4365
-2779:3:3462
-2780:0:4365
-2781:2:1271
-2782:2:1275
-2783:2:1276
-2784:2:1284
-2785:2:1285
-2786:2:1289
-2787:2:1290
-2788:2:1284
-2789:2:1285
-2790:2:1289
-2791:2:1290
-2792:2:1298
-2793:2:1303
-2794:2:1307
-2795:2:1308
-2796:2:1315
-2797:2:1316
-2798:2:1327
-2799:2:1328
-2800:2:1329
-2801:2:1327
-2802:2:1328
-2803:2:1329
-2804:2:1340
-2805:2:1345
-2806:2:1346
-2807:0:4365
-2808:2:1358
-2809:0:4365
-2810:2:1360
-2811:0:4365
-2812:3:3461
-2813:0:4365
-2814:2:1361
-2815:0:4365
-2816:3:3462
-2817:0:4365
-2818:2:1362
-2819:2:1366
-2820:2:1367
-2821:2:1375
-2822:2:1376
-2823:2:1380
-2824:2:1381
-2825:2:1375
-2826:2:1376
-2827:2:1380
-2828:2:1381
-2829:2:1389
-2830:2:1394
-2831:2:1398
-2832:2:1399
-2833:2:1406
-2834:2:1407
-2835:2:1418
-2836:2:1419
-2837:2:1420
-2838:2:1418
-2839:2:1419
-2840:2:1420
-2841:2:1431
-2842:2:1436
-2843:2:1437
-2844:0:4365
-2845:2:1449
-2846:0:4365
-2847:3:3461
-2848:0:4365
-2849:2:1451
-2850:0:4365
-2851:3:3462
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3461
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3462
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3461
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3462
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3461
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3462
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3461
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3462
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3461
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3462
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3461
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3462
-3019:0:4365
-3020:2:2230
-3021:0:4365
-3022:3:3461
-3023:0:4365
-3024:2:2235
-3025:2:2239
-3026:2:2240
-3027:2:2248
-3028:2:2249
-3029:2:2253
-3030:2:2254
-3031:2:2248
-3032:2:2249
-3033:2:2250
-3034:2:2262
-3035:2:2267
-3036:2:2271
-3037:2:2272
-3038:2:2279
-3039:2:2280
-3040:2:2291
-3041:2:2292
-3042:2:2293
-3043:2:2291
-3044:2:2292
-3045:2:2293
-3046:2:2304
-3047:2:2309
-3048:2:2310
-3049:0:4365
-3050:3:3462
-3051:0:4365
-3052:2:2322
-3053:0:4365
-3054:2:1169
-3055:0:4365
-3056:3:3461
-3057:0:4365
-3058:2:1170
-3059:0:4365
-3060:3:3462
-3061:0:4365
-3062:3:3463
-3063:0:4365
-3064:3:3469
-3065:0:4365
-3066:3:3470
-3067:3:3474
-3068:3:3475
-3069:3:3483
-3070:3:3484
-3071:3:3488
-3072:3:3489
-3073:3:3483
-3074:3:3484
-3075:3:3488
-3076:3:3489
-3077:3:3497
-3078:3:3502
-3079:3:3506
-3080:3:3507
-3081:3:3514
-3082:3:3515
-3083:3:3526
-3084:3:3527
-3085:3:3528
-3086:3:3526
-3087:3:3527
-3088:3:3528
-3089:3:3539
-3090:3:3544
-3091:3:3545
-3092:0:4365
-3093:3:3557
-3094:0:4365
-3095:3:3558
-3096:0:4365
-3097:2:1173
-3098:0:4365
-3099:3:3559
-3100:0:4365
-3101:2:1179
-3102:0:4365
-3103:2:1180
-3104:0:4365
-3105:3:3558
-3106:0:4365
-3107:2:1181
-3108:2:1185
-3109:2:1186
-3110:2:1194
-3111:2:1195
-3112:2:1199
-3113:2:1200
-3114:2:1194
-3115:2:1195
-3116:2:1199
-3117:2:1200
-3118:2:1208
-3119:2:1213
-3120:2:1217
-3121:2:1218
-3122:2:1225
-3123:2:1226
-3124:2:1237
-3125:2:1238
-3126:2:1239
-3127:2:1237
-3128:2:1238
-3129:2:1239
-3130:2:1250
-3131:2:1255
-3132:2:1256
-3133:0:4365
-3134:3:3559
-3135:0:4365
-3136:2:1268
-3137:0:4365
-3138:3:3558
-3139:0:4365
-3140:2:1270
-3141:0:4365
-3142:3:3559
-3143:0:4365
-3144:2:1271
-3145:2:1275
-3146:2:1276
-3147:2:1284
-3148:2:1285
-3149:2:1289
-3150:2:1290
-3151:2:1284
-3152:2:1285
-3153:2:1289
-3154:2:1290
-3155:2:1298
-3156:2:1303
-3157:2:1307
-3158:2:1308
-3159:2:1315
-3160:2:1316
-3161:2:1327
-3162:2:1328
-3163:2:1329
-3164:2:1327
-3165:2:1328
-3166:2:1329
-3167:2:1340
-3168:2:1345
-3169:2:1346
-3170:0:4365
-3171:2:1358
-3172:0:4365
-3173:2:1360
-3174:0:4365
-3175:3:3558
-3176:0:4365
-3177:2:1361
-3178:0:4365
-3179:3:3559
-3180:0:4365
-3181:2:1362
-3182:2:1366
-3183:2:1367
-3184:2:1375
-3185:2:1376
-3186:2:1380
-3187:2:1381
-3188:2:1375
-3189:2:1376
-3190:2:1380
-3191:2:1381
-3192:2:1389
-3193:2:1394
-3194:2:1398
-3195:2:1399
-3196:2:1406
-3197:2:1407
-3198:2:1418
-3199:2:1419
-3200:2:1420
-3201:2:1418
-3202:2:1419
-3203:2:1420
-3204:2:1431
-3205:2:1436
-3206:2:1437
-3207:0:4365
-3208:2:1449
-3209:0:4365
-3210:3:3558
-3211:0:4365
-3212:2:1451
-3213:0:4365
-3214:3:3559
-3215:0:4365
-3216:2:1652
-3217:0:4365
-3218:2:1653
-3219:0:4365
-3220:2:1657
-3221:0:4365
-3222:2:1660
-3223:0:4365
-3224:3:3558
-3225:0:4365
-3226:2:1665
-3227:2:1669
-3228:2:1670
-3229:2:1678
-3230:2:1679
-3231:2:1683
-3232:2:1684
-3233:2:1678
-3234:2:1679
-3235:2:1680
-3236:2:1692
-3237:2:1697
-3238:2:1701
-3239:2:1702
-3240:2:1709
-3241:2:1710
-3242:2:1721
-3243:2:1722
-3244:2:1723
-3245:2:1721
-3246:2:1722
-3247:2:1723
-3248:2:1734
-3249:2:1739
-3250:2:1740
-3251:0:4365
-3252:3:3559
-3253:0:4365
-3254:2:1752
-3255:0:4365
-3256:3:3558
-3257:0:4365
-3258:2:1754
-3259:0:4365
-3260:3:3559
-3261:0:4365
-3262:2:1755
-3263:2:1759
-3264:2:1760
-3265:2:1768
-3266:2:1769
-3267:2:1773
-3268:2:1774
-3269:2:1768
-3270:2:1769
-3271:2:1773
-3272:2:1774
-3273:2:1782
-3274:2:1787
-3275:2:1791
-3276:2:1792
-3277:2:1799
-3278:2:1800
-3279:2:1811
-3280:2:1812
-3281:2:1813
-3282:2:1811
-3283:2:1812
-3284:2:1813
-3285:2:1824
-3286:2:1829
-3287:2:1830
-3288:0:4365
-3289:2:1842
-3290:0:4365
-3291:3:3558
-3292:0:4365
-3293:2:1844
-3294:0:4365
-3295:3:3559
-3296:0:4365
-3297:2:1845
-3298:2:1849
-3299:2:1850
-3300:2:1858
-3301:2:1859
-3302:2:1863
-3303:2:1864
-3304:2:1858
-3305:2:1859
-3306:2:1863
-3307:2:1864
-3308:2:1872
-3309:2:1877
-3310:2:1881
-3311:2:1882
-3312:2:1889
-3313:2:1890
-3314:2:1901
-3315:2:1902
-3316:2:1903
-3317:2:1901
-3318:2:1902
-3319:2:1903
-3320:2:1914
-3321:2:1919
-3322:2:1920
-3323:0:4365
-3324:2:1932
-3325:0:4365
-3326:3:3558
-3327:0:4365
-3328:2:1934
-3329:0:4365
-3330:3:3559
-3331:0:4365
-3332:2:1935
-3333:0:4365
-3334:2:1936
-3335:0:4365
-3336:2:2129
-3337:0:4365
-3338:2:2130
-3339:0:4365
-3340:2:2134
-3341:0:4365
-3342:3:3558
-3343:0:4365
-3344:2:2136
-3345:0:4365
-3346:3:3559
-3347:0:4365
-3348:2:2137
-3349:2:2141
-3350:2:2142
-3351:2:2150
-3352:2:2151
-3353:2:2155
-3354:2:2156
-3355:2:2150
-3356:2:2151
-3357:2:2155
-3358:2:2156
-3359:2:2164
-3360:2:2169
-3361:2:2173
-3362:2:2174
-3363:2:2181
-3364:2:2182
-3365:2:2193
-3366:2:2194
-3367:2:2195
-3368:2:2193
-3369:2:2194
-3370:2:2195
-3371:2:2206
-3372:2:2211
-3373:2:2212
-3374:0:4365
-3375:2:2224
-3376:0:4365
-3377:3:3558
-3378:0:4365
-3379:2:2226
-3380:0:4365
-3381:3:3559
-3382:0:4365
-3383:2:2230
-3384:0:4365
-3385:3:3558
-3386:0:4365
-3387:2:2235
-3388:2:2239
-3389:2:2240
-3390:2:2248
-3391:2:2249
-3392:2:2253
-3393:2:2254
-3394:2:2248
-3395:2:2249
-3396:2:2250
-3397:2:2262
-3398:2:2267
-3399:2:2271
-3400:2:2272
-3401:2:2279
-3402:2:2280
-3403:2:2291
-3404:2:2292
-3405:2:2293
-3406:2:2291
-3407:2:2292
-3408:2:2293
-3409:2:2304
-3410:2:2309
-3411:2:2310
-3412:0:4365
-3413:3:3559
-3414:0:4365
-3415:2:2322
-3416:0:4365
-3417:2:1169
-3418:0:4365
-3419:3:3558
-3420:0:4365
-3421:2:1170
-3422:0:4365
-3423:3:3559
-3424:0:4365
-3425:3:3560
-3426:0:4365
-3427:3:3566
-3428:0:4365
-3429:3:3569
-3430:3:3570
-3431:3:3582
-3432:3:3583
-3433:3:3587
-3434:3:3588
-3435:3:3582
-3436:3:3583
-3437:3:3587
-3438:3:3588
-3439:3:3596
-3440:3:3601
-3441:3:3605
-3442:3:3606
-3443:3:3613
-3444:3:3614
-3445:3:3625
-3446:3:3626
-3447:3:3627
-3448:3:3625
-3449:3:3626
-3450:3:3627
-3451:3:3638
-3452:3:3643
-3453:3:3644
-3454:0:4365
-3455:3:3656
-3456:0:4365
-3457:3:3657
-3458:0:4365
-3459:2:1173
-3460:0:4365
-3461:3:3658
-3462:0:4365
-3463:2:1179
-3464:0:4365
-3465:2:1180
-3466:0:4365
-3467:3:3657
-3468:0:4365
-3469:2:1181
-3470:2:1185
-3471:2:1186
-3472:2:1194
-3473:2:1195
-3474:2:1199
-3475:2:1200
-3476:2:1194
-3477:2:1195
-3478:2:1199
-3479:2:1200
-3480:2:1208
-3481:2:1213
-3482:2:1217
-3483:2:1218
-3484:2:1225
-3485:2:1226
-3486:2:1237
-3487:2:1238
-3488:2:1239
-3489:2:1237
-3490:2:1238
-3491:2:1239
-3492:2:1250
-3493:2:1255
-3494:2:1256
-3495:0:4365
-3496:3:3658
-3497:0:4365
-3498:2:1268
-3499:0:4365
-3500:3:3657
-3501:0:4365
-3502:2:1270
-3503:0:4365
-3504:3:3658
-3505:0:4365
-3506:2:1271
-3507:2:1275
-3508:2:1276
-3509:2:1284
-3510:2:1285
-3511:2:1289
-3512:2:1290
-3513:2:1284
-3514:2:1285
-3515:2:1289
-3516:2:1290
-3517:2:1298
-3518:2:1303
-3519:2:1307
-3520:2:1308
-3521:2:1315
-3522:2:1316
-3523:2:1327
-3524:2:1328
-3525:2:1329
-3526:2:1327
-3527:2:1328
-3528:2:1329
-3529:2:1340
-3530:2:1345
-3531:2:1346
-3532:0:4365
-3533:2:1358
-3534:0:4365
-3535:2:1360
-3536:0:4365
-3537:3:3657
-3538:0:4365
-3539:2:1361
-3540:0:4365
-3541:3:3658
-3542:0:4365
-3543:2:1362
-3544:2:1366
-3545:2:1367
-3546:2:1375
-3547:2:1376
-3548:2:1380
-3549:2:1381
-3550:2:1375
-3551:2:1376
-3552:2:1380
-3553:2:1381
-3554:2:1389
-3555:2:1394
-3556:2:1398
-3557:2:1399
-3558:2:1406
-3559:2:1407
-3560:2:1418
-3561:2:1419
-3562:2:1420
-3563:2:1418
-3564:2:1419
-3565:2:1420
-3566:2:1431
-3567:2:1436
-3568:2:1437
-3569:0:4365
-3570:2:1449
-3571:0:4365
-3572:3:3657
-3573:0:4365
-3574:2:1451
-3575:0:4365
-3576:3:3658
-3577:0:4365
-3578:2:1652
-3579:0:4365
-3580:2:1653
-3581:0:4365
-3582:2:1657
-3583:0:4365
-3584:2:1660
-3585:0:4365
-3586:3:3657
-3587:0:4365
-3588:2:1665
-3589:2:1669
-3590:2:1670
-3591:2:1678
-3592:2:1679
-3593:2:1683
-3594:2:1684
-3595:2:1678
-3596:2:1679
-3597:2:1680
-3598:2:1692
-3599:2:1697
-3600:2:1701
-3601:2:1702
-3602:2:1709
-3603:2:1710
-3604:2:1721
-3605:2:1722
-3606:2:1723
-3607:2:1721
-3608:2:1722
-3609:2:1723
-3610:2:1734
-3611:2:1739
-3612:2:1740
-3613:0:4365
-3614:3:3658
-3615:0:4365
-3616:2:1752
-3617:0:4365
-3618:3:3657
-3619:0:4365
-3620:2:1754
-3621:0:4365
-3622:3:3658
-3623:0:4365
-3624:2:1755
-3625:2:1759
-3626:2:1760
-3627:2:1768
-3628:2:1769
-3629:2:1773
-3630:2:1774
-3631:2:1768
-3632:2:1769
-3633:2:1773
-3634:2:1774
-3635:2:1782
-3636:2:1787
-3637:2:1791
-3638:2:1792
-3639:2:1799
-3640:2:1800
-3641:2:1811
-3642:2:1812
-3643:2:1813
-3644:2:1811
-3645:2:1812
-3646:2:1813
-3647:2:1824
-3648:2:1829
-3649:2:1830
-3650:0:4365
-3651:2:1842
-3652:0:4365
-3653:3:3657
-3654:0:4365
-3655:2:1844
-3656:0:4365
-3657:3:3658
-3658:0:4365
-3659:2:1845
-3660:2:1849
-3661:2:1850
-3662:2:1858
-3663:2:1859
-3664:2:1863
-3665:2:1864
-3666:2:1858
-3667:2:1859
-3668:2:1863
-3669:2:1864
-3670:2:1872
-3671:2:1877
-3672:2:1881
-3673:2:1882
-3674:2:1889
-3675:2:1890
-3676:2:1901
-3677:2:1902
-3678:2:1903
-3679:2:1901
-3680:2:1902
-3681:2:1903
-3682:2:1914
-3683:2:1919
-3684:2:1920
-3685:0:4365
-3686:2:1932
-3687:0:4365
-3688:3:3657
-3689:0:4365
-3690:2:1934
-3691:0:4365
-3692:3:3658
-3693:0:4365
-3694:2:1935
-3695:0:4365
-3696:2:1936
-3697:0:4365
-3698:2:2129
-3699:0:4365
-3700:2:2130
-3701:0:4365
-3702:2:2134
-3703:0:4365
-3704:3:3657
-3705:0:4365
-3706:2:2136
-3707:0:4365
-3708:3:3658
-3709:0:4365
-3710:2:2137
-3711:2:2141
-3712:2:2142
-3713:2:2150
-3714:2:2151
-3715:2:2155
-3716:2:2156
-3717:2:2150
-3718:2:2151
-3719:2:2155
-3720:2:2156
-3721:2:2164
-3722:2:2169
-3723:2:2173
-3724:2:2174
-3725:2:2181
-3726:2:2182
-3727:2:2193
-3728:2:2194
-3729:2:2195
-3730:2:2193
-3731:2:2194
-3732:2:2195
-3733:2:2206
-3734:2:2211
-3735:2:2212
-3736:0:4365
-3737:2:2224
-3738:0:4365
-3739:3:3657
-3740:0:4365
-3741:2:2226
-3742:0:4365
-3743:3:3658
-3744:0:4365
-3745:2:2230
-3746:0:4365
-3747:3:3657
-3748:0:4365
-3749:2:2235
-3750:2:2239
-3751:2:2240
-3752:2:2248
-3753:2:2249
-3754:2:2253
-3755:2:2254
-3756:2:2248
-3757:2:2249
-3758:2:2250
-3759:2:2262
-3760:2:2267
-3761:2:2271
-3762:2:2272
-3763:2:2279
-3764:2:2280
-3765:2:2291
-3766:2:2292
-3767:2:2293
-3768:2:2291
-3769:2:2292
-3770:2:2293
-3771:2:2304
-3772:2:2309
-3773:2:2310
-3774:0:4365
-3775:3:3658
-3776:0:4365
-3777:2:2322
-3778:0:4365
-3779:2:1169
-3780:0:4365
-3781:3:3657
-3782:0:4365
-3783:2:1170
-3784:0:4365
-3785:3:3658
-3786:0:4365
-3787:3:3659
-3788:0:4365
-3789:3:3665
-3790:0:4365
-3791:3:3666
-3792:0:4365
-3793:3:3667
-3794:0:4365
-3795:3:3668
-3796:0:4365
-3797:3:3669
-3798:3:3673
-3799:3:3674
-3800:3:3682
-3801:3:3683
-3802:3:3687
-3803:3:3688
-3804:3:3682
-3805:3:3683
-3806:3:3687
-3807:3:3688
-3808:3:3696
-3809:3:3701
-3810:3:3705
-3811:3:3706
-3812:3:3713
-3813:3:3714
-3814:3:3725
-3815:3:3726
-3816:3:3727
-3817:3:3725
-3818:3:3726
-3819:3:3727
-3820:3:3738
-3821:3:3743
-3822:3:3744
-3823:0:4365
-3824:3:3756
-3825:0:4365
-3826:3:3757
-3827:0:4365
-3828:2:1173
-3829:0:4365
-3830:3:3758
-3831:0:4365
-3832:2:1179
-3833:0:4365
-3834:2:1180
-3835:0:4365
-3836:3:3757
-3837:0:4365
-3838:2:1181
-3839:2:1185
-3840:2:1186
-3841:2:1194
-3842:2:1195
-3843:2:1199
-3844:2:1200
-3845:2:1194
-3846:2:1195
-3847:2:1199
-3848:2:1200
-3849:2:1208
-3850:2:1213
-3851:2:1217
-3852:2:1218
-3853:2:1225
-3854:2:1226
-3855:2:1237
-3856:2:1238
-3857:2:1239
-3858:2:1237
-3859:2:1238
-3860:2:1239
-3861:2:1250
-3862:2:1255
-3863:2:1256
-3864:0:4365
-3865:3:3758
-3866:0:4365
-3867:2:1268
-3868:0:4365
-3869:3:3757
-3870:0:4365
-3871:2:1270
-3872:0:4365
-3873:3:3758
-3874:0:4365
-3875:2:1271
-3876:2:1275
-3877:2:1276
-3878:2:1284
-3879:2:1285
-3880:2:1289
-3881:2:1290
-3882:2:1284
-3883:2:1285
-3884:2:1289
-3885:2:1290
-3886:2:1298
-3887:2:1303
-3888:2:1307
-3889:2:1308
-3890:2:1315
-3891:2:1316
-3892:2:1327
-3893:2:1328
-3894:2:1329
-3895:2:1327
-3896:2:1328
-3897:2:1329
-3898:2:1340
-3899:2:1345
-3900:2:1346
-3901:0:4365
-3902:2:1358
-3903:0:4365
-3904:2:1360
-3905:0:4365
-3906:3:3757
-3907:0:4365
-3908:2:1361
-3909:0:4365
-3910:3:3758
-3911:0:4365
-3912:2:1362
-3913:2:1366
-3914:2:1367
-3915:2:1375
-3916:2:1376
-3917:2:1380
-3918:2:1381
-3919:2:1375
-3920:2:1376
-3921:2:1380
-3922:2:1381
-3923:2:1389
-3924:2:1394
-3925:2:1398
-3926:2:1399
-3927:2:1406
-3928:2:1407
-3929:2:1418
-3930:2:1419
-3931:2:1420
-3932:2:1418
-3933:2:1419
-3934:2:1420
-3935:2:1431
-3936:2:1436
-3937:2:1437
-3938:0:4365
-3939:2:1449
-3940:0:4365
-3941:3:3757
-3942:0:4365
-3943:2:1451
-3944:0:4365
-3945:3:3758
-3946:0:4365
-3947:2:1652
-3948:0:4365
-3949:2:1653
-3950:0:4365
-3951:2:1657
-3952:0:4365
-3953:2:1660
-3954:0:4365
-3955:3:3757
-3956:0:4365
-3957:2:1665
-3958:2:1669
-3959:2:1670
-3960:2:1678
-3961:2:1679
-3962:2:1683
-3963:2:1684
-3964:2:1678
-3965:2:1679
-3966:2:1680
-3967:2:1692
-3968:2:1697
-3969:2:1701
-3970:2:1702
-3971:2:1709
-3972:2:1710
-3973:2:1721
-3974:2:1722
-3975:2:1723
-3976:2:1721
-3977:2:1722
-3978:2:1723
-3979:2:1734
-3980:2:1739
-3981:2:1740
-3982:0:4365
-3983:3:3758
-3984:0:4365
-3985:2:1752
-3986:0:4365
-3987:3:3757
-3988:0:4365
-3989:2:1754
-3990:0:4365
-3991:3:3758
-3992:0:4365
-3993:2:1755
-3994:2:1759
-3995:2:1760
-3996:2:1768
-3997:2:1769
-3998:2:1773
-3999:2:1774
-4000:2:1768
-4001:2:1769
-4002:2:1773
-4003:2:1774
-4004:2:1782
-4005:2:1787
-4006:2:1791
-4007:2:1792
-4008:2:1799
-4009:2:1800
-4010:2:1811
-4011:2:1812
-4012:2:1813
-4013:2:1811
-4014:2:1812
-4015:2:1813
-4016:2:1824
-4017:2:1829
-4018:2:1830
-4019:0:4365
-4020:2:1842
-4021:0:4365
-4022:3:3757
-4023:0:4365
-4024:2:1844
-4025:0:4365
-4026:3:3758
-4027:0:4365
-4028:2:1845
-4029:2:1849
-4030:2:1850
-4031:2:1858
-4032:2:1859
-4033:2:1863
-4034:2:1864
-4035:2:1858
-4036:2:1859
-4037:2:1863
-4038:2:1864
-4039:2:1872
-4040:2:1877
-4041:2:1881
-4042:2:1882
-4043:2:1889
-4044:2:1890
-4045:2:1901
-4046:2:1902
-4047:2:1903
-4048:2:1901
-4049:2:1902
-4050:2:1903
-4051:2:1914
-4052:2:1919
-4053:2:1920
-4054:0:4365
-4055:2:1932
-4056:0:4365
-4057:3:3757
-4058:0:4365
-4059:2:1934
-4060:0:4365
-4061:3:3758
-4062:0:4365
-4063:2:1935
-4064:0:4365
-4065:2:1936
-4066:0:4365
-4067:2:2129
-4068:0:4365
-4069:2:2130
-4070:0:4365
-4071:2:2134
-4072:0:4365
-4073:3:3757
-4074:0:4365
-4075:2:2136
-4076:0:4365
-4077:3:3758
-4078:0:4365
-4079:2:2137
-4080:2:2141
-4081:2:2142
-4082:2:2150
-4083:2:2151
-4084:2:2155
-4085:2:2156
-4086:2:2150
-4087:2:2151
-4088:2:2155
-4089:2:2156
-4090:2:2164
-4091:2:2169
-4092:2:2173
-4093:2:2174
-4094:2:2181
-4095:2:2182
-4096:2:2193
-4097:2:2194
-4098:2:2195
-4099:2:2193
-4100:2:2194
-4101:2:2195
-4102:2:2206
-4103:2:2211
-4104:2:2212
-4105:0:4365
-4106:2:2224
-4107:0:4365
-4108:3:3757
-4109:0:4365
-4110:2:2226
-4111:0:4365
-4112:3:3758
-4113:0:4365
-4114:2:2230
-4115:0:4365
-4116:3:3757
-4117:0:4365
-4118:2:2235
-4119:2:2239
-4120:2:2240
-4121:2:2248
-4122:2:2249
-4123:2:2253
-4124:2:2254
-4125:2:2248
-4126:2:2249
-4127:2:2250
-4128:2:2262
-4129:2:2267
-4130:2:2271
-4131:2:2272
-4132:2:2279
-4133:2:2280
-4134:2:2291
-4135:2:2292
-4136:2:2293
-4137:2:2291
-4138:2:2292
-4139:2:2293
-4140:2:2304
-4141:2:2309
-4142:2:2310
-4143:0:4365
-4144:3:3758
-4145:0:4365
-4146:2:2322
-4147:0:4365
-4148:2:1169
-4149:0:4365
-4150:3:3757
-4151:0:4365
-4152:2:1170
-4153:0:4365
-4154:3:3758
-4155:0:4365
-4156:3:3759
-4157:0:4365
-4158:3:3972
-4159:0:4365
-4160:3:3980
-4161:0:4365
-4162:3:3981
-4163:3:3985
-4164:3:3986
-4165:3:3994
-4166:3:3995
-4167:3:3999
-4168:3:4000
-4169:3:3994
-4170:3:3995
-4171:3:3999
-4172:3:4000
-4173:3:4008
-4174:3:4013
-4175:3:4017
-4176:3:4018
-4177:3:4025
-4178:3:4026
-4179:3:4037
-4180:3:4038
-4181:3:4039
-4182:3:4037
-4183:3:4038
-4184:3:4039
-4185:3:4050
-4186:3:4055
-4187:3:4056
-4188:0:4365
-4189:3:4068
-4190:0:4365
-4191:3:4069
-4192:0:4365
-4193:2:1173
-4194:0:4365
-4195:3:4070
-4196:0:4365
-4197:2:1179
-4198:0:4365
-4199:2:1180
-4200:0:4365
-4201:3:4069
-4202:0:4365
-4203:2:1181
-4204:2:1185
-4205:2:1186
-4206:2:1194
-4207:2:1195
-4208:2:1199
-4209:2:1200
-4210:2:1194
-4211:2:1195
-4212:2:1199
-4213:2:1200
-4214:2:1208
-4215:2:1213
-4216:2:1217
-4217:2:1218
-4218:2:1225
-4219:2:1226
-4220:2:1237
-4221:2:1238
-4222:2:1239
-4223:2:1237
-4224:2:1238
-4225:2:1239
-4226:2:1250
-4227:2:1255
-4228:2:1256
-4229:0:4365
-4230:3:4070
-4231:0:4365
-4232:2:1268
-4233:0:4365
-4234:3:4069
-4235:0:4365
-4236:2:1270
-4237:0:4365
-4238:3:4070
-4239:0:4365
-4240:2:1271
-4241:2:1275
-4242:2:1276
-4243:2:1284
-4244:2:1285
-4245:2:1289
-4246:2:1290
-4247:2:1284
-4248:2:1285
-4249:2:1289
-4250:2:1290
-4251:2:1298
-4252:2:1303
-4253:2:1307
-4254:2:1308
-4255:2:1315
-4256:2:1316
-4257:2:1327
-4258:2:1328
-4259:2:1329
-4260:2:1327
-4261:2:1328
-4262:2:1329
-4263:2:1340
-4264:2:1345
-4265:2:1346
-4266:0:4365
-4267:2:1358
-4268:0:4365
-4269:2:1360
-4270:0:4365
-4271:3:4069
-4272:0:4365
-4273:2:1361
-4274:0:4365
-4275:3:4070
-4276:0:4365
-4277:2:1362
-4278:2:1366
-4279:2:1367
-4280:2:1375
-4281:2:1376
-4282:2:1380
-4283:2:1381
-4284:2:1375
-4285:2:1376
-4286:2:1380
-4287:2:1381
-4288:2:1389
-4289:2:1394
-4290:2:1398
-4291:2:1399
-4292:2:1406
-4293:2:1407
-4294:2:1418
-4295:2:1419
-4296:2:1420
-4297:2:1418
-4298:2:1419
-4299:2:1420
-4300:2:1431
-4301:2:1436
-4302:2:1437
-4303:0:4365
-4304:2:1449
-4305:0:4365
-4306:3:4069
-4307:0:4365
-4308:2:1451
-4309:0:4365
-4310:3:4070
-4311:0:4365
-4312:2:1652
-4313:0:4365
-4314:2:1653
-4315:0:4365
-4316:2:1657
-4317:0:4365
-4318:2:1660
-4319:0:4365
-4320:3:4069
-4321:0:4365
-4322:2:1665
-4323:2:1669
-4324:2:1670
-4325:2:1678
-4326:2:1679
-4327:2:1683
-4328:2:1684
-4329:2:1678
-4330:2:1679
-4331:2:1680
-4332:2:1692
-4333:2:1697
-4334:2:1701
-4335:2:1702
-4336:2:1709
-4337:2:1710
-4338:2:1721
-4339:2:1722
-4340:2:1723
-4341:2:1721
-4342:2:1722
-4343:2:1723
-4344:2:1734
-4345:2:1739
-4346:2:1740
-4347:0:4365
-4348:3:4070
-4349:0:4365
-4350:2:1752
-4351:0:4365
-4352:3:4069
-4353:0:4365
-4354:2:1754
-4355:0:4365
-4356:3:4070
-4357:0:4365
-4358:2:1755
-4359:2:1759
-4360:2:1760
-4361:2:1768
-4362:2:1769
-4363:2:1773
-4364:2:1774
-4365:2:1768
-4366:2:1769
-4367:2:1773
-4368:2:1774
-4369:2:1782
-4370:2:1787
-4371:2:1791
-4372:2:1792
-4373:2:1799
-4374:2:1800
-4375:2:1811
-4376:2:1812
-4377:2:1813
-4378:2:1811
-4379:2:1812
-4380:2:1813
-4381:2:1824
-4382:2:1829
-4383:2:1830
-4384:0:4365
-4385:2:1842
-4386:0:4365
-4387:3:4069
-4388:0:4365
-4389:2:1844
-4390:0:4365
-4391:3:4070
-4392:0:4365
-4393:2:1845
-4394:2:1849
-4395:2:1850
-4396:2:1858
-4397:2:1859
-4398:2:1863
-4399:2:1864
-4400:2:1858
-4401:2:1859
-4402:2:1863
-4403:2:1864
-4404:2:1872
-4405:2:1877
-4406:2:1881
-4407:2:1882
-4408:2:1889
-4409:2:1890
-4410:2:1901
-4411:2:1902
-4412:2:1903
-4413:2:1901
-4414:2:1902
-4415:2:1903
-4416:2:1914
-4417:2:1919
-4418:2:1920
-4419:0:4365
-4420:2:1932
-4421:0:4365
-4422:3:4069
-4423:0:4365
-4424:2:1934
-4425:0:4365
-4426:3:4070
-4427:0:4365
-4428:2:1935
-4429:0:4365
-4430:2:1936
-4431:0:4365
-4432:2:2129
-4433:0:4365
-4434:2:2130
-4435:0:4365
-4436:2:2134
-4437:0:4365
-4438:3:4069
-4439:0:4365
-4440:2:2136
-4441:0:4365
-4442:3:4070
-4443:0:4365
-4444:2:2137
-4445:2:2141
-4446:2:2142
-4447:2:2150
-4448:2:2151
-4449:2:2155
-4450:2:2156
-4451:2:2150
-4452:2:2151
-4453:2:2155
-4454:2:2156
-4455:2:2164
-4456:2:2169
-4457:2:2173
-4458:2:2174
-4459:2:2181
-4460:2:2182
-4461:2:2193
-4462:2:2194
-4463:2:2195
-4464:2:2193
-4465:2:2194
-4466:2:2195
-4467:2:2206
-4468:2:2211
-4469:2:2212
-4470:0:4365
-4471:2:2224
-4472:0:4365
-4473:3:4069
-4474:0:4365
-4475:2:2226
-4476:0:4365
-4477:3:4070
-4478:0:4365
-4479:2:2230
-4480:0:4365
-4481:3:4069
-4482:0:4365
-4483:2:2235
-4484:2:2239
-4485:2:2240
-4486:2:2248
-4487:2:2249
-4488:2:2253
-4489:2:2254
-4490:2:2248
-4491:2:2249
-4492:2:2250
-4493:2:2262
-4494:2:2267
-4495:2:2271
-4496:2:2272
-4497:2:2279
-4498:2:2280
-4499:2:2291
-4500:2:2292
-4501:2:2293
-4502:2:2291
-4503:2:2292
-4504:2:2293
-4505:2:2304
-4506:2:2309
-4507:2:2310
-4508:0:4365
-4509:3:4070
-4510:0:4365
-4511:2:2322
-4512:0:4365
-4513:2:1169
-4514:0:4365
-4515:3:4069
-4516:0:4365
-4517:2:1170
-4518:0:4365
-4519:3:4070
-4520:0:4365
-4521:3:4071
-4522:0:4365
-4523:3:4081
-4524:0:4365
-4525:3:3666
-4526:0:4365
-4527:3:3667
-4528:0:4365
-4529:3:3668
-4530:0:4365
-4531:3:3669
-4532:3:3673
-4533:3:3674
-4534:3:3682
-4535:3:3683
-4536:3:3687
-4537:3:3688
-4538:3:3682
-4539:3:3683
-4540:3:3687
-4541:3:3688
-4542:3:3696
-4543:3:3701
-4544:3:3705
-4545:3:3706
-4546:3:3713
-4547:3:3714
-4548:3:3725
-4549:3:3726
-4550:3:3727
-4551:3:3725
-4552:3:3726
-4553:3:3727
-4554:3:3738
-4555:3:3743
-4556:3:3744
-4557:0:4365
-4558:3:3756
-4559:0:4365
-4560:3:3757
-4561:0:4365
-4562:2:1173
-4563:0:4365
-4564:3:3758
-4565:0:4365
-4566:2:1179
-4567:0:4365
-4568:2:1180
-4569:0:4365
-4570:3:3757
-4571:0:4365
-4572:2:1181
-4573:2:1185
-4574:2:1186
-4575:2:1194
-4576:2:1195
-4577:2:1199
-4578:2:1200
-4579:2:1194
-4580:2:1195
-4581:2:1199
-4582:2:1200
-4583:2:1208
-4584:2:1213
-4585:2:1217
-4586:2:1218
-4587:2:1225
-4588:2:1226
-4589:2:1237
-4590:2:1238
-4591:2:1239
-4592:2:1237
-4593:2:1238
-4594:2:1239
-4595:2:1250
-4596:2:1255
-4597:2:1256
-4598:0:4365
-4599:3:3758
-4600:0:4365
-4601:2:1268
-4602:0:4365
-4603:3:3757
-4604:0:4365
-4605:2:1270
-4606:0:4365
-4607:3:3758
-4608:0:4365
-4609:2:1271
-4610:2:1275
-4611:2:1276
-4612:2:1284
-4613:2:1285
-4614:2:1289
-4615:2:1290
-4616:2:1284
-4617:2:1285
-4618:2:1289
-4619:2:1290
-4620:2:1298
-4621:2:1303
-4622:2:1307
-4623:2:1308
-4624:2:1315
-4625:2:1316
-4626:2:1327
-4627:2:1328
-4628:2:1329
-4629:2:1327
-4630:2:1328
-4631:2:1329
-4632:2:1340
-4633:2:1345
-4634:2:1346
-4635:0:4365
-4636:2:1358
-4637:0:4365
-4638:2:1360
-4639:0:4365
-4640:3:3757
-4641:0:4365
-4642:2:1361
-4643:0:4365
-4644:3:3758
-4645:0:4365
-4646:2:1362
-4647:2:1366
-4648:2:1367
-4649:2:1375
-4650:2:1376
-4651:2:1380
-4652:2:1381
-4653:2:1375
-4654:2:1376
-4655:2:1380
-4656:2:1381
-4657:2:1389
-4658:2:1394
-4659:2:1398
-4660:2:1399
-4661:2:1406
-4662:2:1407
-4663:2:1418
-4664:2:1419
-4665:2:1420
-4666:2:1418
-4667:2:1419
-4668:2:1420
-4669:2:1431
-4670:2:1436
-4671:2:1437
-4672:0:4365
-4673:2:1449
-4674:0:4365
-4675:3:3757
-4676:0:4365
-4677:2:1451
-4678:0:4365
-4679:3:3758
-4680:0:4365
-4681:2:1652
-4682:0:4365
-4683:2:1653
-4684:0:4365
-4685:2:1657
-4686:0:4365
-4687:2:1660
-4688:0:4365
-4689:3:3757
-4690:0:4365
-4691:2:1665
-4692:2:1669
-4693:2:1670
-4694:2:1678
-4695:2:1679
-4696:2:1683
-4697:2:1684
-4698:2:1678
-4699:2:1679
-4700:2:1680
-4701:2:1692
-4702:2:1697
-4703:2:1701
-4704:2:1702
-4705:2:1709
-4706:2:1710
-4707:2:1721
-4708:2:1722
-4709:2:1723
-4710:2:1721
-4711:2:1722
-4712:2:1723
-4713:2:1734
-4714:2:1739
-4715:2:1740
-4716:0:4365
-4717:3:3758
-4718:0:4365
-4719:2:1752
-4720:0:4365
-4721:3:3757
-4722:0:4365
-4723:2:1754
-4724:0:4365
-4725:3:3758
-4726:0:4365
-4727:2:1755
-4728:2:1759
-4729:2:1760
-4730:2:1768
-4731:2:1769
-4732:2:1773
-4733:2:1774
-4734:2:1768
-4735:2:1769
-4736:2:1773
-4737:2:1774
-4738:2:1782
-4739:2:1787
-4740:2:1791
-4741:2:1792
-4742:2:1799
-4743:2:1800
-4744:2:1811
-4745:2:1812
-4746:2:1813
-4747:2:1811
-4748:2:1812
-4749:2:1813
-4750:2:1824
-4751:2:1829
-4752:2:1830
-4753:0:4365
-4754:2:1842
-4755:0:4365
-4756:3:3757
-4757:0:4365
-4758:2:1844
-4759:0:4365
-4760:3:3758
-4761:0:4365
-4762:2:1845
-4763:2:1849
-4764:2:1850
-4765:2:1858
-4766:2:1859
-4767:2:1863
-4768:2:1864
-4769:2:1858
-4770:2:1859
-4771:2:1863
-4772:2:1864
-4773:2:1872
-4774:2:1877
-4775:2:1881
-4776:2:1882
-4777:2:1889
-4778:2:1890
-4779:2:1901
-4780:2:1902
-4781:2:1903
-4782:2:1901
-4783:2:1902
-4784:2:1903
-4785:2:1914
-4786:2:1919
-4787:2:1920
-4788:0:4365
-4789:2:1932
-4790:0:4365
-4791:3:3757
-4792:0:4365
-4793:2:1934
-4794:0:4365
-4795:3:3758
-4796:0:4365
-4797:2:1935
-4798:0:4365
-4799:2:1936
-4800:0:4365
-4801:2:2129
-4802:0:4365
-4803:2:2130
-4804:0:4365
-4805:2:2134
-4806:0:4365
-4807:3:3757
-4808:0:4365
-4809:2:2136
-4810:0:4365
-4811:3:3758
-4812:0:4365
-4813:2:2137
-4814:2:2141
-4815:2:2142
-4816:2:2150
-4817:2:2151
-4818:2:2155
-4819:2:2156
-4820:2:2150
-4821:2:2151
-4822:2:2155
-4823:2:2156
-4824:2:2164
-4825:2:2169
-4826:2:2173
-4827:2:2174
-4828:2:2181
-4829:2:2182
-4830:2:2193
-4831:2:2194
-4832:2:2195
-4833:2:2193
-4834:2:2194
-4835:2:2195
-4836:2:2206
-4837:2:2211
-4838:2:2212
-4839:0:4365
-4840:2:2224
-4841:0:4365
-4842:3:3757
-4843:0:4365
-4844:2:2226
-4845:0:4365
-4846:3:3758
-4847:0:4365
-4848:2:2230
-4849:0:4365
-4850:3:3757
-4851:0:4365
-4852:2:2235
-4853:2:2239
-4854:2:2240
-4855:2:2248
-4856:2:2249
-4857:2:2253
-4858:2:2254
-4859:2:2248
-4860:2:2249
-4861:2:2250
-4862:2:2262
-4863:2:2267
-4864:2:2271
-4865:2:2272
-4866:2:2279
-4867:2:2280
-4868:2:2291
-4869:2:2292
-4870:2:2293
-4871:2:2291
-4872:2:2292
-4873:2:2293
-4874:2:2304
-4875:2:2309
-4876:2:2310
-4877:0:4365
-4878:3:3758
-4879:0:4365
-4880:2:2322
-4881:0:4365
-4882:2:1169
-4883:0:4365
-4884:3:3757
-4885:0:4365
-4886:2:1170
-4887:0:4365
-4888:3:3758
-4889:0:4365
-4890:3:3759
-4891:0:4365
-4892:3:3972
-4893:0:4365
-4894:3:4077
-4895:0:4365
-4896:3:4078
-4897:0:4365
-4898:3:4082
-4899:0:4365
-4900:3:4088
-4901:0:4365
-4902:3:4092
-4903:3:4093
-4904:3:4097
-4905:3:4101
-4906:3:4102
-4907:3:4097
-4908:3:4101
-4909:3:4102
-4910:3:4106
-4911:3:4114
-4912:3:4115
-4913:3:4120
-4914:3:4127
-4915:3:4128
-4916:3:4127
-4917:3:4128
-4918:3:4135
-4919:3:4140
-4920:0:4365
-4921:3:4151
-4922:0:4365
-4923:3:4155
-4924:3:4156
-4925:3:4160
-4926:3:4164
-4927:3:4165
-4928:3:4160
-4929:3:4164
-4930:3:4165
-4931:3:4169
-4932:3:4177
-4933:3:4178
-4934:3:4183
-4935:3:4190
-4936:3:4191
-4937:3:4190
-4938:3:4191
-4939:3:4198
-4940:3:4203
-4941:0:4365
-4942:3:4151
-4943:0:4365
-4944:3:4155
-4945:3:4156
-4946:3:4160
-4947:3:4164
-4948:3:4165
-4949:3:4160
-4950:3:4164
-4951:3:4165
-4952:3:4169
-4953:3:4177
-4954:3:4178
-4955:3:4183
-4956:3:4190
-4957:3:4191
-4958:3:4190
-4959:3:4191
-4960:3:4198
-4961:3:4203
-4962:0:4365
-4963:3:4214
-4964:0:4365
-4965:3:4222
-4966:3:4223
-4967:3:4227
-4968:3:4231
-4969:3:4232
-4970:3:4227
-4971:3:4231
-4972:3:4232
-4973:3:4236
-4974:3:4244
-4975:3:4245
-4976:3:4250
-4977:3:4257
-4978:3:4258
-4979:3:4257
-4980:3:4258
-4981:3:4265
-4982:3:4270
-4983:0:4365
-4984:3:4285
-4985:0:4365
-4986:3:4286
-4987:0:4365
-4988:2:1173
-4989:0:4365
-4990:3:4287
-4991:0:4365
-4992:2:1179
-4993:0:4365
-4994:2:1180
-4995:0:4365
-4996:3:4286
-4997:0:4365
-4998:2:1181
-4999:2:1185
-5000:2:1186
-5001:2:1194
-5002:2:1195
-5003:2:1199
-5004:2:1200
-5005:2:1194
-5006:2:1195
-5007:2:1199
-5008:2:1200
-5009:2:1208
-5010:2:1213
-5011:2:1217
-5012:2:1218
-5013:2:1225
-5014:2:1226
-5015:2:1237
-5016:2:1238
-5017:2:1239
-5018:2:1237
-5019:2:1238
-5020:2:1239
-5021:2:1250
-5022:2:1255
-5023:2:1256
-5024:0:4365
-5025:3:4287
-5026:0:4365
-5027:2:1268
-5028:0:4365
-5029:3:4286
-5030:0:4365
-5031:2:1270
-5032:0:4365
-5033:3:4287
-5034:0:4365
-5035:2:1271
-5036:2:1275
-5037:2:1276
-5038:2:1284
-5039:2:1285
-5040:2:1289
-5041:2:1290
-5042:2:1284
-5043:2:1285
-5044:2:1289
-5045:2:1290
-5046:2:1298
-5047:2:1303
-5048:2:1307
-5049:2:1308
-5050:2:1315
-5051:2:1316
-5052:2:1327
-5053:2:1328
-5054:2:1329
-5055:2:1327
-5056:2:1328
-5057:2:1329
-5058:2:1340
-5059:2:1345
-5060:2:1346
-5061:0:4365
-5062:2:1358
-5063:0:4365
-5064:2:1360
-5065:0:4365
-5066:3:4286
-5067:0:4365
-5068:2:1361
-5069:0:4365
-5070:3:4287
-5071:0:4365
-5072:2:1362
-5073:2:1366
-5074:2:1367
-5075:2:1375
-5076:2:1376
-5077:2:1380
-5078:2:1381
-5079:2:1375
-5080:2:1376
-5081:2:1380
-5082:2:1381
-5083:2:1389
-5084:2:1394
-5085:2:1398
-5086:2:1399
-5087:2:1406
-5088:2:1407
-5089:2:1418
-5090:2:1419
-5091:2:1420
-5092:2:1418
-5093:2:1419
-5094:2:1420
-5095:2:1431
-5096:2:1436
-5097:2:1437
-5098:0:4365
-5099:2:1449
-5100:0:4365
-5101:3:4286
-5102:0:4365
-5103:2:1451
-5104:0:4365
-5105:3:4287
-5106:0:4365
-5107:2:1652
-5108:0:4365
-5109:2:1653
-5110:0:4365
-5111:2:1657
-5112:0:4365
-5113:2:1660
-5114:0:4365
-5115:3:4286
-5116:0:4365
-5117:2:1665
-5118:2:1669
-5119:2:1670
-5120:2:1678
-5121:2:1679
-5122:2:1683
-5123:2:1684
-5124:2:1678
-5125:2:1679
-5126:2:1680
-5127:2:1692
-5128:2:1697
-5129:2:1701
-5130:2:1702
-5131:2:1709
-5132:2:1710
-5133:2:1721
-5134:2:1722
-5135:2:1723
-5136:2:1721
-5137:2:1722
-5138:2:1723
-5139:2:1734
-5140:2:1739
-5141:2:1740
-5142:0:4365
-5143:3:4287
-5144:0:4365
-5145:2:1752
-5146:0:4365
-5147:3:4286
-5148:0:4365
-5149:2:1754
-5150:0:4365
-5151:3:4287
-5152:0:4365
-5153:2:1755
-5154:2:1759
-5155:2:1760
-5156:2:1768
-5157:2:1769
-5158:2:1773
-5159:2:1774
-5160:2:1768
-5161:2:1769
-5162:2:1773
-5163:2:1774
-5164:2:1782
-5165:2:1787
-5166:2:1791
-5167:2:1792
-5168:2:1799
-5169:2:1800
-5170:2:1811
-5171:2:1812
-5172:2:1813
-5173:2:1811
-5174:2:1812
-5175:2:1813
-5176:2:1824
-5177:2:1829
-5178:2:1830
-5179:0:4365
-5180:2:1842
-5181:0:4365
-5182:3:4286
-5183:0:4365
-5184:2:1844
-5185:0:4365
-5186:3:4287
-5187:0:4365
-5188:2:1845
-5189:2:1849
-5190:2:1850
-5191:2:1858
-5192:2:1859
-5193:2:1863
-5194:2:1864
-5195:2:1858
-5196:2:1859
-5197:2:1863
-5198:2:1864
-5199:2:1872
-5200:2:1877
-5201:2:1881
-5202:2:1882
-5203:2:1889
-5204:2:1890
-5205:2:1901
-5206:2:1902
-5207:2:1903
-5208:2:1901
-5209:2:1902
-5210:2:1903
-5211:2:1914
-5212:2:1919
-5213:2:1920
-5214:0:4365
-5215:2:1932
-5216:0:4365
-5217:3:4286
-5218:0:4365
-5219:2:1934
-5220:0:4365
-5221:3:4287
-5222:0:4365
-5223:2:1935
-5224:0:4365
-5225:2:1936
-5226:0:4365
-5227:2:2129
-5228:0:4365
-5229:2:2130
-5230:0:4365
-5231:2:2134
-5232:0:4365
-5233:3:4286
-5234:0:4365
-5235:2:2136
-5236:0:4365
-5237:3:4287
-5238:0:4365
-5239:2:2137
-5240:2:2141
-5241:2:2142
-5242:2:2150
-5243:2:2151
-5244:2:2155
-5245:2:2156
-5246:2:2150
-5247:2:2151
-5248:2:2155
-5249:2:2156
-5250:2:2164
-5251:2:2169
-5252:2:2173
-5253:2:2174
-5254:2:2181
-5255:2:2182
-5256:2:2193
-5257:2:2194
-5258:2:2195
-5259:2:2193
-5260:2:2194
-5261:2:2195
-5262:2:2206
-5263:2:2211
-5264:2:2212
-5265:0:4365
-5266:2:2224
-5267:0:4365
-5268:3:4286
-5269:0:4365
-5270:2:2226
-5271:0:4365
-5272:3:4287
-5273:0:4365
-5274:2:2230
-5275:0:4365
-5276:3:4286
-5277:0:4365
-5278:2:2235
-5279:2:2239
-5280:2:2240
-5281:2:2248
-5282:2:2249
-5283:2:2253
-5284:2:2254
-5285:2:2248
-5286:2:2249
-5287:2:2250
-5288:2:2262
-5289:2:2267
-5290:2:2271
-5291:2:2272
-5292:2:2279
-5293:2:2280
-5294:2:2291
-5295:2:2292
-5296:2:2293
-5297:2:2291
-5298:2:2292
-5299:2:2293
-5300:2:2304
-5301:2:2309
-5302:2:2310
-5303:0:4365
-5304:3:4287
-5305:0:4365
-5306:2:2322
-5307:0:4365
-5308:2:1169
-5309:0:4365
-5310:3:4286
-5311:0:4365
-5312:2:1170
-5313:0:4365
-5314:3:4287
-5315:0:4365
-5316:3:4288
-5317:0:4365
-5318:3:4294
-5319:0:4365
-5320:3:4295
-5321:0:4365
-5322:3:2338
-5323:0:4365
-5324:3:2339
-5325:3:2343
-5326:3:2344
-5327:3:2352
-5328:3:2353
-5329:3:2357
-5330:3:2358
-5331:3:2352
-5332:3:2353
-5333:3:2357
-5334:3:2358
-5335:3:2366
-5336:3:2371
-5337:3:2375
-5338:3:2376
-5339:3:2383
-5340:3:2384
-5341:3:2395
-5342:3:2396
-5343:3:2397
-5344:3:2395
-5345:3:2396
-5346:3:2397
-5347:3:2408
-5348:3:2413
-5349:3:2414
-5350:0:4365
-5351:3:2426
-5352:0:4365
-5353:3:2427
-5354:0:4365
-5355:2:1173
-5356:0:4365
-5357:3:2428
-5358:0:4365
-5359:2:1179
-5360:0:4365
-5361:2:1180
-5362:0:4365
-5363:3:2427
-5364:0:4365
-5365:2:1181
-5366:2:1185
-5367:2:1186
-5368:2:1194
-5369:2:1195
-5370:2:1199
-5371:2:1200
-5372:2:1194
-5373:2:1195
-5374:2:1199
-5375:2:1200
-5376:2:1208
-5377:2:1213
-5378:2:1217
-5379:2:1218
-5380:2:1225
-5381:2:1226
-5382:2:1237
-5383:2:1238
-5384:2:1239
-5385:2:1237
-5386:2:1238
-5387:2:1239
-5388:2:1250
-5389:2:1255
-5390:2:1256
-5391:0:4365
-5392:3:2428
-5393:0:4365
-5394:2:1268
-5395:0:4365
-5396:3:2427
-5397:0:4365
-5398:2:1270
-5399:0:4365
-5400:3:2428
-5401:0:4365
-5402:2:1271
-5403:2:1275
-5404:2:1276
-5405:2:1284
-5406:2:1285
-5407:2:1289
-5408:2:1290
-5409:2:1284
-5410:2:1285
-5411:2:1289
-5412:2:1290
-5413:2:1298
-5414:2:1303
-5415:2:1307
-5416:2:1308
-5417:2:1315
-5418:2:1316
-5419:2:1327
-5420:2:1328
-5421:2:1329
-5422:2:1327
-5423:2:1328
-5424:2:1329
-5425:2:1340
-5426:2:1345
-5427:2:1346
-5428:0:4365
-5429:2:1358
-5430:0:4365
-5431:2:1360
-5432:0:4365
-5433:3:2427
-5434:0:4365
-5435:2:1361
-5436:0:4365
-5437:3:2428
-5438:0:4365
-5439:2:1362
-5440:2:1366
-5441:2:1367
-5442:2:1375
-5443:2:1376
-5444:2:1380
-5445:2:1381
-5446:2:1375
-5447:2:1376
-5448:2:1380
-5449:2:1381
-5450:2:1389
-5451:2:1394
-5452:2:1398
-5453:2:1399
-5454:2:1406
-5455:2:1407
-5456:2:1418
-5457:2:1419
-5458:2:1420
-5459:2:1418
-5460:2:1419
-5461:2:1420
-5462:2:1431
-5463:2:1436
-5464:2:1437
-5465:0:4365
-5466:2:1449
-5467:0:4365
-5468:3:2427
-5469:0:4365
-5470:2:1451
-5471:0:4365
-5472:3:2428
-5473:0:4365
-5474:2:1652
-5475:0:4365
-5476:2:1653
-5477:0:4365
-5478:2:1657
-5479:0:4365
-5480:2:1660
-5481:0:4365
-5482:3:2427
-5483:0:4365
-5484:2:1665
-5485:2:1669
-5486:2:1670
-5487:2:1678
-5488:2:1679
-5489:2:1683
-5490:2:1684
-5491:2:1678
-5492:2:1679
-5493:2:1680
-5494:2:1692
-5495:2:1697
-5496:2:1701
-5497:2:1702
-5498:2:1709
-5499:2:1710
-5500:2:1721
-5501:2:1722
-5502:2:1723
-5503:2:1721
-5504:2:1722
-5505:2:1723
-5506:2:1734
-5507:2:1739
-5508:2:1740
-5509:0:4365
-5510:3:2428
-5511:0:4365
-5512:2:1752
-5513:0:4365
-5514:3:2427
-5515:0:4365
-5516:2:1754
-5517:0:4365
-5518:3:2428
-5519:0:4365
-5520:2:1755
-5521:2:1759
-5522:2:1760
-5523:2:1768
-5524:2:1769
-5525:2:1773
-5526:2:1774
-5527:2:1768
-5528:2:1769
-5529:2:1773
-5530:2:1774
-5531:2:1782
-5532:2:1787
-5533:2:1791
-5534:2:1792
-5535:2:1799
-5536:2:1800
-5537:2:1811
-5538:2:1812
-5539:2:1813
-5540:2:1811
-5541:2:1812
-5542:2:1813
-5543:2:1824
-5544:2:1829
-5545:2:1830
-5546:0:4365
-5547:2:1842
-5548:0:4365
-5549:3:2427
-5550:0:4365
-5551:2:1844
-5552:0:4365
-5553:3:2428
-5554:0:4365
-5555:2:1845
-5556:2:1849
-5557:2:1850
-5558:2:1858
-5559:2:1859
-5560:2:1863
-5561:2:1864
-5562:2:1858
-5563:2:1859
-5564:2:1863
-5565:2:1864
-5566:2:1872
-5567:2:1877
-5568:2:1881
-5569:2:1882
-5570:2:1889
-5571:2:1890
-5572:2:1901
-5573:2:1902
-5574:2:1903
-5575:2:1901
-5576:2:1902
-5577:2:1903
-5578:2:1914
-5579:2:1919
-5580:2:1920
-5581:0:4365
-5582:2:1932
-5583:0:4365
-5584:3:2427
-5585:0:4365
-5586:2:1934
-5587:0:4365
-5588:3:2428
-5589:0:4365
-5590:2:1935
-5591:0:4365
-5592:2:1936
-5593:0:4365
-5594:2:2129
-5595:0:4365
-5596:2:2130
-5597:0:4365
-5598:2:2134
-5599:0:4365
-5600:3:2427
-5601:0:4365
-5602:2:2136
-5603:0:4365
-5604:3:2428
-5605:0:4365
-5606:2:2137
-5607:2:2141
-5608:2:2142
-5609:2:2150
-5610:2:2151
-5611:2:2155
-5612:2:2156
-5613:2:2150
-5614:2:2151
-5615:2:2155
-5616:2:2156
-5617:2:2164
-5618:2:2169
-5619:2:2173
-5620:2:2174
-5621:2:2181
-5622:2:2182
-5623:2:2193
-5624:2:2194
-5625:2:2195
-5626:2:2193
-5627:2:2194
-5628:2:2195
-5629:2:2206
-5630:2:2211
-5631:2:2212
-5632:0:4365
-5633:2:2224
-5634:0:4365
-5635:3:2427
-5636:0:4365
-5637:2:2226
-5638:0:4365
-5639:3:2428
-5640:0:4365
-5641:2:2230
-5642:0:4365
-5643:3:2427
-5644:0:4365
-5645:2:2235
-5646:2:2239
-5647:2:2240
-5648:2:2248
-5649:2:2249
-5650:2:2253
-5651:2:2254
-5652:2:2248
-5653:2:2249
-5654:2:2250
-5655:2:2262
-5656:2:2267
-5657:2:2271
-5658:2:2272
-5659:2:2279
-5660:2:2280
-5661:2:2291
-5662:2:2292
-5663:2:2293
-5664:2:2291
-5665:2:2292
-5666:2:2293
-5667:2:2304
-5668:2:2309
-5669:2:2310
-5670:0:4365
-5671:3:2428
-5672:0:4365
-5673:2:2322
-5674:0:4365
-5675:2:1169
-5676:0:4365
-5677:3:2427
-5678:0:4365
-5679:2:1170
-5680:0:4365
-5681:3:2428
-5682:0:4365
-5683:3:2429
-5684:0:4365
-5685:3:2435
-5686:3:2436
-5687:0:4365
-5688:3:2440
-5689:3:2444
-5690:3:2445
-5691:3:2453
-5692:3:2454
-5693:3:2458
-5694:3:2459
-5695:3:2453
-5696:3:2454
-5697:3:2458
-5698:3:2459
-5699:3:2467
-5700:3:2472
-5701:3:2473
-5702:3:2484
-5703:3:2485
-5704:3:2496
-5705:3:2497
-5706:3:2498
-5707:3:2496
-5708:3:2497
-5709:3:2498
-5710:3:2509
-5711:3:2514
-5712:3:2515
-5713:0:4365
-5714:3:2527
-5715:0:4365
-5716:3:2528
-5717:0:4365
-5718:2:1173
-5719:0:4365
-5720:3:2529
-5721:0:4365
-5722:2:1179
-5723:0:4365
-5724:2:1180
-5725:0:4365
-5726:3:2528
-5727:0:4365
-5728:2:1181
-5729:2:1185
-5730:2:1186
-5731:2:1194
-5732:2:1195
-5733:2:1199
-5734:2:1200
-5735:2:1194
-5736:2:1195
-5737:2:1199
-5738:2:1200
-5739:2:1208
-5740:2:1213
-5741:2:1217
-5742:2:1218
-5743:2:1225
-5744:2:1226
-5745:2:1237
-5746:2:1238
-5747:2:1239
-5748:2:1237
-5749:2:1238
-5750:2:1239
-5751:2:1250
-5752:2:1255
-5753:2:1256
-5754:0:4365
-5755:3:2529
-5756:0:4365
-5757:2:1268
-5758:0:4365
-5759:3:2528
-5760:0:4365
-5761:2:1270
-5762:0:4365
-5763:3:2529
-5764:0:4365
-5765:2:1271
-5766:2:1275
-5767:2:1276
-5768:2:1284
-5769:2:1285
-5770:2:1289
-5771:2:1290
-5772:2:1284
-5773:2:1285
-5774:2:1289
-5775:2:1290
-5776:2:1298
-5777:2:1303
-5778:2:1307
-5779:2:1308
-5780:2:1315
-5781:2:1316
-5782:2:1327
-5783:2:1328
-5784:2:1329
-5785:2:1327
-5786:2:1328
-5787:2:1329
-5788:2:1340
-5789:2:1345
-5790:2:1346
-5791:0:4365
-5792:2:1358
-5793:0:4365
-5794:2:1360
-5795:0:4365
-5796:3:2528
-5797:0:4365
-5798:2:1361
-5799:0:4365
-5800:3:2529
-5801:0:4365
-5802:2:1362
-5803:2:1366
-5804:2:1367
-5805:2:1375
-5806:2:1376
-5807:2:1380
-5808:2:1381
-5809:2:1375
-5810:2:1376
-5811:2:1380
-5812:2:1381
-5813:2:1389
-5814:2:1394
-5815:2:1398
-5816:2:1399
-5817:2:1406
-5818:2:1407
-5819:2:1418
-5820:2:1419
-5821:2:1420
-5822:2:1418
-5823:2:1419
-5824:2:1420
-5825:2:1431
-5826:2:1436
-5827:2:1437
-5828:0:4365
-5829:2:1449
-5830:0:4365
-5831:3:2528
-5832:0:4365
-5833:2:1451
-5834:0:4365
-5835:3:2529
-5836:0:4365
-5837:2:1652
-5838:0:4365
-5839:2:1653
-5840:0:4365
-5841:2:1657
-5842:0:4365
-5843:2:1660
-5844:0:4365
-5845:3:2528
-5846:0:4365
-5847:2:1665
-5848:2:1669
-5849:2:1670
-5850:2:1678
-5851:2:1679
-5852:2:1683
-5853:2:1684
-5854:2:1678
-5855:2:1679
-5856:2:1680
-5857:2:1692
-5858:2:1697
-5859:2:1701
-5860:2:1702
-5861:2:1709
-5862:2:1710
-5863:2:1721
-5864:2:1722
-5865:2:1723
-5866:2:1721
-5867:2:1722
-5868:2:1723
-5869:2:1734
-5870:2:1739
-5871:2:1740
-5872:0:4365
-5873:3:2529
-5874:0:4365
-5875:2:1752
-5876:0:4365
-5877:3:2528
-5878:0:4365
-5879:2:1754
-5880:0:4365
-5881:3:2529
-5882:0:4365
-5883:2:1755
-5884:2:1759
-5885:2:1760
-5886:2:1768
-5887:2:1769
-5888:2:1773
-5889:2:1774
-5890:2:1768
-5891:2:1769
-5892:2:1773
-5893:2:1774
-5894:2:1782
-5895:2:1787
-5896:2:1791
-5897:2:1792
-5898:2:1799
-5899:2:1800
-5900:2:1811
-5901:2:1812
-5902:2:1813
-5903:2:1811
-5904:2:1812
-5905:2:1813
-5906:2:1824
-5907:2:1829
-5908:2:1830
-5909:0:4365
-5910:2:1842
-5911:0:4365
-5912:3:2528
-5913:0:4365
-5914:2:1844
-5915:0:4365
-5916:3:2529
-5917:0:4365
-5918:2:1845
-5919:2:1849
-5920:2:1850
-5921:2:1858
-5922:2:1859
-5923:2:1863
-5924:2:1864
-5925:2:1858
-5926:2:1859
-5927:2:1863
-5928:2:1864
-5929:2:1872
-5930:2:1877
-5931:2:1881
-5932:2:1882
-5933:2:1889
-5934:2:1890
-5935:2:1901
-5936:2:1902
-5937:2:1903
-5938:2:1901
-5939:2:1902
-5940:2:1903
-5941:2:1914
-5942:2:1919
-5943:2:1920
-5944:0:4365
-5945:2:1932
-5946:0:4365
-5947:3:2528
-5948:0:4365
-5949:2:1934
-5950:0:4365
-5951:3:2529
-5952:0:4365
-5953:2:1935
-5954:0:4365
-5955:2:1936
-5956:0:4365
-5957:2:2129
-5958:0:4365
-5959:2:2130
-5960:0:4365
-5961:2:2134
-5962:0:4365
-5963:3:2528
-5964:0:4365
-5965:2:2136
-5966:0:4365
-5967:3:2529
-5968:0:4365
-5969:2:2137
-5970:2:2141
-5971:2:2142
-5972:2:2150
-5973:2:2151
-5974:2:2155
-5975:2:2156
-5976:2:2150
-5977:2:2151
-5978:2:2155
-5979:2:2156
-5980:2:2164
-5981:2:2169
-5982:2:2173
-5983:2:2174
-5984:2:2181
-5985:2:2182
-5986:2:2193
-5987:2:2194
-5988:2:2195
-5989:2:2193
-5990:2:2194
-5991:2:2195
-5992:2:2206
-5993:2:2211
-5994:2:2212
-5995:0:4365
-5996:2:2224
-5997:0:4365
-5998:3:2528
-5999:0:4365
-6000:2:2226
-6001:0:4365
-6002:3:2529
-6003:0:4365
-6004:2:2230
-6005:0:4365
-6006:3:2528
-6007:0:4365
-6008:2:2235
-6009:2:2239
-6010:2:2240
-6011:2:2248
-6012:2:2249
-6013:2:2253
-6014:2:2254
-6015:2:2248
-6016:2:2249
-6017:2:2250
-6018:2:2262
-6019:2:2267
-6020:2:2271
-6021:2:2272
-6022:2:2279
-6023:2:2280
-6024:2:2291
-6025:2:2292
-6026:2:2293
-6027:2:2291
-6028:2:2292
-6029:2:2293
-6030:2:2304
-6031:2:2309
-6032:2:2310
-6033:0:4365
-6034:3:2529
-6035:0:4365
-6036:2:2322
-6037:0:4365
-6038:2:1169
-6039:0:4365
-6040:3:2528
-6041:0:4365
-6042:2:1170
-6043:0:4365
-6044:3:2529
-6045:0:4365
-6046:3:2530
-6047:0:4365
-6048:3:2536
-6049:0:4365
-6050:3:2537
-6051:0:4365
-6052:3:2547
-6053:0:4365
-6054:3:2548
-6055:0:4365
-6056:3:2552
-6057:3:2553
-6058:3:2557
-6059:3:2561
-6060:3:2562
-6061:3:2557
-6062:3:2561
-6063:3:2562
-6064:3:2566
-6065:3:2574
-6066:3:2575
-6067:3:2580
-6068:3:2587
-6069:3:2588
-6070:3:2587
-6071:3:2588
-6072:3:2595
-6073:3:2600
-6074:0:4365
-6075:3:2611
-6076:0:4365
-6077:3:2615
-6078:3:2616
-6079:3:2620
-6080:3:2624
-6081:3:2625
-6082:3:2620
-6083:3:2624
-6084:3:2625
-6085:3:2629
-6086:3:2637
-6087:3:2638
-6088:3:2643
-6089:3:2650
-6090:3:2651
-6091:3:2650
-6092:3:2651
-6093:3:2658
-6094:3:2663
-6095:0:4365
-6096:3:2611
-6097:0:4365
-6098:3:2615
-6099:3:2616
-6100:3:2620
-6101:3:2624
-6102:3:2625
-6103:3:2620
-6104:3:2624
-6105:3:2625
-6106:3:2629
-6107:3:2637
-6108:3:2638
-6109:3:2643
-6110:3:2650
-6111:3:2651
-6112:3:2650
-6113:3:2651
-6114:3:2658
-6115:3:2663
-6116:0:4365
-6117:3:2674
-6118:0:4365
-6119:3:2682
-6120:3:2683
-6121:3:2687
-6122:3:2691
-6123:3:2692
-6124:3:2687
-6125:3:2691
-6126:3:2692
-6127:3:2696
-6128:3:2704
-6129:3:2705
-6130:3:2710
-6131:3:2717
-6132:3:2718
-6133:3:2717
-6134:3:2718
-6135:3:2725
-6136:3:2730
-6137:0:4365
-6138:3:2745
-6139:0:4365
-6140:3:2746
-6141:0:4365
-6142:2:1173
-6143:0:4365
-6144:3:2747
-6145:0:4365
-6146:2:1179
-6147:0:4365
-6148:2:1180
-6149:0:4365
-6150:3:2746
-6151:0:4365
-6152:2:1181
-6153:2:1185
-6154:2:1186
-6155:2:1194
-6156:2:1195
-6157:2:1199
-6158:2:1200
-6159:2:1194
-6160:2:1195
-6161:2:1199
-6162:2:1200
-6163:2:1208
-6164:2:1213
-6165:2:1217
-6166:2:1218
-6167:2:1225
-6168:2:1226
-6169:2:1237
-6170:2:1238
-6171:2:1239
-6172:2:1237
-6173:2:1238
-6174:2:1239
-6175:2:1250
-6176:2:1255
-6177:2:1256
-6178:0:4365
-6179:3:2747
-6180:0:4365
-6181:2:1268
-6182:0:4365
-6183:3:2746
-6184:0:4365
-6185:2:1270
-6186:0:4365
-6187:3:2747
-6188:0:4365
-6189:2:1271
-6190:2:1275
-6191:2:1276
-6192:2:1284
-6193:2:1285
-6194:2:1289
-6195:2:1290
-6196:2:1284
-6197:2:1285
-6198:2:1289
-6199:2:1290
-6200:2:1298
-6201:2:1303
-6202:2:1307
-6203:2:1308
-6204:2:1315
-6205:2:1316
-6206:2:1327
-6207:2:1328
-6208:2:1329
-6209:2:1327
-6210:2:1328
-6211:2:1329
-6212:2:1340
-6213:2:1345
-6214:2:1346
-6215:0:4365
-6216:2:1358
-6217:0:4365
-6218:2:1360
-6219:0:4365
-6220:3:2746
-6221:0:4365
-6222:2:1361
-6223:0:4365
-6224:3:2747
-6225:0:4365
-6226:2:1362
-6227:2:1366
-6228:2:1367
-6229:2:1375
-6230:2:1376
-6231:2:1380
-6232:2:1381
-6233:2:1375
-6234:2:1376
-6235:2:1380
-6236:2:1381
-6237:2:1389
-6238:2:1394
-6239:2:1398
-6240:2:1399
-6241:2:1406
-6242:2:1407
-6243:2:1418
-6244:2:1419
-6245:2:1420
-6246:2:1418
-6247:2:1419
-6248:2:1420
-6249:2:1431
-6250:2:1436
-6251:2:1437
-6252:0:4365
-6253:2:1449
-6254:0:4365
-6255:3:2746
-6256:0:4365
-6257:2:1451
-6258:0:4365
-6259:3:2747
-6260:0:4365
-6261:2:1652
-6262:0:4365
-6263:2:1653
-6264:0:4365
-6265:2:1657
-6266:0:4365
-6267:2:1660
-6268:0:4365
-6269:3:2746
-6270:0:4365
-6271:2:1665
-6272:2:1669
-6273:2:1670
-6274:2:1678
-6275:2:1679
-6276:2:1683
-6277:2:1684
-6278:2:1678
-6279:2:1679
-6280:2:1680
-6281:2:1692
-6282:2:1697
-6283:2:1701
-6284:2:1702
-6285:2:1709
-6286:2:1710
-6287:2:1721
-6288:2:1722
-6289:2:1723
-6290:2:1721
-6291:2:1722
-6292:2:1723
-6293:2:1734
-6294:2:1739
-6295:2:1740
-6296:0:4365
-6297:3:2747
-6298:0:4365
-6299:2:1752
-6300:0:4365
-6301:3:2746
-6302:0:4365
-6303:2:1754
-6304:0:4365
-6305:3:2747
-6306:0:4365
-6307:2:1755
-6308:2:1759
-6309:2:1760
-6310:2:1768
-6311:2:1769
-6312:2:1773
-6313:2:1774
-6314:2:1768
-6315:2:1769
-6316:2:1773
-6317:2:1774
-6318:2:1782
-6319:2:1787
-6320:2:1791
-6321:2:1792
-6322:2:1799
-6323:2:1800
-6324:2:1811
-6325:2:1812
-6326:2:1813
-6327:2:1811
-6328:2:1812
-6329:2:1813
-6330:2:1824
-6331:2:1829
-6332:2:1830
-6333:0:4365
-6334:2:1842
-6335:0:4365
-6336:3:2746
-6337:0:4365
-6338:2:1844
-6339:0:4365
-6340:3:2747
-6341:0:4365
-6342:2:1845
-6343:2:1849
-6344:2:1850
-6345:2:1858
-6346:2:1859
-6347:2:1863
-6348:2:1864
-6349:2:1858
-6350:2:1859
-6351:2:1863
-6352:2:1864
-6353:2:1872
-6354:2:1877
-6355:2:1881
-6356:2:1882
-6357:2:1889
-6358:2:1890
-6359:2:1901
-6360:2:1902
-6361:2:1903
-6362:2:1901
-6363:2:1902
-6364:2:1903
-6365:2:1914
-6366:2:1919
-6367:2:1920
-6368:0:4365
-6369:2:1932
-6370:0:4365
-6371:3:2746
-6372:0:4365
-6373:2:1934
-6374:0:4365
-6375:3:2747
-6376:0:4365
-6377:2:1935
-6378:0:4365
-6379:2:1936
-6380:0:4365
-6381:2:2129
-6382:0:4365
-6383:2:2130
-6384:0:4365
-6385:2:2134
-6386:0:4365
-6387:3:2746
-6388:0:4365
-6389:2:2136
-6390:0:4365
-6391:3:2747
-6392:0:4365
-6393:2:2137
-6394:2:2141
-6395:2:2142
-6396:2:2150
-6397:2:2151
-6398:2:2155
-6399:2:2156
-6400:2:2150
-6401:2:2151
-6402:2:2155
-6403:2:2156
-6404:2:2164
-6405:2:2169
-6406:2:2173
-6407:2:2174
-6408:2:2181
-6409:2:2182
-6410:2:2193
-6411:2:2194
-6412:2:2195
-6413:2:2193
-6414:2:2194
-6415:2:2195
-6416:2:2206
-6417:2:2211
-6418:2:2212
-6419:0:4365
-6420:2:2224
-6421:0:4365
-6422:3:2746
-6423:0:4365
-6424:2:2226
-6425:0:4365
-6426:3:2747
-6427:0:4365
-6428:2:2230
-6429:0:4365
-6430:3:2746
-6431:0:4365
-6432:2:2235
-6433:2:2239
-6434:2:2240
-6435:2:2248
-6436:2:2249
-6437:2:2253
-6438:2:2254
-6439:2:2248
-6440:2:2249
-6441:2:2250
-6442:2:2262
-6443:2:2267
-6444:2:2271
-6445:2:2272
-6446:2:2279
-6447:2:2280
-6448:2:2291
-6449:2:2292
-6450:2:2293
-6451:2:2291
-6452:2:2292
-6453:2:2293
-6454:2:2304
-6455:2:2309
-6456:2:2310
-6457:0:4365
-6458:3:2747
-6459:0:4365
-6460:2:2322
-6461:0:4365
-6462:2:1169
-6463:0:4365
-6464:3:2746
-6465:0:4365
-6466:2:1170
-6467:0:4365
-6468:3:2747
-6469:0:4365
-6470:3:2748
-6471:0:4365
-6472:3:2754
-6473:0:4365
-6474:3:2755
-6475:3:2759
-6476:3:2760
-6477:3:2768
-6478:3:2769
-6479:3:2773
-6480:3:2774
-6481:3:2768
-6482:3:2769
-6483:3:2773
-6484:3:2774
-6485:3:2782
-6486:3:2787
-6487:3:2791
-6488:3:2792
-6489:3:2799
-6490:3:2800
-6491:3:2811
-6492:3:2812
-6493:3:2813
-6494:3:2811
-6495:3:2812
-6496:3:2813
-6497:3:2824
-6498:3:2829
-6499:3:2830
-6500:0:4365
-6501:3:2842
-6502:0:4365
-6503:3:2843
-6504:0:4365
-6505:2:1173
-6506:0:4365
-6507:3:2844
-6508:0:4365
-6509:2:1179
-6510:0:4365
-6511:2:1180
-6512:0:4365
-6513:3:2843
-6514:0:4365
-6515:2:1181
-6516:2:1185
-6517:2:1186
-6518:2:1194
-6519:2:1195
-6520:2:1199
-6521:2:1200
-6522:2:1194
-6523:2:1195
-6524:2:1199
-6525:2:1200
-6526:2:1208
-6527:2:1213
-6528:2:1217
-6529:2:1218
-6530:2:1225
-6531:2:1226
-6532:2:1237
-6533:2:1238
-6534:2:1239
-6535:2:1237
-6536:2:1238
-6537:2:1239
-6538:2:1250
-6539:2:1255
-6540:2:1256
-6541:0:4365
-6542:3:2844
-6543:0:4365
-6544:2:1268
-6545:0:4365
-6546:3:2843
-6547:0:4365
-6548:2:1270
-6549:0:4365
-6550:3:2844
-6551:0:4365
-6552:2:1271
-6553:2:1275
-6554:2:1276
-6555:2:1284
-6556:2:1285
-6557:2:1289
-6558:2:1290
-6559:2:1284
-6560:2:1285
-6561:2:1289
-6562:2:1290
-6563:2:1298
-6564:2:1303
-6565:2:1307
-6566:2:1308
-6567:2:1315
-6568:2:1316
-6569:2:1327
-6570:2:1328
-6571:2:1329
-6572:2:1327
-6573:2:1328
-6574:2:1329
-6575:2:1340
-6576:2:1345
-6577:2:1346
-6578:0:4365
-6579:2:1358
-6580:0:4365
-6581:2:1360
-6582:0:4365
-6583:3:2843
-6584:0:4365
-6585:2:1361
-6586:0:4365
-6587:3:2844
-6588:0:4365
-6589:2:1362
-6590:2:1366
-6591:2:1367
-6592:2:1375
-6593:2:1376
-6594:2:1380
-6595:2:1381
-6596:2:1375
-6597:2:1376
-6598:2:1380
-6599:2:1381
-6600:2:1389
-6601:2:1394
-6602:2:1398
-6603:2:1399
-6604:2:1406
-6605:2:1407
-6606:2:1418
-6607:2:1419
-6608:2:1420
-6609:2:1418
-6610:2:1419
-6611:2:1420
-6612:2:1431
-6613:2:1436
-6614:2:1437
-6615:0:4365
-6616:2:1449
-6617:0:4365
-6618:3:2843
-6619:0:4365
-6620:2:1451
-6621:0:4365
-6622:3:2844
-6623:0:4365
-6624:2:1652
-6625:0:4365
-6626:2:1653
-6627:0:4365
-6628:2:1657
-6629:0:4365
-6630:2:1660
-6631:0:4365
-6632:3:2843
-6633:0:4365
-6634:2:1665
-6635:2:1669
-6636:2:1670
-6637:2:1678
-6638:2:1679
-6639:2:1683
-6640:2:1684
-6641:2:1678
-6642:2:1679
-6643:2:1680
-6644:2:1692
-6645:2:1697
-6646:2:1701
-6647:2:1702
-6648:2:1709
-6649:2:1710
-6650:2:1721
-6651:2:1722
-6652:2:1723
-6653:2:1721
-6654:2:1722
-6655:2:1723
-6656:2:1734
-6657:2:1739
-6658:2:1740
-6659:0:4365
-6660:3:2844
-6661:0:4365
-6662:2:1752
-6663:0:4365
-6664:3:2843
-6665:0:4365
-6666:2:1754
-6667:0:4365
-6668:3:2844
-6669:0:4365
-6670:2:1755
-6671:2:1759
-6672:2:1760
-6673:2:1768
-6674:2:1769
-6675:2:1773
-6676:2:1774
-6677:2:1768
-6678:2:1769
-6679:2:1773
-6680:2:1774
-6681:2:1782
-6682:2:1787
-6683:2:1791
-6684:2:1792
-6685:2:1799
-6686:2:1800
-6687:2:1811
-6688:2:1812
-6689:2:1813
-6690:2:1811
-6691:2:1812
-6692:2:1813
-6693:2:1824
-6694:2:1829
-6695:2:1830
-6696:0:4365
-6697:2:1842
-6698:0:4365
-6699:3:2843
-6700:0:4365
-6701:2:1844
-6702:0:4365
-6703:3:2844
-6704:0:4365
-6705:2:1845
-6706:2:1849
-6707:2:1850
-6708:2:1858
-6709:2:1859
-6710:2:1863
-6711:2:1864
-6712:2:1858
-6713:2:1859
-6714:2:1863
-6715:2:1864
-6716:2:1872
-6717:2:1877
-6718:2:1881
-6719:2:1882
-6720:2:1889
-6721:2:1890
-6722:2:1901
-6723:2:1902
-6724:2:1903
-6725:2:1901
-6726:2:1902
-6727:2:1903
-6728:2:1914
-6729:2:1919
-6730:2:1920
-6731:0:4365
-6732:2:1932
-6733:0:4365
-6734:3:2843
-6735:0:4365
-6736:2:1934
-6737:0:4365
-6738:3:2844
-6739:0:4365
-6740:2:1935
-6741:0:4365
-6742:2:1936
-6743:0:4365
-6744:2:2129
-6745:0:4365
-6746:2:2130
-6747:0:4365
-6748:2:2134
-6749:0:4365
-6750:3:2843
-6751:0:4365
-6752:2:2136
-6753:0:4365
-6754:3:2844
-6755:0:4365
-6756:2:2137
-6757:2:2141
-6758:2:2142
-6759:2:2150
-6760:2:2151
-6761:2:2155
-6762:2:2156
-6763:2:2150
-6764:2:2151
-6765:2:2155
-6766:2:2156
-6767:2:2164
-6768:2:2169
-6769:2:2173
-6770:2:2174
-6771:2:2181
-6772:2:2182
-6773:2:2193
-6774:2:2194
-6775:2:2195
-6776:2:2193
-6777:2:2194
-6778:2:2195
-6779:2:2206
-6780:2:2211
-6781:2:2212
-6782:0:4365
-6783:2:2224
-6784:0:4365
-6785:3:2843
-6786:0:4365
-6787:2:2226
-6788:0:4365
-6789:3:2844
-6790:0:4365
-6791:2:2230
-6792:0:4365
-6793:3:2843
-6794:0:4365
-6795:2:2235
-6796:2:2239
-6797:2:2240
-6798:2:2248
-6799:2:2249
-6800:2:2253
-6801:2:2254
-6802:2:2248
-6803:2:2249
-6804:2:2250
-6805:2:2262
-6806:2:2267
-6807:2:2271
-6808:2:2272
-6809:2:2279
-6810:2:2280
-6811:2:2291
-6812:2:2292
-6813:2:2293
-6814:2:2291
-6815:2:2292
-6816:2:2293
-6817:2:2304
-6818:2:2309
-6819:2:2310
-6820:0:4365
-6821:3:2844
-6822:0:4365
-6823:2:2322
-6824:0:4365
-6825:2:1169
-6826:0:4365
-6827:3:2843
-6828:0:4365
-6829:2:1170
-6830:0:4365
-6831:3:2844
-6832:0:4365
-6833:3:2845
-6834:0:4365
-6835:3:2851
-6836:0:4365
-6837:3:2854
-6838:3:2855
-6839:3:2867
-6840:3:2868
-6841:3:2872
-6842:3:2873
-6843:3:2867
-6844:3:2868
-6845:3:2872
-6846:3:2873
-6847:3:2881
-6848:3:2886
-6849:3:2890
-6850:3:2891
-6851:3:2898
-6852:3:2899
-6853:3:2910
-6854:3:2911
-6855:3:2912
-6856:3:2910
-6857:3:2911
-6858:3:2912
-6859:3:2923
-6860:3:2928
-6861:3:2929
-6862:0:4365
-6863:3:2941
-6864:0:4365
-6865:3:2942
-6866:0:4365
-6867:2:1173
-6868:0:4365
-6869:3:2943
-6870:0:4365
-6871:2:1179
-6872:0:4365
-6873:2:1180
-6874:0:4365
-6875:3:2942
-6876:0:4365
-6877:2:1181
-6878:2:1185
-6879:2:1186
-6880:2:1194
-6881:2:1195
-6882:2:1199
-6883:2:1200
-6884:2:1194
-6885:2:1195
-6886:2:1199
-6887:2:1200
-6888:2:1208
-6889:2:1213
-6890:2:1217
-6891:2:1218
-6892:2:1225
-6893:2:1226
-6894:2:1237
-6895:2:1238
-6896:2:1239
-6897:2:1237
-6898:2:1238
-6899:2:1239
-6900:2:1250
-6901:2:1255
-6902:2:1256
-6903:0:4365
-6904:3:2943
-6905:0:4365
-6906:2:1268
-6907:0:4365
-6908:3:2942
-6909:0:4365
-6910:2:1270
-6911:0:4365
-6912:3:2943
-6913:0:4365
-6914:2:1271
-6915:2:1275
-6916:2:1276
-6917:2:1284
-6918:2:1285
-6919:2:1289
-6920:2:1290
-6921:2:1284
-6922:2:1285
-6923:2:1289
-6924:2:1290
-6925:2:1298
-6926:2:1303
-6927:2:1307
-6928:2:1308
-6929:2:1315
-6930:2:1316
-6931:2:1327
-6932:2:1328
-6933:2:1329
-6934:2:1327
-6935:2:1328
-6936:2:1329
-6937:2:1340
-6938:2:1345
-6939:2:1346
-6940:0:4365
-6941:2:1358
-6942:0:4365
-6943:2:1360
-6944:0:4365
-6945:3:2942
-6946:0:4365
-6947:2:1361
-6948:0:4365
-6949:3:2943
-6950:0:4365
-6951:2:1362
-6952:2:1366
-6953:2:1367
-6954:2:1375
-6955:2:1376
-6956:2:1380
-6957:2:1381
-6958:2:1375
-6959:2:1376
-6960:2:1380
-6961:2:1381
-6962:2:1389
-6963:2:1394
-6964:2:1398
-6965:2:1399
-6966:2:1406
-6967:2:1407
-6968:2:1418
-6969:2:1419
-6970:2:1420
-6971:2:1418
-6972:2:1419
-6973:2:1420
-6974:2:1431
-6975:2:1436
-6976:2:1437
-6977:0:4365
-6978:2:1449
-6979:0:4365
-6980:3:2942
-6981:0:4365
-6982:2:1451
-6983:0:4365
-6984:3:2943
-6985:0:4365
-6986:2:1652
-6987:0:4365
-6988:2:1653
-6989:0:4365
-6990:2:1657
-6991:0:4365
-6992:2:1660
-6993:0:4365
-6994:3:2942
-6995:0:4365
-6996:2:1665
-6997:2:1669
-6998:2:1670
-6999:2:1678
-7000:2:1679
-7001:2:1683
-7002:2:1684
-7003:2:1678
-7004:2:1679
-7005:2:1680
-7006:2:1692
-7007:2:1697
-7008:2:1701
-7009:2:1702
-7010:2:1709
-7011:2:1710
-7012:2:1721
-7013:2:1722
-7014:2:1723
-7015:2:1721
-7016:2:1722
-7017:2:1723
-7018:2:1734
-7019:2:1739
-7020:2:1740
-7021:0:4365
-7022:3:2943
-7023:0:4365
-7024:2:1752
-7025:0:4365
-7026:3:2942
-7027:0:4365
-7028:2:1754
-7029:0:4365
-7030:3:2943
-7031:0:4365
-7032:2:1755
-7033:2:1759
-7034:2:1760
-7035:2:1768
-7036:2:1769
-7037:2:1773
-7038:2:1774
-7039:2:1768
-7040:2:1769
-7041:2:1773
-7042:2:1774
-7043:2:1782
-7044:2:1787
-7045:2:1791
-7046:2:1792
-7047:2:1799
-7048:2:1800
-7049:2:1811
-7050:2:1812
-7051:2:1813
-7052:2:1811
-7053:2:1812
-7054:2:1813
-7055:2:1824
-7056:2:1829
-7057:2:1830
-7058:0:4365
-7059:2:1842
-7060:0:4365
-7061:3:2942
-7062:0:4365
-7063:2:1844
-7064:0:4365
-7065:3:2943
-7066:0:4365
-7067:2:1845
-7068:2:1849
-7069:2:1850
-7070:2:1858
-7071:2:1859
-7072:2:1863
-7073:2:1864
-7074:2:1858
-7075:2:1859
-7076:2:1863
-7077:2:1864
-7078:2:1872
-7079:2:1877
-7080:2:1881
-7081:2:1882
-7082:2:1889
-7083:2:1890
-7084:2:1901
-7085:2:1902
-7086:2:1903
-7087:2:1901
-7088:2:1902
-7089:2:1903
-7090:2:1914
-7091:2:1919
-7092:2:1920
-7093:0:4365
-7094:2:1932
-7095:0:4365
-7096:3:2942
-7097:0:4365
-7098:2:1934
-7099:0:4365
-7100:3:2943
-7101:0:4365
-7102:2:1935
-7103:0:4365
-7104:2:1936
-7105:0:4365
-7106:2:2129
-7107:0:4365
-7108:2:2130
-7109:0:4365
-7110:2:2134
-7111:0:4365
-7112:3:2942
-7113:0:4365
-7114:2:2136
-7115:0:4365
-7116:3:2943
-7117:0:4365
-7118:2:2137
-7119:2:2141
-7120:2:2142
-7121:2:2150
-7122:2:2151
-7123:2:2155
-7124:2:2156
-7125:2:2150
-7126:2:2151
-7127:2:2155
-7128:2:2156
-7129:2:2164
-7130:2:2169
-7131:2:2173
-7132:2:2174
-7133:2:2181
-7134:2:2182
-7135:2:2193
-7136:2:2194
-7137:2:2195
-7138:2:2193
-7139:2:2194
-7140:2:2195
-7141:2:2206
-7142:2:2211
-7143:2:2212
-7144:0:4365
-7145:2:2224
-7146:0:4365
-7147:3:2942
-7148:0:4365
-7149:2:2226
-7150:0:4365
-7151:3:2943
-7152:0:4365
-7153:2:2230
-7154:0:4365
-7155:3:2942
-7156:0:4365
-7157:2:2235
-7158:2:2239
-7159:2:2240
-7160:2:2248
-7161:2:2249
-7162:2:2253
-7163:2:2254
-7164:2:2248
-7165:2:2249
-7166:2:2250
-7167:2:2262
-7168:2:2267
-7169:2:2271
-7170:2:2272
-7171:2:2279
-7172:2:2280
-7173:2:2291
-7174:2:2292
-7175:2:2293
-7176:2:2291
-7177:2:2292
-7178:2:2293
-7179:2:2304
-7180:2:2309
-7181:2:2310
-7182:0:4365
-7183:3:2943
-7184:0:4365
-7185:2:2322
-7186:0:4365
-7187:2:1169
-7188:0:4365
-7189:3:2942
-7190:0:4365
-7191:2:1170
-7192:0:4365
-7193:3:2943
-7194:0:4365
-7195:3:2944
-7196:0:4365
-7197:3:2950
-7198:0:4365
-7199:3:2951
-7200:0:4365
-7201:3:2952
-7202:0:4365
-7203:3:2953
-7204:0:4365
-7205:3:2954
-7206:3:2958
-7207:3:2959
-7208:3:2967
-7209:3:2968
-7210:3:2972
-7211:3:2973
-7212:3:2967
-7213:3:2968
-7214:3:2972
-7215:3:2973
-7216:3:2981
-7217:3:2986
-7218:3:2990
-7219:3:2991
-7220:3:2998
-7221:3:2999
-7222:3:3010
-7223:3:3011
-7224:3:3012
-7225:3:3010
-7226:3:3011
-7227:3:3012
-7228:3:3023
-7229:3:3028
-7230:3:3029
-7231:0:4365
-7232:3:3041
-7233:0:4365
-7234:3:3042
-7235:0:4365
-7236:2:1173
-7237:0:4365
-7238:3:3043
-7239:0:4365
-7240:2:1179
-7241:0:4365
-7242:2:1180
-7243:0:4365
-7244:3:3042
-7245:0:4365
-7246:2:1181
-7247:2:1185
-7248:2:1186
-7249:2:1194
-7250:2:1195
-7251:2:1199
-7252:2:1200
-7253:2:1194
-7254:2:1195
-7255:2:1199
-7256:2:1200
-7257:2:1208
-7258:2:1213
-7259:2:1217
-7260:2:1218
-7261:2:1225
-7262:2:1226
-7263:2:1237
-7264:2:1238
-7265:2:1239
-7266:2:1237
-7267:2:1238
-7268:2:1239
-7269:2:1250
-7270:2:1255
-7271:2:1256
-7272:0:4365
-7273:3:3043
-7274:0:4365
-7275:2:1268
-7276:0:4365
-7277:3:3042
-7278:0:4365
-7279:2:1270
-7280:0:4365
-7281:3:3043
-7282:0:4365
-7283:2:1271
-7284:2:1275
-7285:2:1276
-7286:2:1284
-7287:2:1285
-7288:2:1289
-7289:2:1290
-7290:2:1284
-7291:2:1285
-7292:2:1289
-7293:2:1290
-7294:2:1298
-7295:2:1303
-7296:2:1307
-7297:2:1308
-7298:2:1315
-7299:2:1316
-7300:2:1327
-7301:2:1328
-7302:2:1329
-7303:2:1327
-7304:2:1328
-7305:2:1329
-7306:2:1340
-7307:2:1345
-7308:2:1346
-7309:0:4365
-7310:2:1358
-7311:0:4365
-7312:2:1360
-7313:0:4365
-7314:3:3042
-7315:0:4365
-7316:2:1361
-7317:0:4365
-7318:3:3043
-7319:0:4365
-7320:2:1362
-7321:2:1366
-7322:2:1367
-7323:2:1375
-7324:2:1376
-7325:2:1380
-7326:2:1381
-7327:2:1375
-7328:2:1376
-7329:2:1380
-7330:2:1381
-7331:2:1389
-7332:2:1394
-7333:2:1398
-7334:2:1399
-7335:2:1406
-7336:2:1407
-7337:2:1418
-7338:2:1419
-7339:2:1420
-7340:2:1418
-7341:2:1419
-7342:2:1420
-7343:2:1431
-7344:2:1436
-7345:2:1437
-7346:0:4365
-7347:2:1449
-7348:0:4365
-7349:3:3042
-7350:0:4365
-7351:2:1451
-7352:0:4365
-7353:3:3043
-7354:0:4365
-7355:2:1652
-7356:0:4365
-7357:2:1653
-7358:0:4365
-7359:2:1657
-7360:0:4365
-7361:2:1660
-7362:0:4365
-7363:3:3042
-7364:0:4365
-7365:2:1665
-7366:2:1669
-7367:2:1670
-7368:2:1678
-7369:2:1679
-7370:2:1683
-7371:2:1684
-7372:2:1678
-7373:2:1679
-7374:2:1680
-7375:2:1692
-7376:2:1697
-7377:2:1701
-7378:2:1702
-7379:2:1709
-7380:2:1710
-7381:2:1721
-7382:2:1722
-7383:2:1723
-7384:2:1721
-7385:2:1722
-7386:2:1723
-7387:2:1734
-7388:2:1739
-7389:2:1740
-7390:0:4365
-7391:3:3043
-7392:0:4365
-7393:2:1752
-7394:0:4365
-7395:3:3042
-7396:0:4365
-7397:2:1754
-7398:0:4365
-7399:3:3043
-7400:0:4365
-7401:2:1755
-7402:2:1759
-7403:2:1760
-7404:2:1768
-7405:2:1769
-7406:2:1773
-7407:2:1774
-7408:2:1768
-7409:2:1769
-7410:2:1773
-7411:2:1774
-7412:2:1782
-7413:2:1787
-7414:2:1791
-7415:2:1792
-7416:2:1799
-7417:2:1800
-7418:2:1811
-7419:2:1812
-7420:2:1813
-7421:2:1811
-7422:2:1812
-7423:2:1813
-7424:2:1824
-7425:2:1829
-7426:2:1830
-7427:0:4365
-7428:2:1842
-7429:0:4365
-7430:3:3042
-7431:0:4365
-7432:2:1844
-7433:0:4365
-7434:3:3043
-7435:0:4365
-7436:2:1845
-7437:2:1849
-7438:2:1850
-7439:2:1858
-7440:2:1859
-7441:2:1863
-7442:2:1864
-7443:2:1858
-7444:2:1859
-7445:2:1863
-7446:2:1864
-7447:2:1872
-7448:2:1877
-7449:2:1881
-7450:2:1882
-7451:2:1889
-7452:2:1890
-7453:2:1901
-7454:2:1902
-7455:2:1903
-7456:2:1901
-7457:2:1902
-7458:2:1903
-7459:2:1914
-7460:2:1919
-7461:2:1920
-7462:0:4365
-7463:2:1932
-7464:0:4365
-7465:3:3042
-7466:0:4365
-7467:2:1934
-7468:0:4365
-7469:3:3043
-7470:0:4365
-7471:2:1935
-7472:0:4365
-7473:2:1936
-7474:0:4365
-7475:2:2129
-7476:0:4365
-7477:2:2130
-7478:0:4365
-7479:2:2134
-7480:0:4365
-7481:3:3042
-7482:0:4365
-7483:2:2136
-7484:0:4365
-7485:3:3043
-7486:0:4365
-7487:2:2137
-7488:2:2141
-7489:2:2142
-7490:2:2150
-7491:2:2151
-7492:2:2155
-7493:2:2156
-7494:2:2150
-7495:2:2151
-7496:2:2155
-7497:2:2156
-7498:2:2164
-7499:2:2169
-7500:2:2173
-7501:2:2174
-7502:2:2181
-7503:2:2182
-7504:2:2193
-7505:2:2194
-7506:2:2195
-7507:2:2193
-7508:2:2194
-7509:2:2195
-7510:2:2206
-7511:2:2211
-7512:2:2212
-7513:0:4365
-7514:2:2224
-7515:0:4365
-7516:3:3042
-7517:0:4365
-7518:2:2226
-7519:0:4365
-7520:3:3043
-7521:0:4365
-7522:2:2230
-7523:0:4365
-7524:3:3042
-7525:0:4365
-7526:2:2235
-7527:2:2239
-7528:2:2240
-7529:2:2248
-7530:2:2249
-7531:2:2253
-7532:2:2254
-7533:2:2248
-7534:2:2249
-7535:2:2250
-7536:2:2262
-7537:2:2267
-7538:2:2271
-7539:2:2272
-7540:2:2279
-7541:2:2280
-7542:2:2291
-7543:2:2292
-7544:2:2293
-7545:2:2291
-7546:2:2292
-7547:2:2293
-7548:2:2304
-7549:2:2309
-7550:2:2310
-7551:0:4365
-7552:3:3043
-7553:0:4365
-7554:2:2322
-7555:0:4365
-7556:2:1169
-7557:0:4365
-7558:3:3042
-7559:0:4365
-7560:2:1170
-7561:0:4365
-7562:3:3043
-7563:0:4365
-7564:3:3044
-7565:0:4365
-7566:3:3257
-7567:0:4365
-7568:3:3265
-7569:0:4365
-7570:3:3266
-7571:3:3270
-7572:3:3271
-7573:3:3279
-7574:3:3280
-7575:3:3284
-7576:3:3285
-7577:3:3279
-7578:3:3280
-7579:3:3284
-7580:3:3285
-7581:3:3293
-7582:3:3298
-7583:3:3302
-7584:3:3303
-7585:3:3310
-7586:3:3311
-7587:3:3322
-7588:3:3323
-7589:3:3324
-7590:3:3322
-7591:3:3323
-7592:3:3324
-7593:3:3335
-7594:3:3340
-7595:3:3341
-7596:0:4365
-7597:3:3353
-7598:0:4365
-7599:3:3354
-7600:0:4365
-7601:2:1173
-7602:0:4365
-7603:3:3355
-7604:0:4365
-7605:2:1179
-7606:0:4365
-7607:2:1180
-7608:0:4365
-7609:3:3354
-7610:0:4365
-7611:2:1181
-7612:2:1185
-7613:2:1186
-7614:2:1194
-7615:2:1195
-7616:2:1199
-7617:2:1200
-7618:2:1194
-7619:2:1195
-7620:2:1199
-7621:2:1200
-7622:2:1208
-7623:2:1213
-7624:2:1217
-7625:2:1218
-7626:2:1225
-7627:2:1226
-7628:2:1237
-7629:2:1238
-7630:2:1239
-7631:2:1237
-7632:2:1238
-7633:2:1239
-7634:2:1250
-7635:2:1255
-7636:2:1256
-7637:0:4365
-7638:3:3355
-7639:0:4365
-7640:2:1268
-7641:0:4365
-7642:3:3354
-7643:0:4365
-7644:2:1270
-7645:0:4365
-7646:3:3355
-7647:0:4365
-7648:2:1271
-7649:2:1275
-7650:2:1276
-7651:2:1284
-7652:2:1285
-7653:2:1289
-7654:2:1290
-7655:2:1284
-7656:2:1285
-7657:2:1289
-7658:2:1290
-7659:2:1298
-7660:2:1303
-7661:2:1307
-7662:2:1308
-7663:2:1315
-7664:2:1316
-7665:2:1327
-7666:2:1328
-7667:2:1329
-7668:2:1327
-7669:2:1328
-7670:2:1329
-7671:2:1340
-7672:2:1345
-7673:2:1346
-7674:0:4365
-7675:2:1358
-7676:0:4365
-7677:2:1360
-7678:0:4365
-7679:3:3354
-7680:0:4365
-7681:2:1361
-7682:0:4365
-7683:3:3355
-7684:0:4365
-7685:2:1362
-7686:2:1366
-7687:2:1367
-7688:2:1375
-7689:2:1376
-7690:2:1380
-7691:2:1381
-7692:2:1375
-7693:2:1376
-7694:2:1380
-7695:2:1381
-7696:2:1389
-7697:2:1394
-7698:2:1398
-7699:2:1399
-7700:2:1406
-7701:2:1407
-7702:2:1418
-7703:2:1419
-7704:2:1420
-7705:2:1418
-7706:2:1419
-7707:2:1420
-7708:2:1431
-7709:2:1436
-7710:2:1437
-7711:0:4365
-7712:2:1449
-7713:0:4365
-7714:3:3354
-7715:0:4365
-7716:2:1451
-7717:0:4365
-7718:3:3355
-7719:0:4365
-7720:2:1652
-7721:0:4365
-7722:2:1653
-7723:0:4365
-7724:2:1657
-7725:0:4365
-7726:2:1660
-7727:0:4365
-7728:3:3354
-7729:0:4365
-7730:2:1665
-7731:2:1669
-7732:2:1670
-7733:2:1678
-7734:2:1679
-7735:2:1683
-7736:2:1684
-7737:2:1678
-7738:2:1679
-7739:2:1680
-7740:2:1692
-7741:2:1697
-7742:2:1701
-7743:2:1702
-7744:2:1709
-7745:2:1710
-7746:2:1721
-7747:2:1722
-7748:2:1723
-7749:2:1721
-7750:2:1722
-7751:2:1723
-7752:2:1734
-7753:2:1739
-7754:2:1740
-7755:0:4365
-7756:3:3355
-7757:0:4365
-7758:2:1752
-7759:0:4365
-7760:3:3354
-7761:0:4365
-7762:2:1754
-7763:0:4365
-7764:3:3355
-7765:0:4365
-7766:2:1755
-7767:2:1759
-7768:2:1760
-7769:2:1768
-7770:2:1769
-7771:2:1773
-7772:2:1774
-7773:2:1768
-7774:2:1769
-7775:2:1773
-7776:2:1774
-7777:2:1782
-7778:2:1787
-7779:2:1791
-7780:2:1792
-7781:2:1799
-7782:2:1800
-7783:2:1811
-7784:2:1812
-7785:2:1813
-7786:2:1811
-7787:2:1812
-7788:2:1813
-7789:2:1824
-7790:2:1829
-7791:2:1830
-7792:0:4365
-7793:2:1842
-7794:0:4365
-7795:3:3354
-7796:0:4365
-7797:2:1844
-7798:0:4365
-7799:3:3355
-7800:0:4365
-7801:2:1845
-7802:2:1849
-7803:2:1850
-7804:2:1858
-7805:2:1859
-7806:2:1863
-7807:2:1864
-7808:2:1858
-7809:2:1859
-7810:2:1863
-7811:2:1864
-7812:2:1872
-7813:2:1877
-7814:2:1881
-7815:2:1882
-7816:2:1889
-7817:2:1890
-7818:2:1901
-7819:2:1902
-7820:2:1903
-7821:2:1901
-7822:2:1902
-7823:2:1903
-7824:2:1914
-7825:2:1919
-7826:2:1920
-7827:0:4365
-7828:2:1932
-7829:0:4365
-7830:3:3354
-7831:0:4365
-7832:2:1934
-7833:0:4365
-7834:3:3355
-7835:0:4365
-7836:2:1935
-7837:0:4365
-7838:2:1936
-7839:0:4365
-7840:2:2129
-7841:0:4365
-7842:2:2130
-7843:0:4365
-7844:2:2134
-7845:0:4365
-7846:3:3354
-7847:0:4365
-7848:2:2136
-7849:0:4365
-7850:3:3355
-7851:0:4365
-7852:2:2137
-7853:2:2141
-7854:2:2142
-7855:2:2150
-7856:2:2151
-7857:2:2155
-7858:2:2156
-7859:2:2150
-7860:2:2151
-7861:2:2155
-7862:2:2156
-7863:2:2164
-7864:2:2169
-7865:2:2173
-7866:2:2174
-7867:2:2181
-7868:2:2182
-7869:2:2193
-7870:2:2194
-7871:2:2195
-7872:2:2193
-7873:2:2194
-7874:2:2195
-7875:2:2206
-7876:2:2211
-7877:2:2212
-7878:0:4365
-7879:2:2224
-7880:0:4365
-7881:3:3354
-7882:0:4365
-7883:2:2226
-7884:0:4365
-7885:3:3355
-7886:0:4365
-7887:2:2230
-7888:0:4365
-7889:3:3354
-7890:0:4365
-7891:2:2235
-7892:2:2239
-7893:2:2240
-7894:2:2248
-7895:2:2249
-7896:2:2253
-7897:2:2254
-7898:2:2248
-7899:2:2249
-7900:2:2250
-7901:2:2262
-7902:2:2267
-7903:2:2271
-7904:2:2272
-7905:2:2279
-7906:2:2280
-7907:2:2291
-7908:2:2292
-7909:2:2293
-7910:2:2291
-7911:2:2292
-7912:2:2293
-7913:2:2304
-7914:2:2309
-7915:2:2310
-7916:0:4365
-7917:3:3355
-7918:0:4365
-7919:2:2322
-7920:0:4365
-7921:2:1169
-7922:0:4365
-7923:3:3354
-7924:0:4365
-7925:2:1170
-7926:0:4365
-7927:3:3355
-7928:0:4365
-7929:3:3356
-7930:0:4365
-7931:3:3366
-7932:0:4365
-7933:3:2951
-7934:0:4365
-7935:3:2952
-7936:0:4365
-7937:3:2953
-7938:0:4365
-7939:3:2954
-7940:3:2958
-7941:3:2959
-7942:3:2967
-7943:3:2968
-7944:3:2972
-7945:3:2973
-7946:3:2967
-7947:3:2968
-7948:3:2972
-7949:3:2973
-7950:3:2981
-7951:3:2986
-7952:3:2990
-7953:3:2991
-7954:3:2998
-7955:3:2999
-7956:3:3010
-7957:3:3011
-7958:3:3012
-7959:3:3010
-7960:3:3011
-7961:3:3012
-7962:3:3023
-7963:3:3028
-7964:3:3029
-7965:0:4365
-7966:3:3041
-7967:0:4365
-7968:3:3042
-7969:0:4365
-7970:2:1173
-7971:0:4365
-7972:3:3043
-7973:0:4365
-7974:2:1179
-7975:0:4365
-7976:2:1180
-7977:0:4365
-7978:3:3042
-7979:0:4365
-7980:2:1181
-7981:2:1185
-7982:2:1186
-7983:2:1194
-7984:2:1195
-7985:2:1199
-7986:2:1200
-7987:2:1194
-7988:2:1195
-7989:2:1199
-7990:2:1200
-7991:2:1208
-7992:2:1213
-7993:2:1217
-7994:2:1218
-7995:2:1225
-7996:2:1226
-7997:2:1237
-7998:2:1238
-7999:2:1239
-8000:2:1237
-8001:2:1238
-8002:2:1239
-8003:2:1250
-8004:2:1255
-8005:2:1256
-8006:0:4365
-8007:3:3043
-8008:0:4365
-8009:2:1268
-8010:0:4365
-8011:3:3042
-8012:0:4365
-8013:2:1270
-8014:0:4365
-8015:3:3043
-8016:0:4365
-8017:2:1271
-8018:2:1275
-8019:2:1276
-8020:2:1284
-8021:2:1285
-8022:2:1289
-8023:2:1290
-8024:2:1284
-8025:2:1285
-8026:2:1289
-8027:2:1290
-8028:2:1298
-8029:2:1303
-8030:2:1307
-8031:2:1308
-8032:2:1315
-8033:2:1316
-8034:2:1327
-8035:2:1328
-8036:2:1329
-8037:2:1327
-8038:2:1328
-8039:2:1329
-8040:2:1340
-8041:2:1345
-8042:2:1346
-8043:0:4365
-8044:2:1358
-8045:0:4365
-8046:2:1360
-8047:0:4365
-8048:3:3042
-8049:0:4365
-8050:2:1361
-8051:0:4365
-8052:3:3043
-8053:0:4365
-8054:2:1362
-8055:2:1366
-8056:2:1367
-8057:2:1375
-8058:2:1376
-8059:2:1380
-8060:2:1381
-8061:2:1375
-8062:2:1376
-8063:2:1380
-8064:2:1381
-8065:2:1389
-8066:2:1394
-8067:2:1398
-8068:2:1399
-8069:2:1406
-8070:2:1407
-8071:2:1418
-8072:2:1419
-8073:2:1420
-8074:2:1418
-8075:2:1419
-8076:2:1420
-8077:2:1431
-8078:2:1436
-8079:2:1437
-8080:0:4365
-8081:2:1449
-8082:0:4365
-8083:3:3042
-8084:0:4365
-8085:2:1451
-8086:0:4365
-8087:3:3043
-8088:0:4365
-8089:2:1652
-8090:0:4365
-8091:2:1653
-8092:0:4365
-8093:2:1657
-8094:0:4365
-8095:2:1660
-8096:0:4365
-8097:3:3042
-8098:0:4365
-8099:2:1665
-8100:2:1669
-8101:2:1670
-8102:2:1678
-8103:2:1679
-8104:2:1683
-8105:2:1684
-8106:2:1678
-8107:2:1679
-8108:2:1680
-8109:2:1692
-8110:2:1697
-8111:2:1701
-8112:2:1702
-8113:2:1709
-8114:2:1710
-8115:2:1721
-8116:2:1722
-8117:2:1723
-8118:2:1721
-8119:2:1722
-8120:2:1723
-8121:2:1734
-8122:2:1739
-8123:2:1740
-8124:0:4365
-8125:3:3043
-8126:0:4365
-8127:2:1752
-8128:0:4365
-8129:3:3042
-8130:0:4365
-8131:2:1754
-8132:0:4365
-8133:3:3043
-8134:0:4365
-8135:2:1755
-8136:2:1759
-8137:2:1760
-8138:2:1768
-8139:2:1769
-8140:2:1773
-8141:2:1774
-8142:2:1768
-8143:2:1769
-8144:2:1773
-8145:2:1774
-8146:2:1782
-8147:2:1787
-8148:2:1791
-8149:2:1792
-8150:2:1799
-8151:2:1800
-8152:2:1811
-8153:2:1812
-8154:2:1813
-8155:2:1811
-8156:2:1812
-8157:2:1813
-8158:2:1824
-8159:2:1829
-8160:2:1830
-8161:0:4365
-8162:2:1842
-8163:0:4365
-8164:3:3042
-8165:0:4365
-8166:2:1844
-8167:0:4365
-8168:3:3043
-8169:0:4365
-8170:2:1845
-8171:2:1849
-8172:2:1850
-8173:2:1858
-8174:2:1859
-8175:2:1863
-8176:2:1864
-8177:2:1858
-8178:2:1859
-8179:2:1863
-8180:2:1864
-8181:2:1872
-8182:2:1877
-8183:2:1881
-8184:2:1882
-8185:2:1889
-8186:2:1890
-8187:2:1901
-8188:2:1902
-8189:2:1903
-8190:2:1901
-8191:2:1902
-8192:2:1903
-8193:2:1914
-8194:2:1919
-8195:2:1920
-8196:0:4365
-8197:2:1932
-8198:0:4365
-8199:3:3042
-8200:0:4365
-8201:2:1934
-8202:0:4365
-8203:3:3043
-8204:0:4365
-8205:2:1935
-8206:0:4365
-8207:2:1936
-8208:0:4365
-8209:2:2129
-8210:0:4365
-8211:2:2130
-8212:0:4365
-8213:2:2134
-8214:0:4365
-8215:3:3042
-8216:0:4365
-8217:2:2136
-8218:0:4365
-8219:3:3043
-8220:0:4365
-8221:2:2137
-8222:2:2141
-8223:2:2142
-8224:2:2150
-8225:2:2151
-8226:2:2155
-8227:2:2156
-8228:2:2150
-8229:2:2151
-8230:2:2155
-8231:2:2156
-8232:2:2164
-8233:2:2169
-8234:2:2173
-8235:2:2174
-8236:2:2181
-8237:2:2182
-8238:2:2193
-8239:2:2194
-8240:2:2195
-8241:2:2193
-8242:2:2194
-8243:2:2195
-8244:2:2206
-8245:2:2211
-8246:2:2212
-8247:0:4365
-8248:2:2224
-8249:0:4365
-8250:3:3042
-8251:0:4365
-8252:2:2226
-8253:0:4365
-8254:3:3043
-8255:0:4365
-8256:2:2230
-8257:0:4365
-8258:3:3042
-8259:0:4365
-8260:2:2235
-8261:2:2239
-8262:2:2240
-8263:2:2248
-8264:2:2249
-8265:2:2253
-8266:2:2254
-8267:2:2248
-8268:2:2249
-8269:2:2250
-8270:2:2262
-8271:2:2267
-8272:2:2271
-8273:2:2272
-8274:2:2279
-8275:2:2280
-8276:2:2291
-8277:2:2292
-8278:2:2293
-8279:2:2291
-8280:2:2292
-8281:2:2293
-8282:2:2304
-8283:2:2309
-8284:2:2310
-8285:0:4365
-8286:3:3043
-8287:0:4365
-8288:2:2322
-8289:0:4365
-8290:2:1169
-8291:0:4365
-8292:3:3042
-8293:0:4365
-8294:2:1170
-8295:0:4365
-8296:3:3043
-8297:0:4365
-8298:3:3044
-8299:0:4365
-8300:3:3257
-8301:0:4365
-8302:3:3362
-8303:0:4365
-8304:3:3363
-8305:0:4365
-8306:3:3367
-8307:0:4365
-8308:3:3373
-8309:3:3377
-8310:3:3378
-8311:3:3386
-8312:3:3387
-8313:3:3391
-8314:3:3392
-8315:3:3386
-8316:3:3387
-8317:3:3391
-8318:3:3392
-8319:3:3400
-8320:3:3405
-8321:3:3409
-8322:3:3410
-8323:3:3417
-8324:3:3418
-8325:3:3429
-8326:3:3430
-8327:3:3431
-8328:3:3429
-8329:3:3430
-8330:3:3431
-8331:3:3442
-8332:3:3447
-8333:3:3448
-8334:0:4365
-8335:3:3460
-8336:0:4365
-8337:3:3461
-8338:0:4365
-8339:2:1173
-8340:0:4365
-8341:3:3462
-8342:0:4365
-8343:2:1179
-8344:0:4365
-8345:2:1180
-8346:0:4365
-8347:3:3461
-8348:0:4365
-8349:2:1181
-8350:2:1185
-8351:2:1186
-8352:2:1194
-8353:2:1195
-8354:2:1199
-8355:2:1200
-8356:2:1194
-8357:2:1195
-8358:2:1199
-8359:2:1200
-8360:2:1208
-8361:2:1213
-8362:2:1217
-8363:2:1218
-8364:2:1225
-8365:2:1226
-8366:2:1237
-8367:2:1238
-8368:2:1239
-8369:2:1237
-8370:2:1238
-8371:2:1239
-8372:2:1250
-8373:2:1255
-8374:2:1256
-8375:0:4365
-8376:3:3462
-8377:0:4365
-8378:2:1268
-8379:0:4365
-8380:3:3461
-8381:0:4365
-8382:2:1270
-8383:0:4365
-8384:3:3462
-8385:0:4365
-8386:2:1271
-8387:2:1275
-8388:2:1276
-8389:2:1284
-8390:2:1285
-8391:2:1289
-8392:2:1290
-8393:2:1284
-8394:2:1285
-8395:2:1289
-8396:2:1290
-8397:2:1298
-8398:2:1303
-8399:2:1307
-8400:2:1308
-8401:2:1315
-8402:2:1316
-8403:2:1327
-8404:2:1328
-8405:2:1329
-8406:2:1327
-8407:2:1328
-8408:2:1329
-8409:2:1340
-8410:2:1345
-8411:2:1346
-8412:0:4365
-8413:2:1358
-8414:0:4365
-8415:2:1360
-8416:0:4365
-8417:3:3461
-8418:0:4365
-8419:2:1361
-8420:0:4365
-8421:3:3462
-8422:0:4365
-8423:2:1362
-8424:2:1366
-8425:2:1367
-8426:2:1375
-8427:2:1376
-8428:2:1380
-8429:2:1381
-8430:2:1375
-8431:2:1376
-8432:2:1380
-8433:2:1381
-8434:2:1389
-8435:2:1394
-8436:2:1398
-8437:2:1399
-8438:2:1406
-8439:2:1407
-8440:2:1418
-8441:2:1419
-8442:2:1420
-8443:2:1418
-8444:2:1419
-8445:2:1420
-8446:2:1431
-8447:2:1436
-8448:2:1437
-8449:0:4365
-8450:2:1449
-8451:0:4365
-8452:3:3461
-8453:0:4365
-8454:2:1451
-8455:0:4365
-8456:3:3462
-8457:0:4365
-8458:2:1652
-8459:0:4365
-8460:2:1653
-8461:0:4365
-8462:2:1657
-8463:0:4365
-8464:2:1660
-8465:0:4365
-8466:3:3461
-8467:0:4365
-8468:2:1665
-8469:2:1669
-8470:2:1670
-8471:2:1678
-8472:2:1679
-8473:2:1683
-8474:2:1684
-8475:2:1678
-8476:2:1679
-8477:2:1680
-8478:2:1692
-8479:2:1697
-8480:2:1701
-8481:2:1702
-8482:2:1709
-8483:2:1710
-8484:2:1721
-8485:2:1722
-8486:2:1723
-8487:2:1721
-8488:2:1722
-8489:2:1723
-8490:2:1734
-8491:2:1739
-8492:2:1740
-8493:0:4365
-8494:3:3462
-8495:0:4365
-8496:2:1752
-8497:0:4365
-8498:3:3461
-8499:0:4365
-8500:2:1754
-8501:0:4365
-8502:3:3462
-8503:0:4365
-8504:2:1755
-8505:2:1759
-8506:2:1760
-8507:2:1768
-8508:2:1769
-8509:2:1773
-8510:2:1774
-8511:2:1768
-8512:2:1769
-8513:2:1773
-8514:2:1774
-8515:2:1782
-8516:2:1787
-8517:2:1791
-8518:2:1792
-8519:2:1799
-8520:2:1800
-8521:2:1811
-8522:2:1812
-8523:2:1813
-8524:2:1811
-8525:2:1812
-8526:2:1813
-8527:2:1824
-8528:2:1829
-8529:2:1830
-8530:0:4365
-8531:2:1842
-8532:0:4365
-8533:3:3461
-8534:0:4365
-8535:2:1844
-8536:0:4365
-8537:3:3462
-8538:0:4365
-8539:2:1845
-8540:2:1849
-8541:2:1850
-8542:2:1858
-8543:2:1859
-8544:2:1863
-8545:2:1864
-8546:2:1858
-8547:2:1859
-8548:2:1863
-8549:2:1864
-8550:2:1872
-8551:2:1877
-8552:2:1881
-8553:2:1882
-8554:2:1889
-8555:2:1890
-8556:2:1901
-8557:2:1902
-8558:2:1903
-8559:2:1901
-8560:2:1902
-8561:2:1903
-8562:2:1914
-8563:2:1919
-8564:2:1920
-8565:0:4365
-8566:2:1932
-8567:0:4365
-8568:3:3461
-8569:0:4365
-8570:2:1934
-8571:0:4365
-8572:3:3462
-8573:0:4365
-8574:2:1935
-8575:0:4365
-8576:2:1936
-8577:0:4365
-8578:2:2129
-8579:0:4365
-8580:2:2130
-8581:0:4365
-8582:2:2134
-8583:0:4365
-8584:3:3461
-8585:0:4365
-8586:2:2136
-8587:0:4365
-8588:3:3462
-8589:0:4365
-8590:2:2137
-8591:2:2141
-8592:2:2142
-8593:2:2150
-8594:2:2151
-8595:2:2155
-8596:2:2156
-8597:2:2150
-8598:2:2151
-8599:2:2155
-8600:2:2156
-8601:2:2164
-8602:2:2169
-8603:2:2173
-8604:2:2174
-8605:2:2181
-8606:2:2182
-8607:2:2193
-8608:2:2194
-8609:2:2195
-8610:2:2193
-8611:2:2194
-8612:2:2195
-8613:2:2206
-8614:2:2211
-8615:2:2212
-8616:0:4365
-8617:2:2224
-8618:0:4365
-8619:3:3461
-8620:0:4365
-8621:2:2226
-8622:0:4365
-8623:3:3462
-8624:0:4365
-8625:2:2230
-8626:0:4365
-8627:3:3461
-8628:0:4365
-8629:2:2235
-8630:2:2239
-8631:2:2240
-8632:2:2248
-8633:2:2249
-8634:2:2253
-8635:2:2254
-8636:2:2248
-8637:2:2249
-8638:2:2250
-8639:2:2262
-8640:2:2267
-8641:2:2271
-8642:2:2272
-8643:2:2279
-8644:2:2280
-8645:2:2291
-8646:2:2292
-8647:2:2293
-8648:2:2291
-8649:2:2292
-8650:2:2293
-8651:2:2304
-8652:2:2309
-8653:2:2310
-8654:0:4365
-8655:3:3462
-8656:0:4365
-8657:2:2322
-8658:0:4365
-8659:2:1169
-8660:0:4365
-8661:3:3461
-8662:0:4365
-8663:2:1170
-8664:0:4365
-8665:3:3462
-8666:0:4365
-8667:3:3463
-8668:0:4365
-8669:3:3469
-8670:0:4365
-8671:3:3470
-8672:3:3474
-8673:3:3475
-8674:3:3483
-8675:3:3484
-8676:3:3488
-8677:3:3489
-8678:3:3483
-8679:3:3484
-8680:3:3488
-8681:3:3489
-8682:3:3497
-8683:3:3502
-8684:3:3506
-8685:3:3507
-8686:3:3514
-8687:3:3515
-8688:3:3526
-8689:3:3527
-8690:3:3528
-8691:3:3526
-8692:3:3527
-8693:3:3528
-8694:3:3539
-8695:3:3544
-8696:3:3545
-8697:0:4365
-8698:3:3557
-8699:0:4365
-8700:3:3558
-8701:0:4365
-8702:2:1173
-8703:0:4365
-8704:3:3559
-8705:0:4365
-8706:2:1179
-8707:0:4365
-8708:2:1180
-8709:0:4365
-8710:3:3558
-8711:0:4365
-8712:2:1181
-8713:2:1185
-8714:2:1186
-8715:2:1194
-8716:2:1195
-8717:2:1199
-8718:2:1200
-8719:2:1194
-8720:2:1195
-8721:2:1199
-8722:2:1200
-8723:2:1208
-8724:2:1213
-8725:2:1217
-8726:2:1218
-8727:2:1225
-8728:2:1226
-8729:2:1237
-8730:2:1238
-8731:2:1239
-8732:2:1237
-8733:2:1238
-8734:2:1239
-8735:2:1250
-8736:2:1255
-8737:2:1256
-8738:0:4365
-8739:3:3559
-8740:0:4365
-8741:2:1268
-8742:0:4365
-8743:3:3558
-8744:0:4365
-8745:2:1270
-8746:0:4365
-8747:3:3559
-8748:0:4365
-8749:2:1271
-8750:2:1275
-8751:2:1276
-8752:2:1284
-8753:2:1285
-8754:2:1289
-8755:2:1290
-8756:2:1284
-8757:2:1285
-8758:2:1289
-8759:2:1290
-8760:2:1298
-8761:2:1303
-8762:2:1307
-8763:2:1308
-8764:2:1315
-8765:2:1316
-8766:2:1327
-8767:2:1328
-8768:2:1329
-8769:2:1327
-8770:2:1328
-8771:2:1329
-8772:2:1340
-8773:2:1345
-8774:2:1346
-8775:0:4365
-8776:2:1358
-8777:0:4365
-8778:2:1360
-8779:0:4365
-8780:3:3558
-8781:0:4365
-8782:2:1361
-8783:0:4365
-8784:3:3559
-8785:0:4365
-8786:2:1362
-8787:2:1366
-8788:2:1367
-8789:2:1375
-8790:2:1376
-8791:2:1380
-8792:2:1381
-8793:2:1375
-8794:2:1376
-8795:2:1380
-8796:2:1381
-8797:2:1389
-8798:2:1394
-8799:2:1398
-8800:2:1399
-8801:2:1406
-8802:2:1407
-8803:2:1418
-8804:2:1419
-8805:2:1420
-8806:2:1418
-8807:2:1419
-8808:2:1420
-8809:2:1431
-8810:2:1436
-8811:2:1437
-8812:0:4365
-8813:2:1449
-8814:0:4365
-8815:3:3558
-8816:0:4365
-8817:2:1451
-8818:0:4365
-8819:3:3559
-8820:0:4365
-8821:2:1652
-8822:0:4365
-8823:2:1653
-8824:0:4365
-8825:2:1657
-8826:0:4365
-8827:2:1660
-8828:0:4365
-8829:3:3558
-8830:0:4365
-8831:2:1665
-8832:2:1669
-8833:2:1670
-8834:2:1678
-8835:2:1679
-8836:2:1683
-8837:2:1684
-8838:2:1678
-8839:2:1679
-8840:2:1680
-8841:2:1692
-8842:2:1697
-8843:2:1701
-8844:2:1702
-8845:2:1709
-8846:2:1710
-8847:2:1721
-8848:2:1722
-8849:2:1723
-8850:2:1721
-8851:2:1722
-8852:2:1723
-8853:2:1734
-8854:2:1739
-8855:2:1740
-8856:0:4365
-8857:3:3559
-8858:0:4365
-8859:2:1752
-8860:0:4365
-8861:3:3558
-8862:0:4365
-8863:2:1754
-8864:0:4365
-8865:3:3559
-8866:0:4365
-8867:2:1755
-8868:2:1759
-8869:2:1760
-8870:2:1768
-8871:2:1769
-8872:2:1773
-8873:2:1774
-8874:2:1768
-8875:2:1769
-8876:2:1773
-8877:2:1774
-8878:2:1782
-8879:2:1787
-8880:2:1791
-8881:2:1792
-8882:2:1799
-8883:2:1800
-8884:2:1811
-8885:2:1812
-8886:2:1813
-8887:2:1811
-8888:2:1812
-8889:2:1813
-8890:2:1824
-8891:2:1829
-8892:2:1830
-8893:0:4365
-8894:2:1842
-8895:0:4365
-8896:3:3558
-8897:0:4365
-8898:2:1844
-8899:0:4365
-8900:3:3559
-8901:0:4365
-8902:2:1845
-8903:2:1849
-8904:2:1850
-8905:2:1858
-8906:2:1859
-8907:2:1863
-8908:2:1864
-8909:2:1858
-8910:2:1859
-8911:2:1863
-8912:2:1864
-8913:2:1872
-8914:2:1877
-8915:2:1881
-8916:2:1882
-8917:2:1889
-8918:2:1890
-8919:2:1901
-8920:2:1902
-8921:2:1903
-8922:2:1901
-8923:2:1902
-8924:2:1903
-8925:2:1914
-8926:2:1919
-8927:2:1920
-8928:0:4365
-8929:2:1932
-8930:0:4365
-8931:3:3558
-8932:0:4365
-8933:2:1934
-8934:0:4365
-8935:3:3559
-8936:0:4365
-8937:2:1935
-8938:0:4365
-8939:2:1936
-8940:0:4365
-8941:2:2129
-8942:0:4365
-8943:2:2130
-8944:0:4365
-8945:2:2134
-8946:0:4365
-8947:3:3558
-8948:0:4365
-8949:2:2136
-8950:0:4365
-8951:3:3559
-8952:0:4365
-8953:2:2137
-8954:2:2141
-8955:2:2142
-8956:2:2150
-8957:2:2151
-8958:2:2155
-8959:2:2156
-8960:2:2150
-8961:2:2151
-8962:2:2155
-8963:2:2156
-8964:2:2164
-8965:2:2169
-8966:2:2173
-8967:2:2174
-8968:2:2181
-8969:2:2182
-8970:2:2193
-8971:2:2194
-8972:2:2195
-8973:2:2193
-8974:2:2194
-8975:2:2195
-8976:2:2206
-8977:2:2211
-8978:2:2212
-8979:0:4365
-8980:2:2224
-8981:0:4365
-8982:3:3558
-8983:0:4365
-8984:2:2226
-8985:0:4365
-8986:3:3559
-8987:0:4365
-8988:2:2230
-8989:0:4365
-8990:3:3558
-8991:0:4365
-8992:2:2235
-8993:2:2239
-8994:2:2240
-8995:2:2248
-8996:2:2249
-8997:2:2253
-8998:2:2254
-8999:2:2248
-9000:2:2249
-9001:2:2250
-9002:2:2262
-9003:2:2267
-9004:2:2271
-9005:2:2272
-9006:2:2279
-9007:2:2280
-9008:2:2291
-9009:2:2292
-9010:2:2293
-9011:2:2291
-9012:2:2292
-9013:2:2293
-9014:2:2304
-9015:2:2309
-9016:2:2310
-9017:0:4365
-9018:3:3559
-9019:0:4365
-9020:2:2322
-9021:0:4365
-9022:2:1169
-9023:0:4365
-9024:3:3558
-9025:0:4365
-9026:2:1170
-9027:0:4365
-9028:3:3559
-9029:0:4365
-9030:3:3560
-9031:0:4365
-9032:3:3566
-9033:0:4365
-9034:3:3569
-9035:3:3570
-9036:3:3582
-9037:3:3583
-9038:3:3587
-9039:3:3588
-9040:3:3582
-9041:3:3583
-9042:3:3587
-9043:3:3588
-9044:3:3596
-9045:3:3601
-9046:3:3605
-9047:3:3606
-9048:3:3613
-9049:3:3614
-9050:3:3625
-9051:3:3626
-9052:3:3627
-9053:3:3625
-9054:3:3626
-9055:3:3627
-9056:3:3638
-9057:3:3643
-9058:3:3644
-9059:0:4365
-9060:3:3656
-9061:0:4365
-9062:3:3657
-9063:0:4365
-9064:2:1173
-9065:0:4365
-9066:3:3658
-9067:0:4365
-9068:2:1179
-9069:0:4365
-9070:2:1180
-9071:0:4365
-9072:3:3657
-9073:0:4365
-9074:2:1181
-9075:2:1185
-9076:2:1186
-9077:2:1194
-9078:2:1195
-9079:2:1199
-9080:2:1200
-9081:2:1194
-9082:2:1195
-9083:2:1199
-9084:2:1200
-9085:2:1208
-9086:2:1213
-9087:2:1217
-9088:2:1218
-9089:2:1225
-9090:2:1226
-9091:2:1237
-9092:2:1238
-9093:2:1239
-9094:2:1237
-9095:2:1238
-9096:2:1239
-9097:2:1250
-9098:2:1255
-9099:2:1256
-9100:0:4365
-9101:3:3658
-9102:0:4365
-9103:2:1268
-9104:0:4365
-9105:3:3657
-9106:0:4365
-9107:2:1270
-9108:0:4365
-9109:3:3658
-9110:0:4365
-9111:2:1271
-9112:2:1275
-9113:2:1276
-9114:2:1284
-9115:2:1285
-9116:2:1289
-9117:2:1290
-9118:2:1284
-9119:2:1285
-9120:2:1289
-9121:2:1290
-9122:2:1298
-9123:2:1303
-9124:2:1307
-9125:2:1308
-9126:2:1315
-9127:2:1316
-9128:2:1327
-9129:2:1328
-9130:2:1329
-9131:2:1327
-9132:2:1328
-9133:2:1329
-9134:2:1340
-9135:2:1345
-9136:2:1346
-9137:0:4365
-9138:2:1358
-9139:0:4365
-9140:2:1360
-9141:0:4365
-9142:3:3657
-9143:0:4365
-9144:2:1361
-9145:0:4365
-9146:3:3658
-9147:0:4365
-9148:2:1362
-9149:2:1366
-9150:2:1367
-9151:2:1375
-9152:2:1376
-9153:2:1380
-9154:2:1381
-9155:2:1375
-9156:2:1376
-9157:2:1380
-9158:2:1381
-9159:2:1389
-9160:2:1394
-9161:2:1398
-9162:2:1399
-9163:2:1406
-9164:2:1407
-9165:2:1418
-9166:2:1419
-9167:2:1420
-9168:2:1418
-9169:2:1419
-9170:2:1420
-9171:2:1431
-9172:2:1436
-9173:2:1437
-9174:0:4365
-9175:2:1449
-9176:0:4365
-9177:3:3657
-9178:0:4365
-9179:2:1451
-9180:0:4365
-9181:3:3658
-9182:0:4365
-9183:2:1652
-9184:0:4365
-9185:2:1653
-9186:0:4365
-9187:2:1657
-9188:0:4365
-9189:2:1660
-9190:0:4365
-9191:3:3657
-9192:0:4365
-9193:2:1665
-9194:2:1669
-9195:2:1670
-9196:2:1678
-9197:2:1679
-9198:2:1683
-9199:2:1684
-9200:2:1678
-9201:2:1679
-9202:2:1680
-9203:2:1692
-9204:2:1697
-9205:2:1701
-9206:2:1702
-9207:2:1709
-9208:2:1710
-9209:2:1721
-9210:2:1722
-9211:2:1723
-9212:2:1721
-9213:2:1722
-9214:2:1723
-9215:2:1734
-9216:2:1739
-9217:2:1740
-9218:0:4365
-9219:3:3658
-9220:0:4365
-9221:2:1752
-9222:0:4365
-9223:3:3657
-9224:0:4365
-9225:2:1754
-9226:0:4365
-9227:3:3658
-9228:0:4365
-9229:2:1755
-9230:2:1759
-9231:2:1760
-9232:2:1768
-9233:2:1769
-9234:2:1773
-9235:2:1774
-9236:2:1768
-9237:2:1769
-9238:2:1773
-9239:2:1774
-9240:2:1782
-9241:2:1787
-9242:2:1791
-9243:2:1792
-9244:2:1799
-9245:2:1800
-9246:2:1811
-9247:2:1812
-9248:2:1813
-9249:2:1811
-9250:2:1812
-9251:2:1813
-9252:2:1824
-9253:2:1829
-9254:2:1830
-9255:0:4365
-9256:2:1842
-9257:0:4365
-9258:3:3657
-9259:0:4365
-9260:2:1844
-9261:0:4365
-9262:3:3658
-9263:0:4365
-9264:2:1845
-9265:2:1849
-9266:2:1850
-9267:2:1858
-9268:2:1859
-9269:2:1863
-9270:2:1864
-9271:2:1858
-9272:2:1859
-9273:2:1863
-9274:2:1864
-9275:2:1872
-9276:2:1877
-9277:2:1881
-9278:2:1882
-9279:2:1889
-9280:2:1890
-9281:2:1901
-9282:2:1902
-9283:2:1903
-9284:2:1901
-9285:2:1902
-9286:2:1903
-9287:2:1914
-9288:2:1919
-9289:2:1920
-9290:0:4365
-9291:2:1932
-9292:0:4365
-9293:3:3657
-9294:0:4365
-9295:2:1934
-9296:0:4365
-9297:3:3658
-9298:0:4365
-9299:2:1935
-9300:0:4365
-9301:2:1936
-9302:0:4365
-9303:2:2129
-9304:0:4365
-9305:2:2130
-9306:0:4365
-9307:2:2134
-9308:0:4365
-9309:3:3657
-9310:0:4365
-9311:2:2136
-9312:0:4365
-9313:3:3658
-9314:0:4365
-9315:2:2137
-9316:2:2141
-9317:2:2142
-9318:2:2150
-9319:2:2151
-9320:2:2155
-9321:2:2156
-9322:2:2150
-9323:2:2151
-9324:2:2155
-9325:2:2156
-9326:2:2164
-9327:2:2169
-9328:2:2173
-9329:2:2174
-9330:2:2181
-9331:2:2182
-9332:2:2193
-9333:2:2194
-9334:2:2195
-9335:2:2193
-9336:2:2194
-9337:2:2195
-9338:2:2206
-9339:2:2211
-9340:2:2212
-9341:0:4365
-9342:2:2224
-9343:0:4365
-9344:3:3657
-9345:0:4365
-9346:2:2226
-9347:0:4365
-9348:3:3658
-9349:0:4365
-9350:2:2230
-9351:0:4365
-9352:3:3657
-9353:0:4365
-9354:2:2235
-9355:2:2239
-9356:2:2240
-9357:2:2248
-9358:2:2249
-9359:2:2253
-9360:2:2254
-9361:2:2248
-9362:2:2249
-9363:2:2250
-9364:2:2262
-9365:2:2267
-9366:2:2271
-9367:2:2272
-9368:2:2279
-9369:2:2280
-9370:2:2291
-9371:2:2292
-9372:2:2293
-9373:2:2291
-9374:2:2292
-9375:2:2293
-9376:2:2304
-9377:2:2309
-9378:2:2310
-9379:0:4365
-9380:3:3658
-9381:0:4365
-9382:2:2322
-9383:0:4365
-9384:2:1169
-9385:0:4365
-9386:3:3657
-9387:0:4365
-9388:2:1170
-9389:0:4365
-9390:3:3658
-9391:0:4365
-9392:3:3659
-9393:0:4365
-9394:3:3665
-9395:0:4365
-9396:3:3666
-9397:0:4365
-9398:3:3667
-9399:0:4365
-9400:3:3668
-9401:0:4365
-9402:3:3669
-9403:3:3673
-9404:3:3674
-9405:3:3682
-9406:3:3683
-9407:3:3687
-9408:3:3688
-9409:3:3682
-9410:3:3683
-9411:3:3687
-9412:3:3688
-9413:3:3696
-9414:3:3701
-9415:3:3705
-9416:3:3706
-9417:3:3713
-9418:3:3714
-9419:3:3725
-9420:3:3726
-9421:3:3727
-9422:3:3725
-9423:3:3726
-9424:3:3727
-9425:3:3738
-9426:3:3743
-9427:3:3744
-9428:0:4365
-9429:3:3756
-9430:0:4365
-9431:3:3757
-9432:0:4365
-9433:2:1173
-9434:0:4365
-9435:3:3758
-9436:0:4365
-9437:2:1179
-9438:0:4365
-9439:2:1180
-9440:0:4365
-9441:3:3757
-9442:0:4365
-9443:2:1181
-9444:2:1185
-9445:2:1186
-9446:2:1194
-9447:2:1195
-9448:2:1199
-9449:2:1200
-9450:2:1194
-9451:2:1195
-9452:2:1199
-9453:2:1200
-9454:2:1208
-9455:2:1213
-9456:2:1217
-9457:2:1218
-9458:2:1225
-9459:2:1226
-9460:2:1237
-9461:2:1238
-9462:2:1239
-9463:2:1237
-9464:2:1238
-9465:2:1239
-9466:2:1250
-9467:2:1255
-9468:2:1256
-9469:0:4365
-9470:3:3758
-9471:0:4365
-9472:2:1268
-9473:0:4365
-9474:3:3757
-9475:0:4365
-9476:2:1270
-9477:0:4365
-9478:3:3758
-9479:0:4365
-9480:2:1271
-9481:2:1275
-9482:2:1276
-9483:2:1284
-9484:2:1285
-9485:2:1289
-9486:2:1290
-9487:2:1284
-9488:2:1285
-9489:2:1289
-9490:2:1290
-9491:2:1298
-9492:2:1303
-9493:2:1307
-9494:2:1308
-9495:2:1315
-9496:2:1316
-9497:2:1327
-9498:2:1328
-9499:2:1329
-9500:2:1327
-9501:2:1328
-9502:2:1329
-9503:2:1340
-9504:2:1345
-9505:2:1346
-9506:0:4365
-9507:2:1358
-9508:0:4365
-9509:2:1360
-9510:0:4365
-9511:3:3757
-9512:0:4365
-9513:2:1361
-9514:0:4365
-9515:3:3758
-9516:0:4365
-9517:2:1362
-9518:2:1366
-9519:2:1367
-9520:2:1375
-9521:2:1376
-9522:2:1380
-9523:2:1381
-9524:2:1375
-9525:2:1376
-9526:2:1380
-9527:2:1381
-9528:2:1389
-9529:2:1394
-9530:2:1398
-9531:2:1399
-9532:2:1406
-9533:2:1407
-9534:2:1418
-9535:2:1419
-9536:2:1420
-9537:2:1418
-9538:2:1419
-9539:2:1420
-9540:2:1431
-9541:2:1436
-9542:2:1437
-9543:0:4365
-9544:2:1449
-9545:0:4365
-9546:3:3757
-9547:0:4365
-9548:2:1451
-9549:0:4365
-9550:3:3758
-9551:0:4365
-9552:2:1652
-9553:0:4365
-9554:2:1653
-9555:0:4365
-9556:2:1657
-9557:0:4365
-9558:2:1660
-9559:0:4365
-9560:3:3757
-9561:0:4365
-9562:2:1665
-9563:2:1669
-9564:2:1670
-9565:2:1678
-9566:2:1679
-9567:2:1683
-9568:2:1684
-9569:2:1678
-9570:2:1679
-9571:2:1680
-9572:2:1692
-9573:2:1697
-9574:2:1701
-9575:2:1702
-9576:2:1709
-9577:2:1710
-9578:2:1721
-9579:2:1722
-9580:2:1723
-9581:2:1721
-9582:2:1722
-9583:2:1723
-9584:2:1734
-9585:2:1739
-9586:2:1740
-9587:0:4365
-9588:3:3758
-9589:0:4365
-9590:2:1752
-9591:0:4365
-9592:3:3757
-9593:0:4365
-9594:2:1754
-9595:0:4365
-9596:3:3758
-9597:0:4365
-9598:2:1755
-9599:2:1759
-9600:2:1760
-9601:2:1768
-9602:2:1769
-9603:2:1773
-9604:2:1774
-9605:2:1768
-9606:2:1769
-9607:2:1773
-9608:2:1774
-9609:2:1782
-9610:2:1787
-9611:2:1791
-9612:2:1792
-9613:2:1799
-9614:2:1800
-9615:2:1811
-9616:2:1812
-9617:2:1813
-9618:2:1811
-9619:2:1812
-9620:2:1813
-9621:2:1824
-9622:2:1829
-9623:2:1830
-9624:0:4365
-9625:2:1842
-9626:0:4365
-9627:3:3757
-9628:0:4365
-9629:2:1844
-9630:0:4365
-9631:3:3758
-9632:0:4365
-9633:2:1845
-9634:2:1849
-9635:2:1850
-9636:2:1858
-9637:2:1859
-9638:2:1863
-9639:2:1864
-9640:2:1858
-9641:2:1859
-9642:2:1863
-9643:2:1864
-9644:2:1872
-9645:2:1877
-9646:2:1881
-9647:2:1882
-9648:2:1889
-9649:2:1890
-9650:2:1901
-9651:2:1902
-9652:2:1903
-9653:2:1901
-9654:2:1902
-9655:2:1903
-9656:2:1914
-9657:2:1919
-9658:2:1920
-9659:0:4365
-9660:2:1932
-9661:0:4365
-9662:3:3757
-9663:0:4365
-9664:2:1934
-9665:0:4365
-9666:3:3758
-9667:0:4365
-9668:2:1935
-9669:0:4365
-9670:2:1936
-9671:0:4365
-9672:2:2129
-9673:0:4365
-9674:2:2130
-9675:0:4365
-9676:2:2134
-9677:0:4365
-9678:3:3757
-9679:0:4365
-9680:2:2136
-9681:0:4365
-9682:3:3758
-9683:0:4365
-9684:2:2137
-9685:2:2141
-9686:2:2142
-9687:2:2150
-9688:2:2151
-9689:2:2155
-9690:2:2156
-9691:2:2150
-9692:2:2151
-9693:2:2155
-9694:2:2156
-9695:2:2164
-9696:2:2169
-9697:2:2173
-9698:2:2174
-9699:2:2181
-9700:2:2182
-9701:2:2193
-9702:2:2194
-9703:2:2195
-9704:2:2193
-9705:2:2194
-9706:2:2195
-9707:2:2206
-9708:2:2211
-9709:2:2212
-9710:0:4365
-9711:2:2224
-9712:0:4365
-9713:3:3757
-9714:0:4365
-9715:2:2226
-9716:0:4365
-9717:3:3758
-9718:0:4365
-9719:2:2230
-9720:0:4365
-9721:3:3757
-9722:0:4365
-9723:2:2235
-9724:2:2239
-9725:2:2240
-9726:2:2248
-9727:2:2249
-9728:2:2253
-9729:2:2254
-9730:2:2248
-9731:2:2249
-9732:2:2250
-9733:2:2262
-9734:2:2267
-9735:2:2271
-9736:2:2272
-9737:2:2279
-9738:2:2280
-9739:2:2291
-9740:2:2292
-9741:2:2293
-9742:2:2291
-9743:2:2292
-9744:2:2293
-9745:2:2304
-9746:2:2309
-9747:2:2310
-9748:0:4365
-9749:3:3758
-9750:0:4365
-9751:2:2322
-9752:0:4365
-9753:2:1169
-9754:0:4365
-9755:3:3757
-9756:0:4365
-9757:2:1170
-9758:0:4365
-9759:3:3758
-9760:0:4365
-9761:3:3759
-9762:0:4365
-9763:3:3972
-9764:0:4365
-9765:3:3980
-9766:0:4365
-9767:3:3981
-9768:3:3985
-9769:3:3986
-9770:3:3994
-9771:3:3995
-9772:3:3999
-9773:3:4000
-9774:3:3994
-9775:3:3995
-9776:3:3999
-9777:3:4000
-9778:3:4008
-9779:3:4013
-9780:3:4017
-9781:3:4018
-9782:3:4025
-9783:3:4026
-9784:3:4037
-9785:3:4038
-9786:3:4039
-9787:3:4037
-9788:3:4038
-9789:3:4039
-9790:3:4050
-9791:3:4055
-9792:3:4056
-9793:0:4365
-9794:3:4068
-9795:0:4365
-9796:3:4069
-9797:0:4365
-9798:2:1173
-9799:0:4365
-9800:3:4070
-9801:0:4365
-9802:2:1179
-9803:0:4365
-9804:2:1180
-9805:0:4365
-9806:3:4069
-9807:0:4365
-9808:2:1181
-9809:2:1185
-9810:2:1186
-9811:2:1194
-9812:2:1195
-9813:2:1199
-9814:2:1200
-9815:2:1194
-9816:2:1195
-9817:2:1199
-9818:2:1200
-9819:2:1208
-9820:2:1213
-9821:2:1217
-9822:2:1218
-9823:2:1225
-9824:2:1226
-9825:2:1237
-9826:2:1238
-9827:2:1239
-9828:2:1237
-9829:2:1238
-9830:2:1239
-9831:2:1250
-9832:2:1255
-9833:2:1256
-9834:0:4365
-9835:3:4070
-9836:0:4365
-9837:2:1268
-9838:0:4365
-9839:3:4069
-9840:0:4365
-9841:2:1270
-9842:0:4365
-9843:3:4070
-9844:0:4365
-9845:2:1271
-9846:2:1275
-9847:2:1276
-9848:2:1284
-9849:2:1285
-9850:2:1289
-9851:2:1290
-9852:2:1284
-9853:2:1285
-9854:2:1289
-9855:2:1290
-9856:2:1298
-9857:2:1303
-9858:2:1307
-9859:2:1308
-9860:2:1315
-9861:2:1316
-9862:2:1327
-9863:2:1328
-9864:2:1329
-9865:2:1327
-9866:2:1328
-9867:2:1329
-9868:2:1340
-9869:2:1345
-9870:2:1346
-9871:0:4365
-9872:2:1358
-9873:0:4365
-9874:2:1360
-9875:0:4365
-9876:3:4069
-9877:0:4365
-9878:2:1361
-9879:0:4365
-9880:3:4070
-9881:0:4365
-9882:2:1362
-9883:2:1366
-9884:2:1367
-9885:2:1375
-9886:2:1376
-9887:2:1380
-9888:2:1381
-9889:2:1375
-9890:2:1376
-9891:2:1380
-9892:2:1381
-9893:2:1389
-9894:2:1394
-9895:2:1398
-9896:2:1399
-9897:2:1406
-9898:2:1407
-9899:2:1418
-9900:2:1419
-9901:2:1420
-9902:2:1418
-9903:2:1419
-9904:2:1420
-9905:2:1431
-9906:2:1436
-9907:2:1437
-9908:0:4365
-9909:2:1449
-9910:0:4365
-9911:3:4069
-9912:0:4365
-9913:2:1451
-9914:0:4365
-9915:3:4070
-9916:0:4365
-9917:2:1652
-9918:0:4365
-9919:2:1653
-9920:0:4365
-9921:2:1657
-9922:0:4365
-9923:2:1660
-9924:0:4365
-9925:3:4069
-9926:0:4365
-9927:2:1665
-9928:2:1669
-9929:2:1670
-9930:2:1678
-9931:2:1679
-9932:2:1683
-9933:2:1684
-9934:2:1678
-9935:2:1679
-9936:2:1680
-9937:2:1692
-9938:2:1697
-9939:2:1701
-9940:2:1702
-9941:2:1709
-9942:2:1710
-9943:2:1721
-9944:2:1722
-9945:2:1723
-9946:2:1721
-9947:2:1722
-9948:2:1723
-9949:2:1734
-9950:2:1739
-9951:2:1740
-9952:0:4365
-9953:3:4070
-9954:0:4365
-9955:2:1752
-9956:0:4365
-9957:3:4069
-9958:0:4365
-9959:2:1754
-9960:0:4365
-9961:3:4070
-9962:0:4365
-9963:2:1755
-9964:2:1759
-9965:2:1760
-9966:2:1768
-9967:2:1769
-9968:2:1773
-9969:2:1774
-9970:2:1768
-9971:2:1769
-9972:2:1773
-9973:2:1774
-9974:2:1782
-9975:2:1787
-9976:2:1791
-9977:2:1792
-9978:2:1799
-9979:2:1800
-9980:2:1811
-9981:2:1812
-9982:2:1813
-9983:2:1811
-9984:2:1812
-9985:2:1813
-9986:2:1824
-9987:2:1829
-9988:2:1830
-9989:0:4365
-9990:2:1842
-9991:0:4365
-9992:3:4069
-9993:0:4365
-9994:2:1844
-9995:0:4365
-9996:3:4070
-9997:0:4365
-9998:2:1845
-9999:2:1849
-10000:2:1850
-10001:2:1858
-10002:2:1859
-10003:2:1863
-10004:2:1864
-10005:2:1858
-10006:2:1859
-10007:2:1863
-10008:2:1864
-10009:2:1872
-10010:2:1877
-10011:2:1881
-10012:2:1882
-10013:2:1889
-10014:2:1890
-10015:2:1901
-10016:2:1902
-10017:2:1903
-10018:2:1901
-10019:2:1902
-10020:2:1903
-10021:2:1914
-10022:2:1919
-10023:2:1920
-10024:0:4365
-10025:2:1932
-10026:0:4365
-10027:3:4069
-10028:0:4365
-10029:2:1934
-10030:0:4365
-10031:3:4070
-10032:0:4365
-10033:2:1935
-10034:0:4365
-10035:2:1936
-10036:0:4365
-10037:2:2129
-10038:0:4365
-10039:2:2130
-10040:0:4365
-10041:2:2134
-10042:0:4365
-10043:3:4069
-10044:0:4365
-10045:2:2136
-10046:0:4365
-10047:3:4070
-10048:0:4365
-10049:2:2137
-10050:2:2141
-10051:2:2142
-10052:2:2150
-10053:2:2151
-10054:2:2155
-10055:2:2156
-10056:2:2150
-10057:2:2151
-10058:2:2155
-10059:2:2156
-10060:2:2164
-10061:2:2169
-10062:2:2173
-10063:2:2174
-10064:2:2181
-10065:2:2182
-10066:2:2193
-10067:2:2194
-10068:2:2195
-10069:2:2193
-10070:2:2194
-10071:2:2195
-10072:2:2206
-10073:2:2211
-10074:2:2212
-10075:0:4365
-10076:2:2224
-10077:0:4365
-10078:3:4069
-10079:0:4365
-10080:2:2226
-10081:0:4365
-10082:3:4070
-10083:0:4365
-10084:2:2230
-10085:0:4365
-10086:3:4069
-10087:0:4365
-10088:2:2235
-10089:2:2239
-10090:2:2240
-10091:2:2248
-10092:2:2249
-10093:2:2253
-10094:2:2254
-10095:2:2248
-10096:2:2249
-10097:2:2250
-10098:2:2262
-10099:2:2267
-10100:2:2271
-10101:2:2272
-10102:2:2279
-10103:2:2280
-10104:2:2291
-10105:2:2292
-10106:2:2293
-10107:2:2291
-10108:2:2292
-10109:2:2293
-10110:2:2304
-10111:2:2309
-10112:2:2310
-10113:0:4365
-10114:3:4070
-10115:0:4365
-10116:2:2322
-10117:0:4365
-10118:2:1169
-10119:0:4365
-10120:3:4069
-10121:0:4365
-10122:2:1170
-10123:0:4365
-10124:3:4070
-10125:0:4365
-10126:3:4071
-10127:0:4365
-10128:3:4081
-10129:0:4365
-10130:3:3666
-10131:0:4365
-10132:3:3667
-10133:0:4365
-10134:3:3668
-10135:0:4365
-10136:3:3669
-10137:3:3673
-10138:3:3674
-10139:3:3682
-10140:3:3683
-10141:3:3687
-10142:3:3688
-10143:3:3682
-10144:3:3683
-10145:3:3687
-10146:3:3688
-10147:3:3696
-10148:3:3701
-10149:3:3705
-10150:3:3706
-10151:3:3713
-10152:3:3714
-10153:3:3725
-10154:3:3726
-10155:3:3727
-10156:3:3725
-10157:3:3726
-10158:3:3727
-10159:3:3738
-10160:3:3743
-10161:3:3744
-10162:0:4365
-10163:3:3756
-10164:0:4365
-10165:3:3757
-10166:0:4365
-10167:2:1173
-10168:0:4365
-10169:3:3758
-10170:0:4365
-10171:2:1179
-10172:0:4365
-10173:2:1180
-10174:0:4365
-10175:3:3757
-10176:0:4365
-10177:2:1181
-10178:2:1185
-10179:2:1186
-10180:2:1194
-10181:2:1195
-10182:2:1199
-10183:2:1200
-10184:2:1194
-10185:2:1195
-10186:2:1199
-10187:2:1200
-10188:2:1208
-10189:2:1213
-10190:2:1217
-10191:2:1218
-10192:2:1225
-10193:2:1226
-10194:2:1237
-10195:2:1238
-10196:2:1239
-10197:2:1237
-10198:2:1238
-10199:2:1239
-10200:2:1250
-10201:2:1255
-10202:2:1256
-10203:0:4365
-10204:3:3758
-10205:0:4365
-10206:2:1268
-10207:0:4365
-10208:3:3757
-10209:0:4365
-10210:2:1270
-10211:0:4365
-10212:3:3758
-10213:0:4365
-10214:2:1271
-10215:2:1275
-10216:2:1276
-10217:2:1284
-10218:2:1285
-10219:2:1289
-10220:2:1290
-10221:2:1284
-10222:2:1285
-10223:2:1289
-10224:2:1290
-10225:2:1298
-10226:2:1303
-10227:2:1307
-10228:2:1308
-10229:2:1315
-10230:2:1316
-10231:2:1327
-10232:2:1328
-10233:2:1329
-10234:2:1327
-10235:2:1328
-10236:2:1329
-10237:2:1340
-10238:2:1345
-10239:2:1346
-10240:0:4365
-10241:2:1358
-10242:0:4365
-10243:2:1360
-10244:0:4365
-10245:3:3757
-10246:0:4365
-10247:2:1361
-10248:0:4365
-10249:3:3758
-10250:0:4365
-10251:2:1362
-10252:2:1366
-10253:2:1367
-10254:2:1375
-10255:2:1376
-10256:2:1380
-10257:2:1381
-10258:2:1375
-10259:2:1376
-10260:2:1380
-10261:2:1381
-10262:2:1389
-10263:2:1394
-10264:2:1398
-10265:2:1399
-10266:2:1406
-10267:2:1407
-10268:2:1418
-10269:2:1419
-10270:2:1420
-10271:2:1418
-10272:2:1419
-10273:2:1420
-10274:2:1431
-10275:2:1436
-10276:2:1437
-10277:0:4365
-10278:2:1449
-10279:0:4365
-10280:3:3757
-10281:0:4365
-10282:2:1451
-10283:0:4365
-10284:3:3758
-10285:0:4365
-10286:2:1652
-10287:0:4365
-10288:2:1653
-10289:0:4365
-10290:2:1657
-10291:0:4365
-10292:2:1660
-10293:0:4365
-10294:3:3757
-10295:0:4365
-10296:2:1665
-10297:2:1669
-10298:2:1670
-10299:2:1678
-10300:2:1679
-10301:2:1683
-10302:2:1684
-10303:2:1678
-10304:2:1679
-10305:2:1680
-10306:2:1692
-10307:2:1697
-10308:2:1701
-10309:2:1702
-10310:2:1709
-10311:2:1710
-10312:2:1721
-10313:2:1722
-10314:2:1723
-10315:2:1721
-10316:2:1722
-10317:2:1723
-10318:2:1734
-10319:2:1739
-10320:2:1740
-10321:0:4365
-10322:3:3758
-10323:0:4365
-10324:2:1752
-10325:0:4365
-10326:3:3757
-10327:0:4365
-10328:2:1754
-10329:0:4365
-10330:3:3758
-10331:0:4365
-10332:2:1755
-10333:2:1759
-10334:2:1760
-10335:2:1768
-10336:2:1769
-10337:2:1773
-10338:2:1774
-10339:2:1768
-10340:2:1769
-10341:2:1773
-10342:2:1774
-10343:2:1782
-10344:2:1787
-10345:2:1791
-10346:2:1792
-10347:2:1799
-10348:2:1800
-10349:2:1811
-10350:2:1812
-10351:2:1813
-10352:2:1811
-10353:2:1812
-10354:2:1813
-10355:2:1824
-10356:2:1829
-10357:2:1830
-10358:0:4365
-10359:2:1842
-10360:0:4365
-10361:3:3757
-10362:0:4365
-10363:2:1844
-10364:0:4365
-10365:3:3758
-10366:0:4365
-10367:2:1845
-10368:2:1849
-10369:2:1850
-10370:2:1858
-10371:2:1859
-10372:2:1863
-10373:2:1864
-10374:2:1858
-10375:2:1859
-10376:2:1863
-10377:2:1864
-10378:2:1872
-10379:2:1877
-10380:2:1881
-10381:2:1882
-10382:2:1889
-10383:2:1890
-10384:2:1901
-10385:2:1902
-10386:2:1903
-10387:2:1901
-10388:2:1902
-10389:2:1903
-10390:2:1914
-10391:2:1919
-10392:2:1920
-10393:0:4365
-10394:2:1932
-10395:0:4365
-10396:3:3757
-10397:0:4365
-10398:2:1934
-10399:0:4365
-10400:3:3758
-10401:0:4365
-10402:2:1935
-10403:0:4365
-10404:2:1936
-10405:0:4365
-10406:2:2129
-10407:0:4365
-10408:2:2130
-10409:0:4365
-10410:2:2134
-10411:0:4365
-10412:3:3757
-10413:0:4365
-10414:2:2136
-10415:0:4365
-10416:3:3758
-10417:0:4365
-10418:2:2137
-10419:2:2141
-10420:2:2142
-10421:2:2150
-10422:2:2151
-10423:2:2155
-10424:2:2156
-10425:2:2150
-10426:2:2151
-10427:2:2155
-10428:2:2156
-10429:2:2164
-10430:2:2169
-10431:2:2173
-10432:2:2174
-10433:2:2181
-10434:2:2182
-10435:2:2193
-10436:2:2194
-10437:2:2195
-10438:2:2193
-10439:2:2194
-10440:2:2195
-10441:2:2206
-10442:2:2211
-10443:2:2212
-10444:0:4365
-10445:2:2224
-10446:0:4365
-10447:3:3757
-10448:0:4365
-10449:2:2226
-10450:0:4365
-10451:3:3758
-10452:0:4365
-10453:2:2230
-10454:0:4365
-10455:3:3757
-10456:0:4365
-10457:2:2235
-10458:2:2239
-10459:2:2240
-10460:2:2248
-10461:2:2249
-10462:2:2253
-10463:2:2254
-10464:2:2248
-10465:2:2249
-10466:2:2250
-10467:2:2262
-10468:2:2267
-10469:2:2271
-10470:2:2272
-10471:2:2279
-10472:2:2280
-10473:2:2291
-10474:2:2292
-10475:2:2293
-10476:2:2291
-10477:2:2292
-10478:2:2293
-10479:2:2304
-10480:2:2309
-10481:2:2310
-10482:0:4365
-10483:3:3758
-10484:0:4365
-10485:2:2322
-10486:0:4365
-10487:2:1169
-10488:0:4365
-10489:3:3757
-10490:0:4365
-10491:2:1170
-10492:0:4365
-10493:3:3758
-10494:0:4365
-10495:3:3759
-10496:0:4365
-10497:3:3972
-10498:0:4365
-10499:3:4077
-10500:0:4365
-10501:3:4078
-10502:0:4365
-10503:3:4082
-10504:0:4365
-10505:3:4088
-10506:0:4365
-10507:3:4092
-10508:3:4093
-10509:3:4097
-10510:3:4101
-10511:3:4102
-10512:3:4097
-10513:3:4101
-10514:3:4102
-10515:3:4106
-10516:3:4114
-10517:3:4115
-10518:3:4120
-10519:3:4127
-10520:3:4128
-10521:3:4127
-10522:3:4128
-10523:3:4135
-10524:3:4140
-10525:0:4365
-10526:3:4151
-10527:0:4365
-10528:3:4155
-10529:3:4156
-10530:3:4160
-10531:3:4164
-10532:3:4165
-10533:3:4160
-10534:3:4164
-10535:3:4165
-10536:3:4169
-10537:3:4177
-10538:3:4178
-10539:3:4183
-10540:3:4190
-10541:3:4191
-10542:3:4190
-10543:3:4191
-10544:3:4198
-10545:3:4203
-10546:0:4365
-10547:3:4151
-10548:0:4365
-10549:3:4155
-10550:3:4156
-10551:3:4160
-10552:3:4164
-10553:3:4165
-10554:3:4160
-10555:3:4164
-10556:3:4165
-10557:3:4169
-10558:3:4177
-10559:3:4178
-10560:3:4183
-10561:3:4190
-10562:3:4191
-10563:3:4190
-10564:3:4191
-10565:3:4198
-10566:3:4203
-10567:0:4365
-10568:3:4214
-10569:0:4365
-10570:3:4222
-10571:3:4223
-10572:3:4227
-10573:3:4231
-10574:3:4232
-10575:3:4227
-10576:3:4231
-10577:3:4232
-10578:3:4236
-10579:3:4244
-10580:3:4245
-10581:3:4250
-10582:3:4257
-10583:3:4258
-10584:3:4257
-10585:3:4258
-10586:3:4265
-10587:3:4270
-10588:0:4365
-10589:3:4285
-10590:0:4365
-10591:3:4286
-10592:0:4365
-10593:2:1173
-10594:0:4365
-10595:3:4287
-10596:0:4365
-10597:2:1179
-10598:0:4365
-10599:2:1180
-10600:0:4365
-10601:3:4286
-10602:0:4365
-10603:2:1181
-10604:2:1185
-10605:2:1186
-10606:2:1194
-10607:2:1195
-10608:2:1199
-10609:2:1200
-10610:2:1194
-10611:2:1195
-10612:2:1199
-10613:2:1200
-10614:2:1208
-10615:2:1213
-10616:2:1217
-10617:2:1218
-10618:2:1225
-10619:2:1226
-10620:2:1237
-10621:2:1238
-10622:2:1239
-10623:2:1237
-10624:2:1238
-10625:2:1239
-10626:2:1250
-10627:2:1255
-10628:2:1256
-10629:0:4365
-10630:3:4287
-10631:0:4365
-10632:2:1268
-10633:0:4365
-10634:3:4286
-10635:0:4365
-10636:2:1270
-10637:0:4365
-10638:3:4287
-10639:0:4365
-10640:2:1271
-10641:2:1275
-10642:2:1276
-10643:2:1284
-10644:2:1285
-10645:2:1289
-10646:2:1290
-10647:2:1284
-10648:2:1285
-10649:2:1289
-10650:2:1290
-10651:2:1298
-10652:2:1303
-10653:2:1307
-10654:2:1308
-10655:2:1315
-10656:2:1316
-10657:2:1327
-10658:2:1328
-10659:2:1329
-10660:2:1327
-10661:2:1328
-10662:2:1329
-10663:2:1340
-10664:2:1345
-10665:2:1346
-10666:0:4365
-10667:2:1358
-10668:0:4365
-10669:2:1360
-10670:0:4365
-10671:3:4286
-10672:0:4365
-10673:2:1361
-10674:0:4365
-10675:3:4287
-10676:0:4365
-10677:2:1362
-10678:2:1366
-10679:2:1367
-10680:2:1375
-10681:2:1376
-10682:2:1380
-10683:2:1381
-10684:2:1375
-10685:2:1376
-10686:2:1380
-10687:2:1381
-10688:2:1389
-10689:2:1394
-10690:2:1398
-10691:2:1399
-10692:2:1406
-10693:2:1407
-10694:2:1418
-10695:2:1419
-10696:2:1420
-10697:2:1418
-10698:2:1419
-10699:2:1420
-10700:2:1431
-10701:2:1436
-10702:2:1437
-10703:0:4365
-10704:2:1449
-10705:0:4365
-10706:3:4286
-10707:0:4365
-10708:2:1451
-10709:0:4365
-10710:3:4287
-10711:0:4365
-10712:2:1652
-10713:0:4365
-10714:2:1653
-10715:0:4365
-10716:2:1657
-10717:0:4365
-10718:2:1660
-10719:0:4365
-10720:3:4286
-10721:0:4365
-10722:2:1665
-10723:2:1669
-10724:2:1670
-10725:2:1678
-10726:2:1679
-10727:2:1683
-10728:2:1684
-10729:2:1678
-10730:2:1679
-10731:2:1680
-10732:2:1692
-10733:2:1697
-10734:2:1701
-10735:2:1702
-10736:2:1709
-10737:2:1710
-10738:2:1721
-10739:2:1722
-10740:2:1723
-10741:2:1721
-10742:2:1722
-10743:2:1723
-10744:2:1734
-10745:2:1739
-10746:2:1740
-10747:0:4365
-10748:3:4287
-10749:0:4365
-10750:2:1752
-10751:0:4365
-10752:3:4286
-10753:0:4365
-10754:2:1754
-10755:0:4365
-10756:3:4287
-10757:0:4365
-10758:2:1755
-10759:2:1759
-10760:2:1760
-10761:2:1768
-10762:2:1769
-10763:2:1773
-10764:2:1774
-10765:2:1768
-10766:2:1769
-10767:2:1773
-10768:2:1774
-10769:2:1782
-10770:2:1787
-10771:2:1791
-10772:2:1792
-10773:2:1799
-10774:2:1800
-10775:2:1811
-10776:2:1812
-10777:2:1813
-10778:2:1811
-10779:2:1812
-10780:2:1813
-10781:2:1824
-10782:2:1829
-10783:2:1830
-10784:0:4365
-10785:2:1842
-10786:0:4365
-10787:3:4286
-10788:0:4365
-10789:2:1844
-10790:0:4365
-10791:3:4287
-10792:0:4365
-10793:2:1845
-10794:2:1849
-10795:2:1850
-10796:2:1858
-10797:2:1859
-10798:2:1863
-10799:2:1864
-10800:2:1858
-10801:2:1859
-10802:2:1863
-10803:2:1864
-10804:2:1872
-10805:2:1877
-10806:2:1881
-10807:2:1882
-10808:2:1889
-10809:2:1890
-10810:2:1901
-10811:2:1902
-10812:2:1903
-10813:2:1901
-10814:2:1902
-10815:2:1903
-10816:2:1914
-10817:2:1919
-10818:2:1920
-10819:0:4365
-10820:2:1932
-10821:0:4365
-10822:3:4286
-10823:0:4365
-10824:2:1934
-10825:0:4365
-10826:3:4287
-10827:0:4365
-10828:2:1935
-10829:0:4365
-10830:2:1936
-10831:0:4365
-10832:2:2129
-10833:0:4365
-10834:2:2130
-10835:0:4365
-10836:2:2134
-10837:0:4365
-10838:3:4286
-10839:0:4365
-10840:2:2136
-10841:0:4365
-10842:3:4287
-10843:0:4365
-10844:2:2137
-10845:2:2141
-10846:2:2142
-10847:2:2150
-10848:2:2151
-10849:2:2155
-10850:2:2156
-10851:2:2150
-10852:2:2151
-10853:2:2155
-10854:2:2156
-10855:2:2164
-10856:2:2169
-10857:2:2173
-10858:2:2174
-10859:2:2181
-10860:2:2182
-10861:2:2193
-10862:2:2194
-10863:2:2195
-10864:2:2193
-10865:2:2194
-10866:2:2195
-10867:2:2206
-10868:2:2211
-10869:2:2212
-10870:0:4365
-10871:2:2224
-10872:0:4365
-10873:3:4286
-10874:0:4365
-10875:2:2226
-10876:0:4365
-10877:3:4287
-10878:0:4365
-10879:2:2230
-10880:0:4365
-10881:3:4286
-10882:0:4365
-10883:2:2235
-10884:2:2239
-10885:2:2240
-10886:2:2248
-10887:2:2249
-10888:2:2253
-10889:2:2254
-10890:2:2248
-10891:2:2249
-10892:2:2250
-10893:2:2262
-10894:2:2267
-10895:2:2271
-10896:2:2272
-10897:2:2279
-10898:2:2280
-10899:2:2291
-10900:2:2292
-10901:2:2293
-10902:2:2291
-10903:2:2292
-10904:2:2293
-10905:2:2304
-10906:2:2309
-10907:2:2310
-10908:0:4365
-10909:3:4287
-10910:0:4365
-10911:2:2322
-10912:0:4365
-10913:2:1169
-10914:0:4365
-10915:3:4286
-10916:0:4365
-10917:2:1170
-10918:0:4365
-10919:3:4287
-10920:0:4365
-10921:3:4288
-10922:0:4365
-10923:3:4294
-10924:0:4365
-10925:3:4295
-10926:0:4365
-10927:3:2338
-10928:0:4365
-10929:3:2339
-10930:3:2343
-10931:3:2344
-10932:3:2352
-10933:3:2353
-10934:3:2357
-10935:3:2358
-10936:3:2352
-10937:3:2353
-10938:3:2357
-10939:3:2358
-10940:3:2366
-10941:3:2371
-10942:3:2375
-10943:3:2376
-10944:3:2383
-10945:3:2384
-10946:3:2395
-10947:3:2396
-10948:3:2397
-10949:3:2395
-10950:3:2396
-10951:3:2397
-10952:3:2408
-10953:3:2413
-10954:3:2414
-10955:0:4365
-10956:3:2426
-10957:0:4365
-10958:3:2427
-10959:0:4365
-10960:2:1173
-10961:0:4365
-10962:3:2428
-10963:0:4365
-10964:2:1179
-10965:0:4365
-10966:2:1180
-10967:0:4365
-10968:3:2427
-10969:0:4365
-10970:2:1181
-10971:2:1185
-10972:2:1186
-10973:2:1194
-10974:2:1195
-10975:2:1199
-10976:2:1200
-10977:2:1194
-10978:2:1195
-10979:2:1199
-10980:2:1200
-10981:2:1208
-10982:2:1213
-10983:2:1217
-10984:2:1218
-10985:2:1225
-10986:2:1226
-10987:2:1237
-10988:2:1238
-10989:2:1239
-10990:2:1237
-10991:2:1238
-10992:2:1239
-10993:2:1250
-10994:2:1255
-10995:2:1256
-10996:0:4365
-10997:3:2428
-10998:0:4365
-10999:2:1268
-11000:0:4365
-11001:3:2427
-11002:0:4365
-11003:2:1270
-11004:0:4365
-11005:3:2428
-11006:0:4365
-11007:2:1271
-11008:2:1275
-11009:2:1276
-11010:2:1284
-11011:2:1285
-11012:2:1289
-11013:2:1290
-11014:2:1284
-11015:2:1285
-11016:2:1289
-11017:2:1290
-11018:2:1298
-11019:2:1303
-11020:2:1307
-11021:2:1308
-11022:2:1315
-11023:2:1316
-11024:2:1327
-11025:2:1328
-11026:2:1329
-11027:2:1327
-11028:2:1328
-11029:2:1329
-11030:2:1340
-11031:2:1345
-11032:2:1346
-11033:0:4365
-11034:2:1358
-11035:0:4365
-11036:2:1360
-11037:0:4365
-11038:3:2427
-11039:0:4365
-11040:2:1361
-11041:0:4365
-11042:3:2428
-11043:0:4365
-11044:2:1362
-11045:2:1366
-11046:2:1367
-11047:2:1375
-11048:2:1376
-11049:2:1380
-11050:2:1381
-11051:2:1375
-11052:2:1376
-11053:2:1380
-11054:2:1381
-11055:2:1389
-11056:2:1394
-11057:2:1398
-11058:2:1399
-11059:2:1406
-11060:2:1407
-11061:2:1418
-11062:2:1419
-11063:2:1420
-11064:2:1418
-11065:2:1419
-11066:2:1420
-11067:2:1431
-11068:2:1436
-11069:2:1437
-11070:0:4365
-11071:2:1449
-11072:0:4365
-11073:3:2427
-11074:0:4365
-11075:2:1451
-11076:0:4365
-11077:3:2428
-11078:0:4365
-11079:2:1652
-11080:0:4365
-11081:2:1653
-11082:0:4365
-11083:2:1657
-11084:0:4365
-11085:2:1660
-11086:0:4365
-11087:3:2427
-11088:0:4365
-11089:2:1665
-11090:2:1669
-11091:2:1670
-11092:2:1678
-11093:2:1679
-11094:2:1683
-11095:2:1684
-11096:2:1678
-11097:2:1679
-11098:2:1680
-11099:2:1692
-11100:2:1697
-11101:2:1701
-11102:2:1702
-11103:2:1709
-11104:2:1710
-11105:2:1721
-11106:2:1722
-11107:2:1723
-11108:2:1721
-11109:2:1722
-11110:2:1723
-11111:2:1734
-11112:2:1739
-11113:2:1740
-11114:0:4365
-11115:3:2428
-11116:0:4365
-11117:2:1752
-11118:0:4365
-11119:3:2427
-11120:0:4365
-11121:2:1754
-11122:0:4365
-11123:3:2428
-11124:0:4365
-11125:2:1755
-11126:2:1759
-11127:2:1760
-11128:2:1768
-11129:2:1769
-11130:2:1773
-11131:2:1774
-11132:2:1768
-11133:2:1769
-11134:2:1773
-11135:2:1774
-11136:2:1782
-11137:2:1787
-11138:2:1791
-11139:2:1792
-11140:2:1799
-11141:2:1800
-11142:2:1811
-11143:2:1812
-11144:2:1813
-11145:2:1811
-11146:2:1812
-11147:2:1813
-11148:2:1824
-11149:2:1829
-11150:2:1830
-11151:0:4365
-11152:2:1842
-11153:0:4365
-11154:3:2427
-11155:0:4365
-11156:2:1844
-11157:0:4363
-11158:3:2428
-11159:0:4369
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.define b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 27a963a..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-Depth=   11386 States=    1e+06 Transitions= 1.56e+07 Memory=   527.287        t=   12.8 R=   8e+04
-pan: claim violated! (at depth 2146)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 72 byte, depth reached 11386, errors: 1
-  1223588 states, stored
- 17987399 states, matched
- 19210987 transitions (= stored+matched)
- 70012127 atomic steps
-hash conflicts:   4173157 (resolved)
-
-Stats on memory usage (in Megabytes):
-  116.690      equivalent memory usage for states (stored*(State-vector + overhead))
-   75.177      actual memory usage for states (compression: 64.42%)
-               state-vector as stored = 36 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  540.861      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 151, "(1)"
-       line 419, "pan.___", state 181, "(1)"
-       line 400, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 242, "(1)"
-       line 419, "pan.___", state 272, "(1)"
-       line 400, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 331, "(1)"
-       line 409, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 360, "(1)"
-       line 419, "pan.___", state 390, "(1)"
-       line 541, "pan.___", state 414, "-end-"
-       (18 of 414 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 410, "pan.___", state 153, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 400, "pan.___", state 209, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 223, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 254, "(1)"
-       line 414, "pan.___", state 267, "(1)"
-       line 400, "pan.___", state 300, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 314, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 345, "(1)"
-       line 414, "pan.___", state 358, "(1)"
-       line 400, "pan.___", state 395, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 409, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 440, "(1)"
-       line 414, "pan.___", state 453, "(1)"
-       line 400, "pan.___", state 488, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 533, "(1)"
-       line 414, "pan.___", state 546, "(1)"
-       line 400, "pan.___", state 582, "(1)"
-       line 404, "pan.___", state 594, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 638, "(1)"
-       line 404, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 731, "(1)"
-       line 404, "pan.___", state 777, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 795, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 821, "(1)"
-       line 419, "pan.___", state 838, "(1)"
-       line 404, "pan.___", state 868, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 886, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 912, "(1)"
-       line 419, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 963, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 981, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1007, "(1)"
-       line 419, "pan.___", state 1024, "(1)"
-       line 400, "pan.___", state 1050, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1053, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1053, "else"
-       line 400, "pan.___", state 1056, "(1)"
-       line 404, "pan.___", state 1064, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1066, "(1)"
-       line 404, "pan.___", state 1067, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1067, "else"
-       line 404, "pan.___", state 1070, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 402, "pan.___", state 1076, "((i<1))"
-       line 402, "pan.___", state 1076, "((i>=1))"
-       line 409, "pan.___", state 1082, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1095, "(1)"
-       line 410, "pan.___", state 1096, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1096, "else"
-       line 410, "pan.___", state 1099, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 414, "pan.___", state 1108, "(1)"
-       line 414, "pan.___", state 1109, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1109, "else"
-       line 414, "pan.___", state 1112, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 412, "pan.___", state 1118, "((i<1))"
-       line 412, "pan.___", state 1118, "((i>=1))"
-       line 419, "pan.___", state 1125, "(1)"
-       line 419, "pan.___", state 1126, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1126, "else"
-       line 419, "pan.___", state 1129, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 404, "pan.___", state 1164, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1208, "(1)"
-       line 404, "pan.___", state 1254, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1298, "(1)"
-       line 400, "pan.___", state 1334, "(1)"
-       line 404, "pan.___", state 1346, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1390, "(1)"
-       line 404, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1483, "(1)"
-       line 404, "pan.___", state 1529, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1547, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1573, "(1)"
-       line 419, "pan.___", state 1590, "(1)"
-       line 404, "pan.___", state 1620, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1638, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1664, "(1)"
-       line 419, "pan.___", state 1681, "(1)"
-       line 404, "pan.___", state 1715, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1733, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1759, "(1)"
-       line 419, "pan.___", state 1776, "(1)"
-       line 400, "pan.___", state 1802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1804, "(1)"
-       line 400, "pan.___", state 1805, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1805, "else"
-       line 400, "pan.___", state 1808, "(1)"
-       line 404, "pan.___", state 1816, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1818, "(1)"
-       line 404, "pan.___", state 1819, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1819, "else"
-       line 404, "pan.___", state 1822, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 402, "pan.___", state 1828, "((i<1))"
-       line 402, "pan.___", state 1828, "((i>=1))"
-       line 409, "pan.___", state 1834, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1847, "(1)"
-       line 410, "pan.___", state 1848, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1848, "else"
-       line 410, "pan.___", state 1851, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 414, "pan.___", state 1860, "(1)"
-       line 414, "pan.___", state 1861, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1861, "else"
-       line 414, "pan.___", state 1864, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 412, "pan.___", state 1870, "((i<1))"
-       line 412, "pan.___", state 1870, "((i>=1))"
-       line 419, "pan.___", state 1877, "(1)"
-       line 419, "pan.___", state 1878, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1878, "else"
-       line 419, "pan.___", state 1881, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 404, "pan.___", state 1916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1960, "(1)"
-       line 404, "pan.___", state 2007, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2051, "(1)"
-       line 404, "pan.___", state 2102, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2146, "(1)"
-       line 703, "pan.___", state 2192, "-end-"
-       (144 of 2192 states)
-unreached in proctype :init:
-       line 710, "pan.___", state 9, "((j<2))"
-       line 710, "pan.___", state 9, "((j>=2))"
-       line 711, "pan.___", state 20, "((j<2))"
-       line 711, "pan.___", state 20, "((j>=2))"
-       line 716, "pan.___", state 33, "((j<2))"
-       line 716, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 750, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 15.9 seconds
-pan: rate 77100.693 states/second
-pan: avg transition delay 8.2609e-07 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 927df3f..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 04e7425..0000000
+++ /dev/null
@@ -1,2149 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2654
-2:3:2606
-3:3:2609
-4:3:2609
-5:3:2612
-6:3:2620
-7:3:2620
-8:3:2623
-9:3:2629
-10:3:2633
-11:3:2633
-12:3:2636
-13:3:2644
-14:3:2648
-15:3:2649
-16:0:2654
-17:3:2651
-18:0:2654
-19:2:416
-20:0:2654
-21:2:422
-22:0:2654
-23:2:423
-24:0:2654
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:2654
-45:2:511
-46:0:2654
-47:2:513
-48:2:514
-49:0:2654
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:2654
-69:2:605
-70:0:2654
-71:2:607
-72:0:2654
-73:2:608
-74:0:2654
-75:2:618
-76:0:2654
-77:2:619
-78:2:623
-79:2:624
-80:2:632
-81:2:633
-82:2:637
-83:2:638
-84:2:646
-85:2:651
-86:2:655
-87:2:656
-88:2:663
-89:2:664
-90:2:675
-91:2:676
-92:2:677
-93:2:688
-94:2:693
-95:2:694
-96:0:2654
-97:2:709
-98:0:2654
-99:2:710
-100:2:714
-101:2:715
-102:2:723
-103:2:724
-104:2:728
-105:2:729
-106:2:737
-107:2:742
-108:2:746
-109:2:747
-110:2:754
-111:2:755
-112:2:766
-113:2:767
-114:2:768
-115:2:779
-116:2:784
-117:2:785
-118:0:2654
-119:2:800
-120:0:2654
-121:2:805
-122:2:809
-123:2:810
-124:2:818
-125:2:819
-126:2:823
-127:2:824
-128:2:832
-129:2:837
-130:2:841
-131:2:842
-132:2:849
-133:2:850
-134:2:861
-135:2:862
-136:2:863
-137:2:874
-138:2:879
-139:2:880
-140:0:2654
-141:2:895
-142:0:2654
-143:2:897
-144:0:2654
-145:2:898
-146:2:902
-147:2:903
-148:2:911
-149:2:912
-150:2:916
-151:2:917
-152:2:925
-153:2:930
-154:2:934
-155:2:935
-156:2:942
-157:2:943
-158:2:954
-159:2:955
-160:2:956
-161:2:967
-162:2:972
-163:2:973
-164:0:2654
-165:2:985
-166:0:2654
-167:2:987
-168:0:2654
-169:2:990
-170:2:991
-171:2:1003
-172:2:1004
-173:2:1008
-174:2:1009
-175:2:1017
-176:2:1022
-177:2:1026
-178:2:1027
-179:2:1034
-180:2:1035
-181:2:1046
-182:2:1047
-183:2:1048
-184:2:1059
-185:2:1064
-186:2:1065
-187:0:2654
-188:2:1077
-189:0:2654
-190:2:1079
-191:0:2654
-192:2:1080
-193:0:2654
-194:2:1081
-195:0:2654
-196:2:1082
-197:0:2654
-198:2:1083
-199:2:1087
-200:2:1088
-201:2:1096
-202:2:1097
-203:2:1101
-204:2:1102
-205:2:1110
-206:2:1115
-207:2:1119
-208:2:1120
-209:2:1127
-210:2:1128
-211:2:1139
-212:2:1140
-213:2:1141
-214:2:1152
-215:2:1157
-216:2:1158
-217:0:2654
-218:2:1170
-219:0:2654
-220:2:1451
-221:0:2654
-222:2:1549
-223:0:2654
-224:2:1550
-225:0:2654
-226:2:1554
-227:0:2654
-228:2:1560
-229:2:1564
-230:2:1565
-231:2:1573
-232:2:1574
-233:2:1578
-234:2:1579
-235:2:1587
-236:2:1592
-237:2:1596
-238:2:1597
-239:2:1604
-240:2:1605
-241:2:1616
-242:2:1617
-243:2:1618
-244:2:1629
-245:2:1634
-246:2:1635
-247:0:2654
-248:2:1647
-249:0:2654
-250:2:1649
-251:0:2654
-252:2:1650
-253:2:1654
-254:2:1655
-255:2:1663
-256:2:1664
-257:2:1668
-258:2:1669
-259:2:1677
-260:2:1682
-261:2:1686
-262:2:1687
-263:2:1694
-264:2:1695
-265:2:1706
-266:2:1707
-267:2:1708
-268:2:1719
-269:2:1724
-270:2:1725
-271:0:2654
-272:2:1737
-273:0:2654
-274:2:1739
-275:0:2654
-276:2:1742
-277:2:1743
-278:2:1755
-279:2:1756
-280:2:1760
-281:2:1761
-282:2:1769
-283:2:1774
-284:2:1778
-285:2:1779
-286:2:1786
-287:2:1787
-288:2:1798
-289:2:1799
-290:2:1800
-291:2:1811
-292:2:1816
-293:2:1817
-294:0:2654
-295:2:1829
-296:0:2654
-297:2:1831
-298:0:2654
-299:2:1832
-300:0:2654
-301:2:1833
-302:0:2654
-303:2:1834
-304:0:2654
-305:2:1835
-306:2:1839
-307:2:1840
-308:2:1848
-309:2:1849
-310:2:1853
-311:2:1854
-312:2:1862
-313:2:1867
-314:2:1871
-315:2:1872
-316:2:1879
-317:2:1880
-318:2:1891
-319:2:1892
-320:2:1893
-321:2:1904
-322:2:1909
-323:2:1910
-324:0:2654
-325:2:1922
-326:0:2654
-327:2:2203
-328:0:2654
-329:2:2301
-330:0:2654
-331:2:2302
-332:0:2654
-333:2:2306
-334:0:2654
-335:2:2312
-336:2:2316
-337:2:2317
-338:2:2325
-339:2:2326
-340:2:2330
-341:2:2331
-342:2:2339
-343:2:2344
-344:2:2348
-345:2:2349
-346:2:2356
-347:2:2357
-348:2:2368
-349:2:2369
-350:2:2370
-351:2:2381
-352:2:2386
-353:2:2387
-354:0:2654
-355:2:2402
-356:0:2654
-357:2:2403
-358:2:2407
-359:2:2408
-360:2:2416
-361:2:2417
-362:2:2421
-363:2:2422
-364:2:2430
-365:2:2435
-366:2:2439
-367:2:2440
-368:2:2447
-369:2:2448
-370:2:2459
-371:2:2460
-372:2:2461
-373:2:2472
-374:2:2477
-375:2:2478
-376:0:2654
-377:2:2493
-378:0:2654
-379:2:2498
-380:2:2502
-381:2:2503
-382:2:2511
-383:2:2512
-384:2:2516
-385:2:2517
-386:2:2525
-387:2:2530
-388:2:2534
-389:2:2535
-390:2:2542
-391:2:2543
-392:2:2554
-393:2:2555
-394:2:2556
-395:2:2567
-396:2:2572
-397:2:2573
-398:0:2654
-399:2:2588
-400:0:2654
-401:2:2590
-402:0:2654
-403:2:2591
-404:0:2654
-405:2:423
-406:0:2654
-407:2:424
-408:2:428
-409:2:429
-410:2:437
-411:2:438
-412:2:442
-413:2:443
-414:2:451
-415:2:456
-416:2:460
-417:2:461
-418:2:468
-419:2:469
-420:2:480
-421:2:481
-422:2:482
-423:2:493
-424:2:498
-425:2:499
-426:0:2654
-427:2:511
-428:0:2654
-429:2:513
-430:2:514
-431:0:2654
-432:2:518
-433:2:522
-434:2:523
-435:2:531
-436:2:532
-437:2:536
-438:2:537
-439:2:545
-440:2:550
-441:2:551
-442:2:562
-443:2:563
-444:2:574
-445:2:575
-446:2:576
-447:2:587
-448:2:592
-449:2:593
-450:0:2654
-451:2:605
-452:0:2654
-453:2:607
-454:0:2654
-455:2:608
-456:0:2654
-457:2:618
-458:0:2654
-459:2:619
-460:2:623
-461:2:624
-462:2:632
-463:2:633
-464:2:637
-465:2:638
-466:2:646
-467:2:651
-468:2:655
-469:2:656
-470:2:663
-471:2:664
-472:2:675
-473:2:676
-474:2:677
-475:2:688
-476:2:693
-477:2:694
-478:0:2654
-479:2:709
-480:0:2654
-481:2:710
-482:2:714
-483:2:715
-484:2:723
-485:2:724
-486:2:728
-487:2:729
-488:2:737
-489:2:742
-490:2:746
-491:2:747
-492:2:754
-493:2:755
-494:2:766
-495:2:767
-496:2:768
-497:2:779
-498:2:784
-499:2:785
-500:0:2654
-501:2:800
-502:0:2654
-503:2:805
-504:2:809
-505:2:810
-506:2:818
-507:2:819
-508:2:823
-509:2:824
-510:2:832
-511:2:837
-512:2:841
-513:2:842
-514:2:849
-515:2:850
-516:2:861
-517:2:862
-518:2:863
-519:2:874
-520:2:879
-521:2:880
-522:0:2654
-523:2:895
-524:0:2654
-525:2:897
-526:0:2654
-527:2:898
-528:2:902
-529:2:903
-530:2:911
-531:2:912
-532:2:916
-533:2:917
-534:2:925
-535:2:930
-536:2:934
-537:2:935
-538:2:942
-539:2:943
-540:2:954
-541:2:955
-542:2:956
-543:2:967
-544:2:972
-545:2:973
-546:0:2654
-547:2:985
-548:0:2654
-549:2:987
-550:0:2654
-551:2:990
-552:2:991
-553:2:1003
-554:2:1004
-555:2:1008
-556:2:1009
-557:2:1017
-558:2:1022
-559:2:1026
-560:2:1027
-561:2:1034
-562:2:1035
-563:2:1046
-564:2:1047
-565:2:1048
-566:2:1059
-567:2:1064
-568:2:1065
-569:0:2654
-570:2:1077
-571:0:2654
-572:2:1079
-573:0:2654
-574:2:1080
-575:0:2654
-576:2:1081
-577:0:2654
-578:2:1082
-579:0:2654
-580:2:1083
-581:2:1087
-582:2:1088
-583:2:1096
-584:2:1097
-585:2:1101
-586:2:1102
-587:2:1110
-588:2:1115
-589:2:1119
-590:2:1120
-591:2:1127
-592:2:1128
-593:2:1139
-594:2:1140
-595:2:1141
-596:2:1152
-597:2:1157
-598:2:1158
-599:0:2654
-600:2:1170
-601:0:2654
-602:2:1451
-603:0:2654
-604:2:1549
-605:0:2654
-606:2:1550
-607:0:2654
-608:2:1554
-609:0:2654
-610:2:1560
-611:2:1564
-612:2:1565
-613:2:1573
-614:2:1574
-615:2:1578
-616:2:1579
-617:2:1587
-618:2:1592
-619:2:1596
-620:2:1597
-621:2:1604
-622:2:1605
-623:2:1616
-624:2:1617
-625:2:1618
-626:2:1629
-627:2:1634
-628:2:1635
-629:0:2654
-630:2:1647
-631:0:2654
-632:2:1649
-633:0:2654
-634:2:1650
-635:2:1654
-636:2:1655
-637:2:1663
-638:2:1664
-639:2:1668
-640:2:1669
-641:2:1677
-642:2:1682
-643:2:1686
-644:2:1687
-645:2:1694
-646:2:1695
-647:2:1706
-648:2:1707
-649:2:1708
-650:2:1719
-651:2:1724
-652:2:1725
-653:0:2654
-654:2:1737
-655:0:2654
-656:2:1739
-657:0:2654
-658:2:1742
-659:2:1743
-660:2:1755
-661:2:1756
-662:2:1760
-663:2:1761
-664:2:1769
-665:2:1774
-666:2:1778
-667:2:1779
-668:2:1786
-669:2:1787
-670:2:1798
-671:2:1799
-672:2:1800
-673:2:1811
-674:2:1816
-675:2:1817
-676:0:2654
-677:2:1829
-678:0:2654
-679:2:1831
-680:0:2654
-681:2:1832
-682:0:2654
-683:2:1833
-684:0:2654
-685:2:1834
-686:0:2654
-687:2:1835
-688:2:1839
-689:2:1840
-690:2:1848
-691:2:1849
-692:2:1853
-693:2:1854
-694:2:1862
-695:2:1867
-696:2:1871
-697:2:1872
-698:2:1879
-699:2:1880
-700:2:1891
-701:2:1892
-702:2:1893
-703:2:1904
-704:2:1909
-705:2:1910
-706:0:2654
-707:2:1922
-708:0:2654
-709:2:2203
-710:0:2654
-711:2:2301
-712:0:2654
-713:2:2302
-714:0:2654
-715:2:2306
-716:0:2654
-717:2:2312
-718:2:2316
-719:2:2317
-720:2:2325
-721:2:2326
-722:2:2330
-723:2:2331
-724:2:2339
-725:2:2344
-726:2:2348
-727:2:2349
-728:2:2356
-729:2:2357
-730:2:2368
-731:2:2369
-732:2:2370
-733:2:2381
-734:2:2386
-735:2:2387
-736:0:2654
-737:2:2402
-738:0:2654
-739:2:2403
-740:2:2407
-741:2:2408
-742:2:2416
-743:2:2417
-744:2:2421
-745:2:2422
-746:2:2430
-747:2:2435
-748:2:2439
-749:2:2440
-750:2:2447
-751:2:2448
-752:2:2459
-753:2:2460
-754:2:2461
-755:2:2472
-756:2:2477
-757:2:2478
-758:0:2654
-759:2:2493
-760:0:2654
-761:2:2498
-762:2:2502
-763:2:2503
-764:2:2511
-765:2:2512
-766:2:2516
-767:2:2517
-768:2:2525
-769:2:2530
-770:2:2534
-771:2:2535
-772:2:2542
-773:2:2543
-774:2:2554
-775:2:2555
-776:2:2556
-777:2:2567
-778:2:2572
-779:2:2573
-780:0:2654
-781:2:2588
-782:0:2654
-783:2:2590
-784:0:2654
-785:2:2591
-786:0:2654
-787:2:423
-788:0:2654
-789:2:424
-790:2:428
-791:2:429
-792:2:437
-793:2:438
-794:2:442
-795:2:443
-796:2:451
-797:2:456
-798:2:460
-799:2:461
-800:2:468
-801:2:469
-802:2:480
-803:2:481
-804:2:482
-805:2:493
-806:2:498
-807:2:499
-808:0:2654
-809:2:511
-810:0:2654
-811:2:513
-812:2:514
-813:0:2654
-814:2:518
-815:2:522
-816:2:523
-817:2:531
-818:2:532
-819:2:536
-820:2:537
-821:2:545
-822:2:550
-823:2:551
-824:2:562
-825:2:563
-826:2:574
-827:2:575
-828:2:576
-829:2:587
-830:2:592
-831:2:593
-832:0:2654
-833:2:605
-834:0:2654
-835:2:607
-836:0:2654
-837:2:608
-838:0:2654
-839:2:618
-840:0:2654
-841:2:619
-842:2:623
-843:2:624
-844:2:632
-845:2:633
-846:2:637
-847:2:638
-848:2:646
-849:2:651
-850:2:655
-851:2:656
-852:2:663
-853:2:664
-854:2:675
-855:2:676
-856:2:677
-857:2:688
-858:2:693
-859:2:694
-860:0:2654
-861:2:709
-862:0:2654
-863:2:710
-864:2:714
-865:2:715
-866:2:723
-867:2:724
-868:2:728
-869:2:729
-870:2:737
-871:2:742
-872:2:746
-873:2:747
-874:2:754
-875:2:755
-876:2:766
-877:2:767
-878:2:768
-879:2:779
-880:2:784
-881:2:785
-882:0:2654
-883:2:800
-884:0:2654
-885:2:805
-886:2:809
-887:2:810
-888:2:818
-889:2:819
-890:2:823
-891:2:824
-892:2:832
-893:2:837
-894:2:841
-895:2:842
-896:2:849
-897:2:850
-898:2:861
-899:2:862
-900:2:863
-901:2:874
-902:2:879
-903:2:880
-904:0:2654
-905:2:895
-906:0:2654
-907:2:897
-908:0:2654
-909:2:898
-910:2:902
-911:2:903
-912:2:911
-913:2:912
-914:2:916
-915:2:917
-916:2:925
-917:2:930
-918:2:934
-919:2:935
-920:2:942
-921:2:943
-922:2:954
-923:2:955
-924:2:956
-925:2:967
-926:2:972
-927:2:973
-928:0:2654
-929:2:985
-930:0:2654
-931:2:987
-932:0:2654
-933:2:990
-934:2:991
-935:2:1003
-936:2:1004
-937:2:1008
-938:2:1009
-939:2:1017
-940:2:1022
-941:2:1026
-942:2:1027
-943:2:1034
-944:2:1035
-945:2:1046
-946:2:1047
-947:2:1048
-948:2:1059
-949:2:1064
-950:2:1065
-951:0:2654
-952:2:1077
-953:0:2654
-954:2:1079
-955:0:2654
-956:2:1080
-957:0:2654
-958:2:1081
-959:0:2654
-960:2:1082
-961:0:2654
-962:2:1083
-963:2:1087
-964:2:1088
-965:2:1096
-966:2:1097
-967:2:1101
-968:2:1102
-969:2:1110
-970:2:1115
-971:2:1119
-972:2:1120
-973:2:1127
-974:2:1128
-975:2:1139
-976:2:1140
-977:2:1141
-978:2:1152
-979:2:1157
-980:2:1158
-981:0:2654
-982:2:1170
-983:0:2654
-984:2:1451
-985:0:2654
-986:2:1549
-987:0:2654
-988:2:1550
-989:0:2654
-990:2:1554
-991:0:2654
-992:2:1560
-993:2:1564
-994:2:1565
-995:2:1573
-996:2:1574
-997:2:1578
-998:2:1579
-999:2:1587
-1000:2:1592
-1001:2:1596
-1002:2:1597
-1003:2:1604
-1004:2:1605
-1005:2:1616
-1006:2:1617
-1007:2:1618
-1008:2:1629
-1009:2:1634
-1010:2:1635
-1011:0:2654
-1012:2:1647
-1013:0:2654
-1014:2:1649
-1015:0:2654
-1016:2:1650
-1017:2:1654
-1018:2:1655
-1019:2:1663
-1020:2:1664
-1021:2:1668
-1022:2:1669
-1023:2:1677
-1024:2:1682
-1025:2:1686
-1026:2:1687
-1027:2:1694
-1028:2:1695
-1029:2:1706
-1030:2:1707
-1031:2:1708
-1032:2:1719
-1033:2:1724
-1034:2:1725
-1035:0:2654
-1036:2:1737
-1037:0:2654
-1038:2:1739
-1039:0:2654
-1040:2:1742
-1041:2:1743
-1042:2:1755
-1043:2:1756
-1044:2:1760
-1045:2:1761
-1046:2:1769
-1047:2:1774
-1048:2:1778
-1049:2:1779
-1050:2:1786
-1051:2:1787
-1052:2:1798
-1053:2:1799
-1054:2:1800
-1055:2:1811
-1056:2:1816
-1057:2:1817
-1058:0:2654
-1059:2:1829
-1060:0:2654
-1061:2:1831
-1062:0:2654
-1063:2:1832
-1064:0:2654
-1065:2:1833
-1066:0:2654
-1067:2:1834
-1068:0:2654
-1069:2:1835
-1070:2:1839
-1071:2:1840
-1072:2:1848
-1073:2:1849
-1074:2:1853
-1075:2:1854
-1076:2:1862
-1077:2:1867
-1078:2:1871
-1079:2:1872
-1080:2:1879
-1081:2:1880
-1082:2:1891
-1083:2:1892
-1084:2:1893
-1085:2:1904
-1086:2:1909
-1087:2:1910
-1088:0:2654
-1089:2:1922
-1090:0:2654
-1091:2:2203
-1092:0:2654
-1093:2:2301
-1094:0:2654
-1095:2:2302
-1096:0:2654
-1097:2:2306
-1098:0:2654
-1099:2:2312
-1100:2:2316
-1101:2:2317
-1102:2:2325
-1103:2:2326
-1104:2:2330
-1105:2:2331
-1106:2:2339
-1107:2:2344
-1108:2:2348
-1109:2:2349
-1110:2:2356
-1111:2:2357
-1112:2:2368
-1113:2:2369
-1114:2:2370
-1115:2:2381
-1116:2:2386
-1117:2:2387
-1118:0:2654
-1119:2:2402
-1120:0:2654
-1121:2:2403
-1122:2:2407
-1123:2:2408
-1124:2:2416
-1125:2:2417
-1126:2:2421
-1127:2:2422
-1128:2:2430
-1129:2:2435
-1130:2:2439
-1131:2:2440
-1132:2:2447
-1133:2:2448
-1134:2:2459
-1135:2:2460
-1136:2:2461
-1137:2:2472
-1138:2:2477
-1139:2:2478
-1140:0:2654
-1141:2:2493
-1142:0:2654
-1143:2:2498
-1144:2:2502
-1145:2:2503
-1146:2:2511
-1147:2:2512
-1148:2:2516
-1149:2:2517
-1150:2:2525
-1151:2:2530
-1152:2:2534
-1153:2:2535
-1154:2:2542
-1155:2:2543
-1156:2:2554
-1157:2:2555
-1158:2:2556
-1159:2:2567
-1160:2:2572
-1161:2:2573
-1162:0:2654
-1163:2:2588
-1164:0:2654
-1165:2:2590
-1166:0:2654
-1167:2:2591
-1168:0:2654
-1169:2:423
-1170:0:2654
-1171:2:424
-1172:2:428
-1173:2:429
-1174:2:437
-1175:2:438
-1176:2:442
-1177:2:443
-1178:2:451
-1179:2:456
-1180:2:460
-1181:2:461
-1182:2:468
-1183:2:469
-1184:2:480
-1185:2:481
-1186:2:482
-1187:2:493
-1188:2:498
-1189:2:499
-1190:0:2654
-1191:2:511
-1192:0:2654
-1193:2:513
-1194:2:514
-1195:0:2654
-1196:2:518
-1197:2:522
-1198:2:523
-1199:2:531
-1200:2:532
-1201:2:536
-1202:2:537
-1203:2:545
-1204:2:550
-1205:2:551
-1206:2:562
-1207:2:563
-1208:2:574
-1209:2:575
-1210:2:576
-1211:2:587
-1212:2:592
-1213:2:593
-1214:0:2654
-1215:2:605
-1216:0:2654
-1217:2:607
-1218:0:2654
-1219:2:608
-1220:0:2654
-1221:2:618
-1222:0:2654
-1223:2:619
-1224:2:623
-1225:2:624
-1226:2:632
-1227:2:633
-1228:2:637
-1229:2:638
-1230:2:646
-1231:2:651
-1232:2:655
-1233:2:656
-1234:2:663
-1235:2:664
-1236:2:675
-1237:2:676
-1238:2:677
-1239:2:688
-1240:2:693
-1241:2:694
-1242:0:2654
-1243:2:709
-1244:0:2654
-1245:2:710
-1246:2:714
-1247:2:715
-1248:2:723
-1249:2:724
-1250:2:728
-1251:2:729
-1252:2:737
-1253:2:742
-1254:2:746
-1255:2:747
-1256:2:754
-1257:2:755
-1258:2:766
-1259:2:767
-1260:2:768
-1261:2:779
-1262:2:784
-1263:2:785
-1264:0:2654
-1265:2:800
-1266:0:2654
-1267:2:805
-1268:2:809
-1269:2:810
-1270:2:818
-1271:2:819
-1272:2:823
-1273:2:824
-1274:2:832
-1275:2:837
-1276:2:841
-1277:2:842
-1278:2:849
-1279:2:850
-1280:2:861
-1281:2:862
-1282:2:863
-1283:2:874
-1284:2:879
-1285:2:880
-1286:0:2654
-1287:2:895
-1288:0:2654
-1289:2:897
-1290:0:2654
-1291:2:898
-1292:2:902
-1293:2:903
-1294:2:911
-1295:2:912
-1296:2:916
-1297:2:917
-1298:2:925
-1299:2:930
-1300:2:934
-1301:2:935
-1302:2:942
-1303:2:943
-1304:2:954
-1305:2:955
-1306:2:956
-1307:2:967
-1308:2:972
-1309:2:973
-1310:0:2654
-1311:2:985
-1312:0:2654
-1313:2:987
-1314:0:2654
-1315:2:990
-1316:2:991
-1317:2:1003
-1318:2:1004
-1319:2:1008
-1320:2:1009
-1321:2:1017
-1322:2:1022
-1323:2:1026
-1324:2:1027
-1325:2:1034
-1326:2:1035
-1327:2:1046
-1328:2:1047
-1329:2:1048
-1330:2:1059
-1331:2:1064
-1332:2:1065
-1333:0:2654
-1334:2:1077
-1335:0:2654
-1336:2:1079
-1337:0:2654
-1338:2:1080
-1339:0:2654
-1340:2:1081
-1341:0:2654
-1342:2:1082
-1343:0:2654
-1344:2:1083
-1345:2:1087
-1346:2:1088
-1347:2:1096
-1348:2:1097
-1349:2:1101
-1350:2:1102
-1351:2:1110
-1352:2:1115
-1353:2:1119
-1354:2:1120
-1355:2:1127
-1356:2:1128
-1357:2:1139
-1358:2:1140
-1359:2:1141
-1360:2:1152
-1361:2:1157
-1362:2:1158
-1363:0:2654
-1364:2:1170
-1365:0:2654
-1366:2:1451
-1367:0:2654
-1368:2:1549
-1369:0:2654
-1370:2:1550
-1371:0:2654
-1372:2:1554
-1373:0:2654
-1374:2:1560
-1375:2:1564
-1376:2:1565
-1377:2:1573
-1378:2:1574
-1379:2:1578
-1380:2:1579
-1381:2:1587
-1382:2:1592
-1383:2:1596
-1384:2:1597
-1385:2:1604
-1386:2:1605
-1387:2:1616
-1388:2:1617
-1389:2:1618
-1390:2:1629
-1391:2:1634
-1392:2:1635
-1393:0:2654
-1394:2:1647
-1395:0:2654
-1396:2:1649
-1397:0:2654
-1398:2:1650
-1399:2:1654
-1400:2:1655
-1401:2:1663
-1402:2:1664
-1403:2:1668
-1404:2:1669
-1405:2:1677
-1406:2:1682
-1407:2:1686
-1408:2:1687
-1409:2:1694
-1410:2:1695
-1411:2:1706
-1412:2:1707
-1413:2:1708
-1414:2:1719
-1415:2:1724
-1416:2:1725
-1417:0:2654
-1418:2:1737
-1419:0:2654
-1420:2:1739
-1421:0:2654
-1422:2:1742
-1423:2:1743
-1424:2:1755
-1425:2:1756
-1426:2:1760
-1427:2:1761
-1428:2:1769
-1429:2:1774
-1430:2:1778
-1431:2:1779
-1432:2:1786
-1433:2:1787
-1434:2:1798
-1435:2:1799
-1436:2:1800
-1437:2:1811
-1438:2:1816
-1439:2:1817
-1440:0:2654
-1441:2:1829
-1442:0:2654
-1443:2:1831
-1444:0:2654
-1445:2:1832
-1446:0:2654
-1447:2:1833
-1448:0:2654
-1449:2:1834
-1450:0:2654
-1451:2:1835
-1452:2:1839
-1453:2:1840
-1454:2:1848
-1455:2:1849
-1456:2:1853
-1457:2:1854
-1458:2:1862
-1459:2:1867
-1460:2:1871
-1461:2:1872
-1462:2:1879
-1463:2:1880
-1464:2:1891
-1465:2:1892
-1466:2:1893
-1467:2:1904
-1468:2:1909
-1469:2:1910
-1470:0:2654
-1471:2:1922
-1472:0:2654
-1473:2:2203
-1474:0:2654
-1475:2:2301
-1476:0:2654
-1477:2:2302
-1478:0:2654
-1479:2:2306
-1480:0:2654
-1481:2:2312
-1482:2:2316
-1483:2:2317
-1484:2:2325
-1485:2:2326
-1486:2:2330
-1487:2:2331
-1488:2:2339
-1489:2:2344
-1490:2:2348
-1491:2:2349
-1492:2:2356
-1493:2:2357
-1494:2:2368
-1495:2:2369
-1496:2:2370
-1497:2:2381
-1498:2:2386
-1499:2:2387
-1500:0:2654
-1501:2:2402
-1502:0:2654
-1503:2:2403
-1504:2:2407
-1505:2:2408
-1506:2:2416
-1507:2:2417
-1508:2:2421
-1509:2:2422
-1510:2:2430
-1511:2:2435
-1512:2:2439
-1513:2:2440
-1514:2:2447
-1515:2:2448
-1516:2:2459
-1517:2:2460
-1518:2:2461
-1519:2:2472
-1520:2:2477
-1521:2:2478
-1522:0:2654
-1523:2:2493
-1524:0:2654
-1525:2:2498
-1526:2:2502
-1527:2:2503
-1528:2:2511
-1529:2:2512
-1530:2:2516
-1531:2:2517
-1532:2:2525
-1533:2:2530
-1534:2:2534
-1535:2:2535
-1536:2:2542
-1537:2:2543
-1538:2:2554
-1539:2:2555
-1540:2:2556
-1541:2:2567
-1542:2:2572
-1543:2:2573
-1544:0:2654
-1545:2:2588
-1546:0:2654
-1547:2:2590
-1548:0:2654
-1549:2:2591
-1550:0:2654
-1551:2:423
-1552:0:2654
-1553:2:424
-1554:2:428
-1555:2:429
-1556:2:437
-1557:2:438
-1558:2:442
-1559:2:443
-1560:2:451
-1561:2:456
-1562:2:460
-1563:2:461
-1564:2:468
-1565:2:469
-1566:2:480
-1567:2:481
-1568:2:482
-1569:2:493
-1570:2:498
-1571:2:499
-1572:0:2654
-1573:2:511
-1574:0:2654
-1575:2:513
-1576:2:514
-1577:0:2654
-1578:2:518
-1579:2:522
-1580:2:523
-1581:2:531
-1582:2:532
-1583:2:536
-1584:2:537
-1585:2:545
-1586:2:558
-1587:2:559
-1588:2:562
-1589:2:563
-1590:2:574
-1591:2:575
-1592:2:576
-1593:2:587
-1594:2:592
-1595:2:595
-1596:2:596
-1597:0:2654
-1598:2:605
-1599:0:2654
-1600:2:607
-1601:0:2654
-1602:2:608
-1603:0:2654
-1604:2:618
-1605:0:2654
-1606:2:619
-1607:2:623
-1608:2:624
-1609:2:632
-1610:2:633
-1611:2:637
-1612:2:638
-1613:2:646
-1614:2:659
-1615:2:660
-1616:2:663
-1617:2:664
-1618:2:675
-1619:2:676
-1620:2:677
-1621:2:688
-1622:2:693
-1623:2:696
-1624:2:697
-1625:0:2654
-1626:2:709
-1627:0:2654
-1628:2:710
-1629:2:714
-1630:2:715
-1631:2:723
-1632:2:724
-1633:2:728
-1634:2:729
-1635:2:737
-1636:2:750
-1637:2:751
-1638:2:754
-1639:2:755
-1640:2:766
-1641:2:767
-1642:2:768
-1643:2:779
-1644:2:784
-1645:2:787
-1646:2:788
-1647:0:2654
-1648:2:800
-1649:0:2654
-1650:2:805
-1651:2:809
-1652:2:810
-1653:2:818
-1654:2:819
-1655:2:823
-1656:2:824
-1657:2:832
-1658:2:845
-1659:2:846
-1660:2:849
-1661:2:850
-1662:2:861
-1663:2:862
-1664:2:863
-1665:2:874
-1666:2:879
-1667:2:882
-1668:2:883
-1669:0:2654
-1670:2:895
-1671:0:2654
-1672:2:897
-1673:0:2654
-1674:2:898
-1675:2:902
-1676:2:903
-1677:2:911
-1678:2:912
-1679:2:916
-1680:2:917
-1681:2:925
-1682:2:938
-1683:2:939
-1684:2:942
-1685:2:943
-1686:2:954
-1687:2:955
-1688:2:956
-1689:2:967
-1690:2:972
-1691:2:975
-1692:2:976
-1693:0:2654
-1694:2:985
-1695:0:2654
-1696:2:987
-1697:0:2654
-1698:2:990
-1699:2:991
-1700:2:1003
-1701:2:1004
-1702:2:1008
-1703:2:1009
-1704:2:1017
-1705:2:1030
-1706:2:1031
-1707:2:1034
-1708:2:1035
-1709:2:1046
-1710:2:1047
-1711:2:1048
-1712:2:1059
-1713:2:1064
-1714:2:1067
-1715:2:1068
-1716:0:2654
-1717:2:1077
-1718:0:2654
-1719:2:1079
-1720:0:2654
-1721:2:1080
-1722:0:2654
-1723:2:1081
-1724:0:2654
-1725:2:1082
-1726:0:2654
-1727:2:1083
-1728:2:1087
-1729:2:1088
-1730:2:1096
-1731:2:1097
-1732:2:1101
-1733:2:1102
-1734:2:1110
-1735:2:1123
-1736:2:1124
-1737:2:1127
-1738:2:1128
-1739:2:1139
-1740:2:1140
-1741:2:1141
-1742:2:1152
-1743:2:1157
-1744:2:1160
-1745:2:1161
-1746:0:2654
-1747:2:1170
-1748:0:2654
-1749:2:1451
-1750:0:2654
-1751:2:1549
-1752:0:2654
-1753:2:1550
-1754:0:2654
-1755:2:1554
-1756:0:2654
-1757:2:1560
-1758:2:1564
-1759:2:1565
-1760:2:1573
-1761:2:1574
-1762:2:1578
-1763:2:1579
-1764:2:1587
-1765:2:1600
-1766:2:1601
-1767:2:1604
-1768:2:1605
-1769:2:1616
-1770:2:1617
-1771:2:1618
-1772:2:1629
-1773:2:1634
-1774:2:1637
-1775:2:1638
-1776:0:2654
-1777:2:1647
-1778:0:2654
-1779:2:1649
-1780:0:2654
-1781:2:1650
-1782:2:1654
-1783:2:1655
-1784:2:1663
-1785:2:1664
-1786:2:1668
-1787:2:1669
-1788:2:1677
-1789:2:1690
-1790:2:1691
-1791:2:1694
-1792:2:1695
-1793:2:1706
-1794:2:1707
-1795:2:1708
-1796:2:1719
-1797:2:1724
-1798:2:1727
-1799:2:1728
-1800:0:2654
-1801:2:1737
-1802:0:2654
-1803:2:1739
-1804:0:2654
-1805:2:1742
-1806:2:1743
-1807:2:1755
-1808:2:1756
-1809:2:1760
-1810:2:1761
-1811:2:1769
-1812:2:1782
-1813:2:1783
-1814:2:1786
-1815:2:1787
-1816:2:1798
-1817:2:1799
-1818:2:1800
-1819:2:1811
-1820:2:1816
-1821:2:1819
-1822:2:1820
-1823:0:2654
-1824:2:1829
-1825:0:2654
-1826:2:1831
-1827:0:2654
-1828:2:1832
-1829:0:2654
-1830:2:1833
-1831:0:2654
-1832:2:1834
-1833:0:2654
-1834:2:1835
-1835:2:1839
-1836:2:1840
-1837:2:1848
-1838:2:1849
-1839:2:1853
-1840:2:1854
-1841:2:1862
-1842:2:1875
-1843:2:1876
-1844:2:1879
-1845:2:1880
-1846:2:1891
-1847:2:1892
-1848:2:1893
-1849:2:1904
-1850:2:1909
-1851:2:1912
-1852:2:1913
-1853:0:2654
-1854:2:1922
-1855:0:2654
-1856:2:2203
-1857:0:2654
-1858:2:2301
-1859:0:2654
-1860:2:2302
-1861:0:2654
-1862:2:2306
-1863:0:2654
-1864:2:2312
-1865:2:2316
-1866:2:2317
-1867:2:2325
-1868:2:2326
-1869:2:2330
-1870:2:2331
-1871:2:2339
-1872:2:2352
-1873:2:2353
-1874:2:2356
-1875:2:2357
-1876:2:2368
-1877:2:2369
-1878:2:2370
-1879:2:2381
-1880:2:2386
-1881:2:2389
-1882:2:2390
-1883:0:2654
-1884:2:2402
-1885:0:2654
-1886:2:2403
-1887:2:2407
-1888:2:2408
-1889:2:2416
-1890:2:2417
-1891:2:2421
-1892:2:2422
-1893:2:2430
-1894:2:2443
-1895:2:2444
-1896:2:2447
-1897:2:2448
-1898:2:2459
-1899:2:2460
-1900:2:2461
-1901:2:2472
-1902:2:2477
-1903:2:2480
-1904:2:2481
-1905:0:2654
-1906:2:2493
-1907:0:2654
-1908:2:2498
-1909:2:2502
-1910:2:2503
-1911:2:2511
-1912:2:2512
-1913:2:2516
-1914:2:2517
-1915:2:2525
-1916:2:2538
-1917:2:2539
-1918:2:2542
-1919:2:2543
-1920:2:2554
-1921:2:2555
-1922:2:2556
-1923:2:2567
-1924:2:2572
-1925:2:2575
-1926:2:2576
-1927:0:2654
-1928:2:2588
-1929:0:2654
-1930:2:2590
-1931:0:2654
-1932:2:2591
-1933:0:2654
-1934:2:2594
-1935:0:2654
-1936:2:2599
-1937:0:2654
-1938:1:2
-1939:0:2654
-1940:2:2600
-1941:0:2654
-1942:1:8
-1943:0:2654
-1944:2:2599
-1945:0:2654
-1946:1:9
-1947:0:2654
-1948:2:2600
-1949:0:2654
-1950:1:10
-1951:0:2654
-1952:2:2599
-1953:0:2654
-1954:1:11
-1955:0:2654
-1956:2:2600
-1957:0:2654
-1958:1:12
-1959:1:16
-1960:1:17
-1961:1:25
-1962:1:26
-1963:1:30
-1964:1:31
-1965:1:39
-1966:1:44
-1967:1:48
-1968:1:49
-1969:1:56
-1970:1:57
-1971:1:68
-1972:1:69
-1973:1:70
-1974:1:81
-1975:1:86
-1976:1:87
-1977:0:2654
-1978:2:2599
-1979:0:2654
-1980:1:99
-1981:0:2654
-1982:2:2600
-1983:0:2654
-1984:1:101
-1985:0:2654
-1986:2:2599
-1987:0:2654
-1988:1:102
-1989:1:106
-1990:1:107
-1991:1:115
-1992:1:116
-1993:1:120
-1994:1:121
-1995:1:129
-1996:1:134
-1997:1:138
-1998:1:139
-1999:1:146
-2000:1:147
-2001:1:158
-2002:1:159
-2003:1:160
-2004:1:171
-2005:1:176
-2006:1:177
-2007:0:2654
-2008:2:2600
-2009:0:2654
-2010:1:189
-2011:0:2654
-2012:2:2599
-2013:0:2654
-2014:1:191
-2015:0:2654
-2016:2:2600
-2017:0:2654
-2018:1:192
-2019:0:2654
-2020:2:2599
-2021:0:2654
-2022:1:193
-2023:1:197
-2024:1:198
-2025:1:206
-2026:1:207
-2027:1:211
-2028:1:212
-2029:1:220
-2030:1:225
-2031:1:229
-2032:1:230
-2033:1:237
-2034:1:238
-2035:1:249
-2036:1:250
-2037:1:251
-2038:1:262
-2039:1:267
-2040:1:268
-2041:0:2654
-2042:2:2600
-2043:0:2654
-2044:1:280
-2045:0:2654
-2046:2:2599
-2047:0:2654
-2048:1:282
-2049:0:2654
-2050:2:2600
-2051:0:2654
-2052:1:291
-2053:0:2654
-2054:2:2599
-2055:0:2654
-2056:1:293
-2057:0:2654
-2058:2:2600
-2059:0:2654
-2060:1:11
-2061:0:2654
-2062:2:2599
-2063:0:2654
-2064:1:12
-2065:1:16
-2066:1:17
-2067:1:25
-2068:1:26
-2069:1:27
-2070:1:39
-2071:1:44
-2072:1:48
-2073:1:49
-2074:1:56
-2075:1:57
-2076:1:68
-2077:1:69
-2078:1:70
-2079:1:81
-2080:1:86
-2081:1:87
-2082:0:2654
-2083:2:2600
-2084:0:2654
-2085:1:99
-2086:0:2654
-2087:2:2599
-2088:0:2654
-2089:1:101
-2090:0:2654
-2091:2:2600
-2092:0:2654
-2093:1:102
-2094:1:106
-2095:1:107
-2096:1:115
-2097:1:116
-2098:1:120
-2099:1:121
-2100:1:129
-2101:1:134
-2102:1:138
-2103:1:139
-2104:1:146
-2105:1:147
-2106:1:158
-2107:1:159
-2108:1:160
-2109:1:171
-2110:1:176
-2111:1:177
-2112:0:2654
-2113:2:2599
-2114:0:2654
-2115:1:189
-2116:0:2654
-2117:2:2600
-2118:0:2654
-2119:1:285
-2120:0:2654
-2121:2:2599
-2122:0:2654
-2123:1:286
-2124:0:2654
-2125:2:2600
-2126:0:2654
-2127:1:291
-2128:0:2654
-2129:2:2599
-2130:0:2654
-2131:1:293
-2132:0:2654
-2133:2:2600
-2134:0:2654
-2135:1:296
-2136:0:2654
-2137:2:2599
-2138:0:2654
-2139:1:301
-2140:0:2654
-2141:2:2600
-2142:0:2654
-2143:1:302
-2144:0:2652
-2145:2:2599
-2146:0:2658
-2147:2:779
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.define b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index b7f3b80..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-Depth=    5439 States=    1e+06 Transitions= 1.03e+07 Memory=   527.190        t=   8.16 R=   1e+05
-pan: claim violated! (at depth 1801)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 5439, errors: 1
-  1006552 states, stored
-  9396280 states, matched
- 10402832 transitions (= stored+matched)
- 36844262 atomic steps
-hash conflicts:   1832712 (resolved)
-
-Stats on memory usage (in Megabytes):
-   80.634      equivalent memory usage for states (stored*(State-vector + overhead))
-   61.871      actual memory usage for states (compression: 76.73%)
-               state-vector as stored = 36 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  527.580      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 243, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 265, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 291, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 304, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 320, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 334, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 352, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 365, "(1)"
-       line 413, "pan.___", state 378, "(1)"
-       line 418, "pan.___", state 395, "(1)"
-       line 399, "pan.___", state 414, "(1)"
-       line 403, "pan.___", state 426, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 444, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 470, "(1)"
-       line 418, "pan.___", state 487, "(1)"
-       line 403, "pan.___", state 519, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 537, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 563, "(1)"
-       line 418, "pan.___", state 580, "(1)"
-       line 179, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 629, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 651, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 677, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 690, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 714, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 716, "(1)"
-       line 399, "pan.___", state 717, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 717, "else"
-       line 399, "pan.___", state 720, "(1)"
-       line 403, "pan.___", state 728, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 730, "(1)"
-       line 403, "pan.___", state 731, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 731, "else"
-       line 403, "pan.___", state 734, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 401, "pan.___", state 740, "((i<1))"
-       line 401, "pan.___", state 740, "((i>=1))"
-       line 408, "pan.___", state 746, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 759, "(1)"
-       line 409, "pan.___", state 760, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 760, "else"
-       line 409, "pan.___", state 763, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 413, "pan.___", state 772, "(1)"
-       line 413, "pan.___", state 773, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 773, "else"
-       line 413, "pan.___", state 776, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 411, "pan.___", state 782, "((i<1))"
-       line 411, "pan.___", state 782, "((i>=1))"
-       line 418, "pan.___", state 789, "(1)"
-       line 418, "pan.___", state 790, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 790, "else"
-       line 418, "pan.___", state 793, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 403, "pan.___", state 828, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 846, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 872, "(1)"
-       line 418, "pan.___", state 889, "(1)"
-       line 403, "pan.___", state 918, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 936, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 979, "(1)"
-       line 399, "pan.___", state 998, "(1)"
-       line 403, "pan.___", state 1010, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1028, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1054, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 403, "pan.___", state 1103, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1121, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1147, "(1)"
-       line 418, "pan.___", state 1164, "(1)"
-       line 179, "pan.___", state 1187, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1200, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 1213, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1235, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1252, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1261, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1300, "(1)"
-       line 399, "pan.___", state 1301, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1301, "else"
-       line 399, "pan.___", state 1304, "(1)"
-       line 403, "pan.___", state 1312, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1314, "(1)"
-       line 403, "pan.___", state 1315, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1315, "else"
-       line 403, "pan.___", state 1318, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 401, "pan.___", state 1324, "((i<1))"
-       line 401, "pan.___", state 1324, "((i>=1))"
-       line 408, "pan.___", state 1330, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1343, "(1)"
-       line 409, "pan.___", state 1344, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1344, "else"
-       line 409, "pan.___", state 1347, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 413, "pan.___", state 1356, "(1)"
-       line 413, "pan.___", state 1357, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1357, "else"
-       line 413, "pan.___", state 1360, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 411, "pan.___", state 1366, "((i<1))"
-       line 411, "pan.___", state 1366, "((i>=1))"
-       line 418, "pan.___", state 1373, "(1)"
-       line 418, "pan.___", state 1374, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1374, "else"
-       line 418, "pan.___", state 1377, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 179, "pan.___", state 1406, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1419, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 1432, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1454, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1471, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1480, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1493, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 702, "pan.___", state 1520, "-end-"
-       (144 of 1520 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 8.24 seconds
-pan: rate 122154.37 states/second
-pan: avg transition delay 7.9209e-07 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 6dea6e1..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_RMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 071a19e..0000000
+++ /dev/null
@@ -1,1804 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1982
-2:3:1934
-3:3:1937
-4:3:1937
-5:3:1940
-6:3:1948
-7:3:1948
-8:3:1951
-9:3:1957
-10:3:1961
-11:3:1961
-12:3:1964
-13:3:1972
-14:3:1976
-15:3:1977
-16:0:1982
-17:3:1979
-18:0:1982
-19:2:416
-20:0:1982
-21:2:422
-22:0:1982
-23:2:423
-24:0:1982
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1982
-45:2:511
-46:0:1982
-47:2:513
-48:2:514
-49:0:1982
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1982
-69:2:605
-70:0:1982
-71:2:607
-72:0:1982
-73:2:608
-74:0:1982
-75:2:618
-76:0:1982
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:0:1982
-86:2:653
-87:0:1982
-88:2:657
-89:2:658
-90:2:662
-91:2:666
-92:2:667
-93:2:671
-94:2:679
-95:2:680
-96:0:1982
-97:2:688
-98:0:1982
-99:2:696
-100:2:697
-101:2:701
-102:2:705
-103:2:706
-104:2:710
-105:2:718
-106:2:719
-107:0:1982
-108:2:727
-109:0:1982
-110:2:729
-111:0:1982
-112:2:730
-113:2:734
-114:2:735
-115:2:743
-116:2:744
-117:2:748
-118:2:749
-119:2:757
-120:2:762
-121:2:766
-122:2:767
-123:2:774
-124:2:775
-125:2:786
-126:2:787
-127:2:788
-128:2:799
-129:2:804
-130:2:805
-131:0:1982
-132:2:817
-133:0:1982
-134:2:819
-135:0:1982
-136:2:822
-137:2:823
-138:2:835
-139:2:836
-140:2:840
-141:2:841
-142:2:849
-143:2:854
-144:2:858
-145:2:859
-146:2:866
-147:2:867
-148:2:878
-149:2:879
-150:2:880
-151:2:891
-152:2:896
-153:2:897
-154:0:1982
-155:2:909
-156:0:1982
-157:2:911
-158:0:1982
-159:2:912
-160:0:1982
-161:2:913
-162:0:1982
-163:2:914
-164:0:1982
-165:2:915
-166:2:919
-167:2:920
-168:2:928
-169:2:929
-170:2:933
-171:2:934
-172:2:942
-173:2:947
-174:2:951
-175:2:952
-176:2:959
-177:2:960
-178:2:971
-179:2:972
-180:2:973
-181:2:984
-182:2:989
-183:2:990
-184:0:1982
-185:2:1002
-186:0:1982
-187:2:1115
-188:0:1982
-189:2:1213
-190:0:1982
-191:2:1214
-192:0:1982
-193:2:1218
-194:0:1982
-195:2:1224
-196:2:1228
-197:2:1229
-198:2:1237
-199:2:1238
-200:2:1242
-201:2:1243
-202:2:1251
-203:2:1256
-204:2:1260
-205:2:1261
-206:2:1268
-207:2:1269
-208:2:1280
-209:2:1281
-210:2:1282
-211:2:1293
-212:2:1298
-213:2:1299
-214:0:1982
-215:2:1311
-216:0:1982
-217:2:1313
-218:0:1982
-219:2:1314
-220:2:1318
-221:2:1319
-222:2:1327
-223:2:1328
-224:2:1332
-225:2:1333
-226:2:1341
-227:2:1346
-228:2:1350
-229:2:1351
-230:2:1358
-231:2:1359
-232:2:1370
-233:2:1371
-234:2:1372
-235:2:1383
-236:2:1388
-237:2:1389
-238:0:1982
-239:2:1401
-240:0:1982
-241:2:1403
-242:0:1982
-243:2:1406
-244:2:1407
-245:2:1419
-246:2:1420
-247:2:1424
-248:2:1425
-249:2:1433
-250:2:1438
-251:2:1442
-252:2:1443
-253:2:1450
-254:2:1451
-255:2:1462
-256:2:1463
-257:2:1464
-258:2:1475
-259:2:1480
-260:2:1481
-261:0:1982
-262:2:1493
-263:0:1982
-264:2:1495
-265:0:1982
-266:2:1496
-267:0:1982
-268:2:1497
-269:0:1982
-270:2:1498
-271:0:1982
-272:2:1499
-273:2:1503
-274:2:1504
-275:2:1512
-276:2:1513
-277:2:1517
-278:2:1518
-279:2:1526
-280:2:1531
-281:2:1535
-282:2:1536
-283:2:1543
-284:2:1544
-285:2:1555
-286:2:1556
-287:2:1557
-288:2:1568
-289:2:1573
-290:2:1574
-291:0:1982
-292:2:1586
-293:0:1982
-294:2:1699
-295:0:1982
-296:2:1797
-297:0:1982
-298:2:1798
-299:0:1982
-300:2:1802
-301:0:1982
-302:2:1811
-303:2:1812
-304:2:1816
-305:2:1820
-306:2:1821
-307:2:1825
-308:2:1833
-309:2:1834
-310:0:1982
-311:2:1842
-312:0:1982
-313:2:1846
-314:2:1847
-315:2:1851
-316:2:1855
-317:2:1856
-318:2:1860
-319:2:1868
-320:2:1869
-321:0:1982
-322:2:1877
-323:0:1982
-324:2:1885
-325:2:1886
-326:2:1890
-327:2:1894
-328:2:1895
-329:2:1899
-330:2:1907
-331:2:1908
-332:0:1982
-333:2:1916
-334:0:1982
-335:2:1918
-336:0:1982
-337:2:1919
-338:0:1982
-339:2:423
-340:0:1982
-341:2:424
-342:2:428
-343:2:429
-344:2:437
-345:2:438
-346:2:442
-347:2:443
-348:2:451
-349:2:456
-350:2:460
-351:2:461
-352:2:468
-353:2:469
-354:2:480
-355:2:481
-356:2:482
-357:2:493
-358:2:498
-359:2:499
-360:0:1982
-361:2:511
-362:0:1982
-363:2:513
-364:2:514
-365:0:1982
-366:2:518
-367:2:522
-368:2:523
-369:2:531
-370:2:532
-371:2:536
-372:2:537
-373:2:545
-374:2:550
-375:2:551
-376:2:562
-377:2:563
-378:2:574
-379:2:575
-380:2:576
-381:2:587
-382:2:592
-383:2:593
-384:0:1982
-385:2:605
-386:0:1982
-387:2:607
-388:0:1982
-389:2:608
-390:0:1982
-391:2:618
-392:0:1982
-393:2:622
-394:2:623
-395:2:627
-396:2:631
-397:2:632
-398:2:636
-399:2:644
-400:2:645
-401:0:1982
-402:2:653
-403:0:1982
-404:2:657
-405:2:658
-406:2:662
-407:2:666
-408:2:667
-409:2:671
-410:2:679
-411:2:680
-412:0:1982
-413:2:688
-414:0:1982
-415:2:696
-416:2:697
-417:2:701
-418:2:705
-419:2:706
-420:2:710
-421:2:718
-422:2:719
-423:0:1982
-424:2:727
-425:0:1982
-426:2:729
-427:0:1982
-428:2:730
-429:2:734
-430:2:735
-431:2:743
-432:2:744
-433:2:748
-434:2:749
-435:2:757
-436:2:762
-437:2:766
-438:2:767
-439:2:774
-440:2:775
-441:2:786
-442:2:787
-443:2:788
-444:2:799
-445:2:804
-446:2:805
-447:0:1982
-448:2:817
-449:0:1982
-450:2:819
-451:0:1982
-452:2:822
-453:2:823
-454:2:835
-455:2:836
-456:2:840
-457:2:841
-458:2:849
-459:2:854
-460:2:858
-461:2:859
-462:2:866
-463:2:867
-464:2:878
-465:2:879
-466:2:880
-467:2:891
-468:2:896
-469:2:897
-470:0:1982
-471:2:909
-472:0:1982
-473:2:911
-474:0:1982
-475:2:912
-476:0:1982
-477:2:913
-478:0:1982
-479:2:914
-480:0:1982
-481:2:915
-482:2:919
-483:2:920
-484:2:928
-485:2:929
-486:2:933
-487:2:934
-488:2:942
-489:2:947
-490:2:951
-491:2:952
-492:2:959
-493:2:960
-494:2:971
-495:2:972
-496:2:973
-497:2:984
-498:2:989
-499:2:990
-500:0:1982
-501:2:1002
-502:0:1982
-503:2:1115
-504:0:1982
-505:2:1213
-506:0:1982
-507:2:1214
-508:0:1982
-509:2:1218
-510:0:1982
-511:2:1224
-512:2:1228
-513:2:1229
-514:2:1237
-515:2:1238
-516:2:1242
-517:2:1243
-518:2:1251
-519:2:1256
-520:2:1260
-521:2:1261
-522:2:1268
-523:2:1269
-524:2:1280
-525:2:1281
-526:2:1282
-527:2:1293
-528:2:1298
-529:2:1299
-530:0:1982
-531:2:1311
-532:0:1982
-533:2:1313
-534:0:1982
-535:2:1314
-536:2:1318
-537:2:1319
-538:2:1327
-539:2:1328
-540:2:1332
-541:2:1333
-542:2:1341
-543:2:1346
-544:2:1350
-545:2:1351
-546:2:1358
-547:2:1359
-548:2:1370
-549:2:1371
-550:2:1372
-551:2:1383
-552:2:1388
-553:2:1389
-554:0:1982
-555:2:1401
-556:0:1982
-557:2:1403
-558:0:1982
-559:2:1406
-560:2:1407
-561:2:1419
-562:2:1420
-563:2:1424
-564:2:1425
-565:2:1433
-566:2:1438
-567:2:1442
-568:2:1443
-569:2:1450
-570:2:1451
-571:2:1462
-572:2:1463
-573:2:1464
-574:2:1475
-575:2:1480
-576:2:1481
-577:0:1982
-578:2:1493
-579:0:1982
-580:2:1495
-581:0:1982
-582:2:1496
-583:0:1982
-584:2:1497
-585:0:1982
-586:2:1498
-587:0:1982
-588:2:1499
-589:2:1503
-590:2:1504
-591:2:1512
-592:2:1513
-593:2:1517
-594:2:1518
-595:2:1526
-596:2:1531
-597:2:1535
-598:2:1536
-599:2:1543
-600:2:1544
-601:2:1555
-602:2:1556
-603:2:1557
-604:2:1568
-605:2:1573
-606:2:1574
-607:0:1982
-608:2:1586
-609:0:1982
-610:2:1699
-611:0:1982
-612:2:1797
-613:0:1982
-614:2:1798
-615:0:1982
-616:2:1802
-617:0:1982
-618:2:1811
-619:2:1812
-620:2:1816
-621:2:1820
-622:2:1821
-623:2:1825
-624:2:1833
-625:2:1834
-626:0:1982
-627:2:1842
-628:0:1982
-629:2:1846
-630:2:1847
-631:2:1851
-632:2:1855
-633:2:1856
-634:2:1860
-635:2:1868
-636:2:1869
-637:0:1982
-638:2:1877
-639:0:1982
-640:2:1885
-641:2:1886
-642:2:1890
-643:2:1894
-644:2:1895
-645:2:1899
-646:2:1907
-647:2:1908
-648:0:1982
-649:2:1916
-650:0:1982
-651:2:1918
-652:0:1982
-653:2:1919
-654:0:1982
-655:2:423
-656:0:1982
-657:2:424
-658:2:428
-659:2:429
-660:2:437
-661:2:438
-662:2:442
-663:2:443
-664:2:451
-665:2:456
-666:2:460
-667:2:461
-668:2:468
-669:2:469
-670:2:480
-671:2:481
-672:2:482
-673:2:493
-674:2:498
-675:2:499
-676:0:1982
-677:2:511
-678:0:1982
-679:2:513
-680:2:514
-681:0:1982
-682:2:518
-683:2:522
-684:2:523
-685:2:531
-686:2:532
-687:2:536
-688:2:537
-689:2:545
-690:2:550
-691:2:551
-692:2:562
-693:2:563
-694:2:574
-695:2:575
-696:2:576
-697:2:587
-698:2:592
-699:2:593
-700:0:1982
-701:2:605
-702:0:1982
-703:2:607
-704:0:1982
-705:2:608
-706:0:1982
-707:2:618
-708:0:1982
-709:2:622
-710:2:623
-711:2:627
-712:2:631
-713:2:632
-714:2:636
-715:2:644
-716:2:645
-717:0:1982
-718:2:653
-719:0:1982
-720:2:657
-721:2:658
-722:2:662
-723:2:666
-724:2:667
-725:2:671
-726:2:679
-727:2:680
-728:0:1982
-729:2:688
-730:0:1982
-731:2:696
-732:2:697
-733:2:701
-734:2:705
-735:2:706
-736:2:710
-737:2:718
-738:2:719
-739:0:1982
-740:2:727
-741:0:1982
-742:2:729
-743:0:1982
-744:2:730
-745:2:734
-746:2:735
-747:2:743
-748:2:744
-749:2:748
-750:2:749
-751:2:757
-752:2:762
-753:2:766
-754:2:767
-755:2:774
-756:2:775
-757:2:786
-758:2:787
-759:2:788
-760:2:799
-761:2:804
-762:2:805
-763:0:1982
-764:2:817
-765:0:1982
-766:2:819
-767:0:1982
-768:2:822
-769:2:823
-770:2:835
-771:2:836
-772:2:840
-773:2:841
-774:2:849
-775:2:854
-776:2:858
-777:2:859
-778:2:866
-779:2:867
-780:2:878
-781:2:879
-782:2:880
-783:2:891
-784:2:896
-785:2:897
-786:0:1982
-787:2:909
-788:0:1982
-789:2:911
-790:0:1982
-791:2:912
-792:0:1982
-793:2:913
-794:0:1982
-795:2:914
-796:0:1982
-797:2:915
-798:2:919
-799:2:920
-800:2:928
-801:2:929
-802:2:933
-803:2:934
-804:2:942
-805:2:947
-806:2:951
-807:2:952
-808:2:959
-809:2:960
-810:2:971
-811:2:972
-812:2:973
-813:2:984
-814:2:989
-815:2:990
-816:0:1982
-817:2:1002
-818:0:1982
-819:2:1115
-820:0:1982
-821:2:1213
-822:0:1982
-823:2:1214
-824:0:1982
-825:2:1218
-826:0:1982
-827:2:1224
-828:2:1228
-829:2:1229
-830:2:1237
-831:2:1238
-832:2:1242
-833:2:1243
-834:2:1251
-835:2:1256
-836:2:1260
-837:2:1261
-838:2:1268
-839:2:1269
-840:2:1280
-841:2:1281
-842:2:1282
-843:2:1293
-844:2:1298
-845:2:1299
-846:0:1982
-847:2:1311
-848:0:1982
-849:2:1313
-850:0:1982
-851:2:1314
-852:2:1318
-853:2:1319
-854:2:1327
-855:2:1328
-856:2:1332
-857:2:1333
-858:2:1341
-859:2:1346
-860:2:1350
-861:2:1351
-862:2:1358
-863:2:1359
-864:2:1370
-865:2:1371
-866:2:1372
-867:2:1383
-868:2:1388
-869:2:1389
-870:0:1982
-871:2:1401
-872:0:1982
-873:2:1403
-874:0:1982
-875:2:1406
-876:2:1407
-877:2:1419
-878:2:1420
-879:2:1424
-880:2:1425
-881:2:1433
-882:2:1438
-883:2:1442
-884:2:1443
-885:2:1450
-886:2:1451
-887:2:1462
-888:2:1463
-889:2:1464
-890:2:1475
-891:2:1480
-892:2:1481
-893:0:1982
-894:2:1493
-895:0:1982
-896:2:1495
-897:0:1982
-898:2:1496
-899:0:1982
-900:2:1497
-901:0:1982
-902:2:1498
-903:0:1982
-904:2:1499
-905:2:1503
-906:2:1504
-907:2:1512
-908:2:1513
-909:2:1517
-910:2:1518
-911:2:1526
-912:2:1531
-913:2:1535
-914:2:1536
-915:2:1543
-916:2:1544
-917:2:1555
-918:2:1556
-919:2:1557
-920:2:1568
-921:2:1573
-922:2:1574
-923:0:1982
-924:2:1586
-925:0:1982
-926:2:1699
-927:0:1982
-928:2:1797
-929:0:1982
-930:2:1798
-931:0:1982
-932:2:1802
-933:0:1982
-934:2:1811
-935:2:1812
-936:2:1816
-937:2:1820
-938:2:1821
-939:2:1825
-940:2:1833
-941:2:1834
-942:0:1982
-943:2:1842
-944:0:1982
-945:2:1846
-946:2:1847
-947:2:1851
-948:2:1855
-949:2:1856
-950:2:1860
-951:2:1868
-952:2:1869
-953:0:1982
-954:2:1877
-955:0:1982
-956:2:1885
-957:2:1886
-958:2:1890
-959:2:1894
-960:2:1895
-961:2:1899
-962:2:1907
-963:2:1908
-964:0:1982
-965:2:1916
-966:0:1982
-967:2:1918
-968:0:1982
-969:2:1919
-970:0:1982
-971:2:423
-972:0:1982
-973:2:424
-974:2:428
-975:2:429
-976:2:437
-977:2:438
-978:2:442
-979:2:443
-980:2:451
-981:2:456
-982:2:460
-983:2:461
-984:2:468
-985:2:469
-986:2:480
-987:2:481
-988:2:482
-989:2:493
-990:2:498
-991:2:499
-992:0:1982
-993:2:511
-994:0:1982
-995:2:513
-996:2:514
-997:0:1982
-998:2:518
-999:2:522
-1000:2:523
-1001:2:531
-1002:2:532
-1003:2:536
-1004:2:537
-1005:2:545
-1006:2:550
-1007:2:551
-1008:2:562
-1009:2:563
-1010:2:574
-1011:2:575
-1012:2:576
-1013:2:587
-1014:2:592
-1015:2:593
-1016:0:1982
-1017:2:605
-1018:0:1982
-1019:2:607
-1020:0:1982
-1021:2:608
-1022:0:1982
-1023:2:618
-1024:0:1982
-1025:2:622
-1026:2:623
-1027:2:627
-1028:2:631
-1029:2:632
-1030:2:636
-1031:2:644
-1032:2:645
-1033:0:1982
-1034:2:653
-1035:0:1982
-1036:2:657
-1037:2:658
-1038:2:662
-1039:2:666
-1040:2:667
-1041:2:671
-1042:2:679
-1043:2:680
-1044:0:1982
-1045:2:688
-1046:0:1982
-1047:2:696
-1048:2:697
-1049:2:701
-1050:2:705
-1051:2:706
-1052:2:710
-1053:2:718
-1054:2:719
-1055:0:1982
-1056:2:727
-1057:0:1982
-1058:2:729
-1059:0:1982
-1060:2:730
-1061:2:734
-1062:2:735
-1063:2:743
-1064:2:744
-1065:2:748
-1066:2:749
-1067:2:757
-1068:2:762
-1069:2:766
-1070:2:767
-1071:2:774
-1072:2:775
-1073:2:786
-1074:2:787
-1075:2:788
-1076:2:799
-1077:2:804
-1078:2:805
-1079:0:1982
-1080:2:817
-1081:0:1982
-1082:2:819
-1083:0:1982
-1084:2:822
-1085:2:823
-1086:2:835
-1087:2:836
-1088:2:840
-1089:2:841
-1090:2:849
-1091:2:854
-1092:2:858
-1093:2:859
-1094:2:866
-1095:2:867
-1096:2:878
-1097:2:879
-1098:2:880
-1099:2:891
-1100:2:896
-1101:2:897
-1102:0:1982
-1103:2:909
-1104:0:1982
-1105:2:911
-1106:0:1982
-1107:2:912
-1108:0:1982
-1109:2:913
-1110:0:1982
-1111:2:914
-1112:0:1982
-1113:2:915
-1114:2:919
-1115:2:920
-1116:2:928
-1117:2:929
-1118:2:933
-1119:2:934
-1120:2:942
-1121:2:947
-1122:2:951
-1123:2:952
-1124:2:959
-1125:2:960
-1126:2:971
-1127:2:972
-1128:2:973
-1129:2:984
-1130:2:989
-1131:2:990
-1132:0:1982
-1133:2:1002
-1134:0:1982
-1135:2:1115
-1136:0:1982
-1137:2:1213
-1138:0:1982
-1139:2:1214
-1140:0:1982
-1141:2:1218
-1142:0:1982
-1143:2:1224
-1144:2:1228
-1145:2:1229
-1146:2:1237
-1147:2:1238
-1148:2:1242
-1149:2:1243
-1150:2:1251
-1151:2:1256
-1152:2:1260
-1153:2:1261
-1154:2:1268
-1155:2:1269
-1156:2:1280
-1157:2:1281
-1158:2:1282
-1159:2:1293
-1160:2:1298
-1161:2:1299
-1162:0:1982
-1163:2:1311
-1164:0:1982
-1165:2:1313
-1166:0:1982
-1167:2:1314
-1168:2:1318
-1169:2:1319
-1170:2:1327
-1171:2:1328
-1172:2:1332
-1173:2:1333
-1174:2:1341
-1175:2:1346
-1176:2:1350
-1177:2:1351
-1178:2:1358
-1179:2:1359
-1180:2:1370
-1181:2:1371
-1182:2:1372
-1183:2:1383
-1184:2:1388
-1185:2:1389
-1186:0:1982
-1187:2:1401
-1188:0:1982
-1189:2:1403
-1190:0:1982
-1191:2:1406
-1192:2:1407
-1193:2:1419
-1194:2:1420
-1195:2:1424
-1196:2:1425
-1197:2:1433
-1198:2:1438
-1199:2:1442
-1200:2:1443
-1201:2:1450
-1202:2:1451
-1203:2:1462
-1204:2:1463
-1205:2:1464
-1206:2:1475
-1207:2:1480
-1208:2:1481
-1209:0:1982
-1210:2:1493
-1211:0:1982
-1212:2:1495
-1213:0:1982
-1214:2:1496
-1215:0:1982
-1216:2:1497
-1217:0:1982
-1218:2:1498
-1219:0:1982
-1220:2:1499
-1221:2:1503
-1222:2:1504
-1223:2:1512
-1224:2:1513
-1225:2:1517
-1226:2:1518
-1227:2:1526
-1228:2:1531
-1229:2:1535
-1230:2:1536
-1231:2:1543
-1232:2:1544
-1233:2:1555
-1234:2:1556
-1235:2:1557
-1236:2:1568
-1237:2:1573
-1238:2:1574
-1239:0:1982
-1240:2:1586
-1241:0:1982
-1242:2:1699
-1243:0:1982
-1244:2:1797
-1245:0:1982
-1246:2:1798
-1247:0:1982
-1248:2:1802
-1249:0:1982
-1250:2:1811
-1251:2:1812
-1252:2:1816
-1253:2:1820
-1254:2:1821
-1255:2:1825
-1256:2:1833
-1257:2:1834
-1258:0:1982
-1259:2:1842
-1260:0:1982
-1261:2:1846
-1262:2:1847
-1263:2:1851
-1264:2:1855
-1265:2:1856
-1266:2:1860
-1267:2:1868
-1268:2:1869
-1269:0:1982
-1270:2:1877
-1271:0:1982
-1272:2:1885
-1273:2:1886
-1274:2:1890
-1275:2:1894
-1276:2:1895
-1277:2:1899
-1278:2:1907
-1279:2:1908
-1280:0:1982
-1281:2:1916
-1282:0:1982
-1283:2:1918
-1284:0:1982
-1285:2:1919
-1286:0:1982
-1287:2:423
-1288:0:1982
-1289:2:424
-1290:2:428
-1291:2:429
-1292:2:437
-1293:2:438
-1294:2:442
-1295:2:443
-1296:2:451
-1297:2:456
-1298:2:460
-1299:2:461
-1300:2:468
-1301:2:469
-1302:2:480
-1303:2:481
-1304:2:482
-1305:2:493
-1306:2:498
-1307:2:499
-1308:0:1982
-1309:2:511
-1310:0:1982
-1311:2:513
-1312:2:514
-1313:0:1982
-1314:2:518
-1315:2:522
-1316:2:523
-1317:2:531
-1318:2:532
-1319:2:536
-1320:2:537
-1321:2:545
-1322:2:558
-1323:2:559
-1324:2:562
-1325:2:563
-1326:2:574
-1327:2:575
-1328:2:576
-1329:2:587
-1330:2:592
-1331:2:595
-1332:2:596
-1333:0:1982
-1334:2:605
-1335:0:1982
-1336:2:607
-1337:0:1982
-1338:2:608
-1339:0:1982
-1340:2:618
-1341:0:1982
-1342:1:2
-1343:0:1982
-1344:1:8
-1345:0:1982
-1346:1:9
-1347:0:1982
-1348:1:10
-1349:0:1982
-1350:1:11
-1351:0:1982
-1352:1:12
-1353:1:16
-1354:1:17
-1355:1:25
-1356:1:26
-1357:1:30
-1358:1:31
-1359:1:39
-1360:1:44
-1361:1:48
-1362:1:49
-1363:1:56
-1364:1:57
-1365:1:68
-1366:1:69
-1367:1:70
-1368:1:81
-1369:1:86
-1370:1:87
-1371:0:1982
-1372:1:99
-1373:0:1982
-1374:2:622
-1375:2:623
-1376:2:627
-1377:2:631
-1378:2:632
-1379:2:636
-1380:2:641
-1381:0:1982
-1382:2:653
-1383:0:1982
-1384:2:657
-1385:2:658
-1386:2:662
-1387:2:666
-1388:2:667
-1389:2:671
-1390:2:679
-1391:2:680
-1392:0:1982
-1393:2:688
-1394:0:1982
-1395:2:696
-1396:2:697
-1397:2:701
-1398:2:705
-1399:2:706
-1400:2:710
-1401:2:718
-1402:2:719
-1403:0:1982
-1404:2:727
-1405:0:1982
-1406:2:729
-1407:0:1982
-1408:2:730
-1409:2:734
-1410:2:735
-1411:2:743
-1412:2:744
-1413:2:748
-1414:2:749
-1415:2:757
-1416:2:762
-1417:2:766
-1418:2:767
-1419:2:774
-1420:2:775
-1421:2:786
-1422:2:787
-1423:2:788
-1424:2:799
-1425:2:804
-1426:2:805
-1427:0:1982
-1428:2:817
-1429:0:1982
-1430:2:819
-1431:0:1982
-1432:2:822
-1433:2:823
-1434:2:835
-1435:2:836
-1436:2:840
-1437:2:841
-1438:2:849
-1439:2:854
-1440:2:858
-1441:2:859
-1442:2:866
-1443:2:867
-1444:2:878
-1445:2:879
-1446:2:880
-1447:2:891
-1448:2:896
-1449:2:897
-1450:0:1982
-1451:2:909
-1452:0:1982
-1453:2:911
-1454:0:1982
-1455:2:912
-1456:0:1982
-1457:2:913
-1458:0:1982
-1459:2:914
-1460:0:1982
-1461:2:915
-1462:2:919
-1463:2:920
-1464:2:928
-1465:2:929
-1466:2:933
-1467:2:934
-1468:2:942
-1469:2:947
-1470:2:951
-1471:2:952
-1472:2:959
-1473:2:960
-1474:2:971
-1475:2:972
-1476:2:973
-1477:2:984
-1478:2:989
-1479:2:990
-1480:0:1982
-1481:2:1002
-1482:0:1982
-1483:2:1115
-1484:0:1982
-1485:2:1213
-1486:0:1982
-1487:2:1214
-1488:0:1982
-1489:2:1218
-1490:0:1982
-1491:2:1224
-1492:2:1228
-1493:2:1229
-1494:2:1237
-1495:2:1238
-1496:2:1242
-1497:2:1243
-1498:2:1251
-1499:2:1256
-1500:2:1260
-1501:2:1261
-1502:2:1268
-1503:2:1269
-1504:2:1280
-1505:2:1281
-1506:2:1282
-1507:2:1293
-1508:2:1298
-1509:2:1299
-1510:0:1982
-1511:2:1311
-1512:0:1982
-1513:2:1313
-1514:0:1982
-1515:2:1314
-1516:2:1318
-1517:2:1319
-1518:2:1327
-1519:2:1328
-1520:2:1332
-1521:2:1333
-1522:2:1341
-1523:2:1346
-1524:2:1350
-1525:2:1351
-1526:2:1358
-1527:2:1359
-1528:2:1370
-1529:2:1371
-1530:2:1372
-1531:2:1383
-1532:2:1388
-1533:2:1389
-1534:0:1982
-1535:2:1401
-1536:0:1982
-1537:2:1403
-1538:0:1982
-1539:2:1406
-1540:2:1407
-1541:2:1419
-1542:2:1420
-1543:2:1424
-1544:2:1425
-1545:2:1433
-1546:2:1438
-1547:2:1442
-1548:2:1443
-1549:2:1450
-1550:2:1451
-1551:2:1462
-1552:2:1463
-1553:2:1464
-1554:2:1475
-1555:2:1480
-1556:2:1481
-1557:0:1982
-1558:2:1493
-1559:0:1982
-1560:2:1495
-1561:0:1982
-1562:2:1496
-1563:0:1982
-1564:2:1497
-1565:0:1982
-1566:2:1498
-1567:0:1982
-1568:2:1499
-1569:2:1503
-1570:2:1504
-1571:2:1512
-1572:2:1513
-1573:2:1517
-1574:2:1518
-1575:2:1526
-1576:2:1531
-1577:2:1535
-1578:2:1536
-1579:2:1543
-1580:2:1544
-1581:2:1555
-1582:2:1556
-1583:2:1557
-1584:2:1568
-1585:2:1573
-1586:2:1574
-1587:0:1982
-1588:2:1586
-1589:0:1982
-1590:2:1699
-1591:0:1982
-1592:2:1797
-1593:0:1982
-1594:2:1798
-1595:0:1982
-1596:2:1802
-1597:0:1982
-1598:2:1811
-1599:2:1812
-1600:2:1816
-1601:2:1820
-1602:2:1821
-1603:2:1825
-1604:2:1833
-1605:2:1834
-1606:0:1982
-1607:2:1842
-1608:0:1982
-1609:2:1846
-1610:2:1847
-1611:2:1851
-1612:2:1855
-1613:2:1856
-1614:2:1860
-1615:2:1868
-1616:2:1869
-1617:0:1982
-1618:2:1877
-1619:0:1982
-1620:2:1885
-1621:2:1886
-1622:2:1890
-1623:2:1894
-1624:2:1895
-1625:2:1899
-1626:2:1907
-1627:2:1908
-1628:0:1982
-1629:2:1916
-1630:0:1982
-1631:2:1918
-1632:0:1982
-1633:2:1919
-1634:0:1982
-1635:2:1922
-1636:0:1982
-1637:2:1927
-1638:0:1982
-1639:1:101
-1640:0:1982
-1641:2:1928
-1642:0:1982
-1643:1:102
-1644:1:106
-1645:1:107
-1646:1:115
-1647:1:116
-1648:1:120
-1649:1:121
-1650:1:129
-1651:1:134
-1652:1:138
-1653:1:139
-1654:1:146
-1655:1:147
-1656:1:158
-1657:1:159
-1658:1:160
-1659:1:171
-1660:1:183
-1661:1:184
-1662:0:1982
-1663:2:1927
-1664:0:1982
-1665:1:189
-1666:0:1982
-1667:2:1928
-1668:0:1982
-1669:1:191
-1670:0:1982
-1671:2:1927
-1672:0:1982
-1673:1:192
-1674:0:1982
-1675:2:1928
-1676:0:1982
-1677:1:193
-1678:1:197
-1679:1:198
-1680:1:206
-1681:1:207
-1682:1:211
-1683:1:212
-1684:1:220
-1685:1:225
-1686:1:229
-1687:1:230
-1688:1:237
-1689:1:238
-1690:1:249
-1691:1:250
-1692:1:251
-1693:1:262
-1694:1:274
-1695:1:275
-1696:0:1982
-1697:2:1927
-1698:0:1982
-1699:1:280
-1700:0:1982
-1701:2:1928
-1702:0:1982
-1703:1:282
-1704:0:1982
-1705:2:1927
-1706:0:1982
-1707:1:291
-1708:0:1982
-1709:2:1928
-1710:0:1982
-1711:1:293
-1712:0:1982
-1713:2:1927
-1714:0:1982
-1715:1:11
-1716:0:1982
-1717:2:1928
-1718:0:1982
-1719:1:12
-1720:1:16
-1721:1:17
-1722:1:25
-1723:1:26
-1724:1:27
-1725:1:39
-1726:1:44
-1727:1:48
-1728:1:49
-1729:1:56
-1730:1:57
-1731:1:68
-1732:1:69
-1733:1:70
-1734:1:81
-1735:1:93
-1736:1:94
-1737:0:1982
-1738:2:1927
-1739:0:1982
-1740:1:99
-1741:0:1982
-1742:2:1928
-1743:0:1982
-1744:1:101
-1745:0:1982
-1746:2:1927
-1747:0:1982
-1748:1:102
-1749:1:106
-1750:1:107
-1751:1:115
-1752:1:116
-1753:1:120
-1754:1:121
-1755:1:129
-1756:1:134
-1757:1:138
-1758:1:139
-1759:1:146
-1760:1:147
-1761:1:158
-1762:1:159
-1763:1:160
-1764:1:171
-1765:1:183
-1766:1:184
-1767:0:1982
-1768:2:1928
-1769:0:1982
-1770:1:189
-1771:0:1982
-1772:2:1927
-1773:0:1982
-1774:1:285
-1775:0:1982
-1776:2:1928
-1777:0:1982
-1778:1:286
-1779:0:1982
-1780:2:1927
-1781:0:1982
-1782:1:291
-1783:0:1982
-1784:2:1928
-1785:0:1982
-1786:1:293
-1787:0:1982
-1788:2:1927
-1789:0:1982
-1790:1:296
-1791:0:1982
-1792:2:1928
-1793:0:1982
-1794:1:301
-1795:0:1982
-1796:2:1927
-1797:0:1982
-1798:1:302
-1799:0:1980
-1800:2:1928
-1801:0:1986
-1802:1:124
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.define b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 4dd3892..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-pan: claim violated! (at depth 1882)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 4174, errors: 1
-   367189 states, stored
-  3431533 states, matched
-  3798722 transitions (= stored+matched)
- 13407384 atomic steps
-hash conflicts:    253700 (resolved)
-
-Stats on memory usage (in Megabytes):
-   29.415      equivalent memory usage for states (stored*(State-vector + overhead))
-   22.811      actual memory usage for states (compression: 77.55%)
-               state-vector as stored = 37 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  488.518      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 331, "(1)"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (18 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 401, "pan.___", state 134, "((i<1))"
-       line 401, "pan.___", state 134, "((i>=1))"
-       line 409, "pan.___", state 153, "(1)"
-       line 409, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 154, "else"
-       line 409, "pan.___", state 157, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 413, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 167, "else"
-       line 413, "pan.___", state 170, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 411, "pan.___", state 176, "((i<1))"
-       line 411, "pan.___", state 176, "((i>=1))"
-       line 418, "pan.___", state 183, "(1)"
-       line 418, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 184, "else"
-       line 418, "pan.___", state 187, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 369, "pan.___", state 193, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 646, "pan.___", state 202, "((write_lock==0))"
-       line 646, "pan.___", state 202, "else"
-       line 644, "pan.___", state 203, "(1)"
-       line 160, "pan.___", state 209, "(1)"
-       line 164, "pan.___", state 217, "(1)"
-       line 164, "pan.___", state 218, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 164, "pan.___", state 218, "else"
-       line 162, "pan.___", state 223, "((j<1))"
-       line 162, "pan.___", state 223, "((j>=1))"
-       line 168, "pan.___", state 229, "(1)"
-       line 168, "pan.___", state 230, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 168, "pan.___", state 230, "else"
-       line 160, "pan.___", state 241, "(1)"
-       line 168, "pan.___", state 261, "(1)"
-       line 160, "pan.___", state 277, "(1)"
-       line 164, "pan.___", state 285, "(1)"
-       line 168, "pan.___", state 297, "(1)"
-       line 399, "pan.___", state 311, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 325, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 343, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 356, "(1)"
-       line 413, "pan.___", state 369, "(1)"
-       line 418, "pan.___", state 386, "(1)"
-       line 399, "pan.___", state 405, "(1)"
-       line 403, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 461, "(1)"
-       line 418, "pan.___", state 478, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 164, "pan.___", state 594, "(1)"
-       line 168, "pan.___", state 606, "(1)"
-       line 160, "pan.___", state 618, "(1)"
-       line 168, "pan.___", state 638, "(1)"
-       line 164, "pan.___", state 662, "(1)"
-       line 168, "pan.___", state 674, "(1)"
-       line 399, "pan.___", state 696, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 698, "(1)"
-       line 399, "pan.___", state 699, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 699, "else"
-       line 399, "pan.___", state 702, "(1)"
-       line 403, "pan.___", state 710, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 712, "(1)"
-       line 403, "pan.___", state 713, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 713, "else"
-       line 403, "pan.___", state 716, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 401, "pan.___", state 722, "((i<1))"
-       line 401, "pan.___", state 722, "((i>=1))"
-       line 408, "pan.___", state 728, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 741, "(1)"
-       line 409, "pan.___", state 742, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 742, "else"
-       line 409, "pan.___", state 745, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 413, "pan.___", state 754, "(1)"
-       line 413, "pan.___", state 755, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 755, "else"
-       line 413, "pan.___", state 758, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 411, "pan.___", state 764, "((i<1))"
-       line 411, "pan.___", state 764, "((i>=1))"
-       line 418, "pan.___", state 771, "(1)"
-       line 418, "pan.___", state 772, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 772, "else"
-       line 418, "pan.___", state 775, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 403, "pan.___", state 810, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 828, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 854, "(1)"
-       line 418, "pan.___", state 871, "(1)"
-       line 403, "pan.___", state 900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 918, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 944, "(1)"
-       line 418, "pan.___", state 961, "(1)"
-       line 399, "pan.___", state 980, "(1)"
-       line 403, "pan.___", state 992, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1010, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1036, "(1)"
-       line 418, "pan.___", state 1053, "(1)"
-       line 403, "pan.___", state 1085, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1103, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1129, "(1)"
-       line 418, "pan.___", state 1146, "(1)"
-       line 164, "pan.___", state 1169, "(1)"
-       line 168, "pan.___", state 1181, "(1)"
-       line 160, "pan.___", state 1193, "(1)"
-       line 168, "pan.___", state 1213, "(1)"
-       line 164, "pan.___", state 1237, "(1)"
-       line 168, "pan.___", state 1249, "(1)"
-       line 399, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1273, "(1)"
-       line 399, "pan.___", state 1274, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1274, "else"
-       line 399, "pan.___", state 1277, "(1)"
-       line 403, "pan.___", state 1285, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1287, "(1)"
-       line 403, "pan.___", state 1288, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1288, "else"
-       line 403, "pan.___", state 1291, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 401, "pan.___", state 1297, "((i<1))"
-       line 401, "pan.___", state 1297, "((i>=1))"
-       line 408, "pan.___", state 1303, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1316, "(1)"
-       line 409, "pan.___", state 1317, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1317, "else"
-       line 409, "pan.___", state 1320, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 413, "pan.___", state 1329, "(1)"
-       line 413, "pan.___", state 1330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1330, "else"
-       line 413, "pan.___", state 1333, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 411, "pan.___", state 1339, "((i<1))"
-       line 411, "pan.___", state 1339, "((i>=1))"
-       line 418, "pan.___", state 1346, "(1)"
-       line 418, "pan.___", state 1347, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1347, "else"
-       line 418, "pan.___", state 1350, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 164, "pan.___", state 1379, "(1)"
-       line 168, "pan.___", state 1391, "(1)"
-       line 160, "pan.___", state 1403, "(1)"
-       line 168, "pan.___", state 1423, "(1)"
-       line 164, "pan.___", state 1447, "(1)"
-       line 168, "pan.___", state 1459, "(1)"
-       line 702, "pan.___", state 1484, "-end-"
-       (160 of 1484 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 2.96 seconds
-pan: rate 124050.34 states/second
-pan: avg transition delay 7.7921e-07 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index f4d8acb..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index f73a838..0000000
+++ /dev/null
@@ -1,1885 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1946
-2:3:1898
-3:3:1901
-4:3:1901
-5:3:1904
-6:3:1912
-7:3:1912
-8:3:1915
-9:3:1921
-10:3:1925
-11:3:1925
-12:3:1928
-13:3:1936
-14:3:1940
-15:3:1941
-16:0:1946
-17:3:1943
-18:0:1946
-19:2:416
-20:0:1946
-21:2:422
-22:0:1946
-23:2:423
-24:0:1946
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1946
-45:2:511
-46:0:1946
-47:2:513
-48:2:514
-49:0:1946
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1946
-69:2:605
-70:0:1946
-71:2:607
-72:0:1946
-73:2:608
-74:0:1946
-75:2:618
-76:0:1946
-77:2:619
-78:2:626
-79:2:627
-80:2:634
-81:2:639
-82:0:1946
-83:2:650
-84:0:1946
-85:2:651
-86:2:658
-87:2:659
-88:2:666
-89:2:671
-90:0:1946
-91:2:682
-92:0:1946
-93:2:687
-94:2:694
-95:2:695
-96:2:702
-97:2:707
-98:0:1946
-99:2:718
-100:0:1946
-101:2:720
-102:0:1946
-103:2:721
-104:2:725
-105:2:726
-106:2:734
-107:2:735
-108:2:739
-109:2:740
-110:2:748
-111:2:753
-112:2:757
-113:2:758
-114:2:765
-115:2:766
-116:2:777
-117:2:778
-118:2:779
-119:2:790
-120:2:795
-121:2:796
-122:0:1946
-123:2:808
-124:0:1946
-125:2:810
-126:0:1946
-127:2:813
-128:2:814
-129:2:826
-130:2:827
-131:2:831
-132:2:832
-133:2:840
-134:2:845
-135:2:849
-136:2:850
-137:2:857
-138:2:858
-139:2:869
-140:2:870
-141:2:871
-142:2:882
-143:2:887
-144:2:888
-145:0:1946
-146:2:900
-147:0:1946
-148:2:902
-149:0:1946
-150:2:903
-151:0:1946
-152:2:904
-153:0:1946
-154:2:905
-155:0:1946
-156:2:906
-157:2:910
-158:2:911
-159:2:919
-160:2:920
-161:2:924
-162:2:925
-163:2:933
-164:2:938
-165:2:942
-166:2:943
-167:2:950
-168:2:951
-169:2:962
-170:2:963
-171:2:964
-172:2:975
-173:2:980
-174:2:981
-175:0:1946
-176:2:993
-177:0:1946
-178:2:1097
-179:0:1946
-180:2:1195
-181:0:1946
-182:2:1196
-183:0:1946
-184:2:1200
-185:0:1946
-186:2:1206
-187:2:1210
-188:2:1211
-189:2:1219
-190:2:1220
-191:2:1224
-192:2:1225
-193:2:1233
-194:2:1238
-195:2:1242
-196:2:1243
-197:2:1250
-198:2:1251
-199:2:1262
-200:2:1263
-201:2:1264
-202:2:1275
-203:2:1280
-204:2:1281
-205:0:1946
-206:2:1293
-207:0:1946
-208:2:1295
-209:0:1946
-210:2:1296
-211:2:1300
-212:2:1301
-213:2:1309
-214:2:1310
-215:2:1314
-216:2:1315
-217:2:1323
-218:2:1328
-219:2:1332
-220:2:1333
-221:2:1340
-222:2:1341
-223:2:1352
-224:2:1353
-225:2:1354
-226:2:1365
-227:2:1370
-228:2:1371
-229:0:1946
-230:2:1383
-231:0:1946
-232:2:1385
-233:0:1946
-234:2:1388
-235:2:1389
-236:2:1401
-237:2:1402
-238:2:1406
-239:2:1407
-240:2:1415
-241:2:1420
-242:2:1424
-243:2:1425
-244:2:1432
-245:2:1433
-246:2:1444
-247:2:1445
-248:2:1446
-249:2:1457
-250:2:1462
-251:2:1463
-252:0:1946
-253:2:1475
-254:0:1946
-255:2:1477
-256:0:1946
-257:2:1478
-258:0:1946
-259:2:1479
-260:0:1946
-261:2:1480
-262:0:1946
-263:2:1481
-264:2:1485
-265:2:1486
-266:2:1494
-267:2:1495
-268:2:1499
-269:2:1500
-270:2:1508
-271:2:1513
-272:2:1517
-273:2:1518
-274:2:1525
-275:2:1526
-276:2:1537
-277:2:1538
-278:2:1539
-279:2:1550
-280:2:1555
-281:2:1556
-282:0:1946
-283:2:1568
-284:0:1946
-285:2:1672
-286:0:1946
-287:2:1770
-288:0:1946
-289:2:1771
-290:0:1946
-291:2:1775
-292:0:1946
-293:2:1781
-294:2:1788
-295:2:1789
-296:2:1796
-297:2:1801
-298:0:1946
-299:2:1812
-300:0:1946
-301:2:1813
-302:2:1820
-303:2:1821
-304:2:1828
-305:2:1833
-306:0:1946
-307:2:1844
-308:0:1946
-309:2:1849
-310:2:1856
-311:2:1857
-312:2:1864
-313:2:1869
-314:0:1946
-315:2:1880
-316:0:1946
-317:2:1882
-318:0:1946
-319:2:1883
-320:0:1946
-321:2:423
-322:0:1946
-323:2:424
-324:2:428
-325:2:429
-326:2:437
-327:2:438
-328:2:442
-329:2:443
-330:2:451
-331:2:456
-332:2:460
-333:2:461
-334:2:468
-335:2:469
-336:2:480
-337:2:481
-338:2:482
-339:2:493
-340:2:498
-341:2:499
-342:0:1946
-343:2:511
-344:0:1946
-345:2:513
-346:2:514
-347:0:1946
-348:2:518
-349:2:522
-350:2:523
-351:2:531
-352:2:532
-353:2:536
-354:2:537
-355:2:545
-356:2:550
-357:2:551
-358:2:562
-359:2:563
-360:2:574
-361:2:575
-362:2:576
-363:2:587
-364:2:592
-365:2:593
-366:0:1946
-367:2:605
-368:0:1946
-369:2:607
-370:0:1946
-371:2:608
-372:0:1946
-373:2:618
-374:0:1946
-375:2:619
-376:2:626
-377:2:627
-378:2:634
-379:2:639
-380:0:1946
-381:2:650
-382:0:1946
-383:2:651
-384:2:658
-385:2:659
-386:2:666
-387:2:671
-388:0:1946
-389:2:682
-390:0:1946
-391:2:687
-392:2:694
-393:2:695
-394:2:702
-395:2:707
-396:0:1946
-397:2:718
-398:0:1946
-399:2:720
-400:0:1946
-401:2:721
-402:2:725
-403:2:726
-404:2:734
-405:2:735
-406:2:739
-407:2:740
-408:2:748
-409:2:753
-410:2:757
-411:2:758
-412:2:765
-413:2:766
-414:2:777
-415:2:778
-416:2:779
-417:2:790
-418:2:795
-419:2:796
-420:0:1946
-421:2:808
-422:0:1946
-423:2:810
-424:0:1946
-425:2:813
-426:2:814
-427:2:826
-428:2:827
-429:2:831
-430:2:832
-431:2:840
-432:2:845
-433:2:849
-434:2:850
-435:2:857
-436:2:858
-437:2:869
-438:2:870
-439:2:871
-440:2:882
-441:2:887
-442:2:888
-443:0:1946
-444:2:900
-445:0:1946
-446:2:902
-447:0:1946
-448:2:903
-449:0:1946
-450:2:904
-451:0:1946
-452:2:905
-453:0:1946
-454:2:906
-455:2:910
-456:2:911
-457:2:919
-458:2:920
-459:2:924
-460:2:925
-461:2:933
-462:2:938
-463:2:942
-464:2:943
-465:2:950
-466:2:951
-467:2:962
-468:2:963
-469:2:964
-470:2:975
-471:2:980
-472:2:981
-473:0:1946
-474:2:993
-475:0:1946
-476:2:1097
-477:0:1946
-478:2:1195
-479:0:1946
-480:2:1196
-481:0:1946
-482:2:1200
-483:0:1946
-484:2:1206
-485:2:1210
-486:2:1211
-487:2:1219
-488:2:1220
-489:2:1224
-490:2:1225
-491:2:1233
-492:2:1238
-493:2:1242
-494:2:1243
-495:2:1250
-496:2:1251
-497:2:1262
-498:2:1263
-499:2:1264
-500:2:1275
-501:2:1280
-502:2:1281
-503:0:1946
-504:2:1293
-505:0:1946
-506:2:1295
-507:0:1946
-508:2:1296
-509:2:1300
-510:2:1301
-511:2:1309
-512:2:1310
-513:2:1314
-514:2:1315
-515:2:1323
-516:2:1328
-517:2:1332
-518:2:1333
-519:2:1340
-520:2:1341
-521:2:1352
-522:2:1353
-523:2:1354
-524:2:1365
-525:2:1370
-526:2:1371
-527:0:1946
-528:2:1383
-529:0:1946
-530:2:1385
-531:0:1946
-532:2:1388
-533:2:1389
-534:2:1401
-535:2:1402
-536:2:1406
-537:2:1407
-538:2:1415
-539:2:1420
-540:2:1424
-541:2:1425
-542:2:1432
-543:2:1433
-544:2:1444
-545:2:1445
-546:2:1446
-547:2:1457
-548:2:1462
-549:2:1463
-550:0:1946
-551:2:1475
-552:0:1946
-553:2:1477
-554:0:1946
-555:2:1478
-556:0:1946
-557:2:1479
-558:0:1946
-559:2:1480
-560:0:1946
-561:2:1481
-562:2:1485
-563:2:1486
-564:2:1494
-565:2:1495
-566:2:1499
-567:2:1500
-568:2:1508
-569:2:1513
-570:2:1517
-571:2:1518
-572:2:1525
-573:2:1526
-574:2:1537
-575:2:1538
-576:2:1539
-577:2:1550
-578:2:1555
-579:2:1556
-580:0:1946
-581:2:1568
-582:0:1946
-583:2:1672
-584:0:1946
-585:2:1770
-586:0:1946
-587:2:1771
-588:0:1946
-589:2:1775
-590:0:1946
-591:2:1781
-592:2:1788
-593:2:1789
-594:2:1796
-595:2:1801
-596:0:1946
-597:2:1812
-598:0:1946
-599:2:1813
-600:2:1820
-601:2:1821
-602:2:1828
-603:2:1833
-604:0:1946
-605:2:1844
-606:0:1946
-607:2:1849
-608:2:1856
-609:2:1857
-610:2:1864
-611:2:1869
-612:0:1946
-613:2:1880
-614:0:1946
-615:2:1882
-616:0:1946
-617:2:1883
-618:0:1946
-619:2:423
-620:0:1946
-621:2:424
-622:2:428
-623:2:429
-624:2:437
-625:2:438
-626:2:442
-627:2:443
-628:2:451
-629:2:456
-630:2:460
-631:2:461
-632:2:468
-633:2:469
-634:2:480
-635:2:481
-636:2:482
-637:2:493
-638:2:498
-639:2:499
-640:0:1946
-641:2:511
-642:0:1946
-643:2:513
-644:2:514
-645:0:1946
-646:2:518
-647:2:522
-648:2:523
-649:2:531
-650:2:532
-651:2:536
-652:2:537
-653:2:545
-654:2:550
-655:2:551
-656:2:562
-657:2:563
-658:2:574
-659:2:575
-660:2:576
-661:2:587
-662:2:592
-663:2:593
-664:0:1946
-665:2:605
-666:0:1946
-667:2:607
-668:0:1946
-669:2:608
-670:0:1946
-671:2:618
-672:0:1946
-673:2:619
-674:2:626
-675:2:627
-676:2:634
-677:2:639
-678:0:1946
-679:2:650
-680:0:1946
-681:2:651
-682:2:658
-683:2:659
-684:2:666
-685:2:671
-686:0:1946
-687:2:682
-688:0:1946
-689:2:687
-690:2:694
-691:2:695
-692:2:702
-693:2:707
-694:0:1946
-695:2:718
-696:0:1946
-697:2:720
-698:0:1946
-699:2:721
-700:2:725
-701:2:726
-702:2:734
-703:2:735
-704:2:739
-705:2:740
-706:2:748
-707:2:753
-708:2:757
-709:2:758
-710:2:765
-711:2:766
-712:2:777
-713:2:778
-714:2:779
-715:2:790
-716:2:795
-717:2:796
-718:0:1946
-719:2:808
-720:0:1946
-721:2:810
-722:0:1946
-723:2:813
-724:2:814
-725:2:826
-726:2:827
-727:2:831
-728:2:832
-729:2:840
-730:2:845
-731:2:849
-732:2:850
-733:2:857
-734:2:858
-735:2:869
-736:2:870
-737:2:871
-738:2:882
-739:2:887
-740:2:888
-741:0:1946
-742:2:900
-743:0:1946
-744:2:902
-745:0:1946
-746:2:903
-747:0:1946
-748:2:904
-749:0:1946
-750:2:905
-751:0:1946
-752:2:906
-753:2:910
-754:2:911
-755:2:919
-756:2:920
-757:2:924
-758:2:925
-759:2:933
-760:2:938
-761:2:942
-762:2:943
-763:2:950
-764:2:951
-765:2:962
-766:2:963
-767:2:964
-768:2:975
-769:2:980
-770:2:981
-771:0:1946
-772:2:993
-773:0:1946
-774:2:1097
-775:0:1946
-776:2:1195
-777:0:1946
-778:2:1196
-779:0:1946
-780:2:1200
-781:0:1946
-782:2:1206
-783:2:1210
-784:2:1211
-785:2:1219
-786:2:1220
-787:2:1224
-788:2:1225
-789:2:1233
-790:2:1238
-791:2:1242
-792:2:1243
-793:2:1250
-794:2:1251
-795:2:1262
-796:2:1263
-797:2:1264
-798:2:1275
-799:2:1280
-800:2:1281
-801:0:1946
-802:2:1293
-803:0:1946
-804:2:1295
-805:0:1946
-806:2:1296
-807:2:1300
-808:2:1301
-809:2:1309
-810:2:1310
-811:2:1314
-812:2:1315
-813:2:1323
-814:2:1328
-815:2:1332
-816:2:1333
-817:2:1340
-818:2:1341
-819:2:1352
-820:2:1353
-821:2:1354
-822:2:1365
-823:2:1370
-824:2:1371
-825:0:1946
-826:2:1383
-827:0:1946
-828:2:1385
-829:0:1946
-830:2:1388
-831:2:1389
-832:2:1401
-833:2:1402
-834:2:1406
-835:2:1407
-836:2:1415
-837:2:1420
-838:2:1424
-839:2:1425
-840:2:1432
-841:2:1433
-842:2:1444
-843:2:1445
-844:2:1446
-845:2:1457
-846:2:1462
-847:2:1463
-848:0:1946
-849:2:1475
-850:0:1946
-851:2:1477
-852:0:1946
-853:2:1478
-854:0:1946
-855:2:1479
-856:0:1946
-857:2:1480
-858:0:1946
-859:2:1481
-860:2:1485
-861:2:1486
-862:2:1494
-863:2:1495
-864:2:1499
-865:2:1500
-866:2:1508
-867:2:1513
-868:2:1517
-869:2:1518
-870:2:1525
-871:2:1526
-872:2:1537
-873:2:1538
-874:2:1539
-875:2:1550
-876:2:1555
-877:2:1556
-878:0:1946
-879:2:1568
-880:0:1946
-881:2:1672
-882:0:1946
-883:2:1770
-884:0:1946
-885:2:1771
-886:0:1946
-887:2:1775
-888:0:1946
-889:2:1781
-890:2:1788
-891:2:1789
-892:2:1796
-893:2:1801
-894:0:1946
-895:2:1812
-896:0:1946
-897:2:1813
-898:2:1820
-899:2:1821
-900:2:1828
-901:2:1833
-902:0:1946
-903:2:1844
-904:0:1946
-905:2:1849
-906:2:1856
-907:2:1857
-908:2:1864
-909:2:1869
-910:0:1946
-911:2:1880
-912:0:1946
-913:2:1882
-914:0:1946
-915:2:1883
-916:0:1946
-917:2:423
-918:0:1946
-919:2:424
-920:2:428
-921:2:429
-922:2:437
-923:2:438
-924:2:442
-925:2:443
-926:2:451
-927:2:456
-928:2:460
-929:2:461
-930:2:468
-931:2:469
-932:2:480
-933:2:481
-934:2:482
-935:2:493
-936:2:498
-937:2:499
-938:0:1946
-939:2:511
-940:0:1946
-941:2:513
-942:2:514
-943:0:1946
-944:2:518
-945:2:522
-946:2:523
-947:2:531
-948:2:532
-949:2:536
-950:2:537
-951:2:545
-952:2:550
-953:2:551
-954:2:562
-955:2:563
-956:2:574
-957:2:575
-958:2:576
-959:2:587
-960:2:592
-961:2:593
-962:0:1946
-963:2:605
-964:0:1946
-965:2:607
-966:0:1946
-967:2:608
-968:0:1946
-969:2:618
-970:0:1946
-971:2:619
-972:2:626
-973:2:627
-974:2:634
-975:2:639
-976:0:1946
-977:2:650
-978:0:1946
-979:2:651
-980:2:658
-981:2:659
-982:2:666
-983:2:671
-984:0:1946
-985:2:682
-986:0:1946
-987:2:687
-988:2:694
-989:2:695
-990:2:702
-991:2:707
-992:0:1946
-993:2:718
-994:0:1946
-995:2:720
-996:0:1946
-997:2:721
-998:2:725
-999:2:726
-1000:2:734
-1001:2:735
-1002:2:739
-1003:2:740
-1004:2:748
-1005:2:753
-1006:2:757
-1007:2:758
-1008:2:765
-1009:2:766
-1010:2:777
-1011:2:778
-1012:2:779
-1013:2:790
-1014:2:795
-1015:2:796
-1016:0:1946
-1017:2:808
-1018:0:1946
-1019:2:810
-1020:0:1946
-1021:2:813
-1022:2:814
-1023:2:826
-1024:2:827
-1025:2:831
-1026:2:832
-1027:2:840
-1028:2:845
-1029:2:849
-1030:2:850
-1031:2:857
-1032:2:858
-1033:2:869
-1034:2:870
-1035:2:871
-1036:2:882
-1037:2:887
-1038:2:888
-1039:0:1946
-1040:2:900
-1041:0:1946
-1042:2:902
-1043:0:1946
-1044:2:903
-1045:0:1946
-1046:2:904
-1047:0:1946
-1048:2:905
-1049:0:1946
-1050:2:906
-1051:2:910
-1052:2:911
-1053:2:919
-1054:2:920
-1055:2:924
-1056:2:925
-1057:2:933
-1058:2:938
-1059:2:942
-1060:2:943
-1061:2:950
-1062:2:951
-1063:2:962
-1064:2:963
-1065:2:964
-1066:2:975
-1067:2:980
-1068:2:981
-1069:0:1946
-1070:2:993
-1071:0:1946
-1072:2:1097
-1073:0:1946
-1074:2:1195
-1075:0:1946
-1076:2:1196
-1077:0:1946
-1078:2:1200
-1079:0:1946
-1080:2:1206
-1081:2:1210
-1082:2:1211
-1083:2:1219
-1084:2:1220
-1085:2:1224
-1086:2:1225
-1087:2:1233
-1088:2:1238
-1089:2:1242
-1090:2:1243
-1091:2:1250
-1092:2:1251
-1093:2:1262
-1094:2:1263
-1095:2:1264
-1096:2:1275
-1097:2:1280
-1098:2:1281
-1099:0:1946
-1100:2:1293
-1101:0:1946
-1102:2:1295
-1103:0:1946
-1104:2:1296
-1105:2:1300
-1106:2:1301
-1107:2:1309
-1108:2:1310
-1109:2:1314
-1110:2:1315
-1111:2:1323
-1112:2:1328
-1113:2:1332
-1114:2:1333
-1115:2:1340
-1116:2:1341
-1117:2:1352
-1118:2:1353
-1119:2:1354
-1120:2:1365
-1121:2:1370
-1122:2:1371
-1123:0:1946
-1124:2:1383
-1125:0:1946
-1126:2:1385
-1127:0:1946
-1128:2:1388
-1129:2:1389
-1130:2:1401
-1131:2:1402
-1132:2:1406
-1133:2:1407
-1134:2:1415
-1135:2:1420
-1136:2:1424
-1137:2:1425
-1138:2:1432
-1139:2:1433
-1140:2:1444
-1141:2:1445
-1142:2:1446
-1143:2:1457
-1144:2:1462
-1145:2:1463
-1146:0:1946
-1147:2:1475
-1148:0:1946
-1149:2:1477
-1150:0:1946
-1151:2:1478
-1152:0:1946
-1153:2:1479
-1154:0:1946
-1155:2:1480
-1156:0:1946
-1157:2:1481
-1158:2:1485
-1159:2:1486
-1160:2:1494
-1161:2:1495
-1162:2:1499
-1163:2:1500
-1164:2:1508
-1165:2:1513
-1166:2:1517
-1167:2:1518
-1168:2:1525
-1169:2:1526
-1170:2:1537
-1171:2:1538
-1172:2:1539
-1173:2:1550
-1174:2:1555
-1175:2:1556
-1176:0:1946
-1177:2:1568
-1178:0:1946
-1179:2:1672
-1180:0:1946
-1181:2:1770
-1182:0:1946
-1183:2:1771
-1184:0:1946
-1185:2:1775
-1186:0:1946
-1187:2:1781
-1188:2:1788
-1189:2:1789
-1190:2:1796
-1191:2:1801
-1192:0:1946
-1193:2:1812
-1194:0:1946
-1195:2:1813
-1196:2:1820
-1197:2:1821
-1198:2:1828
-1199:2:1833
-1200:0:1946
-1201:2:1844
-1202:0:1946
-1203:2:1849
-1204:2:1856
-1205:2:1857
-1206:2:1864
-1207:2:1869
-1208:0:1946
-1209:2:1880
-1210:0:1946
-1211:2:1882
-1212:0:1946
-1213:2:1883
-1214:0:1946
-1215:2:423
-1216:0:1946
-1217:2:424
-1218:2:428
-1219:2:429
-1220:2:437
-1221:2:438
-1222:2:442
-1223:2:443
-1224:2:451
-1225:2:456
-1226:2:460
-1227:2:461
-1228:2:468
-1229:2:469
-1230:2:480
-1231:2:481
-1232:2:482
-1233:2:493
-1234:2:498
-1235:2:499
-1236:0:1946
-1237:2:511
-1238:0:1946
-1239:2:513
-1240:2:514
-1241:0:1946
-1242:2:518
-1243:2:522
-1244:2:523
-1245:2:531
-1246:2:532
-1247:2:536
-1248:2:537
-1249:2:545
-1250:2:550
-1251:2:551
-1252:2:562
-1253:2:563
-1254:2:574
-1255:2:575
-1256:2:576
-1257:2:587
-1258:2:592
-1259:2:593
-1260:0:1946
-1261:2:605
-1262:0:1946
-1263:2:607
-1264:0:1946
-1265:2:608
-1266:0:1946
-1267:2:618
-1268:0:1946
-1269:2:619
-1270:2:626
-1271:2:627
-1272:2:634
-1273:2:639
-1274:0:1946
-1275:2:650
-1276:0:1946
-1277:1:2
-1278:0:1946
-1279:1:8
-1280:0:1946
-1281:1:9
-1282:0:1946
-1283:1:10
-1284:0:1946
-1285:1:11
-1286:0:1946
-1287:1:12
-1288:1:16
-1289:1:17
-1290:1:25
-1291:1:26
-1292:1:30
-1293:1:31
-1294:1:39
-1295:1:44
-1296:1:48
-1297:1:49
-1298:1:56
-1299:1:57
-1300:1:68
-1301:1:69
-1302:1:70
-1303:1:81
-1304:1:93
-1305:1:94
-1306:0:1946
-1307:1:99
-1308:0:1946
-1309:1:101
-1310:0:1946
-1311:1:102
-1312:1:106
-1313:1:107
-1314:1:115
-1315:1:116
-1316:1:120
-1317:1:121
-1318:1:129
-1319:1:134
-1320:1:138
-1321:1:139
-1322:1:146
-1323:1:147
-1324:1:158
-1325:1:159
-1326:1:160
-1327:1:171
-1328:1:183
-1329:1:184
-1330:0:1946
-1331:1:189
-1332:0:1946
-1333:1:191
-1334:0:1946
-1335:1:192
-1336:0:1946
-1337:1:193
-1338:1:197
-1339:1:198
-1340:1:206
-1341:1:207
-1342:1:211
-1343:1:212
-1344:1:220
-1345:1:225
-1346:1:229
-1347:1:230
-1348:1:237
-1349:1:238
-1350:1:249
-1351:1:250
-1352:1:251
-1353:1:262
-1354:1:274
-1355:1:275
-1356:0:1946
-1357:1:280
-1358:0:1946
-1359:1:282
-1360:0:1946
-1361:1:291
-1362:0:1946
-1363:1:293
-1364:0:1946
-1365:1:11
-1366:0:1946
-1367:1:12
-1368:1:16
-1369:1:17
-1370:1:25
-1371:1:26
-1372:1:27
-1373:1:39
-1374:1:44
-1375:1:48
-1376:1:49
-1377:1:56
-1378:1:57
-1379:1:68
-1380:1:69
-1381:1:70
-1382:1:81
-1383:1:93
-1384:1:94
-1385:0:1946
-1386:1:99
-1387:0:1946
-1388:1:101
-1389:0:1946
-1390:1:102
-1391:1:106
-1392:1:107
-1393:1:115
-1394:1:116
-1395:1:120
-1396:1:121
-1397:1:129
-1398:1:134
-1399:1:138
-1400:1:139
-1401:1:146
-1402:1:147
-1403:1:158
-1404:1:159
-1405:1:160
-1406:1:171
-1407:1:183
-1408:1:184
-1409:0:1946
-1410:1:189
-1411:0:1946
-1412:1:285
-1413:0:1946
-1414:1:286
-1415:0:1946
-1416:1:291
-1417:0:1946
-1418:1:293
-1419:0:1946
-1420:1:296
-1421:0:1946
-1422:1:301
-1423:0:1946
-1424:1:302
-1425:0:1946
-1426:1:303
-1427:0:1946
-1428:1:304
-1429:0:1946
-1430:1:305
-1431:0:1946
-1432:1:306
-1433:0:1946
-1434:1:308
-1435:0:1946
-1436:1:310
-1437:0:1946
-1438:1:311
-1439:1:315
-1440:1:316
-1441:1:324
-1442:1:325
-1443:1:326
-1444:1:338
-1445:1:343
-1446:1:347
-1447:1:348
-1448:1:355
-1449:1:356
-1450:1:367
-1451:1:368
-1452:1:369
-1453:1:380
-1454:1:392
-1455:1:393
-1456:0:1946
-1457:1:398
-1458:0:1946
-1459:1:400
-1460:0:1946
-1461:1:305
-1462:0:1946
-1463:1:306
-1464:0:1946
-1465:1:308
-1466:0:1946
-1467:1:310
-1468:0:1946
-1469:1:311
-1470:1:315
-1471:1:316
-1472:1:324
-1473:1:325
-1474:1:326
-1475:1:338
-1476:1:343
-1477:1:347
-1478:1:348
-1479:1:355
-1480:1:356
-1481:1:367
-1482:1:368
-1483:1:369
-1484:1:380
-1485:1:392
-1486:1:393
-1487:0:1946
-1488:1:398
-1489:0:1946
-1490:1:400
-1491:0:1946
-1492:1:404
-1493:0:1946
-1494:1:9
-1495:0:1946
-1496:1:10
-1497:0:1946
-1498:1:11
-1499:0:1946
-1500:1:12
-1501:1:16
-1502:1:17
-1503:1:25
-1504:1:26
-1505:1:27
-1506:1:39
-1507:1:44
-1508:1:48
-1509:1:49
-1510:1:56
-1511:1:57
-1512:1:68
-1513:1:69
-1514:1:70
-1515:1:81
-1516:1:93
-1517:1:94
-1518:0:1946
-1519:1:99
-1520:0:1946
-1521:1:101
-1522:0:1946
-1523:1:102
-1524:1:106
-1525:1:107
-1526:1:115
-1527:1:116
-1528:1:120
-1529:1:121
-1530:1:129
-1531:1:134
-1532:1:138
-1533:1:139
-1534:1:146
-1535:1:147
-1536:1:158
-1537:1:159
-1538:1:160
-1539:1:171
-1540:1:183
-1541:1:184
-1542:0:1946
-1543:1:189
-1544:0:1946
-1545:1:191
-1546:0:1946
-1547:1:192
-1548:0:1946
-1549:1:193
-1550:1:197
-1551:1:198
-1552:1:206
-1553:1:207
-1554:1:211
-1555:1:212
-1556:1:220
-1557:1:225
-1558:1:229
-1559:1:230
-1560:1:237
-1561:1:238
-1562:1:249
-1563:1:250
-1564:1:251
-1565:1:262
-1566:1:274
-1567:1:275
-1568:0:1946
-1569:1:280
-1570:0:1946
-1571:1:282
-1572:0:1946
-1573:1:291
-1574:0:1946
-1575:1:293
-1576:0:1946
-1577:1:11
-1578:0:1946
-1579:1:12
-1580:1:16
-1581:1:17
-1582:1:25
-1583:1:34
-1584:1:35
-1585:1:39
-1586:1:44
-1587:1:48
-1588:1:49
-1589:1:56
-1590:1:57
-1591:1:68
-1592:1:69
-1593:1:72
-1594:1:73
-1595:1:81
-1596:1:93
-1597:1:94
-1598:0:1946
-1599:1:99
-1600:0:1946
-1601:1:101
-1602:0:1946
-1603:1:102
-1604:1:106
-1605:1:107
-1606:1:115
-1607:1:124
-1608:1:125
-1609:1:129
-1610:1:134
-1611:1:138
-1612:1:139
-1613:1:146
-1614:1:147
-1615:1:158
-1616:1:159
-1617:1:162
-1618:1:163
-1619:1:171
-1620:1:183
-1621:1:184
-1622:0:1946
-1623:1:189
-1624:0:1946
-1625:1:285
-1626:0:1946
-1627:1:286
-1628:0:1946
-1629:1:291
-1630:0:1946
-1631:1:293
-1632:0:1946
-1633:1:296
-1634:0:1946
-1635:1:301
-1636:0:1946
-1637:2:651
-1638:2:658
-1639:2:661
-1640:2:662
-1641:2:666
-1642:2:671
-1643:0:1946
-1644:2:682
-1645:0:1946
-1646:2:687
-1647:2:694
-1648:2:695
-1649:2:702
-1650:2:707
-1651:0:1946
-1652:2:718
-1653:0:1946
-1654:2:720
-1655:0:1946
-1656:2:721
-1657:2:725
-1658:2:726
-1659:2:734
-1660:2:735
-1661:2:739
-1662:2:740
-1663:2:748
-1664:2:753
-1665:2:757
-1666:2:758
-1667:2:765
-1668:2:766
-1669:2:777
-1670:2:778
-1671:2:779
-1672:2:790
-1673:2:795
-1674:2:796
-1675:0:1946
-1676:2:808
-1677:0:1946
-1678:2:810
-1679:0:1946
-1680:2:813
-1681:2:814
-1682:2:826
-1683:2:827
-1684:2:831
-1685:2:832
-1686:2:840
-1687:2:845
-1688:2:849
-1689:2:850
-1690:2:857
-1691:2:858
-1692:2:869
-1693:2:870
-1694:2:871
-1695:2:882
-1696:2:887
-1697:2:888
-1698:0:1946
-1699:2:900
-1700:0:1946
-1701:2:902
-1702:0:1946
-1703:2:903
-1704:0:1946
-1705:2:904
-1706:0:1946
-1707:2:905
-1708:0:1946
-1709:2:906
-1710:2:910
-1711:2:911
-1712:2:919
-1713:2:920
-1714:2:924
-1715:2:925
-1716:2:933
-1717:2:938
-1718:2:942
-1719:2:943
-1720:2:950
-1721:2:951
-1722:2:962
-1723:2:963
-1724:2:964
-1725:2:975
-1726:2:980
-1727:2:981
-1728:0:1946
-1729:2:993
-1730:0:1946
-1731:2:1097
-1732:0:1946
-1733:2:1195
-1734:0:1946
-1735:2:1196
-1736:0:1946
-1737:2:1200
-1738:0:1946
-1739:2:1206
-1740:2:1210
-1741:2:1211
-1742:2:1219
-1743:2:1220
-1744:2:1224
-1745:2:1225
-1746:2:1233
-1747:2:1238
-1748:2:1242
-1749:2:1243
-1750:2:1250
-1751:2:1251
-1752:2:1262
-1753:2:1263
-1754:2:1264
-1755:2:1275
-1756:2:1280
-1757:2:1281
-1758:0:1946
-1759:2:1293
-1760:0:1946
-1761:2:1295
-1762:0:1946
-1763:2:1296
-1764:2:1300
-1765:2:1301
-1766:2:1309
-1767:2:1310
-1768:2:1314
-1769:2:1315
-1770:2:1323
-1771:2:1328
-1772:2:1332
-1773:2:1333
-1774:2:1340
-1775:2:1341
-1776:2:1352
-1777:2:1353
-1778:2:1354
-1779:2:1365
-1780:2:1370
-1781:2:1371
-1782:0:1946
-1783:2:1383
-1784:0:1946
-1785:2:1385
-1786:0:1946
-1787:2:1388
-1788:2:1389
-1789:2:1401
-1790:2:1402
-1791:2:1406
-1792:2:1407
-1793:2:1415
-1794:2:1420
-1795:2:1424
-1796:2:1425
-1797:2:1432
-1798:2:1433
-1799:2:1444
-1800:2:1445
-1801:2:1446
-1802:2:1457
-1803:2:1462
-1804:2:1463
-1805:0:1946
-1806:2:1475
-1807:0:1946
-1808:2:1477
-1809:0:1946
-1810:2:1478
-1811:0:1946
-1812:2:1479
-1813:0:1946
-1814:2:1480
-1815:0:1946
-1816:2:1481
-1817:2:1485
-1818:2:1486
-1819:2:1494
-1820:2:1495
-1821:2:1499
-1822:2:1500
-1823:2:1508
-1824:2:1513
-1825:2:1517
-1826:2:1518
-1827:2:1525
-1828:2:1526
-1829:2:1537
-1830:2:1538
-1831:2:1539
-1832:2:1550
-1833:2:1555
-1834:2:1556
-1835:0:1946
-1836:2:1568
-1837:0:1946
-1838:2:1672
-1839:0:1946
-1840:2:1770
-1841:0:1946
-1842:2:1771
-1843:0:1946
-1844:2:1775
-1845:0:1946
-1846:2:1781
-1847:2:1788
-1848:2:1789
-1849:2:1796
-1850:2:1801
-1851:0:1946
-1852:2:1812
-1853:0:1946
-1854:2:1813
-1855:2:1820
-1856:2:1823
-1857:2:1824
-1858:2:1828
-1859:2:1833
-1860:0:1946
-1861:2:1844
-1862:0:1946
-1863:2:1849
-1864:2:1856
-1865:2:1857
-1866:2:1864
-1867:2:1869
-1868:0:1946
-1869:2:1880
-1870:0:1946
-1871:2:1882
-1872:0:1946
-1873:2:1883
-1874:0:1946
-1875:2:1886
-1876:0:1946
-1877:2:1891
-1878:0:1946
-1879:1:302
-1880:0:1944
-1881:2:1892
-1882:0:1950
-1883:1:143
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.define b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 2a80112..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-pan: claim violated! (at depth 1371)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3387, errors: 1
-   206295 states, stored
-  1902753 states, matched
-  2109048 transitions (= stored+matched)
-  7663223 atomic steps
-hash conflicts:    101109 (resolved)
-
-Stats on memory usage (in Megabytes):
-   16.526      equivalent memory usage for states (stored*(State-vector + overhead))
-   13.080      actual memory usage for states (compression: 79.15%)
-               state-vector as stored = 38 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  478.752      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 179, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1003, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1013, "(1)"
-       line 164, "pan.___", state 1021, "(1)"
-       line 168, "pan.___", state 1033, "(1)"
-       line 175, "pan.___", state 1044, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1066, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1076, "(1)"
-       line 164, "pan.___", state 1084, "(1)"
-       line 168, "pan.___", state 1096, "(1)"
-       line 175, "pan.___", state 1111, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1133, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1143, "(1)"
-       line 164, "pan.___", state 1151, "(1)"
-       line 168, "pan.___", state 1163, "(1)"
-       line 702, "pan.___", state 1188, "-end-"
-       (100 of 1188 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.66 seconds
-pan: rate  124274.1 states/second
-pan: avg transition delay 7.8708e-07 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 93aae44..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define SINGLE_FLIP
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 73c1400..0000000
+++ /dev/null
@@ -1,1374 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1650
-2:3:1602
-3:3:1605
-4:3:1605
-5:3:1608
-6:3:1616
-7:3:1616
-8:3:1619
-9:3:1625
-10:3:1629
-11:3:1629
-12:3:1632
-13:3:1640
-14:3:1644
-15:3:1645
-16:0:1650
-17:3:1647
-18:0:1650
-19:2:416
-20:0:1650
-21:2:422
-22:0:1650
-23:2:423
-24:0:1650
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1650
-45:2:511
-46:0:1650
-47:2:513
-48:2:514
-49:0:1650
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1650
-69:2:605
-70:0:1650
-71:2:607
-72:0:1650
-73:2:608
-74:0:1650
-75:2:618
-76:0:1650
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:2:650
-86:2:657
-87:2:658
-88:2:665
-89:2:670
-90:0:1650
-91:2:681
-92:0:1650
-93:2:685
-94:2:686
-95:2:690
-96:2:694
-97:2:695
-98:2:699
-99:2:707
-100:2:708
-101:2:713
-102:2:720
-103:2:721
-104:2:728
-105:2:733
-106:0:1650
-107:2:744
-108:0:1650
-109:2:752
-110:2:753
-111:2:757
-112:2:761
-113:2:762
-114:2:766
-115:2:774
-116:2:775
-117:2:780
-118:2:787
-119:2:788
-120:2:795
-121:2:800
-122:0:1650
-123:2:811
-124:0:1650
-125:2:813
-126:0:1650
-127:2:814
-128:2:818
-129:2:819
-130:2:827
-131:2:828
-132:2:832
-133:2:833
-134:2:841
-135:2:846
-136:2:850
-137:2:851
-138:2:858
-139:2:859
-140:2:870
-141:2:871
-142:2:872
-143:2:883
-144:2:888
-145:2:889
-146:0:1650
-147:2:901
-148:0:1650
-149:2:903
-150:0:1650
-151:2:906
-152:2:907
-153:2:919
-154:2:920
-155:2:924
-156:2:925
-157:2:933
-158:2:938
-159:2:942
-160:2:943
-161:2:950
-162:2:951
-163:2:962
-164:2:963
-165:2:964
-166:2:975
-167:2:980
-168:2:981
-169:0:1650
-170:2:993
-171:0:1650
-172:2:995
-173:0:1650
-174:2:996
-175:0:1650
-176:2:997
-177:0:1650
-178:2:998
-179:0:1650
-180:2:999
-181:2:1003
-182:2:1004
-183:2:1012
-184:2:1013
-185:2:1017
-186:2:1018
-187:2:1026
-188:2:1031
-189:2:1035
-190:2:1036
-191:2:1043
-192:2:1044
-193:2:1055
-194:2:1056
-195:2:1057
-196:2:1068
-197:2:1073
-198:2:1074
-199:0:1650
-200:2:1086
-201:0:1650
-202:2:1283
-203:0:1650
-204:2:1381
-205:0:1650
-206:2:1382
-207:0:1650
-208:2:1386
-209:0:1650
-210:2:1395
-211:2:1396
-212:2:1400
-213:2:1404
-214:2:1405
-215:2:1409
-216:2:1417
-217:2:1418
-218:2:1423
-219:2:1430
-220:2:1431
-221:2:1438
-222:2:1443
-223:0:1650
-224:2:1454
-225:0:1650
-226:2:1458
-227:2:1459
-228:2:1463
-229:2:1467
-230:2:1468
-231:2:1472
-232:2:1480
-233:2:1481
-234:2:1486
-235:2:1493
-236:2:1494
-237:2:1501
-238:2:1506
-239:0:1650
-240:2:1517
-241:0:1650
-242:2:1525
-243:2:1526
-244:2:1530
-245:2:1534
-246:2:1535
-247:2:1539
-248:2:1547
-249:2:1548
-250:2:1553
-251:2:1560
-252:2:1561
-253:2:1568
-254:2:1573
-255:0:1650
-256:2:1584
-257:0:1650
-258:2:1586
-259:0:1650
-260:2:1587
-261:0:1650
-262:2:423
-263:0:1650
-264:2:424
-265:2:428
-266:2:429
-267:2:437
-268:2:438
-269:2:442
-270:2:443
-271:2:451
-272:2:456
-273:2:460
-274:2:461
-275:2:468
-276:2:469
-277:2:480
-278:2:481
-279:2:482
-280:2:493
-281:2:498
-282:2:499
-283:0:1650
-284:2:511
-285:0:1650
-286:2:513
-287:2:514
-288:0:1650
-289:2:518
-290:2:522
-291:2:523
-292:2:531
-293:2:532
-294:2:536
-295:2:537
-296:2:545
-297:2:550
-298:2:551
-299:2:562
-300:2:563
-301:2:574
-302:2:575
-303:2:576
-304:2:587
-305:2:592
-306:2:593
-307:0:1650
-308:2:605
-309:0:1650
-310:2:607
-311:0:1650
-312:2:608
-313:0:1650
-314:2:618
-315:0:1650
-316:2:622
-317:2:623
-318:2:627
-319:2:631
-320:2:632
-321:2:636
-322:2:644
-323:2:645
-324:2:650
-325:2:657
-326:2:658
-327:2:665
-328:2:670
-329:0:1650
-330:2:681
-331:0:1650
-332:2:685
-333:2:686
-334:2:690
-335:2:694
-336:2:695
-337:2:699
-338:2:707
-339:2:708
-340:2:713
-341:2:720
-342:2:721
-343:2:728
-344:2:733
-345:0:1650
-346:2:744
-347:0:1650
-348:2:752
-349:2:753
-350:2:757
-351:2:761
-352:2:762
-353:2:766
-354:2:774
-355:2:775
-356:2:780
-357:2:787
-358:2:788
-359:2:795
-360:2:800
-361:0:1650
-362:2:811
-363:0:1650
-364:2:813
-365:0:1650
-366:2:814
-367:2:818
-368:2:819
-369:2:827
-370:2:828
-371:2:832
-372:2:833
-373:2:841
-374:2:846
-375:2:850
-376:2:851
-377:2:858
-378:2:859
-379:2:870
-380:2:871
-381:2:872
-382:2:883
-383:2:888
-384:2:889
-385:0:1650
-386:2:901
-387:0:1650
-388:2:903
-389:0:1650
-390:2:906
-391:2:907
-392:2:919
-393:2:920
-394:2:924
-395:2:925
-396:2:933
-397:2:938
-398:2:942
-399:2:943
-400:2:950
-401:2:951
-402:2:962
-403:2:963
-404:2:964
-405:2:975
-406:2:980
-407:2:981
-408:0:1650
-409:2:993
-410:0:1650
-411:2:995
-412:0:1650
-413:2:996
-414:0:1650
-415:2:997
-416:0:1650
-417:2:998
-418:0:1650
-419:2:999
-420:2:1003
-421:2:1004
-422:2:1012
-423:2:1013
-424:2:1017
-425:2:1018
-426:2:1026
-427:2:1031
-428:2:1035
-429:2:1036
-430:2:1043
-431:2:1044
-432:2:1055
-433:2:1056
-434:2:1057
-435:2:1068
-436:2:1073
-437:2:1074
-438:0:1650
-439:2:1086
-440:0:1650
-441:2:1283
-442:0:1650
-443:2:1381
-444:0:1650
-445:2:1382
-446:0:1650
-447:2:1386
-448:0:1650
-449:2:1395
-450:2:1396
-451:2:1400
-452:2:1404
-453:2:1405
-454:2:1409
-455:2:1417
-456:2:1418
-457:2:1423
-458:2:1430
-459:2:1431
-460:2:1438
-461:2:1443
-462:0:1650
-463:2:1454
-464:0:1650
-465:2:1458
-466:2:1459
-467:2:1463
-468:2:1467
-469:2:1468
-470:2:1472
-471:2:1480
-472:2:1481
-473:2:1486
-474:2:1493
-475:2:1494
-476:2:1501
-477:2:1506
-478:0:1650
-479:2:1517
-480:0:1650
-481:2:1525
-482:2:1526
-483:2:1530
-484:2:1534
-485:2:1535
-486:2:1539
-487:2:1547
-488:2:1548
-489:2:1553
-490:2:1560
-491:2:1561
-492:2:1568
-493:2:1573
-494:0:1650
-495:2:1584
-496:0:1650
-497:2:1586
-498:0:1650
-499:2:1587
-500:0:1650
-501:2:423
-502:0:1650
-503:2:424
-504:2:428
-505:2:429
-506:2:437
-507:2:438
-508:2:442
-509:2:443
-510:2:451
-511:2:456
-512:2:460
-513:2:461
-514:2:468
-515:2:469
-516:2:480
-517:2:481
-518:2:482
-519:2:493
-520:2:498
-521:2:499
-522:0:1650
-523:2:511
-524:0:1650
-525:2:513
-526:2:514
-527:0:1650
-528:2:518
-529:2:522
-530:2:523
-531:2:531
-532:2:532
-533:2:536
-534:2:537
-535:2:545
-536:2:550
-537:2:551
-538:2:562
-539:2:563
-540:2:574
-541:2:575
-542:2:576
-543:2:587
-544:2:592
-545:2:593
-546:0:1650
-547:2:605
-548:0:1650
-549:2:607
-550:0:1650
-551:2:608
-552:0:1650
-553:2:618
-554:0:1650
-555:2:622
-556:2:623
-557:2:627
-558:2:631
-559:2:632
-560:2:636
-561:2:644
-562:2:645
-563:2:650
-564:2:657
-565:2:658
-566:2:665
-567:2:670
-568:0:1650
-569:2:681
-570:0:1650
-571:2:685
-572:2:686
-573:2:690
-574:2:694
-575:2:695
-576:2:699
-577:2:707
-578:2:708
-579:2:713
-580:2:720
-581:2:721
-582:2:728
-583:2:733
-584:0:1650
-585:2:744
-586:0:1650
-587:2:752
-588:2:753
-589:2:757
-590:2:761
-591:2:762
-592:2:766
-593:2:774
-594:2:775
-595:2:780
-596:2:787
-597:2:788
-598:2:795
-599:2:800
-600:0:1650
-601:2:811
-602:0:1650
-603:2:813
-604:0:1650
-605:2:814
-606:2:818
-607:2:819
-608:2:827
-609:2:828
-610:2:832
-611:2:833
-612:2:841
-613:2:846
-614:2:850
-615:2:851
-616:2:858
-617:2:859
-618:2:870
-619:2:871
-620:2:872
-621:2:883
-622:2:888
-623:2:889
-624:0:1650
-625:2:901
-626:0:1650
-627:2:903
-628:0:1650
-629:2:906
-630:2:907
-631:2:919
-632:2:920
-633:2:924
-634:2:925
-635:2:933
-636:2:938
-637:2:942
-638:2:943
-639:2:950
-640:2:951
-641:2:962
-642:2:963
-643:2:964
-644:2:975
-645:2:980
-646:2:981
-647:0:1650
-648:2:993
-649:0:1650
-650:2:995
-651:0:1650
-652:2:996
-653:0:1650
-654:2:997
-655:0:1650
-656:2:998
-657:0:1650
-658:2:999
-659:2:1003
-660:2:1004
-661:2:1012
-662:2:1013
-663:2:1017
-664:2:1018
-665:2:1026
-666:2:1031
-667:2:1035
-668:2:1036
-669:2:1043
-670:2:1044
-671:2:1055
-672:2:1056
-673:2:1057
-674:2:1068
-675:2:1073
-676:2:1074
-677:0:1650
-678:2:1086
-679:0:1650
-680:2:1283
-681:0:1650
-682:2:1381
-683:0:1650
-684:2:1382
-685:0:1650
-686:2:1386
-687:0:1650
-688:2:1395
-689:2:1396
-690:2:1400
-691:2:1404
-692:2:1405
-693:2:1409
-694:2:1417
-695:2:1418
-696:2:1423
-697:2:1430
-698:2:1431
-699:2:1438
-700:2:1443
-701:0:1650
-702:2:1454
-703:0:1650
-704:2:1458
-705:2:1459
-706:2:1463
-707:2:1467
-708:2:1468
-709:2:1472
-710:2:1480
-711:2:1481
-712:2:1486
-713:2:1493
-714:2:1494
-715:2:1501
-716:2:1506
-717:0:1650
-718:2:1517
-719:0:1650
-720:2:1525
-721:2:1526
-722:2:1530
-723:2:1534
-724:2:1535
-725:2:1539
-726:2:1547
-727:2:1548
-728:2:1553
-729:2:1560
-730:2:1561
-731:2:1568
-732:2:1573
-733:0:1650
-734:2:1584
-735:0:1650
-736:2:1586
-737:0:1650
-738:2:1587
-739:0:1650
-740:2:423
-741:0:1650
-742:2:424
-743:2:428
-744:2:429
-745:2:437
-746:2:438
-747:2:442
-748:2:443
-749:2:451
-750:2:456
-751:2:460
-752:2:461
-753:2:468
-754:2:469
-755:2:480
-756:2:481
-757:2:482
-758:2:493
-759:2:498
-760:2:499
-761:0:1650
-762:2:511
-763:0:1650
-764:2:513
-765:2:514
-766:0:1650
-767:2:518
-768:2:522
-769:2:523
-770:2:531
-771:2:532
-772:2:536
-773:2:537
-774:2:545
-775:2:550
-776:2:551
-777:2:562
-778:2:563
-779:2:574
-780:2:575
-781:2:576
-782:2:587
-783:2:592
-784:2:593
-785:0:1650
-786:2:605
-787:0:1650
-788:2:607
-789:0:1650
-790:2:608
-791:0:1650
-792:2:618
-793:0:1650
-794:2:622
-795:2:623
-796:2:627
-797:2:631
-798:2:632
-799:2:636
-800:2:644
-801:2:645
-802:2:650
-803:2:657
-804:2:658
-805:2:665
-806:2:670
-807:0:1650
-808:2:681
-809:0:1650
-810:2:685
-811:2:686
-812:2:690
-813:2:694
-814:2:695
-815:2:699
-816:2:707
-817:2:708
-818:2:713
-819:2:720
-820:2:721
-821:2:728
-822:2:733
-823:0:1650
-824:2:744
-825:0:1650
-826:2:752
-827:2:753
-828:2:757
-829:2:761
-830:2:762
-831:2:766
-832:2:774
-833:2:775
-834:2:780
-835:2:787
-836:2:788
-837:2:795
-838:2:800
-839:0:1650
-840:2:811
-841:0:1650
-842:2:813
-843:0:1650
-844:2:814
-845:2:818
-846:2:819
-847:2:827
-848:2:828
-849:2:832
-850:2:833
-851:2:841
-852:2:846
-853:2:850
-854:2:851
-855:2:858
-856:2:859
-857:2:870
-858:2:871
-859:2:872
-860:2:883
-861:2:888
-862:2:889
-863:0:1650
-864:2:901
-865:0:1650
-866:2:903
-867:0:1650
-868:2:906
-869:2:907
-870:2:919
-871:2:920
-872:2:924
-873:2:925
-874:2:933
-875:2:938
-876:2:942
-877:2:943
-878:2:950
-879:2:951
-880:2:962
-881:2:963
-882:2:964
-883:2:975
-884:2:980
-885:2:981
-886:0:1650
-887:2:993
-888:0:1650
-889:2:995
-890:0:1650
-891:2:996
-892:0:1650
-893:2:997
-894:0:1650
-895:2:998
-896:0:1650
-897:2:999
-898:2:1003
-899:2:1004
-900:2:1012
-901:2:1013
-902:2:1017
-903:2:1018
-904:2:1026
-905:2:1031
-906:2:1035
-907:2:1036
-908:2:1043
-909:2:1044
-910:2:1055
-911:2:1056
-912:2:1057
-913:2:1068
-914:2:1073
-915:2:1074
-916:0:1650
-917:2:1086
-918:0:1650
-919:2:1283
-920:0:1650
-921:2:1381
-922:0:1650
-923:2:1382
-924:0:1650
-925:2:1386
-926:0:1650
-927:2:1395
-928:2:1396
-929:2:1400
-930:2:1404
-931:2:1405
-932:2:1409
-933:2:1417
-934:2:1418
-935:2:1423
-936:2:1430
-937:2:1431
-938:2:1438
-939:2:1443
-940:0:1650
-941:2:1454
-942:0:1650
-943:1:2
-944:0:1650
-945:1:8
-946:0:1650
-947:1:9
-948:0:1650
-949:1:10
-950:0:1650
-951:1:11
-952:0:1650
-953:1:12
-954:1:16
-955:1:17
-956:1:25
-957:1:26
-958:1:30
-959:1:31
-960:1:39
-961:1:44
-962:1:48
-963:1:49
-964:1:63
-965:1:64
-966:1:68
-967:1:69
-968:1:70
-969:1:81
-970:1:86
-971:1:87
-972:0:1650
-973:1:99
-974:0:1650
-975:1:101
-976:0:1650
-977:1:102
-978:1:106
-979:1:107
-980:1:115
-981:1:116
-982:1:120
-983:1:121
-984:1:129
-985:1:134
-986:1:138
-987:1:139
-988:1:153
-989:1:154
-990:1:158
-991:1:159
-992:1:160
-993:1:171
-994:1:176
-995:1:177
-996:0:1650
-997:1:189
-998:0:1650
-999:1:191
-1000:0:1650
-1001:1:192
-1002:0:1650
-1003:2:1458
-1004:2:1459
-1005:2:1463
-1006:2:1467
-1007:2:1468
-1008:2:1472
-1009:2:1480
-1010:2:1481
-1011:2:1486
-1012:2:1493
-1013:2:1494
-1014:2:1501
-1015:2:1506
-1016:0:1650
-1017:2:1517
-1018:0:1650
-1019:2:1525
-1020:2:1526
-1021:2:1530
-1022:2:1534
-1023:2:1535
-1024:2:1539
-1025:2:1547
-1026:2:1548
-1027:2:1553
-1028:2:1560
-1029:2:1561
-1030:2:1568
-1031:2:1573
-1032:0:1650
-1033:2:1584
-1034:0:1650
-1035:2:1586
-1036:0:1650
-1037:2:1587
-1038:0:1650
-1039:2:423
-1040:0:1650
-1041:2:424
-1042:2:428
-1043:2:429
-1044:2:437
-1045:2:438
-1046:2:442
-1047:2:443
-1048:2:451
-1049:2:456
-1050:2:460
-1051:2:461
-1052:2:468
-1053:2:469
-1054:2:480
-1055:2:481
-1056:2:482
-1057:2:493
-1058:2:498
-1059:2:499
-1060:0:1650
-1061:2:511
-1062:0:1650
-1063:2:513
-1064:2:514
-1065:0:1650
-1066:2:518
-1067:2:522
-1068:2:523
-1069:2:531
-1070:2:532
-1071:2:536
-1072:2:537
-1073:2:545
-1074:2:550
-1075:2:551
-1076:2:562
-1077:2:563
-1078:2:574
-1079:2:575
-1080:2:576
-1081:2:587
-1082:2:592
-1083:2:593
-1084:0:1650
-1085:2:605
-1086:0:1650
-1087:2:607
-1088:0:1650
-1089:2:608
-1090:0:1650
-1091:2:618
-1092:0:1650
-1093:2:622
-1094:2:623
-1095:2:627
-1096:2:631
-1097:2:632
-1098:2:636
-1099:2:644
-1100:2:645
-1101:2:650
-1102:2:657
-1103:2:658
-1104:2:665
-1105:2:670
-1106:0:1650
-1107:2:681
-1108:0:1650
-1109:1:193
-1110:1:197
-1111:1:198
-1112:1:206
-1113:1:207
-1114:1:211
-1115:1:212
-1116:1:220
-1117:1:225
-1118:1:229
-1119:1:230
-1120:1:237
-1121:1:238
-1122:1:249
-1123:1:250
-1124:1:251
-1125:1:262
-1126:1:274
-1127:1:275
-1128:0:1650
-1129:1:280
-1130:0:1650
-1131:1:282
-1132:0:1650
-1133:1:291
-1134:0:1650
-1135:1:293
-1136:0:1650
-1137:1:11
-1138:0:1650
-1139:1:12
-1140:1:16
-1141:1:17
-1142:1:25
-1143:1:26
-1144:1:27
-1145:1:39
-1146:1:44
-1147:1:48
-1148:1:49
-1149:1:56
-1150:1:57
-1151:1:68
-1152:1:69
-1153:1:70
-1154:1:81
-1155:1:93
-1156:1:94
-1157:0:1650
-1158:1:99
-1159:0:1650
-1160:1:101
-1161:0:1650
-1162:1:102
-1163:1:106
-1164:1:107
-1165:1:115
-1166:1:116
-1167:1:120
-1168:1:121
-1169:1:129
-1170:1:134
-1171:1:138
-1172:1:139
-1173:1:146
-1174:1:147
-1175:1:158
-1176:1:159
-1177:1:160
-1178:1:171
-1179:1:183
-1180:1:184
-1181:0:1650
-1182:1:189
-1183:0:1650
-1184:1:285
-1185:0:1650
-1186:1:286
-1187:0:1650
-1188:1:291
-1189:0:1650
-1190:1:293
-1191:0:1650
-1192:1:296
-1193:0:1650
-1194:1:301
-1195:0:1650
-1196:2:685
-1197:2:686
-1198:2:690
-1199:2:691
-1200:2:699
-1201:2:707
-1202:2:708
-1203:2:713
-1204:2:720
-1205:2:721
-1206:2:728
-1207:2:733
-1208:0:1650
-1209:2:744
-1210:0:1650
-1211:2:752
-1212:2:753
-1213:2:757
-1214:2:761
-1215:2:762
-1216:2:766
-1217:2:774
-1218:2:775
-1219:2:780
-1220:2:787
-1221:2:788
-1222:2:795
-1223:2:800
-1224:0:1650
-1225:2:811
-1226:0:1650
-1227:2:813
-1228:0:1650
-1229:2:814
-1230:2:818
-1231:2:819
-1232:2:827
-1233:2:828
-1234:2:832
-1235:2:833
-1236:2:841
-1237:2:846
-1238:2:850
-1239:2:851
-1240:2:858
-1241:2:859
-1242:2:870
-1243:2:871
-1244:2:872
-1245:2:883
-1246:2:888
-1247:2:889
-1248:0:1650
-1249:2:901
-1250:0:1650
-1251:2:903
-1252:0:1650
-1253:2:906
-1254:2:907
-1255:2:919
-1256:2:920
-1257:2:924
-1258:2:925
-1259:2:933
-1260:2:938
-1261:2:942
-1262:2:943
-1263:2:950
-1264:2:951
-1265:2:962
-1266:2:963
-1267:2:964
-1268:2:975
-1269:2:980
-1270:2:981
-1271:0:1650
-1272:2:993
-1273:0:1650
-1274:2:995
-1275:0:1650
-1276:2:996
-1277:0:1650
-1278:2:997
-1279:0:1650
-1280:2:998
-1281:0:1650
-1282:2:999
-1283:2:1003
-1284:2:1004
-1285:2:1012
-1286:2:1013
-1287:2:1017
-1288:2:1018
-1289:2:1026
-1290:2:1031
-1291:2:1035
-1292:2:1036
-1293:2:1043
-1294:2:1044
-1295:2:1055
-1296:2:1056
-1297:2:1057
-1298:2:1068
-1299:2:1073
-1300:2:1074
-1301:0:1650
-1302:2:1086
-1303:0:1650
-1304:2:1283
-1305:0:1650
-1306:2:1381
-1307:0:1650
-1308:2:1382
-1309:0:1650
-1310:2:1386
-1311:0:1650
-1312:2:1395
-1313:2:1396
-1314:2:1400
-1315:2:1404
-1316:2:1405
-1317:2:1409
-1318:2:1417
-1319:2:1418
-1320:2:1423
-1321:2:1430
-1322:2:1431
-1323:2:1438
-1324:2:1443
-1325:0:1650
-1326:2:1454
-1327:0:1650
-1328:2:1458
-1329:2:1459
-1330:2:1463
-1331:2:1467
-1332:2:1468
-1333:2:1472
-1334:2:1480
-1335:2:1481
-1336:2:1486
-1337:2:1493
-1338:2:1494
-1339:2:1501
-1340:2:1506
-1341:0:1650
-1342:2:1517
-1343:0:1650
-1344:2:1525
-1345:2:1526
-1346:2:1530
-1347:2:1534
-1348:2:1535
-1349:2:1539
-1350:2:1547
-1351:2:1548
-1352:2:1553
-1353:2:1560
-1354:2:1561
-1355:2:1568
-1356:2:1573
-1357:0:1650
-1358:2:1584
-1359:0:1650
-1360:2:1586
-1361:0:1650
-1362:2:1587
-1363:0:1650
-1364:2:1590
-1365:0:1650
-1366:2:1595
-1367:0:1650
-1368:1:302
-1369:0:1648
-1370:2:1596
-1371:0:1654
-1372:0:1650
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress.ltl b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.define b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.log
deleted file mode 100644 (file)
index 9e98b9f..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 1767: Claim reached state 9 (line 748)
-Depth=    3880 States=    1e+06 Transitions= 1.71e+07 Memory=   499.651        t=   14.5 R=   7e+04
-Depth=    3880 States=    2e+06 Transitions= 3.79e+07 Memory=   532.365        t=   32.3 R=   6e+04
-Depth=    3880 States=    3e+06 Transitions= 5.83e+07 Memory=   564.983        t=   50.2 R=   6e+04
-pan: resizing hashtable to -w22..  done
-Depth=    3880 States=    4e+06 Transitions= 7.76e+07 Memory=   629.307        t=     67 R=   6e+04
-Depth=    3880 States=    5e+06 Transitions= 9.78e+07 Memory=   662.315        t=   84.2 R=   6e+04
-Depth=    3880 States=    6e+06 Transitions= 1.19e+08 Memory=   694.736        t=    102 R=   6e+04
-Depth=    3880 States=    7e+06 Transitions= 1.38e+08 Memory=   727.842        t=    119 R=   6e+04
-Depth=    3880 States=    8e+06 Transitions= 1.59e+08 Memory=   760.752        t=    137 R=   6e+04
-Depth=    3880 States=    9e+06 Transitions= 1.79e+08 Memory=   793.174        t=    155 R=   6e+04
-pan: resizing hashtable to -w24..  done
-Depth=    3880 States=    1e+07 Transitions= 1.98e+08 Memory=   950.568        t=    172 R=   6e+04
-Depth=    3880 States=  1.1e+07 Transitions= 2.19e+08 Memory=   983.479        t=    189 R=   6e+04
-Depth=    3880 States=  1.2e+07 Transitions=  2.4e+08 Memory=  1015.901        t=    207 R=   6e+04
-Depth=    3880 States=  1.3e+07 Transitions= 2.58e+08 Memory=  1049.397        t=    223 R=   6e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3880, errors: 0
-  7197860 states, stored (1.33457e+07 visited)
-2.5266654e+08 states, matched
-2.6601223e+08 transitions (= visited+matched)
-9.9067284e+08 atomic steps
-hash conflicts:  87783920 (resolved)
-
-Stats on memory usage (in Megabytes):
-  576.611      equivalent memory usage for states (stored*(State-vector + overhead))
-  474.839      actual memory usage for states (compression: 82.35%)
-               state-vector as stored = 41 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1060.529      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 230 seconds
-pan: rate  58151.15 states/second
-pan: avg transition delay 8.6274e-07 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 4b3d02e..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define READER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index 7c42af1..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4401
-2:4:4353
-3:4:4356
-4:4:4356
-5:4:4359
-6:4:4367
-7:4:4367
-8:4:4370
-9:4:4376
-10:4:4380
-11:4:4380
-12:4:4383
-13:4:4391
-14:4:4395
-15:4:4396
-16:0:4401
-17:4:4398
-18:0:4401
-19:3:2479
-20:0:4401
-21:3:2485
-22:0:4401
-23:3:2486
-24:0:4401
-25:3:2487
-26:3:2491
-27:3:2492
-28:3:2500
-29:3:2501
-30:3:2505
-31:3:2506
-32:3:2514
-33:3:2519
-34:3:2523
-35:3:2524
-36:3:2531
-37:3:2532
-38:3:2543
-39:3:2544
-40:3:2545
-41:3:2556
-42:3:2561
-43:3:2562
-44:0:4401
-45:3:2574
-46:0:4401
-47:3:2576
-48:3:2577
-49:0:4401
-50:3:2581
-51:3:2585
-52:3:2586
-53:3:2594
-54:3:2595
-55:3:2599
-56:3:2600
-57:3:2608
-58:3:2613
-59:3:2614
-60:3:2625
-61:3:2626
-62:3:2637
-63:3:2638
-64:3:2639
-65:3:2650
-66:3:2655
-67:3:2656
-68:0:4401
-69:3:2668
-70:0:4401
-71:3:2670
-72:0:4401
-73:3:2671
-74:0:4401
-75:3:2681
-76:0:4401
-77:3:2682
-78:0:4401
-79:3:2686
-80:3:2687
-81:3:2691
-82:3:2695
-83:3:2696
-84:3:2700
-85:3:2708
-86:3:2709
-87:3:2714
-88:3:2721
-89:3:2722
-90:3:2729
-91:3:2734
-92:0:4401
-93:3:2745
-94:0:4401
-95:3:2749
-96:3:2750
-97:3:2754
-98:3:2758
-99:3:2759
-100:3:2763
-101:3:2771
-102:3:2772
-103:3:2777
-104:3:2784
-105:3:2785
-106:3:2792
-107:3:2797
-108:0:4401
-109:3:2808
-110:0:4401
-111:3:2816
-112:3:2817
-113:3:2821
-114:3:2825
-115:3:2826
-116:3:2830
-117:3:2838
-118:3:2839
-119:3:2844
-120:3:2851
-121:3:2852
-122:3:2859
-123:3:2864
-124:0:4401
-125:3:2879
-126:0:4401
-127:3:2881
-128:0:4401
-129:3:2882
-130:3:2886
-131:3:2887
-132:3:2895
-133:3:2896
-134:3:2900
-135:3:2901
-136:3:2909
-137:3:2914
-138:3:2918
-139:3:2919
-140:3:2926
-141:3:2927
-142:3:2938
-143:3:2939
-144:3:2940
-145:3:2951
-146:3:2956
-147:3:2957
-148:0:4401
-149:3:2969
-150:0:4401
-151:3:2971
-152:0:4401
-153:3:2974
-154:3:2975
-155:3:2987
-156:3:2988
-157:3:2992
-158:3:2993
-159:3:3001
-160:3:3006
-161:3:3010
-162:3:3011
-163:3:3018
-164:3:3019
-165:3:3030
-166:3:3031
-167:3:3032
-168:3:3043
-169:3:3048
-170:3:3049
-171:0:4401
-172:3:3061
-173:0:4401
-174:3:3063
-175:0:4401
-176:3:3064
-177:0:4401
-178:3:3065
-179:0:4401
-180:3:3066
-181:0:4401
-182:3:3067
-183:3:3071
-184:3:3072
-185:3:3080
-186:3:3081
-187:3:3085
-188:3:3086
-189:3:3094
-190:3:3099
-191:3:3103
-192:3:3104
-193:3:3111
-194:3:3112
-195:3:3123
-196:3:3124
-197:3:3125
-198:3:3136
-199:3:3141
-200:3:3142
-201:0:4401
-202:3:3154
-203:0:4401
-204:3:3356
-205:0:4401
-206:3:3454
-207:0:4401
-208:3:3455
-209:0:4401
-210:3:3459
-211:0:4401
-212:3:3465
-213:3:3469
-214:3:3470
-215:3:3478
-216:3:3479
-217:3:3483
-218:3:3484
-219:3:3492
-220:3:3497
-221:3:3501
-222:3:3502
-223:3:3509
-224:3:3510
-225:3:3521
-226:3:3522
-227:3:3523
-228:3:3534
-229:3:3539
-230:3:3540
-231:0:4401
-232:3:3552
-233:0:4401
-234:3:3554
-235:0:4401
-236:3:3555
-237:3:3559
-238:3:3560
-239:3:3568
-240:3:3569
-241:3:3573
-242:3:3574
-243:3:3582
-244:3:3587
-245:3:3591
-246:3:3592
-247:3:3599
-248:3:3600
-249:3:3611
-250:3:3612
-251:3:3613
-252:3:3624
-253:3:3629
-254:3:3630
-255:0:4401
-256:3:3642
-257:0:4401
-258:3:3644
-259:0:4401
-260:3:3647
-261:3:3648
-262:3:3660
-263:3:3661
-264:3:3665
-265:3:3666
-266:3:3674
-267:3:3679
-268:3:3683
-269:3:3684
-270:3:3691
-271:3:3692
-272:3:3703
-273:3:3704
-274:3:3705
-275:3:3716
-276:3:3721
-277:3:3722
-278:0:4401
-279:3:3734
-280:0:4401
-281:3:3736
-282:0:4401
-283:3:3737
-284:0:4401
-285:3:3738
-286:0:4401
-287:3:3739
-288:0:4401
-289:3:3740
-290:3:3744
-291:3:3745
-292:3:3753
-293:3:3754
-294:3:3758
-295:3:3759
-296:3:3767
-297:3:3772
-298:3:3776
-299:3:3777
-300:3:3784
-301:3:3785
-302:3:3796
-303:3:3797
-304:3:3798
-305:3:3809
-306:3:3814
-307:3:3815
-308:0:4401
-309:3:3827
-310:0:4401
-311:3:4029
-312:0:4401
-313:3:4127
-314:0:4401
-315:3:4128
-316:0:4401
-317:3:4132
-318:0:4401
-319:3:4138
-320:0:4401
-321:3:4142
-322:3:4143
-323:3:4147
-324:3:4151
-325:3:4152
-326:3:4156
-327:3:4164
-328:3:4165
-329:3:4170
-330:3:4177
-331:3:4178
-332:3:4185
-333:3:4190
-334:0:4401
-335:3:4201
-336:0:4401
-337:3:4205
-338:3:4206
-339:3:4210
-340:3:4214
-341:3:4215
-342:3:4219
-343:3:4227
-344:3:4228
-345:3:4233
-346:3:4240
-347:3:4241
-348:3:4248
-349:3:4253
-350:0:4401
-351:3:4264
-352:0:4401
-353:3:4272
-354:3:4273
-355:3:4277
-356:3:4281
-357:3:4282
-358:3:4286
-359:3:4294
-360:3:4295
-361:3:4300
-362:3:4307
-363:3:4308
-364:3:4315
-365:3:4320
-366:0:4401
-367:3:4335
-368:0:4401
-369:3:4337
-370:0:4401
-371:3:4338
-372:0:4401
-373:3:2486
-374:0:4401
-375:3:2487
-376:3:2491
-377:3:2492
-378:3:2500
-379:3:2501
-380:3:2505
-381:3:2506
-382:3:2514
-383:3:2519
-384:3:2523
-385:3:2524
-386:3:2531
-387:3:2532
-388:3:2543
-389:3:2544
-390:3:2545
-391:3:2556
-392:3:2561
-393:3:2562
-394:0:4401
-395:3:2574
-396:0:4401
-397:3:2576
-398:3:2577
-399:0:4401
-400:3:2581
-401:3:2585
-402:3:2586
-403:3:2594
-404:3:2595
-405:3:2599
-406:3:2600
-407:3:2608
-408:3:2613
-409:3:2614
-410:3:2625
-411:3:2626
-412:3:2637
-413:3:2638
-414:3:2639
-415:3:2650
-416:3:2655
-417:3:2656
-418:0:4401
-419:3:2668
-420:0:4401
-421:3:2670
-422:0:4401
-423:3:2671
-424:0:4401
-425:3:2681
-426:0:4401
-427:3:2682
-428:0:4401
-429:3:2686
-430:3:2687
-431:3:2691
-432:3:2695
-433:3:2696
-434:3:2700
-435:3:2708
-436:3:2709
-437:3:2714
-438:3:2721
-439:3:2722
-440:3:2729
-441:3:2734
-442:0:4401
-443:3:2745
-444:0:4401
-445:3:2749
-446:3:2750
-447:3:2754
-448:3:2758
-449:3:2759
-450:3:2763
-451:3:2771
-452:3:2772
-453:3:2777
-454:3:2784
-455:3:2785
-456:3:2792
-457:3:2797
-458:0:4401
-459:3:2808
-460:0:4401
-461:3:2816
-462:3:2817
-463:3:2821
-464:3:2825
-465:3:2826
-466:3:2830
-467:3:2838
-468:3:2839
-469:3:2844
-470:3:2851
-471:3:2852
-472:3:2859
-473:3:2864
-474:0:4401
-475:3:2879
-476:0:4401
-477:3:2881
-478:0:4401
-479:3:2882
-480:3:2886
-481:3:2887
-482:3:2895
-483:3:2896
-484:3:2900
-485:3:2901
-486:3:2909
-487:3:2914
-488:3:2918
-489:3:2919
-490:3:2926
-491:3:2927
-492:3:2938
-493:3:2939
-494:3:2940
-495:3:2951
-496:3:2956
-497:3:2957
-498:0:4401
-499:3:2969
-500:0:4401
-501:3:2971
-502:0:4401
-503:3:2974
-504:3:2975
-505:3:2987
-506:3:2988
-507:3:2992
-508:3:2993
-509:3:3001
-510:3:3006
-511:3:3010
-512:3:3011
-513:3:3018
-514:3:3019
-515:3:3030
-516:3:3031
-517:3:3032
-518:3:3043
-519:3:3048
-520:3:3049
-521:0:4401
-522:3:3061
-523:0:4401
-524:3:3063
-525:0:4401
-526:3:3064
-527:0:4401
-528:3:3065
-529:0:4401
-530:3:3066
-531:0:4401
-532:3:3067
-533:3:3071
-534:3:3072
-535:3:3080
-536:3:3081
-537:3:3085
-538:3:3086
-539:3:3094
-540:3:3099
-541:3:3103
-542:3:3104
-543:3:3111
-544:3:3112
-545:3:3123
-546:3:3124
-547:3:3125
-548:3:3136
-549:3:3141
-550:3:3142
-551:0:4401
-552:3:3154
-553:0:4401
-554:3:3356
-555:0:4401
-556:3:3454
-557:0:4401
-558:3:3455
-559:0:4401
-560:3:3459
-561:0:4401
-562:3:3465
-563:3:3469
-564:3:3470
-565:3:3478
-566:3:3479
-567:3:3483
-568:3:3484
-569:3:3492
-570:3:3497
-571:3:3501
-572:3:3502
-573:3:3509
-574:3:3510
-575:3:3521
-576:3:3522
-577:3:3523
-578:3:3534
-579:3:3539
-580:3:3540
-581:0:4401
-582:3:3552
-583:0:4401
-584:3:3554
-585:0:4401
-586:3:3555
-587:3:3559
-588:3:3560
-589:3:3568
-590:3:3569
-591:3:3573
-592:3:3574
-593:3:3582
-594:3:3587
-595:3:3591
-596:3:3592
-597:3:3599
-598:3:3600
-599:3:3611
-600:3:3612
-601:3:3613
-602:3:3624
-603:3:3629
-604:3:3630
-605:0:4401
-606:3:3642
-607:0:4401
-608:3:3644
-609:0:4401
-610:3:3647
-611:3:3648
-612:3:3660
-613:3:3661
-614:3:3665
-615:3:3666
-616:3:3674
-617:3:3679
-618:3:3683
-619:3:3684
-620:3:3691
-621:3:3692
-622:3:3703
-623:3:3704
-624:3:3705
-625:3:3716
-626:3:3721
-627:3:3722
-628:0:4401
-629:3:3734
-630:0:4401
-631:3:3736
-632:0:4401
-633:3:3737
-634:0:4401
-635:3:3738
-636:0:4401
-637:3:3739
-638:0:4401
-639:3:3740
-640:3:3744
-641:3:3745
-642:3:3753
-643:3:3754
-644:3:3758
-645:3:3759
-646:3:3767
-647:3:3772
-648:3:3776
-649:3:3777
-650:3:3784
-651:3:3785
-652:3:3796
-653:3:3797
-654:3:3798
-655:3:3809
-656:3:3814
-657:3:3815
-658:0:4401
-659:3:3827
-660:0:4401
-661:3:4029
-662:0:4401
-663:3:4127
-664:0:4401
-665:3:4128
-666:0:4401
-667:3:4132
-668:0:4401
-669:3:4138
-670:0:4401
-671:3:4142
-672:3:4143
-673:3:4147
-674:3:4151
-675:3:4152
-676:3:4156
-677:3:4164
-678:3:4165
-679:3:4170
-680:3:4177
-681:3:4178
-682:3:4185
-683:3:4190
-684:0:4401
-685:3:4201
-686:0:4401
-687:3:4205
-688:3:4206
-689:3:4210
-690:3:4214
-691:3:4215
-692:3:4219
-693:3:4227
-694:3:4228
-695:3:4233
-696:3:4240
-697:3:4241
-698:3:4248
-699:3:4253
-700:0:4401
-701:3:4264
-702:0:4401
-703:3:4272
-704:3:4273
-705:3:4277
-706:3:4281
-707:3:4282
-708:3:4286
-709:3:4294
-710:3:4295
-711:3:4300
-712:3:4307
-713:3:4308
-714:3:4315
-715:3:4320
-716:0:4401
-717:3:4335
-718:0:4401
-719:3:4337
-720:0:4401
-721:3:4338
-722:0:4401
-723:3:2486
-724:0:4401
-725:3:2487
-726:3:2491
-727:3:2492
-728:3:2500
-729:3:2501
-730:3:2505
-731:3:2506
-732:3:2514
-733:3:2519
-734:3:2523
-735:3:2524
-736:3:2531
-737:3:2532
-738:3:2543
-739:3:2544
-740:3:2545
-741:3:2556
-742:3:2561
-743:3:2562
-744:0:4401
-745:3:2574
-746:0:4401
-747:3:2576
-748:3:2577
-749:0:4401
-750:3:2581
-751:3:2585
-752:3:2586
-753:3:2594
-754:3:2595
-755:3:2599
-756:3:2600
-757:3:2608
-758:3:2613
-759:3:2614
-760:3:2625
-761:3:2626
-762:3:2637
-763:3:2638
-764:3:2639
-765:3:2650
-766:3:2655
-767:3:2656
-768:0:4401
-769:3:2668
-770:0:4401
-771:3:2670
-772:0:4401
-773:3:2671
-774:0:4401
-775:3:2681
-776:0:4401
-777:3:2682
-778:0:4401
-779:3:2686
-780:3:2687
-781:3:2691
-782:3:2695
-783:3:2696
-784:3:2700
-785:3:2708
-786:3:2709
-787:3:2714
-788:3:2721
-789:3:2722
-790:3:2729
-791:3:2734
-792:0:4401
-793:3:2745
-794:0:4401
-795:3:2749
-796:3:2750
-797:3:2754
-798:3:2758
-799:3:2759
-800:3:2763
-801:3:2771
-802:3:2772
-803:3:2777
-804:3:2784
-805:3:2785
-806:3:2792
-807:3:2797
-808:0:4401
-809:3:2808
-810:0:4401
-811:3:2816
-812:3:2817
-813:3:2821
-814:3:2825
-815:3:2826
-816:3:2830
-817:3:2838
-818:3:2839
-819:3:2844
-820:3:2851
-821:3:2852
-822:3:2859
-823:3:2864
-824:0:4401
-825:3:2879
-826:0:4401
-827:3:2881
-828:0:4401
-829:3:2882
-830:3:2886
-831:3:2887
-832:3:2895
-833:3:2896
-834:3:2900
-835:3:2901
-836:3:2909
-837:3:2914
-838:3:2918
-839:3:2919
-840:3:2926
-841:3:2927
-842:3:2938
-843:3:2939
-844:3:2940
-845:3:2951
-846:3:2956
-847:3:2957
-848:0:4401
-849:3:2969
-850:0:4401
-851:3:2971
-852:0:4401
-853:3:2974
-854:3:2975
-855:3:2987
-856:3:2988
-857:3:2992
-858:3:2993
-859:3:3001
-860:3:3006
-861:3:3010
-862:3:3011
-863:3:3018
-864:3:3019
-865:3:3030
-866:3:3031
-867:3:3032
-868:3:3043
-869:3:3048
-870:3:3049
-871:0:4401
-872:3:3061
-873:0:4401
-874:3:3063
-875:0:4401
-876:3:3064
-877:0:4401
-878:3:3065
-879:0:4401
-880:3:3066
-881:0:4401
-882:3:3067
-883:3:3071
-884:3:3072
-885:3:3080
-886:3:3081
-887:3:3085
-888:3:3086
-889:3:3094
-890:3:3099
-891:3:3103
-892:3:3104
-893:3:3111
-894:3:3112
-895:3:3123
-896:3:3124
-897:3:3125
-898:3:3136
-899:3:3141
-900:3:3142
-901:0:4401
-902:3:3154
-903:0:4401
-904:3:3356
-905:0:4401
-906:3:3454
-907:0:4401
-908:3:3455
-909:0:4401
-910:3:3459
-911:0:4401
-912:3:3465
-913:3:3469
-914:3:3470
-915:3:3478
-916:3:3479
-917:3:3483
-918:3:3484
-919:3:3492
-920:3:3497
-921:3:3501
-922:3:3502
-923:3:3509
-924:3:3510
-925:3:3521
-926:3:3522
-927:3:3523
-928:3:3534
-929:3:3539
-930:3:3540
-931:0:4401
-932:3:3552
-933:0:4401
-934:3:3554
-935:0:4401
-936:3:3555
-937:3:3559
-938:3:3560
-939:3:3568
-940:3:3569
-941:3:3573
-942:3:3574
-943:3:3582
-944:3:3587
-945:3:3591
-946:3:3592
-947:3:3599
-948:3:3600
-949:3:3611
-950:3:3612
-951:3:3613
-952:3:3624
-953:3:3629
-954:3:3630
-955:0:4401
-956:3:3642
-957:0:4401
-958:3:3644
-959:0:4401
-960:3:3647
-961:3:3648
-962:3:3660
-963:3:3661
-964:3:3665
-965:3:3666
-966:3:3674
-967:3:3679
-968:3:3683
-969:3:3684
-970:3:3691
-971:3:3692
-972:3:3703
-973:3:3704
-974:3:3705
-975:3:3716
-976:3:3721
-977:3:3722
-978:0:4401
-979:3:3734
-980:0:4401
-981:3:3736
-982:0:4401
-983:3:3737
-984:0:4401
-985:3:3738
-986:0:4401
-987:3:3739
-988:0:4401
-989:3:3740
-990:3:3744
-991:3:3745
-992:3:3753
-993:3:3754
-994:3:3758
-995:3:3759
-996:3:3767
-997:3:3772
-998:3:3776
-999:3:3777
-1000:3:3784
-1001:3:3785
-1002:3:3796
-1003:3:3797
-1004:3:3798
-1005:3:3809
-1006:3:3814
-1007:3:3815
-1008:0:4401
-1009:3:3827
-1010:0:4401
-1011:3:4029
-1012:0:4401
-1013:3:4127
-1014:0:4401
-1015:3:4128
-1016:0:4401
-1017:3:4132
-1018:0:4401
-1019:3:4138
-1020:0:4401
-1021:3:4142
-1022:3:4143
-1023:3:4147
-1024:3:4151
-1025:3:4152
-1026:3:4156
-1027:3:4164
-1028:3:4165
-1029:3:4170
-1030:3:4177
-1031:3:4178
-1032:3:4185
-1033:3:4190
-1034:0:4401
-1035:3:4201
-1036:0:4401
-1037:3:4205
-1038:3:4206
-1039:3:4210
-1040:3:4214
-1041:3:4215
-1042:3:4219
-1043:3:4227
-1044:3:4228
-1045:3:4233
-1046:3:4240
-1047:3:4241
-1048:3:4248
-1049:3:4253
-1050:0:4401
-1051:3:4264
-1052:0:4401
-1053:3:4272
-1054:3:4273
-1055:3:4277
-1056:3:4281
-1057:3:4282
-1058:3:4286
-1059:3:4294
-1060:3:4295
-1061:3:4300
-1062:3:4307
-1063:3:4308
-1064:3:4315
-1065:3:4320
-1066:0:4401
-1067:3:4335
-1068:0:4401
-1069:3:4337
-1070:0:4401
-1071:3:4338
-1072:0:4401
-1073:3:4341
-1074:0:4401
-1075:3:4346
-1076:0:4401
-1077:2:1236
-1078:0:4401
-1079:3:4347
-1080:0:4401
-1081:2:1242
-1082:0:4401
-1083:3:4346
-1084:0:4401
-1085:2:1243
-1086:0:4401
-1087:3:4347
-1088:0:4401
-1089:2:1244
-1090:0:4401
-1091:3:4346
-1092:0:4401
-1093:2:1245
-1094:0:4401
-1095:3:4347
-1096:0:4401
-1097:1:2
-1098:0:4401
-1099:3:4346
-1100:0:4401
-1101:2:1246
-1102:0:4401
-1103:3:4347
-1104:0:4401
-1105:1:8
-1106:0:4401
-1107:3:4346
-1108:0:4401
-1109:2:1245
-1110:0:4401
-1111:3:4347
-1112:0:4401
-1113:1:9
-1114:0:4401
-1115:3:4346
-1116:0:4401
-1117:2:1246
-1118:0:4401
-1119:3:4347
-1120:0:4401
-1121:1:10
-1122:0:4401
-1123:3:4346
-1124:0:4401
-1125:2:1245
-1126:0:4401
-1127:3:4347
-1128:0:4401
-1129:1:11
-1130:0:4401
-1131:3:4346
-1132:0:4401
-1133:2:1246
-1134:0:4401
-1135:3:4347
-1136:0:4401
-1137:1:14
-1138:0:4401
-1139:3:4346
-1140:0:4401
-1141:2:1245
-1142:0:4401
-1143:3:4347
-1144:0:4401
-1145:1:15
-1146:0:4401
-1147:3:4346
-1148:0:4401
-1149:2:1246
-1150:0:4401
-1151:3:4347
-1152:0:4401
-1153:1:16
-1154:1:20
-1155:1:21
-1156:1:29
-1157:1:30
-1158:1:34
-1159:1:35
-1160:1:43
-1161:1:48
-1162:1:52
-1163:1:53
-1164:1:60
-1165:1:61
-1166:1:72
-1167:1:73
-1168:1:74
-1169:1:85
-1170:1:90
-1171:1:91
-1172:0:4401
-1173:3:4346
-1174:0:4401
-1175:2:1245
-1176:0:4401
-1177:3:4347
-1178:0:4401
-1179:1:103
-1180:0:4401
-1181:3:4346
-1182:0:4401
-1183:2:1246
-1184:0:4401
-1185:3:4347
-1186:0:4401
-1187:2:1247
-1188:0:4401
-1189:3:4346
-1190:0:4401
-1191:2:1253
-1192:0:4401
-1193:3:4347
-1194:0:4401
-1195:2:1254
-1196:0:4399
-1197:3:4346
-1198:0:4405
-1199:3:4347
-1200:0:4405
-1201:2:1257
-1202:0:4405
-1203:3:4346
-1204:0:4405
-1205:2:1258
-1206:0:4405
-1207:3:4347
-1208:0:4405
-1209:2:1259
-1210:2:1263
-1211:2:1264
-1212:2:1272
-1213:2:1273
-1214:2:1277
-1215:2:1278
-1216:2:1286
-1217:2:1291
-1218:2:1295
-1219:2:1296
-1220:2:1303
-1221:2:1304
-1222:2:1315
-1223:2:1316
-1224:2:1317
-1225:2:1328
-1226:2:1333
-1227:2:1334
-1228:0:4405
-1229:3:4346
-1230:0:4405
-1231:2:1346
-1232:0:4405
-1233:3:4347
-1234:0:4405
-1235:2:1347
-1236:0:4405
-1237:3:4346
-1238:0:4405
-1239:1:104
--1:-1:-1
-1240:0:4405
-1241:3:4347
-1242:0:4405
-1243:3:4346
-1244:0:4405
-1245:2:1348
-1246:0:4405
-1247:3:4347
-1248:0:4405
-1249:2:1347
-1250:0:4405
-1251:3:4346
-1252:0:4405
-1253:1:105
-1254:0:4405
-1255:3:4347
-1256:0:4405
-1257:3:4346
-1258:0:4405
-1259:2:1348
-1260:0:4405
-1261:3:4347
-1262:0:4405
-1263:2:1347
-1264:0:4405
-1265:3:4346
-1266:0:4405
-1267:1:104
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.define b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.log
deleted file mode 100644 (file)
index 434151a..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 291: Claim reached state 9 (line 748)
-Depth=    2677 States=    1e+06 Transitions= 1.57e+07 Memory=   487.932        t=   13.4 R=   7e+04
-Depth=    3023 States=    2e+06 Transitions= 3.19e+07 Memory=   509.709        t=   27.3 R=   7e+04
-Depth=    3610 States=    3e+06 Transitions= 4.84e+07 Memory=   531.486        t=   41.6 R=   7e+04
-pan: resizing hashtable to -w22..  done
-Depth=    3956 States=    4e+06 Transitions= 6.63e+07 Memory=   595.029        t=     57 R=   7e+04
-Depth=    3956 States=    5e+06 Transitions= 8.67e+07 Memory=   617.783        t=   74.5 R=   7e+04
-Depth=    3956 States=    6e+06 Transitions= 1.08e+08 Memory=   660.850        t=     93 R=   6e+04
-Depth=    3956 States=    7e+06 Transitions= 1.28e+08 Memory=   690.928        t=    110 R=   6e+04
-Depth=    3956 States=    8e+06 Transitions= 1.51e+08 Memory=   729.600        t=    129 R=   6e+04
-Depth=    3956 States=    9e+06 Transitions=  1.7e+08 Memory=   765.830        t=    146 R=   6e+04
-pan: resizing hashtable to -w24..  done
-Depth=    3956 States=    1e+07 Transitions= 1.92e+08 Memory=   919.611        t=    166 R=   6e+04
-Depth=    3956 States=  1.1e+07 Transitions= 2.13e+08 Memory=   958.576        t=    183 R=   6e+04
-Depth=    3956 States=  1.2e+07 Transitions= 2.33e+08 Memory=   985.627        t=    201 R=   6e+04
-Depth=    3956 States=  1.3e+07 Transitions= 2.55e+08 Memory=  1027.033        t=    220 R=   6e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3956, errors: 0
-  7045896 states, stored (1.35792e+07 visited)
-2.5326206e+08 states, matched
-2.668413e+08 transitions (= visited+matched)
-9.9425626e+08 atomic steps
-hash conflicts:  65494104 (resolved)
-
-Stats on memory usage (in Megabytes):
-  564.437      equivalent memory usage for states (stored*(State-vector + overhead))
-  465.758      actual memory usage for states (compression: 82.52%)
-               state-vector as stored = 41 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1051.350      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 230 seconds
-pan: rate 59137.889 states/second
-pan: avg transition delay 8.6051e-07 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 575305f..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.define b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.log b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index 7fafb9e..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-depth 15: Claim reached state 9 (line 750)
-depth 291: Claim reached state 9 (line 749)
-pan: acceptance cycle (at depth 4308)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 4820, errors: 1
-    62091 states, stored (169917 visited)
-  2179326 states, matched
-  2349243 transitions (= visited+matched)
-  8805349 atomic steps
-hash conflicts:     50953 (resolved)
-
-Stats on memory usage (in Megabytes):
-    4.974      equivalent memory usage for states (stored*(State-vector + overhead))
-    4.145      actual memory usage for states (compression: 83.33%)
-               state-vector as stored = 42 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  469.865      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 151, "(1)"
-       line 419, "pan.___", state 181, "(1)"
-       line 400, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 242, "(1)"
-       line 419, "pan.___", state 272, "(1)"
-       line 400, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 360, "(1)"
-       line 419, "pan.___", state 390, "(1)"
-       line 541, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 402, "pan.___", state 134, "((i<1))"
-       line 402, "pan.___", state 134, "((i>=1))"
-       line 410, "pan.___", state 153, "(1)"
-       line 410, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 154, "else"
-       line 410, "pan.___", state 157, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 414, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 167, "else"
-       line 414, "pan.___", state 170, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 412, "pan.___", state 176, "((i<1))"
-       line 412, "pan.___", state 176, "((i>=1))"
-       line 419, "pan.___", state 183, "(1)"
-       line 419, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 184, "else"
-       line 419, "pan.___", state 187, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 370, "pan.___", state 193, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 647, "pan.___", state 202, "((write_lock==0))"
-       line 647, "pan.___", state 202, "else"
-       line 645, "pan.___", state 203, "(1)"
-       line 176, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 225, "((j<1))"
-       line 178, "pan.___", state 225, "((j>=1))"
-       line 184, "pan.___", state 230, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 240, "(1)"
-       line 165, "pan.___", state 248, "(1)"
-       line 165, "pan.___", state 249, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 165, "pan.___", state 249, "else"
-       line 163, "pan.___", state 254, "((j<1))"
-       line 163, "pan.___", state 254, "((j>=1))"
-       line 169, "pan.___", state 260, "(1)"
-       line 169, "pan.___", state 261, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 169, "pan.___", state 261, "else"
-       line 171, "pan.___", state 264, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 171, "pan.___", state 264, "else"
-       line 176, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 180, "pan.___", state 280, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 288, "((j<1))"
-       line 178, "pan.___", state 288, "((j>=1))"
-       line 184, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 303, "(1)"
-       line 165, "pan.___", state 311, "(1)"
-       line 165, "pan.___", state 312, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 165, "pan.___", state 312, "else"
-       line 163, "pan.___", state 317, "((j<1))"
-       line 163, "pan.___", state 317, "((j>=1))"
-       line 169, "pan.___", state 323, "(1)"
-       line 169, "pan.___", state 324, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 324, "else"
-       line 171, "pan.___", state 327, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 171, "pan.___", state 327, "else"
-       line 215, "pan.___", state 333, "((i<1))"
-       line 215, "pan.___", state 333, "((i>=1))"
-       line 176, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 355, "((j<1))"
-       line 178, "pan.___", state 355, "((j>=1))"
-       line 184, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 370, "(1)"
-       line 165, "pan.___", state 378, "(1)"
-       line 165, "pan.___", state 379, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 165, "pan.___", state 379, "else"
-       line 163, "pan.___", state 384, "((j<1))"
-       line 163, "pan.___", state 384, "((j>=1))"
-       line 169, "pan.___", state 390, "(1)"
-       line 169, "pan.___", state 391, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 169, "pan.___", state 391, "else"
-       line 171, "pan.___", state 394, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 171, "pan.___", state 394, "else"
-       line 400, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 410, "(1)"
-       line 404, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 424, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 402, "pan.___", state 430, "((i<1))"
-       line 402, "pan.___", state 430, "((i>=1))"
-       line 409, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 449, "(1)"
-       line 410, "pan.___", state 450, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 450, "else"
-       line 410, "pan.___", state 453, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 414, "pan.___", state 462, "(1)"
-       line 414, "pan.___", state 463, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 463, "else"
-       line 414, "pan.___", state 466, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 412, "pan.___", state 472, "((i<1))"
-       line 412, "pan.___", state 472, "((i>=1))"
-       line 419, "pan.___", state 479, "(1)"
-       line 419, "pan.___", state 480, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 480, "else"
-       line 419, "pan.___", state 483, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 370, "pan.___", state 489, "(1)"
-       line 662, "pan.___", state 492, "cached_urcu_gp_ctr.val[_pid] = (tmp^(1<<7))"
-       line 400, "pan.___", state 498, "(1)"
-       line 400, "pan.___", state 499, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 499, "else"
-       line 400, "pan.___", state 502, "(1)"
-       line 404, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 516, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 402, "pan.___", state 522, "((i<1))"
-       line 402, "pan.___", state 522, "((i>=1))"
-       line 409, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 541, "(1)"
-       line 410, "pan.___", state 542, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 542, "else"
-       line 410, "pan.___", state 545, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 414, "pan.___", state 554, "(1)"
-       line 414, "pan.___", state 555, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 555, "else"
-       line 414, "pan.___", state 558, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 412, "pan.___", state 564, "((i<1))"
-       line 412, "pan.___", state 564, "((i>=1))"
-       line 419, "pan.___", state 571, "(1)"
-       line 419, "pan.___", state 572, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 572, "else"
-       line 419, "pan.___", state 575, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 370, "pan.___", state 581, "(1)"
-       line 400, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 595, "(1)"
-       line 404, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 609, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 402, "pan.___", state 615, "((i<1))"
-       line 402, "pan.___", state 615, "((i>=1))"
-       line 409, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 634, "(1)"
-       line 410, "pan.___", state 635, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 635, "else"
-       line 410, "pan.___", state 638, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 414, "pan.___", state 647, "(1)"
-       line 414, "pan.___", state 648, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 648, "else"
-       line 414, "pan.___", state 651, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 412, "pan.___", state 657, "((i<1))"
-       line 412, "pan.___", state 657, "((i>=1))"
-       line 419, "pan.___", state 664, "(1)"
-       line 419, "pan.___", state 665, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 665, "else"
-       line 419, "pan.___", state 668, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 370, "pan.___", state 674, "(1)"
-       line 400, "pan.___", state 679, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 681, "(1)"
-       line 400, "pan.___", state 682, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 682, "else"
-       line 400, "pan.___", state 685, "(1)"
-       line 404, "pan.___", state 693, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 695, "(1)"
-       line 404, "pan.___", state 696, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 696, "else"
-       line 404, "pan.___", state 699, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 402, "pan.___", state 705, "((i<1))"
-       line 402, "pan.___", state 705, "((i>=1))"
-       line 409, "pan.___", state 711, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 724, "(1)"
-       line 410, "pan.___", state 725, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 725, "else"
-       line 410, "pan.___", state 728, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 414, "pan.___", state 737, "(1)"
-       line 414, "pan.___", state 738, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 738, "else"
-       line 414, "pan.___", state 741, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 412, "pan.___", state 747, "((i<1))"
-       line 412, "pan.___", state 747, "((i>=1))"
-       line 419, "pan.___", state 754, "(1)"
-       line 419, "pan.___", state 755, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 755, "else"
-       line 419, "pan.___", state 758, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 370, "pan.___", state 764, "(1)"
-       line 430, "pan.___", state 767, "(((tmp2&((1<<7)-1))&&((tmp2^cached_urcu_gp_ctr.val[_pid])&(1<<7))))"
-       line 430, "pan.___", state 767, "else"
-       line 400, "pan.___", state 777, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 779, "(1)"
-       line 400, "pan.___", state 780, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 780, "else"
-       line 400, "pan.___", state 783, "(1)"
-       line 404, "pan.___", state 791, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 793, "(1)"
-       line 404, "pan.___", state 794, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 794, "else"
-       line 404, "pan.___", state 797, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 402, "pan.___", state 803, "((i<1))"
-       line 402, "pan.___", state 803, "((i>=1))"
-       line 409, "pan.___", state 809, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 822, "(1)"
-       line 410, "pan.___", state 823, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 823, "else"
-       line 410, "pan.___", state 826, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 414, "pan.___", state 835, "(1)"
-       line 414, "pan.___", state 836, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 836, "else"
-       line 414, "pan.___", state 839, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 412, "pan.___", state 845, "((i<1))"
-       line 412, "pan.___", state 845, "((i>=1))"
-       line 419, "pan.___", state 852, "(1)"
-       line 419, "pan.___", state 853, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 853, "else"
-       line 419, "pan.___", state 856, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 370, "pan.___", state 862, "(1)"
-       line 449, "pan.___", state 870, "((tmp<1))"
-       line 449, "pan.___", state 870, "((tmp>=1))"
-       line 462, "pan.___", state 873, "tmp = 0"
-       line 400, "pan.___", state 877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 883, "(1)"
-       line 404, "pan.___", state 891, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 897, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 903, "((i<1))"
-       line 402, "pan.___", state 903, "((i>=1))"
-       line 409, "pan.___", state 909, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 922, "(1)"
-       line 410, "pan.___", state 923, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 923, "else"
-       line 410, "pan.___", state 926, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 414, "pan.___", state 935, "(1)"
-       line 414, "pan.___", state 936, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 936, "else"
-       line 414, "pan.___", state 939, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 945, "((i<1))"
-       line 412, "pan.___", state 945, "((i>=1))"
-       line 419, "pan.___", state 952, "(1)"
-       line 419, "pan.___", state 953, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 953, "else"
-       line 419, "pan.___", state 956, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 370, "pan.___", state 962, "(1)"
-       line 671, "pan.___", state 963, "tmp = cached_urcu_gp_ctr.val[_pid]"
-       line 400, "pan.___", state 967, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 973, "(1)"
-       line 404, "pan.___", state 981, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 987, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 402, "pan.___", state 993, "((i<1))"
-       line 402, "pan.___", state 993, "((i>=1))"
-       line 409, "pan.___", state 999, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1012, "(1)"
-       line 410, "pan.___", state 1013, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1013, "else"
-       line 410, "pan.___", state 1016, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 414, "pan.___", state 1025, "(1)"
-       line 414, "pan.___", state 1026, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1026, "else"
-       line 414, "pan.___", state 1029, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 412, "pan.___", state 1035, "((i<1))"
-       line 412, "pan.___", state 1035, "((i>=1))"
-       line 419, "pan.___", state 1042, "(1)"
-       line 419, "pan.___", state 1043, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1043, "else"
-       line 419, "pan.___", state 1046, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 370, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1061, "(1)"
-       line 404, "pan.___", state 1073, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1091, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1117, "(1)"
-       line 419, "pan.___", state 1134, "(1)"
-       line 404, "pan.___", state 1166, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1184, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1210, "(1)"
-       line 419, "pan.___", state 1227, "(1)"
-       line 400, "pan.___", state 1242, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1256, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1287, "(1)"
-       line 414, "pan.___", state 1300, "(1)"
-       line 419, "pan.___", state 1317, "(1)"
-       line 400, "pan.___", state 1340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1342, "(1)"
-       line 400, "pan.___", state 1343, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1343, "else"
-       line 400, "pan.___", state 1346, "(1)"
-       line 404, "pan.___", state 1354, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1356, "(1)"
-       line 404, "pan.___", state 1357, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1357, "else"
-       line 404, "pan.___", state 1360, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 402, "pan.___", state 1366, "((i<1))"
-       line 402, "pan.___", state 1366, "((i>=1))"
-       line 409, "pan.___", state 1372, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1385, "(1)"
-       line 410, "pan.___", state 1386, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1386, "else"
-       line 410, "pan.___", state 1389, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 414, "pan.___", state 1398, "(1)"
-       line 414, "pan.___", state 1399, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1399, "else"
-       line 414, "pan.___", state 1402, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 412, "pan.___", state 1408, "((i<1))"
-       line 412, "pan.___", state 1408, "((i>=1))"
-       line 419, "pan.___", state 1415, "(1)"
-       line 419, "pan.___", state 1416, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1416, "else"
-       line 419, "pan.___", state 1419, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 180, "pan.___", state 1448, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 184, "pan.___", state 1461, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 1471, "(1)"
-       line 165, "pan.___", state 1479, "(1)"
-       line 169, "pan.___", state 1491, "(1)"
-       line 176, "pan.___", state 1502, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 184, "pan.___", state 1524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 1534, "(1)"
-       line 165, "pan.___", state 1542, "(1)"
-       line 169, "pan.___", state 1554, "(1)"
-       line 176, "pan.___", state 1569, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 184, "pan.___", state 1591, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 1601, "(1)"
-       line 165, "pan.___", state 1609, "(1)"
-       line 169, "pan.___", state 1621, "(1)"
-       line 370, "pan.___", state 1642, "(1)"
-       line 696, "pan.___", state 1643, "(1)"
-       line 703, "pan.___", state 1646, "-end-"
-       (308 of 1646 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 752, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 2.02 seconds
-pan: rate 84117.327 states/second
-pan: avg transition delay 8.5985e-07 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.spin.input b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index 2aac6eb..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu-nosched-model/result-standard-execution-nest/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index 5bb8316..0000000
+++ /dev/null
@@ -1,4823 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2108
-2:3:2060
-3:3:2063
-4:3:2063
-5:3:2066
-6:3:2074
-7:3:2074
-8:3:2077
-9:3:2083
-10:3:2087
-11:3:2087
-12:3:2090
-13:3:2098
-14:3:2102
-15:3:2103
-16:0:2108
-17:3:2105
-18:0:2108
-19:2:416
-20:0:2108
-21:2:422
-22:0:2108
-23:2:423
-24:0:2108
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:2106
-45:2:511
-46:0:2112
-47:2:513
-48:2:514
-49:0:2112
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:2112
-69:2:605
-70:0:2112
-71:2:607
-72:0:2112
-73:2:608
-74:0:2112
-75:2:618
-76:0:2112
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:2:650
-86:2:657
-87:2:658
-88:2:665
-89:2:670
-90:0:2112
-91:2:681
-92:0:2112
-93:2:685
-94:2:686
-95:2:690
-96:2:694
-97:2:695
-98:2:699
-99:2:707
-100:2:708
-101:2:713
-102:2:720
-103:2:721
-104:2:728
-105:2:733
-106:0:2112
-107:2:744
-108:0:2112
-109:2:752
-110:2:753
-111:2:757
-112:2:761
-113:2:762
-114:2:766
-115:2:774
-116:2:775
-117:2:780
-118:2:787
-119:2:788
-120:2:795
-121:2:800
-122:0:2112
-123:2:811
-124:0:2112
-125:2:813
-126:0:2112
-127:2:814
-128:2:818
-129:2:819
-130:2:827
-131:2:828
-132:2:832
-133:2:833
-134:2:841
-135:2:846
-136:2:850
-137:2:851
-138:2:858
-139:2:859
-140:2:870
-141:2:871
-142:2:872
-143:2:883
-144:2:888
-145:2:889
-146:0:2112
-147:2:901
-148:0:2112
-149:2:903
-150:0:2112
-151:2:906
-152:2:907
-153:2:919
-154:2:920
-155:2:924
-156:2:925
-157:2:933
-158:2:938
-159:2:942
-160:2:943
-161:2:950
-162:2:951
-163:2:962
-164:2:963
-165:2:964
-166:2:975
-167:2:980
-168:2:981
-169:0:2112
-170:2:993
-171:0:2112
-172:2:995
-173:0:2112
-174:2:996
-175:0:2112
-176:2:997
-177:0:2112
-178:2:998
-179:0:2112
-180:2:999
-181:2:1003
-182:2:1004
-183:2:1012
-184:2:1013
-185:2:1017
-186:2:1018
-187:2:1026
-188:2:1031
-189:2:1035
-190:2:1036
-191:2:1043
-192:2:1044
-193:2:1055
-194:2:1056
-195:2:1057
-196:2:1068
-197:2:1073
-198:2:1074
-199:0:2112
-200:2:1086
-201:0:2112
-202:2:1178
-203:0:2112
-204:2:1276
-205:0:2112
-206:2:1277
-207:0:2112
-208:2:1281
-209:0:2112
-210:2:1287
-211:2:1291
-212:2:1292
-213:2:1300
-214:2:1301
-215:2:1305
-216:2:1306
-217:2:1314
-218:2:1319
-219:2:1323
-220:2:1324
-221:2:1331
-222:2:1332
-223:2:1343
-224:2:1344
-225:2:1345
-226:2:1356
-227:2:1361
-228:2:1362
-229:0:2112
-230:2:1374
-231:0:2112
-232:2:1376
-233:0:2112
-234:2:1377
-235:2:1381
-236:2:1382
-237:2:1390
-238:2:1391
-239:2:1395
-240:2:1396
-241:2:1404
-242:2:1409
-243:2:1413
-244:2:1414
-245:2:1421
-246:2:1422
-247:2:1433
-248:2:1434
-249:2:1435
-250:2:1446
-251:2:1451
-252:2:1452
-253:0:2112
-254:2:1464
-255:0:2112
-256:2:1466
-257:0:2112
-258:1:2
-259:0:2112
-260:1:8
-261:0:2112
-262:1:9
-263:0:2112
-264:1:10
-265:0:2112
-266:1:11
-267:0:2112
-268:1:12
-269:1:16
-270:1:17
-271:1:25
-272:1:26
-273:1:30
-274:1:31
-275:1:39
-276:1:44
-277:1:48
-278:1:49
-279:1:56
-280:1:57
-281:1:68
-282:1:69
-283:1:70
-284:1:81
-285:1:86
-286:1:87
-287:0:2112
-288:1:99
-289:0:2112
-290:1:101
-291:0:2112
-292:1:102
-293:1:106
-294:1:107
-295:1:115
-296:1:116
-297:1:120
-298:1:121
-299:1:129
-300:1:134
-301:1:138
-302:1:139
-303:1:146
-304:1:147
-305:1:158
-306:1:159
-307:1:160
-308:1:171
-309:1:176
-310:1:177
-311:0:2112
-312:1:189
-313:0:2112
-314:1:191
-315:0:2112
-316:1:192
-317:0:2112
-318:1:193
-319:1:197
-320:1:198
-321:1:206
-322:1:207
-323:1:211
-324:1:212
-325:1:220
-326:1:225
-327:1:229
-328:1:230
-329:1:237
-330:1:238
-331:1:249
-332:1:250
-333:1:251
-334:1:262
-335:1:267
-336:1:268
-337:0:2112
-338:1:280
-339:0:2112
-340:1:282
-341:0:2112
-342:1:291
-343:0:2112
-344:1:293
-345:0:2112
-346:1:11
-347:0:2112
-348:1:12
-349:1:16
-350:1:17
-351:1:25
-352:1:26
-353:1:27
-354:1:39
-355:1:44
-356:1:48
-357:1:49
-358:1:56
-359:1:57
-360:1:68
-361:1:69
-362:1:70
-363:1:81
-364:1:86
-365:1:87
-366:0:2112
-367:1:99
-368:0:2112
-369:2:1469
-370:2:1470
-371:2:1482
-372:2:1483
-373:2:1487
-374:2:1488
-375:2:1496
-376:2:1501
-377:2:1505
-378:2:1506
-379:2:1513
-380:2:1514
-381:2:1525
-382:2:1526
-383:2:1527
-384:2:1538
-385:2:1543
-386:2:1544
-387:0:2112
-388:2:1556
-389:0:2112
-390:2:1558
-391:0:2112
-392:2:1559
-393:0:2112
-394:2:1560
-395:0:2112
-396:2:1561
-397:0:2112
-398:2:1562
-399:2:1566
-400:2:1567
-401:2:1575
-402:2:1576
-403:2:1580
-404:2:1581
-405:2:1589
-406:2:1594
-407:2:1598
-408:2:1599
-409:2:1606
-410:2:1607
-411:2:1618
-412:2:1619
-413:2:1620
-414:2:1631
-415:2:1636
-416:2:1637
-417:0:2112
-418:2:1649
-419:0:2112
-420:2:1651
-421:0:2112
-422:2:1652
-423:2:1656
-424:2:1657
-425:2:1665
-426:2:1666
-427:2:1670
-428:2:1671
-429:2:1679
-430:2:1684
-431:2:1688
-432:2:1689
-433:2:1696
-434:2:1697
-435:2:1708
-436:2:1709
-437:2:1710
-438:2:1721
-439:2:1726
-440:2:1727
-441:0:2112
-442:2:1739
-443:0:2112
-444:1:101
-445:0:2112
-446:2:1560
-447:0:2112
-448:2:1561
-449:0:2112
-450:2:1562
-451:2:1566
-452:2:1567
-453:2:1575
-454:2:1576
-455:2:1580
-456:2:1581
-457:2:1589
-458:2:1594
-459:2:1598
-460:2:1599
-461:2:1606
-462:2:1607
-463:2:1618
-464:2:1619
-465:2:1620
-466:2:1631
-467:2:1636
-468:2:1637
-469:0:2112
-470:2:1649
-471:0:2112
-472:2:1651
-473:0:2112
-474:2:1652
-475:2:1656
-476:2:1657
-477:2:1665
-478:2:1666
-479:2:1670
-480:2:1671
-481:2:1679
-482:2:1684
-483:2:1688
-484:2:1689
-485:2:1696
-486:2:1697
-487:2:1708
-488:2:1709
-489:2:1710
-490:2:1721
-491:2:1726
-492:2:1727
-493:0:2112
-494:2:1739
-495:0:2112
-496:1:102
-497:1:106
-498:1:107
-499:1:115
-500:1:116
-501:1:120
-502:1:121
-503:1:129
-504:1:134
-505:1:138
-506:1:139
-507:1:146
-508:1:147
-509:1:158
-510:1:159
-511:1:160
-512:1:171
-513:1:176
-514:1:177
-515:0:2112
-516:2:1560
-517:0:2112
-518:1:189
-519:0:2112
-520:1:285
-521:0:2112
-522:2:1561
-523:0:2112
-524:2:1562
-525:2:1566
-526:2:1567
-527:2:1575
-528:2:1576
-529:2:1580
-530:2:1581
-531:2:1589
-532:2:1594
-533:2:1598
-534:2:1599
-535:2:1606
-536:2:1607
-537:2:1618
-538:2:1619
-539:2:1620
-540:2:1631
-541:2:1636
-542:2:1637
-543:0:2112
-544:2:1649
-545:0:2112
-546:2:1651
-547:0:2112
-548:2:1652
-549:2:1656
-550:2:1657
-551:2:1665
-552:2:1666
-553:2:1670
-554:2:1671
-555:2:1679
-556:2:1684
-557:2:1688
-558:2:1689
-559:2:1696
-560:2:1697
-561:2:1708
-562:2:1709
-563:2:1710
-564:2:1721
-565:2:1726
-566:2:1727
-567:0:2112
-568:2:1739
-569:0:2112
-570:2:1560
-571:0:2112
-572:1:286
-573:0:2112
-574:1:291
-575:0:2112
-576:1:293
-577:0:2112
-578:1:296
-579:0:2112
-580:2:1561
-581:0:2112
-582:2:1562
-583:2:1566
-584:2:1567
-585:2:1575
-586:2:1576
-587:2:1580
-588:2:1581
-589:2:1589
-590:2:1594
-591:2:1598
-592:2:1599
-593:2:1606
-594:2:1607
-595:2:1618
-596:2:1619
-597:2:1620
-598:2:1631
-599:2:1636
-600:2:1637
-601:0:2112
-602:2:1649
-603:0:2112
-604:2:1651
-605:0:2112
-606:2:1652
-607:2:1656
-608:2:1657
-609:2:1665
-610:2:1666
-611:2:1670
-612:2:1671
-613:2:1679
-614:2:1684
-615:2:1688
-616:2:1689
-617:2:1696
-618:2:1697
-619:2:1708
-620:2:1709
-621:2:1710
-622:2:1721
-623:2:1726
-624:2:1727
-625:0:2112
-626:2:1739
-627:0:2112
-628:2:1560
-629:0:2112
-630:1:301
-631:0:2112
-632:2:1561
-633:0:2112
-634:2:1562
-635:2:1566
-636:2:1567
-637:2:1575
-638:2:1576
-639:2:1580
-640:2:1581
-641:2:1589
-642:2:1594
-643:2:1598
-644:2:1599
-645:2:1606
-646:2:1607
-647:2:1618
-648:2:1619
-649:2:1620
-650:2:1631
-651:2:1636
-652:2:1637
-653:0:2112
-654:2:1649
-655:0:2112
-656:2:1651
-657:0:2112
-658:2:1652
-659:2:1656
-660:2:1657
-661:2:1665
-662:2:1666
-663:2:1670
-664:2:1671
-665:2:1679
-666:2:1684
-667:2:1688
-668:2:1689
-669:2:1696
-670:2:1697
-671:2:1708
-672:2:1709
-673:2:1710
-674:2:1721
-675:2:1726
-676:2:1727
-677:0:2112
-678:2:1739
-679:0:2112
-680:2:1560
-681:0:2112
-682:1:302
-683:0:2112
-684:2:1561
-685:0:2112
-686:2:1562
-687:2:1566
-688:2:1567
-689:2:1575
-690:2:1576
-691:2:1580
-692:2:1581
-693:2:1589
-694:2:1594
-695:2:1598
-696:2:1599
-697:2:1606
-698:2:1607
-699:2:1618
-700:2:1619
-701:2:1620
-702:2:1631
-703:2:1636
-704:2:1637
-705:0:2112
-706:2:1649
-707:0:2112
-708:2:1651
-709:0:2112
-710:2:1652
-711:2:1656
-712:2:1657
-713:2:1665
-714:2:1666
-715:2:1670
-716:2:1671
-717:2:1679
-718:2:1684
-719:2:1688
-720:2:1689
-721:2:1696
-722:2:1697
-723:2:1708
-724:2:1709
-725:2:1710
-726:2:1721
-727:2:1726
-728:2:1727
-729:0:2112
-730:2:1739
-731:0:2112
-732:2:1560
-733:0:2112
-734:1:303
-735:0:2112
-736:1:304
-737:0:2112
-738:1:305
-739:0:2112
-740:1:306
-741:0:2112
-742:1:308
-743:0:2112
-744:2:1561
-745:0:2112
-746:2:1562
-747:2:1566
-748:2:1567
-749:2:1575
-750:2:1576
-751:2:1580
-752:2:1581
-753:2:1589
-754:2:1594
-755:2:1598
-756:2:1599
-757:2:1606
-758:2:1607
-759:2:1618
-760:2:1619
-761:2:1620
-762:2:1631
-763:2:1636
-764:2:1637
-765:0:2112
-766:2:1649
-767:0:2112
-768:2:1651
-769:0:2112
-770:2:1652
-771:2:1656
-772:2:1657
-773:2:1665
-774:2:1666
-775:2:1670
-776:2:1671
-777:2:1679
-778:2:1684
-779:2:1688
-780:2:1689
-781:2:1696
-782:2:1697
-783:2:1708
-784:2:1709
-785:2:1710
-786:2:1721
-787:2:1726
-788:2:1727
-789:0:2112
-790:2:1739
-791:0:2112
-792:2:1560
-793:0:2112
-794:1:310
-795:0:2112
-796:2:1561
-797:0:2112
-798:2:1562
-799:2:1566
-800:2:1567
-801:2:1575
-802:2:1576
-803:2:1580
-804:2:1581
-805:2:1589
-806:2:1594
-807:2:1598
-808:2:1599
-809:2:1606
-810:2:1607
-811:2:1618
-812:2:1619
-813:2:1620
-814:2:1631
-815:2:1636
-816:2:1637
-817:0:2112
-818:2:1649
-819:0:2112
-820:2:1651
-821:0:2112
-822:2:1652
-823:2:1656
-824:2:1657
-825:2:1665
-826:2:1666
-827:2:1670
-828:2:1671
-829:2:1679
-830:2:1684
-831:2:1688
-832:2:1689
-833:2:1696
-834:2:1697
-835:2:1708
-836:2:1709
-837:2:1710
-838:2:1721
-839:2:1726
-840:2:1727
-841:0:2112
-842:2:1739
-843:0:2112
-844:2:1560
-845:0:2112
-846:1:311
-847:1:315
-848:1:316
-849:1:324
-850:1:325
-851:1:326
-852:1:338
-853:1:343
-854:1:347
-855:1:348
-856:1:355
-857:1:356
-858:1:367
-859:1:368
-860:1:369
-861:1:380
-862:1:385
-863:1:386
-864:0:2112
-865:1:398
-866:0:2112
-867:2:1561
-868:0:2112
-869:2:1562
-870:2:1566
-871:2:1567
-872:2:1575
-873:2:1576
-874:2:1580
-875:2:1581
-876:2:1589
-877:2:1594
-878:2:1598
-879:2:1599
-880:2:1606
-881:2:1607
-882:2:1618
-883:2:1619
-884:2:1620
-885:2:1631
-886:2:1636
-887:2:1637
-888:0:2112
-889:2:1649
-890:0:2112
-891:2:1651
-892:0:2112
-893:2:1652
-894:2:1656
-895:2:1657
-896:2:1665
-897:2:1666
-898:2:1670
-899:2:1671
-900:2:1679
-901:2:1684
-902:2:1688
-903:2:1689
-904:2:1696
-905:2:1697
-906:2:1708
-907:2:1709
-908:2:1710
-909:2:1721
-910:2:1726
-911:2:1727
-912:0:2112
-913:2:1739
-914:0:2112
-915:2:1560
-916:0:2112
-917:2:1561
-918:0:2112
-919:2:1562
-920:2:1566
-921:2:1567
-922:2:1575
-923:2:1576
-924:2:1580
-925:2:1581
-926:2:1589
-927:2:1594
-928:2:1598
-929:2:1599
-930:2:1606
-931:2:1607
-932:2:1618
-933:2:1619
-934:2:1620
-935:2:1631
-936:2:1636
-937:2:1637
-938:0:2112
-939:2:1649
-940:0:2112
-941:1:400
-942:0:2112
-943:1:305
-944:0:2112
-945:1:306
-946:0:2112
-947:1:308
-948:0:2112
-949:2:1651
-950:0:2112
-951:2:1652
-952:2:1656
-953:2:1657
-954:2:1665
-955:2:1666
-956:2:1670
-957:2:1671
-958:2:1679
-959:2:1684
-960:2:1688
-961:2:1689
-962:2:1696
-963:2:1697
-964:2:1708
-965:2:1709
-966:2:1710
-967:2:1721
-968:2:1726
-969:2:1727
-970:0:2112
-971:2:1739
-972:0:2112
-973:2:1560
-974:0:2112
-975:2:1561
-976:0:2112
-977:2:1562
-978:2:1566
-979:2:1567
-980:2:1575
-981:2:1576
-982:2:1580
-983:2:1581
-984:2:1589
-985:2:1594
-986:2:1598
-987:2:1599
-988:2:1606
-989:2:1607
-990:2:1618
-991:2:1619
-992:2:1620
-993:2:1631
-994:2:1636
-995:2:1637
-996:0:2112
-997:2:1649
-998:0:2112
-999:1:310
-1000:0:2112
-1001:2:1651
-1002:0:2112
-1003:2:1652
-1004:2:1656
-1005:2:1657
-1006:2:1665
-1007:2:1666
-1008:2:1670
-1009:2:1671
-1010:2:1679
-1011:2:1684
-1012:2:1688
-1013:2:1689
-1014:2:1696
-1015:2:1697
-1016:2:1708
-1017:2:1709
-1018:2:1710
-1019:2:1721
-1020:2:1726
-1021:2:1727
-1022:0:2112
-1023:2:1739
-1024:0:2112
-1025:2:1560
-1026:0:2112
-1027:2:1561
-1028:0:2112
-1029:2:1562
-1030:2:1566
-1031:2:1567
-1032:2:1575
-1033:2:1576
-1034:2:1580
-1035:2:1581
-1036:2:1589
-1037:2:1594
-1038:2:1598
-1039:2:1599
-1040:2:1606
-1041:2:1607
-1042:2:1618
-1043:2:1619
-1044:2:1620
-1045:2:1631
-1046:2:1636
-1047:2:1637
-1048:0:2112
-1049:2:1649
-1050:0:2112
-1051:1:311
-1052:1:315
-1053:1:316
-1054:1:324
-1055:1:325
-1056:1:326
-1057:1:338
-1058:1:343
-1059:1:347
-1060:1:348
-1061:1:355
-1062:1:356
-1063:1:367
-1064:1:368
-1065:1:369
-1066:1:380
-1067:1:385
-1068:1:386
-1069:0:2112
-1070:1:398
-1071:0:2112
-1072:2:1651
-1073:0:2112
-1074:2:1652
-1075:2:1656
-1076:2:1657
-1077:2:1665
-1078:2:1666
-1079:2:1670
-1080:2:1671
-1081:2:1679
-1082:2:1684
-1083:2:1688
-1084:2:1689
-1085:2:1696
-1086:2:1697
-1087:2:1708
-1088:2:1709
-1089:2:1710
-1090:2:1721
-1091:2:1726
-1092:2:1727
-1093:0:2112
-1094:2:1739
-1095:0:2112
-1096:2:1560
-1097:0:2112
-1098:2:1561
-1099:0:2112
-1100:2:1562
-1101:2:1566
-1102:2:1567
-1103:2:1575
-1104:2:1576
-1105:2:1580
-1106:2:1581
-1107:2:1589
-1108:2:1594
-1109:2:1598
-1110:2:1599
-1111:2:1606
-1112:2:1607
-1113:2:1618
-1114:2:1619
-1115:2:1620
-1116:2:1631
-1117:2:1636
-1118:2:1637
-1119:0:2112
-1120:2:1649
-1121:0:2112
-1122:2:1651
-1123:0:2112
-1124:1:400
-1125:0:2112
-1126:1:404
-1127:0:2112
-1128:1:9
-1129:0:2112
-1130:1:10
-1131:0:2112
-1132:1:11
-1133:0:2112
-1134:2:1652
-1135:2:1656
-1136:2:1657
-1137:2:1665
-1138:2:1666
-1139:2:1670
-1140:2:1671
-1141:2:1679
-1142:2:1684
-1143:2:1688
-1144:2:1689
-1145:2:1696
-1146:2:1697
-1147:2:1708
-1148:2:1709
-1149:2:1710
-1150:2:1721
-1151:2:1726
-1152:2:1727
-1153:0:2112
-1154:2:1739
-1155:0:2112
-1156:2:1560
-1157:0:2112
-1158:2:1561
-1159:0:2112
-1160:2:1562
-1161:2:1566
-1162:2:1567
-1163:2:1575
-1164:2:1576
-1165:2:1580
-1166:2:1581
-1167:2:1589
-1168:2:1594
-1169:2:1598
-1170:2:1599
-1171:2:1606
-1172:2:1607
-1173:2:1618
-1174:2:1619
-1175:2:1620
-1176:2:1631
-1177:2:1636
-1178:2:1637
-1179:0:2112
-1180:2:1649
-1181:0:2112
-1182:2:1651
-1183:0:2112
-1184:1:12
-1185:1:16
-1186:1:17
-1187:1:25
-1188:1:26
-1189:1:27
-1190:1:39
-1191:1:44
-1192:1:48
-1193:1:49
-1194:1:56
-1195:1:57
-1196:1:68
-1197:1:69
-1198:1:70
-1199:1:81
-1200:1:86
-1201:1:87
-1202:0:2112
-1203:1:99
-1204:0:2112
-1205:2:1652
-1206:2:1656
-1207:2:1657
-1208:2:1665
-1209:2:1666
-1210:2:1670
-1211:2:1671
-1212:2:1679
-1213:2:1684
-1214:2:1688
-1215:2:1689
-1216:2:1696
-1217:2:1697
-1218:2:1708
-1219:2:1716
-1220:2:1717
-1221:2:1721
-1222:2:1726
-1223:2:1727
-1224:0:2112
-1225:2:1739
-1226:0:2112
-1227:2:1560
-1228:0:2112
-1229:2:1561
-1230:0:2112
-1231:2:1562
-1232:2:1566
-1233:2:1567
-1234:2:1575
-1235:2:1576
-1236:2:1580
-1237:2:1581
-1238:2:1589
-1239:2:1594
-1240:2:1598
-1241:2:1599
-1242:2:1606
-1243:2:1607
-1244:2:1618
-1245:2:1626
-1246:2:1627
-1247:2:1631
-1248:2:1636
-1249:2:1637
-1250:0:2112
-1251:2:1649
-1252:0:2112
-1253:2:1651
-1254:0:2112
-1255:1:101
-1256:0:2112
-1257:2:1652
-1258:2:1656
-1259:2:1657
-1260:2:1665
-1261:2:1666
-1262:2:1670
-1263:2:1671
-1264:2:1679
-1265:2:1684
-1266:2:1688
-1267:2:1689
-1268:2:1696
-1269:2:1697
-1270:2:1708
-1271:2:1716
-1272:2:1717
-1273:2:1721
-1274:2:1726
-1275:2:1727
-1276:0:2112
-1277:2:1739
-1278:0:2112
-1279:2:1560
-1280:0:2112
-1281:2:1561
-1282:0:2112
-1283:2:1562
-1284:2:1566
-1285:2:1567
-1286:2:1575
-1287:2:1576
-1288:2:1580
-1289:2:1581
-1290:2:1589
-1291:2:1594
-1292:2:1598
-1293:2:1599
-1294:2:1606
-1295:2:1607
-1296:2:1618
-1297:2:1626
-1298:2:1627
-1299:2:1631
-1300:2:1636
-1301:2:1637
-1302:0:2112
-1303:2:1649
-1304:0:2112
-1305:2:1651
-1306:0:2112
-1307:1:102
-1308:1:106
-1309:1:107
-1310:1:115
-1311:1:116
-1312:1:120
-1313:1:121
-1314:1:129
-1315:1:134
-1316:1:138
-1317:1:139
-1318:1:146
-1319:1:147
-1320:1:158
-1321:1:159
-1322:1:160
-1323:1:171
-1324:1:176
-1325:1:177
-1326:0:2112
-1327:1:189
-1328:0:2112
-1329:1:191
-1330:0:2112
-1331:2:1652
-1332:2:1656
-1333:2:1657
-1334:2:1665
-1335:2:1666
-1336:2:1670
-1337:2:1671
-1338:2:1679
-1339:2:1684
-1340:2:1688
-1341:2:1689
-1342:2:1696
-1343:2:1697
-1344:2:1708
-1345:2:1716
-1346:2:1717
-1347:2:1721
-1348:2:1726
-1349:2:1727
-1350:0:2112
-1351:2:1739
-1352:0:2112
-1353:2:1560
-1354:0:2112
-1355:2:1561
-1356:0:2112
-1357:2:1562
-1358:2:1566
-1359:2:1567
-1360:2:1575
-1361:2:1576
-1362:2:1580
-1363:2:1581
-1364:2:1589
-1365:2:1594
-1366:2:1598
-1367:2:1599
-1368:2:1606
-1369:2:1607
-1370:2:1618
-1371:2:1626
-1372:2:1627
-1373:2:1631
-1374:2:1636
-1375:2:1637
-1376:0:2112
-1377:2:1649
-1378:0:2112
-1379:2:1651
-1380:0:2112
-1381:1:192
-1382:0:2112
-1383:2:1652
-1384:2:1656
-1385:2:1657
-1386:2:1665
-1387:2:1666
-1388:2:1670
-1389:2:1671
-1390:2:1679
-1391:2:1684
-1392:2:1688
-1393:2:1689
-1394:2:1696
-1395:2:1697
-1396:2:1708
-1397:2:1716
-1398:2:1717
-1399:2:1721
-1400:2:1726
-1401:2:1727
-1402:0:2112
-1403:2:1739
-1404:0:2112
-1405:2:1560
-1406:0:2112
-1407:2:1561
-1408:0:2112
-1409:2:1562
-1410:2:1566
-1411:2:1567
-1412:2:1575
-1413:2:1576
-1414:2:1580
-1415:2:1581
-1416:2:1589
-1417:2:1594
-1418:2:1598
-1419:2:1599
-1420:2:1606
-1421:2:1607
-1422:2:1618
-1423:2:1626
-1424:2:1627
-1425:2:1631
-1426:2:1636
-1427:2:1637
-1428:0:2112
-1429:2:1649
-1430:0:2112
-1431:2:1651
-1432:0:2112
-1433:1:193
-1434:1:197
-1435:1:198
-1436:1:206
-1437:1:207
-1438:1:211
-1439:1:212
-1440:1:220
-1441:1:225
-1442:1:229
-1443:1:230
-1444:1:237
-1445:1:238
-1446:1:249
-1447:1:250
-1448:1:251
-1449:1:262
-1450:1:267
-1451:1:268
-1452:0:2112
-1453:1:280
-1454:0:2112
-1455:2:1652
-1456:2:1656
-1457:2:1657
-1458:2:1665
-1459:2:1666
-1460:2:1670
-1461:2:1671
-1462:2:1679
-1463:2:1684
-1464:2:1688
-1465:2:1689
-1466:2:1696
-1467:2:1697
-1468:2:1708
-1469:2:1716
-1470:2:1717
-1471:2:1721
-1472:2:1726
-1473:2:1727
-1474:0:2112
-1475:2:1739
-1476:0:2112
-1477:2:1560
-1478:0:2112
-1479:2:1561
-1480:0:2112
-1481:2:1562
-1482:2:1566
-1483:2:1567
-1484:2:1575
-1485:2:1576
-1486:2:1580
-1487:2:1581
-1488:2:1589
-1489:2:1594
-1490:2:1598
-1491:2:1599
-1492:2:1606
-1493:2:1607
-1494:2:1618
-1495:2:1626
-1496:2:1627
-1497:2:1631
-1498:2:1636
-1499:2:1637
-1500:0:2112
-1501:2:1649
-1502:0:2112
-1503:2:1651
-1504:0:2112
-1505:1:282
-1506:0:2112
-1507:1:291
-1508:0:2112
-1509:1:293
-1510:0:2112
-1511:1:11
-1512:0:2112
-1513:2:1652
-1514:2:1656
-1515:2:1657
-1516:2:1665
-1517:2:1666
-1518:2:1670
-1519:2:1671
-1520:2:1679
-1521:2:1684
-1522:2:1688
-1523:2:1689
-1524:2:1696
-1525:2:1697
-1526:2:1708
-1527:2:1716
-1528:2:1717
-1529:2:1721
-1530:2:1726
-1531:2:1727
-1532:0:2112
-1533:2:1739
-1534:0:2112
-1535:2:1560
-1536:0:2112
-1537:2:1561
-1538:0:2112
-1539:2:1562
-1540:2:1566
-1541:2:1567
-1542:2:1575
-1543:2:1576
-1544:2:1580
-1545:2:1581
-1546:2:1589
-1547:2:1594
-1548:2:1598
-1549:2:1599
-1550:2:1606
-1551:2:1607
-1552:2:1618
-1553:2:1626
-1554:2:1627
-1555:2:1631
-1556:2:1636
-1557:2:1637
-1558:0:2112
-1559:2:1649
-1560:0:2112
-1561:2:1651
-1562:0:2112
-1563:1:12
-1564:1:16
-1565:1:17
-1566:1:25
-1567:1:26
-1568:1:27
-1569:1:39
-1570:1:44
-1571:1:48
-1572:1:49
-1573:1:56
-1574:1:57
-1575:1:68
-1576:1:69
-1577:1:70
-1578:1:81
-1579:1:86
-1580:1:87
-1581:0:2112
-1582:1:99
-1583:0:2112
-1584:2:1652
-1585:2:1656
-1586:2:1657
-1587:2:1665
-1588:2:1666
-1589:2:1670
-1590:2:1671
-1591:2:1679
-1592:2:1684
-1593:2:1688
-1594:2:1689
-1595:2:1696
-1596:2:1697
-1597:2:1708
-1598:2:1716
-1599:2:1717
-1600:2:1721
-1601:2:1726
-1602:2:1727
-1603:0:2112
-1604:2:1739
-1605:0:2112
-1606:2:1560
-1607:0:2112
-1608:2:1561
-1609:0:2112
-1610:2:1562
-1611:2:1566
-1612:2:1567
-1613:2:1575
-1614:2:1576
-1615:2:1580
-1616:2:1581
-1617:2:1589
-1618:2:1594
-1619:2:1598
-1620:2:1599
-1621:2:1606
-1622:2:1607
-1623:2:1618
-1624:2:1626
-1625:2:1627
-1626:2:1631
-1627:2:1636
-1628:2:1637
-1629:0:2112
-1630:2:1649
-1631:0:2112
-1632:2:1651
-1633:0:2112
-1634:1:101
-1635:0:2112
-1636:2:1652
-1637:2:1656
-1638:2:1657
-1639:2:1665
-1640:2:1666
-1641:2:1670
-1642:2:1671
-1643:2:1679
-1644:2:1684
-1645:2:1688
-1646:2:1689
-1647:2:1696
-1648:2:1697
-1649:2:1708
-1650:2:1716
-1651:2:1717
-1652:2:1721
-1653:2:1726
-1654:2:1727
-1655:0:2112
-1656:2:1739
-1657:0:2112
-1658:2:1560
-1659:0:2112
-1660:2:1561
-1661:0:2112
-1662:2:1562
-1663:2:1566
-1664:2:1567
-1665:2:1575
-1666:2:1576
-1667:2:1580
-1668:2:1581
-1669:2:1589
-1670:2:1594
-1671:2:1598
-1672:2:1599
-1673:2:1606
-1674:2:1607
-1675:2:1618
-1676:2:1626
-1677:2:1627
-1678:2:1631
-1679:2:1636
-1680:2:1637
-1681:0:2112
-1682:2:1649
-1683:0:2112
-1684:2:1651
-1685:0:2112
-1686:1:102
-1687:1:106
-1688:1:107
-1689:1:115
-1690:1:116
-1691:1:120
-1692:1:121
-1693:1:129
-1694:1:134
-1695:1:138
-1696:1:139
-1697:1:146
-1698:1:147
-1699:1:158
-1700:1:159
-1701:1:160
-1702:1:171
-1703:1:176
-1704:1:177
-1705:0:2112
-1706:1:189
-1707:0:2112
-1708:1:285
-1709:0:2112
-1710:2:1652
-1711:2:1656
-1712:2:1657
-1713:2:1665
-1714:2:1666
-1715:2:1670
-1716:2:1671
-1717:2:1679
-1718:2:1684
-1719:2:1688
-1720:2:1689
-1721:2:1696
-1722:2:1697
-1723:2:1708
-1724:2:1716
-1725:2:1717
-1726:2:1721
-1727:2:1726
-1728:2:1727
-1729:0:2112
-1730:2:1739
-1731:0:2112
-1732:2:1560
-1733:0:2112
-1734:2:1561
-1735:0:2112
-1736:2:1562
-1737:2:1566
-1738:2:1567
-1739:2:1575
-1740:2:1576
-1741:2:1580
-1742:2:1581
-1743:2:1589
-1744:2:1594
-1745:2:1598
-1746:2:1599
-1747:2:1606
-1748:2:1607
-1749:2:1618
-1750:2:1626
-1751:2:1627
-1752:2:1631
-1753:2:1636
-1754:2:1637
-1755:0:2112
-1756:2:1649
-1757:0:2112
-1758:2:1651
-1759:0:2112
-1760:1:286
-1761:0:2112
-1762:1:291
-1763:0:2112
-1764:1:293
-1765:0:2112
-1766:1:296
-1767:0:2112
-1768:2:1652
-1769:2:1656
-1770:2:1657
-1771:2:1665
-1772:2:1666
-1773:2:1670
-1774:2:1671
-1775:2:1679
-1776:2:1684
-1777:2:1688
-1778:2:1689
-1779:2:1696
-1780:2:1697
-1781:2:1708
-1782:2:1716
-1783:2:1717
-1784:2:1721
-1785:2:1726
-1786:2:1727
-1787:0:2112
-1788:2:1739
-1789:0:2112
-1790:2:1560
-1791:0:2112
-1792:2:1561
-1793:0:2112
-1794:2:1562
-1795:2:1566
-1796:2:1567
-1797:2:1575
-1798:2:1576
-1799:2:1580
-1800:2:1581
-1801:2:1589
-1802:2:1594
-1803:2:1598
-1804:2:1599
-1805:2:1606
-1806:2:1607
-1807:2:1618
-1808:2:1626
-1809:2:1627
-1810:2:1631
-1811:2:1636
-1812:2:1637
-1813:0:2112
-1814:2:1649
-1815:0:2112
-1816:2:1651
-1817:0:2112
-1818:1:301
-1819:0:2112
-1820:2:1652
-1821:2:1656
-1822:2:1657
-1823:2:1665
-1824:2:1666
-1825:2:1670
-1826:2:1671
-1827:2:1679
-1828:2:1684
-1829:2:1688
-1830:2:1689
-1831:2:1696
-1832:2:1697
-1833:2:1708
-1834:2:1716
-1835:2:1717
-1836:2:1721
-1837:2:1726
-1838:2:1727
-1839:0:2112
-1840:2:1739
-1841:0:2112
-1842:2:1560
-1843:0:2112
-1844:2:1561
-1845:0:2112
-1846:2:1562
-1847:2:1566
-1848:2:1567
-1849:2:1575
-1850:2:1576
-1851:2:1580
-1852:2:1581
-1853:2:1589
-1854:2:1594
-1855:2:1598
-1856:2:1599
-1857:2:1606
-1858:2:1607
-1859:2:1618
-1860:2:1626
-1861:2:1627
-1862:2:1631
-1863:2:1636
-1864:2:1637
-1865:0:2112
-1866:2:1649
-1867:0:2112
-1868:2:1651
-1869:0:2112
-1870:1:302
-1871:0:2112
-1872:2:1652
-1873:2:1656
-1874:2:1657
-1875:2:1665
-1876:2:1666
-1877:2:1670
-1878:2:1671
-1879:2:1679
-1880:2:1684
-1881:2:1688
-1882:2:1689
-1883:2:1696
-1884:2:1697
-1885:2:1708
-1886:2:1716
-1887:2:1717
-1888:2:1721
-1889:2:1726
-1890:2:1727
-1891:0:2112
-1892:2:1739
-1893:0:2112
-1894:2:1560
-1895:0:2112
-1896:2:1561
-1897:0:2112
-1898:2:1562
-1899:2:1566
-1900:2:1567
-1901:2:1575
-1902:2:1576
-1903:2:1580
-1904:2:1581
-1905:2:1589
-1906:2:1594
-1907:2:1598
-1908:2:1599
-1909:2:1606
-1910:2:1607
-1911:2:1618
-1912:2:1626
-1913:2:1627
-1914:2:1631
-1915:2:1636
-1916:2:1637
-1917:0:2112
-1918:2:1649
-1919:0:2112
-1920:2:1651
-1921:0:2112
-1922:1:303
-1923:0:2112
-1924:1:304
-1925:0:2112
-1926:1:305
-1927:0:2112
-1928:1:306
-1929:0:2112
-1930:1:308
-1931:0:2112
-1932:2:1652
-1933:2:1656
-1934:2:1657
-1935:2:1665
-1936:2:1666
-1937:2:1670
-1938:2:1671
-1939:2:1679
-1940:2:1684
-1941:2:1688
-1942:2:1689
-1943:2:1696
-1944:2:1697
-1945:2:1708
-1946:2:1716
-1947:2:1717
-1948:2:1721
-1949:2:1726
-1950:2:1727
-1951:0:2112
-1952:2:1739
-1953:0:2112
-1954:2:1560
-1955:0:2112
-1956:2:1561
-1957:0:2112
-1958:2:1562
-1959:2:1566
-1960:2:1567
-1961:2:1575
-1962:2:1576
-1963:2:1580
-1964:2:1581
-1965:2:1589
-1966:2:1594
-1967:2:1598
-1968:2:1599
-1969:2:1606
-1970:2:1607
-1971:2:1618
-1972:2:1626
-1973:2:1627
-1974:2:1631
-1975:2:1636
-1976:2:1637
-1977:0:2112
-1978:2:1649
-1979:0:2112
-1980:2:1651
-1981:0:2112
-1982:1:310
-1983:0:2112
-1984:2:1652
-1985:2:1656
-1986:2:1657
-1987:2:1665
-1988:2:1666
-1989:2:1670
-1990:2:1671
-1991:2:1679
-1992:2:1684
-1993:2:1688
-1994:2:1689
-1995:2:1696
-1996:2:1697
-1997:2:1708
-1998:2:1716
-1999:2:1717
-2000:2:1721
-2001:2:1726
-2002:2:1727
-2003:0:2112
-2004:2:1739
-2005:0:2112
-2006:2:1560
-2007:0:2112
-2008:2:1561
-2009:0:2112
-2010:2:1562
-2011:2:1566
-2012:2:1567
-2013:2:1575
-2014:2:1576
-2015:2:1580
-2016:2:1581
-2017:2:1589
-2018:2:1594
-2019:2:1598
-2020:2:1599
-2021:2:1606
-2022:2:1607
-2023:2:1618
-2024:2:1626
-2025:2:1627
-2026:2:1631
-2027:2:1636
-2028:2:1637
-2029:0:2112
-2030:2:1649
-2031:0:2112
-2032:2:1651
-2033:0:2112
-2034:1:311
-2035:1:315
-2036:1:316
-2037:1:324
-2038:1:325
-2039:1:326
-2040:1:338
-2041:1:343
-2042:1:347
-2043:1:348
-2044:1:355
-2045:1:356
-2046:1:367
-2047:1:368
-2048:1:369
-2049:1:380
-2050:1:385
-2051:1:386
-2052:0:2112
-2053:1:398
-2054:0:2112
-2055:2:1652
-2056:2:1656
-2057:2:1657
-2058:2:1665
-2059:2:1666
-2060:2:1670
-2061:2:1671
-2062:2:1679
-2063:2:1684
-2064:2:1688
-2065:2:1689
-2066:2:1696
-2067:2:1697
-2068:2:1708
-2069:2:1716
-2070:2:1717
-2071:2:1721
-2072:2:1726
-2073:2:1727
-2074:0:2112
-2075:2:1739
-2076:0:2112
-2077:2:1560
-2078:0:2112
-2079:2:1561
-2080:0:2112
-2081:2:1562
-2082:2:1566
-2083:2:1567
-2084:2:1575
-2085:2:1576
-2086:2:1580
-2087:2:1581
-2088:2:1589
-2089:2:1594
-2090:2:1598
-2091:2:1599
-2092:2:1606
-2093:2:1607
-2094:2:1618
-2095:2:1626
-2096:2:1627
-2097:2:1631
-2098:2:1636
-2099:2:1637
-2100:0:2112
-2101:2:1649
-2102:0:2112
-2103:2:1651
-2104:0:2112
-2105:1:400
-2106:0:2112
-2107:1:305
-2108:0:2112
-2109:1:306
-2110:0:2112
-2111:1:308
-2112:0:2112
-2113:2:1652
-2114:2:1656
-2115:2:1657
-2116:2:1665
-2117:2:1666
-2118:2:1670
-2119:2:1671
-2120:2:1679
-2121:2:1684
-2122:2:1688
-2123:2:1689
-2124:2:1696
-2125:2:1697
-2126:2:1708
-2127:2:1716
-2128:2:1717
-2129:2:1721
-2130:2:1726
-2131:2:1727
-2132:0:2112
-2133:2:1739
-2134:0:2112
-2135:2:1560
-2136:0:2112
-2137:2:1561
-2138:0:2112
-2139:2:1562
-2140:2:1566
-2141:2:1567
-2142:2:1575
-2143:2:1576
-2144:2:1580
-2145:2:1581
-2146:2:1589
-2147:2:1594
-2148:2:1598
-2149:2:1599
-2150:2:1606
-2151:2:1607
-2152:2:1618
-2153:2:1626
-2154:2:1627
-2155:2:1631
-2156:2:1636
-2157:2:1637
-2158:0:2112
-2159:2:1649
-2160:0:2112
-2161:2:1651
-2162:0:2112
-2163:1:310
-2164:0:2112
-2165:2:1652
-2166:2:1656
-2167:2:1657
-2168:2:1665
-2169:2:1666
-2170:2:1670
-2171:2:1671
-2172:2:1679
-2173:2:1684
-2174:2:1688
-2175:2:1689
-2176:2:1696
-2177:2:1697
-2178:2:1708
-2179:2:1716
-2180:2:1717
-2181:2:1721
-2182:2:1726
-2183:2:1727
-2184:0:2112
-2185:2:1739
-2186:0:2112
-2187:2:1560
-2188:0:2112
-2189:2:1561
-2190:0:2112
-2191:2:1562
-2192:2:1566
-2193:2:1567
-2194:2:1575
-2195:2:1576
-2196:2:1580
-2197:2:1581
-2198:2:1589
-2199:2:1594
-2200:2:1598
-2201:2:1599
-2202:2:1606
-2203:2:1607
-2204:2:1618
-2205:2:1626
-2206:2:1627
-2207:2:1631
-2208:2:1636
-2209:2:1637
-2210:0:2112
-2211:2:1649
-2212:0:2112
-2213:2:1651
-2214:0:2112
-2215:1:311
-2216:1:315
-2217:1:316
-2218:1:324
-2219:1:325
-2220:1:326
-2221:1:338
-2222:1:343
-2223:1:347
-2224:1:348
-2225:1:355
-2226:1:356
-2227:1:367
-2228:1:368
-2229:1:369
-2230:1:380
-2231:1:385
-2232:1:386
-2233:0:2112
-2234:1:398
-2235:0:2112
-2236:2:1652
-2237:2:1656
-2238:2:1657
-2239:2:1665
-2240:2:1666
-2241:2:1670
-2242:2:1671
-2243:2:1679
-2244:2:1684
-2245:2:1688
-2246:2:1689
-2247:2:1696
-2248:2:1697
-2249:2:1708
-2250:2:1716
-2251:2:1717
-2252:2:1721
-2253:2:1726
-2254:2:1727
-2255:0:2112
-2256:2:1739
-2257:0:2112
-2258:2:1560
-2259:0:2112
-2260:2:1561
-2261:0:2112
-2262:2:1562
-2263:2:1566
-2264:2:1567
-2265:2:1575
-2266:2:1576
-2267:2:1580
-2268:2:1581
-2269:2:1589
-2270:2:1594
-2271:2:1598
-2272:2:1599
-2273:2:1606
-2274:2:1607
-2275:2:1618
-2276:2:1626
-2277:2:1627
-2278:2:1631
-2279:2:1636
-2280:2:1637
-2281:0:2112
-2282:2:1649
-2283:0:2112
-2284:2:1651
-2285:0:2112
-2286:1:400
-2287:0:2112
-2288:1:404
-2289:0:2112
-2290:1:9
-2291:0:2112
-2292:1:10
-2293:0:2112
-2294:1:11
-2295:0:2112
-2296:2:1652
-2297:2:1656
-2298:2:1657
-2299:2:1665
-2300:2:1666
-2301:2:1670
-2302:2:1671
-2303:2:1679
-2304:2:1684
-2305:2:1688
-2306:2:1689
-2307:2:1696
-2308:2:1697
-2309:2:1708
-2310:2:1716
-2311:2:1717
-2312:2:1721
-2313:2:1726
-2314:2:1727
-2315:0:2112
-2316:2:1739
-2317:0:2112
-2318:2:1560
-2319:0:2112
-2320:2:1561
-2321:0:2112
-2322:2:1562
-2323:2:1566
-2324:2:1567
-2325:2:1575
-2326:2:1576
-2327:2:1580
-2328:2:1581
-2329:2:1589
-2330:2:1594
-2331:2:1598
-2332:2:1599
-2333:2:1606
-2334:2:1607
-2335:2:1618
-2336:2:1626
-2337:2:1627
-2338:2:1631
-2339:2:1636
-2340:2:1637
-2341:0:2112
-2342:2:1649
-2343:0:2112
-2344:2:1651
-2345:0:2112
-2346:1:12
-2347:1:16
-2348:1:17
-2349:1:25
-2350:1:26
-2351:1:27
-2352:1:39
-2353:1:44
-2354:1:48
-2355:1:49
-2356:1:56
-2357:1:57
-2358:1:68
-2359:1:69
-2360:1:70
-2361:1:81
-2362:1:86
-2363:1:87
-2364:0:2112
-2365:1:99
-2366:0:2112
-2367:2:1652
-2368:2:1656
-2369:2:1657
-2370:2:1665
-2371:2:1666
-2372:2:1670
-2373:2:1671
-2374:2:1679
-2375:2:1684
-2376:2:1688
-2377:2:1689
-2378:2:1696
-2379:2:1697
-2380:2:1708
-2381:2:1716
-2382:2:1717
-2383:2:1721
-2384:2:1726
-2385:2:1727
-2386:0:2112
-2387:2:1739
-2388:0:2112
-2389:2:1560
-2390:0:2112
-2391:2:1561
-2392:0:2112
-2393:2:1562
-2394:2:1566
-2395:2:1567
-2396:2:1575
-2397:2:1576
-2398:2:1580
-2399:2:1581
-2400:2:1589
-2401:2:1594
-2402:2:1598
-2403:2:1599
-2404:2:1606
-2405:2:1607
-2406:2:1618
-2407:2:1626
-2408:2:1627
-2409:2:1631
-2410:2:1636
-2411:2:1637
-2412:0:2112
-2413:2:1649
-2414:0:2112
-2415:2:1651
-2416:0:2112
-2417:1:101
-2418:0:2112
-2419:2:1652
-2420:2:1656
-2421:2:1657
-2422:2:1665
-2423:2:1666
-2424:2:1670
-2425:2:1671
-2426:2:1679
-2427:2:1684
-2428:2:1688
-2429:2:1689
-2430:2:1696
-2431:2:1697
-2432:2:1708
-2433:2:1716
-2434:2:1717
-2435:2:1721
-2436:2:1726
-2437:2:1727
-2438:0:2112
-2439:2:1739
-2440:0:2112
-2441:2:1560
-2442:0:2112
-2443:2:1561
-2444:0:2112
-2445:2:1562
-2446:2:1566
-2447:2:1567
-2448:2:1575
-2449:2:1576
-2450:2:1580
-2451:2:1581
-2452:2:1589
-2453:2:1594
-2454:2:1598
-2455:2:1599
-2456:2:1606
-2457:2:1607
-2458:2:1618
-2459:2:1626
-2460:2:1627
-2461:2:1631
-2462:2:1636
-2463:2:1637
-2464:0:2112
-2465:2:1649
-2466:0:2112
-2467:2:1651
-2468:0:2112
-2469:1:102
-2470:1:106
-2471:1:107
-2472:1:115
-2473:1:116
-2474:1:120
-2475:1:121
-2476:1:129
-2477:1:134
-2478:1:138
-2479:1:139
-2480:1:146
-2481:1:147
-2482:1:158
-2483:1:159
-2484:1:160
-2485:1:171
-2486:1:176
-2487:1:177
-2488:0:2112
-2489:1:189
-2490:0:2112
-2491:1:191
-2492:0:2112
-2493:2:1652
-2494:2:1656
-2495:2:1657
-2496:2:1665
-2497:2:1666
-2498:2:1670
-2499:2:1671
-2500:2:1679
-2501:2:1684
-2502:2:1688
-2503:2:1689
-2504:2:1696
-2505:2:1697
-2506:2:1708
-2507:2:1716
-2508:2:1717
-2509:2:1721
-2510:2:1726
-2511:2:1727
-2512:0:2112
-2513:2:1739
-2514:0:2112
-2515:2:1560
-2516:0:2112
-2517:2:1561
-2518:0:2112
-2519:2:1562
-2520:2:1566
-2521:2:1567
-2522:2:1575
-2523:2:1576
-2524:2:1580
-2525:2:1581
-2526:2:1589
-2527:2:1594
-2528:2:1598
-2529:2:1599
-2530:2:1606
-2531:2:1607
-2532:2:1618
-2533:2:1626
-2534:2:1627
-2535:2:1631
-2536:2:1636
-2537:2:1637
-2538:0:2112
-2539:2:1649
-2540:0:2112
-2541:2:1651
-2542:0:2112
-2543:1:192
-2544:0:2112
-2545:2:1652
-2546:2:1656
-2547:2:1657
-2548:2:1665
-2549:2:1666
-2550:2:1670
-2551:2:1671
-2552:2:1679
-2553:2:1684
-2554:2:1688
-2555:2:1689
-2556:2:1696
-2557:2:1697
-2558:2:1708
-2559:2:1716
-2560:2:1717
-2561:2:1721
-2562:2:1726
-2563:2:1727
-2564:0:2112
-2565:2:1739
-2566:0:2112
-2567:2:1560
-2568:0:2112
-2569:2:1561
-2570:0:2112
-2571:2:1562
-2572:2:1566
-2573:2:1567
-2574:2:1575
-2575:2:1576
-2576:2:1580
-2577:2:1581
-2578:2:1589
-2579:2:1594
-2580:2:1598
-2581:2:1599
-2582:2:1606
-2583:2:1607
-2584:2:1618
-2585:2:1626
-2586:2:1627
-2587:2:1631
-2588:2:1636
-2589:2:1637
-2590:0:2112
-2591:2:1649
-2592:0:2112
-2593:2:1651
-2594:0:2112
-2595:1:193
-2596:1:197
-2597:1:198
-2598:1:206
-2599:1:207
-2600:1:211
-2601:1:212
-2602:1:220
-2603:1:225
-2604:1:229
-2605:1:230
-2606:1:237
-2607:1:238
-2608:1:249
-2609:1:250
-2610:1:251
-2611:1:262
-2612:1:267
-2613:1:268
-2614:0:2112
-2615:1:280
-2616:0:2112
-2617:2:1652
-2618:2:1656
-2619:2:1657
-2620:2:1665
-2621:2:1666
-2622:2:1670
-2623:2:1671
-2624:2:1679
-2625:2:1684
-2626:2:1688
-2627:2:1689
-2628:2:1696
-2629:2:1697
-2630:2:1708
-2631:2:1716
-2632:2:1717
-2633:2:1721
-2634:2:1726
-2635:2:1727
-2636:0:2112
-2637:2:1739
-2638:0:2112
-2639:2:1560
-2640:0:2112
-2641:2:1561
-2642:0:2112
-2643:2:1562
-2644:2:1566
-2645:2:1567
-2646:2:1575
-2647:2:1576
-2648:2:1580
-2649:2:1581
-2650:2:1589
-2651:2:1594
-2652:2:1598
-2653:2:1599
-2654:2:1606
-2655:2:1607
-2656:2:1618
-2657:2:1626
-2658:2:1627
-2659:2:1631
-2660:2:1636
-2661:2:1637
-2662:0:2112
-2663:2:1649
-2664:0:2112
-2665:2:1651
-2666:0:2112
-2667:1:282
-2668:0:2112
-2669:1:291
-2670:0:2112
-2671:1:293
-2672:0:2112
-2673:1:11
-2674:0:2112
-2675:2:1652
-2676:2:1656
-2677:2:1657
-2678:2:1665
-2679:2:1666
-2680:2:1670
-2681:2:1671
-2682:2:1679
-2683:2:1684
-2684:2:1688
-2685:2:1689
-2686:2:1696
-2687:2:1697
-2688:2:1708
-2689:2:1716
-2690:2:1717
-2691:2:1721
-2692:2:1726
-2693:2:1727
-2694:0:2112
-2695:2:1739
-2696:0:2112
-2697:2:1560
-2698:0:2112
-2699:2:1561
-2700:0:2112
-2701:2:1562
-2702:2:1566
-2703:2:1567
-2704:2:1575
-2705:2:1576
-2706:2:1580
-2707:2:1581
-2708:2:1589
-2709:2:1594
-2710:2:1598
-2711:2:1599
-2712:2:1606
-2713:2:1607
-2714:2:1618
-2715:2:1626
-2716:2:1627
-2717:2:1631
-2718:2:1636
-2719:2:1637
-2720:0:2112
-2721:2:1649
-2722:0:2112
-2723:2:1651
-2724:0:2112
-2725:1:12
-2726:1:16
-2727:1:17
-2728:1:25
-2729:1:34
-2730:1:35
-2731:1:39
-2732:1:44
-2733:1:48
-2734:1:49
-2735:1:56
-2736:1:57
-2737:1:68
-2738:1:69
-2739:1:72
-2740:1:73
-2741:1:81
-2742:1:86
-2743:1:87
-2744:0:2112
-2745:1:99
-2746:0:2112
-2747:2:1652
-2748:2:1656
-2749:2:1657
-2750:2:1665
-2751:2:1666
-2752:2:1670
-2753:2:1671
-2754:2:1679
-2755:2:1684
-2756:2:1688
-2757:2:1689
-2758:2:1696
-2759:2:1697
-2760:2:1708
-2761:2:1716
-2762:2:1717
-2763:2:1721
-2764:2:1726
-2765:2:1727
-2766:0:2112
-2767:2:1739
-2768:0:2112
-2769:2:1560
-2770:0:2112
-2771:2:1561
-2772:0:2112
-2773:2:1562
-2774:2:1566
-2775:2:1567
-2776:2:1575
-2777:2:1576
-2778:2:1580
-2779:2:1581
-2780:2:1589
-2781:2:1594
-2782:2:1598
-2783:2:1599
-2784:2:1606
-2785:2:1607
-2786:2:1618
-2787:2:1626
-2788:2:1627
-2789:2:1631
-2790:2:1636
-2791:2:1637
-2792:0:2112
-2793:2:1649
-2794:0:2112
-2795:2:1651
-2796:0:2112
-2797:1:101
-2798:0:2112
-2799:2:1652
-2800:2:1656
-2801:2:1657
-2802:2:1665
-2803:2:1666
-2804:2:1670
-2805:2:1671
-2806:2:1679
-2807:2:1684
-2808:2:1688
-2809:2:1689
-2810:2:1696
-2811:2:1697
-2812:2:1708
-2813:2:1716
-2814:2:1717
-2815:2:1721
-2816:2:1726
-2817:2:1727
-2818:0:2112
-2819:2:1739
-2820:0:2112
-2821:2:1560
-2822:0:2112
-2823:2:1561
-2824:0:2112
-2825:2:1562
-2826:2:1566
-2827:2:1567
-2828:2:1575
-2829:2:1576
-2830:2:1580
-2831:2:1581
-2832:2:1589
-2833:2:1594
-2834:2:1598
-2835:2:1599
-2836:2:1606
-2837:2:1607
-2838:2:1618
-2839:2:1626
-2840:2:1627
-2841:2:1631
-2842:2:1636
-2843:2:1637
-2844:0:2112
-2845:2:1649
-2846:0:2112
-2847:2:1651
-2848:0:2112
-2849:1:102
-2850:1:106
-2851:1:107
-2852:1:115
-2853:1:124
-2854:1:125
-2855:1:129
-2856:1:134
-2857:1:138
-2858:1:139
-2859:1:146
-2860:1:147
-2861:1:158
-2862:1:159
-2863:1:162
-2864:1:163
-2865:1:171
-2866:1:176
-2867:1:177
-2868:0:2112
-2869:1:189
-2870:0:2112
-2871:1:285
-2872:0:2112
-2873:2:1652
-2874:2:1656
-2875:2:1657
-2876:2:1665
-2877:2:1666
-2878:2:1670
-2879:2:1671
-2880:2:1679
-2881:2:1684
-2882:2:1688
-2883:2:1689
-2884:2:1696
-2885:2:1697
-2886:2:1708
-2887:2:1716
-2888:2:1717
-2889:2:1721
-2890:2:1726
-2891:2:1727
-2892:0:2112
-2893:2:1739
-2894:0:2112
-2895:2:1560
-2896:0:2112
-2897:2:1561
-2898:0:2112
-2899:2:1562
-2900:2:1566
-2901:2:1567
-2902:2:1575
-2903:2:1576
-2904:2:1580
-2905:2:1581
-2906:2:1589
-2907:2:1594
-2908:2:1598
-2909:2:1599
-2910:2:1606
-2911:2:1607
-2912:2:1618
-2913:2:1626
-2914:2:1627
-2915:2:1631
-2916:2:1636
-2917:2:1637
-2918:0:2112
-2919:2:1649
-2920:0:2112
-2921:2:1651
-2922:0:2112
-2923:1:286
-2924:0:2112
-2925:1:291
-2926:0:2112
-2927:1:293
-2928:0:2112
-2929:1:296
-2930:0:2112
-2931:2:1652
-2932:2:1656
-2933:2:1657
-2934:2:1665
-2935:2:1666
-2936:2:1670
-2937:2:1671
-2938:2:1679
-2939:2:1684
-2940:2:1688
-2941:2:1689
-2942:2:1696
-2943:2:1697
-2944:2:1708
-2945:2:1716
-2946:2:1717
-2947:2:1721
-2948:2:1726
-2949:2:1727
-2950:0:2112
-2951:2:1739
-2952:0:2112
-2953:2:1560
-2954:0:2112
-2955:2:1561
-2956:0:2112
-2957:2:1562
-2958:2:1566
-2959:2:1567
-2960:2:1575
-2961:2:1576
-2962:2:1580
-2963:2:1581
-2964:2:1589
-2965:2:1594
-2966:2:1598
-2967:2:1599
-2968:2:1606
-2969:2:1607
-2970:2:1618
-2971:2:1626
-2972:2:1627
-2973:2:1631
-2974:2:1636
-2975:2:1637
-2976:0:2112
-2977:2:1649
-2978:0:2112
-2979:2:1651
-2980:0:2112
-2981:1:301
-2982:0:2112
-2983:2:1652
-2984:2:1656
-2985:2:1657
-2986:2:1665
-2987:2:1666
-2988:2:1670
-2989:2:1671
-2990:2:1679
-2991:2:1684
-2992:2:1688
-2993:2:1689
-2994:2:1696
-2995:2:1697
-2996:2:1708
-2997:2:1716
-2998:2:1717
-2999:2:1721
-3000:2:1726
-3001:2:1727
-3002:0:2112
-3003:2:1739
-3004:0:2112
-3005:2:1560
-3006:0:2112
-3007:2:1561
-3008:0:2112
-3009:2:1562
-3010:2:1566
-3011:2:1567
-3012:2:1575
-3013:2:1576
-3014:2:1580
-3015:2:1581
-3016:2:1589
-3017:2:1594
-3018:2:1598
-3019:2:1599
-3020:2:1606
-3021:2:1607
-3022:2:1618
-3023:2:1626
-3024:2:1627
-3025:2:1631
-3026:2:1636
-3027:2:1637
-3028:0:2112
-3029:2:1649
-3030:0:2112
-3031:2:1651
-3032:0:2112
-3033:1:302
-3034:0:2112
-3035:2:1652
-3036:2:1656
-3037:2:1657
-3038:2:1665
-3039:2:1666
-3040:2:1670
-3041:2:1671
-3042:2:1679
-3043:2:1684
-3044:2:1688
-3045:2:1689
-3046:2:1696
-3047:2:1697
-3048:2:1708
-3049:2:1716
-3050:2:1717
-3051:2:1721
-3052:2:1726
-3053:2:1727
-3054:0:2112
-3055:2:1739
-3056:0:2112
-3057:2:1560
-3058:0:2112
-3059:2:1561
-3060:0:2112
-3061:2:1562
-3062:2:1566
-3063:2:1567
-3064:2:1575
-3065:2:1576
-3066:2:1580
-3067:2:1581
-3068:2:1589
-3069:2:1594
-3070:2:1598
-3071:2:1599
-3072:2:1606
-3073:2:1607
-3074:2:1618
-3075:2:1626
-3076:2:1627
-3077:2:1631
-3078:2:1636
-3079:2:1637
-3080:0:2112
-3081:2:1649
-3082:0:2112
-3083:2:1651
-3084:0:2112
-3085:1:303
-3086:0:2112
-3087:1:304
-3088:0:2112
-3089:1:305
-3090:0:2112
-3091:1:306
-3092:0:2112
-3093:1:308
-3094:0:2112
-3095:2:1652
-3096:2:1656
-3097:2:1657
-3098:2:1665
-3099:2:1666
-3100:2:1670
-3101:2:1671
-3102:2:1679
-3103:2:1684
-3104:2:1688
-3105:2:1689
-3106:2:1696
-3107:2:1697
-3108:2:1708
-3109:2:1716
-3110:2:1717
-3111:2:1721
-3112:2:1726
-3113:2:1727
-3114:0:2112
-3115:2:1739
-3116:0:2112
-3117:2:1560
-3118:0:2112
-3119:2:1561
-3120:0:2112
-3121:2:1562
-3122:2:1566
-3123:2:1567
-3124:2:1575
-3125:2:1576
-3126:2:1580
-3127:2:1581
-3128:2:1589
-3129:2:1594
-3130:2:1598
-3131:2:1599
-3132:2:1606
-3133:2:1607
-3134:2:1618
-3135:2:1626
-3136:2:1627
-3137:2:1631
-3138:2:1636
-3139:2:1637
-3140:0:2112
-3141:2:1649
-3142:0:2112
-3143:2:1651
-3144:0:2112
-3145:1:310
-3146:0:2112
-3147:2:1652
-3148:2:1656
-3149:2:1657
-3150:2:1665
-3151:2:1666
-3152:2:1670
-3153:2:1671
-3154:2:1679
-3155:2:1684
-3156:2:1688
-3157:2:1689
-3158:2:1696
-3159:2:1697
-3160:2:1708
-3161:2:1716
-3162:2:1717
-3163:2:1721
-3164:2:1726
-3165:2:1727
-3166:0:2112
-3167:2:1739
-3168:0:2112
-3169:2:1560
-3170:0:2112
-3171:2:1561
-3172:0:2112
-3173:2:1562
-3174:2:1566
-3175:2:1567
-3176:2:1575
-3177:2:1576
-3178:2:1580
-3179:2:1581
-3180:2:1589
-3181:2:1594
-3182:2:1598
-3183:2:1599
-3184:2:1606
-3185:2:1607
-3186:2:1618
-3187:2:1626
-3188:2:1627
-3189:2:1631
-3190:2:1636
-3191:2:1637
-3192:0:2112
-3193:2:1649
-3194:0:2112
-3195:2:1651
-3196:0:2112
-3197:1:311
-3198:1:315
-3199:1:316
-3200:1:324
-3201:1:333
-3202:1:334
-3203:1:338
-3204:1:343
-3205:1:347
-3206:1:348
-3207:1:355
-3208:1:356
-3209:1:367
-3210:1:368
-3211:1:371
-3212:1:372
-3213:1:380
-3214:1:385
-3215:1:386
-3216:0:2112
-3217:1:398
-3218:0:2112
-3219:2:1652
-3220:2:1656
-3221:2:1657
-3222:2:1665
-3223:2:1666
-3224:2:1670
-3225:2:1671
-3226:2:1679
-3227:2:1684
-3228:2:1688
-3229:2:1689
-3230:2:1696
-3231:2:1697
-3232:2:1708
-3233:2:1716
-3234:2:1717
-3235:2:1721
-3236:2:1726
-3237:2:1727
-3238:0:2112
-3239:2:1739
-3240:0:2112
-3241:2:1560
-3242:0:2112
-3243:2:1561
-3244:0:2112
-3245:2:1562
-3246:2:1566
-3247:2:1567
-3248:2:1575
-3249:2:1576
-3250:2:1580
-3251:2:1581
-3252:2:1589
-3253:2:1594
-3254:2:1598
-3255:2:1599
-3256:2:1606
-3257:2:1607
-3258:2:1618
-3259:2:1626
-3260:2:1627
-3261:2:1631
-3262:2:1636
-3263:2:1637
-3264:0:2112
-3265:2:1649
-3266:0:2112
-3267:2:1651
-3268:0:2112
-3269:1:400
-3270:0:2112
-3271:1:305
-3272:0:2112
-3273:1:306
-3274:0:2112
-3275:1:308
-3276:0:2112
-3277:2:1652
-3278:2:1656
-3279:2:1657
-3280:2:1665
-3281:2:1666
-3282:2:1670
-3283:2:1671
-3284:2:1679
-3285:2:1684
-3286:2:1688
-3287:2:1689
-3288:2:1696
-3289:2:1697
-3290:2:1708
-3291:2:1716
-3292:2:1717
-3293:2:1721
-3294:2:1726
-3295:2:1727
-3296:0:2112
-3297:2:1739
-3298:0:2112
-3299:2:1560
-3300:0:2112
-3301:2:1561
-3302:0:2112
-3303:2:1562
-3304:2:1566
-3305:2:1567
-3306:2:1575
-3307:2:1576
-3308:2:1580
-3309:2:1581
-3310:2:1589
-3311:2:1594
-3312:2:1598
-3313:2:1599
-3314:2:1606
-3315:2:1607
-3316:2:1618
-3317:2:1626
-3318:2:1627
-3319:2:1631
-3320:2:1636
-3321:2:1637
-3322:0:2112
-3323:2:1649
-3324:0:2112
-3325:2:1651
-3326:0:2112
-3327:1:310
-3328:0:2112
-3329:2:1652
-3330:2:1656
-3331:2:1657
-3332:2:1665
-3333:2:1666
-3334:2:1670
-3335:2:1671
-3336:2:1679
-3337:2:1684
-3338:2:1688
-3339:2:1689
-3340:2:1696
-3341:2:1697
-3342:2:1708
-3343:2:1716
-3344:2:1717
-3345:2:1721
-3346:2:1726
-3347:2:1727
-3348:0:2112
-3349:2:1739
-3350:0:2112
-3351:2:1560
-3352:0:2112
-3353:2:1561
-3354:0:2112
-3355:2:1562
-3356:2:1566
-3357:2:1567
-3358:2:1575
-3359:2:1576
-3360:2:1580
-3361:2:1581
-3362:2:1589
-3363:2:1594
-3364:2:1598
-3365:2:1599
-3366:2:1606
-3367:2:1607
-3368:2:1618
-3369:2:1626
-3370:2:1627
-3371:2:1631
-3372:2:1636
-3373:2:1637
-3374:0:2112
-3375:2:1649
-3376:0:2112
-3377:2:1651
-3378:0:2112
-3379:1:311
-3380:1:315
-3381:1:316
-3382:1:324
-3383:1:333
-3384:1:334
-3385:1:338
-3386:1:343
-3387:1:347
-3388:1:348
-3389:1:355
-3390:1:356
-3391:1:367
-3392:1:368
-3393:1:371
-3394:1:372
-3395:1:380
-3396:1:385
-3397:1:386
-3398:0:2112
-3399:1:398
-3400:0:2112
-3401:2:1652
-3402:2:1656
-3403:2:1657
-3404:2:1665
-3405:2:1666
-3406:2:1670
-3407:2:1671
-3408:2:1679
-3409:2:1684
-3410:2:1688
-3411:2:1689
-3412:2:1696
-3413:2:1697
-3414:2:1708
-3415:2:1716
-3416:2:1717
-3417:2:1721
-3418:2:1726
-3419:2:1727
-3420:0:2112
-3421:2:1739
-3422:0:2112
-3423:2:1560
-3424:0:2112
-3425:2:1561
-3426:0:2112
-3427:2:1562
-3428:2:1566
-3429:2:1567
-3430:2:1575
-3431:2:1576
-3432:2:1580
-3433:2:1581
-3434:2:1589
-3435:2:1594
-3436:2:1598
-3437:2:1599
-3438:2:1606
-3439:2:1607
-3440:2:1618
-3441:2:1626
-3442:2:1627
-3443:2:1631
-3444:2:1636
-3445:2:1637
-3446:0:2112
-3447:2:1649
-3448:0:2112
-3449:2:1651
-3450:0:2112
-3451:1:400
-3452:0:2112
-3453:1:404
-3454:0:2112
-3455:1:9
-3456:0:2112
-3457:1:10
-3458:0:2112
-3459:1:11
-3460:0:2112
-3461:2:1652
-3462:2:1656
-3463:2:1657
-3464:2:1665
-3465:2:1666
-3466:2:1670
-3467:2:1671
-3468:2:1679
-3469:2:1684
-3470:2:1688
-3471:2:1689
-3472:2:1696
-3473:2:1697
-3474:2:1708
-3475:2:1716
-3476:2:1717
-3477:2:1721
-3478:2:1726
-3479:2:1727
-3480:0:2112
-3481:2:1739
-3482:0:2112
-3483:2:1560
-3484:0:2112
-3485:2:1561
-3486:0:2112
-3487:2:1562
-3488:2:1566
-3489:2:1567
-3490:2:1575
-3491:2:1576
-3492:2:1580
-3493:2:1581
-3494:2:1589
-3495:2:1594
-3496:2:1598
-3497:2:1599
-3498:2:1606
-3499:2:1607
-3500:2:1618
-3501:2:1626
-3502:2:1627
-3503:2:1631
-3504:2:1636
-3505:2:1637
-3506:0:2112
-3507:2:1649
-3508:0:2112
-3509:2:1651
-3510:0:2112
-3511:1:12
-3512:1:16
-3513:1:17
-3514:1:25
-3515:1:34
-3516:1:35
-3517:1:39
-3518:1:44
-3519:1:48
-3520:1:49
-3521:1:56
-3522:1:57
-3523:1:68
-3524:1:69
-3525:1:72
-3526:1:73
-3527:1:81
-3528:1:86
-3529:1:87
-3530:0:2112
-3531:1:99
-3532:0:2112
-3533:2:1652
-3534:2:1656
-3535:2:1657
-3536:2:1665
-3537:2:1666
-3538:2:1670
-3539:2:1671
-3540:2:1679
-3541:2:1684
-3542:2:1688
-3543:2:1689
-3544:2:1696
-3545:2:1697
-3546:2:1708
-3547:2:1716
-3548:2:1717
-3549:2:1721
-3550:2:1726
-3551:2:1727
-3552:0:2112
-3553:2:1739
-3554:0:2112
-3555:2:1560
-3556:0:2112
-3557:2:1561
-3558:0:2112
-3559:2:1562
-3560:2:1566
-3561:2:1567
-3562:2:1575
-3563:2:1576
-3564:2:1580
-3565:2:1581
-3566:2:1589
-3567:2:1594
-3568:2:1598
-3569:2:1599
-3570:2:1606
-3571:2:1607
-3572:2:1618
-3573:2:1626
-3574:2:1627
-3575:2:1631
-3576:2:1636
-3577:2:1637
-3578:0:2112
-3579:2:1649
-3580:0:2112
-3581:2:1651
-3582:0:2112
-3583:1:101
-3584:0:2112
-3585:2:1652
-3586:2:1656
-3587:2:1657
-3588:2:1665
-3589:2:1666
-3590:2:1670
-3591:2:1671
-3592:2:1679
-3593:2:1684
-3594:2:1688
-3595:2:1689
-3596:2:1696
-3597:2:1697
-3598:2:1708
-3599:2:1716
-3600:2:1717
-3601:2:1721
-3602:2:1726
-3603:2:1727
-3604:0:2112
-3605:2:1739
-3606:0:2112
-3607:2:1560
-3608:0:2112
-3609:2:1561
-3610:0:2112
-3611:2:1562
-3612:2:1566
-3613:2:1567
-3614:2:1575
-3615:2:1576
-3616:2:1580
-3617:2:1581
-3618:2:1589
-3619:2:1594
-3620:2:1598
-3621:2:1599
-3622:2:1606
-3623:2:1607
-3624:2:1618
-3625:2:1626
-3626:2:1627
-3627:2:1631
-3628:2:1636
-3629:2:1637
-3630:0:2112
-3631:2:1649
-3632:0:2112
-3633:2:1651
-3634:0:2112
-3635:1:102
-3636:1:106
-3637:1:107
-3638:1:115
-3639:1:124
-3640:1:125
-3641:1:129
-3642:1:134
-3643:1:138
-3644:1:139
-3645:1:146
-3646:1:147
-3647:1:158
-3648:1:159
-3649:1:162
-3650:1:163
-3651:1:171
-3652:1:176
-3653:1:177
-3654:0:2112
-3655:1:189
-3656:0:2112
-3657:1:191
-3658:0:2112
-3659:2:1652
-3660:2:1656
-3661:2:1657
-3662:2:1665
-3663:2:1666
-3664:2:1670
-3665:2:1671
-3666:2:1679
-3667:2:1684
-3668:2:1688
-3669:2:1689
-3670:2:1696
-3671:2:1697
-3672:2:1708
-3673:2:1716
-3674:2:1717
-3675:2:1721
-3676:2:1726
-3677:2:1727
-3678:0:2112
-3679:2:1739
-3680:0:2112
-3681:2:1560
-3682:0:2112
-3683:2:1561
-3684:0:2112
-3685:2:1562
-3686:2:1566
-3687:2:1567
-3688:2:1575
-3689:2:1576
-3690:2:1580
-3691:2:1581
-3692:2:1589
-3693:2:1594
-3694:2:1598
-3695:2:1599
-3696:2:1606
-3697:2:1607
-3698:2:1618
-3699:2:1626
-3700:2:1627
-3701:2:1631
-3702:2:1636
-3703:2:1637
-3704:0:2112
-3705:2:1649
-3706:0:2112
-3707:2:1651
-3708:0:2112
-3709:1:192
-3710:0:2112
-3711:2:1652
-3712:2:1656
-3713:2:1657
-3714:2:1665
-3715:2:1666
-3716:2:1670
-3717:2:1671
-3718:2:1679
-3719:2:1684
-3720:2:1688
-3721:2:1689
-3722:2:1696
-3723:2:1697
-3724:2:1708
-3725:2:1716
-3726:2:1717
-3727:2:1721
-3728:2:1726
-3729:2:1727
-3730:0:2112
-3731:2:1739
-3732:0:2112
-3733:2:1560
-3734:0:2112
-3735:2:1561
-3736:0:2112
-3737:2:1562
-3738:2:1566
-3739:2:1567
-3740:2:1575
-3741:2:1576
-3742:2:1580
-3743:2:1581
-3744:2:1589
-3745:2:1594
-3746:2:1598
-3747:2:1599
-3748:2:1606
-3749:2:1607
-3750:2:1618
-3751:2:1626
-3752:2:1627
-3753:2:1631
-3754:2:1636
-3755:2:1637
-3756:0:2112
-3757:2:1649
-3758:0:2112
-3759:2:1651
-3760:0:2112
-3761:1:193
-3762:1:197
-3763:1:198
-3764:1:206
-3765:1:215
-3766:1:216
-3767:1:220
-3768:1:225
-3769:1:229
-3770:1:230
-3771:1:237
-3772:1:238
-3773:1:249
-3774:1:250
-3775:1:253
-3776:1:254
-3777:1:262
-3778:1:267
-3779:1:268
-3780:0:2112
-3781:1:280
-3782:0:2112
-3783:2:1652
-3784:2:1656
-3785:2:1657
-3786:2:1665
-3787:2:1666
-3788:2:1670
-3789:2:1671
-3790:2:1679
-3791:2:1684
-3792:2:1688
-3793:2:1689
-3794:2:1696
-3795:2:1697
-3796:2:1708
-3797:2:1716
-3798:2:1717
-3799:2:1721
-3800:2:1726
-3801:2:1727
-3802:0:2112
-3803:2:1739
-3804:0:2112
-3805:2:1560
-3806:0:2112
-3807:2:1561
-3808:0:2112
-3809:2:1562
-3810:2:1566
-3811:2:1567
-3812:2:1575
-3813:2:1576
-3814:2:1580
-3815:2:1581
-3816:2:1589
-3817:2:1594
-3818:2:1598
-3819:2:1599
-3820:2:1606
-3821:2:1607
-3822:2:1618
-3823:2:1626
-3824:2:1627
-3825:2:1631
-3826:2:1636
-3827:2:1637
-3828:0:2112
-3829:2:1649
-3830:0:2112
-3831:1:282
-3832:0:2112
-3833:1:291
-3834:0:2112
-3835:1:293
-3836:0:2112
-3837:1:11
-3838:0:2112
-3839:1:12
-3840:1:16
-3841:1:17
-3842:1:25
-3843:1:26
-3844:1:27
-3845:1:39
-3846:1:44
-3847:1:48
-3848:1:49
-3849:1:56
-3850:1:57
-3851:1:68
-3852:1:69
-3853:1:70
-3854:1:81
-3855:1:86
-3856:1:87
-3857:0:2112
-3858:1:99
-3859:0:2112
-3860:1:101
-3861:0:2112
-3862:1:102
-3863:1:106
-3864:1:107
-3865:1:115
-3866:1:116
-3867:1:120
-3868:1:121
-3869:1:129
-3870:1:134
-3871:1:138
-3872:1:139
-3873:1:146
-3874:1:147
-3875:1:158
-3876:1:159
-3877:1:160
-3878:1:171
-3879:1:176
-3880:1:177
-3881:0:2112
-3882:1:189
-3883:0:2112
-3884:1:285
-3885:0:2112
-3886:1:286
-3887:0:2112
-3888:1:291
-3889:0:2112
-3890:1:293
-3891:0:2112
-3892:1:296
-3893:0:2112
-3894:1:301
-3895:0:2112
-3896:1:302
-3897:0:2112
-3898:1:303
-3899:0:2112
-3900:1:304
-3901:0:2112
-3902:1:305
-3903:0:2112
-3904:1:306
-3905:0:2112
-3906:1:308
-3907:0:2112
-3908:1:310
-3909:0:2112
-3910:1:311
-3911:1:315
-3912:1:316
-3913:1:324
-3914:1:325
-3915:1:326
-3916:1:338
-3917:1:343
-3918:1:347
-3919:1:348
-3920:1:355
-3921:1:356
-3922:1:367
-3923:1:368
-3924:1:369
-3925:1:380
-3926:1:385
-3927:1:386
-3928:0:2112
-3929:1:398
-3930:0:2112
-3931:1:400
-3932:0:2112
-3933:1:305
-3934:0:2112
-3935:1:306
-3936:0:2112
-3937:1:308
-3938:0:2112
-3939:1:310
-3940:0:2112
-3941:1:311
-3942:1:315
-3943:1:316
-3944:1:324
-3945:1:325
-3946:1:326
-3947:1:338
-3948:1:343
-3949:1:347
-3950:1:348
-3951:1:355
-3952:1:356
-3953:1:367
-3954:1:368
-3955:1:369
-3956:1:380
-3957:1:385
-3958:1:386
-3959:0:2112
-3960:1:398
-3961:0:2112
-3962:1:400
-3963:0:2112
-3964:1:404
-3965:0:2112
-3966:1:9
-3967:0:2112
-3968:1:10
-3969:0:2112
-3970:1:11
-3971:0:2112
-3972:1:12
-3973:1:16
-3974:1:17
-3975:1:25
-3976:1:26
-3977:1:27
-3978:1:39
-3979:1:44
-3980:1:48
-3981:1:49
-3982:1:56
-3983:1:57
-3984:1:68
-3985:1:69
-3986:1:70
-3987:1:81
-3988:1:86
-3989:1:87
-3990:0:2112
-3991:1:99
-3992:0:2112
-3993:1:101
-3994:0:2112
-3995:1:102
-3996:1:106
-3997:1:107
-3998:1:115
-3999:1:116
-4000:1:120
-4001:1:121
-4002:1:129
-4003:1:134
-4004:1:138
-4005:1:139
-4006:1:146
-4007:1:147
-4008:1:158
-4009:1:159
-4010:1:160
-4011:1:171
-4012:1:176
-4013:1:177
-4014:0:2112
-4015:1:189
-4016:0:2112
-4017:1:191
-4018:0:2112
-4019:1:192
-4020:0:2112
-4021:1:193
-4022:1:197
-4023:1:198
-4024:1:206
-4025:1:207
-4026:1:211
-4027:1:212
-4028:1:220
-4029:1:225
-4030:1:229
-4031:1:230
-4032:1:237
-4033:1:238
-4034:1:249
-4035:1:250
-4036:1:251
-4037:1:262
-4038:1:267
-4039:1:268
-4040:0:2112
-4041:1:280
-4042:0:2112
-4043:1:282
-4044:0:2112
-4045:2:1651
-4046:0:2112
-4047:1:291
-4048:0:2112
-4049:2:1652
-4050:2:1656
-4051:2:1657
-4052:2:1665
-4053:2:1666
-4054:2:1670
-4055:2:1671
-4056:2:1679
-4057:2:1684
-4058:2:1688
-4059:2:1689
-4060:2:1696
-4061:2:1697
-4062:2:1708
-4063:2:1716
-4064:2:1717
-4065:2:1721
-4066:2:1726
-4067:2:1727
-4068:0:2112
-4069:2:1739
-4070:0:2112
-4071:2:1560
-4072:0:2112
-4073:1:293
-4074:0:2112
-4075:1:11
-4076:0:2112
-4077:1:12
-4078:1:16
-4079:1:17
-4080:1:25
-4081:1:26
-4082:1:27
-4083:1:39
-4084:1:44
-4085:1:48
-4086:1:49
-4087:1:56
-4088:1:57
-4089:1:68
-4090:1:69
-4091:1:70
-4092:1:81
-4093:1:86
-4094:1:87
-4095:0:2112
-4096:1:99
-4097:0:2112
-4098:1:101
-4099:0:2112
-4100:1:102
-4101:1:106
-4102:1:107
-4103:1:115
-4104:1:116
-4105:1:120
-4106:1:121
-4107:1:129
-4108:1:134
-4109:1:138
-4110:1:139
-4111:1:146
-4112:1:147
-4113:1:158
-4114:1:159
-4115:1:160
-4116:1:171
-4117:1:176
-4118:1:177
-4119:0:2112
-4120:1:189
-4121:0:2112
-4122:1:285
-4123:0:2112
-4124:1:286
-4125:0:2112
-4126:1:291
-4127:0:2112
-4128:1:293
-4129:0:2112
-4130:1:296
-4131:0:2112
-4132:1:301
-4133:0:2112
-4134:1:302
-4135:0:2112
-4136:1:303
-4137:0:2112
-4138:1:304
-4139:0:2112
-4140:1:305
-4141:0:2112
-4142:1:306
-4143:0:2112
-4144:1:308
-4145:0:2112
-4146:1:310
-4147:0:2112
-4148:1:311
-4149:1:315
-4150:1:316
-4151:1:324
-4152:1:325
-4153:1:326
-4154:1:338
-4155:1:343
-4156:1:347
-4157:1:348
-4158:1:355
-4159:1:356
-4160:1:367
-4161:1:368
-4162:1:369
-4163:1:380
-4164:1:385
-4165:1:386
-4166:0:2112
-4167:1:398
-4168:0:2112
-4169:1:400
-4170:0:2112
-4171:1:305
-4172:0:2112
-4173:1:306
-4174:0:2112
-4175:1:308
-4176:0:2112
-4177:1:310
-4178:0:2112
-4179:1:311
-4180:1:315
-4181:1:316
-4182:1:324
-4183:1:325
-4184:1:326
-4185:1:338
-4186:1:343
-4187:1:347
-4188:1:348
-4189:1:355
-4190:1:356
-4191:1:367
-4192:1:368
-4193:1:369
-4194:1:380
-4195:1:385
-4196:1:386
-4197:0:2112
-4198:1:398
-4199:0:2112
-4200:1:400
-4201:0:2112
-4202:1:404
-4203:0:2112
-4204:1:9
-4205:0:2112
-4206:1:10
-4207:0:2112
-4208:1:11
-4209:0:2112
-4210:1:12
-4211:1:16
-4212:1:17
-4213:1:25
-4214:1:26
-4215:1:27
-4216:1:39
-4217:1:44
-4218:1:48
-4219:1:49
-4220:1:56
-4221:1:57
-4222:1:68
-4223:1:69
-4224:1:70
-4225:1:81
-4226:1:86
-4227:1:87
-4228:0:2112
-4229:1:99
-4230:0:2112
-4231:1:101
-4232:0:2112
-4233:1:102
-4234:1:106
-4235:1:107
-4236:1:115
-4237:1:116
-4238:1:120
-4239:1:121
-4240:1:129
-4241:1:134
-4242:1:138
-4243:1:139
-4244:1:146
-4245:1:147
-4246:1:158
-4247:1:159
-4248:1:160
-4249:1:171
-4250:1:176
-4251:1:177
-4252:0:2112
-4253:1:189
-4254:0:2112
-4255:1:191
-4256:0:2112
-4257:1:192
-4258:0:2112
-4259:1:193
-4260:1:197
-4261:1:198
-4262:1:206
-4263:1:207
-4264:1:211
-4265:1:212
-4266:1:220
-4267:1:225
-4268:1:229
-4269:1:230
-4270:1:237
-4271:1:238
-4272:1:249
-4273:1:250
-4274:1:251
-4275:1:262
-4276:1:267
-4277:1:268
-4278:0:2112
-4279:1:280
-4280:0:2112
-4281:1:282
-4282:0:2112
-4283:1:291
-4284:0:2112
-4285:1:293
-4286:0:2112
-4287:2:1561
-4288:0:2112
-4289:1:11
-4290:0:2112
-4291:1:12
-4292:1:16
-4293:1:17
-4294:1:25
-4295:1:26
-4296:1:27
-4297:1:39
-4298:1:44
-4299:1:48
-4300:1:49
-4301:1:56
-4302:1:57
-4303:1:68
-4304:1:69
-4305:1:70
-4306:1:81
-4307:1:86
-4308:1:87
--1:-1:-1
-4309:0:2112
-4310:1:99
-4311:0:2112
-4312:1:101
-4313:0:2112
-4314:1:102
-4315:1:106
-4316:1:107
-4317:1:115
-4318:1:116
-4319:1:120
-4320:1:121
-4321:1:129
-4322:1:134
-4323:1:138
-4324:1:139
-4325:1:146
-4326:1:147
-4327:1:158
-4328:1:159
-4329:1:160
-4330:1:171
-4331:1:176
-4332:1:177
-4333:0:2112
-4334:1:189
-4335:0:2112
-4336:1:285
-4337:0:2112
-4338:1:286
-4339:0:2112
-4340:1:291
-4341:0:2112
-4342:1:293
-4343:0:2112
-4344:1:296
-4345:0:2112
-4346:1:301
-4347:0:2112
-4348:1:302
-4349:0:2112
-4350:1:303
-4351:0:2112
-4352:1:304
-4353:0:2112
-4354:1:305
-4355:0:2112
-4356:1:306
-4357:0:2112
-4358:1:308
-4359:0:2112
-4360:1:310
-4361:0:2112
-4362:1:311
-4363:1:315
-4364:1:316
-4365:1:324
-4366:1:325
-4367:1:326
-4368:1:338
-4369:1:343
-4370:1:347
-4371:1:348
-4372:1:355
-4373:1:356
-4374:1:367
-4375:1:368
-4376:1:369
-4377:1:380
-4378:1:385
-4379:1:386
-4380:0:2112
-4381:1:398
-4382:0:2112
-4383:1:400
-4384:0:2112
-4385:1:305
-4386:0:2112
-4387:1:306
-4388:0:2112
-4389:1:308
-4390:0:2112
-4391:1:310
-4392:0:2112
-4393:1:311
-4394:1:315
-4395:1:316
-4396:1:324
-4397:1:325
-4398:1:326
-4399:1:338
-4400:1:343
-4401:1:347
-4402:1:348
-4403:1:355
-4404:1:356
-4405:1:367
-4406:1:368
-4407:1:369
-4408:1:380
-4409:1:385
-4410:1:386
-4411:0:2112
-4412:1:398
-4413:0:2112
-4414:1:400
-4415:0:2112
-4416:1:404
-4417:0:2112
-4418:1:9
-4419:0:2112
-4420:1:10
-4421:0:2112
-4422:1:11
-4423:0:2112
-4424:1:12
-4425:1:16
-4426:1:17
-4427:1:25
-4428:1:34
-4429:1:35
-4430:1:39
-4431:1:44
-4432:1:48
-4433:1:49
-4434:1:56
-4435:1:57
-4436:1:68
-4437:1:69
-4438:1:72
-4439:1:73
-4440:1:81
-4441:1:86
-4442:1:87
-4443:0:2112
-4444:1:99
-4445:0:2112
-4446:2:1562
-4447:2:1566
-4448:2:1567
-4449:2:1575
-4450:2:1576
-4451:2:1580
-4452:2:1581
-4453:2:1589
-4454:2:1594
-4455:2:1598
-4456:2:1599
-4457:2:1606
-4458:2:1607
-4459:2:1618
-4460:2:1626
-4461:2:1627
-4462:2:1631
-4463:2:1636
-4464:2:1637
-4465:0:2112
-4466:2:1649
-4467:0:2112
-4468:2:1651
-4469:0:2112
-4470:2:1652
-4471:2:1656
-4472:2:1657
-4473:2:1665
-4474:2:1666
-4475:2:1670
-4476:2:1671
-4477:2:1679
-4478:2:1684
-4479:2:1688
-4480:2:1689
-4481:2:1696
-4482:2:1697
-4483:2:1708
-4484:2:1716
-4485:2:1717
-4486:2:1721
-4487:2:1726
-4488:2:1727
-4489:0:2112
-4490:2:1739
-4491:0:2112
-4492:2:1560
-4493:0:2112
-4494:2:1561
-4495:0:2112
-4496:1:101
-4497:0:2112
-4498:2:1562
-4499:2:1566
-4500:2:1567
-4501:2:1575
-4502:2:1576
-4503:2:1580
-4504:2:1581
-4505:2:1589
-4506:2:1594
-4507:2:1598
-4508:2:1599
-4509:2:1606
-4510:2:1607
-4511:2:1618
-4512:2:1626
-4513:2:1627
-4514:2:1631
-4515:2:1636
-4516:2:1637
-4517:0:2112
-4518:2:1649
-4519:0:2112
-4520:2:1651
-4521:0:2112
-4522:2:1652
-4523:2:1656
-4524:2:1657
-4525:2:1665
-4526:2:1666
-4527:2:1670
-4528:2:1671
-4529:2:1679
-4530:2:1684
-4531:2:1688
-4532:2:1689
-4533:2:1696
-4534:2:1697
-4535:2:1708
-4536:2:1716
-4537:2:1717
-4538:2:1721
-4539:2:1726
-4540:2:1727
-4541:0:2112
-4542:2:1739
-4543:0:2112
-4544:2:1560
-4545:0:2112
-4546:2:1561
-4547:0:2112
-4548:1:102
-4549:1:106
-4550:1:107
-4551:1:115
-4552:1:116
-4553:1:117
-4554:1:129
-4555:1:134
-4556:1:138
-4557:1:139
-4558:1:146
-4559:1:147
-4560:1:158
-4561:1:159
-4562:1:160
-4563:1:171
-4564:1:176
-4565:1:177
-4566:0:2112
-4567:1:189
-4568:0:2112
-4569:1:191
-4570:0:2112
-4571:2:1562
-4572:2:1566
-4573:2:1567
-4574:2:1575
-4575:2:1576
-4576:2:1580
-4577:2:1581
-4578:2:1589
-4579:2:1594
-4580:2:1598
-4581:2:1599
-4582:2:1606
-4583:2:1607
-4584:2:1618
-4585:2:1626
-4586:2:1627
-4587:2:1631
-4588:2:1636
-4589:2:1637
-4590:0:2112
-4591:2:1649
-4592:0:2112
-4593:2:1651
-4594:0:2112
-4595:2:1652
-4596:2:1656
-4597:2:1657
-4598:2:1665
-4599:2:1666
-4600:2:1670
-4601:2:1671
-4602:2:1679
-4603:2:1684
-4604:2:1688
-4605:2:1689
-4606:2:1696
-4607:2:1697
-4608:2:1708
-4609:2:1716
-4610:2:1717
-4611:2:1721
-4612:2:1726
-4613:2:1727
-4614:0:2112
-4615:2:1739
-4616:0:2112
-4617:2:1560
-4618:0:2112
-4619:2:1561
-4620:0:2112
-4621:1:192
-4622:0:2112
-4623:2:1562
-4624:2:1566
-4625:2:1567
-4626:2:1575
-4627:2:1576
-4628:2:1580
-4629:2:1581
-4630:2:1589
-4631:2:1594
-4632:2:1598
-4633:2:1599
-4634:2:1606
-4635:2:1607
-4636:2:1618
-4637:2:1626
-4638:2:1627
-4639:2:1631
-4640:2:1636
-4641:2:1637
-4642:0:2112
-4643:2:1649
-4644:0:2112
-4645:2:1651
-4646:0:2112
-4647:2:1652
-4648:2:1656
-4649:2:1657
-4650:2:1665
-4651:2:1666
-4652:2:1670
-4653:2:1671
-4654:2:1679
-4655:2:1684
-4656:2:1688
-4657:2:1689
-4658:2:1696
-4659:2:1697
-4660:2:1708
-4661:2:1716
-4662:2:1717
-4663:2:1721
-4664:2:1726
-4665:2:1727
-4666:0:2112
-4667:2:1739
-4668:0:2112
-4669:2:1560
-4670:0:2112
-4671:2:1561
-4672:0:2112
-4673:1:193
-4674:1:197
-4675:1:198
-4676:1:206
-4677:1:207
-4678:1:211
-4679:1:212
-4680:1:220
-4681:1:225
-4682:1:229
-4683:1:230
-4684:1:237
-4685:1:238
-4686:1:249
-4687:1:250
-4688:1:251
-4689:1:262
-4690:1:267
-4691:1:268
-4692:0:2112
-4693:1:280
-4694:0:2112
-4695:2:1562
-4696:2:1566
-4697:2:1567
-4698:2:1575
-4699:2:1576
-4700:2:1580
-4701:2:1581
-4702:2:1589
-4703:2:1594
-4704:2:1598
-4705:2:1599
-4706:2:1606
-4707:2:1607
-4708:2:1618
-4709:2:1626
-4710:2:1627
-4711:2:1631
-4712:2:1636
-4713:2:1637
-4714:0:2112
-4715:2:1649
-4716:0:2112
-4717:2:1651
-4718:0:2112
-4719:2:1652
-4720:2:1656
-4721:2:1657
-4722:2:1665
-4723:2:1666
-4724:2:1670
-4725:2:1671
-4726:2:1679
-4727:2:1684
-4728:2:1688
-4729:2:1689
-4730:2:1696
-4731:2:1697
-4732:2:1708
-4733:2:1716
-4734:2:1717
-4735:2:1721
-4736:2:1726
-4737:2:1727
-4738:0:2112
-4739:2:1739
-4740:0:2112
-4741:2:1560
-4742:0:2112
-4743:2:1561
-4744:0:2112
-4745:1:282
-4746:0:2112
-4747:1:291
-4748:0:2112
-4749:1:293
-4750:0:2112
-4751:1:11
-4752:0:2112
-4753:2:1562
-4754:2:1566
-4755:2:1567
-4756:2:1575
-4757:2:1576
-4758:2:1580
-4759:2:1581
-4760:2:1589
-4761:2:1594
-4762:2:1598
-4763:2:1599
-4764:2:1606
-4765:2:1607
-4766:2:1618
-4767:2:1626
-4768:2:1627
-4769:2:1631
-4770:2:1636
-4771:2:1637
-4772:0:2112
-4773:2:1649
-4774:0:2112
-4775:2:1651
-4776:0:2112
-4777:2:1652
-4778:2:1656
-4779:2:1657
-4780:2:1665
-4781:2:1666
-4782:2:1670
-4783:2:1671
-4784:2:1679
-4785:2:1684
-4786:2:1688
-4787:2:1689
-4788:2:1696
-4789:2:1697
-4790:2:1708
-4791:2:1716
-4792:2:1717
-4793:2:1721
-4794:2:1726
-4795:2:1727
-4796:0:2112
-4797:2:1739
-4798:0:2112
-4799:2:1560
-4800:0:2112
-4801:2:1561
-4802:0:2112
-4803:1:12
-4804:1:16
-4805:1:17
-4806:1:25
-4807:1:26
-4808:1:27
-4809:1:39
-4810:1:44
-4811:1:48
-4812:1:49
-4813:1:56
-4814:1:57
-4815:1:68
-4816:1:69
-4817:1:70
-4818:1:81
-4819:1:86
-4820:1:87
diff --git a/formal-model/urcu-paulmck/.gitignore b/formal-model/urcu-paulmck/.gitignore
deleted file mode 100644 (file)
index d62f4bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-pan*
-*.trail
diff --git a/formal-model/urcu-paulmck/urcu-paulmck.spin b/formal-model/urcu-paulmck/urcu-paulmck.spin
deleted file mode 100644 (file)
index 15338de..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * urcu_mbmin.spin: Promela code to validate urcu.  See commit number
- *     3a9e6e9df706b8d39af94d2f027210e2e7d4106e of Mathieu Desnoyer's
- *      git archive at git://lttng.org/userspace-rcu.git, but with
- *     memory barriers removed.
- *
- * This validates a single reader against a single updater.  The
- * updater is assumed to have smp_mb() barriers between each pair
- * of operations, and this model validates that a signal-mediated
- * broadcast barrier is required only at the beginning and end of
- * the synchronize_rcu().
- *
- * Note that the second half of a prior synchronize_rcu() is modelled
- * as well as the current synchronize_rcu().
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
- */
-
-/* Promela validation variables. */
-
-bit removed = 0;       /* Has RCU removal happened, e.g., list_del_rcu()? */
-bit free = 0;          /* Has RCU reclamation happened, e.g., kfree()? */
-bit need_mb = 0;       /* =1 says need reader mb, =0 for reader response. */
-byte reader_progress[4]; /* Count of read-side statement executions. */
-bit reader_done = 0;   /* =0 says reader still running, =1 says done. */
-bit updater_done = 0;  /* =0 says updater still running, =1 says done. */
-
-/* Broadcast memory barriers to enable, prior synchronize_rcu() instance. */
-
-/* #define MB_A */     /* Not required for correctness. */
-/* #define MB_B */     /* Not required for correctness. */
-/* #define MB_C */     /* Not required for correctness. */
-
-/* Broadcast memory barriers to enable, current synchronize_rcu() instance. */
-
-#define MB_D           /* First broadcast barrier in synchronize_rcu(). */
-/* #define MB_E */     /* Not required for correctness. */
-/* #define MB_F */     /* Not required for correctness. */
-#define MB_G           /* Last broadcast barrier in synchronize_rcu(). */
-
-/* urcu definitions and variables, taken straight from the algorithm. */
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-byte urcu_gp_ctr = 1;
-byte urcu_active_readers = 0;
-
-/* Model the RCU read-side critical section. */
-
-proctype urcu_reader()
-{
-       bit done = 0;
-       bit mbok;
-       byte tmp;
-       byte tmp_removed;
-       byte tmp_free;
-
-       /* Absorb any early requests for memory barriers. */
-       do
-       :: need_mb == 1 ->
-               need_mb = 0;
-       :: 1 -> break;
-       od;
-
-       /*
-        * Each pass through this loop executes one read-side statement
-        * from the following code fragment:
-        *
-        *      rcu_read_lock(); [0a]
-        *      rcu_read_lock(); [0b]
-        *      p = rcu_dereference(global_p); [1]
-        *      x = p->data; [2]
-        *      rcu_read_unlock(); [3b]
-        *      rcu_read_unlock(); [3a]
-        *
-        * Because we are modeling a weak-memory machine, these statements
-        * can be seen in any order, the only restriction being that
-        * rcu_read_unlock() cannot precede the corresponding rcu_read_lock().
-        * The placement of the inner rcu_read_lock() and rcu_read_unlock()
-        * is non-deterministic, the above is but one possible placement.
-        * Intestingly enough, this model validates all possible placements
-        * of the inner rcu_read_lock() and rcu_read_unlock() statements,
-        * with the only constraint being that the rcu_read_lock() must
-        * precede the rcu_read_unlock().
-        *
-        * We also respond to memory-barrier requests, but only if our
-        * execution happens to be ordered.  If the current state is
-        * misordered, we ignore memory-barrier requests.
-        */
-       do
-       :: 1 ->
-               if
-               :: reader_progress[0] < 2 -> /* [0a and 0b] */
-                       tmp = urcu_active_readers;
-                       if
-                       :: (tmp & RCU_GP_CTR_NEST_MASK) == 0 ->
-                               tmp = urcu_gp_ctr;
-                               do
-                               :: (reader_progress[1] +
-                                   reader_progress[2] +
-                                   reader_progress[3] == 0) && need_mb == 1 ->
-                                       need_mb = 0;
-                               :: need_mb == 0 && !updater_done -> skip;
-                               :: 1 -> break;
-                               od;
-                               urcu_active_readers = tmp;
-                        :: else ->
-                               urcu_active_readers = tmp + 1;
-                       fi;
-                       reader_progress[0] = reader_progress[0] + 1;
-               :: reader_progress[1] == 0 -> /* [1] */
-                       tmp_removed = removed;
-                       reader_progress[1] = 1;
-               :: reader_progress[2] == 0 -> /* [2] */
-                       tmp_free = free;
-                       reader_progress[2] = 1;
-               :: ((reader_progress[0] > reader_progress[3]) &&
-                   (reader_progress[3] < 2)) -> /* [3a and 3b] */
-                       tmp = urcu_active_readers - 1;
-                       urcu_active_readers = tmp;
-                       reader_progress[3] = reader_progress[3] + 1;
-               :: else -> break;
-               fi;
-
-               /* Process memory-barrier requests, if it is safe to do so. */
-               atomic {
-                       mbok = 0;
-                       tmp = 0;
-                       do
-                       :: tmp < 4 && reader_progress[tmp] == 0 ->
-                               tmp = tmp + 1;
-                               break;
-                       :: tmp < 4 && reader_progress[tmp] != 0 ->
-                               tmp = tmp + 1;
-                       :: tmp >= 4 &&
-                          reader_progress[0] == reader_progress[3] ->
-                               done = 1;
-                               break;
-                       :: tmp >= 4 &&
-                          reader_progress[0] != reader_progress[3] ->
-                               break;
-                       od;
-                       do
-                       :: tmp < 4 && reader_progress[tmp] == 0 ->
-                               tmp = tmp + 1;
-                       :: tmp < 4 && reader_progress[tmp] != 0 ->
-                               break;
-                       :: tmp >= 4 ->
-                               mbok = 1;
-                               break;
-                       od
-
-               }
-
-               if
-               :: mbok == 1 ->
-                       /* We get here if mb processing is safe. */
-                       do
-                       :: need_mb == 1 ->
-                               need_mb = 0;
-                       :: 1 -> break;
-                       od;
-               :: else -> skip;
-               fi;
-
-               /*
-                * Check to see if we have modeled the entire RCU read-side
-                * critical section, and leave if so.
-                */
-               if
-               :: done == 1 -> break;
-               :: else -> skip;
-               fi
-       od;
-       assert((tmp_free == 0) || (tmp_removed == 1));
-
-       /* Reader has completed. */
-       reader_done = 1;
-
-       /*
-        * Process any late-arriving memory-barrier requests, and
-        * in addition create a progress cycle.
-        */
-       reader_done = 1;
-
-       do
-       :: need_mb == 1 ->
-               need_mb = 0;
-       :: 1 ->
-progress_reader:
-               skip;
-       :: 1 -> break;
-       od;
-}
-
-/* Model the RCU update process. */
-
-proctype urcu_updater()
-{
-       byte tmp;
-
-       /*
-        * ----------------------------------------------------------------
-        * prior synchronize_rcu().
-        */
-
-       /* prior synchronize_rcu(), second counter flip. */
-#ifdef MB_A
-       need_mb = 1; /* mb() A (analogous to omitted barrier between E and F) */
-       do
-       :: need_mb == 1 && !reader_done -> skip;
-       :: need_mb == 0 || reader_done -> break;
-       od;
-#endif /* #ifdef MB_A */
-       urcu_gp_ctr = urcu_gp_ctr + RCU_GP_CTR_BIT;
-#ifdef MB_B
-       need_mb = 1; /* mb() B (analogous to F) */
-       do
-       :: need_mb == 1 && !reader_done -> skip;
-       :: need_mb == 0 || reader_done -> break;
-       od;
-#endif /* #ifdef MB_B */
-       do
-       :: 1 ->
-               if
-               :: (urcu_active_readers & RCU_GP_CTR_NEST_MASK) != 0 &&
-                  (urcu_active_readers & ~RCU_GP_CTR_NEST_MASK) !=
-                  (urcu_gp_ctr & ~RCU_GP_CTR_NEST_MASK) ->
-                       skip;
-               :: else -> break;
-               fi
-       od;
-#ifdef MB_C
-       need_mb = 1; /* mb() C absolutely required by analogy with G */
-       do
-       :: need_mb == 1 && !reader_done -> skip;
-       :: need_mb == 0 || reader_done -> break;
-       od;
-#endif /* #ifdef MB_C */
-
-       /* Removal statement, e.g., list_del_rcu(). */
-       removed = 1;
-
-       /*
-        * prior synchronize_rcu().
-        * ----------------------------------------------------------------
-        */
-
-       /*
-        * ----------------------------------------------------------------
-        * current synchronize_rcu().
-        */
-
-       /* current synchronize_rcu(), first counter flip. */
-#ifdef MB_D
-       need_mb = 1; /* mb() D suggested */
-       do
-       :: need_mb == 1 && !reader_done -> skip;
-       :: need_mb == 0 || reader_done -> break;
-       od;
-#endif /* #ifdef MB_D */
-       urcu_gp_ctr = urcu_gp_ctr + RCU_GP_CTR_BIT;
-#ifdef MB_E
-       need_mb = 1;  /* mb() E required if D not present */
-       do
-       :: need_mb == 1 && !reader_done -> skip;
-       :: need_mb == 0 || reader_done -> break;
-       od;
-#endif /* #ifdef MB_E */
-
-       /* current synchronize_rcu(), first-flip check plus second flip. */
-       if
-       :: 1 ->
-               do
-               :: 1 ->
-                       if
-                       :: (urcu_active_readers & RCU_GP_CTR_NEST_MASK) != 0 &&
-                          (urcu_active_readers & ~RCU_GP_CTR_NEST_MASK) !=
-                          (urcu_gp_ctr & ~RCU_GP_CTR_NEST_MASK) ->
-                               skip;
-                       :: else -> break;
-                       fi;
-               od;
-               urcu_gp_ctr = urcu_gp_ctr + RCU_GP_CTR_BIT;
-       :: 1 ->
-               tmp = urcu_gp_ctr;
-               urcu_gp_ctr = urcu_gp_ctr + RCU_GP_CTR_BIT;
-               do
-               :: 1 ->
-                       if
-                       :: (urcu_active_readers & RCU_GP_CTR_NEST_MASK) != 0 &&
-                          (urcu_active_readers & ~RCU_GP_CTR_NEST_MASK) !=
-                          (tmp & ~RCU_GP_CTR_NEST_MASK) ->
-                               skip;
-                       :: else -> break;
-                       fi;
-               od;
-       fi;
-
-       /* current synchronize_rcu(), second counter flip check. */
-#ifdef MB_F
-       need_mb = 1; /* mb() F not required */
-       do
-       :: need_mb == 1 && !reader_done -> skip;
-       :: need_mb == 0 || reader_done -> break;
-       od;
-#endif /* #ifdef MB_F */
-       do
-       :: 1 ->
-               if
-               :: (urcu_active_readers & RCU_GP_CTR_NEST_MASK) != 0 &&
-                  (urcu_active_readers & ~RCU_GP_CTR_NEST_MASK) !=
-                  (urcu_gp_ctr & ~RCU_GP_CTR_NEST_MASK) ->
-                       skip;
-               :: else -> break;
-               fi;
-       od;
-#ifdef MB_G
-       need_mb = 1; /* mb() G absolutely required */
-       do
-       :: need_mb == 1 && !reader_done -> skip;
-       :: need_mb == 0 || reader_done -> break;
-       od;
-#endif /* #ifdef MB_G */
-
-       /*
-        * current synchronize_rcu().
-        * ----------------------------------------------------------------
-        */
-
-       /* free-up step, e.g., kfree(). */
-       free = 1;
-
-       /* We are done, so kill all the infinite loops in the reader. */
-       updater_done = 1;
-
-       /* Create a progress cycle.  Correctness requires we get here. */
-       do
-       :: 1 ->
-progress_updater:
-               skip;
-       :: 1 -> break;
-       od;
-}
-
-/*
- * Initialize the array, spawn a reader and an updater.  Because readers
- * are independent of each other, only one reader is needed.
- */
-
-init {
-       atomic {
-               reader_progress[0] = 0;
-               reader_progress[1] = 0;
-               reader_progress[2] = 0;
-               reader_progress[3] = 0;
-               run urcu_reader();
-               run urcu_updater();
-       }
-}
diff --git a/formal-model/urcu-paulmck/urcu.sh b/formal-model/urcu-paulmck/urcu.sh
deleted file mode 100644 (file)
index 0c5e492..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-spin -a urcu-paulmck.spin 
-cc -DNP -o pan pan.c
-./pan -f -l
diff --git a/formal-model/urcu.sh b/formal-model/urcu.sh
deleted file mode 100644 (file)
index b76c764..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-spin -a urcu.spin 
-cc -DSAFETY -o pan pan.c
-./pan
diff --git a/formal-model/urcu.spin b/formal-model/urcu.spin
deleted file mode 100644 (file)
index 3e18457..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * urcu.spin: Promela code to validate urcu.  See commit number
- *     3a9e6e9df706b8d39af94d2f027210e2e7d4106e of Mathieu Desnoyer's
- *      git archive at git://lttng.org/userspace-rcu.git
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
- */
-
-/* Promela validation variables. */
-
-bit removed = 0;  /* Has RCU removal happened, e.g., list_del_rcu()? */
-bit free = 0;     /* Has RCU reclamation happened, e.g., kfree()? */
-bit need_mb = 0;  /* =1 says need reader mb, =0 for reader response. */
-byte reader_progress[4];
-                 /* Count of read-side statement executions. */
-bit reader_done = 0;
-                 /* =0 says reader still running, =1 says done. */
-bit updater_done = 0;
-                 /* =0 says updater still running, =1 says done. */
-
-/* urcu definitions and variables, taken straight from the algorithm. */
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-byte urcu_gp_ctr = 1;
-byte urcu_active_readers = 0;
-
-/* Model the RCU read-side critical section. */
-
-proctype urcu_reader()
-{
-       bit done = 0;
-       bit mbok;
-       byte tmp;
-       byte tmp_removed;
-       byte tmp_free;
-
-       /* Absorb any early requests for memory barriers. */
-       do
-       :: need_mb == 1 ->
-               need_mb = 0;
-       :: !updater_done -> skip;
-       :: 1 -> break;
-       od;
-
-       /*
-        * Each pass through this loop executes one read-side statement
-        * from the following code fragment:
-        *
-        *      rcu_read_lock(); [0a]
-        *      rcu_read_lock(); [0b]
-        *      p = rcu_dereference(global_p); [1]
-        *      x = p->data; [2]
-        *      rcu_read_unlock(); [3b]
-        *      rcu_read_unlock(); [3a]
-        *
-        * Because we are modeling a weak-memory machine, these statements
-        * can be seen in any order, the only restriction being that
-        * rcu_read_unlock() cannot precede the corresponding rcu_read_lock().
-        * The placement of the inner rcu_read_lock() and rcu_read_unlock()
-        * is non-deterministic, the above is but one possible placement.
-        * Intestingly enough, this model validates all possible placements
-        * of the inner rcu_read_lock() and rcu_read_unlock() statements,
-        * with the only constraint being that the rcu_read_lock() must
-        * precede the rcu_read_unlock().
-        *
-        * We also respond to memory-barrier requests, but only if our
-        * execution happens to be ordered.  If the current state is
-        * misordered, we ignore memory-barrier requests.
-        */
-       do
-       :: 1 ->
-               if
-               :: reader_progress[0] < 2 -> /* [0a and 0b] */
-                       tmp = urcu_active_readers;
-                       if
-                       :: (tmp & RCU_GP_CTR_NEST_MASK) == 0 ->
-                               tmp = urcu_gp_ctr;
-                               do
-                               :: (reader_progress[1] +
-                                   reader_progress[2] +
-                                   reader_progress[3] == 0) && need_mb == 1 ->
-                                       need_mb = 0;
-                               :: !updater_done -> skip;
-                               :: 1 -> break;
-                               od;
-                               urcu_active_readers = tmp;
-                        :: else ->
-                               urcu_active_readers = tmp + 1;
-                       fi;
-                       reader_progress[0] = reader_progress[0] + 1;
-               :: reader_progress[1] == 0 -> /* [1] */
-                       tmp_removed = removed;
-                       reader_progress[1] = 1;
-               :: reader_progress[2] == 0 -> /* [2] */
-                       tmp_free = free;
-                       reader_progress[2] = 1;
-               :: ((reader_progress[0] > reader_progress[3]) &&
-                   (reader_progress[3] < 2)) -> /* [3a and 3b] */
-                       tmp = urcu_active_readers - 1;
-                       urcu_active_readers = tmp;
-                       reader_progress[3] = reader_progress[3] + 1;
-               :: else -> break;
-               fi;
-
-               /* Process memory-barrier requests, if it is safe to do so. */
-               atomic {
-                       mbok = 0;
-                       tmp = 0;
-                       do
-                       :: tmp < 4 && reader_progress[tmp] == 0 ->
-                               tmp = tmp + 1;
-                               break;
-                       :: tmp < 4 && reader_progress[tmp] != 0 ->
-                               tmp = tmp + 1;
-                       :: tmp >= 4 &&
-                          reader_progress[0] == reader_progress[3] ->
-                               done = 1;
-                               break;
-                       :: tmp >= 4 &&
-                          reader_progress[0] != reader_progress[3] ->
-                               break;
-                       od;
-                       do
-                       :: tmp < 4 && reader_progress[tmp] == 0 ->
-                               tmp = tmp + 1;
-                       :: tmp < 4 && reader_progress[tmp] != 0 ->
-                               break;
-                       :: tmp >= 4 ->
-                               mbok = 1;
-                               break;
-                       od
-
-               }
-
-               if
-               :: mbok == 1 ->
-                       /* We get here if mb processing is safe. */
-                       do
-                       :: need_mb == 1 ->
-                               need_mb = 0;
-                       :: !updater_done -> skip;
-                       :: 1 -> break;
-                       od;
-               :: else -> skip;
-               fi;
-
-               /*
-                * Check to see if we have modeled the entire RCU read-side
-                * critical section, and leave if so.
-                */
-               if
-               :: done == 1 -> break;
-               :: else -> skip;
-               fi
-       od;
-       assert((tmp_free == 0) || (tmp_removed == 1));
-
-       /* Reader has completed. */
-       reader_done = 1;
-
-       /* Process any late-arriving memory-barrier requests. */
-       do
-       :: need_mb == 1 ->
-               need_mb = 0;
-       :: !updater_done -> skip;
-       :: 1 -> break;
-       od;
-}
-
-/* Model the RCU update process. */
-
-proctype urcu_updater()
-{
-       /* prior synchronize_rcu(), second counter flip. */
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-       urcu_gp_ctr = urcu_gp_ctr + RCU_GP_CTR_BIT;
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-       do
-       :: 1 ->
-               if
-               :: (urcu_active_readers & RCU_GP_CTR_NEST_MASK) != 0 &&
-                  (urcu_active_readers & ~RCU_GP_CTR_NEST_MASK) !=
-                  (urcu_gp_ctr & ~RCU_GP_CTR_NEST_MASK) ->
-                       skip;
-               :: else -> break;
-               fi;
-       od;
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-
-       /* Removal statement, e.g., list_del_rcu(). */
-       removed = 1;
-
-       /* current synchronize_rcu(), first counter flip. */
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-       urcu_gp_ctr = urcu_gp_ctr + RCU_GP_CTR_BIT;
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-       do
-       :: 1 ->
-               if
-               :: (urcu_active_readers & RCU_GP_CTR_NEST_MASK) != 0 &&
-                  (urcu_active_readers & ~RCU_GP_CTR_NEST_MASK) !=
-                  (urcu_gp_ctr & ~RCU_GP_CTR_NEST_MASK) ->
-                       skip;
-               :: else -> break;
-               fi;
-       od;
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-
-       /* current synchronize_rcu(), second counter flip. */
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-       urcu_gp_ctr = urcu_gp_ctr + RCU_GP_CTR_BIT;
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-       do
-       :: 1 ->
-               if
-               :: (urcu_active_readers & RCU_GP_CTR_NEST_MASK) != 0 &&
-                  (urcu_active_readers & ~RCU_GP_CTR_NEST_MASK) !=
-                  (urcu_gp_ctr & ~RCU_GP_CTR_NEST_MASK) ->
-                       skip;
-               :: else -> break;
-               fi;
-       od;
-       need_mb = 1;
-       do
-       :: need_mb == 1 -> skip;
-       :: need_mb == 0 -> break;
-       od;
-
-       /* free-up step, e.g., kfree(). */
-       free = 1;
-
-       /*
-        * Signal updater done, ending any otherwise-infinite loops
-        * in the reading process.
-        */
-       updater_done = 1;
-}
-
-/*
- * Initialize the array, spawn a reader and an updater.  Because readers
- * are independent of each other, only one reader is needed.
- */
-
-init {
-       atomic {
-               reader_progress[0] = 0;
-               reader_progress[1] = 0;
-               reader_progress[2] = 0;
-               reader_progress[3] = 0;
-               run urcu_reader();
-               run urcu_updater();
-       }
-}
diff --git a/formal-model/urcu/DEFINES b/formal-model/urcu/DEFINES
deleted file mode 100644 (file)
index 5d5147e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu/Makefile b/formal-model/urcu/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu/references.txt b/formal-model/urcu/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu/result-signal-over-reader/DEFINES b/formal-model/urcu/result-signal-over-reader/DEFINES
deleted file mode 100644 (file)
index 2fcb038..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu/result-signal-over-reader/Makefile b/formal-model/urcu/result-signal-over-reader/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu/result-signal-over-reader/asserts.log b/formal-model/urcu/result-signal-over-reader/asserts.log
deleted file mode 100644 (file)
index d317f57..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-Depth=    4926 States=    1e+06 Transitions= 9.03e+06 Memory=   527.287        t=   5.98 R=   2e+05
-Depth=    7228 States=    2e+06 Transitions= 1.88e+07 Memory=   588.322        t=   12.9 R=   2e+05
-Depth=    7228 States=    3e+06 Transitions= 3.14e+07 Memory=   649.358        t=   21.9 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=    7228 States=    4e+06 Transitions=  4.3e+07 Memory=   741.416        t=   30.3 R=   1e+05
-Depth=    7228 States=    5e+06 Transitions= 5.65e+07 Memory=   802.451        t=   39.6 R=   1e+05
-Depth=    7228 States=    6e+06 Transitions= 6.78e+07 Memory=   863.486        t=   47.5 R=   1e+05
-Depth=    7228 States=    7e+06 Transitions= 8.05e+07 Memory=   924.522        t=   56.5 R=   1e+05
-Depth=    7228 States=    8e+06 Transitions= 9.49e+07 Memory=   985.557        t=   66.8 R=   1e+05
-Depth=    7228 States=    9e+06 Transitions= 1.06e+08 Memory=  1046.592        t=   74.7 R=   1e+05
-pan: resizing hashtable to -w24..  done
-Depth=    7228 States=    1e+07 Transitions= 1.18e+08 Memory=  1231.721        t=   84.9 R=   1e+05
-Depth=    7228 States=  1.1e+07 Transitions= 1.29e+08 Memory=  1292.756        t=   92.8 R=   1e+05
-Depth=    7228 States=  1.2e+07 Transitions=  1.4e+08 Memory=  1353.791        t=    100 R=   1e+05
-Depth=    7228 States=  1.3e+07 Transitions= 1.53e+08 Memory=  1414.826        t=    109 R=   1e+05
-Depth=    7228 States=  1.4e+07 Transitions= 1.65e+08 Memory=  1475.861        t=    117 R=   1e+05
-Depth=    7228 States=  1.5e+07 Transitions= 1.77e+08 Memory=  1536.897        t=    126 R=   1e+05
-Depth=    7228 States=  1.6e+07 Transitions= 1.89e+08 Memory=  1597.932        t=    134 R=   1e+05
-Depth=    7228 States=  1.7e+07 Transitions= 2.02e+08 Memory=  1658.967        t=    143 R=   1e+05
-Depth=    7228 States=  1.8e+07 Transitions= 2.16e+08 Memory=  1720.002        t=    153 R=   1e+05
-Depth=    7228 States=  1.9e+07 Transitions= 2.27e+08 Memory=  1781.037        t=    160 R=   1e+05
-Depth=    7228 States=    2e+07 Transitions= 2.39e+08 Memory=  1842.072        t=    169 R=   1e+05
-Depth=    7228 States=  2.1e+07 Transitions= 2.51e+08 Memory=  1903.108        t=    177 R=   1e+05
-Depth=    7228 States=  2.2e+07 Transitions= 2.62e+08 Memory=  1964.143        t=    185 R=   1e+05
-Depth=    7228 States=  2.3e+07 Transitions= 2.74e+08 Memory=  2025.178        t=    194 R=   1e+05
-Depth=    7228 States=  2.4e+07 Transitions= 2.86e+08 Memory=  2086.213        t=    203 R=   1e+05
-Depth=    7228 States=  2.5e+07 Transitions= 2.99e+08 Memory=  2147.248        t=    212 R=   1e+05
-Depth=    7228 States=  2.6e+07 Transitions=  3.1e+08 Memory=  2208.283        t=    220 R=   1e+05
-Depth=    7228 States=  2.7e+07 Transitions= 3.24e+08 Memory=  2269.318        t=    230 R=   1e+05
-Depth=    7228 States=  2.8e+07 Transitions= 3.37e+08 Memory=  2330.354        t=    239 R=   1e+05
-Depth=    7228 States=  2.9e+07 Transitions= 3.49e+08 Memory=  2391.389        t=    248 R=   1e+05
-Depth=    7228 States=    3e+07 Transitions=  3.6e+08 Memory=  2452.424        t=    256 R=   1e+05
-Depth=    7228 States=  3.1e+07 Transitions= 3.72e+08 Memory=  2513.459        t=    265 R=   1e+05
-Depth=    7228 States=  3.2e+07 Transitions= 3.83e+08 Memory=  2574.494        t=    273 R=   1e+05
-Depth=    7228 States=  3.3e+07 Transitions= 3.95e+08 Memory=  2635.529        t=    282 R=   1e+05
-Depth=    7228 States=  3.4e+07 Transitions= 4.07e+08 Memory=  2696.565        t=    291 R=   1e+05
-pan: resizing hashtable to -w26..  done
-Depth=    7228 States=  3.5e+07 Transitions=  4.2e+08 Memory=  3253.682        t=    308 R=   1e+05
-Depth=    7228 States=  3.6e+07 Transitions= 4.32e+08 Memory=  3314.717        t=    316 R=   1e+05
-Depth=    7228 States=  3.7e+07 Transitions= 4.45e+08 Memory=  3375.752        t=    325 R=   1e+05
-Depth=    7228 States=  3.8e+07 Transitions= 4.58e+08 Memory=  3436.787        t=    334 R=   1e+05
-Depth=    7228 States=  3.9e+07 Transitions= 4.71e+08 Memory=  3497.822        t=    343 R=   1e+05
-Depth=    7228 States=    4e+07 Transitions= 4.82e+08 Memory=  3558.858        t=    350 R=   1e+05
-Depth=    7228 States=  4.1e+07 Transitions= 4.94e+08 Memory=  3619.893        t=    359 R=   1e+05
-Depth=    7228 States=  4.2e+07 Transitions= 5.04e+08 Memory=  3680.928        t=    366 R=   1e+05
-Depth=    7228 States=  4.3e+07 Transitions= 5.16e+08 Memory=  3741.963        t=    374 R=   1e+05
-Depth=    7228 States=  4.4e+07 Transitions= 5.29e+08 Memory=  3802.998        t=    383 R=   1e+05
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 56 byte, depth reached 7228, errors: 0
- 44157204 states, stored
-4.8641845e+08 states, matched
-5.3057565e+08 transitions (= stored+matched)
-1.8453582e+09 atomic steps
-hash conflicts: 2.8837553e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 3537.374      equivalent memory usage for states (stored*(State-vector + overhead))
- 2843.050      actual memory usage for states (compression: 80.37%)
-               state-vector as stored = 40 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
- 3812.568      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, ".input.spin", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 61, "(1)"
-       line 417, ".input.spin", state 91, "(1)"
-       line 398, ".input.spin", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 158, "(1)"
-       line 417, ".input.spin", state 188, "(1)"
-       line 398, ".input.spin", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 256, "(1)"
-       line 417, ".input.spin", state 286, "(1)"
-       line 398, ".input.spin", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 395, "(1)"
-       line 417, ".input.spin", state 425, "(1)"
-       line 539, ".input.spin", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 398, ".input.spin", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 70, "(1)"
-       line 417, ".input.spin", state 100, "(1)"
-       line 398, ".input.spin", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 158, "(1)"
-       line 417, ".input.spin", state 188, "(1)"
-       line 398, ".input.spin", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 247, "(1)"
-       line 417, ".input.spin", state 277, "(1)"
-       line 398, ".input.spin", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 359, "(1)"
-       line 417, ".input.spin", state 389, "(1)"
-       line 613, ".input.spin", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 398, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 59, "(1)"
-       line 412, ".input.spin", state 72, "(1)"
-       line 417, ".input.spin", state 89, "(1)"
-       line 398, ".input.spin", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 153, "(1)"
-       line 412, ".input.spin", state 166, "(1)"
-       line 651, ".input.spin", state 199, "(1)"
-       line 174, ".input.spin", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 240, "(1)"
-       line 163, ".input.spin", state 248, "(1)"
-       line 167, ".input.spin", state 260, "(1)"
-       line 174, ".input.spin", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 303, "(1)"
-       line 163, ".input.spin", state 311, "(1)"
-       line 167, ".input.spin", state 323, "(1)"
-       line 174, ".input.spin", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 370, "(1)"
-       line 163, ".input.spin", state 378, "(1)"
-       line 167, ".input.spin", state 390, "(1)"
-       line 398, ".input.spin", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 449, "(1)"
-       line 412, ".input.spin", state 462, "(1)"
-       line 417, ".input.spin", state 479, "(1)"
-       line 398, ".input.spin", state 498, "(1)"
-       line 402, ".input.spin", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 554, "(1)"
-       line 417, ".input.spin", state 571, "(1)"
-       line 402, ".input.spin", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 647, "(1)"
-       line 417, ".input.spin", state 664, "(1)"
-       line 178, ".input.spin", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 710, "(1)"
-       line 163, ".input.spin", state 718, "(1)"
-       line 167, ".input.spin", state 730, "(1)"
-       line 174, ".input.spin", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 773, "(1)"
-       line 163, ".input.spin", state 781, "(1)"
-       line 167, ".input.spin", state 793, "(1)"
-       line 174, ".input.spin", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 840, "(1)"
-       line 163, ".input.spin", state 848, "(1)"
-       line 167, ".input.spin", state 860, "(1)"
-       line 398, ".input.spin", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, ".input.spin", state 884, "(1)"
-       line 398, ".input.spin", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, ".input.spin", state 885, "else"
-       line 398, ".input.spin", state 888, "(1)"
-       line 402, ".input.spin", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 898, "(1)"
-       line 402, ".input.spin", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 899, "else"
-       line 402, ".input.spin", state 902, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 400, ".input.spin", state 908, "((i<1))"
-       line 400, ".input.spin", state 908, "((i>=1))"
-       line 407, ".input.spin", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 927, "(1)"
-       line 408, ".input.spin", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 408, ".input.spin", state 928, "else"
-       line 408, ".input.spin", state 931, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 412, ".input.spin", state 940, "(1)"
-       line 412, ".input.spin", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 412, ".input.spin", state 941, "else"
-       line 412, ".input.spin", state 944, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 410, ".input.spin", state 950, "((i<1))"
-       line 410, ".input.spin", state 950, "((i>=1))"
-       line 417, ".input.spin", state 957, "(1)"
-       line 417, ".input.spin", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 417, ".input.spin", state 958, "else"
-       line 417, ".input.spin", state 961, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 402, ".input.spin", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 1040, "(1)"
-       line 417, ".input.spin", state 1057, "(1)"
-       line 402, ".input.spin", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 1130, "(1)"
-       line 417, ".input.spin", state 1147, "(1)"
-       line 398, ".input.spin", state 1166, "(1)"
-       line 402, ".input.spin", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 1222, "(1)"
-       line 417, ".input.spin", state 1239, "(1)"
-       line 402, ".input.spin", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, ".input.spin", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, ".input.spin", state 1315, "(1)"
-       line 417, ".input.spin", state 1332, "(1)"
-       line 178, ".input.spin", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 1378, "(1)"
-       line 163, ".input.spin", state 1386, "(1)"
-       line 167, ".input.spin", state 1398, "(1)"
-       line 174, ".input.spin", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1441, "(1)"
-       line 163, ".input.spin", state 1449, "(1)"
-       line 167, ".input.spin", state 1461, "(1)"
-       line 174, ".input.spin", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 1508, "(1)"
-       line 163, ".input.spin", state 1516, "(1)"
-       line 167, ".input.spin", state 1528, "(1)"
-       line 398, ".input.spin", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, ".input.spin", state 1552, "(1)"
-       line 398, ".input.spin", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, ".input.spin", state 1553, "else"
-       line 398, ".input.spin", state 1556, "(1)"
-       line 402, ".input.spin", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 1566, "(1)"
-       line 402, ".input.spin", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, ".input.spin", state 1567, "else"
-       line 402, ".input.spin", state 1570, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 400, ".input.spin", state 1576, "((i<1))"
-       line 400, ".input.spin", state 1576, "((i>=1))"
-       line 407, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, ".input.spin", state 1595, "(1)"
-       line 408, ".input.spin", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 408, ".input.spin", state 1596, "else"
-       line 408, ".input.spin", state 1599, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 412, ".input.spin", state 1608, "(1)"
-       line 412, ".input.spin", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 412, ".input.spin", state 1609, "else"
-       line 412, ".input.spin", state 1612, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 410, ".input.spin", state 1618, "((i<1))"
-       line 410, ".input.spin", state 1618, "((i>=1))"
-       line 417, ".input.spin", state 1625, "(1)"
-       line 417, ".input.spin", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 417, ".input.spin", state 1626, "else"
-       line 417, ".input.spin", state 1629, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 178, ".input.spin", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 1681, "(1)"
-       line 163, ".input.spin", state 1689, "(1)"
-       line 167, ".input.spin", state 1701, "(1)"
-       line 174, ".input.spin", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1744, "(1)"
-       line 163, ".input.spin", state 1752, "(1)"
-       line 167, ".input.spin", state 1764, "(1)"
-       line 174, ".input.spin", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, ".input.spin", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, ".input.spin", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, ".input.spin", state 1811, "(1)"
-       line 163, ".input.spin", state 1819, "(1)"
-       line 167, ".input.spin", state 1831, "(1)"
-       line 701, ".input.spin", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 384 seconds
-pan: rate 114968.77 states/second
-pan: avg transition delay 7.2389e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/asserts.spin.input b/formal-model/urcu/result-signal-over-reader/asserts.spin.input
deleted file mode 100644 (file)
index 2d7f62d..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/asserts.spin.input.trail b/formal-model/urcu/result-signal-over-reader/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu/result-signal-over-reader/urcu.sh b/formal-model/urcu/result-signal-over-reader/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu/result-signal-over-reader/urcu.spin b/formal-model/urcu/result-signal-over-reader/urcu.spin
deleted file mode 100644 (file)
index 2cfcb70..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free.log b/formal-model/urcu/result-signal-over-reader/urcu_free.log
deleted file mode 100644 (file)
index a6ab537..0000000
+++ /dev/null
@@ -1,326 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-Depth=    6837 States=    1e+06 Transitions= 9.03e+06 Memory=   534.904        t=   7.74 R=   1e+05
-Depth=    8887 States=    2e+06 Transitions= 1.88e+07 Memory=   603.557        t=   16.6 R=   1e+05
-Depth=    8887 States=    3e+06 Transitions= 3.14e+07 Memory=   672.209        t=     28 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=    8887 States=    4e+06 Transitions= 4.33e+07 Memory=   771.885        t=   39.1 R=   1e+05
-Depth=    8887 States=    5e+06 Transitions= 5.65e+07 Memory=   840.635        t=   50.7 R=   1e+05
-Depth=    8887 States=    6e+06 Transitions= 6.79e+07 Memory=   909.287        t=     61 R=   1e+05
-Depth=    8887 States=    7e+06 Transitions= 8.08e+07 Memory=   977.940        t=   72.6 R=   1e+05
-Depth=    8887 States=    8e+06 Transitions=  9.5e+07 Memory=  1046.592        t=   85.5 R=   9e+04
-Depth=    8887 States=    9e+06 Transitions= 1.07e+08 Memory=  1115.342        t=   96.7 R=   9e+04
-pan: resizing hashtable to -w24..  done
-Depth=    8887 States=    1e+07 Transitions= 1.18e+08 Memory=  1308.088        t=    108 R=   9e+04
-Depth=    8887 States=  1.1e+07 Transitions=  1.3e+08 Memory=  1376.740        t=    119 R=   9e+04
-Depth=    8887 States=  1.2e+07 Transitions= 1.41e+08 Memory=  1445.393        t=    128 R=   9e+04
-Depth=    8887 States=  1.3e+07 Transitions= 1.51e+08 Memory=  1514.045        t=    138 R=   9e+04
-Depth=    8887 States=  1.4e+07 Transitions= 1.64e+08 Memory=  1582.795        t=    149 R=   9e+04
-Depth=    8887 States=  1.5e+07 Transitions= 1.77e+08 Memory=  1651.447        t=    160 R=   9e+04
-Depth=    8887 States=  1.6e+07 Transitions=  1.9e+08 Memory=  1720.100        t=    172 R=   9e+04
-Depth=    8887 States=  1.7e+07 Transitions= 2.02e+08 Memory=  1788.752        t=    183 R=   9e+04
-Depth=    8887 States=  1.8e+07 Transitions= 2.15e+08 Memory=  1857.502        t=    194 R=   9e+04
-Depth=    8887 States=  1.9e+07 Transitions= 2.29e+08 Memory=  1926.154        t=    207 R=   9e+04
-Depth=    8887 States=    2e+07 Transitions=  2.4e+08 Memory=  1994.807        t=    217 R=   9e+04
-Depth=    8887 States=  2.1e+07 Transitions= 2.51e+08 Memory=  2063.459        t=    227 R=   9e+04
-Depth=    8887 States=  2.2e+07 Transitions= 2.63e+08 Memory=  2132.209        t=    238 R=   9e+04
-Depth=    8887 States=  2.3e+07 Transitions= 2.74e+08 Memory=  2200.861        t=    248 R=   9e+04
-Depth=    8887 States=  2.4e+07 Transitions= 2.86e+08 Memory=  2269.514        t=    259 R=   9e+04
-Depth=    8887 States=  2.5e+07 Transitions= 2.98e+08 Memory=  2338.166        t=    270 R=   9e+04
-Depth=    8887 States=  2.6e+07 Transitions=  3.1e+08 Memory=  2406.916        t=    281 R=   9e+04
-Depth=    8887 States=  2.7e+07 Transitions= 3.24e+08 Memory=  2475.568        t=    294 R=   9e+04
-Depth=    8887 States=  2.8e+07 Transitions= 3.36e+08 Memory=  2544.221        t=    305 R=   9e+04
-Depth=    8887 States=  2.9e+07 Transitions= 3.49e+08 Memory=  2612.873        t=    317 R=   9e+04
-Depth=    8887 States=    3e+07 Transitions= 3.63e+08 Memory=  2681.526        t=    329 R=   9e+04
-Depth=    8887 States=  3.1e+07 Transitions= 3.73e+08 Memory=  2750.276        t=    339 R=   9e+04
-Depth=    8887 States=  3.2e+07 Transitions= 3.85e+08 Memory=  2818.928        t=    351 R=   9e+04
-Depth=    8887 States=  3.3e+07 Transitions= 3.97e+08 Memory=  2887.580        t=    362 R=   9e+04
-Depth=    8887 States=  3.4e+07 Transitions= 4.08e+08 Memory=  2956.233        t=    373 R=   9e+04
-pan: resizing hashtable to -w26..  done
-Depth=    8887 States=  3.5e+07 Transitions=  4.2e+08 Memory=  3520.967        t=    391 R=   9e+04
-Depth=    8887 States=  3.6e+07 Transitions= 4.32e+08 Memory=  3589.619        t=    402 R=   9e+04
-Depth=    8887 States=  3.7e+07 Transitions= 4.44e+08 Memory=  3658.272        t=    413 R=   9e+04
-Depth=    8887 States=  3.8e+07 Transitions= 4.58e+08 Memory=  3727.022        t=    425 R=   9e+04
-Depth=    8887 States=  3.9e+07 Transitions=  4.7e+08 Memory=  3795.674        t=    435 R=   9e+04
-Depth=    8887 States=    4e+07 Transitions= 4.83e+08 Memory=  3864.326        t=    447 R=   9e+04
-Depth=    8887 States=  4.1e+07 Transitions= 4.97e+08 Memory=  3932.979        t=    459 R=   9e+04
-Depth=    8887 States=  4.2e+07 Transitions= 5.07e+08 Memory=  4001.729        t=    468 R=   9e+04
-Depth=    8887 States=  4.3e+07 Transitions= 5.19e+08 Memory=  4070.381        t=    479 R=   9e+04
-Depth=    8887 States=  4.4e+07 Transitions= 5.31e+08 Memory=  4139.033        t=    489 R=   9e+04
-Depth=    8887 States=  4.5e+07 Transitions= 5.42e+08 Memory=  4207.686        t=    499 R=   9e+04
-Depth=    8887 States=  4.6e+07 Transitions= 5.54e+08 Memory=  4276.338        t=    510 R=   9e+04
-Depth=    8887 States=  4.7e+07 Transitions= 5.67e+08 Memory=  4345.088        t=    521 R=   9e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 8887, errors: 0
- 47143033 states, stored
-5.2129161e+08 states, matched
-5.6843464e+08 transitions (= stored+matched)
-1.9783052e+09 atomic steps
-hash conflicts: 3.1395137e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 4136.237      equivalent memory usage for states (stored*(State-vector + overhead))
- 3385.741      actual memory usage for states (compression: 81.86%)
-               state-vector as stored = 47 byte + 28 byte overhead
-  512.000      memory used for hash table (-w26)
-  457.764      memory used for DFS stack (-m10000000)
- 4354.854      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 61, "(1)"
-       line 417, "pan.___", state 91, "(1)"
-       line 398, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 158, "(1)"
-       line 417, "pan.___", state 188, "(1)"
-       line 398, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 256, "(1)"
-       line 417, "pan.___", state 286, "(1)"
-       line 398, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 395, "(1)"
-       line 417, "pan.___", state 425, "(1)"
-       line 539, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 398, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 70, "(1)"
-       line 417, "pan.___", state 100, "(1)"
-       line 398, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 158, "(1)"
-       line 417, "pan.___", state 188, "(1)"
-       line 398, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 247, "(1)"
-       line 417, "pan.___", state 277, "(1)"
-       line 398, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 359, "(1)"
-       line 417, "pan.___", state 389, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 59, "(1)"
-       line 412, "pan.___", state 72, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 153, "(1)"
-       line 412, "pan.___", state 166, "(1)"
-       line 651, "pan.___", state 199, "(1)"
-       line 174, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 240, "(1)"
-       line 163, "pan.___", state 248, "(1)"
-       line 167, "pan.___", state 260, "(1)"
-       line 174, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 303, "(1)"
-       line 163, "pan.___", state 311, "(1)"
-       line 167, "pan.___", state 323, "(1)"
-       line 174, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 370, "(1)"
-       line 163, "pan.___", state 378, "(1)"
-       line 167, "pan.___", state 390, "(1)"
-       line 398, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 449, "(1)"
-       line 412, "pan.___", state 462, "(1)"
-       line 417, "pan.___", state 479, "(1)"
-       line 398, "pan.___", state 498, "(1)"
-       line 402, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 554, "(1)"
-       line 417, "pan.___", state 571, "(1)"
-       line 402, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 647, "(1)"
-       line 417, "pan.___", state 664, "(1)"
-       line 178, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 710, "(1)"
-       line 163, "pan.___", state 718, "(1)"
-       line 167, "pan.___", state 730, "(1)"
-       line 174, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 773, "(1)"
-       line 163, "pan.___", state 781, "(1)"
-       line 167, "pan.___", state 793, "(1)"
-       line 174, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 840, "(1)"
-       line 163, "pan.___", state 848, "(1)"
-       line 167, "pan.___", state 860, "(1)"
-       line 398, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, "pan.___", state 884, "(1)"
-       line 398, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, "pan.___", state 885, "else"
-       line 398, "pan.___", state 888, "(1)"
-       line 402, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 899, "else"
-       line 402, "pan.___", state 902, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 400, "pan.___", state 908, "((i<1))"
-       line 400, "pan.___", state 908, "((i>=1))"
-       line 407, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 927, "(1)"
-       line 408, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 408, "pan.___", state 928, "else"
-       line 408, "pan.___", state 931, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 412, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 412, "pan.___", state 941, "else"
-       line 412, "pan.___", state 944, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 410, "pan.___", state 950, "((i<1))"
-       line 410, "pan.___", state 950, "((i>=1))"
-       line 417, "pan.___", state 957, "(1)"
-       line 417, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 417, "pan.___", state 958, "else"
-       line 417, "pan.___", state 961, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 402, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 1040, "(1)"
-       line 417, "pan.___", state 1057, "(1)"
-       line 402, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 1130, "(1)"
-       line 417, "pan.___", state 1147, "(1)"
-       line 398, "pan.___", state 1166, "(1)"
-       line 402, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 1222, "(1)"
-       line 417, "pan.___", state 1239, "(1)"
-       line 402, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 407, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 412, "pan.___", state 1315, "(1)"
-       line 417, "pan.___", state 1332, "(1)"
-       line 178, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 1378, "(1)"
-       line 163, "pan.___", state 1386, "(1)"
-       line 167, "pan.___", state 1398, "(1)"
-       line 174, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1441, "(1)"
-       line 163, "pan.___", state 1449, "(1)"
-       line 167, "pan.___", state 1461, "(1)"
-       line 174, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 1508, "(1)"
-       line 163, "pan.___", state 1516, "(1)"
-       line 167, "pan.___", state 1528, "(1)"
-       line 398, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, "pan.___", state 1552, "(1)"
-       line 398, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 398, "pan.___", state 1553, "else"
-       line 398, "pan.___", state 1556, "(1)"
-       line 402, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 1566, "(1)"
-       line 402, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 402, "pan.___", state 1567, "else"
-       line 402, "pan.___", state 1570, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 400, "pan.___", state 1576, "((i<1))"
-       line 400, "pan.___", state 1576, "((i>=1))"
-       line 407, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1595, "(1)"
-       line 408, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 408, "pan.___", state 1596, "else"
-       line 408, "pan.___", state 1599, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 412, "pan.___", state 1608, "(1)"
-       line 412, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 412, "pan.___", state 1609, "else"
-       line 412, "pan.___", state 1612, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 410, "pan.___", state 1618, "((i<1))"
-       line 410, "pan.___", state 1618, "((i>=1))"
-       line 417, "pan.___", state 1625, "(1)"
-       line 417, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 417, "pan.___", state 1626, "else"
-       line 417, "pan.___", state 1629, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 178, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 1681, "(1)"
-       line 163, "pan.___", state 1689, "(1)"
-       line 167, "pan.___", state 1701, "(1)"
-       line 174, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1744, "(1)"
-       line 163, "pan.___", state 1752, "(1)"
-       line 167, "pan.___", state 1764, "(1)"
-       line 174, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 182, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 159, "pan.___", state 1811, "(1)"
-       line 163, "pan.___", state 1819, "(1)"
-       line 167, "pan.___", state 1831, "(1)"
-       line 701, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 748, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 523 seconds
-pan: rate 90149.985 states/second
-pan: avg transition delay 9.1997e-07 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free.ltl b/formal-model/urcu/result-signal-over-reader/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free.spin.input b/formal-model/urcu/result-signal-over-reader/urcu_free.spin.input
deleted file mode 100644 (file)
index 2d7f62d..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free.spin.input.trail b/formal-model/urcu/result-signal-over-reader/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 837f3d9..0000000
+++ /dev/null
@@ -1,15043 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1180
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1181
-243:2:1185
-244:2:1186
-245:2:1194
-246:2:1195
-247:2:1199
-248:2:1200
-249:2:1194
-250:2:1195
-251:2:1196
-252:2:1208
-253:2:1213
-254:2:1217
-255:2:1218
-256:2:1225
-257:2:1226
-258:2:1237
-259:2:1238
-260:2:1239
-261:2:1237
-262:2:1238
-263:2:1239
-264:2:1250
-265:2:1255
-266:2:1256
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1268
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1270
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1271
-279:2:1275
-280:2:1276
-281:2:1284
-282:2:1285
-283:2:1289
-284:2:1290
-285:2:1284
-286:2:1285
-287:2:1289
-288:2:1290
-289:2:1298
-290:2:1303
-291:2:1307
-292:2:1308
-293:2:1315
-294:2:1316
-295:2:1327
-296:2:1328
-297:2:1329
-298:2:1327
-299:2:1328
-300:2:1329
-301:2:1340
-302:2:1345
-303:2:1346
-304:0:4365
-305:2:1358
-306:0:4365
-307:2:1454
-308:0:4365
-309:3:2528
-310:0:4365
-311:2:1455
-312:0:4365
-313:3:2529
-314:0:4365
-315:2:1652
-316:0:4365
-317:2:1653
-318:0:4365
-319:2:1657
-320:0:4365
-321:2:1660
-322:0:4365
-323:3:2528
-324:0:4365
-325:2:1665
-326:2:1669
-327:2:1670
-328:2:1678
-329:2:1679
-330:2:1683
-331:2:1684
-332:2:1678
-333:2:1679
-334:2:1680
-335:2:1692
-336:2:1697
-337:2:1701
-338:2:1702
-339:2:1709
-340:2:1710
-341:2:1721
-342:2:1722
-343:2:1723
-344:2:1721
-345:2:1722
-346:2:1723
-347:2:1734
-348:2:1739
-349:2:1740
-350:0:4365
-351:3:2529
-352:0:4365
-353:2:1752
-354:0:4365
-355:3:2528
-356:0:4365
-357:2:1754
-358:0:4365
-359:3:2529
-360:0:4365
-361:2:1755
-362:2:1759
-363:2:1760
-364:2:1768
-365:2:1769
-366:2:1773
-367:2:1774
-368:2:1768
-369:2:1769
-370:2:1773
-371:2:1774
-372:2:1782
-373:2:1787
-374:2:1791
-375:2:1792
-376:2:1799
-377:2:1800
-378:2:1811
-379:2:1812
-380:2:1813
-381:2:1811
-382:2:1812
-383:2:1813
-384:2:1824
-385:2:1829
-386:2:1830
-387:0:4365
-388:2:1842
-389:0:4365
-390:3:2528
-391:0:4365
-392:2:1844
-393:0:4365
-394:3:2529
-395:0:4365
-396:2:1845
-397:2:1849
-398:2:1850
-399:2:1858
-400:2:1859
-401:2:1863
-402:2:1864
-403:2:1858
-404:2:1859
-405:2:1863
-406:2:1864
-407:2:1872
-408:2:1877
-409:2:1881
-410:2:1882
-411:2:1889
-412:2:1890
-413:2:1901
-414:2:1902
-415:2:1903
-416:2:1901
-417:2:1902
-418:2:1903
-419:2:1914
-420:2:1919
-421:2:1920
-422:0:4365
-423:2:1932
-424:0:4365
-425:3:2528
-426:0:4365
-427:2:1934
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:1935
-432:0:4365
-433:2:1936
-434:0:4365
-435:2:2129
-436:0:4365
-437:2:2130
-438:0:4365
-439:2:2134
-440:0:4365
-441:3:2528
-442:0:4365
-443:2:2136
-444:0:4365
-445:3:2529
-446:0:4365
-447:2:2137
-448:2:2141
-449:2:2142
-450:2:2150
-451:2:2151
-452:2:2155
-453:2:2156
-454:2:2150
-455:2:2151
-456:2:2155
-457:2:2156
-458:2:2164
-459:2:2169
-460:2:2173
-461:2:2174
-462:2:2181
-463:2:2182
-464:2:2193
-465:2:2194
-466:2:2195
-467:2:2193
-468:2:2194
-469:2:2195
-470:2:2206
-471:2:2211
-472:2:2212
-473:0:4365
-474:2:2224
-475:0:4365
-476:3:2528
-477:0:4365
-478:2:2226
-479:0:4365
-480:3:2529
-481:0:4365
-482:2:1936
-483:0:4365
-484:2:2129
-485:0:4365
-486:2:2130
-487:0:4365
-488:2:2134
-489:0:4365
-490:3:2528
-491:0:4365
-492:2:2136
-493:0:4365
-494:3:2529
-495:0:4365
-496:2:2137
-497:2:2141
-498:2:2142
-499:2:2150
-500:2:2151
-501:2:2155
-502:2:2156
-503:2:2150
-504:2:2151
-505:2:2152
-506:2:2164
-507:2:2169
-508:2:2173
-509:2:2174
-510:2:2181
-511:2:2182
-512:2:2193
-513:2:2194
-514:2:2195
-515:2:2193
-516:2:2194
-517:2:2195
-518:2:2206
-519:2:2211
-520:2:2212
-521:0:4365
-522:2:2224
-523:0:4365
-524:3:2528
-525:0:4365
-526:2:2226
-527:0:4365
-528:3:2529
-529:0:4365
-530:2:2230
-531:0:4365
-532:3:2528
-533:0:4365
-534:2:2235
-535:2:2239
-536:2:2240
-537:2:2248
-538:2:2249
-539:2:2253
-540:2:2254
-541:2:2248
-542:2:2249
-543:2:2250
-544:2:2262
-545:2:2267
-546:2:2271
-547:2:2272
-548:2:2279
-549:2:2280
-550:2:2291
-551:2:2292
-552:2:2293
-553:2:2291
-554:2:2292
-555:2:2293
-556:2:2304
-557:2:2309
-558:2:2310
-559:0:4365
-560:3:2529
-561:0:4365
-562:2:2322
-563:0:4365
-564:2:1169
-565:0:4365
-566:3:2528
-567:0:4365
-568:2:1170
-569:0:4365
-570:3:2529
-571:0:4365
-572:3:2530
-573:0:4365
-574:3:2536
-575:0:4365
-576:3:2537
-577:0:4365
-578:3:2547
-579:0:4365
-580:3:2548
-581:0:4365
-582:3:2552
-583:3:2553
-584:3:2557
-585:3:2561
-586:3:2562
-587:3:2557
-588:3:2561
-589:3:2562
-590:3:2566
-591:3:2574
-592:3:2575
-593:3:2580
-594:3:2587
-595:3:2588
-596:3:2587
-597:3:2588
-598:3:2595
-599:3:2600
-600:0:4365
-601:3:2611
-602:0:4365
-603:3:2615
-604:3:2616
-605:3:2620
-606:3:2624
-607:3:2625
-608:3:2620
-609:3:2624
-610:3:2625
-611:3:2629
-612:3:2637
-613:3:2638
-614:3:2643
-615:3:2650
-616:3:2651
-617:3:2650
-618:3:2651
-619:3:2658
-620:3:2663
-621:0:4365
-622:3:2611
-623:0:4365
-624:3:2615
-625:3:2616
-626:3:2620
-627:3:2624
-628:3:2625
-629:3:2620
-630:3:2624
-631:3:2625
-632:3:2629
-633:3:2637
-634:3:2638
-635:3:2643
-636:3:2650
-637:3:2651
-638:3:2650
-639:3:2651
-640:3:2658
-641:3:2663
-642:0:4365
-643:3:2674
-644:0:4365
-645:3:2682
-646:3:2683
-647:3:2687
-648:3:2691
-649:3:2692
-650:3:2687
-651:3:2691
-652:3:2692
-653:3:2696
-654:3:2704
-655:3:2705
-656:3:2710
-657:3:2717
-658:3:2718
-659:3:2717
-660:3:2718
-661:3:2725
-662:3:2730
-663:0:4365
-664:3:2745
-665:0:4365
-666:3:2746
-667:0:4365
-668:2:1173
-669:0:4365
-670:3:2747
-671:0:4365
-672:2:1179
-673:0:4365
-674:2:1180
-675:0:4365
-676:3:2746
-677:0:4365
-678:2:1181
-679:2:1185
-680:2:1186
-681:2:1194
-682:2:1195
-683:2:1199
-684:2:1200
-685:2:1194
-686:2:1195
-687:2:1199
-688:2:1200
-689:2:1208
-690:2:1213
-691:2:1217
-692:2:1218
-693:2:1225
-694:2:1226
-695:2:1237
-696:2:1238
-697:2:1239
-698:2:1237
-699:2:1238
-700:2:1239
-701:2:1250
-702:2:1255
-703:2:1256
-704:0:4365
-705:3:2747
-706:0:4365
-707:2:1268
-708:0:4365
-709:3:2746
-710:0:4365
-711:2:1270
-712:0:4365
-713:3:2747
-714:0:4365
-715:2:1271
-716:2:1275
-717:2:1276
-718:2:1284
-719:2:1285
-720:2:1289
-721:2:1290
-722:2:1284
-723:2:1285
-724:2:1289
-725:2:1290
-726:2:1298
-727:2:1303
-728:2:1307
-729:2:1308
-730:2:1315
-731:2:1316
-732:2:1327
-733:2:1328
-734:2:1329
-735:2:1327
-736:2:1328
-737:2:1329
-738:2:1340
-739:2:1345
-740:2:1346
-741:0:4365
-742:2:1358
-743:0:4365
-744:2:1360
-745:0:4365
-746:3:2746
-747:0:4365
-748:2:1361
-749:0:4365
-750:3:2747
-751:0:4365
-752:2:1362
-753:2:1366
-754:2:1367
-755:2:1375
-756:2:1376
-757:2:1380
-758:2:1381
-759:2:1375
-760:2:1376
-761:2:1380
-762:2:1381
-763:2:1389
-764:2:1394
-765:2:1398
-766:2:1399
-767:2:1406
-768:2:1407
-769:2:1418
-770:2:1419
-771:2:1420
-772:2:1418
-773:2:1419
-774:2:1420
-775:2:1431
-776:2:1436
-777:2:1437
-778:0:4365
-779:2:1449
-780:0:4365
-781:3:2746
-782:0:4365
-783:2:1451
-784:0:4365
-785:3:2747
-786:0:4365
-787:2:1652
-788:0:4365
-789:2:1653
-790:0:4365
-791:2:1657
-792:0:4365
-793:2:1180
-794:0:4365
-795:3:2746
-796:0:4365
-797:2:1181
-798:2:1185
-799:2:1186
-800:2:1194
-801:2:1195
-802:2:1199
-803:2:1200
-804:2:1194
-805:2:1195
-806:2:1196
-807:2:1208
-808:2:1213
-809:2:1217
-810:2:1218
-811:2:1225
-812:2:1226
-813:2:1237
-814:2:1238
-815:2:1239
-816:2:1237
-817:2:1238
-818:2:1239
-819:2:1250
-820:2:1255
-821:2:1256
-822:0:4365
-823:3:2747
-824:0:4365
-825:2:1268
-826:0:4365
-827:3:2746
-828:0:4365
-829:2:1270
-830:0:4365
-831:3:2747
-832:0:4365
-833:2:1271
-834:2:1275
-835:2:1276
-836:2:1284
-837:2:1285
-838:2:1289
-839:2:1290
-840:2:1284
-841:2:1285
-842:2:1289
-843:2:1290
-844:2:1298
-845:2:1303
-846:2:1307
-847:2:1308
-848:2:1315
-849:2:1316
-850:2:1327
-851:2:1328
-852:2:1329
-853:2:1327
-854:2:1328
-855:2:1329
-856:2:1340
-857:2:1345
-858:2:1346
-859:0:4365
-860:2:1358
-861:0:4365
-862:2:1454
-863:0:4365
-864:3:2746
-865:0:4365
-866:2:1455
-867:0:4365
-868:3:2747
-869:0:4365
-870:2:1652
-871:0:4365
-872:2:1653
-873:0:4365
-874:2:1657
-875:0:4365
-876:2:1660
-877:0:4365
-878:3:2746
-879:0:4365
-880:2:1665
-881:2:1669
-882:2:1670
-883:2:1678
-884:2:1679
-885:2:1683
-886:2:1684
-887:2:1678
-888:2:1679
-889:2:1680
-890:2:1692
-891:2:1697
-892:2:1701
-893:2:1702
-894:2:1709
-895:2:1710
-896:2:1721
-897:2:1722
-898:2:1723
-899:2:1721
-900:2:1722
-901:2:1723
-902:2:1734
-903:2:1739
-904:2:1740
-905:0:4365
-906:3:2747
-907:0:4365
-908:2:1752
-909:0:4365
-910:3:2746
-911:0:4365
-912:2:1754
-913:0:4365
-914:3:2747
-915:0:4365
-916:2:1755
-917:2:1759
-918:2:1760
-919:2:1768
-920:2:1769
-921:2:1773
-922:2:1774
-923:2:1768
-924:2:1769
-925:2:1773
-926:2:1774
-927:2:1782
-928:2:1787
-929:2:1791
-930:2:1792
-931:2:1799
-932:2:1800
-933:2:1811
-934:2:1812
-935:2:1813
-936:2:1811
-937:2:1812
-938:2:1813
-939:2:1824
-940:2:1829
-941:2:1830
-942:0:4365
-943:2:1842
-944:0:4365
-945:3:2746
-946:0:4365
-947:2:1844
-948:0:4365
-949:3:2747
-950:0:4365
-951:2:1845
-952:2:1849
-953:2:1850
-954:2:1858
-955:2:1859
-956:2:1863
-957:2:1864
-958:2:1858
-959:2:1859
-960:2:1863
-961:2:1864
-962:2:1872
-963:2:1877
-964:2:1881
-965:2:1882
-966:2:1889
-967:2:1890
-968:2:1901
-969:2:1902
-970:2:1903
-971:2:1901
-972:2:1902
-973:2:1903
-974:2:1914
-975:2:1919
-976:2:1920
-977:0:4365
-978:2:1932
-979:0:4365
-980:3:2746
-981:0:4365
-982:2:1934
-983:0:4365
-984:3:2747
-985:0:4365
-986:2:1935
-987:0:4365
-988:2:1936
-989:0:4365
-990:2:2129
-991:0:4365
-992:2:2130
-993:0:4365
-994:2:2134
-995:0:4365
-996:3:2746
-997:0:4365
-998:2:2136
-999:0:4365
-1000:3:2747
-1001:0:4365
-1002:2:2137
-1003:2:2141
-1004:2:2142
-1005:2:2150
-1006:2:2151
-1007:2:2155
-1008:2:2156
-1009:2:2150
-1010:2:2151
-1011:2:2155
-1012:2:2156
-1013:2:2164
-1014:2:2169
-1015:2:2173
-1016:2:2174
-1017:2:2181
-1018:2:2182
-1019:2:2193
-1020:2:2194
-1021:2:2195
-1022:2:2193
-1023:2:2194
-1024:2:2195
-1025:2:2206
-1026:2:2211
-1027:2:2212
-1028:0:4365
-1029:2:2224
-1030:0:4365
-1031:3:2746
-1032:0:4365
-1033:2:2226
-1034:0:4365
-1035:3:2747
-1036:0:4365
-1037:2:1936
-1038:0:4365
-1039:2:2129
-1040:0:4365
-1041:2:2130
-1042:0:4365
-1043:2:2134
-1044:0:4365
-1045:3:2746
-1046:0:4365
-1047:2:2136
-1048:0:4365
-1049:3:2747
-1050:0:4365
-1051:2:2137
-1052:2:2141
-1053:2:2142
-1054:2:2150
-1055:2:2151
-1056:2:2155
-1057:2:2156
-1058:2:2150
-1059:2:2151
-1060:2:2152
-1061:2:2164
-1062:2:2169
-1063:2:2173
-1064:2:2174
-1065:2:2181
-1066:2:2182
-1067:2:2193
-1068:2:2194
-1069:2:2195
-1070:2:2193
-1071:2:2194
-1072:2:2195
-1073:2:2206
-1074:2:2211
-1075:2:2212
-1076:0:4365
-1077:2:2224
-1078:0:4365
-1079:3:2746
-1080:0:4365
-1081:2:2226
-1082:0:4365
-1083:3:2747
-1084:0:4365
-1085:2:2230
-1086:0:4365
-1087:3:2746
-1088:0:4365
-1089:2:2235
-1090:2:2239
-1091:2:2240
-1092:2:2248
-1093:2:2249
-1094:2:2253
-1095:2:2254
-1096:2:2248
-1097:2:2249
-1098:2:2250
-1099:2:2262
-1100:2:2267
-1101:2:2271
-1102:2:2272
-1103:2:2279
-1104:2:2280
-1105:2:2291
-1106:2:2292
-1107:2:2293
-1108:2:2291
-1109:2:2292
-1110:2:2293
-1111:2:2304
-1112:2:2309
-1113:2:2310
-1114:0:4365
-1115:3:2747
-1116:0:4365
-1117:2:2322
-1118:0:4365
-1119:2:1169
-1120:0:4365
-1121:3:2746
-1122:0:4365
-1123:2:1170
-1124:0:4365
-1125:3:2747
-1126:0:4365
-1127:3:2748
-1128:0:4365
-1129:3:2754
-1130:0:4365
-1131:3:2755
-1132:3:2759
-1133:3:2760
-1134:3:2768
-1135:3:2769
-1136:3:2773
-1137:3:2774
-1138:3:2768
-1139:3:2769
-1140:3:2773
-1141:3:2774
-1142:3:2782
-1143:3:2787
-1144:3:2791
-1145:3:2792
-1146:3:2799
-1147:3:2800
-1148:3:2811
-1149:3:2812
-1150:3:2813
-1151:3:2811
-1152:3:2812
-1153:3:2813
-1154:3:2824
-1155:3:2829
-1156:3:2830
-1157:0:4365
-1158:3:2842
-1159:0:4365
-1160:3:2843
-1161:0:4365
-1162:2:1173
-1163:0:4365
-1164:3:2844
-1165:0:4365
-1166:2:1179
-1167:0:4365
-1168:2:1180
-1169:0:4365
-1170:3:2843
-1171:0:4365
-1172:2:1181
-1173:2:1185
-1174:2:1186
-1175:2:1194
-1176:2:1195
-1177:2:1199
-1178:2:1200
-1179:2:1194
-1180:2:1195
-1181:2:1199
-1182:2:1200
-1183:2:1208
-1184:2:1213
-1185:2:1217
-1186:2:1218
-1187:2:1225
-1188:2:1226
-1189:2:1237
-1190:2:1238
-1191:2:1239
-1192:2:1237
-1193:2:1238
-1194:2:1239
-1195:2:1250
-1196:2:1255
-1197:2:1256
-1198:0:4365
-1199:3:2844
-1200:0:4365
-1201:2:1268
-1202:0:4365
-1203:3:2843
-1204:0:4365
-1205:2:1270
-1206:0:4365
-1207:3:2844
-1208:0:4365
-1209:2:1271
-1210:2:1275
-1211:2:1276
-1212:2:1284
-1213:2:1285
-1214:2:1289
-1215:2:1290
-1216:2:1284
-1217:2:1285
-1218:2:1289
-1219:2:1290
-1220:2:1298
-1221:2:1303
-1222:2:1307
-1223:2:1308
-1224:2:1315
-1225:2:1316
-1226:2:1327
-1227:2:1328
-1228:2:1329
-1229:2:1327
-1230:2:1328
-1231:2:1329
-1232:2:1340
-1233:2:1345
-1234:2:1346
-1235:0:4365
-1236:2:1358
-1237:0:4365
-1238:2:1360
-1239:0:4365
-1240:3:2843
-1241:0:4365
-1242:2:1361
-1243:0:4365
-1244:3:2844
-1245:0:4365
-1246:2:1362
-1247:2:1366
-1248:2:1367
-1249:2:1375
-1250:2:1376
-1251:2:1380
-1252:2:1381
-1253:2:1375
-1254:2:1376
-1255:2:1380
-1256:2:1381
-1257:2:1389
-1258:2:1394
-1259:2:1398
-1260:2:1399
-1261:2:1406
-1262:2:1407
-1263:2:1418
-1264:2:1419
-1265:2:1420
-1266:2:1418
-1267:2:1419
-1268:2:1420
-1269:2:1431
-1270:2:1436
-1271:2:1437
-1272:0:4365
-1273:2:1449
-1274:0:4365
-1275:3:2843
-1276:0:4365
-1277:2:1451
-1278:0:4365
-1279:3:2844
-1280:0:4365
-1281:2:1652
-1282:0:4365
-1283:2:1653
-1284:0:4365
-1285:2:1657
-1286:0:4365
-1287:2:1180
-1288:0:4365
-1289:3:2843
-1290:0:4365
-1291:2:1181
-1292:2:1185
-1293:2:1186
-1294:2:1194
-1295:2:1195
-1296:2:1199
-1297:2:1200
-1298:2:1194
-1299:2:1195
-1300:2:1196
-1301:2:1208
-1302:2:1213
-1303:2:1217
-1304:2:1218
-1305:2:1225
-1306:2:1226
-1307:2:1237
-1308:2:1238
-1309:2:1239
-1310:2:1237
-1311:2:1238
-1312:2:1239
-1313:2:1250
-1314:2:1255
-1315:2:1256
-1316:0:4365
-1317:3:2844
-1318:0:4365
-1319:2:1268
-1320:0:4365
-1321:3:2843
-1322:0:4365
-1323:2:1270
-1324:0:4365
-1325:3:2844
-1326:0:4365
-1327:2:1271
-1328:2:1275
-1329:2:1276
-1330:2:1284
-1331:2:1285
-1332:2:1289
-1333:2:1290
-1334:2:1284
-1335:2:1285
-1336:2:1289
-1337:2:1290
-1338:2:1298
-1339:2:1303
-1340:2:1307
-1341:2:1308
-1342:2:1315
-1343:2:1316
-1344:2:1327
-1345:2:1328
-1346:2:1329
-1347:2:1327
-1348:2:1328
-1349:2:1329
-1350:2:1340
-1351:2:1345
-1352:2:1346
-1353:0:4365
-1354:2:1358
-1355:0:4365
-1356:2:1454
-1357:0:4365
-1358:3:2843
-1359:0:4365
-1360:2:1455
-1361:0:4365
-1362:3:2844
-1363:0:4365
-1364:2:1652
-1365:0:4365
-1366:2:1653
-1367:0:4365
-1368:2:1657
-1369:0:4365
-1370:2:1660
-1371:0:4365
-1372:3:2843
-1373:0:4365
-1374:2:1665
-1375:2:1669
-1376:2:1670
-1377:2:1678
-1378:2:1679
-1379:2:1683
-1380:2:1684
-1381:2:1678
-1382:2:1679
-1383:2:1680
-1384:2:1692
-1385:2:1697
-1386:2:1701
-1387:2:1702
-1388:2:1709
-1389:2:1710
-1390:2:1721
-1391:2:1722
-1392:2:1723
-1393:2:1721
-1394:2:1722
-1395:2:1723
-1396:2:1734
-1397:2:1739
-1398:2:1740
-1399:0:4365
-1400:3:2844
-1401:0:4365
-1402:2:1752
-1403:0:4365
-1404:3:2843
-1405:0:4365
-1406:2:1754
-1407:0:4365
-1408:3:2844
-1409:0:4365
-1410:2:1755
-1411:2:1759
-1412:2:1760
-1413:2:1768
-1414:2:1769
-1415:2:1773
-1416:2:1774
-1417:2:1768
-1418:2:1769
-1419:2:1773
-1420:2:1774
-1421:2:1782
-1422:2:1787
-1423:2:1791
-1424:2:1792
-1425:2:1799
-1426:2:1800
-1427:2:1811
-1428:2:1812
-1429:2:1813
-1430:2:1811
-1431:2:1812
-1432:2:1813
-1433:2:1824
-1434:2:1829
-1435:2:1830
-1436:0:4365
-1437:2:1842
-1438:0:4365
-1439:3:2843
-1440:0:4365
-1441:2:1844
-1442:0:4365
-1443:3:2844
-1444:0:4365
-1445:2:1845
-1446:2:1849
-1447:2:1850
-1448:2:1858
-1449:2:1859
-1450:2:1863
-1451:2:1864
-1452:2:1858
-1453:2:1859
-1454:2:1863
-1455:2:1864
-1456:2:1872
-1457:2:1877
-1458:2:1881
-1459:2:1882
-1460:2:1889
-1461:2:1890
-1462:2:1901
-1463:2:1902
-1464:2:1903
-1465:2:1901
-1466:2:1902
-1467:2:1903
-1468:2:1914
-1469:2:1919
-1470:2:1920
-1471:0:4365
-1472:2:1932
-1473:0:4365
-1474:3:2843
-1475:0:4365
-1476:2:1934
-1477:0:4365
-1478:3:2844
-1479:0:4365
-1480:2:1935
-1481:0:4365
-1482:2:1936
-1483:0:4365
-1484:2:2129
-1485:0:4365
-1486:2:2130
-1487:0:4365
-1488:2:2134
-1489:0:4365
-1490:3:2843
-1491:0:4365
-1492:2:2136
-1493:0:4365
-1494:3:2844
-1495:0:4365
-1496:2:2137
-1497:2:2141
-1498:2:2142
-1499:2:2150
-1500:2:2151
-1501:2:2155
-1502:2:2156
-1503:2:2150
-1504:2:2151
-1505:2:2155
-1506:2:2156
-1507:2:2164
-1508:2:2169
-1509:2:2173
-1510:2:2174
-1511:2:2181
-1512:2:2182
-1513:2:2193
-1514:2:2194
-1515:2:2195
-1516:2:2193
-1517:2:2194
-1518:2:2195
-1519:2:2206
-1520:2:2211
-1521:2:2212
-1522:0:4365
-1523:2:2224
-1524:0:4365
-1525:3:2843
-1526:0:4365
-1527:2:2226
-1528:0:4365
-1529:3:2844
-1530:0:4365
-1531:2:1936
-1532:0:4365
-1533:2:2129
-1534:0:4365
-1535:2:2130
-1536:0:4365
-1537:2:2134
-1538:0:4365
-1539:3:2843
-1540:0:4365
-1541:2:2136
-1542:0:4365
-1543:3:2844
-1544:0:4365
-1545:2:2137
-1546:2:2141
-1547:2:2142
-1548:2:2150
-1549:2:2151
-1550:2:2155
-1551:2:2156
-1552:2:2150
-1553:2:2151
-1554:2:2152
-1555:2:2164
-1556:2:2169
-1557:2:2173
-1558:2:2174
-1559:2:2181
-1560:2:2182
-1561:2:2193
-1562:2:2194
-1563:2:2195
-1564:2:2193
-1565:2:2194
-1566:2:2195
-1567:2:2206
-1568:2:2211
-1569:2:2212
-1570:0:4365
-1571:2:2224
-1572:0:4365
-1573:3:2843
-1574:0:4365
-1575:2:2226
-1576:0:4365
-1577:3:2844
-1578:0:4365
-1579:2:2230
-1580:0:4365
-1581:3:2843
-1582:0:4365
-1583:2:2235
-1584:2:2239
-1585:2:2240
-1586:2:2248
-1587:2:2249
-1588:2:2253
-1589:2:2254
-1590:2:2248
-1591:2:2249
-1592:2:2250
-1593:2:2262
-1594:2:2267
-1595:2:2271
-1596:2:2272
-1597:2:2279
-1598:2:2280
-1599:2:2291
-1600:2:2292
-1601:2:2293
-1602:2:2291
-1603:2:2292
-1604:2:2293
-1605:2:2304
-1606:2:2309
-1607:2:2310
-1608:0:4365
-1609:3:2844
-1610:0:4365
-1611:2:2322
-1612:0:4365
-1613:2:1169
-1614:0:4365
-1615:3:2843
-1616:0:4365
-1617:2:1170
-1618:0:4365
-1619:3:2844
-1620:0:4365
-1621:3:2845
-1622:0:4365
-1623:3:2851
-1624:0:4365
-1625:3:2854
-1626:3:2855
-1627:3:2867
-1628:3:2868
-1629:3:2872
-1630:3:2873
-1631:3:2867
-1632:3:2868
-1633:3:2872
-1634:3:2873
-1635:3:2881
-1636:3:2886
-1637:3:2890
-1638:3:2891
-1639:3:2898
-1640:3:2899
-1641:3:2910
-1642:3:2911
-1643:3:2912
-1644:3:2910
-1645:3:2911
-1646:3:2912
-1647:3:2923
-1648:3:2928
-1649:3:2929
-1650:0:4365
-1651:3:2941
-1652:0:4365
-1653:3:2942
-1654:0:4365
-1655:2:1173
-1656:0:4365
-1657:3:2943
-1658:0:4365
-1659:2:1179
-1660:0:4365
-1661:2:1180
-1662:0:4365
-1663:3:2942
-1664:0:4365
-1665:2:1181
-1666:2:1185
-1667:2:1186
-1668:2:1194
-1669:2:1195
-1670:2:1199
-1671:2:1200
-1672:2:1194
-1673:2:1195
-1674:2:1199
-1675:2:1200
-1676:2:1208
-1677:2:1213
-1678:2:1217
-1679:2:1218
-1680:2:1225
-1681:2:1226
-1682:2:1237
-1683:2:1238
-1684:2:1239
-1685:2:1237
-1686:2:1238
-1687:2:1239
-1688:2:1250
-1689:2:1255
-1690:2:1256
-1691:0:4365
-1692:3:2943
-1693:0:4365
-1694:2:1268
-1695:0:4365
-1696:3:2942
-1697:0:4365
-1698:2:1270
-1699:0:4365
-1700:3:2943
-1701:0:4365
-1702:2:1271
-1703:2:1275
-1704:2:1276
-1705:2:1284
-1706:2:1285
-1707:2:1289
-1708:2:1290
-1709:2:1284
-1710:2:1285
-1711:2:1289
-1712:2:1290
-1713:2:1298
-1714:2:1303
-1715:2:1307
-1716:2:1308
-1717:2:1315
-1718:2:1316
-1719:2:1327
-1720:2:1328
-1721:2:1329
-1722:2:1327
-1723:2:1328
-1724:2:1329
-1725:2:1340
-1726:2:1345
-1727:2:1346
-1728:0:4365
-1729:2:1358
-1730:0:4365
-1731:2:1360
-1732:0:4365
-1733:3:2942
-1734:0:4365
-1735:2:1361
-1736:0:4365
-1737:3:2943
-1738:0:4365
-1739:2:1362
-1740:2:1366
-1741:2:1367
-1742:2:1375
-1743:2:1376
-1744:2:1380
-1745:2:1381
-1746:2:1375
-1747:2:1376
-1748:2:1380
-1749:2:1381
-1750:2:1389
-1751:2:1394
-1752:2:1398
-1753:2:1399
-1754:2:1406
-1755:2:1407
-1756:2:1418
-1757:2:1419
-1758:2:1420
-1759:2:1418
-1760:2:1419
-1761:2:1420
-1762:2:1431
-1763:2:1436
-1764:2:1437
-1765:0:4365
-1766:2:1449
-1767:0:4365
-1768:3:2942
-1769:0:4365
-1770:2:1451
-1771:0:4365
-1772:3:2943
-1773:0:4365
-1774:2:1652
-1775:0:4365
-1776:2:1653
-1777:0:4365
-1778:2:1657
-1779:0:4365
-1780:2:1180
-1781:0:4365
-1782:3:2942
-1783:0:4365
-1784:2:1181
-1785:2:1185
-1786:2:1186
-1787:2:1194
-1788:2:1195
-1789:2:1199
-1790:2:1200
-1791:2:1194
-1792:2:1195
-1793:2:1196
-1794:2:1208
-1795:2:1213
-1796:2:1217
-1797:2:1218
-1798:2:1225
-1799:2:1226
-1800:2:1237
-1801:2:1238
-1802:2:1239
-1803:2:1237
-1804:2:1238
-1805:2:1239
-1806:2:1250
-1807:2:1255
-1808:2:1256
-1809:0:4365
-1810:3:2943
-1811:0:4365
-1812:2:1268
-1813:0:4365
-1814:3:2942
-1815:0:4365
-1816:2:1270
-1817:0:4365
-1818:3:2943
-1819:0:4365
-1820:2:1271
-1821:2:1275
-1822:2:1276
-1823:2:1284
-1824:2:1285
-1825:2:1289
-1826:2:1290
-1827:2:1284
-1828:2:1285
-1829:2:1289
-1830:2:1290
-1831:2:1298
-1832:2:1303
-1833:2:1307
-1834:2:1308
-1835:2:1315
-1836:2:1316
-1837:2:1327
-1838:2:1328
-1839:2:1329
-1840:2:1327
-1841:2:1328
-1842:2:1329
-1843:2:1340
-1844:2:1345
-1845:2:1346
-1846:0:4365
-1847:2:1358
-1848:0:4365
-1849:2:1454
-1850:0:4365
-1851:3:2942
-1852:0:4365
-1853:2:1455
-1854:0:4365
-1855:3:2943
-1856:0:4365
-1857:2:1652
-1858:0:4365
-1859:2:1653
-1860:0:4365
-1861:2:1657
-1862:0:4365
-1863:2:1660
-1864:0:4365
-1865:3:2942
-1866:0:4365
-1867:2:1665
-1868:2:1669
-1869:2:1670
-1870:2:1678
-1871:2:1679
-1872:2:1683
-1873:2:1684
-1874:2:1678
-1875:2:1679
-1876:2:1680
-1877:2:1692
-1878:2:1697
-1879:2:1701
-1880:2:1702
-1881:2:1709
-1882:2:1710
-1883:2:1721
-1884:2:1722
-1885:2:1723
-1886:2:1721
-1887:2:1722
-1888:2:1723
-1889:2:1734
-1890:2:1739
-1891:2:1740
-1892:0:4365
-1893:3:2943
-1894:0:4365
-1895:2:1752
-1896:0:4365
-1897:3:2942
-1898:0:4365
-1899:2:1754
-1900:0:4365
-1901:3:2943
-1902:0:4365
-1903:2:1755
-1904:2:1759
-1905:2:1760
-1906:2:1768
-1907:2:1769
-1908:2:1773
-1909:2:1774
-1910:2:1768
-1911:2:1769
-1912:2:1773
-1913:2:1774
-1914:2:1782
-1915:2:1787
-1916:2:1791
-1917:2:1792
-1918:2:1799
-1919:2:1800
-1920:2:1811
-1921:2:1812
-1922:2:1813
-1923:2:1811
-1924:2:1812
-1925:2:1813
-1926:2:1824
-1927:2:1829
-1928:2:1830
-1929:0:4365
-1930:2:1842
-1931:0:4365
-1932:3:2942
-1933:0:4365
-1934:2:1844
-1935:0:4365
-1936:3:2943
-1937:0:4365
-1938:2:1845
-1939:2:1849
-1940:2:1850
-1941:2:1858
-1942:2:1859
-1943:2:1863
-1944:2:1864
-1945:2:1858
-1946:2:1859
-1947:2:1863
-1948:2:1864
-1949:2:1872
-1950:2:1877
-1951:2:1881
-1952:2:1882
-1953:2:1889
-1954:2:1890
-1955:2:1901
-1956:2:1902
-1957:2:1903
-1958:2:1901
-1959:2:1902
-1960:2:1903
-1961:2:1914
-1962:2:1919
-1963:2:1920
-1964:0:4365
-1965:2:1932
-1966:0:4365
-1967:3:2942
-1968:0:4365
-1969:2:1934
-1970:0:4365
-1971:3:2943
-1972:0:4365
-1973:2:1935
-1974:0:4365
-1975:2:1936
-1976:0:4365
-1977:2:2129
-1978:0:4365
-1979:2:2130
-1980:0:4365
-1981:2:2134
-1982:0:4365
-1983:3:2942
-1984:0:4365
-1985:2:2136
-1986:0:4365
-1987:3:2943
-1988:0:4365
-1989:2:2137
-1990:2:2141
-1991:2:2142
-1992:2:2150
-1993:2:2151
-1994:2:2155
-1995:2:2156
-1996:2:2150
-1997:2:2151
-1998:2:2155
-1999:2:2156
-2000:2:2164
-2001:2:2169
-2002:2:2173
-2003:2:2174
-2004:2:2181
-2005:2:2182
-2006:2:2193
-2007:2:2194
-2008:2:2195
-2009:2:2193
-2010:2:2194
-2011:2:2195
-2012:2:2206
-2013:2:2211
-2014:2:2212
-2015:0:4365
-2016:2:2224
-2017:0:4365
-2018:3:2942
-2019:0:4365
-2020:2:2226
-2021:0:4365
-2022:3:2943
-2023:0:4365
-2024:2:1936
-2025:0:4365
-2026:2:2129
-2027:0:4365
-2028:2:2130
-2029:0:4365
-2030:2:2134
-2031:0:4365
-2032:3:2942
-2033:0:4365
-2034:2:2136
-2035:0:4365
-2036:3:2943
-2037:0:4365
-2038:2:2137
-2039:2:2141
-2040:2:2142
-2041:2:2150
-2042:2:2151
-2043:2:2155
-2044:2:2156
-2045:2:2150
-2046:2:2151
-2047:2:2152
-2048:2:2164
-2049:2:2169
-2050:2:2173
-2051:2:2174
-2052:2:2181
-2053:2:2182
-2054:2:2193
-2055:2:2194
-2056:2:2195
-2057:2:2193
-2058:2:2194
-2059:2:2195
-2060:2:2206
-2061:2:2211
-2062:2:2212
-2063:0:4365
-2064:2:2224
-2065:0:4365
-2066:3:2942
-2067:0:4365
-2068:2:2226
-2069:0:4365
-2070:3:2943
-2071:0:4365
-2072:2:2230
-2073:0:4365
-2074:3:2942
-2075:0:4365
-2076:2:2235
-2077:2:2239
-2078:2:2240
-2079:2:2248
-2080:2:2249
-2081:2:2253
-2082:2:2254
-2083:2:2248
-2084:2:2249
-2085:2:2250
-2086:2:2262
-2087:2:2267
-2088:2:2271
-2089:2:2272
-2090:2:2279
-2091:2:2280
-2092:2:2291
-2093:2:2292
-2094:2:2293
-2095:2:2291
-2096:2:2292
-2097:2:2293
-2098:2:2304
-2099:2:2309
-2100:2:2310
-2101:0:4365
-2102:3:2943
-2103:0:4365
-2104:2:2322
-2105:0:4365
-2106:2:1169
-2107:0:4365
-2108:3:2942
-2109:0:4365
-2110:2:1170
-2111:0:4365
-2112:3:2943
-2113:0:4365
-2114:3:2944
-2115:0:4365
-2116:3:2950
-2117:0:4365
-2118:3:2951
-2119:0:4365
-2120:3:2952
-2121:0:4365
-2122:3:2953
-2123:0:4365
-2124:3:2954
-2125:3:2958
-2126:3:2959
-2127:3:2967
-2128:3:2968
-2129:3:2972
-2130:3:2973
-2131:3:2967
-2132:3:2968
-2133:3:2972
-2134:3:2973
-2135:3:2981
-2136:3:2986
-2137:3:2990
-2138:3:2991
-2139:3:2998
-2140:3:2999
-2141:3:3010
-2142:3:3011
-2143:3:3012
-2144:3:3010
-2145:3:3011
-2146:3:3012
-2147:3:3023
-2148:3:3028
-2149:3:3029
-2150:0:4365
-2151:3:3041
-2152:0:4365
-2153:3:3042
-2154:0:4365
-2155:2:1173
-2156:0:4365
-2157:3:3043
-2158:0:4365
-2159:2:1179
-2160:0:4365
-2161:2:1180
-2162:0:4365
-2163:3:3042
-2164:0:4365
-2165:2:1181
-2166:2:1185
-2167:2:1186
-2168:2:1194
-2169:2:1195
-2170:2:1199
-2171:2:1200
-2172:2:1194
-2173:2:1195
-2174:2:1199
-2175:2:1200
-2176:2:1208
-2177:2:1213
-2178:2:1217
-2179:2:1218
-2180:2:1225
-2181:2:1226
-2182:2:1237
-2183:2:1238
-2184:2:1239
-2185:2:1237
-2186:2:1238
-2187:2:1239
-2188:2:1250
-2189:2:1255
-2190:2:1256
-2191:0:4365
-2192:3:3043
-2193:0:4365
-2194:2:1268
-2195:0:4365
-2196:3:3042
-2197:0:4365
-2198:2:1270
-2199:0:4365
-2200:3:3043
-2201:0:4365
-2202:2:1271
-2203:2:1275
-2204:2:1276
-2205:2:1284
-2206:2:1285
-2207:2:1289
-2208:2:1290
-2209:2:1284
-2210:2:1285
-2211:2:1289
-2212:2:1290
-2213:2:1298
-2214:2:1303
-2215:2:1307
-2216:2:1308
-2217:2:1315
-2218:2:1316
-2219:2:1327
-2220:2:1328
-2221:2:1329
-2222:2:1327
-2223:2:1328
-2224:2:1329
-2225:2:1340
-2226:2:1345
-2227:2:1346
-2228:0:4365
-2229:2:1358
-2230:0:4365
-2231:2:1360
-2232:0:4365
-2233:3:3042
-2234:0:4365
-2235:2:1361
-2236:0:4365
-2237:3:3043
-2238:0:4365
-2239:2:1362
-2240:2:1366
-2241:2:1367
-2242:2:1375
-2243:2:1376
-2244:2:1380
-2245:2:1381
-2246:2:1375
-2247:2:1376
-2248:2:1380
-2249:2:1381
-2250:2:1389
-2251:2:1394
-2252:2:1398
-2253:2:1399
-2254:2:1406
-2255:2:1407
-2256:2:1418
-2257:2:1419
-2258:2:1420
-2259:2:1418
-2260:2:1419
-2261:2:1420
-2262:2:1431
-2263:2:1436
-2264:2:1437
-2265:0:4365
-2266:2:1449
-2267:0:4365
-2268:3:3042
-2269:0:4365
-2270:2:1451
-2271:0:4365
-2272:3:3043
-2273:0:4365
-2274:2:1652
-2275:0:4365
-2276:2:1653
-2277:0:4365
-2278:2:1657
-2279:0:4365
-2280:2:1180
-2281:0:4365
-2282:3:3042
-2283:0:4365
-2284:2:1181
-2285:2:1185
-2286:2:1186
-2287:2:1194
-2288:2:1195
-2289:2:1199
-2290:2:1200
-2291:2:1194
-2292:2:1195
-2293:2:1196
-2294:2:1208
-2295:2:1213
-2296:2:1217
-2297:2:1218
-2298:2:1225
-2299:2:1226
-2300:2:1237
-2301:2:1238
-2302:2:1239
-2303:2:1237
-2304:2:1238
-2305:2:1239
-2306:2:1250
-2307:2:1255
-2308:2:1256
-2309:0:4365
-2310:3:3043
-2311:0:4365
-2312:2:1268
-2313:0:4365
-2314:3:3042
-2315:0:4365
-2316:2:1270
-2317:0:4365
-2318:3:3043
-2319:0:4365
-2320:2:1271
-2321:2:1275
-2322:2:1276
-2323:2:1284
-2324:2:1285
-2325:2:1289
-2326:2:1290
-2327:2:1284
-2328:2:1285
-2329:2:1289
-2330:2:1290
-2331:2:1298
-2332:2:1303
-2333:2:1307
-2334:2:1308
-2335:2:1315
-2336:2:1316
-2337:2:1327
-2338:2:1328
-2339:2:1329
-2340:2:1327
-2341:2:1328
-2342:2:1329
-2343:2:1340
-2344:2:1345
-2345:2:1346
-2346:0:4365
-2347:2:1358
-2348:0:4365
-2349:2:1454
-2350:0:4365
-2351:3:3042
-2352:0:4365
-2353:2:1455
-2354:0:4365
-2355:3:3043
-2356:0:4365
-2357:2:1652
-2358:0:4365
-2359:2:1653
-2360:0:4365
-2361:2:1657
-2362:0:4365
-2363:2:1660
-2364:0:4365
-2365:3:3042
-2366:0:4365
-2367:2:1665
-2368:2:1669
-2369:2:1670
-2370:2:1678
-2371:2:1679
-2372:2:1683
-2373:2:1684
-2374:2:1678
-2375:2:1679
-2376:2:1680
-2377:2:1692
-2378:2:1697
-2379:2:1701
-2380:2:1702
-2381:2:1709
-2382:2:1710
-2383:2:1721
-2384:2:1722
-2385:2:1723
-2386:2:1721
-2387:2:1722
-2388:2:1723
-2389:2:1734
-2390:2:1739
-2391:2:1740
-2392:0:4365
-2393:3:3043
-2394:0:4365
-2395:2:1752
-2396:0:4365
-2397:3:3042
-2398:0:4365
-2399:2:1754
-2400:0:4365
-2401:3:3043
-2402:0:4365
-2403:2:1755
-2404:2:1759
-2405:2:1760
-2406:2:1768
-2407:2:1769
-2408:2:1773
-2409:2:1774
-2410:2:1768
-2411:2:1769
-2412:2:1773
-2413:2:1774
-2414:2:1782
-2415:2:1787
-2416:2:1791
-2417:2:1792
-2418:2:1799
-2419:2:1800
-2420:2:1811
-2421:2:1812
-2422:2:1813
-2423:2:1811
-2424:2:1812
-2425:2:1813
-2426:2:1824
-2427:2:1829
-2428:2:1830
-2429:0:4365
-2430:2:1842
-2431:0:4365
-2432:3:3042
-2433:0:4365
-2434:2:1844
-2435:0:4365
-2436:3:3043
-2437:0:4365
-2438:2:1845
-2439:2:1849
-2440:2:1850
-2441:2:1858
-2442:2:1859
-2443:2:1863
-2444:2:1864
-2445:2:1858
-2446:2:1859
-2447:2:1863
-2448:2:1864
-2449:2:1872
-2450:2:1877
-2451:2:1881
-2452:2:1882
-2453:2:1889
-2454:2:1890
-2455:2:1901
-2456:2:1902
-2457:2:1903
-2458:2:1901
-2459:2:1902
-2460:2:1903
-2461:2:1914
-2462:2:1919
-2463:2:1920
-2464:0:4365
-2465:2:1932
-2466:0:4365
-2467:3:3042
-2468:0:4365
-2469:2:1934
-2470:0:4365
-2471:3:3043
-2472:0:4365
-2473:2:1935
-2474:0:4365
-2475:2:1936
-2476:0:4365
-2477:2:2129
-2478:0:4365
-2479:2:2130
-2480:0:4365
-2481:2:2134
-2482:0:4365
-2483:3:3042
-2484:0:4365
-2485:2:2136
-2486:0:4365
-2487:3:3043
-2488:0:4365
-2489:2:2137
-2490:2:2141
-2491:2:2142
-2492:2:2150
-2493:2:2151
-2494:2:2155
-2495:2:2156
-2496:2:2150
-2497:2:2151
-2498:2:2155
-2499:2:2156
-2500:2:2164
-2501:2:2169
-2502:2:2173
-2503:2:2174
-2504:2:2181
-2505:2:2182
-2506:2:2193
-2507:2:2194
-2508:2:2195
-2509:2:2193
-2510:2:2194
-2511:2:2195
-2512:2:2206
-2513:2:2211
-2514:2:2212
-2515:0:4365
-2516:2:2224
-2517:0:4365
-2518:3:3042
-2519:0:4365
-2520:2:2226
-2521:0:4365
-2522:3:3043
-2523:0:4365
-2524:2:1936
-2525:0:4365
-2526:2:2129
-2527:0:4365
-2528:2:2130
-2529:0:4365
-2530:2:2134
-2531:0:4365
-2532:3:3042
-2533:0:4365
-2534:2:2136
-2535:0:4365
-2536:3:3043
-2537:0:4365
-2538:2:2137
-2539:2:2141
-2540:2:2142
-2541:2:2150
-2542:2:2151
-2543:2:2155
-2544:2:2156
-2545:2:2150
-2546:2:2151
-2547:2:2152
-2548:2:2164
-2549:2:2169
-2550:2:2173
-2551:2:2174
-2552:2:2181
-2553:2:2182
-2554:2:2193
-2555:2:2194
-2556:2:2195
-2557:2:2193
-2558:2:2194
-2559:2:2195
-2560:2:2206
-2561:2:2211
-2562:2:2212
-2563:0:4365
-2564:2:2224
-2565:0:4365
-2566:3:3042
-2567:0:4365
-2568:2:2226
-2569:0:4365
-2570:3:3043
-2571:0:4365
-2572:2:2230
-2573:0:4365
-2574:3:3042
-2575:0:4365
-2576:2:2235
-2577:2:2239
-2578:2:2240
-2579:2:2248
-2580:2:2249
-2581:2:2253
-2582:2:2254
-2583:2:2248
-2584:2:2249
-2585:2:2250
-2586:2:2262
-2587:2:2267
-2588:2:2271
-2589:2:2272
-2590:2:2279
-2591:2:2280
-2592:2:2291
-2593:2:2292
-2594:2:2293
-2595:2:2291
-2596:2:2292
-2597:2:2293
-2598:2:2304
-2599:2:2309
-2600:2:2310
-2601:0:4365
-2602:3:3043
-2603:0:4365
-2604:2:2322
-2605:0:4365
-2606:2:1169
-2607:0:4365
-2608:3:3042
-2609:0:4365
-2610:2:1170
-2611:0:4365
-2612:3:3043
-2613:0:4365
-2614:3:3044
-2615:0:4365
-2616:3:3257
-2617:0:4365
-2618:3:3265
-2619:0:4365
-2620:3:3266
-2621:3:3270
-2622:3:3271
-2623:3:3279
-2624:3:3280
-2625:3:3284
-2626:3:3285
-2627:3:3279
-2628:3:3280
-2629:3:3284
-2630:3:3285
-2631:3:3293
-2632:3:3298
-2633:3:3302
-2634:3:3303
-2635:3:3310
-2636:3:3311
-2637:3:3322
-2638:3:3323
-2639:3:3324
-2640:3:3322
-2641:3:3323
-2642:3:3324
-2643:3:3335
-2644:3:3340
-2645:3:3341
-2646:0:4365
-2647:3:3353
-2648:0:4365
-2649:3:3354
-2650:0:4365
-2651:2:1173
-2652:0:4365
-2653:3:3355
-2654:0:4365
-2655:2:1179
-2656:0:4365
-2657:2:1180
-2658:0:4365
-2659:3:3354
-2660:0:4365
-2661:2:1181
-2662:2:1185
-2663:2:1186
-2664:2:1194
-2665:2:1195
-2666:2:1199
-2667:2:1200
-2668:2:1194
-2669:2:1195
-2670:2:1199
-2671:2:1200
-2672:2:1208
-2673:2:1213
-2674:2:1217
-2675:2:1218
-2676:2:1225
-2677:2:1226
-2678:2:1237
-2679:2:1238
-2680:2:1239
-2681:2:1237
-2682:2:1238
-2683:2:1239
-2684:2:1250
-2685:2:1255
-2686:2:1256
-2687:0:4365
-2688:3:3355
-2689:0:4365
-2690:2:1268
-2691:0:4365
-2692:3:3354
-2693:0:4365
-2694:2:1270
-2695:0:4365
-2696:3:3355
-2697:0:4365
-2698:2:1271
-2699:2:1275
-2700:2:1276
-2701:2:1284
-2702:2:1285
-2703:2:1289
-2704:2:1290
-2705:2:1284
-2706:2:1285
-2707:2:1289
-2708:2:1290
-2709:2:1298
-2710:2:1303
-2711:2:1307
-2712:2:1308
-2713:2:1315
-2714:2:1316
-2715:2:1327
-2716:2:1328
-2717:2:1329
-2718:2:1327
-2719:2:1328
-2720:2:1329
-2721:2:1340
-2722:2:1345
-2723:2:1346
-2724:0:4365
-2725:2:1358
-2726:0:4365
-2727:2:1360
-2728:0:4365
-2729:3:3354
-2730:0:4365
-2731:2:1361
-2732:0:4365
-2733:3:3355
-2734:0:4365
-2735:2:1362
-2736:2:1366
-2737:2:1367
-2738:2:1375
-2739:2:1376
-2740:2:1380
-2741:2:1381
-2742:2:1375
-2743:2:1376
-2744:2:1380
-2745:2:1381
-2746:2:1389
-2747:2:1394
-2748:2:1398
-2749:2:1399
-2750:2:1406
-2751:2:1407
-2752:2:1418
-2753:2:1419
-2754:2:1420
-2755:2:1418
-2756:2:1419
-2757:2:1420
-2758:2:1431
-2759:2:1436
-2760:2:1437
-2761:0:4365
-2762:2:1449
-2763:0:4365
-2764:3:3354
-2765:0:4365
-2766:2:1451
-2767:0:4365
-2768:3:3355
-2769:0:4365
-2770:2:1652
-2771:0:4365
-2772:2:1653
-2773:0:4365
-2774:2:1657
-2775:0:4365
-2776:2:1180
-2777:0:4365
-2778:3:3354
-2779:0:4365
-2780:2:1181
-2781:2:1185
-2782:2:1186
-2783:2:1194
-2784:2:1195
-2785:2:1199
-2786:2:1200
-2787:2:1194
-2788:2:1195
-2789:2:1196
-2790:2:1208
-2791:2:1213
-2792:2:1217
-2793:2:1218
-2794:2:1225
-2795:2:1226
-2796:2:1237
-2797:2:1238
-2798:2:1239
-2799:2:1237
-2800:2:1238
-2801:2:1239
-2802:2:1250
-2803:2:1255
-2804:2:1256
-2805:0:4365
-2806:3:3355
-2807:0:4365
-2808:2:1268
-2809:0:4365
-2810:3:3354
-2811:0:4365
-2812:2:1270
-2813:0:4365
-2814:3:3355
-2815:0:4365
-2816:2:1271
-2817:2:1275
-2818:2:1276
-2819:2:1284
-2820:2:1285
-2821:2:1289
-2822:2:1290
-2823:2:1284
-2824:2:1285
-2825:2:1289
-2826:2:1290
-2827:2:1298
-2828:2:1303
-2829:2:1307
-2830:2:1308
-2831:2:1315
-2832:2:1316
-2833:2:1327
-2834:2:1328
-2835:2:1329
-2836:2:1327
-2837:2:1328
-2838:2:1329
-2839:2:1340
-2840:2:1345
-2841:2:1346
-2842:0:4365
-2843:2:1358
-2844:0:4365
-2845:2:1454
-2846:0:4365
-2847:3:3354
-2848:0:4365
-2849:2:1455
-2850:0:4365
-2851:3:3355
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3354
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3355
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3354
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3355
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3354
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3355
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3354
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3355
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3354
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3355
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3354
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3355
-3019:0:4365
-3020:2:1936
-3021:0:4365
-3022:2:2129
-3023:0:4365
-3024:2:2130
-3025:0:4365
-3026:2:2134
-3027:0:4365
-3028:3:3354
-3029:0:4365
-3030:2:2136
-3031:0:4365
-3032:3:3355
-3033:0:4365
-3034:2:2137
-3035:2:2141
-3036:2:2142
-3037:2:2150
-3038:2:2151
-3039:2:2155
-3040:2:2156
-3041:2:2150
-3042:2:2151
-3043:2:2152
-3044:2:2164
-3045:2:2169
-3046:2:2173
-3047:2:2174
-3048:2:2181
-3049:2:2182
-3050:2:2193
-3051:2:2194
-3052:2:2195
-3053:2:2193
-3054:2:2194
-3055:2:2195
-3056:2:2206
-3057:2:2211
-3058:2:2212
-3059:0:4365
-3060:2:2224
-3061:0:4365
-3062:3:3354
-3063:0:4365
-3064:2:2226
-3065:0:4365
-3066:3:3355
-3067:0:4365
-3068:2:2230
-3069:0:4365
-3070:3:3354
-3071:0:4365
-3072:2:2235
-3073:2:2239
-3074:2:2240
-3075:2:2248
-3076:2:2249
-3077:2:2253
-3078:2:2254
-3079:2:2248
-3080:2:2249
-3081:2:2250
-3082:2:2262
-3083:2:2267
-3084:2:2271
-3085:2:2272
-3086:2:2279
-3087:2:2280
-3088:2:2291
-3089:2:2292
-3090:2:2293
-3091:2:2291
-3092:2:2292
-3093:2:2293
-3094:2:2304
-3095:2:2309
-3096:2:2310
-3097:0:4365
-3098:3:3355
-3099:0:4365
-3100:2:2322
-3101:0:4365
-3102:2:1169
-3103:0:4365
-3104:3:3354
-3105:0:4365
-3106:2:1170
-3107:0:4365
-3108:3:3355
-3109:0:4365
-3110:3:3356
-3111:0:4365
-3112:3:3366
-3113:0:4365
-3114:3:2951
-3115:0:4365
-3116:3:2952
-3117:0:4365
-3118:3:2953
-3119:0:4365
-3120:3:2954
-3121:3:2958
-3122:3:2959
-3123:3:2967
-3124:3:2968
-3125:3:2972
-3126:3:2973
-3127:3:2967
-3128:3:2968
-3129:3:2972
-3130:3:2973
-3131:3:2981
-3132:3:2986
-3133:3:2990
-3134:3:2991
-3135:3:2998
-3136:3:2999
-3137:3:3010
-3138:3:3011
-3139:3:3012
-3140:3:3010
-3141:3:3011
-3142:3:3012
-3143:3:3023
-3144:3:3028
-3145:3:3029
-3146:0:4365
-3147:3:3041
-3148:0:4365
-3149:3:3042
-3150:0:4365
-3151:2:1173
-3152:0:4365
-3153:3:3043
-3154:0:4365
-3155:2:1179
-3156:0:4365
-3157:2:1180
-3158:0:4365
-3159:3:3042
-3160:0:4365
-3161:2:1181
-3162:2:1185
-3163:2:1186
-3164:2:1194
-3165:2:1195
-3166:2:1199
-3167:2:1200
-3168:2:1194
-3169:2:1195
-3170:2:1199
-3171:2:1200
-3172:2:1208
-3173:2:1213
-3174:2:1217
-3175:2:1218
-3176:2:1225
-3177:2:1226
-3178:2:1237
-3179:2:1238
-3180:2:1239
-3181:2:1237
-3182:2:1238
-3183:2:1239
-3184:2:1250
-3185:2:1255
-3186:2:1256
-3187:0:4365
-3188:3:3043
-3189:0:4365
-3190:2:1268
-3191:0:4365
-3192:3:3042
-3193:0:4365
-3194:2:1270
-3195:0:4365
-3196:3:3043
-3197:0:4365
-3198:2:1271
-3199:2:1275
-3200:2:1276
-3201:2:1284
-3202:2:1285
-3203:2:1289
-3204:2:1290
-3205:2:1284
-3206:2:1285
-3207:2:1289
-3208:2:1290
-3209:2:1298
-3210:2:1303
-3211:2:1307
-3212:2:1308
-3213:2:1315
-3214:2:1316
-3215:2:1327
-3216:2:1328
-3217:2:1329
-3218:2:1327
-3219:2:1328
-3220:2:1329
-3221:2:1340
-3222:2:1345
-3223:2:1346
-3224:0:4365
-3225:2:1358
-3226:0:4365
-3227:2:1360
-3228:0:4365
-3229:3:3042
-3230:0:4365
-3231:2:1361
-3232:0:4365
-3233:3:3043
-3234:0:4365
-3235:2:1362
-3236:2:1366
-3237:2:1367
-3238:2:1375
-3239:2:1376
-3240:2:1380
-3241:2:1381
-3242:2:1375
-3243:2:1376
-3244:2:1380
-3245:2:1381
-3246:2:1389
-3247:2:1394
-3248:2:1398
-3249:2:1399
-3250:2:1406
-3251:2:1407
-3252:2:1418
-3253:2:1419
-3254:2:1420
-3255:2:1418
-3256:2:1419
-3257:2:1420
-3258:2:1431
-3259:2:1436
-3260:2:1437
-3261:0:4365
-3262:2:1449
-3263:0:4365
-3264:3:3042
-3265:0:4365
-3266:2:1451
-3267:0:4365
-3268:3:3043
-3269:0:4365
-3270:2:1652
-3271:0:4365
-3272:2:1653
-3273:0:4365
-3274:2:1657
-3275:0:4365
-3276:2:1180
-3277:0:4365
-3278:3:3042
-3279:0:4365
-3280:2:1181
-3281:2:1185
-3282:2:1186
-3283:2:1194
-3284:2:1195
-3285:2:1199
-3286:2:1200
-3287:2:1194
-3288:2:1195
-3289:2:1196
-3290:2:1208
-3291:2:1213
-3292:2:1217
-3293:2:1218
-3294:2:1225
-3295:2:1226
-3296:2:1237
-3297:2:1238
-3298:2:1239
-3299:2:1237
-3300:2:1238
-3301:2:1239
-3302:2:1250
-3303:2:1255
-3304:2:1256
-3305:0:4365
-3306:3:3043
-3307:0:4365
-3308:2:1268
-3309:0:4365
-3310:3:3042
-3311:0:4365
-3312:2:1270
-3313:0:4365
-3314:3:3043
-3315:0:4365
-3316:2:1271
-3317:2:1275
-3318:2:1276
-3319:2:1284
-3320:2:1285
-3321:2:1289
-3322:2:1290
-3323:2:1284
-3324:2:1285
-3325:2:1289
-3326:2:1290
-3327:2:1298
-3328:2:1303
-3329:2:1307
-3330:2:1308
-3331:2:1315
-3332:2:1316
-3333:2:1327
-3334:2:1328
-3335:2:1329
-3336:2:1327
-3337:2:1328
-3338:2:1329
-3339:2:1340
-3340:2:1345
-3341:2:1346
-3342:0:4365
-3343:2:1358
-3344:0:4365
-3345:2:1454
-3346:0:4365
-3347:3:3042
-3348:0:4365
-3349:2:1455
-3350:0:4365
-3351:3:3043
-3352:0:4365
-3353:2:1652
-3354:0:4365
-3355:2:1653
-3356:0:4365
-3357:2:1657
-3358:0:4365
-3359:2:1660
-3360:0:4365
-3361:3:3042
-3362:0:4365
-3363:2:1665
-3364:2:1669
-3365:2:1670
-3366:2:1678
-3367:2:1679
-3368:2:1683
-3369:2:1684
-3370:2:1678
-3371:2:1679
-3372:2:1680
-3373:2:1692
-3374:2:1697
-3375:2:1701
-3376:2:1702
-3377:2:1709
-3378:2:1710
-3379:2:1721
-3380:2:1722
-3381:2:1723
-3382:2:1721
-3383:2:1722
-3384:2:1723
-3385:2:1734
-3386:2:1739
-3387:2:1740
-3388:0:4365
-3389:3:3043
-3390:0:4365
-3391:2:1752
-3392:0:4365
-3393:3:3042
-3394:0:4365
-3395:2:1754
-3396:0:4365
-3397:3:3043
-3398:0:4365
-3399:2:1755
-3400:2:1759
-3401:2:1760
-3402:2:1768
-3403:2:1769
-3404:2:1773
-3405:2:1774
-3406:2:1768
-3407:2:1769
-3408:2:1773
-3409:2:1774
-3410:2:1782
-3411:2:1787
-3412:2:1791
-3413:2:1792
-3414:2:1799
-3415:2:1800
-3416:2:1811
-3417:2:1812
-3418:2:1813
-3419:2:1811
-3420:2:1812
-3421:2:1813
-3422:2:1824
-3423:2:1829
-3424:2:1830
-3425:0:4365
-3426:2:1842
-3427:0:4365
-3428:3:3042
-3429:0:4365
-3430:2:1844
-3431:0:4365
-3432:3:3043
-3433:0:4365
-3434:2:1845
-3435:2:1849
-3436:2:1850
-3437:2:1858
-3438:2:1859
-3439:2:1863
-3440:2:1864
-3441:2:1858
-3442:2:1859
-3443:2:1863
-3444:2:1864
-3445:2:1872
-3446:2:1877
-3447:2:1881
-3448:2:1882
-3449:2:1889
-3450:2:1890
-3451:2:1901
-3452:2:1902
-3453:2:1903
-3454:2:1901
-3455:2:1902
-3456:2:1903
-3457:2:1914
-3458:2:1919
-3459:2:1920
-3460:0:4365
-3461:2:1932
-3462:0:4365
-3463:3:3042
-3464:0:4365
-3465:2:1934
-3466:0:4365
-3467:3:3043
-3468:0:4365
-3469:2:1935
-3470:0:4365
-3471:2:1936
-3472:0:4365
-3473:2:2129
-3474:0:4365
-3475:2:2130
-3476:0:4365
-3477:2:2134
-3478:0:4365
-3479:3:3042
-3480:0:4365
-3481:2:2136
-3482:0:4365
-3483:3:3043
-3484:0:4365
-3485:2:2137
-3486:2:2141
-3487:2:2142
-3488:2:2150
-3489:2:2151
-3490:2:2155
-3491:2:2156
-3492:2:2150
-3493:2:2151
-3494:2:2155
-3495:2:2156
-3496:2:2164
-3497:2:2169
-3498:2:2173
-3499:2:2174
-3500:2:2181
-3501:2:2182
-3502:2:2193
-3503:2:2194
-3504:2:2195
-3505:2:2193
-3506:2:2194
-3507:2:2195
-3508:2:2206
-3509:2:2211
-3510:2:2212
-3511:0:4365
-3512:2:2224
-3513:0:4365
-3514:3:3042
-3515:0:4365
-3516:2:2226
-3517:0:4365
-3518:3:3043
-3519:0:4365
-3520:2:1936
-3521:0:4365
-3522:2:2129
-3523:0:4365
-3524:2:2130
-3525:0:4365
-3526:2:2134
-3527:0:4365
-3528:3:3042
-3529:0:4365
-3530:2:2136
-3531:0:4365
-3532:3:3043
-3533:0:4365
-3534:2:2137
-3535:2:2141
-3536:2:2142
-3537:2:2150
-3538:2:2151
-3539:2:2155
-3540:2:2156
-3541:2:2150
-3542:2:2151
-3543:2:2152
-3544:2:2164
-3545:2:2169
-3546:2:2173
-3547:2:2174
-3548:2:2181
-3549:2:2182
-3550:2:2193
-3551:2:2194
-3552:2:2195
-3553:2:2193
-3554:2:2194
-3555:2:2195
-3556:2:2206
-3557:2:2211
-3558:2:2212
-3559:0:4365
-3560:2:2224
-3561:0:4365
-3562:3:3042
-3563:0:4365
-3564:2:2226
-3565:0:4365
-3566:3:3043
-3567:0:4365
-3568:2:2230
-3569:0:4365
-3570:3:3042
-3571:0:4365
-3572:2:2235
-3573:2:2239
-3574:2:2240
-3575:2:2248
-3576:2:2249
-3577:2:2253
-3578:2:2254
-3579:2:2248
-3580:2:2249
-3581:2:2250
-3582:2:2262
-3583:2:2267
-3584:2:2271
-3585:2:2272
-3586:2:2279
-3587:2:2280
-3588:2:2291
-3589:2:2292
-3590:2:2293
-3591:2:2291
-3592:2:2292
-3593:2:2293
-3594:2:2304
-3595:2:2309
-3596:2:2310
-3597:0:4365
-3598:3:3043
-3599:0:4365
-3600:2:2322
-3601:0:4365
-3602:2:1169
-3603:0:4365
-3604:3:3042
-3605:0:4365
-3606:2:1170
-3607:0:4365
-3608:3:3043
-3609:0:4365
-3610:3:3044
-3611:0:4365
-3612:3:3257
-3613:0:4365
-3614:3:3362
-3615:0:4365
-3616:3:3363
-3617:0:4365
-3618:3:3367
-3619:0:4365
-3620:3:3373
-3621:3:3377
-3622:3:3378
-3623:3:3386
-3624:3:3387
-3625:3:3391
-3626:3:3392
-3627:3:3386
-3628:3:3387
-3629:3:3391
-3630:3:3392
-3631:3:3400
-3632:3:3405
-3633:3:3409
-3634:3:3410
-3635:3:3417
-3636:3:3418
-3637:3:3429
-3638:3:3430
-3639:3:3431
-3640:3:3429
-3641:3:3430
-3642:3:3431
-3643:3:3442
-3644:3:3447
-3645:3:3448
-3646:0:4365
-3647:3:3460
-3648:0:4365
-3649:3:3461
-3650:0:4365
-3651:2:1173
-3652:0:4365
-3653:3:3462
-3654:0:4365
-3655:2:1179
-3656:0:4365
-3657:2:1180
-3658:0:4365
-3659:3:3461
-3660:0:4365
-3661:2:1181
-3662:2:1185
-3663:2:1186
-3664:2:1194
-3665:2:1195
-3666:2:1199
-3667:2:1200
-3668:2:1194
-3669:2:1195
-3670:2:1199
-3671:2:1200
-3672:2:1208
-3673:2:1213
-3674:2:1217
-3675:2:1218
-3676:2:1225
-3677:2:1226
-3678:2:1237
-3679:2:1238
-3680:2:1239
-3681:2:1237
-3682:2:1238
-3683:2:1239
-3684:2:1250
-3685:2:1255
-3686:2:1256
-3687:0:4365
-3688:3:3462
-3689:0:4365
-3690:2:1268
-3691:0:4365
-3692:3:3461
-3693:0:4365
-3694:2:1270
-3695:0:4365
-3696:3:3462
-3697:0:4365
-3698:2:1271
-3699:2:1275
-3700:2:1276
-3701:2:1284
-3702:2:1285
-3703:2:1289
-3704:2:1290
-3705:2:1284
-3706:2:1285
-3707:2:1289
-3708:2:1290
-3709:2:1298
-3710:2:1303
-3711:2:1307
-3712:2:1308
-3713:2:1315
-3714:2:1316
-3715:2:1327
-3716:2:1328
-3717:2:1329
-3718:2:1327
-3719:2:1328
-3720:2:1329
-3721:2:1340
-3722:2:1345
-3723:2:1346
-3724:0:4365
-3725:2:1358
-3726:0:4365
-3727:2:1360
-3728:0:4365
-3729:3:3461
-3730:0:4365
-3731:2:1361
-3732:0:4365
-3733:3:3462
-3734:0:4365
-3735:2:1362
-3736:2:1366
-3737:2:1367
-3738:2:1375
-3739:2:1376
-3740:2:1380
-3741:2:1381
-3742:2:1375
-3743:2:1376
-3744:2:1380
-3745:2:1381
-3746:2:1389
-3747:2:1394
-3748:2:1398
-3749:2:1399
-3750:2:1406
-3751:2:1407
-3752:2:1418
-3753:2:1419
-3754:2:1420
-3755:2:1418
-3756:2:1419
-3757:2:1420
-3758:2:1431
-3759:2:1436
-3760:2:1437
-3761:0:4365
-3762:2:1449
-3763:0:4365
-3764:3:3461
-3765:0:4365
-3766:2:1451
-3767:0:4365
-3768:3:3462
-3769:0:4365
-3770:2:1652
-3771:0:4365
-3772:2:1653
-3773:0:4365
-3774:2:1657
-3775:0:4365
-3776:2:1180
-3777:0:4365
-3778:3:3461
-3779:0:4365
-3780:2:1181
-3781:2:1185
-3782:2:1186
-3783:2:1194
-3784:2:1195
-3785:2:1199
-3786:2:1200
-3787:2:1194
-3788:2:1195
-3789:2:1196
-3790:2:1208
-3791:2:1213
-3792:2:1217
-3793:2:1218
-3794:2:1225
-3795:2:1226
-3796:2:1237
-3797:2:1238
-3798:2:1239
-3799:2:1237
-3800:2:1238
-3801:2:1239
-3802:2:1250
-3803:2:1255
-3804:2:1256
-3805:0:4365
-3806:3:3462
-3807:0:4365
-3808:2:1268
-3809:0:4365
-3810:3:3461
-3811:0:4365
-3812:2:1270
-3813:0:4365
-3814:3:3462
-3815:0:4365
-3816:2:1271
-3817:2:1275
-3818:2:1276
-3819:2:1284
-3820:2:1285
-3821:2:1289
-3822:2:1290
-3823:2:1284
-3824:2:1285
-3825:2:1289
-3826:2:1290
-3827:2:1298
-3828:2:1303
-3829:2:1307
-3830:2:1308
-3831:2:1315
-3832:2:1316
-3833:2:1327
-3834:2:1328
-3835:2:1329
-3836:2:1327
-3837:2:1328
-3838:2:1329
-3839:2:1340
-3840:2:1345
-3841:2:1346
-3842:0:4365
-3843:2:1358
-3844:0:4365
-3845:2:1454
-3846:0:4365
-3847:3:3461
-3848:0:4365
-3849:2:1455
-3850:0:4365
-3851:3:3462
-3852:0:4365
-3853:2:1652
-3854:0:4365
-3855:2:1653
-3856:0:4365
-3857:2:1657
-3858:0:4365
-3859:2:1660
-3860:0:4365
-3861:3:3461
-3862:0:4365
-3863:2:1665
-3864:2:1669
-3865:2:1670
-3866:2:1678
-3867:2:1679
-3868:2:1683
-3869:2:1684
-3870:2:1678
-3871:2:1679
-3872:2:1680
-3873:2:1692
-3874:2:1697
-3875:2:1701
-3876:2:1702
-3877:2:1709
-3878:2:1710
-3879:2:1721
-3880:2:1722
-3881:2:1723
-3882:2:1721
-3883:2:1722
-3884:2:1723
-3885:2:1734
-3886:2:1739
-3887:2:1740
-3888:0:4365
-3889:3:3462
-3890:0:4365
-3891:2:1752
-3892:0:4365
-3893:3:3461
-3894:0:4365
-3895:2:1754
-3896:0:4365
-3897:3:3462
-3898:0:4365
-3899:2:1755
-3900:2:1759
-3901:2:1760
-3902:2:1768
-3903:2:1769
-3904:2:1773
-3905:2:1774
-3906:2:1768
-3907:2:1769
-3908:2:1773
-3909:2:1774
-3910:2:1782
-3911:2:1787
-3912:2:1791
-3913:2:1792
-3914:2:1799
-3915:2:1800
-3916:2:1811
-3917:2:1812
-3918:2:1813
-3919:2:1811
-3920:2:1812
-3921:2:1813
-3922:2:1824
-3923:2:1829
-3924:2:1830
-3925:0:4365
-3926:2:1842
-3927:0:4365
-3928:3:3461
-3929:0:4365
-3930:2:1844
-3931:0:4365
-3932:3:3462
-3933:0:4365
-3934:2:1845
-3935:2:1849
-3936:2:1850
-3937:2:1858
-3938:2:1859
-3939:2:1863
-3940:2:1864
-3941:2:1858
-3942:2:1859
-3943:2:1863
-3944:2:1864
-3945:2:1872
-3946:2:1877
-3947:2:1881
-3948:2:1882
-3949:2:1889
-3950:2:1890
-3951:2:1901
-3952:2:1902
-3953:2:1903
-3954:2:1901
-3955:2:1902
-3956:2:1903
-3957:2:1914
-3958:2:1919
-3959:2:1920
-3960:0:4365
-3961:2:1932
-3962:0:4365
-3963:3:3461
-3964:0:4365
-3965:2:1934
-3966:0:4365
-3967:3:3462
-3968:0:4365
-3969:2:1935
-3970:0:4365
-3971:2:1936
-3972:0:4365
-3973:2:2129
-3974:0:4365
-3975:2:2130
-3976:0:4365
-3977:2:2134
-3978:0:4365
-3979:3:3461
-3980:0:4365
-3981:2:2136
-3982:0:4365
-3983:3:3462
-3984:0:4365
-3985:2:2137
-3986:2:2141
-3987:2:2142
-3988:2:2150
-3989:2:2151
-3990:2:2155
-3991:2:2156
-3992:2:2150
-3993:2:2151
-3994:2:2155
-3995:2:2156
-3996:2:2164
-3997:2:2169
-3998:2:2173
-3999:2:2174
-4000:2:2181
-4001:2:2182
-4002:2:2193
-4003:2:2194
-4004:2:2195
-4005:2:2193
-4006:2:2194
-4007:2:2195
-4008:2:2206
-4009:2:2211
-4010:2:2212
-4011:0:4365
-4012:2:2224
-4013:0:4365
-4014:3:3461
-4015:0:4365
-4016:2:2226
-4017:0:4365
-4018:3:3462
-4019:0:4365
-4020:2:1936
-4021:0:4365
-4022:2:2129
-4023:0:4365
-4024:2:2130
-4025:0:4365
-4026:2:2134
-4027:0:4365
-4028:3:3461
-4029:0:4365
-4030:2:2136
-4031:0:4365
-4032:3:3462
-4033:0:4365
-4034:2:2137
-4035:2:2141
-4036:2:2142
-4037:2:2150
-4038:2:2151
-4039:2:2155
-4040:2:2156
-4041:2:2150
-4042:2:2151
-4043:2:2152
-4044:2:2164
-4045:2:2169
-4046:2:2173
-4047:2:2174
-4048:2:2181
-4049:2:2182
-4050:2:2193
-4051:2:2194
-4052:2:2195
-4053:2:2193
-4054:2:2194
-4055:2:2195
-4056:2:2206
-4057:2:2211
-4058:2:2212
-4059:0:4365
-4060:2:2224
-4061:0:4365
-4062:3:3461
-4063:0:4365
-4064:2:2226
-4065:0:4365
-4066:3:3462
-4067:0:4365
-4068:2:2230
-4069:0:4365
-4070:3:3461
-4071:0:4365
-4072:2:2235
-4073:2:2239
-4074:2:2240
-4075:2:2248
-4076:2:2249
-4077:2:2253
-4078:2:2254
-4079:2:2248
-4080:2:2249
-4081:2:2250
-4082:2:2262
-4083:2:2267
-4084:2:2271
-4085:2:2272
-4086:2:2279
-4087:2:2280
-4088:2:2291
-4089:2:2292
-4090:2:2293
-4091:2:2291
-4092:2:2292
-4093:2:2293
-4094:2:2304
-4095:2:2309
-4096:2:2310
-4097:0:4365
-4098:3:3462
-4099:0:4365
-4100:2:2322
-4101:0:4365
-4102:2:1169
-4103:0:4365
-4104:3:3461
-4105:0:4365
-4106:2:1170
-4107:0:4365
-4108:3:3462
-4109:0:4365
-4110:3:3463
-4111:0:4365
-4112:3:3469
-4113:0:4365
-4114:3:3470
-4115:3:3474
-4116:3:3475
-4117:3:3483
-4118:3:3484
-4119:3:3488
-4120:3:3489
-4121:3:3483
-4122:3:3484
-4123:3:3488
-4124:3:3489
-4125:3:3497
-4126:3:3502
-4127:3:3506
-4128:3:3507
-4129:3:3514
-4130:3:3515
-4131:3:3526
-4132:3:3527
-4133:3:3528
-4134:3:3526
-4135:3:3527
-4136:3:3528
-4137:3:3539
-4138:3:3544
-4139:3:3545
-4140:0:4365
-4141:3:3557
-4142:0:4365
-4143:3:3558
-4144:0:4365
-4145:2:1173
-4146:0:4365
-4147:3:3559
-4148:0:4365
-4149:2:1179
-4150:0:4365
-4151:2:1180
-4152:0:4365
-4153:3:3558
-4154:0:4365
-4155:2:1181
-4156:2:1185
-4157:2:1186
-4158:2:1194
-4159:2:1195
-4160:2:1199
-4161:2:1200
-4162:2:1194
-4163:2:1195
-4164:2:1199
-4165:2:1200
-4166:2:1208
-4167:2:1213
-4168:2:1217
-4169:2:1218
-4170:2:1225
-4171:2:1226
-4172:2:1237
-4173:2:1238
-4174:2:1239
-4175:2:1237
-4176:2:1238
-4177:2:1239
-4178:2:1250
-4179:2:1255
-4180:2:1256
-4181:0:4365
-4182:3:3559
-4183:0:4365
-4184:2:1268
-4185:0:4365
-4186:3:3558
-4187:0:4365
-4188:2:1270
-4189:0:4365
-4190:3:3559
-4191:0:4365
-4192:2:1271
-4193:2:1275
-4194:2:1276
-4195:2:1284
-4196:2:1285
-4197:2:1289
-4198:2:1290
-4199:2:1284
-4200:2:1285
-4201:2:1289
-4202:2:1290
-4203:2:1298
-4204:2:1303
-4205:2:1307
-4206:2:1308
-4207:2:1315
-4208:2:1316
-4209:2:1327
-4210:2:1328
-4211:2:1329
-4212:2:1327
-4213:2:1328
-4214:2:1329
-4215:2:1340
-4216:2:1345
-4217:2:1346
-4218:0:4365
-4219:2:1358
-4220:0:4365
-4221:2:1360
-4222:0:4365
-4223:3:3558
-4224:0:4365
-4225:2:1361
-4226:0:4365
-4227:3:3559
-4228:0:4365
-4229:2:1362
-4230:2:1366
-4231:2:1367
-4232:2:1375
-4233:2:1376
-4234:2:1380
-4235:2:1381
-4236:2:1375
-4237:2:1376
-4238:2:1380
-4239:2:1381
-4240:2:1389
-4241:2:1394
-4242:2:1398
-4243:2:1399
-4244:2:1406
-4245:2:1407
-4246:2:1418
-4247:2:1419
-4248:2:1420
-4249:2:1418
-4250:2:1419
-4251:2:1420
-4252:2:1431
-4253:2:1436
-4254:2:1437
-4255:0:4365
-4256:2:1449
-4257:0:4365
-4258:3:3558
-4259:0:4365
-4260:2:1451
-4261:0:4365
-4262:3:3559
-4263:0:4365
-4264:2:1652
-4265:0:4365
-4266:2:1653
-4267:0:4365
-4268:2:1657
-4269:0:4365
-4270:2:1180
-4271:0:4365
-4272:3:3558
-4273:0:4365
-4274:2:1181
-4275:2:1185
-4276:2:1186
-4277:2:1194
-4278:2:1195
-4279:2:1199
-4280:2:1200
-4281:2:1194
-4282:2:1195
-4283:2:1196
-4284:2:1208
-4285:2:1213
-4286:2:1217
-4287:2:1218
-4288:2:1225
-4289:2:1226
-4290:2:1237
-4291:2:1238
-4292:2:1239
-4293:2:1237
-4294:2:1238
-4295:2:1239
-4296:2:1250
-4297:2:1255
-4298:2:1256
-4299:0:4365
-4300:3:3559
-4301:0:4365
-4302:2:1268
-4303:0:4365
-4304:3:3558
-4305:0:4365
-4306:2:1270
-4307:0:4365
-4308:3:3559
-4309:0:4365
-4310:2:1271
-4311:2:1275
-4312:2:1276
-4313:2:1284
-4314:2:1285
-4315:2:1289
-4316:2:1290
-4317:2:1284
-4318:2:1285
-4319:2:1289
-4320:2:1290
-4321:2:1298
-4322:2:1303
-4323:2:1307
-4324:2:1308
-4325:2:1315
-4326:2:1316
-4327:2:1327
-4328:2:1328
-4329:2:1329
-4330:2:1327
-4331:2:1328
-4332:2:1329
-4333:2:1340
-4334:2:1345
-4335:2:1346
-4336:0:4365
-4337:2:1358
-4338:0:4365
-4339:2:1454
-4340:0:4365
-4341:3:3558
-4342:0:4365
-4343:2:1455
-4344:0:4365
-4345:3:3559
-4346:0:4365
-4347:2:1652
-4348:0:4365
-4349:2:1653
-4350:0:4365
-4351:2:1657
-4352:0:4365
-4353:2:1660
-4354:0:4365
-4355:3:3558
-4356:0:4365
-4357:2:1665
-4358:2:1669
-4359:2:1670
-4360:2:1678
-4361:2:1679
-4362:2:1683
-4363:2:1684
-4364:2:1678
-4365:2:1679
-4366:2:1680
-4367:2:1692
-4368:2:1697
-4369:2:1701
-4370:2:1702
-4371:2:1709
-4372:2:1710
-4373:2:1721
-4374:2:1722
-4375:2:1723
-4376:2:1721
-4377:2:1722
-4378:2:1723
-4379:2:1734
-4380:2:1739
-4381:2:1740
-4382:0:4365
-4383:3:3559
-4384:0:4365
-4385:2:1752
-4386:0:4365
-4387:3:3558
-4388:0:4365
-4389:2:1754
-4390:0:4365
-4391:3:3559
-4392:0:4365
-4393:2:1755
-4394:2:1759
-4395:2:1760
-4396:2:1768
-4397:2:1769
-4398:2:1773
-4399:2:1774
-4400:2:1768
-4401:2:1769
-4402:2:1773
-4403:2:1774
-4404:2:1782
-4405:2:1787
-4406:2:1791
-4407:2:1792
-4408:2:1799
-4409:2:1800
-4410:2:1811
-4411:2:1812
-4412:2:1813
-4413:2:1811
-4414:2:1812
-4415:2:1813
-4416:2:1824
-4417:2:1829
-4418:2:1830
-4419:0:4365
-4420:2:1842
-4421:0:4365
-4422:3:3558
-4423:0:4365
-4424:2:1844
-4425:0:4365
-4426:3:3559
-4427:0:4365
-4428:2:1845
-4429:2:1849
-4430:2:1850
-4431:2:1858
-4432:2:1859
-4433:2:1863
-4434:2:1864
-4435:2:1858
-4436:2:1859
-4437:2:1863
-4438:2:1864
-4439:2:1872
-4440:2:1877
-4441:2:1881
-4442:2:1882
-4443:2:1889
-4444:2:1890
-4445:2:1901
-4446:2:1902
-4447:2:1903
-4448:2:1901
-4449:2:1902
-4450:2:1903
-4451:2:1914
-4452:2:1919
-4453:2:1920
-4454:0:4365
-4455:2:1932
-4456:0:4365
-4457:3:3558
-4458:0:4365
-4459:2:1934
-4460:0:4365
-4461:3:3559
-4462:0:4365
-4463:2:1935
-4464:0:4365
-4465:2:1936
-4466:0:4365
-4467:2:2129
-4468:0:4365
-4469:2:2130
-4470:0:4365
-4471:2:2134
-4472:0:4365
-4473:3:3558
-4474:0:4365
-4475:2:2136
-4476:0:4365
-4477:3:3559
-4478:0:4365
-4479:2:2137
-4480:2:2141
-4481:2:2142
-4482:2:2150
-4483:2:2151
-4484:2:2155
-4485:2:2156
-4486:2:2150
-4487:2:2151
-4488:2:2155
-4489:2:2156
-4490:2:2164
-4491:2:2169
-4492:2:2173
-4493:2:2174
-4494:2:2181
-4495:2:2182
-4496:2:2193
-4497:2:2194
-4498:2:2195
-4499:2:2193
-4500:2:2194
-4501:2:2195
-4502:2:2206
-4503:2:2211
-4504:2:2212
-4505:0:4365
-4506:2:2224
-4507:0:4365
-4508:3:3558
-4509:0:4365
-4510:2:2226
-4511:0:4365
-4512:3:3559
-4513:0:4365
-4514:2:1936
-4515:0:4365
-4516:2:2129
-4517:0:4365
-4518:2:2130
-4519:0:4365
-4520:2:2134
-4521:0:4365
-4522:3:3558
-4523:0:4365
-4524:2:2136
-4525:0:4365
-4526:3:3559
-4527:0:4365
-4528:2:2137
-4529:2:2141
-4530:2:2142
-4531:2:2150
-4532:2:2151
-4533:2:2155
-4534:2:2156
-4535:2:2150
-4536:2:2151
-4537:2:2152
-4538:2:2164
-4539:2:2169
-4540:2:2173
-4541:2:2174
-4542:2:2181
-4543:2:2182
-4544:2:2193
-4545:2:2194
-4546:2:2195
-4547:2:2193
-4548:2:2194
-4549:2:2195
-4550:2:2206
-4551:2:2211
-4552:2:2212
-4553:0:4365
-4554:2:2224
-4555:0:4365
-4556:3:3558
-4557:0:4365
-4558:2:2226
-4559:0:4365
-4560:3:3559
-4561:0:4365
-4562:2:2230
-4563:0:4365
-4564:3:3558
-4565:0:4365
-4566:2:2235
-4567:2:2239
-4568:2:2240
-4569:2:2248
-4570:2:2249
-4571:2:2253
-4572:2:2254
-4573:2:2248
-4574:2:2249
-4575:2:2250
-4576:2:2262
-4577:2:2267
-4578:2:2271
-4579:2:2272
-4580:2:2279
-4581:2:2280
-4582:2:2291
-4583:2:2292
-4584:2:2293
-4585:2:2291
-4586:2:2292
-4587:2:2293
-4588:2:2304
-4589:2:2309
-4590:2:2310
-4591:0:4365
-4592:3:3559
-4593:0:4365
-4594:2:2322
-4595:0:4365
-4596:2:1169
-4597:0:4365
-4598:3:3558
-4599:0:4365
-4600:2:1170
-4601:0:4365
-4602:3:3559
-4603:0:4365
-4604:3:3560
-4605:0:4365
-4606:3:3566
-4607:0:4365
-4608:3:3569
-4609:3:3570
-4610:3:3582
-4611:3:3583
-4612:3:3587
-4613:3:3588
-4614:3:3582
-4615:3:3583
-4616:3:3587
-4617:3:3588
-4618:3:3596
-4619:3:3601
-4620:3:3605
-4621:3:3606
-4622:3:3613
-4623:3:3614
-4624:3:3625
-4625:3:3626
-4626:3:3627
-4627:3:3625
-4628:3:3626
-4629:3:3627
-4630:3:3638
-4631:3:3643
-4632:3:3644
-4633:0:4365
-4634:3:3656
-4635:0:4365
-4636:3:3657
-4637:0:4365
-4638:2:1173
-4639:0:4365
-4640:3:3658
-4641:0:4365
-4642:2:1179
-4643:0:4365
-4644:2:1180
-4645:0:4365
-4646:3:3657
-4647:0:4365
-4648:2:1181
-4649:2:1185
-4650:2:1186
-4651:2:1194
-4652:2:1195
-4653:2:1199
-4654:2:1200
-4655:2:1194
-4656:2:1195
-4657:2:1199
-4658:2:1200
-4659:2:1208
-4660:2:1213
-4661:2:1217
-4662:2:1218
-4663:2:1225
-4664:2:1226
-4665:2:1237
-4666:2:1238
-4667:2:1239
-4668:2:1237
-4669:2:1238
-4670:2:1239
-4671:2:1250
-4672:2:1255
-4673:2:1256
-4674:0:4365
-4675:3:3658
-4676:0:4365
-4677:2:1268
-4678:0:4365
-4679:3:3657
-4680:0:4365
-4681:2:1270
-4682:0:4365
-4683:3:3658
-4684:0:4365
-4685:2:1271
-4686:2:1275
-4687:2:1276
-4688:2:1284
-4689:2:1285
-4690:2:1289
-4691:2:1290
-4692:2:1284
-4693:2:1285
-4694:2:1289
-4695:2:1290
-4696:2:1298
-4697:2:1303
-4698:2:1307
-4699:2:1308
-4700:2:1315
-4701:2:1316
-4702:2:1327
-4703:2:1328
-4704:2:1329
-4705:2:1327
-4706:2:1328
-4707:2:1329
-4708:2:1340
-4709:2:1345
-4710:2:1346
-4711:0:4365
-4712:2:1358
-4713:0:4365
-4714:2:1360
-4715:0:4365
-4716:3:3657
-4717:0:4365
-4718:2:1361
-4719:0:4365
-4720:3:3658
-4721:0:4365
-4722:2:1362
-4723:2:1366
-4724:2:1367
-4725:2:1375
-4726:2:1376
-4727:2:1380
-4728:2:1381
-4729:2:1375
-4730:2:1376
-4731:2:1380
-4732:2:1381
-4733:2:1389
-4734:2:1394
-4735:2:1398
-4736:2:1399
-4737:2:1406
-4738:2:1407
-4739:2:1418
-4740:2:1419
-4741:2:1420
-4742:2:1418
-4743:2:1419
-4744:2:1420
-4745:2:1431
-4746:2:1436
-4747:2:1437
-4748:0:4365
-4749:2:1449
-4750:0:4365
-4751:3:3657
-4752:0:4365
-4753:2:1451
-4754:0:4365
-4755:3:3658
-4756:0:4365
-4757:2:1652
-4758:0:4365
-4759:2:1653
-4760:0:4365
-4761:2:1657
-4762:0:4365
-4763:2:1180
-4764:0:4365
-4765:3:3657
-4766:0:4365
-4767:2:1181
-4768:2:1185
-4769:2:1186
-4770:2:1194
-4771:2:1195
-4772:2:1199
-4773:2:1200
-4774:2:1194
-4775:2:1195
-4776:2:1196
-4777:2:1208
-4778:2:1213
-4779:2:1217
-4780:2:1218
-4781:2:1225
-4782:2:1226
-4783:2:1237
-4784:2:1238
-4785:2:1239
-4786:2:1237
-4787:2:1238
-4788:2:1239
-4789:2:1250
-4790:2:1255
-4791:2:1256
-4792:0:4365
-4793:3:3658
-4794:0:4365
-4795:2:1268
-4796:0:4365
-4797:3:3657
-4798:0:4365
-4799:2:1270
-4800:0:4365
-4801:3:3658
-4802:0:4365
-4803:2:1271
-4804:2:1275
-4805:2:1276
-4806:2:1284
-4807:2:1285
-4808:2:1289
-4809:2:1290
-4810:2:1284
-4811:2:1285
-4812:2:1289
-4813:2:1290
-4814:2:1298
-4815:2:1303
-4816:2:1307
-4817:2:1308
-4818:2:1315
-4819:2:1316
-4820:2:1327
-4821:2:1328
-4822:2:1329
-4823:2:1327
-4824:2:1328
-4825:2:1329
-4826:2:1340
-4827:2:1345
-4828:2:1346
-4829:0:4365
-4830:2:1358
-4831:0:4365
-4832:2:1454
-4833:0:4365
-4834:3:3657
-4835:0:4365
-4836:2:1455
-4837:0:4365
-4838:3:3658
-4839:0:4365
-4840:2:1652
-4841:0:4365
-4842:2:1653
-4843:0:4365
-4844:2:1657
-4845:0:4365
-4846:2:1660
-4847:0:4365
-4848:3:3657
-4849:0:4365
-4850:2:1665
-4851:2:1669
-4852:2:1670
-4853:2:1678
-4854:2:1679
-4855:2:1683
-4856:2:1684
-4857:2:1678
-4858:2:1679
-4859:2:1680
-4860:2:1692
-4861:2:1697
-4862:2:1701
-4863:2:1702
-4864:2:1709
-4865:2:1710
-4866:2:1721
-4867:2:1722
-4868:2:1723
-4869:2:1721
-4870:2:1722
-4871:2:1723
-4872:2:1734
-4873:2:1739
-4874:2:1740
-4875:0:4365
-4876:3:3658
-4877:0:4365
-4878:2:1752
-4879:0:4365
-4880:3:3657
-4881:0:4365
-4882:2:1754
-4883:0:4365
-4884:3:3658
-4885:0:4365
-4886:2:1755
-4887:2:1759
-4888:2:1760
-4889:2:1768
-4890:2:1769
-4891:2:1773
-4892:2:1774
-4893:2:1768
-4894:2:1769
-4895:2:1773
-4896:2:1774
-4897:2:1782
-4898:2:1787
-4899:2:1791
-4900:2:1792
-4901:2:1799
-4902:2:1800
-4903:2:1811
-4904:2:1812
-4905:2:1813
-4906:2:1811
-4907:2:1812
-4908:2:1813
-4909:2:1824
-4910:2:1829
-4911:2:1830
-4912:0:4365
-4913:2:1842
-4914:0:4365
-4915:3:3657
-4916:0:4365
-4917:2:1844
-4918:0:4365
-4919:3:3658
-4920:0:4365
-4921:2:1845
-4922:2:1849
-4923:2:1850
-4924:2:1858
-4925:2:1859
-4926:2:1863
-4927:2:1864
-4928:2:1858
-4929:2:1859
-4930:2:1863
-4931:2:1864
-4932:2:1872
-4933:2:1877
-4934:2:1881
-4935:2:1882
-4936:2:1889
-4937:2:1890
-4938:2:1901
-4939:2:1902
-4940:2:1903
-4941:2:1901
-4942:2:1902
-4943:2:1903
-4944:2:1914
-4945:2:1919
-4946:2:1920
-4947:0:4365
-4948:2:1932
-4949:0:4365
-4950:3:3657
-4951:0:4365
-4952:2:1934
-4953:0:4365
-4954:3:3658
-4955:0:4365
-4956:2:1935
-4957:0:4365
-4958:2:1936
-4959:0:4365
-4960:2:2129
-4961:0:4365
-4962:2:2130
-4963:0:4365
-4964:2:2134
-4965:0:4365
-4966:3:3657
-4967:0:4365
-4968:2:2136
-4969:0:4365
-4970:3:3658
-4971:0:4365
-4972:2:2137
-4973:2:2141
-4974:2:2142
-4975:2:2150
-4976:2:2151
-4977:2:2155
-4978:2:2156
-4979:2:2150
-4980:2:2151
-4981:2:2155
-4982:2:2156
-4983:2:2164
-4984:2:2169
-4985:2:2173
-4986:2:2174
-4987:2:2181
-4988:2:2182
-4989:2:2193
-4990:2:2194
-4991:2:2195
-4992:2:2193
-4993:2:2194
-4994:2:2195
-4995:2:2206
-4996:2:2211
-4997:2:2212
-4998:0:4365
-4999:2:2224
-5000:0:4365
-5001:3:3657
-5002:0:4365
-5003:2:2226
-5004:0:4365
-5005:3:3658
-5006:0:4365
-5007:2:1936
-5008:0:4365
-5009:2:2129
-5010:0:4365
-5011:2:2130
-5012:0:4365
-5013:2:2134
-5014:0:4365
-5015:3:3657
-5016:0:4365
-5017:2:2136
-5018:0:4365
-5019:3:3658
-5020:0:4365
-5021:2:2137
-5022:2:2141
-5023:2:2142
-5024:2:2150
-5025:2:2151
-5026:2:2155
-5027:2:2156
-5028:2:2150
-5029:2:2151
-5030:2:2152
-5031:2:2164
-5032:2:2169
-5033:2:2173
-5034:2:2174
-5035:2:2181
-5036:2:2182
-5037:2:2193
-5038:2:2194
-5039:2:2195
-5040:2:2193
-5041:2:2194
-5042:2:2195
-5043:2:2206
-5044:2:2211
-5045:2:2212
-5046:0:4365
-5047:2:2224
-5048:0:4365
-5049:3:3657
-5050:0:4365
-5051:2:2226
-5052:0:4365
-5053:3:3658
-5054:0:4365
-5055:2:2230
-5056:0:4365
-5057:3:3657
-5058:0:4365
-5059:2:2235
-5060:2:2239
-5061:2:2240
-5062:2:2248
-5063:2:2249
-5064:2:2253
-5065:2:2254
-5066:2:2248
-5067:2:2249
-5068:2:2250
-5069:2:2262
-5070:2:2267
-5071:2:2271
-5072:2:2272
-5073:2:2279
-5074:2:2280
-5075:2:2291
-5076:2:2292
-5077:2:2293
-5078:2:2291
-5079:2:2292
-5080:2:2293
-5081:2:2304
-5082:2:2309
-5083:2:2310
-5084:0:4365
-5085:3:3658
-5086:0:4365
-5087:2:2322
-5088:0:4365
-5089:2:1169
-5090:0:4365
-5091:3:3657
-5092:0:4365
-5093:2:1170
-5094:0:4365
-5095:3:3658
-5096:0:4365
-5097:3:3659
-5098:0:4365
-5099:3:3665
-5100:0:4365
-5101:3:3666
-5102:0:4365
-5103:3:3667
-5104:0:4365
-5105:3:3668
-5106:0:4365
-5107:3:3669
-5108:3:3673
-5109:3:3674
-5110:3:3682
-5111:3:3683
-5112:3:3687
-5113:3:3688
-5114:3:3682
-5115:3:3683
-5116:3:3687
-5117:3:3688
-5118:3:3696
-5119:3:3701
-5120:3:3705
-5121:3:3706
-5122:3:3713
-5123:3:3714
-5124:3:3725
-5125:3:3726
-5126:3:3727
-5127:3:3725
-5128:3:3726
-5129:3:3727
-5130:3:3738
-5131:3:3743
-5132:3:3744
-5133:0:4365
-5134:3:3756
-5135:0:4365
-5136:3:3757
-5137:0:4365
-5138:2:1173
-5139:0:4365
-5140:3:3758
-5141:0:4365
-5142:2:1179
-5143:0:4365
-5144:2:1180
-5145:0:4365
-5146:3:3757
-5147:0:4365
-5148:2:1181
-5149:2:1185
-5150:2:1186
-5151:2:1194
-5152:2:1195
-5153:2:1199
-5154:2:1200
-5155:2:1194
-5156:2:1195
-5157:2:1199
-5158:2:1200
-5159:2:1208
-5160:2:1213
-5161:2:1217
-5162:2:1218
-5163:2:1225
-5164:2:1226
-5165:2:1237
-5166:2:1238
-5167:2:1239
-5168:2:1237
-5169:2:1238
-5170:2:1239
-5171:2:1250
-5172:2:1255
-5173:2:1256
-5174:0:4365
-5175:3:3758
-5176:0:4365
-5177:2:1268
-5178:0:4365
-5179:3:3757
-5180:0:4365
-5181:2:1270
-5182:0:4365
-5183:3:3758
-5184:0:4365
-5185:2:1271
-5186:2:1275
-5187:2:1276
-5188:2:1284
-5189:2:1285
-5190:2:1289
-5191:2:1290
-5192:2:1284
-5193:2:1285
-5194:2:1289
-5195:2:1290
-5196:2:1298
-5197:2:1303
-5198:2:1307
-5199:2:1308
-5200:2:1315
-5201:2:1316
-5202:2:1327
-5203:2:1328
-5204:2:1329
-5205:2:1327
-5206:2:1328
-5207:2:1329
-5208:2:1340
-5209:2:1345
-5210:2:1346
-5211:0:4365
-5212:2:1358
-5213:0:4365
-5214:2:1360
-5215:0:4365
-5216:3:3757
-5217:0:4365
-5218:2:1361
-5219:0:4365
-5220:3:3758
-5221:0:4365
-5222:2:1362
-5223:2:1366
-5224:2:1367
-5225:2:1375
-5226:2:1376
-5227:2:1380
-5228:2:1381
-5229:2:1375
-5230:2:1376
-5231:2:1380
-5232:2:1381
-5233:2:1389
-5234:2:1394
-5235:2:1398
-5236:2:1399
-5237:2:1406
-5238:2:1407
-5239:2:1418
-5240:2:1419
-5241:2:1420
-5242:2:1418
-5243:2:1419
-5244:2:1420
-5245:2:1431
-5246:2:1436
-5247:2:1437
-5248:0:4365
-5249:2:1449
-5250:0:4365
-5251:3:3757
-5252:0:4365
-5253:2:1451
-5254:0:4365
-5255:3:3758
-5256:0:4365
-5257:2:1652
-5258:0:4365
-5259:2:1653
-5260:0:4365
-5261:2:1657
-5262:0:4365
-5263:2:1180
-5264:0:4365
-5265:3:3757
-5266:0:4365
-5267:2:1181
-5268:2:1185
-5269:2:1186
-5270:2:1194
-5271:2:1195
-5272:2:1199
-5273:2:1200
-5274:2:1194
-5275:2:1195
-5276:2:1196
-5277:2:1208
-5278:2:1213
-5279:2:1217
-5280:2:1218
-5281:2:1225
-5282:2:1226
-5283:2:1237
-5284:2:1238
-5285:2:1239
-5286:2:1237
-5287:2:1238
-5288:2:1239
-5289:2:1250
-5290:2:1255
-5291:2:1256
-5292:0:4365
-5293:3:3758
-5294:0:4365
-5295:2:1268
-5296:0:4365
-5297:3:3757
-5298:0:4365
-5299:2:1270
-5300:0:4365
-5301:3:3758
-5302:0:4365
-5303:2:1271
-5304:2:1275
-5305:2:1276
-5306:2:1284
-5307:2:1285
-5308:2:1289
-5309:2:1290
-5310:2:1284
-5311:2:1285
-5312:2:1289
-5313:2:1290
-5314:2:1298
-5315:2:1303
-5316:2:1307
-5317:2:1308
-5318:2:1315
-5319:2:1316
-5320:2:1327
-5321:2:1328
-5322:2:1329
-5323:2:1327
-5324:2:1328
-5325:2:1329
-5326:2:1340
-5327:2:1345
-5328:2:1346
-5329:0:4365
-5330:2:1358
-5331:0:4365
-5332:2:1454
-5333:0:4365
-5334:3:3757
-5335:0:4365
-5336:2:1455
-5337:0:4365
-5338:3:3758
-5339:0:4365
-5340:2:1652
-5341:0:4365
-5342:2:1653
-5343:0:4365
-5344:2:1657
-5345:0:4365
-5346:2:1660
-5347:0:4365
-5348:3:3757
-5349:0:4365
-5350:2:1665
-5351:2:1669
-5352:2:1670
-5353:2:1678
-5354:2:1679
-5355:2:1683
-5356:2:1684
-5357:2:1678
-5358:2:1679
-5359:2:1680
-5360:2:1692
-5361:2:1697
-5362:2:1701
-5363:2:1702
-5364:2:1709
-5365:2:1710
-5366:2:1721
-5367:2:1722
-5368:2:1723
-5369:2:1721
-5370:2:1722
-5371:2:1723
-5372:2:1734
-5373:2:1739
-5374:2:1740
-5375:0:4365
-5376:3:3758
-5377:0:4365
-5378:2:1752
-5379:0:4365
-5380:3:3757
-5381:0:4365
-5382:2:1754
-5383:0:4365
-5384:3:3758
-5385:0:4365
-5386:2:1755
-5387:2:1759
-5388:2:1760
-5389:2:1768
-5390:2:1769
-5391:2:1773
-5392:2:1774
-5393:2:1768
-5394:2:1769
-5395:2:1773
-5396:2:1774
-5397:2:1782
-5398:2:1787
-5399:2:1791
-5400:2:1792
-5401:2:1799
-5402:2:1800
-5403:2:1811
-5404:2:1812
-5405:2:1813
-5406:2:1811
-5407:2:1812
-5408:2:1813
-5409:2:1824
-5410:2:1829
-5411:2:1830
-5412:0:4365
-5413:2:1842
-5414:0:4365
-5415:3:3757
-5416:0:4365
-5417:2:1844
-5418:0:4365
-5419:3:3758
-5420:0:4365
-5421:2:1845
-5422:2:1849
-5423:2:1850
-5424:2:1858
-5425:2:1859
-5426:2:1863
-5427:2:1864
-5428:2:1858
-5429:2:1859
-5430:2:1863
-5431:2:1864
-5432:2:1872
-5433:2:1877
-5434:2:1881
-5435:2:1882
-5436:2:1889
-5437:2:1890
-5438:2:1901
-5439:2:1902
-5440:2:1903
-5441:2:1901
-5442:2:1902
-5443:2:1903
-5444:2:1914
-5445:2:1919
-5446:2:1920
-5447:0:4365
-5448:2:1932
-5449:0:4365
-5450:3:3757
-5451:0:4365
-5452:2:1934
-5453:0:4365
-5454:3:3758
-5455:0:4365
-5456:2:1935
-5457:0:4365
-5458:2:1936
-5459:0:4365
-5460:2:2129
-5461:0:4365
-5462:2:2130
-5463:0:4365
-5464:2:2134
-5465:0:4365
-5466:3:3757
-5467:0:4365
-5468:2:2136
-5469:0:4365
-5470:3:3758
-5471:0:4365
-5472:2:2137
-5473:2:2141
-5474:2:2142
-5475:2:2150
-5476:2:2151
-5477:2:2155
-5478:2:2156
-5479:2:2150
-5480:2:2151
-5481:2:2155
-5482:2:2156
-5483:2:2164
-5484:2:2169
-5485:2:2173
-5486:2:2174
-5487:2:2181
-5488:2:2182
-5489:2:2193
-5490:2:2194
-5491:2:2195
-5492:2:2193
-5493:2:2194
-5494:2:2195
-5495:2:2206
-5496:2:2211
-5497:2:2212
-5498:0:4365
-5499:2:2224
-5500:0:4365
-5501:3:3757
-5502:0:4365
-5503:2:2226
-5504:0:4365
-5505:3:3758
-5506:0:4365
-5507:2:1936
-5508:0:4365
-5509:2:2129
-5510:0:4365
-5511:2:2130
-5512:0:4365
-5513:2:2134
-5514:0:4365
-5515:3:3757
-5516:0:4365
-5517:2:2136
-5518:0:4365
-5519:3:3758
-5520:0:4365
-5521:2:2137
-5522:2:2141
-5523:2:2142
-5524:2:2150
-5525:2:2151
-5526:2:2155
-5527:2:2156
-5528:2:2150
-5529:2:2151
-5530:2:2152
-5531:2:2164
-5532:2:2169
-5533:2:2173
-5534:2:2174
-5535:2:2181
-5536:2:2182
-5537:2:2193
-5538:2:2194
-5539:2:2195
-5540:2:2193
-5541:2:2194
-5542:2:2195
-5543:2:2206
-5544:2:2211
-5545:2:2212
-5546:0:4365
-5547:2:2224
-5548:0:4365
-5549:3:3757
-5550:0:4365
-5551:2:2226
-5552:0:4365
-5553:3:3758
-5554:0:4365
-5555:2:2230
-5556:0:4365
-5557:3:3757
-5558:0:4365
-5559:2:2235
-5560:2:2239
-5561:2:2240
-5562:2:2248
-5563:2:2249
-5564:2:2253
-5565:2:2254
-5566:2:2248
-5567:2:2249
-5568:2:2250
-5569:2:2262
-5570:2:2267
-5571:2:2271
-5572:2:2272
-5573:2:2279
-5574:2:2280
-5575:2:2291
-5576:2:2292
-5577:2:2293
-5578:2:2291
-5579:2:2292
-5580:2:2293
-5581:2:2304
-5582:2:2309
-5583:2:2310
-5584:0:4365
-5585:3:3758
-5586:0:4365
-5587:2:2322
-5588:0:4365
-5589:2:1169
-5590:0:4365
-5591:3:3757
-5592:0:4365
-5593:2:1170
-5594:0:4365
-5595:3:3758
-5596:0:4365
-5597:3:3759
-5598:0:4365
-5599:3:3972
-5600:0:4365
-5601:3:3980
-5602:0:4365
-5603:3:3981
-5604:3:3985
-5605:3:3986
-5606:3:3994
-5607:3:3995
-5608:3:3999
-5609:3:4000
-5610:3:3994
-5611:3:3995
-5612:3:3999
-5613:3:4000
-5614:3:4008
-5615:3:4013
-5616:3:4017
-5617:3:4018
-5618:3:4025
-5619:3:4026
-5620:3:4037
-5621:3:4038
-5622:3:4039
-5623:3:4037
-5624:3:4038
-5625:3:4039
-5626:3:4050
-5627:3:4055
-5628:3:4056
-5629:0:4365
-5630:3:4068
-5631:0:4365
-5632:3:4069
-5633:0:4365
-5634:2:1173
-5635:0:4365
-5636:3:4070
-5637:0:4365
-5638:2:1179
-5639:0:4365
-5640:2:1180
-5641:0:4365
-5642:3:4069
-5643:0:4365
-5644:2:1181
-5645:2:1185
-5646:2:1186
-5647:2:1194
-5648:2:1195
-5649:2:1199
-5650:2:1200
-5651:2:1194
-5652:2:1195
-5653:2:1199
-5654:2:1200
-5655:2:1208
-5656:2:1213
-5657:2:1217
-5658:2:1218
-5659:2:1225
-5660:2:1226
-5661:2:1237
-5662:2:1238
-5663:2:1239
-5664:2:1237
-5665:2:1238
-5666:2:1239
-5667:2:1250
-5668:2:1255
-5669:2:1256
-5670:0:4365
-5671:3:4070
-5672:0:4365
-5673:2:1268
-5674:0:4365
-5675:3:4069
-5676:0:4365
-5677:2:1270
-5678:0:4365
-5679:3:4070
-5680:0:4365
-5681:2:1271
-5682:2:1275
-5683:2:1276
-5684:2:1284
-5685:2:1285
-5686:2:1289
-5687:2:1290
-5688:2:1284
-5689:2:1285
-5690:2:1289
-5691:2:1290
-5692:2:1298
-5693:2:1303
-5694:2:1307
-5695:2:1308
-5696:2:1315
-5697:2:1316
-5698:2:1327
-5699:2:1328
-5700:2:1329
-5701:2:1327
-5702:2:1328
-5703:2:1329
-5704:2:1340
-5705:2:1345
-5706:2:1346
-5707:0:4365
-5708:2:1358
-5709:0:4365
-5710:2:1360
-5711:0:4365
-5712:3:4069
-5713:0:4365
-5714:2:1361
-5715:0:4365
-5716:3:4070
-5717:0:4365
-5718:2:1362
-5719:2:1366
-5720:2:1367
-5721:2:1375
-5722:2:1376
-5723:2:1380
-5724:2:1381
-5725:2:1375
-5726:2:1376
-5727:2:1380
-5728:2:1381
-5729:2:1389
-5730:2:1394
-5731:2:1398
-5732:2:1399
-5733:2:1406
-5734:2:1407
-5735:2:1418
-5736:2:1419
-5737:2:1420
-5738:2:1418
-5739:2:1419
-5740:2:1420
-5741:2:1431
-5742:2:1436
-5743:2:1437
-5744:0:4365
-5745:2:1449
-5746:0:4365
-5747:3:4069
-5748:0:4365
-5749:2:1451
-5750:0:4365
-5751:3:4070
-5752:0:4365
-5753:2:1652
-5754:0:4365
-5755:2:1653
-5756:0:4365
-5757:2:1657
-5758:0:4365
-5759:2:1180
-5760:0:4365
-5761:3:4069
-5762:0:4365
-5763:2:1181
-5764:2:1185
-5765:2:1186
-5766:2:1194
-5767:2:1195
-5768:2:1199
-5769:2:1200
-5770:2:1194
-5771:2:1195
-5772:2:1196
-5773:2:1208
-5774:2:1213
-5775:2:1217
-5776:2:1218
-5777:2:1225
-5778:2:1226
-5779:2:1237
-5780:2:1238
-5781:2:1239
-5782:2:1237
-5783:2:1238
-5784:2:1239
-5785:2:1250
-5786:2:1255
-5787:2:1256
-5788:0:4365
-5789:3:4070
-5790:0:4365
-5791:2:1268
-5792:0:4365
-5793:3:4069
-5794:0:4365
-5795:2:1270
-5796:0:4365
-5797:3:4070
-5798:0:4365
-5799:2:1271
-5800:2:1275
-5801:2:1276
-5802:2:1284
-5803:2:1285
-5804:2:1289
-5805:2:1290
-5806:2:1284
-5807:2:1285
-5808:2:1289
-5809:2:1290
-5810:2:1298
-5811:2:1303
-5812:2:1307
-5813:2:1308
-5814:2:1315
-5815:2:1316
-5816:2:1327
-5817:2:1328
-5818:2:1329
-5819:2:1327
-5820:2:1328
-5821:2:1329
-5822:2:1340
-5823:2:1345
-5824:2:1346
-5825:0:4365
-5826:2:1358
-5827:0:4365
-5828:2:1454
-5829:0:4365
-5830:3:4069
-5831:0:4365
-5832:2:1455
-5833:0:4365
-5834:3:4070
-5835:0:4365
-5836:2:1652
-5837:0:4365
-5838:2:1653
-5839:0:4365
-5840:2:1657
-5841:0:4365
-5842:2:1660
-5843:0:4365
-5844:3:4069
-5845:0:4365
-5846:2:1665
-5847:2:1669
-5848:2:1670
-5849:2:1678
-5850:2:1679
-5851:2:1683
-5852:2:1684
-5853:2:1678
-5854:2:1679
-5855:2:1680
-5856:2:1692
-5857:2:1697
-5858:2:1701
-5859:2:1702
-5860:2:1709
-5861:2:1710
-5862:2:1721
-5863:2:1722
-5864:2:1723
-5865:2:1721
-5866:2:1722
-5867:2:1723
-5868:2:1734
-5869:2:1739
-5870:2:1740
-5871:0:4365
-5872:3:4070
-5873:0:4365
-5874:2:1752
-5875:0:4365
-5876:3:4069
-5877:0:4365
-5878:2:1754
-5879:0:4365
-5880:3:4070
-5881:0:4365
-5882:2:1755
-5883:2:1759
-5884:2:1760
-5885:2:1768
-5886:2:1769
-5887:2:1773
-5888:2:1774
-5889:2:1768
-5890:2:1769
-5891:2:1773
-5892:2:1774
-5893:2:1782
-5894:2:1787
-5895:2:1791
-5896:2:1792
-5897:2:1799
-5898:2:1800
-5899:2:1811
-5900:2:1812
-5901:2:1813
-5902:2:1811
-5903:2:1812
-5904:2:1813
-5905:2:1824
-5906:2:1829
-5907:2:1830
-5908:0:4365
-5909:2:1842
-5910:0:4365
-5911:3:4069
-5912:0:4365
-5913:2:1844
-5914:0:4365
-5915:3:4070
-5916:0:4365
-5917:2:1845
-5918:2:1849
-5919:2:1850
-5920:2:1858
-5921:2:1859
-5922:2:1863
-5923:2:1864
-5924:2:1858
-5925:2:1859
-5926:2:1863
-5927:2:1864
-5928:2:1872
-5929:2:1877
-5930:2:1881
-5931:2:1882
-5932:2:1889
-5933:2:1890
-5934:2:1901
-5935:2:1902
-5936:2:1903
-5937:2:1901
-5938:2:1902
-5939:2:1903
-5940:2:1914
-5941:2:1919
-5942:2:1920
-5943:0:4365
-5944:2:1932
-5945:0:4365
-5946:3:4069
-5947:0:4365
-5948:2:1934
-5949:0:4365
-5950:3:4070
-5951:0:4365
-5952:2:1935
-5953:0:4365
-5954:2:1936
-5955:0:4365
-5956:2:2129
-5957:0:4365
-5958:2:2130
-5959:0:4365
-5960:2:2134
-5961:0:4365
-5962:3:4069
-5963:0:4365
-5964:2:2136
-5965:0:4365
-5966:3:4070
-5967:0:4365
-5968:2:2137
-5969:2:2141
-5970:2:2142
-5971:2:2150
-5972:2:2151
-5973:2:2155
-5974:2:2156
-5975:2:2150
-5976:2:2151
-5977:2:2155
-5978:2:2156
-5979:2:2164
-5980:2:2169
-5981:2:2173
-5982:2:2174
-5983:2:2181
-5984:2:2182
-5985:2:2193
-5986:2:2194
-5987:2:2195
-5988:2:2193
-5989:2:2194
-5990:2:2195
-5991:2:2206
-5992:2:2211
-5993:2:2212
-5994:0:4365
-5995:2:2224
-5996:0:4365
-5997:3:4069
-5998:0:4365
-5999:2:2226
-6000:0:4365
-6001:3:4070
-6002:0:4365
-6003:2:1936
-6004:0:4365
-6005:2:2129
-6006:0:4365
-6007:2:2130
-6008:0:4365
-6009:2:2134
-6010:0:4365
-6011:3:4069
-6012:0:4365
-6013:2:2136
-6014:0:4365
-6015:3:4070
-6016:0:4365
-6017:2:2137
-6018:2:2141
-6019:2:2142
-6020:2:2150
-6021:2:2151
-6022:2:2155
-6023:2:2156
-6024:2:2150
-6025:2:2151
-6026:2:2152
-6027:2:2164
-6028:2:2169
-6029:2:2173
-6030:2:2174
-6031:2:2181
-6032:2:2182
-6033:2:2193
-6034:2:2194
-6035:2:2195
-6036:2:2193
-6037:2:2194
-6038:2:2195
-6039:2:2206
-6040:2:2211
-6041:2:2212
-6042:0:4365
-6043:2:2224
-6044:0:4365
-6045:3:4069
-6046:0:4365
-6047:2:2226
-6048:0:4365
-6049:3:4070
-6050:0:4365
-6051:2:2230
-6052:0:4365
-6053:3:4069
-6054:0:4365
-6055:2:2235
-6056:2:2239
-6057:2:2240
-6058:2:2248
-6059:2:2249
-6060:2:2253
-6061:2:2254
-6062:2:2248
-6063:2:2249
-6064:2:2250
-6065:2:2262
-6066:2:2267
-6067:2:2271
-6068:2:2272
-6069:2:2279
-6070:2:2280
-6071:2:2291
-6072:2:2292
-6073:2:2293
-6074:2:2291
-6075:2:2292
-6076:2:2293
-6077:2:2304
-6078:2:2309
-6079:2:2310
-6080:0:4365
-6081:3:4070
-6082:0:4365
-6083:2:2322
-6084:0:4365
-6085:2:1169
-6086:0:4365
-6087:3:4069
-6088:0:4365
-6089:2:1170
-6090:0:4365
-6091:3:4070
-6092:0:4365
-6093:3:4071
-6094:0:4365
-6095:3:4081
-6096:0:4365
-6097:3:3666
-6098:0:4365
-6099:3:3667
-6100:0:4365
-6101:3:3668
-6102:0:4365
-6103:3:3669
-6104:3:3673
-6105:3:3674
-6106:3:3682
-6107:3:3683
-6108:3:3687
-6109:3:3688
-6110:3:3682
-6111:3:3683
-6112:3:3687
-6113:3:3688
-6114:3:3696
-6115:3:3701
-6116:3:3705
-6117:3:3706
-6118:3:3713
-6119:3:3714
-6120:3:3725
-6121:3:3726
-6122:3:3727
-6123:3:3725
-6124:3:3726
-6125:3:3727
-6126:3:3738
-6127:3:3743
-6128:3:3744
-6129:0:4365
-6130:3:3756
-6131:0:4365
-6132:3:3757
-6133:0:4365
-6134:2:1173
-6135:0:4365
-6136:3:3758
-6137:0:4365
-6138:2:1179
-6139:0:4365
-6140:2:1180
-6141:0:4365
-6142:3:3757
-6143:0:4365
-6144:2:1181
-6145:2:1185
-6146:2:1186
-6147:2:1194
-6148:2:1195
-6149:2:1199
-6150:2:1200
-6151:2:1194
-6152:2:1195
-6153:2:1199
-6154:2:1200
-6155:2:1208
-6156:2:1213
-6157:2:1217
-6158:2:1218
-6159:2:1225
-6160:2:1226
-6161:2:1237
-6162:2:1238
-6163:2:1239
-6164:2:1237
-6165:2:1238
-6166:2:1239
-6167:2:1250
-6168:2:1255
-6169:2:1256
-6170:0:4365
-6171:3:3758
-6172:0:4365
-6173:2:1268
-6174:0:4365
-6175:3:3757
-6176:0:4365
-6177:2:1270
-6178:0:4365
-6179:3:3758
-6180:0:4365
-6181:2:1271
-6182:2:1275
-6183:2:1276
-6184:2:1284
-6185:2:1285
-6186:2:1289
-6187:2:1290
-6188:2:1284
-6189:2:1285
-6190:2:1289
-6191:2:1290
-6192:2:1298
-6193:2:1303
-6194:2:1307
-6195:2:1308
-6196:2:1315
-6197:2:1316
-6198:2:1327
-6199:2:1328
-6200:2:1329
-6201:2:1327
-6202:2:1328
-6203:2:1329
-6204:2:1340
-6205:2:1345
-6206:2:1346
-6207:0:4365
-6208:2:1358
-6209:0:4365
-6210:2:1360
-6211:0:4365
-6212:3:3757
-6213:0:4365
-6214:2:1361
-6215:0:4365
-6216:3:3758
-6217:0:4365
-6218:2:1362
-6219:2:1366
-6220:2:1367
-6221:2:1375
-6222:2:1376
-6223:2:1380
-6224:2:1381
-6225:2:1375
-6226:2:1376
-6227:2:1380
-6228:2:1381
-6229:2:1389
-6230:2:1394
-6231:2:1398
-6232:2:1399
-6233:2:1406
-6234:2:1407
-6235:2:1418
-6236:2:1419
-6237:2:1420
-6238:2:1418
-6239:2:1419
-6240:2:1420
-6241:2:1431
-6242:2:1436
-6243:2:1437
-6244:0:4365
-6245:2:1449
-6246:0:4365
-6247:3:3757
-6248:0:4365
-6249:2:1451
-6250:0:4365
-6251:3:3758
-6252:0:4365
-6253:2:1652
-6254:0:4365
-6255:2:1653
-6256:0:4365
-6257:2:1657
-6258:0:4365
-6259:2:1180
-6260:0:4365
-6261:3:3757
-6262:0:4365
-6263:2:1181
-6264:2:1185
-6265:2:1186
-6266:2:1194
-6267:2:1195
-6268:2:1199
-6269:2:1200
-6270:2:1194
-6271:2:1195
-6272:2:1196
-6273:2:1208
-6274:2:1213
-6275:2:1217
-6276:2:1218
-6277:2:1225
-6278:2:1226
-6279:2:1237
-6280:2:1238
-6281:2:1239
-6282:2:1237
-6283:2:1238
-6284:2:1239
-6285:2:1250
-6286:2:1255
-6287:2:1256
-6288:0:4365
-6289:3:3758
-6290:0:4365
-6291:2:1268
-6292:0:4365
-6293:3:3757
-6294:0:4365
-6295:2:1270
-6296:0:4365
-6297:3:3758
-6298:0:4365
-6299:2:1271
-6300:2:1275
-6301:2:1276
-6302:2:1284
-6303:2:1285
-6304:2:1289
-6305:2:1290
-6306:2:1284
-6307:2:1285
-6308:2:1289
-6309:2:1290
-6310:2:1298
-6311:2:1303
-6312:2:1307
-6313:2:1308
-6314:2:1315
-6315:2:1316
-6316:2:1327
-6317:2:1328
-6318:2:1329
-6319:2:1327
-6320:2:1328
-6321:2:1329
-6322:2:1340
-6323:2:1345
-6324:2:1346
-6325:0:4365
-6326:2:1358
-6327:0:4365
-6328:2:1454
-6329:0:4365
-6330:3:3757
-6331:0:4365
-6332:2:1455
-6333:0:4365
-6334:3:3758
-6335:0:4365
-6336:2:1652
-6337:0:4365
-6338:2:1653
-6339:0:4365
-6340:2:1657
-6341:0:4365
-6342:2:1660
-6343:0:4365
-6344:3:3757
-6345:0:4365
-6346:2:1665
-6347:2:1669
-6348:2:1670
-6349:2:1678
-6350:2:1679
-6351:2:1683
-6352:2:1684
-6353:2:1678
-6354:2:1679
-6355:2:1680
-6356:2:1692
-6357:2:1697
-6358:2:1701
-6359:2:1702
-6360:2:1709
-6361:2:1710
-6362:2:1721
-6363:2:1722
-6364:2:1723
-6365:2:1721
-6366:2:1722
-6367:2:1723
-6368:2:1734
-6369:2:1739
-6370:2:1740
-6371:0:4365
-6372:3:3758
-6373:0:4365
-6374:2:1752
-6375:0:4365
-6376:3:3757
-6377:0:4365
-6378:2:1754
-6379:0:4365
-6380:3:3758
-6381:0:4365
-6382:2:1755
-6383:2:1759
-6384:2:1760
-6385:2:1768
-6386:2:1769
-6387:2:1773
-6388:2:1774
-6389:2:1768
-6390:2:1769
-6391:2:1773
-6392:2:1774
-6393:2:1782
-6394:2:1787
-6395:2:1791
-6396:2:1792
-6397:2:1799
-6398:2:1800
-6399:2:1811
-6400:2:1812
-6401:2:1813
-6402:2:1811
-6403:2:1812
-6404:2:1813
-6405:2:1824
-6406:2:1829
-6407:2:1830
-6408:0:4365
-6409:2:1842
-6410:0:4365
-6411:3:3757
-6412:0:4365
-6413:2:1844
-6414:0:4365
-6415:3:3758
-6416:0:4365
-6417:2:1845
-6418:2:1849
-6419:2:1850
-6420:2:1858
-6421:2:1859
-6422:2:1863
-6423:2:1864
-6424:2:1858
-6425:2:1859
-6426:2:1863
-6427:2:1864
-6428:2:1872
-6429:2:1877
-6430:2:1881
-6431:2:1882
-6432:2:1889
-6433:2:1890
-6434:2:1901
-6435:2:1902
-6436:2:1903
-6437:2:1901
-6438:2:1902
-6439:2:1903
-6440:2:1914
-6441:2:1919
-6442:2:1920
-6443:0:4365
-6444:2:1932
-6445:0:4365
-6446:3:3757
-6447:0:4365
-6448:2:1934
-6449:0:4365
-6450:3:3758
-6451:0:4365
-6452:2:1935
-6453:0:4365
-6454:2:1936
-6455:0:4365
-6456:2:2129
-6457:0:4365
-6458:2:2130
-6459:0:4365
-6460:2:2134
-6461:0:4365
-6462:3:3757
-6463:0:4365
-6464:2:2136
-6465:0:4365
-6466:3:3758
-6467:0:4365
-6468:2:2137
-6469:2:2141
-6470:2:2142
-6471:2:2150
-6472:2:2151
-6473:2:2155
-6474:2:2156
-6475:2:2150
-6476:2:2151
-6477:2:2155
-6478:2:2156
-6479:2:2164
-6480:2:2169
-6481:2:2173
-6482:2:2174
-6483:2:2181
-6484:2:2182
-6485:2:2193
-6486:2:2194
-6487:2:2195
-6488:2:2193
-6489:2:2194
-6490:2:2195
-6491:2:2206
-6492:2:2211
-6493:2:2212
-6494:0:4365
-6495:2:2224
-6496:0:4365
-6497:3:3757
-6498:0:4365
-6499:2:2226
-6500:0:4365
-6501:3:3758
-6502:0:4365
-6503:2:1936
-6504:0:4365
-6505:2:2129
-6506:0:4365
-6507:2:2130
-6508:0:4365
-6509:2:2134
-6510:0:4365
-6511:3:3757
-6512:0:4365
-6513:2:2136
-6514:0:4365
-6515:3:3758
-6516:0:4365
-6517:2:2137
-6518:2:2141
-6519:2:2142
-6520:2:2150
-6521:2:2151
-6522:2:2155
-6523:2:2156
-6524:2:2150
-6525:2:2151
-6526:2:2152
-6527:2:2164
-6528:2:2169
-6529:2:2173
-6530:2:2174
-6531:2:2181
-6532:2:2182
-6533:2:2193
-6534:2:2194
-6535:2:2195
-6536:2:2193
-6537:2:2194
-6538:2:2195
-6539:2:2206
-6540:2:2211
-6541:2:2212
-6542:0:4365
-6543:2:2224
-6544:0:4365
-6545:3:3757
-6546:0:4365
-6547:2:2226
-6548:0:4365
-6549:3:3758
-6550:0:4365
-6551:2:2230
-6552:0:4365
-6553:3:3757
-6554:0:4365
-6555:2:2235
-6556:2:2239
-6557:2:2240
-6558:2:2248
-6559:2:2249
-6560:2:2253
-6561:2:2254
-6562:2:2248
-6563:2:2249
-6564:2:2250
-6565:2:2262
-6566:2:2267
-6567:2:2271
-6568:2:2272
-6569:2:2279
-6570:2:2280
-6571:2:2291
-6572:2:2292
-6573:2:2293
-6574:2:2291
-6575:2:2292
-6576:2:2293
-6577:2:2304
-6578:2:2309
-6579:2:2310
-6580:0:4365
-6581:3:3758
-6582:0:4365
-6583:2:2322
-6584:0:4365
-6585:2:1169
-6586:0:4365
-6587:3:3757
-6588:0:4365
-6589:2:1170
-6590:0:4365
-6591:3:3758
-6592:0:4365
-6593:3:3759
-6594:0:4365
-6595:3:3972
-6596:0:4365
-6597:3:4077
-6598:0:4365
-6599:3:4078
-6600:0:4365
-6601:3:4082
-6602:0:4365
-6603:3:4088
-6604:0:4365
-6605:3:4092
-6606:3:4093
-6607:3:4097
-6608:3:4101
-6609:3:4102
-6610:3:4097
-6611:3:4101
-6612:3:4102
-6613:3:4106
-6614:3:4114
-6615:3:4115
-6616:3:4120
-6617:3:4127
-6618:3:4128
-6619:3:4127
-6620:3:4128
-6621:3:4135
-6622:3:4140
-6623:0:4365
-6624:3:4151
-6625:0:4365
-6626:3:4155
-6627:3:4156
-6628:3:4160
-6629:3:4164
-6630:3:4165
-6631:3:4160
-6632:3:4164
-6633:3:4165
-6634:3:4169
-6635:3:4177
-6636:3:4178
-6637:3:4183
-6638:3:4190
-6639:3:4191
-6640:3:4190
-6641:3:4191
-6642:3:4198
-6643:3:4203
-6644:0:4365
-6645:3:4151
-6646:0:4365
-6647:3:4155
-6648:3:4156
-6649:3:4160
-6650:3:4164
-6651:3:4165
-6652:3:4160
-6653:3:4164
-6654:3:4165
-6655:3:4169
-6656:3:4177
-6657:3:4178
-6658:3:4183
-6659:3:4190
-6660:3:4191
-6661:3:4190
-6662:3:4191
-6663:3:4198
-6664:3:4203
-6665:0:4365
-6666:3:4214
-6667:0:4365
-6668:3:4222
-6669:3:4223
-6670:3:4227
-6671:3:4231
-6672:3:4232
-6673:3:4227
-6674:3:4231
-6675:3:4232
-6676:3:4236
-6677:3:4244
-6678:3:4245
-6679:3:4250
-6680:3:4257
-6681:3:4258
-6682:3:4257
-6683:3:4258
-6684:3:4265
-6685:3:4270
-6686:0:4365
-6687:3:4285
-6688:0:4365
-6689:3:4286
-6690:0:4365
-6691:2:1173
-6692:0:4365
-6693:3:4287
-6694:0:4365
-6695:2:1179
-6696:0:4365
-6697:2:1180
-6698:0:4365
-6699:3:4286
-6700:0:4365
-6701:2:1181
-6702:2:1185
-6703:2:1186
-6704:2:1194
-6705:2:1195
-6706:2:1199
-6707:2:1200
-6708:2:1194
-6709:2:1195
-6710:2:1199
-6711:2:1200
-6712:2:1208
-6713:2:1213
-6714:2:1217
-6715:2:1218
-6716:2:1225
-6717:2:1226
-6718:2:1237
-6719:2:1238
-6720:2:1239
-6721:2:1237
-6722:2:1238
-6723:2:1239
-6724:2:1250
-6725:2:1255
-6726:2:1256
-6727:0:4365
-6728:3:4287
-6729:0:4365
-6730:2:1268
-6731:0:4365
-6732:3:4286
-6733:0:4365
-6734:2:1270
-6735:0:4365
-6736:3:4287
-6737:0:4365
-6738:2:1271
-6739:2:1275
-6740:2:1276
-6741:2:1284
-6742:2:1285
-6743:2:1289
-6744:2:1290
-6745:2:1284
-6746:2:1285
-6747:2:1289
-6748:2:1290
-6749:2:1298
-6750:2:1303
-6751:2:1307
-6752:2:1308
-6753:2:1315
-6754:2:1316
-6755:2:1327
-6756:2:1328
-6757:2:1329
-6758:2:1327
-6759:2:1328
-6760:2:1329
-6761:2:1340
-6762:2:1345
-6763:2:1346
-6764:0:4365
-6765:2:1358
-6766:0:4365
-6767:2:1360
-6768:0:4365
-6769:3:4286
-6770:0:4365
-6771:2:1361
-6772:0:4365
-6773:3:4287
-6774:0:4365
-6775:2:1362
-6776:2:1366
-6777:2:1367
-6778:2:1375
-6779:2:1376
-6780:2:1380
-6781:2:1381
-6782:2:1375
-6783:2:1376
-6784:2:1380
-6785:2:1381
-6786:2:1389
-6787:2:1394
-6788:2:1398
-6789:2:1399
-6790:2:1406
-6791:2:1407
-6792:2:1418
-6793:2:1419
-6794:2:1420
-6795:2:1418
-6796:2:1419
-6797:2:1420
-6798:2:1431
-6799:2:1436
-6800:2:1437
-6801:0:4365
-6802:2:1449
-6803:0:4365
-6804:3:4286
-6805:0:4365
-6806:2:1451
-6807:0:4365
-6808:3:4287
-6809:0:4365
-6810:2:1652
-6811:0:4365
-6812:2:1653
-6813:0:4365
-6814:2:1657
-6815:0:4365
-6816:2:1180
-6817:0:4365
-6818:3:4286
-6819:0:4365
-6820:2:1181
-6821:2:1185
-6822:2:1186
-6823:2:1194
-6824:2:1195
-6825:2:1199
-6826:2:1200
-6827:2:1194
-6828:2:1195
-6829:2:1196
-6830:2:1208
-6831:2:1213
-6832:2:1217
-6833:2:1218
-6834:2:1225
-6835:2:1226
-6836:2:1237
-6837:2:1238
-6838:2:1239
-6839:2:1237
-6840:2:1238
-6841:2:1239
-6842:2:1250
-6843:2:1255
-6844:2:1256
-6845:0:4365
-6846:3:4287
-6847:0:4365
-6848:2:1268
-6849:0:4365
-6850:3:4286
-6851:0:4365
-6852:2:1270
-6853:0:4365
-6854:3:4287
-6855:0:4365
-6856:2:1271
-6857:2:1275
-6858:2:1276
-6859:2:1284
-6860:2:1285
-6861:2:1289
-6862:2:1290
-6863:2:1284
-6864:2:1285
-6865:2:1289
-6866:2:1290
-6867:2:1298
-6868:2:1303
-6869:2:1307
-6870:2:1308
-6871:2:1315
-6872:2:1316
-6873:2:1327
-6874:2:1328
-6875:2:1329
-6876:2:1327
-6877:2:1328
-6878:2:1329
-6879:2:1340
-6880:2:1345
-6881:2:1346
-6882:0:4365
-6883:2:1358
-6884:0:4365
-6885:2:1454
-6886:0:4365
-6887:3:4286
-6888:0:4365
-6889:2:1455
-6890:0:4365
-6891:3:4287
-6892:0:4365
-6893:2:1652
-6894:0:4365
-6895:2:1653
-6896:0:4365
-6897:2:1657
-6898:0:4365
-6899:2:1660
-6900:0:4365
-6901:3:4286
-6902:0:4365
-6903:2:1665
-6904:2:1669
-6905:2:1670
-6906:2:1678
-6907:2:1679
-6908:2:1683
-6909:2:1684
-6910:2:1678
-6911:2:1679
-6912:2:1680
-6913:2:1692
-6914:2:1697
-6915:2:1701
-6916:2:1702
-6917:2:1709
-6918:2:1710
-6919:2:1721
-6920:2:1722
-6921:2:1723
-6922:2:1721
-6923:2:1722
-6924:2:1723
-6925:2:1734
-6926:2:1739
-6927:2:1740
-6928:0:4365
-6929:3:4287
-6930:0:4365
-6931:2:1752
-6932:0:4365
-6933:3:4286
-6934:0:4365
-6935:2:1754
-6936:0:4365
-6937:3:4287
-6938:0:4365
-6939:2:1755
-6940:2:1759
-6941:2:1760
-6942:2:1768
-6943:2:1769
-6944:2:1773
-6945:2:1774
-6946:2:1768
-6947:2:1769
-6948:2:1773
-6949:2:1774
-6950:2:1782
-6951:2:1787
-6952:2:1791
-6953:2:1792
-6954:2:1799
-6955:2:1800
-6956:2:1811
-6957:2:1812
-6958:2:1813
-6959:2:1811
-6960:2:1812
-6961:2:1813
-6962:2:1824
-6963:2:1829
-6964:2:1830
-6965:0:4365
-6966:2:1842
-6967:0:4365
-6968:3:4286
-6969:0:4365
-6970:2:1844
-6971:0:4365
-6972:3:4287
-6973:0:4365
-6974:2:1845
-6975:2:1849
-6976:2:1850
-6977:2:1858
-6978:2:1859
-6979:2:1863
-6980:2:1864
-6981:2:1858
-6982:2:1859
-6983:2:1863
-6984:2:1864
-6985:2:1872
-6986:2:1877
-6987:2:1881
-6988:2:1882
-6989:2:1889
-6990:2:1890
-6991:2:1901
-6992:2:1902
-6993:2:1903
-6994:2:1901
-6995:2:1902
-6996:2:1903
-6997:2:1914
-6998:2:1919
-6999:2:1920
-7000:0:4365
-7001:2:1932
-7002:0:4365
-7003:3:4286
-7004:0:4365
-7005:2:1934
-7006:0:4365
-7007:3:4287
-7008:0:4365
-7009:2:1935
-7010:0:4365
-7011:2:1936
-7012:0:4365
-7013:2:2129
-7014:0:4365
-7015:2:2130
-7016:0:4365
-7017:2:2134
-7018:0:4365
-7019:3:4286
-7020:0:4365
-7021:2:2136
-7022:0:4365
-7023:3:4287
-7024:0:4365
-7025:2:2137
-7026:2:2141
-7027:2:2142
-7028:2:2150
-7029:2:2151
-7030:2:2155
-7031:2:2156
-7032:2:2150
-7033:2:2151
-7034:2:2155
-7035:2:2156
-7036:2:2164
-7037:2:2169
-7038:2:2173
-7039:2:2174
-7040:2:2181
-7041:2:2182
-7042:2:2193
-7043:2:2194
-7044:2:2195
-7045:2:2193
-7046:2:2194
-7047:2:2195
-7048:2:2206
-7049:2:2211
-7050:2:2212
-7051:0:4365
-7052:2:2224
-7053:0:4365
-7054:3:4286
-7055:0:4365
-7056:2:2226
-7057:0:4365
-7058:3:4287
-7059:0:4365
-7060:2:1936
-7061:0:4365
-7062:2:2129
-7063:0:4365
-7064:2:2130
-7065:0:4365
-7066:2:2134
-7067:0:4365
-7068:3:4286
-7069:0:4365
-7070:2:2136
-7071:0:4365
-7072:3:4287
-7073:0:4365
-7074:2:2137
-7075:2:2141
-7076:2:2142
-7077:2:2150
-7078:2:2151
-7079:2:2155
-7080:2:2156
-7081:2:2150
-7082:2:2151
-7083:2:2152
-7084:2:2164
-7085:2:2169
-7086:2:2173
-7087:2:2174
-7088:2:2181
-7089:2:2182
-7090:2:2193
-7091:2:2194
-7092:2:2195
-7093:2:2193
-7094:2:2194
-7095:2:2195
-7096:2:2206
-7097:2:2211
-7098:2:2212
-7099:0:4365
-7100:2:2224
-7101:0:4365
-7102:3:4286
-7103:0:4365
-7104:2:2226
-7105:0:4365
-7106:3:4287
-7107:0:4365
-7108:2:2230
-7109:0:4365
-7110:3:4286
-7111:0:4365
-7112:2:2235
-7113:2:2239
-7114:2:2240
-7115:2:2248
-7116:2:2249
-7117:2:2253
-7118:2:2254
-7119:2:2248
-7120:2:2249
-7121:2:2250
-7122:2:2262
-7123:2:2267
-7124:2:2271
-7125:2:2272
-7126:2:2279
-7127:2:2280
-7128:2:2291
-7129:2:2292
-7130:2:2293
-7131:2:2291
-7132:2:2292
-7133:2:2293
-7134:2:2304
-7135:2:2309
-7136:2:2310
-7137:0:4365
-7138:3:4287
-7139:0:4365
-7140:2:2322
-7141:0:4365
-7142:2:1169
-7143:0:4365
-7144:3:4286
-7145:0:4365
-7146:2:1170
-7147:0:4365
-7148:3:4287
-7149:0:4365
-7150:3:4288
-7151:0:4365
-7152:3:4294
-7153:0:4365
-7154:3:4295
-7155:0:4365
-7156:3:2338
-7157:0:4365
-7158:3:2339
-7159:3:2343
-7160:3:2344
-7161:3:2352
-7162:3:2353
-7163:3:2357
-7164:3:2358
-7165:3:2352
-7166:3:2353
-7167:3:2357
-7168:3:2358
-7169:3:2366
-7170:3:2371
-7171:3:2375
-7172:3:2376
-7173:3:2383
-7174:3:2384
-7175:3:2395
-7176:3:2396
-7177:3:2397
-7178:3:2395
-7179:3:2396
-7180:3:2397
-7181:3:2408
-7182:3:2413
-7183:3:2414
-7184:0:4365
-7185:3:2426
-7186:0:4365
-7187:3:2427
-7188:0:4365
-7189:2:1173
-7190:0:4365
-7191:3:2428
-7192:0:4365
-7193:2:1179
-7194:0:4365
-7195:2:1180
-7196:0:4365
-7197:3:2427
-7198:0:4365
-7199:2:1181
-7200:2:1185
-7201:2:1186
-7202:2:1194
-7203:2:1195
-7204:2:1199
-7205:2:1200
-7206:2:1194
-7207:2:1195
-7208:2:1199
-7209:2:1200
-7210:2:1208
-7211:2:1213
-7212:2:1217
-7213:2:1218
-7214:2:1225
-7215:2:1226
-7216:2:1237
-7217:2:1238
-7218:2:1239
-7219:2:1237
-7220:2:1238
-7221:2:1239
-7222:2:1250
-7223:2:1255
-7224:2:1256
-7225:0:4365
-7226:3:2428
-7227:0:4365
-7228:2:1268
-7229:0:4365
-7230:3:2427
-7231:0:4365
-7232:2:1270
-7233:0:4365
-7234:3:2428
-7235:0:4365
-7236:2:1271
-7237:2:1275
-7238:2:1276
-7239:2:1284
-7240:2:1285
-7241:2:1289
-7242:2:1290
-7243:2:1284
-7244:2:1285
-7245:2:1289
-7246:2:1290
-7247:2:1298
-7248:2:1303
-7249:2:1307
-7250:2:1308
-7251:2:1315
-7252:2:1316
-7253:2:1327
-7254:2:1328
-7255:2:1329
-7256:2:1327
-7257:2:1328
-7258:2:1329
-7259:2:1340
-7260:2:1345
-7261:2:1346
-7262:0:4365
-7263:2:1358
-7264:0:4365
-7265:2:1360
-7266:0:4365
-7267:3:2427
-7268:0:4365
-7269:2:1361
-7270:0:4365
-7271:3:2428
-7272:0:4365
-7273:2:1362
-7274:2:1366
-7275:2:1367
-7276:2:1375
-7277:2:1376
-7278:2:1380
-7279:2:1381
-7280:2:1375
-7281:2:1376
-7282:2:1380
-7283:2:1381
-7284:2:1389
-7285:2:1394
-7286:2:1398
-7287:2:1399
-7288:2:1406
-7289:2:1407
-7290:2:1418
-7291:2:1419
-7292:2:1420
-7293:2:1418
-7294:2:1419
-7295:2:1420
-7296:2:1431
-7297:2:1436
-7298:2:1437
-7299:0:4365
-7300:2:1449
-7301:0:4365
-7302:3:2427
-7303:0:4365
-7304:2:1451
-7305:0:4365
-7306:3:2428
-7307:0:4365
-7308:2:1652
-7309:0:4365
-7310:2:1653
-7311:0:4365
-7312:2:1657
-7313:0:4365
-7314:2:1180
-7315:0:4365
-7316:3:2427
-7317:0:4365
-7318:2:1181
-7319:2:1185
-7320:2:1186
-7321:2:1194
-7322:2:1195
-7323:2:1199
-7324:2:1200
-7325:2:1194
-7326:2:1195
-7327:2:1196
-7328:2:1208
-7329:2:1213
-7330:2:1217
-7331:2:1218
-7332:2:1225
-7333:2:1226
-7334:2:1237
-7335:2:1238
-7336:2:1239
-7337:2:1237
-7338:2:1238
-7339:2:1239
-7340:2:1250
-7341:2:1255
-7342:2:1256
-7343:0:4365
-7344:3:2428
-7345:0:4365
-7346:2:1268
-7347:0:4365
-7348:3:2427
-7349:0:4365
-7350:2:1270
-7351:0:4365
-7352:3:2428
-7353:0:4365
-7354:2:1271
-7355:2:1275
-7356:2:1276
-7357:2:1284
-7358:2:1285
-7359:2:1289
-7360:2:1290
-7361:2:1284
-7362:2:1285
-7363:2:1289
-7364:2:1290
-7365:2:1298
-7366:2:1303
-7367:2:1307
-7368:2:1308
-7369:2:1315
-7370:2:1316
-7371:2:1327
-7372:2:1328
-7373:2:1329
-7374:2:1327
-7375:2:1328
-7376:2:1329
-7377:2:1340
-7378:2:1345
-7379:2:1346
-7380:0:4365
-7381:2:1358
-7382:0:4365
-7383:2:1454
-7384:0:4365
-7385:3:2427
-7386:0:4365
-7387:2:1455
-7388:0:4365
-7389:3:2428
-7390:0:4365
-7391:2:1652
-7392:0:4365
-7393:2:1653
-7394:0:4365
-7395:2:1657
-7396:0:4365
-7397:2:1660
-7398:0:4365
-7399:3:2427
-7400:0:4365
-7401:2:1665
-7402:2:1669
-7403:2:1670
-7404:2:1678
-7405:2:1679
-7406:2:1683
-7407:2:1684
-7408:2:1678
-7409:2:1679
-7410:2:1680
-7411:2:1692
-7412:2:1697
-7413:2:1701
-7414:2:1702
-7415:2:1709
-7416:2:1710
-7417:2:1721
-7418:2:1722
-7419:2:1723
-7420:2:1721
-7421:2:1722
-7422:2:1723
-7423:2:1734
-7424:2:1739
-7425:2:1740
-7426:0:4365
-7427:3:2428
-7428:0:4365
-7429:2:1752
-7430:0:4365
-7431:3:2427
-7432:0:4365
-7433:2:1754
-7434:0:4365
-7435:3:2428
-7436:0:4365
-7437:2:1755
-7438:2:1759
-7439:2:1760
-7440:2:1768
-7441:2:1769
-7442:2:1773
-7443:2:1774
-7444:2:1768
-7445:2:1769
-7446:2:1773
-7447:2:1774
-7448:2:1782
-7449:2:1787
-7450:2:1791
-7451:2:1792
-7452:2:1799
-7453:2:1800
-7454:2:1811
-7455:2:1812
-7456:2:1813
-7457:2:1811
-7458:2:1812
-7459:2:1813
-7460:2:1824
-7461:2:1829
-7462:2:1830
-7463:0:4365
-7464:2:1842
-7465:0:4365
-7466:3:2427
-7467:0:4365
-7468:2:1844
-7469:0:4365
-7470:3:2428
-7471:0:4365
-7472:2:1845
-7473:2:1849
-7474:2:1850
-7475:2:1858
-7476:2:1859
-7477:2:1863
-7478:2:1864
-7479:2:1858
-7480:2:1859
-7481:2:1863
-7482:2:1864
-7483:2:1872
-7484:2:1877
-7485:2:1881
-7486:2:1882
-7487:2:1889
-7488:2:1890
-7489:2:1901
-7490:2:1902
-7491:2:1903
-7492:2:1901
-7493:2:1902
-7494:2:1903
-7495:2:1914
-7496:2:1919
-7497:2:1920
-7498:0:4365
-7499:2:1932
-7500:0:4365
-7501:3:2427
-7502:0:4365
-7503:2:1934
-7504:0:4365
-7505:3:2428
-7506:0:4365
-7507:2:1935
-7508:0:4365
-7509:2:1936
-7510:0:4365
-7511:2:2129
-7512:0:4365
-7513:2:2130
-7514:0:4365
-7515:2:2134
-7516:0:4365
-7517:3:2427
-7518:0:4365
-7519:2:2136
-7520:0:4365
-7521:3:2428
-7522:0:4365
-7523:2:2137
-7524:2:2141
-7525:2:2142
-7526:2:2150
-7527:2:2151
-7528:2:2155
-7529:2:2156
-7530:2:2150
-7531:2:2151
-7532:2:2155
-7533:2:2156
-7534:2:2164
-7535:2:2169
-7536:2:2173
-7537:2:2174
-7538:2:2181
-7539:2:2182
-7540:2:2193
-7541:2:2194
-7542:2:2195
-7543:2:2193
-7544:2:2194
-7545:2:2195
-7546:2:2206
-7547:2:2211
-7548:2:2212
-7549:0:4365
-7550:2:2224
-7551:0:4365
-7552:3:2427
-7553:0:4365
-7554:2:2226
-7555:0:4365
-7556:3:2428
-7557:0:4365
-7558:2:1936
-7559:0:4365
-7560:2:2129
-7561:0:4365
-7562:2:2130
-7563:0:4365
-7564:2:2134
-7565:0:4365
-7566:3:2427
-7567:0:4365
-7568:2:2136
-7569:0:4365
-7570:3:2428
-7571:0:4365
-7572:2:2137
-7573:2:2141
-7574:2:2142
-7575:2:2150
-7576:2:2151
-7577:2:2155
-7578:2:2156
-7579:2:2150
-7580:2:2151
-7581:2:2152
-7582:2:2164
-7583:2:2169
-7584:2:2173
-7585:2:2174
-7586:2:2181
-7587:2:2182
-7588:2:2193
-7589:2:2194
-7590:2:2195
-7591:2:2193
-7592:2:2194
-7593:2:2195
-7594:2:2206
-7595:2:2211
-7596:2:2212
-7597:0:4365
-7598:2:2224
-7599:0:4365
-7600:3:2427
-7601:0:4365
-7602:2:2226
-7603:0:4365
-7604:3:2428
-7605:0:4365
-7606:2:2230
-7607:0:4365
-7608:3:2427
-7609:0:4365
-7610:2:2235
-7611:2:2239
-7612:2:2240
-7613:2:2248
-7614:2:2249
-7615:2:2253
-7616:2:2254
-7617:2:2248
-7618:2:2249
-7619:2:2250
-7620:2:2262
-7621:2:2267
-7622:2:2271
-7623:2:2272
-7624:2:2279
-7625:2:2280
-7626:2:2291
-7627:2:2292
-7628:2:2293
-7629:2:2291
-7630:2:2292
-7631:2:2293
-7632:2:2304
-7633:2:2309
-7634:2:2310
-7635:0:4365
-7636:3:2428
-7637:0:4365
-7638:2:2322
-7639:0:4365
-7640:2:1169
-7641:0:4365
-7642:3:2427
-7643:0:4365
-7644:2:1170
-7645:0:4365
-7646:3:2428
-7647:0:4365
-7648:3:2429
-7649:0:4365
-7650:3:2435
-7651:3:2436
-7652:0:4365
-7653:3:2440
-7654:3:2444
-7655:3:2445
-7656:3:2453
-7657:3:2454
-7658:3:2458
-7659:3:2459
-7660:3:2453
-7661:3:2454
-7662:3:2458
-7663:3:2459
-7664:3:2467
-7665:3:2472
-7666:3:2473
-7667:3:2484
-7668:3:2485
-7669:3:2496
-7670:3:2497
-7671:3:2498
-7672:3:2496
-7673:3:2497
-7674:3:2498
-7675:3:2509
-7676:3:2514
-7677:3:2515
-7678:0:4365
-7679:3:2527
-7680:0:4365
-7681:3:2528
-7682:0:4365
-7683:2:1173
-7684:0:4365
-7685:3:2529
-7686:0:4365
-7687:2:1179
-7688:0:4365
-7689:2:1180
-7690:0:4365
-7691:3:2528
-7692:0:4365
-7693:2:1181
-7694:2:1185
-7695:2:1186
-7696:2:1194
-7697:2:1195
-7698:2:1199
-7699:2:1200
-7700:2:1194
-7701:2:1195
-7702:2:1199
-7703:2:1200
-7704:2:1208
-7705:2:1213
-7706:2:1217
-7707:2:1218
-7708:2:1225
-7709:2:1226
-7710:2:1237
-7711:2:1238
-7712:2:1239
-7713:2:1237
-7714:2:1238
-7715:2:1239
-7716:2:1250
-7717:2:1255
-7718:2:1256
-7719:0:4365
-7720:3:2529
-7721:0:4365
-7722:2:1268
-7723:0:4365
-7724:3:2528
-7725:0:4365
-7726:2:1270
-7727:0:4365
-7728:3:2529
-7729:0:4365
-7730:2:1271
-7731:2:1275
-7732:2:1276
-7733:2:1284
-7734:2:1285
-7735:2:1289
-7736:2:1290
-7737:2:1284
-7738:2:1285
-7739:2:1289
-7740:2:1290
-7741:2:1298
-7742:2:1303
-7743:2:1307
-7744:2:1308
-7745:2:1315
-7746:2:1316
-7747:2:1327
-7748:2:1328
-7749:2:1329
-7750:2:1327
-7751:2:1328
-7752:2:1329
-7753:2:1340
-7754:2:1345
-7755:2:1346
-7756:0:4365
-7757:2:1358
-7758:0:4365
-7759:2:1360
-7760:0:4365
-7761:3:2528
-7762:0:4365
-7763:2:1361
-7764:0:4365
-7765:3:2529
-7766:0:4365
-7767:2:1362
-7768:2:1366
-7769:2:1367
-7770:2:1375
-7771:2:1376
-7772:2:1380
-7773:2:1381
-7774:2:1375
-7775:2:1376
-7776:2:1380
-7777:2:1381
-7778:2:1389
-7779:2:1394
-7780:2:1398
-7781:2:1399
-7782:2:1406
-7783:2:1407
-7784:2:1418
-7785:2:1419
-7786:2:1420
-7787:2:1418
-7788:2:1419
-7789:2:1420
-7790:2:1431
-7791:2:1436
-7792:2:1437
-7793:0:4365
-7794:2:1449
-7795:0:4365
-7796:3:2528
-7797:0:4365
-7798:2:1451
-7799:0:4365
-7800:3:2529
-7801:0:4365
-7802:2:1652
-7803:0:4365
-7804:2:1653
-7805:0:4365
-7806:2:1657
-7807:0:4365
-7808:2:1180
-7809:0:4365
-7810:3:2528
-7811:0:4365
-7812:2:1181
-7813:2:1185
-7814:2:1186
-7815:2:1194
-7816:2:1195
-7817:2:1199
-7818:2:1200
-7819:2:1194
-7820:2:1195
-7821:2:1196
-7822:2:1208
-7823:2:1213
-7824:2:1217
-7825:2:1218
-7826:2:1225
-7827:2:1226
-7828:2:1237
-7829:2:1238
-7830:2:1239
-7831:2:1237
-7832:2:1238
-7833:2:1239
-7834:2:1250
-7835:2:1255
-7836:2:1256
-7837:0:4365
-7838:3:2529
-7839:0:4365
-7840:2:1268
-7841:0:4365
-7842:3:2528
-7843:0:4365
-7844:2:1270
-7845:0:4365
-7846:3:2529
-7847:0:4365
-7848:2:1271
-7849:2:1275
-7850:2:1276
-7851:2:1284
-7852:2:1285
-7853:2:1289
-7854:2:1290
-7855:2:1284
-7856:2:1285
-7857:2:1289
-7858:2:1290
-7859:2:1298
-7860:2:1303
-7861:2:1307
-7862:2:1308
-7863:2:1315
-7864:2:1316
-7865:2:1327
-7866:2:1328
-7867:2:1329
-7868:2:1327
-7869:2:1328
-7870:2:1329
-7871:2:1340
-7872:2:1345
-7873:2:1346
-7874:0:4365
-7875:2:1358
-7876:0:4365
-7877:2:1454
-7878:0:4365
-7879:3:2528
-7880:0:4365
-7881:2:1455
-7882:0:4365
-7883:3:2529
-7884:0:4365
-7885:2:1652
-7886:0:4365
-7887:2:1653
-7888:0:4365
-7889:2:1657
-7890:0:4365
-7891:2:1660
-7892:0:4365
-7893:3:2528
-7894:0:4365
-7895:2:1665
-7896:2:1669
-7897:2:1670
-7898:2:1678
-7899:2:1679
-7900:2:1683
-7901:2:1684
-7902:2:1678
-7903:2:1679
-7904:2:1680
-7905:2:1692
-7906:2:1697
-7907:2:1701
-7908:2:1702
-7909:2:1709
-7910:2:1710
-7911:2:1721
-7912:2:1722
-7913:2:1723
-7914:2:1721
-7915:2:1722
-7916:2:1723
-7917:2:1734
-7918:2:1739
-7919:2:1740
-7920:0:4365
-7921:3:2529
-7922:0:4365
-7923:2:1752
-7924:0:4365
-7925:3:2528
-7926:0:4365
-7927:2:1754
-7928:0:4365
-7929:3:2529
-7930:0:4365
-7931:2:1755
-7932:2:1759
-7933:2:1760
-7934:2:1768
-7935:2:1769
-7936:2:1773
-7937:2:1774
-7938:2:1768
-7939:2:1769
-7940:2:1773
-7941:2:1774
-7942:2:1782
-7943:2:1787
-7944:2:1791
-7945:2:1792
-7946:2:1799
-7947:2:1800
-7948:2:1811
-7949:2:1812
-7950:2:1813
-7951:2:1811
-7952:2:1812
-7953:2:1813
-7954:2:1824
-7955:2:1829
-7956:2:1830
-7957:0:4365
-7958:2:1842
-7959:0:4365
-7960:3:2528
-7961:0:4365
-7962:2:1844
-7963:0:4365
-7964:3:2529
-7965:0:4365
-7966:2:1845
-7967:2:1849
-7968:2:1850
-7969:2:1858
-7970:2:1859
-7971:2:1863
-7972:2:1864
-7973:2:1858
-7974:2:1859
-7975:2:1863
-7976:2:1864
-7977:2:1872
-7978:2:1877
-7979:2:1881
-7980:2:1882
-7981:2:1889
-7982:2:1890
-7983:2:1901
-7984:2:1902
-7985:2:1903
-7986:2:1901
-7987:2:1902
-7988:2:1903
-7989:2:1914
-7990:2:1919
-7991:2:1920
-7992:0:4365
-7993:2:1932
-7994:0:4365
-7995:3:2528
-7996:0:4365
-7997:2:1934
-7998:0:4365
-7999:3:2529
-8000:0:4365
-8001:2:1935
-8002:0:4365
-8003:2:1936
-8004:0:4365
-8005:2:2129
-8006:0:4365
-8007:2:2130
-8008:0:4365
-8009:2:2134
-8010:0:4365
-8011:3:2528
-8012:0:4365
-8013:2:2136
-8014:0:4365
-8015:3:2529
-8016:0:4365
-8017:2:2137
-8018:2:2141
-8019:2:2142
-8020:2:2150
-8021:2:2151
-8022:2:2155
-8023:2:2156
-8024:2:2150
-8025:2:2151
-8026:2:2155
-8027:2:2156
-8028:2:2164
-8029:2:2169
-8030:2:2173
-8031:2:2174
-8032:2:2181
-8033:2:2182
-8034:2:2193
-8035:2:2194
-8036:2:2195
-8037:2:2193
-8038:2:2194
-8039:2:2195
-8040:2:2206
-8041:2:2211
-8042:2:2212
-8043:0:4365
-8044:2:2224
-8045:0:4365
-8046:3:2528
-8047:0:4365
-8048:2:2226
-8049:0:4365
-8050:3:2529
-8051:0:4365
-8052:2:1936
-8053:0:4365
-8054:2:2129
-8055:0:4365
-8056:2:2130
-8057:0:4365
-8058:2:2134
-8059:0:4365
-8060:3:2528
-8061:0:4365
-8062:2:2136
-8063:0:4365
-8064:3:2529
-8065:0:4365
-8066:2:2137
-8067:2:2141
-8068:2:2142
-8069:2:2150
-8070:2:2151
-8071:2:2155
-8072:2:2156
-8073:2:2150
-8074:2:2151
-8075:2:2152
-8076:2:2164
-8077:2:2169
-8078:2:2173
-8079:2:2174
-8080:2:2181
-8081:2:2182
-8082:2:2193
-8083:2:2194
-8084:2:2195
-8085:2:2193
-8086:2:2194
-8087:2:2195
-8088:2:2206
-8089:2:2211
-8090:2:2212
-8091:0:4365
-8092:2:2224
-8093:0:4365
-8094:3:2528
-8095:0:4365
-8096:2:2226
-8097:0:4365
-8098:3:2529
-8099:0:4365
-8100:2:2230
-8101:0:4365
-8102:3:2528
-8103:0:4365
-8104:2:2235
-8105:2:2239
-8106:2:2240
-8107:2:2248
-8108:2:2249
-8109:2:2253
-8110:2:2254
-8111:2:2248
-8112:2:2249
-8113:2:2250
-8114:2:2262
-8115:2:2267
-8116:2:2271
-8117:2:2272
-8118:2:2279
-8119:2:2280
-8120:2:2291
-8121:2:2292
-8122:2:2293
-8123:2:2291
-8124:2:2292
-8125:2:2293
-8126:2:2304
-8127:2:2309
-8128:2:2310
-8129:0:4365
-8130:3:2529
-8131:0:4365
-8132:2:2322
-8133:0:4365
-8134:2:1169
-8135:0:4365
-8136:3:2528
-8137:0:4365
-8138:2:1170
-8139:0:4365
-8140:3:2529
-8141:0:4365
-8142:3:2530
-8143:0:4365
-8144:3:2536
-8145:0:4365
-8146:3:2537
-8147:0:4365
-8148:3:2547
-8149:0:4365
-8150:3:2548
-8151:0:4365
-8152:3:2552
-8153:3:2553
-8154:3:2557
-8155:3:2561
-8156:3:2562
-8157:3:2557
-8158:3:2561
-8159:3:2562
-8160:3:2566
-8161:3:2574
-8162:3:2575
-8163:3:2580
-8164:3:2587
-8165:3:2588
-8166:3:2587
-8167:3:2588
-8168:3:2595
-8169:3:2600
-8170:0:4365
-8171:3:2611
-8172:0:4365
-8173:3:2615
-8174:3:2616
-8175:3:2620
-8176:3:2624
-8177:3:2625
-8178:3:2620
-8179:3:2624
-8180:3:2625
-8181:3:2629
-8182:3:2637
-8183:3:2638
-8184:3:2643
-8185:3:2650
-8186:3:2651
-8187:3:2650
-8188:3:2651
-8189:3:2658
-8190:3:2663
-8191:0:4365
-8192:3:2611
-8193:0:4365
-8194:3:2615
-8195:3:2616
-8196:3:2620
-8197:3:2624
-8198:3:2625
-8199:3:2620
-8200:3:2624
-8201:3:2625
-8202:3:2629
-8203:3:2637
-8204:3:2638
-8205:3:2643
-8206:3:2650
-8207:3:2651
-8208:3:2650
-8209:3:2651
-8210:3:2658
-8211:3:2663
-8212:0:4365
-8213:3:2674
-8214:0:4365
-8215:3:2682
-8216:3:2683
-8217:3:2687
-8218:3:2691
-8219:3:2692
-8220:3:2687
-8221:3:2691
-8222:3:2692
-8223:3:2696
-8224:3:2704
-8225:3:2705
-8226:3:2710
-8227:3:2717
-8228:3:2718
-8229:3:2717
-8230:3:2718
-8231:3:2725
-8232:3:2730
-8233:0:4365
-8234:3:2745
-8235:0:4365
-8236:3:2746
-8237:0:4365
-8238:2:1173
-8239:0:4365
-8240:3:2747
-8241:0:4365
-8242:2:1179
-8243:0:4365
-8244:2:1180
-8245:0:4365
-8246:3:2746
-8247:0:4365
-8248:2:1181
-8249:2:1185
-8250:2:1186
-8251:2:1194
-8252:2:1195
-8253:2:1199
-8254:2:1200
-8255:2:1194
-8256:2:1195
-8257:2:1199
-8258:2:1200
-8259:2:1208
-8260:2:1213
-8261:2:1217
-8262:2:1218
-8263:2:1225
-8264:2:1226
-8265:2:1237
-8266:2:1238
-8267:2:1239
-8268:2:1237
-8269:2:1238
-8270:2:1239
-8271:2:1250
-8272:2:1255
-8273:2:1256
-8274:0:4365
-8275:3:2747
-8276:0:4365
-8277:2:1268
-8278:0:4365
-8279:3:2746
-8280:0:4365
-8281:2:1270
-8282:0:4365
-8283:3:2747
-8284:0:4365
-8285:2:1271
-8286:2:1275
-8287:2:1276
-8288:2:1284
-8289:2:1285
-8290:2:1289
-8291:2:1290
-8292:2:1284
-8293:2:1285
-8294:2:1289
-8295:2:1290
-8296:2:1298
-8297:2:1303
-8298:2:1307
-8299:2:1308
-8300:2:1315
-8301:2:1316
-8302:2:1327
-8303:2:1328
-8304:2:1329
-8305:2:1327
-8306:2:1328
-8307:2:1329
-8308:2:1340
-8309:2:1345
-8310:2:1346
-8311:0:4365
-8312:2:1358
-8313:0:4365
-8314:2:1360
-8315:0:4365
-8316:3:2746
-8317:0:4365
-8318:2:1361
-8319:0:4365
-8320:3:2747
-8321:0:4365
-8322:2:1362
-8323:2:1366
-8324:2:1367
-8325:2:1375
-8326:2:1376
-8327:2:1380
-8328:2:1381
-8329:2:1375
-8330:2:1376
-8331:2:1380
-8332:2:1381
-8333:2:1389
-8334:2:1394
-8335:2:1398
-8336:2:1399
-8337:2:1406
-8338:2:1407
-8339:2:1418
-8340:2:1419
-8341:2:1420
-8342:2:1418
-8343:2:1419
-8344:2:1420
-8345:2:1431
-8346:2:1436
-8347:2:1437
-8348:0:4365
-8349:2:1449
-8350:0:4365
-8351:3:2746
-8352:0:4365
-8353:2:1451
-8354:0:4365
-8355:3:2747
-8356:0:4365
-8357:2:1652
-8358:0:4365
-8359:2:1653
-8360:0:4365
-8361:2:1657
-8362:0:4365
-8363:2:1180
-8364:0:4365
-8365:3:2746
-8366:0:4365
-8367:2:1181
-8368:2:1185
-8369:2:1186
-8370:2:1194
-8371:2:1195
-8372:2:1199
-8373:2:1200
-8374:2:1194
-8375:2:1195
-8376:2:1196
-8377:2:1208
-8378:2:1213
-8379:2:1217
-8380:2:1218
-8381:2:1225
-8382:2:1226
-8383:2:1237
-8384:2:1238
-8385:2:1239
-8386:2:1237
-8387:2:1238
-8388:2:1239
-8389:2:1250
-8390:2:1255
-8391:2:1256
-8392:0:4365
-8393:3:2747
-8394:0:4365
-8395:2:1268
-8396:0:4365
-8397:3:2746
-8398:0:4365
-8399:2:1270
-8400:0:4365
-8401:3:2747
-8402:0:4365
-8403:2:1271
-8404:2:1275
-8405:2:1276
-8406:2:1284
-8407:2:1285
-8408:2:1289
-8409:2:1290
-8410:2:1284
-8411:2:1285
-8412:2:1289
-8413:2:1290
-8414:2:1298
-8415:2:1303
-8416:2:1307
-8417:2:1308
-8418:2:1315
-8419:2:1316
-8420:2:1327
-8421:2:1328
-8422:2:1329
-8423:2:1327
-8424:2:1328
-8425:2:1329
-8426:2:1340
-8427:2:1345
-8428:2:1346
-8429:0:4365
-8430:2:1358
-8431:0:4365
-8432:2:1454
-8433:0:4365
-8434:3:2746
-8435:0:4365
-8436:2:1455
-8437:0:4365
-8438:3:2747
-8439:0:4365
-8440:2:1652
-8441:0:4365
-8442:2:1653
-8443:0:4365
-8444:2:1657
-8445:0:4365
-8446:2:1660
-8447:0:4365
-8448:3:2746
-8449:0:4365
-8450:2:1665
-8451:2:1669
-8452:2:1670
-8453:2:1678
-8454:2:1679
-8455:2:1683
-8456:2:1684
-8457:2:1678
-8458:2:1679
-8459:2:1680
-8460:2:1692
-8461:2:1697
-8462:2:1701
-8463:2:1702
-8464:2:1709
-8465:2:1710
-8466:2:1721
-8467:2:1722
-8468:2:1723
-8469:2:1721
-8470:2:1722
-8471:2:1723
-8472:2:1734
-8473:2:1739
-8474:2:1740
-8475:0:4365
-8476:3:2747
-8477:0:4365
-8478:2:1752
-8479:0:4365
-8480:3:2746
-8481:0:4365
-8482:2:1754
-8483:0:4365
-8484:3:2747
-8485:0:4365
-8486:2:1755
-8487:2:1759
-8488:2:1760
-8489:2:1768
-8490:2:1769
-8491:2:1773
-8492:2:1774
-8493:2:1768
-8494:2:1769
-8495:2:1773
-8496:2:1774
-8497:2:1782
-8498:2:1787
-8499:2:1791
-8500:2:1792
-8501:2:1799
-8502:2:1800
-8503:2:1811
-8504:2:1812
-8505:2:1813
-8506:2:1811
-8507:2:1812
-8508:2:1813
-8509:2:1824
-8510:2:1829
-8511:2:1830
-8512:0:4365
-8513:2:1842
-8514:0:4365
-8515:3:2746
-8516:0:4365
-8517:2:1844
-8518:0:4365
-8519:3:2747
-8520:0:4365
-8521:2:1845
-8522:2:1849
-8523:2:1850
-8524:2:1858
-8525:2:1859
-8526:2:1863
-8527:2:1864
-8528:2:1858
-8529:2:1859
-8530:2:1863
-8531:2:1864
-8532:2:1872
-8533:2:1877
-8534:2:1881
-8535:2:1882
-8536:2:1889
-8537:2:1890
-8538:2:1901
-8539:2:1902
-8540:2:1903
-8541:2:1901
-8542:2:1902
-8543:2:1903
-8544:2:1914
-8545:2:1919
-8546:2:1920
-8547:0:4365
-8548:2:1932
-8549:0:4365
-8550:3:2746
-8551:0:4365
-8552:2:1934
-8553:0:4365
-8554:3:2747
-8555:0:4365
-8556:2:1935
-8557:0:4365
-8558:2:1936
-8559:0:4365
-8560:2:2129
-8561:0:4365
-8562:2:2130
-8563:0:4365
-8564:2:2134
-8565:0:4365
-8566:3:2746
-8567:0:4365
-8568:2:2136
-8569:0:4365
-8570:3:2747
-8571:0:4365
-8572:2:2137
-8573:2:2141
-8574:2:2142
-8575:2:2150
-8576:2:2151
-8577:2:2155
-8578:2:2156
-8579:2:2150
-8580:2:2151
-8581:2:2155
-8582:2:2156
-8583:2:2164
-8584:2:2169
-8585:2:2173
-8586:2:2174
-8587:2:2181
-8588:2:2182
-8589:2:2193
-8590:2:2194
-8591:2:2195
-8592:2:2193
-8593:2:2194
-8594:2:2195
-8595:2:2206
-8596:2:2211
-8597:2:2212
-8598:0:4365
-8599:2:2224
-8600:0:4365
-8601:3:2746
-8602:0:4365
-8603:2:2226
-8604:0:4365
-8605:3:2747
-8606:0:4365
-8607:2:1936
-8608:0:4365
-8609:2:2129
-8610:0:4365
-8611:2:2130
-8612:0:4365
-8613:2:2134
-8614:0:4365
-8615:3:2746
-8616:0:4365
-8617:2:2136
-8618:0:4365
-8619:3:2747
-8620:0:4365
-8621:2:2137
-8622:2:2141
-8623:2:2142
-8624:2:2150
-8625:2:2151
-8626:2:2155
-8627:2:2156
-8628:2:2150
-8629:2:2151
-8630:2:2152
-8631:2:2164
-8632:2:2169
-8633:2:2173
-8634:2:2174
-8635:2:2181
-8636:2:2182
-8637:2:2193
-8638:2:2194
-8639:2:2195
-8640:2:2193
-8641:2:2194
-8642:2:2195
-8643:2:2206
-8644:2:2211
-8645:2:2212
-8646:0:4365
-8647:2:2224
-8648:0:4365
-8649:3:2746
-8650:0:4365
-8651:2:2226
-8652:0:4365
-8653:3:2747
-8654:0:4365
-8655:2:2230
-8656:0:4365
-8657:3:2746
-8658:0:4365
-8659:2:2235
-8660:2:2239
-8661:2:2240
-8662:2:2248
-8663:2:2249
-8664:2:2253
-8665:2:2254
-8666:2:2248
-8667:2:2249
-8668:2:2250
-8669:2:2262
-8670:2:2267
-8671:2:2271
-8672:2:2272
-8673:2:2279
-8674:2:2280
-8675:2:2291
-8676:2:2292
-8677:2:2293
-8678:2:2291
-8679:2:2292
-8680:2:2293
-8681:2:2304
-8682:2:2309
-8683:2:2310
-8684:0:4365
-8685:3:2747
-8686:0:4365
-8687:2:2322
-8688:0:4365
-8689:2:1169
-8690:0:4365
-8691:3:2746
-8692:0:4365
-8693:2:1170
-8694:0:4365
-8695:3:2747
-8696:0:4365
-8697:3:2748
-8698:0:4365
-8699:3:2754
-8700:0:4365
-8701:3:2755
-8702:3:2759
-8703:3:2760
-8704:3:2768
-8705:3:2769
-8706:3:2773
-8707:3:2774
-8708:3:2768
-8709:3:2769
-8710:3:2773
-8711:3:2774
-8712:3:2782
-8713:3:2787
-8714:3:2791
-8715:3:2792
-8716:3:2799
-8717:3:2800
-8718:3:2811
-8719:3:2812
-8720:3:2813
-8721:3:2811
-8722:3:2812
-8723:3:2813
-8724:3:2824
-8725:3:2829
-8726:3:2830
-8727:0:4365
-8728:3:2842
-8729:0:4365
-8730:3:2843
-8731:0:4365
-8732:2:1173
-8733:0:4365
-8734:3:2844
-8735:0:4365
-8736:2:1179
-8737:0:4365
-8738:2:1180
-8739:0:4365
-8740:3:2843
-8741:0:4365
-8742:2:1181
-8743:2:1185
-8744:2:1186
-8745:2:1194
-8746:2:1195
-8747:2:1199
-8748:2:1200
-8749:2:1194
-8750:2:1195
-8751:2:1199
-8752:2:1200
-8753:2:1208
-8754:2:1213
-8755:2:1217
-8756:2:1218
-8757:2:1225
-8758:2:1226
-8759:2:1237
-8760:2:1238
-8761:2:1239
-8762:2:1237
-8763:2:1238
-8764:2:1239
-8765:2:1250
-8766:2:1255
-8767:2:1256
-8768:0:4365
-8769:3:2844
-8770:0:4365
-8771:2:1268
-8772:0:4365
-8773:3:2843
-8774:0:4365
-8775:2:1270
-8776:0:4365
-8777:3:2844
-8778:0:4365
-8779:2:1271
-8780:2:1275
-8781:2:1276
-8782:2:1284
-8783:2:1285
-8784:2:1289
-8785:2:1290
-8786:2:1284
-8787:2:1285
-8788:2:1289
-8789:2:1290
-8790:2:1298
-8791:2:1303
-8792:2:1307
-8793:2:1308
-8794:2:1315
-8795:2:1316
-8796:2:1327
-8797:2:1328
-8798:2:1329
-8799:2:1327
-8800:2:1328
-8801:2:1329
-8802:2:1340
-8803:2:1345
-8804:2:1346
-8805:0:4365
-8806:2:1358
-8807:0:4365
-8808:2:1360
-8809:0:4365
-8810:3:2843
-8811:0:4365
-8812:2:1361
-8813:0:4365
-8814:3:2844
-8815:0:4365
-8816:2:1362
-8817:2:1366
-8818:2:1367
-8819:2:1375
-8820:2:1376
-8821:2:1380
-8822:2:1381
-8823:2:1375
-8824:2:1376
-8825:2:1380
-8826:2:1381
-8827:2:1389
-8828:2:1394
-8829:2:1398
-8830:2:1399
-8831:2:1406
-8832:2:1407
-8833:2:1418
-8834:2:1419
-8835:2:1420
-8836:2:1418
-8837:2:1419
-8838:2:1420
-8839:2:1431
-8840:2:1436
-8841:2:1437
-8842:0:4365
-8843:2:1449
-8844:0:4365
-8845:3:2843
-8846:0:4365
-8847:2:1451
-8848:0:4365
-8849:3:2844
-8850:0:4365
-8851:2:1652
-8852:0:4365
-8853:2:1653
-8854:0:4365
-8855:2:1657
-8856:0:4365
-8857:2:1180
-8858:0:4365
-8859:3:2843
-8860:0:4365
-8861:2:1181
-8862:2:1185
-8863:2:1186
-8864:2:1194
-8865:2:1195
-8866:2:1199
-8867:2:1200
-8868:2:1194
-8869:2:1195
-8870:2:1196
-8871:2:1208
-8872:2:1213
-8873:2:1217
-8874:2:1218
-8875:2:1225
-8876:2:1226
-8877:2:1237
-8878:2:1238
-8879:2:1239
-8880:2:1237
-8881:2:1238
-8882:2:1239
-8883:2:1250
-8884:2:1255
-8885:2:1256
-8886:0:4365
-8887:3:2844
-8888:0:4365
-8889:2:1268
-8890:0:4365
-8891:3:2843
-8892:0:4365
-8893:2:1270
-8894:0:4365
-8895:3:2844
-8896:0:4365
-8897:2:1271
-8898:2:1275
-8899:2:1276
-8900:2:1284
-8901:2:1285
-8902:2:1289
-8903:2:1290
-8904:2:1284
-8905:2:1285
-8906:2:1289
-8907:2:1290
-8908:2:1298
-8909:2:1303
-8910:2:1307
-8911:2:1308
-8912:2:1315
-8913:2:1316
-8914:2:1327
-8915:2:1328
-8916:2:1329
-8917:2:1327
-8918:2:1328
-8919:2:1329
-8920:2:1340
-8921:2:1345
-8922:2:1346
-8923:0:4365
-8924:2:1358
-8925:0:4365
-8926:2:1454
-8927:0:4365
-8928:3:2843
-8929:0:4365
-8930:2:1455
-8931:0:4365
-8932:3:2844
-8933:0:4365
-8934:2:1652
-8935:0:4365
-8936:2:1653
-8937:0:4365
-8938:2:1657
-8939:0:4365
-8940:2:1660
-8941:0:4365
-8942:3:2843
-8943:0:4365
-8944:2:1665
-8945:2:1669
-8946:2:1670
-8947:2:1678
-8948:2:1679
-8949:2:1683
-8950:2:1684
-8951:2:1678
-8952:2:1679
-8953:2:1680
-8954:2:1692
-8955:2:1697
-8956:2:1701
-8957:2:1702
-8958:2:1709
-8959:2:1710
-8960:2:1721
-8961:2:1722
-8962:2:1723
-8963:2:1721
-8964:2:1722
-8965:2:1723
-8966:2:1734
-8967:2:1739
-8968:2:1740
-8969:0:4365
-8970:3:2844
-8971:0:4365
-8972:2:1752
-8973:0:4365
-8974:3:2843
-8975:0:4365
-8976:2:1754
-8977:0:4365
-8978:3:2844
-8979:0:4365
-8980:2:1755
-8981:2:1759
-8982:2:1760
-8983:2:1768
-8984:2:1769
-8985:2:1773
-8986:2:1774
-8987:2:1768
-8988:2:1769
-8989:2:1773
-8990:2:1774
-8991:2:1782
-8992:2:1787
-8993:2:1791
-8994:2:1792
-8995:2:1799
-8996:2:1800
-8997:2:1811
-8998:2:1812
-8999:2:1813
-9000:2:1811
-9001:2:1812
-9002:2:1813
-9003:2:1824
-9004:2:1829
-9005:2:1830
-9006:0:4365
-9007:2:1842
-9008:0:4365
-9009:3:2843
-9010:0:4365
-9011:2:1844
-9012:0:4365
-9013:3:2844
-9014:0:4365
-9015:2:1845
-9016:2:1849
-9017:2:1850
-9018:2:1858
-9019:2:1859
-9020:2:1863
-9021:2:1864
-9022:2:1858
-9023:2:1859
-9024:2:1863
-9025:2:1864
-9026:2:1872
-9027:2:1877
-9028:2:1881
-9029:2:1882
-9030:2:1889
-9031:2:1890
-9032:2:1901
-9033:2:1902
-9034:2:1903
-9035:2:1901
-9036:2:1902
-9037:2:1903
-9038:2:1914
-9039:2:1919
-9040:2:1920
-9041:0:4365
-9042:2:1932
-9043:0:4365
-9044:3:2843
-9045:0:4365
-9046:2:1934
-9047:0:4365
-9048:3:2844
-9049:0:4365
-9050:2:1935
-9051:0:4365
-9052:2:1936
-9053:0:4365
-9054:2:2129
-9055:0:4365
-9056:2:2130
-9057:0:4365
-9058:2:2134
-9059:0:4365
-9060:3:2843
-9061:0:4365
-9062:2:2136
-9063:0:4365
-9064:3:2844
-9065:0:4365
-9066:2:2137
-9067:2:2141
-9068:2:2142
-9069:2:2150
-9070:2:2151
-9071:2:2155
-9072:2:2156
-9073:2:2150
-9074:2:2151
-9075:2:2155
-9076:2:2156
-9077:2:2164
-9078:2:2169
-9079:2:2173
-9080:2:2174
-9081:2:2181
-9082:2:2182
-9083:2:2193
-9084:2:2194
-9085:2:2195
-9086:2:2193
-9087:2:2194
-9088:2:2195
-9089:2:2206
-9090:2:2211
-9091:2:2212
-9092:0:4365
-9093:2:2224
-9094:0:4365
-9095:3:2843
-9096:0:4365
-9097:2:2226
-9098:0:4365
-9099:3:2844
-9100:0:4365
-9101:2:1936
-9102:0:4365
-9103:2:2129
-9104:0:4365
-9105:2:2130
-9106:0:4365
-9107:2:2134
-9108:0:4365
-9109:3:2843
-9110:0:4365
-9111:2:2136
-9112:0:4365
-9113:3:2844
-9114:0:4365
-9115:2:2137
-9116:2:2141
-9117:2:2142
-9118:2:2150
-9119:2:2151
-9120:2:2155
-9121:2:2156
-9122:2:2150
-9123:2:2151
-9124:2:2152
-9125:2:2164
-9126:2:2169
-9127:2:2173
-9128:2:2174
-9129:2:2181
-9130:2:2182
-9131:2:2193
-9132:2:2194
-9133:2:2195
-9134:2:2193
-9135:2:2194
-9136:2:2195
-9137:2:2206
-9138:2:2211
-9139:2:2212
-9140:0:4365
-9141:2:2224
-9142:0:4365
-9143:3:2843
-9144:0:4365
-9145:2:2226
-9146:0:4365
-9147:3:2844
-9148:0:4365
-9149:2:2230
-9150:0:4365
-9151:3:2843
-9152:0:4365
-9153:2:2235
-9154:2:2239
-9155:2:2240
-9156:2:2248
-9157:2:2249
-9158:2:2253
-9159:2:2254
-9160:2:2248
-9161:2:2249
-9162:2:2250
-9163:2:2262
-9164:2:2267
-9165:2:2271
-9166:2:2272
-9167:2:2279
-9168:2:2280
-9169:2:2291
-9170:2:2292
-9171:2:2293
-9172:2:2291
-9173:2:2292
-9174:2:2293
-9175:2:2304
-9176:2:2309
-9177:2:2310
-9178:0:4365
-9179:3:2844
-9180:0:4365
-9181:2:2322
-9182:0:4365
-9183:2:1169
-9184:0:4365
-9185:3:2843
-9186:0:4365
-9187:2:1170
-9188:0:4365
-9189:3:2844
-9190:0:4365
-9191:3:2845
-9192:0:4365
-9193:3:2851
-9194:0:4365
-9195:3:2854
-9196:3:2855
-9197:3:2867
-9198:3:2868
-9199:3:2872
-9200:3:2873
-9201:3:2867
-9202:3:2868
-9203:3:2872
-9204:3:2873
-9205:3:2881
-9206:3:2886
-9207:3:2890
-9208:3:2891
-9209:3:2898
-9210:3:2899
-9211:3:2910
-9212:3:2911
-9213:3:2912
-9214:3:2910
-9215:3:2911
-9216:3:2912
-9217:3:2923
-9218:3:2928
-9219:3:2929
-9220:0:4365
-9221:3:2941
-9222:0:4365
-9223:3:2942
-9224:0:4365
-9225:2:1173
-9226:0:4365
-9227:3:2943
-9228:0:4365
-9229:2:1179
-9230:0:4365
-9231:2:1180
-9232:0:4365
-9233:3:2942
-9234:0:4365
-9235:2:1181
-9236:2:1185
-9237:2:1186
-9238:2:1194
-9239:2:1195
-9240:2:1199
-9241:2:1200
-9242:2:1194
-9243:2:1195
-9244:2:1199
-9245:2:1200
-9246:2:1208
-9247:2:1213
-9248:2:1217
-9249:2:1218
-9250:2:1225
-9251:2:1226
-9252:2:1237
-9253:2:1238
-9254:2:1239
-9255:2:1237
-9256:2:1238
-9257:2:1239
-9258:2:1250
-9259:2:1255
-9260:2:1256
-9261:0:4365
-9262:3:2943
-9263:0:4365
-9264:2:1268
-9265:0:4365
-9266:3:2942
-9267:0:4365
-9268:2:1270
-9269:0:4365
-9270:3:2943
-9271:0:4365
-9272:2:1271
-9273:2:1275
-9274:2:1276
-9275:2:1284
-9276:2:1285
-9277:2:1289
-9278:2:1290
-9279:2:1284
-9280:2:1285
-9281:2:1289
-9282:2:1290
-9283:2:1298
-9284:2:1303
-9285:2:1307
-9286:2:1308
-9287:2:1315
-9288:2:1316
-9289:2:1327
-9290:2:1328
-9291:2:1329
-9292:2:1327
-9293:2:1328
-9294:2:1329
-9295:2:1340
-9296:2:1345
-9297:2:1346
-9298:0:4365
-9299:2:1358
-9300:0:4365
-9301:2:1360
-9302:0:4365
-9303:3:2942
-9304:0:4365
-9305:2:1361
-9306:0:4365
-9307:3:2943
-9308:0:4365
-9309:2:1362
-9310:2:1366
-9311:2:1367
-9312:2:1375
-9313:2:1376
-9314:2:1380
-9315:2:1381
-9316:2:1375
-9317:2:1376
-9318:2:1380
-9319:2:1381
-9320:2:1389
-9321:2:1394
-9322:2:1398
-9323:2:1399
-9324:2:1406
-9325:2:1407
-9326:2:1418
-9327:2:1419
-9328:2:1420
-9329:2:1418
-9330:2:1419
-9331:2:1420
-9332:2:1431
-9333:2:1436
-9334:2:1437
-9335:0:4365
-9336:2:1449
-9337:0:4365
-9338:3:2942
-9339:0:4365
-9340:2:1451
-9341:0:4365
-9342:3:2943
-9343:0:4365
-9344:2:1652
-9345:0:4365
-9346:2:1653
-9347:0:4365
-9348:2:1657
-9349:0:4365
-9350:2:1180
-9351:0:4365
-9352:3:2942
-9353:0:4365
-9354:2:1181
-9355:2:1185
-9356:2:1186
-9357:2:1194
-9358:2:1195
-9359:2:1199
-9360:2:1200
-9361:2:1194
-9362:2:1195
-9363:2:1196
-9364:2:1208
-9365:2:1213
-9366:2:1217
-9367:2:1218
-9368:2:1225
-9369:2:1226
-9370:2:1237
-9371:2:1238
-9372:2:1239
-9373:2:1237
-9374:2:1238
-9375:2:1239
-9376:2:1250
-9377:2:1255
-9378:2:1256
-9379:0:4365
-9380:3:2943
-9381:0:4365
-9382:2:1268
-9383:0:4365
-9384:3:2942
-9385:0:4365
-9386:2:1270
-9387:0:4365
-9388:3:2943
-9389:0:4365
-9390:2:1271
-9391:2:1275
-9392:2:1276
-9393:2:1284
-9394:2:1285
-9395:2:1289
-9396:2:1290
-9397:2:1284
-9398:2:1285
-9399:2:1289
-9400:2:1290
-9401:2:1298
-9402:2:1303
-9403:2:1307
-9404:2:1308
-9405:2:1315
-9406:2:1316
-9407:2:1327
-9408:2:1328
-9409:2:1329
-9410:2:1327
-9411:2:1328
-9412:2:1329
-9413:2:1340
-9414:2:1345
-9415:2:1346
-9416:0:4365
-9417:2:1358
-9418:0:4365
-9419:2:1454
-9420:0:4365
-9421:3:2942
-9422:0:4365
-9423:2:1455
-9424:0:4365
-9425:3:2943
-9426:0:4365
-9427:2:1652
-9428:0:4365
-9429:2:1653
-9430:0:4365
-9431:2:1657
-9432:0:4365
-9433:2:1660
-9434:0:4365
-9435:3:2942
-9436:0:4365
-9437:2:1665
-9438:2:1669
-9439:2:1670
-9440:2:1678
-9441:2:1679
-9442:2:1683
-9443:2:1684
-9444:2:1678
-9445:2:1679
-9446:2:1680
-9447:2:1692
-9448:2:1697
-9449:2:1701
-9450:2:1702
-9451:2:1709
-9452:2:1710
-9453:2:1721
-9454:2:1722
-9455:2:1723
-9456:2:1721
-9457:2:1722
-9458:2:1723
-9459:2:1734
-9460:2:1739
-9461:2:1740
-9462:0:4365
-9463:3:2943
-9464:0:4365
-9465:2:1752
-9466:0:4365
-9467:3:2942
-9468:0:4365
-9469:2:1754
-9470:0:4365
-9471:3:2943
-9472:0:4365
-9473:2:1755
-9474:2:1759
-9475:2:1760
-9476:2:1768
-9477:2:1769
-9478:2:1773
-9479:2:1774
-9480:2:1768
-9481:2:1769
-9482:2:1773
-9483:2:1774
-9484:2:1782
-9485:2:1787
-9486:2:1791
-9487:2:1792
-9488:2:1799
-9489:2:1800
-9490:2:1811
-9491:2:1812
-9492:2:1813
-9493:2:1811
-9494:2:1812
-9495:2:1813
-9496:2:1824
-9497:2:1829
-9498:2:1830
-9499:0:4365
-9500:2:1842
-9501:0:4365
-9502:3:2942
-9503:0:4365
-9504:2:1844
-9505:0:4365
-9506:3:2943
-9507:0:4365
-9508:2:1845
-9509:2:1849
-9510:2:1850
-9511:2:1858
-9512:2:1859
-9513:2:1863
-9514:2:1864
-9515:2:1858
-9516:2:1859
-9517:2:1863
-9518:2:1864
-9519:2:1872
-9520:2:1877
-9521:2:1881
-9522:2:1882
-9523:2:1889
-9524:2:1890
-9525:2:1901
-9526:2:1902
-9527:2:1903
-9528:2:1901
-9529:2:1902
-9530:2:1903
-9531:2:1914
-9532:2:1919
-9533:2:1920
-9534:0:4365
-9535:2:1932
-9536:0:4365
-9537:3:2942
-9538:0:4365
-9539:2:1934
-9540:0:4365
-9541:3:2943
-9542:0:4365
-9543:2:1935
-9544:0:4365
-9545:2:1936
-9546:0:4365
-9547:2:2129
-9548:0:4365
-9549:2:2130
-9550:0:4365
-9551:2:2134
-9552:0:4365
-9553:3:2942
-9554:0:4365
-9555:2:2136
-9556:0:4365
-9557:3:2943
-9558:0:4365
-9559:2:2137
-9560:2:2141
-9561:2:2142
-9562:2:2150
-9563:2:2151
-9564:2:2155
-9565:2:2156
-9566:2:2150
-9567:2:2151
-9568:2:2155
-9569:2:2156
-9570:2:2164
-9571:2:2169
-9572:2:2173
-9573:2:2174
-9574:2:2181
-9575:2:2182
-9576:2:2193
-9577:2:2194
-9578:2:2195
-9579:2:2193
-9580:2:2194
-9581:2:2195
-9582:2:2206
-9583:2:2211
-9584:2:2212
-9585:0:4365
-9586:2:2224
-9587:0:4365
-9588:3:2942
-9589:0:4365
-9590:2:2226
-9591:0:4365
-9592:3:2943
-9593:0:4365
-9594:2:1936
-9595:0:4365
-9596:2:2129
-9597:0:4365
-9598:2:2130
-9599:0:4365
-9600:2:2134
-9601:0:4365
-9602:3:2942
-9603:0:4365
-9604:2:2136
-9605:0:4365
-9606:3:2943
-9607:0:4365
-9608:2:2137
-9609:2:2141
-9610:2:2142
-9611:2:2150
-9612:2:2151
-9613:2:2155
-9614:2:2156
-9615:2:2150
-9616:2:2151
-9617:2:2152
-9618:2:2164
-9619:2:2169
-9620:2:2173
-9621:2:2174
-9622:2:2181
-9623:2:2182
-9624:2:2193
-9625:2:2194
-9626:2:2195
-9627:2:2193
-9628:2:2194
-9629:2:2195
-9630:2:2206
-9631:2:2211
-9632:2:2212
-9633:0:4365
-9634:2:2224
-9635:0:4365
-9636:3:2942
-9637:0:4365
-9638:2:2226
-9639:0:4365
-9640:3:2943
-9641:0:4365
-9642:2:2230
-9643:0:4365
-9644:3:2942
-9645:0:4365
-9646:2:2235
-9647:2:2239
-9648:2:2240
-9649:2:2248
-9650:2:2249
-9651:2:2253
-9652:2:2254
-9653:2:2248
-9654:2:2249
-9655:2:2250
-9656:2:2262
-9657:2:2267
-9658:2:2271
-9659:2:2272
-9660:2:2279
-9661:2:2280
-9662:2:2291
-9663:2:2292
-9664:2:2293
-9665:2:2291
-9666:2:2292
-9667:2:2293
-9668:2:2304
-9669:2:2309
-9670:2:2310
-9671:0:4365
-9672:3:2943
-9673:0:4365
-9674:2:2322
-9675:0:4365
-9676:2:1169
-9677:0:4365
-9678:3:2942
-9679:0:4365
-9680:2:1170
-9681:0:4365
-9682:3:2943
-9683:0:4365
-9684:3:2944
-9685:0:4365
-9686:3:2950
-9687:0:4365
-9688:3:2951
-9689:0:4365
-9690:3:2952
-9691:0:4365
-9692:3:2953
-9693:0:4365
-9694:3:2954
-9695:3:2958
-9696:3:2959
-9697:3:2967
-9698:3:2968
-9699:3:2972
-9700:3:2973
-9701:3:2967
-9702:3:2968
-9703:3:2972
-9704:3:2973
-9705:3:2981
-9706:3:2986
-9707:3:2990
-9708:3:2991
-9709:3:2998
-9710:3:2999
-9711:3:3010
-9712:3:3011
-9713:3:3012
-9714:3:3010
-9715:3:3011
-9716:3:3012
-9717:3:3023
-9718:3:3028
-9719:3:3029
-9720:0:4365
-9721:3:3041
-9722:0:4365
-9723:3:3042
-9724:0:4365
-9725:2:1173
-9726:0:4365
-9727:3:3043
-9728:0:4365
-9729:2:1179
-9730:0:4365
-9731:2:1180
-9732:0:4365
-9733:3:3042
-9734:0:4365
-9735:2:1181
-9736:2:1185
-9737:2:1186
-9738:2:1194
-9739:2:1195
-9740:2:1199
-9741:2:1200
-9742:2:1194
-9743:2:1195
-9744:2:1199
-9745:2:1200
-9746:2:1208
-9747:2:1213
-9748:2:1217
-9749:2:1218
-9750:2:1225
-9751:2:1226
-9752:2:1237
-9753:2:1238
-9754:2:1239
-9755:2:1237
-9756:2:1238
-9757:2:1239
-9758:2:1250
-9759:2:1255
-9760:2:1256
-9761:0:4365
-9762:3:3043
-9763:0:4365
-9764:2:1268
-9765:0:4365
-9766:3:3042
-9767:0:4365
-9768:2:1270
-9769:0:4365
-9770:3:3043
-9771:0:4365
-9772:2:1271
-9773:2:1275
-9774:2:1276
-9775:2:1284
-9776:2:1285
-9777:2:1289
-9778:2:1290
-9779:2:1284
-9780:2:1285
-9781:2:1289
-9782:2:1290
-9783:2:1298
-9784:2:1303
-9785:2:1307
-9786:2:1308
-9787:2:1315
-9788:2:1316
-9789:2:1327
-9790:2:1328
-9791:2:1329
-9792:2:1327
-9793:2:1328
-9794:2:1329
-9795:2:1340
-9796:2:1345
-9797:2:1346
-9798:0:4365
-9799:2:1358
-9800:0:4365
-9801:2:1360
-9802:0:4365
-9803:3:3042
-9804:0:4365
-9805:2:1361
-9806:0:4365
-9807:3:3043
-9808:0:4365
-9809:2:1362
-9810:2:1366
-9811:2:1367
-9812:2:1375
-9813:2:1376
-9814:2:1380
-9815:2:1381
-9816:2:1375
-9817:2:1376
-9818:2:1380
-9819:2:1381
-9820:2:1389
-9821:2:1394
-9822:2:1398
-9823:2:1399
-9824:2:1406
-9825:2:1407
-9826:2:1418
-9827:2:1419
-9828:2:1420
-9829:2:1418
-9830:2:1419
-9831:2:1420
-9832:2:1431
-9833:2:1436
-9834:2:1437
-9835:0:4365
-9836:2:1449
-9837:0:4365
-9838:3:3042
-9839:0:4365
-9840:2:1451
-9841:0:4365
-9842:3:3043
-9843:0:4365
-9844:2:1652
-9845:0:4365
-9846:2:1653
-9847:0:4365
-9848:2:1657
-9849:0:4365
-9850:2:1180
-9851:0:4365
-9852:3:3042
-9853:0:4365
-9854:2:1181
-9855:2:1185
-9856:2:1186
-9857:2:1194
-9858:2:1195
-9859:2:1199
-9860:2:1200
-9861:2:1194
-9862:2:1195
-9863:2:1196
-9864:2:1208
-9865:2:1213
-9866:2:1217
-9867:2:1218
-9868:2:1225
-9869:2:1226
-9870:2:1237
-9871:2:1238
-9872:2:1239
-9873:2:1237
-9874:2:1238
-9875:2:1239
-9876:2:1250
-9877:2:1255
-9878:2:1256
-9879:0:4365
-9880:3:3043
-9881:0:4365
-9882:2:1268
-9883:0:4365
-9884:3:3042
-9885:0:4365
-9886:2:1270
-9887:0:4365
-9888:3:3043
-9889:0:4365
-9890:2:1271
-9891:2:1275
-9892:2:1276
-9893:2:1284
-9894:2:1285
-9895:2:1289
-9896:2:1290
-9897:2:1284
-9898:2:1285
-9899:2:1289
-9900:2:1290
-9901:2:1298
-9902:2:1303
-9903:2:1307
-9904:2:1308
-9905:2:1315
-9906:2:1316
-9907:2:1327
-9908:2:1328
-9909:2:1329
-9910:2:1327
-9911:2:1328
-9912:2:1329
-9913:2:1340
-9914:2:1345
-9915:2:1346
-9916:0:4365
-9917:2:1358
-9918:0:4365
-9919:2:1454
-9920:0:4365
-9921:3:3042
-9922:0:4365
-9923:2:1455
-9924:0:4365
-9925:3:3043
-9926:0:4365
-9927:2:1652
-9928:0:4365
-9929:2:1653
-9930:0:4365
-9931:2:1657
-9932:0:4365
-9933:2:1660
-9934:0:4365
-9935:3:3042
-9936:0:4365
-9937:2:1665
-9938:2:1669
-9939:2:1670
-9940:2:1678
-9941:2:1679
-9942:2:1683
-9943:2:1684
-9944:2:1678
-9945:2:1679
-9946:2:1680
-9947:2:1692
-9948:2:1697
-9949:2:1701
-9950:2:1702
-9951:2:1709
-9952:2:1710
-9953:2:1721
-9954:2:1722
-9955:2:1723
-9956:2:1721
-9957:2:1722
-9958:2:1723
-9959:2:1734
-9960:2:1739
-9961:2:1740
-9962:0:4365
-9963:3:3043
-9964:0:4365
-9965:2:1752
-9966:0:4365
-9967:3:3042
-9968:0:4365
-9969:2:1754
-9970:0:4365
-9971:3:3043
-9972:0:4365
-9973:2:1755
-9974:2:1759
-9975:2:1760
-9976:2:1768
-9977:2:1769
-9978:2:1773
-9979:2:1774
-9980:2:1768
-9981:2:1769
-9982:2:1773
-9983:2:1774
-9984:2:1782
-9985:2:1787
-9986:2:1791
-9987:2:1792
-9988:2:1799
-9989:2:1800
-9990:2:1811
-9991:2:1812
-9992:2:1813
-9993:2:1811
-9994:2:1812
-9995:2:1813
-9996:2:1824
-9997:2:1829
-9998:2:1830
-9999:0:4365
-10000:2:1842
-10001:0:4365
-10002:3:3042
-10003:0:4365
-10004:2:1844
-10005:0:4365
-10006:3:3043
-10007:0:4365
-10008:2:1845
-10009:2:1849
-10010:2:1850
-10011:2:1858
-10012:2:1859
-10013:2:1863
-10014:2:1864
-10015:2:1858
-10016:2:1859
-10017:2:1863
-10018:2:1864
-10019:2:1872
-10020:2:1877
-10021:2:1881
-10022:2:1882
-10023:2:1889
-10024:2:1890
-10025:2:1901
-10026:2:1902
-10027:2:1903
-10028:2:1901
-10029:2:1902
-10030:2:1903
-10031:2:1914
-10032:2:1919
-10033:2:1920
-10034:0:4365
-10035:2:1932
-10036:0:4365
-10037:3:3042
-10038:0:4365
-10039:2:1934
-10040:0:4365
-10041:3:3043
-10042:0:4365
-10043:2:1935
-10044:0:4365
-10045:2:1936
-10046:0:4365
-10047:2:2129
-10048:0:4365
-10049:2:2130
-10050:0:4365
-10051:2:2134
-10052:0:4365
-10053:3:3042
-10054:0:4365
-10055:2:2136
-10056:0:4365
-10057:3:3043
-10058:0:4365
-10059:2:2137
-10060:2:2141
-10061:2:2142
-10062:2:2150
-10063:2:2151
-10064:2:2155
-10065:2:2156
-10066:2:2150
-10067:2:2151
-10068:2:2155
-10069:2:2156
-10070:2:2164
-10071:2:2169
-10072:2:2173
-10073:2:2174
-10074:2:2181
-10075:2:2182
-10076:2:2193
-10077:2:2194
-10078:2:2195
-10079:2:2193
-10080:2:2194
-10081:2:2195
-10082:2:2206
-10083:2:2211
-10084:2:2212
-10085:0:4365
-10086:2:2224
-10087:0:4365
-10088:3:3042
-10089:0:4365
-10090:2:2226
-10091:0:4365
-10092:3:3043
-10093:0:4365
-10094:2:1936
-10095:0:4365
-10096:2:2129
-10097:0:4365
-10098:2:2130
-10099:0:4365
-10100:2:2134
-10101:0:4365
-10102:3:3042
-10103:0:4365
-10104:2:2136
-10105:0:4365
-10106:3:3043
-10107:0:4365
-10108:2:2137
-10109:2:2141
-10110:2:2142
-10111:2:2150
-10112:2:2151
-10113:2:2155
-10114:2:2156
-10115:2:2150
-10116:2:2151
-10117:2:2152
-10118:2:2164
-10119:2:2169
-10120:2:2173
-10121:2:2174
-10122:2:2181
-10123:2:2182
-10124:2:2193
-10125:2:2194
-10126:2:2195
-10127:2:2193
-10128:2:2194
-10129:2:2195
-10130:2:2206
-10131:2:2211
-10132:2:2212
-10133:0:4365
-10134:2:2224
-10135:0:4365
-10136:3:3042
-10137:0:4365
-10138:2:2226
-10139:0:4365
-10140:3:3043
-10141:0:4365
-10142:2:2230
-10143:0:4365
-10144:3:3042
-10145:0:4365
-10146:2:2235
-10147:2:2239
-10148:2:2240
-10149:2:2248
-10150:2:2249
-10151:2:2253
-10152:2:2254
-10153:2:2248
-10154:2:2249
-10155:2:2250
-10156:2:2262
-10157:2:2267
-10158:2:2271
-10159:2:2272
-10160:2:2279
-10161:2:2280
-10162:2:2291
-10163:2:2292
-10164:2:2293
-10165:2:2291
-10166:2:2292
-10167:2:2293
-10168:2:2304
-10169:2:2309
-10170:2:2310
-10171:0:4365
-10172:3:3043
-10173:0:4365
-10174:2:2322
-10175:0:4365
-10176:2:1169
-10177:0:4365
-10178:3:3042
-10179:0:4365
-10180:2:1170
-10181:0:4365
-10182:3:3043
-10183:0:4365
-10184:3:3044
-10185:0:4365
-10186:3:3257
-10187:0:4365
-10188:3:3265
-10189:0:4365
-10190:3:3266
-10191:3:3270
-10192:3:3271
-10193:3:3279
-10194:3:3280
-10195:3:3284
-10196:3:3285
-10197:3:3279
-10198:3:3280
-10199:3:3284
-10200:3:3285
-10201:3:3293
-10202:3:3298
-10203:3:3302
-10204:3:3303
-10205:3:3310
-10206:3:3311
-10207:3:3322
-10208:3:3323
-10209:3:3324
-10210:3:3322
-10211:3:3323
-10212:3:3324
-10213:3:3335
-10214:3:3340
-10215:3:3341
-10216:0:4365
-10217:3:3353
-10218:0:4365
-10219:3:3354
-10220:0:4365
-10221:2:1173
-10222:0:4365
-10223:3:3355
-10224:0:4365
-10225:2:1179
-10226:0:4365
-10227:2:1180
-10228:0:4365
-10229:3:3354
-10230:0:4365
-10231:2:1181
-10232:2:1185
-10233:2:1186
-10234:2:1194
-10235:2:1195
-10236:2:1199
-10237:2:1200
-10238:2:1194
-10239:2:1195
-10240:2:1199
-10241:2:1200
-10242:2:1208
-10243:2:1213
-10244:2:1217
-10245:2:1218
-10246:2:1225
-10247:2:1226
-10248:2:1237
-10249:2:1238
-10250:2:1239
-10251:2:1237
-10252:2:1238
-10253:2:1239
-10254:2:1250
-10255:2:1255
-10256:2:1256
-10257:0:4365
-10258:3:3355
-10259:0:4365
-10260:2:1268
-10261:0:4365
-10262:3:3354
-10263:0:4365
-10264:2:1270
-10265:0:4365
-10266:3:3355
-10267:0:4365
-10268:2:1271
-10269:2:1275
-10270:2:1276
-10271:2:1284
-10272:2:1285
-10273:2:1289
-10274:2:1290
-10275:2:1284
-10276:2:1285
-10277:2:1289
-10278:2:1290
-10279:2:1298
-10280:2:1303
-10281:2:1307
-10282:2:1308
-10283:2:1315
-10284:2:1316
-10285:2:1327
-10286:2:1328
-10287:2:1329
-10288:2:1327
-10289:2:1328
-10290:2:1329
-10291:2:1340
-10292:2:1345
-10293:2:1346
-10294:0:4365
-10295:2:1358
-10296:0:4365
-10297:2:1360
-10298:0:4365
-10299:3:3354
-10300:0:4365
-10301:2:1361
-10302:0:4365
-10303:3:3355
-10304:0:4365
-10305:2:1362
-10306:2:1366
-10307:2:1367
-10308:2:1375
-10309:2:1376
-10310:2:1380
-10311:2:1381
-10312:2:1375
-10313:2:1376
-10314:2:1380
-10315:2:1381
-10316:2:1389
-10317:2:1394
-10318:2:1398
-10319:2:1399
-10320:2:1406
-10321:2:1407
-10322:2:1418
-10323:2:1419
-10324:2:1420
-10325:2:1418
-10326:2:1419
-10327:2:1420
-10328:2:1431
-10329:2:1436
-10330:2:1437
-10331:0:4365
-10332:2:1449
-10333:0:4365
-10334:3:3354
-10335:0:4365
-10336:2:1451
-10337:0:4365
-10338:3:3355
-10339:0:4365
-10340:2:1652
-10341:0:4365
-10342:2:1653
-10343:0:4365
-10344:2:1657
-10345:0:4365
-10346:2:1180
-10347:0:4365
-10348:3:3354
-10349:0:4365
-10350:2:1181
-10351:2:1185
-10352:2:1186
-10353:2:1194
-10354:2:1195
-10355:2:1199
-10356:2:1200
-10357:2:1194
-10358:2:1195
-10359:2:1196
-10360:2:1208
-10361:2:1213
-10362:2:1217
-10363:2:1218
-10364:2:1225
-10365:2:1226
-10366:2:1237
-10367:2:1238
-10368:2:1239
-10369:2:1237
-10370:2:1238
-10371:2:1239
-10372:2:1250
-10373:2:1255
-10374:2:1256
-10375:0:4365
-10376:3:3355
-10377:0:4365
-10378:2:1268
-10379:0:4365
-10380:3:3354
-10381:0:4365
-10382:2:1270
-10383:0:4365
-10384:3:3355
-10385:0:4365
-10386:2:1271
-10387:2:1275
-10388:2:1276
-10389:2:1284
-10390:2:1285
-10391:2:1289
-10392:2:1290
-10393:2:1284
-10394:2:1285
-10395:2:1289
-10396:2:1290
-10397:2:1298
-10398:2:1303
-10399:2:1307
-10400:2:1308
-10401:2:1315
-10402:2:1316
-10403:2:1327
-10404:2:1328
-10405:2:1329
-10406:2:1327
-10407:2:1328
-10408:2:1329
-10409:2:1340
-10410:2:1345
-10411:2:1346
-10412:0:4365
-10413:2:1358
-10414:0:4365
-10415:2:1454
-10416:0:4365
-10417:3:3354
-10418:0:4365
-10419:2:1455
-10420:0:4365
-10421:3:3355
-10422:0:4365
-10423:2:1652
-10424:0:4365
-10425:2:1653
-10426:0:4365
-10427:2:1657
-10428:0:4365
-10429:2:1660
-10430:0:4365
-10431:3:3354
-10432:0:4365
-10433:2:1665
-10434:2:1669
-10435:2:1670
-10436:2:1678
-10437:2:1679
-10438:2:1683
-10439:2:1684
-10440:2:1678
-10441:2:1679
-10442:2:1680
-10443:2:1692
-10444:2:1697
-10445:2:1701
-10446:2:1702
-10447:2:1709
-10448:2:1710
-10449:2:1721
-10450:2:1722
-10451:2:1723
-10452:2:1721
-10453:2:1722
-10454:2:1723
-10455:2:1734
-10456:2:1739
-10457:2:1740
-10458:0:4365
-10459:3:3355
-10460:0:4365
-10461:2:1752
-10462:0:4365
-10463:3:3354
-10464:0:4365
-10465:2:1754
-10466:0:4365
-10467:3:3355
-10468:0:4365
-10469:2:1755
-10470:2:1759
-10471:2:1760
-10472:2:1768
-10473:2:1769
-10474:2:1773
-10475:2:1774
-10476:2:1768
-10477:2:1769
-10478:2:1773
-10479:2:1774
-10480:2:1782
-10481:2:1787
-10482:2:1791
-10483:2:1792
-10484:2:1799
-10485:2:1800
-10486:2:1811
-10487:2:1812
-10488:2:1813
-10489:2:1811
-10490:2:1812
-10491:2:1813
-10492:2:1824
-10493:2:1829
-10494:2:1830
-10495:0:4365
-10496:2:1842
-10497:0:4365
-10498:3:3354
-10499:0:4365
-10500:2:1844
-10501:0:4365
-10502:3:3355
-10503:0:4365
-10504:2:1845
-10505:2:1849
-10506:2:1850
-10507:2:1858
-10508:2:1859
-10509:2:1863
-10510:2:1864
-10511:2:1858
-10512:2:1859
-10513:2:1863
-10514:2:1864
-10515:2:1872
-10516:2:1877
-10517:2:1881
-10518:2:1882
-10519:2:1889
-10520:2:1890
-10521:2:1901
-10522:2:1902
-10523:2:1903
-10524:2:1901
-10525:2:1902
-10526:2:1903
-10527:2:1914
-10528:2:1919
-10529:2:1920
-10530:0:4365
-10531:2:1932
-10532:0:4365
-10533:3:3354
-10534:0:4365
-10535:2:1934
-10536:0:4365
-10537:3:3355
-10538:0:4365
-10539:2:1935
-10540:0:4365
-10541:2:1936
-10542:0:4365
-10543:2:2129
-10544:0:4365
-10545:2:2130
-10546:0:4365
-10547:2:2134
-10548:0:4365
-10549:3:3354
-10550:0:4365
-10551:2:2136
-10552:0:4365
-10553:3:3355
-10554:0:4365
-10555:2:2137
-10556:2:2141
-10557:2:2142
-10558:2:2150
-10559:2:2151
-10560:2:2155
-10561:2:2156
-10562:2:2150
-10563:2:2151
-10564:2:2155
-10565:2:2156
-10566:2:2164
-10567:2:2169
-10568:2:2173
-10569:2:2174
-10570:2:2181
-10571:2:2182
-10572:2:2193
-10573:2:2194
-10574:2:2195
-10575:2:2193
-10576:2:2194
-10577:2:2195
-10578:2:2206
-10579:2:2211
-10580:2:2212
-10581:0:4365
-10582:2:2224
-10583:0:4365
-10584:3:3354
-10585:0:4365
-10586:2:2226
-10587:0:4365
-10588:3:3355
-10589:0:4365
-10590:2:1936
-10591:0:4365
-10592:2:2129
-10593:0:4365
-10594:2:2130
-10595:0:4365
-10596:2:2134
-10597:0:4365
-10598:3:3354
-10599:0:4365
-10600:2:2136
-10601:0:4365
-10602:3:3355
-10603:0:4365
-10604:2:2137
-10605:2:2141
-10606:2:2142
-10607:2:2150
-10608:2:2151
-10609:2:2155
-10610:2:2156
-10611:2:2150
-10612:2:2151
-10613:2:2152
-10614:2:2164
-10615:2:2169
-10616:2:2173
-10617:2:2174
-10618:2:2181
-10619:2:2182
-10620:2:2193
-10621:2:2194
-10622:2:2195
-10623:2:2193
-10624:2:2194
-10625:2:2195
-10626:2:2206
-10627:2:2211
-10628:2:2212
-10629:0:4365
-10630:2:2224
-10631:0:4365
-10632:3:3354
-10633:0:4365
-10634:2:2226
-10635:0:4365
-10636:3:3355
-10637:0:4365
-10638:2:2230
-10639:0:4365
-10640:3:3354
-10641:0:4365
-10642:2:2235
-10643:2:2239
-10644:2:2240
-10645:2:2248
-10646:2:2249
-10647:2:2253
-10648:2:2254
-10649:2:2248
-10650:2:2249
-10651:2:2250
-10652:2:2262
-10653:2:2267
-10654:2:2271
-10655:2:2272
-10656:2:2279
-10657:2:2280
-10658:2:2291
-10659:2:2292
-10660:2:2293
-10661:2:2291
-10662:2:2292
-10663:2:2293
-10664:2:2304
-10665:2:2309
-10666:2:2310
-10667:0:4365
-10668:3:3355
-10669:0:4365
-10670:2:2322
-10671:0:4365
-10672:2:1169
-10673:0:4365
-10674:3:3354
-10675:0:4365
-10676:2:1170
-10677:0:4365
-10678:3:3355
-10679:0:4365
-10680:3:3356
-10681:0:4365
-10682:3:3366
-10683:0:4365
-10684:3:2951
-10685:0:4365
-10686:3:2952
-10687:0:4365
-10688:3:2953
-10689:0:4365
-10690:3:2954
-10691:3:2958
-10692:3:2959
-10693:3:2967
-10694:3:2968
-10695:3:2972
-10696:3:2973
-10697:3:2967
-10698:3:2968
-10699:3:2972
-10700:3:2973
-10701:3:2981
-10702:3:2986
-10703:3:2990
-10704:3:2991
-10705:3:2998
-10706:3:2999
-10707:3:3010
-10708:3:3011
-10709:3:3012
-10710:3:3010
-10711:3:3011
-10712:3:3012
-10713:3:3023
-10714:3:3028
-10715:3:3029
-10716:0:4365
-10717:3:3041
-10718:0:4365
-10719:3:3042
-10720:0:4365
-10721:2:1173
-10722:0:4365
-10723:3:3043
-10724:0:4365
-10725:2:1179
-10726:0:4365
-10727:2:1180
-10728:0:4365
-10729:3:3042
-10730:0:4365
-10731:2:1181
-10732:2:1185
-10733:2:1186
-10734:2:1194
-10735:2:1195
-10736:2:1199
-10737:2:1200
-10738:2:1194
-10739:2:1195
-10740:2:1199
-10741:2:1200
-10742:2:1208
-10743:2:1213
-10744:2:1217
-10745:2:1218
-10746:2:1225
-10747:2:1226
-10748:2:1237
-10749:2:1238
-10750:2:1239
-10751:2:1237
-10752:2:1238
-10753:2:1239
-10754:2:1250
-10755:2:1255
-10756:2:1256
-10757:0:4365
-10758:3:3043
-10759:0:4365
-10760:2:1268
-10761:0:4365
-10762:3:3042
-10763:0:4365
-10764:2:1270
-10765:0:4365
-10766:3:3043
-10767:0:4365
-10768:2:1271
-10769:2:1275
-10770:2:1276
-10771:2:1284
-10772:2:1285
-10773:2:1289
-10774:2:1290
-10775:2:1284
-10776:2:1285
-10777:2:1289
-10778:2:1290
-10779:2:1298
-10780:2:1303
-10781:2:1307
-10782:2:1308
-10783:2:1315
-10784:2:1316
-10785:2:1327
-10786:2:1328
-10787:2:1329
-10788:2:1327
-10789:2:1328
-10790:2:1329
-10791:2:1340
-10792:2:1345
-10793:2:1346
-10794:0:4365
-10795:2:1358
-10796:0:4365
-10797:2:1360
-10798:0:4365
-10799:3:3042
-10800:0:4365
-10801:2:1361
-10802:0:4365
-10803:3:3043
-10804:0:4365
-10805:2:1362
-10806:2:1366
-10807:2:1367
-10808:2:1375
-10809:2:1376
-10810:2:1380
-10811:2:1381
-10812:2:1375
-10813:2:1376
-10814:2:1380
-10815:2:1381
-10816:2:1389
-10817:2:1394
-10818:2:1398
-10819:2:1399
-10820:2:1406
-10821:2:1407
-10822:2:1418
-10823:2:1419
-10824:2:1420
-10825:2:1418
-10826:2:1419
-10827:2:1420
-10828:2:1431
-10829:2:1436
-10830:2:1437
-10831:0:4365
-10832:2:1449
-10833:0:4365
-10834:3:3042
-10835:0:4365
-10836:2:1451
-10837:0:4365
-10838:3:3043
-10839:0:4365
-10840:2:1652
-10841:0:4365
-10842:2:1653
-10843:0:4365
-10844:2:1657
-10845:0:4365
-10846:2:1180
-10847:0:4365
-10848:3:3042
-10849:0:4365
-10850:2:1181
-10851:2:1185
-10852:2:1186
-10853:2:1194
-10854:2:1195
-10855:2:1199
-10856:2:1200
-10857:2:1194
-10858:2:1195
-10859:2:1196
-10860:2:1208
-10861:2:1213
-10862:2:1217
-10863:2:1218
-10864:2:1225
-10865:2:1226
-10866:2:1237
-10867:2:1238
-10868:2:1239
-10869:2:1237
-10870:2:1238
-10871:2:1239
-10872:2:1250
-10873:2:1255
-10874:2:1256
-10875:0:4365
-10876:3:3043
-10877:0:4365
-10878:2:1268
-10879:0:4365
-10880:3:3042
-10881:0:4365
-10882:2:1270
-10883:0:4365
-10884:3:3043
-10885:0:4365
-10886:2:1271
-10887:2:1275
-10888:2:1276
-10889:2:1284
-10890:2:1285
-10891:2:1289
-10892:2:1290
-10893:2:1284
-10894:2:1285
-10895:2:1289
-10896:2:1290
-10897:2:1298
-10898:2:1303
-10899:2:1307
-10900:2:1308
-10901:2:1315
-10902:2:1316
-10903:2:1327
-10904:2:1328
-10905:2:1329
-10906:2:1327
-10907:2:1328
-10908:2:1329
-10909:2:1340
-10910:2:1345
-10911:2:1346
-10912:0:4365
-10913:2:1358
-10914:0:4365
-10915:2:1454
-10916:0:4365
-10917:3:3042
-10918:0:4365
-10919:2:1455
-10920:0:4365
-10921:3:3043
-10922:0:4365
-10923:2:1652
-10924:0:4365
-10925:2:1653
-10926:0:4365
-10927:2:1657
-10928:0:4365
-10929:2:1660
-10930:0:4365
-10931:3:3042
-10932:0:4365
-10933:2:1665
-10934:2:1669
-10935:2:1670
-10936:2:1678
-10937:2:1679
-10938:2:1683
-10939:2:1684
-10940:2:1678
-10941:2:1679
-10942:2:1680
-10943:2:1692
-10944:2:1697
-10945:2:1701
-10946:2:1702
-10947:2:1709
-10948:2:1710
-10949:2:1721
-10950:2:1722
-10951:2:1723
-10952:2:1721
-10953:2:1722
-10954:2:1723
-10955:2:1734
-10956:2:1739
-10957:2:1740
-10958:0:4365
-10959:3:3043
-10960:0:4365
-10961:2:1752
-10962:0:4365
-10963:3:3042
-10964:0:4365
-10965:2:1754
-10966:0:4365
-10967:3:3043
-10968:0:4365
-10969:2:1755
-10970:2:1759
-10971:2:1760
-10972:2:1768
-10973:2:1769
-10974:2:1773
-10975:2:1774
-10976:2:1768
-10977:2:1769
-10978:2:1773
-10979:2:1774
-10980:2:1782
-10981:2:1787
-10982:2:1791
-10983:2:1792
-10984:2:1799
-10985:2:1800
-10986:2:1811
-10987:2:1812
-10988:2:1813
-10989:2:1811
-10990:2:1812
-10991:2:1813
-10992:2:1824
-10993:2:1829
-10994:2:1830
-10995:0:4365
-10996:2:1842
-10997:0:4365
-10998:3:3042
-10999:0:4365
-11000:2:1844
-11001:0:4365
-11002:3:3043
-11003:0:4365
-11004:2:1845
-11005:2:1849
-11006:2:1850
-11007:2:1858
-11008:2:1859
-11009:2:1863
-11010:2:1864
-11011:2:1858
-11012:2:1859
-11013:2:1863
-11014:2:1864
-11015:2:1872
-11016:2:1877
-11017:2:1881
-11018:2:1882
-11019:2:1889
-11020:2:1890
-11021:2:1901
-11022:2:1902
-11023:2:1903
-11024:2:1901
-11025:2:1902
-11026:2:1903
-11027:2:1914
-11028:2:1919
-11029:2:1920
-11030:0:4365
-11031:2:1932
-11032:0:4365
-11033:3:3042
-11034:0:4365
-11035:2:1934
-11036:0:4365
-11037:3:3043
-11038:0:4365
-11039:2:1935
-11040:0:4365
-11041:2:1936
-11042:0:4365
-11043:2:2129
-11044:0:4365
-11045:2:2130
-11046:0:4365
-11047:2:2134
-11048:0:4365
-11049:3:3042
-11050:0:4365
-11051:2:2136
-11052:0:4365
-11053:3:3043
-11054:0:4365
-11055:2:2137
-11056:2:2141
-11057:2:2142
-11058:2:2150
-11059:2:2151
-11060:2:2155
-11061:2:2156
-11062:2:2150
-11063:2:2151
-11064:2:2155
-11065:2:2156
-11066:2:2164
-11067:2:2169
-11068:2:2173
-11069:2:2174
-11070:2:2181
-11071:2:2182
-11072:2:2193
-11073:2:2194
-11074:2:2195
-11075:2:2193
-11076:2:2194
-11077:2:2195
-11078:2:2206
-11079:2:2211
-11080:2:2212
-11081:0:4365
-11082:2:2224
-11083:0:4365
-11084:3:3042
-11085:0:4365
-11086:2:2226
-11087:0:4365
-11088:3:3043
-11089:0:4365
-11090:2:1936
-11091:0:4365
-11092:2:2129
-11093:0:4365
-11094:2:2130
-11095:0:4365
-11096:2:2134
-11097:0:4365
-11098:3:3042
-11099:0:4365
-11100:2:2136
-11101:0:4365
-11102:3:3043
-11103:0:4365
-11104:2:2137
-11105:2:2141
-11106:2:2142
-11107:2:2150
-11108:2:2151
-11109:2:2155
-11110:2:2156
-11111:2:2150
-11112:2:2151
-11113:2:2152
-11114:2:2164
-11115:2:2169
-11116:2:2173
-11117:2:2174
-11118:2:2181
-11119:2:2182
-11120:2:2193
-11121:2:2194
-11122:2:2195
-11123:2:2193
-11124:2:2194
-11125:2:2195
-11126:2:2206
-11127:2:2211
-11128:2:2212
-11129:0:4365
-11130:2:2224
-11131:0:4365
-11132:3:3042
-11133:0:4365
-11134:2:2226
-11135:0:4365
-11136:3:3043
-11137:0:4365
-11138:2:2230
-11139:0:4365
-11140:3:3042
-11141:0:4365
-11142:2:2235
-11143:2:2239
-11144:2:2240
-11145:2:2248
-11146:2:2249
-11147:2:2253
-11148:2:2254
-11149:2:2248
-11150:2:2249
-11151:2:2250
-11152:2:2262
-11153:2:2267
-11154:2:2271
-11155:2:2272
-11156:2:2279
-11157:2:2280
-11158:2:2291
-11159:2:2292
-11160:2:2293
-11161:2:2291
-11162:2:2292
-11163:2:2293
-11164:2:2304
-11165:2:2309
-11166:2:2310
-11167:0:4365
-11168:3:3043
-11169:0:4365
-11170:2:2322
-11171:0:4365
-11172:2:1169
-11173:0:4365
-11174:3:3042
-11175:0:4365
-11176:2:1170
-11177:0:4365
-11178:3:3043
-11179:0:4365
-11180:3:3044
-11181:0:4365
-11182:3:3257
-11183:0:4365
-11184:3:3362
-11185:0:4365
-11186:3:3363
-11187:0:4365
-11188:3:3367
-11189:0:4365
-11190:3:3373
-11191:3:3377
-11192:3:3378
-11193:3:3386
-11194:3:3387
-11195:3:3391
-11196:3:3392
-11197:3:3386
-11198:3:3387
-11199:3:3391
-11200:3:3392
-11201:3:3400
-11202:3:3405
-11203:3:3409
-11204:3:3410
-11205:3:3417
-11206:3:3418
-11207:3:3429
-11208:3:3430
-11209:3:3431
-11210:3:3429
-11211:3:3430
-11212:3:3431
-11213:3:3442
-11214:3:3447
-11215:3:3448
-11216:0:4365
-11217:3:3460
-11218:0:4365
-11219:3:3461
-11220:0:4365
-11221:2:1173
-11222:0:4365
-11223:3:3462
-11224:0:4365
-11225:2:1179
-11226:0:4365
-11227:2:1180
-11228:0:4365
-11229:3:3461
-11230:0:4365
-11231:2:1181
-11232:2:1185
-11233:2:1186
-11234:2:1194
-11235:2:1195
-11236:2:1199
-11237:2:1200
-11238:2:1194
-11239:2:1195
-11240:2:1199
-11241:2:1200
-11242:2:1208
-11243:2:1213
-11244:2:1217
-11245:2:1218
-11246:2:1225
-11247:2:1226
-11248:2:1237
-11249:2:1238
-11250:2:1239
-11251:2:1237
-11252:2:1238
-11253:2:1239
-11254:2:1250
-11255:2:1255
-11256:2:1256
-11257:0:4365
-11258:3:3462
-11259:0:4365
-11260:2:1268
-11261:0:4365
-11262:3:3461
-11263:0:4365
-11264:2:1270
-11265:0:4365
-11266:3:3462
-11267:0:4365
-11268:2:1271
-11269:2:1275
-11270:2:1276
-11271:2:1284
-11272:2:1285
-11273:2:1289
-11274:2:1290
-11275:2:1284
-11276:2:1285
-11277:2:1289
-11278:2:1290
-11279:2:1298
-11280:2:1303
-11281:2:1307
-11282:2:1308
-11283:2:1315
-11284:2:1316
-11285:2:1327
-11286:2:1328
-11287:2:1329
-11288:2:1327
-11289:2:1328
-11290:2:1329
-11291:2:1340
-11292:2:1345
-11293:2:1346
-11294:0:4365
-11295:2:1358
-11296:0:4365
-11297:2:1360
-11298:0:4365
-11299:3:3461
-11300:0:4365
-11301:2:1361
-11302:0:4365
-11303:3:3462
-11304:0:4365
-11305:2:1362
-11306:2:1366
-11307:2:1367
-11308:2:1375
-11309:2:1376
-11310:2:1380
-11311:2:1381
-11312:2:1375
-11313:2:1376
-11314:2:1380
-11315:2:1381
-11316:2:1389
-11317:2:1394
-11318:2:1398
-11319:2:1399
-11320:2:1406
-11321:2:1407
-11322:2:1418
-11323:2:1419
-11324:2:1420
-11325:2:1418
-11326:2:1419
-11327:2:1420
-11328:2:1431
-11329:2:1436
-11330:2:1437
-11331:0:4365
-11332:2:1449
-11333:0:4365
-11334:3:3461
-11335:0:4365
-11336:2:1451
-11337:0:4365
-11338:3:3462
-11339:0:4365
-11340:2:1652
-11341:0:4365
-11342:2:1653
-11343:0:4365
-11344:2:1657
-11345:0:4365
-11346:2:1180
-11347:0:4365
-11348:3:3461
-11349:0:4365
-11350:2:1181
-11351:2:1185
-11352:2:1186
-11353:2:1194
-11354:2:1195
-11355:2:1199
-11356:2:1200
-11357:2:1194
-11358:2:1195
-11359:2:1196
-11360:2:1208
-11361:2:1213
-11362:2:1217
-11363:2:1218
-11364:2:1225
-11365:2:1226
-11366:2:1237
-11367:2:1238
-11368:2:1239
-11369:2:1237
-11370:2:1238
-11371:2:1239
-11372:2:1250
-11373:2:1255
-11374:2:1256
-11375:0:4365
-11376:3:3462
-11377:0:4365
-11378:2:1268
-11379:0:4365
-11380:3:3461
-11381:0:4365
-11382:2:1270
-11383:0:4365
-11384:3:3462
-11385:0:4365
-11386:2:1271
-11387:2:1275
-11388:2:1276
-11389:2:1284
-11390:2:1285
-11391:2:1289
-11392:2:1290
-11393:2:1284
-11394:2:1285
-11395:2:1289
-11396:2:1290
-11397:2:1298
-11398:2:1303
-11399:2:1307
-11400:2:1308
-11401:2:1315
-11402:2:1316
-11403:2:1327
-11404:2:1328
-11405:2:1329
-11406:2:1327
-11407:2:1328
-11408:2:1329
-11409:2:1340
-11410:2:1345
-11411:2:1346
-11412:0:4365
-11413:2:1358
-11414:0:4365
-11415:2:1454
-11416:0:4365
-11417:3:3461
-11418:0:4365
-11419:2:1455
-11420:0:4365
-11421:3:3462
-11422:0:4365
-11423:2:1652
-11424:0:4365
-11425:2:1653
-11426:0:4365
-11427:2:1657
-11428:0:4365
-11429:2:1660
-11430:0:4365
-11431:3:3461
-11432:0:4365
-11433:2:1665
-11434:2:1669
-11435:2:1670
-11436:2:1678
-11437:2:1679
-11438:2:1683
-11439:2:1684
-11440:2:1678
-11441:2:1679
-11442:2:1680
-11443:2:1692
-11444:2:1697
-11445:2:1701
-11446:2:1702
-11447:2:1709
-11448:2:1710
-11449:2:1721
-11450:2:1722
-11451:2:1723
-11452:2:1721
-11453:2:1722
-11454:2:1723
-11455:2:1734
-11456:2:1739
-11457:2:1740
-11458:0:4365
-11459:3:3462
-11460:0:4365
-11461:2:1752
-11462:0:4365
-11463:3:3461
-11464:0:4365
-11465:2:1754
-11466:0:4365
-11467:3:3462
-11468:0:4365
-11469:2:1755
-11470:2:1759
-11471:2:1760
-11472:2:1768
-11473:2:1769
-11474:2:1773
-11475:2:1774
-11476:2:1768
-11477:2:1769
-11478:2:1773
-11479:2:1774
-11480:2:1782
-11481:2:1787
-11482:2:1791
-11483:2:1792
-11484:2:1799
-11485:2:1800
-11486:2:1811
-11487:2:1812
-11488:2:1813
-11489:2:1811
-11490:2:1812
-11491:2:1813
-11492:2:1824
-11493:2:1829
-11494:2:1830
-11495:0:4365
-11496:2:1842
-11497:0:4365
-11498:3:3461
-11499:0:4365
-11500:2:1844
-11501:0:4365
-11502:3:3462
-11503:0:4365
-11504:2:1845
-11505:2:1849
-11506:2:1850
-11507:2:1858
-11508:2:1859
-11509:2:1863
-11510:2:1864
-11511:2:1858
-11512:2:1859
-11513:2:1863
-11514:2:1864
-11515:2:1872
-11516:2:1877
-11517:2:1881
-11518:2:1882
-11519:2:1889
-11520:2:1890
-11521:2:1901
-11522:2:1902
-11523:2:1903
-11524:2:1901
-11525:2:1902
-11526:2:1903
-11527:2:1914
-11528:2:1919
-11529:2:1920
-11530:0:4365
-11531:2:1932
-11532:0:4365
-11533:3:3461
-11534:0:4365
-11535:2:1934
-11536:0:4365
-11537:3:3462
-11538:0:4365
-11539:2:1935
-11540:0:4365
-11541:2:1936
-11542:0:4365
-11543:2:2129
-11544:0:4365
-11545:2:2130
-11546:0:4365
-11547:2:2134
-11548:0:4365
-11549:3:3461
-11550:0:4365
-11551:2:2136
-11552:0:4365
-11553:3:3462
-11554:0:4365
-11555:2:2137
-11556:2:2141
-11557:2:2142
-11558:2:2150
-11559:2:2151
-11560:2:2155
-11561:2:2156
-11562:2:2150
-11563:2:2151
-11564:2:2155
-11565:2:2156
-11566:2:2164
-11567:2:2169
-11568:2:2173
-11569:2:2174
-11570:2:2181
-11571:2:2182
-11572:2:2193
-11573:2:2194
-11574:2:2195
-11575:2:2193
-11576:2:2194
-11577:2:2195
-11578:2:2206
-11579:2:2211
-11580:2:2212
-11581:0:4365
-11582:2:2224
-11583:0:4365
-11584:3:3461
-11585:0:4365
-11586:2:2226
-11587:0:4365
-11588:3:3462
-11589:0:4365
-11590:2:1936
-11591:0:4365
-11592:2:2129
-11593:0:4365
-11594:2:2130
-11595:0:4365
-11596:2:2134
-11597:0:4365
-11598:3:3461
-11599:0:4365
-11600:2:2136
-11601:0:4365
-11602:3:3462
-11603:0:4365
-11604:2:2137
-11605:2:2141
-11606:2:2142
-11607:2:2150
-11608:2:2151
-11609:2:2155
-11610:2:2156
-11611:2:2150
-11612:2:2151
-11613:2:2152
-11614:2:2164
-11615:2:2169
-11616:2:2173
-11617:2:2174
-11618:2:2181
-11619:2:2182
-11620:2:2193
-11621:2:2194
-11622:2:2195
-11623:2:2193
-11624:2:2194
-11625:2:2195
-11626:2:2206
-11627:2:2211
-11628:2:2212
-11629:0:4365
-11630:2:2224
-11631:0:4365
-11632:3:3461
-11633:0:4365
-11634:2:2226
-11635:0:4365
-11636:3:3462
-11637:0:4365
-11638:2:2230
-11639:0:4365
-11640:3:3461
-11641:0:4365
-11642:2:2235
-11643:2:2239
-11644:2:2240
-11645:2:2248
-11646:2:2249
-11647:2:2253
-11648:2:2254
-11649:2:2248
-11650:2:2249
-11651:2:2250
-11652:2:2262
-11653:2:2267
-11654:2:2271
-11655:2:2272
-11656:2:2279
-11657:2:2280
-11658:2:2291
-11659:2:2292
-11660:2:2293
-11661:2:2291
-11662:2:2292
-11663:2:2293
-11664:2:2304
-11665:2:2309
-11666:2:2310
-11667:0:4365
-11668:3:3462
-11669:0:4365
-11670:2:2322
-11671:0:4365
-11672:2:1169
-11673:0:4365
-11674:3:3461
-11675:0:4365
-11676:2:1170
-11677:0:4365
-11678:3:3462
-11679:0:4365
-11680:3:3463
-11681:0:4365
-11682:3:3469
-11683:0:4365
-11684:3:3470
-11685:3:3474
-11686:3:3475
-11687:3:3483
-11688:3:3484
-11689:3:3488
-11690:3:3489
-11691:3:3483
-11692:3:3484
-11693:3:3488
-11694:3:3489
-11695:3:3497
-11696:3:3502
-11697:3:3506
-11698:3:3507
-11699:3:3514
-11700:3:3515
-11701:3:3526
-11702:3:3527
-11703:3:3528
-11704:3:3526
-11705:3:3527
-11706:3:3528
-11707:3:3539
-11708:3:3544
-11709:3:3545
-11710:0:4365
-11711:3:3557
-11712:0:4365
-11713:3:3558
-11714:0:4365
-11715:2:1173
-11716:0:4365
-11717:3:3559
-11718:0:4365
-11719:2:1179
-11720:0:4365
-11721:2:1180
-11722:0:4365
-11723:3:3558
-11724:0:4365
-11725:2:1181
-11726:2:1185
-11727:2:1186
-11728:2:1194
-11729:2:1195
-11730:2:1199
-11731:2:1200
-11732:2:1194
-11733:2:1195
-11734:2:1199
-11735:2:1200
-11736:2:1208
-11737:2:1213
-11738:2:1217
-11739:2:1218
-11740:2:1225
-11741:2:1226
-11742:2:1237
-11743:2:1238
-11744:2:1239
-11745:2:1237
-11746:2:1238
-11747:2:1239
-11748:2:1250
-11749:2:1255
-11750:2:1256
-11751:0:4365
-11752:3:3559
-11753:0:4365
-11754:2:1268
-11755:0:4365
-11756:3:3558
-11757:0:4365
-11758:2:1270
-11759:0:4365
-11760:3:3559
-11761:0:4365
-11762:2:1271
-11763:2:1275
-11764:2:1276
-11765:2:1284
-11766:2:1285
-11767:2:1289
-11768:2:1290
-11769:2:1284
-11770:2:1285
-11771:2:1289
-11772:2:1290
-11773:2:1298
-11774:2:1303
-11775:2:1307
-11776:2:1308
-11777:2:1315
-11778:2:1316
-11779:2:1327
-11780:2:1328
-11781:2:1329
-11782:2:1327
-11783:2:1328
-11784:2:1329
-11785:2:1340
-11786:2:1345
-11787:2:1346
-11788:0:4365
-11789:2:1358
-11790:0:4365
-11791:2:1360
-11792:0:4365
-11793:3:3558
-11794:0:4365
-11795:2:1361
-11796:0:4365
-11797:3:3559
-11798:0:4365
-11799:2:1362
-11800:2:1366
-11801:2:1367
-11802:2:1375
-11803:2:1376
-11804:2:1380
-11805:2:1381
-11806:2:1375
-11807:2:1376
-11808:2:1380
-11809:2:1381
-11810:2:1389
-11811:2:1394
-11812:2:1398
-11813:2:1399
-11814:2:1406
-11815:2:1407
-11816:2:1418
-11817:2:1419
-11818:2:1420
-11819:2:1418
-11820:2:1419
-11821:2:1420
-11822:2:1431
-11823:2:1436
-11824:2:1437
-11825:0:4365
-11826:2:1449
-11827:0:4365
-11828:3:3558
-11829:0:4365
-11830:2:1451
-11831:0:4365
-11832:3:3559
-11833:0:4365
-11834:2:1652
-11835:0:4365
-11836:2:1653
-11837:0:4365
-11838:2:1657
-11839:0:4365
-11840:2:1180
-11841:0:4365
-11842:3:3558
-11843:0:4365
-11844:2:1181
-11845:2:1185
-11846:2:1186
-11847:2:1194
-11848:2:1195
-11849:2:1199
-11850:2:1200
-11851:2:1194
-11852:2:1195
-11853:2:1196
-11854:2:1208
-11855:2:1213
-11856:2:1217
-11857:2:1218
-11858:2:1225
-11859:2:1226
-11860:2:1237
-11861:2:1238
-11862:2:1239
-11863:2:1237
-11864:2:1238
-11865:2:1239
-11866:2:1250
-11867:2:1255
-11868:2:1256
-11869:0:4365
-11870:3:3559
-11871:0:4365
-11872:2:1268
-11873:0:4365
-11874:3:3558
-11875:0:4365
-11876:2:1270
-11877:0:4365
-11878:3:3559
-11879:0:4365
-11880:2:1271
-11881:2:1275
-11882:2:1276
-11883:2:1284
-11884:2:1285
-11885:2:1289
-11886:2:1290
-11887:2:1284
-11888:2:1285
-11889:2:1289
-11890:2:1290
-11891:2:1298
-11892:2:1303
-11893:2:1307
-11894:2:1308
-11895:2:1315
-11896:2:1316
-11897:2:1327
-11898:2:1328
-11899:2:1329
-11900:2:1327
-11901:2:1328
-11902:2:1329
-11903:2:1340
-11904:2:1345
-11905:2:1346
-11906:0:4365
-11907:2:1358
-11908:0:4365
-11909:2:1454
-11910:0:4365
-11911:3:3558
-11912:0:4365
-11913:2:1455
-11914:0:4365
-11915:3:3559
-11916:0:4365
-11917:2:1652
-11918:0:4365
-11919:2:1653
-11920:0:4365
-11921:2:1657
-11922:0:4365
-11923:2:1660
-11924:0:4365
-11925:3:3558
-11926:0:4365
-11927:2:1665
-11928:2:1669
-11929:2:1670
-11930:2:1678
-11931:2:1679
-11932:2:1683
-11933:2:1684
-11934:2:1678
-11935:2:1679
-11936:2:1680
-11937:2:1692
-11938:2:1697
-11939:2:1701
-11940:2:1702
-11941:2:1709
-11942:2:1710
-11943:2:1721
-11944:2:1722
-11945:2:1723
-11946:2:1721
-11947:2:1722
-11948:2:1723
-11949:2:1734
-11950:2:1739
-11951:2:1740
-11952:0:4365
-11953:3:3559
-11954:0:4365
-11955:2:1752
-11956:0:4365
-11957:3:3558
-11958:0:4365
-11959:2:1754
-11960:0:4365
-11961:3:3559
-11962:0:4365
-11963:2:1755
-11964:2:1759
-11965:2:1760
-11966:2:1768
-11967:2:1769
-11968:2:1773
-11969:2:1774
-11970:2:1768
-11971:2:1769
-11972:2:1773
-11973:2:1774
-11974:2:1782
-11975:2:1787
-11976:2:1791
-11977:2:1792
-11978:2:1799
-11979:2:1800
-11980:2:1811
-11981:2:1812
-11982:2:1813
-11983:2:1811
-11984:2:1812
-11985:2:1813
-11986:2:1824
-11987:2:1829
-11988:2:1830
-11989:0:4365
-11990:2:1842
-11991:0:4365
-11992:3:3558
-11993:0:4365
-11994:2:1844
-11995:0:4365
-11996:3:3559
-11997:0:4365
-11998:2:1845
-11999:2:1849
-12000:2:1850
-12001:2:1858
-12002:2:1859
-12003:2:1863
-12004:2:1864
-12005:2:1858
-12006:2:1859
-12007:2:1863
-12008:2:1864
-12009:2:1872
-12010:2:1877
-12011:2:1881
-12012:2:1882
-12013:2:1889
-12014:2:1890
-12015:2:1901
-12016:2:1902
-12017:2:1903
-12018:2:1901
-12019:2:1902
-12020:2:1903
-12021:2:1914
-12022:2:1919
-12023:2:1920
-12024:0:4365
-12025:2:1932
-12026:0:4365
-12027:3:3558
-12028:0:4365
-12029:2:1934
-12030:0:4365
-12031:3:3559
-12032:0:4365
-12033:2:1935
-12034:0:4365
-12035:2:1936
-12036:0:4365
-12037:2:2129
-12038:0:4365
-12039:2:2130
-12040:0:4365
-12041:2:2134
-12042:0:4365
-12043:3:3558
-12044:0:4365
-12045:2:2136
-12046:0:4365
-12047:3:3559
-12048:0:4365
-12049:2:2137
-12050:2:2141
-12051:2:2142
-12052:2:2150
-12053:2:2151
-12054:2:2155
-12055:2:2156
-12056:2:2150
-12057:2:2151
-12058:2:2155
-12059:2:2156
-12060:2:2164
-12061:2:2169
-12062:2:2173
-12063:2:2174
-12064:2:2181
-12065:2:2182
-12066:2:2193
-12067:2:2194
-12068:2:2195
-12069:2:2193
-12070:2:2194
-12071:2:2195
-12072:2:2206
-12073:2:2211
-12074:2:2212
-12075:0:4365
-12076:2:2224
-12077:0:4365
-12078:3:3558
-12079:0:4365
-12080:2:2226
-12081:0:4365
-12082:3:3559
-12083:0:4365
-12084:2:1936
-12085:0:4365
-12086:2:2129
-12087:0:4365
-12088:2:2130
-12089:0:4365
-12090:2:2134
-12091:0:4365
-12092:3:3558
-12093:0:4365
-12094:2:2136
-12095:0:4365
-12096:3:3559
-12097:0:4365
-12098:2:2137
-12099:2:2141
-12100:2:2142
-12101:2:2150
-12102:2:2151
-12103:2:2155
-12104:2:2156
-12105:2:2150
-12106:2:2151
-12107:2:2152
-12108:2:2164
-12109:2:2169
-12110:2:2173
-12111:2:2174
-12112:2:2181
-12113:2:2182
-12114:2:2193
-12115:2:2194
-12116:2:2195
-12117:2:2193
-12118:2:2194
-12119:2:2195
-12120:2:2206
-12121:2:2211
-12122:2:2212
-12123:0:4365
-12124:2:2224
-12125:0:4365
-12126:3:3558
-12127:0:4365
-12128:2:2226
-12129:0:4365
-12130:3:3559
-12131:0:4365
-12132:2:2230
-12133:0:4365
-12134:3:3558
-12135:0:4365
-12136:2:2235
-12137:2:2239
-12138:2:2240
-12139:2:2248
-12140:2:2249
-12141:2:2253
-12142:2:2254
-12143:2:2248
-12144:2:2249
-12145:2:2250
-12146:2:2262
-12147:2:2267
-12148:2:2271
-12149:2:2272
-12150:2:2279
-12151:2:2280
-12152:2:2291
-12153:2:2292
-12154:2:2293
-12155:2:2291
-12156:2:2292
-12157:2:2293
-12158:2:2304
-12159:2:2309
-12160:2:2310
-12161:0:4365
-12162:3:3559
-12163:0:4365
-12164:2:2322
-12165:0:4365
-12166:2:1169
-12167:0:4365
-12168:3:3558
-12169:0:4365
-12170:2:1170
-12171:0:4365
-12172:3:3559
-12173:0:4365
-12174:3:3560
-12175:0:4365
-12176:3:3566
-12177:0:4365
-12178:3:3569
-12179:3:3570
-12180:3:3582
-12181:3:3583
-12182:3:3587
-12183:3:3588
-12184:3:3582
-12185:3:3583
-12186:3:3587
-12187:3:3588
-12188:3:3596
-12189:3:3601
-12190:3:3605
-12191:3:3606
-12192:3:3613
-12193:3:3614
-12194:3:3625
-12195:3:3626
-12196:3:3627
-12197:3:3625
-12198:3:3626
-12199:3:3627
-12200:3:3638
-12201:3:3643
-12202:3:3644
-12203:0:4365
-12204:3:3656
-12205:0:4365
-12206:3:3657
-12207:0:4365
-12208:2:1173
-12209:0:4365
-12210:3:3658
-12211:0:4365
-12212:2:1179
-12213:0:4365
-12214:2:1180
-12215:0:4365
-12216:3:3657
-12217:0:4365
-12218:2:1181
-12219:2:1185
-12220:2:1186
-12221:2:1194
-12222:2:1195
-12223:2:1199
-12224:2:1200
-12225:2:1194
-12226:2:1195
-12227:2:1199
-12228:2:1200
-12229:2:1208
-12230:2:1213
-12231:2:1217
-12232:2:1218
-12233:2:1225
-12234:2:1226
-12235:2:1237
-12236:2:1238
-12237:2:1239
-12238:2:1237
-12239:2:1238
-12240:2:1239
-12241:2:1250
-12242:2:1255
-12243:2:1256
-12244:0:4365
-12245:3:3658
-12246:0:4365
-12247:2:1268
-12248:0:4365
-12249:3:3657
-12250:0:4365
-12251:2:1270
-12252:0:4365
-12253:3:3658
-12254:0:4365
-12255:2:1271
-12256:2:1275
-12257:2:1276
-12258:2:1284
-12259:2:1285
-12260:2:1289
-12261:2:1290
-12262:2:1284
-12263:2:1285
-12264:2:1289
-12265:2:1290
-12266:2:1298
-12267:2:1303
-12268:2:1307
-12269:2:1308
-12270:2:1315
-12271:2:1316
-12272:2:1327
-12273:2:1328
-12274:2:1329
-12275:2:1327
-12276:2:1328
-12277:2:1329
-12278:2:1340
-12279:2:1345
-12280:2:1346
-12281:0:4365
-12282:2:1358
-12283:0:4365
-12284:2:1360
-12285:0:4365
-12286:3:3657
-12287:0:4365
-12288:2:1361
-12289:0:4365
-12290:3:3658
-12291:0:4365
-12292:2:1362
-12293:2:1366
-12294:2:1367
-12295:2:1375
-12296:2:1376
-12297:2:1380
-12298:2:1381
-12299:2:1375
-12300:2:1376
-12301:2:1380
-12302:2:1381
-12303:2:1389
-12304:2:1394
-12305:2:1398
-12306:2:1399
-12307:2:1406
-12308:2:1407
-12309:2:1418
-12310:2:1419
-12311:2:1420
-12312:2:1418
-12313:2:1419
-12314:2:1420
-12315:2:1431
-12316:2:1436
-12317:2:1437
-12318:0:4365
-12319:2:1449
-12320:0:4365
-12321:3:3657
-12322:0:4365
-12323:2:1451
-12324:0:4365
-12325:3:3658
-12326:0:4365
-12327:2:1652
-12328:0:4365
-12329:2:1653
-12330:0:4365
-12331:2:1657
-12332:0:4365
-12333:2:1180
-12334:0:4365
-12335:3:3657
-12336:0:4365
-12337:2:1181
-12338:2:1185
-12339:2:1186
-12340:2:1194
-12341:2:1195
-12342:2:1199
-12343:2:1200
-12344:2:1194
-12345:2:1195
-12346:2:1196
-12347:2:1208
-12348:2:1213
-12349:2:1217
-12350:2:1218
-12351:2:1225
-12352:2:1226
-12353:2:1237
-12354:2:1238
-12355:2:1239
-12356:2:1237
-12357:2:1238
-12358:2:1239
-12359:2:1250
-12360:2:1255
-12361:2:1256
-12362:0:4365
-12363:3:3658
-12364:0:4365
-12365:2:1268
-12366:0:4365
-12367:3:3657
-12368:0:4365
-12369:2:1270
-12370:0:4365
-12371:3:3658
-12372:0:4365
-12373:2:1271
-12374:2:1275
-12375:2:1276
-12376:2:1284
-12377:2:1285
-12378:2:1289
-12379:2:1290
-12380:2:1284
-12381:2:1285
-12382:2:1289
-12383:2:1290
-12384:2:1298
-12385:2:1303
-12386:2:1307
-12387:2:1308
-12388:2:1315
-12389:2:1316
-12390:2:1327
-12391:2:1328
-12392:2:1329
-12393:2:1327
-12394:2:1328
-12395:2:1329
-12396:2:1340
-12397:2:1345
-12398:2:1346
-12399:0:4365
-12400:2:1358
-12401:0:4365
-12402:2:1454
-12403:0:4365
-12404:3:3657
-12405:0:4365
-12406:2:1455
-12407:0:4365
-12408:3:3658
-12409:0:4365
-12410:2:1652
-12411:0:4365
-12412:2:1653
-12413:0:4365
-12414:2:1657
-12415:0:4365
-12416:2:1660
-12417:0:4365
-12418:3:3657
-12419:0:4365
-12420:2:1665
-12421:2:1669
-12422:2:1670
-12423:2:1678
-12424:2:1679
-12425:2:1683
-12426:2:1684
-12427:2:1678
-12428:2:1679
-12429:2:1680
-12430:2:1692
-12431:2:1697
-12432:2:1701
-12433:2:1702
-12434:2:1709
-12435:2:1710
-12436:2:1721
-12437:2:1722
-12438:2:1723
-12439:2:1721
-12440:2:1722
-12441:2:1723
-12442:2:1734
-12443:2:1739
-12444:2:1740
-12445:0:4365
-12446:3:3658
-12447:0:4365
-12448:2:1752
-12449:0:4365
-12450:3:3657
-12451:0:4365
-12452:2:1754
-12453:0:4365
-12454:3:3658
-12455:0:4365
-12456:2:1755
-12457:2:1759
-12458:2:1760
-12459:2:1768
-12460:2:1769
-12461:2:1773
-12462:2:1774
-12463:2:1768
-12464:2:1769
-12465:2:1773
-12466:2:1774
-12467:2:1782
-12468:2:1787
-12469:2:1791
-12470:2:1792
-12471:2:1799
-12472:2:1800
-12473:2:1811
-12474:2:1812
-12475:2:1813
-12476:2:1811
-12477:2:1812
-12478:2:1813
-12479:2:1824
-12480:2:1829
-12481:2:1830
-12482:0:4365
-12483:2:1842
-12484:0:4365
-12485:3:3657
-12486:0:4365
-12487:2:1844
-12488:0:4365
-12489:3:3658
-12490:0:4365
-12491:2:1845
-12492:2:1849
-12493:2:1850
-12494:2:1858
-12495:2:1859
-12496:2:1863
-12497:2:1864
-12498:2:1858
-12499:2:1859
-12500:2:1863
-12501:2:1864
-12502:2:1872
-12503:2:1877
-12504:2:1881
-12505:2:1882
-12506:2:1889
-12507:2:1890
-12508:2:1901
-12509:2:1902
-12510:2:1903
-12511:2:1901
-12512:2:1902
-12513:2:1903
-12514:2:1914
-12515:2:1919
-12516:2:1920
-12517:0:4365
-12518:2:1932
-12519:0:4365
-12520:3:3657
-12521:0:4365
-12522:2:1934
-12523:0:4365
-12524:3:3658
-12525:0:4365
-12526:2:1935
-12527:0:4365
-12528:2:1936
-12529:0:4365
-12530:2:2129
-12531:0:4365
-12532:2:2130
-12533:0:4365
-12534:2:2134
-12535:0:4365
-12536:3:3657
-12537:0:4365
-12538:2:2136
-12539:0:4365
-12540:3:3658
-12541:0:4365
-12542:2:2137
-12543:2:2141
-12544:2:2142
-12545:2:2150
-12546:2:2151
-12547:2:2155
-12548:2:2156
-12549:2:2150
-12550:2:2151
-12551:2:2155
-12552:2:2156
-12553:2:2164
-12554:2:2169
-12555:2:2173
-12556:2:2174
-12557:2:2181
-12558:2:2182
-12559:2:2193
-12560:2:2194
-12561:2:2195
-12562:2:2193
-12563:2:2194
-12564:2:2195
-12565:2:2206
-12566:2:2211
-12567:2:2212
-12568:0:4365
-12569:2:2224
-12570:0:4365
-12571:3:3657
-12572:0:4365
-12573:2:2226
-12574:0:4365
-12575:3:3658
-12576:0:4365
-12577:2:1936
-12578:0:4365
-12579:2:2129
-12580:0:4365
-12581:2:2130
-12582:0:4365
-12583:2:2134
-12584:0:4365
-12585:3:3657
-12586:0:4365
-12587:2:2136
-12588:0:4365
-12589:3:3658
-12590:0:4365
-12591:2:2137
-12592:2:2141
-12593:2:2142
-12594:2:2150
-12595:2:2151
-12596:2:2155
-12597:2:2156
-12598:2:2150
-12599:2:2151
-12600:2:2152
-12601:2:2164
-12602:2:2169
-12603:2:2173
-12604:2:2174
-12605:2:2181
-12606:2:2182
-12607:2:2193
-12608:2:2194
-12609:2:2195
-12610:2:2193
-12611:2:2194
-12612:2:2195
-12613:2:2206
-12614:2:2211
-12615:2:2212
-12616:0:4365
-12617:2:2224
-12618:0:4365
-12619:3:3657
-12620:0:4365
-12621:2:2226
-12622:0:4365
-12623:3:3658
-12624:0:4365
-12625:2:2230
-12626:0:4365
-12627:3:3657
-12628:0:4365
-12629:2:2235
-12630:2:2239
-12631:2:2240
-12632:2:2248
-12633:2:2249
-12634:2:2253
-12635:2:2254
-12636:2:2248
-12637:2:2249
-12638:2:2250
-12639:2:2262
-12640:2:2267
-12641:2:2271
-12642:2:2272
-12643:2:2279
-12644:2:2280
-12645:2:2291
-12646:2:2292
-12647:2:2293
-12648:2:2291
-12649:2:2292
-12650:2:2293
-12651:2:2304
-12652:2:2309
-12653:2:2310
-12654:0:4365
-12655:3:3658
-12656:0:4365
-12657:2:2322
-12658:0:4365
-12659:2:1169
-12660:0:4365
-12661:3:3657
-12662:0:4365
-12663:2:1170
-12664:0:4365
-12665:3:3658
-12666:0:4365
-12667:3:3659
-12668:0:4365
-12669:3:3665
-12670:0:4365
-12671:3:3666
-12672:0:4365
-12673:3:3667
-12674:0:4365
-12675:3:3668
-12676:0:4365
-12677:3:3669
-12678:3:3673
-12679:3:3674
-12680:3:3682
-12681:3:3683
-12682:3:3687
-12683:3:3688
-12684:3:3682
-12685:3:3683
-12686:3:3687
-12687:3:3688
-12688:3:3696
-12689:3:3701
-12690:3:3705
-12691:3:3706
-12692:3:3713
-12693:3:3714
-12694:3:3725
-12695:3:3726
-12696:3:3727
-12697:3:3725
-12698:3:3726
-12699:3:3727
-12700:3:3738
-12701:3:3743
-12702:3:3744
-12703:0:4365
-12704:3:3756
-12705:0:4365
-12706:3:3757
-12707:0:4365
-12708:2:1173
-12709:0:4365
-12710:3:3758
-12711:0:4365
-12712:2:1179
-12713:0:4365
-12714:2:1180
-12715:0:4365
-12716:3:3757
-12717:0:4365
-12718:2:1181
-12719:2:1185
-12720:2:1186
-12721:2:1194
-12722:2:1195
-12723:2:1199
-12724:2:1200
-12725:2:1194
-12726:2:1195
-12727:2:1199
-12728:2:1200
-12729:2:1208
-12730:2:1213
-12731:2:1217
-12732:2:1218
-12733:2:1225
-12734:2:1226
-12735:2:1237
-12736:2:1238
-12737:2:1239
-12738:2:1237
-12739:2:1238
-12740:2:1239
-12741:2:1250
-12742:2:1255
-12743:2:1256
-12744:0:4365
-12745:3:3758
-12746:0:4365
-12747:2:1268
-12748:0:4365
-12749:3:3757
-12750:0:4365
-12751:2:1270
-12752:0:4365
-12753:3:3758
-12754:0:4365
-12755:2:1271
-12756:2:1275
-12757:2:1276
-12758:2:1284
-12759:2:1285
-12760:2:1289
-12761:2:1290
-12762:2:1284
-12763:2:1285
-12764:2:1289
-12765:2:1290
-12766:2:1298
-12767:2:1303
-12768:2:1307
-12769:2:1308
-12770:2:1315
-12771:2:1316
-12772:2:1327
-12773:2:1328
-12774:2:1329
-12775:2:1327
-12776:2:1328
-12777:2:1329
-12778:2:1340
-12779:2:1345
-12780:2:1346
-12781:0:4365
-12782:2:1358
-12783:0:4365
-12784:2:1360
-12785:0:4365
-12786:3:3757
-12787:0:4365
-12788:2:1361
-12789:0:4365
-12790:3:3758
-12791:0:4365
-12792:2:1362
-12793:2:1366
-12794:2:1367
-12795:2:1375
-12796:2:1376
-12797:2:1380
-12798:2:1381
-12799:2:1375
-12800:2:1376
-12801:2:1380
-12802:2:1381
-12803:2:1389
-12804:2:1394
-12805:2:1398
-12806:2:1399
-12807:2:1406
-12808:2:1407
-12809:2:1418
-12810:2:1419
-12811:2:1420
-12812:2:1418
-12813:2:1419
-12814:2:1420
-12815:2:1431
-12816:2:1436
-12817:2:1437
-12818:0:4365
-12819:2:1449
-12820:0:4365
-12821:3:3757
-12822:0:4365
-12823:2:1451
-12824:0:4365
-12825:3:3758
-12826:0:4365
-12827:2:1652
-12828:0:4365
-12829:2:1653
-12830:0:4365
-12831:2:1657
-12832:0:4365
-12833:2:1180
-12834:0:4365
-12835:3:3757
-12836:0:4365
-12837:2:1181
-12838:2:1185
-12839:2:1186
-12840:2:1194
-12841:2:1195
-12842:2:1199
-12843:2:1200
-12844:2:1194
-12845:2:1195
-12846:2:1196
-12847:2:1208
-12848:2:1213
-12849:2:1217
-12850:2:1218
-12851:2:1225
-12852:2:1226
-12853:2:1237
-12854:2:1238
-12855:2:1239
-12856:2:1237
-12857:2:1238
-12858:2:1239
-12859:2:1250
-12860:2:1255
-12861:2:1256
-12862:0:4365
-12863:3:3758
-12864:0:4365
-12865:2:1268
-12866:0:4365
-12867:3:3757
-12868:0:4365
-12869:2:1270
-12870:0:4365
-12871:3:3758
-12872:0:4365
-12873:2:1271
-12874:2:1275
-12875:2:1276
-12876:2:1284
-12877:2:1285
-12878:2:1289
-12879:2:1290
-12880:2:1284
-12881:2:1285
-12882:2:1289
-12883:2:1290
-12884:2:1298
-12885:2:1303
-12886:2:1307
-12887:2:1308
-12888:2:1315
-12889:2:1316
-12890:2:1327
-12891:2:1328
-12892:2:1329
-12893:2:1327
-12894:2:1328
-12895:2:1329
-12896:2:1340
-12897:2:1345
-12898:2:1346
-12899:0:4365
-12900:2:1358
-12901:0:4365
-12902:2:1454
-12903:0:4365
-12904:3:3757
-12905:0:4365
-12906:2:1455
-12907:0:4365
-12908:3:3758
-12909:0:4365
-12910:2:1652
-12911:0:4365
-12912:2:1653
-12913:0:4365
-12914:2:1657
-12915:0:4365
-12916:2:1660
-12917:0:4365
-12918:3:3757
-12919:0:4365
-12920:2:1665
-12921:2:1669
-12922:2:1670
-12923:2:1678
-12924:2:1679
-12925:2:1683
-12926:2:1684
-12927:2:1678
-12928:2:1679
-12929:2:1680
-12930:2:1692
-12931:2:1697
-12932:2:1701
-12933:2:1702
-12934:2:1709
-12935:2:1710
-12936:2:1721
-12937:2:1722
-12938:2:1723
-12939:2:1721
-12940:2:1722
-12941:2:1723
-12942:2:1734
-12943:2:1739
-12944:2:1740
-12945:0:4365
-12946:3:3758
-12947:0:4365
-12948:2:1752
-12949:0:4365
-12950:3:3757
-12951:0:4365
-12952:2:1754
-12953:0:4365
-12954:3:3758
-12955:0:4365
-12956:2:1755
-12957:2:1759
-12958:2:1760
-12959:2:1768
-12960:2:1769
-12961:2:1773
-12962:2:1774
-12963:2:1768
-12964:2:1769
-12965:2:1773
-12966:2:1774
-12967:2:1782
-12968:2:1787
-12969:2:1791
-12970:2:1792
-12971:2:1799
-12972:2:1800
-12973:2:1811
-12974:2:1812
-12975:2:1813
-12976:2:1811
-12977:2:1812
-12978:2:1813
-12979:2:1824
-12980:2:1829
-12981:2:1830
-12982:0:4365
-12983:2:1842
-12984:0:4365
-12985:3:3757
-12986:0:4365
-12987:2:1844
-12988:0:4365
-12989:3:3758
-12990:0:4365
-12991:2:1845
-12992:2:1849
-12993:2:1850
-12994:2:1858
-12995:2:1859
-12996:2:1863
-12997:2:1864
-12998:2:1858
-12999:2:1859
-13000:2:1863
-13001:2:1864
-13002:2:1872
-13003:2:1877
-13004:2:1881
-13005:2:1882
-13006:2:1889
-13007:2:1890
-13008:2:1901
-13009:2:1902
-13010:2:1903
-13011:2:1901
-13012:2:1902
-13013:2:1903
-13014:2:1914
-13015:2:1919
-13016:2:1920
-13017:0:4365
-13018:2:1932
-13019:0:4365
-13020:3:3757
-13021:0:4365
-13022:2:1934
-13023:0:4365
-13024:3:3758
-13025:0:4365
-13026:2:1935
-13027:0:4365
-13028:2:1936
-13029:0:4365
-13030:2:2129
-13031:0:4365
-13032:2:2130
-13033:0:4365
-13034:2:2134
-13035:0:4365
-13036:3:3757
-13037:0:4365
-13038:2:2136
-13039:0:4365
-13040:3:3758
-13041:0:4365
-13042:2:2137
-13043:2:2141
-13044:2:2142
-13045:2:2150
-13046:2:2151
-13047:2:2155
-13048:2:2156
-13049:2:2150
-13050:2:2151
-13051:2:2155
-13052:2:2156
-13053:2:2164
-13054:2:2169
-13055:2:2173
-13056:2:2174
-13057:2:2181
-13058:2:2182
-13059:2:2193
-13060:2:2194
-13061:2:2195
-13062:2:2193
-13063:2:2194
-13064:2:2195
-13065:2:2206
-13066:2:2211
-13067:2:2212
-13068:0:4365
-13069:2:2224
-13070:0:4365
-13071:3:3757
-13072:0:4365
-13073:2:2226
-13074:0:4365
-13075:3:3758
-13076:0:4365
-13077:2:1936
-13078:0:4365
-13079:2:2129
-13080:0:4365
-13081:2:2130
-13082:0:4365
-13083:2:2134
-13084:0:4365
-13085:3:3757
-13086:0:4365
-13087:2:2136
-13088:0:4365
-13089:3:3758
-13090:0:4365
-13091:2:2137
-13092:2:2141
-13093:2:2142
-13094:2:2150
-13095:2:2151
-13096:2:2155
-13097:2:2156
-13098:2:2150
-13099:2:2151
-13100:2:2152
-13101:2:2164
-13102:2:2169
-13103:2:2173
-13104:2:2174
-13105:2:2181
-13106:2:2182
-13107:2:2193
-13108:2:2194
-13109:2:2195
-13110:2:2193
-13111:2:2194
-13112:2:2195
-13113:2:2206
-13114:2:2211
-13115:2:2212
-13116:0:4365
-13117:2:2224
-13118:0:4365
-13119:3:3757
-13120:0:4365
-13121:2:2226
-13122:0:4365
-13123:3:3758
-13124:0:4365
-13125:2:2230
-13126:0:4365
-13127:3:3757
-13128:0:4365
-13129:2:2235
-13130:2:2239
-13131:2:2240
-13132:2:2248
-13133:2:2249
-13134:2:2253
-13135:2:2254
-13136:2:2248
-13137:2:2249
-13138:2:2250
-13139:2:2262
-13140:2:2267
-13141:2:2271
-13142:2:2272
-13143:2:2279
-13144:2:2280
-13145:2:2291
-13146:2:2292
-13147:2:2293
-13148:2:2291
-13149:2:2292
-13150:2:2293
-13151:2:2304
-13152:2:2309
-13153:2:2310
-13154:0:4365
-13155:3:3758
-13156:0:4365
-13157:2:2322
-13158:0:4365
-13159:2:1169
-13160:0:4365
-13161:3:3757
-13162:0:4365
-13163:2:1170
-13164:0:4365
-13165:3:3758
-13166:0:4365
-13167:3:3759
-13168:0:4365
-13169:3:3972
-13170:0:4365
-13171:3:3980
-13172:0:4365
-13173:3:3981
-13174:3:3985
-13175:3:3986
-13176:3:3994
-13177:3:3995
-13178:3:3999
-13179:3:4000
-13180:3:3994
-13181:3:3995
-13182:3:3999
-13183:3:4000
-13184:3:4008
-13185:3:4013
-13186:3:4017
-13187:3:4018
-13188:3:4025
-13189:3:4026
-13190:3:4037
-13191:3:4038
-13192:3:4039
-13193:3:4037
-13194:3:4038
-13195:3:4039
-13196:3:4050
-13197:3:4055
-13198:3:4056
-13199:0:4365
-13200:3:4068
-13201:0:4365
-13202:3:4069
-13203:0:4365
-13204:2:1173
-13205:0:4365
-13206:3:4070
-13207:0:4365
-13208:2:1179
-13209:0:4365
-13210:2:1180
-13211:0:4365
-13212:3:4069
-13213:0:4365
-13214:2:1181
-13215:2:1185
-13216:2:1186
-13217:2:1194
-13218:2:1195
-13219:2:1199
-13220:2:1200
-13221:2:1194
-13222:2:1195
-13223:2:1199
-13224:2:1200
-13225:2:1208
-13226:2:1213
-13227:2:1217
-13228:2:1218
-13229:2:1225
-13230:2:1226
-13231:2:1237
-13232:2:1238
-13233:2:1239
-13234:2:1237
-13235:2:1238
-13236:2:1239
-13237:2:1250
-13238:2:1255
-13239:2:1256
-13240:0:4365
-13241:3:4070
-13242:0:4365
-13243:2:1268
-13244:0:4365
-13245:3:4069
-13246:0:4365
-13247:2:1270
-13248:0:4365
-13249:3:4070
-13250:0:4365
-13251:2:1271
-13252:2:1275
-13253:2:1276
-13254:2:1284
-13255:2:1285
-13256:2:1289
-13257:2:1290
-13258:2:1284
-13259:2:1285
-13260:2:1289
-13261:2:1290
-13262:2:1298
-13263:2:1303
-13264:2:1307
-13265:2:1308
-13266:2:1315
-13267:2:1316
-13268:2:1327
-13269:2:1328
-13270:2:1329
-13271:2:1327
-13272:2:1328
-13273:2:1329
-13274:2:1340
-13275:2:1345
-13276:2:1346
-13277:0:4365
-13278:2:1358
-13279:0:4365
-13280:2:1360
-13281:0:4365
-13282:3:4069
-13283:0:4365
-13284:2:1361
-13285:0:4365
-13286:3:4070
-13287:0:4365
-13288:2:1362
-13289:2:1366
-13290:2:1367
-13291:2:1375
-13292:2:1376
-13293:2:1380
-13294:2:1381
-13295:2:1375
-13296:2:1376
-13297:2:1380
-13298:2:1381
-13299:2:1389
-13300:2:1394
-13301:2:1398
-13302:2:1399
-13303:2:1406
-13304:2:1407
-13305:2:1418
-13306:2:1419
-13307:2:1420
-13308:2:1418
-13309:2:1419
-13310:2:1420
-13311:2:1431
-13312:2:1436
-13313:2:1437
-13314:0:4365
-13315:2:1449
-13316:0:4365
-13317:3:4069
-13318:0:4365
-13319:2:1451
-13320:0:4365
-13321:3:4070
-13322:0:4365
-13323:2:1652
-13324:0:4365
-13325:2:1653
-13326:0:4365
-13327:2:1657
-13328:0:4365
-13329:2:1180
-13330:0:4365
-13331:3:4069
-13332:0:4365
-13333:2:1181
-13334:2:1185
-13335:2:1186
-13336:2:1194
-13337:2:1195
-13338:2:1199
-13339:2:1200
-13340:2:1194
-13341:2:1195
-13342:2:1196
-13343:2:1208
-13344:2:1213
-13345:2:1217
-13346:2:1218
-13347:2:1225
-13348:2:1226
-13349:2:1237
-13350:2:1238
-13351:2:1239
-13352:2:1237
-13353:2:1238
-13354:2:1239
-13355:2:1250
-13356:2:1255
-13357:2:1256
-13358:0:4365
-13359:3:4070
-13360:0:4365
-13361:2:1268
-13362:0:4365
-13363:3:4069
-13364:0:4365
-13365:2:1270
-13366:0:4365
-13367:3:4070
-13368:0:4365
-13369:2:1271
-13370:2:1275
-13371:2:1276
-13372:2:1284
-13373:2:1285
-13374:2:1289
-13375:2:1290
-13376:2:1284
-13377:2:1285
-13378:2:1289
-13379:2:1290
-13380:2:1298
-13381:2:1303
-13382:2:1307
-13383:2:1308
-13384:2:1315
-13385:2:1316
-13386:2:1327
-13387:2:1328
-13388:2:1329
-13389:2:1327
-13390:2:1328
-13391:2:1329
-13392:2:1340
-13393:2:1345
-13394:2:1346
-13395:0:4365
-13396:2:1358
-13397:0:4365
-13398:2:1454
-13399:0:4365
-13400:3:4069
-13401:0:4365
-13402:2:1455
-13403:0:4365
-13404:3:4070
-13405:0:4365
-13406:2:1652
-13407:0:4365
-13408:2:1653
-13409:0:4365
-13410:2:1657
-13411:0:4365
-13412:2:1660
-13413:0:4365
-13414:3:4069
-13415:0:4365
-13416:2:1665
-13417:2:1669
-13418:2:1670
-13419:2:1678
-13420:2:1679
-13421:2:1683
-13422:2:1684
-13423:2:1678
-13424:2:1679
-13425:2:1680
-13426:2:1692
-13427:2:1697
-13428:2:1701
-13429:2:1702
-13430:2:1709
-13431:2:1710
-13432:2:1721
-13433:2:1722
-13434:2:1723
-13435:2:1721
-13436:2:1722
-13437:2:1723
-13438:2:1734
-13439:2:1739
-13440:2:1740
-13441:0:4365
-13442:3:4070
-13443:0:4365
-13444:2:1752
-13445:0:4365
-13446:3:4069
-13447:0:4365
-13448:2:1754
-13449:0:4365
-13450:3:4070
-13451:0:4365
-13452:2:1755
-13453:2:1759
-13454:2:1760
-13455:2:1768
-13456:2:1769
-13457:2:1773
-13458:2:1774
-13459:2:1768
-13460:2:1769
-13461:2:1773
-13462:2:1774
-13463:2:1782
-13464:2:1787
-13465:2:1791
-13466:2:1792
-13467:2:1799
-13468:2:1800
-13469:2:1811
-13470:2:1812
-13471:2:1813
-13472:2:1811
-13473:2:1812
-13474:2:1813
-13475:2:1824
-13476:2:1829
-13477:2:1830
-13478:0:4365
-13479:2:1842
-13480:0:4365
-13481:3:4069
-13482:0:4365
-13483:2:1844
-13484:0:4365
-13485:3:4070
-13486:0:4365
-13487:2:1845
-13488:2:1849
-13489:2:1850
-13490:2:1858
-13491:2:1859
-13492:2:1863
-13493:2:1864
-13494:2:1858
-13495:2:1859
-13496:2:1863
-13497:2:1864
-13498:2:1872
-13499:2:1877
-13500:2:1881
-13501:2:1882
-13502:2:1889
-13503:2:1890
-13504:2:1901
-13505:2:1902
-13506:2:1903
-13507:2:1901
-13508:2:1902
-13509:2:1903
-13510:2:1914
-13511:2:1919
-13512:2:1920
-13513:0:4365
-13514:2:1932
-13515:0:4365
-13516:3:4069
-13517:0:4365
-13518:2:1934
-13519:0:4365
-13520:3:4070
-13521:0:4365
-13522:2:1935
-13523:0:4365
-13524:2:1936
-13525:0:4365
-13526:2:2129
-13527:0:4365
-13528:2:2130
-13529:0:4365
-13530:2:2134
-13531:0:4365
-13532:3:4069
-13533:0:4365
-13534:2:2136
-13535:0:4365
-13536:3:4070
-13537:0:4365
-13538:2:2137
-13539:2:2141
-13540:2:2142
-13541:2:2150
-13542:2:2151
-13543:2:2155
-13544:2:2156
-13545:2:2150
-13546:2:2151
-13547:2:2155
-13548:2:2156
-13549:2:2164
-13550:2:2169
-13551:2:2173
-13552:2:2174
-13553:2:2181
-13554:2:2182
-13555:2:2193
-13556:2:2194
-13557:2:2195
-13558:2:2193
-13559:2:2194
-13560:2:2195
-13561:2:2206
-13562:2:2211
-13563:2:2212
-13564:0:4365
-13565:2:2224
-13566:0:4365
-13567:3:4069
-13568:0:4365
-13569:2:2226
-13570:0:4365
-13571:3:4070
-13572:0:4365
-13573:2:1936
-13574:0:4365
-13575:2:2129
-13576:0:4365
-13577:2:2130
-13578:0:4365
-13579:2:2134
-13580:0:4365
-13581:3:4069
-13582:0:4365
-13583:2:2136
-13584:0:4365
-13585:3:4070
-13586:0:4365
-13587:2:2137
-13588:2:2141
-13589:2:2142
-13590:2:2150
-13591:2:2151
-13592:2:2155
-13593:2:2156
-13594:2:2150
-13595:2:2151
-13596:2:2152
-13597:2:2164
-13598:2:2169
-13599:2:2173
-13600:2:2174
-13601:2:2181
-13602:2:2182
-13603:2:2193
-13604:2:2194
-13605:2:2195
-13606:2:2193
-13607:2:2194
-13608:2:2195
-13609:2:2206
-13610:2:2211
-13611:2:2212
-13612:0:4365
-13613:2:2224
-13614:0:4365
-13615:3:4069
-13616:0:4365
-13617:2:2226
-13618:0:4365
-13619:3:4070
-13620:0:4365
-13621:2:2230
-13622:0:4365
-13623:3:4069
-13624:0:4365
-13625:2:2235
-13626:2:2239
-13627:2:2240
-13628:2:2248
-13629:2:2249
-13630:2:2253
-13631:2:2254
-13632:2:2248
-13633:2:2249
-13634:2:2250
-13635:2:2262
-13636:2:2267
-13637:2:2271
-13638:2:2272
-13639:2:2279
-13640:2:2280
-13641:2:2291
-13642:2:2292
-13643:2:2293
-13644:2:2291
-13645:2:2292
-13646:2:2293
-13647:2:2304
-13648:2:2309
-13649:2:2310
-13650:0:4365
-13651:3:4070
-13652:0:4365
-13653:2:2322
-13654:0:4365
-13655:2:1169
-13656:0:4365
-13657:3:4069
-13658:0:4365
-13659:2:1170
-13660:0:4365
-13661:3:4070
-13662:0:4365
-13663:3:4071
-13664:0:4365
-13665:3:4081
-13666:0:4365
-13667:3:3666
-13668:0:4365
-13669:3:3667
-13670:0:4365
-13671:3:3668
-13672:0:4365
-13673:3:3669
-13674:3:3673
-13675:3:3674
-13676:3:3682
-13677:3:3683
-13678:3:3687
-13679:3:3688
-13680:3:3682
-13681:3:3683
-13682:3:3687
-13683:3:3688
-13684:3:3696
-13685:3:3701
-13686:3:3705
-13687:3:3706
-13688:3:3713
-13689:3:3714
-13690:3:3725
-13691:3:3726
-13692:3:3727
-13693:3:3725
-13694:3:3726
-13695:3:3727
-13696:3:3738
-13697:3:3743
-13698:3:3744
-13699:0:4365
-13700:3:3756
-13701:0:4365
-13702:3:3757
-13703:0:4365
-13704:2:1173
-13705:0:4365
-13706:3:3758
-13707:0:4365
-13708:2:1179
-13709:0:4365
-13710:2:1180
-13711:0:4365
-13712:3:3757
-13713:0:4365
-13714:2:1181
-13715:2:1185
-13716:2:1186
-13717:2:1194
-13718:2:1195
-13719:2:1199
-13720:2:1200
-13721:2:1194
-13722:2:1195
-13723:2:1199
-13724:2:1200
-13725:2:1208
-13726:2:1213
-13727:2:1217
-13728:2:1218
-13729:2:1225
-13730:2:1226
-13731:2:1237
-13732:2:1238
-13733:2:1239
-13734:2:1237
-13735:2:1238
-13736:2:1239
-13737:2:1250
-13738:2:1255
-13739:2:1256
-13740:0:4365
-13741:3:3758
-13742:0:4365
-13743:2:1268
-13744:0:4365
-13745:3:3757
-13746:0:4365
-13747:2:1270
-13748:0:4365
-13749:3:3758
-13750:0:4365
-13751:2:1271
-13752:2:1275
-13753:2:1276
-13754:2:1284
-13755:2:1285
-13756:2:1289
-13757:2:1290
-13758:2:1284
-13759:2:1285
-13760:2:1289
-13761:2:1290
-13762:2:1298
-13763:2:1303
-13764:2:1307
-13765:2:1308
-13766:2:1315
-13767:2:1316
-13768:2:1327
-13769:2:1328
-13770:2:1329
-13771:2:1327
-13772:2:1328
-13773:2:1329
-13774:2:1340
-13775:2:1345
-13776:2:1346
-13777:0:4365
-13778:2:1358
-13779:0:4365
-13780:2:1360
-13781:0:4365
-13782:3:3757
-13783:0:4365
-13784:2:1361
-13785:0:4365
-13786:3:3758
-13787:0:4365
-13788:2:1362
-13789:2:1366
-13790:2:1367
-13791:2:1375
-13792:2:1376
-13793:2:1380
-13794:2:1381
-13795:2:1375
-13796:2:1376
-13797:2:1380
-13798:2:1381
-13799:2:1389
-13800:2:1394
-13801:2:1398
-13802:2:1399
-13803:2:1406
-13804:2:1407
-13805:2:1418
-13806:2:1419
-13807:2:1420
-13808:2:1418
-13809:2:1419
-13810:2:1420
-13811:2:1431
-13812:2:1436
-13813:2:1437
-13814:0:4365
-13815:2:1449
-13816:0:4365
-13817:3:3757
-13818:0:4365
-13819:2:1451
-13820:0:4365
-13821:3:3758
-13822:0:4365
-13823:2:1652
-13824:0:4365
-13825:2:1653
-13826:0:4365
-13827:2:1657
-13828:0:4365
-13829:2:1180
-13830:0:4365
-13831:3:3757
-13832:0:4365
-13833:2:1181
-13834:2:1185
-13835:2:1186
-13836:2:1194
-13837:2:1195
-13838:2:1199
-13839:2:1200
-13840:2:1194
-13841:2:1195
-13842:2:1196
-13843:2:1208
-13844:2:1213
-13845:2:1217
-13846:2:1218
-13847:2:1225
-13848:2:1226
-13849:2:1237
-13850:2:1238
-13851:2:1239
-13852:2:1237
-13853:2:1238
-13854:2:1239
-13855:2:1250
-13856:2:1255
-13857:2:1256
-13858:0:4365
-13859:3:3758
-13860:0:4365
-13861:2:1268
-13862:0:4365
-13863:3:3757
-13864:0:4365
-13865:2:1270
-13866:0:4365
-13867:3:3758
-13868:0:4365
-13869:2:1271
-13870:2:1275
-13871:2:1276
-13872:2:1284
-13873:2:1285
-13874:2:1289
-13875:2:1290
-13876:2:1284
-13877:2:1285
-13878:2:1289
-13879:2:1290
-13880:2:1298
-13881:2:1303
-13882:2:1307
-13883:2:1308
-13884:2:1315
-13885:2:1316
-13886:2:1327
-13887:2:1328
-13888:2:1329
-13889:2:1327
-13890:2:1328
-13891:2:1329
-13892:2:1340
-13893:2:1345
-13894:2:1346
-13895:0:4365
-13896:2:1358
-13897:0:4365
-13898:2:1454
-13899:0:4365
-13900:3:3757
-13901:0:4365
-13902:2:1455
-13903:0:4365
-13904:3:3758
-13905:0:4365
-13906:2:1652
-13907:0:4365
-13908:2:1653
-13909:0:4365
-13910:2:1657
-13911:0:4365
-13912:2:1660
-13913:0:4365
-13914:3:3757
-13915:0:4365
-13916:2:1665
-13917:2:1669
-13918:2:1670
-13919:2:1678
-13920:2:1679
-13921:2:1683
-13922:2:1684
-13923:2:1678
-13924:2:1679
-13925:2:1680
-13926:2:1692
-13927:2:1697
-13928:2:1701
-13929:2:1702
-13930:2:1709
-13931:2:1710
-13932:2:1721
-13933:2:1722
-13934:2:1723
-13935:2:1721
-13936:2:1722
-13937:2:1723
-13938:2:1734
-13939:2:1739
-13940:2:1740
-13941:0:4365
-13942:3:3758
-13943:0:4365
-13944:2:1752
-13945:0:4365
-13946:3:3757
-13947:0:4365
-13948:2:1754
-13949:0:4365
-13950:3:3758
-13951:0:4365
-13952:2:1755
-13953:2:1759
-13954:2:1760
-13955:2:1768
-13956:2:1769
-13957:2:1773
-13958:2:1774
-13959:2:1768
-13960:2:1769
-13961:2:1773
-13962:2:1774
-13963:2:1782
-13964:2:1787
-13965:2:1791
-13966:2:1792
-13967:2:1799
-13968:2:1800
-13969:2:1811
-13970:2:1812
-13971:2:1813
-13972:2:1811
-13973:2:1812
-13974:2:1813
-13975:2:1824
-13976:2:1829
-13977:2:1830
-13978:0:4365
-13979:2:1842
-13980:0:4365
-13981:3:3757
-13982:0:4365
-13983:2:1844
-13984:0:4365
-13985:3:3758
-13986:0:4365
-13987:2:1845
-13988:2:1849
-13989:2:1850
-13990:2:1858
-13991:2:1859
-13992:2:1863
-13993:2:1864
-13994:2:1858
-13995:2:1859
-13996:2:1863
-13997:2:1864
-13998:2:1872
-13999:2:1877
-14000:2:1881
-14001:2:1882
-14002:2:1889
-14003:2:1890
-14004:2:1901
-14005:2:1902
-14006:2:1903
-14007:2:1901
-14008:2:1902
-14009:2:1903
-14010:2:1914
-14011:2:1919
-14012:2:1920
-14013:0:4365
-14014:2:1932
-14015:0:4365
-14016:3:3757
-14017:0:4365
-14018:2:1934
-14019:0:4365
-14020:3:3758
-14021:0:4365
-14022:2:1935
-14023:0:4365
-14024:2:1936
-14025:0:4365
-14026:2:2129
-14027:0:4365
-14028:2:2130
-14029:0:4365
-14030:2:2134
-14031:0:4365
-14032:3:3757
-14033:0:4365
-14034:2:2136
-14035:0:4365
-14036:3:3758
-14037:0:4365
-14038:2:2137
-14039:2:2141
-14040:2:2142
-14041:2:2150
-14042:2:2151
-14043:2:2155
-14044:2:2156
-14045:2:2150
-14046:2:2151
-14047:2:2155
-14048:2:2156
-14049:2:2164
-14050:2:2169
-14051:2:2173
-14052:2:2174
-14053:2:2181
-14054:2:2182
-14055:2:2193
-14056:2:2194
-14057:2:2195
-14058:2:2193
-14059:2:2194
-14060:2:2195
-14061:2:2206
-14062:2:2211
-14063:2:2212
-14064:0:4365
-14065:2:2224
-14066:0:4365
-14067:3:3757
-14068:0:4365
-14069:2:2226
-14070:0:4365
-14071:3:3758
-14072:0:4365
-14073:2:1936
-14074:0:4365
-14075:2:2129
-14076:0:4365
-14077:2:2130
-14078:0:4365
-14079:2:2134
-14080:0:4365
-14081:3:3757
-14082:0:4365
-14083:2:2136
-14084:0:4365
-14085:3:3758
-14086:0:4365
-14087:2:2137
-14088:2:2141
-14089:2:2142
-14090:2:2150
-14091:2:2151
-14092:2:2155
-14093:2:2156
-14094:2:2150
-14095:2:2151
-14096:2:2152
-14097:2:2164
-14098:2:2169
-14099:2:2173
-14100:2:2174
-14101:2:2181
-14102:2:2182
-14103:2:2193
-14104:2:2194
-14105:2:2195
-14106:2:2193
-14107:2:2194
-14108:2:2195
-14109:2:2206
-14110:2:2211
-14111:2:2212
-14112:0:4365
-14113:2:2224
-14114:0:4365
-14115:3:3757
-14116:0:4365
-14117:2:2226
-14118:0:4365
-14119:3:3758
-14120:0:4365
-14121:2:2230
-14122:0:4365
-14123:3:3757
-14124:0:4365
-14125:2:2235
-14126:2:2239
-14127:2:2240
-14128:2:2248
-14129:2:2249
-14130:2:2253
-14131:2:2254
-14132:2:2248
-14133:2:2249
-14134:2:2250
-14135:2:2262
-14136:2:2267
-14137:2:2271
-14138:2:2272
-14139:2:2279
-14140:2:2280
-14141:2:2291
-14142:2:2292
-14143:2:2293
-14144:2:2291
-14145:2:2292
-14146:2:2293
-14147:2:2304
-14148:2:2309
-14149:2:2310
-14150:0:4365
-14151:3:3758
-14152:0:4365
-14153:2:2322
-14154:0:4365
-14155:2:1169
-14156:0:4365
-14157:3:3757
-14158:0:4365
-14159:2:1170
-14160:0:4365
-14161:3:3758
-14162:0:4365
-14163:3:3759
-14164:0:4365
-14165:3:3972
-14166:0:4365
-14167:3:4077
-14168:0:4365
-14169:3:4078
-14170:0:4365
-14171:3:4082
-14172:0:4365
-14173:3:4088
-14174:0:4365
-14175:3:4092
-14176:3:4093
-14177:3:4097
-14178:3:4101
-14179:3:4102
-14180:3:4097
-14181:3:4101
-14182:3:4102
-14183:3:4106
-14184:3:4114
-14185:3:4115
-14186:3:4120
-14187:3:4127
-14188:3:4128
-14189:3:4127
-14190:3:4128
-14191:3:4135
-14192:3:4140
-14193:0:4365
-14194:3:4151
-14195:0:4365
-14196:3:4155
-14197:3:4156
-14198:3:4160
-14199:3:4164
-14200:3:4165
-14201:3:4160
-14202:3:4164
-14203:3:4165
-14204:3:4169
-14205:3:4177
-14206:3:4178
-14207:3:4183
-14208:3:4190
-14209:3:4191
-14210:3:4190
-14211:3:4191
-14212:3:4198
-14213:3:4203
-14214:0:4365
-14215:3:4151
-14216:0:4365
-14217:3:4155
-14218:3:4156
-14219:3:4160
-14220:3:4164
-14221:3:4165
-14222:3:4160
-14223:3:4164
-14224:3:4165
-14225:3:4169
-14226:3:4177
-14227:3:4178
-14228:3:4183
-14229:3:4190
-14230:3:4191
-14231:3:4190
-14232:3:4191
-14233:3:4198
-14234:3:4203
-14235:0:4365
-14236:3:4214
-14237:0:4365
-14238:3:4222
-14239:3:4223
-14240:3:4227
-14241:3:4231
-14242:3:4232
-14243:3:4227
-14244:3:4231
-14245:3:4232
-14246:3:4236
-14247:3:4244
-14248:3:4245
-14249:3:4250
-14250:3:4257
-14251:3:4258
-14252:3:4257
-14253:3:4258
-14254:3:4265
-14255:3:4270
-14256:0:4365
-14257:3:4285
-14258:0:4365
-14259:3:4286
-14260:0:4365
-14261:2:1173
-14262:0:4365
-14263:3:4287
-14264:0:4365
-14265:2:1179
-14266:0:4365
-14267:2:1180
-14268:0:4365
-14269:3:4286
-14270:0:4365
-14271:2:1181
-14272:2:1185
-14273:2:1186
-14274:2:1194
-14275:2:1195
-14276:2:1199
-14277:2:1200
-14278:2:1194
-14279:2:1195
-14280:2:1199
-14281:2:1200
-14282:2:1208
-14283:2:1213
-14284:2:1217
-14285:2:1218
-14286:2:1225
-14287:2:1226
-14288:2:1237
-14289:2:1238
-14290:2:1239
-14291:2:1237
-14292:2:1238
-14293:2:1239
-14294:2:1250
-14295:2:1255
-14296:2:1256
-14297:0:4365
-14298:3:4287
-14299:0:4365
-14300:2:1268
-14301:0:4365
-14302:3:4286
-14303:0:4365
-14304:2:1270
-14305:0:4365
-14306:3:4287
-14307:0:4365
-14308:2:1271
-14309:2:1275
-14310:2:1276
-14311:2:1284
-14312:2:1285
-14313:2:1289
-14314:2:1290
-14315:2:1284
-14316:2:1285
-14317:2:1289
-14318:2:1290
-14319:2:1298
-14320:2:1303
-14321:2:1307
-14322:2:1308
-14323:2:1315
-14324:2:1316
-14325:2:1327
-14326:2:1328
-14327:2:1329
-14328:2:1327
-14329:2:1328
-14330:2:1329
-14331:2:1340
-14332:2:1345
-14333:2:1346
-14334:0:4365
-14335:2:1358
-14336:0:4365
-14337:2:1360
-14338:0:4365
-14339:3:4286
-14340:0:4365
-14341:2:1361
-14342:0:4365
-14343:3:4287
-14344:0:4365
-14345:2:1362
-14346:2:1366
-14347:2:1367
-14348:2:1375
-14349:2:1376
-14350:2:1380
-14351:2:1381
-14352:2:1375
-14353:2:1376
-14354:2:1380
-14355:2:1381
-14356:2:1389
-14357:2:1394
-14358:2:1398
-14359:2:1399
-14360:2:1406
-14361:2:1407
-14362:2:1418
-14363:2:1419
-14364:2:1420
-14365:2:1418
-14366:2:1419
-14367:2:1420
-14368:2:1431
-14369:2:1436
-14370:2:1437
-14371:0:4365
-14372:2:1449
-14373:0:4365
-14374:3:4286
-14375:0:4365
-14376:2:1451
-14377:0:4365
-14378:3:4287
-14379:0:4365
-14380:2:1652
-14381:0:4365
-14382:2:1653
-14383:0:4365
-14384:2:1657
-14385:0:4365
-14386:2:1180
-14387:0:4365
-14388:3:4286
-14389:0:4365
-14390:2:1181
-14391:2:1185
-14392:2:1186
-14393:2:1194
-14394:2:1195
-14395:2:1199
-14396:2:1200
-14397:2:1194
-14398:2:1195
-14399:2:1196
-14400:2:1208
-14401:2:1213
-14402:2:1217
-14403:2:1218
-14404:2:1225
-14405:2:1226
-14406:2:1237
-14407:2:1238
-14408:2:1239
-14409:2:1237
-14410:2:1238
-14411:2:1239
-14412:2:1250
-14413:2:1255
-14414:2:1256
-14415:0:4365
-14416:3:4287
-14417:0:4365
-14418:2:1268
-14419:0:4365
-14420:3:4286
-14421:0:4365
-14422:2:1270
-14423:0:4365
-14424:3:4287
-14425:0:4365
-14426:2:1271
-14427:2:1275
-14428:2:1276
-14429:2:1284
-14430:2:1285
-14431:2:1289
-14432:2:1290
-14433:2:1284
-14434:2:1285
-14435:2:1289
-14436:2:1290
-14437:2:1298
-14438:2:1303
-14439:2:1307
-14440:2:1308
-14441:2:1315
-14442:2:1316
-14443:2:1327
-14444:2:1328
-14445:2:1329
-14446:2:1327
-14447:2:1328
-14448:2:1329
-14449:2:1340
-14450:2:1345
-14451:2:1346
-14452:0:4365
-14453:2:1358
-14454:0:4365
-14455:2:1454
-14456:0:4365
-14457:3:4286
-14458:0:4365
-14459:2:1455
-14460:0:4365
-14461:3:4287
-14462:0:4365
-14463:2:1652
-14464:0:4365
-14465:2:1653
-14466:0:4365
-14467:2:1657
-14468:0:4365
-14469:2:1660
-14470:0:4365
-14471:3:4286
-14472:0:4365
-14473:2:1665
-14474:2:1669
-14475:2:1670
-14476:2:1678
-14477:2:1679
-14478:2:1683
-14479:2:1684
-14480:2:1678
-14481:2:1679
-14482:2:1680
-14483:2:1692
-14484:2:1697
-14485:2:1701
-14486:2:1702
-14487:2:1709
-14488:2:1710
-14489:2:1721
-14490:2:1722
-14491:2:1723
-14492:2:1721
-14493:2:1722
-14494:2:1723
-14495:2:1734
-14496:2:1739
-14497:2:1740
-14498:0:4365
-14499:3:4287
-14500:0:4365
-14501:2:1752
-14502:0:4365
-14503:3:4286
-14504:0:4365
-14505:2:1754
-14506:0:4365
-14507:3:4287
-14508:0:4365
-14509:2:1755
-14510:2:1759
-14511:2:1760
-14512:2:1768
-14513:2:1769
-14514:2:1773
-14515:2:1774
-14516:2:1768
-14517:2:1769
-14518:2:1773
-14519:2:1774
-14520:2:1782
-14521:2:1787
-14522:2:1791
-14523:2:1792
-14524:2:1799
-14525:2:1800
-14526:2:1811
-14527:2:1812
-14528:2:1813
-14529:2:1811
-14530:2:1812
-14531:2:1813
-14532:2:1824
-14533:2:1829
-14534:2:1830
-14535:0:4365
-14536:2:1842
-14537:0:4365
-14538:3:4286
-14539:0:4365
-14540:2:1844
-14541:0:4365
-14542:3:4287
-14543:0:4365
-14544:2:1845
-14545:2:1849
-14546:2:1850
-14547:2:1858
-14548:2:1859
-14549:2:1863
-14550:2:1864
-14551:2:1858
-14552:2:1859
-14553:2:1863
-14554:2:1864
-14555:2:1872
-14556:2:1877
-14557:2:1881
-14558:2:1882
-14559:2:1889
-14560:2:1890
-14561:2:1901
-14562:2:1902
-14563:2:1903
-14564:2:1901
-14565:2:1902
-14566:2:1903
-14567:2:1914
-14568:2:1919
-14569:2:1920
-14570:0:4365
-14571:2:1932
-14572:0:4365
-14573:3:4286
-14574:0:4365
-14575:2:1934
-14576:0:4365
-14577:3:4287
-14578:0:4365
-14579:2:1935
-14580:0:4365
-14581:2:1936
-14582:0:4365
-14583:2:2129
-14584:0:4365
-14585:2:2130
-14586:0:4365
-14587:2:2134
-14588:0:4365
-14589:3:4286
-14590:0:4365
-14591:2:2136
-14592:0:4365
-14593:3:4287
-14594:0:4365
-14595:2:2137
-14596:2:2141
-14597:2:2142
-14598:2:2150
-14599:2:2151
-14600:2:2155
-14601:2:2156
-14602:2:2150
-14603:2:2151
-14604:2:2155
-14605:2:2156
-14606:2:2164
-14607:2:2169
-14608:2:2173
-14609:2:2174
-14610:2:2181
-14611:2:2182
-14612:2:2193
-14613:2:2194
-14614:2:2195
-14615:2:2193
-14616:2:2194
-14617:2:2195
-14618:2:2206
-14619:2:2211
-14620:2:2212
-14621:0:4365
-14622:2:2224
-14623:0:4365
-14624:3:4286
-14625:0:4365
-14626:2:2226
-14627:0:4365
-14628:3:4287
-14629:0:4365
-14630:2:1936
-14631:0:4365
-14632:2:2129
-14633:0:4365
-14634:2:2130
-14635:0:4365
-14636:2:2134
-14637:0:4365
-14638:3:4286
-14639:0:4365
-14640:2:2136
-14641:0:4365
-14642:3:4287
-14643:0:4365
-14644:2:2137
-14645:2:2141
-14646:2:2142
-14647:2:2150
-14648:2:2151
-14649:2:2155
-14650:2:2156
-14651:2:2150
-14652:2:2151
-14653:2:2152
-14654:2:2164
-14655:2:2169
-14656:2:2173
-14657:2:2174
-14658:2:2181
-14659:2:2182
-14660:2:2193
-14661:2:2194
-14662:2:2195
-14663:2:2193
-14664:2:2194
-14665:2:2195
-14666:2:2206
-14667:2:2211
-14668:2:2212
-14669:0:4365
-14670:2:2224
-14671:0:4365
-14672:3:4286
-14673:0:4365
-14674:2:2226
-14675:0:4365
-14676:3:4287
-14677:0:4365
-14678:2:2230
-14679:0:4365
-14680:3:4286
-14681:0:4365
-14682:2:2235
-14683:2:2239
-14684:2:2240
-14685:2:2248
-14686:2:2249
-14687:2:2253
-14688:2:2254
-14689:2:2248
-14690:2:2249
-14691:2:2250
-14692:2:2262
-14693:2:2267
-14694:2:2271
-14695:2:2272
-14696:2:2279
-14697:2:2280
-14698:2:2291
-14699:2:2292
-14700:2:2293
-14701:2:2291
-14702:2:2292
-14703:2:2293
-14704:2:2304
-14705:2:2309
-14706:2:2310
-14707:0:4365
-14708:3:4287
-14709:0:4365
-14710:2:2322
-14711:0:4365
-14712:2:1169
-14713:0:4365
-14714:3:4286
-14715:0:4365
-14716:2:1170
-14717:0:4365
-14718:3:4287
-14719:0:4365
-14720:3:4288
-14721:0:4365
-14722:3:4294
-14723:0:4365
-14724:3:4295
-14725:0:4365
-14726:3:2338
-14727:0:4365
-14728:3:2339
-14729:3:2343
-14730:3:2344
-14731:3:2352
-14732:3:2353
-14733:3:2357
-14734:3:2358
-14735:3:2352
-14736:3:2353
-14737:3:2357
-14738:3:2358
-14739:3:2366
-14740:3:2371
-14741:3:2375
-14742:3:2376
-14743:3:2383
-14744:3:2384
-14745:3:2395
-14746:3:2396
-14747:3:2397
-14748:3:2395
-14749:3:2396
-14750:3:2397
-14751:3:2408
-14752:3:2413
-14753:3:2414
-14754:0:4365
-14755:3:2426
-14756:0:4365
-14757:3:2427
-14758:0:4365
-14759:2:1173
-14760:0:4365
-14761:3:2428
-14762:0:4365
-14763:2:1179
-14764:0:4365
-14765:2:1180
-14766:0:4365
-14767:3:2427
-14768:0:4365
-14769:2:1181
-14770:2:1185
-14771:2:1186
-14772:2:1194
-14773:2:1195
-14774:2:1199
-14775:2:1200
-14776:2:1194
-14777:2:1195
-14778:2:1199
-14779:2:1200
-14780:2:1208
-14781:2:1213
-14782:2:1217
-14783:2:1218
-14784:2:1225
-14785:2:1226
-14786:2:1237
-14787:2:1238
-14788:2:1239
-14789:2:1237
-14790:2:1238
-14791:2:1239
-14792:2:1250
-14793:2:1255
-14794:2:1256
-14795:0:4365
-14796:3:2428
-14797:0:4365
-14798:2:1268
-14799:0:4365
-14800:3:2427
-14801:0:4365
-14802:2:1270
-14803:0:4365
-14804:3:2428
-14805:0:4365
-14806:2:1271
-14807:2:1275
-14808:2:1276
-14809:2:1284
-14810:2:1285
-14811:2:1289
-14812:2:1290
-14813:2:1284
-14814:2:1285
-14815:2:1289
-14816:2:1290
-14817:2:1298
-14818:2:1303
-14819:2:1307
-14820:2:1308
-14821:2:1315
-14822:2:1316
-14823:2:1327
-14824:2:1328
-14825:2:1329
-14826:2:1327
-14827:2:1328
-14828:2:1329
-14829:2:1340
-14830:2:1345
-14831:2:1346
-14832:0:4365
-14833:2:1358
-14834:0:4365
-14835:2:1360
-14836:0:4365
-14837:3:2427
-14838:0:4365
-14839:2:1361
-14840:0:4365
-14841:3:2428
-14842:0:4365
-14843:2:1362
-14844:2:1366
-14845:2:1367
-14846:2:1375
-14847:2:1376
-14848:2:1380
-14849:2:1381
-14850:2:1375
-14851:2:1376
-14852:2:1380
-14853:2:1381
-14854:2:1389
-14855:2:1394
-14856:2:1398
-14857:2:1399
-14858:2:1406
-14859:2:1407
-14860:2:1418
-14861:2:1419
-14862:2:1420
-14863:2:1418
-14864:2:1419
-14865:2:1420
-14866:2:1431
-14867:2:1436
-14868:2:1437
-14869:0:4365
-14870:2:1449
-14871:0:4365
-14872:3:2427
-14873:0:4365
-14874:2:1451
-14875:0:4365
-14876:3:2428
-14877:0:4365
-14878:2:1652
-14879:0:4365
-14880:2:1653
-14881:0:4365
-14882:2:1657
-14883:0:4365
-14884:2:1180
-14885:0:4365
-14886:3:2427
-14887:0:4365
-14888:2:1181
-14889:2:1185
-14890:2:1186
-14891:2:1194
-14892:2:1195
-14893:2:1199
-14894:2:1200
-14895:2:1194
-14896:2:1195
-14897:2:1196
-14898:2:1208
-14899:2:1213
-14900:2:1217
-14901:2:1218
-14902:2:1225
-14903:2:1226
-14904:2:1237
-14905:2:1238
-14906:2:1239
-14907:2:1237
-14908:2:1238
-14909:2:1239
-14910:2:1250
-14911:2:1255
-14912:2:1256
-14913:0:4365
-14914:3:2428
-14915:0:4365
-14916:2:1268
-14917:0:4365
-14918:3:2427
-14919:0:4365
-14920:2:1270
-14921:0:4365
-14922:3:2428
-14923:0:4365
-14924:2:1271
-14925:2:1275
-14926:2:1276
-14927:2:1284
-14928:2:1285
-14929:2:1289
-14930:2:1290
-14931:2:1284
-14932:2:1285
-14933:2:1289
-14934:2:1290
-14935:2:1298
-14936:2:1303
-14937:2:1307
-14938:2:1308
-14939:2:1315
-14940:2:1316
-14941:2:1327
-14942:2:1328
-14943:2:1329
-14944:2:1327
-14945:2:1328
-14946:2:1329
-14947:2:1340
-14948:2:1345
-14949:2:1346
-14950:0:4365
-14951:2:1358
-14952:0:4365
-14953:2:1454
-14954:0:4365
-14955:3:2427
-14956:0:4365
-14957:2:1455
-14958:0:4365
-14959:3:2428
-14960:0:4365
-14961:2:1652
-14962:0:4365
-14963:2:1653
-14964:0:4365
-14965:2:1657
-14966:0:4365
-14967:2:1660
-14968:0:4365
-14969:3:2427
-14970:0:4365
-14971:2:1665
-14972:2:1669
-14973:2:1670
-14974:2:1678
-14975:2:1679
-14976:2:1683
-14977:2:1684
-14978:2:1678
-14979:2:1679
-14980:2:1680
-14981:2:1692
-14982:2:1697
-14983:2:1701
-14984:2:1702
-14985:2:1709
-14986:2:1710
-14987:2:1721
-14988:2:1722
-14989:2:1723
-14990:2:1721
-14991:2:1722
-14992:2:1723
-14993:2:1734
-14994:2:1739
-14995:2:1740
-14996:0:4365
-14997:3:2428
-14998:0:4365
-14999:2:1752
-15000:0:4365
-15001:3:2427
-15002:0:4365
-15003:2:1754
-15004:0:4365
-15005:3:2428
-15006:0:4365
-15007:2:1755
-15008:2:1759
-15009:2:1760
-15010:2:1768
-15011:2:1769
-15012:2:1773
-15013:2:1774
-15014:2:1768
-15015:2:1769
-15016:2:1773
-15017:2:1774
-15018:2:1782
-15019:2:1787
-15020:2:1791
-15021:2:1792
-15022:2:1799
-15023:2:1800
-15024:2:1811
-15025:2:1812
-15026:2:1813
-15027:2:1811
-15028:2:1812
-15029:2:1813
-15030:2:1824
-15031:2:1829
-15032:2:1830
-15033:0:4365
-15034:2:1842
-15035:0:4365
-15036:3:2427
-15037:0:4365
-15038:2:1844
-15039:0:4363
-15040:3:2428
-15041:0:4369
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.define b/formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.log b/formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 3afaead..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-Depth=    6009 States=    1e+06 Transitions= 1.08e+07 Memory=   534.904        t=   9.22 R=   1e+05
-Depth=    6009 States=    2e+06 Transitions=  3.4e+07 Memory=   603.557        t=   31.1 R=   6e+04
-Depth=    7527 States=    3e+06 Transitions= 4.91e+07 Memory=   672.209        t=   45.6 R=   7e+04
-pan: resizing hashtable to -w22..  done
-Depth=   68651 States=    4e+06 Transitions= 6.74e+07 Memory=   772.080        t=   62.9 R=   6e+04
-Depth=   68651 States=    5e+06 Transitions= 8.62e+07 Memory=   840.733        t=   80.2 R=   6e+04
-Depth=   68651 States=    6e+06 Transitions= 1.03e+08 Memory=   909.385        t=   95.7 R=   6e+04
-Depth=   68651 States=    7e+06 Transitions= 1.21e+08 Memory=   978.037        t=    112 R=   6e+04
-Depth=   68651 States=    8e+06 Transitions= 1.37e+08 Memory=  1046.690        t=    128 R=   6e+04
-Depth=   68651 States=    9e+06 Transitions= 1.52e+08 Memory=  1115.440        t=    143 R=   6e+04
-pan: resizing hashtable to -w24..  done
-Depth=   68651 States=    1e+07 Transitions= 1.72e+08 Memory=  1308.186        t=    163 R=   6e+04
-Depth=   68651 States=  1.1e+07 Transitions= 1.89e+08 Memory=  1376.838        t=    178 R=   6e+04
-Depth=   68651 States=  1.2e+07 Transitions= 2.05e+08 Memory=  1445.490        t=    193 R=   6e+04
-Depth=   68651 States=  1.3e+07 Transitions= 2.22e+08 Memory=  1514.143        t=    208 R=   6e+04
-Depth=   68651 States=  1.4e+07 Transitions= 2.39e+08 Memory=  1582.893        t=    224 R=   6e+04
-pan: claim violated! (at depth 2141)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 88 byte, depth reached 68651, errors: 1
- 14155711 states, stored
-2.2815817e+08 states, matched
-2.4231388e+08 transitions (= stored+matched)
-8.5461256e+08 atomic steps
-hash conflicts: 1.1483359e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 1565.993      equivalent memory usage for states (stored*(State-vector + overhead))
- 1008.042      actual memory usage for states (compression: 64.37%)
-               state-vector as stored = 47 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1593.537      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 158, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 400, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 227, "(1)"
-       line 409, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 256, "(1)"
-       line 419, "pan.___", state 286, "(1)"
-       line 400, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 366, "(1)"
-       line 409, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 395, "(1)"
-       line 419, "pan.___", state 425, "(1)"
-       line 541, "pan.___", state 456, "-end-"
-       (19 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 400, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 70, "(1)"
-       line 419, "pan.___", state 100, "(1)"
-       line 400, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 158, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 400, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 247, "(1)"
-       line 419, "pan.___", state 277, "(1)"
-       line 400, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 330, "(1)"
-       line 409, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 359, "(1)"
-       line 419, "pan.___", state 389, "(1)"
-       line 615, "pan.___", state 411, "-end-"
-       (18 of 411 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 410, "pan.___", state 153, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 400, "pan.___", state 209, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 223, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 254, "(1)"
-       line 414, "pan.___", state 267, "(1)"
-       line 400, "pan.___", state 300, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 314, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 345, "(1)"
-       line 414, "pan.___", state 358, "(1)"
-       line 400, "pan.___", state 395, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 409, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 440, "(1)"
-       line 414, "pan.___", state 453, "(1)"
-       line 400, "pan.___", state 488, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 533, "(1)"
-       line 414, "pan.___", state 546, "(1)"
-       line 400, "pan.___", state 582, "(1)"
-       line 404, "pan.___", state 594, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 638, "(1)"
-       line 404, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 731, "(1)"
-       line 404, "pan.___", state 777, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 795, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 821, "(1)"
-       line 419, "pan.___", state 838, "(1)"
-       line 404, "pan.___", state 868, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 886, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 912, "(1)"
-       line 419, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 963, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 981, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1007, "(1)"
-       line 419, "pan.___", state 1024, "(1)"
-       line 400, "pan.___", state 1050, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1053, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1053, "else"
-       line 400, "pan.___", state 1056, "(1)"
-       line 404, "pan.___", state 1064, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1066, "(1)"
-       line 404, "pan.___", state 1067, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1067, "else"
-       line 404, "pan.___", state 1070, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 402, "pan.___", state 1076, "((i<1))"
-       line 402, "pan.___", state 1076, "((i>=1))"
-       line 409, "pan.___", state 1082, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1095, "(1)"
-       line 410, "pan.___", state 1096, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 1096, "else"
-       line 410, "pan.___", state 1099, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 414, "pan.___", state 1108, "(1)"
-       line 414, "pan.___", state 1109, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 1109, "else"
-       line 414, "pan.___", state 1112, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 412, "pan.___", state 1118, "((i<1))"
-       line 412, "pan.___", state 1118, "((i>=1))"
-       line 419, "pan.___", state 1125, "(1)"
-       line 419, "pan.___", state 1126, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 1126, "else"
-       line 419, "pan.___", state 1129, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 404, "pan.___", state 1164, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1208, "(1)"
-       line 404, "pan.___", state 1254, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1298, "(1)"
-       line 400, "pan.___", state 1334, "(1)"
-       line 404, "pan.___", state 1346, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1390, "(1)"
-       line 404, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1483, "(1)"
-       line 404, "pan.___", state 1529, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1547, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1573, "(1)"
-       line 419, "pan.___", state 1590, "(1)"
-       line 404, "pan.___", state 1620, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1638, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1664, "(1)"
-       line 419, "pan.___", state 1681, "(1)"
-       line 404, "pan.___", state 1715, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1733, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1759, "(1)"
-       line 419, "pan.___", state 1776, "(1)"
-       line 400, "pan.___", state 1802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1804, "(1)"
-       line 400, "pan.___", state 1805, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1805, "else"
-       line 400, "pan.___", state 1808, "(1)"
-       line 404, "pan.___", state 1816, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1818, "(1)"
-       line 404, "pan.___", state 1819, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1819, "else"
-       line 404, "pan.___", state 1822, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 402, "pan.___", state 1828, "((i<1))"
-       line 402, "pan.___", state 1828, "((i>=1))"
-       line 409, "pan.___", state 1834, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1847, "(1)"
-       line 410, "pan.___", state 1848, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 1848, "else"
-       line 410, "pan.___", state 1851, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 414, "pan.___", state 1860, "(1)"
-       line 414, "pan.___", state 1861, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 1861, "else"
-       line 414, "pan.___", state 1864, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 412, "pan.___", state 1870, "((i<1))"
-       line 412, "pan.___", state 1870, "((i>=1))"
-       line 419, "pan.___", state 1877, "(1)"
-       line 419, "pan.___", state 1878, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 1878, "else"
-       line 419, "pan.___", state 1881, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 404, "pan.___", state 1916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1960, "(1)"
-       line 404, "pan.___", state 2007, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 2051, "(1)"
-       line 404, "pan.___", state 2102, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 2146, "(1)"
-       line 703, "pan.___", state 2192, "-end-"
-       (144 of 2192 states)
-unreached in proctype :init:
-       line 710, "pan.___", state 9, "((j<2))"
-       line 710, "pan.___", state 9, "((j>=2))"
-       line 711, "pan.___", state 20, "((j<2))"
-       line 711, "pan.___", state 20, "((j>=2))"
-       line 716, "pan.___", state 33, "((j<2))"
-       line 716, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 750, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 227 seconds
-pan: rate 62472.797 states/second
-pan: avg transition delay 9.3511e-07 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.spin.input b/formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 5de16b8..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.spin.input.trail b/formal-model/urcu/result-signal-over-reader/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index d437aad..0000000
+++ /dev/null
@@ -1,2144 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:3107
-2:4:3059
-3:4:3062
-4:4:3062
-5:4:3065
-6:4:3073
-7:4:3073
-8:4:3076
-9:4:3082
-10:4:3086
-11:4:3086
-12:4:3089
-13:4:3097
-14:4:3101
-15:4:3102
-16:0:3107
-17:4:3104
-18:0:3107
-19:3:869
-20:0:3107
-21:3:875
-22:0:3107
-23:3:876
-24:0:3107
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:3107
-45:3:964
-46:0:3107
-47:3:966
-48:3:967
-49:0:3107
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:3107
-69:3:1058
-70:0:3107
-71:3:1060
-72:0:3107
-73:3:1061
-74:0:3107
-75:3:1071
-76:0:3107
-77:3:1072
-78:3:1076
-79:3:1077
-80:3:1085
-81:3:1086
-82:3:1090
-83:3:1091
-84:3:1099
-85:3:1104
-86:3:1108
-87:3:1109
-88:3:1116
-89:3:1117
-90:3:1128
-91:3:1129
-92:3:1130
-93:3:1141
-94:3:1146
-95:3:1147
-96:0:3107
-97:3:1162
-98:0:3107
-99:3:1163
-100:3:1167
-101:3:1168
-102:3:1176
-103:3:1177
-104:3:1181
-105:3:1182
-106:3:1190
-107:3:1195
-108:3:1199
-109:3:1200
-110:3:1207
-111:3:1208
-112:3:1219
-113:3:1220
-114:3:1221
-115:3:1232
-116:3:1237
-117:3:1238
-118:0:3107
-119:3:1253
-120:0:3107
-121:3:1258
-122:3:1262
-123:3:1263
-124:3:1271
-125:3:1272
-126:3:1276
-127:3:1277
-128:3:1285
-129:3:1290
-130:3:1294
-131:3:1295
-132:3:1302
-133:3:1303
-134:3:1314
-135:3:1315
-136:3:1316
-137:3:1327
-138:3:1332
-139:3:1333
-140:0:3107
-141:3:1348
-142:0:3107
-143:3:1350
-144:0:3107
-145:3:1351
-146:3:1355
-147:3:1356
-148:3:1364
-149:3:1365
-150:3:1369
-151:3:1370
-152:3:1378
-153:3:1383
-154:3:1387
-155:3:1388
-156:3:1395
-157:3:1396
-158:3:1407
-159:3:1408
-160:3:1409
-161:3:1420
-162:3:1425
-163:3:1426
-164:0:3107
-165:3:1438
-166:0:3107
-167:3:1440
-168:0:3107
-169:3:1443
-170:3:1444
-171:3:1456
-172:3:1457
-173:3:1461
-174:3:1462
-175:3:1470
-176:3:1475
-177:3:1479
-178:3:1480
-179:3:1487
-180:3:1488
-181:3:1499
-182:3:1500
-183:3:1501
-184:3:1512
-185:3:1517
-186:3:1518
-187:0:3107
-188:3:1530
-189:0:3107
-190:3:1532
-191:0:3107
-192:3:1533
-193:0:3107
-194:3:1534
-195:0:3107
-196:3:1535
-197:0:3107
-198:3:1536
-199:3:1540
-200:3:1541
-201:3:1549
-202:3:1550
-203:3:1554
-204:3:1555
-205:3:1563
-206:3:1568
-207:3:1572
-208:3:1573
-209:3:1580
-210:3:1581
-211:3:1592
-212:3:1593
-213:3:1594
-214:3:1605
-215:3:1610
-216:3:1611
-217:0:3107
-218:3:1623
-219:0:3107
-220:3:1904
-221:0:3107
-222:3:2002
-223:0:3107
-224:3:2003
-225:0:3107
-226:3:2007
-227:0:3107
-228:3:2013
-229:3:2017
-230:3:2018
-231:3:2026
-232:3:2027
-233:3:2031
-234:3:2032
-235:3:2040
-236:3:2045
-237:3:2049
-238:3:2050
-239:3:2057
-240:3:2058
-241:3:2069
-242:3:2070
-243:3:2071
-244:3:2082
-245:3:2087
-246:3:2088
-247:0:3107
-248:3:2100
-249:0:3107
-250:3:2102
-251:0:3107
-252:3:2103
-253:3:2107
-254:3:2108
-255:3:2116
-256:3:2117
-257:3:2121
-258:3:2122
-259:3:2130
-260:3:2135
-261:3:2139
-262:3:2140
-263:3:2147
-264:3:2148
-265:3:2159
-266:3:2160
-267:3:2161
-268:3:2172
-269:3:2177
-270:3:2178
-271:0:3107
-272:3:2190
-273:0:3107
-274:3:2192
-275:0:3107
-276:3:2195
-277:3:2196
-278:3:2208
-279:3:2209
-280:3:2213
-281:3:2214
-282:3:2222
-283:3:2227
-284:3:2231
-285:3:2232
-286:3:2239
-287:3:2240
-288:3:2251
-289:3:2252
-290:3:2253
-291:3:2264
-292:3:2269
-293:3:2270
-294:0:3107
-295:3:2282
-296:0:3107
-297:3:2284
-298:0:3107
-299:3:2285
-300:0:3107
-301:3:2286
-302:0:3107
-303:3:2287
-304:0:3107
-305:3:2288
-306:3:2292
-307:3:2293
-308:3:2301
-309:3:2302
-310:3:2306
-311:3:2307
-312:3:2315
-313:3:2320
-314:3:2324
-315:3:2325
-316:3:2332
-317:3:2333
-318:3:2344
-319:3:2345
-320:3:2346
-321:3:2357
-322:3:2362
-323:3:2363
-324:0:3107
-325:3:2375
-326:0:3107
-327:3:2656
-328:0:3107
-329:3:2754
-330:0:3107
-331:3:2755
-332:0:3107
-333:3:2759
-334:0:3107
-335:3:2765
-336:3:2769
-337:3:2770
-338:3:2778
-339:3:2779
-340:3:2783
-341:3:2784
-342:3:2792
-343:3:2797
-344:3:2801
-345:3:2802
-346:3:2809
-347:3:2810
-348:3:2821
-349:3:2822
-350:3:2823
-351:3:2834
-352:3:2839
-353:3:2840
-354:0:3107
-355:3:2855
-356:0:3107
-357:3:2856
-358:3:2860
-359:3:2861
-360:3:2869
-361:3:2870
-362:3:2874
-363:3:2875
-364:3:2883
-365:3:2888
-366:3:2892
-367:3:2893
-368:3:2900
-369:3:2901
-370:3:2912
-371:3:2913
-372:3:2914
-373:3:2925
-374:3:2930
-375:3:2931
-376:0:3107
-377:3:2946
-378:0:3107
-379:3:2951
-380:3:2955
-381:3:2956
-382:3:2964
-383:3:2965
-384:3:2969
-385:3:2970
-386:3:2978
-387:3:2983
-388:3:2987
-389:3:2988
-390:3:2995
-391:3:2996
-392:3:3007
-393:3:3008
-394:3:3009
-395:3:3020
-396:3:3025
-397:3:3026
-398:0:3107
-399:3:3041
-400:0:3107
-401:3:3043
-402:0:3107
-403:3:3044
-404:0:3107
-405:3:876
-406:0:3107
-407:3:877
-408:3:881
-409:3:882
-410:3:890
-411:3:891
-412:3:895
-413:3:896
-414:3:904
-415:3:909
-416:3:913
-417:3:914
-418:3:921
-419:3:922
-420:3:933
-421:3:934
-422:3:935
-423:3:946
-424:3:951
-425:3:952
-426:0:3107
-427:3:964
-428:0:3107
-429:3:966
-430:3:967
-431:0:3107
-432:3:971
-433:3:975
-434:3:976
-435:3:984
-436:3:985
-437:3:989
-438:3:990
-439:3:998
-440:3:1003
-441:3:1004
-442:3:1015
-443:3:1016
-444:3:1027
-445:3:1028
-446:3:1029
-447:3:1040
-448:3:1045
-449:3:1046
-450:0:3107
-451:3:1058
-452:0:3107
-453:3:1060
-454:0:3107
-455:3:1061
-456:0:3107
-457:3:1071
-458:0:3107
-459:3:1072
-460:3:1076
-461:3:1077
-462:3:1085
-463:3:1086
-464:3:1090
-465:3:1091
-466:3:1099
-467:3:1104
-468:3:1108
-469:3:1109
-470:3:1116
-471:3:1117
-472:3:1128
-473:3:1129
-474:3:1130
-475:3:1141
-476:3:1146
-477:3:1147
-478:0:3107
-479:3:1162
-480:0:3107
-481:3:1163
-482:3:1167
-483:3:1168
-484:3:1176
-485:3:1177
-486:3:1181
-487:3:1182
-488:3:1190
-489:3:1195
-490:3:1199
-491:3:1200
-492:3:1207
-493:3:1208
-494:3:1219
-495:3:1220
-496:3:1221
-497:3:1232
-498:3:1237
-499:3:1238
-500:0:3107
-501:3:1253
-502:0:3107
-503:3:1258
-504:3:1262
-505:3:1263
-506:3:1271
-507:3:1272
-508:3:1276
-509:3:1277
-510:3:1285
-511:3:1290
-512:3:1294
-513:3:1295
-514:3:1302
-515:3:1303
-516:3:1314
-517:3:1315
-518:3:1316
-519:3:1327
-520:3:1332
-521:3:1333
-522:0:3107
-523:3:1348
-524:0:3107
-525:3:1350
-526:0:3107
-527:3:1351
-528:3:1355
-529:3:1356
-530:3:1364
-531:3:1365
-532:3:1369
-533:3:1370
-534:3:1378
-535:3:1383
-536:3:1387
-537:3:1388
-538:3:1395
-539:3:1396
-540:3:1407
-541:3:1408
-542:3:1409
-543:3:1420
-544:3:1425
-545:3:1426
-546:0:3107
-547:3:1438
-548:0:3107
-549:3:1440
-550:0:3107
-551:3:1443
-552:3:1444
-553:3:1456
-554:3:1457
-555:3:1461
-556:3:1462
-557:3:1470
-558:3:1475
-559:3:1479
-560:3:1480
-561:3:1487
-562:3:1488
-563:3:1499
-564:3:1500
-565:3:1501
-566:3:1512
-567:3:1517
-568:3:1518
-569:0:3107
-570:3:1530
-571:0:3107
-572:3:1532
-573:0:3107
-574:3:1533
-575:0:3107
-576:3:1534
-577:0:3107
-578:3:1535
-579:0:3107
-580:3:1536
-581:3:1540
-582:3:1541
-583:3:1549
-584:3:1550
-585:3:1554
-586:3:1555
-587:3:1563
-588:3:1568
-589:3:1572
-590:3:1573
-591:3:1580
-592:3:1581
-593:3:1592
-594:3:1593
-595:3:1594
-596:3:1605
-597:3:1610
-598:3:1611
-599:0:3107
-600:3:1623
-601:0:3107
-602:3:1904
-603:0:3107
-604:3:2002
-605:0:3107
-606:3:2003
-607:0:3107
-608:3:2007
-609:0:3107
-610:3:2013
-611:3:2017
-612:3:2018
-613:3:2026
-614:3:2027
-615:3:2031
-616:3:2032
-617:3:2040
-618:3:2045
-619:3:2049
-620:3:2050
-621:3:2057
-622:3:2058
-623:3:2069
-624:3:2070
-625:3:2071
-626:3:2082
-627:3:2087
-628:3:2088
-629:0:3107
-630:3:2100
-631:0:3107
-632:3:2102
-633:0:3107
-634:3:2103
-635:3:2107
-636:3:2108
-637:3:2116
-638:3:2117
-639:3:2121
-640:3:2122
-641:3:2130
-642:3:2135
-643:3:2139
-644:3:2140
-645:3:2147
-646:3:2148
-647:3:2159
-648:3:2160
-649:3:2161
-650:3:2172
-651:3:2177
-652:3:2178
-653:0:3107
-654:3:2190
-655:0:3107
-656:3:2192
-657:0:3107
-658:3:2195
-659:3:2196
-660:3:2208
-661:3:2209
-662:3:2213
-663:3:2214
-664:3:2222
-665:3:2227
-666:3:2231
-667:3:2232
-668:3:2239
-669:3:2240
-670:3:2251
-671:3:2252
-672:3:2253
-673:3:2264
-674:3:2269
-675:3:2270
-676:0:3107
-677:3:2282
-678:0:3107
-679:3:2284
-680:0:3107
-681:3:2285
-682:0:3107
-683:3:2286
-684:0:3107
-685:3:2287
-686:0:3107
-687:3:2288
-688:3:2292
-689:3:2293
-690:3:2301
-691:3:2302
-692:3:2306
-693:3:2307
-694:3:2315
-695:3:2320
-696:3:2324
-697:3:2325
-698:3:2332
-699:3:2333
-700:3:2344
-701:3:2345
-702:3:2346
-703:3:2357
-704:3:2362
-705:3:2363
-706:0:3107
-707:3:2375
-708:0:3107
-709:3:2656
-710:0:3107
-711:3:2754
-712:0:3107
-713:3:2755
-714:0:3107
-715:3:2759
-716:0:3107
-717:3:2765
-718:3:2769
-719:3:2770
-720:3:2778
-721:3:2779
-722:3:2783
-723:3:2784
-724:3:2792
-725:3:2797
-726:3:2801
-727:3:2802
-728:3:2809
-729:3:2810
-730:3:2821
-731:3:2822
-732:3:2823
-733:3:2834
-734:3:2839
-735:3:2840
-736:0:3107
-737:3:2855
-738:0:3107
-739:3:2856
-740:3:2860
-741:3:2861
-742:3:2869
-743:3:2870
-744:3:2874
-745:3:2875
-746:3:2883
-747:3:2888
-748:3:2892
-749:3:2893
-750:3:2900
-751:3:2901
-752:3:2912
-753:3:2913
-754:3:2914
-755:3:2925
-756:3:2930
-757:3:2931
-758:0:3107
-759:3:2946
-760:0:3107
-761:3:2951
-762:3:2955
-763:3:2956
-764:3:2964
-765:3:2965
-766:3:2969
-767:3:2970
-768:3:2978
-769:3:2983
-770:3:2987
-771:3:2988
-772:3:2995
-773:3:2996
-774:3:3007
-775:3:3008
-776:3:3009
-777:3:3020
-778:3:3025
-779:3:3026
-780:0:3107
-781:3:3041
-782:0:3107
-783:3:3043
-784:0:3107
-785:3:3044
-786:0:3107
-787:3:876
-788:0:3107
-789:3:877
-790:3:881
-791:3:882
-792:3:890
-793:3:891
-794:3:895
-795:3:896
-796:3:904
-797:3:909
-798:3:913
-799:3:914
-800:3:921
-801:3:922
-802:3:933
-803:3:934
-804:3:935
-805:3:946
-806:3:951
-807:3:952
-808:0:3107
-809:3:964
-810:0:3107
-811:3:966
-812:3:967
-813:0:3107
-814:3:971
-815:3:975
-816:3:976
-817:3:984
-818:3:985
-819:3:989
-820:3:990
-821:3:998
-822:3:1003
-823:3:1004
-824:3:1015
-825:3:1016
-826:3:1027
-827:3:1028
-828:3:1029
-829:3:1040
-830:3:1045
-831:3:1046
-832:0:3107
-833:3:1058
-834:0:3107
-835:3:1060
-836:0:3107
-837:3:1061
-838:0:3107
-839:3:1071
-840:0:3107
-841:3:1072
-842:3:1076
-843:3:1077
-844:3:1085
-845:3:1086
-846:3:1090
-847:3:1091
-848:3:1099
-849:3:1104
-850:3:1108
-851:3:1109
-852:3:1116
-853:3:1117
-854:3:1128
-855:3:1129
-856:3:1130
-857:3:1141
-858:3:1146
-859:3:1147
-860:0:3107
-861:3:1162
-862:0:3107
-863:3:1163
-864:3:1167
-865:3:1168
-866:3:1176
-867:3:1177
-868:3:1181
-869:3:1182
-870:3:1190
-871:3:1195
-872:3:1199
-873:3:1200
-874:3:1207
-875:3:1208
-876:3:1219
-877:3:1220
-878:3:1221
-879:3:1232
-880:3:1237
-881:3:1238
-882:0:3107
-883:3:1253
-884:0:3107
-885:3:1258
-886:3:1262
-887:3:1263
-888:3:1271
-889:3:1272
-890:3:1276
-891:3:1277
-892:3:1285
-893:3:1290
-894:3:1294
-895:3:1295
-896:3:1302
-897:3:1303
-898:3:1314
-899:3:1315
-900:3:1316
-901:3:1327
-902:3:1332
-903:3:1333
-904:0:3107
-905:3:1348
-906:0:3107
-907:3:1350
-908:0:3107
-909:3:1351
-910:3:1355
-911:3:1356
-912:3:1364
-913:3:1365
-914:3:1369
-915:3:1370
-916:3:1378
-917:3:1383
-918:3:1387
-919:3:1388
-920:3:1395
-921:3:1396
-922:3:1407
-923:3:1408
-924:3:1409
-925:3:1420
-926:3:1425
-927:3:1426
-928:0:3107
-929:3:1438
-930:0:3107
-931:3:1440
-932:0:3107
-933:3:1443
-934:3:1444
-935:3:1456
-936:3:1457
-937:3:1461
-938:3:1462
-939:3:1470
-940:3:1475
-941:3:1479
-942:3:1480
-943:3:1487
-944:3:1488
-945:3:1499
-946:3:1500
-947:3:1501
-948:3:1512
-949:3:1517
-950:3:1518
-951:0:3107
-952:3:1530
-953:0:3107
-954:3:1532
-955:0:3107
-956:3:1533
-957:0:3107
-958:3:1534
-959:0:3107
-960:3:1535
-961:0:3107
-962:3:1536
-963:3:1540
-964:3:1541
-965:3:1549
-966:3:1550
-967:3:1554
-968:3:1555
-969:3:1563
-970:3:1568
-971:3:1572
-972:3:1573
-973:3:1580
-974:3:1581
-975:3:1592
-976:3:1593
-977:3:1594
-978:3:1605
-979:3:1610
-980:3:1611
-981:0:3107
-982:3:1623
-983:0:3107
-984:3:1904
-985:0:3107
-986:3:2002
-987:0:3107
-988:3:2003
-989:0:3107
-990:3:2007
-991:0:3107
-992:3:2013
-993:3:2017
-994:3:2018
-995:3:2026
-996:3:2027
-997:3:2031
-998:3:2032
-999:3:2040
-1000:3:2045
-1001:3:2049
-1002:3:2050
-1003:3:2057
-1004:3:2058
-1005:3:2069
-1006:3:2070
-1007:3:2071
-1008:3:2082
-1009:3:2087
-1010:3:2088
-1011:0:3107
-1012:3:2100
-1013:0:3107
-1014:3:2102
-1015:0:3107
-1016:3:2103
-1017:3:2107
-1018:3:2108
-1019:3:2116
-1020:3:2117
-1021:3:2121
-1022:3:2122
-1023:3:2130
-1024:3:2135
-1025:3:2139
-1026:3:2140
-1027:3:2147
-1028:3:2148
-1029:3:2159
-1030:3:2160
-1031:3:2161
-1032:3:2172
-1033:3:2177
-1034:3:2178
-1035:0:3107
-1036:3:2190
-1037:0:3107
-1038:3:2192
-1039:0:3107
-1040:3:2195
-1041:3:2196
-1042:3:2208
-1043:3:2209
-1044:3:2213
-1045:3:2214
-1046:3:2222
-1047:3:2227
-1048:3:2231
-1049:3:2232
-1050:3:2239
-1051:3:2240
-1052:3:2251
-1053:3:2252
-1054:3:2253
-1055:3:2264
-1056:3:2269
-1057:3:2270
-1058:0:3107
-1059:3:2282
-1060:0:3107
-1061:3:2284
-1062:0:3107
-1063:3:2285
-1064:0:3107
-1065:3:2286
-1066:0:3107
-1067:3:2287
-1068:0:3107
-1069:3:2288
-1070:3:2292
-1071:3:2293
-1072:3:2301
-1073:3:2302
-1074:3:2306
-1075:3:2307
-1076:3:2315
-1077:3:2320
-1078:3:2324
-1079:3:2325
-1080:3:2332
-1081:3:2333
-1082:3:2344
-1083:3:2345
-1084:3:2346
-1085:3:2357
-1086:3:2362
-1087:3:2363
-1088:0:3107
-1089:3:2375
-1090:0:3107
-1091:3:2656
-1092:0:3107
-1093:3:2754
-1094:0:3107
-1095:3:2755
-1096:0:3107
-1097:3:2759
-1098:0:3107
-1099:3:2765
-1100:3:2769
-1101:3:2770
-1102:3:2778
-1103:3:2779
-1104:3:2783
-1105:3:2784
-1106:3:2792
-1107:3:2797
-1108:3:2801
-1109:3:2802
-1110:3:2809
-1111:3:2810
-1112:3:2821
-1113:3:2822
-1114:3:2823
-1115:3:2834
-1116:3:2839
-1117:3:2840
-1118:0:3107
-1119:3:2855
-1120:0:3107
-1121:3:2856
-1122:3:2860
-1123:3:2861
-1124:3:2869
-1125:3:2870
-1126:3:2874
-1127:3:2875
-1128:3:2883
-1129:3:2888
-1130:3:2892
-1131:3:2893
-1132:3:2900
-1133:3:2901
-1134:3:2912
-1135:3:2913
-1136:3:2914
-1137:3:2925
-1138:3:2930
-1139:3:2931
-1140:0:3107
-1141:3:2946
-1142:0:3107
-1143:3:2951
-1144:3:2955
-1145:3:2956
-1146:3:2964
-1147:3:2965
-1148:3:2969
-1149:3:2970
-1150:3:2978
-1151:3:2983
-1152:3:2987
-1153:3:2988
-1154:3:2995
-1155:3:2996
-1156:3:3007
-1157:3:3008
-1158:3:3009
-1159:3:3020
-1160:3:3025
-1161:3:3026
-1162:0:3107
-1163:3:3041
-1164:0:3107
-1165:3:3043
-1166:0:3107
-1167:3:3044
-1168:0:3107
-1169:3:876
-1170:0:3107
-1171:3:877
-1172:3:881
-1173:3:882
-1174:3:890
-1175:3:891
-1176:3:895
-1177:3:896
-1178:3:904
-1179:3:909
-1180:3:913
-1181:3:914
-1182:3:921
-1183:3:922
-1184:3:933
-1185:3:934
-1186:3:935
-1187:3:946
-1188:3:951
-1189:3:952
-1190:0:3107
-1191:3:964
-1192:0:3107
-1193:3:966
-1194:3:967
-1195:0:3107
-1196:3:971
-1197:3:975
-1198:3:976
-1199:3:984
-1200:3:985
-1201:3:989
-1202:3:990
-1203:3:998
-1204:3:1003
-1205:3:1004
-1206:3:1015
-1207:3:1016
-1208:3:1027
-1209:3:1028
-1210:3:1029
-1211:3:1040
-1212:3:1045
-1213:3:1046
-1214:0:3107
-1215:3:1058
-1216:0:3107
-1217:3:1060
-1218:0:3107
-1219:3:1061
-1220:0:3107
-1221:3:1071
-1222:0:3107
-1223:3:1072
-1224:3:1076
-1225:3:1077
-1226:3:1085
-1227:3:1086
-1228:3:1090
-1229:3:1091
-1230:3:1099
-1231:3:1104
-1232:3:1108
-1233:3:1109
-1234:3:1116
-1235:3:1117
-1236:3:1128
-1237:3:1129
-1238:3:1130
-1239:3:1141
-1240:3:1146
-1241:3:1147
-1242:0:3107
-1243:3:1162
-1244:0:3107
-1245:3:1163
-1246:3:1167
-1247:3:1168
-1248:3:1176
-1249:3:1177
-1250:3:1181
-1251:3:1182
-1252:3:1190
-1253:3:1195
-1254:3:1199
-1255:3:1200
-1256:3:1207
-1257:3:1208
-1258:3:1219
-1259:3:1220
-1260:3:1221
-1261:3:1232
-1262:3:1237
-1263:3:1238
-1264:0:3107
-1265:3:1253
-1266:0:3107
-1267:3:1258
-1268:3:1262
-1269:3:1263
-1270:3:1271
-1271:3:1272
-1272:3:1276
-1273:3:1277
-1274:3:1285
-1275:3:1290
-1276:3:1294
-1277:3:1295
-1278:3:1302
-1279:3:1303
-1280:3:1314
-1281:3:1315
-1282:3:1316
-1283:3:1327
-1284:3:1332
-1285:3:1333
-1286:0:3107
-1287:3:1348
-1288:0:3107
-1289:3:1350
-1290:0:3107
-1291:3:1351
-1292:3:1355
-1293:3:1356
-1294:3:1364
-1295:3:1365
-1296:3:1369
-1297:3:1370
-1298:3:1378
-1299:3:1383
-1300:3:1387
-1301:3:1388
-1302:3:1395
-1303:3:1396
-1304:3:1407
-1305:3:1408
-1306:3:1409
-1307:3:1420
-1308:3:1425
-1309:3:1426
-1310:0:3107
-1311:3:1438
-1312:0:3107
-1313:3:1440
-1314:0:3107
-1315:3:1443
-1316:3:1444
-1317:3:1456
-1318:3:1457
-1319:3:1461
-1320:3:1462
-1321:3:1470
-1322:3:1475
-1323:3:1479
-1324:3:1480
-1325:3:1487
-1326:3:1488
-1327:3:1499
-1328:3:1500
-1329:3:1501
-1330:3:1512
-1331:3:1517
-1332:3:1518
-1333:0:3107
-1334:3:1530
-1335:0:3107
-1336:3:1532
-1337:0:3107
-1338:3:1533
-1339:0:3107
-1340:3:1534
-1341:0:3107
-1342:3:1535
-1343:0:3107
-1344:3:1536
-1345:3:1540
-1346:3:1541
-1347:3:1549
-1348:3:1550
-1349:3:1554
-1350:3:1555
-1351:3:1563
-1352:3:1568
-1353:3:1572
-1354:3:1573
-1355:3:1580
-1356:3:1581
-1357:3:1592
-1358:3:1593
-1359:3:1594
-1360:3:1605
-1361:3:1610
-1362:3:1611
-1363:0:3107
-1364:3:1623
-1365:0:3107
-1366:3:1904
-1367:0:3107
-1368:3:2002
-1369:0:3107
-1370:3:2003
-1371:0:3107
-1372:3:2007
-1373:0:3107
-1374:3:2013
-1375:3:2017
-1376:3:2018
-1377:3:2026
-1378:3:2027
-1379:3:2031
-1380:3:2032
-1381:3:2040
-1382:3:2045
-1383:3:2049
-1384:3:2050
-1385:3:2057
-1386:3:2058
-1387:3:2069
-1388:3:2070
-1389:3:2071
-1390:3:2082
-1391:3:2087
-1392:3:2088
-1393:0:3107
-1394:3:2100
-1395:0:3107
-1396:3:2102
-1397:0:3107
-1398:3:2103
-1399:3:2107
-1400:3:2108
-1401:3:2116
-1402:3:2117
-1403:3:2121
-1404:3:2122
-1405:3:2130
-1406:3:2135
-1407:3:2139
-1408:3:2140
-1409:3:2147
-1410:3:2148
-1411:3:2159
-1412:3:2160
-1413:3:2161
-1414:3:2172
-1415:3:2177
-1416:3:2178
-1417:0:3107
-1418:3:2190
-1419:0:3107
-1420:3:2192
-1421:0:3107
-1422:3:2195
-1423:3:2196
-1424:3:2208
-1425:3:2209
-1426:3:2213
-1427:3:2214
-1428:3:2222
-1429:3:2227
-1430:3:2231
-1431:3:2232
-1432:3:2239
-1433:3:2240
-1434:3:2251
-1435:3:2252
-1436:3:2253
-1437:3:2264
-1438:3:2269
-1439:3:2270
-1440:0:3107
-1441:3:2282
-1442:0:3107
-1443:3:2284
-1444:0:3107
-1445:3:2285
-1446:0:3107
-1447:3:2286
-1448:0:3107
-1449:3:2287
-1450:0:3107
-1451:3:2288
-1452:3:2292
-1453:3:2293
-1454:3:2301
-1455:3:2302
-1456:3:2306
-1457:3:2307
-1458:3:2315
-1459:3:2320
-1460:3:2324
-1461:3:2325
-1462:3:2332
-1463:3:2333
-1464:3:2344
-1465:3:2345
-1466:3:2346
-1467:3:2357
-1468:3:2362
-1469:3:2363
-1470:0:3107
-1471:3:2375
-1472:0:3107
-1473:3:2656
-1474:0:3107
-1475:3:2754
-1476:0:3107
-1477:3:2755
-1478:0:3107
-1479:3:2759
-1480:0:3107
-1481:3:2765
-1482:3:2769
-1483:3:2770
-1484:3:2778
-1485:3:2779
-1486:3:2783
-1487:3:2784
-1488:3:2792
-1489:3:2797
-1490:3:2801
-1491:3:2802
-1492:3:2809
-1493:3:2810
-1494:3:2821
-1495:3:2822
-1496:3:2823
-1497:3:2834
-1498:3:2839
-1499:3:2840
-1500:0:3107
-1501:3:2855
-1502:0:3107
-1503:3:2856
-1504:3:2860
-1505:3:2861
-1506:3:2869
-1507:3:2870
-1508:3:2874
-1509:3:2875
-1510:3:2883
-1511:3:2888
-1512:3:2892
-1513:3:2893
-1514:3:2900
-1515:3:2901
-1516:3:2912
-1517:3:2913
-1518:3:2914
-1519:3:2925
-1520:3:2930
-1521:3:2931
-1522:0:3107
-1523:3:2946
-1524:0:3107
-1525:3:2951
-1526:3:2955
-1527:3:2956
-1528:3:2964
-1529:3:2965
-1530:3:2969
-1531:3:2970
-1532:3:2978
-1533:3:2983
-1534:3:2987
-1535:3:2988
-1536:3:2995
-1537:3:2996
-1538:3:3007
-1539:3:3008
-1540:3:3009
-1541:3:3020
-1542:3:3025
-1543:3:3026
-1544:0:3107
-1545:3:3041
-1546:0:3107
-1547:3:3043
-1548:0:3107
-1549:3:3044
-1550:0:3107
-1551:3:876
-1552:0:3107
-1553:3:877
-1554:3:881
-1555:3:882
-1556:3:890
-1557:3:891
-1558:3:895
-1559:3:896
-1560:3:904
-1561:3:909
-1562:3:913
-1563:3:914
-1564:3:921
-1565:3:922
-1566:3:933
-1567:3:934
-1568:3:935
-1569:3:946
-1570:3:951
-1571:3:952
-1572:0:3107
-1573:3:964
-1574:0:3107
-1575:3:966
-1576:3:967
-1577:0:3107
-1578:3:971
-1579:3:975
-1580:3:976
-1581:3:984
-1582:3:985
-1583:3:989
-1584:3:990
-1585:3:998
-1586:3:1011
-1587:3:1012
-1588:3:1015
-1589:3:1016
-1590:3:1027
-1591:3:1028
-1592:3:1029
-1593:3:1040
-1594:3:1045
-1595:3:1048
-1596:3:1049
-1597:0:3107
-1598:3:1058
-1599:0:3107
-1600:3:1060
-1601:0:3107
-1602:3:1061
-1603:0:3107
-1604:3:1071
-1605:0:3107
-1606:3:1072
-1607:3:1076
-1608:3:1077
-1609:3:1085
-1610:3:1086
-1611:3:1090
-1612:3:1091
-1613:3:1099
-1614:3:1112
-1615:3:1113
-1616:3:1116
-1617:3:1117
-1618:3:1128
-1619:3:1129
-1620:3:1130
-1621:3:1141
-1622:3:1146
-1623:3:1149
-1624:3:1150
-1625:0:3107
-1626:3:1162
-1627:0:3107
-1628:3:1163
-1629:3:1167
-1630:3:1168
-1631:3:1176
-1632:3:1177
-1633:3:1181
-1634:3:1182
-1635:3:1190
-1636:3:1203
-1637:3:1204
-1638:3:1207
-1639:3:1208
-1640:3:1219
-1641:3:1220
-1642:3:1221
-1643:3:1232
-1644:3:1237
-1645:3:1240
-1646:3:1241
-1647:0:3107
-1648:3:1253
-1649:0:3107
-1650:3:1258
-1651:3:1262
-1652:3:1263
-1653:3:1271
-1654:3:1272
-1655:3:1276
-1656:3:1277
-1657:3:1285
-1658:3:1298
-1659:3:1299
-1660:3:1302
-1661:3:1303
-1662:3:1314
-1663:3:1315
-1664:3:1316
-1665:3:1327
-1666:3:1332
-1667:3:1335
-1668:3:1336
-1669:0:3107
-1670:3:1348
-1671:0:3107
-1672:3:1350
-1673:0:3107
-1674:3:1351
-1675:3:1355
-1676:3:1356
-1677:3:1364
-1678:3:1365
-1679:3:1369
-1680:3:1370
-1681:3:1378
-1682:3:1391
-1683:3:1392
-1684:3:1395
-1685:3:1396
-1686:3:1407
-1687:3:1408
-1688:3:1409
-1689:3:1420
-1690:3:1425
-1691:3:1428
-1692:3:1429
-1693:0:3107
-1694:3:1438
-1695:0:3107
-1696:3:1440
-1697:0:3107
-1698:3:1443
-1699:3:1444
-1700:3:1456
-1701:3:1457
-1702:3:1461
-1703:3:1462
-1704:3:1470
-1705:3:1483
-1706:3:1484
-1707:3:1487
-1708:3:1488
-1709:3:1499
-1710:3:1500
-1711:3:1501
-1712:3:1512
-1713:3:1517
-1714:3:1520
-1715:3:1521
-1716:0:3107
-1717:3:1530
-1718:0:3107
-1719:3:1532
-1720:0:3107
-1721:3:1533
-1722:0:3107
-1723:3:1534
-1724:0:3107
-1725:3:1535
-1726:0:3107
-1727:3:1536
-1728:3:1540
-1729:3:1541
-1730:3:1549
-1731:3:1550
-1732:3:1554
-1733:3:1555
-1734:3:1563
-1735:3:1576
-1736:3:1577
-1737:3:1580
-1738:3:1581
-1739:3:1592
-1740:3:1593
-1741:3:1594
-1742:3:1605
-1743:3:1610
-1744:3:1613
-1745:3:1614
-1746:0:3107
-1747:3:1623
-1748:0:3107
-1749:3:1904
-1750:0:3107
-1751:3:2002
-1752:0:3107
-1753:3:2003
-1754:0:3107
-1755:3:2007
-1756:0:3107
-1757:3:2013
-1758:3:2017
-1759:3:2018
-1760:3:2026
-1761:3:2027
-1762:3:2031
-1763:3:2032
-1764:3:2040
-1765:3:2053
-1766:3:2054
-1767:3:2057
-1768:3:2058
-1769:3:2069
-1770:3:2070
-1771:3:2071
-1772:3:2082
-1773:3:2087
-1774:3:2090
-1775:3:2091
-1776:0:3107
-1777:3:2100
-1778:0:3107
-1779:3:2102
-1780:0:3107
-1781:3:2103
-1782:3:2107
-1783:3:2108
-1784:3:2116
-1785:3:2117
-1786:3:2121
-1787:3:2122
-1788:3:2130
-1789:3:2143
-1790:3:2144
-1791:3:2147
-1792:3:2148
-1793:3:2159
-1794:3:2160
-1795:3:2161
-1796:3:2172
-1797:3:2177
-1798:3:2180
-1799:3:2181
-1800:0:3107
-1801:3:2190
-1802:0:3107
-1803:3:2192
-1804:0:3107
-1805:3:2195
-1806:3:2196
-1807:3:2208
-1808:3:2209
-1809:3:2213
-1810:3:2214
-1811:3:2222
-1812:3:2235
-1813:3:2236
-1814:3:2239
-1815:3:2240
-1816:3:2251
-1817:3:2252
-1818:3:2253
-1819:3:2264
-1820:3:2269
-1821:3:2272
-1822:3:2273
-1823:0:3107
-1824:3:2282
-1825:0:3107
-1826:3:2284
-1827:0:3107
-1828:3:2285
-1829:0:3107
-1830:3:2286
-1831:0:3107
-1832:3:2287
-1833:0:3107
-1834:3:2288
-1835:3:2292
-1836:3:2293
-1837:3:2301
-1838:3:2302
-1839:3:2306
-1840:3:2307
-1841:3:2315
-1842:3:2328
-1843:3:2329
-1844:3:2332
-1845:3:2333
-1846:3:2344
-1847:3:2345
-1848:3:2346
-1849:3:2357
-1850:3:2362
-1851:3:2365
-1852:3:2366
-1853:0:3107
-1854:3:2375
-1855:0:3107
-1856:3:2656
-1857:0:3107
-1858:3:2754
-1859:0:3107
-1860:3:2755
-1861:0:3107
-1862:3:2759
-1863:0:3107
-1864:3:2765
-1865:3:2769
-1866:3:2770
-1867:3:2778
-1868:3:2779
-1869:3:2783
-1870:3:2784
-1871:3:2792
-1872:3:2805
-1873:3:2806
-1874:3:2809
-1875:3:2810
-1876:3:2821
-1877:3:2822
-1878:3:2823
-1879:3:2834
-1880:3:2839
-1881:3:2842
-1882:3:2843
-1883:0:3107
-1884:3:2855
-1885:0:3107
-1886:3:2856
-1887:3:2860
-1888:3:2861
-1889:3:2869
-1890:3:2870
-1891:3:2874
-1892:3:2875
-1893:3:2883
-1894:3:2896
-1895:3:2897
-1896:3:2900
-1897:3:2901
-1898:3:2912
-1899:3:2913
-1900:3:2914
-1901:3:2925
-1902:3:2930
-1903:3:2933
-1904:3:2934
-1905:0:3107
-1906:3:2946
-1907:0:3107
-1908:3:2951
-1909:3:2955
-1910:3:2956
-1911:3:2964
-1912:3:2965
-1913:3:2969
-1914:3:2970
-1915:3:2978
-1916:3:2991
-1917:3:2992
-1918:3:2995
-1919:3:2996
-1920:3:3007
-1921:3:3008
-1922:3:3009
-1923:3:3020
-1924:3:3025
-1925:3:3028
-1926:3:3029
-1927:0:3107
-1928:3:3041
-1929:0:3107
-1930:3:3043
-1931:0:3107
-1932:3:3044
-1933:0:3107
-1934:3:3047
-1935:0:3107
-1936:3:3052
-1937:0:3107
-1938:2:458
-1939:0:3107
-1940:3:3053
-1941:0:3107
-1942:2:464
-1943:0:3107
-1944:3:3052
-1945:0:3107
-1946:2:465
-1947:0:3107
-1948:3:3053
-1949:0:3107
-1950:2:466
-1951:0:3107
-1952:3:3052
-1953:0:3107
-1954:2:467
-1955:0:3107
-1956:3:3053
-1957:0:3107
-1958:1:2
-1959:0:3107
-1960:3:3052
-1961:0:3107
-1962:2:468
-1963:0:3107
-1964:3:3053
-1965:0:3107
-1966:1:8
-1967:0:3107
-1968:3:3052
-1969:0:3107
-1970:2:467
-1971:0:3107
-1972:3:3053
-1973:0:3107
-1974:1:9
-1975:0:3107
-1976:3:3052
-1977:0:3107
-1978:2:468
-1979:0:3107
-1980:3:3053
-1981:0:3107
-1982:1:10
-1983:0:3107
-1984:3:3052
-1985:0:3107
-1986:2:467
-1987:0:3107
-1988:3:3053
-1989:0:3107
-1990:1:11
-1991:0:3107
-1992:3:3052
-1993:0:3107
-1994:2:468
-1995:0:3107
-1996:3:3053
-1997:0:3107
-1998:1:12
-1999:1:16
-2000:1:17
-2001:1:25
-2002:1:26
-2003:1:30
-2004:1:31
-2005:1:39
-2006:1:44
-2007:1:48
-2008:1:49
-2009:1:56
-2010:1:57
-2011:1:68
-2012:1:69
-2013:1:70
-2014:1:81
-2015:1:86
-2016:1:87
-2017:0:3107
-2018:3:3052
-2019:0:3107
-2020:2:467
-2021:0:3107
-2022:3:3053
-2023:0:3107
-2024:1:99
-2025:0:3107
-2026:3:3052
-2027:0:3107
-2028:2:468
-2029:0:3107
-2030:3:3053
-2031:0:3107
-2032:2:469
-2033:0:3107
-2034:3:3052
-2035:0:3107
-2036:2:475
-2037:0:3107
-2038:3:3053
-2039:0:3107
-2040:2:476
-2041:0:3107
-2042:3:3052
-2043:0:3107
-2044:2:477
-2045:2:481
-2046:2:482
-2047:2:490
-2048:2:491
-2049:2:495
-2050:2:496
-2051:2:504
-2052:2:509
-2053:2:513
-2054:2:514
-2055:2:521
-2056:2:522
-2057:2:533
-2058:2:534
-2059:2:535
-2060:2:546
-2061:2:551
-2062:2:552
-2063:0:3107
-2064:3:3053
-2065:0:3107
-2066:2:564
-2067:0:3107
-2068:3:3052
-2069:0:3107
-2070:2:565
-2071:2:569
-2072:2:570
-2073:2:578
-2074:2:579
-2075:2:583
-2076:2:584
-2077:2:592
-2078:2:597
-2079:2:601
-2080:2:602
-2081:2:609
-2082:2:610
-2083:2:621
-2084:2:622
-2085:2:623
-2086:2:634
-2087:2:639
-2088:2:640
-2089:0:3107
-2090:3:3053
-2091:0:3107
-2092:2:652
-2093:0:3107
-2094:3:3052
-2095:0:3107
-2096:2:653
-2097:0:3107
-2098:3:3053
-2099:0:3107
-2100:2:654
-2101:2:658
-2102:2:659
-2103:2:667
-2104:2:668
-2105:2:672
-2106:2:673
-2107:2:681
-2108:2:686
-2109:2:690
-2110:2:691
-2111:2:698
-2112:2:699
-2113:2:710
-2114:2:711
-2115:2:712
-2116:2:723
-2117:2:728
-2118:2:729
-2119:0:3107
-2120:3:3052
-2121:0:3107
-2122:2:741
-2123:0:3107
-2124:3:3053
-2125:0:3107
-2126:2:750
-2127:0:3107
-2128:3:3052
-2129:0:3107
-2130:2:753
-2131:0:3107
-2132:3:3053
-2133:0:3107
-2134:2:758
-2135:0:3107
-2136:3:3052
-2137:0:3107
-2138:2:759
-2139:0:3105
-2140:3:3053
-2141:0:3111
-2142:2:647
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.define b/formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.log b/formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 5bcef22..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-Depth=    5678 States=    1e+06 Transitions= 8.21e+06 Memory=   534.904        t=   6.72 R=   1e+05
-Depth=    5678 States=    2e+06 Transitions=  1.6e+07 Memory=   603.557        t=   13.4 R=   1e+05
-Depth=   16003 States=    3e+06 Transitions= 2.49e+07 Memory=   672.209        t=   21.5 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=   31043 States=    4e+06 Transitions= 3.44e+07 Memory=   771.983        t=   30.1 R=   1e+05
-Depth=   31043 States=    5e+06 Transitions= 4.41e+07 Memory=   840.635        t=   38.4 R=   1e+05
-Depth=   31043 States=    6e+06 Transitions= 5.25e+07 Memory=   909.287        t=   45.7 R=   1e+05
-Depth=   31043 States=    7e+06 Transitions= 6.12e+07 Memory=   977.940        t=   53.4 R=   1e+05
-Depth=   31043 States=    8e+06 Transitions= 6.95e+07 Memory=  1046.690        t=   60.8 R=   1e+05
-Depth=   31043 States=    9e+06 Transitions= 7.78e+07 Memory=  1115.342        t=   68.5 R=   1e+05
-pan: resizing hashtable to -w24..  done
-Depth=   31043 States=    1e+07 Transitions= 8.68e+07 Memory=  1308.088        t=   77.9 R=   1e+05
-Depth=   31043 States=  1.1e+07 Transitions= 1.01e+08 Memory=  1376.740        t=   90.1 R=   1e+05
-Depth=   31043 States=  1.2e+07 Transitions= 1.13e+08 Memory=  1445.393        t=    101 R=   1e+05
-Depth=   31043 States=  1.3e+07 Transitions= 1.25e+08 Memory=  1514.045        t=    111 R=   1e+05
-Depth=   31043 States=  1.4e+07 Transitions= 1.38e+08 Memory=  1582.795        t=    122 R=   1e+05
-pan: claim violated! (at depth 1774)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 31043, errors: 1
- 14288659 states, stored
-1.2755714e+08 states, matched
-1.418458e+08 transitions (= stored+matched)
-4.6616273e+08 atomic steps
-hash conflicts:  65726574 (resolved)
-
-Stats on memory usage (in Megabytes):
- 1253.659      equivalent memory usage for states (stored*(State-vector + overhead))
- 1017.191      actual memory usage for states (compression: 81.14%)
-               state-vector as stored = 47 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1602.619      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 175, "pan.___", state 243, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 265, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 291, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 304, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 320, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 334, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 352, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 365, "(1)"
-       line 413, "pan.___", state 378, "(1)"
-       line 418, "pan.___", state 395, "(1)"
-       line 399, "pan.___", state 414, "(1)"
-       line 403, "pan.___", state 426, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 444, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 470, "(1)"
-       line 418, "pan.___", state 487, "(1)"
-       line 403, "pan.___", state 519, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 537, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 563, "(1)"
-       line 418, "pan.___", state 580, "(1)"
-       line 179, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 175, "pan.___", state 629, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 651, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 677, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 690, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 714, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 716, "(1)"
-       line 399, "pan.___", state 717, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 717, "else"
-       line 399, "pan.___", state 720, "(1)"
-       line 403, "pan.___", state 728, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 730, "(1)"
-       line 403, "pan.___", state 731, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 731, "else"
-       line 403, "pan.___", state 734, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 401, "pan.___", state 740, "((i<1))"
-       line 401, "pan.___", state 740, "((i>=1))"
-       line 408, "pan.___", state 746, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 759, "(1)"
-       line 409, "pan.___", state 760, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 760, "else"
-       line 409, "pan.___", state 763, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 413, "pan.___", state 772, "(1)"
-       line 413, "pan.___", state 773, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 773, "else"
-       line 413, "pan.___", state 776, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 411, "pan.___", state 782, "((i<1))"
-       line 411, "pan.___", state 782, "((i>=1))"
-       line 418, "pan.___", state 789, "(1)"
-       line 418, "pan.___", state 790, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 790, "else"
-       line 418, "pan.___", state 793, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 403, "pan.___", state 828, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 846, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 872, "(1)"
-       line 418, "pan.___", state 889, "(1)"
-       line 403, "pan.___", state 918, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 936, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 979, "(1)"
-       line 399, "pan.___", state 998, "(1)"
-       line 403, "pan.___", state 1010, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1028, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1054, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 403, "pan.___", state 1103, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1121, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1147, "(1)"
-       line 418, "pan.___", state 1164, "(1)"
-       line 179, "pan.___", state 1187, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1200, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 175, "pan.___", state 1213, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1235, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1252, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1261, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1300, "(1)"
-       line 399, "pan.___", state 1301, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1301, "else"
-       line 399, "pan.___", state 1304, "(1)"
-       line 403, "pan.___", state 1312, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1314, "(1)"
-       line 403, "pan.___", state 1315, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1315, "else"
-       line 403, "pan.___", state 1318, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 401, "pan.___", state 1324, "((i<1))"
-       line 401, "pan.___", state 1324, "((i>=1))"
-       line 408, "pan.___", state 1330, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1343, "(1)"
-       line 409, "pan.___", state 1344, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 1344, "else"
-       line 409, "pan.___", state 1347, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 413, "pan.___", state 1356, "(1)"
-       line 413, "pan.___", state 1357, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 1357, "else"
-       line 413, "pan.___", state 1360, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 411, "pan.___", state 1366, "((i<1))"
-       line 411, "pan.___", state 1366, "((i>=1))"
-       line 418, "pan.___", state 1373, "(1)"
-       line 418, "pan.___", state 1374, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 1374, "else"
-       line 418, "pan.___", state 1377, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 179, "pan.___", state 1406, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1419, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 175, "pan.___", state 1432, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1454, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1471, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1480, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1493, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 702, "pan.___", state 1520, "-end-"
-       (144 of 1520 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 125 seconds
-pan: rate 114108.44 states/second
-pan: avg transition delay 8.8279e-07 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.spin.input b/formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index ccf5f5c..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_RMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu/result-signal-over-reader/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 1e5e132..0000000
+++ /dev/null
@@ -1,1777 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2435
-2:4:2387
-3:4:2390
-4:4:2390
-5:4:2393
-6:4:2401
-7:4:2401
-8:4:2404
-9:4:2410
-10:4:2414
-11:4:2414
-12:4:2417
-13:4:2425
-14:4:2429
-15:4:2430
-16:0:2435
-17:4:2432
-18:0:2435
-19:3:869
-20:0:2435
-21:3:875
-22:0:2435
-23:3:876
-24:0:2435
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:2435
-45:3:964
-46:0:2435
-47:3:966
-48:3:967
-49:0:2435
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:2435
-69:3:1058
-70:0:2435
-71:3:1060
-72:0:2435
-73:3:1061
-74:0:2435
-75:3:1071
-76:0:2435
-77:3:1075
-78:3:1076
-79:3:1080
-80:3:1084
-81:3:1085
-82:3:1089
-83:3:1097
-84:3:1098
-85:0:2435
-86:3:1106
-87:0:2435
-88:3:1110
-89:3:1111
-90:3:1115
-91:3:1119
-92:3:1120
-93:3:1124
-94:3:1132
-95:3:1133
-96:0:2435
-97:3:1141
-98:0:2435
-99:3:1149
-100:3:1150
-101:3:1154
-102:3:1158
-103:3:1159
-104:3:1163
-105:3:1171
-106:3:1172
-107:0:2435
-108:3:1180
-109:0:2435
-110:3:1182
-111:0:2435
-112:3:1183
-113:3:1187
-114:3:1188
-115:3:1196
-116:3:1197
-117:3:1201
-118:3:1202
-119:3:1210
-120:3:1215
-121:3:1219
-122:3:1220
-123:3:1227
-124:3:1228
-125:3:1239
-126:3:1240
-127:3:1241
-128:3:1252
-129:3:1257
-130:3:1258
-131:0:2435
-132:3:1270
-133:0:2435
-134:3:1272
-135:0:2435
-136:3:1275
-137:3:1276
-138:3:1288
-139:3:1289
-140:3:1293
-141:3:1294
-142:3:1302
-143:3:1307
-144:3:1311
-145:3:1312
-146:3:1319
-147:3:1320
-148:3:1331
-149:3:1332
-150:3:1333
-151:3:1344
-152:3:1349
-153:3:1350
-154:0:2435
-155:3:1362
-156:0:2435
-157:3:1364
-158:0:2435
-159:3:1365
-160:0:2435
-161:3:1366
-162:0:2435
-163:3:1367
-164:0:2435
-165:3:1368
-166:3:1372
-167:3:1373
-168:3:1381
-169:3:1382
-170:3:1386
-171:3:1387
-172:3:1395
-173:3:1400
-174:3:1404
-175:3:1405
-176:3:1412
-177:3:1413
-178:3:1424
-179:3:1425
-180:3:1426
-181:3:1437
-182:3:1442
-183:3:1443
-184:0:2435
-185:3:1455
-186:0:2435
-187:3:1568
-188:0:2435
-189:3:1666
-190:0:2435
-191:3:1667
-192:0:2435
-193:3:1671
-194:0:2435
-195:3:1677
-196:3:1681
-197:3:1682
-198:3:1690
-199:3:1691
-200:3:1695
-201:3:1696
-202:3:1704
-203:3:1709
-204:3:1713
-205:3:1714
-206:3:1721
-207:3:1722
-208:3:1733
-209:3:1734
-210:3:1735
-211:3:1746
-212:3:1751
-213:3:1752
-214:0:2435
-215:3:1764
-216:0:2435
-217:3:1766
-218:0:2435
-219:3:1767
-220:3:1771
-221:3:1772
-222:3:1780
-223:3:1781
-224:3:1785
-225:3:1786
-226:3:1794
-227:3:1799
-228:3:1803
-229:3:1804
-230:3:1811
-231:3:1812
-232:3:1823
-233:3:1824
-234:3:1825
-235:3:1836
-236:3:1841
-237:3:1842
-238:0:2435
-239:3:1854
-240:0:2435
-241:3:1856
-242:0:2435
-243:3:1859
-244:3:1860
-245:3:1872
-246:3:1873
-247:3:1877
-248:3:1878
-249:3:1886
-250:3:1891
-251:3:1895
-252:3:1896
-253:3:1903
-254:3:1904
-255:3:1915
-256:3:1916
-257:3:1917
-258:3:1928
-259:3:1933
-260:3:1934
-261:0:2435
-262:3:1946
-263:0:2435
-264:3:1948
-265:0:2435
-266:3:1949
-267:0:2435
-268:3:1950
-269:0:2435
-270:3:1951
-271:0:2435
-272:3:1952
-273:3:1956
-274:3:1957
-275:3:1965
-276:3:1966
-277:3:1970
-278:3:1971
-279:3:1979
-280:3:1984
-281:3:1988
-282:3:1989
-283:3:1996
-284:3:1997
-285:3:2008
-286:3:2009
-287:3:2010
-288:3:2021
-289:3:2026
-290:3:2027
-291:0:2435
-292:3:2039
-293:0:2435
-294:3:2152
-295:0:2435
-296:3:2250
-297:0:2435
-298:3:2251
-299:0:2435
-300:3:2255
-301:0:2435
-302:3:2264
-303:3:2265
-304:3:2269
-305:3:2273
-306:3:2274
-307:3:2278
-308:3:2286
-309:3:2287
-310:0:2435
-311:3:2295
-312:0:2435
-313:3:2299
-314:3:2300
-315:3:2304
-316:3:2308
-317:3:2309
-318:3:2313
-319:3:2321
-320:3:2322
-321:0:2435
-322:3:2330
-323:0:2435
-324:3:2338
-325:3:2339
-326:3:2343
-327:3:2347
-328:3:2348
-329:3:2352
-330:3:2360
-331:3:2361
-332:0:2435
-333:3:2369
-334:0:2435
-335:3:2371
-336:0:2435
-337:3:2372
-338:0:2435
-339:3:876
-340:0:2435
-341:3:877
-342:3:881
-343:3:882
-344:3:890
-345:3:891
-346:3:895
-347:3:896
-348:3:904
-349:3:909
-350:3:913
-351:3:914
-352:3:921
-353:3:922
-354:3:933
-355:3:934
-356:3:935
-357:3:946
-358:3:951
-359:3:952
-360:0:2435
-361:3:964
-362:0:2435
-363:3:966
-364:3:967
-365:0:2435
-366:3:971
-367:3:975
-368:3:976
-369:3:984
-370:3:985
-371:3:989
-372:3:990
-373:3:998
-374:3:1003
-375:3:1004
-376:3:1015
-377:3:1016
-378:3:1027
-379:3:1028
-380:3:1029
-381:3:1040
-382:3:1045
-383:3:1046
-384:0:2435
-385:3:1058
-386:0:2435
-387:3:1060
-388:0:2435
-389:3:1061
-390:0:2435
-391:3:1071
-392:0:2435
-393:3:1075
-394:3:1076
-395:3:1080
-396:3:1084
-397:3:1085
-398:3:1089
-399:3:1097
-400:3:1098
-401:0:2435
-402:3:1106
-403:0:2435
-404:3:1110
-405:3:1111
-406:3:1115
-407:3:1119
-408:3:1120
-409:3:1124
-410:3:1132
-411:3:1133
-412:0:2435
-413:3:1141
-414:0:2435
-415:3:1149
-416:3:1150
-417:3:1154
-418:3:1158
-419:3:1159
-420:3:1163
-421:3:1171
-422:3:1172
-423:0:2435
-424:3:1180
-425:0:2435
-426:3:1182
-427:0:2435
-428:3:1183
-429:3:1187
-430:3:1188
-431:3:1196
-432:3:1197
-433:3:1201
-434:3:1202
-435:3:1210
-436:3:1215
-437:3:1219
-438:3:1220
-439:3:1227
-440:3:1228
-441:3:1239
-442:3:1240
-443:3:1241
-444:3:1252
-445:3:1257
-446:3:1258
-447:0:2435
-448:3:1270
-449:0:2435
-450:3:1272
-451:0:2435
-452:3:1275
-453:3:1276
-454:3:1288
-455:3:1289
-456:3:1293
-457:3:1294
-458:3:1302
-459:3:1307
-460:3:1311
-461:3:1312
-462:3:1319
-463:3:1320
-464:3:1331
-465:3:1332
-466:3:1333
-467:3:1344
-468:3:1349
-469:3:1350
-470:0:2435
-471:3:1362
-472:0:2435
-473:3:1364
-474:0:2435
-475:3:1365
-476:0:2435
-477:3:1366
-478:0:2435
-479:3:1367
-480:0:2435
-481:3:1368
-482:3:1372
-483:3:1373
-484:3:1381
-485:3:1382
-486:3:1386
-487:3:1387
-488:3:1395
-489:3:1400
-490:3:1404
-491:3:1405
-492:3:1412
-493:3:1413
-494:3:1424
-495:3:1425
-496:3:1426
-497:3:1437
-498:3:1442
-499:3:1443
-500:0:2435
-501:3:1455
-502:0:2435
-503:3:1568
-504:0:2435
-505:3:1666
-506:0:2435
-507:3:1667
-508:0:2435
-509:3:1671
-510:0:2435
-511:3:1677
-512:3:1681
-513:3:1682
-514:3:1690
-515:3:1691
-516:3:1695
-517:3:1696
-518:3:1704
-519:3:1709
-520:3:1713
-521:3:1714
-522:3:1721
-523:3:1722
-524:3:1733
-525:3:1734
-526:3:1735
-527:3:1746
-528:3:1751
-529:3:1752
-530:0:2435
-531:3:1764
-532:0:2435
-533:3:1766
-534:0:2435
-535:3:1767
-536:3:1771
-537:3:1772
-538:3:1780
-539:3:1781
-540:3:1785
-541:3:1786
-542:3:1794
-543:3:1799
-544:3:1803
-545:3:1804
-546:3:1811
-547:3:1812
-548:3:1823
-549:3:1824
-550:3:1825
-551:3:1836
-552:3:1841
-553:3:1842
-554:0:2435
-555:3:1854
-556:0:2435
-557:3:1856
-558:0:2435
-559:3:1859
-560:3:1860
-561:3:1872
-562:3:1873
-563:3:1877
-564:3:1878
-565:3:1886
-566:3:1891
-567:3:1895
-568:3:1896
-569:3:1903
-570:3:1904
-571:3:1915
-572:3:1916
-573:3:1917
-574:3:1928
-575:3:1933
-576:3:1934
-577:0:2435
-578:3:1946
-579:0:2435
-580:3:1948
-581:0:2435
-582:3:1949
-583:0:2435
-584:3:1950
-585:0:2435
-586:3:1951
-587:0:2435
-588:3:1952
-589:3:1956
-590:3:1957
-591:3:1965
-592:3:1966
-593:3:1970
-594:3:1971
-595:3:1979
-596:3:1984
-597:3:1988
-598:3:1989
-599:3:1996
-600:3:1997
-601:3:2008
-602:3:2009
-603:3:2010
-604:3:2021
-605:3:2026
-606:3:2027
-607:0:2435
-608:3:2039
-609:0:2435
-610:3:2152
-611:0:2435
-612:3:2250
-613:0:2435
-614:3:2251
-615:0:2435
-616:3:2255
-617:0:2435
-618:3:2264
-619:3:2265
-620:3:2269
-621:3:2273
-622:3:2274
-623:3:2278
-624:3:2286
-625:3:2287
-626:0:2435
-627:3:2295
-628:0:2435
-629:3:2299
-630:3:2300
-631:3:2304
-632:3:2308
-633:3:2309
-634:3:2313
-635:3:2321
-636:3:2322
-637:0:2435
-638:3:2330
-639:0:2435
-640:3:2338
-641:3:2339
-642:3:2343
-643:3:2347
-644:3:2348
-645:3:2352
-646:3:2360
-647:3:2361
-648:0:2435
-649:3:2369
-650:0:2435
-651:3:2371
-652:0:2435
-653:3:2372
-654:0:2435
-655:3:876
-656:0:2435
-657:3:877
-658:3:881
-659:3:882
-660:3:890
-661:3:891
-662:3:895
-663:3:896
-664:3:904
-665:3:909
-666:3:913
-667:3:914
-668:3:921
-669:3:922
-670:3:933
-671:3:934
-672:3:935
-673:3:946
-674:3:951
-675:3:952
-676:0:2435
-677:3:964
-678:0:2435
-679:3:966
-680:3:967
-681:0:2435
-682:3:971
-683:3:975
-684:3:976
-685:3:984
-686:3:985
-687:3:989
-688:3:990
-689:3:998
-690:3:1003
-691:3:1004
-692:3:1015
-693:3:1016
-694:3:1027
-695:3:1028
-696:3:1029
-697:3:1040
-698:3:1045
-699:3:1046
-700:0:2435
-701:3:1058
-702:0:2435
-703:3:1060
-704:0:2435
-705:3:1061
-706:0:2435
-707:3:1071
-708:0:2435
-709:3:1075
-710:3:1076
-711:3:1080
-712:3:1084
-713:3:1085
-714:3:1089
-715:3:1097
-716:3:1098
-717:0:2435
-718:3:1106
-719:0:2435
-720:3:1110
-721:3:1111
-722:3:1115
-723:3:1119
-724:3:1120
-725:3:1124
-726:3:1132
-727:3:1133
-728:0:2435
-729:3:1141
-730:0:2435
-731:3:1149
-732:3:1150
-733:3:1154
-734:3:1158
-735:3:1159
-736:3:1163
-737:3:1171
-738:3:1172
-739:0:2435
-740:3:1180
-741:0:2435
-742:3:1182
-743:0:2435
-744:3:1183
-745:3:1187
-746:3:1188
-747:3:1196
-748:3:1197
-749:3:1201
-750:3:1202
-751:3:1210
-752:3:1215
-753:3:1219
-754:3:1220
-755:3:1227
-756:3:1228
-757:3:1239
-758:3:1240
-759:3:1241
-760:3:1252
-761:3:1257
-762:3:1258
-763:0:2435
-764:3:1270
-765:0:2435
-766:3:1272
-767:0:2435
-768:3:1275
-769:3:1276
-770:3:1288
-771:3:1289
-772:3:1293
-773:3:1294
-774:3:1302
-775:3:1307
-776:3:1311
-777:3:1312
-778:3:1319
-779:3:1320
-780:3:1331
-781:3:1332
-782:3:1333
-783:3:1344
-784:3:1349
-785:3:1350
-786:0:2435
-787:3:1362
-788:0:2435
-789:3:1364
-790:0:2435
-791:3:1365
-792:0:2435
-793:3:1366
-794:0:2435
-795:3:1367
-796:0:2435
-797:3:1368
-798:3:1372
-799:3:1373
-800:3:1381
-801:3:1382
-802:3:1386
-803:3:1387
-804:3:1395
-805:3:1400
-806:3:1404
-807:3:1405
-808:3:1412
-809:3:1413
-810:3:1424
-811:3:1425
-812:3:1426
-813:3:1437
-814:3:1442
-815:3:1443
-816:0:2435
-817:3:1455
-818:0:2435
-819:3:1568
-820:0:2435
-821:3:1666
-822:0:2435
-823:3:1667
-824:0:2435
-825:3:1671
-826:0:2435
-827:3:1677
-828:3:1681
-829:3:1682
-830:3:1690
-831:3:1691
-832:3:1695
-833:3:1696
-834:3:1704
-835:3:1709
-836:3:1713
-837:3:1714
-838:3:1721
-839:3:1722
-840:3:1733
-841:3:1734
-842:3:1735
-843:3:1746
-844:3:1751
-845:3:1752
-846:0:2435
-847:3:1764
-848:0:2435
-849:3:1766
-850:0:2435
-851:3:1767
-852:3:1771
-853:3:1772
-854:3:1780
-855:3:1781
-856:3:1785
-857:3:1786
-858:3:1794
-859:3:1799
-860:3:1803
-861:3:1804
-862:3:1811
-863:3:1812
-864:3:1823
-865:3:1824
-866:3:1825
-867:3:1836
-868:3:1841
-869:3:1842
-870:0:2435
-871:3:1854
-872:0:2435
-873:3:1856
-874:0:2435
-875:3:1859
-876:3:1860
-877:3:1872
-878:3:1873
-879:3:1877
-880:3:1878
-881:3:1886
-882:3:1891
-883:3:1895
-884:3:1896
-885:3:1903
-886:3:1904
-887:3:1915
-888:3:1916
-889:3:1917
-890:3:1928
-891:3:1933
-892:3:1934
-893:0:2435
-894:3:1946
-895:0:2435
-896:3:1948
-897:0:2435
-898:3:1949
-899:0:2435
-900:3:1950
-901:0:2435
-902:3:1951
-903:0:2435
-904:3:1952
-905:3:1956
-906:3:1957
-907:3:1965
-908:3:1966
-909:3:1970
-910:3:1971
-911:3:1979
-912:3:1984
-913:3:1988
-914:3:1989
-915:3:1996
-916:3:1997
-917:3:2008
-918:3:2009
-919:3:2010
-920:3:2021
-921:3:2026
-922:3:2027
-923:0:2435
-924:3:2039
-925:0:2435
-926:3:2152
-927:0:2435
-928:3:2250
-929:0:2435
-930:3:2251
-931:0:2435
-932:3:2255
-933:0:2435
-934:3:2264
-935:3:2265
-936:3:2269
-937:3:2273
-938:3:2274
-939:3:2278
-940:3:2286
-941:3:2287
-942:0:2435
-943:3:2295
-944:0:2435
-945:3:2299
-946:3:2300
-947:3:2304
-948:3:2308
-949:3:2309
-950:3:2313
-951:3:2321
-952:3:2322
-953:0:2435
-954:3:2330
-955:0:2435
-956:3:2338
-957:3:2339
-958:3:2343
-959:3:2347
-960:3:2348
-961:3:2352
-962:3:2360
-963:3:2361
-964:0:2435
-965:3:2369
-966:0:2435
-967:3:2371
-968:0:2435
-969:3:2372
-970:0:2435
-971:3:876
-972:0:2435
-973:3:877
-974:3:881
-975:3:882
-976:3:890
-977:3:891
-978:3:895
-979:3:896
-980:3:904
-981:3:909
-982:3:913
-983:3:914
-984:3:921
-985:3:922
-986:3:933
-987:3:934
-988:3:935
-989:3:946
-990:3:951
-991:3:952
-992:0:2435
-993:3:964
-994:0:2435
-995:3:966
-996:3:967
-997:0:2435
-998:3:971
-999:3:975
-1000:3:976
-1001:3:984
-1002:3:985
-1003:3:989
-1004:3:990
-1005:3:998
-1006:3:1003
-1007:3:1004
-1008:3:1015
-1009:3:1016
-1010:3:1027
-1011:3:1028
-1012:3:1029
-1013:3:1040
-1014:3:1045
-1015:3:1046
-1016:0:2435
-1017:3:1058
-1018:0:2435
-1019:3:1060
-1020:0:2435
-1021:3:1061
-1022:0:2435
-1023:3:1071
-1024:0:2435
-1025:3:1075
-1026:3:1076
-1027:3:1080
-1028:3:1084
-1029:3:1085
-1030:3:1089
-1031:3:1097
-1032:3:1098
-1033:0:2435
-1034:3:1106
-1035:0:2435
-1036:3:1110
-1037:3:1111
-1038:3:1115
-1039:3:1119
-1040:3:1120
-1041:3:1124
-1042:3:1132
-1043:3:1133
-1044:0:2435
-1045:3:1141
-1046:0:2435
-1047:3:1149
-1048:3:1150
-1049:3:1154
-1050:3:1158
-1051:3:1159
-1052:3:1163
-1053:3:1171
-1054:3:1172
-1055:0:2435
-1056:3:1180
-1057:0:2435
-1058:3:1182
-1059:0:2435
-1060:3:1183
-1061:3:1187
-1062:3:1188
-1063:3:1196
-1064:3:1197
-1065:3:1201
-1066:3:1202
-1067:3:1210
-1068:3:1215
-1069:3:1219
-1070:3:1220
-1071:3:1227
-1072:3:1228
-1073:3:1239
-1074:3:1240
-1075:3:1241
-1076:3:1252
-1077:3:1257
-1078:3:1258
-1079:0:2435
-1080:3:1270
-1081:0:2435
-1082:3:1272
-1083:0:2435
-1084:3:1275
-1085:3:1276
-1086:3:1288
-1087:3:1289
-1088:3:1293
-1089:3:1294
-1090:3:1302
-1091:3:1307
-1092:3:1311
-1093:3:1312
-1094:3:1319
-1095:3:1320
-1096:3:1331
-1097:3:1332
-1098:3:1333
-1099:3:1344
-1100:3:1349
-1101:3:1350
-1102:0:2435
-1103:3:1362
-1104:0:2435
-1105:3:1364
-1106:0:2435
-1107:3:1365
-1108:0:2435
-1109:3:1366
-1110:0:2435
-1111:3:1367
-1112:0:2435
-1113:3:1368
-1114:3:1372
-1115:3:1373
-1116:3:1381
-1117:3:1382
-1118:3:1386
-1119:3:1387
-1120:3:1395
-1121:3:1400
-1122:3:1404
-1123:3:1405
-1124:3:1412
-1125:3:1413
-1126:3:1424
-1127:3:1425
-1128:3:1426
-1129:3:1437
-1130:3:1442
-1131:3:1443
-1132:0:2435
-1133:3:1455
-1134:0:2435
-1135:3:1568
-1136:0:2435
-1137:3:1666
-1138:0:2435
-1139:3:1667
-1140:0:2435
-1141:3:1671
-1142:0:2435
-1143:3:1677
-1144:3:1681
-1145:3:1682
-1146:3:1690
-1147:3:1691
-1148:3:1695
-1149:3:1696
-1150:3:1704
-1151:3:1709
-1152:3:1713
-1153:3:1714
-1154:3:1721
-1155:3:1722
-1156:3:1733
-1157:3:1734
-1158:3:1735
-1159:3:1746
-1160:3:1751
-1161:3:1752
-1162:0:2435
-1163:3:1764
-1164:0:2435
-1165:3:1766
-1166:0:2435
-1167:3:1767
-1168:3:1771
-1169:3:1772
-1170:3:1780
-1171:3:1781
-1172:3:1785
-1173:3:1786
-1174:3:1794
-1175:3:1799
-1176:3:1803
-1177:3:1804
-1178:3:1811
-1179:3:1812
-1180:3:1823
-1181:3:1824
-1182:3:1825
-1183:3:1836
-1184:3:1841
-1185:3:1842
-1186:0:2435
-1187:3:1854
-1188:0:2435
-1189:3:1856
-1190:0:2435
-1191:3:1859
-1192:3:1860
-1193:3:1872
-1194:3:1873
-1195:3:1877
-1196:3:1878
-1197:3:1886
-1198:3:1891
-1199:3:1895
-1200:3:1896
-1201:3:1903
-1202:3:1904
-1203:3:1915
-1204:3:1916
-1205:3:1917
-1206:3:1928
-1207:3:1933
-1208:3:1934
-1209:0:2435
-1210:3:1946
-1211:0:2435
-1212:3:1948
-1213:0:2435
-1214:3:1949
-1215:0:2435
-1216:3:1950
-1217:0:2435
-1218:3:1951
-1219:0:2435
-1220:3:1952
-1221:3:1956
-1222:3:1957
-1223:3:1965
-1224:3:1966
-1225:3:1970
-1226:3:1971
-1227:3:1979
-1228:3:1984
-1229:3:1988
-1230:3:1989
-1231:3:1996
-1232:3:1997
-1233:3:2008
-1234:3:2009
-1235:3:2010
-1236:3:2021
-1237:3:2026
-1238:3:2027
-1239:0:2435
-1240:3:2039
-1241:0:2435
-1242:3:2152
-1243:0:2435
-1244:3:2250
-1245:0:2435
-1246:3:2251
-1247:0:2435
-1248:3:2255
-1249:0:2435
-1250:3:2264
-1251:3:2265
-1252:3:2269
-1253:3:2273
-1254:3:2274
-1255:3:2278
-1256:3:2286
-1257:3:2287
-1258:0:2435
-1259:3:2295
-1260:0:2435
-1261:3:2299
-1262:3:2300
-1263:3:2304
-1264:3:2308
-1265:3:2309
-1266:3:2313
-1267:3:2321
-1268:3:2322
-1269:0:2435
-1270:3:2330
-1271:0:2435
-1272:3:2338
-1273:3:2339
-1274:3:2343
-1275:3:2347
-1276:3:2348
-1277:3:2352
-1278:3:2360
-1279:3:2361
-1280:0:2435
-1281:3:2369
-1282:0:2435
-1283:3:2371
-1284:0:2435
-1285:3:2372
-1286:0:2435
-1287:3:876
-1288:0:2435
-1289:3:877
-1290:3:881
-1291:3:882
-1292:3:890
-1293:3:891
-1294:3:895
-1295:3:896
-1296:3:904
-1297:3:909
-1298:3:913
-1299:3:914
-1300:3:921
-1301:3:922
-1302:3:933
-1303:3:934
-1304:3:935
-1305:3:946
-1306:3:951
-1307:3:952
-1308:0:2435
-1309:3:964
-1310:0:2435
-1311:3:966
-1312:3:967
-1313:0:2435
-1314:3:971
-1315:3:975
-1316:3:976
-1317:3:984
-1318:3:985
-1319:3:989
-1320:3:990
-1321:3:998
-1322:3:1011
-1323:3:1012
-1324:3:1015
-1325:3:1016
-1326:3:1027
-1327:3:1028
-1328:3:1029
-1329:3:1040
-1330:3:1045
-1331:3:1048
-1332:3:1049
-1333:0:2435
-1334:3:1058
-1335:0:2435
-1336:3:1060
-1337:0:2435
-1338:3:1061
-1339:0:2435
-1340:3:1071
-1341:0:2435
-1342:2:458
-1343:0:2435
-1344:2:464
-1345:0:2435
-1346:2:465
-1347:0:2435
-1348:2:466
-1349:0:2435
-1350:2:467
-1351:0:2435
-1352:1:2
-1353:0:2435
-1354:2:468
-1355:0:2435
-1356:1:8
-1357:0:2435
-1358:1:9
-1359:0:2435
-1360:1:10
-1361:0:2435
-1362:1:11
-1363:0:2435
-1364:2:467
-1365:0:2435
-1366:1:12
-1367:1:16
-1368:1:17
-1369:1:25
-1370:1:26
-1371:1:30
-1372:1:31
-1373:1:39
-1374:1:44
-1375:1:48
-1376:1:49
-1377:1:56
-1378:1:57
-1379:1:68
-1380:1:69
-1381:1:70
-1382:1:81
-1383:1:86
-1384:1:87
-1385:0:2435
-1386:2:468
-1387:0:2435
-1388:3:1075
-1389:3:1076
-1390:3:1080
-1391:3:1084
-1392:3:1085
-1393:3:1089
-1394:3:1094
-1395:0:2435
-1396:3:1106
-1397:0:2435
-1398:3:1110
-1399:3:1111
-1400:3:1115
-1401:3:1119
-1402:3:1120
-1403:3:1124
-1404:3:1132
-1405:3:1133
-1406:0:2435
-1407:3:1141
-1408:0:2435
-1409:3:1149
-1410:3:1150
-1411:3:1154
-1412:3:1158
-1413:3:1159
-1414:3:1163
-1415:3:1171
-1416:3:1172
-1417:0:2435
-1418:3:1180
-1419:0:2435
-1420:3:1182
-1421:0:2435
-1422:3:1183
-1423:3:1187
-1424:3:1188
-1425:3:1196
-1426:3:1197
-1427:3:1201
-1428:3:1202
-1429:3:1210
-1430:3:1215
-1431:3:1219
-1432:3:1220
-1433:3:1227
-1434:3:1228
-1435:3:1239
-1436:3:1240
-1437:3:1241
-1438:3:1252
-1439:3:1257
-1440:3:1258
-1441:0:2435
-1442:3:1270
-1443:0:2435
-1444:3:1272
-1445:0:2435
-1446:3:1275
-1447:3:1276
-1448:3:1288
-1449:3:1289
-1450:3:1293
-1451:3:1294
-1452:3:1302
-1453:3:1307
-1454:3:1311
-1455:3:1312
-1456:3:1319
-1457:3:1320
-1458:3:1331
-1459:3:1332
-1460:3:1333
-1461:3:1344
-1462:3:1349
-1463:3:1350
-1464:0:2435
-1465:3:1362
-1466:0:2435
-1467:3:1364
-1468:0:2435
-1469:3:1365
-1470:0:2435
-1471:3:1366
-1472:0:2435
-1473:3:1367
-1474:0:2435
-1475:3:1368
-1476:3:1372
-1477:3:1373
-1478:3:1381
-1479:3:1382
-1480:3:1386
-1481:3:1387
-1482:3:1395
-1483:3:1400
-1484:3:1404
-1485:3:1405
-1486:3:1412
-1487:3:1413
-1488:3:1424
-1489:3:1425
-1490:3:1426
-1491:3:1437
-1492:3:1442
-1493:3:1443
-1494:0:2435
-1495:3:1455
-1496:0:2435
-1497:3:1568
-1498:0:2435
-1499:3:1666
-1500:0:2435
-1501:3:1667
-1502:0:2435
-1503:3:1671
-1504:0:2435
-1505:3:1677
-1506:3:1681
-1507:3:1682
-1508:3:1690
-1509:3:1691
-1510:3:1695
-1511:3:1696
-1512:3:1704
-1513:3:1709
-1514:3:1713
-1515:3:1714
-1516:3:1721
-1517:3:1722
-1518:3:1733
-1519:3:1734
-1520:3:1735
-1521:3:1746
-1522:3:1751
-1523:3:1752
-1524:0:2435
-1525:3:1764
-1526:0:2435
-1527:3:1766
-1528:0:2435
-1529:3:1767
-1530:3:1771
-1531:3:1772
-1532:3:1780
-1533:3:1781
-1534:3:1785
-1535:3:1786
-1536:3:1794
-1537:3:1799
-1538:3:1803
-1539:3:1804
-1540:3:1811
-1541:3:1812
-1542:3:1823
-1543:3:1824
-1544:3:1825
-1545:3:1836
-1546:3:1841
-1547:3:1842
-1548:0:2435
-1549:3:1854
-1550:0:2435
-1551:3:1856
-1552:0:2435
-1553:3:1859
-1554:3:1860
-1555:3:1872
-1556:3:1873
-1557:3:1877
-1558:3:1878
-1559:3:1886
-1560:3:1891
-1561:3:1895
-1562:3:1896
-1563:3:1903
-1564:3:1904
-1565:3:1915
-1566:3:1916
-1567:3:1917
-1568:3:1928
-1569:3:1933
-1570:3:1934
-1571:0:2435
-1572:3:1946
-1573:0:2435
-1574:3:1948
-1575:0:2435
-1576:3:1949
-1577:0:2435
-1578:3:1950
-1579:0:2435
-1580:3:1951
-1581:0:2435
-1582:3:1952
-1583:3:1956
-1584:3:1957
-1585:3:1965
-1586:3:1966
-1587:3:1970
-1588:3:1971
-1589:3:1979
-1590:3:1984
-1591:3:1988
-1592:3:1989
-1593:3:1996
-1594:3:1997
-1595:3:2008
-1596:3:2009
-1597:3:2010
-1598:3:2021
-1599:3:2026
-1600:3:2027
-1601:0:2435
-1602:3:2039
-1603:0:2435
-1604:3:2152
-1605:0:2435
-1606:3:2250
-1607:0:2435
-1608:3:2251
-1609:0:2435
-1610:3:2255
-1611:0:2435
-1612:3:2264
-1613:3:2265
-1614:3:2269
-1615:3:2273
-1616:3:2274
-1617:3:2278
-1618:3:2286
-1619:3:2287
-1620:0:2435
-1621:3:2295
-1622:0:2435
-1623:3:2299
-1624:3:2300
-1625:3:2304
-1626:3:2308
-1627:3:2309
-1628:3:2313
-1629:3:2321
-1630:3:2322
-1631:0:2435
-1632:3:2330
-1633:0:2435
-1634:3:2338
-1635:3:2339
-1636:3:2343
-1637:3:2347
-1638:3:2348
-1639:3:2352
-1640:3:2360
-1641:3:2361
-1642:0:2435
-1643:3:2369
-1644:0:2435
-1645:3:2371
-1646:0:2435
-1647:3:2372
-1648:0:2435
-1649:3:2375
-1650:0:2435
-1651:3:2380
-1652:0:2435
-1653:2:467
-1654:0:2435
-1655:3:2381
-1656:0:2435
-1657:1:99
-1658:0:2435
-1659:3:2380
-1660:0:2435
-1661:2:468
-1662:0:2435
-1663:3:2381
-1664:0:2435
-1665:2:469
-1666:0:2435
-1667:3:2380
-1668:0:2435
-1669:2:475
-1670:0:2435
-1671:3:2381
-1672:0:2435
-1673:2:476
-1674:0:2435
-1675:3:2380
-1676:0:2435
-1677:2:477
-1678:2:481
-1679:2:482
-1680:2:490
-1681:2:491
-1682:2:495
-1683:2:496
-1684:2:504
-1685:2:509
-1686:2:513
-1687:2:514
-1688:2:521
-1689:2:522
-1690:2:533
-1691:2:534
-1692:2:535
-1693:2:546
-1694:2:558
-1695:2:559
-1696:0:2435
-1697:3:2381
-1698:0:2435
-1699:2:564
-1700:0:2435
-1701:3:2380
-1702:0:2435
-1703:2:565
-1704:2:569
-1705:2:570
-1706:2:578
-1707:2:579
-1708:2:583
-1709:2:584
-1710:2:592
-1711:2:597
-1712:2:601
-1713:2:602
-1714:2:609
-1715:2:610
-1716:2:621
-1717:2:622
-1718:2:623
-1719:2:634
-1720:2:646
-1721:2:647
-1722:0:2435
-1723:3:2381
-1724:0:2435
-1725:2:652
-1726:0:2435
-1727:3:2380
-1728:0:2435
-1729:2:653
-1730:0:2435
-1731:3:2381
-1732:0:2435
-1733:2:654
-1734:2:658
-1735:2:659
-1736:2:667
-1737:2:668
-1738:2:672
-1739:2:673
-1740:2:681
-1741:2:686
-1742:2:690
-1743:2:691
-1744:2:698
-1745:2:699
-1746:2:710
-1747:2:711
-1748:2:712
-1749:2:723
-1750:2:735
-1751:2:736
-1752:0:2435
-1753:3:2380
-1754:0:2435
-1755:2:741
-1756:0:2435
-1757:3:2381
-1758:0:2435
-1759:2:750
-1760:0:2435
-1761:3:2380
-1762:0:2435
-1763:2:753
-1764:0:2435
-1765:3:2381
-1766:0:2435
-1767:2:758
-1768:0:2435
-1769:3:2380
-1770:0:2435
-1771:2:759
-1772:0:2433
-1773:3:2381
-1774:0:2439
-1775:0:2435
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.define b/formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.log b/formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 0423ec5..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-Depth=   10656 States=    1e+06 Transitions= 8.86e+06 Memory=   534.807        t=   7.38 R=   1e+05
-Depth=   35214 States=    2e+06 Transitions= 1.82e+07 Memory=   603.557        t=   15.5 R=   1e+05
-Depth=   35214 States=    3e+06 Transitions= 2.73e+07 Memory=   672.209        t=   23.8 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=   35214 States=    4e+06 Transitions= 4.08e+07 Memory=   771.885        t=   35.9 R=   1e+05
-pan: claim violated! (at depth 1650)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 35214, errors: 1
-  4154272 states, stored
- 38595853 states, matched
- 42750125 transitions (= stored+matched)
-1.4058824e+08 atomic steps
-hash conflicts:  21492325 (resolved)
-
-Stats on memory usage (in Megabytes):
-  364.488      equivalent memory usage for states (stored*(State-vector + overhead))
-  292.863      actual memory usage for states (compression: 80.35%)
-               state-vector as stored = 46 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  782.529      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 227, "(1)"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 366, "(1)"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (19 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 330, "(1)"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (18 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 401, "pan.___", state 134, "((i<1))"
-       line 401, "pan.___", state 134, "((i>=1))"
-       line 409, "pan.___", state 153, "(1)"
-       line 409, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 154, "else"
-       line 409, "pan.___", state 157, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 413, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 167, "else"
-       line 413, "pan.___", state 170, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 411, "pan.___", state 176, "((i<1))"
-       line 411, "pan.___", state 176, "((i>=1))"
-       line 418, "pan.___", state 183, "(1)"
-       line 418, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 184, "else"
-       line 418, "pan.___", state 187, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 369, "pan.___", state 193, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 646, "pan.___", state 202, "((write_lock==0))"
-       line 646, "pan.___", state 202, "else"
-       line 644, "pan.___", state 203, "(1)"
-       line 160, "pan.___", state 209, "(1)"
-       line 164, "pan.___", state 217, "(1)"
-       line 164, "pan.___", state 218, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 164, "pan.___", state 218, "else"
-       line 162, "pan.___", state 223, "((j<1))"
-       line 162, "pan.___", state 223, "((j>=1))"
-       line 168, "pan.___", state 229, "(1)"
-       line 168, "pan.___", state 230, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 168, "pan.___", state 230, "else"
-       line 160, "pan.___", state 241, "(1)"
-       line 168, "pan.___", state 261, "(1)"
-       line 160, "pan.___", state 277, "(1)"
-       line 164, "pan.___", state 285, "(1)"
-       line 168, "pan.___", state 297, "(1)"
-       line 399, "pan.___", state 311, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 325, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 343, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 356, "(1)"
-       line 413, "pan.___", state 369, "(1)"
-       line 418, "pan.___", state 386, "(1)"
-       line 399, "pan.___", state 405, "(1)"
-       line 403, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 461, "(1)"
-       line 418, "pan.___", state 478, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 164, "pan.___", state 594, "(1)"
-       line 168, "pan.___", state 606, "(1)"
-       line 160, "pan.___", state 618, "(1)"
-       line 168, "pan.___", state 638, "(1)"
-       line 164, "pan.___", state 662, "(1)"
-       line 168, "pan.___", state 674, "(1)"
-       line 399, "pan.___", state 696, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 698, "(1)"
-       line 399, "pan.___", state 699, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 699, "else"
-       line 399, "pan.___", state 702, "(1)"
-       line 403, "pan.___", state 710, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 712, "(1)"
-       line 403, "pan.___", state 713, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 713, "else"
-       line 403, "pan.___", state 716, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 401, "pan.___", state 722, "((i<1))"
-       line 401, "pan.___", state 722, "((i>=1))"
-       line 408, "pan.___", state 728, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 741, "(1)"
-       line 409, "pan.___", state 742, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 742, "else"
-       line 409, "pan.___", state 745, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 413, "pan.___", state 754, "(1)"
-       line 413, "pan.___", state 755, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 755, "else"
-       line 413, "pan.___", state 758, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 411, "pan.___", state 764, "((i<1))"
-       line 411, "pan.___", state 764, "((i>=1))"
-       line 418, "pan.___", state 771, "(1)"
-       line 418, "pan.___", state 772, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 772, "else"
-       line 418, "pan.___", state 775, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 403, "pan.___", state 810, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 828, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 854, "(1)"
-       line 418, "pan.___", state 871, "(1)"
-       line 403, "pan.___", state 900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 918, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 944, "(1)"
-       line 418, "pan.___", state 961, "(1)"
-       line 399, "pan.___", state 980, "(1)"
-       line 403, "pan.___", state 992, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1010, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1036, "(1)"
-       line 418, "pan.___", state 1053, "(1)"
-       line 403, "pan.___", state 1085, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1103, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1129, "(1)"
-       line 418, "pan.___", state 1146, "(1)"
-       line 164, "pan.___", state 1169, "(1)"
-       line 168, "pan.___", state 1181, "(1)"
-       line 160, "pan.___", state 1193, "(1)"
-       line 168, "pan.___", state 1213, "(1)"
-       line 164, "pan.___", state 1237, "(1)"
-       line 168, "pan.___", state 1249, "(1)"
-       line 399, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1273, "(1)"
-       line 399, "pan.___", state 1274, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1274, "else"
-       line 399, "pan.___", state 1277, "(1)"
-       line 403, "pan.___", state 1285, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1287, "(1)"
-       line 403, "pan.___", state 1288, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1288, "else"
-       line 403, "pan.___", state 1291, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 401, "pan.___", state 1297, "((i<1))"
-       line 401, "pan.___", state 1297, "((i>=1))"
-       line 408, "pan.___", state 1303, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1316, "(1)"
-       line 409, "pan.___", state 1317, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 1317, "else"
-       line 409, "pan.___", state 1320, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 413, "pan.___", state 1329, "(1)"
-       line 413, "pan.___", state 1330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 1330, "else"
-       line 413, "pan.___", state 1333, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 411, "pan.___", state 1339, "((i<1))"
-       line 411, "pan.___", state 1339, "((i>=1))"
-       line 418, "pan.___", state 1346, "(1)"
-       line 418, "pan.___", state 1347, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 1347, "else"
-       line 418, "pan.___", state 1350, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 164, "pan.___", state 1379, "(1)"
-       line 168, "pan.___", state 1391, "(1)"
-       line 160, "pan.___", state 1403, "(1)"
-       line 168, "pan.___", state 1423, "(1)"
-       line 164, "pan.___", state 1447, "(1)"
-       line 168, "pan.___", state 1459, "(1)"
-       line 702, "pan.___", state 1484, "-end-"
-       (160 of 1484 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 37.6 seconds
-pan: rate 110515.35 states/second
-pan: avg transition delay 8.793e-07 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.spin.input b/formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index d5d174d..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu/result-signal-over-reader/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index f2ce974..0000000
+++ /dev/null
@@ -1,1653 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2399
-2:4:2351
-3:4:2354
-4:4:2354
-5:4:2357
-6:4:2365
-7:4:2365
-8:4:2368
-9:4:2374
-10:4:2378
-11:4:2378
-12:4:2381
-13:4:2389
-14:4:2393
-15:4:2394
-16:0:2399
-17:4:2396
-18:0:2399
-19:3:869
-20:0:2399
-21:3:875
-22:0:2399
-23:3:876
-24:0:2399
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:2399
-45:3:964
-46:0:2399
-47:3:966
-48:3:967
-49:0:2399
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:2399
-69:3:1058
-70:0:2399
-71:3:1060
-72:0:2399
-73:3:1061
-74:0:2399
-75:3:1071
-76:0:2399
-77:3:1072
-78:3:1079
-79:3:1080
-80:3:1087
-81:3:1092
-82:0:2399
-83:3:1103
-84:0:2399
-85:3:1104
-86:3:1111
-87:3:1112
-88:3:1119
-89:3:1124
-90:0:2399
-91:3:1135
-92:0:2399
-93:3:1140
-94:3:1147
-95:3:1148
-96:3:1155
-97:3:1160
-98:0:2399
-99:3:1171
-100:0:2399
-101:3:1173
-102:0:2399
-103:3:1174
-104:3:1178
-105:3:1179
-106:3:1187
-107:3:1188
-108:3:1192
-109:3:1193
-110:3:1201
-111:3:1206
-112:3:1210
-113:3:1211
-114:3:1218
-115:3:1219
-116:3:1230
-117:3:1231
-118:3:1232
-119:3:1243
-120:3:1248
-121:3:1249
-122:0:2399
-123:3:1261
-124:0:2399
-125:3:1263
-126:0:2399
-127:3:1266
-128:3:1267
-129:3:1279
-130:3:1280
-131:3:1284
-132:3:1285
-133:3:1293
-134:3:1298
-135:3:1302
-136:3:1303
-137:3:1310
-138:3:1311
-139:3:1322
-140:3:1323
-141:3:1324
-142:3:1335
-143:3:1340
-144:3:1341
-145:0:2399
-146:3:1353
-147:0:2399
-148:3:1355
-149:0:2399
-150:3:1356
-151:0:2399
-152:3:1357
-153:0:2399
-154:3:1358
-155:0:2399
-156:3:1359
-157:3:1363
-158:3:1364
-159:3:1372
-160:3:1373
-161:3:1377
-162:3:1378
-163:3:1386
-164:3:1391
-165:3:1395
-166:3:1396
-167:3:1403
-168:3:1404
-169:3:1415
-170:3:1416
-171:3:1417
-172:3:1428
-173:3:1433
-174:3:1434
-175:0:2399
-176:3:1446
-177:0:2399
-178:3:1550
-179:0:2399
-180:3:1648
-181:0:2399
-182:3:1649
-183:0:2399
-184:3:1653
-185:0:2399
-186:3:1659
-187:3:1663
-188:3:1664
-189:3:1672
-190:3:1673
-191:3:1677
-192:3:1678
-193:3:1686
-194:3:1691
-195:3:1695
-196:3:1696
-197:3:1703
-198:3:1704
-199:3:1715
-200:3:1716
-201:3:1717
-202:3:1728
-203:3:1733
-204:3:1734
-205:0:2399
-206:3:1746
-207:0:2399
-208:3:1748
-209:0:2399
-210:3:1749
-211:3:1753
-212:3:1754
-213:3:1762
-214:3:1763
-215:3:1767
-216:3:1768
-217:3:1776
-218:3:1781
-219:3:1785
-220:3:1786
-221:3:1793
-222:3:1794
-223:3:1805
-224:3:1806
-225:3:1807
-226:3:1818
-227:3:1823
-228:3:1824
-229:0:2399
-230:3:1836
-231:0:2399
-232:3:1838
-233:0:2399
-234:3:1841
-235:3:1842
-236:3:1854
-237:3:1855
-238:3:1859
-239:3:1860
-240:3:1868
-241:3:1873
-242:3:1877
-243:3:1878
-244:3:1885
-245:3:1886
-246:3:1897
-247:3:1898
-248:3:1899
-249:3:1910
-250:3:1915
-251:3:1916
-252:0:2399
-253:3:1928
-254:0:2399
-255:3:1930
-256:0:2399
-257:3:1931
-258:0:2399
-259:3:1932
-260:0:2399
-261:3:1933
-262:0:2399
-263:3:1934
-264:3:1938
-265:3:1939
-266:3:1947
-267:3:1948
-268:3:1952
-269:3:1953
-270:3:1961
-271:3:1966
-272:3:1970
-273:3:1971
-274:3:1978
-275:3:1979
-276:3:1990
-277:3:1991
-278:3:1992
-279:3:2003
-280:3:2008
-281:3:2009
-282:0:2399
-283:3:2021
-284:0:2399
-285:3:2125
-286:0:2399
-287:3:2223
-288:0:2399
-289:3:2224
-290:0:2399
-291:3:2228
-292:0:2399
-293:3:2234
-294:3:2241
-295:3:2242
-296:3:2249
-297:3:2254
-298:0:2399
-299:3:2265
-300:0:2399
-301:3:2266
-302:3:2273
-303:3:2274
-304:3:2281
-305:3:2286
-306:0:2399
-307:3:2297
-308:0:2399
-309:3:2302
-310:3:2309
-311:3:2310
-312:3:2317
-313:3:2322
-314:0:2399
-315:3:2333
-316:0:2399
-317:3:2335
-318:0:2399
-319:3:2336
-320:0:2399
-321:3:876
-322:0:2399
-323:3:877
-324:3:881
-325:3:882
-326:3:890
-327:3:891
-328:3:895
-329:3:896
-330:3:904
-331:3:909
-332:3:913
-333:3:914
-334:3:921
-335:3:922
-336:3:933
-337:3:934
-338:3:935
-339:3:946
-340:3:951
-341:3:952
-342:0:2399
-343:3:964
-344:0:2399
-345:3:966
-346:3:967
-347:0:2399
-348:3:971
-349:3:975
-350:3:976
-351:3:984
-352:3:985
-353:3:989
-354:3:990
-355:3:998
-356:3:1003
-357:3:1004
-358:3:1015
-359:3:1016
-360:3:1027
-361:3:1028
-362:3:1029
-363:3:1040
-364:3:1045
-365:3:1046
-366:0:2399
-367:3:1058
-368:0:2399
-369:3:1060
-370:0:2399
-371:3:1061
-372:0:2399
-373:3:1071
-374:0:2399
-375:3:1072
-376:3:1079
-377:3:1080
-378:3:1087
-379:3:1092
-380:0:2399
-381:3:1103
-382:0:2399
-383:3:1104
-384:3:1111
-385:3:1112
-386:3:1119
-387:3:1124
-388:0:2399
-389:3:1135
-390:0:2399
-391:3:1140
-392:3:1147
-393:3:1148
-394:3:1155
-395:3:1160
-396:0:2399
-397:3:1171
-398:0:2399
-399:3:1173
-400:0:2399
-401:3:1174
-402:3:1178
-403:3:1179
-404:3:1187
-405:3:1188
-406:3:1192
-407:3:1193
-408:3:1201
-409:3:1206
-410:3:1210
-411:3:1211
-412:3:1218
-413:3:1219
-414:3:1230
-415:3:1231
-416:3:1232
-417:3:1243
-418:3:1248
-419:3:1249
-420:0:2399
-421:3:1261
-422:0:2399
-423:3:1263
-424:0:2399
-425:3:1266
-426:3:1267
-427:3:1279
-428:3:1280
-429:3:1284
-430:3:1285
-431:3:1293
-432:3:1298
-433:3:1302
-434:3:1303
-435:3:1310
-436:3:1311
-437:3:1322
-438:3:1323
-439:3:1324
-440:3:1335
-441:3:1340
-442:3:1341
-443:0:2399
-444:3:1353
-445:0:2399
-446:3:1355
-447:0:2399
-448:3:1356
-449:0:2399
-450:3:1357
-451:0:2399
-452:3:1358
-453:0:2399
-454:3:1359
-455:3:1363
-456:3:1364
-457:3:1372
-458:3:1373
-459:3:1377
-460:3:1378
-461:3:1386
-462:3:1391
-463:3:1395
-464:3:1396
-465:3:1403
-466:3:1404
-467:3:1415
-468:3:1416
-469:3:1417
-470:3:1428
-471:3:1433
-472:3:1434
-473:0:2399
-474:3:1446
-475:0:2399
-476:3:1550
-477:0:2399
-478:3:1648
-479:0:2399
-480:3:1649
-481:0:2399
-482:3:1653
-483:0:2399
-484:3:1659
-485:3:1663
-486:3:1664
-487:3:1672
-488:3:1673
-489:3:1677
-490:3:1678
-491:3:1686
-492:3:1691
-493:3:1695
-494:3:1696
-495:3:1703
-496:3:1704
-497:3:1715
-498:3:1716
-499:3:1717
-500:3:1728
-501:3:1733
-502:3:1734
-503:0:2399
-504:3:1746
-505:0:2399
-506:3:1748
-507:0:2399
-508:3:1749
-509:3:1753
-510:3:1754
-511:3:1762
-512:3:1763
-513:3:1767
-514:3:1768
-515:3:1776
-516:3:1781
-517:3:1785
-518:3:1786
-519:3:1793
-520:3:1794
-521:3:1805
-522:3:1806
-523:3:1807
-524:3:1818
-525:3:1823
-526:3:1824
-527:0:2399
-528:3:1836
-529:0:2399
-530:3:1838
-531:0:2399
-532:3:1841
-533:3:1842
-534:3:1854
-535:3:1855
-536:3:1859
-537:3:1860
-538:3:1868
-539:3:1873
-540:3:1877
-541:3:1878
-542:3:1885
-543:3:1886
-544:3:1897
-545:3:1898
-546:3:1899
-547:3:1910
-548:3:1915
-549:3:1916
-550:0:2399
-551:3:1928
-552:0:2399
-553:3:1930
-554:0:2399
-555:3:1931
-556:0:2399
-557:3:1932
-558:0:2399
-559:3:1933
-560:0:2399
-561:3:1934
-562:3:1938
-563:3:1939
-564:3:1947
-565:3:1948
-566:3:1952
-567:3:1953
-568:3:1961
-569:3:1966
-570:3:1970
-571:3:1971
-572:3:1978
-573:3:1979
-574:3:1990
-575:3:1991
-576:3:1992
-577:3:2003
-578:3:2008
-579:3:2009
-580:0:2399
-581:3:2021
-582:0:2399
-583:3:2125
-584:0:2399
-585:3:2223
-586:0:2399
-587:3:2224
-588:0:2399
-589:3:2228
-590:0:2399
-591:3:2234
-592:3:2241
-593:3:2242
-594:3:2249
-595:3:2254
-596:0:2399
-597:3:2265
-598:0:2399
-599:3:2266
-600:3:2273
-601:3:2274
-602:3:2281
-603:3:2286
-604:0:2399
-605:3:2297
-606:0:2399
-607:3:2302
-608:3:2309
-609:3:2310
-610:3:2317
-611:3:2322
-612:0:2399
-613:3:2333
-614:0:2399
-615:3:2335
-616:0:2399
-617:3:2336
-618:0:2399
-619:3:876
-620:0:2399
-621:3:877
-622:3:881
-623:3:882
-624:3:890
-625:3:891
-626:3:895
-627:3:896
-628:3:904
-629:3:909
-630:3:913
-631:3:914
-632:3:921
-633:3:922
-634:3:933
-635:3:934
-636:3:935
-637:3:946
-638:3:951
-639:3:952
-640:0:2399
-641:3:964
-642:0:2399
-643:3:966
-644:3:967
-645:0:2399
-646:3:971
-647:3:975
-648:3:976
-649:3:984
-650:3:985
-651:3:989
-652:3:990
-653:3:998
-654:3:1003
-655:3:1004
-656:3:1015
-657:3:1016
-658:3:1027
-659:3:1028
-660:3:1029
-661:3:1040
-662:3:1045
-663:3:1046
-664:0:2399
-665:3:1058
-666:0:2399
-667:3:1060
-668:0:2399
-669:3:1061
-670:0:2399
-671:3:1071
-672:0:2399
-673:3:1072
-674:3:1079
-675:3:1080
-676:3:1087
-677:3:1092
-678:0:2399
-679:3:1103
-680:0:2399
-681:3:1104
-682:3:1111
-683:3:1112
-684:3:1119
-685:3:1124
-686:0:2399
-687:3:1135
-688:0:2399
-689:3:1140
-690:3:1147
-691:3:1148
-692:3:1155
-693:3:1160
-694:0:2399
-695:3:1171
-696:0:2399
-697:3:1173
-698:0:2399
-699:3:1174
-700:3:1178
-701:3:1179
-702:3:1187
-703:3:1188
-704:3:1192
-705:3:1193
-706:3:1201
-707:3:1206
-708:3:1210
-709:3:1211
-710:3:1218
-711:3:1219
-712:3:1230
-713:3:1231
-714:3:1232
-715:3:1243
-716:3:1248
-717:3:1249
-718:0:2399
-719:3:1261
-720:0:2399
-721:3:1263
-722:0:2399
-723:3:1266
-724:3:1267
-725:3:1279
-726:3:1280
-727:3:1284
-728:3:1285
-729:3:1293
-730:3:1298
-731:3:1302
-732:3:1303
-733:3:1310
-734:3:1311
-735:3:1322
-736:3:1323
-737:3:1324
-738:3:1335
-739:3:1340
-740:3:1341
-741:0:2399
-742:3:1353
-743:0:2399
-744:3:1355
-745:0:2399
-746:3:1356
-747:0:2399
-748:3:1357
-749:0:2399
-750:3:1358
-751:0:2399
-752:3:1359
-753:3:1363
-754:3:1364
-755:3:1372
-756:3:1373
-757:3:1377
-758:3:1378
-759:3:1386
-760:3:1391
-761:3:1395
-762:3:1396
-763:3:1403
-764:3:1404
-765:3:1415
-766:3:1416
-767:3:1417
-768:3:1428
-769:3:1433
-770:3:1434
-771:0:2399
-772:3:1446
-773:0:2399
-774:3:1550
-775:0:2399
-776:3:1648
-777:0:2399
-778:3:1649
-779:0:2399
-780:3:1653
-781:0:2399
-782:3:1659
-783:3:1663
-784:3:1664
-785:3:1672
-786:3:1673
-787:3:1677
-788:3:1678
-789:3:1686
-790:3:1691
-791:3:1695
-792:3:1696
-793:3:1703
-794:3:1704
-795:3:1715
-796:3:1716
-797:3:1717
-798:3:1728
-799:3:1733
-800:3:1734
-801:0:2399
-802:3:1746
-803:0:2399
-804:3:1748
-805:0:2399
-806:3:1749
-807:3:1753
-808:3:1754
-809:3:1762
-810:3:1763
-811:3:1767
-812:3:1768
-813:3:1776
-814:3:1781
-815:3:1785
-816:3:1786
-817:3:1793
-818:3:1794
-819:3:1805
-820:3:1806
-821:3:1807
-822:3:1818
-823:3:1823
-824:3:1824
-825:0:2399
-826:3:1836
-827:0:2399
-828:3:1838
-829:0:2399
-830:3:1841
-831:3:1842
-832:3:1854
-833:3:1855
-834:3:1859
-835:3:1860
-836:3:1868
-837:3:1873
-838:3:1877
-839:3:1878
-840:3:1885
-841:3:1886
-842:3:1897
-843:3:1898
-844:3:1899
-845:3:1910
-846:3:1915
-847:3:1916
-848:0:2399
-849:3:1928
-850:0:2399
-851:3:1930
-852:0:2399
-853:3:1931
-854:0:2399
-855:3:1932
-856:0:2399
-857:3:1933
-858:0:2399
-859:3:1934
-860:3:1938
-861:3:1939
-862:3:1947
-863:3:1948
-864:3:1952
-865:3:1953
-866:3:1961
-867:3:1966
-868:3:1970
-869:3:1971
-870:3:1978
-871:3:1979
-872:3:1990
-873:3:1991
-874:3:1992
-875:3:2003
-876:3:2008
-877:3:2009
-878:0:2399
-879:3:2021
-880:0:2399
-881:3:2125
-882:0:2399
-883:3:2223
-884:0:2399
-885:3:2224
-886:0:2399
-887:3:2228
-888:0:2399
-889:3:2234
-890:3:2241
-891:3:2242
-892:3:2249
-893:3:2254
-894:0:2399
-895:3:2265
-896:0:2399
-897:3:2266
-898:3:2273
-899:3:2274
-900:3:2281
-901:3:2286
-902:0:2399
-903:3:2297
-904:0:2399
-905:3:2302
-906:3:2309
-907:3:2310
-908:3:2317
-909:3:2322
-910:0:2399
-911:3:2333
-912:0:2399
-913:3:2335
-914:0:2399
-915:3:2336
-916:0:2399
-917:3:876
-918:0:2399
-919:3:877
-920:3:881
-921:3:882
-922:3:890
-923:3:891
-924:3:895
-925:3:896
-926:3:904
-927:3:909
-928:3:913
-929:3:914
-930:3:921
-931:3:922
-932:3:933
-933:3:934
-934:3:935
-935:3:946
-936:3:951
-937:3:952
-938:0:2399
-939:3:964
-940:0:2399
-941:3:966
-942:3:967
-943:0:2399
-944:3:971
-945:3:975
-946:3:976
-947:3:984
-948:3:985
-949:3:989
-950:3:990
-951:3:998
-952:3:1003
-953:3:1004
-954:3:1015
-955:3:1016
-956:3:1027
-957:3:1028
-958:3:1029
-959:3:1040
-960:3:1045
-961:3:1046
-962:0:2399
-963:3:1058
-964:0:2399
-965:3:1060
-966:0:2399
-967:3:1061
-968:0:2399
-969:3:1071
-970:0:2399
-971:3:1072
-972:3:1079
-973:3:1080
-974:3:1087
-975:3:1092
-976:0:2399
-977:3:1103
-978:0:2399
-979:3:1104
-980:3:1111
-981:3:1112
-982:3:1119
-983:3:1124
-984:0:2399
-985:3:1135
-986:0:2399
-987:3:1140
-988:3:1147
-989:3:1148
-990:3:1155
-991:3:1160
-992:0:2399
-993:3:1171
-994:0:2399
-995:3:1173
-996:0:2399
-997:3:1174
-998:3:1178
-999:3:1179
-1000:3:1187
-1001:3:1188
-1002:3:1192
-1003:3:1193
-1004:3:1201
-1005:3:1206
-1006:3:1210
-1007:3:1211
-1008:3:1218
-1009:3:1219
-1010:3:1230
-1011:3:1231
-1012:3:1232
-1013:3:1243
-1014:3:1248
-1015:3:1249
-1016:0:2399
-1017:3:1261
-1018:0:2399
-1019:3:1263
-1020:0:2399
-1021:3:1266
-1022:3:1267
-1023:3:1279
-1024:3:1280
-1025:3:1284
-1026:3:1285
-1027:3:1293
-1028:3:1298
-1029:3:1302
-1030:3:1303
-1031:3:1310
-1032:3:1311
-1033:3:1322
-1034:3:1323
-1035:3:1324
-1036:3:1335
-1037:3:1340
-1038:3:1341
-1039:0:2399
-1040:3:1353
-1041:0:2399
-1042:3:1355
-1043:0:2399
-1044:3:1356
-1045:0:2399
-1046:3:1357
-1047:0:2399
-1048:3:1358
-1049:0:2399
-1050:3:1359
-1051:3:1363
-1052:3:1364
-1053:3:1372
-1054:3:1373
-1055:3:1377
-1056:3:1378
-1057:3:1386
-1058:3:1391
-1059:3:1395
-1060:3:1396
-1061:3:1403
-1062:3:1404
-1063:3:1415
-1064:3:1416
-1065:3:1417
-1066:3:1428
-1067:3:1433
-1068:3:1434
-1069:0:2399
-1070:3:1446
-1071:0:2399
-1072:3:1550
-1073:0:2399
-1074:3:1648
-1075:0:2399
-1076:3:1649
-1077:0:2399
-1078:3:1653
-1079:0:2399
-1080:3:1659
-1081:3:1663
-1082:3:1664
-1083:3:1672
-1084:3:1673
-1085:3:1677
-1086:3:1678
-1087:3:1686
-1088:3:1691
-1089:3:1695
-1090:3:1696
-1091:3:1703
-1092:3:1704
-1093:3:1715
-1094:3:1716
-1095:3:1717
-1096:3:1728
-1097:3:1733
-1098:3:1734
-1099:0:2399
-1100:3:1746
-1101:0:2399
-1102:3:1748
-1103:0:2399
-1104:3:1749
-1105:3:1753
-1106:3:1754
-1107:3:1762
-1108:3:1763
-1109:3:1767
-1110:3:1768
-1111:3:1776
-1112:3:1781
-1113:3:1785
-1114:3:1786
-1115:3:1793
-1116:3:1794
-1117:3:1805
-1118:3:1806
-1119:3:1807
-1120:3:1818
-1121:3:1823
-1122:3:1824
-1123:0:2399
-1124:3:1836
-1125:0:2399
-1126:3:1838
-1127:0:2399
-1128:3:1841
-1129:3:1842
-1130:3:1854
-1131:3:1855
-1132:3:1859
-1133:3:1860
-1134:3:1868
-1135:3:1873
-1136:3:1877
-1137:3:1878
-1138:3:1885
-1139:3:1886
-1140:3:1897
-1141:3:1898
-1142:3:1899
-1143:3:1910
-1144:3:1915
-1145:3:1916
-1146:0:2399
-1147:3:1928
-1148:0:2399
-1149:3:1930
-1150:0:2399
-1151:3:1931
-1152:0:2399
-1153:3:1932
-1154:0:2399
-1155:3:1933
-1156:0:2399
-1157:3:1934
-1158:3:1938
-1159:3:1939
-1160:3:1947
-1161:3:1948
-1162:3:1952
-1163:3:1953
-1164:3:1961
-1165:3:1966
-1166:3:1970
-1167:3:1971
-1168:3:1978
-1169:3:1979
-1170:3:1990
-1171:3:1991
-1172:3:1992
-1173:3:2003
-1174:3:2008
-1175:3:2009
-1176:0:2399
-1177:3:2021
-1178:0:2399
-1179:3:2125
-1180:0:2399
-1181:3:2223
-1182:0:2399
-1183:3:2224
-1184:0:2399
-1185:3:2228
-1186:0:2399
-1187:3:2234
-1188:3:2241
-1189:3:2242
-1190:3:2249
-1191:3:2254
-1192:0:2399
-1193:3:2265
-1194:0:2399
-1195:3:2266
-1196:3:2273
-1197:3:2274
-1198:3:2281
-1199:3:2286
-1200:0:2399
-1201:3:2297
-1202:0:2399
-1203:3:2302
-1204:3:2309
-1205:3:2310
-1206:3:2317
-1207:3:2322
-1208:0:2399
-1209:3:2333
-1210:0:2399
-1211:3:2335
-1212:0:2399
-1213:3:2336
-1214:0:2399
-1215:3:876
-1216:0:2399
-1217:3:877
-1218:3:881
-1219:3:882
-1220:3:890
-1221:3:891
-1222:3:895
-1223:3:896
-1224:3:904
-1225:3:909
-1226:3:913
-1227:3:914
-1228:3:921
-1229:3:922
-1230:3:933
-1231:3:934
-1232:3:935
-1233:3:946
-1234:3:951
-1235:3:952
-1236:0:2399
-1237:3:964
-1238:0:2399
-1239:3:966
-1240:3:967
-1241:0:2399
-1242:3:971
-1243:3:975
-1244:3:976
-1245:3:984
-1246:3:985
-1247:3:989
-1248:3:990
-1249:3:998
-1250:3:1003
-1251:3:1004
-1252:3:1015
-1253:3:1016
-1254:3:1027
-1255:3:1028
-1256:3:1029
-1257:3:1040
-1258:3:1045
-1259:3:1046
-1260:0:2399
-1261:3:1058
-1262:0:2399
-1263:3:1060
-1264:0:2399
-1265:3:1061
-1266:0:2399
-1267:3:1071
-1268:0:2399
-1269:3:1072
-1270:3:1079
-1271:3:1080
-1272:3:1087
-1273:3:1092
-1274:0:2399
-1275:3:1103
-1276:0:2399
-1277:2:458
-1278:0:2399
-1279:2:464
-1280:0:2399
-1281:2:465
-1282:0:2399
-1283:2:466
-1284:0:2399
-1285:2:467
-1286:0:2399
-1287:1:2
-1288:0:2399
-1289:2:468
-1290:0:2399
-1291:1:8
-1292:0:2399
-1293:1:9
-1294:0:2399
-1295:1:10
-1296:0:2399
-1297:1:11
-1298:0:2399
-1299:2:467
-1300:0:2399
-1301:1:12
-1302:1:16
-1303:1:17
-1304:1:25
-1305:1:26
-1306:1:30
-1307:1:31
-1308:1:39
-1309:1:44
-1310:1:48
-1311:1:49
-1312:1:56
-1313:1:57
-1314:1:68
-1315:1:69
-1316:1:70
-1317:1:81
-1318:1:93
-1319:1:94
-1320:0:2399
-1321:2:468
-1322:0:2399
-1323:1:99
-1324:0:2399
-1325:2:469
-1326:0:2399
-1327:2:475
-1328:0:2399
-1329:2:476
-1330:0:2399
-1331:2:477
-1332:2:481
-1333:2:482
-1334:2:490
-1335:2:491
-1336:2:495
-1337:2:496
-1338:2:504
-1339:2:509
-1340:2:513
-1341:2:514
-1342:2:521
-1343:2:522
-1344:2:533
-1345:2:534
-1346:2:535
-1347:2:546
-1348:2:558
-1349:2:559
-1350:0:2399
-1351:2:564
-1352:0:2399
-1353:2:565
-1354:2:569
-1355:2:570
-1356:2:578
-1357:2:579
-1358:2:583
-1359:2:584
-1360:2:592
-1361:2:597
-1362:2:601
-1363:2:602
-1364:2:609
-1365:2:610
-1366:2:621
-1367:2:622
-1368:2:623
-1369:2:634
-1370:2:646
-1371:2:647
-1372:0:2399
-1373:2:652
-1374:0:2399
-1375:2:653
-1376:0:2399
-1377:2:654
-1378:2:658
-1379:2:659
-1380:2:667
-1381:2:668
-1382:2:672
-1383:2:673
-1384:2:681
-1385:2:686
-1386:2:690
-1387:2:691
-1388:2:698
-1389:2:699
-1390:2:710
-1391:2:711
-1392:2:712
-1393:2:723
-1394:2:735
-1395:2:736
-1396:0:2399
-1397:2:741
-1398:0:2399
-1399:2:750
-1400:0:2399
-1401:2:753
-1402:0:2399
-1403:2:758
-1404:0:2399
-1405:3:1104
-1406:3:1111
-1407:3:1114
-1408:3:1115
-1409:3:1119
-1410:3:1124
-1411:0:2399
-1412:3:1135
-1413:0:2399
-1414:3:1140
-1415:3:1147
-1416:3:1148
-1417:3:1155
-1418:3:1160
-1419:0:2399
-1420:3:1171
-1421:0:2399
-1422:3:1173
-1423:0:2399
-1424:3:1174
-1425:3:1178
-1426:3:1179
-1427:3:1187
-1428:3:1188
-1429:3:1192
-1430:3:1193
-1431:3:1201
-1432:3:1206
-1433:3:1210
-1434:3:1211
-1435:3:1218
-1436:3:1219
-1437:3:1230
-1438:3:1231
-1439:3:1232
-1440:3:1243
-1441:3:1248
-1442:3:1249
-1443:0:2399
-1444:3:1261
-1445:0:2399
-1446:3:1263
-1447:0:2399
-1448:3:1266
-1449:3:1267
-1450:3:1279
-1451:3:1280
-1452:3:1284
-1453:3:1285
-1454:3:1293
-1455:3:1298
-1456:3:1302
-1457:3:1303
-1458:3:1310
-1459:3:1311
-1460:3:1322
-1461:3:1323
-1462:3:1324
-1463:3:1335
-1464:3:1340
-1465:3:1341
-1466:0:2399
-1467:3:1353
-1468:0:2399
-1469:3:1355
-1470:0:2399
-1471:3:1356
-1472:0:2399
-1473:3:1357
-1474:0:2399
-1475:3:1358
-1476:0:2399
-1477:3:1359
-1478:3:1363
-1479:3:1364
-1480:3:1372
-1481:3:1373
-1482:3:1377
-1483:3:1378
-1484:3:1386
-1485:3:1391
-1486:3:1395
-1487:3:1396
-1488:3:1403
-1489:3:1404
-1490:3:1415
-1491:3:1416
-1492:3:1417
-1493:3:1428
-1494:3:1433
-1495:3:1434
-1496:0:2399
-1497:3:1446
-1498:0:2399
-1499:3:1550
-1500:0:2399
-1501:3:1648
-1502:0:2399
-1503:3:1649
-1504:0:2399
-1505:3:1653
-1506:0:2399
-1507:3:1659
-1508:3:1663
-1509:3:1664
-1510:3:1672
-1511:3:1673
-1512:3:1677
-1513:3:1678
-1514:3:1686
-1515:3:1691
-1516:3:1695
-1517:3:1696
-1518:3:1703
-1519:3:1704
-1520:3:1715
-1521:3:1716
-1522:3:1717
-1523:3:1728
-1524:3:1733
-1525:3:1734
-1526:0:2399
-1527:3:1746
-1528:0:2399
-1529:3:1748
-1530:0:2399
-1531:3:1749
-1532:3:1753
-1533:3:1754
-1534:3:1762
-1535:3:1763
-1536:3:1767
-1537:3:1768
-1538:3:1776
-1539:3:1781
-1540:3:1785
-1541:3:1786
-1542:3:1793
-1543:3:1794
-1544:3:1805
-1545:3:1806
-1546:3:1807
-1547:3:1818
-1548:3:1823
-1549:3:1824
-1550:0:2399
-1551:3:1836
-1552:0:2399
-1553:3:1838
-1554:0:2399
-1555:3:1841
-1556:3:1842
-1557:3:1854
-1558:3:1855
-1559:3:1859
-1560:3:1860
-1561:3:1868
-1562:3:1873
-1563:3:1877
-1564:3:1878
-1565:3:1885
-1566:3:1886
-1567:3:1897
-1568:3:1898
-1569:3:1899
-1570:3:1910
-1571:3:1915
-1572:3:1916
-1573:0:2399
-1574:3:1928
-1575:0:2399
-1576:3:1930
-1577:0:2399
-1578:3:1931
-1579:0:2399
-1580:3:1932
-1581:0:2399
-1582:3:1933
-1583:0:2399
-1584:3:1934
-1585:3:1938
-1586:3:1939
-1587:3:1947
-1588:3:1948
-1589:3:1952
-1590:3:1953
-1591:3:1961
-1592:3:1966
-1593:3:1970
-1594:3:1971
-1595:3:1978
-1596:3:1979
-1597:3:1990
-1598:3:1991
-1599:3:1992
-1600:3:2003
-1601:3:2008
-1602:3:2009
-1603:0:2399
-1604:3:2021
-1605:0:2399
-1606:3:2125
-1607:0:2399
-1608:3:2223
-1609:0:2399
-1610:3:2224
-1611:0:2399
-1612:3:2228
-1613:0:2399
-1614:3:2234
-1615:3:2241
-1616:3:2242
-1617:3:2249
-1618:3:2254
-1619:0:2399
-1620:3:2265
-1621:0:2399
-1622:3:2266
-1623:3:2273
-1624:3:2276
-1625:3:2277
-1626:3:2281
-1627:3:2286
-1628:0:2399
-1629:3:2297
-1630:0:2399
-1631:3:2302
-1632:3:2309
-1633:3:2310
-1634:3:2317
-1635:3:2322
-1636:0:2399
-1637:3:2333
-1638:0:2399
-1639:3:2335
-1640:0:2399
-1641:3:2336
-1642:0:2399
-1643:3:2339
-1644:0:2399
-1645:3:2344
-1646:0:2399
-1647:2:759
-1648:0:2397
-1649:3:2345
-1650:0:2403
-1651:2:518
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.define b/formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.log b/formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 5d7d35c..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-Depth=    8352 States=    1e+06 Transitions= 1.05e+07 Memory=   534.807        t=   8.93 R=   1e+05
-pan: claim violated! (at depth 1352)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 8352, errors: 1
-  1456373 states, stored
- 13442538 states, matched
- 14898911 transitions (= stored+matched)
- 50580660 atomic steps
-hash conflicts:   5166006 (resolved)
-
-Stats on memory usage (in Megabytes):
-  127.779      equivalent memory usage for states (stored*(State-vector + overhead))
-  100.443      actual memory usage for states (compression: 78.61%)
-               state-vector as stored = 44 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  566.154      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 179, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1003, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1013, "(1)"
-       line 164, "pan.___", state 1021, "(1)"
-       line 168, "pan.___", state 1033, "(1)"
-       line 175, "pan.___", state 1044, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1066, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1076, "(1)"
-       line 164, "pan.___", state 1084, "(1)"
-       line 168, "pan.___", state 1096, "(1)"
-       line 175, "pan.___", state 1111, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1133, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1143, "(1)"
-       line 164, "pan.___", state 1151, "(1)"
-       line 168, "pan.___", state 1163, "(1)"
-       line 702, "pan.___", state 1188, "-end-"
-       (100 of 1188 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 12.8 seconds
-pan: rate 113424.69 states/second
-pan: avg transition delay 8.6181e-07 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.spin.input b/formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 103464e..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define SINGLE_FLIP
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.spin.input.trail b/formal-model/urcu/result-signal-over-reader/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index e81c46c..0000000
+++ /dev/null
@@ -1,1355 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2103
-2:4:2055
-3:4:2058
-4:4:2058
-5:4:2061
-6:4:2069
-7:4:2069
-8:4:2072
-9:4:2078
-10:4:2082
-11:4:2082
-12:4:2085
-13:4:2093
-14:4:2097
-15:4:2098
-16:0:2103
-17:4:2100
-18:0:2103
-19:3:869
-20:0:2103
-21:3:875
-22:0:2103
-23:3:876
-24:0:2103
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:2103
-45:3:964
-46:0:2103
-47:3:966
-48:3:967
-49:0:2103
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:2103
-69:3:1058
-70:0:2103
-71:3:1060
-72:0:2103
-73:3:1061
-74:0:2103
-75:3:1071
-76:0:2103
-77:3:1075
-78:3:1076
-79:3:1080
-80:3:1084
-81:3:1085
-82:3:1089
-83:3:1097
-84:3:1098
-85:3:1103
-86:3:1110
-87:3:1111
-88:3:1118
-89:3:1123
-90:0:2103
-91:3:1134
-92:0:2103
-93:3:1138
-94:3:1139
-95:3:1143
-96:3:1147
-97:3:1148
-98:3:1152
-99:3:1160
-100:3:1161
-101:3:1166
-102:3:1173
-103:3:1174
-104:3:1181
-105:3:1186
-106:0:2103
-107:3:1197
-108:0:2103
-109:3:1205
-110:3:1206
-111:3:1210
-112:3:1214
-113:3:1215
-114:3:1219
-115:3:1227
-116:3:1228
-117:3:1233
-118:3:1240
-119:3:1241
-120:3:1248
-121:3:1253
-122:0:2103
-123:3:1264
-124:0:2103
-125:3:1266
-126:0:2103
-127:3:1267
-128:3:1271
-129:3:1272
-130:3:1280
-131:3:1281
-132:3:1285
-133:3:1286
-134:3:1294
-135:3:1299
-136:3:1303
-137:3:1304
-138:3:1311
-139:3:1312
-140:3:1323
-141:3:1324
-142:3:1325
-143:3:1336
-144:3:1341
-145:3:1342
-146:0:2103
-147:3:1354
-148:0:2103
-149:3:1356
-150:0:2103
-151:3:1359
-152:3:1360
-153:3:1372
-154:3:1373
-155:3:1377
-156:3:1378
-157:3:1386
-158:3:1391
-159:3:1395
-160:3:1396
-161:3:1403
-162:3:1404
-163:3:1415
-164:3:1416
-165:3:1417
-166:3:1428
-167:3:1433
-168:3:1434
-169:0:2103
-170:3:1446
-171:0:2103
-172:3:1448
-173:0:2103
-174:3:1449
-175:0:2103
-176:3:1450
-177:0:2103
-178:3:1451
-179:0:2103
-180:3:1452
-181:3:1456
-182:3:1457
-183:3:1465
-184:3:1466
-185:3:1470
-186:3:1471
-187:3:1479
-188:3:1484
-189:3:1488
-190:3:1489
-191:3:1496
-192:3:1497
-193:3:1508
-194:3:1509
-195:3:1510
-196:3:1521
-197:3:1526
-198:3:1527
-199:0:2103
-200:3:1539
-201:0:2103
-202:3:1736
-203:0:2103
-204:3:1834
-205:0:2103
-206:3:1835
-207:0:2103
-208:3:1839
-209:0:2103
-210:3:1848
-211:3:1849
-212:3:1853
-213:3:1857
-214:3:1858
-215:3:1862
-216:3:1870
-217:3:1871
-218:3:1876
-219:3:1883
-220:3:1884
-221:3:1891
-222:3:1896
-223:0:2103
-224:3:1907
-225:0:2103
-226:3:1911
-227:3:1912
-228:3:1916
-229:3:1920
-230:3:1921
-231:3:1925
-232:3:1933
-233:3:1934
-234:3:1939
-235:3:1946
-236:3:1947
-237:3:1954
-238:3:1959
-239:0:2103
-240:3:1970
-241:0:2103
-242:3:1978
-243:3:1979
-244:3:1983
-245:3:1987
-246:3:1988
-247:3:1992
-248:3:2000
-249:3:2001
-250:3:2006
-251:3:2013
-252:3:2014
-253:3:2021
-254:3:2026
-255:0:2103
-256:3:2037
-257:0:2103
-258:3:2039
-259:0:2103
-260:3:2040
-261:0:2103
-262:3:876
-263:0:2103
-264:3:877
-265:3:881
-266:3:882
-267:3:890
-268:3:891
-269:3:895
-270:3:896
-271:3:904
-272:3:909
-273:3:913
-274:3:914
-275:3:921
-276:3:922
-277:3:933
-278:3:934
-279:3:935
-280:3:946
-281:3:951
-282:3:952
-283:0:2103
-284:3:964
-285:0:2103
-286:3:966
-287:3:967
-288:0:2103
-289:3:971
-290:3:975
-291:3:976
-292:3:984
-293:3:985
-294:3:989
-295:3:990
-296:3:998
-297:3:1003
-298:3:1004
-299:3:1015
-300:3:1016
-301:3:1027
-302:3:1028
-303:3:1029
-304:3:1040
-305:3:1045
-306:3:1046
-307:0:2103
-308:3:1058
-309:0:2103
-310:3:1060
-311:0:2103
-312:3:1061
-313:0:2103
-314:3:1071
-315:0:2103
-316:3:1075
-317:3:1076
-318:3:1080
-319:3:1084
-320:3:1085
-321:3:1089
-322:3:1097
-323:3:1098
-324:3:1103
-325:3:1110
-326:3:1111
-327:3:1118
-328:3:1123
-329:0:2103
-330:3:1134
-331:0:2103
-332:3:1138
-333:3:1139
-334:3:1143
-335:3:1147
-336:3:1148
-337:3:1152
-338:3:1160
-339:3:1161
-340:3:1166
-341:3:1173
-342:3:1174
-343:3:1181
-344:3:1186
-345:0:2103
-346:3:1197
-347:0:2103
-348:3:1205
-349:3:1206
-350:3:1210
-351:3:1214
-352:3:1215
-353:3:1219
-354:3:1227
-355:3:1228
-356:3:1233
-357:3:1240
-358:3:1241
-359:3:1248
-360:3:1253
-361:0:2103
-362:3:1264
-363:0:2103
-364:3:1266
-365:0:2103
-366:3:1267
-367:3:1271
-368:3:1272
-369:3:1280
-370:3:1281
-371:3:1285
-372:3:1286
-373:3:1294
-374:3:1299
-375:3:1303
-376:3:1304
-377:3:1311
-378:3:1312
-379:3:1323
-380:3:1324
-381:3:1325
-382:3:1336
-383:3:1341
-384:3:1342
-385:0:2103
-386:3:1354
-387:0:2103
-388:3:1356
-389:0:2103
-390:3:1359
-391:3:1360
-392:3:1372
-393:3:1373
-394:3:1377
-395:3:1378
-396:3:1386
-397:3:1391
-398:3:1395
-399:3:1396
-400:3:1403
-401:3:1404
-402:3:1415
-403:3:1416
-404:3:1417
-405:3:1428
-406:3:1433
-407:3:1434
-408:0:2103
-409:3:1446
-410:0:2103
-411:3:1448
-412:0:2103
-413:3:1449
-414:0:2103
-415:3:1450
-416:0:2103
-417:3:1451
-418:0:2103
-419:3:1452
-420:3:1456
-421:3:1457
-422:3:1465
-423:3:1466
-424:3:1470
-425:3:1471
-426:3:1479
-427:3:1484
-428:3:1488
-429:3:1489
-430:3:1496
-431:3:1497
-432:3:1508
-433:3:1509
-434:3:1510
-435:3:1521
-436:3:1526
-437:3:1527
-438:0:2103
-439:3:1539
-440:0:2103
-441:3:1736
-442:0:2103
-443:3:1834
-444:0:2103
-445:3:1835
-446:0:2103
-447:3:1839
-448:0:2103
-449:3:1848
-450:3:1849
-451:3:1853
-452:3:1857
-453:3:1858
-454:3:1862
-455:3:1870
-456:3:1871
-457:3:1876
-458:3:1883
-459:3:1884
-460:3:1891
-461:3:1896
-462:0:2103
-463:3:1907
-464:0:2103
-465:3:1911
-466:3:1912
-467:3:1916
-468:3:1920
-469:3:1921
-470:3:1925
-471:3:1933
-472:3:1934
-473:3:1939
-474:3:1946
-475:3:1947
-476:3:1954
-477:3:1959
-478:0:2103
-479:3:1970
-480:0:2103
-481:3:1978
-482:3:1979
-483:3:1983
-484:3:1987
-485:3:1988
-486:3:1992
-487:3:2000
-488:3:2001
-489:3:2006
-490:3:2013
-491:3:2014
-492:3:2021
-493:3:2026
-494:0:2103
-495:3:2037
-496:0:2103
-497:3:2039
-498:0:2103
-499:3:2040
-500:0:2103
-501:3:876
-502:0:2103
-503:3:877
-504:3:881
-505:3:882
-506:3:890
-507:3:891
-508:3:895
-509:3:896
-510:3:904
-511:3:909
-512:3:913
-513:3:914
-514:3:921
-515:3:922
-516:3:933
-517:3:934
-518:3:935
-519:3:946
-520:3:951
-521:3:952
-522:0:2103
-523:3:964
-524:0:2103
-525:3:966
-526:3:967
-527:0:2103
-528:3:971
-529:3:975
-530:3:976
-531:3:984
-532:3:985
-533:3:989
-534:3:990
-535:3:998
-536:3:1003
-537:3:1004
-538:3:1015
-539:3:1016
-540:3:1027
-541:3:1028
-542:3:1029
-543:3:1040
-544:3:1045
-545:3:1046
-546:0:2103
-547:3:1058
-548:0:2103
-549:3:1060
-550:0:2103
-551:3:1061
-552:0:2103
-553:3:1071
-554:0:2103
-555:3:1075
-556:3:1076
-557:3:1080
-558:3:1084
-559:3:1085
-560:3:1089
-561:3:1097
-562:3:1098
-563:3:1103
-564:3:1110
-565:3:1111
-566:3:1118
-567:3:1123
-568:0:2103
-569:3:1134
-570:0:2103
-571:3:1138
-572:3:1139
-573:3:1143
-574:3:1147
-575:3:1148
-576:3:1152
-577:3:1160
-578:3:1161
-579:3:1166
-580:3:1173
-581:3:1174
-582:3:1181
-583:3:1186
-584:0:2103
-585:3:1197
-586:0:2103
-587:3:1205
-588:3:1206
-589:3:1210
-590:3:1214
-591:3:1215
-592:3:1219
-593:3:1227
-594:3:1228
-595:3:1233
-596:3:1240
-597:3:1241
-598:3:1248
-599:3:1253
-600:0:2103
-601:3:1264
-602:0:2103
-603:3:1266
-604:0:2103
-605:3:1267
-606:3:1271
-607:3:1272
-608:3:1280
-609:3:1281
-610:3:1285
-611:3:1286
-612:3:1294
-613:3:1299
-614:3:1303
-615:3:1304
-616:3:1311
-617:3:1312
-618:3:1323
-619:3:1324
-620:3:1325
-621:3:1336
-622:3:1341
-623:3:1342
-624:0:2103
-625:3:1354
-626:0:2103
-627:3:1356
-628:0:2103
-629:3:1359
-630:3:1360
-631:3:1372
-632:3:1373
-633:3:1377
-634:3:1378
-635:3:1386
-636:3:1391
-637:3:1395
-638:3:1396
-639:3:1403
-640:3:1404
-641:3:1415
-642:3:1416
-643:3:1417
-644:3:1428
-645:3:1433
-646:3:1434
-647:0:2103
-648:3:1446
-649:0:2103
-650:3:1448
-651:0:2103
-652:3:1449
-653:0:2103
-654:3:1450
-655:0:2103
-656:3:1451
-657:0:2103
-658:3:1452
-659:3:1456
-660:3:1457
-661:3:1465
-662:3:1466
-663:3:1470
-664:3:1471
-665:3:1479
-666:3:1484
-667:3:1488
-668:3:1489
-669:3:1496
-670:3:1497
-671:3:1508
-672:3:1509
-673:3:1510
-674:3:1521
-675:3:1526
-676:3:1527
-677:0:2103
-678:3:1539
-679:0:2103
-680:3:1736
-681:0:2103
-682:3:1834
-683:0:2103
-684:3:1835
-685:0:2103
-686:3:1839
-687:0:2103
-688:3:1848
-689:3:1849
-690:3:1853
-691:3:1857
-692:3:1858
-693:3:1862
-694:3:1870
-695:3:1871
-696:3:1876
-697:3:1883
-698:3:1884
-699:3:1891
-700:3:1896
-701:0:2103
-702:3:1907
-703:0:2103
-704:3:1911
-705:3:1912
-706:3:1916
-707:3:1920
-708:3:1921
-709:3:1925
-710:3:1933
-711:3:1934
-712:3:1939
-713:3:1946
-714:3:1947
-715:3:1954
-716:3:1959
-717:0:2103
-718:3:1970
-719:0:2103
-720:3:1978
-721:3:1979
-722:3:1983
-723:3:1987
-724:3:1988
-725:3:1992
-726:3:2000
-727:3:2001
-728:3:2006
-729:3:2013
-730:3:2014
-731:3:2021
-732:3:2026
-733:0:2103
-734:3:2037
-735:0:2103
-736:3:2039
-737:0:2103
-738:3:2040
-739:0:2103
-740:3:876
-741:0:2103
-742:3:877
-743:3:881
-744:3:882
-745:3:890
-746:3:891
-747:3:895
-748:3:896
-749:3:904
-750:3:909
-751:3:913
-752:3:914
-753:3:921
-754:3:922
-755:3:933
-756:3:934
-757:3:935
-758:3:946
-759:3:951
-760:3:952
-761:0:2103
-762:3:964
-763:0:2103
-764:3:966
-765:3:967
-766:0:2103
-767:3:971
-768:3:975
-769:3:976
-770:3:984
-771:3:985
-772:3:989
-773:3:990
-774:3:998
-775:3:1003
-776:3:1004
-777:3:1015
-778:3:1016
-779:3:1027
-780:3:1028
-781:3:1029
-782:3:1040
-783:3:1045
-784:3:1046
-785:0:2103
-786:3:1058
-787:0:2103
-788:3:1060
-789:0:2103
-790:3:1061
-791:0:2103
-792:3:1071
-793:0:2103
-794:3:1075
-795:3:1076
-796:3:1080
-797:3:1084
-798:3:1085
-799:3:1089
-800:3:1097
-801:3:1098
-802:3:1103
-803:3:1110
-804:3:1111
-805:3:1118
-806:3:1123
-807:0:2103
-808:3:1134
-809:0:2103
-810:3:1138
-811:3:1139
-812:3:1143
-813:3:1147
-814:3:1148
-815:3:1152
-816:3:1160
-817:3:1161
-818:3:1166
-819:3:1173
-820:3:1174
-821:3:1181
-822:3:1186
-823:0:2103
-824:3:1197
-825:0:2103
-826:3:1205
-827:3:1206
-828:3:1210
-829:3:1214
-830:3:1215
-831:3:1219
-832:3:1227
-833:3:1228
-834:3:1233
-835:3:1240
-836:3:1241
-837:3:1248
-838:3:1253
-839:0:2103
-840:3:1264
-841:0:2103
-842:3:1266
-843:0:2103
-844:3:1267
-845:3:1271
-846:3:1272
-847:3:1280
-848:3:1281
-849:3:1285
-850:3:1286
-851:3:1294
-852:3:1299
-853:3:1303
-854:3:1304
-855:3:1311
-856:3:1312
-857:3:1323
-858:3:1324
-859:3:1325
-860:3:1336
-861:3:1341
-862:3:1342
-863:0:2103
-864:3:1354
-865:0:2103
-866:3:1356
-867:0:2103
-868:3:1359
-869:3:1360
-870:3:1372
-871:3:1373
-872:3:1377
-873:3:1378
-874:3:1386
-875:3:1391
-876:3:1395
-877:3:1396
-878:3:1403
-879:3:1404
-880:3:1415
-881:3:1416
-882:3:1417
-883:3:1428
-884:3:1433
-885:3:1434
-886:0:2103
-887:3:1446
-888:0:2103
-889:3:1448
-890:0:2103
-891:3:1449
-892:0:2103
-893:3:1450
-894:0:2103
-895:3:1451
-896:0:2103
-897:3:1452
-898:3:1456
-899:3:1457
-900:3:1465
-901:3:1466
-902:3:1470
-903:3:1471
-904:3:1479
-905:3:1484
-906:3:1488
-907:3:1489
-908:3:1496
-909:3:1497
-910:3:1508
-911:3:1509
-912:3:1510
-913:3:1521
-914:3:1526
-915:3:1527
-916:0:2103
-917:3:1539
-918:0:2103
-919:3:1736
-920:0:2103
-921:3:1834
-922:0:2103
-923:3:1835
-924:0:2103
-925:3:1839
-926:0:2103
-927:3:1848
-928:3:1849
-929:3:1853
-930:3:1857
-931:3:1858
-932:3:1862
-933:3:1870
-934:3:1871
-935:3:1876
-936:3:1883
-937:3:1884
-938:3:1891
-939:3:1896
-940:0:2103
-941:3:1907
-942:0:2103
-943:2:458
-944:0:2103
-945:2:464
-946:0:2103
-947:2:465
-948:0:2103
-949:2:466
-950:0:2103
-951:2:467
-952:0:2103
-953:1:2
-954:0:2103
-955:2:468
-956:0:2103
-957:1:8
-958:0:2103
-959:1:9
-960:0:2103
-961:1:10
-962:0:2103
-963:1:11
-964:0:2103
-965:2:467
-966:0:2103
-967:1:12
-968:1:16
-969:1:17
-970:1:25
-971:1:26
-972:1:30
-973:1:31
-974:1:39
-975:1:44
-976:1:48
-977:1:49
-978:1:63
-979:1:64
-980:1:68
-981:1:69
-982:1:70
-983:1:81
-984:1:86
-985:1:87
-986:0:2103
-987:2:468
-988:0:2103
-989:1:99
-990:0:2103
-991:2:469
-992:0:2103
-993:2:475
-994:0:2103
-995:2:476
-996:0:2103
-997:2:477
-998:2:481
-999:2:482
-1000:2:490
-1001:2:491
-1002:2:495
-1003:2:496
-1004:2:504
-1005:2:509
-1006:2:513
-1007:2:514
-1008:2:528
-1009:2:529
-1010:2:533
-1011:2:534
-1012:2:535
-1013:2:546
-1014:2:551
-1015:2:552
-1016:0:2103
-1017:2:564
-1018:0:2103
-1019:2:565
-1020:2:569
-1021:2:570
-1022:2:578
-1023:2:579
-1024:2:583
-1025:2:584
-1026:2:592
-1027:2:597
-1028:2:601
-1029:2:602
-1030:2:616
-1031:2:617
-1032:2:621
-1033:2:622
-1034:2:623
-1035:2:634
-1036:2:639
-1037:2:640
-1038:0:2103
-1039:2:652
-1040:0:2103
-1041:2:653
-1042:0:2103
-1043:3:1911
-1044:3:1912
-1045:3:1916
-1046:3:1920
-1047:3:1921
-1048:3:1925
-1049:3:1933
-1050:3:1934
-1051:3:1939
-1052:3:1946
-1053:3:1947
-1054:3:1954
-1055:3:1959
-1056:0:2103
-1057:3:1970
-1058:0:2103
-1059:3:1978
-1060:3:1979
-1061:3:1983
-1062:3:1987
-1063:3:1988
-1064:3:1992
-1065:3:2000
-1066:3:2001
-1067:3:2006
-1068:3:2013
-1069:3:2014
-1070:3:2021
-1071:3:2026
-1072:0:2103
-1073:3:2037
-1074:0:2103
-1075:3:2039
-1076:0:2103
-1077:3:2040
-1078:0:2103
-1079:3:876
-1080:0:2103
-1081:3:877
-1082:3:881
-1083:3:882
-1084:3:890
-1085:3:891
-1086:3:895
-1087:3:896
-1088:3:904
-1089:3:909
-1090:3:913
-1091:3:914
-1092:3:921
-1093:3:922
-1094:3:933
-1095:3:934
-1096:3:935
-1097:3:946
-1098:3:951
-1099:3:952
-1100:0:2103
-1101:3:964
-1102:0:2103
-1103:3:966
-1104:3:967
-1105:0:2103
-1106:3:971
-1107:3:975
-1108:3:976
-1109:3:984
-1110:3:985
-1111:3:989
-1112:3:990
-1113:3:998
-1114:3:1003
-1115:3:1004
-1116:3:1015
-1117:3:1016
-1118:3:1027
-1119:3:1028
-1120:3:1029
-1121:3:1040
-1122:3:1045
-1123:3:1046
-1124:0:2103
-1125:3:1058
-1126:0:2103
-1127:3:1060
-1128:0:2103
-1129:3:1061
-1130:0:2103
-1131:3:1071
-1132:0:2103
-1133:3:1075
-1134:3:1076
-1135:3:1080
-1136:3:1084
-1137:3:1085
-1138:3:1089
-1139:3:1097
-1140:3:1098
-1141:3:1103
-1142:3:1110
-1143:3:1111
-1144:3:1118
-1145:3:1123
-1146:0:2103
-1147:3:1134
-1148:0:2103
-1149:2:654
-1150:2:658
-1151:2:659
-1152:2:667
-1153:2:668
-1154:2:672
-1155:2:673
-1156:2:681
-1157:2:686
-1158:2:690
-1159:2:691
-1160:2:698
-1161:2:699
-1162:2:710
-1163:2:711
-1164:2:712
-1165:2:723
-1166:2:735
-1167:2:736
-1168:0:2103
-1169:2:741
-1170:0:2103
-1171:2:750
-1172:0:2103
-1173:2:753
-1174:0:2103
-1175:2:758
-1176:0:2103
-1177:3:1138
-1178:3:1139
-1179:3:1143
-1180:3:1144
-1181:3:1152
-1182:3:1160
-1183:3:1161
-1184:3:1166
-1185:3:1173
-1186:3:1174
-1187:3:1181
-1188:3:1186
-1189:0:2103
-1190:3:1197
-1191:0:2103
-1192:3:1205
-1193:3:1206
-1194:3:1210
-1195:3:1214
-1196:3:1215
-1197:3:1219
-1198:3:1227
-1199:3:1228
-1200:3:1233
-1201:3:1240
-1202:3:1241
-1203:3:1248
-1204:3:1253
-1205:0:2103
-1206:3:1264
-1207:0:2103
-1208:3:1266
-1209:0:2103
-1210:3:1267
-1211:3:1271
-1212:3:1272
-1213:3:1280
-1214:3:1281
-1215:3:1285
-1216:3:1286
-1217:3:1294
-1218:3:1299
-1219:3:1303
-1220:3:1304
-1221:3:1311
-1222:3:1312
-1223:3:1323
-1224:3:1324
-1225:3:1325
-1226:3:1336
-1227:3:1341
-1228:3:1342
-1229:0:2103
-1230:3:1354
-1231:0:2103
-1232:3:1356
-1233:0:2103
-1234:3:1359
-1235:3:1360
-1236:3:1372
-1237:3:1373
-1238:3:1377
-1239:3:1378
-1240:3:1386
-1241:3:1391
-1242:3:1395
-1243:3:1396
-1244:3:1403
-1245:3:1404
-1246:3:1415
-1247:3:1416
-1248:3:1417
-1249:3:1428
-1250:3:1433
-1251:3:1434
-1252:0:2103
-1253:3:1446
-1254:0:2103
-1255:3:1448
-1256:0:2103
-1257:3:1449
-1258:0:2103
-1259:3:1450
-1260:0:2103
-1261:3:1451
-1262:0:2103
-1263:3:1452
-1264:3:1456
-1265:3:1457
-1266:3:1465
-1267:3:1466
-1268:3:1470
-1269:3:1471
-1270:3:1479
-1271:3:1484
-1272:3:1488
-1273:3:1489
-1274:3:1496
-1275:3:1497
-1276:3:1508
-1277:3:1509
-1278:3:1510
-1279:3:1521
-1280:3:1526
-1281:3:1527
-1282:0:2103
-1283:3:1539
-1284:0:2103
-1285:3:1736
-1286:0:2103
-1287:3:1834
-1288:0:2103
-1289:3:1835
-1290:0:2103
-1291:3:1839
-1292:0:2103
-1293:3:1848
-1294:3:1849
-1295:3:1853
-1296:3:1857
-1297:3:1858
-1298:3:1862
-1299:3:1870
-1300:3:1871
-1301:3:1876
-1302:3:1883
-1303:3:1884
-1304:3:1891
-1305:3:1896
-1306:0:2103
-1307:3:1907
-1308:0:2103
-1309:3:1911
-1310:3:1912
-1311:3:1916
-1312:3:1920
-1313:3:1921
-1314:3:1925
-1315:3:1933
-1316:3:1934
-1317:3:1939
-1318:3:1946
-1319:3:1947
-1320:3:1954
-1321:3:1959
-1322:0:2103
-1323:3:1970
-1324:0:2103
-1325:3:1978
-1326:3:1979
-1327:3:1983
-1328:3:1987
-1329:3:1988
-1330:3:1992
-1331:3:2000
-1332:3:2001
-1333:3:2006
-1334:3:2013
-1335:3:2014
-1336:3:2021
-1337:3:2026
-1338:0:2103
-1339:3:2037
-1340:0:2103
-1341:3:2039
-1342:0:2103
-1343:3:2040
-1344:0:2103
-1345:3:2043
-1346:0:2103
-1347:3:2048
-1348:0:2103
-1349:2:759
-1350:0:2101
-1351:3:2049
-1352:0:2107
-1353:3:1181
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress.ltl b/formal-model/urcu/result-signal-over-reader/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_reader.define b/formal-model/urcu/result-signal-over-reader/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_reader.log b/formal-model/urcu/result-signal-over-reader/urcu_progress_reader.log
deleted file mode 100644 (file)
index e3ec127..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 1803: Claim reached state 9 (line 748)
-Depth=    5838 States=    1e+06 Transitions= 1.06e+07 Memory=   494.865        t=   9.24 R=   1e+05
-Depth=    5838 States=    2e+06 Transitions= 1.97e+07 Memory=   532.658        t=   17.7 R=   1e+05
-Depth=    5838 States=    3e+06 Transitions= 3.15e+07 Memory=   555.315        t=   28.4 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=    6855 States=    4e+06 Transitions= 4.32e+07 Memory=   613.096        t=   39.1 R=   1e+05
-Depth=    9059 States=    5e+06 Transitions= 5.48e+07 Memory=   642.295        t=   49.5 R=   1e+05
-Depth=    9059 States=    6e+06 Transitions= 6.91e+07 Memory=   672.178        t=   62.5 R=   1e+05
-Depth=    9059 States=    7e+06 Transitions= 7.99e+07 Memory=   706.455        t=   72.5 R=   1e+05
-Depth=    9059 States=    8e+06 Transitions= 9.23e+07 Memory=   735.752        t=     84 R=   1e+05
-Depth=    9059 States=    9e+06 Transitions= 1.04e+08 Memory=   766.318        t=   94.5 R=   1e+05
-pan: resizing hashtable to -w24..  done
-Depth=    9059 States=    1e+07 Transitions= 1.16e+08 Memory=   920.002        t=    106 R=   9e+04
-Depth=    9059 States=  1.1e+07 Transitions=  1.3e+08 Memory=   945.002        t=    119 R=   9e+04
-Depth=    9059 States=  1.2e+07 Transitions= 1.54e+08 Memory=   967.756        t=    140 R=   9e+04
-Depth=    9059 States=  1.3e+07 Transitions= 1.72e+08 Memory=   995.002        t=    157 R=   8e+04
-Depth=    9059 States=  1.4e+07 Transitions= 1.92e+08 Memory=  1022.736        t=    175 R=   8e+04
-Depth=    9059 States=  1.5e+07 Transitions=  2.1e+08 Memory=  1050.080        t=    191 R=   8e+04
-Depth=    9059 States=  1.6e+07 Transitions= 2.22e+08 Memory=  1082.502        t=    203 R=   8e+04
-Depth=    9059 States=  1.7e+07 Transitions= 2.41e+08 Memory=  1108.479        t=    219 R=   8e+04
-Depth=    9059 States=  1.8e+07 Transitions= 2.58e+08 Memory=  1134.455        t=    235 R=   8e+04
-Depth=    9059 States=  1.9e+07 Transitions=  2.7e+08 Memory=  1164.533        t=    246 R=   8e+04
-Depth=    9059 States=    2e+07 Transitions= 2.83e+08 Memory=  1193.830        t=    258 R=   8e+04
-Depth=    9059 States=  2.1e+07 Transitions= 3.03e+08 Memory=  1219.026        t=    276 R=   8e+04
-Depth=    9059 States=  2.2e+07 Transitions= 3.19e+08 Memory=  1248.420        t=    291 R=   8e+04
-Depth=    9059 States=  2.3e+07 Transitions= 3.42e+08 Memory=  1271.858        t=    312 R=   7e+04
-Depth=    9059 States=  2.4e+07 Transitions=  3.6e+08 Memory=  1298.908        t=    328 R=   7e+04
-Depth=    9059 States=  2.5e+07 Transitions= 3.84e+08 Memory=  1323.127        t=    350 R=   7e+04
-Depth=    9059 States=  2.6e+07 Transitions=    4e+08 Memory=  1348.518        t=    365 R=   7e+04
-Depth=    9059 States=  2.7e+07 Transitions= 4.16e+08 Memory=  1379.865        t=    380 R=   7e+04
-Depth=    9059 States=  2.8e+07 Transitions= 4.26e+08 Memory=  1411.115        t=    389 R=   7e+04
-Depth=    9059 States=  2.9e+07 Transitions= 4.42e+08 Memory=  1439.631        t=    404 R=   7e+04
-Depth=    9059 States=    3e+07 Transitions= 4.64e+08 Memory=  1462.385        t=    423 R=   7e+04
-Depth=    9059 States=  3.1e+07 Transitions= 4.82e+08 Memory=  1490.998        t=    439 R=   7e+04
-Depth=    9059 States=  3.2e+07 Transitions= 4.99e+08 Memory=  1519.514        t=    456 R=   7e+04
-Depth=    9059 States=  3.3e+07 Transitions= 5.18e+08 Memory=  1545.393        t=    473 R=   7e+04
-Depth=    9059 States=  3.4e+07 Transitions= 5.33e+08 Memory=  1578.108        t=    486 R=   7e+04
-pan: resizing hashtable to -w26..  done
-Depth=    9059 States=  3.5e+07 Transitions= 5.49e+08 Memory=  2098.994        t=    504 R=   7e+04
-Depth=    9059 States=  3.6e+07 Transitions= 5.74e+08 Memory=  2121.651        t=    528 R=   7e+04
-Depth=    9059 States=  3.7e+07 Transitions= 5.96e+08 Memory=  2147.334        t=    547 R=   7e+04
-Depth=    9059 States=  3.8e+07 Transitions= 6.17e+08 Memory=  2170.186        t=    567 R=   7e+04
-Depth=    9059 States=  3.9e+07 Transitions=  6.3e+08 Memory=  2199.776        t=    578 R=   7e+04
-Depth=    9059 States=    4e+07 Transitions= 6.53e+08 Memory=  2225.459        t=    599 R=   7e+04
-Depth=    9059 States=  4.1e+07 Transitions= 6.69e+08 Memory=  2250.361        t=    614 R=   7e+04
-Depth=    9059 States=  4.2e+07 Transitions= 6.85e+08 Memory=  2279.268        t=    628 R=   7e+04
-Depth=    9059 States=  4.3e+07 Transitions= 7.03e+08 Memory=  2304.463        t=    644 R=   7e+04
-Depth=    9059 States=  4.4e+07 Transitions= 7.13e+08 Memory=  2338.252        t=    654 R=   7e+04
-Depth=    9059 States=  4.5e+07 Transitions= 7.25e+08 Memory=  2366.768        t=    665 R=   7e+04
-Depth=    9059 States=  4.6e+07 Transitions= 7.41e+08 Memory=  2393.330        t=    679 R=   7e+04
-Depth=    9059 States=  4.7e+07 Transitions= 7.57e+08 Memory=  2420.381        t=    694 R=   7e+04
-Depth=    9059 States=  4.8e+07 Transitions= 7.72e+08 Memory=  2447.041        t=    708 R=   7e+04
-Depth=    9059 States=  4.9e+07 Transitions= 7.88e+08 Memory=  2476.143        t=    722 R=   7e+04
-Depth=    9059 States=    5e+07 Transitions= 8.04e+08 Memory=  2501.045        t=    737 R=   7e+04
-Depth=    9059 States=  5.1e+07 Transitions=  8.2e+08 Memory=  2530.440        t=    752 R=   7e+04
-Depth=    9059 States=  5.2e+07 Transitions= 8.37e+08 Memory=  2554.854        t=    766 R=   7e+04
-Depth=    9059 States=  5.3e+07 Transitions=  8.5e+08 Memory=  2583.467        t=    779 R=   7e+04
-Depth=    9059 States=  5.4e+07 Transitions= 8.66e+08 Memory=  2611.299        t=    794 R=   7e+04
-Depth=    9059 States=  5.5e+07 Transitions= 8.79e+08 Memory=  2640.791        t=    805 R=   7e+04
-Depth=    9059 States=  5.6e+07 Transitions=  8.9e+08 Memory=  2672.139        t=    815 R=   7e+04
-Depth=    9059 States=  5.7e+07 Transitions= 9.05e+08 Memory=  2702.705        t=    829 R=   7e+04
-Depth=    9059 States=  5.8e+07 Transitions= 9.22e+08 Memory=  2727.998        t=    845 R=   7e+04
-Depth=    9059 States=  5.9e+07 Transitions= 9.38e+08 Memory=  2754.463        t=    859 R=   7e+04
-Depth=    9059 States=    6e+07 Transitions= 9.49e+08 Memory=  2789.717        t=    870 R=   7e+04
-Depth=    9059 States=  6.1e+07 Transitions= 9.62e+08 Memory=  2817.744        t=    881 R=   7e+04
-Depth=    9059 States=  6.2e+07 Transitions= 9.79e+08 Memory=  2838.447        t=    896 R=   7e+04
-Depth=    9059 States=  6.3e+07 Transitions=    1e+09 Memory=  2863.154        t=    919 R=   7e+04
-Depth=    9059 States=  6.4e+07 Transitions= 1.02e+09 Memory=  2889.131        t=    936 R=   7e+04
-Depth=    9059 States=  6.5e+07 Transitions= 1.04e+09 Memory=  2919.502        t=    952 R=   7e+04
-Depth=    9059 States=  6.6e+07 Transitions= 1.06e+09 Memory=  2943.916        t=    968 R=   7e+04
-Depth=    9059 States=  6.7e+07 Transitions= 1.07e+09 Memory=  2978.975        t=    979 R=   7e+04
-Depth=    9059 States=  6.8e+07 Transitions= 1.09e+09 Memory=  3003.877        t=    996 R=   7e+04
-Depth=    9059 States=  6.9e+07 Transitions= 1.11e+09 Memory=  3028.584        t= 1.01e+03 R=   7e+04
-Depth=    9059 States=    7e+07 Transitions= 1.12e+09 Memory=  3058.174        t= 1.02e+03 R=   7e+04
-Depth=    9059 States=  7.1e+07 Transitions= 1.13e+09 Memory=  3088.350        t= 1.04e+03 R=   7e+04
-Depth=    9059 States=  7.2e+07 Transitions= 1.15e+09 Memory=  3113.350        t= 1.05e+03 R=   7e+04
-Depth=    9059 States=  7.3e+07 Transitions= 1.17e+09 Memory=  3142.158        t= 1.07e+03 R=   7e+04
-Depth=    9059 States=  7.4e+07 Transitions= 1.19e+09 Memory=  3166.279        t= 1.09e+03 R=   7e+04
-Depth=    9059 States=  7.5e+07 Transitions= 1.21e+09 Memory=  3192.744        t= 1.11e+03 R=   7e+04
-Depth=    9059 States=  7.6e+07 Transitions= 1.23e+09 Memory=  3217.256        t= 1.13e+03 R=   7e+04
-Depth=    9059 States=  7.7e+07 Transitions= 1.25e+09 Memory=  3242.549        t= 1.14e+03 R=   7e+04
-Depth=    9059 States=  7.8e+07 Transitions= 1.26e+09 Memory=  3273.115        t= 1.16e+03 R=   7e+04
-Depth=    9059 States=  7.9e+07 Transitions= 1.27e+09 Memory=  3303.975        t= 1.17e+03 R=   7e+04
-Depth=    9059 States=    8e+07 Transitions= 1.29e+09 Memory=  3334.541        t= 1.18e+03 R=   7e+04
-Depth=    9059 States=  8.1e+07 Transitions= 1.31e+09 Memory=  3356.221        t= 1.2e+03 R=   7e+04
-Depth=    9059 States=  8.2e+07 Transitions= 1.33e+09 Memory=  3385.127        t= 1.22e+03 R=   7e+04
-Depth=    9059 States=  8.3e+07 Transitions= 1.35e+09 Memory=  3412.959        t= 1.23e+03 R=   7e+04
-Depth=    9059 States=  8.4e+07 Transitions= 1.37e+09 Memory=  3438.936        t= 1.25e+03 R=   7e+04
-Depth=    9059 States=  8.5e+07 Transitions= 1.38e+09 Memory=  3471.455        t= 1.26e+03 R=   7e+04
-Depth=    9059 States=  8.6e+07 Transitions=  1.4e+09 Memory=  3498.115        t= 1.28e+03 R=   7e+04
-Depth=    9059 States=  8.7e+07 Transitions= 1.42e+09 Memory=  3519.014        t= 1.3e+03 R=   7e+04
-Depth=    9059 States=  8.8e+07 Transitions= 1.44e+09 Memory=  3546.162        t= 1.32e+03 R=   7e+04
-Depth=    9059 States=  8.9e+07 Transitions= 1.46e+09 Memory=  3567.842        t= 1.34e+03 R=   7e+04
-Depth=    9059 States=    9e+07 Transitions= 1.48e+09 Memory=  3598.799        t= 1.35e+03 R=   7e+04
-Depth=    9059 States=  9.1e+07 Transitions=  1.5e+09 Memory=  3622.920        t= 1.37e+03 R=   7e+04
-Depth=    9059 States=  9.2e+07 Transitions= 1.52e+09 Memory=  3648.701        t= 1.39e+03 R=   7e+04
-Depth=    9059 States=  9.3e+07 Transitions= 1.53e+09 Memory=  3676.045        t= 1.4e+03 R=   7e+04
-Depth=    9059 States=  9.4e+07 Transitions= 1.55e+09 Memory=  3702.412        t= 1.42e+03 R=   7e+04
-Depth=    9059 States=  9.5e+07 Transitions= 1.56e+09 Memory=  3735.713        t= 1.43e+03 R=   7e+04
-Depth=    9059 States=  9.6e+07 Transitions= 1.57e+09 Memory=  3764.522        t= 1.44e+03 R=   7e+04
-Depth=    9059 States=  9.7e+07 Transitions= 1.59e+09 Memory=  3790.693        t= 1.45e+03 R=   7e+04
-Depth=    9059 States=  9.8e+07 Transitions= 1.61e+09 Memory=  3817.940        t= 1.47e+03 R=   7e+04
-Depth=    9059 States=  9.9e+07 Transitions= 1.62e+09 Memory=  3845.283        t= 1.48e+03 R=   7e+04
-Depth=    9059 States=    1e+08 Transitions= 1.64e+09 Memory=  3873.213        t= 1.5e+03 R=   7e+04
-Depth=    9059 States= 1.01e+08 Transitions= 1.65e+09 Memory=  3897.920        t= 1.51e+03 R=   7e+04
-Depth=    9059 States= 1.02e+08 Transitions= 1.67e+09 Memory=  3926.631        t= 1.53e+03 R=   7e+04
-Depth=    9059 States= 1.03e+08 Transitions= 1.68e+09 Memory=  3952.315        t= 1.54e+03 R=   7e+04
-Depth=    9059 States= 1.04e+08 Transitions=  1.7e+09 Memory=  3981.026        t= 1.56e+03 R=   7e+04
-Depth=    9059 States= 1.05e+08 Transitions= 1.71e+09 Memory=  4010.029        t= 1.57e+03 R=   7e+04
-Depth=    9059 States= 1.06e+08 Transitions= 1.73e+09 Memory=  4038.838        t= 1.58e+03 R=   7e+04
-Depth=    9059 States= 1.07e+08 Transitions= 1.74e+09 Memory=  4070.381        t= 1.59e+03 R=   7e+04
-Depth=    9059 States= 1.08e+08 Transitions= 1.75e+09 Memory=  4099.385        t= 1.61e+03 R=   7e+04
-Depth=    9059 States= 1.09e+08 Transitions= 1.77e+09 Memory=  4126.338        t= 1.62e+03 R=   7e+04
-Depth=    9059 States=  1.1e+08 Transitions= 1.79e+09 Memory=  4151.924        t= 1.64e+03 R=   7e+04
-Depth=    9059 States= 1.11e+08 Transitions=  1.8e+09 Memory=  4187.276        t= 1.65e+03 R=   7e+04
-Depth=    9059 States= 1.12e+08 Transitions= 1.81e+09 Memory=  4214.326        t= 1.66e+03 R=   7e+04
-Depth=    9059 States= 1.13e+08 Transitions= 1.83e+09 Memory=  4237.471        t= 1.67e+03 R=   7e+04
-Depth=    9059 States= 1.14e+08 Transitions= 1.85e+09 Memory=  4261.104        t= 1.7e+03 R=   7e+04
-Depth=    9059 States= 1.15e+08 Transitions= 1.87e+09 Memory=  4286.690        t= 1.71e+03 R=   7e+04
-Depth=    9059 States= 1.16e+08 Transitions= 1.89e+09 Memory=  4314.619        t= 1.73e+03 R=   7e+04
-Depth=    9059 States= 1.17e+08 Transitions= 1.91e+09 Memory=  4341.768        t= 1.75e+03 R=   7e+04
-Depth=    9059 States= 1.18e+08 Transitions= 1.92e+09 Memory=  4375.166        t= 1.76e+03 R=   7e+04
-Depth=    9059 States= 1.19e+08 Transitions= 1.94e+09 Memory=  4401.338        t= 1.78e+03 R=   7e+04
-Depth=    9059 States=  1.2e+08 Transitions= 1.95e+09 Memory=  4426.436        t= 1.79e+03 R=   7e+04
-Depth=    9059 States= 1.21e+08 Transitions= 1.97e+09 Memory=  4456.807        t= 1.8e+03 R=   7e+04
-Depth=    9059 States= 1.22e+08 Transitions= 1.98e+09 Memory=  4486.592        t= 1.82e+03 R=   7e+04
-Depth=    9059 States= 1.23e+08 Transitions=    2e+09 Memory=  4511.787        t= 1.83e+03 R=   7e+04
-Depth=    9059 States= 1.24e+08 Transitions= 2.02e+09 Memory=  4540.108        t= 1.85e+03 R=   7e+04
-Depth=    9059 States= 1.25e+08 Transitions= 2.04e+09 Memory=  4564.033        t= 1.87e+03 R=   7e+04
-Depth=    9059 States= 1.26e+08 Transitions= 2.06e+09 Memory=  4591.865        t= 1.89e+03 R=   7e+04
-Depth=    9059 States= 1.27e+08 Transitions= 2.08e+09 Memory=  4615.889        t= 1.91e+03 R=   7e+04
-Depth=    9059 States= 1.28e+08 Transitions=  2.1e+09 Memory=  4640.303        t= 1.92e+03 R=   7e+04
-Depth=    9059 States= 1.29e+08 Transitions= 2.11e+09 Memory=  4670.479        t= 1.94e+03 R=   7e+04
-Depth=    9059 States=  1.3e+08 Transitions= 2.12e+09 Memory=  4702.998        t= 1.95e+03 R=   7e+04
-Depth=    9059 States= 1.31e+08 Transitions= 2.14e+09 Memory=  4732.393        t= 1.96e+03 R=   7e+04
-Depth=    9059 States= 1.32e+08 Transitions= 2.16e+09 Memory=  4754.756        t= 1.98e+03 R=   7e+04
-Depth=    9059 States= 1.33e+08 Transitions= 2.18e+09 Memory=  4783.174        t=  2e+03 R=   7e+04
-Depth=    9059 States= 1.34e+08 Transitions= 2.19e+09 Memory=  4810.518        t= 2.01e+03 R=   7e+04
-Depth=    9059 States= 1.35e+08 Transitions= 2.21e+09 Memory=  4837.568        t= 2.03e+03 R=   7e+04
-pan: resizing hashtable to -w28..  done
-Depth=    9059 States= 1.36e+08 Transitions= 2.23e+09 Memory=  6885.568        t= 2.06e+03 R=   7e+04
-Depth=    9059 States= 1.37e+08 Transitions= 2.24e+09 Memory=  6885.568        t= 2.08e+03 R=   7e+04
-Depth=    9059 States= 1.38e+08 Transitions= 2.27e+09 Memory=  6900.412        t= 2.1e+03 R=   7e+04
-Depth=    9059 States= 1.39e+08 Transitions= 2.29e+09 Memory=  6927.658        t= 2.12e+03 R=   7e+04
-Depth=    9059 States=  1.4e+08 Transitions= 2.31e+09 Memory=  6950.315        t= 2.14e+03 R=   7e+04
-Depth=    9059 States= 1.41e+08 Transitions= 2.33e+09 Memory=  6981.858        t= 2.15e+03 R=   7e+04
-Depth=    9059 States= 1.42e+08 Transitions= 2.35e+09 Memory=  7005.295        t= 2.17e+03 R=   7e+04
-Depth=    9059 States= 1.43e+08 Transitions= 2.36e+09 Memory=  7031.076        t= 2.18e+03 R=   7e+04
-Depth=    9059 States= 1.44e+08 Transitions= 2.38e+09 Memory=  7056.955        t= 2.2e+03 R=   7e+04
-Depth=    9059 States= 1.45e+08 Transitions=  2.4e+09 Memory=  7084.494        t= 2.22e+03 R=   7e+04
-Depth=    9059 States= 1.46e+08 Transitions= 2.41e+09 Memory=  7115.744        t= 2.23e+03 R=   7e+04
-Depth=    9059 States= 1.47e+08 Transitions= 2.42e+09 Memory=  7146.604        t= 2.24e+03 R=   7e+04
-Depth=    9059 States= 1.48e+08 Transitions= 2.44e+09 Memory=  7172.287        t= 2.25e+03 R=   7e+04
-Depth=    9059 States= 1.49e+08 Transitions= 2.45e+09 Memory=  7200.315        t= 2.26e+03 R=   7e+04
-Depth=    9059 States=  1.5e+08 Transitions= 2.47e+09 Memory=  7226.389        t= 2.28e+03 R=   7e+04
-Depth=    9059 States= 1.51e+08 Transitions= 2.48e+09 Memory=  7253.733        t= 2.29e+03 R=   7e+04
-Depth=    9059 States= 1.52e+08 Transitions=  2.5e+09 Memory=  7279.709        t= 2.31e+03 R=   7e+04
-Depth=    9059 States= 1.53e+08 Transitions= 2.52e+09 Memory=  7309.104        t= 2.32e+03 R=   7e+04
-Depth=    9059 States= 1.54e+08 Transitions= 2.53e+09 Memory=  7334.592        t= 2.34e+03 R=   7e+04
-Depth=    9059 States= 1.55e+08 Transitions= 2.55e+09 Memory=  7362.229        t= 2.35e+03 R=   7e+04
-Depth=    9059 States= 1.56e+08 Transitions= 2.56e+09 Memory=  7391.135        t= 2.36e+03 R=   7e+04
-Depth=    9059 States= 1.57e+08 Transitions= 2.57e+09 Memory=  7420.822        t= 2.38e+03 R=   7e+04
-Depth=    9059 States= 1.58e+08 Transitions= 2.59e+09 Memory=  7452.854        t= 2.39e+03 R=   7e+04
-Depth=    9059 States= 1.59e+08 Transitions=  2.6e+09 Memory=  7481.760        t= 2.4e+03 R=   7e+04
-Depth=    9059 States=  1.6e+08 Transitions= 2.62e+09 Memory=  7509.299        t= 2.41e+03 R=   7e+04
-Depth=    9059 States= 1.61e+08 Transitions= 2.63e+09 Memory=  7534.201        t= 2.43e+03 R=   7e+04
-Depth=    9059 States= 1.62e+08 Transitions= 2.65e+09 Memory=  7567.600        t= 2.44e+03 R=   7e+04
-Depth=    9059 States= 1.63e+08 Transitions= 2.66e+09 Memory=  7594.846        t= 2.45e+03 R=   7e+04
-Depth=    9059 States= 1.64e+08 Transitions= 2.67e+09 Memory=  7619.455        t= 2.47e+03 R=   7e+04
-Depth=    9059 States= 1.65e+08 Transitions=  2.7e+09 Memory=  7642.502        t= 2.49e+03 R=   7e+04
-Depth=    9059 States= 1.66e+08 Transitions= 2.72e+09 Memory=  7669.260        t= 2.51e+03 R=   7e+04
-Depth=    9059 States= 1.67e+08 Transitions= 2.73e+09 Memory=  7696.799        t= 2.52e+03 R=   7e+04
-Depth=    9059 States= 1.68e+08 Transitions= 2.75e+09 Memory=  7723.850        t= 2.54e+03 R=   7e+04
-Depth=    9059 States= 1.69e+08 Transitions= 2.77e+09 Memory=  7757.053        t= 2.55e+03 R=   7e+04
-Depth=    9059 States=  1.7e+08 Transitions= 2.78e+09 Memory=  7782.346        t= 2.57e+03 R=   7e+04
-Depth=    9059 States= 1.71e+08 Transitions=  2.8e+09 Memory=  7808.908        t= 2.58e+03 R=   7e+04
-Depth=    9059 States= 1.72e+08 Transitions= 2.81e+09 Memory=  7838.791        t= 2.59e+03 R=   7e+04
-Depth=    9059 States= 1.73e+08 Transitions= 2.83e+09 Memory=  7867.893        t= 2.61e+03 R=   7e+04
-Depth=    9059 States= 1.74e+08 Transitions= 2.85e+09 Memory=  7892.990        t= 2.62e+03 R=   7e+04
-Depth=    9059 States= 1.75e+08 Transitions= 2.86e+09 Memory=  7922.190        t= 2.64e+03 R=   7e+04
-Depth=    9059 States= 1.76e+08 Transitions= 2.89e+09 Memory=  7945.627        t= 2.66e+03 R=   7e+04
-Depth=    9059 States= 1.77e+08 Transitions=  2.9e+09 Memory=  7973.947        t= 2.68e+03 R=   7e+04
-Depth=    9059 States= 1.78e+08 Transitions= 2.93e+09 Memory=  7997.483        t= 2.7e+03 R=   7e+04
-Depth=    9059 States= 1.79e+08 Transitions= 2.94e+09 Memory=  8020.920        t= 2.71e+03 R=   7e+04
-Depth=    9059 States=  1.8e+08 Transitions= 2.96e+09 Memory=  8050.412        t= 2.73e+03 R=   7e+04
-Depth=    9059 States= 1.81e+08 Transitions= 2.97e+09 Memory=  8085.666        t= 2.74e+03 R=   7e+04
-Depth=    9059 States= 1.82e+08 Transitions= 2.98e+09 Memory=  8114.279        t= 2.75e+03 R=   7e+04
-Depth=    9059 States= 1.83e+08 Transitions=    3e+09 Memory=  8137.131        t= 2.77e+03 R=   7e+04
-Depth=    9059 States= 1.84e+08 Transitions= 3.02e+09 Memory=  8165.451        t= 2.79e+03 R=   7e+04
-Depth=    9059 States= 1.85e+08 Transitions= 3.04e+09 Memory=  8193.186        t= 2.8e+03 R=   7e+04
-Depth=    9059 States= 1.86e+08 Transitions= 3.06e+09 Memory=  8218.674        t= 2.82e+03 R=   7e+04
-Depth=    9059 States= 1.87e+08 Transitions= 3.08e+09 Memory=  8255.100        t= 2.83e+03 R=   7e+04
-Depth=    9059 States= 1.88e+08 Transitions= 3.09e+09 Memory=  8279.221        t= 2.85e+03 R=   7e+04
-Depth=    9059 States= 1.89e+08 Transitions= 3.12e+09 Memory=  8298.264        t= 2.87e+03 R=   7e+04
-Depth=    9059 States=  1.9e+08 Transitions= 3.14e+09 Memory=  8325.998        t= 2.89e+03 R=   7e+04
-Depth=    9059 States= 1.91e+08 Transitions= 3.16e+09 Memory=  8349.338        t= 2.91e+03 R=   7e+04
-Depth=    9059 States= 1.92e+08 Transitions= 3.17e+09 Memory=  8379.221        t= 2.92e+03 R=   7e+04
-Depth=    9059 States= 1.93e+08 Transitions= 3.19e+09 Memory=  8403.440        t= 2.94e+03 R=   7e+04
-Depth=    9059 States= 1.94e+08 Transitions= 3.21e+09 Memory=  8430.100        t= 2.96e+03 R=   7e+04
-Depth=    9059 States= 1.95e+08 Transitions= 3.23e+09 Memory=  8455.295        t= 2.97e+03 R=   7e+04
-Depth=    9059 States= 1.96e+08 Transitions= 3.25e+09 Memory=  8482.932        t= 2.99e+03 R=   7e+04
-Depth=    9059 States= 1.97e+08 Transitions= 3.26e+09 Memory=  8515.256        t=  3e+03 R=   7e+04
-Depth=    9059 States= 1.98e+08 Transitions= 3.27e+09 Memory=  8542.502        t= 3.01e+03 R=   7e+04
-Depth=    9059 States= 1.99e+08 Transitions= 3.29e+09 Memory=  8569.260        t= 3.02e+03 R=   7e+04
-Depth=    9059 States=    2e+08 Transitions=  3.3e+09 Memory=  8598.459        t= 3.04e+03 R=   7e+04
-Depth=    9059 States= 2.01e+08 Transitions= 3.32e+09 Memory=  8624.631        t= 3.05e+03 R=   7e+04
-Depth=    9059 States= 2.02e+08 Transitions= 3.33e+09 Memory=  8652.365        t= 3.07e+03 R=   7e+04
-Depth=    9059 States= 2.03e+08 Transitions= 3.35e+09 Memory=  8678.440        t= 3.08e+03 R=   7e+04
-Depth=    9059 States= 2.04e+08 Transitions= 3.36e+09 Memory=  8706.369        t= 3.1e+03 R=   7e+04
-Depth=    9059 States= 2.05e+08 Transitions= 3.38e+09 Memory=  8732.932        t= 3.11e+03 R=   7e+04
-Depth=    9059 States= 2.06e+08 Transitions= 3.39e+09 Memory=  8760.276        t= 3.12e+03 R=   7e+04
-Depth=    9059 States= 2.07e+08 Transitions= 3.41e+09 Memory=  8789.475        t= 3.14e+03 R=   7e+04
-Depth=    9059 States= 2.08e+08 Transitions= 3.42e+09 Memory=  8819.455        t= 3.15e+03 R=   7e+04
-Depth=    9059 States= 2.09e+08 Transitions= 3.43e+09 Memory=  8851.779        t= 3.16e+03 R=   7e+04
-Depth=    9059 States=  2.1e+08 Transitions= 3.45e+09 Memory=  8880.100        t= 3.17e+03 R=   7e+04
-Depth=    9059 States= 2.11e+08 Transitions= 3.46e+09 Memory=  8907.053        t= 3.19e+03 R=   7e+04
-Depth=    9059 States= 2.12e+08 Transitions= 3.48e+09 Memory=  8932.639        t= 3.2e+03 R=   7e+04
-Depth=    9059 States= 2.13e+08 Transitions= 3.49e+09 Memory=  8964.572        t= 3.22e+03 R=   7e+04
-Depth=    9059 States= 2.14e+08 Transitions= 3.51e+09 Memory=  8991.526        t= 3.23e+03 R=   7e+04
-Depth=    9059 States= 2.15e+08 Transitions= 3.52e+09 Memory=  9018.088        t= 3.24e+03 R=   7e+04
-Depth=    9059 States= 2.16e+08 Transitions= 3.54e+09 Memory=  9039.865        t= 3.26e+03 R=   7e+04
-Depth=    9059 States= 2.17e+08 Transitions= 3.56e+09 Memory=  9067.600        t= 3.28e+03 R=   7e+04
-Depth=    9059 States= 2.18e+08 Transitions= 3.58e+09 Memory=  9094.260        t= 3.3e+03 R=   7e+04
-Depth=    9059 States= 2.19e+08 Transitions=  3.6e+09 Memory=  9122.483        t= 3.31e+03 R=   7e+04
-Depth=    9059 States=  2.2e+08 Transitions= 3.61e+09 Memory=  9153.635        t= 3.32e+03 R=   7e+04
-Depth=    9059 States= 2.21e+08 Transitions= 3.63e+09 Memory=  9181.272        t= 3.34e+03 R=   7e+04
-Depth=    9059 States= 2.22e+08 Transitions= 3.65e+09 Memory=  9207.639        t= 3.36e+03 R=   7e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 9059, errors: 0
- 88961904 states, stored (2.22145e+08 visited)
-3.4291111e+09 states, matched
-3.6512561e+09 transitions (= visited+matched)
-1.2885947e+10 atomic steps
-hash conflicts: 7.2188776e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 7805.343      equivalent memory usage for states (stored*(State-vector + overhead))
- 6706.219      actual memory usage for states (compression: 85.92%)
-               state-vector as stored = 51 byte + 28 byte overhead
- 2048.000      memory used for hash table (-w28)
-  457.764      memory used for DFS stack (-m10000000)
-    1.122      memory lost to fragmentation
- 9210.861      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 3.36e+03 seconds
-pan: rate 66138.803 states/second
-pan: avg transition delay 9.1989e-07 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_reader.spin.input b/formal-model/urcu/result-signal-over-reader/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 91b1126..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define READER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_reader.spin.input.trail b/formal-model/urcu/result-signal-over-reader/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index 7c42af1..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4401
-2:4:4353
-3:4:4356
-4:4:4356
-5:4:4359
-6:4:4367
-7:4:4367
-8:4:4370
-9:4:4376
-10:4:4380
-11:4:4380
-12:4:4383
-13:4:4391
-14:4:4395
-15:4:4396
-16:0:4401
-17:4:4398
-18:0:4401
-19:3:2479
-20:0:4401
-21:3:2485
-22:0:4401
-23:3:2486
-24:0:4401
-25:3:2487
-26:3:2491
-27:3:2492
-28:3:2500
-29:3:2501
-30:3:2505
-31:3:2506
-32:3:2514
-33:3:2519
-34:3:2523
-35:3:2524
-36:3:2531
-37:3:2532
-38:3:2543
-39:3:2544
-40:3:2545
-41:3:2556
-42:3:2561
-43:3:2562
-44:0:4401
-45:3:2574
-46:0:4401
-47:3:2576
-48:3:2577
-49:0:4401
-50:3:2581
-51:3:2585
-52:3:2586
-53:3:2594
-54:3:2595
-55:3:2599
-56:3:2600
-57:3:2608
-58:3:2613
-59:3:2614
-60:3:2625
-61:3:2626
-62:3:2637
-63:3:2638
-64:3:2639
-65:3:2650
-66:3:2655
-67:3:2656
-68:0:4401
-69:3:2668
-70:0:4401
-71:3:2670
-72:0:4401
-73:3:2671
-74:0:4401
-75:3:2681
-76:0:4401
-77:3:2682
-78:0:4401
-79:3:2686
-80:3:2687
-81:3:2691
-82:3:2695
-83:3:2696
-84:3:2700
-85:3:2708
-86:3:2709
-87:3:2714
-88:3:2721
-89:3:2722
-90:3:2729
-91:3:2734
-92:0:4401
-93:3:2745
-94:0:4401
-95:3:2749
-96:3:2750
-97:3:2754
-98:3:2758
-99:3:2759
-100:3:2763
-101:3:2771
-102:3:2772
-103:3:2777
-104:3:2784
-105:3:2785
-106:3:2792
-107:3:2797
-108:0:4401
-109:3:2808
-110:0:4401
-111:3:2816
-112:3:2817
-113:3:2821
-114:3:2825
-115:3:2826
-116:3:2830
-117:3:2838
-118:3:2839
-119:3:2844
-120:3:2851
-121:3:2852
-122:3:2859
-123:3:2864
-124:0:4401
-125:3:2879
-126:0:4401
-127:3:2881
-128:0:4401
-129:3:2882
-130:3:2886
-131:3:2887
-132:3:2895
-133:3:2896
-134:3:2900
-135:3:2901
-136:3:2909
-137:3:2914
-138:3:2918
-139:3:2919
-140:3:2926
-141:3:2927
-142:3:2938
-143:3:2939
-144:3:2940
-145:3:2951
-146:3:2956
-147:3:2957
-148:0:4401
-149:3:2969
-150:0:4401
-151:3:2971
-152:0:4401
-153:3:2974
-154:3:2975
-155:3:2987
-156:3:2988
-157:3:2992
-158:3:2993
-159:3:3001
-160:3:3006
-161:3:3010
-162:3:3011
-163:3:3018
-164:3:3019
-165:3:3030
-166:3:3031
-167:3:3032
-168:3:3043
-169:3:3048
-170:3:3049
-171:0:4401
-172:3:3061
-173:0:4401
-174:3:3063
-175:0:4401
-176:3:3064
-177:0:4401
-178:3:3065
-179:0:4401
-180:3:3066
-181:0:4401
-182:3:3067
-183:3:3071
-184:3:3072
-185:3:3080
-186:3:3081
-187:3:3085
-188:3:3086
-189:3:3094
-190:3:3099
-191:3:3103
-192:3:3104
-193:3:3111
-194:3:3112
-195:3:3123
-196:3:3124
-197:3:3125
-198:3:3136
-199:3:3141
-200:3:3142
-201:0:4401
-202:3:3154
-203:0:4401
-204:3:3356
-205:0:4401
-206:3:3454
-207:0:4401
-208:3:3455
-209:0:4401
-210:3:3459
-211:0:4401
-212:3:3465
-213:3:3469
-214:3:3470
-215:3:3478
-216:3:3479
-217:3:3483
-218:3:3484
-219:3:3492
-220:3:3497
-221:3:3501
-222:3:3502
-223:3:3509
-224:3:3510
-225:3:3521
-226:3:3522
-227:3:3523
-228:3:3534
-229:3:3539
-230:3:3540
-231:0:4401
-232:3:3552
-233:0:4401
-234:3:3554
-235:0:4401
-236:3:3555
-237:3:3559
-238:3:3560
-239:3:3568
-240:3:3569
-241:3:3573
-242:3:3574
-243:3:3582
-244:3:3587
-245:3:3591
-246:3:3592
-247:3:3599
-248:3:3600
-249:3:3611
-250:3:3612
-251:3:3613
-252:3:3624
-253:3:3629
-254:3:3630
-255:0:4401
-256:3:3642
-257:0:4401
-258:3:3644
-259:0:4401
-260:3:3647
-261:3:3648
-262:3:3660
-263:3:3661
-264:3:3665
-265:3:3666
-266:3:3674
-267:3:3679
-268:3:3683
-269:3:3684
-270:3:3691
-271:3:3692
-272:3:3703
-273:3:3704
-274:3:3705
-275:3:3716
-276:3:3721
-277:3:3722
-278:0:4401
-279:3:3734
-280:0:4401
-281:3:3736
-282:0:4401
-283:3:3737
-284:0:4401
-285:3:3738
-286:0:4401
-287:3:3739
-288:0:4401
-289:3:3740
-290:3:3744
-291:3:3745
-292:3:3753
-293:3:3754
-294:3:3758
-295:3:3759
-296:3:3767
-297:3:3772
-298:3:3776
-299:3:3777
-300:3:3784
-301:3:3785
-302:3:3796
-303:3:3797
-304:3:3798
-305:3:3809
-306:3:3814
-307:3:3815
-308:0:4401
-309:3:3827
-310:0:4401
-311:3:4029
-312:0:4401
-313:3:4127
-314:0:4401
-315:3:4128
-316:0:4401
-317:3:4132
-318:0:4401
-319:3:4138
-320:0:4401
-321:3:4142
-322:3:4143
-323:3:4147
-324:3:4151
-325:3:4152
-326:3:4156
-327:3:4164
-328:3:4165
-329:3:4170
-330:3:4177
-331:3:4178
-332:3:4185
-333:3:4190
-334:0:4401
-335:3:4201
-336:0:4401
-337:3:4205
-338:3:4206
-339:3:4210
-340:3:4214
-341:3:4215
-342:3:4219
-343:3:4227
-344:3:4228
-345:3:4233
-346:3:4240
-347:3:4241
-348:3:4248
-349:3:4253
-350:0:4401
-351:3:4264
-352:0:4401
-353:3:4272
-354:3:4273
-355:3:4277
-356:3:4281
-357:3:4282
-358:3:4286
-359:3:4294
-360:3:4295
-361:3:4300
-362:3:4307
-363:3:4308
-364:3:4315
-365:3:4320
-366:0:4401
-367:3:4335
-368:0:4401
-369:3:4337
-370:0:4401
-371:3:4338
-372:0:4401
-373:3:2486
-374:0:4401
-375:3:2487
-376:3:2491
-377:3:2492
-378:3:2500
-379:3:2501
-380:3:2505
-381:3:2506
-382:3:2514
-383:3:2519
-384:3:2523
-385:3:2524
-386:3:2531
-387:3:2532
-388:3:2543
-389:3:2544
-390:3:2545
-391:3:2556
-392:3:2561
-393:3:2562
-394:0:4401
-395:3:2574
-396:0:4401
-397:3:2576
-398:3:2577
-399:0:4401
-400:3:2581
-401:3:2585
-402:3:2586
-403:3:2594
-404:3:2595
-405:3:2599
-406:3:2600
-407:3:2608
-408:3:2613
-409:3:2614
-410:3:2625
-411:3:2626
-412:3:2637
-413:3:2638
-414:3:2639
-415:3:2650
-416:3:2655
-417:3:2656
-418:0:4401
-419:3:2668
-420:0:4401
-421:3:2670
-422:0:4401
-423:3:2671
-424:0:4401
-425:3:2681
-426:0:4401
-427:3:2682
-428:0:4401
-429:3:2686
-430:3:2687
-431:3:2691
-432:3:2695
-433:3:2696
-434:3:2700
-435:3:2708
-436:3:2709
-437:3:2714
-438:3:2721
-439:3:2722
-440:3:2729
-441:3:2734
-442:0:4401
-443:3:2745
-444:0:4401
-445:3:2749
-446:3:2750
-447:3:2754
-448:3:2758
-449:3:2759
-450:3:2763
-451:3:2771
-452:3:2772
-453:3:2777
-454:3:2784
-455:3:2785
-456:3:2792
-457:3:2797
-458:0:4401
-459:3:2808
-460:0:4401
-461:3:2816
-462:3:2817
-463:3:2821
-464:3:2825
-465:3:2826
-466:3:2830
-467:3:2838
-468:3:2839
-469:3:2844
-470:3:2851
-471:3:2852
-472:3:2859
-473:3:2864
-474:0:4401
-475:3:2879
-476:0:4401
-477:3:2881
-478:0:4401
-479:3:2882
-480:3:2886
-481:3:2887
-482:3:2895
-483:3:2896
-484:3:2900
-485:3:2901
-486:3:2909
-487:3:2914
-488:3:2918
-489:3:2919
-490:3:2926
-491:3:2927
-492:3:2938
-493:3:2939
-494:3:2940
-495:3:2951
-496:3:2956
-497:3:2957
-498:0:4401
-499:3:2969
-500:0:4401
-501:3:2971
-502:0:4401
-503:3:2974
-504:3:2975
-505:3:2987
-506:3:2988
-507:3:2992
-508:3:2993
-509:3:3001
-510:3:3006
-511:3:3010
-512:3:3011
-513:3:3018
-514:3:3019
-515:3:3030
-516:3:3031
-517:3:3032
-518:3:3043
-519:3:3048
-520:3:3049
-521:0:4401
-522:3:3061
-523:0:4401
-524:3:3063
-525:0:4401
-526:3:3064
-527:0:4401
-528:3:3065
-529:0:4401
-530:3:3066
-531:0:4401
-532:3:3067
-533:3:3071
-534:3:3072
-535:3:3080
-536:3:3081
-537:3:3085
-538:3:3086
-539:3:3094
-540:3:3099
-541:3:3103
-542:3:3104
-543:3:3111
-544:3:3112
-545:3:3123
-546:3:3124
-547:3:3125
-548:3:3136
-549:3:3141
-550:3:3142
-551:0:4401
-552:3:3154
-553:0:4401
-554:3:3356
-555:0:4401
-556:3:3454
-557:0:4401
-558:3:3455
-559:0:4401
-560:3:3459
-561:0:4401
-562:3:3465
-563:3:3469
-564:3:3470
-565:3:3478
-566:3:3479
-567:3:3483
-568:3:3484
-569:3:3492
-570:3:3497
-571:3:3501
-572:3:3502
-573:3:3509
-574:3:3510
-575:3:3521
-576:3:3522
-577:3:3523
-578:3:3534
-579:3:3539
-580:3:3540
-581:0:4401
-582:3:3552
-583:0:4401
-584:3:3554
-585:0:4401
-586:3:3555
-587:3:3559
-588:3:3560
-589:3:3568
-590:3:3569
-591:3:3573
-592:3:3574
-593:3:3582
-594:3:3587
-595:3:3591
-596:3:3592
-597:3:3599
-598:3:3600
-599:3:3611
-600:3:3612
-601:3:3613
-602:3:3624
-603:3:3629
-604:3:3630
-605:0:4401
-606:3:3642
-607:0:4401
-608:3:3644
-609:0:4401
-610:3:3647
-611:3:3648
-612:3:3660
-613:3:3661
-614:3:3665
-615:3:3666
-616:3:3674
-617:3:3679
-618:3:3683
-619:3:3684
-620:3:3691
-621:3:3692
-622:3:3703
-623:3:3704
-624:3:3705
-625:3:3716
-626:3:3721
-627:3:3722
-628:0:4401
-629:3:3734
-630:0:4401
-631:3:3736
-632:0:4401
-633:3:3737
-634:0:4401
-635:3:3738
-636:0:4401
-637:3:3739
-638:0:4401
-639:3:3740
-640:3:3744
-641:3:3745
-642:3:3753
-643:3:3754
-644:3:3758
-645:3:3759
-646:3:3767
-647:3:3772
-648:3:3776
-649:3:3777
-650:3:3784
-651:3:3785
-652:3:3796
-653:3:3797
-654:3:3798
-655:3:3809
-656:3:3814
-657:3:3815
-658:0:4401
-659:3:3827
-660:0:4401
-661:3:4029
-662:0:4401
-663:3:4127
-664:0:4401
-665:3:4128
-666:0:4401
-667:3:4132
-668:0:4401
-669:3:4138
-670:0:4401
-671:3:4142
-672:3:4143
-673:3:4147
-674:3:4151
-675:3:4152
-676:3:4156
-677:3:4164
-678:3:4165
-679:3:4170
-680:3:4177
-681:3:4178
-682:3:4185
-683:3:4190
-684:0:4401
-685:3:4201
-686:0:4401
-687:3:4205
-688:3:4206
-689:3:4210
-690:3:4214
-691:3:4215
-692:3:4219
-693:3:4227
-694:3:4228
-695:3:4233
-696:3:4240
-697:3:4241
-698:3:4248
-699:3:4253
-700:0:4401
-701:3:4264
-702:0:4401
-703:3:4272
-704:3:4273
-705:3:4277
-706:3:4281
-707:3:4282
-708:3:4286
-709:3:4294
-710:3:4295
-711:3:4300
-712:3:4307
-713:3:4308
-714:3:4315
-715:3:4320
-716:0:4401
-717:3:4335
-718:0:4401
-719:3:4337
-720:0:4401
-721:3:4338
-722:0:4401
-723:3:2486
-724:0:4401
-725:3:2487
-726:3:2491
-727:3:2492
-728:3:2500
-729:3:2501
-730:3:2505
-731:3:2506
-732:3:2514
-733:3:2519
-734:3:2523
-735:3:2524
-736:3:2531
-737:3:2532
-738:3:2543
-739:3:2544
-740:3:2545
-741:3:2556
-742:3:2561
-743:3:2562
-744:0:4401
-745:3:2574
-746:0:4401
-747:3:2576
-748:3:2577
-749:0:4401
-750:3:2581
-751:3:2585
-752:3:2586
-753:3:2594
-754:3:2595
-755:3:2599
-756:3:2600
-757:3:2608
-758:3:2613
-759:3:2614
-760:3:2625
-761:3:2626
-762:3:2637
-763:3:2638
-764:3:2639
-765:3:2650
-766:3:2655
-767:3:2656
-768:0:4401
-769:3:2668
-770:0:4401
-771:3:2670
-772:0:4401
-773:3:2671
-774:0:4401
-775:3:2681
-776:0:4401
-777:3:2682
-778:0:4401
-779:3:2686
-780:3:2687
-781:3:2691
-782:3:2695
-783:3:2696
-784:3:2700
-785:3:2708
-786:3:2709
-787:3:2714
-788:3:2721
-789:3:2722
-790:3:2729
-791:3:2734
-792:0:4401
-793:3:2745
-794:0:4401
-795:3:2749
-796:3:2750
-797:3:2754
-798:3:2758
-799:3:2759
-800:3:2763
-801:3:2771
-802:3:2772
-803:3:2777
-804:3:2784
-805:3:2785
-806:3:2792
-807:3:2797
-808:0:4401
-809:3:2808
-810:0:4401
-811:3:2816
-812:3:2817
-813:3:2821
-814:3:2825
-815:3:2826
-816:3:2830
-817:3:2838
-818:3:2839
-819:3:2844
-820:3:2851
-821:3:2852
-822:3:2859
-823:3:2864
-824:0:4401
-825:3:2879
-826:0:4401
-827:3:2881
-828:0:4401
-829:3:2882
-830:3:2886
-831:3:2887
-832:3:2895
-833:3:2896
-834:3:2900
-835:3:2901
-836:3:2909
-837:3:2914
-838:3:2918
-839:3:2919
-840:3:2926
-841:3:2927
-842:3:2938
-843:3:2939
-844:3:2940
-845:3:2951
-846:3:2956
-847:3:2957
-848:0:4401
-849:3:2969
-850:0:4401
-851:3:2971
-852:0:4401
-853:3:2974
-854:3:2975
-855:3:2987
-856:3:2988
-857:3:2992
-858:3:2993
-859:3:3001
-860:3:3006
-861:3:3010
-862:3:3011
-863:3:3018
-864:3:3019
-865:3:3030
-866:3:3031
-867:3:3032
-868:3:3043
-869:3:3048
-870:3:3049
-871:0:4401
-872:3:3061
-873:0:4401
-874:3:3063
-875:0:4401
-876:3:3064
-877:0:4401
-878:3:3065
-879:0:4401
-880:3:3066
-881:0:4401
-882:3:3067
-883:3:3071
-884:3:3072
-885:3:3080
-886:3:3081
-887:3:3085
-888:3:3086
-889:3:3094
-890:3:3099
-891:3:3103
-892:3:3104
-893:3:3111
-894:3:3112
-895:3:3123
-896:3:3124
-897:3:3125
-898:3:3136
-899:3:3141
-900:3:3142
-901:0:4401
-902:3:3154
-903:0:4401
-904:3:3356
-905:0:4401
-906:3:3454
-907:0:4401
-908:3:3455
-909:0:4401
-910:3:3459
-911:0:4401
-912:3:3465
-913:3:3469
-914:3:3470
-915:3:3478
-916:3:3479
-917:3:3483
-918:3:3484
-919:3:3492
-920:3:3497
-921:3:3501
-922:3:3502
-923:3:3509
-924:3:3510
-925:3:3521
-926:3:3522
-927:3:3523
-928:3:3534
-929:3:3539
-930:3:3540
-931:0:4401
-932:3:3552
-933:0:4401
-934:3:3554
-935:0:4401
-936:3:3555
-937:3:3559
-938:3:3560
-939:3:3568
-940:3:3569
-941:3:3573
-942:3:3574
-943:3:3582
-944:3:3587
-945:3:3591
-946:3:3592
-947:3:3599
-948:3:3600
-949:3:3611
-950:3:3612
-951:3:3613
-952:3:3624
-953:3:3629
-954:3:3630
-955:0:4401
-956:3:3642
-957:0:4401
-958:3:3644
-959:0:4401
-960:3:3647
-961:3:3648
-962:3:3660
-963:3:3661
-964:3:3665
-965:3:3666
-966:3:3674
-967:3:3679
-968:3:3683
-969:3:3684
-970:3:3691
-971:3:3692
-972:3:3703
-973:3:3704
-974:3:3705
-975:3:3716
-976:3:3721
-977:3:3722
-978:0:4401
-979:3:3734
-980:0:4401
-981:3:3736
-982:0:4401
-983:3:3737
-984:0:4401
-985:3:3738
-986:0:4401
-987:3:3739
-988:0:4401
-989:3:3740
-990:3:3744
-991:3:3745
-992:3:3753
-993:3:3754
-994:3:3758
-995:3:3759
-996:3:3767
-997:3:3772
-998:3:3776
-999:3:3777
-1000:3:3784
-1001:3:3785
-1002:3:3796
-1003:3:3797
-1004:3:3798
-1005:3:3809
-1006:3:3814
-1007:3:3815
-1008:0:4401
-1009:3:3827
-1010:0:4401
-1011:3:4029
-1012:0:4401
-1013:3:4127
-1014:0:4401
-1015:3:4128
-1016:0:4401
-1017:3:4132
-1018:0:4401
-1019:3:4138
-1020:0:4401
-1021:3:4142
-1022:3:4143
-1023:3:4147
-1024:3:4151
-1025:3:4152
-1026:3:4156
-1027:3:4164
-1028:3:4165
-1029:3:4170
-1030:3:4177
-1031:3:4178
-1032:3:4185
-1033:3:4190
-1034:0:4401
-1035:3:4201
-1036:0:4401
-1037:3:4205
-1038:3:4206
-1039:3:4210
-1040:3:4214
-1041:3:4215
-1042:3:4219
-1043:3:4227
-1044:3:4228
-1045:3:4233
-1046:3:4240
-1047:3:4241
-1048:3:4248
-1049:3:4253
-1050:0:4401
-1051:3:4264
-1052:0:4401
-1053:3:4272
-1054:3:4273
-1055:3:4277
-1056:3:4281
-1057:3:4282
-1058:3:4286
-1059:3:4294
-1060:3:4295
-1061:3:4300
-1062:3:4307
-1063:3:4308
-1064:3:4315
-1065:3:4320
-1066:0:4401
-1067:3:4335
-1068:0:4401
-1069:3:4337
-1070:0:4401
-1071:3:4338
-1072:0:4401
-1073:3:4341
-1074:0:4401
-1075:3:4346
-1076:0:4401
-1077:2:1236
-1078:0:4401
-1079:3:4347
-1080:0:4401
-1081:2:1242
-1082:0:4401
-1083:3:4346
-1084:0:4401
-1085:2:1243
-1086:0:4401
-1087:3:4347
-1088:0:4401
-1089:2:1244
-1090:0:4401
-1091:3:4346
-1092:0:4401
-1093:2:1245
-1094:0:4401
-1095:3:4347
-1096:0:4401
-1097:1:2
-1098:0:4401
-1099:3:4346
-1100:0:4401
-1101:2:1246
-1102:0:4401
-1103:3:4347
-1104:0:4401
-1105:1:8
-1106:0:4401
-1107:3:4346
-1108:0:4401
-1109:2:1245
-1110:0:4401
-1111:3:4347
-1112:0:4401
-1113:1:9
-1114:0:4401
-1115:3:4346
-1116:0:4401
-1117:2:1246
-1118:0:4401
-1119:3:4347
-1120:0:4401
-1121:1:10
-1122:0:4401
-1123:3:4346
-1124:0:4401
-1125:2:1245
-1126:0:4401
-1127:3:4347
-1128:0:4401
-1129:1:11
-1130:0:4401
-1131:3:4346
-1132:0:4401
-1133:2:1246
-1134:0:4401
-1135:3:4347
-1136:0:4401
-1137:1:14
-1138:0:4401
-1139:3:4346
-1140:0:4401
-1141:2:1245
-1142:0:4401
-1143:3:4347
-1144:0:4401
-1145:1:15
-1146:0:4401
-1147:3:4346
-1148:0:4401
-1149:2:1246
-1150:0:4401
-1151:3:4347
-1152:0:4401
-1153:1:16
-1154:1:20
-1155:1:21
-1156:1:29
-1157:1:30
-1158:1:34
-1159:1:35
-1160:1:43
-1161:1:48
-1162:1:52
-1163:1:53
-1164:1:60
-1165:1:61
-1166:1:72
-1167:1:73
-1168:1:74
-1169:1:85
-1170:1:90
-1171:1:91
-1172:0:4401
-1173:3:4346
-1174:0:4401
-1175:2:1245
-1176:0:4401
-1177:3:4347
-1178:0:4401
-1179:1:103
-1180:0:4401
-1181:3:4346
-1182:0:4401
-1183:2:1246
-1184:0:4401
-1185:3:4347
-1186:0:4401
-1187:2:1247
-1188:0:4401
-1189:3:4346
-1190:0:4401
-1191:2:1253
-1192:0:4401
-1193:3:4347
-1194:0:4401
-1195:2:1254
-1196:0:4399
-1197:3:4346
-1198:0:4405
-1199:3:4347
-1200:0:4405
-1201:2:1257
-1202:0:4405
-1203:3:4346
-1204:0:4405
-1205:2:1258
-1206:0:4405
-1207:3:4347
-1208:0:4405
-1209:2:1259
-1210:2:1263
-1211:2:1264
-1212:2:1272
-1213:2:1273
-1214:2:1277
-1215:2:1278
-1216:2:1286
-1217:2:1291
-1218:2:1295
-1219:2:1296
-1220:2:1303
-1221:2:1304
-1222:2:1315
-1223:2:1316
-1224:2:1317
-1225:2:1328
-1226:2:1333
-1227:2:1334
-1228:0:4405
-1229:3:4346
-1230:0:4405
-1231:2:1346
-1232:0:4405
-1233:3:4347
-1234:0:4405
-1235:2:1347
-1236:0:4405
-1237:3:4346
-1238:0:4405
-1239:1:104
--1:-1:-1
-1240:0:4405
-1241:3:4347
-1242:0:4405
-1243:3:4346
-1244:0:4405
-1245:2:1348
-1246:0:4405
-1247:3:4347
-1248:0:4405
-1249:2:1347
-1250:0:4405
-1251:3:4346
-1252:0:4405
-1253:1:105
-1254:0:4405
-1255:3:4347
-1256:0:4405
-1257:3:4346
-1258:0:4405
-1259:2:1348
-1260:0:4405
-1261:3:4347
-1262:0:4405
-1263:2:1347
-1264:0:4405
-1265:3:4346
-1266:0:4405
-1267:1:104
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_writer.define b/formal-model/urcu/result-signal-over-reader/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_writer.log b/formal-model/urcu/result-signal-over-reader/urcu_progress_writer.log
deleted file mode 100644 (file)
index fc83245..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 1194: Claim reached state 9 (line 748)
-Depth=    3253 States=    1e+06 Transitions= 1.06e+07 Memory=   484.416        t=   9.64 R=   1e+05
-Depth=    3253 States=    2e+06 Transitions= 2.04e+07 Memory=   501.311        t=   18.6 R=   1e+05
-Depth=    3253 States=    3e+06 Transitions= 3.44e+07 Memory=   516.252        t=   31.6 R=   9e+04
-pan: resizing hashtable to -w22..  done
-Depth=    7995 States=    4e+06 Transitions= 4.66e+07 Memory=   563.486        t=   42.8 R=   9e+04
-Depth=    7995 States=    5e+06 Transitions= 6.05e+07 Memory=   580.674        t=   55.6 R=   9e+04
-Depth=    7995 States=    6e+06 Transitions= 7.12e+07 Memory=   599.229        t=   65.5 R=   9e+04
-Depth=    7995 States=    7e+06 Transitions= 8.58e+07 Memory=   613.975        t=   78.9 R=   9e+04
-Depth=    7995 States=    8e+06 Transitions= 9.62e+07 Memory=   631.846        t=   88.7 R=   9e+04
-Depth=    7995 States=    9e+06 Transitions=  1.1e+08 Memory=   646.592        t=    101 R=   9e+04
-pan: resizing hashtable to -w24..  done
-Depth=    7995 States=    1e+07 Transitions= 1.32e+08 Memory=   783.869        t=    122 R=   8e+04
-Depth=    7995 States=  1.1e+07 Transitions= 1.52e+08 Memory=   799.104        t=    140 R=   8e+04
-Depth=    7995 States=  1.2e+07 Transitions= 1.71e+08 Memory=   814.533        t=    157 R=   8e+04
-Depth=    7995 States=  1.3e+07 Transitions=  1.9e+08 Memory=   829.670        t=    174 R=   7e+04
-Depth=    7995 States=  1.4e+07 Transitions= 2.01e+08 Memory=   848.029        t=    185 R=   8e+04
-Depth=    7995 States=  1.5e+07 Transitions= 2.21e+08 Memory=   862.287        t=    203 R=   7e+04
-Depth=    7995 States=  1.6e+07 Transitions= 2.35e+08 Memory=   877.815        t=    215 R=   7e+04
-Depth=    7995 States=  1.7e+07 Transitions= 2.44e+08 Memory=   897.736        t=    223 R=   8e+04
-Depth=    7995 States=  1.8e+07 Transitions= 2.57e+08 Memory=   911.115        t=    235 R=   8e+04
-Depth=    7995 States=  1.9e+07 Transitions= 2.69e+08 Memory=   927.033        t=    246 R=   8e+04
-Depth=    8341 States=    2e+07 Transitions= 2.83e+08 Memory=   943.440        t=    259 R=   8e+04
-Depth=    8341 States=  2.1e+07 Transitions= 2.96e+08 Memory=   961.604        t=    271 R=   8e+04
-Depth=    8341 States=  2.2e+07 Transitions= 3.07e+08 Memory=   978.791        t=    281 R=   8e+04
-Depth=    8341 States=  2.3e+07 Transitions=  3.2e+08 Memory=   996.369        t=    293 R=   8e+04
-Depth=    8341 States=  2.4e+07 Transitions= 3.32e+08 Memory=  1013.264        t=    304 R=   8e+04
-Depth=    8341 States=  2.5e+07 Transitions= 3.48e+08 Memory=  1024.885        t=    319 R=   8e+04
-Depth=    8341 States=  2.6e+07 Transitions= 3.72e+08 Memory=  1038.947        t=    341 R=   8e+04
-Depth=    8341 States=  2.7e+07 Transitions= 3.91e+08 Memory=  1055.158        t=    358 R=   8e+04
-Depth=    8341 States=  2.8e+07 Transitions= 4.09e+08 Memory=  1069.904        t=    374 R=   7e+04
-Depth=    8341 States=  2.9e+07 Transitions= 4.25e+08 Memory=  1086.701        t=    389 R=   7e+04
-Depth=    8341 States=    3e+07 Transitions= 4.43e+08 Memory=  1102.131        t=    405 R=   7e+04
-Depth=    8341 States=  3.1e+07 Transitions= 4.58e+08 Memory=  1117.268        t=    419 R=   7e+04
-Depth=    8341 States=  3.2e+07 Transitions= 4.68e+08 Memory=  1136.213        t=    429 R=   7e+04
-Depth=    8341 States=  3.3e+07 Transitions=  4.8e+08 Memory=  1151.154        t=    440 R=   8e+04
-Depth=    8341 States=  3.4e+07 Transitions= 4.92e+08 Memory=  1166.779        t=    451 R=   8e+04
-pan: resizing hashtable to -w26..  done
-Depth=    8687 States=  3.5e+07 Transitions= 5.05e+08 Memory=  1679.658        t=    464 R=   8e+04
-Depth=    8687 States=  3.6e+07 Transitions= 5.18e+08 Memory=  1697.432        t=    477 R=   8e+04
-Depth=    8687 States=  3.7e+07 Transitions= 5.29e+08 Memory=  1714.326        t=    487 R=   8e+04
-Depth=    8687 States=  3.8e+07 Transitions= 5.44e+08 Memory=  1730.244        t=    500 R=   8e+04
-Depth=    8687 States=  3.9e+07 Transitions= 5.55e+08 Memory=  1747.920        t=    511 R=   8e+04
-Depth=    8687 States=    4e+07 Transitions= 5.69e+08 Memory=  1761.885        t=    523 R=   8e+04
-Depth=    8687 States=  4.1e+07 Transitions= 5.92e+08 Memory=  1775.850        t=    544 R=   8e+04
-Depth=    8687 States=  4.2e+07 Transitions= 6.12e+08 Memory=  1790.498        t=    562 R=   7e+04
-Depth=    8687 States=  4.3e+07 Transitions= 6.29e+08 Memory=  1807.783        t=    578 R=   7e+04
-Depth=    8687 States=  4.4e+07 Transitions= 6.48e+08 Memory=  1822.432        t=    595 R=   7e+04
-Depth=    8687 States=  4.5e+07 Transitions= 6.61e+08 Memory=  1838.838        t=    606 R=   7e+04
-Depth=    8687 States=  4.6e+07 Transitions= 6.81e+08 Memory=  1853.291        t=    625 R=   7e+04
-Depth=    8687 States=  4.7e+07 Transitions= 6.93e+08 Memory=  1870.772        t=    635 R=   7e+04
-Depth=    8687 States=  4.8e+07 Transitions= 7.02e+08 Memory=  1889.912        t=    644 R=   7e+04
-Depth=    8687 States=  4.9e+07 Transitions= 7.15e+08 Memory=  1902.998        t=    656 R=   7e+04
-Depth=    8687 States=    5e+07 Transitions= 7.27e+08 Memory=  1919.600        t=    667 R=   7e+04
-Depth=    9033 States=  5.1e+07 Transitions= 7.42e+08 Memory=  1935.518        t=    681 R=   7e+04
-Depth=    9033 States=  5.2e+07 Transitions= 7.53e+08 Memory=  1954.170        t=    691 R=   8e+04
-Depth=    9033 States=  5.3e+07 Transitions= 7.66e+08 Memory=  1969.990        t=    703 R=   8e+04
-Depth=    9033 States=  5.4e+07 Transitions= 7.77e+08 Memory=  1988.545        t=    713 R=   8e+04
-Depth=    9033 States=  5.5e+07 Transitions=  7.9e+08 Memory=  2004.756        t=    725 R=   8e+04
-Depth=    9033 States=  5.6e+07 Transitions=  8.1e+08 Memory=  2016.084        t=    743 R=   8e+04
-Depth=    9033 States=  5.7e+07 Transitions= 8.32e+08 Memory=  2030.440        t=    763 R=   7e+04
-Depth=    9033 States=  5.8e+07 Transitions= 8.51e+08 Memory=  2046.260        t=    781 R=   7e+04
-Depth=    9033 States=  5.9e+07 Transitions=  8.7e+08 Memory=  2061.592        t=    797 R=   7e+04
-Depth=    9033 States=    6e+07 Transitions= 8.83e+08 Memory=  2078.779        t=    809 R=   7e+04
-Depth=    9033 States=  6.1e+07 Transitions= 9.01e+08 Memory=  2094.014        t=    826 R=   7e+04
-Depth=    9033 States=  6.2e+07 Transitions= 9.16e+08 Memory=  2108.467        t=    840 R=   7e+04
-Depth=    9033 States=  6.3e+07 Transitions= 9.26e+08 Memory=  2126.924        t=    849 R=   7e+04
-Depth=    9033 States=  6.4e+07 Transitions= 9.38e+08 Memory=  2142.158        t=    860 R=   7e+04
-Depth=    9033 States=  6.5e+07 Transitions= 9.51e+08 Memory=  2157.295        t=    871 R=   7e+04
-Depth=    9379 States=  6.6e+07 Transitions= 9.63e+08 Memory=  2173.115        t=    883 R=   7e+04
-Depth=    9379 States=  6.7e+07 Transitions= 9.77e+08 Memory=  2190.401        t=    895 R=   7e+04
-Depth=    9379 States=  6.8e+07 Transitions= 9.88e+08 Memory=  2208.955        t=    905 R=   8e+04
-Depth=    9379 States=  6.9e+07 Transitions=    1e+09 Memory=  2223.311        t=    919 R=   8e+04
-Depth=    9379 States=    7e+07 Transitions= 1.01e+09 Memory=  2242.256        t=    928 R=   8e+04
-Depth=    9379 States=  7.1e+07 Transitions= 1.03e+09 Memory=  2257.295        t=    940 R=   8e+04
-Depth=    9379 States=  7.2e+07 Transitions= 1.05e+09 Memory=  2269.307        t=    960 R=   8e+04
-Depth=    9379 States=  7.3e+07 Transitions= 1.07e+09 Memory=  2283.760        t=    979 R=   7e+04
-Depth=    9379 States=  7.4e+07 Transitions= 1.09e+09 Memory=  2299.385        t=    996 R=   7e+04
-Depth=    9379 States=  7.5e+07 Transitions= 1.11e+09 Memory=  2314.619        t= 1.01e+03 R=   7e+04
-Depth=    9379 States=  7.6e+07 Transitions= 1.12e+09 Memory=  2333.369        t= 1.02e+03 R=   7e+04
-Depth=    9379 States=  7.7e+07 Transitions= 1.14e+09 Memory=  2347.139        t= 1.04e+03 R=   7e+04
-Depth=    9379 States=  7.8e+07 Transitions= 1.15e+09 Memory=  2385.029        t= 1.06e+03 R=   7e+04
-Depth=    9379 States=  7.9e+07 Transitions= 1.17e+09 Memory=  2453.682        t= 1.07e+03 R=   7e+04
-Depth=    9379 States=    8e+07 Transitions= 1.18e+09 Memory=  2522.236        t= 1.08e+03 R=   7e+04
-Depth=    9379 States=  8.1e+07 Transitions=  1.2e+09 Memory=  2590.889        t= 1.1e+03 R=   7e+04
-Depth=    9379 States=  8.2e+07 Transitions= 1.22e+09 Memory=  2624.287        t= 1.12e+03 R=   7e+04
-Depth=    9379 States=  8.3e+07 Transitions= 1.23e+09 Memory=  2640.303        t= 1.13e+03 R=   7e+04
-Depth=    9379 States=  8.4e+07 Transitions= 1.25e+09 Memory=  2654.170        t= 1.15e+03 R=   7e+04
-Depth=    9379 States=  8.5e+07 Transitions= 1.27e+09 Memory=  2669.111        t= 1.16e+03 R=   7e+04
-Depth=    9379 States=  8.6e+07 Transitions= 1.29e+09 Memory=  2684.053        t= 1.18e+03 R=   7e+04
-Depth=    9379 States=  8.7e+07 Transitions= 1.31e+09 Memory=  2698.604        t= 1.2e+03 R=   7e+04
-Depth=    9379 States=  8.8e+07 Transitions= 1.33e+09 Memory=  2719.697        t= 1.22e+03 R=   7e+04
-Depth=    9379 States=  8.9e+07 Transitions= 1.35e+09 Memory=  2788.350        t= 1.24e+03 R=   7e+04
-Depth=    9379 States=    9e+07 Transitions= 1.37e+09 Memory=  2819.990        t= 1.26e+03 R=   7e+04
-Depth=    9379 States=  9.1e+07 Transitions= 1.39e+09 Memory=  2846.553        t= 1.27e+03 R=   7e+04
-Depth=    9379 States=  9.2e+07 Transitions=  1.4e+09 Memory=  2864.912        t= 1.28e+03 R=   7e+04
-Depth=    9379 States=  9.3e+07 Transitions= 1.41e+09 Memory=  2877.901        t= 1.3e+03 R=   7e+04
-Depth=    9379 States=  9.4e+07 Transitions= 1.44e+09 Memory=  2892.842        t= 1.31e+03 R=   7e+04
-Depth=    9379 States=  9.5e+07 Transitions= 1.45e+09 Memory=  2908.076        t= 1.33e+03 R=   7e+04
-Depth=    9379 States=  9.6e+07 Transitions= 1.47e+09 Memory=  2922.627        t= 1.35e+03 R=   7e+04
-Depth=    9379 States=  9.7e+07 Transitions= 1.49e+09 Memory=  2940.693        t= 1.36e+03 R=   7e+04
-Depth=    9379 States=  9.8e+07 Transitions= 1.51e+09 Memory=  2953.291        t= 1.38e+03 R=   7e+04
-Depth=    9379 States=  9.9e+07 Transitions= 1.53e+09 Memory=  2968.526        t= 1.4e+03 R=   7e+04
-Depth=    9379 States=    1e+08 Transitions= 1.56e+09 Memory=  2981.709        t= 1.42e+03 R=   7e+04
-Depth=    9379 States= 1.01e+08 Transitions= 1.57e+09 Memory=  2997.236        t= 1.44e+03 R=   7e+04
-Depth=    9379 States= 1.02e+08 Transitions= 1.59e+09 Memory=  3011.592        t= 1.46e+03 R=   7e+04
-Depth=    9379 States= 1.03e+08 Transitions= 1.61e+09 Memory=  3037.861        t= 1.47e+03 R=   7e+04
-Depth=    9379 States= 1.04e+08 Transitions= 1.63e+09 Memory=  3106.514        t= 1.49e+03 R=   7e+04
-Depth=    9379 States= 1.05e+08 Transitions= 1.65e+09 Memory=  3175.166        t= 1.51e+03 R=   7e+04
-Depth=    9379 States= 1.06e+08 Transitions= 1.67e+09 Memory=  3223.897        t= 1.52e+03 R=   7e+04
-Depth=    9379 States= 1.07e+08 Transitions= 1.68e+09 Memory=  3246.846        t= 1.54e+03 R=   7e+04
-Depth=    9379 States= 1.08e+08 Transitions=  1.7e+09 Memory=  3283.467        t= 1.56e+03 R=   7e+04
-Depth=    9379 States= 1.09e+08 Transitions= 1.72e+09 Memory=  3316.670        t= 1.57e+03 R=   7e+04
-Depth=    9379 States=  1.1e+08 Transitions= 1.73e+09 Memory=  3344.209        t= 1.59e+03 R=   7e+04
-Depth=    9379 States= 1.11e+08 Transitions= 1.75e+09 Memory=  3376.338        t= 1.6e+03 R=   7e+04
-Depth=    9379 States= 1.12e+08 Transitions= 1.76e+09 Memory=  3396.943        t= 1.62e+03 R=   7e+04
-Depth=    9379 States= 1.13e+08 Transitions= 1.78e+09 Memory=  3426.143        t= 1.63e+03 R=   7e+04
-Depth=    9379 States= 1.14e+08 Transitions=  1.8e+09 Memory=  3452.705        t= 1.65e+03 R=   7e+04
-Depth=    9379 States= 1.15e+08 Transitions= 1.81e+09 Memory=  3493.818        t= 1.66e+03 R=   7e+04
-Depth=    9379 States= 1.16e+08 Transitions= 1.83e+09 Memory=  3533.369        t= 1.67e+03 R=   7e+04
-Depth=    9379 States= 1.17e+08 Transitions= 1.84e+09 Memory=  3566.182        t= 1.69e+03 R=   7e+04
-Depth=    9379 States= 1.18e+08 Transitions= 1.86e+09 Memory=  3582.881        t= 1.7e+03 R=   7e+04
-Depth=    9379 States= 1.19e+08 Transitions= 1.88e+09 Memory=  3630.830        t= 1.72e+03 R=   7e+04
-Depth=    9379 States=  1.2e+08 Transitions= 1.89e+09 Memory=  3692.744        t= 1.74e+03 R=   7e+04
-Depth=    9379 States= 1.21e+08 Transitions= 1.91e+09 Memory=  3750.361        t= 1.75e+03 R=   7e+04
-Depth=    9379 States= 1.22e+08 Transitions= 1.92e+09 Memory=  3767.354        t= 1.76e+03 R=   7e+04
-Depth=    9379 States= 1.23e+08 Transitions= 1.94e+09 Memory=  3781.904        t= 1.78e+03 R=   7e+04
-Depth=    9379 States= 1.24e+08 Transitions= 1.96e+09 Memory=  3797.529        t= 1.8e+03 R=   7e+04
-Depth=    9379 States= 1.25e+08 Transitions= 1.98e+09 Memory=  3810.908        t= 1.82e+03 R=   7e+04
-Depth=    9379 States= 1.26e+08 Transitions=    2e+09 Memory=  3826.143        t= 1.83e+03 R=   7e+04
-Depth=    9379 States= 1.27e+08 Transitions= 2.02e+09 Memory=  3839.717        t= 1.86e+03 R=   7e+04
-Depth=    9379 States= 1.28e+08 Transitions= 2.04e+09 Memory=  3881.709        t= 1.87e+03 R=   7e+04
-Depth=    9379 States= 1.29e+08 Transitions= 2.06e+09 Memory=  3946.553        t= 1.89e+03 R=   7e+04
-Depth=    9379 States=  1.3e+08 Transitions= 2.08e+09 Memory=  3970.479        t= 1.91e+03 R=   7e+04
-Depth=    9379 States= 1.31e+08 Transitions= 2.09e+09 Memory=  3991.768        t= 1.92e+03 R=   7e+04
-Depth=    9379 States= 1.32e+08 Transitions=  2.1e+09 Memory=  4007.490        t= 1.93e+03 R=   7e+04
-Depth=    9379 States= 1.33e+08 Transitions= 2.13e+09 Memory=  4020.772        t= 1.95e+03 R=   7e+04
-Depth=    9379 States= 1.34e+08 Transitions= 2.14e+09 Memory=  4036.201        t= 1.97e+03 R=   7e+04
-Depth=    9379 States= 1.35e+08 Transitions= 2.16e+09 Memory=  4051.924        t= 1.98e+03 R=   7e+04
-pan: resizing hashtable to -w28..  done
-Depth=    9379 States= 1.36e+08 Transitions= 2.18e+09 Memory=  6099.924        t= 2.02e+03 R=   7e+04
-Depth=    9379 States= 1.37e+08 Transitions=  2.2e+09 Memory=  6099.924        t= 2.03e+03 R=   7e+04
-Depth=    9379 States= 1.38e+08 Transitions= 2.22e+09 Memory=  6099.924        t= 2.05e+03 R=   7e+04
-Depth=    9379 States= 1.39e+08 Transitions= 2.24e+09 Memory=  6099.924        t= 2.07e+03 R=   7e+04
-Depth=    9379 States=  1.4e+08 Transitions= 2.26e+09 Memory=  6108.518        t= 2.09e+03 R=   7e+04
-Depth=    9379 States= 1.41e+08 Transitions= 2.28e+09 Memory=  6124.729        t= 2.1e+03 R=   7e+04
-Depth=    9379 States= 1.42e+08 Transitions=  2.3e+09 Memory=  6138.889        t= 2.12e+03 R=   7e+04
-Depth=    9379 States= 1.43e+08 Transitions= 2.31e+09 Memory=  6178.928        t= 2.13e+03 R=   7e+04
-Depth=    9379 States= 1.44e+08 Transitions= 2.33e+09 Memory=  6247.483        t= 2.15e+03 R=   7e+04
-Depth=    9379 States= 1.45e+08 Transitions= 2.35e+09 Memory=  6316.135        t= 2.17e+03 R=   7e+04
-Depth=    9379 States= 1.46e+08 Transitions= 2.37e+09 Memory=  6353.440        t= 2.19e+03 R=   7e+04
-Depth=    9379 States= 1.47e+08 Transitions= 2.39e+09 Memory=  6381.662        t= 2.21e+03 R=   7e+04
-Depth=    9379 States= 1.48e+08 Transitions= 2.41e+09 Memory=  6422.190        t= 2.22e+03 R=   7e+04
-Depth=    9379 States= 1.49e+08 Transitions= 2.42e+09 Memory=  6449.143        t= 2.23e+03 R=   7e+04
-Depth=    9379 States=  1.5e+08 Transitions= 2.44e+09 Memory=  6472.580        t= 2.25e+03 R=   7e+04
-Depth=    9379 States= 1.51e+08 Transitions= 2.45e+09 Memory=  6503.733        t= 2.26e+03 R=   7e+04
-Depth=    9379 States= 1.52e+08 Transitions= 2.47e+09 Memory=  6531.369        t= 2.28e+03 R=   7e+04
-Depth=    9379 States= 1.53e+08 Transitions= 2.49e+09 Memory=  6554.123        t= 2.29e+03 R=   7e+04
-Depth=    9379 States= 1.54e+08 Transitions=  2.5e+09 Memory=  6585.373        t= 2.31e+03 R=   7e+04
-Depth=    9379 States= 1.55e+08 Transitions= 2.52e+09 Memory=  6622.776        t= 2.32e+03 R=   7e+04
-Depth=    9379 States= 1.56e+08 Transitions= 2.54e+09 Memory=  6671.213        t= 2.34e+03 R=   7e+04
-Depth=    9379 States= 1.57e+08 Transitions= 2.55e+09 Memory=  6696.115        t= 2.35e+03 R=   7e+04
-Depth=    9379 States= 1.58e+08 Transitions= 2.57e+09 Memory=  6722.776        t= 2.37e+03 R=   7e+04
-Depth=    9379 States= 1.59e+08 Transitions= 2.58e+09 Memory=  6764.572        t= 2.38e+03 R=   7e+04
-Depth=    9379 States=  1.6e+08 Transitions=  2.6e+09 Memory=  6830.490        t= 2.4e+03 R=   7e+04
-Depth=    9379 States= 1.61e+08 Transitions= 2.62e+09 Memory=  6879.026        t= 2.41e+03 R=   7e+04
-Depth=    9379 States= 1.62e+08 Transitions= 2.63e+09 Memory=  6895.432        t= 2.42e+03 R=   7e+04
-Depth=    9379 States= 1.63e+08 Transitions= 2.65e+09 Memory=  6909.787        t= 2.44e+03 R=   7e+04
-Depth=    9379 States= 1.64e+08 Transitions= 2.67e+09 Memory=  6925.217        t= 2.46e+03 R=   7e+04
-Depth=    9379 States= 1.65e+08 Transitions= 2.69e+09 Memory=  6938.986        t= 2.48e+03 R=   7e+04
-Depth=    9379 States= 1.66e+08 Transitions= 2.71e+09 Memory=  6953.537        t= 2.5e+03 R=   7e+04
-Depth=    9379 States= 1.67e+08 Transitions= 2.73e+09 Memory=  6967.893        t= 2.52e+03 R=   7e+04
-Depth=    9379 States= 1.68e+08 Transitions= 2.75e+09 Memory=  7022.190        t= 2.53e+03 R=   7e+04
-Depth=    9379 States= 1.69e+08 Transitions= 2.77e+09 Memory=  7076.779        t= 2.55e+03 R=   7e+04
-Depth=    9379 States=  1.7e+08 Transitions= 2.79e+09 Memory=  7102.365        t= 2.57e+03 R=   7e+04
-Depth=    9379 States= 1.71e+08 Transitions=  2.8e+09 Memory=  7119.162        t= 2.58e+03 R=   7e+04
-Depth=    9379 States= 1.72e+08 Transitions= 2.81e+09 Memory=  7135.178        t= 2.59e+03 R=   7e+04
-Depth=    9379 States= 1.73e+08 Transitions= 2.84e+09 Memory=  7150.022        t= 2.61e+03 R=   7e+04
-Depth=    9379 States= 1.74e+08 Transitions= 2.85e+09 Memory=  7164.475        t= 2.63e+03 R=   7e+04
-Depth=    9379 States= 1.75e+08 Transitions= 2.87e+09 Memory=  7180.295        t= 2.64e+03 R=   7e+04
-Depth=    9379 States= 1.76e+08 Transitions= 2.89e+09 Memory=  7198.264        t= 2.66e+03 R=   7e+04
-Depth=    9379 States= 1.77e+08 Transitions=  2.9e+09 Memory=  7211.447        t= 2.67e+03 R=   7e+04
-Depth=    9379 States= 1.78e+08 Transitions= 2.93e+09 Memory=  7224.338        t= 2.7e+03 R=   7e+04
-Depth=    9379 States= 1.79e+08 Transitions= 2.95e+09 Memory=  7239.084        t= 2.72e+03 R=   7e+04
-Depth=    9379 States=  1.8e+08 Transitions= 2.97e+09 Memory=  7253.342        t= 2.74e+03 R=   7e+04
-Depth=    9379 States= 1.81e+08 Transitions= 2.99e+09 Memory=  7268.283        t= 2.75e+03 R=   7e+04
-Depth=    9379 States= 1.82e+08 Transitions= 3.01e+09 Memory=  7283.615        t= 2.77e+03 R=   7e+04
-Depth=    9379 States= 1.83e+08 Transitions= 3.02e+09 Memory=  7335.276        t= 2.78e+03 R=   7e+04
-Depth=    9379 States= 1.84e+08 Transitions= 3.04e+09 Memory=  7403.928        t= 2.8e+03 R=   7e+04
-Depth=    9379 States= 1.85e+08 Transitions= 3.06e+09 Memory=  7472.580        t= 2.82e+03 R=   7e+04
-Depth=    9379 States= 1.86e+08 Transitions= 3.08e+09 Memory=  7501.877        t= 2.84e+03 R=   7e+04
-Depth=    9379 States= 1.87e+08 Transitions=  3.1e+09 Memory=  7528.147        t= 2.85e+03 R=   7e+04
-Depth=    9379 States= 1.88e+08 Transitions= 3.11e+09 Memory=  7566.135        t= 2.87e+03 R=   7e+04
-Depth=    9379 States= 1.89e+08 Transitions= 3.13e+09 Memory=  7593.479        t= 2.88e+03 R=   7e+04
-Depth=    9379 States=  1.9e+08 Transitions= 3.15e+09 Memory=  7625.119        t= 2.9e+03 R=   7e+04
-Depth=    9379 States= 1.91e+08 Transitions= 3.16e+09 Memory=  7647.483        t= 2.91e+03 R=   7e+04
-Depth=    9379 States= 1.92e+08 Transitions= 3.18e+09 Memory=  7677.951        t= 2.93e+03 R=   7e+04
-Depth=    9379 States= 1.93e+08 Transitions=  3.2e+09 Memory=  7698.947        t= 2.94e+03 R=   7e+04
-Depth=    9379 States= 1.94e+08 Transitions= 3.21e+09 Memory=  7732.443        t= 2.96e+03 R=   7e+04
-Depth=    9379 States= 1.95e+08 Transitions= 3.23e+09 Memory=  7772.092        t= 2.97e+03 R=   7e+04
-Depth=    9379 States= 1.96e+08 Transitions= 3.24e+09 Memory=  7815.451        t= 2.98e+03 R=   7e+04
-Depth=    9379 States= 1.97e+08 Transitions= 3.26e+09 Memory=  7839.865        t=  3e+03 R=   7e+04
-Depth=    9379 States= 1.98e+08 Transitions= 3.28e+09 Memory=  7869.651        t= 3.01e+03 R=   7e+04
-Depth=    9379 States= 1.99e+08 Transitions= 3.29e+09 Memory=  7921.018        t= 3.03e+03 R=   7e+04
-Depth=    9379 States=    2e+08 Transitions= 3.31e+09 Memory=  7986.740        t= 3.05e+03 R=   7e+04
-Depth=    9379 States= 2.01e+08 Transitions= 3.33e+09 Memory=  8023.752        t= 3.06e+03 R=   7e+04
-Depth=    9379 States= 2.02e+08 Transitions= 3.34e+09 Memory=  8039.768        t= 3.07e+03 R=   7e+04
-Depth=    9379 States= 2.03e+08 Transitions= 3.36e+09 Memory=  8053.830        t= 3.09e+03 R=   7e+04
-Depth=    9379 States= 2.04e+08 Transitions= 3.38e+09 Memory=  8068.772        t= 3.11e+03 R=   7e+04
-Depth=    9379 States= 2.05e+08 Transitions=  3.4e+09 Memory=  8083.127        t= 3.13e+03 R=   7e+04
-Depth=    9379 States= 2.06e+08 Transitions= 3.42e+09 Memory=  8098.068        t= 3.15e+03 R=   7e+04
-Depth=    9379 States= 2.07e+08 Transitions= 3.44e+09 Memory=  8115.744        t= 3.16e+03 R=   7e+04
-Depth=    9379 States= 2.08e+08 Transitions= 3.46e+09 Memory=  8178.537        t= 3.18e+03 R=   7e+04
-Depth=    9379 States= 2.09e+08 Transitions= 3.48e+09 Memory=  8220.627        t= 3.2e+03 R=   7e+04
-Depth=    9379 States=  2.1e+08 Transitions= 3.49e+09 Memory=  8246.799        t= 3.21e+03 R=   7e+04
-Depth=    9379 States= 2.11e+08 Transitions=  3.5e+09 Memory=  8263.791        t= 3.22e+03 R=   7e+04
-Depth=    9379 States= 2.12e+08 Transitions= 3.52e+09 Memory=  8279.514        t= 3.24e+03 R=   7e+04
-Depth=    9379 States= 2.13e+08 Transitions= 3.54e+09 Memory=  8293.772        t= 3.26e+03 R=   7e+04
-Depth=    9379 States= 2.14e+08 Transitions= 3.56e+09 Memory=  8309.201        t= 3.28e+03 R=   7e+04
-Depth=    9379 States= 2.15e+08 Transitions= 3.58e+09 Memory=  8323.752        t= 3.29e+03 R=   7e+04
-Depth=    9379 States= 2.16e+08 Transitions=  3.6e+09 Memory=  8342.990        t= 3.31e+03 R=   7e+04
-Depth=    9379 States= 2.17e+08 Transitions= 3.61e+09 Memory=  8355.197        t= 3.32e+03 R=   7e+04
-Depth=    9379 States= 2.18e+08 Transitions= 3.64e+09 Memory=  8368.674        t= 3.35e+03 R=   7e+04
-Depth=    9379 States= 2.19e+08 Transitions= 3.66e+09 Memory=  8382.932        t= 3.37e+03 R=   7e+04
-Depth=    9379 States=  2.2e+08 Transitions= 3.68e+09 Memory=  8398.459        t= 3.38e+03 R=   7e+04
-Depth=    9379 States= 2.21e+08 Transitions=  3.7e+09 Memory=  8412.912        t= 3.4e+03 R=   6e+04
-Depth=    9379 States= 2.22e+08 Transitions= 3.71e+09 Memory=  8428.244        t= 3.42e+03 R=   6e+04
-Depth=    9379 States= 2.23e+08 Transitions= 3.73e+09 Memory=  8491.721        t= 3.43e+03 R=   6e+04
-Depth=    9379 States= 2.24e+08 Transitions= 3.75e+09 Memory=  8560.373        t= 3.45e+03 R=   6e+04
-Depth=    9379 States= 2.25e+08 Transitions= 3.77e+09 Memory=  8621.604        t= 3.47e+03 R=   6e+04
-Depth=    9379 States= 2.26e+08 Transitions= 3.79e+09 Memory=  8648.850        t= 3.48e+03 R=   6e+04
-Depth=    9379 States= 2.27e+08 Transitions= 3.81e+09 Memory=  8671.994        t= 3.5e+03 R=   6e+04
-Depth=    9379 States= 2.28e+08 Transitions= 3.82e+09 Memory=  8710.861        t= 3.51e+03 R=   6e+04
-Depth=    9379 States= 2.29e+08 Transitions= 3.84e+09 Memory=  8742.893        t= 3.53e+03 R=   6e+04
-Depth=    9379 States=  2.3e+08 Transitions= 3.85e+09 Memory=  8771.799        t= 3.54e+03 R=   6e+04
-Depth=    9379 States= 2.31e+08 Transitions= 3.87e+09 Memory=  8792.600        t= 3.56e+03 R=   6e+04
-Depth=    9379 States= 2.32e+08 Transitions= 3.89e+09 Memory=  8828.733        t= 3.57e+03 R=   6e+04
-Depth=    9379 States= 2.33e+08 Transitions=  3.9e+09 Memory=  8843.869        t= 3.59e+03 R=   6e+04
-Depth=    9379 States= 2.34e+08 Transitions= 3.92e+09 Memory=  8884.787        t= 3.6e+03 R=   6e+04
-Depth=    9379 States= 2.35e+08 Transitions= 3.93e+09 Memory=  8924.240        t= 3.62e+03 R=   6e+04
-Depth=    9379 States= 2.36e+08 Transitions= 3.95e+09 Memory=  8960.276        t= 3.63e+03 R=   6e+04
-Depth=    9379 States= 2.37e+08 Transitions= 3.97e+09 Memory=  8984.494        t= 3.65e+03 R=   6e+04
-Depth=    9379 States= 2.38e+08 Transitions= 3.98e+09 Memory=  9016.428        t= 3.66e+03 R=   6e+04
-Depth=    9379 States= 2.39e+08 Transitions=    4e+09 Memory=  9077.365        t= 3.68e+03 R=   6e+04
-Depth=    9379 States=  2.4e+08 Transitions= 4.02e+09 Memory=  9143.088        t= 3.7e+03 R=   6e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 9379, errors: 0
- 88114592 states, stored (2.40192e+08 visited)
-3.782223e+09 states, matched
-4.0224152e+09 transitions (= visited+matched)
-1.4282782e+10 atomic steps
-hash conflicts: 5.384059e+08 (resolved)
-
-Stats on memory usage (in Megabytes):
- 7731.001      equivalent memory usage for states (stored*(State-vector + overhead))
- 6648.180      actual memory usage for states (compression: 85.99%)
-               state-vector as stored = 51 byte + 28 byte overhead
- 2048.000      memory used for hash table (-w28)
-  457.764      memory used for DFS stack (-m10000000)
-    1.188      memory lost to fragmentation
- 9152.756      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 256, "(1)"
-       line 418, "pan.___", state 286, "(1)"
-       line 399, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 395, "(1)"
-       line 418, "pan.___", state 425, "(1)"
-       line 540, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 399, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 70, "(1)"
-       line 418, "pan.___", state 100, "(1)"
-       line 399, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 158, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 399, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 247, "(1)"
-       line 418, "pan.___", state 277, "(1)"
-       line 399, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 359, "(1)"
-       line 418, "pan.___", state 389, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 3.7e+03 seconds
-pan: rate 64918.749 states/second
-pan: avg transition delay 9.1982e-07 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_writer.spin.input b/formal-model/urcu/result-signal-over-reader/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 43221e7..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_writer.spin.input.trail b/formal-model/urcu/result-signal-over-reader/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.define b/formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.log b/formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index f870a6e..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-depth 15: Claim reached state 9 (line 750)
-depth 1194: Claim reached state 9 (line 749)
-Depth=    3253 States=    1e+06 Transitions= 1.06e+07 Memory=   484.416        t=   9.57 R=   1e+05
-Depth=    3253 States=    2e+06 Transitions= 2.04e+07 Memory=   501.311        t=   18.5 R=   1e+05
-pan: acceptance cycle (at depth 1938)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 64 byte, depth reached 23684, errors: 1
-   682672 states, stored (2.81536e+06 visited)
- 30226122 states, matched
- 33041487 transitions (= visited+matched)
-1.1631626e+08 atomic steps
-hash conflicts:   6056013 (resolved)
-
-Stats on memory usage (in Megabytes):
-   59.896      equivalent memory usage for states (stored*(State-vector + overhead))
-   47.456      actual memory usage for states (compression: 79.23%)
-               state-vector as stored = 45 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  513.127      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 158, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 400, "pan.___", state 211, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 243, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 256, "(1)"
-       line 419, "pan.___", state 286, "(1)"
-       line 400, "pan.___", state 350, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 382, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 395, "(1)"
-       line 419, "pan.___", state 425, "(1)"
-       line 541, "pan.___", state 456, "-end-"
-       (17 of 456 states)
-unreached in proctype urcu_reader_sig
-       line 400, "pan.___", state 25, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 57, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 70, "(1)"
-       line 419, "pan.___", state 100, "(1)"
-       line 400, "pan.___", state 113, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 145, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 158, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 400, "pan.___", state 202, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 234, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 247, "(1)"
-       line 419, "pan.___", state 277, "(1)"
-       line 400, "pan.___", state 314, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 359, "(1)"
-       line 419, "pan.___", state 389, "(1)"
-       line 615, "pan.___", state 411, "-end-"
-       (17 of 411 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 402, "pan.___", state 134, "((i<1))"
-       line 402, "pan.___", state 134, "((i>=1))"
-       line 410, "pan.___", state 153, "(1)"
-       line 410, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 154, "else"
-       line 410, "pan.___", state 157, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 414, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 167, "else"
-       line 414, "pan.___", state 170, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 412, "pan.___", state 176, "((i<1))"
-       line 412, "pan.___", state 176, "((i>=1))"
-       line 419, "pan.___", state 183, "(1)"
-       line 419, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 184, "else"
-       line 419, "pan.___", state 187, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 370, "pan.___", state 193, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 647, "pan.___", state 202, "((write_lock==0))"
-       line 647, "pan.___", state 202, "else"
-       line 645, "pan.___", state 203, "(1)"
-       line 176, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 180, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 225, "((j<1))"
-       line 178, "pan.___", state 225, "((j>=1))"
-       line 184, "pan.___", state 230, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 161, "pan.___", state 240, "(1)"
-       line 165, "pan.___", state 248, "(1)"
-       line 165, "pan.___", state 249, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 165, "pan.___", state 249, "else"
-       line 163, "pan.___", state 254, "((j<1))"
-       line 163, "pan.___", state 254, "((j>=1))"
-       line 169, "pan.___", state 260, "(1)"
-       line 169, "pan.___", state 261, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 169, "pan.___", state 261, "else"
-       line 171, "pan.___", state 264, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 171, "pan.___", state 264, "else"
-       line 176, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 180, "pan.___", state 280, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 288, "((j<1))"
-       line 178, "pan.___", state 288, "((j>=1))"
-       line 184, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 303, "(1)"
-       line 165, "pan.___", state 311, "(1)"
-       line 165, "pan.___", state 312, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 165, "pan.___", state 312, "else"
-       line 163, "pan.___", state 317, "((j<1))"
-       line 163, "pan.___", state 317, "((j>=1))"
-       line 169, "pan.___", state 323, "(1)"
-       line 169, "pan.___", state 324, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 324, "else"
-       line 171, "pan.___", state 327, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 171, "pan.___", state 327, "else"
-       line 215, "pan.___", state 333, "((i<1))"
-       line 215, "pan.___", state 333, "((i>=1))"
-       line 176, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 180, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 178, "pan.___", state 355, "((j<1))"
-       line 178, "pan.___", state 355, "((j>=1))"
-       line 184, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 161, "pan.___", state 370, "(1)"
-       line 165, "pan.___", state 378, "(1)"
-       line 165, "pan.___", state 379, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 165, "pan.___", state 379, "else"
-       line 163, "pan.___", state 384, "((j<1))"
-       line 163, "pan.___", state 384, "((j>=1))"
-       line 169, "pan.___", state 390, "(1)"
-       line 169, "pan.___", state 391, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 169, "pan.___", state 391, "else"
-       line 171, "pan.___", state 394, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 171, "pan.___", state 394, "else"
-       line 400, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 410, "(1)"
-       line 404, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 424, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 402, "pan.___", state 430, "((i<1))"
-       line 402, "pan.___", state 430, "((i>=1))"
-       line 409, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 449, "(1)"
-       line 410, "pan.___", state 450, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 450, "else"
-       line 410, "pan.___", state 453, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 414, "pan.___", state 462, "(1)"
-       line 414, "pan.___", state 463, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 463, "else"
-       line 414, "pan.___", state 466, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 412, "pan.___", state 472, "((i<1))"
-       line 412, "pan.___", state 472, "((i>=1))"
-       line 419, "pan.___", state 479, "(1)"
-       line 419, "pan.___", state 480, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 480, "else"
-       line 419, "pan.___", state 483, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 370, "pan.___", state 489, "(1)"
-       line 662, "pan.___", state 492, "cached_urcu_gp_ctr.val[( ((_pid<2)) ? (0) : (1) )] = (tmp^(1<<7))"
-       line 400, "pan.___", state 498, "(1)"
-       line 400, "pan.___", state 499, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 499, "else"
-       line 400, "pan.___", state 502, "(1)"
-       line 404, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 516, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 402, "pan.___", state 522, "((i<1))"
-       line 402, "pan.___", state 522, "((i>=1))"
-       line 409, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 541, "(1)"
-       line 410, "pan.___", state 542, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 542, "else"
-       line 410, "pan.___", state 545, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 414, "pan.___", state 554, "(1)"
-       line 414, "pan.___", state 555, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 555, "else"
-       line 414, "pan.___", state 558, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 412, "pan.___", state 564, "((i<1))"
-       line 412, "pan.___", state 564, "((i>=1))"
-       line 419, "pan.___", state 571, "(1)"
-       line 419, "pan.___", state 572, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 572, "else"
-       line 419, "pan.___", state 575, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 370, "pan.___", state 581, "(1)"
-       line 400, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 595, "(1)"
-       line 404, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 609, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 402, "pan.___", state 615, "((i<1))"
-       line 402, "pan.___", state 615, "((i>=1))"
-       line 409, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 634, "(1)"
-       line 410, "pan.___", state 635, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 635, "else"
-       line 410, "pan.___", state 638, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 414, "pan.___", state 647, "(1)"
-       line 414, "pan.___", state 648, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 648, "else"
-       line 414, "pan.___", state 651, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 412, "pan.___", state 657, "((i<1))"
-       line 412, "pan.___", state 657, "((i>=1))"
-       line 419, "pan.___", state 664, "(1)"
-       line 419, "pan.___", state 665, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 665, "else"
-       line 419, "pan.___", state 668, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 370, "pan.___", state 674, "(1)"
-       line 400, "pan.___", state 679, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 681, "(1)"
-       line 400, "pan.___", state 682, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 682, "else"
-       line 400, "pan.___", state 685, "(1)"
-       line 404, "pan.___", state 693, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 695, "(1)"
-       line 404, "pan.___", state 696, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 696, "else"
-       line 404, "pan.___", state 699, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 402, "pan.___", state 705, "((i<1))"
-       line 402, "pan.___", state 705, "((i>=1))"
-       line 409, "pan.___", state 711, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 724, "(1)"
-       line 410, "pan.___", state 725, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 725, "else"
-       line 410, "pan.___", state 728, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 414, "pan.___", state 737, "(1)"
-       line 414, "pan.___", state 738, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 738, "else"
-       line 414, "pan.___", state 741, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 412, "pan.___", state 747, "((i<1))"
-       line 412, "pan.___", state 747, "((i>=1))"
-       line 419, "pan.___", state 754, "(1)"
-       line 419, "pan.___", state 755, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 755, "else"
-       line 419, "pan.___", state 758, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 370, "pan.___", state 764, "(1)"
-       line 430, "pan.___", state 767, "(((tmp2&((1<<7)-1))&&((tmp2^cached_urcu_gp_ctr.val[( ((_pid<2)) ? (0) : (1) )])&(1<<7))))"
-       line 430, "pan.___", state 767, "else"
-       line 400, "pan.___", state 777, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 779, "(1)"
-       line 400, "pan.___", state 780, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 780, "else"
-       line 400, "pan.___", state 783, "(1)"
-       line 404, "pan.___", state 791, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 793, "(1)"
-       line 404, "pan.___", state 794, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 794, "else"
-       line 404, "pan.___", state 797, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 402, "pan.___", state 803, "((i<1))"
-       line 402, "pan.___", state 803, "((i>=1))"
-       line 409, "pan.___", state 809, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 822, "(1)"
-       line 410, "pan.___", state 823, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 823, "else"
-       line 410, "pan.___", state 826, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 414, "pan.___", state 835, "(1)"
-       line 414, "pan.___", state 836, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 836, "else"
-       line 414, "pan.___", state 839, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 412, "pan.___", state 845, "((i<1))"
-       line 412, "pan.___", state 845, "((i>=1))"
-       line 419, "pan.___", state 852, "(1)"
-       line 419, "pan.___", state 853, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 853, "else"
-       line 419, "pan.___", state 856, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 370, "pan.___", state 862, "(1)"
-       line 449, "pan.___", state 870, "((tmp<1))"
-       line 449, "pan.___", state 870, "((tmp>=1))"
-       line 462, "pan.___", state 873, "tmp = 0"
-       line 400, "pan.___", state 877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 883, "(1)"
-       line 404, "pan.___", state 891, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 897, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 903, "((i<1))"
-       line 402, "pan.___", state 903, "((i>=1))"
-       line 409, "pan.___", state 909, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 922, "(1)"
-       line 410, "pan.___", state 923, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 923, "else"
-       line 410, "pan.___", state 926, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 414, "pan.___", state 935, "(1)"
-       line 414, "pan.___", state 936, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 936, "else"
-       line 414, "pan.___", state 939, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 945, "((i<1))"
-       line 412, "pan.___", state 945, "((i>=1))"
-       line 419, "pan.___", state 952, "(1)"
-       line 419, "pan.___", state 953, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 953, "else"
-       line 419, "pan.___", state 956, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 370, "pan.___", state 962, "(1)"
-       line 671, "pan.___", state 963, "tmp = cached_urcu_gp_ctr.val[( ((_pid<2)) ? (0) : (1) )]"
-       line 400, "pan.___", state 967, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 973, "(1)"
-       line 404, "pan.___", state 981, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 987, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 402, "pan.___", state 993, "((i<1))"
-       line 402, "pan.___", state 993, "((i>=1))"
-       line 409, "pan.___", state 999, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1012, "(1)"
-       line 410, "pan.___", state 1013, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 1013, "else"
-       line 410, "pan.___", state 1016, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 414, "pan.___", state 1025, "(1)"
-       line 414, "pan.___", state 1026, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 1026, "else"
-       line 414, "pan.___", state 1029, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 412, "pan.___", state 1035, "((i<1))"
-       line 412, "pan.___", state 1035, "((i>=1))"
-       line 419, "pan.___", state 1042, "(1)"
-       line 419, "pan.___", state 1043, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 1043, "else"
-       line 419, "pan.___", state 1046, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 370, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1061, "(1)"
-       line 404, "pan.___", state 1073, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1091, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1117, "(1)"
-       line 419, "pan.___", state 1134, "(1)"
-       line 404, "pan.___", state 1166, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1184, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 414, "pan.___", state 1210, "(1)"
-       line 419, "pan.___", state 1227, "(1)"
-       line 400, "pan.___", state 1242, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1256, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 409, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1287, "(1)"
-       line 414, "pan.___", state 1300, "(1)"
-       line 419, "pan.___", state 1317, "(1)"
-       line 400, "pan.___", state 1340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1342, "(1)"
-       line 400, "pan.___", state 1343, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 400, "pan.___", state 1343, "else"
-       line 400, "pan.___", state 1346, "(1)"
-       line 404, "pan.___", state 1354, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1356, "(1)"
-       line 404, "pan.___", state 1357, "((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 404, "pan.___", state 1357, "else"
-       line 404, "pan.___", state 1360, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 402, "pan.___", state 1366, "((i<1))"
-       line 402, "pan.___", state 1366, "((i>=1))"
-       line 409, "pan.___", state 1372, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 410, "pan.___", state 1385, "(1)"
-       line 410, "pan.___", state 1386, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 410, "pan.___", state 1386, "else"
-       line 410, "pan.___", state 1389, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 414, "pan.___", state 1398, "(1)"
-       line 414, "pan.___", state 1399, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 414, "pan.___", state 1399, "else"
-       line 414, "pan.___", state 1402, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 412, "pan.___", state 1408, "((i<1))"
-       line 412, "pan.___", state 1408, "((i>=1))"
-       line 419, "pan.___", state 1415, "(1)"
-       line 419, "pan.___", state 1416, "(!((cache_dirty_generation_ptr.bitfield&(1<<( ((_pid<2)) -> (0) : (1) )))))"
-       line 419, "pan.___", state 1416, "else"
-       line 419, "pan.___", state 1419, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 180, "pan.___", state 1448, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 184, "pan.___", state 1461, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 161, "pan.___", state 1471, "(1)"
-       line 165, "pan.___", state 1479, "(1)"
-       line 169, "pan.___", state 1491, "(1)"
-       line 176, "pan.___", state 1502, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 184, "pan.___", state 1524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 1534, "(1)"
-       line 165, "pan.___", state 1542, "(1)"
-       line 169, "pan.___", state 1554, "(1)"
-       line 176, "pan.___", state 1569, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 180, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 184, "pan.___", state 1591, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<( ((_pid<2)) -> (0) : (1) ))))"
-       line 161, "pan.___", state 1601, "(1)"
-       line 165, "pan.___", state 1609, "(1)"
-       line 169, "pan.___", state 1621, "(1)"
-       line 370, "pan.___", state 1642, "(1)"
-       line 696, "pan.___", state 1643, "(1)"
-       line 703, "pan.___", state 1646, "-end-"
-       (308 of 1646 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 752, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 30.2 seconds
-pan: rate 93347.646 states/second
-pan: avg transition delay 9.1279e-07 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.spin.input b/formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index eb1d4e6..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu/result-signal-over-reader/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index c5a6fbf..0000000
+++ /dev/null
@@ -1,23572 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2561
-2:4:2513
-3:4:2516
-4:4:2516
-5:4:2519
-6:4:2527
-7:4:2527
-8:4:2530
-9:4:2536
-10:4:2540
-11:4:2540
-12:4:2543
-13:4:2551
-14:4:2555
-15:4:2556
-16:0:2561
-17:4:2558
-18:0:2561
-19:3:869
-20:0:2561
-21:3:875
-22:0:2561
-23:3:876
-24:0:2561
-25:3:877
-26:3:881
-27:3:882
-28:3:890
-29:3:891
-30:3:895
-31:3:896
-32:3:904
-33:3:909
-34:3:913
-35:3:914
-36:3:921
-37:3:922
-38:3:933
-39:3:934
-40:3:935
-41:3:946
-42:3:951
-43:3:952
-44:0:2559
-45:3:964
-46:0:2565
-47:3:966
-48:3:967
-49:0:2565
-50:3:971
-51:3:975
-52:3:976
-53:3:984
-54:3:985
-55:3:989
-56:3:990
-57:3:998
-58:3:1003
-59:3:1004
-60:3:1015
-61:3:1016
-62:3:1027
-63:3:1028
-64:3:1029
-65:3:1040
-66:3:1045
-67:3:1046
-68:0:2565
-69:3:1058
-70:0:2565
-71:3:1060
-72:0:2565
-73:3:1061
-74:0:2565
-75:3:1071
-76:0:2565
-77:3:1075
-78:3:1076
-79:3:1080
-80:3:1084
-81:3:1085
-82:3:1089
-83:3:1097
-84:3:1098
-85:3:1103
-86:3:1110
-87:3:1111
-88:3:1118
-89:3:1123
-90:0:2565
-91:3:1134
-92:0:2565
-93:3:1138
-94:3:1139
-95:3:1143
-96:3:1147
-97:3:1148
-98:3:1152
-99:3:1160
-100:3:1161
-101:3:1166
-102:3:1173
-103:3:1174
-104:3:1181
-105:3:1186
-106:0:2565
-107:3:1197
-108:0:2565
-109:3:1205
-110:3:1206
-111:3:1210
-112:3:1214
-113:3:1215
-114:3:1219
-115:3:1227
-116:3:1228
-117:3:1233
-118:3:1240
-119:3:1241
-120:3:1248
-121:3:1253
-122:0:2565
-123:3:1264
-124:0:2565
-125:3:1266
-126:0:2565
-127:3:1267
-128:3:1271
-129:3:1272
-130:3:1280
-131:3:1281
-132:3:1285
-133:3:1286
-134:3:1294
-135:3:1299
-136:3:1303
-137:3:1304
-138:3:1311
-139:3:1312
-140:3:1323
-141:3:1324
-142:3:1325
-143:3:1336
-144:3:1341
-145:3:1342
-146:0:2565
-147:3:1354
-148:0:2565
-149:3:1356
-150:0:2565
-151:3:1359
-152:3:1360
-153:3:1372
-154:3:1373
-155:3:1377
-156:3:1378
-157:3:1386
-158:3:1391
-159:3:1395
-160:3:1396
-161:3:1403
-162:3:1404
-163:3:1415
-164:3:1416
-165:3:1417
-166:3:1428
-167:3:1433
-168:3:1434
-169:0:2565
-170:3:1446
-171:0:2565
-172:3:1448
-173:0:2565
-174:3:1449
-175:0:2565
-176:3:1450
-177:0:2565
-178:3:1451
-179:0:2565
-180:3:1452
-181:3:1456
-182:3:1457
-183:3:1465
-184:3:1466
-185:3:1470
-186:3:1471
-187:3:1479
-188:3:1484
-189:3:1488
-190:3:1489
-191:3:1496
-192:3:1497
-193:3:1508
-194:3:1509
-195:3:1510
-196:3:1521
-197:3:1526
-198:3:1527
-199:0:2565
-200:3:1539
-201:0:2565
-202:3:1631
-203:0:2565
-204:3:1729
-205:0:2565
-206:3:1730
-207:0:2565
-208:3:1734
-209:0:2565
-210:3:1740
-211:3:1744
-212:3:1745
-213:3:1753
-214:3:1754
-215:3:1758
-216:3:1759
-217:3:1767
-218:3:1772
-219:3:1776
-220:3:1777
-221:3:1784
-222:3:1785
-223:3:1796
-224:3:1797
-225:3:1798
-226:3:1809
-227:3:1814
-228:3:1815
-229:0:2565
-230:3:1827
-231:0:2565
-232:3:1829
-233:0:2565
-234:3:1830
-235:3:1834
-236:3:1835
-237:3:1843
-238:3:1844
-239:3:1848
-240:3:1849
-241:3:1857
-242:3:1862
-243:3:1866
-244:3:1867
-245:3:1874
-246:3:1875
-247:3:1886
-248:3:1887
-249:3:1888
-250:3:1899
-251:3:1904
-252:3:1905
-253:0:2565
-254:3:1917
-255:0:2565
-256:3:1919
-257:0:2565
-258:2:458
-259:0:2565
-260:2:464
-261:0:2565
-262:2:465
-263:0:2565
-264:2:466
-265:0:2565
-266:2:467
-267:0:2565
-268:1:2
-269:0:2565
-270:2:468
-271:0:2565
-272:1:8
-273:0:2565
-274:1:9
-275:0:2565
-276:1:10
-277:0:2565
-278:1:11
-279:0:2565
-280:2:467
-281:0:2565
-282:1:12
-283:1:16
-284:1:17
-285:1:25
-286:1:26
-287:1:30
-288:1:31
-289:1:39
-290:1:44
-291:1:48
-292:1:49
-293:1:56
-294:1:57
-295:1:68
-296:1:69
-297:1:70
-298:1:81
-299:1:86
-300:1:87
-301:0:2565
-302:2:468
-303:0:2565
-304:1:99
-305:0:2565
-306:2:469
-307:0:2565
-308:2:475
-309:0:2565
-310:2:476
-311:0:2565
-312:2:477
-313:2:481
-314:2:482
-315:2:490
-316:2:491
-317:2:495
-318:2:496
-319:2:504
-320:2:509
-321:2:513
-322:2:514
-323:2:521
-324:2:522
-325:2:533
-326:2:534
-327:2:535
-328:2:546
-329:2:551
-330:2:552
-331:0:2565
-332:2:564
-333:0:2565
-334:2:565
-335:2:569
-336:2:570
-337:2:578
-338:2:579
-339:2:583
-340:2:584
-341:2:592
-342:2:597
-343:2:601
-344:2:602
-345:2:609
-346:2:610
-347:2:621
-348:2:622
-349:2:623
-350:2:634
-351:2:639
-352:2:640
-353:0:2565
-354:2:652
-355:0:2565
-356:2:653
-357:0:2565
-358:2:654
-359:2:658
-360:2:659
-361:2:667
-362:2:668
-363:2:672
-364:2:673
-365:2:681
-366:2:686
-367:2:690
-368:2:691
-369:2:698
-370:2:699
-371:2:710
-372:2:711
-373:2:712
-374:2:723
-375:2:728
-376:2:729
-377:0:2565
-378:2:741
-379:0:2565
-380:2:750
-381:0:2565
-382:2:753
-383:0:2565
-384:2:758
-385:0:2565
-386:2:759
-387:0:2565
-388:2:760
-389:0:2565
-390:2:761
-391:0:2565
-392:2:762
-393:0:2565
-394:2:763
-395:0:2565
-396:2:765
-397:0:2565
-398:2:766
-399:2:770
-400:2:771
-401:2:779
-402:2:780
-403:2:781
-404:2:793
-405:2:798
-406:2:802
-407:2:803
-408:2:810
-409:2:811
-410:2:822
-411:2:823
-412:2:824
-413:2:835
-414:2:840
-415:2:841
-416:0:2565
-417:3:1922
-418:3:1923
-419:3:1935
-420:3:1936
-421:3:1940
-422:3:1941
-423:3:1949
-424:3:1954
-425:3:1958
-426:3:1959
-427:3:1966
-428:3:1967
-429:3:1978
-430:3:1979
-431:3:1980
-432:3:1991
-433:3:1996
-434:3:1997
-435:0:2565
-436:3:2009
-437:0:2565
-438:3:2011
-439:0:2565
-440:3:2012
-441:0:2565
-442:3:2013
-443:0:2565
-444:3:2014
-445:0:2565
-446:3:2015
-447:3:2019
-448:3:2020
-449:3:2028
-450:3:2029
-451:3:2033
-452:3:2034
-453:3:2042
-454:3:2047
-455:3:2051
-456:3:2052
-457:3:2059
-458:3:2060
-459:3:2071
-460:3:2072
-461:3:2073
-462:3:2084
-463:3:2089
-464:3:2090
-465:0:2565
-466:3:2102
-467:0:2565
-468:3:2104
-469:0:2565
-470:3:2105
-471:3:2109
-472:3:2110
-473:3:2118
-474:3:2119
-475:3:2123
-476:3:2124
-477:3:2132
-478:3:2137
-479:3:2141
-480:3:2142
-481:3:2149
-482:3:2150
-483:3:2161
-484:3:2162
-485:3:2163
-486:3:2174
-487:3:2179
-488:3:2180
-489:0:2565
-490:3:2192
-491:0:2565
-492:2:853
-493:0:2565
-494:3:2013
-495:0:2565
-496:2:857
-497:0:2565
-498:2:465
-499:0:2565
-500:3:2014
-501:0:2565
-502:3:2015
-503:3:2019
-504:3:2020
-505:3:2028
-506:3:2029
-507:3:2033
-508:3:2034
-509:3:2042
-510:3:2047
-511:3:2051
-512:3:2052
-513:3:2059
-514:3:2060
-515:3:2071
-516:3:2072
-517:3:2073
-518:3:2084
-519:3:2089
-520:3:2090
-521:0:2565
-522:3:2102
-523:0:2565
-524:3:2104
-525:0:2565
-526:3:2105
-527:3:2109
-528:3:2110
-529:3:2118
-530:3:2119
-531:3:2123
-532:3:2124
-533:3:2132
-534:3:2137
-535:3:2141
-536:3:2142
-537:3:2149
-538:3:2150
-539:3:2161
-540:3:2162
-541:3:2163
-542:3:2174
-543:3:2179
-544:3:2180
-545:0:2565
-546:3:2192
-547:0:2565
-548:2:466
-549:0:2565
-550:3:2013
-551:0:2565
-552:3:2014
-553:0:2565
-554:3:2015
-555:3:2019
-556:3:2020
-557:3:2028
-558:3:2029
-559:3:2033
-560:3:2034
-561:3:2042
-562:3:2047
-563:3:2051
-564:3:2052
-565:3:2059
-566:3:2060
-567:3:2071
-568:3:2072
-569:3:2073
-570:3:2084
-571:3:2089
-572:3:2090
-573:0:2565
-574:3:2102
-575:0:2565
-576:3:2104
-577:0:2565
-578:3:2105
-579:3:2109
-580:3:2110
-581:3:2118
-582:3:2119
-583:3:2123
-584:3:2124
-585:3:2132
-586:3:2137
-587:3:2141
-588:3:2142
-589:3:2149
-590:3:2150
-591:3:2161
-592:3:2162
-593:3:2163
-594:3:2174
-595:3:2179
-596:3:2180
-597:0:2565
-598:2:467
-599:0:2565
-600:3:2192
-601:0:2565
-602:3:2013
-603:0:2565
-604:3:2014
-605:0:2565
-606:3:2015
-607:3:2019
-608:3:2020
-609:3:2028
-610:3:2029
-611:3:2033
-612:3:2034
-613:3:2042
-614:3:2047
-615:3:2051
-616:3:2052
-617:3:2059
-618:3:2060
-619:3:2071
-620:3:2072
-621:3:2073
-622:3:2084
-623:3:2089
-624:3:2090
-625:0:2565
-626:3:2102
-627:0:2565
-628:3:2104
-629:0:2565
-630:1:102
-631:0:2565
-632:2:468
-633:0:2565
-634:3:2105
-635:3:2109
-636:3:2110
-637:3:2118
-638:3:2119
-639:3:2123
-640:3:2124
-641:3:2132
-642:3:2137
-643:3:2141
-644:3:2142
-645:3:2149
-646:3:2150
-647:3:2161
-648:3:2162
-649:3:2163
-650:3:2174
-651:3:2179
-652:3:2180
-653:0:2565
-654:3:2192
-655:0:2565
-656:3:2013
-657:0:2565
-658:3:2014
-659:0:2565
-660:3:2015
-661:3:2019
-662:3:2020
-663:3:2028
-664:3:2029
-665:3:2033
-666:3:2034
-667:3:2042
-668:3:2047
-669:3:2051
-670:3:2052
-671:3:2059
-672:3:2060
-673:3:2071
-674:3:2072
-675:3:2073
-676:3:2084
-677:3:2089
-678:3:2090
-679:0:2565
-680:3:2102
-681:0:2565
-682:3:2104
-683:0:2565
-684:2:467
-685:0:2565
-686:2:468
-687:0:2565
-688:3:2105
-689:3:2109
-690:3:2110
-691:3:2118
-692:3:2119
-693:3:2123
-694:3:2124
-695:3:2132
-696:3:2137
-697:3:2141
-698:3:2142
-699:3:2149
-700:3:2150
-701:3:2161
-702:3:2162
-703:3:2163
-704:3:2174
-705:3:2179
-706:3:2180
-707:0:2565
-708:3:2192
-709:0:2565
-710:3:2013
-711:0:2565
-712:3:2014
-713:0:2565
-714:3:2015
-715:3:2019
-716:3:2020
-717:3:2028
-718:3:2029
-719:3:2033
-720:3:2034
-721:3:2042
-722:3:2047
-723:3:2051
-724:3:2052
-725:3:2059
-726:3:2060
-727:3:2071
-728:3:2072
-729:3:2073
-730:3:2084
-731:3:2089
-732:3:2090
-733:0:2565
-734:3:2102
-735:0:2565
-736:2:467
-737:0:2565
-738:1:108
-739:0:2565
-740:2:468
-741:0:2565
-742:3:2104
-743:0:2565
-744:3:2105
-745:3:2109
-746:3:2110
-747:3:2118
-748:3:2119
-749:3:2123
-750:3:2124
-751:3:2132
-752:3:2137
-753:3:2141
-754:3:2142
-755:3:2149
-756:3:2150
-757:3:2161
-758:3:2162
-759:3:2163
-760:3:2174
-761:3:2179
-762:3:2180
-763:0:2565
-764:3:2192
-765:0:2565
-766:3:2013
-767:0:2565
-768:3:2014
-769:0:2565
-770:3:2015
-771:3:2019
-772:3:2020
-773:3:2028
-774:3:2029
-775:3:2033
-776:3:2034
-777:3:2042
-778:3:2047
-779:3:2051
-780:3:2052
-781:3:2059
-782:3:2060
-783:3:2071
-784:3:2072
-785:3:2073
-786:3:2084
-787:3:2089
-788:3:2090
-789:0:2565
-790:3:2102
-791:0:2565
-792:2:467
-793:0:2565
-794:2:468
-795:0:2565
-796:3:2104
-797:0:2565
-798:3:2105
-799:3:2109
-800:3:2110
-801:3:2118
-802:3:2119
-803:3:2123
-804:3:2124
-805:3:2132
-806:3:2137
-807:3:2141
-808:3:2142
-809:3:2149
-810:3:2150
-811:3:2161
-812:3:2162
-813:3:2163
-814:3:2174
-815:3:2179
-816:3:2180
-817:0:2565
-818:3:2192
-819:0:2565
-820:3:2013
-821:0:2565
-822:3:2014
-823:0:2565
-824:3:2015
-825:3:2019
-826:3:2020
-827:3:2028
-828:3:2029
-829:3:2033
-830:3:2034
-831:3:2042
-832:3:2047
-833:3:2051
-834:3:2052
-835:3:2059
-836:3:2060
-837:3:2071
-838:3:2072
-839:3:2073
-840:3:2084
-841:3:2089
-842:3:2090
-843:0:2565
-844:2:467
-845:0:2565
-846:1:109
-847:1:113
-848:1:114
-849:1:122
-850:1:123
-851:1:124
-852:1:136
-853:1:141
-854:1:145
-855:1:146
-856:1:153
-857:1:154
-858:1:165
-859:1:166
-860:1:167
-861:1:178
-862:1:183
-863:1:184
-864:0:2565
-865:3:2102
-866:0:2565
-867:2:468
-868:0:2565
-869:3:2104
-870:0:2565
-871:3:2105
-872:3:2109
-873:3:2110
-874:3:2118
-875:3:2119
-876:3:2123
-877:3:2124
-878:3:2132
-879:3:2137
-880:3:2141
-881:3:2142
-882:3:2149
-883:3:2150
-884:3:2161
-885:3:2169
-886:3:2170
-887:3:2174
-888:3:2179
-889:3:2180
-890:0:2565
-891:3:2192
-892:0:2565
-893:3:2013
-894:0:2565
-895:3:2014
-896:0:2565
-897:3:2015
-898:3:2019
-899:3:2020
-900:3:2028
-901:3:2029
-902:3:2033
-903:3:2034
-904:3:2042
-905:3:2047
-906:3:2051
-907:3:2052
-908:3:2059
-909:3:2060
-910:3:2071
-911:3:2079
-912:3:2080
-913:3:2084
-914:3:2089
-915:3:2090
-916:0:2565
-917:2:467
-918:0:2565
-919:3:2102
-920:0:2565
-921:3:2104
-922:0:2565
-923:3:2105
-924:3:2109
-925:3:2110
-926:3:2118
-927:3:2119
-928:3:2123
-929:3:2124
-930:3:2132
-931:3:2137
-932:3:2141
-933:3:2142
-934:3:2149
-935:3:2150
-936:3:2161
-937:3:2169
-938:3:2170
-939:3:2174
-940:3:2179
-941:3:2180
-942:0:2565
-943:3:2192
-944:0:2565
-945:3:2013
-946:0:2565
-947:3:2014
-948:0:2565
-949:1:196
-950:0:2565
-951:2:468
-952:0:2565
-953:3:2015
-954:3:2019
-955:3:2020
-956:3:2028
-957:3:2029
-958:3:2033
-959:3:2034
-960:3:2042
-961:3:2047
-962:3:2051
-963:3:2052
-964:3:2059
-965:3:2060
-966:3:2071
-967:3:2079
-968:3:2080
-969:3:2084
-970:3:2089
-971:3:2090
-972:0:2565
-973:3:2102
-974:0:2565
-975:3:2104
-976:0:2565
-977:3:2105
-978:3:2109
-979:3:2110
-980:3:2118
-981:3:2119
-982:3:2123
-983:3:2124
-984:3:2132
-985:3:2137
-986:3:2141
-987:3:2142
-988:3:2149
-989:3:2150
-990:3:2161
-991:3:2169
-992:3:2170
-993:3:2174
-994:3:2179
-995:3:2180
-996:0:2565
-997:3:2192
-998:0:2565
-999:3:2013
-1000:0:2565
-1001:3:2014
-1002:0:2565
-1003:2:469
-1004:0:2565
-1005:2:475
-1006:0:2565
-1007:2:476
-1008:0:2565
-1009:3:2015
-1010:3:2019
-1011:3:2020
-1012:3:2028
-1013:3:2029
-1014:3:2033
-1015:3:2034
-1016:3:2042
-1017:3:2047
-1018:3:2051
-1019:3:2052
-1020:3:2059
-1021:3:2060
-1022:3:2071
-1023:3:2079
-1024:3:2080
-1025:3:2084
-1026:3:2089
-1027:3:2090
-1028:0:2565
-1029:3:2102
-1030:0:2565
-1031:3:2104
-1032:0:2565
-1033:3:2105
-1034:3:2109
-1035:3:2110
-1036:3:2118
-1037:3:2119
-1038:3:2123
-1039:3:2124
-1040:3:2132
-1041:3:2137
-1042:3:2141
-1043:3:2142
-1044:3:2149
-1045:3:2150
-1046:3:2161
-1047:3:2169
-1048:3:2170
-1049:3:2174
-1050:3:2179
-1051:3:2180
-1052:0:2565
-1053:3:2192
-1054:0:2565
-1055:3:2013
-1056:0:2565
-1057:2:477
-1058:2:481
-1059:2:482
-1060:2:490
-1061:2:491
-1062:2:495
-1063:2:496
-1064:2:504
-1065:2:509
-1066:2:513
-1067:2:514
-1068:2:521
-1069:2:522
-1070:2:533
-1071:2:534
-1072:2:535
-1073:2:546
-1074:2:551
-1075:2:552
-1076:0:2565
-1077:3:2014
-1078:0:2565
-1079:3:2015
-1080:3:2019
-1081:3:2020
-1082:3:2028
-1083:3:2029
-1084:3:2033
-1085:3:2034
-1086:3:2042
-1087:3:2047
-1088:3:2051
-1089:3:2052
-1090:3:2059
-1091:3:2060
-1092:3:2071
-1093:3:2079
-1094:3:2080
-1095:3:2084
-1096:3:2089
-1097:3:2090
-1098:0:2565
-1099:3:2102
-1100:0:2565
-1101:3:2104
-1102:0:2565
-1103:3:2105
-1104:3:2109
-1105:3:2110
-1106:3:2118
-1107:3:2119
-1108:3:2123
-1109:3:2124
-1110:3:2132
-1111:3:2137
-1112:3:2141
-1113:3:2142
-1114:3:2149
-1115:3:2150
-1116:3:2161
-1117:3:2169
-1118:3:2170
-1119:3:2174
-1120:3:2179
-1121:3:2180
-1122:0:2565
-1123:3:2192
-1124:0:2565
-1125:2:564
-1126:0:2565
-1127:3:2013
-1128:0:2565
-1129:3:2014
-1130:0:2565
-1131:3:2015
-1132:3:2019
-1133:3:2020
-1134:3:2028
-1135:3:2029
-1136:3:2033
-1137:3:2034
-1138:3:2042
-1139:3:2047
-1140:3:2051
-1141:3:2052
-1142:3:2059
-1143:3:2060
-1144:3:2071
-1145:3:2079
-1146:3:2080
-1147:3:2084
-1148:3:2089
-1149:3:2090
-1150:0:2565
-1151:3:2102
-1152:0:2565
-1153:3:2104
-1154:0:2565
-1155:3:2105
-1156:3:2109
-1157:3:2110
-1158:3:2118
-1159:3:2119
-1160:3:2123
-1161:3:2124
-1162:3:2132
-1163:3:2137
-1164:3:2141
-1165:3:2142
-1166:3:2149
-1167:3:2150
-1168:3:2161
-1169:3:2169
-1170:3:2170
-1171:3:2174
-1172:3:2179
-1173:3:2180
-1174:0:2565
-1175:2:565
-1176:2:569
-1177:2:570
-1178:2:578
-1179:2:579
-1180:2:583
-1181:2:584
-1182:2:592
-1183:2:597
-1184:2:601
-1185:2:602
-1186:2:609
-1187:2:610
-1188:2:621
-1189:2:622
-1190:2:623
-1191:2:634
-1192:2:639
-1193:2:640
-1194:0:2565
-1195:3:2192
-1196:0:2565
-1197:3:2013
-1198:0:2565
-1199:2:652
-1200:0:2565
-1201:3:2014
-1202:0:2565
-1203:3:2015
-1204:3:2019
-1205:3:2020
-1206:3:2028
-1207:3:2029
-1208:3:2033
-1209:3:2034
-1210:3:2042
-1211:3:2047
-1212:3:2051
-1213:3:2052
-1214:3:2059
-1215:3:2060
-1216:3:2071
-1217:3:2079
-1218:3:2080
-1219:3:2084
-1220:3:2089
-1221:3:2090
-1222:0:2565
-1223:3:2102
-1224:0:2565
-1225:3:2104
-1226:0:2565
-1227:3:2105
-1228:3:2109
-1229:3:2110
-1230:3:2118
-1231:3:2119
-1232:3:2123
-1233:3:2124
-1234:3:2132
-1235:3:2137
-1236:3:2141
-1237:3:2142
-1238:3:2149
-1239:3:2150
-1240:3:2161
-1241:3:2169
-1242:3:2170
-1243:3:2174
-1244:3:2179
-1245:3:2180
-1246:0:2565
-1247:3:2192
-1248:0:2565
-1249:2:653
-1250:0:2565
-1251:3:2013
-1252:0:2565
-1253:3:2014
-1254:0:2565
-1255:3:2015
-1256:3:2019
-1257:3:2020
-1258:3:2028
-1259:3:2029
-1260:3:2033
-1261:3:2034
-1262:3:2042
-1263:3:2047
-1264:3:2051
-1265:3:2052
-1266:3:2059
-1267:3:2060
-1268:3:2071
-1269:3:2079
-1270:3:2080
-1271:3:2084
-1272:3:2089
-1273:3:2090
-1274:0:2565
-1275:3:2102
-1276:0:2565
-1277:3:2104
-1278:0:2565
-1279:3:2105
-1280:3:2109
-1281:3:2110
-1282:3:2118
-1283:3:2119
-1284:3:2123
-1285:3:2124
-1286:3:2132
-1287:3:2137
-1288:3:2141
-1289:3:2142
-1290:3:2149
-1291:3:2150
-1292:3:2161
-1293:3:2169
-1294:3:2170
-1295:3:2174
-1296:3:2179
-1297:3:2180
-1298:0:2565
-1299:2:654
-1300:2:658
-1301:2:659
-1302:2:667
-1303:2:668
-1304:2:672
-1305:2:673
-1306:2:681
-1307:2:686
-1308:2:690
-1309:2:691
-1310:2:698
-1311:2:699
-1312:2:710
-1313:2:711
-1314:2:712
-1315:2:723
-1316:2:728
-1317:2:729
-1318:0:2565
-1319:3:2192
-1320:0:2565
-1321:3:2013
-1322:0:2565
-1323:3:2014
-1324:0:2565
-1325:3:2015
-1326:3:2019
-1327:3:2020
-1328:3:2028
-1329:3:2029
-1330:3:2033
-1331:3:2034
-1332:3:2042
-1333:3:2047
-1334:3:2051
-1335:3:2052
-1336:3:2059
-1337:3:2060
-1338:3:2071
-1339:3:2079
-1340:3:2080
-1341:3:2084
-1342:3:2089
-1343:3:2090
-1344:0:2565
-1345:3:2102
-1346:0:2565
-1347:3:2104
-1348:0:2565
-1349:2:741
-1350:0:2565
-1351:2:750
-1352:0:2565
-1353:2:753
-1354:0:2565
-1355:3:2105
-1356:3:2109
-1357:3:2110
-1358:3:2118
-1359:3:2119
-1360:3:2123
-1361:3:2124
-1362:3:2132
-1363:3:2137
-1364:3:2141
-1365:3:2142
-1366:3:2149
-1367:3:2150
-1368:3:2161
-1369:3:2169
-1370:3:2170
-1371:3:2174
-1372:3:2179
-1373:3:2180
-1374:0:2565
-1375:3:2192
-1376:0:2565
-1377:3:2013
-1378:0:2565
-1379:3:2014
-1380:0:2565
-1381:3:2015
-1382:3:2019
-1383:3:2020
-1384:3:2028
-1385:3:2029
-1386:3:2033
-1387:3:2034
-1388:3:2042
-1389:3:2047
-1390:3:2051
-1391:3:2052
-1392:3:2059
-1393:3:2060
-1394:3:2071
-1395:3:2079
-1396:3:2080
-1397:3:2084
-1398:3:2089
-1399:3:2090
-1400:0:2565
-1401:3:2102
-1402:0:2565
-1403:2:758
-1404:0:2565
-1405:3:2104
-1406:0:2565
-1407:3:2105
-1408:3:2109
-1409:3:2110
-1410:3:2118
-1411:3:2119
-1412:3:2123
-1413:3:2124
-1414:3:2132
-1415:3:2137
-1416:3:2141
-1417:3:2142
-1418:3:2149
-1419:3:2150
-1420:3:2161
-1421:3:2169
-1422:3:2170
-1423:3:2174
-1424:3:2179
-1425:3:2180
-1426:0:2565
-1427:3:2192
-1428:0:2565
-1429:3:2013
-1430:0:2565
-1431:3:2014
-1432:0:2565
-1433:3:2015
-1434:3:2019
-1435:3:2020
-1436:3:2028
-1437:3:2029
-1438:3:2033
-1439:3:2034
-1440:3:2042
-1441:3:2047
-1442:3:2051
-1443:3:2052
-1444:3:2059
-1445:3:2060
-1446:3:2071
-1447:3:2079
-1448:3:2080
-1449:3:2084
-1450:3:2089
-1451:3:2090
-1452:0:2565
-1453:2:759
-1454:0:2565
-1455:3:2102
-1456:0:2565
-1457:3:2104
-1458:0:2565
-1459:3:2105
-1460:3:2109
-1461:3:2110
-1462:3:2118
-1463:3:2119
-1464:3:2123
-1465:3:2124
-1466:3:2132
-1467:3:2137
-1468:3:2141
-1469:3:2142
-1470:3:2149
-1471:3:2150
-1472:3:2161
-1473:3:2169
-1474:3:2170
-1475:3:2174
-1476:3:2179
-1477:3:2180
-1478:0:2565
-1479:3:2192
-1480:0:2565
-1481:3:2013
-1482:0:2565
-1483:3:2014
-1484:0:2565
-1485:2:760
-1486:0:2565
-1487:2:761
-1488:0:2565
-1489:2:762
-1490:0:2565
-1491:2:763
-1492:0:2565
-1493:3:2015
-1494:3:2019
-1495:3:2020
-1496:3:2028
-1497:3:2029
-1498:3:2033
-1499:3:2034
-1500:3:2042
-1501:3:2047
-1502:3:2051
-1503:3:2052
-1504:3:2059
-1505:3:2060
-1506:3:2071
-1507:3:2079
-1508:3:2080
-1509:3:2084
-1510:3:2089
-1511:3:2090
-1512:0:2565
-1513:3:2102
-1514:0:2565
-1515:3:2104
-1516:0:2565
-1517:3:2105
-1518:3:2109
-1519:3:2110
-1520:3:2118
-1521:3:2119
-1522:3:2123
-1523:3:2124
-1524:3:2132
-1525:3:2137
-1526:3:2141
-1527:3:2142
-1528:3:2149
-1529:3:2150
-1530:3:2161
-1531:3:2169
-1532:3:2170
-1533:3:2174
-1534:3:2179
-1535:3:2180
-1536:0:2565
-1537:3:2192
-1538:0:2565
-1539:3:2013
-1540:0:2565
-1541:2:765
-1542:0:2565
-1543:3:2014
-1544:0:2565
-1545:3:2015
-1546:3:2019
-1547:3:2020
-1548:3:2028
-1549:3:2029
-1550:3:2033
-1551:3:2034
-1552:3:2042
-1553:3:2047
-1554:3:2051
-1555:3:2052
-1556:3:2059
-1557:3:2060
-1558:3:2071
-1559:3:2079
-1560:3:2080
-1561:3:2084
-1562:3:2089
-1563:3:2090
-1564:0:2565
-1565:3:2102
-1566:0:2565
-1567:3:2104
-1568:0:2565
-1569:3:2105
-1570:3:2109
-1571:3:2110
-1572:3:2118
-1573:3:2119
-1574:3:2123
-1575:3:2124
-1576:3:2132
-1577:3:2137
-1578:3:2141
-1579:3:2142
-1580:3:2149
-1581:3:2150
-1582:3:2161
-1583:3:2169
-1584:3:2170
-1585:3:2174
-1586:3:2179
-1587:3:2180
-1588:0:2565
-1589:3:2192
-1590:0:2565
-1591:2:766
-1592:2:770
-1593:2:771
-1594:2:779
-1595:2:780
-1596:2:781
-1597:2:793
-1598:2:798
-1599:2:802
-1600:2:803
-1601:2:810
-1602:2:811
-1603:2:822
-1604:2:823
-1605:2:824
-1606:2:835
-1607:2:840
-1608:2:841
-1609:0:2565
-1610:3:2013
-1611:0:2565
-1612:3:2014
-1613:0:2565
-1614:3:2015
-1615:3:2019
-1616:3:2020
-1617:3:2028
-1618:3:2029
-1619:3:2033
-1620:3:2034
-1621:3:2042
-1622:3:2047
-1623:3:2051
-1624:3:2052
-1625:3:2059
-1626:3:2060
-1627:3:2071
-1628:3:2079
-1629:3:2080
-1630:3:2084
-1631:3:2089
-1632:3:2090
-1633:0:2565
-1634:3:2102
-1635:0:2565
-1636:3:2104
-1637:0:2565
-1638:3:2105
-1639:3:2109
-1640:3:2110
-1641:3:2118
-1642:3:2119
-1643:3:2123
-1644:3:2124
-1645:3:2132
-1646:3:2137
-1647:3:2141
-1648:3:2142
-1649:3:2149
-1650:3:2150
-1651:3:2161
-1652:3:2169
-1653:3:2170
-1654:3:2174
-1655:3:2179
-1656:3:2180
-1657:0:2565
-1658:2:853
-1659:0:2565
-1660:3:2192
-1661:0:2565
-1662:3:2013
-1663:0:2565
-1664:2:857
-1665:0:2565
-1666:2:465
-1667:0:2565
-1668:3:2014
-1669:0:2565
-1670:3:2015
-1671:3:2019
-1672:3:2020
-1673:3:2028
-1674:3:2029
-1675:3:2033
-1676:3:2034
-1677:3:2042
-1678:3:2047
-1679:3:2051
-1680:3:2052
-1681:3:2059
-1682:3:2060
-1683:3:2071
-1684:3:2079
-1685:3:2080
-1686:3:2084
-1687:3:2089
-1688:3:2090
-1689:0:2565
-1690:3:2102
-1691:0:2565
-1692:3:2104
-1693:0:2565
-1694:3:2105
-1695:3:2109
-1696:3:2110
-1697:3:2118
-1698:3:2119
-1699:3:2123
-1700:3:2124
-1701:3:2132
-1702:3:2137
-1703:3:2141
-1704:3:2142
-1705:3:2149
-1706:3:2150
-1707:3:2161
-1708:3:2169
-1709:3:2170
-1710:3:2174
-1711:3:2179
-1712:3:2180
-1713:0:2565
-1714:3:2192
-1715:0:2565
-1716:2:466
-1717:0:2565
-1718:3:2013
-1719:0:2565
-1720:3:2014
-1721:0:2565
-1722:3:2015
-1723:3:2019
-1724:3:2020
-1725:3:2028
-1726:3:2029
-1727:3:2033
-1728:3:2034
-1729:3:2042
-1730:3:2047
-1731:3:2051
-1732:3:2052
-1733:3:2059
-1734:3:2060
-1735:3:2071
-1736:3:2079
-1737:3:2080
-1738:3:2084
-1739:3:2089
-1740:3:2090
-1741:0:2565
-1742:3:2102
-1743:0:2565
-1744:3:2104
-1745:0:2565
-1746:3:2105
-1747:3:2109
-1748:3:2110
-1749:3:2118
-1750:3:2119
-1751:3:2123
-1752:3:2124
-1753:3:2132
-1754:3:2137
-1755:3:2141
-1756:3:2142
-1757:3:2149
-1758:3:2150
-1759:3:2161
-1760:3:2169
-1761:3:2170
-1762:3:2174
-1763:3:2179
-1764:3:2180
-1765:0:2565
-1766:2:467
-1767:0:2565
-1768:3:2192
-1769:0:2565
-1770:3:2013
-1771:0:2565
-1772:3:2014
-1773:0:2565
-1774:3:2015
-1775:3:2019
-1776:3:2020
-1777:3:2028
-1778:3:2029
-1779:3:2033
-1780:3:2034
-1781:3:2042
-1782:3:2047
-1783:3:2051
-1784:3:2052
-1785:3:2059
-1786:3:2060
-1787:3:2071
-1788:3:2079
-1789:3:2080
-1790:3:2084
-1791:3:2089
-1792:3:2090
-1793:0:2565
-1794:3:2102
-1795:0:2565
-1796:3:2104
-1797:0:2565
-1798:1:199
-1799:0:2565
-1800:2:468
-1801:0:2565
-1802:1:205
-1803:0:2565
-1804:3:2105
-1805:3:2109
-1806:3:2110
-1807:3:2118
-1808:3:2119
-1809:3:2123
-1810:3:2124
-1811:3:2132
-1812:3:2137
-1813:3:2141
-1814:3:2142
-1815:3:2149
-1816:3:2150
-1817:3:2161
-1818:3:2169
-1819:3:2170
-1820:3:2174
-1821:3:2179
-1822:3:2180
-1823:0:2565
-1824:3:2192
-1825:0:2565
-1826:3:2013
-1827:0:2565
-1828:3:2014
-1829:0:2565
-1830:3:2015
-1831:3:2019
-1832:3:2020
-1833:3:2028
-1834:3:2029
-1835:3:2033
-1836:3:2034
-1837:3:2042
-1838:3:2047
-1839:3:2051
-1840:3:2052
-1841:3:2059
-1842:3:2060
-1843:3:2071
-1844:3:2079
-1845:3:2080
-1846:3:2084
-1847:3:2089
-1848:3:2090
-1849:0:2565
-1850:3:2102
-1851:0:2565
-1852:3:2104
-1853:0:2565
-1854:2:467
-1855:0:2565
-1856:2:468
-1857:0:2565
-1858:3:2105
-1859:3:2109
-1860:3:2110
-1861:3:2118
-1862:3:2119
-1863:3:2123
-1864:3:2124
-1865:3:2132
-1866:3:2137
-1867:3:2141
-1868:3:2142
-1869:3:2149
-1870:3:2150
-1871:3:2161
-1872:3:2169
-1873:3:2170
-1874:3:2174
-1875:3:2179
-1876:3:2180
-1877:0:2565
-1878:3:2192
-1879:0:2565
-1880:3:2013
-1881:0:2565
-1882:3:2014
-1883:0:2565
-1884:3:2015
-1885:3:2019
-1886:3:2020
-1887:3:2028
-1888:3:2029
-1889:3:2033
-1890:3:2034
-1891:3:2042
-1892:3:2047
-1893:3:2051
-1894:3:2052
-1895:3:2059
-1896:3:2060
-1897:3:2071
-1898:3:2079
-1899:3:2080
-1900:3:2084
-1901:3:2089
-1902:3:2090
-1903:0:2565
-1904:3:2102
-1905:0:2565
-1906:2:467
-1907:0:2565
-1908:1:206
-1909:0:2565
-1910:2:468
-1911:0:2565
-1912:3:2104
-1913:0:2565
-1914:3:2105
-1915:3:2109
-1916:3:2110
-1917:3:2118
-1918:3:2119
-1919:3:2123
-1920:3:2124
-1921:3:2132
-1922:3:2137
-1923:3:2141
-1924:3:2142
-1925:3:2149
-1926:3:2150
-1927:3:2161
-1928:3:2169
-1929:3:2170
-1930:3:2174
-1931:3:2179
-1932:3:2180
-1933:0:2565
-1934:3:2192
-1935:0:2565
-1936:3:2013
-1937:0:2565
-1938:3:2014
--1:-1:-1
-1939:0:2565
-1940:3:2015
-1941:3:2019
-1942:3:2020
-1943:3:2028
-1944:3:2029
-1945:3:2033
-1946:3:2034
-1947:3:2042
-1948:3:2047
-1949:3:2051
-1950:3:2052
-1951:3:2059
-1952:3:2060
-1953:3:2071
-1954:3:2079
-1955:3:2080
-1956:3:2084
-1957:3:2089
-1958:3:2090
-1959:0:2565
-1960:3:2102
-1961:0:2565
-1962:2:467
-1963:0:2565
-1964:2:468
-1965:0:2565
-1966:3:2104
-1967:0:2565
-1968:3:2105
-1969:3:2109
-1970:3:2110
-1971:3:2118
-1972:3:2119
-1973:3:2123
-1974:3:2124
-1975:3:2132
-1976:3:2137
-1977:3:2141
-1978:3:2142
-1979:3:2149
-1980:3:2150
-1981:3:2161
-1982:3:2169
-1983:3:2170
-1984:3:2174
-1985:3:2179
-1986:3:2180
-1987:0:2565
-1988:3:2192
-1989:0:2565
-1990:3:2013
-1991:0:2565
-1992:3:2014
-1993:0:2565
-1994:3:2015
-1995:3:2019
-1996:3:2020
-1997:3:2028
-1998:3:2029
-1999:3:2033
-2000:3:2034
-2001:3:2042
-2002:3:2047
-2003:3:2051
-2004:3:2052
-2005:3:2059
-2006:3:2060
-2007:3:2071
-2008:3:2079
-2009:3:2080
-2010:3:2084
-2011:3:2089
-2012:3:2090
-2013:0:2565
-2014:2:467
-2015:0:2565
-2016:1:207
-2017:1:211
-2018:1:212
-2019:1:220
-2020:1:221
-2021:1:222
-2022:1:234
-2023:1:239
-2024:1:243
-2025:1:244
-2026:1:251
-2027:1:252
-2028:1:263
-2029:1:264
-2030:1:265
-2031:1:276
-2032:1:281
-2033:1:282
-2034:0:2565
-2035:3:2102
-2036:0:2565
-2037:2:468
-2038:0:2565
-2039:3:2104
-2040:0:2565
-2041:3:2105
-2042:3:2109
-2043:3:2110
-2044:3:2118
-2045:3:2119
-2046:3:2123
-2047:3:2124
-2048:3:2132
-2049:3:2137
-2050:3:2141
-2051:3:2142
-2052:3:2149
-2053:3:2150
-2054:3:2161
-2055:3:2169
-2056:3:2170
-2057:3:2174
-2058:3:2179
-2059:3:2180
-2060:0:2565
-2061:3:2192
-2062:0:2565
-2063:3:2013
-2064:0:2565
-2065:3:2014
-2066:0:2565
-2067:3:2015
-2068:3:2019
-2069:3:2020
-2070:3:2028
-2071:3:2029
-2072:3:2033
-2073:3:2034
-2074:3:2042
-2075:3:2047
-2076:3:2051
-2077:3:2052
-2078:3:2059
-2079:3:2060
-2080:3:2071
-2081:3:2079
-2082:3:2080
-2083:3:2084
-2084:3:2089
-2085:3:2090
-2086:0:2565
-2087:2:467
-2088:0:2565
-2089:3:2102
-2090:0:2565
-2091:3:2104
-2092:0:2565
-2093:3:2105
-2094:3:2109
-2095:3:2110
-2096:3:2118
-2097:3:2119
-2098:3:2123
-2099:3:2124
-2100:3:2132
-2101:3:2137
-2102:3:2141
-2103:3:2142
-2104:3:2149
-2105:3:2150
-2106:3:2161
-2107:3:2169
-2108:3:2170
-2109:3:2174
-2110:3:2179
-2111:3:2180
-2112:0:2565
-2113:3:2192
-2114:0:2565
-2115:3:2013
-2116:0:2565
-2117:3:2014
-2118:0:2565
-2119:1:294
-2120:0:2565
-2121:2:468
-2122:0:2565
-2123:3:2015
-2124:3:2019
-2125:3:2020
-2126:3:2028
-2127:3:2029
-2128:3:2033
-2129:3:2034
-2130:3:2042
-2131:3:2047
-2132:3:2051
-2133:3:2052
-2134:3:2059
-2135:3:2060
-2136:3:2071
-2137:3:2079
-2138:3:2080
-2139:3:2084
-2140:3:2089
-2141:3:2090
-2142:0:2565
-2143:3:2102
-2144:0:2565
-2145:3:2104
-2146:0:2565
-2147:3:2105
-2148:3:2109
-2149:3:2110
-2150:3:2118
-2151:3:2119
-2152:3:2123
-2153:3:2124
-2154:3:2132
-2155:3:2137
-2156:3:2141
-2157:3:2142
-2158:3:2149
-2159:3:2150
-2160:3:2161
-2161:3:2169
-2162:3:2170
-2163:3:2174
-2164:3:2179
-2165:3:2180
-2166:0:2565
-2167:3:2192
-2168:0:2565
-2169:3:2013
-2170:0:2565
-2171:3:2014
-2172:0:2565
-2173:2:469
-2174:0:2565
-2175:2:475
-2176:0:2565
-2177:2:476
-2178:0:2565
-2179:3:2015
-2180:3:2019
-2181:3:2020
-2182:3:2028
-2183:3:2029
-2184:3:2033
-2185:3:2034
-2186:3:2042
-2187:3:2047
-2188:3:2051
-2189:3:2052
-2190:3:2059
-2191:3:2060
-2192:3:2071
-2193:3:2079
-2194:3:2080
-2195:3:2084
-2196:3:2089
-2197:3:2090
-2198:0:2565
-2199:3:2102
-2200:0:2565
-2201:3:2104
-2202:0:2565
-2203:3:2105
-2204:3:2109
-2205:3:2110
-2206:3:2118
-2207:3:2119
-2208:3:2123
-2209:3:2124
-2210:3:2132
-2211:3:2137
-2212:3:2141
-2213:3:2142
-2214:3:2149
-2215:3:2150
-2216:3:2161
-2217:3:2169
-2218:3:2170
-2219:3:2174
-2220:3:2179
-2221:3:2180
-2222:0:2565
-2223:3:2192
-2224:0:2565
-2225:3:2013
-2226:0:2565
-2227:2:477
-2228:2:481
-2229:2:482
-2230:2:490
-2231:2:491
-2232:2:495
-2233:2:496
-2234:2:504
-2235:2:509
-2236:2:513
-2237:2:514
-2238:2:521
-2239:2:522
-2240:2:533
-2241:2:534
-2242:2:535
-2243:2:546
-2244:2:551
-2245:2:552
-2246:0:2565
-2247:3:2014
-2248:0:2565
-2249:3:2015
-2250:3:2019
-2251:3:2020
-2252:3:2028
-2253:3:2029
-2254:3:2033
-2255:3:2034
-2256:3:2042
-2257:3:2047
-2258:3:2051
-2259:3:2052
-2260:3:2059
-2261:3:2060
-2262:3:2071
-2263:3:2079
-2264:3:2080
-2265:3:2084
-2266:3:2089
-2267:3:2090
-2268:0:2565
-2269:3:2102
-2270:0:2565
-2271:3:2104
-2272:0:2565
-2273:3:2105
-2274:3:2109
-2275:3:2110
-2276:3:2118
-2277:3:2119
-2278:3:2123
-2279:3:2124
-2280:3:2132
-2281:3:2137
-2282:3:2141
-2283:3:2142
-2284:3:2149
-2285:3:2150
-2286:3:2161
-2287:3:2169
-2288:3:2170
-2289:3:2174
-2290:3:2179
-2291:3:2180
-2292:0:2565
-2293:3:2192
-2294:0:2565
-2295:2:564
-2296:0:2565
-2297:3:2013
-2298:0:2565
-2299:3:2014
-2300:0:2565
-2301:3:2015
-2302:3:2019
-2303:3:2020
-2304:3:2028
-2305:3:2029
-2306:3:2033
-2307:3:2034
-2308:3:2042
-2309:3:2047
-2310:3:2051
-2311:3:2052
-2312:3:2059
-2313:3:2060
-2314:3:2071
-2315:3:2079
-2316:3:2080
-2317:3:2084
-2318:3:2089
-2319:3:2090
-2320:0:2565
-2321:3:2102
-2322:0:2565
-2323:3:2104
-2324:0:2565
-2325:3:2105
-2326:3:2109
-2327:3:2110
-2328:3:2118
-2329:3:2119
-2330:3:2123
-2331:3:2124
-2332:3:2132
-2333:3:2137
-2334:3:2141
-2335:3:2142
-2336:3:2149
-2337:3:2150
-2338:3:2161
-2339:3:2169
-2340:3:2170
-2341:3:2174
-2342:3:2179
-2343:3:2180
-2344:0:2565
-2345:2:565
-2346:2:569
-2347:2:570
-2348:2:578
-2349:2:579
-2350:2:583
-2351:2:584
-2352:2:592
-2353:2:597
-2354:2:601
-2355:2:602
-2356:2:609
-2357:2:610
-2358:2:621
-2359:2:622
-2360:2:623
-2361:2:634
-2362:2:639
-2363:2:640
-2364:0:2565
-2365:3:2192
-2366:0:2565
-2367:3:2013
-2368:0:2565
-2369:2:652
-2370:0:2565
-2371:3:2014
-2372:0:2565
-2373:3:2015
-2374:3:2019
-2375:3:2020
-2376:3:2028
-2377:3:2029
-2378:3:2033
-2379:3:2034
-2380:3:2042
-2381:3:2047
-2382:3:2051
-2383:3:2052
-2384:3:2059
-2385:3:2060
-2386:3:2071
-2387:3:2079
-2388:3:2080
-2389:3:2084
-2390:3:2089
-2391:3:2090
-2392:0:2565
-2393:3:2102
-2394:0:2565
-2395:3:2104
-2396:0:2565
-2397:3:2105
-2398:3:2109
-2399:3:2110
-2400:3:2118
-2401:3:2119
-2402:3:2123
-2403:3:2124
-2404:3:2132
-2405:3:2137
-2406:3:2141
-2407:3:2142
-2408:3:2149
-2409:3:2150
-2410:3:2161
-2411:3:2169
-2412:3:2170
-2413:3:2174
-2414:3:2179
-2415:3:2180
-2416:0:2565
-2417:3:2192
-2418:0:2565
-2419:2:653
-2420:0:2565
-2421:3:2013
-2422:0:2565
-2423:3:2014
-2424:0:2565
-2425:3:2015
-2426:3:2019
-2427:3:2020
-2428:3:2028
-2429:3:2029
-2430:3:2033
-2431:3:2034
-2432:3:2042
-2433:3:2047
-2434:3:2051
-2435:3:2052
-2436:3:2059
-2437:3:2060
-2438:3:2071
-2439:3:2079
-2440:3:2080
-2441:3:2084
-2442:3:2089
-2443:3:2090
-2444:0:2565
-2445:3:2102
-2446:0:2565
-2447:3:2104
-2448:0:2565
-2449:3:2105
-2450:3:2109
-2451:3:2110
-2452:3:2118
-2453:3:2119
-2454:3:2123
-2455:3:2124
-2456:3:2132
-2457:3:2137
-2458:3:2141
-2459:3:2142
-2460:3:2149
-2461:3:2150
-2462:3:2161
-2463:3:2169
-2464:3:2170
-2465:3:2174
-2466:3:2179
-2467:3:2180
-2468:0:2565
-2469:2:654
-2470:2:658
-2471:2:659
-2472:2:667
-2473:2:668
-2474:2:672
-2475:2:673
-2476:2:681
-2477:2:686
-2478:2:690
-2479:2:691
-2480:2:698
-2481:2:699
-2482:2:710
-2483:2:711
-2484:2:712
-2485:2:723
-2486:2:728
-2487:2:729
-2488:0:2565
-2489:3:2192
-2490:0:2565
-2491:3:2013
-2492:0:2565
-2493:3:2014
-2494:0:2565
-2495:3:2015
-2496:3:2019
-2497:3:2020
-2498:3:2028
-2499:3:2029
-2500:3:2033
-2501:3:2034
-2502:3:2042
-2503:3:2047
-2504:3:2051
-2505:3:2052
-2506:3:2059
-2507:3:2060
-2508:3:2071
-2509:3:2079
-2510:3:2080
-2511:3:2084
-2512:3:2089
-2513:3:2090
-2514:0:2565
-2515:3:2102
-2516:0:2565
-2517:3:2104
-2518:0:2565
-2519:2:741
-2520:0:2565
-2521:2:750
-2522:0:2565
-2523:2:753
-2524:0:2565
-2525:3:2105
-2526:3:2109
-2527:3:2110
-2528:3:2118
-2529:3:2119
-2530:3:2123
-2531:3:2124
-2532:3:2132
-2533:3:2137
-2534:3:2141
-2535:3:2142
-2536:3:2149
-2537:3:2150
-2538:3:2161
-2539:3:2169
-2540:3:2170
-2541:3:2174
-2542:3:2179
-2543:3:2180
-2544:0:2565
-2545:3:2192
-2546:0:2565
-2547:3:2013
-2548:0:2565
-2549:3:2014
-2550:0:2565
-2551:3:2015
-2552:3:2019
-2553:3:2020
-2554:3:2028
-2555:3:2029
-2556:3:2033
-2557:3:2034
-2558:3:2042
-2559:3:2047
-2560:3:2051
-2561:3:2052
-2562:3:2059
-2563:3:2060
-2564:3:2071
-2565:3:2079
-2566:3:2080
-2567:3:2084
-2568:3:2089
-2569:3:2090
-2570:0:2565
-2571:3:2102
-2572:0:2565
-2573:2:758
-2574:0:2565
-2575:3:2104
-2576:0:2565
-2577:3:2105
-2578:3:2109
-2579:3:2110
-2580:3:2118
-2581:3:2119
-2582:3:2123
-2583:3:2124
-2584:3:2132
-2585:3:2137
-2586:3:2141
-2587:3:2142
-2588:3:2149
-2589:3:2150
-2590:3:2161
-2591:3:2169
-2592:3:2170
-2593:3:2174
-2594:3:2179
-2595:3:2180
-2596:0:2565
-2597:3:2192
-2598:0:2565
-2599:3:2013
-2600:0:2565
-2601:3:2014
-2602:0:2565
-2603:3:2015
-2604:3:2019
-2605:3:2020
-2606:3:2028
-2607:3:2029
-2608:3:2033
-2609:3:2034
-2610:3:2042
-2611:3:2047
-2612:3:2051
-2613:3:2052
-2614:3:2059
-2615:3:2060
-2616:3:2071
-2617:3:2079
-2618:3:2080
-2619:3:2084
-2620:3:2089
-2621:3:2090
-2622:0:2565
-2623:2:759
-2624:0:2565
-2625:3:2102
-2626:0:2565
-2627:3:2104
-2628:0:2565
-2629:3:2105
-2630:3:2109
-2631:3:2110
-2632:3:2118
-2633:3:2119
-2634:3:2123
-2635:3:2124
-2636:3:2132
-2637:3:2137
-2638:3:2141
-2639:3:2142
-2640:3:2149
-2641:3:2150
-2642:3:2161
-2643:3:2169
-2644:3:2170
-2645:3:2174
-2646:3:2179
-2647:3:2180
-2648:0:2565
-2649:3:2192
-2650:0:2565
-2651:3:2013
-2652:0:2565
-2653:3:2014
-2654:0:2565
-2655:2:760
-2656:0:2565
-2657:2:761
-2658:0:2565
-2659:2:762
-2660:0:2565
-2661:2:763
-2662:0:2565
-2663:3:2015
-2664:3:2019
-2665:3:2020
-2666:3:2028
-2667:3:2029
-2668:3:2033
-2669:3:2034
-2670:3:2042
-2671:3:2047
-2672:3:2051
-2673:3:2052
-2674:3:2059
-2675:3:2060
-2676:3:2071
-2677:3:2079
-2678:3:2080
-2679:3:2084
-2680:3:2089
-2681:3:2090
-2682:0:2565
-2683:3:2102
-2684:0:2565
-2685:3:2104
-2686:0:2565
-2687:3:2105
-2688:3:2109
-2689:3:2110
-2690:3:2118
-2691:3:2119
-2692:3:2123
-2693:3:2124
-2694:3:2132
-2695:3:2137
-2696:3:2141
-2697:3:2142
-2698:3:2149
-2699:3:2150
-2700:3:2161
-2701:3:2169
-2702:3:2170
-2703:3:2174
-2704:3:2179
-2705:3:2180
-2706:0:2565
-2707:3:2192
-2708:0:2565
-2709:3:2013
-2710:0:2565
-2711:2:765
-2712:0:2565
-2713:3:2014
-2714:0:2565
-2715:3:2015
-2716:3:2019
-2717:3:2020
-2718:3:2028
-2719:3:2029
-2720:3:2033
-2721:3:2034
-2722:3:2042
-2723:3:2047
-2724:3:2051
-2725:3:2052
-2726:3:2059
-2727:3:2060
-2728:3:2071
-2729:3:2079
-2730:3:2080
-2731:3:2084
-2732:3:2089
-2733:3:2090
-2734:0:2565
-2735:3:2102
-2736:0:2565
-2737:3:2104
-2738:0:2565
-2739:3:2105
-2740:3:2109
-2741:3:2110
-2742:3:2118
-2743:3:2119
-2744:3:2123
-2745:3:2124
-2746:3:2132
-2747:3:2137
-2748:3:2141
-2749:3:2142
-2750:3:2149
-2751:3:2150
-2752:3:2161
-2753:3:2169
-2754:3:2170
-2755:3:2174
-2756:3:2179
-2757:3:2180
-2758:0:2565
-2759:3:2192
-2760:0:2565
-2761:2:766
-2762:2:770
-2763:2:771
-2764:2:779
-2765:2:780
-2766:2:781
-2767:2:793
-2768:2:798
-2769:2:802
-2770:2:803
-2771:2:810
-2772:2:811
-2773:2:822
-2774:2:823
-2775:2:824
-2776:2:835
-2777:2:840
-2778:2:841
-2779:0:2565
-2780:3:2013
-2781:0:2565
-2782:3:2014
-2783:0:2565
-2784:3:2015
-2785:3:2019
-2786:3:2020
-2787:3:2028
-2788:3:2029
-2789:3:2033
-2790:3:2034
-2791:3:2042
-2792:3:2047
-2793:3:2051
-2794:3:2052
-2795:3:2059
-2796:3:2060
-2797:3:2071
-2798:3:2079
-2799:3:2080
-2800:3:2084
-2801:3:2089
-2802:3:2090
-2803:0:2565
-2804:3:2102
-2805:0:2565
-2806:3:2104
-2807:0:2565
-2808:3:2105
-2809:3:2109
-2810:3:2110
-2811:3:2118
-2812:3:2119
-2813:3:2123
-2814:3:2124
-2815:3:2132
-2816:3:2137
-2817:3:2141
-2818:3:2142
-2819:3:2149
-2820:3:2150
-2821:3:2161
-2822:3:2169
-2823:3:2170
-2824:3:2174
-2825:3:2179
-2826:3:2180
-2827:0:2565
-2828:2:853
-2829:0:2565
-2830:3:2192
-2831:0:2565
-2832:3:2013
-2833:0:2565
-2834:2:857
-2835:0:2565
-2836:2:465
-2837:0:2565
-2838:3:2014
-2839:0:2565
-2840:3:2015
-2841:3:2019
-2842:3:2020
-2843:3:2028
-2844:3:2029
-2845:3:2033
-2846:3:2034
-2847:3:2042
-2848:3:2047
-2849:3:2051
-2850:3:2052
-2851:3:2059
-2852:3:2060
-2853:3:2071
-2854:3:2079
-2855:3:2080
-2856:3:2084
-2857:3:2089
-2858:3:2090
-2859:0:2565
-2860:3:2102
-2861:0:2565
-2862:3:2104
-2863:0:2565
-2864:3:2105
-2865:3:2109
-2866:3:2110
-2867:3:2118
-2868:3:2119
-2869:3:2123
-2870:3:2124
-2871:3:2132
-2872:3:2137
-2873:3:2141
-2874:3:2142
-2875:3:2149
-2876:3:2150
-2877:3:2161
-2878:3:2169
-2879:3:2170
-2880:3:2174
-2881:3:2179
-2882:3:2180
-2883:0:2565
-2884:3:2192
-2885:0:2565
-2886:2:466
-2887:0:2565
-2888:3:2013
-2889:0:2565
-2890:3:2014
-2891:0:2565
-2892:3:2015
-2893:3:2019
-2894:3:2020
-2895:3:2028
-2896:3:2029
-2897:3:2033
-2898:3:2034
-2899:3:2042
-2900:3:2047
-2901:3:2051
-2902:3:2052
-2903:3:2059
-2904:3:2060
-2905:3:2071
-2906:3:2079
-2907:3:2080
-2908:3:2084
-2909:3:2089
-2910:3:2090
-2911:0:2565
-2912:3:2102
-2913:0:2565
-2914:3:2104
-2915:0:2565
-2916:3:2105
-2917:3:2109
-2918:3:2110
-2919:3:2118
-2920:3:2119
-2921:3:2123
-2922:3:2124
-2923:3:2132
-2924:3:2137
-2925:3:2141
-2926:3:2142
-2927:3:2149
-2928:3:2150
-2929:3:2161
-2930:3:2169
-2931:3:2170
-2932:3:2174
-2933:3:2179
-2934:3:2180
-2935:0:2565
-2936:2:467
-2937:0:2565
-2938:3:2192
-2939:0:2565
-2940:3:2013
-2941:0:2565
-2942:3:2014
-2943:0:2565
-2944:3:2015
-2945:3:2019
-2946:3:2020
-2947:3:2028
-2948:3:2029
-2949:3:2033
-2950:3:2034
-2951:3:2042
-2952:3:2047
-2953:3:2051
-2954:3:2052
-2955:3:2059
-2956:3:2060
-2957:3:2071
-2958:3:2079
-2959:3:2080
-2960:3:2084
-2961:3:2089
-2962:3:2090
-2963:0:2565
-2964:3:2102
-2965:0:2565
-2966:3:2104
-2967:0:2565
-2968:1:297
-2969:0:2565
-2970:2:468
-2971:0:2565
-2972:3:2105
-2973:3:2109
-2974:3:2110
-2975:3:2118
-2976:3:2119
-2977:3:2123
-2978:3:2124
-2979:3:2132
-2980:3:2137
-2981:3:2141
-2982:3:2142
-2983:3:2149
-2984:3:2150
-2985:3:2161
-2986:3:2169
-2987:3:2170
-2988:3:2174
-2989:3:2179
-2990:3:2180
-2991:0:2565
-2992:3:2192
-2993:0:2565
-2994:3:2013
-2995:0:2565
-2996:3:2014
-2997:0:2565
-2998:3:2015
-2999:3:2019
-3000:3:2020
-3001:3:2028
-3002:3:2029
-3003:3:2033
-3004:3:2034
-3005:3:2042
-3006:3:2047
-3007:3:2051
-3008:3:2052
-3009:3:2059
-3010:3:2060
-3011:3:2071
-3012:3:2079
-3013:3:2080
-3014:3:2084
-3015:3:2089
-3016:3:2090
-3017:0:2565
-3018:3:2102
-3019:0:2565
-3020:3:2104
-3021:0:2565
-3022:2:467
-3023:0:2565
-3024:2:468
-3025:0:2565
-3026:3:2105
-3027:3:2109
-3028:3:2110
-3029:3:2118
-3030:3:2119
-3031:3:2123
-3032:3:2124
-3033:3:2132
-3034:3:2137
-3035:3:2141
-3036:3:2142
-3037:3:2149
-3038:3:2150
-3039:3:2161
-3040:3:2169
-3041:3:2170
-3042:3:2174
-3043:3:2179
-3044:3:2180
-3045:0:2565
-3046:3:2192
-3047:0:2565
-3048:3:2013
-3049:0:2565
-3050:3:2014
-3051:0:2565
-3052:3:2015
-3053:3:2019
-3054:3:2020
-3055:3:2028
-3056:3:2029
-3057:3:2033
-3058:3:2034
-3059:3:2042
-3060:3:2047
-3061:3:2051
-3062:3:2052
-3063:3:2059
-3064:3:2060
-3065:3:2071
-3066:3:2079
-3067:3:2080
-3068:3:2084
-3069:3:2089
-3070:3:2090
-3071:0:2565
-3072:3:2102
-3073:0:2565
-3074:2:467
-3075:0:2565
-3076:1:303
-3077:0:2565
-3078:2:468
-3079:0:2565
-3080:1:312
-3081:0:2565
-3082:3:2104
-3083:0:2565
-3084:3:2105
-3085:3:2109
-3086:3:2110
-3087:3:2118
-3088:3:2119
-3089:3:2123
-3090:3:2124
-3091:3:2132
-3092:3:2137
-3093:3:2141
-3094:3:2142
-3095:3:2149
-3096:3:2150
-3097:3:2161
-3098:3:2169
-3099:3:2170
-3100:3:2174
-3101:3:2179
-3102:3:2180
-3103:0:2565
-3104:3:2192
-3105:0:2565
-3106:3:2013
-3107:0:2565
-3108:3:2014
-3109:0:2565
-3110:3:2015
-3111:3:2019
-3112:3:2020
-3113:3:2028
-3114:3:2029
-3115:3:2033
-3116:3:2034
-3117:3:2042
-3118:3:2047
-3119:3:2051
-3120:3:2052
-3121:3:2059
-3122:3:2060
-3123:3:2071
-3124:3:2079
-3125:3:2080
-3126:3:2084
-3127:3:2089
-3128:3:2090
-3129:0:2565
-3130:3:2102
-3131:0:2565
-3132:2:467
-3133:0:2565
-3134:2:468
-3135:0:2565
-3136:3:2104
-3137:0:2565
-3138:3:2105
-3139:3:2109
-3140:3:2110
-3141:3:2118
-3142:3:2119
-3143:3:2123
-3144:3:2124
-3145:3:2132
-3146:3:2137
-3147:3:2141
-3148:3:2142
-3149:3:2149
-3150:3:2150
-3151:3:2161
-3152:3:2169
-3153:3:2170
-3154:3:2174
-3155:3:2179
-3156:3:2180
-3157:0:2565
-3158:3:2192
-3159:0:2565
-3160:3:2013
-3161:0:2565
-3162:3:2014
-3163:0:2565
-3164:3:2015
-3165:3:2019
-3166:3:2020
-3167:3:2028
-3168:3:2029
-3169:3:2033
-3170:3:2034
-3171:3:2042
-3172:3:2047
-3173:3:2051
-3174:3:2052
-3175:3:2059
-3176:3:2060
-3177:3:2071
-3178:3:2079
-3179:3:2080
-3180:3:2084
-3181:3:2089
-3182:3:2090
-3183:0:2565
-3184:2:467
-3185:0:2565
-3186:1:314
-3187:0:2565
-3188:3:2102
-3189:0:2565
-3190:2:468
-3191:0:2565
-3192:3:2104
-3193:0:2565
-3194:3:2105
-3195:3:2109
-3196:3:2110
-3197:3:2118
-3198:3:2119
-3199:3:2123
-3200:3:2124
-3201:3:2132
-3202:3:2137
-3203:3:2141
-3204:3:2142
-3205:3:2149
-3206:3:2150
-3207:3:2161
-3208:3:2169
-3209:3:2170
-3210:3:2174
-3211:3:2179
-3212:3:2180
-3213:0:2565
-3214:3:2192
-3215:0:2565
-3216:3:2013
-3217:0:2565
-3218:3:2014
-3219:0:2565
-3220:3:2015
-3221:3:2019
-3222:3:2020
-3223:3:2028
-3224:3:2029
-3225:3:2033
-3226:3:2034
-3227:3:2042
-3228:3:2047
-3229:3:2051
-3230:3:2052
-3231:3:2059
-3232:3:2060
-3233:3:2071
-3234:3:2079
-3235:3:2080
-3236:3:2084
-3237:3:2089
-3238:3:2090
-3239:0:2565
-3240:2:469
-3241:0:2565
-3242:3:2102
-3243:0:2565
-3244:2:475
-3245:0:2565
-3246:2:476
-3247:0:2565
-3248:3:2104
-3249:0:2565
-3250:3:2105
-3251:3:2109
-3252:3:2110
-3253:3:2118
-3254:3:2119
-3255:3:2123
-3256:3:2124
-3257:3:2132
-3258:3:2137
-3259:3:2141
-3260:3:2142
-3261:3:2149
-3262:3:2150
-3263:3:2161
-3264:3:2169
-3265:3:2170
-3266:3:2174
-3267:3:2179
-3268:3:2180
-3269:0:2565
-3270:3:2192
-3271:0:2565
-3272:3:2013
-3273:0:2565
-3274:3:2014
-3275:0:2565
-3276:3:2015
-3277:3:2019
-3278:3:2020
-3279:3:2028
-3280:3:2029
-3281:3:2033
-3282:3:2034
-3283:3:2042
-3284:3:2047
-3285:3:2051
-3286:3:2052
-3287:3:2059
-3288:3:2060
-3289:3:2071
-3290:3:2079
-3291:3:2080
-3292:3:2084
-3293:3:2089
-3294:3:2090
-3295:0:2565
-3296:2:477
-3297:2:481
-3298:2:482
-3299:2:490
-3300:2:491
-3301:2:492
-3302:2:504
-3303:2:509
-3304:2:513
-3305:2:514
-3306:2:521
-3307:2:522
-3308:2:533
-3309:2:534
-3310:2:535
-3311:2:546
-3312:2:551
-3313:2:552
-3314:0:2565
-3315:3:2102
-3316:0:2565
-3317:3:2104
-3318:0:2565
-3319:3:2105
-3320:3:2109
-3321:3:2110
-3322:3:2118
-3323:3:2119
-3324:3:2123
-3325:3:2124
-3326:3:2132
-3327:3:2137
-3328:3:2141
-3329:3:2142
-3330:3:2149
-3331:3:2150
-3332:3:2161
-3333:3:2169
-3334:3:2170
-3335:3:2174
-3336:3:2179
-3337:3:2180
-3338:0:2565
-3339:3:2192
-3340:0:2565
-3341:3:2013
-3342:0:2565
-3343:3:2014
-3344:0:2565
-3345:2:564
-3346:0:2565
-3347:3:2015
-3348:3:2019
-3349:3:2020
-3350:3:2028
-3351:3:2029
-3352:3:2033
-3353:3:2034
-3354:3:2042
-3355:3:2047
-3356:3:2051
-3357:3:2052
-3358:3:2059
-3359:3:2060
-3360:3:2071
-3361:3:2079
-3362:3:2080
-3363:3:2084
-3364:3:2089
-3365:3:2090
-3366:0:2565
-3367:3:2102
-3368:0:2565
-3369:3:2104
-3370:0:2565
-3371:3:2105
-3372:3:2109
-3373:3:2110
-3374:3:2118
-3375:3:2119
-3376:3:2123
-3377:3:2124
-3378:3:2132
-3379:3:2137
-3380:3:2141
-3381:3:2142
-3382:3:2149
-3383:3:2150
-3384:3:2161
-3385:3:2169
-3386:3:2170
-3387:3:2174
-3388:3:2179
-3389:3:2180
-3390:0:2565
-3391:3:2192
-3392:0:2565
-3393:3:2013
-3394:0:2565
-3395:2:565
-3396:2:569
-3397:2:570
-3398:2:578
-3399:2:579
-3400:2:583
-3401:2:584
-3402:2:592
-3403:2:597
-3404:2:601
-3405:2:602
-3406:2:609
-3407:2:610
-3408:2:621
-3409:2:622
-3410:2:623
-3411:2:634
-3412:2:639
-3413:2:640
-3414:0:2565
-3415:2:744
-3416:0:2565
-3417:3:2014
-3418:0:2565
-3419:3:2015
-3420:3:2019
-3421:3:2020
-3422:3:2028
-3423:3:2029
-3424:3:2033
-3425:3:2034
-3426:3:2042
-3427:3:2047
-3428:3:2051
-3429:3:2052
-3430:3:2059
-3431:3:2060
-3432:3:2071
-3433:3:2079
-3434:3:2080
-3435:3:2084
-3436:3:2089
-3437:3:2090
-3438:0:2565
-3439:3:2102
-3440:0:2565
-3441:3:2104
-3442:0:2565
-3443:3:2105
-3444:3:2109
-3445:3:2110
-3446:3:2118
-3447:3:2119
-3448:3:2123
-3449:3:2124
-3450:3:2132
-3451:3:2137
-3452:3:2141
-3453:3:2142
-3454:3:2149
-3455:3:2150
-3456:3:2161
-3457:3:2169
-3458:3:2170
-3459:3:2174
-3460:3:2179
-3461:3:2180
-3462:0:2565
-3463:3:2192
-3464:0:2565
-3465:2:745
-3466:0:2565
-3467:3:2013
-3468:0:2565
-3469:2:750
-3470:0:2565
-3471:2:753
-3472:0:2565
-3473:3:2014
-3474:0:2565
-3475:3:2015
-3476:3:2019
-3477:3:2020
-3478:3:2028
-3479:3:2029
-3480:3:2033
-3481:3:2034
-3482:3:2042
-3483:3:2047
-3484:3:2051
-3485:3:2052
-3486:3:2059
-3487:3:2060
-3488:3:2071
-3489:3:2079
-3490:3:2080
-3491:3:2084
-3492:3:2089
-3493:3:2090
-3494:0:2565
-3495:3:2102
-3496:0:2565
-3497:3:2104
-3498:0:2565
-3499:3:2105
-3500:3:2109
-3501:3:2110
-3502:3:2118
-3503:3:2119
-3504:3:2123
-3505:3:2124
-3506:3:2132
-3507:3:2137
-3508:3:2141
-3509:3:2142
-3510:3:2149
-3511:3:2150
-3512:3:2161
-3513:3:2169
-3514:3:2170
-3515:3:2174
-3516:3:2179
-3517:3:2180
-3518:0:2565
-3519:3:2192
-3520:0:2565
-3521:2:758
-3522:0:2565
-3523:3:2013
-3524:0:2565
-3525:3:2014
-3526:0:2565
-3527:3:2015
-3528:3:2019
-3529:3:2020
-3530:3:2028
-3531:3:2029
-3532:3:2033
-3533:3:2034
-3534:3:2042
-3535:3:2047
-3536:3:2051
-3537:3:2052
-3538:3:2059
-3539:3:2060
-3540:3:2071
-3541:3:2079
-3542:3:2080
-3543:3:2084
-3544:3:2089
-3545:3:2090
-3546:0:2565
-3547:3:2102
-3548:0:2565
-3549:3:2104
-3550:0:2565
-3551:3:2105
-3552:3:2109
-3553:3:2110
-3554:3:2118
-3555:3:2119
-3556:3:2123
-3557:3:2124
-3558:3:2132
-3559:3:2137
-3560:3:2141
-3561:3:2142
-3562:3:2149
-3563:3:2150
-3564:3:2161
-3565:3:2169
-3566:3:2170
-3567:3:2174
-3568:3:2179
-3569:3:2180
-3570:0:2565
-3571:2:759
-3572:0:2565
-3573:3:2192
-3574:0:2565
-3575:3:2013
-3576:0:2565
-3577:3:2014
-3578:0:2565
-3579:3:2015
-3580:3:2019
-3581:3:2020
-3582:3:2028
-3583:3:2029
-3584:3:2033
-3585:3:2034
-3586:3:2042
-3587:3:2047
-3588:3:2051
-3589:3:2052
-3590:3:2059
-3591:3:2060
-3592:3:2071
-3593:3:2079
-3594:3:2080
-3595:3:2084
-3596:3:2089
-3597:3:2090
-3598:0:2565
-3599:3:2102
-3600:0:2565
-3601:3:2104
-3602:0:2565
-3603:2:760
-3604:0:2565
-3605:2:761
-3606:0:2565
-3607:2:762
-3608:0:2565
-3609:2:763
-3610:0:2565
-3611:3:2105
-3612:3:2109
-3613:3:2110
-3614:3:2118
-3615:3:2119
-3616:3:2123
-3617:3:2124
-3618:3:2132
-3619:3:2137
-3620:3:2141
-3621:3:2142
-3622:3:2149
-3623:3:2150
-3624:3:2161
-3625:3:2169
-3626:3:2170
-3627:3:2174
-3628:3:2179
-3629:3:2180
-3630:0:2565
-3631:3:2192
-3632:0:2565
-3633:3:2013
-3634:0:2565
-3635:3:2014
-3636:0:2565
-3637:3:2015
-3638:3:2019
-3639:3:2020
-3640:3:2028
-3641:3:2029
-3642:3:2033
-3643:3:2034
-3644:3:2042
-3645:3:2047
-3646:3:2051
-3647:3:2052
-3648:3:2059
-3649:3:2060
-3650:3:2071
-3651:3:2079
-3652:3:2080
-3653:3:2084
-3654:3:2089
-3655:3:2090
-3656:0:2565
-3657:3:2102
-3658:0:2565
-3659:2:765
-3660:0:2565
-3661:3:2104
-3662:0:2565
-3663:3:2105
-3664:3:2109
-3665:3:2110
-3666:3:2118
-3667:3:2119
-3668:3:2123
-3669:3:2124
-3670:3:2132
-3671:3:2137
-3672:3:2141
-3673:3:2142
-3674:3:2149
-3675:3:2150
-3676:3:2161
-3677:3:2169
-3678:3:2170
-3679:3:2174
-3680:3:2179
-3681:3:2180
-3682:0:2565
-3683:3:2192
-3684:0:2565
-3685:3:2013
-3686:0:2565
-3687:3:2014
-3688:0:2565
-3689:3:2015
-3690:3:2019
-3691:3:2020
-3692:3:2028
-3693:3:2029
-3694:3:2033
-3695:3:2034
-3696:3:2042
-3697:3:2047
-3698:3:2051
-3699:3:2052
-3700:3:2059
-3701:3:2060
-3702:3:2071
-3703:3:2079
-3704:3:2080
-3705:3:2084
-3706:3:2089
-3707:3:2090
-3708:0:2565
-3709:2:766
-3710:2:770
-3711:2:771
-3712:2:779
-3713:2:780
-3714:2:781
-3715:2:793
-3716:2:798
-3717:2:802
-3718:2:803
-3719:2:810
-3720:2:811
-3721:2:822
-3722:2:823
-3723:2:824
-3724:2:835
-3725:2:840
-3726:2:841
-3727:0:2565
-3728:3:2102
-3729:0:2565
-3730:3:2104
-3731:0:2565
-3732:3:2105
-3733:3:2109
-3734:3:2110
-3735:3:2118
-3736:3:2119
-3737:3:2123
-3738:3:2124
-3739:3:2132
-3740:3:2137
-3741:3:2141
-3742:3:2142
-3743:3:2149
-3744:3:2150
-3745:3:2161
-3746:3:2169
-3747:3:2170
-3748:3:2174
-3749:3:2179
-3750:3:2180
-3751:0:2565
-3752:3:2192
-3753:0:2565
-3754:3:2013
-3755:0:2565
-3756:3:2014
-3757:0:2565
-3758:2:853
-3759:0:2565
-3760:2:857
-3761:0:2565
-3762:2:465
-3763:0:2565
-3764:3:2015
-3765:3:2019
-3766:3:2020
-3767:3:2028
-3768:3:2029
-3769:3:2033
-3770:3:2034
-3771:3:2042
-3772:3:2047
-3773:3:2051
-3774:3:2052
-3775:3:2059
-3776:3:2060
-3777:3:2071
-3778:3:2079
-3779:3:2080
-3780:3:2084
-3781:3:2089
-3782:3:2090
-3783:0:2565
-3784:3:2102
-3785:0:2565
-3786:3:2104
-3787:0:2565
-3788:3:2105
-3789:3:2109
-3790:3:2110
-3791:3:2118
-3792:3:2119
-3793:3:2123
-3794:3:2124
-3795:3:2132
-3796:3:2137
-3797:3:2141
-3798:3:2142
-3799:3:2149
-3800:3:2150
-3801:3:2161
-3802:3:2169
-3803:3:2170
-3804:3:2174
-3805:3:2179
-3806:3:2180
-3807:0:2565
-3808:3:2192
-3809:0:2565
-3810:3:2013
-3811:0:2565
-3812:2:466
-3813:0:2565
-3814:3:2014
-3815:0:2565
-3816:3:2015
-3817:3:2019
-3818:3:2020
-3819:3:2028
-3820:3:2029
-3821:3:2033
-3822:3:2034
-3823:3:2042
-3824:3:2047
-3825:3:2051
-3826:3:2052
-3827:3:2059
-3828:3:2060
-3829:3:2071
-3830:3:2079
-3831:3:2080
-3832:3:2084
-3833:3:2089
-3834:3:2090
-3835:0:2565
-3836:3:2102
-3837:0:2565
-3838:3:2104
-3839:0:2565
-3840:3:2105
-3841:3:2109
-3842:3:2110
-3843:3:2118
-3844:3:2119
-3845:3:2123
-3846:3:2124
-3847:3:2132
-3848:3:2137
-3849:3:2141
-3850:3:2142
-3851:3:2149
-3852:3:2150
-3853:3:2161
-3854:3:2169
-3855:3:2170
-3856:3:2174
-3857:3:2179
-3858:3:2180
-3859:0:2565
-3860:3:2192
-3861:0:2565
-3862:2:467
-3863:0:2565
-3864:3:2013
-3865:0:2565
-3866:3:2014
-3867:0:2565
-3868:3:2015
-3869:3:2019
-3870:3:2020
-3871:3:2028
-3872:3:2029
-3873:3:2033
-3874:3:2034
-3875:3:2042
-3876:3:2047
-3877:3:2051
-3878:3:2052
-3879:3:2059
-3880:3:2060
-3881:3:2071
-3882:3:2079
-3883:3:2080
-3884:3:2084
-3885:3:2089
-3886:3:2090
-3887:0:2565
-3888:3:2102
-3889:0:2565
-3890:3:2104
-3891:0:2565
-3892:3:2105
-3893:3:2109
-3894:3:2110
-3895:3:2118
-3896:3:2119
-3897:3:2123
-3898:3:2124
-3899:3:2132
-3900:3:2137
-3901:3:2141
-3902:3:2142
-3903:3:2149
-3904:3:2150
-3905:3:2161
-3906:3:2169
-3907:3:2170
-3908:3:2174
-3909:3:2179
-3910:3:2180
-3911:0:2565
-3912:1:317
-3913:0:2565
-3914:3:2192
-3915:0:2565
-3916:3:2013
-3917:0:2565
-3918:2:468
-3919:0:2565
-3920:1:323
-3921:0:2565
-3922:1:324
-3923:0:2565
-3924:3:2014
-3925:0:2565
-3926:3:2015
-3927:3:2019
-3928:3:2020
-3929:3:2028
-3930:3:2029
-3931:3:2033
-3932:3:2034
-3933:3:2042
-3934:3:2047
-3935:3:2051
-3936:3:2052
-3937:3:2059
-3938:3:2060
-3939:3:2071
-3940:3:2079
-3941:3:2080
-3942:3:2084
-3943:3:2089
-3944:3:2090
-3945:0:2565
-3946:3:2102
-3947:0:2565
-3948:3:2104
-3949:0:2565
-3950:3:2105
-3951:3:2109
-3952:3:2110
-3953:3:2118
-3954:3:2119
-3955:3:2123
-3956:3:2124
-3957:3:2132
-3958:3:2137
-3959:3:2141
-3960:3:2142
-3961:3:2149
-3962:3:2150
-3963:3:2161
-3964:3:2169
-3965:3:2170
-3966:3:2174
-3967:3:2179
-3968:3:2180
-3969:0:2565
-3970:3:2192
-3971:0:2565
-3972:3:2013
-3973:0:2565
-3974:2:467
-3975:0:2565
-3976:2:468
-3977:0:2565
-3978:3:2014
-3979:0:2565
-3980:3:2015
-3981:3:2019
-3982:3:2020
-3983:3:2028
-3984:3:2029
-3985:3:2033
-3986:3:2034
-3987:3:2042
-3988:3:2047
-3989:3:2051
-3990:3:2052
-3991:3:2059
-3992:3:2060
-3993:3:2071
-3994:3:2079
-3995:3:2080
-3996:3:2084
-3997:3:2089
-3998:3:2090
-3999:0:2565
-4000:3:2102
-4001:0:2565
-4002:3:2104
-4003:0:2565
-4004:3:2105
-4005:3:2109
-4006:3:2110
-4007:3:2118
-4008:3:2119
-4009:3:2123
-4010:3:2124
-4011:3:2132
-4012:3:2137
-4013:3:2141
-4014:3:2142
-4015:3:2149
-4016:3:2150
-4017:3:2161
-4018:3:2169
-4019:3:2170
-4020:3:2174
-4021:3:2179
-4022:3:2180
-4023:0:2565
-4024:3:2192
-4025:0:2565
-4026:2:467
-4027:0:2565
-4028:1:329
-4029:0:2565
-4030:3:2013
-4031:0:2565
-4032:2:468
-4033:0:2565
-4034:3:2014
-4035:0:2565
-4036:3:2015
-4037:3:2019
-4038:3:2020
-4039:3:2028
-4040:3:2029
-4041:3:2033
-4042:3:2034
-4043:3:2042
-4044:3:2047
-4045:3:2051
-4046:3:2052
-4047:3:2059
-4048:3:2060
-4049:3:2071
-4050:3:2079
-4051:3:2080
-4052:3:2084
-4053:3:2089
-4054:3:2090
-4055:0:2565
-4056:3:2102
-4057:0:2565
-4058:3:2104
-4059:0:2565
-4060:3:2105
-4061:3:2109
-4062:3:2110
-4063:3:2118
-4064:3:2119
-4065:3:2123
-4066:3:2124
-4067:3:2132
-4068:3:2137
-4069:3:2141
-4070:3:2142
-4071:3:2149
-4072:3:2150
-4073:3:2161
-4074:3:2169
-4075:3:2170
-4076:3:2174
-4077:3:2179
-4078:3:2180
-4079:0:2565
-4080:3:2192
-4081:0:2565
-4082:2:467
-4083:0:2565
-4084:3:2013
-4085:0:2565
-4086:3:2014
-4087:0:2565
-4088:3:2015
-4089:3:2019
-4090:3:2020
-4091:3:2028
-4092:3:2029
-4093:3:2033
-4094:3:2034
-4095:3:2042
-4096:3:2047
-4097:3:2051
-4098:3:2052
-4099:3:2059
-4100:3:2060
-4101:3:2071
-4102:3:2079
-4103:3:2080
-4104:3:2084
-4105:3:2089
-4106:3:2090
-4107:0:2565
-4108:3:2102
-4109:0:2565
-4110:3:2104
-4111:0:2565
-4112:3:2105
-4113:3:2109
-4114:3:2110
-4115:3:2118
-4116:3:2119
-4117:3:2123
-4118:3:2124
-4119:3:2132
-4120:3:2137
-4121:3:2141
-4122:3:2142
-4123:3:2149
-4124:3:2150
-4125:3:2161
-4126:3:2169
-4127:3:2170
-4128:3:2174
-4129:3:2179
-4130:3:2180
-4131:0:2565
-4132:1:330
-4133:0:2565
-4134:3:2192
-4135:0:2565
-4136:3:2013
-4137:0:2565
-4138:2:468
-4139:0:2565
-4140:3:2014
-4141:0:2565
-4142:3:2015
-4143:3:2019
-4144:3:2020
-4145:3:2028
-4146:3:2029
-4147:3:2033
-4148:3:2034
-4149:3:2042
-4150:3:2047
-4151:3:2051
-4152:3:2052
-4153:3:2059
-4154:3:2060
-4155:3:2071
-4156:3:2079
-4157:3:2080
-4158:3:2084
-4159:3:2089
-4160:3:2090
-4161:0:2565
-4162:3:2102
-4163:0:2565
-4164:3:2104
-4165:0:2565
-4166:3:2105
-4167:3:2109
-4168:3:2110
-4169:3:2118
-4170:3:2119
-4171:3:2123
-4172:3:2124
-4173:3:2132
-4174:3:2137
-4175:3:2141
-4176:3:2142
-4177:3:2149
-4178:3:2150
-4179:3:2161
-4180:3:2169
-4181:3:2170
-4182:3:2174
-4183:3:2179
-4184:3:2180
-4185:0:2565
-4186:3:2192
-4187:0:2565
-4188:2:467
-4189:0:2565
-4190:3:2013
-4191:0:2565
-4192:3:2014
-4193:0:2565
-4194:3:2015
-4195:3:2019
-4196:3:2020
-4197:3:2028
-4198:3:2029
-4199:3:2033
-4200:3:2034
-4201:3:2042
-4202:3:2047
-4203:3:2051
-4204:3:2052
-4205:3:2059
-4206:3:2060
-4207:3:2071
-4208:3:2079
-4209:3:2080
-4210:3:2084
-4211:3:2089
-4212:3:2090
-4213:0:2565
-4214:3:2102
-4215:0:2565
-4216:3:2104
-4217:0:2565
-4218:3:2105
-4219:3:2109
-4220:3:2110
-4221:3:2118
-4222:3:2119
-4223:3:2123
-4224:3:2124
-4225:3:2132
-4226:3:2137
-4227:3:2141
-4228:3:2142
-4229:3:2149
-4230:3:2150
-4231:3:2161
-4232:3:2169
-4233:3:2170
-4234:3:2174
-4235:3:2179
-4236:3:2180
-4237:0:2565
-4238:1:331
-4239:0:2565
-4240:3:2192
-4241:0:2565
-4242:3:2013
-4243:0:2565
-4244:2:468
-4245:0:2565
-4246:1:332
-4247:0:2565
-4248:1:333
-4249:0:2565
-4250:1:334
-4251:0:2565
-4252:3:2014
-4253:0:2565
-4254:3:2015
-4255:3:2019
-4256:3:2020
-4257:3:2028
-4258:3:2029
-4259:3:2033
-4260:3:2034
-4261:3:2042
-4262:3:2047
-4263:3:2051
-4264:3:2052
-4265:3:2059
-4266:3:2060
-4267:3:2071
-4268:3:2079
-4269:3:2080
-4270:3:2084
-4271:3:2089
-4272:3:2090
-4273:0:2565
-4274:3:2102
-4275:0:2565
-4276:3:2104
-4277:0:2565
-4278:3:2105
-4279:3:2109
-4280:3:2110
-4281:3:2118
-4282:3:2119
-4283:3:2123
-4284:3:2124
-4285:3:2132
-4286:3:2137
-4287:3:2141
-4288:3:2142
-4289:3:2149
-4290:3:2150
-4291:3:2161
-4292:3:2169
-4293:3:2170
-4294:3:2174
-4295:3:2179
-4296:3:2180
-4297:0:2565
-4298:3:2192
-4299:0:2565
-4300:3:2013
-4301:0:2565
-4302:2:467
-4303:0:2565
-4304:2:468
-4305:0:2565
-4306:3:2014
-4307:0:2565
-4308:3:2015
-4309:3:2019
-4310:3:2020
-4311:3:2028
-4312:3:2029
-4313:3:2033
-4314:3:2034
-4315:3:2042
-4316:3:2047
-4317:3:2051
-4318:3:2052
-4319:3:2059
-4320:3:2060
-4321:3:2071
-4322:3:2079
-4323:3:2080
-4324:3:2084
-4325:3:2089
-4326:3:2090
-4327:0:2565
-4328:3:2102
-4329:0:2565
-4330:3:2104
-4331:0:2565
-4332:3:2105
-4333:3:2109
-4334:3:2110
-4335:3:2118
-4336:3:2119
-4337:3:2123
-4338:3:2124
-4339:3:2132
-4340:3:2137
-4341:3:2141
-4342:3:2142
-4343:3:2149
-4344:3:2150
-4345:3:2161
-4346:3:2169
-4347:3:2170
-4348:3:2174
-4349:3:2179
-4350:3:2180
-4351:0:2565
-4352:3:2192
-4353:0:2565
-4354:2:467
-4355:0:2565
-4356:1:336
-4357:0:2565
-4358:3:2013
-4359:0:2565
-4360:2:468
-4361:0:2565
-4362:3:2014
-4363:0:2565
-4364:3:2015
-4365:3:2019
-4366:3:2020
-4367:3:2028
-4368:3:2029
-4369:3:2033
-4370:3:2034
-4371:3:2042
-4372:3:2047
-4373:3:2051
-4374:3:2052
-4375:3:2059
-4376:3:2060
-4377:3:2071
-4378:3:2079
-4379:3:2080
-4380:3:2084
-4381:3:2089
-4382:3:2090
-4383:0:2565
-4384:3:2102
-4385:0:2565
-4386:3:2104
-4387:0:2565
-4388:3:2105
-4389:3:2109
-4390:3:2110
-4391:3:2118
-4392:3:2119
-4393:3:2123
-4394:3:2124
-4395:3:2132
-4396:3:2137
-4397:3:2141
-4398:3:2142
-4399:3:2149
-4400:3:2150
-4401:3:2161
-4402:3:2169
-4403:3:2170
-4404:3:2174
-4405:3:2179
-4406:3:2180
-4407:0:2565
-4408:3:2192
-4409:0:2565
-4410:2:469
-4411:0:2565
-4412:3:2013
-4413:0:2565
-4414:2:475
-4415:0:2565
-4416:2:476
-4417:0:2565
-4418:3:2014
-4419:0:2565
-4420:3:2015
-4421:3:2019
-4422:3:2020
-4423:3:2028
-4424:3:2029
-4425:3:2033
-4426:3:2034
-4427:3:2042
-4428:3:2047
-4429:3:2051
-4430:3:2052
-4431:3:2059
-4432:3:2060
-4433:3:2071
-4434:3:2079
-4435:3:2080
-4436:3:2084
-4437:3:2089
-4438:3:2090
-4439:0:2565
-4440:3:2102
-4441:0:2565
-4442:3:2104
-4443:0:2565
-4444:3:2105
-4445:3:2109
-4446:3:2110
-4447:3:2118
-4448:3:2119
-4449:3:2123
-4450:3:2124
-4451:3:2132
-4452:3:2137
-4453:3:2141
-4454:3:2142
-4455:3:2149
-4456:3:2150
-4457:3:2161
-4458:3:2169
-4459:3:2170
-4460:3:2174
-4461:3:2179
-4462:3:2180
-4463:0:2565
-4464:3:2192
-4465:0:2565
-4466:2:477
-4467:2:481
-4468:2:482
-4469:2:490
-4470:2:491
-4471:2:492
-4472:2:504
-4473:2:509
-4474:2:513
-4475:2:514
-4476:2:521
-4477:2:522
-4478:2:533
-4479:2:534
-4480:2:535
-4481:2:546
-4482:2:551
-4483:2:552
-4484:0:2565
-4485:3:2013
-4486:0:2565
-4487:3:2014
-4488:0:2565
-4489:3:2015
-4490:3:2019
-4491:3:2020
-4492:3:2028
-4493:3:2029
-4494:3:2033
-4495:3:2034
-4496:3:2042
-4497:3:2047
-4498:3:2051
-4499:3:2052
-4500:3:2059
-4501:3:2060
-4502:3:2071
-4503:3:2079
-4504:3:2080
-4505:3:2084
-4506:3:2089
-4507:3:2090
-4508:0:2565
-4509:3:2102
-4510:0:2565
-4511:3:2104
-4512:0:2565
-4513:3:2105
-4514:3:2109
-4515:3:2110
-4516:3:2118
-4517:3:2119
-4518:3:2123
-4519:3:2124
-4520:3:2132
-4521:3:2137
-4522:3:2141
-4523:3:2142
-4524:3:2149
-4525:3:2150
-4526:3:2161
-4527:3:2169
-4528:3:2170
-4529:3:2174
-4530:3:2179
-4531:3:2180
-4532:0:2565
-4533:2:564
-4534:0:2565
-4535:3:2192
-4536:0:2565
-4537:3:2013
-4538:0:2565
-4539:3:2014
-4540:0:2565
-4541:3:2015
-4542:3:2019
-4543:3:2020
-4544:3:2028
-4545:3:2029
-4546:3:2033
-4547:3:2034
-4548:3:2042
-4549:3:2047
-4550:3:2051
-4551:3:2052
-4552:3:2059
-4553:3:2060
-4554:3:2071
-4555:3:2079
-4556:3:2080
-4557:3:2084
-4558:3:2089
-4559:3:2090
-4560:0:2565
-4561:3:2102
-4562:0:2565
-4563:3:2104
-4564:0:2565
-4565:2:565
-4566:2:569
-4567:2:570
-4568:2:578
-4569:2:579
-4570:2:583
-4571:2:584
-4572:2:592
-4573:2:597
-4574:2:601
-4575:2:602
-4576:2:609
-4577:2:610
-4578:2:621
-4579:2:622
-4580:2:623
-4581:2:634
-4582:2:639
-4583:2:640
-4584:0:2565
-4585:2:744
-4586:0:2565
-4587:3:2105
-4588:3:2109
-4589:3:2110
-4590:3:2118
-4591:3:2119
-4592:3:2123
-4593:3:2124
-4594:3:2132
-4595:3:2137
-4596:3:2141
-4597:3:2142
-4598:3:2149
-4599:3:2150
-4600:3:2161
-4601:3:2169
-4602:3:2170
-4603:3:2174
-4604:3:2179
-4605:3:2180
-4606:0:2565
-4607:3:2192
-4608:0:2565
-4609:3:2013
-4610:0:2565
-4611:3:2014
-4612:0:2565
-4613:3:2015
-4614:3:2019
-4615:3:2020
-4616:3:2028
-4617:3:2029
-4618:3:2033
-4619:3:2034
-4620:3:2042
-4621:3:2047
-4622:3:2051
-4623:3:2052
-4624:3:2059
-4625:3:2060
-4626:3:2071
-4627:3:2079
-4628:3:2080
-4629:3:2084
-4630:3:2089
-4631:3:2090
-4632:0:2565
-4633:3:2102
-4634:0:2565
-4635:2:745
-4636:0:2565
-4637:2:750
-4638:0:2565
-4639:2:753
-4640:0:2565
-4641:3:2104
-4642:0:2565
-4643:3:2105
-4644:3:2109
-4645:3:2110
-4646:3:2118
-4647:3:2119
-4648:3:2123
-4649:3:2124
-4650:3:2132
-4651:3:2137
-4652:3:2141
-4653:3:2142
-4654:3:2149
-4655:3:2150
-4656:3:2161
-4657:3:2169
-4658:3:2170
-4659:3:2174
-4660:3:2179
-4661:3:2180
-4662:0:2565
-4663:3:2192
-4664:0:2565
-4665:3:2013
-4666:0:2565
-4667:3:2014
-4668:0:2565
-4669:3:2015
-4670:3:2019
-4671:3:2020
-4672:3:2028
-4673:3:2029
-4674:3:2033
-4675:3:2034
-4676:3:2042
-4677:3:2047
-4678:3:2051
-4679:3:2052
-4680:3:2059
-4681:3:2060
-4682:3:2071
-4683:3:2079
-4684:3:2080
-4685:3:2084
-4686:3:2089
-4687:3:2090
-4688:0:2565
-4689:2:758
-4690:0:2565
-4691:3:2102
-4692:0:2565
-4693:3:2104
-4694:0:2565
-4695:3:2105
-4696:3:2109
-4697:3:2110
-4698:3:2118
-4699:3:2119
-4700:3:2123
-4701:3:2124
-4702:3:2132
-4703:3:2137
-4704:3:2141
-4705:3:2142
-4706:3:2149
-4707:3:2150
-4708:3:2161
-4709:3:2169
-4710:3:2170
-4711:3:2174
-4712:3:2179
-4713:3:2180
-4714:0:2565
-4715:3:2192
-4716:0:2565
-4717:3:2013
-4718:0:2565
-4719:3:2014
-4720:0:2565
-4721:2:759
-4722:0:2565
-4723:3:2015
-4724:3:2019
-4725:3:2020
-4726:3:2028
-4727:3:2029
-4728:3:2033
-4729:3:2034
-4730:3:2042
-4731:3:2047
-4732:3:2051
-4733:3:2052
-4734:3:2059
-4735:3:2060
-4736:3:2071
-4737:3:2079
-4738:3:2080
-4739:3:2084
-4740:3:2089
-4741:3:2090
-4742:0:2565
-4743:3:2102
-4744:0:2565
-4745:3:2104
-4746:0:2565
-4747:3:2105
-4748:3:2109
-4749:3:2110
-4750:3:2118
-4751:3:2119
-4752:3:2123
-4753:3:2124
-4754:3:2132
-4755:3:2137
-4756:3:2141
-4757:3:2142
-4758:3:2149
-4759:3:2150
-4760:3:2161
-4761:3:2169
-4762:3:2170
-4763:3:2174
-4764:3:2179
-4765:3:2180
-4766:0:2565
-4767:3:2192
-4768:0:2565
-4769:3:2013
-4770:0:2565
-4771:2:760
-4772:0:2565
-4773:2:761
-4774:0:2565
-4775:2:762
-4776:0:2565
-4777:2:763
-4778:0:2565
-4779:3:2014
-4780:0:2565
-4781:3:2015
-4782:3:2019
-4783:3:2020
-4784:3:2028
-4785:3:2029
-4786:3:2033
-4787:3:2034
-4788:3:2042
-4789:3:2047
-4790:3:2051
-4791:3:2052
-4792:3:2059
-4793:3:2060
-4794:3:2071
-4795:3:2079
-4796:3:2080
-4797:3:2084
-4798:3:2089
-4799:3:2090
-4800:0:2565
-4801:3:2102
-4802:0:2565
-4803:3:2104
-4804:0:2565
-4805:3:2105
-4806:3:2109
-4807:3:2110
-4808:3:2118
-4809:3:2119
-4810:3:2123
-4811:3:2124
-4812:3:2132
-4813:3:2137
-4814:3:2141
-4815:3:2142
-4816:3:2149
-4817:3:2150
-4818:3:2161
-4819:3:2169
-4820:3:2170
-4821:3:2174
-4822:3:2179
-4823:3:2180
-4824:0:2565
-4825:3:2192
-4826:0:2565
-4827:2:765
-4828:0:2565
-4829:3:2013
-4830:0:2565
-4831:3:2014
-4832:0:2565
-4833:3:2015
-4834:3:2019
-4835:3:2020
-4836:3:2028
-4837:3:2029
-4838:3:2033
-4839:3:2034
-4840:3:2042
-4841:3:2047
-4842:3:2051
-4843:3:2052
-4844:3:2059
-4845:3:2060
-4846:3:2071
-4847:3:2079
-4848:3:2080
-4849:3:2084
-4850:3:2089
-4851:3:2090
-4852:0:2565
-4853:3:2102
-4854:0:2565
-4855:3:2104
-4856:0:2565
-4857:3:2105
-4858:3:2109
-4859:3:2110
-4860:3:2118
-4861:3:2119
-4862:3:2123
-4863:3:2124
-4864:3:2132
-4865:3:2137
-4866:3:2141
-4867:3:2142
-4868:3:2149
-4869:3:2150
-4870:3:2161
-4871:3:2169
-4872:3:2170
-4873:3:2174
-4874:3:2179
-4875:3:2180
-4876:0:2565
-4877:2:766
-4878:2:770
-4879:2:771
-4880:2:779
-4881:2:780
-4882:2:781
-4883:2:793
-4884:2:798
-4885:2:802
-4886:2:803
-4887:2:810
-4888:2:811
-4889:2:822
-4890:2:823
-4891:2:824
-4892:2:835
-4893:2:840
-4894:2:841
-4895:0:2565
-4896:3:2192
-4897:0:2565
-4898:3:2013
-4899:0:2565
-4900:3:2014
-4901:0:2565
-4902:3:2015
-4903:3:2019
-4904:3:2020
-4905:3:2028
-4906:3:2029
-4907:3:2033
-4908:3:2034
-4909:3:2042
-4910:3:2047
-4911:3:2051
-4912:3:2052
-4913:3:2059
-4914:3:2060
-4915:3:2071
-4916:3:2079
-4917:3:2080
-4918:3:2084
-4919:3:2089
-4920:3:2090
-4921:0:2565
-4922:3:2102
-4923:0:2565
-4924:3:2104
-4925:0:2565
-4926:2:853
-4927:0:2565
-4928:2:857
-4929:0:2565
-4930:2:465
-4931:0:2565
-4932:3:2105
-4933:3:2109
-4934:3:2110
-4935:3:2118
-4936:3:2119
-4937:3:2123
-4938:3:2124
-4939:3:2132
-4940:3:2137
-4941:3:2141
-4942:3:2142
-4943:3:2149
-4944:3:2150
-4945:3:2161
-4946:3:2169
-4947:3:2170
-4948:3:2174
-4949:3:2179
-4950:3:2180
-4951:0:2565
-4952:3:2192
-4953:0:2565
-4954:3:2013
-4955:0:2565
-4956:3:2014
-4957:0:2565
-4958:3:2015
-4959:3:2019
-4960:3:2020
-4961:3:2028
-4962:3:2029
-4963:3:2033
-4964:3:2034
-4965:3:2042
-4966:3:2047
-4967:3:2051
-4968:3:2052
-4969:3:2059
-4970:3:2060
-4971:3:2071
-4972:3:2079
-4973:3:2080
-4974:3:2084
-4975:3:2089
-4976:3:2090
-4977:0:2565
-4978:3:2102
-4979:0:2565
-4980:2:466
-4981:0:2565
-4982:3:2104
-4983:0:2565
-4984:3:2105
-4985:3:2109
-4986:3:2110
-4987:3:2118
-4988:3:2119
-4989:3:2123
-4990:3:2124
-4991:3:2132
-4992:3:2137
-4993:3:2141
-4994:3:2142
-4995:3:2149
-4996:3:2150
-4997:3:2161
-4998:3:2169
-4999:3:2170
-5000:3:2174
-5001:3:2179
-5002:3:2180
-5003:0:2565
-5004:3:2192
-5005:0:2565
-5006:3:2013
-5007:0:2565
-5008:3:2014
-5009:0:2565
-5010:3:2015
-5011:3:2019
-5012:3:2020
-5013:3:2028
-5014:3:2029
-5015:3:2033
-5016:3:2034
-5017:3:2042
-5018:3:2047
-5019:3:2051
-5020:3:2052
-5021:3:2059
-5022:3:2060
-5023:3:2071
-5024:3:2079
-5025:3:2080
-5026:3:2084
-5027:3:2089
-5028:3:2090
-5029:0:2565
-5030:2:467
-5031:0:2565
-5032:3:2102
-5033:0:2565
-5034:3:2104
-5035:0:2565
-5036:3:2105
-5037:3:2109
-5038:3:2110
-5039:3:2118
-5040:3:2119
-5041:3:2123
-5042:3:2124
-5043:3:2132
-5044:3:2137
-5045:3:2141
-5046:3:2142
-5047:3:2149
-5048:3:2150
-5049:3:2161
-5050:3:2169
-5051:3:2170
-5052:3:2174
-5053:3:2179
-5054:3:2180
-5055:0:2565
-5056:3:2192
-5057:0:2565
-5058:3:2013
-5059:0:2565
-5060:3:2014
-5061:0:2565
-5062:1:339
-5063:0:2565
-5064:2:468
-5065:0:2565
-5066:3:2015
-5067:3:2019
-5068:3:2020
-5069:3:2028
-5070:3:2029
-5071:3:2033
-5072:3:2034
-5073:3:2042
-5074:3:2047
-5075:3:2051
-5076:3:2052
-5077:3:2059
-5078:3:2060
-5079:3:2071
-5080:3:2079
-5081:3:2080
-5082:3:2084
-5083:3:2089
-5084:3:2090
-5085:0:2565
-5086:3:2102
-5087:0:2565
-5088:3:2104
-5089:0:2565
-5090:3:2105
-5091:3:2109
-5092:3:2110
-5093:3:2118
-5094:3:2119
-5095:3:2123
-5096:3:2124
-5097:3:2132
-5098:3:2137
-5099:3:2141
-5100:3:2142
-5101:3:2149
-5102:3:2150
-5103:3:2161
-5104:3:2169
-5105:3:2170
-5106:3:2174
-5107:3:2179
-5108:3:2180
-5109:0:2565
-5110:3:2192
-5111:0:2565
-5112:3:2013
-5113:0:2565
-5114:3:2014
-5115:0:2565
-5116:2:467
-5117:0:2565
-5118:2:468
-5119:0:2565
-5120:3:2015
-5121:3:2019
-5122:3:2020
-5123:3:2028
-5124:3:2029
-5125:3:2033
-5126:3:2034
-5127:3:2042
-5128:3:2047
-5129:3:2051
-5130:3:2052
-5131:3:2059
-5132:3:2060
-5133:3:2071
-5134:3:2079
-5135:3:2080
-5136:3:2084
-5137:3:2089
-5138:3:2090
-5139:0:2565
-5140:3:2102
-5141:0:2565
-5142:3:2104
-5143:0:2565
-5144:3:2105
-5145:3:2109
-5146:3:2110
-5147:3:2118
-5148:3:2119
-5149:3:2123
-5150:3:2124
-5151:3:2132
-5152:3:2137
-5153:3:2141
-5154:3:2142
-5155:3:2149
-5156:3:2150
-5157:3:2161
-5158:3:2169
-5159:3:2170
-5160:3:2174
-5161:3:2179
-5162:3:2180
-5163:0:2565
-5164:3:2192
-5165:0:2565
-5166:3:2013
-5167:0:2565
-5168:2:467
-5169:0:2565
-5170:1:345
-5171:0:2565
-5172:2:468
-5173:0:2565
-5174:3:2014
-5175:0:2565
-5176:3:2015
-5177:3:2019
-5178:3:2020
-5179:3:2028
-5180:3:2029
-5181:3:2033
-5182:3:2034
-5183:3:2042
-5184:3:2047
-5185:3:2051
-5186:3:2052
-5187:3:2059
-5188:3:2060
-5189:3:2071
-5190:3:2079
-5191:3:2080
-5192:3:2084
-5193:3:2089
-5194:3:2090
-5195:0:2565
-5196:3:2102
-5197:0:2565
-5198:3:2104
-5199:0:2565
-5200:3:2105
-5201:3:2109
-5202:3:2110
-5203:3:2118
-5204:3:2119
-5205:3:2123
-5206:3:2124
-5207:3:2132
-5208:3:2137
-5209:3:2141
-5210:3:2142
-5211:3:2149
-5212:3:2150
-5213:3:2161
-5214:3:2169
-5215:3:2170
-5216:3:2174
-5217:3:2179
-5218:3:2180
-5219:0:2565
-5220:3:2192
-5221:0:2565
-5222:3:2013
-5223:0:2565
-5224:2:467
-5225:0:2565
-5226:2:468
-5227:0:2565
-5228:3:2014
-5229:0:2565
-5230:3:2015
-5231:3:2019
-5232:3:2020
-5233:3:2028
-5234:3:2029
-5235:3:2033
-5236:3:2034
-5237:3:2042
-5238:3:2047
-5239:3:2051
-5240:3:2052
-5241:3:2059
-5242:3:2060
-5243:3:2071
-5244:3:2079
-5245:3:2080
-5246:3:2084
-5247:3:2089
-5248:3:2090
-5249:0:2565
-5250:3:2102
-5251:0:2565
-5252:3:2104
-5253:0:2565
-5254:3:2105
-5255:3:2109
-5256:3:2110
-5257:3:2118
-5258:3:2119
-5259:3:2123
-5260:3:2124
-5261:3:2132
-5262:3:2137
-5263:3:2141
-5264:3:2142
-5265:3:2149
-5266:3:2150
-5267:3:2161
-5268:3:2169
-5269:3:2170
-5270:3:2174
-5271:3:2179
-5272:3:2180
-5273:0:2565
-5274:3:2192
-5275:0:2565
-5276:2:467
-5277:0:2565
-5278:1:346
-5279:1:350
-5280:1:351
-5281:1:359
-5282:1:360
-5283:1:361
-5284:1:373
-5285:1:378
-5286:1:382
-5287:1:383
-5288:1:390
-5289:1:391
-5290:1:402
-5291:1:403
-5292:1:404
-5293:1:415
-5294:1:420
-5295:1:421
-5296:0:2565
-5297:3:2013
-5298:0:2565
-5299:2:468
-5300:0:2565
-5301:3:2014
-5302:0:2565
-5303:3:2015
-5304:3:2019
-5305:3:2020
-5306:3:2028
-5307:3:2029
-5308:3:2033
-5309:3:2034
-5310:3:2042
-5311:3:2047
-5312:3:2051
-5313:3:2052
-5314:3:2059
-5315:3:2060
-5316:3:2071
-5317:3:2079
-5318:3:2080
-5319:3:2084
-5320:3:2089
-5321:3:2090
-5322:0:2565
-5323:3:2102
-5324:0:2565
-5325:3:2104
-5326:0:2565
-5327:3:2105
-5328:3:2109
-5329:3:2110
-5330:3:2118
-5331:3:2119
-5332:3:2123
-5333:3:2124
-5334:3:2132
-5335:3:2137
-5336:3:2141
-5337:3:2142
-5338:3:2149
-5339:3:2150
-5340:3:2161
-5341:3:2169
-5342:3:2170
-5343:3:2174
-5344:3:2179
-5345:3:2180
-5346:0:2565
-5347:3:2192
-5348:0:2565
-5349:2:467
-5350:0:2565
-5351:3:2013
-5352:0:2565
-5353:3:2014
-5354:0:2565
-5355:3:2015
-5356:3:2019
-5357:3:2020
-5358:3:2028
-5359:3:2029
-5360:3:2033
-5361:3:2034
-5362:3:2042
-5363:3:2047
-5364:3:2051
-5365:3:2052
-5366:3:2059
-5367:3:2060
-5368:3:2071
-5369:3:2079
-5370:3:2080
-5371:3:2084
-5372:3:2089
-5373:3:2090
-5374:0:2565
-5375:3:2102
-5376:0:2565
-5377:3:2104
-5378:0:2565
-5379:3:2105
-5380:3:2109
-5381:3:2110
-5382:3:2118
-5383:3:2119
-5384:3:2123
-5385:3:2124
-5386:3:2132
-5387:3:2137
-5388:3:2141
-5389:3:2142
-5390:3:2149
-5391:3:2150
-5392:3:2161
-5393:3:2169
-5394:3:2170
-5395:3:2174
-5396:3:2179
-5397:3:2180
-5398:0:2565
-5399:1:433
-5400:0:2565
-5401:3:2192
-5402:0:2565
-5403:3:2013
-5404:0:2565
-5405:2:468
-5406:0:2565
-5407:3:2014
-5408:0:2565
-5409:3:2015
-5410:3:2019
-5411:3:2020
-5412:3:2028
-5413:3:2029
-5414:3:2033
-5415:3:2034
-5416:3:2042
-5417:3:2047
-5418:3:2051
-5419:3:2052
-5420:3:2059
-5421:3:2060
-5422:3:2071
-5423:3:2079
-5424:3:2080
-5425:3:2084
-5426:3:2089
-5427:3:2090
-5428:0:2565
-5429:3:2102
-5430:0:2565
-5431:3:2104
-5432:0:2565
-5433:3:2105
-5434:3:2109
-5435:3:2110
-5436:3:2118
-5437:3:2119
-5438:3:2123
-5439:3:2124
-5440:3:2132
-5441:3:2137
-5442:3:2141
-5443:3:2142
-5444:3:2149
-5445:3:2150
-5446:3:2161
-5447:3:2169
-5448:3:2170
-5449:3:2174
-5450:3:2179
-5451:3:2180
-5452:0:2565
-5453:3:2192
-5454:0:2565
-5455:2:469
-5456:0:2565
-5457:3:2013
-5458:0:2565
-5459:2:475
-5460:0:2565
-5461:2:476
-5462:0:2565
-5463:3:2014
-5464:0:2565
-5465:3:2015
-5466:3:2019
-5467:3:2020
-5468:3:2028
-5469:3:2029
-5470:3:2033
-5471:3:2034
-5472:3:2042
-5473:3:2047
-5474:3:2051
-5475:3:2052
-5476:3:2059
-5477:3:2060
-5478:3:2071
-5479:3:2079
-5480:3:2080
-5481:3:2084
-5482:3:2089
-5483:3:2090
-5484:0:2565
-5485:3:2102
-5486:0:2565
-5487:3:2104
-5488:0:2565
-5489:3:2105
-5490:3:2109
-5491:3:2110
-5492:3:2118
-5493:3:2119
-5494:3:2123
-5495:3:2124
-5496:3:2132
-5497:3:2137
-5498:3:2141
-5499:3:2142
-5500:3:2149
-5501:3:2150
-5502:3:2161
-5503:3:2169
-5504:3:2170
-5505:3:2174
-5506:3:2179
-5507:3:2180
-5508:0:2565
-5509:3:2192
-5510:0:2565
-5511:2:477
-5512:2:481
-5513:2:482
-5514:2:490
-5515:2:491
-5516:2:495
-5517:2:496
-5518:2:504
-5519:2:509
-5520:2:513
-5521:2:514
-5522:2:521
-5523:2:522
-5524:2:533
-5525:2:534
-5526:2:535
-5527:2:546
-5528:2:551
-5529:2:552
-5530:0:2565
-5531:3:2013
-5532:0:2565
-5533:3:2014
-5534:0:2565
-5535:3:2015
-5536:3:2019
-5537:3:2020
-5538:3:2028
-5539:3:2029
-5540:3:2033
-5541:3:2034
-5542:3:2042
-5543:3:2047
-5544:3:2051
-5545:3:2052
-5546:3:2059
-5547:3:2060
-5548:3:2071
-5549:3:2079
-5550:3:2080
-5551:3:2084
-5552:3:2089
-5553:3:2090
-5554:0:2565
-5555:3:2102
-5556:0:2565
-5557:3:2104
-5558:0:2565
-5559:3:2105
-5560:3:2109
-5561:3:2110
-5562:3:2118
-5563:3:2119
-5564:3:2123
-5565:3:2124
-5566:3:2132
-5567:3:2137
-5568:3:2141
-5569:3:2142
-5570:3:2149
-5571:3:2150
-5572:3:2161
-5573:3:2169
-5574:3:2170
-5575:3:2174
-5576:3:2179
-5577:3:2180
-5578:0:2565
-5579:2:564
-5580:0:2565
-5581:3:2192
-5582:0:2565
-5583:3:2013
-5584:0:2565
-5585:3:2014
-5586:0:2565
-5587:3:2015
-5588:3:2019
-5589:3:2020
-5590:3:2028
-5591:3:2029
-5592:3:2033
-5593:3:2034
-5594:3:2042
-5595:3:2047
-5596:3:2051
-5597:3:2052
-5598:3:2059
-5599:3:2060
-5600:3:2071
-5601:3:2079
-5602:3:2080
-5603:3:2084
-5604:3:2089
-5605:3:2090
-5606:0:2565
-5607:3:2102
-5608:0:2565
-5609:3:2104
-5610:0:2565
-5611:2:565
-5612:2:569
-5613:2:570
-5614:2:578
-5615:2:579
-5616:2:583
-5617:2:584
-5618:2:592
-5619:2:597
-5620:2:601
-5621:2:602
-5622:2:609
-5623:2:610
-5624:2:621
-5625:2:622
-5626:2:623
-5627:2:634
-5628:2:639
-5629:2:640
-5630:0:2565
-5631:2:744
-5632:0:2565
-5633:3:2105
-5634:3:2109
-5635:3:2110
-5636:3:2118
-5637:3:2119
-5638:3:2123
-5639:3:2124
-5640:3:2132
-5641:3:2137
-5642:3:2141
-5643:3:2142
-5644:3:2149
-5645:3:2150
-5646:3:2161
-5647:3:2169
-5648:3:2170
-5649:3:2174
-5650:3:2179
-5651:3:2180
-5652:0:2565
-5653:3:2192
-5654:0:2565
-5655:3:2013
-5656:0:2565
-5657:3:2014
-5658:0:2565
-5659:3:2015
-5660:3:2019
-5661:3:2020
-5662:3:2028
-5663:3:2029
-5664:3:2033
-5665:3:2034
-5666:3:2042
-5667:3:2047
-5668:3:2051
-5669:3:2052
-5670:3:2059
-5671:3:2060
-5672:3:2071
-5673:3:2079
-5674:3:2080
-5675:3:2084
-5676:3:2089
-5677:3:2090
-5678:0:2565
-5679:3:2102
-5680:0:2565
-5681:2:745
-5682:0:2565
-5683:2:750
-5684:0:2565
-5685:2:753
-5686:0:2565
-5687:3:2104
-5688:0:2565
-5689:3:2105
-5690:3:2109
-5691:3:2110
-5692:3:2118
-5693:3:2119
-5694:3:2123
-5695:3:2124
-5696:3:2132
-5697:3:2137
-5698:3:2141
-5699:3:2142
-5700:3:2149
-5701:3:2150
-5702:3:2161
-5703:3:2169
-5704:3:2170
-5705:3:2174
-5706:3:2179
-5707:3:2180
-5708:0:2565
-5709:3:2192
-5710:0:2565
-5711:3:2013
-5712:0:2565
-5713:3:2014
-5714:0:2565
-5715:3:2015
-5716:3:2019
-5717:3:2020
-5718:3:2028
-5719:3:2029
-5720:3:2033
-5721:3:2034
-5722:3:2042
-5723:3:2047
-5724:3:2051
-5725:3:2052
-5726:3:2059
-5727:3:2060
-5728:3:2071
-5729:3:2079
-5730:3:2080
-5731:3:2084
-5732:3:2089
-5733:3:2090
-5734:0:2565
-5735:2:758
-5736:0:2565
-5737:3:2102
-5738:0:2565
-5739:3:2104
-5740:0:2565
-5741:3:2105
-5742:3:2109
-5743:3:2110
-5744:3:2118
-5745:3:2119
-5746:3:2123
-5747:3:2124
-5748:3:2132
-5749:3:2137
-5750:3:2141
-5751:3:2142
-5752:3:2149
-5753:3:2150
-5754:3:2161
-5755:3:2169
-5756:3:2170
-5757:3:2174
-5758:3:2179
-5759:3:2180
-5760:0:2565
-5761:3:2192
-5762:0:2565
-5763:3:2013
-5764:0:2565
-5765:3:2014
-5766:0:2565
-5767:2:759
-5768:0:2565
-5769:3:2015
-5770:3:2019
-5771:3:2020
-5772:3:2028
-5773:3:2029
-5774:3:2033
-5775:3:2034
-5776:3:2042
-5777:3:2047
-5778:3:2051
-5779:3:2052
-5780:3:2059
-5781:3:2060
-5782:3:2071
-5783:3:2079
-5784:3:2080
-5785:3:2084
-5786:3:2089
-5787:3:2090
-5788:0:2565
-5789:3:2102
-5790:0:2565
-5791:3:2104
-5792:0:2565
-5793:3:2105
-5794:3:2109
-5795:3:2110
-5796:3:2118
-5797:3:2119
-5798:3:2123
-5799:3:2124
-5800:3:2132
-5801:3:2137
-5802:3:2141
-5803:3:2142
-5804:3:2149
-5805:3:2150
-5806:3:2161
-5807:3:2169
-5808:3:2170
-5809:3:2174
-5810:3:2179
-5811:3:2180
-5812:0:2565
-5813:3:2192
-5814:0:2565
-5815:3:2013
-5816:0:2565
-5817:2:760
-5818:0:2565
-5819:2:761
-5820:0:2565
-5821:2:762
-5822:0:2565
-5823:2:763
-5824:0:2565
-5825:3:2014
-5826:0:2565
-5827:3:2015
-5828:3:2019
-5829:3:2020
-5830:3:2028
-5831:3:2029
-5832:3:2033
-5833:3:2034
-5834:3:2042
-5835:3:2047
-5836:3:2051
-5837:3:2052
-5838:3:2059
-5839:3:2060
-5840:3:2071
-5841:3:2079
-5842:3:2080
-5843:3:2084
-5844:3:2089
-5845:3:2090
-5846:0:2565
-5847:3:2102
-5848:0:2565
-5849:3:2104
-5850:0:2565
-5851:3:2105
-5852:3:2109
-5853:3:2110
-5854:3:2118
-5855:3:2119
-5856:3:2123
-5857:3:2124
-5858:3:2132
-5859:3:2137
-5860:3:2141
-5861:3:2142
-5862:3:2149
-5863:3:2150
-5864:3:2161
-5865:3:2169
-5866:3:2170
-5867:3:2174
-5868:3:2179
-5869:3:2180
-5870:0:2565
-5871:3:2192
-5872:0:2565
-5873:2:765
-5874:0:2565
-5875:3:2013
-5876:0:2565
-5877:3:2014
-5878:0:2565
-5879:3:2015
-5880:3:2019
-5881:3:2020
-5882:3:2028
-5883:3:2029
-5884:3:2033
-5885:3:2034
-5886:3:2042
-5887:3:2047
-5888:3:2051
-5889:3:2052
-5890:3:2059
-5891:3:2060
-5892:3:2071
-5893:3:2079
-5894:3:2080
-5895:3:2084
-5896:3:2089
-5897:3:2090
-5898:0:2565
-5899:3:2102
-5900:0:2565
-5901:3:2104
-5902:0:2565
-5903:3:2105
-5904:3:2109
-5905:3:2110
-5906:3:2118
-5907:3:2119
-5908:3:2123
-5909:3:2124
-5910:3:2132
-5911:3:2137
-5912:3:2141
-5913:3:2142
-5914:3:2149
-5915:3:2150
-5916:3:2161
-5917:3:2169
-5918:3:2170
-5919:3:2174
-5920:3:2179
-5921:3:2180
-5922:0:2565
-5923:2:766
-5924:2:770
-5925:2:771
-5926:2:779
-5927:2:780
-5928:2:781
-5929:2:793
-5930:2:798
-5931:2:802
-5932:2:803
-5933:2:810
-5934:2:811
-5935:2:822
-5936:2:823
-5937:2:824
-5938:2:835
-5939:2:840
-5940:2:841
-5941:0:2565
-5942:3:2192
-5943:0:2565
-5944:3:2013
-5945:0:2565
-5946:3:2014
-5947:0:2565
-5948:3:2015
-5949:3:2019
-5950:3:2020
-5951:3:2028
-5952:3:2029
-5953:3:2033
-5954:3:2034
-5955:3:2042
-5956:3:2047
-5957:3:2051
-5958:3:2052
-5959:3:2059
-5960:3:2060
-5961:3:2071
-5962:3:2079
-5963:3:2080
-5964:3:2084
-5965:3:2089
-5966:3:2090
-5967:0:2565
-5968:3:2102
-5969:0:2565
-5970:3:2104
-5971:0:2565
-5972:2:853
-5973:0:2565
-5974:2:857
-5975:0:2565
-5976:2:465
-5977:0:2565
-5978:3:2105
-5979:3:2109
-5980:3:2110
-5981:3:2118
-5982:3:2119
-5983:3:2123
-5984:3:2124
-5985:3:2132
-5986:3:2137
-5987:3:2141
-5988:3:2142
-5989:3:2149
-5990:3:2150
-5991:3:2161
-5992:3:2169
-5993:3:2170
-5994:3:2174
-5995:3:2179
-5996:3:2180
-5997:0:2565
-5998:3:2192
-5999:0:2565
-6000:3:2013
-6001:0:2565
-6002:3:2014
-6003:0:2565
-6004:3:2015
-6005:3:2019
-6006:3:2020
-6007:3:2028
-6008:3:2029
-6009:3:2033
-6010:3:2034
-6011:3:2042
-6012:3:2047
-6013:3:2051
-6014:3:2052
-6015:3:2059
-6016:3:2060
-6017:3:2071
-6018:3:2079
-6019:3:2080
-6020:3:2084
-6021:3:2089
-6022:3:2090
-6023:0:2565
-6024:3:2102
-6025:0:2565
-6026:2:466
-6027:0:2565
-6028:3:2104
-6029:0:2565
-6030:3:2105
-6031:3:2109
-6032:3:2110
-6033:3:2118
-6034:3:2119
-6035:3:2123
-6036:3:2124
-6037:3:2132
-6038:3:2137
-6039:3:2141
-6040:3:2142
-6041:3:2149
-6042:3:2150
-6043:3:2161
-6044:3:2169
-6045:3:2170
-6046:3:2174
-6047:3:2179
-6048:3:2180
-6049:0:2565
-6050:3:2192
-6051:0:2565
-6052:3:2013
-6053:0:2565
-6054:3:2014
-6055:0:2565
-6056:3:2015
-6057:3:2019
-6058:3:2020
-6059:3:2028
-6060:3:2029
-6061:3:2033
-6062:3:2034
-6063:3:2042
-6064:3:2047
-6065:3:2051
-6066:3:2052
-6067:3:2059
-6068:3:2060
-6069:3:2071
-6070:3:2079
-6071:3:2080
-6072:3:2084
-6073:3:2089
-6074:3:2090
-6075:0:2565
-6076:2:467
-6077:0:2565
-6078:3:2102
-6079:0:2565
-6080:3:2104
-6081:0:2565
-6082:3:2105
-6083:3:2109
-6084:3:2110
-6085:3:2118
-6086:3:2119
-6087:3:2123
-6088:3:2124
-6089:3:2132
-6090:3:2137
-6091:3:2141
-6092:3:2142
-6093:3:2149
-6094:3:2150
-6095:3:2161
-6096:3:2169
-6097:3:2170
-6098:3:2174
-6099:3:2179
-6100:3:2180
-6101:0:2565
-6102:3:2192
-6103:0:2565
-6104:3:2013
-6105:0:2565
-6106:3:2014
-6107:0:2565
-6108:1:436
-6109:0:2565
-6110:2:468
-6111:0:2565
-6112:3:2015
-6113:3:2019
-6114:3:2020
-6115:3:2028
-6116:3:2029
-6117:3:2033
-6118:3:2034
-6119:3:2042
-6120:3:2047
-6121:3:2051
-6122:3:2052
-6123:3:2059
-6124:3:2060
-6125:3:2071
-6126:3:2079
-6127:3:2080
-6128:3:2084
-6129:3:2089
-6130:3:2090
-6131:0:2565
-6132:3:2102
-6133:0:2565
-6134:3:2104
-6135:0:2565
-6136:3:2105
-6137:3:2109
-6138:3:2110
-6139:3:2118
-6140:3:2119
-6141:3:2123
-6142:3:2124
-6143:3:2132
-6144:3:2137
-6145:3:2141
-6146:3:2142
-6147:3:2149
-6148:3:2150
-6149:3:2161
-6150:3:2169
-6151:3:2170
-6152:3:2174
-6153:3:2179
-6154:3:2180
-6155:0:2565
-6156:3:2192
-6157:0:2565
-6158:3:2013
-6159:0:2565
-6160:3:2014
-6161:0:2565
-6162:2:467
-6163:0:2565
-6164:2:468
-6165:0:2565
-6166:3:2015
-6167:3:2019
-6168:3:2020
-6169:3:2028
-6170:3:2029
-6171:3:2033
-6172:3:2034
-6173:3:2042
-6174:3:2047
-6175:3:2051
-6176:3:2052
-6177:3:2059
-6178:3:2060
-6179:3:2071
-6180:3:2079
-6181:3:2080
-6182:3:2084
-6183:3:2089
-6184:3:2090
-6185:0:2565
-6186:3:2102
-6187:0:2565
-6188:3:2104
-6189:0:2565
-6190:3:2105
-6191:3:2109
-6192:3:2110
-6193:3:2118
-6194:3:2119
-6195:3:2123
-6196:3:2124
-6197:3:2132
-6198:3:2137
-6199:3:2141
-6200:3:2142
-6201:3:2149
-6202:3:2150
-6203:3:2161
-6204:3:2169
-6205:3:2170
-6206:3:2174
-6207:3:2179
-6208:3:2180
-6209:0:2565
-6210:3:2192
-6211:0:2565
-6212:3:2013
-6213:0:2565
-6214:2:467
-6215:0:2565
-6216:1:442
-6217:0:2565
-6218:2:468
-6219:0:2565
-6220:1:446
-6221:0:2565
-6222:1:9
-6223:0:2565
-6224:1:10
-6225:0:2565
-6226:1:11
-6227:0:2565
-6228:3:2014
-6229:0:2565
-6230:3:2015
-6231:3:2019
-6232:3:2020
-6233:3:2028
-6234:3:2029
-6235:3:2033
-6236:3:2034
-6237:3:2042
-6238:3:2047
-6239:3:2051
-6240:3:2052
-6241:3:2059
-6242:3:2060
-6243:3:2071
-6244:3:2079
-6245:3:2080
-6246:3:2084
-6247:3:2089
-6248:3:2090
-6249:0:2565
-6250:3:2102
-6251:0:2565
-6252:3:2104
-6253:0:2565
-6254:3:2105
-6255:3:2109
-6256:3:2110
-6257:3:2118
-6258:3:2119
-6259:3:2123
-6260:3:2124
-6261:3:2132
-6262:3:2137
-6263:3:2141
-6264:3:2142
-6265:3:2149
-6266:3:2150
-6267:3:2161
-6268:3:2169
-6269:3:2170
-6270:3:2174
-6271:3:2179
-6272:3:2180
-6273:0:2565
-6274:3:2192
-6275:0:2565
-6276:3:2013
-6277:0:2565
-6278:2:467
-6279:0:2565
-6280:2:468
-6281:0:2565
-6282:3:2014
-6283:0:2565
-6284:3:2015
-6285:3:2019
-6286:3:2020
-6287:3:2028
-6288:3:2029
-6289:3:2033
-6290:3:2034
-6291:3:2042
-6292:3:2047
-6293:3:2051
-6294:3:2052
-6295:3:2059
-6296:3:2060
-6297:3:2071
-6298:3:2079
-6299:3:2080
-6300:3:2084
-6301:3:2089
-6302:3:2090
-6303:0:2565
-6304:3:2102
-6305:0:2565
-6306:3:2104
-6307:0:2565
-6308:3:2105
-6309:3:2109
-6310:3:2110
-6311:3:2118
-6312:3:2119
-6313:3:2123
-6314:3:2124
-6315:3:2132
-6316:3:2137
-6317:3:2141
-6318:3:2142
-6319:3:2149
-6320:3:2150
-6321:3:2161
-6322:3:2169
-6323:3:2170
-6324:3:2174
-6325:3:2179
-6326:3:2180
-6327:0:2565
-6328:3:2192
-6329:0:2565
-6330:2:467
-6331:0:2565
-6332:1:12
-6333:1:16
-6334:1:17
-6335:1:25
-6336:1:26
-6337:1:27
-6338:1:39
-6339:1:44
-6340:1:48
-6341:1:49
-6342:1:56
-6343:1:57
-6344:1:68
-6345:1:69
-6346:1:70
-6347:1:81
-6348:1:86
-6349:1:87
-6350:0:2565
-6351:3:2013
-6352:0:2565
-6353:2:468
-6354:0:2565
-6355:3:2014
-6356:0:2565
-6357:3:2015
-6358:3:2019
-6359:3:2020
-6360:3:2028
-6361:3:2029
-6362:3:2033
-6363:3:2034
-6364:3:2042
-6365:3:2047
-6366:3:2051
-6367:3:2052
-6368:3:2059
-6369:3:2060
-6370:3:2071
-6371:3:2079
-6372:3:2080
-6373:3:2084
-6374:3:2089
-6375:3:2090
-6376:0:2565
-6377:3:2102
-6378:0:2565
-6379:3:2104
-6380:0:2565
-6381:3:2105
-6382:3:2109
-6383:3:2110
-6384:3:2118
-6385:3:2119
-6386:3:2123
-6387:3:2124
-6388:3:2132
-6389:3:2137
-6390:3:2141
-6391:3:2142
-6392:3:2149
-6393:3:2150
-6394:3:2161
-6395:3:2169
-6396:3:2170
-6397:3:2174
-6398:3:2179
-6399:3:2180
-6400:0:2565
-6401:3:2192
-6402:0:2565
-6403:2:467
-6404:0:2565
-6405:3:2013
-6406:0:2565
-6407:3:2014
-6408:0:2565
-6409:3:2015
-6410:3:2019
-6411:3:2020
-6412:3:2028
-6413:3:2029
-6414:3:2033
-6415:3:2034
-6416:3:2042
-6417:3:2047
-6418:3:2051
-6419:3:2052
-6420:3:2059
-6421:3:2060
-6422:3:2071
-6423:3:2079
-6424:3:2080
-6425:3:2084
-6426:3:2089
-6427:3:2090
-6428:0:2565
-6429:3:2102
-6430:0:2565
-6431:3:2104
-6432:0:2565
-6433:3:2105
-6434:3:2109
-6435:3:2110
-6436:3:2118
-6437:3:2119
-6438:3:2123
-6439:3:2124
-6440:3:2132
-6441:3:2137
-6442:3:2141
-6443:3:2142
-6444:3:2149
-6445:3:2150
-6446:3:2161
-6447:3:2169
-6448:3:2170
-6449:3:2174
-6450:3:2179
-6451:3:2180
-6452:0:2565
-6453:1:99
-6454:0:2565
-6455:3:2192
-6456:0:2565
-6457:3:2013
-6458:0:2565
-6459:2:468
-6460:0:2565
-6461:3:2014
-6462:0:2565
-6463:3:2015
-6464:3:2019
-6465:3:2020
-6466:3:2028
-6467:3:2029
-6468:3:2033
-6469:3:2034
-6470:3:2042
-6471:3:2047
-6472:3:2051
-6473:3:2052
-6474:3:2059
-6475:3:2060
-6476:3:2071
-6477:3:2079
-6478:3:2080
-6479:3:2084
-6480:3:2089
-6481:3:2090
-6482:0:2565
-6483:3:2102
-6484:0:2565
-6485:3:2104
-6486:0:2565
-6487:3:2105
-6488:3:2109
-6489:3:2110
-6490:3:2118
-6491:3:2119
-6492:3:2123
-6493:3:2124
-6494:3:2132
-6495:3:2137
-6496:3:2141
-6497:3:2142
-6498:3:2149
-6499:3:2150
-6500:3:2161
-6501:3:2169
-6502:3:2170
-6503:3:2174
-6504:3:2179
-6505:3:2180
-6506:0:2565
-6507:3:2192
-6508:0:2565
-6509:2:469
-6510:0:2565
-6511:3:2013
-6512:0:2565
-6513:2:475
-6514:0:2565
-6515:2:476
-6516:0:2565
-6517:3:2014
-6518:0:2565
-6519:3:2015
-6520:3:2019
-6521:3:2020
-6522:3:2028
-6523:3:2029
-6524:3:2033
-6525:3:2034
-6526:3:2042
-6527:3:2047
-6528:3:2051
-6529:3:2052
-6530:3:2059
-6531:3:2060
-6532:3:2071
-6533:3:2079
-6534:3:2080
-6535:3:2084
-6536:3:2089
-6537:3:2090
-6538:0:2565
-6539:3:2102
-6540:0:2565
-6541:3:2104
-6542:0:2565
-6543:3:2105
-6544:3:2109
-6545:3:2110
-6546:3:2118
-6547:3:2119
-6548:3:2123
-6549:3:2124
-6550:3:2132
-6551:3:2137
-6552:3:2141
-6553:3:2142
-6554:3:2149
-6555:3:2150
-6556:3:2161
-6557:3:2169
-6558:3:2170
-6559:3:2174
-6560:3:2179
-6561:3:2180
-6562:0:2565
-6563:3:2192
-6564:0:2565
-6565:2:477
-6566:2:481
-6567:2:482
-6568:2:490
-6569:2:491
-6570:2:495
-6571:2:496
-6572:2:504
-6573:2:509
-6574:2:513
-6575:2:514
-6576:2:521
-6577:2:522
-6578:2:533
-6579:2:534
-6580:2:535
-6581:2:546
-6582:2:551
-6583:2:552
-6584:0:2565
-6585:3:2013
-6586:0:2565
-6587:3:2014
-6588:0:2565
-6589:3:2015
-6590:3:2019
-6591:3:2020
-6592:3:2028
-6593:3:2029
-6594:3:2033
-6595:3:2034
-6596:3:2042
-6597:3:2047
-6598:3:2051
-6599:3:2052
-6600:3:2059
-6601:3:2060
-6602:3:2071
-6603:3:2079
-6604:3:2080
-6605:3:2084
-6606:3:2089
-6607:3:2090
-6608:0:2565
-6609:3:2102
-6610:0:2565
-6611:3:2104
-6612:0:2565
-6613:3:2105
-6614:3:2109
-6615:3:2110
-6616:3:2118
-6617:3:2119
-6618:3:2123
-6619:3:2124
-6620:3:2132
-6621:3:2137
-6622:3:2141
-6623:3:2142
-6624:3:2149
-6625:3:2150
-6626:3:2161
-6627:3:2169
-6628:3:2170
-6629:3:2174
-6630:3:2179
-6631:3:2180
-6632:0:2565
-6633:2:564
-6634:0:2565
-6635:3:2192
-6636:0:2565
-6637:3:2013
-6638:0:2565
-6639:3:2014
-6640:0:2565
-6641:3:2015
-6642:3:2019
-6643:3:2020
-6644:3:2028
-6645:3:2029
-6646:3:2033
-6647:3:2034
-6648:3:2042
-6649:3:2047
-6650:3:2051
-6651:3:2052
-6652:3:2059
-6653:3:2060
-6654:3:2071
-6655:3:2079
-6656:3:2080
-6657:3:2084
-6658:3:2089
-6659:3:2090
-6660:0:2565
-6661:3:2102
-6662:0:2565
-6663:3:2104
-6664:0:2565
-6665:2:565
-6666:2:569
-6667:2:570
-6668:2:578
-6669:2:579
-6670:2:583
-6671:2:584
-6672:2:592
-6673:2:597
-6674:2:601
-6675:2:602
-6676:2:609
-6677:2:610
-6678:2:621
-6679:2:622
-6680:2:623
-6681:2:634
-6682:2:639
-6683:2:640
-6684:0:2565
-6685:2:652
-6686:0:2565
-6687:3:2105
-6688:3:2109
-6689:3:2110
-6690:3:2118
-6691:3:2119
-6692:3:2123
-6693:3:2124
-6694:3:2132
-6695:3:2137
-6696:3:2141
-6697:3:2142
-6698:3:2149
-6699:3:2150
-6700:3:2161
-6701:3:2169
-6702:3:2170
-6703:3:2174
-6704:3:2179
-6705:3:2180
-6706:0:2565
-6707:3:2192
-6708:0:2565
-6709:3:2013
-6710:0:2565
-6711:3:2014
-6712:0:2565
-6713:3:2015
-6714:3:2019
-6715:3:2020
-6716:3:2028
-6717:3:2029
-6718:3:2033
-6719:3:2034
-6720:3:2042
-6721:3:2047
-6722:3:2051
-6723:3:2052
-6724:3:2059
-6725:3:2060
-6726:3:2071
-6727:3:2079
-6728:3:2080
-6729:3:2084
-6730:3:2089
-6731:3:2090
-6732:0:2565
-6733:3:2102
-6734:0:2565
-6735:2:653
-6736:0:2565
-6737:3:2104
-6738:0:2565
-6739:3:2105
-6740:3:2109
-6741:3:2110
-6742:3:2118
-6743:3:2119
-6744:3:2123
-6745:3:2124
-6746:3:2132
-6747:3:2137
-6748:3:2141
-6749:3:2142
-6750:3:2149
-6751:3:2150
-6752:3:2161
-6753:3:2169
-6754:3:2170
-6755:3:2174
-6756:3:2179
-6757:3:2180
-6758:0:2565
-6759:3:2192
-6760:0:2565
-6761:3:2013
-6762:0:2565
-6763:3:2014
-6764:0:2565
-6765:3:2015
-6766:3:2019
-6767:3:2020
-6768:3:2028
-6769:3:2029
-6770:3:2033
-6771:3:2034
-6772:3:2042
-6773:3:2047
-6774:3:2051
-6775:3:2052
-6776:3:2059
-6777:3:2060
-6778:3:2071
-6779:3:2079
-6780:3:2080
-6781:3:2084
-6782:3:2089
-6783:3:2090
-6784:0:2565
-6785:2:654
-6786:2:658
-6787:2:659
-6788:2:667
-6789:2:668
-6790:2:672
-6791:2:673
-6792:2:681
-6793:2:686
-6794:2:690
-6795:2:691
-6796:2:698
-6797:2:699
-6798:2:710
-6799:2:711
-6800:2:712
-6801:2:723
-6802:2:728
-6803:2:729
-6804:0:2565
-6805:3:2102
-6806:0:2565
-6807:3:2104
-6808:0:2565
-6809:3:2105
-6810:3:2109
-6811:3:2110
-6812:3:2118
-6813:3:2119
-6814:3:2123
-6815:3:2124
-6816:3:2132
-6817:3:2137
-6818:3:2141
-6819:3:2142
-6820:3:2149
-6821:3:2150
-6822:3:2161
-6823:3:2169
-6824:3:2170
-6825:3:2174
-6826:3:2179
-6827:3:2180
-6828:0:2565
-6829:3:2192
-6830:0:2565
-6831:3:2013
-6832:0:2565
-6833:3:2014
-6834:0:2565
-6835:2:741
-6836:0:2565
-6837:2:750
-6838:0:2565
-6839:2:753
-6840:0:2565
-6841:3:2015
-6842:3:2019
-6843:3:2020
-6844:3:2028
-6845:3:2029
-6846:3:2033
-6847:3:2034
-6848:3:2042
-6849:3:2047
-6850:3:2051
-6851:3:2052
-6852:3:2059
-6853:3:2060
-6854:3:2071
-6855:3:2079
-6856:3:2080
-6857:3:2084
-6858:3:2089
-6859:3:2090
-6860:0:2565
-6861:3:2102
-6862:0:2565
-6863:3:2104
-6864:0:2565
-6865:3:2105
-6866:3:2109
-6867:3:2110
-6868:3:2118
-6869:3:2119
-6870:3:2123
-6871:3:2124
-6872:3:2132
-6873:3:2137
-6874:3:2141
-6875:3:2142
-6876:3:2149
-6877:3:2150
-6878:3:2161
-6879:3:2169
-6880:3:2170
-6881:3:2174
-6882:3:2179
-6883:3:2180
-6884:0:2565
-6885:3:2192
-6886:0:2565
-6887:3:2013
-6888:0:2565
-6889:2:758
-6890:0:2565
-6891:3:2014
-6892:0:2565
-6893:3:2015
-6894:3:2019
-6895:3:2020
-6896:3:2028
-6897:3:2029
-6898:3:2033
-6899:3:2034
-6900:3:2042
-6901:3:2047
-6902:3:2051
-6903:3:2052
-6904:3:2059
-6905:3:2060
-6906:3:2071
-6907:3:2079
-6908:3:2080
-6909:3:2084
-6910:3:2089
-6911:3:2090
-6912:0:2565
-6913:3:2102
-6914:0:2565
-6915:3:2104
-6916:0:2565
-6917:3:2105
-6918:3:2109
-6919:3:2110
-6920:3:2118
-6921:3:2119
-6922:3:2123
-6923:3:2124
-6924:3:2132
-6925:3:2137
-6926:3:2141
-6927:3:2142
-6928:3:2149
-6929:3:2150
-6930:3:2161
-6931:3:2169
-6932:3:2170
-6933:3:2174
-6934:3:2179
-6935:3:2180
-6936:0:2565
-6937:3:2192
-6938:0:2565
-6939:2:759
-6940:0:2565
-6941:3:2013
-6942:0:2565
-6943:3:2014
-6944:0:2565
-6945:3:2015
-6946:3:2019
-6947:3:2020
-6948:3:2028
-6949:3:2029
-6950:3:2033
-6951:3:2034
-6952:3:2042
-6953:3:2047
-6954:3:2051
-6955:3:2052
-6956:3:2059
-6957:3:2060
-6958:3:2071
-6959:3:2079
-6960:3:2080
-6961:3:2084
-6962:3:2089
-6963:3:2090
-6964:0:2565
-6965:3:2102
-6966:0:2565
-6967:3:2104
-6968:0:2565
-6969:3:2105
-6970:3:2109
-6971:3:2110
-6972:3:2118
-6973:3:2119
-6974:3:2123
-6975:3:2124
-6976:3:2132
-6977:3:2137
-6978:3:2141
-6979:3:2142
-6980:3:2149
-6981:3:2150
-6982:3:2161
-6983:3:2169
-6984:3:2170
-6985:3:2174
-6986:3:2179
-6987:3:2180
-6988:0:2565
-6989:2:760
-6990:0:2565
-6991:3:2192
-6992:0:2565
-6993:3:2013
-6994:0:2565
-6995:2:761
-6996:0:2565
-6997:2:762
-6998:0:2565
-6999:2:763
-7000:0:2565
-7001:3:2014
-7002:0:2565
-7003:3:2015
-7004:3:2019
-7005:3:2020
-7006:3:2028
-7007:3:2029
-7008:3:2033
-7009:3:2034
-7010:3:2042
-7011:3:2047
-7012:3:2051
-7013:3:2052
-7014:3:2059
-7015:3:2060
-7016:3:2071
-7017:3:2079
-7018:3:2080
-7019:3:2084
-7020:3:2089
-7021:3:2090
-7022:0:2565
-7023:3:2102
-7024:0:2565
-7025:3:2104
-7026:0:2565
-7027:3:2105
-7028:3:2109
-7029:3:2110
-7030:3:2118
-7031:3:2119
-7032:3:2123
-7033:3:2124
-7034:3:2132
-7035:3:2137
-7036:3:2141
-7037:3:2142
-7038:3:2149
-7039:3:2150
-7040:3:2161
-7041:3:2169
-7042:3:2170
-7043:3:2174
-7044:3:2179
-7045:3:2180
-7046:0:2565
-7047:3:2192
-7048:0:2565
-7049:2:765
-7050:0:2565
-7051:3:2013
-7052:0:2565
-7053:3:2014
-7054:0:2565
-7055:3:2015
-7056:3:2019
-7057:3:2020
-7058:3:2028
-7059:3:2029
-7060:3:2033
-7061:3:2034
-7062:3:2042
-7063:3:2047
-7064:3:2051
-7065:3:2052
-7066:3:2059
-7067:3:2060
-7068:3:2071
-7069:3:2079
-7070:3:2080
-7071:3:2084
-7072:3:2089
-7073:3:2090
-7074:0:2565
-7075:3:2102
-7076:0:2565
-7077:3:2104
-7078:0:2565
-7079:3:2105
-7080:3:2109
-7081:3:2110
-7082:3:2118
-7083:3:2119
-7084:3:2123
-7085:3:2124
-7086:3:2132
-7087:3:2137
-7088:3:2141
-7089:3:2142
-7090:3:2149
-7091:3:2150
-7092:3:2161
-7093:3:2169
-7094:3:2170
-7095:3:2174
-7096:3:2179
-7097:3:2180
-7098:0:2565
-7099:2:766
-7100:2:770
-7101:2:771
-7102:2:779
-7103:2:780
-7104:2:781
-7105:2:793
-7106:2:798
-7107:2:802
-7108:2:803
-7109:2:810
-7110:2:811
-7111:2:822
-7112:2:823
-7113:2:824
-7114:2:835
-7115:2:840
-7116:2:841
-7117:0:2565
-7118:3:2192
-7119:0:2565
-7120:3:2013
-7121:0:2565
-7122:3:2014
-7123:0:2565
-7124:3:2015
-7125:3:2019
-7126:3:2020
-7127:3:2028
-7128:3:2029
-7129:3:2033
-7130:3:2034
-7131:3:2042
-7132:3:2047
-7133:3:2051
-7134:3:2052
-7135:3:2059
-7136:3:2060
-7137:3:2071
-7138:3:2079
-7139:3:2080
-7140:3:2084
-7141:3:2089
-7142:3:2090
-7143:0:2565
-7144:3:2102
-7145:0:2565
-7146:3:2104
-7147:0:2565
-7148:2:853
-7149:0:2565
-7150:2:857
-7151:0:2565
-7152:2:465
-7153:0:2565
-7154:3:2105
-7155:3:2109
-7156:3:2110
-7157:3:2118
-7158:3:2119
-7159:3:2123
-7160:3:2124
-7161:3:2132
-7162:3:2137
-7163:3:2141
-7164:3:2142
-7165:3:2149
-7166:3:2150
-7167:3:2161
-7168:3:2169
-7169:3:2170
-7170:3:2174
-7171:3:2179
-7172:3:2180
-7173:0:2565
-7174:3:2192
-7175:0:2565
-7176:3:2013
-7177:0:2565
-7178:3:2014
-7179:0:2565
-7180:3:2015
-7181:3:2019
-7182:3:2020
-7183:3:2028
-7184:3:2029
-7185:3:2033
-7186:3:2034
-7187:3:2042
-7188:3:2047
-7189:3:2051
-7190:3:2052
-7191:3:2059
-7192:3:2060
-7193:3:2071
-7194:3:2079
-7195:3:2080
-7196:3:2084
-7197:3:2089
-7198:3:2090
-7199:0:2565
-7200:3:2102
-7201:0:2565
-7202:2:466
-7203:0:2565
-7204:3:2104
-7205:0:2565
-7206:3:2105
-7207:3:2109
-7208:3:2110
-7209:3:2118
-7210:3:2119
-7211:3:2123
-7212:3:2124
-7213:3:2132
-7214:3:2137
-7215:3:2141
-7216:3:2142
-7217:3:2149
-7218:3:2150
-7219:3:2161
-7220:3:2169
-7221:3:2170
-7222:3:2174
-7223:3:2179
-7224:3:2180
-7225:0:2565
-7226:3:2192
-7227:0:2565
-7228:3:2013
-7229:0:2565
-7230:3:2014
-7231:0:2565
-7232:3:2015
-7233:3:2019
-7234:3:2020
-7235:3:2028
-7236:3:2029
-7237:3:2033
-7238:3:2034
-7239:3:2042
-7240:3:2047
-7241:3:2051
-7242:3:2052
-7243:3:2059
-7244:3:2060
-7245:3:2071
-7246:3:2079
-7247:3:2080
-7248:3:2084
-7249:3:2089
-7250:3:2090
-7251:0:2565
-7252:2:467
-7253:0:2565
-7254:3:2102
-7255:0:2565
-7256:3:2104
-7257:0:2565
-7258:3:2105
-7259:3:2109
-7260:3:2110
-7261:3:2118
-7262:3:2119
-7263:3:2123
-7264:3:2124
-7265:3:2132
-7266:3:2137
-7267:3:2141
-7268:3:2142
-7269:3:2149
-7270:3:2150
-7271:3:2161
-7272:3:2169
-7273:3:2170
-7274:3:2174
-7275:3:2179
-7276:3:2180
-7277:0:2565
-7278:3:2192
-7279:0:2565
-7280:3:2013
-7281:0:2565
-7282:3:2014
-7283:0:2565
-7284:1:102
-7285:0:2565
-7286:2:468
-7287:0:2565
-7288:3:2015
-7289:3:2019
-7290:3:2020
-7291:3:2028
-7292:3:2029
-7293:3:2033
-7294:3:2034
-7295:3:2042
-7296:3:2047
-7297:3:2051
-7298:3:2052
-7299:3:2059
-7300:3:2060
-7301:3:2071
-7302:3:2079
-7303:3:2080
-7304:3:2084
-7305:3:2089
-7306:3:2090
-7307:0:2565
-7308:3:2102
-7309:0:2565
-7310:3:2104
-7311:0:2565
-7312:3:2105
-7313:3:2109
-7314:3:2110
-7315:3:2118
-7316:3:2119
-7317:3:2123
-7318:3:2124
-7319:3:2132
-7320:3:2137
-7321:3:2141
-7322:3:2142
-7323:3:2149
-7324:3:2150
-7325:3:2161
-7326:3:2169
-7327:3:2170
-7328:3:2174
-7329:3:2179
-7330:3:2180
-7331:0:2565
-7332:3:2192
-7333:0:2565
-7334:3:2013
-7335:0:2565
-7336:3:2014
-7337:0:2565
-7338:2:467
-7339:0:2565
-7340:2:468
-7341:0:2565
-7342:3:2015
-7343:3:2019
-7344:3:2020
-7345:3:2028
-7346:3:2029
-7347:3:2033
-7348:3:2034
-7349:3:2042
-7350:3:2047
-7351:3:2051
-7352:3:2052
-7353:3:2059
-7354:3:2060
-7355:3:2071
-7356:3:2079
-7357:3:2080
-7358:3:2084
-7359:3:2089
-7360:3:2090
-7361:0:2565
-7362:3:2102
-7363:0:2565
-7364:3:2104
-7365:0:2565
-7366:3:2105
-7367:3:2109
-7368:3:2110
-7369:3:2118
-7370:3:2119
-7371:3:2123
-7372:3:2124
-7373:3:2132
-7374:3:2137
-7375:3:2141
-7376:3:2142
-7377:3:2149
-7378:3:2150
-7379:3:2161
-7380:3:2169
-7381:3:2170
-7382:3:2174
-7383:3:2179
-7384:3:2180
-7385:0:2565
-7386:3:2192
-7387:0:2565
-7388:3:2013
-7389:0:2565
-7390:2:467
-7391:0:2565
-7392:1:108
-7393:0:2565
-7394:2:468
-7395:0:2565
-7396:3:2014
-7397:0:2565
-7398:3:2015
-7399:3:2019
-7400:3:2020
-7401:3:2028
-7402:3:2029
-7403:3:2033
-7404:3:2034
-7405:3:2042
-7406:3:2047
-7407:3:2051
-7408:3:2052
-7409:3:2059
-7410:3:2060
-7411:3:2071
-7412:3:2079
-7413:3:2080
-7414:3:2084
-7415:3:2089
-7416:3:2090
-7417:0:2565
-7418:3:2102
-7419:0:2565
-7420:3:2104
-7421:0:2565
-7422:3:2105
-7423:3:2109
-7424:3:2110
-7425:3:2118
-7426:3:2119
-7427:3:2123
-7428:3:2124
-7429:3:2132
-7430:3:2137
-7431:3:2141
-7432:3:2142
-7433:3:2149
-7434:3:2150
-7435:3:2161
-7436:3:2169
-7437:3:2170
-7438:3:2174
-7439:3:2179
-7440:3:2180
-7441:0:2565
-7442:3:2192
-7443:0:2565
-7444:3:2013
-7445:0:2565
-7446:2:467
-7447:0:2565
-7448:2:468
-7449:0:2565
-7450:3:2014
-7451:0:2565
-7452:3:2015
-7453:3:2019
-7454:3:2020
-7455:3:2028
-7456:3:2029
-7457:3:2033
-7458:3:2034
-7459:3:2042
-7460:3:2047
-7461:3:2051
-7462:3:2052
-7463:3:2059
-7464:3:2060
-7465:3:2071
-7466:3:2079
-7467:3:2080
-7468:3:2084
-7469:3:2089
-7470:3:2090
-7471:0:2565
-7472:3:2102
-7473:0:2565
-7474:3:2104
-7475:0:2565
-7476:3:2105
-7477:3:2109
-7478:3:2110
-7479:3:2118
-7480:3:2119
-7481:3:2123
-7482:3:2124
-7483:3:2132
-7484:3:2137
-7485:3:2141
-7486:3:2142
-7487:3:2149
-7488:3:2150
-7489:3:2161
-7490:3:2169
-7491:3:2170
-7492:3:2174
-7493:3:2179
-7494:3:2180
-7495:0:2565
-7496:3:2192
-7497:0:2565
-7498:2:467
-7499:0:2565
-7500:1:109
-7501:1:113
-7502:1:114
-7503:1:122
-7504:1:123
-7505:1:124
-7506:1:136
-7507:1:141
-7508:1:145
-7509:1:146
-7510:1:153
-7511:1:154
-7512:1:165
-7513:1:166
-7514:1:167
-7515:1:178
-7516:1:183
-7517:1:184
-7518:0:2565
-7519:3:2013
-7520:0:2565
-7521:2:468
-7522:0:2565
-7523:3:2014
-7524:0:2565
-7525:3:2015
-7526:3:2019
-7527:3:2020
-7528:3:2028
-7529:3:2029
-7530:3:2033
-7531:3:2034
-7532:3:2042
-7533:3:2047
-7534:3:2051
-7535:3:2052
-7536:3:2059
-7537:3:2060
-7538:3:2071
-7539:3:2079
-7540:3:2080
-7541:3:2084
-7542:3:2089
-7543:3:2090
-7544:0:2565
-7545:3:2102
-7546:0:2565
-7547:3:2104
-7548:0:2565
-7549:3:2105
-7550:3:2109
-7551:3:2110
-7552:3:2118
-7553:3:2119
-7554:3:2123
-7555:3:2124
-7556:3:2132
-7557:3:2137
-7558:3:2141
-7559:3:2142
-7560:3:2149
-7561:3:2150
-7562:3:2161
-7563:3:2169
-7564:3:2170
-7565:3:2174
-7566:3:2179
-7567:3:2180
-7568:0:2565
-7569:3:2192
-7570:0:2565
-7571:2:467
-7572:0:2565
-7573:3:2013
-7574:0:2565
-7575:3:2014
-7576:0:2565
-7577:3:2015
-7578:3:2019
-7579:3:2020
-7580:3:2028
-7581:3:2029
-7582:3:2033
-7583:3:2034
-7584:3:2042
-7585:3:2047
-7586:3:2051
-7587:3:2052
-7588:3:2059
-7589:3:2060
-7590:3:2071
-7591:3:2079
-7592:3:2080
-7593:3:2084
-7594:3:2089
-7595:3:2090
-7596:0:2565
-7597:3:2102
-7598:0:2565
-7599:3:2104
-7600:0:2565
-7601:3:2105
-7602:3:2109
-7603:3:2110
-7604:3:2118
-7605:3:2119
-7606:3:2123
-7607:3:2124
-7608:3:2132
-7609:3:2137
-7610:3:2141
-7611:3:2142
-7612:3:2149
-7613:3:2150
-7614:3:2161
-7615:3:2169
-7616:3:2170
-7617:3:2174
-7618:3:2179
-7619:3:2180
-7620:0:2565
-7621:1:196
-7622:0:2565
-7623:3:2192
-7624:0:2565
-7625:3:2013
-7626:0:2565
-7627:2:468
-7628:0:2565
-7629:3:2014
-7630:0:2565
-7631:3:2015
-7632:3:2019
-7633:3:2020
-7634:3:2028
-7635:3:2029
-7636:3:2033
-7637:3:2034
-7638:3:2042
-7639:3:2047
-7640:3:2051
-7641:3:2052
-7642:3:2059
-7643:3:2060
-7644:3:2071
-7645:3:2079
-7646:3:2080
-7647:3:2084
-7648:3:2089
-7649:3:2090
-7650:0:2565
-7651:3:2102
-7652:0:2565
-7653:3:2104
-7654:0:2565
-7655:3:2105
-7656:3:2109
-7657:3:2110
-7658:3:2118
-7659:3:2119
-7660:3:2123
-7661:3:2124
-7662:3:2132
-7663:3:2137
-7664:3:2141
-7665:3:2142
-7666:3:2149
-7667:3:2150
-7668:3:2161
-7669:3:2169
-7670:3:2170
-7671:3:2174
-7672:3:2179
-7673:3:2180
-7674:0:2565
-7675:3:2192
-7676:0:2565
-7677:2:469
-7678:0:2565
-7679:3:2013
-7680:0:2565
-7681:2:475
-7682:0:2565
-7683:2:476
-7684:0:2565
-7685:3:2014
-7686:0:2565
-7687:3:2015
-7688:3:2019
-7689:3:2020
-7690:3:2028
-7691:3:2029
-7692:3:2033
-7693:3:2034
-7694:3:2042
-7695:3:2047
-7696:3:2051
-7697:3:2052
-7698:3:2059
-7699:3:2060
-7700:3:2071
-7701:3:2079
-7702:3:2080
-7703:3:2084
-7704:3:2089
-7705:3:2090
-7706:0:2565
-7707:3:2102
-7708:0:2565
-7709:3:2104
-7710:0:2565
-7711:3:2105
-7712:3:2109
-7713:3:2110
-7714:3:2118
-7715:3:2119
-7716:3:2123
-7717:3:2124
-7718:3:2132
-7719:3:2137
-7720:3:2141
-7721:3:2142
-7722:3:2149
-7723:3:2150
-7724:3:2161
-7725:3:2169
-7726:3:2170
-7727:3:2174
-7728:3:2179
-7729:3:2180
-7730:0:2565
-7731:3:2192
-7732:0:2565
-7733:2:477
-7734:2:481
-7735:2:482
-7736:2:490
-7737:2:491
-7738:2:495
-7739:2:496
-7740:2:504
-7741:2:509
-7742:2:513
-7743:2:514
-7744:2:521
-7745:2:522
-7746:2:533
-7747:2:534
-7748:2:535
-7749:2:546
-7750:2:551
-7751:2:552
-7752:0:2565
-7753:3:2013
-7754:0:2565
-7755:3:2014
-7756:0:2565
-7757:3:2015
-7758:3:2019
-7759:3:2020
-7760:3:2028
-7761:3:2029
-7762:3:2033
-7763:3:2034
-7764:3:2042
-7765:3:2047
-7766:3:2051
-7767:3:2052
-7768:3:2059
-7769:3:2060
-7770:3:2071
-7771:3:2079
-7772:3:2080
-7773:3:2084
-7774:3:2089
-7775:3:2090
-7776:0:2565
-7777:3:2102
-7778:0:2565
-7779:3:2104
-7780:0:2565
-7781:3:2105
-7782:3:2109
-7783:3:2110
-7784:3:2118
-7785:3:2119
-7786:3:2123
-7787:3:2124
-7788:3:2132
-7789:3:2137
-7790:3:2141
-7791:3:2142
-7792:3:2149
-7793:3:2150
-7794:3:2161
-7795:3:2169
-7796:3:2170
-7797:3:2174
-7798:3:2179
-7799:3:2180
-7800:0:2565
-7801:2:564
-7802:0:2565
-7803:3:2192
-7804:0:2565
-7805:3:2013
-7806:0:2565
-7807:3:2014
-7808:0:2565
-7809:3:2015
-7810:3:2019
-7811:3:2020
-7812:3:2028
-7813:3:2029
-7814:3:2033
-7815:3:2034
-7816:3:2042
-7817:3:2047
-7818:3:2051
-7819:3:2052
-7820:3:2059
-7821:3:2060
-7822:3:2071
-7823:3:2079
-7824:3:2080
-7825:3:2084
-7826:3:2089
-7827:3:2090
-7828:0:2565
-7829:3:2102
-7830:0:2565
-7831:3:2104
-7832:0:2565
-7833:2:565
-7834:2:569
-7835:2:570
-7836:2:578
-7837:2:579
-7838:2:583
-7839:2:584
-7840:2:592
-7841:2:597
-7842:2:601
-7843:2:602
-7844:2:609
-7845:2:610
-7846:2:621
-7847:2:622
-7848:2:623
-7849:2:634
-7850:2:639
-7851:2:640
-7852:0:2565
-7853:2:652
-7854:0:2565
-7855:3:2105
-7856:3:2109
-7857:3:2110
-7858:3:2118
-7859:3:2119
-7860:3:2123
-7861:3:2124
-7862:3:2132
-7863:3:2137
-7864:3:2141
-7865:3:2142
-7866:3:2149
-7867:3:2150
-7868:3:2161
-7869:3:2169
-7870:3:2170
-7871:3:2174
-7872:3:2179
-7873:3:2180
-7874:0:2565
-7875:3:2192
-7876:0:2565
-7877:3:2013
-7878:0:2565
-7879:3:2014
-7880:0:2565
-7881:3:2015
-7882:3:2019
-7883:3:2020
-7884:3:2028
-7885:3:2029
-7886:3:2033
-7887:3:2034
-7888:3:2042
-7889:3:2047
-7890:3:2051
-7891:3:2052
-7892:3:2059
-7893:3:2060
-7894:3:2071
-7895:3:2079
-7896:3:2080
-7897:3:2084
-7898:3:2089
-7899:3:2090
-7900:0:2565
-7901:3:2102
-7902:0:2565
-7903:2:653
-7904:0:2565
-7905:3:2104
-7906:0:2565
-7907:3:2105
-7908:3:2109
-7909:3:2110
-7910:3:2118
-7911:3:2119
-7912:3:2123
-7913:3:2124
-7914:3:2132
-7915:3:2137
-7916:3:2141
-7917:3:2142
-7918:3:2149
-7919:3:2150
-7920:3:2161
-7921:3:2169
-7922:3:2170
-7923:3:2174
-7924:3:2179
-7925:3:2180
-7926:0:2565
-7927:3:2192
-7928:0:2565
-7929:3:2013
-7930:0:2565
-7931:3:2014
-7932:0:2565
-7933:3:2015
-7934:3:2019
-7935:3:2020
-7936:3:2028
-7937:3:2029
-7938:3:2033
-7939:3:2034
-7940:3:2042
-7941:3:2047
-7942:3:2051
-7943:3:2052
-7944:3:2059
-7945:3:2060
-7946:3:2071
-7947:3:2079
-7948:3:2080
-7949:3:2084
-7950:3:2089
-7951:3:2090
-7952:0:2565
-7953:2:654
-7954:2:658
-7955:2:659
-7956:2:667
-7957:2:668
-7958:2:672
-7959:2:673
-7960:2:681
-7961:2:686
-7962:2:690
-7963:2:691
-7964:2:698
-7965:2:699
-7966:2:710
-7967:2:711
-7968:2:712
-7969:2:723
-7970:2:728
-7971:2:729
-7972:0:2565
-7973:3:2102
-7974:0:2565
-7975:3:2104
-7976:0:2565
-7977:3:2105
-7978:3:2109
-7979:3:2110
-7980:3:2118
-7981:3:2119
-7982:3:2123
-7983:3:2124
-7984:3:2132
-7985:3:2137
-7986:3:2141
-7987:3:2142
-7988:3:2149
-7989:3:2150
-7990:3:2161
-7991:3:2169
-7992:3:2170
-7993:3:2174
-7994:3:2179
-7995:3:2180
-7996:0:2565
-7997:3:2192
-7998:0:2565
-7999:3:2013
-8000:0:2565
-8001:3:2014
-8002:0:2565
-8003:2:741
-8004:0:2565
-8005:2:750
-8006:0:2565
-8007:2:753
-8008:0:2565
-8009:3:2015
-8010:3:2019
-8011:3:2020
-8012:3:2028
-8013:3:2029
-8014:3:2033
-8015:3:2034
-8016:3:2042
-8017:3:2047
-8018:3:2051
-8019:3:2052
-8020:3:2059
-8021:3:2060
-8022:3:2071
-8023:3:2079
-8024:3:2080
-8025:3:2084
-8026:3:2089
-8027:3:2090
-8028:0:2565
-8029:3:2102
-8030:0:2565
-8031:3:2104
-8032:0:2565
-8033:3:2105
-8034:3:2109
-8035:3:2110
-8036:3:2118
-8037:3:2119
-8038:3:2123
-8039:3:2124
-8040:3:2132
-8041:3:2137
-8042:3:2141
-8043:3:2142
-8044:3:2149
-8045:3:2150
-8046:3:2161
-8047:3:2169
-8048:3:2170
-8049:3:2174
-8050:3:2179
-8051:3:2180
-8052:0:2565
-8053:3:2192
-8054:0:2565
-8055:3:2013
-8056:0:2565
-8057:2:758
-8058:0:2565
-8059:3:2014
-8060:0:2565
-8061:3:2015
-8062:3:2019
-8063:3:2020
-8064:3:2028
-8065:3:2029
-8066:3:2033
-8067:3:2034
-8068:3:2042
-8069:3:2047
-8070:3:2051
-8071:3:2052
-8072:3:2059
-8073:3:2060
-8074:3:2071
-8075:3:2079
-8076:3:2080
-8077:3:2084
-8078:3:2089
-8079:3:2090
-8080:0:2565
-8081:3:2102
-8082:0:2565
-8083:3:2104
-8084:0:2565
-8085:3:2105
-8086:3:2109
-8087:3:2110
-8088:3:2118
-8089:3:2119
-8090:3:2123
-8091:3:2124
-8092:3:2132
-8093:3:2137
-8094:3:2141
-8095:3:2142
-8096:3:2149
-8097:3:2150
-8098:3:2161
-8099:3:2169
-8100:3:2170
-8101:3:2174
-8102:3:2179
-8103:3:2180
-8104:0:2565
-8105:3:2192
-8106:0:2565
-8107:2:759
-8108:0:2565
-8109:3:2013
-8110:0:2565
-8111:3:2014
-8112:0:2565
-8113:3:2015
-8114:3:2019
-8115:3:2020
-8116:3:2028
-8117:3:2029
-8118:3:2033
-8119:3:2034
-8120:3:2042
-8121:3:2047
-8122:3:2051
-8123:3:2052
-8124:3:2059
-8125:3:2060
-8126:3:2071
-8127:3:2079
-8128:3:2080
-8129:3:2084
-8130:3:2089
-8131:3:2090
-8132:0:2565
-8133:3:2102
-8134:0:2565
-8135:3:2104
-8136:0:2565
-8137:3:2105
-8138:3:2109
-8139:3:2110
-8140:3:2118
-8141:3:2119
-8142:3:2123
-8143:3:2124
-8144:3:2132
-8145:3:2137
-8146:3:2141
-8147:3:2142
-8148:3:2149
-8149:3:2150
-8150:3:2161
-8151:3:2169
-8152:3:2170
-8153:3:2174
-8154:3:2179
-8155:3:2180
-8156:0:2565
-8157:2:760
-8158:0:2565
-8159:3:2192
-8160:0:2565
-8161:3:2013
-8162:0:2565
-8163:2:761
-8164:0:2565
-8165:2:762
-8166:0:2565
-8167:2:763
-8168:0:2565
-8169:3:2014
-8170:0:2565
-8171:3:2015
-8172:3:2019
-8173:3:2020
-8174:3:2028
-8175:3:2029
-8176:3:2033
-8177:3:2034
-8178:3:2042
-8179:3:2047
-8180:3:2051
-8181:3:2052
-8182:3:2059
-8183:3:2060
-8184:3:2071
-8185:3:2079
-8186:3:2080
-8187:3:2084
-8188:3:2089
-8189:3:2090
-8190:0:2565
-8191:3:2102
-8192:0:2565
-8193:3:2104
-8194:0:2565
-8195:3:2105
-8196:3:2109
-8197:3:2110
-8198:3:2118
-8199:3:2119
-8200:3:2123
-8201:3:2124
-8202:3:2132
-8203:3:2137
-8204:3:2141
-8205:3:2142
-8206:3:2149
-8207:3:2150
-8208:3:2161
-8209:3:2169
-8210:3:2170
-8211:3:2174
-8212:3:2179
-8213:3:2180
-8214:0:2565
-8215:3:2192
-8216:0:2565
-8217:2:765
-8218:0:2565
-8219:3:2013
-8220:0:2565
-8221:3:2014
-8222:0:2565
-8223:3:2015
-8224:3:2019
-8225:3:2020
-8226:3:2028
-8227:3:2029
-8228:3:2033
-8229:3:2034
-8230:3:2042
-8231:3:2047
-8232:3:2051
-8233:3:2052
-8234:3:2059
-8235:3:2060
-8236:3:2071
-8237:3:2079
-8238:3:2080
-8239:3:2084
-8240:3:2089
-8241:3:2090
-8242:0:2565
-8243:3:2102
-8244:0:2565
-8245:3:2104
-8246:0:2565
-8247:3:2105
-8248:3:2109
-8249:3:2110
-8250:3:2118
-8251:3:2119
-8252:3:2123
-8253:3:2124
-8254:3:2132
-8255:3:2137
-8256:3:2141
-8257:3:2142
-8258:3:2149
-8259:3:2150
-8260:3:2161
-8261:3:2169
-8262:3:2170
-8263:3:2174
-8264:3:2179
-8265:3:2180
-8266:0:2565
-8267:2:766
-8268:2:770
-8269:2:771
-8270:2:779
-8271:2:780
-8272:2:781
-8273:2:793
-8274:2:798
-8275:2:802
-8276:2:803
-8277:2:810
-8278:2:811
-8279:2:822
-8280:2:823
-8281:2:824
-8282:2:835
-8283:2:840
-8284:2:841
-8285:0:2565
-8286:3:2192
-8287:0:2565
-8288:3:2013
-8289:0:2565
-8290:3:2014
-8291:0:2565
-8292:3:2015
-8293:3:2019
-8294:3:2020
-8295:3:2028
-8296:3:2029
-8297:3:2033
-8298:3:2034
-8299:3:2042
-8300:3:2047
-8301:3:2051
-8302:3:2052
-8303:3:2059
-8304:3:2060
-8305:3:2071
-8306:3:2079
-8307:3:2080
-8308:3:2084
-8309:3:2089
-8310:3:2090
-8311:0:2565
-8312:3:2102
-8313:0:2565
-8314:3:2104
-8315:0:2565
-8316:2:853
-8317:0:2565
-8318:2:857
-8319:0:2565
-8320:2:465
-8321:0:2565
-8322:3:2105
-8323:3:2109
-8324:3:2110
-8325:3:2118
-8326:3:2119
-8327:3:2123
-8328:3:2124
-8329:3:2132
-8330:3:2137
-8331:3:2141
-8332:3:2142
-8333:3:2149
-8334:3:2150
-8335:3:2161
-8336:3:2169
-8337:3:2170
-8338:3:2174
-8339:3:2179
-8340:3:2180
-8341:0:2565
-8342:3:2192
-8343:0:2565
-8344:3:2013
-8345:0:2565
-8346:3:2014
-8347:0:2565
-8348:3:2015
-8349:3:2019
-8350:3:2020
-8351:3:2028
-8352:3:2029
-8353:3:2033
-8354:3:2034
-8355:3:2042
-8356:3:2047
-8357:3:2051
-8358:3:2052
-8359:3:2059
-8360:3:2060
-8361:3:2071
-8362:3:2079
-8363:3:2080
-8364:3:2084
-8365:3:2089
-8366:3:2090
-8367:0:2565
-8368:3:2102
-8369:0:2565
-8370:2:466
-8371:0:2565
-8372:3:2104
-8373:0:2565
-8374:3:2105
-8375:3:2109
-8376:3:2110
-8377:3:2118
-8378:3:2119
-8379:3:2123
-8380:3:2124
-8381:3:2132
-8382:3:2137
-8383:3:2141
-8384:3:2142
-8385:3:2149
-8386:3:2150
-8387:3:2161
-8388:3:2169
-8389:3:2170
-8390:3:2174
-8391:3:2179
-8392:3:2180
-8393:0:2565
-8394:3:2192
-8395:0:2565
-8396:3:2013
-8397:0:2565
-8398:3:2014
-8399:0:2565
-8400:3:2015
-8401:3:2019
-8402:3:2020
-8403:3:2028
-8404:3:2029
-8405:3:2033
-8406:3:2034
-8407:3:2042
-8408:3:2047
-8409:3:2051
-8410:3:2052
-8411:3:2059
-8412:3:2060
-8413:3:2071
-8414:3:2079
-8415:3:2080
-8416:3:2084
-8417:3:2089
-8418:3:2090
-8419:0:2565
-8420:2:467
-8421:0:2565
-8422:3:2102
-8423:0:2565
-8424:3:2104
-8425:0:2565
-8426:3:2105
-8427:3:2109
-8428:3:2110
-8429:3:2118
-8430:3:2119
-8431:3:2123
-8432:3:2124
-8433:3:2132
-8434:3:2137
-8435:3:2141
-8436:3:2142
-8437:3:2149
-8438:3:2150
-8439:3:2161
-8440:3:2169
-8441:3:2170
-8442:3:2174
-8443:3:2179
-8444:3:2180
-8445:0:2565
-8446:3:2192
-8447:0:2565
-8448:3:2013
-8449:0:2565
-8450:3:2014
-8451:0:2565
-8452:1:199
-8453:0:2565
-8454:2:468
-8455:0:2565
-8456:1:205
-8457:0:2565
-8458:3:2015
-8459:3:2019
-8460:3:2020
-8461:3:2028
-8462:3:2029
-8463:3:2033
-8464:3:2034
-8465:3:2042
-8466:3:2047
-8467:3:2051
-8468:3:2052
-8469:3:2059
-8470:3:2060
-8471:3:2071
-8472:3:2079
-8473:3:2080
-8474:3:2084
-8475:3:2089
-8476:3:2090
-8477:0:2565
-8478:3:2102
-8479:0:2565
-8480:3:2104
-8481:0:2565
-8482:3:2105
-8483:3:2109
-8484:3:2110
-8485:3:2118
-8486:3:2119
-8487:3:2123
-8488:3:2124
-8489:3:2132
-8490:3:2137
-8491:3:2141
-8492:3:2142
-8493:3:2149
-8494:3:2150
-8495:3:2161
-8496:3:2169
-8497:3:2170
-8498:3:2174
-8499:3:2179
-8500:3:2180
-8501:0:2565
-8502:3:2192
-8503:0:2565
-8504:3:2013
-8505:0:2565
-8506:3:2014
-8507:0:2565
-8508:2:467
-8509:0:2565
-8510:2:468
-8511:0:2565
-8512:3:2015
-8513:3:2019
-8514:3:2020
-8515:3:2028
-8516:3:2029
-8517:3:2033
-8518:3:2034
-8519:3:2042
-8520:3:2047
-8521:3:2051
-8522:3:2052
-8523:3:2059
-8524:3:2060
-8525:3:2071
-8526:3:2079
-8527:3:2080
-8528:3:2084
-8529:3:2089
-8530:3:2090
-8531:0:2565
-8532:3:2102
-8533:0:2565
-8534:3:2104
-8535:0:2565
-8536:3:2105
-8537:3:2109
-8538:3:2110
-8539:3:2118
-8540:3:2119
-8541:3:2123
-8542:3:2124
-8543:3:2132
-8544:3:2137
-8545:3:2141
-8546:3:2142
-8547:3:2149
-8548:3:2150
-8549:3:2161
-8550:3:2169
-8551:3:2170
-8552:3:2174
-8553:3:2179
-8554:3:2180
-8555:0:2565
-8556:3:2192
-8557:0:2565
-8558:3:2013
-8559:0:2565
-8560:2:467
-8561:0:2565
-8562:1:206
-8563:0:2565
-8564:2:468
-8565:0:2565
-8566:2:467
-8567:0:2565
-8568:3:2014
-8569:0:2565
-8570:3:2015
-8571:3:2019
-8572:3:2020
-8573:3:2028
-8574:3:2029
-8575:3:2033
-8576:3:2034
-8577:3:2042
-8578:3:2047
-8579:3:2051
-8580:3:2052
-8581:3:2059
-8582:3:2060
-8583:3:2071
-8584:3:2079
-8585:3:2080
-8586:3:2084
-8587:3:2089
-8588:3:2090
-8589:0:2565
-8590:3:2102
-8591:0:2565
-8592:3:2104
-8593:0:2565
-8594:3:2105
-8595:3:2109
-8596:3:2110
-8597:3:2118
-8598:3:2119
-8599:3:2123
-8600:3:2124
-8601:3:2132
-8602:3:2137
-8603:3:2141
-8604:3:2142
-8605:3:2149
-8606:3:2150
-8607:3:2161
-8608:3:2169
-8609:3:2170
-8610:3:2174
-8611:3:2179
-8612:3:2180
-8613:0:2565
-8614:3:2192
-8615:0:2565
-8616:3:2013
-8617:0:2565
-8618:1:207
-8619:1:211
-8620:1:212
-8621:1:220
-8622:1:221
-8623:1:222
-8624:1:234
-8625:1:239
-8626:1:243
-8627:1:244
-8628:1:251
-8629:1:252
-8630:1:263
-8631:1:264
-8632:1:265
-8633:1:276
-8634:1:281
-8635:1:282
-8636:0:2565
-8637:3:2014
-8638:0:2565
-8639:3:2015
-8640:3:2019
-8641:3:2020
-8642:3:2028
-8643:3:2029
-8644:3:2033
-8645:3:2034
-8646:3:2042
-8647:3:2047
-8648:3:2051
-8649:3:2052
-8650:3:2059
-8651:3:2060
-8652:3:2071
-8653:3:2079
-8654:3:2080
-8655:3:2084
-8656:3:2089
-8657:3:2090
-8658:0:2565
-8659:1:294
-8660:0:2565
-8661:3:2102
-8662:0:2565
-8663:2:468
-8664:0:2565
-8665:3:2104
-8666:0:2565
-8667:3:2105
-8668:3:2109
-8669:3:2110
-8670:3:2118
-8671:3:2119
-8672:3:2123
-8673:3:2124
-8674:3:2132
-8675:3:2137
-8676:3:2141
-8677:3:2142
-8678:3:2149
-8679:3:2150
-8680:3:2161
-8681:3:2169
-8682:3:2170
-8683:3:2174
-8684:3:2179
-8685:3:2180
-8686:0:2565
-8687:3:2192
-8688:0:2565
-8689:3:2013
-8690:0:2565
-8691:3:2014
-8692:0:2565
-8693:3:2015
-8694:3:2019
-8695:3:2020
-8696:3:2028
-8697:3:2029
-8698:3:2033
-8699:3:2034
-8700:3:2042
-8701:3:2047
-8702:3:2051
-8703:3:2052
-8704:3:2059
-8705:3:2060
-8706:3:2071
-8707:3:2079
-8708:3:2080
-8709:3:2084
-8710:3:2089
-8711:3:2090
-8712:0:2565
-8713:2:469
-8714:0:2565
-8715:3:2102
-8716:0:2565
-8717:2:475
-8718:0:2565
-8719:3:2104
-8720:0:2565
-8721:3:2105
-8722:3:2109
-8723:3:2110
-8724:3:2118
-8725:3:2119
-8726:3:2123
-8727:3:2124
-8728:3:2132
-8729:3:2137
-8730:3:2141
-8731:3:2142
-8732:3:2149
-8733:3:2150
-8734:3:2161
-8735:3:2169
-8736:3:2170
-8737:3:2174
-8738:3:2179
-8739:3:2180
-8740:0:2565
-8741:3:2192
-8742:0:2565
-8743:3:2013
-8744:0:2565
-8745:1:295
-8746:0:2565
-8747:2:476
-8748:0:2565
-8749:1:296
-8750:0:2565
-8751:3:2014
-8752:0:2565
-8753:3:2015
-8754:3:2019
-8755:3:2020
-8756:3:2028
-8757:3:2029
-8758:3:2033
-8759:3:2034
-8760:3:2042
-8761:3:2047
-8762:3:2051
-8763:3:2052
-8764:3:2059
-8765:3:2060
-8766:3:2071
-8767:3:2079
-8768:3:2080
-8769:3:2084
-8770:3:2089
-8771:3:2090
-8772:0:2565
-8773:3:2102
-8774:0:2565
-8775:3:2104
-8776:0:2565
-8777:3:2105
-8778:3:2109
-8779:3:2110
-8780:3:2118
-8781:3:2119
-8782:3:2123
-8783:3:2124
-8784:3:2132
-8785:3:2137
-8786:3:2141
-8787:3:2142
-8788:3:2149
-8789:3:2150
-8790:3:2161
-8791:3:2169
-8792:3:2170
-8793:3:2174
-8794:3:2179
-8795:3:2180
-8796:0:2565
-8797:3:2192
-8798:0:2565
-8799:3:2013
-8800:0:2565
-8801:1:295
-8802:0:2565
-8803:3:2014
-8804:0:2565
-8805:3:2015
-8806:3:2019
-8807:3:2020
-8808:3:2028
-8809:3:2029
-8810:3:2033
-8811:3:2034
-8812:3:2042
-8813:3:2047
-8814:3:2051
-8815:3:2052
-8816:3:2059
-8817:3:2060
-8818:3:2071
-8819:3:2079
-8820:3:2080
-8821:3:2084
-8822:3:2089
-8823:3:2090
-8824:0:2565
-8825:3:2102
-8826:0:2565
-8827:3:2104
-8828:0:2565
-8829:3:2105
-8830:3:2109
-8831:3:2110
-8832:3:2118
-8833:3:2119
-8834:3:2123
-8835:3:2124
-8836:3:2132
-8837:3:2137
-8838:3:2141
-8839:3:2142
-8840:3:2149
-8841:3:2150
-8842:3:2161
-8843:3:2169
-8844:3:2170
-8845:3:2174
-8846:3:2179
-8847:3:2180
-8848:0:2565
-8849:3:2192
-8850:0:2565
-8851:2:477
-8852:2:481
-8853:2:482
-8854:2:490
-8855:2:491
-8856:2:495
-8857:2:496
-8858:2:504
-8859:2:509
-8860:2:513
-8861:2:514
-8862:2:521
-8863:2:522
-8864:2:533
-8865:2:534
-8866:2:535
-8867:2:546
-8868:2:551
-8869:2:552
-8870:0:2565
-8871:3:2013
-8872:0:2565
-8873:1:296
-8874:0:2565
-8875:3:2014
-8876:0:2565
-8877:3:2015
-8878:3:2019
-8879:3:2020
-8880:3:2028
-8881:3:2029
-8882:3:2033
-8883:3:2034
-8884:3:2042
-8885:3:2047
-8886:3:2051
-8887:3:2052
-8888:3:2059
-8889:3:2060
-8890:3:2071
-8891:3:2079
-8892:3:2080
-8893:3:2084
-8894:3:2089
-8895:3:2090
-8896:0:2565
-8897:3:2102
-8898:0:2565
-8899:3:2104
-8900:0:2565
-8901:3:2105
-8902:3:2109
-8903:3:2110
-8904:3:2118
-8905:3:2119
-8906:3:2123
-8907:3:2124
-8908:3:2132
-8909:3:2137
-8910:3:2141
-8911:3:2142
-8912:3:2149
-8913:3:2150
-8914:3:2161
-8915:3:2169
-8916:3:2170
-8917:3:2174
-8918:3:2179
-8919:3:2180
-8920:0:2565
-8921:3:2192
-8922:0:2565
-8923:3:2013
-8924:0:2565
-8925:1:295
-8926:0:2565
-8927:3:2014
-8928:0:2565
-8929:3:2015
-8930:3:2019
-8931:3:2020
-8932:3:2028
-8933:3:2029
-8934:3:2033
-8935:3:2034
-8936:3:2042
-8937:3:2047
-8938:3:2051
-8939:3:2052
-8940:3:2059
-8941:3:2060
-8942:3:2071
-8943:3:2079
-8944:3:2080
-8945:3:2084
-8946:3:2089
-8947:3:2090
-8948:0:2565
-8949:3:2102
-8950:0:2565
-8951:3:2104
-8952:0:2565
-8953:3:2105
-8954:3:2109
-8955:3:2110
-8956:3:2118
-8957:3:2119
-8958:3:2123
-8959:3:2124
-8960:3:2132
-8961:3:2137
-8962:3:2141
-8963:3:2142
-8964:3:2149
-8965:3:2150
-8966:3:2161
-8967:3:2169
-8968:3:2170
-8969:3:2174
-8970:3:2179
-8971:3:2180
-8972:0:2565
-8973:3:2192
-8974:0:2565
-8975:2:564
-8976:0:2565
-8977:3:2013
-8978:0:2565
-8979:1:296
-8980:0:2565
-8981:3:2014
-8982:0:2565
-8983:3:2015
-8984:3:2019
-8985:3:2020
-8986:3:2028
-8987:3:2029
-8988:3:2033
-8989:3:2034
-8990:3:2042
-8991:3:2047
-8992:3:2051
-8993:3:2052
-8994:3:2059
-8995:3:2060
-8996:3:2071
-8997:3:2079
-8998:3:2080
-8999:3:2084
-9000:3:2089
-9001:3:2090
-9002:0:2565
-9003:3:2102
-9004:0:2565
-9005:3:2104
-9006:0:2565
-9007:3:2105
-9008:3:2109
-9009:3:2110
-9010:3:2118
-9011:3:2119
-9012:3:2123
-9013:3:2124
-9014:3:2132
-9015:3:2137
-9016:3:2141
-9017:3:2142
-9018:3:2149
-9019:3:2150
-9020:3:2161
-9021:3:2169
-9022:3:2170
-9023:3:2174
-9024:3:2179
-9025:3:2180
-9026:0:2565
-9027:3:2192
-9028:0:2565
-9029:3:2013
-9030:0:2565
-9031:1:295
-9032:0:2565
-9033:3:2014
-9034:0:2565
-9035:3:2015
-9036:3:2019
-9037:3:2020
-9038:3:2028
-9039:3:2029
-9040:3:2033
-9041:3:2034
-9042:3:2042
-9043:3:2047
-9044:3:2051
-9045:3:2052
-9046:3:2059
-9047:3:2060
-9048:3:2071
-9049:3:2079
-9050:3:2080
-9051:3:2084
-9052:3:2089
-9053:3:2090
-9054:0:2565
-9055:3:2102
-9056:0:2565
-9057:3:2104
-9058:0:2565
-9059:3:2105
-9060:3:2109
-9061:3:2110
-9062:3:2118
-9063:3:2119
-9064:3:2123
-9065:3:2124
-9066:3:2132
-9067:3:2137
-9068:3:2141
-9069:3:2142
-9070:3:2149
-9071:3:2150
-9072:3:2161
-9073:3:2169
-9074:3:2170
-9075:3:2174
-9076:3:2179
-9077:3:2180
-9078:0:2565
-9079:3:2192
-9080:0:2565
-9081:2:565
-9082:2:569
-9083:2:570
-9084:2:578
-9085:2:579
-9086:2:583
-9087:2:584
-9088:2:592
-9089:2:597
-9090:2:601
-9091:2:602
-9092:2:609
-9093:2:610
-9094:2:621
-9095:2:622
-9096:2:623
-9097:2:634
-9098:2:639
-9099:2:640
-9100:0:2565
-9101:3:2013
-9102:0:2565
-9103:2:652
-9104:0:2565
-9105:1:296
-9106:0:2565
-9107:3:2014
-9108:0:2565
-9109:3:2015
-9110:3:2019
-9111:3:2020
-9112:3:2028
-9113:3:2029
-9114:3:2033
-9115:3:2034
-9116:3:2042
-9117:3:2047
-9118:3:2051
-9119:3:2052
-9120:3:2059
-9121:3:2060
-9122:3:2071
-9123:3:2079
-9124:3:2080
-9125:3:2084
-9126:3:2089
-9127:3:2090
-9128:0:2565
-9129:3:2102
-9130:0:2565
-9131:3:2104
-9132:0:2565
-9133:3:2105
-9134:3:2109
-9135:3:2110
-9136:3:2118
-9137:3:2119
-9138:3:2123
-9139:3:2124
-9140:3:2132
-9141:3:2137
-9142:3:2141
-9143:3:2142
-9144:3:2149
-9145:3:2150
-9146:3:2161
-9147:3:2169
-9148:3:2170
-9149:3:2174
-9150:3:2179
-9151:3:2180
-9152:0:2565
-9153:3:2192
-9154:0:2565
-9155:3:2013
-9156:0:2565
-9157:1:295
-9158:0:2565
-9159:3:2014
-9160:0:2565
-9161:3:2015
-9162:3:2019
-9163:3:2020
-9164:3:2028
-9165:3:2029
-9166:3:2033
-9167:3:2034
-9168:3:2042
-9169:3:2047
-9170:3:2051
-9171:3:2052
-9172:3:2059
-9173:3:2060
-9174:3:2071
-9175:3:2079
-9176:3:2080
-9177:3:2084
-9178:3:2089
-9179:3:2090
-9180:0:2565
-9181:3:2102
-9182:0:2565
-9183:3:2104
-9184:0:2565
-9185:3:2105
-9186:3:2109
-9187:3:2110
-9188:3:2118
-9189:3:2119
-9190:3:2123
-9191:3:2124
-9192:3:2132
-9193:3:2137
-9194:3:2141
-9195:3:2142
-9196:3:2149
-9197:3:2150
-9198:3:2161
-9199:3:2169
-9200:3:2170
-9201:3:2174
-9202:3:2179
-9203:3:2180
-9204:0:2565
-9205:3:2192
-9206:0:2565
-9207:2:653
-9208:0:2565
-9209:3:2013
-9210:0:2565
-9211:1:296
-9212:0:2565
-9213:3:2014
-9214:0:2565
-9215:3:2015
-9216:3:2019
-9217:3:2020
-9218:3:2028
-9219:3:2029
-9220:3:2033
-9221:3:2034
-9222:3:2042
-9223:3:2047
-9224:3:2051
-9225:3:2052
-9226:3:2059
-9227:3:2060
-9228:3:2071
-9229:3:2079
-9230:3:2080
-9231:3:2084
-9232:3:2089
-9233:3:2090
-9234:0:2565
-9235:3:2102
-9236:0:2565
-9237:3:2104
-9238:0:2565
-9239:3:2105
-9240:3:2109
-9241:3:2110
-9242:3:2118
-9243:3:2119
-9244:3:2123
-9245:3:2124
-9246:3:2132
-9247:3:2137
-9248:3:2141
-9249:3:2142
-9250:3:2149
-9251:3:2150
-9252:3:2161
-9253:3:2169
-9254:3:2170
-9255:3:2174
-9256:3:2179
-9257:3:2180
-9258:0:2565
-9259:3:2192
-9260:0:2565
-9261:3:2013
-9262:0:2565
-9263:1:295
-9264:0:2565
-9265:3:2014
-9266:0:2565
-9267:3:2015
-9268:3:2019
-9269:3:2020
-9270:3:2028
-9271:3:2029
-9272:3:2033
-9273:3:2034
-9274:3:2042
-9275:3:2047
-9276:3:2051
-9277:3:2052
-9278:3:2059
-9279:3:2060
-9280:3:2071
-9281:3:2079
-9282:3:2080
-9283:3:2084
-9284:3:2089
-9285:3:2090
-9286:0:2565
-9287:3:2102
-9288:0:2565
-9289:3:2104
-9290:0:2565
-9291:3:2105
-9292:3:2109
-9293:3:2110
-9294:3:2118
-9295:3:2119
-9296:3:2123
-9297:3:2124
-9298:3:2132
-9299:3:2137
-9300:3:2141
-9301:3:2142
-9302:3:2149
-9303:3:2150
-9304:3:2161
-9305:3:2169
-9306:3:2170
-9307:3:2174
-9308:3:2179
-9309:3:2180
-9310:0:2565
-9311:3:2192
-9312:0:2565
-9313:2:654
-9314:2:658
-9315:2:659
-9316:2:667
-9317:2:668
-9318:2:672
-9319:2:673
-9320:2:681
-9321:2:686
-9322:2:690
-9323:2:691
-9324:2:698
-9325:2:699
-9326:2:710
-9327:2:711
-9328:2:712
-9329:2:723
-9330:2:728
-9331:2:729
-9332:0:2565
-9333:3:2013
-9334:0:2565
-9335:1:296
-9336:0:2565
-9337:3:2014
-9338:0:2565
-9339:3:2015
-9340:3:2019
-9341:3:2020
-9342:3:2028
-9343:3:2029
-9344:3:2033
-9345:3:2034
-9346:3:2042
-9347:3:2047
-9348:3:2051
-9349:3:2052
-9350:3:2059
-9351:3:2060
-9352:3:2071
-9353:3:2079
-9354:3:2080
-9355:3:2084
-9356:3:2089
-9357:3:2090
-9358:0:2565
-9359:3:2102
-9360:0:2565
-9361:3:2104
-9362:0:2565
-9363:3:2105
-9364:3:2109
-9365:3:2110
-9366:3:2118
-9367:3:2119
-9368:3:2123
-9369:3:2124
-9370:3:2132
-9371:3:2137
-9372:3:2141
-9373:3:2142
-9374:3:2149
-9375:3:2150
-9376:3:2161
-9377:3:2169
-9378:3:2170
-9379:3:2174
-9380:3:2179
-9381:3:2180
-9382:0:2565
-9383:3:2192
-9384:0:2565
-9385:3:2013
-9386:0:2565
-9387:2:741
-9388:0:2565
-9389:2:750
-9390:0:2565
-9391:3:2014
-9392:0:2565
-9393:3:2015
-9394:3:2019
-9395:3:2020
-9396:3:2028
-9397:3:2029
-9398:3:2033
-9399:3:2034
-9400:3:2042
-9401:3:2047
-9402:3:2051
-9403:3:2052
-9404:3:2059
-9405:3:2060
-9406:3:2071
-9407:3:2079
-9408:3:2080
-9409:3:2084
-9410:3:2089
-9411:3:2090
-9412:0:2565
-9413:3:2102
-9414:0:2565
-9415:1:295
-9416:0:2565
-9417:2:753
-9418:0:2565
-9419:1:296
-9420:0:2565
-9421:3:2104
-9422:0:2565
-9423:3:2105
-9424:3:2109
-9425:3:2110
-9426:3:2118
-9427:3:2119
-9428:3:2123
-9429:3:2124
-9430:3:2132
-9431:3:2137
-9432:3:2141
-9433:3:2142
-9434:3:2149
-9435:3:2150
-9436:3:2161
-9437:3:2169
-9438:3:2170
-9439:3:2174
-9440:3:2179
-9441:3:2180
-9442:0:2565
-9443:3:2192
-9444:0:2565
-9445:3:2013
-9446:0:2565
-9447:3:2014
-9448:0:2565
-9449:3:2015
-9450:3:2019
-9451:3:2020
-9452:3:2028
-9453:3:2029
-9454:3:2033
-9455:3:2034
-9456:3:2042
-9457:3:2047
-9458:3:2051
-9459:3:2052
-9460:3:2059
-9461:3:2060
-9462:3:2071
-9463:3:2079
-9464:3:2080
-9465:3:2084
-9466:3:2089
-9467:3:2090
-9468:0:2565
-9469:3:2102
-9470:0:2565
-9471:1:295
-9472:0:2565
-9473:3:2104
-9474:0:2565
-9475:3:2105
-9476:3:2109
-9477:3:2110
-9478:3:2118
-9479:3:2119
-9480:3:2123
-9481:3:2124
-9482:3:2132
-9483:3:2137
-9484:3:2141
-9485:3:2142
-9486:3:2149
-9487:3:2150
-9488:3:2161
-9489:3:2169
-9490:3:2170
-9491:3:2174
-9492:3:2179
-9493:3:2180
-9494:0:2565
-9495:3:2192
-9496:0:2565
-9497:3:2013
-9498:0:2565
-9499:3:2014
-9500:0:2565
-9501:3:2015
-9502:3:2019
-9503:3:2020
-9504:3:2028
-9505:3:2029
-9506:3:2033
-9507:3:2034
-9508:3:2042
-9509:3:2047
-9510:3:2051
-9511:3:2052
-9512:3:2059
-9513:3:2060
-9514:3:2071
-9515:3:2079
-9516:3:2080
-9517:3:2084
-9518:3:2089
-9519:3:2090
-9520:0:2565
-9521:2:758
-9522:0:2565
-9523:3:2102
-9524:0:2565
-9525:1:296
-9526:0:2565
-9527:3:2104
-9528:0:2565
-9529:3:2105
-9530:3:2109
-9531:3:2110
-9532:3:2118
-9533:3:2119
-9534:3:2123
-9535:3:2124
-9536:3:2132
-9537:3:2137
-9538:3:2141
-9539:3:2142
-9540:3:2149
-9541:3:2150
-9542:3:2161
-9543:3:2169
-9544:3:2170
-9545:3:2174
-9546:3:2179
-9547:3:2180
-9548:0:2565
-9549:3:2192
-9550:0:2565
-9551:3:2013
-9552:0:2565
-9553:3:2014
-9554:0:2565
-9555:3:2015
-9556:3:2019
-9557:3:2020
-9558:3:2028
-9559:3:2029
-9560:3:2033
-9561:3:2034
-9562:3:2042
-9563:3:2047
-9564:3:2051
-9565:3:2052
-9566:3:2059
-9567:3:2060
-9568:3:2071
-9569:3:2079
-9570:3:2080
-9571:3:2084
-9572:3:2089
-9573:3:2090
-9574:0:2565
-9575:3:2102
-9576:0:2565
-9577:1:295
-9578:0:2565
-9579:3:2104
-9580:0:2565
-9581:3:2105
-9582:3:2109
-9583:3:2110
-9584:3:2118
-9585:3:2119
-9586:3:2123
-9587:3:2124
-9588:3:2132
-9589:3:2137
-9590:3:2141
-9591:3:2142
-9592:3:2149
-9593:3:2150
-9594:3:2161
-9595:3:2169
-9596:3:2170
-9597:3:2174
-9598:3:2179
-9599:3:2180
-9600:0:2565
-9601:3:2192
-9602:0:2565
-9603:3:2013
-9604:0:2565
-9605:3:2014
-9606:0:2565
-9607:3:2015
-9608:3:2019
-9609:3:2020
-9610:3:2028
-9611:3:2029
-9612:3:2033
-9613:3:2034
-9614:3:2042
-9615:3:2047
-9616:3:2051
-9617:3:2052
-9618:3:2059
-9619:3:2060
-9620:3:2071
-9621:3:2079
-9622:3:2080
-9623:3:2084
-9624:3:2089
-9625:3:2090
-9626:0:2565
-9627:2:759
-9628:0:2565
-9629:3:2102
-9630:0:2565
-9631:1:296
-9632:0:2565
-9633:3:2104
-9634:0:2565
-9635:3:2105
-9636:3:2109
-9637:3:2110
-9638:3:2118
-9639:3:2119
-9640:3:2123
-9641:3:2124
-9642:3:2132
-9643:3:2137
-9644:3:2141
-9645:3:2142
-9646:3:2149
-9647:3:2150
-9648:3:2161
-9649:3:2169
-9650:3:2170
-9651:3:2174
-9652:3:2179
-9653:3:2180
-9654:0:2565
-9655:3:2192
-9656:0:2565
-9657:3:2013
-9658:0:2565
-9659:3:2014
-9660:0:2565
-9661:3:2015
-9662:3:2019
-9663:3:2020
-9664:3:2028
-9665:3:2029
-9666:3:2033
-9667:3:2034
-9668:3:2042
-9669:3:2047
-9670:3:2051
-9671:3:2052
-9672:3:2059
-9673:3:2060
-9674:3:2071
-9675:3:2079
-9676:3:2080
-9677:3:2084
-9678:3:2089
-9679:3:2090
-9680:0:2565
-9681:3:2102
-9682:0:2565
-9683:2:760
-9684:0:2565
-9685:2:761
-9686:0:2565
-9687:2:762
-9688:0:2565
-9689:3:2104
-9690:0:2565
-9691:3:2105
-9692:3:2109
-9693:3:2110
-9694:3:2118
-9695:3:2119
-9696:3:2123
-9697:3:2124
-9698:3:2132
-9699:3:2137
-9700:3:2141
-9701:3:2142
-9702:3:2149
-9703:3:2150
-9704:3:2161
-9705:3:2169
-9706:3:2170
-9707:3:2174
-9708:3:2179
-9709:3:2180
-9710:0:2565
-9711:3:2192
-9712:0:2565
-9713:3:2013
-9714:0:2565
-9715:1:295
-9716:0:2565
-9717:2:763
-9718:0:2565
-9719:1:296
-9720:0:2565
-9721:3:2014
-9722:0:2565
-9723:3:2015
-9724:3:2019
-9725:3:2020
-9726:3:2028
-9727:3:2029
-9728:3:2033
-9729:3:2034
-9730:3:2042
-9731:3:2047
-9732:3:2051
-9733:3:2052
-9734:3:2059
-9735:3:2060
-9736:3:2071
-9737:3:2079
-9738:3:2080
-9739:3:2084
-9740:3:2089
-9741:3:2090
-9742:0:2565
-9743:3:2102
-9744:0:2565
-9745:3:2104
-9746:0:2565
-9747:3:2105
-9748:3:2109
-9749:3:2110
-9750:3:2118
-9751:3:2119
-9752:3:2123
-9753:3:2124
-9754:3:2132
-9755:3:2137
-9756:3:2141
-9757:3:2142
-9758:3:2149
-9759:3:2150
-9760:3:2161
-9761:3:2169
-9762:3:2170
-9763:3:2174
-9764:3:2179
-9765:3:2180
-9766:0:2565
-9767:3:2192
-9768:0:2565
-9769:3:2013
-9770:0:2565
-9771:1:295
-9772:0:2565
-9773:3:2014
-9774:0:2565
-9775:3:2015
-9776:3:2019
-9777:3:2020
-9778:3:2028
-9779:3:2029
-9780:3:2033
-9781:3:2034
-9782:3:2042
-9783:3:2047
-9784:3:2051
-9785:3:2052
-9786:3:2059
-9787:3:2060
-9788:3:2071
-9789:3:2079
-9790:3:2080
-9791:3:2084
-9792:3:2089
-9793:3:2090
-9794:0:2565
-9795:3:2102
-9796:0:2565
-9797:3:2104
-9798:0:2565
-9799:3:2105
-9800:3:2109
-9801:3:2110
-9802:3:2118
-9803:3:2119
-9804:3:2123
-9805:3:2124
-9806:3:2132
-9807:3:2137
-9808:3:2141
-9809:3:2142
-9810:3:2149
-9811:3:2150
-9812:3:2161
-9813:3:2169
-9814:3:2170
-9815:3:2174
-9816:3:2179
-9817:3:2180
-9818:0:2565
-9819:3:2192
-9820:0:2565
-9821:2:765
-9822:0:2565
-9823:3:2013
-9824:0:2565
-9825:1:296
-9826:0:2565
-9827:3:2014
-9828:0:2565
-9829:3:2015
-9830:3:2019
-9831:3:2020
-9832:3:2028
-9833:3:2029
-9834:3:2033
-9835:3:2034
-9836:3:2042
-9837:3:2047
-9838:3:2051
-9839:3:2052
-9840:3:2059
-9841:3:2060
-9842:3:2071
-9843:3:2079
-9844:3:2080
-9845:3:2084
-9846:3:2089
-9847:3:2090
-9848:0:2565
-9849:3:2102
-9850:0:2565
-9851:3:2104
-9852:0:2565
-9853:3:2105
-9854:3:2109
-9855:3:2110
-9856:3:2118
-9857:3:2119
-9858:3:2123
-9859:3:2124
-9860:3:2132
-9861:3:2137
-9862:3:2141
-9863:3:2142
-9864:3:2149
-9865:3:2150
-9866:3:2161
-9867:3:2169
-9868:3:2170
-9869:3:2174
-9870:3:2179
-9871:3:2180
-9872:0:2565
-9873:3:2192
-9874:0:2565
-9875:3:2013
-9876:0:2565
-9877:2:766
-9878:2:770
-9879:2:771
-9880:2:779
-9881:2:788
-9882:2:789
-9883:2:793
-9884:2:798
-9885:2:802
-9886:2:803
-9887:2:810
-9888:2:811
-9889:2:822
-9890:2:823
-9891:2:826
-9892:2:827
-9893:2:835
-9894:2:840
-9895:2:841
-9896:0:2565
-9897:3:2014
-9898:0:2565
-9899:3:2015
-9900:3:2019
-9901:3:2020
-9902:3:2028
-9903:3:2029
-9904:3:2033
-9905:3:2034
-9906:3:2042
-9907:3:2047
-9908:3:2051
-9909:3:2052
-9910:3:2059
-9911:3:2060
-9912:3:2071
-9913:3:2079
-9914:3:2080
-9915:3:2084
-9916:3:2089
-9917:3:2090
-9918:0:2565
-9919:3:2102
-9920:0:2565
-9921:3:2104
-9922:0:2565
-9923:3:2105
-9924:3:2109
-9925:3:2110
-9926:3:2118
-9927:3:2119
-9928:3:2123
-9929:3:2124
-9930:3:2132
-9931:3:2137
-9932:3:2141
-9933:3:2142
-9934:3:2149
-9935:3:2150
-9936:3:2161
-9937:3:2169
-9938:3:2170
-9939:3:2174
-9940:3:2179
-9941:3:2180
-9942:0:2565
-9943:3:2192
-9944:0:2565
-9945:2:853
-9946:0:2565
-9947:3:2013
-9948:0:2565
-9949:2:857
-9950:0:2565
-9951:2:465
-9952:0:2565
-9953:3:2014
-9954:0:2565
-9955:3:2015
-9956:3:2019
-9957:3:2020
-9958:3:2028
-9959:3:2029
-9960:3:2033
-9961:3:2034
-9962:3:2042
-9963:3:2047
-9964:3:2051
-9965:3:2052
-9966:3:2059
-9967:3:2060
-9968:3:2071
-9969:3:2079
-9970:3:2080
-9971:3:2084
-9972:3:2089
-9973:3:2090
-9974:0:2565
-9975:3:2102
-9976:0:2565
-9977:3:2104
-9978:0:2565
-9979:3:2105
-9980:3:2109
-9981:3:2110
-9982:3:2118
-9983:3:2119
-9984:3:2123
-9985:3:2124
-9986:3:2132
-9987:3:2137
-9988:3:2141
-9989:3:2142
-9990:3:2149
-9991:3:2150
-9992:3:2161
-9993:3:2169
-9994:3:2170
-9995:3:2174
-9996:3:2179
-9997:3:2180
-9998:0:2565
-9999:3:2192
-10000:0:2565
-10001:2:466
-10002:0:2565
-10003:3:2013
-10004:0:2565
-10005:3:2014
-10006:0:2565
-10007:3:2015
-10008:3:2019
-10009:3:2020
-10010:3:2028
-10011:3:2029
-10012:3:2033
-10013:3:2034
-10014:3:2042
-10015:3:2047
-10016:3:2051
-10017:3:2052
-10018:3:2059
-10019:3:2060
-10020:3:2071
-10021:3:2079
-10022:3:2080
-10023:3:2084
-10024:3:2089
-10025:3:2090
-10026:0:2565
-10027:3:2102
-10028:0:2565
-10029:3:2104
-10030:0:2565
-10031:3:2105
-10032:3:2109
-10033:3:2110
-10034:3:2118
-10035:3:2119
-10036:3:2123
-10037:3:2124
-10038:3:2132
-10039:3:2137
-10040:3:2141
-10041:3:2142
-10042:3:2149
-10043:3:2150
-10044:3:2161
-10045:3:2169
-10046:3:2170
-10047:3:2174
-10048:3:2179
-10049:3:2180
-10050:0:2565
-10051:2:467
-10052:0:2565
-10053:3:2192
-10054:0:2565
-10055:3:2013
-10056:0:2565
-10057:3:2014
-10058:0:2565
-10059:3:2015
-10060:3:2019
-10061:3:2020
-10062:3:2028
-10063:3:2029
-10064:3:2033
-10065:3:2034
-10066:3:2042
-10067:3:2047
-10068:3:2051
-10069:3:2052
-10070:3:2059
-10071:3:2060
-10072:3:2071
-10073:3:2079
-10074:3:2080
-10075:3:2084
-10076:3:2089
-10077:3:2090
-10078:0:2565
-10079:3:2102
-10080:0:2565
-10081:3:2104
-10082:0:2565
-10083:1:297
-10084:0:2565
-10085:2:468
-10086:0:2565
-10087:3:2105
-10088:3:2109
-10089:3:2110
-10090:3:2118
-10091:3:2119
-10092:3:2123
-10093:3:2124
-10094:3:2132
-10095:3:2137
-10096:3:2141
-10097:3:2142
-10098:3:2149
-10099:3:2150
-10100:3:2161
-10101:3:2169
-10102:3:2170
-10103:3:2174
-10104:3:2179
-10105:3:2180
-10106:0:2565
-10107:3:2192
-10108:0:2565
-10109:3:2013
-10110:0:2565
-10111:3:2014
-10112:0:2565
-10113:3:2015
-10114:3:2019
-10115:3:2020
-10116:3:2028
-10117:3:2029
-10118:3:2033
-10119:3:2034
-10120:3:2042
-10121:3:2047
-10122:3:2051
-10123:3:2052
-10124:3:2059
-10125:3:2060
-10126:3:2071
-10127:3:2079
-10128:3:2080
-10129:3:2084
-10130:3:2089
-10131:3:2090
-10132:0:2565
-10133:3:2102
-10134:0:2565
-10135:3:2104
-10136:0:2565
-10137:2:467
-10138:0:2565
-10139:2:468
-10140:0:2565
-10141:3:2105
-10142:3:2109
-10143:3:2110
-10144:3:2118
-10145:3:2119
-10146:3:2123
-10147:3:2124
-10148:3:2132
-10149:3:2137
-10150:3:2141
-10151:3:2142
-10152:3:2149
-10153:3:2150
-10154:3:2161
-10155:3:2169
-10156:3:2170
-10157:3:2174
-10158:3:2179
-10159:3:2180
-10160:0:2565
-10161:3:2192
-10162:0:2565
-10163:3:2013
-10164:0:2565
-10165:3:2014
-10166:0:2565
-10167:3:2015
-10168:3:2019
-10169:3:2020
-10170:3:2028
-10171:3:2029
-10172:3:2033
-10173:3:2034
-10174:3:2042
-10175:3:2047
-10176:3:2051
-10177:3:2052
-10178:3:2059
-10179:3:2060
-10180:3:2071
-10181:3:2079
-10182:3:2080
-10183:3:2084
-10184:3:2089
-10185:3:2090
-10186:0:2565
-10187:3:2102
-10188:0:2565
-10189:2:467
-10190:0:2565
-10191:1:303
-10192:0:2565
-10193:2:468
-10194:0:2565
-10195:1:312
-10196:0:2565
-10197:3:2104
-10198:0:2565
-10199:3:2105
-10200:3:2109
-10201:3:2110
-10202:3:2118
-10203:3:2119
-10204:3:2123
-10205:3:2124
-10206:3:2132
-10207:3:2137
-10208:3:2141
-10209:3:2142
-10210:3:2149
-10211:3:2150
-10212:3:2161
-10213:3:2169
-10214:3:2170
-10215:3:2174
-10216:3:2179
-10217:3:2180
-10218:0:2565
-10219:3:2192
-10220:0:2565
-10221:3:2013
-10222:0:2565
-10223:3:2014
-10224:0:2565
-10225:3:2015
-10226:3:2019
-10227:3:2020
-10228:3:2028
-10229:3:2029
-10230:3:2033
-10231:3:2034
-10232:3:2042
-10233:3:2047
-10234:3:2051
-10235:3:2052
-10236:3:2059
-10237:3:2060
-10238:3:2071
-10239:3:2079
-10240:3:2080
-10241:3:2084
-10242:3:2089
-10243:3:2090
-10244:0:2565
-10245:3:2102
-10246:0:2565
-10247:2:467
-10248:0:2565
-10249:2:468
-10250:0:2565
-10251:3:2104
-10252:0:2565
-10253:3:2105
-10254:3:2109
-10255:3:2110
-10256:3:2118
-10257:3:2119
-10258:3:2123
-10259:3:2124
-10260:3:2132
-10261:3:2137
-10262:3:2141
-10263:3:2142
-10264:3:2149
-10265:3:2150
-10266:3:2161
-10267:3:2169
-10268:3:2170
-10269:3:2174
-10270:3:2179
-10271:3:2180
-10272:0:2565
-10273:3:2192
-10274:0:2565
-10275:3:2013
-10276:0:2565
-10277:3:2014
-10278:0:2565
-10279:3:2015
-10280:3:2019
-10281:3:2020
-10282:3:2028
-10283:3:2029
-10284:3:2033
-10285:3:2034
-10286:3:2042
-10287:3:2047
-10288:3:2051
-10289:3:2052
-10290:3:2059
-10291:3:2060
-10292:3:2071
-10293:3:2079
-10294:3:2080
-10295:3:2084
-10296:3:2089
-10297:3:2090
-10298:0:2565
-10299:2:467
-10300:0:2565
-10301:1:314
-10302:0:2565
-10303:3:2102
-10304:0:2565
-10305:2:468
-10306:0:2565
-10307:3:2104
-10308:0:2565
-10309:3:2105
-10310:3:2109
-10311:3:2110
-10312:3:2118
-10313:3:2119
-10314:3:2123
-10315:3:2124
-10316:3:2132
-10317:3:2137
-10318:3:2141
-10319:3:2142
-10320:3:2149
-10321:3:2150
-10322:3:2161
-10323:3:2169
-10324:3:2170
-10325:3:2174
-10326:3:2179
-10327:3:2180
-10328:0:2565
-10329:3:2192
-10330:0:2565
-10331:3:2013
-10332:0:2565
-10333:3:2014
-10334:0:2565
-10335:3:2015
-10336:3:2019
-10337:3:2020
-10338:3:2028
-10339:3:2029
-10340:3:2033
-10341:3:2034
-10342:3:2042
-10343:3:2047
-10344:3:2051
-10345:3:2052
-10346:3:2059
-10347:3:2060
-10348:3:2071
-10349:3:2079
-10350:3:2080
-10351:3:2084
-10352:3:2089
-10353:3:2090
-10354:0:2565
-10355:2:469
-10356:0:2565
-10357:3:2102
-10358:0:2565
-10359:2:475
-10360:0:2565
-10361:2:476
-10362:0:2565
-10363:3:2104
-10364:0:2565
-10365:3:2105
-10366:3:2109
-10367:3:2110
-10368:3:2118
-10369:3:2119
-10370:3:2123
-10371:3:2124
-10372:3:2132
-10373:3:2137
-10374:3:2141
-10375:3:2142
-10376:3:2149
-10377:3:2150
-10378:3:2161
-10379:3:2169
-10380:3:2170
-10381:3:2174
-10382:3:2179
-10383:3:2180
-10384:0:2565
-10385:3:2192
-10386:0:2565
-10387:3:2013
-10388:0:2565
-10389:3:2014
-10390:0:2565
-10391:3:2015
-10392:3:2019
-10393:3:2020
-10394:3:2028
-10395:3:2029
-10396:3:2033
-10397:3:2034
-10398:3:2042
-10399:3:2047
-10400:3:2051
-10401:3:2052
-10402:3:2059
-10403:3:2060
-10404:3:2071
-10405:3:2079
-10406:3:2080
-10407:3:2084
-10408:3:2089
-10409:3:2090
-10410:0:2565
-10411:2:477
-10412:2:481
-10413:2:482
-10414:2:490
-10415:2:499
-10416:2:500
-10417:2:504
-10418:2:509
-10419:2:513
-10420:2:514
-10421:2:521
-10422:2:522
-10423:2:533
-10424:2:534
-10425:2:537
-10426:2:538
-10427:2:546
-10428:2:551
-10429:2:552
-10430:0:2565
-10431:3:2102
-10432:0:2565
-10433:3:2104
-10434:0:2565
-10435:3:2105
-10436:3:2109
-10437:3:2110
-10438:3:2118
-10439:3:2119
-10440:3:2123
-10441:3:2124
-10442:3:2132
-10443:3:2137
-10444:3:2141
-10445:3:2142
-10446:3:2149
-10447:3:2150
-10448:3:2161
-10449:3:2169
-10450:3:2170
-10451:3:2174
-10452:3:2179
-10453:3:2180
-10454:0:2565
-10455:3:2192
-10456:0:2565
-10457:3:2013
-10458:0:2565
-10459:3:2014
-10460:0:2565
-10461:2:564
-10462:0:2565
-10463:3:2015
-10464:3:2019
-10465:3:2020
-10466:3:2028
-10467:3:2029
-10468:3:2033
-10469:3:2034
-10470:3:2042
-10471:3:2047
-10472:3:2051
-10473:3:2052
-10474:3:2059
-10475:3:2060
-10476:3:2071
-10477:3:2079
-10478:3:2080
-10479:3:2084
-10480:3:2089
-10481:3:2090
-10482:0:2565
-10483:3:2102
-10484:0:2565
-10485:3:2104
-10486:0:2565
-10487:3:2105
-10488:3:2109
-10489:3:2110
-10490:3:2118
-10491:3:2119
-10492:3:2123
-10493:3:2124
-10494:3:2132
-10495:3:2137
-10496:3:2141
-10497:3:2142
-10498:3:2149
-10499:3:2150
-10500:3:2161
-10501:3:2169
-10502:3:2170
-10503:3:2174
-10504:3:2179
-10505:3:2180
-10506:0:2565
-10507:3:2192
-10508:0:2565
-10509:3:2013
-10510:0:2565
-10511:2:565
-10512:2:569
-10513:2:570
-10514:2:578
-10515:2:587
-10516:2:588
-10517:2:592
-10518:2:597
-10519:2:601
-10520:2:602
-10521:2:609
-10522:2:610
-10523:2:621
-10524:2:622
-10525:2:625
-10526:2:626
-10527:2:634
-10528:2:639
-10529:2:640
-10530:0:2565
-10531:2:744
-10532:0:2565
-10533:3:2014
-10534:0:2565
-10535:3:2015
-10536:3:2019
-10537:3:2020
-10538:3:2028
-10539:3:2029
-10540:3:2033
-10541:3:2034
-10542:3:2042
-10543:3:2047
-10544:3:2051
-10545:3:2052
-10546:3:2059
-10547:3:2060
-10548:3:2071
-10549:3:2079
-10550:3:2080
-10551:3:2084
-10552:3:2089
-10553:3:2090
-10554:0:2565
-10555:3:2102
-10556:0:2565
-10557:3:2104
-10558:0:2565
-10559:3:2105
-10560:3:2109
-10561:3:2110
-10562:3:2118
-10563:3:2119
-10564:3:2123
-10565:3:2124
-10566:3:2132
-10567:3:2137
-10568:3:2141
-10569:3:2142
-10570:3:2149
-10571:3:2150
-10572:3:2161
-10573:3:2169
-10574:3:2170
-10575:3:2174
-10576:3:2179
-10577:3:2180
-10578:0:2565
-10579:3:2192
-10580:0:2565
-10581:2:745
-10582:0:2565
-10583:3:2013
-10584:0:2565
-10585:2:750
-10586:0:2565
-10587:2:753
-10588:0:2565
-10589:3:2014
-10590:0:2565
-10591:3:2015
-10592:3:2019
-10593:3:2020
-10594:3:2028
-10595:3:2029
-10596:3:2033
-10597:3:2034
-10598:3:2042
-10599:3:2047
-10600:3:2051
-10601:3:2052
-10602:3:2059
-10603:3:2060
-10604:3:2071
-10605:3:2079
-10606:3:2080
-10607:3:2084
-10608:3:2089
-10609:3:2090
-10610:0:2565
-10611:3:2102
-10612:0:2565
-10613:3:2104
-10614:0:2565
-10615:3:2105
-10616:3:2109
-10617:3:2110
-10618:3:2118
-10619:3:2119
-10620:3:2123
-10621:3:2124
-10622:3:2132
-10623:3:2137
-10624:3:2141
-10625:3:2142
-10626:3:2149
-10627:3:2150
-10628:3:2161
-10629:3:2169
-10630:3:2170
-10631:3:2174
-10632:3:2179
-10633:3:2180
-10634:0:2565
-10635:3:2192
-10636:0:2565
-10637:2:758
-10638:0:2565
-10639:3:2013
-10640:0:2565
-10641:3:2014
-10642:0:2565
-10643:3:2015
-10644:3:2019
-10645:3:2020
-10646:3:2028
-10647:3:2029
-10648:3:2033
-10649:3:2034
-10650:3:2042
-10651:3:2047
-10652:3:2051
-10653:3:2052
-10654:3:2059
-10655:3:2060
-10656:3:2071
-10657:3:2079
-10658:3:2080
-10659:3:2084
-10660:3:2089
-10661:3:2090
-10662:0:2565
-10663:3:2102
-10664:0:2565
-10665:3:2104
-10666:0:2565
-10667:3:2105
-10668:3:2109
-10669:3:2110
-10670:3:2118
-10671:3:2119
-10672:3:2123
-10673:3:2124
-10674:3:2132
-10675:3:2137
-10676:3:2141
-10677:3:2142
-10678:3:2149
-10679:3:2150
-10680:3:2161
-10681:3:2169
-10682:3:2170
-10683:3:2174
-10684:3:2179
-10685:3:2180
-10686:0:2565
-10687:2:759
-10688:0:2565
-10689:3:2192
-10690:0:2565
-10691:3:2013
-10692:0:2565
-10693:3:2014
-10694:0:2565
-10695:3:2015
-10696:3:2019
-10697:3:2020
-10698:3:2028
-10699:3:2029
-10700:3:2033
-10701:3:2034
-10702:3:2042
-10703:3:2047
-10704:3:2051
-10705:3:2052
-10706:3:2059
-10707:3:2060
-10708:3:2071
-10709:3:2079
-10710:3:2080
-10711:3:2084
-10712:3:2089
-10713:3:2090
-10714:0:2565
-10715:3:2102
-10716:0:2565
-10717:3:2104
-10718:0:2565
-10719:2:760
-10720:0:2565
-10721:2:761
-10722:0:2565
-10723:2:762
-10724:0:2565
-10725:2:763
-10726:0:2565
-10727:3:2105
-10728:3:2109
-10729:3:2110
-10730:3:2118
-10731:3:2119
-10732:3:2123
-10733:3:2124
-10734:3:2132
-10735:3:2137
-10736:3:2141
-10737:3:2142
-10738:3:2149
-10739:3:2150
-10740:3:2161
-10741:3:2169
-10742:3:2170
-10743:3:2174
-10744:3:2179
-10745:3:2180
-10746:0:2565
-10747:3:2192
-10748:0:2565
-10749:3:2013
-10750:0:2565
-10751:3:2014
-10752:0:2565
-10753:3:2015
-10754:3:2019
-10755:3:2020
-10756:3:2028
-10757:3:2029
-10758:3:2033
-10759:3:2034
-10760:3:2042
-10761:3:2047
-10762:3:2051
-10763:3:2052
-10764:3:2059
-10765:3:2060
-10766:3:2071
-10767:3:2079
-10768:3:2080
-10769:3:2084
-10770:3:2089
-10771:3:2090
-10772:0:2565
-10773:3:2102
-10774:0:2565
-10775:2:765
-10776:0:2565
-10777:3:2104
-10778:0:2565
-10779:3:2105
-10780:3:2109
-10781:3:2110
-10782:3:2118
-10783:3:2119
-10784:3:2123
-10785:3:2124
-10786:3:2132
-10787:3:2137
-10788:3:2141
-10789:3:2142
-10790:3:2149
-10791:3:2150
-10792:3:2161
-10793:3:2169
-10794:3:2170
-10795:3:2174
-10796:3:2179
-10797:3:2180
-10798:0:2565
-10799:3:2192
-10800:0:2565
-10801:3:2013
-10802:0:2565
-10803:3:2014
-10804:0:2565
-10805:3:2015
-10806:3:2019
-10807:3:2020
-10808:3:2028
-10809:3:2029
-10810:3:2033
-10811:3:2034
-10812:3:2042
-10813:3:2047
-10814:3:2051
-10815:3:2052
-10816:3:2059
-10817:3:2060
-10818:3:2071
-10819:3:2079
-10820:3:2080
-10821:3:2084
-10822:3:2089
-10823:3:2090
-10824:0:2565
-10825:2:766
-10826:2:770
-10827:2:771
-10828:2:779
-10829:2:788
-10830:2:789
-10831:2:793
-10832:2:798
-10833:2:802
-10834:2:803
-10835:2:810
-10836:2:811
-10837:2:822
-10838:2:823
-10839:2:826
-10840:2:827
-10841:2:835
-10842:2:840
-10843:2:841
-10844:0:2565
-10845:3:2102
-10846:0:2565
-10847:3:2104
-10848:0:2565
-10849:3:2105
-10850:3:2109
-10851:3:2110
-10852:3:2118
-10853:3:2119
-10854:3:2123
-10855:3:2124
-10856:3:2132
-10857:3:2137
-10858:3:2141
-10859:3:2142
-10860:3:2149
-10861:3:2150
-10862:3:2161
-10863:3:2169
-10864:3:2170
-10865:3:2174
-10866:3:2179
-10867:3:2180
-10868:0:2565
-10869:3:2192
-10870:0:2565
-10871:3:2013
-10872:0:2565
-10873:3:2014
-10874:0:2565
-10875:2:853
-10876:0:2565
-10877:2:857
-10878:0:2565
-10879:2:465
-10880:0:2565
-10881:3:2015
-10882:3:2019
-10883:3:2020
-10884:3:2028
-10885:3:2029
-10886:3:2033
-10887:3:2034
-10888:3:2042
-10889:3:2047
-10890:3:2051
-10891:3:2052
-10892:3:2059
-10893:3:2060
-10894:3:2071
-10895:3:2079
-10896:3:2080
-10897:3:2084
-10898:3:2089
-10899:3:2090
-10900:0:2565
-10901:3:2102
-10902:0:2565
-10903:3:2104
-10904:0:2565
-10905:3:2105
-10906:3:2109
-10907:3:2110
-10908:3:2118
-10909:3:2119
-10910:3:2123
-10911:3:2124
-10912:3:2132
-10913:3:2137
-10914:3:2141
-10915:3:2142
-10916:3:2149
-10917:3:2150
-10918:3:2161
-10919:3:2169
-10920:3:2170
-10921:3:2174
-10922:3:2179
-10923:3:2180
-10924:0:2565
-10925:3:2192
-10926:0:2565
-10927:3:2013
-10928:0:2565
-10929:2:466
-10930:0:2565
-10931:3:2014
-10932:0:2565
-10933:3:2015
-10934:3:2019
-10935:3:2020
-10936:3:2028
-10937:3:2029
-10938:3:2033
-10939:3:2034
-10940:3:2042
-10941:3:2047
-10942:3:2051
-10943:3:2052
-10944:3:2059
-10945:3:2060
-10946:3:2071
-10947:3:2079
-10948:3:2080
-10949:3:2084
-10950:3:2089
-10951:3:2090
-10952:0:2565
-10953:3:2102
-10954:0:2565
-10955:3:2104
-10956:0:2565
-10957:3:2105
-10958:3:2109
-10959:3:2110
-10960:3:2118
-10961:3:2119
-10962:3:2123
-10963:3:2124
-10964:3:2132
-10965:3:2137
-10966:3:2141
-10967:3:2142
-10968:3:2149
-10969:3:2150
-10970:3:2161
-10971:3:2169
-10972:3:2170
-10973:3:2174
-10974:3:2179
-10975:3:2180
-10976:0:2565
-10977:3:2192
-10978:0:2565
-10979:2:467
-10980:0:2565
-10981:3:2013
-10982:0:2565
-10983:3:2014
-10984:0:2565
-10985:3:2015
-10986:3:2019
-10987:3:2020
-10988:3:2028
-10989:3:2029
-10990:3:2033
-10991:3:2034
-10992:3:2042
-10993:3:2047
-10994:3:2051
-10995:3:2052
-10996:3:2059
-10997:3:2060
-10998:3:2071
-10999:3:2079
-11000:3:2080
-11001:3:2084
-11002:3:2089
-11003:3:2090
-11004:0:2565
-11005:3:2102
-11006:0:2565
-11007:3:2104
-11008:0:2565
-11009:3:2105
-11010:3:2109
-11011:3:2110
-11012:3:2118
-11013:3:2119
-11014:3:2123
-11015:3:2124
-11016:3:2132
-11017:3:2137
-11018:3:2141
-11019:3:2142
-11020:3:2149
-11021:3:2150
-11022:3:2161
-11023:3:2169
-11024:3:2170
-11025:3:2174
-11026:3:2179
-11027:3:2180
-11028:0:2565
-11029:1:317
-11030:0:2565
-11031:3:2192
-11032:0:2565
-11033:3:2013
-11034:0:2565
-11035:2:468
-11036:0:2565
-11037:1:323
-11038:0:2565
-11039:1:324
-11040:0:2565
-11041:3:2014
-11042:0:2565
-11043:3:2015
-11044:3:2019
-11045:3:2020
-11046:3:2028
-11047:3:2029
-11048:3:2033
-11049:3:2034
-11050:3:2042
-11051:3:2047
-11052:3:2051
-11053:3:2052
-11054:3:2059
-11055:3:2060
-11056:3:2071
-11057:3:2079
-11058:3:2080
-11059:3:2084
-11060:3:2089
-11061:3:2090
-11062:0:2565
-11063:3:2102
-11064:0:2565
-11065:3:2104
-11066:0:2565
-11067:3:2105
-11068:3:2109
-11069:3:2110
-11070:3:2118
-11071:3:2119
-11072:3:2123
-11073:3:2124
-11074:3:2132
-11075:3:2137
-11076:3:2141
-11077:3:2142
-11078:3:2149
-11079:3:2150
-11080:3:2161
-11081:3:2169
-11082:3:2170
-11083:3:2174
-11084:3:2179
-11085:3:2180
-11086:0:2565
-11087:3:2192
-11088:0:2565
-11089:3:2013
-11090:0:2565
-11091:2:467
-11092:0:2565
-11093:2:468
-11094:0:2565
-11095:3:2014
-11096:0:2565
-11097:3:2015
-11098:3:2019
-11099:3:2020
-11100:3:2028
-11101:3:2029
-11102:3:2033
-11103:3:2034
-11104:3:2042
-11105:3:2047
-11106:3:2051
-11107:3:2052
-11108:3:2059
-11109:3:2060
-11110:3:2071
-11111:3:2079
-11112:3:2080
-11113:3:2084
-11114:3:2089
-11115:3:2090
-11116:0:2565
-11117:3:2102
-11118:0:2565
-11119:3:2104
-11120:0:2565
-11121:3:2105
-11122:3:2109
-11123:3:2110
-11124:3:2118
-11125:3:2119
-11126:3:2123
-11127:3:2124
-11128:3:2132
-11129:3:2137
-11130:3:2141
-11131:3:2142
-11132:3:2149
-11133:3:2150
-11134:3:2161
-11135:3:2169
-11136:3:2170
-11137:3:2174
-11138:3:2179
-11139:3:2180
-11140:0:2565
-11141:3:2192
-11142:0:2565
-11143:2:467
-11144:0:2565
-11145:1:329
-11146:0:2565
-11147:3:2013
-11148:0:2565
-11149:2:468
-11150:0:2565
-11151:3:2014
-11152:0:2565
-11153:3:2015
-11154:3:2019
-11155:3:2020
-11156:3:2028
-11157:3:2029
-11158:3:2033
-11159:3:2034
-11160:3:2042
-11161:3:2047
-11162:3:2051
-11163:3:2052
-11164:3:2059
-11165:3:2060
-11166:3:2071
-11167:3:2079
-11168:3:2080
-11169:3:2084
-11170:3:2089
-11171:3:2090
-11172:0:2565
-11173:3:2102
-11174:0:2565
-11175:3:2104
-11176:0:2565
-11177:3:2105
-11178:3:2109
-11179:3:2110
-11180:3:2118
-11181:3:2119
-11182:3:2123
-11183:3:2124
-11184:3:2132
-11185:3:2137
-11186:3:2141
-11187:3:2142
-11188:3:2149
-11189:3:2150
-11190:3:2161
-11191:3:2169
-11192:3:2170
-11193:3:2174
-11194:3:2179
-11195:3:2180
-11196:0:2565
-11197:3:2192
-11198:0:2565
-11199:2:467
-11200:0:2565
-11201:3:2013
-11202:0:2565
-11203:3:2014
-11204:0:2565
-11205:3:2015
-11206:3:2019
-11207:3:2020
-11208:3:2028
-11209:3:2029
-11210:3:2033
-11211:3:2034
-11212:3:2042
-11213:3:2047
-11214:3:2051
-11215:3:2052
-11216:3:2059
-11217:3:2060
-11218:3:2071
-11219:3:2079
-11220:3:2080
-11221:3:2084
-11222:3:2089
-11223:3:2090
-11224:0:2565
-11225:3:2102
-11226:0:2565
-11227:3:2104
-11228:0:2565
-11229:3:2105
-11230:3:2109
-11231:3:2110
-11232:3:2118
-11233:3:2119
-11234:3:2123
-11235:3:2124
-11236:3:2132
-11237:3:2137
-11238:3:2141
-11239:3:2142
-11240:3:2149
-11241:3:2150
-11242:3:2161
-11243:3:2169
-11244:3:2170
-11245:3:2174
-11246:3:2179
-11247:3:2180
-11248:0:2565
-11249:1:330
-11250:0:2565
-11251:3:2192
-11252:0:2565
-11253:3:2013
-11254:0:2565
-11255:2:468
-11256:0:2565
-11257:3:2014
-11258:0:2565
-11259:3:2015
-11260:3:2019
-11261:3:2020
-11262:3:2028
-11263:3:2029
-11264:3:2033
-11265:3:2034
-11266:3:2042
-11267:3:2047
-11268:3:2051
-11269:3:2052
-11270:3:2059
-11271:3:2060
-11272:3:2071
-11273:3:2079
-11274:3:2080
-11275:3:2084
-11276:3:2089
-11277:3:2090
-11278:0:2565
-11279:3:2102
-11280:0:2565
-11281:3:2104
-11282:0:2565
-11283:3:2105
-11284:3:2109
-11285:3:2110
-11286:3:2118
-11287:3:2119
-11288:3:2123
-11289:3:2124
-11290:3:2132
-11291:3:2137
-11292:3:2141
-11293:3:2142
-11294:3:2149
-11295:3:2150
-11296:3:2161
-11297:3:2169
-11298:3:2170
-11299:3:2174
-11300:3:2179
-11301:3:2180
-11302:0:2565
-11303:3:2192
-11304:0:2565
-11305:2:467
-11306:0:2565
-11307:3:2013
-11308:0:2565
-11309:3:2014
-11310:0:2565
-11311:3:2015
-11312:3:2019
-11313:3:2020
-11314:3:2028
-11315:3:2029
-11316:3:2033
-11317:3:2034
-11318:3:2042
-11319:3:2047
-11320:3:2051
-11321:3:2052
-11322:3:2059
-11323:3:2060
-11324:3:2071
-11325:3:2079
-11326:3:2080
-11327:3:2084
-11328:3:2089
-11329:3:2090
-11330:0:2565
-11331:3:2102
-11332:0:2565
-11333:3:2104
-11334:0:2565
-11335:3:2105
-11336:3:2109
-11337:3:2110
-11338:3:2118
-11339:3:2119
-11340:3:2123
-11341:3:2124
-11342:3:2132
-11343:3:2137
-11344:3:2141
-11345:3:2142
-11346:3:2149
-11347:3:2150
-11348:3:2161
-11349:3:2169
-11350:3:2170
-11351:3:2174
-11352:3:2179
-11353:3:2180
-11354:0:2565
-11355:1:331
-11356:0:2565
-11357:3:2192
-11358:0:2565
-11359:3:2013
-11360:0:2565
-11361:2:468
-11362:0:2565
-11363:1:332
-11364:0:2565
-11365:1:333
-11366:0:2565
-11367:1:334
-11368:0:2565
-11369:3:2014
-11370:0:2565
-11371:3:2015
-11372:3:2019
-11373:3:2020
-11374:3:2028
-11375:3:2029
-11376:3:2033
-11377:3:2034
-11378:3:2042
-11379:3:2047
-11380:3:2051
-11381:3:2052
-11382:3:2059
-11383:3:2060
-11384:3:2071
-11385:3:2079
-11386:3:2080
-11387:3:2084
-11388:3:2089
-11389:3:2090
-11390:0:2565
-11391:3:2102
-11392:0:2565
-11393:3:2104
-11394:0:2565
-11395:3:2105
-11396:3:2109
-11397:3:2110
-11398:3:2118
-11399:3:2119
-11400:3:2123
-11401:3:2124
-11402:3:2132
-11403:3:2137
-11404:3:2141
-11405:3:2142
-11406:3:2149
-11407:3:2150
-11408:3:2161
-11409:3:2169
-11410:3:2170
-11411:3:2174
-11412:3:2179
-11413:3:2180
-11414:0:2565
-11415:3:2192
-11416:0:2565
-11417:3:2013
-11418:0:2565
-11419:2:467
-11420:0:2565
-11421:2:468
-11422:0:2565
-11423:3:2014
-11424:0:2565
-11425:3:2015
-11426:3:2019
-11427:3:2020
-11428:3:2028
-11429:3:2029
-11430:3:2033
-11431:3:2034
-11432:3:2042
-11433:3:2047
-11434:3:2051
-11435:3:2052
-11436:3:2059
-11437:3:2060
-11438:3:2071
-11439:3:2079
-11440:3:2080
-11441:3:2084
-11442:3:2089
-11443:3:2090
-11444:0:2565
-11445:3:2102
-11446:0:2565
-11447:3:2104
-11448:0:2565
-11449:3:2105
-11450:3:2109
-11451:3:2110
-11452:3:2118
-11453:3:2119
-11454:3:2123
-11455:3:2124
-11456:3:2132
-11457:3:2137
-11458:3:2141
-11459:3:2142
-11460:3:2149
-11461:3:2150
-11462:3:2161
-11463:3:2169
-11464:3:2170
-11465:3:2174
-11466:3:2179
-11467:3:2180
-11468:0:2565
-11469:3:2192
-11470:0:2565
-11471:2:467
-11472:0:2565
-11473:1:336
-11474:0:2565
-11475:3:2013
-11476:0:2565
-11477:2:468
-11478:0:2565
-11479:3:2014
-11480:0:2565
-11481:3:2015
-11482:3:2019
-11483:3:2020
-11484:3:2028
-11485:3:2029
-11486:3:2033
-11487:3:2034
-11488:3:2042
-11489:3:2047
-11490:3:2051
-11491:3:2052
-11492:3:2059
-11493:3:2060
-11494:3:2071
-11495:3:2079
-11496:3:2080
-11497:3:2084
-11498:3:2089
-11499:3:2090
-11500:0:2565
-11501:3:2102
-11502:0:2565
-11503:3:2104
-11504:0:2565
-11505:3:2105
-11506:3:2109
-11507:3:2110
-11508:3:2118
-11509:3:2119
-11510:3:2123
-11511:3:2124
-11512:3:2132
-11513:3:2137
-11514:3:2141
-11515:3:2142
-11516:3:2149
-11517:3:2150
-11518:3:2161
-11519:3:2169
-11520:3:2170
-11521:3:2174
-11522:3:2179
-11523:3:2180
-11524:0:2565
-11525:3:2192
-11526:0:2565
-11527:2:469
-11528:0:2565
-11529:3:2013
-11530:0:2565
-11531:2:475
-11532:0:2565
-11533:2:476
-11534:0:2565
-11535:3:2014
-11536:0:2565
-11537:3:2015
-11538:3:2019
-11539:3:2020
-11540:3:2028
-11541:3:2029
-11542:3:2033
-11543:3:2034
-11544:3:2042
-11545:3:2047
-11546:3:2051
-11547:3:2052
-11548:3:2059
-11549:3:2060
-11550:3:2071
-11551:3:2079
-11552:3:2080
-11553:3:2084
-11554:3:2089
-11555:3:2090
-11556:0:2565
-11557:3:2102
-11558:0:2565
-11559:3:2104
-11560:0:2565
-11561:3:2105
-11562:3:2109
-11563:3:2110
-11564:3:2118
-11565:3:2119
-11566:3:2123
-11567:3:2124
-11568:3:2132
-11569:3:2137
-11570:3:2141
-11571:3:2142
-11572:3:2149
-11573:3:2150
-11574:3:2161
-11575:3:2169
-11576:3:2170
-11577:3:2174
-11578:3:2179
-11579:3:2180
-11580:0:2565
-11581:3:2192
-11582:0:2565
-11583:2:477
-11584:2:481
-11585:2:482
-11586:2:490
-11587:2:499
-11588:2:500
-11589:2:504
-11590:2:509
-11591:2:513
-11592:2:514
-11593:2:521
-11594:2:522
-11595:2:533
-11596:2:534
-11597:2:537
-11598:2:538
-11599:2:546
-11600:2:551
-11601:2:552
-11602:0:2565
-11603:3:2013
-11604:0:2565
-11605:3:2014
-11606:0:2565
-11607:3:2015
-11608:3:2019
-11609:3:2020
-11610:3:2028
-11611:3:2029
-11612:3:2033
-11613:3:2034
-11614:3:2042
-11615:3:2047
-11616:3:2051
-11617:3:2052
-11618:3:2059
-11619:3:2060
-11620:3:2071
-11621:3:2079
-11622:3:2080
-11623:3:2084
-11624:3:2089
-11625:3:2090
-11626:0:2565
-11627:3:2102
-11628:0:2565
-11629:3:2104
-11630:0:2565
-11631:3:2105
-11632:3:2109
-11633:3:2110
-11634:3:2118
-11635:3:2119
-11636:3:2123
-11637:3:2124
-11638:3:2132
-11639:3:2137
-11640:3:2141
-11641:3:2142
-11642:3:2149
-11643:3:2150
-11644:3:2161
-11645:3:2169
-11646:3:2170
-11647:3:2174
-11648:3:2179
-11649:3:2180
-11650:0:2565
-11651:2:564
-11652:0:2565
-11653:3:2192
-11654:0:2565
-11655:3:2013
-11656:0:2565
-11657:3:2014
-11658:0:2565
-11659:3:2015
-11660:3:2019
-11661:3:2020
-11662:3:2028
-11663:3:2029
-11664:3:2033
-11665:3:2034
-11666:3:2042
-11667:3:2047
-11668:3:2051
-11669:3:2052
-11670:3:2059
-11671:3:2060
-11672:3:2071
-11673:3:2079
-11674:3:2080
-11675:3:2084
-11676:3:2089
-11677:3:2090
-11678:0:2565
-11679:3:2102
-11680:0:2565
-11681:3:2104
-11682:0:2565
-11683:2:565
-11684:2:569
-11685:2:570
-11686:2:578
-11687:2:587
-11688:2:588
-11689:2:592
-11690:2:597
-11691:2:601
-11692:2:602
-11693:2:609
-11694:2:610
-11695:2:621
-11696:2:622
-11697:2:625
-11698:2:626
-11699:2:634
-11700:2:639
-11701:2:640
-11702:0:2565
-11703:2:744
-11704:0:2565
-11705:3:2105
-11706:3:2109
-11707:3:2110
-11708:3:2118
-11709:3:2119
-11710:3:2123
-11711:3:2124
-11712:3:2132
-11713:3:2137
-11714:3:2141
-11715:3:2142
-11716:3:2149
-11717:3:2150
-11718:3:2161
-11719:3:2169
-11720:3:2170
-11721:3:2174
-11722:3:2179
-11723:3:2180
-11724:0:2565
-11725:3:2192
-11726:0:2565
-11727:3:2013
-11728:0:2565
-11729:3:2014
-11730:0:2565
-11731:3:2015
-11732:3:2019
-11733:3:2020
-11734:3:2028
-11735:3:2029
-11736:3:2033
-11737:3:2034
-11738:3:2042
-11739:3:2047
-11740:3:2051
-11741:3:2052
-11742:3:2059
-11743:3:2060
-11744:3:2071
-11745:3:2079
-11746:3:2080
-11747:3:2084
-11748:3:2089
-11749:3:2090
-11750:0:2565
-11751:3:2102
-11752:0:2565
-11753:2:745
-11754:0:2565
-11755:2:750
-11756:0:2565
-11757:2:753
-11758:0:2565
-11759:3:2104
-11760:0:2565
-11761:3:2105
-11762:3:2109
-11763:3:2110
-11764:3:2118
-11765:3:2119
-11766:3:2123
-11767:3:2124
-11768:3:2132
-11769:3:2137
-11770:3:2141
-11771:3:2142
-11772:3:2149
-11773:3:2150
-11774:3:2161
-11775:3:2169
-11776:3:2170
-11777:3:2174
-11778:3:2179
-11779:3:2180
-11780:0:2565
-11781:3:2192
-11782:0:2565
-11783:3:2013
-11784:0:2565
-11785:3:2014
-11786:0:2565
-11787:3:2015
-11788:3:2019
-11789:3:2020
-11790:3:2028
-11791:3:2029
-11792:3:2033
-11793:3:2034
-11794:3:2042
-11795:3:2047
-11796:3:2051
-11797:3:2052
-11798:3:2059
-11799:3:2060
-11800:3:2071
-11801:3:2079
-11802:3:2080
-11803:3:2084
-11804:3:2089
-11805:3:2090
-11806:0:2565
-11807:2:758
-11808:0:2565
-11809:3:2102
-11810:0:2565
-11811:3:2104
-11812:0:2565
-11813:3:2105
-11814:3:2109
-11815:3:2110
-11816:3:2118
-11817:3:2119
-11818:3:2123
-11819:3:2124
-11820:3:2132
-11821:3:2137
-11822:3:2141
-11823:3:2142
-11824:3:2149
-11825:3:2150
-11826:3:2161
-11827:3:2169
-11828:3:2170
-11829:3:2174
-11830:3:2179
-11831:3:2180
-11832:0:2565
-11833:3:2192
-11834:0:2565
-11835:3:2013
-11836:0:2565
-11837:3:2014
-11838:0:2565
-11839:2:759
-11840:0:2565
-11841:3:2015
-11842:3:2019
-11843:3:2020
-11844:3:2028
-11845:3:2029
-11846:3:2033
-11847:3:2034
-11848:3:2042
-11849:3:2047
-11850:3:2051
-11851:3:2052
-11852:3:2059
-11853:3:2060
-11854:3:2071
-11855:3:2079
-11856:3:2080
-11857:3:2084
-11858:3:2089
-11859:3:2090
-11860:0:2565
-11861:3:2102
-11862:0:2565
-11863:3:2104
-11864:0:2565
-11865:3:2105
-11866:3:2109
-11867:3:2110
-11868:3:2118
-11869:3:2119
-11870:3:2123
-11871:3:2124
-11872:3:2132
-11873:3:2137
-11874:3:2141
-11875:3:2142
-11876:3:2149
-11877:3:2150
-11878:3:2161
-11879:3:2169
-11880:3:2170
-11881:3:2174
-11882:3:2179
-11883:3:2180
-11884:0:2565
-11885:3:2192
-11886:0:2565
-11887:3:2013
-11888:0:2565
-11889:2:760
-11890:0:2565
-11891:2:761
-11892:0:2565
-11893:2:762
-11894:0:2565
-11895:2:763
-11896:0:2565
-11897:3:2014
-11898:0:2565
-11899:3:2015
-11900:3:2019
-11901:3:2020
-11902:3:2028
-11903:3:2029
-11904:3:2033
-11905:3:2034
-11906:3:2042
-11907:3:2047
-11908:3:2051
-11909:3:2052
-11910:3:2059
-11911:3:2060
-11912:3:2071
-11913:3:2079
-11914:3:2080
-11915:3:2084
-11916:3:2089
-11917:3:2090
-11918:0:2565
-11919:3:2102
-11920:0:2565
-11921:3:2104
-11922:0:2565
-11923:3:2105
-11924:3:2109
-11925:3:2110
-11926:3:2118
-11927:3:2119
-11928:3:2123
-11929:3:2124
-11930:3:2132
-11931:3:2137
-11932:3:2141
-11933:3:2142
-11934:3:2149
-11935:3:2150
-11936:3:2161
-11937:3:2169
-11938:3:2170
-11939:3:2174
-11940:3:2179
-11941:3:2180
-11942:0:2565
-11943:3:2192
-11944:0:2565
-11945:2:765
-11946:0:2565
-11947:3:2013
-11948:0:2565
-11949:3:2014
-11950:0:2565
-11951:3:2015
-11952:3:2019
-11953:3:2020
-11954:3:2028
-11955:3:2029
-11956:3:2033
-11957:3:2034
-11958:3:2042
-11959:3:2047
-11960:3:2051
-11961:3:2052
-11962:3:2059
-11963:3:2060
-11964:3:2071
-11965:3:2079
-11966:3:2080
-11967:3:2084
-11968:3:2089
-11969:3:2090
-11970:0:2565
-11971:3:2102
-11972:0:2565
-11973:3:2104
-11974:0:2565
-11975:3:2105
-11976:3:2109
-11977:3:2110
-11978:3:2118
-11979:3:2119
-11980:3:2123
-11981:3:2124
-11982:3:2132
-11983:3:2137
-11984:3:2141
-11985:3:2142
-11986:3:2149
-11987:3:2150
-11988:3:2161
-11989:3:2169
-11990:3:2170
-11991:3:2174
-11992:3:2179
-11993:3:2180
-11994:0:2565
-11995:2:766
-11996:2:770
-11997:2:771
-11998:2:779
-11999:2:788
-12000:2:789
-12001:2:793
-12002:2:798
-12003:2:802
-12004:2:803
-12005:2:810
-12006:2:811
-12007:2:822
-12008:2:823
-12009:2:826
-12010:2:827
-12011:2:835
-12012:2:840
-12013:2:841
-12014:0:2565
-12015:3:2192
-12016:0:2565
-12017:3:2013
-12018:0:2565
-12019:3:2014
-12020:0:2565
-12021:3:2015
-12022:3:2019
-12023:3:2020
-12024:3:2028
-12025:3:2029
-12026:3:2033
-12027:3:2034
-12028:3:2042
-12029:3:2047
-12030:3:2051
-12031:3:2052
-12032:3:2059
-12033:3:2060
-12034:3:2071
-12035:3:2079
-12036:3:2080
-12037:3:2084
-12038:3:2089
-12039:3:2090
-12040:0:2565
-12041:3:2102
-12042:0:2565
-12043:3:2104
-12044:0:2565
-12045:2:853
-12046:0:2565
-12047:2:857
-12048:0:2565
-12049:2:465
-12050:0:2565
-12051:3:2105
-12052:3:2109
-12053:3:2110
-12054:3:2118
-12055:3:2119
-12056:3:2123
-12057:3:2124
-12058:3:2132
-12059:3:2137
-12060:3:2141
-12061:3:2142
-12062:3:2149
-12063:3:2150
-12064:3:2161
-12065:3:2169
-12066:3:2170
-12067:3:2174
-12068:3:2179
-12069:3:2180
-12070:0:2565
-12071:3:2192
-12072:0:2565
-12073:3:2013
-12074:0:2565
-12075:3:2014
-12076:0:2565
-12077:3:2015
-12078:3:2019
-12079:3:2020
-12080:3:2028
-12081:3:2029
-12082:3:2033
-12083:3:2034
-12084:3:2042
-12085:3:2047
-12086:3:2051
-12087:3:2052
-12088:3:2059
-12089:3:2060
-12090:3:2071
-12091:3:2079
-12092:3:2080
-12093:3:2084
-12094:3:2089
-12095:3:2090
-12096:0:2565
-12097:3:2102
-12098:0:2565
-12099:2:466
-12100:0:2565
-12101:3:2104
-12102:0:2565
-12103:3:2105
-12104:3:2109
-12105:3:2110
-12106:3:2118
-12107:3:2119
-12108:3:2123
-12109:3:2124
-12110:3:2132
-12111:3:2137
-12112:3:2141
-12113:3:2142
-12114:3:2149
-12115:3:2150
-12116:3:2161
-12117:3:2169
-12118:3:2170
-12119:3:2174
-12120:3:2179
-12121:3:2180
-12122:0:2565
-12123:3:2192
-12124:0:2565
-12125:3:2013
-12126:0:2565
-12127:3:2014
-12128:0:2565
-12129:3:2015
-12130:3:2019
-12131:3:2020
-12132:3:2028
-12133:3:2029
-12134:3:2033
-12135:3:2034
-12136:3:2042
-12137:3:2047
-12138:3:2051
-12139:3:2052
-12140:3:2059
-12141:3:2060
-12142:3:2071
-12143:3:2079
-12144:3:2080
-12145:3:2084
-12146:3:2089
-12147:3:2090
-12148:0:2565
-12149:2:467
-12150:0:2565
-12151:3:2102
-12152:0:2565
-12153:3:2104
-12154:0:2565
-12155:3:2105
-12156:3:2109
-12157:3:2110
-12158:3:2118
-12159:3:2119
-12160:3:2123
-12161:3:2124
-12162:3:2132
-12163:3:2137
-12164:3:2141
-12165:3:2142
-12166:3:2149
-12167:3:2150
-12168:3:2161
-12169:3:2169
-12170:3:2170
-12171:3:2174
-12172:3:2179
-12173:3:2180
-12174:0:2565
-12175:3:2192
-12176:0:2565
-12177:3:2013
-12178:0:2565
-12179:3:2014
-12180:0:2565
-12181:1:339
-12182:0:2565
-12183:2:468
-12184:0:2565
-12185:3:2015
-12186:3:2019
-12187:3:2020
-12188:3:2028
-12189:3:2029
-12190:3:2033
-12191:3:2034
-12192:3:2042
-12193:3:2047
-12194:3:2051
-12195:3:2052
-12196:3:2059
-12197:3:2060
-12198:3:2071
-12199:3:2079
-12200:3:2080
-12201:3:2084
-12202:3:2089
-12203:3:2090
-12204:0:2565
-12205:3:2102
-12206:0:2565
-12207:3:2104
-12208:0:2565
-12209:3:2105
-12210:3:2109
-12211:3:2110
-12212:3:2118
-12213:3:2119
-12214:3:2123
-12215:3:2124
-12216:3:2132
-12217:3:2137
-12218:3:2141
-12219:3:2142
-12220:3:2149
-12221:3:2150
-12222:3:2161
-12223:3:2169
-12224:3:2170
-12225:3:2174
-12226:3:2179
-12227:3:2180
-12228:0:2565
-12229:3:2192
-12230:0:2565
-12231:3:2013
-12232:0:2565
-12233:3:2014
-12234:0:2565
-12235:2:467
-12236:0:2565
-12237:2:468
-12238:0:2565
-12239:3:2015
-12240:3:2019
-12241:3:2020
-12242:3:2028
-12243:3:2029
-12244:3:2033
-12245:3:2034
-12246:3:2042
-12247:3:2047
-12248:3:2051
-12249:3:2052
-12250:3:2059
-12251:3:2060
-12252:3:2071
-12253:3:2079
-12254:3:2080
-12255:3:2084
-12256:3:2089
-12257:3:2090
-12258:0:2565
-12259:3:2102
-12260:0:2565
-12261:3:2104
-12262:0:2565
-12263:3:2105
-12264:3:2109
-12265:3:2110
-12266:3:2118
-12267:3:2119
-12268:3:2123
-12269:3:2124
-12270:3:2132
-12271:3:2137
-12272:3:2141
-12273:3:2142
-12274:3:2149
-12275:3:2150
-12276:3:2161
-12277:3:2169
-12278:3:2170
-12279:3:2174
-12280:3:2179
-12281:3:2180
-12282:0:2565
-12283:3:2192
-12284:0:2565
-12285:3:2013
-12286:0:2565
-12287:2:467
-12288:0:2565
-12289:1:345
-12290:0:2565
-12291:2:468
-12292:0:2565
-12293:3:2014
-12294:0:2565
-12295:3:2015
-12296:3:2019
-12297:3:2020
-12298:3:2028
-12299:3:2029
-12300:3:2033
-12301:3:2034
-12302:3:2042
-12303:3:2047
-12304:3:2051
-12305:3:2052
-12306:3:2059
-12307:3:2060
-12308:3:2071
-12309:3:2079
-12310:3:2080
-12311:3:2084
-12312:3:2089
-12313:3:2090
-12314:0:2565
-12315:3:2102
-12316:0:2565
-12317:3:2104
-12318:0:2565
-12319:3:2105
-12320:3:2109
-12321:3:2110
-12322:3:2118
-12323:3:2119
-12324:3:2123
-12325:3:2124
-12326:3:2132
-12327:3:2137
-12328:3:2141
-12329:3:2142
-12330:3:2149
-12331:3:2150
-12332:3:2161
-12333:3:2169
-12334:3:2170
-12335:3:2174
-12336:3:2179
-12337:3:2180
-12338:0:2565
-12339:3:2192
-12340:0:2565
-12341:3:2013
-12342:0:2565
-12343:2:467
-12344:0:2565
-12345:2:468
-12346:0:2565
-12347:3:2014
-12348:0:2565
-12349:3:2015
-12350:3:2019
-12351:3:2020
-12352:3:2028
-12353:3:2029
-12354:3:2033
-12355:3:2034
-12356:3:2042
-12357:3:2047
-12358:3:2051
-12359:3:2052
-12360:3:2059
-12361:3:2060
-12362:3:2071
-12363:3:2079
-12364:3:2080
-12365:3:2084
-12366:3:2089
-12367:3:2090
-12368:0:2565
-12369:3:2102
-12370:0:2565
-12371:3:2104
-12372:0:2565
-12373:3:2105
-12374:3:2109
-12375:3:2110
-12376:3:2118
-12377:3:2119
-12378:3:2123
-12379:3:2124
-12380:3:2132
-12381:3:2137
-12382:3:2141
-12383:3:2142
-12384:3:2149
-12385:3:2150
-12386:3:2161
-12387:3:2169
-12388:3:2170
-12389:3:2174
-12390:3:2179
-12391:3:2180
-12392:0:2565
-12393:3:2192
-12394:0:2565
-12395:2:467
-12396:0:2565
-12397:1:346
-12398:1:350
-12399:1:351
-12400:1:359
-12401:1:368
-12402:1:369
-12403:1:373
-12404:1:378
-12405:1:382
-12406:1:383
-12407:1:390
-12408:1:391
-12409:1:402
-12410:1:403
-12411:1:406
-12412:1:407
-12413:1:415
-12414:1:420
-12415:1:421
-12416:0:2565
-12417:3:2013
-12418:0:2565
-12419:2:468
-12420:0:2565
-12421:3:2014
-12422:0:2565
-12423:3:2015
-12424:3:2019
-12425:3:2020
-12426:3:2028
-12427:3:2029
-12428:3:2033
-12429:3:2034
-12430:3:2042
-12431:3:2047
-12432:3:2051
-12433:3:2052
-12434:3:2059
-12435:3:2060
-12436:3:2071
-12437:3:2079
-12438:3:2080
-12439:3:2084
-12440:3:2089
-12441:3:2090
-12442:0:2565
-12443:3:2102
-12444:0:2565
-12445:3:2104
-12446:0:2565
-12447:3:2105
-12448:3:2109
-12449:3:2110
-12450:3:2118
-12451:3:2119
-12452:3:2123
-12453:3:2124
-12454:3:2132
-12455:3:2137
-12456:3:2141
-12457:3:2142
-12458:3:2149
-12459:3:2150
-12460:3:2161
-12461:3:2169
-12462:3:2170
-12463:3:2174
-12464:3:2179
-12465:3:2180
-12466:0:2565
-12467:3:2192
-12468:0:2565
-12469:2:467
-12470:0:2565
-12471:3:2013
-12472:0:2565
-12473:3:2014
-12474:0:2565
-12475:3:2015
-12476:3:2019
-12477:3:2020
-12478:3:2028
-12479:3:2029
-12480:3:2033
-12481:3:2034
-12482:3:2042
-12483:3:2047
-12484:3:2051
-12485:3:2052
-12486:3:2059
-12487:3:2060
-12488:3:2071
-12489:3:2079
-12490:3:2080
-12491:3:2084
-12492:3:2089
-12493:3:2090
-12494:0:2565
-12495:3:2102
-12496:0:2565
-12497:3:2104
-12498:0:2565
-12499:3:2105
-12500:3:2109
-12501:3:2110
-12502:3:2118
-12503:3:2119
-12504:3:2123
-12505:3:2124
-12506:3:2132
-12507:3:2137
-12508:3:2141
-12509:3:2142
-12510:3:2149
-12511:3:2150
-12512:3:2161
-12513:3:2169
-12514:3:2170
-12515:3:2174
-12516:3:2179
-12517:3:2180
-12518:0:2565
-12519:1:433
-12520:0:2565
-12521:3:2192
-12522:0:2565
-12523:3:2013
-12524:0:2565
-12525:2:468
-12526:0:2565
-12527:3:2014
-12528:0:2565
-12529:3:2015
-12530:3:2019
-12531:3:2020
-12532:3:2028
-12533:3:2029
-12534:3:2033
-12535:3:2034
-12536:3:2042
-12537:3:2047
-12538:3:2051
-12539:3:2052
-12540:3:2059
-12541:3:2060
-12542:3:2071
-12543:3:2079
-12544:3:2080
-12545:3:2084
-12546:3:2089
-12547:3:2090
-12548:0:2565
-12549:3:2102
-12550:0:2565
-12551:3:2104
-12552:0:2565
-12553:3:2105
-12554:3:2109
-12555:3:2110
-12556:3:2118
-12557:3:2119
-12558:3:2123
-12559:3:2124
-12560:3:2132
-12561:3:2137
-12562:3:2141
-12563:3:2142
-12564:3:2149
-12565:3:2150
-12566:3:2161
-12567:3:2169
-12568:3:2170
-12569:3:2174
-12570:3:2179
-12571:3:2180
-12572:0:2565
-12573:3:2192
-12574:0:2565
-12575:2:469
-12576:0:2565
-12577:3:2013
-12578:0:2565
-12579:2:475
-12580:0:2565
-12581:2:476
-12582:0:2565
-12583:3:2014
-12584:0:2565
-12585:3:2015
-12586:3:2019
-12587:3:2020
-12588:3:2028
-12589:3:2029
-12590:3:2033
-12591:3:2034
-12592:3:2042
-12593:3:2047
-12594:3:2051
-12595:3:2052
-12596:3:2059
-12597:3:2060
-12598:3:2071
-12599:3:2079
-12600:3:2080
-12601:3:2084
-12602:3:2089
-12603:3:2090
-12604:0:2565
-12605:3:2102
-12606:0:2565
-12607:3:2104
-12608:0:2565
-12609:3:2105
-12610:3:2109
-12611:3:2110
-12612:3:2118
-12613:3:2119
-12614:3:2123
-12615:3:2124
-12616:3:2132
-12617:3:2137
-12618:3:2141
-12619:3:2142
-12620:3:2149
-12621:3:2150
-12622:3:2161
-12623:3:2169
-12624:3:2170
-12625:3:2174
-12626:3:2179
-12627:3:2180
-12628:0:2565
-12629:3:2192
-12630:0:2565
-12631:2:477
-12632:2:481
-12633:2:482
-12634:2:490
-12635:2:499
-12636:2:500
-12637:2:504
-12638:2:509
-12639:2:513
-12640:2:514
-12641:2:521
-12642:2:522
-12643:2:533
-12644:2:534
-12645:2:537
-12646:2:538
-12647:2:546
-12648:2:551
-12649:2:552
-12650:0:2565
-12651:3:2013
-12652:0:2565
-12653:3:2014
-12654:0:2565
-12655:3:2015
-12656:3:2019
-12657:3:2020
-12658:3:2028
-12659:3:2029
-12660:3:2033
-12661:3:2034
-12662:3:2042
-12663:3:2047
-12664:3:2051
-12665:3:2052
-12666:3:2059
-12667:3:2060
-12668:3:2071
-12669:3:2079
-12670:3:2080
-12671:3:2084
-12672:3:2089
-12673:3:2090
-12674:0:2565
-12675:3:2102
-12676:0:2565
-12677:3:2104
-12678:0:2565
-12679:3:2105
-12680:3:2109
-12681:3:2110
-12682:3:2118
-12683:3:2119
-12684:3:2123
-12685:3:2124
-12686:3:2132
-12687:3:2137
-12688:3:2141
-12689:3:2142
-12690:3:2149
-12691:3:2150
-12692:3:2161
-12693:3:2169
-12694:3:2170
-12695:3:2174
-12696:3:2179
-12697:3:2180
-12698:0:2565
-12699:2:564
-12700:0:2565
-12701:3:2192
-12702:0:2565
-12703:3:2013
-12704:0:2565
-12705:3:2014
-12706:0:2565
-12707:3:2015
-12708:3:2019
-12709:3:2020
-12710:3:2028
-12711:3:2029
-12712:3:2033
-12713:3:2034
-12714:3:2042
-12715:3:2047
-12716:3:2051
-12717:3:2052
-12718:3:2059
-12719:3:2060
-12720:3:2071
-12721:3:2079
-12722:3:2080
-12723:3:2084
-12724:3:2089
-12725:3:2090
-12726:0:2565
-12727:3:2102
-12728:0:2565
-12729:3:2104
-12730:0:2565
-12731:2:565
-12732:2:569
-12733:2:570
-12734:2:578
-12735:2:587
-12736:2:588
-12737:2:592
-12738:2:597
-12739:2:601
-12740:2:602
-12741:2:609
-12742:2:610
-12743:2:621
-12744:2:622
-12745:2:625
-12746:2:626
-12747:2:634
-12748:2:639
-12749:2:640
-12750:0:2565
-12751:2:744
-12752:0:2565
-12753:3:2105
-12754:3:2109
-12755:3:2110
-12756:3:2118
-12757:3:2119
-12758:3:2123
-12759:3:2124
-12760:3:2132
-12761:3:2137
-12762:3:2141
-12763:3:2142
-12764:3:2149
-12765:3:2150
-12766:3:2161
-12767:3:2169
-12768:3:2170
-12769:3:2174
-12770:3:2179
-12771:3:2180
-12772:0:2565
-12773:3:2192
-12774:0:2565
-12775:3:2013
-12776:0:2565
-12777:3:2014
-12778:0:2565
-12779:3:2015
-12780:3:2019
-12781:3:2020
-12782:3:2028
-12783:3:2029
-12784:3:2033
-12785:3:2034
-12786:3:2042
-12787:3:2047
-12788:3:2051
-12789:3:2052
-12790:3:2059
-12791:3:2060
-12792:3:2071
-12793:3:2079
-12794:3:2080
-12795:3:2084
-12796:3:2089
-12797:3:2090
-12798:0:2565
-12799:3:2102
-12800:0:2565
-12801:2:745
-12802:0:2565
-12803:2:750
-12804:0:2565
-12805:2:753
-12806:0:2565
-12807:3:2104
-12808:0:2565
-12809:3:2105
-12810:3:2109
-12811:3:2110
-12812:3:2118
-12813:3:2119
-12814:3:2123
-12815:3:2124
-12816:3:2132
-12817:3:2137
-12818:3:2141
-12819:3:2142
-12820:3:2149
-12821:3:2150
-12822:3:2161
-12823:3:2169
-12824:3:2170
-12825:3:2174
-12826:3:2179
-12827:3:2180
-12828:0:2565
-12829:3:2192
-12830:0:2565
-12831:3:2013
-12832:0:2565
-12833:3:2014
-12834:0:2565
-12835:3:2015
-12836:3:2019
-12837:3:2020
-12838:3:2028
-12839:3:2029
-12840:3:2033
-12841:3:2034
-12842:3:2042
-12843:3:2047
-12844:3:2051
-12845:3:2052
-12846:3:2059
-12847:3:2060
-12848:3:2071
-12849:3:2079
-12850:3:2080
-12851:3:2084
-12852:3:2089
-12853:3:2090
-12854:0:2565
-12855:2:758
-12856:0:2565
-12857:3:2102
-12858:0:2565
-12859:3:2104
-12860:0:2565
-12861:3:2105
-12862:3:2109
-12863:3:2110
-12864:3:2118
-12865:3:2119
-12866:3:2123
-12867:3:2124
-12868:3:2132
-12869:3:2137
-12870:3:2141
-12871:3:2142
-12872:3:2149
-12873:3:2150
-12874:3:2161
-12875:3:2169
-12876:3:2170
-12877:3:2174
-12878:3:2179
-12879:3:2180
-12880:0:2565
-12881:3:2192
-12882:0:2565
-12883:3:2013
-12884:0:2565
-12885:3:2014
-12886:0:2565
-12887:2:759
-12888:0:2565
-12889:3:2015
-12890:3:2019
-12891:3:2020
-12892:3:2028
-12893:3:2029
-12894:3:2033
-12895:3:2034
-12896:3:2042
-12897:3:2047
-12898:3:2051
-12899:3:2052
-12900:3:2059
-12901:3:2060
-12902:3:2071
-12903:3:2079
-12904:3:2080
-12905:3:2084
-12906:3:2089
-12907:3:2090
-12908:0:2565
-12909:3:2102
-12910:0:2565
-12911:3:2104
-12912:0:2565
-12913:3:2105
-12914:3:2109
-12915:3:2110
-12916:3:2118
-12917:3:2119
-12918:3:2123
-12919:3:2124
-12920:3:2132
-12921:3:2137
-12922:3:2141
-12923:3:2142
-12924:3:2149
-12925:3:2150
-12926:3:2161
-12927:3:2169
-12928:3:2170
-12929:3:2174
-12930:3:2179
-12931:3:2180
-12932:0:2565
-12933:3:2192
-12934:0:2565
-12935:3:2013
-12936:0:2565
-12937:2:760
-12938:0:2565
-12939:2:761
-12940:0:2565
-12941:2:762
-12942:0:2565
-12943:2:763
-12944:0:2565
-12945:3:2014
-12946:0:2565
-12947:3:2015
-12948:3:2019
-12949:3:2020
-12950:3:2028
-12951:3:2029
-12952:3:2033
-12953:3:2034
-12954:3:2042
-12955:3:2047
-12956:3:2051
-12957:3:2052
-12958:3:2059
-12959:3:2060
-12960:3:2071
-12961:3:2079
-12962:3:2080
-12963:3:2084
-12964:3:2089
-12965:3:2090
-12966:0:2565
-12967:3:2102
-12968:0:2565
-12969:3:2104
-12970:0:2565
-12971:3:2105
-12972:3:2109
-12973:3:2110
-12974:3:2118
-12975:3:2119
-12976:3:2123
-12977:3:2124
-12978:3:2132
-12979:3:2137
-12980:3:2141
-12981:3:2142
-12982:3:2149
-12983:3:2150
-12984:3:2161
-12985:3:2169
-12986:3:2170
-12987:3:2174
-12988:3:2179
-12989:3:2180
-12990:0:2565
-12991:3:2192
-12992:0:2565
-12993:2:765
-12994:0:2565
-12995:3:2013
-12996:0:2565
-12997:3:2014
-12998:0:2565
-12999:3:2015
-13000:3:2019
-13001:3:2020
-13002:3:2028
-13003:3:2029
-13004:3:2033
-13005:3:2034
-13006:3:2042
-13007:3:2047
-13008:3:2051
-13009:3:2052
-13010:3:2059
-13011:3:2060
-13012:3:2071
-13013:3:2079
-13014:3:2080
-13015:3:2084
-13016:3:2089
-13017:3:2090
-13018:0:2565
-13019:3:2102
-13020:0:2565
-13021:3:2104
-13022:0:2565
-13023:3:2105
-13024:3:2109
-13025:3:2110
-13026:3:2118
-13027:3:2119
-13028:3:2123
-13029:3:2124
-13030:3:2132
-13031:3:2137
-13032:3:2141
-13033:3:2142
-13034:3:2149
-13035:3:2150
-13036:3:2161
-13037:3:2169
-13038:3:2170
-13039:3:2174
-13040:3:2179
-13041:3:2180
-13042:0:2565
-13043:2:766
-13044:2:770
-13045:2:771
-13046:2:779
-13047:2:788
-13048:2:789
-13049:2:793
-13050:2:798
-13051:2:802
-13052:2:803
-13053:2:810
-13054:2:811
-13055:2:822
-13056:2:823
-13057:2:826
-13058:2:827
-13059:2:835
-13060:2:840
-13061:2:841
-13062:0:2565
-13063:3:2192
-13064:0:2565
-13065:3:2013
-13066:0:2565
-13067:3:2014
-13068:0:2565
-13069:3:2015
-13070:3:2019
-13071:3:2020
-13072:3:2028
-13073:3:2029
-13074:3:2033
-13075:3:2034
-13076:3:2042
-13077:3:2047
-13078:3:2051
-13079:3:2052
-13080:3:2059
-13081:3:2060
-13082:3:2071
-13083:3:2079
-13084:3:2080
-13085:3:2084
-13086:3:2089
-13087:3:2090
-13088:0:2565
-13089:3:2102
-13090:0:2565
-13091:3:2104
-13092:0:2565
-13093:2:853
-13094:0:2565
-13095:2:857
-13096:0:2565
-13097:2:465
-13098:0:2565
-13099:3:2105
-13100:3:2109
-13101:3:2110
-13102:3:2118
-13103:3:2119
-13104:3:2123
-13105:3:2124
-13106:3:2132
-13107:3:2137
-13108:3:2141
-13109:3:2142
-13110:3:2149
-13111:3:2150
-13112:3:2161
-13113:3:2169
-13114:3:2170
-13115:3:2174
-13116:3:2179
-13117:3:2180
-13118:0:2565
-13119:3:2192
-13120:0:2565
-13121:3:2013
-13122:0:2565
-13123:3:2014
-13124:0:2565
-13125:3:2015
-13126:3:2019
-13127:3:2020
-13128:3:2028
-13129:3:2029
-13130:3:2033
-13131:3:2034
-13132:3:2042
-13133:3:2047
-13134:3:2051
-13135:3:2052
-13136:3:2059
-13137:3:2060
-13138:3:2071
-13139:3:2079
-13140:3:2080
-13141:3:2084
-13142:3:2089
-13143:3:2090
-13144:0:2565
-13145:3:2102
-13146:0:2565
-13147:2:466
-13148:0:2565
-13149:3:2104
-13150:0:2565
-13151:3:2105
-13152:3:2109
-13153:3:2110
-13154:3:2118
-13155:3:2119
-13156:3:2123
-13157:3:2124
-13158:3:2132
-13159:3:2137
-13160:3:2141
-13161:3:2142
-13162:3:2149
-13163:3:2150
-13164:3:2161
-13165:3:2169
-13166:3:2170
-13167:3:2174
-13168:3:2179
-13169:3:2180
-13170:0:2565
-13171:3:2192
-13172:0:2565
-13173:3:2013
-13174:0:2565
-13175:3:2014
-13176:0:2565
-13177:3:2015
-13178:3:2019
-13179:3:2020
-13180:3:2028
-13181:3:2029
-13182:3:2033
-13183:3:2034
-13184:3:2042
-13185:3:2047
-13186:3:2051
-13187:3:2052
-13188:3:2059
-13189:3:2060
-13190:3:2071
-13191:3:2079
-13192:3:2080
-13193:3:2084
-13194:3:2089
-13195:3:2090
-13196:0:2565
-13197:2:467
-13198:0:2565
-13199:3:2102
-13200:0:2565
-13201:3:2104
-13202:0:2565
-13203:3:2105
-13204:3:2109
-13205:3:2110
-13206:3:2118
-13207:3:2119
-13208:3:2123
-13209:3:2124
-13210:3:2132
-13211:3:2137
-13212:3:2141
-13213:3:2142
-13214:3:2149
-13215:3:2150
-13216:3:2161
-13217:3:2169
-13218:3:2170
-13219:3:2174
-13220:3:2179
-13221:3:2180
-13222:0:2565
-13223:3:2192
-13224:0:2565
-13225:3:2013
-13226:0:2565
-13227:3:2014
-13228:0:2565
-13229:1:436
-13230:0:2565
-13231:2:468
-13232:0:2565
-13233:3:2015
-13234:3:2019
-13235:3:2020
-13236:3:2028
-13237:3:2029
-13238:3:2033
-13239:3:2034
-13240:3:2042
-13241:3:2047
-13242:3:2051
-13243:3:2052
-13244:3:2059
-13245:3:2060
-13246:3:2071
-13247:3:2079
-13248:3:2080
-13249:3:2084
-13250:3:2089
-13251:3:2090
-13252:0:2565
-13253:3:2102
-13254:0:2565
-13255:3:2104
-13256:0:2565
-13257:3:2105
-13258:3:2109
-13259:3:2110
-13260:3:2118
-13261:3:2119
-13262:3:2123
-13263:3:2124
-13264:3:2132
-13265:3:2137
-13266:3:2141
-13267:3:2142
-13268:3:2149
-13269:3:2150
-13270:3:2161
-13271:3:2169
-13272:3:2170
-13273:3:2174
-13274:3:2179
-13275:3:2180
-13276:0:2565
-13277:3:2192
-13278:0:2565
-13279:3:2013
-13280:0:2565
-13281:3:2014
-13282:0:2565
-13283:2:467
-13284:0:2565
-13285:2:468
-13286:0:2565
-13287:3:2015
-13288:3:2019
-13289:3:2020
-13290:3:2028
-13291:3:2029
-13292:3:2033
-13293:3:2034
-13294:3:2042
-13295:3:2047
-13296:3:2051
-13297:3:2052
-13298:3:2059
-13299:3:2060
-13300:3:2071
-13301:3:2079
-13302:3:2080
-13303:3:2084
-13304:3:2089
-13305:3:2090
-13306:0:2565
-13307:3:2102
-13308:0:2565
-13309:3:2104
-13310:0:2565
-13311:3:2105
-13312:3:2109
-13313:3:2110
-13314:3:2118
-13315:3:2119
-13316:3:2123
-13317:3:2124
-13318:3:2132
-13319:3:2137
-13320:3:2141
-13321:3:2142
-13322:3:2149
-13323:3:2150
-13324:3:2161
-13325:3:2169
-13326:3:2170
-13327:3:2174
-13328:3:2179
-13329:3:2180
-13330:0:2565
-13331:3:2192
-13332:0:2565
-13333:3:2013
-13334:0:2565
-13335:2:467
-13336:0:2565
-13337:1:442
-13338:0:2565
-13339:2:468
-13340:0:2565
-13341:1:446
-13342:0:2565
-13343:1:9
-13344:0:2565
-13345:1:10
-13346:0:2565
-13347:1:11
-13348:0:2565
-13349:3:2014
-13350:0:2565
-13351:3:2015
-13352:3:2019
-13353:3:2020
-13354:3:2028
-13355:3:2029
-13356:3:2033
-13357:3:2034
-13358:3:2042
-13359:3:2047
-13360:3:2051
-13361:3:2052
-13362:3:2059
-13363:3:2060
-13364:3:2071
-13365:3:2079
-13366:3:2080
-13367:3:2084
-13368:3:2089
-13369:3:2090
-13370:0:2565
-13371:3:2102
-13372:0:2565
-13373:3:2104
-13374:0:2565
-13375:3:2105
-13376:3:2109
-13377:3:2110
-13378:3:2118
-13379:3:2119
-13380:3:2123
-13381:3:2124
-13382:3:2132
-13383:3:2137
-13384:3:2141
-13385:3:2142
-13386:3:2149
-13387:3:2150
-13388:3:2161
-13389:3:2169
-13390:3:2170
-13391:3:2174
-13392:3:2179
-13393:3:2180
-13394:0:2565
-13395:3:2192
-13396:0:2565
-13397:3:2013
-13398:0:2565
-13399:2:467
-13400:0:2565
-13401:2:468
-13402:0:2565
-13403:3:2014
-13404:0:2565
-13405:3:2015
-13406:3:2019
-13407:3:2020
-13408:3:2028
-13409:3:2029
-13410:3:2033
-13411:3:2034
-13412:3:2042
-13413:3:2047
-13414:3:2051
-13415:3:2052
-13416:3:2059
-13417:3:2060
-13418:3:2071
-13419:3:2079
-13420:3:2080
-13421:3:2084
-13422:3:2089
-13423:3:2090
-13424:0:2565
-13425:3:2102
-13426:0:2565
-13427:3:2104
-13428:0:2565
-13429:3:2105
-13430:3:2109
-13431:3:2110
-13432:3:2118
-13433:3:2119
-13434:3:2123
-13435:3:2124
-13436:3:2132
-13437:3:2137
-13438:3:2141
-13439:3:2142
-13440:3:2149
-13441:3:2150
-13442:3:2161
-13443:3:2169
-13444:3:2170
-13445:3:2174
-13446:3:2179
-13447:3:2180
-13448:0:2565
-13449:3:2192
-13450:0:2565
-13451:2:467
-13452:0:2565
-13453:1:12
-13454:1:16
-13455:1:17
-13456:1:25
-13457:1:34
-13458:1:35
-13459:1:39
-13460:1:44
-13461:1:48
-13462:1:49
-13463:1:56
-13464:1:57
-13465:1:68
-13466:1:69
-13467:1:72
-13468:1:73
-13469:1:81
-13470:1:86
-13471:1:87
-13472:0:2565
-13473:3:2013
-13474:0:2565
-13475:2:468
-13476:0:2565
-13477:3:2014
-13478:0:2565
-13479:3:2015
-13480:3:2019
-13481:3:2020
-13482:3:2028
-13483:3:2029
-13484:3:2033
-13485:3:2034
-13486:3:2042
-13487:3:2047
-13488:3:2051
-13489:3:2052
-13490:3:2059
-13491:3:2060
-13492:3:2071
-13493:3:2079
-13494:3:2080
-13495:3:2084
-13496:3:2089
-13497:3:2090
-13498:0:2565
-13499:3:2102
-13500:0:2565
-13501:3:2104
-13502:0:2565
-13503:3:2105
-13504:3:2109
-13505:3:2110
-13506:3:2118
-13507:3:2119
-13508:3:2123
-13509:3:2124
-13510:3:2132
-13511:3:2137
-13512:3:2141
-13513:3:2142
-13514:3:2149
-13515:3:2150
-13516:3:2161
-13517:3:2169
-13518:3:2170
-13519:3:2174
-13520:3:2179
-13521:3:2180
-13522:0:2565
-13523:3:2192
-13524:0:2565
-13525:2:467
-13526:0:2565
-13527:3:2013
-13528:0:2565
-13529:3:2014
-13530:0:2565
-13531:3:2015
-13532:3:2019
-13533:3:2020
-13534:3:2028
-13535:3:2029
-13536:3:2033
-13537:3:2034
-13538:3:2042
-13539:3:2047
-13540:3:2051
-13541:3:2052
-13542:3:2059
-13543:3:2060
-13544:3:2071
-13545:3:2079
-13546:3:2080
-13547:3:2084
-13548:3:2089
-13549:3:2090
-13550:0:2565
-13551:3:2102
-13552:0:2565
-13553:3:2104
-13554:0:2565
-13555:3:2105
-13556:3:2109
-13557:3:2110
-13558:3:2118
-13559:3:2119
-13560:3:2123
-13561:3:2124
-13562:3:2132
-13563:3:2137
-13564:3:2141
-13565:3:2142
-13566:3:2149
-13567:3:2150
-13568:3:2161
-13569:3:2169
-13570:3:2170
-13571:3:2174
-13572:3:2179
-13573:3:2180
-13574:0:2565
-13575:1:99
-13576:0:2565
-13577:3:2192
-13578:0:2565
-13579:3:2013
-13580:0:2565
-13581:2:468
-13582:0:2565
-13583:3:2014
-13584:0:2565
-13585:3:2015
-13586:3:2019
-13587:3:2020
-13588:3:2028
-13589:3:2029
-13590:3:2033
-13591:3:2034
-13592:3:2042
-13593:3:2047
-13594:3:2051
-13595:3:2052
-13596:3:2059
-13597:3:2060
-13598:3:2071
-13599:3:2079
-13600:3:2080
-13601:3:2084
-13602:3:2089
-13603:3:2090
-13604:0:2565
-13605:3:2102
-13606:0:2565
-13607:3:2104
-13608:0:2565
-13609:3:2105
-13610:3:2109
-13611:3:2110
-13612:3:2118
-13613:3:2119
-13614:3:2123
-13615:3:2124
-13616:3:2132
-13617:3:2137
-13618:3:2141
-13619:3:2142
-13620:3:2149
-13621:3:2150
-13622:3:2161
-13623:3:2169
-13624:3:2170
-13625:3:2174
-13626:3:2179
-13627:3:2180
-13628:0:2565
-13629:3:2192
-13630:0:2565
-13631:2:469
-13632:0:2565
-13633:3:2013
-13634:0:2565
-13635:2:475
-13636:0:2565
-13637:2:476
-13638:0:2565
-13639:3:2014
-13640:0:2565
-13641:3:2015
-13642:3:2019
-13643:3:2020
-13644:3:2028
-13645:3:2029
-13646:3:2033
-13647:3:2034
-13648:3:2042
-13649:3:2047
-13650:3:2051
-13651:3:2052
-13652:3:2059
-13653:3:2060
-13654:3:2071
-13655:3:2079
-13656:3:2080
-13657:3:2084
-13658:3:2089
-13659:3:2090
-13660:0:2565
-13661:3:2102
-13662:0:2565
-13663:3:2104
-13664:0:2565
-13665:3:2105
-13666:3:2109
-13667:3:2110
-13668:3:2118
-13669:3:2119
-13670:3:2123
-13671:3:2124
-13672:3:2132
-13673:3:2137
-13674:3:2141
-13675:3:2142
-13676:3:2149
-13677:3:2150
-13678:3:2161
-13679:3:2169
-13680:3:2170
-13681:3:2174
-13682:3:2179
-13683:3:2180
-13684:0:2565
-13685:3:2192
-13686:0:2565
-13687:2:477
-13688:2:481
-13689:2:482
-13690:2:490
-13691:2:499
-13692:2:500
-13693:2:504
-13694:2:509
-13695:2:513
-13696:2:514
-13697:2:521
-13698:2:522
-13699:2:533
-13700:2:534
-13701:2:537
-13702:2:538
-13703:2:546
-13704:2:551
-13705:2:552
-13706:0:2565
-13707:3:2013
-13708:0:2565
-13709:3:2014
-13710:0:2565
-13711:3:2015
-13712:3:2019
-13713:3:2020
-13714:3:2028
-13715:3:2029
-13716:3:2033
-13717:3:2034
-13718:3:2042
-13719:3:2047
-13720:3:2051
-13721:3:2052
-13722:3:2059
-13723:3:2060
-13724:3:2071
-13725:3:2079
-13726:3:2080
-13727:3:2084
-13728:3:2089
-13729:3:2090
-13730:0:2565
-13731:3:2102
-13732:0:2565
-13733:3:2104
-13734:0:2565
-13735:3:2105
-13736:3:2109
-13737:3:2110
-13738:3:2118
-13739:3:2119
-13740:3:2123
-13741:3:2124
-13742:3:2132
-13743:3:2137
-13744:3:2141
-13745:3:2142
-13746:3:2149
-13747:3:2150
-13748:3:2161
-13749:3:2169
-13750:3:2170
-13751:3:2174
-13752:3:2179
-13753:3:2180
-13754:0:2565
-13755:2:564
-13756:0:2565
-13757:3:2192
-13758:0:2565
-13759:3:2013
-13760:0:2565
-13761:3:2014
-13762:0:2565
-13763:3:2015
-13764:3:2019
-13765:3:2020
-13766:3:2028
-13767:3:2029
-13768:3:2033
-13769:3:2034
-13770:3:2042
-13771:3:2047
-13772:3:2051
-13773:3:2052
-13774:3:2059
-13775:3:2060
-13776:3:2071
-13777:3:2079
-13778:3:2080
-13779:3:2084
-13780:3:2089
-13781:3:2090
-13782:0:2565
-13783:3:2102
-13784:0:2565
-13785:3:2104
-13786:0:2565
-13787:2:565
-13788:2:569
-13789:2:570
-13790:2:578
-13791:2:587
-13792:2:588
-13793:2:592
-13794:2:597
-13795:2:601
-13796:2:602
-13797:2:609
-13798:2:610
-13799:2:621
-13800:2:622
-13801:2:625
-13802:2:626
-13803:2:634
-13804:2:639
-13805:2:640
-13806:0:2565
-13807:2:652
-13808:0:2565
-13809:3:2105
-13810:3:2109
-13811:3:2110
-13812:3:2118
-13813:3:2119
-13814:3:2123
-13815:3:2124
-13816:3:2132
-13817:3:2137
-13818:3:2141
-13819:3:2142
-13820:3:2149
-13821:3:2150
-13822:3:2161
-13823:3:2169
-13824:3:2170
-13825:3:2174
-13826:3:2179
-13827:3:2180
-13828:0:2565
-13829:3:2192
-13830:0:2565
-13831:3:2013
-13832:0:2565
-13833:3:2014
-13834:0:2565
-13835:3:2015
-13836:3:2019
-13837:3:2020
-13838:3:2028
-13839:3:2029
-13840:3:2033
-13841:3:2034
-13842:3:2042
-13843:3:2047
-13844:3:2051
-13845:3:2052
-13846:3:2059
-13847:3:2060
-13848:3:2071
-13849:3:2079
-13850:3:2080
-13851:3:2084
-13852:3:2089
-13853:3:2090
-13854:0:2565
-13855:3:2102
-13856:0:2565
-13857:2:653
-13858:0:2565
-13859:3:2104
-13860:0:2565
-13861:3:2105
-13862:3:2109
-13863:3:2110
-13864:3:2118
-13865:3:2119
-13866:3:2123
-13867:3:2124
-13868:3:2132
-13869:3:2137
-13870:3:2141
-13871:3:2142
-13872:3:2149
-13873:3:2150
-13874:3:2161
-13875:3:2169
-13876:3:2170
-13877:3:2174
-13878:3:2179
-13879:3:2180
-13880:0:2565
-13881:3:2192
-13882:0:2565
-13883:3:2013
-13884:0:2565
-13885:3:2014
-13886:0:2565
-13887:3:2015
-13888:3:2019
-13889:3:2020
-13890:3:2028
-13891:3:2029
-13892:3:2033
-13893:3:2034
-13894:3:2042
-13895:3:2047
-13896:3:2051
-13897:3:2052
-13898:3:2059
-13899:3:2060
-13900:3:2071
-13901:3:2079
-13902:3:2080
-13903:3:2084
-13904:3:2089
-13905:3:2090
-13906:0:2565
-13907:2:654
-13908:2:658
-13909:2:659
-13910:2:667
-13911:2:676
-13912:2:677
-13913:2:681
-13914:2:686
-13915:2:690
-13916:2:691
-13917:2:698
-13918:2:699
-13919:2:710
-13920:2:711
-13921:2:714
-13922:2:715
-13923:2:723
-13924:2:728
-13925:2:729
-13926:0:2565
-13927:3:2102
-13928:0:2565
-13929:3:2104
-13930:0:2565
-13931:3:2105
-13932:3:2109
-13933:3:2110
-13934:3:2118
-13935:3:2119
-13936:3:2123
-13937:3:2124
-13938:3:2132
-13939:3:2137
-13940:3:2141
-13941:3:2142
-13942:3:2149
-13943:3:2150
-13944:3:2161
-13945:3:2169
-13946:3:2170
-13947:3:2174
-13948:3:2179
-13949:3:2180
-13950:0:2565
-13951:3:2192
-13952:0:2565
-13953:3:2013
-13954:0:2565
-13955:3:2014
-13956:0:2565
-13957:1:100
-13958:0:2565
-13959:1:101
-13960:0:2565
-13961:3:2015
-13962:3:2019
-13963:3:2020
-13964:3:2028
-13965:3:2029
-13966:3:2033
-13967:3:2034
-13968:3:2042
-13969:3:2047
-13970:3:2051
-13971:3:2052
-13972:3:2059
-13973:3:2060
-13974:3:2071
-13975:3:2079
-13976:3:2080
-13977:3:2084
-13978:3:2089
-13979:3:2090
-13980:0:2565
-13981:3:2102
-13982:0:2565
-13983:3:2104
-13984:0:2565
-13985:3:2105
-13986:3:2109
-13987:3:2110
-13988:3:2118
-13989:3:2119
-13990:3:2123
-13991:3:2124
-13992:3:2132
-13993:3:2137
-13994:3:2141
-13995:3:2142
-13996:3:2149
-13997:3:2150
-13998:3:2161
-13999:3:2169
-14000:3:2170
-14001:3:2174
-14002:3:2179
-14003:3:2180
-14004:0:2565
-14005:3:2192
-14006:0:2565
-14007:3:2013
-14008:0:2565
-14009:3:2014
-14010:0:2565
-14011:1:100
-14012:0:2565
-14013:3:2015
-14014:3:2019
-14015:3:2020
-14016:3:2028
-14017:3:2029
-14018:3:2033
-14019:3:2034
-14020:3:2042
-14021:3:2047
-14022:3:2051
-14023:3:2052
-14024:3:2059
-14025:3:2060
-14026:3:2071
-14027:3:2079
-14028:3:2080
-14029:3:2084
-14030:3:2089
-14031:3:2090
-14032:0:2565
-14033:3:2102
-14034:0:2565
-14035:3:2104
-14036:0:2565
-14037:3:2105
-14038:3:2109
-14039:3:2110
-14040:3:2118
-14041:3:2119
-14042:3:2123
-14043:3:2124
-14044:3:2132
-14045:3:2137
-14046:3:2141
-14047:3:2142
-14048:3:2149
-14049:3:2150
-14050:3:2161
-14051:3:2169
-14052:3:2170
-14053:3:2174
-14054:3:2179
-14055:3:2180
-14056:0:2565
-14057:3:2192
-14058:0:2565
-14059:3:2013
-14060:0:2565
-14061:2:741
-14062:0:2565
-14063:2:750
-14064:0:2565
-14065:2:753
-14066:0:2565
-14067:1:101
-14068:0:2565
-14069:3:2014
-14070:0:2565
-14071:3:2015
-14072:3:2019
-14073:3:2020
-14074:3:2028
-14075:3:2029
-14076:3:2033
-14077:3:2034
-14078:3:2042
-14079:3:2047
-14080:3:2051
-14081:3:2052
-14082:3:2059
-14083:3:2060
-14084:3:2071
-14085:3:2079
-14086:3:2080
-14087:3:2084
-14088:3:2089
-14089:3:2090
-14090:0:2565
-14091:3:2102
-14092:0:2565
-14093:3:2104
-14094:0:2565
-14095:3:2105
-14096:3:2109
-14097:3:2110
-14098:3:2118
-14099:3:2119
-14100:3:2123
-14101:3:2124
-14102:3:2132
-14103:3:2137
-14104:3:2141
-14105:3:2142
-14106:3:2149
-14107:3:2150
-14108:3:2161
-14109:3:2169
-14110:3:2170
-14111:3:2174
-14112:3:2179
-14113:3:2180
-14114:0:2565
-14115:3:2192
-14116:0:2565
-14117:3:2013
-14118:0:2565
-14119:1:100
-14120:0:2565
-14121:3:2014
-14122:0:2565
-14123:3:2015
-14124:3:2019
-14125:3:2020
-14126:3:2028
-14127:3:2029
-14128:3:2033
-14129:3:2034
-14130:3:2042
-14131:3:2047
-14132:3:2051
-14133:3:2052
-14134:3:2059
-14135:3:2060
-14136:3:2071
-14137:3:2079
-14138:3:2080
-14139:3:2084
-14140:3:2089
-14141:3:2090
-14142:0:2565
-14143:3:2102
-14144:0:2565
-14145:3:2104
-14146:0:2565
-14147:3:2105
-14148:3:2109
-14149:3:2110
-14150:3:2118
-14151:3:2119
-14152:3:2123
-14153:3:2124
-14154:3:2132
-14155:3:2137
-14156:3:2141
-14157:3:2142
-14158:3:2149
-14159:3:2150
-14160:3:2161
-14161:3:2169
-14162:3:2170
-14163:3:2174
-14164:3:2179
-14165:3:2180
-14166:0:2565
-14167:3:2192
-14168:0:2565
-14169:2:758
-14170:0:2565
-14171:3:2013
-14172:0:2565
-14173:1:101
-14174:0:2565
-14175:3:2014
-14176:0:2565
-14177:3:2015
-14178:3:2019
-14179:3:2020
-14180:3:2028
-14181:3:2029
-14182:3:2033
-14183:3:2034
-14184:3:2042
-14185:3:2047
-14186:3:2051
-14187:3:2052
-14188:3:2059
-14189:3:2060
-14190:3:2071
-14191:3:2079
-14192:3:2080
-14193:3:2084
-14194:3:2089
-14195:3:2090
-14196:0:2565
-14197:3:2102
-14198:0:2565
-14199:3:2104
-14200:0:2565
-14201:3:2105
-14202:3:2109
-14203:3:2110
-14204:3:2118
-14205:3:2119
-14206:3:2123
-14207:3:2124
-14208:3:2132
-14209:3:2137
-14210:3:2141
-14211:3:2142
-14212:3:2149
-14213:3:2150
-14214:3:2161
-14215:3:2169
-14216:3:2170
-14217:3:2174
-14218:3:2179
-14219:3:2180
-14220:0:2565
-14221:3:2192
-14222:0:2565
-14223:3:2013
-14224:0:2565
-14225:1:100
-14226:0:2565
-14227:3:2014
-14228:0:2565
-14229:3:2015
-14230:3:2019
-14231:3:2020
-14232:3:2028
-14233:3:2029
-14234:3:2033
-14235:3:2034
-14236:3:2042
-14237:3:2047
-14238:3:2051
-14239:3:2052
-14240:3:2059
-14241:3:2060
-14242:3:2071
-14243:3:2079
-14244:3:2080
-14245:3:2084
-14246:3:2089
-14247:3:2090
-14248:0:2565
-14249:3:2102
-14250:0:2565
-14251:3:2104
-14252:0:2565
-14253:3:2105
-14254:3:2109
-14255:3:2110
-14256:3:2118
-14257:3:2119
-14258:3:2123
-14259:3:2124
-14260:3:2132
-14261:3:2137
-14262:3:2141
-14263:3:2142
-14264:3:2149
-14265:3:2150
-14266:3:2161
-14267:3:2169
-14268:3:2170
-14269:3:2174
-14270:3:2179
-14271:3:2180
-14272:0:2565
-14273:3:2192
-14274:0:2565
-14275:2:759
-14276:0:2565
-14277:3:2013
-14278:0:2565
-14279:1:101
-14280:0:2565
-14281:3:2014
-14282:0:2565
-14283:3:2015
-14284:3:2019
-14285:3:2020
-14286:3:2028
-14287:3:2029
-14288:3:2033
-14289:3:2034
-14290:3:2042
-14291:3:2047
-14292:3:2051
-14293:3:2052
-14294:3:2059
-14295:3:2060
-14296:3:2071
-14297:3:2079
-14298:3:2080
-14299:3:2084
-14300:3:2089
-14301:3:2090
-14302:0:2565
-14303:3:2102
-14304:0:2565
-14305:3:2104
-14306:0:2565
-14307:3:2105
-14308:3:2109
-14309:3:2110
-14310:3:2118
-14311:3:2119
-14312:3:2123
-14313:3:2124
-14314:3:2132
-14315:3:2137
-14316:3:2141
-14317:3:2142
-14318:3:2149
-14319:3:2150
-14320:3:2161
-14321:3:2169
-14322:3:2170
-14323:3:2174
-14324:3:2179
-14325:3:2180
-14326:0:2565
-14327:3:2192
-14328:0:2565
-14329:3:2013
-14330:0:2565
-14331:1:100
-14332:0:2565
-14333:3:2014
-14334:0:2565
-14335:3:2015
-14336:3:2019
-14337:3:2020
-14338:3:2028
-14339:3:2029
-14340:3:2033
-14341:3:2034
-14342:3:2042
-14343:3:2047
-14344:3:2051
-14345:3:2052
-14346:3:2059
-14347:3:2060
-14348:3:2071
-14349:3:2079
-14350:3:2080
-14351:3:2084
-14352:3:2089
-14353:3:2090
-14354:0:2565
-14355:3:2102
-14356:0:2565
-14357:3:2104
-14358:0:2565
-14359:3:2105
-14360:3:2109
-14361:3:2110
-14362:3:2118
-14363:3:2119
-14364:3:2123
-14365:3:2124
-14366:3:2132
-14367:3:2137
-14368:3:2141
-14369:3:2142
-14370:3:2149
-14371:3:2150
-14372:3:2161
-14373:3:2169
-14374:3:2170
-14375:3:2174
-14376:3:2179
-14377:3:2180
-14378:0:2565
-14379:3:2192
-14380:0:2565
-14381:2:760
-14382:0:2565
-14383:3:2013
-14384:0:2565
-14385:2:761
-14386:0:2565
-14387:2:762
-14388:0:2565
-14389:2:763
-14390:0:2565
-14391:1:101
-14392:0:2565
-14393:3:2014
-14394:0:2565
-14395:3:2015
-14396:3:2019
-14397:3:2020
-14398:3:2028
-14399:3:2029
-14400:3:2033
-14401:3:2034
-14402:3:2042
-14403:3:2047
-14404:3:2051
-14405:3:2052
-14406:3:2059
-14407:3:2060
-14408:3:2071
-14409:3:2079
-14410:3:2080
-14411:3:2084
-14412:3:2089
-14413:3:2090
-14414:0:2565
-14415:3:2102
-14416:0:2565
-14417:3:2104
-14418:0:2565
-14419:3:2105
-14420:3:2109
-14421:3:2110
-14422:3:2118
-14423:3:2119
-14424:3:2123
-14425:3:2124
-14426:3:2132
-14427:3:2137
-14428:3:2141
-14429:3:2142
-14430:3:2149
-14431:3:2150
-14432:3:2161
-14433:3:2169
-14434:3:2170
-14435:3:2174
-14436:3:2179
-14437:3:2180
-14438:0:2565
-14439:3:2192
-14440:0:2565
-14441:3:2013
-14442:0:2565
-14443:1:100
-14444:0:2565
-14445:3:2014
-14446:0:2565
-14447:3:2015
-14448:3:2019
-14449:3:2020
-14450:3:2028
-14451:3:2029
-14452:3:2033
-14453:3:2034
-14454:3:2042
-14455:3:2047
-14456:3:2051
-14457:3:2052
-14458:3:2059
-14459:3:2060
-14460:3:2071
-14461:3:2079
-14462:3:2080
-14463:3:2084
-14464:3:2089
-14465:3:2090
-14466:0:2565
-14467:3:2102
-14468:0:2565
-14469:3:2104
-14470:0:2565
-14471:3:2105
-14472:3:2109
-14473:3:2110
-14474:3:2118
-14475:3:2119
-14476:3:2123
-14477:3:2124
-14478:3:2132
-14479:3:2137
-14480:3:2141
-14481:3:2142
-14482:3:2149
-14483:3:2150
-14484:3:2161
-14485:3:2169
-14486:3:2170
-14487:3:2174
-14488:3:2179
-14489:3:2180
-14490:0:2565
-14491:3:2192
-14492:0:2565
-14493:2:765
-14494:0:2565
-14495:3:2013
-14496:0:2565
-14497:1:101
-14498:0:2565
-14499:3:2014
-14500:0:2565
-14501:3:2015
-14502:3:2019
-14503:3:2020
-14504:3:2028
-14505:3:2029
-14506:3:2033
-14507:3:2034
-14508:3:2042
-14509:3:2047
-14510:3:2051
-14511:3:2052
-14512:3:2059
-14513:3:2060
-14514:3:2071
-14515:3:2079
-14516:3:2080
-14517:3:2084
-14518:3:2089
-14519:3:2090
-14520:0:2565
-14521:3:2102
-14522:0:2565
-14523:3:2104
-14524:0:2565
-14525:3:2105
-14526:3:2109
-14527:3:2110
-14528:3:2118
-14529:3:2119
-14530:3:2123
-14531:3:2124
-14532:3:2132
-14533:3:2137
-14534:3:2141
-14535:3:2142
-14536:3:2149
-14537:3:2150
-14538:3:2161
-14539:3:2169
-14540:3:2170
-14541:3:2174
-14542:3:2179
-14543:3:2180
-14544:0:2565
-14545:3:2192
-14546:0:2565
-14547:3:2013
-14548:0:2565
-14549:2:766
-14550:2:770
-14551:2:771
-14552:2:779
-14553:2:788
-14554:2:789
-14555:2:793
-14556:2:798
-14557:2:802
-14558:2:803
-14559:2:810
-14560:2:811
-14561:2:822
-14562:2:823
-14563:2:826
-14564:2:827
-14565:2:835
-14566:2:840
-14567:2:841
-14568:0:2565
-14569:3:2014
-14570:0:2565
-14571:3:2015
-14572:3:2019
-14573:3:2020
-14574:3:2028
-14575:3:2029
-14576:3:2033
-14577:3:2034
-14578:3:2042
-14579:3:2047
-14580:3:2051
-14581:3:2052
-14582:3:2059
-14583:3:2060
-14584:3:2071
-14585:3:2079
-14586:3:2080
-14587:3:2084
-14588:3:2089
-14589:3:2090
-14590:0:2565
-14591:3:2102
-14592:0:2565
-14593:3:2104
-14594:0:2565
-14595:3:2105
-14596:3:2109
-14597:3:2110
-14598:3:2118
-14599:3:2119
-14600:3:2123
-14601:3:2124
-14602:3:2132
-14603:3:2137
-14604:3:2141
-14605:3:2142
-14606:3:2149
-14607:3:2150
-14608:3:2161
-14609:3:2169
-14610:3:2170
-14611:3:2174
-14612:3:2179
-14613:3:2180
-14614:0:2565
-14615:3:2192
-14616:0:2565
-14617:2:853
-14618:0:2565
-14619:3:2013
-14620:0:2565
-14621:2:857
-14622:0:2565
-14623:2:465
-14624:0:2565
-14625:3:2014
-14626:0:2565
-14627:3:2015
-14628:3:2019
-14629:3:2020
-14630:3:2028
-14631:3:2029
-14632:3:2033
-14633:3:2034
-14634:3:2042
-14635:3:2047
-14636:3:2051
-14637:3:2052
-14638:3:2059
-14639:3:2060
-14640:3:2071
-14641:3:2079
-14642:3:2080
-14643:3:2084
-14644:3:2089
-14645:3:2090
-14646:0:2565
-14647:3:2102
-14648:0:2565
-14649:3:2104
-14650:0:2565
-14651:3:2105
-14652:3:2109
-14653:3:2110
-14654:3:2118
-14655:3:2119
-14656:3:2123
-14657:3:2124
-14658:3:2132
-14659:3:2137
-14660:3:2141
-14661:3:2142
-14662:3:2149
-14663:3:2150
-14664:3:2161
-14665:3:2169
-14666:3:2170
-14667:3:2174
-14668:3:2179
-14669:3:2180
-14670:0:2565
-14671:3:2192
-14672:0:2565
-14673:2:466
-14674:0:2565
-14675:3:2013
-14676:0:2565
-14677:3:2014
-14678:0:2565
-14679:3:2015
-14680:3:2019
-14681:3:2020
-14682:3:2028
-14683:3:2029
-14684:3:2033
-14685:3:2034
-14686:3:2042
-14687:3:2047
-14688:3:2051
-14689:3:2052
-14690:3:2059
-14691:3:2060
-14692:3:2071
-14693:3:2079
-14694:3:2080
-14695:3:2084
-14696:3:2089
-14697:3:2090
-14698:0:2565
-14699:3:2102
-14700:0:2565
-14701:3:2104
-14702:0:2565
-14703:3:2105
-14704:3:2109
-14705:3:2110
-14706:3:2118
-14707:3:2119
-14708:3:2123
-14709:3:2124
-14710:3:2132
-14711:3:2137
-14712:3:2141
-14713:3:2142
-14714:3:2149
-14715:3:2150
-14716:3:2161
-14717:3:2169
-14718:3:2170
-14719:3:2174
-14720:3:2179
-14721:3:2180
-14722:0:2565
-14723:2:467
-14724:0:2565
-14725:3:2192
-14726:0:2565
-14727:3:2013
-14728:0:2565
-14729:3:2014
-14730:0:2565
-14731:3:2015
-14732:3:2019
-14733:3:2020
-14734:3:2028
-14735:3:2029
-14736:3:2033
-14737:3:2034
-14738:3:2042
-14739:3:2047
-14740:3:2051
-14741:3:2052
-14742:3:2059
-14743:3:2060
-14744:3:2071
-14745:3:2079
-14746:3:2080
-14747:3:2084
-14748:3:2089
-14749:3:2090
-14750:0:2565
-14751:3:2102
-14752:0:2565
-14753:3:2104
-14754:0:2565
-14755:1:102
-14756:0:2565
-14757:2:468
-14758:0:2565
-14759:3:2105
-14760:3:2109
-14761:3:2110
-14762:3:2118
-14763:3:2119
-14764:3:2123
-14765:3:2124
-14766:3:2132
-14767:3:2137
-14768:3:2141
-14769:3:2142
-14770:3:2149
-14771:3:2150
-14772:3:2161
-14773:3:2169
-14774:3:2170
-14775:3:2174
-14776:3:2179
-14777:3:2180
-14778:0:2565
-14779:3:2192
-14780:0:2565
-14781:3:2013
-14782:0:2565
-14783:3:2014
-14784:0:2565
-14785:3:2015
-14786:3:2019
-14787:3:2020
-14788:3:2028
-14789:3:2029
-14790:3:2033
-14791:3:2034
-14792:3:2042
-14793:3:2047
-14794:3:2051
-14795:3:2052
-14796:3:2059
-14797:3:2060
-14798:3:2071
-14799:3:2079
-14800:3:2080
-14801:3:2084
-14802:3:2089
-14803:3:2090
-14804:0:2565
-14805:3:2102
-14806:0:2565
-14807:3:2104
-14808:0:2565
-14809:2:467
-14810:0:2565
-14811:2:468
-14812:0:2565
-14813:3:2105
-14814:3:2109
-14815:3:2110
-14816:3:2118
-14817:3:2119
-14818:3:2123
-14819:3:2124
-14820:3:2132
-14821:3:2137
-14822:3:2141
-14823:3:2142
-14824:3:2149
-14825:3:2150
-14826:3:2161
-14827:3:2169
-14828:3:2170
-14829:3:2174
-14830:3:2179
-14831:3:2180
-14832:0:2565
-14833:3:2192
-14834:0:2565
-14835:3:2013
-14836:0:2565
-14837:3:2014
-14838:0:2565
-14839:3:2015
-14840:3:2019
-14841:3:2020
-14842:3:2028
-14843:3:2029
-14844:3:2033
-14845:3:2034
-14846:3:2042
-14847:3:2047
-14848:3:2051
-14849:3:2052
-14850:3:2059
-14851:3:2060
-14852:3:2071
-14853:3:2079
-14854:3:2080
-14855:3:2084
-14856:3:2089
-14857:3:2090
-14858:0:2565
-14859:3:2102
-14860:0:2565
-14861:2:467
-14862:0:2565
-14863:1:108
-14864:0:2565
-14865:2:468
-14866:0:2565
-14867:3:2104
-14868:0:2565
-14869:3:2105
-14870:3:2109
-14871:3:2110
-14872:3:2118
-14873:3:2119
-14874:3:2123
-14875:3:2124
-14876:3:2132
-14877:3:2137
-14878:3:2141
-14879:3:2142
-14880:3:2149
-14881:3:2150
-14882:3:2161
-14883:3:2169
-14884:3:2170
-14885:3:2174
-14886:3:2179
-14887:3:2180
-14888:0:2565
-14889:3:2192
-14890:0:2565
-14891:3:2013
-14892:0:2565
-14893:3:2014
-14894:0:2565
-14895:3:2015
-14896:3:2019
-14897:3:2020
-14898:3:2028
-14899:3:2029
-14900:3:2033
-14901:3:2034
-14902:3:2042
-14903:3:2047
-14904:3:2051
-14905:3:2052
-14906:3:2059
-14907:3:2060
-14908:3:2071
-14909:3:2079
-14910:3:2080
-14911:3:2084
-14912:3:2089
-14913:3:2090
-14914:0:2565
-14915:3:2102
-14916:0:2565
-14917:2:467
-14918:0:2565
-14919:2:468
-14920:0:2565
-14921:3:2104
-14922:0:2565
-14923:3:2105
-14924:3:2109
-14925:3:2110
-14926:3:2118
-14927:3:2119
-14928:3:2123
-14929:3:2124
-14930:3:2132
-14931:3:2137
-14932:3:2141
-14933:3:2142
-14934:3:2149
-14935:3:2150
-14936:3:2161
-14937:3:2169
-14938:3:2170
-14939:3:2174
-14940:3:2179
-14941:3:2180
-14942:0:2565
-14943:3:2192
-14944:0:2565
-14945:3:2013
-14946:0:2565
-14947:3:2014
-14948:0:2565
-14949:3:2015
-14950:3:2019
-14951:3:2020
-14952:3:2028
-14953:3:2029
-14954:3:2033
-14955:3:2034
-14956:3:2042
-14957:3:2047
-14958:3:2051
-14959:3:2052
-14960:3:2059
-14961:3:2060
-14962:3:2071
-14963:3:2079
-14964:3:2080
-14965:3:2084
-14966:3:2089
-14967:3:2090
-14968:0:2565
-14969:2:467
-14970:0:2565
-14971:1:109
-14972:1:113
-14973:1:114
-14974:1:122
-14975:1:123
-14976:1:124
-14977:1:136
-14978:1:141
-14979:1:145
-14980:1:146
-14981:1:153
-14982:1:154
-14983:1:165
-14984:1:166
-14985:1:167
-14986:1:178
-14987:1:183
-14988:1:184
-14989:0:2565
-14990:3:2102
-14991:0:2565
-14992:3:2104
-14993:0:2565
-14994:1:196
-14995:0:2565
-14996:3:2105
-14997:3:2109
-14998:3:2110
-14999:3:2118
-15000:3:2119
-15001:3:2123
-15002:3:2124
-15003:3:2132
-15004:3:2137
-15005:3:2141
-15006:3:2142
-15007:3:2149
-15008:3:2150
-15009:3:2161
-15010:3:2169
-15011:3:2170
-15012:3:2174
-15013:3:2179
-15014:3:2180
-15015:0:2565
-15016:1:197
-15017:0:2565
-15018:3:2192
-15019:0:2565
-15020:3:2013
-15021:0:2565
-15022:2:468
-15023:0:2565
-15024:1:198
-15025:0:2565
-15026:3:2014
-15027:0:2565
-15028:3:2015
-15029:3:2019
-15030:3:2020
-15031:3:2028
-15032:3:2029
-15033:3:2033
-15034:3:2034
-15035:3:2042
-15036:3:2047
-15037:3:2051
-15038:3:2052
-15039:3:2059
-15040:3:2060
-15041:3:2071
-15042:3:2079
-15043:3:2080
-15044:3:2084
-15045:3:2089
-15046:3:2090
-15047:0:2565
-15048:3:2102
-15049:0:2565
-15050:3:2104
-15051:0:2565
-15052:3:2105
-15053:3:2109
-15054:3:2110
-15055:3:2118
-15056:3:2119
-15057:3:2123
-15058:3:2124
-15059:3:2132
-15060:3:2137
-15061:3:2141
-15062:3:2142
-15063:3:2149
-15064:3:2150
-15065:3:2161
-15066:3:2169
-15067:3:2170
-15068:3:2174
-15069:3:2179
-15070:3:2180
-15071:0:2565
-15072:3:2192
-15073:0:2565
-15074:3:2013
-15075:0:2565
-15076:1:197
-15077:0:2565
-15078:3:2014
-15079:0:2565
-15080:3:2015
-15081:3:2019
-15082:3:2020
-15083:3:2028
-15084:3:2029
-15085:3:2033
-15086:3:2034
-15087:3:2042
-15088:3:2047
-15089:3:2051
-15090:3:2052
-15091:3:2059
-15092:3:2060
-15093:3:2071
-15094:3:2079
-15095:3:2080
-15096:3:2084
-15097:3:2089
-15098:3:2090
-15099:0:2565
-15100:3:2102
-15101:0:2565
-15102:3:2104
-15103:0:2565
-15104:3:2105
-15105:3:2109
-15106:3:2110
-15107:3:2118
-15108:3:2119
-15109:3:2123
-15110:3:2124
-15111:3:2132
-15112:3:2137
-15113:3:2141
-15114:3:2142
-15115:3:2149
-15116:3:2150
-15117:3:2161
-15118:3:2169
-15119:3:2170
-15120:3:2174
-15121:3:2179
-15122:3:2180
-15123:0:2565
-15124:3:2192
-15125:0:2565
-15126:2:469
-15127:0:2565
-15128:3:2013
-15129:0:2565
-15130:2:475
-15131:0:2565
-15132:2:476
-15133:0:2565
-15134:1:198
-15135:0:2565
-15136:3:2014
-15137:0:2565
-15138:3:2015
-15139:3:2019
-15140:3:2020
-15141:3:2028
-15142:3:2029
-15143:3:2033
-15144:3:2034
-15145:3:2042
-15146:3:2047
-15147:3:2051
-15148:3:2052
-15149:3:2059
-15150:3:2060
-15151:3:2071
-15152:3:2079
-15153:3:2080
-15154:3:2084
-15155:3:2089
-15156:3:2090
-15157:0:2565
-15158:3:2102
-15159:0:2565
-15160:3:2104
-15161:0:2565
-15162:3:2105
-15163:3:2109
-15164:3:2110
-15165:3:2118
-15166:3:2119
-15167:3:2123
-15168:3:2124
-15169:3:2132
-15170:3:2137
-15171:3:2141
-15172:3:2142
-15173:3:2149
-15174:3:2150
-15175:3:2161
-15176:3:2169
-15177:3:2170
-15178:3:2174
-15179:3:2179
-15180:3:2180
-15181:0:2565
-15182:3:2192
-15183:0:2565
-15184:3:2013
-15185:0:2565
-15186:1:197
-15187:0:2565
-15188:3:2014
-15189:0:2565
-15190:3:2015
-15191:3:2019
-15192:3:2020
-15193:3:2028
-15194:3:2029
-15195:3:2033
-15196:3:2034
-15197:3:2042
-15198:3:2047
-15199:3:2051
-15200:3:2052
-15201:3:2059
-15202:3:2060
-15203:3:2071
-15204:3:2079
-15205:3:2080
-15206:3:2084
-15207:3:2089
-15208:3:2090
-15209:0:2565
-15210:3:2102
-15211:0:2565
-15212:3:2104
-15213:0:2565
-15214:3:2105
-15215:3:2109
-15216:3:2110
-15217:3:2118
-15218:3:2119
-15219:3:2123
-15220:3:2124
-15221:3:2132
-15222:3:2137
-15223:3:2141
-15224:3:2142
-15225:3:2149
-15226:3:2150
-15227:3:2161
-15228:3:2169
-15229:3:2170
-15230:3:2174
-15231:3:2179
-15232:3:2180
-15233:0:2565
-15234:3:2192
-15235:0:2565
-15236:2:477
-15237:2:481
-15238:2:482
-15239:2:490
-15240:2:491
-15241:2:495
-15242:2:496
-15243:2:504
-15244:2:509
-15245:2:513
-15246:2:514
-15247:2:521
-15248:2:522
-15249:2:533
-15250:2:534
-15251:2:535
-15252:2:546
-15253:2:551
-15254:2:552
-15255:0:2565
-15256:3:2013
-15257:0:2565
-15258:1:198
-15259:0:2565
-15260:3:2014
-15261:0:2565
-15262:3:2015
-15263:3:2019
-15264:3:2020
-15265:3:2028
-15266:3:2029
-15267:3:2033
-15268:3:2034
-15269:3:2042
-15270:3:2047
-15271:3:2051
-15272:3:2052
-15273:3:2059
-15274:3:2060
-15275:3:2071
-15276:3:2079
-15277:3:2080
-15278:3:2084
-15279:3:2089
-15280:3:2090
-15281:0:2565
-15282:3:2102
-15283:0:2565
-15284:3:2104
-15285:0:2565
-15286:3:2105
-15287:3:2109
-15288:3:2110
-15289:3:2118
-15290:3:2119
-15291:3:2123
-15292:3:2124
-15293:3:2132
-15294:3:2137
-15295:3:2141
-15296:3:2142
-15297:3:2149
-15298:3:2150
-15299:3:2161
-15300:3:2169
-15301:3:2170
-15302:3:2174
-15303:3:2179
-15304:3:2180
-15305:0:2565
-15306:3:2192
-15307:0:2565
-15308:3:2013
-15309:0:2565
-15310:1:197
-15311:0:2565
-15312:3:2014
-15313:0:2565
-15314:3:2015
-15315:3:2019
-15316:3:2020
-15317:3:2028
-15318:3:2029
-15319:3:2033
-15320:3:2034
-15321:3:2042
-15322:3:2047
-15323:3:2051
-15324:3:2052
-15325:3:2059
-15326:3:2060
-15327:3:2071
-15328:3:2079
-15329:3:2080
-15330:3:2084
-15331:3:2089
-15332:3:2090
-15333:0:2565
-15334:3:2102
-15335:0:2565
-15336:3:2104
-15337:0:2565
-15338:3:2105
-15339:3:2109
-15340:3:2110
-15341:3:2118
-15342:3:2119
-15343:3:2123
-15344:3:2124
-15345:3:2132
-15346:3:2137
-15347:3:2141
-15348:3:2142
-15349:3:2149
-15350:3:2150
-15351:3:2161
-15352:3:2169
-15353:3:2170
-15354:3:2174
-15355:3:2179
-15356:3:2180
-15357:0:2565
-15358:3:2192
-15359:0:2565
-15360:2:564
-15361:0:2565
-15362:3:2013
-15363:0:2565
-15364:1:198
-15365:0:2565
-15366:3:2014
-15367:0:2565
-15368:3:2015
-15369:3:2019
-15370:3:2020
-15371:3:2028
-15372:3:2029
-15373:3:2033
-15374:3:2034
-15375:3:2042
-15376:3:2047
-15377:3:2051
-15378:3:2052
-15379:3:2059
-15380:3:2060
-15381:3:2071
-15382:3:2079
-15383:3:2080
-15384:3:2084
-15385:3:2089
-15386:3:2090
-15387:0:2565
-15388:3:2102
-15389:0:2565
-15390:3:2104
-15391:0:2565
-15392:3:2105
-15393:3:2109
-15394:3:2110
-15395:3:2118
-15396:3:2119
-15397:3:2123
-15398:3:2124
-15399:3:2132
-15400:3:2137
-15401:3:2141
-15402:3:2142
-15403:3:2149
-15404:3:2150
-15405:3:2161
-15406:3:2169
-15407:3:2170
-15408:3:2174
-15409:3:2179
-15410:3:2180
-15411:0:2565
-15412:3:2192
-15413:0:2565
-15414:3:2013
-15415:0:2565
-15416:2:565
-15417:2:569
-15418:2:570
-15419:2:578
-15420:2:579
-15421:2:583
-15422:2:584
-15423:2:592
-15424:2:597
-15425:2:601
-15426:2:602
-15427:2:609
-15428:2:610
-15429:2:621
-15430:2:622
-15431:2:623
-15432:2:634
-15433:2:639
-15434:2:640
-15435:0:2565
-15436:3:2014
-15437:0:2565
-15438:3:2015
-15439:3:2019
-15440:3:2020
-15441:3:2028
-15442:3:2029
-15443:3:2033
-15444:3:2034
-15445:3:2042
-15446:3:2047
-15447:3:2051
-15448:3:2052
-15449:3:2059
-15450:3:2060
-15451:3:2071
-15452:3:2079
-15453:3:2080
-15454:3:2084
-15455:3:2089
-15456:3:2090
-15457:0:2565
-15458:3:2102
-15459:0:2565
-15460:1:197
-15461:0:2565
-15462:2:652
-15463:0:2565
-15464:1:198
-15465:0:2565
-15466:3:2104
-15467:0:2565
-15468:3:2105
-15469:3:2109
-15470:3:2110
-15471:3:2118
-15472:3:2119
-15473:3:2123
-15474:3:2124
-15475:3:2132
-15476:3:2137
-15477:3:2141
-15478:3:2142
-15479:3:2149
-15480:3:2150
-15481:3:2161
-15482:3:2169
-15483:3:2170
-15484:3:2174
-15485:3:2179
-15486:3:2180
-15487:0:2565
-15488:3:2192
-15489:0:2565
-15490:3:2013
-15491:0:2565
-15492:3:2014
-15493:0:2565
-15494:3:2015
-15495:3:2019
-15496:3:2020
-15497:3:2028
-15498:3:2029
-15499:3:2033
-15500:3:2034
-15501:3:2042
-15502:3:2047
-15503:3:2051
-15504:3:2052
-15505:3:2059
-15506:3:2060
-15507:3:2071
-15508:3:2079
-15509:3:2080
-15510:3:2084
-15511:3:2089
-15512:3:2090
-15513:0:2565
-15514:3:2102
-15515:0:2565
-15516:1:197
-15517:0:2565
-15518:3:2104
-15519:0:2565
-15520:3:2105
-15521:3:2109
-15522:3:2110
-15523:3:2118
-15524:3:2119
-15525:3:2123
-15526:3:2124
-15527:3:2132
-15528:3:2137
-15529:3:2141
-15530:3:2142
-15531:3:2149
-15532:3:2150
-15533:3:2161
-15534:3:2169
-15535:3:2170
-15536:3:2174
-15537:3:2179
-15538:3:2180
-15539:0:2565
-15540:3:2192
-15541:0:2565
-15542:3:2013
-15543:0:2565
-15544:3:2014
-15545:0:2565
-15546:3:2015
-15547:3:2019
-15548:3:2020
-15549:3:2028
-15550:3:2029
-15551:3:2033
-15552:3:2034
-15553:3:2042
-15554:3:2047
-15555:3:2051
-15556:3:2052
-15557:3:2059
-15558:3:2060
-15559:3:2071
-15560:3:2079
-15561:3:2080
-15562:3:2084
-15563:3:2089
-15564:3:2090
-15565:0:2565
-15566:2:653
-15567:0:2565
-15568:3:2102
-15569:0:2565
-15570:1:198
-15571:0:2565
-15572:3:2104
-15573:0:2565
-15574:3:2105
-15575:3:2109
-15576:3:2110
-15577:3:2118
-15578:3:2119
-15579:3:2123
-15580:3:2124
-15581:3:2132
-15582:3:2137
-15583:3:2141
-15584:3:2142
-15585:3:2149
-15586:3:2150
-15587:3:2161
-15588:3:2169
-15589:3:2170
-15590:3:2174
-15591:3:2179
-15592:3:2180
-15593:0:2565
-15594:3:2192
-15595:0:2565
-15596:3:2013
-15597:0:2565
-15598:3:2014
-15599:0:2565
-15600:3:2015
-15601:3:2019
-15602:3:2020
-15603:3:2028
-15604:3:2029
-15605:3:2033
-15606:3:2034
-15607:3:2042
-15608:3:2047
-15609:3:2051
-15610:3:2052
-15611:3:2059
-15612:3:2060
-15613:3:2071
-15614:3:2079
-15615:3:2080
-15616:3:2084
-15617:3:2089
-15618:3:2090
-15619:0:2565
-15620:3:2102
-15621:0:2565
-15622:1:197
-15623:0:2565
-15624:3:2104
-15625:0:2565
-15626:3:2105
-15627:3:2109
-15628:3:2110
-15629:3:2118
-15630:3:2119
-15631:3:2123
-15632:3:2124
-15633:3:2132
-15634:3:2137
-15635:3:2141
-15636:3:2142
-15637:3:2149
-15638:3:2150
-15639:3:2161
-15640:3:2169
-15641:3:2170
-15642:3:2174
-15643:3:2179
-15644:3:2180
-15645:0:2565
-15646:3:2192
-15647:0:2565
-15648:3:2013
-15649:0:2565
-15650:3:2014
-15651:0:2565
-15652:3:2015
-15653:3:2019
-15654:3:2020
-15655:3:2028
-15656:3:2029
-15657:3:2033
-15658:3:2034
-15659:3:2042
-15660:3:2047
-15661:3:2051
-15662:3:2052
-15663:3:2059
-15664:3:2060
-15665:3:2071
-15666:3:2079
-15667:3:2080
-15668:3:2084
-15669:3:2089
-15670:3:2090
-15671:0:2565
-15672:2:654
-15673:2:658
-15674:2:659
-15675:2:667
-15676:2:668
-15677:2:672
-15678:2:673
-15679:2:681
-15680:2:686
-15681:2:690
-15682:2:691
-15683:2:698
-15684:2:699
-15685:2:710
-15686:2:711
-15687:2:712
-15688:2:723
-15689:2:728
-15690:2:729
-15691:0:2565
-15692:3:2102
-15693:0:2565
-15694:1:198
-15695:0:2565
-15696:3:2104
-15697:0:2565
-15698:3:2105
-15699:3:2109
-15700:3:2110
-15701:3:2118
-15702:3:2119
-15703:3:2123
-15704:3:2124
-15705:3:2132
-15706:3:2137
-15707:3:2141
-15708:3:2142
-15709:3:2149
-15710:3:2150
-15711:3:2161
-15712:3:2169
-15713:3:2170
-15714:3:2174
-15715:3:2179
-15716:3:2180
-15717:0:2565
-15718:3:2192
-15719:0:2565
-15720:3:2013
-15721:0:2565
-15722:3:2014
-15723:0:2565
-15724:3:2015
-15725:3:2019
-15726:3:2020
-15727:3:2028
-15728:3:2029
-15729:3:2033
-15730:3:2034
-15731:3:2042
-15732:3:2047
-15733:3:2051
-15734:3:2052
-15735:3:2059
-15736:3:2060
-15737:3:2071
-15738:3:2079
-15739:3:2080
-15740:3:2084
-15741:3:2089
-15742:3:2090
-15743:0:2565
-15744:3:2102
-15745:0:2565
-15746:2:741
-15747:0:2565
-15748:2:750
-15749:0:2565
-15750:3:2104
-15751:0:2565
-15752:3:2105
-15753:3:2109
-15754:3:2110
-15755:3:2118
-15756:3:2119
-15757:3:2123
-15758:3:2124
-15759:3:2132
-15760:3:2137
-15761:3:2141
-15762:3:2142
-15763:3:2149
-15764:3:2150
-15765:3:2161
-15766:3:2169
-15767:3:2170
-15768:3:2174
-15769:3:2179
-15770:3:2180
-15771:0:2565
-15772:3:2192
-15773:0:2565
-15774:3:2013
-15775:0:2565
-15776:1:197
-15777:0:2565
-15778:2:753
-15779:0:2565
-15780:1:198
-15781:0:2565
-15782:3:2014
-15783:0:2565
-15784:3:2015
-15785:3:2019
-15786:3:2020
-15787:3:2028
-15788:3:2029
-15789:3:2033
-15790:3:2034
-15791:3:2042
-15792:3:2047
-15793:3:2051
-15794:3:2052
-15795:3:2059
-15796:3:2060
-15797:3:2071
-15798:3:2079
-15799:3:2080
-15800:3:2084
-15801:3:2089
-15802:3:2090
-15803:0:2565
-15804:3:2102
-15805:0:2565
-15806:3:2104
-15807:0:2565
-15808:3:2105
-15809:3:2109
-15810:3:2110
-15811:3:2118
-15812:3:2119
-15813:3:2123
-15814:3:2124
-15815:3:2132
-15816:3:2137
-15817:3:2141
-15818:3:2142
-15819:3:2149
-15820:3:2150
-15821:3:2161
-15822:3:2169
-15823:3:2170
-15824:3:2174
-15825:3:2179
-15826:3:2180
-15827:0:2565
-15828:3:2192
-15829:0:2565
-15830:3:2013
-15831:0:2565
-15832:1:197
-15833:0:2565
-15834:3:2014
-15835:0:2565
-15836:3:2015
-15837:3:2019
-15838:3:2020
-15839:3:2028
-15840:3:2029
-15841:3:2033
-15842:3:2034
-15843:3:2042
-15844:3:2047
-15845:3:2051
-15846:3:2052
-15847:3:2059
-15848:3:2060
-15849:3:2071
-15850:3:2079
-15851:3:2080
-15852:3:2084
-15853:3:2089
-15854:3:2090
-15855:0:2565
-15856:3:2102
-15857:0:2565
-15858:3:2104
-15859:0:2565
-15860:3:2105
-15861:3:2109
-15862:3:2110
-15863:3:2118
-15864:3:2119
-15865:3:2123
-15866:3:2124
-15867:3:2132
-15868:3:2137
-15869:3:2141
-15870:3:2142
-15871:3:2149
-15872:3:2150
-15873:3:2161
-15874:3:2169
-15875:3:2170
-15876:3:2174
-15877:3:2179
-15878:3:2180
-15879:0:2565
-15880:3:2192
-15881:0:2565
-15882:2:758
-15883:0:2565
-15884:3:2013
-15885:0:2565
-15886:1:198
-15887:0:2565
-15888:3:2014
-15889:0:2565
-15890:3:2015
-15891:3:2019
-15892:3:2020
-15893:3:2028
-15894:3:2029
-15895:3:2033
-15896:3:2034
-15897:3:2042
-15898:3:2047
-15899:3:2051
-15900:3:2052
-15901:3:2059
-15902:3:2060
-15903:3:2071
-15904:3:2079
-15905:3:2080
-15906:3:2084
-15907:3:2089
-15908:3:2090
-15909:0:2565
-15910:3:2102
-15911:0:2565
-15912:3:2104
-15913:0:2565
-15914:3:2105
-15915:3:2109
-15916:3:2110
-15917:3:2118
-15918:3:2119
-15919:3:2123
-15920:3:2124
-15921:3:2132
-15922:3:2137
-15923:3:2141
-15924:3:2142
-15925:3:2149
-15926:3:2150
-15927:3:2161
-15928:3:2169
-15929:3:2170
-15930:3:2174
-15931:3:2179
-15932:3:2180
-15933:0:2565
-15934:3:2192
-15935:0:2565
-15936:3:2013
-15937:0:2565
-15938:1:197
-15939:0:2565
-15940:3:2014
-15941:0:2565
-15942:3:2015
-15943:3:2019
-15944:3:2020
-15945:3:2028
-15946:3:2029
-15947:3:2033
-15948:3:2034
-15949:3:2042
-15950:3:2047
-15951:3:2051
-15952:3:2052
-15953:3:2059
-15954:3:2060
-15955:3:2071
-15956:3:2079
-15957:3:2080
-15958:3:2084
-15959:3:2089
-15960:3:2090
-15961:0:2565
-15962:3:2102
-15963:0:2565
-15964:3:2104
-15965:0:2565
-15966:3:2105
-15967:3:2109
-15968:3:2110
-15969:3:2118
-15970:3:2119
-15971:3:2123
-15972:3:2124
-15973:3:2132
-15974:3:2137
-15975:3:2141
-15976:3:2142
-15977:3:2149
-15978:3:2150
-15979:3:2161
-15980:3:2169
-15981:3:2170
-15982:3:2174
-15983:3:2179
-15984:3:2180
-15985:0:2565
-15986:3:2192
-15987:0:2565
-15988:2:759
-15989:0:2565
-15990:3:2013
-15991:0:2565
-15992:1:198
-15993:0:2565
-15994:3:2014
-15995:0:2565
-15996:3:2015
-15997:3:2019
-15998:3:2020
-15999:3:2028
-16000:3:2029
-16001:3:2033
-16002:3:2034
-16003:3:2042
-16004:3:2047
-16005:3:2051
-16006:3:2052
-16007:3:2059
-16008:3:2060
-16009:3:2071
-16010:3:2079
-16011:3:2080
-16012:3:2084
-16013:3:2089
-16014:3:2090
-16015:0:2565
-16016:3:2102
-16017:0:2565
-16018:3:2104
-16019:0:2565
-16020:3:2105
-16021:3:2109
-16022:3:2110
-16023:3:2118
-16024:3:2119
-16025:3:2123
-16026:3:2124
-16027:3:2132
-16028:3:2137
-16029:3:2141
-16030:3:2142
-16031:3:2149
-16032:3:2150
-16033:3:2161
-16034:3:2169
-16035:3:2170
-16036:3:2174
-16037:3:2179
-16038:3:2180
-16039:0:2565
-16040:3:2192
-16041:0:2565
-16042:3:2013
-16043:0:2565
-16044:1:197
-16045:0:2565
-16046:3:2014
-16047:0:2565
-16048:3:2015
-16049:3:2019
-16050:3:2020
-16051:3:2028
-16052:3:2029
-16053:3:2033
-16054:3:2034
-16055:3:2042
-16056:3:2047
-16057:3:2051
-16058:3:2052
-16059:3:2059
-16060:3:2060
-16061:3:2071
-16062:3:2079
-16063:3:2080
-16064:3:2084
-16065:3:2089
-16066:3:2090
-16067:0:2565
-16068:3:2102
-16069:0:2565
-16070:3:2104
-16071:0:2565
-16072:3:2105
-16073:3:2109
-16074:3:2110
-16075:3:2118
-16076:3:2119
-16077:3:2123
-16078:3:2124
-16079:3:2132
-16080:3:2137
-16081:3:2141
-16082:3:2142
-16083:3:2149
-16084:3:2150
-16085:3:2161
-16086:3:2169
-16087:3:2170
-16088:3:2174
-16089:3:2179
-16090:3:2180
-16091:0:2565
-16092:3:2192
-16093:0:2565
-16094:2:760
-16095:0:2565
-16096:3:2013
-16097:0:2565
-16098:2:761
-16099:0:2565
-16100:2:762
-16101:0:2565
-16102:2:763
-16103:0:2565
-16104:1:198
-16105:0:2565
-16106:3:2014
-16107:0:2565
-16108:3:2015
-16109:3:2019
-16110:3:2020
-16111:3:2028
-16112:3:2029
-16113:3:2033
-16114:3:2034
-16115:3:2042
-16116:3:2047
-16117:3:2051
-16118:3:2052
-16119:3:2059
-16120:3:2060
-16121:3:2071
-16122:3:2079
-16123:3:2080
-16124:3:2084
-16125:3:2089
-16126:3:2090
-16127:0:2565
-16128:3:2102
-16129:0:2565
-16130:3:2104
-16131:0:2565
-16132:3:2105
-16133:3:2109
-16134:3:2110
-16135:3:2118
-16136:3:2119
-16137:3:2123
-16138:3:2124
-16139:3:2132
-16140:3:2137
-16141:3:2141
-16142:3:2142
-16143:3:2149
-16144:3:2150
-16145:3:2161
-16146:3:2169
-16147:3:2170
-16148:3:2174
-16149:3:2179
-16150:3:2180
-16151:0:2565
-16152:3:2192
-16153:0:2565
-16154:3:2013
-16155:0:2565
-16156:1:197
-16157:0:2565
-16158:3:2014
-16159:0:2565
-16160:3:2015
-16161:3:2019
-16162:3:2020
-16163:3:2028
-16164:3:2029
-16165:3:2033
-16166:3:2034
-16167:3:2042
-16168:3:2047
-16169:3:2051
-16170:3:2052
-16171:3:2059
-16172:3:2060
-16173:3:2071
-16174:3:2079
-16175:3:2080
-16176:3:2084
-16177:3:2089
-16178:3:2090
-16179:0:2565
-16180:3:2102
-16181:0:2565
-16182:3:2104
-16183:0:2565
-16184:3:2105
-16185:3:2109
-16186:3:2110
-16187:3:2118
-16188:3:2119
-16189:3:2123
-16190:3:2124
-16191:3:2132
-16192:3:2137
-16193:3:2141
-16194:3:2142
-16195:3:2149
-16196:3:2150
-16197:3:2161
-16198:3:2169
-16199:3:2170
-16200:3:2174
-16201:3:2179
-16202:3:2180
-16203:0:2565
-16204:3:2192
-16205:0:2565
-16206:2:765
-16207:0:2565
-16208:3:2013
-16209:0:2565
-16210:1:198
-16211:0:2565
-16212:3:2014
-16213:0:2565
-16214:3:2015
-16215:3:2019
-16216:3:2020
-16217:3:2028
-16218:3:2029
-16219:3:2033
-16220:3:2034
-16221:3:2042
-16222:3:2047
-16223:3:2051
-16224:3:2052
-16225:3:2059
-16226:3:2060
-16227:3:2071
-16228:3:2079
-16229:3:2080
-16230:3:2084
-16231:3:2089
-16232:3:2090
-16233:0:2565
-16234:3:2102
-16235:0:2565
-16236:3:2104
-16237:0:2565
-16238:3:2105
-16239:3:2109
-16240:3:2110
-16241:3:2118
-16242:3:2119
-16243:3:2123
-16244:3:2124
-16245:3:2132
-16246:3:2137
-16247:3:2141
-16248:3:2142
-16249:3:2149
-16250:3:2150
-16251:3:2161
-16252:3:2169
-16253:3:2170
-16254:3:2174
-16255:3:2179
-16256:3:2180
-16257:0:2565
-16258:3:2192
-16259:0:2565
-16260:3:2013
-16261:0:2565
-16262:2:766
-16263:2:770
-16264:2:771
-16265:2:779
-16266:2:788
-16267:2:789
-16268:2:793
-16269:2:798
-16270:2:802
-16271:2:803
-16272:2:810
-16273:2:811
-16274:2:822
-16275:2:823
-16276:2:826
-16277:2:827
-16278:2:835
-16279:2:840
-16280:2:841
-16281:0:2565
-16282:3:2014
-16283:0:2565
-16284:3:2015
-16285:3:2019
-16286:3:2020
-16287:3:2028
-16288:3:2029
-16289:3:2033
-16290:3:2034
-16291:3:2042
-16292:3:2047
-16293:3:2051
-16294:3:2052
-16295:3:2059
-16296:3:2060
-16297:3:2071
-16298:3:2079
-16299:3:2080
-16300:3:2084
-16301:3:2089
-16302:3:2090
-16303:0:2565
-16304:3:2102
-16305:0:2565
-16306:3:2104
-16307:0:2565
-16308:3:2105
-16309:3:2109
-16310:3:2110
-16311:3:2118
-16312:3:2119
-16313:3:2123
-16314:3:2124
-16315:3:2132
-16316:3:2137
-16317:3:2141
-16318:3:2142
-16319:3:2149
-16320:3:2150
-16321:3:2161
-16322:3:2169
-16323:3:2170
-16324:3:2174
-16325:3:2179
-16326:3:2180
-16327:0:2565
-16328:3:2192
-16329:0:2565
-16330:2:853
-16331:0:2565
-16332:3:2013
-16333:0:2565
-16334:2:857
-16335:0:2565
-16336:2:465
-16337:0:2565
-16338:3:2014
-16339:0:2565
-16340:3:2015
-16341:3:2019
-16342:3:2020
-16343:3:2028
-16344:3:2029
-16345:3:2033
-16346:3:2034
-16347:3:2042
-16348:3:2047
-16349:3:2051
-16350:3:2052
-16351:3:2059
-16352:3:2060
-16353:3:2071
-16354:3:2079
-16355:3:2080
-16356:3:2084
-16357:3:2089
-16358:3:2090
-16359:0:2565
-16360:3:2102
-16361:0:2565
-16362:3:2104
-16363:0:2565
-16364:3:2105
-16365:3:2109
-16366:3:2110
-16367:3:2118
-16368:3:2119
-16369:3:2123
-16370:3:2124
-16371:3:2132
-16372:3:2137
-16373:3:2141
-16374:3:2142
-16375:3:2149
-16376:3:2150
-16377:3:2161
-16378:3:2169
-16379:3:2170
-16380:3:2174
-16381:3:2179
-16382:3:2180
-16383:0:2565
-16384:3:2192
-16385:0:2565
-16386:2:466
-16387:0:2565
-16388:3:2013
-16389:0:2565
-16390:3:2014
-16391:0:2565
-16392:3:2015
-16393:3:2019
-16394:3:2020
-16395:3:2028
-16396:3:2029
-16397:3:2033
-16398:3:2034
-16399:3:2042
-16400:3:2047
-16401:3:2051
-16402:3:2052
-16403:3:2059
-16404:3:2060
-16405:3:2071
-16406:3:2079
-16407:3:2080
-16408:3:2084
-16409:3:2089
-16410:3:2090
-16411:0:2565
-16412:3:2102
-16413:0:2565
-16414:3:2104
-16415:0:2565
-16416:3:2105
-16417:3:2109
-16418:3:2110
-16419:3:2118
-16420:3:2119
-16421:3:2123
-16422:3:2124
-16423:3:2132
-16424:3:2137
-16425:3:2141
-16426:3:2142
-16427:3:2149
-16428:3:2150
-16429:3:2161
-16430:3:2169
-16431:3:2170
-16432:3:2174
-16433:3:2179
-16434:3:2180
-16435:0:2565
-16436:2:467
-16437:0:2565
-16438:3:2192
-16439:0:2565
-16440:3:2013
-16441:0:2565
-16442:3:2014
-16443:0:2565
-16444:3:2015
-16445:3:2019
-16446:3:2020
-16447:3:2028
-16448:3:2029
-16449:3:2033
-16450:3:2034
-16451:3:2042
-16452:3:2047
-16453:3:2051
-16454:3:2052
-16455:3:2059
-16456:3:2060
-16457:3:2071
-16458:3:2079
-16459:3:2080
-16460:3:2084
-16461:3:2089
-16462:3:2090
-16463:0:2565
-16464:3:2102
-16465:0:2565
-16466:3:2104
-16467:0:2565
-16468:1:199
-16469:0:2565
-16470:2:468
-16471:0:2565
-16472:1:205
-16473:0:2565
-16474:3:2105
-16475:3:2109
-16476:3:2110
-16477:3:2118
-16478:3:2119
-16479:3:2123
-16480:3:2124
-16481:3:2132
-16482:3:2137
-16483:3:2141
-16484:3:2142
-16485:3:2149
-16486:3:2150
-16487:3:2161
-16488:3:2169
-16489:3:2170
-16490:3:2174
-16491:3:2179
-16492:3:2180
-16493:0:2565
-16494:3:2192
-16495:0:2565
-16496:3:2013
-16497:0:2565
-16498:3:2014
-16499:0:2565
-16500:3:2015
-16501:3:2019
-16502:3:2020
-16503:3:2028
-16504:3:2029
-16505:3:2033
-16506:3:2034
-16507:3:2042
-16508:3:2047
-16509:3:2051
-16510:3:2052
-16511:3:2059
-16512:3:2060
-16513:3:2071
-16514:3:2079
-16515:3:2080
-16516:3:2084
-16517:3:2089
-16518:3:2090
-16519:0:2565
-16520:3:2102
-16521:0:2565
-16522:3:2104
-16523:0:2565
-16524:2:467
-16525:0:2565
-16526:2:468
-16527:0:2565
-16528:3:2105
-16529:3:2109
-16530:3:2110
-16531:3:2118
-16532:3:2119
-16533:3:2123
-16534:3:2124
-16535:3:2132
-16536:3:2137
-16537:3:2141
-16538:3:2142
-16539:3:2149
-16540:3:2150
-16541:3:2161
-16542:3:2169
-16543:3:2170
-16544:3:2174
-16545:3:2179
-16546:3:2180
-16547:0:2565
-16548:3:2192
-16549:0:2565
-16550:3:2013
-16551:0:2565
-16552:3:2014
-16553:0:2565
-16554:3:2015
-16555:3:2019
-16556:3:2020
-16557:3:2028
-16558:3:2029
-16559:3:2033
-16560:3:2034
-16561:3:2042
-16562:3:2047
-16563:3:2051
-16564:3:2052
-16565:3:2059
-16566:3:2060
-16567:3:2071
-16568:3:2079
-16569:3:2080
-16570:3:2084
-16571:3:2089
-16572:3:2090
-16573:0:2565
-16574:3:2102
-16575:0:2565
-16576:2:467
-16577:0:2565
-16578:1:206
-16579:0:2565
-16580:2:468
-16581:0:2565
-16582:3:2104
-16583:0:2565
-16584:3:2105
-16585:3:2109
-16586:3:2110
-16587:3:2118
-16588:3:2119
-16589:3:2123
-16590:3:2124
-16591:3:2132
-16592:3:2137
-16593:3:2141
-16594:3:2142
-16595:3:2149
-16596:3:2150
-16597:3:2161
-16598:3:2169
-16599:3:2170
-16600:3:2174
-16601:3:2179
-16602:3:2180
-16603:0:2565
-16604:3:2192
-16605:0:2565
-16606:3:2013
-16607:0:2565
-16608:3:2014
-16609:0:2565
-16610:3:2015
-16611:3:2019
-16612:3:2020
-16613:3:2028
-16614:3:2029
-16615:3:2033
-16616:3:2034
-16617:3:2042
-16618:3:2047
-16619:3:2051
-16620:3:2052
-16621:3:2059
-16622:3:2060
-16623:3:2071
-16624:3:2079
-16625:3:2080
-16626:3:2084
-16627:3:2089
-16628:3:2090
-16629:0:2565
-16630:3:2102
-16631:0:2565
-16632:2:467
-16633:0:2565
-16634:2:468
-16635:0:2565
-16636:3:2104
-16637:0:2565
-16638:3:2105
-16639:3:2109
-16640:3:2110
-16641:3:2118
-16642:3:2119
-16643:3:2123
-16644:3:2124
-16645:3:2132
-16646:3:2137
-16647:3:2141
-16648:3:2142
-16649:3:2149
-16650:3:2150
-16651:3:2161
-16652:3:2169
-16653:3:2170
-16654:3:2174
-16655:3:2179
-16656:3:2180
-16657:0:2565
-16658:3:2192
-16659:0:2565
-16660:3:2013
-16661:0:2565
-16662:3:2014
-16663:0:2565
-16664:3:2015
-16665:3:2019
-16666:3:2020
-16667:3:2028
-16668:3:2029
-16669:3:2033
-16670:3:2034
-16671:3:2042
-16672:3:2047
-16673:3:2051
-16674:3:2052
-16675:3:2059
-16676:3:2060
-16677:3:2071
-16678:3:2079
-16679:3:2080
-16680:3:2084
-16681:3:2089
-16682:3:2090
-16683:0:2565
-16684:2:467
-16685:0:2565
-16686:1:207
-16687:1:211
-16688:1:212
-16689:1:220
-16690:1:229
-16691:1:230
-16692:1:234
-16693:1:239
-16694:1:243
-16695:1:244
-16696:1:251
-16697:1:252
-16698:1:263
-16699:1:264
-16700:1:267
-16701:1:268
-16702:1:276
-16703:1:281
-16704:1:282
-16705:0:2565
-16706:3:2102
-16707:0:2565
-16708:2:468
-16709:0:2565
-16710:3:2104
-16711:0:2565
-16712:3:2105
-16713:3:2109
-16714:3:2110
-16715:3:2118
-16716:3:2119
-16717:3:2123
-16718:3:2124
-16719:3:2132
-16720:3:2137
-16721:3:2141
-16722:3:2142
-16723:3:2149
-16724:3:2150
-16725:3:2161
-16726:3:2169
-16727:3:2170
-16728:3:2174
-16729:3:2179
-16730:3:2180
-16731:0:2565
-16732:3:2192
-16733:0:2565
-16734:3:2013
-16735:0:2565
-16736:3:2014
-16737:0:2565
-16738:3:2015
-16739:3:2019
-16740:3:2020
-16741:3:2028
-16742:3:2029
-16743:3:2033
-16744:3:2034
-16745:3:2042
-16746:3:2047
-16747:3:2051
-16748:3:2052
-16749:3:2059
-16750:3:2060
-16751:3:2071
-16752:3:2079
-16753:3:2080
-16754:3:2084
-16755:3:2089
-16756:3:2090
-16757:0:2565
-16758:2:467
-16759:0:2565
-16760:3:2102
-16761:0:2565
-16762:3:2104
-16763:0:2565
-16764:3:2105
-16765:3:2109
-16766:3:2110
-16767:3:2118
-16768:3:2119
-16769:3:2123
-16770:3:2124
-16771:3:2132
-16772:3:2137
-16773:3:2141
-16774:3:2142
-16775:3:2149
-16776:3:2150
-16777:3:2161
-16778:3:2169
-16779:3:2170
-16780:3:2174
-16781:3:2179
-16782:3:2180
-16783:0:2565
-16784:3:2192
-16785:0:2565
-16786:3:2013
-16787:0:2565
-16788:3:2014
-16789:0:2565
-16790:1:294
-16791:0:2565
-16792:2:468
-16793:0:2565
-16794:3:2015
-16795:3:2019
-16796:3:2020
-16797:3:2028
-16798:3:2029
-16799:3:2033
-16800:3:2034
-16801:3:2042
-16802:3:2047
-16803:3:2051
-16804:3:2052
-16805:3:2059
-16806:3:2060
-16807:3:2071
-16808:3:2079
-16809:3:2080
-16810:3:2084
-16811:3:2089
-16812:3:2090
-16813:0:2565
-16814:3:2102
-16815:0:2565
-16816:3:2104
-16817:0:2565
-16818:3:2105
-16819:3:2109
-16820:3:2110
-16821:3:2118
-16822:3:2119
-16823:3:2123
-16824:3:2124
-16825:3:2132
-16826:3:2137
-16827:3:2141
-16828:3:2142
-16829:3:2149
-16830:3:2150
-16831:3:2161
-16832:3:2169
-16833:3:2170
-16834:3:2174
-16835:3:2179
-16836:3:2180
-16837:0:2565
-16838:3:2192
-16839:0:2565
-16840:3:2013
-16841:0:2565
-16842:3:2014
-16843:0:2565
-16844:2:469
-16845:0:2565
-16846:2:475
-16847:0:2565
-16848:2:476
-16849:0:2565
-16850:3:2015
-16851:3:2019
-16852:3:2020
-16853:3:2028
-16854:3:2029
-16855:3:2033
-16856:3:2034
-16857:3:2042
-16858:3:2047
-16859:3:2051
-16860:3:2052
-16861:3:2059
-16862:3:2060
-16863:3:2071
-16864:3:2079
-16865:3:2080
-16866:3:2084
-16867:3:2089
-16868:3:2090
-16869:0:2565
-16870:3:2102
-16871:0:2565
-16872:3:2104
-16873:0:2565
-16874:3:2105
-16875:3:2109
-16876:3:2110
-16877:3:2118
-16878:3:2119
-16879:3:2123
-16880:3:2124
-16881:3:2132
-16882:3:2137
-16883:3:2141
-16884:3:2142
-16885:3:2149
-16886:3:2150
-16887:3:2161
-16888:3:2169
-16889:3:2170
-16890:3:2174
-16891:3:2179
-16892:3:2180
-16893:0:2565
-16894:3:2192
-16895:0:2565
-16896:3:2013
-16897:0:2565
-16898:2:477
-16899:2:481
-16900:2:482
-16901:2:490
-16902:2:499
-16903:2:500
-16904:2:504
-16905:2:509
-16906:2:513
-16907:2:514
-16908:2:521
-16909:2:522
-16910:2:533
-16911:2:534
-16912:2:537
-16913:2:538
-16914:2:546
-16915:2:551
-16916:2:552
-16917:0:2565
-16918:3:2014
-16919:0:2565
-16920:3:2015
-16921:3:2019
-16922:3:2020
-16923:3:2028
-16924:3:2029
-16925:3:2033
-16926:3:2034
-16927:3:2042
-16928:3:2047
-16929:3:2051
-16930:3:2052
-16931:3:2059
-16932:3:2060
-16933:3:2071
-16934:3:2079
-16935:3:2080
-16936:3:2084
-16937:3:2089
-16938:3:2090
-16939:0:2565
-16940:3:2102
-16941:0:2565
-16942:3:2104
-16943:0:2565
-16944:3:2105
-16945:3:2109
-16946:3:2110
-16947:3:2118
-16948:3:2119
-16949:3:2123
-16950:3:2124
-16951:3:2132
-16952:3:2137
-16953:3:2141
-16954:3:2142
-16955:3:2149
-16956:3:2150
-16957:3:2161
-16958:3:2169
-16959:3:2170
-16960:3:2174
-16961:3:2179
-16962:3:2180
-16963:0:2565
-16964:3:2192
-16965:0:2565
-16966:2:564
-16967:0:2565
-16968:3:2013
-16969:0:2565
-16970:3:2014
-16971:0:2565
-16972:3:2015
-16973:3:2019
-16974:3:2020
-16975:3:2028
-16976:3:2029
-16977:3:2033
-16978:3:2034
-16979:3:2042
-16980:3:2047
-16981:3:2051
-16982:3:2052
-16983:3:2059
-16984:3:2060
-16985:3:2071
-16986:3:2079
-16987:3:2080
-16988:3:2084
-16989:3:2089
-16990:3:2090
-16991:0:2565
-16992:3:2102
-16993:0:2565
-16994:3:2104
-16995:0:2565
-16996:3:2105
-16997:3:2109
-16998:3:2110
-16999:3:2118
-17000:3:2119
-17001:3:2123
-17002:3:2124
-17003:3:2132
-17004:3:2137
-17005:3:2141
-17006:3:2142
-17007:3:2149
-17008:3:2150
-17009:3:2161
-17010:3:2169
-17011:3:2170
-17012:3:2174
-17013:3:2179
-17014:3:2180
-17015:0:2565
-17016:2:565
-17017:2:569
-17018:2:570
-17019:2:578
-17020:2:587
-17021:2:588
-17022:2:592
-17023:2:597
-17024:2:601
-17025:2:602
-17026:2:609
-17027:2:610
-17028:2:621
-17029:2:622
-17030:2:625
-17031:2:626
-17032:2:634
-17033:2:639
-17034:2:640
-17035:0:2565
-17036:3:2192
-17037:0:2565
-17038:3:2013
-17039:0:2565
-17040:2:652
-17041:0:2565
-17042:3:2014
-17043:0:2565
-17044:3:2015
-17045:3:2019
-17046:3:2020
-17047:3:2028
-17048:3:2029
-17049:3:2033
-17050:3:2034
-17051:3:2042
-17052:3:2047
-17053:3:2051
-17054:3:2052
-17055:3:2059
-17056:3:2060
-17057:3:2071
-17058:3:2079
-17059:3:2080
-17060:3:2084
-17061:3:2089
-17062:3:2090
-17063:0:2565
-17064:3:2102
-17065:0:2565
-17066:3:2104
-17067:0:2565
-17068:3:2105
-17069:3:2109
-17070:3:2110
-17071:3:2118
-17072:3:2119
-17073:3:2123
-17074:3:2124
-17075:3:2132
-17076:3:2137
-17077:3:2141
-17078:3:2142
-17079:3:2149
-17080:3:2150
-17081:3:2161
-17082:3:2169
-17083:3:2170
-17084:3:2174
-17085:3:2179
-17086:3:2180
-17087:0:2565
-17088:3:2192
-17089:0:2565
-17090:2:653
-17091:0:2565
-17092:3:2013
-17093:0:2565
-17094:3:2014
-17095:0:2565
-17096:3:2015
-17097:3:2019
-17098:3:2020
-17099:3:2028
-17100:3:2029
-17101:3:2033
-17102:3:2034
-17103:3:2042
-17104:3:2047
-17105:3:2051
-17106:3:2052
-17107:3:2059
-17108:3:2060
-17109:3:2071
-17110:3:2079
-17111:3:2080
-17112:3:2084
-17113:3:2089
-17114:3:2090
-17115:0:2565
-17116:3:2102
-17117:0:2565
-17118:3:2104
-17119:0:2565
-17120:3:2105
-17121:3:2109
-17122:3:2110
-17123:3:2118
-17124:3:2119
-17125:3:2123
-17126:3:2124
-17127:3:2132
-17128:3:2137
-17129:3:2141
-17130:3:2142
-17131:3:2149
-17132:3:2150
-17133:3:2161
-17134:3:2169
-17135:3:2170
-17136:3:2174
-17137:3:2179
-17138:3:2180
-17139:0:2565
-17140:2:654
-17141:2:658
-17142:2:659
-17143:2:667
-17144:2:676
-17145:2:677
-17146:2:681
-17147:2:686
-17148:2:690
-17149:2:691
-17150:2:698
-17151:2:699
-17152:2:710
-17153:2:711
-17154:2:714
-17155:2:715
-17156:2:723
-17157:2:728
-17158:2:729
-17159:0:2565
-17160:3:2192
-17161:0:2565
-17162:3:2013
-17163:0:2565
-17164:3:2014
-17165:0:2565
-17166:3:2015
-17167:3:2019
-17168:3:2020
-17169:3:2028
-17170:3:2029
-17171:3:2033
-17172:3:2034
-17173:3:2042
-17174:3:2047
-17175:3:2051
-17176:3:2052
-17177:3:2059
-17178:3:2060
-17179:3:2071
-17180:3:2079
-17181:3:2080
-17182:3:2084
-17183:3:2089
-17184:3:2090
-17185:0:2565
-17186:3:2102
-17187:0:2565
-17188:3:2104
-17189:0:2565
-17190:1:295
-17191:0:2565
-17192:1:296
-17193:0:2565
-17194:3:2105
-17195:3:2109
-17196:3:2110
-17197:3:2118
-17198:3:2119
-17199:3:2123
-17200:3:2124
-17201:3:2132
-17202:3:2137
-17203:3:2141
-17204:3:2142
-17205:3:2149
-17206:3:2150
-17207:3:2161
-17208:3:2169
-17209:3:2170
-17210:3:2174
-17211:3:2179
-17212:3:2180
-17213:0:2565
-17214:3:2192
-17215:0:2565
-17216:3:2013
-17217:0:2565
-17218:3:2014
-17219:0:2565
-17220:3:2015
-17221:3:2019
-17222:3:2020
-17223:3:2028
-17224:3:2029
-17225:3:2033
-17226:3:2034
-17227:3:2042
-17228:3:2047
-17229:3:2051
-17230:3:2052
-17231:3:2059
-17232:3:2060
-17233:3:2071
-17234:3:2079
-17235:3:2080
-17236:3:2084
-17237:3:2089
-17238:3:2090
-17239:0:2565
-17240:3:2102
-17241:0:2565
-17242:3:2104
-17243:0:2565
-17244:1:295
-17245:0:2565
-17246:3:2105
-17247:3:2109
-17248:3:2110
-17249:3:2118
-17250:3:2119
-17251:3:2123
-17252:3:2124
-17253:3:2132
-17254:3:2137
-17255:3:2141
-17256:3:2142
-17257:3:2149
-17258:3:2150
-17259:3:2161
-17260:3:2169
-17261:3:2170
-17262:3:2174
-17263:3:2179
-17264:3:2180
-17265:0:2565
-17266:3:2192
-17267:0:2565
-17268:3:2013
-17269:0:2565
-17270:3:2014
-17271:0:2565
-17272:3:2015
-17273:3:2019
-17274:3:2020
-17275:3:2028
-17276:3:2029
-17277:3:2033
-17278:3:2034
-17279:3:2042
-17280:3:2047
-17281:3:2051
-17282:3:2052
-17283:3:2059
-17284:3:2060
-17285:3:2071
-17286:3:2079
-17287:3:2080
-17288:3:2084
-17289:3:2089
-17290:3:2090
-17291:0:2565
-17292:3:2102
-17293:0:2565
-17294:2:741
-17295:0:2565
-17296:2:750
-17297:0:2565
-17298:2:753
-17299:0:2565
-17300:1:296
-17301:0:2565
-17302:2:758
-17303:0:2565
-17304:2:759
-17305:0:2565
-17306:2:760
-17307:0:2565
-17308:2:761
-17309:0:2565
-17310:2:762
-17311:0:2565
-17312:2:763
-17313:0:2565
-17314:2:765
-17315:0:2565
-17316:2:766
-17317:2:770
-17318:2:771
-17319:2:779
-17320:2:780
-17321:2:781
-17322:2:793
-17323:2:798
-17324:2:802
-17325:2:803
-17326:2:810
-17327:2:811
-17328:2:822
-17329:2:823
-17330:2:824
-17331:2:835
-17332:2:840
-17333:2:841
-17334:0:2565
-17335:3:2104
-17336:0:2565
-17337:3:2105
-17338:3:2109
-17339:3:2110
-17340:3:2118
-17341:3:2119
-17342:3:2123
-17343:3:2124
-17344:3:2132
-17345:3:2137
-17346:3:2141
-17347:3:2142
-17348:3:2149
-17349:3:2150
-17350:3:2161
-17351:3:2169
-17352:3:2170
-17353:3:2174
-17354:3:2179
-17355:3:2180
-17356:0:2565
-17357:3:2192
-17358:0:2565
-17359:3:2013
-17360:0:2565
-17361:3:2014
-17362:0:2565
-17363:3:2015
-17364:3:2019
-17365:3:2020
-17366:3:2028
-17367:3:2029
-17368:3:2033
-17369:3:2034
-17370:3:2042
-17371:3:2047
-17372:3:2051
-17373:3:2052
-17374:3:2059
-17375:3:2060
-17376:3:2071
-17377:3:2079
-17378:3:2080
-17379:3:2084
-17380:3:2089
-17381:3:2090
-17382:0:2565
-17383:3:2102
-17384:0:2565
-17385:2:853
-17386:0:2565
-17387:2:857
-17388:0:2565
-17389:3:2104
-17390:0:2565
-17391:3:2105
-17392:3:2109
-17393:3:2110
-17394:3:2118
-17395:3:2119
-17396:3:2123
-17397:3:2124
-17398:3:2132
-17399:3:2137
-17400:3:2141
-17401:3:2142
-17402:3:2149
-17403:3:2150
-17404:3:2161
-17405:3:2169
-17406:3:2170
-17407:3:2174
-17408:3:2179
-17409:3:2180
-17410:0:2565
-17411:3:2192
-17412:0:2565
-17413:1:295
-17414:0:2565
-17415:3:2013
-17416:0:2565
-17417:2:465
-17418:0:2565
-17419:1:296
-17420:0:2565
-17421:3:2014
-17422:0:2565
-17423:3:2015
-17424:3:2019
-17425:3:2020
-17426:3:2028
-17427:3:2029
-17428:3:2033
-17429:3:2034
-17430:3:2042
-17431:3:2047
-17432:3:2051
-17433:3:2052
-17434:3:2059
-17435:3:2060
-17436:3:2071
-17437:3:2079
-17438:3:2080
-17439:3:2084
-17440:3:2089
-17441:3:2090
-17442:0:2565
-17443:3:2102
-17444:0:2565
-17445:3:2104
-17446:0:2565
-17447:3:2105
-17448:3:2109
-17449:3:2110
-17450:3:2118
-17451:3:2119
-17452:3:2123
-17453:3:2124
-17454:3:2132
-17455:3:2137
-17456:3:2141
-17457:3:2142
-17458:3:2149
-17459:3:2150
-17460:3:2161
-17461:3:2169
-17462:3:2170
-17463:3:2174
-17464:3:2179
-17465:3:2180
-17466:0:2565
-17467:3:2192
-17468:0:2565
-17469:3:2013
-17470:0:2565
-17471:1:295
-17472:0:2565
-17473:3:2014
-17474:0:2565
-17475:3:2015
-17476:3:2019
-17477:3:2020
-17478:3:2028
-17479:3:2029
-17480:3:2033
-17481:3:2034
-17482:3:2042
-17483:3:2047
-17484:3:2051
-17485:3:2052
-17486:3:2059
-17487:3:2060
-17488:3:2071
-17489:3:2079
-17490:3:2080
-17491:3:2084
-17492:3:2089
-17493:3:2090
-17494:0:2565
-17495:3:2102
-17496:0:2565
-17497:3:2104
-17498:0:2565
-17499:3:2105
-17500:3:2109
-17501:3:2110
-17502:3:2118
-17503:3:2119
-17504:3:2123
-17505:3:2124
-17506:3:2132
-17507:3:2137
-17508:3:2141
-17509:3:2142
-17510:3:2149
-17511:3:2150
-17512:3:2161
-17513:3:2169
-17514:3:2170
-17515:3:2174
-17516:3:2179
-17517:3:2180
-17518:0:2565
-17519:3:2192
-17520:0:2565
-17521:2:466
-17522:0:2565
-17523:3:2013
-17524:0:2565
-17525:1:296
-17526:0:2565
-17527:2:467
-17528:0:2565
-17529:2:468
-17530:0:2565
-17531:1:297
-17532:0:2565
-17533:2:467
-17534:0:2565
-17535:3:2014
-17536:0:2565
-17537:3:2015
-17538:3:2019
-17539:3:2020
-17540:3:2028
-17541:3:2029
-17542:3:2033
-17543:3:2034
-17544:3:2042
-17545:3:2047
-17546:3:2051
-17547:3:2052
-17548:3:2059
-17549:3:2060
-17550:3:2071
-17551:3:2079
-17552:3:2080
-17553:3:2084
-17554:3:2089
-17555:3:2090
-17556:0:2565
-17557:3:2102
-17558:0:2565
-17559:3:2104
-17560:0:2565
-17561:3:2105
-17562:3:2109
-17563:3:2110
-17564:3:2118
-17565:3:2119
-17566:3:2123
-17567:3:2124
-17568:3:2132
-17569:3:2137
-17570:3:2141
-17571:3:2142
-17572:3:2149
-17573:3:2150
-17574:3:2161
-17575:3:2169
-17576:3:2170
-17577:3:2174
-17578:3:2179
-17579:3:2180
-17580:0:2565
-17581:3:2192
-17582:0:2565
-17583:3:2013
-17584:0:2565
-17585:1:303
-17586:0:2565
-17587:2:468
-17588:0:2565
-17589:1:312
-17590:0:2565
-17591:2:467
-17592:0:2565
-17593:2:468
-17594:0:2565
-17595:1:314
-17596:0:2565
-17597:3:2014
-17598:0:2565
-17599:3:2015
-17600:3:2019
-17601:3:2020
-17602:3:2028
-17603:3:2029
-17604:3:2033
-17605:3:2034
-17606:3:2042
-17607:3:2047
-17608:3:2051
-17609:3:2052
-17610:3:2059
-17611:3:2060
-17612:3:2071
-17613:3:2079
-17614:3:2080
-17615:3:2084
-17616:3:2089
-17617:3:2090
-17618:0:2565
-17619:3:2102
-17620:0:2565
-17621:3:2104
-17622:0:2565
-17623:3:2105
-17624:3:2109
-17625:3:2110
-17626:3:2118
-17627:3:2119
-17628:3:2123
-17629:3:2124
-17630:3:2132
-17631:3:2137
-17632:3:2141
-17633:3:2142
-17634:3:2149
-17635:3:2150
-17636:3:2161
-17637:3:2169
-17638:3:2170
-17639:3:2174
-17640:3:2179
-17641:3:2180
-17642:0:2565
-17643:3:2192
-17644:0:2565
-17645:3:2013
-17646:0:2565
-17647:2:469
-17648:0:2565
-17649:2:475
-17650:0:2565
-17651:3:2014
-17652:0:2565
-17653:3:2015
-17654:3:2019
-17655:3:2020
-17656:3:2028
-17657:3:2029
-17658:3:2033
-17659:3:2034
-17660:3:2042
-17661:3:2047
-17662:3:2051
-17663:3:2052
-17664:3:2059
-17665:3:2060
-17666:3:2071
-17667:3:2079
-17668:3:2080
-17669:3:2084
-17670:3:2089
-17671:3:2090
-17672:0:2565
-17673:1:315
-17674:0:2565
-17675:3:2102
-17676:0:2565
-17677:2:476
-17678:0:2565
-17679:1:316
-17680:0:2565
-17681:3:2104
-17682:0:2565
-17683:3:2105
-17684:3:2109
-17685:3:2110
-17686:3:2118
-17687:3:2119
-17688:3:2123
-17689:3:2124
-17690:3:2132
-17691:3:2137
-17692:3:2141
-17693:3:2142
-17694:3:2149
-17695:3:2150
-17696:3:2161
-17697:3:2169
-17698:3:2170
-17699:3:2174
-17700:3:2179
-17701:3:2180
-17702:0:2565
-17703:3:2192
-17704:0:2565
-17705:3:2013
-17706:0:2565
-17707:3:2014
-17708:0:2565
-17709:3:2015
-17710:3:2019
-17711:3:2020
-17712:3:2028
-17713:3:2029
-17714:3:2033
-17715:3:2034
-17716:3:2042
-17717:3:2047
-17718:3:2051
-17719:3:2052
-17720:3:2059
-17721:3:2060
-17722:3:2071
-17723:3:2079
-17724:3:2080
-17725:3:2084
-17726:3:2089
-17727:3:2090
-17728:0:2565
-17729:3:2102
-17730:0:2565
-17731:2:477
-17732:2:481
-17733:2:482
-17734:2:490
-17735:2:499
-17736:2:500
-17737:2:504
-17738:2:509
-17739:2:513
-17740:2:514
-17741:2:521
-17742:2:522
-17743:2:533
-17744:2:534
-17745:2:537
-17746:2:538
-17747:2:546
-17748:2:551
-17749:2:552
-17750:0:2565
-17751:3:2104
-17752:0:2565
-17753:3:2105
-17754:3:2109
-17755:3:2110
-17756:3:2118
-17757:3:2119
-17758:3:2123
-17759:3:2124
-17760:3:2132
-17761:3:2137
-17762:3:2141
-17763:3:2142
-17764:3:2149
-17765:3:2150
-17766:3:2161
-17767:3:2169
-17768:3:2170
-17769:3:2174
-17770:3:2179
-17771:3:2180
-17772:0:2565
-17773:3:2192
-17774:0:2565
-17775:3:2013
-17776:0:2565
-17777:3:2014
-17778:0:2565
-17779:3:2015
-17780:3:2019
-17781:3:2020
-17782:3:2028
-17783:3:2029
-17784:3:2033
-17785:3:2034
-17786:3:2042
-17787:3:2047
-17788:3:2051
-17789:3:2052
-17790:3:2059
-17791:3:2060
-17792:3:2071
-17793:3:2079
-17794:3:2080
-17795:3:2084
-17796:3:2089
-17797:3:2090
-17798:0:2565
-17799:2:564
-17800:0:2565
-17801:3:2102
-17802:0:2565
-17803:3:2104
-17804:0:2565
-17805:3:2105
-17806:3:2109
-17807:3:2110
-17808:3:2118
-17809:3:2119
-17810:3:2123
-17811:3:2124
-17812:3:2132
-17813:3:2137
-17814:3:2141
-17815:3:2142
-17816:3:2149
-17817:3:2150
-17818:3:2161
-17819:3:2169
-17820:3:2170
-17821:3:2174
-17822:3:2179
-17823:3:2180
-17824:0:2565
-17825:3:2192
-17826:0:2565
-17827:3:2013
-17828:0:2565
-17829:3:2014
-17830:0:2565
-17831:2:565
-17832:2:569
-17833:2:570
-17834:2:578
-17835:2:579
-17836:2:580
-17837:2:592
-17838:2:597
-17839:2:601
-17840:2:602
-17841:2:609
-17842:2:610
-17843:2:621
-17844:2:622
-17845:2:623
-17846:2:634
-17847:2:639
-17848:2:640
-17849:0:2565
-17850:3:2015
-17851:3:2019
-17852:3:2020
-17853:3:2028
-17854:3:2029
-17855:3:2033
-17856:3:2034
-17857:3:2042
-17858:3:2047
-17859:3:2051
-17860:3:2052
-17861:3:2059
-17862:3:2060
-17863:3:2071
-17864:3:2079
-17865:3:2080
-17866:3:2084
-17867:3:2089
-17868:3:2090
-17869:0:2565
-17870:3:2102
-17871:0:2565
-17872:3:2104
-17873:0:2565
-17874:3:2105
-17875:3:2109
-17876:3:2110
-17877:3:2118
-17878:3:2119
-17879:3:2123
-17880:3:2124
-17881:3:2132
-17882:3:2137
-17883:3:2141
-17884:3:2142
-17885:3:2149
-17886:3:2150
-17887:3:2161
-17888:3:2169
-17889:3:2170
-17890:3:2174
-17891:3:2179
-17892:3:2180
-17893:0:2565
-17894:3:2192
-17895:0:2565
-17896:1:315
-17897:0:2565
-17898:3:2013
-17899:0:2565
-17900:2:744
-17901:0:2565
-17902:1:316
-17903:0:2565
-17904:3:2014
-17905:0:2565
-17906:3:2015
-17907:3:2019
-17908:3:2020
-17909:3:2028
-17910:3:2029
-17911:3:2033
-17912:3:2034
-17913:3:2042
-17914:3:2047
-17915:3:2051
-17916:3:2052
-17917:3:2059
-17918:3:2060
-17919:3:2071
-17920:3:2079
-17921:3:2080
-17922:3:2084
-17923:3:2089
-17924:3:2090
-17925:0:2565
-17926:3:2102
-17927:0:2565
-17928:3:2104
-17929:0:2565
-17930:3:2105
-17931:3:2109
-17932:3:2110
-17933:3:2118
-17934:3:2119
-17935:3:2123
-17936:3:2124
-17937:3:2132
-17938:3:2137
-17939:3:2141
-17940:3:2142
-17941:3:2149
-17942:3:2150
-17943:3:2161
-17944:3:2169
-17945:3:2170
-17946:3:2174
-17947:3:2179
-17948:3:2180
-17949:0:2565
-17950:3:2192
-17951:0:2565
-17952:3:2013
-17953:0:2565
-17954:1:315
-17955:0:2565
-17956:3:2014
-17957:0:2565
-17958:3:2015
-17959:3:2019
-17960:3:2020
-17961:3:2028
-17962:3:2029
-17963:3:2033
-17964:3:2034
-17965:3:2042
-17966:3:2047
-17967:3:2051
-17968:3:2052
-17969:3:2059
-17970:3:2060
-17971:3:2071
-17972:3:2079
-17973:3:2080
-17974:3:2084
-17975:3:2089
-17976:3:2090
-17977:0:2565
-17978:3:2102
-17979:0:2565
-17980:3:2104
-17981:0:2565
-17982:3:2105
-17983:3:2109
-17984:3:2110
-17985:3:2118
-17986:3:2119
-17987:3:2123
-17988:3:2124
-17989:3:2132
-17990:3:2137
-17991:3:2141
-17992:3:2142
-17993:3:2149
-17994:3:2150
-17995:3:2161
-17996:3:2169
-17997:3:2170
-17998:3:2174
-17999:3:2179
-18000:3:2180
-18001:0:2565
-18002:3:2192
-18003:0:2565
-18004:2:745
-18005:0:2565
-18006:3:2013
-18007:0:2565
-18008:2:750
-18009:0:2565
-18010:2:753
-18011:0:2565
-18012:1:316
-18013:0:2565
-18014:3:2014
-18015:0:2565
-18016:3:2015
-18017:3:2019
-18018:3:2020
-18019:3:2028
-18020:3:2029
-18021:3:2033
-18022:3:2034
-18023:3:2042
-18024:3:2047
-18025:3:2051
-18026:3:2052
-18027:3:2059
-18028:3:2060
-18029:3:2071
-18030:3:2079
-18031:3:2080
-18032:3:2084
-18033:3:2089
-18034:3:2090
-18035:0:2565
-18036:3:2102
-18037:0:2565
-18038:3:2104
-18039:0:2565
-18040:3:2105
-18041:3:2109
-18042:3:2110
-18043:3:2118
-18044:3:2119
-18045:3:2123
-18046:3:2124
-18047:3:2132
-18048:3:2137
-18049:3:2141
-18050:3:2142
-18051:3:2149
-18052:3:2150
-18053:3:2161
-18054:3:2169
-18055:3:2170
-18056:3:2174
-18057:3:2179
-18058:3:2180
-18059:0:2565
-18060:3:2192
-18061:0:2565
-18062:3:2013
-18063:0:2565
-18064:1:315
-18065:0:2565
-18066:3:2014
-18067:0:2565
-18068:3:2015
-18069:3:2019
-18070:3:2020
-18071:3:2028
-18072:3:2029
-18073:3:2033
-18074:3:2034
-18075:3:2042
-18076:3:2047
-18077:3:2051
-18078:3:2052
-18079:3:2059
-18080:3:2060
-18081:3:2071
-18082:3:2079
-18083:3:2080
-18084:3:2084
-18085:3:2089
-18086:3:2090
-18087:0:2565
-18088:3:2102
-18089:0:2565
-18090:3:2104
-18091:0:2565
-18092:3:2105
-18093:3:2109
-18094:3:2110
-18095:3:2118
-18096:3:2119
-18097:3:2123
-18098:3:2124
-18099:3:2132
-18100:3:2137
-18101:3:2141
-18102:3:2142
-18103:3:2149
-18104:3:2150
-18105:3:2161
-18106:3:2169
-18107:3:2170
-18108:3:2174
-18109:3:2179
-18110:3:2180
-18111:0:2565
-18112:3:2192
-18113:0:2565
-18114:2:758
-18115:0:2565
-18116:3:2013
-18117:0:2565
-18118:1:316
-18119:0:2565
-18120:3:2014
-18121:0:2565
-18122:3:2015
-18123:3:2019
-18124:3:2020
-18125:3:2028
-18126:3:2029
-18127:3:2033
-18128:3:2034
-18129:3:2042
-18130:3:2047
-18131:3:2051
-18132:3:2052
-18133:3:2059
-18134:3:2060
-18135:3:2071
-18136:3:2079
-18137:3:2080
-18138:3:2084
-18139:3:2089
-18140:3:2090
-18141:0:2565
-18142:3:2102
-18143:0:2565
-18144:3:2104
-18145:0:2565
-18146:3:2105
-18147:3:2109
-18148:3:2110
-18149:3:2118
-18150:3:2119
-18151:3:2123
-18152:3:2124
-18153:3:2132
-18154:3:2137
-18155:3:2141
-18156:3:2142
-18157:3:2149
-18158:3:2150
-18159:3:2161
-18160:3:2169
-18161:3:2170
-18162:3:2174
-18163:3:2179
-18164:3:2180
-18165:0:2565
-18166:3:2192
-18167:0:2565
-18168:3:2013
-18169:0:2565
-18170:1:315
-18171:0:2565
-18172:3:2014
-18173:0:2565
-18174:3:2015
-18175:3:2019
-18176:3:2020
-18177:3:2028
-18178:3:2029
-18179:3:2033
-18180:3:2034
-18181:3:2042
-18182:3:2047
-18183:3:2051
-18184:3:2052
-18185:3:2059
-18186:3:2060
-18187:3:2071
-18188:3:2079
-18189:3:2080
-18190:3:2084
-18191:3:2089
-18192:3:2090
-18193:0:2565
-18194:3:2102
-18195:0:2565
-18196:3:2104
-18197:0:2565
-18198:3:2105
-18199:3:2109
-18200:3:2110
-18201:3:2118
-18202:3:2119
-18203:3:2123
-18204:3:2124
-18205:3:2132
-18206:3:2137
-18207:3:2141
-18208:3:2142
-18209:3:2149
-18210:3:2150
-18211:3:2161
-18212:3:2169
-18213:3:2170
-18214:3:2174
-18215:3:2179
-18216:3:2180
-18217:0:2565
-18218:3:2192
-18219:0:2565
-18220:2:759
-18221:0:2565
-18222:3:2013
-18223:0:2565
-18224:1:316
-18225:0:2565
-18226:3:2014
-18227:0:2565
-18228:3:2015
-18229:3:2019
-18230:3:2020
-18231:3:2028
-18232:3:2029
-18233:3:2033
-18234:3:2034
-18235:3:2042
-18236:3:2047
-18237:3:2051
-18238:3:2052
-18239:3:2059
-18240:3:2060
-18241:3:2071
-18242:3:2079
-18243:3:2080
-18244:3:2084
-18245:3:2089
-18246:3:2090
-18247:0:2565
-18248:3:2102
-18249:0:2565
-18250:3:2104
-18251:0:2565
-18252:3:2105
-18253:3:2109
-18254:3:2110
-18255:3:2118
-18256:3:2119
-18257:3:2123
-18258:3:2124
-18259:3:2132
-18260:3:2137
-18261:3:2141
-18262:3:2142
-18263:3:2149
-18264:3:2150
-18265:3:2161
-18266:3:2169
-18267:3:2170
-18268:3:2174
-18269:3:2179
-18270:3:2180
-18271:0:2565
-18272:3:2192
-18273:0:2565
-18274:3:2013
-18275:0:2565
-18276:2:760
-18277:0:2565
-18278:2:761
-18279:0:2565
-18280:2:762
-18281:0:2565
-18282:3:2014
-18283:0:2565
-18284:3:2015
-18285:3:2019
-18286:3:2020
-18287:3:2028
-18288:3:2029
-18289:3:2033
-18290:3:2034
-18291:3:2042
-18292:3:2047
-18293:3:2051
-18294:3:2052
-18295:3:2059
-18296:3:2060
-18297:3:2071
-18298:3:2079
-18299:3:2080
-18300:3:2084
-18301:3:2089
-18302:3:2090
-18303:0:2565
-18304:3:2102
-18305:0:2565
-18306:1:315
-18307:0:2565
-18308:2:763
-18309:0:2565
-18310:1:316
-18311:0:2565
-18312:3:2104
-18313:0:2565
-18314:3:2105
-18315:3:2109
-18316:3:2110
-18317:3:2118
-18318:3:2119
-18319:3:2123
-18320:3:2124
-18321:3:2132
-18322:3:2137
-18323:3:2141
-18324:3:2142
-18325:3:2149
-18326:3:2150
-18327:3:2161
-18328:3:2169
-18329:3:2170
-18330:3:2174
-18331:3:2179
-18332:3:2180
-18333:0:2565
-18334:3:2192
-18335:0:2565
-18336:3:2013
-18337:0:2565
-18338:3:2014
-18339:0:2565
-18340:3:2015
-18341:3:2019
-18342:3:2020
-18343:3:2028
-18344:3:2029
-18345:3:2033
-18346:3:2034
-18347:3:2042
-18348:3:2047
-18349:3:2051
-18350:3:2052
-18351:3:2059
-18352:3:2060
-18353:3:2071
-18354:3:2079
-18355:3:2080
-18356:3:2084
-18357:3:2089
-18358:3:2090
-18359:0:2565
-18360:3:2102
-18361:0:2565
-18362:1:315
-18363:0:2565
-18364:3:2104
-18365:0:2565
-18366:3:2105
-18367:3:2109
-18368:3:2110
-18369:3:2118
-18370:3:2119
-18371:3:2123
-18372:3:2124
-18373:3:2132
-18374:3:2137
-18375:3:2141
-18376:3:2142
-18377:3:2149
-18378:3:2150
-18379:3:2161
-18380:3:2169
-18381:3:2170
-18382:3:2174
-18383:3:2179
-18384:3:2180
-18385:0:2565
-18386:3:2192
-18387:0:2565
-18388:3:2013
-18389:0:2565
-18390:3:2014
-18391:0:2565
-18392:3:2015
-18393:3:2019
-18394:3:2020
-18395:3:2028
-18396:3:2029
-18397:3:2033
-18398:3:2034
-18399:3:2042
-18400:3:2047
-18401:3:2051
-18402:3:2052
-18403:3:2059
-18404:3:2060
-18405:3:2071
-18406:3:2079
-18407:3:2080
-18408:3:2084
-18409:3:2089
-18410:3:2090
-18411:0:2565
-18412:2:765
-18413:0:2565
-18414:3:2102
-18415:0:2565
-18416:1:316
-18417:0:2565
-18418:3:2104
-18419:0:2565
-18420:3:2105
-18421:3:2109
-18422:3:2110
-18423:3:2118
-18424:3:2119
-18425:3:2123
-18426:3:2124
-18427:3:2132
-18428:3:2137
-18429:3:2141
-18430:3:2142
-18431:3:2149
-18432:3:2150
-18433:3:2161
-18434:3:2169
-18435:3:2170
-18436:3:2174
-18437:3:2179
-18438:3:2180
-18439:0:2565
-18440:3:2192
-18441:0:2565
-18442:3:2013
-18443:0:2565
-18444:3:2014
-18445:0:2565
-18446:3:2015
-18447:3:2019
-18448:3:2020
-18449:3:2028
-18450:3:2029
-18451:3:2033
-18452:3:2034
-18453:3:2042
-18454:3:2047
-18455:3:2051
-18456:3:2052
-18457:3:2059
-18458:3:2060
-18459:3:2071
-18460:3:2079
-18461:3:2080
-18462:3:2084
-18463:3:2089
-18464:3:2090
-18465:0:2565
-18466:3:2102
-18467:0:2565
-18468:2:766
-18469:2:770
-18470:2:771
-18471:2:779
-18472:2:788
-18473:2:789
-18474:2:793
-18475:2:798
-18476:2:802
-18477:2:803
-18478:2:810
-18479:2:811
-18480:2:822
-18481:2:823
-18482:2:826
-18483:2:827
-18484:2:835
-18485:2:840
-18486:2:841
-18487:0:2565
-18488:3:2104
-18489:0:2565
-18490:3:2105
-18491:3:2109
-18492:3:2110
-18493:3:2118
-18494:3:2119
-18495:3:2123
-18496:3:2124
-18497:3:2132
-18498:3:2137
-18499:3:2141
-18500:3:2142
-18501:3:2149
-18502:3:2150
-18503:3:2161
-18504:3:2169
-18505:3:2170
-18506:3:2174
-18507:3:2179
-18508:3:2180
-18509:0:2565
-18510:3:2192
-18511:0:2565
-18512:3:2013
-18513:0:2565
-18514:3:2014
-18515:0:2565
-18516:3:2015
-18517:3:2019
-18518:3:2020
-18519:3:2028
-18520:3:2029
-18521:3:2033
-18522:3:2034
-18523:3:2042
-18524:3:2047
-18525:3:2051
-18526:3:2052
-18527:3:2059
-18528:3:2060
-18529:3:2071
-18530:3:2079
-18531:3:2080
-18532:3:2084
-18533:3:2089
-18534:3:2090
-18535:0:2565
-18536:2:853
-18537:0:2565
-18538:3:2102
-18539:0:2565
-18540:2:857
-18541:0:2565
-18542:2:465
-18543:0:2565
-18544:3:2104
-18545:0:2565
-18546:3:2105
-18547:3:2109
-18548:3:2110
-18549:3:2118
-18550:3:2119
-18551:3:2123
-18552:3:2124
-18553:3:2132
-18554:3:2137
-18555:3:2141
-18556:3:2142
-18557:3:2149
-18558:3:2150
-18559:3:2161
-18560:3:2169
-18561:3:2170
-18562:3:2174
-18563:3:2179
-18564:3:2180
-18565:0:2565
-18566:3:2192
-18567:0:2565
-18568:3:2013
-18569:0:2565
-18570:3:2014
-18571:0:2565
-18572:3:2015
-18573:3:2019
-18574:3:2020
-18575:3:2028
-18576:3:2029
-18577:3:2033
-18578:3:2034
-18579:3:2042
-18580:3:2047
-18581:3:2051
-18582:3:2052
-18583:3:2059
-18584:3:2060
-18585:3:2071
-18586:3:2079
-18587:3:2080
-18588:3:2084
-18589:3:2089
-18590:3:2090
-18591:0:2565
-18592:2:466
-18593:0:2565
-18594:3:2102
-18595:0:2565
-18596:3:2104
-18597:0:2565
-18598:3:2105
-18599:3:2109
-18600:3:2110
-18601:3:2118
-18602:3:2119
-18603:3:2123
-18604:3:2124
-18605:3:2132
-18606:3:2137
-18607:3:2141
-18608:3:2142
-18609:3:2149
-18610:3:2150
-18611:3:2161
-18612:3:2169
-18613:3:2170
-18614:3:2174
-18615:3:2179
-18616:3:2180
-18617:0:2565
-18618:3:2192
-18619:0:2565
-18620:3:2013
-18621:0:2565
-18622:3:2014
-18623:0:2565
-18624:2:467
-18625:0:2565
-18626:3:2015
-18627:3:2019
-18628:3:2020
-18629:3:2028
-18630:3:2029
-18631:3:2033
-18632:3:2034
-18633:3:2042
-18634:3:2047
-18635:3:2051
-18636:3:2052
-18637:3:2059
-18638:3:2060
-18639:3:2071
-18640:3:2079
-18641:3:2080
-18642:3:2084
-18643:3:2089
-18644:3:2090
-18645:0:2565
-18646:3:2102
-18647:0:2565
-18648:3:2104
-18649:0:2565
-18650:3:2105
-18651:3:2109
-18652:3:2110
-18653:3:2118
-18654:3:2119
-18655:3:2123
-18656:3:2124
-18657:3:2132
-18658:3:2137
-18659:3:2141
-18660:3:2142
-18661:3:2149
-18662:3:2150
-18663:3:2161
-18664:3:2169
-18665:3:2170
-18666:3:2174
-18667:3:2179
-18668:3:2180
-18669:0:2565
-18670:3:2192
-18671:0:2565
-18672:3:2013
-18673:0:2565
-18674:1:317
-18675:0:2565
-18676:2:468
-18677:0:2565
-18678:1:323
-18679:0:2565
-18680:1:324
-18681:0:2565
-18682:3:2014
-18683:0:2565
-18684:3:2015
-18685:3:2019
-18686:3:2020
-18687:3:2028
-18688:3:2029
-18689:3:2033
-18690:3:2034
-18691:3:2042
-18692:3:2047
-18693:3:2051
-18694:3:2052
-18695:3:2059
-18696:3:2060
-18697:3:2071
-18698:3:2079
-18699:3:2080
-18700:3:2084
-18701:3:2089
-18702:3:2090
-18703:0:2565
-18704:3:2102
-18705:0:2565
-18706:3:2104
-18707:0:2565
-18708:3:2105
-18709:3:2109
-18710:3:2110
-18711:3:2118
-18712:3:2119
-18713:3:2123
-18714:3:2124
-18715:3:2132
-18716:3:2137
-18717:3:2141
-18718:3:2142
-18719:3:2149
-18720:3:2150
-18721:3:2161
-18722:3:2169
-18723:3:2170
-18724:3:2174
-18725:3:2179
-18726:3:2180
-18727:0:2565
-18728:3:2192
-18729:0:2565
-18730:3:2013
-18731:0:2565
-18732:2:467
-18733:0:2565
-18734:2:468
-18735:0:2565
-18736:3:2014
-18737:0:2565
-18738:3:2015
-18739:3:2019
-18740:3:2020
-18741:3:2028
-18742:3:2029
-18743:3:2033
-18744:3:2034
-18745:3:2042
-18746:3:2047
-18747:3:2051
-18748:3:2052
-18749:3:2059
-18750:3:2060
-18751:3:2071
-18752:3:2079
-18753:3:2080
-18754:3:2084
-18755:3:2089
-18756:3:2090
-18757:0:2565
-18758:3:2102
-18759:0:2565
-18760:3:2104
-18761:0:2565
-18762:3:2105
-18763:3:2109
-18764:3:2110
-18765:3:2118
-18766:3:2119
-18767:3:2123
-18768:3:2124
-18769:3:2132
-18770:3:2137
-18771:3:2141
-18772:3:2142
-18773:3:2149
-18774:3:2150
-18775:3:2161
-18776:3:2169
-18777:3:2170
-18778:3:2174
-18779:3:2179
-18780:3:2180
-18781:0:2565
-18782:3:2192
-18783:0:2565
-18784:2:467
-18785:0:2565
-18786:1:329
-18787:0:2565
-18788:3:2013
-18789:0:2565
-18790:2:468
-18791:0:2565
-18792:3:2014
-18793:0:2565
-18794:3:2015
-18795:3:2019
-18796:3:2020
-18797:3:2028
-18798:3:2029
-18799:3:2033
-18800:3:2034
-18801:3:2042
-18802:3:2047
-18803:3:2051
-18804:3:2052
-18805:3:2059
-18806:3:2060
-18807:3:2071
-18808:3:2079
-18809:3:2080
-18810:3:2084
-18811:3:2089
-18812:3:2090
-18813:0:2565
-18814:3:2102
-18815:0:2565
-18816:3:2104
-18817:0:2565
-18818:3:2105
-18819:3:2109
-18820:3:2110
-18821:3:2118
-18822:3:2119
-18823:3:2123
-18824:3:2124
-18825:3:2132
-18826:3:2137
-18827:3:2141
-18828:3:2142
-18829:3:2149
-18830:3:2150
-18831:3:2161
-18832:3:2169
-18833:3:2170
-18834:3:2174
-18835:3:2179
-18836:3:2180
-18837:0:2565
-18838:3:2192
-18839:0:2565
-18840:2:467
-18841:0:2565
-18842:3:2013
-18843:0:2565
-18844:3:2014
-18845:0:2565
-18846:3:2015
-18847:3:2019
-18848:3:2020
-18849:3:2028
-18850:3:2029
-18851:3:2033
-18852:3:2034
-18853:3:2042
-18854:3:2047
-18855:3:2051
-18856:3:2052
-18857:3:2059
-18858:3:2060
-18859:3:2071
-18860:3:2079
-18861:3:2080
-18862:3:2084
-18863:3:2089
-18864:3:2090
-18865:0:2565
-18866:3:2102
-18867:0:2565
-18868:3:2104
-18869:0:2565
-18870:3:2105
-18871:3:2109
-18872:3:2110
-18873:3:2118
-18874:3:2119
-18875:3:2123
-18876:3:2124
-18877:3:2132
-18878:3:2137
-18879:3:2141
-18880:3:2142
-18881:3:2149
-18882:3:2150
-18883:3:2161
-18884:3:2169
-18885:3:2170
-18886:3:2174
-18887:3:2179
-18888:3:2180
-18889:0:2565
-18890:1:330
-18891:0:2565
-18892:3:2192
-18893:0:2565
-18894:3:2013
-18895:0:2565
-18896:2:468
-18897:0:2565
-18898:3:2014
-18899:0:2565
-18900:3:2015
-18901:3:2019
-18902:3:2020
-18903:3:2028
-18904:3:2029
-18905:3:2033
-18906:3:2034
-18907:3:2042
-18908:3:2047
-18909:3:2051
-18910:3:2052
-18911:3:2059
-18912:3:2060
-18913:3:2071
-18914:3:2079
-18915:3:2080
-18916:3:2084
-18917:3:2089
-18918:3:2090
-18919:0:2565
-18920:3:2102
-18921:0:2565
-18922:3:2104
-18923:0:2565
-18924:3:2105
-18925:3:2109
-18926:3:2110
-18927:3:2118
-18928:3:2119
-18929:3:2123
-18930:3:2124
-18931:3:2132
-18932:3:2137
-18933:3:2141
-18934:3:2142
-18935:3:2149
-18936:3:2150
-18937:3:2161
-18938:3:2169
-18939:3:2170
-18940:3:2174
-18941:3:2179
-18942:3:2180
-18943:0:2565
-18944:3:2192
-18945:0:2565
-18946:2:467
-18947:0:2565
-18948:3:2013
-18949:0:2565
-18950:3:2014
-18951:0:2565
-18952:3:2015
-18953:3:2019
-18954:3:2020
-18955:3:2028
-18956:3:2029
-18957:3:2033
-18958:3:2034
-18959:3:2042
-18960:3:2047
-18961:3:2051
-18962:3:2052
-18963:3:2059
-18964:3:2060
-18965:3:2071
-18966:3:2079
-18967:3:2080
-18968:3:2084
-18969:3:2089
-18970:3:2090
-18971:0:2565
-18972:3:2102
-18973:0:2565
-18974:3:2104
-18975:0:2565
-18976:3:2105
-18977:3:2109
-18978:3:2110
-18979:3:2118
-18980:3:2119
-18981:3:2123
-18982:3:2124
-18983:3:2132
-18984:3:2137
-18985:3:2141
-18986:3:2142
-18987:3:2149
-18988:3:2150
-18989:3:2161
-18990:3:2169
-18991:3:2170
-18992:3:2174
-18993:3:2179
-18994:3:2180
-18995:0:2565
-18996:1:331
-18997:0:2565
-18998:3:2192
-18999:0:2565
-19000:3:2013
-19001:0:2565
-19002:2:468
-19003:0:2565
-19004:1:332
-19005:0:2565
-19006:1:333
-19007:0:2565
-19008:1:334
-19009:0:2565
-19010:3:2014
-19011:0:2565
-19012:3:2015
-19013:3:2019
-19014:3:2020
-19015:3:2028
-19016:3:2029
-19017:3:2033
-19018:3:2034
-19019:3:2042
-19020:3:2047
-19021:3:2051
-19022:3:2052
-19023:3:2059
-19024:3:2060
-19025:3:2071
-19026:3:2079
-19027:3:2080
-19028:3:2084
-19029:3:2089
-19030:3:2090
-19031:0:2565
-19032:3:2102
-19033:0:2565
-19034:3:2104
-19035:0:2565
-19036:3:2105
-19037:3:2109
-19038:3:2110
-19039:3:2118
-19040:3:2119
-19041:3:2123
-19042:3:2124
-19043:3:2132
-19044:3:2137
-19045:3:2141
-19046:3:2142
-19047:3:2149
-19048:3:2150
-19049:3:2161
-19050:3:2169
-19051:3:2170
-19052:3:2174
-19053:3:2179
-19054:3:2180
-19055:0:2565
-19056:3:2192
-19057:0:2565
-19058:3:2013
-19059:0:2565
-19060:2:467
-19061:0:2565
-19062:2:468
-19063:0:2565
-19064:3:2014
-19065:0:2565
-19066:3:2015
-19067:3:2019
-19068:3:2020
-19069:3:2028
-19070:3:2029
-19071:3:2033
-19072:3:2034
-19073:3:2042
-19074:3:2047
-19075:3:2051
-19076:3:2052
-19077:3:2059
-19078:3:2060
-19079:3:2071
-19080:3:2079
-19081:3:2080
-19082:3:2084
-19083:3:2089
-19084:3:2090
-19085:0:2565
-19086:3:2102
-19087:0:2565
-19088:3:2104
-19089:0:2565
-19090:3:2105
-19091:3:2109
-19092:3:2110
-19093:3:2118
-19094:3:2119
-19095:3:2123
-19096:3:2124
-19097:3:2132
-19098:3:2137
-19099:3:2141
-19100:3:2142
-19101:3:2149
-19102:3:2150
-19103:3:2161
-19104:3:2169
-19105:3:2170
-19106:3:2174
-19107:3:2179
-19108:3:2180
-19109:0:2565
-19110:3:2192
-19111:0:2565
-19112:2:467
-19113:0:2565
-19114:1:336
-19115:0:2565
-19116:3:2013
-19117:0:2565
-19118:2:468
-19119:0:2565
-19120:3:2014
-19121:0:2565
-19122:3:2015
-19123:3:2019
-19124:3:2020
-19125:3:2028
-19126:3:2029
-19127:3:2033
-19128:3:2034
-19129:3:2042
-19130:3:2047
-19131:3:2051
-19132:3:2052
-19133:3:2059
-19134:3:2060
-19135:3:2071
-19136:3:2079
-19137:3:2080
-19138:3:2084
-19139:3:2089
-19140:3:2090
-19141:0:2565
-19142:3:2102
-19143:0:2565
-19144:3:2104
-19145:0:2565
-19146:3:2105
-19147:3:2109
-19148:3:2110
-19149:3:2118
-19150:3:2119
-19151:3:2123
-19152:3:2124
-19153:3:2132
-19154:3:2137
-19155:3:2141
-19156:3:2142
-19157:3:2149
-19158:3:2150
-19159:3:2161
-19160:3:2169
-19161:3:2170
-19162:3:2174
-19163:3:2179
-19164:3:2180
-19165:0:2565
-19166:3:2192
-19167:0:2565
-19168:2:469
-19169:0:2565
-19170:3:2013
-19171:0:2565
-19172:2:475
-19173:0:2565
-19174:2:476
-19175:0:2565
-19176:3:2014
-19177:0:2565
-19178:3:2015
-19179:3:2019
-19180:3:2020
-19181:3:2028
-19182:3:2029
-19183:3:2033
-19184:3:2034
-19185:3:2042
-19186:3:2047
-19187:3:2051
-19188:3:2052
-19189:3:2059
-19190:3:2060
-19191:3:2071
-19192:3:2079
-19193:3:2080
-19194:3:2084
-19195:3:2089
-19196:3:2090
-19197:0:2565
-19198:3:2102
-19199:0:2565
-19200:3:2104
-19201:0:2565
-19202:3:2105
-19203:3:2109
-19204:3:2110
-19205:3:2118
-19206:3:2119
-19207:3:2123
-19208:3:2124
-19209:3:2132
-19210:3:2137
-19211:3:2141
-19212:3:2142
-19213:3:2149
-19214:3:2150
-19215:3:2161
-19216:3:2169
-19217:3:2170
-19218:3:2174
-19219:3:2179
-19220:3:2180
-19221:0:2565
-19222:3:2192
-19223:0:2565
-19224:2:477
-19225:2:481
-19226:2:482
-19227:2:490
-19228:2:499
-19229:2:500
-19230:2:504
-19231:2:509
-19232:2:513
-19233:2:514
-19234:2:521
-19235:2:522
-19236:2:533
-19237:2:534
-19238:2:537
-19239:2:538
-19240:2:546
-19241:2:551
-19242:2:552
-19243:0:2565
-19244:3:2013
-19245:0:2565
-19246:3:2014
-19247:0:2565
-19248:3:2015
-19249:3:2019
-19250:3:2020
-19251:3:2028
-19252:3:2029
-19253:3:2033
-19254:3:2034
-19255:3:2042
-19256:3:2047
-19257:3:2051
-19258:3:2052
-19259:3:2059
-19260:3:2060
-19261:3:2071
-19262:3:2079
-19263:3:2080
-19264:3:2084
-19265:3:2089
-19266:3:2090
-19267:0:2565
-19268:3:2102
-19269:0:2565
-19270:3:2104
-19271:0:2565
-19272:3:2105
-19273:3:2109
-19274:3:2110
-19275:3:2118
-19276:3:2119
-19277:3:2123
-19278:3:2124
-19279:3:2132
-19280:3:2137
-19281:3:2141
-19282:3:2142
-19283:3:2149
-19284:3:2150
-19285:3:2161
-19286:3:2169
-19287:3:2170
-19288:3:2174
-19289:3:2179
-19290:3:2180
-19291:0:2565
-19292:2:564
-19293:0:2565
-19294:3:2192
-19295:0:2565
-19296:3:2013
-19297:0:2565
-19298:3:2014
-19299:0:2565
-19300:3:2015
-19301:3:2019
-19302:3:2020
-19303:3:2028
-19304:3:2029
-19305:3:2033
-19306:3:2034
-19307:3:2042
-19308:3:2047
-19309:3:2051
-19310:3:2052
-19311:3:2059
-19312:3:2060
-19313:3:2071
-19314:3:2079
-19315:3:2080
-19316:3:2084
-19317:3:2089
-19318:3:2090
-19319:0:2565
-19320:3:2102
-19321:0:2565
-19322:3:2104
-19323:0:2565
-19324:2:565
-19325:2:569
-19326:2:570
-19327:2:578
-19328:2:587
-19329:2:588
-19330:2:592
-19331:2:597
-19332:2:601
-19333:2:602
-19334:2:609
-19335:2:610
-19336:2:621
-19337:2:622
-19338:2:625
-19339:2:626
-19340:2:634
-19341:2:639
-19342:2:640
-19343:0:2565
-19344:2:744
-19345:0:2565
-19346:3:2105
-19347:3:2109
-19348:3:2110
-19349:3:2118
-19350:3:2119
-19351:3:2123
-19352:3:2124
-19353:3:2132
-19354:3:2137
-19355:3:2141
-19356:3:2142
-19357:3:2149
-19358:3:2150
-19359:3:2161
-19360:3:2169
-19361:3:2170
-19362:3:2174
-19363:3:2179
-19364:3:2180
-19365:0:2565
-19366:3:2192
-19367:0:2565
-19368:3:2013
-19369:0:2565
-19370:3:2014
-19371:0:2565
-19372:3:2015
-19373:3:2019
-19374:3:2020
-19375:3:2028
-19376:3:2029
-19377:3:2033
-19378:3:2034
-19379:3:2042
-19380:3:2047
-19381:3:2051
-19382:3:2052
-19383:3:2059
-19384:3:2060
-19385:3:2071
-19386:3:2079
-19387:3:2080
-19388:3:2084
-19389:3:2089
-19390:3:2090
-19391:0:2565
-19392:3:2102
-19393:0:2565
-19394:1:337
-19395:0:2565
-19396:1:338
-19397:0:2565
-19398:3:2104
-19399:0:2565
-19400:3:2105
-19401:3:2109
-19402:3:2110
-19403:3:2118
-19404:3:2119
-19405:3:2123
-19406:3:2124
-19407:3:2132
-19408:3:2137
-19409:3:2141
-19410:3:2142
-19411:3:2149
-19412:3:2150
-19413:3:2161
-19414:3:2169
-19415:3:2170
-19416:3:2174
-19417:3:2179
-19418:3:2180
-19419:0:2565
-19420:3:2192
-19421:0:2565
-19422:3:2013
-19423:0:2565
-19424:3:2014
-19425:0:2565
-19426:3:2015
-19427:3:2019
-19428:3:2020
-19429:3:2028
-19430:3:2029
-19431:3:2033
-19432:3:2034
-19433:3:2042
-19434:3:2047
-19435:3:2051
-19436:3:2052
-19437:3:2059
-19438:3:2060
-19439:3:2071
-19440:3:2079
-19441:3:2080
-19442:3:2084
-19443:3:2089
-19444:3:2090
-19445:0:2565
-19446:3:2102
-19447:0:2565
-19448:1:337
-19449:0:2565
-19450:3:2104
-19451:0:2565
-19452:3:2105
-19453:3:2109
-19454:3:2110
-19455:3:2118
-19456:3:2119
-19457:3:2123
-19458:3:2124
-19459:3:2132
-19460:3:2137
-19461:3:2141
-19462:3:2142
-19463:3:2149
-19464:3:2150
-19465:3:2161
-19466:3:2169
-19467:3:2170
-19468:3:2174
-19469:3:2179
-19470:3:2180
-19471:0:2565
-19472:3:2192
-19473:0:2565
-19474:3:2013
-19475:0:2565
-19476:3:2014
-19477:0:2565
-19478:3:2015
-19479:3:2019
-19480:3:2020
-19481:3:2028
-19482:3:2029
-19483:3:2033
-19484:3:2034
-19485:3:2042
-19486:3:2047
-19487:3:2051
-19488:3:2052
-19489:3:2059
-19490:3:2060
-19491:3:2071
-19492:3:2079
-19493:3:2080
-19494:3:2084
-19495:3:2089
-19496:3:2090
-19497:0:2565
-19498:2:745
-19499:0:2565
-19500:3:2102
-19501:0:2565
-19502:2:750
-19503:0:2565
-19504:2:753
-19505:0:2565
-19506:1:338
-19507:0:2565
-19508:3:2104
-19509:0:2565
-19510:3:2105
-19511:3:2109
-19512:3:2110
-19513:3:2118
-19514:3:2119
-19515:3:2123
-19516:3:2124
-19517:3:2132
-19518:3:2137
-19519:3:2141
-19520:3:2142
-19521:3:2149
-19522:3:2150
-19523:3:2161
-19524:3:2169
-19525:3:2170
-19526:3:2174
-19527:3:2179
-19528:3:2180
-19529:0:2565
-19530:3:2192
-19531:0:2565
-19532:3:2013
-19533:0:2565
-19534:3:2014
-19535:0:2565
-19536:3:2015
-19537:3:2019
-19538:3:2020
-19539:3:2028
-19540:3:2029
-19541:3:2033
-19542:3:2034
-19543:3:2042
-19544:3:2047
-19545:3:2051
-19546:3:2052
-19547:3:2059
-19548:3:2060
-19549:3:2071
-19550:3:2079
-19551:3:2080
-19552:3:2084
-19553:3:2089
-19554:3:2090
-19555:0:2565
-19556:3:2102
-19557:0:2565
-19558:1:337
-19559:0:2565
-19560:3:2104
-19561:0:2565
-19562:3:2105
-19563:3:2109
-19564:3:2110
-19565:3:2118
-19566:3:2119
-19567:3:2123
-19568:3:2124
-19569:3:2132
-19570:3:2137
-19571:3:2141
-19572:3:2142
-19573:3:2149
-19574:3:2150
-19575:3:2161
-19576:3:2169
-19577:3:2170
-19578:3:2174
-19579:3:2179
-19580:3:2180
-19581:0:2565
-19582:3:2192
-19583:0:2565
-19584:3:2013
-19585:0:2565
-19586:3:2014
-19587:0:2565
-19588:3:2015
-19589:3:2019
-19590:3:2020
-19591:3:2028
-19592:3:2029
-19593:3:2033
-19594:3:2034
-19595:3:2042
-19596:3:2047
-19597:3:2051
-19598:3:2052
-19599:3:2059
-19600:3:2060
-19601:3:2071
-19602:3:2079
-19603:3:2080
-19604:3:2084
-19605:3:2089
-19606:3:2090
-19607:0:2565
-19608:2:758
-19609:0:2565
-19610:3:2102
-19611:0:2565
-19612:1:338
-19613:0:2565
-19614:3:2104
-19615:0:2565
-19616:3:2105
-19617:3:2109
-19618:3:2110
-19619:3:2118
-19620:3:2119
-19621:3:2123
-19622:3:2124
-19623:3:2132
-19624:3:2137
-19625:3:2141
-19626:3:2142
-19627:3:2149
-19628:3:2150
-19629:3:2161
-19630:3:2169
-19631:3:2170
-19632:3:2174
-19633:3:2179
-19634:3:2180
-19635:0:2565
-19636:3:2192
-19637:0:2565
-19638:3:2013
-19639:0:2565
-19640:3:2014
-19641:0:2565
-19642:3:2015
-19643:3:2019
-19644:3:2020
-19645:3:2028
-19646:3:2029
-19647:3:2033
-19648:3:2034
-19649:3:2042
-19650:3:2047
-19651:3:2051
-19652:3:2052
-19653:3:2059
-19654:3:2060
-19655:3:2071
-19656:3:2079
-19657:3:2080
-19658:3:2084
-19659:3:2089
-19660:3:2090
-19661:0:2565
-19662:3:2102
-19663:0:2565
-19664:1:337
-19665:0:2565
-19666:3:2104
-19667:0:2565
-19668:3:2105
-19669:3:2109
-19670:3:2110
-19671:3:2118
-19672:3:2119
-19673:3:2123
-19674:3:2124
-19675:3:2132
-19676:3:2137
-19677:3:2141
-19678:3:2142
-19679:3:2149
-19680:3:2150
-19681:3:2161
-19682:3:2169
-19683:3:2170
-19684:3:2174
-19685:3:2179
-19686:3:2180
-19687:0:2565
-19688:3:2192
-19689:0:2565
-19690:3:2013
-19691:0:2565
-19692:3:2014
-19693:0:2565
-19694:3:2015
-19695:3:2019
-19696:3:2020
-19697:3:2028
-19698:3:2029
-19699:3:2033
-19700:3:2034
-19701:3:2042
-19702:3:2047
-19703:3:2051
-19704:3:2052
-19705:3:2059
-19706:3:2060
-19707:3:2071
-19708:3:2079
-19709:3:2080
-19710:3:2084
-19711:3:2089
-19712:3:2090
-19713:0:2565
-19714:2:759
-19715:0:2565
-19716:3:2102
-19717:0:2565
-19718:1:338
-19719:0:2565
-19720:3:2104
-19721:0:2565
-19722:3:2105
-19723:3:2109
-19724:3:2110
-19725:3:2118
-19726:3:2119
-19727:3:2123
-19728:3:2124
-19729:3:2132
-19730:3:2137
-19731:3:2141
-19732:3:2142
-19733:3:2149
-19734:3:2150
-19735:3:2161
-19736:3:2169
-19737:3:2170
-19738:3:2174
-19739:3:2179
-19740:3:2180
-19741:0:2565
-19742:3:2192
-19743:0:2565
-19744:3:2013
-19745:0:2565
-19746:3:2014
-19747:0:2565
-19748:3:2015
-19749:3:2019
-19750:3:2020
-19751:3:2028
-19752:3:2029
-19753:3:2033
-19754:3:2034
-19755:3:2042
-19756:3:2047
-19757:3:2051
-19758:3:2052
-19759:3:2059
-19760:3:2060
-19761:3:2071
-19762:3:2079
-19763:3:2080
-19764:3:2084
-19765:3:2089
-19766:3:2090
-19767:0:2565
-19768:3:2102
-19769:0:2565
-19770:2:760
-19771:0:2565
-19772:2:761
-19773:0:2565
-19774:2:762
-19775:0:2565
-19776:3:2104
-19777:0:2565
-19778:3:2105
-19779:3:2109
-19780:3:2110
-19781:3:2118
-19782:3:2119
-19783:3:2123
-19784:3:2124
-19785:3:2132
-19786:3:2137
-19787:3:2141
-19788:3:2142
-19789:3:2149
-19790:3:2150
-19791:3:2161
-19792:3:2169
-19793:3:2170
-19794:3:2174
-19795:3:2179
-19796:3:2180
-19797:0:2565
-19798:3:2192
-19799:0:2565
-19800:1:337
-19801:0:2565
-19802:3:2013
-19803:0:2565
-19804:2:763
-19805:0:2565
-19806:1:338
-19807:0:2565
-19808:3:2014
-19809:0:2565
-19810:3:2015
-19811:3:2019
-19812:3:2020
-19813:3:2028
-19814:3:2029
-19815:3:2033
-19816:3:2034
-19817:3:2042
-19818:3:2047
-19819:3:2051
-19820:3:2052
-19821:3:2059
-19822:3:2060
-19823:3:2071
-19824:3:2079
-19825:3:2080
-19826:3:2084
-19827:3:2089
-19828:3:2090
-19829:0:2565
-19830:3:2102
-19831:0:2565
-19832:3:2104
-19833:0:2565
-19834:3:2105
-19835:3:2109
-19836:3:2110
-19837:3:2118
-19838:3:2119
-19839:3:2123
-19840:3:2124
-19841:3:2132
-19842:3:2137
-19843:3:2141
-19844:3:2142
-19845:3:2149
-19846:3:2150
-19847:3:2161
-19848:3:2169
-19849:3:2170
-19850:3:2174
-19851:3:2179
-19852:3:2180
-19853:0:2565
-19854:3:2192
-19855:0:2565
-19856:3:2013
-19857:0:2565
-19858:1:337
-19859:0:2565
-19860:3:2014
-19861:0:2565
-19862:3:2015
-19863:3:2019
-19864:3:2020
-19865:3:2028
-19866:3:2029
-19867:3:2033
-19868:3:2034
-19869:3:2042
-19870:3:2047
-19871:3:2051
-19872:3:2052
-19873:3:2059
-19874:3:2060
-19875:3:2071
-19876:3:2079
-19877:3:2080
-19878:3:2084
-19879:3:2089
-19880:3:2090
-19881:0:2565
-19882:3:2102
-19883:0:2565
-19884:3:2104
-19885:0:2565
-19886:3:2105
-19887:3:2109
-19888:3:2110
-19889:3:2118
-19890:3:2119
-19891:3:2123
-19892:3:2124
-19893:3:2132
-19894:3:2137
-19895:3:2141
-19896:3:2142
-19897:3:2149
-19898:3:2150
-19899:3:2161
-19900:3:2169
-19901:3:2170
-19902:3:2174
-19903:3:2179
-19904:3:2180
-19905:0:2565
-19906:3:2192
-19907:0:2565
-19908:2:765
-19909:0:2565
-19910:3:2013
-19911:0:2565
-19912:1:338
-19913:0:2565
-19914:3:2014
-19915:0:2565
-19916:3:2015
-19917:3:2019
-19918:3:2020
-19919:3:2028
-19920:3:2029
-19921:3:2033
-19922:3:2034
-19923:3:2042
-19924:3:2047
-19925:3:2051
-19926:3:2052
-19927:3:2059
-19928:3:2060
-19929:3:2071
-19930:3:2079
-19931:3:2080
-19932:3:2084
-19933:3:2089
-19934:3:2090
-19935:0:2565
-19936:3:2102
-19937:0:2565
-19938:3:2104
-19939:0:2565
-19940:3:2105
-19941:3:2109
-19942:3:2110
-19943:3:2118
-19944:3:2119
-19945:3:2123
-19946:3:2124
-19947:3:2132
-19948:3:2137
-19949:3:2141
-19950:3:2142
-19951:3:2149
-19952:3:2150
-19953:3:2161
-19954:3:2169
-19955:3:2170
-19956:3:2174
-19957:3:2179
-19958:3:2180
-19959:0:2565
-19960:3:2192
-19961:0:2565
-19962:3:2013
-19963:0:2565
-19964:2:766
-19965:2:770
-19966:2:771
-19967:2:779
-19968:2:788
-19969:2:789
-19970:2:793
-19971:2:798
-19972:2:802
-19973:2:803
-19974:2:810
-19975:2:811
-19976:2:822
-19977:2:823
-19978:2:826
-19979:2:827
-19980:2:835
-19981:2:840
-19982:2:841
-19983:0:2565
-19984:3:2014
-19985:0:2565
-19986:3:2015
-19987:3:2019
-19988:3:2020
-19989:3:2028
-19990:3:2029
-19991:3:2033
-19992:3:2034
-19993:3:2042
-19994:3:2047
-19995:3:2051
-19996:3:2052
-19997:3:2059
-19998:3:2060
-19999:3:2071
-20000:3:2079
-20001:3:2080
-20002:3:2084
-20003:3:2089
-20004:3:2090
-20005:0:2565
-20006:3:2102
-20007:0:2565
-20008:3:2104
-20009:0:2565
-20010:3:2105
-20011:3:2109
-20012:3:2110
-20013:3:2118
-20014:3:2119
-20015:3:2123
-20016:3:2124
-20017:3:2132
-20018:3:2137
-20019:3:2141
-20020:3:2142
-20021:3:2149
-20022:3:2150
-20023:3:2161
-20024:3:2169
-20025:3:2170
-20026:3:2174
-20027:3:2179
-20028:3:2180
-20029:0:2565
-20030:3:2192
-20031:0:2565
-20032:2:853
-20033:0:2565
-20034:3:2013
-20035:0:2565
-20036:2:857
-20037:0:2565
-20038:2:465
-20039:0:2565
-20040:3:2014
-20041:0:2565
-20042:3:2015
-20043:3:2019
-20044:3:2020
-20045:3:2028
-20046:3:2029
-20047:3:2033
-20048:3:2034
-20049:3:2042
-20050:3:2047
-20051:3:2051
-20052:3:2052
-20053:3:2059
-20054:3:2060
-20055:3:2071
-20056:3:2079
-20057:3:2080
-20058:3:2084
-20059:3:2089
-20060:3:2090
-20061:0:2565
-20062:3:2102
-20063:0:2565
-20064:3:2104
-20065:0:2565
-20066:3:2105
-20067:3:2109
-20068:3:2110
-20069:3:2118
-20070:3:2119
-20071:3:2123
-20072:3:2124
-20073:3:2132
-20074:3:2137
-20075:3:2141
-20076:3:2142
-20077:3:2149
-20078:3:2150
-20079:3:2161
-20080:3:2169
-20081:3:2170
-20082:3:2174
-20083:3:2179
-20084:3:2180
-20085:0:2565
-20086:3:2192
-20087:0:2565
-20088:2:466
-20089:0:2565
-20090:3:2013
-20091:0:2565
-20092:3:2014
-20093:0:2565
-20094:3:2015
-20095:3:2019
-20096:3:2020
-20097:3:2028
-20098:3:2029
-20099:3:2033
-20100:3:2034
-20101:3:2042
-20102:3:2047
-20103:3:2051
-20104:3:2052
-20105:3:2059
-20106:3:2060
-20107:3:2071
-20108:3:2079
-20109:3:2080
-20110:3:2084
-20111:3:2089
-20112:3:2090
-20113:0:2565
-20114:3:2102
-20115:0:2565
-20116:3:2104
-20117:0:2565
-20118:3:2105
-20119:3:2109
-20120:3:2110
-20121:3:2118
-20122:3:2119
-20123:3:2123
-20124:3:2124
-20125:3:2132
-20126:3:2137
-20127:3:2141
-20128:3:2142
-20129:3:2149
-20130:3:2150
-20131:3:2161
-20132:3:2169
-20133:3:2170
-20134:3:2174
-20135:3:2179
-20136:3:2180
-20137:0:2565
-20138:2:467
-20139:0:2565
-20140:3:2192
-20141:0:2565
-20142:3:2013
-20143:0:2565
-20144:3:2014
-20145:0:2565
-20146:3:2015
-20147:3:2019
-20148:3:2020
-20149:3:2028
-20150:3:2029
-20151:3:2033
-20152:3:2034
-20153:3:2042
-20154:3:2047
-20155:3:2051
-20156:3:2052
-20157:3:2059
-20158:3:2060
-20159:3:2071
-20160:3:2079
-20161:3:2080
-20162:3:2084
-20163:3:2089
-20164:3:2090
-20165:0:2565
-20166:3:2102
-20167:0:2565
-20168:3:2104
-20169:0:2565
-20170:1:339
-20171:0:2565
-20172:2:468
-20173:0:2565
-20174:3:2105
-20175:3:2109
-20176:3:2110
-20177:3:2118
-20178:3:2119
-20179:3:2123
-20180:3:2124
-20181:3:2132
-20182:3:2137
-20183:3:2141
-20184:3:2142
-20185:3:2149
-20186:3:2150
-20187:3:2161
-20188:3:2169
-20189:3:2170
-20190:3:2174
-20191:3:2179
-20192:3:2180
-20193:0:2565
-20194:3:2192
-20195:0:2565
-20196:3:2013
-20197:0:2565
-20198:3:2014
-20199:0:2565
-20200:3:2015
-20201:3:2019
-20202:3:2020
-20203:3:2028
-20204:3:2029
-20205:3:2033
-20206:3:2034
-20207:3:2042
-20208:3:2047
-20209:3:2051
-20210:3:2052
-20211:3:2059
-20212:3:2060
-20213:3:2071
-20214:3:2079
-20215:3:2080
-20216:3:2084
-20217:3:2089
-20218:3:2090
-20219:0:2565
-20220:3:2102
-20221:0:2565
-20222:3:2104
-20223:0:2565
-20224:2:467
-20225:0:2565
-20226:2:468
-20227:0:2565
-20228:3:2105
-20229:3:2109
-20230:3:2110
-20231:3:2118
-20232:3:2119
-20233:3:2123
-20234:3:2124
-20235:3:2132
-20236:3:2137
-20237:3:2141
-20238:3:2142
-20239:3:2149
-20240:3:2150
-20241:3:2161
-20242:3:2169
-20243:3:2170
-20244:3:2174
-20245:3:2179
-20246:3:2180
-20247:0:2565
-20248:3:2192
-20249:0:2565
-20250:3:2013
-20251:0:2565
-20252:3:2014
-20253:0:2565
-20254:3:2015
-20255:3:2019
-20256:3:2020
-20257:3:2028
-20258:3:2029
-20259:3:2033
-20260:3:2034
-20261:3:2042
-20262:3:2047
-20263:3:2051
-20264:3:2052
-20265:3:2059
-20266:3:2060
-20267:3:2071
-20268:3:2079
-20269:3:2080
-20270:3:2084
-20271:3:2089
-20272:3:2090
-20273:0:2565
-20274:3:2102
-20275:0:2565
-20276:2:467
-20277:0:2565
-20278:1:345
-20279:0:2565
-20280:2:468
-20281:0:2565
-20282:3:2104
-20283:0:2565
-20284:3:2105
-20285:3:2109
-20286:3:2110
-20287:3:2118
-20288:3:2119
-20289:3:2123
-20290:3:2124
-20291:3:2132
-20292:3:2137
-20293:3:2141
-20294:3:2142
-20295:3:2149
-20296:3:2150
-20297:3:2161
-20298:3:2169
-20299:3:2170
-20300:3:2174
-20301:3:2179
-20302:3:2180
-20303:0:2565
-20304:3:2192
-20305:0:2565
-20306:3:2013
-20307:0:2565
-20308:3:2014
-20309:0:2565
-20310:3:2015
-20311:3:2019
-20312:3:2020
-20313:3:2028
-20314:3:2029
-20315:3:2033
-20316:3:2034
-20317:3:2042
-20318:3:2047
-20319:3:2051
-20320:3:2052
-20321:3:2059
-20322:3:2060
-20323:3:2071
-20324:3:2079
-20325:3:2080
-20326:3:2084
-20327:3:2089
-20328:3:2090
-20329:0:2565
-20330:3:2102
-20331:0:2565
-20332:2:467
-20333:0:2565
-20334:2:468
-20335:0:2565
-20336:3:2104
-20337:0:2565
-20338:3:2105
-20339:3:2109
-20340:3:2110
-20341:3:2118
-20342:3:2119
-20343:3:2123
-20344:3:2124
-20345:3:2132
-20346:3:2137
-20347:3:2141
-20348:3:2142
-20349:3:2149
-20350:3:2150
-20351:3:2161
-20352:3:2169
-20353:3:2170
-20354:3:2174
-20355:3:2179
-20356:3:2180
-20357:0:2565
-20358:3:2192
-20359:0:2565
-20360:3:2013
-20361:0:2565
-20362:3:2014
-20363:0:2565
-20364:3:2015
-20365:3:2019
-20366:3:2020
-20367:3:2028
-20368:3:2029
-20369:3:2033
-20370:3:2034
-20371:3:2042
-20372:3:2047
-20373:3:2051
-20374:3:2052
-20375:3:2059
-20376:3:2060
-20377:3:2071
-20378:3:2079
-20379:3:2080
-20380:3:2084
-20381:3:2089
-20382:3:2090
-20383:0:2565
-20384:2:467
-20385:0:2565
-20386:1:346
-20387:1:350
-20388:1:351
-20389:1:359
-20390:1:360
-20391:1:361
-20392:1:373
-20393:1:378
-20394:1:382
-20395:1:383
-20396:1:390
-20397:1:391
-20398:1:402
-20399:1:403
-20400:1:404
-20401:1:415
-20402:1:420
-20403:1:421
-20404:0:2565
-20405:3:2102
-20406:0:2565
-20407:3:2104
-20408:0:2565
-20409:1:433
-20410:0:2565
-20411:3:2105
-20412:3:2109
-20413:3:2110
-20414:3:2118
-20415:3:2119
-20416:3:2123
-20417:3:2124
-20418:3:2132
-20419:3:2137
-20420:3:2141
-20421:3:2142
-20422:3:2149
-20423:3:2150
-20424:3:2161
-20425:3:2169
-20426:3:2170
-20427:3:2174
-20428:3:2179
-20429:3:2180
-20430:0:2565
-20431:1:434
-20432:0:2565
-20433:3:2192
-20434:0:2565
-20435:3:2013
-20436:0:2565
-20437:2:468
-20438:0:2565
-20439:1:435
-20440:0:2565
-20441:3:2014
-20442:0:2565
-20443:3:2015
-20444:3:2019
-20445:3:2020
-20446:3:2028
-20447:3:2029
-20448:3:2033
-20449:3:2034
-20450:3:2042
-20451:3:2047
-20452:3:2051
-20453:3:2052
-20454:3:2059
-20455:3:2060
-20456:3:2071
-20457:3:2079
-20458:3:2080
-20459:3:2084
-20460:3:2089
-20461:3:2090
-20462:0:2565
-20463:3:2102
-20464:0:2565
-20465:3:2104
-20466:0:2565
-20467:3:2105
-20468:3:2109
-20469:3:2110
-20470:3:2118
-20471:3:2119
-20472:3:2123
-20473:3:2124
-20474:3:2132
-20475:3:2137
-20476:3:2141
-20477:3:2142
-20478:3:2149
-20479:3:2150
-20480:3:2161
-20481:3:2169
-20482:3:2170
-20483:3:2174
-20484:3:2179
-20485:3:2180
-20486:0:2565
-20487:3:2192
-20488:0:2565
-20489:3:2013
-20490:0:2565
-20491:1:434
-20492:0:2565
-20493:3:2014
-20494:0:2565
-20495:3:2015
-20496:3:2019
-20497:3:2020
-20498:3:2028
-20499:3:2029
-20500:3:2033
-20501:3:2034
-20502:3:2042
-20503:3:2047
-20504:3:2051
-20505:3:2052
-20506:3:2059
-20507:3:2060
-20508:3:2071
-20509:3:2079
-20510:3:2080
-20511:3:2084
-20512:3:2089
-20513:3:2090
-20514:0:2565
-20515:3:2102
-20516:0:2565
-20517:3:2104
-20518:0:2565
-20519:3:2105
-20520:3:2109
-20521:3:2110
-20522:3:2118
-20523:3:2119
-20524:3:2123
-20525:3:2124
-20526:3:2132
-20527:3:2137
-20528:3:2141
-20529:3:2142
-20530:3:2149
-20531:3:2150
-20532:3:2161
-20533:3:2169
-20534:3:2170
-20535:3:2174
-20536:3:2179
-20537:3:2180
-20538:0:2565
-20539:3:2192
-20540:0:2565
-20541:2:469
-20542:0:2565
-20543:3:2013
-20544:0:2565
-20545:2:475
-20546:0:2565
-20547:2:476
-20548:0:2565
-20549:1:435
-20550:0:2565
-20551:3:2014
-20552:0:2565
-20553:3:2015
-20554:3:2019
-20555:3:2020
-20556:3:2028
-20557:3:2029
-20558:3:2033
-20559:3:2034
-20560:3:2042
-20561:3:2047
-20562:3:2051
-20563:3:2052
-20564:3:2059
-20565:3:2060
-20566:3:2071
-20567:3:2079
-20568:3:2080
-20569:3:2084
-20570:3:2089
-20571:3:2090
-20572:0:2565
-20573:3:2102
-20574:0:2565
-20575:3:2104
-20576:0:2565
-20577:3:2105
-20578:3:2109
-20579:3:2110
-20580:3:2118
-20581:3:2119
-20582:3:2123
-20583:3:2124
-20584:3:2132
-20585:3:2137
-20586:3:2141
-20587:3:2142
-20588:3:2149
-20589:3:2150
-20590:3:2161
-20591:3:2169
-20592:3:2170
-20593:3:2174
-20594:3:2179
-20595:3:2180
-20596:0:2565
-20597:3:2192
-20598:0:2565
-20599:3:2013
-20600:0:2565
-20601:1:434
-20602:0:2565
-20603:3:2014
-20604:0:2565
-20605:3:2015
-20606:3:2019
-20607:3:2020
-20608:3:2028
-20609:3:2029
-20610:3:2033
-20611:3:2034
-20612:3:2042
-20613:3:2047
-20614:3:2051
-20615:3:2052
-20616:3:2059
-20617:3:2060
-20618:3:2071
-20619:3:2079
-20620:3:2080
-20621:3:2084
-20622:3:2089
-20623:3:2090
-20624:0:2565
-20625:3:2102
-20626:0:2565
-20627:3:2104
-20628:0:2565
-20629:3:2105
-20630:3:2109
-20631:3:2110
-20632:3:2118
-20633:3:2119
-20634:3:2123
-20635:3:2124
-20636:3:2132
-20637:3:2137
-20638:3:2141
-20639:3:2142
-20640:3:2149
-20641:3:2150
-20642:3:2161
-20643:3:2169
-20644:3:2170
-20645:3:2174
-20646:3:2179
-20647:3:2180
-20648:0:2565
-20649:3:2192
-20650:0:2565
-20651:2:477
-20652:2:481
-20653:2:482
-20654:2:490
-20655:2:491
-20656:2:495
-20657:2:496
-20658:2:504
-20659:2:509
-20660:2:513
-20661:2:514
-20662:2:521
-20663:2:522
-20664:2:533
-20665:2:534
-20666:2:535
-20667:2:546
-20668:2:551
-20669:2:552
-20670:0:2565
-20671:3:2013
-20672:0:2565
-20673:1:435
-20674:0:2565
-20675:3:2014
-20676:0:2565
-20677:3:2015
-20678:3:2019
-20679:3:2020
-20680:3:2028
-20681:3:2029
-20682:3:2033
-20683:3:2034
-20684:3:2042
-20685:3:2047
-20686:3:2051
-20687:3:2052
-20688:3:2059
-20689:3:2060
-20690:3:2071
-20691:3:2079
-20692:3:2080
-20693:3:2084
-20694:3:2089
-20695:3:2090
-20696:0:2565
-20697:3:2102
-20698:0:2565
-20699:3:2104
-20700:0:2565
-20701:3:2105
-20702:3:2109
-20703:3:2110
-20704:3:2118
-20705:3:2119
-20706:3:2123
-20707:3:2124
-20708:3:2132
-20709:3:2137
-20710:3:2141
-20711:3:2142
-20712:3:2149
-20713:3:2150
-20714:3:2161
-20715:3:2169
-20716:3:2170
-20717:3:2174
-20718:3:2179
-20719:3:2180
-20720:0:2565
-20721:3:2192
-20722:0:2565
-20723:3:2013
-20724:0:2565
-20725:1:434
-20726:0:2565
-20727:3:2014
-20728:0:2565
-20729:3:2015
-20730:3:2019
-20731:3:2020
-20732:3:2028
-20733:3:2029
-20734:3:2033
-20735:3:2034
-20736:3:2042
-20737:3:2047
-20738:3:2051
-20739:3:2052
-20740:3:2059
-20741:3:2060
-20742:3:2071
-20743:3:2079
-20744:3:2080
-20745:3:2084
-20746:3:2089
-20747:3:2090
-20748:0:2565
-20749:3:2102
-20750:0:2565
-20751:3:2104
-20752:0:2565
-20753:3:2105
-20754:3:2109
-20755:3:2110
-20756:3:2118
-20757:3:2119
-20758:3:2123
-20759:3:2124
-20760:3:2132
-20761:3:2137
-20762:3:2141
-20763:3:2142
-20764:3:2149
-20765:3:2150
-20766:3:2161
-20767:3:2169
-20768:3:2170
-20769:3:2174
-20770:3:2179
-20771:3:2180
-20772:0:2565
-20773:3:2192
-20774:0:2565
-20775:2:564
-20776:0:2565
-20777:3:2013
-20778:0:2565
-20779:1:435
-20780:0:2565
-20781:3:2014
-20782:0:2565
-20783:3:2015
-20784:3:2019
-20785:3:2020
-20786:3:2028
-20787:3:2029
-20788:3:2033
-20789:3:2034
-20790:3:2042
-20791:3:2047
-20792:3:2051
-20793:3:2052
-20794:3:2059
-20795:3:2060
-20796:3:2071
-20797:3:2079
-20798:3:2080
-20799:3:2084
-20800:3:2089
-20801:3:2090
-20802:0:2565
-20803:3:2102
-20804:0:2565
-20805:3:2104
-20806:0:2565
-20807:3:2105
-20808:3:2109
-20809:3:2110
-20810:3:2118
-20811:3:2119
-20812:3:2123
-20813:3:2124
-20814:3:2132
-20815:3:2137
-20816:3:2141
-20817:3:2142
-20818:3:2149
-20819:3:2150
-20820:3:2161
-20821:3:2169
-20822:3:2170
-20823:3:2174
-20824:3:2179
-20825:3:2180
-20826:0:2565
-20827:3:2192
-20828:0:2565
-20829:3:2013
-20830:0:2565
-20831:2:565
-20832:2:569
-20833:2:570
-20834:2:578
-20835:2:579
-20836:2:583
-20837:2:584
-20838:2:592
-20839:2:597
-20840:2:601
-20841:2:602
-20842:2:609
-20843:2:610
-20844:2:621
-20845:2:622
-20846:2:623
-20847:2:634
-20848:2:639
-20849:2:640
-20850:0:2565
-20851:3:2014
-20852:0:2565
-20853:3:2015
-20854:3:2019
-20855:3:2020
-20856:3:2028
-20857:3:2029
-20858:3:2033
-20859:3:2034
-20860:3:2042
-20861:3:2047
-20862:3:2051
-20863:3:2052
-20864:3:2059
-20865:3:2060
-20866:3:2071
-20867:3:2079
-20868:3:2080
-20869:3:2084
-20870:3:2089
-20871:3:2090
-20872:0:2565
-20873:3:2102
-20874:0:2565
-20875:1:434
-20876:0:2565
-20877:2:744
-20878:0:2565
-20879:1:435
-20880:0:2565
-20881:3:2104
-20882:0:2565
-20883:3:2105
-20884:3:2109
-20885:3:2110
-20886:3:2118
-20887:3:2119
-20888:3:2123
-20889:3:2124
-20890:3:2132
-20891:3:2137
-20892:3:2141
-20893:3:2142
-20894:3:2149
-20895:3:2150
-20896:3:2161
-20897:3:2169
-20898:3:2170
-20899:3:2174
-20900:3:2179
-20901:3:2180
-20902:0:2565
-20903:3:2192
-20904:0:2565
-20905:3:2013
-20906:0:2565
-20907:3:2014
-20908:0:2565
-20909:3:2015
-20910:3:2019
-20911:3:2020
-20912:3:2028
-20913:3:2029
-20914:3:2033
-20915:3:2034
-20916:3:2042
-20917:3:2047
-20918:3:2051
-20919:3:2052
-20920:3:2059
-20921:3:2060
-20922:3:2071
-20923:3:2079
-20924:3:2080
-20925:3:2084
-20926:3:2089
-20927:3:2090
-20928:0:2565
-20929:3:2102
-20930:0:2565
-20931:1:434
-20932:0:2565
-20933:3:2104
-20934:0:2565
-20935:3:2105
-20936:3:2109
-20937:3:2110
-20938:3:2118
-20939:3:2119
-20940:3:2123
-20941:3:2124
-20942:3:2132
-20943:3:2137
-20944:3:2141
-20945:3:2142
-20946:3:2149
-20947:3:2150
-20948:3:2161
-20949:3:2169
-20950:3:2170
-20951:3:2174
-20952:3:2179
-20953:3:2180
-20954:0:2565
-20955:3:2192
-20956:0:2565
-20957:3:2013
-20958:0:2565
-20959:3:2014
-20960:0:2565
-20961:3:2015
-20962:3:2019
-20963:3:2020
-20964:3:2028
-20965:3:2029
-20966:3:2033
-20967:3:2034
-20968:3:2042
-20969:3:2047
-20970:3:2051
-20971:3:2052
-20972:3:2059
-20973:3:2060
-20974:3:2071
-20975:3:2079
-20976:3:2080
-20977:3:2084
-20978:3:2089
-20979:3:2090
-20980:0:2565
-20981:2:745
-20982:0:2565
-20983:3:2102
-20984:0:2565
-20985:2:750
-20986:0:2565
-20987:2:753
-20988:0:2565
-20989:1:435
-20990:0:2565
-20991:3:2104
-20992:0:2565
-20993:3:2105
-20994:3:2109
-20995:3:2110
-20996:3:2118
-20997:3:2119
-20998:3:2123
-20999:3:2124
-21000:3:2132
-21001:3:2137
-21002:3:2141
-21003:3:2142
-21004:3:2149
-21005:3:2150
-21006:3:2161
-21007:3:2169
-21008:3:2170
-21009:3:2174
-21010:3:2179
-21011:3:2180
-21012:0:2565
-21013:3:2192
-21014:0:2565
-21015:3:2013
-21016:0:2565
-21017:3:2014
-21018:0:2565
-21019:3:2015
-21020:3:2019
-21021:3:2020
-21022:3:2028
-21023:3:2029
-21024:3:2033
-21025:3:2034
-21026:3:2042
-21027:3:2047
-21028:3:2051
-21029:3:2052
-21030:3:2059
-21031:3:2060
-21032:3:2071
-21033:3:2079
-21034:3:2080
-21035:3:2084
-21036:3:2089
-21037:3:2090
-21038:0:2565
-21039:3:2102
-21040:0:2565
-21041:1:434
-21042:0:2565
-21043:3:2104
-21044:0:2565
-21045:3:2105
-21046:3:2109
-21047:3:2110
-21048:3:2118
-21049:3:2119
-21050:3:2123
-21051:3:2124
-21052:3:2132
-21053:3:2137
-21054:3:2141
-21055:3:2142
-21056:3:2149
-21057:3:2150
-21058:3:2161
-21059:3:2169
-21060:3:2170
-21061:3:2174
-21062:3:2179
-21063:3:2180
-21064:0:2565
-21065:3:2192
-21066:0:2565
-21067:3:2013
-21068:0:2565
-21069:3:2014
-21070:0:2565
-21071:3:2015
-21072:3:2019
-21073:3:2020
-21074:3:2028
-21075:3:2029
-21076:3:2033
-21077:3:2034
-21078:3:2042
-21079:3:2047
-21080:3:2051
-21081:3:2052
-21082:3:2059
-21083:3:2060
-21084:3:2071
-21085:3:2079
-21086:3:2080
-21087:3:2084
-21088:3:2089
-21089:3:2090
-21090:0:2565
-21091:2:758
-21092:0:2565
-21093:3:2102
-21094:0:2565
-21095:1:435
-21096:0:2565
-21097:3:2104
-21098:0:2565
-21099:3:2105
-21100:3:2109
-21101:3:2110
-21102:3:2118
-21103:3:2119
-21104:3:2123
-21105:3:2124
-21106:3:2132
-21107:3:2137
-21108:3:2141
-21109:3:2142
-21110:3:2149
-21111:3:2150
-21112:3:2161
-21113:3:2169
-21114:3:2170
-21115:3:2174
-21116:3:2179
-21117:3:2180
-21118:0:2565
-21119:3:2192
-21120:0:2565
-21121:3:2013
-21122:0:2565
-21123:3:2014
-21124:0:2565
-21125:3:2015
-21126:3:2019
-21127:3:2020
-21128:3:2028
-21129:3:2029
-21130:3:2033
-21131:3:2034
-21132:3:2042
-21133:3:2047
-21134:3:2051
-21135:3:2052
-21136:3:2059
-21137:3:2060
-21138:3:2071
-21139:3:2079
-21140:3:2080
-21141:3:2084
-21142:3:2089
-21143:3:2090
-21144:0:2565
-21145:3:2102
-21146:0:2565
-21147:1:434
-21148:0:2565
-21149:3:2104
-21150:0:2565
-21151:3:2105
-21152:3:2109
-21153:3:2110
-21154:3:2118
-21155:3:2119
-21156:3:2123
-21157:3:2124
-21158:3:2132
-21159:3:2137
-21160:3:2141
-21161:3:2142
-21162:3:2149
-21163:3:2150
-21164:3:2161
-21165:3:2169
-21166:3:2170
-21167:3:2174
-21168:3:2179
-21169:3:2180
-21170:0:2565
-21171:3:2192
-21172:0:2565
-21173:3:2013
-21174:0:2565
-21175:3:2014
-21176:0:2565
-21177:3:2015
-21178:3:2019
-21179:3:2020
-21180:3:2028
-21181:3:2029
-21182:3:2033
-21183:3:2034
-21184:3:2042
-21185:3:2047
-21186:3:2051
-21187:3:2052
-21188:3:2059
-21189:3:2060
-21190:3:2071
-21191:3:2079
-21192:3:2080
-21193:3:2084
-21194:3:2089
-21195:3:2090
-21196:0:2565
-21197:2:759
-21198:0:2565
-21199:3:2102
-21200:0:2565
-21201:1:435
-21202:0:2565
-21203:3:2104
-21204:0:2565
-21205:3:2105
-21206:3:2109
-21207:3:2110
-21208:3:2118
-21209:3:2119
-21210:3:2123
-21211:3:2124
-21212:3:2132
-21213:3:2137
-21214:3:2141
-21215:3:2142
-21216:3:2149
-21217:3:2150
-21218:3:2161
-21219:3:2169
-21220:3:2170
-21221:3:2174
-21222:3:2179
-21223:3:2180
-21224:0:2565
-21225:3:2192
-21226:0:2565
-21227:3:2013
-21228:0:2565
-21229:3:2014
-21230:0:2565
-21231:3:2015
-21232:3:2019
-21233:3:2020
-21234:3:2028
-21235:3:2029
-21236:3:2033
-21237:3:2034
-21238:3:2042
-21239:3:2047
-21240:3:2051
-21241:3:2052
-21242:3:2059
-21243:3:2060
-21244:3:2071
-21245:3:2079
-21246:3:2080
-21247:3:2084
-21248:3:2089
-21249:3:2090
-21250:0:2565
-21251:3:2102
-21252:0:2565
-21253:2:760
-21254:0:2565
-21255:2:761
-21256:0:2565
-21257:2:762
-21258:0:2565
-21259:3:2104
-21260:0:2565
-21261:3:2105
-21262:3:2109
-21263:3:2110
-21264:3:2118
-21265:3:2119
-21266:3:2123
-21267:3:2124
-21268:3:2132
-21269:3:2137
-21270:3:2141
-21271:3:2142
-21272:3:2149
-21273:3:2150
-21274:3:2161
-21275:3:2169
-21276:3:2170
-21277:3:2174
-21278:3:2179
-21279:3:2180
-21280:0:2565
-21281:3:2192
-21282:0:2565
-21283:1:434
-21284:0:2565
-21285:3:2013
-21286:0:2565
-21287:2:763
-21288:0:2565
-21289:1:435
-21290:0:2565
-21291:3:2014
-21292:0:2565
-21293:3:2015
-21294:3:2019
-21295:3:2020
-21296:3:2028
-21297:3:2029
-21298:3:2033
-21299:3:2034
-21300:3:2042
-21301:3:2047
-21302:3:2051
-21303:3:2052
-21304:3:2059
-21305:3:2060
-21306:3:2071
-21307:3:2079
-21308:3:2080
-21309:3:2084
-21310:3:2089
-21311:3:2090
-21312:0:2565
-21313:3:2102
-21314:0:2565
-21315:3:2104
-21316:0:2565
-21317:3:2105
-21318:3:2109
-21319:3:2110
-21320:3:2118
-21321:3:2119
-21322:3:2123
-21323:3:2124
-21324:3:2132
-21325:3:2137
-21326:3:2141
-21327:3:2142
-21328:3:2149
-21329:3:2150
-21330:3:2161
-21331:3:2169
-21332:3:2170
-21333:3:2174
-21334:3:2179
-21335:3:2180
-21336:0:2565
-21337:3:2192
-21338:0:2565
-21339:3:2013
-21340:0:2565
-21341:1:434
-21342:0:2565
-21343:3:2014
-21344:0:2565
-21345:3:2015
-21346:3:2019
-21347:3:2020
-21348:3:2028
-21349:3:2029
-21350:3:2033
-21351:3:2034
-21352:3:2042
-21353:3:2047
-21354:3:2051
-21355:3:2052
-21356:3:2059
-21357:3:2060
-21358:3:2071
-21359:3:2079
-21360:3:2080
-21361:3:2084
-21362:3:2089
-21363:3:2090
-21364:0:2565
-21365:3:2102
-21366:0:2565
-21367:3:2104
-21368:0:2565
-21369:3:2105
-21370:3:2109
-21371:3:2110
-21372:3:2118
-21373:3:2119
-21374:3:2123
-21375:3:2124
-21376:3:2132
-21377:3:2137
-21378:3:2141
-21379:3:2142
-21380:3:2149
-21381:3:2150
-21382:3:2161
-21383:3:2169
-21384:3:2170
-21385:3:2174
-21386:3:2179
-21387:3:2180
-21388:0:2565
-21389:3:2192
-21390:0:2565
-21391:2:765
-21392:0:2565
-21393:3:2013
-21394:0:2565
-21395:1:435
-21396:0:2565
-21397:3:2014
-21398:0:2565
-21399:3:2015
-21400:3:2019
-21401:3:2020
-21402:3:2028
-21403:3:2029
-21404:3:2033
-21405:3:2034
-21406:3:2042
-21407:3:2047
-21408:3:2051
-21409:3:2052
-21410:3:2059
-21411:3:2060
-21412:3:2071
-21413:3:2079
-21414:3:2080
-21415:3:2084
-21416:3:2089
-21417:3:2090
-21418:0:2565
-21419:3:2102
-21420:0:2565
-21421:3:2104
-21422:0:2565
-21423:3:2105
-21424:3:2109
-21425:3:2110
-21426:3:2118
-21427:3:2119
-21428:3:2123
-21429:3:2124
-21430:3:2132
-21431:3:2137
-21432:3:2141
-21433:3:2142
-21434:3:2149
-21435:3:2150
-21436:3:2161
-21437:3:2169
-21438:3:2170
-21439:3:2174
-21440:3:2179
-21441:3:2180
-21442:0:2565
-21443:3:2192
-21444:0:2565
-21445:3:2013
-21446:0:2565
-21447:2:766
-21448:2:770
-21449:2:771
-21450:2:779
-21451:2:788
-21452:2:789
-21453:2:793
-21454:2:798
-21455:2:802
-21456:2:803
-21457:2:810
-21458:2:811
-21459:2:822
-21460:2:823
-21461:2:826
-21462:2:827
-21463:2:835
-21464:2:840
-21465:2:841
-21466:0:2565
-21467:3:2014
-21468:0:2565
-21469:3:2015
-21470:3:2019
-21471:3:2020
-21472:3:2028
-21473:3:2029
-21474:3:2033
-21475:3:2034
-21476:3:2042
-21477:3:2047
-21478:3:2051
-21479:3:2052
-21480:3:2059
-21481:3:2060
-21482:3:2071
-21483:3:2079
-21484:3:2080
-21485:3:2084
-21486:3:2089
-21487:3:2090
-21488:0:2565
-21489:3:2102
-21490:0:2565
-21491:3:2104
-21492:0:2565
-21493:3:2105
-21494:3:2109
-21495:3:2110
-21496:3:2118
-21497:3:2119
-21498:3:2123
-21499:3:2124
-21500:3:2132
-21501:3:2137
-21502:3:2141
-21503:3:2142
-21504:3:2149
-21505:3:2150
-21506:3:2161
-21507:3:2169
-21508:3:2170
-21509:3:2174
-21510:3:2179
-21511:3:2180
-21512:0:2565
-21513:3:2192
-21514:0:2565
-21515:2:853
-21516:0:2565
-21517:3:2013
-21518:0:2565
-21519:2:857
-21520:0:2565
-21521:2:465
-21522:0:2565
-21523:3:2014
-21524:0:2565
-21525:3:2015
-21526:3:2019
-21527:3:2020
-21528:3:2028
-21529:3:2029
-21530:3:2033
-21531:3:2034
-21532:3:2042
-21533:3:2047
-21534:3:2051
-21535:3:2052
-21536:3:2059
-21537:3:2060
-21538:3:2071
-21539:3:2079
-21540:3:2080
-21541:3:2084
-21542:3:2089
-21543:3:2090
-21544:0:2565
-21545:3:2102
-21546:0:2565
-21547:3:2104
-21548:0:2565
-21549:3:2105
-21550:3:2109
-21551:3:2110
-21552:3:2118
-21553:3:2119
-21554:3:2123
-21555:3:2124
-21556:3:2132
-21557:3:2137
-21558:3:2141
-21559:3:2142
-21560:3:2149
-21561:3:2150
-21562:3:2161
-21563:3:2169
-21564:3:2170
-21565:3:2174
-21566:3:2179
-21567:3:2180
-21568:0:2565
-21569:3:2192
-21570:0:2565
-21571:2:466
-21572:0:2565
-21573:3:2013
-21574:0:2565
-21575:3:2014
-21576:0:2565
-21577:3:2015
-21578:3:2019
-21579:3:2020
-21580:3:2028
-21581:3:2029
-21582:3:2033
-21583:3:2034
-21584:3:2042
-21585:3:2047
-21586:3:2051
-21587:3:2052
-21588:3:2059
-21589:3:2060
-21590:3:2071
-21591:3:2079
-21592:3:2080
-21593:3:2084
-21594:3:2089
-21595:3:2090
-21596:0:2565
-21597:3:2102
-21598:0:2565
-21599:3:2104
-21600:0:2565
-21601:3:2105
-21602:3:2109
-21603:3:2110
-21604:3:2118
-21605:3:2119
-21606:3:2123
-21607:3:2124
-21608:3:2132
-21609:3:2137
-21610:3:2141
-21611:3:2142
-21612:3:2149
-21613:3:2150
-21614:3:2161
-21615:3:2169
-21616:3:2170
-21617:3:2174
-21618:3:2179
-21619:3:2180
-21620:0:2565
-21621:2:467
-21622:0:2565
-21623:3:2192
-21624:0:2565
-21625:3:2013
-21626:0:2565
-21627:3:2014
-21628:0:2565
-21629:3:2015
-21630:3:2019
-21631:3:2020
-21632:3:2028
-21633:3:2029
-21634:3:2033
-21635:3:2034
-21636:3:2042
-21637:3:2047
-21638:3:2051
-21639:3:2052
-21640:3:2059
-21641:3:2060
-21642:3:2071
-21643:3:2079
-21644:3:2080
-21645:3:2084
-21646:3:2089
-21647:3:2090
-21648:0:2565
-21649:3:2102
-21650:0:2565
-21651:3:2104
-21652:0:2565
-21653:1:436
-21654:0:2565
-21655:2:468
-21656:0:2565
-21657:3:2105
-21658:3:2109
-21659:3:2110
-21660:3:2118
-21661:3:2119
-21662:3:2123
-21663:3:2124
-21664:3:2132
-21665:3:2137
-21666:3:2141
-21667:3:2142
-21668:3:2149
-21669:3:2150
-21670:3:2161
-21671:3:2169
-21672:3:2170
-21673:3:2174
-21674:3:2179
-21675:3:2180
-21676:0:2565
-21677:3:2192
-21678:0:2565
-21679:3:2013
-21680:0:2565
-21681:3:2014
-21682:0:2565
-21683:3:2015
-21684:3:2019
-21685:3:2020
-21686:3:2028
-21687:3:2029
-21688:3:2033
-21689:3:2034
-21690:3:2042
-21691:3:2047
-21692:3:2051
-21693:3:2052
-21694:3:2059
-21695:3:2060
-21696:3:2071
-21697:3:2079
-21698:3:2080
-21699:3:2084
-21700:3:2089
-21701:3:2090
-21702:0:2565
-21703:3:2102
-21704:0:2565
-21705:3:2104
-21706:0:2565
-21707:2:467
-21708:0:2565
-21709:2:468
-21710:0:2565
-21711:3:2105
-21712:3:2109
-21713:3:2110
-21714:3:2118
-21715:3:2119
-21716:3:2123
-21717:3:2124
-21718:3:2132
-21719:3:2137
-21720:3:2141
-21721:3:2142
-21722:3:2149
-21723:3:2150
-21724:3:2161
-21725:3:2169
-21726:3:2170
-21727:3:2174
-21728:3:2179
-21729:3:2180
-21730:0:2565
-21731:3:2192
-21732:0:2565
-21733:3:2013
-21734:0:2565
-21735:3:2014
-21736:0:2565
-21737:3:2015
-21738:3:2019
-21739:3:2020
-21740:3:2028
-21741:3:2029
-21742:3:2033
-21743:3:2034
-21744:3:2042
-21745:3:2047
-21746:3:2051
-21747:3:2052
-21748:3:2059
-21749:3:2060
-21750:3:2071
-21751:3:2079
-21752:3:2080
-21753:3:2084
-21754:3:2089
-21755:3:2090
-21756:0:2565
-21757:3:2102
-21758:0:2565
-21759:2:467
-21760:0:2565
-21761:1:442
-21762:0:2565
-21763:2:468
-21764:0:2565
-21765:1:446
-21766:0:2565
-21767:1:9
-21768:0:2565
-21769:1:10
-21770:0:2565
-21771:1:11
-21772:0:2565
-21773:3:2104
-21774:0:2565
-21775:3:2105
-21776:3:2109
-21777:3:2110
-21778:3:2118
-21779:3:2119
-21780:3:2123
-21781:3:2124
-21782:3:2132
-21783:3:2137
-21784:3:2141
-21785:3:2142
-21786:3:2149
-21787:3:2150
-21788:3:2161
-21789:3:2169
-21790:3:2170
-21791:3:2174
-21792:3:2179
-21793:3:2180
-21794:0:2565
-21795:3:2192
-21796:0:2565
-21797:3:2013
-21798:0:2565
-21799:3:2014
-21800:0:2565
-21801:3:2015
-21802:3:2019
-21803:3:2020
-21804:3:2028
-21805:3:2029
-21806:3:2033
-21807:3:2034
-21808:3:2042
-21809:3:2047
-21810:3:2051
-21811:3:2052
-21812:3:2059
-21813:3:2060
-21814:3:2071
-21815:3:2079
-21816:3:2080
-21817:3:2084
-21818:3:2089
-21819:3:2090
-21820:0:2565
-21821:3:2102
-21822:0:2565
-21823:2:467
-21824:0:2565
-21825:2:468
-21826:0:2565
-21827:3:2104
-21828:0:2565
-21829:3:2105
-21830:3:2109
-21831:3:2110
-21832:3:2118
-21833:3:2119
-21834:3:2123
-21835:3:2124
-21836:3:2132
-21837:3:2137
-21838:3:2141
-21839:3:2142
-21840:3:2149
-21841:3:2150
-21842:3:2161
-21843:3:2169
-21844:3:2170
-21845:3:2174
-21846:3:2179
-21847:3:2180
-21848:0:2565
-21849:3:2192
-21850:0:2565
-21851:3:2013
-21852:0:2565
-21853:3:2014
-21854:0:2565
-21855:3:2015
-21856:3:2019
-21857:3:2020
-21858:3:2028
-21859:3:2029
-21860:3:2033
-21861:3:2034
-21862:3:2042
-21863:3:2047
-21864:3:2051
-21865:3:2052
-21866:3:2059
-21867:3:2060
-21868:3:2071
-21869:3:2079
-21870:3:2080
-21871:3:2084
-21872:3:2089
-21873:3:2090
-21874:0:2565
-21875:2:467
-21876:0:2565
-21877:1:12
-21878:1:16
-21879:1:17
-21880:1:25
-21881:1:26
-21882:1:27
-21883:1:39
-21884:1:44
-21885:1:48
-21886:1:49
-21887:1:56
-21888:1:57
-21889:1:68
-21890:1:69
-21891:1:70
-21892:1:81
-21893:1:86
-21894:1:87
-21895:0:2565
-21896:3:2102
-21897:0:2565
-21898:3:2104
-21899:0:2565
-21900:1:99
-21901:0:2565
-21902:3:2105
-21903:3:2109
-21904:3:2110
-21905:3:2118
-21906:3:2119
-21907:3:2123
-21908:3:2124
-21909:3:2132
-21910:3:2137
-21911:3:2141
-21912:3:2142
-21913:3:2149
-21914:3:2150
-21915:3:2161
-21916:3:2169
-21917:3:2170
-21918:3:2174
-21919:3:2179
-21920:3:2180
-21921:0:2565
-21922:1:100
-21923:0:2565
-21924:3:2192
-21925:0:2565
-21926:3:2013
-21927:0:2565
-21928:2:468
-21929:0:2565
-21930:1:101
-21931:0:2565
-21932:3:2014
-21933:0:2565
-21934:3:2015
-21935:3:2019
-21936:3:2020
-21937:3:2028
-21938:3:2029
-21939:3:2033
-21940:3:2034
-21941:3:2042
-21942:3:2047
-21943:3:2051
-21944:3:2052
-21945:3:2059
-21946:3:2060
-21947:3:2071
-21948:3:2079
-21949:3:2080
-21950:3:2084
-21951:3:2089
-21952:3:2090
-21953:0:2565
-21954:3:2102
-21955:0:2565
-21956:3:2104
-21957:0:2565
-21958:3:2105
-21959:3:2109
-21960:3:2110
-21961:3:2118
-21962:3:2119
-21963:3:2123
-21964:3:2124
-21965:3:2132
-21966:3:2137
-21967:3:2141
-21968:3:2142
-21969:3:2149
-21970:3:2150
-21971:3:2161
-21972:3:2169
-21973:3:2170
-21974:3:2174
-21975:3:2179
-21976:3:2180
-21977:0:2565
-21978:3:2192
-21979:0:2565
-21980:3:2013
-21981:0:2565
-21982:1:100
-21983:0:2565
-21984:3:2014
-21985:0:2565
-21986:3:2015
-21987:3:2019
-21988:3:2020
-21989:3:2028
-21990:3:2029
-21991:3:2033
-21992:3:2034
-21993:3:2042
-21994:3:2047
-21995:3:2051
-21996:3:2052
-21997:3:2059
-21998:3:2060
-21999:3:2071
-22000:3:2079
-22001:3:2080
-22002:3:2084
-22003:3:2089
-22004:3:2090
-22005:0:2565
-22006:3:2102
-22007:0:2565
-22008:3:2104
-22009:0:2565
-22010:3:2105
-22011:3:2109
-22012:3:2110
-22013:3:2118
-22014:3:2119
-22015:3:2123
-22016:3:2124
-22017:3:2132
-22018:3:2137
-22019:3:2141
-22020:3:2142
-22021:3:2149
-22022:3:2150
-22023:3:2161
-22024:3:2169
-22025:3:2170
-22026:3:2174
-22027:3:2179
-22028:3:2180
-22029:0:2565
-22030:3:2192
-22031:0:2565
-22032:2:469
-22033:0:2565
-22034:3:2013
-22035:0:2565
-22036:2:475
-22037:0:2565
-22038:2:476
-22039:0:2565
-22040:1:101
-22041:0:2565
-22042:3:2014
-22043:0:2565
-22044:3:2015
-22045:3:2019
-22046:3:2020
-22047:3:2028
-22048:3:2029
-22049:3:2033
-22050:3:2034
-22051:3:2042
-22052:3:2047
-22053:3:2051
-22054:3:2052
-22055:3:2059
-22056:3:2060
-22057:3:2071
-22058:3:2079
-22059:3:2080
-22060:3:2084
-22061:3:2089
-22062:3:2090
-22063:0:2565
-22064:3:2102
-22065:0:2565
-22066:3:2104
-22067:0:2565
-22068:3:2105
-22069:3:2109
-22070:3:2110
-22071:3:2118
-22072:3:2119
-22073:3:2123
-22074:3:2124
-22075:3:2132
-22076:3:2137
-22077:3:2141
-22078:3:2142
-22079:3:2149
-22080:3:2150
-22081:3:2161
-22082:3:2169
-22083:3:2170
-22084:3:2174
-22085:3:2179
-22086:3:2180
-22087:0:2565
-22088:3:2192
-22089:0:2565
-22090:3:2013
-22091:0:2565
-22092:1:100
-22093:0:2565
-22094:3:2014
-22095:0:2565
-22096:3:2015
-22097:3:2019
-22098:3:2020
-22099:3:2028
-22100:3:2029
-22101:3:2033
-22102:3:2034
-22103:3:2042
-22104:3:2047
-22105:3:2051
-22106:3:2052
-22107:3:2059
-22108:3:2060
-22109:3:2071
-22110:3:2079
-22111:3:2080
-22112:3:2084
-22113:3:2089
-22114:3:2090
-22115:0:2565
-22116:3:2102
-22117:0:2565
-22118:3:2104
-22119:0:2565
-22120:3:2105
-22121:3:2109
-22122:3:2110
-22123:3:2118
-22124:3:2119
-22125:3:2123
-22126:3:2124
-22127:3:2132
-22128:3:2137
-22129:3:2141
-22130:3:2142
-22131:3:2149
-22132:3:2150
-22133:3:2161
-22134:3:2169
-22135:3:2170
-22136:3:2174
-22137:3:2179
-22138:3:2180
-22139:0:2565
-22140:3:2192
-22141:0:2565
-22142:2:477
-22143:2:481
-22144:2:482
-22145:2:490
-22146:2:491
-22147:2:495
-22148:2:496
-22149:2:504
-22150:2:509
-22151:2:513
-22152:2:514
-22153:2:521
-22154:2:522
-22155:2:533
-22156:2:534
-22157:2:535
-22158:2:546
-22159:2:551
-22160:2:552
-22161:0:2565
-22162:3:2013
-22163:0:2565
-22164:1:101
-22165:0:2565
-22166:3:2014
-22167:0:2565
-22168:3:2015
-22169:3:2019
-22170:3:2020
-22171:3:2028
-22172:3:2029
-22173:3:2033
-22174:3:2034
-22175:3:2042
-22176:3:2047
-22177:3:2051
-22178:3:2052
-22179:3:2059
-22180:3:2060
-22181:3:2071
-22182:3:2079
-22183:3:2080
-22184:3:2084
-22185:3:2089
-22186:3:2090
-22187:0:2565
-22188:3:2102
-22189:0:2565
-22190:3:2104
-22191:0:2565
-22192:3:2105
-22193:3:2109
-22194:3:2110
-22195:3:2118
-22196:3:2119
-22197:3:2123
-22198:3:2124
-22199:3:2132
-22200:3:2137
-22201:3:2141
-22202:3:2142
-22203:3:2149
-22204:3:2150
-22205:3:2161
-22206:3:2169
-22207:3:2170
-22208:3:2174
-22209:3:2179
-22210:3:2180
-22211:0:2565
-22212:3:2192
-22213:0:2565
-22214:3:2013
-22215:0:2565
-22216:1:100
-22217:0:2565
-22218:3:2014
-22219:0:2565
-22220:3:2015
-22221:3:2019
-22222:3:2020
-22223:3:2028
-22224:3:2029
-22225:3:2033
-22226:3:2034
-22227:3:2042
-22228:3:2047
-22229:3:2051
-22230:3:2052
-22231:3:2059
-22232:3:2060
-22233:3:2071
-22234:3:2079
-22235:3:2080
-22236:3:2084
-22237:3:2089
-22238:3:2090
-22239:0:2565
-22240:3:2102
-22241:0:2565
-22242:3:2104
-22243:0:2565
-22244:3:2105
-22245:3:2109
-22246:3:2110
-22247:3:2118
-22248:3:2119
-22249:3:2123
-22250:3:2124
-22251:3:2132
-22252:3:2137
-22253:3:2141
-22254:3:2142
-22255:3:2149
-22256:3:2150
-22257:3:2161
-22258:3:2169
-22259:3:2170
-22260:3:2174
-22261:3:2179
-22262:3:2180
-22263:0:2565
-22264:3:2192
-22265:0:2565
-22266:2:564
-22267:0:2565
-22268:3:2013
-22269:0:2565
-22270:1:101
-22271:0:2565
-22272:3:2014
-22273:0:2565
-22274:3:2015
-22275:3:2019
-22276:3:2020
-22277:3:2028
-22278:3:2029
-22279:3:2033
-22280:3:2034
-22281:3:2042
-22282:3:2047
-22283:3:2051
-22284:3:2052
-22285:3:2059
-22286:3:2060
-22287:3:2071
-22288:3:2079
-22289:3:2080
-22290:3:2084
-22291:3:2089
-22292:3:2090
-22293:0:2565
-22294:3:2102
-22295:0:2565
-22296:3:2104
-22297:0:2565
-22298:3:2105
-22299:3:2109
-22300:3:2110
-22301:3:2118
-22302:3:2119
-22303:3:2123
-22304:3:2124
-22305:3:2132
-22306:3:2137
-22307:3:2141
-22308:3:2142
-22309:3:2149
-22310:3:2150
-22311:3:2161
-22312:3:2169
-22313:3:2170
-22314:3:2174
-22315:3:2179
-22316:3:2180
-22317:0:2565
-22318:3:2192
-22319:0:2565
-22320:3:2013
-22321:0:2565
-22322:2:565
-22323:2:569
-22324:2:570
-22325:2:578
-22326:2:579
-22327:2:583
-22328:2:584
-22329:2:592
-22330:2:597
-22331:2:601
-22332:2:602
-22333:2:609
-22334:2:610
-22335:2:621
-22336:2:622
-22337:2:623
-22338:2:634
-22339:2:639
-22340:2:640
-22341:0:2565
-22342:3:2014
-22343:0:2565
-22344:3:2015
-22345:3:2019
-22346:3:2020
-22347:3:2028
-22348:3:2029
-22349:3:2033
-22350:3:2034
-22351:3:2042
-22352:3:2047
-22353:3:2051
-22354:3:2052
-22355:3:2059
-22356:3:2060
-22357:3:2071
-22358:3:2079
-22359:3:2080
-22360:3:2084
-22361:3:2089
-22362:3:2090
-22363:0:2565
-22364:3:2102
-22365:0:2565
-22366:1:100
-22367:0:2565
-22368:2:652
-22369:0:2565
-22370:1:101
-22371:0:2565
-22372:3:2104
-22373:0:2565
-22374:3:2105
-22375:3:2109
-22376:3:2110
-22377:3:2118
-22378:3:2119
-22379:3:2123
-22380:3:2124
-22381:3:2132
-22382:3:2137
-22383:3:2141
-22384:3:2142
-22385:3:2149
-22386:3:2150
-22387:3:2161
-22388:3:2169
-22389:3:2170
-22390:3:2174
-22391:3:2179
-22392:3:2180
-22393:0:2565
-22394:3:2192
-22395:0:2565
-22396:3:2013
-22397:0:2565
-22398:3:2014
-22399:0:2565
-22400:3:2015
-22401:3:2019
-22402:3:2020
-22403:3:2028
-22404:3:2029
-22405:3:2033
-22406:3:2034
-22407:3:2042
-22408:3:2047
-22409:3:2051
-22410:3:2052
-22411:3:2059
-22412:3:2060
-22413:3:2071
-22414:3:2079
-22415:3:2080
-22416:3:2084
-22417:3:2089
-22418:3:2090
-22419:0:2565
-22420:3:2102
-22421:0:2565
-22422:1:100
-22423:0:2565
-22424:3:2104
-22425:0:2565
-22426:3:2105
-22427:3:2109
-22428:3:2110
-22429:3:2118
-22430:3:2119
-22431:3:2123
-22432:3:2124
-22433:3:2132
-22434:3:2137
-22435:3:2141
-22436:3:2142
-22437:3:2149
-22438:3:2150
-22439:3:2161
-22440:3:2169
-22441:3:2170
-22442:3:2174
-22443:3:2179
-22444:3:2180
-22445:0:2565
-22446:3:2192
-22447:0:2565
-22448:3:2013
-22449:0:2565
-22450:3:2014
-22451:0:2565
-22452:3:2015
-22453:3:2019
-22454:3:2020
-22455:3:2028
-22456:3:2029
-22457:3:2033
-22458:3:2034
-22459:3:2042
-22460:3:2047
-22461:3:2051
-22462:3:2052
-22463:3:2059
-22464:3:2060
-22465:3:2071
-22466:3:2079
-22467:3:2080
-22468:3:2084
-22469:3:2089
-22470:3:2090
-22471:0:2565
-22472:2:653
-22473:0:2565
-22474:3:2102
-22475:0:2565
-22476:1:101
-22477:0:2565
-22478:3:2104
-22479:0:2565
-22480:3:2105
-22481:3:2109
-22482:3:2110
-22483:3:2118
-22484:3:2119
-22485:3:2123
-22486:3:2124
-22487:3:2132
-22488:3:2137
-22489:3:2141
-22490:3:2142
-22491:3:2149
-22492:3:2150
-22493:3:2161
-22494:3:2169
-22495:3:2170
-22496:3:2174
-22497:3:2179
-22498:3:2180
-22499:0:2565
-22500:3:2192
-22501:0:2565
-22502:3:2013
-22503:0:2565
-22504:3:2014
-22505:0:2565
-22506:3:2015
-22507:3:2019
-22508:3:2020
-22509:3:2028
-22510:3:2029
-22511:3:2033
-22512:3:2034
-22513:3:2042
-22514:3:2047
-22515:3:2051
-22516:3:2052
-22517:3:2059
-22518:3:2060
-22519:3:2071
-22520:3:2079
-22521:3:2080
-22522:3:2084
-22523:3:2089
-22524:3:2090
-22525:0:2565
-22526:3:2102
-22527:0:2565
-22528:1:100
-22529:0:2565
-22530:3:2104
-22531:0:2565
-22532:3:2105
-22533:3:2109
-22534:3:2110
-22535:3:2118
-22536:3:2119
-22537:3:2123
-22538:3:2124
-22539:3:2132
-22540:3:2137
-22541:3:2141
-22542:3:2142
-22543:3:2149
-22544:3:2150
-22545:3:2161
-22546:3:2169
-22547:3:2170
-22548:3:2174
-22549:3:2179
-22550:3:2180
-22551:0:2565
-22552:3:2192
-22553:0:2565
-22554:3:2013
-22555:0:2565
-22556:3:2014
-22557:0:2565
-22558:3:2015
-22559:3:2019
-22560:3:2020
-22561:3:2028
-22562:3:2029
-22563:3:2033
-22564:3:2034
-22565:3:2042
-22566:3:2047
-22567:3:2051
-22568:3:2052
-22569:3:2059
-22570:3:2060
-22571:3:2071
-22572:3:2079
-22573:3:2080
-22574:3:2084
-22575:3:2089
-22576:3:2090
-22577:0:2565
-22578:2:654
-22579:2:658
-22580:2:659
-22581:2:667
-22582:2:668
-22583:2:672
-22584:2:673
-22585:2:681
-22586:2:686
-22587:2:690
-22588:2:691
-22589:2:698
-22590:2:699
-22591:2:710
-22592:2:711
-22593:2:712
-22594:2:723
-22595:2:728
-22596:2:729
-22597:0:2565
-22598:3:2102
-22599:0:2565
-22600:1:101
-22601:0:2565
-22602:3:2104
-22603:0:2565
-22604:3:2105
-22605:3:2109
-22606:3:2110
-22607:3:2118
-22608:3:2119
-22609:3:2123
-22610:3:2124
-22611:3:2132
-22612:3:2137
-22613:3:2141
-22614:3:2142
-22615:3:2149
-22616:3:2150
-22617:3:2161
-22618:3:2169
-22619:3:2170
-22620:3:2174
-22621:3:2179
-22622:3:2180
-22623:0:2565
-22624:3:2192
-22625:0:2565
-22626:3:2013
-22627:0:2565
-22628:3:2014
-22629:0:2565
-22630:3:2015
-22631:3:2019
-22632:3:2020
-22633:3:2028
-22634:3:2029
-22635:3:2033
-22636:3:2034
-22637:3:2042
-22638:3:2047
-22639:3:2051
-22640:3:2052
-22641:3:2059
-22642:3:2060
-22643:3:2071
-22644:3:2079
-22645:3:2080
-22646:3:2084
-22647:3:2089
-22648:3:2090
-22649:0:2565
-22650:3:2102
-22651:0:2565
-22652:2:741
-22653:0:2565
-22654:2:750
-22655:0:2565
-22656:3:2104
-22657:0:2565
-22658:3:2105
-22659:3:2109
-22660:3:2110
-22661:3:2118
-22662:3:2119
-22663:3:2123
-22664:3:2124
-22665:3:2132
-22666:3:2137
-22667:3:2141
-22668:3:2142
-22669:3:2149
-22670:3:2150
-22671:3:2161
-22672:3:2169
-22673:3:2170
-22674:3:2174
-22675:3:2179
-22676:3:2180
-22677:0:2565
-22678:3:2192
-22679:0:2565
-22680:3:2013
-22681:0:2565
-22682:1:100
-22683:0:2565
-22684:2:753
-22685:0:2565
-22686:1:101
-22687:0:2565
-22688:2:758
-22689:0:2565
-22690:2:759
-22691:0:2565
-22692:2:760
-22693:0:2565
-22694:2:761
-22695:0:2565
-22696:2:762
-22697:0:2565
-22698:2:763
-22699:0:2565
-22700:2:765
-22701:0:2565
-22702:2:766
-22703:2:770
-22704:2:771
-22705:2:779
-22706:2:780
-22707:2:781
-22708:2:793
-22709:2:798
-22710:2:802
-22711:2:803
-22712:2:810
-22713:2:811
-22714:2:822
-22715:2:823
-22716:2:824
-22717:2:835
-22718:2:840
-22719:2:841
-22720:0:2565
-22721:3:2014
-22722:0:2565
-22723:3:2015
-22724:3:2019
-22725:3:2020
-22726:3:2028
-22727:3:2029
-22728:3:2033
-22729:3:2034
-22730:3:2042
-22731:3:2047
-22732:3:2051
-22733:3:2052
-22734:3:2059
-22735:3:2060
-22736:3:2071
-22737:3:2079
-22738:3:2080
-22739:3:2084
-22740:3:2089
-22741:3:2090
-22742:0:2565
-22743:3:2102
-22744:0:2565
-22745:3:2104
-22746:0:2565
-22747:3:2105
-22748:3:2109
-22749:3:2110
-22750:3:2118
-22751:3:2119
-22752:3:2123
-22753:3:2124
-22754:3:2132
-22755:3:2137
-22756:3:2141
-22757:3:2142
-22758:3:2149
-22759:3:2150
-22760:3:2161
-22761:3:2169
-22762:3:2170
-22763:3:2174
-22764:3:2179
-22765:3:2180
-22766:0:2565
-22767:3:2192
-22768:0:2565
-22769:3:2013
-22770:0:2565
-22771:2:853
-22772:0:2565
-22773:2:857
-22774:0:2565
-22775:3:2014
-22776:0:2565
-22777:3:2015
-22778:3:2019
-22779:3:2020
-22780:3:2028
-22781:3:2029
-22782:3:2033
-22783:3:2034
-22784:3:2042
-22785:3:2047
-22786:3:2051
-22787:3:2052
-22788:3:2059
-22789:3:2060
-22790:3:2071
-22791:3:2079
-22792:3:2080
-22793:3:2084
-22794:3:2089
-22795:3:2090
-22796:0:2565
-22797:3:2102
-22798:0:2565
-22799:1:100
-22800:0:2565
-22801:2:465
-22802:0:2565
-22803:1:101
-22804:0:2565
-22805:3:2104
-22806:0:2565
-22807:3:2105
-22808:3:2109
-22809:3:2110
-22810:3:2118
-22811:3:2119
-22812:3:2123
-22813:3:2124
-22814:3:2132
-22815:3:2137
-22816:3:2141
-22817:3:2142
-22818:3:2149
-22819:3:2150
-22820:3:2161
-22821:3:2169
-22822:3:2170
-22823:3:2174
-22824:3:2179
-22825:3:2180
-22826:0:2565
-22827:3:2192
-22828:0:2565
-22829:3:2013
-22830:0:2565
-22831:3:2014
-22832:0:2565
-22833:3:2015
-22834:3:2019
-22835:3:2020
-22836:3:2028
-22837:3:2029
-22838:3:2033
-22839:3:2034
-22840:3:2042
-22841:3:2047
-22842:3:2051
-22843:3:2052
-22844:3:2059
-22845:3:2060
-22846:3:2071
-22847:3:2079
-22848:3:2080
-22849:3:2084
-22850:3:2089
-22851:3:2090
-22852:0:2565
-22853:3:2102
-22854:0:2565
-22855:1:100
-22856:0:2565
-22857:3:2104
-22858:0:2565
-22859:3:2105
-22860:3:2109
-22861:3:2110
-22862:3:2118
-22863:3:2119
-22864:3:2123
-22865:3:2124
-22866:3:2132
-22867:3:2137
-22868:3:2141
-22869:3:2142
-22870:3:2149
-22871:3:2150
-22872:3:2161
-22873:3:2169
-22874:3:2170
-22875:3:2174
-22876:3:2179
-22877:3:2180
-22878:0:2565
-22879:3:2192
-22880:0:2565
-22881:3:2013
-22882:0:2565
-22883:3:2014
-22884:0:2565
-22885:3:2015
-22886:3:2019
-22887:3:2020
-22888:3:2028
-22889:3:2029
-22890:3:2033
-22891:3:2034
-22892:3:2042
-22893:3:2047
-22894:3:2051
-22895:3:2052
-22896:3:2059
-22897:3:2060
-22898:3:2071
-22899:3:2079
-22900:3:2080
-22901:3:2084
-22902:3:2089
-22903:3:2090
-22904:0:2565
-22905:2:466
-22906:0:2565
-22907:3:2102
-22908:0:2565
-22909:1:101
-22910:0:2565
-22911:2:467
-22912:0:2565
-22913:2:468
-22914:0:2565
-22915:1:102
-22916:0:2565
-22917:2:467
-22918:0:2565
-22919:3:2104
-22920:0:2565
-22921:3:2105
-22922:3:2109
-22923:3:2110
-22924:3:2118
-22925:3:2119
-22926:3:2123
-22927:3:2124
-22928:3:2132
-22929:3:2137
-22930:3:2141
-22931:3:2142
-22932:3:2149
-22933:3:2150
-22934:3:2161
-22935:3:2169
-22936:3:2170
-22937:3:2174
-22938:3:2179
-22939:3:2180
-22940:0:2565
-22941:3:2192
-22942:0:2565
-22943:3:2013
-22944:0:2565
-22945:3:2014
-22946:0:2565
-22947:3:2015
-22948:3:2019
-22949:3:2020
-22950:3:2028
-22951:3:2029
-22952:3:2033
-22953:3:2034
-22954:3:2042
-22955:3:2047
-22956:3:2051
-22957:3:2052
-22958:3:2059
-22959:3:2060
-22960:3:2071
-22961:3:2079
-22962:3:2080
-22963:3:2084
-22964:3:2089
-22965:3:2090
-22966:0:2565
-22967:3:2102
-22968:0:2565
-22969:1:108
-22970:0:2565
-22971:3:2104
-22972:0:2565
-22973:3:2105
-22974:3:2109
-22975:3:2110
-22976:3:2118
-22977:3:2119
-22978:3:2123
-22979:3:2124
-22980:3:2132
-22981:3:2137
-22982:3:2141
-22983:3:2142
-22984:3:2149
-22985:3:2150
-22986:3:2161
-22987:3:2169
-22988:3:2170
-22989:3:2174
-22990:3:2179
-22991:3:2180
-22992:0:2565
-22993:3:2192
-22994:0:2565
-22995:3:2013
-22996:0:2565
-22997:3:2014
-22998:0:2565
-22999:3:2015
-23000:3:2019
-23001:3:2020
-23002:3:2028
-23003:3:2029
-23004:3:2033
-23005:3:2034
-23006:3:2042
-23007:3:2047
-23008:3:2051
-23009:3:2052
-23010:3:2059
-23011:3:2060
-23012:3:2071
-23013:3:2079
-23014:3:2080
-23015:3:2084
-23016:3:2089
-23017:3:2090
-23018:0:2565
-23019:1:109
-23020:1:113
-23021:1:114
-23022:1:122
-23023:1:123
-23024:1:124
-23025:1:136
-23026:1:141
-23027:1:145
-23028:1:146
-23029:1:153
-23030:1:154
-23031:1:165
-23032:1:166
-23033:1:167
-23034:1:178
-23035:1:183
-23036:1:184
-23037:0:2565
-23038:1:196
-23039:0:2565
-23040:3:2102
-23041:0:2565
-23042:1:197
-23043:0:2565
-23044:2:468
-23045:0:2565
-23046:1:198
-23047:0:2565
-23048:2:469
-23049:0:2565
-23050:2:475
-23051:0:2565
-23052:2:476
-23053:0:2565
-23054:2:477
-23055:2:481
-23056:2:482
-23057:2:490
-23058:2:491
-23059:2:495
-23060:2:496
-23061:2:504
-23062:2:509
-23063:2:513
-23064:2:514
-23065:2:521
-23066:2:522
-23067:2:533
-23068:2:534
-23069:2:535
-23070:2:546
-23071:2:551
-23072:2:552
-23073:0:2565
-23074:2:564
-23075:0:2565
-23076:2:565
-23077:2:569
-23078:2:570
-23079:2:578
-23080:2:579
-23081:2:583
-23082:2:584
-23083:2:592
-23084:2:597
-23085:2:601
-23086:2:602
-23087:2:609
-23088:2:610
-23089:2:621
-23090:2:622
-23091:2:623
-23092:2:634
-23093:2:639
-23094:2:640
-23095:0:2565
-23096:3:2104
-23097:0:2565
-23098:3:2105
-23099:3:2109
-23100:3:2110
-23101:3:2118
-23102:3:2119
-23103:3:2123
-23104:3:2124
-23105:3:2132
-23106:3:2137
-23107:3:2141
-23108:3:2142
-23109:3:2149
-23110:3:2150
-23111:3:2161
-23112:3:2169
-23113:3:2170
-23114:3:2174
-23115:3:2179
-23116:3:2180
-23117:0:2565
-23118:3:2192
-23119:0:2565
-23120:3:2013
-23121:0:2565
-23122:3:2014
-23123:0:2565
-23124:3:2015
-23125:3:2019
-23126:3:2020
-23127:3:2028
-23128:3:2029
-23129:3:2033
-23130:3:2034
-23131:3:2042
-23132:3:2047
-23133:3:2051
-23134:3:2052
-23135:3:2059
-23136:3:2060
-23137:3:2071
-23138:3:2079
-23139:3:2080
-23140:3:2084
-23141:3:2089
-23142:3:2090
-23143:0:2565
-23144:3:2102
-23145:0:2565
-23146:1:197
-23147:0:2565
-23148:2:652
-23149:0:2565
-23150:1:198
-23151:0:2565
-23152:2:653
-23153:0:2565
-23154:2:654
-23155:2:658
-23156:2:659
-23157:2:667
-23158:2:668
-23159:2:672
-23160:2:673
-23161:2:681
-23162:2:686
-23163:2:690
-23164:2:691
-23165:2:698
-23166:2:699
-23167:2:710
-23168:2:711
-23169:2:712
-23170:2:723
-23171:2:728
-23172:2:729
-23173:0:2565
-23174:2:741
-23175:0:2565
-23176:2:750
-23177:0:2565
-23178:2:753
-23179:0:2565
-23180:2:758
-23181:0:2565
-23182:2:759
-23183:0:2565
-23184:2:760
-23185:0:2565
-23186:2:761
-23187:0:2565
-23188:2:762
-23189:0:2565
-23190:2:763
-23191:0:2565
-23192:2:765
-23193:0:2565
-23194:2:766
-23195:2:770
-23196:2:771
-23197:2:779
-23198:2:780
-23199:2:781
-23200:2:793
-23201:2:798
-23202:2:802
-23203:2:803
-23204:2:810
-23205:2:811
-23206:2:822
-23207:2:823
-23208:2:824
-23209:2:835
-23210:2:840
-23211:2:841
-23212:0:2565
-23213:3:2104
-23214:0:2565
-23215:3:2105
-23216:3:2109
-23217:3:2110
-23218:3:2118
-23219:3:2119
-23220:3:2123
-23221:3:2124
-23222:3:2132
-23223:3:2137
-23224:3:2141
-23225:3:2142
-23226:3:2149
-23227:3:2150
-23228:3:2161
-23229:3:2169
-23230:3:2170
-23231:3:2174
-23232:3:2179
-23233:3:2180
-23234:0:2565
-23235:3:2192
-23236:0:2565
-23237:3:2013
-23238:0:2565
-23239:3:2014
-23240:0:2565
-23241:3:2015
-23242:3:2019
-23243:3:2020
-23244:3:2028
-23245:3:2029
-23246:3:2033
-23247:3:2034
-23248:3:2042
-23249:3:2047
-23250:3:2051
-23251:3:2052
-23252:3:2059
-23253:3:2060
-23254:3:2071
-23255:3:2079
-23256:3:2080
-23257:3:2084
-23258:3:2089
-23259:3:2090
-23260:0:2565
-23261:3:2102
-23262:0:2565
-23263:2:853
-23264:0:2565
-23265:2:857
-23266:0:2565
-23267:1:197
-23268:0:2565
-23269:2:465
-23270:0:2565
-23271:1:198
-23272:0:2565
-23273:3:2104
-23274:0:2565
-23275:3:2105
-23276:3:2109
-23277:3:2110
-23278:3:2118
-23279:3:2119
-23280:3:2123
-23281:3:2124
-23282:3:2132
-23283:3:2137
-23284:3:2141
-23285:3:2142
-23286:3:2149
-23287:3:2150
-23288:3:2161
-23289:3:2169
-23290:3:2170
-23291:3:2174
-23292:3:2179
-23293:3:2180
-23294:0:2565
-23295:3:2192
-23296:0:2565
-23297:3:2013
-23298:0:2565
-23299:3:2014
-23300:0:2565
-23301:3:2015
-23302:3:2019
-23303:3:2020
-23304:3:2028
-23305:3:2029
-23306:3:2033
-23307:3:2034
-23308:3:2042
-23309:3:2047
-23310:3:2051
-23311:3:2052
-23312:3:2059
-23313:3:2060
-23314:3:2071
-23315:3:2079
-23316:3:2080
-23317:3:2084
-23318:3:2089
-23319:3:2090
-23320:0:2565
-23321:3:2102
-23322:0:2565
-23323:1:197
-23324:0:2565
-23325:3:2104
-23326:0:2565
-23327:3:2105
-23328:3:2109
-23329:3:2110
-23330:3:2118
-23331:3:2119
-23332:3:2123
-23333:3:2124
-23334:3:2132
-23335:3:2137
-23336:3:2141
-23337:3:2142
-23338:3:2149
-23339:3:2150
-23340:3:2161
-23341:3:2169
-23342:3:2170
-23343:3:2174
-23344:3:2179
-23345:3:2180
-23346:0:2565
-23347:3:2192
-23348:0:2565
-23349:3:2013
-23350:0:2565
-23351:3:2014
-23352:0:2565
-23353:3:2015
-23354:3:2019
-23355:3:2020
-23356:3:2028
-23357:3:2029
-23358:3:2033
-23359:3:2034
-23360:3:2042
-23361:3:2047
-23362:3:2051
-23363:3:2052
-23364:3:2059
-23365:3:2060
-23366:3:2071
-23367:3:2079
-23368:3:2080
-23369:3:2084
-23370:3:2089
-23371:3:2090
-23372:0:2565
-23373:2:466
-23374:0:2565
-23375:3:2102
-23376:0:2565
-23377:1:198
-23378:0:2565
-23379:3:2104
-23380:0:2565
-23381:3:2105
-23382:3:2109
-23383:3:2110
-23384:3:2118
-23385:3:2119
-23386:3:2123
-23387:3:2124
-23388:3:2132
-23389:3:2137
-23390:3:2141
-23391:3:2142
-23392:3:2149
-23393:3:2150
-23394:3:2161
-23395:3:2169
-23396:3:2170
-23397:3:2174
-23398:3:2179
-23399:3:2180
-23400:0:2565
-23401:3:2192
-23402:0:2565
-23403:3:2013
-23404:0:2565
-23405:3:2014
-23406:0:2565
-23407:3:2015
-23408:3:2019
-23409:3:2020
-23410:3:2028
-23411:3:2029
-23412:3:2033
-23413:3:2034
-23414:3:2042
-23415:3:2047
-23416:3:2051
-23417:3:2052
-23418:3:2059
-23419:3:2060
-23420:3:2071
-23421:3:2079
-23422:3:2080
-23423:3:2084
-23424:3:2089
-23425:3:2090
-23426:0:2565
-23427:3:2102
-23428:0:2565
-23429:1:199
-23430:0:2565
-23431:3:2104
-23432:0:2565
-23433:3:2105
-23434:3:2109
-23435:3:2110
-23436:3:2118
-23437:3:2119
-23438:3:2123
-23439:3:2124
-23440:3:2132
-23441:3:2137
-23442:3:2141
-23443:3:2142
-23444:3:2149
-23445:3:2150
-23446:3:2161
-23447:3:2169
-23448:3:2170
-23449:3:2174
-23450:3:2179
-23451:3:2180
-23452:0:2565
-23453:3:2192
-23454:0:2565
-23455:3:2013
-23456:0:2565
-23457:3:2014
-23458:0:2565
-23459:3:2015
-23460:3:2019
-23461:3:2020
-23462:3:2028
-23463:3:2029
-23464:3:2033
-23465:3:2034
-23466:3:2042
-23467:3:2047
-23468:3:2051
-23469:3:2052
-23470:3:2059
-23471:3:2060
-23472:3:2071
-23473:3:2079
-23474:3:2080
-23475:3:2084
-23476:3:2089
-23477:3:2090
-23478:0:2565
-23479:2:467
-23480:0:2565
-23481:3:2102
-23482:0:2565
-23483:2:468
-23484:0:2565
-23485:1:205
-23486:0:2565
-23487:3:2104
-23488:0:2565
-23489:3:2105
-23490:3:2109
-23491:3:2110
-23492:3:2118
-23493:3:2119
-23494:3:2123
-23495:3:2124
-23496:3:2132
-23497:3:2137
-23498:3:2141
-23499:3:2142
-23500:3:2149
-23501:3:2150
-23502:3:2161
-23503:3:2169
-23504:3:2170
-23505:3:2174
-23506:3:2179
-23507:3:2180
-23508:0:2565
-23509:3:2192
-23510:0:2565
-23511:3:2013
-23512:0:2565
-23513:3:2014
-23514:0:2565
-23515:3:2015
-23516:3:2019
-23517:3:2020
-23518:3:2028
-23519:3:2029
-23520:3:2033
-23521:3:2034
-23522:3:2042
-23523:3:2047
-23524:3:2051
-23525:3:2052
-23526:3:2059
-23527:3:2060
-23528:3:2071
-23529:3:2079
-23530:3:2080
-23531:3:2084
-23532:3:2089
-23533:3:2090
-23534:0:2565
-23535:3:2102
-23536:0:2565
-23537:2:467
-23538:0:2565
-23539:2:468
-23540:0:2565
-23541:3:2104
-23542:0:2565
-23543:3:2105
-23544:3:2109
-23545:3:2110
-23546:3:2118
-23547:3:2119
-23548:3:2123
-23549:3:2124
-23550:3:2132
-23551:3:2137
-23552:3:2141
-23553:3:2142
-23554:3:2149
-23555:3:2150
-23556:3:2161
-23557:3:2169
-23558:3:2170
-23559:3:2174
-23560:3:2179
-23561:3:2180
-23562:0:2565
-23563:3:2192
-23564:0:2565
-23565:3:2013
-23566:0:2565
-23567:3:2014
-23568:0:2565
-23569:1:206
diff --git a/formal-model/urcu/result-signal-over-writer/DEFINES b/formal-model/urcu/result-signal-over-writer/DEFINES
deleted file mode 100644 (file)
index ec600f0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu/result-signal-over-writer/Makefile b/formal-model/urcu/result-signal-over-writer/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu/result-signal-over-writer/asserts.log b/formal-model/urcu/result-signal-over-writer/asserts.log
deleted file mode 100644 (file)
index c102ffb..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 40 byte, depth reached 7872, errors: 0
-    20128 states, stored
-   191477 states, matched
-   211605 transitions (= stored+matched)
-   712166 atomic steps
-hash conflicts:       942 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.305      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.467      actual memory usage for states (unsuccessful compression: 112.36%)
-               state-vector as stored = 48 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.229      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 401, ".input.spin", state 330, "(1)"
-       line 612, ".input.spin", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 397, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 406, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 59, "(1)"
-       line 416, ".input.spin", state 89, "(1)"
-       line 397, ".input.spin", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 160, "(1)"
-       line 650, ".input.spin", state 213, "(1)"
-       line 173, ".input.spin", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 233, "(1)"
-       line 158, ".input.spin", state 254, "(1)"
-       line 162, ".input.spin", state 262, "(1)"
-       line 166, ".input.spin", state 274, "(1)"
-       line 173, ".input.spin", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, ".input.spin", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 317, "(1)"
-       line 162, ".input.spin", state 325, "(1)"
-       line 166, ".input.spin", state 337, "(1)"
-       line 173, ".input.spin", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, ".input.spin", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 384, "(1)"
-       line 162, ".input.spin", state 392, "(1)"
-       line 166, ".input.spin", state 404, "(1)"
-       line 397, ".input.spin", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 441, "(1)"
-       line 406, ".input.spin", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 470, "(1)"
-       line 416, ".input.spin", state 500, "(1)"
-       line 397, ".input.spin", state 526, "(1)"
-       line 401, ".input.spin", state 540, "(1)"
-       line 406, ".input.spin", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 599, "(1)"
-       line 401, ".input.spin", state 640, "(1)"
-       line 406, ".input.spin", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 699, "(1)"
-       line 173, ".input.spin", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 722, "(1)"
-       line 177, ".input.spin", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 731, "(1)"
-       line 177, ".input.spin", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 732, "else"
-       line 175, ".input.spin", state 737, "((j<1))"
-       line 175, ".input.spin", state 737, "((j>=1))"
-       line 181, ".input.spin", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 752, "(1)"
-       line 162, ".input.spin", state 760, "(1)"
-       line 162, ".input.spin", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 761, "else"
-       line 160, ".input.spin", state 766, "((j<1))"
-       line 160, ".input.spin", state 766, "((j>=1))"
-       line 166, ".input.spin", state 772, "(1)"
-       line 166, ".input.spin", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 773, "else"
-       line 168, ".input.spin", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 776, "else"
-       line 173, ".input.spin", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, ".input.spin", state 785, "(1)"
-       line 177, ".input.spin", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 794, "(1)"
-       line 177, ".input.spin", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, ".input.spin", state 795, "else"
-       line 175, ".input.spin", state 800, "((j<1))"
-       line 175, ".input.spin", state 800, "((j>=1))"
-       line 181, ".input.spin", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 815, "(1)"
-       line 162, ".input.spin", state 823, "(1)"
-       line 162, ".input.spin", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, ".input.spin", state 824, "else"
-       line 160, ".input.spin", state 829, "((j<1))"
-       line 160, ".input.spin", state 829, "((j>=1))"
-       line 166, ".input.spin", state 835, "(1)"
-       line 166, ".input.spin", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, ".input.spin", state 836, "else"
-       line 168, ".input.spin", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, ".input.spin", state 839, "else"
-       line 200, ".input.spin", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, ".input.spin", state 841, "else"
-       line 212, ".input.spin", state 845, "((i<1))"
-       line 212, ".input.spin", state 845, "((i>=1))"
-       line 173, ".input.spin", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 852, "(1)"
-       line 177, ".input.spin", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 861, "(1)"
-       line 177, ".input.spin", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 862, "else"
-       line 175, ".input.spin", state 867, "((j<1))"
-       line 175, ".input.spin", state 867, "((j>=1))"
-       line 181, ".input.spin", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 882, "(1)"
-       line 162, ".input.spin", state 890, "(1)"
-       line 162, ".input.spin", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 891, "else"
-       line 160, ".input.spin", state 896, "((j<1))"
-       line 160, ".input.spin", state 896, "((j>=1))"
-       line 166, ".input.spin", state 902, "(1)"
-       line 166, ".input.spin", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 903, "else"
-       line 168, ".input.spin", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 906, "else"
-       line 200, ".input.spin", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, ".input.spin", state 908, "else"
-       line 219, ".input.spin", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, ".input.spin", state 909, "else"
-       line 354, ".input.spin", state 915, "((sighand_exec==1))"
-       line 354, ".input.spin", state 915, "else"
-       line 360, ".input.spin", state 918, "sighand_exec = 1"
-       line 397, ".input.spin", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, ".input.spin", state 933, "(1)"
-       line 397, ".input.spin", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, ".input.spin", state 934, "else"
-       line 397, ".input.spin", state 937, "(1)"
-       line 401, ".input.spin", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 947, "(1)"
-       line 401, ".input.spin", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, ".input.spin", state 948, "else"
-       line 401, ".input.spin", state 951, "(1)"
-       line 401, ".input.spin", state 952, "(1)"
-       line 401, ".input.spin", state 952, "(1)"
-       line 399, ".input.spin", state 957, "((i<1))"
-       line 399, ".input.spin", state 957, "((i>=1))"
-       line 406, ".input.spin", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 976, "(1)"
-       line 407, ".input.spin", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, ".input.spin", state 977, "else"
-       line 407, ".input.spin", state 980, "(1)"
-       line 407, ".input.spin", state 981, "(1)"
-       line 407, ".input.spin", state 981, "(1)"
-       line 411, ".input.spin", state 989, "(1)"
-       line 411, ".input.spin", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, ".input.spin", state 990, "else"
-       line 411, ".input.spin", state 993, "(1)"
-       line 411, ".input.spin", state 994, "(1)"
-       line 411, ".input.spin", state 994, "(1)"
-       line 409, ".input.spin", state 999, "((i<1))"
-       line 409, ".input.spin", state 999, "((i>=1))"
-       line 416, ".input.spin", state 1006, "(1)"
-       line 416, ".input.spin", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, ".input.spin", state 1007, "else"
-       line 416, ".input.spin", state 1010, "(1)"
-       line 416, ".input.spin", state 1011, "(1)"
-       line 416, ".input.spin", state 1011, "(1)"
-       line 418, ".input.spin", state 1014, "(1)"
-       line 418, ".input.spin", state 1014, "(1)"
-       line 360, ".input.spin", state 1023, "sighand_exec = 1"
-       line 401, ".input.spin", state 1054, "(1)"
-       line 406, ".input.spin", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1113, "(1)"
-       line 401, ".input.spin", state 1151, "(1)"
-       line 406, ".input.spin", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1210, "(1)"
-       line 397, ".input.spin", state 1236, "(1)"
-       line 401, ".input.spin", state 1250, "(1)"
-       line 406, ".input.spin", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1309, "(1)"
-       line 401, ".input.spin", state 1350, "(1)"
-       line 406, ".input.spin", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1409, "(1)"
-       line 173, ".input.spin", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 1432, "(1)"
-       line 177, ".input.spin", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1441, "(1)"
-       line 177, ".input.spin", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 1442, "else"
-       line 175, ".input.spin", state 1447, "((j<1))"
-       line 175, ".input.spin", state 1447, "((j>=1))"
-       line 181, ".input.spin", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1462, "(1)"
-       line 162, ".input.spin", state 1470, "(1)"
-       line 162, ".input.spin", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 1471, "else"
-       line 160, ".input.spin", state 1476, "((j<1))"
-       line 160, ".input.spin", state 1476, "((j>=1))"
-       line 166, ".input.spin", state 1482, "(1)"
-       line 166, ".input.spin", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 1483, "else"
-       line 168, ".input.spin", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 1486, "else"
-       line 173, ".input.spin", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, ".input.spin", state 1495, "(1)"
-       line 177, ".input.spin", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 1504, "(1)"
-       line 177, ".input.spin", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, ".input.spin", state 1505, "else"
-       line 175, ".input.spin", state 1510, "((j<1))"
-       line 175, ".input.spin", state 1510, "((j>=1))"
-       line 181, ".input.spin", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 1525, "(1)"
-       line 162, ".input.spin", state 1533, "(1)"
-       line 162, ".input.spin", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, ".input.spin", state 1534, "else"
-       line 160, ".input.spin", state 1539, "((j<1))"
-       line 160, ".input.spin", state 1539, "((j>=1))"
-       line 166, ".input.spin", state 1545, "(1)"
-       line 166, ".input.spin", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, ".input.spin", state 1546, "else"
-       line 168, ".input.spin", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, ".input.spin", state 1549, "else"
-       line 200, ".input.spin", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, ".input.spin", state 1551, "else"
-       line 212, ".input.spin", state 1555, "((i<1))"
-       line 212, ".input.spin", state 1555, "((i>=1))"
-       line 173, ".input.spin", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 1562, "(1)"
-       line 177, ".input.spin", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1571, "(1)"
-       line 177, ".input.spin", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 1572, "else"
-       line 175, ".input.spin", state 1577, "((j<1))"
-       line 175, ".input.spin", state 1577, "((j>=1))"
-       line 181, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1592, "(1)"
-       line 162, ".input.spin", state 1600, "(1)"
-       line 162, ".input.spin", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 1601, "else"
-       line 160, ".input.spin", state 1606, "((j<1))"
-       line 160, ".input.spin", state 1606, "((j>=1))"
-       line 166, ".input.spin", state 1612, "(1)"
-       line 166, ".input.spin", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 1613, "else"
-       line 168, ".input.spin", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 1616, "else"
-       line 200, ".input.spin", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, ".input.spin", state 1618, "else"
-       line 219, ".input.spin", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, ".input.spin", state 1619, "else"
-       line 354, ".input.spin", state 1625, "((sighand_exec==1))"
-       line 354, ".input.spin", state 1625, "else"
-       line 360, ".input.spin", state 1628, "sighand_exec = 1"
-       line 397, ".input.spin", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, ".input.spin", state 1643, "(1)"
-       line 397, ".input.spin", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, ".input.spin", state 1644, "else"
-       line 397, ".input.spin", state 1647, "(1)"
-       line 401, ".input.spin", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 1657, "(1)"
-       line 401, ".input.spin", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, ".input.spin", state 1658, "else"
-       line 401, ".input.spin", state 1661, "(1)"
-       line 401, ".input.spin", state 1662, "(1)"
-       line 401, ".input.spin", state 1662, "(1)"
-       line 399, ".input.spin", state 1667, "((i<1))"
-       line 399, ".input.spin", state 1667, "((i>=1))"
-       line 406, ".input.spin", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 1686, "(1)"
-       line 407, ".input.spin", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, ".input.spin", state 1687, "else"
-       line 407, ".input.spin", state 1690, "(1)"
-       line 407, ".input.spin", state 1691, "(1)"
-       line 407, ".input.spin", state 1691, "(1)"
-       line 411, ".input.spin", state 1699, "(1)"
-       line 411, ".input.spin", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, ".input.spin", state 1700, "else"
-       line 411, ".input.spin", state 1703, "(1)"
-       line 411, ".input.spin", state 1704, "(1)"
-       line 411, ".input.spin", state 1704, "(1)"
-       line 409, ".input.spin", state 1709, "((i<1))"
-       line 409, ".input.spin", state 1709, "((i>=1))"
-       line 416, ".input.spin", state 1716, "(1)"
-       line 416, ".input.spin", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, ".input.spin", state 1717, "else"
-       line 416, ".input.spin", state 1720, "(1)"
-       line 416, ".input.spin", state 1721, "(1)"
-       line 416, ".input.spin", state 1721, "(1)"
-       line 418, ".input.spin", state 1724, "(1)"
-       line 418, ".input.spin", state 1724, "(1)"
-       line 360, ".input.spin", state 1733, "sighand_exec = 1"
-       line 177, ".input.spin", state 1758, "(1)"
-       line 181, ".input.spin", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1779, "(1)"
-       line 162, ".input.spin", state 1787, "(1)"
-       line 166, ".input.spin", state 1799, "(1)"
-       line 173, ".input.spin", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, ".input.spin", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 1842, "(1)"
-       line 162, ".input.spin", state 1850, "(1)"
-       line 166, ".input.spin", state 1862, "(1)"
-       line 173, ".input.spin", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, ".input.spin", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1909, "(1)"
-       line 162, ".input.spin", state 1917, "(1)"
-       line 166, ".input.spin", state 1929, "(1)"
-       line 700, ".input.spin", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 0.12 seconds
-pan: rate 167733.33 states/second
-pan: avg transition delay 5.6709e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/asserts.spin.input b/formal-model/urcu/result-signal-over-writer/asserts.spin.input
deleted file mode 100644 (file)
index 953115f..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/asserts.spin.input.trail b/formal-model/urcu/result-signal-over-writer/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/DEFINES b/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/DEFINES
deleted file mode 100644 (file)
index ec600f0..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/Makefile b/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.log b/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.log
deleted file mode 100644 (file)
index c102ffb..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 40 byte, depth reached 7872, errors: 0
-    20128 states, stored
-   191477 states, matched
-   211605 transitions (= stored+matched)
-   712166 atomic steps
-hash conflicts:       942 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.305      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.467      actual memory usage for states (unsuccessful compression: 112.36%)
-               state-vector as stored = 48 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.229      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 401, ".input.spin", state 330, "(1)"
-       line 612, ".input.spin", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 397, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 406, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 59, "(1)"
-       line 416, ".input.spin", state 89, "(1)"
-       line 397, ".input.spin", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 160, "(1)"
-       line 650, ".input.spin", state 213, "(1)"
-       line 173, ".input.spin", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 233, "(1)"
-       line 158, ".input.spin", state 254, "(1)"
-       line 162, ".input.spin", state 262, "(1)"
-       line 166, ".input.spin", state 274, "(1)"
-       line 173, ".input.spin", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, ".input.spin", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 317, "(1)"
-       line 162, ".input.spin", state 325, "(1)"
-       line 166, ".input.spin", state 337, "(1)"
-       line 173, ".input.spin", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, ".input.spin", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 384, "(1)"
-       line 162, ".input.spin", state 392, "(1)"
-       line 166, ".input.spin", state 404, "(1)"
-       line 397, ".input.spin", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 441, "(1)"
-       line 406, ".input.spin", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 470, "(1)"
-       line 416, ".input.spin", state 500, "(1)"
-       line 397, ".input.spin", state 526, "(1)"
-       line 401, ".input.spin", state 540, "(1)"
-       line 406, ".input.spin", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 599, "(1)"
-       line 401, ".input.spin", state 640, "(1)"
-       line 406, ".input.spin", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 699, "(1)"
-       line 173, ".input.spin", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 722, "(1)"
-       line 177, ".input.spin", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 731, "(1)"
-       line 177, ".input.spin", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 732, "else"
-       line 175, ".input.spin", state 737, "((j<1))"
-       line 175, ".input.spin", state 737, "((j>=1))"
-       line 181, ".input.spin", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 752, "(1)"
-       line 162, ".input.spin", state 760, "(1)"
-       line 162, ".input.spin", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 761, "else"
-       line 160, ".input.spin", state 766, "((j<1))"
-       line 160, ".input.spin", state 766, "((j>=1))"
-       line 166, ".input.spin", state 772, "(1)"
-       line 166, ".input.spin", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 773, "else"
-       line 168, ".input.spin", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 776, "else"
-       line 173, ".input.spin", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, ".input.spin", state 785, "(1)"
-       line 177, ".input.spin", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 794, "(1)"
-       line 177, ".input.spin", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, ".input.spin", state 795, "else"
-       line 175, ".input.spin", state 800, "((j<1))"
-       line 175, ".input.spin", state 800, "((j>=1))"
-       line 181, ".input.spin", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 815, "(1)"
-       line 162, ".input.spin", state 823, "(1)"
-       line 162, ".input.spin", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, ".input.spin", state 824, "else"
-       line 160, ".input.spin", state 829, "((j<1))"
-       line 160, ".input.spin", state 829, "((j>=1))"
-       line 166, ".input.spin", state 835, "(1)"
-       line 166, ".input.spin", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, ".input.spin", state 836, "else"
-       line 168, ".input.spin", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, ".input.spin", state 839, "else"
-       line 200, ".input.spin", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, ".input.spin", state 841, "else"
-       line 212, ".input.spin", state 845, "((i<1))"
-       line 212, ".input.spin", state 845, "((i>=1))"
-       line 173, ".input.spin", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 852, "(1)"
-       line 177, ".input.spin", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 861, "(1)"
-       line 177, ".input.spin", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 862, "else"
-       line 175, ".input.spin", state 867, "((j<1))"
-       line 175, ".input.spin", state 867, "((j>=1))"
-       line 181, ".input.spin", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 882, "(1)"
-       line 162, ".input.spin", state 890, "(1)"
-       line 162, ".input.spin", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 891, "else"
-       line 160, ".input.spin", state 896, "((j<1))"
-       line 160, ".input.spin", state 896, "((j>=1))"
-       line 166, ".input.spin", state 902, "(1)"
-       line 166, ".input.spin", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 903, "else"
-       line 168, ".input.spin", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 906, "else"
-       line 200, ".input.spin", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, ".input.spin", state 908, "else"
-       line 219, ".input.spin", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, ".input.spin", state 909, "else"
-       line 354, ".input.spin", state 915, "((sighand_exec==1))"
-       line 354, ".input.spin", state 915, "else"
-       line 360, ".input.spin", state 918, "sighand_exec = 1"
-       line 397, ".input.spin", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, ".input.spin", state 933, "(1)"
-       line 397, ".input.spin", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, ".input.spin", state 934, "else"
-       line 397, ".input.spin", state 937, "(1)"
-       line 401, ".input.spin", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 947, "(1)"
-       line 401, ".input.spin", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, ".input.spin", state 948, "else"
-       line 401, ".input.spin", state 951, "(1)"
-       line 401, ".input.spin", state 952, "(1)"
-       line 401, ".input.spin", state 952, "(1)"
-       line 399, ".input.spin", state 957, "((i<1))"
-       line 399, ".input.spin", state 957, "((i>=1))"
-       line 406, ".input.spin", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 976, "(1)"
-       line 407, ".input.spin", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, ".input.spin", state 977, "else"
-       line 407, ".input.spin", state 980, "(1)"
-       line 407, ".input.spin", state 981, "(1)"
-       line 407, ".input.spin", state 981, "(1)"
-       line 411, ".input.spin", state 989, "(1)"
-       line 411, ".input.spin", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, ".input.spin", state 990, "else"
-       line 411, ".input.spin", state 993, "(1)"
-       line 411, ".input.spin", state 994, "(1)"
-       line 411, ".input.spin", state 994, "(1)"
-       line 409, ".input.spin", state 999, "((i<1))"
-       line 409, ".input.spin", state 999, "((i>=1))"
-       line 416, ".input.spin", state 1006, "(1)"
-       line 416, ".input.spin", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, ".input.spin", state 1007, "else"
-       line 416, ".input.spin", state 1010, "(1)"
-       line 416, ".input.spin", state 1011, "(1)"
-       line 416, ".input.spin", state 1011, "(1)"
-       line 418, ".input.spin", state 1014, "(1)"
-       line 418, ".input.spin", state 1014, "(1)"
-       line 360, ".input.spin", state 1023, "sighand_exec = 1"
-       line 401, ".input.spin", state 1054, "(1)"
-       line 406, ".input.spin", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1113, "(1)"
-       line 401, ".input.spin", state 1151, "(1)"
-       line 406, ".input.spin", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1210, "(1)"
-       line 397, ".input.spin", state 1236, "(1)"
-       line 401, ".input.spin", state 1250, "(1)"
-       line 406, ".input.spin", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1309, "(1)"
-       line 401, ".input.spin", state 1350, "(1)"
-       line 406, ".input.spin", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, ".input.spin", state 1409, "(1)"
-       line 173, ".input.spin", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 1432, "(1)"
-       line 177, ".input.spin", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1441, "(1)"
-       line 177, ".input.spin", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 1442, "else"
-       line 175, ".input.spin", state 1447, "((j<1))"
-       line 175, ".input.spin", state 1447, "((j>=1))"
-       line 181, ".input.spin", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1462, "(1)"
-       line 162, ".input.spin", state 1470, "(1)"
-       line 162, ".input.spin", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 1471, "else"
-       line 160, ".input.spin", state 1476, "((j<1))"
-       line 160, ".input.spin", state 1476, "((j>=1))"
-       line 166, ".input.spin", state 1482, "(1)"
-       line 166, ".input.spin", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 1483, "else"
-       line 168, ".input.spin", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 1486, "else"
-       line 173, ".input.spin", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, ".input.spin", state 1495, "(1)"
-       line 177, ".input.spin", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 1504, "(1)"
-       line 177, ".input.spin", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, ".input.spin", state 1505, "else"
-       line 175, ".input.spin", state 1510, "((j<1))"
-       line 175, ".input.spin", state 1510, "((j>=1))"
-       line 181, ".input.spin", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 1525, "(1)"
-       line 162, ".input.spin", state 1533, "(1)"
-       line 162, ".input.spin", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, ".input.spin", state 1534, "else"
-       line 160, ".input.spin", state 1539, "((j<1))"
-       line 160, ".input.spin", state 1539, "((j>=1))"
-       line 166, ".input.spin", state 1545, "(1)"
-       line 166, ".input.spin", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, ".input.spin", state 1546, "else"
-       line 168, ".input.spin", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, ".input.spin", state 1549, "else"
-       line 200, ".input.spin", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, ".input.spin", state 1551, "else"
-       line 212, ".input.spin", state 1555, "((i<1))"
-       line 212, ".input.spin", state 1555, "((i>=1))"
-       line 173, ".input.spin", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, ".input.spin", state 1562, "(1)"
-       line 177, ".input.spin", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1571, "(1)"
-       line 177, ".input.spin", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, ".input.spin", state 1572, "else"
-       line 175, ".input.spin", state 1577, "((j<1))"
-       line 175, ".input.spin", state 1577, "((j>=1))"
-       line 181, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1592, "(1)"
-       line 162, ".input.spin", state 1600, "(1)"
-       line 162, ".input.spin", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, ".input.spin", state 1601, "else"
-       line 160, ".input.spin", state 1606, "((j<1))"
-       line 160, ".input.spin", state 1606, "((j>=1))"
-       line 166, ".input.spin", state 1612, "(1)"
-       line 166, ".input.spin", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, ".input.spin", state 1613, "else"
-       line 168, ".input.spin", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, ".input.spin", state 1616, "else"
-       line 200, ".input.spin", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, ".input.spin", state 1618, "else"
-       line 219, ".input.spin", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, ".input.spin", state 1619, "else"
-       line 354, ".input.spin", state 1625, "((sighand_exec==1))"
-       line 354, ".input.spin", state 1625, "else"
-       line 360, ".input.spin", state 1628, "sighand_exec = 1"
-       line 397, ".input.spin", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, ".input.spin", state 1643, "(1)"
-       line 397, ".input.spin", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, ".input.spin", state 1644, "else"
-       line 397, ".input.spin", state 1647, "(1)"
-       line 401, ".input.spin", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, ".input.spin", state 1657, "(1)"
-       line 401, ".input.spin", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, ".input.spin", state 1658, "else"
-       line 401, ".input.spin", state 1661, "(1)"
-       line 401, ".input.spin", state 1662, "(1)"
-       line 401, ".input.spin", state 1662, "(1)"
-       line 399, ".input.spin", state 1667, "((i<1))"
-       line 399, ".input.spin", state 1667, "((i>=1))"
-       line 406, ".input.spin", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, ".input.spin", state 1686, "(1)"
-       line 407, ".input.spin", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, ".input.spin", state 1687, "else"
-       line 407, ".input.spin", state 1690, "(1)"
-       line 407, ".input.spin", state 1691, "(1)"
-       line 407, ".input.spin", state 1691, "(1)"
-       line 411, ".input.spin", state 1699, "(1)"
-       line 411, ".input.spin", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, ".input.spin", state 1700, "else"
-       line 411, ".input.spin", state 1703, "(1)"
-       line 411, ".input.spin", state 1704, "(1)"
-       line 411, ".input.spin", state 1704, "(1)"
-       line 409, ".input.spin", state 1709, "((i<1))"
-       line 409, ".input.spin", state 1709, "((i>=1))"
-       line 416, ".input.spin", state 1716, "(1)"
-       line 416, ".input.spin", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, ".input.spin", state 1717, "else"
-       line 416, ".input.spin", state 1720, "(1)"
-       line 416, ".input.spin", state 1721, "(1)"
-       line 416, ".input.spin", state 1721, "(1)"
-       line 418, ".input.spin", state 1724, "(1)"
-       line 418, ".input.spin", state 1724, "(1)"
-       line 360, ".input.spin", state 1733, "sighand_exec = 1"
-       line 177, ".input.spin", state 1758, "(1)"
-       line 181, ".input.spin", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1779, "(1)"
-       line 162, ".input.spin", state 1787, "(1)"
-       line 166, ".input.spin", state 1799, "(1)"
-       line 173, ".input.spin", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, ".input.spin", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, ".input.spin", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, ".input.spin", state 1842, "(1)"
-       line 162, ".input.spin", state 1850, "(1)"
-       line 166, ".input.spin", state 1862, "(1)"
-       line 173, ".input.spin", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, ".input.spin", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, ".input.spin", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, ".input.spin", state 1909, "(1)"
-       line 162, ".input.spin", state 1917, "(1)"
-       line 166, ".input.spin", state 1929, "(1)"
-       line 700, ".input.spin", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 0.12 seconds
-pan: rate 167733.33 states/second
-pan: avg transition delay 5.6709e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.spin.input b/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.spin.input
deleted file mode 100644 (file)
index 953115f..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.spin.input.trail b/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/references.txt b/formal-model/urcu/result-signal-over-writer/result-signal-over-writer/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/.input.define b/formal-model/urcu/result-signal-over-writer/testmerge/.input.define
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/.input.spin b/formal-model/urcu/result-signal-over-writer/testmerge/.input.spin
deleted file mode 100644 (file)
index f2737c4..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-
-#define NR_READERS 2
-#define NR_WRITERS 1
-
-#define NR_PROCS 3
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/DEFINES b/formal-model/urcu/result-signal-over-writer/testmerge/DEFINES
deleted file mode 100644 (file)
index 12c751b..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#define NR_READERS 2
-#define NR_WRITERS 1
-
-#define NR_PROCS 3
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/Makefile b/formal-model/urcu/result-signal-over-writer/testmerge/Makefile
deleted file mode 100644 (file)
index ca932b7..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/asserts.log b/formal-model/urcu/result-signal-over-writer/testmerge/asserts.log
deleted file mode 100644 (file)
index 75f2427..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-spin: line 295 replacement value: tmp
-spin: line 295 ".input.spin", Error: formal par of wait_for_quiescent_state contains replacement value saw '-2'' near 'readerid'
-spin: 1 error(s) - aborting
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/asserts.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/asserts.spin.input
deleted file mode 100644 (file)
index b06898a..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#define read_free_race (read_generation == last_free_gen)
-#define read_free      (free_done && data_access)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/asserts.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/references.txt b/formal-model/urcu/result-signal-over-writer/testmerge/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu.sh b/formal-model/urcu/result-signal-over-writer/testmerge/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin b/formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin
deleted file mode 100644 (file)
index 61d9052..0000000
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin.bkp2 b/formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin.bkp2
deleted file mode 100644 (file)
index b1c8311..0000000
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_WRITERS 1
-#define NR_READERS 3
-
-/* Number of reader and writer processes */
-#define NR_PROCS 5
-
-/* Includes reader, writer and init process */
-#define MAX_NR_PROCS 5
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-               skip;
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-               skip;
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_writerid() (get_pid())
-#define get_readerid() (get_writerrid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       skip;
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2, nest)
-{
-       nest_i = 0;
-       do
-       :: nest_i < nest ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               ooo_mem(i);
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= nest -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < nest ->
-               ooo_mem(i);
-               smp_mb(i);
-               ooo_mem(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= nest -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [2] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2, 2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [1] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               ooo_mem(i);
-               smp_mb(i);
-               ooo_mem(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin.bkp5 b/formal-model/urcu/result-signal-over-writer/testmerge/urcu.spin.bkp5
deleted file mode 100644 (file)
index 324ee39..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.log
deleted file mode 100644 (file)
index 6a04aba..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 566)
-Depth=    4234 States=    1e+06 Transitions=  1.7e+07 Memory=   527.287        t=   31.3 R=   3e+04
-Depth=    4234 States=    2e+06 Transitions= 3.44e+07 Memory=   588.322        t=   63.9 R=   3e+04
-Depth=    4234 States=    3e+06 Transitions=  5.2e+07 Memory=   649.358        t=     97 R=   3e+04
-pan: resizing hashtable to -w22..  done
-Depth=    4234 States=    4e+06 Transitions= 6.97e+07 Memory=   741.416        t=    130 R=   3e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 4234, errors: 0
-  4027146 states, stored
- 66145121 states, matched
- 70172267 transitions (= stored+matched)
-2.6437688e+08 atomic steps
-hash conflicts:  47318190 (resolved)
-
-Stats on memory usage (in Megabytes):
-  322.609      equivalent memory usage for states (stored*(State-vector + overhead))
-  253.418      actual memory usage for states (compression: 78.55%)
-               state-vector as stored = 38 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  743.076      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 288, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 61, "(1)"
-       line 307, "pan.___", state 91, "(1)"
-       line 288, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 149, "(1)"
-       line 307, "pan.___", state 179, "(1)"
-       line 288, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 238, "(1)"
-       line 307, "pan.___", state 268, "(1)"
-       line 158, "pan.___", state 289, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 291, "(1)"
-       line 162, "pan.___", state 298, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 300, "(1)"
-       line 162, "pan.___", state 301, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 301, "else"
-       line 160, "pan.___", state 306, "((j<1))"
-       line 160, "pan.___", state 306, "((j>=1))"
-       line 166, "pan.___", state 311, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 321, "(1)"
-       line 147, "pan.___", state 329, "(1)"
-       line 147, "pan.___", state 330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 330, "else"
-       line 145, "pan.___", state 335, "((j<1))"
-       line 145, "pan.___", state 335, "((j>=1))"
-       line 151, "pan.___", state 341, "(1)"
-       line 151, "pan.___", state 342, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 342, "else"
-       line 153, "pan.___", state 345, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 345, "else"
-       line 185, "pan.___", state 347, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 347, "else"
-       line 158, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 354, "(1)"
-       line 162, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 162, "pan.___", state 363, "(1)"
-       line 162, "pan.___", state 364, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 162, "pan.___", state 364, "else"
-       line 160, "pan.___", state 369, "((j<1))"
-       line 160, "pan.___", state 369, "((j>=1))"
-       line 166, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 384, "(1)"
-       line 147, "pan.___", state 392, "(1)"
-       line 147, "pan.___", state 393, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 147, "pan.___", state 393, "else"
-       line 145, "pan.___", state 398, "((j<1))"
-       line 145, "pan.___", state 398, "((j>=1))"
-       line 151, "pan.___", state 404, "(1)"
-       line 151, "pan.___", state 405, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 151, "pan.___", state 405, "else"
-       line 153, "pan.___", state 408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 153, "pan.___", state 408, "else"
-       line 185, "pan.___", state 410, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 185, "pan.___", state 410, "else"
-       line 199, "pan.___", state 414, "((i<1))"
-       line 199, "pan.___", state 414, "((i>=1))"
-       line 158, "pan.___", state 419, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 421, "(1)"
-       line 162, "pan.___", state 428, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 430, "(1)"
-       line 162, "pan.___", state 431, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 431, "else"
-       line 160, "pan.___", state 436, "((j<1))"
-       line 160, "pan.___", state 436, "((j>=1))"
-       line 166, "pan.___", state 441, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 451, "(1)"
-       line 147, "pan.___", state 459, "(1)"
-       line 147, "pan.___", state 460, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 460, "else"
-       line 145, "pan.___", state 465, "((j<1))"
-       line 145, "pan.___", state 465, "((j>=1))"
-       line 151, "pan.___", state 471, "(1)"
-       line 151, "pan.___", state 472, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 472, "else"
-       line 153, "pan.___", state 475, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 475, "else"
-       line 185, "pan.___", state 477, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 477, "else"
-       line 288, "pan.___", state 492, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 537, "(1)"
-       line 307, "pan.___", state 567, "(1)"
-       line 288, "pan.___", state 580, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 612, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 625, "(1)"
-       line 307, "pan.___", state 655, "(1)"
-       line 288, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 713, "(1)"
-       line 307, "pan.___", state 743, "(1)"
-       line 158, "pan.___", state 758, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 760, "(1)"
-       line 162, "pan.___", state 767, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 769, "(1)"
-       line 162, "pan.___", state 770, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 770, "else"
-       line 160, "pan.___", state 775, "((j<1))"
-       line 160, "pan.___", state 775, "((j>=1))"
-       line 166, "pan.___", state 780, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 790, "(1)"
-       line 147, "pan.___", state 798, "(1)"
-       line 147, "pan.___", state 799, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 799, "else"
-       line 145, "pan.___", state 804, "((j<1))"
-       line 145, "pan.___", state 804, "((j>=1))"
-       line 151, "pan.___", state 810, "(1)"
-       line 151, "pan.___", state 811, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 811, "else"
-       line 153, "pan.___", state 814, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 814, "else"
-       line 185, "pan.___", state 816, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 816, "else"
-       line 158, "pan.___", state 821, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 823, "(1)"
-       line 162, "pan.___", state 830, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 162, "pan.___", state 832, "(1)"
-       line 162, "pan.___", state 833, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 162, "pan.___", state 833, "else"
-       line 160, "pan.___", state 838, "((j<1))"
-       line 160, "pan.___", state 838, "((j>=1))"
-       line 166, "pan.___", state 843, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 853, "(1)"
-       line 147, "pan.___", state 861, "(1)"
-       line 147, "pan.___", state 862, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 147, "pan.___", state 862, "else"
-       line 145, "pan.___", state 867, "((j<1))"
-       line 145, "pan.___", state 867, "((j>=1))"
-       line 151, "pan.___", state 873, "(1)"
-       line 151, "pan.___", state 874, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 151, "pan.___", state 874, "else"
-       line 153, "pan.___", state 877, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 153, "pan.___", state 877, "else"
-       line 185, "pan.___", state 879, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 185, "pan.___", state 879, "else"
-       line 199, "pan.___", state 883, "((i<1))"
-       line 199, "pan.___", state 883, "((i>=1))"
-       line 158, "pan.___", state 888, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 890, "(1)"
-       line 162, "pan.___", state 897, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 899, "(1)"
-       line 162, "pan.___", state 900, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 900, "else"
-       line 160, "pan.___", state 905, "((j<1))"
-       line 160, "pan.___", state 905, "((j>=1))"
-       line 166, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 920, "(1)"
-       line 147, "pan.___", state 928, "(1)"
-       line 147, "pan.___", state 929, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 929, "else"
-       line 145, "pan.___", state 934, "((j<1))"
-       line 145, "pan.___", state 934, "((j>=1))"
-       line 151, "pan.___", state 940, "(1)"
-       line 151, "pan.___", state 941, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 941, "else"
-       line 153, "pan.___", state 944, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 944, "else"
-       line 185, "pan.___", state 946, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 946, "else"
-       line 288, "pan.___", state 956, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 988, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1001, "(1)"
-       line 307, "pan.___", state 1031, "(1)"
-       line 288, "pan.___", state 1052, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1084, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1097, "(1)"
-       line 307, "pan.___", state 1127, "(1)"
-       line 433, "pan.___", state 1140, "-end-"
-       (125 of 1140 states)
-unreached in proctype urcu_writer
-       line 288, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 59, "(1)"
-       line 302, "pan.___", state 72, "(1)"
-       line 307, "pan.___", state 89, "(1)"
-       line 288, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 151, "(1)"
-       line 302, "pan.___", state 164, "(1)"
-       line 467, "pan.___", state 195, "(1)"
-       line 158, "pan.___", state 205, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 214, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 237, "(1)"
-       line 147, "pan.___", state 245, "(1)"
-       line 151, "pan.___", state 257, "(1)"
-       line 158, "pan.___", state 268, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 290, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 300, "(1)"
-       line 147, "pan.___", state 308, "(1)"
-       line 151, "pan.___", state 320, "(1)"
-       line 158, "pan.___", state 335, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 344, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 357, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 367, "(1)"
-       line 147, "pan.___", state 375, "(1)"
-       line 151, "pan.___", state 387, "(1)"
-       line 288, "pan.___", state 403, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 448, "(1)"
-       line 302, "pan.___", state 461, "(1)"
-       line 307, "pan.___", state 478, "(1)"
-       line 288, "pan.___", state 495, "(1)"
-       line 292, "pan.___", state 507, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 525, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 551, "(1)"
-       line 307, "pan.___", state 568, "(1)"
-       line 292, "pan.___", state 598, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 642, "(1)"
-       line 307, "pan.___", state 659, "(1)"
-       line 162, "pan.___", state 681, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 694, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 704, "(1)"
-       line 147, "pan.___", state 712, "(1)"
-       line 151, "pan.___", state 724, "(1)"
-       line 158, "pan.___", state 735, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 757, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 767, "(1)"
-       line 147, "pan.___", state 775, "(1)"
-       line 151, "pan.___", state 787, "(1)"
-       line 158, "pan.___", state 802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 811, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 824, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 834, "(1)"
-       line 147, "pan.___", state 842, "(1)"
-       line 151, "pan.___", state 854, "(1)"
-       line 288, "pan.___", state 878, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 288, "pan.___", state 880, "(1)"
-       line 288, "pan.___", state 881, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 288, "pan.___", state 881, "else"
-       line 288, "pan.___", state 884, "(1)"
-       line 292, "pan.___", state 892, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 894, "(1)"
-       line 292, "pan.___", state 895, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 292, "pan.___", state 895, "else"
-       line 292, "pan.___", state 898, "(1)"
-       line 292, "pan.___", state 899, "(1)"
-       line 292, "pan.___", state 899, "(1)"
-       line 290, "pan.___", state 904, "((i<1))"
-       line 290, "pan.___", state 904, "((i>=1))"
-       line 297, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 923, "(1)"
-       line 298, "pan.___", state 924, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 298, "pan.___", state 924, "else"
-       line 298, "pan.___", state 927, "(1)"
-       line 298, "pan.___", state 928, "(1)"
-       line 298, "pan.___", state 928, "(1)"
-       line 302, "pan.___", state 936, "(1)"
-       line 302, "pan.___", state 937, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 302, "pan.___", state 937, "else"
-       line 302, "pan.___", state 940, "(1)"
-       line 302, "pan.___", state 941, "(1)"
-       line 302, "pan.___", state 941, "(1)"
-       line 300, "pan.___", state 946, "((i<1))"
-       line 300, "pan.___", state 946, "((i>=1))"
-       line 307, "pan.___", state 953, "(1)"
-       line 307, "pan.___", state 954, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 307, "pan.___", state 954, "else"
-       line 307, "pan.___", state 957, "(1)"
-       line 307, "pan.___", state 958, "(1)"
-       line 307, "pan.___", state 958, "(1)"
-       line 309, "pan.___", state 961, "(1)"
-       line 309, "pan.___", state 961, "(1)"
-       line 292, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1008, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1034, "(1)"
-       line 307, "pan.___", state 1051, "(1)"
-       line 292, "pan.___", state 1078, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1096, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1122, "(1)"
-       line 307, "pan.___", state 1139, "(1)"
-       line 288, "pan.___", state 1156, "(1)"
-       line 292, "pan.___", state 1168, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1186, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1212, "(1)"
-       line 307, "pan.___", state 1229, "(1)"
-       line 292, "pan.___", state 1259, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1277, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1303, "(1)"
-       line 307, "pan.___", state 1320, "(1)"
-       line 162, "pan.___", state 1342, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1355, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1365, "(1)"
-       line 147, "pan.___", state 1373, "(1)"
-       line 151, "pan.___", state 1385, "(1)"
-       line 158, "pan.___", state 1396, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 1418, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 1428, "(1)"
-       line 147, "pan.___", state 1436, "(1)"
-       line 151, "pan.___", state 1448, "(1)"
-       line 158, "pan.___", state 1463, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 1472, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1485, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1495, "(1)"
-       line 147, "pan.___", state 1503, "(1)"
-       line 151, "pan.___", state 1515, "(1)"
-       line 288, "pan.___", state 1539, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 288, "pan.___", state 1541, "(1)"
-       line 288, "pan.___", state 1542, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 288, "pan.___", state 1542, "else"
-       line 288, "pan.___", state 1545, "(1)"
-       line 292, "pan.___", state 1553, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 1555, "(1)"
-       line 292, "pan.___", state 1556, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 292, "pan.___", state 1556, "else"
-       line 292, "pan.___", state 1559, "(1)"
-       line 292, "pan.___", state 1560, "(1)"
-       line 292, "pan.___", state 1560, "(1)"
-       line 290, "pan.___", state 1565, "((i<1))"
-       line 290, "pan.___", state 1565, "((i>=1))"
-       line 297, "pan.___", state 1571, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1584, "(1)"
-       line 298, "pan.___", state 1585, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 298, "pan.___", state 1585, "else"
-       line 298, "pan.___", state 1588, "(1)"
-       line 298, "pan.___", state 1589, "(1)"
-       line 298, "pan.___", state 1589, "(1)"
-       line 302, "pan.___", state 1597, "(1)"
-       line 302, "pan.___", state 1598, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 302, "pan.___", state 1598, "else"
-       line 302, "pan.___", state 1601, "(1)"
-       line 302, "pan.___", state 1602, "(1)"
-       line 302, "pan.___", state 1602, "(1)"
-       line 300, "pan.___", state 1607, "((i<1))"
-       line 300, "pan.___", state 1607, "((i>=1))"
-       line 307, "pan.___", state 1614, "(1)"
-       line 307, "pan.___", state 1615, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 307, "pan.___", state 1615, "else"
-       line 307, "pan.___", state 1618, "(1)"
-       line 307, "pan.___", state 1619, "(1)"
-       line 307, "pan.___", state 1619, "(1)"
-       line 309, "pan.___", state 1622, "(1)"
-       line 309, "pan.___", state 1622, "(1)"
-       line 162, "pan.___", state 1646, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1659, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1669, "(1)"
-       line 147, "pan.___", state 1677, "(1)"
-       line 151, "pan.___", state 1689, "(1)"
-       line 158, "pan.___", state 1700, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 1722, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 1732, "(1)"
-       line 147, "pan.___", state 1740, "(1)"
-       line 151, "pan.___", state 1752, "(1)"
-       line 158, "pan.___", state 1767, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 1776, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1789, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1799, "(1)"
-       line 147, "pan.___", state 1807, "(1)"
-       line 151, "pan.___", state 1819, "(1)"
-       line 510, "pan.___", state 1845, "-end-"
-       (158 of 1845 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 571, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 131 seconds
-pan: rate 30683.017 states/second
-pan: avg transition delay 1.8704e-06 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.ltl b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.spin.input
deleted file mode 100644 (file)
index 18f99c4..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 0d22946..0000000
+++ /dev/null
@@ -1,1902 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:3013
-2:2:1132
-3:0:3013
-4:1:0
-5:0:3013
-6:1:1
-7:0:3013
-8:1:2
-9:0:3013
-10:1:3
-11:0:3013
-12:3:2969
-13:0:3013
-14:3:2970
-15:0:3013
-16:3:2971
-17:0:3013
-18:3:2972
-19:0:3013
-20:3:2973
-21:0:3013
-22:3:2974
-23:0:3013
-24:3:2971
-25:0:3013
-26:3:2972
-27:0:3013
-28:3:2973
-29:0:3013
-30:3:2974
-31:0:3013
-32:3:2975
-33:0:3013
-34:3:2980
-35:0:3013
-36:3:2981
-37:0:3013
-38:3:2982
-39:0:3013
-40:3:2983
-41:0:3013
-42:3:2984
-43:0:3013
-44:3:2985
-45:0:3013
-46:3:2982
-47:0:3013
-48:3:2983
-49:0:3013
-50:3:2984
-51:0:3013
-52:3:2985
-53:0:3013
-54:3:2986
-55:0:3013
-56:3:2992
-57:0:3013
-58:3:2993
-59:0:3013
-60:3:2994
-61:0:3013
-62:3:2995
-63:0:3013
-64:3:2996
-65:0:3013
-66:3:2997
-67:0:3013
-68:3:2998
-69:0:3013
-70:3:2995
-71:0:3013
-72:2:1133
-73:0:3013
-74:2:1134
-75:2:1138
-76:2:1139
-77:2:1147
-78:2:1148
-79:2:1152
-80:2:1153
-81:2:1161
-82:2:1166
-83:2:1170
-84:2:1171
-85:2:1178
-86:2:1179
-87:2:1190
-88:2:1191
-89:2:1192
-90:2:1203
-91:2:1208
-92:2:1209
-93:0:3013
-94:2:1221
-95:2:1222
-96:0:3013
-97:2:1226
-98:2:1230
-99:2:1231
-100:2:1239
-101:2:1240
-102:2:1244
-103:2:1245
-104:2:1253
-105:2:1258
-106:2:1259
-107:2:1270
-108:2:1271
-109:2:1282
-110:2:1283
-111:2:1284
-112:2:1295
-113:2:1300
-114:2:1301
-115:0:3013
-116:2:1313
-117:0:3013
-118:2:1314
-119:0:3013
-120:2:1324
-121:0:3013
-122:2:1325
-123:0:3013
-124:2:1329
-125:2:1330
-126:2:1334
-127:2:1338
-128:2:1339
-129:2:1343
-130:2:1351
-131:2:1352
-132:2:1357
-133:2:1364
-134:2:1365
-135:2:1372
-136:2:1377
-137:0:3013
-138:2:1388
-139:0:3013
-140:2:1392
-141:2:1393
-142:2:1397
-143:2:1401
-144:2:1402
-145:2:1406
-146:2:1414
-147:2:1415
-148:2:1420
-149:2:1427
-150:2:1428
-151:2:1435
-152:2:1440
-153:0:3013
-154:2:1451
-155:0:3013
-156:2:1459
-157:2:1460
-158:2:1464
-159:2:1468
-160:2:1469
-161:2:1473
-162:2:1481
-163:2:1482
-164:2:1487
-165:2:1494
-166:2:1495
-167:2:1502
-168:2:1507
-169:0:3013
-170:2:1522
-171:0:3013
-172:2:1523
-173:2:1527
-174:2:1528
-175:2:1536
-176:2:1537
-177:2:1541
-178:2:1542
-179:2:1550
-180:2:1555
-181:2:1559
-182:2:1560
-183:2:1567
-184:2:1568
-185:2:1579
-186:2:1580
-187:2:1581
-188:2:1592
-189:2:1597
-190:2:1598
-191:0:3013
-192:2:1610
-193:0:3013
-194:2:1613
-195:2:1614
-196:2:1626
-197:2:1627
-198:2:1631
-199:2:1632
-200:2:1640
-201:2:1645
-202:2:1649
-203:2:1650
-204:2:1657
-205:2:1658
-206:2:1669
-207:2:1670
-208:2:1671
-209:2:1682
-210:2:1687
-211:2:1688
-212:0:3013
-213:2:1700
-214:0:3013
-215:2:1701
-216:0:3013
-217:2:1702
-218:0:3013
-219:2:1703
-220:0:3013
-221:2:1704
-222:2:1708
-223:2:1709
-224:2:1717
-225:2:1718
-226:2:1722
-227:2:1723
-228:2:1731
-229:2:1736
-230:2:1740
-231:2:1741
-232:2:1748
-233:2:1749
-234:2:1760
-235:2:1761
-236:2:1762
-237:2:1773
-238:2:1778
-239:2:1779
-240:0:3013
-241:2:1989
-242:0:3013
-243:2:2085
-244:0:3013
-245:2:2086
-246:0:3013
-247:2:2090
-248:0:3013
-249:2:2096
-250:2:2100
-251:2:2101
-252:2:2109
-253:2:2110
-254:2:2114
-255:2:2115
-256:2:2123
-257:2:2128
-258:2:2132
-259:2:2133
-260:2:2140
-261:2:2141
-262:2:2152
-263:2:2153
-264:2:2154
-265:2:2165
-266:2:2170
-267:2:2171
-268:0:3013
-269:2:2183
-270:0:3013
-271:2:2184
-272:2:2188
-273:2:2189
-274:2:2197
-275:2:2198
-276:2:2202
-277:2:2203
-278:2:2211
-279:2:2216
-280:2:2220
-281:2:2221
-282:2:2228
-283:2:2229
-284:2:2240
-285:2:2241
-286:2:2242
-287:2:2253
-288:2:2258
-289:2:2259
-290:0:3013
-291:2:2271
-292:0:3013
-293:2:2274
-294:2:2275
-295:2:2287
-296:2:2288
-297:2:2292
-298:2:2293
-299:2:2301
-300:2:2306
-301:2:2310
-302:2:2311
-303:2:2318
-304:2:2319
-305:2:2330
-306:2:2331
-307:2:2332
-308:2:2343
-309:2:2348
-310:2:2349
-311:0:3013
-312:2:2361
-313:0:3013
-314:2:2362
-315:0:3013
-316:2:2363
-317:0:3013
-318:2:2364
-319:0:3013
-320:2:2365
-321:2:2369
-322:2:2370
-323:2:2378
-324:2:2379
-325:2:2383
-326:2:2384
-327:2:2392
-328:2:2397
-329:2:2401
-330:2:2402
-331:2:2409
-332:2:2410
-333:2:2421
-334:2:2422
-335:2:2423
-336:2:2434
-337:2:2439
-338:2:2440
-339:0:3013
-340:2:2650
-341:0:3013
-342:2:2746
-343:0:3013
-344:2:2747
-345:0:3013
-346:2:2751
-347:0:3013
-348:2:2757
-349:0:3013
-350:2:2761
-351:2:2762
-352:2:2766
-353:2:2770
-354:2:2771
-355:2:2775
-356:2:2783
-357:2:2784
-358:2:2789
-359:2:2796
-360:2:2797
-361:2:2804
-362:2:2809
-363:0:3013
-364:2:2820
-365:0:3013
-366:2:2824
-367:2:2825
-368:2:2829
-369:2:2833
-370:2:2834
-371:2:2838
-372:2:2846
-373:2:2847
-374:2:2852
-375:2:2859
-376:2:2860
-377:2:2867
-378:2:2872
-379:0:3013
-380:2:2883
-381:0:3013
-382:2:2891
-383:2:2892
-384:2:2896
-385:2:2900
-386:2:2901
-387:2:2905
-388:2:2913
-389:2:2914
-390:2:2919
-391:2:2926
-392:2:2927
-393:2:2934
-394:2:2939
-395:0:3013
-396:2:2954
-397:0:3013
-398:2:2955
-399:0:3013
-400:2:1133
-401:0:3013
-402:2:1134
-403:2:1138
-404:2:1139
-405:2:1147
-406:2:1148
-407:2:1152
-408:2:1153
-409:2:1161
-410:2:1166
-411:2:1170
-412:2:1171
-413:2:1178
-414:2:1179
-415:2:1190
-416:2:1191
-417:2:1192
-418:2:1203
-419:2:1208
-420:2:1209
-421:0:3013
-422:2:1221
-423:2:1222
-424:0:3013
-425:2:1226
-426:2:1230
-427:2:1231
-428:2:1239
-429:2:1240
-430:2:1244
-431:2:1245
-432:2:1253
-433:2:1258
-434:2:1259
-435:2:1270
-436:2:1271
-437:2:1282
-438:2:1283
-439:2:1284
-440:2:1295
-441:2:1300
-442:2:1301
-443:0:3013
-444:2:1313
-445:0:3013
-446:2:1314
-447:0:3013
-448:2:1324
-449:0:3013
-450:2:1325
-451:0:3013
-452:2:1329
-453:2:1330
-454:2:1334
-455:2:1338
-456:2:1339
-457:2:1343
-458:2:1351
-459:2:1352
-460:2:1357
-461:2:1364
-462:2:1365
-463:2:1372
-464:2:1377
-465:0:3013
-466:2:1388
-467:0:3013
-468:2:1392
-469:2:1393
-470:2:1397
-471:2:1401
-472:2:1402
-473:2:1406
-474:2:1414
-475:2:1415
-476:2:1420
-477:2:1427
-478:2:1428
-479:2:1435
-480:2:1440
-481:0:3013
-482:2:1451
-483:0:3013
-484:2:1459
-485:2:1460
-486:2:1464
-487:2:1468
-488:2:1469
-489:2:1473
-490:2:1481
-491:2:1482
-492:2:1487
-493:2:1494
-494:2:1495
-495:2:1502
-496:2:1507
-497:0:3013
-498:2:1522
-499:0:3013
-500:2:1523
-501:2:1527
-502:2:1528
-503:2:1536
-504:2:1537
-505:2:1541
-506:2:1542
-507:2:1550
-508:2:1555
-509:2:1559
-510:2:1560
-511:2:1567
-512:2:1568
-513:2:1579
-514:2:1580
-515:2:1581
-516:2:1592
-517:2:1597
-518:2:1598
-519:0:3013
-520:2:1610
-521:0:3013
-522:2:1613
-523:2:1614
-524:2:1626
-525:2:1627
-526:2:1631
-527:2:1632
-528:2:1640
-529:2:1645
-530:2:1649
-531:2:1650
-532:2:1657
-533:2:1658
-534:2:1669
-535:2:1670
-536:2:1671
-537:2:1682
-538:2:1687
-539:2:1688
-540:0:3013
-541:2:1700
-542:0:3013
-543:2:1701
-544:0:3013
-545:2:1702
-546:0:3013
-547:2:1703
-548:0:3013
-549:2:1704
-550:2:1708
-551:2:1709
-552:2:1717
-553:2:1718
-554:2:1722
-555:2:1723
-556:2:1731
-557:2:1736
-558:2:1740
-559:2:1741
-560:2:1748
-561:2:1749
-562:2:1760
-563:2:1761
-564:2:1762
-565:2:1773
-566:2:1778
-567:2:1779
-568:0:3013
-569:2:1989
-570:0:3013
-571:2:2085
-572:0:3013
-573:2:2086
-574:0:3013
-575:2:2090
-576:0:3013
-577:2:2096
-578:2:2100
-579:2:2101
-580:2:2109
-581:2:2110
-582:2:2114
-583:2:2115
-584:2:2123
-585:2:2128
-586:2:2132
-587:2:2133
-588:2:2140
-589:2:2141
-590:2:2152
-591:2:2153
-592:2:2154
-593:2:2165
-594:2:2170
-595:2:2171
-596:0:3013
-597:2:2183
-598:0:3013
-599:2:2184
-600:2:2188
-601:2:2189
-602:2:2197
-603:2:2198
-604:2:2202
-605:2:2203
-606:2:2211
-607:2:2216
-608:2:2220
-609:2:2221
-610:2:2228
-611:2:2229
-612:2:2240
-613:2:2241
-614:2:2242
-615:2:2253
-616:2:2258
-617:2:2259
-618:0:3013
-619:2:2271
-620:0:3013
-621:2:2274
-622:2:2275
-623:2:2287
-624:2:2288
-625:2:2292
-626:2:2293
-627:2:2301
-628:2:2306
-629:2:2310
-630:2:2311
-631:2:2318
-632:2:2319
-633:2:2330
-634:2:2331
-635:2:2332
-636:2:2343
-637:2:2348
-638:2:2349
-639:0:3013
-640:2:2361
-641:0:3013
-642:2:2362
-643:0:3013
-644:2:2363
-645:0:3013
-646:2:2364
-647:0:3013
-648:2:2365
-649:2:2369
-650:2:2370
-651:2:2378
-652:2:2379
-653:2:2383
-654:2:2384
-655:2:2392
-656:2:2397
-657:2:2401
-658:2:2402
-659:2:2409
-660:2:2410
-661:2:2421
-662:2:2422
-663:2:2423
-664:2:2434
-665:2:2439
-666:2:2440
-667:0:3013
-668:2:2650
-669:0:3013
-670:2:2746
-671:0:3013
-672:2:2747
-673:0:3013
-674:2:2751
-675:0:3013
-676:2:2757
-677:0:3013
-678:2:2761
-679:2:2762
-680:2:2766
-681:2:2770
-682:2:2771
-683:2:2775
-684:2:2783
-685:2:2784
-686:2:2789
-687:2:2796
-688:2:2797
-689:2:2804
-690:2:2809
-691:0:3013
-692:2:2820
-693:0:3013
-694:2:2824
-695:2:2825
-696:2:2829
-697:2:2833
-698:2:2834
-699:2:2838
-700:2:2846
-701:2:2847
-702:2:2852
-703:2:2859
-704:2:2860
-705:2:2867
-706:2:2872
-707:0:3013
-708:2:2883
-709:0:3013
-710:2:2891
-711:2:2892
-712:2:2896
-713:2:2900
-714:2:2901
-715:2:2905
-716:2:2913
-717:2:2914
-718:2:2919
-719:2:2926
-720:2:2927
-721:2:2934
-722:2:2939
-723:0:3013
-724:2:2954
-725:0:3013
-726:2:2955
-727:0:3013
-728:2:1133
-729:0:3013
-730:2:1134
-731:2:1138
-732:2:1139
-733:2:1147
-734:2:1148
-735:2:1152
-736:2:1153
-737:2:1161
-738:2:1166
-739:2:1170
-740:2:1171
-741:2:1178
-742:2:1179
-743:2:1190
-744:2:1191
-745:2:1192
-746:2:1203
-747:2:1208
-748:2:1209
-749:0:3013
-750:2:1221
-751:2:1222
-752:0:3013
-753:2:1226
-754:2:1230
-755:2:1231
-756:2:1239
-757:2:1240
-758:2:1244
-759:2:1245
-760:2:1253
-761:2:1258
-762:2:1259
-763:2:1270
-764:2:1271
-765:2:1282
-766:2:1283
-767:2:1284
-768:2:1295
-769:2:1300
-770:2:1301
-771:0:3013
-772:2:1313
-773:0:3013
-774:2:1314
-775:0:3013
-776:2:1324
-777:0:3013
-778:2:1325
-779:0:3013
-780:2:1329
-781:2:1330
-782:2:1334
-783:2:1338
-784:2:1339
-785:2:1343
-786:2:1351
-787:2:1352
-788:2:1357
-789:2:1364
-790:2:1365
-791:2:1372
-792:2:1377
-793:0:3013
-794:2:1388
-795:0:3013
-796:2:1392
-797:2:1393
-798:2:1397
-799:2:1401
-800:2:1402
-801:2:1406
-802:2:1414
-803:2:1415
-804:2:1420
-805:2:1427
-806:2:1428
-807:2:1435
-808:2:1440
-809:0:3013
-810:2:1451
-811:0:3013
-812:2:1459
-813:2:1460
-814:2:1464
-815:2:1468
-816:2:1469
-817:2:1473
-818:2:1481
-819:2:1482
-820:2:1487
-821:2:1494
-822:2:1495
-823:2:1502
-824:2:1507
-825:0:3013
-826:2:1522
-827:0:3013
-828:2:1523
-829:2:1527
-830:2:1528
-831:2:1536
-832:2:1537
-833:2:1541
-834:2:1542
-835:2:1550
-836:2:1555
-837:2:1559
-838:2:1560
-839:2:1567
-840:2:1568
-841:2:1579
-842:2:1580
-843:2:1581
-844:2:1592
-845:2:1597
-846:2:1598
-847:0:3013
-848:2:1610
-849:0:3013
-850:2:1613
-851:2:1614
-852:2:1626
-853:2:1627
-854:2:1631
-855:2:1632
-856:2:1640
-857:2:1645
-858:2:1649
-859:2:1650
-860:2:1657
-861:2:1658
-862:2:1669
-863:2:1670
-864:2:1671
-865:2:1682
-866:2:1687
-867:2:1688
-868:0:3013
-869:2:1700
-870:0:3013
-871:2:1701
-872:0:3013
-873:2:1702
-874:0:3013
-875:2:1703
-876:0:3013
-877:2:1704
-878:2:1708
-879:2:1709
-880:2:1717
-881:2:1718
-882:2:1722
-883:2:1723
-884:2:1731
-885:2:1736
-886:2:1740
-887:2:1741
-888:2:1748
-889:2:1749
-890:2:1760
-891:2:1761
-892:2:1762
-893:2:1773
-894:2:1778
-895:2:1779
-896:0:3013
-897:2:1989
-898:0:3013
-899:2:2085
-900:0:3013
-901:2:2086
-902:0:3013
-903:2:2090
-904:0:3013
-905:2:2096
-906:2:2100
-907:2:2101
-908:2:2109
-909:2:2110
-910:2:2114
-911:2:2115
-912:2:2123
-913:2:2128
-914:2:2132
-915:2:2133
-916:2:2140
-917:2:2141
-918:2:2152
-919:2:2153
-920:2:2154
-921:2:2165
-922:2:2170
-923:2:2171
-924:0:3013
-925:2:2183
-926:0:3013
-927:2:2184
-928:2:2188
-929:2:2189
-930:2:2197
-931:2:2198
-932:2:2202
-933:2:2203
-934:2:2211
-935:2:2216
-936:2:2220
-937:2:2221
-938:2:2228
-939:2:2229
-940:2:2240
-941:2:2241
-942:2:2242
-943:2:2253
-944:2:2258
-945:2:2259
-946:0:3013
-947:2:2271
-948:0:3013
-949:2:2274
-950:2:2275
-951:2:2287
-952:2:2288
-953:2:2292
-954:2:2293
-955:2:2301
-956:2:2306
-957:2:2310
-958:2:2311
-959:2:2318
-960:2:2319
-961:2:2330
-962:2:2331
-963:2:2332
-964:2:2343
-965:2:2348
-966:2:2349
-967:0:3013
-968:2:2361
-969:0:3013
-970:2:2362
-971:0:3013
-972:2:2363
-973:0:3013
-974:2:2364
-975:0:3013
-976:2:2365
-977:2:2369
-978:2:2370
-979:2:2378
-980:2:2379
-981:2:2383
-982:2:2384
-983:2:2392
-984:2:2397
-985:2:2401
-986:2:2402
-987:2:2409
-988:2:2410
-989:2:2421
-990:2:2422
-991:2:2423
-992:2:2434
-993:2:2439
-994:2:2440
-995:0:3013
-996:2:2650
-997:0:3013
-998:2:2746
-999:0:3013
-1000:2:2747
-1001:0:3013
-1002:2:2751
-1003:0:3013
-1004:2:2757
-1005:0:3013
-1006:2:2761
-1007:2:2762
-1008:2:2766
-1009:2:2770
-1010:2:2771
-1011:2:2775
-1012:2:2783
-1013:2:2784
-1014:2:2789
-1015:2:2796
-1016:2:2797
-1017:2:2804
-1018:2:2809
-1019:0:3013
-1020:2:2820
-1021:0:3013
-1022:2:2824
-1023:2:2825
-1024:2:2829
-1025:2:2833
-1026:2:2834
-1027:2:2838
-1028:2:2846
-1029:2:2847
-1030:2:2852
-1031:2:2859
-1032:2:2860
-1033:2:2867
-1034:2:2872
-1035:0:3013
-1036:2:2883
-1037:0:3013
-1038:2:2891
-1039:2:2892
-1040:2:2896
-1041:2:2900
-1042:2:2901
-1043:2:2905
-1044:2:2913
-1045:2:2914
-1046:2:2919
-1047:2:2926
-1048:2:2927
-1049:2:2934
-1050:2:2939
-1051:0:3013
-1052:2:2954
-1053:0:3013
-1054:2:2955
-1055:0:3013
-1056:2:1133
-1057:0:3013
-1058:2:1134
-1059:2:1138
-1060:2:1139
-1061:2:1147
-1062:2:1148
-1063:2:1152
-1064:2:1153
-1065:2:1161
-1066:2:1166
-1067:2:1170
-1068:2:1171
-1069:2:1178
-1070:2:1179
-1071:2:1190
-1072:2:1191
-1073:2:1192
-1074:2:1203
-1075:2:1208
-1076:2:1209
-1077:0:3013
-1078:2:1221
-1079:2:1222
-1080:0:3013
-1081:2:1226
-1082:2:1230
-1083:2:1231
-1084:2:1239
-1085:2:1240
-1086:2:1244
-1087:2:1245
-1088:2:1253
-1089:2:1258
-1090:2:1259
-1091:2:1270
-1092:2:1271
-1093:2:1282
-1094:2:1283
-1095:2:1284
-1096:2:1295
-1097:2:1300
-1098:2:1301
-1099:0:3013
-1100:2:1313
-1101:0:3013
-1102:2:1314
-1103:0:3013
-1104:2:1324
-1105:0:3013
-1106:2:1325
-1107:0:3013
-1108:2:1329
-1109:2:1330
-1110:2:1334
-1111:2:1338
-1112:2:1339
-1113:2:1343
-1114:2:1351
-1115:2:1352
-1116:2:1357
-1117:2:1364
-1118:2:1365
-1119:2:1372
-1120:2:1377
-1121:0:3013
-1122:2:1388
-1123:0:3013
-1124:2:1392
-1125:2:1393
-1126:2:1397
-1127:2:1401
-1128:2:1402
-1129:2:1406
-1130:2:1414
-1131:2:1415
-1132:2:1420
-1133:2:1427
-1134:2:1428
-1135:2:1435
-1136:2:1440
-1137:0:3013
-1138:2:1451
-1139:0:3013
-1140:2:1459
-1141:2:1460
-1142:2:1464
-1143:2:1468
-1144:2:1469
-1145:2:1473
-1146:2:1481
-1147:2:1482
-1148:2:1487
-1149:2:1494
-1150:2:1495
-1151:2:1502
-1152:2:1507
-1153:0:3013
-1154:2:1522
-1155:0:3013
-1156:2:1523
-1157:2:1527
-1158:2:1528
-1159:2:1536
-1160:2:1537
-1161:2:1541
-1162:2:1542
-1163:2:1550
-1164:2:1555
-1165:2:1559
-1166:2:1560
-1167:2:1567
-1168:2:1568
-1169:2:1579
-1170:2:1580
-1171:2:1581
-1172:2:1592
-1173:2:1597
-1174:2:1598
-1175:0:3013
-1176:2:1610
-1177:0:3013
-1178:2:1613
-1179:2:1614
-1180:2:1626
-1181:2:1627
-1182:2:1631
-1183:2:1632
-1184:2:1640
-1185:2:1645
-1186:2:1649
-1187:2:1650
-1188:2:1657
-1189:2:1658
-1190:2:1669
-1191:2:1670
-1192:2:1671
-1193:2:1682
-1194:2:1687
-1195:2:1688
-1196:0:3013
-1197:2:1700
-1198:0:3013
-1199:2:1701
-1200:0:3013
-1201:2:1702
-1202:0:3013
-1203:2:1703
-1204:0:3013
-1205:2:1704
-1206:2:1708
-1207:2:1709
-1208:2:1717
-1209:2:1718
-1210:2:1722
-1211:2:1723
-1212:2:1731
-1213:2:1736
-1214:2:1740
-1215:2:1741
-1216:2:1748
-1217:2:1749
-1218:2:1760
-1219:2:1761
-1220:2:1762
-1221:2:1773
-1222:2:1778
-1223:2:1779
-1224:0:3013
-1225:2:1989
-1226:0:3013
-1227:2:2085
-1228:0:3013
-1229:2:2086
-1230:0:3013
-1231:2:2090
-1232:0:3013
-1233:2:2096
-1234:2:2100
-1235:2:2101
-1236:2:2109
-1237:2:2110
-1238:2:2114
-1239:2:2115
-1240:2:2123
-1241:2:2128
-1242:2:2132
-1243:2:2133
-1244:2:2140
-1245:2:2141
-1246:2:2152
-1247:2:2153
-1248:2:2154
-1249:2:2165
-1250:2:2170
-1251:2:2171
-1252:0:3013
-1253:2:2183
-1254:0:3013
-1255:2:2184
-1256:2:2188
-1257:2:2189
-1258:2:2197
-1259:2:2198
-1260:2:2202
-1261:2:2203
-1262:2:2211
-1263:2:2216
-1264:2:2220
-1265:2:2221
-1266:2:2228
-1267:2:2229
-1268:2:2240
-1269:2:2241
-1270:2:2242
-1271:2:2253
-1272:2:2258
-1273:2:2259
-1274:0:3013
-1275:2:2271
-1276:0:3013
-1277:2:2274
-1278:2:2275
-1279:2:2287
-1280:2:2288
-1281:2:2292
-1282:2:2293
-1283:2:2301
-1284:2:2306
-1285:2:2310
-1286:2:2311
-1287:2:2318
-1288:2:2319
-1289:2:2330
-1290:2:2331
-1291:2:2332
-1292:2:2343
-1293:2:2348
-1294:2:2349
-1295:0:3013
-1296:2:2361
-1297:0:3013
-1298:2:2362
-1299:0:3013
-1300:2:2363
-1301:0:3013
-1302:2:2364
-1303:0:3013
-1304:2:2365
-1305:2:2369
-1306:2:2370
-1307:2:2378
-1308:2:2379
-1309:2:2383
-1310:2:2384
-1311:2:2392
-1312:2:2397
-1313:2:2401
-1314:2:2402
-1315:2:2409
-1316:2:2410
-1317:2:2421
-1318:2:2422
-1319:2:2423
-1320:2:2434
-1321:2:2439
-1322:2:2440
-1323:0:3013
-1324:2:2650
-1325:0:3013
-1326:2:2746
-1327:0:3013
-1328:2:2747
-1329:0:3013
-1330:2:2751
-1331:0:3013
-1332:2:2757
-1333:0:3013
-1334:2:2761
-1335:2:2762
-1336:2:2766
-1337:2:2770
-1338:2:2771
-1339:2:2775
-1340:2:2783
-1341:2:2784
-1342:2:2789
-1343:2:2796
-1344:2:2797
-1345:2:2804
-1346:2:2809
-1347:0:3013
-1348:2:2820
-1349:0:3013
-1350:2:2824
-1351:2:2825
-1352:2:2829
-1353:2:2833
-1354:2:2834
-1355:2:2838
-1356:2:2846
-1357:2:2847
-1358:2:2852
-1359:2:2859
-1360:2:2860
-1361:2:2867
-1362:2:2872
-1363:0:3013
-1364:2:2883
-1365:0:3013
-1366:2:2891
-1367:2:2892
-1368:2:2896
-1369:2:2900
-1370:2:2901
-1371:2:2905
-1372:2:2913
-1373:2:2914
-1374:2:2919
-1375:2:2926
-1376:2:2927
-1377:2:2934
-1378:2:2939
-1379:0:3013
-1380:2:2954
-1381:0:3013
-1382:2:2955
-1383:0:3013
-1384:2:1133
-1385:0:3013
-1386:2:1134
-1387:2:1138
-1388:2:1139
-1389:2:1147
-1390:2:1148
-1391:2:1152
-1392:2:1153
-1393:2:1161
-1394:2:1166
-1395:2:1170
-1396:2:1171
-1397:2:1178
-1398:2:1179
-1399:2:1190
-1400:2:1191
-1401:2:1192
-1402:2:1203
-1403:2:1208
-1404:2:1209
-1405:0:3013
-1406:2:1221
-1407:2:1222
-1408:0:3013
-1409:2:1226
-1410:2:1230
-1411:2:1231
-1412:2:1239
-1413:2:1240
-1414:2:1244
-1415:2:1245
-1416:2:1253
-1417:2:1258
-1418:2:1259
-1419:2:1270
-1420:2:1271
-1421:2:1282
-1422:2:1283
-1423:2:1284
-1424:2:1295
-1425:2:1300
-1426:2:1301
-1427:0:3013
-1428:2:1313
-1429:0:3013
-1430:2:1314
-1431:0:3013
-1432:2:1324
-1433:0:3013
-1434:2:1325
-1435:0:3013
-1436:2:1329
-1437:2:1330
-1438:2:1334
-1439:2:1338
-1440:2:1339
-1441:2:1343
-1442:2:1351
-1443:2:1352
-1444:2:1357
-1445:2:1364
-1446:2:1365
-1447:2:1372
-1448:2:1377
-1449:0:3013
-1450:2:1388
-1451:0:3013
-1452:1:4
-1453:1:8
-1454:1:9
-1455:1:17
-1456:1:18
-1457:1:22
-1458:1:23
-1459:1:31
-1460:1:36
-1461:1:40
-1462:1:41
-1463:1:48
-1464:1:49
-1465:1:60
-1466:1:61
-1467:1:62
-1468:1:73
-1469:1:85
-1470:1:86
-1471:0:3013
-1472:1:91
-1473:0:3013
-1474:1:92
-1475:1:96
-1476:1:97
-1477:1:105
-1478:1:106
-1479:1:110
-1480:1:111
-1481:1:119
-1482:1:124
-1483:1:128
-1484:1:129
-1485:1:136
-1486:1:137
-1487:1:148
-1488:1:149
-1489:1:150
-1490:1:161
-1491:1:173
-1492:1:174
-1493:0:3013
-1494:1:179
-1495:0:3013
-1496:1:180
-1497:0:3013
-1498:1:181
-1499:1:185
-1500:1:186
-1501:1:194
-1502:1:195
-1503:1:199
-1504:1:200
-1505:1:208
-1506:1:213
-1507:1:217
-1508:1:218
-1509:1:225
-1510:1:226
-1511:1:237
-1512:1:238
-1513:1:239
-1514:1:250
-1515:1:262
-1516:1:263
-1517:0:3013
-1518:1:268
-1519:0:3013
-1520:1:469
-1521:0:3013
-1522:1:470
-1523:0:3013
-1524:1:3
-1525:0:3013
-1526:1:4
-1527:1:8
-1528:1:9
-1529:1:17
-1530:1:18
-1531:1:19
-1532:1:31
-1533:1:36
-1534:1:40
-1535:1:41
-1536:1:48
-1537:1:49
-1538:1:60
-1539:1:61
-1540:1:62
-1541:1:73
-1542:1:85
-1543:1:86
-1544:0:3013
-1545:1:91
-1546:0:3013
-1547:1:92
-1548:1:96
-1549:1:97
-1550:1:105
-1551:1:106
-1552:1:110
-1553:1:111
-1554:1:119
-1555:1:124
-1556:1:128
-1557:1:129
-1558:1:136
-1559:1:137
-1560:1:148
-1561:1:149
-1562:1:150
-1563:1:161
-1564:1:173
-1565:1:174
-1566:0:3013
-1567:1:271
-1568:0:3013
-1569:1:272
-1570:0:3013
-1571:1:469
-1572:0:3013
-1573:1:470
-1574:0:3013
-1575:1:475
-1576:0:3013
-1577:1:480
-1578:1:484
-1579:1:485
-1580:1:493
-1581:1:494
-1582:1:495
-1583:1:507
-1584:1:512
-1585:1:516
-1586:1:517
-1587:1:524
-1588:1:525
-1589:1:536
-1590:1:537
-1591:1:538
-1592:1:549
-1593:1:561
-1594:1:562
-1595:0:3013
-1596:1:567
-1597:0:3013
-1598:2:1392
-1599:2:1393
-1600:2:1397
-1601:2:1401
-1602:2:1402
-1603:2:1406
-1604:2:1414
-1605:2:1415
-1606:2:1420
-1607:2:1427
-1608:2:1428
-1609:2:1435
-1610:2:1440
-1611:0:3013
-1612:2:1451
-1613:0:3013
-1614:2:1459
-1615:2:1460
-1616:2:1464
-1617:2:1468
-1618:2:1469
-1619:2:1473
-1620:2:1481
-1621:2:1482
-1622:2:1487
-1623:2:1494
-1624:2:1495
-1625:2:1502
-1626:2:1507
-1627:0:3013
-1628:3:2996
-1629:0:3013
-1630:3:2997
-1631:0:3013
-1632:3:2998
-1633:0:3013
-1634:3:2999
-1635:0:3013
-1636:3:3005
-1637:0:3013
-1638:3:3010
-1639:0:3013
-1640:2:1522
-1641:0:3013
-1642:2:1523
-1643:2:1527
-1644:2:1528
-1645:2:1536
-1646:2:1537
-1647:2:1541
-1648:2:1542
-1649:2:1550
-1650:2:1555
-1651:2:1559
-1652:2:1560
-1653:2:1567
-1654:2:1568
-1655:2:1579
-1656:2:1587
-1657:2:1588
-1658:2:1592
-1659:2:1597
-1660:2:1598
-1661:0:3013
-1662:2:1610
-1663:0:3013
-1664:2:1613
-1665:2:1614
-1666:2:1626
-1667:2:1627
-1668:2:1631
-1669:2:1632
-1670:2:1640
-1671:2:1645
-1672:2:1649
-1673:2:1650
-1674:2:1657
-1675:2:1658
-1676:2:1669
-1677:2:1677
-1678:2:1678
-1679:2:1682
-1680:2:1687
-1681:2:1688
-1682:0:3013
-1683:2:1700
-1684:0:3013
-1685:2:1701
-1686:0:3013
-1687:2:1702
-1688:0:3013
-1689:2:1703
-1690:0:3013
-1691:2:1704
-1692:2:1708
-1693:2:1709
-1694:2:1717
-1695:2:1718
-1696:2:1722
-1697:2:1723
-1698:2:1731
-1699:2:1736
-1700:2:1740
-1701:2:1741
-1702:2:1748
-1703:2:1749
-1704:2:1760
-1705:2:1761
-1706:2:1762
-1707:2:1773
-1708:2:1778
-1709:2:1779
-1710:0:3013
-1711:2:1989
-1712:0:3013
-1713:2:2085
-1714:0:3013
-1715:2:2086
-1716:0:3013
-1717:2:2090
-1718:0:3013
-1719:2:2096
-1720:2:2100
-1721:2:2101
-1722:2:2109
-1723:2:2110
-1724:2:2114
-1725:2:2115
-1726:2:2123
-1727:2:2128
-1728:2:2132
-1729:2:2133
-1730:2:2140
-1731:2:2141
-1732:2:2152
-1733:2:2153
-1734:2:2154
-1735:2:2165
-1736:2:2170
-1737:2:2171
-1738:0:3013
-1739:2:2183
-1740:0:3013
-1741:2:2184
-1742:2:2188
-1743:2:2189
-1744:2:2197
-1745:2:2198
-1746:2:2202
-1747:2:2203
-1748:2:2211
-1749:2:2216
-1750:2:2220
-1751:2:2221
-1752:2:2228
-1753:2:2229
-1754:2:2240
-1755:2:2241
-1756:2:2242
-1757:2:2253
-1758:2:2258
-1759:2:2259
-1760:0:3013
-1761:2:2271
-1762:0:3013
-1763:2:2274
-1764:2:2275
-1765:2:2287
-1766:2:2288
-1767:2:2292
-1768:2:2293
-1769:2:2301
-1770:2:2306
-1771:2:2310
-1772:2:2311
-1773:2:2318
-1774:2:2319
-1775:2:2330
-1776:2:2331
-1777:2:2332
-1778:2:2343
-1779:2:2348
-1780:2:2349
-1781:0:3013
-1782:2:2361
-1783:0:3013
-1784:2:2362
-1785:0:3013
-1786:2:2363
-1787:0:3013
-1788:2:2364
-1789:0:3013
-1790:2:2365
-1791:2:2369
-1792:2:2370
-1793:2:2378
-1794:2:2379
-1795:2:2383
-1796:2:2384
-1797:2:2392
-1798:2:2397
-1799:2:2401
-1800:2:2402
-1801:2:2409
-1802:2:2410
-1803:2:2421
-1804:2:2422
-1805:2:2423
-1806:2:2434
-1807:2:2439
-1808:2:2440
-1809:0:3013
-1810:2:2650
-1811:0:3013
-1812:2:2746
-1813:0:3013
-1814:2:2747
-1815:0:3013
-1816:2:2751
-1817:0:3013
-1818:2:2757
-1819:0:3013
-1820:2:2761
-1821:2:2762
-1822:2:2766
-1823:2:2770
-1824:2:2771
-1825:2:2775
-1826:2:2783
-1827:2:2784
-1828:2:2789
-1829:2:2796
-1830:2:2797
-1831:2:2804
-1832:2:2809
-1833:0:3013
-1834:2:2820
-1835:0:3013
-1836:2:2824
-1837:2:2825
-1838:2:2829
-1839:2:2833
-1840:2:2834
-1841:2:2838
-1842:2:2846
-1843:2:2847
-1844:2:2852
-1845:2:2859
-1846:2:2860
-1847:2:2867
-1848:2:2872
-1849:0:3013
-1850:2:2883
-1851:0:3013
-1852:2:2891
-1853:2:2892
-1854:2:2896
-1855:2:2900
-1856:2:2901
-1857:2:2905
-1858:2:2913
-1859:2:2914
-1860:2:2919
-1861:2:2926
-1862:2:2927
-1863:2:2934
-1864:2:2939
-1865:0:3013
-1866:2:2954
-1867:0:3013
-1868:2:2955
-1869:0:3013
-1870:2:2958
-1871:0:3013
-1872:2:2963
-1873:0:3013
-1874:1:568
-1875:1:572
-1876:1:573
-1877:1:581
-1878:1:582
-1879:1:586
-1880:1:587
-1881:1:595
-1882:1:600
-1883:1:604
-1884:1:605
-1885:1:612
-1886:1:613
-1887:1:624
-1888:1:625
-1889:1:626
-1890:1:637
-1891:1:642
-1892:1:643
-1893:0:3013
-1894:2:2964
-1895:0:3013
-1896:1:655
-1897:0:3011
-1898:2:2963
-1899:0:3017
-1900:1:655
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.define b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.define
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.log
deleted file mode 100644 (file)
index 708dee2..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_nested.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 566)
-Depth=    4234 States=    1e+06 Transitions=  1.7e+07 Memory=   527.287        t=   31.2 R=   3e+04
-Depth=    4234 States=    2e+06 Transitions= 3.44e+07 Memory=   588.322        t=   63.7 R=   3e+04
-Depth=    4234 States=    3e+06 Transitions=  5.2e+07 Memory=   649.358        t=   96.8 R=   3e+04
-pan: resizing hashtable to -w22..  done
-Depth=    4234 States=    4e+06 Transitions= 6.97e+07 Memory=   741.416        t=    130 R=   3e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 4234, errors: 0
-  4027146 states, stored
- 66145121 states, matched
- 70172267 transitions (= stored+matched)
-2.6437688e+08 atomic steps
-hash conflicts:  47318190 (resolved)
-
-Stats on memory usage (in Megabytes):
-  322.609      equivalent memory usage for states (stored*(State-vector + overhead))
-  253.418      actual memory usage for states (compression: 78.55%)
-               state-vector as stored = 38 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  743.076      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 288, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 61, "(1)"
-       line 307, "pan.___", state 91, "(1)"
-       line 288, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 149, "(1)"
-       line 307, "pan.___", state 179, "(1)"
-       line 288, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 238, "(1)"
-       line 307, "pan.___", state 268, "(1)"
-       line 158, "pan.___", state 289, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 291, "(1)"
-       line 162, "pan.___", state 298, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 300, "(1)"
-       line 162, "pan.___", state 301, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 301, "else"
-       line 160, "pan.___", state 306, "((j<1))"
-       line 160, "pan.___", state 306, "((j>=1))"
-       line 166, "pan.___", state 311, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 321, "(1)"
-       line 147, "pan.___", state 329, "(1)"
-       line 147, "pan.___", state 330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 330, "else"
-       line 145, "pan.___", state 335, "((j<1))"
-       line 145, "pan.___", state 335, "((j>=1))"
-       line 151, "pan.___", state 341, "(1)"
-       line 151, "pan.___", state 342, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 342, "else"
-       line 153, "pan.___", state 345, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 345, "else"
-       line 185, "pan.___", state 347, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 347, "else"
-       line 158, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 354, "(1)"
-       line 162, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 162, "pan.___", state 363, "(1)"
-       line 162, "pan.___", state 364, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 162, "pan.___", state 364, "else"
-       line 160, "pan.___", state 369, "((j<1))"
-       line 160, "pan.___", state 369, "((j>=1))"
-       line 166, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 384, "(1)"
-       line 147, "pan.___", state 392, "(1)"
-       line 147, "pan.___", state 393, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 147, "pan.___", state 393, "else"
-       line 145, "pan.___", state 398, "((j<1))"
-       line 145, "pan.___", state 398, "((j>=1))"
-       line 151, "pan.___", state 404, "(1)"
-       line 151, "pan.___", state 405, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 151, "pan.___", state 405, "else"
-       line 153, "pan.___", state 408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 153, "pan.___", state 408, "else"
-       line 185, "pan.___", state 410, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 185, "pan.___", state 410, "else"
-       line 199, "pan.___", state 414, "((i<1))"
-       line 199, "pan.___", state 414, "((i>=1))"
-       line 158, "pan.___", state 419, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 421, "(1)"
-       line 162, "pan.___", state 428, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 430, "(1)"
-       line 162, "pan.___", state 431, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 431, "else"
-       line 160, "pan.___", state 436, "((j<1))"
-       line 160, "pan.___", state 436, "((j>=1))"
-       line 166, "pan.___", state 441, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 451, "(1)"
-       line 147, "pan.___", state 459, "(1)"
-       line 147, "pan.___", state 460, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 460, "else"
-       line 145, "pan.___", state 465, "((j<1))"
-       line 145, "pan.___", state 465, "((j>=1))"
-       line 151, "pan.___", state 471, "(1)"
-       line 151, "pan.___", state 472, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 472, "else"
-       line 153, "pan.___", state 475, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 475, "else"
-       line 185, "pan.___", state 477, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 477, "else"
-       line 288, "pan.___", state 492, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 537, "(1)"
-       line 307, "pan.___", state 567, "(1)"
-       line 288, "pan.___", state 580, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 612, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 625, "(1)"
-       line 307, "pan.___", state 655, "(1)"
-       line 288, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 713, "(1)"
-       line 307, "pan.___", state 743, "(1)"
-       line 158, "pan.___", state 758, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 760, "(1)"
-       line 162, "pan.___", state 767, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 769, "(1)"
-       line 162, "pan.___", state 770, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 770, "else"
-       line 160, "pan.___", state 775, "((j<1))"
-       line 160, "pan.___", state 775, "((j>=1))"
-       line 166, "pan.___", state 780, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 790, "(1)"
-       line 147, "pan.___", state 798, "(1)"
-       line 147, "pan.___", state 799, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 799, "else"
-       line 145, "pan.___", state 804, "((j<1))"
-       line 145, "pan.___", state 804, "((j>=1))"
-       line 151, "pan.___", state 810, "(1)"
-       line 151, "pan.___", state 811, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 811, "else"
-       line 153, "pan.___", state 814, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 814, "else"
-       line 185, "pan.___", state 816, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 816, "else"
-       line 158, "pan.___", state 821, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 823, "(1)"
-       line 162, "pan.___", state 830, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 162, "pan.___", state 832, "(1)"
-       line 162, "pan.___", state 833, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 162, "pan.___", state 833, "else"
-       line 160, "pan.___", state 838, "((j<1))"
-       line 160, "pan.___", state 838, "((j>=1))"
-       line 166, "pan.___", state 843, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 853, "(1)"
-       line 147, "pan.___", state 861, "(1)"
-       line 147, "pan.___", state 862, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 147, "pan.___", state 862, "else"
-       line 145, "pan.___", state 867, "((j<1))"
-       line 145, "pan.___", state 867, "((j>=1))"
-       line 151, "pan.___", state 873, "(1)"
-       line 151, "pan.___", state 874, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 151, "pan.___", state 874, "else"
-       line 153, "pan.___", state 877, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 153, "pan.___", state 877, "else"
-       line 185, "pan.___", state 879, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 185, "pan.___", state 879, "else"
-       line 199, "pan.___", state 883, "((i<1))"
-       line 199, "pan.___", state 883, "((i>=1))"
-       line 158, "pan.___", state 888, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 158, "pan.___", state 890, "(1)"
-       line 162, "pan.___", state 897, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 899, "(1)"
-       line 162, "pan.___", state 900, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 162, "pan.___", state 900, "else"
-       line 160, "pan.___", state 905, "((j<1))"
-       line 160, "pan.___", state 905, "((j>=1))"
-       line 166, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 920, "(1)"
-       line 147, "pan.___", state 928, "(1)"
-       line 147, "pan.___", state 929, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 147, "pan.___", state 929, "else"
-       line 145, "pan.___", state 934, "((j<1))"
-       line 145, "pan.___", state 934, "((j>=1))"
-       line 151, "pan.___", state 940, "(1)"
-       line 151, "pan.___", state 941, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 151, "pan.___", state 941, "else"
-       line 153, "pan.___", state 944, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 153, "pan.___", state 944, "else"
-       line 185, "pan.___", state 946, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 185, "pan.___", state 946, "else"
-       line 288, "pan.___", state 956, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 988, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1001, "(1)"
-       line 307, "pan.___", state 1031, "(1)"
-       line 288, "pan.___", state 1052, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1084, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1097, "(1)"
-       line 307, "pan.___", state 1127, "(1)"
-       line 433, "pan.___", state 1140, "-end-"
-       (125 of 1140 states)
-unreached in proctype urcu_writer
-       line 288, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 59, "(1)"
-       line 302, "pan.___", state 72, "(1)"
-       line 307, "pan.___", state 89, "(1)"
-       line 288, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 151, "(1)"
-       line 302, "pan.___", state 164, "(1)"
-       line 467, "pan.___", state 195, "(1)"
-       line 158, "pan.___", state 205, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 214, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 237, "(1)"
-       line 147, "pan.___", state 245, "(1)"
-       line 151, "pan.___", state 257, "(1)"
-       line 158, "pan.___", state 268, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 290, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 300, "(1)"
-       line 147, "pan.___", state 308, "(1)"
-       line 151, "pan.___", state 320, "(1)"
-       line 158, "pan.___", state 335, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 344, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 357, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 367, "(1)"
-       line 147, "pan.___", state 375, "(1)"
-       line 151, "pan.___", state 387, "(1)"
-       line 288, "pan.___", state 403, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 448, "(1)"
-       line 302, "pan.___", state 461, "(1)"
-       line 307, "pan.___", state 478, "(1)"
-       line 288, "pan.___", state 495, "(1)"
-       line 292, "pan.___", state 507, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 525, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 551, "(1)"
-       line 307, "pan.___", state 568, "(1)"
-       line 292, "pan.___", state 598, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 642, "(1)"
-       line 307, "pan.___", state 659, "(1)"
-       line 162, "pan.___", state 681, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 694, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 704, "(1)"
-       line 147, "pan.___", state 712, "(1)"
-       line 151, "pan.___", state 724, "(1)"
-       line 158, "pan.___", state 735, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 757, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 767, "(1)"
-       line 147, "pan.___", state 775, "(1)"
-       line 151, "pan.___", state 787, "(1)"
-       line 158, "pan.___", state 802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 811, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 824, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 834, "(1)"
-       line 147, "pan.___", state 842, "(1)"
-       line 151, "pan.___", state 854, "(1)"
-       line 288, "pan.___", state 878, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 288, "pan.___", state 880, "(1)"
-       line 288, "pan.___", state 881, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 288, "pan.___", state 881, "else"
-       line 288, "pan.___", state 884, "(1)"
-       line 292, "pan.___", state 892, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 894, "(1)"
-       line 292, "pan.___", state 895, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 292, "pan.___", state 895, "else"
-       line 292, "pan.___", state 898, "(1)"
-       line 292, "pan.___", state 899, "(1)"
-       line 292, "pan.___", state 899, "(1)"
-       line 290, "pan.___", state 904, "((i<1))"
-       line 290, "pan.___", state 904, "((i>=1))"
-       line 297, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 923, "(1)"
-       line 298, "pan.___", state 924, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 298, "pan.___", state 924, "else"
-       line 298, "pan.___", state 927, "(1)"
-       line 298, "pan.___", state 928, "(1)"
-       line 298, "pan.___", state 928, "(1)"
-       line 302, "pan.___", state 936, "(1)"
-       line 302, "pan.___", state 937, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 302, "pan.___", state 937, "else"
-       line 302, "pan.___", state 940, "(1)"
-       line 302, "pan.___", state 941, "(1)"
-       line 302, "pan.___", state 941, "(1)"
-       line 300, "pan.___", state 946, "((i<1))"
-       line 300, "pan.___", state 946, "((i>=1))"
-       line 307, "pan.___", state 953, "(1)"
-       line 307, "pan.___", state 954, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 307, "pan.___", state 954, "else"
-       line 307, "pan.___", state 957, "(1)"
-       line 307, "pan.___", state 958, "(1)"
-       line 307, "pan.___", state 958, "(1)"
-       line 309, "pan.___", state 961, "(1)"
-       line 309, "pan.___", state 961, "(1)"
-       line 292, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1008, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1034, "(1)"
-       line 307, "pan.___", state 1051, "(1)"
-       line 292, "pan.___", state 1078, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1096, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1122, "(1)"
-       line 307, "pan.___", state 1139, "(1)"
-       line 288, "pan.___", state 1156, "(1)"
-       line 292, "pan.___", state 1168, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1186, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1212, "(1)"
-       line 307, "pan.___", state 1229, "(1)"
-       line 292, "pan.___", state 1259, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 297, "pan.___", state 1277, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 302, "pan.___", state 1303, "(1)"
-       line 307, "pan.___", state 1320, "(1)"
-       line 162, "pan.___", state 1342, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1355, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1365, "(1)"
-       line 147, "pan.___", state 1373, "(1)"
-       line 151, "pan.___", state 1385, "(1)"
-       line 158, "pan.___", state 1396, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 1418, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 1428, "(1)"
-       line 147, "pan.___", state 1436, "(1)"
-       line 151, "pan.___", state 1448, "(1)"
-       line 158, "pan.___", state 1463, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 1472, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1485, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1495, "(1)"
-       line 147, "pan.___", state 1503, "(1)"
-       line 151, "pan.___", state 1515, "(1)"
-       line 288, "pan.___", state 1539, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 288, "pan.___", state 1541, "(1)"
-       line 288, "pan.___", state 1542, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 288, "pan.___", state 1542, "else"
-       line 288, "pan.___", state 1545, "(1)"
-       line 292, "pan.___", state 1553, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 292, "pan.___", state 1555, "(1)"
-       line 292, "pan.___", state 1556, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 292, "pan.___", state 1556, "else"
-       line 292, "pan.___", state 1559, "(1)"
-       line 292, "pan.___", state 1560, "(1)"
-       line 292, "pan.___", state 1560, "(1)"
-       line 290, "pan.___", state 1565, "((i<1))"
-       line 290, "pan.___", state 1565, "((i>=1))"
-       line 297, "pan.___", state 1571, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1584, "(1)"
-       line 298, "pan.___", state 1585, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 298, "pan.___", state 1585, "else"
-       line 298, "pan.___", state 1588, "(1)"
-       line 298, "pan.___", state 1589, "(1)"
-       line 298, "pan.___", state 1589, "(1)"
-       line 302, "pan.___", state 1597, "(1)"
-       line 302, "pan.___", state 1598, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 302, "pan.___", state 1598, "else"
-       line 302, "pan.___", state 1601, "(1)"
-       line 302, "pan.___", state 1602, "(1)"
-       line 302, "pan.___", state 1602, "(1)"
-       line 300, "pan.___", state 1607, "((i<1))"
-       line 300, "pan.___", state 1607, "((i>=1))"
-       line 307, "pan.___", state 1614, "(1)"
-       line 307, "pan.___", state 1615, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 307, "pan.___", state 1615, "else"
-       line 307, "pan.___", state 1618, "(1)"
-       line 307, "pan.___", state 1619, "(1)"
-       line 307, "pan.___", state 1619, "(1)"
-       line 309, "pan.___", state 1622, "(1)"
-       line 309, "pan.___", state 1622, "(1)"
-       line 162, "pan.___", state 1646, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1659, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1669, "(1)"
-       line 147, "pan.___", state 1677, "(1)"
-       line 151, "pan.___", state 1689, "(1)"
-       line 158, "pan.___", state 1700, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 166, "pan.___", state 1722, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 143, "pan.___", state 1732, "(1)"
-       line 147, "pan.___", state 1740, "(1)"
-       line 151, "pan.___", state 1752, "(1)"
-       line 158, "pan.___", state 1767, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 162, "pan.___", state 1776, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 166, "pan.___", state 1789, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 143, "pan.___", state 1799, "(1)"
-       line 147, "pan.___", state 1807, "(1)"
-       line 151, "pan.___", state 1819, "(1)"
-       line 510, "pan.___", state 1845, "-end-"
-       (158 of 1845 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 571, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 131 seconds
-pan: rate 30755.659 states/second
-pan: avg transition delay 1.866e-06 usec
-cp .input.spin urcu_free_nested.spin.input
-cp .input.spin.trail urcu_free_nested.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.spin.input
deleted file mode 100644 (file)
index 18f99c4..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_nested.spin.input.trail
deleted file mode 100644 (file)
index 2cefe6b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:0:2679
-5:3:1129
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.define b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.log
deleted file mode 100644 (file)
index c722840..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-spin: line 291 "pan.___", Error: syntax error  saw 'operator: ='
-spin: line 291 "pan.___", Error: syntax error  saw 'operator: ='
-spin: 2 error(s) - aborting
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 1346c4e..0000000
+++ /dev/null
@@ -1,533 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 3d2a95e..0000000
+++ /dev/null
@@ -1,2082 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:3537
-2:3:3489
-3:3:3492
-4:3:3492
-5:3:3495
-6:3:3503
-7:3:3503
-8:3:3506
-9:3:3512
-10:3:3516
-11:3:3516
-12:3:3519
-13:3:3527
-14:3:3531
-15:3:3532
-16:0:3537
-17:3:3534
-18:0:3537
-19:2:1310
-20:0:3537
-21:2:1316
-22:0:3537
-23:2:1317
-24:0:3537
-25:2:1318
-26:2:1322
-27:2:1323
-28:2:1331
-29:2:1332
-30:2:1336
-31:2:1337
-32:2:1345
-33:2:1350
-34:2:1354
-35:2:1355
-36:2:1362
-37:2:1363
-38:2:1374
-39:2:1375
-40:2:1376
-41:2:1387
-42:2:1392
-43:2:1393
-44:0:3537
-45:2:1405
-46:2:1406
-47:0:3537
-48:2:1410
-49:2:1414
-50:2:1415
-51:2:1423
-52:2:1424
-53:2:1428
-54:2:1429
-55:2:1437
-56:2:1442
-57:2:1443
-58:2:1454
-59:2:1455
-60:2:1466
-61:2:1467
-62:2:1468
-63:2:1479
-64:2:1484
-65:2:1485
-66:0:3537
-67:2:1497
-68:0:3537
-69:2:1498
-70:0:3537
-71:2:1508
-72:0:3537
-73:2:1509
-74:0:3537
-75:2:1510
-76:2:1514
-77:2:1515
-78:2:1523
-79:2:1524
-80:2:1528
-81:2:1529
-82:2:1537
-83:2:1542
-84:2:1546
-85:2:1547
-86:2:1554
-87:2:1555
-88:2:1566
-89:2:1567
-90:2:1568
-91:2:1579
-92:2:1584
-93:2:1585
-94:0:3537
-95:2:1600
-96:0:3537
-97:2:1601
-98:2:1605
-99:2:1606
-100:2:1614
-101:2:1615
-102:2:1619
-103:2:1620
-104:2:1628
-105:2:1633
-106:2:1637
-107:2:1638
-108:2:1645
-109:2:1646
-110:2:1657
-111:2:1658
-112:2:1659
-113:2:1670
-114:2:1675
-115:2:1676
-116:0:3537
-117:2:1691
-118:0:3537
-119:2:1696
-120:2:1700
-121:2:1701
-122:2:1709
-123:2:1710
-124:2:1714
-125:2:1715
-126:2:1723
-127:2:1728
-128:2:1732
-129:2:1733
-130:2:1740
-131:2:1741
-132:2:1752
-133:2:1753
-134:2:1754
-135:2:1765
-136:2:1770
-137:2:1771
-138:0:3537
-139:2:1790
-140:0:3537
-141:2:1791
-142:2:1795
-143:2:1796
-144:2:1804
-145:2:1805
-146:2:1809
-147:2:1810
-148:2:1818
-149:2:1823
-150:2:1827
-151:2:1828
-152:2:1835
-153:2:1836
-154:2:1847
-155:2:1848
-156:2:1849
-157:2:1860
-158:2:1865
-159:2:1866
-160:0:3537
-161:2:1878
-162:0:3537
-163:2:1881
-164:2:1882
-165:2:1894
-166:2:1895
-167:2:1899
-168:2:1900
-169:2:1908
-170:2:1913
-171:2:1917
-172:2:1918
-173:2:1925
-174:2:1926
-175:2:1937
-176:2:1938
-177:2:1939
-178:2:1950
-179:2:1955
-180:2:1956
-181:0:3537
-182:2:1968
-183:0:3537
-184:2:1969
-185:0:3537
-186:2:1970
-187:0:3537
-188:2:1971
-189:0:3537
-190:2:1972
-191:2:1976
-192:2:1977
-193:2:1985
-194:2:1986
-195:2:1990
-196:2:1991
-197:2:1999
-198:2:2004
-199:2:2008
-200:2:2009
-201:2:2016
-202:2:2017
-203:2:2028
-204:2:2029
-205:2:2030
-206:2:2041
-207:2:2046
-208:2:2047
-209:0:3537
-210:2:2341
-211:0:3537
-212:2:2437
-213:0:3537
-214:2:2438
-215:0:3537
-216:2:2442
-217:0:3537
-218:2:2448
-219:2:2452
-220:2:2453
-221:2:2461
-222:2:2462
-223:2:2466
-224:2:2467
-225:2:2475
-226:2:2480
-227:2:2484
-228:2:2485
-229:2:2492
-230:2:2493
-231:2:2504
-232:2:2505
-233:2:2506
-234:2:2517
-235:2:2522
-236:2:2523
-237:0:3537
-238:2:2535
-239:0:3537
-240:2:2536
-241:2:2540
-242:2:2541
-243:2:2549
-244:2:2550
-245:2:2554
-246:2:2555
-247:2:2563
-248:2:2568
-249:2:2572
-250:2:2573
-251:2:2580
-252:2:2581
-253:2:2592
-254:2:2593
-255:2:2594
-256:2:2605
-257:2:2610
-258:2:2611
-259:0:3537
-260:2:2623
-261:0:3537
-262:2:2626
-263:2:2627
-264:2:2639
-265:2:2640
-266:2:2644
-267:2:2645
-268:2:2653
-269:2:2658
-270:2:2662
-271:2:2663
-272:2:2670
-273:2:2671
-274:2:2682
-275:2:2683
-276:2:2684
-277:2:2695
-278:2:2700
-279:2:2701
-280:0:3537
-281:2:2713
-282:0:3537
-283:2:2714
-284:0:3537
-285:2:2715
-286:0:3537
-287:2:2716
-288:0:3537
-289:2:2717
-290:2:2721
-291:2:2722
-292:2:2730
-293:2:2731
-294:2:2735
-295:2:2736
-296:2:2744
-297:2:2749
-298:2:2753
-299:2:2754
-300:2:2761
-301:2:2762
-302:2:2773
-303:2:2774
-304:2:2775
-305:2:2786
-306:2:2791
-307:2:2792
-308:0:3537
-309:2:3086
-310:0:3537
-311:2:3182
-312:0:3537
-313:2:3183
-314:0:3537
-315:2:3187
-316:0:3537
-317:2:3193
-318:0:3537
-319:2:3194
-320:2:3198
-321:2:3199
-322:2:3207
-323:2:3208
-324:2:3212
-325:2:3213
-326:2:3221
-327:2:3226
-328:2:3230
-329:2:3231
-330:2:3238
-331:2:3239
-332:2:3250
-333:2:3251
-334:2:3252
-335:2:3263
-336:2:3268
-337:2:3269
-338:0:3537
-339:2:3284
-340:0:3537
-341:2:3285
-342:2:3289
-343:2:3290
-344:2:3298
-345:2:3299
-346:2:3303
-347:2:3304
-348:2:3312
-349:2:3317
-350:2:3321
-351:2:3322
-352:2:3329
-353:2:3330
-354:2:3341
-355:2:3342
-356:2:3343
-357:2:3354
-358:2:3359
-359:2:3360
-360:0:3537
-361:2:3375
-362:0:3537
-363:2:3380
-364:2:3384
-365:2:3385
-366:2:3393
-367:2:3394
-368:2:3398
-369:2:3399
-370:2:3407
-371:2:3412
-372:2:3416
-373:2:3417
-374:2:3424
-375:2:3425
-376:2:3436
-377:2:3437
-378:2:3438
-379:2:3449
-380:2:3454
-381:2:3455
-382:0:3537
-383:2:3474
-384:0:3537
-385:2:3475
-386:0:3537
-387:2:1317
-388:0:3537
-389:2:1318
-390:2:1322
-391:2:1323
-392:2:1331
-393:2:1332
-394:2:1336
-395:2:1337
-396:2:1345
-397:2:1350
-398:2:1354
-399:2:1355
-400:2:1362
-401:2:1363
-402:2:1374
-403:2:1375
-404:2:1376
-405:2:1387
-406:2:1392
-407:2:1393
-408:0:3537
-409:2:1405
-410:2:1406
-411:0:3537
-412:2:1410
-413:2:1414
-414:2:1415
-415:2:1423
-416:2:1424
-417:2:1428
-418:2:1429
-419:2:1437
-420:2:1442
-421:2:1443
-422:2:1454
-423:2:1455
-424:2:1466
-425:2:1467
-426:2:1468
-427:2:1479
-428:2:1484
-429:2:1485
-430:0:3537
-431:2:1497
-432:0:3537
-433:2:1498
-434:0:3537
-435:2:1508
-436:0:3537
-437:2:1509
-438:0:3537
-439:2:1510
-440:2:1514
-441:2:1515
-442:2:1523
-443:2:1524
-444:2:1528
-445:2:1529
-446:2:1537
-447:2:1542
-448:2:1546
-449:2:1547
-450:2:1554
-451:2:1555
-452:2:1566
-453:2:1567
-454:2:1568
-455:2:1579
-456:2:1584
-457:2:1585
-458:0:3537
-459:2:1600
-460:0:3537
-461:2:1601
-462:2:1605
-463:2:1606
-464:2:1614
-465:2:1615
-466:2:1619
-467:2:1620
-468:2:1628
-469:2:1633
-470:2:1637
-471:2:1638
-472:2:1645
-473:2:1646
-474:2:1657
-475:2:1658
-476:2:1659
-477:2:1670
-478:2:1675
-479:2:1676
-480:0:3537
-481:2:1691
-482:0:3537
-483:2:1696
-484:2:1700
-485:2:1701
-486:2:1709
-487:2:1710
-488:2:1714
-489:2:1715
-490:2:1723
-491:2:1728
-492:2:1732
-493:2:1733
-494:2:1740
-495:2:1741
-496:2:1752
-497:2:1753
-498:2:1754
-499:2:1765
-500:2:1770
-501:2:1771
-502:0:3537
-503:2:1790
-504:0:3537
-505:2:1791
-506:2:1795
-507:2:1796
-508:2:1804
-509:2:1805
-510:2:1809
-511:2:1810
-512:2:1818
-513:2:1823
-514:2:1827
-515:2:1828
-516:2:1835
-517:2:1836
-518:2:1847
-519:2:1848
-520:2:1849
-521:2:1860
-522:2:1865
-523:2:1866
-524:0:3537
-525:2:1878
-526:0:3537
-527:2:1881
-528:2:1882
-529:2:1894
-530:2:1895
-531:2:1899
-532:2:1900
-533:2:1908
-534:2:1913
-535:2:1917
-536:2:1918
-537:2:1925
-538:2:1926
-539:2:1937
-540:2:1938
-541:2:1939
-542:2:1950
-543:2:1955
-544:2:1956
-545:0:3537
-546:2:1968
-547:0:3537
-548:2:1969
-549:0:3537
-550:2:1970
-551:0:3537
-552:2:1971
-553:0:3537
-554:2:1972
-555:2:1976
-556:2:1977
-557:2:1985
-558:2:1986
-559:2:1990
-560:2:1991
-561:2:1999
-562:2:2004
-563:2:2008
-564:2:2009
-565:2:2016
-566:2:2017
-567:2:2028
-568:2:2029
-569:2:2030
-570:2:2041
-571:2:2046
-572:2:2047
-573:0:3537
-574:2:2341
-575:0:3537
-576:2:2437
-577:0:3537
-578:2:2438
-579:0:3537
-580:2:2442
-581:0:3537
-582:2:2448
-583:2:2452
-584:2:2453
-585:2:2461
-586:2:2462
-587:2:2466
-588:2:2467
-589:2:2475
-590:2:2480
-591:2:2484
-592:2:2485
-593:2:2492
-594:2:2493
-595:2:2504
-596:2:2505
-597:2:2506
-598:2:2517
-599:2:2522
-600:2:2523
-601:0:3537
-602:2:2535
-603:0:3537
-604:2:2536
-605:2:2540
-606:2:2541
-607:2:2549
-608:2:2550
-609:2:2554
-610:2:2555
-611:2:2563
-612:2:2568
-613:2:2572
-614:2:2573
-615:2:2580
-616:2:2581
-617:2:2592
-618:2:2593
-619:2:2594
-620:2:2605
-621:2:2610
-622:2:2611
-623:0:3537
-624:2:2623
-625:0:3537
-626:2:2626
-627:2:2627
-628:2:2639
-629:2:2640
-630:2:2644
-631:2:2645
-632:2:2653
-633:2:2658
-634:2:2662
-635:2:2663
-636:2:2670
-637:2:2671
-638:2:2682
-639:2:2683
-640:2:2684
-641:2:2695
-642:2:2700
-643:2:2701
-644:0:3537
-645:2:2713
-646:0:3537
-647:2:2714
-648:0:3537
-649:2:2715
-650:0:3537
-651:2:2716
-652:0:3537
-653:2:2717
-654:2:2721
-655:2:2722
-656:2:2730
-657:2:2731
-658:2:2735
-659:2:2736
-660:2:2744
-661:2:2749
-662:2:2753
-663:2:2754
-664:2:2761
-665:2:2762
-666:2:2773
-667:2:2774
-668:2:2775
-669:2:2786
-670:2:2791
-671:2:2792
-672:0:3537
-673:2:3086
-674:0:3537
-675:2:3182
-676:0:3537
-677:2:3183
-678:0:3537
-679:2:3187
-680:0:3537
-681:2:3193
-682:0:3537
-683:2:3194
-684:2:3198
-685:2:3199
-686:2:3207
-687:2:3208
-688:2:3212
-689:2:3213
-690:2:3221
-691:2:3226
-692:2:3230
-693:2:3231
-694:2:3238
-695:2:3239
-696:2:3250
-697:2:3251
-698:2:3252
-699:2:3263
-700:2:3268
-701:2:3269
-702:0:3537
-703:2:3284
-704:0:3537
-705:2:3285
-706:2:3289
-707:2:3290
-708:2:3298
-709:2:3299
-710:2:3303
-711:2:3304
-712:2:3312
-713:2:3317
-714:2:3321
-715:2:3322
-716:2:3329
-717:2:3330
-718:2:3341
-719:2:3342
-720:2:3343
-721:2:3354
-722:2:3359
-723:2:3360
-724:0:3537
-725:2:3375
-726:0:3537
-727:2:3380
-728:2:3384
-729:2:3385
-730:2:3393
-731:2:3394
-732:2:3398
-733:2:3399
-734:2:3407
-735:2:3412
-736:2:3416
-737:2:3417
-738:2:3424
-739:2:3425
-740:2:3436
-741:2:3437
-742:2:3438
-743:2:3449
-744:2:3454
-745:2:3455
-746:0:3537
-747:2:3474
-748:0:3537
-749:2:3475
-750:0:3537
-751:2:1317
-752:0:3537
-753:2:1318
-754:2:1322
-755:2:1323
-756:2:1331
-757:2:1332
-758:2:1336
-759:2:1337
-760:2:1345
-761:2:1350
-762:2:1354
-763:2:1355
-764:2:1362
-765:2:1363
-766:2:1374
-767:2:1375
-768:2:1376
-769:2:1387
-770:2:1392
-771:2:1393
-772:0:3537
-773:2:1405
-774:2:1406
-775:0:3537
-776:2:1410
-777:2:1414
-778:2:1415
-779:2:1423
-780:2:1424
-781:2:1428
-782:2:1429
-783:2:1437
-784:2:1442
-785:2:1443
-786:2:1454
-787:2:1455
-788:2:1466
-789:2:1467
-790:2:1468
-791:2:1479
-792:2:1484
-793:2:1485
-794:0:3537
-795:2:1497
-796:0:3537
-797:2:1498
-798:0:3537
-799:2:1508
-800:0:3537
-801:2:1509
-802:0:3537
-803:2:1510
-804:2:1514
-805:2:1515
-806:2:1523
-807:2:1524
-808:2:1528
-809:2:1529
-810:2:1537
-811:2:1542
-812:2:1546
-813:2:1547
-814:2:1554
-815:2:1555
-816:2:1566
-817:2:1567
-818:2:1568
-819:2:1579
-820:2:1584
-821:2:1585
-822:0:3537
-823:2:1600
-824:0:3537
-825:2:1601
-826:2:1605
-827:2:1606
-828:2:1614
-829:2:1615
-830:2:1619
-831:2:1620
-832:2:1628
-833:2:1633
-834:2:1637
-835:2:1638
-836:2:1645
-837:2:1646
-838:2:1657
-839:2:1658
-840:2:1659
-841:2:1670
-842:2:1675
-843:2:1676
-844:0:3537
-845:2:1691
-846:0:3537
-847:2:1696
-848:2:1700
-849:2:1701
-850:2:1709
-851:2:1710
-852:2:1714
-853:2:1715
-854:2:1723
-855:2:1728
-856:2:1732
-857:2:1733
-858:2:1740
-859:2:1741
-860:2:1752
-861:2:1753
-862:2:1754
-863:2:1765
-864:2:1770
-865:2:1771
-866:0:3537
-867:2:1790
-868:0:3537
-869:2:1791
-870:2:1795
-871:2:1796
-872:2:1804
-873:2:1805
-874:2:1809
-875:2:1810
-876:2:1818
-877:2:1823
-878:2:1827
-879:2:1828
-880:2:1835
-881:2:1836
-882:2:1847
-883:2:1848
-884:2:1849
-885:2:1860
-886:2:1865
-887:2:1866
-888:0:3537
-889:2:1878
-890:0:3537
-891:2:1881
-892:2:1882
-893:2:1894
-894:2:1895
-895:2:1899
-896:2:1900
-897:2:1908
-898:2:1913
-899:2:1917
-900:2:1918
-901:2:1925
-902:2:1926
-903:2:1937
-904:2:1938
-905:2:1939
-906:2:1950
-907:2:1955
-908:2:1956
-909:0:3537
-910:2:1968
-911:0:3537
-912:2:1969
-913:0:3537
-914:2:1970
-915:0:3537
-916:2:1971
-917:0:3537
-918:2:1972
-919:2:1976
-920:2:1977
-921:2:1985
-922:2:1986
-923:2:1990
-924:2:1991
-925:2:1999
-926:2:2004
-927:2:2008
-928:2:2009
-929:2:2016
-930:2:2017
-931:2:2028
-932:2:2029
-933:2:2030
-934:2:2041
-935:2:2046
-936:2:2047
-937:0:3537
-938:2:2341
-939:0:3537
-940:2:2437
-941:0:3537
-942:2:2438
-943:0:3537
-944:2:2442
-945:0:3537
-946:2:2448
-947:2:2452
-948:2:2453
-949:2:2461
-950:2:2462
-951:2:2466
-952:2:2467
-953:2:2475
-954:2:2480
-955:2:2484
-956:2:2485
-957:2:2492
-958:2:2493
-959:2:2504
-960:2:2505
-961:2:2506
-962:2:2517
-963:2:2522
-964:2:2523
-965:0:3537
-966:2:2535
-967:0:3537
-968:2:2536
-969:2:2540
-970:2:2541
-971:2:2549
-972:2:2550
-973:2:2554
-974:2:2555
-975:2:2563
-976:2:2568
-977:2:2572
-978:2:2573
-979:2:2580
-980:2:2581
-981:2:2592
-982:2:2593
-983:2:2594
-984:2:2605
-985:2:2610
-986:2:2611
-987:0:3537
-988:2:2623
-989:0:3537
-990:2:2626
-991:2:2627
-992:2:2639
-993:2:2640
-994:2:2644
-995:2:2645
-996:2:2653
-997:2:2658
-998:2:2662
-999:2:2663
-1000:2:2670
-1001:2:2671
-1002:2:2682
-1003:2:2683
-1004:2:2684
-1005:2:2695
-1006:2:2700
-1007:2:2701
-1008:0:3537
-1009:2:2713
-1010:0:3537
-1011:2:2714
-1012:0:3537
-1013:2:2715
-1014:0:3537
-1015:2:2716
-1016:0:3537
-1017:2:2717
-1018:2:2721
-1019:2:2722
-1020:2:2730
-1021:2:2731
-1022:2:2735
-1023:2:2736
-1024:2:2744
-1025:2:2749
-1026:2:2753
-1027:2:2754
-1028:2:2761
-1029:2:2762
-1030:2:2773
-1031:2:2774
-1032:2:2775
-1033:2:2786
-1034:2:2791
-1035:2:2792
-1036:0:3537
-1037:2:3086
-1038:0:3537
-1039:2:3182
-1040:0:3537
-1041:2:3183
-1042:0:3537
-1043:2:3187
-1044:0:3537
-1045:2:3193
-1046:0:3537
-1047:2:3194
-1048:2:3198
-1049:2:3199
-1050:2:3207
-1051:2:3208
-1052:2:3212
-1053:2:3213
-1054:2:3221
-1055:2:3226
-1056:2:3230
-1057:2:3231
-1058:2:3238
-1059:2:3239
-1060:2:3250
-1061:2:3251
-1062:2:3252
-1063:2:3263
-1064:2:3268
-1065:2:3269
-1066:0:3537
-1067:2:3284
-1068:0:3537
-1069:2:3285
-1070:2:3289
-1071:2:3290
-1072:2:3298
-1073:2:3299
-1074:2:3303
-1075:2:3304
-1076:2:3312
-1077:2:3317
-1078:2:3321
-1079:2:3322
-1080:2:3329
-1081:2:3330
-1082:2:3341
-1083:2:3342
-1084:2:3343
-1085:2:3354
-1086:2:3359
-1087:2:3360
-1088:0:3537
-1089:2:3375
-1090:0:3537
-1091:2:3380
-1092:2:3384
-1093:2:3385
-1094:2:3393
-1095:2:3394
-1096:2:3398
-1097:2:3399
-1098:2:3407
-1099:2:3412
-1100:2:3416
-1101:2:3417
-1102:2:3424
-1103:2:3425
-1104:2:3436
-1105:2:3437
-1106:2:3438
-1107:2:3449
-1108:2:3454
-1109:2:3455
-1110:0:3537
-1111:2:3474
-1112:0:3537
-1113:2:3475
-1114:0:3537
-1115:2:1317
-1116:0:3537
-1117:2:1318
-1118:2:1322
-1119:2:1323
-1120:2:1331
-1121:2:1332
-1122:2:1336
-1123:2:1337
-1124:2:1345
-1125:2:1350
-1126:2:1354
-1127:2:1355
-1128:2:1362
-1129:2:1363
-1130:2:1374
-1131:2:1375
-1132:2:1376
-1133:2:1387
-1134:2:1392
-1135:2:1393
-1136:0:3537
-1137:2:1405
-1138:2:1406
-1139:0:3537
-1140:2:1410
-1141:2:1414
-1142:2:1415
-1143:2:1423
-1144:2:1424
-1145:2:1428
-1146:2:1429
-1147:2:1437
-1148:2:1442
-1149:2:1443
-1150:2:1454
-1151:2:1455
-1152:2:1466
-1153:2:1467
-1154:2:1468
-1155:2:1479
-1156:2:1484
-1157:2:1485
-1158:0:3537
-1159:2:1497
-1160:0:3537
-1161:2:1498
-1162:0:3537
-1163:2:1508
-1164:0:3537
-1165:2:1509
-1166:0:3537
-1167:2:1510
-1168:2:1514
-1169:2:1515
-1170:2:1523
-1171:2:1524
-1172:2:1528
-1173:2:1529
-1174:2:1537
-1175:2:1542
-1176:2:1546
-1177:2:1547
-1178:2:1554
-1179:2:1555
-1180:2:1566
-1181:2:1567
-1182:2:1568
-1183:2:1579
-1184:2:1584
-1185:2:1585
-1186:0:3537
-1187:2:1600
-1188:0:3537
-1189:2:1601
-1190:2:1605
-1191:2:1606
-1192:2:1614
-1193:2:1615
-1194:2:1619
-1195:2:1620
-1196:2:1628
-1197:2:1633
-1198:2:1637
-1199:2:1638
-1200:2:1645
-1201:2:1646
-1202:2:1657
-1203:2:1658
-1204:2:1659
-1205:2:1670
-1206:2:1675
-1207:2:1676
-1208:0:3537
-1209:2:1691
-1210:0:3537
-1211:2:1696
-1212:2:1700
-1213:2:1701
-1214:2:1709
-1215:2:1710
-1216:2:1714
-1217:2:1715
-1218:2:1723
-1219:2:1728
-1220:2:1732
-1221:2:1733
-1222:2:1740
-1223:2:1741
-1224:2:1752
-1225:2:1753
-1226:2:1754
-1227:2:1765
-1228:2:1770
-1229:2:1771
-1230:0:3537
-1231:2:1790
-1232:0:3537
-1233:2:1791
-1234:2:1795
-1235:2:1796
-1236:2:1804
-1237:2:1805
-1238:2:1809
-1239:2:1810
-1240:2:1818
-1241:2:1823
-1242:2:1827
-1243:2:1828
-1244:2:1835
-1245:2:1836
-1246:2:1847
-1247:2:1848
-1248:2:1849
-1249:2:1860
-1250:2:1865
-1251:2:1866
-1252:0:3537
-1253:2:1878
-1254:0:3537
-1255:2:1881
-1256:2:1882
-1257:2:1894
-1258:2:1895
-1259:2:1899
-1260:2:1900
-1261:2:1908
-1262:2:1913
-1263:2:1917
-1264:2:1918
-1265:2:1925
-1266:2:1926
-1267:2:1937
-1268:2:1938
-1269:2:1939
-1270:2:1950
-1271:2:1955
-1272:2:1956
-1273:0:3537
-1274:2:1968
-1275:0:3537
-1276:2:1969
-1277:0:3537
-1278:2:1970
-1279:0:3537
-1280:2:1971
-1281:0:3537
-1282:2:1972
-1283:2:1976
-1284:2:1977
-1285:2:1985
-1286:2:1986
-1287:2:1990
-1288:2:1991
-1289:2:1999
-1290:2:2004
-1291:2:2008
-1292:2:2009
-1293:2:2016
-1294:2:2017
-1295:2:2028
-1296:2:2029
-1297:2:2030
-1298:2:2041
-1299:2:2046
-1300:2:2047
-1301:0:3537
-1302:2:2341
-1303:0:3537
-1304:2:2437
-1305:0:3537
-1306:2:2438
-1307:0:3537
-1308:2:2442
-1309:0:3537
-1310:2:2448
-1311:2:2452
-1312:2:2453
-1313:2:2461
-1314:2:2462
-1315:2:2466
-1316:2:2467
-1317:2:2475
-1318:2:2480
-1319:2:2484
-1320:2:2485
-1321:2:2492
-1322:2:2493
-1323:2:2504
-1324:2:2505
-1325:2:2506
-1326:2:2517
-1327:2:2522
-1328:2:2523
-1329:0:3537
-1330:2:2535
-1331:0:3537
-1332:2:2536
-1333:2:2540
-1334:2:2541
-1335:2:2549
-1336:2:2550
-1337:2:2554
-1338:2:2555
-1339:2:2563
-1340:2:2568
-1341:2:2572
-1342:2:2573
-1343:2:2580
-1344:2:2581
-1345:2:2592
-1346:2:2593
-1347:2:2594
-1348:2:2605
-1349:2:2610
-1350:2:2611
-1351:0:3537
-1352:2:2623
-1353:0:3537
-1354:2:2626
-1355:2:2627
-1356:2:2639
-1357:2:2640
-1358:2:2644
-1359:2:2645
-1360:2:2653
-1361:2:2658
-1362:2:2662
-1363:2:2663
-1364:2:2670
-1365:2:2671
-1366:2:2682
-1367:2:2683
-1368:2:2684
-1369:2:2695
-1370:2:2700
-1371:2:2701
-1372:0:3537
-1373:2:2713
-1374:0:3537
-1375:2:2714
-1376:0:3537
-1377:2:2715
-1378:0:3537
-1379:2:2716
-1380:0:3537
-1381:2:2717
-1382:2:2721
-1383:2:2722
-1384:2:2730
-1385:2:2731
-1386:2:2735
-1387:2:2736
-1388:2:2744
-1389:2:2749
-1390:2:2753
-1391:2:2754
-1392:2:2761
-1393:2:2762
-1394:2:2773
-1395:2:2774
-1396:2:2775
-1397:2:2786
-1398:2:2791
-1399:2:2792
-1400:0:3537
-1401:2:3086
-1402:0:3537
-1403:2:3182
-1404:0:3537
-1405:2:3183
-1406:0:3537
-1407:2:3187
-1408:0:3537
-1409:2:3193
-1410:0:3537
-1411:2:3194
-1412:2:3198
-1413:2:3199
-1414:2:3207
-1415:2:3208
-1416:2:3212
-1417:2:3213
-1418:2:3221
-1419:2:3226
-1420:2:3230
-1421:2:3231
-1422:2:3238
-1423:2:3239
-1424:2:3250
-1425:2:3251
-1426:2:3252
-1427:2:3263
-1428:2:3268
-1429:2:3269
-1430:0:3537
-1431:2:3284
-1432:0:3537
-1433:2:3285
-1434:2:3289
-1435:2:3290
-1436:2:3298
-1437:2:3299
-1438:2:3303
-1439:2:3304
-1440:2:3312
-1441:2:3317
-1442:2:3321
-1443:2:3322
-1444:2:3329
-1445:2:3330
-1446:2:3341
-1447:2:3342
-1448:2:3343
-1449:2:3354
-1450:2:3359
-1451:2:3360
-1452:0:3537
-1453:2:3375
-1454:0:3537
-1455:2:3380
-1456:2:3384
-1457:2:3385
-1458:2:3393
-1459:2:3394
-1460:2:3398
-1461:2:3399
-1462:2:3407
-1463:2:3412
-1464:2:3416
-1465:2:3417
-1466:2:3424
-1467:2:3425
-1468:2:3436
-1469:2:3437
-1470:2:3438
-1471:2:3449
-1472:2:3454
-1473:2:3455
-1474:0:3537
-1475:2:3474
-1476:0:3537
-1477:2:3475
-1478:0:3537
-1479:2:1317
-1480:0:3537
-1481:2:1318
-1482:2:1322
-1483:2:1323
-1484:2:1331
-1485:2:1332
-1486:2:1336
-1487:2:1337
-1488:2:1345
-1489:2:1350
-1490:2:1354
-1491:2:1355
-1492:2:1362
-1493:2:1363
-1494:2:1374
-1495:2:1375
-1496:2:1376
-1497:2:1387
-1498:2:1392
-1499:2:1393
-1500:0:3537
-1501:2:1405
-1502:2:1406
-1503:0:3537
-1504:2:1410
-1505:2:1414
-1506:2:1415
-1507:2:1423
-1508:2:1424
-1509:2:1428
-1510:2:1429
-1511:2:1437
-1512:2:1450
-1513:2:1451
-1514:2:1454
-1515:2:1455
-1516:2:1466
-1517:2:1467
-1518:2:1468
-1519:2:1479
-1520:2:1484
-1521:2:1487
-1522:2:1488
-1523:0:3537
-1524:2:1497
-1525:0:3537
-1526:2:1498
-1527:0:3537
-1528:2:1508
-1529:0:3537
-1530:2:1509
-1531:0:3537
-1532:2:1510
-1533:2:1514
-1534:2:1515
-1535:2:1523
-1536:2:1524
-1537:2:1528
-1538:2:1529
-1539:2:1537
-1540:2:1550
-1541:2:1551
-1542:2:1554
-1543:2:1555
-1544:2:1566
-1545:2:1567
-1546:2:1568
-1547:2:1579
-1548:2:1584
-1549:2:1587
-1550:2:1588
-1551:0:3537
-1552:2:1600
-1553:0:3537
-1554:2:1601
-1555:2:1605
-1556:2:1606
-1557:2:1614
-1558:2:1615
-1559:2:1619
-1560:2:1620
-1561:2:1628
-1562:2:1641
-1563:2:1642
-1564:2:1645
-1565:2:1646
-1566:2:1657
-1567:2:1658
-1568:2:1659
-1569:2:1670
-1570:2:1675
-1571:2:1678
-1572:2:1679
-1573:0:3537
-1574:2:1691
-1575:0:3537
-1576:2:1696
-1577:2:1700
-1578:2:1701
-1579:2:1709
-1580:2:1710
-1581:2:1714
-1582:2:1715
-1583:2:1723
-1584:2:1736
-1585:2:1737
-1586:2:1740
-1587:2:1741
-1588:2:1752
-1589:2:1753
-1590:2:1754
-1591:2:1765
-1592:2:1770
-1593:2:1773
-1594:2:1774
-1595:0:3537
-1596:2:1790
-1597:0:3537
-1598:2:1791
-1599:2:1795
-1600:2:1796
-1601:2:1804
-1602:2:1805
-1603:2:1809
-1604:2:1810
-1605:2:1818
-1606:2:1831
-1607:2:1832
-1608:2:1835
-1609:2:1836
-1610:2:1847
-1611:2:1848
-1612:2:1849
-1613:2:1860
-1614:2:1865
-1615:2:1868
-1616:2:1869
-1617:0:3537
-1618:2:1878
-1619:0:3537
-1620:2:1881
-1621:2:1882
-1622:2:1894
-1623:2:1895
-1624:2:1899
-1625:2:1900
-1626:2:1908
-1627:2:1921
-1628:2:1922
-1629:2:1925
-1630:2:1926
-1631:2:1937
-1632:2:1938
-1633:2:1939
-1634:2:1950
-1635:2:1955
-1636:2:1958
-1637:2:1959
-1638:0:3537
-1639:2:1968
-1640:0:3537
-1641:2:1969
-1642:0:3537
-1643:2:1970
-1644:0:3537
-1645:2:1971
-1646:0:3537
-1647:2:1972
-1648:2:1976
-1649:2:1977
-1650:2:1985
-1651:2:1986
-1652:2:1990
-1653:2:1991
-1654:2:1999
-1655:2:2012
-1656:2:2013
-1657:2:2016
-1658:2:2017
-1659:2:2028
-1660:2:2029
-1661:2:2030
-1662:2:2041
-1663:2:2046
-1664:2:2049
-1665:2:2050
-1666:0:3537
-1667:2:2341
-1668:0:3537
-1669:2:2437
-1670:0:3537
-1671:2:2438
-1672:0:3537
-1673:2:2442
-1674:0:3537
-1675:2:2448
-1676:2:2452
-1677:2:2453
-1678:2:2461
-1679:2:2462
-1680:2:2466
-1681:2:2467
-1682:2:2475
-1683:2:2488
-1684:2:2489
-1685:2:2492
-1686:2:2493
-1687:2:2504
-1688:2:2505
-1689:2:2506
-1690:2:2517
-1691:2:2522
-1692:2:2525
-1693:2:2526
-1694:0:3537
-1695:2:2535
-1696:0:3537
-1697:2:2536
-1698:2:2540
-1699:2:2541
-1700:2:2549
-1701:2:2550
-1702:2:2554
-1703:2:2555
-1704:2:2563
-1705:2:2576
-1706:2:2577
-1707:2:2580
-1708:2:2581
-1709:2:2592
-1710:2:2593
-1711:2:2594
-1712:2:2605
-1713:2:2610
-1714:2:2613
-1715:2:2614
-1716:0:3537
-1717:2:2623
-1718:0:3537
-1719:2:2626
-1720:2:2627
-1721:2:2639
-1722:2:2640
-1723:2:2644
-1724:2:2645
-1725:2:2653
-1726:2:2666
-1727:2:2667
-1728:2:2670
-1729:2:2671
-1730:2:2682
-1731:2:2683
-1732:2:2684
-1733:2:2695
-1734:2:2700
-1735:2:2703
-1736:2:2704
-1737:0:3537
-1738:2:2713
-1739:0:3537
-1740:2:2714
-1741:0:3537
-1742:2:2715
-1743:0:3537
-1744:2:2716
-1745:0:3537
-1746:2:2717
-1747:2:2721
-1748:2:2722
-1749:2:2730
-1750:2:2731
-1751:2:2735
-1752:2:2736
-1753:2:2744
-1754:2:2757
-1755:2:2758
-1756:2:2761
-1757:2:2762
-1758:2:2773
-1759:2:2774
-1760:2:2775
-1761:2:2786
-1762:2:2791
-1763:2:2794
-1764:2:2795
-1765:0:3537
-1766:2:3086
-1767:0:3537
-1768:2:3182
-1769:0:3537
-1770:2:3183
-1771:0:3537
-1772:2:3187
-1773:0:3537
-1774:2:3193
-1775:0:3537
-1776:2:3194
-1777:2:3198
-1778:2:3199
-1779:2:3207
-1780:2:3208
-1781:2:3212
-1782:2:3213
-1783:2:3221
-1784:2:3234
-1785:2:3235
-1786:2:3238
-1787:2:3239
-1788:2:3250
-1789:2:3251
-1790:2:3252
-1791:2:3263
-1792:2:3268
-1793:2:3271
-1794:2:3272
-1795:0:3537
-1796:2:3284
-1797:0:3537
-1798:2:3285
-1799:2:3289
-1800:2:3290
-1801:2:3298
-1802:2:3299
-1803:2:3303
-1804:2:3304
-1805:2:3312
-1806:2:3325
-1807:2:3326
-1808:2:3329
-1809:2:3330
-1810:2:3341
-1811:2:3342
-1812:2:3343
-1813:2:3354
-1814:2:3359
-1815:2:3362
-1816:2:3363
-1817:0:3537
-1818:2:3375
-1819:0:3537
-1820:2:3380
-1821:2:3384
-1822:2:3385
-1823:2:3393
-1824:2:3394
-1825:2:3398
-1826:2:3399
-1827:2:3407
-1828:2:3420
-1829:2:3421
-1830:2:3424
-1831:2:3425
-1832:2:3436
-1833:2:3437
-1834:2:3438
-1835:2:3449
-1836:2:3454
-1837:2:3457
-1838:2:3458
-1839:0:3537
-1840:2:3474
-1841:0:3537
-1842:2:3475
-1843:0:3537
-1844:2:3478
-1845:0:3537
-1846:2:3483
-1847:0:3537
-1848:1:2
-1849:0:3537
-1850:2:3484
-1851:0:3537
-1852:1:8
-1853:0:3537
-1854:2:3483
-1855:0:3537
-1856:1:9
-1857:0:3537
-1858:2:3484
-1859:0:3537
-1860:1:10
-1861:0:3537
-1862:2:3483
-1863:0:3537
-1864:1:11
-1865:0:3537
-1866:2:3484
-1867:0:3537
-1868:1:12
-1869:1:16
-1870:1:17
-1871:1:25
-1872:1:26
-1873:1:30
-1874:1:31
-1875:1:39
-1876:1:44
-1877:1:48
-1878:1:49
-1879:1:56
-1880:1:57
-1881:1:68
-1882:1:69
-1883:1:70
-1884:1:81
-1885:1:86
-1886:1:87
-1887:0:3537
-1888:2:3483
-1889:0:3537
-1890:1:99
-1891:0:3537
-1892:2:3484
-1893:0:3537
-1894:1:100
-1895:1:104
-1896:1:105
-1897:1:113
-1898:1:114
-1899:1:118
-1900:1:119
-1901:1:127
-1902:1:132
-1903:1:136
-1904:1:137
-1905:1:144
-1906:1:145
-1907:1:156
-1908:1:157
-1909:1:158
-1910:1:169
-1911:1:174
-1912:1:175
-1913:0:3537
-1914:2:3483
-1915:0:3537
-1916:1:187
-1917:0:3537
-1918:2:3484
-1919:0:3537
-1920:1:188
-1921:0:3537
-1922:2:3483
-1923:0:3537
-1924:1:189
-1925:1:193
-1926:1:194
-1927:1:202
-1928:1:203
-1929:1:207
-1930:1:208
-1931:1:216
-1932:1:221
-1933:1:225
-1934:1:226
-1935:1:233
-1936:1:234
-1937:1:245
-1938:1:246
-1939:1:247
-1940:1:258
-1941:1:263
-1942:1:264
-1943:0:3537
-1944:2:3484
-1945:0:3537
-1946:1:276
-1947:0:3537
-1948:2:3483
-1949:0:3537
-1950:1:561
-1951:0:3537
-1952:2:3484
-1953:0:3537
-1954:1:562
-1955:0:3537
-1956:2:3483
-1957:0:3537
-1958:1:11
-1959:0:3537
-1960:2:3484
-1961:0:3537
-1962:1:12
-1963:1:16
-1964:1:17
-1965:1:25
-1966:1:26
-1967:1:27
-1968:1:39
-1969:1:44
-1970:1:48
-1971:1:49
-1972:1:56
-1973:1:57
-1974:1:68
-1975:1:69
-1976:1:70
-1977:1:81
-1978:1:86
-1979:1:87
-1980:0:3537
-1981:2:3483
-1982:0:3537
-1983:1:99
-1984:0:3537
-1985:2:3484
-1986:0:3537
-1987:1:100
-1988:1:104
-1989:1:105
-1990:1:113
-1991:1:114
-1992:1:118
-1993:1:119
-1994:1:127
-1995:1:132
-1996:1:136
-1997:1:137
-1998:1:144
-1999:1:145
-2000:1:156
-2001:1:157
-2002:1:158
-2003:1:169
-2004:1:174
-2005:1:175
-2006:0:3537
-2007:2:3483
-2008:0:3537
-2009:1:279
-2010:0:3537
-2011:2:3484
-2012:0:3537
-2013:1:280
-2014:0:3537
-2015:2:3483
-2016:0:3537
-2017:1:561
-2018:0:3537
-2019:2:3484
-2020:0:3537
-2021:1:562
-2022:0:3537
-2023:2:3483
-2024:0:3537
-2025:1:567
-2026:0:3537
-2027:2:3484
-2028:0:3537
-2029:1:572
-2030:1:576
-2031:1:577
-2032:1:585
-2033:1:586
-2034:1:587
-2035:1:599
-2036:1:604
-2037:1:608
-2038:1:609
-2039:1:616
-2040:1:617
-2041:1:628
-2042:1:629
-2043:1:630
-2044:1:641
-2045:1:646
-2046:1:647
-2047:0:3537
-2048:2:3483
-2049:0:3537
-2050:1:659
-2051:0:3537
-2052:2:3484
-2053:0:3537
-2054:1:660
-2055:1:664
-2056:1:665
-2057:1:673
-2058:1:674
-2059:1:678
-2060:1:679
-2061:1:687
-2062:1:692
-2063:1:696
-2064:1:697
-2065:1:704
-2066:1:705
-2067:1:716
-2068:1:717
-2069:1:718
-2070:1:729
-2071:1:734
-2072:1:735
-2073:0:3537
-2074:2:3483
-2075:0:3537
-2076:1:747
-2077:0:3535
-2078:2:3484
-2079:0:3541
-2080:1:1280
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.define b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 6a46f80..0000000
+++ /dev/null
@@ -1,369 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 567)
-Depth=    5645 States=    1e+06 Transitions= 1.47e+07 Memory=   527.287        t=   27.1 R=   4e+04
-pan: claim violated! (at depth 1736)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 5645, errors: 1
-  1039881 states, stored
- 14441478 states, matched
- 15481359 transitions (= stored+matched)
- 57000435 atomic steps
-hash conflicts:   2892596 (resolved)
-
-Stats on memory usage (in Megabytes):
-   83.303      equivalent memory usage for states (stored*(State-vector + overhead))
-   64.050      actual memory usage for states (compression: 76.89%)
-               state-vector as stored = 37 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  529.729      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 289, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 61, "(1)"
-       line 308, "pan.___", state 91, "(1)"
-       line 289, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 149, "(1)"
-       line 308, "pan.___", state 179, "(1)"
-       line 289, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 238, "(1)"
-       line 308, "pan.___", state 268, "(1)"
-       line 159, "pan.___", state 289, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 291, "(1)"
-       line 163, "pan.___", state 298, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 300, "(1)"
-       line 163, "pan.___", state 301, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 301, "else"
-       line 161, "pan.___", state 306, "((j<1))"
-       line 161, "pan.___", state 306, "((j>=1))"
-       line 167, "pan.___", state 311, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 313, "(1)"
-       line 167, "pan.___", state 314, "((cache_dirty_generation_ptr.bitfield&(1<<_pid)))"
-       line 167, "pan.___", state 314, "else"
-       line 177, "pan.___", state 319, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 177, "pan.___", state 319, "else"
-       line 159, "pan.___", state 324, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 326, "(1)"
-       line 163, "pan.___", state 333, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 163, "pan.___", state 335, "(1)"
-       line 163, "pan.___", state 336, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 163, "pan.___", state 336, "else"
-       line 161, "pan.___", state 341, "((j<1))"
-       line 161, "pan.___", state 341, "((j>=1))"
-       line 167, "pan.___", state 346, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 348, "(1)"
-       line 167, "pan.___", state 349, "((cache_dirty_generation_ptr.bitfield&(1<<i)))"
-       line 167, "pan.___", state 349, "else"
-       line 177, "pan.___", state 354, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 177, "pan.___", state 354, "else"
-       line 200, "pan.___", state 358, "((i<1))"
-       line 200, "pan.___", state 358, "((i>=1))"
-       line 159, "pan.___", state 363, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 365, "(1)"
-       line 163, "pan.___", state 372, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 374, "(1)"
-       line 163, "pan.___", state 375, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 375, "else"
-       line 161, "pan.___", state 380, "((j<1))"
-       line 161, "pan.___", state 380, "((j>=1))"
-       line 167, "pan.___", state 385, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 387, "(1)"
-       line 167, "pan.___", state 388, "((cache_dirty_generation_ptr.bitfield&(1<<_pid)))"
-       line 167, "pan.___", state 388, "else"
-       line 177, "pan.___", state 393, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 177, "pan.___", state 393, "else"
-       line 289, "pan.___", state 408, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 440, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 453, "(1)"
-       line 308, "pan.___", state 483, "(1)"
-       line 289, "pan.___", state 496, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 541, "(1)"
-       line 308, "pan.___", state 571, "(1)"
-       line 289, "pan.___", state 584, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 629, "(1)"
-       line 308, "pan.___", state 659, "(1)"
-       line 159, "pan.___", state 674, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 676, "(1)"
-       line 163, "pan.___", state 683, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 685, "(1)"
-       line 163, "pan.___", state 686, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 686, "else"
-       line 161, "pan.___", state 691, "((j<1))"
-       line 161, "pan.___", state 691, "((j>=1))"
-       line 167, "pan.___", state 696, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 698, "(1)"
-       line 167, "pan.___", state 699, "((cache_dirty_generation_ptr.bitfield&(1<<_pid)))"
-       line 167, "pan.___", state 699, "else"
-       line 177, "pan.___", state 704, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 177, "pan.___", state 704, "else"
-       line 159, "pan.___", state 709, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 711, "(1)"
-       line 163, "pan.___", state 718, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 163, "pan.___", state 720, "(1)"
-       line 163, "pan.___", state 721, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 163, "pan.___", state 721, "else"
-       line 161, "pan.___", state 726, "((j<1))"
-       line 161, "pan.___", state 726, "((j>=1))"
-       line 167, "pan.___", state 731, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 733, "(1)"
-       line 167, "pan.___", state 734, "((cache_dirty_generation_ptr.bitfield&(1<<i)))"
-       line 167, "pan.___", state 734, "else"
-       line 177, "pan.___", state 739, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 177, "pan.___", state 739, "else"
-       line 200, "pan.___", state 743, "((i<1))"
-       line 200, "pan.___", state 743, "((i>=1))"
-       line 159, "pan.___", state 748, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 750, "(1)"
-       line 163, "pan.___", state 757, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 759, "(1)"
-       line 163, "pan.___", state 760, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 760, "else"
-       line 161, "pan.___", state 765, "((j<1))"
-       line 161, "pan.___", state 765, "((j>=1))"
-       line 167, "pan.___", state 770, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 772, "(1)"
-       line 167, "pan.___", state 773, "((cache_dirty_generation_ptr.bitfield&(1<<_pid)))"
-       line 167, "pan.___", state 773, "else"
-       line 177, "pan.___", state 778, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 177, "pan.___", state 778, "else"
-       line 289, "pan.___", state 788, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 820, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 833, "(1)"
-       line 308, "pan.___", state 863, "(1)"
-       line 289, "pan.___", state 884, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 916, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 929, "(1)"
-       line 308, "pan.___", state 959, "(1)"
-       line 434, "pan.___", state 972, "-end-"
-       (95 of 972 states)
-unreached in proctype urcu_writer
-       line 289, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 20, "(1)"
-       line 293, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 34, "(1)"
-       line 293, "pan.___", state 35, "(1)"
-       line 293, "pan.___", state 35, "(1)"
-       line 291, "pan.___", state 40, "((i<1))"
-       line 291, "pan.___", state 40, "((i>=1))"
-       line 298, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 59, "(1)"
-       line 299, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 60, "else"
-       line 299, "pan.___", state 63, "(1)"
-       line 299, "pan.___", state 64, "(1)"
-       line 299, "pan.___", state 64, "(1)"
-       line 303, "pan.___", state 72, "(1)"
-       line 303, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 73, "else"
-       line 303, "pan.___", state 76, "(1)"
-       line 303, "pan.___", state 77, "(1)"
-       line 303, "pan.___", state 77, "(1)"
-       line 301, "pan.___", state 82, "((i<1))"
-       line 301, "pan.___", state 82, "((i>=1))"
-       line 308, "pan.___", state 89, "(1)"
-       line 308, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 90, "else"
-       line 308, "pan.___", state 93, "(1)"
-       line 308, "pan.___", state 94, "(1)"
-       line 308, "pan.___", state 94, "(1)"
-       line 310, "pan.___", state 97, "(1)"
-       line 310, "pan.___", state 97, "(1)"
-       line 456, "pan.___", state 101, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 454, "pan.___", state 102, "old_gen = cached_generation_ptr.val[_pid]"
-       line 289, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 112, "(1)"
-       line 293, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 126, "(1)"
-       line 293, "pan.___", state 127, "(1)"
-       line 293, "pan.___", state 127, "(1)"
-       line 299, "pan.___", state 151, "(1)"
-       line 303, "pan.___", state 164, "(1)"
-       line 310, "pan.___", state 189, "(1)"
-       line 310, "pan.___", state 189, "(1)"
-       line 468, "pan.___", state 195, "(1)"
-       line 159, "pan.___", state 205, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 214, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 240, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 262, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 279, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 288, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 301, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 319, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 333, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 351, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 364, "(1)"
-       line 303, "pan.___", state 377, "(1)"
-       line 308, "pan.___", state 394, "(1)"
-       line 289, "pan.___", state 411, "(1)"
-       line 293, "pan.___", state 423, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 441, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 467, "(1)"
-       line 308, "pan.___", state 484, "(1)"
-       line 293, "pan.___", state 514, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 532, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 558, "(1)"
-       line 308, "pan.___", state 575, "(1)"
-       line 163, "pan.___", state 597, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 610, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 623, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 645, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 662, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 671, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 684, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 710, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 712, "(1)"
-       line 289, "pan.___", state 713, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 713, "else"
-       line 289, "pan.___", state 716, "(1)"
-       line 293, "pan.___", state 724, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 726, "(1)"
-       line 293, "pan.___", state 727, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 727, "else"
-       line 293, "pan.___", state 730, "(1)"
-       line 293, "pan.___", state 731, "(1)"
-       line 293, "pan.___", state 731, "(1)"
-       line 291, "pan.___", state 736, "((i<1))"
-       line 291, "pan.___", state 736, "((i>=1))"
-       line 298, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 755, "(1)"
-       line 299, "pan.___", state 756, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 756, "else"
-       line 299, "pan.___", state 759, "(1)"
-       line 299, "pan.___", state 760, "(1)"
-       line 299, "pan.___", state 760, "(1)"
-       line 303, "pan.___", state 768, "(1)"
-       line 303, "pan.___", state 769, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 769, "else"
-       line 303, "pan.___", state 772, "(1)"
-       line 303, "pan.___", state 773, "(1)"
-       line 303, "pan.___", state 773, "(1)"
-       line 301, "pan.___", state 778, "((i<1))"
-       line 301, "pan.___", state 778, "((i>=1))"
-       line 308, "pan.___", state 785, "(1)"
-       line 308, "pan.___", state 786, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 786, "else"
-       line 308, "pan.___", state 789, "(1)"
-       line 308, "pan.___", state 790, "(1)"
-       line 308, "pan.___", state 790, "(1)"
-       line 310, "pan.___", state 793, "(1)"
-       line 310, "pan.___", state 793, "(1)"
-       line 293, "pan.___", state 822, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 840, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 866, "(1)"
-       line 308, "pan.___", state 883, "(1)"
-       line 293, "pan.___", state 910, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 928, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 954, "(1)"
-       line 308, "pan.___", state 971, "(1)"
-       line 289, "pan.___", state 988, "(1)"
-       line 293, "pan.___", state 1000, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1018, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 1044, "(1)"
-       line 308, "pan.___", state 1061, "(1)"
-       line 293, "pan.___", state 1091, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1109, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 1135, "(1)"
-       line 308, "pan.___", state 1152, "(1)"
-       line 163, "pan.___", state 1174, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1187, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1200, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 1222, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1239, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 1248, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1261, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 1287, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 1289, "(1)"
-       line 289, "pan.___", state 1290, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 1290, "else"
-       line 289, "pan.___", state 1293, "(1)"
-       line 293, "pan.___", state 1301, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 1303, "(1)"
-       line 293, "pan.___", state 1304, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 1304, "else"
-       line 293, "pan.___", state 1307, "(1)"
-       line 293, "pan.___", state 1308, "(1)"
-       line 293, "pan.___", state 1308, "(1)"
-       line 291, "pan.___", state 1313, "((i<1))"
-       line 291, "pan.___", state 1313, "((i>=1))"
-       line 298, "pan.___", state 1319, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 1332, "(1)"
-       line 299, "pan.___", state 1333, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 1333, "else"
-       line 299, "pan.___", state 1336, "(1)"
-       line 299, "pan.___", state 1337, "(1)"
-       line 299, "pan.___", state 1337, "(1)"
-       line 303, "pan.___", state 1345, "(1)"
-       line 303, "pan.___", state 1346, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 1346, "else"
-       line 303, "pan.___", state 1349, "(1)"
-       line 303, "pan.___", state 1350, "(1)"
-       line 303, "pan.___", state 1350, "(1)"
-       line 301, "pan.___", state 1355, "((i<1))"
-       line 301, "pan.___", state 1355, "((i>=1))"
-       line 308, "pan.___", state 1362, "(1)"
-       line 308, "pan.___", state 1363, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 1363, "else"
-       line 308, "pan.___", state 1366, "(1)"
-       line 308, "pan.___", state 1367, "(1)"
-       line 308, "pan.___", state 1367, "(1)"
-       line 310, "pan.___", state 1370, "(1)"
-       line 310, "pan.___", state 1370, "(1)"
-       line 163, "pan.___", state 1394, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1407, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1420, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 1442, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1459, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 1468, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1481, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 511, "pan.___", state 1509, "-end-"
-       (143 of 1509 states)
-unreached in proctype :init:
-       line 518, "pan.___", state 9, "((j<2))"
-       line 518, "pan.___", state 9, "((j>=2))"
-       line 519, "pan.___", state 20, "((j<2))"
-       line 519, "pan.___", state 20, "((j>=2))"
-       line 524, "pan.___", state 33, "((j<2))"
-       line 524, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 572, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 28.5 seconds
-pan: rate 36487.053 states/second
-pan: avg transition delay 1.8409e-06 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 899fdb4..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-#define NO_RMB
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 0aacf1a..0000000
+++ /dev/null
@@ -1,1739 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2529
-2:3:2481
-3:3:2484
-4:3:2484
-5:3:2487
-6:3:2495
-7:3:2495
-8:3:2498
-9:3:2504
-10:3:2508
-11:3:2508
-12:3:2511
-13:3:2519
-14:3:2523
-15:3:2524
-16:0:2529
-17:3:2526
-18:0:2529
-19:2:974
-20:0:2529
-21:2:980
-22:0:2529
-23:2:981
-24:0:2529
-25:2:982
-26:2:986
-27:2:987
-28:2:995
-29:2:996
-30:2:1000
-31:2:1001
-32:2:1009
-33:2:1014
-34:2:1018
-35:2:1019
-36:2:1026
-37:2:1027
-38:2:1038
-39:2:1039
-40:2:1040
-41:2:1051
-42:2:1056
-43:2:1057
-44:0:2529
-45:2:1069
-46:2:1070
-47:0:2529
-48:2:1074
-49:2:1078
-50:2:1079
-51:2:1087
-52:2:1088
-53:2:1092
-54:2:1093
-55:2:1101
-56:2:1106
-57:2:1107
-58:2:1118
-59:2:1119
-60:2:1130
-61:2:1131
-62:2:1132
-63:2:1143
-64:2:1148
-65:2:1149
-66:0:2529
-67:2:1161
-68:0:2529
-69:2:1162
-70:0:2529
-71:2:1172
-72:0:2529
-73:2:1173
-74:0:2529
-75:2:1177
-76:2:1178
-77:2:1182
-78:2:1186
-79:2:1187
-80:2:1191
-81:2:1199
-82:2:1200
-83:0:2529
-84:2:1208
-85:0:2529
-86:2:1212
-87:2:1213
-88:2:1217
-89:2:1221
-90:2:1222
-91:2:1226
-92:2:1234
-93:2:1235
-94:0:2529
-95:2:1243
-96:0:2529
-97:2:1251
-98:2:1252
-99:2:1256
-100:2:1260
-101:2:1261
-102:2:1265
-103:2:1273
-104:2:1274
-105:0:2529
-106:2:1286
-107:0:2529
-108:2:1287
-109:2:1291
-110:2:1292
-111:2:1300
-112:2:1301
-113:2:1305
-114:2:1306
-115:2:1314
-116:2:1319
-117:2:1323
-118:2:1324
-119:2:1331
-120:2:1332
-121:2:1343
-122:2:1344
-123:2:1345
-124:2:1356
-125:2:1361
-126:2:1362
-127:0:2529
-128:2:1374
-129:0:2529
-130:2:1377
-131:2:1378
-132:2:1390
-133:2:1391
-134:2:1395
-135:2:1396
-136:2:1404
-137:2:1409
-138:2:1413
-139:2:1414
-140:2:1421
-141:2:1422
-142:2:1433
-143:2:1434
-144:2:1435
-145:2:1446
-146:2:1451
-147:2:1452
-148:0:2529
-149:2:1464
-150:0:2529
-151:2:1465
-152:0:2529
-153:2:1466
-154:0:2529
-155:2:1467
-156:0:2529
-157:2:1468
-158:2:1472
-159:2:1473
-160:2:1481
-161:2:1482
-162:2:1486
-163:2:1487
-164:2:1495
-165:2:1500
-166:2:1504
-167:2:1505
-168:2:1512
-169:2:1513
-170:2:1524
-171:2:1525
-172:2:1526
-173:2:1537
-174:2:1542
-175:2:1543
-176:0:2529
-177:2:1669
-178:0:2529
-179:2:1765
-180:0:2529
-181:2:1766
-182:0:2529
-183:2:1770
-184:0:2529
-185:2:1776
-186:2:1780
-187:2:1781
-188:2:1789
-189:2:1790
-190:2:1794
-191:2:1795
-192:2:1803
-193:2:1808
-194:2:1812
-195:2:1813
-196:2:1820
-197:2:1821
-198:2:1832
-199:2:1833
-200:2:1834
-201:2:1845
-202:2:1850
-203:2:1851
-204:0:2529
-205:2:1863
-206:0:2529
-207:2:1864
-208:2:1868
-209:2:1869
-210:2:1877
-211:2:1878
-212:2:1882
-213:2:1883
-214:2:1891
-215:2:1896
-216:2:1900
-217:2:1901
-218:2:1908
-219:2:1909
-220:2:1920
-221:2:1921
-222:2:1922
-223:2:1933
-224:2:1938
-225:2:1939
-226:0:2529
-227:2:1951
-228:0:2529
-229:2:1954
-230:2:1955
-231:2:1967
-232:2:1968
-233:2:1972
-234:2:1973
-235:2:1981
-236:2:1986
-237:2:1990
-238:2:1991
-239:2:1998
-240:2:1999
-241:2:2010
-242:2:2011
-243:2:2012
-244:2:2023
-245:2:2028
-246:2:2029
-247:0:2529
-248:2:2041
-249:0:2529
-250:2:2042
-251:0:2529
-252:2:2043
-253:0:2529
-254:2:2044
-255:0:2529
-256:2:2045
-257:2:2049
-258:2:2050
-259:2:2058
-260:2:2059
-261:2:2063
-262:2:2064
-263:2:2072
-264:2:2077
-265:2:2081
-266:2:2082
-267:2:2089
-268:2:2090
-269:2:2101
-270:2:2102
-271:2:2103
-272:2:2114
-273:2:2119
-274:2:2120
-275:0:2529
-276:2:2246
-277:0:2529
-278:2:2342
-279:0:2529
-280:2:2343
-281:0:2529
-282:2:2347
-283:0:2529
-284:2:2353
-285:0:2529
-286:2:2357
-287:2:2358
-288:2:2362
-289:2:2366
-290:2:2367
-291:2:2371
-292:2:2379
-293:2:2380
-294:0:2529
-295:2:2388
-296:0:2529
-297:2:2392
-298:2:2393
-299:2:2397
-300:2:2401
-301:2:2402
-302:2:2406
-303:2:2414
-304:2:2415
-305:0:2529
-306:2:2423
-307:0:2529
-308:2:2431
-309:2:2432
-310:2:2436
-311:2:2440
-312:2:2441
-313:2:2445
-314:2:2453
-315:2:2454
-316:0:2529
-317:2:2466
-318:0:2529
-319:2:2467
-320:0:2529
-321:2:981
-322:0:2529
-323:2:982
-324:2:986
-325:2:987
-326:2:995
-327:2:996
-328:2:1000
-329:2:1001
-330:2:1009
-331:2:1014
-332:2:1018
-333:2:1019
-334:2:1026
-335:2:1027
-336:2:1038
-337:2:1039
-338:2:1040
-339:2:1051
-340:2:1056
-341:2:1057
-342:0:2529
-343:2:1069
-344:2:1070
-345:0:2529
-346:2:1074
-347:2:1078
-348:2:1079
-349:2:1087
-350:2:1088
-351:2:1092
-352:2:1093
-353:2:1101
-354:2:1106
-355:2:1107
-356:2:1118
-357:2:1119
-358:2:1130
-359:2:1131
-360:2:1132
-361:2:1143
-362:2:1148
-363:2:1149
-364:0:2529
-365:2:1161
-366:0:2529
-367:2:1162
-368:0:2529
-369:2:1172
-370:0:2529
-371:2:1173
-372:0:2529
-373:2:1177
-374:2:1178
-375:2:1182
-376:2:1186
-377:2:1187
-378:2:1191
-379:2:1199
-380:2:1200
-381:0:2529
-382:2:1208
-383:0:2529
-384:2:1212
-385:2:1213
-386:2:1217
-387:2:1221
-388:2:1222
-389:2:1226
-390:2:1234
-391:2:1235
-392:0:2529
-393:2:1243
-394:0:2529
-395:2:1251
-396:2:1252
-397:2:1256
-398:2:1260
-399:2:1261
-400:2:1265
-401:2:1273
-402:2:1274
-403:0:2529
-404:2:1286
-405:0:2529
-406:2:1287
-407:2:1291
-408:2:1292
-409:2:1300
-410:2:1301
-411:2:1305
-412:2:1306
-413:2:1314
-414:2:1319
-415:2:1323
-416:2:1324
-417:2:1331
-418:2:1332
-419:2:1343
-420:2:1344
-421:2:1345
-422:2:1356
-423:2:1361
-424:2:1362
-425:0:2529
-426:2:1374
-427:0:2529
-428:2:1377
-429:2:1378
-430:2:1390
-431:2:1391
-432:2:1395
-433:2:1396
-434:2:1404
-435:2:1409
-436:2:1413
-437:2:1414
-438:2:1421
-439:2:1422
-440:2:1433
-441:2:1434
-442:2:1435
-443:2:1446
-444:2:1451
-445:2:1452
-446:0:2529
-447:2:1464
-448:0:2529
-449:2:1465
-450:0:2529
-451:2:1466
-452:0:2529
-453:2:1467
-454:0:2529
-455:2:1468
-456:2:1472
-457:2:1473
-458:2:1481
-459:2:1482
-460:2:1486
-461:2:1487
-462:2:1495
-463:2:1500
-464:2:1504
-465:2:1505
-466:2:1512
-467:2:1513
-468:2:1524
-469:2:1525
-470:2:1526
-471:2:1537
-472:2:1542
-473:2:1543
-474:0:2529
-475:2:1669
-476:0:2529
-477:2:1765
-478:0:2529
-479:2:1766
-480:0:2529
-481:2:1770
-482:0:2529
-483:2:1776
-484:2:1780
-485:2:1781
-486:2:1789
-487:2:1790
-488:2:1794
-489:2:1795
-490:2:1803
-491:2:1808
-492:2:1812
-493:2:1813
-494:2:1820
-495:2:1821
-496:2:1832
-497:2:1833
-498:2:1834
-499:2:1845
-500:2:1850
-501:2:1851
-502:0:2529
-503:2:1863
-504:0:2529
-505:2:1864
-506:2:1868
-507:2:1869
-508:2:1877
-509:2:1878
-510:2:1882
-511:2:1883
-512:2:1891
-513:2:1896
-514:2:1900
-515:2:1901
-516:2:1908
-517:2:1909
-518:2:1920
-519:2:1921
-520:2:1922
-521:2:1933
-522:2:1938
-523:2:1939
-524:0:2529
-525:2:1951
-526:0:2529
-527:2:1954
-528:2:1955
-529:2:1967
-530:2:1968
-531:2:1972
-532:2:1973
-533:2:1981
-534:2:1986
-535:2:1990
-536:2:1991
-537:2:1998
-538:2:1999
-539:2:2010
-540:2:2011
-541:2:2012
-542:2:2023
-543:2:2028
-544:2:2029
-545:0:2529
-546:2:2041
-547:0:2529
-548:2:2042
-549:0:2529
-550:2:2043
-551:0:2529
-552:2:2044
-553:0:2529
-554:2:2045
-555:2:2049
-556:2:2050
-557:2:2058
-558:2:2059
-559:2:2063
-560:2:2064
-561:2:2072
-562:2:2077
-563:2:2081
-564:2:2082
-565:2:2089
-566:2:2090
-567:2:2101
-568:2:2102
-569:2:2103
-570:2:2114
-571:2:2119
-572:2:2120
-573:0:2529
-574:2:2246
-575:0:2529
-576:2:2342
-577:0:2529
-578:2:2343
-579:0:2529
-580:2:2347
-581:0:2529
-582:2:2353
-583:0:2529
-584:2:2357
-585:2:2358
-586:2:2362
-587:2:2366
-588:2:2367
-589:2:2371
-590:2:2379
-591:2:2380
-592:0:2529
-593:2:2388
-594:0:2529
-595:2:2392
-596:2:2393
-597:2:2397
-598:2:2401
-599:2:2402
-600:2:2406
-601:2:2414
-602:2:2415
-603:0:2529
-604:2:2423
-605:0:2529
-606:2:2431
-607:2:2432
-608:2:2436
-609:2:2440
-610:2:2441
-611:2:2445
-612:2:2453
-613:2:2454
-614:0:2529
-615:2:2466
-616:0:2529
-617:2:2467
-618:0:2529
-619:2:981
-620:0:2529
-621:2:982
-622:2:986
-623:2:987
-624:2:995
-625:2:996
-626:2:1000
-627:2:1001
-628:2:1009
-629:2:1014
-630:2:1018
-631:2:1019
-632:2:1026
-633:2:1027
-634:2:1038
-635:2:1039
-636:2:1040
-637:2:1051
-638:2:1056
-639:2:1057
-640:0:2529
-641:2:1069
-642:2:1070
-643:0:2529
-644:2:1074
-645:2:1078
-646:2:1079
-647:2:1087
-648:2:1088
-649:2:1092
-650:2:1093
-651:2:1101
-652:2:1106
-653:2:1107
-654:2:1118
-655:2:1119
-656:2:1130
-657:2:1131
-658:2:1132
-659:2:1143
-660:2:1148
-661:2:1149
-662:0:2529
-663:2:1161
-664:0:2529
-665:2:1162
-666:0:2529
-667:2:1172
-668:0:2529
-669:2:1173
-670:0:2529
-671:2:1177
-672:2:1178
-673:2:1182
-674:2:1186
-675:2:1187
-676:2:1191
-677:2:1199
-678:2:1200
-679:0:2529
-680:2:1208
-681:0:2529
-682:2:1212
-683:2:1213
-684:2:1217
-685:2:1221
-686:2:1222
-687:2:1226
-688:2:1234
-689:2:1235
-690:0:2529
-691:2:1243
-692:0:2529
-693:2:1251
-694:2:1252
-695:2:1256
-696:2:1260
-697:2:1261
-698:2:1265
-699:2:1273
-700:2:1274
-701:0:2529
-702:2:1286
-703:0:2529
-704:2:1287
-705:2:1291
-706:2:1292
-707:2:1300
-708:2:1301
-709:2:1305
-710:2:1306
-711:2:1314
-712:2:1319
-713:2:1323
-714:2:1324
-715:2:1331
-716:2:1332
-717:2:1343
-718:2:1344
-719:2:1345
-720:2:1356
-721:2:1361
-722:2:1362
-723:0:2529
-724:2:1374
-725:0:2529
-726:2:1377
-727:2:1378
-728:2:1390
-729:2:1391
-730:2:1395
-731:2:1396
-732:2:1404
-733:2:1409
-734:2:1413
-735:2:1414
-736:2:1421
-737:2:1422
-738:2:1433
-739:2:1434
-740:2:1435
-741:2:1446
-742:2:1451
-743:2:1452
-744:0:2529
-745:2:1464
-746:0:2529
-747:2:1465
-748:0:2529
-749:2:1466
-750:0:2529
-751:2:1467
-752:0:2529
-753:2:1468
-754:2:1472
-755:2:1473
-756:2:1481
-757:2:1482
-758:2:1486
-759:2:1487
-760:2:1495
-761:2:1500
-762:2:1504
-763:2:1505
-764:2:1512
-765:2:1513
-766:2:1524
-767:2:1525
-768:2:1526
-769:2:1537
-770:2:1542
-771:2:1543
-772:0:2529
-773:2:1669
-774:0:2529
-775:2:1765
-776:0:2529
-777:2:1766
-778:0:2529
-779:2:1770
-780:0:2529
-781:2:1776
-782:2:1780
-783:2:1781
-784:2:1789
-785:2:1790
-786:2:1794
-787:2:1795
-788:2:1803
-789:2:1808
-790:2:1812
-791:2:1813
-792:2:1820
-793:2:1821
-794:2:1832
-795:2:1833
-796:2:1834
-797:2:1845
-798:2:1850
-799:2:1851
-800:0:2529
-801:2:1863
-802:0:2529
-803:2:1864
-804:2:1868
-805:2:1869
-806:2:1877
-807:2:1878
-808:2:1882
-809:2:1883
-810:2:1891
-811:2:1896
-812:2:1900
-813:2:1901
-814:2:1908
-815:2:1909
-816:2:1920
-817:2:1921
-818:2:1922
-819:2:1933
-820:2:1938
-821:2:1939
-822:0:2529
-823:2:1951
-824:0:2529
-825:2:1954
-826:2:1955
-827:2:1967
-828:2:1968
-829:2:1972
-830:2:1973
-831:2:1981
-832:2:1986
-833:2:1990
-834:2:1991
-835:2:1998
-836:2:1999
-837:2:2010
-838:2:2011
-839:2:2012
-840:2:2023
-841:2:2028
-842:2:2029
-843:0:2529
-844:2:2041
-845:0:2529
-846:2:2042
-847:0:2529
-848:2:2043
-849:0:2529
-850:2:2044
-851:0:2529
-852:2:2045
-853:2:2049
-854:2:2050
-855:2:2058
-856:2:2059
-857:2:2063
-858:2:2064
-859:2:2072
-860:2:2077
-861:2:2081
-862:2:2082
-863:2:2089
-864:2:2090
-865:2:2101
-866:2:2102
-867:2:2103
-868:2:2114
-869:2:2119
-870:2:2120
-871:0:2529
-872:2:2246
-873:0:2529
-874:2:2342
-875:0:2529
-876:2:2343
-877:0:2529
-878:2:2347
-879:0:2529
-880:2:2353
-881:0:2529
-882:2:2357
-883:2:2358
-884:2:2362
-885:2:2366
-886:2:2367
-887:2:2371
-888:2:2379
-889:2:2380
-890:0:2529
-891:2:2388
-892:0:2529
-893:2:2392
-894:2:2393
-895:2:2397
-896:2:2401
-897:2:2402
-898:2:2406
-899:2:2414
-900:2:2415
-901:0:2529
-902:2:2423
-903:0:2529
-904:2:2431
-905:2:2432
-906:2:2436
-907:2:2440
-908:2:2441
-909:2:2445
-910:2:2453
-911:2:2454
-912:0:2529
-913:2:2466
-914:0:2529
-915:2:2467
-916:0:2529
-917:2:981
-918:0:2529
-919:2:982
-920:2:986
-921:2:987
-922:2:995
-923:2:996
-924:2:1000
-925:2:1001
-926:2:1009
-927:2:1014
-928:2:1018
-929:2:1019
-930:2:1026
-931:2:1027
-932:2:1038
-933:2:1039
-934:2:1040
-935:2:1051
-936:2:1056
-937:2:1057
-938:0:2529
-939:2:1069
-940:2:1070
-941:0:2529
-942:2:1074
-943:2:1078
-944:2:1079
-945:2:1087
-946:2:1088
-947:2:1092
-948:2:1093
-949:2:1101
-950:2:1106
-951:2:1107
-952:2:1118
-953:2:1119
-954:2:1130
-955:2:1131
-956:2:1132
-957:2:1143
-958:2:1148
-959:2:1149
-960:0:2529
-961:2:1161
-962:0:2529
-963:2:1162
-964:0:2529
-965:2:1172
-966:0:2529
-967:2:1173
-968:0:2529
-969:2:1177
-970:2:1178
-971:2:1182
-972:2:1186
-973:2:1187
-974:2:1191
-975:2:1199
-976:2:1200
-977:0:2529
-978:2:1208
-979:0:2529
-980:2:1212
-981:2:1213
-982:2:1217
-983:2:1221
-984:2:1222
-985:2:1226
-986:2:1234
-987:2:1235
-988:0:2529
-989:2:1243
-990:0:2529
-991:2:1251
-992:2:1252
-993:2:1256
-994:2:1260
-995:2:1261
-996:2:1265
-997:2:1273
-998:2:1274
-999:0:2529
-1000:2:1286
-1001:0:2529
-1002:2:1287
-1003:2:1291
-1004:2:1292
-1005:2:1300
-1006:2:1301
-1007:2:1305
-1008:2:1306
-1009:2:1314
-1010:2:1319
-1011:2:1323
-1012:2:1324
-1013:2:1331
-1014:2:1332
-1015:2:1343
-1016:2:1344
-1017:2:1345
-1018:2:1356
-1019:2:1361
-1020:2:1362
-1021:0:2529
-1022:2:1374
-1023:0:2529
-1024:2:1377
-1025:2:1378
-1026:2:1390
-1027:2:1391
-1028:2:1395
-1029:2:1396
-1030:2:1404
-1031:2:1409
-1032:2:1413
-1033:2:1414
-1034:2:1421
-1035:2:1422
-1036:2:1433
-1037:2:1434
-1038:2:1435
-1039:2:1446
-1040:2:1451
-1041:2:1452
-1042:0:2529
-1043:2:1464
-1044:0:2529
-1045:2:1465
-1046:0:2529
-1047:2:1466
-1048:0:2529
-1049:2:1467
-1050:0:2529
-1051:2:1468
-1052:2:1472
-1053:2:1473
-1054:2:1481
-1055:2:1482
-1056:2:1486
-1057:2:1487
-1058:2:1495
-1059:2:1500
-1060:2:1504
-1061:2:1505
-1062:2:1512
-1063:2:1513
-1064:2:1524
-1065:2:1525
-1066:2:1526
-1067:2:1537
-1068:2:1542
-1069:2:1543
-1070:0:2529
-1071:2:1669
-1072:0:2529
-1073:2:1765
-1074:0:2529
-1075:2:1766
-1076:0:2529
-1077:2:1770
-1078:0:2529
-1079:2:1776
-1080:2:1780
-1081:2:1781
-1082:2:1789
-1083:2:1790
-1084:2:1794
-1085:2:1795
-1086:2:1803
-1087:2:1808
-1088:2:1812
-1089:2:1813
-1090:2:1820
-1091:2:1821
-1092:2:1832
-1093:2:1833
-1094:2:1834
-1095:2:1845
-1096:2:1850
-1097:2:1851
-1098:0:2529
-1099:2:1863
-1100:0:2529
-1101:2:1864
-1102:2:1868
-1103:2:1869
-1104:2:1877
-1105:2:1878
-1106:2:1882
-1107:2:1883
-1108:2:1891
-1109:2:1896
-1110:2:1900
-1111:2:1901
-1112:2:1908
-1113:2:1909
-1114:2:1920
-1115:2:1921
-1116:2:1922
-1117:2:1933
-1118:2:1938
-1119:2:1939
-1120:0:2529
-1121:2:1951
-1122:0:2529
-1123:2:1954
-1124:2:1955
-1125:2:1967
-1126:2:1968
-1127:2:1972
-1128:2:1973
-1129:2:1981
-1130:2:1986
-1131:2:1990
-1132:2:1991
-1133:2:1998
-1134:2:1999
-1135:2:2010
-1136:2:2011
-1137:2:2012
-1138:2:2023
-1139:2:2028
-1140:2:2029
-1141:0:2529
-1142:2:2041
-1143:0:2529
-1144:2:2042
-1145:0:2529
-1146:2:2043
-1147:0:2529
-1148:2:2044
-1149:0:2529
-1150:2:2045
-1151:2:2049
-1152:2:2050
-1153:2:2058
-1154:2:2059
-1155:2:2063
-1156:2:2064
-1157:2:2072
-1158:2:2077
-1159:2:2081
-1160:2:2082
-1161:2:2089
-1162:2:2090
-1163:2:2101
-1164:2:2102
-1165:2:2103
-1166:2:2114
-1167:2:2119
-1168:2:2120
-1169:0:2529
-1170:2:2246
-1171:0:2529
-1172:2:2342
-1173:0:2529
-1174:2:2343
-1175:0:2529
-1176:2:2347
-1177:0:2529
-1178:2:2353
-1179:0:2529
-1180:2:2357
-1181:2:2358
-1182:2:2362
-1183:2:2366
-1184:2:2367
-1185:2:2371
-1186:2:2379
-1187:2:2380
-1188:0:2529
-1189:2:2388
-1190:0:2529
-1191:2:2392
-1192:2:2393
-1193:2:2397
-1194:2:2401
-1195:2:2402
-1196:2:2406
-1197:2:2414
-1198:2:2415
-1199:0:2529
-1200:2:2423
-1201:0:2529
-1202:2:2431
-1203:2:2432
-1204:2:2436
-1205:2:2440
-1206:2:2441
-1207:2:2445
-1208:2:2453
-1209:2:2454
-1210:0:2529
-1211:2:2466
-1212:0:2529
-1213:2:2467
-1214:0:2529
-1215:2:981
-1216:0:2529
-1217:2:982
-1218:2:986
-1219:2:987
-1220:2:995
-1221:2:996
-1222:2:1000
-1223:2:1001
-1224:2:1009
-1225:2:1014
-1226:2:1018
-1227:2:1019
-1228:2:1026
-1229:2:1027
-1230:2:1038
-1231:2:1039
-1232:2:1040
-1233:2:1051
-1234:2:1056
-1235:2:1057
-1236:0:2529
-1237:2:1069
-1238:2:1070
-1239:0:2529
-1240:2:1074
-1241:2:1078
-1242:2:1079
-1243:2:1087
-1244:2:1088
-1245:2:1092
-1246:2:1093
-1247:2:1101
-1248:2:1114
-1249:2:1115
-1250:2:1118
-1251:2:1119
-1252:2:1130
-1253:2:1131
-1254:2:1132
-1255:2:1143
-1256:2:1148
-1257:2:1151
-1258:2:1152
-1259:0:2529
-1260:2:1161
-1261:0:2529
-1262:2:1162
-1263:0:2529
-1264:2:1172
-1265:0:2529
-1266:2:1173
-1267:0:2529
-1268:1:2
-1269:0:2529
-1270:1:8
-1271:0:2529
-1272:1:9
-1273:0:2529
-1274:1:10
-1275:0:2529
-1276:1:11
-1277:0:2529
-1278:1:12
-1279:1:16
-1280:1:17
-1281:1:25
-1282:1:26
-1283:1:30
-1284:1:31
-1285:1:39
-1286:1:44
-1287:1:48
-1288:1:49
-1289:1:56
-1290:1:57
-1291:1:68
-1292:1:69
-1293:1:70
-1294:1:81
-1295:1:86
-1296:1:87
-1297:0:2529
-1298:2:1177
-1299:2:1178
-1300:2:1182
-1301:2:1186
-1302:2:1187
-1303:2:1191
-1304:2:1196
-1305:0:2529
-1306:2:1208
-1307:0:2529
-1308:2:1212
-1309:2:1213
-1310:2:1217
-1311:2:1221
-1312:2:1222
-1313:2:1226
-1314:2:1234
-1315:2:1235
-1316:0:2529
-1317:2:1243
-1318:0:2529
-1319:2:1251
-1320:2:1252
-1321:2:1256
-1322:2:1260
-1323:2:1261
-1324:2:1265
-1325:2:1273
-1326:2:1274
-1327:0:2529
-1328:2:1286
-1329:0:2529
-1330:2:1287
-1331:2:1291
-1332:2:1292
-1333:2:1300
-1334:2:1301
-1335:2:1305
-1336:2:1306
-1337:2:1314
-1338:2:1319
-1339:2:1323
-1340:2:1324
-1341:2:1331
-1342:2:1332
-1343:2:1343
-1344:2:1344
-1345:2:1345
-1346:2:1356
-1347:2:1361
-1348:2:1362
-1349:0:2529
-1350:2:1374
-1351:0:2529
-1352:2:1377
-1353:2:1378
-1354:2:1390
-1355:2:1391
-1356:2:1395
-1357:2:1396
-1358:2:1404
-1359:2:1409
-1360:2:1413
-1361:2:1414
-1362:2:1421
-1363:2:1422
-1364:2:1433
-1365:2:1434
-1366:2:1435
-1367:2:1446
-1368:2:1451
-1369:2:1452
-1370:0:2529
-1371:2:1464
-1372:0:2529
-1373:2:1465
-1374:0:2529
-1375:2:1466
-1376:0:2529
-1377:2:1467
-1378:0:2529
-1379:2:1468
-1380:2:1472
-1381:2:1473
-1382:2:1481
-1383:2:1482
-1384:2:1486
-1385:2:1487
-1386:2:1495
-1387:2:1500
-1388:2:1504
-1389:2:1505
-1390:2:1512
-1391:2:1513
-1392:2:1524
-1393:2:1525
-1394:2:1526
-1395:2:1537
-1396:2:1542
-1397:2:1543
-1398:0:2529
-1399:2:1669
-1400:0:2529
-1401:2:1765
-1402:0:2529
-1403:2:1766
-1404:0:2529
-1405:2:1770
-1406:0:2529
-1407:2:1776
-1408:2:1780
-1409:2:1781
-1410:2:1789
-1411:2:1790
-1412:2:1794
-1413:2:1795
-1414:2:1803
-1415:2:1808
-1416:2:1812
-1417:2:1813
-1418:2:1820
-1419:2:1821
-1420:2:1832
-1421:2:1833
-1422:2:1834
-1423:2:1845
-1424:2:1850
-1425:2:1851
-1426:0:2529
-1427:2:1863
-1428:0:2529
-1429:2:1864
-1430:2:1868
-1431:2:1869
-1432:2:1877
-1433:2:1878
-1434:2:1882
-1435:2:1883
-1436:2:1891
-1437:2:1896
-1438:2:1900
-1439:2:1901
-1440:2:1908
-1441:2:1909
-1442:2:1920
-1443:2:1921
-1444:2:1922
-1445:2:1933
-1446:2:1938
-1447:2:1939
-1448:0:2529
-1449:2:1951
-1450:0:2529
-1451:2:1954
-1452:2:1955
-1453:2:1967
-1454:2:1968
-1455:2:1972
-1456:2:1973
-1457:2:1981
-1458:2:1986
-1459:2:1990
-1460:2:1991
-1461:2:1998
-1462:2:1999
-1463:2:2010
-1464:2:2011
-1465:2:2012
-1466:2:2023
-1467:2:2028
-1468:2:2029
-1469:0:2529
-1470:2:2041
-1471:0:2529
-1472:2:2042
-1473:0:2529
-1474:2:2043
-1475:0:2529
-1476:2:2044
-1477:0:2529
-1478:2:2045
-1479:2:2049
-1480:2:2050
-1481:2:2058
-1482:2:2059
-1483:2:2063
-1484:2:2064
-1485:2:2072
-1486:2:2077
-1487:2:2081
-1488:2:2082
-1489:2:2089
-1490:2:2090
-1491:2:2101
-1492:2:2102
-1493:2:2103
-1494:2:2114
-1495:2:2119
-1496:2:2120
-1497:0:2529
-1498:2:2246
-1499:0:2529
-1500:2:2342
-1501:0:2529
-1502:2:2343
-1503:0:2529
-1504:2:2347
-1505:0:2529
-1506:2:2353
-1507:0:2529
-1508:2:2357
-1509:2:2358
-1510:2:2362
-1511:2:2366
-1512:2:2367
-1513:2:2371
-1514:2:2379
-1515:2:2380
-1516:0:2529
-1517:2:2388
-1518:0:2529
-1519:2:2392
-1520:2:2393
-1521:2:2397
-1522:2:2401
-1523:2:2402
-1524:2:2406
-1525:2:2414
-1526:2:2415
-1527:0:2529
-1528:2:2423
-1529:0:2529
-1530:2:2431
-1531:2:2432
-1532:2:2436
-1533:2:2440
-1534:2:2441
-1535:2:2445
-1536:2:2453
-1537:2:2454
-1538:0:2529
-1539:2:2466
-1540:0:2529
-1541:2:2467
-1542:0:2529
-1543:2:2470
-1544:0:2529
-1545:2:2475
-1546:0:2529
-1547:1:99
-1548:0:2529
-1549:2:2476
-1550:0:2529
-1551:1:100
-1552:1:104
-1553:1:105
-1554:1:113
-1555:1:114
-1556:1:118
-1557:1:119
-1558:1:127
-1559:1:132
-1560:1:136
-1561:1:137
-1562:1:144
-1563:1:145
-1564:1:156
-1565:1:157
-1566:1:158
-1567:1:169
-1568:1:181
-1569:1:182
-1570:0:2529
-1571:2:2475
-1572:0:2529
-1573:1:187
-1574:0:2529
-1575:2:2476
-1576:0:2529
-1577:1:188
-1578:0:2529
-1579:2:2475
-1580:0:2529
-1581:1:189
-1582:1:193
-1583:1:194
-1584:1:202
-1585:1:203
-1586:1:207
-1587:1:208
-1588:1:216
-1589:1:221
-1590:1:225
-1591:1:226
-1592:1:233
-1593:1:234
-1594:1:245
-1595:1:246
-1596:1:247
-1597:1:258
-1598:1:270
-1599:1:271
-1600:0:2529
-1601:2:2476
-1602:0:2529
-1603:1:276
-1604:0:2529
-1605:2:2475
-1606:0:2529
-1607:1:393
-1608:0:2529
-1609:2:2476
-1610:0:2529
-1611:1:394
-1612:0:2529
-1613:2:2475
-1614:0:2529
-1615:1:11
-1616:0:2529
-1617:2:2476
-1618:0:2529
-1619:1:12
-1620:1:16
-1621:1:17
-1622:1:25
-1623:1:26
-1624:1:27
-1625:1:39
-1626:1:44
-1627:1:48
-1628:1:49
-1629:1:56
-1630:1:57
-1631:1:68
-1632:1:69
-1633:1:70
-1634:1:81
-1635:1:93
-1636:1:94
-1637:0:2529
-1638:2:2475
-1639:0:2529
-1640:1:99
-1641:0:2529
-1642:2:2476
-1643:0:2529
-1644:1:100
-1645:1:104
-1646:1:105
-1647:1:113
-1648:1:114
-1649:1:118
-1650:1:119
-1651:1:127
-1652:1:132
-1653:1:136
-1654:1:137
-1655:1:144
-1656:1:145
-1657:1:156
-1658:1:157
-1659:1:158
-1660:1:169
-1661:1:181
-1662:1:182
-1663:0:2529
-1664:2:2475
-1665:0:2529
-1666:1:279
-1667:0:2529
-1668:2:2476
-1669:0:2529
-1670:1:280
-1671:0:2529
-1672:2:2475
-1673:0:2529
-1674:1:393
-1675:0:2529
-1676:2:2476
-1677:0:2529
-1678:1:394
-1679:0:2529
-1680:2:2475
-1681:0:2529
-1682:1:399
-1683:0:2529
-1684:2:2476
-1685:0:2529
-1686:1:404
-1687:1:408
-1688:1:409
-1689:1:417
-1690:1:418
-1691:1:419
-1692:1:431
-1693:1:436
-1694:1:440
-1695:1:441
-1696:1:448
-1697:1:449
-1698:1:460
-1699:1:461
-1700:1:462
-1701:1:473
-1702:1:485
-1703:1:486
-1704:0:2529
-1705:2:2475
-1706:0:2529
-1707:1:491
-1708:0:2529
-1709:2:2476
-1710:0:2529
-1711:1:492
-1712:1:496
-1713:1:497
-1714:1:505
-1715:1:506
-1716:1:510
-1717:1:511
-1718:1:519
-1719:1:524
-1720:1:528
-1721:1:529
-1722:1:536
-1723:1:537
-1724:1:548
-1725:1:549
-1726:1:550
-1727:1:561
-1728:1:566
-1729:1:567
-1730:0:2529
-1731:2:2475
-1732:0:2529
-1733:1:579
-1734:0:2527
-1735:2:2476
-1736:0:2533
-1737:1:662
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.define b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 477c85d..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 567)
-pan: claim violated! (at depth 1889)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 6646, errors: 1
-   377244 states, stored
-  5291719 states, matched
-  5668963 transitions (= stored+matched)
- 20822372 atomic steps
-hash conflicts:    405371 (resolved)
-
-Stats on memory usage (in Megabytes):
-   30.221      equivalent memory usage for states (stored*(State-vector + overhead))
-   23.526      actual memory usage for states (compression: 77.85%)
-               state-vector as stored = 37 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  489.201      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 289, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 61, "(1)"
-       line 308, "pan.___", state 91, "(1)"
-       line 289, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 149, "(1)"
-       line 308, "pan.___", state 179, "(1)"
-       line 289, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 238, "(1)"
-       line 308, "pan.___", state 268, "(1)"
-       line 144, "pan.___", state 290, "(1)"
-       line 148, "pan.___", state 298, "(1)"
-       line 148, "pan.___", state 299, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 299, "else"
-       line 146, "pan.___", state 304, "((j<1))"
-       line 146, "pan.___", state 304, "((j>=1))"
-       line 152, "pan.___", state 310, "(1)"
-       line 152, "pan.___", state 311, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 311, "else"
-       line 186, "pan.___", state 316, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 316, "else"
-       line 144, "pan.___", state 322, "(1)"
-       line 148, "pan.___", state 330, "(1)"
-       line 148, "pan.___", state 331, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 148, "pan.___", state 331, "else"
-       line 146, "pan.___", state 336, "((j<1))"
-       line 146, "pan.___", state 336, "((j>=1))"
-       line 152, "pan.___", state 342, "(1)"
-       line 152, "pan.___", state 343, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 152, "pan.___", state 343, "else"
-       line 186, "pan.___", state 348, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 186, "pan.___", state 348, "else"
-       line 200, "pan.___", state 352, "((i<1))"
-       line 200, "pan.___", state 352, "((i>=1))"
-       line 144, "pan.___", state 358, "(1)"
-       line 148, "pan.___", state 366, "(1)"
-       line 148, "pan.___", state 367, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 367, "else"
-       line 146, "pan.___", state 372, "((j<1))"
-       line 146, "pan.___", state 372, "((j>=1))"
-       line 152, "pan.___", state 378, "(1)"
-       line 152, "pan.___", state 379, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 379, "else"
-       line 186, "pan.___", state 384, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 384, "else"
-       line 289, "pan.___", state 399, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 415, "(1)"
-       line 298, "pan.___", state 431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 444, "(1)"
-       line 308, "pan.___", state 474, "(1)"
-       line 289, "pan.___", state 487, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 519, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 532, "(1)"
-       line 308, "pan.___", state 562, "(1)"
-       line 289, "pan.___", state 575, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 607, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 620, "(1)"
-       line 308, "pan.___", state 650, "(1)"
-       line 144, "pan.___", state 666, "(1)"
-       line 148, "pan.___", state 674, "(1)"
-       line 148, "pan.___", state 675, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 675, "else"
-       line 146, "pan.___", state 680, "((j<1))"
-       line 146, "pan.___", state 680, "((j>=1))"
-       line 152, "pan.___", state 686, "(1)"
-       line 152, "pan.___", state 687, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 687, "else"
-       line 186, "pan.___", state 692, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 692, "else"
-       line 144, "pan.___", state 698, "(1)"
-       line 148, "pan.___", state 706, "(1)"
-       line 148, "pan.___", state 707, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 148, "pan.___", state 707, "else"
-       line 146, "pan.___", state 712, "((j<1))"
-       line 146, "pan.___", state 712, "((j>=1))"
-       line 152, "pan.___", state 718, "(1)"
-       line 152, "pan.___", state 719, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 152, "pan.___", state 719, "else"
-       line 186, "pan.___", state 724, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 186, "pan.___", state 724, "else"
-       line 200, "pan.___", state 728, "((i<1))"
-       line 200, "pan.___", state 728, "((i>=1))"
-       line 144, "pan.___", state 734, "(1)"
-       line 148, "pan.___", state 742, "(1)"
-       line 148, "pan.___", state 743, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 743, "else"
-       line 146, "pan.___", state 748, "((j<1))"
-       line 146, "pan.___", state 748, "((j>=1))"
-       line 152, "pan.___", state 754, "(1)"
-       line 152, "pan.___", state 755, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 755, "else"
-       line 186, "pan.___", state 760, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 760, "else"
-       line 289, "pan.___", state 770, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 802, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 815, "(1)"
-       line 308, "pan.___", state 845, "(1)"
-       line 289, "pan.___", state 866, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 882, "(1)"
-       line 298, "pan.___", state 898, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 911, "(1)"
-       line 308, "pan.___", state 941, "(1)"
-       line 434, "pan.___", state 954, "-end-"
-       (79 of 954 states)
-unreached in proctype urcu_writer
-       line 289, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 20, "(1)"
-       line 293, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 34, "(1)"
-       line 293, "pan.___", state 35, "(1)"
-       line 293, "pan.___", state 35, "(1)"
-       line 291, "pan.___", state 40, "((i<1))"
-       line 291, "pan.___", state 40, "((i>=1))"
-       line 298, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 59, "(1)"
-       line 299, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 60, "else"
-       line 299, "pan.___", state 63, "(1)"
-       line 299, "pan.___", state 64, "(1)"
-       line 299, "pan.___", state 64, "(1)"
-       line 303, "pan.___", state 72, "(1)"
-       line 303, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 73, "else"
-       line 303, "pan.___", state 76, "(1)"
-       line 303, "pan.___", state 77, "(1)"
-       line 303, "pan.___", state 77, "(1)"
-       line 301, "pan.___", state 82, "((i<1))"
-       line 301, "pan.___", state 82, "((i>=1))"
-       line 308, "pan.___", state 89, "(1)"
-       line 308, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 90, "else"
-       line 308, "pan.___", state 93, "(1)"
-       line 308, "pan.___", state 94, "(1)"
-       line 308, "pan.___", state 94, "(1)"
-       line 310, "pan.___", state 97, "(1)"
-       line 310, "pan.___", state 97, "(1)"
-       line 456, "pan.___", state 101, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 454, "pan.___", state 102, "old_gen = cached_generation_ptr.val[_pid]"
-       line 289, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 112, "(1)"
-       line 293, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 126, "(1)"
-       line 293, "pan.___", state 127, "(1)"
-       line 293, "pan.___", state 127, "(1)"
-       line 291, "pan.___", state 132, "((i<1))"
-       line 291, "pan.___", state 132, "((i>=1))"
-       line 299, "pan.___", state 151, "(1)"
-       line 299, "pan.___", state 152, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 152, "else"
-       line 299, "pan.___", state 155, "(1)"
-       line 299, "pan.___", state 156, "(1)"
-       line 299, "pan.___", state 156, "(1)"
-       line 303, "pan.___", state 164, "(1)"
-       line 303, "pan.___", state 165, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 165, "else"
-       line 303, "pan.___", state 168, "(1)"
-       line 303, "pan.___", state 169, "(1)"
-       line 303, "pan.___", state 169, "(1)"
-       line 301, "pan.___", state 174, "((i<1))"
-       line 301, "pan.___", state 174, "((i>=1))"
-       line 308, "pan.___", state 181, "(1)"
-       line 308, "pan.___", state 182, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 182, "else"
-       line 308, "pan.___", state 185, "(1)"
-       line 308, "pan.___", state 186, "(1)"
-       line 308, "pan.___", state 186, "(1)"
-       line 310, "pan.___", state 189, "(1)"
-       line 310, "pan.___", state 189, "(1)"
-       line 468, "pan.___", state 195, "(1)"
-       line 462, "pan.___", state 198, "((write_lock==0))"
-       line 462, "pan.___", state 198, "else"
-       line 460, "pan.___", state 199, "(1)"
-       line 144, "pan.___", state 206, "(1)"
-       line 148, "pan.___", state 214, "(1)"
-       line 148, "pan.___", state 215, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 215, "else"
-       line 146, "pan.___", state 220, "((j<1))"
-       line 146, "pan.___", state 220, "((j>=1))"
-       line 152, "pan.___", state 226, "(1)"
-       line 152, "pan.___", state 227, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 227, "else"
-       line 186, "pan.___", state 232, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 186, "pan.___", state 232, "else"
-       line 144, "pan.___", state 238, "(1)"
-       line 152, "pan.___", state 258, "(1)"
-       line 144, "pan.___", state 274, "(1)"
-       line 148, "pan.___", state 282, "(1)"
-       line 152, "pan.___", state 294, "(1)"
-       line 289, "pan.___", state 310, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 324, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 342, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 355, "(1)"
-       line 303, "pan.___", state 368, "(1)"
-       line 308, "pan.___", state 385, "(1)"
-       line 289, "pan.___", state 402, "(1)"
-       line 293, "pan.___", state 414, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 432, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 458, "(1)"
-       line 308, "pan.___", state 475, "(1)"
-       line 293, "pan.___", state 505, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 523, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 549, "(1)"
-       line 308, "pan.___", state 566, "(1)"
-       line 148, "pan.___", state 588, "(1)"
-       line 152, "pan.___", state 600, "(1)"
-       line 144, "pan.___", state 612, "(1)"
-       line 152, "pan.___", state 632, "(1)"
-       line 148, "pan.___", state 656, "(1)"
-       line 152, "pan.___", state 668, "(1)"
-       line 289, "pan.___", state 692, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 694, "(1)"
-       line 289, "pan.___", state 695, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 695, "else"
-       line 289, "pan.___", state 698, "(1)"
-       line 293, "pan.___", state 706, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 708, "(1)"
-       line 293, "pan.___", state 709, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 709, "else"
-       line 293, "pan.___", state 712, "(1)"
-       line 293, "pan.___", state 713, "(1)"
-       line 293, "pan.___", state 713, "(1)"
-       line 291, "pan.___", state 718, "((i<1))"
-       line 291, "pan.___", state 718, "((i>=1))"
-       line 298, "pan.___", state 724, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 737, "(1)"
-       line 299, "pan.___", state 738, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 738, "else"
-       line 299, "pan.___", state 741, "(1)"
-       line 299, "pan.___", state 742, "(1)"
-       line 299, "pan.___", state 742, "(1)"
-       line 303, "pan.___", state 750, "(1)"
-       line 303, "pan.___", state 751, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 751, "else"
-       line 303, "pan.___", state 754, "(1)"
-       line 303, "pan.___", state 755, "(1)"
-       line 303, "pan.___", state 755, "(1)"
-       line 301, "pan.___", state 760, "((i<1))"
-       line 301, "pan.___", state 760, "((i>=1))"
-       line 308, "pan.___", state 767, "(1)"
-       line 308, "pan.___", state 768, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 768, "else"
-       line 308, "pan.___", state 771, "(1)"
-       line 308, "pan.___", state 772, "(1)"
-       line 308, "pan.___", state 772, "(1)"
-       line 310, "pan.___", state 775, "(1)"
-       line 310, "pan.___", state 775, "(1)"
-       line 293, "pan.___", state 804, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 822, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 848, "(1)"
-       line 308, "pan.___", state 865, "(1)"
-       line 293, "pan.___", state 892, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 936, "(1)"
-       line 308, "pan.___", state 953, "(1)"
-       line 289, "pan.___", state 970, "(1)"
-       line 293, "pan.___", state 982, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1000, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 1026, "(1)"
-       line 308, "pan.___", state 1043, "(1)"
-       line 293, "pan.___", state 1073, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1091, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 1117, "(1)"
-       line 308, "pan.___", state 1134, "(1)"
-       line 148, "pan.___", state 1156, "(1)"
-       line 152, "pan.___", state 1168, "(1)"
-       line 144, "pan.___", state 1180, "(1)"
-       line 152, "pan.___", state 1200, "(1)"
-       line 148, "pan.___", state 1224, "(1)"
-       line 152, "pan.___", state 1236, "(1)"
-       line 289, "pan.___", state 1260, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 1262, "(1)"
-       line 289, "pan.___", state 1263, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 1263, "else"
-       line 289, "pan.___", state 1266, "(1)"
-       line 293, "pan.___", state 1274, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 1276, "(1)"
-       line 293, "pan.___", state 1277, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 1277, "else"
-       line 293, "pan.___", state 1280, "(1)"
-       line 293, "pan.___", state 1281, "(1)"
-       line 293, "pan.___", state 1281, "(1)"
-       line 291, "pan.___", state 1286, "((i<1))"
-       line 291, "pan.___", state 1286, "((i>=1))"
-       line 298, "pan.___", state 1292, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 1305, "(1)"
-       line 299, "pan.___", state 1306, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 1306, "else"
-       line 299, "pan.___", state 1309, "(1)"
-       line 299, "pan.___", state 1310, "(1)"
-       line 299, "pan.___", state 1310, "(1)"
-       line 303, "pan.___", state 1318, "(1)"
-       line 303, "pan.___", state 1319, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 1319, "else"
-       line 303, "pan.___", state 1322, "(1)"
-       line 303, "pan.___", state 1323, "(1)"
-       line 303, "pan.___", state 1323, "(1)"
-       line 301, "pan.___", state 1328, "((i<1))"
-       line 301, "pan.___", state 1328, "((i>=1))"
-       line 308, "pan.___", state 1335, "(1)"
-       line 308, "pan.___", state 1336, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 1336, "else"
-       line 308, "pan.___", state 1339, "(1)"
-       line 308, "pan.___", state 1340, "(1)"
-       line 308, "pan.___", state 1340, "(1)"
-       line 310, "pan.___", state 1343, "(1)"
-       line 310, "pan.___", state 1343, "(1)"
-       line 148, "pan.___", state 1367, "(1)"
-       line 152, "pan.___", state 1379, "(1)"
-       line 144, "pan.___", state 1391, "(1)"
-       line 152, "pan.___", state 1411, "(1)"
-       line 148, "pan.___", state 1435, "(1)"
-       line 152, "pan.___", state 1447, "(1)"
-       line 511, "pan.___", state 1473, "-end-"
-       (159 of 1473 states)
-unreached in proctype :init:
-       line 518, "pan.___", state 9, "((j<2))"
-       line 518, "pan.___", state 9, "((j>=2))"
-       line 519, "pan.___", state 20, "((j<2))"
-       line 519, "pan.___", state 20, "((j>=2))"
-       line 524, "pan.___", state 33, "((j<2))"
-       line 524, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 572, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 10.4 seconds
-pan: rate 36378.399 states/second
-pan: avg transition delay 1.8293e-06 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index 12cde50..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-#define NO_WMB
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index ec82525..0000000
+++ /dev/null
@@ -1,1892 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2475
-2:3:2427
-3:3:2430
-4:3:2430
-5:3:2433
-6:3:2441
-7:3:2441
-8:3:2444
-9:3:2450
-10:3:2454
-11:3:2454
-12:3:2457
-13:3:2465
-14:3:2469
-15:3:2470
-16:0:2475
-17:3:2472
-18:0:2475
-19:2:956
-20:0:2475
-21:2:962
-22:0:2475
-23:2:963
-24:0:2475
-25:2:964
-26:2:968
-27:2:969
-28:2:977
-29:2:978
-30:2:982
-31:2:983
-32:2:991
-33:2:996
-34:2:1000
-35:2:1001
-36:2:1008
-37:2:1009
-38:2:1020
-39:2:1021
-40:2:1022
-41:2:1033
-42:2:1038
-43:2:1039
-44:0:2475
-45:2:1051
-46:2:1052
-47:0:2475
-48:2:1056
-49:2:1060
-50:2:1061
-51:2:1069
-52:2:1070
-53:2:1074
-54:2:1075
-55:2:1083
-56:2:1088
-57:2:1089
-58:2:1100
-59:2:1101
-60:2:1112
-61:2:1113
-62:2:1114
-63:2:1125
-64:2:1130
-65:2:1131
-66:0:2475
-67:2:1143
-68:0:2475
-69:2:1144
-70:0:2475
-71:2:1154
-72:0:2475
-73:2:1155
-74:0:2475
-75:2:1156
-76:2:1163
-77:2:1164
-78:2:1171
-79:2:1176
-80:0:2475
-81:2:1187
-82:0:2475
-83:2:1188
-84:2:1195
-85:2:1196
-86:2:1203
-87:2:1208
-88:0:2475
-89:2:1219
-90:0:2475
-91:2:1224
-92:2:1231
-93:2:1232
-94:2:1239
-95:2:1244
-96:0:2475
-97:2:1259
-98:0:2475
-99:2:1260
-100:2:1264
-101:2:1265
-102:2:1273
-103:2:1274
-104:2:1278
-105:2:1279
-106:2:1287
-107:2:1292
-108:2:1296
-109:2:1297
-110:2:1304
-111:2:1305
-112:2:1316
-113:2:1317
-114:2:1318
-115:2:1329
-116:2:1334
-117:2:1335
-118:0:2475
-119:2:1347
-120:0:2475
-121:2:1350
-122:2:1351
-123:2:1363
-124:2:1364
-125:2:1368
-126:2:1369
-127:2:1377
-128:2:1382
-129:2:1386
-130:2:1387
-131:2:1394
-132:2:1395
-133:2:1406
-134:2:1407
-135:2:1408
-136:2:1419
-137:2:1424
-138:2:1425
-139:0:2475
-140:2:1437
-141:0:2475
-142:2:1438
-143:0:2475
-144:2:1439
-145:0:2475
-146:2:1440
-147:0:2475
-148:2:1441
-149:2:1445
-150:2:1446
-151:2:1454
-152:2:1455
-153:2:1459
-154:2:1460
-155:2:1468
-156:2:1473
-157:2:1477
-158:2:1478
-159:2:1485
-160:2:1486
-161:2:1497
-162:2:1498
-163:2:1499
-164:2:1510
-165:2:1515
-166:2:1516
-167:0:2475
-168:2:1633
-169:0:2475
-170:2:1729
-171:0:2475
-172:2:1730
-173:0:2475
-174:2:1734
-175:0:2475
-176:2:1740
-177:2:1744
-178:2:1745
-179:2:1753
-180:2:1754
-181:2:1758
-182:2:1759
-183:2:1767
-184:2:1772
-185:2:1776
-186:2:1777
-187:2:1784
-188:2:1785
-189:2:1796
-190:2:1797
-191:2:1798
-192:2:1809
-193:2:1814
-194:2:1815
-195:0:2475
-196:2:1827
-197:0:2475
-198:2:1828
-199:2:1832
-200:2:1833
-201:2:1841
-202:2:1842
-203:2:1846
-204:2:1847
-205:2:1855
-206:2:1860
-207:2:1864
-208:2:1865
-209:2:1872
-210:2:1873
-211:2:1884
-212:2:1885
-213:2:1886
-214:2:1897
-215:2:1902
-216:2:1903
-217:0:2475
-218:2:1915
-219:0:2475
-220:2:1918
-221:2:1919
-222:2:1931
-223:2:1932
-224:2:1936
-225:2:1937
-226:2:1945
-227:2:1950
-228:2:1954
-229:2:1955
-230:2:1962
-231:2:1963
-232:2:1974
-233:2:1975
-234:2:1976
-235:2:1987
-236:2:1992
-237:2:1993
-238:0:2475
-239:2:2005
-240:0:2475
-241:2:2006
-242:0:2475
-243:2:2007
-244:0:2475
-245:2:2008
-246:0:2475
-247:2:2009
-248:2:2013
-249:2:2014
-250:2:2022
-251:2:2023
-252:2:2027
-253:2:2028
-254:2:2036
-255:2:2041
-256:2:2045
-257:2:2046
-258:2:2053
-259:2:2054
-260:2:2065
-261:2:2066
-262:2:2067
-263:2:2078
-264:2:2083
-265:2:2084
-266:0:2475
-267:2:2201
-268:0:2475
-269:2:2297
-270:0:2475
-271:2:2298
-272:0:2475
-273:2:2302
-274:0:2475
-275:2:2308
-276:0:2475
-277:2:2309
-278:2:2316
-279:2:2317
-280:2:2324
-281:2:2329
-282:0:2475
-283:2:2340
-284:0:2475
-285:2:2341
-286:2:2348
-287:2:2349
-288:2:2356
-289:2:2361
-290:0:2475
-291:2:2372
-292:0:2475
-293:2:2377
-294:2:2384
-295:2:2385
-296:2:2392
-297:2:2397
-298:0:2475
-299:2:2412
-300:0:2475
-301:2:2413
-302:0:2475
-303:2:963
-304:0:2475
-305:2:964
-306:2:968
-307:2:969
-308:2:977
-309:2:978
-310:2:982
-311:2:983
-312:2:991
-313:2:996
-314:2:1000
-315:2:1001
-316:2:1008
-317:2:1009
-318:2:1020
-319:2:1021
-320:2:1022
-321:2:1033
-322:2:1038
-323:2:1039
-324:0:2475
-325:2:1051
-326:2:1052
-327:0:2475
-328:2:1056
-329:2:1060
-330:2:1061
-331:2:1069
-332:2:1070
-333:2:1074
-334:2:1075
-335:2:1083
-336:2:1088
-337:2:1089
-338:2:1100
-339:2:1101
-340:2:1112
-341:2:1113
-342:2:1114
-343:2:1125
-344:2:1130
-345:2:1131
-346:0:2475
-347:2:1143
-348:0:2475
-349:2:1144
-350:0:2475
-351:2:1154
-352:0:2475
-353:2:1155
-354:0:2475
-355:2:1156
-356:2:1163
-357:2:1164
-358:2:1171
-359:2:1176
-360:0:2475
-361:2:1187
-362:0:2475
-363:2:1188
-364:2:1195
-365:2:1196
-366:2:1203
-367:2:1208
-368:0:2475
-369:2:1219
-370:0:2475
-371:2:1224
-372:2:1231
-373:2:1232
-374:2:1239
-375:2:1244
-376:0:2475
-377:2:1259
-378:0:2475
-379:2:1260
-380:2:1264
-381:2:1265
-382:2:1273
-383:2:1274
-384:2:1278
-385:2:1279
-386:2:1287
-387:2:1292
-388:2:1296
-389:2:1297
-390:2:1304
-391:2:1305
-392:2:1316
-393:2:1317
-394:2:1318
-395:2:1329
-396:2:1334
-397:2:1335
-398:0:2475
-399:2:1347
-400:0:2475
-401:2:1350
-402:2:1351
-403:2:1363
-404:2:1364
-405:2:1368
-406:2:1369
-407:2:1377
-408:2:1382
-409:2:1386
-410:2:1387
-411:2:1394
-412:2:1395
-413:2:1406
-414:2:1407
-415:2:1408
-416:2:1419
-417:2:1424
-418:2:1425
-419:0:2475
-420:2:1437
-421:0:2475
-422:2:1438
-423:0:2475
-424:2:1439
-425:0:2475
-426:2:1440
-427:0:2475
-428:2:1441
-429:2:1445
-430:2:1446
-431:2:1454
-432:2:1455
-433:2:1459
-434:2:1460
-435:2:1468
-436:2:1473
-437:2:1477
-438:2:1478
-439:2:1485
-440:2:1486
-441:2:1497
-442:2:1498
-443:2:1499
-444:2:1510
-445:2:1515
-446:2:1516
-447:0:2475
-448:2:1633
-449:0:2475
-450:2:1729
-451:0:2475
-452:2:1730
-453:0:2475
-454:2:1734
-455:0:2475
-456:2:1740
-457:2:1744
-458:2:1745
-459:2:1753
-460:2:1754
-461:2:1758
-462:2:1759
-463:2:1767
-464:2:1772
-465:2:1776
-466:2:1777
-467:2:1784
-468:2:1785
-469:2:1796
-470:2:1797
-471:2:1798
-472:2:1809
-473:2:1814
-474:2:1815
-475:0:2475
-476:2:1827
-477:0:2475
-478:2:1828
-479:2:1832
-480:2:1833
-481:2:1841
-482:2:1842
-483:2:1846
-484:2:1847
-485:2:1855
-486:2:1860
-487:2:1864
-488:2:1865
-489:2:1872
-490:2:1873
-491:2:1884
-492:2:1885
-493:2:1886
-494:2:1897
-495:2:1902
-496:2:1903
-497:0:2475
-498:2:1915
-499:0:2475
-500:2:1918
-501:2:1919
-502:2:1931
-503:2:1932
-504:2:1936
-505:2:1937
-506:2:1945
-507:2:1950
-508:2:1954
-509:2:1955
-510:2:1962
-511:2:1963
-512:2:1974
-513:2:1975
-514:2:1976
-515:2:1987
-516:2:1992
-517:2:1993
-518:0:2475
-519:2:2005
-520:0:2475
-521:2:2006
-522:0:2475
-523:2:2007
-524:0:2475
-525:2:2008
-526:0:2475
-527:2:2009
-528:2:2013
-529:2:2014
-530:2:2022
-531:2:2023
-532:2:2027
-533:2:2028
-534:2:2036
-535:2:2041
-536:2:2045
-537:2:2046
-538:2:2053
-539:2:2054
-540:2:2065
-541:2:2066
-542:2:2067
-543:2:2078
-544:2:2083
-545:2:2084
-546:0:2475
-547:2:2201
-548:0:2475
-549:2:2297
-550:0:2475
-551:2:2298
-552:0:2475
-553:2:2302
-554:0:2475
-555:2:2308
-556:0:2475
-557:2:2309
-558:2:2316
-559:2:2317
-560:2:2324
-561:2:2329
-562:0:2475
-563:2:2340
-564:0:2475
-565:2:2341
-566:2:2348
-567:2:2349
-568:2:2356
-569:2:2361
-570:0:2475
-571:2:2372
-572:0:2475
-573:2:2377
-574:2:2384
-575:2:2385
-576:2:2392
-577:2:2397
-578:0:2475
-579:2:2412
-580:0:2475
-581:2:2413
-582:0:2475
-583:2:963
-584:0:2475
-585:2:964
-586:2:968
-587:2:969
-588:2:977
-589:2:978
-590:2:982
-591:2:983
-592:2:991
-593:2:996
-594:2:1000
-595:2:1001
-596:2:1008
-597:2:1009
-598:2:1020
-599:2:1021
-600:2:1022
-601:2:1033
-602:2:1038
-603:2:1039
-604:0:2475
-605:2:1051
-606:2:1052
-607:0:2475
-608:2:1056
-609:2:1060
-610:2:1061
-611:2:1069
-612:2:1070
-613:2:1074
-614:2:1075
-615:2:1083
-616:2:1088
-617:2:1089
-618:2:1100
-619:2:1101
-620:2:1112
-621:2:1113
-622:2:1114
-623:2:1125
-624:2:1130
-625:2:1131
-626:0:2475
-627:2:1143
-628:0:2475
-629:2:1144
-630:0:2475
-631:2:1154
-632:0:2475
-633:2:1155
-634:0:2475
-635:2:1156
-636:2:1163
-637:2:1164
-638:2:1171
-639:2:1176
-640:0:2475
-641:2:1187
-642:0:2475
-643:2:1188
-644:2:1195
-645:2:1196
-646:2:1203
-647:2:1208
-648:0:2475
-649:2:1219
-650:0:2475
-651:2:1224
-652:2:1231
-653:2:1232
-654:2:1239
-655:2:1244
-656:0:2475
-657:2:1259
-658:0:2475
-659:2:1260
-660:2:1264
-661:2:1265
-662:2:1273
-663:2:1274
-664:2:1278
-665:2:1279
-666:2:1287
-667:2:1292
-668:2:1296
-669:2:1297
-670:2:1304
-671:2:1305
-672:2:1316
-673:2:1317
-674:2:1318
-675:2:1329
-676:2:1334
-677:2:1335
-678:0:2475
-679:2:1347
-680:0:2475
-681:2:1350
-682:2:1351
-683:2:1363
-684:2:1364
-685:2:1368
-686:2:1369
-687:2:1377
-688:2:1382
-689:2:1386
-690:2:1387
-691:2:1394
-692:2:1395
-693:2:1406
-694:2:1407
-695:2:1408
-696:2:1419
-697:2:1424
-698:2:1425
-699:0:2475
-700:2:1437
-701:0:2475
-702:2:1438
-703:0:2475
-704:2:1439
-705:0:2475
-706:2:1440
-707:0:2475
-708:2:1441
-709:2:1445
-710:2:1446
-711:2:1454
-712:2:1455
-713:2:1459
-714:2:1460
-715:2:1468
-716:2:1473
-717:2:1477
-718:2:1478
-719:2:1485
-720:2:1486
-721:2:1497
-722:2:1498
-723:2:1499
-724:2:1510
-725:2:1515
-726:2:1516
-727:0:2475
-728:2:1633
-729:0:2475
-730:2:1729
-731:0:2475
-732:2:1730
-733:0:2475
-734:2:1734
-735:0:2475
-736:2:1740
-737:2:1744
-738:2:1745
-739:2:1753
-740:2:1754
-741:2:1758
-742:2:1759
-743:2:1767
-744:2:1772
-745:2:1776
-746:2:1777
-747:2:1784
-748:2:1785
-749:2:1796
-750:2:1797
-751:2:1798
-752:2:1809
-753:2:1814
-754:2:1815
-755:0:2475
-756:2:1827
-757:0:2475
-758:2:1828
-759:2:1832
-760:2:1833
-761:2:1841
-762:2:1842
-763:2:1846
-764:2:1847
-765:2:1855
-766:2:1860
-767:2:1864
-768:2:1865
-769:2:1872
-770:2:1873
-771:2:1884
-772:2:1885
-773:2:1886
-774:2:1897
-775:2:1902
-776:2:1903
-777:0:2475
-778:2:1915
-779:0:2475
-780:2:1918
-781:2:1919
-782:2:1931
-783:2:1932
-784:2:1936
-785:2:1937
-786:2:1945
-787:2:1950
-788:2:1954
-789:2:1955
-790:2:1962
-791:2:1963
-792:2:1974
-793:2:1975
-794:2:1976
-795:2:1987
-796:2:1992
-797:2:1993
-798:0:2475
-799:2:2005
-800:0:2475
-801:2:2006
-802:0:2475
-803:2:2007
-804:0:2475
-805:2:2008
-806:0:2475
-807:2:2009
-808:2:2013
-809:2:2014
-810:2:2022
-811:2:2023
-812:2:2027
-813:2:2028
-814:2:2036
-815:2:2041
-816:2:2045
-817:2:2046
-818:2:2053
-819:2:2054
-820:2:2065
-821:2:2066
-822:2:2067
-823:2:2078
-824:2:2083
-825:2:2084
-826:0:2475
-827:2:2201
-828:0:2475
-829:2:2297
-830:0:2475
-831:2:2298
-832:0:2475
-833:2:2302
-834:0:2475
-835:2:2308
-836:0:2475
-837:2:2309
-838:2:2316
-839:2:2317
-840:2:2324
-841:2:2329
-842:0:2475
-843:2:2340
-844:0:2475
-845:2:2341
-846:2:2348
-847:2:2349
-848:2:2356
-849:2:2361
-850:0:2475
-851:2:2372
-852:0:2475
-853:2:2377
-854:2:2384
-855:2:2385
-856:2:2392
-857:2:2397
-858:0:2475
-859:2:2412
-860:0:2475
-861:2:2413
-862:0:2475
-863:2:963
-864:0:2475
-865:2:964
-866:2:968
-867:2:969
-868:2:977
-869:2:978
-870:2:982
-871:2:983
-872:2:991
-873:2:996
-874:2:1000
-875:2:1001
-876:2:1008
-877:2:1009
-878:2:1020
-879:2:1021
-880:2:1022
-881:2:1033
-882:2:1038
-883:2:1039
-884:0:2475
-885:2:1051
-886:2:1052
-887:0:2475
-888:2:1056
-889:2:1060
-890:2:1061
-891:2:1069
-892:2:1070
-893:2:1074
-894:2:1075
-895:2:1083
-896:2:1088
-897:2:1089
-898:2:1100
-899:2:1101
-900:2:1112
-901:2:1113
-902:2:1114
-903:2:1125
-904:2:1130
-905:2:1131
-906:0:2475
-907:2:1143
-908:0:2475
-909:2:1144
-910:0:2475
-911:2:1154
-912:0:2475
-913:2:1155
-914:0:2475
-915:2:1156
-916:2:1163
-917:2:1164
-918:2:1171
-919:2:1176
-920:0:2475
-921:2:1187
-922:0:2475
-923:2:1188
-924:2:1195
-925:2:1196
-926:2:1203
-927:2:1208
-928:0:2475
-929:2:1219
-930:0:2475
-931:2:1224
-932:2:1231
-933:2:1232
-934:2:1239
-935:2:1244
-936:0:2475
-937:2:1259
-938:0:2475
-939:2:1260
-940:2:1264
-941:2:1265
-942:2:1273
-943:2:1274
-944:2:1278
-945:2:1279
-946:2:1287
-947:2:1292
-948:2:1296
-949:2:1297
-950:2:1304
-951:2:1305
-952:2:1316
-953:2:1317
-954:2:1318
-955:2:1329
-956:2:1334
-957:2:1335
-958:0:2475
-959:2:1347
-960:0:2475
-961:2:1350
-962:2:1351
-963:2:1363
-964:2:1364
-965:2:1368
-966:2:1369
-967:2:1377
-968:2:1382
-969:2:1386
-970:2:1387
-971:2:1394
-972:2:1395
-973:2:1406
-974:2:1407
-975:2:1408
-976:2:1419
-977:2:1424
-978:2:1425
-979:0:2475
-980:2:1437
-981:0:2475
-982:2:1438
-983:0:2475
-984:2:1439
-985:0:2475
-986:2:1440
-987:0:2475
-988:2:1441
-989:2:1445
-990:2:1446
-991:2:1454
-992:2:1455
-993:2:1459
-994:2:1460
-995:2:1468
-996:2:1473
-997:2:1477
-998:2:1478
-999:2:1485
-1000:2:1486
-1001:2:1497
-1002:2:1498
-1003:2:1499
-1004:2:1510
-1005:2:1515
-1006:2:1516
-1007:0:2475
-1008:2:1633
-1009:0:2475
-1010:2:1729
-1011:0:2475
-1012:2:1730
-1013:0:2475
-1014:2:1734
-1015:0:2475
-1016:2:1740
-1017:2:1744
-1018:2:1745
-1019:2:1753
-1020:2:1754
-1021:2:1758
-1022:2:1759
-1023:2:1767
-1024:2:1772
-1025:2:1776
-1026:2:1777
-1027:2:1784
-1028:2:1785
-1029:2:1796
-1030:2:1797
-1031:2:1798
-1032:2:1809
-1033:2:1814
-1034:2:1815
-1035:0:2475
-1036:2:1827
-1037:0:2475
-1038:2:1828
-1039:2:1832
-1040:2:1833
-1041:2:1841
-1042:2:1842
-1043:2:1846
-1044:2:1847
-1045:2:1855
-1046:2:1860
-1047:2:1864
-1048:2:1865
-1049:2:1872
-1050:2:1873
-1051:2:1884
-1052:2:1885
-1053:2:1886
-1054:2:1897
-1055:2:1902
-1056:2:1903
-1057:0:2475
-1058:2:1915
-1059:0:2475
-1060:2:1918
-1061:2:1919
-1062:2:1931
-1063:2:1932
-1064:2:1936
-1065:2:1937
-1066:2:1945
-1067:2:1950
-1068:2:1954
-1069:2:1955
-1070:2:1962
-1071:2:1963
-1072:2:1974
-1073:2:1975
-1074:2:1976
-1075:2:1987
-1076:2:1992
-1077:2:1993
-1078:0:2475
-1079:2:2005
-1080:0:2475
-1081:2:2006
-1082:0:2475
-1083:2:2007
-1084:0:2475
-1085:2:2008
-1086:0:2475
-1087:2:2009
-1088:2:2013
-1089:2:2014
-1090:2:2022
-1091:2:2023
-1092:2:2027
-1093:2:2028
-1094:2:2036
-1095:2:2041
-1096:2:2045
-1097:2:2046
-1098:2:2053
-1099:2:2054
-1100:2:2065
-1101:2:2066
-1102:2:2067
-1103:2:2078
-1104:2:2083
-1105:2:2084
-1106:0:2475
-1107:2:2201
-1108:0:2475
-1109:2:2297
-1110:0:2475
-1111:2:2298
-1112:0:2475
-1113:2:2302
-1114:0:2475
-1115:2:2308
-1116:0:2475
-1117:2:2309
-1118:2:2316
-1119:2:2317
-1120:2:2324
-1121:2:2329
-1122:0:2475
-1123:2:2340
-1124:0:2475
-1125:2:2341
-1126:2:2348
-1127:2:2349
-1128:2:2356
-1129:2:2361
-1130:0:2475
-1131:2:2372
-1132:0:2475
-1133:2:2377
-1134:2:2384
-1135:2:2385
-1136:2:2392
-1137:2:2397
-1138:0:2475
-1139:2:2412
-1140:0:2475
-1141:2:2413
-1142:0:2475
-1143:2:963
-1144:0:2475
-1145:2:964
-1146:2:968
-1147:2:969
-1148:2:977
-1149:2:978
-1150:2:982
-1151:2:983
-1152:2:991
-1153:2:996
-1154:2:1000
-1155:2:1001
-1156:2:1008
-1157:2:1009
-1158:2:1020
-1159:2:1021
-1160:2:1022
-1161:2:1033
-1162:2:1038
-1163:2:1039
-1164:0:2475
-1165:2:1051
-1166:2:1052
-1167:0:2475
-1168:2:1056
-1169:2:1060
-1170:2:1061
-1171:2:1069
-1172:2:1070
-1173:2:1074
-1174:2:1075
-1175:2:1083
-1176:2:1088
-1177:2:1089
-1178:2:1100
-1179:2:1101
-1180:2:1112
-1181:2:1113
-1182:2:1114
-1183:2:1125
-1184:2:1130
-1185:2:1131
-1186:0:2475
-1187:2:1143
-1188:0:2475
-1189:2:1144
-1190:0:2475
-1191:2:1154
-1192:0:2475
-1193:2:1155
-1194:0:2475
-1195:2:1156
-1196:2:1163
-1197:2:1164
-1198:2:1171
-1199:2:1176
-1200:0:2475
-1201:2:1187
-1202:0:2475
-1203:1:2
-1204:0:2475
-1205:1:8
-1206:0:2475
-1207:1:9
-1208:0:2475
-1209:1:10
-1210:0:2475
-1211:1:11
-1212:0:2475
-1213:1:12
-1214:1:16
-1215:1:17
-1216:1:25
-1217:1:26
-1218:1:30
-1219:1:31
-1220:1:39
-1221:1:44
-1222:1:48
-1223:1:49
-1224:1:56
-1225:1:57
-1226:1:68
-1227:1:69
-1228:1:70
-1229:1:81
-1230:1:93
-1231:1:94
-1232:0:2475
-1233:1:99
-1234:0:2475
-1235:1:100
-1236:1:104
-1237:1:105
-1238:1:113
-1239:1:114
-1240:1:118
-1241:1:119
-1242:1:127
-1243:1:132
-1244:1:136
-1245:1:137
-1246:1:144
-1247:1:145
-1248:1:156
-1249:1:157
-1250:1:158
-1251:1:169
-1252:1:181
-1253:1:182
-1254:0:2475
-1255:1:187
-1256:0:2475
-1257:1:188
-1258:0:2475
-1259:1:189
-1260:1:193
-1261:1:194
-1262:1:202
-1263:1:203
-1264:1:207
-1265:1:208
-1266:1:216
-1267:1:221
-1268:1:225
-1269:1:226
-1270:1:233
-1271:1:234
-1272:1:245
-1273:1:246
-1274:1:247
-1275:1:258
-1276:1:270
-1277:1:271
-1278:0:2475
-1279:1:276
-1280:0:2475
-1281:1:384
-1282:0:2475
-1283:1:385
-1284:0:2475
-1285:1:11
-1286:0:2475
-1287:1:12
-1288:1:16
-1289:1:17
-1290:1:25
-1291:1:26
-1292:1:27
-1293:1:39
-1294:1:44
-1295:1:48
-1296:1:49
-1297:1:56
-1298:1:57
-1299:1:68
-1300:1:69
-1301:1:70
-1302:1:81
-1303:1:93
-1304:1:94
-1305:0:2475
-1306:1:99
-1307:0:2475
-1308:1:100
-1309:1:104
-1310:1:105
-1311:1:113
-1312:1:114
-1313:1:118
-1314:1:119
-1315:1:127
-1316:1:132
-1317:1:136
-1318:1:137
-1319:1:144
-1320:1:145
-1321:1:156
-1322:1:157
-1323:1:158
-1324:1:169
-1325:1:181
-1326:1:182
-1327:0:2475
-1328:1:279
-1329:0:2475
-1330:1:280
-1331:0:2475
-1332:1:384
-1333:0:2475
-1334:1:385
-1335:0:2475
-1336:1:390
-1337:0:2475
-1338:1:395
-1339:1:399
-1340:1:400
-1341:1:408
-1342:1:409
-1343:1:410
-1344:1:422
-1345:1:427
-1346:1:431
-1347:1:432
-1348:1:439
-1349:1:440
-1350:1:451
-1351:1:452
-1352:1:453
-1353:1:464
-1354:1:476
-1355:1:477
-1356:0:2475
-1357:1:482
-1358:0:2475
-1359:1:483
-1360:1:487
-1361:1:488
-1362:1:496
-1363:1:497
-1364:1:501
-1365:1:502
-1366:1:510
-1367:1:515
-1368:1:519
-1369:1:520
-1370:1:527
-1371:1:528
-1372:1:539
-1373:1:540
-1374:1:541
-1375:1:552
-1376:1:564
-1377:1:565
-1378:0:2475
-1379:1:570
-1380:0:2475
-1381:1:571
-1382:1:575
-1383:1:576
-1384:1:584
-1385:1:585
-1386:1:589
-1387:1:590
-1388:1:598
-1389:1:603
-1390:1:607
-1391:1:608
-1392:1:615
-1393:1:616
-1394:1:627
-1395:1:628
-1396:1:629
-1397:1:640
-1398:1:652
-1399:1:653
-1400:0:2475
-1401:1:658
-1402:0:2475
-1403:1:659
-1404:0:2475
-1405:1:660
-1406:0:2475
-1407:1:760
-1408:0:2475
-1409:1:761
-1410:0:2475
-1411:1:765
-1412:0:2475
-1413:1:766
-1414:1:770
-1415:1:771
-1416:1:779
-1417:1:780
-1418:1:784
-1419:1:785
-1420:1:793
-1421:1:798
-1422:1:802
-1423:1:803
-1424:1:810
-1425:1:811
-1426:1:822
-1427:1:823
-1428:1:824
-1429:1:835
-1430:1:847
-1431:1:848
-1432:0:2475
-1433:1:853
-1434:0:2475
-1435:1:660
-1436:0:2475
-1437:1:760
-1438:0:2475
-1439:1:761
-1440:0:2475
-1441:1:765
-1442:0:2475
-1443:1:766
-1444:1:770
-1445:1:771
-1446:1:779
-1447:1:780
-1448:1:781
-1449:1:793
-1450:1:798
-1451:1:802
-1452:1:803
-1453:1:810
-1454:1:811
-1455:1:822
-1456:1:823
-1457:1:824
-1458:1:835
-1459:1:847
-1460:1:848
-1461:0:2475
-1462:1:853
-1463:0:2475
-1464:1:857
-1465:0:2475
-1466:1:862
-1467:1:866
-1468:1:867
-1469:1:875
-1470:1:876
-1471:1:877
-1472:1:889
-1473:1:894
-1474:1:898
-1475:1:899
-1476:1:906
-1477:1:907
-1478:1:918
-1479:1:919
-1480:1:920
-1481:1:931
-1482:1:943
-1483:1:944
-1484:0:2475
-1485:1:9
-1486:0:2475
-1487:1:10
-1488:0:2475
-1489:1:11
-1490:0:2475
-1491:1:12
-1492:1:16
-1493:1:17
-1494:1:25
-1495:1:26
-1496:1:30
-1497:1:31
-1498:1:39
-1499:1:44
-1500:1:48
-1501:1:49
-1502:1:56
-1503:1:57
-1504:1:68
-1505:1:69
-1506:1:70
-1507:1:81
-1508:1:93
-1509:1:94
-1510:0:2475
-1511:1:99
-1512:0:2475
-1513:1:100
-1514:1:104
-1515:1:105
-1516:1:113
-1517:1:114
-1518:1:118
-1519:1:119
-1520:1:127
-1521:1:132
-1522:1:136
-1523:1:137
-1524:1:144
-1525:1:145
-1526:1:156
-1527:1:157
-1528:1:158
-1529:1:169
-1530:1:181
-1531:1:182
-1532:0:2475
-1533:1:187
-1534:0:2475
-1535:1:188
-1536:0:2475
-1537:1:189
-1538:1:193
-1539:1:194
-1540:1:202
-1541:1:203
-1542:1:207
-1543:1:208
-1544:1:216
-1545:1:221
-1546:1:225
-1547:1:226
-1548:1:233
-1549:1:234
-1550:1:245
-1551:1:246
-1552:1:247
-1553:1:258
-1554:1:270
-1555:1:271
-1556:0:2475
-1557:1:276
-1558:0:2475
-1559:1:384
-1560:0:2475
-1561:1:385
-1562:0:2475
-1563:1:11
-1564:0:2475
-1565:1:12
-1566:1:16
-1567:1:17
-1568:1:25
-1569:1:34
-1570:1:35
-1571:1:39
-1572:1:44
-1573:1:48
-1574:1:49
-1575:1:56
-1576:1:57
-1577:1:68
-1578:1:69
-1579:1:72
-1580:1:73
-1581:1:81
-1582:1:93
-1583:1:94
-1584:0:2475
-1585:1:99
-1586:0:2475
-1587:1:100
-1588:1:104
-1589:1:105
-1590:1:113
-1591:1:122
-1592:1:123
-1593:1:127
-1594:1:132
-1595:1:136
-1596:1:137
-1597:1:144
-1598:1:145
-1599:1:156
-1600:1:157
-1601:1:160
-1602:1:161
-1603:1:169
-1604:1:181
-1605:1:182
-1606:0:2475
-1607:1:279
-1608:0:2475
-1609:1:280
-1610:0:2475
-1611:1:384
-1612:0:2475
-1613:1:385
-1614:0:2475
-1615:1:390
-1616:0:2475
-1617:1:395
-1618:1:399
-1619:1:400
-1620:1:408
-1621:1:417
-1622:1:418
-1623:1:422
-1624:1:427
-1625:1:431
-1626:1:432
-1627:1:439
-1628:1:440
-1629:1:451
-1630:1:452
-1631:1:455
-1632:1:456
-1633:1:464
-1634:1:476
-1635:1:477
-1636:0:2475
-1637:1:482
-1638:0:2475
-1639:2:1188
-1640:2:1195
-1641:2:1198
-1642:2:1199
-1643:2:1203
-1644:2:1208
-1645:0:2475
-1646:2:1219
-1647:0:2475
-1648:2:1224
-1649:2:1231
-1650:2:1232
-1651:2:1239
-1652:2:1244
-1653:0:2475
-1654:2:1259
-1655:0:2475
-1656:2:1260
-1657:2:1264
-1658:2:1265
-1659:2:1273
-1660:2:1274
-1661:2:1278
-1662:2:1279
-1663:2:1287
-1664:2:1292
-1665:2:1296
-1666:2:1297
-1667:2:1304
-1668:2:1305
-1669:2:1316
-1670:2:1317
-1671:2:1318
-1672:2:1329
-1673:2:1334
-1674:2:1335
-1675:0:2475
-1676:2:1347
-1677:0:2475
-1678:2:1350
-1679:2:1351
-1680:2:1363
-1681:2:1364
-1682:2:1368
-1683:2:1369
-1684:2:1377
-1685:2:1382
-1686:2:1386
-1687:2:1387
-1688:2:1394
-1689:2:1395
-1690:2:1406
-1691:2:1407
-1692:2:1408
-1693:2:1419
-1694:2:1424
-1695:2:1425
-1696:0:2475
-1697:2:1437
-1698:0:2475
-1699:2:1438
-1700:0:2475
-1701:2:1439
-1702:0:2475
-1703:2:1440
-1704:0:2475
-1705:2:1441
-1706:2:1445
-1707:2:1446
-1708:2:1454
-1709:2:1455
-1710:2:1459
-1711:2:1460
-1712:2:1468
-1713:2:1473
-1714:2:1477
-1715:2:1478
-1716:2:1485
-1717:2:1486
-1718:2:1497
-1719:2:1498
-1720:2:1499
-1721:2:1510
-1722:2:1515
-1723:2:1516
-1724:0:2475
-1725:2:1633
-1726:0:2475
-1727:2:1729
-1728:0:2475
-1729:2:1730
-1730:0:2475
-1731:2:1734
-1732:0:2475
-1733:2:1740
-1734:2:1744
-1735:2:1745
-1736:2:1753
-1737:2:1754
-1738:2:1758
-1739:2:1759
-1740:2:1767
-1741:2:1772
-1742:2:1776
-1743:2:1777
-1744:2:1784
-1745:2:1785
-1746:2:1796
-1747:2:1797
-1748:2:1798
-1749:2:1809
-1750:2:1814
-1751:2:1815
-1752:0:2475
-1753:2:1827
-1754:0:2475
-1755:2:1828
-1756:2:1832
-1757:2:1833
-1758:2:1841
-1759:2:1842
-1760:2:1846
-1761:2:1847
-1762:2:1855
-1763:2:1860
-1764:2:1864
-1765:2:1865
-1766:2:1872
-1767:2:1873
-1768:2:1884
-1769:2:1885
-1770:2:1886
-1771:2:1897
-1772:2:1902
-1773:2:1903
-1774:0:2475
-1775:2:1915
-1776:0:2475
-1777:2:1918
-1778:2:1919
-1779:2:1931
-1780:2:1932
-1781:2:1936
-1782:2:1937
-1783:2:1945
-1784:2:1950
-1785:2:1954
-1786:2:1955
-1787:2:1962
-1788:2:1963
-1789:2:1974
-1790:2:1975
-1791:2:1976
-1792:2:1987
-1793:2:1992
-1794:2:1993
-1795:0:2475
-1796:2:2005
-1797:0:2475
-1798:2:2006
-1799:0:2475
-1800:2:2007
-1801:0:2475
-1802:2:2008
-1803:0:2475
-1804:2:2009
-1805:2:2013
-1806:2:2014
-1807:2:2022
-1808:2:2023
-1809:2:2027
-1810:2:2028
-1811:2:2036
-1812:2:2041
-1813:2:2045
-1814:2:2046
-1815:2:2053
-1816:2:2054
-1817:2:2065
-1818:2:2066
-1819:2:2067
-1820:2:2078
-1821:2:2083
-1822:2:2084
-1823:0:2475
-1824:2:2201
-1825:0:2475
-1826:2:2297
-1827:0:2475
-1828:2:2298
-1829:0:2475
-1830:2:2302
-1831:0:2475
-1832:2:2308
-1833:0:2475
-1834:2:2309
-1835:2:2316
-1836:2:2317
-1837:2:2324
-1838:2:2329
-1839:0:2475
-1840:2:2340
-1841:0:2475
-1842:2:2341
-1843:2:2348
-1844:2:2351
-1845:2:2352
-1846:2:2356
-1847:2:2361
-1848:0:2475
-1849:2:2372
-1850:0:2475
-1851:2:2377
-1852:2:2384
-1853:2:2385
-1854:2:2392
-1855:2:2397
-1856:0:2475
-1857:2:2412
-1858:0:2475
-1859:2:2413
-1860:0:2475
-1861:2:2416
-1862:0:2475
-1863:2:2421
-1864:0:2475
-1865:1:483
-1866:1:487
-1867:1:488
-1868:1:496
-1869:1:497
-1870:1:498
-1871:1:510
-1872:1:515
-1873:1:519
-1874:1:520
-1875:1:527
-1876:1:528
-1877:1:539
-1878:1:540
-1879:1:541
-1880:1:552
-1881:1:557
-1882:1:558
-1883:0:2475
-1884:2:2422
-1885:0:2475
-1886:1:570
-1887:0:2473
-1888:2:2421
-1889:0:2479
-1890:1:151
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.define b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 6a9d040..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 567)
-pan: claim violated! (at depth 1353)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3705, errors: 1
-   216253 states, stored
-  2924019 states, matched
-  3140272 transitions (= stored+matched)
- 11791015 atomic steps
-hash conflicts:    155585 (resolved)
-
-Stats on memory usage (in Megabytes):
-   17.324      equivalent memory usage for states (stored*(State-vector + overhead))
-   13.576      actual memory usage for states (compression: 78.37%)
-               state-vector as stored = 38 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  479.338      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 289, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 61, "(1)"
-       line 308, "pan.___", state 91, "(1)"
-       line 289, "pan.___", state 104, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 136, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 149, "(1)"
-       line 308, "pan.___", state 179, "(1)"
-       line 289, "pan.___", state 193, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 225, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 238, "(1)"
-       line 308, "pan.___", state 268, "(1)"
-       line 159, "pan.___", state 289, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 291, "(1)"
-       line 163, "pan.___", state 298, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 300, "(1)"
-       line 163, "pan.___", state 301, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 301, "else"
-       line 161, "pan.___", state 306, "((j<1))"
-       line 161, "pan.___", state 306, "((j>=1))"
-       line 167, "pan.___", state 311, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 321, "(1)"
-       line 148, "pan.___", state 329, "(1)"
-       line 148, "pan.___", state 330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 330, "else"
-       line 146, "pan.___", state 335, "((j<1))"
-       line 146, "pan.___", state 335, "((j>=1))"
-       line 152, "pan.___", state 341, "(1)"
-       line 152, "pan.___", state 342, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 342, "else"
-       line 154, "pan.___", state 345, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 154, "pan.___", state 345, "else"
-       line 186, "pan.___", state 347, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 186, "pan.___", state 347, "else"
-       line 159, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 354, "(1)"
-       line 163, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 163, "pan.___", state 363, "(1)"
-       line 163, "pan.___", state 364, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 163, "pan.___", state 364, "else"
-       line 161, "pan.___", state 369, "((j<1))"
-       line 161, "pan.___", state 369, "((j>=1))"
-       line 167, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 384, "(1)"
-       line 148, "pan.___", state 392, "(1)"
-       line 148, "pan.___", state 393, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 148, "pan.___", state 393, "else"
-       line 146, "pan.___", state 398, "((j<1))"
-       line 146, "pan.___", state 398, "((j>=1))"
-       line 152, "pan.___", state 404, "(1)"
-       line 152, "pan.___", state 405, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 152, "pan.___", state 405, "else"
-       line 154, "pan.___", state 408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 154, "pan.___", state 408, "else"
-       line 186, "pan.___", state 410, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 186, "pan.___", state 410, "else"
-       line 200, "pan.___", state 414, "((i<1))"
-       line 200, "pan.___", state 414, "((i>=1))"
-       line 159, "pan.___", state 419, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 421, "(1)"
-       line 163, "pan.___", state 428, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 430, "(1)"
-       line 163, "pan.___", state 431, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 431, "else"
-       line 161, "pan.___", state 436, "((j<1))"
-       line 161, "pan.___", state 436, "((j>=1))"
-       line 167, "pan.___", state 441, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 451, "(1)"
-       line 148, "pan.___", state 459, "(1)"
-       line 148, "pan.___", state 460, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 460, "else"
-       line 146, "pan.___", state 465, "((j<1))"
-       line 146, "pan.___", state 465, "((j>=1))"
-       line 152, "pan.___", state 471, "(1)"
-       line 152, "pan.___", state 472, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 472, "else"
-       line 154, "pan.___", state 475, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 154, "pan.___", state 475, "else"
-       line 186, "pan.___", state 477, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 186, "pan.___", state 477, "else"
-       line 289, "pan.___", state 492, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 537, "(1)"
-       line 308, "pan.___", state 567, "(1)"
-       line 289, "pan.___", state 580, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 612, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 625, "(1)"
-       line 308, "pan.___", state 655, "(1)"
-       line 289, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 713, "(1)"
-       line 308, "pan.___", state 743, "(1)"
-       line 159, "pan.___", state 758, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 760, "(1)"
-       line 163, "pan.___", state 767, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 769, "(1)"
-       line 163, "pan.___", state 770, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 770, "else"
-       line 161, "pan.___", state 775, "((j<1))"
-       line 161, "pan.___", state 775, "((j>=1))"
-       line 167, "pan.___", state 780, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 790, "(1)"
-       line 148, "pan.___", state 798, "(1)"
-       line 148, "pan.___", state 799, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 799, "else"
-       line 146, "pan.___", state 804, "((j<1))"
-       line 146, "pan.___", state 804, "((j>=1))"
-       line 152, "pan.___", state 810, "(1)"
-       line 152, "pan.___", state 811, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 811, "else"
-       line 154, "pan.___", state 814, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 154, "pan.___", state 814, "else"
-       line 186, "pan.___", state 816, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 186, "pan.___", state 816, "else"
-       line 159, "pan.___", state 821, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 823, "(1)"
-       line 163, "pan.___", state 830, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 163, "pan.___", state 832, "(1)"
-       line 163, "pan.___", state 833, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 163, "pan.___", state 833, "else"
-       line 161, "pan.___", state 838, "((j<1))"
-       line 161, "pan.___", state 838, "((j>=1))"
-       line 167, "pan.___", state 843, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 853, "(1)"
-       line 148, "pan.___", state 861, "(1)"
-       line 148, "pan.___", state 862, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 148, "pan.___", state 862, "else"
-       line 146, "pan.___", state 867, "((j<1))"
-       line 146, "pan.___", state 867, "((j>=1))"
-       line 152, "pan.___", state 873, "(1)"
-       line 152, "pan.___", state 874, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 152, "pan.___", state 874, "else"
-       line 154, "pan.___", state 877, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 154, "pan.___", state 877, "else"
-       line 186, "pan.___", state 879, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 186, "pan.___", state 879, "else"
-       line 200, "pan.___", state 883, "((i<1))"
-       line 200, "pan.___", state 883, "((i>=1))"
-       line 159, "pan.___", state 888, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 890, "(1)"
-       line 163, "pan.___", state 897, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 899, "(1)"
-       line 163, "pan.___", state 900, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 163, "pan.___", state 900, "else"
-       line 161, "pan.___", state 905, "((j<1))"
-       line 161, "pan.___", state 905, "((j>=1))"
-       line 167, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 920, "(1)"
-       line 148, "pan.___", state 928, "(1)"
-       line 148, "pan.___", state 929, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 148, "pan.___", state 929, "else"
-       line 146, "pan.___", state 934, "((j<1))"
-       line 146, "pan.___", state 934, "((j>=1))"
-       line 152, "pan.___", state 940, "(1)"
-       line 152, "pan.___", state 941, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 152, "pan.___", state 941, "else"
-       line 154, "pan.___", state 944, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 154, "pan.___", state 944, "else"
-       line 186, "pan.___", state 946, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 186, "pan.___", state 946, "else"
-       line 289, "pan.___", state 956, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 988, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 1001, "(1)"
-       line 308, "pan.___", state 1031, "(1)"
-       line 289, "pan.___", state 1052, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 1084, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 1097, "(1)"
-       line 308, "pan.___", state 1127, "(1)"
-       line 434, "pan.___", state 1140, "-end-"
-       (125 of 1140 states)
-unreached in proctype urcu_writer
-       line 289, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 59, "(1)"
-       line 303, "pan.___", state 72, "(1)"
-       line 308, "pan.___", state 89, "(1)"
-       line 289, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 151, "(1)"
-       line 303, "pan.___", state 164, "(1)"
-       line 468, "pan.___", state 195, "(1)"
-       line 159, "pan.___", state 205, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 214, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 237, "(1)"
-       line 148, "pan.___", state 245, "(1)"
-       line 152, "pan.___", state 257, "(1)"
-       line 159, "pan.___", state 268, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 290, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 300, "(1)"
-       line 148, "pan.___", state 308, "(1)"
-       line 152, "pan.___", state 320, "(1)"
-       line 159, "pan.___", state 335, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 344, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 357, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 367, "(1)"
-       line 148, "pan.___", state 375, "(1)"
-       line 152, "pan.___", state 387, "(1)"
-       line 289, "pan.___", state 403, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 448, "(1)"
-       line 303, "pan.___", state 461, "(1)"
-       line 308, "pan.___", state 478, "(1)"
-       line 289, "pan.___", state 495, "(1)"
-       line 293, "pan.___", state 507, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 525, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 551, "(1)"
-       line 308, "pan.___", state 568, "(1)"
-       line 293, "pan.___", state 598, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 298, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 303, "pan.___", state 642, "(1)"
-       line 308, "pan.___", state 659, "(1)"
-       line 163, "pan.___", state 681, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 694, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 704, "(1)"
-       line 148, "pan.___", state 712, "(1)"
-       line 152, "pan.___", state 724, "(1)"
-       line 159, "pan.___", state 735, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 757, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 767, "(1)"
-       line 148, "pan.___", state 775, "(1)"
-       line 152, "pan.___", state 787, "(1)"
-       line 159, "pan.___", state 802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 811, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 824, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 834, "(1)"
-       line 148, "pan.___", state 842, "(1)"
-       line 152, "pan.___", state 854, "(1)"
-       line 289, "pan.___", state 878, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 289, "pan.___", state 880, "(1)"
-       line 289, "pan.___", state 881, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 289, "pan.___", state 881, "else"
-       line 289, "pan.___", state 884, "(1)"
-       line 293, "pan.___", state 892, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 293, "pan.___", state 894, "(1)"
-       line 293, "pan.___", state 895, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 293, "pan.___", state 895, "else"
-       line 293, "pan.___", state 898, "(1)"
-       line 293, "pan.___", state 899, "(1)"
-       line 293, "pan.___", state 899, "(1)"
-       line 291, "pan.___", state 904, "((i<1))"
-       line 291, "pan.___", state 904, "((i>=1))"
-       line 298, "pan.___", state 910, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 299, "pan.___", state 923, "(1)"
-       line 299, "pan.___", state 924, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 299, "pan.___", state 924, "else"
-       line 299, "pan.___", state 927, "(1)"
-       line 299, "pan.___", state 928, "(1)"
-       line 299, "pan.___", state 928, "(1)"
-       line 303, "pan.___", state 936, "(1)"
-       line 303, "pan.___", state 937, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 303, "pan.___", state 937, "else"
-       line 303, "pan.___", state 940, "(1)"
-       line 303, "pan.___", state 941, "(1)"
-       line 303, "pan.___", state 941, "(1)"
-       line 301, "pan.___", state 946, "((i<1))"
-       line 301, "pan.___", state 946, "((i>=1))"
-       line 308, "pan.___", state 953, "(1)"
-       line 308, "pan.___", state 954, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 308, "pan.___", state 954, "else"
-       line 308, "pan.___", state 957, "(1)"
-       line 308, "pan.___", state 958, "(1)"
-       line 308, "pan.___", state 958, "(1)"
-       line 310, "pan.___", state 961, "(1)"
-       line 310, "pan.___", state 961, "(1)"
-       line 163, "pan.___", state 985, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 998, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 1008, "(1)"
-       line 148, "pan.___", state 1016, "(1)"
-       line 152, "pan.___", state 1028, "(1)"
-       line 159, "pan.___", state 1039, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 167, "pan.___", state 1061, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 144, "pan.___", state 1071, "(1)"
-       line 148, "pan.___", state 1079, "(1)"
-       line 152, "pan.___", state 1091, "(1)"
-       line 159, "pan.___", state 1106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 163, "pan.___", state 1115, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 167, "pan.___", state 1128, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 144, "pan.___", state 1138, "(1)"
-       line 148, "pan.___", state 1146, "(1)"
-       line 152, "pan.___", state 1158, "(1)"
-       line 511, "pan.___", state 1184, "-end-"
-       (100 of 1184 states)
-unreached in proctype :init:
-       line 518, "pan.___", state 9, "((j<2))"
-       line 518, "pan.___", state 9, "((j>=2))"
-       line 519, "pan.___", state 20, "((j<2))"
-       line 519, "pan.___", state 20, "((j>=2))"
-       line 524, "pan.___", state 33, "((j<2))"
-       line 524, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 572, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 5.58 seconds
-pan: rate 38755.018 states/second
-pan: avg transition delay 1.7769e-06 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 244a7b2..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-#define SINGLE_FLIP
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-
-#if (NR_READERS == 1)
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#elif (NR_READERS == 2)
-
-#define read_free_race (read_generation[0] == last_free_gen || read_generation[1] == last_free_gen)
-#define read_free      (free_done && (data_access[0] || data_access[1]))
-
-#else
-
-#error "Too many readers"
-
-#endif
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               atomic {
-                       if
-                       :: get_readerid() == 0 ->
-progress_reader:
-                               skip;
-                       :: else ->
-                               skip;
-                       fi;
-               }
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 363553e..0000000
+++ /dev/null
@@ -1,1356 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2372
-2:3:2324
-3:3:2327
-4:3:2327
-5:3:2330
-6:3:2338
-7:3:2338
-8:3:2341
-9:3:2347
-10:3:2351
-11:3:2351
-12:3:2354
-13:3:2362
-14:3:2366
-15:3:2367
-16:0:2372
-17:3:2369
-18:0:2372
-19:2:1142
-20:0:2372
-21:2:1148
-22:0:2372
-23:2:1149
-24:0:2372
-25:2:1150
-26:2:1154
-27:2:1155
-28:2:1163
-29:2:1164
-30:2:1168
-31:2:1169
-32:2:1177
-33:2:1182
-34:2:1186
-35:2:1187
-36:2:1194
-37:2:1195
-38:2:1206
-39:2:1207
-40:2:1208
-41:2:1219
-42:2:1224
-43:2:1225
-44:0:2372
-45:2:1237
-46:2:1238
-47:0:2372
-48:2:1242
-49:2:1246
-50:2:1247
-51:2:1255
-52:2:1256
-53:2:1260
-54:2:1261
-55:2:1269
-56:2:1274
-57:2:1275
-58:2:1286
-59:2:1287
-60:2:1298
-61:2:1299
-62:2:1300
-63:2:1311
-64:2:1316
-65:2:1317
-66:0:2372
-67:2:1329
-68:0:2372
-69:2:1330
-70:0:2372
-71:2:1340
-72:0:2372
-73:2:1341
-74:0:2372
-75:2:1345
-76:2:1346
-77:2:1350
-78:2:1354
-79:2:1355
-80:2:1359
-81:2:1367
-82:2:1368
-83:2:1373
-84:2:1380
-85:2:1381
-86:2:1388
-87:2:1393
-88:0:2372
-89:2:1404
-90:0:2372
-91:2:1408
-92:2:1409
-93:2:1413
-94:2:1417
-95:2:1418
-96:2:1422
-97:2:1430
-98:2:1431
-99:2:1436
-100:2:1443
-101:2:1444
-102:2:1451
-103:2:1456
-104:0:2372
-105:2:1467
-106:0:2372
-107:2:1475
-108:2:1476
-109:2:1480
-110:2:1484
-111:2:1485
-112:2:1489
-113:2:1497
-114:2:1498
-115:2:1503
-116:2:1510
-117:2:1511
-118:2:1518
-119:2:1523
-120:0:2372
-121:2:1538
-122:0:2372
-123:2:1539
-124:2:1543
-125:2:1544
-126:2:1552
-127:2:1553
-128:2:1557
-129:2:1558
-130:2:1566
-131:2:1571
-132:2:1575
-133:2:1576
-134:2:1583
-135:2:1584
-136:2:1595
-137:2:1596
-138:2:1597
-139:2:1608
-140:2:1613
-141:2:1614
-142:0:2372
-143:2:1626
-144:0:2372
-145:2:1629
-146:2:1630
-147:2:1642
-148:2:1643
-149:2:1647
-150:2:1648
-151:2:1656
-152:2:1661
-153:2:1665
-154:2:1666
-155:2:1673
-156:2:1674
-157:2:1685
-158:2:1686
-159:2:1687
-160:2:1698
-161:2:1703
-162:2:1704
-163:0:2372
-164:2:1716
-165:0:2372
-166:2:1717
-167:0:2372
-168:2:1718
-169:0:2372
-170:2:1719
-171:0:2372
-172:2:1720
-173:2:1724
-174:2:1725
-175:2:1733
-176:2:1734
-177:2:1738
-178:2:1739
-179:2:1747
-180:2:1752
-181:2:1756
-182:2:1757
-183:2:1764
-184:2:1765
-185:2:1776
-186:2:1777
-187:2:1778
-188:2:1789
-189:2:1794
-190:2:1795
-191:0:2372
-192:2:2005
-193:0:2372
-194:2:2101
-195:0:2372
-196:2:2102
-197:0:2372
-198:2:2106
-199:0:2372
-200:2:2112
-201:0:2372
-202:2:2116
-203:2:2117
-204:2:2121
-205:2:2125
-206:2:2126
-207:2:2130
-208:2:2138
-209:2:2139
-210:2:2144
-211:2:2151
-212:2:2152
-213:2:2159
-214:2:2164
-215:0:2372
-216:2:2175
-217:0:2372
-218:2:2179
-219:2:2180
-220:2:2184
-221:2:2188
-222:2:2189
-223:2:2193
-224:2:2201
-225:2:2202
-226:2:2207
-227:2:2214
-228:2:2215
-229:2:2222
-230:2:2227
-231:0:2372
-232:2:2238
-233:0:2372
-234:2:2246
-235:2:2247
-236:2:2251
-237:2:2255
-238:2:2256
-239:2:2260
-240:2:2268
-241:2:2269
-242:2:2274
-243:2:2281
-244:2:2282
-245:2:2289
-246:2:2294
-247:0:2372
-248:2:2309
-249:0:2372
-250:2:2310
-251:0:2372
-252:2:1149
-253:0:2372
-254:2:1150
-255:2:1154
-256:2:1155
-257:2:1163
-258:2:1164
-259:2:1168
-260:2:1169
-261:2:1177
-262:2:1182
-263:2:1186
-264:2:1187
-265:2:1194
-266:2:1195
-267:2:1206
-268:2:1207
-269:2:1208
-270:2:1219
-271:2:1224
-272:2:1225
-273:0:2372
-274:2:1237
-275:2:1238
-276:0:2372
-277:2:1242
-278:2:1246
-279:2:1247
-280:2:1255
-281:2:1256
-282:2:1260
-283:2:1261
-284:2:1269
-285:2:1274
-286:2:1275
-287:2:1286
-288:2:1287
-289:2:1298
-290:2:1299
-291:2:1300
-292:2:1311
-293:2:1316
-294:2:1317
-295:0:2372
-296:2:1329
-297:0:2372
-298:2:1330
-299:0:2372
-300:2:1340
-301:0:2372
-302:2:1341
-303:0:2372
-304:2:1345
-305:2:1346
-306:2:1350
-307:2:1354
-308:2:1355
-309:2:1359
-310:2:1367
-311:2:1368
-312:2:1373
-313:2:1380
-314:2:1381
-315:2:1388
-316:2:1393
-317:0:2372
-318:2:1404
-319:0:2372
-320:2:1408
-321:2:1409
-322:2:1413
-323:2:1417
-324:2:1418
-325:2:1422
-326:2:1430
-327:2:1431
-328:2:1436
-329:2:1443
-330:2:1444
-331:2:1451
-332:2:1456
-333:0:2372
-334:2:1467
-335:0:2372
-336:2:1475
-337:2:1476
-338:2:1480
-339:2:1484
-340:2:1485
-341:2:1489
-342:2:1497
-343:2:1498
-344:2:1503
-345:2:1510
-346:2:1511
-347:2:1518
-348:2:1523
-349:0:2372
-350:2:1538
-351:0:2372
-352:2:1539
-353:2:1543
-354:2:1544
-355:2:1552
-356:2:1553
-357:2:1557
-358:2:1558
-359:2:1566
-360:2:1571
-361:2:1575
-362:2:1576
-363:2:1583
-364:2:1584
-365:2:1595
-366:2:1596
-367:2:1597
-368:2:1608
-369:2:1613
-370:2:1614
-371:0:2372
-372:2:1626
-373:0:2372
-374:2:1629
-375:2:1630
-376:2:1642
-377:2:1643
-378:2:1647
-379:2:1648
-380:2:1656
-381:2:1661
-382:2:1665
-383:2:1666
-384:2:1673
-385:2:1674
-386:2:1685
-387:2:1686
-388:2:1687
-389:2:1698
-390:2:1703
-391:2:1704
-392:0:2372
-393:2:1716
-394:0:2372
-395:2:1717
-396:0:2372
-397:2:1718
-398:0:2372
-399:2:1719
-400:0:2372
-401:2:1720
-402:2:1724
-403:2:1725
-404:2:1733
-405:2:1734
-406:2:1738
-407:2:1739
-408:2:1747
-409:2:1752
-410:2:1756
-411:2:1757
-412:2:1764
-413:2:1765
-414:2:1776
-415:2:1777
-416:2:1778
-417:2:1789
-418:2:1794
-419:2:1795
-420:0:2372
-421:2:2005
-422:0:2372
-423:2:2101
-424:0:2372
-425:2:2102
-426:0:2372
-427:2:2106
-428:0:2372
-429:2:2112
-430:0:2372
-431:2:2116
-432:2:2117
-433:2:2121
-434:2:2125
-435:2:2126
-436:2:2130
-437:2:2138
-438:2:2139
-439:2:2144
-440:2:2151
-441:2:2152
-442:2:2159
-443:2:2164
-444:0:2372
-445:2:2175
-446:0:2372
-447:2:2179
-448:2:2180
-449:2:2184
-450:2:2188
-451:2:2189
-452:2:2193
-453:2:2201
-454:2:2202
-455:2:2207
-456:2:2214
-457:2:2215
-458:2:2222
-459:2:2227
-460:0:2372
-461:2:2238
-462:0:2372
-463:2:2246
-464:2:2247
-465:2:2251
-466:2:2255
-467:2:2256
-468:2:2260
-469:2:2268
-470:2:2269
-471:2:2274
-472:2:2281
-473:2:2282
-474:2:2289
-475:2:2294
-476:0:2372
-477:2:2309
-478:0:2372
-479:2:2310
-480:0:2372
-481:2:1149
-482:0:2372
-483:2:1150
-484:2:1154
-485:2:1155
-486:2:1163
-487:2:1164
-488:2:1168
-489:2:1169
-490:2:1177
-491:2:1182
-492:2:1186
-493:2:1187
-494:2:1194
-495:2:1195
-496:2:1206
-497:2:1207
-498:2:1208
-499:2:1219
-500:2:1224
-501:2:1225
-502:0:2372
-503:2:1237
-504:2:1238
-505:0:2372
-506:2:1242
-507:2:1246
-508:2:1247
-509:2:1255
-510:2:1256
-511:2:1260
-512:2:1261
-513:2:1269
-514:2:1274
-515:2:1275
-516:2:1286
-517:2:1287
-518:2:1298
-519:2:1299
-520:2:1300
-521:2:1311
-522:2:1316
-523:2:1317
-524:0:2372
-525:2:1329
-526:0:2372
-527:2:1330
-528:0:2372
-529:2:1340
-530:0:2372
-531:2:1341
-532:0:2372
-533:2:1345
-534:2:1346
-535:2:1350
-536:2:1354
-537:2:1355
-538:2:1359
-539:2:1367
-540:2:1368
-541:2:1373
-542:2:1380
-543:2:1381
-544:2:1388
-545:2:1393
-546:0:2372
-547:2:1404
-548:0:2372
-549:2:1408
-550:2:1409
-551:2:1413
-552:2:1417
-553:2:1418
-554:2:1422
-555:2:1430
-556:2:1431
-557:2:1436
-558:2:1443
-559:2:1444
-560:2:1451
-561:2:1456
-562:0:2372
-563:2:1467
-564:0:2372
-565:2:1475
-566:2:1476
-567:2:1480
-568:2:1484
-569:2:1485
-570:2:1489
-571:2:1497
-572:2:1498
-573:2:1503
-574:2:1510
-575:2:1511
-576:2:1518
-577:2:1523
-578:0:2372
-579:2:1538
-580:0:2372
-581:2:1539
-582:2:1543
-583:2:1544
-584:2:1552
-585:2:1553
-586:2:1557
-587:2:1558
-588:2:1566
-589:2:1571
-590:2:1575
-591:2:1576
-592:2:1583
-593:2:1584
-594:2:1595
-595:2:1596
-596:2:1597
-597:2:1608
-598:2:1613
-599:2:1614
-600:0:2372
-601:2:1626
-602:0:2372
-603:2:1629
-604:2:1630
-605:2:1642
-606:2:1643
-607:2:1647
-608:2:1648
-609:2:1656
-610:2:1661
-611:2:1665
-612:2:1666
-613:2:1673
-614:2:1674
-615:2:1685
-616:2:1686
-617:2:1687
-618:2:1698
-619:2:1703
-620:2:1704
-621:0:2372
-622:2:1716
-623:0:2372
-624:2:1717
-625:0:2372
-626:2:1718
-627:0:2372
-628:2:1719
-629:0:2372
-630:2:1720
-631:2:1724
-632:2:1725
-633:2:1733
-634:2:1734
-635:2:1738
-636:2:1739
-637:2:1747
-638:2:1752
-639:2:1756
-640:2:1757
-641:2:1764
-642:2:1765
-643:2:1776
-644:2:1777
-645:2:1778
-646:2:1789
-647:2:1794
-648:2:1795
-649:0:2372
-650:2:2005
-651:0:2372
-652:2:2101
-653:0:2372
-654:2:2102
-655:0:2372
-656:2:2106
-657:0:2372
-658:2:2112
-659:0:2372
-660:2:2116
-661:2:2117
-662:2:2121
-663:2:2125
-664:2:2126
-665:2:2130
-666:2:2138
-667:2:2139
-668:2:2144
-669:2:2151
-670:2:2152
-671:2:2159
-672:2:2164
-673:0:2372
-674:2:2175
-675:0:2372
-676:2:2179
-677:2:2180
-678:2:2184
-679:2:2188
-680:2:2189
-681:2:2193
-682:2:2201
-683:2:2202
-684:2:2207
-685:2:2214
-686:2:2215
-687:2:2222
-688:2:2227
-689:0:2372
-690:2:2238
-691:0:2372
-692:2:2246
-693:2:2247
-694:2:2251
-695:2:2255
-696:2:2256
-697:2:2260
-698:2:2268
-699:2:2269
-700:2:2274
-701:2:2281
-702:2:2282
-703:2:2289
-704:2:2294
-705:0:2372
-706:2:2309
-707:0:2372
-708:2:2310
-709:0:2372
-710:2:1149
-711:0:2372
-712:2:1150
-713:2:1154
-714:2:1155
-715:2:1163
-716:2:1164
-717:2:1168
-718:2:1169
-719:2:1177
-720:2:1182
-721:2:1186
-722:2:1187
-723:2:1194
-724:2:1195
-725:2:1206
-726:2:1207
-727:2:1208
-728:2:1219
-729:2:1224
-730:2:1225
-731:0:2372
-732:2:1237
-733:2:1238
-734:0:2372
-735:2:1242
-736:2:1246
-737:2:1247
-738:2:1255
-739:2:1256
-740:2:1260
-741:2:1261
-742:2:1269
-743:2:1274
-744:2:1275
-745:2:1286
-746:2:1287
-747:2:1298
-748:2:1299
-749:2:1300
-750:2:1311
-751:2:1316
-752:2:1317
-753:0:2372
-754:2:1329
-755:0:2372
-756:2:1330
-757:0:2372
-758:2:1340
-759:0:2372
-760:2:1341
-761:0:2372
-762:2:1345
-763:2:1346
-764:2:1350
-765:2:1354
-766:2:1355
-767:2:1359
-768:2:1367
-769:2:1368
-770:2:1373
-771:2:1380
-772:2:1381
-773:2:1388
-774:2:1393
-775:0:2372
-776:2:1404
-777:0:2372
-778:2:1408
-779:2:1409
-780:2:1413
-781:2:1417
-782:2:1418
-783:2:1422
-784:2:1430
-785:2:1431
-786:2:1436
-787:2:1443
-788:2:1444
-789:2:1451
-790:2:1456
-791:0:2372
-792:2:1467
-793:0:2372
-794:2:1475
-795:2:1476
-796:2:1480
-797:2:1484
-798:2:1485
-799:2:1489
-800:2:1497
-801:2:1498
-802:2:1503
-803:2:1510
-804:2:1511
-805:2:1518
-806:2:1523
-807:0:2372
-808:2:1538
-809:0:2372
-810:2:1539
-811:2:1543
-812:2:1544
-813:2:1552
-814:2:1553
-815:2:1557
-816:2:1558
-817:2:1566
-818:2:1571
-819:2:1575
-820:2:1576
-821:2:1583
-822:2:1584
-823:2:1595
-824:2:1596
-825:2:1597
-826:2:1608
-827:2:1613
-828:2:1614
-829:0:2372
-830:2:1626
-831:0:2372
-832:2:1629
-833:2:1630
-834:2:1642
-835:2:1643
-836:2:1647
-837:2:1648
-838:2:1656
-839:2:1661
-840:2:1665
-841:2:1666
-842:2:1673
-843:2:1674
-844:2:1685
-845:2:1686
-846:2:1687
-847:2:1698
-848:2:1703
-849:2:1704
-850:0:2372
-851:2:1716
-852:0:2372
-853:2:1717
-854:0:2372
-855:2:1718
-856:0:2372
-857:2:1719
-858:0:2372
-859:2:1720
-860:2:1724
-861:2:1725
-862:2:1733
-863:2:1734
-864:2:1738
-865:2:1739
-866:2:1747
-867:2:1752
-868:2:1756
-869:2:1757
-870:2:1764
-871:2:1765
-872:2:1776
-873:2:1777
-874:2:1778
-875:2:1789
-876:2:1794
-877:2:1795
-878:0:2372
-879:2:2005
-880:0:2372
-881:2:2101
-882:0:2372
-883:2:2102
-884:0:2372
-885:2:2106
-886:0:2372
-887:2:2112
-888:0:2372
-889:2:2116
-890:2:2117
-891:2:2121
-892:2:2125
-893:2:2126
-894:2:2130
-895:2:2138
-896:2:2139
-897:2:2144
-898:2:2151
-899:2:2152
-900:2:2159
-901:2:2164
-902:0:2372
-903:2:2175
-904:0:2372
-905:1:2
-906:0:2372
-907:1:8
-908:0:2372
-909:1:9
-910:0:2372
-911:1:10
-912:0:2372
-913:1:11
-914:0:2372
-915:1:12
-916:1:16
-917:1:17
-918:1:25
-919:1:26
-920:1:30
-921:1:31
-922:1:39
-923:1:44
-924:1:48
-925:1:49
-926:1:63
-927:1:64
-928:1:68
-929:1:69
-930:1:70
-931:1:81
-932:1:86
-933:1:87
-934:0:2372
-935:1:99
-936:0:2372
-937:1:100
-938:1:104
-939:1:105
-940:1:113
-941:1:114
-942:1:118
-943:1:119
-944:1:127
-945:1:132
-946:1:136
-947:1:137
-948:1:151
-949:1:152
-950:1:156
-951:1:157
-952:1:158
-953:1:169
-954:1:174
-955:1:175
-956:0:2372
-957:1:187
-958:0:2372
-959:1:188
-960:0:2372
-961:2:2179
-962:2:2180
-963:2:2184
-964:2:2188
-965:2:2189
-966:2:2193
-967:2:2201
-968:2:2202
-969:2:2207
-970:2:2214
-971:2:2215
-972:2:2222
-973:2:2227
-974:0:2372
-975:2:2238
-976:0:2372
-977:2:2246
-978:2:2247
-979:2:2251
-980:2:2255
-981:2:2256
-982:2:2260
-983:2:2268
-984:2:2269
-985:2:2274
-986:2:2281
-987:2:2282
-988:2:2289
-989:2:2294
-990:0:2372
-991:2:2309
-992:0:2372
-993:2:2310
-994:0:2372
-995:2:1149
-996:0:2372
-997:2:1150
-998:2:1154
-999:2:1155
-1000:2:1163
-1001:2:1164
-1002:2:1168
-1003:2:1169
-1004:2:1177
-1005:2:1182
-1006:2:1186
-1007:2:1187
-1008:2:1194
-1009:2:1195
-1010:2:1206
-1011:2:1207
-1012:2:1208
-1013:2:1219
-1014:2:1224
-1015:2:1225
-1016:0:2372
-1017:2:1237
-1018:2:1238
-1019:0:2372
-1020:2:1242
-1021:2:1246
-1022:2:1247
-1023:2:1255
-1024:2:1256
-1025:2:1260
-1026:2:1261
-1027:2:1269
-1028:2:1274
-1029:2:1275
-1030:2:1286
-1031:2:1287
-1032:2:1298
-1033:2:1299
-1034:2:1300
-1035:2:1311
-1036:2:1316
-1037:2:1317
-1038:0:2372
-1039:2:1329
-1040:0:2372
-1041:2:1330
-1042:0:2372
-1043:2:1340
-1044:0:2372
-1045:2:1341
-1046:0:2372
-1047:2:1345
-1048:2:1346
-1049:2:1350
-1050:2:1354
-1051:2:1355
-1052:2:1359
-1053:2:1367
-1054:2:1368
-1055:2:1373
-1056:2:1380
-1057:2:1381
-1058:2:1388
-1059:2:1393
-1060:0:2372
-1061:2:1404
-1062:0:2372
-1063:1:189
-1064:1:193
-1065:1:194
-1066:1:202
-1067:1:203
-1068:1:207
-1069:1:208
-1070:1:216
-1071:1:221
-1072:1:225
-1073:1:226
-1074:1:233
-1075:1:234
-1076:1:245
-1077:1:246
-1078:1:247
-1079:1:258
-1080:1:270
-1081:1:271
-1082:0:2372
-1083:1:276
-1084:0:2372
-1085:1:477
-1086:0:2372
-1087:1:478
-1088:0:2372
-1089:1:11
-1090:0:2372
-1091:1:12
-1092:1:16
-1093:1:17
-1094:1:25
-1095:1:26
-1096:1:27
-1097:1:39
-1098:1:44
-1099:1:48
-1100:1:49
-1101:1:56
-1102:1:57
-1103:1:68
-1104:1:69
-1105:1:70
-1106:1:81
-1107:1:93
-1108:1:94
-1109:0:2372
-1110:1:99
-1111:0:2372
-1112:1:100
-1113:1:104
-1114:1:105
-1115:1:113
-1116:1:114
-1117:1:118
-1118:1:119
-1119:1:127
-1120:1:132
-1121:1:136
-1122:1:137
-1123:1:144
-1124:1:145
-1125:1:156
-1126:1:157
-1127:1:158
-1128:1:169
-1129:1:181
-1130:1:182
-1131:0:2372
-1132:1:279
-1133:0:2372
-1134:1:280
-1135:0:2372
-1136:1:477
-1137:0:2372
-1138:1:478
-1139:0:2372
-1140:1:483
-1141:0:2372
-1142:1:488
-1143:1:492
-1144:1:493
-1145:1:501
-1146:1:502
-1147:1:503
-1148:1:515
-1149:1:520
-1150:1:524
-1151:1:525
-1152:1:532
-1153:1:533
-1154:1:544
-1155:1:545
-1156:1:546
-1157:1:557
-1158:1:569
-1159:1:570
-1160:0:2372
-1161:1:575
-1162:0:2372
-1163:2:1408
-1164:2:1409
-1165:2:1413
-1166:2:1417
-1167:2:1418
-1168:2:1422
-1169:2:1430
-1170:2:1431
-1171:2:1436
-1172:2:1443
-1173:2:1444
-1174:2:1451
-1175:2:1456
-1176:0:2372
-1177:2:1467
-1178:0:2372
-1179:2:1475
-1180:2:1476
-1181:2:1480
-1182:2:1484
-1183:2:1485
-1184:2:1489
-1185:2:1497
-1186:2:1498
-1187:2:1503
-1188:2:1510
-1189:2:1511
-1190:2:1518
-1191:2:1523
-1192:0:2372
-1193:2:1538
-1194:0:2372
-1195:2:1539
-1196:2:1543
-1197:2:1544
-1198:2:1552
-1199:2:1553
-1200:2:1557
-1201:2:1558
-1202:2:1566
-1203:2:1571
-1204:2:1575
-1205:2:1576
-1206:2:1583
-1207:2:1584
-1208:2:1595
-1209:2:1596
-1210:2:1597
-1211:2:1608
-1212:2:1613
-1213:2:1614
-1214:0:2372
-1215:2:1626
-1216:0:2372
-1217:2:1629
-1218:2:1630
-1219:2:1642
-1220:2:1643
-1221:2:1647
-1222:2:1648
-1223:2:1656
-1224:2:1661
-1225:2:1665
-1226:2:1666
-1227:2:1673
-1228:2:1674
-1229:2:1685
-1230:2:1686
-1231:2:1687
-1232:2:1698
-1233:2:1703
-1234:2:1704
-1235:0:2372
-1236:2:1716
-1237:0:2372
-1238:2:1717
-1239:0:2372
-1240:2:1718
-1241:0:2372
-1242:2:1719
-1243:0:2372
-1244:2:1720
-1245:2:1724
-1246:2:1725
-1247:2:1733
-1248:2:1734
-1249:2:1738
-1250:2:1739
-1251:2:1747
-1252:2:1752
-1253:2:1756
-1254:2:1757
-1255:2:1764
-1256:2:1765
-1257:2:1776
-1258:2:1777
-1259:2:1778
-1260:2:1789
-1261:2:1794
-1262:2:1795
-1263:0:2372
-1264:2:2005
-1265:0:2372
-1266:2:2101
-1267:0:2372
-1268:2:2102
-1269:0:2372
-1270:2:2106
-1271:0:2372
-1272:2:2112
-1273:0:2372
-1274:2:2116
-1275:2:2117
-1276:2:2121
-1277:2:2125
-1278:2:2126
-1279:2:2130
-1280:2:2138
-1281:2:2139
-1282:2:2144
-1283:2:2151
-1284:2:2152
-1285:2:2159
-1286:2:2164
-1287:0:2372
-1288:2:2175
-1289:0:2372
-1290:2:2179
-1291:2:2180
-1292:2:2184
-1293:2:2188
-1294:2:2189
-1295:2:2193
-1296:2:2201
-1297:2:2202
-1298:2:2207
-1299:2:2214
-1300:2:2215
-1301:2:2222
-1302:2:2227
-1303:0:2372
-1304:2:2238
-1305:0:2372
-1306:2:2246
-1307:2:2247
-1308:2:2251
-1309:2:2255
-1310:2:2256
-1311:2:2260
-1312:2:2268
-1313:2:2269
-1314:2:2274
-1315:2:2281
-1316:2:2282
-1317:2:2289
-1318:2:2294
-1319:0:2372
-1320:2:2309
-1321:0:2372
-1322:2:2310
-1323:0:2372
-1324:2:2313
-1325:0:2372
-1326:2:2318
-1327:0:2372
-1328:1:576
-1329:1:580
-1330:1:581
-1331:1:589
-1332:1:590
-1333:1:594
-1334:1:595
-1335:1:603
-1336:1:608
-1337:1:612
-1338:1:613
-1339:1:620
-1340:1:621
-1341:1:632
-1342:1:633
-1343:1:634
-1344:1:645
-1345:1:650
-1346:1:651
-1347:0:2372
-1348:2:2319
-1349:0:2372
-1350:1:663
-1351:0:2370
-1352:2:2318
-1353:0:2376
-1354:1:241
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress.ltl b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.define b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.log
deleted file mode 100644 (file)
index ceb438f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-spin: line 296 replacement value: tmp
-spin: line 296 "pan.___", Error: formal par of wait_for_quiescent_state contains replacement value     saw '-2'' near 'readerid'
-spin: 1 error(s) - aborting
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index cc55960..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#define READER_PROGRESS
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#define read_free_race (read_generation == last_free_gen)
-#define read_free      (free_done && data_access)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.define b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.log
deleted file mode 100644 (file)
index 985f839..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -w -DHASH64 -o pan pan.c
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 28f1299..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-#define WRITER_PROGRESS
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#define read_free_race (read_generation == last_free_gen)
-#define read_free      (free_done && data_access)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.define b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.log b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index 26b6236..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-spin: line 297 replacement value: tmp
-spin: line 297 "pan.___", Error: formal par of wait_for_quiescent_state contains replacement value     saw '-2'' near 'readerid'
-spin: 1 error(s) - aborting
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu/testmerge'
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index 43e979c..0000000
+++ /dev/null
@@ -1,411 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#define read_free_race (read_generation == last_free_gen)
-#define read_free      (free_done && data_access)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define get_pid()      (_pid)
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), wmb_mb forces
- * both.
- */
-
-#define DECLARE_CACHED_VAR(type, x, v) \
-       type mem_##x = v;               \
-       type cached_##x[NR_PROCS] = v;  \
-       bit cache_dirty_##x[NR_PROCS] = 0
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x[id])
-
-#define READ_CACHED_VAR(x)     (cached_##x[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)         \
-       atomic {                        \
-               cached_##x[get_pid()] = v;      \
-               cache_dirty_##x[get_pid()] = 1; \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)              \
-       if                                      \
-       :: IS_CACHE_DIRTY(x, id) ->             \
-               mem_##x = cached_##x[id];       \
-               cache_dirty_##x[id] = 0;        \
-       :: else ->                              \
-               skip                            \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, i);
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, i);
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid());
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               CACHE_READ_FROM_MEM(urcu_active_readers_one, get_pid());
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               CACHE_WRITE_TO_MEM(urcu_active_readers_one, get_pid());
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb and ooo_mem */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr, 1);
-/* Note ! currently only one reader */
-DECLARE_CACHED_VAR(byte, urcu_active_readers_one, 0);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr, 0);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation = 1;
-bit data_access = 0;
-
-bit write_lock = 0;
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers_one,
-                                               get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, id, i)
-{
-       do
-       :: 1 ->
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (tmp & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i);
-#else
-                       ooo_mem(i);
-#endif
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, i, j)
-{
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               wait_for_reader(tmp, i, j);
-               if
-               :: (NR_READERS > 1) && (i < NR_READERS - 1)
-                       -> ooo_mem(j);
-               :: else
-                       -> skip;
-               fi;
-               i++
-       :: i >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers_one, tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers_one,
-                                        tmp + 1);
-               fi;
-               smp_mb(i);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access = 1;
-       ooo_mem(i);
-       data_access = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers_one);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers_one, tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active [NR_READERS] proctype urcu_reader()
-{
-       byte i, nest_i;
-       byte tmp, tmp2;
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, nest_i, tmp, tmp2);
-       od;
-}
-
-/* Model the RCU update process. */
-
-active [NR_WRITERS] proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp;
-       byte old_gen;
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               wait_for_quiescent_state(tmp, i, j);
-#endif
-               smp_mb(i);
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               skip;
-       od;
-}
diff --git a/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu/result-signal-over-writer/testmerge/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index ff6f1c5..0000000
+++ /dev/null
@@ -1,4590 +0,0 @@
--2:2:-2
--4:-4:-4
-1:0:2223
-2:2:908
-3:0:2223
-4:1:0
-5:0:2223
-6:1:1
-7:0:2223
-8:1:2
-9:0:2223
-10:1:3
-11:0:2223
-12:2:909
-13:0:2223
-14:2:910
-15:2:914
-16:2:915
-17:2:922
-18:2:926
-19:2:927
-20:2:934
-21:2:938
-22:2:939
-23:2:946
-24:2:947
-25:2:957
-26:2:958
-27:2:968
-28:2:969
-29:0:2221
-30:2:981
-31:2:982
-32:0:2227
-33:2:986
-34:2:990
-35:2:991
-36:2:998
-37:2:1002
-38:2:1003
-39:2:1010
-40:2:1011
-41:2:1022
-42:2:1023
-43:2:1033
-44:2:1034
-45:2:1044
-46:2:1045
-47:0:2227
-48:2:1057
-49:0:2227
-50:2:1058
-51:0:2227
-52:2:1068
-53:0:2227
-54:2:1069
-55:0:2227
-56:2:1073
-57:2:1074
-58:2:1080
-59:2:1081
-60:2:1087
-61:2:1088
-62:2:1093
-63:2:1099
-64:2:1105
-65:0:2227
-66:2:1116
-67:0:2227
-68:2:1120
-69:2:1121
-70:2:1127
-71:2:1128
-72:2:1134
-73:2:1135
-74:2:1140
-75:2:1146
-76:2:1152
-77:0:2227
-78:2:1163
-79:0:2227
-80:2:1171
-81:2:1172
-82:2:1178
-83:2:1179
-84:2:1185
-85:2:1186
-86:2:1191
-87:2:1197
-88:2:1203
-89:0:2227
-90:2:1218
-91:0:2227
-92:2:1219
-93:2:1223
-94:2:1224
-95:2:1231
-96:2:1235
-97:2:1236
-98:2:1243
-99:2:1247
-100:2:1248
-101:2:1255
-102:2:1256
-103:2:1266
-104:2:1267
-105:2:1277
-106:2:1278
-107:0:2227
-108:2:1290
-109:0:2227
-110:2:1293
-111:2:1294
-112:2:1305
-113:2:1309
-114:2:1310
-115:2:1317
-116:2:1321
-117:2:1322
-118:2:1329
-119:2:1330
-120:2:1340
-121:2:1341
-122:2:1351
-123:2:1352
-124:0:2227
-125:2:1364
-126:0:2227
-127:2:1365
-128:0:2227
-129:2:1366
-130:0:2227
-131:2:1367
-132:0:2227
-133:2:1368
-134:2:1372
-135:2:1373
-136:2:1380
-137:2:1384
-138:2:1385
-139:2:1392
-140:2:1396
-141:2:1397
-142:2:1404
-143:2:1405
-144:2:1415
-145:2:1416
-146:2:1426
-147:2:1427
-148:0:2227
-149:2:1511
-150:0:2227
-151:2:1591
-152:0:2227
-153:2:1592
-154:0:2227
-155:2:1596
-156:0:2227
-157:2:1602
-158:2:1606
-159:2:1607
-160:2:1614
-161:2:1618
-162:2:1619
-163:2:1626
-164:2:1630
-165:2:1631
-166:2:1638
-167:2:1639
-168:2:1649
-169:2:1650
-170:2:1660
-171:2:1661
-172:0:2227
-173:2:1673
-174:0:2227
-175:2:1674
-176:2:1678
-177:2:1679
-178:2:1686
-179:2:1690
-180:2:1691
-181:2:1698
-182:2:1702
-183:2:1703
-184:2:1710
-185:2:1711
-186:2:1721
-187:2:1722
-188:2:1732
-189:2:1733
-190:0:2227
-191:2:1745
-192:0:2227
-193:1:4
-194:1:8
-195:1:9
-196:1:16
-197:1:20
-198:1:21
-199:1:28
-200:1:32
-201:1:33
-202:1:40
-203:1:41
-204:1:51
-205:1:52
-206:1:62
-207:1:63
-208:0:2227
-209:1:75
-210:0:2227
-211:1:76
-212:1:80
-213:1:81
-214:1:88
-215:1:92
-216:1:93
-217:1:100
-218:1:104
-219:1:105
-220:1:112
-221:1:113
-222:1:123
-223:1:124
-224:1:134
-225:1:135
-226:0:2227
-227:1:147
-228:0:2227
-229:1:148
-230:0:2227
-231:1:149
-232:1:153
-233:1:154
-234:1:161
-235:1:165
-236:1:166
-237:1:173
-238:1:177
-239:1:178
-240:1:185
-241:1:186
-242:1:196
-243:1:197
-244:1:207
-245:1:208
-246:0:2227
-247:1:220
-248:0:2227
-249:1:373
-250:0:2227
-251:1:374
-252:0:2227
-253:1:3
-254:0:2227
-255:1:4
-256:1:8
-257:1:9
-258:1:16
-259:1:17
-260:1:28
-261:1:32
-262:1:33
-263:1:40
-264:1:41
-265:1:51
-266:1:52
-267:1:62
-268:1:63
-269:0:2227
-270:2:1748
-271:2:1749
-272:2:1760
-273:2:1764
-274:2:1765
-275:2:1772
-276:2:1776
-277:2:1777
-278:2:1784
-279:2:1785
-280:2:1795
-281:2:1796
-282:2:1806
-283:2:1807
-284:0:2227
-285:2:1819
-286:0:2227
-287:2:1820
-288:0:2227
-289:2:1821
-290:0:2227
-291:2:1822
-292:0:2227
-293:2:1823
-294:2:1827
-295:2:1828
-296:2:1835
-297:2:1839
-298:2:1840
-299:2:1847
-300:2:1851
-301:2:1852
-302:2:1859
-303:2:1860
-304:2:1870
-305:2:1871
-306:2:1881
-307:2:1882
-308:0:2227
-309:2:1894
-310:0:2227
-311:2:1895
-312:2:1899
-313:2:1900
-314:2:1907
-315:2:1911
-316:2:1912
-317:2:1919
-318:2:1923
-319:2:1924
-320:2:1931
-321:2:1932
-322:2:1942
-323:2:1943
-324:2:1953
-325:2:1954
-326:0:2227
-327:2:1821
-328:0:2227
-329:1:75
-330:0:2227
-331:2:1822
-332:0:2227
-333:2:1823
-334:2:1827
-335:2:1828
-336:2:1835
-337:2:1839
-338:2:1840
-339:2:1847
-340:2:1851
-341:2:1852
-342:2:1859
-343:2:1860
-344:2:1870
-345:2:1871
-346:2:1881
-347:2:1882
-348:0:2227
-349:2:1894
-350:0:2227
-351:2:1895
-352:2:1899
-353:2:1900
-354:2:1907
-355:2:1911
-356:2:1912
-357:2:1919
-358:2:1923
-359:2:1924
-360:2:1931
-361:2:1932
-362:2:1942
-363:2:1943
-364:2:1953
-365:2:1954
-366:0:2227
-367:2:1821
-368:0:2227
-369:1:76
-370:1:80
-371:1:81
-372:1:88
-373:1:92
-374:1:93
-375:1:100
-376:1:104
-377:1:105
-378:1:112
-379:1:113
-380:1:123
-381:1:124
-382:1:134
-383:1:135
-384:0:2227
-385:1:223
-386:0:2227
-387:2:1822
-388:0:2227
-389:2:1823
-390:2:1827
-391:2:1828
-392:2:1835
-393:2:1839
-394:2:1840
-395:2:1847
-396:2:1851
-397:2:1852
-398:2:1859
-399:2:1860
-400:2:1870
-401:2:1871
-402:2:1881
-403:2:1882
-404:0:2227
-405:2:1894
-406:0:2227
-407:2:1895
-408:2:1899
-409:2:1900
-410:2:1907
-411:2:1911
-412:2:1912
-413:2:1919
-414:2:1923
-415:2:1924
-416:2:1931
-417:2:1932
-418:2:1942
-419:2:1943
-420:2:1953
-421:2:1954
-422:0:2227
-423:2:1821
-424:0:2227
-425:1:224
-426:0:2227
-427:1:373
-428:0:2227
-429:1:374
-430:0:2227
-431:1:379
-432:0:2227
-433:2:1822
-434:0:2227
-435:2:1823
-436:2:1827
-437:2:1828
-438:2:1835
-439:2:1839
-440:2:1840
-441:2:1847
-442:2:1851
-443:2:1852
-444:2:1859
-445:2:1860
-446:2:1870
-447:2:1871
-448:2:1881
-449:2:1882
-450:0:2227
-451:2:1894
-452:0:2227
-453:2:1895
-454:2:1899
-455:2:1900
-456:2:1907
-457:2:1911
-458:2:1912
-459:2:1919
-460:2:1923
-461:2:1924
-462:2:1931
-463:2:1932
-464:2:1942
-465:2:1943
-466:2:1953
-467:2:1954
-468:0:2227
-469:2:1821
-470:0:2227
-471:1:384
-472:1:388
-473:1:389
-474:1:396
-475:1:397
-476:1:408
-477:1:412
-478:1:413
-479:1:420
-480:1:421
-481:1:431
-482:1:432
-483:1:442
-484:1:443
-485:0:2227
-486:2:1822
-487:0:2227
-488:2:1823
-489:2:1827
-490:2:1828
-491:2:1835
-492:2:1839
-493:2:1840
-494:2:1847
-495:2:1851
-496:2:1852
-497:2:1859
-498:2:1860
-499:2:1870
-500:2:1871
-501:2:1881
-502:2:1882
-503:0:2227
-504:2:1894
-505:0:2227
-506:2:1895
-507:2:1899
-508:2:1900
-509:2:1907
-510:2:1911
-511:2:1912
-512:2:1919
-513:2:1923
-514:2:1924
-515:2:1931
-516:2:1932
-517:2:1942
-518:2:1943
-519:2:1953
-520:2:1954
-521:0:2227
-522:2:1821
-523:0:2227
-524:2:1822
-525:0:2227
-526:2:1823
-527:2:1827
-528:2:1828
-529:2:1835
-530:2:1839
-531:2:1840
-532:2:1847
-533:2:1851
-534:2:1852
-535:2:1859
-536:2:1860
-537:2:1870
-538:2:1871
-539:2:1881
-540:2:1882
-541:0:2227
-542:1:455
-543:0:2227
-544:2:1894
-545:0:2227
-546:2:1895
-547:2:1899
-548:2:1900
-549:2:1907
-550:2:1911
-551:2:1912
-552:2:1919
-553:2:1923
-554:2:1924
-555:2:1931
-556:2:1932
-557:2:1942
-558:2:1943
-559:2:1953
-560:2:1954
-561:0:2227
-562:2:1821
-563:0:2227
-564:2:1822
-565:0:2227
-566:2:1823
-567:2:1827
-568:2:1828
-569:2:1835
-570:2:1839
-571:2:1840
-572:2:1847
-573:2:1851
-574:2:1852
-575:2:1859
-576:2:1860
-577:2:1870
-578:2:1871
-579:2:1881
-580:2:1882
-581:0:2227
-582:1:456
-583:1:460
-584:1:461
-585:1:468
-586:1:472
-587:1:473
-588:1:480
-589:1:484
-590:1:485
-591:1:492
-592:1:493
-593:1:503
-594:1:504
-595:1:514
-596:1:515
-597:0:2227
-598:2:1894
-599:0:2227
-600:2:1895
-601:2:1899
-602:2:1900
-603:2:1907
-604:2:1911
-605:2:1912
-606:2:1919
-607:2:1923
-608:2:1924
-609:2:1931
-610:2:1932
-611:2:1942
-612:2:1943
-613:2:1953
-614:2:1954
-615:0:2227
-616:2:1821
-617:0:2227
-618:2:1822
-619:0:2227
-620:2:1823
-621:2:1827
-622:2:1828
-623:2:1835
-624:2:1839
-625:2:1840
-626:2:1847
-627:2:1851
-628:2:1852
-629:2:1859
-630:2:1860
-631:2:1870
-632:2:1871
-633:2:1881
-634:2:1882
-635:0:2227
-636:1:527
-637:0:2227
-638:2:1894
-639:0:2227
-640:2:1895
-641:2:1899
-642:2:1900
-643:2:1907
-644:2:1911
-645:2:1912
-646:2:1919
-647:2:1923
-648:2:1924
-649:2:1931
-650:2:1932
-651:2:1942
-652:2:1943
-653:2:1953
-654:2:1954
-655:0:2227
-656:2:1821
-657:0:2227
-658:2:1822
-659:0:2227
-660:2:1823
-661:2:1827
-662:2:1828
-663:2:1835
-664:2:1839
-665:2:1840
-666:2:1847
-667:2:1851
-668:2:1852
-669:2:1859
-670:2:1860
-671:2:1870
-672:2:1871
-673:2:1881
-674:2:1882
-675:0:2227
-676:1:528
-677:1:532
-678:1:533
-679:1:540
-680:1:544
-681:1:545
-682:1:552
-683:1:556
-684:1:557
-685:1:564
-686:1:565
-687:1:575
-688:1:576
-689:1:586
-690:1:587
-691:0:2227
-692:2:1894
-693:0:2227
-694:2:1895
-695:2:1899
-696:2:1900
-697:2:1907
-698:2:1911
-699:2:1912
-700:2:1919
-701:2:1923
-702:2:1924
-703:2:1931
-704:2:1932
-705:2:1942
-706:2:1943
-707:2:1953
-708:2:1954
-709:0:2227
-710:2:1821
-711:0:2227
-712:2:1822
-713:0:2227
-714:2:1823
-715:2:1827
-716:2:1828
-717:2:1835
-718:2:1839
-719:2:1840
-720:2:1847
-721:2:1851
-722:2:1852
-723:2:1859
-724:2:1860
-725:2:1870
-726:2:1871
-727:2:1881
-728:2:1882
-729:0:2227
-730:1:599
-731:0:2227
-732:1:600
-733:0:2227
-734:1:601
-735:0:2227
-736:1:746
-737:0:2227
-738:1:747
-739:0:2227
-740:2:1894
-741:0:2227
-742:2:1895
-743:2:1899
-744:2:1900
-745:2:1907
-746:2:1911
-747:2:1912
-748:2:1919
-749:2:1923
-750:2:1924
-751:2:1931
-752:2:1932
-753:2:1942
-754:2:1943
-755:2:1953
-756:2:1954
-757:0:2227
-758:2:1821
-759:0:2227
-760:2:1822
-761:0:2227
-762:2:1823
-763:2:1827
-764:2:1828
-765:2:1835
-766:2:1839
-767:2:1840
-768:2:1847
-769:2:1851
-770:2:1852
-771:2:1859
-772:2:1860
-773:2:1870
-774:2:1871
-775:2:1881
-776:2:1882
-777:0:2227
-778:1:751
-779:0:2227
-780:2:1894
-781:0:2227
-782:2:1895
-783:2:1899
-784:2:1900
-785:2:1907
-786:2:1911
-787:2:1912
-788:2:1919
-789:2:1923
-790:2:1924
-791:2:1931
-792:2:1932
-793:2:1942
-794:2:1943
-795:2:1953
-796:2:1954
-797:0:2227
-798:2:1821
-799:0:2227
-800:2:1822
-801:0:2227
-802:2:1823
-803:2:1827
-804:2:1828
-805:2:1835
-806:2:1839
-807:2:1840
-808:2:1847
-809:2:1851
-810:2:1852
-811:2:1859
-812:2:1860
-813:2:1870
-814:2:1871
-815:2:1881
-816:2:1882
-817:0:2227
-818:1:752
-819:1:756
-820:1:757
-821:1:764
-822:1:768
-823:1:769
-824:1:776
-825:1:780
-826:1:781
-827:1:788
-828:1:789
-829:1:799
-830:1:800
-831:1:810
-832:1:811
-833:0:2227
-834:2:1894
-835:0:2227
-836:2:1895
-837:2:1899
-838:2:1900
-839:2:1907
-840:2:1911
-841:2:1912
-842:2:1919
-843:2:1923
-844:2:1924
-845:2:1931
-846:2:1932
-847:2:1942
-848:2:1943
-849:2:1953
-850:2:1954
-851:0:2227
-852:2:1821
-853:0:2227
-854:2:1822
-855:0:2227
-856:2:1823
-857:2:1827
-858:2:1828
-859:2:1835
-860:2:1839
-861:2:1840
-862:2:1847
-863:2:1851
-864:2:1852
-865:2:1859
-866:2:1860
-867:2:1870
-868:2:1871
-869:2:1881
-870:2:1882
-871:0:2227
-872:1:823
-873:0:2227
-874:1:601
-875:0:2227
-876:1:746
-877:0:2227
-878:1:747
-879:0:2227
-880:2:1894
-881:0:2227
-882:2:1895
-883:2:1899
-884:2:1900
-885:2:1907
-886:2:1911
-887:2:1912
-888:2:1919
-889:2:1923
-890:2:1924
-891:2:1931
-892:2:1932
-893:2:1942
-894:2:1943
-895:2:1953
-896:2:1954
-897:0:2227
-898:2:1821
-899:0:2227
-900:2:1822
-901:0:2227
-902:2:1823
-903:2:1827
-904:2:1828
-905:2:1835
-906:2:1839
-907:2:1840
-908:2:1847
-909:2:1851
-910:2:1852
-911:2:1859
-912:2:1860
-913:2:1870
-914:2:1871
-915:2:1881
-916:2:1882
-917:0:2227
-918:1:751
-919:0:2227
-920:2:1894
-921:0:2227
-922:2:1895
-923:2:1899
-924:2:1900
-925:2:1907
-926:2:1911
-927:2:1912
-928:2:1919
-929:2:1923
-930:2:1924
-931:2:1931
-932:2:1932
-933:2:1942
-934:2:1943
-935:2:1953
-936:2:1954
-937:0:2227
-938:2:1821
-939:0:2227
-940:2:1822
-941:0:2227
-942:2:1823
-943:2:1827
-944:2:1828
-945:2:1835
-946:2:1839
-947:2:1840
-948:2:1847
-949:2:1851
-950:2:1852
-951:2:1859
-952:2:1860
-953:2:1870
-954:2:1871
-955:2:1881
-956:2:1882
-957:0:2227
-958:1:752
-959:1:756
-960:1:757
-961:1:764
-962:1:765
-963:1:776
-964:1:780
-965:1:781
-966:1:788
-967:1:789
-968:1:799
-969:1:800
-970:1:810
-971:1:811
-972:0:2227
-973:2:1894
-974:0:2227
-975:2:1895
-976:2:1899
-977:2:1900
-978:2:1907
-979:2:1911
-980:2:1912
-981:2:1919
-982:2:1923
-983:2:1924
-984:2:1931
-985:2:1932
-986:2:1942
-987:2:1943
-988:2:1953
-989:2:1954
-990:0:2227
-991:2:1821
-992:0:2227
-993:2:1822
-994:0:2227
-995:2:1823
-996:2:1827
-997:2:1828
-998:2:1835
-999:2:1839
-1000:2:1840
-1001:2:1847
-1002:2:1851
-1003:2:1852
-1004:2:1859
-1005:2:1860
-1006:2:1870
-1007:2:1871
-1008:2:1881
-1009:2:1882
-1010:0:2227
-1011:2:1894
-1012:0:2227
-1013:1:823
-1014:0:2227
-1015:1:827
-1016:0:2227
-1017:2:1895
-1018:2:1899
-1019:2:1900
-1020:2:1907
-1021:2:1911
-1022:2:1912
-1023:2:1919
-1024:2:1923
-1025:2:1924
-1026:2:1931
-1027:2:1932
-1028:2:1942
-1029:2:1943
-1030:2:1953
-1031:2:1954
-1032:0:2227
-1033:2:1821
-1034:0:2227
-1035:2:1822
-1036:0:2227
-1037:2:1823
-1038:2:1827
-1039:2:1828
-1040:2:1835
-1041:2:1839
-1042:2:1840
-1043:2:1847
-1044:2:1851
-1045:2:1852
-1046:2:1859
-1047:2:1860
-1048:2:1870
-1049:2:1871
-1050:2:1881
-1051:2:1882
-1052:0:2227
-1053:2:1894
-1054:0:2227
-1055:1:832
-1056:1:836
-1057:1:837
-1058:1:844
-1059:1:845
-1060:1:856
-1061:1:860
-1062:1:861
-1063:1:868
-1064:1:869
-1065:1:879
-1066:1:880
-1067:1:890
-1068:1:891
-1069:0:2227
-1070:1:1
-1071:0:2227
-1072:1:2
-1073:0:2227
-1074:1:3
-1075:0:2227
-1076:2:1895
-1077:2:1899
-1078:2:1900
-1079:2:1907
-1080:2:1911
-1081:2:1912
-1082:2:1919
-1083:2:1923
-1084:2:1924
-1085:2:1931
-1086:2:1932
-1087:2:1949
-1088:2:1950
-1089:2:1953
-1090:2:1954
-1091:0:2227
-1092:2:1821
-1093:0:2227
-1094:2:1822
-1095:0:2227
-1096:2:1823
-1097:2:1827
-1098:2:1828
-1099:2:1835
-1100:2:1839
-1101:2:1840
-1102:2:1847
-1103:2:1851
-1104:2:1852
-1105:2:1859
-1106:2:1860
-1107:2:1877
-1108:2:1878
-1109:2:1881
-1110:2:1882
-1111:0:2227
-1112:2:1894
-1113:0:2227
-1114:1:4
-1115:1:8
-1116:1:9
-1117:1:16
-1118:1:20
-1119:1:21
-1120:1:28
-1121:1:32
-1122:1:33
-1123:1:40
-1124:1:41
-1125:1:51
-1126:1:52
-1127:1:62
-1128:1:63
-1129:0:2227
-1130:2:1895
-1131:2:1899
-1132:2:1900
-1133:2:1907
-1134:2:1911
-1135:2:1912
-1136:2:1919
-1137:2:1923
-1138:2:1924
-1139:2:1931
-1140:2:1932
-1141:2:1949
-1142:2:1950
-1143:2:1953
-1144:2:1954
-1145:0:2227
-1146:2:1821
-1147:0:2227
-1148:2:1822
-1149:0:2227
-1150:2:1823
-1151:2:1827
-1152:2:1828
-1153:2:1835
-1154:2:1839
-1155:2:1840
-1156:2:1847
-1157:2:1851
-1158:2:1852
-1159:2:1859
-1160:2:1860
-1161:2:1877
-1162:2:1878
-1163:2:1881
-1164:2:1882
-1165:0:2227
-1166:2:1894
-1167:0:2227
-1168:1:75
-1169:0:2227
-1170:2:1895
-1171:2:1899
-1172:2:1900
-1173:2:1907
-1174:2:1911
-1175:2:1912
-1176:2:1919
-1177:2:1923
-1178:2:1924
-1179:2:1931
-1180:2:1932
-1181:2:1949
-1182:2:1950
-1183:2:1953
-1184:2:1954
-1185:0:2227
-1186:2:1821
-1187:0:2227
-1188:2:1822
-1189:0:2227
-1190:2:1823
-1191:2:1827
-1192:2:1828
-1193:2:1835
-1194:2:1839
-1195:2:1840
-1196:2:1847
-1197:2:1851
-1198:2:1852
-1199:2:1859
-1200:2:1860
-1201:2:1877
-1202:2:1878
-1203:2:1881
-1204:2:1882
-1205:0:2227
-1206:2:1894
-1207:0:2227
-1208:1:76
-1209:1:80
-1210:1:81
-1211:1:88
-1212:1:92
-1213:1:93
-1214:1:100
-1215:1:104
-1216:1:105
-1217:1:112
-1218:1:113
-1219:1:123
-1220:1:124
-1221:1:134
-1222:1:135
-1223:0:2227
-1224:1:147
-1225:0:2227
-1226:2:1895
-1227:2:1899
-1228:2:1900
-1229:2:1907
-1230:2:1911
-1231:2:1912
-1232:2:1919
-1233:2:1923
-1234:2:1924
-1235:2:1931
-1236:2:1932
-1237:2:1949
-1238:2:1950
-1239:2:1953
-1240:2:1954
-1241:0:2227
-1242:2:1821
-1243:0:2227
-1244:2:1822
-1245:0:2227
-1246:2:1823
-1247:2:1827
-1248:2:1828
-1249:2:1835
-1250:2:1839
-1251:2:1840
-1252:2:1847
-1253:2:1851
-1254:2:1852
-1255:2:1859
-1256:2:1860
-1257:2:1877
-1258:2:1878
-1259:2:1881
-1260:2:1882
-1261:0:2227
-1262:2:1894
-1263:0:2227
-1264:1:148
-1265:0:2227
-1266:2:1895
-1267:2:1899
-1268:2:1900
-1269:2:1907
-1270:2:1911
-1271:2:1912
-1272:2:1919
-1273:2:1923
-1274:2:1924
-1275:2:1931
-1276:2:1932
-1277:2:1949
-1278:2:1950
-1279:2:1953
-1280:2:1954
-1281:0:2227
-1282:2:1821
-1283:0:2227
-1284:2:1822
-1285:0:2227
-1286:2:1823
-1287:2:1827
-1288:2:1828
-1289:2:1835
-1290:2:1839
-1291:2:1840
-1292:2:1847
-1293:2:1851
-1294:2:1852
-1295:2:1859
-1296:2:1860
-1297:2:1877
-1298:2:1878
-1299:2:1881
-1300:2:1882
-1301:0:2227
-1302:2:1894
-1303:0:2227
-1304:1:149
-1305:1:153
-1306:1:154
-1307:1:161
-1308:1:165
-1309:1:166
-1310:1:173
-1311:1:177
-1312:1:178
-1313:1:185
-1314:1:186
-1315:1:196
-1316:1:197
-1317:1:207
-1318:1:208
-1319:0:2227
-1320:2:1895
-1321:2:1899
-1322:2:1900
-1323:2:1907
-1324:2:1911
-1325:2:1912
-1326:2:1919
-1327:2:1923
-1328:2:1924
-1329:2:1931
-1330:2:1932
-1331:2:1949
-1332:2:1950
-1333:2:1953
-1334:2:1954
-1335:0:2227
-1336:2:1821
-1337:0:2227
-1338:2:1822
-1339:0:2227
-1340:2:1823
-1341:2:1827
-1342:2:1828
-1343:2:1835
-1344:2:1839
-1345:2:1840
-1346:2:1847
-1347:2:1851
-1348:2:1852
-1349:2:1859
-1350:2:1860
-1351:2:1877
-1352:2:1878
-1353:2:1881
-1354:2:1882
-1355:0:2227
-1356:2:1894
-1357:0:2227
-1358:1:220
-1359:0:2227
-1360:1:373
-1361:0:2227
-1362:1:374
-1363:0:2227
-1364:1:3
-1365:0:2227
-1366:2:1895
-1367:2:1899
-1368:2:1900
-1369:2:1907
-1370:2:1911
-1371:2:1912
-1372:2:1919
-1373:2:1923
-1374:2:1924
-1375:2:1931
-1376:2:1932
-1377:2:1949
-1378:2:1950
-1379:2:1953
-1380:2:1954
-1381:0:2227
-1382:2:1821
-1383:0:2227
-1384:2:1822
-1385:0:2227
-1386:2:1823
-1387:2:1827
-1388:2:1828
-1389:2:1835
-1390:2:1839
-1391:2:1840
-1392:2:1847
-1393:2:1851
-1394:2:1852
-1395:2:1859
-1396:2:1860
-1397:2:1877
-1398:2:1878
-1399:2:1881
-1400:2:1882
-1401:0:2227
-1402:2:1894
-1403:0:2227
-1404:1:4
-1405:1:8
-1406:1:9
-1407:1:16
-1408:1:17
-1409:1:28
-1410:1:32
-1411:1:33
-1412:1:40
-1413:1:41
-1414:1:51
-1415:1:52
-1416:1:62
-1417:1:63
-1418:0:2227
-1419:2:1895
-1420:2:1899
-1421:2:1900
-1422:2:1907
-1423:2:1911
-1424:2:1912
-1425:2:1919
-1426:2:1923
-1427:2:1924
-1428:2:1931
-1429:2:1932
-1430:2:1949
-1431:2:1950
-1432:2:1953
-1433:2:1954
-1434:0:2227
-1435:2:1821
-1436:0:2227
-1437:2:1822
--1:-1:-1
-1438:0:2227
-1439:2:1823
-1440:2:1827
-1441:2:1828
-1442:2:1835
-1443:2:1839
-1444:2:1840
-1445:2:1847
-1446:2:1851
-1447:2:1852
-1448:2:1859
-1449:2:1860
-1450:2:1877
-1451:2:1878
-1452:2:1881
-1453:2:1882
-1454:0:2227
-1455:2:1894
-1456:0:2227
-1457:1:75
-1458:0:2227
-1459:2:1895
-1460:2:1899
-1461:2:1900
-1462:2:1907
-1463:2:1911
-1464:2:1912
-1465:2:1919
-1466:2:1923
-1467:2:1924
-1468:2:1931
-1469:2:1932
-1470:2:1949
-1471:2:1950
-1472:2:1953
-1473:2:1954
-1474:0:2227
-1475:2:1821
-1476:0:2227
-1477:2:1822
-1478:0:2227
-1479:2:1823
-1480:2:1827
-1481:2:1828
-1482:2:1835
-1483:2:1839
-1484:2:1840
-1485:2:1847
-1486:2:1851
-1487:2:1852
-1488:2:1859
-1489:2:1860
-1490:2:1877
-1491:2:1878
-1492:2:1881
-1493:2:1882
-1494:0:2227
-1495:2:1894
-1496:0:2227
-1497:1:76
-1498:1:80
-1499:1:81
-1500:1:88
-1501:1:92
-1502:1:93
-1503:1:100
-1504:1:104
-1505:1:105
-1506:1:112
-1507:1:113
-1508:1:123
-1509:1:124
-1510:1:134
-1511:1:135
-1512:0:2227
-1513:1:223
-1514:0:2227
-1515:2:1895
-1516:2:1899
-1517:2:1900
-1518:2:1907
-1519:2:1911
-1520:2:1912
-1521:2:1919
-1522:2:1923
-1523:2:1924
-1524:2:1931
-1525:2:1932
-1526:2:1949
-1527:2:1950
-1528:2:1953
-1529:2:1954
-1530:0:2227
-1531:2:1821
-1532:0:2227
-1533:2:1822
-1534:0:2227
-1535:2:1823
-1536:2:1827
-1537:2:1828
-1538:2:1835
-1539:2:1839
-1540:2:1840
-1541:2:1847
-1542:2:1851
-1543:2:1852
-1544:2:1859
-1545:2:1860
-1546:2:1877
-1547:2:1878
-1548:2:1881
-1549:2:1882
-1550:0:2227
-1551:2:1894
-1552:0:2227
-1553:1:224
-1554:0:2227
-1555:1:373
-1556:0:2227
-1557:1:374
-1558:0:2227
-1559:1:379
-1560:0:2227
-1561:2:1895
-1562:2:1899
-1563:2:1900
-1564:2:1907
-1565:2:1911
-1566:2:1912
-1567:2:1919
-1568:2:1923
-1569:2:1924
-1570:2:1931
-1571:2:1932
-1572:2:1949
-1573:2:1950
-1574:2:1953
-1575:2:1954
-1576:0:2227
-1577:2:1821
-1578:0:2227
-1579:2:1822
-1580:0:2227
-1581:2:1823
-1582:2:1827
-1583:2:1828
-1584:2:1835
-1585:2:1839
-1586:2:1840
-1587:2:1847
-1588:2:1851
-1589:2:1852
-1590:2:1859
-1591:2:1860
-1592:2:1877
-1593:2:1878
-1594:2:1881
-1595:2:1882
-1596:0:2227
-1597:2:1894
-1598:0:2227
-1599:1:384
-1600:1:388
-1601:1:389
-1602:1:396
-1603:1:397
-1604:1:408
-1605:1:412
-1606:1:413
-1607:1:420
-1608:1:421
-1609:1:431
-1610:1:432
-1611:1:442
-1612:1:443
-1613:0:2227
-1614:2:1895
-1615:2:1899
-1616:2:1900
-1617:2:1907
-1618:2:1911
-1619:2:1912
-1620:2:1919
-1621:2:1923
-1622:2:1924
-1623:2:1931
-1624:2:1932
-1625:2:1949
-1626:2:1950
-1627:2:1953
-1628:2:1954
-1629:0:2227
-1630:2:1821
-1631:0:2227
-1632:2:1822
-1633:0:2227
-1634:2:1823
-1635:2:1827
-1636:2:1828
-1637:2:1835
-1638:2:1839
-1639:2:1840
-1640:2:1847
-1641:2:1851
-1642:2:1852
-1643:2:1859
-1644:2:1860
-1645:2:1877
-1646:2:1878
-1647:2:1881
-1648:2:1882
-1649:0:2227
-1650:2:1894
-1651:0:2227
-1652:1:455
-1653:0:2227
-1654:2:1895
-1655:2:1899
-1656:2:1900
-1657:2:1907
-1658:2:1911
-1659:2:1912
-1660:2:1919
-1661:2:1923
-1662:2:1924
-1663:2:1931
-1664:2:1932
-1665:2:1949
-1666:2:1950
-1667:2:1953
-1668:2:1954
-1669:0:2227
-1670:2:1821
-1671:0:2227
-1672:2:1822
-1673:0:2227
-1674:2:1823
-1675:2:1827
-1676:2:1828
-1677:2:1835
-1678:2:1839
-1679:2:1840
-1680:2:1847
-1681:2:1851
-1682:2:1852
-1683:2:1859
-1684:2:1860
-1685:2:1877
-1686:2:1878
-1687:2:1881
-1688:2:1882
-1689:0:2227
-1690:2:1894
-1691:0:2227
-1692:1:456
-1693:1:460
-1694:1:461
-1695:1:468
-1696:1:472
-1697:1:473
-1698:1:480
-1699:1:484
-1700:1:485
-1701:1:492
-1702:1:493
-1703:1:503
-1704:1:504
-1705:1:514
-1706:1:515
-1707:0:2227
-1708:2:1895
-1709:2:1899
-1710:2:1900
-1711:2:1907
-1712:2:1911
-1713:2:1912
-1714:2:1919
-1715:2:1923
-1716:2:1924
-1717:2:1931
-1718:2:1932
-1719:2:1949
-1720:2:1950
-1721:2:1953
-1722:2:1954
-1723:0:2227
-1724:2:1821
-1725:0:2227
-1726:2:1822
-1727:0:2227
-1728:2:1823
-1729:2:1827
-1730:2:1828
-1731:2:1835
-1732:2:1839
-1733:2:1840
-1734:2:1847
-1735:2:1851
-1736:2:1852
-1737:2:1859
-1738:2:1860
-1739:2:1877
-1740:2:1878
-1741:2:1881
-1742:2:1882
-1743:0:2227
-1744:2:1894
-1745:0:2227
-1746:1:527
-1747:0:2227
-1748:2:1895
-1749:2:1899
-1750:2:1900
-1751:2:1907
-1752:2:1911
-1753:2:1912
-1754:2:1919
-1755:2:1923
-1756:2:1924
-1757:2:1931
-1758:2:1932
-1759:2:1949
-1760:2:1950
-1761:2:1953
-1762:2:1954
-1763:0:2227
-1764:2:1821
-1765:0:2227
-1766:2:1822
-1767:0:2227
-1768:2:1823
-1769:2:1827
-1770:2:1828
-1771:2:1835
-1772:2:1839
-1773:2:1840
-1774:2:1847
-1775:2:1851
-1776:2:1852
-1777:2:1859
-1778:2:1860
-1779:2:1877
-1780:2:1878
-1781:2:1881
-1782:2:1882
-1783:0:2227
-1784:2:1894
-1785:0:2227
-1786:1:528
-1787:1:532
-1788:1:533
-1789:1:540
-1790:1:544
-1791:1:545
-1792:1:552
-1793:1:556
-1794:1:557
-1795:1:564
-1796:1:565
-1797:1:575
-1798:1:576
-1799:1:586
-1800:1:587
-1801:0:2227
-1802:2:1895
-1803:2:1899
-1804:2:1900
-1805:2:1907
-1806:2:1911
-1807:2:1912
-1808:2:1919
-1809:2:1923
-1810:2:1924
-1811:2:1931
-1812:2:1932
-1813:2:1949
-1814:2:1950
-1815:2:1953
-1816:2:1954
-1817:0:2227
-1818:2:1821
-1819:0:2227
-1820:2:1822
-1821:0:2227
-1822:2:1823
-1823:2:1827
-1824:2:1828
-1825:2:1835
-1826:2:1839
-1827:2:1840
-1828:2:1847
-1829:2:1851
-1830:2:1852
-1831:2:1859
-1832:2:1860
-1833:2:1877
-1834:2:1878
-1835:2:1881
-1836:2:1882
-1837:0:2227
-1838:2:1894
-1839:0:2227
-1840:1:599
-1841:0:2227
-1842:1:600
-1843:0:2227
-1844:1:601
-1845:0:2227
-1846:1:746
-1847:0:2227
-1848:1:747
-1849:0:2227
-1850:2:1895
-1851:2:1899
-1852:2:1900
-1853:2:1907
-1854:2:1911
-1855:2:1912
-1856:2:1919
-1857:2:1923
-1858:2:1924
-1859:2:1931
-1860:2:1932
-1861:2:1949
-1862:2:1950
-1863:2:1953
-1864:2:1954
-1865:0:2227
-1866:2:1821
-1867:0:2227
-1868:2:1822
-1869:0:2227
-1870:2:1823
-1871:2:1827
-1872:2:1828
-1873:2:1835
-1874:2:1839
-1875:2:1840
-1876:2:1847
-1877:2:1851
-1878:2:1852
-1879:2:1859
-1880:2:1860
-1881:2:1877
-1882:2:1878
-1883:2:1881
-1884:2:1882
-1885:0:2227
-1886:2:1894
-1887:0:2227
-1888:1:751
-1889:0:2227
-1890:2:1895
-1891:2:1899
-1892:2:1900
-1893:2:1907
-1894:2:1911
-1895:2:1912
-1896:2:1919
-1897:2:1923
-1898:2:1924
-1899:2:1931
-1900:2:1932
-1901:2:1949
-1902:2:1950
-1903:2:1953
-1904:2:1954
-1905:0:2227
-1906:2:1821
-1907:0:2227
-1908:2:1822
-1909:0:2227
-1910:2:1823
-1911:2:1827
-1912:2:1828
-1913:2:1835
-1914:2:1839
-1915:2:1840
-1916:2:1847
-1917:2:1851
-1918:2:1852
-1919:2:1859
-1920:2:1860
-1921:2:1877
-1922:2:1878
-1923:2:1881
-1924:2:1882
-1925:0:2227
-1926:2:1894
-1927:0:2227
-1928:1:752
-1929:1:756
-1930:1:757
-1931:1:764
-1932:1:768
-1933:1:769
-1934:1:776
-1935:1:780
-1936:1:781
-1937:1:788
-1938:1:789
-1939:1:799
-1940:1:800
-1941:1:810
-1942:1:811
-1943:0:2227
-1944:2:1895
-1945:2:1899
-1946:2:1900
-1947:2:1907
-1948:2:1911
-1949:2:1912
-1950:2:1919
-1951:2:1923
-1952:2:1924
-1953:2:1931
-1954:2:1932
-1955:2:1949
-1956:2:1950
-1957:2:1953
-1958:2:1954
-1959:0:2227
-1960:2:1821
-1961:0:2227
-1962:2:1822
-1963:0:2227
-1964:2:1823
-1965:2:1827
-1966:2:1828
-1967:2:1835
-1968:2:1839
-1969:2:1840
-1970:2:1847
-1971:2:1851
-1972:2:1852
-1973:2:1859
-1974:2:1860
-1975:2:1877
-1976:2:1878
-1977:2:1881
-1978:2:1882
-1979:0:2227
-1980:2:1894
-1981:0:2227
-1982:1:823
-1983:0:2227
-1984:1:601
-1985:0:2227
-1986:1:746
-1987:0:2227
-1988:1:747
-1989:0:2227
-1990:2:1895
-1991:2:1899
-1992:2:1900
-1993:2:1907
-1994:2:1911
-1995:2:1912
-1996:2:1919
-1997:2:1923
-1998:2:1924
-1999:2:1931
-2000:2:1932
-2001:2:1949
-2002:2:1950
-2003:2:1953
-2004:2:1954
-2005:0:2227
-2006:2:1821
-2007:0:2227
-2008:2:1822
-2009:0:2227
-2010:2:1823
-2011:2:1827
-2012:2:1828
-2013:2:1835
-2014:2:1839
-2015:2:1840
-2016:2:1847
-2017:2:1851
-2018:2:1852
-2019:2:1859
-2020:2:1860
-2021:2:1877
-2022:2:1878
-2023:2:1881
-2024:2:1882
-2025:0:2227
-2026:2:1894
-2027:0:2227
-2028:1:751
-2029:0:2227
-2030:2:1895
-2031:2:1899
-2032:2:1900
-2033:2:1907
-2034:2:1911
-2035:2:1912
-2036:2:1919
-2037:2:1923
-2038:2:1924
-2039:2:1931
-2040:2:1932
-2041:2:1949
-2042:2:1950
-2043:2:1953
-2044:2:1954
-2045:0:2227
-2046:2:1821
-2047:0:2227
-2048:2:1822
-2049:0:2227
-2050:2:1823
-2051:2:1827
-2052:2:1828
-2053:2:1835
-2054:2:1839
-2055:2:1840
-2056:2:1847
-2057:2:1851
-2058:2:1852
-2059:2:1859
-2060:2:1860
-2061:2:1877
-2062:2:1878
-2063:2:1881
-2064:2:1882
-2065:0:2227
-2066:2:1894
-2067:0:2227
-2068:1:752
-2069:1:756
-2070:1:757
-2071:1:764
-2072:1:765
-2073:1:776
-2074:1:780
-2075:1:781
-2076:1:788
-2077:1:789
-2078:1:799
-2079:1:800
-2080:1:810
-2081:1:811
-2082:0:2227
-2083:2:1895
-2084:2:1899
-2085:2:1900
-2086:2:1907
-2087:2:1911
-2088:2:1912
-2089:2:1919
-2090:2:1923
-2091:2:1924
-2092:2:1931
-2093:2:1932
-2094:2:1949
-2095:2:1950
-2096:2:1953
-2097:2:1954
-2098:0:2227
-2099:2:1821
-2100:0:2227
-2101:2:1822
-2102:0:2227
-2103:2:1823
-2104:2:1827
-2105:2:1828
-2106:2:1835
-2107:2:1839
-2108:2:1840
-2109:2:1847
-2110:2:1851
-2111:2:1852
-2112:2:1859
-2113:2:1860
-2114:2:1877
-2115:2:1878
-2116:2:1881
-2117:2:1882
-2118:0:2227
-2119:2:1894
-2120:0:2227
-2121:1:823
-2122:0:2227
-2123:1:827
-2124:0:2227
-2125:2:1895
-2126:2:1899
-2127:2:1900
-2128:2:1907
-2129:2:1911
-2130:2:1912
-2131:2:1919
-2132:2:1923
-2133:2:1924
-2134:2:1931
-2135:2:1932
-2136:2:1949
-2137:2:1950
-2138:2:1953
-2139:2:1954
-2140:0:2227
-2141:2:1821
-2142:0:2227
-2143:2:1822
-2144:0:2227
-2145:2:1823
-2146:2:1827
-2147:2:1828
-2148:2:1835
-2149:2:1839
-2150:2:1840
-2151:2:1847
-2152:2:1851
-2153:2:1852
-2154:2:1859
-2155:2:1860
-2156:2:1877
-2157:2:1878
-2158:2:1881
-2159:2:1882
-2160:0:2227
-2161:2:1894
-2162:0:2227
-2163:1:832
-2164:1:836
-2165:1:837
-2166:1:844
-2167:1:845
-2168:1:856
-2169:1:860
-2170:1:861
-2171:1:868
-2172:1:869
-2173:1:879
-2174:1:880
-2175:1:890
-2176:1:891
-2177:0:2227
-2178:1:1
-2179:0:2227
-2180:1:2
-2181:0:2227
-2182:1:3
-2183:0:2227
-2184:2:1895
-2185:2:1899
-2186:2:1900
-2187:2:1907
-2188:2:1911
-2189:2:1912
-2190:2:1919
-2191:2:1923
-2192:2:1924
-2193:2:1931
-2194:2:1932
-2195:2:1949
-2196:2:1950
-2197:2:1953
-2198:2:1954
-2199:0:2227
-2200:2:1821
-2201:0:2227
-2202:2:1822
-2203:0:2227
-2204:2:1823
-2205:2:1827
-2206:2:1828
-2207:2:1835
-2208:2:1839
-2209:2:1840
-2210:2:1847
-2211:2:1851
-2212:2:1852
-2213:2:1859
-2214:2:1860
-2215:2:1877
-2216:2:1878
-2217:2:1881
-2218:2:1882
-2219:0:2227
-2220:2:1894
-2221:0:2227
-2222:1:4
-2223:1:8
-2224:1:9
-2225:1:16
-2226:1:20
-2227:1:21
-2228:1:28
-2229:1:32
-2230:1:33
-2231:1:40
-2232:1:41
-2233:1:51
-2234:1:52
-2235:1:62
-2236:1:63
-2237:0:2227
-2238:2:1895
-2239:2:1899
-2240:2:1900
-2241:2:1907
-2242:2:1911
-2243:2:1912
-2244:2:1919
-2245:2:1923
-2246:2:1924
-2247:2:1931
-2248:2:1932
-2249:2:1949
-2250:2:1950
-2251:2:1953
-2252:2:1954
-2253:0:2227
-2254:2:1821
-2255:0:2227
-2256:2:1822
-2257:0:2227
-2258:2:1823
-2259:2:1827
-2260:2:1828
-2261:2:1835
-2262:2:1839
-2263:2:1840
-2264:2:1847
-2265:2:1851
-2266:2:1852
-2267:2:1859
-2268:2:1860
-2269:2:1877
-2270:2:1878
-2271:2:1881
-2272:2:1882
-2273:0:2227
-2274:2:1894
-2275:0:2227
-2276:1:75
-2277:0:2227
-2278:2:1895
-2279:2:1899
-2280:2:1900
-2281:2:1907
-2282:2:1911
-2283:2:1912
-2284:2:1919
-2285:2:1923
-2286:2:1924
-2287:2:1931
-2288:2:1932
-2289:2:1949
-2290:2:1950
-2291:2:1953
-2292:2:1954
-2293:0:2227
-2294:2:1821
-2295:0:2227
-2296:2:1822
-2297:0:2227
-2298:2:1823
-2299:2:1827
-2300:2:1828
-2301:2:1835
-2302:2:1839
-2303:2:1840
-2304:2:1847
-2305:2:1851
-2306:2:1852
-2307:2:1859
-2308:2:1860
-2309:2:1877
-2310:2:1878
-2311:2:1881
-2312:2:1882
-2313:0:2227
-2314:2:1894
-2315:0:2227
-2316:1:76
-2317:1:80
-2318:1:81
-2319:1:88
-2320:1:92
-2321:1:93
-2322:1:100
-2323:1:104
-2324:1:105
-2325:1:112
-2326:1:113
-2327:1:123
-2328:1:124
-2329:1:134
-2330:1:135
-2331:0:2227
-2332:1:147
-2333:0:2227
-2334:2:1895
-2335:2:1899
-2336:2:1900
-2337:2:1907
-2338:2:1911
-2339:2:1912
-2340:2:1919
-2341:2:1923
-2342:2:1924
-2343:2:1931
-2344:2:1932
-2345:2:1949
-2346:2:1950
-2347:2:1953
-2348:2:1954
-2349:0:2227
-2350:2:1821
-2351:0:2227
-2352:2:1822
-2353:0:2227
-2354:2:1823
-2355:2:1827
-2356:2:1828
-2357:2:1835
-2358:2:1839
-2359:2:1840
-2360:2:1847
-2361:2:1851
-2362:2:1852
-2363:2:1859
-2364:2:1860
-2365:2:1877
-2366:2:1878
-2367:2:1881
-2368:2:1882
-2369:0:2227
-2370:2:1894
-2371:0:2227
-2372:1:148
-2373:0:2227
-2374:2:1895
-2375:2:1899
-2376:2:1900
-2377:2:1907
-2378:2:1911
-2379:2:1912
-2380:2:1919
-2381:2:1923
-2382:2:1924
-2383:2:1931
-2384:2:1932
-2385:2:1949
-2386:2:1950
-2387:2:1953
-2388:2:1954
-2389:0:2227
-2390:2:1821
-2391:0:2227
-2392:2:1822
-2393:0:2227
-2394:2:1823
-2395:2:1827
-2396:2:1828
-2397:2:1835
-2398:2:1839
-2399:2:1840
-2400:2:1847
-2401:2:1851
-2402:2:1852
-2403:2:1859
-2404:2:1860
-2405:2:1877
-2406:2:1878
-2407:2:1881
-2408:2:1882
-2409:0:2227
-2410:2:1894
-2411:0:2227
-2412:1:149
-2413:1:153
-2414:1:154
-2415:1:161
-2416:1:165
-2417:1:166
-2418:1:173
-2419:1:177
-2420:1:178
-2421:1:185
-2422:1:186
-2423:1:196
-2424:1:197
-2425:1:207
-2426:1:208
-2427:0:2227
-2428:2:1895
-2429:2:1899
-2430:2:1900
-2431:2:1907
-2432:2:1911
-2433:2:1912
-2434:2:1919
-2435:2:1923
-2436:2:1924
-2437:2:1931
-2438:2:1932
-2439:2:1949
-2440:2:1950
-2441:2:1953
-2442:2:1954
-2443:0:2227
-2444:2:1821
-2445:0:2227
-2446:2:1822
-2447:0:2227
-2448:2:1823
-2449:2:1827
-2450:2:1828
-2451:2:1835
-2452:2:1839
-2453:2:1840
-2454:2:1847
-2455:2:1851
-2456:2:1852
-2457:2:1859
-2458:2:1860
-2459:2:1877
-2460:2:1878
-2461:2:1881
-2462:2:1882
-2463:0:2227
-2464:2:1894
-2465:0:2227
-2466:1:220
-2467:0:2227
-2468:1:373
-2469:0:2227
-2470:1:374
-2471:0:2227
-2472:1:3
-2473:0:2227
-2474:2:1895
-2475:2:1899
-2476:2:1900
-2477:2:1907
-2478:2:1911
-2479:2:1912
-2480:2:1919
-2481:2:1923
-2482:2:1924
-2483:2:1931
-2484:2:1932
-2485:2:1949
-2486:2:1950
-2487:2:1953
-2488:2:1954
-2489:0:2227
-2490:2:1821
-2491:0:2227
-2492:2:1822
-2493:0:2227
-2494:2:1823
-2495:2:1827
-2496:2:1828
-2497:2:1835
-2498:2:1839
-2499:2:1840
-2500:2:1847
-2501:2:1851
-2502:2:1852
-2503:2:1859
-2504:2:1860
-2505:2:1877
-2506:2:1878
-2507:2:1881
-2508:2:1882
-2509:0:2227
-2510:2:1894
-2511:0:2227
-2512:1:4
-2513:1:8
-2514:1:9
-2515:1:24
-2516:1:25
-2517:1:28
-2518:1:32
-2519:1:33
-2520:1:40
-2521:1:41
-2522:1:51
-2523:1:54
-2524:1:55
-2525:1:62
-2526:1:63
-2527:0:2227
-2528:2:1895
-2529:2:1899
-2530:2:1900
-2531:2:1907
-2532:2:1911
-2533:2:1912
-2534:2:1919
-2535:2:1923
-2536:2:1924
-2537:2:1931
-2538:2:1932
-2539:2:1949
-2540:2:1950
-2541:2:1953
-2542:2:1954
-2543:0:2227
-2544:2:1821
-2545:0:2227
-2546:2:1822
-2547:0:2227
-2548:2:1823
-2549:2:1827
-2550:2:1828
-2551:2:1835
-2552:2:1839
-2553:2:1840
-2554:2:1847
-2555:2:1851
-2556:2:1852
-2557:2:1859
-2558:2:1860
-2559:2:1877
-2560:2:1878
-2561:2:1881
-2562:2:1882
-2563:0:2227
-2564:2:1894
-2565:0:2227
-2566:1:75
-2567:0:2227
-2568:2:1895
-2569:2:1899
-2570:2:1900
-2571:2:1907
-2572:2:1911
-2573:2:1912
-2574:2:1919
-2575:2:1923
-2576:2:1924
-2577:2:1931
-2578:2:1932
-2579:2:1949
-2580:2:1950
-2581:2:1953
-2582:2:1954
-2583:0:2227
-2584:2:1821
-2585:0:2227
-2586:2:1822
-2587:0:2227
-2588:2:1823
-2589:2:1827
-2590:2:1828
-2591:2:1835
-2592:2:1839
-2593:2:1840
-2594:2:1847
-2595:2:1851
-2596:2:1852
-2597:2:1859
-2598:2:1860
-2599:2:1877
-2600:2:1878
-2601:2:1881
-2602:2:1882
-2603:0:2227
-2604:2:1894
-2605:0:2227
-2606:1:76
-2607:1:80
-2608:1:81
-2609:1:96
-2610:1:97
-2611:1:100
-2612:1:104
-2613:1:105
-2614:1:112
-2615:1:113
-2616:1:123
-2617:1:126
-2618:1:127
-2619:1:134
-2620:1:135
-2621:0:2227
-2622:1:223
-2623:0:2227
-2624:2:1895
-2625:2:1899
-2626:2:1900
-2627:2:1907
-2628:2:1911
-2629:2:1912
-2630:2:1919
-2631:2:1923
-2632:2:1924
-2633:2:1931
-2634:2:1932
-2635:2:1949
-2636:2:1950
-2637:2:1953
-2638:2:1954
-2639:0:2227
-2640:2:1821
-2641:0:2227
-2642:2:1822
-2643:0:2227
-2644:2:1823
-2645:2:1827
-2646:2:1828
-2647:2:1835
-2648:2:1839
-2649:2:1840
-2650:2:1847
-2651:2:1851
-2652:2:1852
-2653:2:1859
-2654:2:1860
-2655:2:1877
-2656:2:1878
-2657:2:1881
-2658:2:1882
-2659:0:2227
-2660:2:1894
-2661:0:2227
-2662:1:224
-2663:0:2227
-2664:1:373
-2665:0:2227
-2666:1:374
-2667:0:2227
-2668:1:379
-2669:0:2227
-2670:2:1895
-2671:2:1899
-2672:2:1900
-2673:2:1907
-2674:2:1911
-2675:2:1912
-2676:2:1919
-2677:2:1923
-2678:2:1924
-2679:2:1931
-2680:2:1932
-2681:2:1949
-2682:2:1950
-2683:2:1953
-2684:2:1954
-2685:0:2227
-2686:2:1821
-2687:0:2227
-2688:2:1822
-2689:0:2227
-2690:2:1823
-2691:2:1827
-2692:2:1828
-2693:2:1835
-2694:2:1839
-2695:2:1840
-2696:2:1847
-2697:2:1851
-2698:2:1852
-2699:2:1859
-2700:2:1860
-2701:2:1877
-2702:2:1878
-2703:2:1881
-2704:2:1882
-2705:0:2227
-2706:2:1894
-2707:0:2227
-2708:1:384
-2709:1:388
-2710:1:389
-2711:1:404
-2712:1:405
-2713:1:408
-2714:1:412
-2715:1:413
-2716:1:420
-2717:1:421
-2718:1:431
-2719:1:434
-2720:1:435
-2721:1:442
-2722:1:443
-2723:0:2227
-2724:2:1895
-2725:2:1899
-2726:2:1900
-2727:2:1907
-2728:2:1911
-2729:2:1912
-2730:2:1919
-2731:2:1923
-2732:2:1924
-2733:2:1931
-2734:2:1932
-2735:2:1949
-2736:2:1950
-2737:2:1953
-2738:2:1954
-2739:0:2227
-2740:2:1821
-2741:0:2227
-2742:2:1822
-2743:0:2227
-2744:2:1823
-2745:2:1827
-2746:2:1828
-2747:2:1835
-2748:2:1839
-2749:2:1840
-2750:2:1847
-2751:2:1851
-2752:2:1852
-2753:2:1859
-2754:2:1860
-2755:2:1877
-2756:2:1878
-2757:2:1881
-2758:2:1882
-2759:0:2227
-2760:2:1894
-2761:0:2227
-2762:1:455
-2763:0:2227
-2764:2:1895
-2765:2:1899
-2766:2:1900
-2767:2:1907
-2768:2:1911
-2769:2:1912
-2770:2:1919
-2771:2:1923
-2772:2:1924
-2773:2:1931
-2774:2:1932
-2775:2:1949
-2776:2:1950
-2777:2:1953
-2778:2:1954
-2779:0:2227
-2780:2:1821
-2781:0:2227
-2782:2:1822
-2783:0:2227
-2784:2:1823
-2785:2:1827
-2786:2:1828
-2787:2:1835
-2788:2:1839
-2789:2:1840
-2790:2:1847
-2791:2:1851
-2792:2:1852
-2793:2:1859
-2794:2:1860
-2795:2:1877
-2796:2:1878
-2797:2:1881
-2798:2:1882
-2799:0:2227
-2800:2:1894
-2801:0:2227
-2802:1:456
-2803:1:460
-2804:1:461
-2805:1:476
-2806:1:477
-2807:1:480
-2808:1:484
-2809:1:485
-2810:1:492
-2811:1:493
-2812:1:503
-2813:1:506
-2814:1:507
-2815:1:514
-2816:1:515
-2817:0:2227
-2818:2:1895
-2819:2:1899
-2820:2:1900
-2821:2:1907
-2822:2:1911
-2823:2:1912
-2824:2:1919
-2825:2:1923
-2826:2:1924
-2827:2:1931
-2828:2:1932
-2829:2:1949
-2830:2:1950
-2831:2:1953
-2832:2:1954
-2833:0:2227
-2834:2:1821
-2835:0:2227
-2836:2:1822
-2837:0:2227
-2838:2:1823
-2839:2:1827
-2840:2:1828
-2841:2:1835
-2842:2:1839
-2843:2:1840
-2844:2:1847
-2845:2:1851
-2846:2:1852
-2847:2:1859
-2848:2:1860
-2849:2:1877
-2850:2:1878
-2851:2:1881
-2852:2:1882
-2853:0:2227
-2854:2:1894
-2855:0:2227
-2856:1:527
-2857:0:2227
-2858:2:1895
-2859:2:1899
-2860:2:1900
-2861:2:1907
-2862:2:1911
-2863:2:1912
-2864:2:1919
-2865:2:1923
-2866:2:1924
-2867:2:1931
-2868:2:1932
-2869:2:1949
-2870:2:1950
-2871:2:1953
-2872:2:1954
-2873:0:2227
-2874:2:1821
-2875:0:2227
-2876:2:1822
-2877:0:2227
-2878:2:1823
-2879:2:1827
-2880:2:1828
-2881:2:1835
-2882:2:1839
-2883:2:1840
-2884:2:1847
-2885:2:1851
-2886:2:1852
-2887:2:1859
-2888:2:1860
-2889:2:1877
-2890:2:1878
-2891:2:1881
-2892:2:1882
-2893:0:2227
-2894:2:1894
-2895:0:2227
-2896:1:528
-2897:1:532
-2898:1:533
-2899:1:548
-2900:1:549
-2901:1:552
-2902:1:556
-2903:1:557
-2904:1:564
-2905:1:565
-2906:1:575
-2907:1:578
-2908:1:579
-2909:1:586
-2910:1:587
-2911:0:2227
-2912:2:1895
-2913:2:1899
-2914:2:1900
-2915:2:1907
-2916:2:1911
-2917:2:1912
-2918:2:1919
-2919:2:1923
-2920:2:1924
-2921:2:1931
-2922:2:1932
-2923:2:1949
-2924:2:1950
-2925:2:1953
-2926:2:1954
-2927:0:2227
-2928:2:1821
-2929:0:2227
-2930:2:1822
-2931:0:2227
-2932:2:1823
-2933:2:1827
-2934:2:1828
-2935:2:1835
-2936:2:1839
-2937:2:1840
-2938:2:1847
-2939:2:1851
-2940:2:1852
-2941:2:1859
-2942:2:1860
-2943:2:1877
-2944:2:1878
-2945:2:1881
-2946:2:1882
-2947:0:2227
-2948:2:1894
-2949:0:2227
-2950:1:599
-2951:0:2227
-2952:1:600
-2953:0:2227
-2954:1:601
-2955:0:2227
-2956:1:746
-2957:0:2227
-2958:1:747
-2959:0:2227
-2960:2:1895
-2961:2:1899
-2962:2:1900
-2963:2:1907
-2964:2:1911
-2965:2:1912
-2966:2:1919
-2967:2:1923
-2968:2:1924
-2969:2:1931
-2970:2:1932
-2971:2:1949
-2972:2:1950
-2973:2:1953
-2974:2:1954
-2975:0:2227
-2976:2:1821
-2977:0:2227
-2978:2:1822
-2979:0:2227
-2980:2:1823
-2981:2:1827
-2982:2:1828
-2983:2:1835
-2984:2:1839
-2985:2:1840
-2986:2:1847
-2987:2:1851
-2988:2:1852
-2989:2:1859
-2990:2:1860
-2991:2:1877
-2992:2:1878
-2993:2:1881
-2994:2:1882
-2995:0:2227
-2996:2:1894
-2997:0:2227
-2998:1:751
-2999:0:2227
-3000:2:1895
-3001:2:1899
-3002:2:1900
-3003:2:1907
-3004:2:1911
-3005:2:1912
-3006:2:1919
-3007:2:1923
-3008:2:1924
-3009:2:1931
-3010:2:1932
-3011:2:1949
-3012:2:1950
-3013:2:1953
-3014:2:1954
-3015:0:2227
-3016:2:1821
-3017:0:2227
-3018:2:1822
-3019:0:2227
-3020:2:1823
-3021:2:1827
-3022:2:1828
-3023:2:1835
-3024:2:1839
-3025:2:1840
-3026:2:1847
-3027:2:1851
-3028:2:1852
-3029:2:1859
-3030:2:1860
-3031:2:1877
-3032:2:1878
-3033:2:1881
-3034:2:1882
-3035:0:2227
-3036:2:1894
-3037:0:2227
-3038:1:752
-3039:1:756
-3040:1:757
-3041:1:772
-3042:1:773
-3043:1:776
-3044:1:780
-3045:1:781
-3046:1:788
-3047:1:789
-3048:1:799
-3049:1:802
-3050:1:803
-3051:1:810
-3052:1:811
-3053:0:2227
-3054:2:1895
-3055:2:1899
-3056:2:1900
-3057:2:1907
-3058:2:1911
-3059:2:1912
-3060:2:1919
-3061:2:1923
-3062:2:1924
-3063:2:1931
-3064:2:1932
-3065:2:1949
-3066:2:1950
-3067:2:1953
-3068:2:1954
-3069:0:2227
-3070:2:1821
-3071:0:2227
-3072:2:1822
-3073:0:2227
-3074:2:1823
-3075:2:1827
-3076:2:1828
-3077:2:1835
-3078:2:1839
-3079:2:1840
-3080:2:1847
-3081:2:1851
-3082:2:1852
-3083:2:1859
-3084:2:1860
-3085:2:1877
-3086:2:1878
-3087:2:1881
-3088:2:1882
-3089:0:2227
-3090:2:1894
-3091:0:2227
-3092:1:823
-3093:0:2227
-3094:1:601
-3095:0:2227
-3096:1:746
-3097:0:2227
-3098:1:747
-3099:0:2227
-3100:2:1895
-3101:2:1899
-3102:2:1900
-3103:2:1907
-3104:2:1911
-3105:2:1912
-3106:2:1919
-3107:2:1923
-3108:2:1924
-3109:2:1931
-3110:2:1932
-3111:2:1949
-3112:2:1950
-3113:2:1953
-3114:2:1954
-3115:0:2227
-3116:2:1821
-3117:0:2227
-3118:2:1822
-3119:0:2227
-3120:2:1823
-3121:2:1827
-3122:2:1828
-3123:2:1835
-3124:2:1839
-3125:2:1840
-3126:2:1847
-3127:2:1851
-3128:2:1852
-3129:2:1859
-3130:2:1860
-3131:2:1877
-3132:2:1878
-3133:2:1881
-3134:2:1882
-3135:0:2227
-3136:2:1894
-3137:0:2227
-3138:1:751
-3139:0:2227
-3140:2:1895
-3141:2:1899
-3142:2:1900
-3143:2:1907
-3144:2:1911
-3145:2:1912
-3146:2:1919
-3147:2:1923
-3148:2:1924
-3149:2:1931
-3150:2:1932
-3151:2:1949
-3152:2:1950
-3153:2:1953
-3154:2:1954
-3155:0:2227
-3156:2:1821
-3157:0:2227
-3158:2:1822
-3159:0:2227
-3160:2:1823
-3161:2:1827
-3162:2:1828
-3163:2:1835
-3164:2:1839
-3165:2:1840
-3166:2:1847
-3167:2:1851
-3168:2:1852
-3169:2:1859
-3170:2:1860
-3171:2:1877
-3172:2:1878
-3173:2:1881
-3174:2:1882
-3175:0:2227
-3176:2:1894
-3177:0:2227
-3178:1:752
-3179:1:756
-3180:1:757
-3181:1:772
-3182:1:773
-3183:1:776
-3184:1:780
-3185:1:781
-3186:1:788
-3187:1:789
-3188:1:799
-3189:1:802
-3190:1:803
-3191:1:810
-3192:1:811
-3193:0:2227
-3194:2:1895
-3195:2:1899
-3196:2:1900
-3197:2:1907
-3198:2:1911
-3199:2:1912
-3200:2:1919
-3201:2:1923
-3202:2:1924
-3203:2:1931
-3204:2:1932
-3205:2:1949
-3206:2:1950
-3207:2:1953
-3208:2:1954
-3209:0:2227
-3210:2:1821
-3211:0:2227
-3212:2:1822
-3213:0:2227
-3214:2:1823
-3215:2:1827
-3216:2:1828
-3217:2:1835
-3218:2:1839
-3219:2:1840
-3220:2:1847
-3221:2:1851
-3222:2:1852
-3223:2:1859
-3224:2:1860
-3225:2:1877
-3226:2:1878
-3227:2:1881
-3228:2:1882
-3229:0:2227
-3230:2:1894
-3231:0:2227
-3232:1:823
-3233:0:2227
-3234:1:827
-3235:0:2227
-3236:2:1895
-3237:2:1899
-3238:2:1900
-3239:2:1907
-3240:2:1911
-3241:2:1912
-3242:2:1919
-3243:2:1923
-3244:2:1924
-3245:2:1931
-3246:2:1932
-3247:2:1949
-3248:2:1950
-3249:2:1953
-3250:2:1954
-3251:0:2227
-3252:2:1821
-3253:0:2227
-3254:2:1822
-3255:0:2227
-3256:2:1823
-3257:2:1827
-3258:2:1828
-3259:2:1835
-3260:2:1839
-3261:2:1840
-3262:2:1847
-3263:2:1851
-3264:2:1852
-3265:2:1859
-3266:2:1860
-3267:2:1877
-3268:2:1878
-3269:2:1881
-3270:2:1882
-3271:0:2227
-3272:2:1894
-3273:0:2227
-3274:1:832
-3275:1:836
-3276:1:837
-3277:1:852
-3278:1:853
-3279:1:856
-3280:1:860
-3281:1:861
-3282:1:868
-3283:1:869
-3284:1:879
-3285:1:882
-3286:1:883
-3287:1:890
-3288:1:891
-3289:0:2227
-3290:1:1
-3291:0:2227
-3292:1:2
-3293:0:2227
-3294:1:3
-3295:0:2227
-3296:2:1895
-3297:2:1899
-3298:2:1900
-3299:2:1907
-3300:2:1911
-3301:2:1912
-3302:2:1919
-3303:2:1923
-3304:2:1924
-3305:2:1931
-3306:2:1932
-3307:2:1949
-3308:2:1950
-3309:2:1953
-3310:2:1954
-3311:0:2227
-3312:2:1821
-3313:0:2227
-3314:2:1822
-3315:0:2227
-3316:2:1823
-3317:2:1827
-3318:2:1828
-3319:2:1835
-3320:2:1839
-3321:2:1840
-3322:2:1847
-3323:2:1851
-3324:2:1852
-3325:2:1859
-3326:2:1860
-3327:2:1877
-3328:2:1878
-3329:2:1881
-3330:2:1882
-3331:0:2227
-3332:2:1894
-3333:0:2227
-3334:1:4
-3335:1:8
-3336:1:9
-3337:1:24
-3338:1:25
-3339:1:28
-3340:1:32
-3341:1:33
-3342:1:40
-3343:1:41
-3344:1:51
-3345:1:54
-3346:1:55
-3347:1:62
-3348:1:63
-3349:0:2227
-3350:2:1895
-3351:2:1899
-3352:2:1900
-3353:2:1907
-3354:2:1911
-3355:2:1912
-3356:2:1919
-3357:2:1923
-3358:2:1924
-3359:2:1931
-3360:2:1932
-3361:2:1949
-3362:2:1950
-3363:2:1953
-3364:2:1954
-3365:0:2227
-3366:2:1821
-3367:0:2227
-3368:2:1822
-3369:0:2227
-3370:2:1823
-3371:2:1827
-3372:2:1828
-3373:2:1835
-3374:2:1839
-3375:2:1840
-3376:2:1847
-3377:2:1851
-3378:2:1852
-3379:2:1859
-3380:2:1860
-3381:2:1877
-3382:2:1878
-3383:2:1881
-3384:2:1882
-3385:0:2227
-3386:2:1894
-3387:0:2227
-3388:1:75
-3389:0:2227
-3390:2:1895
-3391:2:1899
-3392:2:1900
-3393:2:1907
-3394:2:1911
-3395:2:1912
-3396:2:1919
-3397:2:1923
-3398:2:1924
-3399:2:1931
-3400:2:1932
-3401:2:1949
-3402:2:1950
-3403:2:1953
-3404:2:1954
-3405:0:2227
-3406:2:1821
-3407:0:2227
-3408:2:1822
-3409:0:2227
-3410:2:1823
-3411:2:1827
-3412:2:1828
-3413:2:1835
-3414:2:1839
-3415:2:1840
-3416:2:1847
-3417:2:1851
-3418:2:1852
-3419:2:1859
-3420:2:1860
-3421:2:1877
-3422:2:1878
-3423:2:1881
-3424:2:1882
-3425:0:2227
-3426:2:1894
-3427:0:2227
-3428:1:76
-3429:1:80
-3430:1:81
-3431:1:96
-3432:1:97
-3433:1:100
-3434:1:104
-3435:1:105
-3436:1:112
-3437:1:113
-3438:1:123
-3439:1:126
-3440:1:127
-3441:1:134
-3442:1:135
-3443:0:2227
-3444:1:147
-3445:0:2227
-3446:2:1895
-3447:2:1899
-3448:2:1900
-3449:2:1907
-3450:2:1911
-3451:2:1912
-3452:2:1919
-3453:2:1923
-3454:2:1924
-3455:2:1931
-3456:2:1932
-3457:2:1949
-3458:2:1950
-3459:2:1953
-3460:2:1954
-3461:0:2227
-3462:2:1821
-3463:0:2227
-3464:2:1822
-3465:0:2227
-3466:2:1823
-3467:2:1827
-3468:2:1828
-3469:2:1835
-3470:2:1839
-3471:2:1840
-3472:2:1847
-3473:2:1851
-3474:2:1852
-3475:2:1859
-3476:2:1860
-3477:2:1877
-3478:2:1878
-3479:2:1881
-3480:2:1882
-3481:0:2227
-3482:2:1894
-3483:0:2227
-3484:1:148
-3485:0:2227
-3486:2:1895
-3487:2:1899
-3488:2:1900
-3489:2:1907
-3490:2:1911
-3491:2:1912
-3492:2:1919
-3493:2:1923
-3494:2:1924
-3495:2:1931
-3496:2:1932
-3497:2:1949
-3498:2:1950
-3499:2:1953
-3500:2:1954
-3501:0:2227
-3502:2:1821
-3503:0:2227
-3504:2:1822
-3505:0:2227
-3506:2:1823
-3507:2:1827
-3508:2:1828
-3509:2:1835
-3510:2:1839
-3511:2:1840
-3512:2:1847
-3513:2:1851
-3514:2:1852
-3515:2:1859
-3516:2:1860
-3517:2:1877
-3518:2:1878
-3519:2:1881
-3520:2:1882
-3521:0:2227
-3522:2:1894
-3523:0:2227
-3524:1:149
-3525:1:153
-3526:1:154
-3527:1:169
-3528:1:170
-3529:1:173
-3530:1:177
-3531:1:178
-3532:1:185
-3533:1:186
-3534:1:196
-3535:1:199
-3536:1:200
-3537:1:207
-3538:1:208
-3539:0:2227
-3540:2:1895
-3541:2:1899
-3542:2:1900
-3543:2:1907
-3544:2:1911
-3545:2:1912
-3546:2:1919
-3547:2:1923
-3548:2:1924
-3549:2:1931
-3550:2:1932
-3551:2:1949
-3552:2:1950
-3553:2:1953
-3554:2:1954
-3555:0:2227
-3556:2:1821
-3557:0:2227
-3558:2:1822
-3559:0:2227
-3560:2:1823
-3561:2:1827
-3562:2:1828
-3563:2:1835
-3564:2:1839
-3565:2:1840
-3566:2:1847
-3567:2:1851
-3568:2:1852
-3569:2:1859
-3570:2:1860
-3571:2:1877
-3572:2:1878
-3573:2:1881
-3574:2:1882
-3575:0:2227
-3576:1:220
-3577:0:2227
-3578:1:373
-3579:0:2227
-3580:1:374
-3581:0:2227
-3582:1:3
-3583:0:2227
-3584:1:4
-3585:1:8
-3586:1:9
-3587:1:16
-3588:1:17
-3589:1:28
-3590:1:32
-3591:1:33
-3592:1:40
-3593:1:41
-3594:1:51
-3595:1:52
-3596:1:62
-3597:1:63
-3598:0:2227
-3599:1:75
-3600:0:2227
-3601:1:76
-3602:1:80
-3603:1:81
-3604:1:88
-3605:1:92
-3606:1:93
-3607:1:100
-3608:1:104
-3609:1:105
-3610:1:112
-3611:1:113
-3612:1:123
-3613:1:124
-3614:1:134
-3615:1:135
-3616:0:2227
-3617:1:223
-3618:0:2227
-3619:1:224
-3620:0:2227
-3621:1:373
-3622:0:2227
-3623:1:374
-3624:0:2227
-3625:1:379
-3626:0:2227
-3627:1:384
-3628:1:388
-3629:1:389
-3630:1:396
-3631:1:397
-3632:1:408
-3633:1:412
-3634:1:413
-3635:1:420
-3636:1:421
-3637:1:431
-3638:1:432
-3639:1:442
-3640:1:443
-3641:0:2227
-3642:1:455
-3643:0:2227
-3644:1:456
-3645:1:460
-3646:1:461
-3647:1:468
-3648:1:472
-3649:1:473
-3650:1:480
-3651:1:484
-3652:1:485
-3653:1:492
-3654:1:493
-3655:1:503
-3656:1:504
-3657:1:514
-3658:1:515
-3659:0:2227
-3660:1:527
-3661:0:2227
-3662:1:528
-3663:1:532
-3664:1:533
-3665:1:540
-3666:1:544
-3667:1:545
-3668:1:552
-3669:1:556
-3670:1:557
-3671:1:564
-3672:1:565
-3673:1:575
-3674:1:576
-3675:1:586
-3676:1:587
-3677:0:2227
-3678:1:599
-3679:0:2227
-3680:1:600
-3681:0:2227
-3682:1:601
-3683:0:2227
-3684:1:746
-3685:0:2227
-3686:1:747
-3687:0:2227
-3688:1:751
-3689:0:2227
-3690:1:752
-3691:1:756
-3692:1:757
-3693:1:764
-3694:1:768
-3695:1:769
-3696:1:776
-3697:1:780
-3698:1:781
-3699:1:788
-3700:1:789
-3701:1:799
-3702:1:800
-3703:1:810
-3704:1:811
-3705:0:2227
-3706:1:823
-3707:0:2227
-3708:1:601
-3709:0:2227
-3710:1:746
-3711:0:2227
-3712:1:747
-3713:0:2227
-3714:1:751
-3715:0:2227
-3716:1:752
-3717:1:756
-3718:1:757
-3719:1:764
-3720:1:765
-3721:1:776
-3722:1:780
-3723:1:781
-3724:1:788
-3725:1:789
-3726:1:799
-3727:1:800
-3728:1:810
-3729:1:811
-3730:0:2227
-3731:1:823
-3732:0:2227
-3733:1:827
-3734:0:2227
-3735:1:832
-3736:1:836
-3737:1:837
-3738:1:844
-3739:1:845
-3740:1:856
-3741:1:860
-3742:1:861
-3743:1:868
-3744:1:869
-3745:1:879
-3746:1:880
-3747:1:890
-3748:1:891
-3749:0:2227
-3750:1:1
-3751:0:2227
-3752:1:2
-3753:0:2227
-3754:1:3
-3755:0:2227
-3756:1:4
-3757:1:8
-3758:1:9
-3759:1:16
-3760:1:20
-3761:1:21
-3762:1:28
-3763:1:32
-3764:1:33
-3765:1:40
-3766:1:41
-3767:1:51
-3768:1:52
-3769:1:62
-3770:1:63
-3771:0:2227
-3772:1:75
-3773:0:2227
-3774:1:76
-3775:1:80
-3776:1:81
-3777:1:88
-3778:1:92
-3779:1:93
-3780:1:100
-3781:1:104
-3782:1:105
-3783:1:112
-3784:1:113
-3785:1:123
-3786:1:124
-3787:1:134
-3788:1:135
-3789:0:2227
-3790:1:147
-3791:0:2227
-3792:1:148
-3793:0:2227
-3794:1:149
-3795:1:153
-3796:1:154
-3797:1:161
-3798:1:165
-3799:1:166
-3800:1:173
-3801:1:177
-3802:1:178
-3803:1:185
-3804:1:186
-3805:1:196
-3806:1:197
-3807:1:207
-3808:1:208
-3809:0:2227
-3810:1:220
-3811:0:2227
-3812:2:1894
-3813:0:2227
-3814:1:373
-3815:0:2227
-3816:2:1895
-3817:2:1899
-3818:2:1900
-3819:2:1907
-3820:2:1911
-3821:2:1912
-3822:2:1919
-3823:2:1923
-3824:2:1924
-3825:2:1931
-3826:2:1932
-3827:2:1949
-3828:2:1950
-3829:2:1953
-3830:2:1954
-3831:0:2227
-3832:2:1821
-3833:0:2227
-3834:1:374
-3835:0:2227
-3836:1:3
-3837:0:2227
-3838:1:4
-3839:1:8
-3840:1:9
-3841:1:16
-3842:1:17
-3843:1:28
-3844:1:32
-3845:1:33
-3846:1:40
-3847:1:41
-3848:1:51
-3849:1:52
-3850:1:62
-3851:1:63
-3852:0:2227
-3853:1:75
-3854:0:2227
-3855:1:76
-3856:1:80
-3857:1:81
-3858:1:88
-3859:1:92
-3860:1:93
-3861:1:100
-3862:1:104
-3863:1:105
-3864:1:112
-3865:1:113
-3866:1:123
-3867:1:124
-3868:1:134
-3869:1:135
-3870:0:2227
-3871:1:223
-3872:0:2227
-3873:1:224
-3874:0:2227
-3875:1:373
-3876:0:2227
-3877:1:374
-3878:0:2227
-3879:1:379
-3880:0:2227
-3881:1:384
-3882:1:388
-3883:1:389
-3884:1:396
-3885:1:397
-3886:1:408
-3887:1:412
-3888:1:413
-3889:1:420
-3890:1:421
-3891:1:431
-3892:1:432
-3893:1:442
-3894:1:443
-3895:0:2227
-3896:1:455
-3897:0:2227
-3898:1:456
-3899:1:460
-3900:1:461
-3901:1:468
-3902:1:472
-3903:1:473
-3904:1:480
-3905:1:484
-3906:1:485
-3907:1:492
-3908:1:493
-3909:1:503
-3910:1:504
-3911:1:514
-3912:1:515
-3913:0:2227
-3914:1:527
-3915:0:2227
-3916:1:528
-3917:1:532
-3918:1:533
-3919:1:540
-3920:1:544
-3921:1:545
-3922:1:552
-3923:1:556
-3924:1:557
-3925:1:564
-3926:1:565
-3927:1:575
-3928:1:576
-3929:1:586
-3930:1:587
-3931:0:2227
-3932:1:599
-3933:0:2227
-3934:1:600
-3935:0:2227
-3936:1:601
-3937:0:2227
-3938:1:746
-3939:0:2227
-3940:1:747
-3941:0:2227
-3942:1:751
-3943:0:2227
-3944:1:752
-3945:1:756
-3946:1:757
-3947:1:764
-3948:1:768
-3949:1:769
-3950:1:776
-3951:1:780
-3952:1:781
-3953:1:788
-3954:1:789
-3955:1:799
-3956:1:800
-3957:1:810
-3958:1:811
-3959:0:2227
-3960:1:823
-3961:0:2227
-3962:1:601
-3963:0:2227
-3964:1:746
-3965:0:2227
-3966:1:747
-3967:0:2227
-3968:1:751
-3969:0:2227
-3970:1:752
-3971:1:756
-3972:1:757
-3973:1:764
-3974:1:765
-3975:1:776
-3976:1:780
-3977:1:781
-3978:1:788
-3979:1:789
-3980:1:799
-3981:1:800
-3982:1:810
-3983:1:811
-3984:0:2227
-3985:1:823
-3986:0:2227
-3987:1:827
-3988:0:2227
-3989:1:832
-3990:1:836
-3991:1:837
-3992:1:844
-3993:1:845
-3994:1:856
-3995:1:860
-3996:1:861
-3997:1:868
-3998:1:869
-3999:1:879
-4000:1:880
-4001:1:890
-4002:1:891
-4003:0:2227
-4004:1:1
-4005:0:2227
-4006:1:2
-4007:0:2227
-4008:1:3
-4009:0:2227
-4010:1:4
-4011:1:8
-4012:1:9
-4013:1:16
-4014:1:20
-4015:1:21
-4016:1:28
-4017:1:32
-4018:1:33
-4019:1:40
-4020:1:41
-4021:1:51
-4022:1:52
-4023:1:62
-4024:1:63
-4025:0:2227
-4026:1:75
-4027:0:2227
-4028:1:76
-4029:1:80
-4030:1:81
-4031:1:88
-4032:1:92
-4033:1:93
-4034:1:100
-4035:1:104
-4036:1:105
-4037:1:112
-4038:1:113
-4039:1:123
-4040:1:124
-4041:1:134
-4042:1:135
-4043:0:2227
-4044:1:147
-4045:0:2227
-4046:1:148
-4047:0:2227
-4048:1:149
-4049:1:153
-4050:1:154
-4051:1:161
-4052:1:165
-4053:1:166
-4054:1:173
-4055:1:177
-4056:1:178
-4057:1:185
-4058:1:186
-4059:1:196
-4060:1:197
-4061:1:207
-4062:1:208
-4063:0:2227
-4064:1:220
-4065:0:2227
-4066:1:373
-4067:0:2227
-4068:1:374
-4069:0:2227
-4070:2:1822
-4071:0:2227
-4072:1:3
-4073:0:2227
-4074:1:4
-4075:1:8
-4076:1:9
-4077:1:16
-4078:1:17
-4079:1:28
-4080:1:32
-4081:1:33
-4082:1:40
-4083:1:41
-4084:1:51
-4085:1:52
-4086:1:62
-4087:1:63
-4088:0:2227
-4089:1:75
-4090:0:2227
-4091:1:76
-4092:1:80
-4093:1:81
-4094:1:88
-4095:1:92
-4096:1:93
-4097:1:100
-4098:1:104
-4099:1:105
-4100:1:112
-4101:1:113
-4102:1:123
-4103:1:124
-4104:1:134
-4105:1:135
-4106:0:2227
-4107:1:223
-4108:0:2227
-4109:1:224
-4110:0:2227
-4111:1:373
-4112:0:2227
-4113:1:374
-4114:0:2227
-4115:1:379
-4116:0:2227
-4117:1:384
-4118:1:388
-4119:1:389
-4120:1:396
-4121:1:397
-4122:1:408
-4123:1:412
-4124:1:413
-4125:1:420
-4126:1:421
-4127:1:431
-4128:1:432
-4129:1:442
-4130:1:443
-4131:0:2227
-4132:1:455
-4133:0:2227
-4134:1:456
-4135:1:460
-4136:1:461
-4137:1:468
-4138:1:472
-4139:1:473
-4140:1:480
-4141:1:484
-4142:1:485
-4143:1:492
-4144:1:493
-4145:1:503
-4146:1:504
-4147:1:514
-4148:1:515
-4149:0:2227
-4150:1:527
-4151:0:2227
-4152:1:528
-4153:1:532
-4154:1:533
-4155:1:540
-4156:1:544
-4157:1:545
-4158:1:552
-4159:1:556
-4160:1:557
-4161:1:564
-4162:1:565
-4163:1:575
-4164:1:576
-4165:1:586
-4166:1:587
-4167:0:2227
-4168:1:599
-4169:0:2227
-4170:1:600
-4171:0:2227
-4172:1:601
-4173:0:2227
-4174:1:746
-4175:0:2227
-4176:1:747
-4177:0:2227
-4178:1:751
-4179:0:2227
-4180:1:752
-4181:1:756
-4182:1:757
-4183:1:764
-4184:1:768
-4185:1:769
-4186:1:776
-4187:1:780
-4188:1:781
-4189:1:788
-4190:1:789
-4191:1:799
-4192:1:800
-4193:1:810
-4194:1:811
-4195:0:2227
-4196:1:823
-4197:0:2227
-4198:1:601
-4199:0:2227
-4200:1:746
-4201:0:2227
-4202:1:747
-4203:0:2227
-4204:1:751
-4205:0:2227
-4206:1:752
-4207:1:756
-4208:1:757
-4209:1:764
-4210:1:765
-4211:1:776
-4212:1:780
-4213:1:781
-4214:1:788
-4215:1:789
-4216:1:799
-4217:1:800
-4218:1:810
-4219:1:811
-4220:0:2227
-4221:1:823
-4222:0:2227
-4223:1:827
-4224:0:2227
-4225:1:832
-4226:1:836
-4227:1:837
-4228:1:852
-4229:1:853
-4230:1:856
-4231:1:860
-4232:1:861
-4233:1:868
-4234:1:869
-4235:1:879
-4236:1:882
-4237:1:883
-4238:1:890
-4239:1:891
-4240:0:2227
-4241:1:1
-4242:0:2227
-4243:1:2
-4244:0:2227
-4245:1:3
-4246:0:2227
-4247:2:1823
-4248:2:1827
-4249:2:1828
-4250:2:1835
-4251:2:1839
-4252:2:1840
-4253:2:1847
-4254:2:1851
-4255:2:1852
-4256:2:1859
-4257:2:1860
-4258:2:1877
-4259:2:1878
-4260:2:1881
-4261:2:1882
-4262:0:2227
-4263:2:1894
-4264:0:2227
-4265:2:1895
-4266:2:1899
-4267:2:1900
-4268:2:1907
-4269:2:1911
-4270:2:1912
-4271:2:1919
-4272:2:1923
-4273:2:1924
-4274:2:1931
-4275:2:1932
-4276:2:1949
-4277:2:1950
-4278:2:1953
-4279:2:1954
-4280:0:2227
-4281:2:1821
-4282:0:2227
-4283:2:1822
-4284:0:2227
-4285:1:4
-4286:1:8
-4287:1:9
-4288:1:16
-4289:1:17
-4290:1:28
-4291:1:32
-4292:1:33
-4293:1:40
-4294:1:41
-4295:1:51
-4296:1:52
-4297:1:62
-4298:1:63
-4299:0:2227
-4300:2:1823
-4301:2:1827
-4302:2:1828
-4303:2:1835
-4304:2:1839
-4305:2:1840
-4306:2:1847
-4307:2:1851
-4308:2:1852
-4309:2:1859
-4310:2:1860
-4311:2:1877
-4312:2:1878
-4313:2:1881
-4314:2:1882
-4315:0:2227
-4316:2:1894
-4317:0:2227
-4318:2:1895
-4319:2:1899
-4320:2:1900
-4321:2:1907
-4322:2:1911
-4323:2:1912
-4324:2:1919
-4325:2:1923
-4326:2:1924
-4327:2:1931
-4328:2:1932
-4329:2:1949
-4330:2:1950
-4331:2:1953
-4332:2:1954
-4333:0:2227
-4334:2:1821
-4335:0:2227
-4336:2:1822
-4337:0:2227
-4338:1:75
-4339:0:2227
-4340:2:1823
-4341:2:1827
-4342:2:1828
-4343:2:1835
-4344:2:1839
-4345:2:1840
-4346:2:1847
-4347:2:1851
-4348:2:1852
-4349:2:1859
-4350:2:1860
-4351:2:1877
-4352:2:1878
-4353:2:1881
-4354:2:1882
-4355:0:2227
-4356:2:1894
-4357:0:2227
-4358:2:1895
-4359:2:1899
-4360:2:1900
-4361:2:1907
-4362:2:1911
-4363:2:1912
-4364:2:1919
-4365:2:1923
-4366:2:1924
-4367:2:1931
-4368:2:1932
-4369:2:1949
-4370:2:1950
-4371:2:1953
-4372:2:1954
-4373:0:2227
-4374:2:1821
-4375:0:2227
-4376:2:1822
-4377:0:2227
-4378:1:76
-4379:1:80
-4380:1:81
-4381:1:88
-4382:1:92
-4383:1:93
-4384:1:100
-4385:1:104
-4386:1:105
-4387:1:112
-4388:1:113
-4389:1:123
-4390:1:124
-4391:1:134
-4392:1:135
-4393:0:2227
-4394:1:147
-4395:0:2227
-4396:2:1823
-4397:2:1827
-4398:2:1828
-4399:2:1835
-4400:2:1839
-4401:2:1840
-4402:2:1847
-4403:2:1851
-4404:2:1852
-4405:2:1859
-4406:2:1860
-4407:2:1877
-4408:2:1878
-4409:2:1881
-4410:2:1882
-4411:0:2227
-4412:2:1894
-4413:0:2227
-4414:2:1895
-4415:2:1899
-4416:2:1900
-4417:2:1907
-4418:2:1911
-4419:2:1912
-4420:2:1919
-4421:2:1923
-4422:2:1924
-4423:2:1931
-4424:2:1932
-4425:2:1949
-4426:2:1950
-4427:2:1953
-4428:2:1954
-4429:0:2227
-4430:2:1821
-4431:0:2227
-4432:2:1822
-4433:0:2227
-4434:1:148
-4435:0:2227
-4436:2:1823
-4437:2:1827
-4438:2:1828
-4439:2:1835
-4440:2:1839
-4441:2:1840
-4442:2:1847
-4443:2:1851
-4444:2:1852
-4445:2:1859
-4446:2:1860
-4447:2:1877
-4448:2:1878
-4449:2:1881
-4450:2:1882
-4451:0:2227
-4452:2:1894
-4453:0:2227
-4454:2:1895
-4455:2:1899
-4456:2:1900
-4457:2:1907
-4458:2:1911
-4459:2:1912
-4460:2:1919
-4461:2:1923
-4462:2:1924
-4463:2:1931
-4464:2:1932
-4465:2:1949
-4466:2:1950
-4467:2:1953
-4468:2:1954
-4469:0:2227
-4470:2:1821
-4471:0:2227
-4472:2:1822
-4473:0:2227
-4474:1:149
-4475:1:153
-4476:1:154
-4477:1:161
-4478:1:165
-4479:1:166
-4480:1:173
-4481:1:177
-4482:1:178
-4483:1:185
-4484:1:186
-4485:1:196
-4486:1:197
-4487:1:207
-4488:1:208
-4489:0:2227
-4490:2:1823
-4491:2:1827
-4492:2:1828
-4493:2:1835
-4494:2:1839
-4495:2:1840
-4496:2:1847
-4497:2:1851
-4498:2:1852
-4499:2:1859
-4500:2:1860
-4501:2:1877
-4502:2:1878
-4503:2:1881
-4504:2:1882
-4505:0:2227
-4506:2:1894
-4507:0:2227
-4508:2:1895
-4509:2:1899
-4510:2:1900
-4511:2:1907
-4512:2:1911
-4513:2:1912
-4514:2:1919
-4515:2:1923
-4516:2:1924
-4517:2:1931
-4518:2:1932
-4519:2:1949
-4520:2:1950
-4521:2:1953
-4522:2:1954
-4523:0:2227
-4524:2:1821
-4525:0:2227
-4526:2:1822
-4527:0:2227
-4528:1:220
-4529:0:2227
-4530:1:373
-4531:0:2227
-4532:1:374
-4533:0:2227
-4534:1:3
-4535:0:2227
-4536:2:1823
-4537:2:1827
-4538:2:1828
-4539:2:1835
-4540:2:1839
-4541:2:1840
-4542:2:1847
-4543:2:1851
-4544:2:1852
-4545:2:1859
-4546:2:1860
-4547:2:1877
-4548:2:1878
-4549:2:1881
-4550:2:1882
-4551:0:2227
-4552:2:1894
-4553:0:2227
-4554:2:1895
-4555:2:1899
-4556:2:1900
-4557:2:1907
-4558:2:1911
-4559:2:1912
-4560:2:1919
-4561:2:1923
-4562:2:1924
-4563:2:1931
-4564:2:1932
-4565:2:1949
-4566:2:1950
-4567:2:1953
-4568:2:1954
-4569:0:2227
-4570:2:1821
-4571:0:2227
-4572:2:1822
-4573:0:2227
-4574:1:4
-4575:1:8
-4576:1:9
-4577:1:16
-4578:1:17
-4579:1:28
-4580:1:32
-4581:1:33
-4582:1:40
-4583:1:41
-4584:1:51
-4585:1:52
-4586:1:62
-4587:1:63
diff --git a/formal-model/urcu/result-signal-over-writer/urcu.sh b/formal-model/urcu/result-signal-over-writer/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu/result-signal-over-writer/urcu.spin b/formal-model/urcu/result-signal-over-writer/urcu.spin
deleted file mode 100644 (file)
index 2cfcb70..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free.log b/formal-model/urcu/result-signal-over-writer/urcu_free.log
deleted file mode 100644 (file)
index 9a22c47..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 741)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10669, errors: 0
-    20146 states, stored
-   191615 states, matched
-   211761 transitions (= stored+matched)
-   712676 atomic steps
-hash conflicts:      1523 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.614      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.661      actual memory usage for states (unsuccessful compression: 102.92%)
-               state-vector as stored = 58 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.326      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 401, "pan.___", state 330, "(1)"
-       line 612, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 397, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 406, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 59, "(1)"
-       line 416, "pan.___", state 89, "(1)"
-       line 397, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 160, "(1)"
-       line 650, "pan.___", state 213, "(1)"
-       line 173, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 233, "(1)"
-       line 158, "pan.___", state 254, "(1)"
-       line 162, "pan.___", state 262, "(1)"
-       line 166, "pan.___", state 274, "(1)"
-       line 173, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 317, "(1)"
-       line 162, "pan.___", state 325, "(1)"
-       line 166, "pan.___", state 337, "(1)"
-       line 173, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 384, "(1)"
-       line 162, "pan.___", state 392, "(1)"
-       line 166, "pan.___", state 404, "(1)"
-       line 397, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 401, "pan.___", state 441, "(1)"
-       line 406, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 470, "(1)"
-       line 416, "pan.___", state 500, "(1)"
-       line 397, "pan.___", state 526, "(1)"
-       line 401, "pan.___", state 540, "(1)"
-       line 406, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 599, "(1)"
-       line 401, "pan.___", state 640, "(1)"
-       line 406, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 699, "(1)"
-       line 173, "pan.___", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, "pan.___", state 722, "(1)"
-       line 177, "pan.___", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 731, "(1)"
-       line 177, "pan.___", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, "pan.___", state 732, "else"
-       line 175, "pan.___", state 737, "((j<1))"
-       line 175, "pan.___", state 737, "((j>=1))"
-       line 181, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 752, "(1)"
-       line 162, "pan.___", state 760, "(1)"
-       line 162, "pan.___", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, "pan.___", state 761, "else"
-       line 160, "pan.___", state 766, "((j<1))"
-       line 160, "pan.___", state 766, "((j>=1))"
-       line 166, "pan.___", state 772, "(1)"
-       line 166, "pan.___", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, "pan.___", state 773, "else"
-       line 168, "pan.___", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, "pan.___", state 776, "else"
-       line 173, "pan.___", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, "pan.___", state 785, "(1)"
-       line 177, "pan.___", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, "pan.___", state 794, "(1)"
-       line 177, "pan.___", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, "pan.___", state 795, "else"
-       line 175, "pan.___", state 800, "((j<1))"
-       line 175, "pan.___", state 800, "((j>=1))"
-       line 181, "pan.___", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 815, "(1)"
-       line 162, "pan.___", state 823, "(1)"
-       line 162, "pan.___", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, "pan.___", state 824, "else"
-       line 160, "pan.___", state 829, "((j<1))"
-       line 160, "pan.___", state 829, "((j>=1))"
-       line 166, "pan.___", state 835, "(1)"
-       line 166, "pan.___", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, "pan.___", state 836, "else"
-       line 168, "pan.___", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, "pan.___", state 839, "else"
-       line 200, "pan.___", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, "pan.___", state 841, "else"
-       line 212, "pan.___", state 845, "((i<1))"
-       line 212, "pan.___", state 845, "((i>=1))"
-       line 173, "pan.___", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, "pan.___", state 852, "(1)"
-       line 177, "pan.___", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 861, "(1)"
-       line 177, "pan.___", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, "pan.___", state 862, "else"
-       line 175, "pan.___", state 867, "((j<1))"
-       line 175, "pan.___", state 867, "((j>=1))"
-       line 181, "pan.___", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 882, "(1)"
-       line 162, "pan.___", state 890, "(1)"
-       line 162, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, "pan.___", state 891, "else"
-       line 160, "pan.___", state 896, "((j<1))"
-       line 160, "pan.___", state 896, "((j>=1))"
-       line 166, "pan.___", state 902, "(1)"
-       line 166, "pan.___", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, "pan.___", state 903, "else"
-       line 168, "pan.___", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, "pan.___", state 906, "else"
-       line 200, "pan.___", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, "pan.___", state 908, "else"
-       line 219, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, "pan.___", state 909, "else"
-       line 354, "pan.___", state 915, "((sighand_exec==1))"
-       line 354, "pan.___", state 915, "else"
-       line 360, "pan.___", state 918, "sighand_exec = 1"
-       line 397, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, "pan.___", state 933, "(1)"
-       line 397, "pan.___", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, "pan.___", state 934, "else"
-       line 397, "pan.___", state 937, "(1)"
-       line 401, "pan.___", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, "pan.___", state 947, "(1)"
-       line 401, "pan.___", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, "pan.___", state 948, "else"
-       line 401, "pan.___", state 951, "(1)"
-       line 401, "pan.___", state 952, "(1)"
-       line 401, "pan.___", state 952, "(1)"
-       line 399, "pan.___", state 957, "((i<1))"
-       line 399, "pan.___", state 957, "((i>=1))"
-       line 406, "pan.___", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 976, "(1)"
-       line 407, "pan.___", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, "pan.___", state 977, "else"
-       line 407, "pan.___", state 980, "(1)"
-       line 407, "pan.___", state 981, "(1)"
-       line 407, "pan.___", state 981, "(1)"
-       line 411, "pan.___", state 989, "(1)"
-       line 411, "pan.___", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, "pan.___", state 990, "else"
-       line 411, "pan.___", state 993, "(1)"
-       line 411, "pan.___", state 994, "(1)"
-       line 411, "pan.___", state 994, "(1)"
-       line 409, "pan.___", state 999, "((i<1))"
-       line 409, "pan.___", state 999, "((i>=1))"
-       line 416, "pan.___", state 1006, "(1)"
-       line 416, "pan.___", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, "pan.___", state 1007, "else"
-       line 416, "pan.___", state 1010, "(1)"
-       line 416, "pan.___", state 1011, "(1)"
-       line 416, "pan.___", state 1011, "(1)"
-       line 418, "pan.___", state 1014, "(1)"
-       line 418, "pan.___", state 1014, "(1)"
-       line 360, "pan.___", state 1023, "sighand_exec = 1"
-       line 401, "pan.___", state 1054, "(1)"
-       line 406, "pan.___", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 1113, "(1)"
-       line 401, "pan.___", state 1151, "(1)"
-       line 406, "pan.___", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 1210, "(1)"
-       line 397, "pan.___", state 1236, "(1)"
-       line 401, "pan.___", state 1250, "(1)"
-       line 406, "pan.___", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 1309, "(1)"
-       line 401, "pan.___", state 1350, "(1)"
-       line 406, "pan.___", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 416, "pan.___", state 1409, "(1)"
-       line 173, "pan.___", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, "pan.___", state 1432, "(1)"
-       line 177, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 1441, "(1)"
-       line 177, "pan.___", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, "pan.___", state 1442, "else"
-       line 175, "pan.___", state 1447, "((j<1))"
-       line 175, "pan.___", state 1447, "((j>=1))"
-       line 181, "pan.___", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 1462, "(1)"
-       line 162, "pan.___", state 1470, "(1)"
-       line 162, "pan.___", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, "pan.___", state 1471, "else"
-       line 160, "pan.___", state 1476, "((j<1))"
-       line 160, "pan.___", state 1476, "((j>=1))"
-       line 166, "pan.___", state 1482, "(1)"
-       line 166, "pan.___", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, "pan.___", state 1483, "else"
-       line 168, "pan.___", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, "pan.___", state 1486, "else"
-       line 173, "pan.___", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 173, "pan.___", state 1495, "(1)"
-       line 177, "pan.___", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 177, "pan.___", state 1504, "(1)"
-       line 177, "pan.___", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 177, "pan.___", state 1505, "else"
-       line 175, "pan.___", state 1510, "((j<1))"
-       line 175, "pan.___", state 1510, "((j>=1))"
-       line 181, "pan.___", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 1525, "(1)"
-       line 162, "pan.___", state 1533, "(1)"
-       line 162, "pan.___", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 162, "pan.___", state 1534, "else"
-       line 160, "pan.___", state 1539, "((j<1))"
-       line 160, "pan.___", state 1539, "((j>=1))"
-       line 166, "pan.___", state 1545, "(1)"
-       line 166, "pan.___", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 166, "pan.___", state 1546, "else"
-       line 168, "pan.___", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 168, "pan.___", state 1549, "else"
-       line 200, "pan.___", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 200, "pan.___", state 1551, "else"
-       line 212, "pan.___", state 1555, "((i<1))"
-       line 212, "pan.___", state 1555, "((i>=1))"
-       line 173, "pan.___", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 173, "pan.___", state 1562, "(1)"
-       line 177, "pan.___", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 1571, "(1)"
-       line 177, "pan.___", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 177, "pan.___", state 1572, "else"
-       line 175, "pan.___", state 1577, "((j<1))"
-       line 175, "pan.___", state 1577, "((j>=1))"
-       line 181, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 1592, "(1)"
-       line 162, "pan.___", state 1600, "(1)"
-       line 162, "pan.___", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 162, "pan.___", state 1601, "else"
-       line 160, "pan.___", state 1606, "((j<1))"
-       line 160, "pan.___", state 1606, "((j>=1))"
-       line 166, "pan.___", state 1612, "(1)"
-       line 166, "pan.___", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 166, "pan.___", state 1613, "else"
-       line 168, "pan.___", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 168, "pan.___", state 1616, "else"
-       line 200, "pan.___", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 200, "pan.___", state 1618, "else"
-       line 219, "pan.___", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 219, "pan.___", state 1619, "else"
-       line 354, "pan.___", state 1625, "((sighand_exec==1))"
-       line 354, "pan.___", state 1625, "else"
-       line 360, "pan.___", state 1628, "sighand_exec = 1"
-       line 397, "pan.___", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 397, "pan.___", state 1643, "(1)"
-       line 397, "pan.___", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 397, "pan.___", state 1644, "else"
-       line 397, "pan.___", state 1647, "(1)"
-       line 401, "pan.___", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 401, "pan.___", state 1657, "(1)"
-       line 401, "pan.___", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 401, "pan.___", state 1658, "else"
-       line 401, "pan.___", state 1661, "(1)"
-       line 401, "pan.___", state 1662, "(1)"
-       line 401, "pan.___", state 1662, "(1)"
-       line 399, "pan.___", state 1667, "((i<1))"
-       line 399, "pan.___", state 1667, "((i>=1))"
-       line 406, "pan.___", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 1686, "(1)"
-       line 407, "pan.___", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 407, "pan.___", state 1687, "else"
-       line 407, "pan.___", state 1690, "(1)"
-       line 407, "pan.___", state 1691, "(1)"
-       line 407, "pan.___", state 1691, "(1)"
-       line 411, "pan.___", state 1699, "(1)"
-       line 411, "pan.___", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 411, "pan.___", state 1700, "else"
-       line 411, "pan.___", state 1703, "(1)"
-       line 411, "pan.___", state 1704, "(1)"
-       line 411, "pan.___", state 1704, "(1)"
-       line 409, "pan.___", state 1709, "((i<1))"
-       line 409, "pan.___", state 1709, "((i>=1))"
-       line 416, "pan.___", state 1716, "(1)"
-       line 416, "pan.___", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 416, "pan.___", state 1717, "else"
-       line 416, "pan.___", state 1720, "(1)"
-       line 416, "pan.___", state 1721, "(1)"
-       line 416, "pan.___", state 1721, "(1)"
-       line 418, "pan.___", state 1724, "(1)"
-       line 418, "pan.___", state 1724, "(1)"
-       line 360, "pan.___", state 1733, "sighand_exec = 1"
-       line 177, "pan.___", state 1758, "(1)"
-       line 181, "pan.___", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 1779, "(1)"
-       line 162, "pan.___", state 1787, "(1)"
-       line 166, "pan.___", state 1799, "(1)"
-       line 173, "pan.___", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 177, "pan.___", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 181, "pan.___", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 158, "pan.___", state 1842, "(1)"
-       line 162, "pan.___", state 1850, "(1)"
-       line 166, "pan.___", state 1862, "(1)"
-       line 173, "pan.___", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 177, "pan.___", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 181, "pan.___", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 158, "pan.___", state 1909, "(1)"
-       line 162, "pan.___", state 1917, "(1)"
-       line 166, "pan.___", state 1929, "(1)"
-       line 700, "pan.___", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 746, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 0.15 seconds
-pan: rate 134306.67 states/second
-pan: avg transition delay 7.0835e-07 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free.ltl b/formal-model/urcu/result-signal-over-writer/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free.spin.input b/formal-model/urcu/result-signal-over-writer/urcu_free.spin.input
deleted file mode 100644 (file)
index 953115f..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free.spin.input.trail b/formal-model/urcu/result-signal-over-writer/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 837f3d9..0000000
+++ /dev/null
@@ -1,15043 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1180
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1181
-243:2:1185
-244:2:1186
-245:2:1194
-246:2:1195
-247:2:1199
-248:2:1200
-249:2:1194
-250:2:1195
-251:2:1196
-252:2:1208
-253:2:1213
-254:2:1217
-255:2:1218
-256:2:1225
-257:2:1226
-258:2:1237
-259:2:1238
-260:2:1239
-261:2:1237
-262:2:1238
-263:2:1239
-264:2:1250
-265:2:1255
-266:2:1256
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1268
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1270
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1271
-279:2:1275
-280:2:1276
-281:2:1284
-282:2:1285
-283:2:1289
-284:2:1290
-285:2:1284
-286:2:1285
-287:2:1289
-288:2:1290
-289:2:1298
-290:2:1303
-291:2:1307
-292:2:1308
-293:2:1315
-294:2:1316
-295:2:1327
-296:2:1328
-297:2:1329
-298:2:1327
-299:2:1328
-300:2:1329
-301:2:1340
-302:2:1345
-303:2:1346
-304:0:4365
-305:2:1358
-306:0:4365
-307:2:1454
-308:0:4365
-309:3:2528
-310:0:4365
-311:2:1455
-312:0:4365
-313:3:2529
-314:0:4365
-315:2:1652
-316:0:4365
-317:2:1653
-318:0:4365
-319:2:1657
-320:0:4365
-321:2:1660
-322:0:4365
-323:3:2528
-324:0:4365
-325:2:1665
-326:2:1669
-327:2:1670
-328:2:1678
-329:2:1679
-330:2:1683
-331:2:1684
-332:2:1678
-333:2:1679
-334:2:1680
-335:2:1692
-336:2:1697
-337:2:1701
-338:2:1702
-339:2:1709
-340:2:1710
-341:2:1721
-342:2:1722
-343:2:1723
-344:2:1721
-345:2:1722
-346:2:1723
-347:2:1734
-348:2:1739
-349:2:1740
-350:0:4365
-351:3:2529
-352:0:4365
-353:2:1752
-354:0:4365
-355:3:2528
-356:0:4365
-357:2:1754
-358:0:4365
-359:3:2529
-360:0:4365
-361:2:1755
-362:2:1759
-363:2:1760
-364:2:1768
-365:2:1769
-366:2:1773
-367:2:1774
-368:2:1768
-369:2:1769
-370:2:1773
-371:2:1774
-372:2:1782
-373:2:1787
-374:2:1791
-375:2:1792
-376:2:1799
-377:2:1800
-378:2:1811
-379:2:1812
-380:2:1813
-381:2:1811
-382:2:1812
-383:2:1813
-384:2:1824
-385:2:1829
-386:2:1830
-387:0:4365
-388:2:1842
-389:0:4365
-390:3:2528
-391:0:4365
-392:2:1844
-393:0:4365
-394:3:2529
-395:0:4365
-396:2:1845
-397:2:1849
-398:2:1850
-399:2:1858
-400:2:1859
-401:2:1863
-402:2:1864
-403:2:1858
-404:2:1859
-405:2:1863
-406:2:1864
-407:2:1872
-408:2:1877
-409:2:1881
-410:2:1882
-411:2:1889
-412:2:1890
-413:2:1901
-414:2:1902
-415:2:1903
-416:2:1901
-417:2:1902
-418:2:1903
-419:2:1914
-420:2:1919
-421:2:1920
-422:0:4365
-423:2:1932
-424:0:4365
-425:3:2528
-426:0:4365
-427:2:1934
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:1935
-432:0:4365
-433:2:1936
-434:0:4365
-435:2:2129
-436:0:4365
-437:2:2130
-438:0:4365
-439:2:2134
-440:0:4365
-441:3:2528
-442:0:4365
-443:2:2136
-444:0:4365
-445:3:2529
-446:0:4365
-447:2:2137
-448:2:2141
-449:2:2142
-450:2:2150
-451:2:2151
-452:2:2155
-453:2:2156
-454:2:2150
-455:2:2151
-456:2:2155
-457:2:2156
-458:2:2164
-459:2:2169
-460:2:2173
-461:2:2174
-462:2:2181
-463:2:2182
-464:2:2193
-465:2:2194
-466:2:2195
-467:2:2193
-468:2:2194
-469:2:2195
-470:2:2206
-471:2:2211
-472:2:2212
-473:0:4365
-474:2:2224
-475:0:4365
-476:3:2528
-477:0:4365
-478:2:2226
-479:0:4365
-480:3:2529
-481:0:4365
-482:2:1936
-483:0:4365
-484:2:2129
-485:0:4365
-486:2:2130
-487:0:4365
-488:2:2134
-489:0:4365
-490:3:2528
-491:0:4365
-492:2:2136
-493:0:4365
-494:3:2529
-495:0:4365
-496:2:2137
-497:2:2141
-498:2:2142
-499:2:2150
-500:2:2151
-501:2:2155
-502:2:2156
-503:2:2150
-504:2:2151
-505:2:2152
-506:2:2164
-507:2:2169
-508:2:2173
-509:2:2174
-510:2:2181
-511:2:2182
-512:2:2193
-513:2:2194
-514:2:2195
-515:2:2193
-516:2:2194
-517:2:2195
-518:2:2206
-519:2:2211
-520:2:2212
-521:0:4365
-522:2:2224
-523:0:4365
-524:3:2528
-525:0:4365
-526:2:2226
-527:0:4365
-528:3:2529
-529:0:4365
-530:2:2230
-531:0:4365
-532:3:2528
-533:0:4365
-534:2:2235
-535:2:2239
-536:2:2240
-537:2:2248
-538:2:2249
-539:2:2253
-540:2:2254
-541:2:2248
-542:2:2249
-543:2:2250
-544:2:2262
-545:2:2267
-546:2:2271
-547:2:2272
-548:2:2279
-549:2:2280
-550:2:2291
-551:2:2292
-552:2:2293
-553:2:2291
-554:2:2292
-555:2:2293
-556:2:2304
-557:2:2309
-558:2:2310
-559:0:4365
-560:3:2529
-561:0:4365
-562:2:2322
-563:0:4365
-564:2:1169
-565:0:4365
-566:3:2528
-567:0:4365
-568:2:1170
-569:0:4365
-570:3:2529
-571:0:4365
-572:3:2530
-573:0:4365
-574:3:2536
-575:0:4365
-576:3:2537
-577:0:4365
-578:3:2547
-579:0:4365
-580:3:2548
-581:0:4365
-582:3:2552
-583:3:2553
-584:3:2557
-585:3:2561
-586:3:2562
-587:3:2557
-588:3:2561
-589:3:2562
-590:3:2566
-591:3:2574
-592:3:2575
-593:3:2580
-594:3:2587
-595:3:2588
-596:3:2587
-597:3:2588
-598:3:2595
-599:3:2600
-600:0:4365
-601:3:2611
-602:0:4365
-603:3:2615
-604:3:2616
-605:3:2620
-606:3:2624
-607:3:2625
-608:3:2620
-609:3:2624
-610:3:2625
-611:3:2629
-612:3:2637
-613:3:2638
-614:3:2643
-615:3:2650
-616:3:2651
-617:3:2650
-618:3:2651
-619:3:2658
-620:3:2663
-621:0:4365
-622:3:2611
-623:0:4365
-624:3:2615
-625:3:2616
-626:3:2620
-627:3:2624
-628:3:2625
-629:3:2620
-630:3:2624
-631:3:2625
-632:3:2629
-633:3:2637
-634:3:2638
-635:3:2643
-636:3:2650
-637:3:2651
-638:3:2650
-639:3:2651
-640:3:2658
-641:3:2663
-642:0:4365
-643:3:2674
-644:0:4365
-645:3:2682
-646:3:2683
-647:3:2687
-648:3:2691
-649:3:2692
-650:3:2687
-651:3:2691
-652:3:2692
-653:3:2696
-654:3:2704
-655:3:2705
-656:3:2710
-657:3:2717
-658:3:2718
-659:3:2717
-660:3:2718
-661:3:2725
-662:3:2730
-663:0:4365
-664:3:2745
-665:0:4365
-666:3:2746
-667:0:4365
-668:2:1173
-669:0:4365
-670:3:2747
-671:0:4365
-672:2:1179
-673:0:4365
-674:2:1180
-675:0:4365
-676:3:2746
-677:0:4365
-678:2:1181
-679:2:1185
-680:2:1186
-681:2:1194
-682:2:1195
-683:2:1199
-684:2:1200
-685:2:1194
-686:2:1195
-687:2:1199
-688:2:1200
-689:2:1208
-690:2:1213
-691:2:1217
-692:2:1218
-693:2:1225
-694:2:1226
-695:2:1237
-696:2:1238
-697:2:1239
-698:2:1237
-699:2:1238
-700:2:1239
-701:2:1250
-702:2:1255
-703:2:1256
-704:0:4365
-705:3:2747
-706:0:4365
-707:2:1268
-708:0:4365
-709:3:2746
-710:0:4365
-711:2:1270
-712:0:4365
-713:3:2747
-714:0:4365
-715:2:1271
-716:2:1275
-717:2:1276
-718:2:1284
-719:2:1285
-720:2:1289
-721:2:1290
-722:2:1284
-723:2:1285
-724:2:1289
-725:2:1290
-726:2:1298
-727:2:1303
-728:2:1307
-729:2:1308
-730:2:1315
-731:2:1316
-732:2:1327
-733:2:1328
-734:2:1329
-735:2:1327
-736:2:1328
-737:2:1329
-738:2:1340
-739:2:1345
-740:2:1346
-741:0:4365
-742:2:1358
-743:0:4365
-744:2:1360
-745:0:4365
-746:3:2746
-747:0:4365
-748:2:1361
-749:0:4365
-750:3:2747
-751:0:4365
-752:2:1362
-753:2:1366
-754:2:1367
-755:2:1375
-756:2:1376
-757:2:1380
-758:2:1381
-759:2:1375
-760:2:1376
-761:2:1380
-762:2:1381
-763:2:1389
-764:2:1394
-765:2:1398
-766:2:1399
-767:2:1406
-768:2:1407
-769:2:1418
-770:2:1419
-771:2:1420
-772:2:1418
-773:2:1419
-774:2:1420
-775:2:1431
-776:2:1436
-777:2:1437
-778:0:4365
-779:2:1449
-780:0:4365
-781:3:2746
-782:0:4365
-783:2:1451
-784:0:4365
-785:3:2747
-786:0:4365
-787:2:1652
-788:0:4365
-789:2:1653
-790:0:4365
-791:2:1657
-792:0:4365
-793:2:1180
-794:0:4365
-795:3:2746
-796:0:4365
-797:2:1181
-798:2:1185
-799:2:1186
-800:2:1194
-801:2:1195
-802:2:1199
-803:2:1200
-804:2:1194
-805:2:1195
-806:2:1196
-807:2:1208
-808:2:1213
-809:2:1217
-810:2:1218
-811:2:1225
-812:2:1226
-813:2:1237
-814:2:1238
-815:2:1239
-816:2:1237
-817:2:1238
-818:2:1239
-819:2:1250
-820:2:1255
-821:2:1256
-822:0:4365
-823:3:2747
-824:0:4365
-825:2:1268
-826:0:4365
-827:3:2746
-828:0:4365
-829:2:1270
-830:0:4365
-831:3:2747
-832:0:4365
-833:2:1271
-834:2:1275
-835:2:1276
-836:2:1284
-837:2:1285
-838:2:1289
-839:2:1290
-840:2:1284
-841:2:1285
-842:2:1289
-843:2:1290
-844:2:1298
-845:2:1303
-846:2:1307
-847:2:1308
-848:2:1315
-849:2:1316
-850:2:1327
-851:2:1328
-852:2:1329
-853:2:1327
-854:2:1328
-855:2:1329
-856:2:1340
-857:2:1345
-858:2:1346
-859:0:4365
-860:2:1358
-861:0:4365
-862:2:1454
-863:0:4365
-864:3:2746
-865:0:4365
-866:2:1455
-867:0:4365
-868:3:2747
-869:0:4365
-870:2:1652
-871:0:4365
-872:2:1653
-873:0:4365
-874:2:1657
-875:0:4365
-876:2:1660
-877:0:4365
-878:3:2746
-879:0:4365
-880:2:1665
-881:2:1669
-882:2:1670
-883:2:1678
-884:2:1679
-885:2:1683
-886:2:1684
-887:2:1678
-888:2:1679
-889:2:1680
-890:2:1692
-891:2:1697
-892:2:1701
-893:2:1702
-894:2:1709
-895:2:1710
-896:2:1721
-897:2:1722
-898:2:1723
-899:2:1721
-900:2:1722
-901:2:1723
-902:2:1734
-903:2:1739
-904:2:1740
-905:0:4365
-906:3:2747
-907:0:4365
-908:2:1752
-909:0:4365
-910:3:2746
-911:0:4365
-912:2:1754
-913:0:4365
-914:3:2747
-915:0:4365
-916:2:1755
-917:2:1759
-918:2:1760
-919:2:1768
-920:2:1769
-921:2:1773
-922:2:1774
-923:2:1768
-924:2:1769
-925:2:1773
-926:2:1774
-927:2:1782
-928:2:1787
-929:2:1791
-930:2:1792
-931:2:1799
-932:2:1800
-933:2:1811
-934:2:1812
-935:2:1813
-936:2:1811
-937:2:1812
-938:2:1813
-939:2:1824
-940:2:1829
-941:2:1830
-942:0:4365
-943:2:1842
-944:0:4365
-945:3:2746
-946:0:4365
-947:2:1844
-948:0:4365
-949:3:2747
-950:0:4365
-951:2:1845
-952:2:1849
-953:2:1850
-954:2:1858
-955:2:1859
-956:2:1863
-957:2:1864
-958:2:1858
-959:2:1859
-960:2:1863
-961:2:1864
-962:2:1872
-963:2:1877
-964:2:1881
-965:2:1882
-966:2:1889
-967:2:1890
-968:2:1901
-969:2:1902
-970:2:1903
-971:2:1901
-972:2:1902
-973:2:1903
-974:2:1914
-975:2:1919
-976:2:1920
-977:0:4365
-978:2:1932
-979:0:4365
-980:3:2746
-981:0:4365
-982:2:1934
-983:0:4365
-984:3:2747
-985:0:4365
-986:2:1935
-987:0:4365
-988:2:1936
-989:0:4365
-990:2:2129
-991:0:4365
-992:2:2130
-993:0:4365
-994:2:2134
-995:0:4365
-996:3:2746
-997:0:4365
-998:2:2136
-999:0:4365
-1000:3:2747
-1001:0:4365
-1002:2:2137
-1003:2:2141
-1004:2:2142
-1005:2:2150
-1006:2:2151
-1007:2:2155
-1008:2:2156
-1009:2:2150
-1010:2:2151
-1011:2:2155
-1012:2:2156
-1013:2:2164
-1014:2:2169
-1015:2:2173
-1016:2:2174
-1017:2:2181
-1018:2:2182
-1019:2:2193
-1020:2:2194
-1021:2:2195
-1022:2:2193
-1023:2:2194
-1024:2:2195
-1025:2:2206
-1026:2:2211
-1027:2:2212
-1028:0:4365
-1029:2:2224
-1030:0:4365
-1031:3:2746
-1032:0:4365
-1033:2:2226
-1034:0:4365
-1035:3:2747
-1036:0:4365
-1037:2:1936
-1038:0:4365
-1039:2:2129
-1040:0:4365
-1041:2:2130
-1042:0:4365
-1043:2:2134
-1044:0:4365
-1045:3:2746
-1046:0:4365
-1047:2:2136
-1048:0:4365
-1049:3:2747
-1050:0:4365
-1051:2:2137
-1052:2:2141
-1053:2:2142
-1054:2:2150
-1055:2:2151
-1056:2:2155
-1057:2:2156
-1058:2:2150
-1059:2:2151
-1060:2:2152
-1061:2:2164
-1062:2:2169
-1063:2:2173
-1064:2:2174
-1065:2:2181
-1066:2:2182
-1067:2:2193
-1068:2:2194
-1069:2:2195
-1070:2:2193
-1071:2:2194
-1072:2:2195
-1073:2:2206
-1074:2:2211
-1075:2:2212
-1076:0:4365
-1077:2:2224
-1078:0:4365
-1079:3:2746
-1080:0:4365
-1081:2:2226
-1082:0:4365
-1083:3:2747
-1084:0:4365
-1085:2:2230
-1086:0:4365
-1087:3:2746
-1088:0:4365
-1089:2:2235
-1090:2:2239
-1091:2:2240
-1092:2:2248
-1093:2:2249
-1094:2:2253
-1095:2:2254
-1096:2:2248
-1097:2:2249
-1098:2:2250
-1099:2:2262
-1100:2:2267
-1101:2:2271
-1102:2:2272
-1103:2:2279
-1104:2:2280
-1105:2:2291
-1106:2:2292
-1107:2:2293
-1108:2:2291
-1109:2:2292
-1110:2:2293
-1111:2:2304
-1112:2:2309
-1113:2:2310
-1114:0:4365
-1115:3:2747
-1116:0:4365
-1117:2:2322
-1118:0:4365
-1119:2:1169
-1120:0:4365
-1121:3:2746
-1122:0:4365
-1123:2:1170
-1124:0:4365
-1125:3:2747
-1126:0:4365
-1127:3:2748
-1128:0:4365
-1129:3:2754
-1130:0:4365
-1131:3:2755
-1132:3:2759
-1133:3:2760
-1134:3:2768
-1135:3:2769
-1136:3:2773
-1137:3:2774
-1138:3:2768
-1139:3:2769
-1140:3:2773
-1141:3:2774
-1142:3:2782
-1143:3:2787
-1144:3:2791
-1145:3:2792
-1146:3:2799
-1147:3:2800
-1148:3:2811
-1149:3:2812
-1150:3:2813
-1151:3:2811
-1152:3:2812
-1153:3:2813
-1154:3:2824
-1155:3:2829
-1156:3:2830
-1157:0:4365
-1158:3:2842
-1159:0:4365
-1160:3:2843
-1161:0:4365
-1162:2:1173
-1163:0:4365
-1164:3:2844
-1165:0:4365
-1166:2:1179
-1167:0:4365
-1168:2:1180
-1169:0:4365
-1170:3:2843
-1171:0:4365
-1172:2:1181
-1173:2:1185
-1174:2:1186
-1175:2:1194
-1176:2:1195
-1177:2:1199
-1178:2:1200
-1179:2:1194
-1180:2:1195
-1181:2:1199
-1182:2:1200
-1183:2:1208
-1184:2:1213
-1185:2:1217
-1186:2:1218
-1187:2:1225
-1188:2:1226
-1189:2:1237
-1190:2:1238
-1191:2:1239
-1192:2:1237
-1193:2:1238
-1194:2:1239
-1195:2:1250
-1196:2:1255
-1197:2:1256
-1198:0:4365
-1199:3:2844
-1200:0:4365
-1201:2:1268
-1202:0:4365
-1203:3:2843
-1204:0:4365
-1205:2:1270
-1206:0:4365
-1207:3:2844
-1208:0:4365
-1209:2:1271
-1210:2:1275
-1211:2:1276
-1212:2:1284
-1213:2:1285
-1214:2:1289
-1215:2:1290
-1216:2:1284
-1217:2:1285
-1218:2:1289
-1219:2:1290
-1220:2:1298
-1221:2:1303
-1222:2:1307
-1223:2:1308
-1224:2:1315
-1225:2:1316
-1226:2:1327
-1227:2:1328
-1228:2:1329
-1229:2:1327
-1230:2:1328
-1231:2:1329
-1232:2:1340
-1233:2:1345
-1234:2:1346
-1235:0:4365
-1236:2:1358
-1237:0:4365
-1238:2:1360
-1239:0:4365
-1240:3:2843
-1241:0:4365
-1242:2:1361
-1243:0:4365
-1244:3:2844
-1245:0:4365
-1246:2:1362
-1247:2:1366
-1248:2:1367
-1249:2:1375
-1250:2:1376
-1251:2:1380
-1252:2:1381
-1253:2:1375
-1254:2:1376
-1255:2:1380
-1256:2:1381
-1257:2:1389
-1258:2:1394
-1259:2:1398
-1260:2:1399
-1261:2:1406
-1262:2:1407
-1263:2:1418
-1264:2:1419
-1265:2:1420
-1266:2:1418
-1267:2:1419
-1268:2:1420
-1269:2:1431
-1270:2:1436
-1271:2:1437
-1272:0:4365
-1273:2:1449
-1274:0:4365
-1275:3:2843
-1276:0:4365
-1277:2:1451
-1278:0:4365
-1279:3:2844
-1280:0:4365
-1281:2:1652
-1282:0:4365
-1283:2:1653
-1284:0:4365
-1285:2:1657
-1286:0:4365
-1287:2:1180
-1288:0:4365
-1289:3:2843
-1290:0:4365
-1291:2:1181
-1292:2:1185
-1293:2:1186
-1294:2:1194
-1295:2:1195
-1296:2:1199
-1297:2:1200
-1298:2:1194
-1299:2:1195
-1300:2:1196
-1301:2:1208
-1302:2:1213
-1303:2:1217
-1304:2:1218
-1305:2:1225
-1306:2:1226
-1307:2:1237
-1308:2:1238
-1309:2:1239
-1310:2:1237
-1311:2:1238
-1312:2:1239
-1313:2:1250
-1314:2:1255
-1315:2:1256
-1316:0:4365
-1317:3:2844
-1318:0:4365
-1319:2:1268
-1320:0:4365
-1321:3:2843
-1322:0:4365
-1323:2:1270
-1324:0:4365
-1325:3:2844
-1326:0:4365
-1327:2:1271
-1328:2:1275
-1329:2:1276
-1330:2:1284
-1331:2:1285
-1332:2:1289
-1333:2:1290
-1334:2:1284
-1335:2:1285
-1336:2:1289
-1337:2:1290
-1338:2:1298
-1339:2:1303
-1340:2:1307
-1341:2:1308
-1342:2:1315
-1343:2:1316
-1344:2:1327
-1345:2:1328
-1346:2:1329
-1347:2:1327
-1348:2:1328
-1349:2:1329
-1350:2:1340
-1351:2:1345
-1352:2:1346
-1353:0:4365
-1354:2:1358
-1355:0:4365
-1356:2:1454
-1357:0:4365
-1358:3:2843
-1359:0:4365
-1360:2:1455
-1361:0:4365
-1362:3:2844
-1363:0:4365
-1364:2:1652
-1365:0:4365
-1366:2:1653
-1367:0:4365
-1368:2:1657
-1369:0:4365
-1370:2:1660
-1371:0:4365
-1372:3:2843
-1373:0:4365
-1374:2:1665
-1375:2:1669
-1376:2:1670
-1377:2:1678
-1378:2:1679
-1379:2:1683
-1380:2:1684
-1381:2:1678
-1382:2:1679
-1383:2:1680
-1384:2:1692
-1385:2:1697
-1386:2:1701
-1387:2:1702
-1388:2:1709
-1389:2:1710
-1390:2:1721
-1391:2:1722
-1392:2:1723
-1393:2:1721
-1394:2:1722
-1395:2:1723
-1396:2:1734
-1397:2:1739
-1398:2:1740
-1399:0:4365
-1400:3:2844
-1401:0:4365
-1402:2:1752
-1403:0:4365
-1404:3:2843
-1405:0:4365
-1406:2:1754
-1407:0:4365
-1408:3:2844
-1409:0:4365
-1410:2:1755
-1411:2:1759
-1412:2:1760
-1413:2:1768
-1414:2:1769
-1415:2:1773
-1416:2:1774
-1417:2:1768
-1418:2:1769
-1419:2:1773
-1420:2:1774
-1421:2:1782
-1422:2:1787
-1423:2:1791
-1424:2:1792
-1425:2:1799
-1426:2:1800
-1427:2:1811
-1428:2:1812
-1429:2:1813
-1430:2:1811
-1431:2:1812
-1432:2:1813
-1433:2:1824
-1434:2:1829
-1435:2:1830
-1436:0:4365
-1437:2:1842
-1438:0:4365
-1439:3:2843
-1440:0:4365
-1441:2:1844
-1442:0:4365
-1443:3:2844
-1444:0:4365
-1445:2:1845
-1446:2:1849
-1447:2:1850
-1448:2:1858
-1449:2:1859
-1450:2:1863
-1451:2:1864
-1452:2:1858
-1453:2:1859
-1454:2:1863
-1455:2:1864
-1456:2:1872
-1457:2:1877
-1458:2:1881
-1459:2:1882
-1460:2:1889
-1461:2:1890
-1462:2:1901
-1463:2:1902
-1464:2:1903
-1465:2:1901
-1466:2:1902
-1467:2:1903
-1468:2:1914
-1469:2:1919
-1470:2:1920
-1471:0:4365
-1472:2:1932
-1473:0:4365
-1474:3:2843
-1475:0:4365
-1476:2:1934
-1477:0:4365
-1478:3:2844
-1479:0:4365
-1480:2:1935
-1481:0:4365
-1482:2:1936
-1483:0:4365
-1484:2:2129
-1485:0:4365
-1486:2:2130
-1487:0:4365
-1488:2:2134
-1489:0:4365
-1490:3:2843
-1491:0:4365
-1492:2:2136
-1493:0:4365
-1494:3:2844
-1495:0:4365
-1496:2:2137
-1497:2:2141
-1498:2:2142
-1499:2:2150
-1500:2:2151
-1501:2:2155
-1502:2:2156
-1503:2:2150
-1504:2:2151
-1505:2:2155
-1506:2:2156
-1507:2:2164
-1508:2:2169
-1509:2:2173
-1510:2:2174
-1511:2:2181
-1512:2:2182
-1513:2:2193
-1514:2:2194
-1515:2:2195
-1516:2:2193
-1517:2:2194
-1518:2:2195
-1519:2:2206
-1520:2:2211
-1521:2:2212
-1522:0:4365
-1523:2:2224
-1524:0:4365
-1525:3:2843
-1526:0:4365
-1527:2:2226
-1528:0:4365
-1529:3:2844
-1530:0:4365
-1531:2:1936
-1532:0:4365
-1533:2:2129
-1534:0:4365
-1535:2:2130
-1536:0:4365
-1537:2:2134
-1538:0:4365
-1539:3:2843
-1540:0:4365
-1541:2:2136
-1542:0:4365
-1543:3:2844
-1544:0:4365
-1545:2:2137
-1546:2:2141
-1547:2:2142
-1548:2:2150
-1549:2:2151
-1550:2:2155
-1551:2:2156
-1552:2:2150
-1553:2:2151
-1554:2:2152
-1555:2:2164
-1556:2:2169
-1557:2:2173
-1558:2:2174
-1559:2:2181
-1560:2:2182
-1561:2:2193
-1562:2:2194
-1563:2:2195
-1564:2:2193
-1565:2:2194
-1566:2:2195
-1567:2:2206
-1568:2:2211
-1569:2:2212
-1570:0:4365
-1571:2:2224
-1572:0:4365
-1573:3:2843
-1574:0:4365
-1575:2:2226
-1576:0:4365
-1577:3:2844
-1578:0:4365
-1579:2:2230
-1580:0:4365
-1581:3:2843
-1582:0:4365
-1583:2:2235
-1584:2:2239
-1585:2:2240
-1586:2:2248
-1587:2:2249
-1588:2:2253
-1589:2:2254
-1590:2:2248
-1591:2:2249
-1592:2:2250
-1593:2:2262
-1594:2:2267
-1595:2:2271
-1596:2:2272
-1597:2:2279
-1598:2:2280
-1599:2:2291
-1600:2:2292
-1601:2:2293
-1602:2:2291
-1603:2:2292
-1604:2:2293
-1605:2:2304
-1606:2:2309
-1607:2:2310
-1608:0:4365
-1609:3:2844
-1610:0:4365
-1611:2:2322
-1612:0:4365
-1613:2:1169
-1614:0:4365
-1615:3:2843
-1616:0:4365
-1617:2:1170
-1618:0:4365
-1619:3:2844
-1620:0:4365
-1621:3:2845
-1622:0:4365
-1623:3:2851
-1624:0:4365
-1625:3:2854
-1626:3:2855
-1627:3:2867
-1628:3:2868
-1629:3:2872
-1630:3:2873
-1631:3:2867
-1632:3:2868
-1633:3:2872
-1634:3:2873
-1635:3:2881
-1636:3:2886
-1637:3:2890
-1638:3:2891
-1639:3:2898
-1640:3:2899
-1641:3:2910
-1642:3:2911
-1643:3:2912
-1644:3:2910
-1645:3:2911
-1646:3:2912
-1647:3:2923
-1648:3:2928
-1649:3:2929
-1650:0:4365
-1651:3:2941
-1652:0:4365
-1653:3:2942
-1654:0:4365
-1655:2:1173
-1656:0:4365
-1657:3:2943
-1658:0:4365
-1659:2:1179
-1660:0:4365
-1661:2:1180
-1662:0:4365
-1663:3:2942
-1664:0:4365
-1665:2:1181
-1666:2:1185
-1667:2:1186
-1668:2:1194
-1669:2:1195
-1670:2:1199
-1671:2:1200
-1672:2:1194
-1673:2:1195
-1674:2:1199
-1675:2:1200
-1676:2:1208
-1677:2:1213
-1678:2:1217
-1679:2:1218
-1680:2:1225
-1681:2:1226
-1682:2:1237
-1683:2:1238
-1684:2:1239
-1685:2:1237
-1686:2:1238
-1687:2:1239
-1688:2:1250
-1689:2:1255
-1690:2:1256
-1691:0:4365
-1692:3:2943
-1693:0:4365
-1694:2:1268
-1695:0:4365
-1696:3:2942
-1697:0:4365
-1698:2:1270
-1699:0:4365
-1700:3:2943
-1701:0:4365
-1702:2:1271
-1703:2:1275
-1704:2:1276
-1705:2:1284
-1706:2:1285
-1707:2:1289
-1708:2:1290
-1709:2:1284
-1710:2:1285
-1711:2:1289
-1712:2:1290
-1713:2:1298
-1714:2:1303
-1715:2:1307
-1716:2:1308
-1717:2:1315
-1718:2:1316
-1719:2:1327
-1720:2:1328
-1721:2:1329
-1722:2:1327
-1723:2:1328
-1724:2:1329
-1725:2:1340
-1726:2:1345
-1727:2:1346
-1728:0:4365
-1729:2:1358
-1730:0:4365
-1731:2:1360
-1732:0:4365
-1733:3:2942
-1734:0:4365
-1735:2:1361
-1736:0:4365
-1737:3:2943
-1738:0:4365
-1739:2:1362
-1740:2:1366
-1741:2:1367
-1742:2:1375
-1743:2:1376
-1744:2:1380
-1745:2:1381
-1746:2:1375
-1747:2:1376
-1748:2:1380
-1749:2:1381
-1750:2:1389
-1751:2:1394
-1752:2:1398
-1753:2:1399
-1754:2:1406
-1755:2:1407
-1756:2:1418
-1757:2:1419
-1758:2:1420
-1759:2:1418
-1760:2:1419
-1761:2:1420
-1762:2:1431
-1763:2:1436
-1764:2:1437
-1765:0:4365
-1766:2:1449
-1767:0:4365
-1768:3:2942
-1769:0:4365
-1770:2:1451
-1771:0:4365
-1772:3:2943
-1773:0:4365
-1774:2:1652
-1775:0:4365
-1776:2:1653
-1777:0:4365
-1778:2:1657
-1779:0:4365
-1780:2:1180
-1781:0:4365
-1782:3:2942
-1783:0:4365
-1784:2:1181
-1785:2:1185
-1786:2:1186
-1787:2:1194
-1788:2:1195
-1789:2:1199
-1790:2:1200
-1791:2:1194
-1792:2:1195
-1793:2:1196
-1794:2:1208
-1795:2:1213
-1796:2:1217
-1797:2:1218
-1798:2:1225
-1799:2:1226
-1800:2:1237
-1801:2:1238
-1802:2:1239
-1803:2:1237
-1804:2:1238
-1805:2:1239
-1806:2:1250
-1807:2:1255
-1808:2:1256
-1809:0:4365
-1810:3:2943
-1811:0:4365
-1812:2:1268
-1813:0:4365
-1814:3:2942
-1815:0:4365
-1816:2:1270
-1817:0:4365
-1818:3:2943
-1819:0:4365
-1820:2:1271
-1821:2:1275
-1822:2:1276
-1823:2:1284
-1824:2:1285
-1825:2:1289
-1826:2:1290
-1827:2:1284
-1828:2:1285
-1829:2:1289
-1830:2:1290
-1831:2:1298
-1832:2:1303
-1833:2:1307
-1834:2:1308
-1835:2:1315
-1836:2:1316
-1837:2:1327
-1838:2:1328
-1839:2:1329
-1840:2:1327
-1841:2:1328
-1842:2:1329
-1843:2:1340
-1844:2:1345
-1845:2:1346
-1846:0:4365
-1847:2:1358
-1848:0:4365
-1849:2:1454
-1850:0:4365
-1851:3:2942
-1852:0:4365
-1853:2:1455
-1854:0:4365
-1855:3:2943
-1856:0:4365
-1857:2:1652
-1858:0:4365
-1859:2:1653
-1860:0:4365
-1861:2:1657
-1862:0:4365
-1863:2:1660
-1864:0:4365
-1865:3:2942
-1866:0:4365
-1867:2:1665
-1868:2:1669
-1869:2:1670
-1870:2:1678
-1871:2:1679
-1872:2:1683
-1873:2:1684
-1874:2:1678
-1875:2:1679
-1876:2:1680
-1877:2:1692
-1878:2:1697
-1879:2:1701
-1880:2:1702
-1881:2:1709
-1882:2:1710
-1883:2:1721
-1884:2:1722
-1885:2:1723
-1886:2:1721
-1887:2:1722
-1888:2:1723
-1889:2:1734
-1890:2:1739
-1891:2:1740
-1892:0:4365
-1893:3:2943
-1894:0:4365
-1895:2:1752
-1896:0:4365
-1897:3:2942
-1898:0:4365
-1899:2:1754
-1900:0:4365
-1901:3:2943
-1902:0:4365
-1903:2:1755
-1904:2:1759
-1905:2:1760
-1906:2:1768
-1907:2:1769
-1908:2:1773
-1909:2:1774
-1910:2:1768
-1911:2:1769
-1912:2:1773
-1913:2:1774
-1914:2:1782
-1915:2:1787
-1916:2:1791
-1917:2:1792
-1918:2:1799
-1919:2:1800
-1920:2:1811
-1921:2:1812
-1922:2:1813
-1923:2:1811
-1924:2:1812
-1925:2:1813
-1926:2:1824
-1927:2:1829
-1928:2:1830
-1929:0:4365
-1930:2:1842
-1931:0:4365
-1932:3:2942
-1933:0:4365
-1934:2:1844
-1935:0:4365
-1936:3:2943
-1937:0:4365
-1938:2:1845
-1939:2:1849
-1940:2:1850
-1941:2:1858
-1942:2:1859
-1943:2:1863
-1944:2:1864
-1945:2:1858
-1946:2:1859
-1947:2:1863
-1948:2:1864
-1949:2:1872
-1950:2:1877
-1951:2:1881
-1952:2:1882
-1953:2:1889
-1954:2:1890
-1955:2:1901
-1956:2:1902
-1957:2:1903
-1958:2:1901
-1959:2:1902
-1960:2:1903
-1961:2:1914
-1962:2:1919
-1963:2:1920
-1964:0:4365
-1965:2:1932
-1966:0:4365
-1967:3:2942
-1968:0:4365
-1969:2:1934
-1970:0:4365
-1971:3:2943
-1972:0:4365
-1973:2:1935
-1974:0:4365
-1975:2:1936
-1976:0:4365
-1977:2:2129
-1978:0:4365
-1979:2:2130
-1980:0:4365
-1981:2:2134
-1982:0:4365
-1983:3:2942
-1984:0:4365
-1985:2:2136
-1986:0:4365
-1987:3:2943
-1988:0:4365
-1989:2:2137
-1990:2:2141
-1991:2:2142
-1992:2:2150
-1993:2:2151
-1994:2:2155
-1995:2:2156
-1996:2:2150
-1997:2:2151
-1998:2:2155
-1999:2:2156
-2000:2:2164
-2001:2:2169
-2002:2:2173
-2003:2:2174
-2004:2:2181
-2005:2:2182
-2006:2:2193
-2007:2:2194
-2008:2:2195
-2009:2:2193
-2010:2:2194
-2011:2:2195
-2012:2:2206
-2013:2:2211
-2014:2:2212
-2015:0:4365
-2016:2:2224
-2017:0:4365
-2018:3:2942
-2019:0:4365
-2020:2:2226
-2021:0:4365
-2022:3:2943
-2023:0:4365
-2024:2:1936
-2025:0:4365
-2026:2:2129
-2027:0:4365
-2028:2:2130
-2029:0:4365
-2030:2:2134
-2031:0:4365
-2032:3:2942
-2033:0:4365
-2034:2:2136
-2035:0:4365
-2036:3:2943
-2037:0:4365
-2038:2:2137
-2039:2:2141
-2040:2:2142
-2041:2:2150
-2042:2:2151
-2043:2:2155
-2044:2:2156
-2045:2:2150
-2046:2:2151
-2047:2:2152
-2048:2:2164
-2049:2:2169
-2050:2:2173
-2051:2:2174
-2052:2:2181
-2053:2:2182
-2054:2:2193
-2055:2:2194
-2056:2:2195
-2057:2:2193
-2058:2:2194
-2059:2:2195
-2060:2:2206
-2061:2:2211
-2062:2:2212
-2063:0:4365
-2064:2:2224
-2065:0:4365
-2066:3:2942
-2067:0:4365
-2068:2:2226
-2069:0:4365
-2070:3:2943
-2071:0:4365
-2072:2:2230
-2073:0:4365
-2074:3:2942
-2075:0:4365
-2076:2:2235
-2077:2:2239
-2078:2:2240
-2079:2:2248
-2080:2:2249
-2081:2:2253
-2082:2:2254
-2083:2:2248
-2084:2:2249
-2085:2:2250
-2086:2:2262
-2087:2:2267
-2088:2:2271
-2089:2:2272
-2090:2:2279
-2091:2:2280
-2092:2:2291
-2093:2:2292
-2094:2:2293
-2095:2:2291
-2096:2:2292
-2097:2:2293
-2098:2:2304
-2099:2:2309
-2100:2:2310
-2101:0:4365
-2102:3:2943
-2103:0:4365
-2104:2:2322
-2105:0:4365
-2106:2:1169
-2107:0:4365
-2108:3:2942
-2109:0:4365
-2110:2:1170
-2111:0:4365
-2112:3:2943
-2113:0:4365
-2114:3:2944
-2115:0:4365
-2116:3:2950
-2117:0:4365
-2118:3:2951
-2119:0:4365
-2120:3:2952
-2121:0:4365
-2122:3:2953
-2123:0:4365
-2124:3:2954
-2125:3:2958
-2126:3:2959
-2127:3:2967
-2128:3:2968
-2129:3:2972
-2130:3:2973
-2131:3:2967
-2132:3:2968
-2133:3:2972
-2134:3:2973
-2135:3:2981
-2136:3:2986
-2137:3:2990
-2138:3:2991
-2139:3:2998
-2140:3:2999
-2141:3:3010
-2142:3:3011
-2143:3:3012
-2144:3:3010
-2145:3:3011
-2146:3:3012
-2147:3:3023
-2148:3:3028
-2149:3:3029
-2150:0:4365
-2151:3:3041
-2152:0:4365
-2153:3:3042
-2154:0:4365
-2155:2:1173
-2156:0:4365
-2157:3:3043
-2158:0:4365
-2159:2:1179
-2160:0:4365
-2161:2:1180
-2162:0:4365
-2163:3:3042
-2164:0:4365
-2165:2:1181
-2166:2:1185
-2167:2:1186
-2168:2:1194
-2169:2:1195
-2170:2:1199
-2171:2:1200
-2172:2:1194
-2173:2:1195
-2174:2:1199
-2175:2:1200
-2176:2:1208
-2177:2:1213
-2178:2:1217
-2179:2:1218
-2180:2:1225
-2181:2:1226
-2182:2:1237
-2183:2:1238
-2184:2:1239
-2185:2:1237
-2186:2:1238
-2187:2:1239
-2188:2:1250
-2189:2:1255
-2190:2:1256
-2191:0:4365
-2192:3:3043
-2193:0:4365
-2194:2:1268
-2195:0:4365
-2196:3:3042
-2197:0:4365
-2198:2:1270
-2199:0:4365
-2200:3:3043
-2201:0:4365
-2202:2:1271
-2203:2:1275
-2204:2:1276
-2205:2:1284
-2206:2:1285
-2207:2:1289
-2208:2:1290
-2209:2:1284
-2210:2:1285
-2211:2:1289
-2212:2:1290
-2213:2:1298
-2214:2:1303
-2215:2:1307
-2216:2:1308
-2217:2:1315
-2218:2:1316
-2219:2:1327
-2220:2:1328
-2221:2:1329
-2222:2:1327
-2223:2:1328
-2224:2:1329
-2225:2:1340
-2226:2:1345
-2227:2:1346
-2228:0:4365
-2229:2:1358
-2230:0:4365
-2231:2:1360
-2232:0:4365
-2233:3:3042
-2234:0:4365
-2235:2:1361
-2236:0:4365
-2237:3:3043
-2238:0:4365
-2239:2:1362
-2240:2:1366
-2241:2:1367
-2242:2:1375
-2243:2:1376
-2244:2:1380
-2245:2:1381
-2246:2:1375
-2247:2:1376
-2248:2:1380
-2249:2:1381
-2250:2:1389
-2251:2:1394
-2252:2:1398
-2253:2:1399
-2254:2:1406
-2255:2:1407
-2256:2:1418
-2257:2:1419
-2258:2:1420
-2259:2:1418
-2260:2:1419
-2261:2:1420
-2262:2:1431
-2263:2:1436
-2264:2:1437
-2265:0:4365
-2266:2:1449
-2267:0:4365
-2268:3:3042
-2269:0:4365
-2270:2:1451
-2271:0:4365
-2272:3:3043
-2273:0:4365
-2274:2:1652
-2275:0:4365
-2276:2:1653
-2277:0:4365
-2278:2:1657
-2279:0:4365
-2280:2:1180
-2281:0:4365
-2282:3:3042
-2283:0:4365
-2284:2:1181
-2285:2:1185
-2286:2:1186
-2287:2:1194
-2288:2:1195
-2289:2:1199
-2290:2:1200
-2291:2:1194
-2292:2:1195
-2293:2:1196
-2294:2:1208
-2295:2:1213
-2296:2:1217
-2297:2:1218
-2298:2:1225
-2299:2:1226
-2300:2:1237
-2301:2:1238
-2302:2:1239
-2303:2:1237
-2304:2:1238
-2305:2:1239
-2306:2:1250
-2307:2:1255
-2308:2:1256
-2309:0:4365
-2310:3:3043
-2311:0:4365
-2312:2:1268
-2313:0:4365
-2314:3:3042
-2315:0:4365
-2316:2:1270
-2317:0:4365
-2318:3:3043
-2319:0:4365
-2320:2:1271
-2321:2:1275
-2322:2:1276
-2323:2:1284
-2324:2:1285
-2325:2:1289
-2326:2:1290
-2327:2:1284
-2328:2:1285
-2329:2:1289
-2330:2:1290
-2331:2:1298
-2332:2:1303
-2333:2:1307
-2334:2:1308
-2335:2:1315
-2336:2:1316
-2337:2:1327
-2338:2:1328
-2339:2:1329
-2340:2:1327
-2341:2:1328
-2342:2:1329
-2343:2:1340
-2344:2:1345
-2345:2:1346
-2346:0:4365
-2347:2:1358
-2348:0:4365
-2349:2:1454
-2350:0:4365
-2351:3:3042
-2352:0:4365
-2353:2:1455
-2354:0:4365
-2355:3:3043
-2356:0:4365
-2357:2:1652
-2358:0:4365
-2359:2:1653
-2360:0:4365
-2361:2:1657
-2362:0:4365
-2363:2:1660
-2364:0:4365
-2365:3:3042
-2366:0:4365
-2367:2:1665
-2368:2:1669
-2369:2:1670
-2370:2:1678
-2371:2:1679
-2372:2:1683
-2373:2:1684
-2374:2:1678
-2375:2:1679
-2376:2:1680
-2377:2:1692
-2378:2:1697
-2379:2:1701
-2380:2:1702
-2381:2:1709
-2382:2:1710
-2383:2:1721
-2384:2:1722
-2385:2:1723
-2386:2:1721
-2387:2:1722
-2388:2:1723
-2389:2:1734
-2390:2:1739
-2391:2:1740
-2392:0:4365
-2393:3:3043
-2394:0:4365
-2395:2:1752
-2396:0:4365
-2397:3:3042
-2398:0:4365
-2399:2:1754
-2400:0:4365
-2401:3:3043
-2402:0:4365
-2403:2:1755
-2404:2:1759
-2405:2:1760
-2406:2:1768
-2407:2:1769
-2408:2:1773
-2409:2:1774
-2410:2:1768
-2411:2:1769
-2412:2:1773
-2413:2:1774
-2414:2:1782
-2415:2:1787
-2416:2:1791
-2417:2:1792
-2418:2:1799
-2419:2:1800
-2420:2:1811
-2421:2:1812
-2422:2:1813
-2423:2:1811
-2424:2:1812
-2425:2:1813
-2426:2:1824
-2427:2:1829
-2428:2:1830
-2429:0:4365
-2430:2:1842
-2431:0:4365
-2432:3:3042
-2433:0:4365
-2434:2:1844
-2435:0:4365
-2436:3:3043
-2437:0:4365
-2438:2:1845
-2439:2:1849
-2440:2:1850
-2441:2:1858
-2442:2:1859
-2443:2:1863
-2444:2:1864
-2445:2:1858
-2446:2:1859
-2447:2:1863
-2448:2:1864
-2449:2:1872
-2450:2:1877
-2451:2:1881
-2452:2:1882
-2453:2:1889
-2454:2:1890
-2455:2:1901
-2456:2:1902
-2457:2:1903
-2458:2:1901
-2459:2:1902
-2460:2:1903
-2461:2:1914
-2462:2:1919
-2463:2:1920
-2464:0:4365
-2465:2:1932
-2466:0:4365
-2467:3:3042
-2468:0:4365
-2469:2:1934
-2470:0:4365
-2471:3:3043
-2472:0:4365
-2473:2:1935
-2474:0:4365
-2475:2:1936
-2476:0:4365
-2477:2:2129
-2478:0:4365
-2479:2:2130
-2480:0:4365
-2481:2:2134
-2482:0:4365
-2483:3:3042
-2484:0:4365
-2485:2:2136
-2486:0:4365
-2487:3:3043
-2488:0:4365
-2489:2:2137
-2490:2:2141
-2491:2:2142
-2492:2:2150
-2493:2:2151
-2494:2:2155
-2495:2:2156
-2496:2:2150
-2497:2:2151
-2498:2:2155
-2499:2:2156
-2500:2:2164
-2501:2:2169
-2502:2:2173
-2503:2:2174
-2504:2:2181
-2505:2:2182
-2506:2:2193
-2507:2:2194
-2508:2:2195
-2509:2:2193
-2510:2:2194
-2511:2:2195
-2512:2:2206
-2513:2:2211
-2514:2:2212
-2515:0:4365
-2516:2:2224
-2517:0:4365
-2518:3:3042
-2519:0:4365
-2520:2:2226
-2521:0:4365
-2522:3:3043
-2523:0:4365
-2524:2:1936
-2525:0:4365
-2526:2:2129
-2527:0:4365
-2528:2:2130
-2529:0:4365
-2530:2:2134
-2531:0:4365
-2532:3:3042
-2533:0:4365
-2534:2:2136
-2535:0:4365
-2536:3:3043
-2537:0:4365
-2538:2:2137
-2539:2:2141
-2540:2:2142
-2541:2:2150
-2542:2:2151
-2543:2:2155
-2544:2:2156
-2545:2:2150
-2546:2:2151
-2547:2:2152
-2548:2:2164
-2549:2:2169
-2550:2:2173
-2551:2:2174
-2552:2:2181
-2553:2:2182
-2554:2:2193
-2555:2:2194
-2556:2:2195
-2557:2:2193
-2558:2:2194
-2559:2:2195
-2560:2:2206
-2561:2:2211
-2562:2:2212
-2563:0:4365
-2564:2:2224
-2565:0:4365
-2566:3:3042
-2567:0:4365
-2568:2:2226
-2569:0:4365
-2570:3:3043
-2571:0:4365
-2572:2:2230
-2573:0:4365
-2574:3:3042
-2575:0:4365
-2576:2:2235
-2577:2:2239
-2578:2:2240
-2579:2:2248
-2580:2:2249
-2581:2:2253
-2582:2:2254
-2583:2:2248
-2584:2:2249
-2585:2:2250
-2586:2:2262
-2587:2:2267
-2588:2:2271
-2589:2:2272
-2590:2:2279
-2591:2:2280
-2592:2:2291
-2593:2:2292
-2594:2:2293
-2595:2:2291
-2596:2:2292
-2597:2:2293
-2598:2:2304
-2599:2:2309
-2600:2:2310
-2601:0:4365
-2602:3:3043
-2603:0:4365
-2604:2:2322
-2605:0:4365
-2606:2:1169
-2607:0:4365
-2608:3:3042
-2609:0:4365
-2610:2:1170
-2611:0:4365
-2612:3:3043
-2613:0:4365
-2614:3:3044
-2615:0:4365
-2616:3:3257
-2617:0:4365
-2618:3:3265
-2619:0:4365
-2620:3:3266
-2621:3:3270
-2622:3:3271
-2623:3:3279
-2624:3:3280
-2625:3:3284
-2626:3:3285
-2627:3:3279
-2628:3:3280
-2629:3:3284
-2630:3:3285
-2631:3:3293
-2632:3:3298
-2633:3:3302
-2634:3:3303
-2635:3:3310
-2636:3:3311
-2637:3:3322
-2638:3:3323
-2639:3:3324
-2640:3:3322
-2641:3:3323
-2642:3:3324
-2643:3:3335
-2644:3:3340
-2645:3:3341
-2646:0:4365
-2647:3:3353
-2648:0:4365
-2649:3:3354
-2650:0:4365
-2651:2:1173
-2652:0:4365
-2653:3:3355
-2654:0:4365
-2655:2:1179
-2656:0:4365
-2657:2:1180
-2658:0:4365
-2659:3:3354
-2660:0:4365
-2661:2:1181
-2662:2:1185
-2663:2:1186
-2664:2:1194
-2665:2:1195
-2666:2:1199
-2667:2:1200
-2668:2:1194
-2669:2:1195
-2670:2:1199
-2671:2:1200
-2672:2:1208
-2673:2:1213
-2674:2:1217
-2675:2:1218
-2676:2:1225
-2677:2:1226
-2678:2:1237
-2679:2:1238
-2680:2:1239
-2681:2:1237
-2682:2:1238
-2683:2:1239
-2684:2:1250
-2685:2:1255
-2686:2:1256
-2687:0:4365
-2688:3:3355
-2689:0:4365
-2690:2:1268
-2691:0:4365
-2692:3:3354
-2693:0:4365
-2694:2:1270
-2695:0:4365
-2696:3:3355
-2697:0:4365
-2698:2:1271
-2699:2:1275
-2700:2:1276
-2701:2:1284
-2702:2:1285
-2703:2:1289
-2704:2:1290
-2705:2:1284
-2706:2:1285
-2707:2:1289
-2708:2:1290
-2709:2:1298
-2710:2:1303
-2711:2:1307
-2712:2:1308
-2713:2:1315
-2714:2:1316
-2715:2:1327
-2716:2:1328
-2717:2:1329
-2718:2:1327
-2719:2:1328
-2720:2:1329
-2721:2:1340
-2722:2:1345
-2723:2:1346
-2724:0:4365
-2725:2:1358
-2726:0:4365
-2727:2:1360
-2728:0:4365
-2729:3:3354
-2730:0:4365
-2731:2:1361
-2732:0:4365
-2733:3:3355
-2734:0:4365
-2735:2:1362
-2736:2:1366
-2737:2:1367
-2738:2:1375
-2739:2:1376
-2740:2:1380
-2741:2:1381
-2742:2:1375
-2743:2:1376
-2744:2:1380
-2745:2:1381
-2746:2:1389
-2747:2:1394
-2748:2:1398
-2749:2:1399
-2750:2:1406
-2751:2:1407
-2752:2:1418
-2753:2:1419
-2754:2:1420
-2755:2:1418
-2756:2:1419
-2757:2:1420
-2758:2:1431
-2759:2:1436
-2760:2:1437
-2761:0:4365
-2762:2:1449
-2763:0:4365
-2764:3:3354
-2765:0:4365
-2766:2:1451
-2767:0:4365
-2768:3:3355
-2769:0:4365
-2770:2:1652
-2771:0:4365
-2772:2:1653
-2773:0:4365
-2774:2:1657
-2775:0:4365
-2776:2:1180
-2777:0:4365
-2778:3:3354
-2779:0:4365
-2780:2:1181
-2781:2:1185
-2782:2:1186
-2783:2:1194
-2784:2:1195
-2785:2:1199
-2786:2:1200
-2787:2:1194
-2788:2:1195
-2789:2:1196
-2790:2:1208
-2791:2:1213
-2792:2:1217
-2793:2:1218
-2794:2:1225
-2795:2:1226
-2796:2:1237
-2797:2:1238
-2798:2:1239
-2799:2:1237
-2800:2:1238
-2801:2:1239
-2802:2:1250
-2803:2:1255
-2804:2:1256
-2805:0:4365
-2806:3:3355
-2807:0:4365
-2808:2:1268
-2809:0:4365
-2810:3:3354
-2811:0:4365
-2812:2:1270
-2813:0:4365
-2814:3:3355
-2815:0:4365
-2816:2:1271
-2817:2:1275
-2818:2:1276
-2819:2:1284
-2820:2:1285
-2821:2:1289
-2822:2:1290
-2823:2:1284
-2824:2:1285
-2825:2:1289
-2826:2:1290
-2827:2:1298
-2828:2:1303
-2829:2:1307
-2830:2:1308
-2831:2:1315
-2832:2:1316
-2833:2:1327
-2834:2:1328
-2835:2:1329
-2836:2:1327
-2837:2:1328
-2838:2:1329
-2839:2:1340
-2840:2:1345
-2841:2:1346
-2842:0:4365
-2843:2:1358
-2844:0:4365
-2845:2:1454
-2846:0:4365
-2847:3:3354
-2848:0:4365
-2849:2:1455
-2850:0:4365
-2851:3:3355
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3354
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3355
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3354
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3355
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3354
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3355
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3354
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3355
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3354
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3355
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3354
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3355
-3019:0:4365
-3020:2:1936
-3021:0:4365
-3022:2:2129
-3023:0:4365
-3024:2:2130
-3025:0:4365
-3026:2:2134
-3027:0:4365
-3028:3:3354
-3029:0:4365
-3030:2:2136
-3031:0:4365
-3032:3:3355
-3033:0:4365
-3034:2:2137
-3035:2:2141
-3036:2:2142
-3037:2:2150
-3038:2:2151
-3039:2:2155
-3040:2:2156
-3041:2:2150
-3042:2:2151
-3043:2:2152
-3044:2:2164
-3045:2:2169
-3046:2:2173
-3047:2:2174
-3048:2:2181
-3049:2:2182
-3050:2:2193
-3051:2:2194
-3052:2:2195
-3053:2:2193
-3054:2:2194
-3055:2:2195
-3056:2:2206
-3057:2:2211
-3058:2:2212
-3059:0:4365
-3060:2:2224
-3061:0:4365
-3062:3:3354
-3063:0:4365
-3064:2:2226
-3065:0:4365
-3066:3:3355
-3067:0:4365
-3068:2:2230
-3069:0:4365
-3070:3:3354
-3071:0:4365
-3072:2:2235
-3073:2:2239
-3074:2:2240
-3075:2:2248
-3076:2:2249
-3077:2:2253
-3078:2:2254
-3079:2:2248
-3080:2:2249
-3081:2:2250
-3082:2:2262
-3083:2:2267
-3084:2:2271
-3085:2:2272
-3086:2:2279
-3087:2:2280
-3088:2:2291
-3089:2:2292
-3090:2:2293
-3091:2:2291
-3092:2:2292
-3093:2:2293
-3094:2:2304
-3095:2:2309
-3096:2:2310
-3097:0:4365
-3098:3:3355
-3099:0:4365
-3100:2:2322
-3101:0:4365
-3102:2:1169
-3103:0:4365
-3104:3:3354
-3105:0:4365
-3106:2:1170
-3107:0:4365
-3108:3:3355
-3109:0:4365
-3110:3:3356
-3111:0:4365
-3112:3:3366
-3113:0:4365
-3114:3:2951
-3115:0:4365
-3116:3:2952
-3117:0:4365
-3118:3:2953
-3119:0:4365
-3120:3:2954
-3121:3:2958
-3122:3:2959
-3123:3:2967
-3124:3:2968
-3125:3:2972
-3126:3:2973
-3127:3:2967
-3128:3:2968
-3129:3:2972
-3130:3:2973
-3131:3:2981
-3132:3:2986
-3133:3:2990
-3134:3:2991
-3135:3:2998
-3136:3:2999
-3137:3:3010
-3138:3:3011
-3139:3:3012
-3140:3:3010
-3141:3:3011
-3142:3:3012
-3143:3:3023
-3144:3:3028
-3145:3:3029
-3146:0:4365
-3147:3:3041
-3148:0:4365
-3149:3:3042
-3150:0:4365
-3151:2:1173
-3152:0:4365
-3153:3:3043
-3154:0:4365
-3155:2:1179
-3156:0:4365
-3157:2:1180
-3158:0:4365
-3159:3:3042
-3160:0:4365
-3161:2:1181
-3162:2:1185
-3163:2:1186
-3164:2:1194
-3165:2:1195
-3166:2:1199
-3167:2:1200
-3168:2:1194
-3169:2:1195
-3170:2:1199
-3171:2:1200
-3172:2:1208
-3173:2:1213
-3174:2:1217
-3175:2:1218
-3176:2:1225
-3177:2:1226
-3178:2:1237
-3179:2:1238
-3180:2:1239
-3181:2:1237
-3182:2:1238
-3183:2:1239
-3184:2:1250
-3185:2:1255
-3186:2:1256
-3187:0:4365
-3188:3:3043
-3189:0:4365
-3190:2:1268
-3191:0:4365
-3192:3:3042
-3193:0:4365
-3194:2:1270
-3195:0:4365
-3196:3:3043
-3197:0:4365
-3198:2:1271
-3199:2:1275
-3200:2:1276
-3201:2:1284
-3202:2:1285
-3203:2:1289
-3204:2:1290
-3205:2:1284
-3206:2:1285
-3207:2:1289
-3208:2:1290
-3209:2:1298
-3210:2:1303
-3211:2:1307
-3212:2:1308
-3213:2:1315
-3214:2:1316
-3215:2:1327
-3216:2:1328
-3217:2:1329
-3218:2:1327
-3219:2:1328
-3220:2:1329
-3221:2:1340
-3222:2:1345
-3223:2:1346
-3224:0:4365
-3225:2:1358
-3226:0:4365
-3227:2:1360
-3228:0:4365
-3229:3:3042
-3230:0:4365
-3231:2:1361
-3232:0:4365
-3233:3:3043
-3234:0:4365
-3235:2:1362
-3236:2:1366
-3237:2:1367
-3238:2:1375
-3239:2:1376
-3240:2:1380
-3241:2:1381
-3242:2:1375
-3243:2:1376
-3244:2:1380
-3245:2:1381
-3246:2:1389
-3247:2:1394
-3248:2:1398
-3249:2:1399
-3250:2:1406
-3251:2:1407
-3252:2:1418
-3253:2:1419
-3254:2:1420
-3255:2:1418
-3256:2:1419
-3257:2:1420
-3258:2:1431
-3259:2:1436
-3260:2:1437
-3261:0:4365
-3262:2:1449
-3263:0:4365
-3264:3:3042
-3265:0:4365
-3266:2:1451
-3267:0:4365
-3268:3:3043
-3269:0:4365
-3270:2:1652
-3271:0:4365
-3272:2:1653
-3273:0:4365
-3274:2:1657
-3275:0:4365
-3276:2:1180
-3277:0:4365
-3278:3:3042
-3279:0:4365
-3280:2:1181
-3281:2:1185
-3282:2:1186
-3283:2:1194
-3284:2:1195
-3285:2:1199
-3286:2:1200
-3287:2:1194
-3288:2:1195
-3289:2:1196
-3290:2:1208
-3291:2:1213
-3292:2:1217
-3293:2:1218
-3294:2:1225
-3295:2:1226
-3296:2:1237
-3297:2:1238
-3298:2:1239
-3299:2:1237
-3300:2:1238
-3301:2:1239
-3302:2:1250
-3303:2:1255
-3304:2:1256
-3305:0:4365
-3306:3:3043
-3307:0:4365
-3308:2:1268
-3309:0:4365
-3310:3:3042
-3311:0:4365
-3312:2:1270
-3313:0:4365
-3314:3:3043
-3315:0:4365
-3316:2:1271
-3317:2:1275
-3318:2:1276
-3319:2:1284
-3320:2:1285
-3321:2:1289
-3322:2:1290
-3323:2:1284
-3324:2:1285
-3325:2:1289
-3326:2:1290
-3327:2:1298
-3328:2:1303
-3329:2:1307
-3330:2:1308
-3331:2:1315
-3332:2:1316
-3333:2:1327
-3334:2:1328
-3335:2:1329
-3336:2:1327
-3337:2:1328
-3338:2:1329
-3339:2:1340
-3340:2:1345
-3341:2:1346
-3342:0:4365
-3343:2:1358
-3344:0:4365
-3345:2:1454
-3346:0:4365
-3347:3:3042
-3348:0:4365
-3349:2:1455
-3350:0:4365
-3351:3:3043
-3352:0:4365
-3353:2:1652
-3354:0:4365
-3355:2:1653
-3356:0:4365
-3357:2:1657
-3358:0:4365
-3359:2:1660
-3360:0:4365
-3361:3:3042
-3362:0:4365
-3363:2:1665
-3364:2:1669
-3365:2:1670
-3366:2:1678
-3367:2:1679
-3368:2:1683
-3369:2:1684
-3370:2:1678
-3371:2:1679
-3372:2:1680
-3373:2:1692
-3374:2:1697
-3375:2:1701
-3376:2:1702
-3377:2:1709
-3378:2:1710
-3379:2:1721
-3380:2:1722
-3381:2:1723
-3382:2:1721
-3383:2:1722
-3384:2:1723
-3385:2:1734
-3386:2:1739
-3387:2:1740
-3388:0:4365
-3389:3:3043
-3390:0:4365
-3391:2:1752
-3392:0:4365
-3393:3:3042
-3394:0:4365
-3395:2:1754
-3396:0:4365
-3397:3:3043
-3398:0:4365
-3399:2:1755
-3400:2:1759
-3401:2:1760
-3402:2:1768
-3403:2:1769
-3404:2:1773
-3405:2:1774
-3406:2:1768
-3407:2:1769
-3408:2:1773
-3409:2:1774
-3410:2:1782
-3411:2:1787
-3412:2:1791
-3413:2:1792
-3414:2:1799
-3415:2:1800
-3416:2:1811
-3417:2:1812
-3418:2:1813
-3419:2:1811
-3420:2:1812
-3421:2:1813
-3422:2:1824
-3423:2:1829
-3424:2:1830
-3425:0:4365
-3426:2:1842
-3427:0:4365
-3428:3:3042
-3429:0:4365
-3430:2:1844
-3431:0:4365
-3432:3:3043
-3433:0:4365
-3434:2:1845
-3435:2:1849
-3436:2:1850
-3437:2:1858
-3438:2:1859
-3439:2:1863
-3440:2:1864
-3441:2:1858
-3442:2:1859
-3443:2:1863
-3444:2:1864
-3445:2:1872
-3446:2:1877
-3447:2:1881
-3448:2:1882
-3449:2:1889
-3450:2:1890
-3451:2:1901
-3452:2:1902
-3453:2:1903
-3454:2:1901
-3455:2:1902
-3456:2:1903
-3457:2:1914
-3458:2:1919
-3459:2:1920
-3460:0:4365
-3461:2:1932
-3462:0:4365
-3463:3:3042
-3464:0:4365
-3465:2:1934
-3466:0:4365
-3467:3:3043
-3468:0:4365
-3469:2:1935
-3470:0:4365
-3471:2:1936
-3472:0:4365
-3473:2:2129
-3474:0:4365
-3475:2:2130
-3476:0:4365
-3477:2:2134
-3478:0:4365
-3479:3:3042
-3480:0:4365
-3481:2:2136
-3482:0:4365
-3483:3:3043
-3484:0:4365
-3485:2:2137
-3486:2:2141
-3487:2:2142
-3488:2:2150
-3489:2:2151
-3490:2:2155
-3491:2:2156
-3492:2:2150
-3493:2:2151
-3494:2:2155
-3495:2:2156
-3496:2:2164
-3497:2:2169
-3498:2:2173
-3499:2:2174
-3500:2:2181
-3501:2:2182
-3502:2:2193
-3503:2:2194
-3504:2:2195
-3505:2:2193
-3506:2:2194
-3507:2:2195
-3508:2:2206
-3509:2:2211
-3510:2:2212
-3511:0:4365
-3512:2:2224
-3513:0:4365
-3514:3:3042
-3515:0:4365
-3516:2:2226
-3517:0:4365
-3518:3:3043
-3519:0:4365
-3520:2:1936
-3521:0:4365
-3522:2:2129
-3523:0:4365
-3524:2:2130
-3525:0:4365
-3526:2:2134
-3527:0:4365
-3528:3:3042
-3529:0:4365
-3530:2:2136
-3531:0:4365
-3532:3:3043
-3533:0:4365
-3534:2:2137
-3535:2:2141
-3536:2:2142
-3537:2:2150
-3538:2:2151
-3539:2:2155
-3540:2:2156
-3541:2:2150
-3542:2:2151
-3543:2:2152
-3544:2:2164
-3545:2:2169
-3546:2:2173
-3547:2:2174
-3548:2:2181
-3549:2:2182
-3550:2:2193
-3551:2:2194
-3552:2:2195
-3553:2:2193
-3554:2:2194
-3555:2:2195
-3556:2:2206
-3557:2:2211
-3558:2:2212
-3559:0:4365
-3560:2:2224
-3561:0:4365
-3562:3:3042
-3563:0:4365
-3564:2:2226
-3565:0:4365
-3566:3:3043
-3567:0:4365
-3568:2:2230
-3569:0:4365
-3570:3:3042
-3571:0:4365
-3572:2:2235
-3573:2:2239
-3574:2:2240
-3575:2:2248
-3576:2:2249
-3577:2:2253
-3578:2:2254
-3579:2:2248
-3580:2:2249
-3581:2:2250
-3582:2:2262
-3583:2:2267
-3584:2:2271
-3585:2:2272
-3586:2:2279
-3587:2:2280
-3588:2:2291
-3589:2:2292
-3590:2:2293
-3591:2:2291
-3592:2:2292
-3593:2:2293
-3594:2:2304
-3595:2:2309
-3596:2:2310
-3597:0:4365
-3598:3:3043
-3599:0:4365
-3600:2:2322
-3601:0:4365
-3602:2:1169
-3603:0:4365
-3604:3:3042
-3605:0:4365
-3606:2:1170
-3607:0:4365
-3608:3:3043
-3609:0:4365
-3610:3:3044
-3611:0:4365
-3612:3:3257
-3613:0:4365
-3614:3:3362
-3615:0:4365
-3616:3:3363
-3617:0:4365
-3618:3:3367
-3619:0:4365
-3620:3:3373
-3621:3:3377
-3622:3:3378
-3623:3:3386
-3624:3:3387
-3625:3:3391
-3626:3:3392
-3627:3:3386
-3628:3:3387
-3629:3:3391
-3630:3:3392
-3631:3:3400
-3632:3:3405
-3633:3:3409
-3634:3:3410
-3635:3:3417
-3636:3:3418
-3637:3:3429
-3638:3:3430
-3639:3:3431
-3640:3:3429
-3641:3:3430
-3642:3:3431
-3643:3:3442
-3644:3:3447
-3645:3:3448
-3646:0:4365
-3647:3:3460
-3648:0:4365
-3649:3:3461
-3650:0:4365
-3651:2:1173
-3652:0:4365
-3653:3:3462
-3654:0:4365
-3655:2:1179
-3656:0:4365
-3657:2:1180
-3658:0:4365
-3659:3:3461
-3660:0:4365
-3661:2:1181
-3662:2:1185
-3663:2:1186
-3664:2:1194
-3665:2:1195
-3666:2:1199
-3667:2:1200
-3668:2:1194
-3669:2:1195
-3670:2:1199
-3671:2:1200
-3672:2:1208
-3673:2:1213
-3674:2:1217
-3675:2:1218
-3676:2:1225
-3677:2:1226
-3678:2:1237
-3679:2:1238
-3680:2:1239
-3681:2:1237
-3682:2:1238
-3683:2:1239
-3684:2:1250
-3685:2:1255
-3686:2:1256
-3687:0:4365
-3688:3:3462
-3689:0:4365
-3690:2:1268
-3691:0:4365
-3692:3:3461
-3693:0:4365
-3694:2:1270
-3695:0:4365
-3696:3:3462
-3697:0:4365
-3698:2:1271
-3699:2:1275
-3700:2:1276
-3701:2:1284
-3702:2:1285
-3703:2:1289
-3704:2:1290
-3705:2:1284
-3706:2:1285
-3707:2:1289
-3708:2:1290
-3709:2:1298
-3710:2:1303
-3711:2:1307
-3712:2:1308
-3713:2:1315
-3714:2:1316
-3715:2:1327
-3716:2:1328
-3717:2:1329
-3718:2:1327
-3719:2:1328
-3720:2:1329
-3721:2:1340
-3722:2:1345
-3723:2:1346
-3724:0:4365
-3725:2:1358
-3726:0:4365
-3727:2:1360
-3728:0:4365
-3729:3:3461
-3730:0:4365
-3731:2:1361
-3732:0:4365
-3733:3:3462
-3734:0:4365
-3735:2:1362
-3736:2:1366
-3737:2:1367
-3738:2:1375
-3739:2:1376
-3740:2:1380
-3741:2:1381
-3742:2:1375
-3743:2:1376
-3744:2:1380
-3745:2:1381
-3746:2:1389
-3747:2:1394
-3748:2:1398
-3749:2:1399
-3750:2:1406
-3751:2:1407
-3752:2:1418
-3753:2:1419
-3754:2:1420
-3755:2:1418
-3756:2:1419
-3757:2:1420
-3758:2:1431
-3759:2:1436
-3760:2:1437
-3761:0:4365
-3762:2:1449
-3763:0:4365
-3764:3:3461
-3765:0:4365
-3766:2:1451
-3767:0:4365
-3768:3:3462
-3769:0:4365
-3770:2:1652
-3771:0:4365
-3772:2:1653
-3773:0:4365
-3774:2:1657
-3775:0:4365
-3776:2:1180
-3777:0:4365
-3778:3:3461
-3779:0:4365
-3780:2:1181
-3781:2:1185
-3782:2:1186
-3783:2:1194
-3784:2:1195
-3785:2:1199
-3786:2:1200
-3787:2:1194
-3788:2:1195
-3789:2:1196
-3790:2:1208
-3791:2:1213
-3792:2:1217
-3793:2:1218
-3794:2:1225
-3795:2:1226
-3796:2:1237
-3797:2:1238
-3798:2:1239
-3799:2:1237
-3800:2:1238
-3801:2:1239
-3802:2:1250
-3803:2:1255
-3804:2:1256
-3805:0:4365
-3806:3:3462
-3807:0:4365
-3808:2:1268
-3809:0:4365
-3810:3:3461
-3811:0:4365
-3812:2:1270
-3813:0:4365
-3814:3:3462
-3815:0:4365
-3816:2:1271
-3817:2:1275
-3818:2:1276
-3819:2:1284
-3820:2:1285
-3821:2:1289
-3822:2:1290
-3823:2:1284
-3824:2:1285
-3825:2:1289
-3826:2:1290
-3827:2:1298
-3828:2:1303
-3829:2:1307
-3830:2:1308
-3831:2:1315
-3832:2:1316
-3833:2:1327
-3834:2:1328
-3835:2:1329
-3836:2:1327
-3837:2:1328
-3838:2:1329
-3839:2:1340
-3840:2:1345
-3841:2:1346
-3842:0:4365
-3843:2:1358
-3844:0:4365
-3845:2:1454
-3846:0:4365
-3847:3:3461
-3848:0:4365
-3849:2:1455
-3850:0:4365
-3851:3:3462
-3852:0:4365
-3853:2:1652
-3854:0:4365
-3855:2:1653
-3856:0:4365
-3857:2:1657
-3858:0:4365
-3859:2:1660
-3860:0:4365
-3861:3:3461
-3862:0:4365
-3863:2:1665
-3864:2:1669
-3865:2:1670
-3866:2:1678
-3867:2:1679
-3868:2:1683
-3869:2:1684
-3870:2:1678
-3871:2:1679
-3872:2:1680
-3873:2:1692
-3874:2:1697
-3875:2:1701
-3876:2:1702
-3877:2:1709
-3878:2:1710
-3879:2:1721
-3880:2:1722
-3881:2:1723
-3882:2:1721
-3883:2:1722
-3884:2:1723
-3885:2:1734
-3886:2:1739
-3887:2:1740
-3888:0:4365
-3889:3:3462
-3890:0:4365
-3891:2:1752
-3892:0:4365
-3893:3:3461
-3894:0:4365
-3895:2:1754
-3896:0:4365
-3897:3:3462
-3898:0:4365
-3899:2:1755
-3900:2:1759
-3901:2:1760
-3902:2:1768
-3903:2:1769
-3904:2:1773
-3905:2:1774
-3906:2:1768
-3907:2:1769
-3908:2:1773
-3909:2:1774
-3910:2:1782
-3911:2:1787
-3912:2:1791
-3913:2:1792
-3914:2:1799
-3915:2:1800
-3916:2:1811
-3917:2:1812
-3918:2:1813
-3919:2:1811
-3920:2:1812
-3921:2:1813
-3922:2:1824
-3923:2:1829
-3924:2:1830
-3925:0:4365
-3926:2:1842
-3927:0:4365
-3928:3:3461
-3929:0:4365
-3930:2:1844
-3931:0:4365
-3932:3:3462
-3933:0:4365
-3934:2:1845
-3935:2:1849
-3936:2:1850
-3937:2:1858
-3938:2:1859
-3939:2:1863
-3940:2:1864
-3941:2:1858
-3942:2:1859
-3943:2:1863
-3944:2:1864
-3945:2:1872
-3946:2:1877
-3947:2:1881
-3948:2:1882
-3949:2:1889
-3950:2:1890
-3951:2:1901
-3952:2:1902
-3953:2:1903
-3954:2:1901
-3955:2:1902
-3956:2:1903
-3957:2:1914
-3958:2:1919
-3959:2:1920
-3960:0:4365
-3961:2:1932
-3962:0:4365
-3963:3:3461
-3964:0:4365
-3965:2:1934
-3966:0:4365
-3967:3:3462
-3968:0:4365
-3969:2:1935
-3970:0:4365
-3971:2:1936
-3972:0:4365
-3973:2:2129
-3974:0:4365
-3975:2:2130
-3976:0:4365
-3977:2:2134
-3978:0:4365
-3979:3:3461
-3980:0:4365
-3981:2:2136
-3982:0:4365
-3983:3:3462
-3984:0:4365
-3985:2:2137
-3986:2:2141
-3987:2:2142
-3988:2:2150
-3989:2:2151
-3990:2:2155
-3991:2:2156
-3992:2:2150
-3993:2:2151
-3994:2:2155
-3995:2:2156
-3996:2:2164
-3997:2:2169
-3998:2:2173
-3999:2:2174
-4000:2:2181
-4001:2:2182
-4002:2:2193
-4003:2:2194
-4004:2:2195
-4005:2:2193
-4006:2:2194
-4007:2:2195
-4008:2:2206
-4009:2:2211
-4010:2:2212
-4011:0:4365
-4012:2:2224
-4013:0:4365
-4014:3:3461
-4015:0:4365
-4016:2:2226
-4017:0:4365
-4018:3:3462
-4019:0:4365
-4020:2:1936
-4021:0:4365
-4022:2:2129
-4023:0:4365
-4024:2:2130
-4025:0:4365
-4026:2:2134
-4027:0:4365
-4028:3:3461
-4029:0:4365
-4030:2:2136
-4031:0:4365
-4032:3:3462
-4033:0:4365
-4034:2:2137
-4035:2:2141
-4036:2:2142
-4037:2:2150
-4038:2:2151
-4039:2:2155
-4040:2:2156
-4041:2:2150
-4042:2:2151
-4043:2:2152
-4044:2:2164
-4045:2:2169
-4046:2:2173
-4047:2:2174
-4048:2:2181
-4049:2:2182
-4050:2:2193
-4051:2:2194
-4052:2:2195
-4053:2:2193
-4054:2:2194
-4055:2:2195
-4056:2:2206
-4057:2:2211
-4058:2:2212
-4059:0:4365
-4060:2:2224
-4061:0:4365
-4062:3:3461
-4063:0:4365
-4064:2:2226
-4065:0:4365
-4066:3:3462
-4067:0:4365
-4068:2:2230
-4069:0:4365
-4070:3:3461
-4071:0:4365
-4072:2:2235
-4073:2:2239
-4074:2:2240
-4075:2:2248
-4076:2:2249
-4077:2:2253
-4078:2:2254
-4079:2:2248
-4080:2:2249
-4081:2:2250
-4082:2:2262
-4083:2:2267
-4084:2:2271
-4085:2:2272
-4086:2:2279
-4087:2:2280
-4088:2:2291
-4089:2:2292
-4090:2:2293
-4091:2:2291
-4092:2:2292
-4093:2:2293
-4094:2:2304
-4095:2:2309
-4096:2:2310
-4097:0:4365
-4098:3:3462
-4099:0:4365
-4100:2:2322
-4101:0:4365
-4102:2:1169
-4103:0:4365
-4104:3:3461
-4105:0:4365
-4106:2:1170
-4107:0:4365
-4108:3:3462
-4109:0:4365
-4110:3:3463
-4111:0:4365
-4112:3:3469
-4113:0:4365
-4114:3:3470
-4115:3:3474
-4116:3:3475
-4117:3:3483
-4118:3:3484
-4119:3:3488
-4120:3:3489
-4121:3:3483
-4122:3:3484
-4123:3:3488
-4124:3:3489
-4125:3:3497
-4126:3:3502
-4127:3:3506
-4128:3:3507
-4129:3:3514
-4130:3:3515
-4131:3:3526
-4132:3:3527
-4133:3:3528
-4134:3:3526
-4135:3:3527
-4136:3:3528
-4137:3:3539
-4138:3:3544
-4139:3:3545
-4140:0:4365
-4141:3:3557
-4142:0:4365
-4143:3:3558
-4144:0:4365
-4145:2:1173
-4146:0:4365
-4147:3:3559
-4148:0:4365
-4149:2:1179
-4150:0:4365
-4151:2:1180
-4152:0:4365
-4153:3:3558
-4154:0:4365
-4155:2:1181
-4156:2:1185
-4157:2:1186
-4158:2:1194
-4159:2:1195
-4160:2:1199
-4161:2:1200
-4162:2:1194
-4163:2:1195
-4164:2:1199
-4165:2:1200
-4166:2:1208
-4167:2:1213
-4168:2:1217
-4169:2:1218
-4170:2:1225
-4171:2:1226
-4172:2:1237
-4173:2:1238
-4174:2:1239
-4175:2:1237
-4176:2:1238
-4177:2:1239
-4178:2:1250
-4179:2:1255
-4180:2:1256
-4181:0:4365
-4182:3:3559
-4183:0:4365
-4184:2:1268
-4185:0:4365
-4186:3:3558
-4187:0:4365
-4188:2:1270
-4189:0:4365
-4190:3:3559
-4191:0:4365
-4192:2:1271
-4193:2:1275
-4194:2:1276
-4195:2:1284
-4196:2:1285
-4197:2:1289
-4198:2:1290
-4199:2:1284
-4200:2:1285
-4201:2:1289
-4202:2:1290
-4203:2:1298
-4204:2:1303
-4205:2:1307
-4206:2:1308
-4207:2:1315
-4208:2:1316
-4209:2:1327
-4210:2:1328
-4211:2:1329
-4212:2:1327
-4213:2:1328
-4214:2:1329
-4215:2:1340
-4216:2:1345
-4217:2:1346
-4218:0:4365
-4219:2:1358
-4220:0:4365
-4221:2:1360
-4222:0:4365
-4223:3:3558
-4224:0:4365
-4225:2:1361
-4226:0:4365
-4227:3:3559
-4228:0:4365
-4229:2:1362
-4230:2:1366
-4231:2:1367
-4232:2:1375
-4233:2:1376
-4234:2:1380
-4235:2:1381
-4236:2:1375
-4237:2:1376
-4238:2:1380
-4239:2:1381
-4240:2:1389
-4241:2:1394
-4242:2:1398
-4243:2:1399
-4244:2:1406
-4245:2:1407
-4246:2:1418
-4247:2:1419
-4248:2:1420
-4249:2:1418
-4250:2:1419
-4251:2:1420
-4252:2:1431
-4253:2:1436
-4254:2:1437
-4255:0:4365
-4256:2:1449
-4257:0:4365
-4258:3:3558
-4259:0:4365
-4260:2:1451
-4261:0:4365
-4262:3:3559
-4263:0:4365
-4264:2:1652
-4265:0:4365
-4266:2:1653
-4267:0:4365
-4268:2:1657
-4269:0:4365
-4270:2:1180
-4271:0:4365
-4272:3:3558
-4273:0:4365
-4274:2:1181
-4275:2:1185
-4276:2:1186
-4277:2:1194
-4278:2:1195
-4279:2:1199
-4280:2:1200
-4281:2:1194
-4282:2:1195
-4283:2:1196
-4284:2:1208
-4285:2:1213
-4286:2:1217
-4287:2:1218
-4288:2:1225
-4289:2:1226
-4290:2:1237
-4291:2:1238
-4292:2:1239
-4293:2:1237
-4294:2:1238
-4295:2:1239
-4296:2:1250
-4297:2:1255
-4298:2:1256
-4299:0:4365
-4300:3:3559
-4301:0:4365
-4302:2:1268
-4303:0:4365
-4304:3:3558
-4305:0:4365
-4306:2:1270
-4307:0:4365
-4308:3:3559
-4309:0:4365
-4310:2:1271
-4311:2:1275
-4312:2:1276
-4313:2:1284
-4314:2:1285
-4315:2:1289
-4316:2:1290
-4317:2:1284
-4318:2:1285
-4319:2:1289
-4320:2:1290
-4321:2:1298
-4322:2:1303
-4323:2:1307
-4324:2:1308
-4325:2:1315
-4326:2:1316
-4327:2:1327
-4328:2:1328
-4329:2:1329
-4330:2:1327
-4331:2:1328
-4332:2:1329
-4333:2:1340
-4334:2:1345
-4335:2:1346
-4336:0:4365
-4337:2:1358
-4338:0:4365
-4339:2:1454
-4340:0:4365
-4341:3:3558
-4342:0:4365
-4343:2:1455
-4344:0:4365
-4345:3:3559
-4346:0:4365
-4347:2:1652
-4348:0:4365
-4349:2:1653
-4350:0:4365
-4351:2:1657
-4352:0:4365
-4353:2:1660
-4354:0:4365
-4355:3:3558
-4356:0:4365
-4357:2:1665
-4358:2:1669
-4359:2:1670
-4360:2:1678
-4361:2:1679
-4362:2:1683
-4363:2:1684
-4364:2:1678
-4365:2:1679
-4366:2:1680
-4367:2:1692
-4368:2:1697
-4369:2:1701
-4370:2:1702
-4371:2:1709
-4372:2:1710
-4373:2:1721
-4374:2:1722
-4375:2:1723
-4376:2:1721
-4377:2:1722
-4378:2:1723
-4379:2:1734
-4380:2:1739
-4381:2:1740
-4382:0:4365
-4383:3:3559
-4384:0:4365
-4385:2:1752
-4386:0:4365
-4387:3:3558
-4388:0:4365
-4389:2:1754
-4390:0:4365
-4391:3:3559
-4392:0:4365
-4393:2:1755
-4394:2:1759
-4395:2:1760
-4396:2:1768
-4397:2:1769
-4398:2:1773
-4399:2:1774
-4400:2:1768
-4401:2:1769
-4402:2:1773
-4403:2:1774
-4404:2:1782
-4405:2:1787
-4406:2:1791
-4407:2:1792
-4408:2:1799
-4409:2:1800
-4410:2:1811
-4411:2:1812
-4412:2:1813
-4413:2:1811
-4414:2:1812
-4415:2:1813
-4416:2:1824
-4417:2:1829
-4418:2:1830
-4419:0:4365
-4420:2:1842
-4421:0:4365
-4422:3:3558
-4423:0:4365
-4424:2:1844
-4425:0:4365
-4426:3:3559
-4427:0:4365
-4428:2:1845
-4429:2:1849
-4430:2:1850
-4431:2:1858
-4432:2:1859
-4433:2:1863
-4434:2:1864
-4435:2:1858
-4436:2:1859
-4437:2:1863
-4438:2:1864
-4439:2:1872
-4440:2:1877
-4441:2:1881
-4442:2:1882
-4443:2:1889
-4444:2:1890
-4445:2:1901
-4446:2:1902
-4447:2:1903
-4448:2:1901
-4449:2:1902
-4450:2:1903
-4451:2:1914
-4452:2:1919
-4453:2:1920
-4454:0:4365
-4455:2:1932
-4456:0:4365
-4457:3:3558
-4458:0:4365
-4459:2:1934
-4460:0:4365
-4461:3:3559
-4462:0:4365
-4463:2:1935
-4464:0:4365
-4465:2:1936
-4466:0:4365
-4467:2:2129
-4468:0:4365
-4469:2:2130
-4470:0:4365
-4471:2:2134
-4472:0:4365
-4473:3:3558
-4474:0:4365
-4475:2:2136
-4476:0:4365
-4477:3:3559
-4478:0:4365
-4479:2:2137
-4480:2:2141
-4481:2:2142
-4482:2:2150
-4483:2:2151
-4484:2:2155
-4485:2:2156
-4486:2:2150
-4487:2:2151
-4488:2:2155
-4489:2:2156
-4490:2:2164
-4491:2:2169
-4492:2:2173
-4493:2:2174
-4494:2:2181
-4495:2:2182
-4496:2:2193
-4497:2:2194
-4498:2:2195
-4499:2:2193
-4500:2:2194
-4501:2:2195
-4502:2:2206
-4503:2:2211
-4504:2:2212
-4505:0:4365
-4506:2:2224
-4507:0:4365
-4508:3:3558
-4509:0:4365
-4510:2:2226
-4511:0:4365
-4512:3:3559
-4513:0:4365
-4514:2:1936
-4515:0:4365
-4516:2:2129
-4517:0:4365
-4518:2:2130
-4519:0:4365
-4520:2:2134
-4521:0:4365
-4522:3:3558
-4523:0:4365
-4524:2:2136
-4525:0:4365
-4526:3:3559
-4527:0:4365
-4528:2:2137
-4529:2:2141
-4530:2:2142
-4531:2:2150
-4532:2:2151
-4533:2:2155
-4534:2:2156
-4535:2:2150
-4536:2:2151
-4537:2:2152
-4538:2:2164
-4539:2:2169
-4540:2:2173
-4541:2:2174
-4542:2:2181
-4543:2:2182
-4544:2:2193
-4545:2:2194
-4546:2:2195
-4547:2:2193
-4548:2:2194
-4549:2:2195
-4550:2:2206
-4551:2:2211
-4552:2:2212
-4553:0:4365
-4554:2:2224
-4555:0:4365
-4556:3:3558
-4557:0:4365
-4558:2:2226
-4559:0:4365
-4560:3:3559
-4561:0:4365
-4562:2:2230
-4563:0:4365
-4564:3:3558
-4565:0:4365
-4566:2:2235
-4567:2:2239
-4568:2:2240
-4569:2:2248
-4570:2:2249
-4571:2:2253
-4572:2:2254
-4573:2:2248
-4574:2:2249
-4575:2:2250
-4576:2:2262
-4577:2:2267
-4578:2:2271
-4579:2:2272
-4580:2:2279
-4581:2:2280
-4582:2:2291
-4583:2:2292
-4584:2:2293
-4585:2:2291
-4586:2:2292
-4587:2:2293
-4588:2:2304
-4589:2:2309
-4590:2:2310
-4591:0:4365
-4592:3:3559
-4593:0:4365
-4594:2:2322
-4595:0:4365
-4596:2:1169
-4597:0:4365
-4598:3:3558
-4599:0:4365
-4600:2:1170
-4601:0:4365
-4602:3:3559
-4603:0:4365
-4604:3:3560
-4605:0:4365
-4606:3:3566
-4607:0:4365
-4608:3:3569
-4609:3:3570
-4610:3:3582
-4611:3:3583
-4612:3:3587
-4613:3:3588
-4614:3:3582
-4615:3:3583
-4616:3:3587
-4617:3:3588
-4618:3:3596
-4619:3:3601
-4620:3:3605
-4621:3:3606
-4622:3:3613
-4623:3:3614
-4624:3:3625
-4625:3:3626
-4626:3:3627
-4627:3:3625
-4628:3:3626
-4629:3:3627
-4630:3:3638
-4631:3:3643
-4632:3:3644
-4633:0:4365
-4634:3:3656
-4635:0:4365
-4636:3:3657
-4637:0:4365
-4638:2:1173
-4639:0:4365
-4640:3:3658
-4641:0:4365
-4642:2:1179
-4643:0:4365
-4644:2:1180
-4645:0:4365
-4646:3:3657
-4647:0:4365
-4648:2:1181
-4649:2:1185
-4650:2:1186
-4651:2:1194
-4652:2:1195
-4653:2:1199
-4654:2:1200
-4655:2:1194
-4656:2:1195
-4657:2:1199
-4658:2:1200
-4659:2:1208
-4660:2:1213
-4661:2:1217
-4662:2:1218
-4663:2:1225
-4664:2:1226
-4665:2:1237
-4666:2:1238
-4667:2:1239
-4668:2:1237
-4669:2:1238
-4670:2:1239
-4671:2:1250
-4672:2:1255
-4673:2:1256
-4674:0:4365
-4675:3:3658
-4676:0:4365
-4677:2:1268
-4678:0:4365
-4679:3:3657
-4680:0:4365
-4681:2:1270
-4682:0:4365
-4683:3:3658
-4684:0:4365
-4685:2:1271
-4686:2:1275
-4687:2:1276
-4688:2:1284
-4689:2:1285
-4690:2:1289
-4691:2:1290
-4692:2:1284
-4693:2:1285
-4694:2:1289
-4695:2:1290
-4696:2:1298
-4697:2:1303
-4698:2:1307
-4699:2:1308
-4700:2:1315
-4701:2:1316
-4702:2:1327
-4703:2:1328
-4704:2:1329
-4705:2:1327
-4706:2:1328
-4707:2:1329
-4708:2:1340
-4709:2:1345
-4710:2:1346
-4711:0:4365
-4712:2:1358
-4713:0:4365
-4714:2:1360
-4715:0:4365
-4716:3:3657
-4717:0:4365
-4718:2:1361
-4719:0:4365
-4720:3:3658
-4721:0:4365
-4722:2:1362
-4723:2:1366
-4724:2:1367
-4725:2:1375
-4726:2:1376
-4727:2:1380
-4728:2:1381
-4729:2:1375
-4730:2:1376
-4731:2:1380
-4732:2:1381
-4733:2:1389
-4734:2:1394
-4735:2:1398
-4736:2:1399
-4737:2:1406
-4738:2:1407
-4739:2:1418
-4740:2:1419
-4741:2:1420
-4742:2:1418
-4743:2:1419
-4744:2:1420
-4745:2:1431
-4746:2:1436
-4747:2:1437
-4748:0:4365
-4749:2:1449
-4750:0:4365
-4751:3:3657
-4752:0:4365
-4753:2:1451
-4754:0:4365
-4755:3:3658
-4756:0:4365
-4757:2:1652
-4758:0:4365
-4759:2:1653
-4760:0:4365
-4761:2:1657
-4762:0:4365
-4763:2:1180
-4764:0:4365
-4765:3:3657
-4766:0:4365
-4767:2:1181
-4768:2:1185
-4769:2:1186
-4770:2:1194
-4771:2:1195
-4772:2:1199
-4773:2:1200
-4774:2:1194
-4775:2:1195
-4776:2:1196
-4777:2:1208
-4778:2:1213
-4779:2:1217
-4780:2:1218
-4781:2:1225
-4782:2:1226
-4783:2:1237
-4784:2:1238
-4785:2:1239
-4786:2:1237
-4787:2:1238
-4788:2:1239
-4789:2:1250
-4790:2:1255
-4791:2:1256
-4792:0:4365
-4793:3:3658
-4794:0:4365
-4795:2:1268
-4796:0:4365
-4797:3:3657
-4798:0:4365
-4799:2:1270
-4800:0:4365
-4801:3:3658
-4802:0:4365
-4803:2:1271
-4804:2:1275
-4805:2:1276
-4806:2:1284
-4807:2:1285
-4808:2:1289
-4809:2:1290
-4810:2:1284
-4811:2:1285
-4812:2:1289
-4813:2:1290
-4814:2:1298
-4815:2:1303
-4816:2:1307
-4817:2:1308
-4818:2:1315
-4819:2:1316
-4820:2:1327
-4821:2:1328
-4822:2:1329
-4823:2:1327
-4824:2:1328
-4825:2:1329
-4826:2:1340
-4827:2:1345
-4828:2:1346
-4829:0:4365
-4830:2:1358
-4831:0:4365
-4832:2:1454
-4833:0:4365
-4834:3:3657
-4835:0:4365
-4836:2:1455
-4837:0:4365
-4838:3:3658
-4839:0:4365
-4840:2:1652
-4841:0:4365
-4842:2:1653
-4843:0:4365
-4844:2:1657
-4845:0:4365
-4846:2:1660
-4847:0:4365
-4848:3:3657
-4849:0:4365
-4850:2:1665
-4851:2:1669
-4852:2:1670
-4853:2:1678
-4854:2:1679
-4855:2:1683
-4856:2:1684
-4857:2:1678
-4858:2:1679
-4859:2:1680
-4860:2:1692
-4861:2:1697
-4862:2:1701
-4863:2:1702
-4864:2:1709
-4865:2:1710
-4866:2:1721
-4867:2:1722
-4868:2:1723
-4869:2:1721
-4870:2:1722
-4871:2:1723
-4872:2:1734
-4873:2:1739
-4874:2:1740
-4875:0:4365
-4876:3:3658
-4877:0:4365
-4878:2:1752
-4879:0:4365
-4880:3:3657
-4881:0:4365
-4882:2:1754
-4883:0:4365
-4884:3:3658
-4885:0:4365
-4886:2:1755
-4887:2:1759
-4888:2:1760
-4889:2:1768
-4890:2:1769
-4891:2:1773
-4892:2:1774
-4893:2:1768
-4894:2:1769
-4895:2:1773
-4896:2:1774
-4897:2:1782
-4898:2:1787
-4899:2:1791
-4900:2:1792
-4901:2:1799
-4902:2:1800
-4903:2:1811
-4904:2:1812
-4905:2:1813
-4906:2:1811
-4907:2:1812
-4908:2:1813
-4909:2:1824
-4910:2:1829
-4911:2:1830
-4912:0:4365
-4913:2:1842
-4914:0:4365
-4915:3:3657
-4916:0:4365
-4917:2:1844
-4918:0:4365
-4919:3:3658
-4920:0:4365
-4921:2:1845
-4922:2:1849
-4923:2:1850
-4924:2:1858
-4925:2:1859
-4926:2:1863
-4927:2:1864
-4928:2:1858
-4929:2:1859
-4930:2:1863
-4931:2:1864
-4932:2:1872
-4933:2:1877
-4934:2:1881
-4935:2:1882
-4936:2:1889
-4937:2:1890
-4938:2:1901
-4939:2:1902
-4940:2:1903
-4941:2:1901
-4942:2:1902
-4943:2:1903
-4944:2:1914
-4945:2:1919
-4946:2:1920
-4947:0:4365
-4948:2:1932
-4949:0:4365
-4950:3:3657
-4951:0:4365
-4952:2:1934
-4953:0:4365
-4954:3:3658
-4955:0:4365
-4956:2:1935
-4957:0:4365
-4958:2:1936
-4959:0:4365
-4960:2:2129
-4961:0:4365
-4962:2:2130
-4963:0:4365
-4964:2:2134
-4965:0:4365
-4966:3:3657
-4967:0:4365
-4968:2:2136
-4969:0:4365
-4970:3:3658
-4971:0:4365
-4972:2:2137
-4973:2:2141
-4974:2:2142
-4975:2:2150
-4976:2:2151
-4977:2:2155
-4978:2:2156
-4979:2:2150
-4980:2:2151
-4981:2:2155
-4982:2:2156
-4983:2:2164
-4984:2:2169
-4985:2:2173
-4986:2:2174
-4987:2:2181
-4988:2:2182
-4989:2:2193
-4990:2:2194
-4991:2:2195
-4992:2:2193
-4993:2:2194
-4994:2:2195
-4995:2:2206
-4996:2:2211
-4997:2:2212
-4998:0:4365
-4999:2:2224
-5000:0:4365
-5001:3:3657
-5002:0:4365
-5003:2:2226
-5004:0:4365
-5005:3:3658
-5006:0:4365
-5007:2:1936
-5008:0:4365
-5009:2:2129
-5010:0:4365
-5011:2:2130
-5012:0:4365
-5013:2:2134
-5014:0:4365
-5015:3:3657
-5016:0:4365
-5017:2:2136
-5018:0:4365
-5019:3:3658
-5020:0:4365
-5021:2:2137
-5022:2:2141
-5023:2:2142
-5024:2:2150
-5025:2:2151
-5026:2:2155
-5027:2:2156
-5028:2:2150
-5029:2:2151
-5030:2:2152
-5031:2:2164
-5032:2:2169
-5033:2:2173
-5034:2:2174
-5035:2:2181
-5036:2:2182
-5037:2:2193
-5038:2:2194
-5039:2:2195
-5040:2:2193
-5041:2:2194
-5042:2:2195
-5043:2:2206
-5044:2:2211
-5045:2:2212
-5046:0:4365
-5047:2:2224
-5048:0:4365
-5049:3:3657
-5050:0:4365
-5051:2:2226
-5052:0:4365
-5053:3:3658
-5054:0:4365
-5055:2:2230
-5056:0:4365
-5057:3:3657
-5058:0:4365
-5059:2:2235
-5060:2:2239
-5061:2:2240
-5062:2:2248
-5063:2:2249
-5064:2:2253
-5065:2:2254
-5066:2:2248
-5067:2:2249
-5068:2:2250
-5069:2:2262
-5070:2:2267
-5071:2:2271
-5072:2:2272
-5073:2:2279
-5074:2:2280
-5075:2:2291
-5076:2:2292
-5077:2:2293
-5078:2:2291
-5079:2:2292
-5080:2:2293
-5081:2:2304
-5082:2:2309
-5083:2:2310
-5084:0:4365
-5085:3:3658
-5086:0:4365
-5087:2:2322
-5088:0:4365
-5089:2:1169
-5090:0:4365
-5091:3:3657
-5092:0:4365
-5093:2:1170
-5094:0:4365
-5095:3:3658
-5096:0:4365
-5097:3:3659
-5098:0:4365
-5099:3:3665
-5100:0:4365
-5101:3:3666
-5102:0:4365
-5103:3:3667
-5104:0:4365
-5105:3:3668
-5106:0:4365
-5107:3:3669
-5108:3:3673
-5109:3:3674
-5110:3:3682
-5111:3:3683
-5112:3:3687
-5113:3:3688
-5114:3:3682
-5115:3:3683
-5116:3:3687
-5117:3:3688
-5118:3:3696
-5119:3:3701
-5120:3:3705
-5121:3:3706
-5122:3:3713
-5123:3:3714
-5124:3:3725
-5125:3:3726
-5126:3:3727
-5127:3:3725
-5128:3:3726
-5129:3:3727
-5130:3:3738
-5131:3:3743
-5132:3:3744
-5133:0:4365
-5134:3:3756
-5135:0:4365
-5136:3:3757
-5137:0:4365
-5138:2:1173
-5139:0:4365
-5140:3:3758
-5141:0:4365
-5142:2:1179
-5143:0:4365
-5144:2:1180
-5145:0:4365
-5146:3:3757
-5147:0:4365
-5148:2:1181
-5149:2:1185
-5150:2:1186
-5151:2:1194
-5152:2:1195
-5153:2:1199
-5154:2:1200
-5155:2:1194
-5156:2:1195
-5157:2:1199
-5158:2:1200
-5159:2:1208
-5160:2:1213
-5161:2:1217
-5162:2:1218
-5163:2:1225
-5164:2:1226
-5165:2:1237
-5166:2:1238
-5167:2:1239
-5168:2:1237
-5169:2:1238
-5170:2:1239
-5171:2:1250
-5172:2:1255
-5173:2:1256
-5174:0:4365
-5175:3:3758
-5176:0:4365
-5177:2:1268
-5178:0:4365
-5179:3:3757
-5180:0:4365
-5181:2:1270
-5182:0:4365
-5183:3:3758
-5184:0:4365
-5185:2:1271
-5186:2:1275
-5187:2:1276
-5188:2:1284
-5189:2:1285
-5190:2:1289
-5191:2:1290
-5192:2:1284
-5193:2:1285
-5194:2:1289
-5195:2:1290
-5196:2:1298
-5197:2:1303
-5198:2:1307
-5199:2:1308
-5200:2:1315
-5201:2:1316
-5202:2:1327
-5203:2:1328
-5204:2:1329
-5205:2:1327
-5206:2:1328
-5207:2:1329
-5208:2:1340
-5209:2:1345
-5210:2:1346
-5211:0:4365
-5212:2:1358
-5213:0:4365
-5214:2:1360
-5215:0:4365
-5216:3:3757
-5217:0:4365
-5218:2:1361
-5219:0:4365
-5220:3:3758
-5221:0:4365
-5222:2:1362
-5223:2:1366
-5224:2:1367
-5225:2:1375
-5226:2:1376
-5227:2:1380
-5228:2:1381
-5229:2:1375
-5230:2:1376
-5231:2:1380
-5232:2:1381
-5233:2:1389
-5234:2:1394
-5235:2:1398
-5236:2:1399
-5237:2:1406
-5238:2:1407
-5239:2:1418
-5240:2:1419
-5241:2:1420
-5242:2:1418
-5243:2:1419
-5244:2:1420
-5245:2:1431
-5246:2:1436
-5247:2:1437
-5248:0:4365
-5249:2:1449
-5250:0:4365
-5251:3:3757
-5252:0:4365
-5253:2:1451
-5254:0:4365
-5255:3:3758
-5256:0:4365
-5257:2:1652
-5258:0:4365
-5259:2:1653
-5260:0:4365
-5261:2:1657
-5262:0:4365
-5263:2:1180
-5264:0:4365
-5265:3:3757
-5266:0:4365
-5267:2:1181
-5268:2:1185
-5269:2:1186
-5270:2:1194
-5271:2:1195
-5272:2:1199
-5273:2:1200
-5274:2:1194
-5275:2:1195
-5276:2:1196
-5277:2:1208
-5278:2:1213
-5279:2:1217
-5280:2:1218
-5281:2:1225
-5282:2:1226
-5283:2:1237
-5284:2:1238
-5285:2:1239
-5286:2:1237
-5287:2:1238
-5288:2:1239
-5289:2:1250
-5290:2:1255
-5291:2:1256
-5292:0:4365
-5293:3:3758
-5294:0:4365
-5295:2:1268
-5296:0:4365
-5297:3:3757
-5298:0:4365
-5299:2:1270
-5300:0:4365
-5301:3:3758
-5302:0:4365
-5303:2:1271
-5304:2:1275
-5305:2:1276
-5306:2:1284
-5307:2:1285
-5308:2:1289
-5309:2:1290
-5310:2:1284
-5311:2:1285
-5312:2:1289
-5313:2:1290
-5314:2:1298
-5315:2:1303
-5316:2:1307
-5317:2:1308
-5318:2:1315
-5319:2:1316
-5320:2:1327
-5321:2:1328
-5322:2:1329
-5323:2:1327
-5324:2:1328
-5325:2:1329
-5326:2:1340
-5327:2:1345
-5328:2:1346
-5329:0:4365
-5330:2:1358
-5331:0:4365
-5332:2:1454
-5333:0:4365
-5334:3:3757
-5335:0:4365
-5336:2:1455
-5337:0:4365
-5338:3:3758
-5339:0:4365
-5340:2:1652
-5341:0:4365
-5342:2:1653
-5343:0:4365
-5344:2:1657
-5345:0:4365
-5346:2:1660
-5347:0:4365
-5348:3:3757
-5349:0:4365
-5350:2:1665
-5351:2:1669
-5352:2:1670
-5353:2:1678
-5354:2:1679
-5355:2:1683
-5356:2:1684
-5357:2:1678
-5358:2:1679
-5359:2:1680
-5360:2:1692
-5361:2:1697
-5362:2:1701
-5363:2:1702
-5364:2:1709
-5365:2:1710
-5366:2:1721
-5367:2:1722
-5368:2:1723
-5369:2:1721
-5370:2:1722
-5371:2:1723
-5372:2:1734
-5373:2:1739
-5374:2:1740
-5375:0:4365
-5376:3:3758
-5377:0:4365
-5378:2:1752
-5379:0:4365
-5380:3:3757
-5381:0:4365
-5382:2:1754
-5383:0:4365
-5384:3:3758
-5385:0:4365
-5386:2:1755
-5387:2:1759
-5388:2:1760
-5389:2:1768
-5390:2:1769
-5391:2:1773
-5392:2:1774
-5393:2:1768
-5394:2:1769
-5395:2:1773
-5396:2:1774
-5397:2:1782
-5398:2:1787
-5399:2:1791
-5400:2:1792
-5401:2:1799
-5402:2:1800
-5403:2:1811
-5404:2:1812
-5405:2:1813
-5406:2:1811
-5407:2:1812
-5408:2:1813
-5409:2:1824
-5410:2:1829
-5411:2:1830
-5412:0:4365
-5413:2:1842
-5414:0:4365
-5415:3:3757
-5416:0:4365
-5417:2:1844
-5418:0:4365
-5419:3:3758
-5420:0:4365
-5421:2:1845
-5422:2:1849
-5423:2:1850
-5424:2:1858
-5425:2:1859
-5426:2:1863
-5427:2:1864
-5428:2:1858
-5429:2:1859
-5430:2:1863
-5431:2:1864
-5432:2:1872
-5433:2:1877
-5434:2:1881
-5435:2:1882
-5436:2:1889
-5437:2:1890
-5438:2:1901
-5439:2:1902
-5440:2:1903
-5441:2:1901
-5442:2:1902
-5443:2:1903
-5444:2:1914
-5445:2:1919
-5446:2:1920
-5447:0:4365
-5448:2:1932
-5449:0:4365
-5450:3:3757
-5451:0:4365
-5452:2:1934
-5453:0:4365
-5454:3:3758
-5455:0:4365
-5456:2:1935
-5457:0:4365
-5458:2:1936
-5459:0:4365
-5460:2:2129
-5461:0:4365
-5462:2:2130
-5463:0:4365
-5464:2:2134
-5465:0:4365
-5466:3:3757
-5467:0:4365
-5468:2:2136
-5469:0:4365
-5470:3:3758
-5471:0:4365
-5472:2:2137
-5473:2:2141
-5474:2:2142
-5475:2:2150
-5476:2:2151
-5477:2:2155
-5478:2:2156
-5479:2:2150
-5480:2:2151
-5481:2:2155
-5482:2:2156
-5483:2:2164
-5484:2:2169
-5485:2:2173
-5486:2:2174
-5487:2:2181
-5488:2:2182
-5489:2:2193
-5490:2:2194
-5491:2:2195
-5492:2:2193
-5493:2:2194
-5494:2:2195
-5495:2:2206
-5496:2:2211
-5497:2:2212
-5498:0:4365
-5499:2:2224
-5500:0:4365
-5501:3:3757
-5502:0:4365
-5503:2:2226
-5504:0:4365
-5505:3:3758
-5506:0:4365
-5507:2:1936
-5508:0:4365
-5509:2:2129
-5510:0:4365
-5511:2:2130
-5512:0:4365
-5513:2:2134
-5514:0:4365
-5515:3:3757
-5516:0:4365
-5517:2:2136
-5518:0:4365
-5519:3:3758
-5520:0:4365
-5521:2:2137
-5522:2:2141
-5523:2:2142
-5524:2:2150
-5525:2:2151
-5526:2:2155
-5527:2:2156
-5528:2:2150
-5529:2:2151
-5530:2:2152
-5531:2:2164
-5532:2:2169
-5533:2:2173
-5534:2:2174
-5535:2:2181
-5536:2:2182
-5537:2:2193
-5538:2:2194
-5539:2:2195
-5540:2:2193
-5541:2:2194
-5542:2:2195
-5543:2:2206
-5544:2:2211
-5545:2:2212
-5546:0:4365
-5547:2:2224
-5548:0:4365
-5549:3:3757
-5550:0:4365
-5551:2:2226
-5552:0:4365
-5553:3:3758
-5554:0:4365
-5555:2:2230
-5556:0:4365
-5557:3:3757
-5558:0:4365
-5559:2:2235
-5560:2:2239
-5561:2:2240
-5562:2:2248
-5563:2:2249
-5564:2:2253
-5565:2:2254
-5566:2:2248
-5567:2:2249
-5568:2:2250
-5569:2:2262
-5570:2:2267
-5571:2:2271
-5572:2:2272
-5573:2:2279
-5574:2:2280
-5575:2:2291
-5576:2:2292
-5577:2:2293
-5578:2:2291
-5579:2:2292
-5580:2:2293
-5581:2:2304
-5582:2:2309
-5583:2:2310
-5584:0:4365
-5585:3:3758
-5586:0:4365
-5587:2:2322
-5588:0:4365
-5589:2:1169
-5590:0:4365
-5591:3:3757
-5592:0:4365
-5593:2:1170
-5594:0:4365
-5595:3:3758
-5596:0:4365
-5597:3:3759
-5598:0:4365
-5599:3:3972
-5600:0:4365
-5601:3:3980
-5602:0:4365
-5603:3:3981
-5604:3:3985
-5605:3:3986
-5606:3:3994
-5607:3:3995
-5608:3:3999
-5609:3:4000
-5610:3:3994
-5611:3:3995
-5612:3:3999
-5613:3:4000
-5614:3:4008
-5615:3:4013
-5616:3:4017
-5617:3:4018
-5618:3:4025
-5619:3:4026
-5620:3:4037
-5621:3:4038
-5622:3:4039
-5623:3:4037
-5624:3:4038
-5625:3:4039
-5626:3:4050
-5627:3:4055
-5628:3:4056
-5629:0:4365
-5630:3:4068
-5631:0:4365
-5632:3:4069
-5633:0:4365
-5634:2:1173
-5635:0:4365
-5636:3:4070
-5637:0:4365
-5638:2:1179
-5639:0:4365
-5640:2:1180
-5641:0:4365
-5642:3:4069
-5643:0:4365
-5644:2:1181
-5645:2:1185
-5646:2:1186
-5647:2:1194
-5648:2:1195
-5649:2:1199
-5650:2:1200
-5651:2:1194
-5652:2:1195
-5653:2:1199
-5654:2:1200
-5655:2:1208
-5656:2:1213
-5657:2:1217
-5658:2:1218
-5659:2:1225
-5660:2:1226
-5661:2:1237
-5662:2:1238
-5663:2:1239
-5664:2:1237
-5665:2:1238
-5666:2:1239
-5667:2:1250
-5668:2:1255
-5669:2:1256
-5670:0:4365
-5671:3:4070
-5672:0:4365
-5673:2:1268
-5674:0:4365
-5675:3:4069
-5676:0:4365
-5677:2:1270
-5678:0:4365
-5679:3:4070
-5680:0:4365
-5681:2:1271
-5682:2:1275
-5683:2:1276
-5684:2:1284
-5685:2:1285
-5686:2:1289
-5687:2:1290
-5688:2:1284
-5689:2:1285
-5690:2:1289
-5691:2:1290
-5692:2:1298
-5693:2:1303
-5694:2:1307
-5695:2:1308
-5696:2:1315
-5697:2:1316
-5698:2:1327
-5699:2:1328
-5700:2:1329
-5701:2:1327
-5702:2:1328
-5703:2:1329
-5704:2:1340
-5705:2:1345
-5706:2:1346
-5707:0:4365
-5708:2:1358
-5709:0:4365
-5710:2:1360
-5711:0:4365
-5712:3:4069
-5713:0:4365
-5714:2:1361
-5715:0:4365
-5716:3:4070
-5717:0:4365
-5718:2:1362
-5719:2:1366
-5720:2:1367
-5721:2:1375
-5722:2:1376
-5723:2:1380
-5724:2:1381
-5725:2:1375
-5726:2:1376
-5727:2:1380
-5728:2:1381
-5729:2:1389
-5730:2:1394
-5731:2:1398
-5732:2:1399
-5733:2:1406
-5734:2:1407
-5735:2:1418
-5736:2:1419
-5737:2:1420
-5738:2:1418
-5739:2:1419
-5740:2:1420
-5741:2:1431
-5742:2:1436
-5743:2:1437
-5744:0:4365
-5745:2:1449
-5746:0:4365
-5747:3:4069
-5748:0:4365
-5749:2:1451
-5750:0:4365
-5751:3:4070
-5752:0:4365
-5753:2:1652
-5754:0:4365
-5755:2:1653
-5756:0:4365
-5757:2:1657
-5758:0:4365
-5759:2:1180
-5760:0:4365
-5761:3:4069
-5762:0:4365
-5763:2:1181
-5764:2:1185
-5765:2:1186
-5766:2:1194
-5767:2:1195
-5768:2:1199
-5769:2:1200
-5770:2:1194
-5771:2:1195
-5772:2:1196
-5773:2:1208
-5774:2:1213
-5775:2:1217
-5776:2:1218
-5777:2:1225
-5778:2:1226
-5779:2:1237
-5780:2:1238
-5781:2:1239
-5782:2:1237
-5783:2:1238
-5784:2:1239
-5785:2:1250
-5786:2:1255
-5787:2:1256
-5788:0:4365
-5789:3:4070
-5790:0:4365
-5791:2:1268
-5792:0:4365
-5793:3:4069
-5794:0:4365
-5795:2:1270
-5796:0:4365
-5797:3:4070
-5798:0:4365
-5799:2:1271
-5800:2:1275
-5801:2:1276
-5802:2:1284
-5803:2:1285
-5804:2:1289
-5805:2:1290
-5806:2:1284
-5807:2:1285
-5808:2:1289
-5809:2:1290
-5810:2:1298
-5811:2:1303
-5812:2:1307
-5813:2:1308
-5814:2:1315
-5815:2:1316
-5816:2:1327
-5817:2:1328
-5818:2:1329
-5819:2:1327
-5820:2:1328
-5821:2:1329
-5822:2:1340
-5823:2:1345
-5824:2:1346
-5825:0:4365
-5826:2:1358
-5827:0:4365
-5828:2:1454
-5829:0:4365
-5830:3:4069
-5831:0:4365
-5832:2:1455
-5833:0:4365
-5834:3:4070
-5835:0:4365
-5836:2:1652
-5837:0:4365
-5838:2:1653
-5839:0:4365
-5840:2:1657
-5841:0:4365
-5842:2:1660
-5843:0:4365
-5844:3:4069
-5845:0:4365
-5846:2:1665
-5847:2:1669
-5848:2:1670
-5849:2:1678
-5850:2:1679
-5851:2:1683
-5852:2:1684
-5853:2:1678
-5854:2:1679
-5855:2:1680
-5856:2:1692
-5857:2:1697
-5858:2:1701
-5859:2:1702
-5860:2:1709
-5861:2:1710
-5862:2:1721
-5863:2:1722
-5864:2:1723
-5865:2:1721
-5866:2:1722
-5867:2:1723
-5868:2:1734
-5869:2:1739
-5870:2:1740
-5871:0:4365
-5872:3:4070
-5873:0:4365
-5874:2:1752
-5875:0:4365
-5876:3:4069
-5877:0:4365
-5878:2:1754
-5879:0:4365
-5880:3:4070
-5881:0:4365
-5882:2:1755
-5883:2:1759
-5884:2:1760
-5885:2:1768
-5886:2:1769
-5887:2:1773
-5888:2:1774
-5889:2:1768
-5890:2:1769
-5891:2:1773
-5892:2:1774
-5893:2:1782
-5894:2:1787
-5895:2:1791
-5896:2:1792
-5897:2:1799
-5898:2:1800
-5899:2:1811
-5900:2:1812
-5901:2:1813
-5902:2:1811
-5903:2:1812
-5904:2:1813
-5905:2:1824
-5906:2:1829
-5907:2:1830
-5908:0:4365
-5909:2:1842
-5910:0:4365
-5911:3:4069
-5912:0:4365
-5913:2:1844
-5914:0:4365
-5915:3:4070
-5916:0:4365
-5917:2:1845
-5918:2:1849
-5919:2:1850
-5920:2:1858
-5921:2:1859
-5922:2:1863
-5923:2:1864
-5924:2:1858
-5925:2:1859
-5926:2:1863
-5927:2:1864
-5928:2:1872
-5929:2:1877
-5930:2:1881
-5931:2:1882
-5932:2:1889
-5933:2:1890
-5934:2:1901
-5935:2:1902
-5936:2:1903
-5937:2:1901
-5938:2:1902
-5939:2:1903
-5940:2:1914
-5941:2:1919
-5942:2:1920
-5943:0:4365
-5944:2:1932
-5945:0:4365
-5946:3:4069
-5947:0:4365
-5948:2:1934
-5949:0:4365
-5950:3:4070
-5951:0:4365
-5952:2:1935
-5953:0:4365
-5954:2:1936
-5955:0:4365
-5956:2:2129
-5957:0:4365
-5958:2:2130
-5959:0:4365
-5960:2:2134
-5961:0:4365
-5962:3:4069
-5963:0:4365
-5964:2:2136
-5965:0:4365
-5966:3:4070
-5967:0:4365
-5968:2:2137
-5969:2:2141
-5970:2:2142
-5971:2:2150
-5972:2:2151
-5973:2:2155
-5974:2:2156
-5975:2:2150
-5976:2:2151
-5977:2:2155
-5978:2:2156
-5979:2:2164
-5980:2:2169
-5981:2:2173
-5982:2:2174
-5983:2:2181
-5984:2:2182
-5985:2:2193
-5986:2:2194
-5987:2:2195
-5988:2:2193
-5989:2:2194
-5990:2:2195
-5991:2:2206
-5992:2:2211
-5993:2:2212
-5994:0:4365
-5995:2:2224
-5996:0:4365
-5997:3:4069
-5998:0:4365
-5999:2:2226
-6000:0:4365
-6001:3:4070
-6002:0:4365
-6003:2:1936
-6004:0:4365
-6005:2:2129
-6006:0:4365
-6007:2:2130
-6008:0:4365
-6009:2:2134
-6010:0:4365
-6011:3:4069
-6012:0:4365
-6013:2:2136
-6014:0:4365
-6015:3:4070
-6016:0:4365
-6017:2:2137
-6018:2:2141
-6019:2:2142
-6020:2:2150
-6021:2:2151
-6022:2:2155
-6023:2:2156
-6024:2:2150
-6025:2:2151
-6026:2:2152
-6027:2:2164
-6028:2:2169
-6029:2:2173
-6030:2:2174
-6031:2:2181
-6032:2:2182
-6033:2:2193
-6034:2:2194
-6035:2:2195
-6036:2:2193
-6037:2:2194
-6038:2:2195
-6039:2:2206
-6040:2:2211
-6041:2:2212
-6042:0:4365
-6043:2:2224
-6044:0:4365
-6045:3:4069
-6046:0:4365
-6047:2:2226
-6048:0:4365
-6049:3:4070
-6050:0:4365
-6051:2:2230
-6052:0:4365
-6053:3:4069
-6054:0:4365
-6055:2:2235
-6056:2:2239
-6057:2:2240
-6058:2:2248
-6059:2:2249
-6060:2:2253
-6061:2:2254
-6062:2:2248
-6063:2:2249
-6064:2:2250
-6065:2:2262
-6066:2:2267
-6067:2:2271
-6068:2:2272
-6069:2:2279
-6070:2:2280
-6071:2:2291
-6072:2:2292
-6073:2:2293
-6074:2:2291
-6075:2:2292
-6076:2:2293
-6077:2:2304
-6078:2:2309
-6079:2:2310
-6080:0:4365
-6081:3:4070
-6082:0:4365
-6083:2:2322
-6084:0:4365
-6085:2:1169
-6086:0:4365
-6087:3:4069
-6088:0:4365
-6089:2:1170
-6090:0:4365
-6091:3:4070
-6092:0:4365
-6093:3:4071
-6094:0:4365
-6095:3:4081
-6096:0:4365
-6097:3:3666
-6098:0:4365
-6099:3:3667
-6100:0:4365
-6101:3:3668
-6102:0:4365
-6103:3:3669
-6104:3:3673
-6105:3:3674
-6106:3:3682
-6107:3:3683
-6108:3:3687
-6109:3:3688
-6110:3:3682
-6111:3:3683
-6112:3:3687
-6113:3:3688
-6114:3:3696
-6115:3:3701
-6116:3:3705
-6117:3:3706
-6118:3:3713
-6119:3:3714
-6120:3:3725
-6121:3:3726
-6122:3:3727
-6123:3:3725
-6124:3:3726
-6125:3:3727
-6126:3:3738
-6127:3:3743
-6128:3:3744
-6129:0:4365
-6130:3:3756
-6131:0:4365
-6132:3:3757
-6133:0:4365
-6134:2:1173
-6135:0:4365
-6136:3:3758
-6137:0:4365
-6138:2:1179
-6139:0:4365
-6140:2:1180
-6141:0:4365
-6142:3:3757
-6143:0:4365
-6144:2:1181
-6145:2:1185
-6146:2:1186
-6147:2:1194
-6148:2:1195
-6149:2:1199
-6150:2:1200
-6151:2:1194
-6152:2:1195
-6153:2:1199
-6154:2:1200
-6155:2:1208
-6156:2:1213
-6157:2:1217
-6158:2:1218
-6159:2:1225
-6160:2:1226
-6161:2:1237
-6162:2:1238
-6163:2:1239
-6164:2:1237
-6165:2:1238
-6166:2:1239
-6167:2:1250
-6168:2:1255
-6169:2:1256
-6170:0:4365
-6171:3:3758
-6172:0:4365
-6173:2:1268
-6174:0:4365
-6175:3:3757
-6176:0:4365
-6177:2:1270
-6178:0:4365
-6179:3:3758
-6180:0:4365
-6181:2:1271
-6182:2:1275
-6183:2:1276
-6184:2:1284
-6185:2:1285
-6186:2:1289
-6187:2:1290
-6188:2:1284
-6189:2:1285
-6190:2:1289
-6191:2:1290
-6192:2:1298
-6193:2:1303
-6194:2:1307
-6195:2:1308
-6196:2:1315
-6197:2:1316
-6198:2:1327
-6199:2:1328
-6200:2:1329
-6201:2:1327
-6202:2:1328
-6203:2:1329
-6204:2:1340
-6205:2:1345
-6206:2:1346
-6207:0:4365
-6208:2:1358
-6209:0:4365
-6210:2:1360
-6211:0:4365
-6212:3:3757
-6213:0:4365
-6214:2:1361
-6215:0:4365
-6216:3:3758
-6217:0:4365
-6218:2:1362
-6219:2:1366
-6220:2:1367
-6221:2:1375
-6222:2:1376
-6223:2:1380
-6224:2:1381
-6225:2:1375
-6226:2:1376
-6227:2:1380
-6228:2:1381
-6229:2:1389
-6230:2:1394
-6231:2:1398
-6232:2:1399
-6233:2:1406
-6234:2:1407
-6235:2:1418
-6236:2:1419
-6237:2:1420
-6238:2:1418
-6239:2:1419
-6240:2:1420
-6241:2:1431
-6242:2:1436
-6243:2:1437
-6244:0:4365
-6245:2:1449
-6246:0:4365
-6247:3:3757
-6248:0:4365
-6249:2:1451
-6250:0:4365
-6251:3:3758
-6252:0:4365
-6253:2:1652
-6254:0:4365
-6255:2:1653
-6256:0:4365
-6257:2:1657
-6258:0:4365
-6259:2:1180
-6260:0:4365
-6261:3:3757
-6262:0:4365
-6263:2:1181
-6264:2:1185
-6265:2:1186
-6266:2:1194
-6267:2:1195
-6268:2:1199
-6269:2:1200
-6270:2:1194
-6271:2:1195
-6272:2:1196
-6273:2:1208
-6274:2:1213
-6275:2:1217
-6276:2:1218
-6277:2:1225
-6278:2:1226
-6279:2:1237
-6280:2:1238
-6281:2:1239
-6282:2:1237
-6283:2:1238
-6284:2:1239
-6285:2:1250
-6286:2:1255
-6287:2:1256
-6288:0:4365
-6289:3:3758
-6290:0:4365
-6291:2:1268
-6292:0:4365
-6293:3:3757
-6294:0:4365
-6295:2:1270
-6296:0:4365
-6297:3:3758
-6298:0:4365
-6299:2:1271
-6300:2:1275
-6301:2:1276
-6302:2:1284
-6303:2:1285
-6304:2:1289
-6305:2:1290
-6306:2:1284
-6307:2:1285
-6308:2:1289
-6309:2:1290
-6310:2:1298
-6311:2:1303
-6312:2:1307
-6313:2:1308
-6314:2:1315
-6315:2:1316
-6316:2:1327
-6317:2:1328
-6318:2:1329
-6319:2:1327
-6320:2:1328
-6321:2:1329
-6322:2:1340
-6323:2:1345
-6324:2:1346
-6325:0:4365
-6326:2:1358
-6327:0:4365
-6328:2:1454
-6329:0:4365
-6330:3:3757
-6331:0:4365
-6332:2:1455
-6333:0:4365
-6334:3:3758
-6335:0:4365
-6336:2:1652
-6337:0:4365
-6338:2:1653
-6339:0:4365
-6340:2:1657
-6341:0:4365
-6342:2:1660
-6343:0:4365
-6344:3:3757
-6345:0:4365
-6346:2:1665
-6347:2:1669
-6348:2:1670
-6349:2:1678
-6350:2:1679
-6351:2:1683
-6352:2:1684
-6353:2:1678
-6354:2:1679
-6355:2:1680
-6356:2:1692
-6357:2:1697
-6358:2:1701
-6359:2:1702
-6360:2:1709
-6361:2:1710
-6362:2:1721
-6363:2:1722
-6364:2:1723
-6365:2:1721
-6366:2:1722
-6367:2:1723
-6368:2:1734
-6369:2:1739
-6370:2:1740
-6371:0:4365
-6372:3:3758
-6373:0:4365
-6374:2:1752
-6375:0:4365
-6376:3:3757
-6377:0:4365
-6378:2:1754
-6379:0:4365
-6380:3:3758
-6381:0:4365
-6382:2:1755
-6383:2:1759
-6384:2:1760
-6385:2:1768
-6386:2:1769
-6387:2:1773
-6388:2:1774
-6389:2:1768
-6390:2:1769
-6391:2:1773
-6392:2:1774
-6393:2:1782
-6394:2:1787
-6395:2:1791
-6396:2:1792
-6397:2:1799
-6398:2:1800
-6399:2:1811
-6400:2:1812
-6401:2:1813
-6402:2:1811
-6403:2:1812
-6404:2:1813
-6405:2:1824
-6406:2:1829
-6407:2:1830
-6408:0:4365
-6409:2:1842
-6410:0:4365
-6411:3:3757
-6412:0:4365
-6413:2:1844
-6414:0:4365
-6415:3:3758
-6416:0:4365
-6417:2:1845
-6418:2:1849
-6419:2:1850
-6420:2:1858
-6421:2:1859
-6422:2:1863
-6423:2:1864
-6424:2:1858
-6425:2:1859
-6426:2:1863
-6427:2:1864
-6428:2:1872
-6429:2:1877
-6430:2:1881
-6431:2:1882
-6432:2:1889
-6433:2:1890
-6434:2:1901
-6435:2:1902
-6436:2:1903
-6437:2:1901
-6438:2:1902
-6439:2:1903
-6440:2:1914
-6441:2:1919
-6442:2:1920
-6443:0:4365
-6444:2:1932
-6445:0:4365
-6446:3:3757
-6447:0:4365
-6448:2:1934
-6449:0:4365
-6450:3:3758
-6451:0:4365
-6452:2:1935
-6453:0:4365
-6454:2:1936
-6455:0:4365
-6456:2:2129
-6457:0:4365
-6458:2:2130
-6459:0:4365
-6460:2:2134
-6461:0:4365
-6462:3:3757
-6463:0:4365
-6464:2:2136
-6465:0:4365
-6466:3:3758
-6467:0:4365
-6468:2:2137
-6469:2:2141
-6470:2:2142
-6471:2:2150
-6472:2:2151
-6473:2:2155
-6474:2:2156
-6475:2:2150
-6476:2:2151
-6477:2:2155
-6478:2:2156
-6479:2:2164
-6480:2:2169
-6481:2:2173
-6482:2:2174
-6483:2:2181
-6484:2:2182
-6485:2:2193
-6486:2:2194
-6487:2:2195
-6488:2:2193
-6489:2:2194
-6490:2:2195
-6491:2:2206
-6492:2:2211
-6493:2:2212
-6494:0:4365
-6495:2:2224
-6496:0:4365
-6497:3:3757
-6498:0:4365
-6499:2:2226
-6500:0:4365
-6501:3:3758
-6502:0:4365
-6503:2:1936
-6504:0:4365
-6505:2:2129
-6506:0:4365
-6507:2:2130
-6508:0:4365
-6509:2:2134
-6510:0:4365
-6511:3:3757
-6512:0:4365
-6513:2:2136
-6514:0:4365
-6515:3:3758
-6516:0:4365
-6517:2:2137
-6518:2:2141
-6519:2:2142
-6520:2:2150
-6521:2:2151
-6522:2:2155
-6523:2:2156
-6524:2:2150
-6525:2:2151
-6526:2:2152
-6527:2:2164
-6528:2:2169
-6529:2:2173
-6530:2:2174
-6531:2:2181
-6532:2:2182
-6533:2:2193
-6534:2:2194
-6535:2:2195
-6536:2:2193
-6537:2:2194
-6538:2:2195
-6539:2:2206
-6540:2:2211
-6541:2:2212
-6542:0:4365
-6543:2:2224
-6544:0:4365
-6545:3:3757
-6546:0:4365
-6547:2:2226
-6548:0:4365
-6549:3:3758
-6550:0:4365
-6551:2:2230
-6552:0:4365
-6553:3:3757
-6554:0:4365
-6555:2:2235
-6556:2:2239
-6557:2:2240
-6558:2:2248
-6559:2:2249
-6560:2:2253
-6561:2:2254
-6562:2:2248
-6563:2:2249
-6564:2:2250
-6565:2:2262
-6566:2:2267
-6567:2:2271
-6568:2:2272
-6569:2:2279
-6570:2:2280
-6571:2:2291
-6572:2:2292
-6573:2:2293
-6574:2:2291
-6575:2:2292
-6576:2:2293
-6577:2:2304
-6578:2:2309
-6579:2:2310
-6580:0:4365
-6581:3:3758
-6582:0:4365
-6583:2:2322
-6584:0:4365
-6585:2:1169
-6586:0:4365
-6587:3:3757
-6588:0:4365
-6589:2:1170
-6590:0:4365
-6591:3:3758
-6592:0:4365
-6593:3:3759
-6594:0:4365
-6595:3:3972
-6596:0:4365
-6597:3:4077
-6598:0:4365
-6599:3:4078
-6600:0:4365
-6601:3:4082
-6602:0:4365
-6603:3:4088
-6604:0:4365
-6605:3:4092
-6606:3:4093
-6607:3:4097
-6608:3:4101
-6609:3:4102
-6610:3:4097
-6611:3:4101
-6612:3:4102
-6613:3:4106
-6614:3:4114
-6615:3:4115
-6616:3:4120
-6617:3:4127
-6618:3:4128
-6619:3:4127
-6620:3:4128
-6621:3:4135
-6622:3:4140
-6623:0:4365
-6624:3:4151
-6625:0:4365
-6626:3:4155
-6627:3:4156
-6628:3:4160
-6629:3:4164
-6630:3:4165
-6631:3:4160
-6632:3:4164
-6633:3:4165
-6634:3:4169
-6635:3:4177
-6636:3:4178
-6637:3:4183
-6638:3:4190
-6639:3:4191
-6640:3:4190
-6641:3:4191
-6642:3:4198
-6643:3:4203
-6644:0:4365
-6645:3:4151
-6646:0:4365
-6647:3:4155
-6648:3:4156
-6649:3:4160
-6650:3:4164
-6651:3:4165
-6652:3:4160
-6653:3:4164
-6654:3:4165
-6655:3:4169
-6656:3:4177
-6657:3:4178
-6658:3:4183
-6659:3:4190
-6660:3:4191
-6661:3:4190
-6662:3:4191
-6663:3:4198
-6664:3:4203
-6665:0:4365
-6666:3:4214
-6667:0:4365
-6668:3:4222
-6669:3:4223
-6670:3:4227
-6671:3:4231
-6672:3:4232
-6673:3:4227
-6674:3:4231
-6675:3:4232
-6676:3:4236
-6677:3:4244
-6678:3:4245
-6679:3:4250
-6680:3:4257
-6681:3:4258
-6682:3:4257
-6683:3:4258
-6684:3:4265
-6685:3:4270
-6686:0:4365
-6687:3:4285
-6688:0:4365
-6689:3:4286
-6690:0:4365
-6691:2:1173
-6692:0:4365
-6693:3:4287
-6694:0:4365
-6695:2:1179
-6696:0:4365
-6697:2:1180
-6698:0:4365
-6699:3:4286
-6700:0:4365
-6701:2:1181
-6702:2:1185
-6703:2:1186
-6704:2:1194
-6705:2:1195
-6706:2:1199
-6707:2:1200
-6708:2:1194
-6709:2:1195
-6710:2:1199
-6711:2:1200
-6712:2:1208
-6713:2:1213
-6714:2:1217
-6715:2:1218
-6716:2:1225
-6717:2:1226
-6718:2:1237
-6719:2:1238
-6720:2:1239
-6721:2:1237
-6722:2:1238
-6723:2:1239
-6724:2:1250
-6725:2:1255
-6726:2:1256
-6727:0:4365
-6728:3:4287
-6729:0:4365
-6730:2:1268
-6731:0:4365
-6732:3:4286
-6733:0:4365
-6734:2:1270
-6735:0:4365
-6736:3:4287
-6737:0:4365
-6738:2:1271
-6739:2:1275
-6740:2:1276
-6741:2:1284
-6742:2:1285
-6743:2:1289
-6744:2:1290
-6745:2:1284
-6746:2:1285
-6747:2:1289
-6748:2:1290
-6749:2:1298
-6750:2:1303
-6751:2:1307
-6752:2:1308
-6753:2:1315
-6754:2:1316
-6755:2:1327
-6756:2:1328
-6757:2:1329
-6758:2:1327
-6759:2:1328
-6760:2:1329
-6761:2:1340
-6762:2:1345
-6763:2:1346
-6764:0:4365
-6765:2:1358
-6766:0:4365
-6767:2:1360
-6768:0:4365
-6769:3:4286
-6770:0:4365
-6771:2:1361
-6772:0:4365
-6773:3:4287
-6774:0:4365
-6775:2:1362
-6776:2:1366
-6777:2:1367
-6778:2:1375
-6779:2:1376
-6780:2:1380
-6781:2:1381
-6782:2:1375
-6783:2:1376
-6784:2:1380
-6785:2:1381
-6786:2:1389
-6787:2:1394
-6788:2:1398
-6789:2:1399
-6790:2:1406
-6791:2:1407
-6792:2:1418
-6793:2:1419
-6794:2:1420
-6795:2:1418
-6796:2:1419
-6797:2:1420
-6798:2:1431
-6799:2:1436
-6800:2:1437
-6801:0:4365
-6802:2:1449
-6803:0:4365
-6804:3:4286
-6805:0:4365
-6806:2:1451
-6807:0:4365
-6808:3:4287
-6809:0:4365
-6810:2:1652
-6811:0:4365
-6812:2:1653
-6813:0:4365
-6814:2:1657
-6815:0:4365
-6816:2:1180
-6817:0:4365
-6818:3:4286
-6819:0:4365
-6820:2:1181
-6821:2:1185
-6822:2:1186
-6823:2:1194
-6824:2:1195
-6825:2:1199
-6826:2:1200
-6827:2:1194
-6828:2:1195
-6829:2:1196
-6830:2:1208
-6831:2:1213
-6832:2:1217
-6833:2:1218
-6834:2:1225
-6835:2:1226
-6836:2:1237
-6837:2:1238
-6838:2:1239
-6839:2:1237
-6840:2:1238
-6841:2:1239
-6842:2:1250
-6843:2:1255
-6844:2:1256
-6845:0:4365
-6846:3:4287
-6847:0:4365
-6848:2:1268
-6849:0:4365
-6850:3:4286
-6851:0:4365
-6852:2:1270
-6853:0:4365
-6854:3:4287
-6855:0:4365
-6856:2:1271
-6857:2:1275
-6858:2:1276
-6859:2:1284
-6860:2:1285
-6861:2:1289
-6862:2:1290
-6863:2:1284
-6864:2:1285
-6865:2:1289
-6866:2:1290
-6867:2:1298
-6868:2:1303
-6869:2:1307
-6870:2:1308
-6871:2:1315
-6872:2:1316
-6873:2:1327
-6874:2:1328
-6875:2:1329
-6876:2:1327
-6877:2:1328
-6878:2:1329
-6879:2:1340
-6880:2:1345
-6881:2:1346
-6882:0:4365
-6883:2:1358
-6884:0:4365
-6885:2:1454
-6886:0:4365
-6887:3:4286
-6888:0:4365
-6889:2:1455
-6890:0:4365
-6891:3:4287
-6892:0:4365
-6893:2:1652
-6894:0:4365
-6895:2:1653
-6896:0:4365
-6897:2:1657
-6898:0:4365
-6899:2:1660
-6900:0:4365
-6901:3:4286
-6902:0:4365
-6903:2:1665
-6904:2:1669
-6905:2:1670
-6906:2:1678
-6907:2:1679
-6908:2:1683
-6909:2:1684
-6910:2:1678
-6911:2:1679
-6912:2:1680
-6913:2:1692
-6914:2:1697
-6915:2:1701
-6916:2:1702
-6917:2:1709
-6918:2:1710
-6919:2:1721
-6920:2:1722
-6921:2:1723
-6922:2:1721
-6923:2:1722
-6924:2:1723
-6925:2:1734
-6926:2:1739
-6927:2:1740
-6928:0:4365
-6929:3:4287
-6930:0:4365
-6931:2:1752
-6932:0:4365
-6933:3:4286
-6934:0:4365
-6935:2:1754
-6936:0:4365
-6937:3:4287
-6938:0:4365
-6939:2:1755
-6940:2:1759
-6941:2:1760
-6942:2:1768
-6943:2:1769
-6944:2:1773
-6945:2:1774
-6946:2:1768
-6947:2:1769
-6948:2:1773
-6949:2:1774
-6950:2:1782
-6951:2:1787
-6952:2:1791
-6953:2:1792
-6954:2:1799
-6955:2:1800
-6956:2:1811
-6957:2:1812
-6958:2:1813
-6959:2:1811
-6960:2:1812
-6961:2:1813
-6962:2:1824
-6963:2:1829
-6964:2:1830
-6965:0:4365
-6966:2:1842
-6967:0:4365
-6968:3:4286
-6969:0:4365
-6970:2:1844
-6971:0:4365
-6972:3:4287
-6973:0:4365
-6974:2:1845
-6975:2:1849
-6976:2:1850
-6977:2:1858
-6978:2:1859
-6979:2:1863
-6980:2:1864
-6981:2:1858
-6982:2:1859
-6983:2:1863
-6984:2:1864
-6985:2:1872
-6986:2:1877
-6987:2:1881
-6988:2:1882
-6989:2:1889
-6990:2:1890
-6991:2:1901
-6992:2:1902
-6993:2:1903
-6994:2:1901
-6995:2:1902
-6996:2:1903
-6997:2:1914
-6998:2:1919
-6999:2:1920
-7000:0:4365
-7001:2:1932
-7002:0:4365
-7003:3:4286
-7004:0:4365
-7005:2:1934
-7006:0:4365
-7007:3:4287
-7008:0:4365
-7009:2:1935
-7010:0:4365
-7011:2:1936
-7012:0:4365
-7013:2:2129
-7014:0:4365
-7015:2:2130
-7016:0:4365
-7017:2:2134
-7018:0:4365
-7019:3:4286
-7020:0:4365
-7021:2:2136
-7022:0:4365
-7023:3:4287
-7024:0:4365
-7025:2:2137
-7026:2:2141
-7027:2:2142
-7028:2:2150
-7029:2:2151
-7030:2:2155
-7031:2:2156
-7032:2:2150
-7033:2:2151
-7034:2:2155
-7035:2:2156
-7036:2:2164
-7037:2:2169
-7038:2:2173
-7039:2:2174
-7040:2:2181
-7041:2:2182
-7042:2:2193
-7043:2:2194
-7044:2:2195
-7045:2:2193
-7046:2:2194
-7047:2:2195
-7048:2:2206
-7049:2:2211
-7050:2:2212
-7051:0:4365
-7052:2:2224
-7053:0:4365
-7054:3:4286
-7055:0:4365
-7056:2:2226
-7057:0:4365
-7058:3:4287
-7059:0:4365
-7060:2:1936
-7061:0:4365
-7062:2:2129
-7063:0:4365
-7064:2:2130
-7065:0:4365
-7066:2:2134
-7067:0:4365
-7068:3:4286
-7069:0:4365
-7070:2:2136
-7071:0:4365
-7072:3:4287
-7073:0:4365
-7074:2:2137
-7075:2:2141
-7076:2:2142
-7077:2:2150
-7078:2:2151
-7079:2:2155
-7080:2:2156
-7081:2:2150
-7082:2:2151
-7083:2:2152
-7084:2:2164
-7085:2:2169
-7086:2:2173
-7087:2:2174
-7088:2:2181
-7089:2:2182
-7090:2:2193
-7091:2:2194
-7092:2:2195
-7093:2:2193
-7094:2:2194
-7095:2:2195
-7096:2:2206
-7097:2:2211
-7098:2:2212
-7099:0:4365
-7100:2:2224
-7101:0:4365
-7102:3:4286
-7103:0:4365
-7104:2:2226
-7105:0:4365
-7106:3:4287
-7107:0:4365
-7108:2:2230
-7109:0:4365
-7110:3:4286
-7111:0:4365
-7112:2:2235
-7113:2:2239
-7114:2:2240
-7115:2:2248
-7116:2:2249
-7117:2:2253
-7118:2:2254
-7119:2:2248
-7120:2:2249
-7121:2:2250
-7122:2:2262
-7123:2:2267
-7124:2:2271
-7125:2:2272
-7126:2:2279
-7127:2:2280
-7128:2:2291
-7129:2:2292
-7130:2:2293
-7131:2:2291
-7132:2:2292
-7133:2:2293
-7134:2:2304
-7135:2:2309
-7136:2:2310
-7137:0:4365
-7138:3:4287
-7139:0:4365
-7140:2:2322
-7141:0:4365
-7142:2:1169
-7143:0:4365
-7144:3:4286
-7145:0:4365
-7146:2:1170
-7147:0:4365
-7148:3:4287
-7149:0:4365
-7150:3:4288
-7151:0:4365
-7152:3:4294
-7153:0:4365
-7154:3:4295
-7155:0:4365
-7156:3:2338
-7157:0:4365
-7158:3:2339
-7159:3:2343
-7160:3:2344
-7161:3:2352
-7162:3:2353
-7163:3:2357
-7164:3:2358
-7165:3:2352
-7166:3:2353
-7167:3:2357
-7168:3:2358
-7169:3:2366
-7170:3:2371
-7171:3:2375
-7172:3:2376
-7173:3:2383
-7174:3:2384
-7175:3:2395
-7176:3:2396
-7177:3:2397
-7178:3:2395
-7179:3:2396
-7180:3:2397
-7181:3:2408
-7182:3:2413
-7183:3:2414
-7184:0:4365
-7185:3:2426
-7186:0:4365
-7187:3:2427
-7188:0:4365
-7189:2:1173
-7190:0:4365
-7191:3:2428
-7192:0:4365
-7193:2:1179
-7194:0:4365
-7195:2:1180
-7196:0:4365
-7197:3:2427
-7198:0:4365
-7199:2:1181
-7200:2:1185
-7201:2:1186
-7202:2:1194
-7203:2:1195
-7204:2:1199
-7205:2:1200
-7206:2:1194
-7207:2:1195
-7208:2:1199
-7209:2:1200
-7210:2:1208
-7211:2:1213
-7212:2:1217
-7213:2:1218
-7214:2:1225
-7215:2:1226
-7216:2:1237
-7217:2:1238
-7218:2:1239
-7219:2:1237
-7220:2:1238
-7221:2:1239
-7222:2:1250
-7223:2:1255
-7224:2:1256
-7225:0:4365
-7226:3:2428
-7227:0:4365
-7228:2:1268
-7229:0:4365
-7230:3:2427
-7231:0:4365
-7232:2:1270
-7233:0:4365
-7234:3:2428
-7235:0:4365
-7236:2:1271
-7237:2:1275
-7238:2:1276
-7239:2:1284
-7240:2:1285
-7241:2:1289
-7242:2:1290
-7243:2:1284
-7244:2:1285
-7245:2:1289
-7246:2:1290
-7247:2:1298
-7248:2:1303
-7249:2:1307
-7250:2:1308
-7251:2:1315
-7252:2:1316
-7253:2:1327
-7254:2:1328
-7255:2:1329
-7256:2:1327
-7257:2:1328
-7258:2:1329
-7259:2:1340
-7260:2:1345
-7261:2:1346
-7262:0:4365
-7263:2:1358
-7264:0:4365
-7265:2:1360
-7266:0:4365
-7267:3:2427
-7268:0:4365
-7269:2:1361
-7270:0:4365
-7271:3:2428
-7272:0:4365
-7273:2:1362
-7274:2:1366
-7275:2:1367
-7276:2:1375
-7277:2:1376
-7278:2:1380
-7279:2:1381
-7280:2:1375
-7281:2:1376
-7282:2:1380
-7283:2:1381
-7284:2:1389
-7285:2:1394
-7286:2:1398
-7287:2:1399
-7288:2:1406
-7289:2:1407
-7290:2:1418
-7291:2:1419
-7292:2:1420
-7293:2:1418
-7294:2:1419
-7295:2:1420
-7296:2:1431
-7297:2:1436
-7298:2:1437
-7299:0:4365
-7300:2:1449
-7301:0:4365
-7302:3:2427
-7303:0:4365
-7304:2:1451
-7305:0:4365
-7306:3:2428
-7307:0:4365
-7308:2:1652
-7309:0:4365
-7310:2:1653
-7311:0:4365
-7312:2:1657
-7313:0:4365
-7314:2:1180
-7315:0:4365
-7316:3:2427
-7317:0:4365
-7318:2:1181
-7319:2:1185
-7320:2:1186
-7321:2:1194
-7322:2:1195
-7323:2:1199
-7324:2:1200
-7325:2:1194
-7326:2:1195
-7327:2:1196
-7328:2:1208
-7329:2:1213
-7330:2:1217
-7331:2:1218
-7332:2:1225
-7333:2:1226
-7334:2:1237
-7335:2:1238
-7336:2:1239
-7337:2:1237
-7338:2:1238
-7339:2:1239
-7340:2:1250
-7341:2:1255
-7342:2:1256
-7343:0:4365
-7344:3:2428
-7345:0:4365
-7346:2:1268
-7347:0:4365
-7348:3:2427
-7349:0:4365
-7350:2:1270
-7351:0:4365
-7352:3:2428
-7353:0:4365
-7354:2:1271
-7355:2:1275
-7356:2:1276
-7357:2:1284
-7358:2:1285
-7359:2:1289
-7360:2:1290
-7361:2:1284
-7362:2:1285
-7363:2:1289
-7364:2:1290
-7365:2:1298
-7366:2:1303
-7367:2:1307
-7368:2:1308
-7369:2:1315
-7370:2:1316
-7371:2:1327
-7372:2:1328
-7373:2:1329
-7374:2:1327
-7375:2:1328
-7376:2:1329
-7377:2:1340
-7378:2:1345
-7379:2:1346
-7380:0:4365
-7381:2:1358
-7382:0:4365
-7383:2:1454
-7384:0:4365
-7385:3:2427
-7386:0:4365
-7387:2:1455
-7388:0:4365
-7389:3:2428
-7390:0:4365
-7391:2:1652
-7392:0:4365
-7393:2:1653
-7394:0:4365
-7395:2:1657
-7396:0:4365
-7397:2:1660
-7398:0:4365
-7399:3:2427
-7400:0:4365
-7401:2:1665
-7402:2:1669
-7403:2:1670
-7404:2:1678
-7405:2:1679
-7406:2:1683
-7407:2:1684
-7408:2:1678
-7409:2:1679
-7410:2:1680
-7411:2:1692
-7412:2:1697
-7413:2:1701
-7414:2:1702
-7415:2:1709
-7416:2:1710
-7417:2:1721
-7418:2:1722
-7419:2:1723
-7420:2:1721
-7421:2:1722
-7422:2:1723
-7423:2:1734
-7424:2:1739
-7425:2:1740
-7426:0:4365
-7427:3:2428
-7428:0:4365
-7429:2:1752
-7430:0:4365
-7431:3:2427
-7432:0:4365
-7433:2:1754
-7434:0:4365
-7435:3:2428
-7436:0:4365
-7437:2:1755
-7438:2:1759
-7439:2:1760
-7440:2:1768
-7441:2:1769
-7442:2:1773
-7443:2:1774
-7444:2:1768
-7445:2:1769
-7446:2:1773
-7447:2:1774
-7448:2:1782
-7449:2:1787
-7450:2:1791
-7451:2:1792
-7452:2:1799
-7453:2:1800
-7454:2:1811
-7455:2:1812
-7456:2:1813
-7457:2:1811
-7458:2:1812
-7459:2:1813
-7460:2:1824
-7461:2:1829
-7462:2:1830
-7463:0:4365
-7464:2:1842
-7465:0:4365
-7466:3:2427
-7467:0:4365
-7468:2:1844
-7469:0:4365
-7470:3:2428
-7471:0:4365
-7472:2:1845
-7473:2:1849
-7474:2:1850
-7475:2:1858
-7476:2:1859
-7477:2:1863
-7478:2:1864
-7479:2:1858
-7480:2:1859
-7481:2:1863
-7482:2:1864
-7483:2:1872
-7484:2:1877
-7485:2:1881
-7486:2:1882
-7487:2:1889
-7488:2:1890
-7489:2:1901
-7490:2:1902
-7491:2:1903
-7492:2:1901
-7493:2:1902
-7494:2:1903
-7495:2:1914
-7496:2:1919
-7497:2:1920
-7498:0:4365
-7499:2:1932
-7500:0:4365
-7501:3:2427
-7502:0:4365
-7503:2:1934
-7504:0:4365
-7505:3:2428
-7506:0:4365
-7507:2:1935
-7508:0:4365
-7509:2:1936
-7510:0:4365
-7511:2:2129
-7512:0:4365
-7513:2:2130
-7514:0:4365
-7515:2:2134
-7516:0:4365
-7517:3:2427
-7518:0:4365
-7519:2:2136
-7520:0:4365
-7521:3:2428
-7522:0:4365
-7523:2:2137
-7524:2:2141
-7525:2:2142
-7526:2:2150
-7527:2:2151
-7528:2:2155
-7529:2:2156
-7530:2:2150
-7531:2:2151
-7532:2:2155
-7533:2:2156
-7534:2:2164
-7535:2:2169
-7536:2:2173
-7537:2:2174
-7538:2:2181
-7539:2:2182
-7540:2:2193
-7541:2:2194
-7542:2:2195
-7543:2:2193
-7544:2:2194
-7545:2:2195
-7546:2:2206
-7547:2:2211
-7548:2:2212
-7549:0:4365
-7550:2:2224
-7551:0:4365
-7552:3:2427
-7553:0:4365
-7554:2:2226
-7555:0:4365
-7556:3:2428
-7557:0:4365
-7558:2:1936
-7559:0:4365
-7560:2:2129
-7561:0:4365
-7562:2:2130
-7563:0:4365
-7564:2:2134
-7565:0:4365
-7566:3:2427
-7567:0:4365
-7568:2:2136
-7569:0:4365
-7570:3:2428
-7571:0:4365
-7572:2:2137
-7573:2:2141
-7574:2:2142
-7575:2:2150
-7576:2:2151
-7577:2:2155
-7578:2:2156
-7579:2:2150
-7580:2:2151
-7581:2:2152
-7582:2:2164
-7583:2:2169
-7584:2:2173
-7585:2:2174
-7586:2:2181
-7587:2:2182
-7588:2:2193
-7589:2:2194
-7590:2:2195
-7591:2:2193
-7592:2:2194
-7593:2:2195
-7594:2:2206
-7595:2:2211
-7596:2:2212
-7597:0:4365
-7598:2:2224
-7599:0:4365
-7600:3:2427
-7601:0:4365
-7602:2:2226
-7603:0:4365
-7604:3:2428
-7605:0:4365
-7606:2:2230
-7607:0:4365
-7608:3:2427
-7609:0:4365
-7610:2:2235
-7611:2:2239
-7612:2:2240
-7613:2:2248
-7614:2:2249
-7615:2:2253
-7616:2:2254
-7617:2:2248
-7618:2:2249
-7619:2:2250
-7620:2:2262
-7621:2:2267
-7622:2:2271
-7623:2:2272
-7624:2:2279
-7625:2:2280
-7626:2:2291
-7627:2:2292
-7628:2:2293
-7629:2:2291
-7630:2:2292
-7631:2:2293
-7632:2:2304
-7633:2:2309
-7634:2:2310
-7635:0:4365
-7636:3:2428
-7637:0:4365
-7638:2:2322
-7639:0:4365
-7640:2:1169
-7641:0:4365
-7642:3:2427
-7643:0:4365
-7644:2:1170
-7645:0:4365
-7646:3:2428
-7647:0:4365
-7648:3:2429
-7649:0:4365
-7650:3:2435
-7651:3:2436
-7652:0:4365
-7653:3:2440
-7654:3:2444
-7655:3:2445
-7656:3:2453
-7657:3:2454
-7658:3:2458
-7659:3:2459
-7660:3:2453
-7661:3:2454
-7662:3:2458
-7663:3:2459
-7664:3:2467
-7665:3:2472
-7666:3:2473
-7667:3:2484
-7668:3:2485
-7669:3:2496
-7670:3:2497
-7671:3:2498
-7672:3:2496
-7673:3:2497
-7674:3:2498
-7675:3:2509
-7676:3:2514
-7677:3:2515
-7678:0:4365
-7679:3:2527
-7680:0:4365
-7681:3:2528
-7682:0:4365
-7683:2:1173
-7684:0:4365
-7685:3:2529
-7686:0:4365
-7687:2:1179
-7688:0:4365
-7689:2:1180
-7690:0:4365
-7691:3:2528
-7692:0:4365
-7693:2:1181
-7694:2:1185
-7695:2:1186
-7696:2:1194
-7697:2:1195
-7698:2:1199
-7699:2:1200
-7700:2:1194
-7701:2:1195
-7702:2:1199
-7703:2:1200
-7704:2:1208
-7705:2:1213
-7706:2:1217
-7707:2:1218
-7708:2:1225
-7709:2:1226
-7710:2:1237
-7711:2:1238
-7712:2:1239
-7713:2:1237
-7714:2:1238
-7715:2:1239
-7716:2:1250
-7717:2:1255
-7718:2:1256
-7719:0:4365
-7720:3:2529
-7721:0:4365
-7722:2:1268
-7723:0:4365
-7724:3:2528
-7725:0:4365
-7726:2:1270
-7727:0:4365
-7728:3:2529
-7729:0:4365
-7730:2:1271
-7731:2:1275
-7732:2:1276
-7733:2:1284
-7734:2:1285
-7735:2:1289
-7736:2:1290
-7737:2:1284
-7738:2:1285
-7739:2:1289
-7740:2:1290
-7741:2:1298
-7742:2:1303
-7743:2:1307
-7744:2:1308
-7745:2:1315
-7746:2:1316
-7747:2:1327
-7748:2:1328
-7749:2:1329
-7750:2:1327
-7751:2:1328
-7752:2:1329
-7753:2:1340
-7754:2:1345
-7755:2:1346
-7756:0:4365
-7757:2:1358
-7758:0:4365
-7759:2:1360
-7760:0:4365
-7761:3:2528
-7762:0:4365
-7763:2:1361
-7764:0:4365
-7765:3:2529
-7766:0:4365
-7767:2:1362
-7768:2:1366
-7769:2:1367
-7770:2:1375
-7771:2:1376
-7772:2:1380
-7773:2:1381
-7774:2:1375
-7775:2:1376
-7776:2:1380
-7777:2:1381
-7778:2:1389
-7779:2:1394
-7780:2:1398
-7781:2:1399
-7782:2:1406
-7783:2:1407
-7784:2:1418
-7785:2:1419
-7786:2:1420
-7787:2:1418
-7788:2:1419
-7789:2:1420
-7790:2:1431
-7791:2:1436
-7792:2:1437
-7793:0:4365
-7794:2:1449
-7795:0:4365
-7796:3:2528
-7797:0:4365
-7798:2:1451
-7799:0:4365
-7800:3:2529
-7801:0:4365
-7802:2:1652
-7803:0:4365
-7804:2:1653
-7805:0:4365
-7806:2:1657
-7807:0:4365
-7808:2:1180
-7809:0:4365
-7810:3:2528
-7811:0:4365
-7812:2:1181
-7813:2:1185
-7814:2:1186
-7815:2:1194
-7816:2:1195
-7817:2:1199
-7818:2:1200
-7819:2:1194
-7820:2:1195
-7821:2:1196
-7822:2:1208
-7823:2:1213
-7824:2:1217
-7825:2:1218
-7826:2:1225
-7827:2:1226
-7828:2:1237
-7829:2:1238
-7830:2:1239
-7831:2:1237
-7832:2:1238
-7833:2:1239
-7834:2:1250
-7835:2:1255
-7836:2:1256
-7837:0:4365
-7838:3:2529
-7839:0:4365
-7840:2:1268
-7841:0:4365
-7842:3:2528
-7843:0:4365
-7844:2:1270
-7845:0:4365
-7846:3:2529
-7847:0:4365
-7848:2:1271
-7849:2:1275
-7850:2:1276
-7851:2:1284
-7852:2:1285
-7853:2:1289
-7854:2:1290
-7855:2:1284
-7856:2:1285
-7857:2:1289
-7858:2:1290
-7859:2:1298
-7860:2:1303
-7861:2:1307
-7862:2:1308
-7863:2:1315
-7864:2:1316
-7865:2:1327
-7866:2:1328
-7867:2:1329
-7868:2:1327
-7869:2:1328
-7870:2:1329
-7871:2:1340
-7872:2:1345
-7873:2:1346
-7874:0:4365
-7875:2:1358
-7876:0:4365
-7877:2:1454
-7878:0:4365
-7879:3:2528
-7880:0:4365
-7881:2:1455
-7882:0:4365
-7883:3:2529
-7884:0:4365
-7885:2:1652
-7886:0:4365
-7887:2:1653
-7888:0:4365
-7889:2:1657
-7890:0:4365
-7891:2:1660
-7892:0:4365
-7893:3:2528
-7894:0:4365
-7895:2:1665
-7896:2:1669
-7897:2:1670
-7898:2:1678
-7899:2:1679
-7900:2:1683
-7901:2:1684
-7902:2:1678
-7903:2:1679
-7904:2:1680
-7905:2:1692
-7906:2:1697
-7907:2:1701
-7908:2:1702
-7909:2:1709
-7910:2:1710
-7911:2:1721
-7912:2:1722
-7913:2:1723
-7914:2:1721
-7915:2:1722
-7916:2:1723
-7917:2:1734
-7918:2:1739
-7919:2:1740
-7920:0:4365
-7921:3:2529
-7922:0:4365
-7923:2:1752
-7924:0:4365
-7925:3:2528
-7926:0:4365
-7927:2:1754
-7928:0:4365
-7929:3:2529
-7930:0:4365
-7931:2:1755
-7932:2:1759
-7933:2:1760
-7934:2:1768
-7935:2:1769
-7936:2:1773
-7937:2:1774
-7938:2:1768
-7939:2:1769
-7940:2:1773
-7941:2:1774
-7942:2:1782
-7943:2:1787
-7944:2:1791
-7945:2:1792
-7946:2:1799
-7947:2:1800
-7948:2:1811
-7949:2:1812
-7950:2:1813
-7951:2:1811
-7952:2:1812
-7953:2:1813
-7954:2:1824
-7955:2:1829
-7956:2:1830
-7957:0:4365
-7958:2:1842
-7959:0:4365
-7960:3:2528
-7961:0:4365
-7962:2:1844
-7963:0:4365
-7964:3:2529
-7965:0:4365
-7966:2:1845
-7967:2:1849
-7968:2:1850
-7969:2:1858
-7970:2:1859
-7971:2:1863
-7972:2:1864
-7973:2:1858
-7974:2:1859
-7975:2:1863
-7976:2:1864
-7977:2:1872
-7978:2:1877
-7979:2:1881
-7980:2:1882
-7981:2:1889
-7982:2:1890
-7983:2:1901
-7984:2:1902
-7985:2:1903
-7986:2:1901
-7987:2:1902
-7988:2:1903
-7989:2:1914
-7990:2:1919
-7991:2:1920
-7992:0:4365
-7993:2:1932
-7994:0:4365
-7995:3:2528
-7996:0:4365
-7997:2:1934
-7998:0:4365
-7999:3:2529
-8000:0:4365
-8001:2:1935
-8002:0:4365
-8003:2:1936
-8004:0:4365
-8005:2:2129
-8006:0:4365
-8007:2:2130
-8008:0:4365
-8009:2:2134
-8010:0:4365
-8011:3:2528
-8012:0:4365
-8013:2:2136
-8014:0:4365
-8015:3:2529
-8016:0:4365
-8017:2:2137
-8018:2:2141
-8019:2:2142
-8020:2:2150
-8021:2:2151
-8022:2:2155
-8023:2:2156
-8024:2:2150
-8025:2:2151
-8026:2:2155
-8027:2:2156
-8028:2:2164
-8029:2:2169
-8030:2:2173
-8031:2:2174
-8032:2:2181
-8033:2:2182
-8034:2:2193
-8035:2:2194
-8036:2:2195
-8037:2:2193
-8038:2:2194
-8039:2:2195
-8040:2:2206
-8041:2:2211
-8042:2:2212
-8043:0:4365
-8044:2:2224
-8045:0:4365
-8046:3:2528
-8047:0:4365
-8048:2:2226
-8049:0:4365
-8050:3:2529
-8051:0:4365
-8052:2:1936
-8053:0:4365
-8054:2:2129
-8055:0:4365
-8056:2:2130
-8057:0:4365
-8058:2:2134
-8059:0:4365
-8060:3:2528
-8061:0:4365
-8062:2:2136
-8063:0:4365
-8064:3:2529
-8065:0:4365
-8066:2:2137
-8067:2:2141
-8068:2:2142
-8069:2:2150
-8070:2:2151
-8071:2:2155
-8072:2:2156
-8073:2:2150
-8074:2:2151
-8075:2:2152
-8076:2:2164
-8077:2:2169
-8078:2:2173
-8079:2:2174
-8080:2:2181
-8081:2:2182
-8082:2:2193
-8083:2:2194
-8084:2:2195
-8085:2:2193
-8086:2:2194
-8087:2:2195
-8088:2:2206
-8089:2:2211
-8090:2:2212
-8091:0:4365
-8092:2:2224
-8093:0:4365
-8094:3:2528
-8095:0:4365
-8096:2:2226
-8097:0:4365
-8098:3:2529
-8099:0:4365
-8100:2:2230
-8101:0:4365
-8102:3:2528
-8103:0:4365
-8104:2:2235
-8105:2:2239
-8106:2:2240
-8107:2:2248
-8108:2:2249
-8109:2:2253
-8110:2:2254
-8111:2:2248
-8112:2:2249
-8113:2:2250
-8114:2:2262
-8115:2:2267
-8116:2:2271
-8117:2:2272
-8118:2:2279
-8119:2:2280
-8120:2:2291
-8121:2:2292
-8122:2:2293
-8123:2:2291
-8124:2:2292
-8125:2:2293
-8126:2:2304
-8127:2:2309
-8128:2:2310
-8129:0:4365
-8130:3:2529
-8131:0:4365
-8132:2:2322
-8133:0:4365
-8134:2:1169
-8135:0:4365
-8136:3:2528
-8137:0:4365
-8138:2:1170
-8139:0:4365
-8140:3:2529
-8141:0:4365
-8142:3:2530
-8143:0:4365
-8144:3:2536
-8145:0:4365
-8146:3:2537
-8147:0:4365
-8148:3:2547
-8149:0:4365
-8150:3:2548
-8151:0:4365
-8152:3:2552
-8153:3:2553
-8154:3:2557
-8155:3:2561
-8156:3:2562
-8157:3:2557
-8158:3:2561
-8159:3:2562
-8160:3:2566
-8161:3:2574
-8162:3:2575
-8163:3:2580
-8164:3:2587
-8165:3:2588
-8166:3:2587
-8167:3:2588
-8168:3:2595
-8169:3:2600
-8170:0:4365
-8171:3:2611
-8172:0:4365
-8173:3:2615
-8174:3:2616
-8175:3:2620
-8176:3:2624
-8177:3:2625
-8178:3:2620
-8179:3:2624
-8180:3:2625
-8181:3:2629
-8182:3:2637
-8183:3:2638
-8184:3:2643
-8185:3:2650
-8186:3:2651
-8187:3:2650
-8188:3:2651
-8189:3:2658
-8190:3:2663
-8191:0:4365
-8192:3:2611
-8193:0:4365
-8194:3:2615
-8195:3:2616
-8196:3:2620
-8197:3:2624
-8198:3:2625
-8199:3:2620
-8200:3:2624
-8201:3:2625
-8202:3:2629
-8203:3:2637
-8204:3:2638
-8205:3:2643
-8206:3:2650
-8207:3:2651
-8208:3:2650
-8209:3:2651
-8210:3:2658
-8211:3:2663
-8212:0:4365
-8213:3:2674
-8214:0:4365
-8215:3:2682
-8216:3:2683
-8217:3:2687
-8218:3:2691
-8219:3:2692
-8220:3:2687
-8221:3:2691
-8222:3:2692
-8223:3:2696
-8224:3:2704
-8225:3:2705
-8226:3:2710
-8227:3:2717
-8228:3:2718
-8229:3:2717
-8230:3:2718
-8231:3:2725
-8232:3:2730
-8233:0:4365
-8234:3:2745
-8235:0:4365
-8236:3:2746
-8237:0:4365
-8238:2:1173
-8239:0:4365
-8240:3:2747
-8241:0:4365
-8242:2:1179
-8243:0:4365
-8244:2:1180
-8245:0:4365
-8246:3:2746
-8247:0:4365
-8248:2:1181
-8249:2:1185
-8250:2:1186
-8251:2:1194
-8252:2:1195
-8253:2:1199
-8254:2:1200
-8255:2:1194
-8256:2:1195
-8257:2:1199
-8258:2:1200
-8259:2:1208
-8260:2:1213
-8261:2:1217
-8262:2:1218
-8263:2:1225
-8264:2:1226
-8265:2:1237
-8266:2:1238
-8267:2:1239
-8268:2:1237
-8269:2:1238
-8270:2:1239
-8271:2:1250
-8272:2:1255
-8273:2:1256
-8274:0:4365
-8275:3:2747
-8276:0:4365
-8277:2:1268
-8278:0:4365
-8279:3:2746
-8280:0:4365
-8281:2:1270
-8282:0:4365
-8283:3:2747
-8284:0:4365
-8285:2:1271
-8286:2:1275
-8287:2:1276
-8288:2:1284
-8289:2:1285
-8290:2:1289
-8291:2:1290
-8292:2:1284
-8293:2:1285
-8294:2:1289
-8295:2:1290
-8296:2:1298
-8297:2:1303
-8298:2:1307
-8299:2:1308
-8300:2:1315
-8301:2:1316
-8302:2:1327
-8303:2:1328
-8304:2:1329
-8305:2:1327
-8306:2:1328
-8307:2:1329
-8308:2:1340
-8309:2:1345
-8310:2:1346
-8311:0:4365
-8312:2:1358
-8313:0:4365
-8314:2:1360
-8315:0:4365
-8316:3:2746
-8317:0:4365
-8318:2:1361
-8319:0:4365
-8320:3:2747
-8321:0:4365
-8322:2:1362
-8323:2:1366
-8324:2:1367
-8325:2:1375
-8326:2:1376
-8327:2:1380
-8328:2:1381
-8329:2:1375
-8330:2:1376
-8331:2:1380
-8332:2:1381
-8333:2:1389
-8334:2:1394
-8335:2:1398
-8336:2:1399
-8337:2:1406
-8338:2:1407
-8339:2:1418
-8340:2:1419
-8341:2:1420
-8342:2:1418
-8343:2:1419
-8344:2:1420
-8345:2:1431
-8346:2:1436
-8347:2:1437
-8348:0:4365
-8349:2:1449
-8350:0:4365
-8351:3:2746
-8352:0:4365
-8353:2:1451
-8354:0:4365
-8355:3:2747
-8356:0:4365
-8357:2:1652
-8358:0:4365
-8359:2:1653
-8360:0:4365
-8361:2:1657
-8362:0:4365
-8363:2:1180
-8364:0:4365
-8365:3:2746
-8366:0:4365
-8367:2:1181
-8368:2:1185
-8369:2:1186
-8370:2:1194
-8371:2:1195
-8372:2:1199
-8373:2:1200
-8374:2:1194
-8375:2:1195
-8376:2:1196
-8377:2:1208
-8378:2:1213
-8379:2:1217
-8380:2:1218
-8381:2:1225
-8382:2:1226
-8383:2:1237
-8384:2:1238
-8385:2:1239
-8386:2:1237
-8387:2:1238
-8388:2:1239
-8389:2:1250
-8390:2:1255
-8391:2:1256
-8392:0:4365
-8393:3:2747
-8394:0:4365
-8395:2:1268
-8396:0:4365
-8397:3:2746
-8398:0:4365
-8399:2:1270
-8400:0:4365
-8401:3:2747
-8402:0:4365
-8403:2:1271
-8404:2:1275
-8405:2:1276
-8406:2:1284
-8407:2:1285
-8408:2:1289
-8409:2:1290
-8410:2:1284
-8411:2:1285
-8412:2:1289
-8413:2:1290
-8414:2:1298
-8415:2:1303
-8416:2:1307
-8417:2:1308
-8418:2:1315
-8419:2:1316
-8420:2:1327
-8421:2:1328
-8422:2:1329
-8423:2:1327
-8424:2:1328
-8425:2:1329
-8426:2:1340
-8427:2:1345
-8428:2:1346
-8429:0:4365
-8430:2:1358
-8431:0:4365
-8432:2:1454
-8433:0:4365
-8434:3:2746
-8435:0:4365
-8436:2:1455
-8437:0:4365
-8438:3:2747
-8439:0:4365
-8440:2:1652
-8441:0:4365
-8442:2:1653
-8443:0:4365
-8444:2:1657
-8445:0:4365
-8446:2:1660
-8447:0:4365
-8448:3:2746
-8449:0:4365
-8450:2:1665
-8451:2:1669
-8452:2:1670
-8453:2:1678
-8454:2:1679
-8455:2:1683
-8456:2:1684
-8457:2:1678
-8458:2:1679
-8459:2:1680
-8460:2:1692
-8461:2:1697
-8462:2:1701
-8463:2:1702
-8464:2:1709
-8465:2:1710
-8466:2:1721
-8467:2:1722
-8468:2:1723
-8469:2:1721
-8470:2:1722
-8471:2:1723
-8472:2:1734
-8473:2:1739
-8474:2:1740
-8475:0:4365
-8476:3:2747
-8477:0:4365
-8478:2:1752
-8479:0:4365
-8480:3:2746
-8481:0:4365
-8482:2:1754
-8483:0:4365
-8484:3:2747
-8485:0:4365
-8486:2:1755
-8487:2:1759
-8488:2:1760
-8489:2:1768
-8490:2:1769
-8491:2:1773
-8492:2:1774
-8493:2:1768
-8494:2:1769
-8495:2:1773
-8496:2:1774
-8497:2:1782
-8498:2:1787
-8499:2:1791
-8500:2:1792
-8501:2:1799
-8502:2:1800
-8503:2:1811
-8504:2:1812
-8505:2:1813
-8506:2:1811
-8507:2:1812
-8508:2:1813
-8509:2:1824
-8510:2:1829
-8511:2:1830
-8512:0:4365
-8513:2:1842
-8514:0:4365
-8515:3:2746
-8516:0:4365
-8517:2:1844
-8518:0:4365
-8519:3:2747
-8520:0:4365
-8521:2:1845
-8522:2:1849
-8523:2:1850
-8524:2:1858
-8525:2:1859
-8526:2:1863
-8527:2:1864
-8528:2:1858
-8529:2:1859
-8530:2:1863
-8531:2:1864
-8532:2:1872
-8533:2:1877
-8534:2:1881
-8535:2:1882
-8536:2:1889
-8537:2:1890
-8538:2:1901
-8539:2:1902
-8540:2:1903
-8541:2:1901
-8542:2:1902
-8543:2:1903
-8544:2:1914
-8545:2:1919
-8546:2:1920
-8547:0:4365
-8548:2:1932
-8549:0:4365
-8550:3:2746
-8551:0:4365
-8552:2:1934
-8553:0:4365
-8554:3:2747
-8555:0:4365
-8556:2:1935
-8557:0:4365
-8558:2:1936
-8559:0:4365
-8560:2:2129
-8561:0:4365
-8562:2:2130
-8563:0:4365
-8564:2:2134
-8565:0:4365
-8566:3:2746
-8567:0:4365
-8568:2:2136
-8569:0:4365
-8570:3:2747
-8571:0:4365
-8572:2:2137
-8573:2:2141
-8574:2:2142
-8575:2:2150
-8576:2:2151
-8577:2:2155
-8578:2:2156
-8579:2:2150
-8580:2:2151
-8581:2:2155
-8582:2:2156
-8583:2:2164
-8584:2:2169
-8585:2:2173
-8586:2:2174
-8587:2:2181
-8588:2:2182
-8589:2:2193
-8590:2:2194
-8591:2:2195
-8592:2:2193
-8593:2:2194
-8594:2:2195
-8595:2:2206
-8596:2:2211
-8597:2:2212
-8598:0:4365
-8599:2:2224
-8600:0:4365
-8601:3:2746
-8602:0:4365
-8603:2:2226
-8604:0:4365
-8605:3:2747
-8606:0:4365
-8607:2:1936
-8608:0:4365
-8609:2:2129
-8610:0:4365
-8611:2:2130
-8612:0:4365
-8613:2:2134
-8614:0:4365
-8615:3:2746
-8616:0:4365
-8617:2:2136
-8618:0:4365
-8619:3:2747
-8620:0:4365
-8621:2:2137
-8622:2:2141
-8623:2:2142
-8624:2:2150
-8625:2:2151
-8626:2:2155
-8627:2:2156
-8628:2:2150
-8629:2:2151
-8630:2:2152
-8631:2:2164
-8632:2:2169
-8633:2:2173
-8634:2:2174
-8635:2:2181
-8636:2:2182
-8637:2:2193
-8638:2:2194
-8639:2:2195
-8640:2:2193
-8641:2:2194
-8642:2:2195
-8643:2:2206
-8644:2:2211
-8645:2:2212
-8646:0:4365
-8647:2:2224
-8648:0:4365
-8649:3:2746
-8650:0:4365
-8651:2:2226
-8652:0:4365
-8653:3:2747
-8654:0:4365
-8655:2:2230
-8656:0:4365
-8657:3:2746
-8658:0:4365
-8659:2:2235
-8660:2:2239
-8661:2:2240
-8662:2:2248
-8663:2:2249
-8664:2:2253
-8665:2:2254
-8666:2:2248
-8667:2:2249
-8668:2:2250
-8669:2:2262
-8670:2:2267
-8671:2:2271
-8672:2:2272
-8673:2:2279
-8674:2:2280
-8675:2:2291
-8676:2:2292
-8677:2:2293
-8678:2:2291
-8679:2:2292
-8680:2:2293
-8681:2:2304
-8682:2:2309
-8683:2:2310
-8684:0:4365
-8685:3:2747
-8686:0:4365
-8687:2:2322
-8688:0:4365
-8689:2:1169
-8690:0:4365
-8691:3:2746
-8692:0:4365
-8693:2:1170
-8694:0:4365
-8695:3:2747
-8696:0:4365
-8697:3:2748
-8698:0:4365
-8699:3:2754
-8700:0:4365
-8701:3:2755
-8702:3:2759
-8703:3:2760
-8704:3:2768
-8705:3:2769
-8706:3:2773
-8707:3:2774
-8708:3:2768
-8709:3:2769
-8710:3:2773
-8711:3:2774
-8712:3:2782
-8713:3:2787
-8714:3:2791
-8715:3:2792
-8716:3:2799
-8717:3:2800
-8718:3:2811
-8719:3:2812
-8720:3:2813
-8721:3:2811
-8722:3:2812
-8723:3:2813
-8724:3:2824
-8725:3:2829
-8726:3:2830
-8727:0:4365
-8728:3:2842
-8729:0:4365
-8730:3:2843
-8731:0:4365
-8732:2:1173
-8733:0:4365
-8734:3:2844
-8735:0:4365
-8736:2:1179
-8737:0:4365
-8738:2:1180
-8739:0:4365
-8740:3:2843
-8741:0:4365
-8742:2:1181
-8743:2:1185
-8744:2:1186
-8745:2:1194
-8746:2:1195
-8747:2:1199
-8748:2:1200
-8749:2:1194
-8750:2:1195
-8751:2:1199
-8752:2:1200
-8753:2:1208
-8754:2:1213
-8755:2:1217
-8756:2:1218
-8757:2:1225
-8758:2:1226
-8759:2:1237
-8760:2:1238
-8761:2:1239
-8762:2:1237
-8763:2:1238
-8764:2:1239
-8765:2:1250
-8766:2:1255
-8767:2:1256
-8768:0:4365
-8769:3:2844
-8770:0:4365
-8771:2:1268
-8772:0:4365
-8773:3:2843
-8774:0:4365
-8775:2:1270
-8776:0:4365
-8777:3:2844
-8778:0:4365
-8779:2:1271
-8780:2:1275
-8781:2:1276
-8782:2:1284
-8783:2:1285
-8784:2:1289
-8785:2:1290
-8786:2:1284
-8787:2:1285
-8788:2:1289
-8789:2:1290
-8790:2:1298
-8791:2:1303
-8792:2:1307
-8793:2:1308
-8794:2:1315
-8795:2:1316
-8796:2:1327
-8797:2:1328
-8798:2:1329
-8799:2:1327
-8800:2:1328
-8801:2:1329
-8802:2:1340
-8803:2:1345
-8804:2:1346
-8805:0:4365
-8806:2:1358
-8807:0:4365
-8808:2:1360
-8809:0:4365
-8810:3:2843
-8811:0:4365
-8812:2:1361
-8813:0:4365
-8814:3:2844
-8815:0:4365
-8816:2:1362
-8817:2:1366
-8818:2:1367
-8819:2:1375
-8820:2:1376
-8821:2:1380
-8822:2:1381
-8823:2:1375
-8824:2:1376
-8825:2:1380
-8826:2:1381
-8827:2:1389
-8828:2:1394
-8829:2:1398
-8830:2:1399
-8831:2:1406
-8832:2:1407
-8833:2:1418
-8834:2:1419
-8835:2:1420
-8836:2:1418
-8837:2:1419
-8838:2:1420
-8839:2:1431
-8840:2:1436
-8841:2:1437
-8842:0:4365
-8843:2:1449
-8844:0:4365
-8845:3:2843
-8846:0:4365
-8847:2:1451
-8848:0:4365
-8849:3:2844
-8850:0:4365
-8851:2:1652
-8852:0:4365
-8853:2:1653
-8854:0:4365
-8855:2:1657
-8856:0:4365
-8857:2:1180
-8858:0:4365
-8859:3:2843
-8860:0:4365
-8861:2:1181
-8862:2:1185
-8863:2:1186
-8864:2:1194
-8865:2:1195
-8866:2:1199
-8867:2:1200
-8868:2:1194
-8869:2:1195
-8870:2:1196
-8871:2:1208
-8872:2:1213
-8873:2:1217
-8874:2:1218
-8875:2:1225
-8876:2:1226
-8877:2:1237
-8878:2:1238
-8879:2:1239
-8880:2:1237
-8881:2:1238
-8882:2:1239
-8883:2:1250
-8884:2:1255
-8885:2:1256
-8886:0:4365
-8887:3:2844
-8888:0:4365
-8889:2:1268
-8890:0:4365
-8891:3:2843
-8892:0:4365
-8893:2:1270
-8894:0:4365
-8895:3:2844
-8896:0:4365
-8897:2:1271
-8898:2:1275
-8899:2:1276
-8900:2:1284
-8901:2:1285
-8902:2:1289
-8903:2:1290
-8904:2:1284
-8905:2:1285
-8906:2:1289
-8907:2:1290
-8908:2:1298
-8909:2:1303
-8910:2:1307
-8911:2:1308
-8912:2:1315
-8913:2:1316
-8914:2:1327
-8915:2:1328
-8916:2:1329
-8917:2:1327
-8918:2:1328
-8919:2:1329
-8920:2:1340
-8921:2:1345
-8922:2:1346
-8923:0:4365
-8924:2:1358
-8925:0:4365
-8926:2:1454
-8927:0:4365
-8928:3:2843
-8929:0:4365
-8930:2:1455
-8931:0:4365
-8932:3:2844
-8933:0:4365
-8934:2:1652
-8935:0:4365
-8936:2:1653
-8937:0:4365
-8938:2:1657
-8939:0:4365
-8940:2:1660
-8941:0:4365
-8942:3:2843
-8943:0:4365
-8944:2:1665
-8945:2:1669
-8946:2:1670
-8947:2:1678
-8948:2:1679
-8949:2:1683
-8950:2:1684
-8951:2:1678
-8952:2:1679
-8953:2:1680
-8954:2:1692
-8955:2:1697
-8956:2:1701
-8957:2:1702
-8958:2:1709
-8959:2:1710
-8960:2:1721
-8961:2:1722
-8962:2:1723
-8963:2:1721
-8964:2:1722
-8965:2:1723
-8966:2:1734
-8967:2:1739
-8968:2:1740
-8969:0:4365
-8970:3:2844
-8971:0:4365
-8972:2:1752
-8973:0:4365
-8974:3:2843
-8975:0:4365
-8976:2:1754
-8977:0:4365
-8978:3:2844
-8979:0:4365
-8980:2:1755
-8981:2:1759
-8982:2:1760
-8983:2:1768
-8984:2:1769
-8985:2:1773
-8986:2:1774
-8987:2:1768
-8988:2:1769
-8989:2:1773
-8990:2:1774
-8991:2:1782
-8992:2:1787
-8993:2:1791
-8994:2:1792
-8995:2:1799
-8996:2:1800
-8997:2:1811
-8998:2:1812
-8999:2:1813
-9000:2:1811
-9001:2:1812
-9002:2:1813
-9003:2:1824
-9004:2:1829
-9005:2:1830
-9006:0:4365
-9007:2:1842
-9008:0:4365
-9009:3:2843
-9010:0:4365
-9011:2:1844
-9012:0:4365
-9013:3:2844
-9014:0:4365
-9015:2:1845
-9016:2:1849
-9017:2:1850
-9018:2:1858
-9019:2:1859
-9020:2:1863
-9021:2:1864
-9022:2:1858
-9023:2:1859
-9024:2:1863
-9025:2:1864
-9026:2:1872
-9027:2:1877
-9028:2:1881
-9029:2:1882
-9030:2:1889
-9031:2:1890
-9032:2:1901
-9033:2:1902
-9034:2:1903
-9035:2:1901
-9036:2:1902
-9037:2:1903
-9038:2:1914
-9039:2:1919
-9040:2:1920
-9041:0:4365
-9042:2:1932
-9043:0:4365
-9044:3:2843
-9045:0:4365
-9046:2:1934
-9047:0:4365
-9048:3:2844
-9049:0:4365
-9050:2:1935
-9051:0:4365
-9052:2:1936
-9053:0:4365
-9054:2:2129
-9055:0:4365
-9056:2:2130
-9057:0:4365
-9058:2:2134
-9059:0:4365
-9060:3:2843
-9061:0:4365
-9062:2:2136
-9063:0:4365
-9064:3:2844
-9065:0:4365
-9066:2:2137
-9067:2:2141
-9068:2:2142
-9069:2:2150
-9070:2:2151
-9071:2:2155
-9072:2:2156
-9073:2:2150
-9074:2:2151
-9075:2:2155
-9076:2:2156
-9077:2:2164
-9078:2:2169
-9079:2:2173
-9080:2:2174
-9081:2:2181
-9082:2:2182
-9083:2:2193
-9084:2:2194
-9085:2:2195
-9086:2:2193
-9087:2:2194
-9088:2:2195
-9089:2:2206
-9090:2:2211
-9091:2:2212
-9092:0:4365
-9093:2:2224
-9094:0:4365
-9095:3:2843
-9096:0:4365
-9097:2:2226
-9098:0:4365
-9099:3:2844
-9100:0:4365
-9101:2:1936
-9102:0:4365
-9103:2:2129
-9104:0:4365
-9105:2:2130
-9106:0:4365
-9107:2:2134
-9108:0:4365
-9109:3:2843
-9110:0:4365
-9111:2:2136
-9112:0:4365
-9113:3:2844
-9114:0:4365
-9115:2:2137
-9116:2:2141
-9117:2:2142
-9118:2:2150
-9119:2:2151
-9120:2:2155
-9121:2:2156
-9122:2:2150
-9123:2:2151
-9124:2:2152
-9125:2:2164
-9126:2:2169
-9127:2:2173
-9128:2:2174
-9129:2:2181
-9130:2:2182
-9131:2:2193
-9132:2:2194
-9133:2:2195
-9134:2:2193
-9135:2:2194
-9136:2:2195
-9137:2:2206
-9138:2:2211
-9139:2:2212
-9140:0:4365
-9141:2:2224
-9142:0:4365
-9143:3:2843
-9144:0:4365
-9145:2:2226
-9146:0:4365
-9147:3:2844
-9148:0:4365
-9149:2:2230
-9150:0:4365
-9151:3:2843
-9152:0:4365
-9153:2:2235
-9154:2:2239
-9155:2:2240
-9156:2:2248
-9157:2:2249
-9158:2:2253
-9159:2:2254
-9160:2:2248
-9161:2:2249
-9162:2:2250
-9163:2:2262
-9164:2:2267
-9165:2:2271
-9166:2:2272
-9167:2:2279
-9168:2:2280
-9169:2:2291
-9170:2:2292
-9171:2:2293
-9172:2:2291
-9173:2:2292
-9174:2:2293
-9175:2:2304
-9176:2:2309
-9177:2:2310
-9178:0:4365
-9179:3:2844
-9180:0:4365
-9181:2:2322
-9182:0:4365
-9183:2:1169
-9184:0:4365
-9185:3:2843
-9186:0:4365
-9187:2:1170
-9188:0:4365
-9189:3:2844
-9190:0:4365
-9191:3:2845
-9192:0:4365
-9193:3:2851
-9194:0:4365
-9195:3:2854
-9196:3:2855
-9197:3:2867
-9198:3:2868
-9199:3:2872
-9200:3:2873
-9201:3:2867
-9202:3:2868
-9203:3:2872
-9204:3:2873
-9205:3:2881
-9206:3:2886
-9207:3:2890
-9208:3:2891
-9209:3:2898
-9210:3:2899
-9211:3:2910
-9212:3:2911
-9213:3:2912
-9214:3:2910
-9215:3:2911
-9216:3:2912
-9217:3:2923
-9218:3:2928
-9219:3:2929
-9220:0:4365
-9221:3:2941
-9222:0:4365
-9223:3:2942
-9224:0:4365
-9225:2:1173
-9226:0:4365
-9227:3:2943
-9228:0:4365
-9229:2:1179
-9230:0:4365
-9231:2:1180
-9232:0:4365
-9233:3:2942
-9234:0:4365
-9235:2:1181
-9236:2:1185
-9237:2:1186
-9238:2:1194
-9239:2:1195
-9240:2:1199
-9241:2:1200
-9242:2:1194
-9243:2:1195
-9244:2:1199
-9245:2:1200
-9246:2:1208
-9247:2:1213
-9248:2:1217
-9249:2:1218
-9250:2:1225
-9251:2:1226
-9252:2:1237
-9253:2:1238
-9254:2:1239
-9255:2:1237
-9256:2:1238
-9257:2:1239
-9258:2:1250
-9259:2:1255
-9260:2:1256
-9261:0:4365
-9262:3:2943
-9263:0:4365
-9264:2:1268
-9265:0:4365
-9266:3:2942
-9267:0:4365
-9268:2:1270
-9269:0:4365
-9270:3:2943
-9271:0:4365
-9272:2:1271
-9273:2:1275
-9274:2:1276
-9275:2:1284
-9276:2:1285
-9277:2:1289
-9278:2:1290
-9279:2:1284
-9280:2:1285
-9281:2:1289
-9282:2:1290
-9283:2:1298
-9284:2:1303
-9285:2:1307
-9286:2:1308
-9287:2:1315
-9288:2:1316
-9289:2:1327
-9290:2:1328
-9291:2:1329
-9292:2:1327
-9293:2:1328
-9294:2:1329
-9295:2:1340
-9296:2:1345
-9297:2:1346
-9298:0:4365
-9299:2:1358
-9300:0:4365
-9301:2:1360
-9302:0:4365
-9303:3:2942
-9304:0:4365
-9305:2:1361
-9306:0:4365
-9307:3:2943
-9308:0:4365
-9309:2:1362
-9310:2:1366
-9311:2:1367
-9312:2:1375
-9313:2:1376
-9314:2:1380
-9315:2:1381
-9316:2:1375
-9317:2:1376
-9318:2:1380
-9319:2:1381
-9320:2:1389
-9321:2:1394
-9322:2:1398
-9323:2:1399
-9324:2:1406
-9325:2:1407
-9326:2:1418
-9327:2:1419
-9328:2:1420
-9329:2:1418
-9330:2:1419
-9331:2:1420
-9332:2:1431
-9333:2:1436
-9334:2:1437
-9335:0:4365
-9336:2:1449
-9337:0:4365
-9338:3:2942
-9339:0:4365
-9340:2:1451
-9341:0:4365
-9342:3:2943
-9343:0:4365
-9344:2:1652
-9345:0:4365
-9346:2:1653
-9347:0:4365
-9348:2:1657
-9349:0:4365
-9350:2:1180
-9351:0:4365
-9352:3:2942
-9353:0:4365
-9354:2:1181
-9355:2:1185
-9356:2:1186
-9357:2:1194
-9358:2:1195
-9359:2:1199
-9360:2:1200
-9361:2:1194
-9362:2:1195
-9363:2:1196
-9364:2:1208
-9365:2:1213
-9366:2:1217
-9367:2:1218
-9368:2:1225
-9369:2:1226
-9370:2:1237
-9371:2:1238
-9372:2:1239
-9373:2:1237
-9374:2:1238
-9375:2:1239
-9376:2:1250
-9377:2:1255
-9378:2:1256
-9379:0:4365
-9380:3:2943
-9381:0:4365
-9382:2:1268
-9383:0:4365
-9384:3:2942
-9385:0:4365
-9386:2:1270
-9387:0:4365
-9388:3:2943
-9389:0:4365
-9390:2:1271
-9391:2:1275
-9392:2:1276
-9393:2:1284
-9394:2:1285
-9395:2:1289
-9396:2:1290
-9397:2:1284
-9398:2:1285
-9399:2:1289
-9400:2:1290
-9401:2:1298
-9402:2:1303
-9403:2:1307
-9404:2:1308
-9405:2:1315
-9406:2:1316
-9407:2:1327
-9408:2:1328
-9409:2:1329
-9410:2:1327
-9411:2:1328
-9412:2:1329
-9413:2:1340
-9414:2:1345
-9415:2:1346
-9416:0:4365
-9417:2:1358
-9418:0:4365
-9419:2:1454
-9420:0:4365
-9421:3:2942
-9422:0:4365
-9423:2:1455
-9424:0:4365
-9425:3:2943
-9426:0:4365
-9427:2:1652
-9428:0:4365
-9429:2:1653
-9430:0:4365
-9431:2:1657
-9432:0:4365
-9433:2:1660
-9434:0:4365
-9435:3:2942
-9436:0:4365
-9437:2:1665
-9438:2:1669
-9439:2:1670
-9440:2:1678
-9441:2:1679
-9442:2:1683
-9443:2:1684
-9444:2:1678
-9445:2:1679
-9446:2:1680
-9447:2:1692
-9448:2:1697
-9449:2:1701
-9450:2:1702
-9451:2:1709
-9452:2:1710
-9453:2:1721
-9454:2:1722
-9455:2:1723
-9456:2:1721
-9457:2:1722
-9458:2:1723
-9459:2:1734
-9460:2:1739
-9461:2:1740
-9462:0:4365
-9463:3:2943
-9464:0:4365
-9465:2:1752
-9466:0:4365
-9467:3:2942
-9468:0:4365
-9469:2:1754
-9470:0:4365
-9471:3:2943
-9472:0:4365
-9473:2:1755
-9474:2:1759
-9475:2:1760
-9476:2:1768
-9477:2:1769
-9478:2:1773
-9479:2:1774
-9480:2:1768
-9481:2:1769
-9482:2:1773
-9483:2:1774
-9484:2:1782
-9485:2:1787
-9486:2:1791
-9487:2:1792
-9488:2:1799
-9489:2:1800
-9490:2:1811
-9491:2:1812
-9492:2:1813
-9493:2:1811
-9494:2:1812
-9495:2:1813
-9496:2:1824
-9497:2:1829
-9498:2:1830
-9499:0:4365
-9500:2:1842
-9501:0:4365
-9502:3:2942
-9503:0:4365
-9504:2:1844
-9505:0:4365
-9506:3:2943
-9507:0:4365
-9508:2:1845
-9509:2:1849
-9510:2:1850
-9511:2:1858
-9512:2:1859
-9513:2:1863
-9514:2:1864
-9515:2:1858
-9516:2:1859
-9517:2:1863
-9518:2:1864
-9519:2:1872
-9520:2:1877
-9521:2:1881
-9522:2:1882
-9523:2:1889
-9524:2:1890
-9525:2:1901
-9526:2:1902
-9527:2:1903
-9528:2:1901
-9529:2:1902
-9530:2:1903
-9531:2:1914
-9532:2:1919
-9533:2:1920
-9534:0:4365
-9535:2:1932
-9536:0:4365
-9537:3:2942
-9538:0:4365
-9539:2:1934
-9540:0:4365
-9541:3:2943
-9542:0:4365
-9543:2:1935
-9544:0:4365
-9545:2:1936
-9546:0:4365
-9547:2:2129
-9548:0:4365
-9549:2:2130
-9550:0:4365
-9551:2:2134
-9552:0:4365
-9553:3:2942
-9554:0:4365
-9555:2:2136
-9556:0:4365
-9557:3:2943
-9558:0:4365
-9559:2:2137
-9560:2:2141
-9561:2:2142
-9562:2:2150
-9563:2:2151
-9564:2:2155
-9565:2:2156
-9566:2:2150
-9567:2:2151
-9568:2:2155
-9569:2:2156
-9570:2:2164
-9571:2:2169
-9572:2:2173
-9573:2:2174
-9574:2:2181
-9575:2:2182
-9576:2:2193
-9577:2:2194
-9578:2:2195
-9579:2:2193
-9580:2:2194
-9581:2:2195
-9582:2:2206
-9583:2:2211
-9584:2:2212
-9585:0:4365
-9586:2:2224
-9587:0:4365
-9588:3:2942
-9589:0:4365
-9590:2:2226
-9591:0:4365
-9592:3:2943
-9593:0:4365
-9594:2:1936
-9595:0:4365
-9596:2:2129
-9597:0:4365
-9598:2:2130
-9599:0:4365
-9600:2:2134
-9601:0:4365
-9602:3:2942
-9603:0:4365
-9604:2:2136
-9605:0:4365
-9606:3:2943
-9607:0:4365
-9608:2:2137
-9609:2:2141
-9610:2:2142
-9611:2:2150
-9612:2:2151
-9613:2:2155
-9614:2:2156
-9615:2:2150
-9616:2:2151
-9617:2:2152
-9618:2:2164
-9619:2:2169
-9620:2:2173
-9621:2:2174
-9622:2:2181
-9623:2:2182
-9624:2:2193
-9625:2:2194
-9626:2:2195
-9627:2:2193
-9628:2:2194
-9629:2:2195
-9630:2:2206
-9631:2:2211
-9632:2:2212
-9633:0:4365
-9634:2:2224
-9635:0:4365
-9636:3:2942
-9637:0:4365
-9638:2:2226
-9639:0:4365
-9640:3:2943
-9641:0:4365
-9642:2:2230
-9643:0:4365
-9644:3:2942
-9645:0:4365
-9646:2:2235
-9647:2:2239
-9648:2:2240
-9649:2:2248
-9650:2:2249
-9651:2:2253
-9652:2:2254
-9653:2:2248
-9654:2:2249
-9655:2:2250
-9656:2:2262
-9657:2:2267
-9658:2:2271
-9659:2:2272
-9660:2:2279
-9661:2:2280
-9662:2:2291
-9663:2:2292
-9664:2:2293
-9665:2:2291
-9666:2:2292
-9667:2:2293
-9668:2:2304
-9669:2:2309
-9670:2:2310
-9671:0:4365
-9672:3:2943
-9673:0:4365
-9674:2:2322
-9675:0:4365
-9676:2:1169
-9677:0:4365
-9678:3:2942
-9679:0:4365
-9680:2:1170
-9681:0:4365
-9682:3:2943
-9683:0:4365
-9684:3:2944
-9685:0:4365
-9686:3:2950
-9687:0:4365
-9688:3:2951
-9689:0:4365
-9690:3:2952
-9691:0:4365
-9692:3:2953
-9693:0:4365
-9694:3:2954
-9695:3:2958
-9696:3:2959
-9697:3:2967
-9698:3:2968
-9699:3:2972
-9700:3:2973
-9701:3:2967
-9702:3:2968
-9703:3:2972
-9704:3:2973
-9705:3:2981
-9706:3:2986
-9707:3:2990
-9708:3:2991
-9709:3:2998
-9710:3:2999
-9711:3:3010
-9712:3:3011
-9713:3:3012
-9714:3:3010
-9715:3:3011
-9716:3:3012
-9717:3:3023
-9718:3:3028
-9719:3:3029
-9720:0:4365
-9721:3:3041
-9722:0:4365
-9723:3:3042
-9724:0:4365
-9725:2:1173
-9726:0:4365
-9727:3:3043
-9728:0:4365
-9729:2:1179
-9730:0:4365
-9731:2:1180
-9732:0:4365
-9733:3:3042
-9734:0:4365
-9735:2:1181
-9736:2:1185
-9737:2:1186
-9738:2:1194
-9739:2:1195
-9740:2:1199
-9741:2:1200
-9742:2:1194
-9743:2:1195
-9744:2:1199
-9745:2:1200
-9746:2:1208
-9747:2:1213
-9748:2:1217
-9749:2:1218
-9750:2:1225
-9751:2:1226
-9752:2:1237
-9753:2:1238
-9754:2:1239
-9755:2:1237
-9756:2:1238
-9757:2:1239
-9758:2:1250
-9759:2:1255
-9760:2:1256
-9761:0:4365
-9762:3:3043
-9763:0:4365
-9764:2:1268
-9765:0:4365
-9766:3:3042
-9767:0:4365
-9768:2:1270
-9769:0:4365
-9770:3:3043
-9771:0:4365
-9772:2:1271
-9773:2:1275
-9774:2:1276
-9775:2:1284
-9776:2:1285
-9777:2:1289
-9778:2:1290
-9779:2:1284
-9780:2:1285
-9781:2:1289
-9782:2:1290
-9783:2:1298
-9784:2:1303
-9785:2:1307
-9786:2:1308
-9787:2:1315
-9788:2:1316
-9789:2:1327
-9790:2:1328
-9791:2:1329
-9792:2:1327
-9793:2:1328
-9794:2:1329
-9795:2:1340
-9796:2:1345
-9797:2:1346
-9798:0:4365
-9799:2:1358
-9800:0:4365
-9801:2:1360
-9802:0:4365
-9803:3:3042
-9804:0:4365
-9805:2:1361
-9806:0:4365
-9807:3:3043
-9808:0:4365
-9809:2:1362
-9810:2:1366
-9811:2:1367
-9812:2:1375
-9813:2:1376
-9814:2:1380
-9815:2:1381
-9816:2:1375
-9817:2:1376
-9818:2:1380
-9819:2:1381
-9820:2:1389
-9821:2:1394
-9822:2:1398
-9823:2:1399
-9824:2:1406
-9825:2:1407
-9826:2:1418
-9827:2:1419
-9828:2:1420
-9829:2:1418
-9830:2:1419
-9831:2:1420
-9832:2:1431
-9833:2:1436
-9834:2:1437
-9835:0:4365
-9836:2:1449
-9837:0:4365
-9838:3:3042
-9839:0:4365
-9840:2:1451
-9841:0:4365
-9842:3:3043
-9843:0:4365
-9844:2:1652
-9845:0:4365
-9846:2:1653
-9847:0:4365
-9848:2:1657
-9849:0:4365
-9850:2:1180
-9851:0:4365
-9852:3:3042
-9853:0:4365
-9854:2:1181
-9855:2:1185
-9856:2:1186
-9857:2:1194
-9858:2:1195
-9859:2:1199
-9860:2:1200
-9861:2:1194
-9862:2:1195
-9863:2:1196
-9864:2:1208
-9865:2:1213
-9866:2:1217
-9867:2:1218
-9868:2:1225
-9869:2:1226
-9870:2:1237
-9871:2:1238
-9872:2:1239
-9873:2:1237
-9874:2:1238
-9875:2:1239
-9876:2:1250
-9877:2:1255
-9878:2:1256
-9879:0:4365
-9880:3:3043
-9881:0:4365
-9882:2:1268
-9883:0:4365
-9884:3:3042
-9885:0:4365
-9886:2:1270
-9887:0:4365
-9888:3:3043
-9889:0:4365
-9890:2:1271
-9891:2:1275
-9892:2:1276
-9893:2:1284
-9894:2:1285
-9895:2:1289
-9896:2:1290
-9897:2:1284
-9898:2:1285
-9899:2:1289
-9900:2:1290
-9901:2:1298
-9902:2:1303
-9903:2:1307
-9904:2:1308
-9905:2:1315
-9906:2:1316
-9907:2:1327
-9908:2:1328
-9909:2:1329
-9910:2:1327
-9911:2:1328
-9912:2:1329
-9913:2:1340
-9914:2:1345
-9915:2:1346
-9916:0:4365
-9917:2:1358
-9918:0:4365
-9919:2:1454
-9920:0:4365
-9921:3:3042
-9922:0:4365
-9923:2:1455
-9924:0:4365
-9925:3:3043
-9926:0:4365
-9927:2:1652
-9928:0:4365
-9929:2:1653
-9930:0:4365
-9931:2:1657
-9932:0:4365
-9933:2:1660
-9934:0:4365
-9935:3:3042
-9936:0:4365
-9937:2:1665
-9938:2:1669
-9939:2:1670
-9940:2:1678
-9941:2:1679
-9942:2:1683
-9943:2:1684
-9944:2:1678
-9945:2:1679
-9946:2:1680
-9947:2:1692
-9948:2:1697
-9949:2:1701
-9950:2:1702
-9951:2:1709
-9952:2:1710
-9953:2:1721
-9954:2:1722
-9955:2:1723
-9956:2:1721
-9957:2:1722
-9958:2:1723
-9959:2:1734
-9960:2:1739
-9961:2:1740
-9962:0:4365
-9963:3:3043
-9964:0:4365
-9965:2:1752
-9966:0:4365
-9967:3:3042
-9968:0:4365
-9969:2:1754
-9970:0:4365
-9971:3:3043
-9972:0:4365
-9973:2:1755
-9974:2:1759
-9975:2:1760
-9976:2:1768
-9977:2:1769
-9978:2:1773
-9979:2:1774
-9980:2:1768
-9981:2:1769
-9982:2:1773
-9983:2:1774
-9984:2:1782
-9985:2:1787
-9986:2:1791
-9987:2:1792
-9988:2:1799
-9989:2:1800
-9990:2:1811
-9991:2:1812
-9992:2:1813
-9993:2:1811
-9994:2:1812
-9995:2:1813
-9996:2:1824
-9997:2:1829
-9998:2:1830
-9999:0:4365
-10000:2:1842
-10001:0:4365
-10002:3:3042
-10003:0:4365
-10004:2:1844
-10005:0:4365
-10006:3:3043
-10007:0:4365
-10008:2:1845
-10009:2:1849
-10010:2:1850
-10011:2:1858
-10012:2:1859
-10013:2:1863
-10014:2:1864
-10015:2:1858
-10016:2:1859
-10017:2:1863
-10018:2:1864
-10019:2:1872
-10020:2:1877
-10021:2:1881
-10022:2:1882
-10023:2:1889
-10024:2:1890
-10025:2:1901
-10026:2:1902
-10027:2:1903
-10028:2:1901
-10029:2:1902
-10030:2:1903
-10031:2:1914
-10032:2:1919
-10033:2:1920
-10034:0:4365
-10035:2:1932
-10036:0:4365
-10037:3:3042
-10038:0:4365
-10039:2:1934
-10040:0:4365
-10041:3:3043
-10042:0:4365
-10043:2:1935
-10044:0:4365
-10045:2:1936
-10046:0:4365
-10047:2:2129
-10048:0:4365
-10049:2:2130
-10050:0:4365
-10051:2:2134
-10052:0:4365
-10053:3:3042
-10054:0:4365
-10055:2:2136
-10056:0:4365
-10057:3:3043
-10058:0:4365
-10059:2:2137
-10060:2:2141
-10061:2:2142
-10062:2:2150
-10063:2:2151
-10064:2:2155
-10065:2:2156
-10066:2:2150
-10067:2:2151
-10068:2:2155
-10069:2:2156
-10070:2:2164
-10071:2:2169
-10072:2:2173
-10073:2:2174
-10074:2:2181
-10075:2:2182
-10076:2:2193
-10077:2:2194
-10078:2:2195
-10079:2:2193
-10080:2:2194
-10081:2:2195
-10082:2:2206
-10083:2:2211
-10084:2:2212
-10085:0:4365
-10086:2:2224
-10087:0:4365
-10088:3:3042
-10089:0:4365
-10090:2:2226
-10091:0:4365
-10092:3:3043
-10093:0:4365
-10094:2:1936
-10095:0:4365
-10096:2:2129
-10097:0:4365
-10098:2:2130
-10099:0:4365
-10100:2:2134
-10101:0:4365
-10102:3:3042
-10103:0:4365
-10104:2:2136
-10105:0:4365
-10106:3:3043
-10107:0:4365
-10108:2:2137
-10109:2:2141
-10110:2:2142
-10111:2:2150
-10112:2:2151
-10113:2:2155
-10114:2:2156
-10115:2:2150
-10116:2:2151
-10117:2:2152
-10118:2:2164
-10119:2:2169
-10120:2:2173
-10121:2:2174
-10122:2:2181
-10123:2:2182
-10124:2:2193
-10125:2:2194
-10126:2:2195
-10127:2:2193
-10128:2:2194
-10129:2:2195
-10130:2:2206
-10131:2:2211
-10132:2:2212
-10133:0:4365
-10134:2:2224
-10135:0:4365
-10136:3:3042
-10137:0:4365
-10138:2:2226
-10139:0:4365
-10140:3:3043
-10141:0:4365
-10142:2:2230
-10143:0:4365
-10144:3:3042
-10145:0:4365
-10146:2:2235
-10147:2:2239
-10148:2:2240
-10149:2:2248
-10150:2:2249
-10151:2:2253
-10152:2:2254
-10153:2:2248
-10154:2:2249
-10155:2:2250
-10156:2:2262
-10157:2:2267
-10158:2:2271
-10159:2:2272
-10160:2:2279
-10161:2:2280
-10162:2:2291
-10163:2:2292
-10164:2:2293
-10165:2:2291
-10166:2:2292
-10167:2:2293
-10168:2:2304
-10169:2:2309
-10170:2:2310
-10171:0:4365
-10172:3:3043
-10173:0:4365
-10174:2:2322
-10175:0:4365
-10176:2:1169
-10177:0:4365
-10178:3:3042
-10179:0:4365
-10180:2:1170
-10181:0:4365
-10182:3:3043
-10183:0:4365
-10184:3:3044
-10185:0:4365
-10186:3:3257
-10187:0:4365
-10188:3:3265
-10189:0:4365
-10190:3:3266
-10191:3:3270
-10192:3:3271
-10193:3:3279
-10194:3:3280
-10195:3:3284
-10196:3:3285
-10197:3:3279
-10198:3:3280
-10199:3:3284
-10200:3:3285
-10201:3:3293
-10202:3:3298
-10203:3:3302
-10204:3:3303
-10205:3:3310
-10206:3:3311
-10207:3:3322
-10208:3:3323
-10209:3:3324
-10210:3:3322
-10211:3:3323
-10212:3:3324
-10213:3:3335
-10214:3:3340
-10215:3:3341
-10216:0:4365
-10217:3:3353
-10218:0:4365
-10219:3:3354
-10220:0:4365
-10221:2:1173
-10222:0:4365
-10223:3:3355
-10224:0:4365
-10225:2:1179
-10226:0:4365
-10227:2:1180
-10228:0:4365
-10229:3:3354
-10230:0:4365
-10231:2:1181
-10232:2:1185
-10233:2:1186
-10234:2:1194
-10235:2:1195
-10236:2:1199
-10237:2:1200
-10238:2:1194
-10239:2:1195
-10240:2:1199
-10241:2:1200
-10242:2:1208
-10243:2:1213
-10244:2:1217
-10245:2:1218
-10246:2:1225
-10247:2:1226
-10248:2:1237
-10249:2:1238
-10250:2:1239
-10251:2:1237
-10252:2:1238
-10253:2:1239
-10254:2:1250
-10255:2:1255
-10256:2:1256
-10257:0:4365
-10258:3:3355
-10259:0:4365
-10260:2:1268
-10261:0:4365
-10262:3:3354
-10263:0:4365
-10264:2:1270
-10265:0:4365
-10266:3:3355
-10267:0:4365
-10268:2:1271
-10269:2:1275
-10270:2:1276
-10271:2:1284
-10272:2:1285
-10273:2:1289
-10274:2:1290
-10275:2:1284
-10276:2:1285
-10277:2:1289
-10278:2:1290
-10279:2:1298
-10280:2:1303
-10281:2:1307
-10282:2:1308
-10283:2:1315
-10284:2:1316
-10285:2:1327
-10286:2:1328
-10287:2:1329
-10288:2:1327
-10289:2:1328
-10290:2:1329
-10291:2:1340
-10292:2:1345
-10293:2:1346
-10294:0:4365
-10295:2:1358
-10296:0:4365
-10297:2:1360
-10298:0:4365
-10299:3:3354
-10300:0:4365
-10301:2:1361
-10302:0:4365
-10303:3:3355
-10304:0:4365
-10305:2:1362
-10306:2:1366
-10307:2:1367
-10308:2:1375
-10309:2:1376
-10310:2:1380
-10311:2:1381
-10312:2:1375
-10313:2:1376
-10314:2:1380
-10315:2:1381
-10316:2:1389
-10317:2:1394
-10318:2:1398
-10319:2:1399
-10320:2:1406
-10321:2:1407
-10322:2:1418
-10323:2:1419
-10324:2:1420
-10325:2:1418
-10326:2:1419
-10327:2:1420
-10328:2:1431
-10329:2:1436
-10330:2:1437
-10331:0:4365
-10332:2:1449
-10333:0:4365
-10334:3:3354
-10335:0:4365
-10336:2:1451
-10337:0:4365
-10338:3:3355
-10339:0:4365
-10340:2:1652
-10341:0:4365
-10342:2:1653
-10343:0:4365
-10344:2:1657
-10345:0:4365
-10346:2:1180
-10347:0:4365
-10348:3:3354
-10349:0:4365
-10350:2:1181
-10351:2:1185
-10352:2:1186
-10353:2:1194
-10354:2:1195
-10355:2:1199
-10356:2:1200
-10357:2:1194
-10358:2:1195
-10359:2:1196
-10360:2:1208
-10361:2:1213
-10362:2:1217
-10363:2:1218
-10364:2:1225
-10365:2:1226
-10366:2:1237
-10367:2:1238
-10368:2:1239
-10369:2:1237
-10370:2:1238
-10371:2:1239
-10372:2:1250
-10373:2:1255
-10374:2:1256
-10375:0:4365
-10376:3:3355
-10377:0:4365
-10378:2:1268
-10379:0:4365
-10380:3:3354
-10381:0:4365
-10382:2:1270
-10383:0:4365
-10384:3:3355
-10385:0:4365
-10386:2:1271
-10387:2:1275
-10388:2:1276
-10389:2:1284
-10390:2:1285
-10391:2:1289
-10392:2:1290
-10393:2:1284
-10394:2:1285
-10395:2:1289
-10396:2:1290
-10397:2:1298
-10398:2:1303
-10399:2:1307
-10400:2:1308
-10401:2:1315
-10402:2:1316
-10403:2:1327
-10404:2:1328
-10405:2:1329
-10406:2:1327
-10407:2:1328
-10408:2:1329
-10409:2:1340
-10410:2:1345
-10411:2:1346
-10412:0:4365
-10413:2:1358
-10414:0:4365
-10415:2:1454
-10416:0:4365
-10417:3:3354
-10418:0:4365
-10419:2:1455
-10420:0:4365
-10421:3:3355
-10422:0:4365
-10423:2:1652
-10424:0:4365
-10425:2:1653
-10426:0:4365
-10427:2:1657
-10428:0:4365
-10429:2:1660
-10430:0:4365
-10431:3:3354
-10432:0:4365
-10433:2:1665
-10434:2:1669
-10435:2:1670
-10436:2:1678
-10437:2:1679
-10438:2:1683
-10439:2:1684
-10440:2:1678
-10441:2:1679
-10442:2:1680
-10443:2:1692
-10444:2:1697
-10445:2:1701
-10446:2:1702
-10447:2:1709
-10448:2:1710
-10449:2:1721
-10450:2:1722
-10451:2:1723
-10452:2:1721
-10453:2:1722
-10454:2:1723
-10455:2:1734
-10456:2:1739
-10457:2:1740
-10458:0:4365
-10459:3:3355
-10460:0:4365
-10461:2:1752
-10462:0:4365
-10463:3:3354
-10464:0:4365
-10465:2:1754
-10466:0:4365
-10467:3:3355
-10468:0:4365
-10469:2:1755
-10470:2:1759
-10471:2:1760
-10472:2:1768
-10473:2:1769
-10474:2:1773
-10475:2:1774
-10476:2:1768
-10477:2:1769
-10478:2:1773
-10479:2:1774
-10480:2:1782
-10481:2:1787
-10482:2:1791
-10483:2:1792
-10484:2:1799
-10485:2:1800
-10486:2:1811
-10487:2:1812
-10488:2:1813
-10489:2:1811
-10490:2:1812
-10491:2:1813
-10492:2:1824
-10493:2:1829
-10494:2:1830
-10495:0:4365
-10496:2:1842
-10497:0:4365
-10498:3:3354
-10499:0:4365
-10500:2:1844
-10501:0:4365
-10502:3:3355
-10503:0:4365
-10504:2:1845
-10505:2:1849
-10506:2:1850
-10507:2:1858
-10508:2:1859
-10509:2:1863
-10510:2:1864
-10511:2:1858
-10512:2:1859
-10513:2:1863
-10514:2:1864
-10515:2:1872
-10516:2:1877
-10517:2:1881
-10518:2:1882
-10519:2:1889
-10520:2:1890
-10521:2:1901
-10522:2:1902
-10523:2:1903
-10524:2:1901
-10525:2:1902
-10526:2:1903
-10527:2:1914
-10528:2:1919
-10529:2:1920
-10530:0:4365
-10531:2:1932
-10532:0:4365
-10533:3:3354
-10534:0:4365
-10535:2:1934
-10536:0:4365
-10537:3:3355
-10538:0:4365
-10539:2:1935
-10540:0:4365
-10541:2:1936
-10542:0:4365
-10543:2:2129
-10544:0:4365
-10545:2:2130
-10546:0:4365
-10547:2:2134
-10548:0:4365
-10549:3:3354
-10550:0:4365
-10551:2:2136
-10552:0:4365
-10553:3:3355
-10554:0:4365
-10555:2:2137
-10556:2:2141
-10557:2:2142
-10558:2:2150
-10559:2:2151
-10560:2:2155
-10561:2:2156
-10562:2:2150
-10563:2:2151
-10564:2:2155
-10565:2:2156
-10566:2:2164
-10567:2:2169
-10568:2:2173
-10569:2:2174
-10570:2:2181
-10571:2:2182
-10572:2:2193
-10573:2:2194
-10574:2:2195
-10575:2:2193
-10576:2:2194
-10577:2:2195
-10578:2:2206
-10579:2:2211
-10580:2:2212
-10581:0:4365
-10582:2:2224
-10583:0:4365
-10584:3:3354
-10585:0:4365
-10586:2:2226
-10587:0:4365
-10588:3:3355
-10589:0:4365
-10590:2:1936
-10591:0:4365
-10592:2:2129
-10593:0:4365
-10594:2:2130
-10595:0:4365
-10596:2:2134
-10597:0:4365
-10598:3:3354
-10599:0:4365
-10600:2:2136
-10601:0:4365
-10602:3:3355
-10603:0:4365
-10604:2:2137
-10605:2:2141
-10606:2:2142
-10607:2:2150
-10608:2:2151
-10609:2:2155
-10610:2:2156
-10611:2:2150
-10612:2:2151
-10613:2:2152
-10614:2:2164
-10615:2:2169
-10616:2:2173
-10617:2:2174
-10618:2:2181
-10619:2:2182
-10620:2:2193
-10621:2:2194
-10622:2:2195
-10623:2:2193
-10624:2:2194
-10625:2:2195
-10626:2:2206
-10627:2:2211
-10628:2:2212
-10629:0:4365
-10630:2:2224
-10631:0:4365
-10632:3:3354
-10633:0:4365
-10634:2:2226
-10635:0:4365
-10636:3:3355
-10637:0:4365
-10638:2:2230
-10639:0:4365
-10640:3:3354
-10641:0:4365
-10642:2:2235
-10643:2:2239
-10644:2:2240
-10645:2:2248
-10646:2:2249
-10647:2:2253
-10648:2:2254
-10649:2:2248
-10650:2:2249
-10651:2:2250
-10652:2:2262
-10653:2:2267
-10654:2:2271
-10655:2:2272
-10656:2:2279
-10657:2:2280
-10658:2:2291
-10659:2:2292
-10660:2:2293
-10661:2:2291
-10662:2:2292
-10663:2:2293
-10664:2:2304
-10665:2:2309
-10666:2:2310
-10667:0:4365
-10668:3:3355
-10669:0:4365
-10670:2:2322
-10671:0:4365
-10672:2:1169
-10673:0:4365
-10674:3:3354
-10675:0:4365
-10676:2:1170
-10677:0:4365
-10678:3:3355
-10679:0:4365
-10680:3:3356
-10681:0:4365
-10682:3:3366
-10683:0:4365
-10684:3:2951
-10685:0:4365
-10686:3:2952
-10687:0:4365
-10688:3:2953
-10689:0:4365
-10690:3:2954
-10691:3:2958
-10692:3:2959
-10693:3:2967
-10694:3:2968
-10695:3:2972
-10696:3:2973
-10697:3:2967
-10698:3:2968
-10699:3:2972
-10700:3:2973
-10701:3:2981
-10702:3:2986
-10703:3:2990
-10704:3:2991
-10705:3:2998
-10706:3:2999
-10707:3:3010
-10708:3:3011
-10709:3:3012
-10710:3:3010
-10711:3:3011
-10712:3:3012
-10713:3:3023
-10714:3:3028
-10715:3:3029
-10716:0:4365
-10717:3:3041
-10718:0:4365
-10719:3:3042
-10720:0:4365
-10721:2:1173
-10722:0:4365
-10723:3:3043
-10724:0:4365
-10725:2:1179
-10726:0:4365
-10727:2:1180
-10728:0:4365
-10729:3:3042
-10730:0:4365
-10731:2:1181
-10732:2:1185
-10733:2:1186
-10734:2:1194
-10735:2:1195
-10736:2:1199
-10737:2:1200
-10738:2:1194
-10739:2:1195
-10740:2:1199
-10741:2:1200
-10742:2:1208
-10743:2:1213
-10744:2:1217
-10745:2:1218
-10746:2:1225
-10747:2:1226
-10748:2:1237
-10749:2:1238
-10750:2:1239
-10751:2:1237
-10752:2:1238
-10753:2:1239
-10754:2:1250
-10755:2:1255
-10756:2:1256
-10757:0:4365
-10758:3:3043
-10759:0:4365
-10760:2:1268
-10761:0:4365
-10762:3:3042
-10763:0:4365
-10764:2:1270
-10765:0:4365
-10766:3:3043
-10767:0:4365
-10768:2:1271
-10769:2:1275
-10770:2:1276
-10771:2:1284
-10772:2:1285
-10773:2:1289
-10774:2:1290
-10775:2:1284
-10776:2:1285
-10777:2:1289
-10778:2:1290
-10779:2:1298
-10780:2:1303
-10781:2:1307
-10782:2:1308
-10783:2:1315
-10784:2:1316
-10785:2:1327
-10786:2:1328
-10787:2:1329
-10788:2:1327
-10789:2:1328
-10790:2:1329
-10791:2:1340
-10792:2:1345
-10793:2:1346
-10794:0:4365
-10795:2:1358
-10796:0:4365
-10797:2:1360
-10798:0:4365
-10799:3:3042
-10800:0:4365
-10801:2:1361
-10802:0:4365
-10803:3:3043
-10804:0:4365
-10805:2:1362
-10806:2:1366
-10807:2:1367
-10808:2:1375
-10809:2:1376
-10810:2:1380
-10811:2:1381
-10812:2:1375
-10813:2:1376
-10814:2:1380
-10815:2:1381
-10816:2:1389
-10817:2:1394
-10818:2:1398
-10819:2:1399
-10820:2:1406
-10821:2:1407
-10822:2:1418
-10823:2:1419
-10824:2:1420
-10825:2:1418
-10826:2:1419
-10827:2:1420
-10828:2:1431
-10829:2:1436
-10830:2:1437
-10831:0:4365
-10832:2:1449
-10833:0:4365
-10834:3:3042
-10835:0:4365
-10836:2:1451
-10837:0:4365
-10838:3:3043
-10839:0:4365
-10840:2:1652
-10841:0:4365
-10842:2:1653
-10843:0:4365
-10844:2:1657
-10845:0:4365
-10846:2:1180
-10847:0:4365
-10848:3:3042
-10849:0:4365
-10850:2:1181
-10851:2:1185
-10852:2:1186
-10853:2:1194
-10854:2:1195
-10855:2:1199
-10856:2:1200
-10857:2:1194
-10858:2:1195
-10859:2:1196
-10860:2:1208
-10861:2:1213
-10862:2:1217
-10863:2:1218
-10864:2:1225
-10865:2:1226
-10866:2:1237
-10867:2:1238
-10868:2:1239
-10869:2:1237
-10870:2:1238
-10871:2:1239
-10872:2:1250
-10873:2:1255
-10874:2:1256
-10875:0:4365
-10876:3:3043
-10877:0:4365
-10878:2:1268
-10879:0:4365
-10880:3:3042
-10881:0:4365
-10882:2:1270
-10883:0:4365
-10884:3:3043
-10885:0:4365
-10886:2:1271
-10887:2:1275
-10888:2:1276
-10889:2:1284
-10890:2:1285
-10891:2:1289
-10892:2:1290
-10893:2:1284
-10894:2:1285
-10895:2:1289
-10896:2:1290
-10897:2:1298
-10898:2:1303
-10899:2:1307
-10900:2:1308
-10901:2:1315
-10902:2:1316
-10903:2:1327
-10904:2:1328
-10905:2:1329
-10906:2:1327
-10907:2:1328
-10908:2:1329
-10909:2:1340
-10910:2:1345
-10911:2:1346
-10912:0:4365
-10913:2:1358
-10914:0:4365
-10915:2:1454
-10916:0:4365
-10917:3:3042
-10918:0:4365
-10919:2:1455
-10920:0:4365
-10921:3:3043
-10922:0:4365
-10923:2:1652
-10924:0:4365
-10925:2:1653
-10926:0:4365
-10927:2:1657
-10928:0:4365
-10929:2:1660
-10930:0:4365
-10931:3:3042
-10932:0:4365
-10933:2:1665
-10934:2:1669
-10935:2:1670
-10936:2:1678
-10937:2:1679
-10938:2:1683
-10939:2:1684
-10940:2:1678
-10941:2:1679
-10942:2:1680
-10943:2:1692
-10944:2:1697
-10945:2:1701
-10946:2:1702
-10947:2:1709
-10948:2:1710
-10949:2:1721
-10950:2:1722
-10951:2:1723
-10952:2:1721
-10953:2:1722
-10954:2:1723
-10955:2:1734
-10956:2:1739
-10957:2:1740
-10958:0:4365
-10959:3:3043
-10960:0:4365
-10961:2:1752
-10962:0:4365
-10963:3:3042
-10964:0:4365
-10965:2:1754
-10966:0:4365
-10967:3:3043
-10968:0:4365
-10969:2:1755
-10970:2:1759
-10971:2:1760
-10972:2:1768
-10973:2:1769
-10974:2:1773
-10975:2:1774
-10976:2:1768
-10977:2:1769
-10978:2:1773
-10979:2:1774
-10980:2:1782
-10981:2:1787
-10982:2:1791
-10983:2:1792
-10984:2:1799
-10985:2:1800
-10986:2:1811
-10987:2:1812
-10988:2:1813
-10989:2:1811
-10990:2:1812
-10991:2:1813
-10992:2:1824
-10993:2:1829
-10994:2:1830
-10995:0:4365
-10996:2:1842
-10997:0:4365
-10998:3:3042
-10999:0:4365
-11000:2:1844
-11001:0:4365
-11002:3:3043
-11003:0:4365
-11004:2:1845
-11005:2:1849
-11006:2:1850
-11007:2:1858
-11008:2:1859
-11009:2:1863
-11010:2:1864
-11011:2:1858
-11012:2:1859
-11013:2:1863
-11014:2:1864
-11015:2:1872
-11016:2:1877
-11017:2:1881
-11018:2:1882
-11019:2:1889
-11020:2:1890
-11021:2:1901
-11022:2:1902
-11023:2:1903
-11024:2:1901
-11025:2:1902
-11026:2:1903
-11027:2:1914
-11028:2:1919
-11029:2:1920
-11030:0:4365
-11031:2:1932
-11032:0:4365
-11033:3:3042
-11034:0:4365
-11035:2:1934
-11036:0:4365
-11037:3:3043
-11038:0:4365
-11039:2:1935
-11040:0:4365
-11041:2:1936
-11042:0:4365
-11043:2:2129
-11044:0:4365
-11045:2:2130
-11046:0:4365
-11047:2:2134
-11048:0:4365
-11049:3:3042
-11050:0:4365
-11051:2:2136
-11052:0:4365
-11053:3:3043
-11054:0:4365
-11055:2:2137
-11056:2:2141
-11057:2:2142
-11058:2:2150
-11059:2:2151
-11060:2:2155
-11061:2:2156
-11062:2:2150
-11063:2:2151
-11064:2:2155
-11065:2:2156
-11066:2:2164
-11067:2:2169
-11068:2:2173
-11069:2:2174
-11070:2:2181
-11071:2:2182
-11072:2:2193
-11073:2:2194
-11074:2:2195
-11075:2:2193
-11076:2:2194
-11077:2:2195
-11078:2:2206
-11079:2:2211
-11080:2:2212
-11081:0:4365
-11082:2:2224
-11083:0:4365
-11084:3:3042
-11085:0:4365
-11086:2:2226
-11087:0:4365
-11088:3:3043
-11089:0:4365
-11090:2:1936
-11091:0:4365
-11092:2:2129
-11093:0:4365
-11094:2:2130
-11095:0:4365
-11096:2:2134
-11097:0:4365
-11098:3:3042
-11099:0:4365
-11100:2:2136
-11101:0:4365
-11102:3:3043
-11103:0:4365
-11104:2:2137
-11105:2:2141
-11106:2:2142
-11107:2:2150
-11108:2:2151
-11109:2:2155
-11110:2:2156
-11111:2:2150
-11112:2:2151
-11113:2:2152
-11114:2:2164
-11115:2:2169
-11116:2:2173
-11117:2:2174
-11118:2:2181
-11119:2:2182
-11120:2:2193
-11121:2:2194
-11122:2:2195
-11123:2:2193
-11124:2:2194
-11125:2:2195
-11126:2:2206
-11127:2:2211
-11128:2:2212
-11129:0:4365
-11130:2:2224
-11131:0:4365
-11132:3:3042
-11133:0:4365
-11134:2:2226
-11135:0:4365
-11136:3:3043
-11137:0:4365
-11138:2:2230
-11139:0:4365
-11140:3:3042
-11141:0:4365
-11142:2:2235
-11143:2:2239
-11144:2:2240
-11145:2:2248
-11146:2:2249
-11147:2:2253
-11148:2:2254
-11149:2:2248
-11150:2:2249
-11151:2:2250
-11152:2:2262
-11153:2:2267
-11154:2:2271
-11155:2:2272
-11156:2:2279
-11157:2:2280
-11158:2:2291
-11159:2:2292
-11160:2:2293
-11161:2:2291
-11162:2:2292
-11163:2:2293
-11164:2:2304
-11165:2:2309
-11166:2:2310
-11167:0:4365
-11168:3:3043
-11169:0:4365
-11170:2:2322
-11171:0:4365
-11172:2:1169
-11173:0:4365
-11174:3:3042
-11175:0:4365
-11176:2:1170
-11177:0:4365
-11178:3:3043
-11179:0:4365
-11180:3:3044
-11181:0:4365
-11182:3:3257
-11183:0:4365
-11184:3:3362
-11185:0:4365
-11186:3:3363
-11187:0:4365
-11188:3:3367
-11189:0:4365
-11190:3:3373
-11191:3:3377
-11192:3:3378
-11193:3:3386
-11194:3:3387
-11195:3:3391
-11196:3:3392
-11197:3:3386
-11198:3:3387
-11199:3:3391
-11200:3:3392
-11201:3:3400
-11202:3:3405
-11203:3:3409
-11204:3:3410
-11205:3:3417
-11206:3:3418
-11207:3:3429
-11208:3:3430
-11209:3:3431
-11210:3:3429
-11211:3:3430
-11212:3:3431
-11213:3:3442
-11214:3:3447
-11215:3:3448
-11216:0:4365
-11217:3:3460
-11218:0:4365
-11219:3:3461
-11220:0:4365
-11221:2:1173
-11222:0:4365
-11223:3:3462
-11224:0:4365
-11225:2:1179
-11226:0:4365
-11227:2:1180
-11228:0:4365
-11229:3:3461
-11230:0:4365
-11231:2:1181
-11232:2:1185
-11233:2:1186
-11234:2:1194
-11235:2:1195
-11236:2:1199
-11237:2:1200
-11238:2:1194
-11239:2:1195
-11240:2:1199
-11241:2:1200
-11242:2:1208
-11243:2:1213
-11244:2:1217
-11245:2:1218
-11246:2:1225
-11247:2:1226
-11248:2:1237
-11249:2:1238
-11250:2:1239
-11251:2:1237
-11252:2:1238
-11253:2:1239
-11254:2:1250
-11255:2:1255
-11256:2:1256
-11257:0:4365
-11258:3:3462
-11259:0:4365
-11260:2:1268
-11261:0:4365
-11262:3:3461
-11263:0:4365
-11264:2:1270
-11265:0:4365
-11266:3:3462
-11267:0:4365
-11268:2:1271
-11269:2:1275
-11270:2:1276
-11271:2:1284
-11272:2:1285
-11273:2:1289
-11274:2:1290
-11275:2:1284
-11276:2:1285
-11277:2:1289
-11278:2:1290
-11279:2:1298
-11280:2:1303
-11281:2:1307
-11282:2:1308
-11283:2:1315
-11284:2:1316
-11285:2:1327
-11286:2:1328
-11287:2:1329
-11288:2:1327
-11289:2:1328
-11290:2:1329
-11291:2:1340
-11292:2:1345
-11293:2:1346
-11294:0:4365
-11295:2:1358
-11296:0:4365
-11297:2:1360
-11298:0:4365
-11299:3:3461
-11300:0:4365
-11301:2:1361
-11302:0:4365
-11303:3:3462
-11304:0:4365
-11305:2:1362
-11306:2:1366
-11307:2:1367
-11308:2:1375
-11309:2:1376
-11310:2:1380
-11311:2:1381
-11312:2:1375
-11313:2:1376
-11314:2:1380
-11315:2:1381
-11316:2:1389
-11317:2:1394
-11318:2:1398
-11319:2:1399
-11320:2:1406
-11321:2:1407
-11322:2:1418
-11323:2:1419
-11324:2:1420
-11325:2:1418
-11326:2:1419
-11327:2:1420
-11328:2:1431
-11329:2:1436
-11330:2:1437
-11331:0:4365
-11332:2:1449
-11333:0:4365
-11334:3:3461
-11335:0:4365
-11336:2:1451
-11337:0:4365
-11338:3:3462
-11339:0:4365
-11340:2:1652
-11341:0:4365
-11342:2:1653
-11343:0:4365
-11344:2:1657
-11345:0:4365
-11346:2:1180
-11347:0:4365
-11348:3:3461
-11349:0:4365
-11350:2:1181
-11351:2:1185
-11352:2:1186
-11353:2:1194
-11354:2:1195
-11355:2:1199
-11356:2:1200
-11357:2:1194
-11358:2:1195
-11359:2:1196
-11360:2:1208
-11361:2:1213
-11362:2:1217
-11363:2:1218
-11364:2:1225
-11365:2:1226
-11366:2:1237
-11367:2:1238
-11368:2:1239
-11369:2:1237
-11370:2:1238
-11371:2:1239
-11372:2:1250
-11373:2:1255
-11374:2:1256
-11375:0:4365
-11376:3:3462
-11377:0:4365
-11378:2:1268
-11379:0:4365
-11380:3:3461
-11381:0:4365
-11382:2:1270
-11383:0:4365
-11384:3:3462
-11385:0:4365
-11386:2:1271
-11387:2:1275
-11388:2:1276
-11389:2:1284
-11390:2:1285
-11391:2:1289
-11392:2:1290
-11393:2:1284
-11394:2:1285
-11395:2:1289
-11396:2:1290
-11397:2:1298
-11398:2:1303
-11399:2:1307
-11400:2:1308
-11401:2:1315
-11402:2:1316
-11403:2:1327
-11404:2:1328
-11405:2:1329
-11406:2:1327
-11407:2:1328
-11408:2:1329
-11409:2:1340
-11410:2:1345
-11411:2:1346
-11412:0:4365
-11413:2:1358
-11414:0:4365
-11415:2:1454
-11416:0:4365
-11417:3:3461
-11418:0:4365
-11419:2:1455
-11420:0:4365
-11421:3:3462
-11422:0:4365
-11423:2:1652
-11424:0:4365
-11425:2:1653
-11426:0:4365
-11427:2:1657
-11428:0:4365
-11429:2:1660
-11430:0:4365
-11431:3:3461
-11432:0:4365
-11433:2:1665
-11434:2:1669
-11435:2:1670
-11436:2:1678
-11437:2:1679
-11438:2:1683
-11439:2:1684
-11440:2:1678
-11441:2:1679
-11442:2:1680
-11443:2:1692
-11444:2:1697
-11445:2:1701
-11446:2:1702
-11447:2:1709
-11448:2:1710
-11449:2:1721
-11450:2:1722
-11451:2:1723
-11452:2:1721
-11453:2:1722
-11454:2:1723
-11455:2:1734
-11456:2:1739
-11457:2:1740
-11458:0:4365
-11459:3:3462
-11460:0:4365
-11461:2:1752
-11462:0:4365
-11463:3:3461
-11464:0:4365
-11465:2:1754
-11466:0:4365
-11467:3:3462
-11468:0:4365
-11469:2:1755
-11470:2:1759
-11471:2:1760
-11472:2:1768
-11473:2:1769
-11474:2:1773
-11475:2:1774
-11476:2:1768
-11477:2:1769
-11478:2:1773
-11479:2:1774
-11480:2:1782
-11481:2:1787
-11482:2:1791
-11483:2:1792
-11484:2:1799
-11485:2:1800
-11486:2:1811
-11487:2:1812
-11488:2:1813
-11489:2:1811
-11490:2:1812
-11491:2:1813
-11492:2:1824
-11493:2:1829
-11494:2:1830
-11495:0:4365
-11496:2:1842
-11497:0:4365
-11498:3:3461
-11499:0:4365
-11500:2:1844
-11501:0:4365
-11502:3:3462
-11503:0:4365
-11504:2:1845
-11505:2:1849
-11506:2:1850
-11507:2:1858
-11508:2:1859
-11509:2:1863
-11510:2:1864
-11511:2:1858
-11512:2:1859
-11513:2:1863
-11514:2:1864
-11515:2:1872
-11516:2:1877
-11517:2:1881
-11518:2:1882
-11519:2:1889
-11520:2:1890
-11521:2:1901
-11522:2:1902
-11523:2:1903
-11524:2:1901
-11525:2:1902
-11526:2:1903
-11527:2:1914
-11528:2:1919
-11529:2:1920
-11530:0:4365
-11531:2:1932
-11532:0:4365
-11533:3:3461
-11534:0:4365
-11535:2:1934
-11536:0:4365
-11537:3:3462
-11538:0:4365
-11539:2:1935
-11540:0:4365
-11541:2:1936
-11542:0:4365
-11543:2:2129
-11544:0:4365
-11545:2:2130
-11546:0:4365
-11547:2:2134
-11548:0:4365
-11549:3:3461
-11550:0:4365
-11551:2:2136
-11552:0:4365
-11553:3:3462
-11554:0:4365
-11555:2:2137
-11556:2:2141
-11557:2:2142
-11558:2:2150
-11559:2:2151
-11560:2:2155
-11561:2:2156
-11562:2:2150
-11563:2:2151
-11564:2:2155
-11565:2:2156
-11566:2:2164
-11567:2:2169
-11568:2:2173
-11569:2:2174
-11570:2:2181
-11571:2:2182
-11572:2:2193
-11573:2:2194
-11574:2:2195
-11575:2:2193
-11576:2:2194
-11577:2:2195
-11578:2:2206
-11579:2:2211
-11580:2:2212
-11581:0:4365
-11582:2:2224
-11583:0:4365
-11584:3:3461
-11585:0:4365
-11586:2:2226
-11587:0:4365
-11588:3:3462
-11589:0:4365
-11590:2:1936
-11591:0:4365
-11592:2:2129
-11593:0:4365
-11594:2:2130
-11595:0:4365
-11596:2:2134
-11597:0:4365
-11598:3:3461
-11599:0:4365
-11600:2:2136
-11601:0:4365
-11602:3:3462
-11603:0:4365
-11604:2:2137
-11605:2:2141
-11606:2:2142
-11607:2:2150
-11608:2:2151
-11609:2:2155
-11610:2:2156
-11611:2:2150
-11612:2:2151
-11613:2:2152
-11614:2:2164
-11615:2:2169
-11616:2:2173
-11617:2:2174
-11618:2:2181
-11619:2:2182
-11620:2:2193
-11621:2:2194
-11622:2:2195
-11623:2:2193
-11624:2:2194
-11625:2:2195
-11626:2:2206
-11627:2:2211
-11628:2:2212
-11629:0:4365
-11630:2:2224
-11631:0:4365
-11632:3:3461
-11633:0:4365
-11634:2:2226
-11635:0:4365
-11636:3:3462
-11637:0:4365
-11638:2:2230
-11639:0:4365
-11640:3:3461
-11641:0:4365
-11642:2:2235
-11643:2:2239
-11644:2:2240
-11645:2:2248
-11646:2:2249
-11647:2:2253
-11648:2:2254
-11649:2:2248
-11650:2:2249
-11651:2:2250
-11652:2:2262
-11653:2:2267
-11654:2:2271
-11655:2:2272
-11656:2:2279
-11657:2:2280
-11658:2:2291
-11659:2:2292
-11660:2:2293
-11661:2:2291
-11662:2:2292
-11663:2:2293
-11664:2:2304
-11665:2:2309
-11666:2:2310
-11667:0:4365
-11668:3:3462
-11669:0:4365
-11670:2:2322
-11671:0:4365
-11672:2:1169
-11673:0:4365
-11674:3:3461
-11675:0:4365
-11676:2:1170
-11677:0:4365
-11678:3:3462
-11679:0:4365
-11680:3:3463
-11681:0:4365
-11682:3:3469
-11683:0:4365
-11684:3:3470
-11685:3:3474
-11686:3:3475
-11687:3:3483
-11688:3:3484
-11689:3:3488
-11690:3:3489
-11691:3:3483
-11692:3:3484
-11693:3:3488
-11694:3:3489
-11695:3:3497
-11696:3:3502
-11697:3:3506
-11698:3:3507
-11699:3:3514
-11700:3:3515
-11701:3:3526
-11702:3:3527
-11703:3:3528
-11704:3:3526
-11705:3:3527
-11706:3:3528
-11707:3:3539
-11708:3:3544
-11709:3:3545
-11710:0:4365
-11711:3:3557
-11712:0:4365
-11713:3:3558
-11714:0:4365
-11715:2:1173
-11716:0:4365
-11717:3:3559
-11718:0:4365
-11719:2:1179
-11720:0:4365
-11721:2:1180
-11722:0:4365
-11723:3:3558
-11724:0:4365
-11725:2:1181
-11726:2:1185
-11727:2:1186
-11728:2:1194
-11729:2:1195
-11730:2:1199
-11731:2:1200
-11732:2:1194
-11733:2:1195
-11734:2:1199
-11735:2:1200
-11736:2:1208
-11737:2:1213
-11738:2:1217
-11739:2:1218
-11740:2:1225
-11741:2:1226
-11742:2:1237
-11743:2:1238
-11744:2:1239
-11745:2:1237
-11746:2:1238
-11747:2:1239
-11748:2:1250
-11749:2:1255
-11750:2:1256
-11751:0:4365
-11752:3:3559
-11753:0:4365
-11754:2:1268
-11755:0:4365
-11756:3:3558
-11757:0:4365
-11758:2:1270
-11759:0:4365
-11760:3:3559
-11761:0:4365
-11762:2:1271
-11763:2:1275
-11764:2:1276
-11765:2:1284
-11766:2:1285
-11767:2:1289
-11768:2:1290
-11769:2:1284
-11770:2:1285
-11771:2:1289
-11772:2:1290
-11773:2:1298
-11774:2:1303
-11775:2:1307
-11776:2:1308
-11777:2:1315
-11778:2:1316
-11779:2:1327
-11780:2:1328
-11781:2:1329
-11782:2:1327
-11783:2:1328
-11784:2:1329
-11785:2:1340
-11786:2:1345
-11787:2:1346
-11788:0:4365
-11789:2:1358
-11790:0:4365
-11791:2:1360
-11792:0:4365
-11793:3:3558
-11794:0:4365
-11795:2:1361
-11796:0:4365
-11797:3:3559
-11798:0:4365
-11799:2:1362
-11800:2:1366
-11801:2:1367
-11802:2:1375
-11803:2:1376
-11804:2:1380
-11805:2:1381
-11806:2:1375
-11807:2:1376
-11808:2:1380
-11809:2:1381
-11810:2:1389
-11811:2:1394
-11812:2:1398
-11813:2:1399
-11814:2:1406
-11815:2:1407
-11816:2:1418
-11817:2:1419
-11818:2:1420
-11819:2:1418
-11820:2:1419
-11821:2:1420
-11822:2:1431
-11823:2:1436
-11824:2:1437
-11825:0:4365
-11826:2:1449
-11827:0:4365
-11828:3:3558
-11829:0:4365
-11830:2:1451
-11831:0:4365
-11832:3:3559
-11833:0:4365
-11834:2:1652
-11835:0:4365
-11836:2:1653
-11837:0:4365
-11838:2:1657
-11839:0:4365
-11840:2:1180
-11841:0:4365
-11842:3:3558
-11843:0:4365
-11844:2:1181
-11845:2:1185
-11846:2:1186
-11847:2:1194
-11848:2:1195
-11849:2:1199
-11850:2:1200
-11851:2:1194
-11852:2:1195
-11853:2:1196
-11854:2:1208
-11855:2:1213
-11856:2:1217
-11857:2:1218
-11858:2:1225
-11859:2:1226
-11860:2:1237
-11861:2:1238
-11862:2:1239
-11863:2:1237
-11864:2:1238
-11865:2:1239
-11866:2:1250
-11867:2:1255
-11868:2:1256
-11869:0:4365
-11870:3:3559
-11871:0:4365
-11872:2:1268
-11873:0:4365
-11874:3:3558
-11875:0:4365
-11876:2:1270
-11877:0:4365
-11878:3:3559
-11879:0:4365
-11880:2:1271
-11881:2:1275
-11882:2:1276
-11883:2:1284
-11884:2:1285
-11885:2:1289
-11886:2:1290
-11887:2:1284
-11888:2:1285
-11889:2:1289
-11890:2:1290
-11891:2:1298
-11892:2:1303
-11893:2:1307
-11894:2:1308
-11895:2:1315
-11896:2:1316
-11897:2:1327
-11898:2:1328
-11899:2:1329
-11900:2:1327
-11901:2:1328
-11902:2:1329
-11903:2:1340
-11904:2:1345
-11905:2:1346
-11906:0:4365
-11907:2:1358
-11908:0:4365
-11909:2:1454
-11910:0:4365
-11911:3:3558
-11912:0:4365
-11913:2:1455
-11914:0:4365
-11915:3:3559
-11916:0:4365
-11917:2:1652
-11918:0:4365
-11919:2:1653
-11920:0:4365
-11921:2:1657
-11922:0:4365
-11923:2:1660
-11924:0:4365
-11925:3:3558
-11926:0:4365
-11927:2:1665
-11928:2:1669
-11929:2:1670
-11930:2:1678
-11931:2:1679
-11932:2:1683
-11933:2:1684
-11934:2:1678
-11935:2:1679
-11936:2:1680
-11937:2:1692
-11938:2:1697
-11939:2:1701
-11940:2:1702
-11941:2:1709
-11942:2:1710
-11943:2:1721
-11944:2:1722
-11945:2:1723
-11946:2:1721
-11947:2:1722
-11948:2:1723
-11949:2:1734
-11950:2:1739
-11951:2:1740
-11952:0:4365
-11953:3:3559
-11954:0:4365
-11955:2:1752
-11956:0:4365
-11957:3:3558
-11958:0:4365
-11959:2:1754
-11960:0:4365
-11961:3:3559
-11962:0:4365
-11963:2:1755
-11964:2:1759
-11965:2:1760
-11966:2:1768
-11967:2:1769
-11968:2:1773
-11969:2:1774
-11970:2:1768
-11971:2:1769
-11972:2:1773
-11973:2:1774
-11974:2:1782
-11975:2:1787
-11976:2:1791
-11977:2:1792
-11978:2:1799
-11979:2:1800
-11980:2:1811
-11981:2:1812
-11982:2:1813
-11983:2:1811
-11984:2:1812
-11985:2:1813
-11986:2:1824
-11987:2:1829
-11988:2:1830
-11989:0:4365
-11990:2:1842
-11991:0:4365
-11992:3:3558
-11993:0:4365
-11994:2:1844
-11995:0:4365
-11996:3:3559
-11997:0:4365
-11998:2:1845
-11999:2:1849
-12000:2:1850
-12001:2:1858
-12002:2:1859
-12003:2:1863
-12004:2:1864
-12005:2:1858
-12006:2:1859
-12007:2:1863
-12008:2:1864
-12009:2:1872
-12010:2:1877
-12011:2:1881
-12012:2:1882
-12013:2:1889
-12014:2:1890
-12015:2:1901
-12016:2:1902
-12017:2:1903
-12018:2:1901
-12019:2:1902
-12020:2:1903
-12021:2:1914
-12022:2:1919
-12023:2:1920
-12024:0:4365
-12025:2:1932
-12026:0:4365
-12027:3:3558
-12028:0:4365
-12029:2:1934
-12030:0:4365
-12031:3:3559
-12032:0:4365
-12033:2:1935
-12034:0:4365
-12035:2:1936
-12036:0:4365
-12037:2:2129
-12038:0:4365
-12039:2:2130
-12040:0:4365
-12041:2:2134
-12042:0:4365
-12043:3:3558
-12044:0:4365
-12045:2:2136
-12046:0:4365
-12047:3:3559
-12048:0:4365
-12049:2:2137
-12050:2:2141
-12051:2:2142
-12052:2:2150
-12053:2:2151
-12054:2:2155
-12055:2:2156
-12056:2:2150
-12057:2:2151
-12058:2:2155
-12059:2:2156
-12060:2:2164
-12061:2:2169
-12062:2:2173
-12063:2:2174
-12064:2:2181
-12065:2:2182
-12066:2:2193
-12067:2:2194
-12068:2:2195
-12069:2:2193
-12070:2:2194
-12071:2:2195
-12072:2:2206
-12073:2:2211
-12074:2:2212
-12075:0:4365
-12076:2:2224
-12077:0:4365
-12078:3:3558
-12079:0:4365
-12080:2:2226
-12081:0:4365
-12082:3:3559
-12083:0:4365
-12084:2:1936
-12085:0:4365
-12086:2:2129
-12087:0:4365
-12088:2:2130
-12089:0:4365
-12090:2:2134
-12091:0:4365
-12092:3:3558
-12093:0:4365
-12094:2:2136
-12095:0:4365
-12096:3:3559
-12097:0:4365
-12098:2:2137
-12099:2:2141
-12100:2:2142
-12101:2:2150
-12102:2:2151
-12103:2:2155
-12104:2:2156
-12105:2:2150
-12106:2:2151
-12107:2:2152
-12108:2:2164
-12109:2:2169
-12110:2:2173
-12111:2:2174
-12112:2:2181
-12113:2:2182
-12114:2:2193
-12115:2:2194
-12116:2:2195
-12117:2:2193
-12118:2:2194
-12119:2:2195
-12120:2:2206
-12121:2:2211
-12122:2:2212
-12123:0:4365
-12124:2:2224
-12125:0:4365
-12126:3:3558
-12127:0:4365
-12128:2:2226
-12129:0:4365
-12130:3:3559
-12131:0:4365
-12132:2:2230
-12133:0:4365
-12134:3:3558
-12135:0:4365
-12136:2:2235
-12137:2:2239
-12138:2:2240
-12139:2:2248
-12140:2:2249
-12141:2:2253
-12142:2:2254
-12143:2:2248
-12144:2:2249
-12145:2:2250
-12146:2:2262
-12147:2:2267
-12148:2:2271
-12149:2:2272
-12150:2:2279
-12151:2:2280
-12152:2:2291
-12153:2:2292
-12154:2:2293
-12155:2:2291
-12156:2:2292
-12157:2:2293
-12158:2:2304
-12159:2:2309
-12160:2:2310
-12161:0:4365
-12162:3:3559
-12163:0:4365
-12164:2:2322
-12165:0:4365
-12166:2:1169
-12167:0:4365
-12168:3:3558
-12169:0:4365
-12170:2:1170
-12171:0:4365
-12172:3:3559
-12173:0:4365
-12174:3:3560
-12175:0:4365
-12176:3:3566
-12177:0:4365
-12178:3:3569
-12179:3:3570
-12180:3:3582
-12181:3:3583
-12182:3:3587
-12183:3:3588
-12184:3:3582
-12185:3:3583
-12186:3:3587
-12187:3:3588
-12188:3:3596
-12189:3:3601
-12190:3:3605
-12191:3:3606
-12192:3:3613
-12193:3:3614
-12194:3:3625
-12195:3:3626
-12196:3:3627
-12197:3:3625
-12198:3:3626
-12199:3:3627
-12200:3:3638
-12201:3:3643
-12202:3:3644
-12203:0:4365
-12204:3:3656
-12205:0:4365
-12206:3:3657
-12207:0:4365
-12208:2:1173
-12209:0:4365
-12210:3:3658
-12211:0:4365
-12212:2:1179
-12213:0:4365
-12214:2:1180
-12215:0:4365
-12216:3:3657
-12217:0:4365
-12218:2:1181
-12219:2:1185
-12220:2:1186
-12221:2:1194
-12222:2:1195
-12223:2:1199
-12224:2:1200
-12225:2:1194
-12226:2:1195
-12227:2:1199
-12228:2:1200
-12229:2:1208
-12230:2:1213
-12231:2:1217
-12232:2:1218
-12233:2:1225
-12234:2:1226
-12235:2:1237
-12236:2:1238
-12237:2:1239
-12238:2:1237
-12239:2:1238
-12240:2:1239
-12241:2:1250
-12242:2:1255
-12243:2:1256
-12244:0:4365
-12245:3:3658
-12246:0:4365
-12247:2:1268
-12248:0:4365
-12249:3:3657
-12250:0:4365
-12251:2:1270
-12252:0:4365
-12253:3:3658
-12254:0:4365
-12255:2:1271
-12256:2:1275
-12257:2:1276
-12258:2:1284
-12259:2:1285
-12260:2:1289
-12261:2:1290
-12262:2:1284
-12263:2:1285
-12264:2:1289
-12265:2:1290
-12266:2:1298
-12267:2:1303
-12268:2:1307
-12269:2:1308
-12270:2:1315
-12271:2:1316
-12272:2:1327
-12273:2:1328
-12274:2:1329
-12275:2:1327
-12276:2:1328
-12277:2:1329
-12278:2:1340
-12279:2:1345
-12280:2:1346
-12281:0:4365
-12282:2:1358
-12283:0:4365
-12284:2:1360
-12285:0:4365
-12286:3:3657
-12287:0:4365
-12288:2:1361
-12289:0:4365
-12290:3:3658
-12291:0:4365
-12292:2:1362
-12293:2:1366
-12294:2:1367
-12295:2:1375
-12296:2:1376
-12297:2:1380
-12298:2:1381
-12299:2:1375
-12300:2:1376
-12301:2:1380
-12302:2:1381
-12303:2:1389
-12304:2:1394
-12305:2:1398
-12306:2:1399
-12307:2:1406
-12308:2:1407
-12309:2:1418
-12310:2:1419
-12311:2:1420
-12312:2:1418
-12313:2:1419
-12314:2:1420
-12315:2:1431
-12316:2:1436
-12317:2:1437
-12318:0:4365
-12319:2:1449
-12320:0:4365
-12321:3:3657
-12322:0:4365
-12323:2:1451
-12324:0:4365
-12325:3:3658
-12326:0:4365
-12327:2:1652
-12328:0:4365
-12329:2:1653
-12330:0:4365
-12331:2:1657
-12332:0:4365
-12333:2:1180
-12334:0:4365
-12335:3:3657
-12336:0:4365
-12337:2:1181
-12338:2:1185
-12339:2:1186
-12340:2:1194
-12341:2:1195
-12342:2:1199
-12343:2:1200
-12344:2:1194
-12345:2:1195
-12346:2:1196
-12347:2:1208
-12348:2:1213
-12349:2:1217
-12350:2:1218
-12351:2:1225
-12352:2:1226
-12353:2:1237
-12354:2:1238
-12355:2:1239
-12356:2:1237
-12357:2:1238
-12358:2:1239
-12359:2:1250
-12360:2:1255
-12361:2:1256
-12362:0:4365
-12363:3:3658
-12364:0:4365
-12365:2:1268
-12366:0:4365
-12367:3:3657
-12368:0:4365
-12369:2:1270
-12370:0:4365
-12371:3:3658
-12372:0:4365
-12373:2:1271
-12374:2:1275
-12375:2:1276
-12376:2:1284
-12377:2:1285
-12378:2:1289
-12379:2:1290
-12380:2:1284
-12381:2:1285
-12382:2:1289
-12383:2:1290
-12384:2:1298
-12385:2:1303
-12386:2:1307
-12387:2:1308
-12388:2:1315
-12389:2:1316
-12390:2:1327
-12391:2:1328
-12392:2:1329
-12393:2:1327
-12394:2:1328
-12395:2:1329
-12396:2:1340
-12397:2:1345
-12398:2:1346
-12399:0:4365
-12400:2:1358
-12401:0:4365
-12402:2:1454
-12403:0:4365
-12404:3:3657
-12405:0:4365
-12406:2:1455
-12407:0:4365
-12408:3:3658
-12409:0:4365
-12410:2:1652
-12411:0:4365
-12412:2:1653
-12413:0:4365
-12414:2:1657
-12415:0:4365
-12416:2:1660
-12417:0:4365
-12418:3:3657
-12419:0:4365
-12420:2:1665
-12421:2:1669
-12422:2:1670
-12423:2:1678
-12424:2:1679
-12425:2:1683
-12426:2:1684
-12427:2:1678
-12428:2:1679
-12429:2:1680
-12430:2:1692
-12431:2:1697
-12432:2:1701
-12433:2:1702
-12434:2:1709
-12435:2:1710
-12436:2:1721
-12437:2:1722
-12438:2:1723
-12439:2:1721
-12440:2:1722
-12441:2:1723
-12442:2:1734
-12443:2:1739
-12444:2:1740
-12445:0:4365
-12446:3:3658
-12447:0:4365
-12448:2:1752
-12449:0:4365
-12450:3:3657
-12451:0:4365
-12452:2:1754
-12453:0:4365
-12454:3:3658
-12455:0:4365
-12456:2:1755
-12457:2:1759
-12458:2:1760
-12459:2:1768
-12460:2:1769
-12461:2:1773
-12462:2:1774
-12463:2:1768
-12464:2:1769
-12465:2:1773
-12466:2:1774
-12467:2:1782
-12468:2:1787
-12469:2:1791
-12470:2:1792
-12471:2:1799
-12472:2:1800
-12473:2:1811
-12474:2:1812
-12475:2:1813
-12476:2:1811
-12477:2:1812
-12478:2:1813
-12479:2:1824
-12480:2:1829
-12481:2:1830
-12482:0:4365
-12483:2:1842
-12484:0:4365
-12485:3:3657
-12486:0:4365
-12487:2:1844
-12488:0:4365
-12489:3:3658
-12490:0:4365
-12491:2:1845
-12492:2:1849
-12493:2:1850
-12494:2:1858
-12495:2:1859
-12496:2:1863
-12497:2:1864
-12498:2:1858
-12499:2:1859
-12500:2:1863
-12501:2:1864
-12502:2:1872
-12503:2:1877
-12504:2:1881
-12505:2:1882
-12506:2:1889
-12507:2:1890
-12508:2:1901
-12509:2:1902
-12510:2:1903
-12511:2:1901
-12512:2:1902
-12513:2:1903
-12514:2:1914
-12515:2:1919
-12516:2:1920
-12517:0:4365
-12518:2:1932
-12519:0:4365
-12520:3:3657
-12521:0:4365
-12522:2:1934
-12523:0:4365
-12524:3:3658
-12525:0:4365
-12526:2:1935
-12527:0:4365
-12528:2:1936
-12529:0:4365
-12530:2:2129
-12531:0:4365
-12532:2:2130
-12533:0:4365
-12534:2:2134
-12535:0:4365
-12536:3:3657
-12537:0:4365
-12538:2:2136
-12539:0:4365
-12540:3:3658
-12541:0:4365
-12542:2:2137
-12543:2:2141
-12544:2:2142
-12545:2:2150
-12546:2:2151
-12547:2:2155
-12548:2:2156
-12549:2:2150
-12550:2:2151
-12551:2:2155
-12552:2:2156
-12553:2:2164
-12554:2:2169
-12555:2:2173
-12556:2:2174
-12557:2:2181
-12558:2:2182
-12559:2:2193
-12560:2:2194
-12561:2:2195
-12562:2:2193
-12563:2:2194
-12564:2:2195
-12565:2:2206
-12566:2:2211
-12567:2:2212
-12568:0:4365
-12569:2:2224
-12570:0:4365
-12571:3:3657
-12572:0:4365
-12573:2:2226
-12574:0:4365
-12575:3:3658
-12576:0:4365
-12577:2:1936
-12578:0:4365
-12579:2:2129
-12580:0:4365
-12581:2:2130
-12582:0:4365
-12583:2:2134
-12584:0:4365
-12585:3:3657
-12586:0:4365
-12587:2:2136
-12588:0:4365
-12589:3:3658
-12590:0:4365
-12591:2:2137
-12592:2:2141
-12593:2:2142
-12594:2:2150
-12595:2:2151
-12596:2:2155
-12597:2:2156
-12598:2:2150
-12599:2:2151
-12600:2:2152
-12601:2:2164
-12602:2:2169
-12603:2:2173
-12604:2:2174
-12605:2:2181
-12606:2:2182
-12607:2:2193
-12608:2:2194
-12609:2:2195
-12610:2:2193
-12611:2:2194
-12612:2:2195
-12613:2:2206
-12614:2:2211
-12615:2:2212
-12616:0:4365
-12617:2:2224
-12618:0:4365
-12619:3:3657
-12620:0:4365
-12621:2:2226
-12622:0:4365
-12623:3:3658
-12624:0:4365
-12625:2:2230
-12626:0:4365
-12627:3:3657
-12628:0:4365
-12629:2:2235
-12630:2:2239
-12631:2:2240
-12632:2:2248
-12633:2:2249
-12634:2:2253
-12635:2:2254
-12636:2:2248
-12637:2:2249
-12638:2:2250
-12639:2:2262
-12640:2:2267
-12641:2:2271
-12642:2:2272
-12643:2:2279
-12644:2:2280
-12645:2:2291
-12646:2:2292
-12647:2:2293
-12648:2:2291
-12649:2:2292
-12650:2:2293
-12651:2:2304
-12652:2:2309
-12653:2:2310
-12654:0:4365
-12655:3:3658
-12656:0:4365
-12657:2:2322
-12658:0:4365
-12659:2:1169
-12660:0:4365
-12661:3:3657
-12662:0:4365
-12663:2:1170
-12664:0:4365
-12665:3:3658
-12666:0:4365
-12667:3:3659
-12668:0:4365
-12669:3:3665
-12670:0:4365
-12671:3:3666
-12672:0:4365
-12673:3:3667
-12674:0:4365
-12675:3:3668
-12676:0:4365
-12677:3:3669
-12678:3:3673
-12679:3:3674
-12680:3:3682
-12681:3:3683
-12682:3:3687
-12683:3:3688
-12684:3:3682
-12685:3:3683
-12686:3:3687
-12687:3:3688
-12688:3:3696
-12689:3:3701
-12690:3:3705
-12691:3:3706
-12692:3:3713
-12693:3:3714
-12694:3:3725
-12695:3:3726
-12696:3:3727
-12697:3:3725
-12698:3:3726
-12699:3:3727
-12700:3:3738
-12701:3:3743
-12702:3:3744
-12703:0:4365
-12704:3:3756
-12705:0:4365
-12706:3:3757
-12707:0:4365
-12708:2:1173
-12709:0:4365
-12710:3:3758
-12711:0:4365
-12712:2:1179
-12713:0:4365
-12714:2:1180
-12715:0:4365
-12716:3:3757
-12717:0:4365
-12718:2:1181
-12719:2:1185
-12720:2:1186
-12721:2:1194
-12722:2:1195
-12723:2:1199
-12724:2:1200
-12725:2:1194
-12726:2:1195
-12727:2:1199
-12728:2:1200
-12729:2:1208
-12730:2:1213
-12731:2:1217
-12732:2:1218
-12733:2:1225
-12734:2:1226
-12735:2:1237
-12736:2:1238
-12737:2:1239
-12738:2:1237
-12739:2:1238
-12740:2:1239
-12741:2:1250
-12742:2:1255
-12743:2:1256
-12744:0:4365
-12745:3:3758
-12746:0:4365
-12747:2:1268
-12748:0:4365
-12749:3:3757
-12750:0:4365
-12751:2:1270
-12752:0:4365
-12753:3:3758
-12754:0:4365
-12755:2:1271
-12756:2:1275
-12757:2:1276
-12758:2:1284
-12759:2:1285
-12760:2:1289
-12761:2:1290
-12762:2:1284
-12763:2:1285
-12764:2:1289
-12765:2:1290
-12766:2:1298
-12767:2:1303
-12768:2:1307
-12769:2:1308
-12770:2:1315
-12771:2:1316
-12772:2:1327
-12773:2:1328
-12774:2:1329
-12775:2:1327
-12776:2:1328
-12777:2:1329
-12778:2:1340
-12779:2:1345
-12780:2:1346
-12781:0:4365
-12782:2:1358
-12783:0:4365
-12784:2:1360
-12785:0:4365
-12786:3:3757
-12787:0:4365
-12788:2:1361
-12789:0:4365
-12790:3:3758
-12791:0:4365
-12792:2:1362
-12793:2:1366
-12794:2:1367
-12795:2:1375
-12796:2:1376
-12797:2:1380
-12798:2:1381
-12799:2:1375
-12800:2:1376
-12801:2:1380
-12802:2:1381
-12803:2:1389
-12804:2:1394
-12805:2:1398
-12806:2:1399
-12807:2:1406
-12808:2:1407
-12809:2:1418
-12810:2:1419
-12811:2:1420
-12812:2:1418
-12813:2:1419
-12814:2:1420
-12815:2:1431
-12816:2:1436
-12817:2:1437
-12818:0:4365
-12819:2:1449
-12820:0:4365
-12821:3:3757
-12822:0:4365
-12823:2:1451
-12824:0:4365
-12825:3:3758
-12826:0:4365
-12827:2:1652
-12828:0:4365
-12829:2:1653
-12830:0:4365
-12831:2:1657
-12832:0:4365
-12833:2:1180
-12834:0:4365
-12835:3:3757
-12836:0:4365
-12837:2:1181
-12838:2:1185
-12839:2:1186
-12840:2:1194
-12841:2:1195
-12842:2:1199
-12843:2:1200
-12844:2:1194
-12845:2:1195
-12846:2:1196
-12847:2:1208
-12848:2:1213
-12849:2:1217
-12850:2:1218
-12851:2:1225
-12852:2:1226
-12853:2:1237
-12854:2:1238
-12855:2:1239
-12856:2:1237
-12857:2:1238
-12858:2:1239
-12859:2:1250
-12860:2:1255
-12861:2:1256
-12862:0:4365
-12863:3:3758
-12864:0:4365
-12865:2:1268
-12866:0:4365
-12867:3:3757
-12868:0:4365
-12869:2:1270
-12870:0:4365
-12871:3:3758
-12872:0:4365
-12873:2:1271
-12874:2:1275
-12875:2:1276
-12876:2:1284
-12877:2:1285
-12878:2:1289
-12879:2:1290
-12880:2:1284
-12881:2:1285
-12882:2:1289
-12883:2:1290
-12884:2:1298
-12885:2:1303
-12886:2:1307
-12887:2:1308
-12888:2:1315
-12889:2:1316
-12890:2:1327
-12891:2:1328
-12892:2:1329
-12893:2:1327
-12894:2:1328
-12895:2:1329
-12896:2:1340
-12897:2:1345
-12898:2:1346
-12899:0:4365
-12900:2:1358
-12901:0:4365
-12902:2:1454
-12903:0:4365
-12904:3:3757
-12905:0:4365
-12906:2:1455
-12907:0:4365
-12908:3:3758
-12909:0:4365
-12910:2:1652
-12911:0:4365
-12912:2:1653
-12913:0:4365
-12914:2:1657
-12915:0:4365
-12916:2:1660
-12917:0:4365
-12918:3:3757
-12919:0:4365
-12920:2:1665
-12921:2:1669
-12922:2:1670
-12923:2:1678
-12924:2:1679
-12925:2:1683
-12926:2:1684
-12927:2:1678
-12928:2:1679
-12929:2:1680
-12930:2:1692
-12931:2:1697
-12932:2:1701
-12933:2:1702
-12934:2:1709
-12935:2:1710
-12936:2:1721
-12937:2:1722
-12938:2:1723
-12939:2:1721
-12940:2:1722
-12941:2:1723
-12942:2:1734
-12943:2:1739
-12944:2:1740
-12945:0:4365
-12946:3:3758
-12947:0:4365
-12948:2:1752
-12949:0:4365
-12950:3:3757
-12951:0:4365
-12952:2:1754
-12953:0:4365
-12954:3:3758
-12955:0:4365
-12956:2:1755
-12957:2:1759
-12958:2:1760
-12959:2:1768
-12960:2:1769
-12961:2:1773
-12962:2:1774
-12963:2:1768
-12964:2:1769
-12965:2:1773
-12966:2:1774
-12967:2:1782
-12968:2:1787
-12969:2:1791
-12970:2:1792
-12971:2:1799
-12972:2:1800
-12973:2:1811
-12974:2:1812
-12975:2:1813
-12976:2:1811
-12977:2:1812
-12978:2:1813
-12979:2:1824
-12980:2:1829
-12981:2:1830
-12982:0:4365
-12983:2:1842
-12984:0:4365
-12985:3:3757
-12986:0:4365
-12987:2:1844
-12988:0:4365
-12989:3:3758
-12990:0:4365
-12991:2:1845
-12992:2:1849
-12993:2:1850
-12994:2:1858
-12995:2:1859
-12996:2:1863
-12997:2:1864
-12998:2:1858
-12999:2:1859
-13000:2:1863
-13001:2:1864
-13002:2:1872
-13003:2:1877
-13004:2:1881
-13005:2:1882
-13006:2:1889
-13007:2:1890
-13008:2:1901
-13009:2:1902
-13010:2:1903
-13011:2:1901
-13012:2:1902
-13013:2:1903
-13014:2:1914
-13015:2:1919
-13016:2:1920
-13017:0:4365
-13018:2:1932
-13019:0:4365
-13020:3:3757
-13021:0:4365
-13022:2:1934
-13023:0:4365
-13024:3:3758
-13025:0:4365
-13026:2:1935
-13027:0:4365
-13028:2:1936
-13029:0:4365
-13030:2:2129
-13031:0:4365
-13032:2:2130
-13033:0:4365
-13034:2:2134
-13035:0:4365
-13036:3:3757
-13037:0:4365
-13038:2:2136
-13039:0:4365
-13040:3:3758
-13041:0:4365
-13042:2:2137
-13043:2:2141
-13044:2:2142
-13045:2:2150
-13046:2:2151
-13047:2:2155
-13048:2:2156
-13049:2:2150
-13050:2:2151
-13051:2:2155
-13052:2:2156
-13053:2:2164
-13054:2:2169
-13055:2:2173
-13056:2:2174
-13057:2:2181
-13058:2:2182
-13059:2:2193
-13060:2:2194
-13061:2:2195
-13062:2:2193
-13063:2:2194
-13064:2:2195
-13065:2:2206
-13066:2:2211
-13067:2:2212
-13068:0:4365
-13069:2:2224
-13070:0:4365
-13071:3:3757
-13072:0:4365
-13073:2:2226
-13074:0:4365
-13075:3:3758
-13076:0:4365
-13077:2:1936
-13078:0:4365
-13079:2:2129
-13080:0:4365
-13081:2:2130
-13082:0:4365
-13083:2:2134
-13084:0:4365
-13085:3:3757
-13086:0:4365
-13087:2:2136
-13088:0:4365
-13089:3:3758
-13090:0:4365
-13091:2:2137
-13092:2:2141
-13093:2:2142
-13094:2:2150
-13095:2:2151
-13096:2:2155
-13097:2:2156
-13098:2:2150
-13099:2:2151
-13100:2:2152
-13101:2:2164
-13102:2:2169
-13103:2:2173
-13104:2:2174
-13105:2:2181
-13106:2:2182
-13107:2:2193
-13108:2:2194
-13109:2:2195
-13110:2:2193
-13111:2:2194
-13112:2:2195
-13113:2:2206
-13114:2:2211
-13115:2:2212
-13116:0:4365
-13117:2:2224
-13118:0:4365
-13119:3:3757
-13120:0:4365
-13121:2:2226
-13122:0:4365
-13123:3:3758
-13124:0:4365
-13125:2:2230
-13126:0:4365
-13127:3:3757
-13128:0:4365
-13129:2:2235
-13130:2:2239
-13131:2:2240
-13132:2:2248
-13133:2:2249
-13134:2:2253
-13135:2:2254
-13136:2:2248
-13137:2:2249
-13138:2:2250
-13139:2:2262
-13140:2:2267
-13141:2:2271
-13142:2:2272
-13143:2:2279
-13144:2:2280
-13145:2:2291
-13146:2:2292
-13147:2:2293
-13148:2:2291
-13149:2:2292
-13150:2:2293
-13151:2:2304
-13152:2:2309
-13153:2:2310
-13154:0:4365
-13155:3:3758
-13156:0:4365
-13157:2:2322
-13158:0:4365
-13159:2:1169
-13160:0:4365
-13161:3:3757
-13162:0:4365
-13163:2:1170
-13164:0:4365
-13165:3:3758
-13166:0:4365
-13167:3:3759
-13168:0:4365
-13169:3:3972
-13170:0:4365
-13171:3:3980
-13172:0:4365
-13173:3:3981
-13174:3:3985
-13175:3:3986
-13176:3:3994
-13177:3:3995
-13178:3:3999
-13179:3:4000
-13180:3:3994
-13181:3:3995
-13182:3:3999
-13183:3:4000
-13184:3:4008
-13185:3:4013
-13186:3:4017
-13187:3:4018
-13188:3:4025
-13189:3:4026
-13190:3:4037
-13191:3:4038
-13192:3:4039
-13193:3:4037
-13194:3:4038
-13195:3:4039
-13196:3:4050
-13197:3:4055
-13198:3:4056
-13199:0:4365
-13200:3:4068
-13201:0:4365
-13202:3:4069
-13203:0:4365
-13204:2:1173
-13205:0:4365
-13206:3:4070
-13207:0:4365
-13208:2:1179
-13209:0:4365
-13210:2:1180
-13211:0:4365
-13212:3:4069
-13213:0:4365
-13214:2:1181
-13215:2:1185
-13216:2:1186
-13217:2:1194
-13218:2:1195
-13219:2:1199
-13220:2:1200
-13221:2:1194
-13222:2:1195
-13223:2:1199
-13224:2:1200
-13225:2:1208
-13226:2:1213
-13227:2:1217
-13228:2:1218
-13229:2:1225
-13230:2:1226
-13231:2:1237
-13232:2:1238
-13233:2:1239
-13234:2:1237
-13235:2:1238
-13236:2:1239
-13237:2:1250
-13238:2:1255
-13239:2:1256
-13240:0:4365
-13241:3:4070
-13242:0:4365
-13243:2:1268
-13244:0:4365
-13245:3:4069
-13246:0:4365
-13247:2:1270
-13248:0:4365
-13249:3:4070
-13250:0:4365
-13251:2:1271
-13252:2:1275
-13253:2:1276
-13254:2:1284
-13255:2:1285
-13256:2:1289
-13257:2:1290
-13258:2:1284
-13259:2:1285
-13260:2:1289
-13261:2:1290
-13262:2:1298
-13263:2:1303
-13264:2:1307
-13265:2:1308
-13266:2:1315
-13267:2:1316
-13268:2:1327
-13269:2:1328
-13270:2:1329
-13271:2:1327
-13272:2:1328
-13273:2:1329
-13274:2:1340
-13275:2:1345
-13276:2:1346
-13277:0:4365
-13278:2:1358
-13279:0:4365
-13280:2:1360
-13281:0:4365
-13282:3:4069
-13283:0:4365
-13284:2:1361
-13285:0:4365
-13286:3:4070
-13287:0:4365
-13288:2:1362
-13289:2:1366
-13290:2:1367
-13291:2:1375
-13292:2:1376
-13293:2:1380
-13294:2:1381
-13295:2:1375
-13296:2:1376
-13297:2:1380
-13298:2:1381
-13299:2:1389
-13300:2:1394
-13301:2:1398
-13302:2:1399
-13303:2:1406
-13304:2:1407
-13305:2:1418
-13306:2:1419
-13307:2:1420
-13308:2:1418
-13309:2:1419
-13310:2:1420
-13311:2:1431
-13312:2:1436
-13313:2:1437
-13314:0:4365
-13315:2:1449
-13316:0:4365
-13317:3:4069
-13318:0:4365
-13319:2:1451
-13320:0:4365
-13321:3:4070
-13322:0:4365
-13323:2:1652
-13324:0:4365
-13325:2:1653
-13326:0:4365
-13327:2:1657
-13328:0:4365
-13329:2:1180
-13330:0:4365
-13331:3:4069
-13332:0:4365
-13333:2:1181
-13334:2:1185
-13335:2:1186
-13336:2:1194
-13337:2:1195
-13338:2:1199
-13339:2:1200
-13340:2:1194
-13341:2:1195
-13342:2:1196
-13343:2:1208
-13344:2:1213
-13345:2:1217
-13346:2:1218
-13347:2:1225
-13348:2:1226
-13349:2:1237
-13350:2:1238
-13351:2:1239
-13352:2:1237
-13353:2:1238
-13354:2:1239
-13355:2:1250
-13356:2:1255
-13357:2:1256
-13358:0:4365
-13359:3:4070
-13360:0:4365
-13361:2:1268
-13362:0:4365
-13363:3:4069
-13364:0:4365
-13365:2:1270
-13366:0:4365
-13367:3:4070
-13368:0:4365
-13369:2:1271
-13370:2:1275
-13371:2:1276
-13372:2:1284
-13373:2:1285
-13374:2:1289
-13375:2:1290
-13376:2:1284
-13377:2:1285
-13378:2:1289
-13379:2:1290
-13380:2:1298
-13381:2:1303
-13382:2:1307
-13383:2:1308
-13384:2:1315
-13385:2:1316
-13386:2:1327
-13387:2:1328
-13388:2:1329
-13389:2:1327
-13390:2:1328
-13391:2:1329
-13392:2:1340
-13393:2:1345
-13394:2:1346
-13395:0:4365
-13396:2:1358
-13397:0:4365
-13398:2:1454
-13399:0:4365
-13400:3:4069
-13401:0:4365
-13402:2:1455
-13403:0:4365
-13404:3:4070
-13405:0:4365
-13406:2:1652
-13407:0:4365
-13408:2:1653
-13409:0:4365
-13410:2:1657
-13411:0:4365
-13412:2:1660
-13413:0:4365
-13414:3:4069
-13415:0:4365
-13416:2:1665
-13417:2:1669
-13418:2:1670
-13419:2:1678
-13420:2:1679
-13421:2:1683
-13422:2:1684
-13423:2:1678
-13424:2:1679
-13425:2:1680
-13426:2:1692
-13427:2:1697
-13428:2:1701
-13429:2:1702
-13430:2:1709
-13431:2:1710
-13432:2:1721
-13433:2:1722
-13434:2:1723
-13435:2:1721
-13436:2:1722
-13437:2:1723
-13438:2:1734
-13439:2:1739
-13440:2:1740
-13441:0:4365
-13442:3:4070
-13443:0:4365
-13444:2:1752
-13445:0:4365
-13446:3:4069
-13447:0:4365
-13448:2:1754
-13449:0:4365
-13450:3:4070
-13451:0:4365
-13452:2:1755
-13453:2:1759
-13454:2:1760
-13455:2:1768
-13456:2:1769
-13457:2:1773
-13458:2:1774
-13459:2:1768
-13460:2:1769
-13461:2:1773
-13462:2:1774
-13463:2:1782
-13464:2:1787
-13465:2:1791
-13466:2:1792
-13467:2:1799
-13468:2:1800
-13469:2:1811
-13470:2:1812
-13471:2:1813
-13472:2:1811
-13473:2:1812
-13474:2:1813
-13475:2:1824
-13476:2:1829
-13477:2:1830
-13478:0:4365
-13479:2:1842
-13480:0:4365
-13481:3:4069
-13482:0:4365
-13483:2:1844
-13484:0:4365
-13485:3:4070
-13486:0:4365
-13487:2:1845
-13488:2:1849
-13489:2:1850
-13490:2:1858
-13491:2:1859
-13492:2:1863
-13493:2:1864
-13494:2:1858
-13495:2:1859
-13496:2:1863
-13497:2:1864
-13498:2:1872
-13499:2:1877
-13500:2:1881
-13501:2:1882
-13502:2:1889
-13503:2:1890
-13504:2:1901
-13505:2:1902
-13506:2:1903
-13507:2:1901
-13508:2:1902
-13509:2:1903
-13510:2:1914
-13511:2:1919
-13512:2:1920
-13513:0:4365
-13514:2:1932
-13515:0:4365
-13516:3:4069
-13517:0:4365
-13518:2:1934
-13519:0:4365
-13520:3:4070
-13521:0:4365
-13522:2:1935
-13523:0:4365
-13524:2:1936
-13525:0:4365
-13526:2:2129
-13527:0:4365
-13528:2:2130
-13529:0:4365
-13530:2:2134
-13531:0:4365
-13532:3:4069
-13533:0:4365
-13534:2:2136
-13535:0:4365
-13536:3:4070
-13537:0:4365
-13538:2:2137
-13539:2:2141
-13540:2:2142
-13541:2:2150
-13542:2:2151
-13543:2:2155
-13544:2:2156
-13545:2:2150
-13546:2:2151
-13547:2:2155
-13548:2:2156
-13549:2:2164
-13550:2:2169
-13551:2:2173
-13552:2:2174
-13553:2:2181
-13554:2:2182
-13555:2:2193
-13556:2:2194
-13557:2:2195
-13558:2:2193
-13559:2:2194
-13560:2:2195
-13561:2:2206
-13562:2:2211
-13563:2:2212
-13564:0:4365
-13565:2:2224
-13566:0:4365
-13567:3:4069
-13568:0:4365
-13569:2:2226
-13570:0:4365
-13571:3:4070
-13572:0:4365
-13573:2:1936
-13574:0:4365
-13575:2:2129
-13576:0:4365
-13577:2:2130
-13578:0:4365
-13579:2:2134
-13580:0:4365
-13581:3:4069
-13582:0:4365
-13583:2:2136
-13584:0:4365
-13585:3:4070
-13586:0:4365
-13587:2:2137
-13588:2:2141
-13589:2:2142
-13590:2:2150
-13591:2:2151
-13592:2:2155
-13593:2:2156
-13594:2:2150
-13595:2:2151
-13596:2:2152
-13597:2:2164
-13598:2:2169
-13599:2:2173
-13600:2:2174
-13601:2:2181
-13602:2:2182
-13603:2:2193
-13604:2:2194
-13605:2:2195
-13606:2:2193
-13607:2:2194
-13608:2:2195
-13609:2:2206
-13610:2:2211
-13611:2:2212
-13612:0:4365
-13613:2:2224
-13614:0:4365
-13615:3:4069
-13616:0:4365
-13617:2:2226
-13618:0:4365
-13619:3:4070
-13620:0:4365
-13621:2:2230
-13622:0:4365
-13623:3:4069
-13624:0:4365
-13625:2:2235
-13626:2:2239
-13627:2:2240
-13628:2:2248
-13629:2:2249
-13630:2:2253
-13631:2:2254
-13632:2:2248
-13633:2:2249
-13634:2:2250
-13635:2:2262
-13636:2:2267
-13637:2:2271
-13638:2:2272
-13639:2:2279
-13640:2:2280
-13641:2:2291
-13642:2:2292
-13643:2:2293
-13644:2:2291
-13645:2:2292
-13646:2:2293
-13647:2:2304
-13648:2:2309
-13649:2:2310
-13650:0:4365
-13651:3:4070
-13652:0:4365
-13653:2:2322
-13654:0:4365
-13655:2:1169
-13656:0:4365
-13657:3:4069
-13658:0:4365
-13659:2:1170
-13660:0:4365
-13661:3:4070
-13662:0:4365
-13663:3:4071
-13664:0:4365
-13665:3:4081
-13666:0:4365
-13667:3:3666
-13668:0:4365
-13669:3:3667
-13670:0:4365
-13671:3:3668
-13672:0:4365
-13673:3:3669
-13674:3:3673
-13675:3:3674
-13676:3:3682
-13677:3:3683
-13678:3:3687
-13679:3:3688
-13680:3:3682
-13681:3:3683
-13682:3:3687
-13683:3:3688
-13684:3:3696
-13685:3:3701
-13686:3:3705
-13687:3:3706
-13688:3:3713
-13689:3:3714
-13690:3:3725
-13691:3:3726
-13692:3:3727
-13693:3:3725
-13694:3:3726
-13695:3:3727
-13696:3:3738
-13697:3:3743
-13698:3:3744
-13699:0:4365
-13700:3:3756
-13701:0:4365
-13702:3:3757
-13703:0:4365
-13704:2:1173
-13705:0:4365
-13706:3:3758
-13707:0:4365
-13708:2:1179
-13709:0:4365
-13710:2:1180
-13711:0:4365
-13712:3:3757
-13713:0:4365
-13714:2:1181
-13715:2:1185
-13716:2:1186
-13717:2:1194
-13718:2:1195
-13719:2:1199
-13720:2:1200
-13721:2:1194
-13722:2:1195
-13723:2:1199
-13724:2:1200
-13725:2:1208
-13726:2:1213
-13727:2:1217
-13728:2:1218
-13729:2:1225
-13730:2:1226
-13731:2:1237
-13732:2:1238
-13733:2:1239
-13734:2:1237
-13735:2:1238
-13736:2:1239
-13737:2:1250
-13738:2:1255
-13739:2:1256
-13740:0:4365
-13741:3:3758
-13742:0:4365
-13743:2:1268
-13744:0:4365
-13745:3:3757
-13746:0:4365
-13747:2:1270
-13748:0:4365
-13749:3:3758
-13750:0:4365
-13751:2:1271
-13752:2:1275
-13753:2:1276
-13754:2:1284
-13755:2:1285
-13756:2:1289
-13757:2:1290
-13758:2:1284
-13759:2:1285
-13760:2:1289
-13761:2:1290
-13762:2:1298
-13763:2:1303
-13764:2:1307
-13765:2:1308
-13766:2:1315
-13767:2:1316
-13768:2:1327
-13769:2:1328
-13770:2:1329
-13771:2:1327
-13772:2:1328
-13773:2:1329
-13774:2:1340
-13775:2:1345
-13776:2:1346
-13777:0:4365
-13778:2:1358
-13779:0:4365
-13780:2:1360
-13781:0:4365
-13782:3:3757
-13783:0:4365
-13784:2:1361
-13785:0:4365
-13786:3:3758
-13787:0:4365
-13788:2:1362
-13789:2:1366
-13790:2:1367
-13791:2:1375
-13792:2:1376
-13793:2:1380
-13794:2:1381
-13795:2:1375
-13796:2:1376
-13797:2:1380
-13798:2:1381
-13799:2:1389
-13800:2:1394
-13801:2:1398
-13802:2:1399
-13803:2:1406
-13804:2:1407
-13805:2:1418
-13806:2:1419
-13807:2:1420
-13808:2:1418
-13809:2:1419
-13810:2:1420
-13811:2:1431
-13812:2:1436
-13813:2:1437
-13814:0:4365
-13815:2:1449
-13816:0:4365
-13817:3:3757
-13818:0:4365
-13819:2:1451
-13820:0:4365
-13821:3:3758
-13822:0:4365
-13823:2:1652
-13824:0:4365
-13825:2:1653
-13826:0:4365
-13827:2:1657
-13828:0:4365
-13829:2:1180
-13830:0:4365
-13831:3:3757
-13832:0:4365
-13833:2:1181
-13834:2:1185
-13835:2:1186
-13836:2:1194
-13837:2:1195
-13838:2:1199
-13839:2:1200
-13840:2:1194
-13841:2:1195
-13842:2:1196
-13843:2:1208
-13844:2:1213
-13845:2:1217
-13846:2:1218
-13847:2:1225
-13848:2:1226
-13849:2:1237
-13850:2:1238
-13851:2:1239
-13852:2:1237
-13853:2:1238
-13854:2:1239
-13855:2:1250
-13856:2:1255
-13857:2:1256
-13858:0:4365
-13859:3:3758
-13860:0:4365
-13861:2:1268
-13862:0:4365
-13863:3:3757
-13864:0:4365
-13865:2:1270
-13866:0:4365
-13867:3:3758
-13868:0:4365
-13869:2:1271
-13870:2:1275
-13871:2:1276
-13872:2:1284
-13873:2:1285
-13874:2:1289
-13875:2:1290
-13876:2:1284
-13877:2:1285
-13878:2:1289
-13879:2:1290
-13880:2:1298
-13881:2:1303
-13882:2:1307
-13883:2:1308
-13884:2:1315
-13885:2:1316
-13886:2:1327
-13887:2:1328
-13888:2:1329
-13889:2:1327
-13890:2:1328
-13891:2:1329
-13892:2:1340
-13893:2:1345
-13894:2:1346
-13895:0:4365
-13896:2:1358
-13897:0:4365
-13898:2:1454
-13899:0:4365
-13900:3:3757
-13901:0:4365
-13902:2:1455
-13903:0:4365
-13904:3:3758
-13905:0:4365
-13906:2:1652
-13907:0:4365
-13908:2:1653
-13909:0:4365
-13910:2:1657
-13911:0:4365
-13912:2:1660
-13913:0:4365
-13914:3:3757
-13915:0:4365
-13916:2:1665
-13917:2:1669
-13918:2:1670
-13919:2:1678
-13920:2:1679
-13921:2:1683
-13922:2:1684
-13923:2:1678
-13924:2:1679
-13925:2:1680
-13926:2:1692
-13927:2:1697
-13928:2:1701
-13929:2:1702
-13930:2:1709
-13931:2:1710
-13932:2:1721
-13933:2:1722
-13934:2:1723
-13935:2:1721
-13936:2:1722
-13937:2:1723
-13938:2:1734
-13939:2:1739
-13940:2:1740
-13941:0:4365
-13942:3:3758
-13943:0:4365
-13944:2:1752
-13945:0:4365
-13946:3:3757
-13947:0:4365
-13948:2:1754
-13949:0:4365
-13950:3:3758
-13951:0:4365
-13952:2:1755
-13953:2:1759
-13954:2:1760
-13955:2:1768
-13956:2:1769
-13957:2:1773
-13958:2:1774
-13959:2:1768
-13960:2:1769
-13961:2:1773
-13962:2:1774
-13963:2:1782
-13964:2:1787
-13965:2:1791
-13966:2:1792
-13967:2:1799
-13968:2:1800
-13969:2:1811
-13970:2:1812
-13971:2:1813
-13972:2:1811
-13973:2:1812
-13974:2:1813
-13975:2:1824
-13976:2:1829
-13977:2:1830
-13978:0:4365
-13979:2:1842
-13980:0:4365
-13981:3:3757
-13982:0:4365
-13983:2:1844
-13984:0:4365
-13985:3:3758
-13986:0:4365
-13987:2:1845
-13988:2:1849
-13989:2:1850
-13990:2:1858
-13991:2:1859
-13992:2:1863
-13993:2:1864
-13994:2:1858
-13995:2:1859
-13996:2:1863
-13997:2:1864
-13998:2:1872
-13999:2:1877
-14000:2:1881
-14001:2:1882
-14002:2:1889
-14003:2:1890
-14004:2:1901
-14005:2:1902
-14006:2:1903
-14007:2:1901
-14008:2:1902
-14009:2:1903
-14010:2:1914
-14011:2:1919
-14012:2:1920
-14013:0:4365
-14014:2:1932
-14015:0:4365
-14016:3:3757
-14017:0:4365
-14018:2:1934
-14019:0:4365
-14020:3:3758
-14021:0:4365
-14022:2:1935
-14023:0:4365
-14024:2:1936
-14025:0:4365
-14026:2:2129
-14027:0:4365
-14028:2:2130
-14029:0:4365
-14030:2:2134
-14031:0:4365
-14032:3:3757
-14033:0:4365
-14034:2:2136
-14035:0:4365
-14036:3:3758
-14037:0:4365
-14038:2:2137
-14039:2:2141
-14040:2:2142
-14041:2:2150
-14042:2:2151
-14043:2:2155
-14044:2:2156
-14045:2:2150
-14046:2:2151
-14047:2:2155
-14048:2:2156
-14049:2:2164
-14050:2:2169
-14051:2:2173
-14052:2:2174
-14053:2:2181
-14054:2:2182
-14055:2:2193
-14056:2:2194
-14057:2:2195
-14058:2:2193
-14059:2:2194
-14060:2:2195
-14061:2:2206
-14062:2:2211
-14063:2:2212
-14064:0:4365
-14065:2:2224
-14066:0:4365
-14067:3:3757
-14068:0:4365
-14069:2:2226
-14070:0:4365
-14071:3:3758
-14072:0:4365
-14073:2:1936
-14074:0:4365
-14075:2:2129
-14076:0:4365
-14077:2:2130
-14078:0:4365
-14079:2:2134
-14080:0:4365
-14081:3:3757
-14082:0:4365
-14083:2:2136
-14084:0:4365
-14085:3:3758
-14086:0:4365
-14087:2:2137
-14088:2:2141
-14089:2:2142
-14090:2:2150
-14091:2:2151
-14092:2:2155
-14093:2:2156
-14094:2:2150
-14095:2:2151
-14096:2:2152
-14097:2:2164
-14098:2:2169
-14099:2:2173
-14100:2:2174
-14101:2:2181
-14102:2:2182
-14103:2:2193
-14104:2:2194
-14105:2:2195
-14106:2:2193
-14107:2:2194
-14108:2:2195
-14109:2:2206
-14110:2:2211
-14111:2:2212
-14112:0:4365
-14113:2:2224
-14114:0:4365
-14115:3:3757
-14116:0:4365
-14117:2:2226
-14118:0:4365
-14119:3:3758
-14120:0:4365
-14121:2:2230
-14122:0:4365
-14123:3:3757
-14124:0:4365
-14125:2:2235
-14126:2:2239
-14127:2:2240
-14128:2:2248
-14129:2:2249
-14130:2:2253
-14131:2:2254
-14132:2:2248
-14133:2:2249
-14134:2:2250
-14135:2:2262
-14136:2:2267
-14137:2:2271
-14138:2:2272
-14139:2:2279
-14140:2:2280
-14141:2:2291
-14142:2:2292
-14143:2:2293
-14144:2:2291
-14145:2:2292
-14146:2:2293
-14147:2:2304
-14148:2:2309
-14149:2:2310
-14150:0:4365
-14151:3:3758
-14152:0:4365
-14153:2:2322
-14154:0:4365
-14155:2:1169
-14156:0:4365
-14157:3:3757
-14158:0:4365
-14159:2:1170
-14160:0:4365
-14161:3:3758
-14162:0:4365
-14163:3:3759
-14164:0:4365
-14165:3:3972
-14166:0:4365
-14167:3:4077
-14168:0:4365
-14169:3:4078
-14170:0:4365
-14171:3:4082
-14172:0:4365
-14173:3:4088
-14174:0:4365
-14175:3:4092
-14176:3:4093
-14177:3:4097
-14178:3:4101
-14179:3:4102
-14180:3:4097
-14181:3:4101
-14182:3:4102
-14183:3:4106
-14184:3:4114
-14185:3:4115
-14186:3:4120
-14187:3:4127
-14188:3:4128
-14189:3:4127
-14190:3:4128
-14191:3:4135
-14192:3:4140
-14193:0:4365
-14194:3:4151
-14195:0:4365
-14196:3:4155
-14197:3:4156
-14198:3:4160
-14199:3:4164
-14200:3:4165
-14201:3:4160
-14202:3:4164
-14203:3:4165
-14204:3:4169
-14205:3:4177
-14206:3:4178
-14207:3:4183
-14208:3:4190
-14209:3:4191
-14210:3:4190
-14211:3:4191
-14212:3:4198
-14213:3:4203
-14214:0:4365
-14215:3:4151
-14216:0:4365
-14217:3:4155
-14218:3:4156
-14219:3:4160
-14220:3:4164
-14221:3:4165
-14222:3:4160
-14223:3:4164
-14224:3:4165
-14225:3:4169
-14226:3:4177
-14227:3:4178
-14228:3:4183
-14229:3:4190
-14230:3:4191
-14231:3:4190
-14232:3:4191
-14233:3:4198
-14234:3:4203
-14235:0:4365
-14236:3:4214
-14237:0:4365
-14238:3:4222
-14239:3:4223
-14240:3:4227
-14241:3:4231
-14242:3:4232
-14243:3:4227
-14244:3:4231
-14245:3:4232
-14246:3:4236
-14247:3:4244
-14248:3:4245
-14249:3:4250
-14250:3:4257
-14251:3:4258
-14252:3:4257
-14253:3:4258
-14254:3:4265
-14255:3:4270
-14256:0:4365
-14257:3:4285
-14258:0:4365
-14259:3:4286
-14260:0:4365
-14261:2:1173
-14262:0:4365
-14263:3:4287
-14264:0:4365
-14265:2:1179
-14266:0:4365
-14267:2:1180
-14268:0:4365
-14269:3:4286
-14270:0:4365
-14271:2:1181
-14272:2:1185
-14273:2:1186
-14274:2:1194
-14275:2:1195
-14276:2:1199
-14277:2:1200
-14278:2:1194
-14279:2:1195
-14280:2:1199
-14281:2:1200
-14282:2:1208
-14283:2:1213
-14284:2:1217
-14285:2:1218
-14286:2:1225
-14287:2:1226
-14288:2:1237
-14289:2:1238
-14290:2:1239
-14291:2:1237
-14292:2:1238
-14293:2:1239
-14294:2:1250
-14295:2:1255
-14296:2:1256
-14297:0:4365
-14298:3:4287
-14299:0:4365
-14300:2:1268
-14301:0:4365
-14302:3:4286
-14303:0:4365
-14304:2:1270
-14305:0:4365
-14306:3:4287
-14307:0:4365
-14308:2:1271
-14309:2:1275
-14310:2:1276
-14311:2:1284
-14312:2:1285
-14313:2:1289
-14314:2:1290
-14315:2:1284
-14316:2:1285
-14317:2:1289
-14318:2:1290
-14319:2:1298
-14320:2:1303
-14321:2:1307
-14322:2:1308
-14323:2:1315
-14324:2:1316
-14325:2:1327
-14326:2:1328
-14327:2:1329
-14328:2:1327
-14329:2:1328
-14330:2:1329
-14331:2:1340
-14332:2:1345
-14333:2:1346
-14334:0:4365
-14335:2:1358
-14336:0:4365
-14337:2:1360
-14338:0:4365
-14339:3:4286
-14340:0:4365
-14341:2:1361
-14342:0:4365
-14343:3:4287
-14344:0:4365
-14345:2:1362
-14346:2:1366
-14347:2:1367
-14348:2:1375
-14349:2:1376
-14350:2:1380
-14351:2:1381
-14352:2:1375
-14353:2:1376
-14354:2:1380
-14355:2:1381
-14356:2:1389
-14357:2:1394
-14358:2:1398
-14359:2:1399
-14360:2:1406
-14361:2:1407
-14362:2:1418
-14363:2:1419
-14364:2:1420
-14365:2:1418
-14366:2:1419
-14367:2:1420
-14368:2:1431
-14369:2:1436
-14370:2:1437
-14371:0:4365
-14372:2:1449
-14373:0:4365
-14374:3:4286
-14375:0:4365
-14376:2:1451
-14377:0:4365
-14378:3:4287
-14379:0:4365
-14380:2:1652
-14381:0:4365
-14382:2:1653
-14383:0:4365
-14384:2:1657
-14385:0:4365
-14386:2:1180
-14387:0:4365
-14388:3:4286
-14389:0:4365
-14390:2:1181
-14391:2:1185
-14392:2:1186
-14393:2:1194
-14394:2:1195
-14395:2:1199
-14396:2:1200
-14397:2:1194
-14398:2:1195
-14399:2:1196
-14400:2:1208
-14401:2:1213
-14402:2:1217
-14403:2:1218
-14404:2:1225
-14405:2:1226
-14406:2:1237
-14407:2:1238
-14408:2:1239
-14409:2:1237
-14410:2:1238
-14411:2:1239
-14412:2:1250
-14413:2:1255
-14414:2:1256
-14415:0:4365
-14416:3:4287
-14417:0:4365
-14418:2:1268
-14419:0:4365
-14420:3:4286
-14421:0:4365
-14422:2:1270
-14423:0:4365
-14424:3:4287
-14425:0:4365
-14426:2:1271
-14427:2:1275
-14428:2:1276
-14429:2:1284
-14430:2:1285
-14431:2:1289
-14432:2:1290
-14433:2:1284
-14434:2:1285
-14435:2:1289
-14436:2:1290
-14437:2:1298
-14438:2:1303
-14439:2:1307
-14440:2:1308
-14441:2:1315
-14442:2:1316
-14443:2:1327
-14444:2:1328
-14445:2:1329
-14446:2:1327
-14447:2:1328
-14448:2:1329
-14449:2:1340
-14450:2:1345
-14451:2:1346
-14452:0:4365
-14453:2:1358
-14454:0:4365
-14455:2:1454
-14456:0:4365
-14457:3:4286
-14458:0:4365
-14459:2:1455
-14460:0:4365
-14461:3:4287
-14462:0:4365
-14463:2:1652
-14464:0:4365
-14465:2:1653
-14466:0:4365
-14467:2:1657
-14468:0:4365
-14469:2:1660
-14470:0:4365
-14471:3:4286
-14472:0:4365
-14473:2:1665
-14474:2:1669
-14475:2:1670
-14476:2:1678
-14477:2:1679
-14478:2:1683
-14479:2:1684
-14480:2:1678
-14481:2:1679
-14482:2:1680
-14483:2:1692
-14484:2:1697
-14485:2:1701
-14486:2:1702
-14487:2:1709
-14488:2:1710
-14489:2:1721
-14490:2:1722
-14491:2:1723
-14492:2:1721
-14493:2:1722
-14494:2:1723
-14495:2:1734
-14496:2:1739
-14497:2:1740
-14498:0:4365
-14499:3:4287
-14500:0:4365
-14501:2:1752
-14502:0:4365
-14503:3:4286
-14504:0:4365
-14505:2:1754
-14506:0:4365
-14507:3:4287
-14508:0:4365
-14509:2:1755
-14510:2:1759
-14511:2:1760
-14512:2:1768
-14513:2:1769
-14514:2:1773
-14515:2:1774
-14516:2:1768
-14517:2:1769
-14518:2:1773
-14519:2:1774
-14520:2:1782
-14521:2:1787
-14522:2:1791
-14523:2:1792
-14524:2:1799
-14525:2:1800
-14526:2:1811
-14527:2:1812
-14528:2:1813
-14529:2:1811
-14530:2:1812
-14531:2:1813
-14532:2:1824
-14533:2:1829
-14534:2:1830
-14535:0:4365
-14536:2:1842
-14537:0:4365
-14538:3:4286
-14539:0:4365
-14540:2:1844
-14541:0:4365
-14542:3:4287
-14543:0:4365
-14544:2:1845
-14545:2:1849
-14546:2:1850
-14547:2:1858
-14548:2:1859
-14549:2:1863
-14550:2:1864
-14551:2:1858
-14552:2:1859
-14553:2:1863
-14554:2:1864
-14555:2:1872
-14556:2:1877
-14557:2:1881
-14558:2:1882
-14559:2:1889
-14560:2:1890
-14561:2:1901
-14562:2:1902
-14563:2:1903
-14564:2:1901
-14565:2:1902
-14566:2:1903
-14567:2:1914
-14568:2:1919
-14569:2:1920
-14570:0:4365
-14571:2:1932
-14572:0:4365
-14573:3:4286
-14574:0:4365
-14575:2:1934
-14576:0:4365
-14577:3:4287
-14578:0:4365
-14579:2:1935
-14580:0:4365
-14581:2:1936
-14582:0:4365
-14583:2:2129
-14584:0:4365
-14585:2:2130
-14586:0:4365
-14587:2:2134
-14588:0:4365
-14589:3:4286
-14590:0:4365
-14591:2:2136
-14592:0:4365
-14593:3:4287
-14594:0:4365
-14595:2:2137
-14596:2:2141
-14597:2:2142
-14598:2:2150
-14599:2:2151
-14600:2:2155
-14601:2:2156
-14602:2:2150
-14603:2:2151
-14604:2:2155
-14605:2:2156
-14606:2:2164
-14607:2:2169
-14608:2:2173
-14609:2:2174
-14610:2:2181
-14611:2:2182
-14612:2:2193
-14613:2:2194
-14614:2:2195
-14615:2:2193
-14616:2:2194
-14617:2:2195
-14618:2:2206
-14619:2:2211
-14620:2:2212
-14621:0:4365
-14622:2:2224
-14623:0:4365
-14624:3:4286
-14625:0:4365
-14626:2:2226
-14627:0:4365
-14628:3:4287
-14629:0:4365
-14630:2:1936
-14631:0:4365
-14632:2:2129
-14633:0:4365
-14634:2:2130
-14635:0:4365
-14636:2:2134
-14637:0:4365
-14638:3:4286
-14639:0:4365
-14640:2:2136
-14641:0:4365
-14642:3:4287
-14643:0:4365
-14644:2:2137
-14645:2:2141
-14646:2:2142
-14647:2:2150
-14648:2:2151
-14649:2:2155
-14650:2:2156
-14651:2:2150
-14652:2:2151
-14653:2:2152
-14654:2:2164
-14655:2:2169
-14656:2:2173
-14657:2:2174
-14658:2:2181
-14659:2:2182
-14660:2:2193
-14661:2:2194
-14662:2:2195
-14663:2:2193
-14664:2:2194
-14665:2:2195
-14666:2:2206
-14667:2:2211
-14668:2:2212
-14669:0:4365
-14670:2:2224
-14671:0:4365
-14672:3:4286
-14673:0:4365
-14674:2:2226
-14675:0:4365
-14676:3:4287
-14677:0:4365
-14678:2:2230
-14679:0:4365
-14680:3:4286
-14681:0:4365
-14682:2:2235
-14683:2:2239
-14684:2:2240
-14685:2:2248
-14686:2:2249
-14687:2:2253
-14688:2:2254
-14689:2:2248
-14690:2:2249
-14691:2:2250
-14692:2:2262
-14693:2:2267
-14694:2:2271
-14695:2:2272
-14696:2:2279
-14697:2:2280
-14698:2:2291
-14699:2:2292
-14700:2:2293
-14701:2:2291
-14702:2:2292
-14703:2:2293
-14704:2:2304
-14705:2:2309
-14706:2:2310
-14707:0:4365
-14708:3:4287
-14709:0:4365
-14710:2:2322
-14711:0:4365
-14712:2:1169
-14713:0:4365
-14714:3:4286
-14715:0:4365
-14716:2:1170
-14717:0:4365
-14718:3:4287
-14719:0:4365
-14720:3:4288
-14721:0:4365
-14722:3:4294
-14723:0:4365
-14724:3:4295
-14725:0:4365
-14726:3:2338
-14727:0:4365
-14728:3:2339
-14729:3:2343
-14730:3:2344
-14731:3:2352
-14732:3:2353
-14733:3:2357
-14734:3:2358
-14735:3:2352
-14736:3:2353
-14737:3:2357
-14738:3:2358
-14739:3:2366
-14740:3:2371
-14741:3:2375
-14742:3:2376
-14743:3:2383
-14744:3:2384
-14745:3:2395
-14746:3:2396
-14747:3:2397
-14748:3:2395
-14749:3:2396
-14750:3:2397
-14751:3:2408
-14752:3:2413
-14753:3:2414
-14754:0:4365
-14755:3:2426
-14756:0:4365
-14757:3:2427
-14758:0:4365
-14759:2:1173
-14760:0:4365
-14761:3:2428
-14762:0:4365
-14763:2:1179
-14764:0:4365
-14765:2:1180
-14766:0:4365
-14767:3:2427
-14768:0:4365
-14769:2:1181
-14770:2:1185
-14771:2:1186
-14772:2:1194
-14773:2:1195
-14774:2:1199
-14775:2:1200
-14776:2:1194
-14777:2:1195
-14778:2:1199
-14779:2:1200
-14780:2:1208
-14781:2:1213
-14782:2:1217
-14783:2:1218
-14784:2:1225
-14785:2:1226
-14786:2:1237
-14787:2:1238
-14788:2:1239
-14789:2:1237
-14790:2:1238
-14791:2:1239
-14792:2:1250
-14793:2:1255
-14794:2:1256
-14795:0:4365
-14796:3:2428
-14797:0:4365
-14798:2:1268
-14799:0:4365
-14800:3:2427
-14801:0:4365
-14802:2:1270
-14803:0:4365
-14804:3:2428
-14805:0:4365
-14806:2:1271
-14807:2:1275
-14808:2:1276
-14809:2:1284
-14810:2:1285
-14811:2:1289
-14812:2:1290
-14813:2:1284
-14814:2:1285
-14815:2:1289
-14816:2:1290
-14817:2:1298
-14818:2:1303
-14819:2:1307
-14820:2:1308
-14821:2:1315
-14822:2:1316
-14823:2:1327
-14824:2:1328
-14825:2:1329
-14826:2:1327
-14827:2:1328
-14828:2:1329
-14829:2:1340
-14830:2:1345
-14831:2:1346
-14832:0:4365
-14833:2:1358
-14834:0:4365
-14835:2:1360
-14836:0:4365
-14837:3:2427
-14838:0:4365
-14839:2:1361
-14840:0:4365
-14841:3:2428
-14842:0:4365
-14843:2:1362
-14844:2:1366
-14845:2:1367
-14846:2:1375
-14847:2:1376
-14848:2:1380
-14849:2:1381
-14850:2:1375
-14851:2:1376
-14852:2:1380
-14853:2:1381
-14854:2:1389
-14855:2:1394
-14856:2:1398
-14857:2:1399
-14858:2:1406
-14859:2:1407
-14860:2:1418
-14861:2:1419
-14862:2:1420
-14863:2:1418
-14864:2:1419
-14865:2:1420
-14866:2:1431
-14867:2:1436
-14868:2:1437
-14869:0:4365
-14870:2:1449
-14871:0:4365
-14872:3:2427
-14873:0:4365
-14874:2:1451
-14875:0:4365
-14876:3:2428
-14877:0:4365
-14878:2:1652
-14879:0:4365
-14880:2:1653
-14881:0:4365
-14882:2:1657
-14883:0:4365
-14884:2:1180
-14885:0:4365
-14886:3:2427
-14887:0:4365
-14888:2:1181
-14889:2:1185
-14890:2:1186
-14891:2:1194
-14892:2:1195
-14893:2:1199
-14894:2:1200
-14895:2:1194
-14896:2:1195
-14897:2:1196
-14898:2:1208
-14899:2:1213
-14900:2:1217
-14901:2:1218
-14902:2:1225
-14903:2:1226
-14904:2:1237
-14905:2:1238
-14906:2:1239
-14907:2:1237
-14908:2:1238
-14909:2:1239
-14910:2:1250
-14911:2:1255
-14912:2:1256
-14913:0:4365
-14914:3:2428
-14915:0:4365
-14916:2:1268
-14917:0:4365
-14918:3:2427
-14919:0:4365
-14920:2:1270
-14921:0:4365
-14922:3:2428
-14923:0:4365
-14924:2:1271
-14925:2:1275
-14926:2:1276
-14927:2:1284
-14928:2:1285
-14929:2:1289
-14930:2:1290
-14931:2:1284
-14932:2:1285
-14933:2:1289
-14934:2:1290
-14935:2:1298
-14936:2:1303
-14937:2:1307
-14938:2:1308
-14939:2:1315
-14940:2:1316
-14941:2:1327
-14942:2:1328
-14943:2:1329
-14944:2:1327
-14945:2:1328
-14946:2:1329
-14947:2:1340
-14948:2:1345
-14949:2:1346
-14950:0:4365
-14951:2:1358
-14952:0:4365
-14953:2:1454
-14954:0:4365
-14955:3:2427
-14956:0:4365
-14957:2:1455
-14958:0:4365
-14959:3:2428
-14960:0:4365
-14961:2:1652
-14962:0:4365
-14963:2:1653
-14964:0:4365
-14965:2:1657
-14966:0:4365
-14967:2:1660
-14968:0:4365
-14969:3:2427
-14970:0:4365
-14971:2:1665
-14972:2:1669
-14973:2:1670
-14974:2:1678
-14975:2:1679
-14976:2:1683
-14977:2:1684
-14978:2:1678
-14979:2:1679
-14980:2:1680
-14981:2:1692
-14982:2:1697
-14983:2:1701
-14984:2:1702
-14985:2:1709
-14986:2:1710
-14987:2:1721
-14988:2:1722
-14989:2:1723
-14990:2:1721
-14991:2:1722
-14992:2:1723
-14993:2:1734
-14994:2:1739
-14995:2:1740
-14996:0:4365
-14997:3:2428
-14998:0:4365
-14999:2:1752
-15000:0:4365
-15001:3:2427
-15002:0:4365
-15003:2:1754
-15004:0:4365
-15005:3:2428
-15006:0:4365
-15007:2:1755
-15008:2:1759
-15009:2:1760
-15010:2:1768
-15011:2:1769
-15012:2:1773
-15013:2:1774
-15014:2:1768
-15015:2:1769
-15016:2:1773
-15017:2:1774
-15018:2:1782
-15019:2:1787
-15020:2:1791
-15021:2:1792
-15022:2:1799
-15023:2:1800
-15024:2:1811
-15025:2:1812
-15026:2:1813
-15027:2:1811
-15028:2:1812
-15029:2:1813
-15030:2:1824
-15031:2:1829
-15032:2:1830
-15033:0:4365
-15034:2:1842
-15035:0:4365
-15036:3:2427
-15037:0:4365
-15038:2:1844
-15039:0:4363
-15040:3:2428
-15041:0:4369
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.define b/formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.log b/formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 4cee7dc..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 72 byte, depth reached 10856, errors: 0
-   161519 states, stored
-  1724866 states, matched
-  1886385 transitions (= stored+matched)
-  6692565 atomic steps
-hash conflicts:     84009 (resolved)
-
-Stats on memory usage (in Megabytes):
-   15.404      equivalent memory usage for states (stored*(State-vector + overhead))
-   10.421      actual memory usage for states (compression: 67.65%)
-               state-vector as stored = 40 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  476.115      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 403, "pan.___", state 330, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 652, "pan.___", state 213, "(1)"
-       line 403, "pan.___", state 239, "(1)"
-       line 403, "pan.___", state 525, "(1)"
-       line 399, "pan.___", state 610, "(1)"
-       line 403, "pan.___", state 624, "(1)"
-       line 403, "pan.___", state 724, "(1)"
-       line 399, "pan.___", state 805, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 807, "(1)"
-       line 399, "pan.___", state 808, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 808, "else"
-       line 399, "pan.___", state 811, "(1)"
-       line 403, "pan.___", state 819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 821, "(1)"
-       line 403, "pan.___", state 822, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 822, "else"
-       line 403, "pan.___", state 825, "(1)"
-       line 403, "pan.___", state 826, "(1)"
-       line 403, "pan.___", state 826, "(1)"
-       line 401, "pan.___", state 831, "((j<1))"
-       line 401, "pan.___", state 831, "((j>=1))"
-       line 408, "pan.___", state 837, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 850, "(1)"
-       line 409, "pan.___", state 851, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 851, "else"
-       line 409, "pan.___", state 854, "(1)"
-       line 409, "pan.___", state 855, "(1)"
-       line 409, "pan.___", state 855, "(1)"
-       line 413, "pan.___", state 863, "(1)"
-       line 413, "pan.___", state 864, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 864, "else"
-       line 413, "pan.___", state 867, "(1)"
-       line 413, "pan.___", state 868, "(1)"
-       line 413, "pan.___", state 868, "(1)"
-       line 411, "pan.___", state 873, "((j<1))"
-       line 411, "pan.___", state 873, "((j>=1))"
-       line 418, "pan.___", state 880, "(1)"
-       line 418, "pan.___", state 881, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 881, "else"
-       line 418, "pan.___", state 884, "(1)"
-       line 418, "pan.___", state 885, "(1)"
-       line 418, "pan.___", state 885, "(1)"
-       line 399, "pan.___", state 896, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 898, "(1)"
-       line 399, "pan.___", state 899, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 899, "else"
-       line 399, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 910, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 912, "(1)"
-       line 403, "pan.___", state 913, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 913, "else"
-       line 403, "pan.___", state 916, "(1)"
-       line 403, "pan.___", state 917, "(1)"
-       line 403, "pan.___", state 917, "(1)"
-       line 401, "pan.___", state 922, "((j<1))"
-       line 401, "pan.___", state 922, "((j>=1))"
-       line 408, "pan.___", state 928, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 941, "(1)"
-       line 409, "pan.___", state 942, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 942, "else"
-       line 409, "pan.___", state 945, "(1)"
-       line 409, "pan.___", state 946, "(1)"
-       line 409, "pan.___", state 946, "(1)"
-       line 413, "pan.___", state 954, "(1)"
-       line 413, "pan.___", state 955, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 955, "else"
-       line 413, "pan.___", state 958, "(1)"
-       line 413, "pan.___", state 959, "(1)"
-       line 413, "pan.___", state 959, "(1)"
-       line 411, "pan.___", state 964, "((j<1))"
-       line 411, "pan.___", state 964, "((j>=1))"
-       line 418, "pan.___", state 971, "(1)"
-       line 418, "pan.___", state 972, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 972, "else"
-       line 418, "pan.___", state 975, "(1)"
-       line 418, "pan.___", state 976, "(1)"
-       line 418, "pan.___", state 976, "(1)"
-       line 194, "pan.___", state 981, "(1)"
-       line 194, "pan.___", state 981, "(1)"
-       line 214, "pan.___", state 985, "((i<1))"
-       line 214, "pan.___", state 985, "((i>=1))"
-       line 399, "pan.___", state 991, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 993, "(1)"
-       line 399, "pan.___", state 994, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 994, "else"
-       line 399, "pan.___", state 997, "(1)"
-       line 403, "pan.___", state 1005, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1007, "(1)"
-       line 403, "pan.___", state 1008, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1008, "else"
-       line 403, "pan.___", state 1011, "(1)"
-       line 403, "pan.___", state 1012, "(1)"
-       line 403, "pan.___", state 1012, "(1)"
-       line 401, "pan.___", state 1017, "((j<1))"
-       line 401, "pan.___", state 1017, "((j>=1))"
-       line 408, "pan.___", state 1023, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1036, "(1)"
-       line 409, "pan.___", state 1037, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1037, "else"
-       line 409, "pan.___", state 1040, "(1)"
-       line 409, "pan.___", state 1041, "(1)"
-       line 409, "pan.___", state 1041, "(1)"
-       line 413, "pan.___", state 1049, "(1)"
-       line 413, "pan.___", state 1050, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1050, "else"
-       line 413, "pan.___", state 1053, "(1)"
-       line 413, "pan.___", state 1054, "(1)"
-       line 413, "pan.___", state 1054, "(1)"
-       line 411, "pan.___", state 1059, "((j<1))"
-       line 411, "pan.___", state 1059, "((j>=1))"
-       line 418, "pan.___", state 1066, "(1)"
-       line 418, "pan.___", state 1067, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1067, "else"
-       line 418, "pan.___", state 1070, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 194, "pan.___", state 1076, "(1)"
-       line 194, "pan.___", state 1076, "(1)"
-       line 221, "pan.___", state 1077, "(1)"
-       line 221, "pan.___", state 1077, "(1)"
-       line 356, "pan.___", state 1083, "((sighand_exec==1))"
-       line 356, "pan.___", state 1083, "else"
-       line 362, "pan.___", state 1086, "sighand_exec = 1"
-       line 399, "pan.___", state 1099, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1101, "(1)"
-       line 399, "pan.___", state 1102, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1102, "else"
-       line 399, "pan.___", state 1105, "(1)"
-       line 403, "pan.___", state 1113, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1115, "(1)"
-       line 403, "pan.___", state 1116, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1116, "else"
-       line 403, "pan.___", state 1119, "(1)"
-       line 403, "pan.___", state 1120, "(1)"
-       line 403, "pan.___", state 1120, "(1)"
-       line 401, "pan.___", state 1125, "((i<1))"
-       line 401, "pan.___", state 1125, "((i>=1))"
-       line 408, "pan.___", state 1131, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1144, "(1)"
-       line 409, "pan.___", state 1145, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1145, "else"
-       line 409, "pan.___", state 1148, "(1)"
-       line 409, "pan.___", state 1149, "(1)"
-       line 409, "pan.___", state 1149, "(1)"
-       line 413, "pan.___", state 1157, "(1)"
-       line 413, "pan.___", state 1158, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1158, "else"
-       line 413, "pan.___", state 1161, "(1)"
-       line 413, "pan.___", state 1162, "(1)"
-       line 413, "pan.___", state 1162, "(1)"
-       line 411, "pan.___", state 1167, "((i<1))"
-       line 411, "pan.___", state 1167, "((i>=1))"
-       line 418, "pan.___", state 1174, "(1)"
-       line 418, "pan.___", state 1175, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1175, "else"
-       line 418, "pan.___", state 1178, "(1)"
-       line 418, "pan.___", state 1179, "(1)"
-       line 418, "pan.___", state 1179, "(1)"
-       line 420, "pan.___", state 1182, "(1)"
-       line 420, "pan.___", state 1182, "(1)"
-       line 362, "pan.___", state 1191, "sighand_exec = 1"
-       line 403, "pan.___", state 1222, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 399, "pan.___", state 1404, "(1)"
-       line 403, "pan.___", state 1418, "(1)"
-       line 403, "pan.___", state 1518, "(1)"
-       line 399, "pan.___", state 1599, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1601, "(1)"
-       line 399, "pan.___", state 1602, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1602, "else"
-       line 399, "pan.___", state 1605, "(1)"
-       line 403, "pan.___", state 1613, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1615, "(1)"
-       line 403, "pan.___", state 1616, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1616, "else"
-       line 403, "pan.___", state 1619, "(1)"
-       line 403, "pan.___", state 1620, "(1)"
-       line 403, "pan.___", state 1620, "(1)"
-       line 401, "pan.___", state 1625, "((j<1))"
-       line 401, "pan.___", state 1625, "((j>=1))"
-       line 408, "pan.___", state 1631, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1644, "(1)"
-       line 409, "pan.___", state 1645, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1645, "else"
-       line 409, "pan.___", state 1648, "(1)"
-       line 409, "pan.___", state 1649, "(1)"
-       line 409, "pan.___", state 1649, "(1)"
-       line 413, "pan.___", state 1657, "(1)"
-       line 413, "pan.___", state 1658, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1658, "else"
-       line 413, "pan.___", state 1661, "(1)"
-       line 413, "pan.___", state 1662, "(1)"
-       line 413, "pan.___", state 1662, "(1)"
-       line 411, "pan.___", state 1667, "((j<1))"
-       line 411, "pan.___", state 1667, "((j>=1))"
-       line 418, "pan.___", state 1674, "(1)"
-       line 418, "pan.___", state 1675, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1675, "else"
-       line 418, "pan.___", state 1678, "(1)"
-       line 418, "pan.___", state 1679, "(1)"
-       line 418, "pan.___", state 1679, "(1)"
-       line 399, "pan.___", state 1690, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1692, "(1)"
-       line 399, "pan.___", state 1693, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1693, "else"
-       line 399, "pan.___", state 1696, "(1)"
-       line 403, "pan.___", state 1704, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1706, "(1)"
-       line 403, "pan.___", state 1707, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1707, "else"
-       line 403, "pan.___", state 1710, "(1)"
-       line 403, "pan.___", state 1711, "(1)"
-       line 403, "pan.___", state 1711, "(1)"
-       line 401, "pan.___", state 1716, "((j<1))"
-       line 401, "pan.___", state 1716, "((j>=1))"
-       line 408, "pan.___", state 1722, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1735, "(1)"
-       line 409, "pan.___", state 1736, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1736, "else"
-       line 409, "pan.___", state 1739, "(1)"
-       line 409, "pan.___", state 1740, "(1)"
-       line 409, "pan.___", state 1740, "(1)"
-       line 413, "pan.___", state 1748, "(1)"
-       line 413, "pan.___", state 1749, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1749, "else"
-       line 413, "pan.___", state 1752, "(1)"
-       line 413, "pan.___", state 1753, "(1)"
-       line 413, "pan.___", state 1753, "(1)"
-       line 411, "pan.___", state 1758, "((j<1))"
-       line 411, "pan.___", state 1758, "((j>=1))"
-       line 418, "pan.___", state 1765, "(1)"
-       line 418, "pan.___", state 1766, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1766, "else"
-       line 418, "pan.___", state 1769, "(1)"
-       line 418, "pan.___", state 1770, "(1)"
-       line 418, "pan.___", state 1770, "(1)"
-       line 194, "pan.___", state 1775, "(1)"
-       line 194, "pan.___", state 1775, "(1)"
-       line 214, "pan.___", state 1779, "((i<1))"
-       line 214, "pan.___", state 1779, "((i>=1))"
-       line 399, "pan.___", state 1785, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1787, "(1)"
-       line 399, "pan.___", state 1788, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1788, "else"
-       line 399, "pan.___", state 1791, "(1)"
-       line 403, "pan.___", state 1799, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1801, "(1)"
-       line 403, "pan.___", state 1802, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1802, "else"
-       line 403, "pan.___", state 1805, "(1)"
-       line 403, "pan.___", state 1806, "(1)"
-       line 403, "pan.___", state 1806, "(1)"
-       line 401, "pan.___", state 1811, "((j<1))"
-       line 401, "pan.___", state 1811, "((j>=1))"
-       line 408, "pan.___", state 1817, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1830, "(1)"
-       line 409, "pan.___", state 1831, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1831, "else"
-       line 409, "pan.___", state 1834, "(1)"
-       line 409, "pan.___", state 1835, "(1)"
-       line 409, "pan.___", state 1835, "(1)"
-       line 413, "pan.___", state 1843, "(1)"
-       line 413, "pan.___", state 1844, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1844, "else"
-       line 413, "pan.___", state 1847, "(1)"
-       line 413, "pan.___", state 1848, "(1)"
-       line 413, "pan.___", state 1848, "(1)"
-       line 411, "pan.___", state 1853, "((j<1))"
-       line 411, "pan.___", state 1853, "((j>=1))"
-       line 418, "pan.___", state 1860, "(1)"
-       line 418, "pan.___", state 1861, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1861, "else"
-       line 418, "pan.___", state 1864, "(1)"
-       line 418, "pan.___", state 1865, "(1)"
-       line 418, "pan.___", state 1865, "(1)"
-       line 194, "pan.___", state 1870, "(1)"
-       line 194, "pan.___", state 1870, "(1)"
-       line 221, "pan.___", state 1871, "(1)"
-       line 221, "pan.___", state 1871, "(1)"
-       line 356, "pan.___", state 1877, "((sighand_exec==1))"
-       line 356, "pan.___", state 1877, "else"
-       line 362, "pan.___", state 1880, "sighand_exec = 1"
-       line 399, "pan.___", state 1893, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1895, "(1)"
-       line 399, "pan.___", state 1896, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1896, "else"
-       line 399, "pan.___", state 1899, "(1)"
-       line 403, "pan.___", state 1907, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1909, "(1)"
-       line 403, "pan.___", state 1910, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1910, "else"
-       line 403, "pan.___", state 1913, "(1)"
-       line 403, "pan.___", state 1914, "(1)"
-       line 403, "pan.___", state 1914, "(1)"
-       line 401, "pan.___", state 1919, "((i<1))"
-       line 401, "pan.___", state 1919, "((i>=1))"
-       line 408, "pan.___", state 1925, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1938, "(1)"
-       line 409, "pan.___", state 1939, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1939, "else"
-       line 409, "pan.___", state 1942, "(1)"
-       line 409, "pan.___", state 1943, "(1)"
-       line 409, "pan.___", state 1943, "(1)"
-       line 413, "pan.___", state 1951, "(1)"
-       line 413, "pan.___", state 1952, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1952, "else"
-       line 413, "pan.___", state 1955, "(1)"
-       line 413, "pan.___", state 1956, "(1)"
-       line 413, "pan.___", state 1956, "(1)"
-       line 411, "pan.___", state 1961, "((i<1))"
-       line 411, "pan.___", state 1961, "((i>=1))"
-       line 418, "pan.___", state 1968, "(1)"
-       line 418, "pan.___", state 1969, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1969, "else"
-       line 418, "pan.___", state 1972, "(1)"
-       line 418, "pan.___", state 1973, "(1)"
-       line 418, "pan.___", state 1973, "(1)"
-       line 420, "pan.___", state 1976, "(1)"
-       line 420, "pan.___", state 1976, "(1)"
-       line 362, "pan.___", state 1985, "sighand_exec = 1"
-       line 403, "pan.___", state 2016, "(1)"
-       line 702, "pan.___", state 2304, "-end-"
-       (221 of 2304 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 748, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.47 seconds
-pan: rate 109876.87 states/second
-pan: avg transition delay 7.7927e-07 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.spin.input b/formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 48411ec..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.spin.input.trail b/formal-model/urcu/result-signal-over-writer/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 00fba51..0000000
+++ /dev/null
@@ -1,2172 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4249
-2:4:4201
-3:4:4204
-4:4:4204
-5:4:4207
-6:4:4215
-7:4:4215
-8:4:4218
-9:4:4224
-10:4:4228
-11:4:4228
-12:4:4231
-13:4:4239
-14:4:4243
-15:4:4244
-16:0:4249
-17:4:4246
-18:0:4249
-19:3:1991
-20:0:4249
-21:3:1997
-22:0:4249
-23:3:1998
-24:0:4249
-25:3:1999
-26:3:2003
-27:3:2004
-28:3:2012
-29:3:2013
-30:3:2017
-31:3:2018
-32:3:2026
-33:3:2031
-34:3:2035
-35:3:2036
-36:3:2043
-37:3:2044
-38:3:2055
-39:3:2056
-40:3:2057
-41:3:2068
-42:3:2073
-43:3:2074
-44:0:4249
-45:3:2086
-46:0:4249
-47:3:2088
-48:3:2089
-49:0:4249
-50:3:2093
-51:3:2097
-52:3:2098
-53:3:2106
-54:3:2107
-55:3:2111
-56:3:2112
-57:3:2120
-58:3:2125
-59:3:2126
-60:3:2137
-61:3:2138
-62:3:2149
-63:3:2150
-64:3:2151
-65:3:2162
-66:3:2167
-67:3:2168
-68:0:4249
-69:3:2180
-70:0:4249
-71:3:2182
-72:0:4249
-73:3:2183
-74:0:4249
-75:3:2193
-76:0:4249
-77:3:2194
-78:0:4249
-79:3:2195
-80:3:2199
-81:3:2200
-82:3:2208
-83:3:2209
-84:3:2213
-85:3:2214
-86:3:2222
-87:3:2227
-88:3:2231
-89:3:2232
-90:3:2239
-91:3:2240
-92:3:2251
-93:3:2252
-94:3:2253
-95:3:2264
-96:3:2269
-97:3:2270
-98:0:4249
-99:3:2285
-100:0:4249
-101:3:2286
-102:3:2290
-103:3:2291
-104:3:2299
-105:3:2300
-106:3:2304
-107:3:2305
-108:3:2313
-109:3:2318
-110:3:2322
-111:3:2323
-112:3:2330
-113:3:2331
-114:3:2342
-115:3:2343
-116:3:2344
-117:3:2355
-118:3:2360
-119:3:2361
-120:0:4249
-121:3:2376
-122:0:4249
-123:3:2381
-124:3:2385
-125:3:2386
-126:3:2394
-127:3:2395
-128:3:2399
-129:3:2400
-130:3:2408
-131:3:2413
-132:3:2417
-133:3:2418
-134:3:2425
-135:3:2426
-136:3:2437
-137:3:2438
-138:3:2439
-139:3:2450
-140:3:2455
-141:3:2456
-142:0:4249
-143:3:2475
-144:0:4249
-145:3:2477
-146:0:4249
-147:3:2478
-148:3:2482
-149:3:2483
-150:3:2491
-151:3:2492
-152:3:2496
-153:3:2497
-154:3:2505
-155:3:2510
-156:3:2514
-157:3:2515
-158:3:2522
-159:3:2523
-160:3:2534
-161:3:2535
-162:3:2536
-163:3:2547
-164:3:2552
-165:3:2553
-166:0:4249
-167:3:2565
-168:0:4249
-169:3:2567
-170:0:4249
-171:3:2570
-172:3:2571
-173:3:2583
-174:3:2584
-175:3:2588
-176:3:2589
-177:3:2597
-178:3:2602
-179:3:2606
-180:3:2607
-181:3:2614
-182:3:2615
-183:3:2626
-184:3:2627
-185:3:2628
-186:3:2639
-187:3:2644
-188:3:2645
-189:0:4249
-190:3:2657
-191:0:4249
-192:3:2659
-193:0:4249
-194:3:2660
-195:0:4249
-196:3:2661
-197:0:4249
-198:3:2662
-199:0:4249
-200:3:2663
-201:3:2667
-202:3:2668
-203:3:2676
-204:3:2677
-205:3:2681
-206:3:2682
-207:3:2690
-208:3:2695
-209:3:2699
-210:3:2700
-211:3:2707
-212:3:2708
-213:3:2719
-214:3:2720
-215:3:2721
-216:3:2732
-217:3:2737
-218:3:2738
-219:0:4249
-220:3:2750
-221:0:4249
-222:3:3036
-223:0:4249
-224:3:3134
-225:0:4249
-226:3:3135
-227:0:4249
-228:3:3139
-229:0:4249
-230:3:3145
-231:3:3149
-232:3:3150
-233:3:3158
-234:3:3159
-235:3:3163
-236:3:3164
-237:3:3172
-238:3:3177
-239:3:3181
-240:3:3182
-241:3:3189
-242:3:3190
-243:3:3201
-244:3:3202
-245:3:3203
-246:3:3214
-247:3:3219
-248:3:3220
-249:0:4249
-250:3:3232
-251:0:4249
-252:3:3234
-253:0:4249
-254:3:3235
-255:3:3239
-256:3:3240
-257:3:3248
-258:3:3249
-259:3:3253
-260:3:3254
-261:3:3262
-262:3:3267
-263:3:3271
-264:3:3272
-265:3:3279
-266:3:3280
-267:3:3291
-268:3:3292
-269:3:3293
-270:3:3304
-271:3:3309
-272:3:3310
-273:0:4249
-274:3:3322
-275:0:4249
-276:3:3324
-277:0:4249
-278:3:3327
-279:3:3328
-280:3:3340
-281:3:3341
-282:3:3345
-283:3:3346
-284:3:3354
-285:3:3359
-286:3:3363
-287:3:3364
-288:3:3371
-289:3:3372
-290:3:3383
-291:3:3384
-292:3:3385
-293:3:3396
-294:3:3401
-295:3:3402
-296:0:4249
-297:3:3414
-298:0:4249
-299:3:3416
-300:0:4249
-301:3:3417
-302:0:4249
-303:3:3418
-304:0:4249
-305:3:3419
-306:0:4249
-307:3:3420
-308:3:3424
-309:3:3425
-310:3:3433
-311:3:3434
-312:3:3438
-313:3:3439
-314:3:3447
-315:3:3452
-316:3:3456
-317:3:3457
-318:3:3464
-319:3:3465
-320:3:3476
-321:3:3477
-322:3:3478
-323:3:3489
-324:3:3494
-325:3:3495
-326:0:4249
-327:3:3507
-328:0:4249
-329:3:3793
-330:0:4249
-331:3:3891
-332:0:4249
-333:3:3892
-334:0:4249
-335:3:3896
-336:0:4249
-337:3:3902
-338:0:4249
-339:3:3903
-340:3:3907
-341:3:3908
-342:3:3916
-343:3:3917
-344:3:3921
-345:3:3922
-346:3:3930
-347:3:3935
-348:3:3939
-349:3:3940
-350:3:3947
-351:3:3948
-352:3:3959
-353:3:3960
-354:3:3961
-355:3:3972
-356:3:3977
-357:3:3978
-358:0:4249
-359:3:3993
-360:0:4249
-361:3:3994
-362:3:3998
-363:3:3999
-364:3:4007
-365:3:4008
-366:3:4012
-367:3:4013
-368:3:4021
-369:3:4026
-370:3:4030
-371:3:4031
-372:3:4038
-373:3:4039
-374:3:4050
-375:3:4051
-376:3:4052
-377:3:4063
-378:3:4068
-379:3:4069
-380:0:4249
-381:3:4084
-382:0:4249
-383:3:4089
-384:3:4093
-385:3:4094
-386:3:4102
-387:3:4103
-388:3:4107
-389:3:4108
-390:3:4116
-391:3:4121
-392:3:4125
-393:3:4126
-394:3:4133
-395:3:4134
-396:3:4145
-397:3:4146
-398:3:4147
-399:3:4158
-400:3:4163
-401:3:4164
-402:0:4249
-403:3:4183
-404:0:4249
-405:3:4185
-406:0:4249
-407:3:4186
-408:0:4249
-409:3:1998
-410:0:4249
-411:3:1999
-412:3:2003
-413:3:2004
-414:3:2012
-415:3:2013
-416:3:2017
-417:3:2018
-418:3:2026
-419:3:2031
-420:3:2035
-421:3:2036
-422:3:2043
-423:3:2044
-424:3:2055
-425:3:2056
-426:3:2057
-427:3:2068
-428:3:2073
-429:3:2074
-430:0:4249
-431:3:2086
-432:0:4249
-433:3:2088
-434:3:2089
-435:0:4249
-436:3:2093
-437:3:2097
-438:3:2098
-439:3:2106
-440:3:2107
-441:3:2111
-442:3:2112
-443:3:2120
-444:3:2125
-445:3:2126
-446:3:2137
-447:3:2138
-448:3:2149
-449:3:2150
-450:3:2151
-451:3:2162
-452:3:2167
-453:3:2168
-454:0:4249
-455:3:2180
-456:0:4249
-457:3:2182
-458:0:4249
-459:3:2183
-460:0:4249
-461:3:2193
-462:0:4249
-463:3:2194
-464:0:4249
-465:3:2195
-466:3:2199
-467:3:2200
-468:3:2208
-469:3:2209
-470:3:2213
-471:3:2214
-472:3:2222
-473:3:2227
-474:3:2231
-475:3:2232
-476:3:2239
-477:3:2240
-478:3:2251
-479:3:2252
-480:3:2253
-481:3:2264
-482:3:2269
-483:3:2270
-484:0:4249
-485:3:2285
-486:0:4249
-487:3:2286
-488:3:2290
-489:3:2291
-490:3:2299
-491:3:2300
-492:3:2304
-493:3:2305
-494:3:2313
-495:3:2318
-496:3:2322
-497:3:2323
-498:3:2330
-499:3:2331
-500:3:2342
-501:3:2343
-502:3:2344
-503:3:2355
-504:3:2360
-505:3:2361
-506:0:4249
-507:3:2376
-508:0:4249
-509:3:2381
-510:3:2385
-511:3:2386
-512:3:2394
-513:3:2395
-514:3:2399
-515:3:2400
-516:3:2408
-517:3:2413
-518:3:2417
-519:3:2418
-520:3:2425
-521:3:2426
-522:3:2437
-523:3:2438
-524:3:2439
-525:3:2450
-526:3:2455
-527:3:2456
-528:0:4249
-529:3:2475
-530:0:4249
-531:3:2477
-532:0:4249
-533:3:2478
-534:3:2482
-535:3:2483
-536:3:2491
-537:3:2492
-538:3:2496
-539:3:2497
-540:3:2505
-541:3:2510
-542:3:2514
-543:3:2515
-544:3:2522
-545:3:2523
-546:3:2534
-547:3:2535
-548:3:2536
-549:3:2547
-550:3:2552
-551:3:2553
-552:0:4249
-553:3:2565
-554:0:4249
-555:3:2567
-556:0:4249
-557:3:2570
-558:3:2571
-559:3:2583
-560:3:2584
-561:3:2588
-562:3:2589
-563:3:2597
-564:3:2602
-565:3:2606
-566:3:2607
-567:3:2614
-568:3:2615
-569:3:2626
-570:3:2627
-571:3:2628
-572:3:2639
-573:3:2644
-574:3:2645
-575:0:4249
-576:3:2657
-577:0:4249
-578:3:2659
-579:0:4249
-580:3:2660
-581:0:4249
-582:3:2661
-583:0:4249
-584:3:2662
-585:0:4249
-586:3:2663
-587:3:2667
-588:3:2668
-589:3:2676
-590:3:2677
-591:3:2681
-592:3:2682
-593:3:2690
-594:3:2695
-595:3:2699
-596:3:2700
-597:3:2707
-598:3:2708
-599:3:2719
-600:3:2720
-601:3:2721
-602:3:2732
-603:3:2737
-604:3:2738
-605:0:4249
-606:3:2750
-607:0:4249
-608:3:3036
-609:0:4249
-610:3:3134
-611:0:4249
-612:3:3135
-613:0:4249
-614:3:3139
-615:0:4249
-616:3:3145
-617:3:3149
-618:3:3150
-619:3:3158
-620:3:3159
-621:3:3163
-622:3:3164
-623:3:3172
-624:3:3177
-625:3:3181
-626:3:3182
-627:3:3189
-628:3:3190
-629:3:3201
-630:3:3202
-631:3:3203
-632:3:3214
-633:3:3219
-634:3:3220
-635:0:4249
-636:3:3232
-637:0:4249
-638:3:3234
-639:0:4249
-640:3:3235
-641:3:3239
-642:3:3240
-643:3:3248
-644:3:3249
-645:3:3253
-646:3:3254
-647:3:3262
-648:3:3267
-649:3:3271
-650:3:3272
-651:3:3279
-652:3:3280
-653:3:3291
-654:3:3292
-655:3:3293
-656:3:3304
-657:3:3309
-658:3:3310
-659:0:4249
-660:3:3322
-661:0:4249
-662:3:3324
-663:0:4249
-664:3:3327
-665:3:3328
-666:3:3340
-667:3:3341
-668:3:3345
-669:3:3346
-670:3:3354
-671:3:3359
-672:3:3363
-673:3:3364
-674:3:3371
-675:3:3372
-676:3:3383
-677:3:3384
-678:3:3385
-679:3:3396
-680:3:3401
-681:3:3402
-682:0:4249
-683:3:3414
-684:0:4249
-685:3:3416
-686:0:4249
-687:3:3417
-688:0:4249
-689:3:3418
-690:0:4249
-691:3:3419
-692:0:4249
-693:3:3420
-694:3:3424
-695:3:3425
-696:3:3433
-697:3:3434
-698:3:3438
-699:3:3439
-700:3:3447
-701:3:3452
-702:3:3456
-703:3:3457
-704:3:3464
-705:3:3465
-706:3:3476
-707:3:3477
-708:3:3478
-709:3:3489
-710:3:3494
-711:3:3495
-712:0:4249
-713:3:3507
-714:0:4249
-715:3:3793
-716:0:4249
-717:3:3891
-718:0:4249
-719:3:3892
-720:0:4249
-721:3:3896
-722:0:4249
-723:3:3902
-724:0:4249
-725:3:3903
-726:3:3907
-727:3:3908
-728:3:3916
-729:3:3917
-730:3:3921
-731:3:3922
-732:3:3930
-733:3:3935
-734:3:3939
-735:3:3940
-736:3:3947
-737:3:3948
-738:3:3959
-739:3:3960
-740:3:3961
-741:3:3972
-742:3:3977
-743:3:3978
-744:0:4249
-745:3:3993
-746:0:4249
-747:3:3994
-748:3:3998
-749:3:3999
-750:3:4007
-751:3:4008
-752:3:4012
-753:3:4013
-754:3:4021
-755:3:4026
-756:3:4030
-757:3:4031
-758:3:4038
-759:3:4039
-760:3:4050
-761:3:4051
-762:3:4052
-763:3:4063
-764:3:4068
-765:3:4069
-766:0:4249
-767:3:4084
-768:0:4249
-769:3:4089
-770:3:4093
-771:3:4094
-772:3:4102
-773:3:4103
-774:3:4107
-775:3:4108
-776:3:4116
-777:3:4121
-778:3:4125
-779:3:4126
-780:3:4133
-781:3:4134
-782:3:4145
-783:3:4146
-784:3:4147
-785:3:4158
-786:3:4163
-787:3:4164
-788:0:4249
-789:3:4183
-790:0:4249
-791:3:4185
-792:0:4249
-793:3:4186
-794:0:4249
-795:3:1998
-796:0:4249
-797:3:1999
-798:3:2003
-799:3:2004
-800:3:2012
-801:3:2013
-802:3:2017
-803:3:2018
-804:3:2026
-805:3:2031
-806:3:2035
-807:3:2036
-808:3:2043
-809:3:2044
-810:3:2055
-811:3:2056
-812:3:2057
-813:3:2068
-814:3:2073
-815:3:2074
-816:0:4249
-817:3:2086
-818:0:4249
-819:3:2088
-820:3:2089
-821:0:4249
-822:3:2093
-823:3:2097
-824:3:2098
-825:3:2106
-826:3:2107
-827:3:2111
-828:3:2112
-829:3:2120
-830:3:2125
-831:3:2126
-832:3:2137
-833:3:2138
-834:3:2149
-835:3:2150
-836:3:2151
-837:3:2162
-838:3:2167
-839:3:2168
-840:0:4249
-841:3:2180
-842:0:4249
-843:3:2182
-844:0:4249
-845:3:2183
-846:0:4249
-847:3:2193
-848:0:4249
-849:3:2194
-850:0:4249
-851:3:2195
-852:3:2199
-853:3:2200
-854:3:2208
-855:3:2209
-856:3:2213
-857:3:2214
-858:3:2222
-859:3:2227
-860:3:2231
-861:3:2232
-862:3:2239
-863:3:2240
-864:3:2251
-865:3:2252
-866:3:2253
-867:3:2264
-868:3:2269
-869:3:2270
-870:0:4249
-871:3:2285
-872:0:4249
-873:3:2286
-874:3:2290
-875:3:2291
-876:3:2299
-877:3:2300
-878:3:2304
-879:3:2305
-880:3:2313
-881:3:2318
-882:3:2322
-883:3:2323
-884:3:2330
-885:3:2331
-886:3:2342
-887:3:2343
-888:3:2344
-889:3:2355
-890:3:2360
-891:3:2361
-892:0:4249
-893:3:2376
-894:0:4249
-895:3:2381
-896:3:2385
-897:3:2386
-898:3:2394
-899:3:2395
-900:3:2399
-901:3:2400
-902:3:2408
-903:3:2413
-904:3:2417
-905:3:2418
-906:3:2425
-907:3:2426
-908:3:2437
-909:3:2438
-910:3:2439
-911:3:2450
-912:3:2455
-913:3:2456
-914:0:4249
-915:3:2475
-916:0:4249
-917:3:2477
-918:0:4249
-919:3:2478
-920:3:2482
-921:3:2483
-922:3:2491
-923:3:2492
-924:3:2496
-925:3:2497
-926:3:2505
-927:3:2510
-928:3:2514
-929:3:2515
-930:3:2522
-931:3:2523
-932:3:2534
-933:3:2535
-934:3:2536
-935:3:2547
-936:3:2552
-937:3:2553
-938:0:4249
-939:3:2565
-940:0:4249
-941:3:2567
-942:0:4249
-943:3:2570
-944:3:2571
-945:3:2583
-946:3:2584
-947:3:2588
-948:3:2589
-949:3:2597
-950:3:2602
-951:3:2606
-952:3:2607
-953:3:2614
-954:3:2615
-955:3:2626
-956:3:2627
-957:3:2628
-958:3:2639
-959:3:2644
-960:3:2645
-961:0:4249
-962:3:2657
-963:0:4249
-964:3:2659
-965:0:4249
-966:3:2660
-967:0:4249
-968:3:2661
-969:0:4249
-970:3:2662
-971:0:4249
-972:3:2663
-973:3:2667
-974:3:2668
-975:3:2676
-976:3:2677
-977:3:2681
-978:3:2682
-979:3:2690
-980:3:2695
-981:3:2699
-982:3:2700
-983:3:2707
-984:3:2708
-985:3:2719
-986:3:2720
-987:3:2721
-988:3:2732
-989:3:2737
-990:3:2738
-991:0:4249
-992:3:2750
-993:0:4249
-994:3:3036
-995:0:4249
-996:3:3134
-997:0:4249
-998:3:3135
-999:0:4249
-1000:3:3139
-1001:0:4249
-1002:3:3145
-1003:3:3149
-1004:3:3150
-1005:3:3158
-1006:3:3159
-1007:3:3163
-1008:3:3164
-1009:3:3172
-1010:3:3177
-1011:3:3181
-1012:3:3182
-1013:3:3189
-1014:3:3190
-1015:3:3201
-1016:3:3202
-1017:3:3203
-1018:3:3214
-1019:3:3219
-1020:3:3220
-1021:0:4249
-1022:3:3232
-1023:0:4249
-1024:3:3234
-1025:0:4249
-1026:3:3235
-1027:3:3239
-1028:3:3240
-1029:3:3248
-1030:3:3249
-1031:3:3253
-1032:3:3254
-1033:3:3262
-1034:3:3267
-1035:3:3271
-1036:3:3272
-1037:3:3279
-1038:3:3280
-1039:3:3291
-1040:3:3292
-1041:3:3293
-1042:3:3304
-1043:3:3309
-1044:3:3310
-1045:0:4249
-1046:3:3322
-1047:0:4249
-1048:3:3324
-1049:0:4249
-1050:3:3327
-1051:3:3328
-1052:3:3340
-1053:3:3341
-1054:3:3345
-1055:3:3346
-1056:3:3354
-1057:3:3359
-1058:3:3363
-1059:3:3364
-1060:3:3371
-1061:3:3372
-1062:3:3383
-1063:3:3384
-1064:3:3385
-1065:3:3396
-1066:3:3401
-1067:3:3402
-1068:0:4249
-1069:3:3414
-1070:0:4249
-1071:3:3416
-1072:0:4249
-1073:3:3417
-1074:0:4249
-1075:3:3418
-1076:0:4249
-1077:3:3419
-1078:0:4249
-1079:3:3420
-1080:3:3424
-1081:3:3425
-1082:3:3433
-1083:3:3434
-1084:3:3438
-1085:3:3439
-1086:3:3447
-1087:3:3452
-1088:3:3456
-1089:3:3457
-1090:3:3464
-1091:3:3465
-1092:3:3476
-1093:3:3477
-1094:3:3478
-1095:3:3489
-1096:3:3494
-1097:3:3495
-1098:0:4249
-1099:3:3507
-1100:0:4249
-1101:3:3793
-1102:0:4249
-1103:3:3891
-1104:0:4249
-1105:3:3892
-1106:0:4249
-1107:3:3896
-1108:0:4249
-1109:3:3902
-1110:0:4249
-1111:3:3903
-1112:3:3907
-1113:3:3908
-1114:3:3916
-1115:3:3917
-1116:3:3921
-1117:3:3922
-1118:3:3930
-1119:3:3935
-1120:3:3939
-1121:3:3940
-1122:3:3947
-1123:3:3948
-1124:3:3959
-1125:3:3960
-1126:3:3961
-1127:3:3972
-1128:3:3977
-1129:3:3978
-1130:0:4249
-1131:3:3993
-1132:0:4249
-1133:3:3994
-1134:3:3998
-1135:3:3999
-1136:3:4007
-1137:3:4008
-1138:3:4012
-1139:3:4013
-1140:3:4021
-1141:3:4026
-1142:3:4030
-1143:3:4031
-1144:3:4038
-1145:3:4039
-1146:3:4050
-1147:3:4051
-1148:3:4052
-1149:3:4063
-1150:3:4068
-1151:3:4069
-1152:0:4249
-1153:3:4084
-1154:0:4249
-1155:3:4089
-1156:3:4093
-1157:3:4094
-1158:3:4102
-1159:3:4103
-1160:3:4107
-1161:3:4108
-1162:3:4116
-1163:3:4121
-1164:3:4125
-1165:3:4126
-1166:3:4133
-1167:3:4134
-1168:3:4145
-1169:3:4146
-1170:3:4147
-1171:3:4158
-1172:3:4163
-1173:3:4164
-1174:0:4249
-1175:3:4183
-1176:0:4249
-1177:3:4185
-1178:0:4249
-1179:3:4186
-1180:0:4249
-1181:3:1998
-1182:0:4249
-1183:3:1999
-1184:3:2003
-1185:3:2004
-1186:3:2012
-1187:3:2013
-1188:3:2017
-1189:3:2018
-1190:3:2026
-1191:3:2031
-1192:3:2035
-1193:3:2036
-1194:3:2043
-1195:3:2044
-1196:3:2055
-1197:3:2056
-1198:3:2057
-1199:3:2068
-1200:3:2073
-1201:3:2074
-1202:0:4249
-1203:3:2086
-1204:0:4249
-1205:3:2088
-1206:3:2089
-1207:0:4249
-1208:3:2093
-1209:3:2097
-1210:3:2098
-1211:3:2106
-1212:3:2107
-1213:3:2111
-1214:3:2112
-1215:3:2120
-1216:3:2125
-1217:3:2126
-1218:3:2137
-1219:3:2138
-1220:3:2149
-1221:3:2150
-1222:3:2151
-1223:3:2162
-1224:3:2167
-1225:3:2168
-1226:0:4249
-1227:3:2180
-1228:0:4249
-1229:3:2182
-1230:0:4249
-1231:3:2183
-1232:0:4249
-1233:3:2193
-1234:0:4249
-1235:3:2194
-1236:0:4249
-1237:3:2195
-1238:3:2199
-1239:3:2200
-1240:3:2208
-1241:3:2209
-1242:3:2213
-1243:3:2214
-1244:3:2222
-1245:3:2227
-1246:3:2231
-1247:3:2232
-1248:3:2239
-1249:3:2240
-1250:3:2251
-1251:3:2252
-1252:3:2253
-1253:3:2264
-1254:3:2269
-1255:3:2270
-1256:0:4249
-1257:3:2285
-1258:0:4249
-1259:3:2286
-1260:3:2290
-1261:3:2291
-1262:3:2299
-1263:3:2300
-1264:3:2304
-1265:3:2305
-1266:3:2313
-1267:3:2318
-1268:3:2322
-1269:3:2323
-1270:3:2330
-1271:3:2331
-1272:3:2342
-1273:3:2343
-1274:3:2344
-1275:3:2355
-1276:3:2360
-1277:3:2361
-1278:0:4249
-1279:3:2376
-1280:0:4249
-1281:3:2381
-1282:3:2385
-1283:3:2386
-1284:3:2394
-1285:3:2395
-1286:3:2399
-1287:3:2400
-1288:3:2408
-1289:3:2413
-1290:3:2417
-1291:3:2418
-1292:3:2425
-1293:3:2426
-1294:3:2437
-1295:3:2438
-1296:3:2439
-1297:3:2450
-1298:3:2455
-1299:3:2456
-1300:0:4249
-1301:3:2475
-1302:0:4249
-1303:3:2477
-1304:0:4249
-1305:3:2478
-1306:3:2482
-1307:3:2483
-1308:3:2491
-1309:3:2492
-1310:3:2496
-1311:3:2497
-1312:3:2505
-1313:3:2510
-1314:3:2514
-1315:3:2515
-1316:3:2522
-1317:3:2523
-1318:3:2534
-1319:3:2535
-1320:3:2536
-1321:3:2547
-1322:3:2552
-1323:3:2553
-1324:0:4249
-1325:3:2565
-1326:0:4249
-1327:3:2567
-1328:0:4249
-1329:3:2570
-1330:3:2571
-1331:3:2583
-1332:3:2584
-1333:3:2588
-1334:3:2589
-1335:3:2597
-1336:3:2602
-1337:3:2606
-1338:3:2607
-1339:3:2614
-1340:3:2615
-1341:3:2626
-1342:3:2627
-1343:3:2628
-1344:3:2639
-1345:3:2644
-1346:3:2645
-1347:0:4249
-1348:3:2657
-1349:0:4249
-1350:3:2659
-1351:0:4249
-1352:3:2660
-1353:0:4249
-1354:3:2661
-1355:0:4249
-1356:3:2662
-1357:0:4249
-1358:3:2663
-1359:3:2667
-1360:3:2668
-1361:3:2676
-1362:3:2677
-1363:3:2681
-1364:3:2682
-1365:3:2690
-1366:3:2695
-1367:3:2699
-1368:3:2700
-1369:3:2707
-1370:3:2708
-1371:3:2719
-1372:3:2720
-1373:3:2721
-1374:3:2732
-1375:3:2737
-1376:3:2738
-1377:0:4249
-1378:3:2750
-1379:0:4249
-1380:3:3036
-1381:0:4249
-1382:3:3134
-1383:0:4249
-1384:3:3135
-1385:0:4249
-1386:3:3139
-1387:0:4249
-1388:3:3145
-1389:3:3149
-1390:3:3150
-1391:3:3158
-1392:3:3159
-1393:3:3163
-1394:3:3164
-1395:3:3172
-1396:3:3177
-1397:3:3181
-1398:3:3182
-1399:3:3189
-1400:3:3190
-1401:3:3201
-1402:3:3202
-1403:3:3203
-1404:3:3214
-1405:3:3219
-1406:3:3220
-1407:0:4249
-1408:3:3232
-1409:0:4249
-1410:3:3234
-1411:0:4249
-1412:3:3235
-1413:3:3239
-1414:3:3240
-1415:3:3248
-1416:3:3249
-1417:3:3253
-1418:3:3254
-1419:3:3262
-1420:3:3267
-1421:3:3271
-1422:3:3272
-1423:3:3279
-1424:3:3280
-1425:3:3291
-1426:3:3292
-1427:3:3293
-1428:3:3304
-1429:3:3309
-1430:3:3310
-1431:0:4249
-1432:3:3322
-1433:0:4249
-1434:3:3324
-1435:0:4249
-1436:3:3327
-1437:3:3328
-1438:3:3340
-1439:3:3341
-1440:3:3345
-1441:3:3346
-1442:3:3354
-1443:3:3359
-1444:3:3363
-1445:3:3364
-1446:3:3371
-1447:3:3372
-1448:3:3383
-1449:3:3384
-1450:3:3385
-1451:3:3396
-1452:3:3401
-1453:3:3402
-1454:0:4249
-1455:3:3414
-1456:0:4249
-1457:3:3416
-1458:0:4249
-1459:3:3417
-1460:0:4249
-1461:3:3418
-1462:0:4249
-1463:3:3419
-1464:0:4249
-1465:3:3420
-1466:3:3424
-1467:3:3425
-1468:3:3433
-1469:3:3434
-1470:3:3438
-1471:3:3439
-1472:3:3447
-1473:3:3452
-1474:3:3456
-1475:3:3457
-1476:3:3464
-1477:3:3465
-1478:3:3476
-1479:3:3477
-1480:3:3478
-1481:3:3489
-1482:3:3494
-1483:3:3495
-1484:0:4249
-1485:3:3507
-1486:0:4249
-1487:3:3793
-1488:0:4249
-1489:3:3891
-1490:0:4249
-1491:3:3892
-1492:0:4249
-1493:3:3896
-1494:0:4249
-1495:3:3902
-1496:0:4249
-1497:3:3903
-1498:3:3907
-1499:3:3908
-1500:3:3916
-1501:3:3917
-1502:3:3921
-1503:3:3922
-1504:3:3930
-1505:3:3935
-1506:3:3939
-1507:3:3940
-1508:3:3947
-1509:3:3948
-1510:3:3959
-1511:3:3960
-1512:3:3961
-1513:3:3972
-1514:3:3977
-1515:3:3978
-1516:0:4249
-1517:3:3993
-1518:0:4249
-1519:3:3994
-1520:3:3998
-1521:3:3999
-1522:3:4007
-1523:3:4008
-1524:3:4012
-1525:3:4013
-1526:3:4021
-1527:3:4026
-1528:3:4030
-1529:3:4031
-1530:3:4038
-1531:3:4039
-1532:3:4050
-1533:3:4051
-1534:3:4052
-1535:3:4063
-1536:3:4068
-1537:3:4069
-1538:0:4249
-1539:3:4084
-1540:0:4249
-1541:3:4089
-1542:3:4093
-1543:3:4094
-1544:3:4102
-1545:3:4103
-1546:3:4107
-1547:3:4108
-1548:3:4116
-1549:3:4121
-1550:3:4125
-1551:3:4126
-1552:3:4133
-1553:3:4134
-1554:3:4145
-1555:3:4146
-1556:3:4147
-1557:3:4158
-1558:3:4163
-1559:3:4164
-1560:0:4249
-1561:3:4183
-1562:0:4249
-1563:3:4185
-1564:0:4249
-1565:3:4186
-1566:0:4249
-1567:3:1998
-1568:0:4249
-1569:3:1999
-1570:3:2003
-1571:3:2004
-1572:3:2012
-1573:3:2013
-1574:3:2017
-1575:3:2018
-1576:3:2026
-1577:3:2031
-1578:3:2035
-1579:3:2036
-1580:3:2043
-1581:3:2044
-1582:3:2055
-1583:3:2056
-1584:3:2057
-1585:3:2068
-1586:3:2073
-1587:3:2074
-1588:0:4249
-1589:3:2086
-1590:0:4249
-1591:3:2088
-1592:3:2089
-1593:0:4249
-1594:3:2093
-1595:3:2097
-1596:3:2098
-1597:3:2106
-1598:3:2107
-1599:3:2111
-1600:3:2112
-1601:3:2120
-1602:3:2133
-1603:3:2134
-1604:3:2137
-1605:3:2138
-1606:3:2149
-1607:3:2150
-1608:3:2151
-1609:3:2162
-1610:3:2167
-1611:3:2170
-1612:3:2171
-1613:0:4249
-1614:3:2180
-1615:0:4249
-1616:3:2182
-1617:0:4249
-1618:3:2183
-1619:0:4249
-1620:3:2193
-1621:0:4249
-1622:3:2194
-1623:0:4249
-1624:3:2195
-1625:3:2199
-1626:3:2200
-1627:3:2208
-1628:3:2209
-1629:3:2213
-1630:3:2214
-1631:3:2222
-1632:3:2235
-1633:3:2236
-1634:3:2239
-1635:3:2240
-1636:3:2251
-1637:3:2252
-1638:3:2253
-1639:3:2264
-1640:3:2269
-1641:3:2272
-1642:3:2273
-1643:0:4249
-1644:3:2285
-1645:0:4249
-1646:3:2286
-1647:3:2290
-1648:3:2291
-1649:3:2299
-1650:3:2300
-1651:3:2304
-1652:3:2305
-1653:3:2313
-1654:3:2326
-1655:3:2327
-1656:3:2330
-1657:3:2331
-1658:3:2342
-1659:3:2343
-1660:3:2344
-1661:3:2355
-1662:3:2360
-1663:3:2363
-1664:3:2364
-1665:0:4249
-1666:3:2376
-1667:0:4249
-1668:3:2381
-1669:3:2385
-1670:3:2386
-1671:3:2394
-1672:3:2395
-1673:3:2399
-1674:3:2400
-1675:3:2408
-1676:3:2421
-1677:3:2422
-1678:3:2425
-1679:3:2426
-1680:3:2437
-1681:3:2438
-1682:3:2439
-1683:3:2450
-1684:3:2455
-1685:3:2458
-1686:3:2459
-1687:0:4249
-1688:3:2475
-1689:0:4249
-1690:3:2477
-1691:0:4249
-1692:3:2478
-1693:3:2482
-1694:3:2483
-1695:3:2491
-1696:3:2492
-1697:3:2496
-1698:3:2497
-1699:3:2505
-1700:3:2518
-1701:3:2519
-1702:3:2522
-1703:3:2523
-1704:3:2534
-1705:3:2535
-1706:3:2536
-1707:3:2547
-1708:3:2552
-1709:3:2555
-1710:3:2556
-1711:0:4249
-1712:3:2565
-1713:0:4249
-1714:3:2567
-1715:0:4249
-1716:3:2570
-1717:3:2571
-1718:3:2583
-1719:3:2584
-1720:3:2588
-1721:3:2589
-1722:3:2597
-1723:3:2610
-1724:3:2611
-1725:3:2614
-1726:3:2615
-1727:3:2626
-1728:3:2627
-1729:3:2628
-1730:3:2639
-1731:3:2644
-1732:3:2647
-1733:3:2648
-1734:0:4249
-1735:3:2657
-1736:0:4249
-1737:3:2659
-1738:0:4249
-1739:3:2660
-1740:0:4249
-1741:3:2661
-1742:0:4249
-1743:3:2662
-1744:0:4249
-1745:3:2663
-1746:3:2667
-1747:3:2668
-1748:3:2676
-1749:3:2677
-1750:3:2681
-1751:3:2682
-1752:3:2690
-1753:3:2703
-1754:3:2704
-1755:3:2707
-1756:3:2708
-1757:3:2719
-1758:3:2720
-1759:3:2721
-1760:3:2732
-1761:3:2737
-1762:3:2740
-1763:3:2741
-1764:0:4249
-1765:3:2750
-1766:0:4249
-1767:3:3036
-1768:0:4249
-1769:3:3134
-1770:0:4249
-1771:3:3135
-1772:0:4249
-1773:3:3139
-1774:0:4249
-1775:3:3145
-1776:3:3149
-1777:3:3150
-1778:3:3158
-1779:3:3159
-1780:3:3163
-1781:3:3164
-1782:3:3172
-1783:3:3185
-1784:3:3186
-1785:3:3189
-1786:3:3190
-1787:3:3201
-1788:3:3202
-1789:3:3203
-1790:3:3214
-1791:3:3219
-1792:3:3222
-1793:3:3223
-1794:0:4249
-1795:3:3232
-1796:0:4249
-1797:3:3234
-1798:0:4249
-1799:3:3235
-1800:3:3239
-1801:3:3240
-1802:3:3248
-1803:3:3249
-1804:3:3253
-1805:3:3254
-1806:3:3262
-1807:3:3275
-1808:3:3276
-1809:3:3279
-1810:3:3280
-1811:3:3291
-1812:3:3292
-1813:3:3293
-1814:3:3304
-1815:3:3309
-1816:3:3312
-1817:3:3313
-1818:0:4249
-1819:3:3322
-1820:0:4249
-1821:3:3324
-1822:0:4249
-1823:3:3327
-1824:3:3328
-1825:3:3340
-1826:3:3341
-1827:3:3345
-1828:3:3346
-1829:3:3354
-1830:3:3367
-1831:3:3368
-1832:3:3371
-1833:3:3372
-1834:3:3383
-1835:3:3384
-1836:3:3385
-1837:3:3396
-1838:3:3401
-1839:3:3404
-1840:3:3405
-1841:0:4249
-1842:3:3414
-1843:0:4249
-1844:3:3416
-1845:0:4249
-1846:3:3417
-1847:0:4249
-1848:3:3418
-1849:0:4249
-1850:3:3419
-1851:0:4249
-1852:3:3420
-1853:3:3424
-1854:3:3425
-1855:3:3433
-1856:3:3434
-1857:3:3438
-1858:3:3439
-1859:3:3447
-1860:3:3460
-1861:3:3461
-1862:3:3464
-1863:3:3465
-1864:3:3476
-1865:3:3477
-1866:3:3478
-1867:3:3489
-1868:3:3494
-1869:3:3497
-1870:3:3498
-1871:0:4249
-1872:3:3507
-1873:0:4249
-1874:3:3793
-1875:0:4249
-1876:3:3891
-1877:0:4249
-1878:3:3892
-1879:0:4249
-1880:3:3896
-1881:0:4249
-1882:3:3902
-1883:0:4249
-1884:3:3903
-1885:3:3907
-1886:3:3908
-1887:3:3916
-1888:3:3917
-1889:3:3921
-1890:3:3922
-1891:3:3930
-1892:3:3943
-1893:3:3944
-1894:3:3947
-1895:3:3948
-1896:3:3959
-1897:3:3960
-1898:3:3961
-1899:3:3972
-1900:3:3977
-1901:3:3980
-1902:3:3981
-1903:0:4249
-1904:3:3993
-1905:0:4249
-1906:3:3994
-1907:3:3998
-1908:3:3999
-1909:3:4007
-1910:3:4008
-1911:3:4012
-1912:3:4013
-1913:3:4021
-1914:3:4034
-1915:3:4035
-1916:3:4038
-1917:3:4039
-1918:3:4050
-1919:3:4051
-1920:3:4052
-1921:3:4063
-1922:3:4068
-1923:3:4071
-1924:3:4072
-1925:0:4249
-1926:3:4084
-1927:0:4249
-1928:3:4089
-1929:3:4093
-1930:3:4094
-1931:3:4102
-1932:3:4103
-1933:3:4107
-1934:3:4108
-1935:3:4116
-1936:3:4129
-1937:3:4130
-1938:3:4133
-1939:3:4134
-1940:3:4145
-1941:3:4146
-1942:3:4147
-1943:3:4158
-1944:3:4163
-1945:3:4166
-1946:3:4167
-1947:0:4249
-1948:3:4183
-1949:0:4249
-1950:3:4185
-1951:0:4249
-1952:3:4186
-1953:0:4249
-1954:3:4189
-1955:0:4249
-1956:3:4194
-1957:0:4249
-1958:2:1016
-1959:0:4249
-1960:3:4195
-1961:0:4249
-1962:2:1022
-1963:0:4249
-1964:3:4194
-1965:0:4249
-1966:2:1023
-1967:0:4249
-1968:3:4195
-1969:0:4249
-1970:2:1024
-1971:0:4249
-1972:3:4194
-1973:0:4249
-1974:2:1025
-1975:0:4249
-1976:3:4195
-1977:0:4249
-1978:1:2
-1979:0:4249
-1980:3:4194
-1981:0:4249
-1982:2:1026
-1983:0:4249
-1984:3:4195
-1985:0:4249
-1986:1:8
-1987:0:4249
-1988:3:4194
-1989:0:4249
-1990:2:1025
-1991:0:4249
-1992:3:4195
-1993:0:4249
-1994:1:9
-1995:0:4249
-1996:3:4194
-1997:0:4249
-1998:2:1026
-1999:0:4249
-2000:3:4195
-2001:0:4249
-2002:1:10
-2003:0:4249
-2004:3:4194
-2005:0:4249
-2006:2:1025
-2007:0:4249
-2008:3:4195
-2009:0:4249
-2010:1:11
-2011:0:4249
-2012:3:4194
-2013:0:4249
-2014:2:1026
-2015:0:4249
-2016:3:4195
-2017:0:4249
-2018:1:12
-2019:1:16
-2020:1:17
-2021:1:25
-2022:1:26
-2023:1:30
-2024:1:31
-2025:1:39
-2026:1:44
-2027:1:48
-2028:1:49
-2029:1:56
-2030:1:57
-2031:1:68
-2032:1:69
-2033:1:70
-2034:1:81
-2035:1:86
-2036:1:87
-2037:0:4249
-2038:3:4194
-2039:0:4249
-2040:2:1025
-2041:0:4249
-2042:3:4195
-2043:0:4249
-2044:1:99
-2045:0:4249
-2046:3:4194
-2047:0:4249
-2048:2:1026
-2049:0:4249
-2050:3:4195
-2051:0:4249
-2052:2:1027
-2053:0:4249
-2054:3:4194
-2055:0:4249
-2056:2:1028
-2057:0:4249
-2058:3:4195
-2059:0:4249
-2060:2:1039
-2061:0:4249
-2062:3:4194
-2063:0:4249
-2064:2:1040
-2065:0:4249
-2066:3:4195
-2067:0:4249
-2068:2:1041
-2069:2:1045
-2070:2:1046
-2071:2:1054
-2072:2:1055
-2073:2:1059
-2074:2:1060
-2075:2:1068
-2076:2:1073
-2077:2:1077
-2078:2:1078
-2079:2:1085
-2080:2:1086
-2081:2:1097
-2082:2:1098
-2083:2:1099
-2084:2:1110
-2085:2:1115
-2086:2:1116
-2087:0:4249
-2088:3:4194
-2089:0:4249
-2090:2:1128
-2091:0:4249
-2092:3:4195
-2093:0:4249
-2094:2:1129
-2095:2:1133
-2096:2:1134
-2097:2:1142
-2098:2:1143
-2099:2:1147
-2100:2:1148
-2101:2:1156
-2102:2:1161
-2103:2:1165
-2104:2:1166
-2105:2:1173
-2106:2:1174
-2107:2:1185
-2108:2:1186
-2109:2:1187
-2110:2:1198
-2111:2:1203
-2112:2:1204
-2113:0:4249
-2114:3:4194
-2115:0:4249
-2116:2:1216
-2117:0:4249
-2118:3:4195
-2119:0:4249
-2120:2:1217
-2121:0:4249
-2122:3:4194
-2123:0:4249
-2124:2:1218
-2125:2:1222
-2126:2:1223
-2127:2:1231
-2128:2:1232
-2129:2:1236
-2130:2:1237
-2131:2:1245
-2132:2:1250
-2133:2:1254
-2134:2:1255
-2135:2:1262
-2136:2:1263
-2137:2:1274
-2138:2:1275
-2139:2:1276
-2140:2:1287
-2141:2:1292
-2142:2:1293
-2143:0:4249
-2144:3:4195
-2145:0:4249
-2146:2:1305
-2147:0:4249
-2148:3:4194
-2149:0:4249
-2150:2:1590
-2151:0:4249
-2152:3:4195
-2153:0:4249
-2154:2:1591
-2155:0:4249
-2156:3:4194
-2157:0:4249
-2158:2:1596
-2159:0:4249
-2160:3:4195
-2161:0:4249
-2162:2:1601
-2163:0:4249
-2164:3:4194
-2165:0:4249
-2166:2:1602
-2167:0:4247
-2168:3:4195
-2169:0:4253
-2170:2:1211
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.define b/formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.log b/formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 5eb694e..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10519, errors: 0
-    20146 states, stored
-   191615 states, matched
-   211761 transitions (= stored+matched)
-   711676 atomic steps
-hash conflicts:      1222 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.614      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.509      actual memory usage for states (compression: 93.51%)
-               state-vector as stored = 51 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.229      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 160, "(1)"
-       line 651, "pan.___", state 213, "(1)"
-       line 174, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 233, "(1)"
-       line 174, "pan.___", state 257, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 266, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 279, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 296, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 305, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 318, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 341, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 357, "(1)"
-       line 407, "pan.___", state 373, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 386, "(1)"
-       line 417, "pan.___", state 416, "(1)"
-       line 398, "pan.___", state 442, "(1)"
-       line 402, "pan.___", state 456, "(1)"
-       line 407, "pan.___", state 472, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 515, "(1)"
-       line 402, "pan.___", state 556, "(1)"
-       line 407, "pan.___", state 572, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 615, "(1)"
-       line 174, "pan.___", state 636, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 638, "(1)"
-       line 178, "pan.___", state 645, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 647, "(1)"
-       line 178, "pan.___", state 648, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 648, "else"
-       line 176, "pan.___", state 653, "((j<1))"
-       line 176, "pan.___", state 653, "((j>=1))"
-       line 182, "pan.___", state 658, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 660, "(1)"
-       line 182, "pan.___", state 661, "((cache_dirty_generation_ptr.bitfield&(1<<0)))"
-       line 182, "pan.___", state 661, "else"
-       line 174, "pan.___", state 671, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 673, "(1)"
-       line 178, "pan.___", state 680, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 682, "(1)"
-       line 178, "pan.___", state 683, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 683, "else"
-       line 176, "pan.___", state 688, "((j<1))"
-       line 176, "pan.___", state 688, "((j>=1))"
-       line 182, "pan.___", state 693, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 695, "(1)"
-       line 182, "pan.___", state 696, "((cache_dirty_generation_ptr.bitfield&(1<<i)))"
-       line 182, "pan.___", state 696, "else"
-       line 192, "pan.___", state 701, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 192, "pan.___", state 701, "else"
-       line 213, "pan.___", state 705, "((i<1))"
-       line 213, "pan.___", state 705, "((i>=1))"
-       line 174, "pan.___", state 710, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 712, "(1)"
-       line 178, "pan.___", state 719, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 721, "(1)"
-       line 178, "pan.___", state 722, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 722, "else"
-       line 176, "pan.___", state 727, "((j<1))"
-       line 176, "pan.___", state 727, "((j>=1))"
-       line 182, "pan.___", state 732, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 734, "(1)"
-       line 182, "pan.___", state 735, "((cache_dirty_generation_ptr.bitfield&(1<<0)))"
-       line 182, "pan.___", state 735, "else"
-       line 192, "pan.___", state 740, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 192, "pan.___", state 740, "else"
-       line 220, "pan.___", state 741, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 741, "else"
-       line 355, "pan.___", state 747, "((sighand_exec==1))"
-       line 355, "pan.___", state 747, "else"
-       line 361, "pan.___", state 750, "sighand_exec = 1"
-       line 398, "pan.___", state 763, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 765, "(1)"
-       line 398, "pan.___", state 766, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 766, "else"
-       line 398, "pan.___", state 769, "(1)"
-       line 402, "pan.___", state 777, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 779, "(1)"
-       line 402, "pan.___", state 780, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 780, "else"
-       line 402, "pan.___", state 783, "(1)"
-       line 402, "pan.___", state 784, "(1)"
-       line 402, "pan.___", state 784, "(1)"
-       line 400, "pan.___", state 789, "((i<1))"
-       line 400, "pan.___", state 789, "((i>=1))"
-       line 407, "pan.___", state 795, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 808, "(1)"
-       line 408, "pan.___", state 809, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 809, "else"
-       line 408, "pan.___", state 812, "(1)"
-       line 408, "pan.___", state 813, "(1)"
-       line 408, "pan.___", state 813, "(1)"
-       line 412, "pan.___", state 821, "(1)"
-       line 412, "pan.___", state 822, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 822, "else"
-       line 412, "pan.___", state 825, "(1)"
-       line 412, "pan.___", state 826, "(1)"
-       line 412, "pan.___", state 826, "(1)"
-       line 410, "pan.___", state 831, "((i<1))"
-       line 410, "pan.___", state 831, "((i>=1))"
-       line 417, "pan.___", state 838, "(1)"
-       line 417, "pan.___", state 839, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 839, "else"
-       line 417, "pan.___", state 842, "(1)"
-       line 417, "pan.___", state 843, "(1)"
-       line 417, "pan.___", state 843, "(1)"
-       line 419, "pan.___", state 846, "(1)"
-       line 419, "pan.___", state 846, "(1)"
-       line 361, "pan.___", state 855, "sighand_exec = 1"
-       line 402, "pan.___", state 886, "(1)"
-       line 407, "pan.___", state 902, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 945, "(1)"
-       line 402, "pan.___", state 983, "(1)"
-       line 407, "pan.___", state 999, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1042, "(1)"
-       line 398, "pan.___", state 1068, "(1)"
-       line 402, "pan.___", state 1082, "(1)"
-       line 407, "pan.___", state 1098, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1141, "(1)"
-       line 402, "pan.___", state 1182, "(1)"
-       line 407, "pan.___", state 1198, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1241, "(1)"
-       line 174, "pan.___", state 1262, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1264, "(1)"
-       line 178, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1273, "(1)"
-       line 178, "pan.___", state 1274, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1274, "else"
-       line 176, "pan.___", state 1279, "((j<1))"
-       line 176, "pan.___", state 1279, "((j>=1))"
-       line 182, "pan.___", state 1284, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1286, "(1)"
-       line 182, "pan.___", state 1287, "((cache_dirty_generation_ptr.bitfield&(1<<0)))"
-       line 182, "pan.___", state 1287, "else"
-       line 174, "pan.___", state 1297, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 1299, "(1)"
-       line 178, "pan.___", state 1306, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1308, "(1)"
-       line 178, "pan.___", state 1309, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 1309, "else"
-       line 176, "pan.___", state 1314, "((j<1))"
-       line 176, "pan.___", state 1314, "((j>=1))"
-       line 182, "pan.___", state 1319, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1321, "(1)"
-       line 182, "pan.___", state 1322, "((cache_dirty_generation_ptr.bitfield&(1<<i)))"
-       line 182, "pan.___", state 1322, "else"
-       line 192, "pan.___", state 1327, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 192, "pan.___", state 1327, "else"
-       line 213, "pan.___", state 1331, "((i<1))"
-       line 213, "pan.___", state 1331, "((i>=1))"
-       line 174, "pan.___", state 1336, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1338, "(1)"
-       line 178, "pan.___", state 1345, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1347, "(1)"
-       line 178, "pan.___", state 1348, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1348, "else"
-       line 176, "pan.___", state 1353, "((j<1))"
-       line 176, "pan.___", state 1353, "((j>=1))"
-       line 182, "pan.___", state 1358, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1360, "(1)"
-       line 182, "pan.___", state 1361, "((cache_dirty_generation_ptr.bitfield&(1<<0)))"
-       line 182, "pan.___", state 1361, "else"
-       line 192, "pan.___", state 1366, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 192, "pan.___", state 1366, "else"
-       line 220, "pan.___", state 1367, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 1367, "else"
-       line 355, "pan.___", state 1373, "((sighand_exec==1))"
-       line 355, "pan.___", state 1373, "else"
-       line 361, "pan.___", state 1376, "sighand_exec = 1"
-       line 398, "pan.___", state 1389, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 1391, "(1)"
-       line 398, "pan.___", state 1392, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 1392, "else"
-       line 398, "pan.___", state 1395, "(1)"
-       line 402, "pan.___", state 1403, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 1405, "(1)"
-       line 402, "pan.___", state 1406, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 1406, "else"
-       line 402, "pan.___", state 1409, "(1)"
-       line 402, "pan.___", state 1410, "(1)"
-       line 402, "pan.___", state 1410, "(1)"
-       line 400, "pan.___", state 1415, "((i<1))"
-       line 400, "pan.___", state 1415, "((i>=1))"
-       line 407, "pan.___", state 1421, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 1434, "(1)"
-       line 408, "pan.___", state 1435, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 1435, "else"
-       line 408, "pan.___", state 1438, "(1)"
-       line 408, "pan.___", state 1439, "(1)"
-       line 408, "pan.___", state 1439, "(1)"
-       line 412, "pan.___", state 1447, "(1)"
-       line 412, "pan.___", state 1448, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 1448, "else"
-       line 412, "pan.___", state 1451, "(1)"
-       line 412, "pan.___", state 1452, "(1)"
-       line 412, "pan.___", state 1452, "(1)"
-       line 410, "pan.___", state 1457, "((i<1))"
-       line 410, "pan.___", state 1457, "((i>=1))"
-       line 417, "pan.___", state 1464, "(1)"
-       line 417, "pan.___", state 1465, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1465, "else"
-       line 417, "pan.___", state 1468, "(1)"
-       line 417, "pan.___", state 1469, "(1)"
-       line 417, "pan.___", state 1469, "(1)"
-       line 419, "pan.___", state 1472, "(1)"
-       line 419, "pan.___", state 1472, "(1)"
-       line 361, "pan.___", state 1481, "sighand_exec = 1"
-       line 178, "pan.___", state 1506, "(1)"
-       line 182, "pan.___", state 1517, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1530, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1539, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1552, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 1569, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1591, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 701, "pan.___", state 1632, "-end-"
-       (167 of 1632 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 747, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 0.15 seconds
-pan: rate 134306.67 states/second
-pan: avg transition delay 7.0835e-07 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.spin.input b/formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 525bc1e..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define NO_RMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu/result-signal-over-writer/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 8219815..0000000
+++ /dev/null
@@ -1,1805 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2905
-2:4:2857
-3:4:2860
-4:4:2860
-5:4:2863
-6:4:2871
-7:4:2871
-8:4:2874
-9:4:2880
-10:4:2884
-11:4:2884
-12:4:2887
-13:4:2895
-14:4:2899
-15:4:2900
-16:0:2905
-17:4:2902
-18:0:2905
-19:3:1319
-20:0:2905
-21:3:1325
-22:0:2905
-23:3:1326
-24:0:2905
-25:3:1327
-26:3:1331
-27:3:1332
-28:3:1340
-29:3:1341
-30:3:1345
-31:3:1346
-32:3:1354
-33:3:1359
-34:3:1363
-35:3:1364
-36:3:1371
-37:3:1372
-38:3:1383
-39:3:1384
-40:3:1385
-41:3:1396
-42:3:1401
-43:3:1402
-44:0:2905
-45:3:1414
-46:0:2905
-47:3:1416
-48:3:1417
-49:0:2905
-50:3:1421
-51:3:1425
-52:3:1426
-53:3:1434
-54:3:1435
-55:3:1439
-56:3:1440
-57:3:1448
-58:3:1453
-59:3:1454
-60:3:1465
-61:3:1466
-62:3:1477
-63:3:1478
-64:3:1479
-65:3:1490
-66:3:1495
-67:3:1496
-68:0:2905
-69:3:1508
-70:0:2905
-71:3:1510
-72:0:2905
-73:3:1511
-74:0:2905
-75:3:1521
-76:0:2905
-77:3:1522
-78:0:2905
-79:3:1526
-80:3:1527
-81:3:1531
-82:3:1535
-83:3:1536
-84:3:1540
-85:3:1548
-86:3:1549
-87:0:2905
-88:3:1557
-89:0:2905
-90:3:1561
-91:3:1562
-92:3:1566
-93:3:1570
-94:3:1571
-95:3:1575
-96:3:1583
-97:3:1584
-98:0:2905
-99:3:1592
-100:0:2905
-101:3:1600
-102:3:1601
-103:3:1605
-104:3:1609
-105:3:1610
-106:3:1614
-107:3:1622
-108:3:1623
-109:0:2905
-110:3:1635
-111:0:2905
-112:3:1637
-113:0:2905
-114:3:1638
-115:3:1642
-116:3:1643
-117:3:1651
-118:3:1652
-119:3:1656
-120:3:1657
-121:3:1665
-122:3:1670
-123:3:1674
-124:3:1675
-125:3:1682
-126:3:1683
-127:3:1694
-128:3:1695
-129:3:1696
-130:3:1707
-131:3:1712
-132:3:1713
-133:0:2905
-134:3:1725
-135:0:2905
-136:3:1727
-137:0:2905
-138:3:1730
-139:3:1731
-140:3:1743
-141:3:1744
-142:3:1748
-143:3:1749
-144:3:1757
-145:3:1762
-146:3:1766
-147:3:1767
-148:3:1774
-149:3:1775
-150:3:1786
-151:3:1787
-152:3:1788
-153:3:1799
-154:3:1804
-155:3:1805
-156:0:2905
-157:3:1817
-158:0:2905
-159:3:1819
-160:0:2905
-161:3:1820
-162:0:2905
-163:3:1821
-164:0:2905
-165:3:1822
-166:0:2905
-167:3:1823
-168:3:1827
-169:3:1828
-170:3:1836
-171:3:1837
-172:3:1841
-173:3:1842
-174:3:1850
-175:3:1855
-176:3:1859
-177:3:1860
-178:3:1867
-179:3:1868
-180:3:1879
-181:3:1880
-182:3:1881
-183:3:1892
-184:3:1897
-185:3:1898
-186:0:2905
-187:3:1910
-188:0:2905
-189:3:2028
-190:0:2905
-191:3:2126
-192:0:2905
-193:3:2127
-194:0:2905
-195:3:2131
-196:0:2905
-197:3:2137
-198:3:2141
-199:3:2142
-200:3:2150
-201:3:2151
-202:3:2155
-203:3:2156
-204:3:2164
-205:3:2169
-206:3:2173
-207:3:2174
-208:3:2181
-209:3:2182
-210:3:2193
-211:3:2194
-212:3:2195
-213:3:2206
-214:3:2211
-215:3:2212
-216:0:2905
-217:3:2224
-218:0:2905
-219:3:2226
-220:0:2905
-221:3:2227
-222:3:2231
-223:3:2232
-224:3:2240
-225:3:2241
-226:3:2245
-227:3:2246
-228:3:2254
-229:3:2259
-230:3:2263
-231:3:2264
-232:3:2271
-233:3:2272
-234:3:2283
-235:3:2284
-236:3:2285
-237:3:2296
-238:3:2301
-239:3:2302
-240:0:2905
-241:3:2314
-242:0:2905
-243:3:2316
-244:0:2905
-245:3:2319
-246:3:2320
-247:3:2332
-248:3:2333
-249:3:2337
-250:3:2338
-251:3:2346
-252:3:2351
-253:3:2355
-254:3:2356
-255:3:2363
-256:3:2364
-257:3:2375
-258:3:2376
-259:3:2377
-260:3:2388
-261:3:2393
-262:3:2394
-263:0:2905
-264:3:2406
-265:0:2905
-266:3:2408
-267:0:2905
-268:3:2409
-269:0:2905
-270:3:2410
-271:0:2905
-272:3:2411
-273:0:2905
-274:3:2412
-275:3:2416
-276:3:2417
-277:3:2425
-278:3:2426
-279:3:2430
-280:3:2431
-281:3:2439
-282:3:2444
-283:3:2448
-284:3:2449
-285:3:2456
-286:3:2457
-287:3:2468
-288:3:2469
-289:3:2470
-290:3:2481
-291:3:2486
-292:3:2487
-293:0:2905
-294:3:2499
-295:0:2905
-296:3:2617
-297:0:2905
-298:3:2715
-299:0:2905
-300:3:2716
-301:0:2905
-302:3:2720
-303:0:2905
-304:3:2726
-305:0:2905
-306:3:2730
-307:3:2731
-308:3:2735
-309:3:2739
-310:3:2740
-311:3:2744
-312:3:2752
-313:3:2753
-314:0:2905
-315:3:2761
-316:0:2905
-317:3:2765
-318:3:2766
-319:3:2770
-320:3:2774
-321:3:2775
-322:3:2779
-323:3:2787
-324:3:2788
-325:0:2905
-326:3:2796
-327:0:2905
-328:3:2804
-329:3:2805
-330:3:2809
-331:3:2813
-332:3:2814
-333:3:2818
-334:3:2826
-335:3:2827
-336:0:2905
-337:3:2839
-338:0:2905
-339:3:2841
-340:0:2905
-341:3:2842
-342:0:2905
-343:3:1326
-344:0:2905
-345:3:1327
-346:3:1331
-347:3:1332
-348:3:1340
-349:3:1341
-350:3:1345
-351:3:1346
-352:3:1354
-353:3:1359
-354:3:1363
-355:3:1364
-356:3:1371
-357:3:1372
-358:3:1383
-359:3:1384
-360:3:1385
-361:3:1396
-362:3:1401
-363:3:1402
-364:0:2905
-365:3:1414
-366:0:2905
-367:3:1416
-368:3:1417
-369:0:2905
-370:3:1421
-371:3:1425
-372:3:1426
-373:3:1434
-374:3:1435
-375:3:1439
-376:3:1440
-377:3:1448
-378:3:1453
-379:3:1454
-380:3:1465
-381:3:1466
-382:3:1477
-383:3:1478
-384:3:1479
-385:3:1490
-386:3:1495
-387:3:1496
-388:0:2905
-389:3:1508
-390:0:2905
-391:3:1510
-392:0:2905
-393:3:1511
-394:0:2905
-395:3:1521
-396:0:2905
-397:3:1522
-398:0:2905
-399:3:1526
-400:3:1527
-401:3:1531
-402:3:1535
-403:3:1536
-404:3:1540
-405:3:1548
-406:3:1549
-407:0:2905
-408:3:1557
-409:0:2905
-410:3:1561
-411:3:1562
-412:3:1566
-413:3:1570
-414:3:1571
-415:3:1575
-416:3:1583
-417:3:1584
-418:0:2905
-419:3:1592
-420:0:2905
-421:3:1600
-422:3:1601
-423:3:1605
-424:3:1609
-425:3:1610
-426:3:1614
-427:3:1622
-428:3:1623
-429:0:2905
-430:3:1635
-431:0:2905
-432:3:1637
-433:0:2905
-434:3:1638
-435:3:1642
-436:3:1643
-437:3:1651
-438:3:1652
-439:3:1656
-440:3:1657
-441:3:1665
-442:3:1670
-443:3:1674
-444:3:1675
-445:3:1682
-446:3:1683
-447:3:1694
-448:3:1695
-449:3:1696
-450:3:1707
-451:3:1712
-452:3:1713
-453:0:2905
-454:3:1725
-455:0:2905
-456:3:1727
-457:0:2905
-458:3:1730
-459:3:1731
-460:3:1743
-461:3:1744
-462:3:1748
-463:3:1749
-464:3:1757
-465:3:1762
-466:3:1766
-467:3:1767
-468:3:1774
-469:3:1775
-470:3:1786
-471:3:1787
-472:3:1788
-473:3:1799
-474:3:1804
-475:3:1805
-476:0:2905
-477:3:1817
-478:0:2905
-479:3:1819
-480:0:2905
-481:3:1820
-482:0:2905
-483:3:1821
-484:0:2905
-485:3:1822
-486:0:2905
-487:3:1823
-488:3:1827
-489:3:1828
-490:3:1836
-491:3:1837
-492:3:1841
-493:3:1842
-494:3:1850
-495:3:1855
-496:3:1859
-497:3:1860
-498:3:1867
-499:3:1868
-500:3:1879
-501:3:1880
-502:3:1881
-503:3:1892
-504:3:1897
-505:3:1898
-506:0:2905
-507:3:1910
-508:0:2905
-509:3:2028
-510:0:2905
-511:3:2126
-512:0:2905
-513:3:2127
-514:0:2905
-515:3:2131
-516:0:2905
-517:3:2137
-518:3:2141
-519:3:2142
-520:3:2150
-521:3:2151
-522:3:2155
-523:3:2156
-524:3:2164
-525:3:2169
-526:3:2173
-527:3:2174
-528:3:2181
-529:3:2182
-530:3:2193
-531:3:2194
-532:3:2195
-533:3:2206
-534:3:2211
-535:3:2212
-536:0:2905
-537:3:2224
-538:0:2905
-539:3:2226
-540:0:2905
-541:3:2227
-542:3:2231
-543:3:2232
-544:3:2240
-545:3:2241
-546:3:2245
-547:3:2246
-548:3:2254
-549:3:2259
-550:3:2263
-551:3:2264
-552:3:2271
-553:3:2272
-554:3:2283
-555:3:2284
-556:3:2285
-557:3:2296
-558:3:2301
-559:3:2302
-560:0:2905
-561:3:2314
-562:0:2905
-563:3:2316
-564:0:2905
-565:3:2319
-566:3:2320
-567:3:2332
-568:3:2333
-569:3:2337
-570:3:2338
-571:3:2346
-572:3:2351
-573:3:2355
-574:3:2356
-575:3:2363
-576:3:2364
-577:3:2375
-578:3:2376
-579:3:2377
-580:3:2388
-581:3:2393
-582:3:2394
-583:0:2905
-584:3:2406
-585:0:2905
-586:3:2408
-587:0:2905
-588:3:2409
-589:0:2905
-590:3:2410
-591:0:2905
-592:3:2411
-593:0:2905
-594:3:2412
-595:3:2416
-596:3:2417
-597:3:2425
-598:3:2426
-599:3:2430
-600:3:2431
-601:3:2439
-602:3:2444
-603:3:2448
-604:3:2449
-605:3:2456
-606:3:2457
-607:3:2468
-608:3:2469
-609:3:2470
-610:3:2481
-611:3:2486
-612:3:2487
-613:0:2905
-614:3:2499
-615:0:2905
-616:3:2617
-617:0:2905
-618:3:2715
-619:0:2905
-620:3:2716
-621:0:2905
-622:3:2720
-623:0:2905
-624:3:2726
-625:0:2905
-626:3:2730
-627:3:2731
-628:3:2735
-629:3:2739
-630:3:2740
-631:3:2744
-632:3:2752
-633:3:2753
-634:0:2905
-635:3:2761
-636:0:2905
-637:3:2765
-638:3:2766
-639:3:2770
-640:3:2774
-641:3:2775
-642:3:2779
-643:3:2787
-644:3:2788
-645:0:2905
-646:3:2796
-647:0:2905
-648:3:2804
-649:3:2805
-650:3:2809
-651:3:2813
-652:3:2814
-653:3:2818
-654:3:2826
-655:3:2827
-656:0:2905
-657:3:2839
-658:0:2905
-659:3:2841
-660:0:2905
-661:3:2842
-662:0:2905
-663:3:1326
-664:0:2905
-665:3:1327
-666:3:1331
-667:3:1332
-668:3:1340
-669:3:1341
-670:3:1345
-671:3:1346
-672:3:1354
-673:3:1359
-674:3:1363
-675:3:1364
-676:3:1371
-677:3:1372
-678:3:1383
-679:3:1384
-680:3:1385
-681:3:1396
-682:3:1401
-683:3:1402
-684:0:2905
-685:3:1414
-686:0:2905
-687:3:1416
-688:3:1417
-689:0:2905
-690:3:1421
-691:3:1425
-692:3:1426
-693:3:1434
-694:3:1435
-695:3:1439
-696:3:1440
-697:3:1448
-698:3:1453
-699:3:1454
-700:3:1465
-701:3:1466
-702:3:1477
-703:3:1478
-704:3:1479
-705:3:1490
-706:3:1495
-707:3:1496
-708:0:2905
-709:3:1508
-710:0:2905
-711:3:1510
-712:0:2905
-713:3:1511
-714:0:2905
-715:3:1521
-716:0:2905
-717:3:1522
-718:0:2905
-719:3:1526
-720:3:1527
-721:3:1531
-722:3:1535
-723:3:1536
-724:3:1540
-725:3:1548
-726:3:1549
-727:0:2905
-728:3:1557
-729:0:2905
-730:3:1561
-731:3:1562
-732:3:1566
-733:3:1570
-734:3:1571
-735:3:1575
-736:3:1583
-737:3:1584
-738:0:2905
-739:3:1592
-740:0:2905
-741:3:1600
-742:3:1601
-743:3:1605
-744:3:1609
-745:3:1610
-746:3:1614
-747:3:1622
-748:3:1623
-749:0:2905
-750:3:1635
-751:0:2905
-752:3:1637
-753:0:2905
-754:3:1638
-755:3:1642
-756:3:1643
-757:3:1651
-758:3:1652
-759:3:1656
-760:3:1657
-761:3:1665
-762:3:1670
-763:3:1674
-764:3:1675
-765:3:1682
-766:3:1683
-767:3:1694
-768:3:1695
-769:3:1696
-770:3:1707
-771:3:1712
-772:3:1713
-773:0:2905
-774:3:1725
-775:0:2905
-776:3:1727
-777:0:2905
-778:3:1730
-779:3:1731
-780:3:1743
-781:3:1744
-782:3:1748
-783:3:1749
-784:3:1757
-785:3:1762
-786:3:1766
-787:3:1767
-788:3:1774
-789:3:1775
-790:3:1786
-791:3:1787
-792:3:1788
-793:3:1799
-794:3:1804
-795:3:1805
-796:0:2905
-797:3:1817
-798:0:2905
-799:3:1819
-800:0:2905
-801:3:1820
-802:0:2905
-803:3:1821
-804:0:2905
-805:3:1822
-806:0:2905
-807:3:1823
-808:3:1827
-809:3:1828
-810:3:1836
-811:3:1837
-812:3:1841
-813:3:1842
-814:3:1850
-815:3:1855
-816:3:1859
-817:3:1860
-818:3:1867
-819:3:1868
-820:3:1879
-821:3:1880
-822:3:1881
-823:3:1892
-824:3:1897
-825:3:1898
-826:0:2905
-827:3:1910
-828:0:2905
-829:3:2028
-830:0:2905
-831:3:2126
-832:0:2905
-833:3:2127
-834:0:2905
-835:3:2131
-836:0:2905
-837:3:2137
-838:3:2141
-839:3:2142
-840:3:2150
-841:3:2151
-842:3:2155
-843:3:2156
-844:3:2164
-845:3:2169
-846:3:2173
-847:3:2174
-848:3:2181
-849:3:2182
-850:3:2193
-851:3:2194
-852:3:2195
-853:3:2206
-854:3:2211
-855:3:2212
-856:0:2905
-857:3:2224
-858:0:2905
-859:3:2226
-860:0:2905
-861:3:2227
-862:3:2231
-863:3:2232
-864:3:2240
-865:3:2241
-866:3:2245
-867:3:2246
-868:3:2254
-869:3:2259
-870:3:2263
-871:3:2264
-872:3:2271
-873:3:2272
-874:3:2283
-875:3:2284
-876:3:2285
-877:3:2296
-878:3:2301
-879:3:2302
-880:0:2905
-881:3:2314
-882:0:2905
-883:3:2316
-884:0:2905
-885:3:2319
-886:3:2320
-887:3:2332
-888:3:2333
-889:3:2337
-890:3:2338
-891:3:2346
-892:3:2351
-893:3:2355
-894:3:2356
-895:3:2363
-896:3:2364
-897:3:2375
-898:3:2376
-899:3:2377
-900:3:2388
-901:3:2393
-902:3:2394
-903:0:2905
-904:3:2406
-905:0:2905
-906:3:2408
-907:0:2905
-908:3:2409
-909:0:2905
-910:3:2410
-911:0:2905
-912:3:2411
-913:0:2905
-914:3:2412
-915:3:2416
-916:3:2417
-917:3:2425
-918:3:2426
-919:3:2430
-920:3:2431
-921:3:2439
-922:3:2444
-923:3:2448
-924:3:2449
-925:3:2456
-926:3:2457
-927:3:2468
-928:3:2469
-929:3:2470
-930:3:2481
-931:3:2486
-932:3:2487
-933:0:2905
-934:3:2499
-935:0:2905
-936:3:2617
-937:0:2905
-938:3:2715
-939:0:2905
-940:3:2716
-941:0:2905
-942:3:2720
-943:0:2905
-944:3:2726
-945:0:2905
-946:3:2730
-947:3:2731
-948:3:2735
-949:3:2739
-950:3:2740
-951:3:2744
-952:3:2752
-953:3:2753
-954:0:2905
-955:3:2761
-956:0:2905
-957:3:2765
-958:3:2766
-959:3:2770
-960:3:2774
-961:3:2775
-962:3:2779
-963:3:2787
-964:3:2788
-965:0:2905
-966:3:2796
-967:0:2905
-968:3:2804
-969:3:2805
-970:3:2809
-971:3:2813
-972:3:2814
-973:3:2818
-974:3:2826
-975:3:2827
-976:0:2905
-977:3:2839
-978:0:2905
-979:3:2841
-980:0:2905
-981:3:2842
-982:0:2905
-983:3:1326
-984:0:2905
-985:3:1327
-986:3:1331
-987:3:1332
-988:3:1340
-989:3:1341
-990:3:1345
-991:3:1346
-992:3:1354
-993:3:1359
-994:3:1363
-995:3:1364
-996:3:1371
-997:3:1372
-998:3:1383
-999:3:1384
-1000:3:1385
-1001:3:1396
-1002:3:1401
-1003:3:1402
-1004:0:2905
-1005:3:1414
-1006:0:2905
-1007:3:1416
-1008:3:1417
-1009:0:2905
-1010:3:1421
-1011:3:1425
-1012:3:1426
-1013:3:1434
-1014:3:1435
-1015:3:1439
-1016:3:1440
-1017:3:1448
-1018:3:1453
-1019:3:1454
-1020:3:1465
-1021:3:1466
-1022:3:1477
-1023:3:1478
-1024:3:1479
-1025:3:1490
-1026:3:1495
-1027:3:1496
-1028:0:2905
-1029:3:1508
-1030:0:2905
-1031:3:1510
-1032:0:2905
-1033:3:1511
-1034:0:2905
-1035:3:1521
-1036:0:2905
-1037:3:1522
-1038:0:2905
-1039:3:1526
-1040:3:1527
-1041:3:1531
-1042:3:1535
-1043:3:1536
-1044:3:1540
-1045:3:1548
-1046:3:1549
-1047:0:2905
-1048:3:1557
-1049:0:2905
-1050:3:1561
-1051:3:1562
-1052:3:1566
-1053:3:1570
-1054:3:1571
-1055:3:1575
-1056:3:1583
-1057:3:1584
-1058:0:2905
-1059:3:1592
-1060:0:2905
-1061:3:1600
-1062:3:1601
-1063:3:1605
-1064:3:1609
-1065:3:1610
-1066:3:1614
-1067:3:1622
-1068:3:1623
-1069:0:2905
-1070:3:1635
-1071:0:2905
-1072:3:1637
-1073:0:2905
-1074:3:1638
-1075:3:1642
-1076:3:1643
-1077:3:1651
-1078:3:1652
-1079:3:1656
-1080:3:1657
-1081:3:1665
-1082:3:1670
-1083:3:1674
-1084:3:1675
-1085:3:1682
-1086:3:1683
-1087:3:1694
-1088:3:1695
-1089:3:1696
-1090:3:1707
-1091:3:1712
-1092:3:1713
-1093:0:2905
-1094:3:1725
-1095:0:2905
-1096:3:1727
-1097:0:2905
-1098:3:1730
-1099:3:1731
-1100:3:1743
-1101:3:1744
-1102:3:1748
-1103:3:1749
-1104:3:1757
-1105:3:1762
-1106:3:1766
-1107:3:1767
-1108:3:1774
-1109:3:1775
-1110:3:1786
-1111:3:1787
-1112:3:1788
-1113:3:1799
-1114:3:1804
-1115:3:1805
-1116:0:2905
-1117:3:1817
-1118:0:2905
-1119:3:1819
-1120:0:2905
-1121:3:1820
-1122:0:2905
-1123:3:1821
-1124:0:2905
-1125:3:1822
-1126:0:2905
-1127:3:1823
-1128:3:1827
-1129:3:1828
-1130:3:1836
-1131:3:1837
-1132:3:1841
-1133:3:1842
-1134:3:1850
-1135:3:1855
-1136:3:1859
-1137:3:1860
-1138:3:1867
-1139:3:1868
-1140:3:1879
-1141:3:1880
-1142:3:1881
-1143:3:1892
-1144:3:1897
-1145:3:1898
-1146:0:2905
-1147:3:1910
-1148:0:2905
-1149:3:2028
-1150:0:2905
-1151:3:2126
-1152:0:2905
-1153:3:2127
-1154:0:2905
-1155:3:2131
-1156:0:2905
-1157:3:2137
-1158:3:2141
-1159:3:2142
-1160:3:2150
-1161:3:2151
-1162:3:2155
-1163:3:2156
-1164:3:2164
-1165:3:2169
-1166:3:2173
-1167:3:2174
-1168:3:2181
-1169:3:2182
-1170:3:2193
-1171:3:2194
-1172:3:2195
-1173:3:2206
-1174:3:2211
-1175:3:2212
-1176:0:2905
-1177:3:2224
-1178:0:2905
-1179:3:2226
-1180:0:2905
-1181:3:2227
-1182:3:2231
-1183:3:2232
-1184:3:2240
-1185:3:2241
-1186:3:2245
-1187:3:2246
-1188:3:2254
-1189:3:2259
-1190:3:2263
-1191:3:2264
-1192:3:2271
-1193:3:2272
-1194:3:2283
-1195:3:2284
-1196:3:2285
-1197:3:2296
-1198:3:2301
-1199:3:2302
-1200:0:2905
-1201:3:2314
-1202:0:2905
-1203:3:2316
-1204:0:2905
-1205:3:2319
-1206:3:2320
-1207:3:2332
-1208:3:2333
-1209:3:2337
-1210:3:2338
-1211:3:2346
-1212:3:2351
-1213:3:2355
-1214:3:2356
-1215:3:2363
-1216:3:2364
-1217:3:2375
-1218:3:2376
-1219:3:2377
-1220:3:2388
-1221:3:2393
-1222:3:2394
-1223:0:2905
-1224:3:2406
-1225:0:2905
-1226:3:2408
-1227:0:2905
-1228:3:2409
-1229:0:2905
-1230:3:2410
-1231:0:2905
-1232:3:2411
-1233:0:2905
-1234:3:2412
-1235:3:2416
-1236:3:2417
-1237:3:2425
-1238:3:2426
-1239:3:2430
-1240:3:2431
-1241:3:2439
-1242:3:2444
-1243:3:2448
-1244:3:2449
-1245:3:2456
-1246:3:2457
-1247:3:2468
-1248:3:2469
-1249:3:2470
-1250:3:2481
-1251:3:2486
-1252:3:2487
-1253:0:2905
-1254:3:2499
-1255:0:2905
-1256:3:2617
-1257:0:2905
-1258:3:2715
-1259:0:2905
-1260:3:2716
-1261:0:2905
-1262:3:2720
-1263:0:2905
-1264:3:2726
-1265:0:2905
-1266:3:2730
-1267:3:2731
-1268:3:2735
-1269:3:2739
-1270:3:2740
-1271:3:2744
-1272:3:2752
-1273:3:2753
-1274:0:2905
-1275:3:2761
-1276:0:2905
-1277:3:2765
-1278:3:2766
-1279:3:2770
-1280:3:2774
-1281:3:2775
-1282:3:2779
-1283:3:2787
-1284:3:2788
-1285:0:2905
-1286:3:2796
-1287:0:2905
-1288:3:2804
-1289:3:2805
-1290:3:2809
-1291:3:2813
-1292:3:2814
-1293:3:2818
-1294:3:2826
-1295:3:2827
-1296:0:2905
-1297:3:2839
-1298:0:2905
-1299:3:2841
-1300:0:2905
-1301:3:2842
-1302:0:2905
-1303:3:1326
-1304:0:2905
-1305:3:1327
-1306:3:1331
-1307:3:1332
-1308:3:1340
-1309:3:1341
-1310:3:1345
-1311:3:1346
-1312:3:1354
-1313:3:1359
-1314:3:1363
-1315:3:1364
-1316:3:1371
-1317:3:1372
-1318:3:1383
-1319:3:1384
-1320:3:1385
-1321:3:1396
-1322:3:1401
-1323:3:1402
-1324:0:2905
-1325:3:1414
-1326:0:2905
-1327:3:1416
-1328:3:1417
-1329:0:2905
-1330:3:1421
-1331:3:1425
-1332:3:1426
-1333:3:1434
-1334:3:1435
-1335:3:1439
-1336:3:1440
-1337:3:1448
-1338:3:1461
-1339:3:1462
-1340:3:1465
-1341:3:1466
-1342:3:1477
-1343:3:1478
-1344:3:1479
-1345:3:1490
-1346:3:1495
-1347:3:1498
-1348:3:1499
-1349:0:2905
-1350:3:1508
-1351:0:2905
-1352:3:1510
-1353:0:2905
-1354:3:1511
-1355:0:2905
-1356:3:1521
-1357:0:2905
-1358:3:1522
-1359:0:2905
-1360:2:680
-1361:0:2905
-1362:2:686
-1363:0:2905
-1364:2:687
-1365:0:2905
-1366:2:688
-1367:0:2905
-1368:2:689
-1369:0:2905
-1370:1:2
-1371:0:2905
-1372:2:690
-1373:0:2905
-1374:1:8
-1375:0:2905
-1376:1:9
-1377:0:2905
-1378:1:10
-1379:0:2905
-1380:1:11
-1381:0:2905
-1382:2:689
-1383:0:2905
-1384:1:12
-1385:1:16
-1386:1:17
-1387:1:25
-1388:1:26
-1389:1:30
-1390:1:31
-1391:1:39
-1392:1:44
-1393:1:48
-1394:1:49
-1395:1:56
-1396:1:57
-1397:1:68
-1398:1:69
-1399:1:70
-1400:1:81
-1401:1:86
-1402:1:87
-1403:0:2905
-1404:2:690
-1405:0:2905
-1406:3:1526
-1407:3:1527
-1408:3:1531
-1409:3:1535
-1410:3:1536
-1411:3:1540
-1412:3:1545
-1413:0:2905
-1414:3:1557
-1415:0:2905
-1416:3:1561
-1417:3:1562
-1418:3:1566
-1419:3:1570
-1420:3:1571
-1421:3:1575
-1422:3:1583
-1423:3:1584
-1424:0:2905
-1425:3:1592
-1426:0:2905
-1427:3:1600
-1428:3:1601
-1429:3:1605
-1430:3:1609
-1431:3:1610
-1432:3:1614
-1433:3:1622
-1434:3:1623
-1435:0:2905
-1436:3:1635
-1437:0:2905
-1438:3:1637
-1439:0:2905
-1440:3:1638
-1441:3:1642
-1442:3:1643
-1443:3:1651
-1444:3:1652
-1445:3:1656
-1446:3:1657
-1447:3:1665
-1448:3:1670
-1449:3:1674
-1450:3:1675
-1451:3:1682
-1452:3:1683
-1453:3:1694
-1454:3:1695
-1455:3:1696
-1456:3:1707
-1457:3:1712
-1458:3:1713
-1459:0:2905
-1460:3:1725
-1461:0:2905
-1462:3:1727
-1463:0:2905
-1464:3:1730
-1465:3:1731
-1466:3:1743
-1467:3:1744
-1468:3:1748
-1469:3:1749
-1470:3:1757
-1471:3:1762
-1472:3:1766
-1473:3:1767
-1474:3:1774
-1475:3:1775
-1476:3:1786
-1477:3:1787
-1478:3:1788
-1479:3:1799
-1480:3:1804
-1481:3:1805
-1482:0:2905
-1483:3:1817
-1484:0:2905
-1485:3:1819
-1486:0:2905
-1487:3:1820
-1488:0:2905
-1489:3:1821
-1490:0:2905
-1491:3:1822
-1492:0:2905
-1493:3:1823
-1494:3:1827
-1495:3:1828
-1496:3:1836
-1497:3:1837
-1498:3:1841
-1499:3:1842
-1500:3:1850
-1501:3:1855
-1502:3:1859
-1503:3:1860
-1504:3:1867
-1505:3:1868
-1506:3:1879
-1507:3:1880
-1508:3:1881
-1509:3:1892
-1510:3:1897
-1511:3:1898
-1512:0:2905
-1513:3:1910
-1514:0:2905
-1515:3:2028
-1516:0:2905
-1517:3:2126
-1518:0:2905
-1519:3:2127
-1520:0:2905
-1521:3:2131
-1522:0:2905
-1523:3:2137
-1524:3:2141
-1525:3:2142
-1526:3:2150
-1527:3:2151
-1528:3:2155
-1529:3:2156
-1530:3:2164
-1531:3:2169
-1532:3:2173
-1533:3:2174
-1534:3:2181
-1535:3:2182
-1536:3:2193
-1537:3:2194
-1538:3:2195
-1539:3:2206
-1540:3:2211
-1541:3:2212
-1542:0:2905
-1543:3:2224
-1544:0:2905
-1545:3:2226
-1546:0:2905
-1547:3:2227
-1548:3:2231
-1549:3:2232
-1550:3:2240
-1551:3:2241
-1552:3:2245
-1553:3:2246
-1554:3:2254
-1555:3:2259
-1556:3:2263
-1557:3:2264
-1558:3:2271
-1559:3:2272
-1560:3:2283
-1561:3:2284
-1562:3:2285
-1563:3:2296
-1564:3:2301
-1565:3:2302
-1566:0:2905
-1567:3:2314
-1568:0:2905
-1569:3:2316
-1570:0:2905
-1571:3:2319
-1572:3:2320
-1573:3:2332
-1574:3:2333
-1575:3:2337
-1576:3:2338
-1577:3:2346
-1578:3:2351
-1579:3:2355
-1580:3:2356
-1581:3:2363
-1582:3:2364
-1583:3:2375
-1584:3:2376
-1585:3:2377
-1586:3:2388
-1587:3:2393
-1588:3:2394
-1589:0:2905
-1590:3:2406
-1591:0:2905
-1592:3:2408
-1593:0:2905
-1594:3:2409
-1595:0:2905
-1596:3:2410
-1597:0:2905
-1598:3:2411
-1599:0:2905
-1600:3:2412
-1601:3:2416
-1602:3:2417
-1603:3:2425
-1604:3:2426
-1605:3:2430
-1606:3:2431
-1607:3:2439
-1608:3:2444
-1609:3:2448
-1610:3:2449
-1611:3:2456
-1612:3:2457
-1613:3:2468
-1614:3:2469
-1615:3:2470
-1616:3:2481
-1617:3:2486
-1618:3:2487
-1619:0:2905
-1620:3:2499
-1621:0:2905
-1622:3:2617
-1623:0:2905
-1624:3:2715
-1625:0:2905
-1626:3:2716
-1627:0:2905
-1628:3:2720
-1629:0:2905
-1630:3:2726
-1631:0:2905
-1632:3:2730
-1633:3:2731
-1634:3:2735
-1635:3:2739
-1636:3:2740
-1637:3:2744
-1638:3:2752
-1639:3:2753
-1640:0:2905
-1641:3:2761
-1642:0:2905
-1643:3:2765
-1644:3:2766
-1645:3:2770
-1646:3:2774
-1647:3:2775
-1648:3:2779
-1649:3:2787
-1650:3:2788
-1651:0:2905
-1652:3:2796
-1653:0:2905
-1654:3:2804
-1655:3:2805
-1656:3:2809
-1657:3:2813
-1658:3:2814
-1659:3:2818
-1660:3:2826
-1661:3:2827
-1662:0:2905
-1663:3:2839
-1664:0:2905
-1665:3:2841
-1666:0:2905
-1667:3:2842
-1668:0:2905
-1669:3:2845
-1670:0:2905
-1671:3:2850
-1672:0:2905
-1673:2:689
-1674:0:2905
-1675:3:2851
-1676:0:2905
-1677:1:99
-1678:0:2905
-1679:3:2850
-1680:0:2905
-1681:2:690
-1682:0:2905
-1683:3:2851
-1684:0:2905
-1685:2:691
-1686:0:2905
-1687:3:2850
-1688:0:2905
-1689:2:692
-1690:0:2905
-1691:3:2851
-1692:0:2905
-1693:2:703
-1694:0:2905
-1695:3:2850
-1696:0:2905
-1697:2:704
-1698:0:2905
-1699:3:2851
-1700:0:2905
-1701:2:705
-1702:2:709
-1703:2:710
-1704:2:718
-1705:2:719
-1706:2:723
-1707:2:724
-1708:2:732
-1709:2:737
-1710:2:741
-1711:2:742
-1712:2:749
-1713:2:750
-1714:2:761
-1715:2:762
-1716:2:763
-1717:2:774
-1718:2:786
-1719:2:787
-1720:0:2905
-1721:3:2850
-1722:0:2905
-1723:2:792
-1724:0:2905
-1725:3:2851
-1726:0:2905
-1727:2:793
-1728:2:797
-1729:2:798
-1730:2:806
-1731:2:807
-1732:2:811
-1733:2:812
-1734:2:820
-1735:2:825
-1736:2:829
-1737:2:830
-1738:2:837
-1739:2:838
-1740:2:849
-1741:2:850
-1742:2:851
-1743:2:862
-1744:2:874
-1745:2:875
-1746:0:2905
-1747:3:2850
-1748:0:2905
-1749:2:880
-1750:0:2905
-1751:3:2851
-1752:0:2905
-1753:2:881
-1754:0:2905
-1755:3:2850
-1756:0:2905
-1757:2:882
-1758:2:886
-1759:2:887
-1760:2:895
-1761:2:896
-1762:2:900
-1763:2:901
-1764:2:909
-1765:2:914
-1766:2:918
-1767:2:919
-1768:2:926
-1769:2:927
-1770:2:938
-1771:2:939
-1772:2:940
-1773:2:951
-1774:2:963
-1775:2:964
-1776:0:2905
-1777:3:2851
-1778:0:2905
-1779:2:969
-1780:0:2905
-1781:3:2850
-1782:0:2905
-1783:2:1086
-1784:0:2905
-1785:3:2851
-1786:0:2905
-1787:2:1087
-1788:0:2905
-1789:3:2850
-1790:0:2905
-1791:2:1092
-1792:0:2905
-1793:3:2851
-1794:0:2905
-1795:2:1097
-1796:0:2905
-1797:3:2850
-1798:0:2905
-1799:2:1098
-1800:0:2903
-1801:3:2851
-1802:0:2909
-1803:3:1630
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.define b/formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.log b/formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index a346ed9..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10499, errors: 0
-   159431 states, stored
-  1505398 states, matched
-  1664829 transitions (= stored+matched)
-  5794809 atomic steps
-hash conflicts:     62144 (resolved)
-
-Stats on memory usage (in Megabytes):
-   12.772      equivalent memory usage for states (stored*(State-vector + overhead))
-    8.936      actual memory usage for states (compression: 69.96%)
-               state-vector as stored = 31 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  474.651      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 651, "pan.___", state 213, "(1)"
-       line 402, "pan.___", state 348, "(1)"
-       line 398, "pan.___", state 433, "(1)"
-       line 402, "pan.___", state 447, "(1)"
-       line 402, "pan.___", state 547, "(1)"
-       line 159, "pan.___", state 628, "(1)"
-       line 163, "pan.___", state 636, "(1)"
-       line 163, "pan.___", state 637, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 637, "else"
-       line 161, "pan.___", state 642, "((j<1))"
-       line 161, "pan.___", state 642, "((j>=1))"
-       line 167, "pan.___", state 648, "(1)"
-       line 167, "pan.___", state 649, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 649, "else"
-       line 159, "pan.___", state 660, "(1)"
-       line 163, "pan.___", state 668, "(1)"
-       line 163, "pan.___", state 669, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 669, "else"
-       line 161, "pan.___", state 674, "((j<1))"
-       line 161, "pan.___", state 674, "((j>=1))"
-       line 167, "pan.___", state 680, "(1)"
-       line 167, "pan.___", state 681, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 681, "else"
-       line 201, "pan.___", state 686, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 201, "pan.___", state 686, "else"
-       line 213, "pan.___", state 690, "((i<1))"
-       line 213, "pan.___", state 690, "((i>=1))"
-       line 159, "pan.___", state 696, "(1)"
-       line 163, "pan.___", state 704, "(1)"
-       line 163, "pan.___", state 705, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 705, "else"
-       line 161, "pan.___", state 710, "((j<1))"
-       line 161, "pan.___", state 710, "((j>=1))"
-       line 167, "pan.___", state 716, "(1)"
-       line 167, "pan.___", state 717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 717, "else"
-       line 201, "pan.___", state 722, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 201, "pan.___", state 722, "else"
-       line 220, "pan.___", state 723, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 220, "pan.___", state 723, "else"
-       line 355, "pan.___", state 729, "((sighand_exec==1))"
-       line 355, "pan.___", state 729, "else"
-       line 361, "pan.___", state 732, "sighand_exec = 1"
-       line 398, "pan.___", state 745, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 747, "(1)"
-       line 398, "pan.___", state 748, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 748, "else"
-       line 398, "pan.___", state 751, "(1)"
-       line 402, "pan.___", state 759, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 761, "(1)"
-       line 402, "pan.___", state 762, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 762, "else"
-       line 402, "pan.___", state 765, "(1)"
-       line 402, "pan.___", state 766, "(1)"
-       line 402, "pan.___", state 766, "(1)"
-       line 400, "pan.___", state 771, "((i<1))"
-       line 400, "pan.___", state 771, "((i>=1))"
-       line 407, "pan.___", state 777, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 790, "(1)"
-       line 408, "pan.___", state 791, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 791, "else"
-       line 408, "pan.___", state 794, "(1)"
-       line 408, "pan.___", state 795, "(1)"
-       line 408, "pan.___", state 795, "(1)"
-       line 412, "pan.___", state 803, "(1)"
-       line 412, "pan.___", state 804, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 804, "else"
-       line 412, "pan.___", state 807, "(1)"
-       line 412, "pan.___", state 808, "(1)"
-       line 412, "pan.___", state 808, "(1)"
-       line 410, "pan.___", state 813, "((i<1))"
-       line 410, "pan.___", state 813, "((i>=1))"
-       line 417, "pan.___", state 820, "(1)"
-       line 417, "pan.___", state 821, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 821, "else"
-       line 417, "pan.___", state 824, "(1)"
-       line 417, "pan.___", state 825, "(1)"
-       line 417, "pan.___", state 825, "(1)"
-       line 419, "pan.___", state 828, "(1)"
-       line 419, "pan.___", state 828, "(1)"
-       line 361, "pan.___", state 837, "sighand_exec = 1"
-       line 402, "pan.___", state 868, "(1)"
-       line 402, "pan.___", state 965, "(1)"
-       line 398, "pan.___", state 1050, "(1)"
-       line 402, "pan.___", state 1064, "(1)"
-       line 402, "pan.___", state 1164, "(1)"
-       line 159, "pan.___", state 1245, "(1)"
-       line 163, "pan.___", state 1253, "(1)"
-       line 163, "pan.___", state 1254, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1254, "else"
-       line 161, "pan.___", state 1259, "((j<1))"
-       line 161, "pan.___", state 1259, "((j>=1))"
-       line 167, "pan.___", state 1265, "(1)"
-       line 167, "pan.___", state 1266, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1266, "else"
-       line 159, "pan.___", state 1277, "(1)"
-       line 163, "pan.___", state 1285, "(1)"
-       line 163, "pan.___", state 1286, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 1286, "else"
-       line 161, "pan.___", state 1291, "((j<1))"
-       line 161, "pan.___", state 1291, "((j>=1))"
-       line 167, "pan.___", state 1297, "(1)"
-       line 167, "pan.___", state 1298, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 1298, "else"
-       line 201, "pan.___", state 1303, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 201, "pan.___", state 1303, "else"
-       line 213, "pan.___", state 1307, "((i<1))"
-       line 213, "pan.___", state 1307, "((i>=1))"
-       line 159, "pan.___", state 1313, "(1)"
-       line 163, "pan.___", state 1321, "(1)"
-       line 163, "pan.___", state 1322, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1322, "else"
-       line 161, "pan.___", state 1327, "((j<1))"
-       line 161, "pan.___", state 1327, "((j>=1))"
-       line 167, "pan.___", state 1333, "(1)"
-       line 167, "pan.___", state 1334, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1334, "else"
-       line 201, "pan.___", state 1339, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 201, "pan.___", state 1339, "else"
-       line 220, "pan.___", state 1340, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 220, "pan.___", state 1340, "else"
-       line 355, "pan.___", state 1346, "((sighand_exec==1))"
-       line 355, "pan.___", state 1346, "else"
-       line 361, "pan.___", state 1349, "sighand_exec = 1"
-       line 398, "pan.___", state 1362, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 1364, "(1)"
-       line 398, "pan.___", state 1365, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 1365, "else"
-       line 398, "pan.___", state 1368, "(1)"
-       line 402, "pan.___", state 1376, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 1378, "(1)"
-       line 402, "pan.___", state 1379, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 1379, "else"
-       line 402, "pan.___", state 1382, "(1)"
-       line 402, "pan.___", state 1383, "(1)"
-       line 402, "pan.___", state 1383, "(1)"
-       line 400, "pan.___", state 1388, "((i<1))"
-       line 400, "pan.___", state 1388, "((i>=1))"
-       line 407, "pan.___", state 1394, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 1407, "(1)"
-       line 408, "pan.___", state 1408, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 1408, "else"
-       line 408, "pan.___", state 1411, "(1)"
-       line 408, "pan.___", state 1412, "(1)"
-       line 408, "pan.___", state 1412, "(1)"
-       line 412, "pan.___", state 1420, "(1)"
-       line 412, "pan.___", state 1421, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 1421, "else"
-       line 412, "pan.___", state 1424, "(1)"
-       line 412, "pan.___", state 1425, "(1)"
-       line 412, "pan.___", state 1425, "(1)"
-       line 410, "pan.___", state 1430, "((i<1))"
-       line 410, "pan.___", state 1430, "((i>=1))"
-       line 417, "pan.___", state 1437, "(1)"
-       line 417, "pan.___", state 1438, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1438, "else"
-       line 417, "pan.___", state 1441, "(1)"
-       line 417, "pan.___", state 1442, "(1)"
-       line 417, "pan.___", state 1442, "(1)"
-       line 419, "pan.___", state 1445, "(1)"
-       line 419, "pan.___", state 1445, "(1)"
-       line 361, "pan.___", state 1454, "sighand_exec = 1"
-       line 701, "pan.___", state 1596, "-end-"
-       (111 of 1596 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 747, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.23 seconds
-pan: rate  129618.7 states/second
-pan: avg transition delay 7.3881e-07 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.spin.input b/formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index 808154e..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu/result-signal-over-writer/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index 522df0a..0000000
+++ /dev/null
@@ -1,1677 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2833
-2:4:2785
-3:4:2788
-4:4:2788
-5:4:2791
-6:4:2799
-7:4:2799
-8:4:2802
-9:4:2808
-10:4:2812
-11:4:2812
-12:4:2815
-13:4:2823
-14:4:2827
-15:4:2828
-16:0:2833
-17:4:2830
-18:0:2833
-19:3:1283
-20:0:2833
-21:3:1289
-22:0:2833
-23:3:1290
-24:0:2833
-25:3:1291
-26:3:1295
-27:3:1296
-28:3:1304
-29:3:1305
-30:3:1309
-31:3:1310
-32:3:1318
-33:3:1323
-34:3:1327
-35:3:1328
-36:3:1335
-37:3:1336
-38:3:1347
-39:3:1348
-40:3:1349
-41:3:1360
-42:3:1365
-43:3:1366
-44:0:2833
-45:3:1378
-46:0:2833
-47:3:1380
-48:3:1381
-49:0:2833
-50:3:1385
-51:3:1389
-52:3:1390
-53:3:1398
-54:3:1399
-55:3:1403
-56:3:1404
-57:3:1412
-58:3:1417
-59:3:1418
-60:3:1429
-61:3:1430
-62:3:1441
-63:3:1442
-64:3:1443
-65:3:1454
-66:3:1459
-67:3:1460
-68:0:2833
-69:3:1472
-70:0:2833
-71:3:1474
-72:0:2833
-73:3:1475
-74:0:2833
-75:3:1485
-76:0:2833
-77:3:1486
-78:0:2833
-79:3:1487
-80:3:1494
-81:3:1495
-82:3:1502
-83:3:1507
-84:0:2833
-85:3:1518
-86:0:2833
-87:3:1519
-88:3:1526
-89:3:1527
-90:3:1534
-91:3:1539
-92:0:2833
-93:3:1550
-94:0:2833
-95:3:1555
-96:3:1562
-97:3:1563
-98:3:1570
-99:3:1575
-100:0:2833
-101:3:1590
-102:0:2833
-103:3:1592
-104:0:2833
-105:3:1593
-106:3:1597
-107:3:1598
-108:3:1606
-109:3:1607
-110:3:1611
-111:3:1612
-112:3:1620
-113:3:1625
-114:3:1629
-115:3:1630
-116:3:1637
-117:3:1638
-118:3:1649
-119:3:1650
-120:3:1651
-121:3:1662
-122:3:1667
-123:3:1668
-124:0:2833
-125:3:1680
-126:0:2833
-127:3:1682
-128:0:2833
-129:3:1685
-130:3:1686
-131:3:1698
-132:3:1699
-133:3:1703
-134:3:1704
-135:3:1712
-136:3:1717
-137:3:1721
-138:3:1722
-139:3:1729
-140:3:1730
-141:3:1741
-142:3:1742
-143:3:1743
-144:3:1754
-145:3:1759
-146:3:1760
-147:0:2833
-148:3:1772
-149:0:2833
-150:3:1774
-151:0:2833
-152:3:1775
-153:0:2833
-154:3:1776
-155:0:2833
-156:3:1777
-157:0:2833
-158:3:1778
-159:3:1782
-160:3:1783
-161:3:1791
-162:3:1792
-163:3:1796
-164:3:1797
-165:3:1805
-166:3:1810
-167:3:1814
-168:3:1815
-169:3:1822
-170:3:1823
-171:3:1834
-172:3:1835
-173:3:1836
-174:3:1847
-175:3:1852
-176:3:1853
-177:0:2833
-178:3:1865
-179:0:2833
-180:3:1974
-181:0:2833
-182:3:2072
-183:0:2833
-184:3:2073
-185:0:2833
-186:3:2077
-187:0:2833
-188:3:2083
-189:3:2087
-190:3:2088
-191:3:2096
-192:3:2097
-193:3:2101
-194:3:2102
-195:3:2110
-196:3:2115
-197:3:2119
-198:3:2120
-199:3:2127
-200:3:2128
-201:3:2139
-202:3:2140
-203:3:2141
-204:3:2152
-205:3:2157
-206:3:2158
-207:0:2833
-208:3:2170
-209:0:2833
-210:3:2172
-211:0:2833
-212:3:2173
-213:3:2177
-214:3:2178
-215:3:2186
-216:3:2187
-217:3:2191
-218:3:2192
-219:3:2200
-220:3:2205
-221:3:2209
-222:3:2210
-223:3:2217
-224:3:2218
-225:3:2229
-226:3:2230
-227:3:2231
-228:3:2242
-229:3:2247
-230:3:2248
-231:0:2833
-232:3:2260
-233:0:2833
-234:3:2262
-235:0:2833
-236:3:2265
-237:3:2266
-238:3:2278
-239:3:2279
-240:3:2283
-241:3:2284
-242:3:2292
-243:3:2297
-244:3:2301
-245:3:2302
-246:3:2309
-247:3:2310
-248:3:2321
-249:3:2322
-250:3:2323
-251:3:2334
-252:3:2339
-253:3:2340
-254:0:2833
-255:3:2352
-256:0:2833
-257:3:2354
-258:0:2833
-259:3:2355
-260:0:2833
-261:3:2356
-262:0:2833
-263:3:2357
-264:0:2833
-265:3:2358
-266:3:2362
-267:3:2363
-268:3:2371
-269:3:2372
-270:3:2376
-271:3:2377
-272:3:2385
-273:3:2390
-274:3:2394
-275:3:2395
-276:3:2402
-277:3:2403
-278:3:2414
-279:3:2415
-280:3:2416
-281:3:2427
-282:3:2432
-283:3:2433
-284:0:2833
-285:3:2445
-286:0:2833
-287:3:2554
-288:0:2833
-289:3:2652
-290:0:2833
-291:3:2653
-292:0:2833
-293:3:2657
-294:0:2833
-295:3:2663
-296:0:2833
-297:3:2664
-298:3:2671
-299:3:2672
-300:3:2679
-301:3:2684
-302:0:2833
-303:3:2695
-304:0:2833
-305:3:2696
-306:3:2703
-307:3:2704
-308:3:2711
-309:3:2716
-310:0:2833
-311:3:2727
-312:0:2833
-313:3:2732
-314:3:2739
-315:3:2740
-316:3:2747
-317:3:2752
-318:0:2833
-319:3:2767
-320:0:2833
-321:3:2769
-322:0:2833
-323:3:2770
-324:0:2833
-325:3:1290
-326:0:2833
-327:3:1291
-328:3:1295
-329:3:1296
-330:3:1304
-331:3:1305
-332:3:1309
-333:3:1310
-334:3:1318
-335:3:1323
-336:3:1327
-337:3:1328
-338:3:1335
-339:3:1336
-340:3:1347
-341:3:1348
-342:3:1349
-343:3:1360
-344:3:1365
-345:3:1366
-346:0:2833
-347:3:1378
-348:0:2833
-349:3:1380
-350:3:1381
-351:0:2833
-352:3:1385
-353:3:1389
-354:3:1390
-355:3:1398
-356:3:1399
-357:3:1403
-358:3:1404
-359:3:1412
-360:3:1417
-361:3:1418
-362:3:1429
-363:3:1430
-364:3:1441
-365:3:1442
-366:3:1443
-367:3:1454
-368:3:1459
-369:3:1460
-370:0:2833
-371:3:1472
-372:0:2833
-373:3:1474
-374:0:2833
-375:3:1475
-376:0:2833
-377:3:1485
-378:0:2833
-379:3:1486
-380:0:2833
-381:3:1487
-382:3:1494
-383:3:1495
-384:3:1502
-385:3:1507
-386:0:2833
-387:3:1518
-388:0:2833
-389:3:1519
-390:3:1526
-391:3:1527
-392:3:1534
-393:3:1539
-394:0:2833
-395:3:1550
-396:0:2833
-397:3:1555
-398:3:1562
-399:3:1563
-400:3:1570
-401:3:1575
-402:0:2833
-403:3:1590
-404:0:2833
-405:3:1592
-406:0:2833
-407:3:1593
-408:3:1597
-409:3:1598
-410:3:1606
-411:3:1607
-412:3:1611
-413:3:1612
-414:3:1620
-415:3:1625
-416:3:1629
-417:3:1630
-418:3:1637
-419:3:1638
-420:3:1649
-421:3:1650
-422:3:1651
-423:3:1662
-424:3:1667
-425:3:1668
-426:0:2833
-427:3:1680
-428:0:2833
-429:3:1682
-430:0:2833
-431:3:1685
-432:3:1686
-433:3:1698
-434:3:1699
-435:3:1703
-436:3:1704
-437:3:1712
-438:3:1717
-439:3:1721
-440:3:1722
-441:3:1729
-442:3:1730
-443:3:1741
-444:3:1742
-445:3:1743
-446:3:1754
-447:3:1759
-448:3:1760
-449:0:2833
-450:3:1772
-451:0:2833
-452:3:1774
-453:0:2833
-454:3:1775
-455:0:2833
-456:3:1776
-457:0:2833
-458:3:1777
-459:0:2833
-460:3:1778
-461:3:1782
-462:3:1783
-463:3:1791
-464:3:1792
-465:3:1796
-466:3:1797
-467:3:1805
-468:3:1810
-469:3:1814
-470:3:1815
-471:3:1822
-472:3:1823
-473:3:1834
-474:3:1835
-475:3:1836
-476:3:1847
-477:3:1852
-478:3:1853
-479:0:2833
-480:3:1865
-481:0:2833
-482:3:1974
-483:0:2833
-484:3:2072
-485:0:2833
-486:3:2073
-487:0:2833
-488:3:2077
-489:0:2833
-490:3:2083
-491:3:2087
-492:3:2088
-493:3:2096
-494:3:2097
-495:3:2101
-496:3:2102
-497:3:2110
-498:3:2115
-499:3:2119
-500:3:2120
-501:3:2127
-502:3:2128
-503:3:2139
-504:3:2140
-505:3:2141
-506:3:2152
-507:3:2157
-508:3:2158
-509:0:2833
-510:3:2170
-511:0:2833
-512:3:2172
-513:0:2833
-514:3:2173
-515:3:2177
-516:3:2178
-517:3:2186
-518:3:2187
-519:3:2191
-520:3:2192
-521:3:2200
-522:3:2205
-523:3:2209
-524:3:2210
-525:3:2217
-526:3:2218
-527:3:2229
-528:3:2230
-529:3:2231
-530:3:2242
-531:3:2247
-532:3:2248
-533:0:2833
-534:3:2260
-535:0:2833
-536:3:2262
-537:0:2833
-538:3:2265
-539:3:2266
-540:3:2278
-541:3:2279
-542:3:2283
-543:3:2284
-544:3:2292
-545:3:2297
-546:3:2301
-547:3:2302
-548:3:2309
-549:3:2310
-550:3:2321
-551:3:2322
-552:3:2323
-553:3:2334
-554:3:2339
-555:3:2340
-556:0:2833
-557:3:2352
-558:0:2833
-559:3:2354
-560:0:2833
-561:3:2355
-562:0:2833
-563:3:2356
-564:0:2833
-565:3:2357
-566:0:2833
-567:3:2358
-568:3:2362
-569:3:2363
-570:3:2371
-571:3:2372
-572:3:2376
-573:3:2377
-574:3:2385
-575:3:2390
-576:3:2394
-577:3:2395
-578:3:2402
-579:3:2403
-580:3:2414
-581:3:2415
-582:3:2416
-583:3:2427
-584:3:2432
-585:3:2433
-586:0:2833
-587:3:2445
-588:0:2833
-589:3:2554
-590:0:2833
-591:3:2652
-592:0:2833
-593:3:2653
-594:0:2833
-595:3:2657
-596:0:2833
-597:3:2663
-598:0:2833
-599:3:2664
-600:3:2671
-601:3:2672
-602:3:2679
-603:3:2684
-604:0:2833
-605:3:2695
-606:0:2833
-607:3:2696
-608:3:2703
-609:3:2704
-610:3:2711
-611:3:2716
-612:0:2833
-613:3:2727
-614:0:2833
-615:3:2732
-616:3:2739
-617:3:2740
-618:3:2747
-619:3:2752
-620:0:2833
-621:3:2767
-622:0:2833
-623:3:2769
-624:0:2833
-625:3:2770
-626:0:2833
-627:3:1290
-628:0:2833
-629:3:1291
-630:3:1295
-631:3:1296
-632:3:1304
-633:3:1305
-634:3:1309
-635:3:1310
-636:3:1318
-637:3:1323
-638:3:1327
-639:3:1328
-640:3:1335
-641:3:1336
-642:3:1347
-643:3:1348
-644:3:1349
-645:3:1360
-646:3:1365
-647:3:1366
-648:0:2833
-649:3:1378
-650:0:2833
-651:3:1380
-652:3:1381
-653:0:2833
-654:3:1385
-655:3:1389
-656:3:1390
-657:3:1398
-658:3:1399
-659:3:1403
-660:3:1404
-661:3:1412
-662:3:1417
-663:3:1418
-664:3:1429
-665:3:1430
-666:3:1441
-667:3:1442
-668:3:1443
-669:3:1454
-670:3:1459
-671:3:1460
-672:0:2833
-673:3:1472
-674:0:2833
-675:3:1474
-676:0:2833
-677:3:1475
-678:0:2833
-679:3:1485
-680:0:2833
-681:3:1486
-682:0:2833
-683:3:1487
-684:3:1494
-685:3:1495
-686:3:1502
-687:3:1507
-688:0:2833
-689:3:1518
-690:0:2833
-691:3:1519
-692:3:1526
-693:3:1527
-694:3:1534
-695:3:1539
-696:0:2833
-697:3:1550
-698:0:2833
-699:3:1555
-700:3:1562
-701:3:1563
-702:3:1570
-703:3:1575
-704:0:2833
-705:3:1590
-706:0:2833
-707:3:1592
-708:0:2833
-709:3:1593
-710:3:1597
-711:3:1598
-712:3:1606
-713:3:1607
-714:3:1611
-715:3:1612
-716:3:1620
-717:3:1625
-718:3:1629
-719:3:1630
-720:3:1637
-721:3:1638
-722:3:1649
-723:3:1650
-724:3:1651
-725:3:1662
-726:3:1667
-727:3:1668
-728:0:2833
-729:3:1680
-730:0:2833
-731:3:1682
-732:0:2833
-733:3:1685
-734:3:1686
-735:3:1698
-736:3:1699
-737:3:1703
-738:3:1704
-739:3:1712
-740:3:1717
-741:3:1721
-742:3:1722
-743:3:1729
-744:3:1730
-745:3:1741
-746:3:1742
-747:3:1743
-748:3:1754
-749:3:1759
-750:3:1760
-751:0:2833
-752:3:1772
-753:0:2833
-754:3:1774
-755:0:2833
-756:3:1775
-757:0:2833
-758:3:1776
-759:0:2833
-760:3:1777
-761:0:2833
-762:3:1778
-763:3:1782
-764:3:1783
-765:3:1791
-766:3:1792
-767:3:1796
-768:3:1797
-769:3:1805
-770:3:1810
-771:3:1814
-772:3:1815
-773:3:1822
-774:3:1823
-775:3:1834
-776:3:1835
-777:3:1836
-778:3:1847
-779:3:1852
-780:3:1853
-781:0:2833
-782:3:1865
-783:0:2833
-784:3:1974
-785:0:2833
-786:3:2072
-787:0:2833
-788:3:2073
-789:0:2833
-790:3:2077
-791:0:2833
-792:3:2083
-793:3:2087
-794:3:2088
-795:3:2096
-796:3:2097
-797:3:2101
-798:3:2102
-799:3:2110
-800:3:2115
-801:3:2119
-802:3:2120
-803:3:2127
-804:3:2128
-805:3:2139
-806:3:2140
-807:3:2141
-808:3:2152
-809:3:2157
-810:3:2158
-811:0:2833
-812:3:2170
-813:0:2833
-814:3:2172
-815:0:2833
-816:3:2173
-817:3:2177
-818:3:2178
-819:3:2186
-820:3:2187
-821:3:2191
-822:3:2192
-823:3:2200
-824:3:2205
-825:3:2209
-826:3:2210
-827:3:2217
-828:3:2218
-829:3:2229
-830:3:2230
-831:3:2231
-832:3:2242
-833:3:2247
-834:3:2248
-835:0:2833
-836:3:2260
-837:0:2833
-838:3:2262
-839:0:2833
-840:3:2265
-841:3:2266
-842:3:2278
-843:3:2279
-844:3:2283
-845:3:2284
-846:3:2292
-847:3:2297
-848:3:2301
-849:3:2302
-850:3:2309
-851:3:2310
-852:3:2321
-853:3:2322
-854:3:2323
-855:3:2334
-856:3:2339
-857:3:2340
-858:0:2833
-859:3:2352
-860:0:2833
-861:3:2354
-862:0:2833
-863:3:2355
-864:0:2833
-865:3:2356
-866:0:2833
-867:3:2357
-868:0:2833
-869:3:2358
-870:3:2362
-871:3:2363
-872:3:2371
-873:3:2372
-874:3:2376
-875:3:2377
-876:3:2385
-877:3:2390
-878:3:2394
-879:3:2395
-880:3:2402
-881:3:2403
-882:3:2414
-883:3:2415
-884:3:2416
-885:3:2427
-886:3:2432
-887:3:2433
-888:0:2833
-889:3:2445
-890:0:2833
-891:3:2554
-892:0:2833
-893:3:2652
-894:0:2833
-895:3:2653
-896:0:2833
-897:3:2657
-898:0:2833
-899:3:2663
-900:0:2833
-901:3:2664
-902:3:2671
-903:3:2672
-904:3:2679
-905:3:2684
-906:0:2833
-907:3:2695
-908:0:2833
-909:3:2696
-910:3:2703
-911:3:2704
-912:3:2711
-913:3:2716
-914:0:2833
-915:3:2727
-916:0:2833
-917:3:2732
-918:3:2739
-919:3:2740
-920:3:2747
-921:3:2752
-922:0:2833
-923:3:2767
-924:0:2833
-925:3:2769
-926:0:2833
-927:3:2770
-928:0:2833
-929:3:1290
-930:0:2833
-931:3:1291
-932:3:1295
-933:3:1296
-934:3:1304
-935:3:1305
-936:3:1309
-937:3:1310
-938:3:1318
-939:3:1323
-940:3:1327
-941:3:1328
-942:3:1335
-943:3:1336
-944:3:1347
-945:3:1348
-946:3:1349
-947:3:1360
-948:3:1365
-949:3:1366
-950:0:2833
-951:3:1378
-952:0:2833
-953:3:1380
-954:3:1381
-955:0:2833
-956:3:1385
-957:3:1389
-958:3:1390
-959:3:1398
-960:3:1399
-961:3:1403
-962:3:1404
-963:3:1412
-964:3:1417
-965:3:1418
-966:3:1429
-967:3:1430
-968:3:1441
-969:3:1442
-970:3:1443
-971:3:1454
-972:3:1459
-973:3:1460
-974:0:2833
-975:3:1472
-976:0:2833
-977:3:1474
-978:0:2833
-979:3:1475
-980:0:2833
-981:3:1485
-982:0:2833
-983:3:1486
-984:0:2833
-985:3:1487
-986:3:1494
-987:3:1495
-988:3:1502
-989:3:1507
-990:0:2833
-991:3:1518
-992:0:2833
-993:3:1519
-994:3:1526
-995:3:1527
-996:3:1534
-997:3:1539
-998:0:2833
-999:3:1550
-1000:0:2833
-1001:3:1555
-1002:3:1562
-1003:3:1563
-1004:3:1570
-1005:3:1575
-1006:0:2833
-1007:3:1590
-1008:0:2833
-1009:3:1592
-1010:0:2833
-1011:3:1593
-1012:3:1597
-1013:3:1598
-1014:3:1606
-1015:3:1607
-1016:3:1611
-1017:3:1612
-1018:3:1620
-1019:3:1625
-1020:3:1629
-1021:3:1630
-1022:3:1637
-1023:3:1638
-1024:3:1649
-1025:3:1650
-1026:3:1651
-1027:3:1662
-1028:3:1667
-1029:3:1668
-1030:0:2833
-1031:3:1680
-1032:0:2833
-1033:3:1682
-1034:0:2833
-1035:3:1685
-1036:3:1686
-1037:3:1698
-1038:3:1699
-1039:3:1703
-1040:3:1704
-1041:3:1712
-1042:3:1717
-1043:3:1721
-1044:3:1722
-1045:3:1729
-1046:3:1730
-1047:3:1741
-1048:3:1742
-1049:3:1743
-1050:3:1754
-1051:3:1759
-1052:3:1760
-1053:0:2833
-1054:3:1772
-1055:0:2833
-1056:3:1774
-1057:0:2833
-1058:3:1775
-1059:0:2833
-1060:3:1776
-1061:0:2833
-1062:3:1777
-1063:0:2833
-1064:3:1778
-1065:3:1782
-1066:3:1783
-1067:3:1791
-1068:3:1792
-1069:3:1796
-1070:3:1797
-1071:3:1805
-1072:3:1810
-1073:3:1814
-1074:3:1815
-1075:3:1822
-1076:3:1823
-1077:3:1834
-1078:3:1835
-1079:3:1836
-1080:3:1847
-1081:3:1852
-1082:3:1853
-1083:0:2833
-1084:3:1865
-1085:0:2833
-1086:3:1974
-1087:0:2833
-1088:3:2072
-1089:0:2833
-1090:3:2073
-1091:0:2833
-1092:3:2077
-1093:0:2833
-1094:3:2083
-1095:3:2087
-1096:3:2088
-1097:3:2096
-1098:3:2097
-1099:3:2101
-1100:3:2102
-1101:3:2110
-1102:3:2115
-1103:3:2119
-1104:3:2120
-1105:3:2127
-1106:3:2128
-1107:3:2139
-1108:3:2140
-1109:3:2141
-1110:3:2152
-1111:3:2157
-1112:3:2158
-1113:0:2833
-1114:3:2170
-1115:0:2833
-1116:3:2172
-1117:0:2833
-1118:3:2173
-1119:3:2177
-1120:3:2178
-1121:3:2186
-1122:3:2187
-1123:3:2191
-1124:3:2192
-1125:3:2200
-1126:3:2205
-1127:3:2209
-1128:3:2210
-1129:3:2217
-1130:3:2218
-1131:3:2229
-1132:3:2230
-1133:3:2231
-1134:3:2242
-1135:3:2247
-1136:3:2248
-1137:0:2833
-1138:3:2260
-1139:0:2833
-1140:3:2262
-1141:0:2833
-1142:3:2265
-1143:3:2266
-1144:3:2278
-1145:3:2279
-1146:3:2283
-1147:3:2284
-1148:3:2292
-1149:3:2297
-1150:3:2301
-1151:3:2302
-1152:3:2309
-1153:3:2310
-1154:3:2321
-1155:3:2322
-1156:3:2323
-1157:3:2334
-1158:3:2339
-1159:3:2340
-1160:0:2833
-1161:3:2352
-1162:0:2833
-1163:3:2354
-1164:0:2833
-1165:3:2355
-1166:0:2833
-1167:3:2356
-1168:0:2833
-1169:3:2357
-1170:0:2833
-1171:3:2358
-1172:3:2362
-1173:3:2363
-1174:3:2371
-1175:3:2372
-1176:3:2376
-1177:3:2377
-1178:3:2385
-1179:3:2390
-1180:3:2394
-1181:3:2395
-1182:3:2402
-1183:3:2403
-1184:3:2414
-1185:3:2415
-1186:3:2416
-1187:3:2427
-1188:3:2432
-1189:3:2433
-1190:0:2833
-1191:3:2445
-1192:0:2833
-1193:3:2554
-1194:0:2833
-1195:3:2652
-1196:0:2833
-1197:3:2653
-1198:0:2833
-1199:3:2657
-1200:0:2833
-1201:3:2663
-1202:0:2833
-1203:3:2664
-1204:3:2671
-1205:3:2672
-1206:3:2679
-1207:3:2684
-1208:0:2833
-1209:3:2695
-1210:0:2833
-1211:3:2696
-1212:3:2703
-1213:3:2704
-1214:3:2711
-1215:3:2716
-1216:0:2833
-1217:3:2727
-1218:0:2833
-1219:3:2732
-1220:3:2739
-1221:3:2740
-1222:3:2747
-1223:3:2752
-1224:0:2833
-1225:3:2767
-1226:0:2833
-1227:3:2769
-1228:0:2833
-1229:3:2770
-1230:0:2833
-1231:3:1290
-1232:0:2833
-1233:3:1291
-1234:3:1295
-1235:3:1296
-1236:3:1304
-1237:3:1305
-1238:3:1309
-1239:3:1310
-1240:3:1318
-1241:3:1323
-1242:3:1327
-1243:3:1328
-1244:3:1335
-1245:3:1336
-1246:3:1347
-1247:3:1348
-1248:3:1349
-1249:3:1360
-1250:3:1365
-1251:3:1366
-1252:0:2833
-1253:3:1378
-1254:0:2833
-1255:3:1380
-1256:3:1381
-1257:0:2833
-1258:3:1385
-1259:3:1389
-1260:3:1390
-1261:3:1398
-1262:3:1399
-1263:3:1403
-1264:3:1404
-1265:3:1412
-1266:3:1417
-1267:3:1418
-1268:3:1429
-1269:3:1430
-1270:3:1441
-1271:3:1442
-1272:3:1443
-1273:3:1454
-1274:3:1459
-1275:3:1460
-1276:0:2833
-1277:3:1472
-1278:0:2833
-1279:3:1474
-1280:0:2833
-1281:3:1475
-1282:0:2833
-1283:3:1485
-1284:0:2833
-1285:3:1486
-1286:0:2833
-1287:3:1487
-1288:3:1494
-1289:3:1495
-1290:3:1502
-1291:3:1507
-1292:0:2833
-1293:3:1518
-1294:0:2833
-1295:2:662
-1296:0:2833
-1297:2:668
-1298:0:2833
-1299:2:669
-1300:0:2833
-1301:2:670
-1302:0:2833
-1303:2:671
-1304:0:2833
-1305:1:2
-1306:0:2833
-1307:2:672
-1308:0:2833
-1309:1:8
-1310:0:2833
-1311:1:9
-1312:0:2833
-1313:1:10
-1314:0:2833
-1315:1:11
-1316:0:2833
-1317:2:671
-1318:0:2833
-1319:1:12
-1320:1:16
-1321:1:17
-1322:1:25
-1323:1:26
-1324:1:30
-1325:1:31
-1326:1:39
-1327:1:44
-1328:1:48
-1329:1:49
-1330:1:56
-1331:1:57
-1332:1:68
-1333:1:69
-1334:1:70
-1335:1:81
-1336:1:93
-1337:1:94
-1338:0:2833
-1339:2:672
-1340:0:2833
-1341:1:99
-1342:0:2833
-1343:2:673
-1344:0:2833
-1345:2:674
-1346:0:2833
-1347:2:685
-1348:0:2833
-1349:2:686
-1350:0:2833
-1351:2:687
-1352:2:691
-1353:2:692
-1354:2:700
-1355:2:701
-1356:2:705
-1357:2:706
-1358:2:714
-1359:2:719
-1360:2:723
-1361:2:724
-1362:2:731
-1363:2:732
-1364:2:743
-1365:2:744
-1366:2:745
-1367:2:756
-1368:2:768
-1369:2:769
-1370:0:2833
-1371:2:774
-1372:0:2833
-1373:2:775
-1374:2:779
-1375:2:780
-1376:2:788
-1377:2:789
-1378:2:793
-1379:2:794
-1380:2:802
-1381:2:807
-1382:2:811
-1383:2:812
-1384:2:819
-1385:2:820
-1386:2:831
-1387:2:832
-1388:2:833
-1389:2:844
-1390:2:856
-1391:2:857
-1392:0:2833
-1393:2:862
-1394:0:2833
-1395:2:863
-1396:0:2833
-1397:2:864
-1398:2:868
-1399:2:869
-1400:2:877
-1401:2:878
-1402:2:882
-1403:2:883
-1404:2:891
-1405:2:896
-1406:2:900
-1407:2:901
-1408:2:908
-1409:2:909
-1410:2:920
-1411:2:921
-1412:2:922
-1413:2:933
-1414:2:945
-1415:2:946
-1416:0:2833
-1417:2:951
-1418:0:2833
-1419:2:1059
-1420:0:2833
-1421:2:1060
-1422:0:2833
-1423:2:1065
-1424:0:2833
-1425:2:1070
-1426:0:2833
-1427:3:1519
-1428:3:1526
-1429:3:1529
-1430:3:1530
-1431:3:1534
-1432:3:1539
-1433:0:2833
-1434:3:1550
-1435:0:2833
-1436:3:1555
-1437:3:1562
-1438:3:1563
-1439:3:1570
-1440:3:1575
-1441:0:2833
-1442:3:1590
-1443:0:2833
-1444:3:1592
-1445:0:2833
-1446:3:1593
-1447:3:1597
-1448:3:1598
-1449:3:1606
-1450:3:1607
-1451:3:1611
-1452:3:1612
-1453:3:1620
-1454:3:1625
-1455:3:1629
-1456:3:1630
-1457:3:1637
-1458:3:1638
-1459:3:1649
-1460:3:1650
-1461:3:1651
-1462:3:1662
-1463:3:1667
-1464:3:1668
-1465:0:2833
-1466:3:1680
-1467:0:2833
-1468:3:1682
-1469:0:2833
-1470:3:1685
-1471:3:1686
-1472:3:1698
-1473:3:1699
-1474:3:1703
-1475:3:1704
-1476:3:1712
-1477:3:1717
-1478:3:1721
-1479:3:1722
-1480:3:1729
-1481:3:1730
-1482:3:1741
-1483:3:1742
-1484:3:1743
-1485:3:1754
-1486:3:1759
-1487:3:1760
-1488:0:2833
-1489:3:1772
-1490:0:2833
-1491:3:1774
-1492:0:2833
-1493:3:1775
-1494:0:2833
-1495:3:1776
-1496:0:2833
-1497:3:1777
-1498:0:2833
-1499:3:1778
-1500:3:1782
-1501:3:1783
-1502:3:1791
-1503:3:1792
-1504:3:1796
-1505:3:1797
-1506:3:1805
-1507:3:1810
-1508:3:1814
-1509:3:1815
-1510:3:1822
-1511:3:1823
-1512:3:1834
-1513:3:1835
-1514:3:1836
-1515:3:1847
-1516:3:1852
-1517:3:1853
-1518:0:2833
-1519:3:1865
-1520:0:2833
-1521:3:1974
-1522:0:2833
-1523:3:2072
-1524:0:2833
-1525:3:2073
-1526:0:2833
-1527:3:2077
-1528:0:2833
-1529:3:2083
-1530:3:2087
-1531:3:2088
-1532:3:2096
-1533:3:2097
-1534:3:2101
-1535:3:2102
-1536:3:2110
-1537:3:2115
-1538:3:2119
-1539:3:2120
-1540:3:2127
-1541:3:2128
-1542:3:2139
-1543:3:2140
-1544:3:2141
-1545:3:2152
-1546:3:2157
-1547:3:2158
-1548:0:2833
-1549:3:2170
-1550:0:2833
-1551:3:2172
-1552:0:2833
-1553:3:2173
-1554:3:2177
-1555:3:2178
-1556:3:2186
-1557:3:2187
-1558:3:2191
-1559:3:2192
-1560:3:2200
-1561:3:2205
-1562:3:2209
-1563:3:2210
-1564:3:2217
-1565:3:2218
-1566:3:2229
-1567:3:2230
-1568:3:2231
-1569:3:2242
-1570:3:2247
-1571:3:2248
-1572:0:2833
-1573:3:2260
-1574:0:2833
-1575:3:2262
-1576:0:2833
-1577:3:2265
-1578:3:2266
-1579:3:2278
-1580:3:2279
-1581:3:2283
-1582:3:2284
-1583:3:2292
-1584:3:2297
-1585:3:2301
-1586:3:2302
-1587:3:2309
-1588:3:2310
-1589:3:2321
-1590:3:2322
-1591:3:2323
-1592:3:2334
-1593:3:2339
-1594:3:2340
-1595:0:2833
-1596:3:2352
-1597:0:2833
-1598:3:2354
-1599:0:2833
-1600:3:2355
-1601:0:2833
-1602:3:2356
-1603:0:2833
-1604:3:2357
-1605:0:2833
-1606:3:2358
-1607:3:2362
-1608:3:2363
-1609:3:2371
-1610:3:2372
-1611:3:2376
-1612:3:2377
-1613:3:2385
-1614:3:2390
-1615:3:2394
-1616:3:2395
-1617:3:2402
-1618:3:2403
-1619:3:2414
-1620:3:2415
-1621:3:2416
-1622:3:2427
-1623:3:2432
-1624:3:2433
-1625:0:2833
-1626:3:2445
-1627:0:2833
-1628:3:2554
-1629:0:2833
-1630:3:2652
-1631:0:2833
-1632:3:2653
-1633:0:2833
-1634:3:2657
-1635:0:2833
-1636:3:2663
-1637:0:2833
-1638:3:2664
-1639:3:2671
-1640:3:2672
-1641:3:2679
-1642:3:2684
-1643:0:2833
-1644:3:2695
-1645:0:2833
-1646:3:2696
-1647:3:2703
-1648:3:2706
-1649:3:2707
-1650:3:2711
-1651:3:2716
-1652:0:2833
-1653:3:2727
-1654:0:2833
-1655:3:2732
-1656:3:2739
-1657:3:2740
-1658:3:2747
-1659:3:2752
-1660:0:2833
-1661:3:2767
-1662:0:2833
-1663:3:2769
-1664:0:2833
-1665:3:2770
-1666:0:2833
-1667:3:2773
-1668:0:2833
-1669:3:2778
-1670:0:2833
-1671:2:1071
-1672:0:2831
-1673:3:2779
-1674:0:2837
-1675:1:288
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.define b/formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.log b/formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.log
deleted file mode 100644 (file)
index f854175..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 6934, errors: 0
-     7626 states, stored
-    67235 states, matched
-    74861 transitions (= stored+matched)
-   248896 atomic steps
-hash conflicts:       113 (resolved)
-
-Stats on memory usage (in Megabytes):
-    0.611      equivalent memory usage for states (stored*(State-vector + overhead))
-    0.867      actual memory usage for states (unsuccessful compression: 141.88%)
-               state-vector as stored = 91 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  466.545      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 160, "(1)"
-       line 651, "pan.___", state 213, "(1)"
-       line 174, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 233, "(1)"
-       line 159, "pan.___", state 254, "(1)"
-       line 163, "pan.___", state 262, "(1)"
-       line 167, "pan.___", state 274, "(1)"
-       line 174, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 317, "(1)"
-       line 163, "pan.___", state 325, "(1)"
-       line 167, "pan.___", state 337, "(1)"
-       line 174, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 384, "(1)"
-       line 163, "pan.___", state 392, "(1)"
-       line 167, "pan.___", state 404, "(1)"
-       line 398, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 441, "(1)"
-       line 407, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 470, "(1)"
-       line 417, "pan.___", state 500, "(1)"
-       line 398, "pan.___", state 526, "(1)"
-       line 402, "pan.___", state 540, "(1)"
-       line 407, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 599, "(1)"
-       line 402, "pan.___", state 640, "(1)"
-       line 407, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 699, "(1)"
-       line 174, "pan.___", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 722, "(1)"
-       line 178, "pan.___", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 731, "(1)"
-       line 178, "pan.___", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 732, "else"
-       line 176, "pan.___", state 737, "((j<1))"
-       line 176, "pan.___", state 737, "((j>=1))"
-       line 182, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 752, "(1)"
-       line 163, "pan.___", state 760, "(1)"
-       line 163, "pan.___", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 761, "else"
-       line 161, "pan.___", state 766, "((j<1))"
-       line 161, "pan.___", state 766, "((j>=1))"
-       line 167, "pan.___", state 772, "(1)"
-       line 167, "pan.___", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 773, "else"
-       line 169, "pan.___", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 776, "else"
-       line 174, "pan.___", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 785, "(1)"
-       line 178, "pan.___", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 794, "(1)"
-       line 178, "pan.___", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 795, "else"
-       line 176, "pan.___", state 800, "((j<1))"
-       line 176, "pan.___", state 800, "((j>=1))"
-       line 182, "pan.___", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 815, "(1)"
-       line 163, "pan.___", state 823, "(1)"
-       line 163, "pan.___", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 824, "else"
-       line 161, "pan.___", state 829, "((j<1))"
-       line 161, "pan.___", state 829, "((j>=1))"
-       line 167, "pan.___", state 835, "(1)"
-       line 167, "pan.___", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 836, "else"
-       line 169, "pan.___", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 839, "else"
-       line 201, "pan.___", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 841, "else"
-       line 213, "pan.___", state 845, "((i<1))"
-       line 213, "pan.___", state 845, "((i>=1))"
-       line 174, "pan.___", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 852, "(1)"
-       line 178, "pan.___", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 861, "(1)"
-       line 178, "pan.___", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 862, "else"
-       line 176, "pan.___", state 867, "((j<1))"
-       line 176, "pan.___", state 867, "((j>=1))"
-       line 182, "pan.___", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 882, "(1)"
-       line 163, "pan.___", state 890, "(1)"
-       line 163, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 891, "else"
-       line 161, "pan.___", state 896, "((j<1))"
-       line 161, "pan.___", state 896, "((j>=1))"
-       line 167, "pan.___", state 902, "(1)"
-       line 167, "pan.___", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 903, "else"
-       line 169, "pan.___", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 906, "else"
-       line 201, "pan.___", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 908, "else"
-       line 220, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 909, "else"
-       line 355, "pan.___", state 915, "((sighand_exec==1))"
-       line 355, "pan.___", state 915, "else"
-       line 361, "pan.___", state 918, "sighand_exec = 1"
-       line 398, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 933, "(1)"
-       line 398, "pan.___", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 934, "else"
-       line 398, "pan.___", state 937, "(1)"
-       line 402, "pan.___", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 947, "(1)"
-       line 402, "pan.___", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 948, "else"
-       line 402, "pan.___", state 951, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 400, "pan.___", state 957, "((i<1))"
-       line 400, "pan.___", state 957, "((i>=1))"
-       line 407, "pan.___", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 976, "(1)"
-       line 408, "pan.___", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 977, "else"
-       line 408, "pan.___", state 980, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 412, "pan.___", state 989, "(1)"
-       line 412, "pan.___", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 990, "else"
-       line 412, "pan.___", state 993, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 410, "pan.___", state 999, "((i<1))"
-       line 410, "pan.___", state 999, "((i>=1))"
-       line 417, "pan.___", state 1006, "(1)"
-       line 417, "pan.___", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1007, "else"
-       line 417, "pan.___", state 1010, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 361, "pan.___", state 1023, "sighand_exec = 1"
-       line 178, "pan.___", state 1048, "(1)"
-       line 182, "pan.___", state 1059, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1069, "(1)"
-       line 163, "pan.___", state 1077, "(1)"
-       line 167, "pan.___", state 1089, "(1)"
-       line 174, "pan.___", state 1100, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1109, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1122, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1132, "(1)"
-       line 163, "pan.___", state 1140, "(1)"
-       line 167, "pan.___", state 1152, "(1)"
-       line 174, "pan.___", state 1167, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1176, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1189, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1199, "(1)"
-       line 163, "pan.___", state 1207, "(1)"
-       line 167, "pan.___", state 1219, "(1)"
-       line 701, "pan.___", state 1258, "-end-"
-       (128 of 1258 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 747, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 0.05 seconds
-pan: rate    152520 states/second
-pan: avg transition delay 6.679e-07 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.spin.input b/formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index c796593..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define SINGLE_FLIP
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.spin.input.trail b/formal-model/urcu/result-signal-over-writer/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 84cf653..0000000
+++ /dev/null
@@ -1,1379 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:2904
-2:4:2856
-3:4:2859
-4:4:2859
-5:4:2862
-6:4:2870
-7:4:2870
-8:4:2873
-9:4:2879
-10:4:2883
-11:4:2883
-12:4:2886
-13:4:2894
-14:4:2898
-15:4:2899
-16:0:2904
-17:4:2901
-18:0:2904
-19:3:1655
-20:0:2904
-21:3:1661
-22:0:2904
-23:3:1662
-24:0:2904
-25:3:1663
-26:3:1667
-27:3:1668
-28:3:1676
-29:3:1677
-30:3:1681
-31:3:1682
-32:3:1690
-33:3:1695
-34:3:1699
-35:3:1700
-36:3:1707
-37:3:1708
-38:3:1719
-39:3:1720
-40:3:1721
-41:3:1732
-42:3:1737
-43:3:1738
-44:0:2904
-45:3:1750
-46:0:2904
-47:3:1752
-48:3:1753
-49:0:2904
-50:3:1757
-51:3:1761
-52:3:1762
-53:3:1770
-54:3:1771
-55:3:1775
-56:3:1776
-57:3:1784
-58:3:1789
-59:3:1790
-60:3:1801
-61:3:1802
-62:3:1813
-63:3:1814
-64:3:1815
-65:3:1826
-66:3:1831
-67:3:1832
-68:0:2904
-69:3:1844
-70:0:2904
-71:3:1846
-72:0:2904
-73:3:1847
-74:0:2904
-75:3:1857
-76:0:2904
-77:3:1858
-78:0:2904
-79:3:1862
-80:3:1863
-81:3:1867
-82:3:1871
-83:3:1872
-84:3:1876
-85:3:1884
-86:3:1885
-87:3:1890
-88:3:1897
-89:3:1898
-90:3:1905
-91:3:1910
-92:0:2904
-93:3:1921
-94:0:2904
-95:3:1925
-96:3:1926
-97:3:1930
-98:3:1934
-99:3:1935
-100:3:1939
-101:3:1947
-102:3:1948
-103:3:1953
-104:3:1960
-105:3:1961
-106:3:1968
-107:3:1973
-108:0:2904
-109:3:1984
-110:0:2904
-111:3:1992
-112:3:1993
-113:3:1997
-114:3:2001
-115:3:2002
-116:3:2006
-117:3:2014
-118:3:2015
-119:3:2020
-120:3:2027
-121:3:2028
-122:3:2035
-123:3:2040
-124:0:2904
-125:3:2055
-126:0:2904
-127:3:2057
-128:0:2904
-129:3:2058
-130:3:2062
-131:3:2063
-132:3:2071
-133:3:2072
-134:3:2076
-135:3:2077
-136:3:2085
-137:3:2090
-138:3:2094
-139:3:2095
-140:3:2102
-141:3:2103
-142:3:2114
-143:3:2115
-144:3:2116
-145:3:2127
-146:3:2132
-147:3:2133
-148:0:2904
-149:3:2145
-150:0:2904
-151:3:2147
-152:0:2904
-153:3:2150
-154:3:2151
-155:3:2163
-156:3:2164
-157:3:2168
-158:3:2169
-159:3:2177
-160:3:2182
-161:3:2186
-162:3:2187
-163:3:2194
-164:3:2195
-165:3:2206
-166:3:2207
-167:3:2208
-168:3:2219
-169:3:2224
-170:3:2225
-171:0:2904
-172:3:2237
-173:0:2904
-174:3:2239
-175:0:2904
-176:3:2240
-177:0:2904
-178:3:2241
-179:0:2904
-180:3:2242
-181:0:2904
-182:3:2243
-183:3:2247
-184:3:2248
-185:3:2256
-186:3:2257
-187:3:2261
-188:3:2262
-189:3:2270
-190:3:2275
-191:3:2279
-192:3:2280
-193:3:2287
-194:3:2288
-195:3:2299
-196:3:2300
-197:3:2301
-198:3:2312
-199:3:2317
-200:3:2318
-201:0:2904
-202:3:2330
-203:0:2904
-204:3:2532
-205:0:2904
-206:3:2630
-207:0:2904
-208:3:2631
-209:0:2904
-210:3:2635
-211:0:2904
-212:3:2641
-213:0:2904
-214:3:2645
-215:3:2646
-216:3:2650
-217:3:2654
-218:3:2655
-219:3:2659
-220:3:2667
-221:3:2668
-222:3:2673
-223:3:2680
-224:3:2681
-225:3:2688
-226:3:2693
-227:0:2904
-228:3:2704
-229:0:2904
-230:3:2708
-231:3:2709
-232:3:2713
-233:3:2717
-234:3:2718
-235:3:2722
-236:3:2730
-237:3:2731
-238:3:2736
-239:3:2743
-240:3:2744
-241:3:2751
-242:3:2756
-243:0:2904
-244:3:2767
-245:0:2904
-246:3:2775
-247:3:2776
-248:3:2780
-249:3:2784
-250:3:2785
-251:3:2789
-252:3:2797
-253:3:2798
-254:3:2803
-255:3:2810
-256:3:2811
-257:3:2818
-258:3:2823
-259:0:2904
-260:3:2838
-261:0:2904
-262:3:2840
-263:0:2904
-264:3:2841
-265:0:2904
-266:3:1662
-267:0:2904
-268:3:1663
-269:3:1667
-270:3:1668
-271:3:1676
-272:3:1677
-273:3:1681
-274:3:1682
-275:3:1690
-276:3:1695
-277:3:1699
-278:3:1700
-279:3:1707
-280:3:1708
-281:3:1719
-282:3:1720
-283:3:1721
-284:3:1732
-285:3:1737
-286:3:1738
-287:0:2904
-288:3:1750
-289:0:2904
-290:3:1752
-291:3:1753
-292:0:2904
-293:3:1757
-294:3:1761
-295:3:1762
-296:3:1770
-297:3:1771
-298:3:1775
-299:3:1776
-300:3:1784
-301:3:1789
-302:3:1790
-303:3:1801
-304:3:1802
-305:3:1813
-306:3:1814
-307:3:1815
-308:3:1826
-309:3:1831
-310:3:1832
-311:0:2904
-312:3:1844
-313:0:2904
-314:3:1846
-315:0:2904
-316:3:1847
-317:0:2904
-318:3:1857
-319:0:2904
-320:3:1858
-321:0:2904
-322:3:1862
-323:3:1863
-324:3:1867
-325:3:1871
-326:3:1872
-327:3:1876
-328:3:1884
-329:3:1885
-330:3:1890
-331:3:1897
-332:3:1898
-333:3:1905
-334:3:1910
-335:0:2904
-336:3:1921
-337:0:2904
-338:3:1925
-339:3:1926
-340:3:1930
-341:3:1934
-342:3:1935
-343:3:1939
-344:3:1947
-345:3:1948
-346:3:1953
-347:3:1960
-348:3:1961
-349:3:1968
-350:3:1973
-351:0:2904
-352:3:1984
-353:0:2904
-354:3:1992
-355:3:1993
-356:3:1997
-357:3:2001
-358:3:2002
-359:3:2006
-360:3:2014
-361:3:2015
-362:3:2020
-363:3:2027
-364:3:2028
-365:3:2035
-366:3:2040
-367:0:2904
-368:3:2055
-369:0:2904
-370:3:2057
-371:0:2904
-372:3:2058
-373:3:2062
-374:3:2063
-375:3:2071
-376:3:2072
-377:3:2076
-378:3:2077
-379:3:2085
-380:3:2090
-381:3:2094
-382:3:2095
-383:3:2102
-384:3:2103
-385:3:2114
-386:3:2115
-387:3:2116
-388:3:2127
-389:3:2132
-390:3:2133
-391:0:2904
-392:3:2145
-393:0:2904
-394:3:2147
-395:0:2904
-396:3:2150
-397:3:2151
-398:3:2163
-399:3:2164
-400:3:2168
-401:3:2169
-402:3:2177
-403:3:2182
-404:3:2186
-405:3:2187
-406:3:2194
-407:3:2195
-408:3:2206
-409:3:2207
-410:3:2208
-411:3:2219
-412:3:2224
-413:3:2225
-414:0:2904
-415:3:2237
-416:0:2904
-417:3:2239
-418:0:2904
-419:3:2240
-420:0:2904
-421:3:2241
-422:0:2904
-423:3:2242
-424:0:2904
-425:3:2243
-426:3:2247
-427:3:2248
-428:3:2256
-429:3:2257
-430:3:2261
-431:3:2262
-432:3:2270
-433:3:2275
-434:3:2279
-435:3:2280
-436:3:2287
-437:3:2288
-438:3:2299
-439:3:2300
-440:3:2301
-441:3:2312
-442:3:2317
-443:3:2318
-444:0:2904
-445:3:2330
-446:0:2904
-447:3:2532
-448:0:2904
-449:3:2630
-450:0:2904
-451:3:2631
-452:0:2904
-453:3:2635
-454:0:2904
-455:3:2641
-456:0:2904
-457:3:2645
-458:3:2646
-459:3:2650
-460:3:2654
-461:3:2655
-462:3:2659
-463:3:2667
-464:3:2668
-465:3:2673
-466:3:2680
-467:3:2681
-468:3:2688
-469:3:2693
-470:0:2904
-471:3:2704
-472:0:2904
-473:3:2708
-474:3:2709
-475:3:2713
-476:3:2717
-477:3:2718
-478:3:2722
-479:3:2730
-480:3:2731
-481:3:2736
-482:3:2743
-483:3:2744
-484:3:2751
-485:3:2756
-486:0:2904
-487:3:2767
-488:0:2904
-489:3:2775
-490:3:2776
-491:3:2780
-492:3:2784
-493:3:2785
-494:3:2789
-495:3:2797
-496:3:2798
-497:3:2803
-498:3:2810
-499:3:2811
-500:3:2818
-501:3:2823
-502:0:2904
-503:3:2838
-504:0:2904
-505:3:2840
-506:0:2904
-507:3:2841
-508:0:2904
-509:3:1662
-510:0:2904
-511:3:1663
-512:3:1667
-513:3:1668
-514:3:1676
-515:3:1677
-516:3:1681
-517:3:1682
-518:3:1690
-519:3:1695
-520:3:1699
-521:3:1700
-522:3:1707
-523:3:1708
-524:3:1719
-525:3:1720
-526:3:1721
-527:3:1732
-528:3:1737
-529:3:1738
-530:0:2904
-531:3:1750
-532:0:2904
-533:3:1752
-534:3:1753
-535:0:2904
-536:3:1757
-537:3:1761
-538:3:1762
-539:3:1770
-540:3:1771
-541:3:1775
-542:3:1776
-543:3:1784
-544:3:1789
-545:3:1790
-546:3:1801
-547:3:1802
-548:3:1813
-549:3:1814
-550:3:1815
-551:3:1826
-552:3:1831
-553:3:1832
-554:0:2904
-555:3:1844
-556:0:2904
-557:3:1846
-558:0:2904
-559:3:1847
-560:0:2904
-561:3:1857
-562:0:2904
-563:3:1858
-564:0:2904
-565:3:1862
-566:3:1863
-567:3:1867
-568:3:1871
-569:3:1872
-570:3:1876
-571:3:1884
-572:3:1885
-573:3:1890
-574:3:1897
-575:3:1898
-576:3:1905
-577:3:1910
-578:0:2904
-579:3:1921
-580:0:2904
-581:3:1925
-582:3:1926
-583:3:1930
-584:3:1934
-585:3:1935
-586:3:1939
-587:3:1947
-588:3:1948
-589:3:1953
-590:3:1960
-591:3:1961
-592:3:1968
-593:3:1973
-594:0:2904
-595:3:1984
-596:0:2904
-597:3:1992
-598:3:1993
-599:3:1997
-600:3:2001
-601:3:2002
-602:3:2006
-603:3:2014
-604:3:2015
-605:3:2020
-606:3:2027
-607:3:2028
-608:3:2035
-609:3:2040
-610:0:2904
-611:3:2055
-612:0:2904
-613:3:2057
-614:0:2904
-615:3:2058
-616:3:2062
-617:3:2063
-618:3:2071
-619:3:2072
-620:3:2076
-621:3:2077
-622:3:2085
-623:3:2090
-624:3:2094
-625:3:2095
-626:3:2102
-627:3:2103
-628:3:2114
-629:3:2115
-630:3:2116
-631:3:2127
-632:3:2132
-633:3:2133
-634:0:2904
-635:3:2145
-636:0:2904
-637:3:2147
-638:0:2904
-639:3:2150
-640:3:2151
-641:3:2163
-642:3:2164
-643:3:2168
-644:3:2169
-645:3:2177
-646:3:2182
-647:3:2186
-648:3:2187
-649:3:2194
-650:3:2195
-651:3:2206
-652:3:2207
-653:3:2208
-654:3:2219
-655:3:2224
-656:3:2225
-657:0:2904
-658:3:2237
-659:0:2904
-660:3:2239
-661:0:2904
-662:3:2240
-663:0:2904
-664:3:2241
-665:0:2904
-666:3:2242
-667:0:2904
-668:3:2243
-669:3:2247
-670:3:2248
-671:3:2256
-672:3:2257
-673:3:2261
-674:3:2262
-675:3:2270
-676:3:2275
-677:3:2279
-678:3:2280
-679:3:2287
-680:3:2288
-681:3:2299
-682:3:2300
-683:3:2301
-684:3:2312
-685:3:2317
-686:3:2318
-687:0:2904
-688:3:2330
-689:0:2904
-690:3:2532
-691:0:2904
-692:3:2630
-693:0:2904
-694:3:2631
-695:0:2904
-696:3:2635
-697:0:2904
-698:3:2641
-699:0:2904
-700:3:2645
-701:3:2646
-702:3:2650
-703:3:2654
-704:3:2655
-705:3:2659
-706:3:2667
-707:3:2668
-708:3:2673
-709:3:2680
-710:3:2681
-711:3:2688
-712:3:2693
-713:0:2904
-714:3:2704
-715:0:2904
-716:3:2708
-717:3:2709
-718:3:2713
-719:3:2717
-720:3:2718
-721:3:2722
-722:3:2730
-723:3:2731
-724:3:2736
-725:3:2743
-726:3:2744
-727:3:2751
-728:3:2756
-729:0:2904
-730:3:2767
-731:0:2904
-732:3:2775
-733:3:2776
-734:3:2780
-735:3:2784
-736:3:2785
-737:3:2789
-738:3:2797
-739:3:2798
-740:3:2803
-741:3:2810
-742:3:2811
-743:3:2818
-744:3:2823
-745:0:2904
-746:3:2838
-747:0:2904
-748:3:2840
-749:0:2904
-750:3:2841
-751:0:2904
-752:3:1662
-753:0:2904
-754:3:1663
-755:3:1667
-756:3:1668
-757:3:1676
-758:3:1677
-759:3:1681
-760:3:1682
-761:3:1690
-762:3:1695
-763:3:1699
-764:3:1700
-765:3:1707
-766:3:1708
-767:3:1719
-768:3:1720
-769:3:1721
-770:3:1732
-771:3:1737
-772:3:1738
-773:0:2904
-774:3:1750
-775:0:2904
-776:3:1752
-777:3:1753
-778:0:2904
-779:3:1757
-780:3:1761
-781:3:1762
-782:3:1770
-783:3:1771
-784:3:1775
-785:3:1776
-786:3:1784
-787:3:1789
-788:3:1790
-789:3:1801
-790:3:1802
-791:3:1813
-792:3:1814
-793:3:1815
-794:3:1826
-795:3:1831
-796:3:1832
-797:0:2904
-798:3:1844
-799:0:2904
-800:3:1846
-801:0:2904
-802:3:1847
-803:0:2904
-804:3:1857
-805:0:2904
-806:3:1858
-807:0:2904
-808:3:1862
-809:3:1863
-810:3:1867
-811:3:1871
-812:3:1872
-813:3:1876
-814:3:1884
-815:3:1885
-816:3:1890
-817:3:1897
-818:3:1898
-819:3:1905
-820:3:1910
-821:0:2904
-822:3:1921
-823:0:2904
-824:3:1925
-825:3:1926
-826:3:1930
-827:3:1934
-828:3:1935
-829:3:1939
-830:3:1947
-831:3:1948
-832:3:1953
-833:3:1960
-834:3:1961
-835:3:1968
-836:3:1973
-837:0:2904
-838:3:1984
-839:0:2904
-840:3:1992
-841:3:1993
-842:3:1997
-843:3:2001
-844:3:2002
-845:3:2006
-846:3:2014
-847:3:2015
-848:3:2020
-849:3:2027
-850:3:2028
-851:3:2035
-852:3:2040
-853:0:2904
-854:3:2055
-855:0:2904
-856:3:2057
-857:0:2904
-858:3:2058
-859:3:2062
-860:3:2063
-861:3:2071
-862:3:2072
-863:3:2076
-864:3:2077
-865:3:2085
-866:3:2090
-867:3:2094
-868:3:2095
-869:3:2102
-870:3:2103
-871:3:2114
-872:3:2115
-873:3:2116
-874:3:2127
-875:3:2132
-876:3:2133
-877:0:2904
-878:3:2145
-879:0:2904
-880:3:2147
-881:0:2904
-882:3:2150
-883:3:2151
-884:3:2163
-885:3:2164
-886:3:2168
-887:3:2169
-888:3:2177
-889:3:2182
-890:3:2186
-891:3:2187
-892:3:2194
-893:3:2195
-894:3:2206
-895:3:2207
-896:3:2208
-897:3:2219
-898:3:2224
-899:3:2225
-900:0:2904
-901:3:2237
-902:0:2904
-903:3:2239
-904:0:2904
-905:3:2240
-906:0:2904
-907:3:2241
-908:0:2904
-909:3:2242
-910:0:2904
-911:3:2243
-912:3:2247
-913:3:2248
-914:3:2256
-915:3:2257
-916:3:2261
-917:3:2262
-918:3:2270
-919:3:2275
-920:3:2279
-921:3:2280
-922:3:2287
-923:3:2288
-924:3:2299
-925:3:2300
-926:3:2301
-927:3:2312
-928:3:2317
-929:3:2318
-930:0:2904
-931:3:2330
-932:0:2904
-933:3:2532
-934:0:2904
-935:3:2630
-936:0:2904
-937:3:2631
-938:0:2904
-939:3:2635
-940:0:2904
-941:3:2641
-942:0:2904
-943:3:2645
-944:3:2646
-945:3:2650
-946:3:2654
-947:3:2655
-948:3:2659
-949:3:2667
-950:3:2668
-951:3:2673
-952:3:2680
-953:3:2681
-954:3:2688
-955:3:2693
-956:0:2904
-957:3:2704
-958:0:2904
-959:2:848
-960:0:2904
-961:2:854
-962:0:2904
-963:2:855
-964:0:2904
-965:2:856
-966:0:2904
-967:2:857
-968:0:2904
-969:1:2
-970:0:2904
-971:2:858
-972:0:2904
-973:1:8
-974:0:2904
-975:1:9
-976:0:2904
-977:1:10
-978:0:2904
-979:1:11
-980:0:2904
-981:2:857
-982:0:2904
-983:1:12
-984:1:16
-985:1:17
-986:1:25
-987:1:26
-988:1:30
-989:1:31
-990:1:39
-991:1:44
-992:1:48
-993:1:49
-994:1:63
-995:1:64
-996:1:68
-997:1:69
-998:1:70
-999:1:81
-1000:1:86
-1001:1:87
-1002:0:2904
-1003:2:858
-1004:0:2904
-1005:1:99
-1006:0:2904
-1007:2:859
-1008:0:2904
-1009:2:860
-1010:0:2904
-1011:2:871
-1012:0:2904
-1013:2:872
-1014:0:2904
-1015:2:873
-1016:2:877
-1017:2:878
-1018:2:886
-1019:2:887
-1020:2:891
-1021:2:892
-1022:2:900
-1023:2:905
-1024:2:909
-1025:2:910
-1026:2:924
-1027:2:925
-1028:2:929
-1029:2:930
-1030:2:931
-1031:2:942
-1032:2:947
-1033:2:948
-1034:0:2904
-1035:2:960
-1036:0:2904
-1037:2:961
-1038:2:965
-1039:2:966
-1040:2:974
-1041:2:975
-1042:2:979
-1043:2:980
-1044:2:988
-1045:2:993
-1046:2:997
-1047:2:998
-1048:2:1012
-1049:2:1013
-1050:2:1017
-1051:2:1018
-1052:2:1019
-1053:2:1030
-1054:2:1035
-1055:2:1036
-1056:0:2904
-1057:2:1048
-1058:0:2904
-1059:2:1049
-1060:0:2904
-1061:3:2708
-1062:3:2709
-1063:3:2713
-1064:3:2717
-1065:3:2718
-1066:3:2722
-1067:3:2730
-1068:3:2731
-1069:3:2736
-1070:3:2743
-1071:3:2744
-1072:3:2751
-1073:3:2756
-1074:0:2904
-1075:3:2767
-1076:0:2904
-1077:3:2775
-1078:3:2776
-1079:3:2780
-1080:3:2784
-1081:3:2785
-1082:3:2789
-1083:3:2797
-1084:3:2798
-1085:3:2803
-1086:3:2810
-1087:3:2811
-1088:3:2818
-1089:3:2823
-1090:0:2904
-1091:3:2838
-1092:0:2904
-1093:3:2840
-1094:0:2904
-1095:3:2841
-1096:0:2904
-1097:3:1662
-1098:0:2904
-1099:3:1663
-1100:3:1667
-1101:3:1668
-1102:3:1676
-1103:3:1677
-1104:3:1681
-1105:3:1682
-1106:3:1690
-1107:3:1695
-1108:3:1699
-1109:3:1700
-1110:3:1707
-1111:3:1708
-1112:3:1719
-1113:3:1720
-1114:3:1721
-1115:3:1732
-1116:3:1737
-1117:3:1738
-1118:0:2904
-1119:3:1750
-1120:0:2904
-1121:3:1752
-1122:3:1753
-1123:0:2904
-1124:3:1757
-1125:3:1761
-1126:3:1762
-1127:3:1770
-1128:3:1771
-1129:3:1775
-1130:3:1776
-1131:3:1784
-1132:3:1789
-1133:3:1790
-1134:3:1801
-1135:3:1802
-1136:3:1813
-1137:3:1814
-1138:3:1815
-1139:3:1826
-1140:3:1831
-1141:3:1832
-1142:0:2904
-1143:3:1844
-1144:0:2904
-1145:3:1846
-1146:0:2904
-1147:3:1847
-1148:0:2904
-1149:3:1857
-1150:0:2904
-1151:3:1858
-1152:0:2904
-1153:3:1862
-1154:3:1863
-1155:3:1867
-1156:3:1871
-1157:3:1872
-1158:3:1876
-1159:3:1884
-1160:3:1885
-1161:3:1890
-1162:3:1897
-1163:3:1898
-1164:3:1905
-1165:3:1910
-1166:0:2904
-1167:3:1921
-1168:0:2904
-1169:2:1050
-1170:2:1054
-1171:2:1055
-1172:2:1063
-1173:2:1064
-1174:2:1068
-1175:2:1069
-1176:2:1077
-1177:2:1082
-1178:2:1086
-1179:2:1087
-1180:2:1094
-1181:2:1095
-1182:2:1106
-1183:2:1107
-1184:2:1108
-1185:2:1119
-1186:2:1131
-1187:2:1132
-1188:0:2904
-1189:2:1137
-1190:0:2904
-1191:2:1338
-1192:0:2904
-1193:2:1339
-1194:0:2904
-1195:2:1344
-1196:0:2904
-1197:2:1349
-1198:0:2904
-1199:3:1925
-1200:3:1926
-1201:3:1930
-1202:3:1931
-1203:3:1939
-1204:3:1947
-1205:3:1948
-1206:3:1953
-1207:3:1960
-1208:3:1961
-1209:3:1968
-1210:3:1973
-1211:0:2904
-1212:3:1984
-1213:0:2904
-1214:3:1992
-1215:3:1993
-1216:3:1997
-1217:3:2001
-1218:3:2002
-1219:3:2006
-1220:3:2014
-1221:3:2015
-1222:3:2020
-1223:3:2027
-1224:3:2028
-1225:3:2035
-1226:3:2040
-1227:0:2904
-1228:3:2055
-1229:0:2904
-1230:3:2057
-1231:0:2904
-1232:3:2058
-1233:3:2062
-1234:3:2063
-1235:3:2071
-1236:3:2072
-1237:3:2076
-1238:3:2077
-1239:3:2085
-1240:3:2090
-1241:3:2094
-1242:3:2095
-1243:3:2102
-1244:3:2103
-1245:3:2114
-1246:3:2115
-1247:3:2116
-1248:3:2127
-1249:3:2132
-1250:3:2133
-1251:0:2904
-1252:3:2145
-1253:0:2904
-1254:3:2147
-1255:0:2904
-1256:3:2150
-1257:3:2151
-1258:3:2163
-1259:3:2164
-1260:3:2168
-1261:3:2169
-1262:3:2177
-1263:3:2182
-1264:3:2186
-1265:3:2187
-1266:3:2194
-1267:3:2195
-1268:3:2206
-1269:3:2207
-1270:3:2208
-1271:3:2219
-1272:3:2224
-1273:3:2225
-1274:0:2904
-1275:3:2237
-1276:0:2904
-1277:3:2239
-1278:0:2904
-1279:3:2240
-1280:0:2904
-1281:3:2241
-1282:0:2904
-1283:3:2242
-1284:0:2904
-1285:3:2243
-1286:3:2247
-1287:3:2248
-1288:3:2256
-1289:3:2257
-1290:3:2261
-1291:3:2262
-1292:3:2270
-1293:3:2275
-1294:3:2279
-1295:3:2280
-1296:3:2287
-1297:3:2288
-1298:3:2299
-1299:3:2300
-1300:3:2301
-1301:3:2312
-1302:3:2317
-1303:3:2318
-1304:0:2904
-1305:3:2330
-1306:0:2904
-1307:3:2532
-1308:0:2904
-1309:3:2630
-1310:0:2904
-1311:3:2631
-1312:0:2904
-1313:3:2635
-1314:0:2904
-1315:3:2641
-1316:0:2904
-1317:3:2645
-1318:3:2646
-1319:3:2650
-1320:3:2654
-1321:3:2655
-1322:3:2659
-1323:3:2667
-1324:3:2668
-1325:3:2673
-1326:3:2680
-1327:3:2681
-1328:3:2688
-1329:3:2693
-1330:0:2904
-1331:3:2704
-1332:0:2904
-1333:3:2708
-1334:3:2709
-1335:3:2713
-1336:3:2717
-1337:3:2718
-1338:3:2722
-1339:3:2730
-1340:3:2731
-1341:3:2736
-1342:3:2743
-1343:3:2744
-1344:3:2751
-1345:3:2756
-1346:0:2904
-1347:3:2767
-1348:0:2904
-1349:3:2775
-1350:3:2776
-1351:3:2780
-1352:3:2784
-1353:3:2785
-1354:3:2789
-1355:3:2797
-1356:3:2798
-1357:3:2803
-1358:3:2810
-1359:3:2811
-1360:3:2818
-1361:3:2823
-1362:0:2904
-1363:3:2838
-1364:0:2904
-1365:3:2840
-1366:0:2904
-1367:3:2841
-1368:0:2904
-1369:3:2844
-1370:0:2904
-1371:3:2849
-1372:0:2904
-1373:2:1350
-1374:0:2902
-1375:3:2850
-1376:0:2908
-1377:1:296
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress.ltl b/formal-model/urcu/result-signal-over-writer/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_reader.define b/formal-model/urcu/result-signal-over-writer/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_reader.log b/formal-model/urcu/result-signal-over-writer/urcu_progress_reader.log
deleted file mode 100644 (file)
index a1a6122..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-depth 12: Claim reached state 9 (line 747)
-depth 86: Claim reached state 9 (line 746)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10679, errors: 0
-    38182 states, stored (88898 visited)
-   997091 states, matched
-  1085989 transitions (= visited+matched)
-  3694897 atomic steps
-hash conflicts:      9602 (resolved)
-
-Stats on memory usage (in Megabytes):
-    3.059      equivalent memory usage for states (stored*(State-vector + overhead))
-    2.930      actual memory usage for states (compression: 95.79%)
-               state-vector as stored = 52 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  468.596      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 160, "(1)"
-       line 651, "pan.___", state 213, "(1)"
-       line 174, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 233, "(1)"
-       line 159, "pan.___", state 254, "(1)"
-       line 163, "pan.___", state 262, "(1)"
-       line 167, "pan.___", state 274, "(1)"
-       line 174, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 317, "(1)"
-       line 163, "pan.___", state 325, "(1)"
-       line 167, "pan.___", state 337, "(1)"
-       line 174, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 384, "(1)"
-       line 163, "pan.___", state 392, "(1)"
-       line 167, "pan.___", state 404, "(1)"
-       line 398, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 441, "(1)"
-       line 407, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 470, "(1)"
-       line 417, "pan.___", state 500, "(1)"
-       line 398, "pan.___", state 526, "(1)"
-       line 402, "pan.___", state 540, "(1)"
-       line 407, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 599, "(1)"
-       line 402, "pan.___", state 640, "(1)"
-       line 407, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 699, "(1)"
-       line 174, "pan.___", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 722, "(1)"
-       line 178, "pan.___", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 731, "(1)"
-       line 178, "pan.___", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 732, "else"
-       line 176, "pan.___", state 737, "((j<1))"
-       line 176, "pan.___", state 737, "((j>=1))"
-       line 182, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 752, "(1)"
-       line 163, "pan.___", state 760, "(1)"
-       line 163, "pan.___", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 761, "else"
-       line 161, "pan.___", state 766, "((j<1))"
-       line 161, "pan.___", state 766, "((j>=1))"
-       line 167, "pan.___", state 772, "(1)"
-       line 167, "pan.___", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 773, "else"
-       line 169, "pan.___", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 776, "else"
-       line 174, "pan.___", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 785, "(1)"
-       line 178, "pan.___", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 794, "(1)"
-       line 178, "pan.___", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 795, "else"
-       line 176, "pan.___", state 800, "((j<1))"
-       line 176, "pan.___", state 800, "((j>=1))"
-       line 182, "pan.___", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 815, "(1)"
-       line 163, "pan.___", state 823, "(1)"
-       line 163, "pan.___", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 824, "else"
-       line 161, "pan.___", state 829, "((j<1))"
-       line 161, "pan.___", state 829, "((j>=1))"
-       line 167, "pan.___", state 835, "(1)"
-       line 167, "pan.___", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 836, "else"
-       line 169, "pan.___", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 839, "else"
-       line 201, "pan.___", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 841, "else"
-       line 213, "pan.___", state 845, "((i<1))"
-       line 213, "pan.___", state 845, "((i>=1))"
-       line 174, "pan.___", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 852, "(1)"
-       line 178, "pan.___", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 861, "(1)"
-       line 178, "pan.___", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 862, "else"
-       line 176, "pan.___", state 867, "((j<1))"
-       line 176, "pan.___", state 867, "((j>=1))"
-       line 182, "pan.___", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 882, "(1)"
-       line 163, "pan.___", state 890, "(1)"
-       line 163, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 891, "else"
-       line 161, "pan.___", state 896, "((j<1))"
-       line 161, "pan.___", state 896, "((j>=1))"
-       line 167, "pan.___", state 902, "(1)"
-       line 167, "pan.___", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 903, "else"
-       line 169, "pan.___", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 906, "else"
-       line 201, "pan.___", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 908, "else"
-       line 220, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 909, "else"
-       line 355, "pan.___", state 915, "((sighand_exec==1))"
-       line 355, "pan.___", state 915, "else"
-       line 361, "pan.___", state 918, "sighand_exec = 1"
-       line 398, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 933, "(1)"
-       line 398, "pan.___", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 934, "else"
-       line 398, "pan.___", state 937, "(1)"
-       line 402, "pan.___", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 947, "(1)"
-       line 402, "pan.___", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 948, "else"
-       line 402, "pan.___", state 951, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 400, "pan.___", state 957, "((i<1))"
-       line 400, "pan.___", state 957, "((i>=1))"
-       line 407, "pan.___", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 976, "(1)"
-       line 408, "pan.___", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 977, "else"
-       line 408, "pan.___", state 980, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 412, "pan.___", state 989, "(1)"
-       line 412, "pan.___", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 990, "else"
-       line 412, "pan.___", state 993, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 410, "pan.___", state 999, "((i<1))"
-       line 410, "pan.___", state 999, "((i>=1))"
-       line 417, "pan.___", state 1006, "(1)"
-       line 417, "pan.___", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1007, "else"
-       line 417, "pan.___", state 1010, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 361, "pan.___", state 1023, "sighand_exec = 1"
-       line 402, "pan.___", state 1054, "(1)"
-       line 407, "pan.___", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1113, "(1)"
-       line 402, "pan.___", state 1151, "(1)"
-       line 407, "pan.___", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1210, "(1)"
-       line 398, "pan.___", state 1236, "(1)"
-       line 402, "pan.___", state 1250, "(1)"
-       line 407, "pan.___", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1309, "(1)"
-       line 402, "pan.___", state 1350, "(1)"
-       line 407, "pan.___", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1409, "(1)"
-       line 174, "pan.___", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1432, "(1)"
-       line 178, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1441, "(1)"
-       line 178, "pan.___", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1442, "else"
-       line 176, "pan.___", state 1447, "((j<1))"
-       line 176, "pan.___", state 1447, "((j>=1))"
-       line 182, "pan.___", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1462, "(1)"
-       line 163, "pan.___", state 1470, "(1)"
-       line 163, "pan.___", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1471, "else"
-       line 161, "pan.___", state 1476, "((j<1))"
-       line 161, "pan.___", state 1476, "((j>=1))"
-       line 167, "pan.___", state 1482, "(1)"
-       line 167, "pan.___", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1483, "else"
-       line 169, "pan.___", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 1486, "else"
-       line 174, "pan.___", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 1495, "(1)"
-       line 178, "pan.___", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1504, "(1)"
-       line 178, "pan.___", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 1505, "else"
-       line 176, "pan.___", state 1510, "((j<1))"
-       line 176, "pan.___", state 1510, "((j>=1))"
-       line 182, "pan.___", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1525, "(1)"
-       line 163, "pan.___", state 1533, "(1)"
-       line 163, "pan.___", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 1534, "else"
-       line 161, "pan.___", state 1539, "((j<1))"
-       line 161, "pan.___", state 1539, "((j>=1))"
-       line 167, "pan.___", state 1545, "(1)"
-       line 167, "pan.___", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 1546, "else"
-       line 169, "pan.___", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 1549, "else"
-       line 201, "pan.___", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 1551, "else"
-       line 213, "pan.___", state 1555, "((i<1))"
-       line 213, "pan.___", state 1555, "((i>=1))"
-       line 174, "pan.___", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1562, "(1)"
-       line 178, "pan.___", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1571, "(1)"
-       line 178, "pan.___", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1572, "else"
-       line 176, "pan.___", state 1577, "((j<1))"
-       line 176, "pan.___", state 1577, "((j>=1))"
-       line 182, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1592, "(1)"
-       line 163, "pan.___", state 1600, "(1)"
-       line 163, "pan.___", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1601, "else"
-       line 161, "pan.___", state 1606, "((j<1))"
-       line 161, "pan.___", state 1606, "((j>=1))"
-       line 167, "pan.___", state 1612, "(1)"
-       line 167, "pan.___", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1613, "else"
-       line 169, "pan.___", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 1616, "else"
-       line 201, "pan.___", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 1618, "else"
-       line 220, "pan.___", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 1619, "else"
-       line 355, "pan.___", state 1625, "((sighand_exec==1))"
-       line 355, "pan.___", state 1625, "else"
-       line 361, "pan.___", state 1628, "sighand_exec = 1"
-       line 398, "pan.___", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 1643, "(1)"
-       line 398, "pan.___", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 1644, "else"
-       line 398, "pan.___", state 1647, "(1)"
-       line 402, "pan.___", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 1657, "(1)"
-       line 402, "pan.___", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 1658, "else"
-       line 402, "pan.___", state 1661, "(1)"
-       line 402, "pan.___", state 1662, "(1)"
-       line 402, "pan.___", state 1662, "(1)"
-       line 400, "pan.___", state 1667, "((i<1))"
-       line 400, "pan.___", state 1667, "((i>=1))"
-       line 407, "pan.___", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 1686, "(1)"
-       line 408, "pan.___", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 1687, "else"
-       line 408, "pan.___", state 1690, "(1)"
-       line 408, "pan.___", state 1691, "(1)"
-       line 408, "pan.___", state 1691, "(1)"
-       line 412, "pan.___", state 1699, "(1)"
-       line 412, "pan.___", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 1700, "else"
-       line 412, "pan.___", state 1703, "(1)"
-       line 412, "pan.___", state 1704, "(1)"
-       line 412, "pan.___", state 1704, "(1)"
-       line 410, "pan.___", state 1709, "((i<1))"
-       line 410, "pan.___", state 1709, "((i>=1))"
-       line 417, "pan.___", state 1716, "(1)"
-       line 417, "pan.___", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1717, "else"
-       line 417, "pan.___", state 1720, "(1)"
-       line 417, "pan.___", state 1721, "(1)"
-       line 417, "pan.___", state 1721, "(1)"
-       line 419, "pan.___", state 1724, "(1)"
-       line 419, "pan.___", state 1724, "(1)"
-       line 361, "pan.___", state 1733, "sighand_exec = 1"
-       line 178, "pan.___", state 1758, "(1)"
-       line 182, "pan.___", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1779, "(1)"
-       line 163, "pan.___", state 1787, "(1)"
-       line 167, "pan.___", state 1799, "(1)"
-       line 174, "pan.___", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1842, "(1)"
-       line 163, "pan.___", state 1850, "(1)"
-       line 167, "pan.___", state 1862, "(1)"
-       line 174, "pan.___", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1909, "(1)"
-       line 163, "pan.___", state 1917, "(1)"
-       line 167, "pan.___", state 1929, "(1)"
-       line 701, "pan.___", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 0.85 seconds
-pan: rate 104585.88 states/second
-pan: avg transition delay 7.827e-07 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_reader.spin.input b/formal-model/urcu/result-signal-over-writer/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 5b64404..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define READER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_reader.spin.input.trail b/formal-model/urcu/result-signal-over-writer/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index 7c42af1..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4401
-2:4:4353
-3:4:4356
-4:4:4356
-5:4:4359
-6:4:4367
-7:4:4367
-8:4:4370
-9:4:4376
-10:4:4380
-11:4:4380
-12:4:4383
-13:4:4391
-14:4:4395
-15:4:4396
-16:0:4401
-17:4:4398
-18:0:4401
-19:3:2479
-20:0:4401
-21:3:2485
-22:0:4401
-23:3:2486
-24:0:4401
-25:3:2487
-26:3:2491
-27:3:2492
-28:3:2500
-29:3:2501
-30:3:2505
-31:3:2506
-32:3:2514
-33:3:2519
-34:3:2523
-35:3:2524
-36:3:2531
-37:3:2532
-38:3:2543
-39:3:2544
-40:3:2545
-41:3:2556
-42:3:2561
-43:3:2562
-44:0:4401
-45:3:2574
-46:0:4401
-47:3:2576
-48:3:2577
-49:0:4401
-50:3:2581
-51:3:2585
-52:3:2586
-53:3:2594
-54:3:2595
-55:3:2599
-56:3:2600
-57:3:2608
-58:3:2613
-59:3:2614
-60:3:2625
-61:3:2626
-62:3:2637
-63:3:2638
-64:3:2639
-65:3:2650
-66:3:2655
-67:3:2656
-68:0:4401
-69:3:2668
-70:0:4401
-71:3:2670
-72:0:4401
-73:3:2671
-74:0:4401
-75:3:2681
-76:0:4401
-77:3:2682
-78:0:4401
-79:3:2686
-80:3:2687
-81:3:2691
-82:3:2695
-83:3:2696
-84:3:2700
-85:3:2708
-86:3:2709
-87:3:2714
-88:3:2721
-89:3:2722
-90:3:2729
-91:3:2734
-92:0:4401
-93:3:2745
-94:0:4401
-95:3:2749
-96:3:2750
-97:3:2754
-98:3:2758
-99:3:2759
-100:3:2763
-101:3:2771
-102:3:2772
-103:3:2777
-104:3:2784
-105:3:2785
-106:3:2792
-107:3:2797
-108:0:4401
-109:3:2808
-110:0:4401
-111:3:2816
-112:3:2817
-113:3:2821
-114:3:2825
-115:3:2826
-116:3:2830
-117:3:2838
-118:3:2839
-119:3:2844
-120:3:2851
-121:3:2852
-122:3:2859
-123:3:2864
-124:0:4401
-125:3:2879
-126:0:4401
-127:3:2881
-128:0:4401
-129:3:2882
-130:3:2886
-131:3:2887
-132:3:2895
-133:3:2896
-134:3:2900
-135:3:2901
-136:3:2909
-137:3:2914
-138:3:2918
-139:3:2919
-140:3:2926
-141:3:2927
-142:3:2938
-143:3:2939
-144:3:2940
-145:3:2951
-146:3:2956
-147:3:2957
-148:0:4401
-149:3:2969
-150:0:4401
-151:3:2971
-152:0:4401
-153:3:2974
-154:3:2975
-155:3:2987
-156:3:2988
-157:3:2992
-158:3:2993
-159:3:3001
-160:3:3006
-161:3:3010
-162:3:3011
-163:3:3018
-164:3:3019
-165:3:3030
-166:3:3031
-167:3:3032
-168:3:3043
-169:3:3048
-170:3:3049
-171:0:4401
-172:3:3061
-173:0:4401
-174:3:3063
-175:0:4401
-176:3:3064
-177:0:4401
-178:3:3065
-179:0:4401
-180:3:3066
-181:0:4401
-182:3:3067
-183:3:3071
-184:3:3072
-185:3:3080
-186:3:3081
-187:3:3085
-188:3:3086
-189:3:3094
-190:3:3099
-191:3:3103
-192:3:3104
-193:3:3111
-194:3:3112
-195:3:3123
-196:3:3124
-197:3:3125
-198:3:3136
-199:3:3141
-200:3:3142
-201:0:4401
-202:3:3154
-203:0:4401
-204:3:3356
-205:0:4401
-206:3:3454
-207:0:4401
-208:3:3455
-209:0:4401
-210:3:3459
-211:0:4401
-212:3:3465
-213:3:3469
-214:3:3470
-215:3:3478
-216:3:3479
-217:3:3483
-218:3:3484
-219:3:3492
-220:3:3497
-221:3:3501
-222:3:3502
-223:3:3509
-224:3:3510
-225:3:3521
-226:3:3522
-227:3:3523
-228:3:3534
-229:3:3539
-230:3:3540
-231:0:4401
-232:3:3552
-233:0:4401
-234:3:3554
-235:0:4401
-236:3:3555
-237:3:3559
-238:3:3560
-239:3:3568
-240:3:3569
-241:3:3573
-242:3:3574
-243:3:3582
-244:3:3587
-245:3:3591
-246:3:3592
-247:3:3599
-248:3:3600
-249:3:3611
-250:3:3612
-251:3:3613
-252:3:3624
-253:3:3629
-254:3:3630
-255:0:4401
-256:3:3642
-257:0:4401
-258:3:3644
-259:0:4401
-260:3:3647
-261:3:3648
-262:3:3660
-263:3:3661
-264:3:3665
-265:3:3666
-266:3:3674
-267:3:3679
-268:3:3683
-269:3:3684
-270:3:3691
-271:3:3692
-272:3:3703
-273:3:3704
-274:3:3705
-275:3:3716
-276:3:3721
-277:3:3722
-278:0:4401
-279:3:3734
-280:0:4401
-281:3:3736
-282:0:4401
-283:3:3737
-284:0:4401
-285:3:3738
-286:0:4401
-287:3:3739
-288:0:4401
-289:3:3740
-290:3:3744
-291:3:3745
-292:3:3753
-293:3:3754
-294:3:3758
-295:3:3759
-296:3:3767
-297:3:3772
-298:3:3776
-299:3:3777
-300:3:3784
-301:3:3785
-302:3:3796
-303:3:3797
-304:3:3798
-305:3:3809
-306:3:3814
-307:3:3815
-308:0:4401
-309:3:3827
-310:0:4401
-311:3:4029
-312:0:4401
-313:3:4127
-314:0:4401
-315:3:4128
-316:0:4401
-317:3:4132
-318:0:4401
-319:3:4138
-320:0:4401
-321:3:4142
-322:3:4143
-323:3:4147
-324:3:4151
-325:3:4152
-326:3:4156
-327:3:4164
-328:3:4165
-329:3:4170
-330:3:4177
-331:3:4178
-332:3:4185
-333:3:4190
-334:0:4401
-335:3:4201
-336:0:4401
-337:3:4205
-338:3:4206
-339:3:4210
-340:3:4214
-341:3:4215
-342:3:4219
-343:3:4227
-344:3:4228
-345:3:4233
-346:3:4240
-347:3:4241
-348:3:4248
-349:3:4253
-350:0:4401
-351:3:4264
-352:0:4401
-353:3:4272
-354:3:4273
-355:3:4277
-356:3:4281
-357:3:4282
-358:3:4286
-359:3:4294
-360:3:4295
-361:3:4300
-362:3:4307
-363:3:4308
-364:3:4315
-365:3:4320
-366:0:4401
-367:3:4335
-368:0:4401
-369:3:4337
-370:0:4401
-371:3:4338
-372:0:4401
-373:3:2486
-374:0:4401
-375:3:2487
-376:3:2491
-377:3:2492
-378:3:2500
-379:3:2501
-380:3:2505
-381:3:2506
-382:3:2514
-383:3:2519
-384:3:2523
-385:3:2524
-386:3:2531
-387:3:2532
-388:3:2543
-389:3:2544
-390:3:2545
-391:3:2556
-392:3:2561
-393:3:2562
-394:0:4401
-395:3:2574
-396:0:4401
-397:3:2576
-398:3:2577
-399:0:4401
-400:3:2581
-401:3:2585
-402:3:2586
-403:3:2594
-404:3:2595
-405:3:2599
-406:3:2600
-407:3:2608
-408:3:2613
-409:3:2614
-410:3:2625
-411:3:2626
-412:3:2637
-413:3:2638
-414:3:2639
-415:3:2650
-416:3:2655
-417:3:2656
-418:0:4401
-419:3:2668
-420:0:4401
-421:3:2670
-422:0:4401
-423:3:2671
-424:0:4401
-425:3:2681
-426:0:4401
-427:3:2682
-428:0:4401
-429:3:2686
-430:3:2687
-431:3:2691
-432:3:2695
-433:3:2696
-434:3:2700
-435:3:2708
-436:3:2709
-437:3:2714
-438:3:2721
-439:3:2722
-440:3:2729
-441:3:2734
-442:0:4401
-443:3:2745
-444:0:4401
-445:3:2749
-446:3:2750
-447:3:2754
-448:3:2758
-449:3:2759
-450:3:2763
-451:3:2771
-452:3:2772
-453:3:2777
-454:3:2784
-455:3:2785
-456:3:2792
-457:3:2797
-458:0:4401
-459:3:2808
-460:0:4401
-461:3:2816
-462:3:2817
-463:3:2821
-464:3:2825
-465:3:2826
-466:3:2830
-467:3:2838
-468:3:2839
-469:3:2844
-470:3:2851
-471:3:2852
-472:3:2859
-473:3:2864
-474:0:4401
-475:3:2879
-476:0:4401
-477:3:2881
-478:0:4401
-479:3:2882
-480:3:2886
-481:3:2887
-482:3:2895
-483:3:2896
-484:3:2900
-485:3:2901
-486:3:2909
-487:3:2914
-488:3:2918
-489:3:2919
-490:3:2926
-491:3:2927
-492:3:2938
-493:3:2939
-494:3:2940
-495:3:2951
-496:3:2956
-497:3:2957
-498:0:4401
-499:3:2969
-500:0:4401
-501:3:2971
-502:0:4401
-503:3:2974
-504:3:2975
-505:3:2987
-506:3:2988
-507:3:2992
-508:3:2993
-509:3:3001
-510:3:3006
-511:3:3010
-512:3:3011
-513:3:3018
-514:3:3019
-515:3:3030
-516:3:3031
-517:3:3032
-518:3:3043
-519:3:3048
-520:3:3049
-521:0:4401
-522:3:3061
-523:0:4401
-524:3:3063
-525:0:4401
-526:3:3064
-527:0:4401
-528:3:3065
-529:0:4401
-530:3:3066
-531:0:4401
-532:3:3067
-533:3:3071
-534:3:3072
-535:3:3080
-536:3:3081
-537:3:3085
-538:3:3086
-539:3:3094
-540:3:3099
-541:3:3103
-542:3:3104
-543:3:3111
-544:3:3112
-545:3:3123
-546:3:3124
-547:3:3125
-548:3:3136
-549:3:3141
-550:3:3142
-551:0:4401
-552:3:3154
-553:0:4401
-554:3:3356
-555:0:4401
-556:3:3454
-557:0:4401
-558:3:3455
-559:0:4401
-560:3:3459
-561:0:4401
-562:3:3465
-563:3:3469
-564:3:3470
-565:3:3478
-566:3:3479
-567:3:3483
-568:3:3484
-569:3:3492
-570:3:3497
-571:3:3501
-572:3:3502
-573:3:3509
-574:3:3510
-575:3:3521
-576:3:3522
-577:3:3523
-578:3:3534
-579:3:3539
-580:3:3540
-581:0:4401
-582:3:3552
-583:0:4401
-584:3:3554
-585:0:4401
-586:3:3555
-587:3:3559
-588:3:3560
-589:3:3568
-590:3:3569
-591:3:3573
-592:3:3574
-593:3:3582
-594:3:3587
-595:3:3591
-596:3:3592
-597:3:3599
-598:3:3600
-599:3:3611
-600:3:3612
-601:3:3613
-602:3:3624
-603:3:3629
-604:3:3630
-605:0:4401
-606:3:3642
-607:0:4401
-608:3:3644
-609:0:4401
-610:3:3647
-611:3:3648
-612:3:3660
-613:3:3661
-614:3:3665
-615:3:3666
-616:3:3674
-617:3:3679
-618:3:3683
-619:3:3684
-620:3:3691
-621:3:3692
-622:3:3703
-623:3:3704
-624:3:3705
-625:3:3716
-626:3:3721
-627:3:3722
-628:0:4401
-629:3:3734
-630:0:4401
-631:3:3736
-632:0:4401
-633:3:3737
-634:0:4401
-635:3:3738
-636:0:4401
-637:3:3739
-638:0:4401
-639:3:3740
-640:3:3744
-641:3:3745
-642:3:3753
-643:3:3754
-644:3:3758
-645:3:3759
-646:3:3767
-647:3:3772
-648:3:3776
-649:3:3777
-650:3:3784
-651:3:3785
-652:3:3796
-653:3:3797
-654:3:3798
-655:3:3809
-656:3:3814
-657:3:3815
-658:0:4401
-659:3:3827
-660:0:4401
-661:3:4029
-662:0:4401
-663:3:4127
-664:0:4401
-665:3:4128
-666:0:4401
-667:3:4132
-668:0:4401
-669:3:4138
-670:0:4401
-671:3:4142
-672:3:4143
-673:3:4147
-674:3:4151
-675:3:4152
-676:3:4156
-677:3:4164
-678:3:4165
-679:3:4170
-680:3:4177
-681:3:4178
-682:3:4185
-683:3:4190
-684:0:4401
-685:3:4201
-686:0:4401
-687:3:4205
-688:3:4206
-689:3:4210
-690:3:4214
-691:3:4215
-692:3:4219
-693:3:4227
-694:3:4228
-695:3:4233
-696:3:4240
-697:3:4241
-698:3:4248
-699:3:4253
-700:0:4401
-701:3:4264
-702:0:4401
-703:3:4272
-704:3:4273
-705:3:4277
-706:3:4281
-707:3:4282
-708:3:4286
-709:3:4294
-710:3:4295
-711:3:4300
-712:3:4307
-713:3:4308
-714:3:4315
-715:3:4320
-716:0:4401
-717:3:4335
-718:0:4401
-719:3:4337
-720:0:4401
-721:3:4338
-722:0:4401
-723:3:2486
-724:0:4401
-725:3:2487
-726:3:2491
-727:3:2492
-728:3:2500
-729:3:2501
-730:3:2505
-731:3:2506
-732:3:2514
-733:3:2519
-734:3:2523
-735:3:2524
-736:3:2531
-737:3:2532
-738:3:2543
-739:3:2544
-740:3:2545
-741:3:2556
-742:3:2561
-743:3:2562
-744:0:4401
-745:3:2574
-746:0:4401
-747:3:2576
-748:3:2577
-749:0:4401
-750:3:2581
-751:3:2585
-752:3:2586
-753:3:2594
-754:3:2595
-755:3:2599
-756:3:2600
-757:3:2608
-758:3:2613
-759:3:2614
-760:3:2625
-761:3:2626
-762:3:2637
-763:3:2638
-764:3:2639
-765:3:2650
-766:3:2655
-767:3:2656
-768:0:4401
-769:3:2668
-770:0:4401
-771:3:2670
-772:0:4401
-773:3:2671
-774:0:4401
-775:3:2681
-776:0:4401
-777:3:2682
-778:0:4401
-779:3:2686
-780:3:2687
-781:3:2691
-782:3:2695
-783:3:2696
-784:3:2700
-785:3:2708
-786:3:2709
-787:3:2714
-788:3:2721
-789:3:2722
-790:3:2729
-791:3:2734
-792:0:4401
-793:3:2745
-794:0:4401
-795:3:2749
-796:3:2750
-797:3:2754
-798:3:2758
-799:3:2759
-800:3:2763
-801:3:2771
-802:3:2772
-803:3:2777
-804:3:2784
-805:3:2785
-806:3:2792
-807:3:2797
-808:0:4401
-809:3:2808
-810:0:4401
-811:3:2816
-812:3:2817
-813:3:2821
-814:3:2825
-815:3:2826
-816:3:2830
-817:3:2838
-818:3:2839
-819:3:2844
-820:3:2851
-821:3:2852
-822:3:2859
-823:3:2864
-824:0:4401
-825:3:2879
-826:0:4401
-827:3:2881
-828:0:4401
-829:3:2882
-830:3:2886
-831:3:2887
-832:3:2895
-833:3:2896
-834:3:2900
-835:3:2901
-836:3:2909
-837:3:2914
-838:3:2918
-839:3:2919
-840:3:2926
-841:3:2927
-842:3:2938
-843:3:2939
-844:3:2940
-845:3:2951
-846:3:2956
-847:3:2957
-848:0:4401
-849:3:2969
-850:0:4401
-851:3:2971
-852:0:4401
-853:3:2974
-854:3:2975
-855:3:2987
-856:3:2988
-857:3:2992
-858:3:2993
-859:3:3001
-860:3:3006
-861:3:3010
-862:3:3011
-863:3:3018
-864:3:3019
-865:3:3030
-866:3:3031
-867:3:3032
-868:3:3043
-869:3:3048
-870:3:3049
-871:0:4401
-872:3:3061
-873:0:4401
-874:3:3063
-875:0:4401
-876:3:3064
-877:0:4401
-878:3:3065
-879:0:4401
-880:3:3066
-881:0:4401
-882:3:3067
-883:3:3071
-884:3:3072
-885:3:3080
-886:3:3081
-887:3:3085
-888:3:3086
-889:3:3094
-890:3:3099
-891:3:3103
-892:3:3104
-893:3:3111
-894:3:3112
-895:3:3123
-896:3:3124
-897:3:3125
-898:3:3136
-899:3:3141
-900:3:3142
-901:0:4401
-902:3:3154
-903:0:4401
-904:3:3356
-905:0:4401
-906:3:3454
-907:0:4401
-908:3:3455
-909:0:4401
-910:3:3459
-911:0:4401
-912:3:3465
-913:3:3469
-914:3:3470
-915:3:3478
-916:3:3479
-917:3:3483
-918:3:3484
-919:3:3492
-920:3:3497
-921:3:3501
-922:3:3502
-923:3:3509
-924:3:3510
-925:3:3521
-926:3:3522
-927:3:3523
-928:3:3534
-929:3:3539
-930:3:3540
-931:0:4401
-932:3:3552
-933:0:4401
-934:3:3554
-935:0:4401
-936:3:3555
-937:3:3559
-938:3:3560
-939:3:3568
-940:3:3569
-941:3:3573
-942:3:3574
-943:3:3582
-944:3:3587
-945:3:3591
-946:3:3592
-947:3:3599
-948:3:3600
-949:3:3611
-950:3:3612
-951:3:3613
-952:3:3624
-953:3:3629
-954:3:3630
-955:0:4401
-956:3:3642
-957:0:4401
-958:3:3644
-959:0:4401
-960:3:3647
-961:3:3648
-962:3:3660
-963:3:3661
-964:3:3665
-965:3:3666
-966:3:3674
-967:3:3679
-968:3:3683
-969:3:3684
-970:3:3691
-971:3:3692
-972:3:3703
-973:3:3704
-974:3:3705
-975:3:3716
-976:3:3721
-977:3:3722
-978:0:4401
-979:3:3734
-980:0:4401
-981:3:3736
-982:0:4401
-983:3:3737
-984:0:4401
-985:3:3738
-986:0:4401
-987:3:3739
-988:0:4401
-989:3:3740
-990:3:3744
-991:3:3745
-992:3:3753
-993:3:3754
-994:3:3758
-995:3:3759
-996:3:3767
-997:3:3772
-998:3:3776
-999:3:3777
-1000:3:3784
-1001:3:3785
-1002:3:3796
-1003:3:3797
-1004:3:3798
-1005:3:3809
-1006:3:3814
-1007:3:3815
-1008:0:4401
-1009:3:3827
-1010:0:4401
-1011:3:4029
-1012:0:4401
-1013:3:4127
-1014:0:4401
-1015:3:4128
-1016:0:4401
-1017:3:4132
-1018:0:4401
-1019:3:4138
-1020:0:4401
-1021:3:4142
-1022:3:4143
-1023:3:4147
-1024:3:4151
-1025:3:4152
-1026:3:4156
-1027:3:4164
-1028:3:4165
-1029:3:4170
-1030:3:4177
-1031:3:4178
-1032:3:4185
-1033:3:4190
-1034:0:4401
-1035:3:4201
-1036:0:4401
-1037:3:4205
-1038:3:4206
-1039:3:4210
-1040:3:4214
-1041:3:4215
-1042:3:4219
-1043:3:4227
-1044:3:4228
-1045:3:4233
-1046:3:4240
-1047:3:4241
-1048:3:4248
-1049:3:4253
-1050:0:4401
-1051:3:4264
-1052:0:4401
-1053:3:4272
-1054:3:4273
-1055:3:4277
-1056:3:4281
-1057:3:4282
-1058:3:4286
-1059:3:4294
-1060:3:4295
-1061:3:4300
-1062:3:4307
-1063:3:4308
-1064:3:4315
-1065:3:4320
-1066:0:4401
-1067:3:4335
-1068:0:4401
-1069:3:4337
-1070:0:4401
-1071:3:4338
-1072:0:4401
-1073:3:4341
-1074:0:4401
-1075:3:4346
-1076:0:4401
-1077:2:1236
-1078:0:4401
-1079:3:4347
-1080:0:4401
-1081:2:1242
-1082:0:4401
-1083:3:4346
-1084:0:4401
-1085:2:1243
-1086:0:4401
-1087:3:4347
-1088:0:4401
-1089:2:1244
-1090:0:4401
-1091:3:4346
-1092:0:4401
-1093:2:1245
-1094:0:4401
-1095:3:4347
-1096:0:4401
-1097:1:2
-1098:0:4401
-1099:3:4346
-1100:0:4401
-1101:2:1246
-1102:0:4401
-1103:3:4347
-1104:0:4401
-1105:1:8
-1106:0:4401
-1107:3:4346
-1108:0:4401
-1109:2:1245
-1110:0:4401
-1111:3:4347
-1112:0:4401
-1113:1:9
-1114:0:4401
-1115:3:4346
-1116:0:4401
-1117:2:1246
-1118:0:4401
-1119:3:4347
-1120:0:4401
-1121:1:10
-1122:0:4401
-1123:3:4346
-1124:0:4401
-1125:2:1245
-1126:0:4401
-1127:3:4347
-1128:0:4401
-1129:1:11
-1130:0:4401
-1131:3:4346
-1132:0:4401
-1133:2:1246
-1134:0:4401
-1135:3:4347
-1136:0:4401
-1137:1:14
-1138:0:4401
-1139:3:4346
-1140:0:4401
-1141:2:1245
-1142:0:4401
-1143:3:4347
-1144:0:4401
-1145:1:15
-1146:0:4401
-1147:3:4346
-1148:0:4401
-1149:2:1246
-1150:0:4401
-1151:3:4347
-1152:0:4401
-1153:1:16
-1154:1:20
-1155:1:21
-1156:1:29
-1157:1:30
-1158:1:34
-1159:1:35
-1160:1:43
-1161:1:48
-1162:1:52
-1163:1:53
-1164:1:60
-1165:1:61
-1166:1:72
-1167:1:73
-1168:1:74
-1169:1:85
-1170:1:90
-1171:1:91
-1172:0:4401
-1173:3:4346
-1174:0:4401
-1175:2:1245
-1176:0:4401
-1177:3:4347
-1178:0:4401
-1179:1:103
-1180:0:4401
-1181:3:4346
-1182:0:4401
-1183:2:1246
-1184:0:4401
-1185:3:4347
-1186:0:4401
-1187:2:1247
-1188:0:4401
-1189:3:4346
-1190:0:4401
-1191:2:1253
-1192:0:4401
-1193:3:4347
-1194:0:4401
-1195:2:1254
-1196:0:4399
-1197:3:4346
-1198:0:4405
-1199:3:4347
-1200:0:4405
-1201:2:1257
-1202:0:4405
-1203:3:4346
-1204:0:4405
-1205:2:1258
-1206:0:4405
-1207:3:4347
-1208:0:4405
-1209:2:1259
-1210:2:1263
-1211:2:1264
-1212:2:1272
-1213:2:1273
-1214:2:1277
-1215:2:1278
-1216:2:1286
-1217:2:1291
-1218:2:1295
-1219:2:1296
-1220:2:1303
-1221:2:1304
-1222:2:1315
-1223:2:1316
-1224:2:1317
-1225:2:1328
-1226:2:1333
-1227:2:1334
-1228:0:4405
-1229:3:4346
-1230:0:4405
-1231:2:1346
-1232:0:4405
-1233:3:4347
-1234:0:4405
-1235:2:1347
-1236:0:4405
-1237:3:4346
-1238:0:4405
-1239:1:104
--1:-1:-1
-1240:0:4405
-1241:3:4347
-1242:0:4405
-1243:3:4346
-1244:0:4405
-1245:2:1348
-1246:0:4405
-1247:3:4347
-1248:0:4405
-1249:2:1347
-1250:0:4405
-1251:3:4346
-1252:0:4405
-1253:1:105
-1254:0:4405
-1255:3:4347
-1256:0:4405
-1257:3:4346
-1258:0:4405
-1259:2:1348
-1260:0:4405
-1261:3:4347
-1262:0:4405
-1263:2:1347
-1264:0:4405
-1265:3:4346
-1266:0:4405
-1267:1:104
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_writer.define b/formal-model/urcu/result-signal-over-writer/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_writer.log b/formal-model/urcu/result-signal-over-writer/urcu_progress_writer.log
deleted file mode 100644 (file)
index 02c53cf..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-depth 12: Claim reached state 9 (line 747)
-depth 28: Claim reached state 9 (line 746)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10679, errors: 0
-    38555 states, stored (92500 visited)
-  1044204 states, matched
-  1136704 transitions (= visited+matched)
-  3867169 atomic steps
-hash conflicts:      8572 (resolved)
-
-Stats on memory usage (in Megabytes):
-    3.089      equivalent memory usage for states (stored*(State-vector + overhead))
-    2.930      actual memory usage for states (compression: 94.87%)
-               state-vector as stored = 52 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  468.596      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 402, "pan.___", state 330, "(1)"
-       line 613, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 160, "(1)"
-       line 651, "pan.___", state 213, "(1)"
-       line 174, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 233, "(1)"
-       line 159, "pan.___", state 254, "(1)"
-       line 163, "pan.___", state 262, "(1)"
-       line 167, "pan.___", state 274, "(1)"
-       line 174, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 317, "(1)"
-       line 163, "pan.___", state 325, "(1)"
-       line 167, "pan.___", state 337, "(1)"
-       line 174, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 384, "(1)"
-       line 163, "pan.___", state 392, "(1)"
-       line 167, "pan.___", state 404, "(1)"
-       line 398, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 441, "(1)"
-       line 407, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 470, "(1)"
-       line 417, "pan.___", state 500, "(1)"
-       line 398, "pan.___", state 526, "(1)"
-       line 402, "pan.___", state 540, "(1)"
-       line 407, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 599, "(1)"
-       line 402, "pan.___", state 640, "(1)"
-       line 407, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 699, "(1)"
-       line 174, "pan.___", state 720, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 722, "(1)"
-       line 178, "pan.___", state 729, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 731, "(1)"
-       line 178, "pan.___", state 732, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 732, "else"
-       line 176, "pan.___", state 737, "((j<1))"
-       line 176, "pan.___", state 737, "((j>=1))"
-       line 182, "pan.___", state 742, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 752, "(1)"
-       line 163, "pan.___", state 760, "(1)"
-       line 163, "pan.___", state 761, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 761, "else"
-       line 161, "pan.___", state 766, "((j<1))"
-       line 161, "pan.___", state 766, "((j>=1))"
-       line 167, "pan.___", state 772, "(1)"
-       line 167, "pan.___", state 773, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 773, "else"
-       line 169, "pan.___", state 776, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 776, "else"
-       line 174, "pan.___", state 783, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 785, "(1)"
-       line 178, "pan.___", state 792, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 794, "(1)"
-       line 178, "pan.___", state 795, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 795, "else"
-       line 176, "pan.___", state 800, "((j<1))"
-       line 176, "pan.___", state 800, "((j>=1))"
-       line 182, "pan.___", state 805, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 815, "(1)"
-       line 163, "pan.___", state 823, "(1)"
-       line 163, "pan.___", state 824, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 824, "else"
-       line 161, "pan.___", state 829, "((j<1))"
-       line 161, "pan.___", state 829, "((j>=1))"
-       line 167, "pan.___", state 835, "(1)"
-       line 167, "pan.___", state 836, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 836, "else"
-       line 169, "pan.___", state 839, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 839, "else"
-       line 201, "pan.___", state 841, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 841, "else"
-       line 213, "pan.___", state 845, "((i<1))"
-       line 213, "pan.___", state 845, "((i>=1))"
-       line 174, "pan.___", state 850, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 852, "(1)"
-       line 178, "pan.___", state 859, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 861, "(1)"
-       line 178, "pan.___", state 862, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 862, "else"
-       line 176, "pan.___", state 867, "((j<1))"
-       line 176, "pan.___", state 867, "((j>=1))"
-       line 182, "pan.___", state 872, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 882, "(1)"
-       line 163, "pan.___", state 890, "(1)"
-       line 163, "pan.___", state 891, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 891, "else"
-       line 161, "pan.___", state 896, "((j<1))"
-       line 161, "pan.___", state 896, "((j>=1))"
-       line 167, "pan.___", state 902, "(1)"
-       line 167, "pan.___", state 903, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 903, "else"
-       line 169, "pan.___", state 906, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 906, "else"
-       line 201, "pan.___", state 908, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 908, "else"
-       line 220, "pan.___", state 909, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 909, "else"
-       line 355, "pan.___", state 915, "((sighand_exec==1))"
-       line 355, "pan.___", state 915, "else"
-       line 361, "pan.___", state 918, "sighand_exec = 1"
-       line 398, "pan.___", state 931, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 933, "(1)"
-       line 398, "pan.___", state 934, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 934, "else"
-       line 398, "pan.___", state 937, "(1)"
-       line 402, "pan.___", state 945, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 947, "(1)"
-       line 402, "pan.___", state 948, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 948, "else"
-       line 402, "pan.___", state 951, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 402, "pan.___", state 952, "(1)"
-       line 400, "pan.___", state 957, "((i<1))"
-       line 400, "pan.___", state 957, "((i>=1))"
-       line 407, "pan.___", state 963, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 976, "(1)"
-       line 408, "pan.___", state 977, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 977, "else"
-       line 408, "pan.___", state 980, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 408, "pan.___", state 981, "(1)"
-       line 412, "pan.___", state 989, "(1)"
-       line 412, "pan.___", state 990, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 990, "else"
-       line 412, "pan.___", state 993, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 412, "pan.___", state 994, "(1)"
-       line 410, "pan.___", state 999, "((i<1))"
-       line 410, "pan.___", state 999, "((i>=1))"
-       line 417, "pan.___", state 1006, "(1)"
-       line 417, "pan.___", state 1007, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1007, "else"
-       line 417, "pan.___", state 1010, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 417, "pan.___", state 1011, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 419, "pan.___", state 1014, "(1)"
-       line 361, "pan.___", state 1023, "sighand_exec = 1"
-       line 402, "pan.___", state 1054, "(1)"
-       line 407, "pan.___", state 1070, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1113, "(1)"
-       line 402, "pan.___", state 1151, "(1)"
-       line 407, "pan.___", state 1167, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1210, "(1)"
-       line 398, "pan.___", state 1236, "(1)"
-       line 402, "pan.___", state 1250, "(1)"
-       line 407, "pan.___", state 1266, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1309, "(1)"
-       line 402, "pan.___", state 1350, "(1)"
-       line 407, "pan.___", state 1366, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 417, "pan.___", state 1409, "(1)"
-       line 174, "pan.___", state 1430, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1432, "(1)"
-       line 178, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1441, "(1)"
-       line 178, "pan.___", state 1442, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1442, "else"
-       line 176, "pan.___", state 1447, "((j<1))"
-       line 176, "pan.___", state 1447, "((j>=1))"
-       line 182, "pan.___", state 1452, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1462, "(1)"
-       line 163, "pan.___", state 1470, "(1)"
-       line 163, "pan.___", state 1471, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1471, "else"
-       line 161, "pan.___", state 1476, "((j<1))"
-       line 161, "pan.___", state 1476, "((j>=1))"
-       line 167, "pan.___", state 1482, "(1)"
-       line 167, "pan.___", state 1483, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1483, "else"
-       line 169, "pan.___", state 1486, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 1486, "else"
-       line 174, "pan.___", state 1493, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 174, "pan.___", state 1495, "(1)"
-       line 178, "pan.___", state 1502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1504, "(1)"
-       line 178, "pan.___", state 1505, "((cache_dirty_urcu_active_readers.bitfield&(1<<i)))"
-       line 178, "pan.___", state 1505, "else"
-       line 176, "pan.___", state 1510, "((j<1))"
-       line 176, "pan.___", state 1510, "((j>=1))"
-       line 182, "pan.___", state 1515, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1525, "(1)"
-       line 163, "pan.___", state 1533, "(1)"
-       line 163, "pan.___", state 1534, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 163, "pan.___", state 1534, "else"
-       line 161, "pan.___", state 1539, "((j<1))"
-       line 161, "pan.___", state 1539, "((j>=1))"
-       line 167, "pan.___", state 1545, "(1)"
-       line 167, "pan.___", state 1546, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 167, "pan.___", state 1546, "else"
-       line 169, "pan.___", state 1549, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 1549, "else"
-       line 201, "pan.___", state 1551, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<i)))"
-       line 201, "pan.___", state 1551, "else"
-       line 213, "pan.___", state 1555, "((i<1))"
-       line 213, "pan.___", state 1555, "((i>=1))"
-       line 174, "pan.___", state 1560, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 174, "pan.___", state 1562, "(1)"
-       line 178, "pan.___", state 1569, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1571, "(1)"
-       line 178, "pan.___", state 1572, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 178, "pan.___", state 1572, "else"
-       line 176, "pan.___", state 1577, "((j<1))"
-       line 176, "pan.___", state 1577, "((j>=1))"
-       line 182, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1592, "(1)"
-       line 163, "pan.___", state 1600, "(1)"
-       line 163, "pan.___", state 1601, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 163, "pan.___", state 1601, "else"
-       line 161, "pan.___", state 1606, "((j<1))"
-       line 161, "pan.___", state 1606, "((j>=1))"
-       line 167, "pan.___", state 1612, "(1)"
-       line 167, "pan.___", state 1613, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 167, "pan.___", state 1613, "else"
-       line 169, "pan.___", state 1616, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 169, "pan.___", state 1616, "else"
-       line 201, "pan.___", state 1618, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 201, "pan.___", state 1618, "else"
-       line 220, "pan.___", state 1619, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 220, "pan.___", state 1619, "else"
-       line 355, "pan.___", state 1625, "((sighand_exec==1))"
-       line 355, "pan.___", state 1625, "else"
-       line 361, "pan.___", state 1628, "sighand_exec = 1"
-       line 398, "pan.___", state 1641, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 398, "pan.___", state 1643, "(1)"
-       line 398, "pan.___", state 1644, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 398, "pan.___", state 1644, "else"
-       line 398, "pan.___", state 1647, "(1)"
-       line 402, "pan.___", state 1655, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 402, "pan.___", state 1657, "(1)"
-       line 402, "pan.___", state 1658, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 402, "pan.___", state 1658, "else"
-       line 402, "pan.___", state 1661, "(1)"
-       line 402, "pan.___", state 1662, "(1)"
-       line 402, "pan.___", state 1662, "(1)"
-       line 400, "pan.___", state 1667, "((i<1))"
-       line 400, "pan.___", state 1667, "((i>=1))"
-       line 407, "pan.___", state 1673, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 1686, "(1)"
-       line 408, "pan.___", state 1687, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 408, "pan.___", state 1687, "else"
-       line 408, "pan.___", state 1690, "(1)"
-       line 408, "pan.___", state 1691, "(1)"
-       line 408, "pan.___", state 1691, "(1)"
-       line 412, "pan.___", state 1699, "(1)"
-       line 412, "pan.___", state 1700, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 412, "pan.___", state 1700, "else"
-       line 412, "pan.___", state 1703, "(1)"
-       line 412, "pan.___", state 1704, "(1)"
-       line 412, "pan.___", state 1704, "(1)"
-       line 410, "pan.___", state 1709, "((i<1))"
-       line 410, "pan.___", state 1709, "((i>=1))"
-       line 417, "pan.___", state 1716, "(1)"
-       line 417, "pan.___", state 1717, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 417, "pan.___", state 1717, "else"
-       line 417, "pan.___", state 1720, "(1)"
-       line 417, "pan.___", state 1721, "(1)"
-       line 417, "pan.___", state 1721, "(1)"
-       line 419, "pan.___", state 1724, "(1)"
-       line 419, "pan.___", state 1724, "(1)"
-       line 361, "pan.___", state 1733, "sighand_exec = 1"
-       line 178, "pan.___", state 1758, "(1)"
-       line 182, "pan.___", state 1769, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1779, "(1)"
-       line 163, "pan.___", state 1787, "(1)"
-       line 167, "pan.___", state 1799, "(1)"
-       line 174, "pan.___", state 1810, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 1819, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1832, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1842, "(1)"
-       line 163, "pan.___", state 1850, "(1)"
-       line 167, "pan.___", state 1862, "(1)"
-       line 174, "pan.___", state 1877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 178, "pan.___", state 1886, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 182, "pan.___", state 1899, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 159, "pan.___", state 1909, "(1)"
-       line 163, "pan.___", state 1917, "(1)"
-       line 167, "pan.___", state 1929, "(1)"
-       line 701, "pan.___", state 1968, "-end-"
-       (215 of 1968 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 0.89 seconds
-pan: rate 103932.58 states/second
-pan: avg transition delay 7.8297e-07 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_writer.spin.input b/formal-model/urcu/result-signal-over-writer/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 6ba27b1..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-#define WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_writer.spin.input.trail b/formal-model/urcu/result-signal-over-writer/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.define b/formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.log b/formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index cd4e32b..0000000
+++ /dev/null
@@ -1,286 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-depth 12: Claim reached state 9 (line 748)
-depth 28: Claim reached state 9 (line 747)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 10679, errors: 0
-    38555 states, stored (92500 visited)
-  1044204 states, matched
-  1136704 transitions (= visited+matched)
-  3867169 atomic steps
-hash conflicts:      6390 (resolved)
-
-Stats on memory usage (in Megabytes):
-    3.089      equivalent memory usage for states (stored*(State-vector + overhead))
-    2.767      actual memory usage for states (compression: 89.58%)
-               state-vector as stored = 47 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  468.498      total actual memory usage
-
-unreached in proctype urcu_reader_sig
-       line 403, "pan.___", state 330, "(1)"
-       line 614, "pan.___", state 411, "-end-"
-       (2 of 411 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 115, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 160, "(1)"
-       line 652, "pan.___", state 213, "(1)"
-       line 175, "pan.___", state 222, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 179, "pan.___", state 233, "(1)"
-       line 160, "pan.___", state 254, "(1)"
-       line 164, "pan.___", state 262, "(1)"
-       line 168, "pan.___", state 274, "(1)"
-       line 175, "pan.___", state 285, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 179, "pan.___", state 294, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 307, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 317, "(1)"
-       line 164, "pan.___", state 325, "(1)"
-       line 168, "pan.___", state 337, "(1)"
-       line 175, "pan.___", state 352, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 179, "pan.___", state 361, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 183, "pan.___", state 374, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 160, "pan.___", state 384, "(1)"
-       line 164, "pan.___", state 392, "(1)"
-       line 168, "pan.___", state 404, "(1)"
-       line 399, "pan.___", state 425, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 441, "(1)"
-       line 408, "pan.___", state 457, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 470, "(1)"
-       line 418, "pan.___", state 500, "(1)"
-       line 399, "pan.___", state 526, "(1)"
-       line 403, "pan.___", state 540, "(1)"
-       line 408, "pan.___", state 556, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 599, "(1)"
-       line 403, "pan.___", state 640, "(1)"
-       line 408, "pan.___", state 656, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 699, "(1)"
-       line 399, "pan.___", state 721, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 723, "(1)"
-       line 399, "pan.___", state 724, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 724, "else"
-       line 399, "pan.___", state 727, "(1)"
-       line 403, "pan.___", state 735, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 737, "(1)"
-       line 403, "pan.___", state 738, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 738, "else"
-       line 403, "pan.___", state 741, "(1)"
-       line 403, "pan.___", state 742, "(1)"
-       line 403, "pan.___", state 742, "(1)"
-       line 401, "pan.___", state 747, "((i<1))"
-       line 401, "pan.___", state 747, "((i>=1))"
-       line 408, "pan.___", state 753, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 766, "(1)"
-       line 409, "pan.___", state 767, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 767, "else"
-       line 409, "pan.___", state 770, "(1)"
-       line 409, "pan.___", state 771, "(1)"
-       line 409, "pan.___", state 771, "(1)"
-       line 413, "pan.___", state 779, "(1)"
-       line 413, "pan.___", state 780, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 780, "else"
-       line 413, "pan.___", state 783, "(1)"
-       line 413, "pan.___", state 784, "(1)"
-       line 413, "pan.___", state 784, "(1)"
-       line 411, "pan.___", state 789, "((i<1))"
-       line 411, "pan.___", state 789, "((i>=1))"
-       line 418, "pan.___", state 796, "(1)"
-       line 418, "pan.___", state 797, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 797, "else"
-       line 418, "pan.___", state 800, "(1)"
-       line 418, "pan.___", state 801, "(1)"
-       line 418, "pan.___", state 801, "(1)"
-       line 420, "pan.___", state 804, "(1)"
-       line 420, "pan.___", state 804, "(1)"
-       line 356, "pan.___", state 810, "((sighand_exec==1))"
-       line 356, "pan.___", state 810, "else"
-       line 362, "pan.___", state 813, "sighand_exec = 1"
-       line 399, "pan.___", state 826, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 828, "(1)"
-       line 399, "pan.___", state 829, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 829, "else"
-       line 399, "pan.___", state 832, "(1)"
-       line 403, "pan.___", state 840, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 842, "(1)"
-       line 403, "pan.___", state 843, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 843, "else"
-       line 403, "pan.___", state 846, "(1)"
-       line 403, "pan.___", state 847, "(1)"
-       line 403, "pan.___", state 847, "(1)"
-       line 401, "pan.___", state 852, "((i<1))"
-       line 401, "pan.___", state 852, "((i>=1))"
-       line 408, "pan.___", state 858, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 871, "(1)"
-       line 409, "pan.___", state 872, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 872, "else"
-       line 409, "pan.___", state 875, "(1)"
-       line 409, "pan.___", state 876, "(1)"
-       line 409, "pan.___", state 876, "(1)"
-       line 413, "pan.___", state 884, "(1)"
-       line 413, "pan.___", state 885, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 885, "else"
-       line 413, "pan.___", state 888, "(1)"
-       line 413, "pan.___", state 889, "(1)"
-       line 413, "pan.___", state 889, "(1)"
-       line 411, "pan.___", state 894, "((i<1))"
-       line 411, "pan.___", state 894, "((i>=1))"
-       line 418, "pan.___", state 901, "(1)"
-       line 418, "pan.___", state 902, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 902, "else"
-       line 418, "pan.___", state 905, "(1)"
-       line 418, "pan.___", state 906, "(1)"
-       line 418, "pan.___", state 906, "(1)"
-       line 420, "pan.___", state 909, "(1)"
-       line 420, "pan.___", state 909, "(1)"
-       line 362, "pan.___", state 918, "sighand_exec = 1"
-       line 403, "pan.___", state 949, "(1)"
-       line 408, "pan.___", state 965, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 1008, "(1)"
-       line 403, "pan.___", state 1046, "(1)"
-       line 408, "pan.___", state 1062, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 1105, "(1)"
-       line 399, "pan.___", state 1131, "(1)"
-       line 403, "pan.___", state 1145, "(1)"
-       line 408, "pan.___", state 1161, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 1204, "(1)"
-       line 403, "pan.___", state 1245, "(1)"
-       line 408, "pan.___", state 1261, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 418, "pan.___", state 1304, "(1)"
-       line 399, "pan.___", state 1326, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1328, "(1)"
-       line 399, "pan.___", state 1329, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1329, "else"
-       line 399, "pan.___", state 1332, "(1)"
-       line 403, "pan.___", state 1340, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1342, "(1)"
-       line 403, "pan.___", state 1343, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1343, "else"
-       line 403, "pan.___", state 1346, "(1)"
-       line 403, "pan.___", state 1347, "(1)"
-       line 403, "pan.___", state 1347, "(1)"
-       line 401, "pan.___", state 1352, "((i<1))"
-       line 401, "pan.___", state 1352, "((i>=1))"
-       line 408, "pan.___", state 1358, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1371, "(1)"
-       line 409, "pan.___", state 1372, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1372, "else"
-       line 409, "pan.___", state 1375, "(1)"
-       line 409, "pan.___", state 1376, "(1)"
-       line 409, "pan.___", state 1376, "(1)"
-       line 413, "pan.___", state 1384, "(1)"
-       line 413, "pan.___", state 1385, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1385, "else"
-       line 413, "pan.___", state 1388, "(1)"
-       line 413, "pan.___", state 1389, "(1)"
-       line 413, "pan.___", state 1389, "(1)"
-       line 411, "pan.___", state 1394, "((i<1))"
-       line 411, "pan.___", state 1394, "((i>=1))"
-       line 418, "pan.___", state 1401, "(1)"
-       line 418, "pan.___", state 1402, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1402, "else"
-       line 418, "pan.___", state 1405, "(1)"
-       line 418, "pan.___", state 1406, "(1)"
-       line 418, "pan.___", state 1406, "(1)"
-       line 420, "pan.___", state 1409, "(1)"
-       line 420, "pan.___", state 1409, "(1)"
-       line 356, "pan.___", state 1415, "((sighand_exec==1))"
-       line 356, "pan.___", state 1415, "else"
-       line 362, "pan.___", state 1418, "sighand_exec = 1"
-       line 399, "pan.___", state 1431, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 399, "pan.___", state 1433, "(1)"
-       line 399, "pan.___", state 1434, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<0)))"
-       line 399, "pan.___", state 1434, "else"
-       line 399, "pan.___", state 1437, "(1)"
-       line 403, "pan.___", state 1445, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 403, "pan.___", state 1447, "(1)"
-       line 403, "pan.___", state 1448, "((cache_dirty_urcu_active_readers.bitfield&(1<<0)))"
-       line 403, "pan.___", state 1448, "else"
-       line 403, "pan.___", state 1451, "(1)"
-       line 403, "pan.___", state 1452, "(1)"
-       line 403, "pan.___", state 1452, "(1)"
-       line 401, "pan.___", state 1457, "((i<1))"
-       line 401, "pan.___", state 1457, "((i>=1))"
-       line 408, "pan.___", state 1463, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 409, "pan.___", state 1476, "(1)"
-       line 409, "pan.___", state 1477, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<0))))"
-       line 409, "pan.___", state 1477, "else"
-       line 409, "pan.___", state 1480, "(1)"
-       line 409, "pan.___", state 1481, "(1)"
-       line 409, "pan.___", state 1481, "(1)"
-       line 413, "pan.___", state 1489, "(1)"
-       line 413, "pan.___", state 1490, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<0))))"
-       line 413, "pan.___", state 1490, "else"
-       line 413, "pan.___", state 1493, "(1)"
-       line 413, "pan.___", state 1494, "(1)"
-       line 413, "pan.___", state 1494, "(1)"
-       line 411, "pan.___", state 1499, "((i<1))"
-       line 411, "pan.___", state 1499, "((i>=1))"
-       line 418, "pan.___", state 1506, "(1)"
-       line 418, "pan.___", state 1507, "(!((cache_dirty_generation_ptr.bitfield&(1<<0))))"
-       line 418, "pan.___", state 1507, "else"
-       line 418, "pan.___", state 1510, "(1)"
-       line 418, "pan.___", state 1511, "(1)"
-       line 418, "pan.___", state 1511, "(1)"
-       line 420, "pan.___", state 1514, "(1)"
-       line 420, "pan.___", state 1514, "(1)"
-       line 362, "pan.___", state 1523, "sighand_exec = 1"
-       line 179, "pan.___", state 1548, "(1)"
-       line 183, "pan.___", state 1559, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 160, "pan.___", state 1569, "(1)"
-       line 164, "pan.___", state 1577, "(1)"
-       line 168, "pan.___", state 1589, "(1)"
-       line 175, "pan.___", state 1600, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 179, "pan.___", state 1609, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1622, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1632, "(1)"
-       line 164, "pan.___", state 1640, "(1)"
-       line 168, "pan.___", state 1652, "(1)"
-       line 175, "pan.___", state 1667, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<0)))"
-       line 179, "pan.___", state 1676, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<0)))"
-       line 183, "pan.___", state 1689, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<0)))"
-       line 160, "pan.___", state 1699, "(1)"
-       line 164, "pan.___", state 1707, "(1)"
-       line 168, "pan.___", state 1719, "(1)"
-       line 702, "pan.___", state 1758, "-end-"
-       (173 of 1758 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 750, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 0.89 seconds
-pan: rate 103932.58 states/second
-pan: avg transition delay 7.8297e-07 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.spin.input b/formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index e998d85..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu/result-signal-over-writer/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index 5b0eadd..0000000
+++ /dev/null
@@ -1,4231 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2965
-2:3:2917
-3:3:2920
-4:3:2920
-5:3:2920
-6:3:2923
-7:3:2931
-8:3:2931
-9:3:2931
-10:3:2934
-11:3:2940
-12:3:2944
-13:3:2944
-14:3:2944
-15:3:2947
-16:3:2955
-17:3:2959
-18:3:2960
-19:0:2965
-20:3:2962
-21:0:2965
-22:2:1151
-23:0:2965
-24:2:1157
-25:0:2965
-26:2:1158
-27:0:2965
-28:2:1159
-29:2:1163
-30:2:1164
-31:2:1172
-32:2:1173
-33:2:1177
-34:2:1178
-35:2:1186
-36:2:1191
-37:2:1195
-38:2:1196
-39:2:1203
-40:2:1204
-41:2:1215
-42:2:1216
-43:2:1217
-44:2:1228
-45:2:1233
-46:2:1234
-47:0:2963
-48:2:1246
-49:0:2969
-50:2:1247
-51:0:2969
-52:1:2
-53:0:2969
-54:2:1248
-55:0:2969
-56:1:8
-57:0:2969
-58:1:9
-59:0:2969
-60:2:1247
-61:0:2969
-62:2:1248
-63:0:2969
-64:1:10
-65:0:2969
-66:2:1249
-67:0:2969
-68:2:1255
-69:2:1256
-70:0:2969
-71:2:1260
-72:2:1264
-73:2:1265
-74:2:1273
-75:2:1274
-76:2:1278
-77:2:1279
-78:2:1287
-79:2:1292
-80:2:1293
-81:2:1304
-82:2:1305
-83:2:1316
-84:2:1317
-85:2:1318
-86:2:1329
-87:2:1334
-88:2:1335
-89:0:2969
-90:2:1347
-91:0:2969
-92:2:1348
-93:0:2969
-94:1:13
-95:0:2969
-96:2:1349
-97:0:2969
-98:1:19
-99:0:2969
-100:1:20
-101:0:2969
-102:2:1348
-103:0:2969
-104:2:1349
-105:0:2969
-106:1:21
-107:1:25
-108:1:26
-109:1:34
-110:1:35
-111:1:39
-112:1:40
-113:1:48
-114:1:53
-115:1:57
-116:1:58
-117:1:65
-118:1:66
-119:1:77
-120:1:78
-121:1:79
-122:1:90
-123:1:95
-124:1:96
-125:0:2969
-126:2:1348
-127:0:2969
-128:2:1349
-129:0:2969
-130:1:108
-131:0:2969
-132:2:1348
-133:0:2969
-134:2:1349
-135:0:2969
-136:1:109
-137:1:113
-138:1:114
-139:1:122
-140:1:123
-141:1:127
-142:1:128
-143:1:136
-144:1:141
-145:1:145
-146:1:146
-147:1:153
-148:1:154
-149:1:165
-150:1:166
-151:1:167
-152:1:178
-153:1:183
-154:1:184
-155:0:2969
-156:1:196
-157:0:2969
-158:2:1348
-159:0:2969
-160:2:1349
-161:0:2969
-162:1:197
-163:0:2969
-164:2:1348
-165:0:2969
-166:2:1349
-167:0:2969
-168:1:198
-169:1:202
-170:1:203
-171:1:211
-172:1:212
-173:1:216
-174:1:217
-175:1:225
-176:1:230
-177:1:234
-178:1:235
-179:1:242
-180:1:243
-181:1:254
-182:1:255
-183:1:256
-184:1:267
-185:1:272
-186:1:273
-187:0:2969
-188:2:1348
-189:0:2969
-190:2:1349
-191:0:2969
-192:1:285
-193:0:2969
-194:1:486
-195:0:2969
-196:1:487
-197:0:2969
-198:1:20
-199:0:2969
-200:2:1348
-201:0:2969
-202:2:1349
-203:0:2969
-204:1:21
-205:1:25
-206:1:26
-207:1:34
-208:1:35
-209:1:36
-210:1:48
-211:1:53
-212:1:57
-213:1:58
-214:1:65
-215:1:66
-216:1:77
-217:1:78
-218:1:79
-219:1:90
-220:1:95
-221:1:96
-222:0:2969
-223:2:1348
-224:0:2969
-225:2:1349
-226:0:2969
-227:1:108
-228:0:2969
-229:2:1348
-230:0:2969
-231:2:1349
-232:0:2969
-233:1:109
-234:1:113
-235:1:114
-236:1:122
-237:1:123
-238:1:127
-239:1:128
-240:1:136
-241:1:141
-242:1:145
-243:1:146
-244:1:153
-245:1:154
-246:1:165
-247:1:166
-248:1:167
-249:1:178
-250:1:183
-251:1:184
-252:0:2969
-253:1:288
-254:0:2969
-255:2:1348
-256:0:2969
-257:2:1349
-258:0:2969
-259:1:289
-260:0:2969
-261:1:486
-262:0:2969
-263:1:487
-264:0:2969
-265:1:492
-266:0:2969
-267:2:1348
-268:0:2969
-269:2:1349
-270:0:2969
-271:1:497
-272:1:501
-273:1:502
-274:1:510
-275:1:511
-276:1:512
-277:1:524
-278:1:529
-279:1:533
-280:1:534
-281:1:541
-282:1:542
-283:1:553
-284:1:554
-285:1:555
-286:1:566
-287:1:571
-288:1:572
-289:0:2969
-290:2:1348
-291:0:2969
-292:2:1349
-293:0:2969
-294:1:584
-295:0:2969
-296:2:1348
-297:0:2969
-298:2:1349
-299:0:2969
-300:1:585
-301:1:589
-302:1:590
-303:1:598
-304:1:599
-305:1:603
-306:1:604
-307:1:612
-308:1:617
-309:1:621
-310:1:622
-311:1:629
-312:1:630
-313:1:641
-314:1:642
-315:1:643
-316:1:654
-317:1:659
-318:1:660
-319:0:2969
-320:2:1348
-321:0:2969
-322:2:1349
-323:0:2969
-324:1:672
-325:0:2969
-326:2:1348
-327:0:2969
-328:2:1349
-329:0:2969
-330:1:673
-331:1:677
-332:1:678
-333:1:686
-334:1:687
-335:1:691
-336:1:692
-337:1:700
-338:1:705
-339:1:709
-340:1:710
-341:1:717
-342:1:718
-343:1:729
-344:1:730
-345:1:731
-346:1:742
-347:1:747
-348:1:748
-349:0:2969
-350:2:1348
-351:0:2969
-352:2:1349
-353:0:2969
-354:1:760
-355:0:2969
-356:1:761
-357:0:2969
-358:1:762
-359:0:2969
-360:1:955
-361:0:2969
-362:1:956
-363:0:2969
-364:2:1348
-365:0:2969
-366:2:1349
-367:0:2969
-368:1:960
-369:0:2969
-370:2:1348
-371:0:2969
-372:2:1349
-373:0:2969
-374:1:961
-375:1:965
-376:1:966
-377:1:974
-378:1:975
-379:1:979
-380:1:980
-381:1:988
-382:1:993
-383:1:997
-384:1:998
-385:1:1005
-386:1:1006
-387:1:1017
-388:1:1018
-389:1:1019
-390:1:1030
-391:1:1035
-392:1:1036
-393:0:2969
-394:2:1348
-395:0:2969
-396:2:1349
-397:0:2969
-398:1:1048
-399:0:2969
-400:1:762
-401:0:2969
-402:1:955
-403:0:2969
-404:1:956
-405:0:2969
-406:2:1348
-407:0:2969
-408:2:1349
-409:0:2969
-410:1:960
-411:0:2969
-412:2:1348
-413:0:2969
-414:2:1349
-415:0:2969
-416:1:961
-417:1:965
-418:1:966
-419:1:974
-420:1:975
-421:1:976
-422:1:988
-423:1:993
-424:1:997
-425:1:998
-426:1:1005
-427:1:1006
-428:1:1017
-429:1:1018
-430:1:1019
-431:1:1030
-432:1:1035
-433:1:1036
-434:0:2969
-435:2:1348
-436:0:2969
-437:2:1349
-438:0:2969
-439:1:1048
-440:0:2969
-441:1:1052
-442:0:2969
-443:2:1348
-444:0:2969
-445:2:1349
-446:0:2969
-447:1:1057
-448:1:1061
-449:1:1062
-450:1:1070
-451:1:1071
-452:1:1072
-453:1:1084
-454:1:1089
-455:1:1093
-456:1:1094
-457:1:1101
-458:1:1102
-459:1:1113
-460:1:1114
-461:1:1115
-462:1:1126
-463:1:1131
-464:1:1132
-465:0:2969
-466:1:9
-467:0:2969
-468:2:1348
-469:0:2969
-470:2:1349
-471:0:2969
-472:1:10
-473:0:2969
-474:2:1350
-475:0:2969
-476:2:1356
-477:0:2969
-478:2:1357
-479:0:2969
-480:2:1367
-481:0:2969
-482:2:1368
-483:0:2969
-484:2:1372
-485:2:1373
-486:2:1377
-487:2:1381
-488:2:1382
-489:2:1386
-490:2:1394
-491:2:1395
-492:2:1400
-493:2:1407
-494:2:1408
-495:2:1415
-496:2:1420
-497:0:2969
-498:2:1431
-499:0:2969
-500:2:1435
-501:2:1436
-502:2:1440
-503:2:1444
-504:2:1445
-505:2:1449
-506:2:1457
-507:2:1458
-508:2:1463
-509:2:1470
-510:2:1471
-511:2:1478
-512:2:1483
-513:0:2969
-514:2:1494
-515:0:2969
-516:2:1502
-517:2:1503
-518:2:1507
-519:2:1511
-520:2:1512
-521:2:1516
-522:2:1524
-523:2:1525
-524:2:1530
-525:2:1537
-526:2:1538
-527:2:1545
-528:2:1550
-529:0:2969
-530:2:1565
-531:0:2969
-532:2:1566
-533:0:2969
-534:1:13
-535:0:2969
-536:2:1567
-537:0:2969
-538:1:19
-539:0:2969
-540:1:20
-541:0:2969
-542:2:1566
-543:0:2969
-544:2:1567
-545:0:2969
-546:1:21
-547:1:25
-548:1:26
-549:1:34
-550:1:35
-551:1:39
-552:1:40
-553:1:48
-554:1:53
-555:1:57
-556:1:58
-557:1:65
-558:1:66
-559:1:77
-560:1:78
-561:1:79
-562:1:90
-563:1:95
-564:1:96
-565:0:2969
-566:2:1566
-567:0:2969
-568:2:1567
-569:0:2969
-570:1:108
-571:0:2969
-572:2:1566
-573:0:2969
-574:2:1567
-575:0:2969
-576:1:109
-577:1:113
-578:1:114
-579:1:122
-580:1:123
-581:1:127
-582:1:128
-583:1:136
-584:1:141
-585:1:145
-586:1:146
-587:1:153
-588:1:154
-589:1:165
-590:1:166
-591:1:167
-592:1:178
-593:1:183
-594:1:184
-595:0:2969
-596:1:196
-597:0:2969
-598:2:1566
-599:0:2969
-600:2:1567
-601:0:2969
-602:1:197
-603:0:2969
-604:2:1566
-605:0:2969
-606:2:1567
-607:0:2969
-608:1:198
-609:1:202
-610:1:203
-611:1:211
-612:1:212
-613:1:216
-614:1:217
-615:1:225
-616:1:230
-617:1:234
-618:1:235
-619:1:242
-620:1:243
-621:1:254
-622:1:255
-623:1:256
-624:1:267
-625:1:272
-626:1:273
-627:0:2969
-628:2:1566
-629:0:2969
-630:2:1567
-631:0:2969
-632:1:285
-633:0:2969
-634:1:486
-635:0:2969
-636:1:487
-637:0:2969
-638:1:20
-639:0:2969
-640:2:1566
-641:0:2969
-642:2:1567
-643:0:2969
-644:1:21
-645:1:25
-646:1:26
-647:1:34
-648:1:35
-649:1:36
-650:1:48
-651:1:53
-652:1:57
-653:1:58
-654:1:65
-655:1:66
-656:1:77
-657:1:78
-658:1:79
-659:1:90
-660:1:95
-661:1:96
-662:0:2969
-663:2:1566
-664:0:2969
-665:2:1567
-666:0:2969
-667:1:108
-668:0:2969
-669:2:1566
-670:0:2969
-671:2:1567
-672:0:2969
-673:1:109
-674:1:113
-675:1:114
-676:1:122
-677:1:123
-678:1:127
-679:1:128
-680:1:136
-681:1:141
-682:1:145
-683:1:146
-684:1:153
-685:1:154
-686:1:165
-687:1:166
-688:1:167
-689:1:178
-690:1:183
-691:1:184
-692:0:2969
-693:1:288
-694:0:2969
-695:2:1566
-696:0:2969
-697:2:1567
-698:0:2969
-699:1:289
-700:0:2969
-701:1:486
-702:0:2969
-703:1:487
-704:0:2969
-705:1:492
-706:0:2969
-707:2:1566
-708:0:2969
-709:2:1567
-710:0:2969
-711:1:497
-712:1:501
-713:1:502
-714:1:510
-715:1:511
-716:1:512
-717:1:524
-718:1:529
-719:1:533
-720:1:534
-721:1:541
-722:1:542
-723:1:553
-724:1:554
-725:1:555
-726:1:566
-727:1:571
-728:1:572
-729:0:2969
-730:2:1566
-731:0:2969
-732:2:1567
-733:0:2969
-734:1:584
-735:0:2969
-736:2:1566
-737:0:2969
-738:2:1567
-739:0:2969
-740:1:585
-741:1:589
-742:1:590
-743:1:598
-744:1:599
-745:1:603
-746:1:604
-747:1:612
-748:1:617
-749:1:621
-750:1:622
-751:1:629
-752:1:630
-753:1:641
-754:1:642
-755:1:643
-756:1:654
-757:1:659
-758:1:660
-759:0:2969
-760:2:1566
-761:0:2969
-762:2:1567
-763:0:2969
-764:1:672
-765:0:2969
-766:2:1566
-767:0:2969
-768:2:1567
-769:0:2969
-770:1:673
-771:1:677
-772:1:678
-773:1:686
-774:1:687
-775:1:691
-776:1:692
-777:1:700
-778:1:705
-779:1:709
-780:1:710
-781:1:717
-782:1:718
-783:1:729
-784:1:730
-785:1:731
-786:1:742
-787:1:747
-788:1:748
-789:0:2969
-790:2:1566
-791:0:2969
-792:2:1567
-793:0:2969
-794:1:760
-795:0:2969
-796:1:761
-797:0:2969
-798:1:762
-799:0:2969
-800:1:955
-801:0:2969
-802:1:956
-803:0:2969
-804:2:1566
-805:0:2969
-806:2:1567
-807:0:2969
-808:1:960
-809:0:2969
-810:2:1566
-811:0:2969
-812:2:1567
-813:0:2969
-814:1:961
-815:1:965
-816:1:966
-817:1:974
-818:1:975
-819:1:979
-820:1:980
-821:1:988
-822:1:993
-823:1:997
-824:1:998
-825:1:1005
-826:1:1006
-827:1:1017
-828:1:1018
-829:1:1019
-830:1:1030
-831:1:1035
-832:1:1036
-833:0:2969
-834:2:1566
-835:0:2969
-836:2:1567
-837:0:2969
-838:1:1048
-839:0:2969
-840:1:762
-841:0:2969
-842:1:955
-843:0:2969
-844:1:956
-845:0:2969
-846:2:1566
-847:0:2969
-848:2:1567
-849:0:2969
-850:1:960
-851:0:2969
-852:2:1566
-853:0:2969
-854:2:1567
-855:0:2969
-856:1:961
-857:1:965
-858:1:966
-859:1:974
-860:1:975
-861:1:976
-862:1:988
-863:1:993
-864:1:997
-865:1:998
-866:1:1005
-867:1:1006
-868:1:1017
-869:1:1018
-870:1:1019
-871:1:1030
-872:1:1035
-873:1:1036
-874:0:2969
-875:2:1566
-876:0:2969
-877:2:1567
-878:0:2969
-879:1:1048
-880:0:2969
-881:1:1052
-882:0:2969
-883:2:1566
-884:0:2969
-885:2:1567
-886:0:2969
-887:1:1057
-888:1:1061
-889:1:1062
-890:1:1070
-891:1:1071
-892:1:1072
-893:1:1084
-894:1:1089
-895:1:1093
-896:1:1094
-897:1:1101
-898:1:1102
-899:1:1113
-900:1:1114
-901:1:1115
-902:1:1126
-903:1:1131
-904:1:1132
-905:0:2969
-906:1:9
-907:0:2969
-908:2:1566
-909:0:2969
-910:2:1567
-911:0:2969
-912:1:10
-913:0:2969
-914:2:1568
-915:0:2969
-916:2:1574
-917:0:2969
-918:2:1575
-919:2:1579
-920:2:1580
-921:2:1588
-922:2:1589
-923:2:1593
-924:2:1594
-925:2:1602
-926:2:1607
-927:2:1611
-928:2:1612
-929:2:1619
-930:2:1620
-931:2:1631
-932:2:1632
-933:2:1633
-934:2:1644
-935:2:1649
-936:2:1650
-937:0:2969
-938:2:1662
-939:0:2969
-940:2:1663
-941:0:2969
-942:1:13
-943:0:2969
-944:2:1664
-945:0:2969
-946:1:19
-947:0:2969
-948:1:20
-949:0:2969
-950:2:1663
-951:0:2969
-952:2:1664
-953:0:2969
-954:1:21
-955:1:25
-956:1:26
-957:1:34
-958:1:35
-959:1:39
-960:1:40
-961:1:48
-962:1:53
-963:1:57
-964:1:58
-965:1:65
-966:1:66
-967:1:77
-968:1:78
-969:1:79
-970:1:90
-971:1:95
-972:1:96
-973:0:2969
-974:2:1663
-975:0:2969
-976:2:1664
-977:0:2969
-978:1:108
-979:0:2969
-980:2:1663
-981:0:2969
-982:2:1664
-983:0:2969
-984:1:109
-985:1:113
-986:1:114
-987:1:122
-988:1:123
-989:1:127
-990:1:128
-991:1:136
-992:1:141
-993:1:145
-994:1:146
-995:1:153
-996:1:154
-997:1:165
-998:1:166
-999:1:167
-1000:1:178
-1001:1:183
-1002:1:184
-1003:0:2969
-1004:1:196
-1005:0:2969
-1006:2:1663
-1007:0:2969
-1008:2:1664
-1009:0:2969
-1010:1:197
-1011:0:2969
-1012:2:1663
-1013:0:2969
-1014:2:1664
-1015:0:2969
-1016:1:198
-1017:1:202
-1018:1:203
-1019:1:211
-1020:1:212
-1021:1:216
-1022:1:217
-1023:1:225
-1024:1:230
-1025:1:234
-1026:1:235
-1027:1:242
-1028:1:243
-1029:1:254
-1030:1:255
-1031:1:256
-1032:1:267
-1033:1:272
-1034:1:273
-1035:0:2969
-1036:2:1663
-1037:0:2969
-1038:2:1664
-1039:0:2969
-1040:1:285
-1041:0:2969
-1042:1:486
-1043:0:2969
-1044:1:487
-1045:0:2969
-1046:1:20
-1047:0:2969
-1048:2:1663
-1049:0:2969
-1050:2:1664
-1051:0:2969
-1052:1:21
-1053:1:25
-1054:1:26
-1055:1:34
-1056:1:35
-1057:1:36
-1058:1:48
-1059:1:53
-1060:1:57
-1061:1:58
-1062:1:65
-1063:1:66
-1064:1:77
-1065:1:78
-1066:1:79
-1067:1:90
-1068:1:95
-1069:1:96
-1070:0:2969
-1071:2:1663
-1072:0:2969
-1073:2:1664
-1074:0:2969
-1075:1:108
-1076:0:2969
-1077:2:1663
-1078:0:2969
-1079:2:1664
-1080:0:2969
-1081:1:109
-1082:1:113
-1083:1:114
-1084:1:122
-1085:1:123
-1086:1:127
-1087:1:128
-1088:1:136
-1089:1:141
-1090:1:145
-1091:1:146
-1092:1:153
-1093:1:154
-1094:1:165
-1095:1:166
-1096:1:167
-1097:1:178
-1098:1:183
-1099:1:184
-1100:0:2969
-1101:1:288
-1102:0:2969
-1103:2:1663
-1104:0:2969
-1105:2:1664
-1106:0:2969
-1107:1:289
-1108:0:2969
-1109:1:486
-1110:0:2969
-1111:1:487
-1112:0:2969
-1113:1:492
-1114:0:2969
-1115:2:1663
-1116:0:2969
-1117:2:1664
-1118:0:2969
-1119:1:497
-1120:1:501
-1121:1:502
-1122:1:510
-1123:1:511
-1124:1:512
-1125:1:524
-1126:1:529
-1127:1:533
-1128:1:534
-1129:1:541
-1130:1:542
-1131:1:553
-1132:1:554
-1133:1:555
-1134:1:566
-1135:1:571
-1136:1:572
-1137:0:2969
-1138:2:1663
-1139:0:2969
-1140:2:1664
-1141:0:2969
-1142:1:584
-1143:0:2969
-1144:2:1663
-1145:0:2969
-1146:2:1664
-1147:0:2969
-1148:1:585
-1149:1:589
-1150:1:590
-1151:1:598
-1152:1:599
-1153:1:603
-1154:1:604
-1155:1:612
-1156:1:617
-1157:1:621
-1158:1:622
-1159:1:629
-1160:1:630
-1161:1:641
-1162:1:642
-1163:1:643
-1164:1:654
-1165:1:659
-1166:1:660
-1167:0:2969
-1168:2:1663
-1169:0:2969
-1170:2:1664
-1171:0:2969
-1172:1:672
-1173:0:2969
-1174:2:1663
-1175:0:2969
-1176:2:1664
-1177:0:2969
-1178:1:673
-1179:1:677
-1180:1:678
-1181:1:686
-1182:1:687
-1183:1:691
-1184:1:692
-1185:1:700
-1186:1:705
-1187:1:709
-1188:1:710
-1189:1:717
-1190:1:718
-1191:1:729
-1192:1:730
-1193:1:731
-1194:1:742
-1195:1:747
-1196:1:748
-1197:0:2969
-1198:2:1663
-1199:0:2969
-1200:2:1664
-1201:0:2969
-1202:1:760
-1203:0:2969
-1204:1:761
-1205:0:2969
-1206:1:762
-1207:0:2969
-1208:1:955
-1209:0:2969
-1210:1:956
-1211:0:2969
-1212:2:1663
-1213:0:2969
-1214:2:1664
-1215:0:2969
-1216:1:960
-1217:0:2969
-1218:2:1663
-1219:0:2969
-1220:2:1664
-1221:0:2969
-1222:1:961
-1223:1:965
-1224:1:966
-1225:1:974
-1226:1:975
-1227:1:979
-1228:1:980
-1229:1:988
-1230:1:993
-1231:1:997
-1232:1:998
-1233:1:1005
-1234:1:1006
-1235:1:1017
-1236:1:1018
-1237:1:1019
-1238:1:1030
-1239:1:1035
-1240:1:1036
-1241:0:2969
-1242:2:1663
-1243:0:2969
-1244:2:1664
-1245:0:2969
-1246:1:1048
-1247:0:2969
-1248:1:762
-1249:0:2969
-1250:1:955
-1251:0:2969
-1252:1:956
-1253:0:2969
-1254:2:1663
-1255:0:2969
-1256:2:1664
-1257:0:2969
-1258:1:960
-1259:0:2969
-1260:2:1663
-1261:0:2969
-1262:2:1664
-1263:0:2969
-1264:1:961
-1265:1:965
-1266:1:966
-1267:1:974
-1268:1:975
-1269:1:976
-1270:1:988
-1271:1:993
-1272:1:997
-1273:1:998
-1274:1:1005
-1275:1:1006
-1276:1:1017
-1277:1:1018
-1278:1:1019
-1279:1:1030
-1280:1:1035
-1281:1:1036
-1282:0:2969
-1283:2:1663
-1284:0:2969
-1285:2:1664
-1286:0:2969
-1287:1:1048
-1288:0:2969
-1289:1:1052
-1290:0:2969
-1291:2:1663
-1292:0:2969
-1293:2:1664
-1294:0:2969
-1295:1:1057
-1296:1:1061
-1297:1:1062
-1298:1:1070
-1299:1:1071
-1300:1:1072
-1301:1:1084
-1302:1:1089
-1303:1:1093
-1304:1:1094
-1305:1:1101
-1306:1:1102
-1307:1:1113
-1308:1:1114
-1309:1:1115
-1310:1:1126
-1311:1:1131
-1312:1:1132
-1313:0:2969
-1314:1:9
-1315:0:2969
-1316:2:1663
-1317:0:2969
-1318:2:1664
-1319:0:2969
-1320:1:10
-1321:0:2969
-1322:2:1665
-1323:0:2969
-1324:2:1671
-1325:0:2969
-1326:2:1674
-1327:2:1675
-1328:2:1687
-1329:2:1688
-1330:2:1692
-1331:2:1693
-1332:2:1701
-1333:2:1706
-1334:2:1710
-1335:2:1711
-1336:2:1718
-1337:2:1719
-1338:2:1730
-1339:2:1731
-1340:2:1732
-1341:2:1743
-1342:2:1748
-1343:2:1749
-1344:0:2969
-1345:2:1761
-1346:0:2969
-1347:2:1762
-1348:0:2969
-1349:1:13
-1350:0:2969
-1351:2:1763
-1352:0:2969
-1353:1:19
-1354:0:2969
-1355:1:20
-1356:0:2969
-1357:2:1762
-1358:0:2969
-1359:2:1763
-1360:0:2969
-1361:1:21
-1362:1:25
-1363:1:26
-1364:1:34
-1365:1:35
-1366:1:39
-1367:1:40
-1368:1:48
-1369:1:53
-1370:1:57
-1371:1:58
-1372:1:65
-1373:1:66
-1374:1:77
-1375:1:78
-1376:1:79
-1377:1:90
-1378:1:95
-1379:1:96
-1380:0:2969
-1381:2:1762
-1382:0:2969
-1383:2:1763
-1384:0:2969
-1385:1:108
-1386:0:2969
-1387:2:1762
-1388:0:2969
-1389:2:1763
-1390:0:2969
-1391:1:109
-1392:1:113
-1393:1:114
-1394:1:122
-1395:1:123
-1396:1:127
-1397:1:128
-1398:1:136
-1399:1:141
-1400:1:145
-1401:1:146
-1402:1:153
-1403:1:154
-1404:1:165
-1405:1:166
-1406:1:167
-1407:1:178
-1408:1:183
-1409:1:184
-1410:0:2969
-1411:1:196
-1412:0:2969
-1413:2:1762
-1414:0:2969
-1415:2:1763
-1416:0:2969
-1417:1:197
-1418:0:2969
-1419:2:1762
-1420:0:2969
-1421:2:1763
-1422:0:2969
-1423:1:198
-1424:1:202
-1425:1:203
-1426:1:211
-1427:1:212
-1428:1:216
-1429:1:217
-1430:1:225
-1431:1:230
-1432:1:234
-1433:1:235
-1434:1:242
-1435:1:243
-1436:1:254
-1437:1:255
-1438:1:256
-1439:1:267
-1440:1:272
-1441:1:273
-1442:0:2969
-1443:2:1762
-1444:0:2969
-1445:2:1763
-1446:0:2969
-1447:1:285
-1448:0:2969
-1449:1:486
-1450:0:2969
-1451:1:487
-1452:0:2969
-1453:1:20
-1454:0:2969
-1455:2:1762
-1456:0:2969
-1457:2:1763
-1458:0:2969
-1459:1:21
-1460:1:25
-1461:1:26
-1462:1:34
-1463:1:35
-1464:1:36
-1465:1:48
-1466:1:53
-1467:1:57
-1468:1:58
-1469:1:65
-1470:1:66
-1471:1:77
-1472:1:78
-1473:1:79
-1474:1:90
-1475:1:95
-1476:1:96
-1477:0:2969
-1478:2:1762
-1479:0:2969
-1480:2:1763
-1481:0:2969
-1482:1:108
-1483:0:2969
-1484:2:1762
-1485:0:2969
-1486:2:1763
-1487:0:2969
-1488:1:109
-1489:1:113
-1490:1:114
-1491:1:122
-1492:1:123
-1493:1:127
-1494:1:128
-1495:1:136
-1496:1:141
-1497:1:145
-1498:1:146
-1499:1:153
-1500:1:154
-1501:1:165
-1502:1:166
-1503:1:167
-1504:1:178
-1505:1:183
-1506:1:184
-1507:0:2969
-1508:1:288
-1509:0:2969
-1510:2:1762
-1511:0:2969
-1512:2:1763
-1513:0:2969
-1514:1:289
-1515:0:2969
-1516:1:486
-1517:0:2969
-1518:1:487
-1519:0:2969
-1520:1:492
-1521:0:2969
-1522:2:1762
-1523:0:2969
-1524:2:1763
-1525:0:2969
-1526:1:497
-1527:1:501
-1528:1:502
-1529:1:510
-1530:1:511
-1531:1:512
-1532:1:524
-1533:1:529
-1534:1:533
-1535:1:534
-1536:1:541
-1537:1:542
-1538:1:553
-1539:1:554
-1540:1:555
-1541:1:566
-1542:1:571
-1543:1:572
-1544:0:2969
-1545:2:1762
-1546:0:2969
-1547:2:1763
-1548:0:2969
-1549:1:584
-1550:0:2969
-1551:2:1762
-1552:0:2969
-1553:2:1763
-1554:0:2969
-1555:1:585
-1556:1:589
-1557:1:590
-1558:1:598
-1559:1:599
-1560:1:603
-1561:1:604
-1562:1:612
-1563:1:617
-1564:1:621
-1565:1:622
-1566:1:629
-1567:1:630
-1568:1:641
-1569:1:642
-1570:1:643
-1571:1:654
-1572:1:659
-1573:1:660
-1574:0:2969
-1575:2:1762
-1576:0:2969
-1577:2:1763
-1578:0:2969
-1579:1:672
-1580:0:2969
-1581:2:1762
-1582:0:2969
-1583:2:1763
-1584:0:2969
-1585:1:673
-1586:1:677
-1587:1:678
-1588:1:686
-1589:1:687
-1590:1:691
-1591:1:692
-1592:1:700
-1593:1:705
-1594:1:709
-1595:1:710
-1596:1:717
-1597:1:718
-1598:1:729
-1599:1:730
-1600:1:731
-1601:1:742
-1602:1:747
-1603:1:748
-1604:0:2969
-1605:2:1762
-1606:0:2969
-1607:2:1763
-1608:0:2969
-1609:1:760
-1610:0:2969
-1611:1:761
-1612:0:2969
-1613:1:762
-1614:0:2969
-1615:1:955
-1616:0:2969
-1617:1:956
-1618:0:2969
-1619:2:1762
-1620:0:2969
-1621:2:1763
-1622:0:2969
-1623:1:960
-1624:0:2969
-1625:2:1762
-1626:0:2969
-1627:2:1763
-1628:0:2969
-1629:1:961
-1630:1:965
-1631:1:966
-1632:1:974
-1633:1:975
-1634:1:979
-1635:1:980
-1636:1:988
-1637:1:993
-1638:1:997
-1639:1:998
-1640:1:1005
-1641:1:1006
-1642:1:1017
-1643:1:1018
-1644:1:1019
-1645:1:1030
-1646:1:1035
-1647:1:1036
-1648:0:2969
-1649:2:1762
-1650:0:2969
-1651:2:1763
-1652:0:2969
-1653:1:1048
-1654:0:2969
-1655:1:762
-1656:0:2969
-1657:1:955
-1658:0:2969
-1659:1:956
-1660:0:2969
-1661:2:1762
-1662:0:2969
-1663:2:1763
-1664:0:2969
-1665:1:960
-1666:0:2969
-1667:2:1762
-1668:0:2969
-1669:2:1763
-1670:0:2969
-1671:1:961
-1672:1:965
-1673:1:966
-1674:1:974
-1675:1:975
-1676:1:976
-1677:1:988
-1678:1:993
-1679:1:997
-1680:1:998
-1681:1:1005
-1682:1:1006
-1683:1:1017
-1684:1:1018
-1685:1:1019
-1686:1:1030
-1687:1:1035
-1688:1:1036
-1689:0:2969
-1690:2:1762
-1691:0:2969
-1692:2:1763
-1693:0:2969
-1694:1:1048
-1695:0:2969
-1696:1:1052
-1697:0:2969
-1698:2:1762
-1699:0:2969
-1700:2:1763
-1701:0:2969
-1702:1:1057
-1703:1:1061
-1704:1:1062
-1705:1:1070
-1706:1:1071
-1707:1:1072
-1708:1:1084
-1709:1:1089
-1710:1:1093
-1711:1:1094
-1712:1:1101
-1713:1:1102
-1714:1:1113
-1715:1:1114
-1716:1:1115
-1717:1:1126
-1718:1:1131
-1719:1:1132
-1720:0:2969
-1721:1:9
-1722:0:2969
-1723:2:1762
-1724:0:2969
-1725:2:1763
-1726:0:2969
-1727:1:10
-1728:0:2969
-1729:2:1764
-1730:0:2969
-1731:2:1770
-1732:0:2969
-1733:2:1771
-1734:0:2969
-1735:2:1772
-1736:0:2969
-1737:2:1773
-1738:0:2969
-1739:2:1774
-1740:2:1778
-1741:2:1779
-1742:2:1787
-1743:2:1788
-1744:2:1792
-1745:2:1793
-1746:2:1801
-1747:2:1806
-1748:2:1810
-1749:2:1811
-1750:2:1818
-1751:2:1819
-1752:2:1830
-1753:2:1831
-1754:2:1832
-1755:2:1843
-1756:2:1848
-1757:2:1849
-1758:0:2969
-1759:2:1861
-1760:0:2969
-1761:2:1862
-1762:0:2969
-1763:1:13
-1764:0:2969
-1765:2:1863
-1766:0:2969
-1767:1:19
-1768:0:2969
-1769:1:20
-1770:0:2969
-1771:2:1862
-1772:0:2969
-1773:2:1863
-1774:0:2969
-1775:1:21
-1776:1:25
-1777:1:26
-1778:1:34
-1779:1:35
-1780:1:39
-1781:1:40
-1782:1:48
-1783:1:53
-1784:1:57
-1785:1:58
-1786:1:65
-1787:1:66
-1788:1:77
-1789:1:78
-1790:1:79
-1791:1:90
-1792:1:95
-1793:1:96
-1794:0:2969
-1795:2:1862
-1796:0:2969
-1797:2:1863
-1798:0:2969
-1799:1:108
-1800:0:2969
-1801:2:1862
-1802:0:2969
-1803:2:1863
-1804:0:2969
-1805:1:109
-1806:1:113
-1807:1:114
-1808:1:122
-1809:1:123
-1810:1:127
-1811:1:128
-1812:1:136
-1813:1:141
-1814:1:145
-1815:1:146
-1816:1:153
-1817:1:154
-1818:1:165
-1819:1:166
-1820:1:167
-1821:1:178
-1822:1:183
-1823:1:184
-1824:0:2969
-1825:1:196
-1826:0:2969
-1827:2:1862
-1828:0:2969
-1829:2:1863
-1830:0:2969
-1831:1:197
-1832:0:2969
-1833:2:1862
-1834:0:2969
-1835:2:1863
-1836:0:2969
-1837:1:198
-1838:1:202
-1839:1:203
-1840:1:211
-1841:1:212
-1842:1:216
-1843:1:217
-1844:1:225
-1845:1:230
-1846:1:234
-1847:1:235
-1848:1:242
-1849:1:243
-1850:1:254
-1851:1:255
-1852:1:256
-1853:1:267
-1854:1:272
-1855:1:273
-1856:0:2969
-1857:2:1862
-1858:0:2969
-1859:2:1863
-1860:0:2969
-1861:1:285
-1862:0:2969
-1863:1:486
-1864:0:2969
-1865:1:487
-1866:0:2969
-1867:1:20
-1868:0:2969
-1869:2:1862
-1870:0:2969
-1871:2:1863
-1872:0:2969
-1873:1:21
-1874:1:25
-1875:1:26
-1876:1:34
-1877:1:35
-1878:1:36
-1879:1:48
-1880:1:53
-1881:1:57
-1882:1:58
-1883:1:65
-1884:1:66
-1885:1:77
-1886:1:78
-1887:1:79
-1888:1:90
-1889:1:95
-1890:1:96
-1891:0:2969
-1892:2:1862
-1893:0:2969
-1894:2:1863
-1895:0:2969
-1896:1:108
-1897:0:2969
-1898:2:1862
-1899:0:2969
-1900:2:1863
-1901:0:2969
-1902:1:109
-1903:1:113
-1904:1:114
-1905:1:122
-1906:1:123
-1907:1:127
-1908:1:128
-1909:1:136
-1910:1:141
-1911:1:145
-1912:1:146
-1913:1:153
-1914:1:154
-1915:1:165
-1916:1:166
-1917:1:167
-1918:1:178
-1919:1:183
-1920:1:184
-1921:0:2969
-1922:1:288
-1923:0:2969
-1924:2:1862
-1925:0:2969
-1926:2:1863
-1927:0:2969
-1928:1:289
-1929:0:2969
-1930:1:486
-1931:0:2969
-1932:1:487
-1933:0:2969
-1934:1:492
-1935:0:2969
-1936:2:1862
-1937:0:2969
-1938:2:1863
-1939:0:2969
-1940:1:497
-1941:1:501
-1942:1:502
-1943:1:510
-1944:1:511
-1945:1:512
-1946:1:524
-1947:1:529
-1948:1:533
-1949:1:534
-1950:1:541
-1951:1:542
-1952:1:553
-1953:1:554
-1954:1:555
-1955:1:566
-1956:1:571
-1957:1:572
-1958:0:2969
-1959:2:1862
-1960:0:2969
-1961:2:1863
-1962:0:2969
-1963:1:584
-1964:0:2969
-1965:2:1862
-1966:0:2969
-1967:2:1863
-1968:0:2969
-1969:1:585
-1970:1:589
-1971:1:590
-1972:1:598
-1973:1:599
-1974:1:603
-1975:1:604
-1976:1:612
-1977:1:617
-1978:1:621
-1979:1:622
-1980:1:629
-1981:1:630
-1982:1:641
-1983:1:642
-1984:1:643
-1985:1:654
-1986:1:659
-1987:1:660
-1988:0:2969
-1989:2:1862
-1990:0:2969
-1991:2:1863
-1992:0:2969
-1993:1:672
-1994:0:2969
-1995:2:1862
-1996:0:2969
-1997:2:1863
-1998:0:2969
-1999:1:673
-2000:1:677
-2001:1:678
-2002:1:686
-2003:1:687
-2004:1:691
-2005:1:692
-2006:1:700
-2007:1:705
-2008:1:709
-2009:1:710
-2010:1:717
-2011:1:718
-2012:1:729
-2013:1:730
-2014:1:731
-2015:1:742
-2016:1:747
-2017:1:748
-2018:0:2969
-2019:2:1862
-2020:0:2969
-2021:2:1863
-2022:0:2969
-2023:1:760
-2024:0:2969
-2025:1:761
-2026:0:2969
-2027:1:762
-2028:0:2969
-2029:1:955
-2030:0:2969
-2031:1:956
-2032:0:2969
-2033:2:1862
-2034:0:2969
-2035:2:1863
-2036:0:2969
-2037:1:960
-2038:0:2969
-2039:2:1862
-2040:0:2969
-2041:2:1863
-2042:0:2969
-2043:1:961
-2044:1:965
-2045:1:966
-2046:1:974
-2047:1:975
-2048:1:979
-2049:1:980
-2050:1:988
-2051:1:993
-2052:1:997
-2053:1:998
-2054:1:1005
-2055:1:1006
-2056:1:1017
-2057:1:1018
-2058:1:1019
-2059:1:1030
-2060:1:1035
-2061:1:1036
-2062:0:2969
-2063:2:1862
-2064:0:2969
-2065:2:1863
-2066:0:2969
-2067:1:1048
-2068:0:2969
-2069:1:762
-2070:0:2969
-2071:1:955
-2072:0:2969
-2073:1:956
-2074:0:2969
-2075:2:1862
-2076:0:2969
-2077:2:1863
-2078:0:2969
-2079:1:960
-2080:0:2969
-2081:2:1862
-2082:0:2969
-2083:2:1863
-2084:0:2969
-2085:1:961
-2086:1:965
-2087:1:966
-2088:1:974
-2089:1:975
-2090:1:976
-2091:1:988
-2092:1:993
-2093:1:997
-2094:1:998
-2095:1:1005
-2096:1:1006
-2097:1:1017
-2098:1:1018
-2099:1:1019
-2100:1:1030
-2101:1:1035
-2102:1:1036
-2103:0:2969
-2104:2:1862
-2105:0:2969
-2106:2:1863
-2107:0:2969
-2108:1:1048
-2109:0:2969
-2110:1:1052
-2111:0:2969
-2112:2:1862
-2113:0:2969
-2114:2:1863
-2115:0:2969
-2116:1:1057
-2117:1:1061
-2118:1:1062
-2119:1:1070
-2120:1:1071
-2121:1:1072
-2122:1:1084
-2123:1:1089
-2124:1:1093
-2125:1:1094
-2126:1:1101
-2127:1:1102
-2128:1:1113
-2129:1:1114
-2130:1:1115
-2131:1:1126
-2132:1:1131
-2133:1:1132
-2134:0:2969
-2135:1:9
-2136:0:2969
-2137:2:1862
-2138:0:2969
-2139:2:1863
-2140:0:2969
-2141:1:10
-2142:0:2969
-2143:2:1864
-2144:0:2969
-2145:2:1967
-2146:0:2969
-2147:2:2072
-2148:0:2969
-2149:2:2073
-2150:0:2969
-2151:2:2077
-2152:0:2969
-2153:2:2083
-2154:2:2087
-2155:2:2088
-2156:2:2096
-2157:2:2097
-2158:2:2101
-2159:2:2102
-2160:2:2110
-2161:2:2115
-2162:2:2119
-2163:2:2120
-2164:2:2127
-2165:2:2128
-2166:2:2139
-2167:2:2140
-2168:2:2141
-2169:2:2152
-2170:2:2157
-2171:2:2158
-2172:0:2969
-2173:2:2170
-2174:0:2969
-2175:2:2171
-2176:0:2969
-2177:1:13
-2178:0:2969
-2179:2:2172
-2180:0:2969
-2181:1:19
-2182:0:2969
-2183:1:20
-2184:0:2969
-2185:2:2171
-2186:0:2969
-2187:2:2172
-2188:0:2969
-2189:1:21
-2190:1:25
-2191:1:26
-2192:1:34
-2193:1:35
-2194:1:39
-2195:1:40
-2196:1:48
-2197:1:53
-2198:1:57
-2199:1:58
-2200:1:65
-2201:1:66
-2202:1:77
-2203:1:78
-2204:1:79
-2205:1:90
-2206:1:95
-2207:1:96
-2208:0:2969
-2209:2:2171
-2210:0:2969
-2211:2:2172
-2212:0:2969
-2213:1:108
-2214:0:2969
-2215:2:2171
-2216:0:2969
-2217:2:2172
-2218:0:2969
-2219:1:109
-2220:1:113
-2221:1:114
-2222:1:122
-2223:1:123
-2224:1:127
-2225:1:128
-2226:1:136
-2227:1:141
-2228:1:145
-2229:1:146
-2230:1:153
-2231:1:154
-2232:1:165
-2233:1:166
-2234:1:167
-2235:1:178
-2236:1:183
-2237:1:184
-2238:0:2969
-2239:1:196
-2240:0:2969
-2241:2:2171
-2242:0:2969
-2243:2:2172
-2244:0:2969
-2245:1:197
-2246:0:2969
-2247:2:2171
-2248:0:2969
-2249:2:2172
-2250:0:2969
-2251:1:198
-2252:1:202
-2253:1:203
-2254:1:211
-2255:1:212
-2256:1:216
-2257:1:217
-2258:1:225
-2259:1:230
-2260:1:234
-2261:1:235
-2262:1:242
-2263:1:243
-2264:1:254
-2265:1:255
-2266:1:256
-2267:1:267
-2268:1:272
-2269:1:273
-2270:0:2969
-2271:2:2171
-2272:0:2969
-2273:2:2172
-2274:0:2969
-2275:1:285
-2276:0:2969
-2277:1:486
-2278:0:2969
-2279:1:487
-2280:0:2969
-2281:1:20
-2282:0:2969
-2283:2:2171
-2284:0:2969
-2285:2:2172
-2286:0:2969
-2287:1:21
-2288:1:25
-2289:1:26
-2290:1:34
-2291:1:35
-2292:1:36
-2293:1:48
-2294:1:53
-2295:1:57
-2296:1:58
-2297:1:65
-2298:1:66
-2299:1:77
-2300:1:78
-2301:1:79
-2302:1:90
-2303:1:95
-2304:1:96
-2305:0:2969
-2306:2:2171
-2307:0:2969
-2308:2:2172
-2309:0:2969
-2310:1:108
-2311:0:2969
-2312:2:2171
-2313:0:2969
-2314:2:2172
-2315:0:2969
-2316:1:109
-2317:1:113
-2318:1:114
-2319:1:122
-2320:1:123
-2321:1:127
-2322:1:128
-2323:1:136
-2324:1:141
-2325:1:145
-2326:1:146
-2327:1:153
-2328:1:154
-2329:1:165
-2330:1:166
-2331:1:167
-2332:1:178
-2333:1:183
-2334:1:184
-2335:0:2969
-2336:1:288
-2337:0:2969
-2338:2:2171
-2339:0:2969
-2340:2:2172
-2341:0:2969
-2342:1:289
-2343:0:2969
-2344:1:486
-2345:0:2969
-2346:1:487
-2347:0:2969
-2348:1:492
-2349:0:2969
-2350:2:2171
-2351:0:2969
-2352:2:2172
-2353:0:2969
-2354:1:497
-2355:1:501
-2356:1:502
-2357:1:510
-2358:1:511
-2359:1:512
-2360:1:524
-2361:1:529
-2362:1:533
-2363:1:534
-2364:1:541
-2365:1:542
-2366:1:553
-2367:1:554
-2368:1:555
-2369:1:566
-2370:1:571
-2371:1:572
-2372:0:2969
-2373:2:2171
-2374:0:2969
-2375:2:2172
-2376:0:2969
-2377:1:584
-2378:0:2969
-2379:2:2171
-2380:0:2969
-2381:2:2172
-2382:0:2969
-2383:1:585
-2384:1:589
-2385:1:590
-2386:1:598
-2387:1:599
-2388:1:603
-2389:1:604
-2390:1:612
-2391:1:617
-2392:1:621
-2393:1:622
-2394:1:629
-2395:1:630
-2396:1:641
-2397:1:642
-2398:1:643
-2399:1:654
-2400:1:659
-2401:1:660
-2402:0:2969
-2403:2:2171
-2404:0:2969
-2405:2:2172
-2406:0:2969
-2407:1:672
-2408:0:2969
-2409:2:2171
-2410:0:2969
-2411:2:2172
-2412:0:2969
-2413:1:673
-2414:1:677
-2415:1:678
-2416:1:686
-2417:1:687
-2418:1:691
-2419:1:692
-2420:1:700
-2421:1:705
-2422:1:709
-2423:1:710
-2424:1:717
-2425:1:718
-2426:1:729
-2427:1:730
-2428:1:731
-2429:1:742
-2430:1:747
-2431:1:748
-2432:0:2969
-2433:2:2171
-2434:0:2969
-2435:2:2172
-2436:0:2969
-2437:1:760
-2438:0:2969
-2439:1:761
-2440:0:2969
-2441:1:762
-2442:0:2969
-2443:1:955
-2444:0:2969
-2445:1:956
-2446:0:2969
-2447:2:2171
-2448:0:2969
-2449:2:2172
-2450:0:2969
-2451:1:960
-2452:0:2969
-2453:2:2171
-2454:0:2969
-2455:2:2172
-2456:0:2969
-2457:1:961
-2458:1:965
-2459:1:966
-2460:1:974
-2461:1:975
-2462:1:979
-2463:1:980
-2464:1:988
-2465:1:993
-2466:1:997
-2467:1:998
-2468:1:1005
-2469:1:1006
-2470:1:1017
-2471:1:1018
-2472:1:1019
-2473:1:1030
-2474:1:1035
-2475:1:1036
-2476:0:2969
-2477:2:2171
-2478:0:2969
-2479:2:2172
-2480:0:2969
-2481:1:1048
-2482:0:2969
-2483:1:762
-2484:0:2969
-2485:1:955
-2486:0:2969
-2487:1:956
-2488:0:2969
-2489:2:2171
-2490:0:2969
-2491:2:2172
-2492:0:2969
-2493:1:960
-2494:0:2969
-2495:2:2171
-2496:0:2969
-2497:2:2172
-2498:0:2969
-2499:1:961
-2500:1:965
-2501:1:966
-2502:1:974
-2503:1:975
-2504:1:976
-2505:1:988
-2506:1:993
-2507:1:997
-2508:1:998
-2509:1:1005
-2510:1:1006
-2511:1:1017
-2512:1:1018
-2513:1:1019
-2514:1:1030
-2515:1:1035
-2516:1:1036
-2517:0:2969
-2518:2:2171
-2519:0:2969
-2520:2:2172
-2521:0:2969
-2522:1:1048
-2523:0:2969
-2524:1:1052
-2525:0:2969
-2526:2:2171
-2527:0:2969
-2528:2:2172
-2529:0:2969
-2530:1:1057
-2531:1:1061
-2532:1:1062
-2533:1:1070
-2534:1:1071
-2535:1:1072
-2536:1:1084
-2537:1:1089
-2538:1:1093
-2539:1:1094
-2540:1:1101
-2541:1:1102
-2542:1:1113
-2543:1:1114
-2544:1:1115
-2545:1:1126
-2546:1:1131
-2547:1:1132
-2548:0:2969
-2549:1:9
-2550:0:2969
-2551:2:2171
-2552:0:2969
-2553:2:2172
-2554:0:2969
-2555:1:10
-2556:0:2969
-2557:2:2173
-2558:0:2969
-2559:2:2179
-2560:0:2969
-2561:2:2180
-2562:2:2184
-2563:2:2185
-2564:2:2193
-2565:2:2194
-2566:2:2198
-2567:2:2199
-2568:2:2207
-2569:2:2212
-2570:2:2216
-2571:2:2217
-2572:2:2224
-2573:2:2225
-2574:2:2236
-2575:2:2237
-2576:2:2238
-2577:2:2249
-2578:2:2254
-2579:2:2255
-2580:0:2969
-2581:2:2267
-2582:0:2969
-2583:2:2268
-2584:0:2969
-2585:1:13
-2586:0:2969
-2587:2:2269
-2588:0:2969
-2589:1:19
-2590:0:2969
-2591:1:20
-2592:0:2969
-2593:2:2268
-2594:0:2969
-2595:2:2269
-2596:0:2969
-2597:1:21
-2598:1:25
-2599:1:26
-2600:1:34
-2601:1:35
-2602:1:39
-2603:1:40
-2604:1:48
-2605:1:53
-2606:1:57
-2607:1:58
-2608:1:65
-2609:1:66
-2610:1:77
-2611:1:78
-2612:1:79
-2613:1:90
-2614:1:95
-2615:1:96
-2616:0:2969
-2617:2:2268
-2618:0:2969
-2619:2:2269
-2620:0:2969
-2621:1:108
-2622:0:2969
-2623:2:2268
-2624:0:2969
-2625:2:2269
-2626:0:2969
-2627:1:109
-2628:1:113
-2629:1:114
-2630:1:122
-2631:1:123
-2632:1:127
-2633:1:128
-2634:1:136
-2635:1:141
-2636:1:145
-2637:1:146
-2638:1:153
-2639:1:154
-2640:1:165
-2641:1:166
-2642:1:167
-2643:1:178
-2644:1:183
-2645:1:184
-2646:0:2969
-2647:1:196
-2648:0:2969
-2649:2:2268
-2650:0:2969
-2651:2:2269
-2652:0:2969
-2653:1:197
-2654:0:2969
-2655:2:2268
-2656:0:2969
-2657:2:2269
-2658:0:2969
-2659:1:198
-2660:1:202
-2661:1:203
-2662:1:211
-2663:1:212
-2664:1:216
-2665:1:217
-2666:1:225
-2667:1:230
-2668:1:234
-2669:1:235
-2670:1:242
-2671:1:243
-2672:1:254
-2673:1:255
-2674:1:256
-2675:1:267
-2676:1:272
-2677:1:273
-2678:0:2969
-2679:2:2268
-2680:0:2969
-2681:2:2269
-2682:0:2969
-2683:1:285
-2684:0:2969
-2685:1:486
-2686:0:2969
-2687:1:487
-2688:0:2969
-2689:1:20
-2690:0:2969
-2691:2:2268
-2692:0:2969
-2693:2:2269
-2694:0:2969
-2695:1:21
-2696:1:25
-2697:1:26
-2698:1:34
-2699:1:35
-2700:1:36
-2701:1:48
-2702:1:53
-2703:1:57
-2704:1:58
-2705:1:65
-2706:1:66
-2707:1:77
-2708:1:78
-2709:1:79
-2710:1:90
-2711:1:95
-2712:1:96
-2713:0:2969
-2714:2:2268
-2715:0:2969
-2716:2:2269
-2717:0:2969
-2718:1:108
-2719:0:2969
-2720:2:2268
-2721:0:2969
-2722:2:2269
-2723:0:2969
-2724:1:109
-2725:1:113
-2726:1:114
-2727:1:122
-2728:1:123
-2729:1:127
-2730:1:128
-2731:1:136
-2732:1:141
-2733:1:145
-2734:1:146
-2735:1:153
-2736:1:154
-2737:1:165
-2738:1:166
-2739:1:167
-2740:1:178
-2741:1:183
-2742:1:184
-2743:0:2969
-2744:1:288
-2745:0:2969
-2746:2:2268
-2747:0:2969
-2748:2:2269
-2749:0:2969
-2750:1:289
-2751:0:2969
-2752:1:486
-2753:0:2969
-2754:1:487
-2755:0:2969
-2756:1:492
-2757:0:2969
-2758:2:2268
-2759:0:2969
-2760:2:2269
-2761:0:2969
-2762:1:497
-2763:1:501
-2764:1:502
-2765:1:510
-2766:1:511
-2767:1:512
-2768:1:524
-2769:1:529
-2770:1:533
-2771:1:534
-2772:1:541
-2773:1:542
-2774:1:553
-2775:1:554
-2776:1:555
-2777:1:566
-2778:1:571
-2779:1:572
-2780:0:2969
-2781:2:2268
-2782:0:2969
-2783:2:2269
-2784:0:2969
-2785:1:584
-2786:0:2969
-2787:2:2268
-2788:0:2969
-2789:2:2269
-2790:0:2969
-2791:1:585
-2792:1:589
-2793:1:590
-2794:1:598
-2795:1:599
-2796:1:603
-2797:1:604
-2798:1:612
-2799:1:617
-2800:1:621
-2801:1:622
-2802:1:629
-2803:1:630
-2804:1:641
-2805:1:642
-2806:1:643
-2807:1:654
-2808:1:659
-2809:1:660
-2810:0:2969
-2811:2:2268
-2812:0:2969
-2813:2:2269
-2814:0:2969
-2815:1:672
-2816:0:2969
-2817:2:2268
-2818:0:2969
-2819:2:2269
-2820:0:2969
-2821:1:673
-2822:1:677
-2823:1:678
-2824:1:686
-2825:1:687
-2826:1:691
-2827:1:692
-2828:1:700
-2829:1:705
-2830:1:709
-2831:1:710
-2832:1:717
-2833:1:718
-2834:1:729
-2835:1:730
-2836:1:731
-2837:1:742
-2838:1:747
-2839:1:748
-2840:0:2969
-2841:2:2268
-2842:0:2969
-2843:2:2269
-2844:0:2969
-2845:1:760
-2846:0:2969
-2847:1:761
-2848:0:2969
-2849:1:762
-2850:0:2969
-2851:1:955
-2852:0:2969
-2853:1:956
-2854:0:2969
-2855:2:2268
-2856:0:2969
-2857:2:2269
-2858:0:2969
-2859:1:960
-2860:0:2969
-2861:2:2268
-2862:0:2969
-2863:2:2269
-2864:0:2969
-2865:1:961
-2866:1:965
-2867:1:966
-2868:1:974
-2869:1:975
-2870:1:979
-2871:1:980
-2872:1:988
-2873:1:993
-2874:1:997
-2875:1:998
-2876:1:1005
-2877:1:1006
-2878:1:1017
-2879:1:1018
-2880:1:1019
-2881:1:1030
-2882:1:1035
-2883:1:1036
-2884:0:2969
-2885:2:2268
-2886:0:2969
-2887:2:2269
-2888:0:2969
-2889:1:1048
-2890:0:2969
-2891:1:762
-2892:0:2969
-2893:1:955
-2894:0:2969
-2895:1:956
-2896:0:2969
-2897:2:2268
-2898:0:2969
-2899:2:2269
-2900:0:2969
-2901:1:960
-2902:0:2969
-2903:2:2268
-2904:0:2969
-2905:2:2269
-2906:0:2969
-2907:1:961
-2908:1:965
-2909:1:966
-2910:1:974
-2911:1:975
-2912:1:976
-2913:1:988
-2914:1:993
-2915:1:997
-2916:1:998
-2917:1:1005
-2918:1:1006
-2919:1:1017
-2920:1:1018
-2921:1:1019
-2922:1:1030
-2923:1:1035
-2924:1:1036
-2925:0:2969
-2926:2:2268
-2927:0:2969
-2928:2:2269
-2929:0:2969
-2930:1:1048
-2931:0:2969
-2932:1:1052
-2933:0:2969
-2934:2:2268
-2935:0:2969
-2936:2:2269
-2937:0:2969
-2938:1:1057
-2939:1:1061
-2940:1:1062
-2941:1:1070
-2942:1:1079
-2943:1:1080
-2944:1:1084
-2945:1:1089
-2946:1:1093
-2947:1:1094
-2948:1:1101
-2949:1:1102
-2950:1:1113
-2951:1:1114
-2952:1:1117
-2953:1:1118
-2954:1:1126
-2955:1:1131
-2956:1:1132
-2957:0:2969
-2958:1:9
-2959:0:2969
-2960:2:2268
-2961:0:2969
-2962:2:2269
-2963:0:2969
-2964:1:10
-2965:0:2969
-2966:2:2270
-2967:0:2969
-2968:2:2276
-2969:0:2969
-2970:2:2279
-2971:2:2280
-2972:2:2292
-2973:2:2293
-2974:2:2297
-2975:2:2298
-2976:2:2306
-2977:2:2311
-2978:2:2315
-2979:2:2316
-2980:2:2323
-2981:2:2324
-2982:2:2335
-2983:2:2336
-2984:2:2337
-2985:2:2348
-2986:2:2353
-2987:2:2354
-2988:0:2969
-2989:2:2366
-2990:0:2969
-2991:2:2367
-2992:0:2969
-2993:1:13
-2994:0:2969
-2995:2:2368
-2996:0:2969
-2997:1:19
-2998:0:2969
-2999:1:20
-3000:0:2969
-3001:2:2367
-3002:0:2969
-3003:2:2368
-3004:0:2969
-3005:1:21
-3006:1:25
-3007:1:26
-3008:1:34
-3009:1:35
-3010:1:36
-3011:1:48
-3012:1:53
-3013:1:57
-3014:1:58
-3015:1:65
-3016:1:66
-3017:1:77
-3018:1:78
-3019:1:79
-3020:1:90
-3021:1:95
-3022:1:96
-3023:0:2969
-3024:2:2367
-3025:0:2969
-3026:2:2368
-3027:0:2969
-3028:1:108
-3029:0:2969
-3030:2:2367
-3031:0:2969
-3032:2:2368
-3033:0:2969
-3034:1:109
-3035:1:113
-3036:1:114
-3037:1:122
-3038:1:123
-3039:1:127
-3040:1:128
-3041:1:136
-3042:1:141
-3043:1:145
-3044:1:146
-3045:1:153
-3046:1:154
-3047:1:165
-3048:1:166
-3049:1:167
-3050:1:178
-3051:1:183
-3052:1:184
-3053:0:2969
-3054:1:196
-3055:0:2969
-3056:2:2367
-3057:0:2969
-3058:2:2368
-3059:0:2969
-3060:1:197
-3061:0:2969
-3062:2:2367
-3063:0:2969
-3064:2:2368
-3065:0:2969
-3066:1:198
-3067:1:202
-3068:1:203
-3069:1:211
-3070:1:212
-3071:1:216
-3072:1:217
-3073:1:225
-3074:1:230
-3075:1:234
-3076:1:235
-3077:1:242
-3078:1:243
-3079:1:254
-3080:1:255
-3081:1:256
-3082:1:267
-3083:1:272
-3084:1:273
-3085:0:2969
-3086:2:2367
-3087:0:2969
-3088:2:2368
-3089:0:2969
-3090:1:285
-3091:0:2969
-3092:1:486
-3093:0:2969
-3094:1:487
-3095:0:2969
-3096:1:20
-3097:0:2969
-3098:2:2367
-3099:0:2969
-3100:2:2368
-3101:0:2969
-3102:1:21
-3103:1:25
-3104:1:26
-3105:1:34
-3106:1:35
-3107:1:36
-3108:1:48
-3109:1:53
-3110:1:57
-3111:1:58
-3112:1:65
-3113:1:66
-3114:1:77
-3115:1:78
-3116:1:79
-3117:1:90
-3118:1:95
-3119:1:96
-3120:0:2969
-3121:2:2367
-3122:0:2969
-3123:2:2368
-3124:0:2969
-3125:1:108
-3126:0:2969
-3127:2:2367
-3128:0:2969
-3129:2:2368
-3130:0:2969
-3131:1:109
-3132:1:113
-3133:1:114
-3134:1:122
-3135:1:123
-3136:1:127
-3137:1:128
-3138:1:136
-3139:1:141
-3140:1:145
-3141:1:146
-3142:1:153
-3143:1:154
-3144:1:165
-3145:1:166
-3146:1:167
-3147:1:178
-3148:1:183
-3149:1:184
-3150:0:2969
-3151:1:288
-3152:0:2969
-3153:2:2367
-3154:0:2969
-3155:2:2368
-3156:0:2969
-3157:1:289
-3158:0:2969
-3159:1:486
-3160:0:2969
-3161:1:487
-3162:0:2969
-3163:1:492
-3164:0:2969
-3165:2:2367
-3166:0:2969
-3167:2:2368
-3168:0:2969
-3169:1:497
-3170:1:501
-3171:1:502
-3172:1:510
-3173:1:511
-3174:1:512
-3175:1:524
-3176:1:529
-3177:1:533
-3178:1:534
-3179:1:541
-3180:1:542
-3181:1:553
-3182:1:554
-3183:1:555
-3184:1:566
-3185:1:571
-3186:1:572
-3187:0:2969
-3188:2:2367
-3189:0:2969
-3190:2:2368
-3191:0:2969
-3192:1:584
-3193:0:2969
-3194:2:2367
-3195:0:2969
-3196:2:2368
-3197:0:2969
-3198:1:585
-3199:1:589
-3200:1:590
-3201:1:598
-3202:1:599
-3203:1:603
-3204:1:604
-3205:1:612
-3206:1:617
-3207:1:621
-3208:1:622
-3209:1:629
-3210:1:630
-3211:1:641
-3212:1:642
-3213:1:643
-3214:1:654
-3215:1:659
-3216:1:660
-3217:0:2969
-3218:2:2367
-3219:0:2969
-3220:2:2368
-3221:0:2969
-3222:1:672
-3223:0:2969
-3224:2:2367
-3225:0:2969
-3226:2:2368
-3227:0:2969
-3228:1:673
-3229:1:677
-3230:1:678
-3231:1:686
-3232:1:687
-3233:1:691
-3234:1:692
-3235:1:700
-3236:1:705
-3237:1:709
-3238:1:710
-3239:1:717
-3240:1:718
-3241:1:729
-3242:1:730
-3243:1:731
-3244:1:742
-3245:1:747
-3246:1:748
-3247:0:2969
-3248:2:2367
-3249:0:2969
-3250:2:2368
-3251:0:2969
-3252:1:760
-3253:0:2969
-3254:1:761
-3255:0:2969
-3256:1:762
-3257:0:2969
-3258:1:955
-3259:0:2969
-3260:1:956
-3261:0:2969
-3262:2:2367
-3263:0:2969
-3264:2:2368
-3265:0:2969
-3266:1:960
-3267:0:2969
-3268:2:2367
-3269:0:2969
-3270:2:2368
-3271:0:2969
-3272:1:961
-3273:1:965
-3274:1:966
-3275:1:974
-3276:1:975
-3277:1:979
-3278:1:980
-3279:1:988
-3280:1:993
-3281:1:997
-3282:1:998
-3283:1:1005
-3284:1:1006
-3285:1:1017
-3286:1:1018
-3287:1:1019
-3288:1:1030
-3289:1:1035
-3290:1:1036
-3291:0:2969
-3292:2:2367
-3293:0:2969
-3294:2:2368
-3295:0:2969
-3296:1:1048
-3297:0:2969
-3298:1:762
-3299:0:2969
-3300:1:955
-3301:0:2969
-3302:1:956
-3303:0:2969
-3304:2:2367
-3305:0:2969
-3306:2:2368
-3307:0:2969
-3308:1:960
-3309:0:2969
-3310:2:2367
-3311:0:2969
-3312:2:2368
-3313:0:2969
-3314:1:961
-3315:1:965
-3316:1:966
-3317:1:974
-3318:1:975
-3319:1:976
-3320:1:988
-3321:1:993
-3322:1:997
-3323:1:998
-3324:1:1005
-3325:1:1006
-3326:1:1017
-3327:1:1018
-3328:1:1019
-3329:1:1030
-3330:1:1035
-3331:1:1036
-3332:0:2969
-3333:2:2367
-3334:0:2969
-3335:2:2368
-3336:0:2969
-3337:1:1048
-3338:0:2969
-3339:1:1052
-3340:0:2969
-3341:2:2367
-3342:0:2969
-3343:2:2368
-3344:0:2969
-3345:1:1057
-3346:1:1061
-3347:1:1062
-3348:1:1070
-3349:1:1071
-3350:1:1072
-3351:1:1084
-3352:1:1089
-3353:1:1093
-3354:1:1094
-3355:1:1101
-3356:1:1102
-3357:1:1113
-3358:1:1114
-3359:1:1115
-3360:1:1126
-3361:1:1131
-3362:1:1132
-3363:0:2969
-3364:1:9
-3365:0:2969
-3366:2:2367
-3367:0:2969
-3368:2:2368
-3369:0:2969
-3370:1:10
-3371:0:2969
-3372:2:2369
-3373:0:2969
-3374:2:2375
-3375:0:2969
-3376:2:2376
-3377:0:2969
-3378:2:2377
-3379:0:2969
-3380:2:2378
-3381:0:2969
-3382:2:2379
-3383:2:2383
-3384:2:2384
-3385:2:2392
-3386:2:2393
-3387:2:2397
-3388:2:2398
-3389:2:2406
-3390:2:2411
-3391:2:2415
-3392:2:2416
-3393:2:2423
-3394:2:2424
-3395:2:2435
-3396:2:2443
-3397:2:2444
-3398:2:2448
-3399:2:2453
-3400:2:2454
-3401:0:2969
-3402:2:2466
-3403:0:2969
-3404:2:2467
-3405:0:2969
-3406:1:13
--1:-1:-1
-3407:0:2969
-3408:2:2468
-3409:0:2969
-3410:1:19
-3411:0:2969
-3412:1:20
-3413:0:2969
-3414:2:2467
-3415:0:2969
-3416:2:2468
-3417:0:2969
-3418:1:21
-3419:1:25
-3420:1:26
-3421:1:34
-3422:1:35
-3423:1:39
-3424:1:40
-3425:1:48
-3426:1:53
-3427:1:57
-3428:1:58
-3429:1:65
-3430:1:66
-3431:1:77
-3432:1:78
-3433:1:79
-3434:1:90
-3435:1:95
-3436:1:96
-3437:0:2969
-3438:2:2467
-3439:0:2969
-3440:2:2468
-3441:0:2969
-3442:1:108
-3443:0:2969
-3444:2:2467
-3445:0:2969
-3446:2:2468
-3447:0:2969
-3448:1:109
-3449:1:113
-3450:1:114
-3451:1:122
-3452:1:123
-3453:1:127
-3454:1:128
-3455:1:136
-3456:1:141
-3457:1:145
-3458:1:146
-3459:1:153
-3460:1:154
-3461:1:165
-3462:1:166
-3463:1:167
-3464:1:178
-3465:1:183
-3466:1:184
-3467:0:2969
-3468:1:196
-3469:0:2969
-3470:2:2467
-3471:0:2969
-3472:2:2468
-3473:0:2969
-3474:1:197
-3475:0:2969
-3476:2:2467
-3477:0:2969
-3478:2:2468
-3479:0:2969
-3480:1:198
-3481:1:202
-3482:1:203
-3483:1:211
-3484:1:212
-3485:1:216
-3486:1:217
-3487:1:225
-3488:1:230
-3489:1:234
-3490:1:235
-3491:1:242
-3492:1:243
-3493:1:254
-3494:1:255
-3495:1:256
-3496:1:267
-3497:1:272
-3498:1:273
-3499:0:2969
-3500:2:2467
-3501:0:2969
-3502:2:2468
-3503:0:2969
-3504:1:285
-3505:0:2969
-3506:1:486
-3507:0:2969
-3508:1:487
-3509:0:2969
-3510:1:20
-3511:0:2969
-3512:2:2467
-3513:0:2969
-3514:2:2468
-3515:0:2969
-3516:1:21
-3517:1:25
-3518:1:26
-3519:1:34
-3520:1:35
-3521:1:36
-3522:1:48
-3523:1:53
-3524:1:57
-3525:1:58
-3526:1:65
-3527:1:66
-3528:1:77
-3529:1:78
-3530:1:79
-3531:1:90
-3532:1:95
-3533:1:96
-3534:0:2969
-3535:2:2467
-3536:0:2969
-3537:2:2468
-3538:0:2969
-3539:1:108
-3540:0:2969
-3541:2:2467
-3542:0:2969
-3543:2:2468
-3544:0:2969
-3545:1:109
-3546:1:113
-3547:1:114
-3548:1:122
-3549:1:123
-3550:1:127
-3551:1:128
-3552:1:136
-3553:1:141
-3554:1:145
-3555:1:146
-3556:1:153
-3557:1:154
-3558:1:165
-3559:1:166
-3560:1:167
-3561:1:178
-3562:1:183
-3563:1:184
-3564:0:2969
-3565:1:288
-3566:0:2969
-3567:2:2467
-3568:0:2969
-3569:2:2468
-3570:0:2969
-3571:1:289
-3572:0:2969
-3573:1:486
-3574:0:2969
-3575:1:487
-3576:0:2969
-3577:1:492
-3578:0:2969
-3579:2:2467
-3580:0:2969
-3581:2:2468
-3582:0:2969
-3583:1:497
-3584:1:501
-3585:1:502
-3586:1:510
-3587:1:511
-3588:1:512
-3589:1:524
-3590:1:529
-3591:1:533
-3592:1:534
-3593:1:541
-3594:1:542
-3595:1:553
-3596:1:554
-3597:1:555
-3598:1:566
-3599:1:571
-3600:1:572
-3601:0:2969
-3602:2:2467
-3603:0:2969
-3604:2:2468
-3605:0:2969
-3606:1:584
-3607:0:2969
-3608:2:2467
-3609:0:2969
-3610:2:2468
-3611:0:2969
-3612:1:585
-3613:1:589
-3614:1:590
-3615:1:598
-3616:1:599
-3617:1:603
-3618:1:604
-3619:1:612
-3620:1:617
-3621:1:621
-3622:1:622
-3623:1:629
-3624:1:630
-3625:1:641
-3626:1:642
-3627:1:643
-3628:1:654
-3629:1:659
-3630:1:660
-3631:0:2969
-3632:2:2467
-3633:0:2969
-3634:2:2468
-3635:0:2969
-3636:1:672
-3637:0:2969
-3638:2:2467
-3639:0:2969
-3640:2:2468
-3641:0:2969
-3642:1:673
-3643:1:677
-3644:1:678
-3645:1:686
-3646:1:687
-3647:1:691
-3648:1:692
-3649:1:700
-3650:1:705
-3651:1:709
-3652:1:710
-3653:1:717
-3654:1:718
-3655:1:729
-3656:1:730
-3657:1:731
-3658:1:742
-3659:1:747
-3660:1:748
-3661:0:2969
-3662:2:2467
-3663:0:2969
-3664:2:2468
-3665:0:2969
-3666:1:760
-3667:0:2969
-3668:1:761
-3669:0:2969
-3670:1:762
-3671:0:2969
-3672:1:955
-3673:0:2969
-3674:1:956
-3675:0:2969
-3676:2:2467
-3677:0:2969
-3678:2:2468
-3679:0:2969
-3680:1:960
-3681:0:2969
-3682:2:2467
-3683:0:2969
-3684:2:2468
-3685:0:2969
-3686:1:961
-3687:1:965
-3688:1:966
-3689:1:974
-3690:1:975
-3691:1:979
-3692:1:980
-3693:1:988
-3694:1:993
-3695:1:997
-3696:1:998
-3697:1:1005
-3698:1:1006
-3699:1:1017
-3700:1:1018
-3701:1:1019
-3702:1:1030
-3703:1:1035
-3704:1:1036
-3705:0:2969
-3706:2:2467
-3707:0:2969
-3708:2:2468
-3709:0:2969
-3710:1:1048
-3711:0:2969
-3712:1:762
-3713:0:2969
-3714:1:955
-3715:0:2969
-3716:1:956
-3717:0:2969
-3718:2:2467
-3719:0:2969
-3720:2:2468
-3721:0:2969
-3722:1:960
-3723:0:2969
-3724:2:2467
-3725:0:2969
-3726:2:2468
-3727:0:2969
-3728:1:961
-3729:1:965
-3730:1:966
-3731:1:974
-3732:1:975
-3733:1:976
-3734:1:988
-3735:1:993
-3736:1:997
-3737:1:998
-3738:1:1005
-3739:1:1006
-3740:1:1017
-3741:1:1018
-3742:1:1019
-3743:1:1030
-3744:1:1035
-3745:1:1036
-3746:0:2969
-3747:2:2467
-3748:0:2969
-3749:2:2468
-3750:0:2969
-3751:1:1048
-3752:0:2969
-3753:1:1052
-3754:0:2969
-3755:2:2467
-3756:0:2969
-3757:2:2468
-3758:0:2969
-3759:1:1057
-3760:1:1061
-3761:1:1062
-3762:1:1070
-3763:1:1071
-3764:1:1072
-3765:1:1084
-3766:1:1089
-3767:1:1093
-3768:1:1094
-3769:1:1101
-3770:1:1102
-3771:1:1113
-3772:1:1114
-3773:1:1115
-3774:1:1126
-3775:1:1131
-3776:1:1132
-3777:0:2969
-3778:1:9
-3779:0:2969
-3780:2:2467
-3781:0:2969
-3782:2:2468
-3783:0:2969
-3784:1:10
-3785:0:2969
-3786:2:2469
-3787:0:2969
-3788:2:2475
-3789:0:2969
-3790:2:2476
-3791:2:2480
-3792:2:2481
-3793:2:2489
-3794:2:2490
-3795:2:2494
-3796:2:2495
-3797:2:2503
-3798:2:2508
-3799:2:2512
-3800:2:2513
-3801:2:2520
-3802:2:2521
-3803:2:2532
-3804:2:2540
-3805:2:2541
-3806:2:2545
-3807:2:2550
-3808:2:2551
-3809:0:2969
-3810:2:2563
-3811:0:2969
-3812:2:2564
-3813:0:2969
-3814:1:13
-3815:0:2969
-3816:2:2565
-3817:0:2969
-3818:1:19
-3819:0:2969
-3820:1:20
-3821:0:2969
-3822:2:2564
-3823:0:2969
-3824:2:2565
-3825:0:2969
-3826:1:21
-3827:1:25
-3828:1:26
-3829:1:34
-3830:1:35
-3831:1:39
-3832:1:40
-3833:1:48
-3834:1:53
-3835:1:57
-3836:1:58
-3837:1:65
-3838:1:66
-3839:1:77
-3840:1:78
-3841:1:79
-3842:1:90
-3843:1:95
-3844:1:96
-3845:0:2969
-3846:2:2564
-3847:0:2969
-3848:2:2565
-3849:0:2969
-3850:1:108
-3851:0:2969
-3852:2:2564
-3853:0:2969
-3854:2:2565
-3855:0:2969
-3856:1:109
-3857:1:113
-3858:1:114
-3859:1:122
-3860:1:123
-3861:1:127
-3862:1:128
-3863:1:136
-3864:1:141
-3865:1:145
-3866:1:146
-3867:1:153
-3868:1:154
-3869:1:165
-3870:1:166
-3871:1:167
-3872:1:178
-3873:1:183
-3874:1:184
-3875:0:2969
-3876:1:196
-3877:0:2969
-3878:2:2564
-3879:0:2969
-3880:2:2565
-3881:0:2969
-3882:1:197
-3883:0:2969
-3884:2:2564
-3885:0:2969
-3886:2:2565
-3887:0:2969
-3888:1:198
-3889:1:202
-3890:1:203
-3891:1:211
-3892:1:212
-3893:1:216
-3894:1:217
-3895:1:225
-3896:1:230
-3897:1:234
-3898:1:235
-3899:1:242
-3900:1:243
-3901:1:254
-3902:1:255
-3903:1:256
-3904:1:267
-3905:1:272
-3906:1:273
-3907:0:2969
-3908:2:2564
-3909:0:2969
-3910:2:2565
-3911:0:2969
-3912:1:285
-3913:0:2969
-3914:1:486
-3915:0:2969
-3916:1:487
-3917:0:2969
-3918:1:20
-3919:0:2969
-3920:2:2564
-3921:0:2969
-3922:2:2565
-3923:0:2969
-3924:1:21
-3925:1:25
-3926:1:26
-3927:1:34
-3928:1:35
-3929:1:36
-3930:1:48
-3931:1:53
-3932:1:57
-3933:1:58
-3934:1:65
-3935:1:66
-3936:1:77
-3937:1:78
-3938:1:79
-3939:1:90
-3940:1:95
-3941:1:96
-3942:0:2969
-3943:2:2564
-3944:0:2969
-3945:2:2565
-3946:0:2969
-3947:1:108
-3948:0:2969
-3949:2:2564
-3950:0:2969
-3951:2:2565
-3952:0:2969
-3953:1:109
-3954:1:113
-3955:1:114
-3956:1:122
-3957:1:123
-3958:1:127
-3959:1:128
-3960:1:136
-3961:1:141
-3962:1:145
-3963:1:146
-3964:1:153
-3965:1:154
-3966:1:165
-3967:1:166
-3968:1:167
-3969:1:178
-3970:1:183
-3971:1:184
-3972:0:2969
-3973:1:288
-3974:0:2969
-3975:2:2564
-3976:0:2969
-3977:2:2565
-3978:0:2969
-3979:1:289
-3980:0:2969
-3981:1:486
-3982:0:2969
-3983:1:487
-3984:0:2969
-3985:1:492
-3986:0:2969
-3987:2:2564
-3988:0:2969
-3989:2:2565
-3990:0:2969
-3991:1:497
-3992:1:501
-3993:1:502
-3994:1:510
-3995:1:511
-3996:1:512
-3997:1:524
-3998:1:529
-3999:1:533
-4000:1:534
-4001:1:541
-4002:1:542
-4003:1:553
-4004:1:554
-4005:1:555
-4006:1:566
-4007:1:571
-4008:1:572
-4009:0:2969
-4010:2:2564
-4011:0:2969
-4012:2:2565
-4013:0:2969
-4014:1:584
-4015:0:2969
-4016:2:2564
-4017:0:2969
-4018:2:2565
-4019:0:2969
-4020:1:585
-4021:1:589
-4022:1:590
-4023:1:598
-4024:1:599
-4025:1:603
-4026:1:604
-4027:1:612
-4028:1:617
-4029:1:621
-4030:1:622
-4031:1:629
-4032:1:630
-4033:1:641
-4034:1:642
-4035:1:643
-4036:1:654
-4037:1:659
-4038:1:660
-4039:0:2969
-4040:2:2564
-4041:0:2969
-4042:2:2565
-4043:0:2969
-4044:1:672
-4045:0:2969
-4046:2:2564
-4047:0:2969
-4048:2:2565
-4049:0:2969
-4050:1:673
-4051:1:677
-4052:1:678
-4053:1:686
-4054:1:687
-4055:1:691
-4056:1:692
-4057:1:700
-4058:1:705
-4059:1:709
-4060:1:710
-4061:1:717
-4062:1:718
-4063:1:729
-4064:1:730
-4065:1:731
-4066:1:742
-4067:1:747
-4068:1:748
-4069:0:2969
-4070:2:2564
-4071:0:2969
-4072:2:2565
-4073:0:2969
-4074:1:760
-4075:0:2969
-4076:1:761
-4077:0:2969
-4078:1:762
-4079:0:2969
-4080:1:955
-4081:0:2969
-4082:1:956
-4083:0:2969
-4084:2:2564
-4085:0:2969
-4086:2:2565
-4087:0:2969
-4088:1:960
-4089:0:2969
-4090:2:2564
-4091:0:2969
-4092:2:2565
-4093:0:2969
-4094:1:961
-4095:1:965
-4096:1:966
-4097:1:974
-4098:1:975
-4099:1:979
-4100:1:980
-4101:1:988
-4102:1:993
-4103:1:997
-4104:1:998
-4105:1:1005
-4106:1:1006
-4107:1:1017
-4108:1:1018
-4109:1:1019
-4110:1:1030
-4111:1:1035
-4112:1:1036
-4113:0:2969
-4114:2:2564
-4115:0:2969
-4116:2:2565
-4117:0:2969
-4118:1:1048
-4119:0:2969
-4120:1:762
-4121:0:2969
-4122:1:955
-4123:0:2969
-4124:1:956
-4125:0:2969
-4126:2:2564
-4127:0:2969
-4128:2:2565
-4129:0:2969
-4130:1:960
-4131:0:2969
-4132:2:2564
-4133:0:2969
-4134:2:2565
-4135:0:2969
-4136:1:961
-4137:1:965
-4138:1:966
-4139:1:974
-4140:1:975
-4141:1:976
-4142:1:988
-4143:1:993
-4144:1:997
-4145:1:998
-4146:1:1005
-4147:1:1006
-4148:1:1017
-4149:1:1018
-4150:1:1019
-4151:1:1030
-4152:1:1035
-4153:1:1036
-4154:0:2969
-4155:2:2564
-4156:0:2969
-4157:2:2565
-4158:0:2969
-4159:1:1048
-4160:0:2969
-4161:1:1052
-4162:0:2969
-4163:2:2564
-4164:0:2969
-4165:2:2565
-4166:0:2969
-4167:1:1057
-4168:1:1061
-4169:1:1062
-4170:1:1070
-4171:1:1071
-4172:1:1072
-4173:1:1084
-4174:1:1089
-4175:1:1093
-4176:1:1094
-4177:1:1101
-4178:1:1102
-4179:1:1113
-4180:1:1114
-4181:1:1115
-4182:1:1126
-4183:1:1131
-4184:1:1132
-4185:0:2969
-4186:1:9
-4187:0:2969
-4188:2:2564
-4189:0:2969
-4190:2:2565
-4191:0:2969
-4192:1:10
-4193:0:2969
-4194:2:2566
-4195:0:2969
-4196:1:11
-4197:0:2969
-4198:2:2377
-4199:0:2969
-4200:1:12
-4201:0:2969
-4202:2:2378
-4203:0:2969
-4204:2:2379
-4205:2:2383
-4206:2:2384
-4207:2:2392
-4208:2:2393
-4209:2:2397
-4210:2:2398
-4211:2:2406
-4212:2:2411
-4213:2:2415
-4214:2:2416
-4215:2:2423
-4216:2:2424
-4217:2:2435
-4218:2:2443
-4219:2:2444
-4220:2:2448
-4221:2:2453
-4222:2:2454
-4223:0:2969
-4224:2:2466
-4225:0:2969
-4226:2:2467
-4227:0:2969
-4228:1:13
diff --git a/formal-model/urcu/result-standard-execution-nest/DEFINES b/formal-model/urcu/result-standard-execution-nest/DEFINES
deleted file mode 100644 (file)
index 150a83c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu/result-standard-execution-nest/Makefile b/formal-model/urcu/result-standard-execution-nest/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu/result-standard-execution-nest/asserts.log b/formal-model/urcu/result-standard-execution-nest/asserts.log
deleted file mode 100644 (file)
index 51f1ac0..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-Depth=    3212 States=    1e+06 Transitions= 1.17e+07 Memory=   519.572        t=   7.66 R=   1e+05
-Depth=    3212 States=    2e+06 Transitions= 2.38e+07 Memory=   572.990        t=     16 R=   1e+05
-Depth=    3212 States=    3e+06 Transitions= 3.62e+07 Memory=   626.408        t=   24.9 R=   1e+05
-pan: resizing hashtable to -w22..  done
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 48 byte, depth reached 3212, errors: 0
-  3539988 states, stored
- 39085459 states, matched
- 42625447 transitions (= stored+matched)
-1.5602888e+08 atomic steps
-hash conflicts:  28971442 (resolved)
-
-Stats on memory usage (in Megabytes):
-  256.576      equivalent memory usage for states (stored*(State-vector + overhead))
-  196.718      actual memory usage for states (compression: 76.67%)
-               state-vector as stored = 30 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  686.338      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, ".input.spin", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 61, "(1)"
-       line 417, ".input.spin", state 91, "(1)"
-       line 398, ".input.spin", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 151, "(1)"
-       line 417, ".input.spin", state 181, "(1)"
-       line 398, ".input.spin", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 242, "(1)"
-       line 417, ".input.spin", state 272, "(1)"
-       line 398, ".input.spin", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 360, "(1)"
-       line 417, ".input.spin", state 390, "(1)"
-       line 539, ".input.spin", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 398, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 59, "(1)"
-       line 412, ".input.spin", state 72, "(1)"
-       line 417, ".input.spin", state 89, "(1)"
-       line 398, ".input.spin", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 153, "(1)"
-       line 412, ".input.spin", state 166, "(1)"
-       line 651, ".input.spin", state 199, "(1)"
-       line 174, ".input.spin", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 240, "(1)"
-       line 163, ".input.spin", state 248, "(1)"
-       line 167, ".input.spin", state 260, "(1)"
-       line 174, ".input.spin", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 303, "(1)"
-       line 163, ".input.spin", state 311, "(1)"
-       line 167, ".input.spin", state 323, "(1)"
-       line 174, ".input.spin", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 370, "(1)"
-       line 163, ".input.spin", state 378, "(1)"
-       line 167, ".input.spin", state 390, "(1)"
-       line 398, ".input.spin", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 449, "(1)"
-       line 412, ".input.spin", state 462, "(1)"
-       line 417, ".input.spin", state 479, "(1)"
-       line 398, ".input.spin", state 498, "(1)"
-       line 402, ".input.spin", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 554, "(1)"
-       line 417, ".input.spin", state 571, "(1)"
-       line 402, ".input.spin", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 647, "(1)"
-       line 417, ".input.spin", state 664, "(1)"
-       line 178, ".input.spin", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 710, "(1)"
-       line 163, ".input.spin", state 718, "(1)"
-       line 167, ".input.spin", state 730, "(1)"
-       line 174, ".input.spin", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 773, "(1)"
-       line 163, ".input.spin", state 781, "(1)"
-       line 167, ".input.spin", state 793, "(1)"
-       line 174, ".input.spin", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 840, "(1)"
-       line 163, ".input.spin", state 848, "(1)"
-       line 167, ".input.spin", state 860, "(1)"
-       line 398, ".input.spin", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, ".input.spin", state 884, "(1)"
-       line 398, ".input.spin", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, ".input.spin", state 885, "else"
-       line 398, ".input.spin", state 888, "(1)"
-       line 402, ".input.spin", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 898, "(1)"
-       line 402, ".input.spin", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, ".input.spin", state 899, "else"
-       line 402, ".input.spin", state 902, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 400, ".input.spin", state 908, "((i<1))"
-       line 400, ".input.spin", state 908, "((i>=1))"
-       line 407, ".input.spin", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 927, "(1)"
-       line 408, ".input.spin", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, ".input.spin", state 928, "else"
-       line 408, ".input.spin", state 931, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 412, ".input.spin", state 940, "(1)"
-       line 412, ".input.spin", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, ".input.spin", state 941, "else"
-       line 412, ".input.spin", state 944, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 410, ".input.spin", state 950, "((i<1))"
-       line 410, ".input.spin", state 950, "((i>=1))"
-       line 417, ".input.spin", state 957, "(1)"
-       line 417, ".input.spin", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, ".input.spin", state 958, "else"
-       line 417, ".input.spin", state 961, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 402, ".input.spin", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1040, "(1)"
-       line 417, ".input.spin", state 1057, "(1)"
-       line 402, ".input.spin", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1130, "(1)"
-       line 417, ".input.spin", state 1147, "(1)"
-       line 398, ".input.spin", state 1166, "(1)"
-       line 402, ".input.spin", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1222, "(1)"
-       line 417, ".input.spin", state 1239, "(1)"
-       line 402, ".input.spin", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1315, "(1)"
-       line 417, ".input.spin", state 1332, "(1)"
-       line 178, ".input.spin", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1378, "(1)"
-       line 163, ".input.spin", state 1386, "(1)"
-       line 167, ".input.spin", state 1398, "(1)"
-       line 174, ".input.spin", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1441, "(1)"
-       line 163, ".input.spin", state 1449, "(1)"
-       line 167, ".input.spin", state 1461, "(1)"
-       line 174, ".input.spin", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1508, "(1)"
-       line 163, ".input.spin", state 1516, "(1)"
-       line 167, ".input.spin", state 1528, "(1)"
-       line 398, ".input.spin", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, ".input.spin", state 1552, "(1)"
-       line 398, ".input.spin", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, ".input.spin", state 1553, "else"
-       line 398, ".input.spin", state 1556, "(1)"
-       line 402, ".input.spin", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 1566, "(1)"
-       line 402, ".input.spin", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, ".input.spin", state 1567, "else"
-       line 402, ".input.spin", state 1570, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 400, ".input.spin", state 1576, "((i<1))"
-       line 400, ".input.spin", state 1576, "((i>=1))"
-       line 407, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 1595, "(1)"
-       line 408, ".input.spin", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, ".input.spin", state 1596, "else"
-       line 408, ".input.spin", state 1599, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 412, ".input.spin", state 1608, "(1)"
-       line 412, ".input.spin", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, ".input.spin", state 1609, "else"
-       line 412, ".input.spin", state 1612, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 410, ".input.spin", state 1618, "((i<1))"
-       line 410, ".input.spin", state 1618, "((i>=1))"
-       line 417, ".input.spin", state 1625, "(1)"
-       line 417, ".input.spin", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, ".input.spin", state 1626, "else"
-       line 417, ".input.spin", state 1629, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 178, ".input.spin", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1681, "(1)"
-       line 163, ".input.spin", state 1689, "(1)"
-       line 167, ".input.spin", state 1701, "(1)"
-       line 174, ".input.spin", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1744, "(1)"
-       line 163, ".input.spin", state 1752, "(1)"
-       line 167, ".input.spin", state 1764, "(1)"
-       line 174, ".input.spin", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1811, "(1)"
-       line 163, ".input.spin", state 1819, "(1)"
-       line 167, ".input.spin", state 1831, "(1)"
-       line 701, ".input.spin", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 29.8 seconds
-pan: rate 118871.32 states/second
-pan: avg transition delay 6.9864e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/asserts.spin.input b/formal-model/urcu/result-standard-execution-nest/asserts.spin.input
deleted file mode 100644 (file)
index f2f00e4..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/asserts.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu.sh b/formal-model/urcu/result-standard-execution-nest/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu.spin b/formal-model/urcu/result-standard-execution-nest/urcu.spin
deleted file mode 100644 (file)
index 2cfcb70..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free.log b/formal-model/urcu/result-standard-execution-nest/urcu_free.log
deleted file mode 100644 (file)
index 884b15e..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-Depth=    3880 States=    1e+06 Transitions= 1.18e+07 Memory=   527.190        t=   9.53 R=   1e+05
-Depth=    3880 States=    2e+06 Transitions= 2.39e+07 Memory=   588.225        t=   19.8 R=   1e+05
-Depth=    3880 States=    3e+06 Transitions= 3.61e+07 Memory=   649.260        t=   30.5 R=   1e+05
-pan: resizing hashtable to -w22..  done
-Depth=    3880 States=    4e+06 Transitions= 4.84e+07 Memory=   741.318        t=   41.1 R=   1e+05
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3880, errors: 0
-  4015564 states, stored
- 44539121 states, matched
- 48554685 transitions (= stored+matched)
-1.7777933e+08 atomic steps
-hash conflicts:  33629695 (resolved)
-
-Stats on memory usage (in Megabytes):
-  321.681      equivalent memory usage for states (stored*(State-vector + overhead))
-  252.629      actual memory usage for states (compression: 78.53%)
-               state-vector as stored = 38 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  742.295      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 61, "(1)"
-       line 417, "pan.___", state 91, "(1)"
-       line 398, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 151, "(1)"
-       line 417, "pan.___", state 181, "(1)"
-       line 398, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 242, "(1)"
-       line 417, "pan.___", state 272, "(1)"
-       line 398, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 360, "(1)"
-       line 417, "pan.___", state 390, "(1)"
-       line 539, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 412, "pan.___", state 72, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 153, "(1)"
-       line 412, "pan.___", state 166, "(1)"
-       line 651, "pan.___", state 199, "(1)"
-       line 174, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 240, "(1)"
-       line 163, "pan.___", state 248, "(1)"
-       line 167, "pan.___", state 260, "(1)"
-       line 174, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 303, "(1)"
-       line 163, "pan.___", state 311, "(1)"
-       line 167, "pan.___", state 323, "(1)"
-       line 174, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 370, "(1)"
-       line 163, "pan.___", state 378, "(1)"
-       line 167, "pan.___", state 390, "(1)"
-       line 398, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 449, "(1)"
-       line 412, "pan.___", state 462, "(1)"
-       line 417, "pan.___", state 479, "(1)"
-       line 398, "pan.___", state 498, "(1)"
-       line 402, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 554, "(1)"
-       line 417, "pan.___", state 571, "(1)"
-       line 402, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 647, "(1)"
-       line 417, "pan.___", state 664, "(1)"
-       line 178, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 710, "(1)"
-       line 163, "pan.___", state 718, "(1)"
-       line 167, "pan.___", state 730, "(1)"
-       line 174, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 773, "(1)"
-       line 163, "pan.___", state 781, "(1)"
-       line 167, "pan.___", state 793, "(1)"
-       line 174, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 840, "(1)"
-       line 163, "pan.___", state 848, "(1)"
-       line 167, "pan.___", state 860, "(1)"
-       line 398, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, "pan.___", state 884, "(1)"
-       line 398, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, "pan.___", state 885, "else"
-       line 398, "pan.___", state 888, "(1)"
-       line 402, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, "pan.___", state 899, "else"
-       line 402, "pan.___", state 902, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 400, "pan.___", state 908, "((i<1))"
-       line 400, "pan.___", state 908, "((i>=1))"
-       line 407, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 927, "(1)"
-       line 408, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, "pan.___", state 928, "else"
-       line 408, "pan.___", state 931, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 412, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, "pan.___", state 941, "else"
-       line 412, "pan.___", state 944, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 410, "pan.___", state 950, "((i<1))"
-       line 410, "pan.___", state 950, "((i>=1))"
-       line 417, "pan.___", state 957, "(1)"
-       line 417, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, "pan.___", state 958, "else"
-       line 417, "pan.___", state 961, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 402, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1040, "(1)"
-       line 417, "pan.___", state 1057, "(1)"
-       line 402, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1130, "(1)"
-       line 417, "pan.___", state 1147, "(1)"
-       line 398, "pan.___", state 1166, "(1)"
-       line 402, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1222, "(1)"
-       line 417, "pan.___", state 1239, "(1)"
-       line 402, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1315, "(1)"
-       line 417, "pan.___", state 1332, "(1)"
-       line 178, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1378, "(1)"
-       line 163, "pan.___", state 1386, "(1)"
-       line 167, "pan.___", state 1398, "(1)"
-       line 174, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1441, "(1)"
-       line 163, "pan.___", state 1449, "(1)"
-       line 167, "pan.___", state 1461, "(1)"
-       line 174, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1508, "(1)"
-       line 163, "pan.___", state 1516, "(1)"
-       line 167, "pan.___", state 1528, "(1)"
-       line 398, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, "pan.___", state 1552, "(1)"
-       line 398, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, "pan.___", state 1553, "else"
-       line 398, "pan.___", state 1556, "(1)"
-       line 402, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 1566, "(1)"
-       line 402, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, "pan.___", state 1567, "else"
-       line 402, "pan.___", state 1570, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 400, "pan.___", state 1576, "((i<1))"
-       line 400, "pan.___", state 1576, "((i>=1))"
-       line 407, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1595, "(1)"
-       line 408, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, "pan.___", state 1596, "else"
-       line 408, "pan.___", state 1599, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 412, "pan.___", state 1608, "(1)"
-       line 412, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, "pan.___", state 1609, "else"
-       line 412, "pan.___", state 1612, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 410, "pan.___", state 1618, "((i<1))"
-       line 410, "pan.___", state 1618, "((i>=1))"
-       line 417, "pan.___", state 1625, "(1)"
-       line 417, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, "pan.___", state 1626, "else"
-       line 417, "pan.___", state 1629, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 178, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1681, "(1)"
-       line 163, "pan.___", state 1689, "(1)"
-       line 167, "pan.___", state 1701, "(1)"
-       line 174, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1744, "(1)"
-       line 163, "pan.___", state 1752, "(1)"
-       line 167, "pan.___", state 1764, "(1)"
-       line 174, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1811, "(1)"
-       line 163, "pan.___", state 1819, "(1)"
-       line 167, "pan.___", state 1831, "(1)"
-       line 701, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 748, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 41.3 seconds
-pan: rate 97205.616 states/second
-pan: avg transition delay 8.5079e-07 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free.ltl b/formal-model/urcu/result-standard-execution-nest/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free.spin.input b/formal-model/urcu/result-standard-execution-nest/urcu_free.spin.input
deleted file mode 100644 (file)
index f2f00e4..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 837f3d9..0000000
+++ /dev/null
@@ -1,15043 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1180
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1181
-243:2:1185
-244:2:1186
-245:2:1194
-246:2:1195
-247:2:1199
-248:2:1200
-249:2:1194
-250:2:1195
-251:2:1196
-252:2:1208
-253:2:1213
-254:2:1217
-255:2:1218
-256:2:1225
-257:2:1226
-258:2:1237
-259:2:1238
-260:2:1239
-261:2:1237
-262:2:1238
-263:2:1239
-264:2:1250
-265:2:1255
-266:2:1256
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1268
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1270
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1271
-279:2:1275
-280:2:1276
-281:2:1284
-282:2:1285
-283:2:1289
-284:2:1290
-285:2:1284
-286:2:1285
-287:2:1289
-288:2:1290
-289:2:1298
-290:2:1303
-291:2:1307
-292:2:1308
-293:2:1315
-294:2:1316
-295:2:1327
-296:2:1328
-297:2:1329
-298:2:1327
-299:2:1328
-300:2:1329
-301:2:1340
-302:2:1345
-303:2:1346
-304:0:4365
-305:2:1358
-306:0:4365
-307:2:1454
-308:0:4365
-309:3:2528
-310:0:4365
-311:2:1455
-312:0:4365
-313:3:2529
-314:0:4365
-315:2:1652
-316:0:4365
-317:2:1653
-318:0:4365
-319:2:1657
-320:0:4365
-321:2:1660
-322:0:4365
-323:3:2528
-324:0:4365
-325:2:1665
-326:2:1669
-327:2:1670
-328:2:1678
-329:2:1679
-330:2:1683
-331:2:1684
-332:2:1678
-333:2:1679
-334:2:1680
-335:2:1692
-336:2:1697
-337:2:1701
-338:2:1702
-339:2:1709
-340:2:1710
-341:2:1721
-342:2:1722
-343:2:1723
-344:2:1721
-345:2:1722
-346:2:1723
-347:2:1734
-348:2:1739
-349:2:1740
-350:0:4365
-351:3:2529
-352:0:4365
-353:2:1752
-354:0:4365
-355:3:2528
-356:0:4365
-357:2:1754
-358:0:4365
-359:3:2529
-360:0:4365
-361:2:1755
-362:2:1759
-363:2:1760
-364:2:1768
-365:2:1769
-366:2:1773
-367:2:1774
-368:2:1768
-369:2:1769
-370:2:1773
-371:2:1774
-372:2:1782
-373:2:1787
-374:2:1791
-375:2:1792
-376:2:1799
-377:2:1800
-378:2:1811
-379:2:1812
-380:2:1813
-381:2:1811
-382:2:1812
-383:2:1813
-384:2:1824
-385:2:1829
-386:2:1830
-387:0:4365
-388:2:1842
-389:0:4365
-390:3:2528
-391:0:4365
-392:2:1844
-393:0:4365
-394:3:2529
-395:0:4365
-396:2:1845
-397:2:1849
-398:2:1850
-399:2:1858
-400:2:1859
-401:2:1863
-402:2:1864
-403:2:1858
-404:2:1859
-405:2:1863
-406:2:1864
-407:2:1872
-408:2:1877
-409:2:1881
-410:2:1882
-411:2:1889
-412:2:1890
-413:2:1901
-414:2:1902
-415:2:1903
-416:2:1901
-417:2:1902
-418:2:1903
-419:2:1914
-420:2:1919
-421:2:1920
-422:0:4365
-423:2:1932
-424:0:4365
-425:3:2528
-426:0:4365
-427:2:1934
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:1935
-432:0:4365
-433:2:1936
-434:0:4365
-435:2:2129
-436:0:4365
-437:2:2130
-438:0:4365
-439:2:2134
-440:0:4365
-441:3:2528
-442:0:4365
-443:2:2136
-444:0:4365
-445:3:2529
-446:0:4365
-447:2:2137
-448:2:2141
-449:2:2142
-450:2:2150
-451:2:2151
-452:2:2155
-453:2:2156
-454:2:2150
-455:2:2151
-456:2:2155
-457:2:2156
-458:2:2164
-459:2:2169
-460:2:2173
-461:2:2174
-462:2:2181
-463:2:2182
-464:2:2193
-465:2:2194
-466:2:2195
-467:2:2193
-468:2:2194
-469:2:2195
-470:2:2206
-471:2:2211
-472:2:2212
-473:0:4365
-474:2:2224
-475:0:4365
-476:3:2528
-477:0:4365
-478:2:2226
-479:0:4365
-480:3:2529
-481:0:4365
-482:2:1936
-483:0:4365
-484:2:2129
-485:0:4365
-486:2:2130
-487:0:4365
-488:2:2134
-489:0:4365
-490:3:2528
-491:0:4365
-492:2:2136
-493:0:4365
-494:3:2529
-495:0:4365
-496:2:2137
-497:2:2141
-498:2:2142
-499:2:2150
-500:2:2151
-501:2:2155
-502:2:2156
-503:2:2150
-504:2:2151
-505:2:2152
-506:2:2164
-507:2:2169
-508:2:2173
-509:2:2174
-510:2:2181
-511:2:2182
-512:2:2193
-513:2:2194
-514:2:2195
-515:2:2193
-516:2:2194
-517:2:2195
-518:2:2206
-519:2:2211
-520:2:2212
-521:0:4365
-522:2:2224
-523:0:4365
-524:3:2528
-525:0:4365
-526:2:2226
-527:0:4365
-528:3:2529
-529:0:4365
-530:2:2230
-531:0:4365
-532:3:2528
-533:0:4365
-534:2:2235
-535:2:2239
-536:2:2240
-537:2:2248
-538:2:2249
-539:2:2253
-540:2:2254
-541:2:2248
-542:2:2249
-543:2:2250
-544:2:2262
-545:2:2267
-546:2:2271
-547:2:2272
-548:2:2279
-549:2:2280
-550:2:2291
-551:2:2292
-552:2:2293
-553:2:2291
-554:2:2292
-555:2:2293
-556:2:2304
-557:2:2309
-558:2:2310
-559:0:4365
-560:3:2529
-561:0:4365
-562:2:2322
-563:0:4365
-564:2:1169
-565:0:4365
-566:3:2528
-567:0:4365
-568:2:1170
-569:0:4365
-570:3:2529
-571:0:4365
-572:3:2530
-573:0:4365
-574:3:2536
-575:0:4365
-576:3:2537
-577:0:4365
-578:3:2547
-579:0:4365
-580:3:2548
-581:0:4365
-582:3:2552
-583:3:2553
-584:3:2557
-585:3:2561
-586:3:2562
-587:3:2557
-588:3:2561
-589:3:2562
-590:3:2566
-591:3:2574
-592:3:2575
-593:3:2580
-594:3:2587
-595:3:2588
-596:3:2587
-597:3:2588
-598:3:2595
-599:3:2600
-600:0:4365
-601:3:2611
-602:0:4365
-603:3:2615
-604:3:2616
-605:3:2620
-606:3:2624
-607:3:2625
-608:3:2620
-609:3:2624
-610:3:2625
-611:3:2629
-612:3:2637
-613:3:2638
-614:3:2643
-615:3:2650
-616:3:2651
-617:3:2650
-618:3:2651
-619:3:2658
-620:3:2663
-621:0:4365
-622:3:2611
-623:0:4365
-624:3:2615
-625:3:2616
-626:3:2620
-627:3:2624
-628:3:2625
-629:3:2620
-630:3:2624
-631:3:2625
-632:3:2629
-633:3:2637
-634:3:2638
-635:3:2643
-636:3:2650
-637:3:2651
-638:3:2650
-639:3:2651
-640:3:2658
-641:3:2663
-642:0:4365
-643:3:2674
-644:0:4365
-645:3:2682
-646:3:2683
-647:3:2687
-648:3:2691
-649:3:2692
-650:3:2687
-651:3:2691
-652:3:2692
-653:3:2696
-654:3:2704
-655:3:2705
-656:3:2710
-657:3:2717
-658:3:2718
-659:3:2717
-660:3:2718
-661:3:2725
-662:3:2730
-663:0:4365
-664:3:2745
-665:0:4365
-666:3:2746
-667:0:4365
-668:2:1173
-669:0:4365
-670:3:2747
-671:0:4365
-672:2:1179
-673:0:4365
-674:2:1180
-675:0:4365
-676:3:2746
-677:0:4365
-678:2:1181
-679:2:1185
-680:2:1186
-681:2:1194
-682:2:1195
-683:2:1199
-684:2:1200
-685:2:1194
-686:2:1195
-687:2:1199
-688:2:1200
-689:2:1208
-690:2:1213
-691:2:1217
-692:2:1218
-693:2:1225
-694:2:1226
-695:2:1237
-696:2:1238
-697:2:1239
-698:2:1237
-699:2:1238
-700:2:1239
-701:2:1250
-702:2:1255
-703:2:1256
-704:0:4365
-705:3:2747
-706:0:4365
-707:2:1268
-708:0:4365
-709:3:2746
-710:0:4365
-711:2:1270
-712:0:4365
-713:3:2747
-714:0:4365
-715:2:1271
-716:2:1275
-717:2:1276
-718:2:1284
-719:2:1285
-720:2:1289
-721:2:1290
-722:2:1284
-723:2:1285
-724:2:1289
-725:2:1290
-726:2:1298
-727:2:1303
-728:2:1307
-729:2:1308
-730:2:1315
-731:2:1316
-732:2:1327
-733:2:1328
-734:2:1329
-735:2:1327
-736:2:1328
-737:2:1329
-738:2:1340
-739:2:1345
-740:2:1346
-741:0:4365
-742:2:1358
-743:0:4365
-744:2:1360
-745:0:4365
-746:3:2746
-747:0:4365
-748:2:1361
-749:0:4365
-750:3:2747
-751:0:4365
-752:2:1362
-753:2:1366
-754:2:1367
-755:2:1375
-756:2:1376
-757:2:1380
-758:2:1381
-759:2:1375
-760:2:1376
-761:2:1380
-762:2:1381
-763:2:1389
-764:2:1394
-765:2:1398
-766:2:1399
-767:2:1406
-768:2:1407
-769:2:1418
-770:2:1419
-771:2:1420
-772:2:1418
-773:2:1419
-774:2:1420
-775:2:1431
-776:2:1436
-777:2:1437
-778:0:4365
-779:2:1449
-780:0:4365
-781:3:2746
-782:0:4365
-783:2:1451
-784:0:4365
-785:3:2747
-786:0:4365
-787:2:1652
-788:0:4365
-789:2:1653
-790:0:4365
-791:2:1657
-792:0:4365
-793:2:1180
-794:0:4365
-795:3:2746
-796:0:4365
-797:2:1181
-798:2:1185
-799:2:1186
-800:2:1194
-801:2:1195
-802:2:1199
-803:2:1200
-804:2:1194
-805:2:1195
-806:2:1196
-807:2:1208
-808:2:1213
-809:2:1217
-810:2:1218
-811:2:1225
-812:2:1226
-813:2:1237
-814:2:1238
-815:2:1239
-816:2:1237
-817:2:1238
-818:2:1239
-819:2:1250
-820:2:1255
-821:2:1256
-822:0:4365
-823:3:2747
-824:0:4365
-825:2:1268
-826:0:4365
-827:3:2746
-828:0:4365
-829:2:1270
-830:0:4365
-831:3:2747
-832:0:4365
-833:2:1271
-834:2:1275
-835:2:1276
-836:2:1284
-837:2:1285
-838:2:1289
-839:2:1290
-840:2:1284
-841:2:1285
-842:2:1289
-843:2:1290
-844:2:1298
-845:2:1303
-846:2:1307
-847:2:1308
-848:2:1315
-849:2:1316
-850:2:1327
-851:2:1328
-852:2:1329
-853:2:1327
-854:2:1328
-855:2:1329
-856:2:1340
-857:2:1345
-858:2:1346
-859:0:4365
-860:2:1358
-861:0:4365
-862:2:1454
-863:0:4365
-864:3:2746
-865:0:4365
-866:2:1455
-867:0:4365
-868:3:2747
-869:0:4365
-870:2:1652
-871:0:4365
-872:2:1653
-873:0:4365
-874:2:1657
-875:0:4365
-876:2:1660
-877:0:4365
-878:3:2746
-879:0:4365
-880:2:1665
-881:2:1669
-882:2:1670
-883:2:1678
-884:2:1679
-885:2:1683
-886:2:1684
-887:2:1678
-888:2:1679
-889:2:1680
-890:2:1692
-891:2:1697
-892:2:1701
-893:2:1702
-894:2:1709
-895:2:1710
-896:2:1721
-897:2:1722
-898:2:1723
-899:2:1721
-900:2:1722
-901:2:1723
-902:2:1734
-903:2:1739
-904:2:1740
-905:0:4365
-906:3:2747
-907:0:4365
-908:2:1752
-909:0:4365
-910:3:2746
-911:0:4365
-912:2:1754
-913:0:4365
-914:3:2747
-915:0:4365
-916:2:1755
-917:2:1759
-918:2:1760
-919:2:1768
-920:2:1769
-921:2:1773
-922:2:1774
-923:2:1768
-924:2:1769
-925:2:1773
-926:2:1774
-927:2:1782
-928:2:1787
-929:2:1791
-930:2:1792
-931:2:1799
-932:2:1800
-933:2:1811
-934:2:1812
-935:2:1813
-936:2:1811
-937:2:1812
-938:2:1813
-939:2:1824
-940:2:1829
-941:2:1830
-942:0:4365
-943:2:1842
-944:0:4365
-945:3:2746
-946:0:4365
-947:2:1844
-948:0:4365
-949:3:2747
-950:0:4365
-951:2:1845
-952:2:1849
-953:2:1850
-954:2:1858
-955:2:1859
-956:2:1863
-957:2:1864
-958:2:1858
-959:2:1859
-960:2:1863
-961:2:1864
-962:2:1872
-963:2:1877
-964:2:1881
-965:2:1882
-966:2:1889
-967:2:1890
-968:2:1901
-969:2:1902
-970:2:1903
-971:2:1901
-972:2:1902
-973:2:1903
-974:2:1914
-975:2:1919
-976:2:1920
-977:0:4365
-978:2:1932
-979:0:4365
-980:3:2746
-981:0:4365
-982:2:1934
-983:0:4365
-984:3:2747
-985:0:4365
-986:2:1935
-987:0:4365
-988:2:1936
-989:0:4365
-990:2:2129
-991:0:4365
-992:2:2130
-993:0:4365
-994:2:2134
-995:0:4365
-996:3:2746
-997:0:4365
-998:2:2136
-999:0:4365
-1000:3:2747
-1001:0:4365
-1002:2:2137
-1003:2:2141
-1004:2:2142
-1005:2:2150
-1006:2:2151
-1007:2:2155
-1008:2:2156
-1009:2:2150
-1010:2:2151
-1011:2:2155
-1012:2:2156
-1013:2:2164
-1014:2:2169
-1015:2:2173
-1016:2:2174
-1017:2:2181
-1018:2:2182
-1019:2:2193
-1020:2:2194
-1021:2:2195
-1022:2:2193
-1023:2:2194
-1024:2:2195
-1025:2:2206
-1026:2:2211
-1027:2:2212
-1028:0:4365
-1029:2:2224
-1030:0:4365
-1031:3:2746
-1032:0:4365
-1033:2:2226
-1034:0:4365
-1035:3:2747
-1036:0:4365
-1037:2:1936
-1038:0:4365
-1039:2:2129
-1040:0:4365
-1041:2:2130
-1042:0:4365
-1043:2:2134
-1044:0:4365
-1045:3:2746
-1046:0:4365
-1047:2:2136
-1048:0:4365
-1049:3:2747
-1050:0:4365
-1051:2:2137
-1052:2:2141
-1053:2:2142
-1054:2:2150
-1055:2:2151
-1056:2:2155
-1057:2:2156
-1058:2:2150
-1059:2:2151
-1060:2:2152
-1061:2:2164
-1062:2:2169
-1063:2:2173
-1064:2:2174
-1065:2:2181
-1066:2:2182
-1067:2:2193
-1068:2:2194
-1069:2:2195
-1070:2:2193
-1071:2:2194
-1072:2:2195
-1073:2:2206
-1074:2:2211
-1075:2:2212
-1076:0:4365
-1077:2:2224
-1078:0:4365
-1079:3:2746
-1080:0:4365
-1081:2:2226
-1082:0:4365
-1083:3:2747
-1084:0:4365
-1085:2:2230
-1086:0:4365
-1087:3:2746
-1088:0:4365
-1089:2:2235
-1090:2:2239
-1091:2:2240
-1092:2:2248
-1093:2:2249
-1094:2:2253
-1095:2:2254
-1096:2:2248
-1097:2:2249
-1098:2:2250
-1099:2:2262
-1100:2:2267
-1101:2:2271
-1102:2:2272
-1103:2:2279
-1104:2:2280
-1105:2:2291
-1106:2:2292
-1107:2:2293
-1108:2:2291
-1109:2:2292
-1110:2:2293
-1111:2:2304
-1112:2:2309
-1113:2:2310
-1114:0:4365
-1115:3:2747
-1116:0:4365
-1117:2:2322
-1118:0:4365
-1119:2:1169
-1120:0:4365
-1121:3:2746
-1122:0:4365
-1123:2:1170
-1124:0:4365
-1125:3:2747
-1126:0:4365
-1127:3:2748
-1128:0:4365
-1129:3:2754
-1130:0:4365
-1131:3:2755
-1132:3:2759
-1133:3:2760
-1134:3:2768
-1135:3:2769
-1136:3:2773
-1137:3:2774
-1138:3:2768
-1139:3:2769
-1140:3:2773
-1141:3:2774
-1142:3:2782
-1143:3:2787
-1144:3:2791
-1145:3:2792
-1146:3:2799
-1147:3:2800
-1148:3:2811
-1149:3:2812
-1150:3:2813
-1151:3:2811
-1152:3:2812
-1153:3:2813
-1154:3:2824
-1155:3:2829
-1156:3:2830
-1157:0:4365
-1158:3:2842
-1159:0:4365
-1160:3:2843
-1161:0:4365
-1162:2:1173
-1163:0:4365
-1164:3:2844
-1165:0:4365
-1166:2:1179
-1167:0:4365
-1168:2:1180
-1169:0:4365
-1170:3:2843
-1171:0:4365
-1172:2:1181
-1173:2:1185
-1174:2:1186
-1175:2:1194
-1176:2:1195
-1177:2:1199
-1178:2:1200
-1179:2:1194
-1180:2:1195
-1181:2:1199
-1182:2:1200
-1183:2:1208
-1184:2:1213
-1185:2:1217
-1186:2:1218
-1187:2:1225
-1188:2:1226
-1189:2:1237
-1190:2:1238
-1191:2:1239
-1192:2:1237
-1193:2:1238
-1194:2:1239
-1195:2:1250
-1196:2:1255
-1197:2:1256
-1198:0:4365
-1199:3:2844
-1200:0:4365
-1201:2:1268
-1202:0:4365
-1203:3:2843
-1204:0:4365
-1205:2:1270
-1206:0:4365
-1207:3:2844
-1208:0:4365
-1209:2:1271
-1210:2:1275
-1211:2:1276
-1212:2:1284
-1213:2:1285
-1214:2:1289
-1215:2:1290
-1216:2:1284
-1217:2:1285
-1218:2:1289
-1219:2:1290
-1220:2:1298
-1221:2:1303
-1222:2:1307
-1223:2:1308
-1224:2:1315
-1225:2:1316
-1226:2:1327
-1227:2:1328
-1228:2:1329
-1229:2:1327
-1230:2:1328
-1231:2:1329
-1232:2:1340
-1233:2:1345
-1234:2:1346
-1235:0:4365
-1236:2:1358
-1237:0:4365
-1238:2:1360
-1239:0:4365
-1240:3:2843
-1241:0:4365
-1242:2:1361
-1243:0:4365
-1244:3:2844
-1245:0:4365
-1246:2:1362
-1247:2:1366
-1248:2:1367
-1249:2:1375
-1250:2:1376
-1251:2:1380
-1252:2:1381
-1253:2:1375
-1254:2:1376
-1255:2:1380
-1256:2:1381
-1257:2:1389
-1258:2:1394
-1259:2:1398
-1260:2:1399
-1261:2:1406
-1262:2:1407
-1263:2:1418
-1264:2:1419
-1265:2:1420
-1266:2:1418
-1267:2:1419
-1268:2:1420
-1269:2:1431
-1270:2:1436
-1271:2:1437
-1272:0:4365
-1273:2:1449
-1274:0:4365
-1275:3:2843
-1276:0:4365
-1277:2:1451
-1278:0:4365
-1279:3:2844
-1280:0:4365
-1281:2:1652
-1282:0:4365
-1283:2:1653
-1284:0:4365
-1285:2:1657
-1286:0:4365
-1287:2:1180
-1288:0:4365
-1289:3:2843
-1290:0:4365
-1291:2:1181
-1292:2:1185
-1293:2:1186
-1294:2:1194
-1295:2:1195
-1296:2:1199
-1297:2:1200
-1298:2:1194
-1299:2:1195
-1300:2:1196
-1301:2:1208
-1302:2:1213
-1303:2:1217
-1304:2:1218
-1305:2:1225
-1306:2:1226
-1307:2:1237
-1308:2:1238
-1309:2:1239
-1310:2:1237
-1311:2:1238
-1312:2:1239
-1313:2:1250
-1314:2:1255
-1315:2:1256
-1316:0:4365
-1317:3:2844
-1318:0:4365
-1319:2:1268
-1320:0:4365
-1321:3:2843
-1322:0:4365
-1323:2:1270
-1324:0:4365
-1325:3:2844
-1326:0:4365
-1327:2:1271
-1328:2:1275
-1329:2:1276
-1330:2:1284
-1331:2:1285
-1332:2:1289
-1333:2:1290
-1334:2:1284
-1335:2:1285
-1336:2:1289
-1337:2:1290
-1338:2:1298
-1339:2:1303
-1340:2:1307
-1341:2:1308
-1342:2:1315
-1343:2:1316
-1344:2:1327
-1345:2:1328
-1346:2:1329
-1347:2:1327
-1348:2:1328
-1349:2:1329
-1350:2:1340
-1351:2:1345
-1352:2:1346
-1353:0:4365
-1354:2:1358
-1355:0:4365
-1356:2:1454
-1357:0:4365
-1358:3:2843
-1359:0:4365
-1360:2:1455
-1361:0:4365
-1362:3:2844
-1363:0:4365
-1364:2:1652
-1365:0:4365
-1366:2:1653
-1367:0:4365
-1368:2:1657
-1369:0:4365
-1370:2:1660
-1371:0:4365
-1372:3:2843
-1373:0:4365
-1374:2:1665
-1375:2:1669
-1376:2:1670
-1377:2:1678
-1378:2:1679
-1379:2:1683
-1380:2:1684
-1381:2:1678
-1382:2:1679
-1383:2:1680
-1384:2:1692
-1385:2:1697
-1386:2:1701
-1387:2:1702
-1388:2:1709
-1389:2:1710
-1390:2:1721
-1391:2:1722
-1392:2:1723
-1393:2:1721
-1394:2:1722
-1395:2:1723
-1396:2:1734
-1397:2:1739
-1398:2:1740
-1399:0:4365
-1400:3:2844
-1401:0:4365
-1402:2:1752
-1403:0:4365
-1404:3:2843
-1405:0:4365
-1406:2:1754
-1407:0:4365
-1408:3:2844
-1409:0:4365
-1410:2:1755
-1411:2:1759
-1412:2:1760
-1413:2:1768
-1414:2:1769
-1415:2:1773
-1416:2:1774
-1417:2:1768
-1418:2:1769
-1419:2:1773
-1420:2:1774
-1421:2:1782
-1422:2:1787
-1423:2:1791
-1424:2:1792
-1425:2:1799
-1426:2:1800
-1427:2:1811
-1428:2:1812
-1429:2:1813
-1430:2:1811
-1431:2:1812
-1432:2:1813
-1433:2:1824
-1434:2:1829
-1435:2:1830
-1436:0:4365
-1437:2:1842
-1438:0:4365
-1439:3:2843
-1440:0:4365
-1441:2:1844
-1442:0:4365
-1443:3:2844
-1444:0:4365
-1445:2:1845
-1446:2:1849
-1447:2:1850
-1448:2:1858
-1449:2:1859
-1450:2:1863
-1451:2:1864
-1452:2:1858
-1453:2:1859
-1454:2:1863
-1455:2:1864
-1456:2:1872
-1457:2:1877
-1458:2:1881
-1459:2:1882
-1460:2:1889
-1461:2:1890
-1462:2:1901
-1463:2:1902
-1464:2:1903
-1465:2:1901
-1466:2:1902
-1467:2:1903
-1468:2:1914
-1469:2:1919
-1470:2:1920
-1471:0:4365
-1472:2:1932
-1473:0:4365
-1474:3:2843
-1475:0:4365
-1476:2:1934
-1477:0:4365
-1478:3:2844
-1479:0:4365
-1480:2:1935
-1481:0:4365
-1482:2:1936
-1483:0:4365
-1484:2:2129
-1485:0:4365
-1486:2:2130
-1487:0:4365
-1488:2:2134
-1489:0:4365
-1490:3:2843
-1491:0:4365
-1492:2:2136
-1493:0:4365
-1494:3:2844
-1495:0:4365
-1496:2:2137
-1497:2:2141
-1498:2:2142
-1499:2:2150
-1500:2:2151
-1501:2:2155
-1502:2:2156
-1503:2:2150
-1504:2:2151
-1505:2:2155
-1506:2:2156
-1507:2:2164
-1508:2:2169
-1509:2:2173
-1510:2:2174
-1511:2:2181
-1512:2:2182
-1513:2:2193
-1514:2:2194
-1515:2:2195
-1516:2:2193
-1517:2:2194
-1518:2:2195
-1519:2:2206
-1520:2:2211
-1521:2:2212
-1522:0:4365
-1523:2:2224
-1524:0:4365
-1525:3:2843
-1526:0:4365
-1527:2:2226
-1528:0:4365
-1529:3:2844
-1530:0:4365
-1531:2:1936
-1532:0:4365
-1533:2:2129
-1534:0:4365
-1535:2:2130
-1536:0:4365
-1537:2:2134
-1538:0:4365
-1539:3:2843
-1540:0:4365
-1541:2:2136
-1542:0:4365
-1543:3:2844
-1544:0:4365
-1545:2:2137
-1546:2:2141
-1547:2:2142
-1548:2:2150
-1549:2:2151
-1550:2:2155
-1551:2:2156
-1552:2:2150
-1553:2:2151
-1554:2:2152
-1555:2:2164
-1556:2:2169
-1557:2:2173
-1558:2:2174
-1559:2:2181
-1560:2:2182
-1561:2:2193
-1562:2:2194
-1563:2:2195
-1564:2:2193
-1565:2:2194
-1566:2:2195
-1567:2:2206
-1568:2:2211
-1569:2:2212
-1570:0:4365
-1571:2:2224
-1572:0:4365
-1573:3:2843
-1574:0:4365
-1575:2:2226
-1576:0:4365
-1577:3:2844
-1578:0:4365
-1579:2:2230
-1580:0:4365
-1581:3:2843
-1582:0:4365
-1583:2:2235
-1584:2:2239
-1585:2:2240
-1586:2:2248
-1587:2:2249
-1588:2:2253
-1589:2:2254
-1590:2:2248
-1591:2:2249
-1592:2:2250
-1593:2:2262
-1594:2:2267
-1595:2:2271
-1596:2:2272
-1597:2:2279
-1598:2:2280
-1599:2:2291
-1600:2:2292
-1601:2:2293
-1602:2:2291
-1603:2:2292
-1604:2:2293
-1605:2:2304
-1606:2:2309
-1607:2:2310
-1608:0:4365
-1609:3:2844
-1610:0:4365
-1611:2:2322
-1612:0:4365
-1613:2:1169
-1614:0:4365
-1615:3:2843
-1616:0:4365
-1617:2:1170
-1618:0:4365
-1619:3:2844
-1620:0:4365
-1621:3:2845
-1622:0:4365
-1623:3:2851
-1624:0:4365
-1625:3:2854
-1626:3:2855
-1627:3:2867
-1628:3:2868
-1629:3:2872
-1630:3:2873
-1631:3:2867
-1632:3:2868
-1633:3:2872
-1634:3:2873
-1635:3:2881
-1636:3:2886
-1637:3:2890
-1638:3:2891
-1639:3:2898
-1640:3:2899
-1641:3:2910
-1642:3:2911
-1643:3:2912
-1644:3:2910
-1645:3:2911
-1646:3:2912
-1647:3:2923
-1648:3:2928
-1649:3:2929
-1650:0:4365
-1651:3:2941
-1652:0:4365
-1653:3:2942
-1654:0:4365
-1655:2:1173
-1656:0:4365
-1657:3:2943
-1658:0:4365
-1659:2:1179
-1660:0:4365
-1661:2:1180
-1662:0:4365
-1663:3:2942
-1664:0:4365
-1665:2:1181
-1666:2:1185
-1667:2:1186
-1668:2:1194
-1669:2:1195
-1670:2:1199
-1671:2:1200
-1672:2:1194
-1673:2:1195
-1674:2:1199
-1675:2:1200
-1676:2:1208
-1677:2:1213
-1678:2:1217
-1679:2:1218
-1680:2:1225
-1681:2:1226
-1682:2:1237
-1683:2:1238
-1684:2:1239
-1685:2:1237
-1686:2:1238
-1687:2:1239
-1688:2:1250
-1689:2:1255
-1690:2:1256
-1691:0:4365
-1692:3:2943
-1693:0:4365
-1694:2:1268
-1695:0:4365
-1696:3:2942
-1697:0:4365
-1698:2:1270
-1699:0:4365
-1700:3:2943
-1701:0:4365
-1702:2:1271
-1703:2:1275
-1704:2:1276
-1705:2:1284
-1706:2:1285
-1707:2:1289
-1708:2:1290
-1709:2:1284
-1710:2:1285
-1711:2:1289
-1712:2:1290
-1713:2:1298
-1714:2:1303
-1715:2:1307
-1716:2:1308
-1717:2:1315
-1718:2:1316
-1719:2:1327
-1720:2:1328
-1721:2:1329
-1722:2:1327
-1723:2:1328
-1724:2:1329
-1725:2:1340
-1726:2:1345
-1727:2:1346
-1728:0:4365
-1729:2:1358
-1730:0:4365
-1731:2:1360
-1732:0:4365
-1733:3:2942
-1734:0:4365
-1735:2:1361
-1736:0:4365
-1737:3:2943
-1738:0:4365
-1739:2:1362
-1740:2:1366
-1741:2:1367
-1742:2:1375
-1743:2:1376
-1744:2:1380
-1745:2:1381
-1746:2:1375
-1747:2:1376
-1748:2:1380
-1749:2:1381
-1750:2:1389
-1751:2:1394
-1752:2:1398
-1753:2:1399
-1754:2:1406
-1755:2:1407
-1756:2:1418
-1757:2:1419
-1758:2:1420
-1759:2:1418
-1760:2:1419
-1761:2:1420
-1762:2:1431
-1763:2:1436
-1764:2:1437
-1765:0:4365
-1766:2:1449
-1767:0:4365
-1768:3:2942
-1769:0:4365
-1770:2:1451
-1771:0:4365
-1772:3:2943
-1773:0:4365
-1774:2:1652
-1775:0:4365
-1776:2:1653
-1777:0:4365
-1778:2:1657
-1779:0:4365
-1780:2:1180
-1781:0:4365
-1782:3:2942
-1783:0:4365
-1784:2:1181
-1785:2:1185
-1786:2:1186
-1787:2:1194
-1788:2:1195
-1789:2:1199
-1790:2:1200
-1791:2:1194
-1792:2:1195
-1793:2:1196
-1794:2:1208
-1795:2:1213
-1796:2:1217
-1797:2:1218
-1798:2:1225
-1799:2:1226
-1800:2:1237
-1801:2:1238
-1802:2:1239
-1803:2:1237
-1804:2:1238
-1805:2:1239
-1806:2:1250
-1807:2:1255
-1808:2:1256
-1809:0:4365
-1810:3:2943
-1811:0:4365
-1812:2:1268
-1813:0:4365
-1814:3:2942
-1815:0:4365
-1816:2:1270
-1817:0:4365
-1818:3:2943
-1819:0:4365
-1820:2:1271
-1821:2:1275
-1822:2:1276
-1823:2:1284
-1824:2:1285
-1825:2:1289
-1826:2:1290
-1827:2:1284
-1828:2:1285
-1829:2:1289
-1830:2:1290
-1831:2:1298
-1832:2:1303
-1833:2:1307
-1834:2:1308
-1835:2:1315
-1836:2:1316
-1837:2:1327
-1838:2:1328
-1839:2:1329
-1840:2:1327
-1841:2:1328
-1842:2:1329
-1843:2:1340
-1844:2:1345
-1845:2:1346
-1846:0:4365
-1847:2:1358
-1848:0:4365
-1849:2:1454
-1850:0:4365
-1851:3:2942
-1852:0:4365
-1853:2:1455
-1854:0:4365
-1855:3:2943
-1856:0:4365
-1857:2:1652
-1858:0:4365
-1859:2:1653
-1860:0:4365
-1861:2:1657
-1862:0:4365
-1863:2:1660
-1864:0:4365
-1865:3:2942
-1866:0:4365
-1867:2:1665
-1868:2:1669
-1869:2:1670
-1870:2:1678
-1871:2:1679
-1872:2:1683
-1873:2:1684
-1874:2:1678
-1875:2:1679
-1876:2:1680
-1877:2:1692
-1878:2:1697
-1879:2:1701
-1880:2:1702
-1881:2:1709
-1882:2:1710
-1883:2:1721
-1884:2:1722
-1885:2:1723
-1886:2:1721
-1887:2:1722
-1888:2:1723
-1889:2:1734
-1890:2:1739
-1891:2:1740
-1892:0:4365
-1893:3:2943
-1894:0:4365
-1895:2:1752
-1896:0:4365
-1897:3:2942
-1898:0:4365
-1899:2:1754
-1900:0:4365
-1901:3:2943
-1902:0:4365
-1903:2:1755
-1904:2:1759
-1905:2:1760
-1906:2:1768
-1907:2:1769
-1908:2:1773
-1909:2:1774
-1910:2:1768
-1911:2:1769
-1912:2:1773
-1913:2:1774
-1914:2:1782
-1915:2:1787
-1916:2:1791
-1917:2:1792
-1918:2:1799
-1919:2:1800
-1920:2:1811
-1921:2:1812
-1922:2:1813
-1923:2:1811
-1924:2:1812
-1925:2:1813
-1926:2:1824
-1927:2:1829
-1928:2:1830
-1929:0:4365
-1930:2:1842
-1931:0:4365
-1932:3:2942
-1933:0:4365
-1934:2:1844
-1935:0:4365
-1936:3:2943
-1937:0:4365
-1938:2:1845
-1939:2:1849
-1940:2:1850
-1941:2:1858
-1942:2:1859
-1943:2:1863
-1944:2:1864
-1945:2:1858
-1946:2:1859
-1947:2:1863
-1948:2:1864
-1949:2:1872
-1950:2:1877
-1951:2:1881
-1952:2:1882
-1953:2:1889
-1954:2:1890
-1955:2:1901
-1956:2:1902
-1957:2:1903
-1958:2:1901
-1959:2:1902
-1960:2:1903
-1961:2:1914
-1962:2:1919
-1963:2:1920
-1964:0:4365
-1965:2:1932
-1966:0:4365
-1967:3:2942
-1968:0:4365
-1969:2:1934
-1970:0:4365
-1971:3:2943
-1972:0:4365
-1973:2:1935
-1974:0:4365
-1975:2:1936
-1976:0:4365
-1977:2:2129
-1978:0:4365
-1979:2:2130
-1980:0:4365
-1981:2:2134
-1982:0:4365
-1983:3:2942
-1984:0:4365
-1985:2:2136
-1986:0:4365
-1987:3:2943
-1988:0:4365
-1989:2:2137
-1990:2:2141
-1991:2:2142
-1992:2:2150
-1993:2:2151
-1994:2:2155
-1995:2:2156
-1996:2:2150
-1997:2:2151
-1998:2:2155
-1999:2:2156
-2000:2:2164
-2001:2:2169
-2002:2:2173
-2003:2:2174
-2004:2:2181
-2005:2:2182
-2006:2:2193
-2007:2:2194
-2008:2:2195
-2009:2:2193
-2010:2:2194
-2011:2:2195
-2012:2:2206
-2013:2:2211
-2014:2:2212
-2015:0:4365
-2016:2:2224
-2017:0:4365
-2018:3:2942
-2019:0:4365
-2020:2:2226
-2021:0:4365
-2022:3:2943
-2023:0:4365
-2024:2:1936
-2025:0:4365
-2026:2:2129
-2027:0:4365
-2028:2:2130
-2029:0:4365
-2030:2:2134
-2031:0:4365
-2032:3:2942
-2033:0:4365
-2034:2:2136
-2035:0:4365
-2036:3:2943
-2037:0:4365
-2038:2:2137
-2039:2:2141
-2040:2:2142
-2041:2:2150
-2042:2:2151
-2043:2:2155
-2044:2:2156
-2045:2:2150
-2046:2:2151
-2047:2:2152
-2048:2:2164
-2049:2:2169
-2050:2:2173
-2051:2:2174
-2052:2:2181
-2053:2:2182
-2054:2:2193
-2055:2:2194
-2056:2:2195
-2057:2:2193
-2058:2:2194
-2059:2:2195
-2060:2:2206
-2061:2:2211
-2062:2:2212
-2063:0:4365
-2064:2:2224
-2065:0:4365
-2066:3:2942
-2067:0:4365
-2068:2:2226
-2069:0:4365
-2070:3:2943
-2071:0:4365
-2072:2:2230
-2073:0:4365
-2074:3:2942
-2075:0:4365
-2076:2:2235
-2077:2:2239
-2078:2:2240
-2079:2:2248
-2080:2:2249
-2081:2:2253
-2082:2:2254
-2083:2:2248
-2084:2:2249
-2085:2:2250
-2086:2:2262
-2087:2:2267
-2088:2:2271
-2089:2:2272
-2090:2:2279
-2091:2:2280
-2092:2:2291
-2093:2:2292
-2094:2:2293
-2095:2:2291
-2096:2:2292
-2097:2:2293
-2098:2:2304
-2099:2:2309
-2100:2:2310
-2101:0:4365
-2102:3:2943
-2103:0:4365
-2104:2:2322
-2105:0:4365
-2106:2:1169
-2107:0:4365
-2108:3:2942
-2109:0:4365
-2110:2:1170
-2111:0:4365
-2112:3:2943
-2113:0:4365
-2114:3:2944
-2115:0:4365
-2116:3:2950
-2117:0:4365
-2118:3:2951
-2119:0:4365
-2120:3:2952
-2121:0:4365
-2122:3:2953
-2123:0:4365
-2124:3:2954
-2125:3:2958
-2126:3:2959
-2127:3:2967
-2128:3:2968
-2129:3:2972
-2130:3:2973
-2131:3:2967
-2132:3:2968
-2133:3:2972
-2134:3:2973
-2135:3:2981
-2136:3:2986
-2137:3:2990
-2138:3:2991
-2139:3:2998
-2140:3:2999
-2141:3:3010
-2142:3:3011
-2143:3:3012
-2144:3:3010
-2145:3:3011
-2146:3:3012
-2147:3:3023
-2148:3:3028
-2149:3:3029
-2150:0:4365
-2151:3:3041
-2152:0:4365
-2153:3:3042
-2154:0:4365
-2155:2:1173
-2156:0:4365
-2157:3:3043
-2158:0:4365
-2159:2:1179
-2160:0:4365
-2161:2:1180
-2162:0:4365
-2163:3:3042
-2164:0:4365
-2165:2:1181
-2166:2:1185
-2167:2:1186
-2168:2:1194
-2169:2:1195
-2170:2:1199
-2171:2:1200
-2172:2:1194
-2173:2:1195
-2174:2:1199
-2175:2:1200
-2176:2:1208
-2177:2:1213
-2178:2:1217
-2179:2:1218
-2180:2:1225
-2181:2:1226
-2182:2:1237
-2183:2:1238
-2184:2:1239
-2185:2:1237
-2186:2:1238
-2187:2:1239
-2188:2:1250
-2189:2:1255
-2190:2:1256
-2191:0:4365
-2192:3:3043
-2193:0:4365
-2194:2:1268
-2195:0:4365
-2196:3:3042
-2197:0:4365
-2198:2:1270
-2199:0:4365
-2200:3:3043
-2201:0:4365
-2202:2:1271
-2203:2:1275
-2204:2:1276
-2205:2:1284
-2206:2:1285
-2207:2:1289
-2208:2:1290
-2209:2:1284
-2210:2:1285
-2211:2:1289
-2212:2:1290
-2213:2:1298
-2214:2:1303
-2215:2:1307
-2216:2:1308
-2217:2:1315
-2218:2:1316
-2219:2:1327
-2220:2:1328
-2221:2:1329
-2222:2:1327
-2223:2:1328
-2224:2:1329
-2225:2:1340
-2226:2:1345
-2227:2:1346
-2228:0:4365
-2229:2:1358
-2230:0:4365
-2231:2:1360
-2232:0:4365
-2233:3:3042
-2234:0:4365
-2235:2:1361
-2236:0:4365
-2237:3:3043
-2238:0:4365
-2239:2:1362
-2240:2:1366
-2241:2:1367
-2242:2:1375
-2243:2:1376
-2244:2:1380
-2245:2:1381
-2246:2:1375
-2247:2:1376
-2248:2:1380
-2249:2:1381
-2250:2:1389
-2251:2:1394
-2252:2:1398
-2253:2:1399
-2254:2:1406
-2255:2:1407
-2256:2:1418
-2257:2:1419
-2258:2:1420
-2259:2:1418
-2260:2:1419
-2261:2:1420
-2262:2:1431
-2263:2:1436
-2264:2:1437
-2265:0:4365
-2266:2:1449
-2267:0:4365
-2268:3:3042
-2269:0:4365
-2270:2:1451
-2271:0:4365
-2272:3:3043
-2273:0:4365
-2274:2:1652
-2275:0:4365
-2276:2:1653
-2277:0:4365
-2278:2:1657
-2279:0:4365
-2280:2:1180
-2281:0:4365
-2282:3:3042
-2283:0:4365
-2284:2:1181
-2285:2:1185
-2286:2:1186
-2287:2:1194
-2288:2:1195
-2289:2:1199
-2290:2:1200
-2291:2:1194
-2292:2:1195
-2293:2:1196
-2294:2:1208
-2295:2:1213
-2296:2:1217
-2297:2:1218
-2298:2:1225
-2299:2:1226
-2300:2:1237
-2301:2:1238
-2302:2:1239
-2303:2:1237
-2304:2:1238
-2305:2:1239
-2306:2:1250
-2307:2:1255
-2308:2:1256
-2309:0:4365
-2310:3:3043
-2311:0:4365
-2312:2:1268
-2313:0:4365
-2314:3:3042
-2315:0:4365
-2316:2:1270
-2317:0:4365
-2318:3:3043
-2319:0:4365
-2320:2:1271
-2321:2:1275
-2322:2:1276
-2323:2:1284
-2324:2:1285
-2325:2:1289
-2326:2:1290
-2327:2:1284
-2328:2:1285
-2329:2:1289
-2330:2:1290
-2331:2:1298
-2332:2:1303
-2333:2:1307
-2334:2:1308
-2335:2:1315
-2336:2:1316
-2337:2:1327
-2338:2:1328
-2339:2:1329
-2340:2:1327
-2341:2:1328
-2342:2:1329
-2343:2:1340
-2344:2:1345
-2345:2:1346
-2346:0:4365
-2347:2:1358
-2348:0:4365
-2349:2:1454
-2350:0:4365
-2351:3:3042
-2352:0:4365
-2353:2:1455
-2354:0:4365
-2355:3:3043
-2356:0:4365
-2357:2:1652
-2358:0:4365
-2359:2:1653
-2360:0:4365
-2361:2:1657
-2362:0:4365
-2363:2:1660
-2364:0:4365
-2365:3:3042
-2366:0:4365
-2367:2:1665
-2368:2:1669
-2369:2:1670
-2370:2:1678
-2371:2:1679
-2372:2:1683
-2373:2:1684
-2374:2:1678
-2375:2:1679
-2376:2:1680
-2377:2:1692
-2378:2:1697
-2379:2:1701
-2380:2:1702
-2381:2:1709
-2382:2:1710
-2383:2:1721
-2384:2:1722
-2385:2:1723
-2386:2:1721
-2387:2:1722
-2388:2:1723
-2389:2:1734
-2390:2:1739
-2391:2:1740
-2392:0:4365
-2393:3:3043
-2394:0:4365
-2395:2:1752
-2396:0:4365
-2397:3:3042
-2398:0:4365
-2399:2:1754
-2400:0:4365
-2401:3:3043
-2402:0:4365
-2403:2:1755
-2404:2:1759
-2405:2:1760
-2406:2:1768
-2407:2:1769
-2408:2:1773
-2409:2:1774
-2410:2:1768
-2411:2:1769
-2412:2:1773
-2413:2:1774
-2414:2:1782
-2415:2:1787
-2416:2:1791
-2417:2:1792
-2418:2:1799
-2419:2:1800
-2420:2:1811
-2421:2:1812
-2422:2:1813
-2423:2:1811
-2424:2:1812
-2425:2:1813
-2426:2:1824
-2427:2:1829
-2428:2:1830
-2429:0:4365
-2430:2:1842
-2431:0:4365
-2432:3:3042
-2433:0:4365
-2434:2:1844
-2435:0:4365
-2436:3:3043
-2437:0:4365
-2438:2:1845
-2439:2:1849
-2440:2:1850
-2441:2:1858
-2442:2:1859
-2443:2:1863
-2444:2:1864
-2445:2:1858
-2446:2:1859
-2447:2:1863
-2448:2:1864
-2449:2:1872
-2450:2:1877
-2451:2:1881
-2452:2:1882
-2453:2:1889
-2454:2:1890
-2455:2:1901
-2456:2:1902
-2457:2:1903
-2458:2:1901
-2459:2:1902
-2460:2:1903
-2461:2:1914
-2462:2:1919
-2463:2:1920
-2464:0:4365
-2465:2:1932
-2466:0:4365
-2467:3:3042
-2468:0:4365
-2469:2:1934
-2470:0:4365
-2471:3:3043
-2472:0:4365
-2473:2:1935
-2474:0:4365
-2475:2:1936
-2476:0:4365
-2477:2:2129
-2478:0:4365
-2479:2:2130
-2480:0:4365
-2481:2:2134
-2482:0:4365
-2483:3:3042
-2484:0:4365
-2485:2:2136
-2486:0:4365
-2487:3:3043
-2488:0:4365
-2489:2:2137
-2490:2:2141
-2491:2:2142
-2492:2:2150
-2493:2:2151
-2494:2:2155
-2495:2:2156
-2496:2:2150
-2497:2:2151
-2498:2:2155
-2499:2:2156
-2500:2:2164
-2501:2:2169
-2502:2:2173
-2503:2:2174
-2504:2:2181
-2505:2:2182
-2506:2:2193
-2507:2:2194
-2508:2:2195
-2509:2:2193
-2510:2:2194
-2511:2:2195
-2512:2:2206
-2513:2:2211
-2514:2:2212
-2515:0:4365
-2516:2:2224
-2517:0:4365
-2518:3:3042
-2519:0:4365
-2520:2:2226
-2521:0:4365
-2522:3:3043
-2523:0:4365
-2524:2:1936
-2525:0:4365
-2526:2:2129
-2527:0:4365
-2528:2:2130
-2529:0:4365
-2530:2:2134
-2531:0:4365
-2532:3:3042
-2533:0:4365
-2534:2:2136
-2535:0:4365
-2536:3:3043
-2537:0:4365
-2538:2:2137
-2539:2:2141
-2540:2:2142
-2541:2:2150
-2542:2:2151
-2543:2:2155
-2544:2:2156
-2545:2:2150
-2546:2:2151
-2547:2:2152
-2548:2:2164
-2549:2:2169
-2550:2:2173
-2551:2:2174
-2552:2:2181
-2553:2:2182
-2554:2:2193
-2555:2:2194
-2556:2:2195
-2557:2:2193
-2558:2:2194
-2559:2:2195
-2560:2:2206
-2561:2:2211
-2562:2:2212
-2563:0:4365
-2564:2:2224
-2565:0:4365
-2566:3:3042
-2567:0:4365
-2568:2:2226
-2569:0:4365
-2570:3:3043
-2571:0:4365
-2572:2:2230
-2573:0:4365
-2574:3:3042
-2575:0:4365
-2576:2:2235
-2577:2:2239
-2578:2:2240
-2579:2:2248
-2580:2:2249
-2581:2:2253
-2582:2:2254
-2583:2:2248
-2584:2:2249
-2585:2:2250
-2586:2:2262
-2587:2:2267
-2588:2:2271
-2589:2:2272
-2590:2:2279
-2591:2:2280
-2592:2:2291
-2593:2:2292
-2594:2:2293
-2595:2:2291
-2596:2:2292
-2597:2:2293
-2598:2:2304
-2599:2:2309
-2600:2:2310
-2601:0:4365
-2602:3:3043
-2603:0:4365
-2604:2:2322
-2605:0:4365
-2606:2:1169
-2607:0:4365
-2608:3:3042
-2609:0:4365
-2610:2:1170
-2611:0:4365
-2612:3:3043
-2613:0:4365
-2614:3:3044
-2615:0:4365
-2616:3:3257
-2617:0:4365
-2618:3:3265
-2619:0:4365
-2620:3:3266
-2621:3:3270
-2622:3:3271
-2623:3:3279
-2624:3:3280
-2625:3:3284
-2626:3:3285
-2627:3:3279
-2628:3:3280
-2629:3:3284
-2630:3:3285
-2631:3:3293
-2632:3:3298
-2633:3:3302
-2634:3:3303
-2635:3:3310
-2636:3:3311
-2637:3:3322
-2638:3:3323
-2639:3:3324
-2640:3:3322
-2641:3:3323
-2642:3:3324
-2643:3:3335
-2644:3:3340
-2645:3:3341
-2646:0:4365
-2647:3:3353
-2648:0:4365
-2649:3:3354
-2650:0:4365
-2651:2:1173
-2652:0:4365
-2653:3:3355
-2654:0:4365
-2655:2:1179
-2656:0:4365
-2657:2:1180
-2658:0:4365
-2659:3:3354
-2660:0:4365
-2661:2:1181
-2662:2:1185
-2663:2:1186
-2664:2:1194
-2665:2:1195
-2666:2:1199
-2667:2:1200
-2668:2:1194
-2669:2:1195
-2670:2:1199
-2671:2:1200
-2672:2:1208
-2673:2:1213
-2674:2:1217
-2675:2:1218
-2676:2:1225
-2677:2:1226
-2678:2:1237
-2679:2:1238
-2680:2:1239
-2681:2:1237
-2682:2:1238
-2683:2:1239
-2684:2:1250
-2685:2:1255
-2686:2:1256
-2687:0:4365
-2688:3:3355
-2689:0:4365
-2690:2:1268
-2691:0:4365
-2692:3:3354
-2693:0:4365
-2694:2:1270
-2695:0:4365
-2696:3:3355
-2697:0:4365
-2698:2:1271
-2699:2:1275
-2700:2:1276
-2701:2:1284
-2702:2:1285
-2703:2:1289
-2704:2:1290
-2705:2:1284
-2706:2:1285
-2707:2:1289
-2708:2:1290
-2709:2:1298
-2710:2:1303
-2711:2:1307
-2712:2:1308
-2713:2:1315
-2714:2:1316
-2715:2:1327
-2716:2:1328
-2717:2:1329
-2718:2:1327
-2719:2:1328
-2720:2:1329
-2721:2:1340
-2722:2:1345
-2723:2:1346
-2724:0:4365
-2725:2:1358
-2726:0:4365
-2727:2:1360
-2728:0:4365
-2729:3:3354
-2730:0:4365
-2731:2:1361
-2732:0:4365
-2733:3:3355
-2734:0:4365
-2735:2:1362
-2736:2:1366
-2737:2:1367
-2738:2:1375
-2739:2:1376
-2740:2:1380
-2741:2:1381
-2742:2:1375
-2743:2:1376
-2744:2:1380
-2745:2:1381
-2746:2:1389
-2747:2:1394
-2748:2:1398
-2749:2:1399
-2750:2:1406
-2751:2:1407
-2752:2:1418
-2753:2:1419
-2754:2:1420
-2755:2:1418
-2756:2:1419
-2757:2:1420
-2758:2:1431
-2759:2:1436
-2760:2:1437
-2761:0:4365
-2762:2:1449
-2763:0:4365
-2764:3:3354
-2765:0:4365
-2766:2:1451
-2767:0:4365
-2768:3:3355
-2769:0:4365
-2770:2:1652
-2771:0:4365
-2772:2:1653
-2773:0:4365
-2774:2:1657
-2775:0:4365
-2776:2:1180
-2777:0:4365
-2778:3:3354
-2779:0:4365
-2780:2:1181
-2781:2:1185
-2782:2:1186
-2783:2:1194
-2784:2:1195
-2785:2:1199
-2786:2:1200
-2787:2:1194
-2788:2:1195
-2789:2:1196
-2790:2:1208
-2791:2:1213
-2792:2:1217
-2793:2:1218
-2794:2:1225
-2795:2:1226
-2796:2:1237
-2797:2:1238
-2798:2:1239
-2799:2:1237
-2800:2:1238
-2801:2:1239
-2802:2:1250
-2803:2:1255
-2804:2:1256
-2805:0:4365
-2806:3:3355
-2807:0:4365
-2808:2:1268
-2809:0:4365
-2810:3:3354
-2811:0:4365
-2812:2:1270
-2813:0:4365
-2814:3:3355
-2815:0:4365
-2816:2:1271
-2817:2:1275
-2818:2:1276
-2819:2:1284
-2820:2:1285
-2821:2:1289
-2822:2:1290
-2823:2:1284
-2824:2:1285
-2825:2:1289
-2826:2:1290
-2827:2:1298
-2828:2:1303
-2829:2:1307
-2830:2:1308
-2831:2:1315
-2832:2:1316
-2833:2:1327
-2834:2:1328
-2835:2:1329
-2836:2:1327
-2837:2:1328
-2838:2:1329
-2839:2:1340
-2840:2:1345
-2841:2:1346
-2842:0:4365
-2843:2:1358
-2844:0:4365
-2845:2:1454
-2846:0:4365
-2847:3:3354
-2848:0:4365
-2849:2:1455
-2850:0:4365
-2851:3:3355
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3354
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3355
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3354
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3355
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3354
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3355
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3354
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3355
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3354
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3355
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3354
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3355
-3019:0:4365
-3020:2:1936
-3021:0:4365
-3022:2:2129
-3023:0:4365
-3024:2:2130
-3025:0:4365
-3026:2:2134
-3027:0:4365
-3028:3:3354
-3029:0:4365
-3030:2:2136
-3031:0:4365
-3032:3:3355
-3033:0:4365
-3034:2:2137
-3035:2:2141
-3036:2:2142
-3037:2:2150
-3038:2:2151
-3039:2:2155
-3040:2:2156
-3041:2:2150
-3042:2:2151
-3043:2:2152
-3044:2:2164
-3045:2:2169
-3046:2:2173
-3047:2:2174
-3048:2:2181
-3049:2:2182
-3050:2:2193
-3051:2:2194
-3052:2:2195
-3053:2:2193
-3054:2:2194
-3055:2:2195
-3056:2:2206
-3057:2:2211
-3058:2:2212
-3059:0:4365
-3060:2:2224
-3061:0:4365
-3062:3:3354
-3063:0:4365
-3064:2:2226
-3065:0:4365
-3066:3:3355
-3067:0:4365
-3068:2:2230
-3069:0:4365
-3070:3:3354
-3071:0:4365
-3072:2:2235
-3073:2:2239
-3074:2:2240
-3075:2:2248
-3076:2:2249
-3077:2:2253
-3078:2:2254
-3079:2:2248
-3080:2:2249
-3081:2:2250
-3082:2:2262
-3083:2:2267
-3084:2:2271
-3085:2:2272
-3086:2:2279
-3087:2:2280
-3088:2:2291
-3089:2:2292
-3090:2:2293
-3091:2:2291
-3092:2:2292
-3093:2:2293
-3094:2:2304
-3095:2:2309
-3096:2:2310
-3097:0:4365
-3098:3:3355
-3099:0:4365
-3100:2:2322
-3101:0:4365
-3102:2:1169
-3103:0:4365
-3104:3:3354
-3105:0:4365
-3106:2:1170
-3107:0:4365
-3108:3:3355
-3109:0:4365
-3110:3:3356
-3111:0:4365
-3112:3:3366
-3113:0:4365
-3114:3:2951
-3115:0:4365
-3116:3:2952
-3117:0:4365
-3118:3:2953
-3119:0:4365
-3120:3:2954
-3121:3:2958
-3122:3:2959
-3123:3:2967
-3124:3:2968
-3125:3:2972
-3126:3:2973
-3127:3:2967
-3128:3:2968
-3129:3:2972
-3130:3:2973
-3131:3:2981
-3132:3:2986
-3133:3:2990
-3134:3:2991
-3135:3:2998
-3136:3:2999
-3137:3:3010
-3138:3:3011
-3139:3:3012
-3140:3:3010
-3141:3:3011
-3142:3:3012
-3143:3:3023
-3144:3:3028
-3145:3:3029
-3146:0:4365
-3147:3:3041
-3148:0:4365
-3149:3:3042
-3150:0:4365
-3151:2:1173
-3152:0:4365
-3153:3:3043
-3154:0:4365
-3155:2:1179
-3156:0:4365
-3157:2:1180
-3158:0:4365
-3159:3:3042
-3160:0:4365
-3161:2:1181
-3162:2:1185
-3163:2:1186
-3164:2:1194
-3165:2:1195
-3166:2:1199
-3167:2:1200
-3168:2:1194
-3169:2:1195
-3170:2:1199
-3171:2:1200
-3172:2:1208
-3173:2:1213
-3174:2:1217
-3175:2:1218
-3176:2:1225
-3177:2:1226
-3178:2:1237
-3179:2:1238
-3180:2:1239
-3181:2:1237
-3182:2:1238
-3183:2:1239
-3184:2:1250
-3185:2:1255
-3186:2:1256
-3187:0:4365
-3188:3:3043
-3189:0:4365
-3190:2:1268
-3191:0:4365
-3192:3:3042
-3193:0:4365
-3194:2:1270
-3195:0:4365
-3196:3:3043
-3197:0:4365
-3198:2:1271
-3199:2:1275
-3200:2:1276
-3201:2:1284
-3202:2:1285
-3203:2:1289
-3204:2:1290
-3205:2:1284
-3206:2:1285
-3207:2:1289
-3208:2:1290
-3209:2:1298
-3210:2:1303
-3211:2:1307
-3212:2:1308
-3213:2:1315
-3214:2:1316
-3215:2:1327
-3216:2:1328
-3217:2:1329
-3218:2:1327
-3219:2:1328
-3220:2:1329
-3221:2:1340
-3222:2:1345
-3223:2:1346
-3224:0:4365
-3225:2:1358
-3226:0:4365
-3227:2:1360
-3228:0:4365
-3229:3:3042
-3230:0:4365
-3231:2:1361
-3232:0:4365
-3233:3:3043
-3234:0:4365
-3235:2:1362
-3236:2:1366
-3237:2:1367
-3238:2:1375
-3239:2:1376
-3240:2:1380
-3241:2:1381
-3242:2:1375
-3243:2:1376
-3244:2:1380
-3245:2:1381
-3246:2:1389
-3247:2:1394
-3248:2:1398
-3249:2:1399
-3250:2:1406
-3251:2:1407
-3252:2:1418
-3253:2:1419
-3254:2:1420
-3255:2:1418
-3256:2:1419
-3257:2:1420
-3258:2:1431
-3259:2:1436
-3260:2:1437
-3261:0:4365
-3262:2:1449
-3263:0:4365
-3264:3:3042
-3265:0:4365
-3266:2:1451
-3267:0:4365
-3268:3:3043
-3269:0:4365
-3270:2:1652
-3271:0:4365
-3272:2:1653
-3273:0:4365
-3274:2:1657
-3275:0:4365
-3276:2:1180
-3277:0:4365
-3278:3:3042
-3279:0:4365
-3280:2:1181
-3281:2:1185
-3282:2:1186
-3283:2:1194
-3284:2:1195
-3285:2:1199
-3286:2:1200
-3287:2:1194
-3288:2:1195
-3289:2:1196
-3290:2:1208
-3291:2:1213
-3292:2:1217
-3293:2:1218
-3294:2:1225
-3295:2:1226
-3296:2:1237
-3297:2:1238
-3298:2:1239
-3299:2:1237
-3300:2:1238
-3301:2:1239
-3302:2:1250
-3303:2:1255
-3304:2:1256
-3305:0:4365
-3306:3:3043
-3307:0:4365
-3308:2:1268
-3309:0:4365
-3310:3:3042
-3311:0:4365
-3312:2:1270
-3313:0:4365
-3314:3:3043
-3315:0:4365
-3316:2:1271
-3317:2:1275
-3318:2:1276
-3319:2:1284
-3320:2:1285
-3321:2:1289
-3322:2:1290
-3323:2:1284
-3324:2:1285
-3325:2:1289
-3326:2:1290
-3327:2:1298
-3328:2:1303
-3329:2:1307
-3330:2:1308
-3331:2:1315
-3332:2:1316
-3333:2:1327
-3334:2:1328
-3335:2:1329
-3336:2:1327
-3337:2:1328
-3338:2:1329
-3339:2:1340
-3340:2:1345
-3341:2:1346
-3342:0:4365
-3343:2:1358
-3344:0:4365
-3345:2:1454
-3346:0:4365
-3347:3:3042
-3348:0:4365
-3349:2:1455
-3350:0:4365
-3351:3:3043
-3352:0:4365
-3353:2:1652
-3354:0:4365
-3355:2:1653
-3356:0:4365
-3357:2:1657
-3358:0:4365
-3359:2:1660
-3360:0:4365
-3361:3:3042
-3362:0:4365
-3363:2:1665
-3364:2:1669
-3365:2:1670
-3366:2:1678
-3367:2:1679
-3368:2:1683
-3369:2:1684
-3370:2:1678
-3371:2:1679
-3372:2:1680
-3373:2:1692
-3374:2:1697
-3375:2:1701
-3376:2:1702
-3377:2:1709
-3378:2:1710
-3379:2:1721
-3380:2:1722
-3381:2:1723
-3382:2:1721
-3383:2:1722
-3384:2:1723
-3385:2:1734
-3386:2:1739
-3387:2:1740
-3388:0:4365
-3389:3:3043
-3390:0:4365
-3391:2:1752
-3392:0:4365
-3393:3:3042
-3394:0:4365
-3395:2:1754
-3396:0:4365
-3397:3:3043
-3398:0:4365
-3399:2:1755
-3400:2:1759
-3401:2:1760
-3402:2:1768
-3403:2:1769
-3404:2:1773
-3405:2:1774
-3406:2:1768
-3407:2:1769
-3408:2:1773
-3409:2:1774
-3410:2:1782
-3411:2:1787
-3412:2:1791
-3413:2:1792
-3414:2:1799
-3415:2:1800
-3416:2:1811
-3417:2:1812
-3418:2:1813
-3419:2:1811
-3420:2:1812
-3421:2:1813
-3422:2:1824
-3423:2:1829
-3424:2:1830
-3425:0:4365
-3426:2:1842
-3427:0:4365
-3428:3:3042
-3429:0:4365
-3430:2:1844
-3431:0:4365
-3432:3:3043
-3433:0:4365
-3434:2:1845
-3435:2:1849
-3436:2:1850
-3437:2:1858
-3438:2:1859
-3439:2:1863
-3440:2:1864
-3441:2:1858
-3442:2:1859
-3443:2:1863
-3444:2:1864
-3445:2:1872
-3446:2:1877
-3447:2:1881
-3448:2:1882
-3449:2:1889
-3450:2:1890
-3451:2:1901
-3452:2:1902
-3453:2:1903
-3454:2:1901
-3455:2:1902
-3456:2:1903
-3457:2:1914
-3458:2:1919
-3459:2:1920
-3460:0:4365
-3461:2:1932
-3462:0:4365
-3463:3:3042
-3464:0:4365
-3465:2:1934
-3466:0:4365
-3467:3:3043
-3468:0:4365
-3469:2:1935
-3470:0:4365
-3471:2:1936
-3472:0:4365
-3473:2:2129
-3474:0:4365
-3475:2:2130
-3476:0:4365
-3477:2:2134
-3478:0:4365
-3479:3:3042
-3480:0:4365
-3481:2:2136
-3482:0:4365
-3483:3:3043
-3484:0:4365
-3485:2:2137
-3486:2:2141
-3487:2:2142
-3488:2:2150
-3489:2:2151
-3490:2:2155
-3491:2:2156
-3492:2:2150
-3493:2:2151
-3494:2:2155
-3495:2:2156
-3496:2:2164
-3497:2:2169
-3498:2:2173
-3499:2:2174
-3500:2:2181
-3501:2:2182
-3502:2:2193
-3503:2:2194
-3504:2:2195
-3505:2:2193
-3506:2:2194
-3507:2:2195
-3508:2:2206
-3509:2:2211
-3510:2:2212
-3511:0:4365
-3512:2:2224
-3513:0:4365
-3514:3:3042
-3515:0:4365
-3516:2:2226
-3517:0:4365
-3518:3:3043
-3519:0:4365
-3520:2:1936
-3521:0:4365
-3522:2:2129
-3523:0:4365
-3524:2:2130
-3525:0:4365
-3526:2:2134
-3527:0:4365
-3528:3:3042
-3529:0:4365
-3530:2:2136
-3531:0:4365
-3532:3:3043
-3533:0:4365
-3534:2:2137
-3535:2:2141
-3536:2:2142
-3537:2:2150
-3538:2:2151
-3539:2:2155
-3540:2:2156
-3541:2:2150
-3542:2:2151
-3543:2:2152
-3544:2:2164
-3545:2:2169
-3546:2:2173
-3547:2:2174
-3548:2:2181
-3549:2:2182
-3550:2:2193
-3551:2:2194
-3552:2:2195
-3553:2:2193
-3554:2:2194
-3555:2:2195
-3556:2:2206
-3557:2:2211
-3558:2:2212
-3559:0:4365
-3560:2:2224
-3561:0:4365
-3562:3:3042
-3563:0:4365
-3564:2:2226
-3565:0:4365
-3566:3:3043
-3567:0:4365
-3568:2:2230
-3569:0:4365
-3570:3:3042
-3571:0:4365
-3572:2:2235
-3573:2:2239
-3574:2:2240
-3575:2:2248
-3576:2:2249
-3577:2:2253
-3578:2:2254
-3579:2:2248
-3580:2:2249
-3581:2:2250
-3582:2:2262
-3583:2:2267
-3584:2:2271
-3585:2:2272
-3586:2:2279
-3587:2:2280
-3588:2:2291
-3589:2:2292
-3590:2:2293
-3591:2:2291
-3592:2:2292
-3593:2:2293
-3594:2:2304
-3595:2:2309
-3596:2:2310
-3597:0:4365
-3598:3:3043
-3599:0:4365
-3600:2:2322
-3601:0:4365
-3602:2:1169
-3603:0:4365
-3604:3:3042
-3605:0:4365
-3606:2:1170
-3607:0:4365
-3608:3:3043
-3609:0:4365
-3610:3:3044
-3611:0:4365
-3612:3:3257
-3613:0:4365
-3614:3:3362
-3615:0:4365
-3616:3:3363
-3617:0:4365
-3618:3:3367
-3619:0:4365
-3620:3:3373
-3621:3:3377
-3622:3:3378
-3623:3:3386
-3624:3:3387
-3625:3:3391
-3626:3:3392
-3627:3:3386
-3628:3:3387
-3629:3:3391
-3630:3:3392
-3631:3:3400
-3632:3:3405
-3633:3:3409
-3634:3:3410
-3635:3:3417
-3636:3:3418
-3637:3:3429
-3638:3:3430
-3639:3:3431
-3640:3:3429
-3641:3:3430
-3642:3:3431
-3643:3:3442
-3644:3:3447
-3645:3:3448
-3646:0:4365
-3647:3:3460
-3648:0:4365
-3649:3:3461
-3650:0:4365
-3651:2:1173
-3652:0:4365
-3653:3:3462
-3654:0:4365
-3655:2:1179
-3656:0:4365
-3657:2:1180
-3658:0:4365
-3659:3:3461
-3660:0:4365
-3661:2:1181
-3662:2:1185
-3663:2:1186
-3664:2:1194
-3665:2:1195
-3666:2:1199
-3667:2:1200
-3668:2:1194
-3669:2:1195
-3670:2:1199
-3671:2:1200
-3672:2:1208
-3673:2:1213
-3674:2:1217
-3675:2:1218
-3676:2:1225
-3677:2:1226
-3678:2:1237
-3679:2:1238
-3680:2:1239
-3681:2:1237
-3682:2:1238
-3683:2:1239
-3684:2:1250
-3685:2:1255
-3686:2:1256
-3687:0:4365
-3688:3:3462
-3689:0:4365
-3690:2:1268
-3691:0:4365
-3692:3:3461
-3693:0:4365
-3694:2:1270
-3695:0:4365
-3696:3:3462
-3697:0:4365
-3698:2:1271
-3699:2:1275
-3700:2:1276
-3701:2:1284
-3702:2:1285
-3703:2:1289
-3704:2:1290
-3705:2:1284
-3706:2:1285
-3707:2:1289
-3708:2:1290
-3709:2:1298
-3710:2:1303
-3711:2:1307
-3712:2:1308
-3713:2:1315
-3714:2:1316
-3715:2:1327
-3716:2:1328
-3717:2:1329
-3718:2:1327
-3719:2:1328
-3720:2:1329
-3721:2:1340
-3722:2:1345
-3723:2:1346
-3724:0:4365
-3725:2:1358
-3726:0:4365
-3727:2:1360
-3728:0:4365
-3729:3:3461
-3730:0:4365
-3731:2:1361
-3732:0:4365
-3733:3:3462
-3734:0:4365
-3735:2:1362
-3736:2:1366
-3737:2:1367
-3738:2:1375
-3739:2:1376
-3740:2:1380
-3741:2:1381
-3742:2:1375
-3743:2:1376
-3744:2:1380
-3745:2:1381
-3746:2:1389
-3747:2:1394
-3748:2:1398
-3749:2:1399
-3750:2:1406
-3751:2:1407
-3752:2:1418
-3753:2:1419
-3754:2:1420
-3755:2:1418
-3756:2:1419
-3757:2:1420
-3758:2:1431
-3759:2:1436
-3760:2:1437
-3761:0:4365
-3762:2:1449
-3763:0:4365
-3764:3:3461
-3765:0:4365
-3766:2:1451
-3767:0:4365
-3768:3:3462
-3769:0:4365
-3770:2:1652
-3771:0:4365
-3772:2:1653
-3773:0:4365
-3774:2:1657
-3775:0:4365
-3776:2:1180
-3777:0:4365
-3778:3:3461
-3779:0:4365
-3780:2:1181
-3781:2:1185
-3782:2:1186
-3783:2:1194
-3784:2:1195
-3785:2:1199
-3786:2:1200
-3787:2:1194
-3788:2:1195
-3789:2:1196
-3790:2:1208
-3791:2:1213
-3792:2:1217
-3793:2:1218
-3794:2:1225
-3795:2:1226
-3796:2:1237
-3797:2:1238
-3798:2:1239
-3799:2:1237
-3800:2:1238
-3801:2:1239
-3802:2:1250
-3803:2:1255
-3804:2:1256
-3805:0:4365
-3806:3:3462
-3807:0:4365
-3808:2:1268
-3809:0:4365
-3810:3:3461
-3811:0:4365
-3812:2:1270
-3813:0:4365
-3814:3:3462
-3815:0:4365
-3816:2:1271
-3817:2:1275
-3818:2:1276
-3819:2:1284
-3820:2:1285
-3821:2:1289
-3822:2:1290
-3823:2:1284
-3824:2:1285
-3825:2:1289
-3826:2:1290
-3827:2:1298
-3828:2:1303
-3829:2:1307
-3830:2:1308
-3831:2:1315
-3832:2:1316
-3833:2:1327
-3834:2:1328
-3835:2:1329
-3836:2:1327
-3837:2:1328
-3838:2:1329
-3839:2:1340
-3840:2:1345
-3841:2:1346
-3842:0:4365
-3843:2:1358
-3844:0:4365
-3845:2:1454
-3846:0:4365
-3847:3:3461
-3848:0:4365
-3849:2:1455
-3850:0:4365
-3851:3:3462
-3852:0:4365
-3853:2:1652
-3854:0:4365
-3855:2:1653
-3856:0:4365
-3857:2:1657
-3858:0:4365
-3859:2:1660
-3860:0:4365
-3861:3:3461
-3862:0:4365
-3863:2:1665
-3864:2:1669
-3865:2:1670
-3866:2:1678
-3867:2:1679
-3868:2:1683
-3869:2:1684
-3870:2:1678
-3871:2:1679
-3872:2:1680
-3873:2:1692
-3874:2:1697
-3875:2:1701
-3876:2:1702
-3877:2:1709
-3878:2:1710
-3879:2:1721
-3880:2:1722
-3881:2:1723
-3882:2:1721
-3883:2:1722
-3884:2:1723
-3885:2:1734
-3886:2:1739
-3887:2:1740
-3888:0:4365
-3889:3:3462
-3890:0:4365
-3891:2:1752
-3892:0:4365
-3893:3:3461
-3894:0:4365
-3895:2:1754
-3896:0:4365
-3897:3:3462
-3898:0:4365
-3899:2:1755
-3900:2:1759
-3901:2:1760
-3902:2:1768
-3903:2:1769
-3904:2:1773
-3905:2:1774
-3906:2:1768
-3907:2:1769
-3908:2:1773
-3909:2:1774
-3910:2:1782
-3911:2:1787
-3912:2:1791
-3913:2:1792
-3914:2:1799
-3915:2:1800
-3916:2:1811
-3917:2:1812
-3918:2:1813
-3919:2:1811
-3920:2:1812
-3921:2:1813
-3922:2:1824
-3923:2:1829
-3924:2:1830
-3925:0:4365
-3926:2:1842
-3927:0:4365
-3928:3:3461
-3929:0:4365
-3930:2:1844
-3931:0:4365
-3932:3:3462
-3933:0:4365
-3934:2:1845
-3935:2:1849
-3936:2:1850
-3937:2:1858
-3938:2:1859
-3939:2:1863
-3940:2:1864
-3941:2:1858
-3942:2:1859
-3943:2:1863
-3944:2:1864
-3945:2:1872
-3946:2:1877
-3947:2:1881
-3948:2:1882
-3949:2:1889
-3950:2:1890
-3951:2:1901
-3952:2:1902
-3953:2:1903
-3954:2:1901
-3955:2:1902
-3956:2:1903
-3957:2:1914
-3958:2:1919
-3959:2:1920
-3960:0:4365
-3961:2:1932
-3962:0:4365
-3963:3:3461
-3964:0:4365
-3965:2:1934
-3966:0:4365
-3967:3:3462
-3968:0:4365
-3969:2:1935
-3970:0:4365
-3971:2:1936
-3972:0:4365
-3973:2:2129
-3974:0:4365
-3975:2:2130
-3976:0:4365
-3977:2:2134
-3978:0:4365
-3979:3:3461
-3980:0:4365
-3981:2:2136
-3982:0:4365
-3983:3:3462
-3984:0:4365
-3985:2:2137
-3986:2:2141
-3987:2:2142
-3988:2:2150
-3989:2:2151
-3990:2:2155
-3991:2:2156
-3992:2:2150
-3993:2:2151
-3994:2:2155
-3995:2:2156
-3996:2:2164
-3997:2:2169
-3998:2:2173
-3999:2:2174
-4000:2:2181
-4001:2:2182
-4002:2:2193
-4003:2:2194
-4004:2:2195
-4005:2:2193
-4006:2:2194
-4007:2:2195
-4008:2:2206
-4009:2:2211
-4010:2:2212
-4011:0:4365
-4012:2:2224
-4013:0:4365
-4014:3:3461
-4015:0:4365
-4016:2:2226
-4017:0:4365
-4018:3:3462
-4019:0:4365
-4020:2:1936
-4021:0:4365
-4022:2:2129
-4023:0:4365
-4024:2:2130
-4025:0:4365
-4026:2:2134
-4027:0:4365
-4028:3:3461
-4029:0:4365
-4030:2:2136
-4031:0:4365
-4032:3:3462
-4033:0:4365
-4034:2:2137
-4035:2:2141
-4036:2:2142
-4037:2:2150
-4038:2:2151
-4039:2:2155
-4040:2:2156
-4041:2:2150
-4042:2:2151
-4043:2:2152
-4044:2:2164
-4045:2:2169
-4046:2:2173
-4047:2:2174
-4048:2:2181
-4049:2:2182
-4050:2:2193
-4051:2:2194
-4052:2:2195
-4053:2:2193
-4054:2:2194
-4055:2:2195
-4056:2:2206
-4057:2:2211
-4058:2:2212
-4059:0:4365
-4060:2:2224
-4061:0:4365
-4062:3:3461
-4063:0:4365
-4064:2:2226
-4065:0:4365
-4066:3:3462
-4067:0:4365
-4068:2:2230
-4069:0:4365
-4070:3:3461
-4071:0:4365
-4072:2:2235
-4073:2:2239
-4074:2:2240
-4075:2:2248
-4076:2:2249
-4077:2:2253
-4078:2:2254
-4079:2:2248
-4080:2:2249
-4081:2:2250
-4082:2:2262
-4083:2:2267
-4084:2:2271
-4085:2:2272
-4086:2:2279
-4087:2:2280
-4088:2:2291
-4089:2:2292
-4090:2:2293
-4091:2:2291
-4092:2:2292
-4093:2:2293
-4094:2:2304
-4095:2:2309
-4096:2:2310
-4097:0:4365
-4098:3:3462
-4099:0:4365
-4100:2:2322
-4101:0:4365
-4102:2:1169
-4103:0:4365
-4104:3:3461
-4105:0:4365
-4106:2:1170
-4107:0:4365
-4108:3:3462
-4109:0:4365
-4110:3:3463
-4111:0:4365
-4112:3:3469
-4113:0:4365
-4114:3:3470
-4115:3:3474
-4116:3:3475
-4117:3:3483
-4118:3:3484
-4119:3:3488
-4120:3:3489
-4121:3:3483
-4122:3:3484
-4123:3:3488
-4124:3:3489
-4125:3:3497
-4126:3:3502
-4127:3:3506
-4128:3:3507
-4129:3:3514
-4130:3:3515
-4131:3:3526
-4132:3:3527
-4133:3:3528
-4134:3:3526
-4135:3:3527
-4136:3:3528
-4137:3:3539
-4138:3:3544
-4139:3:3545
-4140:0:4365
-4141:3:3557
-4142:0:4365
-4143:3:3558
-4144:0:4365
-4145:2:1173
-4146:0:4365
-4147:3:3559
-4148:0:4365
-4149:2:1179
-4150:0:4365
-4151:2:1180
-4152:0:4365
-4153:3:3558
-4154:0:4365
-4155:2:1181
-4156:2:1185
-4157:2:1186
-4158:2:1194
-4159:2:1195
-4160:2:1199
-4161:2:1200
-4162:2:1194
-4163:2:1195
-4164:2:1199
-4165:2:1200
-4166:2:1208
-4167:2:1213
-4168:2:1217
-4169:2:1218
-4170:2:1225
-4171:2:1226
-4172:2:1237
-4173:2:1238
-4174:2:1239
-4175:2:1237
-4176:2:1238
-4177:2:1239
-4178:2:1250
-4179:2:1255
-4180:2:1256
-4181:0:4365
-4182:3:3559
-4183:0:4365
-4184:2:1268
-4185:0:4365
-4186:3:3558
-4187:0:4365
-4188:2:1270
-4189:0:4365
-4190:3:3559
-4191:0:4365
-4192:2:1271
-4193:2:1275
-4194:2:1276
-4195:2:1284
-4196:2:1285
-4197:2:1289
-4198:2:1290
-4199:2:1284
-4200:2:1285
-4201:2:1289
-4202:2:1290
-4203:2:1298
-4204:2:1303
-4205:2:1307
-4206:2:1308
-4207:2:1315
-4208:2:1316
-4209:2:1327
-4210:2:1328
-4211:2:1329
-4212:2:1327
-4213:2:1328
-4214:2:1329
-4215:2:1340
-4216:2:1345
-4217:2:1346
-4218:0:4365
-4219:2:1358
-4220:0:4365
-4221:2:1360
-4222:0:4365
-4223:3:3558
-4224:0:4365
-4225:2:1361
-4226:0:4365
-4227:3:3559
-4228:0:4365
-4229:2:1362
-4230:2:1366
-4231:2:1367
-4232:2:1375
-4233:2:1376
-4234:2:1380
-4235:2:1381
-4236:2:1375
-4237:2:1376
-4238:2:1380
-4239:2:1381
-4240:2:1389
-4241:2:1394
-4242:2:1398
-4243:2:1399
-4244:2:1406
-4245:2:1407
-4246:2:1418
-4247:2:1419
-4248:2:1420
-4249:2:1418
-4250:2:1419
-4251:2:1420
-4252:2:1431
-4253:2:1436
-4254:2:1437
-4255:0:4365
-4256:2:1449
-4257:0:4365
-4258:3:3558
-4259:0:4365
-4260:2:1451
-4261:0:4365
-4262:3:3559
-4263:0:4365
-4264:2:1652
-4265:0:4365
-4266:2:1653
-4267:0:4365
-4268:2:1657
-4269:0:4365
-4270:2:1180
-4271:0:4365
-4272:3:3558
-4273:0:4365
-4274:2:1181
-4275:2:1185
-4276:2:1186
-4277:2:1194
-4278:2:1195
-4279:2:1199
-4280:2:1200
-4281:2:1194
-4282:2:1195
-4283:2:1196
-4284:2:1208
-4285:2:1213
-4286:2:1217
-4287:2:1218
-4288:2:1225
-4289:2:1226
-4290:2:1237
-4291:2:1238
-4292:2:1239
-4293:2:1237
-4294:2:1238
-4295:2:1239
-4296:2:1250
-4297:2:1255
-4298:2:1256
-4299:0:4365
-4300:3:3559
-4301:0:4365
-4302:2:1268
-4303:0:4365
-4304:3:3558
-4305:0:4365
-4306:2:1270
-4307:0:4365
-4308:3:3559
-4309:0:4365
-4310:2:1271
-4311:2:1275
-4312:2:1276
-4313:2:1284
-4314:2:1285
-4315:2:1289
-4316:2:1290
-4317:2:1284
-4318:2:1285
-4319:2:1289
-4320:2:1290
-4321:2:1298
-4322:2:1303
-4323:2:1307
-4324:2:1308
-4325:2:1315
-4326:2:1316
-4327:2:1327
-4328:2:1328
-4329:2:1329
-4330:2:1327
-4331:2:1328
-4332:2:1329
-4333:2:1340
-4334:2:1345
-4335:2:1346
-4336:0:4365
-4337:2:1358
-4338:0:4365
-4339:2:1454
-4340:0:4365
-4341:3:3558
-4342:0:4365
-4343:2:1455
-4344:0:4365
-4345:3:3559
-4346:0:4365
-4347:2:1652
-4348:0:4365
-4349:2:1653
-4350:0:4365
-4351:2:1657
-4352:0:4365
-4353:2:1660
-4354:0:4365
-4355:3:3558
-4356:0:4365
-4357:2:1665
-4358:2:1669
-4359:2:1670
-4360:2:1678
-4361:2:1679
-4362:2:1683
-4363:2:1684
-4364:2:1678
-4365:2:1679
-4366:2:1680
-4367:2:1692
-4368:2:1697
-4369:2:1701
-4370:2:1702
-4371:2:1709
-4372:2:1710
-4373:2:1721
-4374:2:1722
-4375:2:1723
-4376:2:1721
-4377:2:1722
-4378:2:1723
-4379:2:1734
-4380:2:1739
-4381:2:1740
-4382:0:4365
-4383:3:3559
-4384:0:4365
-4385:2:1752
-4386:0:4365
-4387:3:3558
-4388:0:4365
-4389:2:1754
-4390:0:4365
-4391:3:3559
-4392:0:4365
-4393:2:1755
-4394:2:1759
-4395:2:1760
-4396:2:1768
-4397:2:1769
-4398:2:1773
-4399:2:1774
-4400:2:1768
-4401:2:1769
-4402:2:1773
-4403:2:1774
-4404:2:1782
-4405:2:1787
-4406:2:1791
-4407:2:1792
-4408:2:1799
-4409:2:1800
-4410:2:1811
-4411:2:1812
-4412:2:1813
-4413:2:1811
-4414:2:1812
-4415:2:1813
-4416:2:1824
-4417:2:1829
-4418:2:1830
-4419:0:4365
-4420:2:1842
-4421:0:4365
-4422:3:3558
-4423:0:4365
-4424:2:1844
-4425:0:4365
-4426:3:3559
-4427:0:4365
-4428:2:1845
-4429:2:1849
-4430:2:1850
-4431:2:1858
-4432:2:1859
-4433:2:1863
-4434:2:1864
-4435:2:1858
-4436:2:1859
-4437:2:1863
-4438:2:1864
-4439:2:1872
-4440:2:1877
-4441:2:1881
-4442:2:1882
-4443:2:1889
-4444:2:1890
-4445:2:1901
-4446:2:1902
-4447:2:1903
-4448:2:1901
-4449:2:1902
-4450:2:1903
-4451:2:1914
-4452:2:1919
-4453:2:1920
-4454:0:4365
-4455:2:1932
-4456:0:4365
-4457:3:3558
-4458:0:4365
-4459:2:1934
-4460:0:4365
-4461:3:3559
-4462:0:4365
-4463:2:1935
-4464:0:4365
-4465:2:1936
-4466:0:4365
-4467:2:2129
-4468:0:4365
-4469:2:2130
-4470:0:4365
-4471:2:2134
-4472:0:4365
-4473:3:3558
-4474:0:4365
-4475:2:2136
-4476:0:4365
-4477:3:3559
-4478:0:4365
-4479:2:2137
-4480:2:2141
-4481:2:2142
-4482:2:2150
-4483:2:2151
-4484:2:2155
-4485:2:2156
-4486:2:2150
-4487:2:2151
-4488:2:2155
-4489:2:2156
-4490:2:2164
-4491:2:2169
-4492:2:2173
-4493:2:2174
-4494:2:2181
-4495:2:2182
-4496:2:2193
-4497:2:2194
-4498:2:2195
-4499:2:2193
-4500:2:2194
-4501:2:2195
-4502:2:2206
-4503:2:2211
-4504:2:2212
-4505:0:4365
-4506:2:2224
-4507:0:4365
-4508:3:3558
-4509:0:4365
-4510:2:2226
-4511:0:4365
-4512:3:3559
-4513:0:4365
-4514:2:1936
-4515:0:4365
-4516:2:2129
-4517:0:4365
-4518:2:2130
-4519:0:4365
-4520:2:2134
-4521:0:4365
-4522:3:3558
-4523:0:4365
-4524:2:2136
-4525:0:4365
-4526:3:3559
-4527:0:4365
-4528:2:2137
-4529:2:2141
-4530:2:2142
-4531:2:2150
-4532:2:2151
-4533:2:2155
-4534:2:2156
-4535:2:2150
-4536:2:2151
-4537:2:2152
-4538:2:2164
-4539:2:2169
-4540:2:2173
-4541:2:2174
-4542:2:2181
-4543:2:2182
-4544:2:2193
-4545:2:2194
-4546:2:2195
-4547:2:2193
-4548:2:2194
-4549:2:2195
-4550:2:2206
-4551:2:2211
-4552:2:2212
-4553:0:4365
-4554:2:2224
-4555:0:4365
-4556:3:3558
-4557:0:4365
-4558:2:2226
-4559:0:4365
-4560:3:3559
-4561:0:4365
-4562:2:2230
-4563:0:4365
-4564:3:3558
-4565:0:4365
-4566:2:2235
-4567:2:2239
-4568:2:2240
-4569:2:2248
-4570:2:2249
-4571:2:2253
-4572:2:2254
-4573:2:2248
-4574:2:2249
-4575:2:2250
-4576:2:2262
-4577:2:2267
-4578:2:2271
-4579:2:2272
-4580:2:2279
-4581:2:2280
-4582:2:2291
-4583:2:2292
-4584:2:2293
-4585:2:2291
-4586:2:2292
-4587:2:2293
-4588:2:2304
-4589:2:2309
-4590:2:2310
-4591:0:4365
-4592:3:3559
-4593:0:4365
-4594:2:2322
-4595:0:4365
-4596:2:1169
-4597:0:4365
-4598:3:3558
-4599:0:4365
-4600:2:1170
-4601:0:4365
-4602:3:3559
-4603:0:4365
-4604:3:3560
-4605:0:4365
-4606:3:3566
-4607:0:4365
-4608:3:3569
-4609:3:3570
-4610:3:3582
-4611:3:3583
-4612:3:3587
-4613:3:3588
-4614:3:3582
-4615:3:3583
-4616:3:3587
-4617:3:3588
-4618:3:3596
-4619:3:3601
-4620:3:3605
-4621:3:3606
-4622:3:3613
-4623:3:3614
-4624:3:3625
-4625:3:3626
-4626:3:3627
-4627:3:3625
-4628:3:3626
-4629:3:3627
-4630:3:3638
-4631:3:3643
-4632:3:3644
-4633:0:4365
-4634:3:3656
-4635:0:4365
-4636:3:3657
-4637:0:4365
-4638:2:1173
-4639:0:4365
-4640:3:3658
-4641:0:4365
-4642:2:1179
-4643:0:4365
-4644:2:1180
-4645:0:4365
-4646:3:3657
-4647:0:4365
-4648:2:1181
-4649:2:1185
-4650:2:1186
-4651:2:1194
-4652:2:1195
-4653:2:1199
-4654:2:1200
-4655:2:1194
-4656:2:1195
-4657:2:1199
-4658:2:1200
-4659:2:1208
-4660:2:1213
-4661:2:1217
-4662:2:1218
-4663:2:1225
-4664:2:1226
-4665:2:1237
-4666:2:1238
-4667:2:1239
-4668:2:1237
-4669:2:1238
-4670:2:1239
-4671:2:1250
-4672:2:1255
-4673:2:1256
-4674:0:4365
-4675:3:3658
-4676:0:4365
-4677:2:1268
-4678:0:4365
-4679:3:3657
-4680:0:4365
-4681:2:1270
-4682:0:4365
-4683:3:3658
-4684:0:4365
-4685:2:1271
-4686:2:1275
-4687:2:1276
-4688:2:1284
-4689:2:1285
-4690:2:1289
-4691:2:1290
-4692:2:1284
-4693:2:1285
-4694:2:1289
-4695:2:1290
-4696:2:1298
-4697:2:1303
-4698:2:1307
-4699:2:1308
-4700:2:1315
-4701:2:1316
-4702:2:1327
-4703:2:1328
-4704:2:1329
-4705:2:1327
-4706:2:1328
-4707:2:1329
-4708:2:1340
-4709:2:1345
-4710:2:1346
-4711:0:4365
-4712:2:1358
-4713:0:4365
-4714:2:1360
-4715:0:4365
-4716:3:3657
-4717:0:4365
-4718:2:1361
-4719:0:4365
-4720:3:3658
-4721:0:4365
-4722:2:1362
-4723:2:1366
-4724:2:1367
-4725:2:1375
-4726:2:1376
-4727:2:1380
-4728:2:1381
-4729:2:1375
-4730:2:1376
-4731:2:1380
-4732:2:1381
-4733:2:1389
-4734:2:1394
-4735:2:1398
-4736:2:1399
-4737:2:1406
-4738:2:1407
-4739:2:1418
-4740:2:1419
-4741:2:1420
-4742:2:1418
-4743:2:1419
-4744:2:1420
-4745:2:1431
-4746:2:1436
-4747:2:1437
-4748:0:4365
-4749:2:1449
-4750:0:4365
-4751:3:3657
-4752:0:4365
-4753:2:1451
-4754:0:4365
-4755:3:3658
-4756:0:4365
-4757:2:1652
-4758:0:4365
-4759:2:1653
-4760:0:4365
-4761:2:1657
-4762:0:4365
-4763:2:1180
-4764:0:4365
-4765:3:3657
-4766:0:4365
-4767:2:1181
-4768:2:1185
-4769:2:1186
-4770:2:1194
-4771:2:1195
-4772:2:1199
-4773:2:1200
-4774:2:1194
-4775:2:1195
-4776:2:1196
-4777:2:1208
-4778:2:1213
-4779:2:1217
-4780:2:1218
-4781:2:1225
-4782:2:1226
-4783:2:1237
-4784:2:1238
-4785:2:1239
-4786:2:1237
-4787:2:1238
-4788:2:1239
-4789:2:1250
-4790:2:1255
-4791:2:1256
-4792:0:4365
-4793:3:3658
-4794:0:4365
-4795:2:1268
-4796:0:4365
-4797:3:3657
-4798:0:4365
-4799:2:1270
-4800:0:4365
-4801:3:3658
-4802:0:4365
-4803:2:1271
-4804:2:1275
-4805:2:1276
-4806:2:1284
-4807:2:1285
-4808:2:1289
-4809:2:1290
-4810:2:1284
-4811:2:1285
-4812:2:1289
-4813:2:1290
-4814:2:1298
-4815:2:1303
-4816:2:1307
-4817:2:1308
-4818:2:1315
-4819:2:1316
-4820:2:1327
-4821:2:1328
-4822:2:1329
-4823:2:1327
-4824:2:1328
-4825:2:1329
-4826:2:1340
-4827:2:1345
-4828:2:1346
-4829:0:4365
-4830:2:1358
-4831:0:4365
-4832:2:1454
-4833:0:4365
-4834:3:3657
-4835:0:4365
-4836:2:1455
-4837:0:4365
-4838:3:3658
-4839:0:4365
-4840:2:1652
-4841:0:4365
-4842:2:1653
-4843:0:4365
-4844:2:1657
-4845:0:4365
-4846:2:1660
-4847:0:4365
-4848:3:3657
-4849:0:4365
-4850:2:1665
-4851:2:1669
-4852:2:1670
-4853:2:1678
-4854:2:1679
-4855:2:1683
-4856:2:1684
-4857:2:1678
-4858:2:1679
-4859:2:1680
-4860:2:1692
-4861:2:1697
-4862:2:1701
-4863:2:1702
-4864:2:1709
-4865:2:1710
-4866:2:1721
-4867:2:1722
-4868:2:1723
-4869:2:1721
-4870:2:1722
-4871:2:1723
-4872:2:1734
-4873:2:1739
-4874:2:1740
-4875:0:4365
-4876:3:3658
-4877:0:4365
-4878:2:1752
-4879:0:4365
-4880:3:3657
-4881:0:4365
-4882:2:1754
-4883:0:4365
-4884:3:3658
-4885:0:4365
-4886:2:1755
-4887:2:1759
-4888:2:1760
-4889:2:1768
-4890:2:1769
-4891:2:1773
-4892:2:1774
-4893:2:1768
-4894:2:1769
-4895:2:1773
-4896:2:1774
-4897:2:1782
-4898:2:1787
-4899:2:1791
-4900:2:1792
-4901:2:1799
-4902:2:1800
-4903:2:1811
-4904:2:1812
-4905:2:1813
-4906:2:1811
-4907:2:1812
-4908:2:1813
-4909:2:1824
-4910:2:1829
-4911:2:1830
-4912:0:4365
-4913:2:1842
-4914:0:4365
-4915:3:3657
-4916:0:4365
-4917:2:1844
-4918:0:4365
-4919:3:3658
-4920:0:4365
-4921:2:1845
-4922:2:1849
-4923:2:1850
-4924:2:1858
-4925:2:1859
-4926:2:1863
-4927:2:1864
-4928:2:1858
-4929:2:1859
-4930:2:1863
-4931:2:1864
-4932:2:1872
-4933:2:1877
-4934:2:1881
-4935:2:1882
-4936:2:1889
-4937:2:1890
-4938:2:1901
-4939:2:1902
-4940:2:1903
-4941:2:1901
-4942:2:1902
-4943:2:1903
-4944:2:1914
-4945:2:1919
-4946:2:1920
-4947:0:4365
-4948:2:1932
-4949:0:4365
-4950:3:3657
-4951:0:4365
-4952:2:1934
-4953:0:4365
-4954:3:3658
-4955:0:4365
-4956:2:1935
-4957:0:4365
-4958:2:1936
-4959:0:4365
-4960:2:2129
-4961:0:4365
-4962:2:2130
-4963:0:4365
-4964:2:2134
-4965:0:4365
-4966:3:3657
-4967:0:4365
-4968:2:2136
-4969:0:4365
-4970:3:3658
-4971:0:4365
-4972:2:2137
-4973:2:2141
-4974:2:2142
-4975:2:2150
-4976:2:2151
-4977:2:2155
-4978:2:2156
-4979:2:2150
-4980:2:2151
-4981:2:2155
-4982:2:2156
-4983:2:2164
-4984:2:2169
-4985:2:2173
-4986:2:2174
-4987:2:2181
-4988:2:2182
-4989:2:2193
-4990:2:2194
-4991:2:2195
-4992:2:2193
-4993:2:2194
-4994:2:2195
-4995:2:2206
-4996:2:2211
-4997:2:2212
-4998:0:4365
-4999:2:2224
-5000:0:4365
-5001:3:3657
-5002:0:4365
-5003:2:2226
-5004:0:4365
-5005:3:3658
-5006:0:4365
-5007:2:1936
-5008:0:4365
-5009:2:2129
-5010:0:4365
-5011:2:2130
-5012:0:4365
-5013:2:2134
-5014:0:4365
-5015:3:3657
-5016:0:4365
-5017:2:2136
-5018:0:4365
-5019:3:3658
-5020:0:4365
-5021:2:2137
-5022:2:2141
-5023:2:2142
-5024:2:2150
-5025:2:2151
-5026:2:2155
-5027:2:2156
-5028:2:2150
-5029:2:2151
-5030:2:2152
-5031:2:2164
-5032:2:2169
-5033:2:2173
-5034:2:2174
-5035:2:2181
-5036:2:2182
-5037:2:2193
-5038:2:2194
-5039:2:2195
-5040:2:2193
-5041:2:2194
-5042:2:2195
-5043:2:2206
-5044:2:2211
-5045:2:2212
-5046:0:4365
-5047:2:2224
-5048:0:4365
-5049:3:3657
-5050:0:4365
-5051:2:2226
-5052:0:4365
-5053:3:3658
-5054:0:4365
-5055:2:2230
-5056:0:4365
-5057:3:3657
-5058:0:4365
-5059:2:2235
-5060:2:2239
-5061:2:2240
-5062:2:2248
-5063:2:2249
-5064:2:2253
-5065:2:2254
-5066:2:2248
-5067:2:2249
-5068:2:2250
-5069:2:2262
-5070:2:2267
-5071:2:2271
-5072:2:2272
-5073:2:2279
-5074:2:2280
-5075:2:2291
-5076:2:2292
-5077:2:2293
-5078:2:2291
-5079:2:2292
-5080:2:2293
-5081:2:2304
-5082:2:2309
-5083:2:2310
-5084:0:4365
-5085:3:3658
-5086:0:4365
-5087:2:2322
-5088:0:4365
-5089:2:1169
-5090:0:4365
-5091:3:3657
-5092:0:4365
-5093:2:1170
-5094:0:4365
-5095:3:3658
-5096:0:4365
-5097:3:3659
-5098:0:4365
-5099:3:3665
-5100:0:4365
-5101:3:3666
-5102:0:4365
-5103:3:3667
-5104:0:4365
-5105:3:3668
-5106:0:4365
-5107:3:3669
-5108:3:3673
-5109:3:3674
-5110:3:3682
-5111:3:3683
-5112:3:3687
-5113:3:3688
-5114:3:3682
-5115:3:3683
-5116:3:3687
-5117:3:3688
-5118:3:3696
-5119:3:3701
-5120:3:3705
-5121:3:3706
-5122:3:3713
-5123:3:3714
-5124:3:3725
-5125:3:3726
-5126:3:3727
-5127:3:3725
-5128:3:3726
-5129:3:3727
-5130:3:3738
-5131:3:3743
-5132:3:3744
-5133:0:4365
-5134:3:3756
-5135:0:4365
-5136:3:3757
-5137:0:4365
-5138:2:1173
-5139:0:4365
-5140:3:3758
-5141:0:4365
-5142:2:1179
-5143:0:4365
-5144:2:1180
-5145:0:4365
-5146:3:3757
-5147:0:4365
-5148:2:1181
-5149:2:1185
-5150:2:1186
-5151:2:1194
-5152:2:1195
-5153:2:1199
-5154:2:1200
-5155:2:1194
-5156:2:1195
-5157:2:1199
-5158:2:1200
-5159:2:1208
-5160:2:1213
-5161:2:1217
-5162:2:1218
-5163:2:1225
-5164:2:1226
-5165:2:1237
-5166:2:1238
-5167:2:1239
-5168:2:1237
-5169:2:1238
-5170:2:1239
-5171:2:1250
-5172:2:1255
-5173:2:1256
-5174:0:4365
-5175:3:3758
-5176:0:4365
-5177:2:1268
-5178:0:4365
-5179:3:3757
-5180:0:4365
-5181:2:1270
-5182:0:4365
-5183:3:3758
-5184:0:4365
-5185:2:1271
-5186:2:1275
-5187:2:1276
-5188:2:1284
-5189:2:1285
-5190:2:1289
-5191:2:1290
-5192:2:1284
-5193:2:1285
-5194:2:1289
-5195:2:1290
-5196:2:1298
-5197:2:1303
-5198:2:1307
-5199:2:1308
-5200:2:1315
-5201:2:1316
-5202:2:1327
-5203:2:1328
-5204:2:1329
-5205:2:1327
-5206:2:1328
-5207:2:1329
-5208:2:1340
-5209:2:1345
-5210:2:1346
-5211:0:4365
-5212:2:1358
-5213:0:4365
-5214:2:1360
-5215:0:4365
-5216:3:3757
-5217:0:4365
-5218:2:1361
-5219:0:4365
-5220:3:3758
-5221:0:4365
-5222:2:1362
-5223:2:1366
-5224:2:1367
-5225:2:1375
-5226:2:1376
-5227:2:1380
-5228:2:1381
-5229:2:1375
-5230:2:1376
-5231:2:1380
-5232:2:1381
-5233:2:1389
-5234:2:1394
-5235:2:1398
-5236:2:1399
-5237:2:1406
-5238:2:1407
-5239:2:1418
-5240:2:1419
-5241:2:1420
-5242:2:1418
-5243:2:1419
-5244:2:1420
-5245:2:1431
-5246:2:1436
-5247:2:1437
-5248:0:4365
-5249:2:1449
-5250:0:4365
-5251:3:3757
-5252:0:4365
-5253:2:1451
-5254:0:4365
-5255:3:3758
-5256:0:4365
-5257:2:1652
-5258:0:4365
-5259:2:1653
-5260:0:4365
-5261:2:1657
-5262:0:4365
-5263:2:1180
-5264:0:4365
-5265:3:3757
-5266:0:4365
-5267:2:1181
-5268:2:1185
-5269:2:1186
-5270:2:1194
-5271:2:1195
-5272:2:1199
-5273:2:1200
-5274:2:1194
-5275:2:1195
-5276:2:1196
-5277:2:1208
-5278:2:1213
-5279:2:1217
-5280:2:1218
-5281:2:1225
-5282:2:1226
-5283:2:1237
-5284:2:1238
-5285:2:1239
-5286:2:1237
-5287:2:1238
-5288:2:1239
-5289:2:1250
-5290:2:1255
-5291:2:1256
-5292:0:4365
-5293:3:3758
-5294:0:4365
-5295:2:1268
-5296:0:4365
-5297:3:3757
-5298:0:4365
-5299:2:1270
-5300:0:4365
-5301:3:3758
-5302:0:4365
-5303:2:1271
-5304:2:1275
-5305:2:1276
-5306:2:1284
-5307:2:1285
-5308:2:1289
-5309:2:1290
-5310:2:1284
-5311:2:1285
-5312:2:1289
-5313:2:1290
-5314:2:1298
-5315:2:1303
-5316:2:1307
-5317:2:1308
-5318:2:1315
-5319:2:1316
-5320:2:1327
-5321:2:1328
-5322:2:1329
-5323:2:1327
-5324:2:1328
-5325:2:1329
-5326:2:1340
-5327:2:1345
-5328:2:1346
-5329:0:4365
-5330:2:1358
-5331:0:4365
-5332:2:1454
-5333:0:4365
-5334:3:3757
-5335:0:4365
-5336:2:1455
-5337:0:4365
-5338:3:3758
-5339:0:4365
-5340:2:1652
-5341:0:4365
-5342:2:1653
-5343:0:4365
-5344:2:1657
-5345:0:4365
-5346:2:1660
-5347:0:4365
-5348:3:3757
-5349:0:4365
-5350:2:1665
-5351:2:1669
-5352:2:1670
-5353:2:1678
-5354:2:1679
-5355:2:1683
-5356:2:1684
-5357:2:1678
-5358:2:1679
-5359:2:1680
-5360:2:1692
-5361:2:1697
-5362:2:1701
-5363:2:1702
-5364:2:1709
-5365:2:1710
-5366:2:1721
-5367:2:1722
-5368:2:1723
-5369:2:1721
-5370:2:1722
-5371:2:1723
-5372:2:1734
-5373:2:1739
-5374:2:1740
-5375:0:4365
-5376:3:3758
-5377:0:4365
-5378:2:1752
-5379:0:4365
-5380:3:3757
-5381:0:4365
-5382:2:1754
-5383:0:4365
-5384:3:3758
-5385:0:4365
-5386:2:1755
-5387:2:1759
-5388:2:1760
-5389:2:1768
-5390:2:1769
-5391:2:1773
-5392:2:1774
-5393:2:1768
-5394:2:1769
-5395:2:1773
-5396:2:1774
-5397:2:1782
-5398:2:1787
-5399:2:1791
-5400:2:1792
-5401:2:1799
-5402:2:1800
-5403:2:1811
-5404:2:1812
-5405:2:1813
-5406:2:1811
-5407:2:1812
-5408:2:1813
-5409:2:1824
-5410:2:1829
-5411:2:1830
-5412:0:4365
-5413:2:1842
-5414:0:4365
-5415:3:3757
-5416:0:4365
-5417:2:1844
-5418:0:4365
-5419:3:3758
-5420:0:4365
-5421:2:1845
-5422:2:1849
-5423:2:1850
-5424:2:1858
-5425:2:1859
-5426:2:1863
-5427:2:1864
-5428:2:1858
-5429:2:1859
-5430:2:1863
-5431:2:1864
-5432:2:1872
-5433:2:1877
-5434:2:1881
-5435:2:1882
-5436:2:1889
-5437:2:1890
-5438:2:1901
-5439:2:1902
-5440:2:1903
-5441:2:1901
-5442:2:1902
-5443:2:1903
-5444:2:1914
-5445:2:1919
-5446:2:1920
-5447:0:4365
-5448:2:1932
-5449:0:4365
-5450:3:3757
-5451:0:4365
-5452:2:1934
-5453:0:4365
-5454:3:3758
-5455:0:4365
-5456:2:1935
-5457:0:4365
-5458:2:1936
-5459:0:4365
-5460:2:2129
-5461:0:4365
-5462:2:2130
-5463:0:4365
-5464:2:2134
-5465:0:4365
-5466:3:3757
-5467:0:4365
-5468:2:2136
-5469:0:4365
-5470:3:3758
-5471:0:4365
-5472:2:2137
-5473:2:2141
-5474:2:2142
-5475:2:2150
-5476:2:2151
-5477:2:2155
-5478:2:2156
-5479:2:2150
-5480:2:2151
-5481:2:2155
-5482:2:2156
-5483:2:2164
-5484:2:2169
-5485:2:2173
-5486:2:2174
-5487:2:2181
-5488:2:2182
-5489:2:2193
-5490:2:2194
-5491:2:2195
-5492:2:2193
-5493:2:2194
-5494:2:2195
-5495:2:2206
-5496:2:2211
-5497:2:2212
-5498:0:4365
-5499:2:2224
-5500:0:4365
-5501:3:3757
-5502:0:4365
-5503:2:2226
-5504:0:4365
-5505:3:3758
-5506:0:4365
-5507:2:1936
-5508:0:4365
-5509:2:2129
-5510:0:4365
-5511:2:2130
-5512:0:4365
-5513:2:2134
-5514:0:4365
-5515:3:3757
-5516:0:4365
-5517:2:2136
-5518:0:4365
-5519:3:3758
-5520:0:4365
-5521:2:2137
-5522:2:2141
-5523:2:2142
-5524:2:2150
-5525:2:2151
-5526:2:2155
-5527:2:2156
-5528:2:2150
-5529:2:2151
-5530:2:2152
-5531:2:2164
-5532:2:2169
-5533:2:2173
-5534:2:2174
-5535:2:2181
-5536:2:2182
-5537:2:2193
-5538:2:2194
-5539:2:2195
-5540:2:2193
-5541:2:2194
-5542:2:2195
-5543:2:2206
-5544:2:2211
-5545:2:2212
-5546:0:4365
-5547:2:2224
-5548:0:4365
-5549:3:3757
-5550:0:4365
-5551:2:2226
-5552:0:4365
-5553:3:3758
-5554:0:4365
-5555:2:2230
-5556:0:4365
-5557:3:3757
-5558:0:4365
-5559:2:2235
-5560:2:2239
-5561:2:2240
-5562:2:2248
-5563:2:2249
-5564:2:2253
-5565:2:2254
-5566:2:2248
-5567:2:2249
-5568:2:2250
-5569:2:2262
-5570:2:2267
-5571:2:2271
-5572:2:2272
-5573:2:2279
-5574:2:2280
-5575:2:2291
-5576:2:2292
-5577:2:2293
-5578:2:2291
-5579:2:2292
-5580:2:2293
-5581:2:2304
-5582:2:2309
-5583:2:2310
-5584:0:4365
-5585:3:3758
-5586:0:4365
-5587:2:2322
-5588:0:4365
-5589:2:1169
-5590:0:4365
-5591:3:3757
-5592:0:4365
-5593:2:1170
-5594:0:4365
-5595:3:3758
-5596:0:4365
-5597:3:3759
-5598:0:4365
-5599:3:3972
-5600:0:4365
-5601:3:3980
-5602:0:4365
-5603:3:3981
-5604:3:3985
-5605:3:3986
-5606:3:3994
-5607:3:3995
-5608:3:3999
-5609:3:4000
-5610:3:3994
-5611:3:3995
-5612:3:3999
-5613:3:4000
-5614:3:4008
-5615:3:4013
-5616:3:4017
-5617:3:4018
-5618:3:4025
-5619:3:4026
-5620:3:4037
-5621:3:4038
-5622:3:4039
-5623:3:4037
-5624:3:4038
-5625:3:4039
-5626:3:4050
-5627:3:4055
-5628:3:4056
-5629:0:4365
-5630:3:4068
-5631:0:4365
-5632:3:4069
-5633:0:4365
-5634:2:1173
-5635:0:4365
-5636:3:4070
-5637:0:4365
-5638:2:1179
-5639:0:4365
-5640:2:1180
-5641:0:4365
-5642:3:4069
-5643:0:4365
-5644:2:1181
-5645:2:1185
-5646:2:1186
-5647:2:1194
-5648:2:1195
-5649:2:1199
-5650:2:1200
-5651:2:1194
-5652:2:1195
-5653:2:1199
-5654:2:1200
-5655:2:1208
-5656:2:1213
-5657:2:1217
-5658:2:1218
-5659:2:1225
-5660:2:1226
-5661:2:1237
-5662:2:1238
-5663:2:1239
-5664:2:1237
-5665:2:1238
-5666:2:1239
-5667:2:1250
-5668:2:1255
-5669:2:1256
-5670:0:4365
-5671:3:4070
-5672:0:4365
-5673:2:1268
-5674:0:4365
-5675:3:4069
-5676:0:4365
-5677:2:1270
-5678:0:4365
-5679:3:4070
-5680:0:4365
-5681:2:1271
-5682:2:1275
-5683:2:1276
-5684:2:1284
-5685:2:1285
-5686:2:1289
-5687:2:1290
-5688:2:1284
-5689:2:1285
-5690:2:1289
-5691:2:1290
-5692:2:1298
-5693:2:1303
-5694:2:1307
-5695:2:1308
-5696:2:1315
-5697:2:1316
-5698:2:1327
-5699:2:1328
-5700:2:1329
-5701:2:1327
-5702:2:1328
-5703:2:1329
-5704:2:1340
-5705:2:1345
-5706:2:1346
-5707:0:4365
-5708:2:1358
-5709:0:4365
-5710:2:1360
-5711:0:4365
-5712:3:4069
-5713:0:4365
-5714:2:1361
-5715:0:4365
-5716:3:4070
-5717:0:4365
-5718:2:1362
-5719:2:1366
-5720:2:1367
-5721:2:1375
-5722:2:1376
-5723:2:1380
-5724:2:1381
-5725:2:1375
-5726:2:1376
-5727:2:1380
-5728:2:1381
-5729:2:1389
-5730:2:1394
-5731:2:1398
-5732:2:1399
-5733:2:1406
-5734:2:1407
-5735:2:1418
-5736:2:1419
-5737:2:1420
-5738:2:1418
-5739:2:1419
-5740:2:1420
-5741:2:1431
-5742:2:1436
-5743:2:1437
-5744:0:4365
-5745:2:1449
-5746:0:4365
-5747:3:4069
-5748:0:4365
-5749:2:1451
-5750:0:4365
-5751:3:4070
-5752:0:4365
-5753:2:1652
-5754:0:4365
-5755:2:1653
-5756:0:4365
-5757:2:1657
-5758:0:4365
-5759:2:1180
-5760:0:4365
-5761:3:4069
-5762:0:4365
-5763:2:1181
-5764:2:1185
-5765:2:1186
-5766:2:1194
-5767:2:1195
-5768:2:1199
-5769:2:1200
-5770:2:1194
-5771:2:1195
-5772:2:1196
-5773:2:1208
-5774:2:1213
-5775:2:1217
-5776:2:1218
-5777:2:1225
-5778:2:1226
-5779:2:1237
-5780:2:1238
-5781:2:1239
-5782:2:1237
-5783:2:1238
-5784:2:1239
-5785:2:1250
-5786:2:1255
-5787:2:1256
-5788:0:4365
-5789:3:4070
-5790:0:4365
-5791:2:1268
-5792:0:4365
-5793:3:4069
-5794:0:4365
-5795:2:1270
-5796:0:4365
-5797:3:4070
-5798:0:4365
-5799:2:1271
-5800:2:1275
-5801:2:1276
-5802:2:1284
-5803:2:1285
-5804:2:1289
-5805:2:1290
-5806:2:1284
-5807:2:1285
-5808:2:1289
-5809:2:1290
-5810:2:1298
-5811:2:1303
-5812:2:1307
-5813:2:1308
-5814:2:1315
-5815:2:1316
-5816:2:1327
-5817:2:1328
-5818:2:1329
-5819:2:1327
-5820:2:1328
-5821:2:1329
-5822:2:1340
-5823:2:1345
-5824:2:1346
-5825:0:4365
-5826:2:1358
-5827:0:4365
-5828:2:1454
-5829:0:4365
-5830:3:4069
-5831:0:4365
-5832:2:1455
-5833:0:4365
-5834:3:4070
-5835:0:4365
-5836:2:1652
-5837:0:4365
-5838:2:1653
-5839:0:4365
-5840:2:1657
-5841:0:4365
-5842:2:1660
-5843:0:4365
-5844:3:4069
-5845:0:4365
-5846:2:1665
-5847:2:1669
-5848:2:1670
-5849:2:1678
-5850:2:1679
-5851:2:1683
-5852:2:1684
-5853:2:1678
-5854:2:1679
-5855:2:1680
-5856:2:1692
-5857:2:1697
-5858:2:1701
-5859:2:1702
-5860:2:1709
-5861:2:1710
-5862:2:1721
-5863:2:1722
-5864:2:1723
-5865:2:1721
-5866:2:1722
-5867:2:1723
-5868:2:1734
-5869:2:1739
-5870:2:1740
-5871:0:4365
-5872:3:4070
-5873:0:4365
-5874:2:1752
-5875:0:4365
-5876:3:4069
-5877:0:4365
-5878:2:1754
-5879:0:4365
-5880:3:4070
-5881:0:4365
-5882:2:1755
-5883:2:1759
-5884:2:1760
-5885:2:1768
-5886:2:1769
-5887:2:1773
-5888:2:1774
-5889:2:1768
-5890:2:1769
-5891:2:1773
-5892:2:1774
-5893:2:1782
-5894:2:1787
-5895:2:1791
-5896:2:1792
-5897:2:1799
-5898:2:1800
-5899:2:1811
-5900:2:1812
-5901:2:1813
-5902:2:1811
-5903:2:1812
-5904:2:1813
-5905:2:1824
-5906:2:1829
-5907:2:1830
-5908:0:4365
-5909:2:1842
-5910:0:4365
-5911:3:4069
-5912:0:4365
-5913:2:1844
-5914:0:4365
-5915:3:4070
-5916:0:4365
-5917:2:1845
-5918:2:1849
-5919:2:1850
-5920:2:1858
-5921:2:1859
-5922:2:1863
-5923:2:1864
-5924:2:1858
-5925:2:1859
-5926:2:1863
-5927:2:1864
-5928:2:1872
-5929:2:1877
-5930:2:1881
-5931:2:1882
-5932:2:1889
-5933:2:1890
-5934:2:1901
-5935:2:1902
-5936:2:1903
-5937:2:1901
-5938:2:1902
-5939:2:1903
-5940:2:1914
-5941:2:1919
-5942:2:1920
-5943:0:4365
-5944:2:1932
-5945:0:4365
-5946:3:4069
-5947:0:4365
-5948:2:1934
-5949:0:4365
-5950:3:4070
-5951:0:4365
-5952:2:1935
-5953:0:4365
-5954:2:1936
-5955:0:4365
-5956:2:2129
-5957:0:4365
-5958:2:2130
-5959:0:4365
-5960:2:2134
-5961:0:4365
-5962:3:4069
-5963:0:4365
-5964:2:2136
-5965:0:4365
-5966:3:4070
-5967:0:4365
-5968:2:2137
-5969:2:2141
-5970:2:2142
-5971:2:2150
-5972:2:2151
-5973:2:2155
-5974:2:2156
-5975:2:2150
-5976:2:2151
-5977:2:2155
-5978:2:2156
-5979:2:2164
-5980:2:2169
-5981:2:2173
-5982:2:2174
-5983:2:2181
-5984:2:2182
-5985:2:2193
-5986:2:2194
-5987:2:2195
-5988:2:2193
-5989:2:2194
-5990:2:2195
-5991:2:2206
-5992:2:2211
-5993:2:2212
-5994:0:4365
-5995:2:2224
-5996:0:4365
-5997:3:4069
-5998:0:4365
-5999:2:2226
-6000:0:4365
-6001:3:4070
-6002:0:4365
-6003:2:1936
-6004:0:4365
-6005:2:2129
-6006:0:4365
-6007:2:2130
-6008:0:4365
-6009:2:2134
-6010:0:4365
-6011:3:4069
-6012:0:4365
-6013:2:2136
-6014:0:4365
-6015:3:4070
-6016:0:4365
-6017:2:2137
-6018:2:2141
-6019:2:2142
-6020:2:2150
-6021:2:2151
-6022:2:2155
-6023:2:2156
-6024:2:2150
-6025:2:2151
-6026:2:2152
-6027:2:2164
-6028:2:2169
-6029:2:2173
-6030:2:2174
-6031:2:2181
-6032:2:2182
-6033:2:2193
-6034:2:2194
-6035:2:2195
-6036:2:2193
-6037:2:2194
-6038:2:2195
-6039:2:2206
-6040:2:2211
-6041:2:2212
-6042:0:4365
-6043:2:2224
-6044:0:4365
-6045:3:4069
-6046:0:4365
-6047:2:2226
-6048:0:4365
-6049:3:4070
-6050:0:4365
-6051:2:2230
-6052:0:4365
-6053:3:4069
-6054:0:4365
-6055:2:2235
-6056:2:2239
-6057:2:2240
-6058:2:2248
-6059:2:2249
-6060:2:2253
-6061:2:2254
-6062:2:2248
-6063:2:2249
-6064:2:2250
-6065:2:2262
-6066:2:2267
-6067:2:2271
-6068:2:2272
-6069:2:2279
-6070:2:2280
-6071:2:2291
-6072:2:2292
-6073:2:2293
-6074:2:2291
-6075:2:2292
-6076:2:2293
-6077:2:2304
-6078:2:2309
-6079:2:2310
-6080:0:4365
-6081:3:4070
-6082:0:4365
-6083:2:2322
-6084:0:4365
-6085:2:1169
-6086:0:4365
-6087:3:4069
-6088:0:4365
-6089:2:1170
-6090:0:4365
-6091:3:4070
-6092:0:4365
-6093:3:4071
-6094:0:4365
-6095:3:4081
-6096:0:4365
-6097:3:3666
-6098:0:4365
-6099:3:3667
-6100:0:4365
-6101:3:3668
-6102:0:4365
-6103:3:3669
-6104:3:3673
-6105:3:3674
-6106:3:3682
-6107:3:3683
-6108:3:3687
-6109:3:3688
-6110:3:3682
-6111:3:3683
-6112:3:3687
-6113:3:3688
-6114:3:3696
-6115:3:3701
-6116:3:3705
-6117:3:3706
-6118:3:3713
-6119:3:3714
-6120:3:3725
-6121:3:3726
-6122:3:3727
-6123:3:3725
-6124:3:3726
-6125:3:3727
-6126:3:3738
-6127:3:3743
-6128:3:3744
-6129:0:4365
-6130:3:3756
-6131:0:4365
-6132:3:3757
-6133:0:4365
-6134:2:1173
-6135:0:4365
-6136:3:3758
-6137:0:4365
-6138:2:1179
-6139:0:4365
-6140:2:1180
-6141:0:4365
-6142:3:3757
-6143:0:4365
-6144:2:1181
-6145:2:1185
-6146:2:1186
-6147:2:1194
-6148:2:1195
-6149:2:1199
-6150:2:1200
-6151:2:1194
-6152:2:1195
-6153:2:1199
-6154:2:1200
-6155:2:1208
-6156:2:1213
-6157:2:1217
-6158:2:1218
-6159:2:1225
-6160:2:1226
-6161:2:1237
-6162:2:1238
-6163:2:1239
-6164:2:1237
-6165:2:1238
-6166:2:1239
-6167:2:1250
-6168:2:1255
-6169:2:1256
-6170:0:4365
-6171:3:3758
-6172:0:4365
-6173:2:1268
-6174:0:4365
-6175:3:3757
-6176:0:4365
-6177:2:1270
-6178:0:4365
-6179:3:3758
-6180:0:4365
-6181:2:1271
-6182:2:1275
-6183:2:1276
-6184:2:1284
-6185:2:1285
-6186:2:1289
-6187:2:1290
-6188:2:1284
-6189:2:1285
-6190:2:1289
-6191:2:1290
-6192:2:1298
-6193:2:1303
-6194:2:1307
-6195:2:1308
-6196:2:1315
-6197:2:1316
-6198:2:1327
-6199:2:1328
-6200:2:1329
-6201:2:1327
-6202:2:1328
-6203:2:1329
-6204:2:1340
-6205:2:1345
-6206:2:1346
-6207:0:4365
-6208:2:1358
-6209:0:4365
-6210:2:1360
-6211:0:4365
-6212:3:3757
-6213:0:4365
-6214:2:1361
-6215:0:4365
-6216:3:3758
-6217:0:4365
-6218:2:1362
-6219:2:1366
-6220:2:1367
-6221:2:1375
-6222:2:1376
-6223:2:1380
-6224:2:1381
-6225:2:1375
-6226:2:1376
-6227:2:1380
-6228:2:1381
-6229:2:1389
-6230:2:1394
-6231:2:1398
-6232:2:1399
-6233:2:1406
-6234:2:1407
-6235:2:1418
-6236:2:1419
-6237:2:1420
-6238:2:1418
-6239:2:1419
-6240:2:1420
-6241:2:1431
-6242:2:1436
-6243:2:1437
-6244:0:4365
-6245:2:1449
-6246:0:4365
-6247:3:3757
-6248:0:4365
-6249:2:1451
-6250:0:4365
-6251:3:3758
-6252:0:4365
-6253:2:1652
-6254:0:4365
-6255:2:1653
-6256:0:4365
-6257:2:1657
-6258:0:4365
-6259:2:1180
-6260:0:4365
-6261:3:3757
-6262:0:4365
-6263:2:1181
-6264:2:1185
-6265:2:1186
-6266:2:1194
-6267:2:1195
-6268:2:1199
-6269:2:1200
-6270:2:1194
-6271:2:1195
-6272:2:1196
-6273:2:1208
-6274:2:1213
-6275:2:1217
-6276:2:1218
-6277:2:1225
-6278:2:1226
-6279:2:1237
-6280:2:1238
-6281:2:1239
-6282:2:1237
-6283:2:1238
-6284:2:1239
-6285:2:1250
-6286:2:1255
-6287:2:1256
-6288:0:4365
-6289:3:3758
-6290:0:4365
-6291:2:1268
-6292:0:4365
-6293:3:3757
-6294:0:4365
-6295:2:1270
-6296:0:4365
-6297:3:3758
-6298:0:4365
-6299:2:1271
-6300:2:1275
-6301:2:1276
-6302:2:1284
-6303:2:1285
-6304:2:1289
-6305:2:1290
-6306:2:1284
-6307:2:1285
-6308:2:1289
-6309:2:1290
-6310:2:1298
-6311:2:1303
-6312:2:1307
-6313:2:1308
-6314:2:1315
-6315:2:1316
-6316:2:1327
-6317:2:1328
-6318:2:1329
-6319:2:1327
-6320:2:1328
-6321:2:1329
-6322:2:1340
-6323:2:1345
-6324:2:1346
-6325:0:4365
-6326:2:1358
-6327:0:4365
-6328:2:1454
-6329:0:4365
-6330:3:3757
-6331:0:4365
-6332:2:1455
-6333:0:4365
-6334:3:3758
-6335:0:4365
-6336:2:1652
-6337:0:4365
-6338:2:1653
-6339:0:4365
-6340:2:1657
-6341:0:4365
-6342:2:1660
-6343:0:4365
-6344:3:3757
-6345:0:4365
-6346:2:1665
-6347:2:1669
-6348:2:1670
-6349:2:1678
-6350:2:1679
-6351:2:1683
-6352:2:1684
-6353:2:1678
-6354:2:1679
-6355:2:1680
-6356:2:1692
-6357:2:1697
-6358:2:1701
-6359:2:1702
-6360:2:1709
-6361:2:1710
-6362:2:1721
-6363:2:1722
-6364:2:1723
-6365:2:1721
-6366:2:1722
-6367:2:1723
-6368:2:1734
-6369:2:1739
-6370:2:1740
-6371:0:4365
-6372:3:3758
-6373:0:4365
-6374:2:1752
-6375:0:4365
-6376:3:3757
-6377:0:4365
-6378:2:1754
-6379:0:4365
-6380:3:3758
-6381:0:4365
-6382:2:1755
-6383:2:1759
-6384:2:1760
-6385:2:1768
-6386:2:1769
-6387:2:1773
-6388:2:1774
-6389:2:1768
-6390:2:1769
-6391:2:1773
-6392:2:1774
-6393:2:1782
-6394:2:1787
-6395:2:1791
-6396:2:1792
-6397:2:1799
-6398:2:1800
-6399:2:1811
-6400:2:1812
-6401:2:1813
-6402:2:1811
-6403:2:1812
-6404:2:1813
-6405:2:1824
-6406:2:1829
-6407:2:1830
-6408:0:4365
-6409:2:1842
-6410:0:4365
-6411:3:3757
-6412:0:4365
-6413:2:1844
-6414:0:4365
-6415:3:3758
-6416:0:4365
-6417:2:1845
-6418:2:1849
-6419:2:1850
-6420:2:1858
-6421:2:1859
-6422:2:1863
-6423:2:1864
-6424:2:1858
-6425:2:1859
-6426:2:1863
-6427:2:1864
-6428:2:1872
-6429:2:1877
-6430:2:1881
-6431:2:1882
-6432:2:1889
-6433:2:1890
-6434:2:1901
-6435:2:1902
-6436:2:1903
-6437:2:1901
-6438:2:1902
-6439:2:1903
-6440:2:1914
-6441:2:1919
-6442:2:1920
-6443:0:4365
-6444:2:1932
-6445:0:4365
-6446:3:3757
-6447:0:4365
-6448:2:1934
-6449:0:4365
-6450:3:3758
-6451:0:4365
-6452:2:1935
-6453:0:4365
-6454:2:1936
-6455:0:4365
-6456:2:2129
-6457:0:4365
-6458:2:2130
-6459:0:4365
-6460:2:2134
-6461:0:4365
-6462:3:3757
-6463:0:4365
-6464:2:2136
-6465:0:4365
-6466:3:3758
-6467:0:4365
-6468:2:2137
-6469:2:2141
-6470:2:2142
-6471:2:2150
-6472:2:2151
-6473:2:2155
-6474:2:2156
-6475:2:2150
-6476:2:2151
-6477:2:2155
-6478:2:2156
-6479:2:2164
-6480:2:2169
-6481:2:2173
-6482:2:2174
-6483:2:2181
-6484:2:2182
-6485:2:2193
-6486:2:2194
-6487:2:2195
-6488:2:2193
-6489:2:2194
-6490:2:2195
-6491:2:2206
-6492:2:2211
-6493:2:2212
-6494:0:4365
-6495:2:2224
-6496:0:4365
-6497:3:3757
-6498:0:4365
-6499:2:2226
-6500:0:4365
-6501:3:3758
-6502:0:4365
-6503:2:1936
-6504:0:4365
-6505:2:2129
-6506:0:4365
-6507:2:2130
-6508:0:4365
-6509:2:2134
-6510:0:4365
-6511:3:3757
-6512:0:4365
-6513:2:2136
-6514:0:4365
-6515:3:3758
-6516:0:4365
-6517:2:2137
-6518:2:2141
-6519:2:2142
-6520:2:2150
-6521:2:2151
-6522:2:2155
-6523:2:2156
-6524:2:2150
-6525:2:2151
-6526:2:2152
-6527:2:2164
-6528:2:2169
-6529:2:2173
-6530:2:2174
-6531:2:2181
-6532:2:2182
-6533:2:2193
-6534:2:2194
-6535:2:2195
-6536:2:2193
-6537:2:2194
-6538:2:2195
-6539:2:2206
-6540:2:2211
-6541:2:2212
-6542:0:4365
-6543:2:2224
-6544:0:4365
-6545:3:3757
-6546:0:4365
-6547:2:2226
-6548:0:4365
-6549:3:3758
-6550:0:4365
-6551:2:2230
-6552:0:4365
-6553:3:3757
-6554:0:4365
-6555:2:2235
-6556:2:2239
-6557:2:2240
-6558:2:2248
-6559:2:2249
-6560:2:2253
-6561:2:2254
-6562:2:2248
-6563:2:2249
-6564:2:2250
-6565:2:2262
-6566:2:2267
-6567:2:2271
-6568:2:2272
-6569:2:2279
-6570:2:2280
-6571:2:2291
-6572:2:2292
-6573:2:2293
-6574:2:2291
-6575:2:2292
-6576:2:2293
-6577:2:2304
-6578:2:2309
-6579:2:2310
-6580:0:4365
-6581:3:3758
-6582:0:4365
-6583:2:2322
-6584:0:4365
-6585:2:1169
-6586:0:4365
-6587:3:3757
-6588:0:4365
-6589:2:1170
-6590:0:4365
-6591:3:3758
-6592:0:4365
-6593:3:3759
-6594:0:4365
-6595:3:3972
-6596:0:4365
-6597:3:4077
-6598:0:4365
-6599:3:4078
-6600:0:4365
-6601:3:4082
-6602:0:4365
-6603:3:4088
-6604:0:4365
-6605:3:4092
-6606:3:4093
-6607:3:4097
-6608:3:4101
-6609:3:4102
-6610:3:4097
-6611:3:4101
-6612:3:4102
-6613:3:4106
-6614:3:4114
-6615:3:4115
-6616:3:4120
-6617:3:4127
-6618:3:4128
-6619:3:4127
-6620:3:4128
-6621:3:4135
-6622:3:4140
-6623:0:4365
-6624:3:4151
-6625:0:4365
-6626:3:4155
-6627:3:4156
-6628:3:4160
-6629:3:4164
-6630:3:4165
-6631:3:4160
-6632:3:4164
-6633:3:4165
-6634:3:4169
-6635:3:4177
-6636:3:4178
-6637:3:4183
-6638:3:4190
-6639:3:4191
-6640:3:4190
-6641:3:4191
-6642:3:4198
-6643:3:4203
-6644:0:4365
-6645:3:4151
-6646:0:4365
-6647:3:4155
-6648:3:4156
-6649:3:4160
-6650:3:4164
-6651:3:4165
-6652:3:4160
-6653:3:4164
-6654:3:4165
-6655:3:4169
-6656:3:4177
-6657:3:4178
-6658:3:4183
-6659:3:4190
-6660:3:4191
-6661:3:4190
-6662:3:4191
-6663:3:4198
-6664:3:4203
-6665:0:4365
-6666:3:4214
-6667:0:4365
-6668:3:4222
-6669:3:4223
-6670:3:4227
-6671:3:4231
-6672:3:4232
-6673:3:4227
-6674:3:4231
-6675:3:4232
-6676:3:4236
-6677:3:4244
-6678:3:4245
-6679:3:4250
-6680:3:4257
-6681:3:4258
-6682:3:4257
-6683:3:4258
-6684:3:4265
-6685:3:4270
-6686:0:4365
-6687:3:4285
-6688:0:4365
-6689:3:4286
-6690:0:4365
-6691:2:1173
-6692:0:4365
-6693:3:4287
-6694:0:4365
-6695:2:1179
-6696:0:4365
-6697:2:1180
-6698:0:4365
-6699:3:4286
-6700:0:4365
-6701:2:1181
-6702:2:1185
-6703:2:1186
-6704:2:1194
-6705:2:1195
-6706:2:1199
-6707:2:1200
-6708:2:1194
-6709:2:1195
-6710:2:1199
-6711:2:1200
-6712:2:1208
-6713:2:1213
-6714:2:1217
-6715:2:1218
-6716:2:1225
-6717:2:1226
-6718:2:1237
-6719:2:1238
-6720:2:1239
-6721:2:1237
-6722:2:1238
-6723:2:1239
-6724:2:1250
-6725:2:1255
-6726:2:1256
-6727:0:4365
-6728:3:4287
-6729:0:4365
-6730:2:1268
-6731:0:4365
-6732:3:4286
-6733:0:4365
-6734:2:1270
-6735:0:4365
-6736:3:4287
-6737:0:4365
-6738:2:1271
-6739:2:1275
-6740:2:1276
-6741:2:1284
-6742:2:1285
-6743:2:1289
-6744:2:1290
-6745:2:1284
-6746:2:1285
-6747:2:1289
-6748:2:1290
-6749:2:1298
-6750:2:1303
-6751:2:1307
-6752:2:1308
-6753:2:1315
-6754:2:1316
-6755:2:1327
-6756:2:1328
-6757:2:1329
-6758:2:1327
-6759:2:1328
-6760:2:1329
-6761:2:1340
-6762:2:1345
-6763:2:1346
-6764:0:4365
-6765:2:1358
-6766:0:4365
-6767:2:1360
-6768:0:4365
-6769:3:4286
-6770:0:4365
-6771:2:1361
-6772:0:4365
-6773:3:4287
-6774:0:4365
-6775:2:1362
-6776:2:1366
-6777:2:1367
-6778:2:1375
-6779:2:1376
-6780:2:1380
-6781:2:1381
-6782:2:1375
-6783:2:1376
-6784:2:1380
-6785:2:1381
-6786:2:1389
-6787:2:1394
-6788:2:1398
-6789:2:1399
-6790:2:1406
-6791:2:1407
-6792:2:1418
-6793:2:1419
-6794:2:1420
-6795:2:1418
-6796:2:1419
-6797:2:1420
-6798:2:1431
-6799:2:1436
-6800:2:1437
-6801:0:4365
-6802:2:1449
-6803:0:4365
-6804:3:4286
-6805:0:4365
-6806:2:1451
-6807:0:4365
-6808:3:4287
-6809:0:4365
-6810:2:1652
-6811:0:4365
-6812:2:1653
-6813:0:4365
-6814:2:1657
-6815:0:4365
-6816:2:1180
-6817:0:4365
-6818:3:4286
-6819:0:4365
-6820:2:1181
-6821:2:1185
-6822:2:1186
-6823:2:1194
-6824:2:1195
-6825:2:1199
-6826:2:1200
-6827:2:1194
-6828:2:1195
-6829:2:1196
-6830:2:1208
-6831:2:1213
-6832:2:1217
-6833:2:1218
-6834:2:1225
-6835:2:1226
-6836:2:1237
-6837:2:1238
-6838:2:1239
-6839:2:1237
-6840:2:1238
-6841:2:1239
-6842:2:1250
-6843:2:1255
-6844:2:1256
-6845:0:4365
-6846:3:4287
-6847:0:4365
-6848:2:1268
-6849:0:4365
-6850:3:4286
-6851:0:4365
-6852:2:1270
-6853:0:4365
-6854:3:4287
-6855:0:4365
-6856:2:1271
-6857:2:1275
-6858:2:1276
-6859:2:1284
-6860:2:1285
-6861:2:1289
-6862:2:1290
-6863:2:1284
-6864:2:1285
-6865:2:1289
-6866:2:1290
-6867:2:1298
-6868:2:1303
-6869:2:1307
-6870:2:1308
-6871:2:1315
-6872:2:1316
-6873:2:1327
-6874:2:1328
-6875:2:1329
-6876:2:1327
-6877:2:1328
-6878:2:1329
-6879:2:1340
-6880:2:1345
-6881:2:1346
-6882:0:4365
-6883:2:1358
-6884:0:4365
-6885:2:1454
-6886:0:4365
-6887:3:4286
-6888:0:4365
-6889:2:1455
-6890:0:4365
-6891:3:4287
-6892:0:4365
-6893:2:1652
-6894:0:4365
-6895:2:1653
-6896:0:4365
-6897:2:1657
-6898:0:4365
-6899:2:1660
-6900:0:4365
-6901:3:4286
-6902:0:4365
-6903:2:1665
-6904:2:1669
-6905:2:1670
-6906:2:1678
-6907:2:1679
-6908:2:1683
-6909:2:1684
-6910:2:1678
-6911:2:1679
-6912:2:1680
-6913:2:1692
-6914:2:1697
-6915:2:1701
-6916:2:1702
-6917:2:1709
-6918:2:1710
-6919:2:1721
-6920:2:1722
-6921:2:1723
-6922:2:1721
-6923:2:1722
-6924:2:1723
-6925:2:1734
-6926:2:1739
-6927:2:1740
-6928:0:4365
-6929:3:4287
-6930:0:4365
-6931:2:1752
-6932:0:4365
-6933:3:4286
-6934:0:4365
-6935:2:1754
-6936:0:4365
-6937:3:4287
-6938:0:4365
-6939:2:1755
-6940:2:1759
-6941:2:1760
-6942:2:1768
-6943:2:1769
-6944:2:1773
-6945:2:1774
-6946:2:1768
-6947:2:1769
-6948:2:1773
-6949:2:1774
-6950:2:1782
-6951:2:1787
-6952:2:1791
-6953:2:1792
-6954:2:1799
-6955:2:1800
-6956:2:1811
-6957:2:1812
-6958:2:1813
-6959:2:1811
-6960:2:1812
-6961:2:1813
-6962:2:1824
-6963:2:1829
-6964:2:1830
-6965:0:4365
-6966:2:1842
-6967:0:4365
-6968:3:4286
-6969:0:4365
-6970:2:1844
-6971:0:4365
-6972:3:4287
-6973:0:4365
-6974:2:1845
-6975:2:1849
-6976:2:1850
-6977:2:1858
-6978:2:1859
-6979:2:1863
-6980:2:1864
-6981:2:1858
-6982:2:1859
-6983:2:1863
-6984:2:1864
-6985:2:1872
-6986:2:1877
-6987:2:1881
-6988:2:1882
-6989:2:1889
-6990:2:1890
-6991:2:1901
-6992:2:1902
-6993:2:1903
-6994:2:1901
-6995:2:1902
-6996:2:1903
-6997:2:1914
-6998:2:1919
-6999:2:1920
-7000:0:4365
-7001:2:1932
-7002:0:4365
-7003:3:4286
-7004:0:4365
-7005:2:1934
-7006:0:4365
-7007:3:4287
-7008:0:4365
-7009:2:1935
-7010:0:4365
-7011:2:1936
-7012:0:4365
-7013:2:2129
-7014:0:4365
-7015:2:2130
-7016:0:4365
-7017:2:2134
-7018:0:4365
-7019:3:4286
-7020:0:4365
-7021:2:2136
-7022:0:4365
-7023:3:4287
-7024:0:4365
-7025:2:2137
-7026:2:2141
-7027:2:2142
-7028:2:2150
-7029:2:2151
-7030:2:2155
-7031:2:2156
-7032:2:2150
-7033:2:2151
-7034:2:2155
-7035:2:2156
-7036:2:2164
-7037:2:2169
-7038:2:2173
-7039:2:2174
-7040:2:2181
-7041:2:2182
-7042:2:2193
-7043:2:2194
-7044:2:2195
-7045:2:2193
-7046:2:2194
-7047:2:2195
-7048:2:2206
-7049:2:2211
-7050:2:2212
-7051:0:4365
-7052:2:2224
-7053:0:4365
-7054:3:4286
-7055:0:4365
-7056:2:2226
-7057:0:4365
-7058:3:4287
-7059:0:4365
-7060:2:1936
-7061:0:4365
-7062:2:2129
-7063:0:4365
-7064:2:2130
-7065:0:4365
-7066:2:2134
-7067:0:4365
-7068:3:4286
-7069:0:4365
-7070:2:2136
-7071:0:4365
-7072:3:4287
-7073:0:4365
-7074:2:2137
-7075:2:2141
-7076:2:2142
-7077:2:2150
-7078:2:2151
-7079:2:2155
-7080:2:2156
-7081:2:2150
-7082:2:2151
-7083:2:2152
-7084:2:2164
-7085:2:2169
-7086:2:2173
-7087:2:2174
-7088:2:2181
-7089:2:2182
-7090:2:2193
-7091:2:2194
-7092:2:2195
-7093:2:2193
-7094:2:2194
-7095:2:2195
-7096:2:2206
-7097:2:2211
-7098:2:2212
-7099:0:4365
-7100:2:2224
-7101:0:4365
-7102:3:4286
-7103:0:4365
-7104:2:2226
-7105:0:4365
-7106:3:4287
-7107:0:4365
-7108:2:2230
-7109:0:4365
-7110:3:4286
-7111:0:4365
-7112:2:2235
-7113:2:2239
-7114:2:2240
-7115:2:2248
-7116:2:2249
-7117:2:2253
-7118:2:2254
-7119:2:2248
-7120:2:2249
-7121:2:2250
-7122:2:2262
-7123:2:2267
-7124:2:2271
-7125:2:2272
-7126:2:2279
-7127:2:2280
-7128:2:2291
-7129:2:2292
-7130:2:2293
-7131:2:2291
-7132:2:2292
-7133:2:2293
-7134:2:2304
-7135:2:2309
-7136:2:2310
-7137:0:4365
-7138:3:4287
-7139:0:4365
-7140:2:2322
-7141:0:4365
-7142:2:1169
-7143:0:4365
-7144:3:4286
-7145:0:4365
-7146:2:1170
-7147:0:4365
-7148:3:4287
-7149:0:4365
-7150:3:4288
-7151:0:4365
-7152:3:4294
-7153:0:4365
-7154:3:4295
-7155:0:4365
-7156:3:2338
-7157:0:4365
-7158:3:2339
-7159:3:2343
-7160:3:2344
-7161:3:2352
-7162:3:2353
-7163:3:2357
-7164:3:2358
-7165:3:2352
-7166:3:2353
-7167:3:2357
-7168:3:2358
-7169:3:2366
-7170:3:2371
-7171:3:2375
-7172:3:2376
-7173:3:2383
-7174:3:2384
-7175:3:2395
-7176:3:2396
-7177:3:2397
-7178:3:2395
-7179:3:2396
-7180:3:2397
-7181:3:2408
-7182:3:2413
-7183:3:2414
-7184:0:4365
-7185:3:2426
-7186:0:4365
-7187:3:2427
-7188:0:4365
-7189:2:1173
-7190:0:4365
-7191:3:2428
-7192:0:4365
-7193:2:1179
-7194:0:4365
-7195:2:1180
-7196:0:4365
-7197:3:2427
-7198:0:4365
-7199:2:1181
-7200:2:1185
-7201:2:1186
-7202:2:1194
-7203:2:1195
-7204:2:1199
-7205:2:1200
-7206:2:1194
-7207:2:1195
-7208:2:1199
-7209:2:1200
-7210:2:1208
-7211:2:1213
-7212:2:1217
-7213:2:1218
-7214:2:1225
-7215:2:1226
-7216:2:1237
-7217:2:1238
-7218:2:1239
-7219:2:1237
-7220:2:1238
-7221:2:1239
-7222:2:1250
-7223:2:1255
-7224:2:1256
-7225:0:4365
-7226:3:2428
-7227:0:4365
-7228:2:1268
-7229:0:4365
-7230:3:2427
-7231:0:4365
-7232:2:1270
-7233:0:4365
-7234:3:2428
-7235:0:4365
-7236:2:1271
-7237:2:1275
-7238:2:1276
-7239:2:1284
-7240:2:1285
-7241:2:1289
-7242:2:1290
-7243:2:1284
-7244:2:1285
-7245:2:1289
-7246:2:1290
-7247:2:1298
-7248:2:1303
-7249:2:1307
-7250:2:1308
-7251:2:1315
-7252:2:1316
-7253:2:1327
-7254:2:1328
-7255:2:1329
-7256:2:1327
-7257:2:1328
-7258:2:1329
-7259:2:1340
-7260:2:1345
-7261:2:1346
-7262:0:4365
-7263:2:1358
-7264:0:4365
-7265:2:1360
-7266:0:4365
-7267:3:2427
-7268:0:4365
-7269:2:1361
-7270:0:4365
-7271:3:2428
-7272:0:4365
-7273:2:1362
-7274:2:1366
-7275:2:1367
-7276:2:1375
-7277:2:1376
-7278:2:1380
-7279:2:1381
-7280:2:1375
-7281:2:1376
-7282:2:1380
-7283:2:1381
-7284:2:1389
-7285:2:1394
-7286:2:1398
-7287:2:1399
-7288:2:1406
-7289:2:1407
-7290:2:1418
-7291:2:1419
-7292:2:1420
-7293:2:1418
-7294:2:1419
-7295:2:1420
-7296:2:1431
-7297:2:1436
-7298:2:1437
-7299:0:4365
-7300:2:1449
-7301:0:4365
-7302:3:2427
-7303:0:4365
-7304:2:1451
-7305:0:4365
-7306:3:2428
-7307:0:4365
-7308:2:1652
-7309:0:4365
-7310:2:1653
-7311:0:4365
-7312:2:1657
-7313:0:4365
-7314:2:1180
-7315:0:4365
-7316:3:2427
-7317:0:4365
-7318:2:1181
-7319:2:1185
-7320:2:1186
-7321:2:1194
-7322:2:1195
-7323:2:1199
-7324:2:1200
-7325:2:1194
-7326:2:1195
-7327:2:1196
-7328:2:1208
-7329:2:1213
-7330:2:1217
-7331:2:1218
-7332:2:1225
-7333:2:1226
-7334:2:1237
-7335:2:1238
-7336:2:1239
-7337:2:1237
-7338:2:1238
-7339:2:1239
-7340:2:1250
-7341:2:1255
-7342:2:1256
-7343:0:4365
-7344:3:2428
-7345:0:4365
-7346:2:1268
-7347:0:4365
-7348:3:2427
-7349:0:4365
-7350:2:1270
-7351:0:4365
-7352:3:2428
-7353:0:4365
-7354:2:1271
-7355:2:1275
-7356:2:1276
-7357:2:1284
-7358:2:1285
-7359:2:1289
-7360:2:1290
-7361:2:1284
-7362:2:1285
-7363:2:1289
-7364:2:1290
-7365:2:1298
-7366:2:1303
-7367:2:1307
-7368:2:1308
-7369:2:1315
-7370:2:1316
-7371:2:1327
-7372:2:1328
-7373:2:1329
-7374:2:1327
-7375:2:1328
-7376:2:1329
-7377:2:1340
-7378:2:1345
-7379:2:1346
-7380:0:4365
-7381:2:1358
-7382:0:4365
-7383:2:1454
-7384:0:4365
-7385:3:2427
-7386:0:4365
-7387:2:1455
-7388:0:4365
-7389:3:2428
-7390:0:4365
-7391:2:1652
-7392:0:4365
-7393:2:1653
-7394:0:4365
-7395:2:1657
-7396:0:4365
-7397:2:1660
-7398:0:4365
-7399:3:2427
-7400:0:4365
-7401:2:1665
-7402:2:1669
-7403:2:1670
-7404:2:1678
-7405:2:1679
-7406:2:1683
-7407:2:1684
-7408:2:1678
-7409:2:1679
-7410:2:1680
-7411:2:1692
-7412:2:1697
-7413:2:1701
-7414:2:1702
-7415:2:1709
-7416:2:1710
-7417:2:1721
-7418:2:1722
-7419:2:1723
-7420:2:1721
-7421:2:1722
-7422:2:1723
-7423:2:1734
-7424:2:1739
-7425:2:1740
-7426:0:4365
-7427:3:2428
-7428:0:4365
-7429:2:1752
-7430:0:4365
-7431:3:2427
-7432:0:4365
-7433:2:1754
-7434:0:4365
-7435:3:2428
-7436:0:4365
-7437:2:1755
-7438:2:1759
-7439:2:1760
-7440:2:1768
-7441:2:1769
-7442:2:1773
-7443:2:1774
-7444:2:1768
-7445:2:1769
-7446:2:1773
-7447:2:1774
-7448:2:1782
-7449:2:1787
-7450:2:1791
-7451:2:1792
-7452:2:1799
-7453:2:1800
-7454:2:1811
-7455:2:1812
-7456:2:1813
-7457:2:1811
-7458:2:1812
-7459:2:1813
-7460:2:1824
-7461:2:1829
-7462:2:1830
-7463:0:4365
-7464:2:1842
-7465:0:4365
-7466:3:2427
-7467:0:4365
-7468:2:1844
-7469:0:4365
-7470:3:2428
-7471:0:4365
-7472:2:1845
-7473:2:1849
-7474:2:1850
-7475:2:1858
-7476:2:1859
-7477:2:1863
-7478:2:1864
-7479:2:1858
-7480:2:1859
-7481:2:1863
-7482:2:1864
-7483:2:1872
-7484:2:1877
-7485:2:1881
-7486:2:1882
-7487:2:1889
-7488:2:1890
-7489:2:1901
-7490:2:1902
-7491:2:1903
-7492:2:1901
-7493:2:1902
-7494:2:1903
-7495:2:1914
-7496:2:1919
-7497:2:1920
-7498:0:4365
-7499:2:1932
-7500:0:4365
-7501:3:2427
-7502:0:4365
-7503:2:1934
-7504:0:4365
-7505:3:2428
-7506:0:4365
-7507:2:1935
-7508:0:4365
-7509:2:1936
-7510:0:4365
-7511:2:2129
-7512:0:4365
-7513:2:2130
-7514:0:4365
-7515:2:2134
-7516:0:4365
-7517:3:2427
-7518:0:4365
-7519:2:2136
-7520:0:4365
-7521:3:2428
-7522:0:4365
-7523:2:2137
-7524:2:2141
-7525:2:2142
-7526:2:2150
-7527:2:2151
-7528:2:2155
-7529:2:2156
-7530:2:2150
-7531:2:2151
-7532:2:2155
-7533:2:2156
-7534:2:2164
-7535:2:2169
-7536:2:2173
-7537:2:2174
-7538:2:2181
-7539:2:2182
-7540:2:2193
-7541:2:2194
-7542:2:2195
-7543:2:2193
-7544:2:2194
-7545:2:2195
-7546:2:2206
-7547:2:2211
-7548:2:2212
-7549:0:4365
-7550:2:2224
-7551:0:4365
-7552:3:2427
-7553:0:4365
-7554:2:2226
-7555:0:4365
-7556:3:2428
-7557:0:4365
-7558:2:1936
-7559:0:4365
-7560:2:2129
-7561:0:4365
-7562:2:2130
-7563:0:4365
-7564:2:2134
-7565:0:4365
-7566:3:2427
-7567:0:4365
-7568:2:2136
-7569:0:4365
-7570:3:2428
-7571:0:4365
-7572:2:2137
-7573:2:2141
-7574:2:2142
-7575:2:2150
-7576:2:2151
-7577:2:2155
-7578:2:2156
-7579:2:2150
-7580:2:2151
-7581:2:2152
-7582:2:2164
-7583:2:2169
-7584:2:2173
-7585:2:2174
-7586:2:2181
-7587:2:2182
-7588:2:2193
-7589:2:2194
-7590:2:2195
-7591:2:2193
-7592:2:2194
-7593:2:2195
-7594:2:2206
-7595:2:2211
-7596:2:2212
-7597:0:4365
-7598:2:2224
-7599:0:4365
-7600:3:2427
-7601:0:4365
-7602:2:2226
-7603:0:4365
-7604:3:2428
-7605:0:4365
-7606:2:2230
-7607:0:4365
-7608:3:2427
-7609:0:4365
-7610:2:2235
-7611:2:2239
-7612:2:2240
-7613:2:2248
-7614:2:2249
-7615:2:2253
-7616:2:2254
-7617:2:2248
-7618:2:2249
-7619:2:2250
-7620:2:2262
-7621:2:2267
-7622:2:2271
-7623:2:2272
-7624:2:2279
-7625:2:2280
-7626:2:2291
-7627:2:2292
-7628:2:2293
-7629:2:2291
-7630:2:2292
-7631:2:2293
-7632:2:2304
-7633:2:2309
-7634:2:2310
-7635:0:4365
-7636:3:2428
-7637:0:4365
-7638:2:2322
-7639:0:4365
-7640:2:1169
-7641:0:4365
-7642:3:2427
-7643:0:4365
-7644:2:1170
-7645:0:4365
-7646:3:2428
-7647:0:4365
-7648:3:2429
-7649:0:4365
-7650:3:2435
-7651:3:2436
-7652:0:4365
-7653:3:2440
-7654:3:2444
-7655:3:2445
-7656:3:2453
-7657:3:2454
-7658:3:2458
-7659:3:2459
-7660:3:2453
-7661:3:2454
-7662:3:2458
-7663:3:2459
-7664:3:2467
-7665:3:2472
-7666:3:2473
-7667:3:2484
-7668:3:2485
-7669:3:2496
-7670:3:2497
-7671:3:2498
-7672:3:2496
-7673:3:2497
-7674:3:2498
-7675:3:2509
-7676:3:2514
-7677:3:2515
-7678:0:4365
-7679:3:2527
-7680:0:4365
-7681:3:2528
-7682:0:4365
-7683:2:1173
-7684:0:4365
-7685:3:2529
-7686:0:4365
-7687:2:1179
-7688:0:4365
-7689:2:1180
-7690:0:4365
-7691:3:2528
-7692:0:4365
-7693:2:1181
-7694:2:1185
-7695:2:1186
-7696:2:1194
-7697:2:1195
-7698:2:1199
-7699:2:1200
-7700:2:1194
-7701:2:1195
-7702:2:1199
-7703:2:1200
-7704:2:1208
-7705:2:1213
-7706:2:1217
-7707:2:1218
-7708:2:1225
-7709:2:1226
-7710:2:1237
-7711:2:1238
-7712:2:1239
-7713:2:1237
-7714:2:1238
-7715:2:1239
-7716:2:1250
-7717:2:1255
-7718:2:1256
-7719:0:4365
-7720:3:2529
-7721:0:4365
-7722:2:1268
-7723:0:4365
-7724:3:2528
-7725:0:4365
-7726:2:1270
-7727:0:4365
-7728:3:2529
-7729:0:4365
-7730:2:1271
-7731:2:1275
-7732:2:1276
-7733:2:1284
-7734:2:1285
-7735:2:1289
-7736:2:1290
-7737:2:1284
-7738:2:1285
-7739:2:1289
-7740:2:1290
-7741:2:1298
-7742:2:1303
-7743:2:1307
-7744:2:1308
-7745:2:1315
-7746:2:1316
-7747:2:1327
-7748:2:1328
-7749:2:1329
-7750:2:1327
-7751:2:1328
-7752:2:1329
-7753:2:1340
-7754:2:1345
-7755:2:1346
-7756:0:4365
-7757:2:1358
-7758:0:4365
-7759:2:1360
-7760:0:4365
-7761:3:2528
-7762:0:4365
-7763:2:1361
-7764:0:4365
-7765:3:2529
-7766:0:4365
-7767:2:1362
-7768:2:1366
-7769:2:1367
-7770:2:1375
-7771:2:1376
-7772:2:1380
-7773:2:1381
-7774:2:1375
-7775:2:1376
-7776:2:1380
-7777:2:1381
-7778:2:1389
-7779:2:1394
-7780:2:1398
-7781:2:1399
-7782:2:1406
-7783:2:1407
-7784:2:1418
-7785:2:1419
-7786:2:1420
-7787:2:1418
-7788:2:1419
-7789:2:1420
-7790:2:1431
-7791:2:1436
-7792:2:1437
-7793:0:4365
-7794:2:1449
-7795:0:4365
-7796:3:2528
-7797:0:4365
-7798:2:1451
-7799:0:4365
-7800:3:2529
-7801:0:4365
-7802:2:1652
-7803:0:4365
-7804:2:1653
-7805:0:4365
-7806:2:1657
-7807:0:4365
-7808:2:1180
-7809:0:4365
-7810:3:2528
-7811:0:4365
-7812:2:1181
-7813:2:1185
-7814:2:1186
-7815:2:1194
-7816:2:1195
-7817:2:1199
-7818:2:1200
-7819:2:1194
-7820:2:1195
-7821:2:1196
-7822:2:1208
-7823:2:1213
-7824:2:1217
-7825:2:1218
-7826:2:1225
-7827:2:1226
-7828:2:1237
-7829:2:1238
-7830:2:1239
-7831:2:1237
-7832:2:1238
-7833:2:1239
-7834:2:1250
-7835:2:1255
-7836:2:1256
-7837:0:4365
-7838:3:2529
-7839:0:4365
-7840:2:1268
-7841:0:4365
-7842:3:2528
-7843:0:4365
-7844:2:1270
-7845:0:4365
-7846:3:2529
-7847:0:4365
-7848:2:1271
-7849:2:1275
-7850:2:1276
-7851:2:1284
-7852:2:1285
-7853:2:1289
-7854:2:1290
-7855:2:1284
-7856:2:1285
-7857:2:1289
-7858:2:1290
-7859:2:1298
-7860:2:1303
-7861:2:1307
-7862:2:1308
-7863:2:1315
-7864:2:1316
-7865:2:1327
-7866:2:1328
-7867:2:1329
-7868:2:1327
-7869:2:1328
-7870:2:1329
-7871:2:1340
-7872:2:1345
-7873:2:1346
-7874:0:4365
-7875:2:1358
-7876:0:4365
-7877:2:1454
-7878:0:4365
-7879:3:2528
-7880:0:4365
-7881:2:1455
-7882:0:4365
-7883:3:2529
-7884:0:4365
-7885:2:1652
-7886:0:4365
-7887:2:1653
-7888:0:4365
-7889:2:1657
-7890:0:4365
-7891:2:1660
-7892:0:4365
-7893:3:2528
-7894:0:4365
-7895:2:1665
-7896:2:1669
-7897:2:1670
-7898:2:1678
-7899:2:1679
-7900:2:1683
-7901:2:1684
-7902:2:1678
-7903:2:1679
-7904:2:1680
-7905:2:1692
-7906:2:1697
-7907:2:1701
-7908:2:1702
-7909:2:1709
-7910:2:1710
-7911:2:1721
-7912:2:1722
-7913:2:1723
-7914:2:1721
-7915:2:1722
-7916:2:1723
-7917:2:1734
-7918:2:1739
-7919:2:1740
-7920:0:4365
-7921:3:2529
-7922:0:4365
-7923:2:1752
-7924:0:4365
-7925:3:2528
-7926:0:4365
-7927:2:1754
-7928:0:4365
-7929:3:2529
-7930:0:4365
-7931:2:1755
-7932:2:1759
-7933:2:1760
-7934:2:1768
-7935:2:1769
-7936:2:1773
-7937:2:1774
-7938:2:1768
-7939:2:1769
-7940:2:1773
-7941:2:1774
-7942:2:1782
-7943:2:1787
-7944:2:1791
-7945:2:1792
-7946:2:1799
-7947:2:1800
-7948:2:1811
-7949:2:1812
-7950:2:1813
-7951:2:1811
-7952:2:1812
-7953:2:1813
-7954:2:1824
-7955:2:1829
-7956:2:1830
-7957:0:4365
-7958:2:1842
-7959:0:4365
-7960:3:2528
-7961:0:4365
-7962:2:1844
-7963:0:4365
-7964:3:2529
-7965:0:4365
-7966:2:1845
-7967:2:1849
-7968:2:1850
-7969:2:1858
-7970:2:1859
-7971:2:1863
-7972:2:1864
-7973:2:1858
-7974:2:1859
-7975:2:1863
-7976:2:1864
-7977:2:1872
-7978:2:1877
-7979:2:1881
-7980:2:1882
-7981:2:1889
-7982:2:1890
-7983:2:1901
-7984:2:1902
-7985:2:1903
-7986:2:1901
-7987:2:1902
-7988:2:1903
-7989:2:1914
-7990:2:1919
-7991:2:1920
-7992:0:4365
-7993:2:1932
-7994:0:4365
-7995:3:2528
-7996:0:4365
-7997:2:1934
-7998:0:4365
-7999:3:2529
-8000:0:4365
-8001:2:1935
-8002:0:4365
-8003:2:1936
-8004:0:4365
-8005:2:2129
-8006:0:4365
-8007:2:2130
-8008:0:4365
-8009:2:2134
-8010:0:4365
-8011:3:2528
-8012:0:4365
-8013:2:2136
-8014:0:4365
-8015:3:2529
-8016:0:4365
-8017:2:2137
-8018:2:2141
-8019:2:2142
-8020:2:2150
-8021:2:2151
-8022:2:2155
-8023:2:2156
-8024:2:2150
-8025:2:2151
-8026:2:2155
-8027:2:2156
-8028:2:2164
-8029:2:2169
-8030:2:2173
-8031:2:2174
-8032:2:2181
-8033:2:2182
-8034:2:2193
-8035:2:2194
-8036:2:2195
-8037:2:2193
-8038:2:2194
-8039:2:2195
-8040:2:2206
-8041:2:2211
-8042:2:2212
-8043:0:4365
-8044:2:2224
-8045:0:4365
-8046:3:2528
-8047:0:4365
-8048:2:2226
-8049:0:4365
-8050:3:2529
-8051:0:4365
-8052:2:1936
-8053:0:4365
-8054:2:2129
-8055:0:4365
-8056:2:2130
-8057:0:4365
-8058:2:2134
-8059:0:4365
-8060:3:2528
-8061:0:4365
-8062:2:2136
-8063:0:4365
-8064:3:2529
-8065:0:4365
-8066:2:2137
-8067:2:2141
-8068:2:2142
-8069:2:2150
-8070:2:2151
-8071:2:2155
-8072:2:2156
-8073:2:2150
-8074:2:2151
-8075:2:2152
-8076:2:2164
-8077:2:2169
-8078:2:2173
-8079:2:2174
-8080:2:2181
-8081:2:2182
-8082:2:2193
-8083:2:2194
-8084:2:2195
-8085:2:2193
-8086:2:2194
-8087:2:2195
-8088:2:2206
-8089:2:2211
-8090:2:2212
-8091:0:4365
-8092:2:2224
-8093:0:4365
-8094:3:2528
-8095:0:4365
-8096:2:2226
-8097:0:4365
-8098:3:2529
-8099:0:4365
-8100:2:2230
-8101:0:4365
-8102:3:2528
-8103:0:4365
-8104:2:2235
-8105:2:2239
-8106:2:2240
-8107:2:2248
-8108:2:2249
-8109:2:2253
-8110:2:2254
-8111:2:2248
-8112:2:2249
-8113:2:2250
-8114:2:2262
-8115:2:2267
-8116:2:2271
-8117:2:2272
-8118:2:2279
-8119:2:2280
-8120:2:2291
-8121:2:2292
-8122:2:2293
-8123:2:2291
-8124:2:2292
-8125:2:2293
-8126:2:2304
-8127:2:2309
-8128:2:2310
-8129:0:4365
-8130:3:2529
-8131:0:4365
-8132:2:2322
-8133:0:4365
-8134:2:1169
-8135:0:4365
-8136:3:2528
-8137:0:4365
-8138:2:1170
-8139:0:4365
-8140:3:2529
-8141:0:4365
-8142:3:2530
-8143:0:4365
-8144:3:2536
-8145:0:4365
-8146:3:2537
-8147:0:4365
-8148:3:2547
-8149:0:4365
-8150:3:2548
-8151:0:4365
-8152:3:2552
-8153:3:2553
-8154:3:2557
-8155:3:2561
-8156:3:2562
-8157:3:2557
-8158:3:2561
-8159:3:2562
-8160:3:2566
-8161:3:2574
-8162:3:2575
-8163:3:2580
-8164:3:2587
-8165:3:2588
-8166:3:2587
-8167:3:2588
-8168:3:2595
-8169:3:2600
-8170:0:4365
-8171:3:2611
-8172:0:4365
-8173:3:2615
-8174:3:2616
-8175:3:2620
-8176:3:2624
-8177:3:2625
-8178:3:2620
-8179:3:2624
-8180:3:2625
-8181:3:2629
-8182:3:2637
-8183:3:2638
-8184:3:2643
-8185:3:2650
-8186:3:2651
-8187:3:2650
-8188:3:2651
-8189:3:2658
-8190:3:2663
-8191:0:4365
-8192:3:2611
-8193:0:4365
-8194:3:2615
-8195:3:2616
-8196:3:2620
-8197:3:2624
-8198:3:2625
-8199:3:2620
-8200:3:2624
-8201:3:2625
-8202:3:2629
-8203:3:2637
-8204:3:2638
-8205:3:2643
-8206:3:2650
-8207:3:2651
-8208:3:2650
-8209:3:2651
-8210:3:2658
-8211:3:2663
-8212:0:4365
-8213:3:2674
-8214:0:4365
-8215:3:2682
-8216:3:2683
-8217:3:2687
-8218:3:2691
-8219:3:2692
-8220:3:2687
-8221:3:2691
-8222:3:2692
-8223:3:2696
-8224:3:2704
-8225:3:2705
-8226:3:2710
-8227:3:2717
-8228:3:2718
-8229:3:2717
-8230:3:2718
-8231:3:2725
-8232:3:2730
-8233:0:4365
-8234:3:2745
-8235:0:4365
-8236:3:2746
-8237:0:4365
-8238:2:1173
-8239:0:4365
-8240:3:2747
-8241:0:4365
-8242:2:1179
-8243:0:4365
-8244:2:1180
-8245:0:4365
-8246:3:2746
-8247:0:4365
-8248:2:1181
-8249:2:1185
-8250:2:1186
-8251:2:1194
-8252:2:1195
-8253:2:1199
-8254:2:1200
-8255:2:1194
-8256:2:1195
-8257:2:1199
-8258:2:1200
-8259:2:1208
-8260:2:1213
-8261:2:1217
-8262:2:1218
-8263:2:1225
-8264:2:1226
-8265:2:1237
-8266:2:1238
-8267:2:1239
-8268:2:1237
-8269:2:1238
-8270:2:1239
-8271:2:1250
-8272:2:1255
-8273:2:1256
-8274:0:4365
-8275:3:2747
-8276:0:4365
-8277:2:1268
-8278:0:4365
-8279:3:2746
-8280:0:4365
-8281:2:1270
-8282:0:4365
-8283:3:2747
-8284:0:4365
-8285:2:1271
-8286:2:1275
-8287:2:1276
-8288:2:1284
-8289:2:1285
-8290:2:1289
-8291:2:1290
-8292:2:1284
-8293:2:1285
-8294:2:1289
-8295:2:1290
-8296:2:1298
-8297:2:1303
-8298:2:1307
-8299:2:1308
-8300:2:1315
-8301:2:1316
-8302:2:1327
-8303:2:1328
-8304:2:1329
-8305:2:1327
-8306:2:1328
-8307:2:1329
-8308:2:1340
-8309:2:1345
-8310:2:1346
-8311:0:4365
-8312:2:1358
-8313:0:4365
-8314:2:1360
-8315:0:4365
-8316:3:2746
-8317:0:4365
-8318:2:1361
-8319:0:4365
-8320:3:2747
-8321:0:4365
-8322:2:1362
-8323:2:1366
-8324:2:1367
-8325:2:1375
-8326:2:1376
-8327:2:1380
-8328:2:1381
-8329:2:1375
-8330:2:1376
-8331:2:1380
-8332:2:1381
-8333:2:1389
-8334:2:1394
-8335:2:1398
-8336:2:1399
-8337:2:1406
-8338:2:1407
-8339:2:1418
-8340:2:1419
-8341:2:1420
-8342:2:1418
-8343:2:1419
-8344:2:1420
-8345:2:1431
-8346:2:1436
-8347:2:1437
-8348:0:4365
-8349:2:1449
-8350:0:4365
-8351:3:2746
-8352:0:4365
-8353:2:1451
-8354:0:4365
-8355:3:2747
-8356:0:4365
-8357:2:1652
-8358:0:4365
-8359:2:1653
-8360:0:4365
-8361:2:1657
-8362:0:4365
-8363:2:1180
-8364:0:4365
-8365:3:2746
-8366:0:4365
-8367:2:1181
-8368:2:1185
-8369:2:1186
-8370:2:1194
-8371:2:1195
-8372:2:1199
-8373:2:1200
-8374:2:1194
-8375:2:1195
-8376:2:1196
-8377:2:1208
-8378:2:1213
-8379:2:1217
-8380:2:1218
-8381:2:1225
-8382:2:1226
-8383:2:1237
-8384:2:1238
-8385:2:1239
-8386:2:1237
-8387:2:1238
-8388:2:1239
-8389:2:1250
-8390:2:1255
-8391:2:1256
-8392:0:4365
-8393:3:2747
-8394:0:4365
-8395:2:1268
-8396:0:4365
-8397:3:2746
-8398:0:4365
-8399:2:1270
-8400:0:4365
-8401:3:2747
-8402:0:4365
-8403:2:1271
-8404:2:1275
-8405:2:1276
-8406:2:1284
-8407:2:1285
-8408:2:1289
-8409:2:1290
-8410:2:1284
-8411:2:1285
-8412:2:1289
-8413:2:1290
-8414:2:1298
-8415:2:1303
-8416:2:1307
-8417:2:1308
-8418:2:1315
-8419:2:1316
-8420:2:1327
-8421:2:1328
-8422:2:1329
-8423:2:1327
-8424:2:1328
-8425:2:1329
-8426:2:1340
-8427:2:1345
-8428:2:1346
-8429:0:4365
-8430:2:1358
-8431:0:4365
-8432:2:1454
-8433:0:4365
-8434:3:2746
-8435:0:4365
-8436:2:1455
-8437:0:4365
-8438:3:2747
-8439:0:4365
-8440:2:1652
-8441:0:4365
-8442:2:1653
-8443:0:4365
-8444:2:1657
-8445:0:4365
-8446:2:1660
-8447:0:4365
-8448:3:2746
-8449:0:4365
-8450:2:1665
-8451:2:1669
-8452:2:1670
-8453:2:1678
-8454:2:1679
-8455:2:1683
-8456:2:1684
-8457:2:1678
-8458:2:1679
-8459:2:1680
-8460:2:1692
-8461:2:1697
-8462:2:1701
-8463:2:1702
-8464:2:1709
-8465:2:1710
-8466:2:1721
-8467:2:1722
-8468:2:1723
-8469:2:1721
-8470:2:1722
-8471:2:1723
-8472:2:1734
-8473:2:1739
-8474:2:1740
-8475:0:4365
-8476:3:2747
-8477:0:4365
-8478:2:1752
-8479:0:4365
-8480:3:2746
-8481:0:4365
-8482:2:1754
-8483:0:4365
-8484:3:2747
-8485:0:4365
-8486:2:1755
-8487:2:1759
-8488:2:1760
-8489:2:1768
-8490:2:1769
-8491:2:1773
-8492:2:1774
-8493:2:1768
-8494:2:1769
-8495:2:1773
-8496:2:1774
-8497:2:1782
-8498:2:1787
-8499:2:1791
-8500:2:1792
-8501:2:1799
-8502:2:1800
-8503:2:1811
-8504:2:1812
-8505:2:1813
-8506:2:1811
-8507:2:1812
-8508:2:1813
-8509:2:1824
-8510:2:1829
-8511:2:1830
-8512:0:4365
-8513:2:1842
-8514:0:4365
-8515:3:2746
-8516:0:4365
-8517:2:1844
-8518:0:4365
-8519:3:2747
-8520:0:4365
-8521:2:1845
-8522:2:1849
-8523:2:1850
-8524:2:1858
-8525:2:1859
-8526:2:1863
-8527:2:1864
-8528:2:1858
-8529:2:1859
-8530:2:1863
-8531:2:1864
-8532:2:1872
-8533:2:1877
-8534:2:1881
-8535:2:1882
-8536:2:1889
-8537:2:1890
-8538:2:1901
-8539:2:1902
-8540:2:1903
-8541:2:1901
-8542:2:1902
-8543:2:1903
-8544:2:1914
-8545:2:1919
-8546:2:1920
-8547:0:4365
-8548:2:1932
-8549:0:4365
-8550:3:2746
-8551:0:4365
-8552:2:1934
-8553:0:4365
-8554:3:2747
-8555:0:4365
-8556:2:1935
-8557:0:4365
-8558:2:1936
-8559:0:4365
-8560:2:2129
-8561:0:4365
-8562:2:2130
-8563:0:4365
-8564:2:2134
-8565:0:4365
-8566:3:2746
-8567:0:4365
-8568:2:2136
-8569:0:4365
-8570:3:2747
-8571:0:4365
-8572:2:2137
-8573:2:2141
-8574:2:2142
-8575:2:2150
-8576:2:2151
-8577:2:2155
-8578:2:2156
-8579:2:2150
-8580:2:2151
-8581:2:2155
-8582:2:2156
-8583:2:2164
-8584:2:2169
-8585:2:2173
-8586:2:2174
-8587:2:2181
-8588:2:2182
-8589:2:2193
-8590:2:2194
-8591:2:2195
-8592:2:2193
-8593:2:2194
-8594:2:2195
-8595:2:2206
-8596:2:2211
-8597:2:2212
-8598:0:4365
-8599:2:2224
-8600:0:4365
-8601:3:2746
-8602:0:4365
-8603:2:2226
-8604:0:4365
-8605:3:2747
-8606:0:4365
-8607:2:1936
-8608:0:4365
-8609:2:2129
-8610:0:4365
-8611:2:2130
-8612:0:4365
-8613:2:2134
-8614:0:4365
-8615:3:2746
-8616:0:4365
-8617:2:2136
-8618:0:4365
-8619:3:2747
-8620:0:4365
-8621:2:2137
-8622:2:2141
-8623:2:2142
-8624:2:2150
-8625:2:2151
-8626:2:2155
-8627:2:2156
-8628:2:2150
-8629:2:2151
-8630:2:2152
-8631:2:2164
-8632:2:2169
-8633:2:2173
-8634:2:2174
-8635:2:2181
-8636:2:2182
-8637:2:2193
-8638:2:2194
-8639:2:2195
-8640:2:2193
-8641:2:2194
-8642:2:2195
-8643:2:2206
-8644:2:2211
-8645:2:2212
-8646:0:4365
-8647:2:2224
-8648:0:4365
-8649:3:2746
-8650:0:4365
-8651:2:2226
-8652:0:4365
-8653:3:2747
-8654:0:4365
-8655:2:2230
-8656:0:4365
-8657:3:2746
-8658:0:4365
-8659:2:2235
-8660:2:2239
-8661:2:2240
-8662:2:2248
-8663:2:2249
-8664:2:2253
-8665:2:2254
-8666:2:2248
-8667:2:2249
-8668:2:2250
-8669:2:2262
-8670:2:2267
-8671:2:2271
-8672:2:2272
-8673:2:2279
-8674:2:2280
-8675:2:2291
-8676:2:2292
-8677:2:2293
-8678:2:2291
-8679:2:2292
-8680:2:2293
-8681:2:2304
-8682:2:2309
-8683:2:2310
-8684:0:4365
-8685:3:2747
-8686:0:4365
-8687:2:2322
-8688:0:4365
-8689:2:1169
-8690:0:4365
-8691:3:2746
-8692:0:4365
-8693:2:1170
-8694:0:4365
-8695:3:2747
-8696:0:4365
-8697:3:2748
-8698:0:4365
-8699:3:2754
-8700:0:4365
-8701:3:2755
-8702:3:2759
-8703:3:2760
-8704:3:2768
-8705:3:2769
-8706:3:2773
-8707:3:2774
-8708:3:2768
-8709:3:2769
-8710:3:2773
-8711:3:2774
-8712:3:2782
-8713:3:2787
-8714:3:2791
-8715:3:2792
-8716:3:2799
-8717:3:2800
-8718:3:2811
-8719:3:2812
-8720:3:2813
-8721:3:2811
-8722:3:2812
-8723:3:2813
-8724:3:2824
-8725:3:2829
-8726:3:2830
-8727:0:4365
-8728:3:2842
-8729:0:4365
-8730:3:2843
-8731:0:4365
-8732:2:1173
-8733:0:4365
-8734:3:2844
-8735:0:4365
-8736:2:1179
-8737:0:4365
-8738:2:1180
-8739:0:4365
-8740:3:2843
-8741:0:4365
-8742:2:1181
-8743:2:1185
-8744:2:1186
-8745:2:1194
-8746:2:1195
-8747:2:1199
-8748:2:1200
-8749:2:1194
-8750:2:1195
-8751:2:1199
-8752:2:1200
-8753:2:1208
-8754:2:1213
-8755:2:1217
-8756:2:1218
-8757:2:1225
-8758:2:1226
-8759:2:1237
-8760:2:1238
-8761:2:1239
-8762:2:1237
-8763:2:1238
-8764:2:1239
-8765:2:1250
-8766:2:1255
-8767:2:1256
-8768:0:4365
-8769:3:2844
-8770:0:4365
-8771:2:1268
-8772:0:4365
-8773:3:2843
-8774:0:4365
-8775:2:1270
-8776:0:4365
-8777:3:2844
-8778:0:4365
-8779:2:1271
-8780:2:1275
-8781:2:1276
-8782:2:1284
-8783:2:1285
-8784:2:1289
-8785:2:1290
-8786:2:1284
-8787:2:1285
-8788:2:1289
-8789:2:1290
-8790:2:1298
-8791:2:1303
-8792:2:1307
-8793:2:1308
-8794:2:1315
-8795:2:1316
-8796:2:1327
-8797:2:1328
-8798:2:1329
-8799:2:1327
-8800:2:1328
-8801:2:1329
-8802:2:1340
-8803:2:1345
-8804:2:1346
-8805:0:4365
-8806:2:1358
-8807:0:4365
-8808:2:1360
-8809:0:4365
-8810:3:2843
-8811:0:4365
-8812:2:1361
-8813:0:4365
-8814:3:2844
-8815:0:4365
-8816:2:1362
-8817:2:1366
-8818:2:1367
-8819:2:1375
-8820:2:1376
-8821:2:1380
-8822:2:1381
-8823:2:1375
-8824:2:1376
-8825:2:1380
-8826:2:1381
-8827:2:1389
-8828:2:1394
-8829:2:1398
-8830:2:1399
-8831:2:1406
-8832:2:1407
-8833:2:1418
-8834:2:1419
-8835:2:1420
-8836:2:1418
-8837:2:1419
-8838:2:1420
-8839:2:1431
-8840:2:1436
-8841:2:1437
-8842:0:4365
-8843:2:1449
-8844:0:4365
-8845:3:2843
-8846:0:4365
-8847:2:1451
-8848:0:4365
-8849:3:2844
-8850:0:4365
-8851:2:1652
-8852:0:4365
-8853:2:1653
-8854:0:4365
-8855:2:1657
-8856:0:4365
-8857:2:1180
-8858:0:4365
-8859:3:2843
-8860:0:4365
-8861:2:1181
-8862:2:1185
-8863:2:1186
-8864:2:1194
-8865:2:1195
-8866:2:1199
-8867:2:1200
-8868:2:1194
-8869:2:1195
-8870:2:1196
-8871:2:1208
-8872:2:1213
-8873:2:1217
-8874:2:1218
-8875:2:1225
-8876:2:1226
-8877:2:1237
-8878:2:1238
-8879:2:1239
-8880:2:1237
-8881:2:1238
-8882:2:1239
-8883:2:1250
-8884:2:1255
-8885:2:1256
-8886:0:4365
-8887:3:2844
-8888:0:4365
-8889:2:1268
-8890:0:4365
-8891:3:2843
-8892:0:4365
-8893:2:1270
-8894:0:4365
-8895:3:2844
-8896:0:4365
-8897:2:1271
-8898:2:1275
-8899:2:1276
-8900:2:1284
-8901:2:1285
-8902:2:1289
-8903:2:1290
-8904:2:1284
-8905:2:1285
-8906:2:1289
-8907:2:1290
-8908:2:1298
-8909:2:1303
-8910:2:1307
-8911:2:1308
-8912:2:1315
-8913:2:1316
-8914:2:1327
-8915:2:1328
-8916:2:1329
-8917:2:1327
-8918:2:1328
-8919:2:1329
-8920:2:1340
-8921:2:1345
-8922:2:1346
-8923:0:4365
-8924:2:1358
-8925:0:4365
-8926:2:1454
-8927:0:4365
-8928:3:2843
-8929:0:4365
-8930:2:1455
-8931:0:4365
-8932:3:2844
-8933:0:4365
-8934:2:1652
-8935:0:4365
-8936:2:1653
-8937:0:4365
-8938:2:1657
-8939:0:4365
-8940:2:1660
-8941:0:4365
-8942:3:2843
-8943:0:4365
-8944:2:1665
-8945:2:1669
-8946:2:1670
-8947:2:1678
-8948:2:1679
-8949:2:1683
-8950:2:1684
-8951:2:1678
-8952:2:1679
-8953:2:1680
-8954:2:1692
-8955:2:1697
-8956:2:1701
-8957:2:1702
-8958:2:1709
-8959:2:1710
-8960:2:1721
-8961:2:1722
-8962:2:1723
-8963:2:1721
-8964:2:1722
-8965:2:1723
-8966:2:1734
-8967:2:1739
-8968:2:1740
-8969:0:4365
-8970:3:2844
-8971:0:4365
-8972:2:1752
-8973:0:4365
-8974:3:2843
-8975:0:4365
-8976:2:1754
-8977:0:4365
-8978:3:2844
-8979:0:4365
-8980:2:1755
-8981:2:1759
-8982:2:1760
-8983:2:1768
-8984:2:1769
-8985:2:1773
-8986:2:1774
-8987:2:1768
-8988:2:1769
-8989:2:1773
-8990:2:1774
-8991:2:1782
-8992:2:1787
-8993:2:1791
-8994:2:1792
-8995:2:1799
-8996:2:1800
-8997:2:1811
-8998:2:1812
-8999:2:1813
-9000:2:1811
-9001:2:1812
-9002:2:1813
-9003:2:1824
-9004:2:1829
-9005:2:1830
-9006:0:4365
-9007:2:1842
-9008:0:4365
-9009:3:2843
-9010:0:4365
-9011:2:1844
-9012:0:4365
-9013:3:2844
-9014:0:4365
-9015:2:1845
-9016:2:1849
-9017:2:1850
-9018:2:1858
-9019:2:1859
-9020:2:1863
-9021:2:1864
-9022:2:1858
-9023:2:1859
-9024:2:1863
-9025:2:1864
-9026:2:1872
-9027:2:1877
-9028:2:1881
-9029:2:1882
-9030:2:1889
-9031:2:1890
-9032:2:1901
-9033:2:1902
-9034:2:1903
-9035:2:1901
-9036:2:1902
-9037:2:1903
-9038:2:1914
-9039:2:1919
-9040:2:1920
-9041:0:4365
-9042:2:1932
-9043:0:4365
-9044:3:2843
-9045:0:4365
-9046:2:1934
-9047:0:4365
-9048:3:2844
-9049:0:4365
-9050:2:1935
-9051:0:4365
-9052:2:1936
-9053:0:4365
-9054:2:2129
-9055:0:4365
-9056:2:2130
-9057:0:4365
-9058:2:2134
-9059:0:4365
-9060:3:2843
-9061:0:4365
-9062:2:2136
-9063:0:4365
-9064:3:2844
-9065:0:4365
-9066:2:2137
-9067:2:2141
-9068:2:2142
-9069:2:2150
-9070:2:2151
-9071:2:2155
-9072:2:2156
-9073:2:2150
-9074:2:2151
-9075:2:2155
-9076:2:2156
-9077:2:2164
-9078:2:2169
-9079:2:2173
-9080:2:2174
-9081:2:2181
-9082:2:2182
-9083:2:2193
-9084:2:2194
-9085:2:2195
-9086:2:2193
-9087:2:2194
-9088:2:2195
-9089:2:2206
-9090:2:2211
-9091:2:2212
-9092:0:4365
-9093:2:2224
-9094:0:4365
-9095:3:2843
-9096:0:4365
-9097:2:2226
-9098:0:4365
-9099:3:2844
-9100:0:4365
-9101:2:1936
-9102:0:4365
-9103:2:2129
-9104:0:4365
-9105:2:2130
-9106:0:4365
-9107:2:2134
-9108:0:4365
-9109:3:2843
-9110:0:4365
-9111:2:2136
-9112:0:4365
-9113:3:2844
-9114:0:4365
-9115:2:2137
-9116:2:2141
-9117:2:2142
-9118:2:2150
-9119:2:2151
-9120:2:2155
-9121:2:2156
-9122:2:2150
-9123:2:2151
-9124:2:2152
-9125:2:2164
-9126:2:2169
-9127:2:2173
-9128:2:2174
-9129:2:2181
-9130:2:2182
-9131:2:2193
-9132:2:2194
-9133:2:2195
-9134:2:2193
-9135:2:2194
-9136:2:2195
-9137:2:2206
-9138:2:2211
-9139:2:2212
-9140:0:4365
-9141:2:2224
-9142:0:4365
-9143:3:2843
-9144:0:4365
-9145:2:2226
-9146:0:4365
-9147:3:2844
-9148:0:4365
-9149:2:2230
-9150:0:4365
-9151:3:2843
-9152:0:4365
-9153:2:2235
-9154:2:2239
-9155:2:2240
-9156:2:2248
-9157:2:2249
-9158:2:2253
-9159:2:2254
-9160:2:2248
-9161:2:2249
-9162:2:2250
-9163:2:2262
-9164:2:2267
-9165:2:2271
-9166:2:2272
-9167:2:2279
-9168:2:2280
-9169:2:2291
-9170:2:2292
-9171:2:2293
-9172:2:2291
-9173:2:2292
-9174:2:2293
-9175:2:2304
-9176:2:2309
-9177:2:2310
-9178:0:4365
-9179:3:2844
-9180:0:4365
-9181:2:2322
-9182:0:4365
-9183:2:1169
-9184:0:4365
-9185:3:2843
-9186:0:4365
-9187:2:1170
-9188:0:4365
-9189:3:2844
-9190:0:4365
-9191:3:2845
-9192:0:4365
-9193:3:2851
-9194:0:4365
-9195:3:2854
-9196:3:2855
-9197:3:2867
-9198:3:2868
-9199:3:2872
-9200:3:2873
-9201:3:2867
-9202:3:2868
-9203:3:2872
-9204:3:2873
-9205:3:2881
-9206:3:2886
-9207:3:2890
-9208:3:2891
-9209:3:2898
-9210:3:2899
-9211:3:2910
-9212:3:2911
-9213:3:2912
-9214:3:2910
-9215:3:2911
-9216:3:2912
-9217:3:2923
-9218:3:2928
-9219:3:2929
-9220:0:4365
-9221:3:2941
-9222:0:4365
-9223:3:2942
-9224:0:4365
-9225:2:1173
-9226:0:4365
-9227:3:2943
-9228:0:4365
-9229:2:1179
-9230:0:4365
-9231:2:1180
-9232:0:4365
-9233:3:2942
-9234:0:4365
-9235:2:1181
-9236:2:1185
-9237:2:1186
-9238:2:1194
-9239:2:1195
-9240:2:1199
-9241:2:1200
-9242:2:1194
-9243:2:1195
-9244:2:1199
-9245:2:1200
-9246:2:1208
-9247:2:1213
-9248:2:1217
-9249:2:1218
-9250:2:1225
-9251:2:1226
-9252:2:1237
-9253:2:1238
-9254:2:1239
-9255:2:1237
-9256:2:1238
-9257:2:1239
-9258:2:1250
-9259:2:1255
-9260:2:1256
-9261:0:4365
-9262:3:2943
-9263:0:4365
-9264:2:1268
-9265:0:4365
-9266:3:2942
-9267:0:4365
-9268:2:1270
-9269:0:4365
-9270:3:2943
-9271:0:4365
-9272:2:1271
-9273:2:1275
-9274:2:1276
-9275:2:1284
-9276:2:1285
-9277:2:1289
-9278:2:1290
-9279:2:1284
-9280:2:1285
-9281:2:1289
-9282:2:1290
-9283:2:1298
-9284:2:1303
-9285:2:1307
-9286:2:1308
-9287:2:1315
-9288:2:1316
-9289:2:1327
-9290:2:1328
-9291:2:1329
-9292:2:1327
-9293:2:1328
-9294:2:1329
-9295:2:1340
-9296:2:1345
-9297:2:1346
-9298:0:4365
-9299:2:1358
-9300:0:4365
-9301:2:1360
-9302:0:4365
-9303:3:2942
-9304:0:4365
-9305:2:1361
-9306:0:4365
-9307:3:2943
-9308:0:4365
-9309:2:1362
-9310:2:1366
-9311:2:1367
-9312:2:1375
-9313:2:1376
-9314:2:1380
-9315:2:1381
-9316:2:1375
-9317:2:1376
-9318:2:1380
-9319:2:1381
-9320:2:1389
-9321:2:1394
-9322:2:1398
-9323:2:1399
-9324:2:1406
-9325:2:1407
-9326:2:1418
-9327:2:1419
-9328:2:1420
-9329:2:1418
-9330:2:1419
-9331:2:1420
-9332:2:1431
-9333:2:1436
-9334:2:1437
-9335:0:4365
-9336:2:1449
-9337:0:4365
-9338:3:2942
-9339:0:4365
-9340:2:1451
-9341:0:4365
-9342:3:2943
-9343:0:4365
-9344:2:1652
-9345:0:4365
-9346:2:1653
-9347:0:4365
-9348:2:1657
-9349:0:4365
-9350:2:1180
-9351:0:4365
-9352:3:2942
-9353:0:4365
-9354:2:1181
-9355:2:1185
-9356:2:1186
-9357:2:1194
-9358:2:1195
-9359:2:1199
-9360:2:1200
-9361:2:1194
-9362:2:1195
-9363:2:1196
-9364:2:1208
-9365:2:1213
-9366:2:1217
-9367:2:1218
-9368:2:1225
-9369:2:1226
-9370:2:1237
-9371:2:1238
-9372:2:1239
-9373:2:1237
-9374:2:1238
-9375:2:1239
-9376:2:1250
-9377:2:1255
-9378:2:1256
-9379:0:4365
-9380:3:2943
-9381:0:4365
-9382:2:1268
-9383:0:4365
-9384:3:2942
-9385:0:4365
-9386:2:1270
-9387:0:4365
-9388:3:2943
-9389:0:4365
-9390:2:1271
-9391:2:1275
-9392:2:1276
-9393:2:1284
-9394:2:1285
-9395:2:1289
-9396:2:1290
-9397:2:1284
-9398:2:1285
-9399:2:1289
-9400:2:1290
-9401:2:1298
-9402:2:1303
-9403:2:1307
-9404:2:1308
-9405:2:1315
-9406:2:1316
-9407:2:1327
-9408:2:1328
-9409:2:1329
-9410:2:1327
-9411:2:1328
-9412:2:1329
-9413:2:1340
-9414:2:1345
-9415:2:1346
-9416:0:4365
-9417:2:1358
-9418:0:4365
-9419:2:1454
-9420:0:4365
-9421:3:2942
-9422:0:4365
-9423:2:1455
-9424:0:4365
-9425:3:2943
-9426:0:4365
-9427:2:1652
-9428:0:4365
-9429:2:1653
-9430:0:4365
-9431:2:1657
-9432:0:4365
-9433:2:1660
-9434:0:4365
-9435:3:2942
-9436:0:4365
-9437:2:1665
-9438:2:1669
-9439:2:1670
-9440:2:1678
-9441:2:1679
-9442:2:1683
-9443:2:1684
-9444:2:1678
-9445:2:1679
-9446:2:1680
-9447:2:1692
-9448:2:1697
-9449:2:1701
-9450:2:1702
-9451:2:1709
-9452:2:1710
-9453:2:1721
-9454:2:1722
-9455:2:1723
-9456:2:1721
-9457:2:1722
-9458:2:1723
-9459:2:1734
-9460:2:1739
-9461:2:1740
-9462:0:4365
-9463:3:2943
-9464:0:4365
-9465:2:1752
-9466:0:4365
-9467:3:2942
-9468:0:4365
-9469:2:1754
-9470:0:4365
-9471:3:2943
-9472:0:4365
-9473:2:1755
-9474:2:1759
-9475:2:1760
-9476:2:1768
-9477:2:1769
-9478:2:1773
-9479:2:1774
-9480:2:1768
-9481:2:1769
-9482:2:1773
-9483:2:1774
-9484:2:1782
-9485:2:1787
-9486:2:1791
-9487:2:1792
-9488:2:1799
-9489:2:1800
-9490:2:1811
-9491:2:1812
-9492:2:1813
-9493:2:1811
-9494:2:1812
-9495:2:1813
-9496:2:1824
-9497:2:1829
-9498:2:1830
-9499:0:4365
-9500:2:1842
-9501:0:4365
-9502:3:2942
-9503:0:4365
-9504:2:1844
-9505:0:4365
-9506:3:2943
-9507:0:4365
-9508:2:1845
-9509:2:1849
-9510:2:1850
-9511:2:1858
-9512:2:1859
-9513:2:1863
-9514:2:1864
-9515:2:1858
-9516:2:1859
-9517:2:1863
-9518:2:1864
-9519:2:1872
-9520:2:1877
-9521:2:1881
-9522:2:1882
-9523:2:1889
-9524:2:1890
-9525:2:1901
-9526:2:1902
-9527:2:1903
-9528:2:1901
-9529:2:1902
-9530:2:1903
-9531:2:1914
-9532:2:1919
-9533:2:1920
-9534:0:4365
-9535:2:1932
-9536:0:4365
-9537:3:2942
-9538:0:4365
-9539:2:1934
-9540:0:4365
-9541:3:2943
-9542:0:4365
-9543:2:1935
-9544:0:4365
-9545:2:1936
-9546:0:4365
-9547:2:2129
-9548:0:4365
-9549:2:2130
-9550:0:4365
-9551:2:2134
-9552:0:4365
-9553:3:2942
-9554:0:4365
-9555:2:2136
-9556:0:4365
-9557:3:2943
-9558:0:4365
-9559:2:2137
-9560:2:2141
-9561:2:2142
-9562:2:2150
-9563:2:2151
-9564:2:2155
-9565:2:2156
-9566:2:2150
-9567:2:2151
-9568:2:2155
-9569:2:2156
-9570:2:2164
-9571:2:2169
-9572:2:2173
-9573:2:2174
-9574:2:2181
-9575:2:2182
-9576:2:2193
-9577:2:2194
-9578:2:2195
-9579:2:2193
-9580:2:2194
-9581:2:2195
-9582:2:2206
-9583:2:2211
-9584:2:2212
-9585:0:4365
-9586:2:2224
-9587:0:4365
-9588:3:2942
-9589:0:4365
-9590:2:2226
-9591:0:4365
-9592:3:2943
-9593:0:4365
-9594:2:1936
-9595:0:4365
-9596:2:2129
-9597:0:4365
-9598:2:2130
-9599:0:4365
-9600:2:2134
-9601:0:4365
-9602:3:2942
-9603:0:4365
-9604:2:2136
-9605:0:4365
-9606:3:2943
-9607:0:4365
-9608:2:2137
-9609:2:2141
-9610:2:2142
-9611:2:2150
-9612:2:2151
-9613:2:2155
-9614:2:2156
-9615:2:2150
-9616:2:2151
-9617:2:2152
-9618:2:2164
-9619:2:2169
-9620:2:2173
-9621:2:2174
-9622:2:2181
-9623:2:2182
-9624:2:2193
-9625:2:2194
-9626:2:2195
-9627:2:2193
-9628:2:2194
-9629:2:2195
-9630:2:2206
-9631:2:2211
-9632:2:2212
-9633:0:4365
-9634:2:2224
-9635:0:4365
-9636:3:2942
-9637:0:4365
-9638:2:2226
-9639:0:4365
-9640:3:2943
-9641:0:4365
-9642:2:2230
-9643:0:4365
-9644:3:2942
-9645:0:4365
-9646:2:2235
-9647:2:2239
-9648:2:2240
-9649:2:2248
-9650:2:2249
-9651:2:2253
-9652:2:2254
-9653:2:2248
-9654:2:2249
-9655:2:2250
-9656:2:2262
-9657:2:2267
-9658:2:2271
-9659:2:2272
-9660:2:2279
-9661:2:2280
-9662:2:2291
-9663:2:2292
-9664:2:2293
-9665:2:2291
-9666:2:2292
-9667:2:2293
-9668:2:2304
-9669:2:2309
-9670:2:2310
-9671:0:4365
-9672:3:2943
-9673:0:4365
-9674:2:2322
-9675:0:4365
-9676:2:1169
-9677:0:4365
-9678:3:2942
-9679:0:4365
-9680:2:1170
-9681:0:4365
-9682:3:2943
-9683:0:4365
-9684:3:2944
-9685:0:4365
-9686:3:2950
-9687:0:4365
-9688:3:2951
-9689:0:4365
-9690:3:2952
-9691:0:4365
-9692:3:2953
-9693:0:4365
-9694:3:2954
-9695:3:2958
-9696:3:2959
-9697:3:2967
-9698:3:2968
-9699:3:2972
-9700:3:2973
-9701:3:2967
-9702:3:2968
-9703:3:2972
-9704:3:2973
-9705:3:2981
-9706:3:2986
-9707:3:2990
-9708:3:2991
-9709:3:2998
-9710:3:2999
-9711:3:3010
-9712:3:3011
-9713:3:3012
-9714:3:3010
-9715:3:3011
-9716:3:3012
-9717:3:3023
-9718:3:3028
-9719:3:3029
-9720:0:4365
-9721:3:3041
-9722:0:4365
-9723:3:3042
-9724:0:4365
-9725:2:1173
-9726:0:4365
-9727:3:3043
-9728:0:4365
-9729:2:1179
-9730:0:4365
-9731:2:1180
-9732:0:4365
-9733:3:3042
-9734:0:4365
-9735:2:1181
-9736:2:1185
-9737:2:1186
-9738:2:1194
-9739:2:1195
-9740:2:1199
-9741:2:1200
-9742:2:1194
-9743:2:1195
-9744:2:1199
-9745:2:1200
-9746:2:1208
-9747:2:1213
-9748:2:1217
-9749:2:1218
-9750:2:1225
-9751:2:1226
-9752:2:1237
-9753:2:1238
-9754:2:1239
-9755:2:1237
-9756:2:1238
-9757:2:1239
-9758:2:1250
-9759:2:1255
-9760:2:1256
-9761:0:4365
-9762:3:3043
-9763:0:4365
-9764:2:1268
-9765:0:4365
-9766:3:3042
-9767:0:4365
-9768:2:1270
-9769:0:4365
-9770:3:3043
-9771:0:4365
-9772:2:1271
-9773:2:1275
-9774:2:1276
-9775:2:1284
-9776:2:1285
-9777:2:1289
-9778:2:1290
-9779:2:1284
-9780:2:1285
-9781:2:1289
-9782:2:1290
-9783:2:1298
-9784:2:1303
-9785:2:1307
-9786:2:1308
-9787:2:1315
-9788:2:1316
-9789:2:1327
-9790:2:1328
-9791:2:1329
-9792:2:1327
-9793:2:1328
-9794:2:1329
-9795:2:1340
-9796:2:1345
-9797:2:1346
-9798:0:4365
-9799:2:1358
-9800:0:4365
-9801:2:1360
-9802:0:4365
-9803:3:3042
-9804:0:4365
-9805:2:1361
-9806:0:4365
-9807:3:3043
-9808:0:4365
-9809:2:1362
-9810:2:1366
-9811:2:1367
-9812:2:1375
-9813:2:1376
-9814:2:1380
-9815:2:1381
-9816:2:1375
-9817:2:1376
-9818:2:1380
-9819:2:1381
-9820:2:1389
-9821:2:1394
-9822:2:1398
-9823:2:1399
-9824:2:1406
-9825:2:1407
-9826:2:1418
-9827:2:1419
-9828:2:1420
-9829:2:1418
-9830:2:1419
-9831:2:1420
-9832:2:1431
-9833:2:1436
-9834:2:1437
-9835:0:4365
-9836:2:1449
-9837:0:4365
-9838:3:3042
-9839:0:4365
-9840:2:1451
-9841:0:4365
-9842:3:3043
-9843:0:4365
-9844:2:1652
-9845:0:4365
-9846:2:1653
-9847:0:4365
-9848:2:1657
-9849:0:4365
-9850:2:1180
-9851:0:4365
-9852:3:3042
-9853:0:4365
-9854:2:1181
-9855:2:1185
-9856:2:1186
-9857:2:1194
-9858:2:1195
-9859:2:1199
-9860:2:1200
-9861:2:1194
-9862:2:1195
-9863:2:1196
-9864:2:1208
-9865:2:1213
-9866:2:1217
-9867:2:1218
-9868:2:1225
-9869:2:1226
-9870:2:1237
-9871:2:1238
-9872:2:1239
-9873:2:1237
-9874:2:1238
-9875:2:1239
-9876:2:1250
-9877:2:1255
-9878:2:1256
-9879:0:4365
-9880:3:3043
-9881:0:4365
-9882:2:1268
-9883:0:4365
-9884:3:3042
-9885:0:4365
-9886:2:1270
-9887:0:4365
-9888:3:3043
-9889:0:4365
-9890:2:1271
-9891:2:1275
-9892:2:1276
-9893:2:1284
-9894:2:1285
-9895:2:1289
-9896:2:1290
-9897:2:1284
-9898:2:1285
-9899:2:1289
-9900:2:1290
-9901:2:1298
-9902:2:1303
-9903:2:1307
-9904:2:1308
-9905:2:1315
-9906:2:1316
-9907:2:1327
-9908:2:1328
-9909:2:1329
-9910:2:1327
-9911:2:1328
-9912:2:1329
-9913:2:1340
-9914:2:1345
-9915:2:1346
-9916:0:4365
-9917:2:1358
-9918:0:4365
-9919:2:1454
-9920:0:4365
-9921:3:3042
-9922:0:4365
-9923:2:1455
-9924:0:4365
-9925:3:3043
-9926:0:4365
-9927:2:1652
-9928:0:4365
-9929:2:1653
-9930:0:4365
-9931:2:1657
-9932:0:4365
-9933:2:1660
-9934:0:4365
-9935:3:3042
-9936:0:4365
-9937:2:1665
-9938:2:1669
-9939:2:1670
-9940:2:1678
-9941:2:1679
-9942:2:1683
-9943:2:1684
-9944:2:1678
-9945:2:1679
-9946:2:1680
-9947:2:1692
-9948:2:1697
-9949:2:1701
-9950:2:1702
-9951:2:1709
-9952:2:1710
-9953:2:1721
-9954:2:1722
-9955:2:1723
-9956:2:1721
-9957:2:1722
-9958:2:1723
-9959:2:1734
-9960:2:1739
-9961:2:1740
-9962:0:4365
-9963:3:3043
-9964:0:4365
-9965:2:1752
-9966:0:4365
-9967:3:3042
-9968:0:4365
-9969:2:1754
-9970:0:4365
-9971:3:3043
-9972:0:4365
-9973:2:1755
-9974:2:1759
-9975:2:1760
-9976:2:1768
-9977:2:1769
-9978:2:1773
-9979:2:1774
-9980:2:1768
-9981:2:1769
-9982:2:1773
-9983:2:1774
-9984:2:1782
-9985:2:1787
-9986:2:1791
-9987:2:1792
-9988:2:1799
-9989:2:1800
-9990:2:1811
-9991:2:1812
-9992:2:1813
-9993:2:1811
-9994:2:1812
-9995:2:1813
-9996:2:1824
-9997:2:1829
-9998:2:1830
-9999:0:4365
-10000:2:1842
-10001:0:4365
-10002:3:3042
-10003:0:4365
-10004:2:1844
-10005:0:4365
-10006:3:3043
-10007:0:4365
-10008:2:1845
-10009:2:1849
-10010:2:1850
-10011:2:1858
-10012:2:1859
-10013:2:1863
-10014:2:1864
-10015:2:1858
-10016:2:1859
-10017:2:1863
-10018:2:1864
-10019:2:1872
-10020:2:1877
-10021:2:1881
-10022:2:1882
-10023:2:1889
-10024:2:1890
-10025:2:1901
-10026:2:1902
-10027:2:1903
-10028:2:1901
-10029:2:1902
-10030:2:1903
-10031:2:1914
-10032:2:1919
-10033:2:1920
-10034:0:4365
-10035:2:1932
-10036:0:4365
-10037:3:3042
-10038:0:4365
-10039:2:1934
-10040:0:4365
-10041:3:3043
-10042:0:4365
-10043:2:1935
-10044:0:4365
-10045:2:1936
-10046:0:4365
-10047:2:2129
-10048:0:4365
-10049:2:2130
-10050:0:4365
-10051:2:2134
-10052:0:4365
-10053:3:3042
-10054:0:4365
-10055:2:2136
-10056:0:4365
-10057:3:3043
-10058:0:4365
-10059:2:2137
-10060:2:2141
-10061:2:2142
-10062:2:2150
-10063:2:2151
-10064:2:2155
-10065:2:2156
-10066:2:2150
-10067:2:2151
-10068:2:2155
-10069:2:2156
-10070:2:2164
-10071:2:2169
-10072:2:2173
-10073:2:2174
-10074:2:2181
-10075:2:2182
-10076:2:2193
-10077:2:2194
-10078:2:2195
-10079:2:2193
-10080:2:2194
-10081:2:2195
-10082:2:2206
-10083:2:2211
-10084:2:2212
-10085:0:4365
-10086:2:2224
-10087:0:4365
-10088:3:3042
-10089:0:4365
-10090:2:2226
-10091:0:4365
-10092:3:3043
-10093:0:4365
-10094:2:1936
-10095:0:4365
-10096:2:2129
-10097:0:4365
-10098:2:2130
-10099:0:4365
-10100:2:2134
-10101:0:4365
-10102:3:3042
-10103:0:4365
-10104:2:2136
-10105:0:4365
-10106:3:3043
-10107:0:4365
-10108:2:2137
-10109:2:2141
-10110:2:2142
-10111:2:2150
-10112:2:2151
-10113:2:2155
-10114:2:2156
-10115:2:2150
-10116:2:2151
-10117:2:2152
-10118:2:2164
-10119:2:2169
-10120:2:2173
-10121:2:2174
-10122:2:2181
-10123:2:2182
-10124:2:2193
-10125:2:2194
-10126:2:2195
-10127:2:2193
-10128:2:2194
-10129:2:2195
-10130:2:2206
-10131:2:2211
-10132:2:2212
-10133:0:4365
-10134:2:2224
-10135:0:4365
-10136:3:3042
-10137:0:4365
-10138:2:2226
-10139:0:4365
-10140:3:3043
-10141:0:4365
-10142:2:2230
-10143:0:4365
-10144:3:3042
-10145:0:4365
-10146:2:2235
-10147:2:2239
-10148:2:2240
-10149:2:2248
-10150:2:2249
-10151:2:2253
-10152:2:2254
-10153:2:2248
-10154:2:2249
-10155:2:2250
-10156:2:2262
-10157:2:2267
-10158:2:2271
-10159:2:2272
-10160:2:2279
-10161:2:2280
-10162:2:2291
-10163:2:2292
-10164:2:2293
-10165:2:2291
-10166:2:2292
-10167:2:2293
-10168:2:2304
-10169:2:2309
-10170:2:2310
-10171:0:4365
-10172:3:3043
-10173:0:4365
-10174:2:2322
-10175:0:4365
-10176:2:1169
-10177:0:4365
-10178:3:3042
-10179:0:4365
-10180:2:1170
-10181:0:4365
-10182:3:3043
-10183:0:4365
-10184:3:3044
-10185:0:4365
-10186:3:3257
-10187:0:4365
-10188:3:3265
-10189:0:4365
-10190:3:3266
-10191:3:3270
-10192:3:3271
-10193:3:3279
-10194:3:3280
-10195:3:3284
-10196:3:3285
-10197:3:3279
-10198:3:3280
-10199:3:3284
-10200:3:3285
-10201:3:3293
-10202:3:3298
-10203:3:3302
-10204:3:3303
-10205:3:3310
-10206:3:3311
-10207:3:3322
-10208:3:3323
-10209:3:3324
-10210:3:3322
-10211:3:3323
-10212:3:3324
-10213:3:3335
-10214:3:3340
-10215:3:3341
-10216:0:4365
-10217:3:3353
-10218:0:4365
-10219:3:3354
-10220:0:4365
-10221:2:1173
-10222:0:4365
-10223:3:3355
-10224:0:4365
-10225:2:1179
-10226:0:4365
-10227:2:1180
-10228:0:4365
-10229:3:3354
-10230:0:4365
-10231:2:1181
-10232:2:1185
-10233:2:1186
-10234:2:1194
-10235:2:1195
-10236:2:1199
-10237:2:1200
-10238:2:1194
-10239:2:1195
-10240:2:1199
-10241:2:1200
-10242:2:1208
-10243:2:1213
-10244:2:1217
-10245:2:1218
-10246:2:1225
-10247:2:1226
-10248:2:1237
-10249:2:1238
-10250:2:1239
-10251:2:1237
-10252:2:1238
-10253:2:1239
-10254:2:1250
-10255:2:1255
-10256:2:1256
-10257:0:4365
-10258:3:3355
-10259:0:4365
-10260:2:1268
-10261:0:4365
-10262:3:3354
-10263:0:4365
-10264:2:1270
-10265:0:4365
-10266:3:3355
-10267:0:4365
-10268:2:1271
-10269:2:1275
-10270:2:1276
-10271:2:1284
-10272:2:1285
-10273:2:1289
-10274:2:1290
-10275:2:1284
-10276:2:1285
-10277:2:1289
-10278:2:1290
-10279:2:1298
-10280:2:1303
-10281:2:1307
-10282:2:1308
-10283:2:1315
-10284:2:1316
-10285:2:1327
-10286:2:1328
-10287:2:1329
-10288:2:1327
-10289:2:1328
-10290:2:1329
-10291:2:1340
-10292:2:1345
-10293:2:1346
-10294:0:4365
-10295:2:1358
-10296:0:4365
-10297:2:1360
-10298:0:4365
-10299:3:3354
-10300:0:4365
-10301:2:1361
-10302:0:4365
-10303:3:3355
-10304:0:4365
-10305:2:1362
-10306:2:1366
-10307:2:1367
-10308:2:1375
-10309:2:1376
-10310:2:1380
-10311:2:1381
-10312:2:1375
-10313:2:1376
-10314:2:1380
-10315:2:1381
-10316:2:1389
-10317:2:1394
-10318:2:1398
-10319:2:1399
-10320:2:1406
-10321:2:1407
-10322:2:1418
-10323:2:1419
-10324:2:1420
-10325:2:1418
-10326:2:1419
-10327:2:1420
-10328:2:1431
-10329:2:1436
-10330:2:1437
-10331:0:4365
-10332:2:1449
-10333:0:4365
-10334:3:3354
-10335:0:4365
-10336:2:1451
-10337:0:4365
-10338:3:3355
-10339:0:4365
-10340:2:1652
-10341:0:4365
-10342:2:1653
-10343:0:4365
-10344:2:1657
-10345:0:4365
-10346:2:1180
-10347:0:4365
-10348:3:3354
-10349:0:4365
-10350:2:1181
-10351:2:1185
-10352:2:1186
-10353:2:1194
-10354:2:1195
-10355:2:1199
-10356:2:1200
-10357:2:1194
-10358:2:1195
-10359:2:1196
-10360:2:1208
-10361:2:1213
-10362:2:1217
-10363:2:1218
-10364:2:1225
-10365:2:1226
-10366:2:1237
-10367:2:1238
-10368:2:1239
-10369:2:1237
-10370:2:1238
-10371:2:1239
-10372:2:1250
-10373:2:1255
-10374:2:1256
-10375:0:4365
-10376:3:3355
-10377:0:4365
-10378:2:1268
-10379:0:4365
-10380:3:3354
-10381:0:4365
-10382:2:1270
-10383:0:4365
-10384:3:3355
-10385:0:4365
-10386:2:1271
-10387:2:1275
-10388:2:1276
-10389:2:1284
-10390:2:1285
-10391:2:1289
-10392:2:1290
-10393:2:1284
-10394:2:1285
-10395:2:1289
-10396:2:1290
-10397:2:1298
-10398:2:1303
-10399:2:1307
-10400:2:1308
-10401:2:1315
-10402:2:1316
-10403:2:1327
-10404:2:1328
-10405:2:1329
-10406:2:1327
-10407:2:1328
-10408:2:1329
-10409:2:1340
-10410:2:1345
-10411:2:1346
-10412:0:4365
-10413:2:1358
-10414:0:4365
-10415:2:1454
-10416:0:4365
-10417:3:3354
-10418:0:4365
-10419:2:1455
-10420:0:4365
-10421:3:3355
-10422:0:4365
-10423:2:1652
-10424:0:4365
-10425:2:1653
-10426:0:4365
-10427:2:1657
-10428:0:4365
-10429:2:1660
-10430:0:4365
-10431:3:3354
-10432:0:4365
-10433:2:1665
-10434:2:1669
-10435:2:1670
-10436:2:1678
-10437:2:1679
-10438:2:1683
-10439:2:1684
-10440:2:1678
-10441:2:1679
-10442:2:1680
-10443:2:1692
-10444:2:1697
-10445:2:1701
-10446:2:1702
-10447:2:1709
-10448:2:1710
-10449:2:1721
-10450:2:1722
-10451:2:1723
-10452:2:1721
-10453:2:1722
-10454:2:1723
-10455:2:1734
-10456:2:1739
-10457:2:1740
-10458:0:4365
-10459:3:3355
-10460:0:4365
-10461:2:1752
-10462:0:4365
-10463:3:3354
-10464:0:4365
-10465:2:1754
-10466:0:4365
-10467:3:3355
-10468:0:4365
-10469:2:1755
-10470:2:1759
-10471:2:1760
-10472:2:1768
-10473:2:1769
-10474:2:1773
-10475:2:1774
-10476:2:1768
-10477:2:1769
-10478:2:1773
-10479:2:1774
-10480:2:1782
-10481:2:1787
-10482:2:1791
-10483:2:1792
-10484:2:1799
-10485:2:1800
-10486:2:1811
-10487:2:1812
-10488:2:1813
-10489:2:1811
-10490:2:1812
-10491:2:1813
-10492:2:1824
-10493:2:1829
-10494:2:1830
-10495:0:4365
-10496:2:1842
-10497:0:4365
-10498:3:3354
-10499:0:4365
-10500:2:1844
-10501:0:4365
-10502:3:3355
-10503:0:4365
-10504:2:1845
-10505:2:1849
-10506:2:1850
-10507:2:1858
-10508:2:1859
-10509:2:1863
-10510:2:1864
-10511:2:1858
-10512:2:1859
-10513:2:1863
-10514:2:1864
-10515:2:1872
-10516:2:1877
-10517:2:1881
-10518:2:1882
-10519:2:1889
-10520:2:1890
-10521:2:1901
-10522:2:1902
-10523:2:1903
-10524:2:1901
-10525:2:1902
-10526:2:1903
-10527:2:1914
-10528:2:1919
-10529:2:1920
-10530:0:4365
-10531:2:1932
-10532:0:4365
-10533:3:3354
-10534:0:4365
-10535:2:1934
-10536:0:4365
-10537:3:3355
-10538:0:4365
-10539:2:1935
-10540:0:4365
-10541:2:1936
-10542:0:4365
-10543:2:2129
-10544:0:4365
-10545:2:2130
-10546:0:4365
-10547:2:2134
-10548:0:4365
-10549:3:3354
-10550:0:4365
-10551:2:2136
-10552:0:4365
-10553:3:3355
-10554:0:4365
-10555:2:2137
-10556:2:2141
-10557:2:2142
-10558:2:2150
-10559:2:2151
-10560:2:2155
-10561:2:2156
-10562:2:2150
-10563:2:2151
-10564:2:2155
-10565:2:2156
-10566:2:2164
-10567:2:2169
-10568:2:2173
-10569:2:2174
-10570:2:2181
-10571:2:2182
-10572:2:2193
-10573:2:2194
-10574:2:2195
-10575:2:2193
-10576:2:2194
-10577:2:2195
-10578:2:2206
-10579:2:2211
-10580:2:2212
-10581:0:4365
-10582:2:2224
-10583:0:4365
-10584:3:3354
-10585:0:4365
-10586:2:2226
-10587:0:4365
-10588:3:3355
-10589:0:4365
-10590:2:1936
-10591:0:4365
-10592:2:2129
-10593:0:4365
-10594:2:2130
-10595:0:4365
-10596:2:2134
-10597:0:4365
-10598:3:3354
-10599:0:4365
-10600:2:2136
-10601:0:4365
-10602:3:3355
-10603:0:4365
-10604:2:2137
-10605:2:2141
-10606:2:2142
-10607:2:2150
-10608:2:2151
-10609:2:2155
-10610:2:2156
-10611:2:2150
-10612:2:2151
-10613:2:2152
-10614:2:2164
-10615:2:2169
-10616:2:2173
-10617:2:2174
-10618:2:2181
-10619:2:2182
-10620:2:2193
-10621:2:2194
-10622:2:2195
-10623:2:2193
-10624:2:2194
-10625:2:2195
-10626:2:2206
-10627:2:2211
-10628:2:2212
-10629:0:4365
-10630:2:2224
-10631:0:4365
-10632:3:3354
-10633:0:4365
-10634:2:2226
-10635:0:4365
-10636:3:3355
-10637:0:4365
-10638:2:2230
-10639:0:4365
-10640:3:3354
-10641:0:4365
-10642:2:2235
-10643:2:2239
-10644:2:2240
-10645:2:2248
-10646:2:2249
-10647:2:2253
-10648:2:2254
-10649:2:2248
-10650:2:2249
-10651:2:2250
-10652:2:2262
-10653:2:2267
-10654:2:2271
-10655:2:2272
-10656:2:2279
-10657:2:2280
-10658:2:2291
-10659:2:2292
-10660:2:2293
-10661:2:2291
-10662:2:2292
-10663:2:2293
-10664:2:2304
-10665:2:2309
-10666:2:2310
-10667:0:4365
-10668:3:3355
-10669:0:4365
-10670:2:2322
-10671:0:4365
-10672:2:1169
-10673:0:4365
-10674:3:3354
-10675:0:4365
-10676:2:1170
-10677:0:4365
-10678:3:3355
-10679:0:4365
-10680:3:3356
-10681:0:4365
-10682:3:3366
-10683:0:4365
-10684:3:2951
-10685:0:4365
-10686:3:2952
-10687:0:4365
-10688:3:2953
-10689:0:4365
-10690:3:2954
-10691:3:2958
-10692:3:2959
-10693:3:2967
-10694:3:2968
-10695:3:2972
-10696:3:2973
-10697:3:2967
-10698:3:2968
-10699:3:2972
-10700:3:2973
-10701:3:2981
-10702:3:2986
-10703:3:2990
-10704:3:2991
-10705:3:2998
-10706:3:2999
-10707:3:3010
-10708:3:3011
-10709:3:3012
-10710:3:3010
-10711:3:3011
-10712:3:3012
-10713:3:3023
-10714:3:3028
-10715:3:3029
-10716:0:4365
-10717:3:3041
-10718:0:4365
-10719:3:3042
-10720:0:4365
-10721:2:1173
-10722:0:4365
-10723:3:3043
-10724:0:4365
-10725:2:1179
-10726:0:4365
-10727:2:1180
-10728:0:4365
-10729:3:3042
-10730:0:4365
-10731:2:1181
-10732:2:1185
-10733:2:1186
-10734:2:1194
-10735:2:1195
-10736:2:1199
-10737:2:1200
-10738:2:1194
-10739:2:1195
-10740:2:1199
-10741:2:1200
-10742:2:1208
-10743:2:1213
-10744:2:1217
-10745:2:1218
-10746:2:1225
-10747:2:1226
-10748:2:1237
-10749:2:1238
-10750:2:1239
-10751:2:1237
-10752:2:1238
-10753:2:1239
-10754:2:1250
-10755:2:1255
-10756:2:1256
-10757:0:4365
-10758:3:3043
-10759:0:4365
-10760:2:1268
-10761:0:4365
-10762:3:3042
-10763:0:4365
-10764:2:1270
-10765:0:4365
-10766:3:3043
-10767:0:4365
-10768:2:1271
-10769:2:1275
-10770:2:1276
-10771:2:1284
-10772:2:1285
-10773:2:1289
-10774:2:1290
-10775:2:1284
-10776:2:1285
-10777:2:1289
-10778:2:1290
-10779:2:1298
-10780:2:1303
-10781:2:1307
-10782:2:1308
-10783:2:1315
-10784:2:1316
-10785:2:1327
-10786:2:1328
-10787:2:1329
-10788:2:1327
-10789:2:1328
-10790:2:1329
-10791:2:1340
-10792:2:1345
-10793:2:1346
-10794:0:4365
-10795:2:1358
-10796:0:4365
-10797:2:1360
-10798:0:4365
-10799:3:3042
-10800:0:4365
-10801:2:1361
-10802:0:4365
-10803:3:3043
-10804:0:4365
-10805:2:1362
-10806:2:1366
-10807:2:1367
-10808:2:1375
-10809:2:1376
-10810:2:1380
-10811:2:1381
-10812:2:1375
-10813:2:1376
-10814:2:1380
-10815:2:1381
-10816:2:1389
-10817:2:1394
-10818:2:1398
-10819:2:1399
-10820:2:1406
-10821:2:1407
-10822:2:1418
-10823:2:1419
-10824:2:1420
-10825:2:1418
-10826:2:1419
-10827:2:1420
-10828:2:1431
-10829:2:1436
-10830:2:1437
-10831:0:4365
-10832:2:1449
-10833:0:4365
-10834:3:3042
-10835:0:4365
-10836:2:1451
-10837:0:4365
-10838:3:3043
-10839:0:4365
-10840:2:1652
-10841:0:4365
-10842:2:1653
-10843:0:4365
-10844:2:1657
-10845:0:4365
-10846:2:1180
-10847:0:4365
-10848:3:3042
-10849:0:4365
-10850:2:1181
-10851:2:1185
-10852:2:1186
-10853:2:1194
-10854:2:1195
-10855:2:1199
-10856:2:1200
-10857:2:1194
-10858:2:1195
-10859:2:1196
-10860:2:1208
-10861:2:1213
-10862:2:1217
-10863:2:1218
-10864:2:1225
-10865:2:1226
-10866:2:1237
-10867:2:1238
-10868:2:1239
-10869:2:1237
-10870:2:1238
-10871:2:1239
-10872:2:1250
-10873:2:1255
-10874:2:1256
-10875:0:4365
-10876:3:3043
-10877:0:4365
-10878:2:1268
-10879:0:4365
-10880:3:3042
-10881:0:4365
-10882:2:1270
-10883:0:4365
-10884:3:3043
-10885:0:4365
-10886:2:1271
-10887:2:1275
-10888:2:1276
-10889:2:1284
-10890:2:1285
-10891:2:1289
-10892:2:1290
-10893:2:1284
-10894:2:1285
-10895:2:1289
-10896:2:1290
-10897:2:1298
-10898:2:1303
-10899:2:1307
-10900:2:1308
-10901:2:1315
-10902:2:1316
-10903:2:1327
-10904:2:1328
-10905:2:1329
-10906:2:1327
-10907:2:1328
-10908:2:1329
-10909:2:1340
-10910:2:1345
-10911:2:1346
-10912:0:4365
-10913:2:1358
-10914:0:4365
-10915:2:1454
-10916:0:4365
-10917:3:3042
-10918:0:4365
-10919:2:1455
-10920:0:4365
-10921:3:3043
-10922:0:4365
-10923:2:1652
-10924:0:4365
-10925:2:1653
-10926:0:4365
-10927:2:1657
-10928:0:4365
-10929:2:1660
-10930:0:4365
-10931:3:3042
-10932:0:4365
-10933:2:1665
-10934:2:1669
-10935:2:1670
-10936:2:1678
-10937:2:1679
-10938:2:1683
-10939:2:1684
-10940:2:1678
-10941:2:1679
-10942:2:1680
-10943:2:1692
-10944:2:1697
-10945:2:1701
-10946:2:1702
-10947:2:1709
-10948:2:1710
-10949:2:1721
-10950:2:1722
-10951:2:1723
-10952:2:1721
-10953:2:1722
-10954:2:1723
-10955:2:1734
-10956:2:1739
-10957:2:1740
-10958:0:4365
-10959:3:3043
-10960:0:4365
-10961:2:1752
-10962:0:4365
-10963:3:3042
-10964:0:4365
-10965:2:1754
-10966:0:4365
-10967:3:3043
-10968:0:4365
-10969:2:1755
-10970:2:1759
-10971:2:1760
-10972:2:1768
-10973:2:1769
-10974:2:1773
-10975:2:1774
-10976:2:1768
-10977:2:1769
-10978:2:1773
-10979:2:1774
-10980:2:1782
-10981:2:1787
-10982:2:1791
-10983:2:1792
-10984:2:1799
-10985:2:1800
-10986:2:1811
-10987:2:1812
-10988:2:1813
-10989:2:1811
-10990:2:1812
-10991:2:1813
-10992:2:1824
-10993:2:1829
-10994:2:1830
-10995:0:4365
-10996:2:1842
-10997:0:4365
-10998:3:3042
-10999:0:4365
-11000:2:1844
-11001:0:4365
-11002:3:3043
-11003:0:4365
-11004:2:1845
-11005:2:1849
-11006:2:1850
-11007:2:1858
-11008:2:1859
-11009:2:1863
-11010:2:1864
-11011:2:1858
-11012:2:1859
-11013:2:1863
-11014:2:1864
-11015:2:1872
-11016:2:1877
-11017:2:1881
-11018:2:1882
-11019:2:1889
-11020:2:1890
-11021:2:1901
-11022:2:1902
-11023:2:1903
-11024:2:1901
-11025:2:1902
-11026:2:1903
-11027:2:1914
-11028:2:1919
-11029:2:1920
-11030:0:4365
-11031:2:1932
-11032:0:4365
-11033:3:3042
-11034:0:4365
-11035:2:1934
-11036:0:4365
-11037:3:3043
-11038:0:4365
-11039:2:1935
-11040:0:4365
-11041:2:1936
-11042:0:4365
-11043:2:2129
-11044:0:4365
-11045:2:2130
-11046:0:4365
-11047:2:2134
-11048:0:4365
-11049:3:3042
-11050:0:4365
-11051:2:2136
-11052:0:4365
-11053:3:3043
-11054:0:4365
-11055:2:2137
-11056:2:2141
-11057:2:2142
-11058:2:2150
-11059:2:2151
-11060:2:2155
-11061:2:2156
-11062:2:2150
-11063:2:2151
-11064:2:2155
-11065:2:2156
-11066:2:2164
-11067:2:2169
-11068:2:2173
-11069:2:2174
-11070:2:2181
-11071:2:2182
-11072:2:2193
-11073:2:2194
-11074:2:2195
-11075:2:2193
-11076:2:2194
-11077:2:2195
-11078:2:2206
-11079:2:2211
-11080:2:2212
-11081:0:4365
-11082:2:2224
-11083:0:4365
-11084:3:3042
-11085:0:4365
-11086:2:2226
-11087:0:4365
-11088:3:3043
-11089:0:4365
-11090:2:1936
-11091:0:4365
-11092:2:2129
-11093:0:4365
-11094:2:2130
-11095:0:4365
-11096:2:2134
-11097:0:4365
-11098:3:3042
-11099:0:4365
-11100:2:2136
-11101:0:4365
-11102:3:3043
-11103:0:4365
-11104:2:2137
-11105:2:2141
-11106:2:2142
-11107:2:2150
-11108:2:2151
-11109:2:2155
-11110:2:2156
-11111:2:2150
-11112:2:2151
-11113:2:2152
-11114:2:2164
-11115:2:2169
-11116:2:2173
-11117:2:2174
-11118:2:2181
-11119:2:2182
-11120:2:2193
-11121:2:2194
-11122:2:2195
-11123:2:2193
-11124:2:2194
-11125:2:2195
-11126:2:2206
-11127:2:2211
-11128:2:2212
-11129:0:4365
-11130:2:2224
-11131:0:4365
-11132:3:3042
-11133:0:4365
-11134:2:2226
-11135:0:4365
-11136:3:3043
-11137:0:4365
-11138:2:2230
-11139:0:4365
-11140:3:3042
-11141:0:4365
-11142:2:2235
-11143:2:2239
-11144:2:2240
-11145:2:2248
-11146:2:2249
-11147:2:2253
-11148:2:2254
-11149:2:2248
-11150:2:2249
-11151:2:2250
-11152:2:2262
-11153:2:2267
-11154:2:2271
-11155:2:2272
-11156:2:2279
-11157:2:2280
-11158:2:2291
-11159:2:2292
-11160:2:2293
-11161:2:2291
-11162:2:2292
-11163:2:2293
-11164:2:2304
-11165:2:2309
-11166:2:2310
-11167:0:4365
-11168:3:3043
-11169:0:4365
-11170:2:2322
-11171:0:4365
-11172:2:1169
-11173:0:4365
-11174:3:3042
-11175:0:4365
-11176:2:1170
-11177:0:4365
-11178:3:3043
-11179:0:4365
-11180:3:3044
-11181:0:4365
-11182:3:3257
-11183:0:4365
-11184:3:3362
-11185:0:4365
-11186:3:3363
-11187:0:4365
-11188:3:3367
-11189:0:4365
-11190:3:3373
-11191:3:3377
-11192:3:3378
-11193:3:3386
-11194:3:3387
-11195:3:3391
-11196:3:3392
-11197:3:3386
-11198:3:3387
-11199:3:3391
-11200:3:3392
-11201:3:3400
-11202:3:3405
-11203:3:3409
-11204:3:3410
-11205:3:3417
-11206:3:3418
-11207:3:3429
-11208:3:3430
-11209:3:3431
-11210:3:3429
-11211:3:3430
-11212:3:3431
-11213:3:3442
-11214:3:3447
-11215:3:3448
-11216:0:4365
-11217:3:3460
-11218:0:4365
-11219:3:3461
-11220:0:4365
-11221:2:1173
-11222:0:4365
-11223:3:3462
-11224:0:4365
-11225:2:1179
-11226:0:4365
-11227:2:1180
-11228:0:4365
-11229:3:3461
-11230:0:4365
-11231:2:1181
-11232:2:1185
-11233:2:1186
-11234:2:1194
-11235:2:1195
-11236:2:1199
-11237:2:1200
-11238:2:1194
-11239:2:1195
-11240:2:1199
-11241:2:1200
-11242:2:1208
-11243:2:1213
-11244:2:1217
-11245:2:1218
-11246:2:1225
-11247:2:1226
-11248:2:1237
-11249:2:1238
-11250:2:1239
-11251:2:1237
-11252:2:1238
-11253:2:1239
-11254:2:1250
-11255:2:1255
-11256:2:1256
-11257:0:4365
-11258:3:3462
-11259:0:4365
-11260:2:1268
-11261:0:4365
-11262:3:3461
-11263:0:4365
-11264:2:1270
-11265:0:4365
-11266:3:3462
-11267:0:4365
-11268:2:1271
-11269:2:1275
-11270:2:1276
-11271:2:1284
-11272:2:1285
-11273:2:1289
-11274:2:1290
-11275:2:1284
-11276:2:1285
-11277:2:1289
-11278:2:1290
-11279:2:1298
-11280:2:1303
-11281:2:1307
-11282:2:1308
-11283:2:1315
-11284:2:1316
-11285:2:1327
-11286:2:1328
-11287:2:1329
-11288:2:1327
-11289:2:1328
-11290:2:1329
-11291:2:1340
-11292:2:1345
-11293:2:1346
-11294:0:4365
-11295:2:1358
-11296:0:4365
-11297:2:1360
-11298:0:4365
-11299:3:3461
-11300:0:4365
-11301:2:1361
-11302:0:4365
-11303:3:3462
-11304:0:4365
-11305:2:1362
-11306:2:1366
-11307:2:1367
-11308:2:1375
-11309:2:1376
-11310:2:1380
-11311:2:1381
-11312:2:1375
-11313:2:1376
-11314:2:1380
-11315:2:1381
-11316:2:1389
-11317:2:1394
-11318:2:1398
-11319:2:1399
-11320:2:1406
-11321:2:1407
-11322:2:1418
-11323:2:1419
-11324:2:1420
-11325:2:1418
-11326:2:1419
-11327:2:1420
-11328:2:1431
-11329:2:1436
-11330:2:1437
-11331:0:4365
-11332:2:1449
-11333:0:4365
-11334:3:3461
-11335:0:4365
-11336:2:1451
-11337:0:4365
-11338:3:3462
-11339:0:4365
-11340:2:1652
-11341:0:4365
-11342:2:1653
-11343:0:4365
-11344:2:1657
-11345:0:4365
-11346:2:1180
-11347:0:4365
-11348:3:3461
-11349:0:4365
-11350:2:1181
-11351:2:1185
-11352:2:1186
-11353:2:1194
-11354:2:1195
-11355:2:1199
-11356:2:1200
-11357:2:1194
-11358:2:1195
-11359:2:1196
-11360:2:1208
-11361:2:1213
-11362:2:1217
-11363:2:1218
-11364:2:1225
-11365:2:1226
-11366:2:1237
-11367:2:1238
-11368:2:1239
-11369:2:1237
-11370:2:1238
-11371:2:1239
-11372:2:1250
-11373:2:1255
-11374:2:1256
-11375:0:4365
-11376:3:3462
-11377:0:4365
-11378:2:1268
-11379:0:4365
-11380:3:3461
-11381:0:4365
-11382:2:1270
-11383:0:4365
-11384:3:3462
-11385:0:4365
-11386:2:1271
-11387:2:1275
-11388:2:1276
-11389:2:1284
-11390:2:1285
-11391:2:1289
-11392:2:1290
-11393:2:1284
-11394:2:1285
-11395:2:1289
-11396:2:1290
-11397:2:1298
-11398:2:1303
-11399:2:1307
-11400:2:1308
-11401:2:1315
-11402:2:1316
-11403:2:1327
-11404:2:1328
-11405:2:1329
-11406:2:1327
-11407:2:1328
-11408:2:1329
-11409:2:1340
-11410:2:1345
-11411:2:1346
-11412:0:4365
-11413:2:1358
-11414:0:4365
-11415:2:1454
-11416:0:4365
-11417:3:3461
-11418:0:4365
-11419:2:1455
-11420:0:4365
-11421:3:3462
-11422:0:4365
-11423:2:1652
-11424:0:4365
-11425:2:1653
-11426:0:4365
-11427:2:1657
-11428:0:4365
-11429:2:1660
-11430:0:4365
-11431:3:3461
-11432:0:4365
-11433:2:1665
-11434:2:1669
-11435:2:1670
-11436:2:1678
-11437:2:1679
-11438:2:1683
-11439:2:1684
-11440:2:1678
-11441:2:1679
-11442:2:1680
-11443:2:1692
-11444:2:1697
-11445:2:1701
-11446:2:1702
-11447:2:1709
-11448:2:1710
-11449:2:1721
-11450:2:1722
-11451:2:1723
-11452:2:1721
-11453:2:1722
-11454:2:1723
-11455:2:1734
-11456:2:1739
-11457:2:1740
-11458:0:4365
-11459:3:3462
-11460:0:4365
-11461:2:1752
-11462:0:4365
-11463:3:3461
-11464:0:4365
-11465:2:1754
-11466:0:4365
-11467:3:3462
-11468:0:4365
-11469:2:1755
-11470:2:1759
-11471:2:1760
-11472:2:1768
-11473:2:1769
-11474:2:1773
-11475:2:1774
-11476:2:1768
-11477:2:1769
-11478:2:1773
-11479:2:1774
-11480:2:1782
-11481:2:1787
-11482:2:1791
-11483:2:1792
-11484:2:1799
-11485:2:1800
-11486:2:1811
-11487:2:1812
-11488:2:1813
-11489:2:1811
-11490:2:1812
-11491:2:1813
-11492:2:1824
-11493:2:1829
-11494:2:1830
-11495:0:4365
-11496:2:1842
-11497:0:4365
-11498:3:3461
-11499:0:4365
-11500:2:1844
-11501:0:4365
-11502:3:3462
-11503:0:4365
-11504:2:1845
-11505:2:1849
-11506:2:1850
-11507:2:1858
-11508:2:1859
-11509:2:1863
-11510:2:1864
-11511:2:1858
-11512:2:1859
-11513:2:1863
-11514:2:1864
-11515:2:1872
-11516:2:1877
-11517:2:1881
-11518:2:1882
-11519:2:1889
-11520:2:1890
-11521:2:1901
-11522:2:1902
-11523:2:1903
-11524:2:1901
-11525:2:1902
-11526:2:1903
-11527:2:1914
-11528:2:1919
-11529:2:1920
-11530:0:4365
-11531:2:1932
-11532:0:4365
-11533:3:3461
-11534:0:4365
-11535:2:1934
-11536:0:4365
-11537:3:3462
-11538:0:4365
-11539:2:1935
-11540:0:4365
-11541:2:1936
-11542:0:4365
-11543:2:2129
-11544:0:4365
-11545:2:2130
-11546:0:4365
-11547:2:2134
-11548:0:4365
-11549:3:3461
-11550:0:4365
-11551:2:2136
-11552:0:4365
-11553:3:3462
-11554:0:4365
-11555:2:2137
-11556:2:2141
-11557:2:2142
-11558:2:2150
-11559:2:2151
-11560:2:2155
-11561:2:2156
-11562:2:2150
-11563:2:2151
-11564:2:2155
-11565:2:2156
-11566:2:2164
-11567:2:2169
-11568:2:2173
-11569:2:2174
-11570:2:2181
-11571:2:2182
-11572:2:2193
-11573:2:2194
-11574:2:2195
-11575:2:2193
-11576:2:2194
-11577:2:2195
-11578:2:2206
-11579:2:2211
-11580:2:2212
-11581:0:4365
-11582:2:2224
-11583:0:4365
-11584:3:3461
-11585:0:4365
-11586:2:2226
-11587:0:4365
-11588:3:3462
-11589:0:4365
-11590:2:1936
-11591:0:4365
-11592:2:2129
-11593:0:4365
-11594:2:2130
-11595:0:4365
-11596:2:2134
-11597:0:4365
-11598:3:3461
-11599:0:4365
-11600:2:2136
-11601:0:4365
-11602:3:3462
-11603:0:4365
-11604:2:2137
-11605:2:2141
-11606:2:2142
-11607:2:2150
-11608:2:2151
-11609:2:2155
-11610:2:2156
-11611:2:2150
-11612:2:2151
-11613:2:2152
-11614:2:2164
-11615:2:2169
-11616:2:2173
-11617:2:2174
-11618:2:2181
-11619:2:2182
-11620:2:2193
-11621:2:2194
-11622:2:2195
-11623:2:2193
-11624:2:2194
-11625:2:2195
-11626:2:2206
-11627:2:2211
-11628:2:2212
-11629:0:4365
-11630:2:2224
-11631:0:4365
-11632:3:3461
-11633:0:4365
-11634:2:2226
-11635:0:4365
-11636:3:3462
-11637:0:4365
-11638:2:2230
-11639:0:4365
-11640:3:3461
-11641:0:4365
-11642:2:2235
-11643:2:2239
-11644:2:2240
-11645:2:2248
-11646:2:2249
-11647:2:2253
-11648:2:2254
-11649:2:2248
-11650:2:2249
-11651:2:2250
-11652:2:2262
-11653:2:2267
-11654:2:2271
-11655:2:2272
-11656:2:2279
-11657:2:2280
-11658:2:2291
-11659:2:2292
-11660:2:2293
-11661:2:2291
-11662:2:2292
-11663:2:2293
-11664:2:2304
-11665:2:2309
-11666:2:2310
-11667:0:4365
-11668:3:3462
-11669:0:4365
-11670:2:2322
-11671:0:4365
-11672:2:1169
-11673:0:4365
-11674:3:3461
-11675:0:4365
-11676:2:1170
-11677:0:4365
-11678:3:3462
-11679:0:4365
-11680:3:3463
-11681:0:4365
-11682:3:3469
-11683:0:4365
-11684:3:3470
-11685:3:3474
-11686:3:3475
-11687:3:3483
-11688:3:3484
-11689:3:3488
-11690:3:3489
-11691:3:3483
-11692:3:3484
-11693:3:3488
-11694:3:3489
-11695:3:3497
-11696:3:3502
-11697:3:3506
-11698:3:3507
-11699:3:3514
-11700:3:3515
-11701:3:3526
-11702:3:3527
-11703:3:3528
-11704:3:3526
-11705:3:3527
-11706:3:3528
-11707:3:3539
-11708:3:3544
-11709:3:3545
-11710:0:4365
-11711:3:3557
-11712:0:4365
-11713:3:3558
-11714:0:4365
-11715:2:1173
-11716:0:4365
-11717:3:3559
-11718:0:4365
-11719:2:1179
-11720:0:4365
-11721:2:1180
-11722:0:4365
-11723:3:3558
-11724:0:4365
-11725:2:1181
-11726:2:1185
-11727:2:1186
-11728:2:1194
-11729:2:1195
-11730:2:1199
-11731:2:1200
-11732:2:1194
-11733:2:1195
-11734:2:1199
-11735:2:1200
-11736:2:1208
-11737:2:1213
-11738:2:1217
-11739:2:1218
-11740:2:1225
-11741:2:1226
-11742:2:1237
-11743:2:1238
-11744:2:1239
-11745:2:1237
-11746:2:1238
-11747:2:1239
-11748:2:1250
-11749:2:1255
-11750:2:1256
-11751:0:4365
-11752:3:3559
-11753:0:4365
-11754:2:1268
-11755:0:4365
-11756:3:3558
-11757:0:4365
-11758:2:1270
-11759:0:4365
-11760:3:3559
-11761:0:4365
-11762:2:1271
-11763:2:1275
-11764:2:1276
-11765:2:1284
-11766:2:1285
-11767:2:1289
-11768:2:1290
-11769:2:1284
-11770:2:1285
-11771:2:1289
-11772:2:1290
-11773:2:1298
-11774:2:1303
-11775:2:1307
-11776:2:1308
-11777:2:1315
-11778:2:1316
-11779:2:1327
-11780:2:1328
-11781:2:1329
-11782:2:1327
-11783:2:1328
-11784:2:1329
-11785:2:1340
-11786:2:1345
-11787:2:1346
-11788:0:4365
-11789:2:1358
-11790:0:4365
-11791:2:1360
-11792:0:4365
-11793:3:3558
-11794:0:4365
-11795:2:1361
-11796:0:4365
-11797:3:3559
-11798:0:4365
-11799:2:1362
-11800:2:1366
-11801:2:1367
-11802:2:1375
-11803:2:1376
-11804:2:1380
-11805:2:1381
-11806:2:1375
-11807:2:1376
-11808:2:1380
-11809:2:1381
-11810:2:1389
-11811:2:1394
-11812:2:1398
-11813:2:1399
-11814:2:1406
-11815:2:1407
-11816:2:1418
-11817:2:1419
-11818:2:1420
-11819:2:1418
-11820:2:1419
-11821:2:1420
-11822:2:1431
-11823:2:1436
-11824:2:1437
-11825:0:4365
-11826:2:1449
-11827:0:4365
-11828:3:3558
-11829:0:4365
-11830:2:1451
-11831:0:4365
-11832:3:3559
-11833:0:4365
-11834:2:1652
-11835:0:4365
-11836:2:1653
-11837:0:4365
-11838:2:1657
-11839:0:4365
-11840:2:1180
-11841:0:4365
-11842:3:3558
-11843:0:4365
-11844:2:1181
-11845:2:1185
-11846:2:1186
-11847:2:1194
-11848:2:1195
-11849:2:1199
-11850:2:1200
-11851:2:1194
-11852:2:1195
-11853:2:1196
-11854:2:1208
-11855:2:1213
-11856:2:1217
-11857:2:1218
-11858:2:1225
-11859:2:1226
-11860:2:1237
-11861:2:1238
-11862:2:1239
-11863:2:1237
-11864:2:1238
-11865:2:1239
-11866:2:1250
-11867:2:1255
-11868:2:1256
-11869:0:4365
-11870:3:3559
-11871:0:4365
-11872:2:1268
-11873:0:4365
-11874:3:3558
-11875:0:4365
-11876:2:1270
-11877:0:4365
-11878:3:3559
-11879:0:4365
-11880:2:1271
-11881:2:1275
-11882:2:1276
-11883:2:1284
-11884:2:1285
-11885:2:1289
-11886:2:1290
-11887:2:1284
-11888:2:1285
-11889:2:1289
-11890:2:1290
-11891:2:1298
-11892:2:1303
-11893:2:1307
-11894:2:1308
-11895:2:1315
-11896:2:1316
-11897:2:1327
-11898:2:1328
-11899:2:1329
-11900:2:1327
-11901:2:1328
-11902:2:1329
-11903:2:1340
-11904:2:1345
-11905:2:1346
-11906:0:4365
-11907:2:1358
-11908:0:4365
-11909:2:1454
-11910:0:4365
-11911:3:3558
-11912:0:4365
-11913:2:1455
-11914:0:4365
-11915:3:3559
-11916:0:4365
-11917:2:1652
-11918:0:4365
-11919:2:1653
-11920:0:4365
-11921:2:1657
-11922:0:4365
-11923:2:1660
-11924:0:4365
-11925:3:3558
-11926:0:4365
-11927:2:1665
-11928:2:1669
-11929:2:1670
-11930:2:1678
-11931:2:1679
-11932:2:1683
-11933:2:1684
-11934:2:1678
-11935:2:1679
-11936:2:1680
-11937:2:1692
-11938:2:1697
-11939:2:1701
-11940:2:1702
-11941:2:1709
-11942:2:1710
-11943:2:1721
-11944:2:1722
-11945:2:1723
-11946:2:1721
-11947:2:1722
-11948:2:1723
-11949:2:1734
-11950:2:1739
-11951:2:1740
-11952:0:4365
-11953:3:3559
-11954:0:4365
-11955:2:1752
-11956:0:4365
-11957:3:3558
-11958:0:4365
-11959:2:1754
-11960:0:4365
-11961:3:3559
-11962:0:4365
-11963:2:1755
-11964:2:1759
-11965:2:1760
-11966:2:1768
-11967:2:1769
-11968:2:1773
-11969:2:1774
-11970:2:1768
-11971:2:1769
-11972:2:1773
-11973:2:1774
-11974:2:1782
-11975:2:1787
-11976:2:1791
-11977:2:1792
-11978:2:1799
-11979:2:1800
-11980:2:1811
-11981:2:1812
-11982:2:1813
-11983:2:1811
-11984:2:1812
-11985:2:1813
-11986:2:1824
-11987:2:1829
-11988:2:1830
-11989:0:4365
-11990:2:1842
-11991:0:4365
-11992:3:3558
-11993:0:4365
-11994:2:1844
-11995:0:4365
-11996:3:3559
-11997:0:4365
-11998:2:1845
-11999:2:1849
-12000:2:1850
-12001:2:1858
-12002:2:1859
-12003:2:1863
-12004:2:1864
-12005:2:1858
-12006:2:1859
-12007:2:1863
-12008:2:1864
-12009:2:1872
-12010:2:1877
-12011:2:1881
-12012:2:1882
-12013:2:1889
-12014:2:1890
-12015:2:1901
-12016:2:1902
-12017:2:1903
-12018:2:1901
-12019:2:1902
-12020:2:1903
-12021:2:1914
-12022:2:1919
-12023:2:1920
-12024:0:4365
-12025:2:1932
-12026:0:4365
-12027:3:3558
-12028:0:4365
-12029:2:1934
-12030:0:4365
-12031:3:3559
-12032:0:4365
-12033:2:1935
-12034:0:4365
-12035:2:1936
-12036:0:4365
-12037:2:2129
-12038:0:4365
-12039:2:2130
-12040:0:4365
-12041:2:2134
-12042:0:4365
-12043:3:3558
-12044:0:4365
-12045:2:2136
-12046:0:4365
-12047:3:3559
-12048:0:4365
-12049:2:2137
-12050:2:2141
-12051:2:2142
-12052:2:2150
-12053:2:2151
-12054:2:2155
-12055:2:2156
-12056:2:2150
-12057:2:2151
-12058:2:2155
-12059:2:2156
-12060:2:2164
-12061:2:2169
-12062:2:2173
-12063:2:2174
-12064:2:2181
-12065:2:2182
-12066:2:2193
-12067:2:2194
-12068:2:2195
-12069:2:2193
-12070:2:2194
-12071:2:2195
-12072:2:2206
-12073:2:2211
-12074:2:2212
-12075:0:4365
-12076:2:2224
-12077:0:4365
-12078:3:3558
-12079:0:4365
-12080:2:2226
-12081:0:4365
-12082:3:3559
-12083:0:4365
-12084:2:1936
-12085:0:4365
-12086:2:2129
-12087:0:4365
-12088:2:2130
-12089:0:4365
-12090:2:2134
-12091:0:4365
-12092:3:3558
-12093:0:4365
-12094:2:2136
-12095:0:4365
-12096:3:3559
-12097:0:4365
-12098:2:2137
-12099:2:2141
-12100:2:2142
-12101:2:2150
-12102:2:2151
-12103:2:2155
-12104:2:2156
-12105:2:2150
-12106:2:2151
-12107:2:2152
-12108:2:2164
-12109:2:2169
-12110:2:2173
-12111:2:2174
-12112:2:2181
-12113:2:2182
-12114:2:2193
-12115:2:2194
-12116:2:2195
-12117:2:2193
-12118:2:2194
-12119:2:2195
-12120:2:2206
-12121:2:2211
-12122:2:2212
-12123:0:4365
-12124:2:2224
-12125:0:4365
-12126:3:3558
-12127:0:4365
-12128:2:2226
-12129:0:4365
-12130:3:3559
-12131:0:4365
-12132:2:2230
-12133:0:4365
-12134:3:3558
-12135:0:4365
-12136:2:2235
-12137:2:2239
-12138:2:2240
-12139:2:2248
-12140:2:2249
-12141:2:2253
-12142:2:2254
-12143:2:2248
-12144:2:2249
-12145:2:2250
-12146:2:2262
-12147:2:2267
-12148:2:2271
-12149:2:2272
-12150:2:2279
-12151:2:2280
-12152:2:2291
-12153:2:2292
-12154:2:2293
-12155:2:2291
-12156:2:2292
-12157:2:2293
-12158:2:2304
-12159:2:2309
-12160:2:2310
-12161:0:4365
-12162:3:3559
-12163:0:4365
-12164:2:2322
-12165:0:4365
-12166:2:1169
-12167:0:4365
-12168:3:3558
-12169:0:4365
-12170:2:1170
-12171:0:4365
-12172:3:3559
-12173:0:4365
-12174:3:3560
-12175:0:4365
-12176:3:3566
-12177:0:4365
-12178:3:3569
-12179:3:3570
-12180:3:3582
-12181:3:3583
-12182:3:3587
-12183:3:3588
-12184:3:3582
-12185:3:3583
-12186:3:3587
-12187:3:3588
-12188:3:3596
-12189:3:3601
-12190:3:3605
-12191:3:3606
-12192:3:3613
-12193:3:3614
-12194:3:3625
-12195:3:3626
-12196:3:3627
-12197:3:3625
-12198:3:3626
-12199:3:3627
-12200:3:3638
-12201:3:3643
-12202:3:3644
-12203:0:4365
-12204:3:3656
-12205:0:4365
-12206:3:3657
-12207:0:4365
-12208:2:1173
-12209:0:4365
-12210:3:3658
-12211:0:4365
-12212:2:1179
-12213:0:4365
-12214:2:1180
-12215:0:4365
-12216:3:3657
-12217:0:4365
-12218:2:1181
-12219:2:1185
-12220:2:1186
-12221:2:1194
-12222:2:1195
-12223:2:1199
-12224:2:1200
-12225:2:1194
-12226:2:1195
-12227:2:1199
-12228:2:1200
-12229:2:1208
-12230:2:1213
-12231:2:1217
-12232:2:1218
-12233:2:1225
-12234:2:1226
-12235:2:1237
-12236:2:1238
-12237:2:1239
-12238:2:1237
-12239:2:1238
-12240:2:1239
-12241:2:1250
-12242:2:1255
-12243:2:1256
-12244:0:4365
-12245:3:3658
-12246:0:4365
-12247:2:1268
-12248:0:4365
-12249:3:3657
-12250:0:4365
-12251:2:1270
-12252:0:4365
-12253:3:3658
-12254:0:4365
-12255:2:1271
-12256:2:1275
-12257:2:1276
-12258:2:1284
-12259:2:1285
-12260:2:1289
-12261:2:1290
-12262:2:1284
-12263:2:1285
-12264:2:1289
-12265:2:1290
-12266:2:1298
-12267:2:1303
-12268:2:1307
-12269:2:1308
-12270:2:1315
-12271:2:1316
-12272:2:1327
-12273:2:1328
-12274:2:1329
-12275:2:1327
-12276:2:1328
-12277:2:1329
-12278:2:1340
-12279:2:1345
-12280:2:1346
-12281:0:4365
-12282:2:1358
-12283:0:4365
-12284:2:1360
-12285:0:4365
-12286:3:3657
-12287:0:4365
-12288:2:1361
-12289:0:4365
-12290:3:3658
-12291:0:4365
-12292:2:1362
-12293:2:1366
-12294:2:1367
-12295:2:1375
-12296:2:1376
-12297:2:1380
-12298:2:1381
-12299:2:1375
-12300:2:1376
-12301:2:1380
-12302:2:1381
-12303:2:1389
-12304:2:1394
-12305:2:1398
-12306:2:1399
-12307:2:1406
-12308:2:1407
-12309:2:1418
-12310:2:1419
-12311:2:1420
-12312:2:1418
-12313:2:1419
-12314:2:1420
-12315:2:1431
-12316:2:1436
-12317:2:1437
-12318:0:4365
-12319:2:1449
-12320:0:4365
-12321:3:3657
-12322:0:4365
-12323:2:1451
-12324:0:4365
-12325:3:3658
-12326:0:4365
-12327:2:1652
-12328:0:4365
-12329:2:1653
-12330:0:4365
-12331:2:1657
-12332:0:4365
-12333:2:1180
-12334:0:4365
-12335:3:3657
-12336:0:4365
-12337:2:1181
-12338:2:1185
-12339:2:1186
-12340:2:1194
-12341:2:1195
-12342:2:1199
-12343:2:1200
-12344:2:1194
-12345:2:1195
-12346:2:1196
-12347:2:1208
-12348:2:1213
-12349:2:1217
-12350:2:1218
-12351:2:1225
-12352:2:1226
-12353:2:1237
-12354:2:1238
-12355:2:1239
-12356:2:1237
-12357:2:1238
-12358:2:1239
-12359:2:1250
-12360:2:1255
-12361:2:1256
-12362:0:4365
-12363:3:3658
-12364:0:4365
-12365:2:1268
-12366:0:4365
-12367:3:3657
-12368:0:4365
-12369:2:1270
-12370:0:4365
-12371:3:3658
-12372:0:4365
-12373:2:1271
-12374:2:1275
-12375:2:1276
-12376:2:1284
-12377:2:1285
-12378:2:1289
-12379:2:1290
-12380:2:1284
-12381:2:1285
-12382:2:1289
-12383:2:1290
-12384:2:1298
-12385:2:1303
-12386:2:1307
-12387:2:1308
-12388:2:1315
-12389:2:1316
-12390:2:1327
-12391:2:1328
-12392:2:1329
-12393:2:1327
-12394:2:1328
-12395:2:1329
-12396:2:1340
-12397:2:1345
-12398:2:1346
-12399:0:4365
-12400:2:1358
-12401:0:4365
-12402:2:1454
-12403:0:4365
-12404:3:3657
-12405:0:4365
-12406:2:1455
-12407:0:4365
-12408:3:3658
-12409:0:4365
-12410:2:1652
-12411:0:4365
-12412:2:1653
-12413:0:4365
-12414:2:1657
-12415:0:4365
-12416:2:1660
-12417:0:4365
-12418:3:3657
-12419:0:4365
-12420:2:1665
-12421:2:1669
-12422:2:1670
-12423:2:1678
-12424:2:1679
-12425:2:1683
-12426:2:1684
-12427:2:1678
-12428:2:1679
-12429:2:1680
-12430:2:1692
-12431:2:1697
-12432:2:1701
-12433:2:1702
-12434:2:1709
-12435:2:1710
-12436:2:1721
-12437:2:1722
-12438:2:1723
-12439:2:1721
-12440:2:1722
-12441:2:1723
-12442:2:1734
-12443:2:1739
-12444:2:1740
-12445:0:4365
-12446:3:3658
-12447:0:4365
-12448:2:1752
-12449:0:4365
-12450:3:3657
-12451:0:4365
-12452:2:1754
-12453:0:4365
-12454:3:3658
-12455:0:4365
-12456:2:1755
-12457:2:1759
-12458:2:1760
-12459:2:1768
-12460:2:1769
-12461:2:1773
-12462:2:1774
-12463:2:1768
-12464:2:1769
-12465:2:1773
-12466:2:1774
-12467:2:1782
-12468:2:1787
-12469:2:1791
-12470:2:1792
-12471:2:1799
-12472:2:1800
-12473:2:1811
-12474:2:1812
-12475:2:1813
-12476:2:1811
-12477:2:1812
-12478:2:1813
-12479:2:1824
-12480:2:1829
-12481:2:1830
-12482:0:4365
-12483:2:1842
-12484:0:4365
-12485:3:3657
-12486:0:4365
-12487:2:1844
-12488:0:4365
-12489:3:3658
-12490:0:4365
-12491:2:1845
-12492:2:1849
-12493:2:1850
-12494:2:1858
-12495:2:1859
-12496:2:1863
-12497:2:1864
-12498:2:1858
-12499:2:1859
-12500:2:1863
-12501:2:1864
-12502:2:1872
-12503:2:1877
-12504:2:1881
-12505:2:1882
-12506:2:1889
-12507:2:1890
-12508:2:1901
-12509:2:1902
-12510:2:1903
-12511:2:1901
-12512:2:1902
-12513:2:1903
-12514:2:1914
-12515:2:1919
-12516:2:1920
-12517:0:4365
-12518:2:1932
-12519:0:4365
-12520:3:3657
-12521:0:4365
-12522:2:1934
-12523:0:4365
-12524:3:3658
-12525:0:4365
-12526:2:1935
-12527:0:4365
-12528:2:1936
-12529:0:4365
-12530:2:2129
-12531:0:4365
-12532:2:2130
-12533:0:4365
-12534:2:2134
-12535:0:4365
-12536:3:3657
-12537:0:4365
-12538:2:2136
-12539:0:4365
-12540:3:3658
-12541:0:4365
-12542:2:2137
-12543:2:2141
-12544:2:2142
-12545:2:2150
-12546:2:2151
-12547:2:2155
-12548:2:2156
-12549:2:2150
-12550:2:2151
-12551:2:2155
-12552:2:2156
-12553:2:2164
-12554:2:2169
-12555:2:2173
-12556:2:2174
-12557:2:2181
-12558:2:2182
-12559:2:2193
-12560:2:2194
-12561:2:2195
-12562:2:2193
-12563:2:2194
-12564:2:2195
-12565:2:2206
-12566:2:2211
-12567:2:2212
-12568:0:4365
-12569:2:2224
-12570:0:4365
-12571:3:3657
-12572:0:4365
-12573:2:2226
-12574:0:4365
-12575:3:3658
-12576:0:4365
-12577:2:1936
-12578:0:4365
-12579:2:2129
-12580:0:4365
-12581:2:2130
-12582:0:4365
-12583:2:2134
-12584:0:4365
-12585:3:3657
-12586:0:4365
-12587:2:2136
-12588:0:4365
-12589:3:3658
-12590:0:4365
-12591:2:2137
-12592:2:2141
-12593:2:2142
-12594:2:2150
-12595:2:2151
-12596:2:2155
-12597:2:2156
-12598:2:2150
-12599:2:2151
-12600:2:2152
-12601:2:2164
-12602:2:2169
-12603:2:2173
-12604:2:2174
-12605:2:2181
-12606:2:2182
-12607:2:2193
-12608:2:2194
-12609:2:2195
-12610:2:2193
-12611:2:2194
-12612:2:2195
-12613:2:2206
-12614:2:2211
-12615:2:2212
-12616:0:4365
-12617:2:2224
-12618:0:4365
-12619:3:3657
-12620:0:4365
-12621:2:2226
-12622:0:4365
-12623:3:3658
-12624:0:4365
-12625:2:2230
-12626:0:4365
-12627:3:3657
-12628:0:4365
-12629:2:2235
-12630:2:2239
-12631:2:2240
-12632:2:2248
-12633:2:2249
-12634:2:2253
-12635:2:2254
-12636:2:2248
-12637:2:2249
-12638:2:2250
-12639:2:2262
-12640:2:2267
-12641:2:2271
-12642:2:2272
-12643:2:2279
-12644:2:2280
-12645:2:2291
-12646:2:2292
-12647:2:2293
-12648:2:2291
-12649:2:2292
-12650:2:2293
-12651:2:2304
-12652:2:2309
-12653:2:2310
-12654:0:4365
-12655:3:3658
-12656:0:4365
-12657:2:2322
-12658:0:4365
-12659:2:1169
-12660:0:4365
-12661:3:3657
-12662:0:4365
-12663:2:1170
-12664:0:4365
-12665:3:3658
-12666:0:4365
-12667:3:3659
-12668:0:4365
-12669:3:3665
-12670:0:4365
-12671:3:3666
-12672:0:4365
-12673:3:3667
-12674:0:4365
-12675:3:3668
-12676:0:4365
-12677:3:3669
-12678:3:3673
-12679:3:3674
-12680:3:3682
-12681:3:3683
-12682:3:3687
-12683:3:3688
-12684:3:3682
-12685:3:3683
-12686:3:3687
-12687:3:3688
-12688:3:3696
-12689:3:3701
-12690:3:3705
-12691:3:3706
-12692:3:3713
-12693:3:3714
-12694:3:3725
-12695:3:3726
-12696:3:3727
-12697:3:3725
-12698:3:3726
-12699:3:3727
-12700:3:3738
-12701:3:3743
-12702:3:3744
-12703:0:4365
-12704:3:3756
-12705:0:4365
-12706:3:3757
-12707:0:4365
-12708:2:1173
-12709:0:4365
-12710:3:3758
-12711:0:4365
-12712:2:1179
-12713:0:4365
-12714:2:1180
-12715:0:4365
-12716:3:3757
-12717:0:4365
-12718:2:1181
-12719:2:1185
-12720:2:1186
-12721:2:1194
-12722:2:1195
-12723:2:1199
-12724:2:1200
-12725:2:1194
-12726:2:1195
-12727:2:1199
-12728:2:1200
-12729:2:1208
-12730:2:1213
-12731:2:1217
-12732:2:1218
-12733:2:1225
-12734:2:1226
-12735:2:1237
-12736:2:1238
-12737:2:1239
-12738:2:1237
-12739:2:1238
-12740:2:1239
-12741:2:1250
-12742:2:1255
-12743:2:1256
-12744:0:4365
-12745:3:3758
-12746:0:4365
-12747:2:1268
-12748:0:4365
-12749:3:3757
-12750:0:4365
-12751:2:1270
-12752:0:4365
-12753:3:3758
-12754:0:4365
-12755:2:1271
-12756:2:1275
-12757:2:1276
-12758:2:1284
-12759:2:1285
-12760:2:1289
-12761:2:1290
-12762:2:1284
-12763:2:1285
-12764:2:1289
-12765:2:1290
-12766:2:1298
-12767:2:1303
-12768:2:1307
-12769:2:1308
-12770:2:1315
-12771:2:1316
-12772:2:1327
-12773:2:1328
-12774:2:1329
-12775:2:1327
-12776:2:1328
-12777:2:1329
-12778:2:1340
-12779:2:1345
-12780:2:1346
-12781:0:4365
-12782:2:1358
-12783:0:4365
-12784:2:1360
-12785:0:4365
-12786:3:3757
-12787:0:4365
-12788:2:1361
-12789:0:4365
-12790:3:3758
-12791:0:4365
-12792:2:1362
-12793:2:1366
-12794:2:1367
-12795:2:1375
-12796:2:1376
-12797:2:1380
-12798:2:1381
-12799:2:1375
-12800:2:1376
-12801:2:1380
-12802:2:1381
-12803:2:1389
-12804:2:1394
-12805:2:1398
-12806:2:1399
-12807:2:1406
-12808:2:1407
-12809:2:1418
-12810:2:1419
-12811:2:1420
-12812:2:1418
-12813:2:1419
-12814:2:1420
-12815:2:1431
-12816:2:1436
-12817:2:1437
-12818:0:4365
-12819:2:1449
-12820:0:4365
-12821:3:3757
-12822:0:4365
-12823:2:1451
-12824:0:4365
-12825:3:3758
-12826:0:4365
-12827:2:1652
-12828:0:4365
-12829:2:1653
-12830:0:4365
-12831:2:1657
-12832:0:4365
-12833:2:1180
-12834:0:4365
-12835:3:3757
-12836:0:4365
-12837:2:1181
-12838:2:1185
-12839:2:1186
-12840:2:1194
-12841:2:1195
-12842:2:1199
-12843:2:1200
-12844:2:1194
-12845:2:1195
-12846:2:1196
-12847:2:1208
-12848:2:1213
-12849:2:1217
-12850:2:1218
-12851:2:1225
-12852:2:1226
-12853:2:1237
-12854:2:1238
-12855:2:1239
-12856:2:1237
-12857:2:1238
-12858:2:1239
-12859:2:1250
-12860:2:1255
-12861:2:1256
-12862:0:4365
-12863:3:3758
-12864:0:4365
-12865:2:1268
-12866:0:4365
-12867:3:3757
-12868:0:4365
-12869:2:1270
-12870:0:4365
-12871:3:3758
-12872:0:4365
-12873:2:1271
-12874:2:1275
-12875:2:1276
-12876:2:1284
-12877:2:1285
-12878:2:1289
-12879:2:1290
-12880:2:1284
-12881:2:1285
-12882:2:1289
-12883:2:1290
-12884:2:1298
-12885:2:1303
-12886:2:1307
-12887:2:1308
-12888:2:1315
-12889:2:1316
-12890:2:1327
-12891:2:1328
-12892:2:1329
-12893:2:1327
-12894:2:1328
-12895:2:1329
-12896:2:1340
-12897:2:1345
-12898:2:1346
-12899:0:4365
-12900:2:1358
-12901:0:4365
-12902:2:1454
-12903:0:4365
-12904:3:3757
-12905:0:4365
-12906:2:1455
-12907:0:4365
-12908:3:3758
-12909:0:4365
-12910:2:1652
-12911:0:4365
-12912:2:1653
-12913:0:4365
-12914:2:1657
-12915:0:4365
-12916:2:1660
-12917:0:4365
-12918:3:3757
-12919:0:4365
-12920:2:1665
-12921:2:1669
-12922:2:1670
-12923:2:1678
-12924:2:1679
-12925:2:1683
-12926:2:1684
-12927:2:1678
-12928:2:1679
-12929:2:1680
-12930:2:1692
-12931:2:1697
-12932:2:1701
-12933:2:1702
-12934:2:1709
-12935:2:1710
-12936:2:1721
-12937:2:1722
-12938:2:1723
-12939:2:1721
-12940:2:1722
-12941:2:1723
-12942:2:1734
-12943:2:1739
-12944:2:1740
-12945:0:4365
-12946:3:3758
-12947:0:4365
-12948:2:1752
-12949:0:4365
-12950:3:3757
-12951:0:4365
-12952:2:1754
-12953:0:4365
-12954:3:3758
-12955:0:4365
-12956:2:1755
-12957:2:1759
-12958:2:1760
-12959:2:1768
-12960:2:1769
-12961:2:1773
-12962:2:1774
-12963:2:1768
-12964:2:1769
-12965:2:1773
-12966:2:1774
-12967:2:1782
-12968:2:1787
-12969:2:1791
-12970:2:1792
-12971:2:1799
-12972:2:1800
-12973:2:1811
-12974:2:1812
-12975:2:1813
-12976:2:1811
-12977:2:1812
-12978:2:1813
-12979:2:1824
-12980:2:1829
-12981:2:1830
-12982:0:4365
-12983:2:1842
-12984:0:4365
-12985:3:3757
-12986:0:4365
-12987:2:1844
-12988:0:4365
-12989:3:3758
-12990:0:4365
-12991:2:1845
-12992:2:1849
-12993:2:1850
-12994:2:1858
-12995:2:1859
-12996:2:1863
-12997:2:1864
-12998:2:1858
-12999:2:1859
-13000:2:1863
-13001:2:1864
-13002:2:1872
-13003:2:1877
-13004:2:1881
-13005:2:1882
-13006:2:1889
-13007:2:1890
-13008:2:1901
-13009:2:1902
-13010:2:1903
-13011:2:1901
-13012:2:1902
-13013:2:1903
-13014:2:1914
-13015:2:1919
-13016:2:1920
-13017:0:4365
-13018:2:1932
-13019:0:4365
-13020:3:3757
-13021:0:4365
-13022:2:1934
-13023:0:4365
-13024:3:3758
-13025:0:4365
-13026:2:1935
-13027:0:4365
-13028:2:1936
-13029:0:4365
-13030:2:2129
-13031:0:4365
-13032:2:2130
-13033:0:4365
-13034:2:2134
-13035:0:4365
-13036:3:3757
-13037:0:4365
-13038:2:2136
-13039:0:4365
-13040:3:3758
-13041:0:4365
-13042:2:2137
-13043:2:2141
-13044:2:2142
-13045:2:2150
-13046:2:2151
-13047:2:2155
-13048:2:2156
-13049:2:2150
-13050:2:2151
-13051:2:2155
-13052:2:2156
-13053:2:2164
-13054:2:2169
-13055:2:2173
-13056:2:2174
-13057:2:2181
-13058:2:2182
-13059:2:2193
-13060:2:2194
-13061:2:2195
-13062:2:2193
-13063:2:2194
-13064:2:2195
-13065:2:2206
-13066:2:2211
-13067:2:2212
-13068:0:4365
-13069:2:2224
-13070:0:4365
-13071:3:3757
-13072:0:4365
-13073:2:2226
-13074:0:4365
-13075:3:3758
-13076:0:4365
-13077:2:1936
-13078:0:4365
-13079:2:2129
-13080:0:4365
-13081:2:2130
-13082:0:4365
-13083:2:2134
-13084:0:4365
-13085:3:3757
-13086:0:4365
-13087:2:2136
-13088:0:4365
-13089:3:3758
-13090:0:4365
-13091:2:2137
-13092:2:2141
-13093:2:2142
-13094:2:2150
-13095:2:2151
-13096:2:2155
-13097:2:2156
-13098:2:2150
-13099:2:2151
-13100:2:2152
-13101:2:2164
-13102:2:2169
-13103:2:2173
-13104:2:2174
-13105:2:2181
-13106:2:2182
-13107:2:2193
-13108:2:2194
-13109:2:2195
-13110:2:2193
-13111:2:2194
-13112:2:2195
-13113:2:2206
-13114:2:2211
-13115:2:2212
-13116:0:4365
-13117:2:2224
-13118:0:4365
-13119:3:3757
-13120:0:4365
-13121:2:2226
-13122:0:4365
-13123:3:3758
-13124:0:4365
-13125:2:2230
-13126:0:4365
-13127:3:3757
-13128:0:4365
-13129:2:2235
-13130:2:2239
-13131:2:2240
-13132:2:2248
-13133:2:2249
-13134:2:2253
-13135:2:2254
-13136:2:2248
-13137:2:2249
-13138:2:2250
-13139:2:2262
-13140:2:2267
-13141:2:2271
-13142:2:2272
-13143:2:2279
-13144:2:2280
-13145:2:2291
-13146:2:2292
-13147:2:2293
-13148:2:2291
-13149:2:2292
-13150:2:2293
-13151:2:2304
-13152:2:2309
-13153:2:2310
-13154:0:4365
-13155:3:3758
-13156:0:4365
-13157:2:2322
-13158:0:4365
-13159:2:1169
-13160:0:4365
-13161:3:3757
-13162:0:4365
-13163:2:1170
-13164:0:4365
-13165:3:3758
-13166:0:4365
-13167:3:3759
-13168:0:4365
-13169:3:3972
-13170:0:4365
-13171:3:3980
-13172:0:4365
-13173:3:3981
-13174:3:3985
-13175:3:3986
-13176:3:3994
-13177:3:3995
-13178:3:3999
-13179:3:4000
-13180:3:3994
-13181:3:3995
-13182:3:3999
-13183:3:4000
-13184:3:4008
-13185:3:4013
-13186:3:4017
-13187:3:4018
-13188:3:4025
-13189:3:4026
-13190:3:4037
-13191:3:4038
-13192:3:4039
-13193:3:4037
-13194:3:4038
-13195:3:4039
-13196:3:4050
-13197:3:4055
-13198:3:4056
-13199:0:4365
-13200:3:4068
-13201:0:4365
-13202:3:4069
-13203:0:4365
-13204:2:1173
-13205:0:4365
-13206:3:4070
-13207:0:4365
-13208:2:1179
-13209:0:4365
-13210:2:1180
-13211:0:4365
-13212:3:4069
-13213:0:4365
-13214:2:1181
-13215:2:1185
-13216:2:1186
-13217:2:1194
-13218:2:1195
-13219:2:1199
-13220:2:1200
-13221:2:1194
-13222:2:1195
-13223:2:1199
-13224:2:1200
-13225:2:1208
-13226:2:1213
-13227:2:1217
-13228:2:1218
-13229:2:1225
-13230:2:1226
-13231:2:1237
-13232:2:1238
-13233:2:1239
-13234:2:1237
-13235:2:1238
-13236:2:1239
-13237:2:1250
-13238:2:1255
-13239:2:1256
-13240:0:4365
-13241:3:4070
-13242:0:4365
-13243:2:1268
-13244:0:4365
-13245:3:4069
-13246:0:4365
-13247:2:1270
-13248:0:4365
-13249:3:4070
-13250:0:4365
-13251:2:1271
-13252:2:1275
-13253:2:1276
-13254:2:1284
-13255:2:1285
-13256:2:1289
-13257:2:1290
-13258:2:1284
-13259:2:1285
-13260:2:1289
-13261:2:1290
-13262:2:1298
-13263:2:1303
-13264:2:1307
-13265:2:1308
-13266:2:1315
-13267:2:1316
-13268:2:1327
-13269:2:1328
-13270:2:1329
-13271:2:1327
-13272:2:1328
-13273:2:1329
-13274:2:1340
-13275:2:1345
-13276:2:1346
-13277:0:4365
-13278:2:1358
-13279:0:4365
-13280:2:1360
-13281:0:4365
-13282:3:4069
-13283:0:4365
-13284:2:1361
-13285:0:4365
-13286:3:4070
-13287:0:4365
-13288:2:1362
-13289:2:1366
-13290:2:1367
-13291:2:1375
-13292:2:1376
-13293:2:1380
-13294:2:1381
-13295:2:1375
-13296:2:1376
-13297:2:1380
-13298:2:1381
-13299:2:1389
-13300:2:1394
-13301:2:1398
-13302:2:1399
-13303:2:1406
-13304:2:1407
-13305:2:1418
-13306:2:1419
-13307:2:1420
-13308:2:1418
-13309:2:1419
-13310:2:1420
-13311:2:1431
-13312:2:1436
-13313:2:1437
-13314:0:4365
-13315:2:1449
-13316:0:4365
-13317:3:4069
-13318:0:4365
-13319:2:1451
-13320:0:4365
-13321:3:4070
-13322:0:4365
-13323:2:1652
-13324:0:4365
-13325:2:1653
-13326:0:4365
-13327:2:1657
-13328:0:4365
-13329:2:1180
-13330:0:4365
-13331:3:4069
-13332:0:4365
-13333:2:1181
-13334:2:1185
-13335:2:1186
-13336:2:1194
-13337:2:1195
-13338:2:1199
-13339:2:1200
-13340:2:1194
-13341:2:1195
-13342:2:1196
-13343:2:1208
-13344:2:1213
-13345:2:1217
-13346:2:1218
-13347:2:1225
-13348:2:1226
-13349:2:1237
-13350:2:1238
-13351:2:1239
-13352:2:1237
-13353:2:1238
-13354:2:1239
-13355:2:1250
-13356:2:1255
-13357:2:1256
-13358:0:4365
-13359:3:4070
-13360:0:4365
-13361:2:1268
-13362:0:4365
-13363:3:4069
-13364:0:4365
-13365:2:1270
-13366:0:4365
-13367:3:4070
-13368:0:4365
-13369:2:1271
-13370:2:1275
-13371:2:1276
-13372:2:1284
-13373:2:1285
-13374:2:1289
-13375:2:1290
-13376:2:1284
-13377:2:1285
-13378:2:1289
-13379:2:1290
-13380:2:1298
-13381:2:1303
-13382:2:1307
-13383:2:1308
-13384:2:1315
-13385:2:1316
-13386:2:1327
-13387:2:1328
-13388:2:1329
-13389:2:1327
-13390:2:1328
-13391:2:1329
-13392:2:1340
-13393:2:1345
-13394:2:1346
-13395:0:4365
-13396:2:1358
-13397:0:4365
-13398:2:1454
-13399:0:4365
-13400:3:4069
-13401:0:4365
-13402:2:1455
-13403:0:4365
-13404:3:4070
-13405:0:4365
-13406:2:1652
-13407:0:4365
-13408:2:1653
-13409:0:4365
-13410:2:1657
-13411:0:4365
-13412:2:1660
-13413:0:4365
-13414:3:4069
-13415:0:4365
-13416:2:1665
-13417:2:1669
-13418:2:1670
-13419:2:1678
-13420:2:1679
-13421:2:1683
-13422:2:1684
-13423:2:1678
-13424:2:1679
-13425:2:1680
-13426:2:1692
-13427:2:1697
-13428:2:1701
-13429:2:1702
-13430:2:1709
-13431:2:1710
-13432:2:1721
-13433:2:1722
-13434:2:1723
-13435:2:1721
-13436:2:1722
-13437:2:1723
-13438:2:1734
-13439:2:1739
-13440:2:1740
-13441:0:4365
-13442:3:4070
-13443:0:4365
-13444:2:1752
-13445:0:4365
-13446:3:4069
-13447:0:4365
-13448:2:1754
-13449:0:4365
-13450:3:4070
-13451:0:4365
-13452:2:1755
-13453:2:1759
-13454:2:1760
-13455:2:1768
-13456:2:1769
-13457:2:1773
-13458:2:1774
-13459:2:1768
-13460:2:1769
-13461:2:1773
-13462:2:1774
-13463:2:1782
-13464:2:1787
-13465:2:1791
-13466:2:1792
-13467:2:1799
-13468:2:1800
-13469:2:1811
-13470:2:1812
-13471:2:1813
-13472:2:1811
-13473:2:1812
-13474:2:1813
-13475:2:1824
-13476:2:1829
-13477:2:1830
-13478:0:4365
-13479:2:1842
-13480:0:4365
-13481:3:4069
-13482:0:4365
-13483:2:1844
-13484:0:4365
-13485:3:4070
-13486:0:4365
-13487:2:1845
-13488:2:1849
-13489:2:1850
-13490:2:1858
-13491:2:1859
-13492:2:1863
-13493:2:1864
-13494:2:1858
-13495:2:1859
-13496:2:1863
-13497:2:1864
-13498:2:1872
-13499:2:1877
-13500:2:1881
-13501:2:1882
-13502:2:1889
-13503:2:1890
-13504:2:1901
-13505:2:1902
-13506:2:1903
-13507:2:1901
-13508:2:1902
-13509:2:1903
-13510:2:1914
-13511:2:1919
-13512:2:1920
-13513:0:4365
-13514:2:1932
-13515:0:4365
-13516:3:4069
-13517:0:4365
-13518:2:1934
-13519:0:4365
-13520:3:4070
-13521:0:4365
-13522:2:1935
-13523:0:4365
-13524:2:1936
-13525:0:4365
-13526:2:2129
-13527:0:4365
-13528:2:2130
-13529:0:4365
-13530:2:2134
-13531:0:4365
-13532:3:4069
-13533:0:4365
-13534:2:2136
-13535:0:4365
-13536:3:4070
-13537:0:4365
-13538:2:2137
-13539:2:2141
-13540:2:2142
-13541:2:2150
-13542:2:2151
-13543:2:2155
-13544:2:2156
-13545:2:2150
-13546:2:2151
-13547:2:2155
-13548:2:2156
-13549:2:2164
-13550:2:2169
-13551:2:2173
-13552:2:2174
-13553:2:2181
-13554:2:2182
-13555:2:2193
-13556:2:2194
-13557:2:2195
-13558:2:2193
-13559:2:2194
-13560:2:2195
-13561:2:2206
-13562:2:2211
-13563:2:2212
-13564:0:4365
-13565:2:2224
-13566:0:4365
-13567:3:4069
-13568:0:4365
-13569:2:2226
-13570:0:4365
-13571:3:4070
-13572:0:4365
-13573:2:1936
-13574:0:4365
-13575:2:2129
-13576:0:4365
-13577:2:2130
-13578:0:4365
-13579:2:2134
-13580:0:4365
-13581:3:4069
-13582:0:4365
-13583:2:2136
-13584:0:4365
-13585:3:4070
-13586:0:4365
-13587:2:2137
-13588:2:2141
-13589:2:2142
-13590:2:2150
-13591:2:2151
-13592:2:2155
-13593:2:2156
-13594:2:2150
-13595:2:2151
-13596:2:2152
-13597:2:2164
-13598:2:2169
-13599:2:2173
-13600:2:2174
-13601:2:2181
-13602:2:2182
-13603:2:2193
-13604:2:2194
-13605:2:2195
-13606:2:2193
-13607:2:2194
-13608:2:2195
-13609:2:2206
-13610:2:2211
-13611:2:2212
-13612:0:4365
-13613:2:2224
-13614:0:4365
-13615:3:4069
-13616:0:4365
-13617:2:2226
-13618:0:4365
-13619:3:4070
-13620:0:4365
-13621:2:2230
-13622:0:4365
-13623:3:4069
-13624:0:4365
-13625:2:2235
-13626:2:2239
-13627:2:2240
-13628:2:2248
-13629:2:2249
-13630:2:2253
-13631:2:2254
-13632:2:2248
-13633:2:2249
-13634:2:2250
-13635:2:2262
-13636:2:2267
-13637:2:2271
-13638:2:2272
-13639:2:2279
-13640:2:2280
-13641:2:2291
-13642:2:2292
-13643:2:2293
-13644:2:2291
-13645:2:2292
-13646:2:2293
-13647:2:2304
-13648:2:2309
-13649:2:2310
-13650:0:4365
-13651:3:4070
-13652:0:4365
-13653:2:2322
-13654:0:4365
-13655:2:1169
-13656:0:4365
-13657:3:4069
-13658:0:4365
-13659:2:1170
-13660:0:4365
-13661:3:4070
-13662:0:4365
-13663:3:4071
-13664:0:4365
-13665:3:4081
-13666:0:4365
-13667:3:3666
-13668:0:4365
-13669:3:3667
-13670:0:4365
-13671:3:3668
-13672:0:4365
-13673:3:3669
-13674:3:3673
-13675:3:3674
-13676:3:3682
-13677:3:3683
-13678:3:3687
-13679:3:3688
-13680:3:3682
-13681:3:3683
-13682:3:3687
-13683:3:3688
-13684:3:3696
-13685:3:3701
-13686:3:3705
-13687:3:3706
-13688:3:3713
-13689:3:3714
-13690:3:3725
-13691:3:3726
-13692:3:3727
-13693:3:3725
-13694:3:3726
-13695:3:3727
-13696:3:3738
-13697:3:3743
-13698:3:3744
-13699:0:4365
-13700:3:3756
-13701:0:4365
-13702:3:3757
-13703:0:4365
-13704:2:1173
-13705:0:4365
-13706:3:3758
-13707:0:4365
-13708:2:1179
-13709:0:4365
-13710:2:1180
-13711:0:4365
-13712:3:3757
-13713:0:4365
-13714:2:1181
-13715:2:1185
-13716:2:1186
-13717:2:1194
-13718:2:1195
-13719:2:1199
-13720:2:1200
-13721:2:1194
-13722:2:1195
-13723:2:1199
-13724:2:1200
-13725:2:1208
-13726:2:1213
-13727:2:1217
-13728:2:1218
-13729:2:1225
-13730:2:1226
-13731:2:1237
-13732:2:1238
-13733:2:1239
-13734:2:1237
-13735:2:1238
-13736:2:1239
-13737:2:1250
-13738:2:1255
-13739:2:1256
-13740:0:4365
-13741:3:3758
-13742:0:4365
-13743:2:1268
-13744:0:4365
-13745:3:3757
-13746:0:4365
-13747:2:1270
-13748:0:4365
-13749:3:3758
-13750:0:4365
-13751:2:1271
-13752:2:1275
-13753:2:1276
-13754:2:1284
-13755:2:1285
-13756:2:1289
-13757:2:1290
-13758:2:1284
-13759:2:1285
-13760:2:1289
-13761:2:1290
-13762:2:1298
-13763:2:1303
-13764:2:1307
-13765:2:1308
-13766:2:1315
-13767:2:1316
-13768:2:1327
-13769:2:1328
-13770:2:1329
-13771:2:1327
-13772:2:1328
-13773:2:1329
-13774:2:1340
-13775:2:1345
-13776:2:1346
-13777:0:4365
-13778:2:1358
-13779:0:4365
-13780:2:1360
-13781:0:4365
-13782:3:3757
-13783:0:4365
-13784:2:1361
-13785:0:4365
-13786:3:3758
-13787:0:4365
-13788:2:1362
-13789:2:1366
-13790:2:1367
-13791:2:1375
-13792:2:1376
-13793:2:1380
-13794:2:1381
-13795:2:1375
-13796:2:1376
-13797:2:1380
-13798:2:1381
-13799:2:1389
-13800:2:1394
-13801:2:1398
-13802:2:1399
-13803:2:1406
-13804:2:1407
-13805:2:1418
-13806:2:1419
-13807:2:1420
-13808:2:1418
-13809:2:1419
-13810:2:1420
-13811:2:1431
-13812:2:1436
-13813:2:1437
-13814:0:4365
-13815:2:1449
-13816:0:4365
-13817:3:3757
-13818:0:4365
-13819:2:1451
-13820:0:4365
-13821:3:3758
-13822:0:4365
-13823:2:1652
-13824:0:4365
-13825:2:1653
-13826:0:4365
-13827:2:1657
-13828:0:4365
-13829:2:1180
-13830:0:4365
-13831:3:3757
-13832:0:4365
-13833:2:1181
-13834:2:1185
-13835:2:1186
-13836:2:1194
-13837:2:1195
-13838:2:1199
-13839:2:1200
-13840:2:1194
-13841:2:1195
-13842:2:1196
-13843:2:1208
-13844:2:1213
-13845:2:1217
-13846:2:1218
-13847:2:1225
-13848:2:1226
-13849:2:1237
-13850:2:1238
-13851:2:1239
-13852:2:1237
-13853:2:1238
-13854:2:1239
-13855:2:1250
-13856:2:1255
-13857:2:1256
-13858:0:4365
-13859:3:3758
-13860:0:4365
-13861:2:1268
-13862:0:4365
-13863:3:3757
-13864:0:4365
-13865:2:1270
-13866:0:4365
-13867:3:3758
-13868:0:4365
-13869:2:1271
-13870:2:1275
-13871:2:1276
-13872:2:1284
-13873:2:1285
-13874:2:1289
-13875:2:1290
-13876:2:1284
-13877:2:1285
-13878:2:1289
-13879:2:1290
-13880:2:1298
-13881:2:1303
-13882:2:1307
-13883:2:1308
-13884:2:1315
-13885:2:1316
-13886:2:1327
-13887:2:1328
-13888:2:1329
-13889:2:1327
-13890:2:1328
-13891:2:1329
-13892:2:1340
-13893:2:1345
-13894:2:1346
-13895:0:4365
-13896:2:1358
-13897:0:4365
-13898:2:1454
-13899:0:4365
-13900:3:3757
-13901:0:4365
-13902:2:1455
-13903:0:4365
-13904:3:3758
-13905:0:4365
-13906:2:1652
-13907:0:4365
-13908:2:1653
-13909:0:4365
-13910:2:1657
-13911:0:4365
-13912:2:1660
-13913:0:4365
-13914:3:3757
-13915:0:4365
-13916:2:1665
-13917:2:1669
-13918:2:1670
-13919:2:1678
-13920:2:1679
-13921:2:1683
-13922:2:1684
-13923:2:1678
-13924:2:1679
-13925:2:1680
-13926:2:1692
-13927:2:1697
-13928:2:1701
-13929:2:1702
-13930:2:1709
-13931:2:1710
-13932:2:1721
-13933:2:1722
-13934:2:1723
-13935:2:1721
-13936:2:1722
-13937:2:1723
-13938:2:1734
-13939:2:1739
-13940:2:1740
-13941:0:4365
-13942:3:3758
-13943:0:4365
-13944:2:1752
-13945:0:4365
-13946:3:3757
-13947:0:4365
-13948:2:1754
-13949:0:4365
-13950:3:3758
-13951:0:4365
-13952:2:1755
-13953:2:1759
-13954:2:1760
-13955:2:1768
-13956:2:1769
-13957:2:1773
-13958:2:1774
-13959:2:1768
-13960:2:1769
-13961:2:1773
-13962:2:1774
-13963:2:1782
-13964:2:1787
-13965:2:1791
-13966:2:1792
-13967:2:1799
-13968:2:1800
-13969:2:1811
-13970:2:1812
-13971:2:1813
-13972:2:1811
-13973:2:1812
-13974:2:1813
-13975:2:1824
-13976:2:1829
-13977:2:1830
-13978:0:4365
-13979:2:1842
-13980:0:4365
-13981:3:3757
-13982:0:4365
-13983:2:1844
-13984:0:4365
-13985:3:3758
-13986:0:4365
-13987:2:1845
-13988:2:1849
-13989:2:1850
-13990:2:1858
-13991:2:1859
-13992:2:1863
-13993:2:1864
-13994:2:1858
-13995:2:1859
-13996:2:1863
-13997:2:1864
-13998:2:1872
-13999:2:1877
-14000:2:1881
-14001:2:1882
-14002:2:1889
-14003:2:1890
-14004:2:1901
-14005:2:1902
-14006:2:1903
-14007:2:1901
-14008:2:1902
-14009:2:1903
-14010:2:1914
-14011:2:1919
-14012:2:1920
-14013:0:4365
-14014:2:1932
-14015:0:4365
-14016:3:3757
-14017:0:4365
-14018:2:1934
-14019:0:4365
-14020:3:3758
-14021:0:4365
-14022:2:1935
-14023:0:4365
-14024:2:1936
-14025:0:4365
-14026:2:2129
-14027:0:4365
-14028:2:2130
-14029:0:4365
-14030:2:2134
-14031:0:4365
-14032:3:3757
-14033:0:4365
-14034:2:2136
-14035:0:4365
-14036:3:3758
-14037:0:4365
-14038:2:2137
-14039:2:2141
-14040:2:2142
-14041:2:2150
-14042:2:2151
-14043:2:2155
-14044:2:2156
-14045:2:2150
-14046:2:2151
-14047:2:2155
-14048:2:2156
-14049:2:2164
-14050:2:2169
-14051:2:2173
-14052:2:2174
-14053:2:2181
-14054:2:2182
-14055:2:2193
-14056:2:2194
-14057:2:2195
-14058:2:2193
-14059:2:2194
-14060:2:2195
-14061:2:2206
-14062:2:2211
-14063:2:2212
-14064:0:4365
-14065:2:2224
-14066:0:4365
-14067:3:3757
-14068:0:4365
-14069:2:2226
-14070:0:4365
-14071:3:3758
-14072:0:4365
-14073:2:1936
-14074:0:4365
-14075:2:2129
-14076:0:4365
-14077:2:2130
-14078:0:4365
-14079:2:2134
-14080:0:4365
-14081:3:3757
-14082:0:4365
-14083:2:2136
-14084:0:4365
-14085:3:3758
-14086:0:4365
-14087:2:2137
-14088:2:2141
-14089:2:2142
-14090:2:2150
-14091:2:2151
-14092:2:2155
-14093:2:2156
-14094:2:2150
-14095:2:2151
-14096:2:2152
-14097:2:2164
-14098:2:2169
-14099:2:2173
-14100:2:2174
-14101:2:2181
-14102:2:2182
-14103:2:2193
-14104:2:2194
-14105:2:2195
-14106:2:2193
-14107:2:2194
-14108:2:2195
-14109:2:2206
-14110:2:2211
-14111:2:2212
-14112:0:4365
-14113:2:2224
-14114:0:4365
-14115:3:3757
-14116:0:4365
-14117:2:2226
-14118:0:4365
-14119:3:3758
-14120:0:4365
-14121:2:2230
-14122:0:4365
-14123:3:3757
-14124:0:4365
-14125:2:2235
-14126:2:2239
-14127:2:2240
-14128:2:2248
-14129:2:2249
-14130:2:2253
-14131:2:2254
-14132:2:2248
-14133:2:2249
-14134:2:2250
-14135:2:2262
-14136:2:2267
-14137:2:2271
-14138:2:2272
-14139:2:2279
-14140:2:2280
-14141:2:2291
-14142:2:2292
-14143:2:2293
-14144:2:2291
-14145:2:2292
-14146:2:2293
-14147:2:2304
-14148:2:2309
-14149:2:2310
-14150:0:4365
-14151:3:3758
-14152:0:4365
-14153:2:2322
-14154:0:4365
-14155:2:1169
-14156:0:4365
-14157:3:3757
-14158:0:4365
-14159:2:1170
-14160:0:4365
-14161:3:3758
-14162:0:4365
-14163:3:3759
-14164:0:4365
-14165:3:3972
-14166:0:4365
-14167:3:4077
-14168:0:4365
-14169:3:4078
-14170:0:4365
-14171:3:4082
-14172:0:4365
-14173:3:4088
-14174:0:4365
-14175:3:4092
-14176:3:4093
-14177:3:4097
-14178:3:4101
-14179:3:4102
-14180:3:4097
-14181:3:4101
-14182:3:4102
-14183:3:4106
-14184:3:4114
-14185:3:4115
-14186:3:4120
-14187:3:4127
-14188:3:4128
-14189:3:4127
-14190:3:4128
-14191:3:4135
-14192:3:4140
-14193:0:4365
-14194:3:4151
-14195:0:4365
-14196:3:4155
-14197:3:4156
-14198:3:4160
-14199:3:4164
-14200:3:4165
-14201:3:4160
-14202:3:4164
-14203:3:4165
-14204:3:4169
-14205:3:4177
-14206:3:4178
-14207:3:4183
-14208:3:4190
-14209:3:4191
-14210:3:4190
-14211:3:4191
-14212:3:4198
-14213:3:4203
-14214:0:4365
-14215:3:4151
-14216:0:4365
-14217:3:4155
-14218:3:4156
-14219:3:4160
-14220:3:4164
-14221:3:4165
-14222:3:4160
-14223:3:4164
-14224:3:4165
-14225:3:4169
-14226:3:4177
-14227:3:4178
-14228:3:4183
-14229:3:4190
-14230:3:4191
-14231:3:4190
-14232:3:4191
-14233:3:4198
-14234:3:4203
-14235:0:4365
-14236:3:4214
-14237:0:4365
-14238:3:4222
-14239:3:4223
-14240:3:4227
-14241:3:4231
-14242:3:4232
-14243:3:4227
-14244:3:4231
-14245:3:4232
-14246:3:4236
-14247:3:4244
-14248:3:4245
-14249:3:4250
-14250:3:4257
-14251:3:4258
-14252:3:4257
-14253:3:4258
-14254:3:4265
-14255:3:4270
-14256:0:4365
-14257:3:4285
-14258:0:4365
-14259:3:4286
-14260:0:4365
-14261:2:1173
-14262:0:4365
-14263:3:4287
-14264:0:4365
-14265:2:1179
-14266:0:4365
-14267:2:1180
-14268:0:4365
-14269:3:4286
-14270:0:4365
-14271:2:1181
-14272:2:1185
-14273:2:1186
-14274:2:1194
-14275:2:1195
-14276:2:1199
-14277:2:1200
-14278:2:1194
-14279:2:1195
-14280:2:1199
-14281:2:1200
-14282:2:1208
-14283:2:1213
-14284:2:1217
-14285:2:1218
-14286:2:1225
-14287:2:1226
-14288:2:1237
-14289:2:1238
-14290:2:1239
-14291:2:1237
-14292:2:1238
-14293:2:1239
-14294:2:1250
-14295:2:1255
-14296:2:1256
-14297:0:4365
-14298:3:4287
-14299:0:4365
-14300:2:1268
-14301:0:4365
-14302:3:4286
-14303:0:4365
-14304:2:1270
-14305:0:4365
-14306:3:4287
-14307:0:4365
-14308:2:1271
-14309:2:1275
-14310:2:1276
-14311:2:1284
-14312:2:1285
-14313:2:1289
-14314:2:1290
-14315:2:1284
-14316:2:1285
-14317:2:1289
-14318:2:1290
-14319:2:1298
-14320:2:1303
-14321:2:1307
-14322:2:1308
-14323:2:1315
-14324:2:1316
-14325:2:1327
-14326:2:1328
-14327:2:1329
-14328:2:1327
-14329:2:1328
-14330:2:1329
-14331:2:1340
-14332:2:1345
-14333:2:1346
-14334:0:4365
-14335:2:1358
-14336:0:4365
-14337:2:1360
-14338:0:4365
-14339:3:4286
-14340:0:4365
-14341:2:1361
-14342:0:4365
-14343:3:4287
-14344:0:4365
-14345:2:1362
-14346:2:1366
-14347:2:1367
-14348:2:1375
-14349:2:1376
-14350:2:1380
-14351:2:1381
-14352:2:1375
-14353:2:1376
-14354:2:1380
-14355:2:1381
-14356:2:1389
-14357:2:1394
-14358:2:1398
-14359:2:1399
-14360:2:1406
-14361:2:1407
-14362:2:1418
-14363:2:1419
-14364:2:1420
-14365:2:1418
-14366:2:1419
-14367:2:1420
-14368:2:1431
-14369:2:1436
-14370:2:1437
-14371:0:4365
-14372:2:1449
-14373:0:4365
-14374:3:4286
-14375:0:4365
-14376:2:1451
-14377:0:4365
-14378:3:4287
-14379:0:4365
-14380:2:1652
-14381:0:4365
-14382:2:1653
-14383:0:4365
-14384:2:1657
-14385:0:4365
-14386:2:1180
-14387:0:4365
-14388:3:4286
-14389:0:4365
-14390:2:1181
-14391:2:1185
-14392:2:1186
-14393:2:1194
-14394:2:1195
-14395:2:1199
-14396:2:1200
-14397:2:1194
-14398:2:1195
-14399:2:1196
-14400:2:1208
-14401:2:1213
-14402:2:1217
-14403:2:1218
-14404:2:1225
-14405:2:1226
-14406:2:1237
-14407:2:1238
-14408:2:1239
-14409:2:1237
-14410:2:1238
-14411:2:1239
-14412:2:1250
-14413:2:1255
-14414:2:1256
-14415:0:4365
-14416:3:4287
-14417:0:4365
-14418:2:1268
-14419:0:4365
-14420:3:4286
-14421:0:4365
-14422:2:1270
-14423:0:4365
-14424:3:4287
-14425:0:4365
-14426:2:1271
-14427:2:1275
-14428:2:1276
-14429:2:1284
-14430:2:1285
-14431:2:1289
-14432:2:1290
-14433:2:1284
-14434:2:1285
-14435:2:1289
-14436:2:1290
-14437:2:1298
-14438:2:1303
-14439:2:1307
-14440:2:1308
-14441:2:1315
-14442:2:1316
-14443:2:1327
-14444:2:1328
-14445:2:1329
-14446:2:1327
-14447:2:1328
-14448:2:1329
-14449:2:1340
-14450:2:1345
-14451:2:1346
-14452:0:4365
-14453:2:1358
-14454:0:4365
-14455:2:1454
-14456:0:4365
-14457:3:4286
-14458:0:4365
-14459:2:1455
-14460:0:4365
-14461:3:4287
-14462:0:4365
-14463:2:1652
-14464:0:4365
-14465:2:1653
-14466:0:4365
-14467:2:1657
-14468:0:4365
-14469:2:1660
-14470:0:4365
-14471:3:4286
-14472:0:4365
-14473:2:1665
-14474:2:1669
-14475:2:1670
-14476:2:1678
-14477:2:1679
-14478:2:1683
-14479:2:1684
-14480:2:1678
-14481:2:1679
-14482:2:1680
-14483:2:1692
-14484:2:1697
-14485:2:1701
-14486:2:1702
-14487:2:1709
-14488:2:1710
-14489:2:1721
-14490:2:1722
-14491:2:1723
-14492:2:1721
-14493:2:1722
-14494:2:1723
-14495:2:1734
-14496:2:1739
-14497:2:1740
-14498:0:4365
-14499:3:4287
-14500:0:4365
-14501:2:1752
-14502:0:4365
-14503:3:4286
-14504:0:4365
-14505:2:1754
-14506:0:4365
-14507:3:4287
-14508:0:4365
-14509:2:1755
-14510:2:1759
-14511:2:1760
-14512:2:1768
-14513:2:1769
-14514:2:1773
-14515:2:1774
-14516:2:1768
-14517:2:1769
-14518:2:1773
-14519:2:1774
-14520:2:1782
-14521:2:1787
-14522:2:1791
-14523:2:1792
-14524:2:1799
-14525:2:1800
-14526:2:1811
-14527:2:1812
-14528:2:1813
-14529:2:1811
-14530:2:1812
-14531:2:1813
-14532:2:1824
-14533:2:1829
-14534:2:1830
-14535:0:4365
-14536:2:1842
-14537:0:4365
-14538:3:4286
-14539:0:4365
-14540:2:1844
-14541:0:4365
-14542:3:4287
-14543:0:4365
-14544:2:1845
-14545:2:1849
-14546:2:1850
-14547:2:1858
-14548:2:1859
-14549:2:1863
-14550:2:1864
-14551:2:1858
-14552:2:1859
-14553:2:1863
-14554:2:1864
-14555:2:1872
-14556:2:1877
-14557:2:1881
-14558:2:1882
-14559:2:1889
-14560:2:1890
-14561:2:1901
-14562:2:1902
-14563:2:1903
-14564:2:1901
-14565:2:1902
-14566:2:1903
-14567:2:1914
-14568:2:1919
-14569:2:1920
-14570:0:4365
-14571:2:1932
-14572:0:4365
-14573:3:4286
-14574:0:4365
-14575:2:1934
-14576:0:4365
-14577:3:4287
-14578:0:4365
-14579:2:1935
-14580:0:4365
-14581:2:1936
-14582:0:4365
-14583:2:2129
-14584:0:4365
-14585:2:2130
-14586:0:4365
-14587:2:2134
-14588:0:4365
-14589:3:4286
-14590:0:4365
-14591:2:2136
-14592:0:4365
-14593:3:4287
-14594:0:4365
-14595:2:2137
-14596:2:2141
-14597:2:2142
-14598:2:2150
-14599:2:2151
-14600:2:2155
-14601:2:2156
-14602:2:2150
-14603:2:2151
-14604:2:2155
-14605:2:2156
-14606:2:2164
-14607:2:2169
-14608:2:2173
-14609:2:2174
-14610:2:2181
-14611:2:2182
-14612:2:2193
-14613:2:2194
-14614:2:2195
-14615:2:2193
-14616:2:2194
-14617:2:2195
-14618:2:2206
-14619:2:2211
-14620:2:2212
-14621:0:4365
-14622:2:2224
-14623:0:4365
-14624:3:4286
-14625:0:4365
-14626:2:2226
-14627:0:4365
-14628:3:4287
-14629:0:4365
-14630:2:1936
-14631:0:4365
-14632:2:2129
-14633:0:4365
-14634:2:2130
-14635:0:4365
-14636:2:2134
-14637:0:4365
-14638:3:4286
-14639:0:4365
-14640:2:2136
-14641:0:4365
-14642:3:4287
-14643:0:4365
-14644:2:2137
-14645:2:2141
-14646:2:2142
-14647:2:2150
-14648:2:2151
-14649:2:2155
-14650:2:2156
-14651:2:2150
-14652:2:2151
-14653:2:2152
-14654:2:2164
-14655:2:2169
-14656:2:2173
-14657:2:2174
-14658:2:2181
-14659:2:2182
-14660:2:2193
-14661:2:2194
-14662:2:2195
-14663:2:2193
-14664:2:2194
-14665:2:2195
-14666:2:2206
-14667:2:2211
-14668:2:2212
-14669:0:4365
-14670:2:2224
-14671:0:4365
-14672:3:4286
-14673:0:4365
-14674:2:2226
-14675:0:4365
-14676:3:4287
-14677:0:4365
-14678:2:2230
-14679:0:4365
-14680:3:4286
-14681:0:4365
-14682:2:2235
-14683:2:2239
-14684:2:2240
-14685:2:2248
-14686:2:2249
-14687:2:2253
-14688:2:2254
-14689:2:2248
-14690:2:2249
-14691:2:2250
-14692:2:2262
-14693:2:2267
-14694:2:2271
-14695:2:2272
-14696:2:2279
-14697:2:2280
-14698:2:2291
-14699:2:2292
-14700:2:2293
-14701:2:2291
-14702:2:2292
-14703:2:2293
-14704:2:2304
-14705:2:2309
-14706:2:2310
-14707:0:4365
-14708:3:4287
-14709:0:4365
-14710:2:2322
-14711:0:4365
-14712:2:1169
-14713:0:4365
-14714:3:4286
-14715:0:4365
-14716:2:1170
-14717:0:4365
-14718:3:4287
-14719:0:4365
-14720:3:4288
-14721:0:4365
-14722:3:4294
-14723:0:4365
-14724:3:4295
-14725:0:4365
-14726:3:2338
-14727:0:4365
-14728:3:2339
-14729:3:2343
-14730:3:2344
-14731:3:2352
-14732:3:2353
-14733:3:2357
-14734:3:2358
-14735:3:2352
-14736:3:2353
-14737:3:2357
-14738:3:2358
-14739:3:2366
-14740:3:2371
-14741:3:2375
-14742:3:2376
-14743:3:2383
-14744:3:2384
-14745:3:2395
-14746:3:2396
-14747:3:2397
-14748:3:2395
-14749:3:2396
-14750:3:2397
-14751:3:2408
-14752:3:2413
-14753:3:2414
-14754:0:4365
-14755:3:2426
-14756:0:4365
-14757:3:2427
-14758:0:4365
-14759:2:1173
-14760:0:4365
-14761:3:2428
-14762:0:4365
-14763:2:1179
-14764:0:4365
-14765:2:1180
-14766:0:4365
-14767:3:2427
-14768:0:4365
-14769:2:1181
-14770:2:1185
-14771:2:1186
-14772:2:1194
-14773:2:1195
-14774:2:1199
-14775:2:1200
-14776:2:1194
-14777:2:1195
-14778:2:1199
-14779:2:1200
-14780:2:1208
-14781:2:1213
-14782:2:1217
-14783:2:1218
-14784:2:1225
-14785:2:1226
-14786:2:1237
-14787:2:1238
-14788:2:1239
-14789:2:1237
-14790:2:1238
-14791:2:1239
-14792:2:1250
-14793:2:1255
-14794:2:1256
-14795:0:4365
-14796:3:2428
-14797:0:4365
-14798:2:1268
-14799:0:4365
-14800:3:2427
-14801:0:4365
-14802:2:1270
-14803:0:4365
-14804:3:2428
-14805:0:4365
-14806:2:1271
-14807:2:1275
-14808:2:1276
-14809:2:1284
-14810:2:1285
-14811:2:1289
-14812:2:1290
-14813:2:1284
-14814:2:1285
-14815:2:1289
-14816:2:1290
-14817:2:1298
-14818:2:1303
-14819:2:1307
-14820:2:1308
-14821:2:1315
-14822:2:1316
-14823:2:1327
-14824:2:1328
-14825:2:1329
-14826:2:1327
-14827:2:1328
-14828:2:1329
-14829:2:1340
-14830:2:1345
-14831:2:1346
-14832:0:4365
-14833:2:1358
-14834:0:4365
-14835:2:1360
-14836:0:4365
-14837:3:2427
-14838:0:4365
-14839:2:1361
-14840:0:4365
-14841:3:2428
-14842:0:4365
-14843:2:1362
-14844:2:1366
-14845:2:1367
-14846:2:1375
-14847:2:1376
-14848:2:1380
-14849:2:1381
-14850:2:1375
-14851:2:1376
-14852:2:1380
-14853:2:1381
-14854:2:1389
-14855:2:1394
-14856:2:1398
-14857:2:1399
-14858:2:1406
-14859:2:1407
-14860:2:1418
-14861:2:1419
-14862:2:1420
-14863:2:1418
-14864:2:1419
-14865:2:1420
-14866:2:1431
-14867:2:1436
-14868:2:1437
-14869:0:4365
-14870:2:1449
-14871:0:4365
-14872:3:2427
-14873:0:4365
-14874:2:1451
-14875:0:4365
-14876:3:2428
-14877:0:4365
-14878:2:1652
-14879:0:4365
-14880:2:1653
-14881:0:4365
-14882:2:1657
-14883:0:4365
-14884:2:1180
-14885:0:4365
-14886:3:2427
-14887:0:4365
-14888:2:1181
-14889:2:1185
-14890:2:1186
-14891:2:1194
-14892:2:1195
-14893:2:1199
-14894:2:1200
-14895:2:1194
-14896:2:1195
-14897:2:1196
-14898:2:1208
-14899:2:1213
-14900:2:1217
-14901:2:1218
-14902:2:1225
-14903:2:1226
-14904:2:1237
-14905:2:1238
-14906:2:1239
-14907:2:1237
-14908:2:1238
-14909:2:1239
-14910:2:1250
-14911:2:1255
-14912:2:1256
-14913:0:4365
-14914:3:2428
-14915:0:4365
-14916:2:1268
-14917:0:4365
-14918:3:2427
-14919:0:4365
-14920:2:1270
-14921:0:4365
-14922:3:2428
-14923:0:4365
-14924:2:1271
-14925:2:1275
-14926:2:1276
-14927:2:1284
-14928:2:1285
-14929:2:1289
-14930:2:1290
-14931:2:1284
-14932:2:1285
-14933:2:1289
-14934:2:1290
-14935:2:1298
-14936:2:1303
-14937:2:1307
-14938:2:1308
-14939:2:1315
-14940:2:1316
-14941:2:1327
-14942:2:1328
-14943:2:1329
-14944:2:1327
-14945:2:1328
-14946:2:1329
-14947:2:1340
-14948:2:1345
-14949:2:1346
-14950:0:4365
-14951:2:1358
-14952:0:4365
-14953:2:1454
-14954:0:4365
-14955:3:2427
-14956:0:4365
-14957:2:1455
-14958:0:4365
-14959:3:2428
-14960:0:4365
-14961:2:1652
-14962:0:4365
-14963:2:1653
-14964:0:4365
-14965:2:1657
-14966:0:4365
-14967:2:1660
-14968:0:4365
-14969:3:2427
-14970:0:4365
-14971:2:1665
-14972:2:1669
-14973:2:1670
-14974:2:1678
-14975:2:1679
-14976:2:1683
-14977:2:1684
-14978:2:1678
-14979:2:1679
-14980:2:1680
-14981:2:1692
-14982:2:1697
-14983:2:1701
-14984:2:1702
-14985:2:1709
-14986:2:1710
-14987:2:1721
-14988:2:1722
-14989:2:1723
-14990:2:1721
-14991:2:1722
-14992:2:1723
-14993:2:1734
-14994:2:1739
-14995:2:1740
-14996:0:4365
-14997:3:2428
-14998:0:4365
-14999:2:1752
-15000:0:4365
-15001:3:2427
-15002:0:4365
-15003:2:1754
-15004:0:4365
-15005:3:2428
-15006:0:4365
-15007:2:1755
-15008:2:1759
-15009:2:1760
-15010:2:1768
-15011:2:1769
-15012:2:1773
-15013:2:1774
-15014:2:1768
-15015:2:1769
-15016:2:1773
-15017:2:1774
-15018:2:1782
-15019:2:1787
-15020:2:1791
-15021:2:1792
-15022:2:1799
-15023:2:1800
-15024:2:1811
-15025:2:1812
-15026:2:1813
-15027:2:1811
-15028:2:1812
-15029:2:1813
-15030:2:1824
-15031:2:1829
-15032:2:1830
-15033:0:4365
-15034:2:1842
-15035:0:4365
-15036:3:2427
-15037:0:4365
-15038:2:1844
-15039:0:4363
-15040:3:2428
-15041:0:4369
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.define b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.log b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.log
deleted file mode 100644 (file)
index 27a963a..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-Depth=   11386 States=    1e+06 Transitions= 1.56e+07 Memory=   527.287        t=   12.8 R=   8e+04
-pan: claim violated! (at depth 2146)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 72 byte, depth reached 11386, errors: 1
-  1223588 states, stored
- 17987399 states, matched
- 19210987 transitions (= stored+matched)
- 70012127 atomic steps
-hash conflicts:   4173157 (resolved)
-
-Stats on memory usage (in Megabytes):
-  116.690      equivalent memory usage for states (stored*(State-vector + overhead))
-   75.177      actual memory usage for states (compression: 64.42%)
-               state-vector as stored = 36 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  540.861      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 151, "(1)"
-       line 419, "pan.___", state 181, "(1)"
-       line 400, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 242, "(1)"
-       line 419, "pan.___", state 272, "(1)"
-       line 400, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 331, "(1)"
-       line 409, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 360, "(1)"
-       line 419, "pan.___", state 390, "(1)"
-       line 541, "pan.___", state 414, "-end-"
-       (18 of 414 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 410, "pan.___", state 153, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 400, "pan.___", state 209, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 223, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 254, "(1)"
-       line 414, "pan.___", state 267, "(1)"
-       line 400, "pan.___", state 300, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 314, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 345, "(1)"
-       line 414, "pan.___", state 358, "(1)"
-       line 400, "pan.___", state 395, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 409, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 440, "(1)"
-       line 414, "pan.___", state 453, "(1)"
-       line 400, "pan.___", state 488, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 533, "(1)"
-       line 414, "pan.___", state 546, "(1)"
-       line 400, "pan.___", state 582, "(1)"
-       line 404, "pan.___", state 594, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 638, "(1)"
-       line 404, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 731, "(1)"
-       line 404, "pan.___", state 777, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 795, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 821, "(1)"
-       line 419, "pan.___", state 838, "(1)"
-       line 404, "pan.___", state 868, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 886, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 912, "(1)"
-       line 419, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 963, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 981, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1007, "(1)"
-       line 419, "pan.___", state 1024, "(1)"
-       line 400, "pan.___", state 1050, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1053, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1053, "else"
-       line 400, "pan.___", state 1056, "(1)"
-       line 404, "pan.___", state 1064, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1066, "(1)"
-       line 404, "pan.___", state 1067, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1067, "else"
-       line 404, "pan.___", state 1070, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 402, "pan.___", state 1076, "((i<1))"
-       line 402, "pan.___", state 1076, "((i>=1))"
-       line 409, "pan.___", state 1082, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1095, "(1)"
-       line 410, "pan.___", state 1096, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1096, "else"
-       line 410, "pan.___", state 1099, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 414, "pan.___", state 1108, "(1)"
-       line 414, "pan.___", state 1109, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1109, "else"
-       line 414, "pan.___", state 1112, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 412, "pan.___", state 1118, "((i<1))"
-       line 412, "pan.___", state 1118, "((i>=1))"
-       line 419, "pan.___", state 1125, "(1)"
-       line 419, "pan.___", state 1126, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1126, "else"
-       line 419, "pan.___", state 1129, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 404, "pan.___", state 1164, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1208, "(1)"
-       line 404, "pan.___", state 1254, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1298, "(1)"
-       line 400, "pan.___", state 1334, "(1)"
-       line 404, "pan.___", state 1346, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1390, "(1)"
-       line 404, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1483, "(1)"
-       line 404, "pan.___", state 1529, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1547, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1573, "(1)"
-       line 419, "pan.___", state 1590, "(1)"
-       line 404, "pan.___", state 1620, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1638, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1664, "(1)"
-       line 419, "pan.___", state 1681, "(1)"
-       line 404, "pan.___", state 1715, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1733, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1759, "(1)"
-       line 419, "pan.___", state 1776, "(1)"
-       line 400, "pan.___", state 1802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1804, "(1)"
-       line 400, "pan.___", state 1805, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1805, "else"
-       line 400, "pan.___", state 1808, "(1)"
-       line 404, "pan.___", state 1816, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1818, "(1)"
-       line 404, "pan.___", state 1819, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1819, "else"
-       line 404, "pan.___", state 1822, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 402, "pan.___", state 1828, "((i<1))"
-       line 402, "pan.___", state 1828, "((i>=1))"
-       line 409, "pan.___", state 1834, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1847, "(1)"
-       line 410, "pan.___", state 1848, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1848, "else"
-       line 410, "pan.___", state 1851, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 414, "pan.___", state 1860, "(1)"
-       line 414, "pan.___", state 1861, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1861, "else"
-       line 414, "pan.___", state 1864, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 412, "pan.___", state 1870, "((i<1))"
-       line 412, "pan.___", state 1870, "((i>=1))"
-       line 419, "pan.___", state 1877, "(1)"
-       line 419, "pan.___", state 1878, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1878, "else"
-       line 419, "pan.___", state 1881, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 404, "pan.___", state 1916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1960, "(1)"
-       line 404, "pan.___", state 2007, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2051, "(1)"
-       line 404, "pan.___", state 2102, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2146, "(1)"
-       line 703, "pan.___", state 2192, "-end-"
-       (144 of 2192 states)
-unreached in proctype :init:
-       line 710, "pan.___", state 9, "((j<2))"
-       line 710, "pan.___", state 9, "((j>=2))"
-       line 711, "pan.___", state 20, "((j<2))"
-       line 711, "pan.___", state 20, "((j>=2))"
-       line 716, "pan.___", state 33, "((j<2))"
-       line 716, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 750, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 15.9 seconds
-pan: rate 77100.693 states/second
-pan: avg transition delay 8.2609e-07 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.spin.input b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 927df3f..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 04e7425..0000000
+++ /dev/null
@@ -1,2149 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2654
-2:3:2606
-3:3:2609
-4:3:2609
-5:3:2612
-6:3:2620
-7:3:2620
-8:3:2623
-9:3:2629
-10:3:2633
-11:3:2633
-12:3:2636
-13:3:2644
-14:3:2648
-15:3:2649
-16:0:2654
-17:3:2651
-18:0:2654
-19:2:416
-20:0:2654
-21:2:422
-22:0:2654
-23:2:423
-24:0:2654
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:2654
-45:2:511
-46:0:2654
-47:2:513
-48:2:514
-49:0:2654
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:2654
-69:2:605
-70:0:2654
-71:2:607
-72:0:2654
-73:2:608
-74:0:2654
-75:2:618
-76:0:2654
-77:2:619
-78:2:623
-79:2:624
-80:2:632
-81:2:633
-82:2:637
-83:2:638
-84:2:646
-85:2:651
-86:2:655
-87:2:656
-88:2:663
-89:2:664
-90:2:675
-91:2:676
-92:2:677
-93:2:688
-94:2:693
-95:2:694
-96:0:2654
-97:2:709
-98:0:2654
-99:2:710
-100:2:714
-101:2:715
-102:2:723
-103:2:724
-104:2:728
-105:2:729
-106:2:737
-107:2:742
-108:2:746
-109:2:747
-110:2:754
-111:2:755
-112:2:766
-113:2:767
-114:2:768
-115:2:779
-116:2:784
-117:2:785
-118:0:2654
-119:2:800
-120:0:2654
-121:2:805
-122:2:809
-123:2:810
-124:2:818
-125:2:819
-126:2:823
-127:2:824
-128:2:832
-129:2:837
-130:2:841
-131:2:842
-132:2:849
-133:2:850
-134:2:861
-135:2:862
-136:2:863
-137:2:874
-138:2:879
-139:2:880
-140:0:2654
-141:2:895
-142:0:2654
-143:2:897
-144:0:2654
-145:2:898
-146:2:902
-147:2:903
-148:2:911
-149:2:912
-150:2:916
-151:2:917
-152:2:925
-153:2:930
-154:2:934
-155:2:935
-156:2:942
-157:2:943
-158:2:954
-159:2:955
-160:2:956
-161:2:967
-162:2:972
-163:2:973
-164:0:2654
-165:2:985
-166:0:2654
-167:2:987
-168:0:2654
-169:2:990
-170:2:991
-171:2:1003
-172:2:1004
-173:2:1008
-174:2:1009
-175:2:1017
-176:2:1022
-177:2:1026
-178:2:1027
-179:2:1034
-180:2:1035
-181:2:1046
-182:2:1047
-183:2:1048
-184:2:1059
-185:2:1064
-186:2:1065
-187:0:2654
-188:2:1077
-189:0:2654
-190:2:1079
-191:0:2654
-192:2:1080
-193:0:2654
-194:2:1081
-195:0:2654
-196:2:1082
-197:0:2654
-198:2:1083
-199:2:1087
-200:2:1088
-201:2:1096
-202:2:1097
-203:2:1101
-204:2:1102
-205:2:1110
-206:2:1115
-207:2:1119
-208:2:1120
-209:2:1127
-210:2:1128
-211:2:1139
-212:2:1140
-213:2:1141
-214:2:1152
-215:2:1157
-216:2:1158
-217:0:2654
-218:2:1170
-219:0:2654
-220:2:1451
-221:0:2654
-222:2:1549
-223:0:2654
-224:2:1550
-225:0:2654
-226:2:1554
-227:0:2654
-228:2:1560
-229:2:1564
-230:2:1565
-231:2:1573
-232:2:1574
-233:2:1578
-234:2:1579
-235:2:1587
-236:2:1592
-237:2:1596
-238:2:1597
-239:2:1604
-240:2:1605
-241:2:1616
-242:2:1617
-243:2:1618
-244:2:1629
-245:2:1634
-246:2:1635
-247:0:2654
-248:2:1647
-249:0:2654
-250:2:1649
-251:0:2654
-252:2:1650
-253:2:1654
-254:2:1655
-255:2:1663
-256:2:1664
-257:2:1668
-258:2:1669
-259:2:1677
-260:2:1682
-261:2:1686
-262:2:1687
-263:2:1694
-264:2:1695
-265:2:1706
-266:2:1707
-267:2:1708
-268:2:1719
-269:2:1724
-270:2:1725
-271:0:2654
-272:2:1737
-273:0:2654
-274:2:1739
-275:0:2654
-276:2:1742
-277:2:1743
-278:2:1755
-279:2:1756
-280:2:1760
-281:2:1761
-282:2:1769
-283:2:1774
-284:2:1778
-285:2:1779
-286:2:1786
-287:2:1787
-288:2:1798
-289:2:1799
-290:2:1800
-291:2:1811
-292:2:1816
-293:2:1817
-294:0:2654
-295:2:1829
-296:0:2654
-297:2:1831
-298:0:2654
-299:2:1832
-300:0:2654
-301:2:1833
-302:0:2654
-303:2:1834
-304:0:2654
-305:2:1835
-306:2:1839
-307:2:1840
-308:2:1848
-309:2:1849
-310:2:1853
-311:2:1854
-312:2:1862
-313:2:1867
-314:2:1871
-315:2:1872
-316:2:1879
-317:2:1880
-318:2:1891
-319:2:1892
-320:2:1893
-321:2:1904
-322:2:1909
-323:2:1910
-324:0:2654
-325:2:1922
-326:0:2654
-327:2:2203
-328:0:2654
-329:2:2301
-330:0:2654
-331:2:2302
-332:0:2654
-333:2:2306
-334:0:2654
-335:2:2312
-336:2:2316
-337:2:2317
-338:2:2325
-339:2:2326
-340:2:2330
-341:2:2331
-342:2:2339
-343:2:2344
-344:2:2348
-345:2:2349
-346:2:2356
-347:2:2357
-348:2:2368
-349:2:2369
-350:2:2370
-351:2:2381
-352:2:2386
-353:2:2387
-354:0:2654
-355:2:2402
-356:0:2654
-357:2:2403
-358:2:2407
-359:2:2408
-360:2:2416
-361:2:2417
-362:2:2421
-363:2:2422
-364:2:2430
-365:2:2435
-366:2:2439
-367:2:2440
-368:2:2447
-369:2:2448
-370:2:2459
-371:2:2460
-372:2:2461
-373:2:2472
-374:2:2477
-375:2:2478
-376:0:2654
-377:2:2493
-378:0:2654
-379:2:2498
-380:2:2502
-381:2:2503
-382:2:2511
-383:2:2512
-384:2:2516
-385:2:2517
-386:2:2525
-387:2:2530
-388:2:2534
-389:2:2535
-390:2:2542
-391:2:2543
-392:2:2554
-393:2:2555
-394:2:2556
-395:2:2567
-396:2:2572
-397:2:2573
-398:0:2654
-399:2:2588
-400:0:2654
-401:2:2590
-402:0:2654
-403:2:2591
-404:0:2654
-405:2:423
-406:0:2654
-407:2:424
-408:2:428
-409:2:429
-410:2:437
-411:2:438
-412:2:442
-413:2:443
-414:2:451
-415:2:456
-416:2:460
-417:2:461
-418:2:468
-419:2:469
-420:2:480
-421:2:481
-422:2:482
-423:2:493
-424:2:498
-425:2:499
-426:0:2654
-427:2:511
-428:0:2654
-429:2:513
-430:2:514
-431:0:2654
-432:2:518
-433:2:522
-434:2:523
-435:2:531
-436:2:532
-437:2:536
-438:2:537
-439:2:545
-440:2:550
-441:2:551
-442:2:562
-443:2:563
-444:2:574
-445:2:575
-446:2:576
-447:2:587
-448:2:592
-449:2:593
-450:0:2654
-451:2:605
-452:0:2654
-453:2:607
-454:0:2654
-455:2:608
-456:0:2654
-457:2:618
-458:0:2654
-459:2:619
-460:2:623
-461:2:624
-462:2:632
-463:2:633
-464:2:637
-465:2:638
-466:2:646
-467:2:651
-468:2:655
-469:2:656
-470:2:663
-471:2:664
-472:2:675
-473:2:676
-474:2:677
-475:2:688
-476:2:693
-477:2:694
-478:0:2654
-479:2:709
-480:0:2654
-481:2:710
-482:2:714
-483:2:715
-484:2:723
-485:2:724
-486:2:728
-487:2:729
-488:2:737
-489:2:742
-490:2:746
-491:2:747
-492:2:754
-493:2:755
-494:2:766
-495:2:767
-496:2:768
-497:2:779
-498:2:784
-499:2:785
-500:0:2654
-501:2:800
-502:0:2654
-503:2:805
-504:2:809
-505:2:810
-506:2:818
-507:2:819
-508:2:823
-509:2:824
-510:2:832
-511:2:837
-512:2:841
-513:2:842
-514:2:849
-515:2:850
-516:2:861
-517:2:862
-518:2:863
-519:2:874
-520:2:879
-521:2:880
-522:0:2654
-523:2:895
-524:0:2654
-525:2:897
-526:0:2654
-527:2:898
-528:2:902
-529:2:903
-530:2:911
-531:2:912
-532:2:916
-533:2:917
-534:2:925
-535:2:930
-536:2:934
-537:2:935
-538:2:942
-539:2:943
-540:2:954
-541:2:955
-542:2:956
-543:2:967
-544:2:972
-545:2:973
-546:0:2654
-547:2:985
-548:0:2654
-549:2:987
-550:0:2654
-551:2:990
-552:2:991
-553:2:1003
-554:2:1004
-555:2:1008
-556:2:1009
-557:2:1017
-558:2:1022
-559:2:1026
-560:2:1027
-561:2:1034
-562:2:1035
-563:2:1046
-564:2:1047
-565:2:1048
-566:2:1059
-567:2:1064
-568:2:1065
-569:0:2654
-570:2:1077
-571:0:2654
-572:2:1079
-573:0:2654
-574:2:1080
-575:0:2654
-576:2:1081
-577:0:2654
-578:2:1082
-579:0:2654
-580:2:1083
-581:2:1087
-582:2:1088
-583:2:1096
-584:2:1097
-585:2:1101
-586:2:1102
-587:2:1110
-588:2:1115
-589:2:1119
-590:2:1120
-591:2:1127
-592:2:1128
-593:2:1139
-594:2:1140
-595:2:1141
-596:2:1152
-597:2:1157
-598:2:1158
-599:0:2654
-600:2:1170
-601:0:2654
-602:2:1451
-603:0:2654
-604:2:1549
-605:0:2654
-606:2:1550
-607:0:2654
-608:2:1554
-609:0:2654
-610:2:1560
-611:2:1564
-612:2:1565
-613:2:1573
-614:2:1574
-615:2:1578
-616:2:1579
-617:2:1587
-618:2:1592
-619:2:1596
-620:2:1597
-621:2:1604
-622:2:1605
-623:2:1616
-624:2:1617
-625:2:1618
-626:2:1629
-627:2:1634
-628:2:1635
-629:0:2654
-630:2:1647
-631:0:2654
-632:2:1649
-633:0:2654
-634:2:1650
-635:2:1654
-636:2:1655
-637:2:1663
-638:2:1664
-639:2:1668
-640:2:1669
-641:2:1677
-642:2:1682
-643:2:1686
-644:2:1687
-645:2:1694
-646:2:1695
-647:2:1706
-648:2:1707
-649:2:1708
-650:2:1719
-651:2:1724
-652:2:1725
-653:0:2654
-654:2:1737
-655:0:2654
-656:2:1739
-657:0:2654
-658:2:1742
-659:2:1743
-660:2:1755
-661:2:1756
-662:2:1760
-663:2:1761
-664:2:1769
-665:2:1774
-666:2:1778
-667:2:1779
-668:2:1786
-669:2:1787
-670:2:1798
-671:2:1799
-672:2:1800
-673:2:1811
-674:2:1816
-675:2:1817
-676:0:2654
-677:2:1829
-678:0:2654
-679:2:1831
-680:0:2654
-681:2:1832
-682:0:2654
-683:2:1833
-684:0:2654
-685:2:1834
-686:0:2654
-687:2:1835
-688:2:1839
-689:2:1840
-690:2:1848
-691:2:1849
-692:2:1853
-693:2:1854
-694:2:1862
-695:2:1867
-696:2:1871
-697:2:1872
-698:2:1879
-699:2:1880
-700:2:1891
-701:2:1892
-702:2:1893
-703:2:1904
-704:2:1909
-705:2:1910
-706:0:2654
-707:2:1922
-708:0:2654
-709:2:2203
-710:0:2654
-711:2:2301
-712:0:2654
-713:2:2302
-714:0:2654
-715:2:2306
-716:0:2654
-717:2:2312
-718:2:2316
-719:2:2317
-720:2:2325
-721:2:2326
-722:2:2330
-723:2:2331
-724:2:2339
-725:2:2344
-726:2:2348
-727:2:2349
-728:2:2356
-729:2:2357
-730:2:2368
-731:2:2369
-732:2:2370
-733:2:2381
-734:2:2386
-735:2:2387
-736:0:2654
-737:2:2402
-738:0:2654
-739:2:2403
-740:2:2407
-741:2:2408
-742:2:2416
-743:2:2417
-744:2:2421
-745:2:2422
-746:2:2430
-747:2:2435
-748:2:2439
-749:2:2440
-750:2:2447
-751:2:2448
-752:2:2459
-753:2:2460
-754:2:2461
-755:2:2472
-756:2:2477
-757:2:2478
-758:0:2654
-759:2:2493
-760:0:2654
-761:2:2498
-762:2:2502
-763:2:2503
-764:2:2511
-765:2:2512
-766:2:2516
-767:2:2517
-768:2:2525
-769:2:2530
-770:2:2534
-771:2:2535
-772:2:2542
-773:2:2543
-774:2:2554
-775:2:2555
-776:2:2556
-777:2:2567
-778:2:2572
-779:2:2573
-780:0:2654
-781:2:2588
-782:0:2654
-783:2:2590
-784:0:2654
-785:2:2591
-786:0:2654
-787:2:423
-788:0:2654
-789:2:424
-790:2:428
-791:2:429
-792:2:437
-793:2:438
-794:2:442
-795:2:443
-796:2:451
-797:2:456
-798:2:460
-799:2:461
-800:2:468
-801:2:469
-802:2:480
-803:2:481
-804:2:482
-805:2:493
-806:2:498
-807:2:499
-808:0:2654
-809:2:511
-810:0:2654
-811:2:513
-812:2:514
-813:0:2654
-814:2:518
-815:2:522
-816:2:523
-817:2:531
-818:2:532
-819:2:536
-820:2:537
-821:2:545
-822:2:550
-823:2:551
-824:2:562
-825:2:563
-826:2:574
-827:2:575
-828:2:576
-829:2:587
-830:2:592
-831:2:593
-832:0:2654
-833:2:605
-834:0:2654
-835:2:607
-836:0:2654
-837:2:608
-838:0:2654
-839:2:618
-840:0:2654
-841:2:619
-842:2:623
-843:2:624
-844:2:632
-845:2:633
-846:2:637
-847:2:638
-848:2:646
-849:2:651
-850:2:655
-851:2:656
-852:2:663
-853:2:664
-854:2:675
-855:2:676
-856:2:677
-857:2:688
-858:2:693
-859:2:694
-860:0:2654
-861:2:709
-862:0:2654
-863:2:710
-864:2:714
-865:2:715
-866:2:723
-867:2:724
-868:2:728
-869:2:729
-870:2:737
-871:2:742
-872:2:746
-873:2:747
-874:2:754
-875:2:755
-876:2:766
-877:2:767
-878:2:768
-879:2:779
-880:2:784
-881:2:785
-882:0:2654
-883:2:800
-884:0:2654
-885:2:805
-886:2:809
-887:2:810
-888:2:818
-889:2:819
-890:2:823
-891:2:824
-892:2:832
-893:2:837
-894:2:841
-895:2:842
-896:2:849
-897:2:850
-898:2:861
-899:2:862
-900:2:863
-901:2:874
-902:2:879
-903:2:880
-904:0:2654
-905:2:895
-906:0:2654
-907:2:897
-908:0:2654
-909:2:898
-910:2:902
-911:2:903
-912:2:911
-913:2:912
-914:2:916
-915:2:917
-916:2:925
-917:2:930
-918:2:934
-919:2:935
-920:2:942
-921:2:943
-922:2:954
-923:2:955
-924:2:956
-925:2:967
-926:2:972
-927:2:973
-928:0:2654
-929:2:985
-930:0:2654
-931:2:987
-932:0:2654
-933:2:990
-934:2:991
-935:2:1003
-936:2:1004
-937:2:1008
-938:2:1009
-939:2:1017
-940:2:1022
-941:2:1026
-942:2:1027
-943:2:1034
-944:2:1035
-945:2:1046
-946:2:1047
-947:2:1048
-948:2:1059
-949:2:1064
-950:2:1065
-951:0:2654
-952:2:1077
-953:0:2654
-954:2:1079
-955:0:2654
-956:2:1080
-957:0:2654
-958:2:1081
-959:0:2654
-960:2:1082
-961:0:2654
-962:2:1083
-963:2:1087
-964:2:1088
-965:2:1096
-966:2:1097
-967:2:1101
-968:2:1102
-969:2:1110
-970:2:1115
-971:2:1119
-972:2:1120
-973:2:1127
-974:2:1128
-975:2:1139
-976:2:1140
-977:2:1141
-978:2:1152
-979:2:1157
-980:2:1158
-981:0:2654
-982:2:1170
-983:0:2654
-984:2:1451
-985:0:2654
-986:2:1549
-987:0:2654
-988:2:1550
-989:0:2654
-990:2:1554
-991:0:2654
-992:2:1560
-993:2:1564
-994:2:1565
-995:2:1573
-996:2:1574
-997:2:1578
-998:2:1579
-999:2:1587
-1000:2:1592
-1001:2:1596
-1002:2:1597
-1003:2:1604
-1004:2:1605
-1005:2:1616
-1006:2:1617
-1007:2:1618
-1008:2:1629
-1009:2:1634
-1010:2:1635
-1011:0:2654
-1012:2:1647
-1013:0:2654
-1014:2:1649
-1015:0:2654
-1016:2:1650
-1017:2:1654
-1018:2:1655
-1019:2:1663
-1020:2:1664
-1021:2:1668
-1022:2:1669
-1023:2:1677
-1024:2:1682
-1025:2:1686
-1026:2:1687
-1027:2:1694
-1028:2:1695
-1029:2:1706
-1030:2:1707
-1031:2:1708
-1032:2:1719
-1033:2:1724
-1034:2:1725
-1035:0:2654
-1036:2:1737
-1037:0:2654
-1038:2:1739
-1039:0:2654
-1040:2:1742
-1041:2:1743
-1042:2:1755
-1043:2:1756
-1044:2:1760
-1045:2:1761
-1046:2:1769
-1047:2:1774
-1048:2:1778
-1049:2:1779
-1050:2:1786
-1051:2:1787
-1052:2:1798
-1053:2:1799
-1054:2:1800
-1055:2:1811
-1056:2:1816
-1057:2:1817
-1058:0:2654
-1059:2:1829
-1060:0:2654
-1061:2:1831
-1062:0:2654
-1063:2:1832
-1064:0:2654
-1065:2:1833
-1066:0:2654
-1067:2:1834
-1068:0:2654
-1069:2:1835
-1070:2:1839
-1071:2:1840
-1072:2:1848
-1073:2:1849
-1074:2:1853
-1075:2:1854
-1076:2:1862
-1077:2:1867
-1078:2:1871
-1079:2:1872
-1080:2:1879
-1081:2:1880
-1082:2:1891
-1083:2:1892
-1084:2:1893
-1085:2:1904
-1086:2:1909
-1087:2:1910
-1088:0:2654
-1089:2:1922
-1090:0:2654
-1091:2:2203
-1092:0:2654
-1093:2:2301
-1094:0:2654
-1095:2:2302
-1096:0:2654
-1097:2:2306
-1098:0:2654
-1099:2:2312
-1100:2:2316
-1101:2:2317
-1102:2:2325
-1103:2:2326
-1104:2:2330
-1105:2:2331
-1106:2:2339
-1107:2:2344
-1108:2:2348
-1109:2:2349
-1110:2:2356
-1111:2:2357
-1112:2:2368
-1113:2:2369
-1114:2:2370
-1115:2:2381
-1116:2:2386
-1117:2:2387
-1118:0:2654
-1119:2:2402
-1120:0:2654
-1121:2:2403
-1122:2:2407
-1123:2:2408
-1124:2:2416
-1125:2:2417
-1126:2:2421
-1127:2:2422
-1128:2:2430
-1129:2:2435
-1130:2:2439
-1131:2:2440
-1132:2:2447
-1133:2:2448
-1134:2:2459
-1135:2:2460
-1136:2:2461
-1137:2:2472
-1138:2:2477
-1139:2:2478
-1140:0:2654
-1141:2:2493
-1142:0:2654
-1143:2:2498
-1144:2:2502
-1145:2:2503
-1146:2:2511
-1147:2:2512
-1148:2:2516
-1149:2:2517
-1150:2:2525
-1151:2:2530
-1152:2:2534
-1153:2:2535
-1154:2:2542
-1155:2:2543
-1156:2:2554
-1157:2:2555
-1158:2:2556
-1159:2:2567
-1160:2:2572
-1161:2:2573
-1162:0:2654
-1163:2:2588
-1164:0:2654
-1165:2:2590
-1166:0:2654
-1167:2:2591
-1168:0:2654
-1169:2:423
-1170:0:2654
-1171:2:424
-1172:2:428
-1173:2:429
-1174:2:437
-1175:2:438
-1176:2:442
-1177:2:443
-1178:2:451
-1179:2:456
-1180:2:460
-1181:2:461
-1182:2:468
-1183:2:469
-1184:2:480
-1185:2:481
-1186:2:482
-1187:2:493
-1188:2:498
-1189:2:499
-1190:0:2654
-1191:2:511
-1192:0:2654
-1193:2:513
-1194:2:514
-1195:0:2654
-1196:2:518
-1197:2:522
-1198:2:523
-1199:2:531
-1200:2:532
-1201:2:536
-1202:2:537
-1203:2:545
-1204:2:550
-1205:2:551
-1206:2:562
-1207:2:563
-1208:2:574
-1209:2:575
-1210:2:576
-1211:2:587
-1212:2:592
-1213:2:593
-1214:0:2654
-1215:2:605
-1216:0:2654
-1217:2:607
-1218:0:2654
-1219:2:608
-1220:0:2654
-1221:2:618
-1222:0:2654
-1223:2:619
-1224:2:623
-1225:2:624
-1226:2:632
-1227:2:633
-1228:2:637
-1229:2:638
-1230:2:646
-1231:2:651
-1232:2:655
-1233:2:656
-1234:2:663
-1235:2:664
-1236:2:675
-1237:2:676
-1238:2:677
-1239:2:688
-1240:2:693
-1241:2:694
-1242:0:2654
-1243:2:709
-1244:0:2654
-1245:2:710
-1246:2:714
-1247:2:715
-1248:2:723
-1249:2:724
-1250:2:728
-1251:2:729
-1252:2:737
-1253:2:742
-1254:2:746
-1255:2:747
-1256:2:754
-1257:2:755
-1258:2:766
-1259:2:767
-1260:2:768
-1261:2:779
-1262:2:784
-1263:2:785
-1264:0:2654
-1265:2:800
-1266:0:2654
-1267:2:805
-1268:2:809
-1269:2:810
-1270:2:818
-1271:2:819
-1272:2:823
-1273:2:824
-1274:2:832
-1275:2:837
-1276:2:841
-1277:2:842
-1278:2:849
-1279:2:850
-1280:2:861
-1281:2:862
-1282:2:863
-1283:2:874
-1284:2:879
-1285:2:880
-1286:0:2654
-1287:2:895
-1288:0:2654
-1289:2:897
-1290:0:2654
-1291:2:898
-1292:2:902
-1293:2:903
-1294:2:911
-1295:2:912
-1296:2:916
-1297:2:917
-1298:2:925
-1299:2:930
-1300:2:934
-1301:2:935
-1302:2:942
-1303:2:943
-1304:2:954
-1305:2:955
-1306:2:956
-1307:2:967
-1308:2:972
-1309:2:973
-1310:0:2654
-1311:2:985
-1312:0:2654
-1313:2:987
-1314:0:2654
-1315:2:990
-1316:2:991
-1317:2:1003
-1318:2:1004
-1319:2:1008
-1320:2:1009
-1321:2:1017
-1322:2:1022
-1323:2:1026
-1324:2:1027
-1325:2:1034
-1326:2:1035
-1327:2:1046
-1328:2:1047
-1329:2:1048
-1330:2:1059
-1331:2:1064
-1332:2:1065
-1333:0:2654
-1334:2:1077
-1335:0:2654
-1336:2:1079
-1337:0:2654
-1338:2:1080
-1339:0:2654
-1340:2:1081
-1341:0:2654
-1342:2:1082
-1343:0:2654
-1344:2:1083
-1345:2:1087
-1346:2:1088
-1347:2:1096
-1348:2:1097
-1349:2:1101
-1350:2:1102
-1351:2:1110
-1352:2:1115
-1353:2:1119
-1354:2:1120
-1355:2:1127
-1356:2:1128
-1357:2:1139
-1358:2:1140
-1359:2:1141
-1360:2:1152
-1361:2:1157
-1362:2:1158
-1363:0:2654
-1364:2:1170
-1365:0:2654
-1366:2:1451
-1367:0:2654
-1368:2:1549
-1369:0:2654
-1370:2:1550
-1371:0:2654
-1372:2:1554
-1373:0:2654
-1374:2:1560
-1375:2:1564
-1376:2:1565
-1377:2:1573
-1378:2:1574
-1379:2:1578
-1380:2:1579
-1381:2:1587
-1382:2:1592
-1383:2:1596
-1384:2:1597
-1385:2:1604
-1386:2:1605
-1387:2:1616
-1388:2:1617
-1389:2:1618
-1390:2:1629
-1391:2:1634
-1392:2:1635
-1393:0:2654
-1394:2:1647
-1395:0:2654
-1396:2:1649
-1397:0:2654
-1398:2:1650
-1399:2:1654
-1400:2:1655
-1401:2:1663
-1402:2:1664
-1403:2:1668
-1404:2:1669
-1405:2:1677
-1406:2:1682
-1407:2:1686
-1408:2:1687
-1409:2:1694
-1410:2:1695
-1411:2:1706
-1412:2:1707
-1413:2:1708
-1414:2:1719
-1415:2:1724
-1416:2:1725
-1417:0:2654
-1418:2:1737
-1419:0:2654
-1420:2:1739
-1421:0:2654
-1422:2:1742
-1423:2:1743
-1424:2:1755
-1425:2:1756
-1426:2:1760
-1427:2:1761
-1428:2:1769
-1429:2:1774
-1430:2:1778
-1431:2:1779
-1432:2:1786
-1433:2:1787
-1434:2:1798
-1435:2:1799
-1436:2:1800
-1437:2:1811
-1438:2:1816
-1439:2:1817
-1440:0:2654
-1441:2:1829
-1442:0:2654
-1443:2:1831
-1444:0:2654
-1445:2:1832
-1446:0:2654
-1447:2:1833
-1448:0:2654
-1449:2:1834
-1450:0:2654
-1451:2:1835
-1452:2:1839
-1453:2:1840
-1454:2:1848
-1455:2:1849
-1456:2:1853
-1457:2:1854
-1458:2:1862
-1459:2:1867
-1460:2:1871
-1461:2:1872
-1462:2:1879
-1463:2:1880
-1464:2:1891
-1465:2:1892
-1466:2:1893
-1467:2:1904
-1468:2:1909
-1469:2:1910
-1470:0:2654
-1471:2:1922
-1472:0:2654
-1473:2:2203
-1474:0:2654
-1475:2:2301
-1476:0:2654
-1477:2:2302
-1478:0:2654
-1479:2:2306
-1480:0:2654
-1481:2:2312
-1482:2:2316
-1483:2:2317
-1484:2:2325
-1485:2:2326
-1486:2:2330
-1487:2:2331
-1488:2:2339
-1489:2:2344
-1490:2:2348
-1491:2:2349
-1492:2:2356
-1493:2:2357
-1494:2:2368
-1495:2:2369
-1496:2:2370
-1497:2:2381
-1498:2:2386
-1499:2:2387
-1500:0:2654
-1501:2:2402
-1502:0:2654
-1503:2:2403
-1504:2:2407
-1505:2:2408
-1506:2:2416
-1507:2:2417
-1508:2:2421
-1509:2:2422
-1510:2:2430
-1511:2:2435
-1512:2:2439
-1513:2:2440
-1514:2:2447
-1515:2:2448
-1516:2:2459
-1517:2:2460
-1518:2:2461
-1519:2:2472
-1520:2:2477
-1521:2:2478
-1522:0:2654
-1523:2:2493
-1524:0:2654
-1525:2:2498
-1526:2:2502
-1527:2:2503
-1528:2:2511
-1529:2:2512
-1530:2:2516
-1531:2:2517
-1532:2:2525
-1533:2:2530
-1534:2:2534
-1535:2:2535
-1536:2:2542
-1537:2:2543
-1538:2:2554
-1539:2:2555
-1540:2:2556
-1541:2:2567
-1542:2:2572
-1543:2:2573
-1544:0:2654
-1545:2:2588
-1546:0:2654
-1547:2:2590
-1548:0:2654
-1549:2:2591
-1550:0:2654
-1551:2:423
-1552:0:2654
-1553:2:424
-1554:2:428
-1555:2:429
-1556:2:437
-1557:2:438
-1558:2:442
-1559:2:443
-1560:2:451
-1561:2:456
-1562:2:460
-1563:2:461
-1564:2:468
-1565:2:469
-1566:2:480
-1567:2:481
-1568:2:482
-1569:2:493
-1570:2:498
-1571:2:499
-1572:0:2654
-1573:2:511
-1574:0:2654
-1575:2:513
-1576:2:514
-1577:0:2654
-1578:2:518
-1579:2:522
-1580:2:523
-1581:2:531
-1582:2:532
-1583:2:536
-1584:2:537
-1585:2:545
-1586:2:558
-1587:2:559
-1588:2:562
-1589:2:563
-1590:2:574
-1591:2:575
-1592:2:576
-1593:2:587
-1594:2:592
-1595:2:595
-1596:2:596
-1597:0:2654
-1598:2:605
-1599:0:2654
-1600:2:607
-1601:0:2654
-1602:2:608
-1603:0:2654
-1604:2:618
-1605:0:2654
-1606:2:619
-1607:2:623
-1608:2:624
-1609:2:632
-1610:2:633
-1611:2:637
-1612:2:638
-1613:2:646
-1614:2:659
-1615:2:660
-1616:2:663
-1617:2:664
-1618:2:675
-1619:2:676
-1620:2:677
-1621:2:688
-1622:2:693
-1623:2:696
-1624:2:697
-1625:0:2654
-1626:2:709
-1627:0:2654
-1628:2:710
-1629:2:714
-1630:2:715
-1631:2:723
-1632:2:724
-1633:2:728
-1634:2:729
-1635:2:737
-1636:2:750
-1637:2:751
-1638:2:754
-1639:2:755
-1640:2:766
-1641:2:767
-1642:2:768
-1643:2:779
-1644:2:784
-1645:2:787
-1646:2:788
-1647:0:2654
-1648:2:800
-1649:0:2654
-1650:2:805
-1651:2:809
-1652:2:810
-1653:2:818
-1654:2:819
-1655:2:823
-1656:2:824
-1657:2:832
-1658:2:845
-1659:2:846
-1660:2:849
-1661:2:850
-1662:2:861
-1663:2:862
-1664:2:863
-1665:2:874
-1666:2:879
-1667:2:882
-1668:2:883
-1669:0:2654
-1670:2:895
-1671:0:2654
-1672:2:897
-1673:0:2654
-1674:2:898
-1675:2:902
-1676:2:903
-1677:2:911
-1678:2:912
-1679:2:916
-1680:2:917
-1681:2:925
-1682:2:938
-1683:2:939
-1684:2:942
-1685:2:943
-1686:2:954
-1687:2:955
-1688:2:956
-1689:2:967
-1690:2:972
-1691:2:975
-1692:2:976
-1693:0:2654
-1694:2:985
-1695:0:2654
-1696:2:987
-1697:0:2654
-1698:2:990
-1699:2:991
-1700:2:1003
-1701:2:1004
-1702:2:1008
-1703:2:1009
-1704:2:1017
-1705:2:1030
-1706:2:1031
-1707:2:1034
-1708:2:1035
-1709:2:1046
-1710:2:1047
-1711:2:1048
-1712:2:1059
-1713:2:1064
-1714:2:1067
-1715:2:1068
-1716:0:2654
-1717:2:1077
-1718:0:2654
-1719:2:1079
-1720:0:2654
-1721:2:1080
-1722:0:2654
-1723:2:1081
-1724:0:2654
-1725:2:1082
-1726:0:2654
-1727:2:1083
-1728:2:1087
-1729:2:1088
-1730:2:1096
-1731:2:1097
-1732:2:1101
-1733:2:1102
-1734:2:1110
-1735:2:1123
-1736:2:1124
-1737:2:1127
-1738:2:1128
-1739:2:1139
-1740:2:1140
-1741:2:1141
-1742:2:1152
-1743:2:1157
-1744:2:1160
-1745:2:1161
-1746:0:2654
-1747:2:1170
-1748:0:2654
-1749:2:1451
-1750:0:2654
-1751:2:1549
-1752:0:2654
-1753:2:1550
-1754:0:2654
-1755:2:1554
-1756:0:2654
-1757:2:1560
-1758:2:1564
-1759:2:1565
-1760:2:1573
-1761:2:1574
-1762:2:1578
-1763:2:1579
-1764:2:1587
-1765:2:1600
-1766:2:1601
-1767:2:1604
-1768:2:1605
-1769:2:1616
-1770:2:1617
-1771:2:1618
-1772:2:1629
-1773:2:1634
-1774:2:1637
-1775:2:1638
-1776:0:2654
-1777:2:1647
-1778:0:2654
-1779:2:1649
-1780:0:2654
-1781:2:1650
-1782:2:1654
-1783:2:1655
-1784:2:1663
-1785:2:1664
-1786:2:1668
-1787:2:1669
-1788:2:1677
-1789:2:1690
-1790:2:1691
-1791:2:1694
-1792:2:1695
-1793:2:1706
-1794:2:1707
-1795:2:1708
-1796:2:1719
-1797:2:1724
-1798:2:1727
-1799:2:1728
-1800:0:2654
-1801:2:1737
-1802:0:2654
-1803:2:1739
-1804:0:2654
-1805:2:1742
-1806:2:1743
-1807:2:1755
-1808:2:1756
-1809:2:1760
-1810:2:1761
-1811:2:1769
-1812:2:1782
-1813:2:1783
-1814:2:1786
-1815:2:1787
-1816:2:1798
-1817:2:1799
-1818:2:1800
-1819:2:1811
-1820:2:1816
-1821:2:1819
-1822:2:1820
-1823:0:2654
-1824:2:1829
-1825:0:2654
-1826:2:1831
-1827:0:2654
-1828:2:1832
-1829:0:2654
-1830:2:1833
-1831:0:2654
-1832:2:1834
-1833:0:2654
-1834:2:1835
-1835:2:1839
-1836:2:1840
-1837:2:1848
-1838:2:1849
-1839:2:1853
-1840:2:1854
-1841:2:1862
-1842:2:1875
-1843:2:1876
-1844:2:1879
-1845:2:1880
-1846:2:1891
-1847:2:1892
-1848:2:1893
-1849:2:1904
-1850:2:1909
-1851:2:1912
-1852:2:1913
-1853:0:2654
-1854:2:1922
-1855:0:2654
-1856:2:2203
-1857:0:2654
-1858:2:2301
-1859:0:2654
-1860:2:2302
-1861:0:2654
-1862:2:2306
-1863:0:2654
-1864:2:2312
-1865:2:2316
-1866:2:2317
-1867:2:2325
-1868:2:2326
-1869:2:2330
-1870:2:2331
-1871:2:2339
-1872:2:2352
-1873:2:2353
-1874:2:2356
-1875:2:2357
-1876:2:2368
-1877:2:2369
-1878:2:2370
-1879:2:2381
-1880:2:2386
-1881:2:2389
-1882:2:2390
-1883:0:2654
-1884:2:2402
-1885:0:2654
-1886:2:2403
-1887:2:2407
-1888:2:2408
-1889:2:2416
-1890:2:2417
-1891:2:2421
-1892:2:2422
-1893:2:2430
-1894:2:2443
-1895:2:2444
-1896:2:2447
-1897:2:2448
-1898:2:2459
-1899:2:2460
-1900:2:2461
-1901:2:2472
-1902:2:2477
-1903:2:2480
-1904:2:2481
-1905:0:2654
-1906:2:2493
-1907:0:2654
-1908:2:2498
-1909:2:2502
-1910:2:2503
-1911:2:2511
-1912:2:2512
-1913:2:2516
-1914:2:2517
-1915:2:2525
-1916:2:2538
-1917:2:2539
-1918:2:2542
-1919:2:2543
-1920:2:2554
-1921:2:2555
-1922:2:2556
-1923:2:2567
-1924:2:2572
-1925:2:2575
-1926:2:2576
-1927:0:2654
-1928:2:2588
-1929:0:2654
-1930:2:2590
-1931:0:2654
-1932:2:2591
-1933:0:2654
-1934:2:2594
-1935:0:2654
-1936:2:2599
-1937:0:2654
-1938:1:2
-1939:0:2654
-1940:2:2600
-1941:0:2654
-1942:1:8
-1943:0:2654
-1944:2:2599
-1945:0:2654
-1946:1:9
-1947:0:2654
-1948:2:2600
-1949:0:2654
-1950:1:10
-1951:0:2654
-1952:2:2599
-1953:0:2654
-1954:1:11
-1955:0:2654
-1956:2:2600
-1957:0:2654
-1958:1:12
-1959:1:16
-1960:1:17
-1961:1:25
-1962:1:26
-1963:1:30
-1964:1:31
-1965:1:39
-1966:1:44
-1967:1:48
-1968:1:49
-1969:1:56
-1970:1:57
-1971:1:68
-1972:1:69
-1973:1:70
-1974:1:81
-1975:1:86
-1976:1:87
-1977:0:2654
-1978:2:2599
-1979:0:2654
-1980:1:99
-1981:0:2654
-1982:2:2600
-1983:0:2654
-1984:1:101
-1985:0:2654
-1986:2:2599
-1987:0:2654
-1988:1:102
-1989:1:106
-1990:1:107
-1991:1:115
-1992:1:116
-1993:1:120
-1994:1:121
-1995:1:129
-1996:1:134
-1997:1:138
-1998:1:139
-1999:1:146
-2000:1:147
-2001:1:158
-2002:1:159
-2003:1:160
-2004:1:171
-2005:1:176
-2006:1:177
-2007:0:2654
-2008:2:2600
-2009:0:2654
-2010:1:189
-2011:0:2654
-2012:2:2599
-2013:0:2654
-2014:1:191
-2015:0:2654
-2016:2:2600
-2017:0:2654
-2018:1:192
-2019:0:2654
-2020:2:2599
-2021:0:2654
-2022:1:193
-2023:1:197
-2024:1:198
-2025:1:206
-2026:1:207
-2027:1:211
-2028:1:212
-2029:1:220
-2030:1:225
-2031:1:229
-2032:1:230
-2033:1:237
-2034:1:238
-2035:1:249
-2036:1:250
-2037:1:251
-2038:1:262
-2039:1:267
-2040:1:268
-2041:0:2654
-2042:2:2600
-2043:0:2654
-2044:1:280
-2045:0:2654
-2046:2:2599
-2047:0:2654
-2048:1:282
-2049:0:2654
-2050:2:2600
-2051:0:2654
-2052:1:291
-2053:0:2654
-2054:2:2599
-2055:0:2654
-2056:1:293
-2057:0:2654
-2058:2:2600
-2059:0:2654
-2060:1:11
-2061:0:2654
-2062:2:2599
-2063:0:2654
-2064:1:12
-2065:1:16
-2066:1:17
-2067:1:25
-2068:1:26
-2069:1:27
-2070:1:39
-2071:1:44
-2072:1:48
-2073:1:49
-2074:1:56
-2075:1:57
-2076:1:68
-2077:1:69
-2078:1:70
-2079:1:81
-2080:1:86
-2081:1:87
-2082:0:2654
-2083:2:2600
-2084:0:2654
-2085:1:99
-2086:0:2654
-2087:2:2599
-2088:0:2654
-2089:1:101
-2090:0:2654
-2091:2:2600
-2092:0:2654
-2093:1:102
-2094:1:106
-2095:1:107
-2096:1:115
-2097:1:116
-2098:1:120
-2099:1:121
-2100:1:129
-2101:1:134
-2102:1:138
-2103:1:139
-2104:1:146
-2105:1:147
-2106:1:158
-2107:1:159
-2108:1:160
-2109:1:171
-2110:1:176
-2111:1:177
-2112:0:2654
-2113:2:2599
-2114:0:2654
-2115:1:189
-2116:0:2654
-2117:2:2600
-2118:0:2654
-2119:1:285
-2120:0:2654
-2121:2:2599
-2122:0:2654
-2123:1:286
-2124:0:2654
-2125:2:2600
-2126:0:2654
-2127:1:291
-2128:0:2654
-2129:2:2599
-2130:0:2654
-2131:1:293
-2132:0:2654
-2133:2:2600
-2134:0:2654
-2135:1:296
-2136:0:2654
-2137:2:2599
-2138:0:2654
-2139:1:301
-2140:0:2654
-2141:2:2600
-2142:0:2654
-2143:1:302
-2144:0:2652
-2145:2:2599
-2146:0:2658
-2147:2:779
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.define b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.log b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index b7f3b80..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-Depth=    5439 States=    1e+06 Transitions= 1.03e+07 Memory=   527.190        t=   8.16 R=   1e+05
-pan: claim violated! (at depth 1801)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 5439, errors: 1
-  1006552 states, stored
-  9396280 states, matched
- 10402832 transitions (= stored+matched)
- 36844262 atomic steps
-hash conflicts:   1832712 (resolved)
-
-Stats on memory usage (in Megabytes):
-   80.634      equivalent memory usage for states (stored*(State-vector + overhead))
-   61.871      actual memory usage for states (compression: 76.73%)
-               state-vector as stored = 36 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  527.580      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 243, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 265, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 291, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 304, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 320, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 334, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 352, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 365, "(1)"
-       line 413, "pan.___", state 378, "(1)"
-       line 418, "pan.___", state 395, "(1)"
-       line 399, "pan.___", state 414, "(1)"
-       line 403, "pan.___", state 426, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 444, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 470, "(1)"
-       line 418, "pan.___", state 487, "(1)"
-       line 403, "pan.___", state 519, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 537, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 563, "(1)"
-       line 418, "pan.___", state 580, "(1)"
-       line 179, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 629, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 651, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 677, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 690, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 714, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 716, "(1)"
-       line 399, "pan.___", state 717, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 717, "else"
-       line 399, "pan.___", state 720, "(1)"
-       line 403, "pan.___", state 728, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 730, "(1)"
-       line 403, "pan.___", state 731, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 731, "else"
-       line 403, "pan.___", state 734, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 401, "pan.___", state 740, "((i<1))"
-       line 401, "pan.___", state 740, "((i>=1))"
-       line 408, "pan.___", state 746, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 759, "(1)"
-       line 409, "pan.___", state 760, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 760, "else"
-       line 409, "pan.___", state 763, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 413, "pan.___", state 772, "(1)"
-       line 413, "pan.___", state 773, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 773, "else"
-       line 413, "pan.___", state 776, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 411, "pan.___", state 782, "((i<1))"
-       line 411, "pan.___", state 782, "((i>=1))"
-       line 418, "pan.___", state 789, "(1)"
-       line 418, "pan.___", state 790, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 790, "else"
-       line 418, "pan.___", state 793, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 403, "pan.___", state 828, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 846, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 872, "(1)"
-       line 418, "pan.___", state 889, "(1)"
-       line 403, "pan.___", state 918, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 936, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 979, "(1)"
-       line 399, "pan.___", state 998, "(1)"
-       line 403, "pan.___", state 1010, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1028, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1054, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 403, "pan.___", state 1103, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1121, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1147, "(1)"
-       line 418, "pan.___", state 1164, "(1)"
-       line 179, "pan.___", state 1187, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1200, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 1213, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1235, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1252, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1261, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1300, "(1)"
-       line 399, "pan.___", state 1301, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1301, "else"
-       line 399, "pan.___", state 1304, "(1)"
-       line 403, "pan.___", state 1312, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1314, "(1)"
-       line 403, "pan.___", state 1315, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1315, "else"
-       line 403, "pan.___", state 1318, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 401, "pan.___", state 1324, "((i<1))"
-       line 401, "pan.___", state 1324, "((i>=1))"
-       line 408, "pan.___", state 1330, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1343, "(1)"
-       line 409, "pan.___", state 1344, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1344, "else"
-       line 409, "pan.___", state 1347, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 413, "pan.___", state 1356, "(1)"
-       line 413, "pan.___", state 1357, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1357, "else"
-       line 413, "pan.___", state 1360, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 411, "pan.___", state 1366, "((i<1))"
-       line 411, "pan.___", state 1366, "((i>=1))"
-       line 418, "pan.___", state 1373, "(1)"
-       line 418, "pan.___", state 1374, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1374, "else"
-       line 418, "pan.___", state 1377, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 179, "pan.___", state 1406, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1419, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 1432, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1454, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1471, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1480, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1493, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 702, "pan.___", state 1520, "-end-"
-       (144 of 1520 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 8.24 seconds
-pan: rate 122154.37 states/second
-pan: avg transition delay 7.9209e-07 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.spin.input b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 6dea6e1..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_RMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 071a19e..0000000
+++ /dev/null
@@ -1,1804 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1982
-2:3:1934
-3:3:1937
-4:3:1937
-5:3:1940
-6:3:1948
-7:3:1948
-8:3:1951
-9:3:1957
-10:3:1961
-11:3:1961
-12:3:1964
-13:3:1972
-14:3:1976
-15:3:1977
-16:0:1982
-17:3:1979
-18:0:1982
-19:2:416
-20:0:1982
-21:2:422
-22:0:1982
-23:2:423
-24:0:1982
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1982
-45:2:511
-46:0:1982
-47:2:513
-48:2:514
-49:0:1982
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1982
-69:2:605
-70:0:1982
-71:2:607
-72:0:1982
-73:2:608
-74:0:1982
-75:2:618
-76:0:1982
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:0:1982
-86:2:653
-87:0:1982
-88:2:657
-89:2:658
-90:2:662
-91:2:666
-92:2:667
-93:2:671
-94:2:679
-95:2:680
-96:0:1982
-97:2:688
-98:0:1982
-99:2:696
-100:2:697
-101:2:701
-102:2:705
-103:2:706
-104:2:710
-105:2:718
-106:2:719
-107:0:1982
-108:2:727
-109:0:1982
-110:2:729
-111:0:1982
-112:2:730
-113:2:734
-114:2:735
-115:2:743
-116:2:744
-117:2:748
-118:2:749
-119:2:757
-120:2:762
-121:2:766
-122:2:767
-123:2:774
-124:2:775
-125:2:786
-126:2:787
-127:2:788
-128:2:799
-129:2:804
-130:2:805
-131:0:1982
-132:2:817
-133:0:1982
-134:2:819
-135:0:1982
-136:2:822
-137:2:823
-138:2:835
-139:2:836
-140:2:840
-141:2:841
-142:2:849
-143:2:854
-144:2:858
-145:2:859
-146:2:866
-147:2:867
-148:2:878
-149:2:879
-150:2:880
-151:2:891
-152:2:896
-153:2:897
-154:0:1982
-155:2:909
-156:0:1982
-157:2:911
-158:0:1982
-159:2:912
-160:0:1982
-161:2:913
-162:0:1982
-163:2:914
-164:0:1982
-165:2:915
-166:2:919
-167:2:920
-168:2:928
-169:2:929
-170:2:933
-171:2:934
-172:2:942
-173:2:947
-174:2:951
-175:2:952
-176:2:959
-177:2:960
-178:2:971
-179:2:972
-180:2:973
-181:2:984
-182:2:989
-183:2:990
-184:0:1982
-185:2:1002
-186:0:1982
-187:2:1115
-188:0:1982
-189:2:1213
-190:0:1982
-191:2:1214
-192:0:1982
-193:2:1218
-194:0:1982
-195:2:1224
-196:2:1228
-197:2:1229
-198:2:1237
-199:2:1238
-200:2:1242
-201:2:1243
-202:2:1251
-203:2:1256
-204:2:1260
-205:2:1261
-206:2:1268
-207:2:1269
-208:2:1280
-209:2:1281
-210:2:1282
-211:2:1293
-212:2:1298
-213:2:1299
-214:0:1982
-215:2:1311
-216:0:1982
-217:2:1313
-218:0:1982
-219:2:1314
-220:2:1318
-221:2:1319
-222:2:1327
-223:2:1328
-224:2:1332
-225:2:1333
-226:2:1341
-227:2:1346
-228:2:1350
-229:2:1351
-230:2:1358
-231:2:1359
-232:2:1370
-233:2:1371
-234:2:1372
-235:2:1383
-236:2:1388
-237:2:1389
-238:0:1982
-239:2:1401
-240:0:1982
-241:2:1403
-242:0:1982
-243:2:1406
-244:2:1407
-245:2:1419
-246:2:1420
-247:2:1424
-248:2:1425
-249:2:1433
-250:2:1438
-251:2:1442
-252:2:1443
-253:2:1450
-254:2:1451
-255:2:1462
-256:2:1463
-257:2:1464
-258:2:1475
-259:2:1480
-260:2:1481
-261:0:1982
-262:2:1493
-263:0:1982
-264:2:1495
-265:0:1982
-266:2:1496
-267:0:1982
-268:2:1497
-269:0:1982
-270:2:1498
-271:0:1982
-272:2:1499
-273:2:1503
-274:2:1504
-275:2:1512
-276:2:1513
-277:2:1517
-278:2:1518
-279:2:1526
-280:2:1531
-281:2:1535
-282:2:1536
-283:2:1543
-284:2:1544
-285:2:1555
-286:2:1556
-287:2:1557
-288:2:1568
-289:2:1573
-290:2:1574
-291:0:1982
-292:2:1586
-293:0:1982
-294:2:1699
-295:0:1982
-296:2:1797
-297:0:1982
-298:2:1798
-299:0:1982
-300:2:1802
-301:0:1982
-302:2:1811
-303:2:1812
-304:2:1816
-305:2:1820
-306:2:1821
-307:2:1825
-308:2:1833
-309:2:1834
-310:0:1982
-311:2:1842
-312:0:1982
-313:2:1846
-314:2:1847
-315:2:1851
-316:2:1855
-317:2:1856
-318:2:1860
-319:2:1868
-320:2:1869
-321:0:1982
-322:2:1877
-323:0:1982
-324:2:1885
-325:2:1886
-326:2:1890
-327:2:1894
-328:2:1895
-329:2:1899
-330:2:1907
-331:2:1908
-332:0:1982
-333:2:1916
-334:0:1982
-335:2:1918
-336:0:1982
-337:2:1919
-338:0:1982
-339:2:423
-340:0:1982
-341:2:424
-342:2:428
-343:2:429
-344:2:437
-345:2:438
-346:2:442
-347:2:443
-348:2:451
-349:2:456
-350:2:460
-351:2:461
-352:2:468
-353:2:469
-354:2:480
-355:2:481
-356:2:482
-357:2:493
-358:2:498
-359:2:499
-360:0:1982
-361:2:511
-362:0:1982
-363:2:513
-364:2:514
-365:0:1982
-366:2:518
-367:2:522
-368:2:523
-369:2:531
-370:2:532
-371:2:536
-372:2:537
-373:2:545
-374:2:550
-375:2:551
-376:2:562
-377:2:563
-378:2:574
-379:2:575
-380:2:576
-381:2:587
-382:2:592
-383:2:593
-384:0:1982
-385:2:605
-386:0:1982
-387:2:607
-388:0:1982
-389:2:608
-390:0:1982
-391:2:618
-392:0:1982
-393:2:622
-394:2:623
-395:2:627
-396:2:631
-397:2:632
-398:2:636
-399:2:644
-400:2:645
-401:0:1982
-402:2:653
-403:0:1982
-404:2:657
-405:2:658
-406:2:662
-407:2:666
-408:2:667
-409:2:671
-410:2:679
-411:2:680
-412:0:1982
-413:2:688
-414:0:1982
-415:2:696
-416:2:697
-417:2:701
-418:2:705
-419:2:706
-420:2:710
-421:2:718
-422:2:719
-423:0:1982
-424:2:727
-425:0:1982
-426:2:729
-427:0:1982
-428:2:730
-429:2:734
-430:2:735
-431:2:743
-432:2:744
-433:2:748
-434:2:749
-435:2:757
-436:2:762
-437:2:766
-438:2:767
-439:2:774
-440:2:775
-441:2:786
-442:2:787
-443:2:788
-444:2:799
-445:2:804
-446:2:805
-447:0:1982
-448:2:817
-449:0:1982
-450:2:819
-451:0:1982
-452:2:822
-453:2:823
-454:2:835
-455:2:836
-456:2:840
-457:2:841
-458:2:849
-459:2:854
-460:2:858
-461:2:859
-462:2:866
-463:2:867
-464:2:878
-465:2:879
-466:2:880
-467:2:891
-468:2:896
-469:2:897
-470:0:1982
-471:2:909
-472:0:1982
-473:2:911
-474:0:1982
-475:2:912
-476:0:1982
-477:2:913
-478:0:1982
-479:2:914
-480:0:1982
-481:2:915
-482:2:919
-483:2:920
-484:2:928
-485:2:929
-486:2:933
-487:2:934
-488:2:942
-489:2:947
-490:2:951
-491:2:952
-492:2:959
-493:2:960
-494:2:971
-495:2:972
-496:2:973
-497:2:984
-498:2:989
-499:2:990
-500:0:1982
-501:2:1002
-502:0:1982
-503:2:1115
-504:0:1982
-505:2:1213
-506:0:1982
-507:2:1214
-508:0:1982
-509:2:1218
-510:0:1982
-511:2:1224
-512:2:1228
-513:2:1229
-514:2:1237
-515:2:1238
-516:2:1242
-517:2:1243
-518:2:1251
-519:2:1256
-520:2:1260
-521:2:1261
-522:2:1268
-523:2:1269
-524:2:1280
-525:2:1281
-526:2:1282
-527:2:1293
-528:2:1298
-529:2:1299
-530:0:1982
-531:2:1311
-532:0:1982
-533:2:1313
-534:0:1982
-535:2:1314
-536:2:1318
-537:2:1319
-538:2:1327
-539:2:1328
-540:2:1332
-541:2:1333
-542:2:1341
-543:2:1346
-544:2:1350
-545:2:1351
-546:2:1358
-547:2:1359
-548:2:1370
-549:2:1371
-550:2:1372
-551:2:1383
-552:2:1388
-553:2:1389
-554:0:1982
-555:2:1401
-556:0:1982
-557:2:1403
-558:0:1982
-559:2:1406
-560:2:1407
-561:2:1419
-562:2:1420
-563:2:1424
-564:2:1425
-565:2:1433
-566:2:1438
-567:2:1442
-568:2:1443
-569:2:1450
-570:2:1451
-571:2:1462
-572:2:1463
-573:2:1464
-574:2:1475
-575:2:1480
-576:2:1481
-577:0:1982
-578:2:1493
-579:0:1982
-580:2:1495
-581:0:1982
-582:2:1496
-583:0:1982
-584:2:1497
-585:0:1982
-586:2:1498
-587:0:1982
-588:2:1499
-589:2:1503
-590:2:1504
-591:2:1512
-592:2:1513
-593:2:1517
-594:2:1518
-595:2:1526
-596:2:1531
-597:2:1535
-598:2:1536
-599:2:1543
-600:2:1544
-601:2:1555
-602:2:1556
-603:2:1557
-604:2:1568
-605:2:1573
-606:2:1574
-607:0:1982
-608:2:1586
-609:0:1982
-610:2:1699
-611:0:1982
-612:2:1797
-613:0:1982
-614:2:1798
-615:0:1982
-616:2:1802
-617:0:1982
-618:2:1811
-619:2:1812
-620:2:1816
-621:2:1820
-622:2:1821
-623:2:1825
-624:2:1833
-625:2:1834
-626:0:1982
-627:2:1842
-628:0:1982
-629:2:1846
-630:2:1847
-631:2:1851
-632:2:1855
-633:2:1856
-634:2:1860
-635:2:1868
-636:2:1869
-637:0:1982
-638:2:1877
-639:0:1982
-640:2:1885
-641:2:1886
-642:2:1890
-643:2:1894
-644:2:1895
-645:2:1899
-646:2:1907
-647:2:1908
-648:0:1982
-649:2:1916
-650:0:1982
-651:2:1918
-652:0:1982
-653:2:1919
-654:0:1982
-655:2:423
-656:0:1982
-657:2:424
-658:2:428
-659:2:429
-660:2:437
-661:2:438
-662:2:442
-663:2:443
-664:2:451
-665:2:456
-666:2:460
-667:2:461
-668:2:468
-669:2:469
-670:2:480
-671:2:481
-672:2:482
-673:2:493
-674:2:498
-675:2:499
-676:0:1982
-677:2:511
-678:0:1982
-679:2:513
-680:2:514
-681:0:1982
-682:2:518
-683:2:522
-684:2:523
-685:2:531
-686:2:532
-687:2:536
-688:2:537
-689:2:545
-690:2:550
-691:2:551
-692:2:562
-693:2:563
-694:2:574
-695:2:575
-696:2:576
-697:2:587
-698:2:592
-699:2:593
-700:0:1982
-701:2:605
-702:0:1982
-703:2:607
-704:0:1982
-705:2:608
-706:0:1982
-707:2:618
-708:0:1982
-709:2:622
-710:2:623
-711:2:627
-712:2:631
-713:2:632
-714:2:636
-715:2:644
-716:2:645
-717:0:1982
-718:2:653
-719:0:1982
-720:2:657
-721:2:658
-722:2:662
-723:2:666
-724:2:667
-725:2:671
-726:2:679
-727:2:680
-728:0:1982
-729:2:688
-730:0:1982
-731:2:696
-732:2:697
-733:2:701
-734:2:705
-735:2:706
-736:2:710
-737:2:718
-738:2:719
-739:0:1982
-740:2:727
-741:0:1982
-742:2:729
-743:0:1982
-744:2:730
-745:2:734
-746:2:735
-747:2:743
-748:2:744
-749:2:748
-750:2:749
-751:2:757
-752:2:762
-753:2:766
-754:2:767
-755:2:774
-756:2:775
-757:2:786
-758:2:787
-759:2:788
-760:2:799
-761:2:804
-762:2:805
-763:0:1982
-764:2:817
-765:0:1982
-766:2:819
-767:0:1982
-768:2:822
-769:2:823
-770:2:835
-771:2:836
-772:2:840
-773:2:841
-774:2:849
-775:2:854
-776:2:858
-777:2:859
-778:2:866
-779:2:867
-780:2:878
-781:2:879
-782:2:880
-783:2:891
-784:2:896
-785:2:897
-786:0:1982
-787:2:909
-788:0:1982
-789:2:911
-790:0:1982
-791:2:912
-792:0:1982
-793:2:913
-794:0:1982
-795:2:914
-796:0:1982
-797:2:915
-798:2:919
-799:2:920
-800:2:928
-801:2:929
-802:2:933
-803:2:934
-804:2:942
-805:2:947
-806:2:951
-807:2:952
-808:2:959
-809:2:960
-810:2:971
-811:2:972
-812:2:973
-813:2:984
-814:2:989
-815:2:990
-816:0:1982
-817:2:1002
-818:0:1982
-819:2:1115
-820:0:1982
-821:2:1213
-822:0:1982
-823:2:1214
-824:0:1982
-825:2:1218
-826:0:1982
-827:2:1224
-828:2:1228
-829:2:1229
-830:2:1237
-831:2:1238
-832:2:1242
-833:2:1243
-834:2:1251
-835:2:1256
-836:2:1260
-837:2:1261
-838:2:1268
-839:2:1269
-840:2:1280
-841:2:1281
-842:2:1282
-843:2:1293
-844:2:1298
-845:2:1299
-846:0:1982
-847:2:1311
-848:0:1982
-849:2:1313
-850:0:1982
-851:2:1314
-852:2:1318
-853:2:1319
-854:2:1327
-855:2:1328
-856:2:1332
-857:2:1333
-858:2:1341
-859:2:1346
-860:2:1350
-861:2:1351
-862:2:1358
-863:2:1359
-864:2:1370
-865:2:1371
-866:2:1372
-867:2:1383
-868:2:1388
-869:2:1389
-870:0:1982
-871:2:1401
-872:0:1982
-873:2:1403
-874:0:1982
-875:2:1406
-876:2:1407
-877:2:1419
-878:2:1420
-879:2:1424
-880:2:1425
-881:2:1433
-882:2:1438
-883:2:1442
-884:2:1443
-885:2:1450
-886:2:1451
-887:2:1462
-888:2:1463
-889:2:1464
-890:2:1475
-891:2:1480
-892:2:1481
-893:0:1982
-894:2:1493
-895:0:1982
-896:2:1495
-897:0:1982
-898:2:1496
-899:0:1982
-900:2:1497
-901:0:1982
-902:2:1498
-903:0:1982
-904:2:1499
-905:2:1503
-906:2:1504
-907:2:1512
-908:2:1513
-909:2:1517
-910:2:1518
-911:2:1526
-912:2:1531
-913:2:1535
-914:2:1536
-915:2:1543
-916:2:1544
-917:2:1555
-918:2:1556
-919:2:1557
-920:2:1568
-921:2:1573
-922:2:1574
-923:0:1982
-924:2:1586
-925:0:1982
-926:2:1699
-927:0:1982
-928:2:1797
-929:0:1982
-930:2:1798
-931:0:1982
-932:2:1802
-933:0:1982
-934:2:1811
-935:2:1812
-936:2:1816
-937:2:1820
-938:2:1821
-939:2:1825
-940:2:1833
-941:2:1834
-942:0:1982
-943:2:1842
-944:0:1982
-945:2:1846
-946:2:1847
-947:2:1851
-948:2:1855
-949:2:1856
-950:2:1860
-951:2:1868
-952:2:1869
-953:0:1982
-954:2:1877
-955:0:1982
-956:2:1885
-957:2:1886
-958:2:1890
-959:2:1894
-960:2:1895
-961:2:1899
-962:2:1907
-963:2:1908
-964:0:1982
-965:2:1916
-966:0:1982
-967:2:1918
-968:0:1982
-969:2:1919
-970:0:1982
-971:2:423
-972:0:1982
-973:2:424
-974:2:428
-975:2:429
-976:2:437
-977:2:438
-978:2:442
-979:2:443
-980:2:451
-981:2:456
-982:2:460
-983:2:461
-984:2:468
-985:2:469
-986:2:480
-987:2:481
-988:2:482
-989:2:493
-990:2:498
-991:2:499
-992:0:1982
-993:2:511
-994:0:1982
-995:2:513
-996:2:514
-997:0:1982
-998:2:518
-999:2:522
-1000:2:523
-1001:2:531
-1002:2:532
-1003:2:536
-1004:2:537
-1005:2:545
-1006:2:550
-1007:2:551
-1008:2:562
-1009:2:563
-1010:2:574
-1011:2:575
-1012:2:576
-1013:2:587
-1014:2:592
-1015:2:593
-1016:0:1982
-1017:2:605
-1018:0:1982
-1019:2:607
-1020:0:1982
-1021:2:608
-1022:0:1982
-1023:2:618
-1024:0:1982
-1025:2:622
-1026:2:623
-1027:2:627
-1028:2:631
-1029:2:632
-1030:2:636
-1031:2:644
-1032:2:645
-1033:0:1982
-1034:2:653
-1035:0:1982
-1036:2:657
-1037:2:658
-1038:2:662
-1039:2:666
-1040:2:667
-1041:2:671
-1042:2:679
-1043:2:680
-1044:0:1982
-1045:2:688
-1046:0:1982
-1047:2:696
-1048:2:697
-1049:2:701
-1050:2:705
-1051:2:706
-1052:2:710
-1053:2:718
-1054:2:719
-1055:0:1982
-1056:2:727
-1057:0:1982
-1058:2:729
-1059:0:1982
-1060:2:730
-1061:2:734
-1062:2:735
-1063:2:743
-1064:2:744
-1065:2:748
-1066:2:749
-1067:2:757
-1068:2:762
-1069:2:766
-1070:2:767
-1071:2:774
-1072:2:775
-1073:2:786
-1074:2:787
-1075:2:788
-1076:2:799
-1077:2:804
-1078:2:805
-1079:0:1982
-1080:2:817
-1081:0:1982
-1082:2:819
-1083:0:1982
-1084:2:822
-1085:2:823
-1086:2:835
-1087:2:836
-1088:2:840
-1089:2:841
-1090:2:849
-1091:2:854
-1092:2:858
-1093:2:859
-1094:2:866
-1095:2:867
-1096:2:878
-1097:2:879
-1098:2:880
-1099:2:891
-1100:2:896
-1101:2:897
-1102:0:1982
-1103:2:909
-1104:0:1982
-1105:2:911
-1106:0:1982
-1107:2:912
-1108:0:1982
-1109:2:913
-1110:0:1982
-1111:2:914
-1112:0:1982
-1113:2:915
-1114:2:919
-1115:2:920
-1116:2:928
-1117:2:929
-1118:2:933
-1119:2:934
-1120:2:942
-1121:2:947
-1122:2:951
-1123:2:952
-1124:2:959
-1125:2:960
-1126:2:971
-1127:2:972
-1128:2:973
-1129:2:984
-1130:2:989
-1131:2:990
-1132:0:1982
-1133:2:1002
-1134:0:1982
-1135:2:1115
-1136:0:1982
-1137:2:1213
-1138:0:1982
-1139:2:1214
-1140:0:1982
-1141:2:1218
-1142:0:1982
-1143:2:1224
-1144:2:1228
-1145:2:1229
-1146:2:1237
-1147:2:1238
-1148:2:1242
-1149:2:1243
-1150:2:1251
-1151:2:1256
-1152:2:1260
-1153:2:1261
-1154:2:1268
-1155:2:1269
-1156:2:1280
-1157:2:1281
-1158:2:1282
-1159:2:1293
-1160:2:1298
-1161:2:1299
-1162:0:1982
-1163:2:1311
-1164:0:1982
-1165:2:1313
-1166:0:1982
-1167:2:1314
-1168:2:1318
-1169:2:1319
-1170:2:1327
-1171:2:1328
-1172:2:1332
-1173:2:1333
-1174:2:1341
-1175:2:1346
-1176:2:1350
-1177:2:1351
-1178:2:1358
-1179:2:1359
-1180:2:1370
-1181:2:1371
-1182:2:1372
-1183:2:1383
-1184:2:1388
-1185:2:1389
-1186:0:1982
-1187:2:1401
-1188:0:1982
-1189:2:1403
-1190:0:1982
-1191:2:1406
-1192:2:1407
-1193:2:1419
-1194:2:1420
-1195:2:1424
-1196:2:1425
-1197:2:1433
-1198:2:1438
-1199:2:1442
-1200:2:1443
-1201:2:1450
-1202:2:1451
-1203:2:1462
-1204:2:1463
-1205:2:1464
-1206:2:1475
-1207:2:1480
-1208:2:1481
-1209:0:1982
-1210:2:1493
-1211:0:1982
-1212:2:1495
-1213:0:1982
-1214:2:1496
-1215:0:1982
-1216:2:1497
-1217:0:1982
-1218:2:1498
-1219:0:1982
-1220:2:1499
-1221:2:1503
-1222:2:1504
-1223:2:1512
-1224:2:1513
-1225:2:1517
-1226:2:1518
-1227:2:1526
-1228:2:1531
-1229:2:1535
-1230:2:1536
-1231:2:1543
-1232:2:1544
-1233:2:1555
-1234:2:1556
-1235:2:1557
-1236:2:1568
-1237:2:1573
-1238:2:1574
-1239:0:1982
-1240:2:1586
-1241:0:1982
-1242:2:1699
-1243:0:1982
-1244:2:1797
-1245:0:1982
-1246:2:1798
-1247:0:1982
-1248:2:1802
-1249:0:1982
-1250:2:1811
-1251:2:1812
-1252:2:1816
-1253:2:1820
-1254:2:1821
-1255:2:1825
-1256:2:1833
-1257:2:1834
-1258:0:1982
-1259:2:1842
-1260:0:1982
-1261:2:1846
-1262:2:1847
-1263:2:1851
-1264:2:1855
-1265:2:1856
-1266:2:1860
-1267:2:1868
-1268:2:1869
-1269:0:1982
-1270:2:1877
-1271:0:1982
-1272:2:1885
-1273:2:1886
-1274:2:1890
-1275:2:1894
-1276:2:1895
-1277:2:1899
-1278:2:1907
-1279:2:1908
-1280:0:1982
-1281:2:1916
-1282:0:1982
-1283:2:1918
-1284:0:1982
-1285:2:1919
-1286:0:1982
-1287:2:423
-1288:0:1982
-1289:2:424
-1290:2:428
-1291:2:429
-1292:2:437
-1293:2:438
-1294:2:442
-1295:2:443
-1296:2:451
-1297:2:456
-1298:2:460
-1299:2:461
-1300:2:468
-1301:2:469
-1302:2:480
-1303:2:481
-1304:2:482
-1305:2:493
-1306:2:498
-1307:2:499
-1308:0:1982
-1309:2:511
-1310:0:1982
-1311:2:513
-1312:2:514
-1313:0:1982
-1314:2:518
-1315:2:522
-1316:2:523
-1317:2:531
-1318:2:532
-1319:2:536
-1320:2:537
-1321:2:545
-1322:2:558
-1323:2:559
-1324:2:562
-1325:2:563
-1326:2:574
-1327:2:575
-1328:2:576
-1329:2:587
-1330:2:592
-1331:2:595
-1332:2:596
-1333:0:1982
-1334:2:605
-1335:0:1982
-1336:2:607
-1337:0:1982
-1338:2:608
-1339:0:1982
-1340:2:618
-1341:0:1982
-1342:1:2
-1343:0:1982
-1344:1:8
-1345:0:1982
-1346:1:9
-1347:0:1982
-1348:1:10
-1349:0:1982
-1350:1:11
-1351:0:1982
-1352:1:12
-1353:1:16
-1354:1:17
-1355:1:25
-1356:1:26
-1357:1:30
-1358:1:31
-1359:1:39
-1360:1:44
-1361:1:48
-1362:1:49
-1363:1:56
-1364:1:57
-1365:1:68
-1366:1:69
-1367:1:70
-1368:1:81
-1369:1:86
-1370:1:87
-1371:0:1982
-1372:1:99
-1373:0:1982
-1374:2:622
-1375:2:623
-1376:2:627
-1377:2:631
-1378:2:632
-1379:2:636
-1380:2:641
-1381:0:1982
-1382:2:653
-1383:0:1982
-1384:2:657
-1385:2:658
-1386:2:662
-1387:2:666
-1388:2:667
-1389:2:671
-1390:2:679
-1391:2:680
-1392:0:1982
-1393:2:688
-1394:0:1982
-1395:2:696
-1396:2:697
-1397:2:701
-1398:2:705
-1399:2:706
-1400:2:710
-1401:2:718
-1402:2:719
-1403:0:1982
-1404:2:727
-1405:0:1982
-1406:2:729
-1407:0:1982
-1408:2:730
-1409:2:734
-1410:2:735
-1411:2:743
-1412:2:744
-1413:2:748
-1414:2:749
-1415:2:757
-1416:2:762
-1417:2:766
-1418:2:767
-1419:2:774
-1420:2:775
-1421:2:786
-1422:2:787
-1423:2:788
-1424:2:799
-1425:2:804
-1426:2:805
-1427:0:1982
-1428:2:817
-1429:0:1982
-1430:2:819
-1431:0:1982
-1432:2:822
-1433:2:823
-1434:2:835
-1435:2:836
-1436:2:840
-1437:2:841
-1438:2:849
-1439:2:854
-1440:2:858
-1441:2:859
-1442:2:866
-1443:2:867
-1444:2:878
-1445:2:879
-1446:2:880
-1447:2:891
-1448:2:896
-1449:2:897
-1450:0:1982
-1451:2:909
-1452:0:1982
-1453:2:911
-1454:0:1982
-1455:2:912
-1456:0:1982
-1457:2:913
-1458:0:1982
-1459:2:914
-1460:0:1982
-1461:2:915
-1462:2:919
-1463:2:920
-1464:2:928
-1465:2:929
-1466:2:933
-1467:2:934
-1468:2:942
-1469:2:947
-1470:2:951
-1471:2:952
-1472:2:959
-1473:2:960
-1474:2:971
-1475:2:972
-1476:2:973
-1477:2:984
-1478:2:989
-1479:2:990
-1480:0:1982
-1481:2:1002
-1482:0:1982
-1483:2:1115
-1484:0:1982
-1485:2:1213
-1486:0:1982
-1487:2:1214
-1488:0:1982
-1489:2:1218
-1490:0:1982
-1491:2:1224
-1492:2:1228
-1493:2:1229
-1494:2:1237
-1495:2:1238
-1496:2:1242
-1497:2:1243
-1498:2:1251
-1499:2:1256
-1500:2:1260
-1501:2:1261
-1502:2:1268
-1503:2:1269
-1504:2:1280
-1505:2:1281
-1506:2:1282
-1507:2:1293
-1508:2:1298
-1509:2:1299
-1510:0:1982
-1511:2:1311
-1512:0:1982
-1513:2:1313
-1514:0:1982
-1515:2:1314
-1516:2:1318
-1517:2:1319
-1518:2:1327
-1519:2:1328
-1520:2:1332
-1521:2:1333
-1522:2:1341
-1523:2:1346
-1524:2:1350
-1525:2:1351
-1526:2:1358
-1527:2:1359
-1528:2:1370
-1529:2:1371
-1530:2:1372
-1531:2:1383
-1532:2:1388
-1533:2:1389
-1534:0:1982
-1535:2:1401
-1536:0:1982
-1537:2:1403
-1538:0:1982
-1539:2:1406
-1540:2:1407
-1541:2:1419
-1542:2:1420
-1543:2:1424
-1544:2:1425
-1545:2:1433
-1546:2:1438
-1547:2:1442
-1548:2:1443
-1549:2:1450
-1550:2:1451
-1551:2:1462
-1552:2:1463
-1553:2:1464
-1554:2:1475
-1555:2:1480
-1556:2:1481
-1557:0:1982
-1558:2:1493
-1559:0:1982
-1560:2:1495
-1561:0:1982
-1562:2:1496
-1563:0:1982
-1564:2:1497
-1565:0:1982
-1566:2:1498
-1567:0:1982
-1568:2:1499
-1569:2:1503
-1570:2:1504
-1571:2:1512
-1572:2:1513
-1573:2:1517
-1574:2:1518
-1575:2:1526
-1576:2:1531
-1577:2:1535
-1578:2:1536
-1579:2:1543
-1580:2:1544
-1581:2:1555
-1582:2:1556
-1583:2:1557
-1584:2:1568
-1585:2:1573
-1586:2:1574
-1587:0:1982
-1588:2:1586
-1589:0:1982
-1590:2:1699
-1591:0:1982
-1592:2:1797
-1593:0:1982
-1594:2:1798
-1595:0:1982
-1596:2:1802
-1597:0:1982
-1598:2:1811
-1599:2:1812
-1600:2:1816
-1601:2:1820
-1602:2:1821
-1603:2:1825
-1604:2:1833
-1605:2:1834
-1606:0:1982
-1607:2:1842
-1608:0:1982
-1609:2:1846
-1610:2:1847
-1611:2:1851
-1612:2:1855
-1613:2:1856
-1614:2:1860
-1615:2:1868
-1616:2:1869
-1617:0:1982
-1618:2:1877
-1619:0:1982
-1620:2:1885
-1621:2:1886
-1622:2:1890
-1623:2:1894
-1624:2:1895
-1625:2:1899
-1626:2:1907
-1627:2:1908
-1628:0:1982
-1629:2:1916
-1630:0:1982
-1631:2:1918
-1632:0:1982
-1633:2:1919
-1634:0:1982
-1635:2:1922
-1636:0:1982
-1637:2:1927
-1638:0:1982
-1639:1:101
-1640:0:1982
-1641:2:1928
-1642:0:1982
-1643:1:102
-1644:1:106
-1645:1:107
-1646:1:115
-1647:1:116
-1648:1:120
-1649:1:121
-1650:1:129
-1651:1:134
-1652:1:138
-1653:1:139
-1654:1:146
-1655:1:147
-1656:1:158
-1657:1:159
-1658:1:160
-1659:1:171
-1660:1:183
-1661:1:184
-1662:0:1982
-1663:2:1927
-1664:0:1982
-1665:1:189
-1666:0:1982
-1667:2:1928
-1668:0:1982
-1669:1:191
-1670:0:1982
-1671:2:1927
-1672:0:1982
-1673:1:192
-1674:0:1982
-1675:2:1928
-1676:0:1982
-1677:1:193
-1678:1:197
-1679:1:198
-1680:1:206
-1681:1:207
-1682:1:211
-1683:1:212
-1684:1:220
-1685:1:225
-1686:1:229
-1687:1:230
-1688:1:237
-1689:1:238
-1690:1:249
-1691:1:250
-1692:1:251
-1693:1:262
-1694:1:274
-1695:1:275
-1696:0:1982
-1697:2:1927
-1698:0:1982
-1699:1:280
-1700:0:1982
-1701:2:1928
-1702:0:1982
-1703:1:282
-1704:0:1982
-1705:2:1927
-1706:0:1982
-1707:1:291
-1708:0:1982
-1709:2:1928
-1710:0:1982
-1711:1:293
-1712:0:1982
-1713:2:1927
-1714:0:1982
-1715:1:11
-1716:0:1982
-1717:2:1928
-1718:0:1982
-1719:1:12
-1720:1:16
-1721:1:17
-1722:1:25
-1723:1:26
-1724:1:27
-1725:1:39
-1726:1:44
-1727:1:48
-1728:1:49
-1729:1:56
-1730:1:57
-1731:1:68
-1732:1:69
-1733:1:70
-1734:1:81
-1735:1:93
-1736:1:94
-1737:0:1982
-1738:2:1927
-1739:0:1982
-1740:1:99
-1741:0:1982
-1742:2:1928
-1743:0:1982
-1744:1:101
-1745:0:1982
-1746:2:1927
-1747:0:1982
-1748:1:102
-1749:1:106
-1750:1:107
-1751:1:115
-1752:1:116
-1753:1:120
-1754:1:121
-1755:1:129
-1756:1:134
-1757:1:138
-1758:1:139
-1759:1:146
-1760:1:147
-1761:1:158
-1762:1:159
-1763:1:160
-1764:1:171
-1765:1:183
-1766:1:184
-1767:0:1982
-1768:2:1928
-1769:0:1982
-1770:1:189
-1771:0:1982
-1772:2:1927
-1773:0:1982
-1774:1:285
-1775:0:1982
-1776:2:1928
-1777:0:1982
-1778:1:286
-1779:0:1982
-1780:2:1927
-1781:0:1982
-1782:1:291
-1783:0:1982
-1784:2:1928
-1785:0:1982
-1786:1:293
-1787:0:1982
-1788:2:1927
-1789:0:1982
-1790:1:296
-1791:0:1982
-1792:2:1928
-1793:0:1982
-1794:1:301
-1795:0:1982
-1796:2:1927
-1797:0:1982
-1798:1:302
-1799:0:1980
-1800:2:1928
-1801:0:1986
-1802:1:124
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.define b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.log b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index 4dd3892..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-pan: claim violated! (at depth 1882)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 4174, errors: 1
-   367189 states, stored
-  3431533 states, matched
-  3798722 transitions (= stored+matched)
- 13407384 atomic steps
-hash conflicts:    253700 (resolved)
-
-Stats on memory usage (in Megabytes):
-   29.415      equivalent memory usage for states (stored*(State-vector + overhead))
-   22.811      actual memory usage for states (compression: 77.55%)
-               state-vector as stored = 37 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  488.518      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 331, "(1)"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (18 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 401, "pan.___", state 134, "((i<1))"
-       line 401, "pan.___", state 134, "((i>=1))"
-       line 409, "pan.___", state 153, "(1)"
-       line 409, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 154, "else"
-       line 409, "pan.___", state 157, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 413, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 167, "else"
-       line 413, "pan.___", state 170, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 411, "pan.___", state 176, "((i<1))"
-       line 411, "pan.___", state 176, "((i>=1))"
-       line 418, "pan.___", state 183, "(1)"
-       line 418, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 184, "else"
-       line 418, "pan.___", state 187, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 369, "pan.___", state 193, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 646, "pan.___", state 202, "((write_lock==0))"
-       line 646, "pan.___", state 202, "else"
-       line 644, "pan.___", state 203, "(1)"
-       line 160, "pan.___", state 209, "(1)"
-       line 164, "pan.___", state 217, "(1)"
-       line 164, "pan.___", state 218, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 164, "pan.___", state 218, "else"
-       line 162, "pan.___", state 223, "((j<1))"
-       line 162, "pan.___", state 223, "((j>=1))"
-       line 168, "pan.___", state 229, "(1)"
-       line 168, "pan.___", state 230, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 168, "pan.___", state 230, "else"
-       line 160, "pan.___", state 241, "(1)"
-       line 168, "pan.___", state 261, "(1)"
-       line 160, "pan.___", state 277, "(1)"
-       line 164, "pan.___", state 285, "(1)"
-       line 168, "pan.___", state 297, "(1)"
-       line 399, "pan.___", state 311, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 325, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 343, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 356, "(1)"
-       line 413, "pan.___", state 369, "(1)"
-       line 418, "pan.___", state 386, "(1)"
-       line 399, "pan.___", state 405, "(1)"
-       line 403, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 461, "(1)"
-       line 418, "pan.___", state 478, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 164, "pan.___", state 594, "(1)"
-       line 168, "pan.___", state 606, "(1)"
-       line 160, "pan.___", state 618, "(1)"
-       line 168, "pan.___", state 638, "(1)"
-       line 164, "pan.___", state 662, "(1)"
-       line 168, "pan.___", state 674, "(1)"
-       line 399, "pan.___", state 696, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 698, "(1)"
-       line 399, "pan.___", state 699, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 699, "else"
-       line 399, "pan.___", state 702, "(1)"
-       line 403, "pan.___", state 710, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 712, "(1)"
-       line 403, "pan.___", state 713, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 713, "else"
-       line 403, "pan.___", state 716, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 401, "pan.___", state 722, "((i<1))"
-       line 401, "pan.___", state 722, "((i>=1))"
-       line 408, "pan.___", state 728, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 741, "(1)"
-       line 409, "pan.___", state 742, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 742, "else"
-       line 409, "pan.___", state 745, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 413, "pan.___", state 754, "(1)"
-       line 413, "pan.___", state 755, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 755, "else"
-       line 413, "pan.___", state 758, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 411, "pan.___", state 764, "((i<1))"
-       line 411, "pan.___", state 764, "((i>=1))"
-       line 418, "pan.___", state 771, "(1)"
-       line 418, "pan.___", state 772, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 772, "else"
-       line 418, "pan.___", state 775, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 403, "pan.___", state 810, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 828, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 854, "(1)"
-       line 418, "pan.___", state 871, "(1)"
-       line 403, "pan.___", state 900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 918, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 944, "(1)"
-       line 418, "pan.___", state 961, "(1)"
-       line 399, "pan.___", state 980, "(1)"
-       line 403, "pan.___", state 992, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1010, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1036, "(1)"
-       line 418, "pan.___", state 1053, "(1)"
-       line 403, "pan.___", state 1085, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1103, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1129, "(1)"
-       line 418, "pan.___", state 1146, "(1)"
-       line 164, "pan.___", state 1169, "(1)"
-       line 168, "pan.___", state 1181, "(1)"
-       line 160, "pan.___", state 1193, "(1)"
-       line 168, "pan.___", state 1213, "(1)"
-       line 164, "pan.___", state 1237, "(1)"
-       line 168, "pan.___", state 1249, "(1)"
-       line 399, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1273, "(1)"
-       line 399, "pan.___", state 1274, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1274, "else"
-       line 399, "pan.___", state 1277, "(1)"
-       line 403, "pan.___", state 1285, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1287, "(1)"
-       line 403, "pan.___", state 1288, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1288, "else"
-       line 403, "pan.___", state 1291, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 401, "pan.___", state 1297, "((i<1))"
-       line 401, "pan.___", state 1297, "((i>=1))"
-       line 408, "pan.___", state 1303, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1316, "(1)"
-       line 409, "pan.___", state 1317, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1317, "else"
-       line 409, "pan.___", state 1320, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 413, "pan.___", state 1329, "(1)"
-       line 413, "pan.___", state 1330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1330, "else"
-       line 413, "pan.___", state 1333, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 411, "pan.___", state 1339, "((i<1))"
-       line 411, "pan.___", state 1339, "((i>=1))"
-       line 418, "pan.___", state 1346, "(1)"
-       line 418, "pan.___", state 1347, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1347, "else"
-       line 418, "pan.___", state 1350, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 164, "pan.___", state 1379, "(1)"
-       line 168, "pan.___", state 1391, "(1)"
-       line 160, "pan.___", state 1403, "(1)"
-       line 168, "pan.___", state 1423, "(1)"
-       line 164, "pan.___", state 1447, "(1)"
-       line 168, "pan.___", state 1459, "(1)"
-       line 702, "pan.___", state 1484, "-end-"
-       (160 of 1484 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 2.96 seconds
-pan: rate 124050.34 states/second
-pan: avg transition delay 7.7921e-07 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.spin.input b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index f4d8acb..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index f73a838..0000000
+++ /dev/null
@@ -1,1885 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1946
-2:3:1898
-3:3:1901
-4:3:1901
-5:3:1904
-6:3:1912
-7:3:1912
-8:3:1915
-9:3:1921
-10:3:1925
-11:3:1925
-12:3:1928
-13:3:1936
-14:3:1940
-15:3:1941
-16:0:1946
-17:3:1943
-18:0:1946
-19:2:416
-20:0:1946
-21:2:422
-22:0:1946
-23:2:423
-24:0:1946
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1946
-45:2:511
-46:0:1946
-47:2:513
-48:2:514
-49:0:1946
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1946
-69:2:605
-70:0:1946
-71:2:607
-72:0:1946
-73:2:608
-74:0:1946
-75:2:618
-76:0:1946
-77:2:619
-78:2:626
-79:2:627
-80:2:634
-81:2:639
-82:0:1946
-83:2:650
-84:0:1946
-85:2:651
-86:2:658
-87:2:659
-88:2:666
-89:2:671
-90:0:1946
-91:2:682
-92:0:1946
-93:2:687
-94:2:694
-95:2:695
-96:2:702
-97:2:707
-98:0:1946
-99:2:718
-100:0:1946
-101:2:720
-102:0:1946
-103:2:721
-104:2:725
-105:2:726
-106:2:734
-107:2:735
-108:2:739
-109:2:740
-110:2:748
-111:2:753
-112:2:757
-113:2:758
-114:2:765
-115:2:766
-116:2:777
-117:2:778
-118:2:779
-119:2:790
-120:2:795
-121:2:796
-122:0:1946
-123:2:808
-124:0:1946
-125:2:810
-126:0:1946
-127:2:813
-128:2:814
-129:2:826
-130:2:827
-131:2:831
-132:2:832
-133:2:840
-134:2:845
-135:2:849
-136:2:850
-137:2:857
-138:2:858
-139:2:869
-140:2:870
-141:2:871
-142:2:882
-143:2:887
-144:2:888
-145:0:1946
-146:2:900
-147:0:1946
-148:2:902
-149:0:1946
-150:2:903
-151:0:1946
-152:2:904
-153:0:1946
-154:2:905
-155:0:1946
-156:2:906
-157:2:910
-158:2:911
-159:2:919
-160:2:920
-161:2:924
-162:2:925
-163:2:933
-164:2:938
-165:2:942
-166:2:943
-167:2:950
-168:2:951
-169:2:962
-170:2:963
-171:2:964
-172:2:975
-173:2:980
-174:2:981
-175:0:1946
-176:2:993
-177:0:1946
-178:2:1097
-179:0:1946
-180:2:1195
-181:0:1946
-182:2:1196
-183:0:1946
-184:2:1200
-185:0:1946
-186:2:1206
-187:2:1210
-188:2:1211
-189:2:1219
-190:2:1220
-191:2:1224
-192:2:1225
-193:2:1233
-194:2:1238
-195:2:1242
-196:2:1243
-197:2:1250
-198:2:1251
-199:2:1262
-200:2:1263
-201:2:1264
-202:2:1275
-203:2:1280
-204:2:1281
-205:0:1946
-206:2:1293
-207:0:1946
-208:2:1295
-209:0:1946
-210:2:1296
-211:2:1300
-212:2:1301
-213:2:1309
-214:2:1310
-215:2:1314
-216:2:1315
-217:2:1323
-218:2:1328
-219:2:1332
-220:2:1333
-221:2:1340
-222:2:1341
-223:2:1352
-224:2:1353
-225:2:1354
-226:2:1365
-227:2:1370
-228:2:1371
-229:0:1946
-230:2:1383
-231:0:1946
-232:2:1385
-233:0:1946
-234:2:1388
-235:2:1389
-236:2:1401
-237:2:1402
-238:2:1406
-239:2:1407
-240:2:1415
-241:2:1420
-242:2:1424
-243:2:1425
-244:2:1432
-245:2:1433
-246:2:1444
-247:2:1445
-248:2:1446
-249:2:1457
-250:2:1462
-251:2:1463
-252:0:1946
-253:2:1475
-254:0:1946
-255:2:1477
-256:0:1946
-257:2:1478
-258:0:1946
-259:2:1479
-260:0:1946
-261:2:1480
-262:0:1946
-263:2:1481
-264:2:1485
-265:2:1486
-266:2:1494
-267:2:1495
-268:2:1499
-269:2:1500
-270:2:1508
-271:2:1513
-272:2:1517
-273:2:1518
-274:2:1525
-275:2:1526
-276:2:1537
-277:2:1538
-278:2:1539
-279:2:1550
-280:2:1555
-281:2:1556
-282:0:1946
-283:2:1568
-284:0:1946
-285:2:1672
-286:0:1946
-287:2:1770
-288:0:1946
-289:2:1771
-290:0:1946
-291:2:1775
-292:0:1946
-293:2:1781
-294:2:1788
-295:2:1789
-296:2:1796
-297:2:1801
-298:0:1946
-299:2:1812
-300:0:1946
-301:2:1813
-302:2:1820
-303:2:1821
-304:2:1828
-305:2:1833
-306:0:1946
-307:2:1844
-308:0:1946
-309:2:1849
-310:2:1856
-311:2:1857
-312:2:1864
-313:2:1869
-314:0:1946
-315:2:1880
-316:0:1946
-317:2:1882
-318:0:1946
-319:2:1883
-320:0:1946
-321:2:423
-322:0:1946
-323:2:424
-324:2:428
-325:2:429
-326:2:437
-327:2:438
-328:2:442
-329:2:443
-330:2:451
-331:2:456
-332:2:460
-333:2:461
-334:2:468
-335:2:469
-336:2:480
-337:2:481
-338:2:482
-339:2:493
-340:2:498
-341:2:499
-342:0:1946
-343:2:511
-344:0:1946
-345:2:513
-346:2:514
-347:0:1946
-348:2:518
-349:2:522
-350:2:523
-351:2:531
-352:2:532
-353:2:536
-354:2:537
-355:2:545
-356:2:550
-357:2:551
-358:2:562
-359:2:563
-360:2:574
-361:2:575
-362:2:576
-363:2:587
-364:2:592
-365:2:593
-366:0:1946
-367:2:605
-368:0:1946
-369:2:607
-370:0:1946
-371:2:608
-372:0:1946
-373:2:618
-374:0:1946
-375:2:619
-376:2:626
-377:2:627
-378:2:634
-379:2:639
-380:0:1946
-381:2:650
-382:0:1946
-383:2:651
-384:2:658
-385:2:659
-386:2:666
-387:2:671
-388:0:1946
-389:2:682
-390:0:1946
-391:2:687
-392:2:694
-393:2:695
-394:2:702
-395:2:707
-396:0:1946
-397:2:718
-398:0:1946
-399:2:720
-400:0:1946
-401:2:721
-402:2:725
-403:2:726
-404:2:734
-405:2:735
-406:2:739
-407:2:740
-408:2:748
-409:2:753
-410:2:757
-411:2:758
-412:2:765
-413:2:766
-414:2:777
-415:2:778
-416:2:779
-417:2:790
-418:2:795
-419:2:796
-420:0:1946
-421:2:808
-422:0:1946
-423:2:810
-424:0:1946
-425:2:813
-426:2:814
-427:2:826
-428:2:827
-429:2:831
-430:2:832
-431:2:840
-432:2:845
-433:2:849
-434:2:850
-435:2:857
-436:2:858
-437:2:869
-438:2:870
-439:2:871
-440:2:882
-441:2:887
-442:2:888
-443:0:1946
-444:2:900
-445:0:1946
-446:2:902
-447:0:1946
-448:2:903
-449:0:1946
-450:2:904
-451:0:1946
-452:2:905
-453:0:1946
-454:2:906
-455:2:910
-456:2:911
-457:2:919
-458:2:920
-459:2:924
-460:2:925
-461:2:933
-462:2:938
-463:2:942
-464:2:943
-465:2:950
-466:2:951
-467:2:962
-468:2:963
-469:2:964
-470:2:975
-471:2:980
-472:2:981
-473:0:1946
-474:2:993
-475:0:1946
-476:2:1097
-477:0:1946
-478:2:1195
-479:0:1946
-480:2:1196
-481:0:1946
-482:2:1200
-483:0:1946
-484:2:1206
-485:2:1210
-486:2:1211
-487:2:1219
-488:2:1220
-489:2:1224
-490:2:1225
-491:2:1233
-492:2:1238
-493:2:1242
-494:2:1243
-495:2:1250
-496:2:1251
-497:2:1262
-498:2:1263
-499:2:1264
-500:2:1275
-501:2:1280
-502:2:1281
-503:0:1946
-504:2:1293
-505:0:1946
-506:2:1295
-507:0:1946
-508:2:1296
-509:2:1300
-510:2:1301
-511:2:1309
-512:2:1310
-513:2:1314
-514:2:1315
-515:2:1323
-516:2:1328
-517:2:1332
-518:2:1333
-519:2:1340
-520:2:1341
-521:2:1352
-522:2:1353
-523:2:1354
-524:2:1365
-525:2:1370
-526:2:1371
-527:0:1946
-528:2:1383
-529:0:1946
-530:2:1385
-531:0:1946
-532:2:1388
-533:2:1389
-534:2:1401
-535:2:1402
-536:2:1406
-537:2:1407
-538:2:1415
-539:2:1420
-540:2:1424
-541:2:1425
-542:2:1432
-543:2:1433
-544:2:1444
-545:2:1445
-546:2:1446
-547:2:1457
-548:2:1462
-549:2:1463
-550:0:1946
-551:2:1475
-552:0:1946
-553:2:1477
-554:0:1946
-555:2:1478
-556:0:1946
-557:2:1479
-558:0:1946
-559:2:1480
-560:0:1946
-561:2:1481
-562:2:1485
-563:2:1486
-564:2:1494
-565:2:1495
-566:2:1499
-567:2:1500
-568:2:1508
-569:2:1513
-570:2:1517
-571:2:1518
-572:2:1525
-573:2:1526
-574:2:1537
-575:2:1538
-576:2:1539
-577:2:1550
-578:2:1555
-579:2:1556
-580:0:1946
-581:2:1568
-582:0:1946
-583:2:1672
-584:0:1946
-585:2:1770
-586:0:1946
-587:2:1771
-588:0:1946
-589:2:1775
-590:0:1946
-591:2:1781
-592:2:1788
-593:2:1789
-594:2:1796
-595:2:1801
-596:0:1946
-597:2:1812
-598:0:1946
-599:2:1813
-600:2:1820
-601:2:1821
-602:2:1828
-603:2:1833
-604:0:1946
-605:2:1844
-606:0:1946
-607:2:1849
-608:2:1856
-609:2:1857
-610:2:1864
-611:2:1869
-612:0:1946
-613:2:1880
-614:0:1946
-615:2:1882
-616:0:1946
-617:2:1883
-618:0:1946
-619:2:423
-620:0:1946
-621:2:424
-622:2:428
-623:2:429
-624:2:437
-625:2:438
-626:2:442
-627:2:443
-628:2:451
-629:2:456
-630:2:460
-631:2:461
-632:2:468
-633:2:469
-634:2:480
-635:2:481
-636:2:482
-637:2:493
-638:2:498
-639:2:499
-640:0:1946
-641:2:511
-642:0:1946
-643:2:513
-644:2:514
-645:0:1946
-646:2:518
-647:2:522
-648:2:523
-649:2:531
-650:2:532
-651:2:536
-652:2:537
-653:2:545
-654:2:550
-655:2:551
-656:2:562
-657:2:563
-658:2:574
-659:2:575
-660:2:576
-661:2:587
-662:2:592
-663:2:593
-664:0:1946
-665:2:605
-666:0:1946
-667:2:607
-668:0:1946
-669:2:608
-670:0:1946
-671:2:618
-672:0:1946
-673:2:619
-674:2:626
-675:2:627
-676:2:634
-677:2:639
-678:0:1946
-679:2:650
-680:0:1946
-681:2:651
-682:2:658
-683:2:659
-684:2:666
-685:2:671
-686:0:1946
-687:2:682
-688:0:1946
-689:2:687
-690:2:694
-691:2:695
-692:2:702
-693:2:707
-694:0:1946
-695:2:718
-696:0:1946
-697:2:720
-698:0:1946
-699:2:721
-700:2:725
-701:2:726
-702:2:734
-703:2:735
-704:2:739
-705:2:740
-706:2:748
-707:2:753
-708:2:757
-709:2:758
-710:2:765
-711:2:766
-712:2:777
-713:2:778
-714:2:779
-715:2:790
-716:2:795
-717:2:796
-718:0:1946
-719:2:808
-720:0:1946
-721:2:810
-722:0:1946
-723:2:813
-724:2:814
-725:2:826
-726:2:827
-727:2:831
-728:2:832
-729:2:840
-730:2:845
-731:2:849
-732:2:850
-733:2:857
-734:2:858
-735:2:869
-736:2:870
-737:2:871
-738:2:882
-739:2:887
-740:2:888
-741:0:1946
-742:2:900
-743:0:1946
-744:2:902
-745:0:1946
-746:2:903
-747:0:1946
-748:2:904
-749:0:1946
-750:2:905
-751:0:1946
-752:2:906
-753:2:910
-754:2:911
-755:2:919
-756:2:920
-757:2:924
-758:2:925
-759:2:933
-760:2:938
-761:2:942
-762:2:943
-763:2:950
-764:2:951
-765:2:962
-766:2:963
-767:2:964
-768:2:975
-769:2:980
-770:2:981
-771:0:1946
-772:2:993
-773:0:1946
-774:2:1097
-775:0:1946
-776:2:1195
-777:0:1946
-778:2:1196
-779:0:1946
-780:2:1200
-781:0:1946
-782:2:1206
-783:2:1210
-784:2:1211
-785:2:1219
-786:2:1220
-787:2:1224
-788:2:1225
-789:2:1233
-790:2:1238
-791:2:1242
-792:2:1243
-793:2:1250
-794:2:1251
-795:2:1262
-796:2:1263
-797:2:1264
-798:2:1275
-799:2:1280
-800:2:1281
-801:0:1946
-802:2:1293
-803:0:1946
-804:2:1295
-805:0:1946
-806:2:1296
-807:2:1300
-808:2:1301
-809:2:1309
-810:2:1310
-811:2:1314
-812:2:1315
-813:2:1323
-814:2:1328
-815:2:1332
-816:2:1333
-817:2:1340
-818:2:1341
-819:2:1352
-820:2:1353
-821:2:1354
-822:2:1365
-823:2:1370
-824:2:1371
-825:0:1946
-826:2:1383
-827:0:1946
-828:2:1385
-829:0:1946
-830:2:1388
-831:2:1389
-832:2:1401
-833:2:1402
-834:2:1406
-835:2:1407
-836:2:1415
-837:2:1420
-838:2:1424
-839:2:1425
-840:2:1432
-841:2:1433
-842:2:1444
-843:2:1445
-844:2:1446
-845:2:1457
-846:2:1462
-847:2:1463
-848:0:1946
-849:2:1475
-850:0:1946
-851:2:1477
-852:0:1946
-853:2:1478
-854:0:1946
-855:2:1479
-856:0:1946
-857:2:1480
-858:0:1946
-859:2:1481
-860:2:1485
-861:2:1486
-862:2:1494
-863:2:1495
-864:2:1499
-865:2:1500
-866:2:1508
-867:2:1513
-868:2:1517
-869:2:1518
-870:2:1525
-871:2:1526
-872:2:1537
-873:2:1538
-874:2:1539
-875:2:1550
-876:2:1555
-877:2:1556
-878:0:1946
-879:2:1568
-880:0:1946
-881:2:1672
-882:0:1946
-883:2:1770
-884:0:1946
-885:2:1771
-886:0:1946
-887:2:1775
-888:0:1946
-889:2:1781
-890:2:1788
-891:2:1789
-892:2:1796
-893:2:1801
-894:0:1946
-895:2:1812
-896:0:1946
-897:2:1813
-898:2:1820
-899:2:1821
-900:2:1828
-901:2:1833
-902:0:1946
-903:2:1844
-904:0:1946
-905:2:1849
-906:2:1856
-907:2:1857
-908:2:1864
-909:2:1869
-910:0:1946
-911:2:1880
-912:0:1946
-913:2:1882
-914:0:1946
-915:2:1883
-916:0:1946
-917:2:423
-918:0:1946
-919:2:424
-920:2:428
-921:2:429
-922:2:437
-923:2:438
-924:2:442
-925:2:443
-926:2:451
-927:2:456
-928:2:460
-929:2:461
-930:2:468
-931:2:469
-932:2:480
-933:2:481
-934:2:482
-935:2:493
-936:2:498
-937:2:499
-938:0:1946
-939:2:511
-940:0:1946
-941:2:513
-942:2:514
-943:0:1946
-944:2:518
-945:2:522
-946:2:523
-947:2:531
-948:2:532
-949:2:536
-950:2:537
-951:2:545
-952:2:550
-953:2:551
-954:2:562
-955:2:563
-956:2:574
-957:2:575
-958:2:576
-959:2:587
-960:2:592
-961:2:593
-962:0:1946
-963:2:605
-964:0:1946
-965:2:607
-966:0:1946
-967:2:608
-968:0:1946
-969:2:618
-970:0:1946
-971:2:619
-972:2:626
-973:2:627
-974:2:634
-975:2:639
-976:0:1946
-977:2:650
-978:0:1946
-979:2:651
-980:2:658
-981:2:659
-982:2:666
-983:2:671
-984:0:1946
-985:2:682
-986:0:1946
-987:2:687
-988:2:694
-989:2:695
-990:2:702
-991:2:707
-992:0:1946
-993:2:718
-994:0:1946
-995:2:720
-996:0:1946
-997:2:721
-998:2:725
-999:2:726
-1000:2:734
-1001:2:735
-1002:2:739
-1003:2:740
-1004:2:748
-1005:2:753
-1006:2:757
-1007:2:758
-1008:2:765
-1009:2:766
-1010:2:777
-1011:2:778
-1012:2:779
-1013:2:790
-1014:2:795
-1015:2:796
-1016:0:1946
-1017:2:808
-1018:0:1946
-1019:2:810
-1020:0:1946
-1021:2:813
-1022:2:814
-1023:2:826
-1024:2:827
-1025:2:831
-1026:2:832
-1027:2:840
-1028:2:845
-1029:2:849
-1030:2:850
-1031:2:857
-1032:2:858
-1033:2:869
-1034:2:870
-1035:2:871
-1036:2:882
-1037:2:887
-1038:2:888
-1039:0:1946
-1040:2:900
-1041:0:1946
-1042:2:902
-1043:0:1946
-1044:2:903
-1045:0:1946
-1046:2:904
-1047:0:1946
-1048:2:905
-1049:0:1946
-1050:2:906
-1051:2:910
-1052:2:911
-1053:2:919
-1054:2:920
-1055:2:924
-1056:2:925
-1057:2:933
-1058:2:938
-1059:2:942
-1060:2:943
-1061:2:950
-1062:2:951
-1063:2:962
-1064:2:963
-1065:2:964
-1066:2:975
-1067:2:980
-1068:2:981
-1069:0:1946
-1070:2:993
-1071:0:1946
-1072:2:1097
-1073:0:1946
-1074:2:1195
-1075:0:1946
-1076:2:1196
-1077:0:1946
-1078:2:1200
-1079:0:1946
-1080:2:1206
-1081:2:1210
-1082:2:1211
-1083:2:1219
-1084:2:1220
-1085:2:1224
-1086:2:1225
-1087:2:1233
-1088:2:1238
-1089:2:1242
-1090:2:1243
-1091:2:1250
-1092:2:1251
-1093:2:1262
-1094:2:1263
-1095:2:1264
-1096:2:1275
-1097:2:1280
-1098:2:1281
-1099:0:1946
-1100:2:1293
-1101:0:1946
-1102:2:1295
-1103:0:1946
-1104:2:1296
-1105:2:1300
-1106:2:1301
-1107:2:1309
-1108:2:1310
-1109:2:1314
-1110:2:1315
-1111:2:1323
-1112:2:1328
-1113:2:1332
-1114:2:1333
-1115:2:1340
-1116:2:1341
-1117:2:1352
-1118:2:1353
-1119:2:1354
-1120:2:1365
-1121:2:1370
-1122:2:1371
-1123:0:1946
-1124:2:1383
-1125:0:1946
-1126:2:1385
-1127:0:1946
-1128:2:1388
-1129:2:1389
-1130:2:1401
-1131:2:1402
-1132:2:1406
-1133:2:1407
-1134:2:1415
-1135:2:1420
-1136:2:1424
-1137:2:1425
-1138:2:1432
-1139:2:1433
-1140:2:1444
-1141:2:1445
-1142:2:1446
-1143:2:1457
-1144:2:1462
-1145:2:1463
-1146:0:1946
-1147:2:1475
-1148:0:1946
-1149:2:1477
-1150:0:1946
-1151:2:1478
-1152:0:1946
-1153:2:1479
-1154:0:1946
-1155:2:1480
-1156:0:1946
-1157:2:1481
-1158:2:1485
-1159:2:1486
-1160:2:1494
-1161:2:1495
-1162:2:1499
-1163:2:1500
-1164:2:1508
-1165:2:1513
-1166:2:1517
-1167:2:1518
-1168:2:1525
-1169:2:1526
-1170:2:1537
-1171:2:1538
-1172:2:1539
-1173:2:1550
-1174:2:1555
-1175:2:1556
-1176:0:1946
-1177:2:1568
-1178:0:1946
-1179:2:1672
-1180:0:1946
-1181:2:1770
-1182:0:1946
-1183:2:1771
-1184:0:1946
-1185:2:1775
-1186:0:1946
-1187:2:1781
-1188:2:1788
-1189:2:1789
-1190:2:1796
-1191:2:1801
-1192:0:1946
-1193:2:1812
-1194:0:1946
-1195:2:1813
-1196:2:1820
-1197:2:1821
-1198:2:1828
-1199:2:1833
-1200:0:1946
-1201:2:1844
-1202:0:1946
-1203:2:1849
-1204:2:1856
-1205:2:1857
-1206:2:1864
-1207:2:1869
-1208:0:1946
-1209:2:1880
-1210:0:1946
-1211:2:1882
-1212:0:1946
-1213:2:1883
-1214:0:1946
-1215:2:423
-1216:0:1946
-1217:2:424
-1218:2:428
-1219:2:429
-1220:2:437
-1221:2:438
-1222:2:442
-1223:2:443
-1224:2:451
-1225:2:456
-1226:2:460
-1227:2:461
-1228:2:468
-1229:2:469
-1230:2:480
-1231:2:481
-1232:2:482
-1233:2:493
-1234:2:498
-1235:2:499
-1236:0:1946
-1237:2:511
-1238:0:1946
-1239:2:513
-1240:2:514
-1241:0:1946
-1242:2:518
-1243:2:522
-1244:2:523
-1245:2:531
-1246:2:532
-1247:2:536
-1248:2:537
-1249:2:545
-1250:2:550
-1251:2:551
-1252:2:562
-1253:2:563
-1254:2:574
-1255:2:575
-1256:2:576
-1257:2:587
-1258:2:592
-1259:2:593
-1260:0:1946
-1261:2:605
-1262:0:1946
-1263:2:607
-1264:0:1946
-1265:2:608
-1266:0:1946
-1267:2:618
-1268:0:1946
-1269:2:619
-1270:2:626
-1271:2:627
-1272:2:634
-1273:2:639
-1274:0:1946
-1275:2:650
-1276:0:1946
-1277:1:2
-1278:0:1946
-1279:1:8
-1280:0:1946
-1281:1:9
-1282:0:1946
-1283:1:10
-1284:0:1946
-1285:1:11
-1286:0:1946
-1287:1:12
-1288:1:16
-1289:1:17
-1290:1:25
-1291:1:26
-1292:1:30
-1293:1:31
-1294:1:39
-1295:1:44
-1296:1:48
-1297:1:49
-1298:1:56
-1299:1:57
-1300:1:68
-1301:1:69
-1302:1:70
-1303:1:81
-1304:1:93
-1305:1:94
-1306:0:1946
-1307:1:99
-1308:0:1946
-1309:1:101
-1310:0:1946
-1311:1:102
-1312:1:106
-1313:1:107
-1314:1:115
-1315:1:116
-1316:1:120
-1317:1:121
-1318:1:129
-1319:1:134
-1320:1:138
-1321:1:139
-1322:1:146
-1323:1:147
-1324:1:158
-1325:1:159
-1326:1:160
-1327:1:171
-1328:1:183
-1329:1:184
-1330:0:1946
-1331:1:189
-1332:0:1946
-1333:1:191
-1334:0:1946
-1335:1:192
-1336:0:1946
-1337:1:193
-1338:1:197
-1339:1:198
-1340:1:206
-1341:1:207
-1342:1:211
-1343:1:212
-1344:1:220
-1345:1:225
-1346:1:229
-1347:1:230
-1348:1:237
-1349:1:238
-1350:1:249
-1351:1:250
-1352:1:251
-1353:1:262
-1354:1:274
-1355:1:275
-1356:0:1946
-1357:1:280
-1358:0:1946
-1359:1:282
-1360:0:1946
-1361:1:291
-1362:0:1946
-1363:1:293
-1364:0:1946
-1365:1:11
-1366:0:1946
-1367:1:12
-1368:1:16
-1369:1:17
-1370:1:25
-1371:1:26
-1372:1:27
-1373:1:39
-1374:1:44
-1375:1:48
-1376:1:49
-1377:1:56
-1378:1:57
-1379:1:68
-1380:1:69
-1381:1:70
-1382:1:81
-1383:1:93
-1384:1:94
-1385:0:1946
-1386:1:99
-1387:0:1946
-1388:1:101
-1389:0:1946
-1390:1:102
-1391:1:106
-1392:1:107
-1393:1:115
-1394:1:116
-1395:1:120
-1396:1:121
-1397:1:129
-1398:1:134
-1399:1:138
-1400:1:139
-1401:1:146
-1402:1:147
-1403:1:158
-1404:1:159
-1405:1:160
-1406:1:171
-1407:1:183
-1408:1:184
-1409:0:1946
-1410:1:189
-1411:0:1946
-1412:1:285
-1413:0:1946
-1414:1:286
-1415:0:1946
-1416:1:291
-1417:0:1946
-1418:1:293
-1419:0:1946
-1420:1:296
-1421:0:1946
-1422:1:301
-1423:0:1946
-1424:1:302
-1425:0:1946
-1426:1:303
-1427:0:1946
-1428:1:304
-1429:0:1946
-1430:1:305
-1431:0:1946
-1432:1:306
-1433:0:1946
-1434:1:308
-1435:0:1946
-1436:1:310
-1437:0:1946
-1438:1:311
-1439:1:315
-1440:1:316
-1441:1:324
-1442:1:325
-1443:1:326
-1444:1:338
-1445:1:343
-1446:1:347
-1447:1:348
-1448:1:355
-1449:1:356
-1450:1:367
-1451:1:368
-1452:1:369
-1453:1:380
-1454:1:392
-1455:1:393
-1456:0:1946
-1457:1:398
-1458:0:1946
-1459:1:400
-1460:0:1946
-1461:1:305
-1462:0:1946
-1463:1:306
-1464:0:1946
-1465:1:308
-1466:0:1946
-1467:1:310
-1468:0:1946
-1469:1:311
-1470:1:315
-1471:1:316
-1472:1:324
-1473:1:325
-1474:1:326
-1475:1:338
-1476:1:343
-1477:1:347
-1478:1:348
-1479:1:355
-1480:1:356
-1481:1:367
-1482:1:368
-1483:1:369
-1484:1:380
-1485:1:392
-1486:1:393
-1487:0:1946
-1488:1:398
-1489:0:1946
-1490:1:400
-1491:0:1946
-1492:1:404
-1493:0:1946
-1494:1:9
-1495:0:1946
-1496:1:10
-1497:0:1946
-1498:1:11
-1499:0:1946
-1500:1:12
-1501:1:16
-1502:1:17
-1503:1:25
-1504:1:26
-1505:1:27
-1506:1:39
-1507:1:44
-1508:1:48
-1509:1:49
-1510:1:56
-1511:1:57
-1512:1:68
-1513:1:69
-1514:1:70
-1515:1:81
-1516:1:93
-1517:1:94
-1518:0:1946
-1519:1:99
-1520:0:1946
-1521:1:101
-1522:0:1946
-1523:1:102
-1524:1:106
-1525:1:107
-1526:1:115
-1527:1:116
-1528:1:120
-1529:1:121
-1530:1:129
-1531:1:134
-1532:1:138
-1533:1:139
-1534:1:146
-1535:1:147
-1536:1:158
-1537:1:159
-1538:1:160
-1539:1:171
-1540:1:183
-1541:1:184
-1542:0:1946
-1543:1:189
-1544:0:1946
-1545:1:191
-1546:0:1946
-1547:1:192
-1548:0:1946
-1549:1:193
-1550:1:197
-1551:1:198
-1552:1:206
-1553:1:207
-1554:1:211
-1555:1:212
-1556:1:220
-1557:1:225
-1558:1:229
-1559:1:230
-1560:1:237
-1561:1:238
-1562:1:249
-1563:1:250
-1564:1:251
-1565:1:262
-1566:1:274
-1567:1:275
-1568:0:1946
-1569:1:280
-1570:0:1946
-1571:1:282
-1572:0:1946
-1573:1:291
-1574:0:1946
-1575:1:293
-1576:0:1946
-1577:1:11
-1578:0:1946
-1579:1:12
-1580:1:16
-1581:1:17
-1582:1:25
-1583:1:34
-1584:1:35
-1585:1:39
-1586:1:44
-1587:1:48
-1588:1:49
-1589:1:56
-1590:1:57
-1591:1:68
-1592:1:69
-1593:1:72
-1594:1:73
-1595:1:81
-1596:1:93
-1597:1:94
-1598:0:1946
-1599:1:99
-1600:0:1946
-1601:1:101
-1602:0:1946
-1603:1:102
-1604:1:106
-1605:1:107
-1606:1:115
-1607:1:124
-1608:1:125
-1609:1:129
-1610:1:134
-1611:1:138
-1612:1:139
-1613:1:146
-1614:1:147
-1615:1:158
-1616:1:159
-1617:1:162
-1618:1:163
-1619:1:171
-1620:1:183
-1621:1:184
-1622:0:1946
-1623:1:189
-1624:0:1946
-1625:1:285
-1626:0:1946
-1627:1:286
-1628:0:1946
-1629:1:291
-1630:0:1946
-1631:1:293
-1632:0:1946
-1633:1:296
-1634:0:1946
-1635:1:301
-1636:0:1946
-1637:2:651
-1638:2:658
-1639:2:661
-1640:2:662
-1641:2:666
-1642:2:671
-1643:0:1946
-1644:2:682
-1645:0:1946
-1646:2:687
-1647:2:694
-1648:2:695
-1649:2:702
-1650:2:707
-1651:0:1946
-1652:2:718
-1653:0:1946
-1654:2:720
-1655:0:1946
-1656:2:721
-1657:2:725
-1658:2:726
-1659:2:734
-1660:2:735
-1661:2:739
-1662:2:740
-1663:2:748
-1664:2:753
-1665:2:757
-1666:2:758
-1667:2:765
-1668:2:766
-1669:2:777
-1670:2:778
-1671:2:779
-1672:2:790
-1673:2:795
-1674:2:796
-1675:0:1946
-1676:2:808
-1677:0:1946
-1678:2:810
-1679:0:1946
-1680:2:813
-1681:2:814
-1682:2:826
-1683:2:827
-1684:2:831
-1685:2:832
-1686:2:840
-1687:2:845
-1688:2:849
-1689:2:850
-1690:2:857
-1691:2:858
-1692:2:869
-1693:2:870
-1694:2:871
-1695:2:882
-1696:2:887
-1697:2:888
-1698:0:1946
-1699:2:900
-1700:0:1946
-1701:2:902
-1702:0:1946
-1703:2:903
-1704:0:1946
-1705:2:904
-1706:0:1946
-1707:2:905
-1708:0:1946
-1709:2:906
-1710:2:910
-1711:2:911
-1712:2:919
-1713:2:920
-1714:2:924
-1715:2:925
-1716:2:933
-1717:2:938
-1718:2:942
-1719:2:943
-1720:2:950
-1721:2:951
-1722:2:962
-1723:2:963
-1724:2:964
-1725:2:975
-1726:2:980
-1727:2:981
-1728:0:1946
-1729:2:993
-1730:0:1946
-1731:2:1097
-1732:0:1946
-1733:2:1195
-1734:0:1946
-1735:2:1196
-1736:0:1946
-1737:2:1200
-1738:0:1946
-1739:2:1206
-1740:2:1210
-1741:2:1211
-1742:2:1219
-1743:2:1220
-1744:2:1224
-1745:2:1225
-1746:2:1233
-1747:2:1238
-1748:2:1242
-1749:2:1243
-1750:2:1250
-1751:2:1251
-1752:2:1262
-1753:2:1263
-1754:2:1264
-1755:2:1275
-1756:2:1280
-1757:2:1281
-1758:0:1946
-1759:2:1293
-1760:0:1946
-1761:2:1295
-1762:0:1946
-1763:2:1296
-1764:2:1300
-1765:2:1301
-1766:2:1309
-1767:2:1310
-1768:2:1314
-1769:2:1315
-1770:2:1323
-1771:2:1328
-1772:2:1332
-1773:2:1333
-1774:2:1340
-1775:2:1341
-1776:2:1352
-1777:2:1353
-1778:2:1354
-1779:2:1365
-1780:2:1370
-1781:2:1371
-1782:0:1946
-1783:2:1383
-1784:0:1946
-1785:2:1385
-1786:0:1946
-1787:2:1388
-1788:2:1389
-1789:2:1401
-1790:2:1402
-1791:2:1406
-1792:2:1407
-1793:2:1415
-1794:2:1420
-1795:2:1424
-1796:2:1425
-1797:2:1432
-1798:2:1433
-1799:2:1444
-1800:2:1445
-1801:2:1446
-1802:2:1457
-1803:2:1462
-1804:2:1463
-1805:0:1946
-1806:2:1475
-1807:0:1946
-1808:2:1477
-1809:0:1946
-1810:2:1478
-1811:0:1946
-1812:2:1479
-1813:0:1946
-1814:2:1480
-1815:0:1946
-1816:2:1481
-1817:2:1485
-1818:2:1486
-1819:2:1494
-1820:2:1495
-1821:2:1499
-1822:2:1500
-1823:2:1508
-1824:2:1513
-1825:2:1517
-1826:2:1518
-1827:2:1525
-1828:2:1526
-1829:2:1537
-1830:2:1538
-1831:2:1539
-1832:2:1550
-1833:2:1555
-1834:2:1556
-1835:0:1946
-1836:2:1568
-1837:0:1946
-1838:2:1672
-1839:0:1946
-1840:2:1770
-1841:0:1946
-1842:2:1771
-1843:0:1946
-1844:2:1775
-1845:0:1946
-1846:2:1781
-1847:2:1788
-1848:2:1789
-1849:2:1796
-1850:2:1801
-1851:0:1946
-1852:2:1812
-1853:0:1946
-1854:2:1813
-1855:2:1820
-1856:2:1823
-1857:2:1824
-1858:2:1828
-1859:2:1833
-1860:0:1946
-1861:2:1844
-1862:0:1946
-1863:2:1849
-1864:2:1856
-1865:2:1857
-1866:2:1864
-1867:2:1869
-1868:0:1946
-1869:2:1880
-1870:0:1946
-1871:2:1882
-1872:0:1946
-1873:2:1883
-1874:0:1946
-1875:2:1886
-1876:0:1946
-1877:2:1891
-1878:0:1946
-1879:1:302
-1880:0:1944
-1881:2:1892
-1882:0:1950
-1883:1:143
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.define b/formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.log b/formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 2a80112..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-pan: claim violated! (at depth 1371)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3387, errors: 1
-   206295 states, stored
-  1902753 states, matched
-  2109048 transitions (= stored+matched)
-  7663223 atomic steps
-hash conflicts:    101109 (resolved)
-
-Stats on memory usage (in Megabytes):
-   16.526      equivalent memory usage for states (stored*(State-vector + overhead))
-   13.080      actual memory usage for states (compression: 79.15%)
-               state-vector as stored = 38 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  478.752      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 179, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1003, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1013, "(1)"
-       line 164, "pan.___", state 1021, "(1)"
-       line 168, "pan.___", state 1033, "(1)"
-       line 175, "pan.___", state 1044, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1066, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1076, "(1)"
-       line 164, "pan.___", state 1084, "(1)"
-       line 168, "pan.___", state 1096, "(1)"
-       line 175, "pan.___", state 1111, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1133, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1143, "(1)"
-       line 164, "pan.___", state 1151, "(1)"
-       line 168, "pan.___", state 1163, "(1)"
-       line 702, "pan.___", state 1188, "-end-"
-       (100 of 1188 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.66 seconds
-pan: rate  124274.1 states/second
-pan: avg transition delay 7.8708e-07 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.spin.input b/formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index 93aae44..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define SINGLE_FLIP
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index 73c1400..0000000
+++ /dev/null
@@ -1,1374 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1650
-2:3:1602
-3:3:1605
-4:3:1605
-5:3:1608
-6:3:1616
-7:3:1616
-8:3:1619
-9:3:1625
-10:3:1629
-11:3:1629
-12:3:1632
-13:3:1640
-14:3:1644
-15:3:1645
-16:0:1650
-17:3:1647
-18:0:1650
-19:2:416
-20:0:1650
-21:2:422
-22:0:1650
-23:2:423
-24:0:1650
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1650
-45:2:511
-46:0:1650
-47:2:513
-48:2:514
-49:0:1650
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1650
-69:2:605
-70:0:1650
-71:2:607
-72:0:1650
-73:2:608
-74:0:1650
-75:2:618
-76:0:1650
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:2:650
-86:2:657
-87:2:658
-88:2:665
-89:2:670
-90:0:1650
-91:2:681
-92:0:1650
-93:2:685
-94:2:686
-95:2:690
-96:2:694
-97:2:695
-98:2:699
-99:2:707
-100:2:708
-101:2:713
-102:2:720
-103:2:721
-104:2:728
-105:2:733
-106:0:1650
-107:2:744
-108:0:1650
-109:2:752
-110:2:753
-111:2:757
-112:2:761
-113:2:762
-114:2:766
-115:2:774
-116:2:775
-117:2:780
-118:2:787
-119:2:788
-120:2:795
-121:2:800
-122:0:1650
-123:2:811
-124:0:1650
-125:2:813
-126:0:1650
-127:2:814
-128:2:818
-129:2:819
-130:2:827
-131:2:828
-132:2:832
-133:2:833
-134:2:841
-135:2:846
-136:2:850
-137:2:851
-138:2:858
-139:2:859
-140:2:870
-141:2:871
-142:2:872
-143:2:883
-144:2:888
-145:2:889
-146:0:1650
-147:2:901
-148:0:1650
-149:2:903
-150:0:1650
-151:2:906
-152:2:907
-153:2:919
-154:2:920
-155:2:924
-156:2:925
-157:2:933
-158:2:938
-159:2:942
-160:2:943
-161:2:950
-162:2:951
-163:2:962
-164:2:963
-165:2:964
-166:2:975
-167:2:980
-168:2:981
-169:0:1650
-170:2:993
-171:0:1650
-172:2:995
-173:0:1650
-174:2:996
-175:0:1650
-176:2:997
-177:0:1650
-178:2:998
-179:0:1650
-180:2:999
-181:2:1003
-182:2:1004
-183:2:1012
-184:2:1013
-185:2:1017
-186:2:1018
-187:2:1026
-188:2:1031
-189:2:1035
-190:2:1036
-191:2:1043
-192:2:1044
-193:2:1055
-194:2:1056
-195:2:1057
-196:2:1068
-197:2:1073
-198:2:1074
-199:0:1650
-200:2:1086
-201:0:1650
-202:2:1283
-203:0:1650
-204:2:1381
-205:0:1650
-206:2:1382
-207:0:1650
-208:2:1386
-209:0:1650
-210:2:1395
-211:2:1396
-212:2:1400
-213:2:1404
-214:2:1405
-215:2:1409
-216:2:1417
-217:2:1418
-218:2:1423
-219:2:1430
-220:2:1431
-221:2:1438
-222:2:1443
-223:0:1650
-224:2:1454
-225:0:1650
-226:2:1458
-227:2:1459
-228:2:1463
-229:2:1467
-230:2:1468
-231:2:1472
-232:2:1480
-233:2:1481
-234:2:1486
-235:2:1493
-236:2:1494
-237:2:1501
-238:2:1506
-239:0:1650
-240:2:1517
-241:0:1650
-242:2:1525
-243:2:1526
-244:2:1530
-245:2:1534
-246:2:1535
-247:2:1539
-248:2:1547
-249:2:1548
-250:2:1553
-251:2:1560
-252:2:1561
-253:2:1568
-254:2:1573
-255:0:1650
-256:2:1584
-257:0:1650
-258:2:1586
-259:0:1650
-260:2:1587
-261:0:1650
-262:2:423
-263:0:1650
-264:2:424
-265:2:428
-266:2:429
-267:2:437
-268:2:438
-269:2:442
-270:2:443
-271:2:451
-272:2:456
-273:2:460
-274:2:461
-275:2:468
-276:2:469
-277:2:480
-278:2:481
-279:2:482
-280:2:493
-281:2:498
-282:2:499
-283:0:1650
-284:2:511
-285:0:1650
-286:2:513
-287:2:514
-288:0:1650
-289:2:518
-290:2:522
-291:2:523
-292:2:531
-293:2:532
-294:2:536
-295:2:537
-296:2:545
-297:2:550
-298:2:551
-299:2:562
-300:2:563
-301:2:574
-302:2:575
-303:2:576
-304:2:587
-305:2:592
-306:2:593
-307:0:1650
-308:2:605
-309:0:1650
-310:2:607
-311:0:1650
-312:2:608
-313:0:1650
-314:2:618
-315:0:1650
-316:2:622
-317:2:623
-318:2:627
-319:2:631
-320:2:632
-321:2:636
-322:2:644
-323:2:645
-324:2:650
-325:2:657
-326:2:658
-327:2:665
-328:2:670
-329:0:1650
-330:2:681
-331:0:1650
-332:2:685
-333:2:686
-334:2:690
-335:2:694
-336:2:695
-337:2:699
-338:2:707
-339:2:708
-340:2:713
-341:2:720
-342:2:721
-343:2:728
-344:2:733
-345:0:1650
-346:2:744
-347:0:1650
-348:2:752
-349:2:753
-350:2:757
-351:2:761
-352:2:762
-353:2:766
-354:2:774
-355:2:775
-356:2:780
-357:2:787
-358:2:788
-359:2:795
-360:2:800
-361:0:1650
-362:2:811
-363:0:1650
-364:2:813
-365:0:1650
-366:2:814
-367:2:818
-368:2:819
-369:2:827
-370:2:828
-371:2:832
-372:2:833
-373:2:841
-374:2:846
-375:2:850
-376:2:851
-377:2:858
-378:2:859
-379:2:870
-380:2:871
-381:2:872
-382:2:883
-383:2:888
-384:2:889
-385:0:1650
-386:2:901
-387:0:1650
-388:2:903
-389:0:1650
-390:2:906
-391:2:907
-392:2:919
-393:2:920
-394:2:924
-395:2:925
-396:2:933
-397:2:938
-398:2:942
-399:2:943
-400:2:950
-401:2:951
-402:2:962
-403:2:963
-404:2:964
-405:2:975
-406:2:980
-407:2:981
-408:0:1650
-409:2:993
-410:0:1650
-411:2:995
-412:0:1650
-413:2:996
-414:0:1650
-415:2:997
-416:0:1650
-417:2:998
-418:0:1650
-419:2:999
-420:2:1003
-421:2:1004
-422:2:1012
-423:2:1013
-424:2:1017
-425:2:1018
-426:2:1026
-427:2:1031
-428:2:1035
-429:2:1036
-430:2:1043
-431:2:1044
-432:2:1055
-433:2:1056
-434:2:1057
-435:2:1068
-436:2:1073
-437:2:1074
-438:0:1650
-439:2:1086
-440:0:1650
-441:2:1283
-442:0:1650
-443:2:1381
-444:0:1650
-445:2:1382
-446:0:1650
-447:2:1386
-448:0:1650
-449:2:1395
-450:2:1396
-451:2:1400
-452:2:1404
-453:2:1405
-454:2:1409
-455:2:1417
-456:2:1418
-457:2:1423
-458:2:1430
-459:2:1431
-460:2:1438
-461:2:1443
-462:0:1650
-463:2:1454
-464:0:1650
-465:2:1458
-466:2:1459
-467:2:1463
-468:2:1467
-469:2:1468
-470:2:1472
-471:2:1480
-472:2:1481
-473:2:1486
-474:2:1493
-475:2:1494
-476:2:1501
-477:2:1506
-478:0:1650
-479:2:1517
-480:0:1650
-481:2:1525
-482:2:1526
-483:2:1530
-484:2:1534
-485:2:1535
-486:2:1539
-487:2:1547
-488:2:1548
-489:2:1553
-490:2:1560
-491:2:1561
-492:2:1568
-493:2:1573
-494:0:1650
-495:2:1584
-496:0:1650
-497:2:1586
-498:0:1650
-499:2:1587
-500:0:1650
-501:2:423
-502:0:1650
-503:2:424
-504:2:428
-505:2:429
-506:2:437
-507:2:438
-508:2:442
-509:2:443
-510:2:451
-511:2:456
-512:2:460
-513:2:461
-514:2:468
-515:2:469
-516:2:480
-517:2:481
-518:2:482
-519:2:493
-520:2:498
-521:2:499
-522:0:1650
-523:2:511
-524:0:1650
-525:2:513
-526:2:514
-527:0:1650
-528:2:518
-529:2:522
-530:2:523
-531:2:531
-532:2:532
-533:2:536
-534:2:537
-535:2:545
-536:2:550
-537:2:551
-538:2:562
-539:2:563
-540:2:574
-541:2:575
-542:2:576
-543:2:587
-544:2:592
-545:2:593
-546:0:1650
-547:2:605
-548:0:1650
-549:2:607
-550:0:1650
-551:2:608
-552:0:1650
-553:2:618
-554:0:1650
-555:2:622
-556:2:623
-557:2:627
-558:2:631
-559:2:632
-560:2:636
-561:2:644
-562:2:645
-563:2:650
-564:2:657
-565:2:658
-566:2:665
-567:2:670
-568:0:1650
-569:2:681
-570:0:1650
-571:2:685
-572:2:686
-573:2:690
-574:2:694
-575:2:695
-576:2:699
-577:2:707
-578:2:708
-579:2:713
-580:2:720
-581:2:721
-582:2:728
-583:2:733
-584:0:1650
-585:2:744
-586:0:1650
-587:2:752
-588:2:753
-589:2:757
-590:2:761
-591:2:762
-592:2:766
-593:2:774
-594:2:775
-595:2:780
-596:2:787
-597:2:788
-598:2:795
-599:2:800
-600:0:1650
-601:2:811
-602:0:1650
-603:2:813
-604:0:1650
-605:2:814
-606:2:818
-607:2:819
-608:2:827
-609:2:828
-610:2:832
-611:2:833
-612:2:841
-613:2:846
-614:2:850
-615:2:851
-616:2:858
-617:2:859
-618:2:870
-619:2:871
-620:2:872
-621:2:883
-622:2:888
-623:2:889
-624:0:1650
-625:2:901
-626:0:1650
-627:2:903
-628:0:1650
-629:2:906
-630:2:907
-631:2:919
-632:2:920
-633:2:924
-634:2:925
-635:2:933
-636:2:938
-637:2:942
-638:2:943
-639:2:950
-640:2:951
-641:2:962
-642:2:963
-643:2:964
-644:2:975
-645:2:980
-646:2:981
-647:0:1650
-648:2:993
-649:0:1650
-650:2:995
-651:0:1650
-652:2:996
-653:0:1650
-654:2:997
-655:0:1650
-656:2:998
-657:0:1650
-658:2:999
-659:2:1003
-660:2:1004
-661:2:1012
-662:2:1013
-663:2:1017
-664:2:1018
-665:2:1026
-666:2:1031
-667:2:1035
-668:2:1036
-669:2:1043
-670:2:1044
-671:2:1055
-672:2:1056
-673:2:1057
-674:2:1068
-675:2:1073
-676:2:1074
-677:0:1650
-678:2:1086
-679:0:1650
-680:2:1283
-681:0:1650
-682:2:1381
-683:0:1650
-684:2:1382
-685:0:1650
-686:2:1386
-687:0:1650
-688:2:1395
-689:2:1396
-690:2:1400
-691:2:1404
-692:2:1405
-693:2:1409
-694:2:1417
-695:2:1418
-696:2:1423
-697:2:1430
-698:2:1431
-699:2:1438
-700:2:1443
-701:0:1650
-702:2:1454
-703:0:1650
-704:2:1458
-705:2:1459
-706:2:1463
-707:2:1467
-708:2:1468
-709:2:1472
-710:2:1480
-711:2:1481
-712:2:1486
-713:2:1493
-714:2:1494
-715:2:1501
-716:2:1506
-717:0:1650
-718:2:1517
-719:0:1650
-720:2:1525
-721:2:1526
-722:2:1530
-723:2:1534
-724:2:1535
-725:2:1539
-726:2:1547
-727:2:1548
-728:2:1553
-729:2:1560
-730:2:1561
-731:2:1568
-732:2:1573
-733:0:1650
-734:2:1584
-735:0:1650
-736:2:1586
-737:0:1650
-738:2:1587
-739:0:1650
-740:2:423
-741:0:1650
-742:2:424
-743:2:428
-744:2:429
-745:2:437
-746:2:438
-747:2:442
-748:2:443
-749:2:451
-750:2:456
-751:2:460
-752:2:461
-753:2:468
-754:2:469
-755:2:480
-756:2:481
-757:2:482
-758:2:493
-759:2:498
-760:2:499
-761:0:1650
-762:2:511
-763:0:1650
-764:2:513
-765:2:514
-766:0:1650
-767:2:518
-768:2:522
-769:2:523
-770:2:531
-771:2:532
-772:2:536
-773:2:537
-774:2:545
-775:2:550
-776:2:551
-777:2:562
-778:2:563
-779:2:574
-780:2:575
-781:2:576
-782:2:587
-783:2:592
-784:2:593
-785:0:1650
-786:2:605
-787:0:1650
-788:2:607
-789:0:1650
-790:2:608
-791:0:1650
-792:2:618
-793:0:1650
-794:2:622
-795:2:623
-796:2:627
-797:2:631
-798:2:632
-799:2:636
-800:2:644
-801:2:645
-802:2:650
-803:2:657
-804:2:658
-805:2:665
-806:2:670
-807:0:1650
-808:2:681
-809:0:1650
-810:2:685
-811:2:686
-812:2:690
-813:2:694
-814:2:695
-815:2:699
-816:2:707
-817:2:708
-818:2:713
-819:2:720
-820:2:721
-821:2:728
-822:2:733
-823:0:1650
-824:2:744
-825:0:1650
-826:2:752
-827:2:753
-828:2:757
-829:2:761
-830:2:762
-831:2:766
-832:2:774
-833:2:775
-834:2:780
-835:2:787
-836:2:788
-837:2:795
-838:2:800
-839:0:1650
-840:2:811
-841:0:1650
-842:2:813
-843:0:1650
-844:2:814
-845:2:818
-846:2:819
-847:2:827
-848:2:828
-849:2:832
-850:2:833
-851:2:841
-852:2:846
-853:2:850
-854:2:851
-855:2:858
-856:2:859
-857:2:870
-858:2:871
-859:2:872
-860:2:883
-861:2:888
-862:2:889
-863:0:1650
-864:2:901
-865:0:1650
-866:2:903
-867:0:1650
-868:2:906
-869:2:907
-870:2:919
-871:2:920
-872:2:924
-873:2:925
-874:2:933
-875:2:938
-876:2:942
-877:2:943
-878:2:950
-879:2:951
-880:2:962
-881:2:963
-882:2:964
-883:2:975
-884:2:980
-885:2:981
-886:0:1650
-887:2:993
-888:0:1650
-889:2:995
-890:0:1650
-891:2:996
-892:0:1650
-893:2:997
-894:0:1650
-895:2:998
-896:0:1650
-897:2:999
-898:2:1003
-899:2:1004
-900:2:1012
-901:2:1013
-902:2:1017
-903:2:1018
-904:2:1026
-905:2:1031
-906:2:1035
-907:2:1036
-908:2:1043
-909:2:1044
-910:2:1055
-911:2:1056
-912:2:1057
-913:2:1068
-914:2:1073
-915:2:1074
-916:0:1650
-917:2:1086
-918:0:1650
-919:2:1283
-920:0:1650
-921:2:1381
-922:0:1650
-923:2:1382
-924:0:1650
-925:2:1386
-926:0:1650
-927:2:1395
-928:2:1396
-929:2:1400
-930:2:1404
-931:2:1405
-932:2:1409
-933:2:1417
-934:2:1418
-935:2:1423
-936:2:1430
-937:2:1431
-938:2:1438
-939:2:1443
-940:0:1650
-941:2:1454
-942:0:1650
-943:1:2
-944:0:1650
-945:1:8
-946:0:1650
-947:1:9
-948:0:1650
-949:1:10
-950:0:1650
-951:1:11
-952:0:1650
-953:1:12
-954:1:16
-955:1:17
-956:1:25
-957:1:26
-958:1:30
-959:1:31
-960:1:39
-961:1:44
-962:1:48
-963:1:49
-964:1:63
-965:1:64
-966:1:68
-967:1:69
-968:1:70
-969:1:81
-970:1:86
-971:1:87
-972:0:1650
-973:1:99
-974:0:1650
-975:1:101
-976:0:1650
-977:1:102
-978:1:106
-979:1:107
-980:1:115
-981:1:116
-982:1:120
-983:1:121
-984:1:129
-985:1:134
-986:1:138
-987:1:139
-988:1:153
-989:1:154
-990:1:158
-991:1:159
-992:1:160
-993:1:171
-994:1:176
-995:1:177
-996:0:1650
-997:1:189
-998:0:1650
-999:1:191
-1000:0:1650
-1001:1:192
-1002:0:1650
-1003:2:1458
-1004:2:1459
-1005:2:1463
-1006:2:1467
-1007:2:1468
-1008:2:1472
-1009:2:1480
-1010:2:1481
-1011:2:1486
-1012:2:1493
-1013:2:1494
-1014:2:1501
-1015:2:1506
-1016:0:1650
-1017:2:1517
-1018:0:1650
-1019:2:1525
-1020:2:1526
-1021:2:1530
-1022:2:1534
-1023:2:1535
-1024:2:1539
-1025:2:1547
-1026:2:1548
-1027:2:1553
-1028:2:1560
-1029:2:1561
-1030:2:1568
-1031:2:1573
-1032:0:1650
-1033:2:1584
-1034:0:1650
-1035:2:1586
-1036:0:1650
-1037:2:1587
-1038:0:1650
-1039:2:423
-1040:0:1650
-1041:2:424
-1042:2:428
-1043:2:429
-1044:2:437
-1045:2:438
-1046:2:442
-1047:2:443
-1048:2:451
-1049:2:456
-1050:2:460
-1051:2:461
-1052:2:468
-1053:2:469
-1054:2:480
-1055:2:481
-1056:2:482
-1057:2:493
-1058:2:498
-1059:2:499
-1060:0:1650
-1061:2:511
-1062:0:1650
-1063:2:513
-1064:2:514
-1065:0:1650
-1066:2:518
-1067:2:522
-1068:2:523
-1069:2:531
-1070:2:532
-1071:2:536
-1072:2:537
-1073:2:545
-1074:2:550
-1075:2:551
-1076:2:562
-1077:2:563
-1078:2:574
-1079:2:575
-1080:2:576
-1081:2:587
-1082:2:592
-1083:2:593
-1084:0:1650
-1085:2:605
-1086:0:1650
-1087:2:607
-1088:0:1650
-1089:2:608
-1090:0:1650
-1091:2:618
-1092:0:1650
-1093:2:622
-1094:2:623
-1095:2:627
-1096:2:631
-1097:2:632
-1098:2:636
-1099:2:644
-1100:2:645
-1101:2:650
-1102:2:657
-1103:2:658
-1104:2:665
-1105:2:670
-1106:0:1650
-1107:2:681
-1108:0:1650
-1109:1:193
-1110:1:197
-1111:1:198
-1112:1:206
-1113:1:207
-1114:1:211
-1115:1:212
-1116:1:220
-1117:1:225
-1118:1:229
-1119:1:230
-1120:1:237
-1121:1:238
-1122:1:249
-1123:1:250
-1124:1:251
-1125:1:262
-1126:1:274
-1127:1:275
-1128:0:1650
-1129:1:280
-1130:0:1650
-1131:1:282
-1132:0:1650
-1133:1:291
-1134:0:1650
-1135:1:293
-1136:0:1650
-1137:1:11
-1138:0:1650
-1139:1:12
-1140:1:16
-1141:1:17
-1142:1:25
-1143:1:26
-1144:1:27
-1145:1:39
-1146:1:44
-1147:1:48
-1148:1:49
-1149:1:56
-1150:1:57
-1151:1:68
-1152:1:69
-1153:1:70
-1154:1:81
-1155:1:93
-1156:1:94
-1157:0:1650
-1158:1:99
-1159:0:1650
-1160:1:101
-1161:0:1650
-1162:1:102
-1163:1:106
-1164:1:107
-1165:1:115
-1166:1:116
-1167:1:120
-1168:1:121
-1169:1:129
-1170:1:134
-1171:1:138
-1172:1:139
-1173:1:146
-1174:1:147
-1175:1:158
-1176:1:159
-1177:1:160
-1178:1:171
-1179:1:183
-1180:1:184
-1181:0:1650
-1182:1:189
-1183:0:1650
-1184:1:285
-1185:0:1650
-1186:1:286
-1187:0:1650
-1188:1:291
-1189:0:1650
-1190:1:293
-1191:0:1650
-1192:1:296
-1193:0:1650
-1194:1:301
-1195:0:1650
-1196:2:685
-1197:2:686
-1198:2:690
-1199:2:691
-1200:2:699
-1201:2:707
-1202:2:708
-1203:2:713
-1204:2:720
-1205:2:721
-1206:2:728
-1207:2:733
-1208:0:1650
-1209:2:744
-1210:0:1650
-1211:2:752
-1212:2:753
-1213:2:757
-1214:2:761
-1215:2:762
-1216:2:766
-1217:2:774
-1218:2:775
-1219:2:780
-1220:2:787
-1221:2:788
-1222:2:795
-1223:2:800
-1224:0:1650
-1225:2:811
-1226:0:1650
-1227:2:813
-1228:0:1650
-1229:2:814
-1230:2:818
-1231:2:819
-1232:2:827
-1233:2:828
-1234:2:832
-1235:2:833
-1236:2:841
-1237:2:846
-1238:2:850
-1239:2:851
-1240:2:858
-1241:2:859
-1242:2:870
-1243:2:871
-1244:2:872
-1245:2:883
-1246:2:888
-1247:2:889
-1248:0:1650
-1249:2:901
-1250:0:1650
-1251:2:903
-1252:0:1650
-1253:2:906
-1254:2:907
-1255:2:919
-1256:2:920
-1257:2:924
-1258:2:925
-1259:2:933
-1260:2:938
-1261:2:942
-1262:2:943
-1263:2:950
-1264:2:951
-1265:2:962
-1266:2:963
-1267:2:964
-1268:2:975
-1269:2:980
-1270:2:981
-1271:0:1650
-1272:2:993
-1273:0:1650
-1274:2:995
-1275:0:1650
-1276:2:996
-1277:0:1650
-1278:2:997
-1279:0:1650
-1280:2:998
-1281:0:1650
-1282:2:999
-1283:2:1003
-1284:2:1004
-1285:2:1012
-1286:2:1013
-1287:2:1017
-1288:2:1018
-1289:2:1026
-1290:2:1031
-1291:2:1035
-1292:2:1036
-1293:2:1043
-1294:2:1044
-1295:2:1055
-1296:2:1056
-1297:2:1057
-1298:2:1068
-1299:2:1073
-1300:2:1074
-1301:0:1650
-1302:2:1086
-1303:0:1650
-1304:2:1283
-1305:0:1650
-1306:2:1381
-1307:0:1650
-1308:2:1382
-1309:0:1650
-1310:2:1386
-1311:0:1650
-1312:2:1395
-1313:2:1396
-1314:2:1400
-1315:2:1404
-1316:2:1405
-1317:2:1409
-1318:2:1417
-1319:2:1418
-1320:2:1423
-1321:2:1430
-1322:2:1431
-1323:2:1438
-1324:2:1443
-1325:0:1650
-1326:2:1454
-1327:0:1650
-1328:2:1458
-1329:2:1459
-1330:2:1463
-1331:2:1467
-1332:2:1468
-1333:2:1472
-1334:2:1480
-1335:2:1481
-1336:2:1486
-1337:2:1493
-1338:2:1494
-1339:2:1501
-1340:2:1506
-1341:0:1650
-1342:2:1517
-1343:0:1650
-1344:2:1525
-1345:2:1526
-1346:2:1530
-1347:2:1534
-1348:2:1535
-1349:2:1539
-1350:2:1547
-1351:2:1548
-1352:2:1553
-1353:2:1560
-1354:2:1561
-1355:2:1568
-1356:2:1573
-1357:0:1650
-1358:2:1584
-1359:0:1650
-1360:2:1586
-1361:0:1650
-1362:2:1587
-1363:0:1650
-1364:2:1590
-1365:0:1650
-1366:2:1595
-1367:0:1650
-1368:1:302
-1369:0:1648
-1370:2:1596
-1371:0:1654
-1372:0:1650
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress.ltl b/formal-model/urcu/result-standard-execution-nest/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.define b/formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.log b/formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.log
deleted file mode 100644 (file)
index 9e98b9f..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 1767: Claim reached state 9 (line 748)
-Depth=    3880 States=    1e+06 Transitions= 1.71e+07 Memory=   499.651        t=   14.5 R=   7e+04
-Depth=    3880 States=    2e+06 Transitions= 3.79e+07 Memory=   532.365        t=   32.3 R=   6e+04
-Depth=    3880 States=    3e+06 Transitions= 5.83e+07 Memory=   564.983        t=   50.2 R=   6e+04
-pan: resizing hashtable to -w22..  done
-Depth=    3880 States=    4e+06 Transitions= 7.76e+07 Memory=   629.307        t=     67 R=   6e+04
-Depth=    3880 States=    5e+06 Transitions= 9.78e+07 Memory=   662.315        t=   84.2 R=   6e+04
-Depth=    3880 States=    6e+06 Transitions= 1.19e+08 Memory=   694.736        t=    102 R=   6e+04
-Depth=    3880 States=    7e+06 Transitions= 1.38e+08 Memory=   727.842        t=    119 R=   6e+04
-Depth=    3880 States=    8e+06 Transitions= 1.59e+08 Memory=   760.752        t=    137 R=   6e+04
-Depth=    3880 States=    9e+06 Transitions= 1.79e+08 Memory=   793.174        t=    155 R=   6e+04
-pan: resizing hashtable to -w24..  done
-Depth=    3880 States=    1e+07 Transitions= 1.98e+08 Memory=   950.568        t=    172 R=   6e+04
-Depth=    3880 States=  1.1e+07 Transitions= 2.19e+08 Memory=   983.479        t=    189 R=   6e+04
-Depth=    3880 States=  1.2e+07 Transitions=  2.4e+08 Memory=  1015.901        t=    207 R=   6e+04
-Depth=    3880 States=  1.3e+07 Transitions= 2.58e+08 Memory=  1049.397        t=    223 R=   6e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3880, errors: 0
-  7197860 states, stored (1.33457e+07 visited)
-2.5266654e+08 states, matched
-2.6601223e+08 transitions (= visited+matched)
-9.9067284e+08 atomic steps
-hash conflicts:  87783920 (resolved)
-
-Stats on memory usage (in Megabytes):
-  576.611      equivalent memory usage for states (stored*(State-vector + overhead))
-  474.839      actual memory usage for states (compression: 82.35%)
-               state-vector as stored = 41 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1060.529      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 230 seconds
-pan: rate  58151.15 states/second
-pan: avg transition delay 8.6274e-07 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.spin.input b/formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 4b3d02e..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define READER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index 7c42af1..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4401
-2:4:4353
-3:4:4356
-4:4:4356
-5:4:4359
-6:4:4367
-7:4:4367
-8:4:4370
-9:4:4376
-10:4:4380
-11:4:4380
-12:4:4383
-13:4:4391
-14:4:4395
-15:4:4396
-16:0:4401
-17:4:4398
-18:0:4401
-19:3:2479
-20:0:4401
-21:3:2485
-22:0:4401
-23:3:2486
-24:0:4401
-25:3:2487
-26:3:2491
-27:3:2492
-28:3:2500
-29:3:2501
-30:3:2505
-31:3:2506
-32:3:2514
-33:3:2519
-34:3:2523
-35:3:2524
-36:3:2531
-37:3:2532
-38:3:2543
-39:3:2544
-40:3:2545
-41:3:2556
-42:3:2561
-43:3:2562
-44:0:4401
-45:3:2574
-46:0:4401
-47:3:2576
-48:3:2577
-49:0:4401
-50:3:2581
-51:3:2585
-52:3:2586
-53:3:2594
-54:3:2595
-55:3:2599
-56:3:2600
-57:3:2608
-58:3:2613
-59:3:2614
-60:3:2625
-61:3:2626
-62:3:2637
-63:3:2638
-64:3:2639
-65:3:2650
-66:3:2655
-67:3:2656
-68:0:4401
-69:3:2668
-70:0:4401
-71:3:2670
-72:0:4401
-73:3:2671
-74:0:4401
-75:3:2681
-76:0:4401
-77:3:2682
-78:0:4401
-79:3:2686
-80:3:2687
-81:3:2691
-82:3:2695
-83:3:2696
-84:3:2700
-85:3:2708
-86:3:2709
-87:3:2714
-88:3:2721
-89:3:2722
-90:3:2729
-91:3:2734
-92:0:4401
-93:3:2745
-94:0:4401
-95:3:2749
-96:3:2750
-97:3:2754
-98:3:2758
-99:3:2759
-100:3:2763
-101:3:2771
-102:3:2772
-103:3:2777
-104:3:2784
-105:3:2785
-106:3:2792
-107:3:2797
-108:0:4401
-109:3:2808
-110:0:4401
-111:3:2816
-112:3:2817
-113:3:2821
-114:3:2825
-115:3:2826
-116:3:2830
-117:3:2838
-118:3:2839
-119:3:2844
-120:3:2851
-121:3:2852
-122:3:2859
-123:3:2864
-124:0:4401
-125:3:2879
-126:0:4401
-127:3:2881
-128:0:4401
-129:3:2882
-130:3:2886
-131:3:2887
-132:3:2895
-133:3:2896
-134:3:2900
-135:3:2901
-136:3:2909
-137:3:2914
-138:3:2918
-139:3:2919
-140:3:2926
-141:3:2927
-142:3:2938
-143:3:2939
-144:3:2940
-145:3:2951
-146:3:2956
-147:3:2957
-148:0:4401
-149:3:2969
-150:0:4401
-151:3:2971
-152:0:4401
-153:3:2974
-154:3:2975
-155:3:2987
-156:3:2988
-157:3:2992
-158:3:2993
-159:3:3001
-160:3:3006
-161:3:3010
-162:3:3011
-163:3:3018
-164:3:3019
-165:3:3030
-166:3:3031
-167:3:3032
-168:3:3043
-169:3:3048
-170:3:3049
-171:0:4401
-172:3:3061
-173:0:4401
-174:3:3063
-175:0:4401
-176:3:3064
-177:0:4401
-178:3:3065
-179:0:4401
-180:3:3066
-181:0:4401
-182:3:3067
-183:3:3071
-184:3:3072
-185:3:3080
-186:3:3081
-187:3:3085
-188:3:3086
-189:3:3094
-190:3:3099
-191:3:3103
-192:3:3104
-193:3:3111
-194:3:3112
-195:3:3123
-196:3:3124
-197:3:3125
-198:3:3136
-199:3:3141
-200:3:3142
-201:0:4401
-202:3:3154
-203:0:4401
-204:3:3356
-205:0:4401
-206:3:3454
-207:0:4401
-208:3:3455
-209:0:4401
-210:3:3459
-211:0:4401
-212:3:3465
-213:3:3469
-214:3:3470
-215:3:3478
-216:3:3479
-217:3:3483
-218:3:3484
-219:3:3492
-220:3:3497
-221:3:3501
-222:3:3502
-223:3:3509
-224:3:3510
-225:3:3521
-226:3:3522
-227:3:3523
-228:3:3534
-229:3:3539
-230:3:3540
-231:0:4401
-232:3:3552
-233:0:4401
-234:3:3554
-235:0:4401
-236:3:3555
-237:3:3559
-238:3:3560
-239:3:3568
-240:3:3569
-241:3:3573
-242:3:3574
-243:3:3582
-244:3:3587
-245:3:3591
-246:3:3592
-247:3:3599
-248:3:3600
-249:3:3611
-250:3:3612
-251:3:3613
-252:3:3624
-253:3:3629
-254:3:3630
-255:0:4401
-256:3:3642
-257:0:4401
-258:3:3644
-259:0:4401
-260:3:3647
-261:3:3648
-262:3:3660
-263:3:3661
-264:3:3665
-265:3:3666
-266:3:3674
-267:3:3679
-268:3:3683
-269:3:3684
-270:3:3691
-271:3:3692
-272:3:3703
-273:3:3704
-274:3:3705
-275:3:3716
-276:3:3721
-277:3:3722
-278:0:4401
-279:3:3734
-280:0:4401
-281:3:3736
-282:0:4401
-283:3:3737
-284:0:4401
-285:3:3738
-286:0:4401
-287:3:3739
-288:0:4401
-289:3:3740
-290:3:3744
-291:3:3745
-292:3:3753
-293:3:3754
-294:3:3758
-295:3:3759
-296:3:3767
-297:3:3772
-298:3:3776
-299:3:3777
-300:3:3784
-301:3:3785
-302:3:3796
-303:3:3797
-304:3:3798
-305:3:3809
-306:3:3814
-307:3:3815
-308:0:4401
-309:3:3827
-310:0:4401
-311:3:4029
-312:0:4401
-313:3:4127
-314:0:4401
-315:3:4128
-316:0:4401
-317:3:4132
-318:0:4401
-319:3:4138
-320:0:4401
-321:3:4142
-322:3:4143
-323:3:4147
-324:3:4151
-325:3:4152
-326:3:4156
-327:3:4164
-328:3:4165
-329:3:4170
-330:3:4177
-331:3:4178
-332:3:4185
-333:3:4190
-334:0:4401
-335:3:4201
-336:0:4401
-337:3:4205
-338:3:4206
-339:3:4210
-340:3:4214
-341:3:4215
-342:3:4219
-343:3:4227
-344:3:4228
-345:3:4233
-346:3:4240
-347:3:4241
-348:3:4248
-349:3:4253
-350:0:4401
-351:3:4264
-352:0:4401
-353:3:4272
-354:3:4273
-355:3:4277
-356:3:4281
-357:3:4282
-358:3:4286
-359:3:4294
-360:3:4295
-361:3:4300
-362:3:4307
-363:3:4308
-364:3:4315
-365:3:4320
-366:0:4401
-367:3:4335
-368:0:4401
-369:3:4337
-370:0:4401
-371:3:4338
-372:0:4401
-373:3:2486
-374:0:4401
-375:3:2487
-376:3:2491
-377:3:2492
-378:3:2500
-379:3:2501
-380:3:2505
-381:3:2506
-382:3:2514
-383:3:2519
-384:3:2523
-385:3:2524
-386:3:2531
-387:3:2532
-388:3:2543
-389:3:2544
-390:3:2545
-391:3:2556
-392:3:2561
-393:3:2562
-394:0:4401
-395:3:2574
-396:0:4401
-397:3:2576
-398:3:2577
-399:0:4401
-400:3:2581
-401:3:2585
-402:3:2586
-403:3:2594
-404:3:2595
-405:3:2599
-406:3:2600
-407:3:2608
-408:3:2613
-409:3:2614
-410:3:2625
-411:3:2626
-412:3:2637
-413:3:2638
-414:3:2639
-415:3:2650
-416:3:2655
-417:3:2656
-418:0:4401
-419:3:2668
-420:0:4401
-421:3:2670
-422:0:4401
-423:3:2671
-424:0:4401
-425:3:2681
-426:0:4401
-427:3:2682
-428:0:4401
-429:3:2686
-430:3:2687
-431:3:2691
-432:3:2695
-433:3:2696
-434:3:2700
-435:3:2708
-436:3:2709
-437:3:2714
-438:3:2721
-439:3:2722
-440:3:2729
-441:3:2734
-442:0:4401
-443:3:2745
-444:0:4401
-445:3:2749
-446:3:2750
-447:3:2754
-448:3:2758
-449:3:2759
-450:3:2763
-451:3:2771
-452:3:2772
-453:3:2777
-454:3:2784
-455:3:2785
-456:3:2792
-457:3:2797
-458:0:4401
-459:3:2808
-460:0:4401
-461:3:2816
-462:3:2817
-463:3:2821
-464:3:2825
-465:3:2826
-466:3:2830
-467:3:2838
-468:3:2839
-469:3:2844
-470:3:2851
-471:3:2852
-472:3:2859
-473:3:2864
-474:0:4401
-475:3:2879
-476:0:4401
-477:3:2881
-478:0:4401
-479:3:2882
-480:3:2886
-481:3:2887
-482:3:2895
-483:3:2896
-484:3:2900
-485:3:2901
-486:3:2909
-487:3:2914
-488:3:2918
-489:3:2919
-490:3:2926
-491:3:2927
-492:3:2938
-493:3:2939
-494:3:2940
-495:3:2951
-496:3:2956
-497:3:2957
-498:0:4401
-499:3:2969
-500:0:4401
-501:3:2971
-502:0:4401
-503:3:2974
-504:3:2975
-505:3:2987
-506:3:2988
-507:3:2992
-508:3:2993
-509:3:3001
-510:3:3006
-511:3:3010
-512:3:3011
-513:3:3018
-514:3:3019
-515:3:3030
-516:3:3031
-517:3:3032
-518:3:3043
-519:3:3048
-520:3:3049
-521:0:4401
-522:3:3061
-523:0:4401
-524:3:3063
-525:0:4401
-526:3:3064
-527:0:4401
-528:3:3065
-529:0:4401
-530:3:3066
-531:0:4401
-532:3:3067
-533:3:3071
-534:3:3072
-535:3:3080
-536:3:3081
-537:3:3085
-538:3:3086
-539:3:3094
-540:3:3099
-541:3:3103
-542:3:3104
-543:3:3111
-544:3:3112
-545:3:3123
-546:3:3124
-547:3:3125
-548:3:3136
-549:3:3141
-550:3:3142
-551:0:4401
-552:3:3154
-553:0:4401
-554:3:3356
-555:0:4401
-556:3:3454
-557:0:4401
-558:3:3455
-559:0:4401
-560:3:3459
-561:0:4401
-562:3:3465
-563:3:3469
-564:3:3470
-565:3:3478
-566:3:3479
-567:3:3483
-568:3:3484
-569:3:3492
-570:3:3497
-571:3:3501
-572:3:3502
-573:3:3509
-574:3:3510
-575:3:3521
-576:3:3522
-577:3:3523
-578:3:3534
-579:3:3539
-580:3:3540
-581:0:4401
-582:3:3552
-583:0:4401
-584:3:3554
-585:0:4401
-586:3:3555
-587:3:3559
-588:3:3560
-589:3:3568
-590:3:3569
-591:3:3573
-592:3:3574
-593:3:3582
-594:3:3587
-595:3:3591
-596:3:3592
-597:3:3599
-598:3:3600
-599:3:3611
-600:3:3612
-601:3:3613
-602:3:3624
-603:3:3629
-604:3:3630
-605:0:4401
-606:3:3642
-607:0:4401
-608:3:3644
-609:0:4401
-610:3:3647
-611:3:3648
-612:3:3660
-613:3:3661
-614:3:3665
-615:3:3666
-616:3:3674
-617:3:3679
-618:3:3683
-619:3:3684
-620:3:3691
-621:3:3692
-622:3:3703
-623:3:3704
-624:3:3705
-625:3:3716
-626:3:3721
-627:3:3722
-628:0:4401
-629:3:3734
-630:0:4401
-631:3:3736
-632:0:4401
-633:3:3737
-634:0:4401
-635:3:3738
-636:0:4401
-637:3:3739
-638:0:4401
-639:3:3740
-640:3:3744
-641:3:3745
-642:3:3753
-643:3:3754
-644:3:3758
-645:3:3759
-646:3:3767
-647:3:3772
-648:3:3776
-649:3:3777
-650:3:3784
-651:3:3785
-652:3:3796
-653:3:3797
-654:3:3798
-655:3:3809
-656:3:3814
-657:3:3815
-658:0:4401
-659:3:3827
-660:0:4401
-661:3:4029
-662:0:4401
-663:3:4127
-664:0:4401
-665:3:4128
-666:0:4401
-667:3:4132
-668:0:4401
-669:3:4138
-670:0:4401
-671:3:4142
-672:3:4143
-673:3:4147
-674:3:4151
-675:3:4152
-676:3:4156
-677:3:4164
-678:3:4165
-679:3:4170
-680:3:4177
-681:3:4178
-682:3:4185
-683:3:4190
-684:0:4401
-685:3:4201
-686:0:4401
-687:3:4205
-688:3:4206
-689:3:4210
-690:3:4214
-691:3:4215
-692:3:4219
-693:3:4227
-694:3:4228
-695:3:4233
-696:3:4240
-697:3:4241
-698:3:4248
-699:3:4253
-700:0:4401
-701:3:4264
-702:0:4401
-703:3:4272
-704:3:4273
-705:3:4277
-706:3:4281
-707:3:4282
-708:3:4286
-709:3:4294
-710:3:4295
-711:3:4300
-712:3:4307
-713:3:4308
-714:3:4315
-715:3:4320
-716:0:4401
-717:3:4335
-718:0:4401
-719:3:4337
-720:0:4401
-721:3:4338
-722:0:4401
-723:3:2486
-724:0:4401
-725:3:2487
-726:3:2491
-727:3:2492
-728:3:2500
-729:3:2501
-730:3:2505
-731:3:2506
-732:3:2514
-733:3:2519
-734:3:2523
-735:3:2524
-736:3:2531
-737:3:2532
-738:3:2543
-739:3:2544
-740:3:2545
-741:3:2556
-742:3:2561
-743:3:2562
-744:0:4401
-745:3:2574
-746:0:4401
-747:3:2576
-748:3:2577
-749:0:4401
-750:3:2581
-751:3:2585
-752:3:2586
-753:3:2594
-754:3:2595
-755:3:2599
-756:3:2600
-757:3:2608
-758:3:2613
-759:3:2614
-760:3:2625
-761:3:2626
-762:3:2637
-763:3:2638
-764:3:2639
-765:3:2650
-766:3:2655
-767:3:2656
-768:0:4401
-769:3:2668
-770:0:4401
-771:3:2670
-772:0:4401
-773:3:2671
-774:0:4401
-775:3:2681
-776:0:4401
-777:3:2682
-778:0:4401
-779:3:2686
-780:3:2687
-781:3:2691
-782:3:2695
-783:3:2696
-784:3:2700
-785:3:2708
-786:3:2709
-787:3:2714
-788:3:2721
-789:3:2722
-790:3:2729
-791:3:2734
-792:0:4401
-793:3:2745
-794:0:4401
-795:3:2749
-796:3:2750
-797:3:2754
-798:3:2758
-799:3:2759
-800:3:2763
-801:3:2771
-802:3:2772
-803:3:2777
-804:3:2784
-805:3:2785
-806:3:2792
-807:3:2797
-808:0:4401
-809:3:2808
-810:0:4401
-811:3:2816
-812:3:2817
-813:3:2821
-814:3:2825
-815:3:2826
-816:3:2830
-817:3:2838
-818:3:2839
-819:3:2844
-820:3:2851
-821:3:2852
-822:3:2859
-823:3:2864
-824:0:4401
-825:3:2879
-826:0:4401
-827:3:2881
-828:0:4401
-829:3:2882
-830:3:2886
-831:3:2887
-832:3:2895
-833:3:2896
-834:3:2900
-835:3:2901
-836:3:2909
-837:3:2914
-838:3:2918
-839:3:2919
-840:3:2926
-841:3:2927
-842:3:2938
-843:3:2939
-844:3:2940
-845:3:2951
-846:3:2956
-847:3:2957
-848:0:4401
-849:3:2969
-850:0:4401
-851:3:2971
-852:0:4401
-853:3:2974
-854:3:2975
-855:3:2987
-856:3:2988
-857:3:2992
-858:3:2993
-859:3:3001
-860:3:3006
-861:3:3010
-862:3:3011
-863:3:3018
-864:3:3019
-865:3:3030
-866:3:3031
-867:3:3032
-868:3:3043
-869:3:3048
-870:3:3049
-871:0:4401
-872:3:3061
-873:0:4401
-874:3:3063
-875:0:4401
-876:3:3064
-877:0:4401
-878:3:3065
-879:0:4401
-880:3:3066
-881:0:4401
-882:3:3067
-883:3:3071
-884:3:3072
-885:3:3080
-886:3:3081
-887:3:3085
-888:3:3086
-889:3:3094
-890:3:3099
-891:3:3103
-892:3:3104
-893:3:3111
-894:3:3112
-895:3:3123
-896:3:3124
-897:3:3125
-898:3:3136
-899:3:3141
-900:3:3142
-901:0:4401
-902:3:3154
-903:0:4401
-904:3:3356
-905:0:4401
-906:3:3454
-907:0:4401
-908:3:3455
-909:0:4401
-910:3:3459
-911:0:4401
-912:3:3465
-913:3:3469
-914:3:3470
-915:3:3478
-916:3:3479
-917:3:3483
-918:3:3484
-919:3:3492
-920:3:3497
-921:3:3501
-922:3:3502
-923:3:3509
-924:3:3510
-925:3:3521
-926:3:3522
-927:3:3523
-928:3:3534
-929:3:3539
-930:3:3540
-931:0:4401
-932:3:3552
-933:0:4401
-934:3:3554
-935:0:4401
-936:3:3555
-937:3:3559
-938:3:3560
-939:3:3568
-940:3:3569
-941:3:3573
-942:3:3574
-943:3:3582
-944:3:3587
-945:3:3591
-946:3:3592
-947:3:3599
-948:3:3600
-949:3:3611
-950:3:3612
-951:3:3613
-952:3:3624
-953:3:3629
-954:3:3630
-955:0:4401
-956:3:3642
-957:0:4401
-958:3:3644
-959:0:4401
-960:3:3647
-961:3:3648
-962:3:3660
-963:3:3661
-964:3:3665
-965:3:3666
-966:3:3674
-967:3:3679
-968:3:3683
-969:3:3684
-970:3:3691
-971:3:3692
-972:3:3703
-973:3:3704
-974:3:3705
-975:3:3716
-976:3:3721
-977:3:3722
-978:0:4401
-979:3:3734
-980:0:4401
-981:3:3736
-982:0:4401
-983:3:3737
-984:0:4401
-985:3:3738
-986:0:4401
-987:3:3739
-988:0:4401
-989:3:3740
-990:3:3744
-991:3:3745
-992:3:3753
-993:3:3754
-994:3:3758
-995:3:3759
-996:3:3767
-997:3:3772
-998:3:3776
-999:3:3777
-1000:3:3784
-1001:3:3785
-1002:3:3796
-1003:3:3797
-1004:3:3798
-1005:3:3809
-1006:3:3814
-1007:3:3815
-1008:0:4401
-1009:3:3827
-1010:0:4401
-1011:3:4029
-1012:0:4401
-1013:3:4127
-1014:0:4401
-1015:3:4128
-1016:0:4401
-1017:3:4132
-1018:0:4401
-1019:3:4138
-1020:0:4401
-1021:3:4142
-1022:3:4143
-1023:3:4147
-1024:3:4151
-1025:3:4152
-1026:3:4156
-1027:3:4164
-1028:3:4165
-1029:3:4170
-1030:3:4177
-1031:3:4178
-1032:3:4185
-1033:3:4190
-1034:0:4401
-1035:3:4201
-1036:0:4401
-1037:3:4205
-1038:3:4206
-1039:3:4210
-1040:3:4214
-1041:3:4215
-1042:3:4219
-1043:3:4227
-1044:3:4228
-1045:3:4233
-1046:3:4240
-1047:3:4241
-1048:3:4248
-1049:3:4253
-1050:0:4401
-1051:3:4264
-1052:0:4401
-1053:3:4272
-1054:3:4273
-1055:3:4277
-1056:3:4281
-1057:3:4282
-1058:3:4286
-1059:3:4294
-1060:3:4295
-1061:3:4300
-1062:3:4307
-1063:3:4308
-1064:3:4315
-1065:3:4320
-1066:0:4401
-1067:3:4335
-1068:0:4401
-1069:3:4337
-1070:0:4401
-1071:3:4338
-1072:0:4401
-1073:3:4341
-1074:0:4401
-1075:3:4346
-1076:0:4401
-1077:2:1236
-1078:0:4401
-1079:3:4347
-1080:0:4401
-1081:2:1242
-1082:0:4401
-1083:3:4346
-1084:0:4401
-1085:2:1243
-1086:0:4401
-1087:3:4347
-1088:0:4401
-1089:2:1244
-1090:0:4401
-1091:3:4346
-1092:0:4401
-1093:2:1245
-1094:0:4401
-1095:3:4347
-1096:0:4401
-1097:1:2
-1098:0:4401
-1099:3:4346
-1100:0:4401
-1101:2:1246
-1102:0:4401
-1103:3:4347
-1104:0:4401
-1105:1:8
-1106:0:4401
-1107:3:4346
-1108:0:4401
-1109:2:1245
-1110:0:4401
-1111:3:4347
-1112:0:4401
-1113:1:9
-1114:0:4401
-1115:3:4346
-1116:0:4401
-1117:2:1246
-1118:0:4401
-1119:3:4347
-1120:0:4401
-1121:1:10
-1122:0:4401
-1123:3:4346
-1124:0:4401
-1125:2:1245
-1126:0:4401
-1127:3:4347
-1128:0:4401
-1129:1:11
-1130:0:4401
-1131:3:4346
-1132:0:4401
-1133:2:1246
-1134:0:4401
-1135:3:4347
-1136:0:4401
-1137:1:14
-1138:0:4401
-1139:3:4346
-1140:0:4401
-1141:2:1245
-1142:0:4401
-1143:3:4347
-1144:0:4401
-1145:1:15
-1146:0:4401
-1147:3:4346
-1148:0:4401
-1149:2:1246
-1150:0:4401
-1151:3:4347
-1152:0:4401
-1153:1:16
-1154:1:20
-1155:1:21
-1156:1:29
-1157:1:30
-1158:1:34
-1159:1:35
-1160:1:43
-1161:1:48
-1162:1:52
-1163:1:53
-1164:1:60
-1165:1:61
-1166:1:72
-1167:1:73
-1168:1:74
-1169:1:85
-1170:1:90
-1171:1:91
-1172:0:4401
-1173:3:4346
-1174:0:4401
-1175:2:1245
-1176:0:4401
-1177:3:4347
-1178:0:4401
-1179:1:103
-1180:0:4401
-1181:3:4346
-1182:0:4401
-1183:2:1246
-1184:0:4401
-1185:3:4347
-1186:0:4401
-1187:2:1247
-1188:0:4401
-1189:3:4346
-1190:0:4401
-1191:2:1253
-1192:0:4401
-1193:3:4347
-1194:0:4401
-1195:2:1254
-1196:0:4399
-1197:3:4346
-1198:0:4405
-1199:3:4347
-1200:0:4405
-1201:2:1257
-1202:0:4405
-1203:3:4346
-1204:0:4405
-1205:2:1258
-1206:0:4405
-1207:3:4347
-1208:0:4405
-1209:2:1259
-1210:2:1263
-1211:2:1264
-1212:2:1272
-1213:2:1273
-1214:2:1277
-1215:2:1278
-1216:2:1286
-1217:2:1291
-1218:2:1295
-1219:2:1296
-1220:2:1303
-1221:2:1304
-1222:2:1315
-1223:2:1316
-1224:2:1317
-1225:2:1328
-1226:2:1333
-1227:2:1334
-1228:0:4405
-1229:3:4346
-1230:0:4405
-1231:2:1346
-1232:0:4405
-1233:3:4347
-1234:0:4405
-1235:2:1347
-1236:0:4405
-1237:3:4346
-1238:0:4405
-1239:1:104
--1:-1:-1
-1240:0:4405
-1241:3:4347
-1242:0:4405
-1243:3:4346
-1244:0:4405
-1245:2:1348
-1246:0:4405
-1247:3:4347
-1248:0:4405
-1249:2:1347
-1250:0:4405
-1251:3:4346
-1252:0:4405
-1253:1:105
-1254:0:4405
-1255:3:4347
-1256:0:4405
-1257:3:4346
-1258:0:4405
-1259:2:1348
-1260:0:4405
-1261:3:4347
-1262:0:4405
-1263:2:1347
-1264:0:4405
-1265:3:4346
-1266:0:4405
-1267:1:104
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.define b/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.log b/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.log
deleted file mode 100644 (file)
index 434151a..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 291: Claim reached state 9 (line 748)
-Depth=    2677 States=    1e+06 Transitions= 1.57e+07 Memory=   487.932        t=   13.4 R=   7e+04
-Depth=    3023 States=    2e+06 Transitions= 3.19e+07 Memory=   509.709        t=   27.3 R=   7e+04
-Depth=    3610 States=    3e+06 Transitions= 4.84e+07 Memory=   531.486        t=   41.6 R=   7e+04
-pan: resizing hashtable to -w22..  done
-Depth=    3956 States=    4e+06 Transitions= 6.63e+07 Memory=   595.029        t=     57 R=   7e+04
-Depth=    3956 States=    5e+06 Transitions= 8.67e+07 Memory=   617.783        t=   74.5 R=   7e+04
-Depth=    3956 States=    6e+06 Transitions= 1.08e+08 Memory=   660.850        t=     93 R=   6e+04
-Depth=    3956 States=    7e+06 Transitions= 1.28e+08 Memory=   690.928        t=    110 R=   6e+04
-Depth=    3956 States=    8e+06 Transitions= 1.51e+08 Memory=   729.600        t=    129 R=   6e+04
-Depth=    3956 States=    9e+06 Transitions=  1.7e+08 Memory=   765.830        t=    146 R=   6e+04
-pan: resizing hashtable to -w24..  done
-Depth=    3956 States=    1e+07 Transitions= 1.92e+08 Memory=   919.611        t=    166 R=   6e+04
-Depth=    3956 States=  1.1e+07 Transitions= 2.13e+08 Memory=   958.576        t=    183 R=   6e+04
-Depth=    3956 States=  1.2e+07 Transitions= 2.33e+08 Memory=   985.627        t=    201 R=   6e+04
-Depth=    3956 States=  1.3e+07 Transitions= 2.55e+08 Memory=  1027.033        t=    220 R=   6e+04
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3956, errors: 0
-  7045896 states, stored (1.35792e+07 visited)
-2.5326206e+08 states, matched
-2.668413e+08 transitions (= visited+matched)
-9.9425626e+08 atomic steps
-hash conflicts:  65494104 (resolved)
-
-Stats on memory usage (in Megabytes):
-  564.437      equivalent memory usage for states (stored*(State-vector + overhead))
-  465.758      actual memory usage for states (compression: 82.52%)
-               state-vector as stored = 41 byte + 28 byte overhead
-  128.000      memory used for hash table (-w24)
-  457.764      memory used for DFS stack (-m10000000)
- 1051.350      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 230 seconds
-pan: rate 59137.889 states/second
-pan: avg transition delay 8.6051e-07 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.spin.input b/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 575305f..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.define b/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.log b/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index 7fafb9e..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-depth 15: Claim reached state 9 (line 750)
-depth 291: Claim reached state 9 (line 749)
-pan: acceptance cycle (at depth 4308)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 4820, errors: 1
-    62091 states, stored (169917 visited)
-  2179326 states, matched
-  2349243 transitions (= visited+matched)
-  8805349 atomic steps
-hash conflicts:     50953 (resolved)
-
-Stats on memory usage (in Megabytes):
-    4.974      equivalent memory usage for states (stored*(State-vector + overhead))
-    4.145      actual memory usage for states (compression: 83.33%)
-               state-vector as stored = 42 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  469.865      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 151, "(1)"
-       line 419, "pan.___", state 181, "(1)"
-       line 400, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 242, "(1)"
-       line 419, "pan.___", state 272, "(1)"
-       line 400, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 360, "(1)"
-       line 419, "pan.___", state 390, "(1)"
-       line 541, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 402, "pan.___", state 134, "((i<1))"
-       line 402, "pan.___", state 134, "((i>=1))"
-       line 410, "pan.___", state 153, "(1)"
-       line 410, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 154, "else"
-       line 410, "pan.___", state 157, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 414, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 167, "else"
-       line 414, "pan.___", state 170, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 412, "pan.___", state 176, "((i<1))"
-       line 412, "pan.___", state 176, "((i>=1))"
-       line 419, "pan.___", state 183, "(1)"
-       line 419, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 184, "else"
-       line 419, "pan.___", state 187, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 370, "pan.___", state 193, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 647, "pan.___", state 202, "((write_lock==0))"
-       line 647, "pan.___", state 202, "else"
-       line 645, "pan.___", state 203, "(1)"
-       line 176, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 225, "((j<1))"
-       line 178, "pan.___", state 225, "((j>=1))"
-       line 184, "pan.___", state 230, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 240, "(1)"
-       line 165, "pan.___", state 248, "(1)"
-       line 165, "pan.___", state 249, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 165, "pan.___", state 249, "else"
-       line 163, "pan.___", state 254, "((j<1))"
-       line 163, "pan.___", state 254, "((j>=1))"
-       line 169, "pan.___", state 260, "(1)"
-       line 169, "pan.___", state 261, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 169, "pan.___", state 261, "else"
-       line 171, "pan.___", state 264, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 171, "pan.___", state 264, "else"
-       line 176, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 180, "pan.___", state 280, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 288, "((j<1))"
-       line 178, "pan.___", state 288, "((j>=1))"
-       line 184, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 303, "(1)"
-       line 165, "pan.___", state 311, "(1)"
-       line 165, "pan.___", state 312, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 165, "pan.___", state 312, "else"
-       line 163, "pan.___", state 317, "((j<1))"
-       line 163, "pan.___", state 317, "((j>=1))"
-       line 169, "pan.___", state 323, "(1)"
-       line 169, "pan.___", state 324, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 324, "else"
-       line 171, "pan.___", state 327, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 171, "pan.___", state 327, "else"
-       line 215, "pan.___", state 333, "((i<1))"
-       line 215, "pan.___", state 333, "((i>=1))"
-       line 176, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 355, "((j<1))"
-       line 178, "pan.___", state 355, "((j>=1))"
-       line 184, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 370, "(1)"
-       line 165, "pan.___", state 378, "(1)"
-       line 165, "pan.___", state 379, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 165, "pan.___", state 379, "else"
-       line 163, "pan.___", state 384, "((j<1))"
-       line 163, "pan.___", state 384, "((j>=1))"
-       line 169, "pan.___", state 390, "(1)"
-       line 169, "pan.___", state 391, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 169, "pan.___", state 391, "else"
-       line 171, "pan.___", state 394, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 171, "pan.___", state 394, "else"
-       line 400, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 410, "(1)"
-       line 404, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 424, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 402, "pan.___", state 430, "((i<1))"
-       line 402, "pan.___", state 430, "((i>=1))"
-       line 409, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 449, "(1)"
-       line 410, "pan.___", state 450, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 450, "else"
-       line 410, "pan.___", state 453, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 414, "pan.___", state 462, "(1)"
-       line 414, "pan.___", state 463, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 463, "else"
-       line 414, "pan.___", state 466, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 412, "pan.___", state 472, "((i<1))"
-       line 412, "pan.___", state 472, "((i>=1))"
-       line 419, "pan.___", state 479, "(1)"
-       line 419, "pan.___", state 480, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 480, "else"
-       line 419, "pan.___", state 483, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 370, "pan.___", state 489, "(1)"
-       line 662, "pan.___", state 492, "cached_urcu_gp_ctr.val[_pid] = (tmp^(1<<7))"
-       line 400, "pan.___", state 498, "(1)"
-       line 400, "pan.___", state 499, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 499, "else"
-       line 400, "pan.___", state 502, "(1)"
-       line 404, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 516, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 402, "pan.___", state 522, "((i<1))"
-       line 402, "pan.___", state 522, "((i>=1))"
-       line 409, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 541, "(1)"
-       line 410, "pan.___", state 542, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 542, "else"
-       line 410, "pan.___", state 545, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 414, "pan.___", state 554, "(1)"
-       line 414, "pan.___", state 555, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 555, "else"
-       line 414, "pan.___", state 558, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 412, "pan.___", state 564, "((i<1))"
-       line 412, "pan.___", state 564, "((i>=1))"
-       line 419, "pan.___", state 571, "(1)"
-       line 419, "pan.___", state 572, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 572, "else"
-       line 419, "pan.___", state 575, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 370, "pan.___", state 581, "(1)"
-       line 400, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 595, "(1)"
-       line 404, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 609, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 402, "pan.___", state 615, "((i<1))"
-       line 402, "pan.___", state 615, "((i>=1))"
-       line 409, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 634, "(1)"
-       line 410, "pan.___", state 635, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 635, "else"
-       line 410, "pan.___", state 638, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 414, "pan.___", state 647, "(1)"
-       line 414, "pan.___", state 648, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 648, "else"
-       line 414, "pan.___", state 651, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 412, "pan.___", state 657, "((i<1))"
-       line 412, "pan.___", state 657, "((i>=1))"
-       line 419, "pan.___", state 664, "(1)"
-       line 419, "pan.___", state 665, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 665, "else"
-       line 419, "pan.___", state 668, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 370, "pan.___", state 674, "(1)"
-       line 400, "pan.___", state 679, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 681, "(1)"
-       line 400, "pan.___", state 682, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 682, "else"
-       line 400, "pan.___", state 685, "(1)"
-       line 404, "pan.___", state 693, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 695, "(1)"
-       line 404, "pan.___", state 696, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 696, "else"
-       line 404, "pan.___", state 699, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 402, "pan.___", state 705, "((i<1))"
-       line 402, "pan.___", state 705, "((i>=1))"
-       line 409, "pan.___", state 711, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 724, "(1)"
-       line 410, "pan.___", state 725, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 725, "else"
-       line 410, "pan.___", state 728, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 414, "pan.___", state 737, "(1)"
-       line 414, "pan.___", state 738, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 738, "else"
-       line 414, "pan.___", state 741, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 412, "pan.___", state 747, "((i<1))"
-       line 412, "pan.___", state 747, "((i>=1))"
-       line 419, "pan.___", state 754, "(1)"
-       line 419, "pan.___", state 755, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 755, "else"
-       line 419, "pan.___", state 758, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 370, "pan.___", state 764, "(1)"
-       line 430, "pan.___", state 767, "(((tmp2&((1<<7)-1))&&((tmp2^cached_urcu_gp_ctr.val[_pid])&(1<<7))))"
-       line 430, "pan.___", state 767, "else"
-       line 400, "pan.___", state 777, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 779, "(1)"
-       line 400, "pan.___", state 780, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 780, "else"
-       line 400, "pan.___", state 783, "(1)"
-       line 404, "pan.___", state 791, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 793, "(1)"
-       line 404, "pan.___", state 794, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 794, "else"
-       line 404, "pan.___", state 797, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 402, "pan.___", state 803, "((i<1))"
-       line 402, "pan.___", state 803, "((i>=1))"
-       line 409, "pan.___", state 809, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 822, "(1)"
-       line 410, "pan.___", state 823, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 823, "else"
-       line 410, "pan.___", state 826, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 414, "pan.___", state 835, "(1)"
-       line 414, "pan.___", state 836, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 836, "else"
-       line 414, "pan.___", state 839, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 412, "pan.___", state 845, "((i<1))"
-       line 412, "pan.___", state 845, "((i>=1))"
-       line 419, "pan.___", state 852, "(1)"
-       line 419, "pan.___", state 853, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 853, "else"
-       line 419, "pan.___", state 856, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 370, "pan.___", state 862, "(1)"
-       line 449, "pan.___", state 870, "((tmp<1))"
-       line 449, "pan.___", state 870, "((tmp>=1))"
-       line 462, "pan.___", state 873, "tmp = 0"
-       line 400, "pan.___", state 877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 883, "(1)"
-       line 404, "pan.___", state 891, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 897, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 903, "((i<1))"
-       line 402, "pan.___", state 903, "((i>=1))"
-       line 409, "pan.___", state 909, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 922, "(1)"
-       line 410, "pan.___", state 923, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 923, "else"
-       line 410, "pan.___", state 926, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 414, "pan.___", state 935, "(1)"
-       line 414, "pan.___", state 936, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 936, "else"
-       line 414, "pan.___", state 939, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 945, "((i<1))"
-       line 412, "pan.___", state 945, "((i>=1))"
-       line 419, "pan.___", state 952, "(1)"
-       line 419, "pan.___", state 953, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 953, "else"
-       line 419, "pan.___", state 956, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 370, "pan.___", state 962, "(1)"
-       line 671, "pan.___", state 963, "tmp = cached_urcu_gp_ctr.val[_pid]"
-       line 400, "pan.___", state 967, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 973, "(1)"
-       line 404, "pan.___", state 981, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 987, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 402, "pan.___", state 993, "((i<1))"
-       line 402, "pan.___", state 993, "((i>=1))"
-       line 409, "pan.___", state 999, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1012, "(1)"
-       line 410, "pan.___", state 1013, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1013, "else"
-       line 410, "pan.___", state 1016, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 414, "pan.___", state 1025, "(1)"
-       line 414, "pan.___", state 1026, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1026, "else"
-       line 414, "pan.___", state 1029, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 412, "pan.___", state 1035, "((i<1))"
-       line 412, "pan.___", state 1035, "((i>=1))"
-       line 419, "pan.___", state 1042, "(1)"
-       line 419, "pan.___", state 1043, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1043, "else"
-       line 419, "pan.___", state 1046, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 370, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1061, "(1)"
-       line 404, "pan.___", state 1073, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1091, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1117, "(1)"
-       line 419, "pan.___", state 1134, "(1)"
-       line 404, "pan.___", state 1166, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1184, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1210, "(1)"
-       line 419, "pan.___", state 1227, "(1)"
-       line 400, "pan.___", state 1242, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1256, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1287, "(1)"
-       line 414, "pan.___", state 1300, "(1)"
-       line 419, "pan.___", state 1317, "(1)"
-       line 400, "pan.___", state 1340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1342, "(1)"
-       line 400, "pan.___", state 1343, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1343, "else"
-       line 400, "pan.___", state 1346, "(1)"
-       line 404, "pan.___", state 1354, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1356, "(1)"
-       line 404, "pan.___", state 1357, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1357, "else"
-       line 404, "pan.___", state 1360, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 402, "pan.___", state 1366, "((i<1))"
-       line 402, "pan.___", state 1366, "((i>=1))"
-       line 409, "pan.___", state 1372, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1385, "(1)"
-       line 410, "pan.___", state 1386, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1386, "else"
-       line 410, "pan.___", state 1389, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 414, "pan.___", state 1398, "(1)"
-       line 414, "pan.___", state 1399, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1399, "else"
-       line 414, "pan.___", state 1402, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 412, "pan.___", state 1408, "((i<1))"
-       line 412, "pan.___", state 1408, "((i>=1))"
-       line 419, "pan.___", state 1415, "(1)"
-       line 419, "pan.___", state 1416, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1416, "else"
-       line 419, "pan.___", state 1419, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 180, "pan.___", state 1448, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 184, "pan.___", state 1461, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 1471, "(1)"
-       line 165, "pan.___", state 1479, "(1)"
-       line 169, "pan.___", state 1491, "(1)"
-       line 176, "pan.___", state 1502, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 184, "pan.___", state 1524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 1534, "(1)"
-       line 165, "pan.___", state 1542, "(1)"
-       line 169, "pan.___", state 1554, "(1)"
-       line 176, "pan.___", state 1569, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 184, "pan.___", state 1591, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 1601, "(1)"
-       line 165, "pan.___", state 1609, "(1)"
-       line 169, "pan.___", state 1621, "(1)"
-       line 370, "pan.___", state 1642, "(1)"
-       line 696, "pan.___", state 1643, "(1)"
-       line 703, "pan.___", state 1646, "-end-"
-       (308 of 1646 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 752, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 2.02 seconds
-pan: rate 84117.327 states/second
-pan: avg transition delay 8.5985e-07 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.spin.input b/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index 2aac6eb..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-//#define READER_NEST_LEVEL 1
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu/result-standard-execution-nest/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index 5bb8316..0000000
+++ /dev/null
@@ -1,4823 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2108
-2:3:2060
-3:3:2063
-4:3:2063
-5:3:2066
-6:3:2074
-7:3:2074
-8:3:2077
-9:3:2083
-10:3:2087
-11:3:2087
-12:3:2090
-13:3:2098
-14:3:2102
-15:3:2103
-16:0:2108
-17:3:2105
-18:0:2108
-19:2:416
-20:0:2108
-21:2:422
-22:0:2108
-23:2:423
-24:0:2108
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:2106
-45:2:511
-46:0:2112
-47:2:513
-48:2:514
-49:0:2112
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:2112
-69:2:605
-70:0:2112
-71:2:607
-72:0:2112
-73:2:608
-74:0:2112
-75:2:618
-76:0:2112
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:2:650
-86:2:657
-87:2:658
-88:2:665
-89:2:670
-90:0:2112
-91:2:681
-92:0:2112
-93:2:685
-94:2:686
-95:2:690
-96:2:694
-97:2:695
-98:2:699
-99:2:707
-100:2:708
-101:2:713
-102:2:720
-103:2:721
-104:2:728
-105:2:733
-106:0:2112
-107:2:744
-108:0:2112
-109:2:752
-110:2:753
-111:2:757
-112:2:761
-113:2:762
-114:2:766
-115:2:774
-116:2:775
-117:2:780
-118:2:787
-119:2:788
-120:2:795
-121:2:800
-122:0:2112
-123:2:811
-124:0:2112
-125:2:813
-126:0:2112
-127:2:814
-128:2:818
-129:2:819
-130:2:827
-131:2:828
-132:2:832
-133:2:833
-134:2:841
-135:2:846
-136:2:850
-137:2:851
-138:2:858
-139:2:859
-140:2:870
-141:2:871
-142:2:872
-143:2:883
-144:2:888
-145:2:889
-146:0:2112
-147:2:901
-148:0:2112
-149:2:903
-150:0:2112
-151:2:906
-152:2:907
-153:2:919
-154:2:920
-155:2:924
-156:2:925
-157:2:933
-158:2:938
-159:2:942
-160:2:943
-161:2:950
-162:2:951
-163:2:962
-164:2:963
-165:2:964
-166:2:975
-167:2:980
-168:2:981
-169:0:2112
-170:2:993
-171:0:2112
-172:2:995
-173:0:2112
-174:2:996
-175:0:2112
-176:2:997
-177:0:2112
-178:2:998
-179:0:2112
-180:2:999
-181:2:1003
-182:2:1004
-183:2:1012
-184:2:1013
-185:2:1017
-186:2:1018
-187:2:1026
-188:2:1031
-189:2:1035
-190:2:1036
-191:2:1043
-192:2:1044
-193:2:1055
-194:2:1056
-195:2:1057
-196:2:1068
-197:2:1073
-198:2:1074
-199:0:2112
-200:2:1086
-201:0:2112
-202:2:1178
-203:0:2112
-204:2:1276
-205:0:2112
-206:2:1277
-207:0:2112
-208:2:1281
-209:0:2112
-210:2:1287
-211:2:1291
-212:2:1292
-213:2:1300
-214:2:1301
-215:2:1305
-216:2:1306
-217:2:1314
-218:2:1319
-219:2:1323
-220:2:1324
-221:2:1331
-222:2:1332
-223:2:1343
-224:2:1344
-225:2:1345
-226:2:1356
-227:2:1361
-228:2:1362
-229:0:2112
-230:2:1374
-231:0:2112
-232:2:1376
-233:0:2112
-234:2:1377
-235:2:1381
-236:2:1382
-237:2:1390
-238:2:1391
-239:2:1395
-240:2:1396
-241:2:1404
-242:2:1409
-243:2:1413
-244:2:1414
-245:2:1421
-246:2:1422
-247:2:1433
-248:2:1434
-249:2:1435
-250:2:1446
-251:2:1451
-252:2:1452
-253:0:2112
-254:2:1464
-255:0:2112
-256:2:1466
-257:0:2112
-258:1:2
-259:0:2112
-260:1:8
-261:0:2112
-262:1:9
-263:0:2112
-264:1:10
-265:0:2112
-266:1:11
-267:0:2112
-268:1:12
-269:1:16
-270:1:17
-271:1:25
-272:1:26
-273:1:30
-274:1:31
-275:1:39
-276:1:44
-277:1:48
-278:1:49
-279:1:56
-280:1:57
-281:1:68
-282:1:69
-283:1:70
-284:1:81
-285:1:86
-286:1:87
-287:0:2112
-288:1:99
-289:0:2112
-290:1:101
-291:0:2112
-292:1:102
-293:1:106
-294:1:107
-295:1:115
-296:1:116
-297:1:120
-298:1:121
-299:1:129
-300:1:134
-301:1:138
-302:1:139
-303:1:146
-304:1:147
-305:1:158
-306:1:159
-307:1:160
-308:1:171
-309:1:176
-310:1:177
-311:0:2112
-312:1:189
-313:0:2112
-314:1:191
-315:0:2112
-316:1:192
-317:0:2112
-318:1:193
-319:1:197
-320:1:198
-321:1:206
-322:1:207
-323:1:211
-324:1:212
-325:1:220
-326:1:225
-327:1:229
-328:1:230
-329:1:237
-330:1:238
-331:1:249
-332:1:250
-333:1:251
-334:1:262
-335:1:267
-336:1:268
-337:0:2112
-338:1:280
-339:0:2112
-340:1:282
-341:0:2112
-342:1:291
-343:0:2112
-344:1:293
-345:0:2112
-346:1:11
-347:0:2112
-348:1:12
-349:1:16
-350:1:17
-351:1:25
-352:1:26
-353:1:27
-354:1:39
-355:1:44
-356:1:48
-357:1:49
-358:1:56
-359:1:57
-360:1:68
-361:1:69
-362:1:70
-363:1:81
-364:1:86
-365:1:87
-366:0:2112
-367:1:99
-368:0:2112
-369:2:1469
-370:2:1470
-371:2:1482
-372:2:1483
-373:2:1487
-374:2:1488
-375:2:1496
-376:2:1501
-377:2:1505
-378:2:1506
-379:2:1513
-380:2:1514
-381:2:1525
-382:2:1526
-383:2:1527
-384:2:1538
-385:2:1543
-386:2:1544
-387:0:2112
-388:2:1556
-389:0:2112
-390:2:1558
-391:0:2112
-392:2:1559
-393:0:2112
-394:2:1560
-395:0:2112
-396:2:1561
-397:0:2112
-398:2:1562
-399:2:1566
-400:2:1567
-401:2:1575
-402:2:1576
-403:2:1580
-404:2:1581
-405:2:1589
-406:2:1594
-407:2:1598
-408:2:1599
-409:2:1606
-410:2:1607
-411:2:1618
-412:2:1619
-413:2:1620
-414:2:1631
-415:2:1636
-416:2:1637
-417:0:2112
-418:2:1649
-419:0:2112
-420:2:1651
-421:0:2112
-422:2:1652
-423:2:1656
-424:2:1657
-425:2:1665
-426:2:1666
-427:2:1670
-428:2:1671
-429:2:1679
-430:2:1684
-431:2:1688
-432:2:1689
-433:2:1696
-434:2:1697
-435:2:1708
-436:2:1709
-437:2:1710
-438:2:1721
-439:2:1726
-440:2:1727
-441:0:2112
-442:2:1739
-443:0:2112
-444:1:101
-445:0:2112
-446:2:1560
-447:0:2112
-448:2:1561
-449:0:2112
-450:2:1562
-451:2:1566
-452:2:1567
-453:2:1575
-454:2:1576
-455:2:1580
-456:2:1581
-457:2:1589
-458:2:1594
-459:2:1598
-460:2:1599
-461:2:1606
-462:2:1607
-463:2:1618
-464:2:1619
-465:2:1620
-466:2:1631
-467:2:1636
-468:2:1637
-469:0:2112
-470:2:1649
-471:0:2112
-472:2:1651
-473:0:2112
-474:2:1652
-475:2:1656
-476:2:1657
-477:2:1665
-478:2:1666
-479:2:1670
-480:2:1671
-481:2:1679
-482:2:1684
-483:2:1688
-484:2:1689
-485:2:1696
-486:2:1697
-487:2:1708
-488:2:1709
-489:2:1710
-490:2:1721
-491:2:1726
-492:2:1727
-493:0:2112
-494:2:1739
-495:0:2112
-496:1:102
-497:1:106
-498:1:107
-499:1:115
-500:1:116
-501:1:120
-502:1:121
-503:1:129
-504:1:134
-505:1:138
-506:1:139
-507:1:146
-508:1:147
-509:1:158
-510:1:159
-511:1:160
-512:1:171
-513:1:176
-514:1:177
-515:0:2112
-516:2:1560
-517:0:2112
-518:1:189
-519:0:2112
-520:1:285
-521:0:2112
-522:2:1561
-523:0:2112
-524:2:1562
-525:2:1566
-526:2:1567
-527:2:1575
-528:2:1576
-529:2:1580
-530:2:1581
-531:2:1589
-532:2:1594
-533:2:1598
-534:2:1599
-535:2:1606
-536:2:1607
-537:2:1618
-538:2:1619
-539:2:1620
-540:2:1631
-541:2:1636
-542:2:1637
-543:0:2112
-544:2:1649
-545:0:2112
-546:2:1651
-547:0:2112
-548:2:1652
-549:2:1656
-550:2:1657
-551:2:1665
-552:2:1666
-553:2:1670
-554:2:1671
-555:2:1679
-556:2:1684
-557:2:1688
-558:2:1689
-559:2:1696
-560:2:1697
-561:2:1708
-562:2:1709
-563:2:1710
-564:2:1721
-565:2:1726
-566:2:1727
-567:0:2112
-568:2:1739
-569:0:2112
-570:2:1560
-571:0:2112
-572:1:286
-573:0:2112
-574:1:291
-575:0:2112
-576:1:293
-577:0:2112
-578:1:296
-579:0:2112
-580:2:1561
-581:0:2112
-582:2:1562
-583:2:1566
-584:2:1567
-585:2:1575
-586:2:1576
-587:2:1580
-588:2:1581
-589:2:1589
-590:2:1594
-591:2:1598
-592:2:1599
-593:2:1606
-594:2:1607
-595:2:1618
-596:2:1619
-597:2:1620
-598:2:1631
-599:2:1636
-600:2:1637
-601:0:2112
-602:2:1649
-603:0:2112
-604:2:1651
-605:0:2112
-606:2:1652
-607:2:1656
-608:2:1657
-609:2:1665
-610:2:1666
-611:2:1670
-612:2:1671
-613:2:1679
-614:2:1684
-615:2:1688
-616:2:1689
-617:2:1696
-618:2:1697
-619:2:1708
-620:2:1709
-621:2:1710
-622:2:1721
-623:2:1726
-624:2:1727
-625:0:2112
-626:2:1739
-627:0:2112
-628:2:1560
-629:0:2112
-630:1:301
-631:0:2112
-632:2:1561
-633:0:2112
-634:2:1562
-635:2:1566
-636:2:1567
-637:2:1575
-638:2:1576
-639:2:1580
-640:2:1581
-641:2:1589
-642:2:1594
-643:2:1598
-644:2:1599
-645:2:1606
-646:2:1607
-647:2:1618
-648:2:1619
-649:2:1620
-650:2:1631
-651:2:1636
-652:2:1637
-653:0:2112
-654:2:1649
-655:0:2112
-656:2:1651
-657:0:2112
-658:2:1652
-659:2:1656
-660:2:1657
-661:2:1665
-662:2:1666
-663:2:1670
-664:2:1671
-665:2:1679
-666:2:1684
-667:2:1688
-668:2:1689
-669:2:1696
-670:2:1697
-671:2:1708
-672:2:1709
-673:2:1710
-674:2:1721
-675:2:1726
-676:2:1727
-677:0:2112
-678:2:1739
-679:0:2112
-680:2:1560
-681:0:2112
-682:1:302
-683:0:2112
-684:2:1561
-685:0:2112
-686:2:1562
-687:2:1566
-688:2:1567
-689:2:1575
-690:2:1576
-691:2:1580
-692:2:1581
-693:2:1589
-694:2:1594
-695:2:1598
-696:2:1599
-697:2:1606
-698:2:1607
-699:2:1618
-700:2:1619
-701:2:1620
-702:2:1631
-703:2:1636
-704:2:1637
-705:0:2112
-706:2:1649
-707:0:2112
-708:2:1651
-709:0:2112
-710:2:1652
-711:2:1656
-712:2:1657
-713:2:1665
-714:2:1666
-715:2:1670
-716:2:1671
-717:2:1679
-718:2:1684
-719:2:1688
-720:2:1689
-721:2:1696
-722:2:1697
-723:2:1708
-724:2:1709
-725:2:1710
-726:2:1721
-727:2:1726
-728:2:1727
-729:0:2112
-730:2:1739
-731:0:2112
-732:2:1560
-733:0:2112
-734:1:303
-735:0:2112
-736:1:304
-737:0:2112
-738:1:305
-739:0:2112
-740:1:306
-741:0:2112
-742:1:308
-743:0:2112
-744:2:1561
-745:0:2112
-746:2:1562
-747:2:1566
-748:2:1567
-749:2:1575
-750:2:1576
-751:2:1580
-752:2:1581
-753:2:1589
-754:2:1594
-755:2:1598
-756:2:1599
-757:2:1606
-758:2:1607
-759:2:1618
-760:2:1619
-761:2:1620
-762:2:1631
-763:2:1636
-764:2:1637
-765:0:2112
-766:2:1649
-767:0:2112
-768:2:1651
-769:0:2112
-770:2:1652
-771:2:1656
-772:2:1657
-773:2:1665
-774:2:1666
-775:2:1670
-776:2:1671
-777:2:1679
-778:2:1684
-779:2:1688
-780:2:1689
-781:2:1696
-782:2:1697
-783:2:1708
-784:2:1709
-785:2:1710
-786:2:1721
-787:2:1726
-788:2:1727
-789:0:2112
-790:2:1739
-791:0:2112
-792:2:1560
-793:0:2112
-794:1:310
-795:0:2112
-796:2:1561
-797:0:2112
-798:2:1562
-799:2:1566
-800:2:1567
-801:2:1575
-802:2:1576
-803:2:1580
-804:2:1581
-805:2:1589
-806:2:1594
-807:2:1598
-808:2:1599
-809:2:1606
-810:2:1607
-811:2:1618
-812:2:1619
-813:2:1620
-814:2:1631
-815:2:1636
-816:2:1637
-817:0:2112
-818:2:1649
-819:0:2112
-820:2:1651
-821:0:2112
-822:2:1652
-823:2:1656
-824:2:1657
-825:2:1665
-826:2:1666
-827:2:1670
-828:2:1671
-829:2:1679
-830:2:1684
-831:2:1688
-832:2:1689
-833:2:1696
-834:2:1697
-835:2:1708
-836:2:1709
-837:2:1710
-838:2:1721
-839:2:1726
-840:2:1727
-841:0:2112
-842:2:1739
-843:0:2112
-844:2:1560
-845:0:2112
-846:1:311
-847:1:315
-848:1:316
-849:1:324
-850:1:325
-851:1:326
-852:1:338
-853:1:343
-854:1:347
-855:1:348
-856:1:355
-857:1:356
-858:1:367
-859:1:368
-860:1:369
-861:1:380
-862:1:385
-863:1:386
-864:0:2112
-865:1:398
-866:0:2112
-867:2:1561
-868:0:2112
-869:2:1562
-870:2:1566
-871:2:1567
-872:2:1575
-873:2:1576
-874:2:1580
-875:2:1581
-876:2:1589
-877:2:1594
-878:2:1598
-879:2:1599
-880:2:1606
-881:2:1607
-882:2:1618
-883:2:1619
-884:2:1620
-885:2:1631
-886:2:1636
-887:2:1637
-888:0:2112
-889:2:1649
-890:0:2112
-891:2:1651
-892:0:2112
-893:2:1652
-894:2:1656
-895:2:1657
-896:2:1665
-897:2:1666
-898:2:1670
-899:2:1671
-900:2:1679
-901:2:1684
-902:2:1688
-903:2:1689
-904:2:1696
-905:2:1697
-906:2:1708
-907:2:1709
-908:2:1710
-909:2:1721
-910:2:1726
-911:2:1727
-912:0:2112
-913:2:1739
-914:0:2112
-915:2:1560
-916:0:2112
-917:2:1561
-918:0:2112
-919:2:1562
-920:2:1566
-921:2:1567
-922:2:1575
-923:2:1576
-924:2:1580
-925:2:1581
-926:2:1589
-927:2:1594
-928:2:1598
-929:2:1599
-930:2:1606
-931:2:1607
-932:2:1618
-933:2:1619
-934:2:1620
-935:2:1631
-936:2:1636
-937:2:1637
-938:0:2112
-939:2:1649
-940:0:2112
-941:1:400
-942:0:2112
-943:1:305
-944:0:2112
-945:1:306
-946:0:2112
-947:1:308
-948:0:2112
-949:2:1651
-950:0:2112
-951:2:1652
-952:2:1656
-953:2:1657
-954:2:1665
-955:2:1666
-956:2:1670
-957:2:1671
-958:2:1679
-959:2:1684
-960:2:1688
-961:2:1689
-962:2:1696
-963:2:1697
-964:2:1708
-965:2:1709
-966:2:1710
-967:2:1721
-968:2:1726
-969:2:1727
-970:0:2112
-971:2:1739
-972:0:2112
-973:2:1560
-974:0:2112
-975:2:1561
-976:0:2112
-977:2:1562
-978:2:1566
-979:2:1567
-980:2:1575
-981:2:1576
-982:2:1580
-983:2:1581
-984:2:1589
-985:2:1594
-986:2:1598
-987:2:1599
-988:2:1606
-989:2:1607
-990:2:1618
-991:2:1619
-992:2:1620
-993:2:1631
-994:2:1636
-995:2:1637
-996:0:2112
-997:2:1649
-998:0:2112
-999:1:310
-1000:0:2112
-1001:2:1651
-1002:0:2112
-1003:2:1652
-1004:2:1656
-1005:2:1657
-1006:2:1665
-1007:2:1666
-1008:2:1670
-1009:2:1671
-1010:2:1679
-1011:2:1684
-1012:2:1688
-1013:2:1689
-1014:2:1696
-1015:2:1697
-1016:2:1708
-1017:2:1709
-1018:2:1710
-1019:2:1721
-1020:2:1726
-1021:2:1727
-1022:0:2112
-1023:2:1739
-1024:0:2112
-1025:2:1560
-1026:0:2112
-1027:2:1561
-1028:0:2112
-1029:2:1562
-1030:2:1566
-1031:2:1567
-1032:2:1575
-1033:2:1576
-1034:2:1580
-1035:2:1581
-1036:2:1589
-1037:2:1594
-1038:2:1598
-1039:2:1599
-1040:2:1606
-1041:2:1607
-1042:2:1618
-1043:2:1619
-1044:2:1620
-1045:2:1631
-1046:2:1636
-1047:2:1637
-1048:0:2112
-1049:2:1649
-1050:0:2112
-1051:1:311
-1052:1:315
-1053:1:316
-1054:1:324
-1055:1:325
-1056:1:326
-1057:1:338
-1058:1:343
-1059:1:347
-1060:1:348
-1061:1:355
-1062:1:356
-1063:1:367
-1064:1:368
-1065:1:369
-1066:1:380
-1067:1:385
-1068:1:386
-1069:0:2112
-1070:1:398
-1071:0:2112
-1072:2:1651
-1073:0:2112
-1074:2:1652
-1075:2:1656
-1076:2:1657
-1077:2:1665
-1078:2:1666
-1079:2:1670
-1080:2:1671
-1081:2:1679
-1082:2:1684
-1083:2:1688
-1084:2:1689
-1085:2:1696
-1086:2:1697
-1087:2:1708
-1088:2:1709
-1089:2:1710
-1090:2:1721
-1091:2:1726
-1092:2:1727
-1093:0:2112
-1094:2:1739
-1095:0:2112
-1096:2:1560
-1097:0:2112
-1098:2:1561
-1099:0:2112
-1100:2:1562
-1101:2:1566
-1102:2:1567
-1103:2:1575
-1104:2:1576
-1105:2:1580
-1106:2:1581
-1107:2:1589
-1108:2:1594
-1109:2:1598
-1110:2:1599
-1111:2:1606
-1112:2:1607
-1113:2:1618
-1114:2:1619
-1115:2:1620
-1116:2:1631
-1117:2:1636
-1118:2:1637
-1119:0:2112
-1120:2:1649
-1121:0:2112
-1122:2:1651
-1123:0:2112
-1124:1:400
-1125:0:2112
-1126:1:404
-1127:0:2112
-1128:1:9
-1129:0:2112
-1130:1:10
-1131:0:2112
-1132:1:11
-1133:0:2112
-1134:2:1652
-1135:2:1656
-1136:2:1657
-1137:2:1665
-1138:2:1666
-1139:2:1670
-1140:2:1671
-1141:2:1679
-1142:2:1684
-1143:2:1688
-1144:2:1689
-1145:2:1696
-1146:2:1697
-1147:2:1708
-1148:2:1709
-1149:2:1710
-1150:2:1721
-1151:2:1726
-1152:2:1727
-1153:0:2112
-1154:2:1739
-1155:0:2112
-1156:2:1560
-1157:0:2112
-1158:2:1561
-1159:0:2112
-1160:2:1562
-1161:2:1566
-1162:2:1567
-1163:2:1575
-1164:2:1576
-1165:2:1580
-1166:2:1581
-1167:2:1589
-1168:2:1594
-1169:2:1598
-1170:2:1599
-1171:2:1606
-1172:2:1607
-1173:2:1618
-1174:2:1619
-1175:2:1620
-1176:2:1631
-1177:2:1636
-1178:2:1637
-1179:0:2112
-1180:2:1649
-1181:0:2112
-1182:2:1651
-1183:0:2112
-1184:1:12
-1185:1:16
-1186:1:17
-1187:1:25
-1188:1:26
-1189:1:27
-1190:1:39
-1191:1:44
-1192:1:48
-1193:1:49
-1194:1:56
-1195:1:57
-1196:1:68
-1197:1:69
-1198:1:70
-1199:1:81
-1200:1:86
-1201:1:87
-1202:0:2112
-1203:1:99
-1204:0:2112
-1205:2:1652
-1206:2:1656
-1207:2:1657
-1208:2:1665
-1209:2:1666
-1210:2:1670
-1211:2:1671
-1212:2:1679
-1213:2:1684
-1214:2:1688
-1215:2:1689
-1216:2:1696
-1217:2:1697
-1218:2:1708
-1219:2:1716
-1220:2:1717
-1221:2:1721
-1222:2:1726
-1223:2:1727
-1224:0:2112
-1225:2:1739
-1226:0:2112
-1227:2:1560
-1228:0:2112
-1229:2:1561
-1230:0:2112
-1231:2:1562
-1232:2:1566
-1233:2:1567
-1234:2:1575
-1235:2:1576
-1236:2:1580
-1237:2:1581
-1238:2:1589
-1239:2:1594
-1240:2:1598
-1241:2:1599
-1242:2:1606
-1243:2:1607
-1244:2:1618
-1245:2:1626
-1246:2:1627
-1247:2:1631
-1248:2:1636
-1249:2:1637
-1250:0:2112
-1251:2:1649
-1252:0:2112
-1253:2:1651
-1254:0:2112
-1255:1:101
-1256:0:2112
-1257:2:1652
-1258:2:1656
-1259:2:1657
-1260:2:1665
-1261:2:1666
-1262:2:1670
-1263:2:1671
-1264:2:1679
-1265:2:1684
-1266:2:1688
-1267:2:1689
-1268:2:1696
-1269:2:1697
-1270:2:1708
-1271:2:1716
-1272:2:1717
-1273:2:1721
-1274:2:1726
-1275:2:1727
-1276:0:2112
-1277:2:1739
-1278:0:2112
-1279:2:1560
-1280:0:2112
-1281:2:1561
-1282:0:2112
-1283:2:1562
-1284:2:1566
-1285:2:1567
-1286:2:1575
-1287:2:1576
-1288:2:1580
-1289:2:1581
-1290:2:1589
-1291:2:1594
-1292:2:1598
-1293:2:1599
-1294:2:1606
-1295:2:1607
-1296:2:1618
-1297:2:1626
-1298:2:1627
-1299:2:1631
-1300:2:1636
-1301:2:1637
-1302:0:2112
-1303:2:1649
-1304:0:2112
-1305:2:1651
-1306:0:2112
-1307:1:102
-1308:1:106
-1309:1:107
-1310:1:115
-1311:1:116
-1312:1:120
-1313:1:121
-1314:1:129
-1315:1:134
-1316:1:138
-1317:1:139
-1318:1:146
-1319:1:147
-1320:1:158
-1321:1:159
-1322:1:160
-1323:1:171
-1324:1:176
-1325:1:177
-1326:0:2112
-1327:1:189
-1328:0:2112
-1329:1:191
-1330:0:2112
-1331:2:1652
-1332:2:1656
-1333:2:1657
-1334:2:1665
-1335:2:1666
-1336:2:1670
-1337:2:1671
-1338:2:1679
-1339:2:1684
-1340:2:1688
-1341:2:1689
-1342:2:1696
-1343:2:1697
-1344:2:1708
-1345:2:1716
-1346:2:1717
-1347:2:1721
-1348:2:1726
-1349:2:1727
-1350:0:2112
-1351:2:1739
-1352:0:2112
-1353:2:1560
-1354:0:2112
-1355:2:1561
-1356:0:2112
-1357:2:1562
-1358:2:1566
-1359:2:1567
-1360:2:1575
-1361:2:1576
-1362:2:1580
-1363:2:1581
-1364:2:1589
-1365:2:1594
-1366:2:1598
-1367:2:1599
-1368:2:1606
-1369:2:1607
-1370:2:1618
-1371:2:1626
-1372:2:1627
-1373:2:1631
-1374:2:1636
-1375:2:1637
-1376:0:2112
-1377:2:1649
-1378:0:2112
-1379:2:1651
-1380:0:2112
-1381:1:192
-1382:0:2112
-1383:2:1652
-1384:2:1656
-1385:2:1657
-1386:2:1665
-1387:2:1666
-1388:2:1670
-1389:2:1671
-1390:2:1679
-1391:2:1684
-1392:2:1688
-1393:2:1689
-1394:2:1696
-1395:2:1697
-1396:2:1708
-1397:2:1716
-1398:2:1717
-1399:2:1721
-1400:2:1726
-1401:2:1727
-1402:0:2112
-1403:2:1739
-1404:0:2112
-1405:2:1560
-1406:0:2112
-1407:2:1561
-1408:0:2112
-1409:2:1562
-1410:2:1566
-1411:2:1567
-1412:2:1575
-1413:2:1576
-1414:2:1580
-1415:2:1581
-1416:2:1589
-1417:2:1594
-1418:2:1598
-1419:2:1599
-1420:2:1606
-1421:2:1607
-1422:2:1618
-1423:2:1626
-1424:2:1627
-1425:2:1631
-1426:2:1636
-1427:2:1637
-1428:0:2112
-1429:2:1649
-1430:0:2112
-1431:2:1651
-1432:0:2112
-1433:1:193
-1434:1:197
-1435:1:198
-1436:1:206
-1437:1:207
-1438:1:211
-1439:1:212
-1440:1:220
-1441:1:225
-1442:1:229
-1443:1:230
-1444:1:237
-1445:1:238
-1446:1:249
-1447:1:250
-1448:1:251
-1449:1:262
-1450:1:267
-1451:1:268
-1452:0:2112
-1453:1:280
-1454:0:2112
-1455:2:1652
-1456:2:1656
-1457:2:1657
-1458:2:1665
-1459:2:1666
-1460:2:1670
-1461:2:1671
-1462:2:1679
-1463:2:1684
-1464:2:1688
-1465:2:1689
-1466:2:1696
-1467:2:1697
-1468:2:1708
-1469:2:1716
-1470:2:1717
-1471:2:1721
-1472:2:1726
-1473:2:1727
-1474:0:2112
-1475:2:1739
-1476:0:2112
-1477:2:1560
-1478:0:2112
-1479:2:1561
-1480:0:2112
-1481:2:1562
-1482:2:1566
-1483:2:1567
-1484:2:1575
-1485:2:1576
-1486:2:1580
-1487:2:1581
-1488:2:1589
-1489:2:1594
-1490:2:1598
-1491:2:1599
-1492:2:1606
-1493:2:1607
-1494:2:1618
-1495:2:1626
-1496:2:1627
-1497:2:1631
-1498:2:1636
-1499:2:1637
-1500:0:2112
-1501:2:1649
-1502:0:2112
-1503:2:1651
-1504:0:2112
-1505:1:282
-1506:0:2112
-1507:1:291
-1508:0:2112
-1509:1:293
-1510:0:2112
-1511:1:11
-1512:0:2112
-1513:2:1652
-1514:2:1656
-1515:2:1657
-1516:2:1665
-1517:2:1666
-1518:2:1670
-1519:2:1671
-1520:2:1679
-1521:2:1684
-1522:2:1688
-1523:2:1689
-1524:2:1696
-1525:2:1697
-1526:2:1708
-1527:2:1716
-1528:2:1717
-1529:2:1721
-1530:2:1726
-1531:2:1727
-1532:0:2112
-1533:2:1739
-1534:0:2112
-1535:2:1560
-1536:0:2112
-1537:2:1561
-1538:0:2112
-1539:2:1562
-1540:2:1566
-1541:2:1567
-1542:2:1575
-1543:2:1576
-1544:2:1580
-1545:2:1581
-1546:2:1589
-1547:2:1594
-1548:2:1598
-1549:2:1599
-1550:2:1606
-1551:2:1607
-1552:2:1618
-1553:2:1626
-1554:2:1627
-1555:2:1631
-1556:2:1636
-1557:2:1637
-1558:0:2112
-1559:2:1649
-1560:0:2112
-1561:2:1651
-1562:0:2112
-1563:1:12
-1564:1:16
-1565:1:17
-1566:1:25
-1567:1:26
-1568:1:27
-1569:1:39
-1570:1:44
-1571:1:48
-1572:1:49
-1573:1:56
-1574:1:57
-1575:1:68
-1576:1:69
-1577:1:70
-1578:1:81
-1579:1:86
-1580:1:87
-1581:0:2112
-1582:1:99
-1583:0:2112
-1584:2:1652
-1585:2:1656
-1586:2:1657
-1587:2:1665
-1588:2:1666
-1589:2:1670
-1590:2:1671
-1591:2:1679
-1592:2:1684
-1593:2:1688
-1594:2:1689
-1595:2:1696
-1596:2:1697
-1597:2:1708
-1598:2:1716
-1599:2:1717
-1600:2:1721
-1601:2:1726
-1602:2:1727
-1603:0:2112
-1604:2:1739
-1605:0:2112
-1606:2:1560
-1607:0:2112
-1608:2:1561
-1609:0:2112
-1610:2:1562
-1611:2:1566
-1612:2:1567
-1613:2:1575
-1614:2:1576
-1615:2:1580
-1616:2:1581
-1617:2:1589
-1618:2:1594
-1619:2:1598
-1620:2:1599
-1621:2:1606
-1622:2:1607
-1623:2:1618
-1624:2:1626
-1625:2:1627
-1626:2:1631
-1627:2:1636
-1628:2:1637
-1629:0:2112
-1630:2:1649
-1631:0:2112
-1632:2:1651
-1633:0:2112
-1634:1:101
-1635:0:2112
-1636:2:1652
-1637:2:1656
-1638:2:1657
-1639:2:1665
-1640:2:1666
-1641:2:1670
-1642:2:1671
-1643:2:1679
-1644:2:1684
-1645:2:1688
-1646:2:1689
-1647:2:1696
-1648:2:1697
-1649:2:1708
-1650:2:1716
-1651:2:1717
-1652:2:1721
-1653:2:1726
-1654:2:1727
-1655:0:2112
-1656:2:1739
-1657:0:2112
-1658:2:1560
-1659:0:2112
-1660:2:1561
-1661:0:2112
-1662:2:1562
-1663:2:1566
-1664:2:1567
-1665:2:1575
-1666:2:1576
-1667:2:1580
-1668:2:1581
-1669:2:1589
-1670:2:1594
-1671:2:1598
-1672:2:1599
-1673:2:1606
-1674:2:1607
-1675:2:1618
-1676:2:1626
-1677:2:1627
-1678:2:1631
-1679:2:1636
-1680:2:1637
-1681:0:2112
-1682:2:1649
-1683:0:2112
-1684:2:1651
-1685:0:2112
-1686:1:102
-1687:1:106
-1688:1:107
-1689:1:115
-1690:1:116
-1691:1:120
-1692:1:121
-1693:1:129
-1694:1:134
-1695:1:138
-1696:1:139
-1697:1:146
-1698:1:147
-1699:1:158
-1700:1:159
-1701:1:160
-1702:1:171
-1703:1:176
-1704:1:177
-1705:0:2112
-1706:1:189
-1707:0:2112
-1708:1:285
-1709:0:2112
-1710:2:1652
-1711:2:1656
-1712:2:1657
-1713:2:1665
-1714:2:1666
-1715:2:1670
-1716:2:1671
-1717:2:1679
-1718:2:1684
-1719:2:1688
-1720:2:1689
-1721:2:1696
-1722:2:1697
-1723:2:1708
-1724:2:1716
-1725:2:1717
-1726:2:1721
-1727:2:1726
-1728:2:1727
-1729:0:2112
-1730:2:1739
-1731:0:2112
-1732:2:1560
-1733:0:2112
-1734:2:1561
-1735:0:2112
-1736:2:1562
-1737:2:1566
-1738:2:1567
-1739:2:1575
-1740:2:1576
-1741:2:1580
-1742:2:1581
-1743:2:1589
-1744:2:1594
-1745:2:1598
-1746:2:1599
-1747:2:1606
-1748:2:1607
-1749:2:1618
-1750:2:1626
-1751:2:1627
-1752:2:1631
-1753:2:1636
-1754:2:1637
-1755:0:2112
-1756:2:1649
-1757:0:2112
-1758:2:1651
-1759:0:2112
-1760:1:286
-1761:0:2112
-1762:1:291
-1763:0:2112
-1764:1:293
-1765:0:2112
-1766:1:296
-1767:0:2112
-1768:2:1652
-1769:2:1656
-1770:2:1657
-1771:2:1665
-1772:2:1666
-1773:2:1670
-1774:2:1671
-1775:2:1679
-1776:2:1684
-1777:2:1688
-1778:2:1689
-1779:2:1696
-1780:2:1697
-1781:2:1708
-1782:2:1716
-1783:2:1717
-1784:2:1721
-1785:2:1726
-1786:2:1727
-1787:0:2112
-1788:2:1739
-1789:0:2112
-1790:2:1560
-1791:0:2112
-1792:2:1561
-1793:0:2112
-1794:2:1562
-1795:2:1566
-1796:2:1567
-1797:2:1575
-1798:2:1576
-1799:2:1580
-1800:2:1581
-1801:2:1589
-1802:2:1594
-1803:2:1598
-1804:2:1599
-1805:2:1606
-1806:2:1607
-1807:2:1618
-1808:2:1626
-1809:2:1627
-1810:2:1631
-1811:2:1636
-1812:2:1637
-1813:0:2112
-1814:2:1649
-1815:0:2112
-1816:2:1651
-1817:0:2112
-1818:1:301
-1819:0:2112
-1820:2:1652
-1821:2:1656
-1822:2:1657
-1823:2:1665
-1824:2:1666
-1825:2:1670
-1826:2:1671
-1827:2:1679
-1828:2:1684
-1829:2:1688
-1830:2:1689
-1831:2:1696
-1832:2:1697
-1833:2:1708
-1834:2:1716
-1835:2:1717
-1836:2:1721
-1837:2:1726
-1838:2:1727
-1839:0:2112
-1840:2:1739
-1841:0:2112
-1842:2:1560
-1843:0:2112
-1844:2:1561
-1845:0:2112
-1846:2:1562
-1847:2:1566
-1848:2:1567
-1849:2:1575
-1850:2:1576
-1851:2:1580
-1852:2:1581
-1853:2:1589
-1854:2:1594
-1855:2:1598
-1856:2:1599
-1857:2:1606
-1858:2:1607
-1859:2:1618
-1860:2:1626
-1861:2:1627
-1862:2:1631
-1863:2:1636
-1864:2:1637
-1865:0:2112
-1866:2:1649
-1867:0:2112
-1868:2:1651
-1869:0:2112
-1870:1:302
-1871:0:2112
-1872:2:1652
-1873:2:1656
-1874:2:1657
-1875:2:1665
-1876:2:1666
-1877:2:1670
-1878:2:1671
-1879:2:1679
-1880:2:1684
-1881:2:1688
-1882:2:1689
-1883:2:1696
-1884:2:1697
-1885:2:1708
-1886:2:1716
-1887:2:1717
-1888:2:1721
-1889:2:1726
-1890:2:1727
-1891:0:2112
-1892:2:1739
-1893:0:2112
-1894:2:1560
-1895:0:2112
-1896:2:1561
-1897:0:2112
-1898:2:1562
-1899:2:1566
-1900:2:1567
-1901:2:1575
-1902:2:1576
-1903:2:1580
-1904:2:1581
-1905:2:1589
-1906:2:1594
-1907:2:1598
-1908:2:1599
-1909:2:1606
-1910:2:1607
-1911:2:1618
-1912:2:1626
-1913:2:1627
-1914:2:1631
-1915:2:1636
-1916:2:1637
-1917:0:2112
-1918:2:1649
-1919:0:2112
-1920:2:1651
-1921:0:2112
-1922:1:303
-1923:0:2112
-1924:1:304
-1925:0:2112
-1926:1:305
-1927:0:2112
-1928:1:306
-1929:0:2112
-1930:1:308
-1931:0:2112
-1932:2:1652
-1933:2:1656
-1934:2:1657
-1935:2:1665
-1936:2:1666
-1937:2:1670
-1938:2:1671
-1939:2:1679
-1940:2:1684
-1941:2:1688
-1942:2:1689
-1943:2:1696
-1944:2:1697
-1945:2:1708
-1946:2:1716
-1947:2:1717
-1948:2:1721
-1949:2:1726
-1950:2:1727
-1951:0:2112
-1952:2:1739
-1953:0:2112
-1954:2:1560
-1955:0:2112
-1956:2:1561
-1957:0:2112
-1958:2:1562
-1959:2:1566
-1960:2:1567
-1961:2:1575
-1962:2:1576
-1963:2:1580
-1964:2:1581
-1965:2:1589
-1966:2:1594
-1967:2:1598
-1968:2:1599
-1969:2:1606
-1970:2:1607
-1971:2:1618
-1972:2:1626
-1973:2:1627
-1974:2:1631
-1975:2:1636
-1976:2:1637
-1977:0:2112
-1978:2:1649
-1979:0:2112
-1980:2:1651
-1981:0:2112
-1982:1:310
-1983:0:2112
-1984:2:1652
-1985:2:1656
-1986:2:1657
-1987:2:1665
-1988:2:1666
-1989:2:1670
-1990:2:1671
-1991:2:1679
-1992:2:1684
-1993:2:1688
-1994:2:1689
-1995:2:1696
-1996:2:1697
-1997:2:1708
-1998:2:1716
-1999:2:1717
-2000:2:1721
-2001:2:1726
-2002:2:1727
-2003:0:2112
-2004:2:1739
-2005:0:2112
-2006:2:1560
-2007:0:2112
-2008:2:1561
-2009:0:2112
-2010:2:1562
-2011:2:1566
-2012:2:1567
-2013:2:1575
-2014:2:1576
-2015:2:1580
-2016:2:1581
-2017:2:1589
-2018:2:1594
-2019:2:1598
-2020:2:1599
-2021:2:1606
-2022:2:1607
-2023:2:1618
-2024:2:1626
-2025:2:1627
-2026:2:1631
-2027:2:1636
-2028:2:1637
-2029:0:2112
-2030:2:1649
-2031:0:2112
-2032:2:1651
-2033:0:2112
-2034:1:311
-2035:1:315
-2036:1:316
-2037:1:324
-2038:1:325
-2039:1:326
-2040:1:338
-2041:1:343
-2042:1:347
-2043:1:348
-2044:1:355
-2045:1:356
-2046:1:367
-2047:1:368
-2048:1:369
-2049:1:380
-2050:1:385
-2051:1:386
-2052:0:2112
-2053:1:398
-2054:0:2112
-2055:2:1652
-2056:2:1656
-2057:2:1657
-2058:2:1665
-2059:2:1666
-2060:2:1670
-2061:2:1671
-2062:2:1679
-2063:2:1684
-2064:2:1688
-2065:2:1689
-2066:2:1696
-2067:2:1697
-2068:2:1708
-2069:2:1716
-2070:2:1717
-2071:2:1721
-2072:2:1726
-2073:2:1727
-2074:0:2112
-2075:2:1739
-2076:0:2112
-2077:2:1560
-2078:0:2112
-2079:2:1561
-2080:0:2112
-2081:2:1562
-2082:2:1566
-2083:2:1567
-2084:2:1575
-2085:2:1576
-2086:2:1580
-2087:2:1581
-2088:2:1589
-2089:2:1594
-2090:2:1598
-2091:2:1599
-2092:2:1606
-2093:2:1607
-2094:2:1618
-2095:2:1626
-2096:2:1627
-2097:2:1631
-2098:2:1636
-2099:2:1637
-2100:0:2112
-2101:2:1649
-2102:0:2112
-2103:2:1651
-2104:0:2112
-2105:1:400
-2106:0:2112
-2107:1:305
-2108:0:2112
-2109:1:306
-2110:0:2112
-2111:1:308
-2112:0:2112
-2113:2:1652
-2114:2:1656
-2115:2:1657
-2116:2:1665
-2117:2:1666
-2118:2:1670
-2119:2:1671
-2120:2:1679
-2121:2:1684
-2122:2:1688
-2123:2:1689
-2124:2:1696
-2125:2:1697
-2126:2:1708
-2127:2:1716
-2128:2:1717
-2129:2:1721
-2130:2:1726
-2131:2:1727
-2132:0:2112
-2133:2:1739
-2134:0:2112
-2135:2:1560
-2136:0:2112
-2137:2:1561
-2138:0:2112
-2139:2:1562
-2140:2:1566
-2141:2:1567
-2142:2:1575
-2143:2:1576
-2144:2:1580
-2145:2:1581
-2146:2:1589
-2147:2:1594
-2148:2:1598
-2149:2:1599
-2150:2:1606
-2151:2:1607
-2152:2:1618
-2153:2:1626
-2154:2:1627
-2155:2:1631
-2156:2:1636
-2157:2:1637
-2158:0:2112
-2159:2:1649
-2160:0:2112
-2161:2:1651
-2162:0:2112
-2163:1:310
-2164:0:2112
-2165:2:1652
-2166:2:1656
-2167:2:1657
-2168:2:1665
-2169:2:1666
-2170:2:1670
-2171:2:1671
-2172:2:1679
-2173:2:1684
-2174:2:1688
-2175:2:1689
-2176:2:1696
-2177:2:1697
-2178:2:1708
-2179:2:1716
-2180:2:1717
-2181:2:1721
-2182:2:1726
-2183:2:1727
-2184:0:2112
-2185:2:1739
-2186:0:2112
-2187:2:1560
-2188:0:2112
-2189:2:1561
-2190:0:2112
-2191:2:1562
-2192:2:1566
-2193:2:1567
-2194:2:1575
-2195:2:1576
-2196:2:1580
-2197:2:1581
-2198:2:1589
-2199:2:1594
-2200:2:1598
-2201:2:1599
-2202:2:1606
-2203:2:1607
-2204:2:1618
-2205:2:1626
-2206:2:1627
-2207:2:1631
-2208:2:1636
-2209:2:1637
-2210:0:2112
-2211:2:1649
-2212:0:2112
-2213:2:1651
-2214:0:2112
-2215:1:311
-2216:1:315
-2217:1:316
-2218:1:324
-2219:1:325
-2220:1:326
-2221:1:338
-2222:1:343
-2223:1:347
-2224:1:348
-2225:1:355
-2226:1:356
-2227:1:367
-2228:1:368
-2229:1:369
-2230:1:380
-2231:1:385
-2232:1:386
-2233:0:2112
-2234:1:398
-2235:0:2112
-2236:2:1652
-2237:2:1656
-2238:2:1657
-2239:2:1665
-2240:2:1666
-2241:2:1670
-2242:2:1671
-2243:2:1679
-2244:2:1684
-2245:2:1688
-2246:2:1689
-2247:2:1696
-2248:2:1697
-2249:2:1708
-2250:2:1716
-2251:2:1717
-2252:2:1721
-2253:2:1726
-2254:2:1727
-2255:0:2112
-2256:2:1739
-2257:0:2112
-2258:2:1560
-2259:0:2112
-2260:2:1561
-2261:0:2112
-2262:2:1562
-2263:2:1566
-2264:2:1567
-2265:2:1575
-2266:2:1576
-2267:2:1580
-2268:2:1581
-2269:2:1589
-2270:2:1594
-2271:2:1598
-2272:2:1599
-2273:2:1606
-2274:2:1607
-2275:2:1618
-2276:2:1626
-2277:2:1627
-2278:2:1631
-2279:2:1636
-2280:2:1637
-2281:0:2112
-2282:2:1649
-2283:0:2112
-2284:2:1651
-2285:0:2112
-2286:1:400
-2287:0:2112
-2288:1:404
-2289:0:2112
-2290:1:9
-2291:0:2112
-2292:1:10
-2293:0:2112
-2294:1:11
-2295:0:2112
-2296:2:1652
-2297:2:1656
-2298:2:1657
-2299:2:1665
-2300:2:1666
-2301:2:1670
-2302:2:1671
-2303:2:1679
-2304:2:1684
-2305:2:1688
-2306:2:1689
-2307:2:1696
-2308:2:1697
-2309:2:1708
-2310:2:1716
-2311:2:1717
-2312:2:1721
-2313:2:1726
-2314:2:1727
-2315:0:2112
-2316:2:1739
-2317:0:2112
-2318:2:1560
-2319:0:2112
-2320:2:1561
-2321:0:2112
-2322:2:1562
-2323:2:1566
-2324:2:1567
-2325:2:1575
-2326:2:1576
-2327:2:1580
-2328:2:1581
-2329:2:1589
-2330:2:1594
-2331:2:1598
-2332:2:1599
-2333:2:1606
-2334:2:1607
-2335:2:1618
-2336:2:1626
-2337:2:1627
-2338:2:1631
-2339:2:1636
-2340:2:1637
-2341:0:2112
-2342:2:1649
-2343:0:2112
-2344:2:1651
-2345:0:2112
-2346:1:12
-2347:1:16
-2348:1:17
-2349:1:25
-2350:1:26
-2351:1:27
-2352:1:39
-2353:1:44
-2354:1:48
-2355:1:49
-2356:1:56
-2357:1:57
-2358:1:68
-2359:1:69
-2360:1:70
-2361:1:81
-2362:1:86
-2363:1:87
-2364:0:2112
-2365:1:99
-2366:0:2112
-2367:2:1652
-2368:2:1656
-2369:2:1657
-2370:2:1665
-2371:2:1666
-2372:2:1670
-2373:2:1671
-2374:2:1679
-2375:2:1684
-2376:2:1688
-2377:2:1689
-2378:2:1696
-2379:2:1697
-2380:2:1708
-2381:2:1716
-2382:2:1717
-2383:2:1721
-2384:2:1726
-2385:2:1727
-2386:0:2112
-2387:2:1739
-2388:0:2112
-2389:2:1560
-2390:0:2112
-2391:2:1561
-2392:0:2112
-2393:2:1562
-2394:2:1566
-2395:2:1567
-2396:2:1575
-2397:2:1576
-2398:2:1580
-2399:2:1581
-2400:2:1589
-2401:2:1594
-2402:2:1598
-2403:2:1599
-2404:2:1606
-2405:2:1607
-2406:2:1618
-2407:2:1626
-2408:2:1627
-2409:2:1631
-2410:2:1636
-2411:2:1637
-2412:0:2112
-2413:2:1649
-2414:0:2112
-2415:2:1651
-2416:0:2112
-2417:1:101
-2418:0:2112
-2419:2:1652
-2420:2:1656
-2421:2:1657
-2422:2:1665
-2423:2:1666
-2424:2:1670
-2425:2:1671
-2426:2:1679
-2427:2:1684
-2428:2:1688
-2429:2:1689
-2430:2:1696
-2431:2:1697
-2432:2:1708
-2433:2:1716
-2434:2:1717
-2435:2:1721
-2436:2:1726
-2437:2:1727
-2438:0:2112
-2439:2:1739
-2440:0:2112
-2441:2:1560
-2442:0:2112
-2443:2:1561
-2444:0:2112
-2445:2:1562
-2446:2:1566
-2447:2:1567
-2448:2:1575
-2449:2:1576
-2450:2:1580
-2451:2:1581
-2452:2:1589
-2453:2:1594
-2454:2:1598
-2455:2:1599
-2456:2:1606
-2457:2:1607
-2458:2:1618
-2459:2:1626
-2460:2:1627
-2461:2:1631
-2462:2:1636
-2463:2:1637
-2464:0:2112
-2465:2:1649
-2466:0:2112
-2467:2:1651
-2468:0:2112
-2469:1:102
-2470:1:106
-2471:1:107
-2472:1:115
-2473:1:116
-2474:1:120
-2475:1:121
-2476:1:129
-2477:1:134
-2478:1:138
-2479:1:139
-2480:1:146
-2481:1:147
-2482:1:158
-2483:1:159
-2484:1:160
-2485:1:171
-2486:1:176
-2487:1:177
-2488:0:2112
-2489:1:189
-2490:0:2112
-2491:1:191
-2492:0:2112
-2493:2:1652
-2494:2:1656
-2495:2:1657
-2496:2:1665
-2497:2:1666
-2498:2:1670
-2499:2:1671
-2500:2:1679
-2501:2:1684
-2502:2:1688
-2503:2:1689
-2504:2:1696
-2505:2:1697
-2506:2:1708
-2507:2:1716
-2508:2:1717
-2509:2:1721
-2510:2:1726
-2511:2:1727
-2512:0:2112
-2513:2:1739
-2514:0:2112
-2515:2:1560
-2516:0:2112
-2517:2:1561
-2518:0:2112
-2519:2:1562
-2520:2:1566
-2521:2:1567
-2522:2:1575
-2523:2:1576
-2524:2:1580
-2525:2:1581
-2526:2:1589
-2527:2:1594
-2528:2:1598
-2529:2:1599
-2530:2:1606
-2531:2:1607
-2532:2:1618
-2533:2:1626
-2534:2:1627
-2535:2:1631
-2536:2:1636
-2537:2:1637
-2538:0:2112
-2539:2:1649
-2540:0:2112
-2541:2:1651
-2542:0:2112
-2543:1:192
-2544:0:2112
-2545:2:1652
-2546:2:1656
-2547:2:1657
-2548:2:1665
-2549:2:1666
-2550:2:1670
-2551:2:1671
-2552:2:1679
-2553:2:1684
-2554:2:1688
-2555:2:1689
-2556:2:1696
-2557:2:1697
-2558:2:1708
-2559:2:1716
-2560:2:1717
-2561:2:1721
-2562:2:1726
-2563:2:1727
-2564:0:2112
-2565:2:1739
-2566:0:2112
-2567:2:1560
-2568:0:2112
-2569:2:1561
-2570:0:2112
-2571:2:1562
-2572:2:1566
-2573:2:1567
-2574:2:1575
-2575:2:1576
-2576:2:1580
-2577:2:1581
-2578:2:1589
-2579:2:1594
-2580:2:1598
-2581:2:1599
-2582:2:1606
-2583:2:1607
-2584:2:1618
-2585:2:1626
-2586:2:1627
-2587:2:1631
-2588:2:1636
-2589:2:1637
-2590:0:2112
-2591:2:1649
-2592:0:2112
-2593:2:1651
-2594:0:2112
-2595:1:193
-2596:1:197
-2597:1:198
-2598:1:206
-2599:1:207
-2600:1:211
-2601:1:212
-2602:1:220
-2603:1:225
-2604:1:229
-2605:1:230
-2606:1:237
-2607:1:238
-2608:1:249
-2609:1:250
-2610:1:251
-2611:1:262
-2612:1:267
-2613:1:268
-2614:0:2112
-2615:1:280
-2616:0:2112
-2617:2:1652
-2618:2:1656
-2619:2:1657
-2620:2:1665
-2621:2:1666
-2622:2:1670
-2623:2:1671
-2624:2:1679
-2625:2:1684
-2626:2:1688
-2627:2:1689
-2628:2:1696
-2629:2:1697
-2630:2:1708
-2631:2:1716
-2632:2:1717
-2633:2:1721
-2634:2:1726
-2635:2:1727
-2636:0:2112
-2637:2:1739
-2638:0:2112
-2639:2:1560
-2640:0:2112
-2641:2:1561
-2642:0:2112
-2643:2:1562
-2644:2:1566
-2645:2:1567
-2646:2:1575
-2647:2:1576
-2648:2:1580
-2649:2:1581
-2650:2:1589
-2651:2:1594
-2652:2:1598
-2653:2:1599
-2654:2:1606
-2655:2:1607
-2656:2:1618
-2657:2:1626
-2658:2:1627
-2659:2:1631
-2660:2:1636
-2661:2:1637
-2662:0:2112
-2663:2:1649
-2664:0:2112
-2665:2:1651
-2666:0:2112
-2667:1:282
-2668:0:2112
-2669:1:291
-2670:0:2112
-2671:1:293
-2672:0:2112
-2673:1:11
-2674:0:2112
-2675:2:1652
-2676:2:1656
-2677:2:1657
-2678:2:1665
-2679:2:1666
-2680:2:1670
-2681:2:1671
-2682:2:1679
-2683:2:1684
-2684:2:1688
-2685:2:1689
-2686:2:1696
-2687:2:1697
-2688:2:1708
-2689:2:1716
-2690:2:1717
-2691:2:1721
-2692:2:1726
-2693:2:1727
-2694:0:2112
-2695:2:1739
-2696:0:2112
-2697:2:1560
-2698:0:2112
-2699:2:1561
-2700:0:2112
-2701:2:1562
-2702:2:1566
-2703:2:1567
-2704:2:1575
-2705:2:1576
-2706:2:1580
-2707:2:1581
-2708:2:1589
-2709:2:1594
-2710:2:1598
-2711:2:1599
-2712:2:1606
-2713:2:1607
-2714:2:1618
-2715:2:1626
-2716:2:1627
-2717:2:1631
-2718:2:1636
-2719:2:1637
-2720:0:2112
-2721:2:1649
-2722:0:2112
-2723:2:1651
-2724:0:2112
-2725:1:12
-2726:1:16
-2727:1:17
-2728:1:25
-2729:1:34
-2730:1:35
-2731:1:39
-2732:1:44
-2733:1:48
-2734:1:49
-2735:1:56
-2736:1:57
-2737:1:68
-2738:1:69
-2739:1:72
-2740:1:73
-2741:1:81
-2742:1:86
-2743:1:87
-2744:0:2112
-2745:1:99
-2746:0:2112
-2747:2:1652
-2748:2:1656
-2749:2:1657
-2750:2:1665
-2751:2:1666
-2752:2:1670
-2753:2:1671
-2754:2:1679
-2755:2:1684
-2756:2:1688
-2757:2:1689
-2758:2:1696
-2759:2:1697
-2760:2:1708
-2761:2:1716
-2762:2:1717
-2763:2:1721
-2764:2:1726
-2765:2:1727
-2766:0:2112
-2767:2:1739
-2768:0:2112
-2769:2:1560
-2770:0:2112
-2771:2:1561
-2772:0:2112
-2773:2:1562
-2774:2:1566
-2775:2:1567
-2776:2:1575
-2777:2:1576
-2778:2:1580
-2779:2:1581
-2780:2:1589
-2781:2:1594
-2782:2:1598
-2783:2:1599
-2784:2:1606
-2785:2:1607
-2786:2:1618
-2787:2:1626
-2788:2:1627
-2789:2:1631
-2790:2:1636
-2791:2:1637
-2792:0:2112
-2793:2:1649
-2794:0:2112
-2795:2:1651
-2796:0:2112
-2797:1:101
-2798:0:2112
-2799:2:1652
-2800:2:1656
-2801:2:1657
-2802:2:1665
-2803:2:1666
-2804:2:1670
-2805:2:1671
-2806:2:1679
-2807:2:1684
-2808:2:1688
-2809:2:1689
-2810:2:1696
-2811:2:1697
-2812:2:1708
-2813:2:1716
-2814:2:1717
-2815:2:1721
-2816:2:1726
-2817:2:1727
-2818:0:2112
-2819:2:1739
-2820:0:2112
-2821:2:1560
-2822:0:2112
-2823:2:1561
-2824:0:2112
-2825:2:1562
-2826:2:1566
-2827:2:1567
-2828:2:1575
-2829:2:1576
-2830:2:1580
-2831:2:1581
-2832:2:1589
-2833:2:1594
-2834:2:1598
-2835:2:1599
-2836:2:1606
-2837:2:1607
-2838:2:1618
-2839:2:1626
-2840:2:1627
-2841:2:1631
-2842:2:1636
-2843:2:1637
-2844:0:2112
-2845:2:1649
-2846:0:2112
-2847:2:1651
-2848:0:2112
-2849:1:102
-2850:1:106
-2851:1:107
-2852:1:115
-2853:1:124
-2854:1:125
-2855:1:129
-2856:1:134
-2857:1:138
-2858:1:139
-2859:1:146
-2860:1:147
-2861:1:158
-2862:1:159
-2863:1:162
-2864:1:163
-2865:1:171
-2866:1:176
-2867:1:177
-2868:0:2112
-2869:1:189
-2870:0:2112
-2871:1:285
-2872:0:2112
-2873:2:1652
-2874:2:1656
-2875:2:1657
-2876:2:1665
-2877:2:1666
-2878:2:1670
-2879:2:1671
-2880:2:1679
-2881:2:1684
-2882:2:1688
-2883:2:1689
-2884:2:1696
-2885:2:1697
-2886:2:1708
-2887:2:1716
-2888:2:1717
-2889:2:1721
-2890:2:1726
-2891:2:1727
-2892:0:2112
-2893:2:1739
-2894:0:2112
-2895:2:1560
-2896:0:2112
-2897:2:1561
-2898:0:2112
-2899:2:1562
-2900:2:1566
-2901:2:1567
-2902:2:1575
-2903:2:1576
-2904:2:1580
-2905:2:1581
-2906:2:1589
-2907:2:1594
-2908:2:1598
-2909:2:1599
-2910:2:1606
-2911:2:1607
-2912:2:1618
-2913:2:1626
-2914:2:1627
-2915:2:1631
-2916:2:1636
-2917:2:1637
-2918:0:2112
-2919:2:1649
-2920:0:2112
-2921:2:1651
-2922:0:2112
-2923:1:286
-2924:0:2112
-2925:1:291
-2926:0:2112
-2927:1:293
-2928:0:2112
-2929:1:296
-2930:0:2112
-2931:2:1652
-2932:2:1656
-2933:2:1657
-2934:2:1665
-2935:2:1666
-2936:2:1670
-2937:2:1671
-2938:2:1679
-2939:2:1684
-2940:2:1688
-2941:2:1689
-2942:2:1696
-2943:2:1697
-2944:2:1708
-2945:2:1716
-2946:2:1717
-2947:2:1721
-2948:2:1726
-2949:2:1727
-2950:0:2112
-2951:2:1739
-2952:0:2112
-2953:2:1560
-2954:0:2112
-2955:2:1561
-2956:0:2112
-2957:2:1562
-2958:2:1566
-2959:2:1567
-2960:2:1575
-2961:2:1576
-2962:2:1580
-2963:2:1581
-2964:2:1589
-2965:2:1594
-2966:2:1598
-2967:2:1599
-2968:2:1606
-2969:2:1607
-2970:2:1618
-2971:2:1626
-2972:2:1627
-2973:2:1631
-2974:2:1636
-2975:2:1637
-2976:0:2112
-2977:2:1649
-2978:0:2112
-2979:2:1651
-2980:0:2112
-2981:1:301
-2982:0:2112
-2983:2:1652
-2984:2:1656
-2985:2:1657
-2986:2:1665
-2987:2:1666
-2988:2:1670
-2989:2:1671
-2990:2:1679
-2991:2:1684
-2992:2:1688
-2993:2:1689
-2994:2:1696
-2995:2:1697
-2996:2:1708
-2997:2:1716
-2998:2:1717
-2999:2:1721
-3000:2:1726
-3001:2:1727
-3002:0:2112
-3003:2:1739
-3004:0:2112
-3005:2:1560
-3006:0:2112
-3007:2:1561
-3008:0:2112
-3009:2:1562
-3010:2:1566
-3011:2:1567
-3012:2:1575
-3013:2:1576
-3014:2:1580
-3015:2:1581
-3016:2:1589
-3017:2:1594
-3018:2:1598
-3019:2:1599
-3020:2:1606
-3021:2:1607
-3022:2:1618
-3023:2:1626
-3024:2:1627
-3025:2:1631
-3026:2:1636
-3027:2:1637
-3028:0:2112
-3029:2:1649
-3030:0:2112
-3031:2:1651
-3032:0:2112
-3033:1:302
-3034:0:2112
-3035:2:1652
-3036:2:1656
-3037:2:1657
-3038:2:1665
-3039:2:1666
-3040:2:1670
-3041:2:1671
-3042:2:1679
-3043:2:1684
-3044:2:1688
-3045:2:1689
-3046:2:1696
-3047:2:1697
-3048:2:1708
-3049:2:1716
-3050:2:1717
-3051:2:1721
-3052:2:1726
-3053:2:1727
-3054:0:2112
-3055:2:1739
-3056:0:2112
-3057:2:1560
-3058:0:2112
-3059:2:1561
-3060:0:2112
-3061:2:1562
-3062:2:1566
-3063:2:1567
-3064:2:1575
-3065:2:1576
-3066:2:1580
-3067:2:1581
-3068:2:1589
-3069:2:1594
-3070:2:1598
-3071:2:1599
-3072:2:1606
-3073:2:1607
-3074:2:1618
-3075:2:1626
-3076:2:1627
-3077:2:1631
-3078:2:1636
-3079:2:1637
-3080:0:2112
-3081:2:1649
-3082:0:2112
-3083:2:1651
-3084:0:2112
-3085:1:303
-3086:0:2112
-3087:1:304
-3088:0:2112
-3089:1:305
-3090:0:2112
-3091:1:306
-3092:0:2112
-3093:1:308
-3094:0:2112
-3095:2:1652
-3096:2:1656
-3097:2:1657
-3098:2:1665
-3099:2:1666
-3100:2:1670
-3101:2:1671
-3102:2:1679
-3103:2:1684
-3104:2:1688
-3105:2:1689
-3106:2:1696
-3107:2:1697
-3108:2:1708
-3109:2:1716
-3110:2:1717
-3111:2:1721
-3112:2:1726
-3113:2:1727
-3114:0:2112
-3115:2:1739
-3116:0:2112
-3117:2:1560
-3118:0:2112
-3119:2:1561
-3120:0:2112
-3121:2:1562
-3122:2:1566
-3123:2:1567
-3124:2:1575
-3125:2:1576
-3126:2:1580
-3127:2:1581
-3128:2:1589
-3129:2:1594
-3130:2:1598
-3131:2:1599
-3132:2:1606
-3133:2:1607
-3134:2:1618
-3135:2:1626
-3136:2:1627
-3137:2:1631
-3138:2:1636
-3139:2:1637
-3140:0:2112
-3141:2:1649
-3142:0:2112
-3143:2:1651
-3144:0:2112
-3145:1:310
-3146:0:2112
-3147:2:1652
-3148:2:1656
-3149:2:1657
-3150:2:1665
-3151:2:1666
-3152:2:1670
-3153:2:1671
-3154:2:1679
-3155:2:1684
-3156:2:1688
-3157:2:1689
-3158:2:1696
-3159:2:1697
-3160:2:1708
-3161:2:1716
-3162:2:1717
-3163:2:1721
-3164:2:1726
-3165:2:1727
-3166:0:2112
-3167:2:1739
-3168:0:2112
-3169:2:1560
-3170:0:2112
-3171:2:1561
-3172:0:2112
-3173:2:1562
-3174:2:1566
-3175:2:1567
-3176:2:1575
-3177:2:1576
-3178:2:1580
-3179:2:1581
-3180:2:1589
-3181:2:1594
-3182:2:1598
-3183:2:1599
-3184:2:1606
-3185:2:1607
-3186:2:1618
-3187:2:1626
-3188:2:1627
-3189:2:1631
-3190:2:1636
-3191:2:1637
-3192:0:2112
-3193:2:1649
-3194:0:2112
-3195:2:1651
-3196:0:2112
-3197:1:311
-3198:1:315
-3199:1:316
-3200:1:324
-3201:1:333
-3202:1:334
-3203:1:338
-3204:1:343
-3205:1:347
-3206:1:348
-3207:1:355
-3208:1:356
-3209:1:367
-3210:1:368
-3211:1:371
-3212:1:372
-3213:1:380
-3214:1:385
-3215:1:386
-3216:0:2112
-3217:1:398
-3218:0:2112
-3219:2:1652
-3220:2:1656
-3221:2:1657
-3222:2:1665
-3223:2:1666
-3224:2:1670
-3225:2:1671
-3226:2:1679
-3227:2:1684
-3228:2:1688
-3229:2:1689
-3230:2:1696
-3231:2:1697
-3232:2:1708
-3233:2:1716
-3234:2:1717
-3235:2:1721
-3236:2:1726
-3237:2:1727
-3238:0:2112
-3239:2:1739
-3240:0:2112
-3241:2:1560
-3242:0:2112
-3243:2:1561
-3244:0:2112
-3245:2:1562
-3246:2:1566
-3247:2:1567
-3248:2:1575
-3249:2:1576
-3250:2:1580
-3251:2:1581
-3252:2:1589
-3253:2:1594
-3254:2:1598
-3255:2:1599
-3256:2:1606
-3257:2:1607
-3258:2:1618
-3259:2:1626
-3260:2:1627
-3261:2:1631
-3262:2:1636
-3263:2:1637
-3264:0:2112
-3265:2:1649
-3266:0:2112
-3267:2:1651
-3268:0:2112
-3269:1:400
-3270:0:2112
-3271:1:305
-3272:0:2112
-3273:1:306
-3274:0:2112
-3275:1:308
-3276:0:2112
-3277:2:1652
-3278:2:1656
-3279:2:1657
-3280:2:1665
-3281:2:1666
-3282:2:1670
-3283:2:1671
-3284:2:1679
-3285:2:1684
-3286:2:1688
-3287:2:1689
-3288:2:1696
-3289:2:1697
-3290:2:1708
-3291:2:1716
-3292:2:1717
-3293:2:1721
-3294:2:1726
-3295:2:1727
-3296:0:2112
-3297:2:1739
-3298:0:2112
-3299:2:1560
-3300:0:2112
-3301:2:1561
-3302:0:2112
-3303:2:1562
-3304:2:1566
-3305:2:1567
-3306:2:1575
-3307:2:1576
-3308:2:1580
-3309:2:1581
-3310:2:1589
-3311:2:1594
-3312:2:1598
-3313:2:1599
-3314:2:1606
-3315:2:1607
-3316:2:1618
-3317:2:1626
-3318:2:1627
-3319:2:1631
-3320:2:1636
-3321:2:1637
-3322:0:2112
-3323:2:1649
-3324:0:2112
-3325:2:1651
-3326:0:2112
-3327:1:310
-3328:0:2112
-3329:2:1652
-3330:2:1656
-3331:2:1657
-3332:2:1665
-3333:2:1666
-3334:2:1670
-3335:2:1671
-3336:2:1679
-3337:2:1684
-3338:2:1688
-3339:2:1689
-3340:2:1696
-3341:2:1697
-3342:2:1708
-3343:2:1716
-3344:2:1717
-3345:2:1721
-3346:2:1726
-3347:2:1727
-3348:0:2112
-3349:2:1739
-3350:0:2112
-3351:2:1560
-3352:0:2112
-3353:2:1561
-3354:0:2112
-3355:2:1562
-3356:2:1566
-3357:2:1567
-3358:2:1575
-3359:2:1576
-3360:2:1580
-3361:2:1581
-3362:2:1589
-3363:2:1594
-3364:2:1598
-3365:2:1599
-3366:2:1606
-3367:2:1607
-3368:2:1618
-3369:2:1626
-3370:2:1627
-3371:2:1631
-3372:2:1636
-3373:2:1637
-3374:0:2112
-3375:2:1649
-3376:0:2112
-3377:2:1651
-3378:0:2112
-3379:1:311
-3380:1:315
-3381:1:316
-3382:1:324
-3383:1:333
-3384:1:334
-3385:1:338
-3386:1:343
-3387:1:347
-3388:1:348
-3389:1:355
-3390:1:356
-3391:1:367
-3392:1:368
-3393:1:371
-3394:1:372
-3395:1:380
-3396:1:385
-3397:1:386
-3398:0:2112
-3399:1:398
-3400:0:2112
-3401:2:1652
-3402:2:1656
-3403:2:1657
-3404:2:1665
-3405:2:1666
-3406:2:1670
-3407:2:1671
-3408:2:1679
-3409:2:1684
-3410:2:1688
-3411:2:1689
-3412:2:1696
-3413:2:1697
-3414:2:1708
-3415:2:1716
-3416:2:1717
-3417:2:1721
-3418:2:1726
-3419:2:1727
-3420:0:2112
-3421:2:1739
-3422:0:2112
-3423:2:1560
-3424:0:2112
-3425:2:1561
-3426:0:2112
-3427:2:1562
-3428:2:1566
-3429:2:1567
-3430:2:1575
-3431:2:1576
-3432:2:1580
-3433:2:1581
-3434:2:1589
-3435:2:1594
-3436:2:1598
-3437:2:1599
-3438:2:1606
-3439:2:1607
-3440:2:1618
-3441:2:1626
-3442:2:1627
-3443:2:1631
-3444:2:1636
-3445:2:1637
-3446:0:2112
-3447:2:1649
-3448:0:2112
-3449:2:1651
-3450:0:2112
-3451:1:400
-3452:0:2112
-3453:1:404
-3454:0:2112
-3455:1:9
-3456:0:2112
-3457:1:10
-3458:0:2112
-3459:1:11
-3460:0:2112
-3461:2:1652
-3462:2:1656
-3463:2:1657
-3464:2:1665
-3465:2:1666
-3466:2:1670
-3467:2:1671
-3468:2:1679
-3469:2:1684
-3470:2:1688
-3471:2:1689
-3472:2:1696
-3473:2:1697
-3474:2:1708
-3475:2:1716
-3476:2:1717
-3477:2:1721
-3478:2:1726
-3479:2:1727
-3480:0:2112
-3481:2:1739
-3482:0:2112
-3483:2:1560
-3484:0:2112
-3485:2:1561
-3486:0:2112
-3487:2:1562
-3488:2:1566
-3489:2:1567
-3490:2:1575
-3491:2:1576
-3492:2:1580
-3493:2:1581
-3494:2:1589
-3495:2:1594
-3496:2:1598
-3497:2:1599
-3498:2:1606
-3499:2:1607
-3500:2:1618
-3501:2:1626
-3502:2:1627
-3503:2:1631
-3504:2:1636
-3505:2:1637
-3506:0:2112
-3507:2:1649
-3508:0:2112
-3509:2:1651
-3510:0:2112
-3511:1:12
-3512:1:16
-3513:1:17
-3514:1:25
-3515:1:34
-3516:1:35
-3517:1:39
-3518:1:44
-3519:1:48
-3520:1:49
-3521:1:56
-3522:1:57
-3523:1:68
-3524:1:69
-3525:1:72
-3526:1:73
-3527:1:81
-3528:1:86
-3529:1:87
-3530:0:2112
-3531:1:99
-3532:0:2112
-3533:2:1652
-3534:2:1656
-3535:2:1657
-3536:2:1665
-3537:2:1666
-3538:2:1670
-3539:2:1671
-3540:2:1679
-3541:2:1684
-3542:2:1688
-3543:2:1689
-3544:2:1696
-3545:2:1697
-3546:2:1708
-3547:2:1716
-3548:2:1717
-3549:2:1721
-3550:2:1726
-3551:2:1727
-3552:0:2112
-3553:2:1739
-3554:0:2112
-3555:2:1560
-3556:0:2112
-3557:2:1561
-3558:0:2112
-3559:2:1562
-3560:2:1566
-3561:2:1567
-3562:2:1575
-3563:2:1576
-3564:2:1580
-3565:2:1581
-3566:2:1589
-3567:2:1594
-3568:2:1598
-3569:2:1599
-3570:2:1606
-3571:2:1607
-3572:2:1618
-3573:2:1626
-3574:2:1627
-3575:2:1631
-3576:2:1636
-3577:2:1637
-3578:0:2112
-3579:2:1649
-3580:0:2112
-3581:2:1651
-3582:0:2112
-3583:1:101
-3584:0:2112
-3585:2:1652
-3586:2:1656
-3587:2:1657
-3588:2:1665
-3589:2:1666
-3590:2:1670
-3591:2:1671
-3592:2:1679
-3593:2:1684
-3594:2:1688
-3595:2:1689
-3596:2:1696
-3597:2:1697
-3598:2:1708
-3599:2:1716
-3600:2:1717
-3601:2:1721
-3602:2:1726
-3603:2:1727
-3604:0:2112
-3605:2:1739
-3606:0:2112
-3607:2:1560
-3608:0:2112
-3609:2:1561
-3610:0:2112
-3611:2:1562
-3612:2:1566
-3613:2:1567
-3614:2:1575
-3615:2:1576
-3616:2:1580
-3617:2:1581
-3618:2:1589
-3619:2:1594
-3620:2:1598
-3621:2:1599
-3622:2:1606
-3623:2:1607
-3624:2:1618
-3625:2:1626
-3626:2:1627
-3627:2:1631
-3628:2:1636
-3629:2:1637
-3630:0:2112
-3631:2:1649
-3632:0:2112
-3633:2:1651
-3634:0:2112
-3635:1:102
-3636:1:106
-3637:1:107
-3638:1:115
-3639:1:124
-3640:1:125
-3641:1:129
-3642:1:134
-3643:1:138
-3644:1:139
-3645:1:146
-3646:1:147
-3647:1:158
-3648:1:159
-3649:1:162
-3650:1:163
-3651:1:171
-3652:1:176
-3653:1:177
-3654:0:2112
-3655:1:189
-3656:0:2112
-3657:1:191
-3658:0:2112
-3659:2:1652
-3660:2:1656
-3661:2:1657
-3662:2:1665
-3663:2:1666
-3664:2:1670
-3665:2:1671
-3666:2:1679
-3667:2:1684
-3668:2:1688
-3669:2:1689
-3670:2:1696
-3671:2:1697
-3672:2:1708
-3673:2:1716
-3674:2:1717
-3675:2:1721
-3676:2:1726
-3677:2:1727
-3678:0:2112
-3679:2:1739
-3680:0:2112
-3681:2:1560
-3682:0:2112
-3683:2:1561
-3684:0:2112
-3685:2:1562
-3686:2:1566
-3687:2:1567
-3688:2:1575
-3689:2:1576
-3690:2:1580
-3691:2:1581
-3692:2:1589
-3693:2:1594
-3694:2:1598
-3695:2:1599
-3696:2:1606
-3697:2:1607
-3698:2:1618
-3699:2:1626
-3700:2:1627
-3701:2:1631
-3702:2:1636
-3703:2:1637
-3704:0:2112
-3705:2:1649
-3706:0:2112
-3707:2:1651
-3708:0:2112
-3709:1:192
-3710:0:2112
-3711:2:1652
-3712:2:1656
-3713:2:1657
-3714:2:1665
-3715:2:1666
-3716:2:1670
-3717:2:1671
-3718:2:1679
-3719:2:1684
-3720:2:1688
-3721:2:1689
-3722:2:1696
-3723:2:1697
-3724:2:1708
-3725:2:1716
-3726:2:1717
-3727:2:1721
-3728:2:1726
-3729:2:1727
-3730:0:2112
-3731:2:1739
-3732:0:2112
-3733:2:1560
-3734:0:2112
-3735:2:1561
-3736:0:2112
-3737:2:1562
-3738:2:1566
-3739:2:1567
-3740:2:1575
-3741:2:1576
-3742:2:1580
-3743:2:1581
-3744:2:1589
-3745:2:1594
-3746:2:1598
-3747:2:1599
-3748:2:1606
-3749:2:1607
-3750:2:1618
-3751:2:1626
-3752:2:1627
-3753:2:1631
-3754:2:1636
-3755:2:1637
-3756:0:2112
-3757:2:1649
-3758:0:2112
-3759:2:1651
-3760:0:2112
-3761:1:193
-3762:1:197
-3763:1:198
-3764:1:206
-3765:1:215
-3766:1:216
-3767:1:220
-3768:1:225
-3769:1:229
-3770:1:230
-3771:1:237
-3772:1:238
-3773:1:249
-3774:1:250
-3775:1:253
-3776:1:254
-3777:1:262
-3778:1:267
-3779:1:268
-3780:0:2112
-3781:1:280
-3782:0:2112
-3783:2:1652
-3784:2:1656
-3785:2:1657
-3786:2:1665
-3787:2:1666
-3788:2:1670
-3789:2:1671
-3790:2:1679
-3791:2:1684
-3792:2:1688
-3793:2:1689
-3794:2:1696
-3795:2:1697
-3796:2:1708
-3797:2:1716
-3798:2:1717
-3799:2:1721
-3800:2:1726
-3801:2:1727
-3802:0:2112
-3803:2:1739
-3804:0:2112
-3805:2:1560
-3806:0:2112
-3807:2:1561
-3808:0:2112
-3809:2:1562
-3810:2:1566
-3811:2:1567
-3812:2:1575
-3813:2:1576
-3814:2:1580
-3815:2:1581
-3816:2:1589
-3817:2:1594
-3818:2:1598
-3819:2:1599
-3820:2:1606
-3821:2:1607
-3822:2:1618
-3823:2:1626
-3824:2:1627
-3825:2:1631
-3826:2:1636
-3827:2:1637
-3828:0:2112
-3829:2:1649
-3830:0:2112
-3831:1:282
-3832:0:2112
-3833:1:291
-3834:0:2112
-3835:1:293
-3836:0:2112
-3837:1:11
-3838:0:2112
-3839:1:12
-3840:1:16
-3841:1:17
-3842:1:25
-3843:1:26
-3844:1:27
-3845:1:39
-3846:1:44
-3847:1:48
-3848:1:49
-3849:1:56
-3850:1:57
-3851:1:68
-3852:1:69
-3853:1:70
-3854:1:81
-3855:1:86
-3856:1:87
-3857:0:2112
-3858:1:99
-3859:0:2112
-3860:1:101
-3861:0:2112
-3862:1:102
-3863:1:106
-3864:1:107
-3865:1:115
-3866:1:116
-3867:1:120
-3868:1:121
-3869:1:129
-3870:1:134
-3871:1:138
-3872:1:139
-3873:1:146
-3874:1:147
-3875:1:158
-3876:1:159
-3877:1:160
-3878:1:171
-3879:1:176
-3880:1:177
-3881:0:2112
-3882:1:189
-3883:0:2112
-3884:1:285
-3885:0:2112
-3886:1:286
-3887:0:2112
-3888:1:291
-3889:0:2112
-3890:1:293
-3891:0:2112
-3892:1:296
-3893:0:2112
-3894:1:301
-3895:0:2112
-3896:1:302
-3897:0:2112
-3898:1:303
-3899:0:2112
-3900:1:304
-3901:0:2112
-3902:1:305
-3903:0:2112
-3904:1:306
-3905:0:2112
-3906:1:308
-3907:0:2112
-3908:1:310
-3909:0:2112
-3910:1:311
-3911:1:315
-3912:1:316
-3913:1:324
-3914:1:325
-3915:1:326
-3916:1:338
-3917:1:343
-3918:1:347
-3919:1:348
-3920:1:355
-3921:1:356
-3922:1:367
-3923:1:368
-3924:1:369
-3925:1:380
-3926:1:385
-3927:1:386
-3928:0:2112
-3929:1:398
-3930:0:2112
-3931:1:400
-3932:0:2112
-3933:1:305
-3934:0:2112
-3935:1:306
-3936:0:2112
-3937:1:308
-3938:0:2112
-3939:1:310
-3940:0:2112
-3941:1:311
-3942:1:315
-3943:1:316
-3944:1:324
-3945:1:325
-3946:1:326
-3947:1:338
-3948:1:343
-3949:1:347
-3950:1:348
-3951:1:355
-3952:1:356
-3953:1:367
-3954:1:368
-3955:1:369
-3956:1:380
-3957:1:385
-3958:1:386
-3959:0:2112
-3960:1:398
-3961:0:2112
-3962:1:400
-3963:0:2112
-3964:1:404
-3965:0:2112
-3966:1:9
-3967:0:2112
-3968:1:10
-3969:0:2112
-3970:1:11
-3971:0:2112
-3972:1:12
-3973:1:16
-3974:1:17
-3975:1:25
-3976:1:26
-3977:1:27
-3978:1:39
-3979:1:44
-3980:1:48
-3981:1:49
-3982:1:56
-3983:1:57
-3984:1:68
-3985:1:69
-3986:1:70
-3987:1:81
-3988:1:86
-3989:1:87
-3990:0:2112
-3991:1:99
-3992:0:2112
-3993:1:101
-3994:0:2112
-3995:1:102
-3996:1:106
-3997:1:107
-3998:1:115
-3999:1:116
-4000:1:120
-4001:1:121
-4002:1:129
-4003:1:134
-4004:1:138
-4005:1:139
-4006:1:146
-4007:1:147
-4008:1:158
-4009:1:159
-4010:1:160
-4011:1:171
-4012:1:176
-4013:1:177
-4014:0:2112
-4015:1:189
-4016:0:2112
-4017:1:191
-4018:0:2112
-4019:1:192
-4020:0:2112
-4021:1:193
-4022:1:197
-4023:1:198
-4024:1:206
-4025:1:207
-4026:1:211
-4027:1:212
-4028:1:220
-4029:1:225
-4030:1:229
-4031:1:230
-4032:1:237
-4033:1:238
-4034:1:249
-4035:1:250
-4036:1:251
-4037:1:262
-4038:1:267
-4039:1:268
-4040:0:2112
-4041:1:280
-4042:0:2112
-4043:1:282
-4044:0:2112
-4045:2:1651
-4046:0:2112
-4047:1:291
-4048:0:2112
-4049:2:1652
-4050:2:1656
-4051:2:1657
-4052:2:1665
-4053:2:1666
-4054:2:1670
-4055:2:1671
-4056:2:1679
-4057:2:1684
-4058:2:1688
-4059:2:1689
-4060:2:1696
-4061:2:1697
-4062:2:1708
-4063:2:1716
-4064:2:1717
-4065:2:1721
-4066:2:1726
-4067:2:1727
-4068:0:2112
-4069:2:1739
-4070:0:2112
-4071:2:1560
-4072:0:2112
-4073:1:293
-4074:0:2112
-4075:1:11
-4076:0:2112
-4077:1:12
-4078:1:16
-4079:1:17
-4080:1:25
-4081:1:26
-4082:1:27
-4083:1:39
-4084:1:44
-4085:1:48
-4086:1:49
-4087:1:56
-4088:1:57
-4089:1:68
-4090:1:69
-4091:1:70
-4092:1:81
-4093:1:86
-4094:1:87
-4095:0:2112
-4096:1:99
-4097:0:2112
-4098:1:101
-4099:0:2112
-4100:1:102
-4101:1:106
-4102:1:107
-4103:1:115
-4104:1:116
-4105:1:120
-4106:1:121
-4107:1:129
-4108:1:134
-4109:1:138
-4110:1:139
-4111:1:146
-4112:1:147
-4113:1:158
-4114:1:159
-4115:1:160
-4116:1:171
-4117:1:176
-4118:1:177
-4119:0:2112
-4120:1:189
-4121:0:2112
-4122:1:285
-4123:0:2112
-4124:1:286
-4125:0:2112
-4126:1:291
-4127:0:2112
-4128:1:293
-4129:0:2112
-4130:1:296
-4131:0:2112
-4132:1:301
-4133:0:2112
-4134:1:302
-4135:0:2112
-4136:1:303
-4137:0:2112
-4138:1:304
-4139:0:2112
-4140:1:305
-4141:0:2112
-4142:1:306
-4143:0:2112
-4144:1:308
-4145:0:2112
-4146:1:310
-4147:0:2112
-4148:1:311
-4149:1:315
-4150:1:316
-4151:1:324
-4152:1:325
-4153:1:326
-4154:1:338
-4155:1:343
-4156:1:347
-4157:1:348
-4158:1:355
-4159:1:356
-4160:1:367
-4161:1:368
-4162:1:369
-4163:1:380
-4164:1:385
-4165:1:386
-4166:0:2112
-4167:1:398
-4168:0:2112
-4169:1:400
-4170:0:2112
-4171:1:305
-4172:0:2112
-4173:1:306
-4174:0:2112
-4175:1:308
-4176:0:2112
-4177:1:310
-4178:0:2112
-4179:1:311
-4180:1:315
-4181:1:316
-4182:1:324
-4183:1:325
-4184:1:326
-4185:1:338
-4186:1:343
-4187:1:347
-4188:1:348
-4189:1:355
-4190:1:356
-4191:1:367
-4192:1:368
-4193:1:369
-4194:1:380
-4195:1:385
-4196:1:386
-4197:0:2112
-4198:1:398
-4199:0:2112
-4200:1:400
-4201:0:2112
-4202:1:404
-4203:0:2112
-4204:1:9
-4205:0:2112
-4206:1:10
-4207:0:2112
-4208:1:11
-4209:0:2112
-4210:1:12
-4211:1:16
-4212:1:17
-4213:1:25
-4214:1:26
-4215:1:27
-4216:1:39
-4217:1:44
-4218:1:48
-4219:1:49
-4220:1:56
-4221:1:57
-4222:1:68
-4223:1:69
-4224:1:70
-4225:1:81
-4226:1:86
-4227:1:87
-4228:0:2112
-4229:1:99
-4230:0:2112
-4231:1:101
-4232:0:2112
-4233:1:102
-4234:1:106
-4235:1:107
-4236:1:115
-4237:1:116
-4238:1:120
-4239:1:121
-4240:1:129
-4241:1:134
-4242:1:138
-4243:1:139
-4244:1:146
-4245:1:147
-4246:1:158
-4247:1:159
-4248:1:160
-4249:1:171
-4250:1:176
-4251:1:177
-4252:0:2112
-4253:1:189
-4254:0:2112
-4255:1:191
-4256:0:2112
-4257:1:192
-4258:0:2112
-4259:1:193
-4260:1:197
-4261:1:198
-4262:1:206
-4263:1:207
-4264:1:211
-4265:1:212
-4266:1:220
-4267:1:225
-4268:1:229
-4269:1:230
-4270:1:237
-4271:1:238
-4272:1:249
-4273:1:250
-4274:1:251
-4275:1:262
-4276:1:267
-4277:1:268
-4278:0:2112
-4279:1:280
-4280:0:2112
-4281:1:282
-4282:0:2112
-4283:1:291
-4284:0:2112
-4285:1:293
-4286:0:2112
-4287:2:1561
-4288:0:2112
-4289:1:11
-4290:0:2112
-4291:1:12
-4292:1:16
-4293:1:17
-4294:1:25
-4295:1:26
-4296:1:27
-4297:1:39
-4298:1:44
-4299:1:48
-4300:1:49
-4301:1:56
-4302:1:57
-4303:1:68
-4304:1:69
-4305:1:70
-4306:1:81
-4307:1:86
-4308:1:87
--1:-1:-1
-4309:0:2112
-4310:1:99
-4311:0:2112
-4312:1:101
-4313:0:2112
-4314:1:102
-4315:1:106
-4316:1:107
-4317:1:115
-4318:1:116
-4319:1:120
-4320:1:121
-4321:1:129
-4322:1:134
-4323:1:138
-4324:1:139
-4325:1:146
-4326:1:147
-4327:1:158
-4328:1:159
-4329:1:160
-4330:1:171
-4331:1:176
-4332:1:177
-4333:0:2112
-4334:1:189
-4335:0:2112
-4336:1:285
-4337:0:2112
-4338:1:286
-4339:0:2112
-4340:1:291
-4341:0:2112
-4342:1:293
-4343:0:2112
-4344:1:296
-4345:0:2112
-4346:1:301
-4347:0:2112
-4348:1:302
-4349:0:2112
-4350:1:303
-4351:0:2112
-4352:1:304
-4353:0:2112
-4354:1:305
-4355:0:2112
-4356:1:306
-4357:0:2112
-4358:1:308
-4359:0:2112
-4360:1:310
-4361:0:2112
-4362:1:311
-4363:1:315
-4364:1:316
-4365:1:324
-4366:1:325
-4367:1:326
-4368:1:338
-4369:1:343
-4370:1:347
-4371:1:348
-4372:1:355
-4373:1:356
-4374:1:367
-4375:1:368
-4376:1:369
-4377:1:380
-4378:1:385
-4379:1:386
-4380:0:2112
-4381:1:398
-4382:0:2112
-4383:1:400
-4384:0:2112
-4385:1:305
-4386:0:2112
-4387:1:306
-4388:0:2112
-4389:1:308
-4390:0:2112
-4391:1:310
-4392:0:2112
-4393:1:311
-4394:1:315
-4395:1:316
-4396:1:324
-4397:1:325
-4398:1:326
-4399:1:338
-4400:1:343
-4401:1:347
-4402:1:348
-4403:1:355
-4404:1:356
-4405:1:367
-4406:1:368
-4407:1:369
-4408:1:380
-4409:1:385
-4410:1:386
-4411:0:2112
-4412:1:398
-4413:0:2112
-4414:1:400
-4415:0:2112
-4416:1:404
-4417:0:2112
-4418:1:9
-4419:0:2112
-4420:1:10
-4421:0:2112
-4422:1:11
-4423:0:2112
-4424:1:12
-4425:1:16
-4426:1:17
-4427:1:25
-4428:1:34
-4429:1:35
-4430:1:39
-4431:1:44
-4432:1:48
-4433:1:49
-4434:1:56
-4435:1:57
-4436:1:68
-4437:1:69
-4438:1:72
-4439:1:73
-4440:1:81
-4441:1:86
-4442:1:87
-4443:0:2112
-4444:1:99
-4445:0:2112
-4446:2:1562
-4447:2:1566
-4448:2:1567
-4449:2:1575
-4450:2:1576
-4451:2:1580
-4452:2:1581
-4453:2:1589
-4454:2:1594
-4455:2:1598
-4456:2:1599
-4457:2:1606
-4458:2:1607
-4459:2:1618
-4460:2:1626
-4461:2:1627
-4462:2:1631
-4463:2:1636
-4464:2:1637
-4465:0:2112
-4466:2:1649
-4467:0:2112
-4468:2:1651
-4469:0:2112
-4470:2:1652
-4471:2:1656
-4472:2:1657
-4473:2:1665
-4474:2:1666
-4475:2:1670
-4476:2:1671
-4477:2:1679
-4478:2:1684
-4479:2:1688
-4480:2:1689
-4481:2:1696
-4482:2:1697
-4483:2:1708
-4484:2:1716
-4485:2:1717
-4486:2:1721
-4487:2:1726
-4488:2:1727
-4489:0:2112
-4490:2:1739
-4491:0:2112
-4492:2:1560
-4493:0:2112
-4494:2:1561
-4495:0:2112
-4496:1:101
-4497:0:2112
-4498:2:1562
-4499:2:1566
-4500:2:1567
-4501:2:1575
-4502:2:1576
-4503:2:1580
-4504:2:1581
-4505:2:1589
-4506:2:1594
-4507:2:1598
-4508:2:1599
-4509:2:1606
-4510:2:1607
-4511:2:1618
-4512:2:1626
-4513:2:1627
-4514:2:1631
-4515:2:1636
-4516:2:1637
-4517:0:2112
-4518:2:1649
-4519:0:2112
-4520:2:1651
-4521:0:2112
-4522:2:1652
-4523:2:1656
-4524:2:1657
-4525:2:1665
-4526:2:1666
-4527:2:1670
-4528:2:1671
-4529:2:1679
-4530:2:1684
-4531:2:1688
-4532:2:1689
-4533:2:1696
-4534:2:1697
-4535:2:1708
-4536:2:1716
-4537:2:1717
-4538:2:1721
-4539:2:1726
-4540:2:1727
-4541:0:2112
-4542:2:1739
-4543:0:2112
-4544:2:1560
-4545:0:2112
-4546:2:1561
-4547:0:2112
-4548:1:102
-4549:1:106
-4550:1:107
-4551:1:115
-4552:1:116
-4553:1:117
-4554:1:129
-4555:1:134
-4556:1:138
-4557:1:139
-4558:1:146
-4559:1:147
-4560:1:158
-4561:1:159
-4562:1:160
-4563:1:171
-4564:1:176
-4565:1:177
-4566:0:2112
-4567:1:189
-4568:0:2112
-4569:1:191
-4570:0:2112
-4571:2:1562
-4572:2:1566
-4573:2:1567
-4574:2:1575
-4575:2:1576
-4576:2:1580
-4577:2:1581
-4578:2:1589
-4579:2:1594
-4580:2:1598
-4581:2:1599
-4582:2:1606
-4583:2:1607
-4584:2:1618
-4585:2:1626
-4586:2:1627
-4587:2:1631
-4588:2:1636
-4589:2:1637
-4590:0:2112
-4591:2:1649
-4592:0:2112
-4593:2:1651
-4594:0:2112
-4595:2:1652
-4596:2:1656
-4597:2:1657
-4598:2:1665
-4599:2:1666
-4600:2:1670
-4601:2:1671
-4602:2:1679
-4603:2:1684
-4604:2:1688
-4605:2:1689
-4606:2:1696
-4607:2:1697
-4608:2:1708
-4609:2:1716
-4610:2:1717
-4611:2:1721
-4612:2:1726
-4613:2:1727
-4614:0:2112
-4615:2:1739
-4616:0:2112
-4617:2:1560
-4618:0:2112
-4619:2:1561
-4620:0:2112
-4621:1:192
-4622:0:2112
-4623:2:1562
-4624:2:1566
-4625:2:1567
-4626:2:1575
-4627:2:1576
-4628:2:1580
-4629:2:1581
-4630:2:1589
-4631:2:1594
-4632:2:1598
-4633:2:1599
-4634:2:1606
-4635:2:1607
-4636:2:1618
-4637:2:1626
-4638:2:1627
-4639:2:1631
-4640:2:1636
-4641:2:1637
-4642:0:2112
-4643:2:1649
-4644:0:2112
-4645:2:1651
-4646:0:2112
-4647:2:1652
-4648:2:1656
-4649:2:1657
-4650:2:1665
-4651:2:1666
-4652:2:1670
-4653:2:1671
-4654:2:1679
-4655:2:1684
-4656:2:1688
-4657:2:1689
-4658:2:1696
-4659:2:1697
-4660:2:1708
-4661:2:1716
-4662:2:1717
-4663:2:1721
-4664:2:1726
-4665:2:1727
-4666:0:2112
-4667:2:1739
-4668:0:2112
-4669:2:1560
-4670:0:2112
-4671:2:1561
-4672:0:2112
-4673:1:193
-4674:1:197
-4675:1:198
-4676:1:206
-4677:1:207
-4678:1:211
-4679:1:212
-4680:1:220
-4681:1:225
-4682:1:229
-4683:1:230
-4684:1:237
-4685:1:238
-4686:1:249
-4687:1:250
-4688:1:251
-4689:1:262
-4690:1:267
-4691:1:268
-4692:0:2112
-4693:1:280
-4694:0:2112
-4695:2:1562
-4696:2:1566
-4697:2:1567
-4698:2:1575
-4699:2:1576
-4700:2:1580
-4701:2:1581
-4702:2:1589
-4703:2:1594
-4704:2:1598
-4705:2:1599
-4706:2:1606
-4707:2:1607
-4708:2:1618
-4709:2:1626
-4710:2:1627
-4711:2:1631
-4712:2:1636
-4713:2:1637
-4714:0:2112
-4715:2:1649
-4716:0:2112
-4717:2:1651
-4718:0:2112
-4719:2:1652
-4720:2:1656
-4721:2:1657
-4722:2:1665
-4723:2:1666
-4724:2:1670
-4725:2:1671
-4726:2:1679
-4727:2:1684
-4728:2:1688
-4729:2:1689
-4730:2:1696
-4731:2:1697
-4732:2:1708
-4733:2:1716
-4734:2:1717
-4735:2:1721
-4736:2:1726
-4737:2:1727
-4738:0:2112
-4739:2:1739
-4740:0:2112
-4741:2:1560
-4742:0:2112
-4743:2:1561
-4744:0:2112
-4745:1:282
-4746:0:2112
-4747:1:291
-4748:0:2112
-4749:1:293
-4750:0:2112
-4751:1:11
-4752:0:2112
-4753:2:1562
-4754:2:1566
-4755:2:1567
-4756:2:1575
-4757:2:1576
-4758:2:1580
-4759:2:1581
-4760:2:1589
-4761:2:1594
-4762:2:1598
-4763:2:1599
-4764:2:1606
-4765:2:1607
-4766:2:1618
-4767:2:1626
-4768:2:1627
-4769:2:1631
-4770:2:1636
-4771:2:1637
-4772:0:2112
-4773:2:1649
-4774:0:2112
-4775:2:1651
-4776:0:2112
-4777:2:1652
-4778:2:1656
-4779:2:1657
-4780:2:1665
-4781:2:1666
-4782:2:1670
-4783:2:1671
-4784:2:1679
-4785:2:1684
-4786:2:1688
-4787:2:1689
-4788:2:1696
-4789:2:1697
-4790:2:1708
-4791:2:1716
-4792:2:1717
-4793:2:1721
-4794:2:1726
-4795:2:1727
-4796:0:2112
-4797:2:1739
-4798:0:2112
-4799:2:1560
-4800:0:2112
-4801:2:1561
-4802:0:2112
-4803:1:12
-4804:1:16
-4805:1:17
-4806:1:25
-4807:1:26
-4808:1:27
-4809:1:39
-4810:1:44
-4811:1:48
-4812:1:49
-4813:1:56
-4814:1:57
-4815:1:68
-4816:1:69
-4817:1:70
-4818:1:81
-4819:1:86
-4820:1:87
diff --git a/formal-model/urcu/result-standard-execution-nonest/DEFINES b/formal-model/urcu/result-standard-execution-nonest/DEFINES
deleted file mode 100644 (file)
index 5d5147e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
diff --git a/formal-model/urcu/result-standard-execution-nonest/Makefile b/formal-model/urcu/result-standard-execution-nonest/Makefile
deleted file mode 100644 (file)
index 8af320d..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) Mathieu Desnoyers, 2009
-#
-# Authors: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-#CFLAGS=-DSAFETY
-#for multi-core verif, 15.5GB shared mem, use files if full
-#CFLAGS=-DHASH64 -DMEMLIM=15500 -DNCORE=2
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88 -DMEMLIM=15500 -DNCORE=8
-
-#liveness
-#CFLAGS=-DHASH64 -DCOLLAPSE -DMA=88
-CFLAGS=-DHASH64
-
-SPINFILE=urcu.spin
-
-default:
-       make urcu_free | tee urcu_free.log
-       #nested useless with signal test.
-       #make urcu_free_nested | tee urcu_free_nested.log
-       make urcu_free_no_rmb | tee urcu_free_no_rmb.log
-       make urcu_free_no_wmb | tee urcu_free_no_wmb.log
-       make urcu_free_no_mb | tee urcu_free_no_mb.log
-       make urcu_free_single_flip | tee urcu_free_single_flip.log
-       make urcu_progress_writer | tee urcu_progress_writer.log
-       make urcu_progress_reader | tee urcu_progress_reader.log
-       make urcu_progress_writer_error | tee urcu_progress_writer_error.log
-       make asserts | tee asserts.log
-       make summary
-
-#show trail : spin -v -t -N pan.ltl input.spin
-# after each individual make.
-
-summary:
-       @echo
-       @echo "Verification summary"
-       @grep errors: *.log
-
-asserts: clean
-       cat DEFINES > .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X .input.spin
-       gcc -O2 -w ${CFLAGS} -DSAFETY -o pan pan.c
-       ./pan -v -c1 -X -m10000000 -w20
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free: clean urcu_free_ltl run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested: clean urcu_free_ltl urcu_free_nested_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_nested_define:
-       cp urcu_free_nested.define .input.define
-
-urcu_free_no_rmb: clean urcu_free_ltl urcu_free_no_rmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_rmb_define:
-       cp urcu_free_no_rmb.define .input.define
-
-urcu_free_no_wmb: clean urcu_free_ltl urcu_free_no_wmb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_wmb_define:
-       cp urcu_free_no_wmb.define .input.define
-
-urcu_free_no_mb: clean urcu_free_ltl urcu_free_no_mb_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_no_mb_define:
-       cp urcu_free_no_mb.define .input.define
-
-urcu_free_single_flip: clean urcu_free_ltl urcu_free_single_flip_define run
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_free_single_flip_define:
-       cp urcu_free_single_flip.define .input.define
-
-urcu_free_ltl:
-       touch .input.define
-       cat .input.define >> pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-
-# Progress checks
-
-urcu_progress_writer: clean urcu_progress_writer_ltl \
-               urcu_progress_writer_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_define:
-       cp urcu_progress_writer.define .input.define
-
-urcu_progress_writer_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_reader: clean urcu_progress_reader_ltl \
-               urcu_progress_reader_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_reader_define:
-       cp urcu_progress_reader.define .input.define
-
-urcu_progress_reader_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-urcu_progress_writer_error: clean urcu_progress_writer_error_ltl \
-               urcu_progress_writer_error_define run_weak_fair
-       cp .input.spin $@.spin.input
-       -cp .input.spin.trail $@.spin.input.trail
-
-urcu_progress_writer_error_define:
-       cp urcu_progress_writer_error.define .input.define
-
-urcu_progress_writer_error_ltl:
-       touch .input.define
-       cat .input.define > pan.ltl
-       cat DEFINES >> pan.ltl
-       spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-
-
-run_weak_fair: pan
-       ./pan -a -f -v -c1 -X -m10000000 -w20
-
-run: pan
-       ./pan -a -v -c1 -X -m10000000 -w20
-
-pan: pan.c
-       gcc -O2 -w ${CFLAGS} -o pan pan.c
-
-pan.c: pan.ltl ${SPINFILE}
-       cat .input.define > .input.spin
-       cat DEFINES >> .input.spin
-       cat ${SPINFILE} >> .input.spin
-       rm -f .input.spin.trail
-       spin -a -X -N pan.ltl .input.spin
-
-.PHONY: clean default distclean summary
-clean:
-       rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-distclean:
-       rm -f *.trail *.input *.log
diff --git a/formal-model/urcu/result-standard-execution-nonest/asserts.log b/formal-model/urcu/result-standard-execution-nonest/asserts.log
deleted file mode 100644 (file)
index 1071a7a..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-cat DEFINES > .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w20
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             - (none specified)
-       assertion violations    +
-       cycle checks            - (disabled by -DSAFETY)
-       invalid end states      +
-
-State-vector 48 byte, depth reached 2084, errors: 0
-   847558 states, stored
-  9221089 states, matched
- 10068647 transitions (= stored+matched)
- 36786866 atomic steps
-hash conflicts:   2126850 (resolved)
-
-Stats on memory usage (in Megabytes):
-   61.430      equivalent memory usage for states (stored*(State-vector + overhead))
-   45.632      actual memory usage for states (compression: 74.28%)
-               state-vector as stored = 28 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  511.369      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, ".input.spin", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 61, "(1)"
-       line 417, ".input.spin", state 91, "(1)"
-       line 398, ".input.spin", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 151, "(1)"
-       line 417, ".input.spin", state 181, "(1)"
-       line 398, ".input.spin", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 242, "(1)"
-       line 417, ".input.spin", state 272, "(1)"
-       line 398, ".input.spin", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 360, "(1)"
-       line 417, ".input.spin", state 390, "(1)"
-       line 539, ".input.spin", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 398, ".input.spin", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 59, "(1)"
-       line 412, ".input.spin", state 72, "(1)"
-       line 417, ".input.spin", state 89, "(1)"
-       line 398, ".input.spin", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 153, "(1)"
-       line 412, ".input.spin", state 166, "(1)"
-       line 651, ".input.spin", state 199, "(1)"
-       line 174, ".input.spin", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 240, "(1)"
-       line 163, ".input.spin", state 248, "(1)"
-       line 167, ".input.spin", state 260, "(1)"
-       line 174, ".input.spin", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 303, "(1)"
-       line 163, ".input.spin", state 311, "(1)"
-       line 167, ".input.spin", state 323, "(1)"
-       line 174, ".input.spin", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 370, "(1)"
-       line 163, ".input.spin", state 378, "(1)"
-       line 167, ".input.spin", state 390, "(1)"
-       line 398, ".input.spin", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 449, "(1)"
-       line 412, ".input.spin", state 462, "(1)"
-       line 417, ".input.spin", state 479, "(1)"
-       line 398, ".input.spin", state 498, "(1)"
-       line 402, ".input.spin", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 554, "(1)"
-       line 417, ".input.spin", state 571, "(1)"
-       line 402, ".input.spin", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 647, "(1)"
-       line 417, ".input.spin", state 664, "(1)"
-       line 178, ".input.spin", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 710, "(1)"
-       line 163, ".input.spin", state 718, "(1)"
-       line 167, ".input.spin", state 730, "(1)"
-       line 174, ".input.spin", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 773, "(1)"
-       line 163, ".input.spin", state 781, "(1)"
-       line 167, ".input.spin", state 793, "(1)"
-       line 174, ".input.spin", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 840, "(1)"
-       line 163, ".input.spin", state 848, "(1)"
-       line 167, ".input.spin", state 860, "(1)"
-       line 398, ".input.spin", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, ".input.spin", state 884, "(1)"
-       line 398, ".input.spin", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, ".input.spin", state 885, "else"
-       line 398, ".input.spin", state 888, "(1)"
-       line 402, ".input.spin", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 898, "(1)"
-       line 402, ".input.spin", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, ".input.spin", state 899, "else"
-       line 402, ".input.spin", state 902, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 402, ".input.spin", state 903, "(1)"
-       line 400, ".input.spin", state 908, "((i<1))"
-       line 400, ".input.spin", state 908, "((i>=1))"
-       line 407, ".input.spin", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 927, "(1)"
-       line 408, ".input.spin", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, ".input.spin", state 928, "else"
-       line 408, ".input.spin", state 931, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 408, ".input.spin", state 932, "(1)"
-       line 412, ".input.spin", state 940, "(1)"
-       line 412, ".input.spin", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, ".input.spin", state 941, "else"
-       line 412, ".input.spin", state 944, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 412, ".input.spin", state 945, "(1)"
-       line 410, ".input.spin", state 950, "((i<1))"
-       line 410, ".input.spin", state 950, "((i>=1))"
-       line 417, ".input.spin", state 957, "(1)"
-       line 417, ".input.spin", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, ".input.spin", state 958, "else"
-       line 417, ".input.spin", state 961, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 417, ".input.spin", state 962, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 419, ".input.spin", state 965, "(1)"
-       line 402, ".input.spin", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1040, "(1)"
-       line 417, ".input.spin", state 1057, "(1)"
-       line 402, ".input.spin", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1130, "(1)"
-       line 417, ".input.spin", state 1147, "(1)"
-       line 398, ".input.spin", state 1166, "(1)"
-       line 402, ".input.spin", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1222, "(1)"
-       line 417, ".input.spin", state 1239, "(1)"
-       line 402, ".input.spin", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, ".input.spin", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, ".input.spin", state 1315, "(1)"
-       line 417, ".input.spin", state 1332, "(1)"
-       line 178, ".input.spin", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1378, "(1)"
-       line 163, ".input.spin", state 1386, "(1)"
-       line 167, ".input.spin", state 1398, "(1)"
-       line 174, ".input.spin", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1441, "(1)"
-       line 163, ".input.spin", state 1449, "(1)"
-       line 167, ".input.spin", state 1461, "(1)"
-       line 174, ".input.spin", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1508, "(1)"
-       line 163, ".input.spin", state 1516, "(1)"
-       line 167, ".input.spin", state 1528, "(1)"
-       line 398, ".input.spin", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, ".input.spin", state 1552, "(1)"
-       line 398, ".input.spin", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, ".input.spin", state 1553, "else"
-       line 398, ".input.spin", state 1556, "(1)"
-       line 402, ".input.spin", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, ".input.spin", state 1566, "(1)"
-       line 402, ".input.spin", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, ".input.spin", state 1567, "else"
-       line 402, ".input.spin", state 1570, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 402, ".input.spin", state 1571, "(1)"
-       line 400, ".input.spin", state 1576, "((i<1))"
-       line 400, ".input.spin", state 1576, "((i>=1))"
-       line 407, ".input.spin", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, ".input.spin", state 1595, "(1)"
-       line 408, ".input.spin", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, ".input.spin", state 1596, "else"
-       line 408, ".input.spin", state 1599, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 408, ".input.spin", state 1600, "(1)"
-       line 412, ".input.spin", state 1608, "(1)"
-       line 412, ".input.spin", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, ".input.spin", state 1609, "else"
-       line 412, ".input.spin", state 1612, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 412, ".input.spin", state 1613, "(1)"
-       line 410, ".input.spin", state 1618, "((i<1))"
-       line 410, ".input.spin", state 1618, "((i>=1))"
-       line 417, ".input.spin", state 1625, "(1)"
-       line 417, ".input.spin", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, ".input.spin", state 1626, "else"
-       line 417, ".input.spin", state 1629, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 417, ".input.spin", state 1630, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 419, ".input.spin", state 1633, "(1)"
-       line 178, ".input.spin", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1681, "(1)"
-       line 163, ".input.spin", state 1689, "(1)"
-       line 167, ".input.spin", state 1701, "(1)"
-       line 174, ".input.spin", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, ".input.spin", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, ".input.spin", state 1744, "(1)"
-       line 163, ".input.spin", state 1752, "(1)"
-       line 167, ".input.spin", state 1764, "(1)"
-       line 174, ".input.spin", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, ".input.spin", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, ".input.spin", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, ".input.spin", state 1811, "(1)"
-       line 163, ".input.spin", state 1819, "(1)"
-       line 167, ".input.spin", state 1831, "(1)"
-       line 701, ".input.spin", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-
-pan: elapsed time 6.68 seconds
-pan: rate 126879.94 states/second
-pan: avg transition delay 6.6345e-07 usec
-cp .input.spin asserts.spin.input
-cp .input.spin.trail asserts.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/asserts.spin.input b/formal-model/urcu/result-standard-execution-nonest/asserts.spin.input
deleted file mode 100644 (file)
index e17e80e..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/asserts.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/asserts.spin.input.trail
deleted file mode 100644 (file)
index 287e52a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--4:-4:-4
-1:0:2673
-2:0:2674
-3:0:2675
-4:0:2676
-5:4:1129
diff --git a/formal-model/urcu/result-standard-execution-nonest/references.txt b/formal-model/urcu/result-standard-execution-nonest/references.txt
deleted file mode 100644 (file)
index 72c67a2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-http://spinroot.com/spin/Man/ltl.html
-http://en.wikipedia.org/wiki/Linear_temporal_logic
-http://www.dcs.gla.ac.uk/~muffy/MRS4-2002/lect11.ppt
-
-http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/index.php
-http://spinroot.com/spin/Man/index.html
-http://spinroot.com/spin/Man/promela.html
-
-LTL vs CTL :
-
-http://spinroot.com/spin/Doc/course/lecture12.pdf p. 9, p. 15, p. 18
-http://www-i2.informatik.rwth-aachen.de/i2/fileadmin/user_upload/documents/Introduction_to_Model_Checking/mc_lec18.pdf
-  (downloaded)
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu.sh b/formal-model/urcu/result-standard-execution-nonest/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu.spin b/formal-model/urcu/result-standard-execution-nonest/urcu.spin
deleted file mode 100644 (file)
index 2cfcb70..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free.log b/formal-model/urcu/result-standard-execution-nonest/urcu_free.log
deleted file mode 100644 (file)
index 00b1f6c..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 743)
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 2560, errors: 0
-   954166 states, stored
- 10460008 states, matched
- 11414174 transitions (= stored+matched)
- 41707752 atomic steps
-hash conflicts:   2907736 (resolved)
-
-Stats on memory usage (in Megabytes):
-   76.437      equivalent memory usage for states (stored*(State-vector + overhead))
-   58.605      actual memory usage for states (compression: 76.67%)
-               state-vector as stored = 36 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  524.358      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 398, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 61, "(1)"
-       line 417, "pan.___", state 91, "(1)"
-       line 398, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 151, "(1)"
-       line 417, "pan.___", state 181, "(1)"
-       line 398, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 242, "(1)"
-       line 417, "pan.___", state 272, "(1)"
-       line 398, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 360, "(1)"
-       line 417, "pan.___", state 390, "(1)"
-       line 539, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 398, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 59, "(1)"
-       line 412, "pan.___", state 72, "(1)"
-       line 417, "pan.___", state 89, "(1)"
-       line 398, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 153, "(1)"
-       line 412, "pan.___", state 166, "(1)"
-       line 651, "pan.___", state 199, "(1)"
-       line 174, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 240, "(1)"
-       line 163, "pan.___", state 248, "(1)"
-       line 167, "pan.___", state 260, "(1)"
-       line 174, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 303, "(1)"
-       line 163, "pan.___", state 311, "(1)"
-       line 167, "pan.___", state 323, "(1)"
-       line 174, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 370, "(1)"
-       line 163, "pan.___", state 378, "(1)"
-       line 167, "pan.___", state 390, "(1)"
-       line 398, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 449, "(1)"
-       line 412, "pan.___", state 462, "(1)"
-       line 417, "pan.___", state 479, "(1)"
-       line 398, "pan.___", state 498, "(1)"
-       line 402, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 554, "(1)"
-       line 417, "pan.___", state 571, "(1)"
-       line 402, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 647, "(1)"
-       line 417, "pan.___", state 664, "(1)"
-       line 178, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 710, "(1)"
-       line 163, "pan.___", state 718, "(1)"
-       line 167, "pan.___", state 730, "(1)"
-       line 174, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 773, "(1)"
-       line 163, "pan.___", state 781, "(1)"
-       line 167, "pan.___", state 793, "(1)"
-       line 174, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 840, "(1)"
-       line 163, "pan.___", state 848, "(1)"
-       line 167, "pan.___", state 860, "(1)"
-       line 398, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, "pan.___", state 884, "(1)"
-       line 398, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, "pan.___", state 885, "else"
-       line 398, "pan.___", state 888, "(1)"
-       line 402, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, "pan.___", state 899, "else"
-       line 402, "pan.___", state 902, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 402, "pan.___", state 903, "(1)"
-       line 400, "pan.___", state 908, "((i<1))"
-       line 400, "pan.___", state 908, "((i>=1))"
-       line 407, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 927, "(1)"
-       line 408, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, "pan.___", state 928, "else"
-       line 408, "pan.___", state 931, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 408, "pan.___", state 932, "(1)"
-       line 412, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, "pan.___", state 941, "else"
-       line 412, "pan.___", state 944, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 412, "pan.___", state 945, "(1)"
-       line 410, "pan.___", state 950, "((i<1))"
-       line 410, "pan.___", state 950, "((i>=1))"
-       line 417, "pan.___", state 957, "(1)"
-       line 417, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, "pan.___", state 958, "else"
-       line 417, "pan.___", state 961, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 417, "pan.___", state 962, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 419, "pan.___", state 965, "(1)"
-       line 402, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1040, "(1)"
-       line 417, "pan.___", state 1057, "(1)"
-       line 402, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1130, "(1)"
-       line 417, "pan.___", state 1147, "(1)"
-       line 398, "pan.___", state 1166, "(1)"
-       line 402, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1222, "(1)"
-       line 417, "pan.___", state 1239, "(1)"
-       line 402, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 407, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 412, "pan.___", state 1315, "(1)"
-       line 417, "pan.___", state 1332, "(1)"
-       line 178, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1378, "(1)"
-       line 163, "pan.___", state 1386, "(1)"
-       line 167, "pan.___", state 1398, "(1)"
-       line 174, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1441, "(1)"
-       line 163, "pan.___", state 1449, "(1)"
-       line 167, "pan.___", state 1461, "(1)"
-       line 174, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1508, "(1)"
-       line 163, "pan.___", state 1516, "(1)"
-       line 167, "pan.___", state 1528, "(1)"
-       line 398, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 398, "pan.___", state 1552, "(1)"
-       line 398, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 398, "pan.___", state 1553, "else"
-       line 398, "pan.___", state 1556, "(1)"
-       line 402, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 402, "pan.___", state 1566, "(1)"
-       line 402, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 402, "pan.___", state 1567, "else"
-       line 402, "pan.___", state 1570, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 402, "pan.___", state 1571, "(1)"
-       line 400, "pan.___", state 1576, "((i<1))"
-       line 400, "pan.___", state 1576, "((i>=1))"
-       line 407, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1595, "(1)"
-       line 408, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 408, "pan.___", state 1596, "else"
-       line 408, "pan.___", state 1599, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 408, "pan.___", state 1600, "(1)"
-       line 412, "pan.___", state 1608, "(1)"
-       line 412, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 412, "pan.___", state 1609, "else"
-       line 412, "pan.___", state 1612, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 412, "pan.___", state 1613, "(1)"
-       line 410, "pan.___", state 1618, "((i<1))"
-       line 410, "pan.___", state 1618, "((i>=1))"
-       line 417, "pan.___", state 1625, "(1)"
-       line 417, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 417, "pan.___", state 1626, "else"
-       line 417, "pan.___", state 1629, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 417, "pan.___", state 1630, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 419, "pan.___", state 1633, "(1)"
-       line 178, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1681, "(1)"
-       line 163, "pan.___", state 1689, "(1)"
-       line 167, "pan.___", state 1701, "(1)"
-       line 174, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 182, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 159, "pan.___", state 1744, "(1)"
-       line 163, "pan.___", state 1752, "(1)"
-       line 167, "pan.___", state 1764, "(1)"
-       line 174, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 182, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 159, "pan.___", state 1811, "(1)"
-       line 163, "pan.___", state 1819, "(1)"
-       line 167, "pan.___", state 1831, "(1)"
-       line 701, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 748, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 9.16 seconds
-pan: rate 104166.59 states/second
-pan: avg transition delay 8.0251e-07 usec
-cp .input.spin urcu_free.spin.input
-cp .input.spin.trail urcu_free.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free.ltl b/formal-model/urcu/result-standard-execution-nonest/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_free.spin.input
deleted file mode 100644 (file)
index e17e80e..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_free.spin.input.trail
deleted file mode 100644 (file)
index 837f3d9..0000000
+++ /dev/null
@@ -1,15043 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1180
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1181
-243:2:1185
-244:2:1186
-245:2:1194
-246:2:1195
-247:2:1199
-248:2:1200
-249:2:1194
-250:2:1195
-251:2:1196
-252:2:1208
-253:2:1213
-254:2:1217
-255:2:1218
-256:2:1225
-257:2:1226
-258:2:1237
-259:2:1238
-260:2:1239
-261:2:1237
-262:2:1238
-263:2:1239
-264:2:1250
-265:2:1255
-266:2:1256
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1268
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1270
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1271
-279:2:1275
-280:2:1276
-281:2:1284
-282:2:1285
-283:2:1289
-284:2:1290
-285:2:1284
-286:2:1285
-287:2:1289
-288:2:1290
-289:2:1298
-290:2:1303
-291:2:1307
-292:2:1308
-293:2:1315
-294:2:1316
-295:2:1327
-296:2:1328
-297:2:1329
-298:2:1327
-299:2:1328
-300:2:1329
-301:2:1340
-302:2:1345
-303:2:1346
-304:0:4365
-305:2:1358
-306:0:4365
-307:2:1454
-308:0:4365
-309:3:2528
-310:0:4365
-311:2:1455
-312:0:4365
-313:3:2529
-314:0:4365
-315:2:1652
-316:0:4365
-317:2:1653
-318:0:4365
-319:2:1657
-320:0:4365
-321:2:1660
-322:0:4365
-323:3:2528
-324:0:4365
-325:2:1665
-326:2:1669
-327:2:1670
-328:2:1678
-329:2:1679
-330:2:1683
-331:2:1684
-332:2:1678
-333:2:1679
-334:2:1680
-335:2:1692
-336:2:1697
-337:2:1701
-338:2:1702
-339:2:1709
-340:2:1710
-341:2:1721
-342:2:1722
-343:2:1723
-344:2:1721
-345:2:1722
-346:2:1723
-347:2:1734
-348:2:1739
-349:2:1740
-350:0:4365
-351:3:2529
-352:0:4365
-353:2:1752
-354:0:4365
-355:3:2528
-356:0:4365
-357:2:1754
-358:0:4365
-359:3:2529
-360:0:4365
-361:2:1755
-362:2:1759
-363:2:1760
-364:2:1768
-365:2:1769
-366:2:1773
-367:2:1774
-368:2:1768
-369:2:1769
-370:2:1773
-371:2:1774
-372:2:1782
-373:2:1787
-374:2:1791
-375:2:1792
-376:2:1799
-377:2:1800
-378:2:1811
-379:2:1812
-380:2:1813
-381:2:1811
-382:2:1812
-383:2:1813
-384:2:1824
-385:2:1829
-386:2:1830
-387:0:4365
-388:2:1842
-389:0:4365
-390:3:2528
-391:0:4365
-392:2:1844
-393:0:4365
-394:3:2529
-395:0:4365
-396:2:1845
-397:2:1849
-398:2:1850
-399:2:1858
-400:2:1859
-401:2:1863
-402:2:1864
-403:2:1858
-404:2:1859
-405:2:1863
-406:2:1864
-407:2:1872
-408:2:1877
-409:2:1881
-410:2:1882
-411:2:1889
-412:2:1890
-413:2:1901
-414:2:1902
-415:2:1903
-416:2:1901
-417:2:1902
-418:2:1903
-419:2:1914
-420:2:1919
-421:2:1920
-422:0:4365
-423:2:1932
-424:0:4365
-425:3:2528
-426:0:4365
-427:2:1934
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:1935
-432:0:4365
-433:2:1936
-434:0:4365
-435:2:2129
-436:0:4365
-437:2:2130
-438:0:4365
-439:2:2134
-440:0:4365
-441:3:2528
-442:0:4365
-443:2:2136
-444:0:4365
-445:3:2529
-446:0:4365
-447:2:2137
-448:2:2141
-449:2:2142
-450:2:2150
-451:2:2151
-452:2:2155
-453:2:2156
-454:2:2150
-455:2:2151
-456:2:2155
-457:2:2156
-458:2:2164
-459:2:2169
-460:2:2173
-461:2:2174
-462:2:2181
-463:2:2182
-464:2:2193
-465:2:2194
-466:2:2195
-467:2:2193
-468:2:2194
-469:2:2195
-470:2:2206
-471:2:2211
-472:2:2212
-473:0:4365
-474:2:2224
-475:0:4365
-476:3:2528
-477:0:4365
-478:2:2226
-479:0:4365
-480:3:2529
-481:0:4365
-482:2:1936
-483:0:4365
-484:2:2129
-485:0:4365
-486:2:2130
-487:0:4365
-488:2:2134
-489:0:4365
-490:3:2528
-491:0:4365
-492:2:2136
-493:0:4365
-494:3:2529
-495:0:4365
-496:2:2137
-497:2:2141
-498:2:2142
-499:2:2150
-500:2:2151
-501:2:2155
-502:2:2156
-503:2:2150
-504:2:2151
-505:2:2152
-506:2:2164
-507:2:2169
-508:2:2173
-509:2:2174
-510:2:2181
-511:2:2182
-512:2:2193
-513:2:2194
-514:2:2195
-515:2:2193
-516:2:2194
-517:2:2195
-518:2:2206
-519:2:2211
-520:2:2212
-521:0:4365
-522:2:2224
-523:0:4365
-524:3:2528
-525:0:4365
-526:2:2226
-527:0:4365
-528:3:2529
-529:0:4365
-530:2:2230
-531:0:4365
-532:3:2528
-533:0:4365
-534:2:2235
-535:2:2239
-536:2:2240
-537:2:2248
-538:2:2249
-539:2:2253
-540:2:2254
-541:2:2248
-542:2:2249
-543:2:2250
-544:2:2262
-545:2:2267
-546:2:2271
-547:2:2272
-548:2:2279
-549:2:2280
-550:2:2291
-551:2:2292
-552:2:2293
-553:2:2291
-554:2:2292
-555:2:2293
-556:2:2304
-557:2:2309
-558:2:2310
-559:0:4365
-560:3:2529
-561:0:4365
-562:2:2322
-563:0:4365
-564:2:1169
-565:0:4365
-566:3:2528
-567:0:4365
-568:2:1170
-569:0:4365
-570:3:2529
-571:0:4365
-572:3:2530
-573:0:4365
-574:3:2536
-575:0:4365
-576:3:2537
-577:0:4365
-578:3:2547
-579:0:4365
-580:3:2548
-581:0:4365
-582:3:2552
-583:3:2553
-584:3:2557
-585:3:2561
-586:3:2562
-587:3:2557
-588:3:2561
-589:3:2562
-590:3:2566
-591:3:2574
-592:3:2575
-593:3:2580
-594:3:2587
-595:3:2588
-596:3:2587
-597:3:2588
-598:3:2595
-599:3:2600
-600:0:4365
-601:3:2611
-602:0:4365
-603:3:2615
-604:3:2616
-605:3:2620
-606:3:2624
-607:3:2625
-608:3:2620
-609:3:2624
-610:3:2625
-611:3:2629
-612:3:2637
-613:3:2638
-614:3:2643
-615:3:2650
-616:3:2651
-617:3:2650
-618:3:2651
-619:3:2658
-620:3:2663
-621:0:4365
-622:3:2611
-623:0:4365
-624:3:2615
-625:3:2616
-626:3:2620
-627:3:2624
-628:3:2625
-629:3:2620
-630:3:2624
-631:3:2625
-632:3:2629
-633:3:2637
-634:3:2638
-635:3:2643
-636:3:2650
-637:3:2651
-638:3:2650
-639:3:2651
-640:3:2658
-641:3:2663
-642:0:4365
-643:3:2674
-644:0:4365
-645:3:2682
-646:3:2683
-647:3:2687
-648:3:2691
-649:3:2692
-650:3:2687
-651:3:2691
-652:3:2692
-653:3:2696
-654:3:2704
-655:3:2705
-656:3:2710
-657:3:2717
-658:3:2718
-659:3:2717
-660:3:2718
-661:3:2725
-662:3:2730
-663:0:4365
-664:3:2745
-665:0:4365
-666:3:2746
-667:0:4365
-668:2:1173
-669:0:4365
-670:3:2747
-671:0:4365
-672:2:1179
-673:0:4365
-674:2:1180
-675:0:4365
-676:3:2746
-677:0:4365
-678:2:1181
-679:2:1185
-680:2:1186
-681:2:1194
-682:2:1195
-683:2:1199
-684:2:1200
-685:2:1194
-686:2:1195
-687:2:1199
-688:2:1200
-689:2:1208
-690:2:1213
-691:2:1217
-692:2:1218
-693:2:1225
-694:2:1226
-695:2:1237
-696:2:1238
-697:2:1239
-698:2:1237
-699:2:1238
-700:2:1239
-701:2:1250
-702:2:1255
-703:2:1256
-704:0:4365
-705:3:2747
-706:0:4365
-707:2:1268
-708:0:4365
-709:3:2746
-710:0:4365
-711:2:1270
-712:0:4365
-713:3:2747
-714:0:4365
-715:2:1271
-716:2:1275
-717:2:1276
-718:2:1284
-719:2:1285
-720:2:1289
-721:2:1290
-722:2:1284
-723:2:1285
-724:2:1289
-725:2:1290
-726:2:1298
-727:2:1303
-728:2:1307
-729:2:1308
-730:2:1315
-731:2:1316
-732:2:1327
-733:2:1328
-734:2:1329
-735:2:1327
-736:2:1328
-737:2:1329
-738:2:1340
-739:2:1345
-740:2:1346
-741:0:4365
-742:2:1358
-743:0:4365
-744:2:1360
-745:0:4365
-746:3:2746
-747:0:4365
-748:2:1361
-749:0:4365
-750:3:2747
-751:0:4365
-752:2:1362
-753:2:1366
-754:2:1367
-755:2:1375
-756:2:1376
-757:2:1380
-758:2:1381
-759:2:1375
-760:2:1376
-761:2:1380
-762:2:1381
-763:2:1389
-764:2:1394
-765:2:1398
-766:2:1399
-767:2:1406
-768:2:1407
-769:2:1418
-770:2:1419
-771:2:1420
-772:2:1418
-773:2:1419
-774:2:1420
-775:2:1431
-776:2:1436
-777:2:1437
-778:0:4365
-779:2:1449
-780:0:4365
-781:3:2746
-782:0:4365
-783:2:1451
-784:0:4365
-785:3:2747
-786:0:4365
-787:2:1652
-788:0:4365
-789:2:1653
-790:0:4365
-791:2:1657
-792:0:4365
-793:2:1180
-794:0:4365
-795:3:2746
-796:0:4365
-797:2:1181
-798:2:1185
-799:2:1186
-800:2:1194
-801:2:1195
-802:2:1199
-803:2:1200
-804:2:1194
-805:2:1195
-806:2:1196
-807:2:1208
-808:2:1213
-809:2:1217
-810:2:1218
-811:2:1225
-812:2:1226
-813:2:1237
-814:2:1238
-815:2:1239
-816:2:1237
-817:2:1238
-818:2:1239
-819:2:1250
-820:2:1255
-821:2:1256
-822:0:4365
-823:3:2747
-824:0:4365
-825:2:1268
-826:0:4365
-827:3:2746
-828:0:4365
-829:2:1270
-830:0:4365
-831:3:2747
-832:0:4365
-833:2:1271
-834:2:1275
-835:2:1276
-836:2:1284
-837:2:1285
-838:2:1289
-839:2:1290
-840:2:1284
-841:2:1285
-842:2:1289
-843:2:1290
-844:2:1298
-845:2:1303
-846:2:1307
-847:2:1308
-848:2:1315
-849:2:1316
-850:2:1327
-851:2:1328
-852:2:1329
-853:2:1327
-854:2:1328
-855:2:1329
-856:2:1340
-857:2:1345
-858:2:1346
-859:0:4365
-860:2:1358
-861:0:4365
-862:2:1454
-863:0:4365
-864:3:2746
-865:0:4365
-866:2:1455
-867:0:4365
-868:3:2747
-869:0:4365
-870:2:1652
-871:0:4365
-872:2:1653
-873:0:4365
-874:2:1657
-875:0:4365
-876:2:1660
-877:0:4365
-878:3:2746
-879:0:4365
-880:2:1665
-881:2:1669
-882:2:1670
-883:2:1678
-884:2:1679
-885:2:1683
-886:2:1684
-887:2:1678
-888:2:1679
-889:2:1680
-890:2:1692
-891:2:1697
-892:2:1701
-893:2:1702
-894:2:1709
-895:2:1710
-896:2:1721
-897:2:1722
-898:2:1723
-899:2:1721
-900:2:1722
-901:2:1723
-902:2:1734
-903:2:1739
-904:2:1740
-905:0:4365
-906:3:2747
-907:0:4365
-908:2:1752
-909:0:4365
-910:3:2746
-911:0:4365
-912:2:1754
-913:0:4365
-914:3:2747
-915:0:4365
-916:2:1755
-917:2:1759
-918:2:1760
-919:2:1768
-920:2:1769
-921:2:1773
-922:2:1774
-923:2:1768
-924:2:1769
-925:2:1773
-926:2:1774
-927:2:1782
-928:2:1787
-929:2:1791
-930:2:1792
-931:2:1799
-932:2:1800
-933:2:1811
-934:2:1812
-935:2:1813
-936:2:1811
-937:2:1812
-938:2:1813
-939:2:1824
-940:2:1829
-941:2:1830
-942:0:4365
-943:2:1842
-944:0:4365
-945:3:2746
-946:0:4365
-947:2:1844
-948:0:4365
-949:3:2747
-950:0:4365
-951:2:1845
-952:2:1849
-953:2:1850
-954:2:1858
-955:2:1859
-956:2:1863
-957:2:1864
-958:2:1858
-959:2:1859
-960:2:1863
-961:2:1864
-962:2:1872
-963:2:1877
-964:2:1881
-965:2:1882
-966:2:1889
-967:2:1890
-968:2:1901
-969:2:1902
-970:2:1903
-971:2:1901
-972:2:1902
-973:2:1903
-974:2:1914
-975:2:1919
-976:2:1920
-977:0:4365
-978:2:1932
-979:0:4365
-980:3:2746
-981:0:4365
-982:2:1934
-983:0:4365
-984:3:2747
-985:0:4365
-986:2:1935
-987:0:4365
-988:2:1936
-989:0:4365
-990:2:2129
-991:0:4365
-992:2:2130
-993:0:4365
-994:2:2134
-995:0:4365
-996:3:2746
-997:0:4365
-998:2:2136
-999:0:4365
-1000:3:2747
-1001:0:4365
-1002:2:2137
-1003:2:2141
-1004:2:2142
-1005:2:2150
-1006:2:2151
-1007:2:2155
-1008:2:2156
-1009:2:2150
-1010:2:2151
-1011:2:2155
-1012:2:2156
-1013:2:2164
-1014:2:2169
-1015:2:2173
-1016:2:2174
-1017:2:2181
-1018:2:2182
-1019:2:2193
-1020:2:2194
-1021:2:2195
-1022:2:2193
-1023:2:2194
-1024:2:2195
-1025:2:2206
-1026:2:2211
-1027:2:2212
-1028:0:4365
-1029:2:2224
-1030:0:4365
-1031:3:2746
-1032:0:4365
-1033:2:2226
-1034:0:4365
-1035:3:2747
-1036:0:4365
-1037:2:1936
-1038:0:4365
-1039:2:2129
-1040:0:4365
-1041:2:2130
-1042:0:4365
-1043:2:2134
-1044:0:4365
-1045:3:2746
-1046:0:4365
-1047:2:2136
-1048:0:4365
-1049:3:2747
-1050:0:4365
-1051:2:2137
-1052:2:2141
-1053:2:2142
-1054:2:2150
-1055:2:2151
-1056:2:2155
-1057:2:2156
-1058:2:2150
-1059:2:2151
-1060:2:2152
-1061:2:2164
-1062:2:2169
-1063:2:2173
-1064:2:2174
-1065:2:2181
-1066:2:2182
-1067:2:2193
-1068:2:2194
-1069:2:2195
-1070:2:2193
-1071:2:2194
-1072:2:2195
-1073:2:2206
-1074:2:2211
-1075:2:2212
-1076:0:4365
-1077:2:2224
-1078:0:4365
-1079:3:2746
-1080:0:4365
-1081:2:2226
-1082:0:4365
-1083:3:2747
-1084:0:4365
-1085:2:2230
-1086:0:4365
-1087:3:2746
-1088:0:4365
-1089:2:2235
-1090:2:2239
-1091:2:2240
-1092:2:2248
-1093:2:2249
-1094:2:2253
-1095:2:2254
-1096:2:2248
-1097:2:2249
-1098:2:2250
-1099:2:2262
-1100:2:2267
-1101:2:2271
-1102:2:2272
-1103:2:2279
-1104:2:2280
-1105:2:2291
-1106:2:2292
-1107:2:2293
-1108:2:2291
-1109:2:2292
-1110:2:2293
-1111:2:2304
-1112:2:2309
-1113:2:2310
-1114:0:4365
-1115:3:2747
-1116:0:4365
-1117:2:2322
-1118:0:4365
-1119:2:1169
-1120:0:4365
-1121:3:2746
-1122:0:4365
-1123:2:1170
-1124:0:4365
-1125:3:2747
-1126:0:4365
-1127:3:2748
-1128:0:4365
-1129:3:2754
-1130:0:4365
-1131:3:2755
-1132:3:2759
-1133:3:2760
-1134:3:2768
-1135:3:2769
-1136:3:2773
-1137:3:2774
-1138:3:2768
-1139:3:2769
-1140:3:2773
-1141:3:2774
-1142:3:2782
-1143:3:2787
-1144:3:2791
-1145:3:2792
-1146:3:2799
-1147:3:2800
-1148:3:2811
-1149:3:2812
-1150:3:2813
-1151:3:2811
-1152:3:2812
-1153:3:2813
-1154:3:2824
-1155:3:2829
-1156:3:2830
-1157:0:4365
-1158:3:2842
-1159:0:4365
-1160:3:2843
-1161:0:4365
-1162:2:1173
-1163:0:4365
-1164:3:2844
-1165:0:4365
-1166:2:1179
-1167:0:4365
-1168:2:1180
-1169:0:4365
-1170:3:2843
-1171:0:4365
-1172:2:1181
-1173:2:1185
-1174:2:1186
-1175:2:1194
-1176:2:1195
-1177:2:1199
-1178:2:1200
-1179:2:1194
-1180:2:1195
-1181:2:1199
-1182:2:1200
-1183:2:1208
-1184:2:1213
-1185:2:1217
-1186:2:1218
-1187:2:1225
-1188:2:1226
-1189:2:1237
-1190:2:1238
-1191:2:1239
-1192:2:1237
-1193:2:1238
-1194:2:1239
-1195:2:1250
-1196:2:1255
-1197:2:1256
-1198:0:4365
-1199:3:2844
-1200:0:4365
-1201:2:1268
-1202:0:4365
-1203:3:2843
-1204:0:4365
-1205:2:1270
-1206:0:4365
-1207:3:2844
-1208:0:4365
-1209:2:1271
-1210:2:1275
-1211:2:1276
-1212:2:1284
-1213:2:1285
-1214:2:1289
-1215:2:1290
-1216:2:1284
-1217:2:1285
-1218:2:1289
-1219:2:1290
-1220:2:1298
-1221:2:1303
-1222:2:1307
-1223:2:1308
-1224:2:1315
-1225:2:1316
-1226:2:1327
-1227:2:1328
-1228:2:1329
-1229:2:1327
-1230:2:1328
-1231:2:1329
-1232:2:1340
-1233:2:1345
-1234:2:1346
-1235:0:4365
-1236:2:1358
-1237:0:4365
-1238:2:1360
-1239:0:4365
-1240:3:2843
-1241:0:4365
-1242:2:1361
-1243:0:4365
-1244:3:2844
-1245:0:4365
-1246:2:1362
-1247:2:1366
-1248:2:1367
-1249:2:1375
-1250:2:1376
-1251:2:1380
-1252:2:1381
-1253:2:1375
-1254:2:1376
-1255:2:1380
-1256:2:1381
-1257:2:1389
-1258:2:1394
-1259:2:1398
-1260:2:1399
-1261:2:1406
-1262:2:1407
-1263:2:1418
-1264:2:1419
-1265:2:1420
-1266:2:1418
-1267:2:1419
-1268:2:1420
-1269:2:1431
-1270:2:1436
-1271:2:1437
-1272:0:4365
-1273:2:1449
-1274:0:4365
-1275:3:2843
-1276:0:4365
-1277:2:1451
-1278:0:4365
-1279:3:2844
-1280:0:4365
-1281:2:1652
-1282:0:4365
-1283:2:1653
-1284:0:4365
-1285:2:1657
-1286:0:4365
-1287:2:1180
-1288:0:4365
-1289:3:2843
-1290:0:4365
-1291:2:1181
-1292:2:1185
-1293:2:1186
-1294:2:1194
-1295:2:1195
-1296:2:1199
-1297:2:1200
-1298:2:1194
-1299:2:1195
-1300:2:1196
-1301:2:1208
-1302:2:1213
-1303:2:1217
-1304:2:1218
-1305:2:1225
-1306:2:1226
-1307:2:1237
-1308:2:1238
-1309:2:1239
-1310:2:1237
-1311:2:1238
-1312:2:1239
-1313:2:1250
-1314:2:1255
-1315:2:1256
-1316:0:4365
-1317:3:2844
-1318:0:4365
-1319:2:1268
-1320:0:4365
-1321:3:2843
-1322:0:4365
-1323:2:1270
-1324:0:4365
-1325:3:2844
-1326:0:4365
-1327:2:1271
-1328:2:1275
-1329:2:1276
-1330:2:1284
-1331:2:1285
-1332:2:1289
-1333:2:1290
-1334:2:1284
-1335:2:1285
-1336:2:1289
-1337:2:1290
-1338:2:1298
-1339:2:1303
-1340:2:1307
-1341:2:1308
-1342:2:1315
-1343:2:1316
-1344:2:1327
-1345:2:1328
-1346:2:1329
-1347:2:1327
-1348:2:1328
-1349:2:1329
-1350:2:1340
-1351:2:1345
-1352:2:1346
-1353:0:4365
-1354:2:1358
-1355:0:4365
-1356:2:1454
-1357:0:4365
-1358:3:2843
-1359:0:4365
-1360:2:1455
-1361:0:4365
-1362:3:2844
-1363:0:4365
-1364:2:1652
-1365:0:4365
-1366:2:1653
-1367:0:4365
-1368:2:1657
-1369:0:4365
-1370:2:1660
-1371:0:4365
-1372:3:2843
-1373:0:4365
-1374:2:1665
-1375:2:1669
-1376:2:1670
-1377:2:1678
-1378:2:1679
-1379:2:1683
-1380:2:1684
-1381:2:1678
-1382:2:1679
-1383:2:1680
-1384:2:1692
-1385:2:1697
-1386:2:1701
-1387:2:1702
-1388:2:1709
-1389:2:1710
-1390:2:1721
-1391:2:1722
-1392:2:1723
-1393:2:1721
-1394:2:1722
-1395:2:1723
-1396:2:1734
-1397:2:1739
-1398:2:1740
-1399:0:4365
-1400:3:2844
-1401:0:4365
-1402:2:1752
-1403:0:4365
-1404:3:2843
-1405:0:4365
-1406:2:1754
-1407:0:4365
-1408:3:2844
-1409:0:4365
-1410:2:1755
-1411:2:1759
-1412:2:1760
-1413:2:1768
-1414:2:1769
-1415:2:1773
-1416:2:1774
-1417:2:1768
-1418:2:1769
-1419:2:1773
-1420:2:1774
-1421:2:1782
-1422:2:1787
-1423:2:1791
-1424:2:1792
-1425:2:1799
-1426:2:1800
-1427:2:1811
-1428:2:1812
-1429:2:1813
-1430:2:1811
-1431:2:1812
-1432:2:1813
-1433:2:1824
-1434:2:1829
-1435:2:1830
-1436:0:4365
-1437:2:1842
-1438:0:4365
-1439:3:2843
-1440:0:4365
-1441:2:1844
-1442:0:4365
-1443:3:2844
-1444:0:4365
-1445:2:1845
-1446:2:1849
-1447:2:1850
-1448:2:1858
-1449:2:1859
-1450:2:1863
-1451:2:1864
-1452:2:1858
-1453:2:1859
-1454:2:1863
-1455:2:1864
-1456:2:1872
-1457:2:1877
-1458:2:1881
-1459:2:1882
-1460:2:1889
-1461:2:1890
-1462:2:1901
-1463:2:1902
-1464:2:1903
-1465:2:1901
-1466:2:1902
-1467:2:1903
-1468:2:1914
-1469:2:1919
-1470:2:1920
-1471:0:4365
-1472:2:1932
-1473:0:4365
-1474:3:2843
-1475:0:4365
-1476:2:1934
-1477:0:4365
-1478:3:2844
-1479:0:4365
-1480:2:1935
-1481:0:4365
-1482:2:1936
-1483:0:4365
-1484:2:2129
-1485:0:4365
-1486:2:2130
-1487:0:4365
-1488:2:2134
-1489:0:4365
-1490:3:2843
-1491:0:4365
-1492:2:2136
-1493:0:4365
-1494:3:2844
-1495:0:4365
-1496:2:2137
-1497:2:2141
-1498:2:2142
-1499:2:2150
-1500:2:2151
-1501:2:2155
-1502:2:2156
-1503:2:2150
-1504:2:2151
-1505:2:2155
-1506:2:2156
-1507:2:2164
-1508:2:2169
-1509:2:2173
-1510:2:2174
-1511:2:2181
-1512:2:2182
-1513:2:2193
-1514:2:2194
-1515:2:2195
-1516:2:2193
-1517:2:2194
-1518:2:2195
-1519:2:2206
-1520:2:2211
-1521:2:2212
-1522:0:4365
-1523:2:2224
-1524:0:4365
-1525:3:2843
-1526:0:4365
-1527:2:2226
-1528:0:4365
-1529:3:2844
-1530:0:4365
-1531:2:1936
-1532:0:4365
-1533:2:2129
-1534:0:4365
-1535:2:2130
-1536:0:4365
-1537:2:2134
-1538:0:4365
-1539:3:2843
-1540:0:4365
-1541:2:2136
-1542:0:4365
-1543:3:2844
-1544:0:4365
-1545:2:2137
-1546:2:2141
-1547:2:2142
-1548:2:2150
-1549:2:2151
-1550:2:2155
-1551:2:2156
-1552:2:2150
-1553:2:2151
-1554:2:2152
-1555:2:2164
-1556:2:2169
-1557:2:2173
-1558:2:2174
-1559:2:2181
-1560:2:2182
-1561:2:2193
-1562:2:2194
-1563:2:2195
-1564:2:2193
-1565:2:2194
-1566:2:2195
-1567:2:2206
-1568:2:2211
-1569:2:2212
-1570:0:4365
-1571:2:2224
-1572:0:4365
-1573:3:2843
-1574:0:4365
-1575:2:2226
-1576:0:4365
-1577:3:2844
-1578:0:4365
-1579:2:2230
-1580:0:4365
-1581:3:2843
-1582:0:4365
-1583:2:2235
-1584:2:2239
-1585:2:2240
-1586:2:2248
-1587:2:2249
-1588:2:2253
-1589:2:2254
-1590:2:2248
-1591:2:2249
-1592:2:2250
-1593:2:2262
-1594:2:2267
-1595:2:2271
-1596:2:2272
-1597:2:2279
-1598:2:2280
-1599:2:2291
-1600:2:2292
-1601:2:2293
-1602:2:2291
-1603:2:2292
-1604:2:2293
-1605:2:2304
-1606:2:2309
-1607:2:2310
-1608:0:4365
-1609:3:2844
-1610:0:4365
-1611:2:2322
-1612:0:4365
-1613:2:1169
-1614:0:4365
-1615:3:2843
-1616:0:4365
-1617:2:1170
-1618:0:4365
-1619:3:2844
-1620:0:4365
-1621:3:2845
-1622:0:4365
-1623:3:2851
-1624:0:4365
-1625:3:2854
-1626:3:2855
-1627:3:2867
-1628:3:2868
-1629:3:2872
-1630:3:2873
-1631:3:2867
-1632:3:2868
-1633:3:2872
-1634:3:2873
-1635:3:2881
-1636:3:2886
-1637:3:2890
-1638:3:2891
-1639:3:2898
-1640:3:2899
-1641:3:2910
-1642:3:2911
-1643:3:2912
-1644:3:2910
-1645:3:2911
-1646:3:2912
-1647:3:2923
-1648:3:2928
-1649:3:2929
-1650:0:4365
-1651:3:2941
-1652:0:4365
-1653:3:2942
-1654:0:4365
-1655:2:1173
-1656:0:4365
-1657:3:2943
-1658:0:4365
-1659:2:1179
-1660:0:4365
-1661:2:1180
-1662:0:4365
-1663:3:2942
-1664:0:4365
-1665:2:1181
-1666:2:1185
-1667:2:1186
-1668:2:1194
-1669:2:1195
-1670:2:1199
-1671:2:1200
-1672:2:1194
-1673:2:1195
-1674:2:1199
-1675:2:1200
-1676:2:1208
-1677:2:1213
-1678:2:1217
-1679:2:1218
-1680:2:1225
-1681:2:1226
-1682:2:1237
-1683:2:1238
-1684:2:1239
-1685:2:1237
-1686:2:1238
-1687:2:1239
-1688:2:1250
-1689:2:1255
-1690:2:1256
-1691:0:4365
-1692:3:2943
-1693:0:4365
-1694:2:1268
-1695:0:4365
-1696:3:2942
-1697:0:4365
-1698:2:1270
-1699:0:4365
-1700:3:2943
-1701:0:4365
-1702:2:1271
-1703:2:1275
-1704:2:1276
-1705:2:1284
-1706:2:1285
-1707:2:1289
-1708:2:1290
-1709:2:1284
-1710:2:1285
-1711:2:1289
-1712:2:1290
-1713:2:1298
-1714:2:1303
-1715:2:1307
-1716:2:1308
-1717:2:1315
-1718:2:1316
-1719:2:1327
-1720:2:1328
-1721:2:1329
-1722:2:1327
-1723:2:1328
-1724:2:1329
-1725:2:1340
-1726:2:1345
-1727:2:1346
-1728:0:4365
-1729:2:1358
-1730:0:4365
-1731:2:1360
-1732:0:4365
-1733:3:2942
-1734:0:4365
-1735:2:1361
-1736:0:4365
-1737:3:2943
-1738:0:4365
-1739:2:1362
-1740:2:1366
-1741:2:1367
-1742:2:1375
-1743:2:1376
-1744:2:1380
-1745:2:1381
-1746:2:1375
-1747:2:1376
-1748:2:1380
-1749:2:1381
-1750:2:1389
-1751:2:1394
-1752:2:1398
-1753:2:1399
-1754:2:1406
-1755:2:1407
-1756:2:1418
-1757:2:1419
-1758:2:1420
-1759:2:1418
-1760:2:1419
-1761:2:1420
-1762:2:1431
-1763:2:1436
-1764:2:1437
-1765:0:4365
-1766:2:1449
-1767:0:4365
-1768:3:2942
-1769:0:4365
-1770:2:1451
-1771:0:4365
-1772:3:2943
-1773:0:4365
-1774:2:1652
-1775:0:4365
-1776:2:1653
-1777:0:4365
-1778:2:1657
-1779:0:4365
-1780:2:1180
-1781:0:4365
-1782:3:2942
-1783:0:4365
-1784:2:1181
-1785:2:1185
-1786:2:1186
-1787:2:1194
-1788:2:1195
-1789:2:1199
-1790:2:1200
-1791:2:1194
-1792:2:1195
-1793:2:1196
-1794:2:1208
-1795:2:1213
-1796:2:1217
-1797:2:1218
-1798:2:1225
-1799:2:1226
-1800:2:1237
-1801:2:1238
-1802:2:1239
-1803:2:1237
-1804:2:1238
-1805:2:1239
-1806:2:1250
-1807:2:1255
-1808:2:1256
-1809:0:4365
-1810:3:2943
-1811:0:4365
-1812:2:1268
-1813:0:4365
-1814:3:2942
-1815:0:4365
-1816:2:1270
-1817:0:4365
-1818:3:2943
-1819:0:4365
-1820:2:1271
-1821:2:1275
-1822:2:1276
-1823:2:1284
-1824:2:1285
-1825:2:1289
-1826:2:1290
-1827:2:1284
-1828:2:1285
-1829:2:1289
-1830:2:1290
-1831:2:1298
-1832:2:1303
-1833:2:1307
-1834:2:1308
-1835:2:1315
-1836:2:1316
-1837:2:1327
-1838:2:1328
-1839:2:1329
-1840:2:1327
-1841:2:1328
-1842:2:1329
-1843:2:1340
-1844:2:1345
-1845:2:1346
-1846:0:4365
-1847:2:1358
-1848:0:4365
-1849:2:1454
-1850:0:4365
-1851:3:2942
-1852:0:4365
-1853:2:1455
-1854:0:4365
-1855:3:2943
-1856:0:4365
-1857:2:1652
-1858:0:4365
-1859:2:1653
-1860:0:4365
-1861:2:1657
-1862:0:4365
-1863:2:1660
-1864:0:4365
-1865:3:2942
-1866:0:4365
-1867:2:1665
-1868:2:1669
-1869:2:1670
-1870:2:1678
-1871:2:1679
-1872:2:1683
-1873:2:1684
-1874:2:1678
-1875:2:1679
-1876:2:1680
-1877:2:1692
-1878:2:1697
-1879:2:1701
-1880:2:1702
-1881:2:1709
-1882:2:1710
-1883:2:1721
-1884:2:1722
-1885:2:1723
-1886:2:1721
-1887:2:1722
-1888:2:1723
-1889:2:1734
-1890:2:1739
-1891:2:1740
-1892:0:4365
-1893:3:2943
-1894:0:4365
-1895:2:1752
-1896:0:4365
-1897:3:2942
-1898:0:4365
-1899:2:1754
-1900:0:4365
-1901:3:2943
-1902:0:4365
-1903:2:1755
-1904:2:1759
-1905:2:1760
-1906:2:1768
-1907:2:1769
-1908:2:1773
-1909:2:1774
-1910:2:1768
-1911:2:1769
-1912:2:1773
-1913:2:1774
-1914:2:1782
-1915:2:1787
-1916:2:1791
-1917:2:1792
-1918:2:1799
-1919:2:1800
-1920:2:1811
-1921:2:1812
-1922:2:1813
-1923:2:1811
-1924:2:1812
-1925:2:1813
-1926:2:1824
-1927:2:1829
-1928:2:1830
-1929:0:4365
-1930:2:1842
-1931:0:4365
-1932:3:2942
-1933:0:4365
-1934:2:1844
-1935:0:4365
-1936:3:2943
-1937:0:4365
-1938:2:1845
-1939:2:1849
-1940:2:1850
-1941:2:1858
-1942:2:1859
-1943:2:1863
-1944:2:1864
-1945:2:1858
-1946:2:1859
-1947:2:1863
-1948:2:1864
-1949:2:1872
-1950:2:1877
-1951:2:1881
-1952:2:1882
-1953:2:1889
-1954:2:1890
-1955:2:1901
-1956:2:1902
-1957:2:1903
-1958:2:1901
-1959:2:1902
-1960:2:1903
-1961:2:1914
-1962:2:1919
-1963:2:1920
-1964:0:4365
-1965:2:1932
-1966:0:4365
-1967:3:2942
-1968:0:4365
-1969:2:1934
-1970:0:4365
-1971:3:2943
-1972:0:4365
-1973:2:1935
-1974:0:4365
-1975:2:1936
-1976:0:4365
-1977:2:2129
-1978:0:4365
-1979:2:2130
-1980:0:4365
-1981:2:2134
-1982:0:4365
-1983:3:2942
-1984:0:4365
-1985:2:2136
-1986:0:4365
-1987:3:2943
-1988:0:4365
-1989:2:2137
-1990:2:2141
-1991:2:2142
-1992:2:2150
-1993:2:2151
-1994:2:2155
-1995:2:2156
-1996:2:2150
-1997:2:2151
-1998:2:2155
-1999:2:2156
-2000:2:2164
-2001:2:2169
-2002:2:2173
-2003:2:2174
-2004:2:2181
-2005:2:2182
-2006:2:2193
-2007:2:2194
-2008:2:2195
-2009:2:2193
-2010:2:2194
-2011:2:2195
-2012:2:2206
-2013:2:2211
-2014:2:2212
-2015:0:4365
-2016:2:2224
-2017:0:4365
-2018:3:2942
-2019:0:4365
-2020:2:2226
-2021:0:4365
-2022:3:2943
-2023:0:4365
-2024:2:1936
-2025:0:4365
-2026:2:2129
-2027:0:4365
-2028:2:2130
-2029:0:4365
-2030:2:2134
-2031:0:4365
-2032:3:2942
-2033:0:4365
-2034:2:2136
-2035:0:4365
-2036:3:2943
-2037:0:4365
-2038:2:2137
-2039:2:2141
-2040:2:2142
-2041:2:2150
-2042:2:2151
-2043:2:2155
-2044:2:2156
-2045:2:2150
-2046:2:2151
-2047:2:2152
-2048:2:2164
-2049:2:2169
-2050:2:2173
-2051:2:2174
-2052:2:2181
-2053:2:2182
-2054:2:2193
-2055:2:2194
-2056:2:2195
-2057:2:2193
-2058:2:2194
-2059:2:2195
-2060:2:2206
-2061:2:2211
-2062:2:2212
-2063:0:4365
-2064:2:2224
-2065:0:4365
-2066:3:2942
-2067:0:4365
-2068:2:2226
-2069:0:4365
-2070:3:2943
-2071:0:4365
-2072:2:2230
-2073:0:4365
-2074:3:2942
-2075:0:4365
-2076:2:2235
-2077:2:2239
-2078:2:2240
-2079:2:2248
-2080:2:2249
-2081:2:2253
-2082:2:2254
-2083:2:2248
-2084:2:2249
-2085:2:2250
-2086:2:2262
-2087:2:2267
-2088:2:2271
-2089:2:2272
-2090:2:2279
-2091:2:2280
-2092:2:2291
-2093:2:2292
-2094:2:2293
-2095:2:2291
-2096:2:2292
-2097:2:2293
-2098:2:2304
-2099:2:2309
-2100:2:2310
-2101:0:4365
-2102:3:2943
-2103:0:4365
-2104:2:2322
-2105:0:4365
-2106:2:1169
-2107:0:4365
-2108:3:2942
-2109:0:4365
-2110:2:1170
-2111:0:4365
-2112:3:2943
-2113:0:4365
-2114:3:2944
-2115:0:4365
-2116:3:2950
-2117:0:4365
-2118:3:2951
-2119:0:4365
-2120:3:2952
-2121:0:4365
-2122:3:2953
-2123:0:4365
-2124:3:2954
-2125:3:2958
-2126:3:2959
-2127:3:2967
-2128:3:2968
-2129:3:2972
-2130:3:2973
-2131:3:2967
-2132:3:2968
-2133:3:2972
-2134:3:2973
-2135:3:2981
-2136:3:2986
-2137:3:2990
-2138:3:2991
-2139:3:2998
-2140:3:2999
-2141:3:3010
-2142:3:3011
-2143:3:3012
-2144:3:3010
-2145:3:3011
-2146:3:3012
-2147:3:3023
-2148:3:3028
-2149:3:3029
-2150:0:4365
-2151:3:3041
-2152:0:4365
-2153:3:3042
-2154:0:4365
-2155:2:1173
-2156:0:4365
-2157:3:3043
-2158:0:4365
-2159:2:1179
-2160:0:4365
-2161:2:1180
-2162:0:4365
-2163:3:3042
-2164:0:4365
-2165:2:1181
-2166:2:1185
-2167:2:1186
-2168:2:1194
-2169:2:1195
-2170:2:1199
-2171:2:1200
-2172:2:1194
-2173:2:1195
-2174:2:1199
-2175:2:1200
-2176:2:1208
-2177:2:1213
-2178:2:1217
-2179:2:1218
-2180:2:1225
-2181:2:1226
-2182:2:1237
-2183:2:1238
-2184:2:1239
-2185:2:1237
-2186:2:1238
-2187:2:1239
-2188:2:1250
-2189:2:1255
-2190:2:1256
-2191:0:4365
-2192:3:3043
-2193:0:4365
-2194:2:1268
-2195:0:4365
-2196:3:3042
-2197:0:4365
-2198:2:1270
-2199:0:4365
-2200:3:3043
-2201:0:4365
-2202:2:1271
-2203:2:1275
-2204:2:1276
-2205:2:1284
-2206:2:1285
-2207:2:1289
-2208:2:1290
-2209:2:1284
-2210:2:1285
-2211:2:1289
-2212:2:1290
-2213:2:1298
-2214:2:1303
-2215:2:1307
-2216:2:1308
-2217:2:1315
-2218:2:1316
-2219:2:1327
-2220:2:1328
-2221:2:1329
-2222:2:1327
-2223:2:1328
-2224:2:1329
-2225:2:1340
-2226:2:1345
-2227:2:1346
-2228:0:4365
-2229:2:1358
-2230:0:4365
-2231:2:1360
-2232:0:4365
-2233:3:3042
-2234:0:4365
-2235:2:1361
-2236:0:4365
-2237:3:3043
-2238:0:4365
-2239:2:1362
-2240:2:1366
-2241:2:1367
-2242:2:1375
-2243:2:1376
-2244:2:1380
-2245:2:1381
-2246:2:1375
-2247:2:1376
-2248:2:1380
-2249:2:1381
-2250:2:1389
-2251:2:1394
-2252:2:1398
-2253:2:1399
-2254:2:1406
-2255:2:1407
-2256:2:1418
-2257:2:1419
-2258:2:1420
-2259:2:1418
-2260:2:1419
-2261:2:1420
-2262:2:1431
-2263:2:1436
-2264:2:1437
-2265:0:4365
-2266:2:1449
-2267:0:4365
-2268:3:3042
-2269:0:4365
-2270:2:1451
-2271:0:4365
-2272:3:3043
-2273:0:4365
-2274:2:1652
-2275:0:4365
-2276:2:1653
-2277:0:4365
-2278:2:1657
-2279:0:4365
-2280:2:1180
-2281:0:4365
-2282:3:3042
-2283:0:4365
-2284:2:1181
-2285:2:1185
-2286:2:1186
-2287:2:1194
-2288:2:1195
-2289:2:1199
-2290:2:1200
-2291:2:1194
-2292:2:1195
-2293:2:1196
-2294:2:1208
-2295:2:1213
-2296:2:1217
-2297:2:1218
-2298:2:1225
-2299:2:1226
-2300:2:1237
-2301:2:1238
-2302:2:1239
-2303:2:1237
-2304:2:1238
-2305:2:1239
-2306:2:1250
-2307:2:1255
-2308:2:1256
-2309:0:4365
-2310:3:3043
-2311:0:4365
-2312:2:1268
-2313:0:4365
-2314:3:3042
-2315:0:4365
-2316:2:1270
-2317:0:4365
-2318:3:3043
-2319:0:4365
-2320:2:1271
-2321:2:1275
-2322:2:1276
-2323:2:1284
-2324:2:1285
-2325:2:1289
-2326:2:1290
-2327:2:1284
-2328:2:1285
-2329:2:1289
-2330:2:1290
-2331:2:1298
-2332:2:1303
-2333:2:1307
-2334:2:1308
-2335:2:1315
-2336:2:1316
-2337:2:1327
-2338:2:1328
-2339:2:1329
-2340:2:1327
-2341:2:1328
-2342:2:1329
-2343:2:1340
-2344:2:1345
-2345:2:1346
-2346:0:4365
-2347:2:1358
-2348:0:4365
-2349:2:1454
-2350:0:4365
-2351:3:3042
-2352:0:4365
-2353:2:1455
-2354:0:4365
-2355:3:3043
-2356:0:4365
-2357:2:1652
-2358:0:4365
-2359:2:1653
-2360:0:4365
-2361:2:1657
-2362:0:4365
-2363:2:1660
-2364:0:4365
-2365:3:3042
-2366:0:4365
-2367:2:1665
-2368:2:1669
-2369:2:1670
-2370:2:1678
-2371:2:1679
-2372:2:1683
-2373:2:1684
-2374:2:1678
-2375:2:1679
-2376:2:1680
-2377:2:1692
-2378:2:1697
-2379:2:1701
-2380:2:1702
-2381:2:1709
-2382:2:1710
-2383:2:1721
-2384:2:1722
-2385:2:1723
-2386:2:1721
-2387:2:1722
-2388:2:1723
-2389:2:1734
-2390:2:1739
-2391:2:1740
-2392:0:4365
-2393:3:3043
-2394:0:4365
-2395:2:1752
-2396:0:4365
-2397:3:3042
-2398:0:4365
-2399:2:1754
-2400:0:4365
-2401:3:3043
-2402:0:4365
-2403:2:1755
-2404:2:1759
-2405:2:1760
-2406:2:1768
-2407:2:1769
-2408:2:1773
-2409:2:1774
-2410:2:1768
-2411:2:1769
-2412:2:1773
-2413:2:1774
-2414:2:1782
-2415:2:1787
-2416:2:1791
-2417:2:1792
-2418:2:1799
-2419:2:1800
-2420:2:1811
-2421:2:1812
-2422:2:1813
-2423:2:1811
-2424:2:1812
-2425:2:1813
-2426:2:1824
-2427:2:1829
-2428:2:1830
-2429:0:4365
-2430:2:1842
-2431:0:4365
-2432:3:3042
-2433:0:4365
-2434:2:1844
-2435:0:4365
-2436:3:3043
-2437:0:4365
-2438:2:1845
-2439:2:1849
-2440:2:1850
-2441:2:1858
-2442:2:1859
-2443:2:1863
-2444:2:1864
-2445:2:1858
-2446:2:1859
-2447:2:1863
-2448:2:1864
-2449:2:1872
-2450:2:1877
-2451:2:1881
-2452:2:1882
-2453:2:1889
-2454:2:1890
-2455:2:1901
-2456:2:1902
-2457:2:1903
-2458:2:1901
-2459:2:1902
-2460:2:1903
-2461:2:1914
-2462:2:1919
-2463:2:1920
-2464:0:4365
-2465:2:1932
-2466:0:4365
-2467:3:3042
-2468:0:4365
-2469:2:1934
-2470:0:4365
-2471:3:3043
-2472:0:4365
-2473:2:1935
-2474:0:4365
-2475:2:1936
-2476:0:4365
-2477:2:2129
-2478:0:4365
-2479:2:2130
-2480:0:4365
-2481:2:2134
-2482:0:4365
-2483:3:3042
-2484:0:4365
-2485:2:2136
-2486:0:4365
-2487:3:3043
-2488:0:4365
-2489:2:2137
-2490:2:2141
-2491:2:2142
-2492:2:2150
-2493:2:2151
-2494:2:2155
-2495:2:2156
-2496:2:2150
-2497:2:2151
-2498:2:2155
-2499:2:2156
-2500:2:2164
-2501:2:2169
-2502:2:2173
-2503:2:2174
-2504:2:2181
-2505:2:2182
-2506:2:2193
-2507:2:2194
-2508:2:2195
-2509:2:2193
-2510:2:2194
-2511:2:2195
-2512:2:2206
-2513:2:2211
-2514:2:2212
-2515:0:4365
-2516:2:2224
-2517:0:4365
-2518:3:3042
-2519:0:4365
-2520:2:2226
-2521:0:4365
-2522:3:3043
-2523:0:4365
-2524:2:1936
-2525:0:4365
-2526:2:2129
-2527:0:4365
-2528:2:2130
-2529:0:4365
-2530:2:2134
-2531:0:4365
-2532:3:3042
-2533:0:4365
-2534:2:2136
-2535:0:4365
-2536:3:3043
-2537:0:4365
-2538:2:2137
-2539:2:2141
-2540:2:2142
-2541:2:2150
-2542:2:2151
-2543:2:2155
-2544:2:2156
-2545:2:2150
-2546:2:2151
-2547:2:2152
-2548:2:2164
-2549:2:2169
-2550:2:2173
-2551:2:2174
-2552:2:2181
-2553:2:2182
-2554:2:2193
-2555:2:2194
-2556:2:2195
-2557:2:2193
-2558:2:2194
-2559:2:2195
-2560:2:2206
-2561:2:2211
-2562:2:2212
-2563:0:4365
-2564:2:2224
-2565:0:4365
-2566:3:3042
-2567:0:4365
-2568:2:2226
-2569:0:4365
-2570:3:3043
-2571:0:4365
-2572:2:2230
-2573:0:4365
-2574:3:3042
-2575:0:4365
-2576:2:2235
-2577:2:2239
-2578:2:2240
-2579:2:2248
-2580:2:2249
-2581:2:2253
-2582:2:2254
-2583:2:2248
-2584:2:2249
-2585:2:2250
-2586:2:2262
-2587:2:2267
-2588:2:2271
-2589:2:2272
-2590:2:2279
-2591:2:2280
-2592:2:2291
-2593:2:2292
-2594:2:2293
-2595:2:2291
-2596:2:2292
-2597:2:2293
-2598:2:2304
-2599:2:2309
-2600:2:2310
-2601:0:4365
-2602:3:3043
-2603:0:4365
-2604:2:2322
-2605:0:4365
-2606:2:1169
-2607:0:4365
-2608:3:3042
-2609:0:4365
-2610:2:1170
-2611:0:4365
-2612:3:3043
-2613:0:4365
-2614:3:3044
-2615:0:4365
-2616:3:3257
-2617:0:4365
-2618:3:3265
-2619:0:4365
-2620:3:3266
-2621:3:3270
-2622:3:3271
-2623:3:3279
-2624:3:3280
-2625:3:3284
-2626:3:3285
-2627:3:3279
-2628:3:3280
-2629:3:3284
-2630:3:3285
-2631:3:3293
-2632:3:3298
-2633:3:3302
-2634:3:3303
-2635:3:3310
-2636:3:3311
-2637:3:3322
-2638:3:3323
-2639:3:3324
-2640:3:3322
-2641:3:3323
-2642:3:3324
-2643:3:3335
-2644:3:3340
-2645:3:3341
-2646:0:4365
-2647:3:3353
-2648:0:4365
-2649:3:3354
-2650:0:4365
-2651:2:1173
-2652:0:4365
-2653:3:3355
-2654:0:4365
-2655:2:1179
-2656:0:4365
-2657:2:1180
-2658:0:4365
-2659:3:3354
-2660:0:4365
-2661:2:1181
-2662:2:1185
-2663:2:1186
-2664:2:1194
-2665:2:1195
-2666:2:1199
-2667:2:1200
-2668:2:1194
-2669:2:1195
-2670:2:1199
-2671:2:1200
-2672:2:1208
-2673:2:1213
-2674:2:1217
-2675:2:1218
-2676:2:1225
-2677:2:1226
-2678:2:1237
-2679:2:1238
-2680:2:1239
-2681:2:1237
-2682:2:1238
-2683:2:1239
-2684:2:1250
-2685:2:1255
-2686:2:1256
-2687:0:4365
-2688:3:3355
-2689:0:4365
-2690:2:1268
-2691:0:4365
-2692:3:3354
-2693:0:4365
-2694:2:1270
-2695:0:4365
-2696:3:3355
-2697:0:4365
-2698:2:1271
-2699:2:1275
-2700:2:1276
-2701:2:1284
-2702:2:1285
-2703:2:1289
-2704:2:1290
-2705:2:1284
-2706:2:1285
-2707:2:1289
-2708:2:1290
-2709:2:1298
-2710:2:1303
-2711:2:1307
-2712:2:1308
-2713:2:1315
-2714:2:1316
-2715:2:1327
-2716:2:1328
-2717:2:1329
-2718:2:1327
-2719:2:1328
-2720:2:1329
-2721:2:1340
-2722:2:1345
-2723:2:1346
-2724:0:4365
-2725:2:1358
-2726:0:4365
-2727:2:1360
-2728:0:4365
-2729:3:3354
-2730:0:4365
-2731:2:1361
-2732:0:4365
-2733:3:3355
-2734:0:4365
-2735:2:1362
-2736:2:1366
-2737:2:1367
-2738:2:1375
-2739:2:1376
-2740:2:1380
-2741:2:1381
-2742:2:1375
-2743:2:1376
-2744:2:1380
-2745:2:1381
-2746:2:1389
-2747:2:1394
-2748:2:1398
-2749:2:1399
-2750:2:1406
-2751:2:1407
-2752:2:1418
-2753:2:1419
-2754:2:1420
-2755:2:1418
-2756:2:1419
-2757:2:1420
-2758:2:1431
-2759:2:1436
-2760:2:1437
-2761:0:4365
-2762:2:1449
-2763:0:4365
-2764:3:3354
-2765:0:4365
-2766:2:1451
-2767:0:4365
-2768:3:3355
-2769:0:4365
-2770:2:1652
-2771:0:4365
-2772:2:1653
-2773:0:4365
-2774:2:1657
-2775:0:4365
-2776:2:1180
-2777:0:4365
-2778:3:3354
-2779:0:4365
-2780:2:1181
-2781:2:1185
-2782:2:1186
-2783:2:1194
-2784:2:1195
-2785:2:1199
-2786:2:1200
-2787:2:1194
-2788:2:1195
-2789:2:1196
-2790:2:1208
-2791:2:1213
-2792:2:1217
-2793:2:1218
-2794:2:1225
-2795:2:1226
-2796:2:1237
-2797:2:1238
-2798:2:1239
-2799:2:1237
-2800:2:1238
-2801:2:1239
-2802:2:1250
-2803:2:1255
-2804:2:1256
-2805:0:4365
-2806:3:3355
-2807:0:4365
-2808:2:1268
-2809:0:4365
-2810:3:3354
-2811:0:4365
-2812:2:1270
-2813:0:4365
-2814:3:3355
-2815:0:4365
-2816:2:1271
-2817:2:1275
-2818:2:1276
-2819:2:1284
-2820:2:1285
-2821:2:1289
-2822:2:1290
-2823:2:1284
-2824:2:1285
-2825:2:1289
-2826:2:1290
-2827:2:1298
-2828:2:1303
-2829:2:1307
-2830:2:1308
-2831:2:1315
-2832:2:1316
-2833:2:1327
-2834:2:1328
-2835:2:1329
-2836:2:1327
-2837:2:1328
-2838:2:1329
-2839:2:1340
-2840:2:1345
-2841:2:1346
-2842:0:4365
-2843:2:1358
-2844:0:4365
-2845:2:1454
-2846:0:4365
-2847:3:3354
-2848:0:4365
-2849:2:1455
-2850:0:4365
-2851:3:3355
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3354
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3355
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3354
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3355
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3354
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3355
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3354
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3355
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3354
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3355
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3354
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3355
-3019:0:4365
-3020:2:1936
-3021:0:4365
-3022:2:2129
-3023:0:4365
-3024:2:2130
-3025:0:4365
-3026:2:2134
-3027:0:4365
-3028:3:3354
-3029:0:4365
-3030:2:2136
-3031:0:4365
-3032:3:3355
-3033:0:4365
-3034:2:2137
-3035:2:2141
-3036:2:2142
-3037:2:2150
-3038:2:2151
-3039:2:2155
-3040:2:2156
-3041:2:2150
-3042:2:2151
-3043:2:2152
-3044:2:2164
-3045:2:2169
-3046:2:2173
-3047:2:2174
-3048:2:2181
-3049:2:2182
-3050:2:2193
-3051:2:2194
-3052:2:2195
-3053:2:2193
-3054:2:2194
-3055:2:2195
-3056:2:2206
-3057:2:2211
-3058:2:2212
-3059:0:4365
-3060:2:2224
-3061:0:4365
-3062:3:3354
-3063:0:4365
-3064:2:2226
-3065:0:4365
-3066:3:3355
-3067:0:4365
-3068:2:2230
-3069:0:4365
-3070:3:3354
-3071:0:4365
-3072:2:2235
-3073:2:2239
-3074:2:2240
-3075:2:2248
-3076:2:2249
-3077:2:2253
-3078:2:2254
-3079:2:2248
-3080:2:2249
-3081:2:2250
-3082:2:2262
-3083:2:2267
-3084:2:2271
-3085:2:2272
-3086:2:2279
-3087:2:2280
-3088:2:2291
-3089:2:2292
-3090:2:2293
-3091:2:2291
-3092:2:2292
-3093:2:2293
-3094:2:2304
-3095:2:2309
-3096:2:2310
-3097:0:4365
-3098:3:3355
-3099:0:4365
-3100:2:2322
-3101:0:4365
-3102:2:1169
-3103:0:4365
-3104:3:3354
-3105:0:4365
-3106:2:1170
-3107:0:4365
-3108:3:3355
-3109:0:4365
-3110:3:3356
-3111:0:4365
-3112:3:3366
-3113:0:4365
-3114:3:2951
-3115:0:4365
-3116:3:2952
-3117:0:4365
-3118:3:2953
-3119:0:4365
-3120:3:2954
-3121:3:2958
-3122:3:2959
-3123:3:2967
-3124:3:2968
-3125:3:2972
-3126:3:2973
-3127:3:2967
-3128:3:2968
-3129:3:2972
-3130:3:2973
-3131:3:2981
-3132:3:2986
-3133:3:2990
-3134:3:2991
-3135:3:2998
-3136:3:2999
-3137:3:3010
-3138:3:3011
-3139:3:3012
-3140:3:3010
-3141:3:3011
-3142:3:3012
-3143:3:3023
-3144:3:3028
-3145:3:3029
-3146:0:4365
-3147:3:3041
-3148:0:4365
-3149:3:3042
-3150:0:4365
-3151:2:1173
-3152:0:4365
-3153:3:3043
-3154:0:4365
-3155:2:1179
-3156:0:4365
-3157:2:1180
-3158:0:4365
-3159:3:3042
-3160:0:4365
-3161:2:1181
-3162:2:1185
-3163:2:1186
-3164:2:1194
-3165:2:1195
-3166:2:1199
-3167:2:1200
-3168:2:1194
-3169:2:1195
-3170:2:1199
-3171:2:1200
-3172:2:1208
-3173:2:1213
-3174:2:1217
-3175:2:1218
-3176:2:1225
-3177:2:1226
-3178:2:1237
-3179:2:1238
-3180:2:1239
-3181:2:1237
-3182:2:1238
-3183:2:1239
-3184:2:1250
-3185:2:1255
-3186:2:1256
-3187:0:4365
-3188:3:3043
-3189:0:4365
-3190:2:1268
-3191:0:4365
-3192:3:3042
-3193:0:4365
-3194:2:1270
-3195:0:4365
-3196:3:3043
-3197:0:4365
-3198:2:1271
-3199:2:1275
-3200:2:1276
-3201:2:1284
-3202:2:1285
-3203:2:1289
-3204:2:1290
-3205:2:1284
-3206:2:1285
-3207:2:1289
-3208:2:1290
-3209:2:1298
-3210:2:1303
-3211:2:1307
-3212:2:1308
-3213:2:1315
-3214:2:1316
-3215:2:1327
-3216:2:1328
-3217:2:1329
-3218:2:1327
-3219:2:1328
-3220:2:1329
-3221:2:1340
-3222:2:1345
-3223:2:1346
-3224:0:4365
-3225:2:1358
-3226:0:4365
-3227:2:1360
-3228:0:4365
-3229:3:3042
-3230:0:4365
-3231:2:1361
-3232:0:4365
-3233:3:3043
-3234:0:4365
-3235:2:1362
-3236:2:1366
-3237:2:1367
-3238:2:1375
-3239:2:1376
-3240:2:1380
-3241:2:1381
-3242:2:1375
-3243:2:1376
-3244:2:1380
-3245:2:1381
-3246:2:1389
-3247:2:1394
-3248:2:1398
-3249:2:1399
-3250:2:1406
-3251:2:1407
-3252:2:1418
-3253:2:1419
-3254:2:1420
-3255:2:1418
-3256:2:1419
-3257:2:1420
-3258:2:1431
-3259:2:1436
-3260:2:1437
-3261:0:4365
-3262:2:1449
-3263:0:4365
-3264:3:3042
-3265:0:4365
-3266:2:1451
-3267:0:4365
-3268:3:3043
-3269:0:4365
-3270:2:1652
-3271:0:4365
-3272:2:1653
-3273:0:4365
-3274:2:1657
-3275:0:4365
-3276:2:1180
-3277:0:4365
-3278:3:3042
-3279:0:4365
-3280:2:1181
-3281:2:1185
-3282:2:1186
-3283:2:1194
-3284:2:1195
-3285:2:1199
-3286:2:1200
-3287:2:1194
-3288:2:1195
-3289:2:1196
-3290:2:1208
-3291:2:1213
-3292:2:1217
-3293:2:1218
-3294:2:1225
-3295:2:1226
-3296:2:1237
-3297:2:1238
-3298:2:1239
-3299:2:1237
-3300:2:1238
-3301:2:1239
-3302:2:1250
-3303:2:1255
-3304:2:1256
-3305:0:4365
-3306:3:3043
-3307:0:4365
-3308:2:1268
-3309:0:4365
-3310:3:3042
-3311:0:4365
-3312:2:1270
-3313:0:4365
-3314:3:3043
-3315:0:4365
-3316:2:1271
-3317:2:1275
-3318:2:1276
-3319:2:1284
-3320:2:1285
-3321:2:1289
-3322:2:1290
-3323:2:1284
-3324:2:1285
-3325:2:1289
-3326:2:1290
-3327:2:1298
-3328:2:1303
-3329:2:1307
-3330:2:1308
-3331:2:1315
-3332:2:1316
-3333:2:1327
-3334:2:1328
-3335:2:1329
-3336:2:1327
-3337:2:1328
-3338:2:1329
-3339:2:1340
-3340:2:1345
-3341:2:1346
-3342:0:4365
-3343:2:1358
-3344:0:4365
-3345:2:1454
-3346:0:4365
-3347:3:3042
-3348:0:4365
-3349:2:1455
-3350:0:4365
-3351:3:3043
-3352:0:4365
-3353:2:1652
-3354:0:4365
-3355:2:1653
-3356:0:4365
-3357:2:1657
-3358:0:4365
-3359:2:1660
-3360:0:4365
-3361:3:3042
-3362:0:4365
-3363:2:1665
-3364:2:1669
-3365:2:1670
-3366:2:1678
-3367:2:1679
-3368:2:1683
-3369:2:1684
-3370:2:1678
-3371:2:1679
-3372:2:1680
-3373:2:1692
-3374:2:1697
-3375:2:1701
-3376:2:1702
-3377:2:1709
-3378:2:1710
-3379:2:1721
-3380:2:1722
-3381:2:1723
-3382:2:1721
-3383:2:1722
-3384:2:1723
-3385:2:1734
-3386:2:1739
-3387:2:1740
-3388:0:4365
-3389:3:3043
-3390:0:4365
-3391:2:1752
-3392:0:4365
-3393:3:3042
-3394:0:4365
-3395:2:1754
-3396:0:4365
-3397:3:3043
-3398:0:4365
-3399:2:1755
-3400:2:1759
-3401:2:1760
-3402:2:1768
-3403:2:1769
-3404:2:1773
-3405:2:1774
-3406:2:1768
-3407:2:1769
-3408:2:1773
-3409:2:1774
-3410:2:1782
-3411:2:1787
-3412:2:1791
-3413:2:1792
-3414:2:1799
-3415:2:1800
-3416:2:1811
-3417:2:1812
-3418:2:1813
-3419:2:1811
-3420:2:1812
-3421:2:1813
-3422:2:1824
-3423:2:1829
-3424:2:1830
-3425:0:4365
-3426:2:1842
-3427:0:4365
-3428:3:3042
-3429:0:4365
-3430:2:1844
-3431:0:4365
-3432:3:3043
-3433:0:4365
-3434:2:1845
-3435:2:1849
-3436:2:1850
-3437:2:1858
-3438:2:1859
-3439:2:1863
-3440:2:1864
-3441:2:1858
-3442:2:1859
-3443:2:1863
-3444:2:1864
-3445:2:1872
-3446:2:1877
-3447:2:1881
-3448:2:1882
-3449:2:1889
-3450:2:1890
-3451:2:1901
-3452:2:1902
-3453:2:1903
-3454:2:1901
-3455:2:1902
-3456:2:1903
-3457:2:1914
-3458:2:1919
-3459:2:1920
-3460:0:4365
-3461:2:1932
-3462:0:4365
-3463:3:3042
-3464:0:4365
-3465:2:1934
-3466:0:4365
-3467:3:3043
-3468:0:4365
-3469:2:1935
-3470:0:4365
-3471:2:1936
-3472:0:4365
-3473:2:2129
-3474:0:4365
-3475:2:2130
-3476:0:4365
-3477:2:2134
-3478:0:4365
-3479:3:3042
-3480:0:4365
-3481:2:2136
-3482:0:4365
-3483:3:3043
-3484:0:4365
-3485:2:2137
-3486:2:2141
-3487:2:2142
-3488:2:2150
-3489:2:2151
-3490:2:2155
-3491:2:2156
-3492:2:2150
-3493:2:2151
-3494:2:2155
-3495:2:2156
-3496:2:2164
-3497:2:2169
-3498:2:2173
-3499:2:2174
-3500:2:2181
-3501:2:2182
-3502:2:2193
-3503:2:2194
-3504:2:2195
-3505:2:2193
-3506:2:2194
-3507:2:2195
-3508:2:2206
-3509:2:2211
-3510:2:2212
-3511:0:4365
-3512:2:2224
-3513:0:4365
-3514:3:3042
-3515:0:4365
-3516:2:2226
-3517:0:4365
-3518:3:3043
-3519:0:4365
-3520:2:1936
-3521:0:4365
-3522:2:2129
-3523:0:4365
-3524:2:2130
-3525:0:4365
-3526:2:2134
-3527:0:4365
-3528:3:3042
-3529:0:4365
-3530:2:2136
-3531:0:4365
-3532:3:3043
-3533:0:4365
-3534:2:2137
-3535:2:2141
-3536:2:2142
-3537:2:2150
-3538:2:2151
-3539:2:2155
-3540:2:2156
-3541:2:2150
-3542:2:2151
-3543:2:2152
-3544:2:2164
-3545:2:2169
-3546:2:2173
-3547:2:2174
-3548:2:2181
-3549:2:2182
-3550:2:2193
-3551:2:2194
-3552:2:2195
-3553:2:2193
-3554:2:2194
-3555:2:2195
-3556:2:2206
-3557:2:2211
-3558:2:2212
-3559:0:4365
-3560:2:2224
-3561:0:4365
-3562:3:3042
-3563:0:4365
-3564:2:2226
-3565:0:4365
-3566:3:3043
-3567:0:4365
-3568:2:2230
-3569:0:4365
-3570:3:3042
-3571:0:4365
-3572:2:2235
-3573:2:2239
-3574:2:2240
-3575:2:2248
-3576:2:2249
-3577:2:2253
-3578:2:2254
-3579:2:2248
-3580:2:2249
-3581:2:2250
-3582:2:2262
-3583:2:2267
-3584:2:2271
-3585:2:2272
-3586:2:2279
-3587:2:2280
-3588:2:2291
-3589:2:2292
-3590:2:2293
-3591:2:2291
-3592:2:2292
-3593:2:2293
-3594:2:2304
-3595:2:2309
-3596:2:2310
-3597:0:4365
-3598:3:3043
-3599:0:4365
-3600:2:2322
-3601:0:4365
-3602:2:1169
-3603:0:4365
-3604:3:3042
-3605:0:4365
-3606:2:1170
-3607:0:4365
-3608:3:3043
-3609:0:4365
-3610:3:3044
-3611:0:4365
-3612:3:3257
-3613:0:4365
-3614:3:3362
-3615:0:4365
-3616:3:3363
-3617:0:4365
-3618:3:3367
-3619:0:4365
-3620:3:3373
-3621:3:3377
-3622:3:3378
-3623:3:3386
-3624:3:3387
-3625:3:3391
-3626:3:3392
-3627:3:3386
-3628:3:3387
-3629:3:3391
-3630:3:3392
-3631:3:3400
-3632:3:3405
-3633:3:3409
-3634:3:3410
-3635:3:3417
-3636:3:3418
-3637:3:3429
-3638:3:3430
-3639:3:3431
-3640:3:3429
-3641:3:3430
-3642:3:3431
-3643:3:3442
-3644:3:3447
-3645:3:3448
-3646:0:4365
-3647:3:3460
-3648:0:4365
-3649:3:3461
-3650:0:4365
-3651:2:1173
-3652:0:4365
-3653:3:3462
-3654:0:4365
-3655:2:1179
-3656:0:4365
-3657:2:1180
-3658:0:4365
-3659:3:3461
-3660:0:4365
-3661:2:1181
-3662:2:1185
-3663:2:1186
-3664:2:1194
-3665:2:1195
-3666:2:1199
-3667:2:1200
-3668:2:1194
-3669:2:1195
-3670:2:1199
-3671:2:1200
-3672:2:1208
-3673:2:1213
-3674:2:1217
-3675:2:1218
-3676:2:1225
-3677:2:1226
-3678:2:1237
-3679:2:1238
-3680:2:1239
-3681:2:1237
-3682:2:1238
-3683:2:1239
-3684:2:1250
-3685:2:1255
-3686:2:1256
-3687:0:4365
-3688:3:3462
-3689:0:4365
-3690:2:1268
-3691:0:4365
-3692:3:3461
-3693:0:4365
-3694:2:1270
-3695:0:4365
-3696:3:3462
-3697:0:4365
-3698:2:1271
-3699:2:1275
-3700:2:1276
-3701:2:1284
-3702:2:1285
-3703:2:1289
-3704:2:1290
-3705:2:1284
-3706:2:1285
-3707:2:1289
-3708:2:1290
-3709:2:1298
-3710:2:1303
-3711:2:1307
-3712:2:1308
-3713:2:1315
-3714:2:1316
-3715:2:1327
-3716:2:1328
-3717:2:1329
-3718:2:1327
-3719:2:1328
-3720:2:1329
-3721:2:1340
-3722:2:1345
-3723:2:1346
-3724:0:4365
-3725:2:1358
-3726:0:4365
-3727:2:1360
-3728:0:4365
-3729:3:3461
-3730:0:4365
-3731:2:1361
-3732:0:4365
-3733:3:3462
-3734:0:4365
-3735:2:1362
-3736:2:1366
-3737:2:1367
-3738:2:1375
-3739:2:1376
-3740:2:1380
-3741:2:1381
-3742:2:1375
-3743:2:1376
-3744:2:1380
-3745:2:1381
-3746:2:1389
-3747:2:1394
-3748:2:1398
-3749:2:1399
-3750:2:1406
-3751:2:1407
-3752:2:1418
-3753:2:1419
-3754:2:1420
-3755:2:1418
-3756:2:1419
-3757:2:1420
-3758:2:1431
-3759:2:1436
-3760:2:1437
-3761:0:4365
-3762:2:1449
-3763:0:4365
-3764:3:3461
-3765:0:4365
-3766:2:1451
-3767:0:4365
-3768:3:3462
-3769:0:4365
-3770:2:1652
-3771:0:4365
-3772:2:1653
-3773:0:4365
-3774:2:1657
-3775:0:4365
-3776:2:1180
-3777:0:4365
-3778:3:3461
-3779:0:4365
-3780:2:1181
-3781:2:1185
-3782:2:1186
-3783:2:1194
-3784:2:1195
-3785:2:1199
-3786:2:1200
-3787:2:1194
-3788:2:1195
-3789:2:1196
-3790:2:1208
-3791:2:1213
-3792:2:1217
-3793:2:1218
-3794:2:1225
-3795:2:1226
-3796:2:1237
-3797:2:1238
-3798:2:1239
-3799:2:1237
-3800:2:1238
-3801:2:1239
-3802:2:1250
-3803:2:1255
-3804:2:1256
-3805:0:4365
-3806:3:3462
-3807:0:4365
-3808:2:1268
-3809:0:4365
-3810:3:3461
-3811:0:4365
-3812:2:1270
-3813:0:4365
-3814:3:3462
-3815:0:4365
-3816:2:1271
-3817:2:1275
-3818:2:1276
-3819:2:1284
-3820:2:1285
-3821:2:1289
-3822:2:1290
-3823:2:1284
-3824:2:1285
-3825:2:1289
-3826:2:1290
-3827:2:1298
-3828:2:1303
-3829:2:1307
-3830:2:1308
-3831:2:1315
-3832:2:1316
-3833:2:1327
-3834:2:1328
-3835:2:1329
-3836:2:1327
-3837:2:1328
-3838:2:1329
-3839:2:1340
-3840:2:1345
-3841:2:1346
-3842:0:4365
-3843:2:1358
-3844:0:4365
-3845:2:1454
-3846:0:4365
-3847:3:3461
-3848:0:4365
-3849:2:1455
-3850:0:4365
-3851:3:3462
-3852:0:4365
-3853:2:1652
-3854:0:4365
-3855:2:1653
-3856:0:4365
-3857:2:1657
-3858:0:4365
-3859:2:1660
-3860:0:4365
-3861:3:3461
-3862:0:4365
-3863:2:1665
-3864:2:1669
-3865:2:1670
-3866:2:1678
-3867:2:1679
-3868:2:1683
-3869:2:1684
-3870:2:1678
-3871:2:1679
-3872:2:1680
-3873:2:1692
-3874:2:1697
-3875:2:1701
-3876:2:1702
-3877:2:1709
-3878:2:1710
-3879:2:1721
-3880:2:1722
-3881:2:1723
-3882:2:1721
-3883:2:1722
-3884:2:1723
-3885:2:1734
-3886:2:1739
-3887:2:1740
-3888:0:4365
-3889:3:3462
-3890:0:4365
-3891:2:1752
-3892:0:4365
-3893:3:3461
-3894:0:4365
-3895:2:1754
-3896:0:4365
-3897:3:3462
-3898:0:4365
-3899:2:1755
-3900:2:1759
-3901:2:1760
-3902:2:1768
-3903:2:1769
-3904:2:1773
-3905:2:1774
-3906:2:1768
-3907:2:1769
-3908:2:1773
-3909:2:1774
-3910:2:1782
-3911:2:1787
-3912:2:1791
-3913:2:1792
-3914:2:1799
-3915:2:1800
-3916:2:1811
-3917:2:1812
-3918:2:1813
-3919:2:1811
-3920:2:1812
-3921:2:1813
-3922:2:1824
-3923:2:1829
-3924:2:1830
-3925:0:4365
-3926:2:1842
-3927:0:4365
-3928:3:3461
-3929:0:4365
-3930:2:1844
-3931:0:4365
-3932:3:3462
-3933:0:4365
-3934:2:1845
-3935:2:1849
-3936:2:1850
-3937:2:1858
-3938:2:1859
-3939:2:1863
-3940:2:1864
-3941:2:1858
-3942:2:1859
-3943:2:1863
-3944:2:1864
-3945:2:1872
-3946:2:1877
-3947:2:1881
-3948:2:1882
-3949:2:1889
-3950:2:1890
-3951:2:1901
-3952:2:1902
-3953:2:1903
-3954:2:1901
-3955:2:1902
-3956:2:1903
-3957:2:1914
-3958:2:1919
-3959:2:1920
-3960:0:4365
-3961:2:1932
-3962:0:4365
-3963:3:3461
-3964:0:4365
-3965:2:1934
-3966:0:4365
-3967:3:3462
-3968:0:4365
-3969:2:1935
-3970:0:4365
-3971:2:1936
-3972:0:4365
-3973:2:2129
-3974:0:4365
-3975:2:2130
-3976:0:4365
-3977:2:2134
-3978:0:4365
-3979:3:3461
-3980:0:4365
-3981:2:2136
-3982:0:4365
-3983:3:3462
-3984:0:4365
-3985:2:2137
-3986:2:2141
-3987:2:2142
-3988:2:2150
-3989:2:2151
-3990:2:2155
-3991:2:2156
-3992:2:2150
-3993:2:2151
-3994:2:2155
-3995:2:2156
-3996:2:2164
-3997:2:2169
-3998:2:2173
-3999:2:2174
-4000:2:2181
-4001:2:2182
-4002:2:2193
-4003:2:2194
-4004:2:2195
-4005:2:2193
-4006:2:2194
-4007:2:2195
-4008:2:2206
-4009:2:2211
-4010:2:2212
-4011:0:4365
-4012:2:2224
-4013:0:4365
-4014:3:3461
-4015:0:4365
-4016:2:2226
-4017:0:4365
-4018:3:3462
-4019:0:4365
-4020:2:1936
-4021:0:4365
-4022:2:2129
-4023:0:4365
-4024:2:2130
-4025:0:4365
-4026:2:2134
-4027:0:4365
-4028:3:3461
-4029:0:4365
-4030:2:2136
-4031:0:4365
-4032:3:3462
-4033:0:4365
-4034:2:2137
-4035:2:2141
-4036:2:2142
-4037:2:2150
-4038:2:2151
-4039:2:2155
-4040:2:2156
-4041:2:2150
-4042:2:2151
-4043:2:2152
-4044:2:2164
-4045:2:2169
-4046:2:2173
-4047:2:2174
-4048:2:2181
-4049:2:2182
-4050:2:2193
-4051:2:2194
-4052:2:2195
-4053:2:2193
-4054:2:2194
-4055:2:2195
-4056:2:2206
-4057:2:2211
-4058:2:2212
-4059:0:4365
-4060:2:2224
-4061:0:4365
-4062:3:3461
-4063:0:4365
-4064:2:2226
-4065:0:4365
-4066:3:3462
-4067:0:4365
-4068:2:2230
-4069:0:4365
-4070:3:3461
-4071:0:4365
-4072:2:2235
-4073:2:2239
-4074:2:2240
-4075:2:2248
-4076:2:2249
-4077:2:2253
-4078:2:2254
-4079:2:2248
-4080:2:2249
-4081:2:2250
-4082:2:2262
-4083:2:2267
-4084:2:2271
-4085:2:2272
-4086:2:2279
-4087:2:2280
-4088:2:2291
-4089:2:2292
-4090:2:2293
-4091:2:2291
-4092:2:2292
-4093:2:2293
-4094:2:2304
-4095:2:2309
-4096:2:2310
-4097:0:4365
-4098:3:3462
-4099:0:4365
-4100:2:2322
-4101:0:4365
-4102:2:1169
-4103:0:4365
-4104:3:3461
-4105:0:4365
-4106:2:1170
-4107:0:4365
-4108:3:3462
-4109:0:4365
-4110:3:3463
-4111:0:4365
-4112:3:3469
-4113:0:4365
-4114:3:3470
-4115:3:3474
-4116:3:3475
-4117:3:3483
-4118:3:3484
-4119:3:3488
-4120:3:3489
-4121:3:3483
-4122:3:3484
-4123:3:3488
-4124:3:3489
-4125:3:3497
-4126:3:3502
-4127:3:3506
-4128:3:3507
-4129:3:3514
-4130:3:3515
-4131:3:3526
-4132:3:3527
-4133:3:3528
-4134:3:3526
-4135:3:3527
-4136:3:3528
-4137:3:3539
-4138:3:3544
-4139:3:3545
-4140:0:4365
-4141:3:3557
-4142:0:4365
-4143:3:3558
-4144:0:4365
-4145:2:1173
-4146:0:4365
-4147:3:3559
-4148:0:4365
-4149:2:1179
-4150:0:4365
-4151:2:1180
-4152:0:4365
-4153:3:3558
-4154:0:4365
-4155:2:1181
-4156:2:1185
-4157:2:1186
-4158:2:1194
-4159:2:1195
-4160:2:1199
-4161:2:1200
-4162:2:1194
-4163:2:1195
-4164:2:1199
-4165:2:1200
-4166:2:1208
-4167:2:1213
-4168:2:1217
-4169:2:1218
-4170:2:1225
-4171:2:1226
-4172:2:1237
-4173:2:1238
-4174:2:1239
-4175:2:1237
-4176:2:1238
-4177:2:1239
-4178:2:1250
-4179:2:1255
-4180:2:1256
-4181:0:4365
-4182:3:3559
-4183:0:4365
-4184:2:1268
-4185:0:4365
-4186:3:3558
-4187:0:4365
-4188:2:1270
-4189:0:4365
-4190:3:3559
-4191:0:4365
-4192:2:1271
-4193:2:1275
-4194:2:1276
-4195:2:1284
-4196:2:1285
-4197:2:1289
-4198:2:1290
-4199:2:1284
-4200:2:1285
-4201:2:1289
-4202:2:1290
-4203:2:1298
-4204:2:1303
-4205:2:1307
-4206:2:1308
-4207:2:1315
-4208:2:1316
-4209:2:1327
-4210:2:1328
-4211:2:1329
-4212:2:1327
-4213:2:1328
-4214:2:1329
-4215:2:1340
-4216:2:1345
-4217:2:1346
-4218:0:4365
-4219:2:1358
-4220:0:4365
-4221:2:1360
-4222:0:4365
-4223:3:3558
-4224:0:4365
-4225:2:1361
-4226:0:4365
-4227:3:3559
-4228:0:4365
-4229:2:1362
-4230:2:1366
-4231:2:1367
-4232:2:1375
-4233:2:1376
-4234:2:1380
-4235:2:1381
-4236:2:1375
-4237:2:1376
-4238:2:1380
-4239:2:1381
-4240:2:1389
-4241:2:1394
-4242:2:1398
-4243:2:1399
-4244:2:1406
-4245:2:1407
-4246:2:1418
-4247:2:1419
-4248:2:1420
-4249:2:1418
-4250:2:1419
-4251:2:1420
-4252:2:1431
-4253:2:1436
-4254:2:1437
-4255:0:4365
-4256:2:1449
-4257:0:4365
-4258:3:3558
-4259:0:4365
-4260:2:1451
-4261:0:4365
-4262:3:3559
-4263:0:4365
-4264:2:1652
-4265:0:4365
-4266:2:1653
-4267:0:4365
-4268:2:1657
-4269:0:4365
-4270:2:1180
-4271:0:4365
-4272:3:3558
-4273:0:4365
-4274:2:1181
-4275:2:1185
-4276:2:1186
-4277:2:1194
-4278:2:1195
-4279:2:1199
-4280:2:1200
-4281:2:1194
-4282:2:1195
-4283:2:1196
-4284:2:1208
-4285:2:1213
-4286:2:1217
-4287:2:1218
-4288:2:1225
-4289:2:1226
-4290:2:1237
-4291:2:1238
-4292:2:1239
-4293:2:1237
-4294:2:1238
-4295:2:1239
-4296:2:1250
-4297:2:1255
-4298:2:1256
-4299:0:4365
-4300:3:3559
-4301:0:4365
-4302:2:1268
-4303:0:4365
-4304:3:3558
-4305:0:4365
-4306:2:1270
-4307:0:4365
-4308:3:3559
-4309:0:4365
-4310:2:1271
-4311:2:1275
-4312:2:1276
-4313:2:1284
-4314:2:1285
-4315:2:1289
-4316:2:1290
-4317:2:1284
-4318:2:1285
-4319:2:1289
-4320:2:1290
-4321:2:1298
-4322:2:1303
-4323:2:1307
-4324:2:1308
-4325:2:1315
-4326:2:1316
-4327:2:1327
-4328:2:1328
-4329:2:1329
-4330:2:1327
-4331:2:1328
-4332:2:1329
-4333:2:1340
-4334:2:1345
-4335:2:1346
-4336:0:4365
-4337:2:1358
-4338:0:4365
-4339:2:1454
-4340:0:4365
-4341:3:3558
-4342:0:4365
-4343:2:1455
-4344:0:4365
-4345:3:3559
-4346:0:4365
-4347:2:1652
-4348:0:4365
-4349:2:1653
-4350:0:4365
-4351:2:1657
-4352:0:4365
-4353:2:1660
-4354:0:4365
-4355:3:3558
-4356:0:4365
-4357:2:1665
-4358:2:1669
-4359:2:1670
-4360:2:1678
-4361:2:1679
-4362:2:1683
-4363:2:1684
-4364:2:1678
-4365:2:1679
-4366:2:1680
-4367:2:1692
-4368:2:1697
-4369:2:1701
-4370:2:1702
-4371:2:1709
-4372:2:1710
-4373:2:1721
-4374:2:1722
-4375:2:1723
-4376:2:1721
-4377:2:1722
-4378:2:1723
-4379:2:1734
-4380:2:1739
-4381:2:1740
-4382:0:4365
-4383:3:3559
-4384:0:4365
-4385:2:1752
-4386:0:4365
-4387:3:3558
-4388:0:4365
-4389:2:1754
-4390:0:4365
-4391:3:3559
-4392:0:4365
-4393:2:1755
-4394:2:1759
-4395:2:1760
-4396:2:1768
-4397:2:1769
-4398:2:1773
-4399:2:1774
-4400:2:1768
-4401:2:1769
-4402:2:1773
-4403:2:1774
-4404:2:1782
-4405:2:1787
-4406:2:1791
-4407:2:1792
-4408:2:1799
-4409:2:1800
-4410:2:1811
-4411:2:1812
-4412:2:1813
-4413:2:1811
-4414:2:1812
-4415:2:1813
-4416:2:1824
-4417:2:1829
-4418:2:1830
-4419:0:4365
-4420:2:1842
-4421:0:4365
-4422:3:3558
-4423:0:4365
-4424:2:1844
-4425:0:4365
-4426:3:3559
-4427:0:4365
-4428:2:1845
-4429:2:1849
-4430:2:1850
-4431:2:1858
-4432:2:1859
-4433:2:1863
-4434:2:1864
-4435:2:1858
-4436:2:1859
-4437:2:1863
-4438:2:1864
-4439:2:1872
-4440:2:1877
-4441:2:1881
-4442:2:1882
-4443:2:1889
-4444:2:1890
-4445:2:1901
-4446:2:1902
-4447:2:1903
-4448:2:1901
-4449:2:1902
-4450:2:1903
-4451:2:1914
-4452:2:1919
-4453:2:1920
-4454:0:4365
-4455:2:1932
-4456:0:4365
-4457:3:3558
-4458:0:4365
-4459:2:1934
-4460:0:4365
-4461:3:3559
-4462:0:4365
-4463:2:1935
-4464:0:4365
-4465:2:1936
-4466:0:4365
-4467:2:2129
-4468:0:4365
-4469:2:2130
-4470:0:4365
-4471:2:2134
-4472:0:4365
-4473:3:3558
-4474:0:4365
-4475:2:2136
-4476:0:4365
-4477:3:3559
-4478:0:4365
-4479:2:2137
-4480:2:2141
-4481:2:2142
-4482:2:2150
-4483:2:2151
-4484:2:2155
-4485:2:2156
-4486:2:2150
-4487:2:2151
-4488:2:2155
-4489:2:2156
-4490:2:2164
-4491:2:2169
-4492:2:2173
-4493:2:2174
-4494:2:2181
-4495:2:2182
-4496:2:2193
-4497:2:2194
-4498:2:2195
-4499:2:2193
-4500:2:2194
-4501:2:2195
-4502:2:2206
-4503:2:2211
-4504:2:2212
-4505:0:4365
-4506:2:2224
-4507:0:4365
-4508:3:3558
-4509:0:4365
-4510:2:2226
-4511:0:4365
-4512:3:3559
-4513:0:4365
-4514:2:1936
-4515:0:4365
-4516:2:2129
-4517:0:4365
-4518:2:2130
-4519:0:4365
-4520:2:2134
-4521:0:4365
-4522:3:3558
-4523:0:4365
-4524:2:2136
-4525:0:4365
-4526:3:3559
-4527:0:4365
-4528:2:2137
-4529:2:2141
-4530:2:2142
-4531:2:2150
-4532:2:2151
-4533:2:2155
-4534:2:2156
-4535:2:2150
-4536:2:2151
-4537:2:2152
-4538:2:2164
-4539:2:2169
-4540:2:2173
-4541:2:2174
-4542:2:2181
-4543:2:2182
-4544:2:2193
-4545:2:2194
-4546:2:2195
-4547:2:2193
-4548:2:2194
-4549:2:2195
-4550:2:2206
-4551:2:2211
-4552:2:2212
-4553:0:4365
-4554:2:2224
-4555:0:4365
-4556:3:3558
-4557:0:4365
-4558:2:2226
-4559:0:4365
-4560:3:3559
-4561:0:4365
-4562:2:2230
-4563:0:4365
-4564:3:3558
-4565:0:4365
-4566:2:2235
-4567:2:2239
-4568:2:2240
-4569:2:2248
-4570:2:2249
-4571:2:2253
-4572:2:2254
-4573:2:2248
-4574:2:2249
-4575:2:2250
-4576:2:2262
-4577:2:2267
-4578:2:2271
-4579:2:2272
-4580:2:2279
-4581:2:2280
-4582:2:2291
-4583:2:2292
-4584:2:2293
-4585:2:2291
-4586:2:2292
-4587:2:2293
-4588:2:2304
-4589:2:2309
-4590:2:2310
-4591:0:4365
-4592:3:3559
-4593:0:4365
-4594:2:2322
-4595:0:4365
-4596:2:1169
-4597:0:4365
-4598:3:3558
-4599:0:4365
-4600:2:1170
-4601:0:4365
-4602:3:3559
-4603:0:4365
-4604:3:3560
-4605:0:4365
-4606:3:3566
-4607:0:4365
-4608:3:3569
-4609:3:3570
-4610:3:3582
-4611:3:3583
-4612:3:3587
-4613:3:3588
-4614:3:3582
-4615:3:3583
-4616:3:3587
-4617:3:3588
-4618:3:3596
-4619:3:3601
-4620:3:3605
-4621:3:3606
-4622:3:3613
-4623:3:3614
-4624:3:3625
-4625:3:3626
-4626:3:3627
-4627:3:3625
-4628:3:3626
-4629:3:3627
-4630:3:3638
-4631:3:3643
-4632:3:3644
-4633:0:4365
-4634:3:3656
-4635:0:4365
-4636:3:3657
-4637:0:4365
-4638:2:1173
-4639:0:4365
-4640:3:3658
-4641:0:4365
-4642:2:1179
-4643:0:4365
-4644:2:1180
-4645:0:4365
-4646:3:3657
-4647:0:4365
-4648:2:1181
-4649:2:1185
-4650:2:1186
-4651:2:1194
-4652:2:1195
-4653:2:1199
-4654:2:1200
-4655:2:1194
-4656:2:1195
-4657:2:1199
-4658:2:1200
-4659:2:1208
-4660:2:1213
-4661:2:1217
-4662:2:1218
-4663:2:1225
-4664:2:1226
-4665:2:1237
-4666:2:1238
-4667:2:1239
-4668:2:1237
-4669:2:1238
-4670:2:1239
-4671:2:1250
-4672:2:1255
-4673:2:1256
-4674:0:4365
-4675:3:3658
-4676:0:4365
-4677:2:1268
-4678:0:4365
-4679:3:3657
-4680:0:4365
-4681:2:1270
-4682:0:4365
-4683:3:3658
-4684:0:4365
-4685:2:1271
-4686:2:1275
-4687:2:1276
-4688:2:1284
-4689:2:1285
-4690:2:1289
-4691:2:1290
-4692:2:1284
-4693:2:1285
-4694:2:1289
-4695:2:1290
-4696:2:1298
-4697:2:1303
-4698:2:1307
-4699:2:1308
-4700:2:1315
-4701:2:1316
-4702:2:1327
-4703:2:1328
-4704:2:1329
-4705:2:1327
-4706:2:1328
-4707:2:1329
-4708:2:1340
-4709:2:1345
-4710:2:1346
-4711:0:4365
-4712:2:1358
-4713:0:4365
-4714:2:1360
-4715:0:4365
-4716:3:3657
-4717:0:4365
-4718:2:1361
-4719:0:4365
-4720:3:3658
-4721:0:4365
-4722:2:1362
-4723:2:1366
-4724:2:1367
-4725:2:1375
-4726:2:1376
-4727:2:1380
-4728:2:1381
-4729:2:1375
-4730:2:1376
-4731:2:1380
-4732:2:1381
-4733:2:1389
-4734:2:1394
-4735:2:1398
-4736:2:1399
-4737:2:1406
-4738:2:1407
-4739:2:1418
-4740:2:1419
-4741:2:1420
-4742:2:1418
-4743:2:1419
-4744:2:1420
-4745:2:1431
-4746:2:1436
-4747:2:1437
-4748:0:4365
-4749:2:1449
-4750:0:4365
-4751:3:3657
-4752:0:4365
-4753:2:1451
-4754:0:4365
-4755:3:3658
-4756:0:4365
-4757:2:1652
-4758:0:4365
-4759:2:1653
-4760:0:4365
-4761:2:1657
-4762:0:4365
-4763:2:1180
-4764:0:4365
-4765:3:3657
-4766:0:4365
-4767:2:1181
-4768:2:1185
-4769:2:1186
-4770:2:1194
-4771:2:1195
-4772:2:1199
-4773:2:1200
-4774:2:1194
-4775:2:1195
-4776:2:1196
-4777:2:1208
-4778:2:1213
-4779:2:1217
-4780:2:1218
-4781:2:1225
-4782:2:1226
-4783:2:1237
-4784:2:1238
-4785:2:1239
-4786:2:1237
-4787:2:1238
-4788:2:1239
-4789:2:1250
-4790:2:1255
-4791:2:1256
-4792:0:4365
-4793:3:3658
-4794:0:4365
-4795:2:1268
-4796:0:4365
-4797:3:3657
-4798:0:4365
-4799:2:1270
-4800:0:4365
-4801:3:3658
-4802:0:4365
-4803:2:1271
-4804:2:1275
-4805:2:1276
-4806:2:1284
-4807:2:1285
-4808:2:1289
-4809:2:1290
-4810:2:1284
-4811:2:1285
-4812:2:1289
-4813:2:1290
-4814:2:1298
-4815:2:1303
-4816:2:1307
-4817:2:1308
-4818:2:1315
-4819:2:1316
-4820:2:1327
-4821:2:1328
-4822:2:1329
-4823:2:1327
-4824:2:1328
-4825:2:1329
-4826:2:1340
-4827:2:1345
-4828:2:1346
-4829:0:4365
-4830:2:1358
-4831:0:4365
-4832:2:1454
-4833:0:4365
-4834:3:3657
-4835:0:4365
-4836:2:1455
-4837:0:4365
-4838:3:3658
-4839:0:4365
-4840:2:1652
-4841:0:4365
-4842:2:1653
-4843:0:4365
-4844:2:1657
-4845:0:4365
-4846:2:1660
-4847:0:4365
-4848:3:3657
-4849:0:4365
-4850:2:1665
-4851:2:1669
-4852:2:1670
-4853:2:1678
-4854:2:1679
-4855:2:1683
-4856:2:1684
-4857:2:1678
-4858:2:1679
-4859:2:1680
-4860:2:1692
-4861:2:1697
-4862:2:1701
-4863:2:1702
-4864:2:1709
-4865:2:1710
-4866:2:1721
-4867:2:1722
-4868:2:1723
-4869:2:1721
-4870:2:1722
-4871:2:1723
-4872:2:1734
-4873:2:1739
-4874:2:1740
-4875:0:4365
-4876:3:3658
-4877:0:4365
-4878:2:1752
-4879:0:4365
-4880:3:3657
-4881:0:4365
-4882:2:1754
-4883:0:4365
-4884:3:3658
-4885:0:4365
-4886:2:1755
-4887:2:1759
-4888:2:1760
-4889:2:1768
-4890:2:1769
-4891:2:1773
-4892:2:1774
-4893:2:1768
-4894:2:1769
-4895:2:1773
-4896:2:1774
-4897:2:1782
-4898:2:1787
-4899:2:1791
-4900:2:1792
-4901:2:1799
-4902:2:1800
-4903:2:1811
-4904:2:1812
-4905:2:1813
-4906:2:1811
-4907:2:1812
-4908:2:1813
-4909:2:1824
-4910:2:1829
-4911:2:1830
-4912:0:4365
-4913:2:1842
-4914:0:4365
-4915:3:3657
-4916:0:4365
-4917:2:1844
-4918:0:4365
-4919:3:3658
-4920:0:4365
-4921:2:1845
-4922:2:1849
-4923:2:1850
-4924:2:1858
-4925:2:1859
-4926:2:1863
-4927:2:1864
-4928:2:1858
-4929:2:1859
-4930:2:1863
-4931:2:1864
-4932:2:1872
-4933:2:1877
-4934:2:1881
-4935:2:1882
-4936:2:1889
-4937:2:1890
-4938:2:1901
-4939:2:1902
-4940:2:1903
-4941:2:1901
-4942:2:1902
-4943:2:1903
-4944:2:1914
-4945:2:1919
-4946:2:1920
-4947:0:4365
-4948:2:1932
-4949:0:4365
-4950:3:3657
-4951:0:4365
-4952:2:1934
-4953:0:4365
-4954:3:3658
-4955:0:4365
-4956:2:1935
-4957:0:4365
-4958:2:1936
-4959:0:4365
-4960:2:2129
-4961:0:4365
-4962:2:2130
-4963:0:4365
-4964:2:2134
-4965:0:4365
-4966:3:3657
-4967:0:4365
-4968:2:2136
-4969:0:4365
-4970:3:3658
-4971:0:4365
-4972:2:2137
-4973:2:2141
-4974:2:2142
-4975:2:2150
-4976:2:2151
-4977:2:2155
-4978:2:2156
-4979:2:2150
-4980:2:2151
-4981:2:2155
-4982:2:2156
-4983:2:2164
-4984:2:2169
-4985:2:2173
-4986:2:2174
-4987:2:2181
-4988:2:2182
-4989:2:2193
-4990:2:2194
-4991:2:2195
-4992:2:2193
-4993:2:2194
-4994:2:2195
-4995:2:2206
-4996:2:2211
-4997:2:2212
-4998:0:4365
-4999:2:2224
-5000:0:4365
-5001:3:3657
-5002:0:4365
-5003:2:2226
-5004:0:4365
-5005:3:3658
-5006:0:4365
-5007:2:1936
-5008:0:4365
-5009:2:2129
-5010:0:4365
-5011:2:2130
-5012:0:4365
-5013:2:2134
-5014:0:4365
-5015:3:3657
-5016:0:4365
-5017:2:2136
-5018:0:4365
-5019:3:3658
-5020:0:4365
-5021:2:2137
-5022:2:2141
-5023:2:2142
-5024:2:2150
-5025:2:2151
-5026:2:2155
-5027:2:2156
-5028:2:2150
-5029:2:2151
-5030:2:2152
-5031:2:2164
-5032:2:2169
-5033:2:2173
-5034:2:2174
-5035:2:2181
-5036:2:2182
-5037:2:2193
-5038:2:2194
-5039:2:2195
-5040:2:2193
-5041:2:2194
-5042:2:2195
-5043:2:2206
-5044:2:2211
-5045:2:2212
-5046:0:4365
-5047:2:2224
-5048:0:4365
-5049:3:3657
-5050:0:4365
-5051:2:2226
-5052:0:4365
-5053:3:3658
-5054:0:4365
-5055:2:2230
-5056:0:4365
-5057:3:3657
-5058:0:4365
-5059:2:2235
-5060:2:2239
-5061:2:2240
-5062:2:2248
-5063:2:2249
-5064:2:2253
-5065:2:2254
-5066:2:2248
-5067:2:2249
-5068:2:2250
-5069:2:2262
-5070:2:2267
-5071:2:2271
-5072:2:2272
-5073:2:2279
-5074:2:2280
-5075:2:2291
-5076:2:2292
-5077:2:2293
-5078:2:2291
-5079:2:2292
-5080:2:2293
-5081:2:2304
-5082:2:2309
-5083:2:2310
-5084:0:4365
-5085:3:3658
-5086:0:4365
-5087:2:2322
-5088:0:4365
-5089:2:1169
-5090:0:4365
-5091:3:3657
-5092:0:4365
-5093:2:1170
-5094:0:4365
-5095:3:3658
-5096:0:4365
-5097:3:3659
-5098:0:4365
-5099:3:3665
-5100:0:4365
-5101:3:3666
-5102:0:4365
-5103:3:3667
-5104:0:4365
-5105:3:3668
-5106:0:4365
-5107:3:3669
-5108:3:3673
-5109:3:3674
-5110:3:3682
-5111:3:3683
-5112:3:3687
-5113:3:3688
-5114:3:3682
-5115:3:3683
-5116:3:3687
-5117:3:3688
-5118:3:3696
-5119:3:3701
-5120:3:3705
-5121:3:3706
-5122:3:3713
-5123:3:3714
-5124:3:3725
-5125:3:3726
-5126:3:3727
-5127:3:3725
-5128:3:3726
-5129:3:3727
-5130:3:3738
-5131:3:3743
-5132:3:3744
-5133:0:4365
-5134:3:3756
-5135:0:4365
-5136:3:3757
-5137:0:4365
-5138:2:1173
-5139:0:4365
-5140:3:3758
-5141:0:4365
-5142:2:1179
-5143:0:4365
-5144:2:1180
-5145:0:4365
-5146:3:3757
-5147:0:4365
-5148:2:1181
-5149:2:1185
-5150:2:1186
-5151:2:1194
-5152:2:1195
-5153:2:1199
-5154:2:1200
-5155:2:1194
-5156:2:1195
-5157:2:1199
-5158:2:1200
-5159:2:1208
-5160:2:1213
-5161:2:1217
-5162:2:1218
-5163:2:1225
-5164:2:1226
-5165:2:1237
-5166:2:1238
-5167:2:1239
-5168:2:1237
-5169:2:1238
-5170:2:1239
-5171:2:1250
-5172:2:1255
-5173:2:1256
-5174:0:4365
-5175:3:3758
-5176:0:4365
-5177:2:1268
-5178:0:4365
-5179:3:3757
-5180:0:4365
-5181:2:1270
-5182:0:4365
-5183:3:3758
-5184:0:4365
-5185:2:1271
-5186:2:1275
-5187:2:1276
-5188:2:1284
-5189:2:1285
-5190:2:1289
-5191:2:1290
-5192:2:1284
-5193:2:1285
-5194:2:1289
-5195:2:1290
-5196:2:1298
-5197:2:1303
-5198:2:1307
-5199:2:1308
-5200:2:1315
-5201:2:1316
-5202:2:1327
-5203:2:1328
-5204:2:1329
-5205:2:1327
-5206:2:1328
-5207:2:1329
-5208:2:1340
-5209:2:1345
-5210:2:1346
-5211:0:4365
-5212:2:1358
-5213:0:4365
-5214:2:1360
-5215:0:4365
-5216:3:3757
-5217:0:4365
-5218:2:1361
-5219:0:4365
-5220:3:3758
-5221:0:4365
-5222:2:1362
-5223:2:1366
-5224:2:1367
-5225:2:1375
-5226:2:1376
-5227:2:1380
-5228:2:1381
-5229:2:1375
-5230:2:1376
-5231:2:1380
-5232:2:1381
-5233:2:1389
-5234:2:1394
-5235:2:1398
-5236:2:1399
-5237:2:1406
-5238:2:1407
-5239:2:1418
-5240:2:1419
-5241:2:1420
-5242:2:1418
-5243:2:1419
-5244:2:1420
-5245:2:1431
-5246:2:1436
-5247:2:1437
-5248:0:4365
-5249:2:1449
-5250:0:4365
-5251:3:3757
-5252:0:4365
-5253:2:1451
-5254:0:4365
-5255:3:3758
-5256:0:4365
-5257:2:1652
-5258:0:4365
-5259:2:1653
-5260:0:4365
-5261:2:1657
-5262:0:4365
-5263:2:1180
-5264:0:4365
-5265:3:3757
-5266:0:4365
-5267:2:1181
-5268:2:1185
-5269:2:1186
-5270:2:1194
-5271:2:1195
-5272:2:1199
-5273:2:1200
-5274:2:1194
-5275:2:1195
-5276:2:1196
-5277:2:1208
-5278:2:1213
-5279:2:1217
-5280:2:1218
-5281:2:1225
-5282:2:1226
-5283:2:1237
-5284:2:1238
-5285:2:1239
-5286:2:1237
-5287:2:1238
-5288:2:1239
-5289:2:1250
-5290:2:1255
-5291:2:1256
-5292:0:4365
-5293:3:3758
-5294:0:4365
-5295:2:1268
-5296:0:4365
-5297:3:3757
-5298:0:4365
-5299:2:1270
-5300:0:4365
-5301:3:3758
-5302:0:4365
-5303:2:1271
-5304:2:1275
-5305:2:1276
-5306:2:1284
-5307:2:1285
-5308:2:1289
-5309:2:1290
-5310:2:1284
-5311:2:1285
-5312:2:1289
-5313:2:1290
-5314:2:1298
-5315:2:1303
-5316:2:1307
-5317:2:1308
-5318:2:1315
-5319:2:1316
-5320:2:1327
-5321:2:1328
-5322:2:1329
-5323:2:1327
-5324:2:1328
-5325:2:1329
-5326:2:1340
-5327:2:1345
-5328:2:1346
-5329:0:4365
-5330:2:1358
-5331:0:4365
-5332:2:1454
-5333:0:4365
-5334:3:3757
-5335:0:4365
-5336:2:1455
-5337:0:4365
-5338:3:3758
-5339:0:4365
-5340:2:1652
-5341:0:4365
-5342:2:1653
-5343:0:4365
-5344:2:1657
-5345:0:4365
-5346:2:1660
-5347:0:4365
-5348:3:3757
-5349:0:4365
-5350:2:1665
-5351:2:1669
-5352:2:1670
-5353:2:1678
-5354:2:1679
-5355:2:1683
-5356:2:1684
-5357:2:1678
-5358:2:1679
-5359:2:1680
-5360:2:1692
-5361:2:1697
-5362:2:1701
-5363:2:1702
-5364:2:1709
-5365:2:1710
-5366:2:1721
-5367:2:1722
-5368:2:1723
-5369:2:1721
-5370:2:1722
-5371:2:1723
-5372:2:1734
-5373:2:1739
-5374:2:1740
-5375:0:4365
-5376:3:3758
-5377:0:4365
-5378:2:1752
-5379:0:4365
-5380:3:3757
-5381:0:4365
-5382:2:1754
-5383:0:4365
-5384:3:3758
-5385:0:4365
-5386:2:1755
-5387:2:1759
-5388:2:1760
-5389:2:1768
-5390:2:1769
-5391:2:1773
-5392:2:1774
-5393:2:1768
-5394:2:1769
-5395:2:1773
-5396:2:1774
-5397:2:1782
-5398:2:1787
-5399:2:1791
-5400:2:1792
-5401:2:1799
-5402:2:1800
-5403:2:1811
-5404:2:1812
-5405:2:1813
-5406:2:1811
-5407:2:1812
-5408:2:1813
-5409:2:1824
-5410:2:1829
-5411:2:1830
-5412:0:4365
-5413:2:1842
-5414:0:4365
-5415:3:3757
-5416:0:4365
-5417:2:1844
-5418:0:4365
-5419:3:3758
-5420:0:4365
-5421:2:1845
-5422:2:1849
-5423:2:1850
-5424:2:1858
-5425:2:1859
-5426:2:1863
-5427:2:1864
-5428:2:1858
-5429:2:1859
-5430:2:1863
-5431:2:1864
-5432:2:1872
-5433:2:1877
-5434:2:1881
-5435:2:1882
-5436:2:1889
-5437:2:1890
-5438:2:1901
-5439:2:1902
-5440:2:1903
-5441:2:1901
-5442:2:1902
-5443:2:1903
-5444:2:1914
-5445:2:1919
-5446:2:1920
-5447:0:4365
-5448:2:1932
-5449:0:4365
-5450:3:3757
-5451:0:4365
-5452:2:1934
-5453:0:4365
-5454:3:3758
-5455:0:4365
-5456:2:1935
-5457:0:4365
-5458:2:1936
-5459:0:4365
-5460:2:2129
-5461:0:4365
-5462:2:2130
-5463:0:4365
-5464:2:2134
-5465:0:4365
-5466:3:3757
-5467:0:4365
-5468:2:2136
-5469:0:4365
-5470:3:3758
-5471:0:4365
-5472:2:2137
-5473:2:2141
-5474:2:2142
-5475:2:2150
-5476:2:2151
-5477:2:2155
-5478:2:2156
-5479:2:2150
-5480:2:2151
-5481:2:2155
-5482:2:2156
-5483:2:2164
-5484:2:2169
-5485:2:2173
-5486:2:2174
-5487:2:2181
-5488:2:2182
-5489:2:2193
-5490:2:2194
-5491:2:2195
-5492:2:2193
-5493:2:2194
-5494:2:2195
-5495:2:2206
-5496:2:2211
-5497:2:2212
-5498:0:4365
-5499:2:2224
-5500:0:4365
-5501:3:3757
-5502:0:4365
-5503:2:2226
-5504:0:4365
-5505:3:3758
-5506:0:4365
-5507:2:1936
-5508:0:4365
-5509:2:2129
-5510:0:4365
-5511:2:2130
-5512:0:4365
-5513:2:2134
-5514:0:4365
-5515:3:3757
-5516:0:4365
-5517:2:2136
-5518:0:4365
-5519:3:3758
-5520:0:4365
-5521:2:2137
-5522:2:2141
-5523:2:2142
-5524:2:2150
-5525:2:2151
-5526:2:2155
-5527:2:2156
-5528:2:2150
-5529:2:2151
-5530:2:2152
-5531:2:2164
-5532:2:2169
-5533:2:2173
-5534:2:2174
-5535:2:2181
-5536:2:2182
-5537:2:2193
-5538:2:2194
-5539:2:2195
-5540:2:2193
-5541:2:2194
-5542:2:2195
-5543:2:2206
-5544:2:2211
-5545:2:2212
-5546:0:4365
-5547:2:2224
-5548:0:4365
-5549:3:3757
-5550:0:4365
-5551:2:2226
-5552:0:4365
-5553:3:3758
-5554:0:4365
-5555:2:2230
-5556:0:4365
-5557:3:3757
-5558:0:4365
-5559:2:2235
-5560:2:2239
-5561:2:2240
-5562:2:2248
-5563:2:2249
-5564:2:2253
-5565:2:2254
-5566:2:2248
-5567:2:2249
-5568:2:2250
-5569:2:2262
-5570:2:2267
-5571:2:2271
-5572:2:2272
-5573:2:2279
-5574:2:2280
-5575:2:2291
-5576:2:2292
-5577:2:2293
-5578:2:2291
-5579:2:2292
-5580:2:2293
-5581:2:2304
-5582:2:2309
-5583:2:2310
-5584:0:4365
-5585:3:3758
-5586:0:4365
-5587:2:2322
-5588:0:4365
-5589:2:1169
-5590:0:4365
-5591:3:3757
-5592:0:4365
-5593:2:1170
-5594:0:4365
-5595:3:3758
-5596:0:4365
-5597:3:3759
-5598:0:4365
-5599:3:3972
-5600:0:4365
-5601:3:3980
-5602:0:4365
-5603:3:3981
-5604:3:3985
-5605:3:3986
-5606:3:3994
-5607:3:3995
-5608:3:3999
-5609:3:4000
-5610:3:3994
-5611:3:3995
-5612:3:3999
-5613:3:4000
-5614:3:4008
-5615:3:4013
-5616:3:4017
-5617:3:4018
-5618:3:4025
-5619:3:4026
-5620:3:4037
-5621:3:4038
-5622:3:4039
-5623:3:4037
-5624:3:4038
-5625:3:4039
-5626:3:4050
-5627:3:4055
-5628:3:4056
-5629:0:4365
-5630:3:4068
-5631:0:4365
-5632:3:4069
-5633:0:4365
-5634:2:1173
-5635:0:4365
-5636:3:4070
-5637:0:4365
-5638:2:1179
-5639:0:4365
-5640:2:1180
-5641:0:4365
-5642:3:4069
-5643:0:4365
-5644:2:1181
-5645:2:1185
-5646:2:1186
-5647:2:1194
-5648:2:1195
-5649:2:1199
-5650:2:1200
-5651:2:1194
-5652:2:1195
-5653:2:1199
-5654:2:1200
-5655:2:1208
-5656:2:1213
-5657:2:1217
-5658:2:1218
-5659:2:1225
-5660:2:1226
-5661:2:1237
-5662:2:1238
-5663:2:1239
-5664:2:1237
-5665:2:1238
-5666:2:1239
-5667:2:1250
-5668:2:1255
-5669:2:1256
-5670:0:4365
-5671:3:4070
-5672:0:4365
-5673:2:1268
-5674:0:4365
-5675:3:4069
-5676:0:4365
-5677:2:1270
-5678:0:4365
-5679:3:4070
-5680:0:4365
-5681:2:1271
-5682:2:1275
-5683:2:1276
-5684:2:1284
-5685:2:1285
-5686:2:1289
-5687:2:1290
-5688:2:1284
-5689:2:1285
-5690:2:1289
-5691:2:1290
-5692:2:1298
-5693:2:1303
-5694:2:1307
-5695:2:1308
-5696:2:1315
-5697:2:1316
-5698:2:1327
-5699:2:1328
-5700:2:1329
-5701:2:1327
-5702:2:1328
-5703:2:1329
-5704:2:1340
-5705:2:1345
-5706:2:1346
-5707:0:4365
-5708:2:1358
-5709:0:4365
-5710:2:1360
-5711:0:4365
-5712:3:4069
-5713:0:4365
-5714:2:1361
-5715:0:4365
-5716:3:4070
-5717:0:4365
-5718:2:1362
-5719:2:1366
-5720:2:1367
-5721:2:1375
-5722:2:1376
-5723:2:1380
-5724:2:1381
-5725:2:1375
-5726:2:1376
-5727:2:1380
-5728:2:1381
-5729:2:1389
-5730:2:1394
-5731:2:1398
-5732:2:1399
-5733:2:1406
-5734:2:1407
-5735:2:1418
-5736:2:1419
-5737:2:1420
-5738:2:1418
-5739:2:1419
-5740:2:1420
-5741:2:1431
-5742:2:1436
-5743:2:1437
-5744:0:4365
-5745:2:1449
-5746:0:4365
-5747:3:4069
-5748:0:4365
-5749:2:1451
-5750:0:4365
-5751:3:4070
-5752:0:4365
-5753:2:1652
-5754:0:4365
-5755:2:1653
-5756:0:4365
-5757:2:1657
-5758:0:4365
-5759:2:1180
-5760:0:4365
-5761:3:4069
-5762:0:4365
-5763:2:1181
-5764:2:1185
-5765:2:1186
-5766:2:1194
-5767:2:1195
-5768:2:1199
-5769:2:1200
-5770:2:1194
-5771:2:1195
-5772:2:1196
-5773:2:1208
-5774:2:1213
-5775:2:1217
-5776:2:1218
-5777:2:1225
-5778:2:1226
-5779:2:1237
-5780:2:1238
-5781:2:1239
-5782:2:1237
-5783:2:1238
-5784:2:1239
-5785:2:1250
-5786:2:1255
-5787:2:1256
-5788:0:4365
-5789:3:4070
-5790:0:4365
-5791:2:1268
-5792:0:4365
-5793:3:4069
-5794:0:4365
-5795:2:1270
-5796:0:4365
-5797:3:4070
-5798:0:4365
-5799:2:1271
-5800:2:1275
-5801:2:1276
-5802:2:1284
-5803:2:1285
-5804:2:1289
-5805:2:1290
-5806:2:1284
-5807:2:1285
-5808:2:1289
-5809:2:1290
-5810:2:1298
-5811:2:1303
-5812:2:1307
-5813:2:1308
-5814:2:1315
-5815:2:1316
-5816:2:1327
-5817:2:1328
-5818:2:1329
-5819:2:1327
-5820:2:1328
-5821:2:1329
-5822:2:1340
-5823:2:1345
-5824:2:1346
-5825:0:4365
-5826:2:1358
-5827:0:4365
-5828:2:1454
-5829:0:4365
-5830:3:4069
-5831:0:4365
-5832:2:1455
-5833:0:4365
-5834:3:4070
-5835:0:4365
-5836:2:1652
-5837:0:4365
-5838:2:1653
-5839:0:4365
-5840:2:1657
-5841:0:4365
-5842:2:1660
-5843:0:4365
-5844:3:4069
-5845:0:4365
-5846:2:1665
-5847:2:1669
-5848:2:1670
-5849:2:1678
-5850:2:1679
-5851:2:1683
-5852:2:1684
-5853:2:1678
-5854:2:1679
-5855:2:1680
-5856:2:1692
-5857:2:1697
-5858:2:1701
-5859:2:1702
-5860:2:1709
-5861:2:1710
-5862:2:1721
-5863:2:1722
-5864:2:1723
-5865:2:1721
-5866:2:1722
-5867:2:1723
-5868:2:1734
-5869:2:1739
-5870:2:1740
-5871:0:4365
-5872:3:4070
-5873:0:4365
-5874:2:1752
-5875:0:4365
-5876:3:4069
-5877:0:4365
-5878:2:1754
-5879:0:4365
-5880:3:4070
-5881:0:4365
-5882:2:1755
-5883:2:1759
-5884:2:1760
-5885:2:1768
-5886:2:1769
-5887:2:1773
-5888:2:1774
-5889:2:1768
-5890:2:1769
-5891:2:1773
-5892:2:1774
-5893:2:1782
-5894:2:1787
-5895:2:1791
-5896:2:1792
-5897:2:1799
-5898:2:1800
-5899:2:1811
-5900:2:1812
-5901:2:1813
-5902:2:1811
-5903:2:1812
-5904:2:1813
-5905:2:1824
-5906:2:1829
-5907:2:1830
-5908:0:4365
-5909:2:1842
-5910:0:4365
-5911:3:4069
-5912:0:4365
-5913:2:1844
-5914:0:4365
-5915:3:4070
-5916:0:4365
-5917:2:1845
-5918:2:1849
-5919:2:1850
-5920:2:1858
-5921:2:1859
-5922:2:1863
-5923:2:1864
-5924:2:1858
-5925:2:1859
-5926:2:1863
-5927:2:1864
-5928:2:1872
-5929:2:1877
-5930:2:1881
-5931:2:1882
-5932:2:1889
-5933:2:1890
-5934:2:1901
-5935:2:1902
-5936:2:1903
-5937:2:1901
-5938:2:1902
-5939:2:1903
-5940:2:1914
-5941:2:1919
-5942:2:1920
-5943:0:4365
-5944:2:1932
-5945:0:4365
-5946:3:4069
-5947:0:4365
-5948:2:1934
-5949:0:4365
-5950:3:4070
-5951:0:4365
-5952:2:1935
-5953:0:4365
-5954:2:1936
-5955:0:4365
-5956:2:2129
-5957:0:4365
-5958:2:2130
-5959:0:4365
-5960:2:2134
-5961:0:4365
-5962:3:4069
-5963:0:4365
-5964:2:2136
-5965:0:4365
-5966:3:4070
-5967:0:4365
-5968:2:2137
-5969:2:2141
-5970:2:2142
-5971:2:2150
-5972:2:2151
-5973:2:2155
-5974:2:2156
-5975:2:2150
-5976:2:2151
-5977:2:2155
-5978:2:2156
-5979:2:2164
-5980:2:2169
-5981:2:2173
-5982:2:2174
-5983:2:2181
-5984:2:2182
-5985:2:2193
-5986:2:2194
-5987:2:2195
-5988:2:2193
-5989:2:2194
-5990:2:2195
-5991:2:2206
-5992:2:2211
-5993:2:2212
-5994:0:4365
-5995:2:2224
-5996:0:4365
-5997:3:4069
-5998:0:4365
-5999:2:2226
-6000:0:4365
-6001:3:4070
-6002:0:4365
-6003:2:1936
-6004:0:4365
-6005:2:2129
-6006:0:4365
-6007:2:2130
-6008:0:4365
-6009:2:2134
-6010:0:4365
-6011:3:4069
-6012:0:4365
-6013:2:2136
-6014:0:4365
-6015:3:4070
-6016:0:4365
-6017:2:2137
-6018:2:2141
-6019:2:2142
-6020:2:2150
-6021:2:2151
-6022:2:2155
-6023:2:2156
-6024:2:2150
-6025:2:2151
-6026:2:2152
-6027:2:2164
-6028:2:2169
-6029:2:2173
-6030:2:2174
-6031:2:2181
-6032:2:2182
-6033:2:2193
-6034:2:2194
-6035:2:2195
-6036:2:2193
-6037:2:2194
-6038:2:2195
-6039:2:2206
-6040:2:2211
-6041:2:2212
-6042:0:4365
-6043:2:2224
-6044:0:4365
-6045:3:4069
-6046:0:4365
-6047:2:2226
-6048:0:4365
-6049:3:4070
-6050:0:4365
-6051:2:2230
-6052:0:4365
-6053:3:4069
-6054:0:4365
-6055:2:2235
-6056:2:2239
-6057:2:2240
-6058:2:2248
-6059:2:2249
-6060:2:2253
-6061:2:2254
-6062:2:2248
-6063:2:2249
-6064:2:2250
-6065:2:2262
-6066:2:2267
-6067:2:2271
-6068:2:2272
-6069:2:2279
-6070:2:2280
-6071:2:2291
-6072:2:2292
-6073:2:2293
-6074:2:2291
-6075:2:2292
-6076:2:2293
-6077:2:2304
-6078:2:2309
-6079:2:2310
-6080:0:4365
-6081:3:4070
-6082:0:4365
-6083:2:2322
-6084:0:4365
-6085:2:1169
-6086:0:4365
-6087:3:4069
-6088:0:4365
-6089:2:1170
-6090:0:4365
-6091:3:4070
-6092:0:4365
-6093:3:4071
-6094:0:4365
-6095:3:4081
-6096:0:4365
-6097:3:3666
-6098:0:4365
-6099:3:3667
-6100:0:4365
-6101:3:3668
-6102:0:4365
-6103:3:3669
-6104:3:3673
-6105:3:3674
-6106:3:3682
-6107:3:3683
-6108:3:3687
-6109:3:3688
-6110:3:3682
-6111:3:3683
-6112:3:3687
-6113:3:3688
-6114:3:3696
-6115:3:3701
-6116:3:3705
-6117:3:3706
-6118:3:3713
-6119:3:3714
-6120:3:3725
-6121:3:3726
-6122:3:3727
-6123:3:3725
-6124:3:3726
-6125:3:3727
-6126:3:3738
-6127:3:3743
-6128:3:3744
-6129:0:4365
-6130:3:3756
-6131:0:4365
-6132:3:3757
-6133:0:4365
-6134:2:1173
-6135:0:4365
-6136:3:3758
-6137:0:4365
-6138:2:1179
-6139:0:4365
-6140:2:1180
-6141:0:4365
-6142:3:3757
-6143:0:4365
-6144:2:1181
-6145:2:1185
-6146:2:1186
-6147:2:1194
-6148:2:1195
-6149:2:1199
-6150:2:1200
-6151:2:1194
-6152:2:1195
-6153:2:1199
-6154:2:1200
-6155:2:1208
-6156:2:1213
-6157:2:1217
-6158:2:1218
-6159:2:1225
-6160:2:1226
-6161:2:1237
-6162:2:1238
-6163:2:1239
-6164:2:1237
-6165:2:1238
-6166:2:1239
-6167:2:1250
-6168:2:1255
-6169:2:1256
-6170:0:4365
-6171:3:3758
-6172:0:4365
-6173:2:1268
-6174:0:4365
-6175:3:3757
-6176:0:4365
-6177:2:1270
-6178:0:4365
-6179:3:3758
-6180:0:4365
-6181:2:1271
-6182:2:1275
-6183:2:1276
-6184:2:1284
-6185:2:1285
-6186:2:1289
-6187:2:1290
-6188:2:1284
-6189:2:1285
-6190:2:1289
-6191:2:1290
-6192:2:1298
-6193:2:1303
-6194:2:1307
-6195:2:1308
-6196:2:1315
-6197:2:1316
-6198:2:1327
-6199:2:1328
-6200:2:1329
-6201:2:1327
-6202:2:1328
-6203:2:1329
-6204:2:1340
-6205:2:1345
-6206:2:1346
-6207:0:4365
-6208:2:1358
-6209:0:4365
-6210:2:1360
-6211:0:4365
-6212:3:3757
-6213:0:4365
-6214:2:1361
-6215:0:4365
-6216:3:3758
-6217:0:4365
-6218:2:1362
-6219:2:1366
-6220:2:1367
-6221:2:1375
-6222:2:1376
-6223:2:1380
-6224:2:1381
-6225:2:1375
-6226:2:1376
-6227:2:1380
-6228:2:1381
-6229:2:1389
-6230:2:1394
-6231:2:1398
-6232:2:1399
-6233:2:1406
-6234:2:1407
-6235:2:1418
-6236:2:1419
-6237:2:1420
-6238:2:1418
-6239:2:1419
-6240:2:1420
-6241:2:1431
-6242:2:1436
-6243:2:1437
-6244:0:4365
-6245:2:1449
-6246:0:4365
-6247:3:3757
-6248:0:4365
-6249:2:1451
-6250:0:4365
-6251:3:3758
-6252:0:4365
-6253:2:1652
-6254:0:4365
-6255:2:1653
-6256:0:4365
-6257:2:1657
-6258:0:4365
-6259:2:1180
-6260:0:4365
-6261:3:3757
-6262:0:4365
-6263:2:1181
-6264:2:1185
-6265:2:1186
-6266:2:1194
-6267:2:1195
-6268:2:1199
-6269:2:1200
-6270:2:1194
-6271:2:1195
-6272:2:1196
-6273:2:1208
-6274:2:1213
-6275:2:1217
-6276:2:1218
-6277:2:1225
-6278:2:1226
-6279:2:1237
-6280:2:1238
-6281:2:1239
-6282:2:1237
-6283:2:1238
-6284:2:1239
-6285:2:1250
-6286:2:1255
-6287:2:1256
-6288:0:4365
-6289:3:3758
-6290:0:4365
-6291:2:1268
-6292:0:4365
-6293:3:3757
-6294:0:4365
-6295:2:1270
-6296:0:4365
-6297:3:3758
-6298:0:4365
-6299:2:1271
-6300:2:1275
-6301:2:1276
-6302:2:1284
-6303:2:1285
-6304:2:1289
-6305:2:1290
-6306:2:1284
-6307:2:1285
-6308:2:1289
-6309:2:1290
-6310:2:1298
-6311:2:1303
-6312:2:1307
-6313:2:1308
-6314:2:1315
-6315:2:1316
-6316:2:1327
-6317:2:1328
-6318:2:1329
-6319:2:1327
-6320:2:1328
-6321:2:1329
-6322:2:1340
-6323:2:1345
-6324:2:1346
-6325:0:4365
-6326:2:1358
-6327:0:4365
-6328:2:1454
-6329:0:4365
-6330:3:3757
-6331:0:4365
-6332:2:1455
-6333:0:4365
-6334:3:3758
-6335:0:4365
-6336:2:1652
-6337:0:4365
-6338:2:1653
-6339:0:4365
-6340:2:1657
-6341:0:4365
-6342:2:1660
-6343:0:4365
-6344:3:3757
-6345:0:4365
-6346:2:1665
-6347:2:1669
-6348:2:1670
-6349:2:1678
-6350:2:1679
-6351:2:1683
-6352:2:1684
-6353:2:1678
-6354:2:1679
-6355:2:1680
-6356:2:1692
-6357:2:1697
-6358:2:1701
-6359:2:1702
-6360:2:1709
-6361:2:1710
-6362:2:1721
-6363:2:1722
-6364:2:1723
-6365:2:1721
-6366:2:1722
-6367:2:1723
-6368:2:1734
-6369:2:1739
-6370:2:1740
-6371:0:4365
-6372:3:3758
-6373:0:4365
-6374:2:1752
-6375:0:4365
-6376:3:3757
-6377:0:4365
-6378:2:1754
-6379:0:4365
-6380:3:3758
-6381:0:4365
-6382:2:1755
-6383:2:1759
-6384:2:1760
-6385:2:1768
-6386:2:1769
-6387:2:1773
-6388:2:1774
-6389:2:1768
-6390:2:1769
-6391:2:1773
-6392:2:1774
-6393:2:1782
-6394:2:1787
-6395:2:1791
-6396:2:1792
-6397:2:1799
-6398:2:1800
-6399:2:1811
-6400:2:1812
-6401:2:1813
-6402:2:1811
-6403:2:1812
-6404:2:1813
-6405:2:1824
-6406:2:1829
-6407:2:1830
-6408:0:4365
-6409:2:1842
-6410:0:4365
-6411:3:3757
-6412:0:4365
-6413:2:1844
-6414:0:4365
-6415:3:3758
-6416:0:4365
-6417:2:1845
-6418:2:1849
-6419:2:1850
-6420:2:1858
-6421:2:1859
-6422:2:1863
-6423:2:1864
-6424:2:1858
-6425:2:1859
-6426:2:1863
-6427:2:1864
-6428:2:1872
-6429:2:1877
-6430:2:1881
-6431:2:1882
-6432:2:1889
-6433:2:1890
-6434:2:1901
-6435:2:1902
-6436:2:1903
-6437:2:1901
-6438:2:1902
-6439:2:1903
-6440:2:1914
-6441:2:1919
-6442:2:1920
-6443:0:4365
-6444:2:1932
-6445:0:4365
-6446:3:3757
-6447:0:4365
-6448:2:1934
-6449:0:4365
-6450:3:3758
-6451:0:4365
-6452:2:1935
-6453:0:4365
-6454:2:1936
-6455:0:4365
-6456:2:2129
-6457:0:4365
-6458:2:2130
-6459:0:4365
-6460:2:2134
-6461:0:4365
-6462:3:3757
-6463:0:4365
-6464:2:2136
-6465:0:4365
-6466:3:3758
-6467:0:4365
-6468:2:2137
-6469:2:2141
-6470:2:2142
-6471:2:2150
-6472:2:2151
-6473:2:2155
-6474:2:2156
-6475:2:2150
-6476:2:2151
-6477:2:2155
-6478:2:2156
-6479:2:2164
-6480:2:2169
-6481:2:2173
-6482:2:2174
-6483:2:2181
-6484:2:2182
-6485:2:2193
-6486:2:2194
-6487:2:2195
-6488:2:2193
-6489:2:2194
-6490:2:2195
-6491:2:2206
-6492:2:2211
-6493:2:2212
-6494:0:4365
-6495:2:2224
-6496:0:4365
-6497:3:3757
-6498:0:4365
-6499:2:2226
-6500:0:4365
-6501:3:3758
-6502:0:4365
-6503:2:1936
-6504:0:4365
-6505:2:2129
-6506:0:4365
-6507:2:2130
-6508:0:4365
-6509:2:2134
-6510:0:4365
-6511:3:3757
-6512:0:4365
-6513:2:2136
-6514:0:4365
-6515:3:3758
-6516:0:4365
-6517:2:2137
-6518:2:2141
-6519:2:2142
-6520:2:2150
-6521:2:2151
-6522:2:2155
-6523:2:2156
-6524:2:2150
-6525:2:2151
-6526:2:2152
-6527:2:2164
-6528:2:2169
-6529:2:2173
-6530:2:2174
-6531:2:2181
-6532:2:2182
-6533:2:2193
-6534:2:2194
-6535:2:2195
-6536:2:2193
-6537:2:2194
-6538:2:2195
-6539:2:2206
-6540:2:2211
-6541:2:2212
-6542:0:4365
-6543:2:2224
-6544:0:4365
-6545:3:3757
-6546:0:4365
-6547:2:2226
-6548:0:4365
-6549:3:3758
-6550:0:4365
-6551:2:2230
-6552:0:4365
-6553:3:3757
-6554:0:4365
-6555:2:2235
-6556:2:2239
-6557:2:2240
-6558:2:2248
-6559:2:2249
-6560:2:2253
-6561:2:2254
-6562:2:2248
-6563:2:2249
-6564:2:2250
-6565:2:2262
-6566:2:2267
-6567:2:2271
-6568:2:2272
-6569:2:2279
-6570:2:2280
-6571:2:2291
-6572:2:2292
-6573:2:2293
-6574:2:2291
-6575:2:2292
-6576:2:2293
-6577:2:2304
-6578:2:2309
-6579:2:2310
-6580:0:4365
-6581:3:3758
-6582:0:4365
-6583:2:2322
-6584:0:4365
-6585:2:1169
-6586:0:4365
-6587:3:3757
-6588:0:4365
-6589:2:1170
-6590:0:4365
-6591:3:3758
-6592:0:4365
-6593:3:3759
-6594:0:4365
-6595:3:3972
-6596:0:4365
-6597:3:4077
-6598:0:4365
-6599:3:4078
-6600:0:4365
-6601:3:4082
-6602:0:4365
-6603:3:4088
-6604:0:4365
-6605:3:4092
-6606:3:4093
-6607:3:4097
-6608:3:4101
-6609:3:4102
-6610:3:4097
-6611:3:4101
-6612:3:4102
-6613:3:4106
-6614:3:4114
-6615:3:4115
-6616:3:4120
-6617:3:4127
-6618:3:4128
-6619:3:4127
-6620:3:4128
-6621:3:4135
-6622:3:4140
-6623:0:4365
-6624:3:4151
-6625:0:4365
-6626:3:4155
-6627:3:4156
-6628:3:4160
-6629:3:4164
-6630:3:4165
-6631:3:4160
-6632:3:4164
-6633:3:4165
-6634:3:4169
-6635:3:4177
-6636:3:4178
-6637:3:4183
-6638:3:4190
-6639:3:4191
-6640:3:4190
-6641:3:4191
-6642:3:4198
-6643:3:4203
-6644:0:4365
-6645:3:4151
-6646:0:4365
-6647:3:4155
-6648:3:4156
-6649:3:4160
-6650:3:4164
-6651:3:4165
-6652:3:4160
-6653:3:4164
-6654:3:4165
-6655:3:4169
-6656:3:4177
-6657:3:4178
-6658:3:4183
-6659:3:4190
-6660:3:4191
-6661:3:4190
-6662:3:4191
-6663:3:4198
-6664:3:4203
-6665:0:4365
-6666:3:4214
-6667:0:4365
-6668:3:4222
-6669:3:4223
-6670:3:4227
-6671:3:4231
-6672:3:4232
-6673:3:4227
-6674:3:4231
-6675:3:4232
-6676:3:4236
-6677:3:4244
-6678:3:4245
-6679:3:4250
-6680:3:4257
-6681:3:4258
-6682:3:4257
-6683:3:4258
-6684:3:4265
-6685:3:4270
-6686:0:4365
-6687:3:4285
-6688:0:4365
-6689:3:4286
-6690:0:4365
-6691:2:1173
-6692:0:4365
-6693:3:4287
-6694:0:4365
-6695:2:1179
-6696:0:4365
-6697:2:1180
-6698:0:4365
-6699:3:4286
-6700:0:4365
-6701:2:1181
-6702:2:1185
-6703:2:1186
-6704:2:1194
-6705:2:1195
-6706:2:1199
-6707:2:1200
-6708:2:1194
-6709:2:1195
-6710:2:1199
-6711:2:1200
-6712:2:1208
-6713:2:1213
-6714:2:1217
-6715:2:1218
-6716:2:1225
-6717:2:1226
-6718:2:1237
-6719:2:1238
-6720:2:1239
-6721:2:1237
-6722:2:1238
-6723:2:1239
-6724:2:1250
-6725:2:1255
-6726:2:1256
-6727:0:4365
-6728:3:4287
-6729:0:4365
-6730:2:1268
-6731:0:4365
-6732:3:4286
-6733:0:4365
-6734:2:1270
-6735:0:4365
-6736:3:4287
-6737:0:4365
-6738:2:1271
-6739:2:1275
-6740:2:1276
-6741:2:1284
-6742:2:1285
-6743:2:1289
-6744:2:1290
-6745:2:1284
-6746:2:1285
-6747:2:1289
-6748:2:1290
-6749:2:1298
-6750:2:1303
-6751:2:1307
-6752:2:1308
-6753:2:1315
-6754:2:1316
-6755:2:1327
-6756:2:1328
-6757:2:1329
-6758:2:1327
-6759:2:1328
-6760:2:1329
-6761:2:1340
-6762:2:1345
-6763:2:1346
-6764:0:4365
-6765:2:1358
-6766:0:4365
-6767:2:1360
-6768:0:4365
-6769:3:4286
-6770:0:4365
-6771:2:1361
-6772:0:4365
-6773:3:4287
-6774:0:4365
-6775:2:1362
-6776:2:1366
-6777:2:1367
-6778:2:1375
-6779:2:1376
-6780:2:1380
-6781:2:1381
-6782:2:1375
-6783:2:1376
-6784:2:1380
-6785:2:1381
-6786:2:1389
-6787:2:1394
-6788:2:1398
-6789:2:1399
-6790:2:1406
-6791:2:1407
-6792:2:1418
-6793:2:1419
-6794:2:1420
-6795:2:1418
-6796:2:1419
-6797:2:1420
-6798:2:1431
-6799:2:1436
-6800:2:1437
-6801:0:4365
-6802:2:1449
-6803:0:4365
-6804:3:4286
-6805:0:4365
-6806:2:1451
-6807:0:4365
-6808:3:4287
-6809:0:4365
-6810:2:1652
-6811:0:4365
-6812:2:1653
-6813:0:4365
-6814:2:1657
-6815:0:4365
-6816:2:1180
-6817:0:4365
-6818:3:4286
-6819:0:4365
-6820:2:1181
-6821:2:1185
-6822:2:1186
-6823:2:1194
-6824:2:1195
-6825:2:1199
-6826:2:1200
-6827:2:1194
-6828:2:1195
-6829:2:1196
-6830:2:1208
-6831:2:1213
-6832:2:1217
-6833:2:1218
-6834:2:1225
-6835:2:1226
-6836:2:1237
-6837:2:1238
-6838:2:1239
-6839:2:1237
-6840:2:1238
-6841:2:1239
-6842:2:1250
-6843:2:1255
-6844:2:1256
-6845:0:4365
-6846:3:4287
-6847:0:4365
-6848:2:1268
-6849:0:4365
-6850:3:4286
-6851:0:4365
-6852:2:1270
-6853:0:4365
-6854:3:4287
-6855:0:4365
-6856:2:1271
-6857:2:1275
-6858:2:1276
-6859:2:1284
-6860:2:1285
-6861:2:1289
-6862:2:1290
-6863:2:1284
-6864:2:1285
-6865:2:1289
-6866:2:1290
-6867:2:1298
-6868:2:1303
-6869:2:1307
-6870:2:1308
-6871:2:1315
-6872:2:1316
-6873:2:1327
-6874:2:1328
-6875:2:1329
-6876:2:1327
-6877:2:1328
-6878:2:1329
-6879:2:1340
-6880:2:1345
-6881:2:1346
-6882:0:4365
-6883:2:1358
-6884:0:4365
-6885:2:1454
-6886:0:4365
-6887:3:4286
-6888:0:4365
-6889:2:1455
-6890:0:4365
-6891:3:4287
-6892:0:4365
-6893:2:1652
-6894:0:4365
-6895:2:1653
-6896:0:4365
-6897:2:1657
-6898:0:4365
-6899:2:1660
-6900:0:4365
-6901:3:4286
-6902:0:4365
-6903:2:1665
-6904:2:1669
-6905:2:1670
-6906:2:1678
-6907:2:1679
-6908:2:1683
-6909:2:1684
-6910:2:1678
-6911:2:1679
-6912:2:1680
-6913:2:1692
-6914:2:1697
-6915:2:1701
-6916:2:1702
-6917:2:1709
-6918:2:1710
-6919:2:1721
-6920:2:1722
-6921:2:1723
-6922:2:1721
-6923:2:1722
-6924:2:1723
-6925:2:1734
-6926:2:1739
-6927:2:1740
-6928:0:4365
-6929:3:4287
-6930:0:4365
-6931:2:1752
-6932:0:4365
-6933:3:4286
-6934:0:4365
-6935:2:1754
-6936:0:4365
-6937:3:4287
-6938:0:4365
-6939:2:1755
-6940:2:1759
-6941:2:1760
-6942:2:1768
-6943:2:1769
-6944:2:1773
-6945:2:1774
-6946:2:1768
-6947:2:1769
-6948:2:1773
-6949:2:1774
-6950:2:1782
-6951:2:1787
-6952:2:1791
-6953:2:1792
-6954:2:1799
-6955:2:1800
-6956:2:1811
-6957:2:1812
-6958:2:1813
-6959:2:1811
-6960:2:1812
-6961:2:1813
-6962:2:1824
-6963:2:1829
-6964:2:1830
-6965:0:4365
-6966:2:1842
-6967:0:4365
-6968:3:4286
-6969:0:4365
-6970:2:1844
-6971:0:4365
-6972:3:4287
-6973:0:4365
-6974:2:1845
-6975:2:1849
-6976:2:1850
-6977:2:1858
-6978:2:1859
-6979:2:1863
-6980:2:1864
-6981:2:1858
-6982:2:1859
-6983:2:1863
-6984:2:1864
-6985:2:1872
-6986:2:1877
-6987:2:1881
-6988:2:1882
-6989:2:1889
-6990:2:1890
-6991:2:1901
-6992:2:1902
-6993:2:1903
-6994:2:1901
-6995:2:1902
-6996:2:1903
-6997:2:1914
-6998:2:1919
-6999:2:1920
-7000:0:4365
-7001:2:1932
-7002:0:4365
-7003:3:4286
-7004:0:4365
-7005:2:1934
-7006:0:4365
-7007:3:4287
-7008:0:4365
-7009:2:1935
-7010:0:4365
-7011:2:1936
-7012:0:4365
-7013:2:2129
-7014:0:4365
-7015:2:2130
-7016:0:4365
-7017:2:2134
-7018:0:4365
-7019:3:4286
-7020:0:4365
-7021:2:2136
-7022:0:4365
-7023:3:4287
-7024:0:4365
-7025:2:2137
-7026:2:2141
-7027:2:2142
-7028:2:2150
-7029:2:2151
-7030:2:2155
-7031:2:2156
-7032:2:2150
-7033:2:2151
-7034:2:2155
-7035:2:2156
-7036:2:2164
-7037:2:2169
-7038:2:2173
-7039:2:2174
-7040:2:2181
-7041:2:2182
-7042:2:2193
-7043:2:2194
-7044:2:2195
-7045:2:2193
-7046:2:2194
-7047:2:2195
-7048:2:2206
-7049:2:2211
-7050:2:2212
-7051:0:4365
-7052:2:2224
-7053:0:4365
-7054:3:4286
-7055:0:4365
-7056:2:2226
-7057:0:4365
-7058:3:4287
-7059:0:4365
-7060:2:1936
-7061:0:4365
-7062:2:2129
-7063:0:4365
-7064:2:2130
-7065:0:4365
-7066:2:2134
-7067:0:4365
-7068:3:4286
-7069:0:4365
-7070:2:2136
-7071:0:4365
-7072:3:4287
-7073:0:4365
-7074:2:2137
-7075:2:2141
-7076:2:2142
-7077:2:2150
-7078:2:2151
-7079:2:2155
-7080:2:2156
-7081:2:2150
-7082:2:2151
-7083:2:2152
-7084:2:2164
-7085:2:2169
-7086:2:2173
-7087:2:2174
-7088:2:2181
-7089:2:2182
-7090:2:2193
-7091:2:2194
-7092:2:2195
-7093:2:2193
-7094:2:2194
-7095:2:2195
-7096:2:2206
-7097:2:2211
-7098:2:2212
-7099:0:4365
-7100:2:2224
-7101:0:4365
-7102:3:4286
-7103:0:4365
-7104:2:2226
-7105:0:4365
-7106:3:4287
-7107:0:4365
-7108:2:2230
-7109:0:4365
-7110:3:4286
-7111:0:4365
-7112:2:2235
-7113:2:2239
-7114:2:2240
-7115:2:2248
-7116:2:2249
-7117:2:2253
-7118:2:2254
-7119:2:2248
-7120:2:2249
-7121:2:2250
-7122:2:2262
-7123:2:2267
-7124:2:2271
-7125:2:2272
-7126:2:2279
-7127:2:2280
-7128:2:2291
-7129:2:2292
-7130:2:2293
-7131:2:2291
-7132:2:2292
-7133:2:2293
-7134:2:2304
-7135:2:2309
-7136:2:2310
-7137:0:4365
-7138:3:4287
-7139:0:4365
-7140:2:2322
-7141:0:4365
-7142:2:1169
-7143:0:4365
-7144:3:4286
-7145:0:4365
-7146:2:1170
-7147:0:4365
-7148:3:4287
-7149:0:4365
-7150:3:4288
-7151:0:4365
-7152:3:4294
-7153:0:4365
-7154:3:4295
-7155:0:4365
-7156:3:2338
-7157:0:4365
-7158:3:2339
-7159:3:2343
-7160:3:2344
-7161:3:2352
-7162:3:2353
-7163:3:2357
-7164:3:2358
-7165:3:2352
-7166:3:2353
-7167:3:2357
-7168:3:2358
-7169:3:2366
-7170:3:2371
-7171:3:2375
-7172:3:2376
-7173:3:2383
-7174:3:2384
-7175:3:2395
-7176:3:2396
-7177:3:2397
-7178:3:2395
-7179:3:2396
-7180:3:2397
-7181:3:2408
-7182:3:2413
-7183:3:2414
-7184:0:4365
-7185:3:2426
-7186:0:4365
-7187:3:2427
-7188:0:4365
-7189:2:1173
-7190:0:4365
-7191:3:2428
-7192:0:4365
-7193:2:1179
-7194:0:4365
-7195:2:1180
-7196:0:4365
-7197:3:2427
-7198:0:4365
-7199:2:1181
-7200:2:1185
-7201:2:1186
-7202:2:1194
-7203:2:1195
-7204:2:1199
-7205:2:1200
-7206:2:1194
-7207:2:1195
-7208:2:1199
-7209:2:1200
-7210:2:1208
-7211:2:1213
-7212:2:1217
-7213:2:1218
-7214:2:1225
-7215:2:1226
-7216:2:1237
-7217:2:1238
-7218:2:1239
-7219:2:1237
-7220:2:1238
-7221:2:1239
-7222:2:1250
-7223:2:1255
-7224:2:1256
-7225:0:4365
-7226:3:2428
-7227:0:4365
-7228:2:1268
-7229:0:4365
-7230:3:2427
-7231:0:4365
-7232:2:1270
-7233:0:4365
-7234:3:2428
-7235:0:4365
-7236:2:1271
-7237:2:1275
-7238:2:1276
-7239:2:1284
-7240:2:1285
-7241:2:1289
-7242:2:1290
-7243:2:1284
-7244:2:1285
-7245:2:1289
-7246:2:1290
-7247:2:1298
-7248:2:1303
-7249:2:1307
-7250:2:1308
-7251:2:1315
-7252:2:1316
-7253:2:1327
-7254:2:1328
-7255:2:1329
-7256:2:1327
-7257:2:1328
-7258:2:1329
-7259:2:1340
-7260:2:1345
-7261:2:1346
-7262:0:4365
-7263:2:1358
-7264:0:4365
-7265:2:1360
-7266:0:4365
-7267:3:2427
-7268:0:4365
-7269:2:1361
-7270:0:4365
-7271:3:2428
-7272:0:4365
-7273:2:1362
-7274:2:1366
-7275:2:1367
-7276:2:1375
-7277:2:1376
-7278:2:1380
-7279:2:1381
-7280:2:1375
-7281:2:1376
-7282:2:1380
-7283:2:1381
-7284:2:1389
-7285:2:1394
-7286:2:1398
-7287:2:1399
-7288:2:1406
-7289:2:1407
-7290:2:1418
-7291:2:1419
-7292:2:1420
-7293:2:1418
-7294:2:1419
-7295:2:1420
-7296:2:1431
-7297:2:1436
-7298:2:1437
-7299:0:4365
-7300:2:1449
-7301:0:4365
-7302:3:2427
-7303:0:4365
-7304:2:1451
-7305:0:4365
-7306:3:2428
-7307:0:4365
-7308:2:1652
-7309:0:4365
-7310:2:1653
-7311:0:4365
-7312:2:1657
-7313:0:4365
-7314:2:1180
-7315:0:4365
-7316:3:2427
-7317:0:4365
-7318:2:1181
-7319:2:1185
-7320:2:1186
-7321:2:1194
-7322:2:1195
-7323:2:1199
-7324:2:1200
-7325:2:1194
-7326:2:1195
-7327:2:1196
-7328:2:1208
-7329:2:1213
-7330:2:1217
-7331:2:1218
-7332:2:1225
-7333:2:1226
-7334:2:1237
-7335:2:1238
-7336:2:1239
-7337:2:1237
-7338:2:1238
-7339:2:1239
-7340:2:1250
-7341:2:1255
-7342:2:1256
-7343:0:4365
-7344:3:2428
-7345:0:4365
-7346:2:1268
-7347:0:4365
-7348:3:2427
-7349:0:4365
-7350:2:1270
-7351:0:4365
-7352:3:2428
-7353:0:4365
-7354:2:1271
-7355:2:1275
-7356:2:1276
-7357:2:1284
-7358:2:1285
-7359:2:1289
-7360:2:1290
-7361:2:1284
-7362:2:1285
-7363:2:1289
-7364:2:1290
-7365:2:1298
-7366:2:1303
-7367:2:1307
-7368:2:1308
-7369:2:1315
-7370:2:1316
-7371:2:1327
-7372:2:1328
-7373:2:1329
-7374:2:1327
-7375:2:1328
-7376:2:1329
-7377:2:1340
-7378:2:1345
-7379:2:1346
-7380:0:4365
-7381:2:1358
-7382:0:4365
-7383:2:1454
-7384:0:4365
-7385:3:2427
-7386:0:4365
-7387:2:1455
-7388:0:4365
-7389:3:2428
-7390:0:4365
-7391:2:1652
-7392:0:4365
-7393:2:1653
-7394:0:4365
-7395:2:1657
-7396:0:4365
-7397:2:1660
-7398:0:4365
-7399:3:2427
-7400:0:4365
-7401:2:1665
-7402:2:1669
-7403:2:1670
-7404:2:1678
-7405:2:1679
-7406:2:1683
-7407:2:1684
-7408:2:1678
-7409:2:1679
-7410:2:1680
-7411:2:1692
-7412:2:1697
-7413:2:1701
-7414:2:1702
-7415:2:1709
-7416:2:1710
-7417:2:1721
-7418:2:1722
-7419:2:1723
-7420:2:1721
-7421:2:1722
-7422:2:1723
-7423:2:1734
-7424:2:1739
-7425:2:1740
-7426:0:4365
-7427:3:2428
-7428:0:4365
-7429:2:1752
-7430:0:4365
-7431:3:2427
-7432:0:4365
-7433:2:1754
-7434:0:4365
-7435:3:2428
-7436:0:4365
-7437:2:1755
-7438:2:1759
-7439:2:1760
-7440:2:1768
-7441:2:1769
-7442:2:1773
-7443:2:1774
-7444:2:1768
-7445:2:1769
-7446:2:1773
-7447:2:1774
-7448:2:1782
-7449:2:1787
-7450:2:1791
-7451:2:1792
-7452:2:1799
-7453:2:1800
-7454:2:1811
-7455:2:1812
-7456:2:1813
-7457:2:1811
-7458:2:1812
-7459:2:1813
-7460:2:1824
-7461:2:1829
-7462:2:1830
-7463:0:4365
-7464:2:1842
-7465:0:4365
-7466:3:2427
-7467:0:4365
-7468:2:1844
-7469:0:4365
-7470:3:2428
-7471:0:4365
-7472:2:1845
-7473:2:1849
-7474:2:1850
-7475:2:1858
-7476:2:1859
-7477:2:1863
-7478:2:1864
-7479:2:1858
-7480:2:1859
-7481:2:1863
-7482:2:1864
-7483:2:1872
-7484:2:1877
-7485:2:1881
-7486:2:1882
-7487:2:1889
-7488:2:1890
-7489:2:1901
-7490:2:1902
-7491:2:1903
-7492:2:1901
-7493:2:1902
-7494:2:1903
-7495:2:1914
-7496:2:1919
-7497:2:1920
-7498:0:4365
-7499:2:1932
-7500:0:4365
-7501:3:2427
-7502:0:4365
-7503:2:1934
-7504:0:4365
-7505:3:2428
-7506:0:4365
-7507:2:1935
-7508:0:4365
-7509:2:1936
-7510:0:4365
-7511:2:2129
-7512:0:4365
-7513:2:2130
-7514:0:4365
-7515:2:2134
-7516:0:4365
-7517:3:2427
-7518:0:4365
-7519:2:2136
-7520:0:4365
-7521:3:2428
-7522:0:4365
-7523:2:2137
-7524:2:2141
-7525:2:2142
-7526:2:2150
-7527:2:2151
-7528:2:2155
-7529:2:2156
-7530:2:2150
-7531:2:2151
-7532:2:2155
-7533:2:2156
-7534:2:2164
-7535:2:2169
-7536:2:2173
-7537:2:2174
-7538:2:2181
-7539:2:2182
-7540:2:2193
-7541:2:2194
-7542:2:2195
-7543:2:2193
-7544:2:2194
-7545:2:2195
-7546:2:2206
-7547:2:2211
-7548:2:2212
-7549:0:4365
-7550:2:2224
-7551:0:4365
-7552:3:2427
-7553:0:4365
-7554:2:2226
-7555:0:4365
-7556:3:2428
-7557:0:4365
-7558:2:1936
-7559:0:4365
-7560:2:2129
-7561:0:4365
-7562:2:2130
-7563:0:4365
-7564:2:2134
-7565:0:4365
-7566:3:2427
-7567:0:4365
-7568:2:2136
-7569:0:4365
-7570:3:2428
-7571:0:4365
-7572:2:2137
-7573:2:2141
-7574:2:2142
-7575:2:2150
-7576:2:2151
-7577:2:2155
-7578:2:2156
-7579:2:2150
-7580:2:2151
-7581:2:2152
-7582:2:2164
-7583:2:2169
-7584:2:2173
-7585:2:2174
-7586:2:2181
-7587:2:2182
-7588:2:2193
-7589:2:2194
-7590:2:2195
-7591:2:2193
-7592:2:2194
-7593:2:2195
-7594:2:2206
-7595:2:2211
-7596:2:2212
-7597:0:4365
-7598:2:2224
-7599:0:4365
-7600:3:2427
-7601:0:4365
-7602:2:2226
-7603:0:4365
-7604:3:2428
-7605:0:4365
-7606:2:2230
-7607:0:4365
-7608:3:2427
-7609:0:4365
-7610:2:2235
-7611:2:2239
-7612:2:2240
-7613:2:2248
-7614:2:2249
-7615:2:2253
-7616:2:2254
-7617:2:2248
-7618:2:2249
-7619:2:2250
-7620:2:2262
-7621:2:2267
-7622:2:2271
-7623:2:2272
-7624:2:2279
-7625:2:2280
-7626:2:2291
-7627:2:2292
-7628:2:2293
-7629:2:2291
-7630:2:2292
-7631:2:2293
-7632:2:2304
-7633:2:2309
-7634:2:2310
-7635:0:4365
-7636:3:2428
-7637:0:4365
-7638:2:2322
-7639:0:4365
-7640:2:1169
-7641:0:4365
-7642:3:2427
-7643:0:4365
-7644:2:1170
-7645:0:4365
-7646:3:2428
-7647:0:4365
-7648:3:2429
-7649:0:4365
-7650:3:2435
-7651:3:2436
-7652:0:4365
-7653:3:2440
-7654:3:2444
-7655:3:2445
-7656:3:2453
-7657:3:2454
-7658:3:2458
-7659:3:2459
-7660:3:2453
-7661:3:2454
-7662:3:2458
-7663:3:2459
-7664:3:2467
-7665:3:2472
-7666:3:2473
-7667:3:2484
-7668:3:2485
-7669:3:2496
-7670:3:2497
-7671:3:2498
-7672:3:2496
-7673:3:2497
-7674:3:2498
-7675:3:2509
-7676:3:2514
-7677:3:2515
-7678:0:4365
-7679:3:2527
-7680:0:4365
-7681:3:2528
-7682:0:4365
-7683:2:1173
-7684:0:4365
-7685:3:2529
-7686:0:4365
-7687:2:1179
-7688:0:4365
-7689:2:1180
-7690:0:4365
-7691:3:2528
-7692:0:4365
-7693:2:1181
-7694:2:1185
-7695:2:1186
-7696:2:1194
-7697:2:1195
-7698:2:1199
-7699:2:1200
-7700:2:1194
-7701:2:1195
-7702:2:1199
-7703:2:1200
-7704:2:1208
-7705:2:1213
-7706:2:1217
-7707:2:1218
-7708:2:1225
-7709:2:1226
-7710:2:1237
-7711:2:1238
-7712:2:1239
-7713:2:1237
-7714:2:1238
-7715:2:1239
-7716:2:1250
-7717:2:1255
-7718:2:1256
-7719:0:4365
-7720:3:2529
-7721:0:4365
-7722:2:1268
-7723:0:4365
-7724:3:2528
-7725:0:4365
-7726:2:1270
-7727:0:4365
-7728:3:2529
-7729:0:4365
-7730:2:1271
-7731:2:1275
-7732:2:1276
-7733:2:1284
-7734:2:1285
-7735:2:1289
-7736:2:1290
-7737:2:1284
-7738:2:1285
-7739:2:1289
-7740:2:1290
-7741:2:1298
-7742:2:1303
-7743:2:1307
-7744:2:1308
-7745:2:1315
-7746:2:1316
-7747:2:1327
-7748:2:1328
-7749:2:1329
-7750:2:1327
-7751:2:1328
-7752:2:1329
-7753:2:1340
-7754:2:1345
-7755:2:1346
-7756:0:4365
-7757:2:1358
-7758:0:4365
-7759:2:1360
-7760:0:4365
-7761:3:2528
-7762:0:4365
-7763:2:1361
-7764:0:4365
-7765:3:2529
-7766:0:4365
-7767:2:1362
-7768:2:1366
-7769:2:1367
-7770:2:1375
-7771:2:1376
-7772:2:1380
-7773:2:1381
-7774:2:1375
-7775:2:1376
-7776:2:1380
-7777:2:1381
-7778:2:1389
-7779:2:1394
-7780:2:1398
-7781:2:1399
-7782:2:1406
-7783:2:1407
-7784:2:1418
-7785:2:1419
-7786:2:1420
-7787:2:1418
-7788:2:1419
-7789:2:1420
-7790:2:1431
-7791:2:1436
-7792:2:1437
-7793:0:4365
-7794:2:1449
-7795:0:4365
-7796:3:2528
-7797:0:4365
-7798:2:1451
-7799:0:4365
-7800:3:2529
-7801:0:4365
-7802:2:1652
-7803:0:4365
-7804:2:1653
-7805:0:4365
-7806:2:1657
-7807:0:4365
-7808:2:1180
-7809:0:4365
-7810:3:2528
-7811:0:4365
-7812:2:1181
-7813:2:1185
-7814:2:1186
-7815:2:1194
-7816:2:1195
-7817:2:1199
-7818:2:1200
-7819:2:1194
-7820:2:1195
-7821:2:1196
-7822:2:1208
-7823:2:1213
-7824:2:1217
-7825:2:1218
-7826:2:1225
-7827:2:1226
-7828:2:1237
-7829:2:1238
-7830:2:1239
-7831:2:1237
-7832:2:1238
-7833:2:1239
-7834:2:1250
-7835:2:1255
-7836:2:1256
-7837:0:4365
-7838:3:2529
-7839:0:4365
-7840:2:1268
-7841:0:4365
-7842:3:2528
-7843:0:4365
-7844:2:1270
-7845:0:4365
-7846:3:2529
-7847:0:4365
-7848:2:1271
-7849:2:1275
-7850:2:1276
-7851:2:1284
-7852:2:1285
-7853:2:1289
-7854:2:1290
-7855:2:1284
-7856:2:1285
-7857:2:1289
-7858:2:1290
-7859:2:1298
-7860:2:1303
-7861:2:1307
-7862:2:1308
-7863:2:1315
-7864:2:1316
-7865:2:1327
-7866:2:1328
-7867:2:1329
-7868:2:1327
-7869:2:1328
-7870:2:1329
-7871:2:1340
-7872:2:1345
-7873:2:1346
-7874:0:4365
-7875:2:1358
-7876:0:4365
-7877:2:1454
-7878:0:4365
-7879:3:2528
-7880:0:4365
-7881:2:1455
-7882:0:4365
-7883:3:2529
-7884:0:4365
-7885:2:1652
-7886:0:4365
-7887:2:1653
-7888:0:4365
-7889:2:1657
-7890:0:4365
-7891:2:1660
-7892:0:4365
-7893:3:2528
-7894:0:4365
-7895:2:1665
-7896:2:1669
-7897:2:1670
-7898:2:1678
-7899:2:1679
-7900:2:1683
-7901:2:1684
-7902:2:1678
-7903:2:1679
-7904:2:1680
-7905:2:1692
-7906:2:1697
-7907:2:1701
-7908:2:1702
-7909:2:1709
-7910:2:1710
-7911:2:1721
-7912:2:1722
-7913:2:1723
-7914:2:1721
-7915:2:1722
-7916:2:1723
-7917:2:1734
-7918:2:1739
-7919:2:1740
-7920:0:4365
-7921:3:2529
-7922:0:4365
-7923:2:1752
-7924:0:4365
-7925:3:2528
-7926:0:4365
-7927:2:1754
-7928:0:4365
-7929:3:2529
-7930:0:4365
-7931:2:1755
-7932:2:1759
-7933:2:1760
-7934:2:1768
-7935:2:1769
-7936:2:1773
-7937:2:1774
-7938:2:1768
-7939:2:1769
-7940:2:1773
-7941:2:1774
-7942:2:1782
-7943:2:1787
-7944:2:1791
-7945:2:1792
-7946:2:1799
-7947:2:1800
-7948:2:1811
-7949:2:1812
-7950:2:1813
-7951:2:1811
-7952:2:1812
-7953:2:1813
-7954:2:1824
-7955:2:1829
-7956:2:1830
-7957:0:4365
-7958:2:1842
-7959:0:4365
-7960:3:2528
-7961:0:4365
-7962:2:1844
-7963:0:4365
-7964:3:2529
-7965:0:4365
-7966:2:1845
-7967:2:1849
-7968:2:1850
-7969:2:1858
-7970:2:1859
-7971:2:1863
-7972:2:1864
-7973:2:1858
-7974:2:1859
-7975:2:1863
-7976:2:1864
-7977:2:1872
-7978:2:1877
-7979:2:1881
-7980:2:1882
-7981:2:1889
-7982:2:1890
-7983:2:1901
-7984:2:1902
-7985:2:1903
-7986:2:1901
-7987:2:1902
-7988:2:1903
-7989:2:1914
-7990:2:1919
-7991:2:1920
-7992:0:4365
-7993:2:1932
-7994:0:4365
-7995:3:2528
-7996:0:4365
-7997:2:1934
-7998:0:4365
-7999:3:2529
-8000:0:4365
-8001:2:1935
-8002:0:4365
-8003:2:1936
-8004:0:4365
-8005:2:2129
-8006:0:4365
-8007:2:2130
-8008:0:4365
-8009:2:2134
-8010:0:4365
-8011:3:2528
-8012:0:4365
-8013:2:2136
-8014:0:4365
-8015:3:2529
-8016:0:4365
-8017:2:2137
-8018:2:2141
-8019:2:2142
-8020:2:2150
-8021:2:2151
-8022:2:2155
-8023:2:2156
-8024:2:2150
-8025:2:2151
-8026:2:2155
-8027:2:2156
-8028:2:2164
-8029:2:2169
-8030:2:2173
-8031:2:2174
-8032:2:2181
-8033:2:2182
-8034:2:2193
-8035:2:2194
-8036:2:2195
-8037:2:2193
-8038:2:2194
-8039:2:2195
-8040:2:2206
-8041:2:2211
-8042:2:2212
-8043:0:4365
-8044:2:2224
-8045:0:4365
-8046:3:2528
-8047:0:4365
-8048:2:2226
-8049:0:4365
-8050:3:2529
-8051:0:4365
-8052:2:1936
-8053:0:4365
-8054:2:2129
-8055:0:4365
-8056:2:2130
-8057:0:4365
-8058:2:2134
-8059:0:4365
-8060:3:2528
-8061:0:4365
-8062:2:2136
-8063:0:4365
-8064:3:2529
-8065:0:4365
-8066:2:2137
-8067:2:2141
-8068:2:2142
-8069:2:2150
-8070:2:2151
-8071:2:2155
-8072:2:2156
-8073:2:2150
-8074:2:2151
-8075:2:2152
-8076:2:2164
-8077:2:2169
-8078:2:2173
-8079:2:2174
-8080:2:2181
-8081:2:2182
-8082:2:2193
-8083:2:2194
-8084:2:2195
-8085:2:2193
-8086:2:2194
-8087:2:2195
-8088:2:2206
-8089:2:2211
-8090:2:2212
-8091:0:4365
-8092:2:2224
-8093:0:4365
-8094:3:2528
-8095:0:4365
-8096:2:2226
-8097:0:4365
-8098:3:2529
-8099:0:4365
-8100:2:2230
-8101:0:4365
-8102:3:2528
-8103:0:4365
-8104:2:2235
-8105:2:2239
-8106:2:2240
-8107:2:2248
-8108:2:2249
-8109:2:2253
-8110:2:2254
-8111:2:2248
-8112:2:2249
-8113:2:2250
-8114:2:2262
-8115:2:2267
-8116:2:2271
-8117:2:2272
-8118:2:2279
-8119:2:2280
-8120:2:2291
-8121:2:2292
-8122:2:2293
-8123:2:2291
-8124:2:2292
-8125:2:2293
-8126:2:2304
-8127:2:2309
-8128:2:2310
-8129:0:4365
-8130:3:2529
-8131:0:4365
-8132:2:2322
-8133:0:4365
-8134:2:1169
-8135:0:4365
-8136:3:2528
-8137:0:4365
-8138:2:1170
-8139:0:4365
-8140:3:2529
-8141:0:4365
-8142:3:2530
-8143:0:4365
-8144:3:2536
-8145:0:4365
-8146:3:2537
-8147:0:4365
-8148:3:2547
-8149:0:4365
-8150:3:2548
-8151:0:4365
-8152:3:2552
-8153:3:2553
-8154:3:2557
-8155:3:2561
-8156:3:2562
-8157:3:2557
-8158:3:2561
-8159:3:2562
-8160:3:2566
-8161:3:2574
-8162:3:2575
-8163:3:2580
-8164:3:2587
-8165:3:2588
-8166:3:2587
-8167:3:2588
-8168:3:2595
-8169:3:2600
-8170:0:4365
-8171:3:2611
-8172:0:4365
-8173:3:2615
-8174:3:2616
-8175:3:2620
-8176:3:2624
-8177:3:2625
-8178:3:2620
-8179:3:2624
-8180:3:2625
-8181:3:2629
-8182:3:2637
-8183:3:2638
-8184:3:2643
-8185:3:2650
-8186:3:2651
-8187:3:2650
-8188:3:2651
-8189:3:2658
-8190:3:2663
-8191:0:4365
-8192:3:2611
-8193:0:4365
-8194:3:2615
-8195:3:2616
-8196:3:2620
-8197:3:2624
-8198:3:2625
-8199:3:2620
-8200:3:2624
-8201:3:2625
-8202:3:2629
-8203:3:2637
-8204:3:2638
-8205:3:2643
-8206:3:2650
-8207:3:2651
-8208:3:2650
-8209:3:2651
-8210:3:2658
-8211:3:2663
-8212:0:4365
-8213:3:2674
-8214:0:4365
-8215:3:2682
-8216:3:2683
-8217:3:2687
-8218:3:2691
-8219:3:2692
-8220:3:2687
-8221:3:2691
-8222:3:2692
-8223:3:2696
-8224:3:2704
-8225:3:2705
-8226:3:2710
-8227:3:2717
-8228:3:2718
-8229:3:2717
-8230:3:2718
-8231:3:2725
-8232:3:2730
-8233:0:4365
-8234:3:2745
-8235:0:4365
-8236:3:2746
-8237:0:4365
-8238:2:1173
-8239:0:4365
-8240:3:2747
-8241:0:4365
-8242:2:1179
-8243:0:4365
-8244:2:1180
-8245:0:4365
-8246:3:2746
-8247:0:4365
-8248:2:1181
-8249:2:1185
-8250:2:1186
-8251:2:1194
-8252:2:1195
-8253:2:1199
-8254:2:1200
-8255:2:1194
-8256:2:1195
-8257:2:1199
-8258:2:1200
-8259:2:1208
-8260:2:1213
-8261:2:1217
-8262:2:1218
-8263:2:1225
-8264:2:1226
-8265:2:1237
-8266:2:1238
-8267:2:1239
-8268:2:1237
-8269:2:1238
-8270:2:1239
-8271:2:1250
-8272:2:1255
-8273:2:1256
-8274:0:4365
-8275:3:2747
-8276:0:4365
-8277:2:1268
-8278:0:4365
-8279:3:2746
-8280:0:4365
-8281:2:1270
-8282:0:4365
-8283:3:2747
-8284:0:4365
-8285:2:1271
-8286:2:1275
-8287:2:1276
-8288:2:1284
-8289:2:1285
-8290:2:1289
-8291:2:1290
-8292:2:1284
-8293:2:1285
-8294:2:1289
-8295:2:1290
-8296:2:1298
-8297:2:1303
-8298:2:1307
-8299:2:1308
-8300:2:1315
-8301:2:1316
-8302:2:1327
-8303:2:1328
-8304:2:1329
-8305:2:1327
-8306:2:1328
-8307:2:1329
-8308:2:1340
-8309:2:1345
-8310:2:1346
-8311:0:4365
-8312:2:1358
-8313:0:4365
-8314:2:1360
-8315:0:4365
-8316:3:2746
-8317:0:4365
-8318:2:1361
-8319:0:4365
-8320:3:2747
-8321:0:4365
-8322:2:1362
-8323:2:1366
-8324:2:1367
-8325:2:1375
-8326:2:1376
-8327:2:1380
-8328:2:1381
-8329:2:1375
-8330:2:1376
-8331:2:1380
-8332:2:1381
-8333:2:1389
-8334:2:1394
-8335:2:1398
-8336:2:1399
-8337:2:1406
-8338:2:1407
-8339:2:1418
-8340:2:1419
-8341:2:1420
-8342:2:1418
-8343:2:1419
-8344:2:1420
-8345:2:1431
-8346:2:1436
-8347:2:1437
-8348:0:4365
-8349:2:1449
-8350:0:4365
-8351:3:2746
-8352:0:4365
-8353:2:1451
-8354:0:4365
-8355:3:2747
-8356:0:4365
-8357:2:1652
-8358:0:4365
-8359:2:1653
-8360:0:4365
-8361:2:1657
-8362:0:4365
-8363:2:1180
-8364:0:4365
-8365:3:2746
-8366:0:4365
-8367:2:1181
-8368:2:1185
-8369:2:1186
-8370:2:1194
-8371:2:1195
-8372:2:1199
-8373:2:1200
-8374:2:1194
-8375:2:1195
-8376:2:1196
-8377:2:1208
-8378:2:1213
-8379:2:1217
-8380:2:1218
-8381:2:1225
-8382:2:1226
-8383:2:1237
-8384:2:1238
-8385:2:1239
-8386:2:1237
-8387:2:1238
-8388:2:1239
-8389:2:1250
-8390:2:1255
-8391:2:1256
-8392:0:4365
-8393:3:2747
-8394:0:4365
-8395:2:1268
-8396:0:4365
-8397:3:2746
-8398:0:4365
-8399:2:1270
-8400:0:4365
-8401:3:2747
-8402:0:4365
-8403:2:1271
-8404:2:1275
-8405:2:1276
-8406:2:1284
-8407:2:1285
-8408:2:1289
-8409:2:1290
-8410:2:1284
-8411:2:1285
-8412:2:1289
-8413:2:1290
-8414:2:1298
-8415:2:1303
-8416:2:1307
-8417:2:1308
-8418:2:1315
-8419:2:1316
-8420:2:1327
-8421:2:1328
-8422:2:1329
-8423:2:1327
-8424:2:1328
-8425:2:1329
-8426:2:1340
-8427:2:1345
-8428:2:1346
-8429:0:4365
-8430:2:1358
-8431:0:4365
-8432:2:1454
-8433:0:4365
-8434:3:2746
-8435:0:4365
-8436:2:1455
-8437:0:4365
-8438:3:2747
-8439:0:4365
-8440:2:1652
-8441:0:4365
-8442:2:1653
-8443:0:4365
-8444:2:1657
-8445:0:4365
-8446:2:1660
-8447:0:4365
-8448:3:2746
-8449:0:4365
-8450:2:1665
-8451:2:1669
-8452:2:1670
-8453:2:1678
-8454:2:1679
-8455:2:1683
-8456:2:1684
-8457:2:1678
-8458:2:1679
-8459:2:1680
-8460:2:1692
-8461:2:1697
-8462:2:1701
-8463:2:1702
-8464:2:1709
-8465:2:1710
-8466:2:1721
-8467:2:1722
-8468:2:1723
-8469:2:1721
-8470:2:1722
-8471:2:1723
-8472:2:1734
-8473:2:1739
-8474:2:1740
-8475:0:4365
-8476:3:2747
-8477:0:4365
-8478:2:1752
-8479:0:4365
-8480:3:2746
-8481:0:4365
-8482:2:1754
-8483:0:4365
-8484:3:2747
-8485:0:4365
-8486:2:1755
-8487:2:1759
-8488:2:1760
-8489:2:1768
-8490:2:1769
-8491:2:1773
-8492:2:1774
-8493:2:1768
-8494:2:1769
-8495:2:1773
-8496:2:1774
-8497:2:1782
-8498:2:1787
-8499:2:1791
-8500:2:1792
-8501:2:1799
-8502:2:1800
-8503:2:1811
-8504:2:1812
-8505:2:1813
-8506:2:1811
-8507:2:1812
-8508:2:1813
-8509:2:1824
-8510:2:1829
-8511:2:1830
-8512:0:4365
-8513:2:1842
-8514:0:4365
-8515:3:2746
-8516:0:4365
-8517:2:1844
-8518:0:4365
-8519:3:2747
-8520:0:4365
-8521:2:1845
-8522:2:1849
-8523:2:1850
-8524:2:1858
-8525:2:1859
-8526:2:1863
-8527:2:1864
-8528:2:1858
-8529:2:1859
-8530:2:1863
-8531:2:1864
-8532:2:1872
-8533:2:1877
-8534:2:1881
-8535:2:1882
-8536:2:1889
-8537:2:1890
-8538:2:1901
-8539:2:1902
-8540:2:1903
-8541:2:1901
-8542:2:1902
-8543:2:1903
-8544:2:1914
-8545:2:1919
-8546:2:1920
-8547:0:4365
-8548:2:1932
-8549:0:4365
-8550:3:2746
-8551:0:4365
-8552:2:1934
-8553:0:4365
-8554:3:2747
-8555:0:4365
-8556:2:1935
-8557:0:4365
-8558:2:1936
-8559:0:4365
-8560:2:2129
-8561:0:4365
-8562:2:2130
-8563:0:4365
-8564:2:2134
-8565:0:4365
-8566:3:2746
-8567:0:4365
-8568:2:2136
-8569:0:4365
-8570:3:2747
-8571:0:4365
-8572:2:2137
-8573:2:2141
-8574:2:2142
-8575:2:2150
-8576:2:2151
-8577:2:2155
-8578:2:2156
-8579:2:2150
-8580:2:2151
-8581:2:2155
-8582:2:2156
-8583:2:2164
-8584:2:2169
-8585:2:2173
-8586:2:2174
-8587:2:2181
-8588:2:2182
-8589:2:2193
-8590:2:2194
-8591:2:2195
-8592:2:2193
-8593:2:2194
-8594:2:2195
-8595:2:2206
-8596:2:2211
-8597:2:2212
-8598:0:4365
-8599:2:2224
-8600:0:4365
-8601:3:2746
-8602:0:4365
-8603:2:2226
-8604:0:4365
-8605:3:2747
-8606:0:4365
-8607:2:1936
-8608:0:4365
-8609:2:2129
-8610:0:4365
-8611:2:2130
-8612:0:4365
-8613:2:2134
-8614:0:4365
-8615:3:2746
-8616:0:4365
-8617:2:2136
-8618:0:4365
-8619:3:2747
-8620:0:4365
-8621:2:2137
-8622:2:2141
-8623:2:2142
-8624:2:2150
-8625:2:2151
-8626:2:2155
-8627:2:2156
-8628:2:2150
-8629:2:2151
-8630:2:2152
-8631:2:2164
-8632:2:2169
-8633:2:2173
-8634:2:2174
-8635:2:2181
-8636:2:2182
-8637:2:2193
-8638:2:2194
-8639:2:2195
-8640:2:2193
-8641:2:2194
-8642:2:2195
-8643:2:2206
-8644:2:2211
-8645:2:2212
-8646:0:4365
-8647:2:2224
-8648:0:4365
-8649:3:2746
-8650:0:4365
-8651:2:2226
-8652:0:4365
-8653:3:2747
-8654:0:4365
-8655:2:2230
-8656:0:4365
-8657:3:2746
-8658:0:4365
-8659:2:2235
-8660:2:2239
-8661:2:2240
-8662:2:2248
-8663:2:2249
-8664:2:2253
-8665:2:2254
-8666:2:2248
-8667:2:2249
-8668:2:2250
-8669:2:2262
-8670:2:2267
-8671:2:2271
-8672:2:2272
-8673:2:2279
-8674:2:2280
-8675:2:2291
-8676:2:2292
-8677:2:2293
-8678:2:2291
-8679:2:2292
-8680:2:2293
-8681:2:2304
-8682:2:2309
-8683:2:2310
-8684:0:4365
-8685:3:2747
-8686:0:4365
-8687:2:2322
-8688:0:4365
-8689:2:1169
-8690:0:4365
-8691:3:2746
-8692:0:4365
-8693:2:1170
-8694:0:4365
-8695:3:2747
-8696:0:4365
-8697:3:2748
-8698:0:4365
-8699:3:2754
-8700:0:4365
-8701:3:2755
-8702:3:2759
-8703:3:2760
-8704:3:2768
-8705:3:2769
-8706:3:2773
-8707:3:2774
-8708:3:2768
-8709:3:2769
-8710:3:2773
-8711:3:2774
-8712:3:2782
-8713:3:2787
-8714:3:2791
-8715:3:2792
-8716:3:2799
-8717:3:2800
-8718:3:2811
-8719:3:2812
-8720:3:2813
-8721:3:2811
-8722:3:2812
-8723:3:2813
-8724:3:2824
-8725:3:2829
-8726:3:2830
-8727:0:4365
-8728:3:2842
-8729:0:4365
-8730:3:2843
-8731:0:4365
-8732:2:1173
-8733:0:4365
-8734:3:2844
-8735:0:4365
-8736:2:1179
-8737:0:4365
-8738:2:1180
-8739:0:4365
-8740:3:2843
-8741:0:4365
-8742:2:1181
-8743:2:1185
-8744:2:1186
-8745:2:1194
-8746:2:1195
-8747:2:1199
-8748:2:1200
-8749:2:1194
-8750:2:1195
-8751:2:1199
-8752:2:1200
-8753:2:1208
-8754:2:1213
-8755:2:1217
-8756:2:1218
-8757:2:1225
-8758:2:1226
-8759:2:1237
-8760:2:1238
-8761:2:1239
-8762:2:1237
-8763:2:1238
-8764:2:1239
-8765:2:1250
-8766:2:1255
-8767:2:1256
-8768:0:4365
-8769:3:2844
-8770:0:4365
-8771:2:1268
-8772:0:4365
-8773:3:2843
-8774:0:4365
-8775:2:1270
-8776:0:4365
-8777:3:2844
-8778:0:4365
-8779:2:1271
-8780:2:1275
-8781:2:1276
-8782:2:1284
-8783:2:1285
-8784:2:1289
-8785:2:1290
-8786:2:1284
-8787:2:1285
-8788:2:1289
-8789:2:1290
-8790:2:1298
-8791:2:1303
-8792:2:1307
-8793:2:1308
-8794:2:1315
-8795:2:1316
-8796:2:1327
-8797:2:1328
-8798:2:1329
-8799:2:1327
-8800:2:1328
-8801:2:1329
-8802:2:1340
-8803:2:1345
-8804:2:1346
-8805:0:4365
-8806:2:1358
-8807:0:4365
-8808:2:1360
-8809:0:4365
-8810:3:2843
-8811:0:4365
-8812:2:1361
-8813:0:4365
-8814:3:2844
-8815:0:4365
-8816:2:1362
-8817:2:1366
-8818:2:1367
-8819:2:1375
-8820:2:1376
-8821:2:1380
-8822:2:1381
-8823:2:1375
-8824:2:1376
-8825:2:1380
-8826:2:1381
-8827:2:1389
-8828:2:1394
-8829:2:1398
-8830:2:1399
-8831:2:1406
-8832:2:1407
-8833:2:1418
-8834:2:1419
-8835:2:1420
-8836:2:1418
-8837:2:1419
-8838:2:1420
-8839:2:1431
-8840:2:1436
-8841:2:1437
-8842:0:4365
-8843:2:1449
-8844:0:4365
-8845:3:2843
-8846:0:4365
-8847:2:1451
-8848:0:4365
-8849:3:2844
-8850:0:4365
-8851:2:1652
-8852:0:4365
-8853:2:1653
-8854:0:4365
-8855:2:1657
-8856:0:4365
-8857:2:1180
-8858:0:4365
-8859:3:2843
-8860:0:4365
-8861:2:1181
-8862:2:1185
-8863:2:1186
-8864:2:1194
-8865:2:1195
-8866:2:1199
-8867:2:1200
-8868:2:1194
-8869:2:1195
-8870:2:1196
-8871:2:1208
-8872:2:1213
-8873:2:1217
-8874:2:1218
-8875:2:1225
-8876:2:1226
-8877:2:1237
-8878:2:1238
-8879:2:1239
-8880:2:1237
-8881:2:1238
-8882:2:1239
-8883:2:1250
-8884:2:1255
-8885:2:1256
-8886:0:4365
-8887:3:2844
-8888:0:4365
-8889:2:1268
-8890:0:4365
-8891:3:2843
-8892:0:4365
-8893:2:1270
-8894:0:4365
-8895:3:2844
-8896:0:4365
-8897:2:1271
-8898:2:1275
-8899:2:1276
-8900:2:1284
-8901:2:1285
-8902:2:1289
-8903:2:1290
-8904:2:1284
-8905:2:1285
-8906:2:1289
-8907:2:1290
-8908:2:1298
-8909:2:1303
-8910:2:1307
-8911:2:1308
-8912:2:1315
-8913:2:1316
-8914:2:1327
-8915:2:1328
-8916:2:1329
-8917:2:1327
-8918:2:1328
-8919:2:1329
-8920:2:1340
-8921:2:1345
-8922:2:1346
-8923:0:4365
-8924:2:1358
-8925:0:4365
-8926:2:1454
-8927:0:4365
-8928:3:2843
-8929:0:4365
-8930:2:1455
-8931:0:4365
-8932:3:2844
-8933:0:4365
-8934:2:1652
-8935:0:4365
-8936:2:1653
-8937:0:4365
-8938:2:1657
-8939:0:4365
-8940:2:1660
-8941:0:4365
-8942:3:2843
-8943:0:4365
-8944:2:1665
-8945:2:1669
-8946:2:1670
-8947:2:1678
-8948:2:1679
-8949:2:1683
-8950:2:1684
-8951:2:1678
-8952:2:1679
-8953:2:1680
-8954:2:1692
-8955:2:1697
-8956:2:1701
-8957:2:1702
-8958:2:1709
-8959:2:1710
-8960:2:1721
-8961:2:1722
-8962:2:1723
-8963:2:1721
-8964:2:1722
-8965:2:1723
-8966:2:1734
-8967:2:1739
-8968:2:1740
-8969:0:4365
-8970:3:2844
-8971:0:4365
-8972:2:1752
-8973:0:4365
-8974:3:2843
-8975:0:4365
-8976:2:1754
-8977:0:4365
-8978:3:2844
-8979:0:4365
-8980:2:1755
-8981:2:1759
-8982:2:1760
-8983:2:1768
-8984:2:1769
-8985:2:1773
-8986:2:1774
-8987:2:1768
-8988:2:1769
-8989:2:1773
-8990:2:1774
-8991:2:1782
-8992:2:1787
-8993:2:1791
-8994:2:1792
-8995:2:1799
-8996:2:1800
-8997:2:1811
-8998:2:1812
-8999:2:1813
-9000:2:1811
-9001:2:1812
-9002:2:1813
-9003:2:1824
-9004:2:1829
-9005:2:1830
-9006:0:4365
-9007:2:1842
-9008:0:4365
-9009:3:2843
-9010:0:4365
-9011:2:1844
-9012:0:4365
-9013:3:2844
-9014:0:4365
-9015:2:1845
-9016:2:1849
-9017:2:1850
-9018:2:1858
-9019:2:1859
-9020:2:1863
-9021:2:1864
-9022:2:1858
-9023:2:1859
-9024:2:1863
-9025:2:1864
-9026:2:1872
-9027:2:1877
-9028:2:1881
-9029:2:1882
-9030:2:1889
-9031:2:1890
-9032:2:1901
-9033:2:1902
-9034:2:1903
-9035:2:1901
-9036:2:1902
-9037:2:1903
-9038:2:1914
-9039:2:1919
-9040:2:1920
-9041:0:4365
-9042:2:1932
-9043:0:4365
-9044:3:2843
-9045:0:4365
-9046:2:1934
-9047:0:4365
-9048:3:2844
-9049:0:4365
-9050:2:1935
-9051:0:4365
-9052:2:1936
-9053:0:4365
-9054:2:2129
-9055:0:4365
-9056:2:2130
-9057:0:4365
-9058:2:2134
-9059:0:4365
-9060:3:2843
-9061:0:4365
-9062:2:2136
-9063:0:4365
-9064:3:2844
-9065:0:4365
-9066:2:2137
-9067:2:2141
-9068:2:2142
-9069:2:2150
-9070:2:2151
-9071:2:2155
-9072:2:2156
-9073:2:2150
-9074:2:2151
-9075:2:2155
-9076:2:2156
-9077:2:2164
-9078:2:2169
-9079:2:2173
-9080:2:2174
-9081:2:2181
-9082:2:2182
-9083:2:2193
-9084:2:2194
-9085:2:2195
-9086:2:2193
-9087:2:2194
-9088:2:2195
-9089:2:2206
-9090:2:2211
-9091:2:2212
-9092:0:4365
-9093:2:2224
-9094:0:4365
-9095:3:2843
-9096:0:4365
-9097:2:2226
-9098:0:4365
-9099:3:2844
-9100:0:4365
-9101:2:1936
-9102:0:4365
-9103:2:2129
-9104:0:4365
-9105:2:2130
-9106:0:4365
-9107:2:2134
-9108:0:4365
-9109:3:2843
-9110:0:4365
-9111:2:2136
-9112:0:4365
-9113:3:2844
-9114:0:4365
-9115:2:2137
-9116:2:2141
-9117:2:2142
-9118:2:2150
-9119:2:2151
-9120:2:2155
-9121:2:2156
-9122:2:2150
-9123:2:2151
-9124:2:2152
-9125:2:2164
-9126:2:2169
-9127:2:2173
-9128:2:2174
-9129:2:2181
-9130:2:2182
-9131:2:2193
-9132:2:2194
-9133:2:2195
-9134:2:2193
-9135:2:2194
-9136:2:2195
-9137:2:2206
-9138:2:2211
-9139:2:2212
-9140:0:4365
-9141:2:2224
-9142:0:4365
-9143:3:2843
-9144:0:4365
-9145:2:2226
-9146:0:4365
-9147:3:2844
-9148:0:4365
-9149:2:2230
-9150:0:4365
-9151:3:2843
-9152:0:4365
-9153:2:2235
-9154:2:2239
-9155:2:2240
-9156:2:2248
-9157:2:2249
-9158:2:2253
-9159:2:2254
-9160:2:2248
-9161:2:2249
-9162:2:2250
-9163:2:2262
-9164:2:2267
-9165:2:2271
-9166:2:2272
-9167:2:2279
-9168:2:2280
-9169:2:2291
-9170:2:2292
-9171:2:2293
-9172:2:2291
-9173:2:2292
-9174:2:2293
-9175:2:2304
-9176:2:2309
-9177:2:2310
-9178:0:4365
-9179:3:2844
-9180:0:4365
-9181:2:2322
-9182:0:4365
-9183:2:1169
-9184:0:4365
-9185:3:2843
-9186:0:4365
-9187:2:1170
-9188:0:4365
-9189:3:2844
-9190:0:4365
-9191:3:2845
-9192:0:4365
-9193:3:2851
-9194:0:4365
-9195:3:2854
-9196:3:2855
-9197:3:2867
-9198:3:2868
-9199:3:2872
-9200:3:2873
-9201:3:2867
-9202:3:2868
-9203:3:2872
-9204:3:2873
-9205:3:2881
-9206:3:2886
-9207:3:2890
-9208:3:2891
-9209:3:2898
-9210:3:2899
-9211:3:2910
-9212:3:2911
-9213:3:2912
-9214:3:2910
-9215:3:2911
-9216:3:2912
-9217:3:2923
-9218:3:2928
-9219:3:2929
-9220:0:4365
-9221:3:2941
-9222:0:4365
-9223:3:2942
-9224:0:4365
-9225:2:1173
-9226:0:4365
-9227:3:2943
-9228:0:4365
-9229:2:1179
-9230:0:4365
-9231:2:1180
-9232:0:4365
-9233:3:2942
-9234:0:4365
-9235:2:1181
-9236:2:1185
-9237:2:1186
-9238:2:1194
-9239:2:1195
-9240:2:1199
-9241:2:1200
-9242:2:1194
-9243:2:1195
-9244:2:1199
-9245:2:1200
-9246:2:1208
-9247:2:1213
-9248:2:1217
-9249:2:1218
-9250:2:1225
-9251:2:1226
-9252:2:1237
-9253:2:1238
-9254:2:1239
-9255:2:1237
-9256:2:1238
-9257:2:1239
-9258:2:1250
-9259:2:1255
-9260:2:1256
-9261:0:4365
-9262:3:2943
-9263:0:4365
-9264:2:1268
-9265:0:4365
-9266:3:2942
-9267:0:4365
-9268:2:1270
-9269:0:4365
-9270:3:2943
-9271:0:4365
-9272:2:1271
-9273:2:1275
-9274:2:1276
-9275:2:1284
-9276:2:1285
-9277:2:1289
-9278:2:1290
-9279:2:1284
-9280:2:1285
-9281:2:1289
-9282:2:1290
-9283:2:1298
-9284:2:1303
-9285:2:1307
-9286:2:1308
-9287:2:1315
-9288:2:1316
-9289:2:1327
-9290:2:1328
-9291:2:1329
-9292:2:1327
-9293:2:1328
-9294:2:1329
-9295:2:1340
-9296:2:1345
-9297:2:1346
-9298:0:4365
-9299:2:1358
-9300:0:4365
-9301:2:1360
-9302:0:4365
-9303:3:2942
-9304:0:4365
-9305:2:1361
-9306:0:4365
-9307:3:2943
-9308:0:4365
-9309:2:1362
-9310:2:1366
-9311:2:1367
-9312:2:1375
-9313:2:1376
-9314:2:1380
-9315:2:1381
-9316:2:1375
-9317:2:1376
-9318:2:1380
-9319:2:1381
-9320:2:1389
-9321:2:1394
-9322:2:1398
-9323:2:1399
-9324:2:1406
-9325:2:1407
-9326:2:1418
-9327:2:1419
-9328:2:1420
-9329:2:1418
-9330:2:1419
-9331:2:1420
-9332:2:1431
-9333:2:1436
-9334:2:1437
-9335:0:4365
-9336:2:1449
-9337:0:4365
-9338:3:2942
-9339:0:4365
-9340:2:1451
-9341:0:4365
-9342:3:2943
-9343:0:4365
-9344:2:1652
-9345:0:4365
-9346:2:1653
-9347:0:4365
-9348:2:1657
-9349:0:4365
-9350:2:1180
-9351:0:4365
-9352:3:2942
-9353:0:4365
-9354:2:1181
-9355:2:1185
-9356:2:1186
-9357:2:1194
-9358:2:1195
-9359:2:1199
-9360:2:1200
-9361:2:1194
-9362:2:1195
-9363:2:1196
-9364:2:1208
-9365:2:1213
-9366:2:1217
-9367:2:1218
-9368:2:1225
-9369:2:1226
-9370:2:1237
-9371:2:1238
-9372:2:1239
-9373:2:1237
-9374:2:1238
-9375:2:1239
-9376:2:1250
-9377:2:1255
-9378:2:1256
-9379:0:4365
-9380:3:2943
-9381:0:4365
-9382:2:1268
-9383:0:4365
-9384:3:2942
-9385:0:4365
-9386:2:1270
-9387:0:4365
-9388:3:2943
-9389:0:4365
-9390:2:1271
-9391:2:1275
-9392:2:1276
-9393:2:1284
-9394:2:1285
-9395:2:1289
-9396:2:1290
-9397:2:1284
-9398:2:1285
-9399:2:1289
-9400:2:1290
-9401:2:1298
-9402:2:1303
-9403:2:1307
-9404:2:1308
-9405:2:1315
-9406:2:1316
-9407:2:1327
-9408:2:1328
-9409:2:1329
-9410:2:1327
-9411:2:1328
-9412:2:1329
-9413:2:1340
-9414:2:1345
-9415:2:1346
-9416:0:4365
-9417:2:1358
-9418:0:4365
-9419:2:1454
-9420:0:4365
-9421:3:2942
-9422:0:4365
-9423:2:1455
-9424:0:4365
-9425:3:2943
-9426:0:4365
-9427:2:1652
-9428:0:4365
-9429:2:1653
-9430:0:4365
-9431:2:1657
-9432:0:4365
-9433:2:1660
-9434:0:4365
-9435:3:2942
-9436:0:4365
-9437:2:1665
-9438:2:1669
-9439:2:1670
-9440:2:1678
-9441:2:1679
-9442:2:1683
-9443:2:1684
-9444:2:1678
-9445:2:1679
-9446:2:1680
-9447:2:1692
-9448:2:1697
-9449:2:1701
-9450:2:1702
-9451:2:1709
-9452:2:1710
-9453:2:1721
-9454:2:1722
-9455:2:1723
-9456:2:1721
-9457:2:1722
-9458:2:1723
-9459:2:1734
-9460:2:1739
-9461:2:1740
-9462:0:4365
-9463:3:2943
-9464:0:4365
-9465:2:1752
-9466:0:4365
-9467:3:2942
-9468:0:4365
-9469:2:1754
-9470:0:4365
-9471:3:2943
-9472:0:4365
-9473:2:1755
-9474:2:1759
-9475:2:1760
-9476:2:1768
-9477:2:1769
-9478:2:1773
-9479:2:1774
-9480:2:1768
-9481:2:1769
-9482:2:1773
-9483:2:1774
-9484:2:1782
-9485:2:1787
-9486:2:1791
-9487:2:1792
-9488:2:1799
-9489:2:1800
-9490:2:1811
-9491:2:1812
-9492:2:1813
-9493:2:1811
-9494:2:1812
-9495:2:1813
-9496:2:1824
-9497:2:1829
-9498:2:1830
-9499:0:4365
-9500:2:1842
-9501:0:4365
-9502:3:2942
-9503:0:4365
-9504:2:1844
-9505:0:4365
-9506:3:2943
-9507:0:4365
-9508:2:1845
-9509:2:1849
-9510:2:1850
-9511:2:1858
-9512:2:1859
-9513:2:1863
-9514:2:1864
-9515:2:1858
-9516:2:1859
-9517:2:1863
-9518:2:1864
-9519:2:1872
-9520:2:1877
-9521:2:1881
-9522:2:1882
-9523:2:1889
-9524:2:1890
-9525:2:1901
-9526:2:1902
-9527:2:1903
-9528:2:1901
-9529:2:1902
-9530:2:1903
-9531:2:1914
-9532:2:1919
-9533:2:1920
-9534:0:4365
-9535:2:1932
-9536:0:4365
-9537:3:2942
-9538:0:4365
-9539:2:1934
-9540:0:4365
-9541:3:2943
-9542:0:4365
-9543:2:1935
-9544:0:4365
-9545:2:1936
-9546:0:4365
-9547:2:2129
-9548:0:4365
-9549:2:2130
-9550:0:4365
-9551:2:2134
-9552:0:4365
-9553:3:2942
-9554:0:4365
-9555:2:2136
-9556:0:4365
-9557:3:2943
-9558:0:4365
-9559:2:2137
-9560:2:2141
-9561:2:2142
-9562:2:2150
-9563:2:2151
-9564:2:2155
-9565:2:2156
-9566:2:2150
-9567:2:2151
-9568:2:2155
-9569:2:2156
-9570:2:2164
-9571:2:2169
-9572:2:2173
-9573:2:2174
-9574:2:2181
-9575:2:2182
-9576:2:2193
-9577:2:2194
-9578:2:2195
-9579:2:2193
-9580:2:2194
-9581:2:2195
-9582:2:2206
-9583:2:2211
-9584:2:2212
-9585:0:4365
-9586:2:2224
-9587:0:4365
-9588:3:2942
-9589:0:4365
-9590:2:2226
-9591:0:4365
-9592:3:2943
-9593:0:4365
-9594:2:1936
-9595:0:4365
-9596:2:2129
-9597:0:4365
-9598:2:2130
-9599:0:4365
-9600:2:2134
-9601:0:4365
-9602:3:2942
-9603:0:4365
-9604:2:2136
-9605:0:4365
-9606:3:2943
-9607:0:4365
-9608:2:2137
-9609:2:2141
-9610:2:2142
-9611:2:2150
-9612:2:2151
-9613:2:2155
-9614:2:2156
-9615:2:2150
-9616:2:2151
-9617:2:2152
-9618:2:2164
-9619:2:2169
-9620:2:2173
-9621:2:2174
-9622:2:2181
-9623:2:2182
-9624:2:2193
-9625:2:2194
-9626:2:2195
-9627:2:2193
-9628:2:2194
-9629:2:2195
-9630:2:2206
-9631:2:2211
-9632:2:2212
-9633:0:4365
-9634:2:2224
-9635:0:4365
-9636:3:2942
-9637:0:4365
-9638:2:2226
-9639:0:4365
-9640:3:2943
-9641:0:4365
-9642:2:2230
-9643:0:4365
-9644:3:2942
-9645:0:4365
-9646:2:2235
-9647:2:2239
-9648:2:2240
-9649:2:2248
-9650:2:2249
-9651:2:2253
-9652:2:2254
-9653:2:2248
-9654:2:2249
-9655:2:2250
-9656:2:2262
-9657:2:2267
-9658:2:2271
-9659:2:2272
-9660:2:2279
-9661:2:2280
-9662:2:2291
-9663:2:2292
-9664:2:2293
-9665:2:2291
-9666:2:2292
-9667:2:2293
-9668:2:2304
-9669:2:2309
-9670:2:2310
-9671:0:4365
-9672:3:2943
-9673:0:4365
-9674:2:2322
-9675:0:4365
-9676:2:1169
-9677:0:4365
-9678:3:2942
-9679:0:4365
-9680:2:1170
-9681:0:4365
-9682:3:2943
-9683:0:4365
-9684:3:2944
-9685:0:4365
-9686:3:2950
-9687:0:4365
-9688:3:2951
-9689:0:4365
-9690:3:2952
-9691:0:4365
-9692:3:2953
-9693:0:4365
-9694:3:2954
-9695:3:2958
-9696:3:2959
-9697:3:2967
-9698:3:2968
-9699:3:2972
-9700:3:2973
-9701:3:2967
-9702:3:2968
-9703:3:2972
-9704:3:2973
-9705:3:2981
-9706:3:2986
-9707:3:2990
-9708:3:2991
-9709:3:2998
-9710:3:2999
-9711:3:3010
-9712:3:3011
-9713:3:3012
-9714:3:3010
-9715:3:3011
-9716:3:3012
-9717:3:3023
-9718:3:3028
-9719:3:3029
-9720:0:4365
-9721:3:3041
-9722:0:4365
-9723:3:3042
-9724:0:4365
-9725:2:1173
-9726:0:4365
-9727:3:3043
-9728:0:4365
-9729:2:1179
-9730:0:4365
-9731:2:1180
-9732:0:4365
-9733:3:3042
-9734:0:4365
-9735:2:1181
-9736:2:1185
-9737:2:1186
-9738:2:1194
-9739:2:1195
-9740:2:1199
-9741:2:1200
-9742:2:1194
-9743:2:1195
-9744:2:1199
-9745:2:1200
-9746:2:1208
-9747:2:1213
-9748:2:1217
-9749:2:1218
-9750:2:1225
-9751:2:1226
-9752:2:1237
-9753:2:1238
-9754:2:1239
-9755:2:1237
-9756:2:1238
-9757:2:1239
-9758:2:1250
-9759:2:1255
-9760:2:1256
-9761:0:4365
-9762:3:3043
-9763:0:4365
-9764:2:1268
-9765:0:4365
-9766:3:3042
-9767:0:4365
-9768:2:1270
-9769:0:4365
-9770:3:3043
-9771:0:4365
-9772:2:1271
-9773:2:1275
-9774:2:1276
-9775:2:1284
-9776:2:1285
-9777:2:1289
-9778:2:1290
-9779:2:1284
-9780:2:1285
-9781:2:1289
-9782:2:1290
-9783:2:1298
-9784:2:1303
-9785:2:1307
-9786:2:1308
-9787:2:1315
-9788:2:1316
-9789:2:1327
-9790:2:1328
-9791:2:1329
-9792:2:1327
-9793:2:1328
-9794:2:1329
-9795:2:1340
-9796:2:1345
-9797:2:1346
-9798:0:4365
-9799:2:1358
-9800:0:4365
-9801:2:1360
-9802:0:4365
-9803:3:3042
-9804:0:4365
-9805:2:1361
-9806:0:4365
-9807:3:3043
-9808:0:4365
-9809:2:1362
-9810:2:1366
-9811:2:1367
-9812:2:1375
-9813:2:1376
-9814:2:1380
-9815:2:1381
-9816:2:1375
-9817:2:1376
-9818:2:1380
-9819:2:1381
-9820:2:1389
-9821:2:1394
-9822:2:1398
-9823:2:1399
-9824:2:1406
-9825:2:1407
-9826:2:1418
-9827:2:1419
-9828:2:1420
-9829:2:1418
-9830:2:1419
-9831:2:1420
-9832:2:1431
-9833:2:1436
-9834:2:1437
-9835:0:4365
-9836:2:1449
-9837:0:4365
-9838:3:3042
-9839:0:4365
-9840:2:1451
-9841:0:4365
-9842:3:3043
-9843:0:4365
-9844:2:1652
-9845:0:4365
-9846:2:1653
-9847:0:4365
-9848:2:1657
-9849:0:4365
-9850:2:1180
-9851:0:4365
-9852:3:3042
-9853:0:4365
-9854:2:1181
-9855:2:1185
-9856:2:1186
-9857:2:1194
-9858:2:1195
-9859:2:1199
-9860:2:1200
-9861:2:1194
-9862:2:1195
-9863:2:1196
-9864:2:1208
-9865:2:1213
-9866:2:1217
-9867:2:1218
-9868:2:1225
-9869:2:1226
-9870:2:1237
-9871:2:1238
-9872:2:1239
-9873:2:1237
-9874:2:1238
-9875:2:1239
-9876:2:1250
-9877:2:1255
-9878:2:1256
-9879:0:4365
-9880:3:3043
-9881:0:4365
-9882:2:1268
-9883:0:4365
-9884:3:3042
-9885:0:4365
-9886:2:1270
-9887:0:4365
-9888:3:3043
-9889:0:4365
-9890:2:1271
-9891:2:1275
-9892:2:1276
-9893:2:1284
-9894:2:1285
-9895:2:1289
-9896:2:1290
-9897:2:1284
-9898:2:1285
-9899:2:1289
-9900:2:1290
-9901:2:1298
-9902:2:1303
-9903:2:1307
-9904:2:1308
-9905:2:1315
-9906:2:1316
-9907:2:1327
-9908:2:1328
-9909:2:1329
-9910:2:1327
-9911:2:1328
-9912:2:1329
-9913:2:1340
-9914:2:1345
-9915:2:1346
-9916:0:4365
-9917:2:1358
-9918:0:4365
-9919:2:1454
-9920:0:4365
-9921:3:3042
-9922:0:4365
-9923:2:1455
-9924:0:4365
-9925:3:3043
-9926:0:4365
-9927:2:1652
-9928:0:4365
-9929:2:1653
-9930:0:4365
-9931:2:1657
-9932:0:4365
-9933:2:1660
-9934:0:4365
-9935:3:3042
-9936:0:4365
-9937:2:1665
-9938:2:1669
-9939:2:1670
-9940:2:1678
-9941:2:1679
-9942:2:1683
-9943:2:1684
-9944:2:1678
-9945:2:1679
-9946:2:1680
-9947:2:1692
-9948:2:1697
-9949:2:1701
-9950:2:1702
-9951:2:1709
-9952:2:1710
-9953:2:1721
-9954:2:1722
-9955:2:1723
-9956:2:1721
-9957:2:1722
-9958:2:1723
-9959:2:1734
-9960:2:1739
-9961:2:1740
-9962:0:4365
-9963:3:3043
-9964:0:4365
-9965:2:1752
-9966:0:4365
-9967:3:3042
-9968:0:4365
-9969:2:1754
-9970:0:4365
-9971:3:3043
-9972:0:4365
-9973:2:1755
-9974:2:1759
-9975:2:1760
-9976:2:1768
-9977:2:1769
-9978:2:1773
-9979:2:1774
-9980:2:1768
-9981:2:1769
-9982:2:1773
-9983:2:1774
-9984:2:1782
-9985:2:1787
-9986:2:1791
-9987:2:1792
-9988:2:1799
-9989:2:1800
-9990:2:1811
-9991:2:1812
-9992:2:1813
-9993:2:1811
-9994:2:1812
-9995:2:1813
-9996:2:1824
-9997:2:1829
-9998:2:1830
-9999:0:4365
-10000:2:1842
-10001:0:4365
-10002:3:3042
-10003:0:4365
-10004:2:1844
-10005:0:4365
-10006:3:3043
-10007:0:4365
-10008:2:1845
-10009:2:1849
-10010:2:1850
-10011:2:1858
-10012:2:1859
-10013:2:1863
-10014:2:1864
-10015:2:1858
-10016:2:1859
-10017:2:1863
-10018:2:1864
-10019:2:1872
-10020:2:1877
-10021:2:1881
-10022:2:1882
-10023:2:1889
-10024:2:1890
-10025:2:1901
-10026:2:1902
-10027:2:1903
-10028:2:1901
-10029:2:1902
-10030:2:1903
-10031:2:1914
-10032:2:1919
-10033:2:1920
-10034:0:4365
-10035:2:1932
-10036:0:4365
-10037:3:3042
-10038:0:4365
-10039:2:1934
-10040:0:4365
-10041:3:3043
-10042:0:4365
-10043:2:1935
-10044:0:4365
-10045:2:1936
-10046:0:4365
-10047:2:2129
-10048:0:4365
-10049:2:2130
-10050:0:4365
-10051:2:2134
-10052:0:4365
-10053:3:3042
-10054:0:4365
-10055:2:2136
-10056:0:4365
-10057:3:3043
-10058:0:4365
-10059:2:2137
-10060:2:2141
-10061:2:2142
-10062:2:2150
-10063:2:2151
-10064:2:2155
-10065:2:2156
-10066:2:2150
-10067:2:2151
-10068:2:2155
-10069:2:2156
-10070:2:2164
-10071:2:2169
-10072:2:2173
-10073:2:2174
-10074:2:2181
-10075:2:2182
-10076:2:2193
-10077:2:2194
-10078:2:2195
-10079:2:2193
-10080:2:2194
-10081:2:2195
-10082:2:2206
-10083:2:2211
-10084:2:2212
-10085:0:4365
-10086:2:2224
-10087:0:4365
-10088:3:3042
-10089:0:4365
-10090:2:2226
-10091:0:4365
-10092:3:3043
-10093:0:4365
-10094:2:1936
-10095:0:4365
-10096:2:2129
-10097:0:4365
-10098:2:2130
-10099:0:4365
-10100:2:2134
-10101:0:4365
-10102:3:3042
-10103:0:4365
-10104:2:2136
-10105:0:4365
-10106:3:3043
-10107:0:4365
-10108:2:2137
-10109:2:2141
-10110:2:2142
-10111:2:2150
-10112:2:2151
-10113:2:2155
-10114:2:2156
-10115:2:2150
-10116:2:2151
-10117:2:2152
-10118:2:2164
-10119:2:2169
-10120:2:2173
-10121:2:2174
-10122:2:2181
-10123:2:2182
-10124:2:2193
-10125:2:2194
-10126:2:2195
-10127:2:2193
-10128:2:2194
-10129:2:2195
-10130:2:2206
-10131:2:2211
-10132:2:2212
-10133:0:4365
-10134:2:2224
-10135:0:4365
-10136:3:3042
-10137:0:4365
-10138:2:2226
-10139:0:4365
-10140:3:3043
-10141:0:4365
-10142:2:2230
-10143:0:4365
-10144:3:3042
-10145:0:4365
-10146:2:2235
-10147:2:2239
-10148:2:2240
-10149:2:2248
-10150:2:2249
-10151:2:2253
-10152:2:2254
-10153:2:2248
-10154:2:2249
-10155:2:2250
-10156:2:2262
-10157:2:2267
-10158:2:2271
-10159:2:2272
-10160:2:2279
-10161:2:2280
-10162:2:2291
-10163:2:2292
-10164:2:2293
-10165:2:2291
-10166:2:2292
-10167:2:2293
-10168:2:2304
-10169:2:2309
-10170:2:2310
-10171:0:4365
-10172:3:3043
-10173:0:4365
-10174:2:2322
-10175:0:4365
-10176:2:1169
-10177:0:4365
-10178:3:3042
-10179:0:4365
-10180:2:1170
-10181:0:4365
-10182:3:3043
-10183:0:4365
-10184:3:3044
-10185:0:4365
-10186:3:3257
-10187:0:4365
-10188:3:3265
-10189:0:4365
-10190:3:3266
-10191:3:3270
-10192:3:3271
-10193:3:3279
-10194:3:3280
-10195:3:3284
-10196:3:3285
-10197:3:3279
-10198:3:3280
-10199:3:3284
-10200:3:3285
-10201:3:3293
-10202:3:3298
-10203:3:3302
-10204:3:3303
-10205:3:3310
-10206:3:3311
-10207:3:3322
-10208:3:3323
-10209:3:3324
-10210:3:3322
-10211:3:3323
-10212:3:3324
-10213:3:3335
-10214:3:3340
-10215:3:3341
-10216:0:4365
-10217:3:3353
-10218:0:4365
-10219:3:3354
-10220:0:4365
-10221:2:1173
-10222:0:4365
-10223:3:3355
-10224:0:4365
-10225:2:1179
-10226:0:4365
-10227:2:1180
-10228:0:4365
-10229:3:3354
-10230:0:4365
-10231:2:1181
-10232:2:1185
-10233:2:1186
-10234:2:1194
-10235:2:1195
-10236:2:1199
-10237:2:1200
-10238:2:1194
-10239:2:1195
-10240:2:1199
-10241:2:1200
-10242:2:1208
-10243:2:1213
-10244:2:1217
-10245:2:1218
-10246:2:1225
-10247:2:1226
-10248:2:1237
-10249:2:1238
-10250:2:1239
-10251:2:1237
-10252:2:1238
-10253:2:1239
-10254:2:1250
-10255:2:1255
-10256:2:1256
-10257:0:4365
-10258:3:3355
-10259:0:4365
-10260:2:1268
-10261:0:4365
-10262:3:3354
-10263:0:4365
-10264:2:1270
-10265:0:4365
-10266:3:3355
-10267:0:4365
-10268:2:1271
-10269:2:1275
-10270:2:1276
-10271:2:1284
-10272:2:1285
-10273:2:1289
-10274:2:1290
-10275:2:1284
-10276:2:1285
-10277:2:1289
-10278:2:1290
-10279:2:1298
-10280:2:1303
-10281:2:1307
-10282:2:1308
-10283:2:1315
-10284:2:1316
-10285:2:1327
-10286:2:1328
-10287:2:1329
-10288:2:1327
-10289:2:1328
-10290:2:1329
-10291:2:1340
-10292:2:1345
-10293:2:1346
-10294:0:4365
-10295:2:1358
-10296:0:4365
-10297:2:1360
-10298:0:4365
-10299:3:3354
-10300:0:4365
-10301:2:1361
-10302:0:4365
-10303:3:3355
-10304:0:4365
-10305:2:1362
-10306:2:1366
-10307:2:1367
-10308:2:1375
-10309:2:1376
-10310:2:1380
-10311:2:1381
-10312:2:1375
-10313:2:1376
-10314:2:1380
-10315:2:1381
-10316:2:1389
-10317:2:1394
-10318:2:1398
-10319:2:1399
-10320:2:1406
-10321:2:1407
-10322:2:1418
-10323:2:1419
-10324:2:1420
-10325:2:1418
-10326:2:1419
-10327:2:1420
-10328:2:1431
-10329:2:1436
-10330:2:1437
-10331:0:4365
-10332:2:1449
-10333:0:4365
-10334:3:3354
-10335:0:4365
-10336:2:1451
-10337:0:4365
-10338:3:3355
-10339:0:4365
-10340:2:1652
-10341:0:4365
-10342:2:1653
-10343:0:4365
-10344:2:1657
-10345:0:4365
-10346:2:1180
-10347:0:4365
-10348:3:3354
-10349:0:4365
-10350:2:1181
-10351:2:1185
-10352:2:1186
-10353:2:1194
-10354:2:1195
-10355:2:1199
-10356:2:1200
-10357:2:1194
-10358:2:1195
-10359:2:1196
-10360:2:1208
-10361:2:1213
-10362:2:1217
-10363:2:1218
-10364:2:1225
-10365:2:1226
-10366:2:1237
-10367:2:1238
-10368:2:1239
-10369:2:1237
-10370:2:1238
-10371:2:1239
-10372:2:1250
-10373:2:1255
-10374:2:1256
-10375:0:4365
-10376:3:3355
-10377:0:4365
-10378:2:1268
-10379:0:4365
-10380:3:3354
-10381:0:4365
-10382:2:1270
-10383:0:4365
-10384:3:3355
-10385:0:4365
-10386:2:1271
-10387:2:1275
-10388:2:1276
-10389:2:1284
-10390:2:1285
-10391:2:1289
-10392:2:1290
-10393:2:1284
-10394:2:1285
-10395:2:1289
-10396:2:1290
-10397:2:1298
-10398:2:1303
-10399:2:1307
-10400:2:1308
-10401:2:1315
-10402:2:1316
-10403:2:1327
-10404:2:1328
-10405:2:1329
-10406:2:1327
-10407:2:1328
-10408:2:1329
-10409:2:1340
-10410:2:1345
-10411:2:1346
-10412:0:4365
-10413:2:1358
-10414:0:4365
-10415:2:1454
-10416:0:4365
-10417:3:3354
-10418:0:4365
-10419:2:1455
-10420:0:4365
-10421:3:3355
-10422:0:4365
-10423:2:1652
-10424:0:4365
-10425:2:1653
-10426:0:4365
-10427:2:1657
-10428:0:4365
-10429:2:1660
-10430:0:4365
-10431:3:3354
-10432:0:4365
-10433:2:1665
-10434:2:1669
-10435:2:1670
-10436:2:1678
-10437:2:1679
-10438:2:1683
-10439:2:1684
-10440:2:1678
-10441:2:1679
-10442:2:1680
-10443:2:1692
-10444:2:1697
-10445:2:1701
-10446:2:1702
-10447:2:1709
-10448:2:1710
-10449:2:1721
-10450:2:1722
-10451:2:1723
-10452:2:1721
-10453:2:1722
-10454:2:1723
-10455:2:1734
-10456:2:1739
-10457:2:1740
-10458:0:4365
-10459:3:3355
-10460:0:4365
-10461:2:1752
-10462:0:4365
-10463:3:3354
-10464:0:4365
-10465:2:1754
-10466:0:4365
-10467:3:3355
-10468:0:4365
-10469:2:1755
-10470:2:1759
-10471:2:1760
-10472:2:1768
-10473:2:1769
-10474:2:1773
-10475:2:1774
-10476:2:1768
-10477:2:1769
-10478:2:1773
-10479:2:1774
-10480:2:1782
-10481:2:1787
-10482:2:1791
-10483:2:1792
-10484:2:1799
-10485:2:1800
-10486:2:1811
-10487:2:1812
-10488:2:1813
-10489:2:1811
-10490:2:1812
-10491:2:1813
-10492:2:1824
-10493:2:1829
-10494:2:1830
-10495:0:4365
-10496:2:1842
-10497:0:4365
-10498:3:3354
-10499:0:4365
-10500:2:1844
-10501:0:4365
-10502:3:3355
-10503:0:4365
-10504:2:1845
-10505:2:1849
-10506:2:1850
-10507:2:1858
-10508:2:1859
-10509:2:1863
-10510:2:1864
-10511:2:1858
-10512:2:1859
-10513:2:1863
-10514:2:1864
-10515:2:1872
-10516:2:1877
-10517:2:1881
-10518:2:1882
-10519:2:1889
-10520:2:1890
-10521:2:1901
-10522:2:1902
-10523:2:1903
-10524:2:1901
-10525:2:1902
-10526:2:1903
-10527:2:1914
-10528:2:1919
-10529:2:1920
-10530:0:4365
-10531:2:1932
-10532:0:4365
-10533:3:3354
-10534:0:4365
-10535:2:1934
-10536:0:4365
-10537:3:3355
-10538:0:4365
-10539:2:1935
-10540:0:4365
-10541:2:1936
-10542:0:4365
-10543:2:2129
-10544:0:4365
-10545:2:2130
-10546:0:4365
-10547:2:2134
-10548:0:4365
-10549:3:3354
-10550:0:4365
-10551:2:2136
-10552:0:4365
-10553:3:3355
-10554:0:4365
-10555:2:2137
-10556:2:2141
-10557:2:2142
-10558:2:2150
-10559:2:2151
-10560:2:2155
-10561:2:2156
-10562:2:2150
-10563:2:2151
-10564:2:2155
-10565:2:2156
-10566:2:2164
-10567:2:2169
-10568:2:2173
-10569:2:2174
-10570:2:2181
-10571:2:2182
-10572:2:2193
-10573:2:2194
-10574:2:2195
-10575:2:2193
-10576:2:2194
-10577:2:2195
-10578:2:2206
-10579:2:2211
-10580:2:2212
-10581:0:4365
-10582:2:2224
-10583:0:4365
-10584:3:3354
-10585:0:4365
-10586:2:2226
-10587:0:4365
-10588:3:3355
-10589:0:4365
-10590:2:1936
-10591:0:4365
-10592:2:2129
-10593:0:4365
-10594:2:2130
-10595:0:4365
-10596:2:2134
-10597:0:4365
-10598:3:3354
-10599:0:4365
-10600:2:2136
-10601:0:4365
-10602:3:3355
-10603:0:4365
-10604:2:2137
-10605:2:2141
-10606:2:2142
-10607:2:2150
-10608:2:2151
-10609:2:2155
-10610:2:2156
-10611:2:2150
-10612:2:2151
-10613:2:2152
-10614:2:2164
-10615:2:2169
-10616:2:2173
-10617:2:2174
-10618:2:2181
-10619:2:2182
-10620:2:2193
-10621:2:2194
-10622:2:2195
-10623:2:2193
-10624:2:2194
-10625:2:2195
-10626:2:2206
-10627:2:2211
-10628:2:2212
-10629:0:4365
-10630:2:2224
-10631:0:4365
-10632:3:3354
-10633:0:4365
-10634:2:2226
-10635:0:4365
-10636:3:3355
-10637:0:4365
-10638:2:2230
-10639:0:4365
-10640:3:3354
-10641:0:4365
-10642:2:2235
-10643:2:2239
-10644:2:2240
-10645:2:2248
-10646:2:2249
-10647:2:2253
-10648:2:2254
-10649:2:2248
-10650:2:2249
-10651:2:2250
-10652:2:2262
-10653:2:2267
-10654:2:2271
-10655:2:2272
-10656:2:2279
-10657:2:2280
-10658:2:2291
-10659:2:2292
-10660:2:2293
-10661:2:2291
-10662:2:2292
-10663:2:2293
-10664:2:2304
-10665:2:2309
-10666:2:2310
-10667:0:4365
-10668:3:3355
-10669:0:4365
-10670:2:2322
-10671:0:4365
-10672:2:1169
-10673:0:4365
-10674:3:3354
-10675:0:4365
-10676:2:1170
-10677:0:4365
-10678:3:3355
-10679:0:4365
-10680:3:3356
-10681:0:4365
-10682:3:3366
-10683:0:4365
-10684:3:2951
-10685:0:4365
-10686:3:2952
-10687:0:4365
-10688:3:2953
-10689:0:4365
-10690:3:2954
-10691:3:2958
-10692:3:2959
-10693:3:2967
-10694:3:2968
-10695:3:2972
-10696:3:2973
-10697:3:2967
-10698:3:2968
-10699:3:2972
-10700:3:2973
-10701:3:2981
-10702:3:2986
-10703:3:2990
-10704:3:2991
-10705:3:2998
-10706:3:2999
-10707:3:3010
-10708:3:3011
-10709:3:3012
-10710:3:3010
-10711:3:3011
-10712:3:3012
-10713:3:3023
-10714:3:3028
-10715:3:3029
-10716:0:4365
-10717:3:3041
-10718:0:4365
-10719:3:3042
-10720:0:4365
-10721:2:1173
-10722:0:4365
-10723:3:3043
-10724:0:4365
-10725:2:1179
-10726:0:4365
-10727:2:1180
-10728:0:4365
-10729:3:3042
-10730:0:4365
-10731:2:1181
-10732:2:1185
-10733:2:1186
-10734:2:1194
-10735:2:1195
-10736:2:1199
-10737:2:1200
-10738:2:1194
-10739:2:1195
-10740:2:1199
-10741:2:1200
-10742:2:1208
-10743:2:1213
-10744:2:1217
-10745:2:1218
-10746:2:1225
-10747:2:1226
-10748:2:1237
-10749:2:1238
-10750:2:1239
-10751:2:1237
-10752:2:1238
-10753:2:1239
-10754:2:1250
-10755:2:1255
-10756:2:1256
-10757:0:4365
-10758:3:3043
-10759:0:4365
-10760:2:1268
-10761:0:4365
-10762:3:3042
-10763:0:4365
-10764:2:1270
-10765:0:4365
-10766:3:3043
-10767:0:4365
-10768:2:1271
-10769:2:1275
-10770:2:1276
-10771:2:1284
-10772:2:1285
-10773:2:1289
-10774:2:1290
-10775:2:1284
-10776:2:1285
-10777:2:1289
-10778:2:1290
-10779:2:1298
-10780:2:1303
-10781:2:1307
-10782:2:1308
-10783:2:1315
-10784:2:1316
-10785:2:1327
-10786:2:1328
-10787:2:1329
-10788:2:1327
-10789:2:1328
-10790:2:1329
-10791:2:1340
-10792:2:1345
-10793:2:1346
-10794:0:4365
-10795:2:1358
-10796:0:4365
-10797:2:1360
-10798:0:4365
-10799:3:3042
-10800:0:4365
-10801:2:1361
-10802:0:4365
-10803:3:3043
-10804:0:4365
-10805:2:1362
-10806:2:1366
-10807:2:1367
-10808:2:1375
-10809:2:1376
-10810:2:1380
-10811:2:1381
-10812:2:1375
-10813:2:1376
-10814:2:1380
-10815:2:1381
-10816:2:1389
-10817:2:1394
-10818:2:1398
-10819:2:1399
-10820:2:1406
-10821:2:1407
-10822:2:1418
-10823:2:1419
-10824:2:1420
-10825:2:1418
-10826:2:1419
-10827:2:1420
-10828:2:1431
-10829:2:1436
-10830:2:1437
-10831:0:4365
-10832:2:1449
-10833:0:4365
-10834:3:3042
-10835:0:4365
-10836:2:1451
-10837:0:4365
-10838:3:3043
-10839:0:4365
-10840:2:1652
-10841:0:4365
-10842:2:1653
-10843:0:4365
-10844:2:1657
-10845:0:4365
-10846:2:1180
-10847:0:4365
-10848:3:3042
-10849:0:4365
-10850:2:1181
-10851:2:1185
-10852:2:1186
-10853:2:1194
-10854:2:1195
-10855:2:1199
-10856:2:1200
-10857:2:1194
-10858:2:1195
-10859:2:1196
-10860:2:1208
-10861:2:1213
-10862:2:1217
-10863:2:1218
-10864:2:1225
-10865:2:1226
-10866:2:1237
-10867:2:1238
-10868:2:1239
-10869:2:1237
-10870:2:1238
-10871:2:1239
-10872:2:1250
-10873:2:1255
-10874:2:1256
-10875:0:4365
-10876:3:3043
-10877:0:4365
-10878:2:1268
-10879:0:4365
-10880:3:3042
-10881:0:4365
-10882:2:1270
-10883:0:4365
-10884:3:3043
-10885:0:4365
-10886:2:1271
-10887:2:1275
-10888:2:1276
-10889:2:1284
-10890:2:1285
-10891:2:1289
-10892:2:1290
-10893:2:1284
-10894:2:1285
-10895:2:1289
-10896:2:1290
-10897:2:1298
-10898:2:1303
-10899:2:1307
-10900:2:1308
-10901:2:1315
-10902:2:1316
-10903:2:1327
-10904:2:1328
-10905:2:1329
-10906:2:1327
-10907:2:1328
-10908:2:1329
-10909:2:1340
-10910:2:1345
-10911:2:1346
-10912:0:4365
-10913:2:1358
-10914:0:4365
-10915:2:1454
-10916:0:4365
-10917:3:3042
-10918:0:4365
-10919:2:1455
-10920:0:4365
-10921:3:3043
-10922:0:4365
-10923:2:1652
-10924:0:4365
-10925:2:1653
-10926:0:4365
-10927:2:1657
-10928:0:4365
-10929:2:1660
-10930:0:4365
-10931:3:3042
-10932:0:4365
-10933:2:1665
-10934:2:1669
-10935:2:1670
-10936:2:1678
-10937:2:1679
-10938:2:1683
-10939:2:1684
-10940:2:1678
-10941:2:1679
-10942:2:1680
-10943:2:1692
-10944:2:1697
-10945:2:1701
-10946:2:1702
-10947:2:1709
-10948:2:1710
-10949:2:1721
-10950:2:1722
-10951:2:1723
-10952:2:1721
-10953:2:1722
-10954:2:1723
-10955:2:1734
-10956:2:1739
-10957:2:1740
-10958:0:4365
-10959:3:3043
-10960:0:4365
-10961:2:1752
-10962:0:4365
-10963:3:3042
-10964:0:4365
-10965:2:1754
-10966:0:4365
-10967:3:3043
-10968:0:4365
-10969:2:1755
-10970:2:1759
-10971:2:1760
-10972:2:1768
-10973:2:1769
-10974:2:1773
-10975:2:1774
-10976:2:1768
-10977:2:1769
-10978:2:1773
-10979:2:1774
-10980:2:1782
-10981:2:1787
-10982:2:1791
-10983:2:1792
-10984:2:1799
-10985:2:1800
-10986:2:1811
-10987:2:1812
-10988:2:1813
-10989:2:1811
-10990:2:1812
-10991:2:1813
-10992:2:1824
-10993:2:1829
-10994:2:1830
-10995:0:4365
-10996:2:1842
-10997:0:4365
-10998:3:3042
-10999:0:4365
-11000:2:1844
-11001:0:4365
-11002:3:3043
-11003:0:4365
-11004:2:1845
-11005:2:1849
-11006:2:1850
-11007:2:1858
-11008:2:1859
-11009:2:1863
-11010:2:1864
-11011:2:1858
-11012:2:1859
-11013:2:1863
-11014:2:1864
-11015:2:1872
-11016:2:1877
-11017:2:1881
-11018:2:1882
-11019:2:1889
-11020:2:1890
-11021:2:1901
-11022:2:1902
-11023:2:1903
-11024:2:1901
-11025:2:1902
-11026:2:1903
-11027:2:1914
-11028:2:1919
-11029:2:1920
-11030:0:4365
-11031:2:1932
-11032:0:4365
-11033:3:3042
-11034:0:4365
-11035:2:1934
-11036:0:4365
-11037:3:3043
-11038:0:4365
-11039:2:1935
-11040:0:4365
-11041:2:1936
-11042:0:4365
-11043:2:2129
-11044:0:4365
-11045:2:2130
-11046:0:4365
-11047:2:2134
-11048:0:4365
-11049:3:3042
-11050:0:4365
-11051:2:2136
-11052:0:4365
-11053:3:3043
-11054:0:4365
-11055:2:2137
-11056:2:2141
-11057:2:2142
-11058:2:2150
-11059:2:2151
-11060:2:2155
-11061:2:2156
-11062:2:2150
-11063:2:2151
-11064:2:2155
-11065:2:2156
-11066:2:2164
-11067:2:2169
-11068:2:2173
-11069:2:2174
-11070:2:2181
-11071:2:2182
-11072:2:2193
-11073:2:2194
-11074:2:2195
-11075:2:2193
-11076:2:2194
-11077:2:2195
-11078:2:2206
-11079:2:2211
-11080:2:2212
-11081:0:4365
-11082:2:2224
-11083:0:4365
-11084:3:3042
-11085:0:4365
-11086:2:2226
-11087:0:4365
-11088:3:3043
-11089:0:4365
-11090:2:1936
-11091:0:4365
-11092:2:2129
-11093:0:4365
-11094:2:2130
-11095:0:4365
-11096:2:2134
-11097:0:4365
-11098:3:3042
-11099:0:4365
-11100:2:2136
-11101:0:4365
-11102:3:3043
-11103:0:4365
-11104:2:2137
-11105:2:2141
-11106:2:2142
-11107:2:2150
-11108:2:2151
-11109:2:2155
-11110:2:2156
-11111:2:2150
-11112:2:2151
-11113:2:2152
-11114:2:2164
-11115:2:2169
-11116:2:2173
-11117:2:2174
-11118:2:2181
-11119:2:2182
-11120:2:2193
-11121:2:2194
-11122:2:2195
-11123:2:2193
-11124:2:2194
-11125:2:2195
-11126:2:2206
-11127:2:2211
-11128:2:2212
-11129:0:4365
-11130:2:2224
-11131:0:4365
-11132:3:3042
-11133:0:4365
-11134:2:2226
-11135:0:4365
-11136:3:3043
-11137:0:4365
-11138:2:2230
-11139:0:4365
-11140:3:3042
-11141:0:4365
-11142:2:2235
-11143:2:2239
-11144:2:2240
-11145:2:2248
-11146:2:2249
-11147:2:2253
-11148:2:2254
-11149:2:2248
-11150:2:2249
-11151:2:2250
-11152:2:2262
-11153:2:2267
-11154:2:2271
-11155:2:2272
-11156:2:2279
-11157:2:2280
-11158:2:2291
-11159:2:2292
-11160:2:2293
-11161:2:2291
-11162:2:2292
-11163:2:2293
-11164:2:2304
-11165:2:2309
-11166:2:2310
-11167:0:4365
-11168:3:3043
-11169:0:4365
-11170:2:2322
-11171:0:4365
-11172:2:1169
-11173:0:4365
-11174:3:3042
-11175:0:4365
-11176:2:1170
-11177:0:4365
-11178:3:3043
-11179:0:4365
-11180:3:3044
-11181:0:4365
-11182:3:3257
-11183:0:4365
-11184:3:3362
-11185:0:4365
-11186:3:3363
-11187:0:4365
-11188:3:3367
-11189:0:4365
-11190:3:3373
-11191:3:3377
-11192:3:3378
-11193:3:3386
-11194:3:3387
-11195:3:3391
-11196:3:3392
-11197:3:3386
-11198:3:3387
-11199:3:3391
-11200:3:3392
-11201:3:3400
-11202:3:3405
-11203:3:3409
-11204:3:3410
-11205:3:3417
-11206:3:3418
-11207:3:3429
-11208:3:3430
-11209:3:3431
-11210:3:3429
-11211:3:3430
-11212:3:3431
-11213:3:3442
-11214:3:3447
-11215:3:3448
-11216:0:4365
-11217:3:3460
-11218:0:4365
-11219:3:3461
-11220:0:4365
-11221:2:1173
-11222:0:4365
-11223:3:3462
-11224:0:4365
-11225:2:1179
-11226:0:4365
-11227:2:1180
-11228:0:4365
-11229:3:3461
-11230:0:4365
-11231:2:1181
-11232:2:1185
-11233:2:1186
-11234:2:1194
-11235:2:1195
-11236:2:1199
-11237:2:1200
-11238:2:1194
-11239:2:1195
-11240:2:1199
-11241:2:1200
-11242:2:1208
-11243:2:1213
-11244:2:1217
-11245:2:1218
-11246:2:1225
-11247:2:1226
-11248:2:1237
-11249:2:1238
-11250:2:1239
-11251:2:1237
-11252:2:1238
-11253:2:1239
-11254:2:1250
-11255:2:1255
-11256:2:1256
-11257:0:4365
-11258:3:3462
-11259:0:4365
-11260:2:1268
-11261:0:4365
-11262:3:3461
-11263:0:4365
-11264:2:1270
-11265:0:4365
-11266:3:3462
-11267:0:4365
-11268:2:1271
-11269:2:1275
-11270:2:1276
-11271:2:1284
-11272:2:1285
-11273:2:1289
-11274:2:1290
-11275:2:1284
-11276:2:1285
-11277:2:1289
-11278:2:1290
-11279:2:1298
-11280:2:1303
-11281:2:1307
-11282:2:1308
-11283:2:1315
-11284:2:1316
-11285:2:1327
-11286:2:1328
-11287:2:1329
-11288:2:1327
-11289:2:1328
-11290:2:1329
-11291:2:1340
-11292:2:1345
-11293:2:1346
-11294:0:4365
-11295:2:1358
-11296:0:4365
-11297:2:1360
-11298:0:4365
-11299:3:3461
-11300:0:4365
-11301:2:1361
-11302:0:4365
-11303:3:3462
-11304:0:4365
-11305:2:1362
-11306:2:1366
-11307:2:1367
-11308:2:1375
-11309:2:1376
-11310:2:1380
-11311:2:1381
-11312:2:1375
-11313:2:1376
-11314:2:1380
-11315:2:1381
-11316:2:1389
-11317:2:1394
-11318:2:1398
-11319:2:1399
-11320:2:1406
-11321:2:1407
-11322:2:1418
-11323:2:1419
-11324:2:1420
-11325:2:1418
-11326:2:1419
-11327:2:1420
-11328:2:1431
-11329:2:1436
-11330:2:1437
-11331:0:4365
-11332:2:1449
-11333:0:4365
-11334:3:3461
-11335:0:4365
-11336:2:1451
-11337:0:4365
-11338:3:3462
-11339:0:4365
-11340:2:1652
-11341:0:4365
-11342:2:1653
-11343:0:4365
-11344:2:1657
-11345:0:4365
-11346:2:1180
-11347:0:4365
-11348:3:3461
-11349:0:4365
-11350:2:1181
-11351:2:1185
-11352:2:1186
-11353:2:1194
-11354:2:1195
-11355:2:1199
-11356:2:1200
-11357:2:1194
-11358:2:1195
-11359:2:1196
-11360:2:1208
-11361:2:1213
-11362:2:1217
-11363:2:1218
-11364:2:1225
-11365:2:1226
-11366:2:1237
-11367:2:1238
-11368:2:1239
-11369:2:1237
-11370:2:1238
-11371:2:1239
-11372:2:1250
-11373:2:1255
-11374:2:1256
-11375:0:4365
-11376:3:3462
-11377:0:4365
-11378:2:1268
-11379:0:4365
-11380:3:3461
-11381:0:4365
-11382:2:1270
-11383:0:4365
-11384:3:3462
-11385:0:4365
-11386:2:1271
-11387:2:1275
-11388:2:1276
-11389:2:1284
-11390:2:1285
-11391:2:1289
-11392:2:1290
-11393:2:1284
-11394:2:1285
-11395:2:1289
-11396:2:1290
-11397:2:1298
-11398:2:1303
-11399:2:1307
-11400:2:1308
-11401:2:1315
-11402:2:1316
-11403:2:1327
-11404:2:1328
-11405:2:1329
-11406:2:1327
-11407:2:1328
-11408:2:1329
-11409:2:1340
-11410:2:1345
-11411:2:1346
-11412:0:4365
-11413:2:1358
-11414:0:4365
-11415:2:1454
-11416:0:4365
-11417:3:3461
-11418:0:4365
-11419:2:1455
-11420:0:4365
-11421:3:3462
-11422:0:4365
-11423:2:1652
-11424:0:4365
-11425:2:1653
-11426:0:4365
-11427:2:1657
-11428:0:4365
-11429:2:1660
-11430:0:4365
-11431:3:3461
-11432:0:4365
-11433:2:1665
-11434:2:1669
-11435:2:1670
-11436:2:1678
-11437:2:1679
-11438:2:1683
-11439:2:1684
-11440:2:1678
-11441:2:1679
-11442:2:1680
-11443:2:1692
-11444:2:1697
-11445:2:1701
-11446:2:1702
-11447:2:1709
-11448:2:1710
-11449:2:1721
-11450:2:1722
-11451:2:1723
-11452:2:1721
-11453:2:1722
-11454:2:1723
-11455:2:1734
-11456:2:1739
-11457:2:1740
-11458:0:4365
-11459:3:3462
-11460:0:4365
-11461:2:1752
-11462:0:4365
-11463:3:3461
-11464:0:4365
-11465:2:1754
-11466:0:4365
-11467:3:3462
-11468:0:4365
-11469:2:1755
-11470:2:1759
-11471:2:1760
-11472:2:1768
-11473:2:1769
-11474:2:1773
-11475:2:1774
-11476:2:1768
-11477:2:1769
-11478:2:1773
-11479:2:1774
-11480:2:1782
-11481:2:1787
-11482:2:1791
-11483:2:1792
-11484:2:1799
-11485:2:1800
-11486:2:1811
-11487:2:1812
-11488:2:1813
-11489:2:1811
-11490:2:1812
-11491:2:1813
-11492:2:1824
-11493:2:1829
-11494:2:1830
-11495:0:4365
-11496:2:1842
-11497:0:4365
-11498:3:3461
-11499:0:4365
-11500:2:1844
-11501:0:4365
-11502:3:3462
-11503:0:4365
-11504:2:1845
-11505:2:1849
-11506:2:1850
-11507:2:1858
-11508:2:1859
-11509:2:1863
-11510:2:1864
-11511:2:1858
-11512:2:1859
-11513:2:1863
-11514:2:1864
-11515:2:1872
-11516:2:1877
-11517:2:1881
-11518:2:1882
-11519:2:1889
-11520:2:1890
-11521:2:1901
-11522:2:1902
-11523:2:1903
-11524:2:1901
-11525:2:1902
-11526:2:1903
-11527:2:1914
-11528:2:1919
-11529:2:1920
-11530:0:4365
-11531:2:1932
-11532:0:4365
-11533:3:3461
-11534:0:4365
-11535:2:1934
-11536:0:4365
-11537:3:3462
-11538:0:4365
-11539:2:1935
-11540:0:4365
-11541:2:1936
-11542:0:4365
-11543:2:2129
-11544:0:4365
-11545:2:2130
-11546:0:4365
-11547:2:2134
-11548:0:4365
-11549:3:3461
-11550:0:4365
-11551:2:2136
-11552:0:4365
-11553:3:3462
-11554:0:4365
-11555:2:2137
-11556:2:2141
-11557:2:2142
-11558:2:2150
-11559:2:2151
-11560:2:2155
-11561:2:2156
-11562:2:2150
-11563:2:2151
-11564:2:2155
-11565:2:2156
-11566:2:2164
-11567:2:2169
-11568:2:2173
-11569:2:2174
-11570:2:2181
-11571:2:2182
-11572:2:2193
-11573:2:2194
-11574:2:2195
-11575:2:2193
-11576:2:2194
-11577:2:2195
-11578:2:2206
-11579:2:2211
-11580:2:2212
-11581:0:4365
-11582:2:2224
-11583:0:4365
-11584:3:3461
-11585:0:4365
-11586:2:2226
-11587:0:4365
-11588:3:3462
-11589:0:4365
-11590:2:1936
-11591:0:4365
-11592:2:2129
-11593:0:4365
-11594:2:2130
-11595:0:4365
-11596:2:2134
-11597:0:4365
-11598:3:3461
-11599:0:4365
-11600:2:2136
-11601:0:4365
-11602:3:3462
-11603:0:4365
-11604:2:2137
-11605:2:2141
-11606:2:2142
-11607:2:2150
-11608:2:2151
-11609:2:2155
-11610:2:2156
-11611:2:2150
-11612:2:2151
-11613:2:2152
-11614:2:2164
-11615:2:2169
-11616:2:2173
-11617:2:2174
-11618:2:2181
-11619:2:2182
-11620:2:2193
-11621:2:2194
-11622:2:2195
-11623:2:2193
-11624:2:2194
-11625:2:2195
-11626:2:2206
-11627:2:2211
-11628:2:2212
-11629:0:4365
-11630:2:2224
-11631:0:4365
-11632:3:3461
-11633:0:4365
-11634:2:2226
-11635:0:4365
-11636:3:3462
-11637:0:4365
-11638:2:2230
-11639:0:4365
-11640:3:3461
-11641:0:4365
-11642:2:2235
-11643:2:2239
-11644:2:2240
-11645:2:2248
-11646:2:2249
-11647:2:2253
-11648:2:2254
-11649:2:2248
-11650:2:2249
-11651:2:2250
-11652:2:2262
-11653:2:2267
-11654:2:2271
-11655:2:2272
-11656:2:2279
-11657:2:2280
-11658:2:2291
-11659:2:2292
-11660:2:2293
-11661:2:2291
-11662:2:2292
-11663:2:2293
-11664:2:2304
-11665:2:2309
-11666:2:2310
-11667:0:4365
-11668:3:3462
-11669:0:4365
-11670:2:2322
-11671:0:4365
-11672:2:1169
-11673:0:4365
-11674:3:3461
-11675:0:4365
-11676:2:1170
-11677:0:4365
-11678:3:3462
-11679:0:4365
-11680:3:3463
-11681:0:4365
-11682:3:3469
-11683:0:4365
-11684:3:3470
-11685:3:3474
-11686:3:3475
-11687:3:3483
-11688:3:3484
-11689:3:3488
-11690:3:3489
-11691:3:3483
-11692:3:3484
-11693:3:3488
-11694:3:3489
-11695:3:3497
-11696:3:3502
-11697:3:3506
-11698:3:3507
-11699:3:3514
-11700:3:3515
-11701:3:3526
-11702:3:3527
-11703:3:3528
-11704:3:3526
-11705:3:3527
-11706:3:3528
-11707:3:3539
-11708:3:3544
-11709:3:3545
-11710:0:4365
-11711:3:3557
-11712:0:4365
-11713:3:3558
-11714:0:4365
-11715:2:1173
-11716:0:4365
-11717:3:3559
-11718:0:4365
-11719:2:1179
-11720:0:4365
-11721:2:1180
-11722:0:4365
-11723:3:3558
-11724:0:4365
-11725:2:1181
-11726:2:1185
-11727:2:1186
-11728:2:1194
-11729:2:1195
-11730:2:1199
-11731:2:1200
-11732:2:1194
-11733:2:1195
-11734:2:1199
-11735:2:1200
-11736:2:1208
-11737:2:1213
-11738:2:1217
-11739:2:1218
-11740:2:1225
-11741:2:1226
-11742:2:1237
-11743:2:1238
-11744:2:1239
-11745:2:1237
-11746:2:1238
-11747:2:1239
-11748:2:1250
-11749:2:1255
-11750:2:1256
-11751:0:4365
-11752:3:3559
-11753:0:4365
-11754:2:1268
-11755:0:4365
-11756:3:3558
-11757:0:4365
-11758:2:1270
-11759:0:4365
-11760:3:3559
-11761:0:4365
-11762:2:1271
-11763:2:1275
-11764:2:1276
-11765:2:1284
-11766:2:1285
-11767:2:1289
-11768:2:1290
-11769:2:1284
-11770:2:1285
-11771:2:1289
-11772:2:1290
-11773:2:1298
-11774:2:1303
-11775:2:1307
-11776:2:1308
-11777:2:1315
-11778:2:1316
-11779:2:1327
-11780:2:1328
-11781:2:1329
-11782:2:1327
-11783:2:1328
-11784:2:1329
-11785:2:1340
-11786:2:1345
-11787:2:1346
-11788:0:4365
-11789:2:1358
-11790:0:4365
-11791:2:1360
-11792:0:4365
-11793:3:3558
-11794:0:4365
-11795:2:1361
-11796:0:4365
-11797:3:3559
-11798:0:4365
-11799:2:1362
-11800:2:1366
-11801:2:1367
-11802:2:1375
-11803:2:1376
-11804:2:1380
-11805:2:1381
-11806:2:1375
-11807:2:1376
-11808:2:1380
-11809:2:1381
-11810:2:1389
-11811:2:1394
-11812:2:1398
-11813:2:1399
-11814:2:1406
-11815:2:1407
-11816:2:1418
-11817:2:1419
-11818:2:1420
-11819:2:1418
-11820:2:1419
-11821:2:1420
-11822:2:1431
-11823:2:1436
-11824:2:1437
-11825:0:4365
-11826:2:1449
-11827:0:4365
-11828:3:3558
-11829:0:4365
-11830:2:1451
-11831:0:4365
-11832:3:3559
-11833:0:4365
-11834:2:1652
-11835:0:4365
-11836:2:1653
-11837:0:4365
-11838:2:1657
-11839:0:4365
-11840:2:1180
-11841:0:4365
-11842:3:3558
-11843:0:4365
-11844:2:1181
-11845:2:1185
-11846:2:1186
-11847:2:1194
-11848:2:1195
-11849:2:1199
-11850:2:1200
-11851:2:1194
-11852:2:1195
-11853:2:1196
-11854:2:1208
-11855:2:1213
-11856:2:1217
-11857:2:1218
-11858:2:1225
-11859:2:1226
-11860:2:1237
-11861:2:1238
-11862:2:1239
-11863:2:1237
-11864:2:1238
-11865:2:1239
-11866:2:1250
-11867:2:1255
-11868:2:1256
-11869:0:4365
-11870:3:3559
-11871:0:4365
-11872:2:1268
-11873:0:4365
-11874:3:3558
-11875:0:4365
-11876:2:1270
-11877:0:4365
-11878:3:3559
-11879:0:4365
-11880:2:1271
-11881:2:1275
-11882:2:1276
-11883:2:1284
-11884:2:1285
-11885:2:1289
-11886:2:1290
-11887:2:1284
-11888:2:1285
-11889:2:1289
-11890:2:1290
-11891:2:1298
-11892:2:1303
-11893:2:1307
-11894:2:1308
-11895:2:1315
-11896:2:1316
-11897:2:1327
-11898:2:1328
-11899:2:1329
-11900:2:1327
-11901:2:1328
-11902:2:1329
-11903:2:1340
-11904:2:1345
-11905:2:1346
-11906:0:4365
-11907:2:1358
-11908:0:4365
-11909:2:1454
-11910:0:4365
-11911:3:3558
-11912:0:4365
-11913:2:1455
-11914:0:4365
-11915:3:3559
-11916:0:4365
-11917:2:1652
-11918:0:4365
-11919:2:1653
-11920:0:4365
-11921:2:1657
-11922:0:4365
-11923:2:1660
-11924:0:4365
-11925:3:3558
-11926:0:4365
-11927:2:1665
-11928:2:1669
-11929:2:1670
-11930:2:1678
-11931:2:1679
-11932:2:1683
-11933:2:1684
-11934:2:1678
-11935:2:1679
-11936:2:1680
-11937:2:1692
-11938:2:1697
-11939:2:1701
-11940:2:1702
-11941:2:1709
-11942:2:1710
-11943:2:1721
-11944:2:1722
-11945:2:1723
-11946:2:1721
-11947:2:1722
-11948:2:1723
-11949:2:1734
-11950:2:1739
-11951:2:1740
-11952:0:4365
-11953:3:3559
-11954:0:4365
-11955:2:1752
-11956:0:4365
-11957:3:3558
-11958:0:4365
-11959:2:1754
-11960:0:4365
-11961:3:3559
-11962:0:4365
-11963:2:1755
-11964:2:1759
-11965:2:1760
-11966:2:1768
-11967:2:1769
-11968:2:1773
-11969:2:1774
-11970:2:1768
-11971:2:1769
-11972:2:1773
-11973:2:1774
-11974:2:1782
-11975:2:1787
-11976:2:1791
-11977:2:1792
-11978:2:1799
-11979:2:1800
-11980:2:1811
-11981:2:1812
-11982:2:1813
-11983:2:1811
-11984:2:1812
-11985:2:1813
-11986:2:1824
-11987:2:1829
-11988:2:1830
-11989:0:4365
-11990:2:1842
-11991:0:4365
-11992:3:3558
-11993:0:4365
-11994:2:1844
-11995:0:4365
-11996:3:3559
-11997:0:4365
-11998:2:1845
-11999:2:1849
-12000:2:1850
-12001:2:1858
-12002:2:1859
-12003:2:1863
-12004:2:1864
-12005:2:1858
-12006:2:1859
-12007:2:1863
-12008:2:1864
-12009:2:1872
-12010:2:1877
-12011:2:1881
-12012:2:1882
-12013:2:1889
-12014:2:1890
-12015:2:1901
-12016:2:1902
-12017:2:1903
-12018:2:1901
-12019:2:1902
-12020:2:1903
-12021:2:1914
-12022:2:1919
-12023:2:1920
-12024:0:4365
-12025:2:1932
-12026:0:4365
-12027:3:3558
-12028:0:4365
-12029:2:1934
-12030:0:4365
-12031:3:3559
-12032:0:4365
-12033:2:1935
-12034:0:4365
-12035:2:1936
-12036:0:4365
-12037:2:2129
-12038:0:4365
-12039:2:2130
-12040:0:4365
-12041:2:2134
-12042:0:4365
-12043:3:3558
-12044:0:4365
-12045:2:2136
-12046:0:4365
-12047:3:3559
-12048:0:4365
-12049:2:2137
-12050:2:2141
-12051:2:2142
-12052:2:2150
-12053:2:2151
-12054:2:2155
-12055:2:2156
-12056:2:2150
-12057:2:2151
-12058:2:2155
-12059:2:2156
-12060:2:2164
-12061:2:2169
-12062:2:2173
-12063:2:2174
-12064:2:2181
-12065:2:2182
-12066:2:2193
-12067:2:2194
-12068:2:2195
-12069:2:2193
-12070:2:2194
-12071:2:2195
-12072:2:2206
-12073:2:2211
-12074:2:2212
-12075:0:4365
-12076:2:2224
-12077:0:4365
-12078:3:3558
-12079:0:4365
-12080:2:2226
-12081:0:4365
-12082:3:3559
-12083:0:4365
-12084:2:1936
-12085:0:4365
-12086:2:2129
-12087:0:4365
-12088:2:2130
-12089:0:4365
-12090:2:2134
-12091:0:4365
-12092:3:3558
-12093:0:4365
-12094:2:2136
-12095:0:4365
-12096:3:3559
-12097:0:4365
-12098:2:2137
-12099:2:2141
-12100:2:2142
-12101:2:2150
-12102:2:2151
-12103:2:2155
-12104:2:2156
-12105:2:2150
-12106:2:2151
-12107:2:2152
-12108:2:2164
-12109:2:2169
-12110:2:2173
-12111:2:2174
-12112:2:2181
-12113:2:2182
-12114:2:2193
-12115:2:2194
-12116:2:2195
-12117:2:2193
-12118:2:2194
-12119:2:2195
-12120:2:2206
-12121:2:2211
-12122:2:2212
-12123:0:4365
-12124:2:2224
-12125:0:4365
-12126:3:3558
-12127:0:4365
-12128:2:2226
-12129:0:4365
-12130:3:3559
-12131:0:4365
-12132:2:2230
-12133:0:4365
-12134:3:3558
-12135:0:4365
-12136:2:2235
-12137:2:2239
-12138:2:2240
-12139:2:2248
-12140:2:2249
-12141:2:2253
-12142:2:2254
-12143:2:2248
-12144:2:2249
-12145:2:2250
-12146:2:2262
-12147:2:2267
-12148:2:2271
-12149:2:2272
-12150:2:2279
-12151:2:2280
-12152:2:2291
-12153:2:2292
-12154:2:2293
-12155:2:2291
-12156:2:2292
-12157:2:2293
-12158:2:2304
-12159:2:2309
-12160:2:2310
-12161:0:4365
-12162:3:3559
-12163:0:4365
-12164:2:2322
-12165:0:4365
-12166:2:1169
-12167:0:4365
-12168:3:3558
-12169:0:4365
-12170:2:1170
-12171:0:4365
-12172:3:3559
-12173:0:4365
-12174:3:3560
-12175:0:4365
-12176:3:3566
-12177:0:4365
-12178:3:3569
-12179:3:3570
-12180:3:3582
-12181:3:3583
-12182:3:3587
-12183:3:3588
-12184:3:3582
-12185:3:3583
-12186:3:3587
-12187:3:3588
-12188:3:3596
-12189:3:3601
-12190:3:3605
-12191:3:3606
-12192:3:3613
-12193:3:3614
-12194:3:3625
-12195:3:3626
-12196:3:3627
-12197:3:3625
-12198:3:3626
-12199:3:3627
-12200:3:3638
-12201:3:3643
-12202:3:3644
-12203:0:4365
-12204:3:3656
-12205:0:4365
-12206:3:3657
-12207:0:4365
-12208:2:1173
-12209:0:4365
-12210:3:3658
-12211:0:4365
-12212:2:1179
-12213:0:4365
-12214:2:1180
-12215:0:4365
-12216:3:3657
-12217:0:4365
-12218:2:1181
-12219:2:1185
-12220:2:1186
-12221:2:1194
-12222:2:1195
-12223:2:1199
-12224:2:1200
-12225:2:1194
-12226:2:1195
-12227:2:1199
-12228:2:1200
-12229:2:1208
-12230:2:1213
-12231:2:1217
-12232:2:1218
-12233:2:1225
-12234:2:1226
-12235:2:1237
-12236:2:1238
-12237:2:1239
-12238:2:1237
-12239:2:1238
-12240:2:1239
-12241:2:1250
-12242:2:1255
-12243:2:1256
-12244:0:4365
-12245:3:3658
-12246:0:4365
-12247:2:1268
-12248:0:4365
-12249:3:3657
-12250:0:4365
-12251:2:1270
-12252:0:4365
-12253:3:3658
-12254:0:4365
-12255:2:1271
-12256:2:1275
-12257:2:1276
-12258:2:1284
-12259:2:1285
-12260:2:1289
-12261:2:1290
-12262:2:1284
-12263:2:1285
-12264:2:1289
-12265:2:1290
-12266:2:1298
-12267:2:1303
-12268:2:1307
-12269:2:1308
-12270:2:1315
-12271:2:1316
-12272:2:1327
-12273:2:1328
-12274:2:1329
-12275:2:1327
-12276:2:1328
-12277:2:1329
-12278:2:1340
-12279:2:1345
-12280:2:1346
-12281:0:4365
-12282:2:1358
-12283:0:4365
-12284:2:1360
-12285:0:4365
-12286:3:3657
-12287:0:4365
-12288:2:1361
-12289:0:4365
-12290:3:3658
-12291:0:4365
-12292:2:1362
-12293:2:1366
-12294:2:1367
-12295:2:1375
-12296:2:1376
-12297:2:1380
-12298:2:1381
-12299:2:1375
-12300:2:1376
-12301:2:1380
-12302:2:1381
-12303:2:1389
-12304:2:1394
-12305:2:1398
-12306:2:1399
-12307:2:1406
-12308:2:1407
-12309:2:1418
-12310:2:1419
-12311:2:1420
-12312:2:1418
-12313:2:1419
-12314:2:1420
-12315:2:1431
-12316:2:1436
-12317:2:1437
-12318:0:4365
-12319:2:1449
-12320:0:4365
-12321:3:3657
-12322:0:4365
-12323:2:1451
-12324:0:4365
-12325:3:3658
-12326:0:4365
-12327:2:1652
-12328:0:4365
-12329:2:1653
-12330:0:4365
-12331:2:1657
-12332:0:4365
-12333:2:1180
-12334:0:4365
-12335:3:3657
-12336:0:4365
-12337:2:1181
-12338:2:1185
-12339:2:1186
-12340:2:1194
-12341:2:1195
-12342:2:1199
-12343:2:1200
-12344:2:1194
-12345:2:1195
-12346:2:1196
-12347:2:1208
-12348:2:1213
-12349:2:1217
-12350:2:1218
-12351:2:1225
-12352:2:1226
-12353:2:1237
-12354:2:1238
-12355:2:1239
-12356:2:1237
-12357:2:1238
-12358:2:1239
-12359:2:1250
-12360:2:1255
-12361:2:1256
-12362:0:4365
-12363:3:3658
-12364:0:4365
-12365:2:1268
-12366:0:4365
-12367:3:3657
-12368:0:4365
-12369:2:1270
-12370:0:4365
-12371:3:3658
-12372:0:4365
-12373:2:1271
-12374:2:1275
-12375:2:1276
-12376:2:1284
-12377:2:1285
-12378:2:1289
-12379:2:1290
-12380:2:1284
-12381:2:1285
-12382:2:1289
-12383:2:1290
-12384:2:1298
-12385:2:1303
-12386:2:1307
-12387:2:1308
-12388:2:1315
-12389:2:1316
-12390:2:1327
-12391:2:1328
-12392:2:1329
-12393:2:1327
-12394:2:1328
-12395:2:1329
-12396:2:1340
-12397:2:1345
-12398:2:1346
-12399:0:4365
-12400:2:1358
-12401:0:4365
-12402:2:1454
-12403:0:4365
-12404:3:3657
-12405:0:4365
-12406:2:1455
-12407:0:4365
-12408:3:3658
-12409:0:4365
-12410:2:1652
-12411:0:4365
-12412:2:1653
-12413:0:4365
-12414:2:1657
-12415:0:4365
-12416:2:1660
-12417:0:4365
-12418:3:3657
-12419:0:4365
-12420:2:1665
-12421:2:1669
-12422:2:1670
-12423:2:1678
-12424:2:1679
-12425:2:1683
-12426:2:1684
-12427:2:1678
-12428:2:1679
-12429:2:1680
-12430:2:1692
-12431:2:1697
-12432:2:1701
-12433:2:1702
-12434:2:1709
-12435:2:1710
-12436:2:1721
-12437:2:1722
-12438:2:1723
-12439:2:1721
-12440:2:1722
-12441:2:1723
-12442:2:1734
-12443:2:1739
-12444:2:1740
-12445:0:4365
-12446:3:3658
-12447:0:4365
-12448:2:1752
-12449:0:4365
-12450:3:3657
-12451:0:4365
-12452:2:1754
-12453:0:4365
-12454:3:3658
-12455:0:4365
-12456:2:1755
-12457:2:1759
-12458:2:1760
-12459:2:1768
-12460:2:1769
-12461:2:1773
-12462:2:1774
-12463:2:1768
-12464:2:1769
-12465:2:1773
-12466:2:1774
-12467:2:1782
-12468:2:1787
-12469:2:1791
-12470:2:1792
-12471:2:1799
-12472:2:1800
-12473:2:1811
-12474:2:1812
-12475:2:1813
-12476:2:1811
-12477:2:1812
-12478:2:1813
-12479:2:1824
-12480:2:1829
-12481:2:1830
-12482:0:4365
-12483:2:1842
-12484:0:4365
-12485:3:3657
-12486:0:4365
-12487:2:1844
-12488:0:4365
-12489:3:3658
-12490:0:4365
-12491:2:1845
-12492:2:1849
-12493:2:1850
-12494:2:1858
-12495:2:1859
-12496:2:1863
-12497:2:1864
-12498:2:1858
-12499:2:1859
-12500:2:1863
-12501:2:1864
-12502:2:1872
-12503:2:1877
-12504:2:1881
-12505:2:1882
-12506:2:1889
-12507:2:1890
-12508:2:1901
-12509:2:1902
-12510:2:1903
-12511:2:1901
-12512:2:1902
-12513:2:1903
-12514:2:1914
-12515:2:1919
-12516:2:1920
-12517:0:4365
-12518:2:1932
-12519:0:4365
-12520:3:3657
-12521:0:4365
-12522:2:1934
-12523:0:4365
-12524:3:3658
-12525:0:4365
-12526:2:1935
-12527:0:4365
-12528:2:1936
-12529:0:4365
-12530:2:2129
-12531:0:4365
-12532:2:2130
-12533:0:4365
-12534:2:2134
-12535:0:4365
-12536:3:3657
-12537:0:4365
-12538:2:2136
-12539:0:4365
-12540:3:3658
-12541:0:4365
-12542:2:2137
-12543:2:2141
-12544:2:2142
-12545:2:2150
-12546:2:2151
-12547:2:2155
-12548:2:2156
-12549:2:2150
-12550:2:2151
-12551:2:2155
-12552:2:2156
-12553:2:2164
-12554:2:2169
-12555:2:2173
-12556:2:2174
-12557:2:2181
-12558:2:2182
-12559:2:2193
-12560:2:2194
-12561:2:2195
-12562:2:2193
-12563:2:2194
-12564:2:2195
-12565:2:2206
-12566:2:2211
-12567:2:2212
-12568:0:4365
-12569:2:2224
-12570:0:4365
-12571:3:3657
-12572:0:4365
-12573:2:2226
-12574:0:4365
-12575:3:3658
-12576:0:4365
-12577:2:1936
-12578:0:4365
-12579:2:2129
-12580:0:4365
-12581:2:2130
-12582:0:4365
-12583:2:2134
-12584:0:4365
-12585:3:3657
-12586:0:4365
-12587:2:2136
-12588:0:4365
-12589:3:3658
-12590:0:4365
-12591:2:2137
-12592:2:2141
-12593:2:2142
-12594:2:2150
-12595:2:2151
-12596:2:2155
-12597:2:2156
-12598:2:2150
-12599:2:2151
-12600:2:2152
-12601:2:2164
-12602:2:2169
-12603:2:2173
-12604:2:2174
-12605:2:2181
-12606:2:2182
-12607:2:2193
-12608:2:2194
-12609:2:2195
-12610:2:2193
-12611:2:2194
-12612:2:2195
-12613:2:2206
-12614:2:2211
-12615:2:2212
-12616:0:4365
-12617:2:2224
-12618:0:4365
-12619:3:3657
-12620:0:4365
-12621:2:2226
-12622:0:4365
-12623:3:3658
-12624:0:4365
-12625:2:2230
-12626:0:4365
-12627:3:3657
-12628:0:4365
-12629:2:2235
-12630:2:2239
-12631:2:2240
-12632:2:2248
-12633:2:2249
-12634:2:2253
-12635:2:2254
-12636:2:2248
-12637:2:2249
-12638:2:2250
-12639:2:2262
-12640:2:2267
-12641:2:2271
-12642:2:2272
-12643:2:2279
-12644:2:2280
-12645:2:2291
-12646:2:2292
-12647:2:2293
-12648:2:2291
-12649:2:2292
-12650:2:2293
-12651:2:2304
-12652:2:2309
-12653:2:2310
-12654:0:4365
-12655:3:3658
-12656:0:4365
-12657:2:2322
-12658:0:4365
-12659:2:1169
-12660:0:4365
-12661:3:3657
-12662:0:4365
-12663:2:1170
-12664:0:4365
-12665:3:3658
-12666:0:4365
-12667:3:3659
-12668:0:4365
-12669:3:3665
-12670:0:4365
-12671:3:3666
-12672:0:4365
-12673:3:3667
-12674:0:4365
-12675:3:3668
-12676:0:4365
-12677:3:3669
-12678:3:3673
-12679:3:3674
-12680:3:3682
-12681:3:3683
-12682:3:3687
-12683:3:3688
-12684:3:3682
-12685:3:3683
-12686:3:3687
-12687:3:3688
-12688:3:3696
-12689:3:3701
-12690:3:3705
-12691:3:3706
-12692:3:3713
-12693:3:3714
-12694:3:3725
-12695:3:3726
-12696:3:3727
-12697:3:3725
-12698:3:3726
-12699:3:3727
-12700:3:3738
-12701:3:3743
-12702:3:3744
-12703:0:4365
-12704:3:3756
-12705:0:4365
-12706:3:3757
-12707:0:4365
-12708:2:1173
-12709:0:4365
-12710:3:3758
-12711:0:4365
-12712:2:1179
-12713:0:4365
-12714:2:1180
-12715:0:4365
-12716:3:3757
-12717:0:4365
-12718:2:1181
-12719:2:1185
-12720:2:1186
-12721:2:1194
-12722:2:1195
-12723:2:1199
-12724:2:1200
-12725:2:1194
-12726:2:1195
-12727:2:1199
-12728:2:1200
-12729:2:1208
-12730:2:1213
-12731:2:1217
-12732:2:1218
-12733:2:1225
-12734:2:1226
-12735:2:1237
-12736:2:1238
-12737:2:1239
-12738:2:1237
-12739:2:1238
-12740:2:1239
-12741:2:1250
-12742:2:1255
-12743:2:1256
-12744:0:4365
-12745:3:3758
-12746:0:4365
-12747:2:1268
-12748:0:4365
-12749:3:3757
-12750:0:4365
-12751:2:1270
-12752:0:4365
-12753:3:3758
-12754:0:4365
-12755:2:1271
-12756:2:1275
-12757:2:1276
-12758:2:1284
-12759:2:1285
-12760:2:1289
-12761:2:1290
-12762:2:1284
-12763:2:1285
-12764:2:1289
-12765:2:1290
-12766:2:1298
-12767:2:1303
-12768:2:1307
-12769:2:1308
-12770:2:1315
-12771:2:1316
-12772:2:1327
-12773:2:1328
-12774:2:1329
-12775:2:1327
-12776:2:1328
-12777:2:1329
-12778:2:1340
-12779:2:1345
-12780:2:1346
-12781:0:4365
-12782:2:1358
-12783:0:4365
-12784:2:1360
-12785:0:4365
-12786:3:3757
-12787:0:4365
-12788:2:1361
-12789:0:4365
-12790:3:3758
-12791:0:4365
-12792:2:1362
-12793:2:1366
-12794:2:1367
-12795:2:1375
-12796:2:1376
-12797:2:1380
-12798:2:1381
-12799:2:1375
-12800:2:1376
-12801:2:1380
-12802:2:1381
-12803:2:1389
-12804:2:1394
-12805:2:1398
-12806:2:1399
-12807:2:1406
-12808:2:1407
-12809:2:1418
-12810:2:1419
-12811:2:1420
-12812:2:1418
-12813:2:1419
-12814:2:1420
-12815:2:1431
-12816:2:1436
-12817:2:1437
-12818:0:4365
-12819:2:1449
-12820:0:4365
-12821:3:3757
-12822:0:4365
-12823:2:1451
-12824:0:4365
-12825:3:3758
-12826:0:4365
-12827:2:1652
-12828:0:4365
-12829:2:1653
-12830:0:4365
-12831:2:1657
-12832:0:4365
-12833:2:1180
-12834:0:4365
-12835:3:3757
-12836:0:4365
-12837:2:1181
-12838:2:1185
-12839:2:1186
-12840:2:1194
-12841:2:1195
-12842:2:1199
-12843:2:1200
-12844:2:1194
-12845:2:1195
-12846:2:1196
-12847:2:1208
-12848:2:1213
-12849:2:1217
-12850:2:1218
-12851:2:1225
-12852:2:1226
-12853:2:1237
-12854:2:1238
-12855:2:1239
-12856:2:1237
-12857:2:1238
-12858:2:1239
-12859:2:1250
-12860:2:1255
-12861:2:1256
-12862:0:4365
-12863:3:3758
-12864:0:4365
-12865:2:1268
-12866:0:4365
-12867:3:3757
-12868:0:4365
-12869:2:1270
-12870:0:4365
-12871:3:3758
-12872:0:4365
-12873:2:1271
-12874:2:1275
-12875:2:1276
-12876:2:1284
-12877:2:1285
-12878:2:1289
-12879:2:1290
-12880:2:1284
-12881:2:1285
-12882:2:1289
-12883:2:1290
-12884:2:1298
-12885:2:1303
-12886:2:1307
-12887:2:1308
-12888:2:1315
-12889:2:1316
-12890:2:1327
-12891:2:1328
-12892:2:1329
-12893:2:1327
-12894:2:1328
-12895:2:1329
-12896:2:1340
-12897:2:1345
-12898:2:1346
-12899:0:4365
-12900:2:1358
-12901:0:4365
-12902:2:1454
-12903:0:4365
-12904:3:3757
-12905:0:4365
-12906:2:1455
-12907:0:4365
-12908:3:3758
-12909:0:4365
-12910:2:1652
-12911:0:4365
-12912:2:1653
-12913:0:4365
-12914:2:1657
-12915:0:4365
-12916:2:1660
-12917:0:4365
-12918:3:3757
-12919:0:4365
-12920:2:1665
-12921:2:1669
-12922:2:1670
-12923:2:1678
-12924:2:1679
-12925:2:1683
-12926:2:1684
-12927:2:1678
-12928:2:1679
-12929:2:1680
-12930:2:1692
-12931:2:1697
-12932:2:1701
-12933:2:1702
-12934:2:1709
-12935:2:1710
-12936:2:1721
-12937:2:1722
-12938:2:1723
-12939:2:1721
-12940:2:1722
-12941:2:1723
-12942:2:1734
-12943:2:1739
-12944:2:1740
-12945:0:4365
-12946:3:3758
-12947:0:4365
-12948:2:1752
-12949:0:4365
-12950:3:3757
-12951:0:4365
-12952:2:1754
-12953:0:4365
-12954:3:3758
-12955:0:4365
-12956:2:1755
-12957:2:1759
-12958:2:1760
-12959:2:1768
-12960:2:1769
-12961:2:1773
-12962:2:1774
-12963:2:1768
-12964:2:1769
-12965:2:1773
-12966:2:1774
-12967:2:1782
-12968:2:1787
-12969:2:1791
-12970:2:1792
-12971:2:1799
-12972:2:1800
-12973:2:1811
-12974:2:1812
-12975:2:1813
-12976:2:1811
-12977:2:1812
-12978:2:1813
-12979:2:1824
-12980:2:1829
-12981:2:1830
-12982:0:4365
-12983:2:1842
-12984:0:4365
-12985:3:3757
-12986:0:4365
-12987:2:1844
-12988:0:4365
-12989:3:3758
-12990:0:4365
-12991:2:1845
-12992:2:1849
-12993:2:1850
-12994:2:1858
-12995:2:1859
-12996:2:1863
-12997:2:1864
-12998:2:1858
-12999:2:1859
-13000:2:1863
-13001:2:1864
-13002:2:1872
-13003:2:1877
-13004:2:1881
-13005:2:1882
-13006:2:1889
-13007:2:1890
-13008:2:1901
-13009:2:1902
-13010:2:1903
-13011:2:1901
-13012:2:1902
-13013:2:1903
-13014:2:1914
-13015:2:1919
-13016:2:1920
-13017:0:4365
-13018:2:1932
-13019:0:4365
-13020:3:3757
-13021:0:4365
-13022:2:1934
-13023:0:4365
-13024:3:3758
-13025:0:4365
-13026:2:1935
-13027:0:4365
-13028:2:1936
-13029:0:4365
-13030:2:2129
-13031:0:4365
-13032:2:2130
-13033:0:4365
-13034:2:2134
-13035:0:4365
-13036:3:3757
-13037:0:4365
-13038:2:2136
-13039:0:4365
-13040:3:3758
-13041:0:4365
-13042:2:2137
-13043:2:2141
-13044:2:2142
-13045:2:2150
-13046:2:2151
-13047:2:2155
-13048:2:2156
-13049:2:2150
-13050:2:2151
-13051:2:2155
-13052:2:2156
-13053:2:2164
-13054:2:2169
-13055:2:2173
-13056:2:2174
-13057:2:2181
-13058:2:2182
-13059:2:2193
-13060:2:2194
-13061:2:2195
-13062:2:2193
-13063:2:2194
-13064:2:2195
-13065:2:2206
-13066:2:2211
-13067:2:2212
-13068:0:4365
-13069:2:2224
-13070:0:4365
-13071:3:3757
-13072:0:4365
-13073:2:2226
-13074:0:4365
-13075:3:3758
-13076:0:4365
-13077:2:1936
-13078:0:4365
-13079:2:2129
-13080:0:4365
-13081:2:2130
-13082:0:4365
-13083:2:2134
-13084:0:4365
-13085:3:3757
-13086:0:4365
-13087:2:2136
-13088:0:4365
-13089:3:3758
-13090:0:4365
-13091:2:2137
-13092:2:2141
-13093:2:2142
-13094:2:2150
-13095:2:2151
-13096:2:2155
-13097:2:2156
-13098:2:2150
-13099:2:2151
-13100:2:2152
-13101:2:2164
-13102:2:2169
-13103:2:2173
-13104:2:2174
-13105:2:2181
-13106:2:2182
-13107:2:2193
-13108:2:2194
-13109:2:2195
-13110:2:2193
-13111:2:2194
-13112:2:2195
-13113:2:2206
-13114:2:2211
-13115:2:2212
-13116:0:4365
-13117:2:2224
-13118:0:4365
-13119:3:3757
-13120:0:4365
-13121:2:2226
-13122:0:4365
-13123:3:3758
-13124:0:4365
-13125:2:2230
-13126:0:4365
-13127:3:3757
-13128:0:4365
-13129:2:2235
-13130:2:2239
-13131:2:2240
-13132:2:2248
-13133:2:2249
-13134:2:2253
-13135:2:2254
-13136:2:2248
-13137:2:2249
-13138:2:2250
-13139:2:2262
-13140:2:2267
-13141:2:2271
-13142:2:2272
-13143:2:2279
-13144:2:2280
-13145:2:2291
-13146:2:2292
-13147:2:2293
-13148:2:2291
-13149:2:2292
-13150:2:2293
-13151:2:2304
-13152:2:2309
-13153:2:2310
-13154:0:4365
-13155:3:3758
-13156:0:4365
-13157:2:2322
-13158:0:4365
-13159:2:1169
-13160:0:4365
-13161:3:3757
-13162:0:4365
-13163:2:1170
-13164:0:4365
-13165:3:3758
-13166:0:4365
-13167:3:3759
-13168:0:4365
-13169:3:3972
-13170:0:4365
-13171:3:3980
-13172:0:4365
-13173:3:3981
-13174:3:3985
-13175:3:3986
-13176:3:3994
-13177:3:3995
-13178:3:3999
-13179:3:4000
-13180:3:3994
-13181:3:3995
-13182:3:3999
-13183:3:4000
-13184:3:4008
-13185:3:4013
-13186:3:4017
-13187:3:4018
-13188:3:4025
-13189:3:4026
-13190:3:4037
-13191:3:4038
-13192:3:4039
-13193:3:4037
-13194:3:4038
-13195:3:4039
-13196:3:4050
-13197:3:4055
-13198:3:4056
-13199:0:4365
-13200:3:4068
-13201:0:4365
-13202:3:4069
-13203:0:4365
-13204:2:1173
-13205:0:4365
-13206:3:4070
-13207:0:4365
-13208:2:1179
-13209:0:4365
-13210:2:1180
-13211:0:4365
-13212:3:4069
-13213:0:4365
-13214:2:1181
-13215:2:1185
-13216:2:1186
-13217:2:1194
-13218:2:1195
-13219:2:1199
-13220:2:1200
-13221:2:1194
-13222:2:1195
-13223:2:1199
-13224:2:1200
-13225:2:1208
-13226:2:1213
-13227:2:1217
-13228:2:1218
-13229:2:1225
-13230:2:1226
-13231:2:1237
-13232:2:1238
-13233:2:1239
-13234:2:1237
-13235:2:1238
-13236:2:1239
-13237:2:1250
-13238:2:1255
-13239:2:1256
-13240:0:4365
-13241:3:4070
-13242:0:4365
-13243:2:1268
-13244:0:4365
-13245:3:4069
-13246:0:4365
-13247:2:1270
-13248:0:4365
-13249:3:4070
-13250:0:4365
-13251:2:1271
-13252:2:1275
-13253:2:1276
-13254:2:1284
-13255:2:1285
-13256:2:1289
-13257:2:1290
-13258:2:1284
-13259:2:1285
-13260:2:1289
-13261:2:1290
-13262:2:1298
-13263:2:1303
-13264:2:1307
-13265:2:1308
-13266:2:1315
-13267:2:1316
-13268:2:1327
-13269:2:1328
-13270:2:1329
-13271:2:1327
-13272:2:1328
-13273:2:1329
-13274:2:1340
-13275:2:1345
-13276:2:1346
-13277:0:4365
-13278:2:1358
-13279:0:4365
-13280:2:1360
-13281:0:4365
-13282:3:4069
-13283:0:4365
-13284:2:1361
-13285:0:4365
-13286:3:4070
-13287:0:4365
-13288:2:1362
-13289:2:1366
-13290:2:1367
-13291:2:1375
-13292:2:1376
-13293:2:1380
-13294:2:1381
-13295:2:1375
-13296:2:1376
-13297:2:1380
-13298:2:1381
-13299:2:1389
-13300:2:1394
-13301:2:1398
-13302:2:1399
-13303:2:1406
-13304:2:1407
-13305:2:1418
-13306:2:1419
-13307:2:1420
-13308:2:1418
-13309:2:1419
-13310:2:1420
-13311:2:1431
-13312:2:1436
-13313:2:1437
-13314:0:4365
-13315:2:1449
-13316:0:4365
-13317:3:4069
-13318:0:4365
-13319:2:1451
-13320:0:4365
-13321:3:4070
-13322:0:4365
-13323:2:1652
-13324:0:4365
-13325:2:1653
-13326:0:4365
-13327:2:1657
-13328:0:4365
-13329:2:1180
-13330:0:4365
-13331:3:4069
-13332:0:4365
-13333:2:1181
-13334:2:1185
-13335:2:1186
-13336:2:1194
-13337:2:1195
-13338:2:1199
-13339:2:1200
-13340:2:1194
-13341:2:1195
-13342:2:1196
-13343:2:1208
-13344:2:1213
-13345:2:1217
-13346:2:1218
-13347:2:1225
-13348:2:1226
-13349:2:1237
-13350:2:1238
-13351:2:1239
-13352:2:1237
-13353:2:1238
-13354:2:1239
-13355:2:1250
-13356:2:1255
-13357:2:1256
-13358:0:4365
-13359:3:4070
-13360:0:4365
-13361:2:1268
-13362:0:4365
-13363:3:4069
-13364:0:4365
-13365:2:1270
-13366:0:4365
-13367:3:4070
-13368:0:4365
-13369:2:1271
-13370:2:1275
-13371:2:1276
-13372:2:1284
-13373:2:1285
-13374:2:1289
-13375:2:1290
-13376:2:1284
-13377:2:1285
-13378:2:1289
-13379:2:1290
-13380:2:1298
-13381:2:1303
-13382:2:1307
-13383:2:1308
-13384:2:1315
-13385:2:1316
-13386:2:1327
-13387:2:1328
-13388:2:1329
-13389:2:1327
-13390:2:1328
-13391:2:1329
-13392:2:1340
-13393:2:1345
-13394:2:1346
-13395:0:4365
-13396:2:1358
-13397:0:4365
-13398:2:1454
-13399:0:4365
-13400:3:4069
-13401:0:4365
-13402:2:1455
-13403:0:4365
-13404:3:4070
-13405:0:4365
-13406:2:1652
-13407:0:4365
-13408:2:1653
-13409:0:4365
-13410:2:1657
-13411:0:4365
-13412:2:1660
-13413:0:4365
-13414:3:4069
-13415:0:4365
-13416:2:1665
-13417:2:1669
-13418:2:1670
-13419:2:1678
-13420:2:1679
-13421:2:1683
-13422:2:1684
-13423:2:1678
-13424:2:1679
-13425:2:1680
-13426:2:1692
-13427:2:1697
-13428:2:1701
-13429:2:1702
-13430:2:1709
-13431:2:1710
-13432:2:1721
-13433:2:1722
-13434:2:1723
-13435:2:1721
-13436:2:1722
-13437:2:1723
-13438:2:1734
-13439:2:1739
-13440:2:1740
-13441:0:4365
-13442:3:4070
-13443:0:4365
-13444:2:1752
-13445:0:4365
-13446:3:4069
-13447:0:4365
-13448:2:1754
-13449:0:4365
-13450:3:4070
-13451:0:4365
-13452:2:1755
-13453:2:1759
-13454:2:1760
-13455:2:1768
-13456:2:1769
-13457:2:1773
-13458:2:1774
-13459:2:1768
-13460:2:1769
-13461:2:1773
-13462:2:1774
-13463:2:1782
-13464:2:1787
-13465:2:1791
-13466:2:1792
-13467:2:1799
-13468:2:1800
-13469:2:1811
-13470:2:1812
-13471:2:1813
-13472:2:1811
-13473:2:1812
-13474:2:1813
-13475:2:1824
-13476:2:1829
-13477:2:1830
-13478:0:4365
-13479:2:1842
-13480:0:4365
-13481:3:4069
-13482:0:4365
-13483:2:1844
-13484:0:4365
-13485:3:4070
-13486:0:4365
-13487:2:1845
-13488:2:1849
-13489:2:1850
-13490:2:1858
-13491:2:1859
-13492:2:1863
-13493:2:1864
-13494:2:1858
-13495:2:1859
-13496:2:1863
-13497:2:1864
-13498:2:1872
-13499:2:1877
-13500:2:1881
-13501:2:1882
-13502:2:1889
-13503:2:1890
-13504:2:1901
-13505:2:1902
-13506:2:1903
-13507:2:1901
-13508:2:1902
-13509:2:1903
-13510:2:1914
-13511:2:1919
-13512:2:1920
-13513:0:4365
-13514:2:1932
-13515:0:4365
-13516:3:4069
-13517:0:4365
-13518:2:1934
-13519:0:4365
-13520:3:4070
-13521:0:4365
-13522:2:1935
-13523:0:4365
-13524:2:1936
-13525:0:4365
-13526:2:2129
-13527:0:4365
-13528:2:2130
-13529:0:4365
-13530:2:2134
-13531:0:4365
-13532:3:4069
-13533:0:4365
-13534:2:2136
-13535:0:4365
-13536:3:4070
-13537:0:4365
-13538:2:2137
-13539:2:2141
-13540:2:2142
-13541:2:2150
-13542:2:2151
-13543:2:2155
-13544:2:2156
-13545:2:2150
-13546:2:2151
-13547:2:2155
-13548:2:2156
-13549:2:2164
-13550:2:2169
-13551:2:2173
-13552:2:2174
-13553:2:2181
-13554:2:2182
-13555:2:2193
-13556:2:2194
-13557:2:2195
-13558:2:2193
-13559:2:2194
-13560:2:2195
-13561:2:2206
-13562:2:2211
-13563:2:2212
-13564:0:4365
-13565:2:2224
-13566:0:4365
-13567:3:4069
-13568:0:4365
-13569:2:2226
-13570:0:4365
-13571:3:4070
-13572:0:4365
-13573:2:1936
-13574:0:4365
-13575:2:2129
-13576:0:4365
-13577:2:2130
-13578:0:4365
-13579:2:2134
-13580:0:4365
-13581:3:4069
-13582:0:4365
-13583:2:2136
-13584:0:4365
-13585:3:4070
-13586:0:4365
-13587:2:2137
-13588:2:2141
-13589:2:2142
-13590:2:2150
-13591:2:2151
-13592:2:2155
-13593:2:2156
-13594:2:2150
-13595:2:2151
-13596:2:2152
-13597:2:2164
-13598:2:2169
-13599:2:2173
-13600:2:2174
-13601:2:2181
-13602:2:2182
-13603:2:2193
-13604:2:2194
-13605:2:2195
-13606:2:2193
-13607:2:2194
-13608:2:2195
-13609:2:2206
-13610:2:2211
-13611:2:2212
-13612:0:4365
-13613:2:2224
-13614:0:4365
-13615:3:4069
-13616:0:4365
-13617:2:2226
-13618:0:4365
-13619:3:4070
-13620:0:4365
-13621:2:2230
-13622:0:4365
-13623:3:4069
-13624:0:4365
-13625:2:2235
-13626:2:2239
-13627:2:2240
-13628:2:2248
-13629:2:2249
-13630:2:2253
-13631:2:2254
-13632:2:2248
-13633:2:2249
-13634:2:2250
-13635:2:2262
-13636:2:2267
-13637:2:2271
-13638:2:2272
-13639:2:2279
-13640:2:2280
-13641:2:2291
-13642:2:2292
-13643:2:2293
-13644:2:2291
-13645:2:2292
-13646:2:2293
-13647:2:2304
-13648:2:2309
-13649:2:2310
-13650:0:4365
-13651:3:4070
-13652:0:4365
-13653:2:2322
-13654:0:4365
-13655:2:1169
-13656:0:4365
-13657:3:4069
-13658:0:4365
-13659:2:1170
-13660:0:4365
-13661:3:4070
-13662:0:4365
-13663:3:4071
-13664:0:4365
-13665:3:4081
-13666:0:4365
-13667:3:3666
-13668:0:4365
-13669:3:3667
-13670:0:4365
-13671:3:3668
-13672:0:4365
-13673:3:3669
-13674:3:3673
-13675:3:3674
-13676:3:3682
-13677:3:3683
-13678:3:3687
-13679:3:3688
-13680:3:3682
-13681:3:3683
-13682:3:3687
-13683:3:3688
-13684:3:3696
-13685:3:3701
-13686:3:3705
-13687:3:3706
-13688:3:3713
-13689:3:3714
-13690:3:3725
-13691:3:3726
-13692:3:3727
-13693:3:3725
-13694:3:3726
-13695:3:3727
-13696:3:3738
-13697:3:3743
-13698:3:3744
-13699:0:4365
-13700:3:3756
-13701:0:4365
-13702:3:3757
-13703:0:4365
-13704:2:1173
-13705:0:4365
-13706:3:3758
-13707:0:4365
-13708:2:1179
-13709:0:4365
-13710:2:1180
-13711:0:4365
-13712:3:3757
-13713:0:4365
-13714:2:1181
-13715:2:1185
-13716:2:1186
-13717:2:1194
-13718:2:1195
-13719:2:1199
-13720:2:1200
-13721:2:1194
-13722:2:1195
-13723:2:1199
-13724:2:1200
-13725:2:1208
-13726:2:1213
-13727:2:1217
-13728:2:1218
-13729:2:1225
-13730:2:1226
-13731:2:1237
-13732:2:1238
-13733:2:1239
-13734:2:1237
-13735:2:1238
-13736:2:1239
-13737:2:1250
-13738:2:1255
-13739:2:1256
-13740:0:4365
-13741:3:3758
-13742:0:4365
-13743:2:1268
-13744:0:4365
-13745:3:3757
-13746:0:4365
-13747:2:1270
-13748:0:4365
-13749:3:3758
-13750:0:4365
-13751:2:1271
-13752:2:1275
-13753:2:1276
-13754:2:1284
-13755:2:1285
-13756:2:1289
-13757:2:1290
-13758:2:1284
-13759:2:1285
-13760:2:1289
-13761:2:1290
-13762:2:1298
-13763:2:1303
-13764:2:1307
-13765:2:1308
-13766:2:1315
-13767:2:1316
-13768:2:1327
-13769:2:1328
-13770:2:1329
-13771:2:1327
-13772:2:1328
-13773:2:1329
-13774:2:1340
-13775:2:1345
-13776:2:1346
-13777:0:4365
-13778:2:1358
-13779:0:4365
-13780:2:1360
-13781:0:4365
-13782:3:3757
-13783:0:4365
-13784:2:1361
-13785:0:4365
-13786:3:3758
-13787:0:4365
-13788:2:1362
-13789:2:1366
-13790:2:1367
-13791:2:1375
-13792:2:1376
-13793:2:1380
-13794:2:1381
-13795:2:1375
-13796:2:1376
-13797:2:1380
-13798:2:1381
-13799:2:1389
-13800:2:1394
-13801:2:1398
-13802:2:1399
-13803:2:1406
-13804:2:1407
-13805:2:1418
-13806:2:1419
-13807:2:1420
-13808:2:1418
-13809:2:1419
-13810:2:1420
-13811:2:1431
-13812:2:1436
-13813:2:1437
-13814:0:4365
-13815:2:1449
-13816:0:4365
-13817:3:3757
-13818:0:4365
-13819:2:1451
-13820:0:4365
-13821:3:3758
-13822:0:4365
-13823:2:1652
-13824:0:4365
-13825:2:1653
-13826:0:4365
-13827:2:1657
-13828:0:4365
-13829:2:1180
-13830:0:4365
-13831:3:3757
-13832:0:4365
-13833:2:1181
-13834:2:1185
-13835:2:1186
-13836:2:1194
-13837:2:1195
-13838:2:1199
-13839:2:1200
-13840:2:1194
-13841:2:1195
-13842:2:1196
-13843:2:1208
-13844:2:1213
-13845:2:1217
-13846:2:1218
-13847:2:1225
-13848:2:1226
-13849:2:1237
-13850:2:1238
-13851:2:1239
-13852:2:1237
-13853:2:1238
-13854:2:1239
-13855:2:1250
-13856:2:1255
-13857:2:1256
-13858:0:4365
-13859:3:3758
-13860:0:4365
-13861:2:1268
-13862:0:4365
-13863:3:3757
-13864:0:4365
-13865:2:1270
-13866:0:4365
-13867:3:3758
-13868:0:4365
-13869:2:1271
-13870:2:1275
-13871:2:1276
-13872:2:1284
-13873:2:1285
-13874:2:1289
-13875:2:1290
-13876:2:1284
-13877:2:1285
-13878:2:1289
-13879:2:1290
-13880:2:1298
-13881:2:1303
-13882:2:1307
-13883:2:1308
-13884:2:1315
-13885:2:1316
-13886:2:1327
-13887:2:1328
-13888:2:1329
-13889:2:1327
-13890:2:1328
-13891:2:1329
-13892:2:1340
-13893:2:1345
-13894:2:1346
-13895:0:4365
-13896:2:1358
-13897:0:4365
-13898:2:1454
-13899:0:4365
-13900:3:3757
-13901:0:4365
-13902:2:1455
-13903:0:4365
-13904:3:3758
-13905:0:4365
-13906:2:1652
-13907:0:4365
-13908:2:1653
-13909:0:4365
-13910:2:1657
-13911:0:4365
-13912:2:1660
-13913:0:4365
-13914:3:3757
-13915:0:4365
-13916:2:1665
-13917:2:1669
-13918:2:1670
-13919:2:1678
-13920:2:1679
-13921:2:1683
-13922:2:1684
-13923:2:1678
-13924:2:1679
-13925:2:1680
-13926:2:1692
-13927:2:1697
-13928:2:1701
-13929:2:1702
-13930:2:1709
-13931:2:1710
-13932:2:1721
-13933:2:1722
-13934:2:1723
-13935:2:1721
-13936:2:1722
-13937:2:1723
-13938:2:1734
-13939:2:1739
-13940:2:1740
-13941:0:4365
-13942:3:3758
-13943:0:4365
-13944:2:1752
-13945:0:4365
-13946:3:3757
-13947:0:4365
-13948:2:1754
-13949:0:4365
-13950:3:3758
-13951:0:4365
-13952:2:1755
-13953:2:1759
-13954:2:1760
-13955:2:1768
-13956:2:1769
-13957:2:1773
-13958:2:1774
-13959:2:1768
-13960:2:1769
-13961:2:1773
-13962:2:1774
-13963:2:1782
-13964:2:1787
-13965:2:1791
-13966:2:1792
-13967:2:1799
-13968:2:1800
-13969:2:1811
-13970:2:1812
-13971:2:1813
-13972:2:1811
-13973:2:1812
-13974:2:1813
-13975:2:1824
-13976:2:1829
-13977:2:1830
-13978:0:4365
-13979:2:1842
-13980:0:4365
-13981:3:3757
-13982:0:4365
-13983:2:1844
-13984:0:4365
-13985:3:3758
-13986:0:4365
-13987:2:1845
-13988:2:1849
-13989:2:1850
-13990:2:1858
-13991:2:1859
-13992:2:1863
-13993:2:1864
-13994:2:1858
-13995:2:1859
-13996:2:1863
-13997:2:1864
-13998:2:1872
-13999:2:1877
-14000:2:1881
-14001:2:1882
-14002:2:1889
-14003:2:1890
-14004:2:1901
-14005:2:1902
-14006:2:1903
-14007:2:1901
-14008:2:1902
-14009:2:1903
-14010:2:1914
-14011:2:1919
-14012:2:1920
-14013:0:4365
-14014:2:1932
-14015:0:4365
-14016:3:3757
-14017:0:4365
-14018:2:1934
-14019:0:4365
-14020:3:3758
-14021:0:4365
-14022:2:1935
-14023:0:4365
-14024:2:1936
-14025:0:4365
-14026:2:2129
-14027:0:4365
-14028:2:2130
-14029:0:4365
-14030:2:2134
-14031:0:4365
-14032:3:3757
-14033:0:4365
-14034:2:2136
-14035:0:4365
-14036:3:3758
-14037:0:4365
-14038:2:2137
-14039:2:2141
-14040:2:2142
-14041:2:2150
-14042:2:2151
-14043:2:2155
-14044:2:2156
-14045:2:2150
-14046:2:2151
-14047:2:2155
-14048:2:2156
-14049:2:2164
-14050:2:2169
-14051:2:2173
-14052:2:2174
-14053:2:2181
-14054:2:2182
-14055:2:2193
-14056:2:2194
-14057:2:2195
-14058:2:2193
-14059:2:2194
-14060:2:2195
-14061:2:2206
-14062:2:2211
-14063:2:2212
-14064:0:4365
-14065:2:2224
-14066:0:4365
-14067:3:3757
-14068:0:4365
-14069:2:2226
-14070:0:4365
-14071:3:3758
-14072:0:4365
-14073:2:1936
-14074:0:4365
-14075:2:2129
-14076:0:4365
-14077:2:2130
-14078:0:4365
-14079:2:2134
-14080:0:4365
-14081:3:3757
-14082:0:4365
-14083:2:2136
-14084:0:4365
-14085:3:3758
-14086:0:4365
-14087:2:2137
-14088:2:2141
-14089:2:2142
-14090:2:2150
-14091:2:2151
-14092:2:2155
-14093:2:2156
-14094:2:2150
-14095:2:2151
-14096:2:2152
-14097:2:2164
-14098:2:2169
-14099:2:2173
-14100:2:2174
-14101:2:2181
-14102:2:2182
-14103:2:2193
-14104:2:2194
-14105:2:2195
-14106:2:2193
-14107:2:2194
-14108:2:2195
-14109:2:2206
-14110:2:2211
-14111:2:2212
-14112:0:4365
-14113:2:2224
-14114:0:4365
-14115:3:3757
-14116:0:4365
-14117:2:2226
-14118:0:4365
-14119:3:3758
-14120:0:4365
-14121:2:2230
-14122:0:4365
-14123:3:3757
-14124:0:4365
-14125:2:2235
-14126:2:2239
-14127:2:2240
-14128:2:2248
-14129:2:2249
-14130:2:2253
-14131:2:2254
-14132:2:2248
-14133:2:2249
-14134:2:2250
-14135:2:2262
-14136:2:2267
-14137:2:2271
-14138:2:2272
-14139:2:2279
-14140:2:2280
-14141:2:2291
-14142:2:2292
-14143:2:2293
-14144:2:2291
-14145:2:2292
-14146:2:2293
-14147:2:2304
-14148:2:2309
-14149:2:2310
-14150:0:4365
-14151:3:3758
-14152:0:4365
-14153:2:2322
-14154:0:4365
-14155:2:1169
-14156:0:4365
-14157:3:3757
-14158:0:4365
-14159:2:1170
-14160:0:4365
-14161:3:3758
-14162:0:4365
-14163:3:3759
-14164:0:4365
-14165:3:3972
-14166:0:4365
-14167:3:4077
-14168:0:4365
-14169:3:4078
-14170:0:4365
-14171:3:4082
-14172:0:4365
-14173:3:4088
-14174:0:4365
-14175:3:4092
-14176:3:4093
-14177:3:4097
-14178:3:4101
-14179:3:4102
-14180:3:4097
-14181:3:4101
-14182:3:4102
-14183:3:4106
-14184:3:4114
-14185:3:4115
-14186:3:4120
-14187:3:4127
-14188:3:4128
-14189:3:4127
-14190:3:4128
-14191:3:4135
-14192:3:4140
-14193:0:4365
-14194:3:4151
-14195:0:4365
-14196:3:4155
-14197:3:4156
-14198:3:4160
-14199:3:4164
-14200:3:4165
-14201:3:4160
-14202:3:4164
-14203:3:4165
-14204:3:4169
-14205:3:4177
-14206:3:4178
-14207:3:4183
-14208:3:4190
-14209:3:4191
-14210:3:4190
-14211:3:4191
-14212:3:4198
-14213:3:4203
-14214:0:4365
-14215:3:4151
-14216:0:4365
-14217:3:4155
-14218:3:4156
-14219:3:4160
-14220:3:4164
-14221:3:4165
-14222:3:4160
-14223:3:4164
-14224:3:4165
-14225:3:4169
-14226:3:4177
-14227:3:4178
-14228:3:4183
-14229:3:4190
-14230:3:4191
-14231:3:4190
-14232:3:4191
-14233:3:4198
-14234:3:4203
-14235:0:4365
-14236:3:4214
-14237:0:4365
-14238:3:4222
-14239:3:4223
-14240:3:4227
-14241:3:4231
-14242:3:4232
-14243:3:4227
-14244:3:4231
-14245:3:4232
-14246:3:4236
-14247:3:4244
-14248:3:4245
-14249:3:4250
-14250:3:4257
-14251:3:4258
-14252:3:4257
-14253:3:4258
-14254:3:4265
-14255:3:4270
-14256:0:4365
-14257:3:4285
-14258:0:4365
-14259:3:4286
-14260:0:4365
-14261:2:1173
-14262:0:4365
-14263:3:4287
-14264:0:4365
-14265:2:1179
-14266:0:4365
-14267:2:1180
-14268:0:4365
-14269:3:4286
-14270:0:4365
-14271:2:1181
-14272:2:1185
-14273:2:1186
-14274:2:1194
-14275:2:1195
-14276:2:1199
-14277:2:1200
-14278:2:1194
-14279:2:1195
-14280:2:1199
-14281:2:1200
-14282:2:1208
-14283:2:1213
-14284:2:1217
-14285:2:1218
-14286:2:1225
-14287:2:1226
-14288:2:1237
-14289:2:1238
-14290:2:1239
-14291:2:1237
-14292:2:1238
-14293:2:1239
-14294:2:1250
-14295:2:1255
-14296:2:1256
-14297:0:4365
-14298:3:4287
-14299:0:4365
-14300:2:1268
-14301:0:4365
-14302:3:4286
-14303:0:4365
-14304:2:1270
-14305:0:4365
-14306:3:4287
-14307:0:4365
-14308:2:1271
-14309:2:1275
-14310:2:1276
-14311:2:1284
-14312:2:1285
-14313:2:1289
-14314:2:1290
-14315:2:1284
-14316:2:1285
-14317:2:1289
-14318:2:1290
-14319:2:1298
-14320:2:1303
-14321:2:1307
-14322:2:1308
-14323:2:1315
-14324:2:1316
-14325:2:1327
-14326:2:1328
-14327:2:1329
-14328:2:1327
-14329:2:1328
-14330:2:1329
-14331:2:1340
-14332:2:1345
-14333:2:1346
-14334:0:4365
-14335:2:1358
-14336:0:4365
-14337:2:1360
-14338:0:4365
-14339:3:4286
-14340:0:4365
-14341:2:1361
-14342:0:4365
-14343:3:4287
-14344:0:4365
-14345:2:1362
-14346:2:1366
-14347:2:1367
-14348:2:1375
-14349:2:1376
-14350:2:1380
-14351:2:1381
-14352:2:1375
-14353:2:1376
-14354:2:1380
-14355:2:1381
-14356:2:1389
-14357:2:1394
-14358:2:1398
-14359:2:1399
-14360:2:1406
-14361:2:1407
-14362:2:1418
-14363:2:1419
-14364:2:1420
-14365:2:1418
-14366:2:1419
-14367:2:1420
-14368:2:1431
-14369:2:1436
-14370:2:1437
-14371:0:4365
-14372:2:1449
-14373:0:4365
-14374:3:4286
-14375:0:4365
-14376:2:1451
-14377:0:4365
-14378:3:4287
-14379:0:4365
-14380:2:1652
-14381:0:4365
-14382:2:1653
-14383:0:4365
-14384:2:1657
-14385:0:4365
-14386:2:1180
-14387:0:4365
-14388:3:4286
-14389:0:4365
-14390:2:1181
-14391:2:1185
-14392:2:1186
-14393:2:1194
-14394:2:1195
-14395:2:1199
-14396:2:1200
-14397:2:1194
-14398:2:1195
-14399:2:1196
-14400:2:1208
-14401:2:1213
-14402:2:1217
-14403:2:1218
-14404:2:1225
-14405:2:1226
-14406:2:1237
-14407:2:1238
-14408:2:1239
-14409:2:1237
-14410:2:1238
-14411:2:1239
-14412:2:1250
-14413:2:1255
-14414:2:1256
-14415:0:4365
-14416:3:4287
-14417:0:4365
-14418:2:1268
-14419:0:4365
-14420:3:4286
-14421:0:4365
-14422:2:1270
-14423:0:4365
-14424:3:4287
-14425:0:4365
-14426:2:1271
-14427:2:1275
-14428:2:1276
-14429:2:1284
-14430:2:1285
-14431:2:1289
-14432:2:1290
-14433:2:1284
-14434:2:1285
-14435:2:1289
-14436:2:1290
-14437:2:1298
-14438:2:1303
-14439:2:1307
-14440:2:1308
-14441:2:1315
-14442:2:1316
-14443:2:1327
-14444:2:1328
-14445:2:1329
-14446:2:1327
-14447:2:1328
-14448:2:1329
-14449:2:1340
-14450:2:1345
-14451:2:1346
-14452:0:4365
-14453:2:1358
-14454:0:4365
-14455:2:1454
-14456:0:4365
-14457:3:4286
-14458:0:4365
-14459:2:1455
-14460:0:4365
-14461:3:4287
-14462:0:4365
-14463:2:1652
-14464:0:4365
-14465:2:1653
-14466:0:4365
-14467:2:1657
-14468:0:4365
-14469:2:1660
-14470:0:4365
-14471:3:4286
-14472:0:4365
-14473:2:1665
-14474:2:1669
-14475:2:1670
-14476:2:1678
-14477:2:1679
-14478:2:1683
-14479:2:1684
-14480:2:1678
-14481:2:1679
-14482:2:1680
-14483:2:1692
-14484:2:1697
-14485:2:1701
-14486:2:1702
-14487:2:1709
-14488:2:1710
-14489:2:1721
-14490:2:1722
-14491:2:1723
-14492:2:1721
-14493:2:1722
-14494:2:1723
-14495:2:1734
-14496:2:1739
-14497:2:1740
-14498:0:4365
-14499:3:4287
-14500:0:4365
-14501:2:1752
-14502:0:4365
-14503:3:4286
-14504:0:4365
-14505:2:1754
-14506:0:4365
-14507:3:4287
-14508:0:4365
-14509:2:1755
-14510:2:1759
-14511:2:1760
-14512:2:1768
-14513:2:1769
-14514:2:1773
-14515:2:1774
-14516:2:1768
-14517:2:1769
-14518:2:1773
-14519:2:1774
-14520:2:1782
-14521:2:1787
-14522:2:1791
-14523:2:1792
-14524:2:1799
-14525:2:1800
-14526:2:1811
-14527:2:1812
-14528:2:1813
-14529:2:1811
-14530:2:1812
-14531:2:1813
-14532:2:1824
-14533:2:1829
-14534:2:1830
-14535:0:4365
-14536:2:1842
-14537:0:4365
-14538:3:4286
-14539:0:4365
-14540:2:1844
-14541:0:4365
-14542:3:4287
-14543:0:4365
-14544:2:1845
-14545:2:1849
-14546:2:1850
-14547:2:1858
-14548:2:1859
-14549:2:1863
-14550:2:1864
-14551:2:1858
-14552:2:1859
-14553:2:1863
-14554:2:1864
-14555:2:1872
-14556:2:1877
-14557:2:1881
-14558:2:1882
-14559:2:1889
-14560:2:1890
-14561:2:1901
-14562:2:1902
-14563:2:1903
-14564:2:1901
-14565:2:1902
-14566:2:1903
-14567:2:1914
-14568:2:1919
-14569:2:1920
-14570:0:4365
-14571:2:1932
-14572:0:4365
-14573:3:4286
-14574:0:4365
-14575:2:1934
-14576:0:4365
-14577:3:4287
-14578:0:4365
-14579:2:1935
-14580:0:4365
-14581:2:1936
-14582:0:4365
-14583:2:2129
-14584:0:4365
-14585:2:2130
-14586:0:4365
-14587:2:2134
-14588:0:4365
-14589:3:4286
-14590:0:4365
-14591:2:2136
-14592:0:4365
-14593:3:4287
-14594:0:4365
-14595:2:2137
-14596:2:2141
-14597:2:2142
-14598:2:2150
-14599:2:2151
-14600:2:2155
-14601:2:2156
-14602:2:2150
-14603:2:2151
-14604:2:2155
-14605:2:2156
-14606:2:2164
-14607:2:2169
-14608:2:2173
-14609:2:2174
-14610:2:2181
-14611:2:2182
-14612:2:2193
-14613:2:2194
-14614:2:2195
-14615:2:2193
-14616:2:2194
-14617:2:2195
-14618:2:2206
-14619:2:2211
-14620:2:2212
-14621:0:4365
-14622:2:2224
-14623:0:4365
-14624:3:4286
-14625:0:4365
-14626:2:2226
-14627:0:4365
-14628:3:4287
-14629:0:4365
-14630:2:1936
-14631:0:4365
-14632:2:2129
-14633:0:4365
-14634:2:2130
-14635:0:4365
-14636:2:2134
-14637:0:4365
-14638:3:4286
-14639:0:4365
-14640:2:2136
-14641:0:4365
-14642:3:4287
-14643:0:4365
-14644:2:2137
-14645:2:2141
-14646:2:2142
-14647:2:2150
-14648:2:2151
-14649:2:2155
-14650:2:2156
-14651:2:2150
-14652:2:2151
-14653:2:2152
-14654:2:2164
-14655:2:2169
-14656:2:2173
-14657:2:2174
-14658:2:2181
-14659:2:2182
-14660:2:2193
-14661:2:2194
-14662:2:2195
-14663:2:2193
-14664:2:2194
-14665:2:2195
-14666:2:2206
-14667:2:2211
-14668:2:2212
-14669:0:4365
-14670:2:2224
-14671:0:4365
-14672:3:4286
-14673:0:4365
-14674:2:2226
-14675:0:4365
-14676:3:4287
-14677:0:4365
-14678:2:2230
-14679:0:4365
-14680:3:4286
-14681:0:4365
-14682:2:2235
-14683:2:2239
-14684:2:2240
-14685:2:2248
-14686:2:2249
-14687:2:2253
-14688:2:2254
-14689:2:2248
-14690:2:2249
-14691:2:2250
-14692:2:2262
-14693:2:2267
-14694:2:2271
-14695:2:2272
-14696:2:2279
-14697:2:2280
-14698:2:2291
-14699:2:2292
-14700:2:2293
-14701:2:2291
-14702:2:2292
-14703:2:2293
-14704:2:2304
-14705:2:2309
-14706:2:2310
-14707:0:4365
-14708:3:4287
-14709:0:4365
-14710:2:2322
-14711:0:4365
-14712:2:1169
-14713:0:4365
-14714:3:4286
-14715:0:4365
-14716:2:1170
-14717:0:4365
-14718:3:4287
-14719:0:4365
-14720:3:4288
-14721:0:4365
-14722:3:4294
-14723:0:4365
-14724:3:4295
-14725:0:4365
-14726:3:2338
-14727:0:4365
-14728:3:2339
-14729:3:2343
-14730:3:2344
-14731:3:2352
-14732:3:2353
-14733:3:2357
-14734:3:2358
-14735:3:2352
-14736:3:2353
-14737:3:2357
-14738:3:2358
-14739:3:2366
-14740:3:2371
-14741:3:2375
-14742:3:2376
-14743:3:2383
-14744:3:2384
-14745:3:2395
-14746:3:2396
-14747:3:2397
-14748:3:2395
-14749:3:2396
-14750:3:2397
-14751:3:2408
-14752:3:2413
-14753:3:2414
-14754:0:4365
-14755:3:2426
-14756:0:4365
-14757:3:2427
-14758:0:4365
-14759:2:1173
-14760:0:4365
-14761:3:2428
-14762:0:4365
-14763:2:1179
-14764:0:4365
-14765:2:1180
-14766:0:4365
-14767:3:2427
-14768:0:4365
-14769:2:1181
-14770:2:1185
-14771:2:1186
-14772:2:1194
-14773:2:1195
-14774:2:1199
-14775:2:1200
-14776:2:1194
-14777:2:1195
-14778:2:1199
-14779:2:1200
-14780:2:1208
-14781:2:1213
-14782:2:1217
-14783:2:1218
-14784:2:1225
-14785:2:1226
-14786:2:1237
-14787:2:1238
-14788:2:1239
-14789:2:1237
-14790:2:1238
-14791:2:1239
-14792:2:1250
-14793:2:1255
-14794:2:1256
-14795:0:4365
-14796:3:2428
-14797:0:4365
-14798:2:1268
-14799:0:4365
-14800:3:2427
-14801:0:4365
-14802:2:1270
-14803:0:4365
-14804:3:2428
-14805:0:4365
-14806:2:1271
-14807:2:1275
-14808:2:1276
-14809:2:1284
-14810:2:1285
-14811:2:1289
-14812:2:1290
-14813:2:1284
-14814:2:1285
-14815:2:1289
-14816:2:1290
-14817:2:1298
-14818:2:1303
-14819:2:1307
-14820:2:1308
-14821:2:1315
-14822:2:1316
-14823:2:1327
-14824:2:1328
-14825:2:1329
-14826:2:1327
-14827:2:1328
-14828:2:1329
-14829:2:1340
-14830:2:1345
-14831:2:1346
-14832:0:4365
-14833:2:1358
-14834:0:4365
-14835:2:1360
-14836:0:4365
-14837:3:2427
-14838:0:4365
-14839:2:1361
-14840:0:4365
-14841:3:2428
-14842:0:4365
-14843:2:1362
-14844:2:1366
-14845:2:1367
-14846:2:1375
-14847:2:1376
-14848:2:1380
-14849:2:1381
-14850:2:1375
-14851:2:1376
-14852:2:1380
-14853:2:1381
-14854:2:1389
-14855:2:1394
-14856:2:1398
-14857:2:1399
-14858:2:1406
-14859:2:1407
-14860:2:1418
-14861:2:1419
-14862:2:1420
-14863:2:1418
-14864:2:1419
-14865:2:1420
-14866:2:1431
-14867:2:1436
-14868:2:1437
-14869:0:4365
-14870:2:1449
-14871:0:4365
-14872:3:2427
-14873:0:4365
-14874:2:1451
-14875:0:4365
-14876:3:2428
-14877:0:4365
-14878:2:1652
-14879:0:4365
-14880:2:1653
-14881:0:4365
-14882:2:1657
-14883:0:4365
-14884:2:1180
-14885:0:4365
-14886:3:2427
-14887:0:4365
-14888:2:1181
-14889:2:1185
-14890:2:1186
-14891:2:1194
-14892:2:1195
-14893:2:1199
-14894:2:1200
-14895:2:1194
-14896:2:1195
-14897:2:1196
-14898:2:1208
-14899:2:1213
-14900:2:1217
-14901:2:1218
-14902:2:1225
-14903:2:1226
-14904:2:1237
-14905:2:1238
-14906:2:1239
-14907:2:1237
-14908:2:1238
-14909:2:1239
-14910:2:1250
-14911:2:1255
-14912:2:1256
-14913:0:4365
-14914:3:2428
-14915:0:4365
-14916:2:1268
-14917:0:4365
-14918:3:2427
-14919:0:4365
-14920:2:1270
-14921:0:4365
-14922:3:2428
-14923:0:4365
-14924:2:1271
-14925:2:1275
-14926:2:1276
-14927:2:1284
-14928:2:1285
-14929:2:1289
-14930:2:1290
-14931:2:1284
-14932:2:1285
-14933:2:1289
-14934:2:1290
-14935:2:1298
-14936:2:1303
-14937:2:1307
-14938:2:1308
-14939:2:1315
-14940:2:1316
-14941:2:1327
-14942:2:1328
-14943:2:1329
-14944:2:1327
-14945:2:1328
-14946:2:1329
-14947:2:1340
-14948:2:1345
-14949:2:1346
-14950:0:4365
-14951:2:1358
-14952:0:4365
-14953:2:1454
-14954:0:4365
-14955:3:2427
-14956:0:4365
-14957:2:1455
-14958:0:4365
-14959:3:2428
-14960:0:4365
-14961:2:1652
-14962:0:4365
-14963:2:1653
-14964:0:4365
-14965:2:1657
-14966:0:4365
-14967:2:1660
-14968:0:4365
-14969:3:2427
-14970:0:4365
-14971:2:1665
-14972:2:1669
-14973:2:1670
-14974:2:1678
-14975:2:1679
-14976:2:1683
-14977:2:1684
-14978:2:1678
-14979:2:1679
-14980:2:1680
-14981:2:1692
-14982:2:1697
-14983:2:1701
-14984:2:1702
-14985:2:1709
-14986:2:1710
-14987:2:1721
-14988:2:1722
-14989:2:1723
-14990:2:1721
-14991:2:1722
-14992:2:1723
-14993:2:1734
-14994:2:1739
-14995:2:1740
-14996:0:4365
-14997:3:2428
-14998:0:4365
-14999:2:1752
-15000:0:4365
-15001:3:2427
-15002:0:4365
-15003:2:1754
-15004:0:4365
-15005:3:2428
-15006:0:4365
-15007:2:1755
-15008:2:1759
-15009:2:1760
-15010:2:1768
-15011:2:1769
-15012:2:1773
-15013:2:1774
-15014:2:1768
-15015:2:1769
-15016:2:1773
-15017:2:1774
-15018:2:1782
-15019:2:1787
-15020:2:1791
-15021:2:1792
-15022:2:1799
-15023:2:1800
-15024:2:1811
-15025:2:1812
-15026:2:1813
-15027:2:1811
-15028:2:1812
-15029:2:1813
-15030:2:1824
-15031:2:1829
-15032:2:1830
-15033:0:4365
-15034:2:1842
-15035:0:4365
-15036:3:2427
-15037:0:4365
-15038:2:1844
-15039:0:4363
-15040:3:2428
-15041:0:4369
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.define b/formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.define
deleted file mode 100644 (file)
index 0fb59bd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_NEST_LEVEL 2
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.log b/formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.log
deleted file mode 100644 (file)
index d503334..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_nested.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 742)
-Depth=    3880 States=    1e+06 Transitions= 1.18e+07 Memory=   527.190        t=   9.48 R=   1e+05
-Depth=    3880 States=    2e+06 Transitions= 2.39e+07 Memory=   588.225        t=   19.6 R=   1e+05
-Depth=    3880 States=    3e+06 Transitions= 3.61e+07 Memory=   649.260        t=   30.3 R=   1e+05
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.spin.input
deleted file mode 100644 (file)
index c94928c..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-#define READER_NEST_LEVEL 1
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-#define TEST_SIGNAL
-#define TEST_SIGNAL_ON_READ
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-#define get_pid()      ((_pid < 1) -> 0 : 1)
-#elif defined(TEST_SIGNAL_ON_READ)
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-#else
-#define get_pid()      (_pid)
-#endif
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb(i, j)
-{
-       if
-       :: get_pid() >= NR_READERS ->
-               smp_mb_pid(get_pid(), j);
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       smp_mb_pid(i, j);
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               smp_mb_pid(get_pid(), j);
-       :: else -> skip;
-       fi;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-#define get_readerid() (get_pid())
-#define get_writerid() (get_readerid() + NR_READERS)
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               if
-               :: get_readerid() == 0 ->
-progress_reader:
-                       skip;
-               fi;
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       ooo_mem(i);
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       ooo_mem(i);
-       data_access[get_readerid()] = 1;
-       ooo_mem(i);
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-               /* Only test progress of one random reader. They are all the
-                * same. */
-               if
-               :: get_readerid() == 0 ->
-progress_reader:
-                       skip;
-               fi;
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_free_nested.spin.input.trail
deleted file mode 100644 (file)
index 6f29ad2..0000000
+++ /dev/null
@@ -1,11161 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4365
-2:4:4317
-3:4:4320
-4:4:4320
-5:4:4320
-6:4:4323
-7:4:4331
-8:4:4331
-9:4:4331
-10:4:4334
-11:4:4340
-12:4:4344
-13:4:4344
-14:4:4344
-15:4:4347
-16:4:4340
-17:4:4344
-18:4:4344
-19:4:4344
-20:4:4347
-21:4:4355
-22:4:4359
-23:4:4360
-24:0:4365
-25:4:4362
-26:0:4365
-27:3:2331
-28:0:4365
-29:3:2337
-30:0:4365
-31:3:2338
-32:0:4365
-33:3:2339
-34:3:2343
-35:3:2344
-36:3:2352
-37:3:2353
-38:3:2357
-39:3:2358
-40:3:2352
-41:3:2353
-42:3:2357
-43:3:2358
-44:3:2366
-45:3:2371
-46:3:2375
-47:3:2376
-48:3:2383
-49:3:2384
-50:3:2395
-51:3:2396
-52:3:2397
-53:3:2395
-54:3:2396
-55:3:2397
-56:3:2408
-57:3:2413
-58:3:2414
-59:0:4365
-60:3:2426
-61:0:4365
-62:3:2427
-63:0:4365
-64:2:1162
-65:0:4365
-66:3:2428
-67:0:4365
-68:2:1168
-69:0:4365
-70:2:1169
-71:0:4365
-72:3:2427
-73:0:4365
-74:2:1170
-75:0:4365
-76:3:2428
-77:0:4365
-78:3:2429
-79:0:4365
-80:3:2435
-81:3:2436
-82:0:4365
-83:3:2440
-84:3:2444
-85:3:2445
-86:3:2453
-87:3:2454
-88:3:2458
-89:3:2459
-90:3:2453
-91:3:2454
-92:3:2458
-93:3:2459
-94:3:2467
-95:3:2472
-96:3:2473
-97:3:2484
-98:3:2485
-99:3:2496
-100:3:2497
-101:3:2498
-102:3:2496
-103:3:2497
-104:3:2498
-105:3:2509
-106:3:2514
-107:3:2515
-108:0:4365
-109:3:2527
-110:0:4365
-111:3:2528
-112:0:4365
-113:2:1173
-114:0:4365
-115:3:2529
-116:0:4365
-117:2:1179
-118:0:4365
-119:2:1180
-120:0:4365
-121:3:2528
-122:0:4365
-123:2:1181
-124:2:1185
-125:2:1186
-126:2:1194
-127:2:1195
-128:2:1199
-129:2:1200
-130:2:1194
-131:2:1195
-132:2:1199
-133:2:1200
-134:2:1208
-135:2:1213
-136:2:1217
-137:2:1218
-138:2:1225
-139:2:1226
-140:2:1237
-141:2:1238
-142:2:1239
-143:2:1237
-144:2:1238
-145:2:1239
-146:2:1250
-147:2:1255
-148:2:1256
-149:0:4365
-150:3:2529
-151:0:4365
-152:2:1268
-153:0:4365
-154:3:2528
-155:0:4365
-156:2:1270
-157:0:4365
-158:3:2529
-159:0:4365
-160:2:1271
-161:2:1275
-162:2:1276
-163:2:1284
-164:2:1285
-165:2:1289
-166:2:1290
-167:2:1284
-168:2:1285
-169:2:1289
-170:2:1290
-171:2:1298
-172:2:1303
-173:2:1307
-174:2:1308
-175:2:1315
-176:2:1316
-177:2:1327
-178:2:1328
-179:2:1329
-180:2:1327
-181:2:1328
-182:2:1329
-183:2:1340
-184:2:1345
-185:2:1346
-186:0:4365
-187:2:1358
-188:0:4365
-189:2:1360
-190:0:4365
-191:3:2528
-192:0:4365
-193:2:1361
-194:0:4365
-195:3:2529
-196:0:4365
-197:2:1362
-198:2:1366
-199:2:1367
-200:2:1375
-201:2:1376
-202:2:1380
-203:2:1381
-204:2:1375
-205:2:1376
-206:2:1380
-207:2:1381
-208:2:1389
-209:2:1394
-210:2:1398
-211:2:1399
-212:2:1406
-213:2:1407
-214:2:1418
-215:2:1419
-216:2:1420
-217:2:1418
-218:2:1419
-219:2:1420
-220:2:1431
-221:2:1436
-222:2:1437
-223:0:4365
-224:2:1449
-225:0:4365
-226:3:2528
-227:0:4365
-228:2:1451
-229:0:4365
-230:3:2529
-231:0:4365
-232:2:1652
-233:0:4365
-234:2:1653
-235:0:4365
-236:2:1657
-237:0:4365
-238:2:1660
-239:0:4365
-240:3:2528
-241:0:4365
-242:2:1665
-243:2:1669
-244:2:1670
-245:2:1678
-246:2:1679
-247:2:1683
-248:2:1684
-249:2:1678
-250:2:1679
-251:2:1680
-252:2:1692
-253:2:1697
-254:2:1701
-255:2:1702
-256:2:1709
-257:2:1710
-258:2:1721
-259:2:1722
-260:2:1723
-261:2:1721
-262:2:1722
-263:2:1723
-264:2:1734
-265:2:1739
-266:2:1740
-267:0:4365
-268:3:2529
-269:0:4365
-270:2:1752
-271:0:4365
-272:3:2528
-273:0:4365
-274:2:1754
-275:0:4365
-276:3:2529
-277:0:4365
-278:2:1755
-279:2:1759
-280:2:1760
-281:2:1768
-282:2:1769
-283:2:1773
-284:2:1774
-285:2:1768
-286:2:1769
-287:2:1773
-288:2:1774
-289:2:1782
-290:2:1787
-291:2:1791
-292:2:1792
-293:2:1799
-294:2:1800
-295:2:1811
-296:2:1812
-297:2:1813
-298:2:1811
-299:2:1812
-300:2:1813
-301:2:1824
-302:2:1829
-303:2:1830
-304:0:4365
-305:2:1842
-306:0:4365
-307:3:2528
-308:0:4365
-309:2:1844
-310:0:4365
-311:3:2529
-312:0:4365
-313:2:1845
-314:2:1849
-315:2:1850
-316:2:1858
-317:2:1859
-318:2:1863
-319:2:1864
-320:2:1858
-321:2:1859
-322:2:1863
-323:2:1864
-324:2:1872
-325:2:1877
-326:2:1881
-327:2:1882
-328:2:1889
-329:2:1890
-330:2:1901
-331:2:1902
-332:2:1903
-333:2:1901
-334:2:1902
-335:2:1903
-336:2:1914
-337:2:1919
-338:2:1920
-339:0:4365
-340:2:1932
-341:0:4365
-342:3:2528
-343:0:4365
-344:2:1934
-345:0:4365
-346:3:2529
-347:0:4365
-348:2:1935
-349:0:4365
-350:2:1936
-351:0:4365
-352:2:2129
-353:0:4365
-354:2:2130
-355:0:4365
-356:2:2134
-357:0:4365
-358:3:2528
-359:0:4365
-360:2:2136
-361:0:4365
-362:3:2529
-363:0:4365
-364:2:2137
-365:2:2141
-366:2:2142
-367:2:2150
-368:2:2151
-369:2:2155
-370:2:2156
-371:2:2150
-372:2:2151
-373:2:2155
-374:2:2156
-375:2:2164
-376:2:2169
-377:2:2173
-378:2:2174
-379:2:2181
-380:2:2182
-381:2:2193
-382:2:2194
-383:2:2195
-384:2:2193
-385:2:2194
-386:2:2195
-387:2:2206
-388:2:2211
-389:2:2212
-390:0:4365
-391:2:2224
-392:0:4365
-393:3:2528
-394:0:4365
-395:2:2226
-396:0:4365
-397:3:2529
-398:0:4365
-399:2:2230
-400:0:4365
-401:3:2528
-402:0:4365
-403:2:2235
-404:2:2239
-405:2:2240
-406:2:2248
-407:2:2249
-408:2:2253
-409:2:2254
-410:2:2248
-411:2:2249
-412:2:2250
-413:2:2262
-414:2:2267
-415:2:2271
-416:2:2272
-417:2:2279
-418:2:2280
-419:2:2291
-420:2:2292
-421:2:2293
-422:2:2291
-423:2:2292
-424:2:2293
-425:2:2304
-426:2:2309
-427:2:2310
-428:0:4365
-429:3:2529
-430:0:4365
-431:2:2322
-432:0:4365
-433:2:1169
-434:0:4365
-435:3:2528
-436:0:4365
-437:2:1170
-438:0:4365
-439:3:2529
-440:0:4365
-441:3:2530
-442:0:4365
-443:3:2536
-444:0:4365
-445:3:2537
-446:0:4365
-447:3:2547
-448:0:4365
-449:3:2548
-450:0:4365
-451:3:2552
-452:3:2553
-453:3:2557
-454:3:2561
-455:3:2562
-456:3:2557
-457:3:2561
-458:3:2562
-459:3:2566
-460:3:2574
-461:3:2575
-462:3:2580
-463:3:2587
-464:3:2588
-465:3:2587
-466:3:2588
-467:3:2595
-468:3:2600
-469:0:4365
-470:3:2611
-471:0:4365
-472:3:2615
-473:3:2616
-474:3:2620
-475:3:2624
-476:3:2625
-477:3:2620
-478:3:2624
-479:3:2625
-480:3:2629
-481:3:2637
-482:3:2638
-483:3:2643
-484:3:2650
-485:3:2651
-486:3:2650
-487:3:2651
-488:3:2658
-489:3:2663
-490:0:4365
-491:3:2611
-492:0:4365
-493:3:2615
-494:3:2616
-495:3:2620
-496:3:2624
-497:3:2625
-498:3:2620
-499:3:2624
-500:3:2625
-501:3:2629
-502:3:2637
-503:3:2638
-504:3:2643
-505:3:2650
-506:3:2651
-507:3:2650
-508:3:2651
-509:3:2658
-510:3:2663
-511:0:4365
-512:3:2674
-513:0:4365
-514:3:2682
-515:3:2683
-516:3:2687
-517:3:2691
-518:3:2692
-519:3:2687
-520:3:2691
-521:3:2692
-522:3:2696
-523:3:2704
-524:3:2705
-525:3:2710
-526:3:2717
-527:3:2718
-528:3:2717
-529:3:2718
-530:3:2725
-531:3:2730
-532:0:4365
-533:3:2745
-534:0:4365
-535:3:2746
-536:0:4365
-537:2:1173
-538:0:4365
-539:3:2747
-540:0:4365
-541:2:1179
-542:0:4365
-543:2:1180
-544:0:4365
-545:3:2746
-546:0:4365
-547:2:1181
-548:2:1185
-549:2:1186
-550:2:1194
-551:2:1195
-552:2:1199
-553:2:1200
-554:2:1194
-555:2:1195
-556:2:1199
-557:2:1200
-558:2:1208
-559:2:1213
-560:2:1217
-561:2:1218
-562:2:1225
-563:2:1226
-564:2:1237
-565:2:1238
-566:2:1239
-567:2:1237
-568:2:1238
-569:2:1239
-570:2:1250
-571:2:1255
-572:2:1256
-573:0:4365
-574:3:2747
-575:0:4365
-576:2:1268
-577:0:4365
-578:3:2746
-579:0:4365
-580:2:1270
-581:0:4365
-582:3:2747
-583:0:4365
-584:2:1271
-585:2:1275
-586:2:1276
-587:2:1284
-588:2:1285
-589:2:1289
-590:2:1290
-591:2:1284
-592:2:1285
-593:2:1289
-594:2:1290
-595:2:1298
-596:2:1303
-597:2:1307
-598:2:1308
-599:2:1315
-600:2:1316
-601:2:1327
-602:2:1328
-603:2:1329
-604:2:1327
-605:2:1328
-606:2:1329
-607:2:1340
-608:2:1345
-609:2:1346
-610:0:4365
-611:2:1358
-612:0:4365
-613:2:1360
-614:0:4365
-615:3:2746
-616:0:4365
-617:2:1361
-618:0:4365
-619:3:2747
-620:0:4365
-621:2:1362
-622:2:1366
-623:2:1367
-624:2:1375
-625:2:1376
-626:2:1380
-627:2:1381
-628:2:1375
-629:2:1376
-630:2:1380
-631:2:1381
-632:2:1389
-633:2:1394
-634:2:1398
-635:2:1399
-636:2:1406
-637:2:1407
-638:2:1418
-639:2:1419
-640:2:1420
-641:2:1418
-642:2:1419
-643:2:1420
-644:2:1431
-645:2:1436
-646:2:1437
-647:0:4365
-648:2:1449
-649:0:4365
-650:3:2746
-651:0:4365
-652:2:1451
-653:0:4365
-654:3:2747
-655:0:4365
-656:2:1652
-657:0:4365
-658:2:1653
-659:0:4365
-660:2:1657
-661:0:4365
-662:2:1660
-663:0:4365
-664:3:2746
-665:0:4365
-666:2:1665
-667:2:1669
-668:2:1670
-669:2:1678
-670:2:1679
-671:2:1683
-672:2:1684
-673:2:1678
-674:2:1679
-675:2:1680
-676:2:1692
-677:2:1697
-678:2:1701
-679:2:1702
-680:2:1709
-681:2:1710
-682:2:1721
-683:2:1722
-684:2:1723
-685:2:1721
-686:2:1722
-687:2:1723
-688:2:1734
-689:2:1739
-690:2:1740
-691:0:4365
-692:3:2747
-693:0:4365
-694:2:1752
-695:0:4365
-696:3:2746
-697:0:4365
-698:2:1754
-699:0:4365
-700:3:2747
-701:0:4365
-702:2:1755
-703:2:1759
-704:2:1760
-705:2:1768
-706:2:1769
-707:2:1773
-708:2:1774
-709:2:1768
-710:2:1769
-711:2:1773
-712:2:1774
-713:2:1782
-714:2:1787
-715:2:1791
-716:2:1792
-717:2:1799
-718:2:1800
-719:2:1811
-720:2:1812
-721:2:1813
-722:2:1811
-723:2:1812
-724:2:1813
-725:2:1824
-726:2:1829
-727:2:1830
-728:0:4365
-729:2:1842
-730:0:4365
-731:3:2746
-732:0:4365
-733:2:1844
-734:0:4365
-735:3:2747
-736:0:4365
-737:2:1845
-738:2:1849
-739:2:1850
-740:2:1858
-741:2:1859
-742:2:1863
-743:2:1864
-744:2:1858
-745:2:1859
-746:2:1863
-747:2:1864
-748:2:1872
-749:2:1877
-750:2:1881
-751:2:1882
-752:2:1889
-753:2:1890
-754:2:1901
-755:2:1902
-756:2:1903
-757:2:1901
-758:2:1902
-759:2:1903
-760:2:1914
-761:2:1919
-762:2:1920
-763:0:4365
-764:2:1932
-765:0:4365
-766:3:2746
-767:0:4365
-768:2:1934
-769:0:4365
-770:3:2747
-771:0:4365
-772:2:1935
-773:0:4365
-774:2:1936
-775:0:4365
-776:2:2129
-777:0:4365
-778:2:2130
-779:0:4365
-780:2:2134
-781:0:4365
-782:3:2746
-783:0:4365
-784:2:2136
-785:0:4365
-786:3:2747
-787:0:4365
-788:2:2137
-789:2:2141
-790:2:2142
-791:2:2150
-792:2:2151
-793:2:2155
-794:2:2156
-795:2:2150
-796:2:2151
-797:2:2155
-798:2:2156
-799:2:2164
-800:2:2169
-801:2:2173
-802:2:2174
-803:2:2181
-804:2:2182
-805:2:2193
-806:2:2194
-807:2:2195
-808:2:2193
-809:2:2194
-810:2:2195
-811:2:2206
-812:2:2211
-813:2:2212
-814:0:4365
-815:2:2224
-816:0:4365
-817:3:2746
-818:0:4365
-819:2:2226
-820:0:4365
-821:3:2747
-822:0:4365
-823:2:2230
-824:0:4365
-825:3:2746
-826:0:4365
-827:2:2235
-828:2:2239
-829:2:2240
-830:2:2248
-831:2:2249
-832:2:2253
-833:2:2254
-834:2:2248
-835:2:2249
-836:2:2250
-837:2:2262
-838:2:2267
-839:2:2271
-840:2:2272
-841:2:2279
-842:2:2280
-843:2:2291
-844:2:2292
-845:2:2293
-846:2:2291
-847:2:2292
-848:2:2293
-849:2:2304
-850:2:2309
-851:2:2310
-852:0:4365
-853:3:2747
-854:0:4365
-855:2:2322
-856:0:4365
-857:2:1169
-858:0:4365
-859:3:2746
-860:0:4365
-861:2:1170
-862:0:4365
-863:3:2747
-864:0:4365
-865:3:2748
-866:0:4365
-867:3:2754
-868:0:4365
-869:3:2755
-870:3:2759
-871:3:2760
-872:3:2768
-873:3:2769
-874:3:2773
-875:3:2774
-876:3:2768
-877:3:2769
-878:3:2773
-879:3:2774
-880:3:2782
-881:3:2787
-882:3:2791
-883:3:2792
-884:3:2799
-885:3:2800
-886:3:2811
-887:3:2812
-888:3:2813
-889:3:2811
-890:3:2812
-891:3:2813
-892:3:2824
-893:3:2829
-894:3:2830
-895:0:4365
-896:3:2842
-897:0:4365
-898:3:2843
-899:0:4365
-900:2:1173
-901:0:4365
-902:3:2844
-903:0:4365
-904:2:1179
-905:0:4365
-906:2:1180
-907:0:4365
-908:3:2843
-909:0:4365
-910:2:1181
-911:2:1185
-912:2:1186
-913:2:1194
-914:2:1195
-915:2:1199
-916:2:1200
-917:2:1194
-918:2:1195
-919:2:1199
-920:2:1200
-921:2:1208
-922:2:1213
-923:2:1217
-924:2:1218
-925:2:1225
-926:2:1226
-927:2:1237
-928:2:1238
-929:2:1239
-930:2:1237
-931:2:1238
-932:2:1239
-933:2:1250
-934:2:1255
-935:2:1256
-936:0:4365
-937:3:2844
-938:0:4365
-939:2:1268
-940:0:4365
-941:3:2843
-942:0:4365
-943:2:1270
-944:0:4365
-945:3:2844
-946:0:4365
-947:2:1271
-948:2:1275
-949:2:1276
-950:2:1284
-951:2:1285
-952:2:1289
-953:2:1290
-954:2:1284
-955:2:1285
-956:2:1289
-957:2:1290
-958:2:1298
-959:2:1303
-960:2:1307
-961:2:1308
-962:2:1315
-963:2:1316
-964:2:1327
-965:2:1328
-966:2:1329
-967:2:1327
-968:2:1328
-969:2:1329
-970:2:1340
-971:2:1345
-972:2:1346
-973:0:4365
-974:2:1358
-975:0:4365
-976:2:1360
-977:0:4365
-978:3:2843
-979:0:4365
-980:2:1361
-981:0:4365
-982:3:2844
-983:0:4365
-984:2:1362
-985:2:1366
-986:2:1367
-987:2:1375
-988:2:1376
-989:2:1380
-990:2:1381
-991:2:1375
-992:2:1376
-993:2:1380
-994:2:1381
-995:2:1389
-996:2:1394
-997:2:1398
-998:2:1399
-999:2:1406
-1000:2:1407
-1001:2:1418
-1002:2:1419
-1003:2:1420
-1004:2:1418
-1005:2:1419
-1006:2:1420
-1007:2:1431
-1008:2:1436
-1009:2:1437
-1010:0:4365
-1011:2:1449
-1012:0:4365
-1013:3:2843
-1014:0:4365
-1015:2:1451
-1016:0:4365
-1017:3:2844
-1018:0:4365
-1019:2:1652
-1020:0:4365
-1021:2:1653
-1022:0:4365
-1023:2:1657
-1024:0:4365
-1025:2:1660
-1026:0:4365
-1027:3:2843
-1028:0:4365
-1029:2:1665
-1030:2:1669
-1031:2:1670
-1032:2:1678
-1033:2:1679
-1034:2:1683
-1035:2:1684
-1036:2:1678
-1037:2:1679
-1038:2:1680
-1039:2:1692
-1040:2:1697
-1041:2:1701
-1042:2:1702
-1043:2:1709
-1044:2:1710
-1045:2:1721
-1046:2:1722
-1047:2:1723
-1048:2:1721
-1049:2:1722
-1050:2:1723
-1051:2:1734
-1052:2:1739
-1053:2:1740
-1054:0:4365
-1055:3:2844
-1056:0:4365
-1057:2:1752
-1058:0:4365
-1059:3:2843
-1060:0:4365
-1061:2:1754
-1062:0:4365
-1063:3:2844
-1064:0:4365
-1065:2:1755
-1066:2:1759
-1067:2:1760
-1068:2:1768
-1069:2:1769
-1070:2:1773
-1071:2:1774
-1072:2:1768
-1073:2:1769
-1074:2:1773
-1075:2:1774
-1076:2:1782
-1077:2:1787
-1078:2:1791
-1079:2:1792
-1080:2:1799
-1081:2:1800
-1082:2:1811
-1083:2:1812
-1084:2:1813
-1085:2:1811
-1086:2:1812
-1087:2:1813
-1088:2:1824
-1089:2:1829
-1090:2:1830
-1091:0:4365
-1092:2:1842
-1093:0:4365
-1094:3:2843
-1095:0:4365
-1096:2:1844
-1097:0:4365
-1098:3:2844
-1099:0:4365
-1100:2:1845
-1101:2:1849
-1102:2:1850
-1103:2:1858
-1104:2:1859
-1105:2:1863
-1106:2:1864
-1107:2:1858
-1108:2:1859
-1109:2:1863
-1110:2:1864
-1111:2:1872
-1112:2:1877
-1113:2:1881
-1114:2:1882
-1115:2:1889
-1116:2:1890
-1117:2:1901
-1118:2:1902
-1119:2:1903
-1120:2:1901
-1121:2:1902
-1122:2:1903
-1123:2:1914
-1124:2:1919
-1125:2:1920
-1126:0:4365
-1127:2:1932
-1128:0:4365
-1129:3:2843
-1130:0:4365
-1131:2:1934
-1132:0:4365
-1133:3:2844
-1134:0:4365
-1135:2:1935
-1136:0:4365
-1137:2:1936
-1138:0:4365
-1139:2:2129
-1140:0:4365
-1141:2:2130
-1142:0:4365
-1143:2:2134
-1144:0:4365
-1145:3:2843
-1146:0:4365
-1147:2:2136
-1148:0:4365
-1149:3:2844
-1150:0:4365
-1151:2:2137
-1152:2:2141
-1153:2:2142
-1154:2:2150
-1155:2:2151
-1156:2:2155
-1157:2:2156
-1158:2:2150
-1159:2:2151
-1160:2:2155
-1161:2:2156
-1162:2:2164
-1163:2:2169
-1164:2:2173
-1165:2:2174
-1166:2:2181
-1167:2:2182
-1168:2:2193
-1169:2:2194
-1170:2:2195
-1171:2:2193
-1172:2:2194
-1173:2:2195
-1174:2:2206
-1175:2:2211
-1176:2:2212
-1177:0:4365
-1178:2:2224
-1179:0:4365
-1180:3:2843
-1181:0:4365
-1182:2:2226
-1183:0:4365
-1184:3:2844
-1185:0:4365
-1186:2:2230
-1187:0:4365
-1188:3:2843
-1189:0:4365
-1190:2:2235
-1191:2:2239
-1192:2:2240
-1193:2:2248
-1194:2:2249
-1195:2:2253
-1196:2:2254
-1197:2:2248
-1198:2:2249
-1199:2:2250
-1200:2:2262
-1201:2:2267
-1202:2:2271
-1203:2:2272
-1204:2:2279
-1205:2:2280
-1206:2:2291
-1207:2:2292
-1208:2:2293
-1209:2:2291
-1210:2:2292
-1211:2:2293
-1212:2:2304
-1213:2:2309
-1214:2:2310
-1215:0:4365
-1216:3:2844
-1217:0:4365
-1218:2:2322
-1219:0:4365
-1220:2:1169
-1221:0:4365
-1222:3:2843
-1223:0:4365
-1224:2:1170
-1225:0:4365
-1226:3:2844
-1227:0:4365
-1228:3:2845
-1229:0:4365
-1230:3:2851
-1231:0:4365
-1232:3:2854
-1233:3:2855
-1234:3:2867
-1235:3:2868
-1236:3:2872
-1237:3:2873
-1238:3:2867
-1239:3:2868
-1240:3:2872
-1241:3:2873
-1242:3:2881
-1243:3:2886
-1244:3:2890
-1245:3:2891
-1246:3:2898
-1247:3:2899
-1248:3:2910
-1249:3:2911
-1250:3:2912
-1251:3:2910
-1252:3:2911
-1253:3:2912
-1254:3:2923
-1255:3:2928
-1256:3:2929
-1257:0:4365
-1258:3:2941
-1259:0:4365
-1260:3:2942
-1261:0:4365
-1262:2:1173
-1263:0:4365
-1264:3:2943
-1265:0:4365
-1266:2:1179
-1267:0:4365
-1268:2:1180
-1269:0:4365
-1270:3:2942
-1271:0:4365
-1272:2:1181
-1273:2:1185
-1274:2:1186
-1275:2:1194
-1276:2:1195
-1277:2:1199
-1278:2:1200
-1279:2:1194
-1280:2:1195
-1281:2:1199
-1282:2:1200
-1283:2:1208
-1284:2:1213
-1285:2:1217
-1286:2:1218
-1287:2:1225
-1288:2:1226
-1289:2:1237
-1290:2:1238
-1291:2:1239
-1292:2:1237
-1293:2:1238
-1294:2:1239
-1295:2:1250
-1296:2:1255
-1297:2:1256
-1298:0:4365
-1299:3:2943
-1300:0:4365
-1301:2:1268
-1302:0:4365
-1303:3:2942
-1304:0:4365
-1305:2:1270
-1306:0:4365
-1307:3:2943
-1308:0:4365
-1309:2:1271
-1310:2:1275
-1311:2:1276
-1312:2:1284
-1313:2:1285
-1314:2:1289
-1315:2:1290
-1316:2:1284
-1317:2:1285
-1318:2:1289
-1319:2:1290
-1320:2:1298
-1321:2:1303
-1322:2:1307
-1323:2:1308
-1324:2:1315
-1325:2:1316
-1326:2:1327
-1327:2:1328
-1328:2:1329
-1329:2:1327
-1330:2:1328
-1331:2:1329
-1332:2:1340
-1333:2:1345
-1334:2:1346
-1335:0:4365
-1336:2:1358
-1337:0:4365
-1338:2:1360
-1339:0:4365
-1340:3:2942
-1341:0:4365
-1342:2:1361
-1343:0:4365
-1344:3:2943
-1345:0:4365
-1346:2:1362
-1347:2:1366
-1348:2:1367
-1349:2:1375
-1350:2:1376
-1351:2:1380
-1352:2:1381
-1353:2:1375
-1354:2:1376
-1355:2:1380
-1356:2:1381
-1357:2:1389
-1358:2:1394
-1359:2:1398
-1360:2:1399
-1361:2:1406
-1362:2:1407
-1363:2:1418
-1364:2:1419
-1365:2:1420
-1366:2:1418
-1367:2:1419
-1368:2:1420
-1369:2:1431
-1370:2:1436
-1371:2:1437
-1372:0:4365
-1373:2:1449
-1374:0:4365
-1375:3:2942
-1376:0:4365
-1377:2:1451
-1378:0:4365
-1379:3:2943
-1380:0:4365
-1381:2:1652
-1382:0:4365
-1383:2:1653
-1384:0:4365
-1385:2:1657
-1386:0:4365
-1387:2:1660
-1388:0:4365
-1389:3:2942
-1390:0:4365
-1391:2:1665
-1392:2:1669
-1393:2:1670
-1394:2:1678
-1395:2:1679
-1396:2:1683
-1397:2:1684
-1398:2:1678
-1399:2:1679
-1400:2:1680
-1401:2:1692
-1402:2:1697
-1403:2:1701
-1404:2:1702
-1405:2:1709
-1406:2:1710
-1407:2:1721
-1408:2:1722
-1409:2:1723
-1410:2:1721
-1411:2:1722
-1412:2:1723
-1413:2:1734
-1414:2:1739
-1415:2:1740
-1416:0:4365
-1417:3:2943
-1418:0:4365
-1419:2:1752
-1420:0:4365
-1421:3:2942
-1422:0:4365
-1423:2:1754
-1424:0:4365
-1425:3:2943
-1426:0:4365
-1427:2:1755
-1428:2:1759
-1429:2:1760
-1430:2:1768
-1431:2:1769
-1432:2:1773
-1433:2:1774
-1434:2:1768
-1435:2:1769
-1436:2:1773
-1437:2:1774
-1438:2:1782
-1439:2:1787
-1440:2:1791
-1441:2:1792
-1442:2:1799
-1443:2:1800
-1444:2:1811
-1445:2:1812
-1446:2:1813
-1447:2:1811
-1448:2:1812
-1449:2:1813
-1450:2:1824
-1451:2:1829
-1452:2:1830
-1453:0:4365
-1454:2:1842
-1455:0:4365
-1456:3:2942
-1457:0:4365
-1458:2:1844
-1459:0:4365
-1460:3:2943
-1461:0:4365
-1462:2:1845
-1463:2:1849
-1464:2:1850
-1465:2:1858
-1466:2:1859
-1467:2:1863
-1468:2:1864
-1469:2:1858
-1470:2:1859
-1471:2:1863
-1472:2:1864
-1473:2:1872
-1474:2:1877
-1475:2:1881
-1476:2:1882
-1477:2:1889
-1478:2:1890
-1479:2:1901
-1480:2:1902
-1481:2:1903
-1482:2:1901
-1483:2:1902
-1484:2:1903
-1485:2:1914
-1486:2:1919
-1487:2:1920
-1488:0:4365
-1489:2:1932
-1490:0:4365
-1491:3:2942
-1492:0:4365
-1493:2:1934
-1494:0:4365
-1495:3:2943
-1496:0:4365
-1497:2:1935
-1498:0:4365
-1499:2:1936
-1500:0:4365
-1501:2:2129
-1502:0:4365
-1503:2:2130
-1504:0:4365
-1505:2:2134
-1506:0:4365
-1507:3:2942
-1508:0:4365
-1509:2:2136
-1510:0:4365
-1511:3:2943
-1512:0:4365
-1513:2:2137
-1514:2:2141
-1515:2:2142
-1516:2:2150
-1517:2:2151
-1518:2:2155
-1519:2:2156
-1520:2:2150
-1521:2:2151
-1522:2:2155
-1523:2:2156
-1524:2:2164
-1525:2:2169
-1526:2:2173
-1527:2:2174
-1528:2:2181
-1529:2:2182
-1530:2:2193
-1531:2:2194
-1532:2:2195
-1533:2:2193
-1534:2:2194
-1535:2:2195
-1536:2:2206
-1537:2:2211
-1538:2:2212
-1539:0:4365
-1540:2:2224
-1541:0:4365
-1542:3:2942
-1543:0:4365
-1544:2:2226
-1545:0:4365
-1546:3:2943
-1547:0:4365
-1548:2:2230
-1549:0:4365
-1550:3:2942
-1551:0:4365
-1552:2:2235
-1553:2:2239
-1554:2:2240
-1555:2:2248
-1556:2:2249
-1557:2:2253
-1558:2:2254
-1559:2:2248
-1560:2:2249
-1561:2:2250
-1562:2:2262
-1563:2:2267
-1564:2:2271
-1565:2:2272
-1566:2:2279
-1567:2:2280
-1568:2:2291
-1569:2:2292
-1570:2:2293
-1571:2:2291
-1572:2:2292
-1573:2:2293
-1574:2:2304
-1575:2:2309
-1576:2:2310
-1577:0:4365
-1578:3:2943
-1579:0:4365
-1580:2:2322
-1581:0:4365
-1582:2:1169
-1583:0:4365
-1584:3:2942
-1585:0:4365
-1586:2:1170
-1587:0:4365
-1588:3:2943
-1589:0:4365
-1590:3:2944
-1591:0:4365
-1592:3:2950
-1593:0:4365
-1594:3:2951
-1595:0:4365
-1596:3:2952
-1597:0:4365
-1598:3:2953
-1599:0:4365
-1600:3:2954
-1601:3:2958
-1602:3:2959
-1603:3:2967
-1604:3:2968
-1605:3:2972
-1606:3:2973
-1607:3:2967
-1608:3:2968
-1609:3:2972
-1610:3:2973
-1611:3:2981
-1612:3:2986
-1613:3:2990
-1614:3:2991
-1615:3:2998
-1616:3:2999
-1617:3:3010
-1618:3:3011
-1619:3:3012
-1620:3:3010
-1621:3:3011
-1622:3:3012
-1623:3:3023
-1624:3:3028
-1625:3:3029
-1626:0:4365
-1627:3:3041
-1628:0:4365
-1629:3:3042
-1630:0:4365
-1631:2:1173
-1632:0:4365
-1633:3:3043
-1634:0:4365
-1635:2:1179
-1636:0:4365
-1637:2:1180
-1638:0:4365
-1639:3:3042
-1640:0:4365
-1641:2:1181
-1642:2:1185
-1643:2:1186
-1644:2:1194
-1645:2:1195
-1646:2:1199
-1647:2:1200
-1648:2:1194
-1649:2:1195
-1650:2:1199
-1651:2:1200
-1652:2:1208
-1653:2:1213
-1654:2:1217
-1655:2:1218
-1656:2:1225
-1657:2:1226
-1658:2:1237
-1659:2:1238
-1660:2:1239
-1661:2:1237
-1662:2:1238
-1663:2:1239
-1664:2:1250
-1665:2:1255
-1666:2:1256
-1667:0:4365
-1668:3:3043
-1669:0:4365
-1670:2:1268
-1671:0:4365
-1672:3:3042
-1673:0:4365
-1674:2:1270
-1675:0:4365
-1676:3:3043
-1677:0:4365
-1678:2:1271
-1679:2:1275
-1680:2:1276
-1681:2:1284
-1682:2:1285
-1683:2:1289
-1684:2:1290
-1685:2:1284
-1686:2:1285
-1687:2:1289
-1688:2:1290
-1689:2:1298
-1690:2:1303
-1691:2:1307
-1692:2:1308
-1693:2:1315
-1694:2:1316
-1695:2:1327
-1696:2:1328
-1697:2:1329
-1698:2:1327
-1699:2:1328
-1700:2:1329
-1701:2:1340
-1702:2:1345
-1703:2:1346
-1704:0:4365
-1705:2:1358
-1706:0:4365
-1707:2:1360
-1708:0:4365
-1709:3:3042
-1710:0:4365
-1711:2:1361
-1712:0:4365
-1713:3:3043
-1714:0:4365
-1715:2:1362
-1716:2:1366
-1717:2:1367
-1718:2:1375
-1719:2:1376
-1720:2:1380
-1721:2:1381
-1722:2:1375
-1723:2:1376
-1724:2:1380
-1725:2:1381
-1726:2:1389
-1727:2:1394
-1728:2:1398
-1729:2:1399
-1730:2:1406
-1731:2:1407
-1732:2:1418
-1733:2:1419
-1734:2:1420
-1735:2:1418
-1736:2:1419
-1737:2:1420
-1738:2:1431
-1739:2:1436
-1740:2:1437
-1741:0:4365
-1742:2:1449
-1743:0:4365
-1744:3:3042
-1745:0:4365
-1746:2:1451
-1747:0:4365
-1748:3:3043
-1749:0:4365
-1750:2:1652
-1751:0:4365
-1752:2:1653
-1753:0:4365
-1754:2:1657
-1755:0:4365
-1756:2:1660
-1757:0:4365
-1758:3:3042
-1759:0:4365
-1760:2:1665
-1761:2:1669
-1762:2:1670
-1763:2:1678
-1764:2:1679
-1765:2:1683
-1766:2:1684
-1767:2:1678
-1768:2:1679
-1769:2:1680
-1770:2:1692
-1771:2:1697
-1772:2:1701
-1773:2:1702
-1774:2:1709
-1775:2:1710
-1776:2:1721
-1777:2:1722
-1778:2:1723
-1779:2:1721
-1780:2:1722
-1781:2:1723
-1782:2:1734
-1783:2:1739
-1784:2:1740
-1785:0:4365
-1786:3:3043
-1787:0:4365
-1788:2:1752
-1789:0:4365
-1790:3:3042
-1791:0:4365
-1792:2:1754
-1793:0:4365
-1794:3:3043
-1795:0:4365
-1796:2:1755
-1797:2:1759
-1798:2:1760
-1799:2:1768
-1800:2:1769
-1801:2:1773
-1802:2:1774
-1803:2:1768
-1804:2:1769
-1805:2:1773
-1806:2:1774
-1807:2:1782
-1808:2:1787
-1809:2:1791
-1810:2:1792
-1811:2:1799
-1812:2:1800
-1813:2:1811
-1814:2:1812
-1815:2:1813
-1816:2:1811
-1817:2:1812
-1818:2:1813
-1819:2:1824
-1820:2:1829
-1821:2:1830
-1822:0:4365
-1823:2:1842
-1824:0:4365
-1825:3:3042
-1826:0:4365
-1827:2:1844
-1828:0:4365
-1829:3:3043
-1830:0:4365
-1831:2:1845
-1832:2:1849
-1833:2:1850
-1834:2:1858
-1835:2:1859
-1836:2:1863
-1837:2:1864
-1838:2:1858
-1839:2:1859
-1840:2:1863
-1841:2:1864
-1842:2:1872
-1843:2:1877
-1844:2:1881
-1845:2:1882
-1846:2:1889
-1847:2:1890
-1848:2:1901
-1849:2:1902
-1850:2:1903
-1851:2:1901
-1852:2:1902
-1853:2:1903
-1854:2:1914
-1855:2:1919
-1856:2:1920
-1857:0:4365
-1858:2:1932
-1859:0:4365
-1860:3:3042
-1861:0:4365
-1862:2:1934
-1863:0:4365
-1864:3:3043
-1865:0:4365
-1866:2:1935
-1867:0:4365
-1868:2:1936
-1869:0:4365
-1870:2:2129
-1871:0:4365
-1872:2:2130
-1873:0:4365
-1874:2:2134
-1875:0:4365
-1876:3:3042
-1877:0:4365
-1878:2:2136
-1879:0:4365
-1880:3:3043
-1881:0:4365
-1882:2:2137
-1883:2:2141
-1884:2:2142
-1885:2:2150
-1886:2:2151
-1887:2:2155
-1888:2:2156
-1889:2:2150
-1890:2:2151
-1891:2:2155
-1892:2:2156
-1893:2:2164
-1894:2:2169
-1895:2:2173
-1896:2:2174
-1897:2:2181
-1898:2:2182
-1899:2:2193
-1900:2:2194
-1901:2:2195
-1902:2:2193
-1903:2:2194
-1904:2:2195
-1905:2:2206
-1906:2:2211
-1907:2:2212
-1908:0:4365
-1909:2:2224
-1910:0:4365
-1911:3:3042
-1912:0:4365
-1913:2:2226
-1914:0:4365
-1915:3:3043
-1916:0:4365
-1917:2:2230
-1918:0:4365
-1919:3:3042
-1920:0:4365
-1921:2:2235
-1922:2:2239
-1923:2:2240
-1924:2:2248
-1925:2:2249
-1926:2:2253
-1927:2:2254
-1928:2:2248
-1929:2:2249
-1930:2:2250
-1931:2:2262
-1932:2:2267
-1933:2:2271
-1934:2:2272
-1935:2:2279
-1936:2:2280
-1937:2:2291
-1938:2:2292
-1939:2:2293
-1940:2:2291
-1941:2:2292
-1942:2:2293
-1943:2:2304
-1944:2:2309
-1945:2:2310
-1946:0:4365
-1947:3:3043
-1948:0:4365
-1949:2:2322
-1950:0:4365
-1951:2:1169
-1952:0:4365
-1953:3:3042
-1954:0:4365
-1955:2:1170
-1956:0:4365
-1957:3:3043
-1958:0:4365
-1959:3:3044
-1960:0:4365
-1961:3:3257
-1962:0:4365
-1963:3:3265
-1964:0:4365
-1965:3:3266
-1966:3:3270
-1967:3:3271
-1968:3:3279
-1969:3:3280
-1970:3:3284
-1971:3:3285
-1972:3:3279
-1973:3:3280
-1974:3:3284
-1975:3:3285
-1976:3:3293
-1977:3:3298
-1978:3:3302
-1979:3:3303
-1980:3:3310
-1981:3:3311
-1982:3:3322
-1983:3:3323
-1984:3:3324
-1985:3:3322
-1986:3:3323
-1987:3:3324
-1988:3:3335
-1989:3:3340
-1990:3:3341
-1991:0:4365
-1992:3:3353
-1993:0:4365
-1994:3:3354
-1995:0:4365
-1996:2:1173
-1997:0:4365
-1998:3:3355
-1999:0:4365
-2000:2:1179
-2001:0:4365
-2002:2:1180
-2003:0:4365
-2004:3:3354
-2005:0:4365
-2006:2:1181
-2007:2:1185
-2008:2:1186
-2009:2:1194
-2010:2:1195
-2011:2:1199
-2012:2:1200
-2013:2:1194
-2014:2:1195
-2015:2:1199
-2016:2:1200
-2017:2:1208
-2018:2:1213
-2019:2:1217
-2020:2:1218
-2021:2:1225
-2022:2:1226
-2023:2:1237
-2024:2:1238
-2025:2:1239
-2026:2:1237
-2027:2:1238
-2028:2:1239
-2029:2:1250
-2030:2:1255
-2031:2:1256
-2032:0:4365
-2033:3:3355
-2034:0:4365
-2035:2:1268
-2036:0:4365
-2037:3:3354
-2038:0:4365
-2039:2:1270
-2040:0:4365
-2041:3:3355
-2042:0:4365
-2043:2:1271
-2044:2:1275
-2045:2:1276
-2046:2:1284
-2047:2:1285
-2048:2:1289
-2049:2:1290
-2050:2:1284
-2051:2:1285
-2052:2:1289
-2053:2:1290
-2054:2:1298
-2055:2:1303
-2056:2:1307
-2057:2:1308
-2058:2:1315
-2059:2:1316
-2060:2:1327
-2061:2:1328
-2062:2:1329
-2063:2:1327
-2064:2:1328
-2065:2:1329
-2066:2:1340
-2067:2:1345
-2068:2:1346
-2069:0:4365
-2070:2:1358
-2071:0:4365
-2072:2:1360
-2073:0:4365
-2074:3:3354
-2075:0:4365
-2076:2:1361
-2077:0:4365
-2078:3:3355
-2079:0:4365
-2080:2:1362
-2081:2:1366
-2082:2:1367
-2083:2:1375
-2084:2:1376
-2085:2:1380
-2086:2:1381
-2087:2:1375
-2088:2:1376
-2089:2:1380
-2090:2:1381
-2091:2:1389
-2092:2:1394
-2093:2:1398
-2094:2:1399
-2095:2:1406
-2096:2:1407
-2097:2:1418
-2098:2:1419
-2099:2:1420
-2100:2:1418
-2101:2:1419
-2102:2:1420
-2103:2:1431
-2104:2:1436
-2105:2:1437
-2106:0:4365
-2107:2:1449
-2108:0:4365
-2109:3:3354
-2110:0:4365
-2111:2:1451
-2112:0:4365
-2113:3:3355
-2114:0:4365
-2115:2:1652
-2116:0:4365
-2117:2:1653
-2118:0:4365
-2119:2:1657
-2120:0:4365
-2121:2:1660
-2122:0:4365
-2123:3:3354
-2124:0:4365
-2125:2:1665
-2126:2:1669
-2127:2:1670
-2128:2:1678
-2129:2:1679
-2130:2:1683
-2131:2:1684
-2132:2:1678
-2133:2:1679
-2134:2:1680
-2135:2:1692
-2136:2:1697
-2137:2:1701
-2138:2:1702
-2139:2:1709
-2140:2:1710
-2141:2:1721
-2142:2:1722
-2143:2:1723
-2144:2:1721
-2145:2:1722
-2146:2:1723
-2147:2:1734
-2148:2:1739
-2149:2:1740
-2150:0:4365
-2151:3:3355
-2152:0:4365
-2153:2:1752
-2154:0:4365
-2155:3:3354
-2156:0:4365
-2157:2:1754
-2158:0:4365
-2159:3:3355
-2160:0:4365
-2161:2:1755
-2162:2:1759
-2163:2:1760
-2164:2:1768
-2165:2:1769
-2166:2:1773
-2167:2:1774
-2168:2:1768
-2169:2:1769
-2170:2:1773
-2171:2:1774
-2172:2:1782
-2173:2:1787
-2174:2:1791
-2175:2:1792
-2176:2:1799
-2177:2:1800
-2178:2:1811
-2179:2:1812
-2180:2:1813
-2181:2:1811
-2182:2:1812
-2183:2:1813
-2184:2:1824
-2185:2:1829
-2186:2:1830
-2187:0:4365
-2188:2:1842
-2189:0:4365
-2190:3:3354
-2191:0:4365
-2192:2:1844
-2193:0:4365
-2194:3:3355
-2195:0:4365
-2196:2:1845
-2197:2:1849
-2198:2:1850
-2199:2:1858
-2200:2:1859
-2201:2:1863
-2202:2:1864
-2203:2:1858
-2204:2:1859
-2205:2:1863
-2206:2:1864
-2207:2:1872
-2208:2:1877
-2209:2:1881
-2210:2:1882
-2211:2:1889
-2212:2:1890
-2213:2:1901
-2214:2:1902
-2215:2:1903
-2216:2:1901
-2217:2:1902
-2218:2:1903
-2219:2:1914
-2220:2:1919
-2221:2:1920
-2222:0:4365
-2223:2:1932
-2224:0:4365
-2225:3:3354
-2226:0:4365
-2227:2:1934
-2228:0:4365
-2229:3:3355
-2230:0:4365
-2231:2:1935
-2232:0:4365
-2233:2:1936
-2234:0:4365
-2235:2:2129
-2236:0:4365
-2237:2:2130
-2238:0:4365
-2239:2:2134
-2240:0:4365
-2241:3:3354
-2242:0:4365
-2243:2:2136
-2244:0:4365
-2245:3:3355
-2246:0:4365
-2247:2:2137
-2248:2:2141
-2249:2:2142
-2250:2:2150
-2251:2:2151
-2252:2:2155
-2253:2:2156
-2254:2:2150
-2255:2:2151
-2256:2:2155
-2257:2:2156
-2258:2:2164
-2259:2:2169
-2260:2:2173
-2261:2:2174
-2262:2:2181
-2263:2:2182
-2264:2:2193
-2265:2:2194
-2266:2:2195
-2267:2:2193
-2268:2:2194
-2269:2:2195
-2270:2:2206
-2271:2:2211
-2272:2:2212
-2273:0:4365
-2274:2:2224
-2275:0:4365
-2276:3:3354
-2277:0:4365
-2278:2:2226
-2279:0:4365
-2280:3:3355
-2281:0:4365
-2282:2:2230
-2283:0:4365
-2284:3:3354
-2285:0:4365
-2286:2:2235
-2287:2:2239
-2288:2:2240
-2289:2:2248
-2290:2:2249
-2291:2:2253
-2292:2:2254
-2293:2:2248
-2294:2:2249
-2295:2:2250
-2296:2:2262
-2297:2:2267
-2298:2:2271
-2299:2:2272
-2300:2:2279
-2301:2:2280
-2302:2:2291
-2303:2:2292
-2304:2:2293
-2305:2:2291
-2306:2:2292
-2307:2:2293
-2308:2:2304
-2309:2:2309
-2310:2:2310
-2311:0:4365
-2312:3:3355
-2313:0:4365
-2314:2:2322
-2315:0:4365
-2316:2:1169
-2317:0:4365
-2318:3:3354
-2319:0:4365
-2320:2:1170
-2321:0:4365
-2322:3:3355
-2323:0:4365
-2324:3:3356
-2325:0:4365
-2326:3:3366
-2327:0:4365
-2328:3:2951
-2329:0:4365
-2330:3:2952
-2331:0:4365
-2332:3:2953
-2333:0:4365
-2334:3:2954
-2335:3:2958
-2336:3:2959
-2337:3:2967
-2338:3:2968
-2339:3:2972
-2340:3:2973
-2341:3:2967
-2342:3:2968
-2343:3:2972
-2344:3:2973
-2345:3:2981
-2346:3:2986
-2347:3:2990
-2348:3:2991
-2349:3:2998
-2350:3:2999
-2351:3:3010
-2352:3:3011
-2353:3:3012
-2354:3:3010
-2355:3:3011
-2356:3:3012
-2357:3:3023
-2358:3:3028
-2359:3:3029
-2360:0:4365
-2361:3:3041
-2362:0:4365
-2363:3:3042
-2364:0:4365
-2365:2:1173
-2366:0:4365
-2367:3:3043
-2368:0:4365
-2369:2:1179
-2370:0:4365
-2371:2:1180
-2372:0:4365
-2373:3:3042
-2374:0:4365
-2375:2:1181
-2376:2:1185
-2377:2:1186
-2378:2:1194
-2379:2:1195
-2380:2:1199
-2381:2:1200
-2382:2:1194
-2383:2:1195
-2384:2:1199
-2385:2:1200
-2386:2:1208
-2387:2:1213
-2388:2:1217
-2389:2:1218
-2390:2:1225
-2391:2:1226
-2392:2:1237
-2393:2:1238
-2394:2:1239
-2395:2:1237
-2396:2:1238
-2397:2:1239
-2398:2:1250
-2399:2:1255
-2400:2:1256
-2401:0:4365
-2402:3:3043
-2403:0:4365
-2404:2:1268
-2405:0:4365
-2406:3:3042
-2407:0:4365
-2408:2:1270
-2409:0:4365
-2410:3:3043
-2411:0:4365
-2412:2:1271
-2413:2:1275
-2414:2:1276
-2415:2:1284
-2416:2:1285
-2417:2:1289
-2418:2:1290
-2419:2:1284
-2420:2:1285
-2421:2:1289
-2422:2:1290
-2423:2:1298
-2424:2:1303
-2425:2:1307
-2426:2:1308
-2427:2:1315
-2428:2:1316
-2429:2:1327
-2430:2:1328
-2431:2:1329
-2432:2:1327
-2433:2:1328
-2434:2:1329
-2435:2:1340
-2436:2:1345
-2437:2:1346
-2438:0:4365
-2439:2:1358
-2440:0:4365
-2441:2:1360
-2442:0:4365
-2443:3:3042
-2444:0:4365
-2445:2:1361
-2446:0:4365
-2447:3:3043
-2448:0:4365
-2449:2:1362
-2450:2:1366
-2451:2:1367
-2452:2:1375
-2453:2:1376
-2454:2:1380
-2455:2:1381
-2456:2:1375
-2457:2:1376
-2458:2:1380
-2459:2:1381
-2460:2:1389
-2461:2:1394
-2462:2:1398
-2463:2:1399
-2464:2:1406
-2465:2:1407
-2466:2:1418
-2467:2:1419
-2468:2:1420
-2469:2:1418
-2470:2:1419
-2471:2:1420
-2472:2:1431
-2473:2:1436
-2474:2:1437
-2475:0:4365
-2476:2:1449
-2477:0:4365
-2478:3:3042
-2479:0:4365
-2480:2:1451
-2481:0:4365
-2482:3:3043
-2483:0:4365
-2484:2:1652
-2485:0:4365
-2486:2:1653
-2487:0:4365
-2488:2:1657
-2489:0:4365
-2490:2:1660
-2491:0:4365
-2492:3:3042
-2493:0:4365
-2494:2:1665
-2495:2:1669
-2496:2:1670
-2497:2:1678
-2498:2:1679
-2499:2:1683
-2500:2:1684
-2501:2:1678
-2502:2:1679
-2503:2:1680
-2504:2:1692
-2505:2:1697
-2506:2:1701
-2507:2:1702
-2508:2:1709
-2509:2:1710
-2510:2:1721
-2511:2:1722
-2512:2:1723
-2513:2:1721
-2514:2:1722
-2515:2:1723
-2516:2:1734
-2517:2:1739
-2518:2:1740
-2519:0:4365
-2520:3:3043
-2521:0:4365
-2522:2:1752
-2523:0:4365
-2524:3:3042
-2525:0:4365
-2526:2:1754
-2527:0:4365
-2528:3:3043
-2529:0:4365
-2530:2:1755
-2531:2:1759
-2532:2:1760
-2533:2:1768
-2534:2:1769
-2535:2:1773
-2536:2:1774
-2537:2:1768
-2538:2:1769
-2539:2:1773
-2540:2:1774
-2541:2:1782
-2542:2:1787
-2543:2:1791
-2544:2:1792
-2545:2:1799
-2546:2:1800
-2547:2:1811
-2548:2:1812
-2549:2:1813
-2550:2:1811
-2551:2:1812
-2552:2:1813
-2553:2:1824
-2554:2:1829
-2555:2:1830
-2556:0:4365
-2557:2:1842
-2558:0:4365
-2559:3:3042
-2560:0:4365
-2561:2:1844
-2562:0:4365
-2563:3:3043
-2564:0:4365
-2565:2:1845
-2566:2:1849
-2567:2:1850
-2568:2:1858
-2569:2:1859
-2570:2:1863
-2571:2:1864
-2572:2:1858
-2573:2:1859
-2574:2:1863
-2575:2:1864
-2576:2:1872
-2577:2:1877
-2578:2:1881
-2579:2:1882
-2580:2:1889
-2581:2:1890
-2582:2:1901
-2583:2:1902
-2584:2:1903
-2585:2:1901
-2586:2:1902
-2587:2:1903
-2588:2:1914
-2589:2:1919
-2590:2:1920
-2591:0:4365
-2592:2:1932
-2593:0:4365
-2594:3:3042
-2595:0:4365
-2596:2:1934
-2597:0:4365
-2598:3:3043
-2599:0:4365
-2600:2:1935
-2601:0:4365
-2602:2:1936
-2603:0:4365
-2604:2:2129
-2605:0:4365
-2606:2:2130
-2607:0:4365
-2608:2:2134
-2609:0:4365
-2610:3:3042
-2611:0:4365
-2612:2:2136
-2613:0:4365
-2614:3:3043
-2615:0:4365
-2616:2:2137
-2617:2:2141
-2618:2:2142
-2619:2:2150
-2620:2:2151
-2621:2:2155
-2622:2:2156
-2623:2:2150
-2624:2:2151
-2625:2:2155
-2626:2:2156
-2627:2:2164
-2628:2:2169
-2629:2:2173
-2630:2:2174
-2631:2:2181
-2632:2:2182
-2633:2:2193
-2634:2:2194
-2635:2:2195
-2636:2:2193
-2637:2:2194
-2638:2:2195
-2639:2:2206
-2640:2:2211
-2641:2:2212
-2642:0:4365
-2643:2:2224
-2644:0:4365
-2645:3:3042
-2646:0:4365
-2647:2:2226
-2648:0:4365
-2649:3:3043
-2650:0:4365
-2651:2:2230
-2652:0:4365
-2653:3:3042
-2654:0:4365
-2655:2:2235
-2656:2:2239
-2657:2:2240
-2658:2:2248
-2659:2:2249
-2660:2:2253
-2661:2:2254
-2662:2:2248
-2663:2:2249
-2664:2:2250
-2665:2:2262
-2666:2:2267
-2667:2:2271
-2668:2:2272
-2669:2:2279
-2670:2:2280
-2671:2:2291
-2672:2:2292
-2673:2:2293
-2674:2:2291
-2675:2:2292
-2676:2:2293
-2677:2:2304
-2678:2:2309
-2679:2:2310
-2680:0:4365
-2681:3:3043
-2682:0:4365
-2683:2:2322
-2684:0:4365
-2685:2:1169
-2686:0:4365
-2687:3:3042
-2688:0:4365
-2689:2:1170
-2690:0:4365
-2691:3:3043
-2692:0:4365
-2693:3:3044
-2694:0:4365
-2695:3:3257
-2696:0:4365
-2697:3:3362
-2698:0:4365
-2699:3:3363
-2700:0:4365
-2701:3:3367
-2702:0:4365
-2703:3:3373
-2704:3:3377
-2705:3:3378
-2706:3:3386
-2707:3:3387
-2708:3:3391
-2709:3:3392
-2710:3:3386
-2711:3:3387
-2712:3:3391
-2713:3:3392
-2714:3:3400
-2715:3:3405
-2716:3:3409
-2717:3:3410
-2718:3:3417
-2719:3:3418
-2720:3:3429
-2721:3:3430
-2722:3:3431
-2723:3:3429
-2724:3:3430
-2725:3:3431
-2726:3:3442
-2727:3:3447
-2728:3:3448
-2729:0:4365
-2730:3:3460
-2731:0:4365
-2732:3:3461
-2733:0:4365
-2734:2:1173
-2735:0:4365
-2736:3:3462
-2737:0:4365
-2738:2:1179
-2739:0:4365
-2740:2:1180
-2741:0:4365
-2742:3:3461
-2743:0:4365
-2744:2:1181
-2745:2:1185
-2746:2:1186
-2747:2:1194
-2748:2:1195
-2749:2:1199
-2750:2:1200
-2751:2:1194
-2752:2:1195
-2753:2:1199
-2754:2:1200
-2755:2:1208
-2756:2:1213
-2757:2:1217
-2758:2:1218
-2759:2:1225
-2760:2:1226
-2761:2:1237
-2762:2:1238
-2763:2:1239
-2764:2:1237
-2765:2:1238
-2766:2:1239
-2767:2:1250
-2768:2:1255
-2769:2:1256
-2770:0:4365
-2771:3:3462
-2772:0:4365
-2773:2:1268
-2774:0:4365
-2775:3:3461
-2776:0:4365
-2777:2:1270
-2778:0:4365
-2779:3:3462
-2780:0:4365
-2781:2:1271
-2782:2:1275
-2783:2:1276
-2784:2:1284
-2785:2:1285
-2786:2:1289
-2787:2:1290
-2788:2:1284
-2789:2:1285
-2790:2:1289
-2791:2:1290
-2792:2:1298
-2793:2:1303
-2794:2:1307
-2795:2:1308
-2796:2:1315
-2797:2:1316
-2798:2:1327
-2799:2:1328
-2800:2:1329
-2801:2:1327
-2802:2:1328
-2803:2:1329
-2804:2:1340
-2805:2:1345
-2806:2:1346
-2807:0:4365
-2808:2:1358
-2809:0:4365
-2810:2:1360
-2811:0:4365
-2812:3:3461
-2813:0:4365
-2814:2:1361
-2815:0:4365
-2816:3:3462
-2817:0:4365
-2818:2:1362
-2819:2:1366
-2820:2:1367
-2821:2:1375
-2822:2:1376
-2823:2:1380
-2824:2:1381
-2825:2:1375
-2826:2:1376
-2827:2:1380
-2828:2:1381
-2829:2:1389
-2830:2:1394
-2831:2:1398
-2832:2:1399
-2833:2:1406
-2834:2:1407
-2835:2:1418
-2836:2:1419
-2837:2:1420
-2838:2:1418
-2839:2:1419
-2840:2:1420
-2841:2:1431
-2842:2:1436
-2843:2:1437
-2844:0:4365
-2845:2:1449
-2846:0:4365
-2847:3:3461
-2848:0:4365
-2849:2:1451
-2850:0:4365
-2851:3:3462
-2852:0:4365
-2853:2:1652
-2854:0:4365
-2855:2:1653
-2856:0:4365
-2857:2:1657
-2858:0:4365
-2859:2:1660
-2860:0:4365
-2861:3:3461
-2862:0:4365
-2863:2:1665
-2864:2:1669
-2865:2:1670
-2866:2:1678
-2867:2:1679
-2868:2:1683
-2869:2:1684
-2870:2:1678
-2871:2:1679
-2872:2:1680
-2873:2:1692
-2874:2:1697
-2875:2:1701
-2876:2:1702
-2877:2:1709
-2878:2:1710
-2879:2:1721
-2880:2:1722
-2881:2:1723
-2882:2:1721
-2883:2:1722
-2884:2:1723
-2885:2:1734
-2886:2:1739
-2887:2:1740
-2888:0:4365
-2889:3:3462
-2890:0:4365
-2891:2:1752
-2892:0:4365
-2893:3:3461
-2894:0:4365
-2895:2:1754
-2896:0:4365
-2897:3:3462
-2898:0:4365
-2899:2:1755
-2900:2:1759
-2901:2:1760
-2902:2:1768
-2903:2:1769
-2904:2:1773
-2905:2:1774
-2906:2:1768
-2907:2:1769
-2908:2:1773
-2909:2:1774
-2910:2:1782
-2911:2:1787
-2912:2:1791
-2913:2:1792
-2914:2:1799
-2915:2:1800
-2916:2:1811
-2917:2:1812
-2918:2:1813
-2919:2:1811
-2920:2:1812
-2921:2:1813
-2922:2:1824
-2923:2:1829
-2924:2:1830
-2925:0:4365
-2926:2:1842
-2927:0:4365
-2928:3:3461
-2929:0:4365
-2930:2:1844
-2931:0:4365
-2932:3:3462
-2933:0:4365
-2934:2:1845
-2935:2:1849
-2936:2:1850
-2937:2:1858
-2938:2:1859
-2939:2:1863
-2940:2:1864
-2941:2:1858
-2942:2:1859
-2943:2:1863
-2944:2:1864
-2945:2:1872
-2946:2:1877
-2947:2:1881
-2948:2:1882
-2949:2:1889
-2950:2:1890
-2951:2:1901
-2952:2:1902
-2953:2:1903
-2954:2:1901
-2955:2:1902
-2956:2:1903
-2957:2:1914
-2958:2:1919
-2959:2:1920
-2960:0:4365
-2961:2:1932
-2962:0:4365
-2963:3:3461
-2964:0:4365
-2965:2:1934
-2966:0:4365
-2967:3:3462
-2968:0:4365
-2969:2:1935
-2970:0:4365
-2971:2:1936
-2972:0:4365
-2973:2:2129
-2974:0:4365
-2975:2:2130
-2976:0:4365
-2977:2:2134
-2978:0:4365
-2979:3:3461
-2980:0:4365
-2981:2:2136
-2982:0:4365
-2983:3:3462
-2984:0:4365
-2985:2:2137
-2986:2:2141
-2987:2:2142
-2988:2:2150
-2989:2:2151
-2990:2:2155
-2991:2:2156
-2992:2:2150
-2993:2:2151
-2994:2:2155
-2995:2:2156
-2996:2:2164
-2997:2:2169
-2998:2:2173
-2999:2:2174
-3000:2:2181
-3001:2:2182
-3002:2:2193
-3003:2:2194
-3004:2:2195
-3005:2:2193
-3006:2:2194
-3007:2:2195
-3008:2:2206
-3009:2:2211
-3010:2:2212
-3011:0:4365
-3012:2:2224
-3013:0:4365
-3014:3:3461
-3015:0:4365
-3016:2:2226
-3017:0:4365
-3018:3:3462
-3019:0:4365
-3020:2:2230
-3021:0:4365
-3022:3:3461
-3023:0:4365
-3024:2:2235
-3025:2:2239
-3026:2:2240
-3027:2:2248
-3028:2:2249
-3029:2:2253
-3030:2:2254
-3031:2:2248
-3032:2:2249
-3033:2:2250
-3034:2:2262
-3035:2:2267
-3036:2:2271
-3037:2:2272
-3038:2:2279
-3039:2:2280
-3040:2:2291
-3041:2:2292
-3042:2:2293
-3043:2:2291
-3044:2:2292
-3045:2:2293
-3046:2:2304
-3047:2:2309
-3048:2:2310
-3049:0:4365
-3050:3:3462
-3051:0:4365
-3052:2:2322
-3053:0:4365
-3054:2:1169
-3055:0:4365
-3056:3:3461
-3057:0:4365
-3058:2:1170
-3059:0:4365
-3060:3:3462
-3061:0:4365
-3062:3:3463
-3063:0:4365
-3064:3:3469
-3065:0:4365
-3066:3:3470
-3067:3:3474
-3068:3:3475
-3069:3:3483
-3070:3:3484
-3071:3:3488
-3072:3:3489
-3073:3:3483
-3074:3:3484
-3075:3:3488
-3076:3:3489
-3077:3:3497
-3078:3:3502
-3079:3:3506
-3080:3:3507
-3081:3:3514
-3082:3:3515
-3083:3:3526
-3084:3:3527
-3085:3:3528
-3086:3:3526
-3087:3:3527
-3088:3:3528
-3089:3:3539
-3090:3:3544
-3091:3:3545
-3092:0:4365
-3093:3:3557
-3094:0:4365
-3095:3:3558
-3096:0:4365
-3097:2:1173
-3098:0:4365
-3099:3:3559
-3100:0:4365
-3101:2:1179
-3102:0:4365
-3103:2:1180
-3104:0:4365
-3105:3:3558
-3106:0:4365
-3107:2:1181
-3108:2:1185
-3109:2:1186
-3110:2:1194
-3111:2:1195
-3112:2:1199
-3113:2:1200
-3114:2:1194
-3115:2:1195
-3116:2:1199
-3117:2:1200
-3118:2:1208
-3119:2:1213
-3120:2:1217
-3121:2:1218
-3122:2:1225
-3123:2:1226
-3124:2:1237
-3125:2:1238
-3126:2:1239
-3127:2:1237
-3128:2:1238
-3129:2:1239
-3130:2:1250
-3131:2:1255
-3132:2:1256
-3133:0:4365
-3134:3:3559
-3135:0:4365
-3136:2:1268
-3137:0:4365
-3138:3:3558
-3139:0:4365
-3140:2:1270
-3141:0:4365
-3142:3:3559
-3143:0:4365
-3144:2:1271
-3145:2:1275
-3146:2:1276
-3147:2:1284
-3148:2:1285
-3149:2:1289
-3150:2:1290
-3151:2:1284
-3152:2:1285
-3153:2:1289
-3154:2:1290
-3155:2:1298
-3156:2:1303
-3157:2:1307
-3158:2:1308
-3159:2:1315
-3160:2:1316
-3161:2:1327
-3162:2:1328
-3163:2:1329
-3164:2:1327
-3165:2:1328
-3166:2:1329
-3167:2:1340
-3168:2:1345
-3169:2:1346
-3170:0:4365
-3171:2:1358
-3172:0:4365
-3173:2:1360
-3174:0:4365
-3175:3:3558
-3176:0:4365
-3177:2:1361
-3178:0:4365
-3179:3:3559
-3180:0:4365
-3181:2:1362
-3182:2:1366
-3183:2:1367
-3184:2:1375
-3185:2:1376
-3186:2:1380
-3187:2:1381
-3188:2:1375
-3189:2:1376
-3190:2:1380
-3191:2:1381
-3192:2:1389
-3193:2:1394
-3194:2:1398
-3195:2:1399
-3196:2:1406
-3197:2:1407
-3198:2:1418
-3199:2:1419
-3200:2:1420
-3201:2:1418
-3202:2:1419
-3203:2:1420
-3204:2:1431
-3205:2:1436
-3206:2:1437
-3207:0:4365
-3208:2:1449
-3209:0:4365
-3210:3:3558
-3211:0:4365
-3212:2:1451
-3213:0:4365
-3214:3:3559
-3215:0:4365
-3216:2:1652
-3217:0:4365
-3218:2:1653
-3219:0:4365
-3220:2:1657
-3221:0:4365
-3222:2:1660
-3223:0:4365
-3224:3:3558
-3225:0:4365
-3226:2:1665
-3227:2:1669
-3228:2:1670
-3229:2:1678
-3230:2:1679
-3231:2:1683
-3232:2:1684
-3233:2:1678
-3234:2:1679
-3235:2:1680
-3236:2:1692
-3237:2:1697
-3238:2:1701
-3239:2:1702
-3240:2:1709
-3241:2:1710
-3242:2:1721
-3243:2:1722
-3244:2:1723
-3245:2:1721
-3246:2:1722
-3247:2:1723
-3248:2:1734
-3249:2:1739
-3250:2:1740
-3251:0:4365
-3252:3:3559
-3253:0:4365
-3254:2:1752
-3255:0:4365
-3256:3:3558
-3257:0:4365
-3258:2:1754
-3259:0:4365
-3260:3:3559
-3261:0:4365
-3262:2:1755
-3263:2:1759
-3264:2:1760
-3265:2:1768
-3266:2:1769
-3267:2:1773
-3268:2:1774
-3269:2:1768
-3270:2:1769
-3271:2:1773
-3272:2:1774
-3273:2:1782
-3274:2:1787
-3275:2:1791
-3276:2:1792
-3277:2:1799
-3278:2:1800
-3279:2:1811
-3280:2:1812
-3281:2:1813
-3282:2:1811
-3283:2:1812
-3284:2:1813
-3285:2:1824
-3286:2:1829
-3287:2:1830
-3288:0:4365
-3289:2:1842
-3290:0:4365
-3291:3:3558
-3292:0:4365
-3293:2:1844
-3294:0:4365
-3295:3:3559
-3296:0:4365
-3297:2:1845
-3298:2:1849
-3299:2:1850
-3300:2:1858
-3301:2:1859
-3302:2:1863
-3303:2:1864
-3304:2:1858
-3305:2:1859
-3306:2:1863
-3307:2:1864
-3308:2:1872
-3309:2:1877
-3310:2:1881
-3311:2:1882
-3312:2:1889
-3313:2:1890
-3314:2:1901
-3315:2:1902
-3316:2:1903
-3317:2:1901
-3318:2:1902
-3319:2:1903
-3320:2:1914
-3321:2:1919
-3322:2:1920
-3323:0:4365
-3324:2:1932
-3325:0:4365
-3326:3:3558
-3327:0:4365
-3328:2:1934
-3329:0:4365
-3330:3:3559
-3331:0:4365
-3332:2:1935
-3333:0:4365
-3334:2:1936
-3335:0:4365
-3336:2:2129
-3337:0:4365
-3338:2:2130
-3339:0:4365
-3340:2:2134
-3341:0:4365
-3342:3:3558
-3343:0:4365
-3344:2:2136
-3345:0:4365
-3346:3:3559
-3347:0:4365
-3348:2:2137
-3349:2:2141
-3350:2:2142
-3351:2:2150
-3352:2:2151
-3353:2:2155
-3354:2:2156
-3355:2:2150
-3356:2:2151
-3357:2:2155
-3358:2:2156
-3359:2:2164
-3360:2:2169
-3361:2:2173
-3362:2:2174
-3363:2:2181
-3364:2:2182
-3365:2:2193
-3366:2:2194
-3367:2:2195
-3368:2:2193
-3369:2:2194
-3370:2:2195
-3371:2:2206
-3372:2:2211
-3373:2:2212
-3374:0:4365
-3375:2:2224
-3376:0:4365
-3377:3:3558
-3378:0:4365
-3379:2:2226
-3380:0:4365
-3381:3:3559
-3382:0:4365
-3383:2:2230
-3384:0:4365
-3385:3:3558
-3386:0:4365
-3387:2:2235
-3388:2:2239
-3389:2:2240
-3390:2:2248
-3391:2:2249
-3392:2:2253
-3393:2:2254
-3394:2:2248
-3395:2:2249
-3396:2:2250
-3397:2:2262
-3398:2:2267
-3399:2:2271
-3400:2:2272
-3401:2:2279
-3402:2:2280
-3403:2:2291
-3404:2:2292
-3405:2:2293
-3406:2:2291
-3407:2:2292
-3408:2:2293
-3409:2:2304
-3410:2:2309
-3411:2:2310
-3412:0:4365
-3413:3:3559
-3414:0:4365
-3415:2:2322
-3416:0:4365
-3417:2:1169
-3418:0:4365
-3419:3:3558
-3420:0:4365
-3421:2:1170
-3422:0:4365
-3423:3:3559
-3424:0:4365
-3425:3:3560
-3426:0:4365
-3427:3:3566
-3428:0:4365
-3429:3:3569
-3430:3:3570
-3431:3:3582
-3432:3:3583
-3433:3:3587
-3434:3:3588
-3435:3:3582
-3436:3:3583
-3437:3:3587
-3438:3:3588
-3439:3:3596
-3440:3:3601
-3441:3:3605
-3442:3:3606
-3443:3:3613
-3444:3:3614
-3445:3:3625
-3446:3:3626
-3447:3:3627
-3448:3:3625
-3449:3:3626
-3450:3:3627
-3451:3:3638
-3452:3:3643
-3453:3:3644
-3454:0:4365
-3455:3:3656
-3456:0:4365
-3457:3:3657
-3458:0:4365
-3459:2:1173
-3460:0:4365
-3461:3:3658
-3462:0:4365
-3463:2:1179
-3464:0:4365
-3465:2:1180
-3466:0:4365
-3467:3:3657
-3468:0:4365
-3469:2:1181
-3470:2:1185
-3471:2:1186
-3472:2:1194
-3473:2:1195
-3474:2:1199
-3475:2:1200
-3476:2:1194
-3477:2:1195
-3478:2:1199
-3479:2:1200
-3480:2:1208
-3481:2:1213
-3482:2:1217
-3483:2:1218
-3484:2:1225
-3485:2:1226
-3486:2:1237
-3487:2:1238
-3488:2:1239
-3489:2:1237
-3490:2:1238
-3491:2:1239
-3492:2:1250
-3493:2:1255
-3494:2:1256
-3495:0:4365
-3496:3:3658
-3497:0:4365
-3498:2:1268
-3499:0:4365
-3500:3:3657
-3501:0:4365
-3502:2:1270
-3503:0:4365
-3504:3:3658
-3505:0:4365
-3506:2:1271
-3507:2:1275
-3508:2:1276
-3509:2:1284
-3510:2:1285
-3511:2:1289
-3512:2:1290
-3513:2:1284
-3514:2:1285
-3515:2:1289
-3516:2:1290
-3517:2:1298
-3518:2:1303
-3519:2:1307
-3520:2:1308
-3521:2:1315
-3522:2:1316
-3523:2:1327
-3524:2:1328
-3525:2:1329
-3526:2:1327
-3527:2:1328
-3528:2:1329
-3529:2:1340
-3530:2:1345
-3531:2:1346
-3532:0:4365
-3533:2:1358
-3534:0:4365
-3535:2:1360
-3536:0:4365
-3537:3:3657
-3538:0:4365
-3539:2:1361
-3540:0:4365
-3541:3:3658
-3542:0:4365
-3543:2:1362
-3544:2:1366
-3545:2:1367
-3546:2:1375
-3547:2:1376
-3548:2:1380
-3549:2:1381
-3550:2:1375
-3551:2:1376
-3552:2:1380
-3553:2:1381
-3554:2:1389
-3555:2:1394
-3556:2:1398
-3557:2:1399
-3558:2:1406
-3559:2:1407
-3560:2:1418
-3561:2:1419
-3562:2:1420
-3563:2:1418
-3564:2:1419
-3565:2:1420
-3566:2:1431
-3567:2:1436
-3568:2:1437
-3569:0:4365
-3570:2:1449
-3571:0:4365
-3572:3:3657
-3573:0:4365
-3574:2:1451
-3575:0:4365
-3576:3:3658
-3577:0:4365
-3578:2:1652
-3579:0:4365
-3580:2:1653
-3581:0:4365
-3582:2:1657
-3583:0:4365
-3584:2:1660
-3585:0:4365
-3586:3:3657
-3587:0:4365
-3588:2:1665
-3589:2:1669
-3590:2:1670
-3591:2:1678
-3592:2:1679
-3593:2:1683
-3594:2:1684
-3595:2:1678
-3596:2:1679
-3597:2:1680
-3598:2:1692
-3599:2:1697
-3600:2:1701
-3601:2:1702
-3602:2:1709
-3603:2:1710
-3604:2:1721
-3605:2:1722
-3606:2:1723
-3607:2:1721
-3608:2:1722
-3609:2:1723
-3610:2:1734
-3611:2:1739
-3612:2:1740
-3613:0:4365
-3614:3:3658
-3615:0:4365
-3616:2:1752
-3617:0:4365
-3618:3:3657
-3619:0:4365
-3620:2:1754
-3621:0:4365
-3622:3:3658
-3623:0:4365
-3624:2:1755
-3625:2:1759
-3626:2:1760
-3627:2:1768
-3628:2:1769
-3629:2:1773
-3630:2:1774
-3631:2:1768
-3632:2:1769
-3633:2:1773
-3634:2:1774
-3635:2:1782
-3636:2:1787
-3637:2:1791
-3638:2:1792
-3639:2:1799
-3640:2:1800
-3641:2:1811
-3642:2:1812
-3643:2:1813
-3644:2:1811
-3645:2:1812
-3646:2:1813
-3647:2:1824
-3648:2:1829
-3649:2:1830
-3650:0:4365
-3651:2:1842
-3652:0:4365
-3653:3:3657
-3654:0:4365
-3655:2:1844
-3656:0:4365
-3657:3:3658
-3658:0:4365
-3659:2:1845
-3660:2:1849
-3661:2:1850
-3662:2:1858
-3663:2:1859
-3664:2:1863
-3665:2:1864
-3666:2:1858
-3667:2:1859
-3668:2:1863
-3669:2:1864
-3670:2:1872
-3671:2:1877
-3672:2:1881
-3673:2:1882
-3674:2:1889
-3675:2:1890
-3676:2:1901
-3677:2:1902
-3678:2:1903
-3679:2:1901
-3680:2:1902
-3681:2:1903
-3682:2:1914
-3683:2:1919
-3684:2:1920
-3685:0:4365
-3686:2:1932
-3687:0:4365
-3688:3:3657
-3689:0:4365
-3690:2:1934
-3691:0:4365
-3692:3:3658
-3693:0:4365
-3694:2:1935
-3695:0:4365
-3696:2:1936
-3697:0:4365
-3698:2:2129
-3699:0:4365
-3700:2:2130
-3701:0:4365
-3702:2:2134
-3703:0:4365
-3704:3:3657
-3705:0:4365
-3706:2:2136
-3707:0:4365
-3708:3:3658
-3709:0:4365
-3710:2:2137
-3711:2:2141
-3712:2:2142
-3713:2:2150
-3714:2:2151
-3715:2:2155
-3716:2:2156
-3717:2:2150
-3718:2:2151
-3719:2:2155
-3720:2:2156
-3721:2:2164
-3722:2:2169
-3723:2:2173
-3724:2:2174
-3725:2:2181
-3726:2:2182
-3727:2:2193
-3728:2:2194
-3729:2:2195
-3730:2:2193
-3731:2:2194
-3732:2:2195
-3733:2:2206
-3734:2:2211
-3735:2:2212
-3736:0:4365
-3737:2:2224
-3738:0:4365
-3739:3:3657
-3740:0:4365
-3741:2:2226
-3742:0:4365
-3743:3:3658
-3744:0:4365
-3745:2:2230
-3746:0:4365
-3747:3:3657
-3748:0:4365
-3749:2:2235
-3750:2:2239
-3751:2:2240
-3752:2:2248
-3753:2:2249
-3754:2:2253
-3755:2:2254
-3756:2:2248
-3757:2:2249
-3758:2:2250
-3759:2:2262
-3760:2:2267
-3761:2:2271
-3762:2:2272
-3763:2:2279
-3764:2:2280
-3765:2:2291
-3766:2:2292
-3767:2:2293
-3768:2:2291
-3769:2:2292
-3770:2:2293
-3771:2:2304
-3772:2:2309
-3773:2:2310
-3774:0:4365
-3775:3:3658
-3776:0:4365
-3777:2:2322
-3778:0:4365
-3779:2:1169
-3780:0:4365
-3781:3:3657
-3782:0:4365
-3783:2:1170
-3784:0:4365
-3785:3:3658
-3786:0:4365
-3787:3:3659
-3788:0:4365
-3789:3:3665
-3790:0:4365
-3791:3:3666
-3792:0:4365
-3793:3:3667
-3794:0:4365
-3795:3:3668
-3796:0:4365
-3797:3:3669
-3798:3:3673
-3799:3:3674
-3800:3:3682
-3801:3:3683
-3802:3:3687
-3803:3:3688
-3804:3:3682
-3805:3:3683
-3806:3:3687
-3807:3:3688
-3808:3:3696
-3809:3:3701
-3810:3:3705
-3811:3:3706
-3812:3:3713
-3813:3:3714
-3814:3:3725
-3815:3:3726
-3816:3:3727
-3817:3:3725
-3818:3:3726
-3819:3:3727
-3820:3:3738
-3821:3:3743
-3822:3:3744
-3823:0:4365
-3824:3:3756
-3825:0:4365
-3826:3:3757
-3827:0:4365
-3828:2:1173
-3829:0:4365
-3830:3:3758
-3831:0:4365
-3832:2:1179
-3833:0:4365
-3834:2:1180
-3835:0:4365
-3836:3:3757
-3837:0:4365
-3838:2:1181
-3839:2:1185
-3840:2:1186
-3841:2:1194
-3842:2:1195
-3843:2:1199
-3844:2:1200
-3845:2:1194
-3846:2:1195
-3847:2:1199
-3848:2:1200
-3849:2:1208
-3850:2:1213
-3851:2:1217
-3852:2:1218
-3853:2:1225
-3854:2:1226
-3855:2:1237
-3856:2:1238
-3857:2:1239
-3858:2:1237
-3859:2:1238
-3860:2:1239
-3861:2:1250
-3862:2:1255
-3863:2:1256
-3864:0:4365
-3865:3:3758
-3866:0:4365
-3867:2:1268
-3868:0:4365
-3869:3:3757
-3870:0:4365
-3871:2:1270
-3872:0:4365
-3873:3:3758
-3874:0:4365
-3875:2:1271
-3876:2:1275
-3877:2:1276
-3878:2:1284
-3879:2:1285
-3880:2:1289
-3881:2:1290
-3882:2:1284
-3883:2:1285
-3884:2:1289
-3885:2:1290
-3886:2:1298
-3887:2:1303
-3888:2:1307
-3889:2:1308
-3890:2:1315
-3891:2:1316
-3892:2:1327
-3893:2:1328
-3894:2:1329
-3895:2:1327
-3896:2:1328
-3897:2:1329
-3898:2:1340
-3899:2:1345
-3900:2:1346
-3901:0:4365
-3902:2:1358
-3903:0:4365
-3904:2:1360
-3905:0:4365
-3906:3:3757
-3907:0:4365
-3908:2:1361
-3909:0:4365
-3910:3:3758
-3911:0:4365
-3912:2:1362
-3913:2:1366
-3914:2:1367
-3915:2:1375
-3916:2:1376
-3917:2:1380
-3918:2:1381
-3919:2:1375
-3920:2:1376
-3921:2:1380
-3922:2:1381
-3923:2:1389
-3924:2:1394
-3925:2:1398
-3926:2:1399
-3927:2:1406
-3928:2:1407
-3929:2:1418
-3930:2:1419
-3931:2:1420
-3932:2:1418
-3933:2:1419
-3934:2:1420
-3935:2:1431
-3936:2:1436
-3937:2:1437
-3938:0:4365
-3939:2:1449
-3940:0:4365
-3941:3:3757
-3942:0:4365
-3943:2:1451
-3944:0:4365
-3945:3:3758
-3946:0:4365
-3947:2:1652
-3948:0:4365
-3949:2:1653
-3950:0:4365
-3951:2:1657
-3952:0:4365
-3953:2:1660
-3954:0:4365
-3955:3:3757
-3956:0:4365
-3957:2:1665
-3958:2:1669
-3959:2:1670
-3960:2:1678
-3961:2:1679
-3962:2:1683
-3963:2:1684
-3964:2:1678
-3965:2:1679
-3966:2:1680
-3967:2:1692
-3968:2:1697
-3969:2:1701
-3970:2:1702
-3971:2:1709
-3972:2:1710
-3973:2:1721
-3974:2:1722
-3975:2:1723
-3976:2:1721
-3977:2:1722
-3978:2:1723
-3979:2:1734
-3980:2:1739
-3981:2:1740
-3982:0:4365
-3983:3:3758
-3984:0:4365
-3985:2:1752
-3986:0:4365
-3987:3:3757
-3988:0:4365
-3989:2:1754
-3990:0:4365
-3991:3:3758
-3992:0:4365
-3993:2:1755
-3994:2:1759
-3995:2:1760
-3996:2:1768
-3997:2:1769
-3998:2:1773
-3999:2:1774
-4000:2:1768
-4001:2:1769
-4002:2:1773
-4003:2:1774
-4004:2:1782
-4005:2:1787
-4006:2:1791
-4007:2:1792
-4008:2:1799
-4009:2:1800
-4010:2:1811
-4011:2:1812
-4012:2:1813
-4013:2:1811
-4014:2:1812
-4015:2:1813
-4016:2:1824
-4017:2:1829
-4018:2:1830
-4019:0:4365
-4020:2:1842
-4021:0:4365
-4022:3:3757
-4023:0:4365
-4024:2:1844
-4025:0:4365
-4026:3:3758
-4027:0:4365
-4028:2:1845
-4029:2:1849
-4030:2:1850
-4031:2:1858
-4032:2:1859
-4033:2:1863
-4034:2:1864
-4035:2:1858
-4036:2:1859
-4037:2:1863
-4038:2:1864
-4039:2:1872
-4040:2:1877
-4041:2:1881
-4042:2:1882
-4043:2:1889
-4044:2:1890
-4045:2:1901
-4046:2:1902
-4047:2:1903
-4048:2:1901
-4049:2:1902
-4050:2:1903
-4051:2:1914
-4052:2:1919
-4053:2:1920
-4054:0:4365
-4055:2:1932
-4056:0:4365
-4057:3:3757
-4058:0:4365
-4059:2:1934
-4060:0:4365
-4061:3:3758
-4062:0:4365
-4063:2:1935
-4064:0:4365
-4065:2:1936
-4066:0:4365
-4067:2:2129
-4068:0:4365
-4069:2:2130
-4070:0:4365
-4071:2:2134
-4072:0:4365
-4073:3:3757
-4074:0:4365
-4075:2:2136
-4076:0:4365
-4077:3:3758
-4078:0:4365
-4079:2:2137
-4080:2:2141
-4081:2:2142
-4082:2:2150
-4083:2:2151
-4084:2:2155
-4085:2:2156
-4086:2:2150
-4087:2:2151
-4088:2:2155
-4089:2:2156
-4090:2:2164
-4091:2:2169
-4092:2:2173
-4093:2:2174
-4094:2:2181
-4095:2:2182
-4096:2:2193
-4097:2:2194
-4098:2:2195
-4099:2:2193
-4100:2:2194
-4101:2:2195
-4102:2:2206
-4103:2:2211
-4104:2:2212
-4105:0:4365
-4106:2:2224
-4107:0:4365
-4108:3:3757
-4109:0:4365
-4110:2:2226
-4111:0:4365
-4112:3:3758
-4113:0:4365
-4114:2:2230
-4115:0:4365
-4116:3:3757
-4117:0:4365
-4118:2:2235
-4119:2:2239
-4120:2:2240
-4121:2:2248
-4122:2:2249
-4123:2:2253
-4124:2:2254
-4125:2:2248
-4126:2:2249
-4127:2:2250
-4128:2:2262
-4129:2:2267
-4130:2:2271
-4131:2:2272
-4132:2:2279
-4133:2:2280
-4134:2:2291
-4135:2:2292
-4136:2:2293
-4137:2:2291
-4138:2:2292
-4139:2:2293
-4140:2:2304
-4141:2:2309
-4142:2:2310
-4143:0:4365
-4144:3:3758
-4145:0:4365
-4146:2:2322
-4147:0:4365
-4148:2:1169
-4149:0:4365
-4150:3:3757
-4151:0:4365
-4152:2:1170
-4153:0:4365
-4154:3:3758
-4155:0:4365
-4156:3:3759
-4157:0:4365
-4158:3:3972
-4159:0:4365
-4160:3:3980
-4161:0:4365
-4162:3:3981
-4163:3:3985
-4164:3:3986
-4165:3:3994
-4166:3:3995
-4167:3:3999
-4168:3:4000
-4169:3:3994
-4170:3:3995
-4171:3:3999
-4172:3:4000
-4173:3:4008
-4174:3:4013
-4175:3:4017
-4176:3:4018
-4177:3:4025
-4178:3:4026
-4179:3:4037
-4180:3:4038
-4181:3:4039
-4182:3:4037
-4183:3:4038
-4184:3:4039
-4185:3:4050
-4186:3:4055
-4187:3:4056
-4188:0:4365
-4189:3:4068
-4190:0:4365
-4191:3:4069
-4192:0:4365
-4193:2:1173
-4194:0:4365
-4195:3:4070
-4196:0:4365
-4197:2:1179
-4198:0:4365
-4199:2:1180
-4200:0:4365
-4201:3:4069
-4202:0:4365
-4203:2:1181
-4204:2:1185
-4205:2:1186
-4206:2:1194
-4207:2:1195
-4208:2:1199
-4209:2:1200
-4210:2:1194
-4211:2:1195
-4212:2:1199
-4213:2:1200
-4214:2:1208
-4215:2:1213
-4216:2:1217
-4217:2:1218
-4218:2:1225
-4219:2:1226
-4220:2:1237
-4221:2:1238
-4222:2:1239
-4223:2:1237
-4224:2:1238
-4225:2:1239
-4226:2:1250
-4227:2:1255
-4228:2:1256
-4229:0:4365
-4230:3:4070
-4231:0:4365
-4232:2:1268
-4233:0:4365
-4234:3:4069
-4235:0:4365
-4236:2:1270
-4237:0:4365
-4238:3:4070
-4239:0:4365
-4240:2:1271
-4241:2:1275
-4242:2:1276
-4243:2:1284
-4244:2:1285
-4245:2:1289
-4246:2:1290
-4247:2:1284
-4248:2:1285
-4249:2:1289
-4250:2:1290
-4251:2:1298
-4252:2:1303
-4253:2:1307
-4254:2:1308
-4255:2:1315
-4256:2:1316
-4257:2:1327
-4258:2:1328
-4259:2:1329
-4260:2:1327
-4261:2:1328
-4262:2:1329
-4263:2:1340
-4264:2:1345
-4265:2:1346
-4266:0:4365
-4267:2:1358
-4268:0:4365
-4269:2:1360
-4270:0:4365
-4271:3:4069
-4272:0:4365
-4273:2:1361
-4274:0:4365
-4275:3:4070
-4276:0:4365
-4277:2:1362
-4278:2:1366
-4279:2:1367
-4280:2:1375
-4281:2:1376
-4282:2:1380
-4283:2:1381
-4284:2:1375
-4285:2:1376
-4286:2:1380
-4287:2:1381
-4288:2:1389
-4289:2:1394
-4290:2:1398
-4291:2:1399
-4292:2:1406
-4293:2:1407
-4294:2:1418
-4295:2:1419
-4296:2:1420
-4297:2:1418
-4298:2:1419
-4299:2:1420
-4300:2:1431
-4301:2:1436
-4302:2:1437
-4303:0:4365
-4304:2:1449
-4305:0:4365
-4306:3:4069
-4307:0:4365
-4308:2:1451
-4309:0:4365
-4310:3:4070
-4311:0:4365
-4312:2:1652
-4313:0:4365
-4314:2:1653
-4315:0:4365
-4316:2:1657
-4317:0:4365
-4318:2:1660
-4319:0:4365
-4320:3:4069
-4321:0:4365
-4322:2:1665
-4323:2:1669
-4324:2:1670
-4325:2:1678
-4326:2:1679
-4327:2:1683
-4328:2:1684
-4329:2:1678
-4330:2:1679
-4331:2:1680
-4332:2:1692
-4333:2:1697
-4334:2:1701
-4335:2:1702
-4336:2:1709
-4337:2:1710
-4338:2:1721
-4339:2:1722
-4340:2:1723
-4341:2:1721
-4342:2:1722
-4343:2:1723
-4344:2:1734
-4345:2:1739
-4346:2:1740
-4347:0:4365
-4348:3:4070
-4349:0:4365
-4350:2:1752
-4351:0:4365
-4352:3:4069
-4353:0:4365
-4354:2:1754
-4355:0:4365
-4356:3:4070
-4357:0:4365
-4358:2:1755
-4359:2:1759
-4360:2:1760
-4361:2:1768
-4362:2:1769
-4363:2:1773
-4364:2:1774
-4365:2:1768
-4366:2:1769
-4367:2:1773
-4368:2:1774
-4369:2:1782
-4370:2:1787
-4371:2:1791
-4372:2:1792
-4373:2:1799
-4374:2:1800
-4375:2:1811
-4376:2:1812
-4377:2:1813
-4378:2:1811
-4379:2:1812
-4380:2:1813
-4381:2:1824
-4382:2:1829
-4383:2:1830
-4384:0:4365
-4385:2:1842
-4386:0:4365
-4387:3:4069
-4388:0:4365
-4389:2:1844
-4390:0:4365
-4391:3:4070
-4392:0:4365
-4393:2:1845
-4394:2:1849
-4395:2:1850
-4396:2:1858
-4397:2:1859
-4398:2:1863
-4399:2:1864
-4400:2:1858
-4401:2:1859
-4402:2:1863
-4403:2:1864
-4404:2:1872
-4405:2:1877
-4406:2:1881
-4407:2:1882
-4408:2:1889
-4409:2:1890
-4410:2:1901
-4411:2:1902
-4412:2:1903
-4413:2:1901
-4414:2:1902
-4415:2:1903
-4416:2:1914
-4417:2:1919
-4418:2:1920
-4419:0:4365
-4420:2:1932
-4421:0:4365
-4422:3:4069
-4423:0:4365
-4424:2:1934
-4425:0:4365
-4426:3:4070
-4427:0:4365
-4428:2:1935
-4429:0:4365
-4430:2:1936
-4431:0:4365
-4432:2:2129
-4433:0:4365
-4434:2:2130
-4435:0:4365
-4436:2:2134
-4437:0:4365
-4438:3:4069
-4439:0:4365
-4440:2:2136
-4441:0:4365
-4442:3:4070
-4443:0:4365
-4444:2:2137
-4445:2:2141
-4446:2:2142
-4447:2:2150
-4448:2:2151
-4449:2:2155
-4450:2:2156
-4451:2:2150
-4452:2:2151
-4453:2:2155
-4454:2:2156
-4455:2:2164
-4456:2:2169
-4457:2:2173
-4458:2:2174
-4459:2:2181
-4460:2:2182
-4461:2:2193
-4462:2:2194
-4463:2:2195
-4464:2:2193
-4465:2:2194
-4466:2:2195
-4467:2:2206
-4468:2:2211
-4469:2:2212
-4470:0:4365
-4471:2:2224
-4472:0:4365
-4473:3:4069
-4474:0:4365
-4475:2:2226
-4476:0:4365
-4477:3:4070
-4478:0:4365
-4479:2:2230
-4480:0:4365
-4481:3:4069
-4482:0:4365
-4483:2:2235
-4484:2:2239
-4485:2:2240
-4486:2:2248
-4487:2:2249
-4488:2:2253
-4489:2:2254
-4490:2:2248
-4491:2:2249
-4492:2:2250
-4493:2:2262
-4494:2:2267
-4495:2:2271
-4496:2:2272
-4497:2:2279
-4498:2:2280
-4499:2:2291
-4500:2:2292
-4501:2:2293
-4502:2:2291
-4503:2:2292
-4504:2:2293
-4505:2:2304
-4506:2:2309
-4507:2:2310
-4508:0:4365
-4509:3:4070
-4510:0:4365
-4511:2:2322
-4512:0:4365
-4513:2:1169
-4514:0:4365
-4515:3:4069
-4516:0:4365
-4517:2:1170
-4518:0:4365
-4519:3:4070
-4520:0:4365
-4521:3:4071
-4522:0:4365
-4523:3:4081
-4524:0:4365
-4525:3:3666
-4526:0:4365
-4527:3:3667
-4528:0:4365
-4529:3:3668
-4530:0:4365
-4531:3:3669
-4532:3:3673
-4533:3:3674
-4534:3:3682
-4535:3:3683
-4536:3:3687
-4537:3:3688
-4538:3:3682
-4539:3:3683
-4540:3:3687
-4541:3:3688
-4542:3:3696
-4543:3:3701
-4544:3:3705
-4545:3:3706
-4546:3:3713
-4547:3:3714
-4548:3:3725
-4549:3:3726
-4550:3:3727
-4551:3:3725
-4552:3:3726
-4553:3:3727
-4554:3:3738
-4555:3:3743
-4556:3:3744
-4557:0:4365
-4558:3:3756
-4559:0:4365
-4560:3:3757
-4561:0:4365
-4562:2:1173
-4563:0:4365
-4564:3:3758
-4565:0:4365
-4566:2:1179
-4567:0:4365
-4568:2:1180
-4569:0:4365
-4570:3:3757
-4571:0:4365
-4572:2:1181
-4573:2:1185
-4574:2:1186
-4575:2:1194
-4576:2:1195
-4577:2:1199
-4578:2:1200
-4579:2:1194
-4580:2:1195
-4581:2:1199
-4582:2:1200
-4583:2:1208
-4584:2:1213
-4585:2:1217
-4586:2:1218
-4587:2:1225
-4588:2:1226
-4589:2:1237
-4590:2:1238
-4591:2:1239
-4592:2:1237
-4593:2:1238
-4594:2:1239
-4595:2:1250
-4596:2:1255
-4597:2:1256
-4598:0:4365
-4599:3:3758
-4600:0:4365
-4601:2:1268
-4602:0:4365
-4603:3:3757
-4604:0:4365
-4605:2:1270
-4606:0:4365
-4607:3:3758
-4608:0:4365
-4609:2:1271
-4610:2:1275
-4611:2:1276
-4612:2:1284
-4613:2:1285
-4614:2:1289
-4615:2:1290
-4616:2:1284
-4617:2:1285
-4618:2:1289
-4619:2:1290
-4620:2:1298
-4621:2:1303
-4622:2:1307
-4623:2:1308
-4624:2:1315
-4625:2:1316
-4626:2:1327
-4627:2:1328
-4628:2:1329
-4629:2:1327
-4630:2:1328
-4631:2:1329
-4632:2:1340
-4633:2:1345
-4634:2:1346
-4635:0:4365
-4636:2:1358
-4637:0:4365
-4638:2:1360
-4639:0:4365
-4640:3:3757
-4641:0:4365
-4642:2:1361
-4643:0:4365
-4644:3:3758
-4645:0:4365
-4646:2:1362
-4647:2:1366
-4648:2:1367
-4649:2:1375
-4650:2:1376
-4651:2:1380
-4652:2:1381
-4653:2:1375
-4654:2:1376
-4655:2:1380
-4656:2:1381
-4657:2:1389
-4658:2:1394
-4659:2:1398
-4660:2:1399
-4661:2:1406
-4662:2:1407
-4663:2:1418
-4664:2:1419
-4665:2:1420
-4666:2:1418
-4667:2:1419
-4668:2:1420
-4669:2:1431
-4670:2:1436
-4671:2:1437
-4672:0:4365
-4673:2:1449
-4674:0:4365
-4675:3:3757
-4676:0:4365
-4677:2:1451
-4678:0:4365
-4679:3:3758
-4680:0:4365
-4681:2:1652
-4682:0:4365
-4683:2:1653
-4684:0:4365
-4685:2:1657
-4686:0:4365
-4687:2:1660
-4688:0:4365
-4689:3:3757
-4690:0:4365
-4691:2:1665
-4692:2:1669
-4693:2:1670
-4694:2:1678
-4695:2:1679
-4696:2:1683
-4697:2:1684
-4698:2:1678
-4699:2:1679
-4700:2:1680
-4701:2:1692
-4702:2:1697
-4703:2:1701
-4704:2:1702
-4705:2:1709
-4706:2:1710
-4707:2:1721
-4708:2:1722
-4709:2:1723
-4710:2:1721
-4711:2:1722
-4712:2:1723
-4713:2:1734
-4714:2:1739
-4715:2:1740
-4716:0:4365
-4717:3:3758
-4718:0:4365
-4719:2:1752
-4720:0:4365
-4721:3:3757
-4722:0:4365
-4723:2:1754
-4724:0:4365
-4725:3:3758
-4726:0:4365
-4727:2:1755
-4728:2:1759
-4729:2:1760
-4730:2:1768
-4731:2:1769
-4732:2:1773
-4733:2:1774
-4734:2:1768
-4735:2:1769
-4736:2:1773
-4737:2:1774
-4738:2:1782
-4739:2:1787
-4740:2:1791
-4741:2:1792
-4742:2:1799
-4743:2:1800
-4744:2:1811
-4745:2:1812
-4746:2:1813
-4747:2:1811
-4748:2:1812
-4749:2:1813
-4750:2:1824
-4751:2:1829
-4752:2:1830
-4753:0:4365
-4754:2:1842
-4755:0:4365
-4756:3:3757
-4757:0:4365
-4758:2:1844
-4759:0:4365
-4760:3:3758
-4761:0:4365
-4762:2:1845
-4763:2:1849
-4764:2:1850
-4765:2:1858
-4766:2:1859
-4767:2:1863
-4768:2:1864
-4769:2:1858
-4770:2:1859
-4771:2:1863
-4772:2:1864
-4773:2:1872
-4774:2:1877
-4775:2:1881
-4776:2:1882
-4777:2:1889
-4778:2:1890
-4779:2:1901
-4780:2:1902
-4781:2:1903
-4782:2:1901
-4783:2:1902
-4784:2:1903
-4785:2:1914
-4786:2:1919
-4787:2:1920
-4788:0:4365
-4789:2:1932
-4790:0:4365
-4791:3:3757
-4792:0:4365
-4793:2:1934
-4794:0:4365
-4795:3:3758
-4796:0:4365
-4797:2:1935
-4798:0:4365
-4799:2:1936
-4800:0:4365
-4801:2:2129
-4802:0:4365
-4803:2:2130
-4804:0:4365
-4805:2:2134
-4806:0:4365
-4807:3:3757
-4808:0:4365
-4809:2:2136
-4810:0:4365
-4811:3:3758
-4812:0:4365
-4813:2:2137
-4814:2:2141
-4815:2:2142
-4816:2:2150
-4817:2:2151
-4818:2:2155
-4819:2:2156
-4820:2:2150
-4821:2:2151
-4822:2:2155
-4823:2:2156
-4824:2:2164
-4825:2:2169
-4826:2:2173
-4827:2:2174
-4828:2:2181
-4829:2:2182
-4830:2:2193
-4831:2:2194
-4832:2:2195
-4833:2:2193
-4834:2:2194
-4835:2:2195
-4836:2:2206
-4837:2:2211
-4838:2:2212
-4839:0:4365
-4840:2:2224
-4841:0:4365
-4842:3:3757
-4843:0:4365
-4844:2:2226
-4845:0:4365
-4846:3:3758
-4847:0:4365
-4848:2:2230
-4849:0:4365
-4850:3:3757
-4851:0:4365
-4852:2:2235
-4853:2:2239
-4854:2:2240
-4855:2:2248
-4856:2:2249
-4857:2:2253
-4858:2:2254
-4859:2:2248
-4860:2:2249
-4861:2:2250
-4862:2:2262
-4863:2:2267
-4864:2:2271
-4865:2:2272
-4866:2:2279
-4867:2:2280
-4868:2:2291
-4869:2:2292
-4870:2:2293
-4871:2:2291
-4872:2:2292
-4873:2:2293
-4874:2:2304
-4875:2:2309
-4876:2:2310
-4877:0:4365
-4878:3:3758
-4879:0:4365
-4880:2:2322
-4881:0:4365
-4882:2:1169
-4883:0:4365
-4884:3:3757
-4885:0:4365
-4886:2:1170
-4887:0:4365
-4888:3:3758
-4889:0:4365
-4890:3:3759
-4891:0:4365
-4892:3:3972
-4893:0:4365
-4894:3:4077
-4895:0:4365
-4896:3:4078
-4897:0:4365
-4898:3:4082
-4899:0:4365
-4900:3:4088
-4901:0:4365
-4902:3:4092
-4903:3:4093
-4904:3:4097
-4905:3:4101
-4906:3:4102
-4907:3:4097
-4908:3:4101
-4909:3:4102
-4910:3:4106
-4911:3:4114
-4912:3:4115
-4913:3:4120
-4914:3:4127
-4915:3:4128
-4916:3:4127
-4917:3:4128
-4918:3:4135
-4919:3:4140
-4920:0:4365
-4921:3:4151
-4922:0:4365
-4923:3:4155
-4924:3:4156
-4925:3:4160
-4926:3:4164
-4927:3:4165
-4928:3:4160
-4929:3:4164
-4930:3:4165
-4931:3:4169
-4932:3:4177
-4933:3:4178
-4934:3:4183
-4935:3:4190
-4936:3:4191
-4937:3:4190
-4938:3:4191
-4939:3:4198
-4940:3:4203
-4941:0:4365
-4942:3:4151
-4943:0:4365
-4944:3:4155
-4945:3:4156
-4946:3:4160
-4947:3:4164
-4948:3:4165
-4949:3:4160
-4950:3:4164
-4951:3:4165
-4952:3:4169
-4953:3:4177
-4954:3:4178
-4955:3:4183
-4956:3:4190
-4957:3:4191
-4958:3:4190
-4959:3:4191
-4960:3:4198
-4961:3:4203
-4962:0:4365
-4963:3:4214
-4964:0:4365
-4965:3:4222
-4966:3:4223
-4967:3:4227
-4968:3:4231
-4969:3:4232
-4970:3:4227
-4971:3:4231
-4972:3:4232
-4973:3:4236
-4974:3:4244
-4975:3:4245
-4976:3:4250
-4977:3:4257
-4978:3:4258
-4979:3:4257
-4980:3:4258
-4981:3:4265
-4982:3:4270
-4983:0:4365
-4984:3:4285
-4985:0:4365
-4986:3:4286
-4987:0:4365
-4988:2:1173
-4989:0:4365
-4990:3:4287
-4991:0:4365
-4992:2:1179
-4993:0:4365
-4994:2:1180
-4995:0:4365
-4996:3:4286
-4997:0:4365
-4998:2:1181
-4999:2:1185
-5000:2:1186
-5001:2:1194
-5002:2:1195
-5003:2:1199
-5004:2:1200
-5005:2:1194
-5006:2:1195
-5007:2:1199
-5008:2:1200
-5009:2:1208
-5010:2:1213
-5011:2:1217
-5012:2:1218
-5013:2:1225
-5014:2:1226
-5015:2:1237
-5016:2:1238
-5017:2:1239
-5018:2:1237
-5019:2:1238
-5020:2:1239
-5021:2:1250
-5022:2:1255
-5023:2:1256
-5024:0:4365
-5025:3:4287
-5026:0:4365
-5027:2:1268
-5028:0:4365
-5029:3:4286
-5030:0:4365
-5031:2:1270
-5032:0:4365
-5033:3:4287
-5034:0:4365
-5035:2:1271
-5036:2:1275
-5037:2:1276
-5038:2:1284
-5039:2:1285
-5040:2:1289
-5041:2:1290
-5042:2:1284
-5043:2:1285
-5044:2:1289
-5045:2:1290
-5046:2:1298
-5047:2:1303
-5048:2:1307
-5049:2:1308
-5050:2:1315
-5051:2:1316
-5052:2:1327
-5053:2:1328
-5054:2:1329
-5055:2:1327
-5056:2:1328
-5057:2:1329
-5058:2:1340
-5059:2:1345
-5060:2:1346
-5061:0:4365
-5062:2:1358
-5063:0:4365
-5064:2:1360
-5065:0:4365
-5066:3:4286
-5067:0:4365
-5068:2:1361
-5069:0:4365
-5070:3:4287
-5071:0:4365
-5072:2:1362
-5073:2:1366
-5074:2:1367
-5075:2:1375
-5076:2:1376
-5077:2:1380
-5078:2:1381
-5079:2:1375
-5080:2:1376
-5081:2:1380
-5082:2:1381
-5083:2:1389
-5084:2:1394
-5085:2:1398
-5086:2:1399
-5087:2:1406
-5088:2:1407
-5089:2:1418
-5090:2:1419
-5091:2:1420
-5092:2:1418
-5093:2:1419
-5094:2:1420
-5095:2:1431
-5096:2:1436
-5097:2:1437
-5098:0:4365
-5099:2:1449
-5100:0:4365
-5101:3:4286
-5102:0:4365
-5103:2:1451
-5104:0:4365
-5105:3:4287
-5106:0:4365
-5107:2:1652
-5108:0:4365
-5109:2:1653
-5110:0:4365
-5111:2:1657
-5112:0:4365
-5113:2:1660
-5114:0:4365
-5115:3:4286
-5116:0:4365
-5117:2:1665
-5118:2:1669
-5119:2:1670
-5120:2:1678
-5121:2:1679
-5122:2:1683
-5123:2:1684
-5124:2:1678
-5125:2:1679
-5126:2:1680
-5127:2:1692
-5128:2:1697
-5129:2:1701
-5130:2:1702
-5131:2:1709
-5132:2:1710
-5133:2:1721
-5134:2:1722
-5135:2:1723
-5136:2:1721
-5137:2:1722
-5138:2:1723
-5139:2:1734
-5140:2:1739
-5141:2:1740
-5142:0:4365
-5143:3:4287
-5144:0:4365
-5145:2:1752
-5146:0:4365
-5147:3:4286
-5148:0:4365
-5149:2:1754
-5150:0:4365
-5151:3:4287
-5152:0:4365
-5153:2:1755
-5154:2:1759
-5155:2:1760
-5156:2:1768
-5157:2:1769
-5158:2:1773
-5159:2:1774
-5160:2:1768
-5161:2:1769
-5162:2:1773
-5163:2:1774
-5164:2:1782
-5165:2:1787
-5166:2:1791
-5167:2:1792
-5168:2:1799
-5169:2:1800
-5170:2:1811
-5171:2:1812
-5172:2:1813
-5173:2:1811
-5174:2:1812
-5175:2:1813
-5176:2:1824
-5177:2:1829
-5178:2:1830
-5179:0:4365
-5180:2:1842
-5181:0:4365
-5182:3:4286
-5183:0:4365
-5184:2:1844
-5185:0:4365
-5186:3:4287
-5187:0:4365
-5188:2:1845
-5189:2:1849
-5190:2:1850
-5191:2:1858
-5192:2:1859
-5193:2:1863
-5194:2:1864
-5195:2:1858
-5196:2:1859
-5197:2:1863
-5198:2:1864
-5199:2:1872
-5200:2:1877
-5201:2:1881
-5202:2:1882
-5203:2:1889
-5204:2:1890
-5205:2:1901
-5206:2:1902
-5207:2:1903
-5208:2:1901
-5209:2:1902
-5210:2:1903
-5211:2:1914
-5212:2:1919
-5213:2:1920
-5214:0:4365
-5215:2:1932
-5216:0:4365
-5217:3:4286
-5218:0:4365
-5219:2:1934
-5220:0:4365
-5221:3:4287
-5222:0:4365
-5223:2:1935
-5224:0:4365
-5225:2:1936
-5226:0:4365
-5227:2:2129
-5228:0:4365
-5229:2:2130
-5230:0:4365
-5231:2:2134
-5232:0:4365
-5233:3:4286
-5234:0:4365
-5235:2:2136
-5236:0:4365
-5237:3:4287
-5238:0:4365
-5239:2:2137
-5240:2:2141
-5241:2:2142
-5242:2:2150
-5243:2:2151
-5244:2:2155
-5245:2:2156
-5246:2:2150
-5247:2:2151
-5248:2:2155
-5249:2:2156
-5250:2:2164
-5251:2:2169
-5252:2:2173
-5253:2:2174
-5254:2:2181
-5255:2:2182
-5256:2:2193
-5257:2:2194
-5258:2:2195
-5259:2:2193
-5260:2:2194
-5261:2:2195
-5262:2:2206
-5263:2:2211
-5264:2:2212
-5265:0:4365
-5266:2:2224
-5267:0:4365
-5268:3:4286
-5269:0:4365
-5270:2:2226
-5271:0:4365
-5272:3:4287
-5273:0:4365
-5274:2:2230
-5275:0:4365
-5276:3:4286
-5277:0:4365
-5278:2:2235
-5279:2:2239
-5280:2:2240
-5281:2:2248
-5282:2:2249
-5283:2:2253
-5284:2:2254
-5285:2:2248
-5286:2:2249
-5287:2:2250
-5288:2:2262
-5289:2:2267
-5290:2:2271
-5291:2:2272
-5292:2:2279
-5293:2:2280
-5294:2:2291
-5295:2:2292
-5296:2:2293
-5297:2:2291
-5298:2:2292
-5299:2:2293
-5300:2:2304
-5301:2:2309
-5302:2:2310
-5303:0:4365
-5304:3:4287
-5305:0:4365
-5306:2:2322
-5307:0:4365
-5308:2:1169
-5309:0:4365
-5310:3:4286
-5311:0:4365
-5312:2:1170
-5313:0:4365
-5314:3:4287
-5315:0:4365
-5316:3:4288
-5317:0:4365
-5318:3:4294
-5319:0:4365
-5320:3:4295
-5321:0:4365
-5322:3:2338
-5323:0:4365
-5324:3:2339
-5325:3:2343
-5326:3:2344
-5327:3:2352
-5328:3:2353
-5329:3:2357
-5330:3:2358
-5331:3:2352
-5332:3:2353
-5333:3:2357
-5334:3:2358
-5335:3:2366
-5336:3:2371
-5337:3:2375
-5338:3:2376
-5339:3:2383
-5340:3:2384
-5341:3:2395
-5342:3:2396
-5343:3:2397
-5344:3:2395
-5345:3:2396
-5346:3:2397
-5347:3:2408
-5348:3:2413
-5349:3:2414
-5350:0:4365
-5351:3:2426
-5352:0:4365
-5353:3:2427
-5354:0:4365
-5355:2:1173
-5356:0:4365
-5357:3:2428
-5358:0:4365
-5359:2:1179
-5360:0:4365
-5361:2:1180
-5362:0:4365
-5363:3:2427
-5364:0:4365
-5365:2:1181
-5366:2:1185
-5367:2:1186
-5368:2:1194
-5369:2:1195
-5370:2:1199
-5371:2:1200
-5372:2:1194
-5373:2:1195
-5374:2:1199
-5375:2:1200
-5376:2:1208
-5377:2:1213
-5378:2:1217
-5379:2:1218
-5380:2:1225
-5381:2:1226
-5382:2:1237
-5383:2:1238
-5384:2:1239
-5385:2:1237
-5386:2:1238
-5387:2:1239
-5388:2:1250
-5389:2:1255
-5390:2:1256
-5391:0:4365
-5392:3:2428
-5393:0:4365
-5394:2:1268
-5395:0:4365
-5396:3:2427
-5397:0:4365
-5398:2:1270
-5399:0:4365
-5400:3:2428
-5401:0:4365
-5402:2:1271
-5403:2:1275
-5404:2:1276
-5405:2:1284
-5406:2:1285
-5407:2:1289
-5408:2:1290
-5409:2:1284
-5410:2:1285
-5411:2:1289
-5412:2:1290
-5413:2:1298
-5414:2:1303
-5415:2:1307
-5416:2:1308
-5417:2:1315
-5418:2:1316
-5419:2:1327
-5420:2:1328
-5421:2:1329
-5422:2:1327
-5423:2:1328
-5424:2:1329
-5425:2:1340
-5426:2:1345
-5427:2:1346
-5428:0:4365
-5429:2:1358
-5430:0:4365
-5431:2:1360
-5432:0:4365
-5433:3:2427
-5434:0:4365
-5435:2:1361
-5436:0:4365
-5437:3:2428
-5438:0:4365
-5439:2:1362
-5440:2:1366
-5441:2:1367
-5442:2:1375
-5443:2:1376
-5444:2:1380
-5445:2:1381
-5446:2:1375
-5447:2:1376
-5448:2:1380
-5449:2:1381
-5450:2:1389
-5451:2:1394
-5452:2:1398
-5453:2:1399
-5454:2:1406
-5455:2:1407
-5456:2:1418
-5457:2:1419
-5458:2:1420
-5459:2:1418
-5460:2:1419
-5461:2:1420
-5462:2:1431
-5463:2:1436
-5464:2:1437
-5465:0:4365
-5466:2:1449
-5467:0:4365
-5468:3:2427
-5469:0:4365
-5470:2:1451
-5471:0:4365
-5472:3:2428
-5473:0:4365
-5474:2:1652
-5475:0:4365
-5476:2:1653
-5477:0:4365
-5478:2:1657
-5479:0:4365
-5480:2:1660
-5481:0:4365
-5482:3:2427
-5483:0:4365
-5484:2:1665
-5485:2:1669
-5486:2:1670
-5487:2:1678
-5488:2:1679
-5489:2:1683
-5490:2:1684
-5491:2:1678
-5492:2:1679
-5493:2:1680
-5494:2:1692
-5495:2:1697
-5496:2:1701
-5497:2:1702
-5498:2:1709
-5499:2:1710
-5500:2:1721
-5501:2:1722
-5502:2:1723
-5503:2:1721
-5504:2:1722
-5505:2:1723
-5506:2:1734
-5507:2:1739
-5508:2:1740
-5509:0:4365
-5510:3:2428
-5511:0:4365
-5512:2:1752
-5513:0:4365
-5514:3:2427
-5515:0:4365
-5516:2:1754
-5517:0:4365
-5518:3:2428
-5519:0:4365
-5520:2:1755
-5521:2:1759
-5522:2:1760
-5523:2:1768
-5524:2:1769
-5525:2:1773
-5526:2:1774
-5527:2:1768
-5528:2:1769
-5529:2:1773
-5530:2:1774
-5531:2:1782
-5532:2:1787
-5533:2:1791
-5534:2:1792
-5535:2:1799
-5536:2:1800
-5537:2:1811
-5538:2:1812
-5539:2:1813
-5540:2:1811
-5541:2:1812
-5542:2:1813
-5543:2:1824
-5544:2:1829
-5545:2:1830
-5546:0:4365
-5547:2:1842
-5548:0:4365
-5549:3:2427
-5550:0:4365
-5551:2:1844
-5552:0:4365
-5553:3:2428
-5554:0:4365
-5555:2:1845
-5556:2:1849
-5557:2:1850
-5558:2:1858
-5559:2:1859
-5560:2:1863
-5561:2:1864
-5562:2:1858
-5563:2:1859
-5564:2:1863
-5565:2:1864
-5566:2:1872
-5567:2:1877
-5568:2:1881
-5569:2:1882
-5570:2:1889
-5571:2:1890
-5572:2:1901
-5573:2:1902
-5574:2:1903
-5575:2:1901
-5576:2:1902
-5577:2:1903
-5578:2:1914
-5579:2:1919
-5580:2:1920
-5581:0:4365
-5582:2:1932
-5583:0:4365
-5584:3:2427
-5585:0:4365
-5586:2:1934
-5587:0:4365
-5588:3:2428
-5589:0:4365
-5590:2:1935
-5591:0:4365
-5592:2:1936
-5593:0:4365
-5594:2:2129
-5595:0:4365
-5596:2:2130
-5597:0:4365
-5598:2:2134
-5599:0:4365
-5600:3:2427
-5601:0:4365
-5602:2:2136
-5603:0:4365
-5604:3:2428
-5605:0:4365
-5606:2:2137
-5607:2:2141
-5608:2:2142
-5609:2:2150
-5610:2:2151
-5611:2:2155
-5612:2:2156
-5613:2:2150
-5614:2:2151
-5615:2:2155
-5616:2:2156
-5617:2:2164
-5618:2:2169
-5619:2:2173
-5620:2:2174
-5621:2:2181
-5622:2:2182
-5623:2:2193
-5624:2:2194
-5625:2:2195
-5626:2:2193
-5627:2:2194
-5628:2:2195
-5629:2:2206
-5630:2:2211
-5631:2:2212
-5632:0:4365
-5633:2:2224
-5634:0:4365
-5635:3:2427
-5636:0:4365
-5637:2:2226
-5638:0:4365
-5639:3:2428
-5640:0:4365
-5641:2:2230
-5642:0:4365
-5643:3:2427
-5644:0:4365
-5645:2:2235
-5646:2:2239
-5647:2:2240
-5648:2:2248
-5649:2:2249
-5650:2:2253
-5651:2:2254
-5652:2:2248
-5653:2:2249
-5654:2:2250
-5655:2:2262
-5656:2:2267
-5657:2:2271
-5658:2:2272
-5659:2:2279
-5660:2:2280
-5661:2:2291
-5662:2:2292
-5663:2:2293
-5664:2:2291
-5665:2:2292
-5666:2:2293
-5667:2:2304
-5668:2:2309
-5669:2:2310
-5670:0:4365
-5671:3:2428
-5672:0:4365
-5673:2:2322
-5674:0:4365
-5675:2:1169
-5676:0:4365
-5677:3:2427
-5678:0:4365
-5679:2:1170
-5680:0:4365
-5681:3:2428
-5682:0:4365
-5683:3:2429
-5684:0:4365
-5685:3:2435
-5686:3:2436
-5687:0:4365
-5688:3:2440
-5689:3:2444
-5690:3:2445
-5691:3:2453
-5692:3:2454
-5693:3:2458
-5694:3:2459
-5695:3:2453
-5696:3:2454
-5697:3:2458
-5698:3:2459
-5699:3:2467
-5700:3:2472
-5701:3:2473
-5702:3:2484
-5703:3:2485
-5704:3:2496
-5705:3:2497
-5706:3:2498
-5707:3:2496
-5708:3:2497
-5709:3:2498
-5710:3:2509
-5711:3:2514
-5712:3:2515
-5713:0:4365
-5714:3:2527
-5715:0:4365
-5716:3:2528
-5717:0:4365
-5718:2:1173
-5719:0:4365
-5720:3:2529
-5721:0:4365
-5722:2:1179
-5723:0:4365
-5724:2:1180
-5725:0:4365
-5726:3:2528
-5727:0:4365
-5728:2:1181
-5729:2:1185
-5730:2:1186
-5731:2:1194
-5732:2:1195
-5733:2:1199
-5734:2:1200
-5735:2:1194
-5736:2:1195
-5737:2:1199
-5738:2:1200
-5739:2:1208
-5740:2:1213
-5741:2:1217
-5742:2:1218
-5743:2:1225
-5744:2:1226
-5745:2:1237
-5746:2:1238
-5747:2:1239
-5748:2:1237
-5749:2:1238
-5750:2:1239
-5751:2:1250
-5752:2:1255
-5753:2:1256
-5754:0:4365
-5755:3:2529
-5756:0:4365
-5757:2:1268
-5758:0:4365
-5759:3:2528
-5760:0:4365
-5761:2:1270
-5762:0:4365
-5763:3:2529
-5764:0:4365
-5765:2:1271
-5766:2:1275
-5767:2:1276
-5768:2:1284
-5769:2:1285
-5770:2:1289
-5771:2:1290
-5772:2:1284
-5773:2:1285
-5774:2:1289
-5775:2:1290
-5776:2:1298
-5777:2:1303
-5778:2:1307
-5779:2:1308
-5780:2:1315
-5781:2:1316
-5782:2:1327
-5783:2:1328
-5784:2:1329
-5785:2:1327
-5786:2:1328
-5787:2:1329
-5788:2:1340
-5789:2:1345
-5790:2:1346
-5791:0:4365
-5792:2:1358
-5793:0:4365
-5794:2:1360
-5795:0:4365
-5796:3:2528
-5797:0:4365
-5798:2:1361
-5799:0:4365
-5800:3:2529
-5801:0:4365
-5802:2:1362
-5803:2:1366
-5804:2:1367
-5805:2:1375
-5806:2:1376
-5807:2:1380
-5808:2:1381
-5809:2:1375
-5810:2:1376
-5811:2:1380
-5812:2:1381
-5813:2:1389
-5814:2:1394
-5815:2:1398
-5816:2:1399
-5817:2:1406
-5818:2:1407
-5819:2:1418
-5820:2:1419
-5821:2:1420
-5822:2:1418
-5823:2:1419
-5824:2:1420
-5825:2:1431
-5826:2:1436
-5827:2:1437
-5828:0:4365
-5829:2:1449
-5830:0:4365
-5831:3:2528
-5832:0:4365
-5833:2:1451
-5834:0:4365
-5835:3:2529
-5836:0:4365
-5837:2:1652
-5838:0:4365
-5839:2:1653
-5840:0:4365
-5841:2:1657
-5842:0:4365
-5843:2:1660
-5844:0:4365
-5845:3:2528
-5846:0:4365
-5847:2:1665
-5848:2:1669
-5849:2:1670
-5850:2:1678
-5851:2:1679
-5852:2:1683
-5853:2:1684
-5854:2:1678
-5855:2:1679
-5856:2:1680
-5857:2:1692
-5858:2:1697
-5859:2:1701
-5860:2:1702
-5861:2:1709
-5862:2:1710
-5863:2:1721
-5864:2:1722
-5865:2:1723
-5866:2:1721
-5867:2:1722
-5868:2:1723
-5869:2:1734
-5870:2:1739
-5871:2:1740
-5872:0:4365
-5873:3:2529
-5874:0:4365
-5875:2:1752
-5876:0:4365
-5877:3:2528
-5878:0:4365
-5879:2:1754
-5880:0:4365
-5881:3:2529
-5882:0:4365
-5883:2:1755
-5884:2:1759
-5885:2:1760
-5886:2:1768
-5887:2:1769
-5888:2:1773
-5889:2:1774
-5890:2:1768
-5891:2:1769
-5892:2:1773
-5893:2:1774
-5894:2:1782
-5895:2:1787
-5896:2:1791
-5897:2:1792
-5898:2:1799
-5899:2:1800
-5900:2:1811
-5901:2:1812
-5902:2:1813
-5903:2:1811
-5904:2:1812
-5905:2:1813
-5906:2:1824
-5907:2:1829
-5908:2:1830
-5909:0:4365
-5910:2:1842
-5911:0:4365
-5912:3:2528
-5913:0:4365
-5914:2:1844
-5915:0:4365
-5916:3:2529
-5917:0:4365
-5918:2:1845
-5919:2:1849
-5920:2:1850
-5921:2:1858
-5922:2:1859
-5923:2:1863
-5924:2:1864
-5925:2:1858
-5926:2:1859
-5927:2:1863
-5928:2:1864
-5929:2:1872
-5930:2:1877
-5931:2:1881
-5932:2:1882
-5933:2:1889
-5934:2:1890
-5935:2:1901
-5936:2:1902
-5937:2:1903
-5938:2:1901
-5939:2:1902
-5940:2:1903
-5941:2:1914
-5942:2:1919
-5943:2:1920
-5944:0:4365
-5945:2:1932
-5946:0:4365
-5947:3:2528
-5948:0:4365
-5949:2:1934
-5950:0:4365
-5951:3:2529
-5952:0:4365
-5953:2:1935
-5954:0:4365
-5955:2:1936
-5956:0:4365
-5957:2:2129
-5958:0:4365
-5959:2:2130
-5960:0:4365
-5961:2:2134
-5962:0:4365
-5963:3:2528
-5964:0:4365
-5965:2:2136
-5966:0:4365
-5967:3:2529
-5968:0:4365
-5969:2:2137
-5970:2:2141
-5971:2:2142
-5972:2:2150
-5973:2:2151
-5974:2:2155
-5975:2:2156
-5976:2:2150
-5977:2:2151
-5978:2:2155
-5979:2:2156
-5980:2:2164
-5981:2:2169
-5982:2:2173
-5983:2:2174
-5984:2:2181
-5985:2:2182
-5986:2:2193
-5987:2:2194
-5988:2:2195
-5989:2:2193
-5990:2:2194
-5991:2:2195
-5992:2:2206
-5993:2:2211
-5994:2:2212
-5995:0:4365
-5996:2:2224
-5997:0:4365
-5998:3:2528
-5999:0:4365
-6000:2:2226
-6001:0:4365
-6002:3:2529
-6003:0:4365
-6004:2:2230
-6005:0:4365
-6006:3:2528
-6007:0:4365
-6008:2:2235
-6009:2:2239
-6010:2:2240
-6011:2:2248
-6012:2:2249
-6013:2:2253
-6014:2:2254
-6015:2:2248
-6016:2:2249
-6017:2:2250
-6018:2:2262
-6019:2:2267
-6020:2:2271
-6021:2:2272
-6022:2:2279
-6023:2:2280
-6024:2:2291
-6025:2:2292
-6026:2:2293
-6027:2:2291
-6028:2:2292
-6029:2:2293
-6030:2:2304
-6031:2:2309
-6032:2:2310
-6033:0:4365
-6034:3:2529
-6035:0:4365
-6036:2:2322
-6037:0:4365
-6038:2:1169
-6039:0:4365
-6040:3:2528
-6041:0:4365
-6042:2:1170
-6043:0:4365
-6044:3:2529
-6045:0:4365
-6046:3:2530
-6047:0:4365
-6048:3:2536
-6049:0:4365
-6050:3:2537
-6051:0:4365
-6052:3:2547
-6053:0:4365
-6054:3:2548
-6055:0:4365
-6056:3:2552
-6057:3:2553
-6058:3:2557
-6059:3:2561
-6060:3:2562
-6061:3:2557
-6062:3:2561
-6063:3:2562
-6064:3:2566
-6065:3:2574
-6066:3:2575
-6067:3:2580
-6068:3:2587
-6069:3:2588
-6070:3:2587
-6071:3:2588
-6072:3:2595
-6073:3:2600
-6074:0:4365
-6075:3:2611
-6076:0:4365
-6077:3:2615
-6078:3:2616
-6079:3:2620
-6080:3:2624
-6081:3:2625
-6082:3:2620
-6083:3:2624
-6084:3:2625
-6085:3:2629
-6086:3:2637
-6087:3:2638
-6088:3:2643
-6089:3:2650
-6090:3:2651
-6091:3:2650
-6092:3:2651
-6093:3:2658
-6094:3:2663
-6095:0:4365
-6096:3:2611
-6097:0:4365
-6098:3:2615
-6099:3:2616
-6100:3:2620
-6101:3:2624
-6102:3:2625
-6103:3:2620
-6104:3:2624
-6105:3:2625
-6106:3:2629
-6107:3:2637
-6108:3:2638
-6109:3:2643
-6110:3:2650
-6111:3:2651
-6112:3:2650
-6113:3:2651
-6114:3:2658
-6115:3:2663
-6116:0:4365
-6117:3:2674
-6118:0:4365
-6119:3:2682
-6120:3:2683
-6121:3:2687
-6122:3:2691
-6123:3:2692
-6124:3:2687
-6125:3:2691
-6126:3:2692
-6127:3:2696
-6128:3:2704
-6129:3:2705
-6130:3:2710
-6131:3:2717
-6132:3:2718
-6133:3:2717
-6134:3:2718
-6135:3:2725
-6136:3:2730
-6137:0:4365
-6138:3:2745
-6139:0:4365
-6140:3:2746
-6141:0:4365
-6142:2:1173
-6143:0:4365
-6144:3:2747
-6145:0:4365
-6146:2:1179
-6147:0:4365
-6148:2:1180
-6149:0:4365
-6150:3:2746
-6151:0:4365
-6152:2:1181
-6153:2:1185
-6154:2:1186
-6155:2:1194
-6156:2:1195
-6157:2:1199
-6158:2:1200
-6159:2:1194
-6160:2:1195
-6161:2:1199
-6162:2:1200
-6163:2:1208
-6164:2:1213
-6165:2:1217
-6166:2:1218
-6167:2:1225
-6168:2:1226
-6169:2:1237
-6170:2:1238
-6171:2:1239
-6172:2:1237
-6173:2:1238
-6174:2:1239
-6175:2:1250
-6176:2:1255
-6177:2:1256
-6178:0:4365
-6179:3:2747
-6180:0:4365
-6181:2:1268
-6182:0:4365
-6183:3:2746
-6184:0:4365
-6185:2:1270
-6186:0:4365
-6187:3:2747
-6188:0:4365
-6189:2:1271
-6190:2:1275
-6191:2:1276
-6192:2:1284
-6193:2:1285
-6194:2:1289
-6195:2:1290
-6196:2:1284
-6197:2:1285
-6198:2:1289
-6199:2:1290
-6200:2:1298
-6201:2:1303
-6202:2:1307
-6203:2:1308
-6204:2:1315
-6205:2:1316
-6206:2:1327
-6207:2:1328
-6208:2:1329
-6209:2:1327
-6210:2:1328
-6211:2:1329
-6212:2:1340
-6213:2:1345
-6214:2:1346
-6215:0:4365
-6216:2:1358
-6217:0:4365
-6218:2:1360
-6219:0:4365
-6220:3:2746
-6221:0:4365
-6222:2:1361
-6223:0:4365
-6224:3:2747
-6225:0:4365
-6226:2:1362
-6227:2:1366
-6228:2:1367
-6229:2:1375
-6230:2:1376
-6231:2:1380
-6232:2:1381
-6233:2:1375
-6234:2:1376
-6235:2:1380
-6236:2:1381
-6237:2:1389
-6238:2:1394
-6239:2:1398
-6240:2:1399
-6241:2:1406
-6242:2:1407
-6243:2:1418
-6244:2:1419
-6245:2:1420
-6246:2:1418
-6247:2:1419
-6248:2:1420
-6249:2:1431
-6250:2:1436
-6251:2:1437
-6252:0:4365
-6253:2:1449
-6254:0:4365
-6255:3:2746
-6256:0:4365
-6257:2:1451
-6258:0:4365
-6259:3:2747
-6260:0:4365
-6261:2:1652
-6262:0:4365
-6263:2:1653
-6264:0:4365
-6265:2:1657
-6266:0:4365
-6267:2:1660
-6268:0:4365
-6269:3:2746
-6270:0:4365
-6271:2:1665
-6272:2:1669
-6273:2:1670
-6274:2:1678
-6275:2:1679
-6276:2:1683
-6277:2:1684
-6278:2:1678
-6279:2:1679
-6280:2:1680
-6281:2:1692
-6282:2:1697
-6283:2:1701
-6284:2:1702
-6285:2:1709
-6286:2:1710
-6287:2:1721
-6288:2:1722
-6289:2:1723
-6290:2:1721
-6291:2:1722
-6292:2:1723
-6293:2:1734
-6294:2:1739
-6295:2:1740
-6296:0:4365
-6297:3:2747
-6298:0:4365
-6299:2:1752
-6300:0:4365
-6301:3:2746
-6302:0:4365
-6303:2:1754
-6304:0:4365
-6305:3:2747
-6306:0:4365
-6307:2:1755
-6308:2:1759
-6309:2:1760
-6310:2:1768
-6311:2:1769
-6312:2:1773
-6313:2:1774
-6314:2:1768
-6315:2:1769
-6316:2:1773
-6317:2:1774
-6318:2:1782
-6319:2:1787
-6320:2:1791
-6321:2:1792
-6322:2:1799
-6323:2:1800
-6324:2:1811
-6325:2:1812
-6326:2:1813
-6327:2:1811
-6328:2:1812
-6329:2:1813
-6330:2:1824
-6331:2:1829
-6332:2:1830
-6333:0:4365
-6334:2:1842
-6335:0:4365
-6336:3:2746
-6337:0:4365
-6338:2:1844
-6339:0:4365
-6340:3:2747
-6341:0:4365
-6342:2:1845
-6343:2:1849
-6344:2:1850
-6345:2:1858
-6346:2:1859
-6347:2:1863
-6348:2:1864
-6349:2:1858
-6350:2:1859
-6351:2:1863
-6352:2:1864
-6353:2:1872
-6354:2:1877
-6355:2:1881
-6356:2:1882
-6357:2:1889
-6358:2:1890
-6359:2:1901
-6360:2:1902
-6361:2:1903
-6362:2:1901
-6363:2:1902
-6364:2:1903
-6365:2:1914
-6366:2:1919
-6367:2:1920
-6368:0:4365
-6369:2:1932
-6370:0:4365
-6371:3:2746
-6372:0:4365
-6373:2:1934
-6374:0:4365
-6375:3:2747
-6376:0:4365
-6377:2:1935
-6378:0:4365
-6379:2:1936
-6380:0:4365
-6381:2:2129
-6382:0:4365
-6383:2:2130
-6384:0:4365
-6385:2:2134
-6386:0:4365
-6387:3:2746
-6388:0:4365
-6389:2:2136
-6390:0:4365
-6391:3:2747
-6392:0:4365
-6393:2:2137
-6394:2:2141
-6395:2:2142
-6396:2:2150
-6397:2:2151
-6398:2:2155
-6399:2:2156
-6400:2:2150
-6401:2:2151
-6402:2:2155
-6403:2:2156
-6404:2:2164
-6405:2:2169
-6406:2:2173
-6407:2:2174
-6408:2:2181
-6409:2:2182
-6410:2:2193
-6411:2:2194
-6412:2:2195
-6413:2:2193
-6414:2:2194
-6415:2:2195
-6416:2:2206
-6417:2:2211
-6418:2:2212
-6419:0:4365
-6420:2:2224
-6421:0:4365
-6422:3:2746
-6423:0:4365
-6424:2:2226
-6425:0:4365
-6426:3:2747
-6427:0:4365
-6428:2:2230
-6429:0:4365
-6430:3:2746
-6431:0:4365
-6432:2:2235
-6433:2:2239
-6434:2:2240
-6435:2:2248
-6436:2:2249
-6437:2:2253
-6438:2:2254
-6439:2:2248
-6440:2:2249
-6441:2:2250
-6442:2:2262
-6443:2:2267
-6444:2:2271
-6445:2:2272
-6446:2:2279
-6447:2:2280
-6448:2:2291
-6449:2:2292
-6450:2:2293
-6451:2:2291
-6452:2:2292
-6453:2:2293
-6454:2:2304
-6455:2:2309
-6456:2:2310
-6457:0:4365
-6458:3:2747
-6459:0:4365
-6460:2:2322
-6461:0:4365
-6462:2:1169
-6463:0:4365
-6464:3:2746
-6465:0:4365
-6466:2:1170
-6467:0:4365
-6468:3:2747
-6469:0:4365
-6470:3:2748
-6471:0:4365
-6472:3:2754
-6473:0:4365
-6474:3:2755
-6475:3:2759
-6476:3:2760
-6477:3:2768
-6478:3:2769
-6479:3:2773
-6480:3:2774
-6481:3:2768
-6482:3:2769
-6483:3:2773
-6484:3:2774
-6485:3:2782
-6486:3:2787
-6487:3:2791
-6488:3:2792
-6489:3:2799
-6490:3:2800
-6491:3:2811
-6492:3:2812
-6493:3:2813
-6494:3:2811
-6495:3:2812
-6496:3:2813
-6497:3:2824
-6498:3:2829
-6499:3:2830
-6500:0:4365
-6501:3:2842
-6502:0:4365
-6503:3:2843
-6504:0:4365
-6505:2:1173
-6506:0:4365
-6507:3:2844
-6508:0:4365
-6509:2:1179
-6510:0:4365
-6511:2:1180
-6512:0:4365
-6513:3:2843
-6514:0:4365
-6515:2:1181
-6516:2:1185
-6517:2:1186
-6518:2:1194
-6519:2:1195
-6520:2:1199
-6521:2:1200
-6522:2:1194
-6523:2:1195
-6524:2:1199
-6525:2:1200
-6526:2:1208
-6527:2:1213
-6528:2:1217
-6529:2:1218
-6530:2:1225
-6531:2:1226
-6532:2:1237
-6533:2:1238
-6534:2:1239
-6535:2:1237
-6536:2:1238
-6537:2:1239
-6538:2:1250
-6539:2:1255
-6540:2:1256
-6541:0:4365
-6542:3:2844
-6543:0:4365
-6544:2:1268
-6545:0:4365
-6546:3:2843
-6547:0:4365
-6548:2:1270
-6549:0:4365
-6550:3:2844
-6551:0:4365
-6552:2:1271
-6553:2:1275
-6554:2:1276
-6555:2:1284
-6556:2:1285
-6557:2:1289
-6558:2:1290
-6559:2:1284
-6560:2:1285
-6561:2:1289
-6562:2:1290
-6563:2:1298
-6564:2:1303
-6565:2:1307
-6566:2:1308
-6567:2:1315
-6568:2:1316
-6569:2:1327
-6570:2:1328
-6571:2:1329
-6572:2:1327
-6573:2:1328
-6574:2:1329
-6575:2:1340
-6576:2:1345
-6577:2:1346
-6578:0:4365
-6579:2:1358
-6580:0:4365
-6581:2:1360
-6582:0:4365
-6583:3:2843
-6584:0:4365
-6585:2:1361
-6586:0:4365
-6587:3:2844
-6588:0:4365
-6589:2:1362
-6590:2:1366
-6591:2:1367
-6592:2:1375
-6593:2:1376
-6594:2:1380
-6595:2:1381
-6596:2:1375
-6597:2:1376
-6598:2:1380
-6599:2:1381
-6600:2:1389
-6601:2:1394
-6602:2:1398
-6603:2:1399
-6604:2:1406
-6605:2:1407
-6606:2:1418
-6607:2:1419
-6608:2:1420
-6609:2:1418
-6610:2:1419
-6611:2:1420
-6612:2:1431
-6613:2:1436
-6614:2:1437
-6615:0:4365
-6616:2:1449
-6617:0:4365
-6618:3:2843
-6619:0:4365
-6620:2:1451
-6621:0:4365
-6622:3:2844
-6623:0:4365
-6624:2:1652
-6625:0:4365
-6626:2:1653
-6627:0:4365
-6628:2:1657
-6629:0:4365
-6630:2:1660
-6631:0:4365
-6632:3:2843
-6633:0:4365
-6634:2:1665
-6635:2:1669
-6636:2:1670
-6637:2:1678
-6638:2:1679
-6639:2:1683
-6640:2:1684
-6641:2:1678
-6642:2:1679
-6643:2:1680
-6644:2:1692
-6645:2:1697
-6646:2:1701
-6647:2:1702
-6648:2:1709
-6649:2:1710
-6650:2:1721
-6651:2:1722
-6652:2:1723
-6653:2:1721
-6654:2:1722
-6655:2:1723
-6656:2:1734
-6657:2:1739
-6658:2:1740
-6659:0:4365
-6660:3:2844
-6661:0:4365
-6662:2:1752
-6663:0:4365
-6664:3:2843
-6665:0:4365
-6666:2:1754
-6667:0:4365
-6668:3:2844
-6669:0:4365
-6670:2:1755
-6671:2:1759
-6672:2:1760
-6673:2:1768
-6674:2:1769
-6675:2:1773
-6676:2:1774
-6677:2:1768
-6678:2:1769
-6679:2:1773
-6680:2:1774
-6681:2:1782
-6682:2:1787
-6683:2:1791
-6684:2:1792
-6685:2:1799
-6686:2:1800
-6687:2:1811
-6688:2:1812
-6689:2:1813
-6690:2:1811
-6691:2:1812
-6692:2:1813
-6693:2:1824
-6694:2:1829
-6695:2:1830
-6696:0:4365
-6697:2:1842
-6698:0:4365
-6699:3:2843
-6700:0:4365
-6701:2:1844
-6702:0:4365
-6703:3:2844
-6704:0:4365
-6705:2:1845
-6706:2:1849
-6707:2:1850
-6708:2:1858
-6709:2:1859
-6710:2:1863
-6711:2:1864
-6712:2:1858
-6713:2:1859
-6714:2:1863
-6715:2:1864
-6716:2:1872
-6717:2:1877
-6718:2:1881
-6719:2:1882
-6720:2:1889
-6721:2:1890
-6722:2:1901
-6723:2:1902
-6724:2:1903
-6725:2:1901
-6726:2:1902
-6727:2:1903
-6728:2:1914
-6729:2:1919
-6730:2:1920
-6731:0:4365
-6732:2:1932
-6733:0:4365
-6734:3:2843
-6735:0:4365
-6736:2:1934
-6737:0:4365
-6738:3:2844
-6739:0:4365
-6740:2:1935
-6741:0:4365
-6742:2:1936
-6743:0:4365
-6744:2:2129
-6745:0:4365
-6746:2:2130
-6747:0:4365
-6748:2:2134
-6749:0:4365
-6750:3:2843
-6751:0:4365
-6752:2:2136
-6753:0:4365
-6754:3:2844
-6755:0:4365
-6756:2:2137
-6757:2:2141
-6758:2:2142
-6759:2:2150
-6760:2:2151
-6761:2:2155
-6762:2:2156
-6763:2:2150
-6764:2:2151
-6765:2:2155
-6766:2:2156
-6767:2:2164
-6768:2:2169
-6769:2:2173
-6770:2:2174
-6771:2:2181
-6772:2:2182
-6773:2:2193
-6774:2:2194
-6775:2:2195
-6776:2:2193
-6777:2:2194
-6778:2:2195
-6779:2:2206
-6780:2:2211
-6781:2:2212
-6782:0:4365
-6783:2:2224
-6784:0:4365
-6785:3:2843
-6786:0:4365
-6787:2:2226
-6788:0:4365
-6789:3:2844
-6790:0:4365
-6791:2:2230
-6792:0:4365
-6793:3:2843
-6794:0:4365
-6795:2:2235
-6796:2:2239
-6797:2:2240
-6798:2:2248
-6799:2:2249
-6800:2:2253
-6801:2:2254
-6802:2:2248
-6803:2:2249
-6804:2:2250
-6805:2:2262
-6806:2:2267
-6807:2:2271
-6808:2:2272
-6809:2:2279
-6810:2:2280
-6811:2:2291
-6812:2:2292
-6813:2:2293
-6814:2:2291
-6815:2:2292
-6816:2:2293
-6817:2:2304
-6818:2:2309
-6819:2:2310
-6820:0:4365
-6821:3:2844
-6822:0:4365
-6823:2:2322
-6824:0:4365
-6825:2:1169
-6826:0:4365
-6827:3:2843
-6828:0:4365
-6829:2:1170
-6830:0:4365
-6831:3:2844
-6832:0:4365
-6833:3:2845
-6834:0:4365
-6835:3:2851
-6836:0:4365
-6837:3:2854
-6838:3:2855
-6839:3:2867
-6840:3:2868
-6841:3:2872
-6842:3:2873
-6843:3:2867
-6844:3:2868
-6845:3:2872
-6846:3:2873
-6847:3:2881
-6848:3:2886
-6849:3:2890
-6850:3:2891
-6851:3:2898
-6852:3:2899
-6853:3:2910
-6854:3:2911
-6855:3:2912
-6856:3:2910
-6857:3:2911
-6858:3:2912
-6859:3:2923
-6860:3:2928
-6861:3:2929
-6862:0:4365
-6863:3:2941
-6864:0:4365
-6865:3:2942
-6866:0:4365
-6867:2:1173
-6868:0:4365
-6869:3:2943
-6870:0:4365
-6871:2:1179
-6872:0:4365
-6873:2:1180
-6874:0:4365
-6875:3:2942
-6876:0:4365
-6877:2:1181
-6878:2:1185
-6879:2:1186
-6880:2:1194
-6881:2:1195
-6882:2:1199
-6883:2:1200
-6884:2:1194
-6885:2:1195
-6886:2:1199
-6887:2:1200
-6888:2:1208
-6889:2:1213
-6890:2:1217
-6891:2:1218
-6892:2:1225
-6893:2:1226
-6894:2:1237
-6895:2:1238
-6896:2:1239
-6897:2:1237
-6898:2:1238
-6899:2:1239
-6900:2:1250
-6901:2:1255
-6902:2:1256
-6903:0:4365
-6904:3:2943
-6905:0:4365
-6906:2:1268
-6907:0:4365
-6908:3:2942
-6909:0:4365
-6910:2:1270
-6911:0:4365
-6912:3:2943
-6913:0:4365
-6914:2:1271
-6915:2:1275
-6916:2:1276
-6917:2:1284
-6918:2:1285
-6919:2:1289
-6920:2:1290
-6921:2:1284
-6922:2:1285
-6923:2:1289
-6924:2:1290
-6925:2:1298
-6926:2:1303
-6927:2:1307
-6928:2:1308
-6929:2:1315
-6930:2:1316
-6931:2:1327
-6932:2:1328
-6933:2:1329
-6934:2:1327
-6935:2:1328
-6936:2:1329
-6937:2:1340
-6938:2:1345
-6939:2:1346
-6940:0:4365
-6941:2:1358
-6942:0:4365
-6943:2:1360
-6944:0:4365
-6945:3:2942
-6946:0:4365
-6947:2:1361
-6948:0:4365
-6949:3:2943
-6950:0:4365
-6951:2:1362
-6952:2:1366
-6953:2:1367
-6954:2:1375
-6955:2:1376
-6956:2:1380
-6957:2:1381
-6958:2:1375
-6959:2:1376
-6960:2:1380
-6961:2:1381
-6962:2:1389
-6963:2:1394
-6964:2:1398
-6965:2:1399
-6966:2:1406
-6967:2:1407
-6968:2:1418
-6969:2:1419
-6970:2:1420
-6971:2:1418
-6972:2:1419
-6973:2:1420
-6974:2:1431
-6975:2:1436
-6976:2:1437
-6977:0:4365
-6978:2:1449
-6979:0:4365
-6980:3:2942
-6981:0:4365
-6982:2:1451
-6983:0:4365
-6984:3:2943
-6985:0:4365
-6986:2:1652
-6987:0:4365
-6988:2:1653
-6989:0:4365
-6990:2:1657
-6991:0:4365
-6992:2:1660
-6993:0:4365
-6994:3:2942
-6995:0:4365
-6996:2:1665
-6997:2:1669
-6998:2:1670
-6999:2:1678
-7000:2:1679
-7001:2:1683
-7002:2:1684
-7003:2:1678
-7004:2:1679
-7005:2:1680
-7006:2:1692
-7007:2:1697
-7008:2:1701
-7009:2:1702
-7010:2:1709
-7011:2:1710
-7012:2:1721
-7013:2:1722
-7014:2:1723
-7015:2:1721
-7016:2:1722
-7017:2:1723
-7018:2:1734
-7019:2:1739
-7020:2:1740
-7021:0:4365
-7022:3:2943
-7023:0:4365
-7024:2:1752
-7025:0:4365
-7026:3:2942
-7027:0:4365
-7028:2:1754
-7029:0:4365
-7030:3:2943
-7031:0:4365
-7032:2:1755
-7033:2:1759
-7034:2:1760
-7035:2:1768
-7036:2:1769
-7037:2:1773
-7038:2:1774
-7039:2:1768
-7040:2:1769
-7041:2:1773
-7042:2:1774
-7043:2:1782
-7044:2:1787
-7045:2:1791
-7046:2:1792
-7047:2:1799
-7048:2:1800
-7049:2:1811
-7050:2:1812
-7051:2:1813
-7052:2:1811
-7053:2:1812
-7054:2:1813
-7055:2:1824
-7056:2:1829
-7057:2:1830
-7058:0:4365
-7059:2:1842
-7060:0:4365
-7061:3:2942
-7062:0:4365
-7063:2:1844
-7064:0:4365
-7065:3:2943
-7066:0:4365
-7067:2:1845
-7068:2:1849
-7069:2:1850
-7070:2:1858
-7071:2:1859
-7072:2:1863
-7073:2:1864
-7074:2:1858
-7075:2:1859
-7076:2:1863
-7077:2:1864
-7078:2:1872
-7079:2:1877
-7080:2:1881
-7081:2:1882
-7082:2:1889
-7083:2:1890
-7084:2:1901
-7085:2:1902
-7086:2:1903
-7087:2:1901
-7088:2:1902
-7089:2:1903
-7090:2:1914
-7091:2:1919
-7092:2:1920
-7093:0:4365
-7094:2:1932
-7095:0:4365
-7096:3:2942
-7097:0:4365
-7098:2:1934
-7099:0:4365
-7100:3:2943
-7101:0:4365
-7102:2:1935
-7103:0:4365
-7104:2:1936
-7105:0:4365
-7106:2:2129
-7107:0:4365
-7108:2:2130
-7109:0:4365
-7110:2:2134
-7111:0:4365
-7112:3:2942
-7113:0:4365
-7114:2:2136
-7115:0:4365
-7116:3:2943
-7117:0:4365
-7118:2:2137
-7119:2:2141
-7120:2:2142
-7121:2:2150
-7122:2:2151
-7123:2:2155
-7124:2:2156
-7125:2:2150
-7126:2:2151
-7127:2:2155
-7128:2:2156
-7129:2:2164
-7130:2:2169
-7131:2:2173
-7132:2:2174
-7133:2:2181
-7134:2:2182
-7135:2:2193
-7136:2:2194
-7137:2:2195
-7138:2:2193
-7139:2:2194
-7140:2:2195
-7141:2:2206
-7142:2:2211
-7143:2:2212
-7144:0:4365
-7145:2:2224
-7146:0:4365
-7147:3:2942
-7148:0:4365
-7149:2:2226
-7150:0:4365
-7151:3:2943
-7152:0:4365
-7153:2:2230
-7154:0:4365
-7155:3:2942
-7156:0:4365
-7157:2:2235
-7158:2:2239
-7159:2:2240
-7160:2:2248
-7161:2:2249
-7162:2:2253
-7163:2:2254
-7164:2:2248
-7165:2:2249
-7166:2:2250
-7167:2:2262
-7168:2:2267
-7169:2:2271
-7170:2:2272
-7171:2:2279
-7172:2:2280
-7173:2:2291
-7174:2:2292
-7175:2:2293
-7176:2:2291
-7177:2:2292
-7178:2:2293
-7179:2:2304
-7180:2:2309
-7181:2:2310
-7182:0:4365
-7183:3:2943
-7184:0:4365
-7185:2:2322
-7186:0:4365
-7187:2:1169
-7188:0:4365
-7189:3:2942
-7190:0:4365
-7191:2:1170
-7192:0:4365
-7193:3:2943
-7194:0:4365
-7195:3:2944
-7196:0:4365
-7197:3:2950
-7198:0:4365
-7199:3:2951
-7200:0:4365
-7201:3:2952
-7202:0:4365
-7203:3:2953
-7204:0:4365
-7205:3:2954
-7206:3:2958
-7207:3:2959
-7208:3:2967
-7209:3:2968
-7210:3:2972
-7211:3:2973
-7212:3:2967
-7213:3:2968
-7214:3:2972
-7215:3:2973
-7216:3:2981
-7217:3:2986
-7218:3:2990
-7219:3:2991
-7220:3:2998
-7221:3:2999
-7222:3:3010
-7223:3:3011
-7224:3:3012
-7225:3:3010
-7226:3:3011
-7227:3:3012
-7228:3:3023
-7229:3:3028
-7230:3:3029
-7231:0:4365
-7232:3:3041
-7233:0:4365
-7234:3:3042
-7235:0:4365
-7236:2:1173
-7237:0:4365
-7238:3:3043
-7239:0:4365
-7240:2:1179
-7241:0:4365
-7242:2:1180
-7243:0:4365
-7244:3:3042
-7245:0:4365
-7246:2:1181
-7247:2:1185
-7248:2:1186
-7249:2:1194
-7250:2:1195
-7251:2:1199
-7252:2:1200
-7253:2:1194
-7254:2:1195
-7255:2:1199
-7256:2:1200
-7257:2:1208
-7258:2:1213
-7259:2:1217
-7260:2:1218
-7261:2:1225
-7262:2:1226
-7263:2:1237
-7264:2:1238
-7265:2:1239
-7266:2:1237
-7267:2:1238
-7268:2:1239
-7269:2:1250
-7270:2:1255
-7271:2:1256
-7272:0:4365
-7273:3:3043
-7274:0:4365
-7275:2:1268
-7276:0:4365
-7277:3:3042
-7278:0:4365
-7279:2:1270
-7280:0:4365
-7281:3:3043
-7282:0:4365
-7283:2:1271
-7284:2:1275
-7285:2:1276
-7286:2:1284
-7287:2:1285
-7288:2:1289
-7289:2:1290
-7290:2:1284
-7291:2:1285
-7292:2:1289
-7293:2:1290
-7294:2:1298
-7295:2:1303
-7296:2:1307
-7297:2:1308
-7298:2:1315
-7299:2:1316
-7300:2:1327
-7301:2:1328
-7302:2:1329
-7303:2:1327
-7304:2:1328
-7305:2:1329
-7306:2:1340
-7307:2:1345
-7308:2:1346
-7309:0:4365
-7310:2:1358
-7311:0:4365
-7312:2:1360
-7313:0:4365
-7314:3:3042
-7315:0:4365
-7316:2:1361
-7317:0:4365
-7318:3:3043
-7319:0:4365
-7320:2:1362
-7321:2:1366
-7322:2:1367
-7323:2:1375
-7324:2:1376
-7325:2:1380
-7326:2:1381
-7327:2:1375
-7328:2:1376
-7329:2:1380
-7330:2:1381
-7331:2:1389
-7332:2:1394
-7333:2:1398
-7334:2:1399
-7335:2:1406
-7336:2:1407
-7337:2:1418
-7338:2:1419
-7339:2:1420
-7340:2:1418
-7341:2:1419
-7342:2:1420
-7343:2:1431
-7344:2:1436
-7345:2:1437
-7346:0:4365
-7347:2:1449
-7348:0:4365
-7349:3:3042
-7350:0:4365
-7351:2:1451
-7352:0:4365
-7353:3:3043
-7354:0:4365
-7355:2:1652
-7356:0:4365
-7357:2:1653
-7358:0:4365
-7359:2:1657
-7360:0:4365
-7361:2:1660
-7362:0:4365
-7363:3:3042
-7364:0:4365
-7365:2:1665
-7366:2:1669
-7367:2:1670
-7368:2:1678
-7369:2:1679
-7370:2:1683
-7371:2:1684
-7372:2:1678
-7373:2:1679
-7374:2:1680
-7375:2:1692
-7376:2:1697
-7377:2:1701
-7378:2:1702
-7379:2:1709
-7380:2:1710
-7381:2:1721
-7382:2:1722
-7383:2:1723
-7384:2:1721
-7385:2:1722
-7386:2:1723
-7387:2:1734
-7388:2:1739
-7389:2:1740
-7390:0:4365
-7391:3:3043
-7392:0:4365
-7393:2:1752
-7394:0:4365
-7395:3:3042
-7396:0:4365
-7397:2:1754
-7398:0:4365
-7399:3:3043
-7400:0:4365
-7401:2:1755
-7402:2:1759
-7403:2:1760
-7404:2:1768
-7405:2:1769
-7406:2:1773
-7407:2:1774
-7408:2:1768
-7409:2:1769
-7410:2:1773
-7411:2:1774
-7412:2:1782
-7413:2:1787
-7414:2:1791
-7415:2:1792
-7416:2:1799
-7417:2:1800
-7418:2:1811
-7419:2:1812
-7420:2:1813
-7421:2:1811
-7422:2:1812
-7423:2:1813
-7424:2:1824
-7425:2:1829
-7426:2:1830
-7427:0:4365
-7428:2:1842
-7429:0:4365
-7430:3:3042
-7431:0:4365
-7432:2:1844
-7433:0:4365
-7434:3:3043
-7435:0:4365
-7436:2:1845
-7437:2:1849
-7438:2:1850
-7439:2:1858
-7440:2:1859
-7441:2:1863
-7442:2:1864
-7443:2:1858
-7444:2:1859
-7445:2:1863
-7446:2:1864
-7447:2:1872
-7448:2:1877
-7449:2:1881
-7450:2:1882
-7451:2:1889
-7452:2:1890
-7453:2:1901
-7454:2:1902
-7455:2:1903
-7456:2:1901
-7457:2:1902
-7458:2:1903
-7459:2:1914
-7460:2:1919
-7461:2:1920
-7462:0:4365
-7463:2:1932
-7464:0:4365
-7465:3:3042
-7466:0:4365
-7467:2:1934
-7468:0:4365
-7469:3:3043
-7470:0:4365
-7471:2:1935
-7472:0:4365
-7473:2:1936
-7474:0:4365
-7475:2:2129
-7476:0:4365
-7477:2:2130
-7478:0:4365
-7479:2:2134
-7480:0:4365
-7481:3:3042
-7482:0:4365
-7483:2:2136
-7484:0:4365
-7485:3:3043
-7486:0:4365
-7487:2:2137
-7488:2:2141
-7489:2:2142
-7490:2:2150
-7491:2:2151
-7492:2:2155
-7493:2:2156
-7494:2:2150
-7495:2:2151
-7496:2:2155
-7497:2:2156
-7498:2:2164
-7499:2:2169
-7500:2:2173
-7501:2:2174
-7502:2:2181
-7503:2:2182
-7504:2:2193
-7505:2:2194
-7506:2:2195
-7507:2:2193
-7508:2:2194
-7509:2:2195
-7510:2:2206
-7511:2:2211
-7512:2:2212
-7513:0:4365
-7514:2:2224
-7515:0:4365
-7516:3:3042
-7517:0:4365
-7518:2:2226
-7519:0:4365
-7520:3:3043
-7521:0:4365
-7522:2:2230
-7523:0:4365
-7524:3:3042
-7525:0:4365
-7526:2:2235
-7527:2:2239
-7528:2:2240
-7529:2:2248
-7530:2:2249
-7531:2:2253
-7532:2:2254
-7533:2:2248
-7534:2:2249
-7535:2:2250
-7536:2:2262
-7537:2:2267
-7538:2:2271
-7539:2:2272
-7540:2:2279
-7541:2:2280
-7542:2:2291
-7543:2:2292
-7544:2:2293
-7545:2:2291
-7546:2:2292
-7547:2:2293
-7548:2:2304
-7549:2:2309
-7550:2:2310
-7551:0:4365
-7552:3:3043
-7553:0:4365
-7554:2:2322
-7555:0:4365
-7556:2:1169
-7557:0:4365
-7558:3:3042
-7559:0:4365
-7560:2:1170
-7561:0:4365
-7562:3:3043
-7563:0:4365
-7564:3:3044
-7565:0:4365
-7566:3:3257
-7567:0:4365
-7568:3:3265
-7569:0:4365
-7570:3:3266
-7571:3:3270
-7572:3:3271
-7573:3:3279
-7574:3:3280
-7575:3:3284
-7576:3:3285
-7577:3:3279
-7578:3:3280
-7579:3:3284
-7580:3:3285
-7581:3:3293
-7582:3:3298
-7583:3:3302
-7584:3:3303
-7585:3:3310
-7586:3:3311
-7587:3:3322
-7588:3:3323
-7589:3:3324
-7590:3:3322
-7591:3:3323
-7592:3:3324
-7593:3:3335
-7594:3:3340
-7595:3:3341
-7596:0:4365
-7597:3:3353
-7598:0:4365
-7599:3:3354
-7600:0:4365
-7601:2:1173
-7602:0:4365
-7603:3:3355
-7604:0:4365
-7605:2:1179
-7606:0:4365
-7607:2:1180
-7608:0:4365
-7609:3:3354
-7610:0:4365
-7611:2:1181
-7612:2:1185
-7613:2:1186
-7614:2:1194
-7615:2:1195
-7616:2:1199
-7617:2:1200
-7618:2:1194
-7619:2:1195
-7620:2:1199
-7621:2:1200
-7622:2:1208
-7623:2:1213
-7624:2:1217
-7625:2:1218
-7626:2:1225
-7627:2:1226
-7628:2:1237
-7629:2:1238
-7630:2:1239
-7631:2:1237
-7632:2:1238
-7633:2:1239
-7634:2:1250
-7635:2:1255
-7636:2:1256
-7637:0:4365
-7638:3:3355
-7639:0:4365
-7640:2:1268
-7641:0:4365
-7642:3:3354
-7643:0:4365
-7644:2:1270
-7645:0:4365
-7646:3:3355
-7647:0:4365
-7648:2:1271
-7649:2:1275
-7650:2:1276
-7651:2:1284
-7652:2:1285
-7653:2:1289
-7654:2:1290
-7655:2:1284
-7656:2:1285
-7657:2:1289
-7658:2:1290
-7659:2:1298
-7660:2:1303
-7661:2:1307
-7662:2:1308
-7663:2:1315
-7664:2:1316
-7665:2:1327
-7666:2:1328
-7667:2:1329
-7668:2:1327
-7669:2:1328
-7670:2:1329
-7671:2:1340
-7672:2:1345
-7673:2:1346
-7674:0:4365
-7675:2:1358
-7676:0:4365
-7677:2:1360
-7678:0:4365
-7679:3:3354
-7680:0:4365
-7681:2:1361
-7682:0:4365
-7683:3:3355
-7684:0:4365
-7685:2:1362
-7686:2:1366
-7687:2:1367
-7688:2:1375
-7689:2:1376
-7690:2:1380
-7691:2:1381
-7692:2:1375
-7693:2:1376
-7694:2:1380
-7695:2:1381
-7696:2:1389
-7697:2:1394
-7698:2:1398
-7699:2:1399
-7700:2:1406
-7701:2:1407
-7702:2:1418
-7703:2:1419
-7704:2:1420
-7705:2:1418
-7706:2:1419
-7707:2:1420
-7708:2:1431
-7709:2:1436
-7710:2:1437
-7711:0:4365
-7712:2:1449
-7713:0:4365
-7714:3:3354
-7715:0:4365
-7716:2:1451
-7717:0:4365
-7718:3:3355
-7719:0:4365
-7720:2:1652
-7721:0:4365
-7722:2:1653
-7723:0:4365
-7724:2:1657
-7725:0:4365
-7726:2:1660
-7727:0:4365
-7728:3:3354
-7729:0:4365
-7730:2:1665
-7731:2:1669
-7732:2:1670
-7733:2:1678
-7734:2:1679
-7735:2:1683
-7736:2:1684
-7737:2:1678
-7738:2:1679
-7739:2:1680
-7740:2:1692
-7741:2:1697
-7742:2:1701
-7743:2:1702
-7744:2:1709
-7745:2:1710
-7746:2:1721
-7747:2:1722
-7748:2:1723
-7749:2:1721
-7750:2:1722
-7751:2:1723
-7752:2:1734
-7753:2:1739
-7754:2:1740
-7755:0:4365
-7756:3:3355
-7757:0:4365
-7758:2:1752
-7759:0:4365
-7760:3:3354
-7761:0:4365
-7762:2:1754
-7763:0:4365
-7764:3:3355
-7765:0:4365
-7766:2:1755
-7767:2:1759
-7768:2:1760
-7769:2:1768
-7770:2:1769
-7771:2:1773
-7772:2:1774
-7773:2:1768
-7774:2:1769
-7775:2:1773
-7776:2:1774
-7777:2:1782
-7778:2:1787
-7779:2:1791
-7780:2:1792
-7781:2:1799
-7782:2:1800
-7783:2:1811
-7784:2:1812
-7785:2:1813
-7786:2:1811
-7787:2:1812
-7788:2:1813
-7789:2:1824
-7790:2:1829
-7791:2:1830
-7792:0:4365
-7793:2:1842
-7794:0:4365
-7795:3:3354
-7796:0:4365
-7797:2:1844
-7798:0:4365
-7799:3:3355
-7800:0:4365
-7801:2:1845
-7802:2:1849
-7803:2:1850
-7804:2:1858
-7805:2:1859
-7806:2:1863
-7807:2:1864
-7808:2:1858
-7809:2:1859
-7810:2:1863
-7811:2:1864
-7812:2:1872
-7813:2:1877
-7814:2:1881
-7815:2:1882
-7816:2:1889
-7817:2:1890
-7818:2:1901
-7819:2:1902
-7820:2:1903
-7821:2:1901
-7822:2:1902
-7823:2:1903
-7824:2:1914
-7825:2:1919
-7826:2:1920
-7827:0:4365
-7828:2:1932
-7829:0:4365
-7830:3:3354
-7831:0:4365
-7832:2:1934
-7833:0:4365
-7834:3:3355
-7835:0:4365
-7836:2:1935
-7837:0:4365
-7838:2:1936
-7839:0:4365
-7840:2:2129
-7841:0:4365
-7842:2:2130
-7843:0:4365
-7844:2:2134
-7845:0:4365
-7846:3:3354
-7847:0:4365
-7848:2:2136
-7849:0:4365
-7850:3:3355
-7851:0:4365
-7852:2:2137
-7853:2:2141
-7854:2:2142
-7855:2:2150
-7856:2:2151
-7857:2:2155
-7858:2:2156
-7859:2:2150
-7860:2:2151
-7861:2:2155
-7862:2:2156
-7863:2:2164
-7864:2:2169
-7865:2:2173
-7866:2:2174
-7867:2:2181
-7868:2:2182
-7869:2:2193
-7870:2:2194
-7871:2:2195
-7872:2:2193
-7873:2:2194
-7874:2:2195
-7875:2:2206
-7876:2:2211
-7877:2:2212
-7878:0:4365
-7879:2:2224
-7880:0:4365
-7881:3:3354
-7882:0:4365
-7883:2:2226
-7884:0:4365
-7885:3:3355
-7886:0:4365
-7887:2:2230
-7888:0:4365
-7889:3:3354
-7890:0:4365
-7891:2:2235
-7892:2:2239
-7893:2:2240
-7894:2:2248
-7895:2:2249
-7896:2:2253
-7897:2:2254
-7898:2:2248
-7899:2:2249
-7900:2:2250
-7901:2:2262
-7902:2:2267
-7903:2:2271
-7904:2:2272
-7905:2:2279
-7906:2:2280
-7907:2:2291
-7908:2:2292
-7909:2:2293
-7910:2:2291
-7911:2:2292
-7912:2:2293
-7913:2:2304
-7914:2:2309
-7915:2:2310
-7916:0:4365
-7917:3:3355
-7918:0:4365
-7919:2:2322
-7920:0:4365
-7921:2:1169
-7922:0:4365
-7923:3:3354
-7924:0:4365
-7925:2:1170
-7926:0:4365
-7927:3:3355
-7928:0:4365
-7929:3:3356
-7930:0:4365
-7931:3:3366
-7932:0:4365
-7933:3:2951
-7934:0:4365
-7935:3:2952
-7936:0:4365
-7937:3:2953
-7938:0:4365
-7939:3:2954
-7940:3:2958
-7941:3:2959
-7942:3:2967
-7943:3:2968
-7944:3:2972
-7945:3:2973
-7946:3:2967
-7947:3:2968
-7948:3:2972
-7949:3:2973
-7950:3:2981
-7951:3:2986
-7952:3:2990
-7953:3:2991
-7954:3:2998
-7955:3:2999
-7956:3:3010
-7957:3:3011
-7958:3:3012
-7959:3:3010
-7960:3:3011
-7961:3:3012
-7962:3:3023
-7963:3:3028
-7964:3:3029
-7965:0:4365
-7966:3:3041
-7967:0:4365
-7968:3:3042
-7969:0:4365
-7970:2:1173
-7971:0:4365
-7972:3:3043
-7973:0:4365
-7974:2:1179
-7975:0:4365
-7976:2:1180
-7977:0:4365
-7978:3:3042
-7979:0:4365
-7980:2:1181
-7981:2:1185
-7982:2:1186
-7983:2:1194
-7984:2:1195
-7985:2:1199
-7986:2:1200
-7987:2:1194
-7988:2:1195
-7989:2:1199
-7990:2:1200
-7991:2:1208
-7992:2:1213
-7993:2:1217
-7994:2:1218
-7995:2:1225
-7996:2:1226
-7997:2:1237
-7998:2:1238
-7999:2:1239
-8000:2:1237
-8001:2:1238
-8002:2:1239
-8003:2:1250
-8004:2:1255
-8005:2:1256
-8006:0:4365
-8007:3:3043
-8008:0:4365
-8009:2:1268
-8010:0:4365
-8011:3:3042
-8012:0:4365
-8013:2:1270
-8014:0:4365
-8015:3:3043
-8016:0:4365
-8017:2:1271
-8018:2:1275
-8019:2:1276
-8020:2:1284
-8021:2:1285
-8022:2:1289
-8023:2:1290
-8024:2:1284
-8025:2:1285
-8026:2:1289
-8027:2:1290
-8028:2:1298
-8029:2:1303
-8030:2:1307
-8031:2:1308
-8032:2:1315
-8033:2:1316
-8034:2:1327
-8035:2:1328
-8036:2:1329
-8037:2:1327
-8038:2:1328
-8039:2:1329
-8040:2:1340
-8041:2:1345
-8042:2:1346
-8043:0:4365
-8044:2:1358
-8045:0:4365
-8046:2:1360
-8047:0:4365
-8048:3:3042
-8049:0:4365
-8050:2:1361
-8051:0:4365
-8052:3:3043
-8053:0:4365
-8054:2:1362
-8055:2:1366
-8056:2:1367
-8057:2:1375
-8058:2:1376
-8059:2:1380
-8060:2:1381
-8061:2:1375
-8062:2:1376
-8063:2:1380
-8064:2:1381
-8065:2:1389
-8066:2:1394
-8067:2:1398
-8068:2:1399
-8069:2:1406
-8070:2:1407
-8071:2:1418
-8072:2:1419
-8073:2:1420
-8074:2:1418
-8075:2:1419
-8076:2:1420
-8077:2:1431
-8078:2:1436
-8079:2:1437
-8080:0:4365
-8081:2:1449
-8082:0:4365
-8083:3:3042
-8084:0:4365
-8085:2:1451
-8086:0:4365
-8087:3:3043
-8088:0:4365
-8089:2:1652
-8090:0:4365
-8091:2:1653
-8092:0:4365
-8093:2:1657
-8094:0:4365
-8095:2:1660
-8096:0:4365
-8097:3:3042
-8098:0:4365
-8099:2:1665
-8100:2:1669
-8101:2:1670
-8102:2:1678
-8103:2:1679
-8104:2:1683
-8105:2:1684
-8106:2:1678
-8107:2:1679
-8108:2:1680
-8109:2:1692
-8110:2:1697
-8111:2:1701
-8112:2:1702
-8113:2:1709
-8114:2:1710
-8115:2:1721
-8116:2:1722
-8117:2:1723
-8118:2:1721
-8119:2:1722
-8120:2:1723
-8121:2:1734
-8122:2:1739
-8123:2:1740
-8124:0:4365
-8125:3:3043
-8126:0:4365
-8127:2:1752
-8128:0:4365
-8129:3:3042
-8130:0:4365
-8131:2:1754
-8132:0:4365
-8133:3:3043
-8134:0:4365
-8135:2:1755
-8136:2:1759
-8137:2:1760
-8138:2:1768
-8139:2:1769
-8140:2:1773
-8141:2:1774
-8142:2:1768
-8143:2:1769
-8144:2:1773
-8145:2:1774
-8146:2:1782
-8147:2:1787
-8148:2:1791
-8149:2:1792
-8150:2:1799
-8151:2:1800
-8152:2:1811
-8153:2:1812
-8154:2:1813
-8155:2:1811
-8156:2:1812
-8157:2:1813
-8158:2:1824
-8159:2:1829
-8160:2:1830
-8161:0:4365
-8162:2:1842
-8163:0:4365
-8164:3:3042
-8165:0:4365
-8166:2:1844
-8167:0:4365
-8168:3:3043
-8169:0:4365
-8170:2:1845
-8171:2:1849
-8172:2:1850
-8173:2:1858
-8174:2:1859
-8175:2:1863
-8176:2:1864
-8177:2:1858
-8178:2:1859
-8179:2:1863
-8180:2:1864
-8181:2:1872
-8182:2:1877
-8183:2:1881
-8184:2:1882
-8185:2:1889
-8186:2:1890
-8187:2:1901
-8188:2:1902
-8189:2:1903
-8190:2:1901
-8191:2:1902
-8192:2:1903
-8193:2:1914
-8194:2:1919
-8195:2:1920
-8196:0:4365
-8197:2:1932
-8198:0:4365
-8199:3:3042
-8200:0:4365
-8201:2:1934
-8202:0:4365
-8203:3:3043
-8204:0:4365
-8205:2:1935
-8206:0:4365
-8207:2:1936
-8208:0:4365
-8209:2:2129
-8210:0:4365
-8211:2:2130
-8212:0:4365
-8213:2:2134
-8214:0:4365
-8215:3:3042
-8216:0:4365
-8217:2:2136
-8218:0:4365
-8219:3:3043
-8220:0:4365
-8221:2:2137
-8222:2:2141
-8223:2:2142
-8224:2:2150
-8225:2:2151
-8226:2:2155
-8227:2:2156
-8228:2:2150
-8229:2:2151
-8230:2:2155
-8231:2:2156
-8232:2:2164
-8233:2:2169
-8234:2:2173
-8235:2:2174
-8236:2:2181
-8237:2:2182
-8238:2:2193
-8239:2:2194
-8240:2:2195
-8241:2:2193
-8242:2:2194
-8243:2:2195
-8244:2:2206
-8245:2:2211
-8246:2:2212
-8247:0:4365
-8248:2:2224
-8249:0:4365
-8250:3:3042
-8251:0:4365
-8252:2:2226
-8253:0:4365
-8254:3:3043
-8255:0:4365
-8256:2:2230
-8257:0:4365
-8258:3:3042
-8259:0:4365
-8260:2:2235
-8261:2:2239
-8262:2:2240
-8263:2:2248
-8264:2:2249
-8265:2:2253
-8266:2:2254
-8267:2:2248
-8268:2:2249
-8269:2:2250
-8270:2:2262
-8271:2:2267
-8272:2:2271
-8273:2:2272
-8274:2:2279
-8275:2:2280
-8276:2:2291
-8277:2:2292
-8278:2:2293
-8279:2:2291
-8280:2:2292
-8281:2:2293
-8282:2:2304
-8283:2:2309
-8284:2:2310
-8285:0:4365
-8286:3:3043
-8287:0:4365
-8288:2:2322
-8289:0:4365
-8290:2:1169
-8291:0:4365
-8292:3:3042
-8293:0:4365
-8294:2:1170
-8295:0:4365
-8296:3:3043
-8297:0:4365
-8298:3:3044
-8299:0:4365
-8300:3:3257
-8301:0:4365
-8302:3:3362
-8303:0:4365
-8304:3:3363
-8305:0:4365
-8306:3:3367
-8307:0:4365
-8308:3:3373
-8309:3:3377
-8310:3:3378
-8311:3:3386
-8312:3:3387
-8313:3:3391
-8314:3:3392
-8315:3:3386
-8316:3:3387
-8317:3:3391
-8318:3:3392
-8319:3:3400
-8320:3:3405
-8321:3:3409
-8322:3:3410
-8323:3:3417
-8324:3:3418
-8325:3:3429
-8326:3:3430
-8327:3:3431
-8328:3:3429
-8329:3:3430
-8330:3:3431
-8331:3:3442
-8332:3:3447
-8333:3:3448
-8334:0:4365
-8335:3:3460
-8336:0:4365
-8337:3:3461
-8338:0:4365
-8339:2:1173
-8340:0:4365
-8341:3:3462
-8342:0:4365
-8343:2:1179
-8344:0:4365
-8345:2:1180
-8346:0:4365
-8347:3:3461
-8348:0:4365
-8349:2:1181
-8350:2:1185
-8351:2:1186
-8352:2:1194
-8353:2:1195
-8354:2:1199
-8355:2:1200
-8356:2:1194
-8357:2:1195
-8358:2:1199
-8359:2:1200
-8360:2:1208
-8361:2:1213
-8362:2:1217
-8363:2:1218
-8364:2:1225
-8365:2:1226
-8366:2:1237
-8367:2:1238
-8368:2:1239
-8369:2:1237
-8370:2:1238
-8371:2:1239
-8372:2:1250
-8373:2:1255
-8374:2:1256
-8375:0:4365
-8376:3:3462
-8377:0:4365
-8378:2:1268
-8379:0:4365
-8380:3:3461
-8381:0:4365
-8382:2:1270
-8383:0:4365
-8384:3:3462
-8385:0:4365
-8386:2:1271
-8387:2:1275
-8388:2:1276
-8389:2:1284
-8390:2:1285
-8391:2:1289
-8392:2:1290
-8393:2:1284
-8394:2:1285
-8395:2:1289
-8396:2:1290
-8397:2:1298
-8398:2:1303
-8399:2:1307
-8400:2:1308
-8401:2:1315
-8402:2:1316
-8403:2:1327
-8404:2:1328
-8405:2:1329
-8406:2:1327
-8407:2:1328
-8408:2:1329
-8409:2:1340
-8410:2:1345
-8411:2:1346
-8412:0:4365
-8413:2:1358
-8414:0:4365
-8415:2:1360
-8416:0:4365
-8417:3:3461
-8418:0:4365
-8419:2:1361
-8420:0:4365
-8421:3:3462
-8422:0:4365
-8423:2:1362
-8424:2:1366
-8425:2:1367
-8426:2:1375
-8427:2:1376
-8428:2:1380
-8429:2:1381
-8430:2:1375
-8431:2:1376
-8432:2:1380
-8433:2:1381
-8434:2:1389
-8435:2:1394
-8436:2:1398
-8437:2:1399
-8438:2:1406
-8439:2:1407
-8440:2:1418
-8441:2:1419
-8442:2:1420
-8443:2:1418
-8444:2:1419
-8445:2:1420
-8446:2:1431
-8447:2:1436
-8448:2:1437
-8449:0:4365
-8450:2:1449
-8451:0:4365
-8452:3:3461
-8453:0:4365
-8454:2:1451
-8455:0:4365
-8456:3:3462
-8457:0:4365
-8458:2:1652
-8459:0:4365
-8460:2:1653
-8461:0:4365
-8462:2:1657
-8463:0:4365
-8464:2:1660
-8465:0:4365
-8466:3:3461
-8467:0:4365
-8468:2:1665
-8469:2:1669
-8470:2:1670
-8471:2:1678
-8472:2:1679
-8473:2:1683
-8474:2:1684
-8475:2:1678
-8476:2:1679
-8477:2:1680
-8478:2:1692
-8479:2:1697
-8480:2:1701
-8481:2:1702
-8482:2:1709
-8483:2:1710
-8484:2:1721
-8485:2:1722
-8486:2:1723
-8487:2:1721
-8488:2:1722
-8489:2:1723
-8490:2:1734
-8491:2:1739
-8492:2:1740
-8493:0:4365
-8494:3:3462
-8495:0:4365
-8496:2:1752
-8497:0:4365
-8498:3:3461
-8499:0:4365
-8500:2:1754
-8501:0:4365
-8502:3:3462
-8503:0:4365
-8504:2:1755
-8505:2:1759
-8506:2:1760
-8507:2:1768
-8508:2:1769
-8509:2:1773
-8510:2:1774
-8511:2:1768
-8512:2:1769
-8513:2:1773
-8514:2:1774
-8515:2:1782
-8516:2:1787
-8517:2:1791
-8518:2:1792
-8519:2:1799
-8520:2:1800
-8521:2:1811
-8522:2:1812
-8523:2:1813
-8524:2:1811
-8525:2:1812
-8526:2:1813
-8527:2:1824
-8528:2:1829
-8529:2:1830
-8530:0:4365
-8531:2:1842
-8532:0:4365
-8533:3:3461
-8534:0:4365
-8535:2:1844
-8536:0:4365
-8537:3:3462
-8538:0:4365
-8539:2:1845
-8540:2:1849
-8541:2:1850
-8542:2:1858
-8543:2:1859
-8544:2:1863
-8545:2:1864
-8546:2:1858
-8547:2:1859
-8548:2:1863
-8549:2:1864
-8550:2:1872
-8551:2:1877
-8552:2:1881
-8553:2:1882
-8554:2:1889
-8555:2:1890
-8556:2:1901
-8557:2:1902
-8558:2:1903
-8559:2:1901
-8560:2:1902
-8561:2:1903
-8562:2:1914
-8563:2:1919
-8564:2:1920
-8565:0:4365
-8566:2:1932
-8567:0:4365
-8568:3:3461
-8569:0:4365
-8570:2:1934
-8571:0:4365
-8572:3:3462
-8573:0:4365
-8574:2:1935
-8575:0:4365
-8576:2:1936
-8577:0:4365
-8578:2:2129
-8579:0:4365
-8580:2:2130
-8581:0:4365
-8582:2:2134
-8583:0:4365
-8584:3:3461
-8585:0:4365
-8586:2:2136
-8587:0:4365
-8588:3:3462
-8589:0:4365
-8590:2:2137
-8591:2:2141
-8592:2:2142
-8593:2:2150
-8594:2:2151
-8595:2:2155
-8596:2:2156
-8597:2:2150
-8598:2:2151
-8599:2:2155
-8600:2:2156
-8601:2:2164
-8602:2:2169
-8603:2:2173
-8604:2:2174
-8605:2:2181
-8606:2:2182
-8607:2:2193
-8608:2:2194
-8609:2:2195
-8610:2:2193
-8611:2:2194
-8612:2:2195
-8613:2:2206
-8614:2:2211
-8615:2:2212
-8616:0:4365
-8617:2:2224
-8618:0:4365
-8619:3:3461
-8620:0:4365
-8621:2:2226
-8622:0:4365
-8623:3:3462
-8624:0:4365
-8625:2:2230
-8626:0:4365
-8627:3:3461
-8628:0:4365
-8629:2:2235
-8630:2:2239
-8631:2:2240
-8632:2:2248
-8633:2:2249
-8634:2:2253
-8635:2:2254
-8636:2:2248
-8637:2:2249
-8638:2:2250
-8639:2:2262
-8640:2:2267
-8641:2:2271
-8642:2:2272
-8643:2:2279
-8644:2:2280
-8645:2:2291
-8646:2:2292
-8647:2:2293
-8648:2:2291
-8649:2:2292
-8650:2:2293
-8651:2:2304
-8652:2:2309
-8653:2:2310
-8654:0:4365
-8655:3:3462
-8656:0:4365
-8657:2:2322
-8658:0:4365
-8659:2:1169
-8660:0:4365
-8661:3:3461
-8662:0:4365
-8663:2:1170
-8664:0:4365
-8665:3:3462
-8666:0:4365
-8667:3:3463
-8668:0:4365
-8669:3:3469
-8670:0:4365
-8671:3:3470
-8672:3:3474
-8673:3:3475
-8674:3:3483
-8675:3:3484
-8676:3:3488
-8677:3:3489
-8678:3:3483
-8679:3:3484
-8680:3:3488
-8681:3:3489
-8682:3:3497
-8683:3:3502
-8684:3:3506
-8685:3:3507
-8686:3:3514
-8687:3:3515
-8688:3:3526
-8689:3:3527
-8690:3:3528
-8691:3:3526
-8692:3:3527
-8693:3:3528
-8694:3:3539
-8695:3:3544
-8696:3:3545
-8697:0:4365
-8698:3:3557
-8699:0:4365
-8700:3:3558
-8701:0:4365
-8702:2:1173
-8703:0:4365
-8704:3:3559
-8705:0:4365
-8706:2:1179
-8707:0:4365
-8708:2:1180
-8709:0:4365
-8710:3:3558
-8711:0:4365
-8712:2:1181
-8713:2:1185
-8714:2:1186
-8715:2:1194
-8716:2:1195
-8717:2:1199
-8718:2:1200
-8719:2:1194
-8720:2:1195
-8721:2:1199
-8722:2:1200
-8723:2:1208
-8724:2:1213
-8725:2:1217
-8726:2:1218
-8727:2:1225
-8728:2:1226
-8729:2:1237
-8730:2:1238
-8731:2:1239
-8732:2:1237
-8733:2:1238
-8734:2:1239
-8735:2:1250
-8736:2:1255
-8737:2:1256
-8738:0:4365
-8739:3:3559
-8740:0:4365
-8741:2:1268
-8742:0:4365
-8743:3:3558
-8744:0:4365
-8745:2:1270
-8746:0:4365
-8747:3:3559
-8748:0:4365
-8749:2:1271
-8750:2:1275
-8751:2:1276
-8752:2:1284
-8753:2:1285
-8754:2:1289
-8755:2:1290
-8756:2:1284
-8757:2:1285
-8758:2:1289
-8759:2:1290
-8760:2:1298
-8761:2:1303
-8762:2:1307
-8763:2:1308
-8764:2:1315
-8765:2:1316
-8766:2:1327
-8767:2:1328
-8768:2:1329
-8769:2:1327
-8770:2:1328
-8771:2:1329
-8772:2:1340
-8773:2:1345
-8774:2:1346
-8775:0:4365
-8776:2:1358
-8777:0:4365
-8778:2:1360
-8779:0:4365
-8780:3:3558
-8781:0:4365
-8782:2:1361
-8783:0:4365
-8784:3:3559
-8785:0:4365
-8786:2:1362
-8787:2:1366
-8788:2:1367
-8789:2:1375
-8790:2:1376
-8791:2:1380
-8792:2:1381
-8793:2:1375
-8794:2:1376
-8795:2:1380
-8796:2:1381
-8797:2:1389
-8798:2:1394
-8799:2:1398
-8800:2:1399
-8801:2:1406
-8802:2:1407
-8803:2:1418
-8804:2:1419
-8805:2:1420
-8806:2:1418
-8807:2:1419
-8808:2:1420
-8809:2:1431
-8810:2:1436
-8811:2:1437
-8812:0:4365
-8813:2:1449
-8814:0:4365
-8815:3:3558
-8816:0:4365
-8817:2:1451
-8818:0:4365
-8819:3:3559
-8820:0:4365
-8821:2:1652
-8822:0:4365
-8823:2:1653
-8824:0:4365
-8825:2:1657
-8826:0:4365
-8827:2:1660
-8828:0:4365
-8829:3:3558
-8830:0:4365
-8831:2:1665
-8832:2:1669
-8833:2:1670
-8834:2:1678
-8835:2:1679
-8836:2:1683
-8837:2:1684
-8838:2:1678
-8839:2:1679
-8840:2:1680
-8841:2:1692
-8842:2:1697
-8843:2:1701
-8844:2:1702
-8845:2:1709
-8846:2:1710
-8847:2:1721
-8848:2:1722
-8849:2:1723
-8850:2:1721
-8851:2:1722
-8852:2:1723
-8853:2:1734
-8854:2:1739
-8855:2:1740
-8856:0:4365
-8857:3:3559
-8858:0:4365
-8859:2:1752
-8860:0:4365
-8861:3:3558
-8862:0:4365
-8863:2:1754
-8864:0:4365
-8865:3:3559
-8866:0:4365
-8867:2:1755
-8868:2:1759
-8869:2:1760
-8870:2:1768
-8871:2:1769
-8872:2:1773
-8873:2:1774
-8874:2:1768
-8875:2:1769
-8876:2:1773
-8877:2:1774
-8878:2:1782
-8879:2:1787
-8880:2:1791
-8881:2:1792
-8882:2:1799
-8883:2:1800
-8884:2:1811
-8885:2:1812
-8886:2:1813
-8887:2:1811
-8888:2:1812
-8889:2:1813
-8890:2:1824
-8891:2:1829
-8892:2:1830
-8893:0:4365
-8894:2:1842
-8895:0:4365
-8896:3:3558
-8897:0:4365
-8898:2:1844
-8899:0:4365
-8900:3:3559
-8901:0:4365
-8902:2:1845
-8903:2:1849
-8904:2:1850
-8905:2:1858
-8906:2:1859
-8907:2:1863
-8908:2:1864
-8909:2:1858
-8910:2:1859
-8911:2:1863
-8912:2:1864
-8913:2:1872
-8914:2:1877
-8915:2:1881
-8916:2:1882
-8917:2:1889
-8918:2:1890
-8919:2:1901
-8920:2:1902
-8921:2:1903
-8922:2:1901
-8923:2:1902
-8924:2:1903
-8925:2:1914
-8926:2:1919
-8927:2:1920
-8928:0:4365
-8929:2:1932
-8930:0:4365
-8931:3:3558
-8932:0:4365
-8933:2:1934
-8934:0:4365
-8935:3:3559
-8936:0:4365
-8937:2:1935
-8938:0:4365
-8939:2:1936
-8940:0:4365
-8941:2:2129
-8942:0:4365
-8943:2:2130
-8944:0:4365
-8945:2:2134
-8946:0:4365
-8947:3:3558
-8948:0:4365
-8949:2:2136
-8950:0:4365
-8951:3:3559
-8952:0:4365
-8953:2:2137
-8954:2:2141
-8955:2:2142
-8956:2:2150
-8957:2:2151
-8958:2:2155
-8959:2:2156
-8960:2:2150
-8961:2:2151
-8962:2:2155
-8963:2:2156
-8964:2:2164
-8965:2:2169
-8966:2:2173
-8967:2:2174
-8968:2:2181
-8969:2:2182
-8970:2:2193
-8971:2:2194
-8972:2:2195
-8973:2:2193
-8974:2:2194
-8975:2:2195
-8976:2:2206
-8977:2:2211
-8978:2:2212
-8979:0:4365
-8980:2:2224
-8981:0:4365
-8982:3:3558
-8983:0:4365
-8984:2:2226
-8985:0:4365
-8986:3:3559
-8987:0:4365
-8988:2:2230
-8989:0:4365
-8990:3:3558
-8991:0:4365
-8992:2:2235
-8993:2:2239
-8994:2:2240
-8995:2:2248
-8996:2:2249
-8997:2:2253
-8998:2:2254
-8999:2:2248
-9000:2:2249
-9001:2:2250
-9002:2:2262
-9003:2:2267
-9004:2:2271
-9005:2:2272
-9006:2:2279
-9007:2:2280
-9008:2:2291
-9009:2:2292
-9010:2:2293
-9011:2:2291
-9012:2:2292
-9013:2:2293
-9014:2:2304
-9015:2:2309
-9016:2:2310
-9017:0:4365
-9018:3:3559
-9019:0:4365
-9020:2:2322
-9021:0:4365
-9022:2:1169
-9023:0:4365
-9024:3:3558
-9025:0:4365
-9026:2:1170
-9027:0:4365
-9028:3:3559
-9029:0:4365
-9030:3:3560
-9031:0:4365
-9032:3:3566
-9033:0:4365
-9034:3:3569
-9035:3:3570
-9036:3:3582
-9037:3:3583
-9038:3:3587
-9039:3:3588
-9040:3:3582
-9041:3:3583
-9042:3:3587
-9043:3:3588
-9044:3:3596
-9045:3:3601
-9046:3:3605
-9047:3:3606
-9048:3:3613
-9049:3:3614
-9050:3:3625
-9051:3:3626
-9052:3:3627
-9053:3:3625
-9054:3:3626
-9055:3:3627
-9056:3:3638
-9057:3:3643
-9058:3:3644
-9059:0:4365
-9060:3:3656
-9061:0:4365
-9062:3:3657
-9063:0:4365
-9064:2:1173
-9065:0:4365
-9066:3:3658
-9067:0:4365
-9068:2:1179
-9069:0:4365
-9070:2:1180
-9071:0:4365
-9072:3:3657
-9073:0:4365
-9074:2:1181
-9075:2:1185
-9076:2:1186
-9077:2:1194
-9078:2:1195
-9079:2:1199
-9080:2:1200
-9081:2:1194
-9082:2:1195
-9083:2:1199
-9084:2:1200
-9085:2:1208
-9086:2:1213
-9087:2:1217
-9088:2:1218
-9089:2:1225
-9090:2:1226
-9091:2:1237
-9092:2:1238
-9093:2:1239
-9094:2:1237
-9095:2:1238
-9096:2:1239
-9097:2:1250
-9098:2:1255
-9099:2:1256
-9100:0:4365
-9101:3:3658
-9102:0:4365
-9103:2:1268
-9104:0:4365
-9105:3:3657
-9106:0:4365
-9107:2:1270
-9108:0:4365
-9109:3:3658
-9110:0:4365
-9111:2:1271
-9112:2:1275
-9113:2:1276
-9114:2:1284
-9115:2:1285
-9116:2:1289
-9117:2:1290
-9118:2:1284
-9119:2:1285
-9120:2:1289
-9121:2:1290
-9122:2:1298
-9123:2:1303
-9124:2:1307
-9125:2:1308
-9126:2:1315
-9127:2:1316
-9128:2:1327
-9129:2:1328
-9130:2:1329
-9131:2:1327
-9132:2:1328
-9133:2:1329
-9134:2:1340
-9135:2:1345
-9136:2:1346
-9137:0:4365
-9138:2:1358
-9139:0:4365
-9140:2:1360
-9141:0:4365
-9142:3:3657
-9143:0:4365
-9144:2:1361
-9145:0:4365
-9146:3:3658
-9147:0:4365
-9148:2:1362
-9149:2:1366
-9150:2:1367
-9151:2:1375
-9152:2:1376
-9153:2:1380
-9154:2:1381
-9155:2:1375
-9156:2:1376
-9157:2:1380
-9158:2:1381
-9159:2:1389
-9160:2:1394
-9161:2:1398
-9162:2:1399
-9163:2:1406
-9164:2:1407
-9165:2:1418
-9166:2:1419
-9167:2:1420
-9168:2:1418
-9169:2:1419
-9170:2:1420
-9171:2:1431
-9172:2:1436
-9173:2:1437
-9174:0:4365
-9175:2:1449
-9176:0:4365
-9177:3:3657
-9178:0:4365
-9179:2:1451
-9180:0:4365
-9181:3:3658
-9182:0:4365
-9183:2:1652
-9184:0:4365
-9185:2:1653
-9186:0:4365
-9187:2:1657
-9188:0:4365
-9189:2:1660
-9190:0:4365
-9191:3:3657
-9192:0:4365
-9193:2:1665
-9194:2:1669
-9195:2:1670
-9196:2:1678
-9197:2:1679
-9198:2:1683
-9199:2:1684
-9200:2:1678
-9201:2:1679
-9202:2:1680
-9203:2:1692
-9204:2:1697
-9205:2:1701
-9206:2:1702
-9207:2:1709
-9208:2:1710
-9209:2:1721
-9210:2:1722
-9211:2:1723
-9212:2:1721
-9213:2:1722
-9214:2:1723
-9215:2:1734
-9216:2:1739
-9217:2:1740
-9218:0:4365
-9219:3:3658
-9220:0:4365
-9221:2:1752
-9222:0:4365
-9223:3:3657
-9224:0:4365
-9225:2:1754
-9226:0:4365
-9227:3:3658
-9228:0:4365
-9229:2:1755
-9230:2:1759
-9231:2:1760
-9232:2:1768
-9233:2:1769
-9234:2:1773
-9235:2:1774
-9236:2:1768
-9237:2:1769
-9238:2:1773
-9239:2:1774
-9240:2:1782
-9241:2:1787
-9242:2:1791
-9243:2:1792
-9244:2:1799
-9245:2:1800
-9246:2:1811
-9247:2:1812
-9248:2:1813
-9249:2:1811
-9250:2:1812
-9251:2:1813
-9252:2:1824
-9253:2:1829
-9254:2:1830
-9255:0:4365
-9256:2:1842
-9257:0:4365
-9258:3:3657
-9259:0:4365
-9260:2:1844
-9261:0:4365
-9262:3:3658
-9263:0:4365
-9264:2:1845
-9265:2:1849
-9266:2:1850
-9267:2:1858
-9268:2:1859
-9269:2:1863
-9270:2:1864
-9271:2:1858
-9272:2:1859
-9273:2:1863
-9274:2:1864
-9275:2:1872
-9276:2:1877
-9277:2:1881
-9278:2:1882
-9279:2:1889
-9280:2:1890
-9281:2:1901
-9282:2:1902
-9283:2:1903
-9284:2:1901
-9285:2:1902
-9286:2:1903
-9287:2:1914
-9288:2:1919
-9289:2:1920
-9290:0:4365
-9291:2:1932
-9292:0:4365
-9293:3:3657
-9294:0:4365
-9295:2:1934
-9296:0:4365
-9297:3:3658
-9298:0:4365
-9299:2:1935
-9300:0:4365
-9301:2:1936
-9302:0:4365
-9303:2:2129
-9304:0:4365
-9305:2:2130
-9306:0:4365
-9307:2:2134
-9308:0:4365
-9309:3:3657
-9310:0:4365
-9311:2:2136
-9312:0:4365
-9313:3:3658
-9314:0:4365
-9315:2:2137
-9316:2:2141
-9317:2:2142
-9318:2:2150
-9319:2:2151
-9320:2:2155
-9321:2:2156
-9322:2:2150
-9323:2:2151
-9324:2:2155
-9325:2:2156
-9326:2:2164
-9327:2:2169
-9328:2:2173
-9329:2:2174
-9330:2:2181
-9331:2:2182
-9332:2:2193
-9333:2:2194
-9334:2:2195
-9335:2:2193
-9336:2:2194
-9337:2:2195
-9338:2:2206
-9339:2:2211
-9340:2:2212
-9341:0:4365
-9342:2:2224
-9343:0:4365
-9344:3:3657
-9345:0:4365
-9346:2:2226
-9347:0:4365
-9348:3:3658
-9349:0:4365
-9350:2:2230
-9351:0:4365
-9352:3:3657
-9353:0:4365
-9354:2:2235
-9355:2:2239
-9356:2:2240
-9357:2:2248
-9358:2:2249
-9359:2:2253
-9360:2:2254
-9361:2:2248
-9362:2:2249
-9363:2:2250
-9364:2:2262
-9365:2:2267
-9366:2:2271
-9367:2:2272
-9368:2:2279
-9369:2:2280
-9370:2:2291
-9371:2:2292
-9372:2:2293
-9373:2:2291
-9374:2:2292
-9375:2:2293
-9376:2:2304
-9377:2:2309
-9378:2:2310
-9379:0:4365
-9380:3:3658
-9381:0:4365
-9382:2:2322
-9383:0:4365
-9384:2:1169
-9385:0:4365
-9386:3:3657
-9387:0:4365
-9388:2:1170
-9389:0:4365
-9390:3:3658
-9391:0:4365
-9392:3:3659
-9393:0:4365
-9394:3:3665
-9395:0:4365
-9396:3:3666
-9397:0:4365
-9398:3:3667
-9399:0:4365
-9400:3:3668
-9401:0:4365
-9402:3:3669
-9403:3:3673
-9404:3:3674
-9405:3:3682
-9406:3:3683
-9407:3:3687
-9408:3:3688
-9409:3:3682
-9410:3:3683
-9411:3:3687
-9412:3:3688
-9413:3:3696
-9414:3:3701
-9415:3:3705
-9416:3:3706
-9417:3:3713
-9418:3:3714
-9419:3:3725
-9420:3:3726
-9421:3:3727
-9422:3:3725
-9423:3:3726
-9424:3:3727
-9425:3:3738
-9426:3:3743
-9427:3:3744
-9428:0:4365
-9429:3:3756
-9430:0:4365
-9431:3:3757
-9432:0:4365
-9433:2:1173
-9434:0:4365
-9435:3:3758
-9436:0:4365
-9437:2:1179
-9438:0:4365
-9439:2:1180
-9440:0:4365
-9441:3:3757
-9442:0:4365
-9443:2:1181
-9444:2:1185
-9445:2:1186
-9446:2:1194
-9447:2:1195
-9448:2:1199
-9449:2:1200
-9450:2:1194
-9451:2:1195
-9452:2:1199
-9453:2:1200
-9454:2:1208
-9455:2:1213
-9456:2:1217
-9457:2:1218
-9458:2:1225
-9459:2:1226
-9460:2:1237
-9461:2:1238
-9462:2:1239
-9463:2:1237
-9464:2:1238
-9465:2:1239
-9466:2:1250
-9467:2:1255
-9468:2:1256
-9469:0:4365
-9470:3:3758
-9471:0:4365
-9472:2:1268
-9473:0:4365
-9474:3:3757
-9475:0:4365
-9476:2:1270
-9477:0:4365
-9478:3:3758
-9479:0:4365
-9480:2:1271
-9481:2:1275
-9482:2:1276
-9483:2:1284
-9484:2:1285
-9485:2:1289
-9486:2:1290
-9487:2:1284
-9488:2:1285
-9489:2:1289
-9490:2:1290
-9491:2:1298
-9492:2:1303
-9493:2:1307
-9494:2:1308
-9495:2:1315
-9496:2:1316
-9497:2:1327
-9498:2:1328
-9499:2:1329
-9500:2:1327
-9501:2:1328
-9502:2:1329
-9503:2:1340
-9504:2:1345
-9505:2:1346
-9506:0:4365
-9507:2:1358
-9508:0:4365
-9509:2:1360
-9510:0:4365
-9511:3:3757
-9512:0:4365
-9513:2:1361
-9514:0:4365
-9515:3:3758
-9516:0:4365
-9517:2:1362
-9518:2:1366
-9519:2:1367
-9520:2:1375
-9521:2:1376
-9522:2:1380
-9523:2:1381
-9524:2:1375
-9525:2:1376
-9526:2:1380
-9527:2:1381
-9528:2:1389
-9529:2:1394
-9530:2:1398
-9531:2:1399
-9532:2:1406
-9533:2:1407
-9534:2:1418
-9535:2:1419
-9536:2:1420
-9537:2:1418
-9538:2:1419
-9539:2:1420
-9540:2:1431
-9541:2:1436
-9542:2:1437
-9543:0:4365
-9544:2:1449
-9545:0:4365
-9546:3:3757
-9547:0:4365
-9548:2:1451
-9549:0:4365
-9550:3:3758
-9551:0:4365
-9552:2:1652
-9553:0:4365
-9554:2:1653
-9555:0:4365
-9556:2:1657
-9557:0:4365
-9558:2:1660
-9559:0:4365
-9560:3:3757
-9561:0:4365
-9562:2:1665
-9563:2:1669
-9564:2:1670
-9565:2:1678
-9566:2:1679
-9567:2:1683
-9568:2:1684
-9569:2:1678
-9570:2:1679
-9571:2:1680
-9572:2:1692
-9573:2:1697
-9574:2:1701
-9575:2:1702
-9576:2:1709
-9577:2:1710
-9578:2:1721
-9579:2:1722
-9580:2:1723
-9581:2:1721
-9582:2:1722
-9583:2:1723
-9584:2:1734
-9585:2:1739
-9586:2:1740
-9587:0:4365
-9588:3:3758
-9589:0:4365
-9590:2:1752
-9591:0:4365
-9592:3:3757
-9593:0:4365
-9594:2:1754
-9595:0:4365
-9596:3:3758
-9597:0:4365
-9598:2:1755
-9599:2:1759
-9600:2:1760
-9601:2:1768
-9602:2:1769
-9603:2:1773
-9604:2:1774
-9605:2:1768
-9606:2:1769
-9607:2:1773
-9608:2:1774
-9609:2:1782
-9610:2:1787
-9611:2:1791
-9612:2:1792
-9613:2:1799
-9614:2:1800
-9615:2:1811
-9616:2:1812
-9617:2:1813
-9618:2:1811
-9619:2:1812
-9620:2:1813
-9621:2:1824
-9622:2:1829
-9623:2:1830
-9624:0:4365
-9625:2:1842
-9626:0:4365
-9627:3:3757
-9628:0:4365
-9629:2:1844
-9630:0:4365
-9631:3:3758
-9632:0:4365
-9633:2:1845
-9634:2:1849
-9635:2:1850
-9636:2:1858
-9637:2:1859
-9638:2:1863
-9639:2:1864
-9640:2:1858
-9641:2:1859
-9642:2:1863
-9643:2:1864
-9644:2:1872
-9645:2:1877
-9646:2:1881
-9647:2:1882
-9648:2:1889
-9649:2:1890
-9650:2:1901
-9651:2:1902
-9652:2:1903
-9653:2:1901
-9654:2:1902
-9655:2:1903
-9656:2:1914
-9657:2:1919
-9658:2:1920
-9659:0:4365
-9660:2:1932
-9661:0:4365
-9662:3:3757
-9663:0:4365
-9664:2:1934
-9665:0:4365
-9666:3:3758
-9667:0:4365
-9668:2:1935
-9669:0:4365
-9670:2:1936
-9671:0:4365
-9672:2:2129
-9673:0:4365
-9674:2:2130
-9675:0:4365
-9676:2:2134
-9677:0:4365
-9678:3:3757
-9679:0:4365
-9680:2:2136
-9681:0:4365
-9682:3:3758
-9683:0:4365
-9684:2:2137
-9685:2:2141
-9686:2:2142
-9687:2:2150
-9688:2:2151
-9689:2:2155
-9690:2:2156
-9691:2:2150
-9692:2:2151
-9693:2:2155
-9694:2:2156
-9695:2:2164
-9696:2:2169
-9697:2:2173
-9698:2:2174
-9699:2:2181
-9700:2:2182
-9701:2:2193
-9702:2:2194
-9703:2:2195
-9704:2:2193
-9705:2:2194
-9706:2:2195
-9707:2:2206
-9708:2:2211
-9709:2:2212
-9710:0:4365
-9711:2:2224
-9712:0:4365
-9713:3:3757
-9714:0:4365
-9715:2:2226
-9716:0:4365
-9717:3:3758
-9718:0:4365
-9719:2:2230
-9720:0:4365
-9721:3:3757
-9722:0:4365
-9723:2:2235
-9724:2:2239
-9725:2:2240
-9726:2:2248
-9727:2:2249
-9728:2:2253
-9729:2:2254
-9730:2:2248
-9731:2:2249
-9732:2:2250
-9733:2:2262
-9734:2:2267
-9735:2:2271
-9736:2:2272
-9737:2:2279
-9738:2:2280
-9739:2:2291
-9740:2:2292
-9741:2:2293
-9742:2:2291
-9743:2:2292
-9744:2:2293
-9745:2:2304
-9746:2:2309
-9747:2:2310
-9748:0:4365
-9749:3:3758
-9750:0:4365
-9751:2:2322
-9752:0:4365
-9753:2:1169
-9754:0:4365
-9755:3:3757
-9756:0:4365
-9757:2:1170
-9758:0:4365
-9759:3:3758
-9760:0:4365
-9761:3:3759
-9762:0:4365
-9763:3:3972
-9764:0:4365
-9765:3:3980
-9766:0:4365
-9767:3:3981
-9768:3:3985
-9769:3:3986
-9770:3:3994
-9771:3:3995
-9772:3:3999
-9773:3:4000
-9774:3:3994
-9775:3:3995
-9776:3:3999
-9777:3:4000
-9778:3:4008
-9779:3:4013
-9780:3:4017
-9781:3:4018
-9782:3:4025
-9783:3:4026
-9784:3:4037
-9785:3:4038
-9786:3:4039
-9787:3:4037
-9788:3:4038
-9789:3:4039
-9790:3:4050
-9791:3:4055
-9792:3:4056
-9793:0:4365
-9794:3:4068
-9795:0:4365
-9796:3:4069
-9797:0:4365
-9798:2:1173
-9799:0:4365
-9800:3:4070
-9801:0:4365
-9802:2:1179
-9803:0:4365
-9804:2:1180
-9805:0:4365
-9806:3:4069
-9807:0:4365
-9808:2:1181
-9809:2:1185
-9810:2:1186
-9811:2:1194
-9812:2:1195
-9813:2:1199
-9814:2:1200
-9815:2:1194
-9816:2:1195
-9817:2:1199
-9818:2:1200
-9819:2:1208
-9820:2:1213
-9821:2:1217
-9822:2:1218
-9823:2:1225
-9824:2:1226
-9825:2:1237
-9826:2:1238
-9827:2:1239
-9828:2:1237
-9829:2:1238
-9830:2:1239
-9831:2:1250
-9832:2:1255
-9833:2:1256
-9834:0:4365
-9835:3:4070
-9836:0:4365
-9837:2:1268
-9838:0:4365
-9839:3:4069
-9840:0:4365
-9841:2:1270
-9842:0:4365
-9843:3:4070
-9844:0:4365
-9845:2:1271
-9846:2:1275
-9847:2:1276
-9848:2:1284
-9849:2:1285
-9850:2:1289
-9851:2:1290
-9852:2:1284
-9853:2:1285
-9854:2:1289
-9855:2:1290
-9856:2:1298
-9857:2:1303
-9858:2:1307
-9859:2:1308
-9860:2:1315
-9861:2:1316
-9862:2:1327
-9863:2:1328
-9864:2:1329
-9865:2:1327
-9866:2:1328
-9867:2:1329
-9868:2:1340
-9869:2:1345
-9870:2:1346
-9871:0:4365
-9872:2:1358
-9873:0:4365
-9874:2:1360
-9875:0:4365
-9876:3:4069
-9877:0:4365
-9878:2:1361
-9879:0:4365
-9880:3:4070
-9881:0:4365
-9882:2:1362
-9883:2:1366
-9884:2:1367
-9885:2:1375
-9886:2:1376
-9887:2:1380
-9888:2:1381
-9889:2:1375
-9890:2:1376
-9891:2:1380
-9892:2:1381
-9893:2:1389
-9894:2:1394
-9895:2:1398
-9896:2:1399
-9897:2:1406
-9898:2:1407
-9899:2:1418
-9900:2:1419
-9901:2:1420
-9902:2:1418
-9903:2:1419
-9904:2:1420
-9905:2:1431
-9906:2:1436
-9907:2:1437
-9908:0:4365
-9909:2:1449
-9910:0:4365
-9911:3:4069
-9912:0:4365
-9913:2:1451
-9914:0:4365
-9915:3:4070
-9916:0:4365
-9917:2:1652
-9918:0:4365
-9919:2:1653
-9920:0:4365
-9921:2:1657
-9922:0:4365
-9923:2:1660
-9924:0:4365
-9925:3:4069
-9926:0:4365
-9927:2:1665
-9928:2:1669
-9929:2:1670
-9930:2:1678
-9931:2:1679
-9932:2:1683
-9933:2:1684
-9934:2:1678
-9935:2:1679
-9936:2:1680
-9937:2:1692
-9938:2:1697
-9939:2:1701
-9940:2:1702
-9941:2:1709
-9942:2:1710
-9943:2:1721
-9944:2:1722
-9945:2:1723
-9946:2:1721
-9947:2:1722
-9948:2:1723
-9949:2:1734
-9950:2:1739
-9951:2:1740
-9952:0:4365
-9953:3:4070
-9954:0:4365
-9955:2:1752
-9956:0:4365
-9957:3:4069
-9958:0:4365
-9959:2:1754
-9960:0:4365
-9961:3:4070
-9962:0:4365
-9963:2:1755
-9964:2:1759
-9965:2:1760
-9966:2:1768
-9967:2:1769
-9968:2:1773
-9969:2:1774
-9970:2:1768
-9971:2:1769
-9972:2:1773
-9973:2:1774
-9974:2:1782
-9975:2:1787
-9976:2:1791
-9977:2:1792
-9978:2:1799
-9979:2:1800
-9980:2:1811
-9981:2:1812
-9982:2:1813
-9983:2:1811
-9984:2:1812
-9985:2:1813
-9986:2:1824
-9987:2:1829
-9988:2:1830
-9989:0:4365
-9990:2:1842
-9991:0:4365
-9992:3:4069
-9993:0:4365
-9994:2:1844
-9995:0:4365
-9996:3:4070
-9997:0:4365
-9998:2:1845
-9999:2:1849
-10000:2:1850
-10001:2:1858
-10002:2:1859
-10003:2:1863
-10004:2:1864
-10005:2:1858
-10006:2:1859
-10007:2:1863
-10008:2:1864
-10009:2:1872
-10010:2:1877
-10011:2:1881
-10012:2:1882
-10013:2:1889
-10014:2:1890
-10015:2:1901
-10016:2:1902
-10017:2:1903
-10018:2:1901
-10019:2:1902
-10020:2:1903
-10021:2:1914
-10022:2:1919
-10023:2:1920
-10024:0:4365
-10025:2:1932
-10026:0:4365
-10027:3:4069
-10028:0:4365
-10029:2:1934
-10030:0:4365
-10031:3:4070
-10032:0:4365
-10033:2:1935
-10034:0:4365
-10035:2:1936
-10036:0:4365
-10037:2:2129
-10038:0:4365
-10039:2:2130
-10040:0:4365
-10041:2:2134
-10042:0:4365
-10043:3:4069
-10044:0:4365
-10045:2:2136
-10046:0:4365
-10047:3:4070
-10048:0:4365
-10049:2:2137
-10050:2:2141
-10051:2:2142
-10052:2:2150
-10053:2:2151
-10054:2:2155
-10055:2:2156
-10056:2:2150
-10057:2:2151
-10058:2:2155
-10059:2:2156
-10060:2:2164
-10061:2:2169
-10062:2:2173
-10063:2:2174
-10064:2:2181
-10065:2:2182
-10066:2:2193
-10067:2:2194
-10068:2:2195
-10069:2:2193
-10070:2:2194
-10071:2:2195
-10072:2:2206
-10073:2:2211
-10074:2:2212
-10075:0:4365
-10076:2:2224
-10077:0:4365
-10078:3:4069
-10079:0:4365
-10080:2:2226
-10081:0:4365
-10082:3:4070
-10083:0:4365
-10084:2:2230
-10085:0:4365
-10086:3:4069
-10087:0:4365
-10088:2:2235
-10089:2:2239
-10090:2:2240
-10091:2:2248
-10092:2:2249
-10093:2:2253
-10094:2:2254
-10095:2:2248
-10096:2:2249
-10097:2:2250
-10098:2:2262
-10099:2:2267
-10100:2:2271
-10101:2:2272
-10102:2:2279
-10103:2:2280
-10104:2:2291
-10105:2:2292
-10106:2:2293
-10107:2:2291
-10108:2:2292
-10109:2:2293
-10110:2:2304
-10111:2:2309
-10112:2:2310
-10113:0:4365
-10114:3:4070
-10115:0:4365
-10116:2:2322
-10117:0:4365
-10118:2:1169
-10119:0:4365
-10120:3:4069
-10121:0:4365
-10122:2:1170
-10123:0:4365
-10124:3:4070
-10125:0:4365
-10126:3:4071
-10127:0:4365
-10128:3:4081
-10129:0:4365
-10130:3:3666
-10131:0:4365
-10132:3:3667
-10133:0:4365
-10134:3:3668
-10135:0:4365
-10136:3:3669
-10137:3:3673
-10138:3:3674
-10139:3:3682
-10140:3:3683
-10141:3:3687
-10142:3:3688
-10143:3:3682
-10144:3:3683
-10145:3:3687
-10146:3:3688
-10147:3:3696
-10148:3:3701
-10149:3:3705
-10150:3:3706
-10151:3:3713
-10152:3:3714
-10153:3:3725
-10154:3:3726
-10155:3:3727
-10156:3:3725
-10157:3:3726
-10158:3:3727
-10159:3:3738
-10160:3:3743
-10161:3:3744
-10162:0:4365
-10163:3:3756
-10164:0:4365
-10165:3:3757
-10166:0:4365
-10167:2:1173
-10168:0:4365
-10169:3:3758
-10170:0:4365
-10171:2:1179
-10172:0:4365
-10173:2:1180
-10174:0:4365
-10175:3:3757
-10176:0:4365
-10177:2:1181
-10178:2:1185
-10179:2:1186
-10180:2:1194
-10181:2:1195
-10182:2:1199
-10183:2:1200
-10184:2:1194
-10185:2:1195
-10186:2:1199
-10187:2:1200
-10188:2:1208
-10189:2:1213
-10190:2:1217
-10191:2:1218
-10192:2:1225
-10193:2:1226
-10194:2:1237
-10195:2:1238
-10196:2:1239
-10197:2:1237
-10198:2:1238
-10199:2:1239
-10200:2:1250
-10201:2:1255
-10202:2:1256
-10203:0:4365
-10204:3:3758
-10205:0:4365
-10206:2:1268
-10207:0:4365
-10208:3:3757
-10209:0:4365
-10210:2:1270
-10211:0:4365
-10212:3:3758
-10213:0:4365
-10214:2:1271
-10215:2:1275
-10216:2:1276
-10217:2:1284
-10218:2:1285
-10219:2:1289
-10220:2:1290
-10221:2:1284
-10222:2:1285
-10223:2:1289
-10224:2:1290
-10225:2:1298
-10226:2:1303
-10227:2:1307
-10228:2:1308
-10229:2:1315
-10230:2:1316
-10231:2:1327
-10232:2:1328
-10233:2:1329
-10234:2:1327
-10235:2:1328
-10236:2:1329
-10237:2:1340
-10238:2:1345
-10239:2:1346
-10240:0:4365
-10241:2:1358
-10242:0:4365
-10243:2:1360
-10244:0:4365
-10245:3:3757
-10246:0:4365
-10247:2:1361
-10248:0:4365
-10249:3:3758
-10250:0:4365
-10251:2:1362
-10252:2:1366
-10253:2:1367
-10254:2:1375
-10255:2:1376
-10256:2:1380
-10257:2:1381
-10258:2:1375
-10259:2:1376
-10260:2:1380
-10261:2:1381
-10262:2:1389
-10263:2:1394
-10264:2:1398
-10265:2:1399
-10266:2:1406
-10267:2:1407
-10268:2:1418
-10269:2:1419
-10270:2:1420
-10271:2:1418
-10272:2:1419
-10273:2:1420
-10274:2:1431
-10275:2:1436
-10276:2:1437
-10277:0:4365
-10278:2:1449
-10279:0:4365
-10280:3:3757
-10281:0:4365
-10282:2:1451
-10283:0:4365
-10284:3:3758
-10285:0:4365
-10286:2:1652
-10287:0:4365
-10288:2:1653
-10289:0:4365
-10290:2:1657
-10291:0:4365
-10292:2:1660
-10293:0:4365
-10294:3:3757
-10295:0:4365
-10296:2:1665
-10297:2:1669
-10298:2:1670
-10299:2:1678
-10300:2:1679
-10301:2:1683
-10302:2:1684
-10303:2:1678
-10304:2:1679
-10305:2:1680
-10306:2:1692
-10307:2:1697
-10308:2:1701
-10309:2:1702
-10310:2:1709
-10311:2:1710
-10312:2:1721
-10313:2:1722
-10314:2:1723
-10315:2:1721
-10316:2:1722
-10317:2:1723
-10318:2:1734
-10319:2:1739
-10320:2:1740
-10321:0:4365
-10322:3:3758
-10323:0:4365
-10324:2:1752
-10325:0:4365
-10326:3:3757
-10327:0:4365
-10328:2:1754
-10329:0:4365
-10330:3:3758
-10331:0:4365
-10332:2:1755
-10333:2:1759
-10334:2:1760
-10335:2:1768
-10336:2:1769
-10337:2:1773
-10338:2:1774
-10339:2:1768
-10340:2:1769
-10341:2:1773
-10342:2:1774
-10343:2:1782
-10344:2:1787
-10345:2:1791
-10346:2:1792
-10347:2:1799
-10348:2:1800
-10349:2:1811
-10350:2:1812
-10351:2:1813
-10352:2:1811
-10353:2:1812
-10354:2:1813
-10355:2:1824
-10356:2:1829
-10357:2:1830
-10358:0:4365
-10359:2:1842
-10360:0:4365
-10361:3:3757
-10362:0:4365
-10363:2:1844
-10364:0:4365
-10365:3:3758
-10366:0:4365
-10367:2:1845
-10368:2:1849
-10369:2:1850
-10370:2:1858
-10371:2:1859
-10372:2:1863
-10373:2:1864
-10374:2:1858
-10375:2:1859
-10376:2:1863
-10377:2:1864
-10378:2:1872
-10379:2:1877
-10380:2:1881
-10381:2:1882
-10382:2:1889
-10383:2:1890
-10384:2:1901
-10385:2:1902
-10386:2:1903
-10387:2:1901
-10388:2:1902
-10389:2:1903
-10390:2:1914
-10391:2:1919
-10392:2:1920
-10393:0:4365
-10394:2:1932
-10395:0:4365
-10396:3:3757
-10397:0:4365
-10398:2:1934
-10399:0:4365
-10400:3:3758
-10401:0:4365
-10402:2:1935
-10403:0:4365
-10404:2:1936
-10405:0:4365
-10406:2:2129
-10407:0:4365
-10408:2:2130
-10409:0:4365
-10410:2:2134
-10411:0:4365
-10412:3:3757
-10413:0:4365
-10414:2:2136
-10415:0:4365
-10416:3:3758
-10417:0:4365
-10418:2:2137
-10419:2:2141
-10420:2:2142
-10421:2:2150
-10422:2:2151
-10423:2:2155
-10424:2:2156
-10425:2:2150
-10426:2:2151
-10427:2:2155
-10428:2:2156
-10429:2:2164
-10430:2:2169
-10431:2:2173
-10432:2:2174
-10433:2:2181
-10434:2:2182
-10435:2:2193
-10436:2:2194
-10437:2:2195
-10438:2:2193
-10439:2:2194
-10440:2:2195
-10441:2:2206
-10442:2:2211
-10443:2:2212
-10444:0:4365
-10445:2:2224
-10446:0:4365
-10447:3:3757
-10448:0:4365
-10449:2:2226
-10450:0:4365
-10451:3:3758
-10452:0:4365
-10453:2:2230
-10454:0:4365
-10455:3:3757
-10456:0:4365
-10457:2:2235
-10458:2:2239
-10459:2:2240
-10460:2:2248
-10461:2:2249
-10462:2:2253
-10463:2:2254
-10464:2:2248
-10465:2:2249
-10466:2:2250
-10467:2:2262
-10468:2:2267
-10469:2:2271
-10470:2:2272
-10471:2:2279
-10472:2:2280
-10473:2:2291
-10474:2:2292
-10475:2:2293
-10476:2:2291
-10477:2:2292
-10478:2:2293
-10479:2:2304
-10480:2:2309
-10481:2:2310
-10482:0:4365
-10483:3:3758
-10484:0:4365
-10485:2:2322
-10486:0:4365
-10487:2:1169
-10488:0:4365
-10489:3:3757
-10490:0:4365
-10491:2:1170
-10492:0:4365
-10493:3:3758
-10494:0:4365
-10495:3:3759
-10496:0:4365
-10497:3:3972
-10498:0:4365
-10499:3:4077
-10500:0:4365
-10501:3:4078
-10502:0:4365
-10503:3:4082
-10504:0:4365
-10505:3:4088
-10506:0:4365
-10507:3:4092
-10508:3:4093
-10509:3:4097
-10510:3:4101
-10511:3:4102
-10512:3:4097
-10513:3:4101
-10514:3:4102
-10515:3:4106
-10516:3:4114
-10517:3:4115
-10518:3:4120
-10519:3:4127
-10520:3:4128
-10521:3:4127
-10522:3:4128
-10523:3:4135
-10524:3:4140
-10525:0:4365
-10526:3:4151
-10527:0:4365
-10528:3:4155
-10529:3:4156
-10530:3:4160
-10531:3:4164
-10532:3:4165
-10533:3:4160
-10534:3:4164
-10535:3:4165
-10536:3:4169
-10537:3:4177
-10538:3:4178
-10539:3:4183
-10540:3:4190
-10541:3:4191
-10542:3:4190
-10543:3:4191
-10544:3:4198
-10545:3:4203
-10546:0:4365
-10547:3:4151
-10548:0:4365
-10549:3:4155
-10550:3:4156
-10551:3:4160
-10552:3:4164
-10553:3:4165
-10554:3:4160
-10555:3:4164
-10556:3:4165
-10557:3:4169
-10558:3:4177
-10559:3:4178
-10560:3:4183
-10561:3:4190
-10562:3:4191
-10563:3:4190
-10564:3:4191
-10565:3:4198
-10566:3:4203
-10567:0:4365
-10568:3:4214
-10569:0:4365
-10570:3:4222
-10571:3:4223
-10572:3:4227
-10573:3:4231
-10574:3:4232
-10575:3:4227
-10576:3:4231
-10577:3:4232
-10578:3:4236
-10579:3:4244
-10580:3:4245
-10581:3:4250
-10582:3:4257
-10583:3:4258
-10584:3:4257
-10585:3:4258
-10586:3:4265
-10587:3:4270
-10588:0:4365
-10589:3:4285
-10590:0:4365
-10591:3:4286
-10592:0:4365
-10593:2:1173
-10594:0:4365
-10595:3:4287
-10596:0:4365
-10597:2:1179
-10598:0:4365
-10599:2:1180
-10600:0:4365
-10601:3:4286
-10602:0:4365
-10603:2:1181
-10604:2:1185
-10605:2:1186
-10606:2:1194
-10607:2:1195
-10608:2:1199
-10609:2:1200
-10610:2:1194
-10611:2:1195
-10612:2:1199
-10613:2:1200
-10614:2:1208
-10615:2:1213
-10616:2:1217
-10617:2:1218
-10618:2:1225
-10619:2:1226
-10620:2:1237
-10621:2:1238
-10622:2:1239
-10623:2:1237
-10624:2:1238
-10625:2:1239
-10626:2:1250
-10627:2:1255
-10628:2:1256
-10629:0:4365
-10630:3:4287
-10631:0:4365
-10632:2:1268
-10633:0:4365
-10634:3:4286
-10635:0:4365
-10636:2:1270
-10637:0:4365
-10638:3:4287
-10639:0:4365
-10640:2:1271
-10641:2:1275
-10642:2:1276
-10643:2:1284
-10644:2:1285
-10645:2:1289
-10646:2:1290
-10647:2:1284
-10648:2:1285
-10649:2:1289
-10650:2:1290
-10651:2:1298
-10652:2:1303
-10653:2:1307
-10654:2:1308
-10655:2:1315
-10656:2:1316
-10657:2:1327
-10658:2:1328
-10659:2:1329
-10660:2:1327
-10661:2:1328
-10662:2:1329
-10663:2:1340
-10664:2:1345
-10665:2:1346
-10666:0:4365
-10667:2:1358
-10668:0:4365
-10669:2:1360
-10670:0:4365
-10671:3:4286
-10672:0:4365
-10673:2:1361
-10674:0:4365
-10675:3:4287
-10676:0:4365
-10677:2:1362
-10678:2:1366
-10679:2:1367
-10680:2:1375
-10681:2:1376
-10682:2:1380
-10683:2:1381
-10684:2:1375
-10685:2:1376
-10686:2:1380
-10687:2:1381
-10688:2:1389
-10689:2:1394
-10690:2:1398
-10691:2:1399
-10692:2:1406
-10693:2:1407
-10694:2:1418
-10695:2:1419
-10696:2:1420
-10697:2:1418
-10698:2:1419
-10699:2:1420
-10700:2:1431
-10701:2:1436
-10702:2:1437
-10703:0:4365
-10704:2:1449
-10705:0:4365
-10706:3:4286
-10707:0:4365
-10708:2:1451
-10709:0:4365
-10710:3:4287
-10711:0:4365
-10712:2:1652
-10713:0:4365
-10714:2:1653
-10715:0:4365
-10716:2:1657
-10717:0:4365
-10718:2:1660
-10719:0:4365
-10720:3:4286
-10721:0:4365
-10722:2:1665
-10723:2:1669
-10724:2:1670
-10725:2:1678
-10726:2:1679
-10727:2:1683
-10728:2:1684
-10729:2:1678
-10730:2:1679
-10731:2:1680
-10732:2:1692
-10733:2:1697
-10734:2:1701
-10735:2:1702
-10736:2:1709
-10737:2:1710
-10738:2:1721
-10739:2:1722
-10740:2:1723
-10741:2:1721
-10742:2:1722
-10743:2:1723
-10744:2:1734
-10745:2:1739
-10746:2:1740
-10747:0:4365
-10748:3:4287
-10749:0:4365
-10750:2:1752
-10751:0:4365
-10752:3:4286
-10753:0:4365
-10754:2:1754
-10755:0:4365
-10756:3:4287
-10757:0:4365
-10758:2:1755
-10759:2:1759
-10760:2:1760
-10761:2:1768
-10762:2:1769
-10763:2:1773
-10764:2:1774
-10765:2:1768
-10766:2:1769
-10767:2:1773
-10768:2:1774
-10769:2:1782
-10770:2:1787
-10771:2:1791
-10772:2:1792
-10773:2:1799
-10774:2:1800
-10775:2:1811
-10776:2:1812
-10777:2:1813
-10778:2:1811
-10779:2:1812
-10780:2:1813
-10781:2:1824
-10782:2:1829
-10783:2:1830
-10784:0:4365
-10785:2:1842
-10786:0:4365
-10787:3:4286
-10788:0:4365
-10789:2:1844
-10790:0:4365
-10791:3:4287
-10792:0:4365
-10793:2:1845
-10794:2:1849
-10795:2:1850
-10796:2:1858
-10797:2:1859
-10798:2:1863
-10799:2:1864
-10800:2:1858
-10801:2:1859
-10802:2:1863
-10803:2:1864
-10804:2:1872
-10805:2:1877
-10806:2:1881
-10807:2:1882
-10808:2:1889
-10809:2:1890
-10810:2:1901
-10811:2:1902
-10812:2:1903
-10813:2:1901
-10814:2:1902
-10815:2:1903
-10816:2:1914
-10817:2:1919
-10818:2:1920
-10819:0:4365
-10820:2:1932
-10821:0:4365
-10822:3:4286
-10823:0:4365
-10824:2:1934
-10825:0:4365
-10826:3:4287
-10827:0:4365
-10828:2:1935
-10829:0:4365
-10830:2:1936
-10831:0:4365
-10832:2:2129
-10833:0:4365
-10834:2:2130
-10835:0:4365
-10836:2:2134
-10837:0:4365
-10838:3:4286
-10839:0:4365
-10840:2:2136
-10841:0:4365
-10842:3:4287
-10843:0:4365
-10844:2:2137
-10845:2:2141
-10846:2:2142
-10847:2:2150
-10848:2:2151
-10849:2:2155
-10850:2:2156
-10851:2:2150
-10852:2:2151
-10853:2:2155
-10854:2:2156
-10855:2:2164
-10856:2:2169
-10857:2:2173
-10858:2:2174
-10859:2:2181
-10860:2:2182
-10861:2:2193
-10862:2:2194
-10863:2:2195
-10864:2:2193
-10865:2:2194
-10866:2:2195
-10867:2:2206
-10868:2:2211
-10869:2:2212
-10870:0:4365
-10871:2:2224
-10872:0:4365
-10873:3:4286
-10874:0:4365
-10875:2:2226
-10876:0:4365
-10877:3:4287
-10878:0:4365
-10879:2:2230
-10880:0:4365
-10881:3:4286
-10882:0:4365
-10883:2:2235
-10884:2:2239
-10885:2:2240
-10886:2:2248
-10887:2:2249
-10888:2:2253
-10889:2:2254
-10890:2:2248
-10891:2:2249
-10892:2:2250
-10893:2:2262
-10894:2:2267
-10895:2:2271
-10896:2:2272
-10897:2:2279
-10898:2:2280
-10899:2:2291
-10900:2:2292
-10901:2:2293
-10902:2:2291
-10903:2:2292
-10904:2:2293
-10905:2:2304
-10906:2:2309
-10907:2:2310
-10908:0:4365
-10909:3:4287
-10910:0:4365
-10911:2:2322
-10912:0:4365
-10913:2:1169
-10914:0:4365
-10915:3:4286
-10916:0:4365
-10917:2:1170
-10918:0:4365
-10919:3:4287
-10920:0:4365
-10921:3:4288
-10922:0:4365
-10923:3:4294
-10924:0:4365
-10925:3:4295
-10926:0:4365
-10927:3:2338
-10928:0:4365
-10929:3:2339
-10930:3:2343
-10931:3:2344
-10932:3:2352
-10933:3:2353
-10934:3:2357
-10935:3:2358
-10936:3:2352
-10937:3:2353
-10938:3:2357
-10939:3:2358
-10940:3:2366
-10941:3:2371
-10942:3:2375
-10943:3:2376
-10944:3:2383
-10945:3:2384
-10946:3:2395
-10947:3:2396
-10948:3:2397
-10949:3:2395
-10950:3:2396
-10951:3:2397
-10952:3:2408
-10953:3:2413
-10954:3:2414
-10955:0:4365
-10956:3:2426
-10957:0:4365
-10958:3:2427
-10959:0:4365
-10960:2:1173
-10961:0:4365
-10962:3:2428
-10963:0:4365
-10964:2:1179
-10965:0:4365
-10966:2:1180
-10967:0:4365
-10968:3:2427
-10969:0:4365
-10970:2:1181
-10971:2:1185
-10972:2:1186
-10973:2:1194
-10974:2:1195
-10975:2:1199
-10976:2:1200
-10977:2:1194
-10978:2:1195
-10979:2:1199
-10980:2:1200
-10981:2:1208
-10982:2:1213
-10983:2:1217
-10984:2:1218
-10985:2:1225
-10986:2:1226
-10987:2:1237
-10988:2:1238
-10989:2:1239
-10990:2:1237
-10991:2:1238
-10992:2:1239
-10993:2:1250
-10994:2:1255
-10995:2:1256
-10996:0:4365
-10997:3:2428
-10998:0:4365
-10999:2:1268
-11000:0:4365
-11001:3:2427
-11002:0:4365
-11003:2:1270
-11004:0:4365
-11005:3:2428
-11006:0:4365
-11007:2:1271
-11008:2:1275
-11009:2:1276
-11010:2:1284
-11011:2:1285
-11012:2:1289
-11013:2:1290
-11014:2:1284
-11015:2:1285
-11016:2:1289
-11017:2:1290
-11018:2:1298
-11019:2:1303
-11020:2:1307
-11021:2:1308
-11022:2:1315
-11023:2:1316
-11024:2:1327
-11025:2:1328
-11026:2:1329
-11027:2:1327
-11028:2:1328
-11029:2:1329
-11030:2:1340
-11031:2:1345
-11032:2:1346
-11033:0:4365
-11034:2:1358
-11035:0:4365
-11036:2:1360
-11037:0:4365
-11038:3:2427
-11039:0:4365
-11040:2:1361
-11041:0:4365
-11042:3:2428
-11043:0:4365
-11044:2:1362
-11045:2:1366
-11046:2:1367
-11047:2:1375
-11048:2:1376
-11049:2:1380
-11050:2:1381
-11051:2:1375
-11052:2:1376
-11053:2:1380
-11054:2:1381
-11055:2:1389
-11056:2:1394
-11057:2:1398
-11058:2:1399
-11059:2:1406
-11060:2:1407
-11061:2:1418
-11062:2:1419
-11063:2:1420
-11064:2:1418
-11065:2:1419
-11066:2:1420
-11067:2:1431
-11068:2:1436
-11069:2:1437
-11070:0:4365
-11071:2:1449
-11072:0:4365
-11073:3:2427
-11074:0:4365
-11075:2:1451
-11076:0:4365
-11077:3:2428
-11078:0:4365
-11079:2:1652
-11080:0:4365
-11081:2:1653
-11082:0:4365
-11083:2:1657
-11084:0:4365
-11085:2:1660
-11086:0:4365
-11087:3:2427
-11088:0:4365
-11089:2:1665
-11090:2:1669
-11091:2:1670
-11092:2:1678
-11093:2:1679
-11094:2:1683
-11095:2:1684
-11096:2:1678
-11097:2:1679
-11098:2:1680
-11099:2:1692
-11100:2:1697
-11101:2:1701
-11102:2:1702
-11103:2:1709
-11104:2:1710
-11105:2:1721
-11106:2:1722
-11107:2:1723
-11108:2:1721
-11109:2:1722
-11110:2:1723
-11111:2:1734
-11112:2:1739
-11113:2:1740
-11114:0:4365
-11115:3:2428
-11116:0:4365
-11117:2:1752
-11118:0:4365
-11119:3:2427
-11120:0:4365
-11121:2:1754
-11122:0:4365
-11123:3:2428
-11124:0:4365
-11125:2:1755
-11126:2:1759
-11127:2:1760
-11128:2:1768
-11129:2:1769
-11130:2:1773
-11131:2:1774
-11132:2:1768
-11133:2:1769
-11134:2:1773
-11135:2:1774
-11136:2:1782
-11137:2:1787
-11138:2:1791
-11139:2:1792
-11140:2:1799
-11141:2:1800
-11142:2:1811
-11143:2:1812
-11144:2:1813
-11145:2:1811
-11146:2:1812
-11147:2:1813
-11148:2:1824
-11149:2:1829
-11150:2:1830
-11151:0:4365
-11152:2:1842
-11153:0:4365
-11154:3:2427
-11155:0:4365
-11156:2:1844
-11157:0:4363
-11158:3:2428
-11159:0:4369
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.define b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.log b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.log
deleted file mode 100644 (file)
index c420e43..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_mb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-pan: claim violated! (at depth 2071)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 72 byte, depth reached 5140, errors: 1
-   264561 states, stored
-  3902374 states, matched
-  4166935 transitions (= stored+matched)
- 15172302 atomic steps
-hash conflicts:    196282 (resolved)
-
-Stats on memory usage (in Megabytes):
-   25.231      equivalent memory usage for states (stored*(State-vector + overhead))
-   16.681      actual memory usage for states (compression: 66.12%)
-               state-vector as stored = 38 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  482.365      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 151, "(1)"
-       line 419, "pan.___", state 181, "(1)"
-       line 400, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 242, "(1)"
-       line 419, "pan.___", state 272, "(1)"
-       line 400, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 331, "(1)"
-       line 409, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 360, "(1)"
-       line 419, "pan.___", state 390, "(1)"
-       line 541, "pan.___", state 414, "-end-"
-       (18 of 414 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 421, "pan.___", state 97, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 410, "pan.___", state 153, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 400, "pan.___", state 209, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 223, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 254, "(1)"
-       line 414, "pan.___", state 267, "(1)"
-       line 400, "pan.___", state 300, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 314, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 345, "(1)"
-       line 414, "pan.___", state 358, "(1)"
-       line 400, "pan.___", state 395, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 409, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 440, "(1)"
-       line 414, "pan.___", state 453, "(1)"
-       line 400, "pan.___", state 488, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 502, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 533, "(1)"
-       line 414, "pan.___", state 546, "(1)"
-       line 400, "pan.___", state 582, "(1)"
-       line 404, "pan.___", state 594, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 638, "(1)"
-       line 404, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 731, "(1)"
-       line 404, "pan.___", state 777, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 795, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 821, "(1)"
-       line 419, "pan.___", state 838, "(1)"
-       line 404, "pan.___", state 868, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 886, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 912, "(1)"
-       line 419, "pan.___", state 929, "(1)"
-       line 404, "pan.___", state 963, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 981, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1007, "(1)"
-       line 419, "pan.___", state 1024, "(1)"
-       line 400, "pan.___", state 1050, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1053, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1053, "else"
-       line 400, "pan.___", state 1056, "(1)"
-       line 404, "pan.___", state 1064, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1066, "(1)"
-       line 404, "pan.___", state 1067, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1067, "else"
-       line 404, "pan.___", state 1070, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 404, "pan.___", state 1071, "(1)"
-       line 402, "pan.___", state 1076, "((i<1))"
-       line 402, "pan.___", state 1076, "((i>=1))"
-       line 409, "pan.___", state 1082, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1095, "(1)"
-       line 410, "pan.___", state 1096, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1096, "else"
-       line 410, "pan.___", state 1099, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 410, "pan.___", state 1100, "(1)"
-       line 414, "pan.___", state 1108, "(1)"
-       line 414, "pan.___", state 1109, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1109, "else"
-       line 414, "pan.___", state 1112, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 414, "pan.___", state 1113, "(1)"
-       line 412, "pan.___", state 1118, "((i<1))"
-       line 412, "pan.___", state 1118, "((i>=1))"
-       line 419, "pan.___", state 1125, "(1)"
-       line 419, "pan.___", state 1126, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1126, "else"
-       line 419, "pan.___", state 1129, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 419, "pan.___", state 1130, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 421, "pan.___", state 1133, "(1)"
-       line 404, "pan.___", state 1164, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1208, "(1)"
-       line 404, "pan.___", state 1254, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1298, "(1)"
-       line 400, "pan.___", state 1334, "(1)"
-       line 404, "pan.___", state 1346, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1390, "(1)"
-       line 404, "pan.___", state 1439, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1483, "(1)"
-       line 404, "pan.___", state 1529, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1547, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1573, "(1)"
-       line 419, "pan.___", state 1590, "(1)"
-       line 404, "pan.___", state 1620, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1638, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1664, "(1)"
-       line 419, "pan.___", state 1681, "(1)"
-       line 404, "pan.___", state 1715, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1733, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1759, "(1)"
-       line 419, "pan.___", state 1776, "(1)"
-       line 400, "pan.___", state 1802, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1804, "(1)"
-       line 400, "pan.___", state 1805, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1805, "else"
-       line 400, "pan.___", state 1808, "(1)"
-       line 404, "pan.___", state 1816, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1818, "(1)"
-       line 404, "pan.___", state 1819, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1819, "else"
-       line 404, "pan.___", state 1822, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 404, "pan.___", state 1823, "(1)"
-       line 402, "pan.___", state 1828, "((i<1))"
-       line 402, "pan.___", state 1828, "((i>=1))"
-       line 409, "pan.___", state 1834, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1847, "(1)"
-       line 410, "pan.___", state 1848, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1848, "else"
-       line 410, "pan.___", state 1851, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 410, "pan.___", state 1852, "(1)"
-       line 414, "pan.___", state 1860, "(1)"
-       line 414, "pan.___", state 1861, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1861, "else"
-       line 414, "pan.___", state 1864, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 414, "pan.___", state 1865, "(1)"
-       line 412, "pan.___", state 1870, "((i<1))"
-       line 412, "pan.___", state 1870, "((i>=1))"
-       line 419, "pan.___", state 1877, "(1)"
-       line 419, "pan.___", state 1878, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1878, "else"
-       line 419, "pan.___", state 1881, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 419, "pan.___", state 1882, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 421, "pan.___", state 1885, "(1)"
-       line 404, "pan.___", state 1916, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1960, "(1)"
-       line 404, "pan.___", state 2007, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2051, "(1)"
-       line 404, "pan.___", state 2102, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 2146, "(1)"
-       line 703, "pan.___", state 2192, "-end-"
-       (144 of 2192 states)
-unreached in proctype :init:
-       line 710, "pan.___", state 9, "((j<2))"
-       line 710, "pan.___", state 9, "((j>=2))"
-       line 711, "pan.___", state 20, "((j<2))"
-       line 711, "pan.___", state 20, "((j>=2))"
-       line 716, "pan.___", state 33, "((j<2))"
-       line 716, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 750, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 3.37 seconds
-pan: rate 78504.748 states/second
-pan: avg transition delay 8.0875e-07 usec
-cp .input.spin urcu_free_no_mb.spin.input
-cp .input.spin.trail urcu_free_no_mb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.spin.input
deleted file mode 100644 (file)
index 3831d86..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define NO_RMB
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_mb.spin.input.trail
deleted file mode 100644 (file)
index 7b2040a..0000000
+++ /dev/null
@@ -1,2074 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2654
-2:3:2606
-3:3:2609
-4:3:2609
-5:3:2612
-6:3:2620
-7:3:2620
-8:3:2623
-9:3:2629
-10:3:2633
-11:3:2633
-12:3:2636
-13:3:2644
-14:3:2648
-15:3:2649
-16:0:2654
-17:3:2651
-18:0:2654
-19:2:416
-20:0:2654
-21:2:422
-22:0:2654
-23:2:423
-24:0:2654
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:2654
-45:2:511
-46:0:2654
-47:2:513
-48:2:514
-49:0:2654
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:2654
-69:2:605
-70:0:2654
-71:2:607
-72:0:2654
-73:2:608
-74:0:2654
-75:2:618
-76:0:2654
-77:2:619
-78:2:623
-79:2:624
-80:2:632
-81:2:633
-82:2:637
-83:2:638
-84:2:646
-85:2:651
-86:2:655
-87:2:656
-88:2:663
-89:2:664
-90:2:675
-91:2:676
-92:2:677
-93:2:688
-94:2:693
-95:2:694
-96:0:2654
-97:2:709
-98:0:2654
-99:2:710
-100:2:714
-101:2:715
-102:2:723
-103:2:724
-104:2:728
-105:2:729
-106:2:737
-107:2:742
-108:2:746
-109:2:747
-110:2:754
-111:2:755
-112:2:766
-113:2:767
-114:2:768
-115:2:779
-116:2:784
-117:2:785
-118:0:2654
-119:2:800
-120:0:2654
-121:2:805
-122:2:809
-123:2:810
-124:2:818
-125:2:819
-126:2:823
-127:2:824
-128:2:832
-129:2:837
-130:2:841
-131:2:842
-132:2:849
-133:2:850
-134:2:861
-135:2:862
-136:2:863
-137:2:874
-138:2:879
-139:2:880
-140:0:2654
-141:2:895
-142:0:2654
-143:2:897
-144:0:2654
-145:2:898
-146:2:902
-147:2:903
-148:2:911
-149:2:912
-150:2:916
-151:2:917
-152:2:925
-153:2:930
-154:2:934
-155:2:935
-156:2:942
-157:2:943
-158:2:954
-159:2:955
-160:2:956
-161:2:967
-162:2:972
-163:2:973
-164:0:2654
-165:2:985
-166:0:2654
-167:2:987
-168:0:2654
-169:2:990
-170:2:991
-171:2:1003
-172:2:1004
-173:2:1008
-174:2:1009
-175:2:1017
-176:2:1022
-177:2:1026
-178:2:1027
-179:2:1034
-180:2:1035
-181:2:1046
-182:2:1047
-183:2:1048
-184:2:1059
-185:2:1064
-186:2:1065
-187:0:2654
-188:2:1077
-189:0:2654
-190:2:1079
-191:0:2654
-192:2:1080
-193:0:2654
-194:2:1081
-195:0:2654
-196:2:1082
-197:0:2654
-198:2:1083
-199:2:1087
-200:2:1088
-201:2:1096
-202:2:1097
-203:2:1101
-204:2:1102
-205:2:1110
-206:2:1115
-207:2:1119
-208:2:1120
-209:2:1127
-210:2:1128
-211:2:1139
-212:2:1140
-213:2:1141
-214:2:1152
-215:2:1157
-216:2:1158
-217:0:2654
-218:2:1170
-219:0:2654
-220:2:1451
-221:0:2654
-222:2:1549
-223:0:2654
-224:2:1550
-225:0:2654
-226:2:1554
-227:0:2654
-228:2:1560
-229:2:1564
-230:2:1565
-231:2:1573
-232:2:1574
-233:2:1578
-234:2:1579
-235:2:1587
-236:2:1592
-237:2:1596
-238:2:1597
-239:2:1604
-240:2:1605
-241:2:1616
-242:2:1617
-243:2:1618
-244:2:1629
-245:2:1634
-246:2:1635
-247:0:2654
-248:2:1647
-249:0:2654
-250:2:1649
-251:0:2654
-252:2:1650
-253:2:1654
-254:2:1655
-255:2:1663
-256:2:1664
-257:2:1668
-258:2:1669
-259:2:1677
-260:2:1682
-261:2:1686
-262:2:1687
-263:2:1694
-264:2:1695
-265:2:1706
-266:2:1707
-267:2:1708
-268:2:1719
-269:2:1724
-270:2:1725
-271:0:2654
-272:2:1737
-273:0:2654
-274:2:1739
-275:0:2654
-276:2:1742
-277:2:1743
-278:2:1755
-279:2:1756
-280:2:1760
-281:2:1761
-282:2:1769
-283:2:1774
-284:2:1778
-285:2:1779
-286:2:1786
-287:2:1787
-288:2:1798
-289:2:1799
-290:2:1800
-291:2:1811
-292:2:1816
-293:2:1817
-294:0:2654
-295:2:1829
-296:0:2654
-297:2:1831
-298:0:2654
-299:2:1832
-300:0:2654
-301:2:1833
-302:0:2654
-303:2:1834
-304:0:2654
-305:2:1835
-306:2:1839
-307:2:1840
-308:2:1848
-309:2:1849
-310:2:1853
-311:2:1854
-312:2:1862
-313:2:1867
-314:2:1871
-315:2:1872
-316:2:1879
-317:2:1880
-318:2:1891
-319:2:1892
-320:2:1893
-321:2:1904
-322:2:1909
-323:2:1910
-324:0:2654
-325:2:1922
-326:0:2654
-327:2:2203
-328:0:2654
-329:2:2301
-330:0:2654
-331:2:2302
-332:0:2654
-333:2:2306
-334:0:2654
-335:2:2312
-336:2:2316
-337:2:2317
-338:2:2325
-339:2:2326
-340:2:2330
-341:2:2331
-342:2:2339
-343:2:2344
-344:2:2348
-345:2:2349
-346:2:2356
-347:2:2357
-348:2:2368
-349:2:2369
-350:2:2370
-351:2:2381
-352:2:2386
-353:2:2387
-354:0:2654
-355:2:2402
-356:0:2654
-357:2:2403
-358:2:2407
-359:2:2408
-360:2:2416
-361:2:2417
-362:2:2421
-363:2:2422
-364:2:2430
-365:2:2435
-366:2:2439
-367:2:2440
-368:2:2447
-369:2:2448
-370:2:2459
-371:2:2460
-372:2:2461
-373:2:2472
-374:2:2477
-375:2:2478
-376:0:2654
-377:2:2493
-378:0:2654
-379:2:2498
-380:2:2502
-381:2:2503
-382:2:2511
-383:2:2512
-384:2:2516
-385:2:2517
-386:2:2525
-387:2:2530
-388:2:2534
-389:2:2535
-390:2:2542
-391:2:2543
-392:2:2554
-393:2:2555
-394:2:2556
-395:2:2567
-396:2:2572
-397:2:2573
-398:0:2654
-399:2:2588
-400:0:2654
-401:2:2590
-402:0:2654
-403:2:2591
-404:0:2654
-405:2:423
-406:0:2654
-407:2:424
-408:2:428
-409:2:429
-410:2:437
-411:2:438
-412:2:442
-413:2:443
-414:2:451
-415:2:456
-416:2:460
-417:2:461
-418:2:468
-419:2:469
-420:2:480
-421:2:481
-422:2:482
-423:2:493
-424:2:498
-425:2:499
-426:0:2654
-427:2:511
-428:0:2654
-429:2:513
-430:2:514
-431:0:2654
-432:2:518
-433:2:522
-434:2:523
-435:2:531
-436:2:532
-437:2:536
-438:2:537
-439:2:545
-440:2:550
-441:2:551
-442:2:562
-443:2:563
-444:2:574
-445:2:575
-446:2:576
-447:2:587
-448:2:592
-449:2:593
-450:0:2654
-451:2:605
-452:0:2654
-453:2:607
-454:0:2654
-455:2:608
-456:0:2654
-457:2:618
-458:0:2654
-459:2:619
-460:2:623
-461:2:624
-462:2:632
-463:2:633
-464:2:637
-465:2:638
-466:2:646
-467:2:651
-468:2:655
-469:2:656
-470:2:663
-471:2:664
-472:2:675
-473:2:676
-474:2:677
-475:2:688
-476:2:693
-477:2:694
-478:0:2654
-479:2:709
-480:0:2654
-481:2:710
-482:2:714
-483:2:715
-484:2:723
-485:2:724
-486:2:728
-487:2:729
-488:2:737
-489:2:742
-490:2:746
-491:2:747
-492:2:754
-493:2:755
-494:2:766
-495:2:767
-496:2:768
-497:2:779
-498:2:784
-499:2:785
-500:0:2654
-501:2:800
-502:0:2654
-503:2:805
-504:2:809
-505:2:810
-506:2:818
-507:2:819
-508:2:823
-509:2:824
-510:2:832
-511:2:837
-512:2:841
-513:2:842
-514:2:849
-515:2:850
-516:2:861
-517:2:862
-518:2:863
-519:2:874
-520:2:879
-521:2:880
-522:0:2654
-523:2:895
-524:0:2654
-525:2:897
-526:0:2654
-527:2:898
-528:2:902
-529:2:903
-530:2:911
-531:2:912
-532:2:916
-533:2:917
-534:2:925
-535:2:930
-536:2:934
-537:2:935
-538:2:942
-539:2:943
-540:2:954
-541:2:955
-542:2:956
-543:2:967
-544:2:972
-545:2:973
-546:0:2654
-547:2:985
-548:0:2654
-549:2:987
-550:0:2654
-551:2:990
-552:2:991
-553:2:1003
-554:2:1004
-555:2:1008
-556:2:1009
-557:2:1017
-558:2:1022
-559:2:1026
-560:2:1027
-561:2:1034
-562:2:1035
-563:2:1046
-564:2:1047
-565:2:1048
-566:2:1059
-567:2:1064
-568:2:1065
-569:0:2654
-570:2:1077
-571:0:2654
-572:2:1079
-573:0:2654
-574:2:1080
-575:0:2654
-576:2:1081
-577:0:2654
-578:2:1082
-579:0:2654
-580:2:1083
-581:2:1087
-582:2:1088
-583:2:1096
-584:2:1097
-585:2:1101
-586:2:1102
-587:2:1110
-588:2:1115
-589:2:1119
-590:2:1120
-591:2:1127
-592:2:1128
-593:2:1139
-594:2:1140
-595:2:1141
-596:2:1152
-597:2:1157
-598:2:1158
-599:0:2654
-600:2:1170
-601:0:2654
-602:2:1451
-603:0:2654
-604:2:1549
-605:0:2654
-606:2:1550
-607:0:2654
-608:2:1554
-609:0:2654
-610:2:1560
-611:2:1564
-612:2:1565
-613:2:1573
-614:2:1574
-615:2:1578
-616:2:1579
-617:2:1587
-618:2:1592
-619:2:1596
-620:2:1597
-621:2:1604
-622:2:1605
-623:2:1616
-624:2:1617
-625:2:1618
-626:2:1629
-627:2:1634
-628:2:1635
-629:0:2654
-630:2:1647
-631:0:2654
-632:2:1649
-633:0:2654
-634:2:1650
-635:2:1654
-636:2:1655
-637:2:1663
-638:2:1664
-639:2:1668
-640:2:1669
-641:2:1677
-642:2:1682
-643:2:1686
-644:2:1687
-645:2:1694
-646:2:1695
-647:2:1706
-648:2:1707
-649:2:1708
-650:2:1719
-651:2:1724
-652:2:1725
-653:0:2654
-654:2:1737
-655:0:2654
-656:2:1739
-657:0:2654
-658:2:1742
-659:2:1743
-660:2:1755
-661:2:1756
-662:2:1760
-663:2:1761
-664:2:1769
-665:2:1774
-666:2:1778
-667:2:1779
-668:2:1786
-669:2:1787
-670:2:1798
-671:2:1799
-672:2:1800
-673:2:1811
-674:2:1816
-675:2:1817
-676:0:2654
-677:2:1829
-678:0:2654
-679:2:1831
-680:0:2654
-681:2:1832
-682:0:2654
-683:2:1833
-684:0:2654
-685:2:1834
-686:0:2654
-687:2:1835
-688:2:1839
-689:2:1840
-690:2:1848
-691:2:1849
-692:2:1853
-693:2:1854
-694:2:1862
-695:2:1867
-696:2:1871
-697:2:1872
-698:2:1879
-699:2:1880
-700:2:1891
-701:2:1892
-702:2:1893
-703:2:1904
-704:2:1909
-705:2:1910
-706:0:2654
-707:2:1922
-708:0:2654
-709:2:2203
-710:0:2654
-711:2:2301
-712:0:2654
-713:2:2302
-714:0:2654
-715:2:2306
-716:0:2654
-717:2:2312
-718:2:2316
-719:2:2317
-720:2:2325
-721:2:2326
-722:2:2330
-723:2:2331
-724:2:2339
-725:2:2344
-726:2:2348
-727:2:2349
-728:2:2356
-729:2:2357
-730:2:2368
-731:2:2369
-732:2:2370
-733:2:2381
-734:2:2386
-735:2:2387
-736:0:2654
-737:2:2402
-738:0:2654
-739:2:2403
-740:2:2407
-741:2:2408
-742:2:2416
-743:2:2417
-744:2:2421
-745:2:2422
-746:2:2430
-747:2:2435
-748:2:2439
-749:2:2440
-750:2:2447
-751:2:2448
-752:2:2459
-753:2:2460
-754:2:2461
-755:2:2472
-756:2:2477
-757:2:2478
-758:0:2654
-759:2:2493
-760:0:2654
-761:2:2498
-762:2:2502
-763:2:2503
-764:2:2511
-765:2:2512
-766:2:2516
-767:2:2517
-768:2:2525
-769:2:2530
-770:2:2534
-771:2:2535
-772:2:2542
-773:2:2543
-774:2:2554
-775:2:2555
-776:2:2556
-777:2:2567
-778:2:2572
-779:2:2573
-780:0:2654
-781:2:2588
-782:0:2654
-783:2:2590
-784:0:2654
-785:2:2591
-786:0:2654
-787:2:423
-788:0:2654
-789:2:424
-790:2:428
-791:2:429
-792:2:437
-793:2:438
-794:2:442
-795:2:443
-796:2:451
-797:2:456
-798:2:460
-799:2:461
-800:2:468
-801:2:469
-802:2:480
-803:2:481
-804:2:482
-805:2:493
-806:2:498
-807:2:499
-808:0:2654
-809:2:511
-810:0:2654
-811:2:513
-812:2:514
-813:0:2654
-814:2:518
-815:2:522
-816:2:523
-817:2:531
-818:2:532
-819:2:536
-820:2:537
-821:2:545
-822:2:550
-823:2:551
-824:2:562
-825:2:563
-826:2:574
-827:2:575
-828:2:576
-829:2:587
-830:2:592
-831:2:593
-832:0:2654
-833:2:605
-834:0:2654
-835:2:607
-836:0:2654
-837:2:608
-838:0:2654
-839:2:618
-840:0:2654
-841:2:619
-842:2:623
-843:2:624
-844:2:632
-845:2:633
-846:2:637
-847:2:638
-848:2:646
-849:2:651
-850:2:655
-851:2:656
-852:2:663
-853:2:664
-854:2:675
-855:2:676
-856:2:677
-857:2:688
-858:2:693
-859:2:694
-860:0:2654
-861:2:709
-862:0:2654
-863:2:710
-864:2:714
-865:2:715
-866:2:723
-867:2:724
-868:2:728
-869:2:729
-870:2:737
-871:2:742
-872:2:746
-873:2:747
-874:2:754
-875:2:755
-876:2:766
-877:2:767
-878:2:768
-879:2:779
-880:2:784
-881:2:785
-882:0:2654
-883:2:800
-884:0:2654
-885:2:805
-886:2:809
-887:2:810
-888:2:818
-889:2:819
-890:2:823
-891:2:824
-892:2:832
-893:2:837
-894:2:841
-895:2:842
-896:2:849
-897:2:850
-898:2:861
-899:2:862
-900:2:863
-901:2:874
-902:2:879
-903:2:880
-904:0:2654
-905:2:895
-906:0:2654
-907:2:897
-908:0:2654
-909:2:898
-910:2:902
-911:2:903
-912:2:911
-913:2:912
-914:2:916
-915:2:917
-916:2:925
-917:2:930
-918:2:934
-919:2:935
-920:2:942
-921:2:943
-922:2:954
-923:2:955
-924:2:956
-925:2:967
-926:2:972
-927:2:973
-928:0:2654
-929:2:985
-930:0:2654
-931:2:987
-932:0:2654
-933:2:990
-934:2:991
-935:2:1003
-936:2:1004
-937:2:1008
-938:2:1009
-939:2:1017
-940:2:1022
-941:2:1026
-942:2:1027
-943:2:1034
-944:2:1035
-945:2:1046
-946:2:1047
-947:2:1048
-948:2:1059
-949:2:1064
-950:2:1065
-951:0:2654
-952:2:1077
-953:0:2654
-954:2:1079
-955:0:2654
-956:2:1080
-957:0:2654
-958:2:1081
-959:0:2654
-960:2:1082
-961:0:2654
-962:2:1083
-963:2:1087
-964:2:1088
-965:2:1096
-966:2:1097
-967:2:1101
-968:2:1102
-969:2:1110
-970:2:1115
-971:2:1119
-972:2:1120
-973:2:1127
-974:2:1128
-975:2:1139
-976:2:1140
-977:2:1141
-978:2:1152
-979:2:1157
-980:2:1158
-981:0:2654
-982:2:1170
-983:0:2654
-984:2:1451
-985:0:2654
-986:2:1549
-987:0:2654
-988:2:1550
-989:0:2654
-990:2:1554
-991:0:2654
-992:2:1560
-993:2:1564
-994:2:1565
-995:2:1573
-996:2:1574
-997:2:1578
-998:2:1579
-999:2:1587
-1000:2:1592
-1001:2:1596
-1002:2:1597
-1003:2:1604
-1004:2:1605
-1005:2:1616
-1006:2:1617
-1007:2:1618
-1008:2:1629
-1009:2:1634
-1010:2:1635
-1011:0:2654
-1012:2:1647
-1013:0:2654
-1014:2:1649
-1015:0:2654
-1016:2:1650
-1017:2:1654
-1018:2:1655
-1019:2:1663
-1020:2:1664
-1021:2:1668
-1022:2:1669
-1023:2:1677
-1024:2:1682
-1025:2:1686
-1026:2:1687
-1027:2:1694
-1028:2:1695
-1029:2:1706
-1030:2:1707
-1031:2:1708
-1032:2:1719
-1033:2:1724
-1034:2:1725
-1035:0:2654
-1036:2:1737
-1037:0:2654
-1038:2:1739
-1039:0:2654
-1040:2:1742
-1041:2:1743
-1042:2:1755
-1043:2:1756
-1044:2:1760
-1045:2:1761
-1046:2:1769
-1047:2:1774
-1048:2:1778
-1049:2:1779
-1050:2:1786
-1051:2:1787
-1052:2:1798
-1053:2:1799
-1054:2:1800
-1055:2:1811
-1056:2:1816
-1057:2:1817
-1058:0:2654
-1059:2:1829
-1060:0:2654
-1061:2:1831
-1062:0:2654
-1063:2:1832
-1064:0:2654
-1065:2:1833
-1066:0:2654
-1067:2:1834
-1068:0:2654
-1069:2:1835
-1070:2:1839
-1071:2:1840
-1072:2:1848
-1073:2:1849
-1074:2:1853
-1075:2:1854
-1076:2:1862
-1077:2:1867
-1078:2:1871
-1079:2:1872
-1080:2:1879
-1081:2:1880
-1082:2:1891
-1083:2:1892
-1084:2:1893
-1085:2:1904
-1086:2:1909
-1087:2:1910
-1088:0:2654
-1089:2:1922
-1090:0:2654
-1091:2:2203
-1092:0:2654
-1093:2:2301
-1094:0:2654
-1095:2:2302
-1096:0:2654
-1097:2:2306
-1098:0:2654
-1099:2:2312
-1100:2:2316
-1101:2:2317
-1102:2:2325
-1103:2:2326
-1104:2:2330
-1105:2:2331
-1106:2:2339
-1107:2:2344
-1108:2:2348
-1109:2:2349
-1110:2:2356
-1111:2:2357
-1112:2:2368
-1113:2:2369
-1114:2:2370
-1115:2:2381
-1116:2:2386
-1117:2:2387
-1118:0:2654
-1119:2:2402
-1120:0:2654
-1121:2:2403
-1122:2:2407
-1123:2:2408
-1124:2:2416
-1125:2:2417
-1126:2:2421
-1127:2:2422
-1128:2:2430
-1129:2:2435
-1130:2:2439
-1131:2:2440
-1132:2:2447
-1133:2:2448
-1134:2:2459
-1135:2:2460
-1136:2:2461
-1137:2:2472
-1138:2:2477
-1139:2:2478
-1140:0:2654
-1141:2:2493
-1142:0:2654
-1143:2:2498
-1144:2:2502
-1145:2:2503
-1146:2:2511
-1147:2:2512
-1148:2:2516
-1149:2:2517
-1150:2:2525
-1151:2:2530
-1152:2:2534
-1153:2:2535
-1154:2:2542
-1155:2:2543
-1156:2:2554
-1157:2:2555
-1158:2:2556
-1159:2:2567
-1160:2:2572
-1161:2:2573
-1162:0:2654
-1163:2:2588
-1164:0:2654
-1165:2:2590
-1166:0:2654
-1167:2:2591
-1168:0:2654
-1169:2:423
-1170:0:2654
-1171:2:424
-1172:2:428
-1173:2:429
-1174:2:437
-1175:2:438
-1176:2:442
-1177:2:443
-1178:2:451
-1179:2:456
-1180:2:460
-1181:2:461
-1182:2:468
-1183:2:469
-1184:2:480
-1185:2:481
-1186:2:482
-1187:2:493
-1188:2:498
-1189:2:499
-1190:0:2654
-1191:2:511
-1192:0:2654
-1193:2:513
-1194:2:514
-1195:0:2654
-1196:2:518
-1197:2:522
-1198:2:523
-1199:2:531
-1200:2:532
-1201:2:536
-1202:2:537
-1203:2:545
-1204:2:550
-1205:2:551
-1206:2:562
-1207:2:563
-1208:2:574
-1209:2:575
-1210:2:576
-1211:2:587
-1212:2:592
-1213:2:593
-1214:0:2654
-1215:2:605
-1216:0:2654
-1217:2:607
-1218:0:2654
-1219:2:608
-1220:0:2654
-1221:2:618
-1222:0:2654
-1223:2:619
-1224:2:623
-1225:2:624
-1226:2:632
-1227:2:633
-1228:2:637
-1229:2:638
-1230:2:646
-1231:2:651
-1232:2:655
-1233:2:656
-1234:2:663
-1235:2:664
-1236:2:675
-1237:2:676
-1238:2:677
-1239:2:688
-1240:2:693
-1241:2:694
-1242:0:2654
-1243:2:709
-1244:0:2654
-1245:2:710
-1246:2:714
-1247:2:715
-1248:2:723
-1249:2:724
-1250:2:728
-1251:2:729
-1252:2:737
-1253:2:742
-1254:2:746
-1255:2:747
-1256:2:754
-1257:2:755
-1258:2:766
-1259:2:767
-1260:2:768
-1261:2:779
-1262:2:784
-1263:2:785
-1264:0:2654
-1265:2:800
-1266:0:2654
-1267:2:805
-1268:2:809
-1269:2:810
-1270:2:818
-1271:2:819
-1272:2:823
-1273:2:824
-1274:2:832
-1275:2:837
-1276:2:841
-1277:2:842
-1278:2:849
-1279:2:850
-1280:2:861
-1281:2:862
-1282:2:863
-1283:2:874
-1284:2:879
-1285:2:880
-1286:0:2654
-1287:2:895
-1288:0:2654
-1289:2:897
-1290:0:2654
-1291:2:898
-1292:2:902
-1293:2:903
-1294:2:911
-1295:2:912
-1296:2:916
-1297:2:917
-1298:2:925
-1299:2:930
-1300:2:934
-1301:2:935
-1302:2:942
-1303:2:943
-1304:2:954
-1305:2:955
-1306:2:956
-1307:2:967
-1308:2:972
-1309:2:973
-1310:0:2654
-1311:2:985
-1312:0:2654
-1313:2:987
-1314:0:2654
-1315:2:990
-1316:2:991
-1317:2:1003
-1318:2:1004
-1319:2:1008
-1320:2:1009
-1321:2:1017
-1322:2:1022
-1323:2:1026
-1324:2:1027
-1325:2:1034
-1326:2:1035
-1327:2:1046
-1328:2:1047
-1329:2:1048
-1330:2:1059
-1331:2:1064
-1332:2:1065
-1333:0:2654
-1334:2:1077
-1335:0:2654
-1336:2:1079
-1337:0:2654
-1338:2:1080
-1339:0:2654
-1340:2:1081
-1341:0:2654
-1342:2:1082
-1343:0:2654
-1344:2:1083
-1345:2:1087
-1346:2:1088
-1347:2:1096
-1348:2:1097
-1349:2:1101
-1350:2:1102
-1351:2:1110
-1352:2:1115
-1353:2:1119
-1354:2:1120
-1355:2:1127
-1356:2:1128
-1357:2:1139
-1358:2:1140
-1359:2:1141
-1360:2:1152
-1361:2:1157
-1362:2:1158
-1363:0:2654
-1364:2:1170
-1365:0:2654
-1366:2:1451
-1367:0:2654
-1368:2:1549
-1369:0:2654
-1370:2:1550
-1371:0:2654
-1372:2:1554
-1373:0:2654
-1374:2:1560
-1375:2:1564
-1376:2:1565
-1377:2:1573
-1378:2:1574
-1379:2:1578
-1380:2:1579
-1381:2:1587
-1382:2:1592
-1383:2:1596
-1384:2:1597
-1385:2:1604
-1386:2:1605
-1387:2:1616
-1388:2:1617
-1389:2:1618
-1390:2:1629
-1391:2:1634
-1392:2:1635
-1393:0:2654
-1394:2:1647
-1395:0:2654
-1396:2:1649
-1397:0:2654
-1398:2:1650
-1399:2:1654
-1400:2:1655
-1401:2:1663
-1402:2:1664
-1403:2:1668
-1404:2:1669
-1405:2:1677
-1406:2:1682
-1407:2:1686
-1408:2:1687
-1409:2:1694
-1410:2:1695
-1411:2:1706
-1412:2:1707
-1413:2:1708
-1414:2:1719
-1415:2:1724
-1416:2:1725
-1417:0:2654
-1418:2:1737
-1419:0:2654
-1420:2:1739
-1421:0:2654
-1422:2:1742
-1423:2:1743
-1424:2:1755
-1425:2:1756
-1426:2:1760
-1427:2:1761
-1428:2:1769
-1429:2:1774
-1430:2:1778
-1431:2:1779
-1432:2:1786
-1433:2:1787
-1434:2:1798
-1435:2:1799
-1436:2:1800
-1437:2:1811
-1438:2:1816
-1439:2:1817
-1440:0:2654
-1441:2:1829
-1442:0:2654
-1443:2:1831
-1444:0:2654
-1445:2:1832
-1446:0:2654
-1447:2:1833
-1448:0:2654
-1449:2:1834
-1450:0:2654
-1451:2:1835
-1452:2:1839
-1453:2:1840
-1454:2:1848
-1455:2:1849
-1456:2:1853
-1457:2:1854
-1458:2:1862
-1459:2:1867
-1460:2:1871
-1461:2:1872
-1462:2:1879
-1463:2:1880
-1464:2:1891
-1465:2:1892
-1466:2:1893
-1467:2:1904
-1468:2:1909
-1469:2:1910
-1470:0:2654
-1471:2:1922
-1472:0:2654
-1473:2:2203
-1474:0:2654
-1475:2:2301
-1476:0:2654
-1477:2:2302
-1478:0:2654
-1479:2:2306
-1480:0:2654
-1481:2:2312
-1482:2:2316
-1483:2:2317
-1484:2:2325
-1485:2:2326
-1486:2:2330
-1487:2:2331
-1488:2:2339
-1489:2:2344
-1490:2:2348
-1491:2:2349
-1492:2:2356
-1493:2:2357
-1494:2:2368
-1495:2:2369
-1496:2:2370
-1497:2:2381
-1498:2:2386
-1499:2:2387
-1500:0:2654
-1501:2:2402
-1502:0:2654
-1503:2:2403
-1504:2:2407
-1505:2:2408
-1506:2:2416
-1507:2:2417
-1508:2:2421
-1509:2:2422
-1510:2:2430
-1511:2:2435
-1512:2:2439
-1513:2:2440
-1514:2:2447
-1515:2:2448
-1516:2:2459
-1517:2:2460
-1518:2:2461
-1519:2:2472
-1520:2:2477
-1521:2:2478
-1522:0:2654
-1523:2:2493
-1524:0:2654
-1525:2:2498
-1526:2:2502
-1527:2:2503
-1528:2:2511
-1529:2:2512
-1530:2:2516
-1531:2:2517
-1532:2:2525
-1533:2:2530
-1534:2:2534
-1535:2:2535
-1536:2:2542
-1537:2:2543
-1538:2:2554
-1539:2:2555
-1540:2:2556
-1541:2:2567
-1542:2:2572
-1543:2:2573
-1544:0:2654
-1545:2:2588
-1546:0:2654
-1547:2:2590
-1548:0:2654
-1549:2:2591
-1550:0:2654
-1551:2:423
-1552:0:2654
-1553:2:424
-1554:2:428
-1555:2:429
-1556:2:437
-1557:2:438
-1558:2:442
-1559:2:443
-1560:2:451
-1561:2:456
-1562:2:460
-1563:2:461
-1564:2:468
-1565:2:469
-1566:2:480
-1567:2:481
-1568:2:482
-1569:2:493
-1570:2:498
-1571:2:499
-1572:0:2654
-1573:2:511
-1574:0:2654
-1575:2:513
-1576:2:514
-1577:0:2654
-1578:2:518
-1579:2:522
-1580:2:523
-1581:2:531
-1582:2:532
-1583:2:536
-1584:2:537
-1585:2:545
-1586:2:558
-1587:2:559
-1588:2:562
-1589:2:563
-1590:2:574
-1591:2:575
-1592:2:576
-1593:2:587
-1594:2:592
-1595:2:595
-1596:2:596
-1597:0:2654
-1598:2:605
-1599:0:2654
-1600:2:607
-1601:0:2654
-1602:2:608
-1603:0:2654
-1604:2:618
-1605:0:2654
-1606:2:619
-1607:2:623
-1608:2:624
-1609:2:632
-1610:2:633
-1611:2:637
-1612:2:638
-1613:2:646
-1614:2:659
-1615:2:660
-1616:2:663
-1617:2:664
-1618:2:675
-1619:2:676
-1620:2:677
-1621:2:688
-1622:2:693
-1623:2:696
-1624:2:697
-1625:0:2654
-1626:2:709
-1627:0:2654
-1628:2:710
-1629:2:714
-1630:2:715
-1631:2:723
-1632:2:724
-1633:2:728
-1634:2:729
-1635:2:737
-1636:2:750
-1637:2:751
-1638:2:754
-1639:2:755
-1640:2:766
-1641:2:767
-1642:2:768
-1643:2:779
-1644:2:784
-1645:2:787
-1646:2:788
-1647:0:2654
-1648:2:800
-1649:0:2654
-1650:2:805
-1651:2:809
-1652:2:810
-1653:2:818
-1654:2:819
-1655:2:823
-1656:2:824
-1657:2:832
-1658:2:845
-1659:2:846
-1660:2:849
-1661:2:850
-1662:2:861
-1663:2:862
-1664:2:863
-1665:2:874
-1666:2:879
-1667:2:882
-1668:2:883
-1669:0:2654
-1670:2:895
-1671:0:2654
-1672:2:897
-1673:0:2654
-1674:2:898
-1675:2:902
-1676:2:903
-1677:2:911
-1678:2:912
-1679:2:916
-1680:2:917
-1681:2:925
-1682:2:938
-1683:2:939
-1684:2:942
-1685:2:943
-1686:2:954
-1687:2:955
-1688:2:956
-1689:2:967
-1690:2:972
-1691:2:975
-1692:2:976
-1693:0:2654
-1694:2:985
-1695:0:2654
-1696:2:987
-1697:0:2654
-1698:2:990
-1699:2:991
-1700:2:1003
-1701:2:1004
-1702:2:1008
-1703:2:1009
-1704:2:1017
-1705:2:1030
-1706:2:1031
-1707:2:1034
-1708:2:1035
-1709:2:1046
-1710:2:1047
-1711:2:1048
-1712:2:1059
-1713:2:1064
-1714:2:1067
-1715:2:1068
-1716:0:2654
-1717:2:1077
-1718:0:2654
-1719:2:1079
-1720:0:2654
-1721:2:1080
-1722:0:2654
-1723:2:1081
-1724:0:2654
-1725:2:1082
-1726:0:2654
-1727:2:1083
-1728:2:1087
-1729:2:1088
-1730:2:1096
-1731:2:1097
-1732:2:1101
-1733:2:1102
-1734:2:1110
-1735:2:1123
-1736:2:1124
-1737:2:1127
-1738:2:1128
-1739:2:1139
-1740:2:1140
-1741:2:1141
-1742:2:1152
-1743:2:1157
-1744:2:1160
-1745:2:1161
-1746:0:2654
-1747:2:1170
-1748:0:2654
-1749:2:1451
-1750:0:2654
-1751:2:1549
-1752:0:2654
-1753:2:1550
-1754:0:2654
-1755:2:1554
-1756:0:2654
-1757:2:1560
-1758:2:1564
-1759:2:1565
-1760:2:1573
-1761:2:1574
-1762:2:1578
-1763:2:1579
-1764:2:1587
-1765:2:1600
-1766:2:1601
-1767:2:1604
-1768:2:1605
-1769:2:1616
-1770:2:1617
-1771:2:1618
-1772:2:1629
-1773:2:1634
-1774:2:1637
-1775:2:1638
-1776:0:2654
-1777:2:1647
-1778:0:2654
-1779:2:1649
-1780:0:2654
-1781:2:1650
-1782:2:1654
-1783:2:1655
-1784:2:1663
-1785:2:1664
-1786:2:1668
-1787:2:1669
-1788:2:1677
-1789:2:1690
-1790:2:1691
-1791:2:1694
-1792:2:1695
-1793:2:1706
-1794:2:1707
-1795:2:1708
-1796:2:1719
-1797:2:1724
-1798:2:1727
-1799:2:1728
-1800:0:2654
-1801:2:1737
-1802:0:2654
-1803:2:1739
-1804:0:2654
-1805:2:1742
-1806:2:1743
-1807:2:1755
-1808:2:1756
-1809:2:1760
-1810:2:1761
-1811:2:1769
-1812:2:1782
-1813:2:1783
-1814:2:1786
-1815:2:1787
-1816:2:1798
-1817:2:1799
-1818:2:1800
-1819:2:1811
-1820:2:1816
-1821:2:1819
-1822:2:1820
-1823:0:2654
-1824:2:1829
-1825:0:2654
-1826:2:1831
-1827:0:2654
-1828:2:1832
-1829:0:2654
-1830:2:1833
-1831:0:2654
-1832:2:1834
-1833:0:2654
-1834:2:1835
-1835:2:1839
-1836:2:1840
-1837:2:1848
-1838:2:1849
-1839:2:1853
-1840:2:1854
-1841:2:1862
-1842:2:1875
-1843:2:1876
-1844:2:1879
-1845:2:1880
-1846:2:1891
-1847:2:1892
-1848:2:1893
-1849:2:1904
-1850:2:1909
-1851:2:1912
-1852:2:1913
-1853:0:2654
-1854:2:1922
-1855:0:2654
-1856:2:2203
-1857:0:2654
-1858:2:2301
-1859:0:2654
-1860:2:2302
-1861:0:2654
-1862:2:2306
-1863:0:2654
-1864:2:2312
-1865:2:2316
-1866:2:2317
-1867:2:2325
-1868:2:2326
-1869:2:2330
-1870:2:2331
-1871:2:2339
-1872:2:2352
-1873:2:2353
-1874:2:2356
-1875:2:2357
-1876:2:2368
-1877:2:2369
-1878:2:2370
-1879:2:2381
-1880:2:2386
-1881:2:2389
-1882:2:2390
-1883:0:2654
-1884:2:2402
-1885:0:2654
-1886:2:2403
-1887:2:2407
-1888:2:2408
-1889:2:2416
-1890:2:2417
-1891:2:2421
-1892:2:2422
-1893:2:2430
-1894:2:2443
-1895:2:2444
-1896:2:2447
-1897:2:2448
-1898:2:2459
-1899:2:2460
-1900:2:2461
-1901:2:2472
-1902:2:2477
-1903:2:2480
-1904:2:2481
-1905:0:2654
-1906:2:2493
-1907:0:2654
-1908:2:2498
-1909:2:2502
-1910:2:2503
-1911:2:2511
-1912:2:2512
-1913:2:2516
-1914:2:2517
-1915:2:2525
-1916:2:2538
-1917:2:2539
-1918:2:2542
-1919:2:2543
-1920:2:2554
-1921:2:2555
-1922:2:2556
-1923:2:2567
-1924:2:2572
-1925:2:2575
-1926:2:2576
-1927:0:2654
-1928:2:2588
-1929:0:2654
-1930:2:2590
-1931:0:2654
-1932:2:2591
-1933:0:2654
-1934:2:2594
-1935:0:2654
-1936:2:2599
-1937:0:2654
-1938:1:2
-1939:0:2654
-1940:2:2600
-1941:0:2654
-1942:1:8
-1943:0:2654
-1944:2:2599
-1945:0:2654
-1946:1:9
-1947:0:2654
-1948:2:2600
-1949:0:2654
-1950:1:10
-1951:0:2654
-1952:2:2599
-1953:0:2654
-1954:1:11
-1955:0:2654
-1956:2:2600
-1957:0:2654
-1958:1:12
-1959:1:16
-1960:1:17
-1961:1:25
-1962:1:26
-1963:1:30
-1964:1:31
-1965:1:39
-1966:1:44
-1967:1:48
-1968:1:49
-1969:1:56
-1970:1:57
-1971:1:68
-1972:1:69
-1973:1:70
-1974:1:81
-1975:1:86
-1976:1:87
-1977:0:2654
-1978:2:2599
-1979:0:2654
-1980:1:99
-1981:0:2654
-1982:2:2600
-1983:0:2654
-1984:1:101
-1985:0:2654
-1986:2:2599
-1987:0:2654
-1988:1:102
-1989:1:106
-1990:1:107
-1991:1:115
-1992:1:116
-1993:1:120
-1994:1:121
-1995:1:129
-1996:1:134
-1997:1:138
-1998:1:139
-1999:1:146
-2000:1:147
-2001:1:158
-2002:1:159
-2003:1:160
-2004:1:171
-2005:1:176
-2006:1:177
-2007:0:2654
-2008:2:2600
-2009:0:2654
-2010:1:189
-2011:0:2654
-2012:2:2599
-2013:0:2654
-2014:1:191
-2015:0:2654
-2016:2:2600
-2017:0:2654
-2018:1:192
-2019:0:2654
-2020:2:2599
-2021:0:2654
-2022:1:193
-2023:1:197
-2024:1:198
-2025:1:206
-2026:1:207
-2027:1:211
-2028:1:212
-2029:1:220
-2030:1:225
-2031:1:229
-2032:1:230
-2033:1:237
-2034:1:238
-2035:1:249
-2036:1:250
-2037:1:251
-2038:1:262
-2039:1:267
-2040:1:268
-2041:0:2654
-2042:2:2600
-2043:0:2654
-2044:1:280
-2045:0:2654
-2046:2:2599
-2047:0:2654
-2048:1:282
-2049:0:2654
-2050:2:2600
-2051:0:2654
-2052:1:291
-2053:0:2654
-2054:2:2599
-2055:0:2654
-2056:1:293
-2057:0:2654
-2058:2:2600
-2059:0:2654
-2060:1:296
-2061:0:2654
-2062:2:2599
-2063:0:2654
-2064:1:301
-2065:0:2654
-2066:2:2600
-2067:0:2654
-2068:1:302
-2069:0:2652
-2070:2:2599
-2071:0:2658
-2072:0:2654
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.define b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.log b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.log
deleted file mode 100644 (file)
index 439c78e..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_rmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-pan: claim violated! (at depth 1726)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3264, errors: 1
-   229629 states, stored
-  2119227 states, matched
-  2348856 transitions (= stored+matched)
-  8294746 atomic steps
-hash conflicts:     96242 (resolved)
-
-Stats on memory usage (in Megabytes):
-   18.395      equivalent memory usage for states (stored*(State-vector + overhead))
-   14.410      actual memory usage for states (compression: 78.34%)
-               state-vector as stored = 38 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  480.119      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 243, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 265, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 282, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 291, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 304, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 320, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 334, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 352, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 365, "(1)"
-       line 413, "pan.___", state 378, "(1)"
-       line 418, "pan.___", state 395, "(1)"
-       line 399, "pan.___", state 414, "(1)"
-       line 403, "pan.___", state 426, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 444, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 470, "(1)"
-       line 418, "pan.___", state 487, "(1)"
-       line 403, "pan.___", state 519, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 537, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 563, "(1)"
-       line 418, "pan.___", state 580, "(1)"
-       line 179, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 616, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 629, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 651, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 668, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 677, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 690, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 714, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 716, "(1)"
-       line 399, "pan.___", state 717, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 717, "else"
-       line 399, "pan.___", state 720, "(1)"
-       line 403, "pan.___", state 728, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 730, "(1)"
-       line 403, "pan.___", state 731, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 731, "else"
-       line 403, "pan.___", state 734, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 403, "pan.___", state 735, "(1)"
-       line 401, "pan.___", state 740, "((i<1))"
-       line 401, "pan.___", state 740, "((i>=1))"
-       line 408, "pan.___", state 746, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 759, "(1)"
-       line 409, "pan.___", state 760, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 760, "else"
-       line 409, "pan.___", state 763, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 409, "pan.___", state 764, "(1)"
-       line 413, "pan.___", state 772, "(1)"
-       line 413, "pan.___", state 773, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 773, "else"
-       line 413, "pan.___", state 776, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 413, "pan.___", state 777, "(1)"
-       line 411, "pan.___", state 782, "((i<1))"
-       line 411, "pan.___", state 782, "((i>=1))"
-       line 418, "pan.___", state 789, "(1)"
-       line 418, "pan.___", state 790, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 790, "else"
-       line 418, "pan.___", state 793, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 418, "pan.___", state 794, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 420, "pan.___", state 797, "(1)"
-       line 403, "pan.___", state 828, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 846, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 872, "(1)"
-       line 418, "pan.___", state 889, "(1)"
-       line 403, "pan.___", state 918, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 936, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 979, "(1)"
-       line 399, "pan.___", state 998, "(1)"
-       line 403, "pan.___", state 1010, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1028, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1054, "(1)"
-       line 418, "pan.___", state 1071, "(1)"
-       line 403, "pan.___", state 1103, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1121, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1147, "(1)"
-       line 418, "pan.___", state 1164, "(1)"
-       line 179, "pan.___", state 1187, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1200, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 1213, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1235, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1252, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1261, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1298, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1300, "(1)"
-       line 399, "pan.___", state 1301, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1301, "else"
-       line 399, "pan.___", state 1304, "(1)"
-       line 403, "pan.___", state 1312, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1314, "(1)"
-       line 403, "pan.___", state 1315, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1315, "else"
-       line 403, "pan.___", state 1318, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 403, "pan.___", state 1319, "(1)"
-       line 401, "pan.___", state 1324, "((i<1))"
-       line 401, "pan.___", state 1324, "((i>=1))"
-       line 408, "pan.___", state 1330, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1343, "(1)"
-       line 409, "pan.___", state 1344, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1344, "else"
-       line 409, "pan.___", state 1347, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 409, "pan.___", state 1348, "(1)"
-       line 413, "pan.___", state 1356, "(1)"
-       line 413, "pan.___", state 1357, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1357, "else"
-       line 413, "pan.___", state 1360, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 413, "pan.___", state 1361, "(1)"
-       line 411, "pan.___", state 1366, "((i<1))"
-       line 411, "pan.___", state 1366, "((i>=1))"
-       line 418, "pan.___", state 1373, "(1)"
-       line 418, "pan.___", state 1374, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1374, "else"
-       line 418, "pan.___", state 1377, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 418, "pan.___", state 1378, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 420, "pan.___", state 1381, "(1)"
-       line 179, "pan.___", state 1406, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1419, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 175, "pan.___", state 1432, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1454, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 175, "pan.___", state 1471, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1480, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1493, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 702, "pan.___", state 1520, "-end-"
-       (144 of 1520 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 1.88 seconds
-pan: rate 122143.09 states/second
-pan: avg transition delay 8.0039e-07 usec
-cp .input.spin urcu_free_no_rmb.spin.input
-cp .input.spin.trail urcu_free_no_rmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.spin.input
deleted file mode 100644 (file)
index 6ccb255..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_RMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_rmb.spin.input.trail
deleted file mode 100644 (file)
index 90f91e2..0000000
+++ /dev/null
@@ -1,1729 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1982
-2:3:1934
-3:3:1937
-4:3:1937
-5:3:1940
-6:3:1948
-7:3:1948
-8:3:1951
-9:3:1957
-10:3:1961
-11:3:1961
-12:3:1964
-13:3:1972
-14:3:1976
-15:3:1977
-16:0:1982
-17:3:1979
-18:0:1982
-19:2:416
-20:0:1982
-21:2:422
-22:0:1982
-23:2:423
-24:0:1982
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1982
-45:2:511
-46:0:1982
-47:2:513
-48:2:514
-49:0:1982
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1982
-69:2:605
-70:0:1982
-71:2:607
-72:0:1982
-73:2:608
-74:0:1982
-75:2:618
-76:0:1982
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:0:1982
-86:2:653
-87:0:1982
-88:2:657
-89:2:658
-90:2:662
-91:2:666
-92:2:667
-93:2:671
-94:2:679
-95:2:680
-96:0:1982
-97:2:688
-98:0:1982
-99:2:696
-100:2:697
-101:2:701
-102:2:705
-103:2:706
-104:2:710
-105:2:718
-106:2:719
-107:0:1982
-108:2:727
-109:0:1982
-110:2:729
-111:0:1982
-112:2:730
-113:2:734
-114:2:735
-115:2:743
-116:2:744
-117:2:748
-118:2:749
-119:2:757
-120:2:762
-121:2:766
-122:2:767
-123:2:774
-124:2:775
-125:2:786
-126:2:787
-127:2:788
-128:2:799
-129:2:804
-130:2:805
-131:0:1982
-132:2:817
-133:0:1982
-134:2:819
-135:0:1982
-136:2:822
-137:2:823
-138:2:835
-139:2:836
-140:2:840
-141:2:841
-142:2:849
-143:2:854
-144:2:858
-145:2:859
-146:2:866
-147:2:867
-148:2:878
-149:2:879
-150:2:880
-151:2:891
-152:2:896
-153:2:897
-154:0:1982
-155:2:909
-156:0:1982
-157:2:911
-158:0:1982
-159:2:912
-160:0:1982
-161:2:913
-162:0:1982
-163:2:914
-164:0:1982
-165:2:915
-166:2:919
-167:2:920
-168:2:928
-169:2:929
-170:2:933
-171:2:934
-172:2:942
-173:2:947
-174:2:951
-175:2:952
-176:2:959
-177:2:960
-178:2:971
-179:2:972
-180:2:973
-181:2:984
-182:2:989
-183:2:990
-184:0:1982
-185:2:1002
-186:0:1982
-187:2:1115
-188:0:1982
-189:2:1213
-190:0:1982
-191:2:1214
-192:0:1982
-193:2:1218
-194:0:1982
-195:2:1224
-196:2:1228
-197:2:1229
-198:2:1237
-199:2:1238
-200:2:1242
-201:2:1243
-202:2:1251
-203:2:1256
-204:2:1260
-205:2:1261
-206:2:1268
-207:2:1269
-208:2:1280
-209:2:1281
-210:2:1282
-211:2:1293
-212:2:1298
-213:2:1299
-214:0:1982
-215:2:1311
-216:0:1982
-217:2:1313
-218:0:1982
-219:2:1314
-220:2:1318
-221:2:1319
-222:2:1327
-223:2:1328
-224:2:1332
-225:2:1333
-226:2:1341
-227:2:1346
-228:2:1350
-229:2:1351
-230:2:1358
-231:2:1359
-232:2:1370
-233:2:1371
-234:2:1372
-235:2:1383
-236:2:1388
-237:2:1389
-238:0:1982
-239:2:1401
-240:0:1982
-241:2:1403
-242:0:1982
-243:2:1406
-244:2:1407
-245:2:1419
-246:2:1420
-247:2:1424
-248:2:1425
-249:2:1433
-250:2:1438
-251:2:1442
-252:2:1443
-253:2:1450
-254:2:1451
-255:2:1462
-256:2:1463
-257:2:1464
-258:2:1475
-259:2:1480
-260:2:1481
-261:0:1982
-262:2:1493
-263:0:1982
-264:2:1495
-265:0:1982
-266:2:1496
-267:0:1982
-268:2:1497
-269:0:1982
-270:2:1498
-271:0:1982
-272:2:1499
-273:2:1503
-274:2:1504
-275:2:1512
-276:2:1513
-277:2:1517
-278:2:1518
-279:2:1526
-280:2:1531
-281:2:1535
-282:2:1536
-283:2:1543
-284:2:1544
-285:2:1555
-286:2:1556
-287:2:1557
-288:2:1568
-289:2:1573
-290:2:1574
-291:0:1982
-292:2:1586
-293:0:1982
-294:2:1699
-295:0:1982
-296:2:1797
-297:0:1982
-298:2:1798
-299:0:1982
-300:2:1802
-301:0:1982
-302:2:1811
-303:2:1812
-304:2:1816
-305:2:1820
-306:2:1821
-307:2:1825
-308:2:1833
-309:2:1834
-310:0:1982
-311:2:1842
-312:0:1982
-313:2:1846
-314:2:1847
-315:2:1851
-316:2:1855
-317:2:1856
-318:2:1860
-319:2:1868
-320:2:1869
-321:0:1982
-322:2:1877
-323:0:1982
-324:2:1885
-325:2:1886
-326:2:1890
-327:2:1894
-328:2:1895
-329:2:1899
-330:2:1907
-331:2:1908
-332:0:1982
-333:2:1916
-334:0:1982
-335:2:1918
-336:0:1982
-337:2:1919
-338:0:1982
-339:2:423
-340:0:1982
-341:2:424
-342:2:428
-343:2:429
-344:2:437
-345:2:438
-346:2:442
-347:2:443
-348:2:451
-349:2:456
-350:2:460
-351:2:461
-352:2:468
-353:2:469
-354:2:480
-355:2:481
-356:2:482
-357:2:493
-358:2:498
-359:2:499
-360:0:1982
-361:2:511
-362:0:1982
-363:2:513
-364:2:514
-365:0:1982
-366:2:518
-367:2:522
-368:2:523
-369:2:531
-370:2:532
-371:2:536
-372:2:537
-373:2:545
-374:2:550
-375:2:551
-376:2:562
-377:2:563
-378:2:574
-379:2:575
-380:2:576
-381:2:587
-382:2:592
-383:2:593
-384:0:1982
-385:2:605
-386:0:1982
-387:2:607
-388:0:1982
-389:2:608
-390:0:1982
-391:2:618
-392:0:1982
-393:2:622
-394:2:623
-395:2:627
-396:2:631
-397:2:632
-398:2:636
-399:2:644
-400:2:645
-401:0:1982
-402:2:653
-403:0:1982
-404:2:657
-405:2:658
-406:2:662
-407:2:666
-408:2:667
-409:2:671
-410:2:679
-411:2:680
-412:0:1982
-413:2:688
-414:0:1982
-415:2:696
-416:2:697
-417:2:701
-418:2:705
-419:2:706
-420:2:710
-421:2:718
-422:2:719
-423:0:1982
-424:2:727
-425:0:1982
-426:2:729
-427:0:1982
-428:2:730
-429:2:734
-430:2:735
-431:2:743
-432:2:744
-433:2:748
-434:2:749
-435:2:757
-436:2:762
-437:2:766
-438:2:767
-439:2:774
-440:2:775
-441:2:786
-442:2:787
-443:2:788
-444:2:799
-445:2:804
-446:2:805
-447:0:1982
-448:2:817
-449:0:1982
-450:2:819
-451:0:1982
-452:2:822
-453:2:823
-454:2:835
-455:2:836
-456:2:840
-457:2:841
-458:2:849
-459:2:854
-460:2:858
-461:2:859
-462:2:866
-463:2:867
-464:2:878
-465:2:879
-466:2:880
-467:2:891
-468:2:896
-469:2:897
-470:0:1982
-471:2:909
-472:0:1982
-473:2:911
-474:0:1982
-475:2:912
-476:0:1982
-477:2:913
-478:0:1982
-479:2:914
-480:0:1982
-481:2:915
-482:2:919
-483:2:920
-484:2:928
-485:2:929
-486:2:933
-487:2:934
-488:2:942
-489:2:947
-490:2:951
-491:2:952
-492:2:959
-493:2:960
-494:2:971
-495:2:972
-496:2:973
-497:2:984
-498:2:989
-499:2:990
-500:0:1982
-501:2:1002
-502:0:1982
-503:2:1115
-504:0:1982
-505:2:1213
-506:0:1982
-507:2:1214
-508:0:1982
-509:2:1218
-510:0:1982
-511:2:1224
-512:2:1228
-513:2:1229
-514:2:1237
-515:2:1238
-516:2:1242
-517:2:1243
-518:2:1251
-519:2:1256
-520:2:1260
-521:2:1261
-522:2:1268
-523:2:1269
-524:2:1280
-525:2:1281
-526:2:1282
-527:2:1293
-528:2:1298
-529:2:1299
-530:0:1982
-531:2:1311
-532:0:1982
-533:2:1313
-534:0:1982
-535:2:1314
-536:2:1318
-537:2:1319
-538:2:1327
-539:2:1328
-540:2:1332
-541:2:1333
-542:2:1341
-543:2:1346
-544:2:1350
-545:2:1351
-546:2:1358
-547:2:1359
-548:2:1370
-549:2:1371
-550:2:1372
-551:2:1383
-552:2:1388
-553:2:1389
-554:0:1982
-555:2:1401
-556:0:1982
-557:2:1403
-558:0:1982
-559:2:1406
-560:2:1407
-561:2:1419
-562:2:1420
-563:2:1424
-564:2:1425
-565:2:1433
-566:2:1438
-567:2:1442
-568:2:1443
-569:2:1450
-570:2:1451
-571:2:1462
-572:2:1463
-573:2:1464
-574:2:1475
-575:2:1480
-576:2:1481
-577:0:1982
-578:2:1493
-579:0:1982
-580:2:1495
-581:0:1982
-582:2:1496
-583:0:1982
-584:2:1497
-585:0:1982
-586:2:1498
-587:0:1982
-588:2:1499
-589:2:1503
-590:2:1504
-591:2:1512
-592:2:1513
-593:2:1517
-594:2:1518
-595:2:1526
-596:2:1531
-597:2:1535
-598:2:1536
-599:2:1543
-600:2:1544
-601:2:1555
-602:2:1556
-603:2:1557
-604:2:1568
-605:2:1573
-606:2:1574
-607:0:1982
-608:2:1586
-609:0:1982
-610:2:1699
-611:0:1982
-612:2:1797
-613:0:1982
-614:2:1798
-615:0:1982
-616:2:1802
-617:0:1982
-618:2:1811
-619:2:1812
-620:2:1816
-621:2:1820
-622:2:1821
-623:2:1825
-624:2:1833
-625:2:1834
-626:0:1982
-627:2:1842
-628:0:1982
-629:2:1846
-630:2:1847
-631:2:1851
-632:2:1855
-633:2:1856
-634:2:1860
-635:2:1868
-636:2:1869
-637:0:1982
-638:2:1877
-639:0:1982
-640:2:1885
-641:2:1886
-642:2:1890
-643:2:1894
-644:2:1895
-645:2:1899
-646:2:1907
-647:2:1908
-648:0:1982
-649:2:1916
-650:0:1982
-651:2:1918
-652:0:1982
-653:2:1919
-654:0:1982
-655:2:423
-656:0:1982
-657:2:424
-658:2:428
-659:2:429
-660:2:437
-661:2:438
-662:2:442
-663:2:443
-664:2:451
-665:2:456
-666:2:460
-667:2:461
-668:2:468
-669:2:469
-670:2:480
-671:2:481
-672:2:482
-673:2:493
-674:2:498
-675:2:499
-676:0:1982
-677:2:511
-678:0:1982
-679:2:513
-680:2:514
-681:0:1982
-682:2:518
-683:2:522
-684:2:523
-685:2:531
-686:2:532
-687:2:536
-688:2:537
-689:2:545
-690:2:550
-691:2:551
-692:2:562
-693:2:563
-694:2:574
-695:2:575
-696:2:576
-697:2:587
-698:2:592
-699:2:593
-700:0:1982
-701:2:605
-702:0:1982
-703:2:607
-704:0:1982
-705:2:608
-706:0:1982
-707:2:618
-708:0:1982
-709:2:622
-710:2:623
-711:2:627
-712:2:631
-713:2:632
-714:2:636
-715:2:644
-716:2:645
-717:0:1982
-718:2:653
-719:0:1982
-720:2:657
-721:2:658
-722:2:662
-723:2:666
-724:2:667
-725:2:671
-726:2:679
-727:2:680
-728:0:1982
-729:2:688
-730:0:1982
-731:2:696
-732:2:697
-733:2:701
-734:2:705
-735:2:706
-736:2:710
-737:2:718
-738:2:719
-739:0:1982
-740:2:727
-741:0:1982
-742:2:729
-743:0:1982
-744:2:730
-745:2:734
-746:2:735
-747:2:743
-748:2:744
-749:2:748
-750:2:749
-751:2:757
-752:2:762
-753:2:766
-754:2:767
-755:2:774
-756:2:775
-757:2:786
-758:2:787
-759:2:788
-760:2:799
-761:2:804
-762:2:805
-763:0:1982
-764:2:817
-765:0:1982
-766:2:819
-767:0:1982
-768:2:822
-769:2:823
-770:2:835
-771:2:836
-772:2:840
-773:2:841
-774:2:849
-775:2:854
-776:2:858
-777:2:859
-778:2:866
-779:2:867
-780:2:878
-781:2:879
-782:2:880
-783:2:891
-784:2:896
-785:2:897
-786:0:1982
-787:2:909
-788:0:1982
-789:2:911
-790:0:1982
-791:2:912
-792:0:1982
-793:2:913
-794:0:1982
-795:2:914
-796:0:1982
-797:2:915
-798:2:919
-799:2:920
-800:2:928
-801:2:929
-802:2:933
-803:2:934
-804:2:942
-805:2:947
-806:2:951
-807:2:952
-808:2:959
-809:2:960
-810:2:971
-811:2:972
-812:2:973
-813:2:984
-814:2:989
-815:2:990
-816:0:1982
-817:2:1002
-818:0:1982
-819:2:1115
-820:0:1982
-821:2:1213
-822:0:1982
-823:2:1214
-824:0:1982
-825:2:1218
-826:0:1982
-827:2:1224
-828:2:1228
-829:2:1229
-830:2:1237
-831:2:1238
-832:2:1242
-833:2:1243
-834:2:1251
-835:2:1256
-836:2:1260
-837:2:1261
-838:2:1268
-839:2:1269
-840:2:1280
-841:2:1281
-842:2:1282
-843:2:1293
-844:2:1298
-845:2:1299
-846:0:1982
-847:2:1311
-848:0:1982
-849:2:1313
-850:0:1982
-851:2:1314
-852:2:1318
-853:2:1319
-854:2:1327
-855:2:1328
-856:2:1332
-857:2:1333
-858:2:1341
-859:2:1346
-860:2:1350
-861:2:1351
-862:2:1358
-863:2:1359
-864:2:1370
-865:2:1371
-866:2:1372
-867:2:1383
-868:2:1388
-869:2:1389
-870:0:1982
-871:2:1401
-872:0:1982
-873:2:1403
-874:0:1982
-875:2:1406
-876:2:1407
-877:2:1419
-878:2:1420
-879:2:1424
-880:2:1425
-881:2:1433
-882:2:1438
-883:2:1442
-884:2:1443
-885:2:1450
-886:2:1451
-887:2:1462
-888:2:1463
-889:2:1464
-890:2:1475
-891:2:1480
-892:2:1481
-893:0:1982
-894:2:1493
-895:0:1982
-896:2:1495
-897:0:1982
-898:2:1496
-899:0:1982
-900:2:1497
-901:0:1982
-902:2:1498
-903:0:1982
-904:2:1499
-905:2:1503
-906:2:1504
-907:2:1512
-908:2:1513
-909:2:1517
-910:2:1518
-911:2:1526
-912:2:1531
-913:2:1535
-914:2:1536
-915:2:1543
-916:2:1544
-917:2:1555
-918:2:1556
-919:2:1557
-920:2:1568
-921:2:1573
-922:2:1574
-923:0:1982
-924:2:1586
-925:0:1982
-926:2:1699
-927:0:1982
-928:2:1797
-929:0:1982
-930:2:1798
-931:0:1982
-932:2:1802
-933:0:1982
-934:2:1811
-935:2:1812
-936:2:1816
-937:2:1820
-938:2:1821
-939:2:1825
-940:2:1833
-941:2:1834
-942:0:1982
-943:2:1842
-944:0:1982
-945:2:1846
-946:2:1847
-947:2:1851
-948:2:1855
-949:2:1856
-950:2:1860
-951:2:1868
-952:2:1869
-953:0:1982
-954:2:1877
-955:0:1982
-956:2:1885
-957:2:1886
-958:2:1890
-959:2:1894
-960:2:1895
-961:2:1899
-962:2:1907
-963:2:1908
-964:0:1982
-965:2:1916
-966:0:1982
-967:2:1918
-968:0:1982
-969:2:1919
-970:0:1982
-971:2:423
-972:0:1982
-973:2:424
-974:2:428
-975:2:429
-976:2:437
-977:2:438
-978:2:442
-979:2:443
-980:2:451
-981:2:456
-982:2:460
-983:2:461
-984:2:468
-985:2:469
-986:2:480
-987:2:481
-988:2:482
-989:2:493
-990:2:498
-991:2:499
-992:0:1982
-993:2:511
-994:0:1982
-995:2:513
-996:2:514
-997:0:1982
-998:2:518
-999:2:522
-1000:2:523
-1001:2:531
-1002:2:532
-1003:2:536
-1004:2:537
-1005:2:545
-1006:2:550
-1007:2:551
-1008:2:562
-1009:2:563
-1010:2:574
-1011:2:575
-1012:2:576
-1013:2:587
-1014:2:592
-1015:2:593
-1016:0:1982
-1017:2:605
-1018:0:1982
-1019:2:607
-1020:0:1982
-1021:2:608
-1022:0:1982
-1023:2:618
-1024:0:1982
-1025:2:622
-1026:2:623
-1027:2:627
-1028:2:631
-1029:2:632
-1030:2:636
-1031:2:644
-1032:2:645
-1033:0:1982
-1034:2:653
-1035:0:1982
-1036:2:657
-1037:2:658
-1038:2:662
-1039:2:666
-1040:2:667
-1041:2:671
-1042:2:679
-1043:2:680
-1044:0:1982
-1045:2:688
-1046:0:1982
-1047:2:696
-1048:2:697
-1049:2:701
-1050:2:705
-1051:2:706
-1052:2:710
-1053:2:718
-1054:2:719
-1055:0:1982
-1056:2:727
-1057:0:1982
-1058:2:729
-1059:0:1982
-1060:2:730
-1061:2:734
-1062:2:735
-1063:2:743
-1064:2:744
-1065:2:748
-1066:2:749
-1067:2:757
-1068:2:762
-1069:2:766
-1070:2:767
-1071:2:774
-1072:2:775
-1073:2:786
-1074:2:787
-1075:2:788
-1076:2:799
-1077:2:804
-1078:2:805
-1079:0:1982
-1080:2:817
-1081:0:1982
-1082:2:819
-1083:0:1982
-1084:2:822
-1085:2:823
-1086:2:835
-1087:2:836
-1088:2:840
-1089:2:841
-1090:2:849
-1091:2:854
-1092:2:858
-1093:2:859
-1094:2:866
-1095:2:867
-1096:2:878
-1097:2:879
-1098:2:880
-1099:2:891
-1100:2:896
-1101:2:897
-1102:0:1982
-1103:2:909
-1104:0:1982
-1105:2:911
-1106:0:1982
-1107:2:912
-1108:0:1982
-1109:2:913
-1110:0:1982
-1111:2:914
-1112:0:1982
-1113:2:915
-1114:2:919
-1115:2:920
-1116:2:928
-1117:2:929
-1118:2:933
-1119:2:934
-1120:2:942
-1121:2:947
-1122:2:951
-1123:2:952
-1124:2:959
-1125:2:960
-1126:2:971
-1127:2:972
-1128:2:973
-1129:2:984
-1130:2:989
-1131:2:990
-1132:0:1982
-1133:2:1002
-1134:0:1982
-1135:2:1115
-1136:0:1982
-1137:2:1213
-1138:0:1982
-1139:2:1214
-1140:0:1982
-1141:2:1218
-1142:0:1982
-1143:2:1224
-1144:2:1228
-1145:2:1229
-1146:2:1237
-1147:2:1238
-1148:2:1242
-1149:2:1243
-1150:2:1251
-1151:2:1256
-1152:2:1260
-1153:2:1261
-1154:2:1268
-1155:2:1269
-1156:2:1280
-1157:2:1281
-1158:2:1282
-1159:2:1293
-1160:2:1298
-1161:2:1299
-1162:0:1982
-1163:2:1311
-1164:0:1982
-1165:2:1313
-1166:0:1982
-1167:2:1314
-1168:2:1318
-1169:2:1319
-1170:2:1327
-1171:2:1328
-1172:2:1332
-1173:2:1333
-1174:2:1341
-1175:2:1346
-1176:2:1350
-1177:2:1351
-1178:2:1358
-1179:2:1359
-1180:2:1370
-1181:2:1371
-1182:2:1372
-1183:2:1383
-1184:2:1388
-1185:2:1389
-1186:0:1982
-1187:2:1401
-1188:0:1982
-1189:2:1403
-1190:0:1982
-1191:2:1406
-1192:2:1407
-1193:2:1419
-1194:2:1420
-1195:2:1424
-1196:2:1425
-1197:2:1433
-1198:2:1438
-1199:2:1442
-1200:2:1443
-1201:2:1450
-1202:2:1451
-1203:2:1462
-1204:2:1463
-1205:2:1464
-1206:2:1475
-1207:2:1480
-1208:2:1481
-1209:0:1982
-1210:2:1493
-1211:0:1982
-1212:2:1495
-1213:0:1982
-1214:2:1496
-1215:0:1982
-1216:2:1497
-1217:0:1982
-1218:2:1498
-1219:0:1982
-1220:2:1499
-1221:2:1503
-1222:2:1504
-1223:2:1512
-1224:2:1513
-1225:2:1517
-1226:2:1518
-1227:2:1526
-1228:2:1531
-1229:2:1535
-1230:2:1536
-1231:2:1543
-1232:2:1544
-1233:2:1555
-1234:2:1556
-1235:2:1557
-1236:2:1568
-1237:2:1573
-1238:2:1574
-1239:0:1982
-1240:2:1586
-1241:0:1982
-1242:2:1699
-1243:0:1982
-1244:2:1797
-1245:0:1982
-1246:2:1798
-1247:0:1982
-1248:2:1802
-1249:0:1982
-1250:2:1811
-1251:2:1812
-1252:2:1816
-1253:2:1820
-1254:2:1821
-1255:2:1825
-1256:2:1833
-1257:2:1834
-1258:0:1982
-1259:2:1842
-1260:0:1982
-1261:2:1846
-1262:2:1847
-1263:2:1851
-1264:2:1855
-1265:2:1856
-1266:2:1860
-1267:2:1868
-1268:2:1869
-1269:0:1982
-1270:2:1877
-1271:0:1982
-1272:2:1885
-1273:2:1886
-1274:2:1890
-1275:2:1894
-1276:2:1895
-1277:2:1899
-1278:2:1907
-1279:2:1908
-1280:0:1982
-1281:2:1916
-1282:0:1982
-1283:2:1918
-1284:0:1982
-1285:2:1919
-1286:0:1982
-1287:2:423
-1288:0:1982
-1289:2:424
-1290:2:428
-1291:2:429
-1292:2:437
-1293:2:438
-1294:2:442
-1295:2:443
-1296:2:451
-1297:2:456
-1298:2:460
-1299:2:461
-1300:2:468
-1301:2:469
-1302:2:480
-1303:2:481
-1304:2:482
-1305:2:493
-1306:2:498
-1307:2:499
-1308:0:1982
-1309:2:511
-1310:0:1982
-1311:2:513
-1312:2:514
-1313:0:1982
-1314:2:518
-1315:2:522
-1316:2:523
-1317:2:531
-1318:2:532
-1319:2:536
-1320:2:537
-1321:2:545
-1322:2:558
-1323:2:559
-1324:2:562
-1325:2:563
-1326:2:574
-1327:2:575
-1328:2:576
-1329:2:587
-1330:2:592
-1331:2:595
-1332:2:596
-1333:0:1982
-1334:2:605
-1335:0:1982
-1336:2:607
-1337:0:1982
-1338:2:608
-1339:0:1982
-1340:2:618
-1341:0:1982
-1342:1:2
-1343:0:1982
-1344:1:8
-1345:0:1982
-1346:1:9
-1347:0:1982
-1348:1:10
-1349:0:1982
-1350:1:11
-1351:0:1982
-1352:1:12
-1353:1:16
-1354:1:17
-1355:1:25
-1356:1:26
-1357:1:30
-1358:1:31
-1359:1:39
-1360:1:44
-1361:1:48
-1362:1:49
-1363:1:56
-1364:1:57
-1365:1:68
-1366:1:69
-1367:1:70
-1368:1:81
-1369:1:86
-1370:1:87
-1371:0:1982
-1372:1:99
-1373:0:1982
-1374:2:622
-1375:2:623
-1376:2:627
-1377:2:631
-1378:2:632
-1379:2:636
-1380:2:641
-1381:0:1982
-1382:2:653
-1383:0:1982
-1384:2:657
-1385:2:658
-1386:2:662
-1387:2:666
-1388:2:667
-1389:2:671
-1390:2:679
-1391:2:680
-1392:0:1982
-1393:2:688
-1394:0:1982
-1395:2:696
-1396:2:697
-1397:2:701
-1398:2:705
-1399:2:706
-1400:2:710
-1401:2:718
-1402:2:719
-1403:0:1982
-1404:2:727
-1405:0:1982
-1406:2:729
-1407:0:1982
-1408:2:730
-1409:2:734
-1410:2:735
-1411:2:743
-1412:2:744
-1413:2:748
-1414:2:749
-1415:2:757
-1416:2:762
-1417:2:766
-1418:2:767
-1419:2:774
-1420:2:775
-1421:2:786
-1422:2:787
-1423:2:788
-1424:2:799
-1425:2:804
-1426:2:805
-1427:0:1982
-1428:2:817
-1429:0:1982
-1430:2:819
-1431:0:1982
-1432:2:822
-1433:2:823
-1434:2:835
-1435:2:836
-1436:2:840
-1437:2:841
-1438:2:849
-1439:2:854
-1440:2:858
-1441:2:859
-1442:2:866
-1443:2:867
-1444:2:878
-1445:2:879
-1446:2:880
-1447:2:891
-1448:2:896
-1449:2:897
-1450:0:1982
-1451:2:909
-1452:0:1982
-1453:2:911
-1454:0:1982
-1455:2:912
-1456:0:1982
-1457:2:913
-1458:0:1982
-1459:2:914
-1460:0:1982
-1461:2:915
-1462:2:919
-1463:2:920
-1464:2:928
-1465:2:929
-1466:2:933
-1467:2:934
-1468:2:942
-1469:2:947
-1470:2:951
-1471:2:952
-1472:2:959
-1473:2:960
-1474:2:971
-1475:2:972
-1476:2:973
-1477:2:984
-1478:2:989
-1479:2:990
-1480:0:1982
-1481:2:1002
-1482:0:1982
-1483:2:1115
-1484:0:1982
-1485:2:1213
-1486:0:1982
-1487:2:1214
-1488:0:1982
-1489:2:1218
-1490:0:1982
-1491:2:1224
-1492:2:1228
-1493:2:1229
-1494:2:1237
-1495:2:1238
-1496:2:1242
-1497:2:1243
-1498:2:1251
-1499:2:1256
-1500:2:1260
-1501:2:1261
-1502:2:1268
-1503:2:1269
-1504:2:1280
-1505:2:1281
-1506:2:1282
-1507:2:1293
-1508:2:1298
-1509:2:1299
-1510:0:1982
-1511:2:1311
-1512:0:1982
-1513:2:1313
-1514:0:1982
-1515:2:1314
-1516:2:1318
-1517:2:1319
-1518:2:1327
-1519:2:1328
-1520:2:1332
-1521:2:1333
-1522:2:1341
-1523:2:1346
-1524:2:1350
-1525:2:1351
-1526:2:1358
-1527:2:1359
-1528:2:1370
-1529:2:1371
-1530:2:1372
-1531:2:1383
-1532:2:1388
-1533:2:1389
-1534:0:1982
-1535:2:1401
-1536:0:1982
-1537:2:1403
-1538:0:1982
-1539:2:1406
-1540:2:1407
-1541:2:1419
-1542:2:1420
-1543:2:1424
-1544:2:1425
-1545:2:1433
-1546:2:1438
-1547:2:1442
-1548:2:1443
-1549:2:1450
-1550:2:1451
-1551:2:1462
-1552:2:1463
-1553:2:1464
-1554:2:1475
-1555:2:1480
-1556:2:1481
-1557:0:1982
-1558:2:1493
-1559:0:1982
-1560:2:1495
-1561:0:1982
-1562:2:1496
-1563:0:1982
-1564:2:1497
-1565:0:1982
-1566:2:1498
-1567:0:1982
-1568:2:1499
-1569:2:1503
-1570:2:1504
-1571:2:1512
-1572:2:1513
-1573:2:1517
-1574:2:1518
-1575:2:1526
-1576:2:1531
-1577:2:1535
-1578:2:1536
-1579:2:1543
-1580:2:1544
-1581:2:1555
-1582:2:1556
-1583:2:1557
-1584:2:1568
-1585:2:1573
-1586:2:1574
-1587:0:1982
-1588:2:1586
-1589:0:1982
-1590:2:1699
-1591:0:1982
-1592:2:1797
-1593:0:1982
-1594:2:1798
-1595:0:1982
-1596:2:1802
-1597:0:1982
-1598:2:1811
-1599:2:1812
-1600:2:1816
-1601:2:1820
-1602:2:1821
-1603:2:1825
-1604:2:1833
-1605:2:1834
-1606:0:1982
-1607:2:1842
-1608:0:1982
-1609:2:1846
-1610:2:1847
-1611:2:1851
-1612:2:1855
-1613:2:1856
-1614:2:1860
-1615:2:1868
-1616:2:1869
-1617:0:1982
-1618:2:1877
-1619:0:1982
-1620:2:1885
-1621:2:1886
-1622:2:1890
-1623:2:1894
-1624:2:1895
-1625:2:1899
-1626:2:1907
-1627:2:1908
-1628:0:1982
-1629:2:1916
-1630:0:1982
-1631:2:1918
-1632:0:1982
-1633:2:1919
-1634:0:1982
-1635:2:1922
-1636:0:1982
-1637:2:1927
-1638:0:1982
-1639:1:101
-1640:0:1982
-1641:2:1928
-1642:0:1982
-1643:1:102
-1644:1:106
-1645:1:107
-1646:1:115
-1647:1:116
-1648:1:120
-1649:1:121
-1650:1:129
-1651:1:134
-1652:1:138
-1653:1:139
-1654:1:146
-1655:1:147
-1656:1:158
-1657:1:159
-1658:1:160
-1659:1:171
-1660:1:183
-1661:1:184
-1662:0:1982
-1663:2:1927
-1664:0:1982
-1665:1:189
-1666:0:1982
-1667:2:1928
-1668:0:1982
-1669:1:191
-1670:0:1982
-1671:2:1927
-1672:0:1982
-1673:1:192
-1674:0:1982
-1675:2:1928
-1676:0:1982
-1677:1:193
-1678:1:197
-1679:1:198
-1680:1:206
-1681:1:207
-1682:1:211
-1683:1:212
-1684:1:220
-1685:1:225
-1686:1:229
-1687:1:230
-1688:1:237
-1689:1:238
-1690:1:249
-1691:1:250
-1692:1:251
-1693:1:262
-1694:1:274
-1695:1:275
-1696:0:1982
-1697:2:1927
-1698:0:1982
-1699:1:280
-1700:0:1982
-1701:2:1928
-1702:0:1982
-1703:1:282
-1704:0:1982
-1705:2:1927
-1706:0:1982
-1707:1:291
-1708:0:1982
-1709:2:1928
-1710:0:1982
-1711:1:293
-1712:0:1982
-1713:2:1927
-1714:0:1982
-1715:1:296
-1716:0:1982
-1717:2:1928
-1718:0:1982
-1719:1:301
-1720:0:1982
-1721:2:1927
-1722:0:1982
-1723:1:302
-1724:0:1980
-1725:2:1928
-1726:0:1986
-1727:2:1429
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.define b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.log b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.log
deleted file mode 100644 (file)
index abf7b83..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_no_wmb.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-pan: claim violated! (at depth 1614)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 2823, errors: 1
-    81228 states, stored
-   752552 states, matched
-   833780 transitions (= stored+matched)
-  2934533 atomic steps
-hash conflicts:     10835 (resolved)
-
-Stats on memory usage (in Megabytes):
-    6.507      equivalent memory usage for states (stored*(State-vector + overhead))
-    5.330      actual memory usage for states (compression: 81.92%)
-               state-vector as stored = 41 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  471.037      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 331, "(1)"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (18 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 20, "(1)"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 34, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 403, "pan.___", state 35, "(1)"
-       line 401, "pan.___", state 40, "((i<1))"
-       line 401, "pan.___", state 40, "((i>=1))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 409, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 60, "else"
-       line 409, "pan.___", state 63, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 409, "pan.___", state 64, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 413, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 73, "else"
-       line 413, "pan.___", state 76, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 413, "pan.___", state 77, "(1)"
-       line 411, "pan.___", state 82, "((i<1))"
-       line 411, "pan.___", state 82, "((i>=1))"
-       line 418, "pan.___", state 89, "(1)"
-       line 418, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 90, "else"
-       line 418, "pan.___", state 93, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 418, "pan.___", state 94, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 420, "pan.___", state 97, "(1)"
-       line 369, "pan.___", state 99, "(1)"
-       line 639, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 637, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 114, "(1)"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 128, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 403, "pan.___", state 129, "(1)"
-       line 401, "pan.___", state 134, "((i<1))"
-       line 401, "pan.___", state 134, "((i>=1))"
-       line 409, "pan.___", state 153, "(1)"
-       line 409, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 154, "else"
-       line 409, "pan.___", state 157, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 409, "pan.___", state 158, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 413, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 167, "else"
-       line 413, "pan.___", state 170, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 413, "pan.___", state 171, "(1)"
-       line 411, "pan.___", state 176, "((i<1))"
-       line 411, "pan.___", state 176, "((i>=1))"
-       line 418, "pan.___", state 183, "(1)"
-       line 418, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 184, "else"
-       line 418, "pan.___", state 187, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 418, "pan.___", state 188, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 420, "pan.___", state 191, "(1)"
-       line 369, "pan.___", state 193, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 646, "pan.___", state 202, "((write_lock==0))"
-       line 646, "pan.___", state 202, "else"
-       line 644, "pan.___", state 203, "(1)"
-       line 160, "pan.___", state 209, "(1)"
-       line 164, "pan.___", state 217, "(1)"
-       line 164, "pan.___", state 218, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 164, "pan.___", state 218, "else"
-       line 162, "pan.___", state 223, "((j<1))"
-       line 162, "pan.___", state 223, "((j>=1))"
-       line 168, "pan.___", state 229, "(1)"
-       line 168, "pan.___", state 230, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 168, "pan.___", state 230, "else"
-       line 160, "pan.___", state 241, "(1)"
-       line 168, "pan.___", state 261, "(1)"
-       line 160, "pan.___", state 277, "(1)"
-       line 164, "pan.___", state 285, "(1)"
-       line 168, "pan.___", state 297, "(1)"
-       line 399, "pan.___", state 311, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 325, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 343, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 356, "(1)"
-       line 413, "pan.___", state 369, "(1)"
-       line 418, "pan.___", state 386, "(1)"
-       line 399, "pan.___", state 405, "(1)"
-       line 403, "pan.___", state 417, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 435, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 461, "(1)"
-       line 418, "pan.___", state 478, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 164, "pan.___", state 594, "(1)"
-       line 168, "pan.___", state 606, "(1)"
-       line 160, "pan.___", state 618, "(1)"
-       line 168, "pan.___", state 638, "(1)"
-       line 164, "pan.___", state 662, "(1)"
-       line 168, "pan.___", state 674, "(1)"
-       line 399, "pan.___", state 696, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 698, "(1)"
-       line 399, "pan.___", state 699, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 699, "else"
-       line 399, "pan.___", state 702, "(1)"
-       line 403, "pan.___", state 710, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 712, "(1)"
-       line 403, "pan.___", state 713, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 713, "else"
-       line 403, "pan.___", state 716, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 403, "pan.___", state 717, "(1)"
-       line 401, "pan.___", state 722, "((i<1))"
-       line 401, "pan.___", state 722, "((i>=1))"
-       line 408, "pan.___", state 728, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 741, "(1)"
-       line 409, "pan.___", state 742, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 742, "else"
-       line 409, "pan.___", state 745, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 409, "pan.___", state 746, "(1)"
-       line 413, "pan.___", state 754, "(1)"
-       line 413, "pan.___", state 755, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 755, "else"
-       line 413, "pan.___", state 758, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 413, "pan.___", state 759, "(1)"
-       line 411, "pan.___", state 764, "((i<1))"
-       line 411, "pan.___", state 764, "((i>=1))"
-       line 418, "pan.___", state 771, "(1)"
-       line 418, "pan.___", state 772, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 772, "else"
-       line 418, "pan.___", state 775, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 418, "pan.___", state 776, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 420, "pan.___", state 779, "(1)"
-       line 403, "pan.___", state 810, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 828, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 854, "(1)"
-       line 418, "pan.___", state 871, "(1)"
-       line 403, "pan.___", state 900, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 918, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 944, "(1)"
-       line 418, "pan.___", state 961, "(1)"
-       line 399, "pan.___", state 980, "(1)"
-       line 403, "pan.___", state 992, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1010, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1036, "(1)"
-       line 418, "pan.___", state 1053, "(1)"
-       line 403, "pan.___", state 1085, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1103, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1129, "(1)"
-       line 418, "pan.___", state 1146, "(1)"
-       line 164, "pan.___", state 1169, "(1)"
-       line 168, "pan.___", state 1181, "(1)"
-       line 160, "pan.___", state 1193, "(1)"
-       line 168, "pan.___", state 1213, "(1)"
-       line 164, "pan.___", state 1237, "(1)"
-       line 168, "pan.___", state 1249, "(1)"
-       line 399, "pan.___", state 1271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1273, "(1)"
-       line 399, "pan.___", state 1274, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1274, "else"
-       line 399, "pan.___", state 1277, "(1)"
-       line 403, "pan.___", state 1285, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1287, "(1)"
-       line 403, "pan.___", state 1288, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1288, "else"
-       line 403, "pan.___", state 1291, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 403, "pan.___", state 1292, "(1)"
-       line 401, "pan.___", state 1297, "((i<1))"
-       line 401, "pan.___", state 1297, "((i>=1))"
-       line 408, "pan.___", state 1303, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1316, "(1)"
-       line 409, "pan.___", state 1317, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1317, "else"
-       line 409, "pan.___", state 1320, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 409, "pan.___", state 1321, "(1)"
-       line 413, "pan.___", state 1329, "(1)"
-       line 413, "pan.___", state 1330, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1330, "else"
-       line 413, "pan.___", state 1333, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 413, "pan.___", state 1334, "(1)"
-       line 411, "pan.___", state 1339, "((i<1))"
-       line 411, "pan.___", state 1339, "((i>=1))"
-       line 418, "pan.___", state 1346, "(1)"
-       line 418, "pan.___", state 1347, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1347, "else"
-       line 418, "pan.___", state 1350, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 418, "pan.___", state 1351, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 420, "pan.___", state 1354, "(1)"
-       line 164, "pan.___", state 1379, "(1)"
-       line 168, "pan.___", state 1391, "(1)"
-       line 160, "pan.___", state 1403, "(1)"
-       line 168, "pan.___", state 1423, "(1)"
-       line 164, "pan.___", state 1447, "(1)"
-       line 168, "pan.___", state 1459, "(1)"
-       line 702, "pan.___", state 1484, "-end-"
-       (160 of 1484 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 0.66 seconds
-pan: rate 123072.73 states/second
-pan: avg transition delay 7.9158e-07 usec
-cp .input.spin urcu_free_no_wmb.spin.input
-cp .input.spin.trail urcu_free_no_wmb.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.spin.input
deleted file mode 100644 (file)
index df3cc4b..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define NO_WMB
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_free_no_wmb.spin.input.trail
deleted file mode 100644 (file)
index fe987f0..0000000
+++ /dev/null
@@ -1,1617 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1946
-2:3:1898
-3:3:1901
-4:3:1901
-5:3:1904
-6:3:1912
-7:3:1912
-8:3:1915
-9:3:1921
-10:3:1925
-11:3:1925
-12:3:1928
-13:3:1936
-14:3:1940
-15:3:1941
-16:0:1946
-17:3:1943
-18:0:1946
-19:2:416
-20:0:1946
-21:2:422
-22:0:1946
-23:2:423
-24:0:1946
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1946
-45:2:511
-46:0:1946
-47:2:513
-48:2:514
-49:0:1946
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1946
-69:2:605
-70:0:1946
-71:2:607
-72:0:1946
-73:2:608
-74:0:1946
-75:2:618
-76:0:1946
-77:2:619
-78:2:626
-79:2:627
-80:2:634
-81:2:639
-82:0:1946
-83:2:650
-84:0:1946
-85:2:651
-86:2:658
-87:2:659
-88:2:666
-89:2:671
-90:0:1946
-91:2:682
-92:0:1946
-93:2:687
-94:2:694
-95:2:695
-96:2:702
-97:2:707
-98:0:1946
-99:2:718
-100:0:1946
-101:2:720
-102:0:1946
-103:2:721
-104:2:725
-105:2:726
-106:2:734
-107:2:735
-108:2:739
-109:2:740
-110:2:748
-111:2:753
-112:2:757
-113:2:758
-114:2:765
-115:2:766
-116:2:777
-117:2:778
-118:2:779
-119:2:790
-120:2:795
-121:2:796
-122:0:1946
-123:2:808
-124:0:1946
-125:2:810
-126:0:1946
-127:2:813
-128:2:814
-129:2:826
-130:2:827
-131:2:831
-132:2:832
-133:2:840
-134:2:845
-135:2:849
-136:2:850
-137:2:857
-138:2:858
-139:2:869
-140:2:870
-141:2:871
-142:2:882
-143:2:887
-144:2:888
-145:0:1946
-146:2:900
-147:0:1946
-148:2:902
-149:0:1946
-150:2:903
-151:0:1946
-152:2:904
-153:0:1946
-154:2:905
-155:0:1946
-156:2:906
-157:2:910
-158:2:911
-159:2:919
-160:2:920
-161:2:924
-162:2:925
-163:2:933
-164:2:938
-165:2:942
-166:2:943
-167:2:950
-168:2:951
-169:2:962
-170:2:963
-171:2:964
-172:2:975
-173:2:980
-174:2:981
-175:0:1946
-176:2:993
-177:0:1946
-178:2:1097
-179:0:1946
-180:2:1195
-181:0:1946
-182:2:1196
-183:0:1946
-184:2:1200
-185:0:1946
-186:2:1206
-187:2:1210
-188:2:1211
-189:2:1219
-190:2:1220
-191:2:1224
-192:2:1225
-193:2:1233
-194:2:1238
-195:2:1242
-196:2:1243
-197:2:1250
-198:2:1251
-199:2:1262
-200:2:1263
-201:2:1264
-202:2:1275
-203:2:1280
-204:2:1281
-205:0:1946
-206:2:1293
-207:0:1946
-208:2:1295
-209:0:1946
-210:2:1296
-211:2:1300
-212:2:1301
-213:2:1309
-214:2:1310
-215:2:1314
-216:2:1315
-217:2:1323
-218:2:1328
-219:2:1332
-220:2:1333
-221:2:1340
-222:2:1341
-223:2:1352
-224:2:1353
-225:2:1354
-226:2:1365
-227:2:1370
-228:2:1371
-229:0:1946
-230:2:1383
-231:0:1946
-232:2:1385
-233:0:1946
-234:2:1388
-235:2:1389
-236:2:1401
-237:2:1402
-238:2:1406
-239:2:1407
-240:2:1415
-241:2:1420
-242:2:1424
-243:2:1425
-244:2:1432
-245:2:1433
-246:2:1444
-247:2:1445
-248:2:1446
-249:2:1457
-250:2:1462
-251:2:1463
-252:0:1946
-253:2:1475
-254:0:1946
-255:2:1477
-256:0:1946
-257:2:1478
-258:0:1946
-259:2:1479
-260:0:1946
-261:2:1480
-262:0:1946
-263:2:1481
-264:2:1485
-265:2:1486
-266:2:1494
-267:2:1495
-268:2:1499
-269:2:1500
-270:2:1508
-271:2:1513
-272:2:1517
-273:2:1518
-274:2:1525
-275:2:1526
-276:2:1537
-277:2:1538
-278:2:1539
-279:2:1550
-280:2:1555
-281:2:1556
-282:0:1946
-283:2:1568
-284:0:1946
-285:2:1672
-286:0:1946
-287:2:1770
-288:0:1946
-289:2:1771
-290:0:1946
-291:2:1775
-292:0:1946
-293:2:1781
-294:2:1788
-295:2:1789
-296:2:1796
-297:2:1801
-298:0:1946
-299:2:1812
-300:0:1946
-301:2:1813
-302:2:1820
-303:2:1821
-304:2:1828
-305:2:1833
-306:0:1946
-307:2:1844
-308:0:1946
-309:2:1849
-310:2:1856
-311:2:1857
-312:2:1864
-313:2:1869
-314:0:1946
-315:2:1880
-316:0:1946
-317:2:1882
-318:0:1946
-319:2:1883
-320:0:1946
-321:2:423
-322:0:1946
-323:2:424
-324:2:428
-325:2:429
-326:2:437
-327:2:438
-328:2:442
-329:2:443
-330:2:451
-331:2:456
-332:2:460
-333:2:461
-334:2:468
-335:2:469
-336:2:480
-337:2:481
-338:2:482
-339:2:493
-340:2:498
-341:2:499
-342:0:1946
-343:2:511
-344:0:1946
-345:2:513
-346:2:514
-347:0:1946
-348:2:518
-349:2:522
-350:2:523
-351:2:531
-352:2:532
-353:2:536
-354:2:537
-355:2:545
-356:2:550
-357:2:551
-358:2:562
-359:2:563
-360:2:574
-361:2:575
-362:2:576
-363:2:587
-364:2:592
-365:2:593
-366:0:1946
-367:2:605
-368:0:1946
-369:2:607
-370:0:1946
-371:2:608
-372:0:1946
-373:2:618
-374:0:1946
-375:2:619
-376:2:626
-377:2:627
-378:2:634
-379:2:639
-380:0:1946
-381:2:650
-382:0:1946
-383:2:651
-384:2:658
-385:2:659
-386:2:666
-387:2:671
-388:0:1946
-389:2:682
-390:0:1946
-391:2:687
-392:2:694
-393:2:695
-394:2:702
-395:2:707
-396:0:1946
-397:2:718
-398:0:1946
-399:2:720
-400:0:1946
-401:2:721
-402:2:725
-403:2:726
-404:2:734
-405:2:735
-406:2:739
-407:2:740
-408:2:748
-409:2:753
-410:2:757
-411:2:758
-412:2:765
-413:2:766
-414:2:777
-415:2:778
-416:2:779
-417:2:790
-418:2:795
-419:2:796
-420:0:1946
-421:2:808
-422:0:1946
-423:2:810
-424:0:1946
-425:2:813
-426:2:814
-427:2:826
-428:2:827
-429:2:831
-430:2:832
-431:2:840
-432:2:845
-433:2:849
-434:2:850
-435:2:857
-436:2:858
-437:2:869
-438:2:870
-439:2:871
-440:2:882
-441:2:887
-442:2:888
-443:0:1946
-444:2:900
-445:0:1946
-446:2:902
-447:0:1946
-448:2:903
-449:0:1946
-450:2:904
-451:0:1946
-452:2:905
-453:0:1946
-454:2:906
-455:2:910
-456:2:911
-457:2:919
-458:2:920
-459:2:924
-460:2:925
-461:2:933
-462:2:938
-463:2:942
-464:2:943
-465:2:950
-466:2:951
-467:2:962
-468:2:963
-469:2:964
-470:2:975
-471:2:980
-472:2:981
-473:0:1946
-474:2:993
-475:0:1946
-476:2:1097
-477:0:1946
-478:2:1195
-479:0:1946
-480:2:1196
-481:0:1946
-482:2:1200
-483:0:1946
-484:2:1206
-485:2:1210
-486:2:1211
-487:2:1219
-488:2:1220
-489:2:1224
-490:2:1225
-491:2:1233
-492:2:1238
-493:2:1242
-494:2:1243
-495:2:1250
-496:2:1251
-497:2:1262
-498:2:1263
-499:2:1264
-500:2:1275
-501:2:1280
-502:2:1281
-503:0:1946
-504:2:1293
-505:0:1946
-506:2:1295
-507:0:1946
-508:2:1296
-509:2:1300
-510:2:1301
-511:2:1309
-512:2:1310
-513:2:1314
-514:2:1315
-515:2:1323
-516:2:1328
-517:2:1332
-518:2:1333
-519:2:1340
-520:2:1341
-521:2:1352
-522:2:1353
-523:2:1354
-524:2:1365
-525:2:1370
-526:2:1371
-527:0:1946
-528:2:1383
-529:0:1946
-530:2:1385
-531:0:1946
-532:2:1388
-533:2:1389
-534:2:1401
-535:2:1402
-536:2:1406
-537:2:1407
-538:2:1415
-539:2:1420
-540:2:1424
-541:2:1425
-542:2:1432
-543:2:1433
-544:2:1444
-545:2:1445
-546:2:1446
-547:2:1457
-548:2:1462
-549:2:1463
-550:0:1946
-551:2:1475
-552:0:1946
-553:2:1477
-554:0:1946
-555:2:1478
-556:0:1946
-557:2:1479
-558:0:1946
-559:2:1480
-560:0:1946
-561:2:1481
-562:2:1485
-563:2:1486
-564:2:1494
-565:2:1495
-566:2:1499
-567:2:1500
-568:2:1508
-569:2:1513
-570:2:1517
-571:2:1518
-572:2:1525
-573:2:1526
-574:2:1537
-575:2:1538
-576:2:1539
-577:2:1550
-578:2:1555
-579:2:1556
-580:0:1946
-581:2:1568
-582:0:1946
-583:2:1672
-584:0:1946
-585:2:1770
-586:0:1946
-587:2:1771
-588:0:1946
-589:2:1775
-590:0:1946
-591:2:1781
-592:2:1788
-593:2:1789
-594:2:1796
-595:2:1801
-596:0:1946
-597:2:1812
-598:0:1946
-599:2:1813
-600:2:1820
-601:2:1821
-602:2:1828
-603:2:1833
-604:0:1946
-605:2:1844
-606:0:1946
-607:2:1849
-608:2:1856
-609:2:1857
-610:2:1864
-611:2:1869
-612:0:1946
-613:2:1880
-614:0:1946
-615:2:1882
-616:0:1946
-617:2:1883
-618:0:1946
-619:2:423
-620:0:1946
-621:2:424
-622:2:428
-623:2:429
-624:2:437
-625:2:438
-626:2:442
-627:2:443
-628:2:451
-629:2:456
-630:2:460
-631:2:461
-632:2:468
-633:2:469
-634:2:480
-635:2:481
-636:2:482
-637:2:493
-638:2:498
-639:2:499
-640:0:1946
-641:2:511
-642:0:1946
-643:2:513
-644:2:514
-645:0:1946
-646:2:518
-647:2:522
-648:2:523
-649:2:531
-650:2:532
-651:2:536
-652:2:537
-653:2:545
-654:2:550
-655:2:551
-656:2:562
-657:2:563
-658:2:574
-659:2:575
-660:2:576
-661:2:587
-662:2:592
-663:2:593
-664:0:1946
-665:2:605
-666:0:1946
-667:2:607
-668:0:1946
-669:2:608
-670:0:1946
-671:2:618
-672:0:1946
-673:2:619
-674:2:626
-675:2:627
-676:2:634
-677:2:639
-678:0:1946
-679:2:650
-680:0:1946
-681:2:651
-682:2:658
-683:2:659
-684:2:666
-685:2:671
-686:0:1946
-687:2:682
-688:0:1946
-689:2:687
-690:2:694
-691:2:695
-692:2:702
-693:2:707
-694:0:1946
-695:2:718
-696:0:1946
-697:2:720
-698:0:1946
-699:2:721
-700:2:725
-701:2:726
-702:2:734
-703:2:735
-704:2:739
-705:2:740
-706:2:748
-707:2:753
-708:2:757
-709:2:758
-710:2:765
-711:2:766
-712:2:777
-713:2:778
-714:2:779
-715:2:790
-716:2:795
-717:2:796
-718:0:1946
-719:2:808
-720:0:1946
-721:2:810
-722:0:1946
-723:2:813
-724:2:814
-725:2:826
-726:2:827
-727:2:831
-728:2:832
-729:2:840
-730:2:845
-731:2:849
-732:2:850
-733:2:857
-734:2:858
-735:2:869
-736:2:870
-737:2:871
-738:2:882
-739:2:887
-740:2:888
-741:0:1946
-742:2:900
-743:0:1946
-744:2:902
-745:0:1946
-746:2:903
-747:0:1946
-748:2:904
-749:0:1946
-750:2:905
-751:0:1946
-752:2:906
-753:2:910
-754:2:911
-755:2:919
-756:2:920
-757:2:924
-758:2:925
-759:2:933
-760:2:938
-761:2:942
-762:2:943
-763:2:950
-764:2:951
-765:2:962
-766:2:963
-767:2:964
-768:2:975
-769:2:980
-770:2:981
-771:0:1946
-772:2:993
-773:0:1946
-774:2:1097
-775:0:1946
-776:2:1195
-777:0:1946
-778:2:1196
-779:0:1946
-780:2:1200
-781:0:1946
-782:2:1206
-783:2:1210
-784:2:1211
-785:2:1219
-786:2:1220
-787:2:1224
-788:2:1225
-789:2:1233
-790:2:1238
-791:2:1242
-792:2:1243
-793:2:1250
-794:2:1251
-795:2:1262
-796:2:1263
-797:2:1264
-798:2:1275
-799:2:1280
-800:2:1281
-801:0:1946
-802:2:1293
-803:0:1946
-804:2:1295
-805:0:1946
-806:2:1296
-807:2:1300
-808:2:1301
-809:2:1309
-810:2:1310
-811:2:1314
-812:2:1315
-813:2:1323
-814:2:1328
-815:2:1332
-816:2:1333
-817:2:1340
-818:2:1341
-819:2:1352
-820:2:1353
-821:2:1354
-822:2:1365
-823:2:1370
-824:2:1371
-825:0:1946
-826:2:1383
-827:0:1946
-828:2:1385
-829:0:1946
-830:2:1388
-831:2:1389
-832:2:1401
-833:2:1402
-834:2:1406
-835:2:1407
-836:2:1415
-837:2:1420
-838:2:1424
-839:2:1425
-840:2:1432
-841:2:1433
-842:2:1444
-843:2:1445
-844:2:1446
-845:2:1457
-846:2:1462
-847:2:1463
-848:0:1946
-849:2:1475
-850:0:1946
-851:2:1477
-852:0:1946
-853:2:1478
-854:0:1946
-855:2:1479
-856:0:1946
-857:2:1480
-858:0:1946
-859:2:1481
-860:2:1485
-861:2:1486
-862:2:1494
-863:2:1495
-864:2:1499
-865:2:1500
-866:2:1508
-867:2:1513
-868:2:1517
-869:2:1518
-870:2:1525
-871:2:1526
-872:2:1537
-873:2:1538
-874:2:1539
-875:2:1550
-876:2:1555
-877:2:1556
-878:0:1946
-879:2:1568
-880:0:1946
-881:2:1672
-882:0:1946
-883:2:1770
-884:0:1946
-885:2:1771
-886:0:1946
-887:2:1775
-888:0:1946
-889:2:1781
-890:2:1788
-891:2:1789
-892:2:1796
-893:2:1801
-894:0:1946
-895:2:1812
-896:0:1946
-897:2:1813
-898:2:1820
-899:2:1821
-900:2:1828
-901:2:1833
-902:0:1946
-903:2:1844
-904:0:1946
-905:2:1849
-906:2:1856
-907:2:1857
-908:2:1864
-909:2:1869
-910:0:1946
-911:2:1880
-912:0:1946
-913:2:1882
-914:0:1946
-915:2:1883
-916:0:1946
-917:2:423
-918:0:1946
-919:2:424
-920:2:428
-921:2:429
-922:2:437
-923:2:438
-924:2:442
-925:2:443
-926:2:451
-927:2:456
-928:2:460
-929:2:461
-930:2:468
-931:2:469
-932:2:480
-933:2:481
-934:2:482
-935:2:493
-936:2:498
-937:2:499
-938:0:1946
-939:2:511
-940:0:1946
-941:2:513
-942:2:514
-943:0:1946
-944:2:518
-945:2:522
-946:2:523
-947:2:531
-948:2:532
-949:2:536
-950:2:537
-951:2:545
-952:2:550
-953:2:551
-954:2:562
-955:2:563
-956:2:574
-957:2:575
-958:2:576
-959:2:587
-960:2:592
-961:2:593
-962:0:1946
-963:2:605
-964:0:1946
-965:2:607
-966:0:1946
-967:2:608
-968:0:1946
-969:2:618
-970:0:1946
-971:2:619
-972:2:626
-973:2:627
-974:2:634
-975:2:639
-976:0:1946
-977:2:650
-978:0:1946
-979:2:651
-980:2:658
-981:2:659
-982:2:666
-983:2:671
-984:0:1946
-985:2:682
-986:0:1946
-987:2:687
-988:2:694
-989:2:695
-990:2:702
-991:2:707
-992:0:1946
-993:2:718
-994:0:1946
-995:2:720
-996:0:1946
-997:2:721
-998:2:725
-999:2:726
-1000:2:734
-1001:2:735
-1002:2:739
-1003:2:740
-1004:2:748
-1005:2:753
-1006:2:757
-1007:2:758
-1008:2:765
-1009:2:766
-1010:2:777
-1011:2:778
-1012:2:779
-1013:2:790
-1014:2:795
-1015:2:796
-1016:0:1946
-1017:2:808
-1018:0:1946
-1019:2:810
-1020:0:1946
-1021:2:813
-1022:2:814
-1023:2:826
-1024:2:827
-1025:2:831
-1026:2:832
-1027:2:840
-1028:2:845
-1029:2:849
-1030:2:850
-1031:2:857
-1032:2:858
-1033:2:869
-1034:2:870
-1035:2:871
-1036:2:882
-1037:2:887
-1038:2:888
-1039:0:1946
-1040:2:900
-1041:0:1946
-1042:2:902
-1043:0:1946
-1044:2:903
-1045:0:1946
-1046:2:904
-1047:0:1946
-1048:2:905
-1049:0:1946
-1050:2:906
-1051:2:910
-1052:2:911
-1053:2:919
-1054:2:920
-1055:2:924
-1056:2:925
-1057:2:933
-1058:2:938
-1059:2:942
-1060:2:943
-1061:2:950
-1062:2:951
-1063:2:962
-1064:2:963
-1065:2:964
-1066:2:975
-1067:2:980
-1068:2:981
-1069:0:1946
-1070:2:993
-1071:0:1946
-1072:2:1097
-1073:0:1946
-1074:2:1195
-1075:0:1946
-1076:2:1196
-1077:0:1946
-1078:2:1200
-1079:0:1946
-1080:2:1206
-1081:2:1210
-1082:2:1211
-1083:2:1219
-1084:2:1220
-1085:2:1224
-1086:2:1225
-1087:2:1233
-1088:2:1238
-1089:2:1242
-1090:2:1243
-1091:2:1250
-1092:2:1251
-1093:2:1262
-1094:2:1263
-1095:2:1264
-1096:2:1275
-1097:2:1280
-1098:2:1281
-1099:0:1946
-1100:2:1293
-1101:0:1946
-1102:2:1295
-1103:0:1946
-1104:2:1296
-1105:2:1300
-1106:2:1301
-1107:2:1309
-1108:2:1310
-1109:2:1314
-1110:2:1315
-1111:2:1323
-1112:2:1328
-1113:2:1332
-1114:2:1333
-1115:2:1340
-1116:2:1341
-1117:2:1352
-1118:2:1353
-1119:2:1354
-1120:2:1365
-1121:2:1370
-1122:2:1371
-1123:0:1946
-1124:2:1383
-1125:0:1946
-1126:2:1385
-1127:0:1946
-1128:2:1388
-1129:2:1389
-1130:2:1401
-1131:2:1402
-1132:2:1406
-1133:2:1407
-1134:2:1415
-1135:2:1420
-1136:2:1424
-1137:2:1425
-1138:2:1432
-1139:2:1433
-1140:2:1444
-1141:2:1445
-1142:2:1446
-1143:2:1457
-1144:2:1462
-1145:2:1463
-1146:0:1946
-1147:2:1475
-1148:0:1946
-1149:2:1477
-1150:0:1946
-1151:2:1478
-1152:0:1946
-1153:2:1479
-1154:0:1946
-1155:2:1480
-1156:0:1946
-1157:2:1481
-1158:2:1485
-1159:2:1486
-1160:2:1494
-1161:2:1495
-1162:2:1499
-1163:2:1500
-1164:2:1508
-1165:2:1513
-1166:2:1517
-1167:2:1518
-1168:2:1525
-1169:2:1526
-1170:2:1537
-1171:2:1538
-1172:2:1539
-1173:2:1550
-1174:2:1555
-1175:2:1556
-1176:0:1946
-1177:2:1568
-1178:0:1946
-1179:2:1672
-1180:0:1946
-1181:2:1770
-1182:0:1946
-1183:2:1771
-1184:0:1946
-1185:2:1775
-1186:0:1946
-1187:2:1781
-1188:2:1788
-1189:2:1789
-1190:2:1796
-1191:2:1801
-1192:0:1946
-1193:2:1812
-1194:0:1946
-1195:2:1813
-1196:2:1820
-1197:2:1821
-1198:2:1828
-1199:2:1833
-1200:0:1946
-1201:2:1844
-1202:0:1946
-1203:2:1849
-1204:2:1856
-1205:2:1857
-1206:2:1864
-1207:2:1869
-1208:0:1946
-1209:2:1880
-1210:0:1946
-1211:2:1882
-1212:0:1946
-1213:2:1883
-1214:0:1946
-1215:2:423
-1216:0:1946
-1217:2:424
-1218:2:428
-1219:2:429
-1220:2:437
-1221:2:438
-1222:2:442
-1223:2:443
-1224:2:451
-1225:2:456
-1226:2:460
-1227:2:461
-1228:2:468
-1229:2:469
-1230:2:480
-1231:2:481
-1232:2:482
-1233:2:493
-1234:2:498
-1235:2:499
-1236:0:1946
-1237:2:511
-1238:0:1946
-1239:2:513
-1240:2:514
-1241:0:1946
-1242:2:518
-1243:2:522
-1244:2:523
-1245:2:531
-1246:2:532
-1247:2:536
-1248:2:537
-1249:2:545
-1250:2:550
-1251:2:551
-1252:2:562
-1253:2:563
-1254:2:574
-1255:2:575
-1256:2:576
-1257:2:587
-1258:2:592
-1259:2:593
-1260:0:1946
-1261:2:605
-1262:0:1946
-1263:2:607
-1264:0:1946
-1265:2:608
-1266:0:1946
-1267:2:618
-1268:0:1946
-1269:2:619
-1270:2:626
-1271:2:627
-1272:2:634
-1273:2:639
-1274:0:1946
-1275:2:650
-1276:0:1946
-1277:1:2
-1278:0:1946
-1279:1:8
-1280:0:1946
-1281:1:9
-1282:0:1946
-1283:1:10
-1284:0:1946
-1285:1:11
-1286:0:1946
-1287:1:12
-1288:1:16
-1289:1:17
-1290:1:25
-1291:1:26
-1292:1:30
-1293:1:31
-1294:1:39
-1295:1:44
-1296:1:48
-1297:1:49
-1298:1:56
-1299:1:57
-1300:1:68
-1301:1:69
-1302:1:70
-1303:1:81
-1304:1:93
-1305:1:94
-1306:0:1946
-1307:1:99
-1308:0:1946
-1309:1:101
-1310:0:1946
-1311:1:102
-1312:1:106
-1313:1:107
-1314:1:115
-1315:1:116
-1316:1:120
-1317:1:121
-1318:1:129
-1319:1:134
-1320:1:138
-1321:1:139
-1322:1:146
-1323:1:147
-1324:1:158
-1325:1:159
-1326:1:160
-1327:1:171
-1328:1:183
-1329:1:184
-1330:0:1946
-1331:1:189
-1332:0:1946
-1333:1:191
-1334:0:1946
-1335:1:192
-1336:0:1946
-1337:1:193
-1338:1:197
-1339:1:198
-1340:1:206
-1341:1:207
-1342:1:211
-1343:1:212
-1344:1:220
-1345:1:225
-1346:1:229
-1347:1:230
-1348:1:237
-1349:1:238
-1350:1:249
-1351:1:250
-1352:1:251
-1353:1:262
-1354:1:274
-1355:1:275
-1356:0:1946
-1357:1:280
-1358:0:1946
-1359:1:282
-1360:0:1946
-1361:1:291
-1362:0:1946
-1363:1:293
-1364:0:1946
-1365:1:296
-1366:0:1946
-1367:1:301
-1368:0:1946
-1369:2:651
-1370:2:658
-1371:2:661
-1372:2:662
-1373:2:666
-1374:2:671
-1375:0:1946
-1376:2:682
-1377:0:1946
-1378:2:687
-1379:2:694
-1380:2:695
-1381:2:702
-1382:2:707
-1383:0:1946
-1384:2:718
-1385:0:1946
-1386:2:720
-1387:0:1946
-1388:2:721
-1389:2:725
-1390:2:726
-1391:2:734
-1392:2:735
-1393:2:739
-1394:2:740
-1395:2:748
-1396:2:753
-1397:2:757
-1398:2:758
-1399:2:765
-1400:2:766
-1401:2:777
-1402:2:778
-1403:2:779
-1404:2:790
-1405:2:795
-1406:2:796
-1407:0:1946
-1408:2:808
-1409:0:1946
-1410:2:810
-1411:0:1946
-1412:2:813
-1413:2:814
-1414:2:826
-1415:2:827
-1416:2:831
-1417:2:832
-1418:2:840
-1419:2:845
-1420:2:849
-1421:2:850
-1422:2:857
-1423:2:858
-1424:2:869
-1425:2:870
-1426:2:871
-1427:2:882
-1428:2:887
-1429:2:888
-1430:0:1946
-1431:2:900
-1432:0:1946
-1433:2:902
-1434:0:1946
-1435:2:903
-1436:0:1946
-1437:2:904
-1438:0:1946
-1439:2:905
-1440:0:1946
-1441:2:906
-1442:2:910
-1443:2:911
-1444:2:919
-1445:2:920
-1446:2:924
-1447:2:925
-1448:2:933
-1449:2:938
-1450:2:942
-1451:2:943
-1452:2:950
-1453:2:951
-1454:2:962
-1455:2:963
-1456:2:964
-1457:2:975
-1458:2:980
-1459:2:981
-1460:0:1946
-1461:2:993
-1462:0:1946
-1463:2:1097
-1464:0:1946
-1465:2:1195
-1466:0:1946
-1467:2:1196
-1468:0:1946
-1469:2:1200
-1470:0:1946
-1471:2:1206
-1472:2:1210
-1473:2:1211
-1474:2:1219
-1475:2:1220
-1476:2:1224
-1477:2:1225
-1478:2:1233
-1479:2:1238
-1480:2:1242
-1481:2:1243
-1482:2:1250
-1483:2:1251
-1484:2:1262
-1485:2:1263
-1486:2:1264
-1487:2:1275
-1488:2:1280
-1489:2:1281
-1490:0:1946
-1491:2:1293
-1492:0:1946
-1493:2:1295
-1494:0:1946
-1495:2:1296
-1496:2:1300
-1497:2:1301
-1498:2:1309
-1499:2:1310
-1500:2:1314
-1501:2:1315
-1502:2:1323
-1503:2:1328
-1504:2:1332
-1505:2:1333
-1506:2:1340
-1507:2:1341
-1508:2:1352
-1509:2:1353
-1510:2:1354
-1511:2:1365
-1512:2:1370
-1513:2:1371
-1514:0:1946
-1515:2:1383
-1516:0:1946
-1517:2:1385
-1518:0:1946
-1519:2:1388
-1520:2:1389
-1521:2:1401
-1522:2:1402
-1523:2:1406
-1524:2:1407
-1525:2:1415
-1526:2:1420
-1527:2:1424
-1528:2:1425
-1529:2:1432
-1530:2:1433
-1531:2:1444
-1532:2:1445
-1533:2:1446
-1534:2:1457
-1535:2:1462
-1536:2:1463
-1537:0:1946
-1538:2:1475
-1539:0:1946
-1540:2:1477
-1541:0:1946
-1542:2:1478
-1543:0:1946
-1544:2:1479
-1545:0:1946
-1546:2:1480
-1547:0:1946
-1548:2:1481
-1549:2:1485
-1550:2:1486
-1551:2:1494
-1552:2:1495
-1553:2:1499
-1554:2:1500
-1555:2:1508
-1556:2:1513
-1557:2:1517
-1558:2:1518
-1559:2:1525
-1560:2:1526
-1561:2:1537
-1562:2:1538
-1563:2:1539
-1564:2:1550
-1565:2:1555
-1566:2:1556
-1567:0:1946
-1568:2:1568
-1569:0:1946
-1570:2:1672
-1571:0:1946
-1572:2:1770
-1573:0:1946
-1574:2:1771
-1575:0:1946
-1576:2:1775
-1577:0:1946
-1578:2:1781
-1579:2:1788
-1580:2:1789
-1581:2:1796
-1582:2:1801
-1583:0:1946
-1584:2:1812
-1585:0:1946
-1586:2:1813
-1587:2:1820
-1588:2:1823
-1589:2:1824
-1590:2:1828
-1591:2:1833
-1592:0:1946
-1593:2:1844
-1594:0:1946
-1595:2:1849
-1596:2:1856
-1597:2:1857
-1598:2:1864
-1599:2:1869
-1600:0:1946
-1601:2:1880
-1602:0:1946
-1603:2:1882
-1604:0:1946
-1605:2:1883
-1606:0:1946
-1607:2:1886
-1608:0:1946
-1609:2:1891
-1610:0:1946
-1611:1:302
-1612:0:1944
-1613:2:1892
-1614:0:1950
-1615:1:244
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.define b/formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.log b/formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.log
deleted file mode 100644 (file)
index 16843a5..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define >> pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_free.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_free_single_flip.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-pan: claim violated! (at depth 1316)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness disabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 2045, errors: 1
-    52434 states, stored
-   479392 states, matched
-   531826 transitions (= stored+matched)
-  1926196 atomic steps
-hash conflicts:      6594 (resolved)
-
-Stats on memory usage (in Megabytes):
-    4.200      equivalent memory usage for states (stored*(State-vector + overhead))
-    3.608      actual memory usage for states (compression: 85.89%)
-               state-vector as stored = 44 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  469.279      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 179, "pan.___", state 990, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1003, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1013, "(1)"
-       line 164, "pan.___", state 1021, "(1)"
-       line 168, "pan.___", state 1033, "(1)"
-       line 175, "pan.___", state 1044, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1066, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1076, "(1)"
-       line 164, "pan.___", state 1084, "(1)"
-       line 168, "pan.___", state 1096, "(1)"
-       line 175, "pan.___", state 1111, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1120, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1133, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1143, "(1)"
-       line 164, "pan.___", state 1151, "(1)"
-       line 168, "pan.___", state 1163, "(1)"
-       line 702, "pan.___", state 1188, "-end-"
-       (100 of 1188 states)
-unreached in proctype :init:
-       line 709, "pan.___", state 9, "((j<2))"
-       line 709, "pan.___", state 9, "((j>=2))"
-       line 710, "pan.___", state 20, "((j<2))"
-       line 710, "pan.___", state 20, "((j>=2))"
-       line 715, "pan.___", state 33, "((j<2))"
-       line 715, "pan.___", state 33, "((j>=2))"
-       (3 of 46 states)
-unreached in proctype :never:
-       line 749, "pan.___", state 8, "-end-"
-       (1 of 8 states)
-
-pan: elapsed time 0.43 seconds
-pan: rate 121939.53 states/second
-pan: avg transition delay 8.0854e-07 usec
-cp .input.spin urcu_free_single_flip.spin.input
-cp .input.spin.trail urcu_free_single_flip.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.spin.input
deleted file mode 100644 (file)
index bb95a2d..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define SINGLE_FLIP
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_free_single_flip.spin.input.trail
deleted file mode 100644 (file)
index a3f64a1..0000000
+++ /dev/null
@@ -1,1319 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:1650
-2:3:1602
-3:3:1605
-4:3:1605
-5:3:1608
-6:3:1616
-7:3:1616
-8:3:1619
-9:3:1625
-10:3:1629
-11:3:1629
-12:3:1632
-13:3:1640
-14:3:1644
-15:3:1645
-16:0:1650
-17:3:1647
-18:0:1650
-19:2:416
-20:0:1650
-21:2:422
-22:0:1650
-23:2:423
-24:0:1650
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:1650
-45:2:511
-46:0:1650
-47:2:513
-48:2:514
-49:0:1650
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:1650
-69:2:605
-70:0:1650
-71:2:607
-72:0:1650
-73:2:608
-74:0:1650
-75:2:618
-76:0:1650
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:2:650
-86:2:657
-87:2:658
-88:2:665
-89:2:670
-90:0:1650
-91:2:681
-92:0:1650
-93:2:685
-94:2:686
-95:2:690
-96:2:694
-97:2:695
-98:2:699
-99:2:707
-100:2:708
-101:2:713
-102:2:720
-103:2:721
-104:2:728
-105:2:733
-106:0:1650
-107:2:744
-108:0:1650
-109:2:752
-110:2:753
-111:2:757
-112:2:761
-113:2:762
-114:2:766
-115:2:774
-116:2:775
-117:2:780
-118:2:787
-119:2:788
-120:2:795
-121:2:800
-122:0:1650
-123:2:811
-124:0:1650
-125:2:813
-126:0:1650
-127:2:814
-128:2:818
-129:2:819
-130:2:827
-131:2:828
-132:2:832
-133:2:833
-134:2:841
-135:2:846
-136:2:850
-137:2:851
-138:2:858
-139:2:859
-140:2:870
-141:2:871
-142:2:872
-143:2:883
-144:2:888
-145:2:889
-146:0:1650
-147:2:901
-148:0:1650
-149:2:903
-150:0:1650
-151:2:906
-152:2:907
-153:2:919
-154:2:920
-155:2:924
-156:2:925
-157:2:933
-158:2:938
-159:2:942
-160:2:943
-161:2:950
-162:2:951
-163:2:962
-164:2:963
-165:2:964
-166:2:975
-167:2:980
-168:2:981
-169:0:1650
-170:2:993
-171:0:1650
-172:2:995
-173:0:1650
-174:2:996
-175:0:1650
-176:2:997
-177:0:1650
-178:2:998
-179:0:1650
-180:2:999
-181:2:1003
-182:2:1004
-183:2:1012
-184:2:1013
-185:2:1017
-186:2:1018
-187:2:1026
-188:2:1031
-189:2:1035
-190:2:1036
-191:2:1043
-192:2:1044
-193:2:1055
-194:2:1056
-195:2:1057
-196:2:1068
-197:2:1073
-198:2:1074
-199:0:1650
-200:2:1086
-201:0:1650
-202:2:1283
-203:0:1650
-204:2:1381
-205:0:1650
-206:2:1382
-207:0:1650
-208:2:1386
-209:0:1650
-210:2:1395
-211:2:1396
-212:2:1400
-213:2:1404
-214:2:1405
-215:2:1409
-216:2:1417
-217:2:1418
-218:2:1423
-219:2:1430
-220:2:1431
-221:2:1438
-222:2:1443
-223:0:1650
-224:2:1454
-225:0:1650
-226:2:1458
-227:2:1459
-228:2:1463
-229:2:1467
-230:2:1468
-231:2:1472
-232:2:1480
-233:2:1481
-234:2:1486
-235:2:1493
-236:2:1494
-237:2:1501
-238:2:1506
-239:0:1650
-240:2:1517
-241:0:1650
-242:2:1525
-243:2:1526
-244:2:1530
-245:2:1534
-246:2:1535
-247:2:1539
-248:2:1547
-249:2:1548
-250:2:1553
-251:2:1560
-252:2:1561
-253:2:1568
-254:2:1573
-255:0:1650
-256:2:1584
-257:0:1650
-258:2:1586
-259:0:1650
-260:2:1587
-261:0:1650
-262:2:423
-263:0:1650
-264:2:424
-265:2:428
-266:2:429
-267:2:437
-268:2:438
-269:2:442
-270:2:443
-271:2:451
-272:2:456
-273:2:460
-274:2:461
-275:2:468
-276:2:469
-277:2:480
-278:2:481
-279:2:482
-280:2:493
-281:2:498
-282:2:499
-283:0:1650
-284:2:511
-285:0:1650
-286:2:513
-287:2:514
-288:0:1650
-289:2:518
-290:2:522
-291:2:523
-292:2:531
-293:2:532
-294:2:536
-295:2:537
-296:2:545
-297:2:550
-298:2:551
-299:2:562
-300:2:563
-301:2:574
-302:2:575
-303:2:576
-304:2:587
-305:2:592
-306:2:593
-307:0:1650
-308:2:605
-309:0:1650
-310:2:607
-311:0:1650
-312:2:608
-313:0:1650
-314:2:618
-315:0:1650
-316:2:622
-317:2:623
-318:2:627
-319:2:631
-320:2:632
-321:2:636
-322:2:644
-323:2:645
-324:2:650
-325:2:657
-326:2:658
-327:2:665
-328:2:670
-329:0:1650
-330:2:681
-331:0:1650
-332:2:685
-333:2:686
-334:2:690
-335:2:694
-336:2:695
-337:2:699
-338:2:707
-339:2:708
-340:2:713
-341:2:720
-342:2:721
-343:2:728
-344:2:733
-345:0:1650
-346:2:744
-347:0:1650
-348:2:752
-349:2:753
-350:2:757
-351:2:761
-352:2:762
-353:2:766
-354:2:774
-355:2:775
-356:2:780
-357:2:787
-358:2:788
-359:2:795
-360:2:800
-361:0:1650
-362:2:811
-363:0:1650
-364:2:813
-365:0:1650
-366:2:814
-367:2:818
-368:2:819
-369:2:827
-370:2:828
-371:2:832
-372:2:833
-373:2:841
-374:2:846
-375:2:850
-376:2:851
-377:2:858
-378:2:859
-379:2:870
-380:2:871
-381:2:872
-382:2:883
-383:2:888
-384:2:889
-385:0:1650
-386:2:901
-387:0:1650
-388:2:903
-389:0:1650
-390:2:906
-391:2:907
-392:2:919
-393:2:920
-394:2:924
-395:2:925
-396:2:933
-397:2:938
-398:2:942
-399:2:943
-400:2:950
-401:2:951
-402:2:962
-403:2:963
-404:2:964
-405:2:975
-406:2:980
-407:2:981
-408:0:1650
-409:2:993
-410:0:1650
-411:2:995
-412:0:1650
-413:2:996
-414:0:1650
-415:2:997
-416:0:1650
-417:2:998
-418:0:1650
-419:2:999
-420:2:1003
-421:2:1004
-422:2:1012
-423:2:1013
-424:2:1017
-425:2:1018
-426:2:1026
-427:2:1031
-428:2:1035
-429:2:1036
-430:2:1043
-431:2:1044
-432:2:1055
-433:2:1056
-434:2:1057
-435:2:1068
-436:2:1073
-437:2:1074
-438:0:1650
-439:2:1086
-440:0:1650
-441:2:1283
-442:0:1650
-443:2:1381
-444:0:1650
-445:2:1382
-446:0:1650
-447:2:1386
-448:0:1650
-449:2:1395
-450:2:1396
-451:2:1400
-452:2:1404
-453:2:1405
-454:2:1409
-455:2:1417
-456:2:1418
-457:2:1423
-458:2:1430
-459:2:1431
-460:2:1438
-461:2:1443
-462:0:1650
-463:2:1454
-464:0:1650
-465:2:1458
-466:2:1459
-467:2:1463
-468:2:1467
-469:2:1468
-470:2:1472
-471:2:1480
-472:2:1481
-473:2:1486
-474:2:1493
-475:2:1494
-476:2:1501
-477:2:1506
-478:0:1650
-479:2:1517
-480:0:1650
-481:2:1525
-482:2:1526
-483:2:1530
-484:2:1534
-485:2:1535
-486:2:1539
-487:2:1547
-488:2:1548
-489:2:1553
-490:2:1560
-491:2:1561
-492:2:1568
-493:2:1573
-494:0:1650
-495:2:1584
-496:0:1650
-497:2:1586
-498:0:1650
-499:2:1587
-500:0:1650
-501:2:423
-502:0:1650
-503:2:424
-504:2:428
-505:2:429
-506:2:437
-507:2:438
-508:2:442
-509:2:443
-510:2:451
-511:2:456
-512:2:460
-513:2:461
-514:2:468
-515:2:469
-516:2:480
-517:2:481
-518:2:482
-519:2:493
-520:2:498
-521:2:499
-522:0:1650
-523:2:511
-524:0:1650
-525:2:513
-526:2:514
-527:0:1650
-528:2:518
-529:2:522
-530:2:523
-531:2:531
-532:2:532
-533:2:536
-534:2:537
-535:2:545
-536:2:550
-537:2:551
-538:2:562
-539:2:563
-540:2:574
-541:2:575
-542:2:576
-543:2:587
-544:2:592
-545:2:593
-546:0:1650
-547:2:605
-548:0:1650
-549:2:607
-550:0:1650
-551:2:608
-552:0:1650
-553:2:618
-554:0:1650
-555:2:622
-556:2:623
-557:2:627
-558:2:631
-559:2:632
-560:2:636
-561:2:644
-562:2:645
-563:2:650
-564:2:657
-565:2:658
-566:2:665
-567:2:670
-568:0:1650
-569:2:681
-570:0:1650
-571:2:685
-572:2:686
-573:2:690
-574:2:694
-575:2:695
-576:2:699
-577:2:707
-578:2:708
-579:2:713
-580:2:720
-581:2:721
-582:2:728
-583:2:733
-584:0:1650
-585:2:744
-586:0:1650
-587:2:752
-588:2:753
-589:2:757
-590:2:761
-591:2:762
-592:2:766
-593:2:774
-594:2:775
-595:2:780
-596:2:787
-597:2:788
-598:2:795
-599:2:800
-600:0:1650
-601:2:811
-602:0:1650
-603:2:813
-604:0:1650
-605:2:814
-606:2:818
-607:2:819
-608:2:827
-609:2:828
-610:2:832
-611:2:833
-612:2:841
-613:2:846
-614:2:850
-615:2:851
-616:2:858
-617:2:859
-618:2:870
-619:2:871
-620:2:872
-621:2:883
-622:2:888
-623:2:889
-624:0:1650
-625:2:901
-626:0:1650
-627:2:903
-628:0:1650
-629:2:906
-630:2:907
-631:2:919
-632:2:920
-633:2:924
-634:2:925
-635:2:933
-636:2:938
-637:2:942
-638:2:943
-639:2:950
-640:2:951
-641:2:962
-642:2:963
-643:2:964
-644:2:975
-645:2:980
-646:2:981
-647:0:1650
-648:2:993
-649:0:1650
-650:2:995
-651:0:1650
-652:2:996
-653:0:1650
-654:2:997
-655:0:1650
-656:2:998
-657:0:1650
-658:2:999
-659:2:1003
-660:2:1004
-661:2:1012
-662:2:1013
-663:2:1017
-664:2:1018
-665:2:1026
-666:2:1031
-667:2:1035
-668:2:1036
-669:2:1043
-670:2:1044
-671:2:1055
-672:2:1056
-673:2:1057
-674:2:1068
-675:2:1073
-676:2:1074
-677:0:1650
-678:2:1086
-679:0:1650
-680:2:1283
-681:0:1650
-682:2:1381
-683:0:1650
-684:2:1382
-685:0:1650
-686:2:1386
-687:0:1650
-688:2:1395
-689:2:1396
-690:2:1400
-691:2:1404
-692:2:1405
-693:2:1409
-694:2:1417
-695:2:1418
-696:2:1423
-697:2:1430
-698:2:1431
-699:2:1438
-700:2:1443
-701:0:1650
-702:2:1454
-703:0:1650
-704:2:1458
-705:2:1459
-706:2:1463
-707:2:1467
-708:2:1468
-709:2:1472
-710:2:1480
-711:2:1481
-712:2:1486
-713:2:1493
-714:2:1494
-715:2:1501
-716:2:1506
-717:0:1650
-718:2:1517
-719:0:1650
-720:2:1525
-721:2:1526
-722:2:1530
-723:2:1534
-724:2:1535
-725:2:1539
-726:2:1547
-727:2:1548
-728:2:1553
-729:2:1560
-730:2:1561
-731:2:1568
-732:2:1573
-733:0:1650
-734:2:1584
-735:0:1650
-736:2:1586
-737:0:1650
-738:2:1587
-739:0:1650
-740:2:423
-741:0:1650
-742:2:424
-743:2:428
-744:2:429
-745:2:437
-746:2:438
-747:2:442
-748:2:443
-749:2:451
-750:2:456
-751:2:460
-752:2:461
-753:2:468
-754:2:469
-755:2:480
-756:2:481
-757:2:482
-758:2:493
-759:2:498
-760:2:499
-761:0:1650
-762:2:511
-763:0:1650
-764:2:513
-765:2:514
-766:0:1650
-767:2:518
-768:2:522
-769:2:523
-770:2:531
-771:2:532
-772:2:536
-773:2:537
-774:2:545
-775:2:550
-776:2:551
-777:2:562
-778:2:563
-779:2:574
-780:2:575
-781:2:576
-782:2:587
-783:2:592
-784:2:593
-785:0:1650
-786:2:605
-787:0:1650
-788:2:607
-789:0:1650
-790:2:608
-791:0:1650
-792:2:618
-793:0:1650
-794:2:622
-795:2:623
-796:2:627
-797:2:631
-798:2:632
-799:2:636
-800:2:644
-801:2:645
-802:2:650
-803:2:657
-804:2:658
-805:2:665
-806:2:670
-807:0:1650
-808:2:681
-809:0:1650
-810:2:685
-811:2:686
-812:2:690
-813:2:694
-814:2:695
-815:2:699
-816:2:707
-817:2:708
-818:2:713
-819:2:720
-820:2:721
-821:2:728
-822:2:733
-823:0:1650
-824:2:744
-825:0:1650
-826:2:752
-827:2:753
-828:2:757
-829:2:761
-830:2:762
-831:2:766
-832:2:774
-833:2:775
-834:2:780
-835:2:787
-836:2:788
-837:2:795
-838:2:800
-839:0:1650
-840:2:811
-841:0:1650
-842:2:813
-843:0:1650
-844:2:814
-845:2:818
-846:2:819
-847:2:827
-848:2:828
-849:2:832
-850:2:833
-851:2:841
-852:2:846
-853:2:850
-854:2:851
-855:2:858
-856:2:859
-857:2:870
-858:2:871
-859:2:872
-860:2:883
-861:2:888
-862:2:889
-863:0:1650
-864:2:901
-865:0:1650
-866:2:903
-867:0:1650
-868:2:906
-869:2:907
-870:2:919
-871:2:920
-872:2:924
-873:2:925
-874:2:933
-875:2:938
-876:2:942
-877:2:943
-878:2:950
-879:2:951
-880:2:962
-881:2:963
-882:2:964
-883:2:975
-884:2:980
-885:2:981
-886:0:1650
-887:2:993
-888:0:1650
-889:2:995
-890:0:1650
-891:2:996
-892:0:1650
-893:2:997
-894:0:1650
-895:2:998
-896:0:1650
-897:2:999
-898:2:1003
-899:2:1004
-900:2:1012
-901:2:1013
-902:2:1017
-903:2:1018
-904:2:1026
-905:2:1031
-906:2:1035
-907:2:1036
-908:2:1043
-909:2:1044
-910:2:1055
-911:2:1056
-912:2:1057
-913:2:1068
-914:2:1073
-915:2:1074
-916:0:1650
-917:2:1086
-918:0:1650
-919:2:1283
-920:0:1650
-921:2:1381
-922:0:1650
-923:2:1382
-924:0:1650
-925:2:1386
-926:0:1650
-927:2:1395
-928:2:1396
-929:2:1400
-930:2:1404
-931:2:1405
-932:2:1409
-933:2:1417
-934:2:1418
-935:2:1423
-936:2:1430
-937:2:1431
-938:2:1438
-939:2:1443
-940:0:1650
-941:2:1454
-942:0:1650
-943:1:2
-944:0:1650
-945:1:8
-946:0:1650
-947:1:9
-948:0:1650
-949:1:10
-950:0:1650
-951:1:11
-952:0:1650
-953:1:12
-954:1:16
-955:1:17
-956:1:25
-957:1:26
-958:1:30
-959:1:31
-960:1:39
-961:1:44
-962:1:48
-963:1:49
-964:1:63
-965:1:64
-966:1:68
-967:1:69
-968:1:70
-969:1:81
-970:1:86
-971:1:87
-972:0:1650
-973:1:99
-974:0:1650
-975:1:101
-976:0:1650
-977:1:102
-978:1:106
-979:1:107
-980:1:115
-981:1:116
-982:1:120
-983:1:121
-984:1:129
-985:1:134
-986:1:138
-987:1:139
-988:1:153
-989:1:154
-990:1:158
-991:1:159
-992:1:160
-993:1:171
-994:1:176
-995:1:177
-996:0:1650
-997:1:189
-998:0:1650
-999:1:191
-1000:0:1650
-1001:1:192
-1002:0:1650
-1003:2:1458
-1004:2:1459
-1005:2:1463
-1006:2:1467
-1007:2:1468
-1008:2:1472
-1009:2:1480
-1010:2:1481
-1011:2:1486
-1012:2:1493
-1013:2:1494
-1014:2:1501
-1015:2:1506
-1016:0:1650
-1017:2:1517
-1018:0:1650
-1019:2:1525
-1020:2:1526
-1021:2:1530
-1022:2:1534
-1023:2:1535
-1024:2:1539
-1025:2:1547
-1026:2:1548
-1027:2:1553
-1028:2:1560
-1029:2:1561
-1030:2:1568
-1031:2:1573
-1032:0:1650
-1033:2:1584
-1034:0:1650
-1035:2:1586
-1036:0:1650
-1037:2:1587
-1038:0:1650
-1039:2:423
-1040:0:1650
-1041:2:424
-1042:2:428
-1043:2:429
-1044:2:437
-1045:2:438
-1046:2:442
-1047:2:443
-1048:2:451
-1049:2:456
-1050:2:460
-1051:2:461
-1052:2:468
-1053:2:469
-1054:2:480
-1055:2:481
-1056:2:482
-1057:2:493
-1058:2:498
-1059:2:499
-1060:0:1650
-1061:2:511
-1062:0:1650
-1063:2:513
-1064:2:514
-1065:0:1650
-1066:2:518
-1067:2:522
-1068:2:523
-1069:2:531
-1070:2:532
-1071:2:536
-1072:2:537
-1073:2:545
-1074:2:550
-1075:2:551
-1076:2:562
-1077:2:563
-1078:2:574
-1079:2:575
-1080:2:576
-1081:2:587
-1082:2:592
-1083:2:593
-1084:0:1650
-1085:2:605
-1086:0:1650
-1087:2:607
-1088:0:1650
-1089:2:608
-1090:0:1650
-1091:2:618
-1092:0:1650
-1093:2:622
-1094:2:623
-1095:2:627
-1096:2:631
-1097:2:632
-1098:2:636
-1099:2:644
-1100:2:645
-1101:2:650
-1102:2:657
-1103:2:658
-1104:2:665
-1105:2:670
-1106:0:1650
-1107:2:681
-1108:0:1650
-1109:1:193
-1110:1:197
-1111:1:198
-1112:1:206
-1113:1:207
-1114:1:211
-1115:1:212
-1116:1:220
-1117:1:225
-1118:1:229
-1119:1:230
-1120:1:237
-1121:1:238
-1122:1:249
-1123:1:250
-1124:1:251
-1125:1:262
-1126:1:274
-1127:1:275
-1128:0:1650
-1129:1:280
-1130:0:1650
-1131:1:282
-1132:0:1650
-1133:1:291
-1134:0:1650
-1135:1:293
-1136:0:1650
-1137:1:296
-1138:0:1650
-1139:1:301
-1140:0:1650
-1141:2:685
-1142:2:686
-1143:2:690
-1144:2:691
-1145:2:699
-1146:2:707
-1147:2:708
-1148:2:713
-1149:2:720
-1150:2:721
-1151:2:728
-1152:2:733
-1153:0:1650
-1154:2:744
-1155:0:1650
-1156:2:752
-1157:2:753
-1158:2:757
-1159:2:761
-1160:2:762
-1161:2:766
-1162:2:774
-1163:2:775
-1164:2:780
-1165:2:787
-1166:2:788
-1167:2:795
-1168:2:800
-1169:0:1650
-1170:2:811
-1171:0:1650
-1172:2:813
-1173:0:1650
-1174:2:814
-1175:2:818
-1176:2:819
-1177:2:827
-1178:2:828
-1179:2:832
-1180:2:833
-1181:2:841
-1182:2:846
-1183:2:850
-1184:2:851
-1185:2:858
-1186:2:859
-1187:2:870
-1188:2:871
-1189:2:872
-1190:2:883
-1191:2:888
-1192:2:889
-1193:0:1650
-1194:2:901
-1195:0:1650
-1196:2:903
-1197:0:1650
-1198:2:906
-1199:2:907
-1200:2:919
-1201:2:920
-1202:2:924
-1203:2:925
-1204:2:933
-1205:2:938
-1206:2:942
-1207:2:943
-1208:2:950
-1209:2:951
-1210:2:962
-1211:2:963
-1212:2:964
-1213:2:975
-1214:2:980
-1215:2:981
-1216:0:1650
-1217:2:993
-1218:0:1650
-1219:2:995
-1220:0:1650
-1221:2:996
-1222:0:1650
-1223:2:997
-1224:0:1650
-1225:2:998
-1226:0:1650
-1227:2:999
-1228:2:1003
-1229:2:1004
-1230:2:1012
-1231:2:1013
-1232:2:1017
-1233:2:1018
-1234:2:1026
-1235:2:1031
-1236:2:1035
-1237:2:1036
-1238:2:1043
-1239:2:1044
-1240:2:1055
-1241:2:1056
-1242:2:1057
-1243:2:1068
-1244:2:1073
-1245:2:1074
-1246:0:1650
-1247:2:1086
-1248:0:1650
-1249:2:1283
-1250:0:1650
-1251:2:1381
-1252:0:1650
-1253:2:1382
-1254:0:1650
-1255:2:1386
-1256:0:1650
-1257:2:1395
-1258:2:1396
-1259:2:1400
-1260:2:1404
-1261:2:1405
-1262:2:1409
-1263:2:1417
-1264:2:1418
-1265:2:1423
-1266:2:1430
-1267:2:1431
-1268:2:1438
-1269:2:1443
-1270:0:1650
-1271:2:1454
-1272:0:1650
-1273:2:1458
-1274:2:1459
-1275:2:1463
-1276:2:1467
-1277:2:1468
-1278:2:1472
-1279:2:1480
-1280:2:1481
-1281:2:1486
-1282:2:1493
-1283:2:1494
-1284:2:1501
-1285:2:1506
-1286:0:1650
-1287:2:1517
-1288:0:1650
-1289:2:1525
-1290:2:1526
-1291:2:1530
-1292:2:1534
-1293:2:1535
-1294:2:1539
-1295:2:1547
-1296:2:1548
-1297:2:1553
-1298:2:1560
-1299:2:1561
-1300:2:1568
-1301:2:1573
-1302:0:1650
-1303:2:1584
-1304:0:1650
-1305:2:1586
-1306:0:1650
-1307:2:1587
-1308:0:1650
-1309:2:1590
-1310:0:1650
-1311:2:1595
-1312:0:1650
-1313:1:302
-1314:0:1648
-1315:2:1596
-1316:0:1654
-1317:1:34
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress.ltl b/formal-model/urcu/result-standard-execution-nonest/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.define b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.log b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.log
deleted file mode 100644 (file)
index 8835ef4..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_reader.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 1767: Claim reached state 9 (line 748)
-Depth=    2582 States=    1e+06 Transitions= 1.91e+07 Memory=   498.674        t=   16.1 R=   6e+04
-Depth=    2582 States=    2e+06 Transitions= 3.89e+07 Memory=   531.096        t=     33 R=   6e+04
-Depth=    2582 States=    3e+06 Transitions= 5.89e+07 Memory=   563.518        t=   50.5 R=   6e+04
-pan: resizing hashtable to -w22..  done
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 2582, errors: 0
-  1743405 states, stored (3.27749e+06 visited)
- 60942540 states, matched
- 64220033 transitions (= visited+matched)
-2.3877948e+08 atomic steps
-hash conflicts:  25318829 (resolved)
-
-Stats on memory usage (in Megabytes):
-  139.662      equivalent memory usage for states (stored*(State-vector + overhead))
-  113.924      actual memory usage for states (compression: 81.57%)
-               state-vector as stored = 41 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  603.623      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 55.3 seconds
-pan: rate 59256.789 states/second
-pan: avg transition delay 8.6126e-07 usec
-cp .input.spin urcu_progress_reader.spin.input
-cp .input.spin.trail urcu_progress_reader.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.spin.input
deleted file mode 100644 (file)
index 7e6b28a..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define READER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_reader.spin.input.trail
deleted file mode 100644 (file)
index 7c42af1..0000000
+++ /dev/null
@@ -1,1270 +0,0 @@
--2:4:-2
--4:-4:-4
-1:0:4401
-2:4:4353
-3:4:4356
-4:4:4356
-5:4:4359
-6:4:4367
-7:4:4367
-8:4:4370
-9:4:4376
-10:4:4380
-11:4:4380
-12:4:4383
-13:4:4391
-14:4:4395
-15:4:4396
-16:0:4401
-17:4:4398
-18:0:4401
-19:3:2479
-20:0:4401
-21:3:2485
-22:0:4401
-23:3:2486
-24:0:4401
-25:3:2487
-26:3:2491
-27:3:2492
-28:3:2500
-29:3:2501
-30:3:2505
-31:3:2506
-32:3:2514
-33:3:2519
-34:3:2523
-35:3:2524
-36:3:2531
-37:3:2532
-38:3:2543
-39:3:2544
-40:3:2545
-41:3:2556
-42:3:2561
-43:3:2562
-44:0:4401
-45:3:2574
-46:0:4401
-47:3:2576
-48:3:2577
-49:0:4401
-50:3:2581
-51:3:2585
-52:3:2586
-53:3:2594
-54:3:2595
-55:3:2599
-56:3:2600
-57:3:2608
-58:3:2613
-59:3:2614
-60:3:2625
-61:3:2626
-62:3:2637
-63:3:2638
-64:3:2639
-65:3:2650
-66:3:2655
-67:3:2656
-68:0:4401
-69:3:2668
-70:0:4401
-71:3:2670
-72:0:4401
-73:3:2671
-74:0:4401
-75:3:2681
-76:0:4401
-77:3:2682
-78:0:4401
-79:3:2686
-80:3:2687
-81:3:2691
-82:3:2695
-83:3:2696
-84:3:2700
-85:3:2708
-86:3:2709
-87:3:2714
-88:3:2721
-89:3:2722
-90:3:2729
-91:3:2734
-92:0:4401
-93:3:2745
-94:0:4401
-95:3:2749
-96:3:2750
-97:3:2754
-98:3:2758
-99:3:2759
-100:3:2763
-101:3:2771
-102:3:2772
-103:3:2777
-104:3:2784
-105:3:2785
-106:3:2792
-107:3:2797
-108:0:4401
-109:3:2808
-110:0:4401
-111:3:2816
-112:3:2817
-113:3:2821
-114:3:2825
-115:3:2826
-116:3:2830
-117:3:2838
-118:3:2839
-119:3:2844
-120:3:2851
-121:3:2852
-122:3:2859
-123:3:2864
-124:0:4401
-125:3:2879
-126:0:4401
-127:3:2881
-128:0:4401
-129:3:2882
-130:3:2886
-131:3:2887
-132:3:2895
-133:3:2896
-134:3:2900
-135:3:2901
-136:3:2909
-137:3:2914
-138:3:2918
-139:3:2919
-140:3:2926
-141:3:2927
-142:3:2938
-143:3:2939
-144:3:2940
-145:3:2951
-146:3:2956
-147:3:2957
-148:0:4401
-149:3:2969
-150:0:4401
-151:3:2971
-152:0:4401
-153:3:2974
-154:3:2975
-155:3:2987
-156:3:2988
-157:3:2992
-158:3:2993
-159:3:3001
-160:3:3006
-161:3:3010
-162:3:3011
-163:3:3018
-164:3:3019
-165:3:3030
-166:3:3031
-167:3:3032
-168:3:3043
-169:3:3048
-170:3:3049
-171:0:4401
-172:3:3061
-173:0:4401
-174:3:3063
-175:0:4401
-176:3:3064
-177:0:4401
-178:3:3065
-179:0:4401
-180:3:3066
-181:0:4401
-182:3:3067
-183:3:3071
-184:3:3072
-185:3:3080
-186:3:3081
-187:3:3085
-188:3:3086
-189:3:3094
-190:3:3099
-191:3:3103
-192:3:3104
-193:3:3111
-194:3:3112
-195:3:3123
-196:3:3124
-197:3:3125
-198:3:3136
-199:3:3141
-200:3:3142
-201:0:4401
-202:3:3154
-203:0:4401
-204:3:3356
-205:0:4401
-206:3:3454
-207:0:4401
-208:3:3455
-209:0:4401
-210:3:3459
-211:0:4401
-212:3:3465
-213:3:3469
-214:3:3470
-215:3:3478
-216:3:3479
-217:3:3483
-218:3:3484
-219:3:3492
-220:3:3497
-221:3:3501
-222:3:3502
-223:3:3509
-224:3:3510
-225:3:3521
-226:3:3522
-227:3:3523
-228:3:3534
-229:3:3539
-230:3:3540
-231:0:4401
-232:3:3552
-233:0:4401
-234:3:3554
-235:0:4401
-236:3:3555
-237:3:3559
-238:3:3560
-239:3:3568
-240:3:3569
-241:3:3573
-242:3:3574
-243:3:3582
-244:3:3587
-245:3:3591
-246:3:3592
-247:3:3599
-248:3:3600
-249:3:3611
-250:3:3612
-251:3:3613
-252:3:3624
-253:3:3629
-254:3:3630
-255:0:4401
-256:3:3642
-257:0:4401
-258:3:3644
-259:0:4401
-260:3:3647
-261:3:3648
-262:3:3660
-263:3:3661
-264:3:3665
-265:3:3666
-266:3:3674
-267:3:3679
-268:3:3683
-269:3:3684
-270:3:3691
-271:3:3692
-272:3:3703
-273:3:3704
-274:3:3705
-275:3:3716
-276:3:3721
-277:3:3722
-278:0:4401
-279:3:3734
-280:0:4401
-281:3:3736
-282:0:4401
-283:3:3737
-284:0:4401
-285:3:3738
-286:0:4401
-287:3:3739
-288:0:4401
-289:3:3740
-290:3:3744
-291:3:3745
-292:3:3753
-293:3:3754
-294:3:3758
-295:3:3759
-296:3:3767
-297:3:3772
-298:3:3776
-299:3:3777
-300:3:3784
-301:3:3785
-302:3:3796
-303:3:3797
-304:3:3798
-305:3:3809
-306:3:3814
-307:3:3815
-308:0:4401
-309:3:3827
-310:0:4401
-311:3:4029
-312:0:4401
-313:3:4127
-314:0:4401
-315:3:4128
-316:0:4401
-317:3:4132
-318:0:4401
-319:3:4138
-320:0:4401
-321:3:4142
-322:3:4143
-323:3:4147
-324:3:4151
-325:3:4152
-326:3:4156
-327:3:4164
-328:3:4165
-329:3:4170
-330:3:4177
-331:3:4178
-332:3:4185
-333:3:4190
-334:0:4401
-335:3:4201
-336:0:4401
-337:3:4205
-338:3:4206
-339:3:4210
-340:3:4214
-341:3:4215
-342:3:4219
-343:3:4227
-344:3:4228
-345:3:4233
-346:3:4240
-347:3:4241
-348:3:4248
-349:3:4253
-350:0:4401
-351:3:4264
-352:0:4401
-353:3:4272
-354:3:4273
-355:3:4277
-356:3:4281
-357:3:4282
-358:3:4286
-359:3:4294
-360:3:4295
-361:3:4300
-362:3:4307
-363:3:4308
-364:3:4315
-365:3:4320
-366:0:4401
-367:3:4335
-368:0:4401
-369:3:4337
-370:0:4401
-371:3:4338
-372:0:4401
-373:3:2486
-374:0:4401
-375:3:2487
-376:3:2491
-377:3:2492
-378:3:2500
-379:3:2501
-380:3:2505
-381:3:2506
-382:3:2514
-383:3:2519
-384:3:2523
-385:3:2524
-386:3:2531
-387:3:2532
-388:3:2543
-389:3:2544
-390:3:2545
-391:3:2556
-392:3:2561
-393:3:2562
-394:0:4401
-395:3:2574
-396:0:4401
-397:3:2576
-398:3:2577
-399:0:4401
-400:3:2581
-401:3:2585
-402:3:2586
-403:3:2594
-404:3:2595
-405:3:2599
-406:3:2600
-407:3:2608
-408:3:2613
-409:3:2614
-410:3:2625
-411:3:2626
-412:3:2637
-413:3:2638
-414:3:2639
-415:3:2650
-416:3:2655
-417:3:2656
-418:0:4401
-419:3:2668
-420:0:4401
-421:3:2670
-422:0:4401
-423:3:2671
-424:0:4401
-425:3:2681
-426:0:4401
-427:3:2682
-428:0:4401
-429:3:2686
-430:3:2687
-431:3:2691
-432:3:2695
-433:3:2696
-434:3:2700
-435:3:2708
-436:3:2709
-437:3:2714
-438:3:2721
-439:3:2722
-440:3:2729
-441:3:2734
-442:0:4401
-443:3:2745
-444:0:4401
-445:3:2749
-446:3:2750
-447:3:2754
-448:3:2758
-449:3:2759
-450:3:2763
-451:3:2771
-452:3:2772
-453:3:2777
-454:3:2784
-455:3:2785
-456:3:2792
-457:3:2797
-458:0:4401
-459:3:2808
-460:0:4401
-461:3:2816
-462:3:2817
-463:3:2821
-464:3:2825
-465:3:2826
-466:3:2830
-467:3:2838
-468:3:2839
-469:3:2844
-470:3:2851
-471:3:2852
-472:3:2859
-473:3:2864
-474:0:4401
-475:3:2879
-476:0:4401
-477:3:2881
-478:0:4401
-479:3:2882
-480:3:2886
-481:3:2887
-482:3:2895
-483:3:2896
-484:3:2900
-485:3:2901
-486:3:2909
-487:3:2914
-488:3:2918
-489:3:2919
-490:3:2926
-491:3:2927
-492:3:2938
-493:3:2939
-494:3:2940
-495:3:2951
-496:3:2956
-497:3:2957
-498:0:4401
-499:3:2969
-500:0:4401
-501:3:2971
-502:0:4401
-503:3:2974
-504:3:2975
-505:3:2987
-506:3:2988
-507:3:2992
-508:3:2993
-509:3:3001
-510:3:3006
-511:3:3010
-512:3:3011
-513:3:3018
-514:3:3019
-515:3:3030
-516:3:3031
-517:3:3032
-518:3:3043
-519:3:3048
-520:3:3049
-521:0:4401
-522:3:3061
-523:0:4401
-524:3:3063
-525:0:4401
-526:3:3064
-527:0:4401
-528:3:3065
-529:0:4401
-530:3:3066
-531:0:4401
-532:3:3067
-533:3:3071
-534:3:3072
-535:3:3080
-536:3:3081
-537:3:3085
-538:3:3086
-539:3:3094
-540:3:3099
-541:3:3103
-542:3:3104
-543:3:3111
-544:3:3112
-545:3:3123
-546:3:3124
-547:3:3125
-548:3:3136
-549:3:3141
-550:3:3142
-551:0:4401
-552:3:3154
-553:0:4401
-554:3:3356
-555:0:4401
-556:3:3454
-557:0:4401
-558:3:3455
-559:0:4401
-560:3:3459
-561:0:4401
-562:3:3465
-563:3:3469
-564:3:3470
-565:3:3478
-566:3:3479
-567:3:3483
-568:3:3484
-569:3:3492
-570:3:3497
-571:3:3501
-572:3:3502
-573:3:3509
-574:3:3510
-575:3:3521
-576:3:3522
-577:3:3523
-578:3:3534
-579:3:3539
-580:3:3540
-581:0:4401
-582:3:3552
-583:0:4401
-584:3:3554
-585:0:4401
-586:3:3555
-587:3:3559
-588:3:3560
-589:3:3568
-590:3:3569
-591:3:3573
-592:3:3574
-593:3:3582
-594:3:3587
-595:3:3591
-596:3:3592
-597:3:3599
-598:3:3600
-599:3:3611
-600:3:3612
-601:3:3613
-602:3:3624
-603:3:3629
-604:3:3630
-605:0:4401
-606:3:3642
-607:0:4401
-608:3:3644
-609:0:4401
-610:3:3647
-611:3:3648
-612:3:3660
-613:3:3661
-614:3:3665
-615:3:3666
-616:3:3674
-617:3:3679
-618:3:3683
-619:3:3684
-620:3:3691
-621:3:3692
-622:3:3703
-623:3:3704
-624:3:3705
-625:3:3716
-626:3:3721
-627:3:3722
-628:0:4401
-629:3:3734
-630:0:4401
-631:3:3736
-632:0:4401
-633:3:3737
-634:0:4401
-635:3:3738
-636:0:4401
-637:3:3739
-638:0:4401
-639:3:3740
-640:3:3744
-641:3:3745
-642:3:3753
-643:3:3754
-644:3:3758
-645:3:3759
-646:3:3767
-647:3:3772
-648:3:3776
-649:3:3777
-650:3:3784
-651:3:3785
-652:3:3796
-653:3:3797
-654:3:3798
-655:3:3809
-656:3:3814
-657:3:3815
-658:0:4401
-659:3:3827
-660:0:4401
-661:3:4029
-662:0:4401
-663:3:4127
-664:0:4401
-665:3:4128
-666:0:4401
-667:3:4132
-668:0:4401
-669:3:4138
-670:0:4401
-671:3:4142
-672:3:4143
-673:3:4147
-674:3:4151
-675:3:4152
-676:3:4156
-677:3:4164
-678:3:4165
-679:3:4170
-680:3:4177
-681:3:4178
-682:3:4185
-683:3:4190
-684:0:4401
-685:3:4201
-686:0:4401
-687:3:4205
-688:3:4206
-689:3:4210
-690:3:4214
-691:3:4215
-692:3:4219
-693:3:4227
-694:3:4228
-695:3:4233
-696:3:4240
-697:3:4241
-698:3:4248
-699:3:4253
-700:0:4401
-701:3:4264
-702:0:4401
-703:3:4272
-704:3:4273
-705:3:4277
-706:3:4281
-707:3:4282
-708:3:4286
-709:3:4294
-710:3:4295
-711:3:4300
-712:3:4307
-713:3:4308
-714:3:4315
-715:3:4320
-716:0:4401
-717:3:4335
-718:0:4401
-719:3:4337
-720:0:4401
-721:3:4338
-722:0:4401
-723:3:2486
-724:0:4401
-725:3:2487
-726:3:2491
-727:3:2492
-728:3:2500
-729:3:2501
-730:3:2505
-731:3:2506
-732:3:2514
-733:3:2519
-734:3:2523
-735:3:2524
-736:3:2531
-737:3:2532
-738:3:2543
-739:3:2544
-740:3:2545
-741:3:2556
-742:3:2561
-743:3:2562
-744:0:4401
-745:3:2574
-746:0:4401
-747:3:2576
-748:3:2577
-749:0:4401
-750:3:2581
-751:3:2585
-752:3:2586
-753:3:2594
-754:3:2595
-755:3:2599
-756:3:2600
-757:3:2608
-758:3:2613
-759:3:2614
-760:3:2625
-761:3:2626
-762:3:2637
-763:3:2638
-764:3:2639
-765:3:2650
-766:3:2655
-767:3:2656
-768:0:4401
-769:3:2668
-770:0:4401
-771:3:2670
-772:0:4401
-773:3:2671
-774:0:4401
-775:3:2681
-776:0:4401
-777:3:2682
-778:0:4401
-779:3:2686
-780:3:2687
-781:3:2691
-782:3:2695
-783:3:2696
-784:3:2700
-785:3:2708
-786:3:2709
-787:3:2714
-788:3:2721
-789:3:2722
-790:3:2729
-791:3:2734
-792:0:4401
-793:3:2745
-794:0:4401
-795:3:2749
-796:3:2750
-797:3:2754
-798:3:2758
-799:3:2759
-800:3:2763
-801:3:2771
-802:3:2772
-803:3:2777
-804:3:2784
-805:3:2785
-806:3:2792
-807:3:2797
-808:0:4401
-809:3:2808
-810:0:4401
-811:3:2816
-812:3:2817
-813:3:2821
-814:3:2825
-815:3:2826
-816:3:2830
-817:3:2838
-818:3:2839
-819:3:2844
-820:3:2851
-821:3:2852
-822:3:2859
-823:3:2864
-824:0:4401
-825:3:2879
-826:0:4401
-827:3:2881
-828:0:4401
-829:3:2882
-830:3:2886
-831:3:2887
-832:3:2895
-833:3:2896
-834:3:2900
-835:3:2901
-836:3:2909
-837:3:2914
-838:3:2918
-839:3:2919
-840:3:2926
-841:3:2927
-842:3:2938
-843:3:2939
-844:3:2940
-845:3:2951
-846:3:2956
-847:3:2957
-848:0:4401
-849:3:2969
-850:0:4401
-851:3:2971
-852:0:4401
-853:3:2974
-854:3:2975
-855:3:2987
-856:3:2988
-857:3:2992
-858:3:2993
-859:3:3001
-860:3:3006
-861:3:3010
-862:3:3011
-863:3:3018
-864:3:3019
-865:3:3030
-866:3:3031
-867:3:3032
-868:3:3043
-869:3:3048
-870:3:3049
-871:0:4401
-872:3:3061
-873:0:4401
-874:3:3063
-875:0:4401
-876:3:3064
-877:0:4401
-878:3:3065
-879:0:4401
-880:3:3066
-881:0:4401
-882:3:3067
-883:3:3071
-884:3:3072
-885:3:3080
-886:3:3081
-887:3:3085
-888:3:3086
-889:3:3094
-890:3:3099
-891:3:3103
-892:3:3104
-893:3:3111
-894:3:3112
-895:3:3123
-896:3:3124
-897:3:3125
-898:3:3136
-899:3:3141
-900:3:3142
-901:0:4401
-902:3:3154
-903:0:4401
-904:3:3356
-905:0:4401
-906:3:3454
-907:0:4401
-908:3:3455
-909:0:4401
-910:3:3459
-911:0:4401
-912:3:3465
-913:3:3469
-914:3:3470
-915:3:3478
-916:3:3479
-917:3:3483
-918:3:3484
-919:3:3492
-920:3:3497
-921:3:3501
-922:3:3502
-923:3:3509
-924:3:3510
-925:3:3521
-926:3:3522
-927:3:3523
-928:3:3534
-929:3:3539
-930:3:3540
-931:0:4401
-932:3:3552
-933:0:4401
-934:3:3554
-935:0:4401
-936:3:3555
-937:3:3559
-938:3:3560
-939:3:3568
-940:3:3569
-941:3:3573
-942:3:3574
-943:3:3582
-944:3:3587
-945:3:3591
-946:3:3592
-947:3:3599
-948:3:3600
-949:3:3611
-950:3:3612
-951:3:3613
-952:3:3624
-953:3:3629
-954:3:3630
-955:0:4401
-956:3:3642
-957:0:4401
-958:3:3644
-959:0:4401
-960:3:3647
-961:3:3648
-962:3:3660
-963:3:3661
-964:3:3665
-965:3:3666
-966:3:3674
-967:3:3679
-968:3:3683
-969:3:3684
-970:3:3691
-971:3:3692
-972:3:3703
-973:3:3704
-974:3:3705
-975:3:3716
-976:3:3721
-977:3:3722
-978:0:4401
-979:3:3734
-980:0:4401
-981:3:3736
-982:0:4401
-983:3:3737
-984:0:4401
-985:3:3738
-986:0:4401
-987:3:3739
-988:0:4401
-989:3:3740
-990:3:3744
-991:3:3745
-992:3:3753
-993:3:3754
-994:3:3758
-995:3:3759
-996:3:3767
-997:3:3772
-998:3:3776
-999:3:3777
-1000:3:3784
-1001:3:3785
-1002:3:3796
-1003:3:3797
-1004:3:3798
-1005:3:3809
-1006:3:3814
-1007:3:3815
-1008:0:4401
-1009:3:3827
-1010:0:4401
-1011:3:4029
-1012:0:4401
-1013:3:4127
-1014:0:4401
-1015:3:4128
-1016:0:4401
-1017:3:4132
-1018:0:4401
-1019:3:4138
-1020:0:4401
-1021:3:4142
-1022:3:4143
-1023:3:4147
-1024:3:4151
-1025:3:4152
-1026:3:4156
-1027:3:4164
-1028:3:4165
-1029:3:4170
-1030:3:4177
-1031:3:4178
-1032:3:4185
-1033:3:4190
-1034:0:4401
-1035:3:4201
-1036:0:4401
-1037:3:4205
-1038:3:4206
-1039:3:4210
-1040:3:4214
-1041:3:4215
-1042:3:4219
-1043:3:4227
-1044:3:4228
-1045:3:4233
-1046:3:4240
-1047:3:4241
-1048:3:4248
-1049:3:4253
-1050:0:4401
-1051:3:4264
-1052:0:4401
-1053:3:4272
-1054:3:4273
-1055:3:4277
-1056:3:4281
-1057:3:4282
-1058:3:4286
-1059:3:4294
-1060:3:4295
-1061:3:4300
-1062:3:4307
-1063:3:4308
-1064:3:4315
-1065:3:4320
-1066:0:4401
-1067:3:4335
-1068:0:4401
-1069:3:4337
-1070:0:4401
-1071:3:4338
-1072:0:4401
-1073:3:4341
-1074:0:4401
-1075:3:4346
-1076:0:4401
-1077:2:1236
-1078:0:4401
-1079:3:4347
-1080:0:4401
-1081:2:1242
-1082:0:4401
-1083:3:4346
-1084:0:4401
-1085:2:1243
-1086:0:4401
-1087:3:4347
-1088:0:4401
-1089:2:1244
-1090:0:4401
-1091:3:4346
-1092:0:4401
-1093:2:1245
-1094:0:4401
-1095:3:4347
-1096:0:4401
-1097:1:2
-1098:0:4401
-1099:3:4346
-1100:0:4401
-1101:2:1246
-1102:0:4401
-1103:3:4347
-1104:0:4401
-1105:1:8
-1106:0:4401
-1107:3:4346
-1108:0:4401
-1109:2:1245
-1110:0:4401
-1111:3:4347
-1112:0:4401
-1113:1:9
-1114:0:4401
-1115:3:4346
-1116:0:4401
-1117:2:1246
-1118:0:4401
-1119:3:4347
-1120:0:4401
-1121:1:10
-1122:0:4401
-1123:3:4346
-1124:0:4401
-1125:2:1245
-1126:0:4401
-1127:3:4347
-1128:0:4401
-1129:1:11
-1130:0:4401
-1131:3:4346
-1132:0:4401
-1133:2:1246
-1134:0:4401
-1135:3:4347
-1136:0:4401
-1137:1:14
-1138:0:4401
-1139:3:4346
-1140:0:4401
-1141:2:1245
-1142:0:4401
-1143:3:4347
-1144:0:4401
-1145:1:15
-1146:0:4401
-1147:3:4346
-1148:0:4401
-1149:2:1246
-1150:0:4401
-1151:3:4347
-1152:0:4401
-1153:1:16
-1154:1:20
-1155:1:21
-1156:1:29
-1157:1:30
-1158:1:34
-1159:1:35
-1160:1:43
-1161:1:48
-1162:1:52
-1163:1:53
-1164:1:60
-1165:1:61
-1166:1:72
-1167:1:73
-1168:1:74
-1169:1:85
-1170:1:90
-1171:1:91
-1172:0:4401
-1173:3:4346
-1174:0:4401
-1175:2:1245
-1176:0:4401
-1177:3:4347
-1178:0:4401
-1179:1:103
-1180:0:4401
-1181:3:4346
-1182:0:4401
-1183:2:1246
-1184:0:4401
-1185:3:4347
-1186:0:4401
-1187:2:1247
-1188:0:4401
-1189:3:4346
-1190:0:4401
-1191:2:1253
-1192:0:4401
-1193:3:4347
-1194:0:4401
-1195:2:1254
-1196:0:4399
-1197:3:4346
-1198:0:4405
-1199:3:4347
-1200:0:4405
-1201:2:1257
-1202:0:4405
-1203:3:4346
-1204:0:4405
-1205:2:1258
-1206:0:4405
-1207:3:4347
-1208:0:4405
-1209:2:1259
-1210:2:1263
-1211:2:1264
-1212:2:1272
-1213:2:1273
-1214:2:1277
-1215:2:1278
-1216:2:1286
-1217:2:1291
-1218:2:1295
-1219:2:1296
-1220:2:1303
-1221:2:1304
-1222:2:1315
-1223:2:1316
-1224:2:1317
-1225:2:1328
-1226:2:1333
-1227:2:1334
-1228:0:4405
-1229:3:4346
-1230:0:4405
-1231:2:1346
-1232:0:4405
-1233:3:4347
-1234:0:4405
-1235:2:1347
-1236:0:4405
-1237:3:4346
-1238:0:4405
-1239:1:104
--1:-1:-1
-1240:0:4405
-1241:3:4347
-1242:0:4405
-1243:3:4346
-1244:0:4405
-1245:2:1348
-1246:0:4405
-1247:3:4347
-1248:0:4405
-1249:2:1347
-1250:0:4405
-1251:3:4346
-1252:0:4405
-1253:1:105
-1254:0:4405
-1255:3:4347
-1256:0:4405
-1257:3:4346
-1258:0:4405
-1259:2:1348
-1260:0:4405
-1261:3:4347
-1262:0:4405
-1263:2:1347
-1264:0:4405
-1265:3:4346
-1266:0:4405
-1267:1:104
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.define b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.log b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.log
deleted file mode 100644 (file)
index be944b5..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 744)
-depth 15: Claim reached state 9 (line 749)
-depth 205: Claim reached state 9 (line 748)
-Depth=    2535 States=    1e+06 Transitions=  1.7e+07 Memory=   489.885        t=   14.4 R=   7e+04
-Depth=    2535 States=    2e+06 Transitions= 3.76e+07 Memory=   523.186        t=     32 R=   6e+04
-Depth=    2535 States=    3e+06 Transitions= 5.78e+07 Memory=   555.901        t=   49.6 R=   6e+04
-pan: resizing hashtable to -w22..  done
-
-(Spin Version 5.1.7 -- 23 December 2008)
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 2535, errors: 0
-  1687360 states, stored (3.30264e+06 visited)
- 60975458 states, matched
- 64278093 transitions (= visited+matched)
-2.3918285e+08 atomic steps
-hash conflicts:  20728375 (resolved)
-
-Stats on memory usage (in Megabytes):
-  135.172      equivalent memory usage for states (stored*(State-vector + overhead))
-  110.532      actual memory usage for states (compression: 81.77%)
-               state-vector as stored = 41 byte + 28 byte overhead
-   32.000      memory used for hash table (-w22)
-  457.764      memory used for DFS stack (-m10000000)
-  600.205      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 399, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 61, "(1)"
-       line 418, "pan.___", state 91, "(1)"
-       line 399, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 151, "(1)"
-       line 418, "pan.___", state 181, "(1)"
-       line 399, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 242, "(1)"
-       line 418, "pan.___", state 272, "(1)"
-       line 399, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 360, "(1)"
-       line 418, "pan.___", state 390, "(1)"
-       line 540, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 399, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 59, "(1)"
-       line 413, "pan.___", state 72, "(1)"
-       line 418, "pan.___", state 89, "(1)"
-       line 399, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 153, "(1)"
-       line 413, "pan.___", state 166, "(1)"
-       line 652, "pan.___", state 199, "(1)"
-       line 175, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 240, "(1)"
-       line 164, "pan.___", state 248, "(1)"
-       line 168, "pan.___", state 260, "(1)"
-       line 175, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 303, "(1)"
-       line 164, "pan.___", state 311, "(1)"
-       line 168, "pan.___", state 323, "(1)"
-       line 175, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 370, "(1)"
-       line 164, "pan.___", state 378, "(1)"
-       line 168, "pan.___", state 390, "(1)"
-       line 399, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 449, "(1)"
-       line 413, "pan.___", state 462, "(1)"
-       line 418, "pan.___", state 479, "(1)"
-       line 399, "pan.___", state 498, "(1)"
-       line 403, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 554, "(1)"
-       line 418, "pan.___", state 571, "(1)"
-       line 403, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 647, "(1)"
-       line 418, "pan.___", state 664, "(1)"
-       line 179, "pan.___", state 687, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 700, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 710, "(1)"
-       line 164, "pan.___", state 718, "(1)"
-       line 168, "pan.___", state 730, "(1)"
-       line 175, "pan.___", state 741, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 763, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 773, "(1)"
-       line 164, "pan.___", state 781, "(1)"
-       line 168, "pan.___", state 793, "(1)"
-       line 175, "pan.___", state 808, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 817, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 830, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 840, "(1)"
-       line 164, "pan.___", state 848, "(1)"
-       line 168, "pan.___", state 860, "(1)"
-       line 399, "pan.___", state 882, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 884, "(1)"
-       line 399, "pan.___", state 885, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 885, "else"
-       line 399, "pan.___", state 888, "(1)"
-       line 403, "pan.___", state 896, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 898, "(1)"
-       line 403, "pan.___", state 899, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 899, "else"
-       line 403, "pan.___", state 902, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 403, "pan.___", state 903, "(1)"
-       line 401, "pan.___", state 908, "((i<1))"
-       line 401, "pan.___", state 908, "((i>=1))"
-       line 408, "pan.___", state 914, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 927, "(1)"
-       line 409, "pan.___", state 928, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 928, "else"
-       line 409, "pan.___", state 931, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 409, "pan.___", state 932, "(1)"
-       line 413, "pan.___", state 940, "(1)"
-       line 413, "pan.___", state 941, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 941, "else"
-       line 413, "pan.___", state 944, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 413, "pan.___", state 945, "(1)"
-       line 411, "pan.___", state 950, "((i<1))"
-       line 411, "pan.___", state 950, "((i>=1))"
-       line 418, "pan.___", state 957, "(1)"
-       line 418, "pan.___", state 958, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 958, "else"
-       line 418, "pan.___", state 961, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 418, "pan.___", state 962, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 420, "pan.___", state 965, "(1)"
-       line 403, "pan.___", state 996, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1014, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1040, "(1)"
-       line 418, "pan.___", state 1057, "(1)"
-       line 403, "pan.___", state 1086, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1104, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1130, "(1)"
-       line 418, "pan.___", state 1147, "(1)"
-       line 399, "pan.___", state 1166, "(1)"
-       line 403, "pan.___", state 1178, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1196, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1222, "(1)"
-       line 418, "pan.___", state 1239, "(1)"
-       line 403, "pan.___", state 1271, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 408, "pan.___", state 1289, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 413, "pan.___", state 1315, "(1)"
-       line 418, "pan.___", state 1332, "(1)"
-       line 179, "pan.___", state 1355, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1368, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1378, "(1)"
-       line 164, "pan.___", state 1386, "(1)"
-       line 168, "pan.___", state 1398, "(1)"
-       line 175, "pan.___", state 1409, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1431, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1441, "(1)"
-       line 164, "pan.___", state 1449, "(1)"
-       line 168, "pan.___", state 1461, "(1)"
-       line 175, "pan.___", state 1476, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1485, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1498, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1508, "(1)"
-       line 164, "pan.___", state 1516, "(1)"
-       line 168, "pan.___", state 1528, "(1)"
-       line 399, "pan.___", state 1550, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 399, "pan.___", state 1552, "(1)"
-       line 399, "pan.___", state 1553, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 399, "pan.___", state 1553, "else"
-       line 399, "pan.___", state 1556, "(1)"
-       line 403, "pan.___", state 1564, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 403, "pan.___", state 1566, "(1)"
-       line 403, "pan.___", state 1567, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 403, "pan.___", state 1567, "else"
-       line 403, "pan.___", state 1570, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 403, "pan.___", state 1571, "(1)"
-       line 401, "pan.___", state 1576, "((i<1))"
-       line 401, "pan.___", state 1576, "((i>=1))"
-       line 408, "pan.___", state 1582, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1595, "(1)"
-       line 409, "pan.___", state 1596, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 409, "pan.___", state 1596, "else"
-       line 409, "pan.___", state 1599, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 409, "pan.___", state 1600, "(1)"
-       line 413, "pan.___", state 1608, "(1)"
-       line 413, "pan.___", state 1609, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 413, "pan.___", state 1609, "else"
-       line 413, "pan.___", state 1612, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 413, "pan.___", state 1613, "(1)"
-       line 411, "pan.___", state 1618, "((i<1))"
-       line 411, "pan.___", state 1618, "((i>=1))"
-       line 418, "pan.___", state 1625, "(1)"
-       line 418, "pan.___", state 1626, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 418, "pan.___", state 1626, "else"
-       line 418, "pan.___", state 1629, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 418, "pan.___", state 1630, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 420, "pan.___", state 1633, "(1)"
-       line 179, "pan.___", state 1658, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1671, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1681, "(1)"
-       line 164, "pan.___", state 1689, "(1)"
-       line 168, "pan.___", state 1701, "(1)"
-       line 175, "pan.___", state 1712, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 183, "pan.___", state 1734, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 160, "pan.___", state 1744, "(1)"
-       line 164, "pan.___", state 1752, "(1)"
-       line 168, "pan.___", state 1764, "(1)"
-       line 175, "pan.___", state 1779, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 179, "pan.___", state 1788, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 183, "pan.___", state 1801, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 160, "pan.___", state 1811, "(1)"
-       line 164, "pan.___", state 1819, "(1)"
-       line 168, "pan.___", state 1831, "(1)"
-       line 702, "pan.___", state 1856, "-end-"
-       (158 of 1856 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 751, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 55.4 seconds
-pan: rate 59582.086 states/second
-pan: avg transition delay 8.6235e-07 usec
-cp .input.spin urcu_progress_writer.spin.input
-cp .input.spin.trail urcu_progress_writer.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.spin.input
deleted file mode 100644 (file)
index 84739c0..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#define WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer.spin.input.trail
deleted file mode 100644 (file)
index e65d663..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2679
-2:1:2673
-3:1:2674
-4:1:2675
-5:1:2676
-6:0:2685
-7:5:1129
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.define b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.log b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.log
deleted file mode 100644 (file)
index 80c9c6d..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-make[1]: Entering directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
-rm -f pan* trail.out .input.spin* *.spin.trail .input.define
-touch .input.define
-cat .input.define > pan.ltl
-cat DEFINES >> pan.ltl
-spin -f "!(`cat urcu_progress.ltl | grep -v ^//`)" >> pan.ltl
-cp urcu_progress_writer_error.define .input.define
-cat .input.define > .input.spin
-cat DEFINES >> .input.spin
-cat urcu.spin >> .input.spin
-rm -f .input.spin.trail
-spin -a -X -N pan.ltl .input.spin
-Exit-Status 0
-gcc -O2 -w -DHASH64 -o pan pan.c
-./pan -a -f -v -c1 -X -m10000000 -w20
-warning: for p.o. reduction to be valid the never claim must be stutter-invariant
-(never claims generated from LTL formulae are stutter-invariant)
-depth 0: Claim reached state 5 (line 745)
-depth 15: Claim reached state 9 (line 750)
-depth 205: Claim reached state 9 (line 749)
-pan: acceptance cycle (at depth 1651)
-pan: wrote .input.spin.trail
-
-(Spin Version 5.1.7 -- 23 December 2008)
-Warning: Search not completed
-       + Partial Order Reduction
-
-Full statespace search for:
-       never claim             +
-       assertion violations    + (if within scope of claim)
-       acceptance   cycles     + (fairness enabled)
-       invalid end states      - (disabled by never claim)
-
-State-vector 56 byte, depth reached 3006, errors: 1
-    19244 states, stored (53713 visited)
-   704248 states, matched
-   757961 transitions (= visited+matched)
-  2831420 atomic steps
-hash conflicts:      5063 (resolved)
-
-Stats on memory usage (in Megabytes):
-    1.542      equivalent memory usage for states (stored*(State-vector + overhead))
-    1.605      actual memory usage for states (unsuccessful compression: 104.14%)
-               state-vector as stored = 59 byte + 28 byte overhead
-    8.000      memory used for hash table (-w20)
-  457.764      memory used for DFS stack (-m10000000)
-  467.326      total actual memory usage
-
-unreached in proctype urcu_reader
-       line 400, "pan.___", state 16, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 48, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 61, "(1)"
-       line 419, "pan.___", state 91, "(1)"
-       line 400, "pan.___", state 106, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 138, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 151, "(1)"
-       line 419, "pan.___", state 181, "(1)"
-       line 400, "pan.___", state 197, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 229, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 242, "(1)"
-       line 419, "pan.___", state 272, "(1)"
-       line 400, "pan.___", state 315, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 347, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 360, "(1)"
-       line 419, "pan.___", state 390, "(1)"
-       line 541, "pan.___", state 414, "-end-"
-       (17 of 414 states)
-unreached in proctype urcu_writer
-       line 400, "pan.___", state 14, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 20, "(1)"
-       line 404, "pan.___", state 28, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 34, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 404, "pan.___", state 35, "(1)"
-       line 402, "pan.___", state 40, "((i<1))"
-       line 402, "pan.___", state 40, "((i>=1))"
-       line 409, "pan.___", state 46, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 59, "(1)"
-       line 410, "pan.___", state 60, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 60, "else"
-       line 410, "pan.___", state 63, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 410, "pan.___", state 64, "(1)"
-       line 414, "pan.___", state 72, "(1)"
-       line 414, "pan.___", state 73, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 73, "else"
-       line 414, "pan.___", state 76, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 414, "pan.___", state 77, "(1)"
-       line 412, "pan.___", state 82, "((i<1))"
-       line 412, "pan.___", state 82, "((i>=1))"
-       line 419, "pan.___", state 89, "(1)"
-       line 419, "pan.___", state 90, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 90, "else"
-       line 419, "pan.___", state 93, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 419, "pan.___", state 94, "(1)"
-       line 370, "pan.___", state 99, "(1)"
-       line 640, "pan.___", state 103, "cached_generation_ptr.val[_pid] = (old_gen+1)"
-       line 638, "pan.___", state 104, "old_gen = cached_generation_ptr.val[_pid]"
-       line 400, "pan.___", state 108, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 114, "(1)"
-       line 404, "pan.___", state 122, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 128, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 404, "pan.___", state 129, "(1)"
-       line 402, "pan.___", state 134, "((i<1))"
-       line 402, "pan.___", state 134, "((i>=1))"
-       line 410, "pan.___", state 153, "(1)"
-       line 410, "pan.___", state 154, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 154, "else"
-       line 410, "pan.___", state 157, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 410, "pan.___", state 158, "(1)"
-       line 414, "pan.___", state 166, "(1)"
-       line 414, "pan.___", state 167, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 167, "else"
-       line 414, "pan.___", state 170, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 414, "pan.___", state 171, "(1)"
-       line 412, "pan.___", state 176, "((i<1))"
-       line 412, "pan.___", state 176, "((i>=1))"
-       line 419, "pan.___", state 183, "(1)"
-       line 419, "pan.___", state 184, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 184, "else"
-       line 419, "pan.___", state 187, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 419, "pan.___", state 188, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 421, "pan.___", state 191, "(1)"
-       line 370, "pan.___", state 193, "(1)"
-       line 653, "pan.___", state 199, "(1)"
-       line 647, "pan.___", state 202, "((write_lock==0))"
-       line 647, "pan.___", state 202, "else"
-       line 645, "pan.___", state 203, "(1)"
-       line 176, "pan.___", state 208, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 217, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 225, "((j<1))"
-       line 178, "pan.___", state 225, "((j>=1))"
-       line 184, "pan.___", state 230, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 240, "(1)"
-       line 165, "pan.___", state 248, "(1)"
-       line 165, "pan.___", state 249, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 165, "pan.___", state 249, "else"
-       line 163, "pan.___", state 254, "((j<1))"
-       line 163, "pan.___", state 254, "((j>=1))"
-       line 169, "pan.___", state 260, "(1)"
-       line 169, "pan.___", state 261, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 169, "pan.___", state 261, "else"
-       line 171, "pan.___", state 264, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 171, "pan.___", state 264, "else"
-       line 176, "pan.___", state 271, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 180, "pan.___", state 280, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<i)))"
-       line 178, "pan.___", state 288, "((j<1))"
-       line 178, "pan.___", state 288, "((j>=1))"
-       line 184, "pan.___", state 293, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 303, "(1)"
-       line 165, "pan.___", state 311, "(1)"
-       line 165, "pan.___", state 312, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<i))))"
-       line 165, "pan.___", state 312, "else"
-       line 163, "pan.___", state 317, "((j<1))"
-       line 163, "pan.___", state 317, "((j>=1))"
-       line 169, "pan.___", state 323, "(1)"
-       line 169, "pan.___", state 324, "(!((cache_dirty_generation_ptr.bitfield&(1<<i))))"
-       line 169, "pan.___", state 324, "else"
-       line 171, "pan.___", state 327, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<i))))"
-       line 171, "pan.___", state 327, "else"
-       line 215, "pan.___", state 333, "((i<1))"
-       line 215, "pan.___", state 333, "((i>=1))"
-       line 176, "pan.___", state 338, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 347, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 178, "pan.___", state 355, "((j<1))"
-       line 178, "pan.___", state 355, "((j>=1))"
-       line 184, "pan.___", state 360, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 370, "(1)"
-       line 165, "pan.___", state 378, "(1)"
-       line 165, "pan.___", state 379, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 165, "pan.___", state 379, "else"
-       line 163, "pan.___", state 384, "((j<1))"
-       line 163, "pan.___", state 384, "((j>=1))"
-       line 169, "pan.___", state 390, "(1)"
-       line 169, "pan.___", state 391, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 169, "pan.___", state 391, "else"
-       line 171, "pan.___", state 394, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 171, "pan.___", state 394, "else"
-       line 400, "pan.___", state 404, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 410, "(1)"
-       line 404, "pan.___", state 418, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 424, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 404, "pan.___", state 425, "(1)"
-       line 402, "pan.___", state 430, "((i<1))"
-       line 402, "pan.___", state 430, "((i>=1))"
-       line 409, "pan.___", state 436, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 449, "(1)"
-       line 410, "pan.___", state 450, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 450, "else"
-       line 410, "pan.___", state 453, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 410, "pan.___", state 454, "(1)"
-       line 414, "pan.___", state 462, "(1)"
-       line 414, "pan.___", state 463, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 463, "else"
-       line 414, "pan.___", state 466, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 414, "pan.___", state 467, "(1)"
-       line 412, "pan.___", state 472, "((i<1))"
-       line 412, "pan.___", state 472, "((i>=1))"
-       line 419, "pan.___", state 479, "(1)"
-       line 419, "pan.___", state 480, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 480, "else"
-       line 419, "pan.___", state 483, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 419, "pan.___", state 484, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 421, "pan.___", state 487, "(1)"
-       line 370, "pan.___", state 489, "(1)"
-       line 662, "pan.___", state 492, "cached_urcu_gp_ctr.val[_pid] = (tmp^(1<<7))"
-       line 400, "pan.___", state 498, "(1)"
-       line 400, "pan.___", state 499, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 499, "else"
-       line 400, "pan.___", state 502, "(1)"
-       line 404, "pan.___", state 510, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 516, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 404, "pan.___", state 517, "(1)"
-       line 402, "pan.___", state 522, "((i<1))"
-       line 402, "pan.___", state 522, "((i>=1))"
-       line 409, "pan.___", state 528, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 541, "(1)"
-       line 410, "pan.___", state 542, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 542, "else"
-       line 410, "pan.___", state 545, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 410, "pan.___", state 546, "(1)"
-       line 414, "pan.___", state 554, "(1)"
-       line 414, "pan.___", state 555, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 555, "else"
-       line 414, "pan.___", state 558, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 414, "pan.___", state 559, "(1)"
-       line 412, "pan.___", state 564, "((i<1))"
-       line 412, "pan.___", state 564, "((i>=1))"
-       line 419, "pan.___", state 571, "(1)"
-       line 419, "pan.___", state 572, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 572, "else"
-       line 419, "pan.___", state 575, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 419, "pan.___", state 576, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 421, "pan.___", state 579, "(1)"
-       line 370, "pan.___", state 581, "(1)"
-       line 400, "pan.___", state 589, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 595, "(1)"
-       line 404, "pan.___", state 603, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 609, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 404, "pan.___", state 610, "(1)"
-       line 402, "pan.___", state 615, "((i<1))"
-       line 402, "pan.___", state 615, "((i>=1))"
-       line 409, "pan.___", state 621, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 634, "(1)"
-       line 410, "pan.___", state 635, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 635, "else"
-       line 410, "pan.___", state 638, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 410, "pan.___", state 639, "(1)"
-       line 414, "pan.___", state 647, "(1)"
-       line 414, "pan.___", state 648, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 648, "else"
-       line 414, "pan.___", state 651, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 414, "pan.___", state 652, "(1)"
-       line 412, "pan.___", state 657, "((i<1))"
-       line 412, "pan.___", state 657, "((i>=1))"
-       line 419, "pan.___", state 664, "(1)"
-       line 419, "pan.___", state 665, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 665, "else"
-       line 419, "pan.___", state 668, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 419, "pan.___", state 669, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 421, "pan.___", state 672, "(1)"
-       line 370, "pan.___", state 674, "(1)"
-       line 400, "pan.___", state 679, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 681, "(1)"
-       line 400, "pan.___", state 682, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 682, "else"
-       line 400, "pan.___", state 685, "(1)"
-       line 404, "pan.___", state 693, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 695, "(1)"
-       line 404, "pan.___", state 696, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 696, "else"
-       line 404, "pan.___", state 699, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 404, "pan.___", state 700, "(1)"
-       line 402, "pan.___", state 705, "((i<1))"
-       line 402, "pan.___", state 705, "((i>=1))"
-       line 409, "pan.___", state 711, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 724, "(1)"
-       line 410, "pan.___", state 725, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 725, "else"
-       line 410, "pan.___", state 728, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 410, "pan.___", state 729, "(1)"
-       line 414, "pan.___", state 737, "(1)"
-       line 414, "pan.___", state 738, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 738, "else"
-       line 414, "pan.___", state 741, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 414, "pan.___", state 742, "(1)"
-       line 412, "pan.___", state 747, "((i<1))"
-       line 412, "pan.___", state 747, "((i>=1))"
-       line 419, "pan.___", state 754, "(1)"
-       line 419, "pan.___", state 755, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 755, "else"
-       line 419, "pan.___", state 758, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 419, "pan.___", state 759, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 421, "pan.___", state 762, "(1)"
-       line 370, "pan.___", state 764, "(1)"
-       line 430, "pan.___", state 767, "(((tmp2&((1<<7)-1))&&((tmp2^cached_urcu_gp_ctr.val[_pid])&(1<<7))))"
-       line 430, "pan.___", state 767, "else"
-       line 400, "pan.___", state 777, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 779, "(1)"
-       line 400, "pan.___", state 780, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 780, "else"
-       line 400, "pan.___", state 783, "(1)"
-       line 404, "pan.___", state 791, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 793, "(1)"
-       line 404, "pan.___", state 794, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 794, "else"
-       line 404, "pan.___", state 797, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 404, "pan.___", state 798, "(1)"
-       line 402, "pan.___", state 803, "((i<1))"
-       line 402, "pan.___", state 803, "((i>=1))"
-       line 409, "pan.___", state 809, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 822, "(1)"
-       line 410, "pan.___", state 823, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 823, "else"
-       line 410, "pan.___", state 826, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 410, "pan.___", state 827, "(1)"
-       line 414, "pan.___", state 835, "(1)"
-       line 414, "pan.___", state 836, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 836, "else"
-       line 414, "pan.___", state 839, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 414, "pan.___", state 840, "(1)"
-       line 412, "pan.___", state 845, "((i<1))"
-       line 412, "pan.___", state 845, "((i>=1))"
-       line 419, "pan.___", state 852, "(1)"
-       line 419, "pan.___", state 853, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 853, "else"
-       line 419, "pan.___", state 856, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 419, "pan.___", state 857, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 421, "pan.___", state 860, "(1)"
-       line 370, "pan.___", state 862, "(1)"
-       line 449, "pan.___", state 870, "((tmp<1))"
-       line 449, "pan.___", state 870, "((tmp>=1))"
-       line 462, "pan.___", state 873, "tmp = 0"
-       line 400, "pan.___", state 877, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 883, "(1)"
-       line 404, "pan.___", state 891, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 897, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 404, "pan.___", state 898, "(1)"
-       line 402, "pan.___", state 903, "((i<1))"
-       line 402, "pan.___", state 903, "((i>=1))"
-       line 409, "pan.___", state 909, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 922, "(1)"
-       line 410, "pan.___", state 923, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 923, "else"
-       line 410, "pan.___", state 926, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 410, "pan.___", state 927, "(1)"
-       line 414, "pan.___", state 935, "(1)"
-       line 414, "pan.___", state 936, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 936, "else"
-       line 414, "pan.___", state 939, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 414, "pan.___", state 940, "(1)"
-       line 412, "pan.___", state 945, "((i<1))"
-       line 412, "pan.___", state 945, "((i>=1))"
-       line 419, "pan.___", state 952, "(1)"
-       line 419, "pan.___", state 953, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 953, "else"
-       line 419, "pan.___", state 956, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 419, "pan.___", state 957, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 421, "pan.___", state 960, "(1)"
-       line 370, "pan.___", state 962, "(1)"
-       line 671, "pan.___", state 963, "tmp = cached_urcu_gp_ctr.val[_pid]"
-       line 400, "pan.___", state 967, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 973, "(1)"
-       line 404, "pan.___", state 981, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 987, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 404, "pan.___", state 988, "(1)"
-       line 402, "pan.___", state 993, "((i<1))"
-       line 402, "pan.___", state 993, "((i>=1))"
-       line 409, "pan.___", state 999, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1012, "(1)"
-       line 410, "pan.___", state 1013, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1013, "else"
-       line 410, "pan.___", state 1016, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 410, "pan.___", state 1017, "(1)"
-       line 414, "pan.___", state 1025, "(1)"
-       line 414, "pan.___", state 1026, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1026, "else"
-       line 414, "pan.___", state 1029, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 414, "pan.___", state 1030, "(1)"
-       line 412, "pan.___", state 1035, "((i<1))"
-       line 412, "pan.___", state 1035, "((i>=1))"
-       line 419, "pan.___", state 1042, "(1)"
-       line 419, "pan.___", state 1043, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1043, "else"
-       line 419, "pan.___", state 1046, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 419, "pan.___", state 1047, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 421, "pan.___", state 1050, "(1)"
-       line 370, "pan.___", state 1052, "(1)"
-       line 400, "pan.___", state 1061, "(1)"
-       line 404, "pan.___", state 1073, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1091, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1117, "(1)"
-       line 419, "pan.___", state 1134, "(1)"
-       line 404, "pan.___", state 1166, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1184, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 414, "pan.___", state 1210, "(1)"
-       line 419, "pan.___", state 1227, "(1)"
-       line 400, "pan.___", state 1242, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1256, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 409, "pan.___", state 1274, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1287, "(1)"
-       line 414, "pan.___", state 1300, "(1)"
-       line 419, "pan.___", state 1317, "(1)"
-       line 400, "pan.___", state 1340, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 400, "pan.___", state 1342, "(1)"
-       line 400, "pan.___", state 1343, "((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid)))"
-       line 400, "pan.___", state 1343, "else"
-       line 400, "pan.___", state 1346, "(1)"
-       line 404, "pan.___", state 1354, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 404, "pan.___", state 1356, "(1)"
-       line 404, "pan.___", state 1357, "((cache_dirty_urcu_active_readers.bitfield&(1<<_pid)))"
-       line 404, "pan.___", state 1357, "else"
-       line 404, "pan.___", state 1360, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 404, "pan.___", state 1361, "(1)"
-       line 402, "pan.___", state 1366, "((i<1))"
-       line 402, "pan.___", state 1366, "((i>=1))"
-       line 409, "pan.___", state 1372, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 410, "pan.___", state 1385, "(1)"
-       line 410, "pan.___", state 1386, "(!((cache_dirty_urcu_gp_ctr.bitfield&(1<<_pid))))"
-       line 410, "pan.___", state 1386, "else"
-       line 410, "pan.___", state 1389, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 410, "pan.___", state 1390, "(1)"
-       line 414, "pan.___", state 1398, "(1)"
-       line 414, "pan.___", state 1399, "(!((cache_dirty_urcu_active_readers.bitfield&(1<<_pid))))"
-       line 414, "pan.___", state 1399, "else"
-       line 414, "pan.___", state 1402, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 414, "pan.___", state 1403, "(1)"
-       line 412, "pan.___", state 1408, "((i<1))"
-       line 412, "pan.___", state 1408, "((i>=1))"
-       line 419, "pan.___", state 1415, "(1)"
-       line 419, "pan.___", state 1416, "(!((cache_dirty_generation_ptr.bitfield&(1<<_pid))))"
-       line 419, "pan.___", state 1416, "else"
-       line 419, "pan.___", state 1419, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 419, "pan.___", state 1420, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 421, "pan.___", state 1423, "(1)"
-       line 180, "pan.___", state 1448, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 184, "pan.___", state 1461, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 1471, "(1)"
-       line 165, "pan.___", state 1479, "(1)"
-       line 169, "pan.___", state 1491, "(1)"
-       line 176, "pan.___", state 1502, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<i)))"
-       line 184, "pan.___", state 1524, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<i)))"
-       line 161, "pan.___", state 1534, "(1)"
-       line 165, "pan.___", state 1542, "(1)"
-       line 169, "pan.___", state 1554, "(1)"
-       line 176, "pan.___", state 1569, "cache_dirty_urcu_gp_ctr.bitfield = (cache_dirty_urcu_gp_ctr.bitfield&~((1<<_pid)))"
-       line 180, "pan.___", state 1578, "cache_dirty_urcu_active_readers.bitfield = (cache_dirty_urcu_active_readers.bitfield&~((1<<_pid)))"
-       line 184, "pan.___", state 1591, "cache_dirty_generation_ptr.bitfield = (cache_dirty_generation_ptr.bitfield&~((1<<_pid)))"
-       line 161, "pan.___", state 1601, "(1)"
-       line 165, "pan.___", state 1609, "(1)"
-       line 169, "pan.___", state 1621, "(1)"
-       line 370, "pan.___", state 1642, "(1)"
-       line 696, "pan.___", state 1643, "(1)"
-       line 703, "pan.___", state 1646, "-end-"
-       (308 of 1646 states)
-unreached in proctype :init:
-       (0 of 46 states)
-unreached in proctype :never:
-       line 752, "pan.___", state 11, "-end-"
-       (1 of 11 states)
-
-pan: elapsed time 0.65 seconds
-pan: rate 82635.385 states/second
-pan: avg transition delay 8.5756e-07 usec
-cp .input.spin urcu_progress_writer_error.spin.input
-cp .input.spin.trail urcu_progress_writer_error.spin.input.trail
-make[1]: Leaving directory `/home/compudj/doc/userspace-rcu/formal-model/urcu'
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.spin.input b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.spin.input
deleted file mode 100644 (file)
index 90957bb..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
-
-#define read_free_race (read_generation[0] == last_free_gen)
-#define read_free      (free_done && data_access[0])
-
-//#define TEST_SIGNAL
-//#define TEST_SIGNAL_ON_READ
-//#define TEST_SIGNAL_ON_WRITE
-
-#define RCU_GP_CTR_BIT (1 << 7)
-#define RCU_GP_CTR_NEST_MASK (RCU_GP_CTR_BIT - 1)
-
-#ifndef READER_NEST_LEVEL
-#define READER_NEST_LEVEL 1
-//#define READER_NEST_LEVEL 2
-#endif
-
-#define REMOTE_BARRIERS
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.spin.input.trail b/formal-model/urcu/result-standard-execution-nonest/urcu_progress_writer_error.spin.input.trail
deleted file mode 100644 (file)
index e1188eb..0000000
+++ /dev/null
@@ -1,3010 +0,0 @@
--2:3:-2
--4:-4:-4
-1:0:2108
-2:3:2060
-3:3:2063
-4:3:2063
-5:3:2066
-6:3:2074
-7:3:2074
-8:3:2077
-9:3:2083
-10:3:2087
-11:3:2087
-12:3:2090
-13:3:2098
-14:3:2102
-15:3:2103
-16:0:2108
-17:3:2105
-18:0:2108
-19:2:416
-20:0:2108
-21:2:422
-22:0:2108
-23:2:423
-24:0:2108
-25:2:424
-26:2:428
-27:2:429
-28:2:437
-29:2:438
-30:2:442
-31:2:443
-32:2:451
-33:2:456
-34:2:460
-35:2:461
-36:2:468
-37:2:469
-38:2:480
-39:2:481
-40:2:482
-41:2:493
-42:2:498
-43:2:499
-44:0:2106
-45:2:511
-46:0:2112
-47:2:513
-48:2:514
-49:0:2112
-50:2:518
-51:2:522
-52:2:523
-53:2:531
-54:2:532
-55:2:536
-56:2:537
-57:2:545
-58:2:550
-59:2:551
-60:2:562
-61:2:563
-62:2:574
-63:2:575
-64:2:576
-65:2:587
-66:2:592
-67:2:593
-68:0:2112
-69:2:605
-70:0:2112
-71:2:607
-72:0:2112
-73:2:608
-74:0:2112
-75:2:618
-76:0:2112
-77:2:622
-78:2:623
-79:2:627
-80:2:631
-81:2:632
-82:2:636
-83:2:644
-84:2:645
-85:2:650
-86:2:657
-87:2:658
-88:2:665
-89:2:670
-90:0:2112
-91:2:681
-92:0:2112
-93:2:685
-94:2:686
-95:2:690
-96:2:694
-97:2:695
-98:2:699
-99:2:707
-100:2:708
-101:2:713
-102:2:720
-103:2:721
-104:2:728
-105:2:733
-106:0:2112
-107:2:744
-108:0:2112
-109:2:752
-110:2:753
-111:2:757
-112:2:761
-113:2:762
-114:2:766
-115:2:774
-116:2:775
-117:2:780
-118:2:787
-119:2:788
-120:2:795
-121:2:800
-122:0:2112
-123:2:811
-124:0:2112
-125:2:813
-126:0:2112
-127:2:814
-128:2:818
-129:2:819
-130:2:827
-131:2:828
-132:2:832
-133:2:833
-134:2:841
-135:2:846
-136:2:850
-137:2:851
-138:2:858
-139:2:859
-140:2:870
-141:2:871
-142:2:872
-143:2:883
-144:2:888
-145:2:889
-146:0:2112
-147:2:901
-148:0:2112
-149:2:903
-150:0:2112
-151:2:906
-152:2:907
-153:2:919
-154:2:920
-155:2:924
-156:2:925
-157:2:933
-158:2:938
-159:2:942
-160:2:943
-161:2:950
-162:2:951
-163:2:962
-164:2:963
-165:2:964
-166:2:975
-167:2:980
-168:2:981
-169:0:2112
-170:2:993
-171:0:2112
-172:2:995
-173:0:2112
-174:2:996
-175:0:2112
-176:2:997
-177:0:2112
-178:2:998
-179:0:2112
-180:2:999
-181:2:1003
-182:2:1004
-183:2:1012
-184:2:1013
-185:2:1017
-186:2:1018
-187:2:1026
-188:2:1031
-189:2:1035
-190:2:1036
-191:2:1043
-192:2:1044
-193:2:1055
-194:2:1056
-195:2:1057
-196:2:1068
-197:2:1073
-198:2:1074
-199:0:2112
-200:2:1086
-201:0:2112
-202:2:1178
-203:0:2112
-204:2:1276
-205:0:2112
-206:2:1277
-207:0:2112
-208:2:1281
-209:0:2112
-210:2:1287
-211:2:1291
-212:2:1292
-213:2:1300
-214:2:1301
-215:2:1305
-216:2:1306
-217:2:1314
-218:2:1319
-219:2:1323
-220:2:1324
-221:2:1331
-222:2:1332
-223:2:1343
-224:2:1344
-225:2:1345
-226:2:1356
-227:2:1361
-228:2:1362
-229:0:2112
-230:2:1374
-231:0:2112
-232:2:1376
-233:0:2112
-234:2:1377
-235:2:1381
-236:2:1382
-237:2:1390
-238:2:1391
-239:2:1395
-240:2:1396
-241:2:1404
-242:2:1409
-243:2:1413
-244:2:1414
-245:2:1421
-246:2:1422
-247:2:1433
-248:2:1434
-249:2:1435
-250:2:1446
-251:2:1451
-252:2:1452
-253:0:2112
-254:2:1464
-255:0:2112
-256:2:1466
-257:0:2112
-258:1:2
-259:0:2112
-260:1:8
-261:0:2112
-262:1:9
-263:0:2112
-264:1:10
-265:0:2112
-266:1:11
-267:0:2112
-268:1:12
-269:1:16
-270:1:17
-271:1:25
-272:1:26
-273:1:30
-274:1:31
-275:1:39
-276:1:44
-277:1:48
-278:1:49
-279:1:56
-280:1:57
-281:1:68
-282:1:69
-283:1:70
-284:1:81
-285:1:86
-286:1:87
-287:0:2112
-288:1:99
-289:0:2112
-290:1:101
-291:0:2112
-292:1:102
-293:1:106
-294:1:107
-295:1:115
-296:1:116
-297:1:120
-298:1:121
-299:1:129
-300:1:134
-301:1:138
-302:1:139
-303:1:146
-304:1:147
-305:1:158
-306:1:159
-307:1:160
-308:1:171
-309:1:176
-310:1:177
-311:0:2112
-312:1:189
-313:0:2112
-314:1:191
-315:0:2112
-316:1:192
-317:0:2112
-318:1:193
-319:1:197
-320:1:198
-321:1:206
-322:1:207
-323:1:211
-324:1:212
-325:1:220
-326:1:225
-327:1:229
-328:1:230
-329:1:237
-330:1:238
-331:1:249
-332:1:250
-333:1:251
-334:1:262
-335:1:267
-336:1:268
-337:0:2112
-338:1:280
-339:0:2112
-340:1:282
-341:0:2112
-342:1:291
-343:0:2112
-344:1:293
-345:0:2112
-346:1:296
-347:0:2112
-348:1:301
-349:0:2112
-350:1:302
-351:0:2112
-352:1:303
-353:0:2112
-354:1:304
-355:0:2112
-356:1:305
-357:0:2112
-358:1:306
-359:0:2112
-360:1:308
-361:0:2112
-362:1:310
-363:0:2112
-364:1:311
-365:1:315
-366:1:316
-367:1:324
-368:1:325
-369:1:326
-370:1:338
-371:1:343
-372:1:347
-373:1:348
-374:1:355
-375:1:356
-376:1:367
-377:1:368
-378:1:369
-379:1:380
-380:1:385
-381:1:386
-382:0:2112
-383:1:398
-384:0:2112
-385:2:1469
-386:2:1470
-387:2:1482
-388:2:1483
-389:2:1487
-390:2:1488
-391:2:1496
-392:2:1501
-393:2:1505
-394:2:1506
-395:2:1513
-396:2:1514
-397:2:1525
-398:2:1526
-399:2:1527
-400:2:1538
-401:2:1543
-402:2:1544
-403:0:2112
-404:2:1556
-405:0:2112
-406:2:1558
-407:0:2112
-408:2:1559
-409:0:2112
-410:2:1560
-411:0:2112
-412:2:1561
-413:0:2112
-414:2:1562
-415:2:1566
-416:2:1567
-417:2:1575
-418:2:1576
-419:2:1580
-420:2:1581
-421:2:1589
-422:2:1594
-423:2:1598
-424:2:1599
-425:2:1606
-426:2:1607
-427:2:1618
-428:2:1619
-429:2:1620
-430:2:1631
-431:2:1636
-432:2:1637
-433:0:2112
-434:2:1649
-435:0:2112
-436:2:1651
-437:0:2112
-438:2:1652
-439:2:1656
-440:2:1657
-441:2:1665
-442:2:1666
-443:2:1670
-444:2:1671
-445:2:1679
-446:2:1684
-447:2:1688
-448:2:1689
-449:2:1696
-450:2:1697
-451:2:1708
-452:2:1709
-453:2:1710
-454:2:1721
-455:2:1726
-456:2:1727
-457:0:2112
-458:2:1739
-459:0:2112
-460:1:400
-461:0:2112
-462:2:1560
-463:0:2112
-464:1:404
-465:0:2112
-466:1:9
-467:0:2112
-468:1:10
-469:0:2112
-470:1:11
-471:0:2112
-472:2:1561
-473:0:2112
-474:2:1562
-475:2:1566
-476:2:1567
-477:2:1575
-478:2:1576
-479:2:1580
-480:2:1581
-481:2:1589
-482:2:1594
-483:2:1598
-484:2:1599
-485:2:1606
-486:2:1607
-487:2:1618
-488:2:1619
-489:2:1620
-490:2:1631
-491:2:1636
-492:2:1637
-493:0:2112
-494:2:1649
-495:0:2112
-496:2:1651
-497:0:2112
-498:2:1652
-499:2:1656
-500:2:1657
-501:2:1665
-502:2:1666
-503:2:1670
-504:2:1671
-505:2:1679
-506:2:1684
-507:2:1688
-508:2:1689
-509:2:1696
-510:2:1697
-511:2:1708
-512:2:1709
-513:2:1710
-514:2:1721
-515:2:1726
-516:2:1727
-517:0:2112
-518:2:1739
-519:0:2112
-520:2:1560
-521:0:2112
-522:1:12
-523:1:16
-524:1:17
-525:1:25
-526:1:26
-527:1:27
-528:1:39
-529:1:44
-530:1:48
-531:1:49
-532:1:56
-533:1:57
-534:1:68
-535:1:69
-536:1:70
-537:1:81
-538:1:86
-539:1:87
-540:0:2112
-541:1:99
-542:0:2112
-543:2:1561
-544:0:2112
-545:2:1562
-546:2:1566
-547:2:1567
-548:2:1575
-549:2:1576
-550:2:1580
-551:2:1581
-552:2:1589
-553:2:1594
-554:2:1598
-555:2:1599
-556:2:1606
-557:2:1607
-558:2:1618
-559:2:1626
-560:2:1627
-561:2:1631
-562:2:1636
-563:2:1637
-564:0:2112
-565:2:1649
-566:0:2112
-567:2:1651
-568:0:2112
-569:2:1652
-570:2:1656
-571:2:1657
-572:2:1665
-573:2:1666
-574:2:1670
-575:2:1671
-576:2:1679
-577:2:1684
-578:2:1688
-579:2:1689
-580:2:1696
-581:2:1697
-582:2:1708
-583:2:1716
-584:2:1717
-585:2:1721
-586:2:1726
-587:2:1727
-588:0:2112
-589:2:1739
-590:0:2112
-591:2:1560
-592:0:2112
-593:1:101
-594:0:2112
-595:2:1561
-596:0:2112
-597:2:1562
-598:2:1566
-599:2:1567
-600:2:1575
-601:2:1576
-602:2:1580
-603:2:1581
-604:2:1589
-605:2:1594
-606:2:1598
-607:2:1599
-608:2:1606
-609:2:1607
-610:2:1618
-611:2:1626
-612:2:1627
-613:2:1631
-614:2:1636
-615:2:1637
-616:0:2112
-617:2:1649
-618:0:2112
-619:2:1651
-620:0:2112
-621:2:1652
-622:2:1656
-623:2:1657
-624:2:1665
-625:2:1666
-626:2:1670
-627:2:1671
-628:2:1679
-629:2:1684
-630:2:1688
-631:2:1689
-632:2:1696
-633:2:1697
-634:2:1708
-635:2:1716
-636:2:1717
-637:2:1721
-638:2:1726
-639:2:1727
-640:0:2112
-641:2:1739
-642:0:2112
-643:2:1560
-644:0:2112
-645:1:102
-646:1:106
-647:1:107
-648:1:115
-649:1:116
-650:1:120
-651:1:121
-652:1:129
-653:1:134
-654:1:138
-655:1:139
-656:1:146
-657:1:147
-658:1:158
-659:1:159
-660:1:160
-661:1:171
-662:1:176
-663:1:177
-664:0:2112
-665:1:189
-666:0:2112
-667:1:191
-668:0:2112
-669:2:1561
-670:0:2112
-671:2:1562
-672:2:1566
-673:2:1567
-674:2:1575
-675:2:1576
-676:2:1580
-677:2:1581
-678:2:1589
-679:2:1594
-680:2:1598
-681:2:1599
-682:2:1606
-683:2:1607
-684:2:1618
-685:2:1626
-686:2:1627
-687:2:1631
-688:2:1636
-689:2:1637
-690:0:2112
-691:2:1649
-692:0:2112
-693:2:1651
-694:0:2112
-695:2:1652
-696:2:1656
-697:2:1657
-698:2:1665
-699:2:1666
-700:2:1670
-701:2:1671
-702:2:1679
-703:2:1684
-704:2:1688
-705:2:1689
-706:2:1696
-707:2:1697
-708:2:1708
-709:2:1716
-710:2:1717
-711:2:1721
-712:2:1726
-713:2:1727
-714:0:2112
-715:2:1739
-716:0:2112
-717:2:1560
-718:0:2112
-719:1:192
-720:0:2112
-721:2:1561
-722:0:2112
-723:2:1562
-724:2:1566
-725:2:1567
-726:2:1575
-727:2:1576
-728:2:1580
-729:2:1581
-730:2:1589
-731:2:1594
-732:2:1598
-733:2:1599
-734:2:1606
-735:2:1607
-736:2:1618
-737:2:1626
-738:2:1627
-739:2:1631
-740:2:1636
-741:2:1637
-742:0:2112
-743:2:1649
-744:0:2112
-745:2:1651
-746:0:2112
-747:2:1652
-748:2:1656
-749:2:1657
-750:2:1665
-751:2:1666
-752:2:1670
-753:2:1671
-754:2:1679
-755:2:1684
-756:2:1688
-757:2:1689
-758:2:1696
-759:2:1697
-760:2:1708
-761:2:1716
-762:2:1717
-763:2:1721
-764:2:1726
-765:2:1727
-766:0:2112
-767:2:1739
-768:0:2112
-769:2:1560
-770:0:2112
-771:1:193
-772:1:197
-773:1:198
-774:1:206
-775:1:207
-776:1:211
-777:1:212
-778:1:220
-779:1:225
-780:1:229
-781:1:230
-782:1:237
-783:1:238
-784:1:249
-785:1:250
-786:1:251
-787:1:262
-788:1:267
-789:1:268
-790:0:2112
-791:1:280
-792:0:2112
-793:2:1561
-794:0:2112
-795:2:1562
-796:2:1566
-797:2:1567
-798:2:1575
-799:2:1576
-800:2:1580
-801:2:1581
-802:2:1589
-803:2:1594
-804:2:1598
-805:2:1599
-806:2:1606
-807:2:1607
-808:2:1618
-809:2:1626
-810:2:1627
-811:2:1631
-812:2:1636
-813:2:1637
-814:0:2112
-815:2:1649
-816:0:2112
-817:2:1651
-818:0:2112
-819:2:1652
-820:2:1656
-821:2:1657
-822:2:1665
-823:2:1666
-824:2:1670
-825:2:1671
-826:2:1679
-827:2:1684
-828:2:1688
-829:2:1689
-830:2:1696
-831:2:1697
-832:2:1708
-833:2:1716
-834:2:1717
-835:2:1721
-836:2:1726
-837:2:1727
-838:0:2112
-839:2:1739
-840:0:2112
-841:2:1560
-842:0:2112
-843:1:282
-844:0:2112
-845:1:291
-846:0:2112
-847:1:293
-848:0:2112
-849:1:296
-850:0:2112
-851:2:1561
-852:0:2112
-853:2:1562
-854:2:1566
-855:2:1567
-856:2:1575
-857:2:1576
-858:2:1580
-859:2:1581
-860:2:1589
-861:2:1594
-862:2:1598
-863:2:1599
-864:2:1606
-865:2:1607
-866:2:1618
-867:2:1626
-868:2:1627
-869:2:1631
-870:2:1636
-871:2:1637
-872:0:2112
-873:2:1649
-874:0:2112
-875:2:1651
-876:0:2112
-877:2:1652
-878:2:1656
-879:2:1657
-880:2:1665
-881:2:1666
-882:2:1670
-883:2:1671
-884:2:1679
-885:2:1684
-886:2:1688
-887:2:1689
-888:2:1696
-889:2:1697
-890:2:1708
-891:2:1716
-892:2:1717
-893:2:1721
-894:2:1726
-895:2:1727
-896:0:2112
-897:2:1739
-898:0:2112
-899:2:1560
-900:0:2112
-901:1:301
-902:0:2112
-903:2:1561
-904:0:2112
-905:2:1562
-906:2:1566
-907:2:1567
-908:2:1575
-909:2:1576
-910:2:1580
-911:2:1581
-912:2:1589
-913:2:1594
-914:2:1598
-915:2:1599
-916:2:1606
-917:2:1607
-918:2:1618
-919:2:1626
-920:2:1627
-921:2:1631
-922:2:1636
-923:2:1637
-924:0:2112
-925:2:1649
-926:0:2112
-927:2:1651
-928:0:2112
-929:2:1652
-930:2:1656
-931:2:1657
-932:2:1665
-933:2:1666
-934:2:1670
-935:2:1671
-936:2:1679
-937:2:1684
-938:2:1688
-939:2:1689
-940:2:1696
-941:2:1697
-942:2:1708
-943:2:1716
-944:2:1717
-945:2:1721
-946:2:1726
-947:2:1727
-948:0:2112
-949:2:1739
-950:0:2112
-951:2:1560
-952:0:2112
-953:1:302
-954:0:2112
-955:2:1561
-956:0:2112
-957:2:1562
-958:2:1566
-959:2:1567
-960:2:1575
-961:2:1576
-962:2:1580
-963:2:1581
-964:2:1589
-965:2:1594
-966:2:1598
-967:2:1599
-968:2:1606
-969:2:1607
-970:2:1618
-971:2:1626
-972:2:1627
-973:2:1631
-974:2:1636
-975:2:1637
-976:0:2112
-977:2:1649
-978:0:2112
-979:2:1651
-980:0:2112
-981:2:1652
-982:2:1656
-983:2:1657
-984:2:1665
-985:2:1666
-986:2:1670
-987:2:1671
-988:2:1679
-989:2:1684
-990:2:1688
-991:2:1689
-992:2:1696
-993:2:1697
-994:2:1708
-995:2:1716
-996:2:1717
-997:2:1721
-998:2:1726
-999:2:1727
-1000:0:2112
-1001:2:1739
-1002:0:2112
-1003:2:1560
-1004:0:2112
-1005:1:303
-1006:0:2112
-1007:1:304
-1008:0:2112
-1009:1:305
-1010:0:2112
-1011:1:306
-1012:0:2112
-1013:1:308
-1014:0:2112
-1015:2:1561
-1016:0:2112
-1017:2:1562
-1018:2:1566
-1019:2:1567
-1020:2:1575
-1021:2:1576
-1022:2:1580
-1023:2:1581
-1024:2:1589
-1025:2:1594
-1026:2:1598
-1027:2:1599
-1028:2:1606
-1029:2:1607
-1030:2:1618
-1031:2:1626
-1032:2:1627
-1033:2:1631
-1034:2:1636
-1035:2:1637
-1036:0:2112
-1037:2:1649
-1038:0:2112
-1039:2:1651
-1040:0:2112
-1041:2:1652
-1042:2:1656
-1043:2:1657
-1044:2:1665
-1045:2:1666
-1046:2:1670
-1047:2:1671
-1048:2:1679
-1049:2:1684
-1050:2:1688
-1051:2:1689
-1052:2:1696
-1053:2:1697
-1054:2:1708
-1055:2:1716
-1056:2:1717
-1057:2:1721
-1058:2:1726
-1059:2:1727
-1060:0:2112
-1061:2:1739
-1062:0:2112
-1063:2:1560
-1064:0:2112
-1065:1:310
-1066:0:2112
-1067:2:1561
-1068:0:2112
-1069:2:1562
-1070:2:1566
-1071:2:1567
-1072:2:1575
-1073:2:1576
-1074:2:1580
-1075:2:1581
-1076:2:1589
-1077:2:1594
-1078:2:1598
-1079:2:1599
-1080:2:1606
-1081:2:1607
-1082:2:1618
-1083:2:1626
-1084:2:1627
-1085:2:1631
-1086:2:1636
-1087:2:1637
-1088:0:2112
-1089:2:1649
-1090:0:2112
-1091:2:1651
-1092:0:2112
-1093:2:1652
-1094:2:1656
-1095:2:1657
-1096:2:1665
-1097:2:1666
-1098:2:1670
-1099:2:1671
-1100:2:1679
-1101:2:1684
-1102:2:1688
-1103:2:1689
-1104:2:1696
-1105:2:1697
-1106:2:1708
-1107:2:1716
-1108:2:1717
-1109:2:1721
-1110:2:1726
-1111:2:1727
-1112:0:2112
-1113:2:1739
-1114:0:2112
-1115:2:1560
-1116:0:2112
-1117:1:311
-1118:1:315
-1119:1:316
-1120:1:324
-1121:1:325
-1122:1:326
-1123:1:338
-1124:1:343
-1125:1:347
-1126:1:348
-1127:1:355
-1128:1:356
-1129:1:367
-1130:1:368
-1131:1:369
-1132:1:380
-1133:1:385
-1134:1:386
-1135:0:2112
-1136:1:398
-1137:0:2112
-1138:2:1561
-1139:0:2112
-1140:2:1562
-1141:2:1566
-1142:2:1567
-1143:2:1575
-1144:2:1576
-1145:2:1580
-1146:2:1581
-1147:2:1589
-1148:2:1594
-1149:2:1598
-1150:2:1599
-1151:2:1606
-1152:2:1607
-1153:2:1618
-1154:2:1626
-1155:2:1627
-1156:2:1631
-1157:2:1636
-1158:2:1637
-1159:0:2112
-1160:2:1649
-1161:0:2112
-1162:2:1651
-1163:0:2112
-1164:2:1652
-1165:2:1656
-1166:2:1657
-1167:2:1665
-1168:2:1666
-1169:2:1670
-1170:2:1671
-1171:2:1679
-1172:2:1684
-1173:2:1688
-1174:2:1689
-1175:2:1696
-1176:2:1697
-1177:2:1708
-1178:2:1716
-1179:2:1717
-1180:2:1721
-1181:2:1726
-1182:2:1727
-1183:0:2112
-1184:2:1739
-1185:0:2112
-1186:2:1560
-1187:0:2112
-1188:1:400
-1189:0:2112
-1190:1:404
-1191:0:2112
-1192:1:9
-1193:0:2112
-1194:1:10
-1195:0:2112
-1196:1:11
-1197:0:2112
-1198:2:1561
-1199:0:2112
-1200:2:1562
-1201:2:1566
-1202:2:1567
-1203:2:1575
-1204:2:1576
-1205:2:1580
-1206:2:1581
-1207:2:1589
-1208:2:1594
-1209:2:1598
-1210:2:1599
-1211:2:1606
-1212:2:1607
-1213:2:1618
-1214:2:1626
-1215:2:1627
-1216:2:1631
-1217:2:1636
-1218:2:1637
-1219:0:2112
-1220:2:1649
-1221:0:2112
-1222:2:1651
-1223:0:2112
-1224:2:1652
-1225:2:1656
-1226:2:1657
-1227:2:1665
-1228:2:1666
-1229:2:1670
-1230:2:1671
-1231:2:1679
-1232:2:1684
-1233:2:1688
-1234:2:1689
-1235:2:1696
-1236:2:1697
-1237:2:1708
-1238:2:1716
-1239:2:1717
-1240:2:1721
-1241:2:1726
-1242:2:1727
-1243:0:2112
-1244:2:1739
-1245:0:2112
-1246:2:1560
-1247:0:2112
-1248:1:12
-1249:1:16
-1250:1:17
-1251:1:25
-1252:1:26
-1253:1:27
-1254:1:39
-1255:1:44
-1256:1:48
-1257:1:49
-1258:1:56
-1259:1:57
-1260:1:68
-1261:1:69
-1262:1:70
-1263:1:81
-1264:1:86
-1265:1:87
-1266:0:2112
-1267:1:99
-1268:0:2112
-1269:2:1561
-1270:0:2112
-1271:2:1562
-1272:2:1566
-1273:2:1567
-1274:2:1575
-1275:2:1576
-1276:2:1580
-1277:2:1581
-1278:2:1589
-1279:2:1594
-1280:2:1598
-1281:2:1599
-1282:2:1606
-1283:2:1607
-1284:2:1618
-1285:2:1626
-1286:2:1627
-1287:2:1631
-1288:2:1636
-1289:2:1637
-1290:0:2112
-1291:2:1649
-1292:0:2112
-1293:2:1651
-1294:0:2112
-1295:2:1652
-1296:2:1656
-1297:2:1657
-1298:2:1665
-1299:2:1666
-1300:2:1670
-1301:2:1671
-1302:2:1679
-1303:2:1684
-1304:2:1688
-1305:2:1689
-1306:2:1696
-1307:2:1697
-1308:2:1708
-1309:2:1716
-1310:2:1717
-1311:2:1721
-1312:2:1726
-1313:2:1727
-1314:0:2112
-1315:2:1739
-1316:0:2112
-1317:2:1560
-1318:0:2112
-1319:1:101
-1320:0:2112
-1321:2:1561
-1322:0:2112
-1323:2:1562
-1324:2:1566
-1325:2:1567
-1326:2:1575
-1327:2:1576
-1328:2:1580
-1329:2:1581
-1330:2:1589
-1331:2:1594
-1332:2:1598
-1333:2:1599
-1334:2:1606
-1335:2:1607
-1336:2:1618
-1337:2:1626
-1338:2:1627
-1339:2:1631
-1340:2:1636
-1341:2:1637
-1342:0:2112
-1343:2:1649
-1344:0:2112
-1345:2:1651
-1346:0:2112
-1347:2:1652
-1348:2:1656
-1349:2:1657
-1350:2:1665
-1351:2:1666
-1352:2:1670
-1353:2:1671
-1354:2:1679
-1355:2:1684
-1356:2:1688
-1357:2:1689
-1358:2:1696
-1359:2:1697
-1360:2:1708
-1361:2:1716
-1362:2:1717
-1363:2:1721
-1364:2:1726
-1365:2:1727
-1366:0:2112
-1367:2:1739
-1368:0:2112
-1369:2:1560
-1370:0:2112
-1371:1:102
-1372:1:106
-1373:1:107
-1374:1:115
-1375:1:116
-1376:1:120
-1377:1:121
-1378:1:129
-1379:1:134
-1380:1:138
-1381:1:139
-1382:1:146
-1383:1:147
-1384:1:158
-1385:1:159
-1386:1:160
-1387:1:171
-1388:1:176
-1389:1:177
-1390:0:2112
-1391:1:189
-1392:0:2112
-1393:1:191
-1394:0:2112
-1395:2:1561
-1396:0:2112
-1397:2:1562
-1398:2:1566
-1399:2:1567
-1400:2:1575
-1401:2:1576
-1402:2:1580
-1403:2:1581
-1404:2:1589
-1405:2:1594
-1406:2:1598
-1407:2:1599
-1408:2:1606
-1409:2:1607
-1410:2:1618
-1411:2:1626
-1412:2:1627
-1413:2:1631
-1414:2:1636
-1415:2:1637
-1416:0:2112
-1417:2:1649
-1418:0:2112
-1419:2:1651
-1420:0:2112
-1421:2:1652
-1422:2:1656
-1423:2:1657
-1424:2:1665
-1425:2:1666
-1426:2:1670
-1427:2:1671
-1428:2:1679
-1429:2:1684
-1430:2:1688
-1431:2:1689
-1432:2:1696
-1433:2:1697
-1434:2:1708
-1435:2:1716
-1436:2:1717
-1437:2:1721
-1438:2:1726
-1439:2:1727
-1440:0:2112
-1441:2:1739
-1442:0:2112
-1443:2:1560
-1444:0:2112
-1445:1:192
-1446:0:2112
-1447:2:1561
-1448:0:2112
-1449:2:1562
-1450:2:1566
-1451:2:1567
-1452:2:1575
-1453:2:1576
-1454:2:1580
-1455:2:1581
-1456:2:1589
-1457:2:1594
-1458:2:1598
-1459:2:1599
-1460:2:1606
-1461:2:1607
-1462:2:1618
-1463:2:1626
-1464:2:1627
-1465:2:1631
-1466:2:1636
-1467:2:1637
-1468:0:2112
-1469:2:1649
-1470:0:2112
-1471:2:1651
-1472:0:2112
-1473:2:1652
-1474:2:1656
-1475:2:1657
-1476:2:1665
-1477:2:1666
-1478:2:1670
-1479:2:1671
-1480:2:1679
-1481:2:1684
-1482:2:1688
-1483:2:1689
-1484:2:1696
-1485:2:1697
-1486:2:1708
-1487:2:1716
-1488:2:1717
-1489:2:1721
-1490:2:1726
-1491:2:1727
-1492:0:2112
-1493:2:1739
-1494:0:2112
-1495:2:1560
-1496:0:2112
-1497:1:193
-1498:1:197
-1499:1:198
-1500:1:206
-1501:1:207
-1502:1:211
-1503:1:212
-1504:1:220
-1505:1:225
-1506:1:229
-1507:1:230
-1508:1:237
-1509:1:238
-1510:1:249
-1511:1:250
-1512:1:251
-1513:1:262
-1514:1:267
-1515:1:268
-1516:0:2112
-1517:1:280
-1518:0:2112
-1519:2:1561
-1520:0:2112
-1521:2:1562
-1522:2:1566
-1523:2:1567
-1524:2:1575
-1525:2:1576
-1526:2:1580
-1527:2:1581
-1528:2:1589
-1529:2:1594
-1530:2:1598
-1531:2:1599
-1532:2:1606
-1533:2:1607
-1534:2:1618
-1535:2:1626
-1536:2:1627
-1537:2:1631
-1538:2:1636
-1539:2:1637
-1540:0:2112
-1541:2:1649
-1542:0:2112
-1543:2:1651
-1544:0:2112
-1545:2:1652
-1546:2:1656
-1547:2:1657
-1548:2:1665
-1549:2:1666
-1550:2:1670
-1551:2:1671
-1552:2:1679
-1553:2:1684
-1554:2:1688
-1555:2:1689
-1556:2:1696
-1557:2:1697
-1558:2:1708
-1559:2:1716
-1560:2:1717
-1561:2:1721
-1562:2:1726
-1563:2:1727
-1564:0:2112
-1565:2:1739
-1566:0:2112
-1567:2:1560
-1568:0:2112
-1569:1:282
-1570:0:2112
-1571:1:291
-1572:0:2112
-1573:1:293
-1574:0:2112
-1575:1:296
-1576:0:2112
-1577:2:1561
-1578:0:2112
-1579:2:1562
-1580:2:1566
-1581:2:1567
-1582:2:1575
-1583:2:1576
-1584:2:1580
-1585:2:1581
-1586:2:1589
-1587:2:1594
-1588:2:1598
-1589:2:1599
-1590:2:1606
-1591:2:1607
-1592:2:1618
-1593:2:1626
-1594:2:1627
-1595:2:1631
-1596:2:1636
-1597:2:1637
-1598:0:2112
-1599:2:1649
-1600:0:2112
-1601:2:1651
-1602:0:2112
-1603:2:1652
-1604:2:1656
-1605:2:1657
-1606:2:1665
-1607:2:1666
-1608:2:1670
-1609:2:1671
-1610:2:1679
-1611:2:1684
-1612:2:1688
-1613:2:1689
-1614:2:1696
-1615:2:1697
-1616:2:1708
-1617:2:1716
-1618:2:1717
-1619:2:1721
-1620:2:1726
-1621:2:1727
-1622:0:2112
-1623:2:1739
-1624:0:2112
-1625:2:1560
-1626:0:2112
-1627:1:301
-1628:0:2112
-1629:2:1561
-1630:0:2112
-1631:2:1562
-1632:2:1566
-1633:2:1567
-1634:2:1575
-1635:2:1576
-1636:2:1580
-1637:2:1581
-1638:2:1589
-1639:2:1594
-1640:2:1598
-1641:2:1599
-1642:2:1606
-1643:2:1607
-1644:2:1618
-1645:2:1626
-1646:2:1627
-1647:2:1631
-1648:2:1636
-1649:2:1637
-1650:0:2112
-1651:2:1649
--1:-1:-1
-1652:0:2112
-1653:2:1651
-1654:0:2112
-1655:2:1652
-1656:2:1656
-1657:2:1657
-1658:2:1665
-1659:2:1666
-1660:2:1670
-1661:2:1671
-1662:2:1679
-1663:2:1684
-1664:2:1688
-1665:2:1689
-1666:2:1696
-1667:2:1697
-1668:2:1708
-1669:2:1716
-1670:2:1717
-1671:2:1721
-1672:2:1726
-1673:2:1727
-1674:0:2112
-1675:2:1739
-1676:0:2112
-1677:2:1560
-1678:0:2112
-1679:1:302
-1680:0:2112
-1681:2:1561
-1682:0:2112
-1683:2:1562
-1684:2:1566
-1685:2:1567
-1686:2:1575
-1687:2:1576
-1688:2:1580
-1689:2:1581
-1690:2:1589
-1691:2:1594
-1692:2:1598
-1693:2:1599
-1694:2:1606
-1695:2:1607
-1696:2:1618
-1697:2:1626
-1698:2:1627
-1699:2:1631
-1700:2:1636
-1701:2:1637
-1702:0:2112
-1703:2:1649
-1704:0:2112
-1705:2:1651
-1706:0:2112
-1707:2:1652
-1708:2:1656
-1709:2:1657
-1710:2:1665
-1711:2:1666
-1712:2:1670
-1713:2:1671
-1714:2:1679
-1715:2:1684
-1716:2:1688
-1717:2:1689
-1718:2:1696
-1719:2:1697
-1720:2:1708
-1721:2:1716
-1722:2:1717
-1723:2:1721
-1724:2:1726
-1725:2:1727
-1726:0:2112
-1727:2:1739
-1728:0:2112
-1729:2:1560
-1730:0:2112
-1731:1:303
-1732:0:2112
-1733:1:304
-1734:0:2112
-1735:1:305
-1736:0:2112
-1737:1:306
-1738:0:2112
-1739:1:308
-1740:0:2112
-1741:2:1561
-1742:0:2112
-1743:2:1562
-1744:2:1566
-1745:2:1567
-1746:2:1575
-1747:2:1576
-1748:2:1580
-1749:2:1581
-1750:2:1589
-1751:2:1594
-1752:2:1598
-1753:2:1599
-1754:2:1606
-1755:2:1607
-1756:2:1618
-1757:2:1626
-1758:2:1627
-1759:2:1631
-1760:2:1636
-1761:2:1637
-1762:0:2112
-1763:2:1649
-1764:0:2112
-1765:2:1651
-1766:0:2112
-1767:2:1652
-1768:2:1656
-1769:2:1657
-1770:2:1665
-1771:2:1666
-1772:2:1670
-1773:2:1671
-1774:2:1679
-1775:2:1684
-1776:2:1688
-1777:2:1689
-1778:2:1696
-1779:2:1697
-1780:2:1708
-1781:2:1716
-1782:2:1717
-1783:2:1721
-1784:2:1726
-1785:2:1727
-1786:0:2112
-1787:2:1739
-1788:0:2112
-1789:2:1560
-1790:0:2112
-1791:1:310
-1792:0:2112
-1793:2:1561
-1794:0:2112
-1795:2:1562
-1796:2:1566
-1797:2:1567
-1798:2:1575
-1799:2:1576
-1800:2:1580
-1801:2:1581
-1802:2:1589
-1803:2:1594
-1804:2:1598
-1805:2:1599
-1806:2:1606
-1807:2:1607
-1808:2:1618
-1809:2:1626
-1810:2:1627
-1811:2:1631
-1812:2:1636
-1813:2:1637
-1814:0:2112
-1815:2:1649
-1816:0:2112
-1817:2:1651
-1818:0:2112
-1819:2:1652
-1820:2:1656
-1821:2:1657
-1822:2:1665
-1823:2:1666
-1824:2:1670
-1825:2:1671
-1826:2:1679
-1827:2:1684
-1828:2:1688
-1829:2:1689
-1830:2:1696
-1831:2:1697
-1832:2:1708
-1833:2:1716
-1834:2:1717
-1835:2:1721
-1836:2:1726
-1837:2:1727
-1838:0:2112
-1839:2:1739
-1840:0:2112
-1841:2:1560
-1842:0:2112
-1843:1:311
-1844:1:315
-1845:1:316
-1846:1:324
-1847:1:333
-1848:1:334
-1849:1:338
-1850:1:343
-1851:1:347
-1852:1:348
-1853:1:355
-1854:1:356
-1855:1:367
-1856:1:368
-1857:1:371
-1858:1:372
-1859:1:380
-1860:1:385
-1861:1:386
-1862:0:2112
-1863:1:398
-1864:0:2112
-1865:2:1561
-1866:0:2112
-1867:2:1562
-1868:2:1566
-1869:2:1567
-1870:2:1575
-1871:2:1576
-1872:2:1580
-1873:2:1581
-1874:2:1589
-1875:2:1594
-1876:2:1598
-1877:2:1599
-1878:2:1606
-1879:2:1607
-1880:2:1618
-1881:2:1626
-1882:2:1627
-1883:2:1631
-1884:2:1636
-1885:2:1637
-1886:0:2112
-1887:2:1649
-1888:0:2112
-1889:2:1651
-1890:0:2112
-1891:2:1652
-1892:2:1656
-1893:2:1657
-1894:2:1665
-1895:2:1666
-1896:2:1670
-1897:2:1671
-1898:2:1679
-1899:2:1684
-1900:2:1688
-1901:2:1689
-1902:2:1696
-1903:2:1697
-1904:2:1708
-1905:2:1716
-1906:2:1717
-1907:2:1721
-1908:2:1726
-1909:2:1727
-1910:0:2112
-1911:2:1739
-1912:0:2112
-1913:2:1560
-1914:0:2112
-1915:1:400
-1916:0:2112
-1917:1:404
-1918:0:2112
-1919:1:9
-1920:0:2112
-1921:1:10
-1922:0:2112
-1923:1:11
-1924:0:2112
-1925:2:1561
-1926:0:2112
-1927:2:1562
-1928:2:1566
-1929:2:1567
-1930:2:1575
-1931:2:1576
-1932:2:1580
-1933:2:1581
-1934:2:1589
-1935:2:1594
-1936:2:1598
-1937:2:1599
-1938:2:1606
-1939:2:1607
-1940:2:1618
-1941:2:1626
-1942:2:1627
-1943:2:1631
-1944:2:1636
-1945:2:1637
-1946:0:2112
-1947:2:1649
-1948:0:2112
-1949:2:1651
-1950:0:2112
-1951:2:1652
-1952:2:1656
-1953:2:1657
-1954:2:1665
-1955:2:1666
-1956:2:1670
-1957:2:1671
-1958:2:1679
-1959:2:1684
-1960:2:1688
-1961:2:1689
-1962:2:1696
-1963:2:1697
-1964:2:1708
-1965:2:1716
-1966:2:1717
-1967:2:1721
-1968:2:1726
-1969:2:1727
-1970:0:2112
-1971:2:1739
-1972:0:2112
-1973:2:1560
-1974:0:2112
-1975:1:12
-1976:1:16
-1977:1:17
-1978:1:25
-1979:1:34
-1980:1:35
-1981:1:39
-1982:1:44
-1983:1:48
-1984:1:49
-1985:1:56
-1986:1:57
-1987:1:68
-1988:1:69
-1989:1:72
-1990:1:73
-1991:1:81
-1992:1:86
-1993:1:87
-1994:0:2112
-1995:1:99
-1996:0:2112
-1997:2:1561
-1998:0:2112
-1999:2:1562
-2000:2:1566
-2001:2:1567
-2002:2:1575
-2003:2:1576
-2004:2:1580
-2005:2:1581
-2006:2:1589
-2007:2:1594
-2008:2:1598
-2009:2:1599
-2010:2:1606
-2011:2:1607
-2012:2:1618
-2013:2:1626
-2014:2:1627
-2015:2:1631
-2016:2:1636
-2017:2:1637
-2018:0:2112
-2019:2:1649
-2020:0:2112
-2021:2:1651
-2022:0:2112
-2023:2:1652
-2024:2:1656
-2025:2:1657
-2026:2:1665
-2027:2:1666
-2028:2:1670
-2029:2:1671
-2030:2:1679
-2031:2:1684
-2032:2:1688
-2033:2:1689
-2034:2:1696
-2035:2:1697
-2036:2:1708
-2037:2:1716
-2038:2:1717
-2039:2:1721
-2040:2:1726
-2041:2:1727
-2042:0:2112
-2043:2:1739
-2044:0:2112
-2045:2:1560
-2046:0:2112
-2047:1:101
-2048:0:2112
-2049:2:1561
-2050:0:2112
-2051:2:1562
-2052:2:1566
-2053:2:1567
-2054:2:1575
-2055:2:1576
-2056:2:1580
-2057:2:1581
-2058:2:1589
-2059:2:1594
-2060:2:1598
-2061:2:1599
-2062:2:1606
-2063:2:1607
-2064:2:1618
-2065:2:1626
-2066:2:1627
-2067:2:1631
-2068:2:1636
-2069:2:1637
-2070:0:2112
-2071:2:1649
-2072:0:2112
-2073:2:1651
-2074:0:2112
-2075:2:1652
-2076:2:1656
-2077:2:1657
-2078:2:1665
-2079:2:1666
-2080:2:1670
-2081:2:1671
-2082:2:1679
-2083:2:1684
-2084:2:1688
-2085:2:1689
-2086:2:1696
-2087:2:1697
-2088:2:1708
-2089:2:1716
-2090:2:1717
-2091:2:1721
-2092:2:1726
-2093:2:1727
-2094:0:2112
-2095:2:1739
-2096:0:2112
-2097:2:1560
-2098:0:2112
-2099:1:102
-2100:1:106
-2101:1:107
-2102:1:115
-2103:1:124
-2104:1:125
-2105:1:129
-2106:1:134
-2107:1:138
-2108:1:139
-2109:1:146
-2110:1:147
-2111:1:158
-2112:1:159
-2113:1:162
-2114:1:163
-2115:1:171
-2116:1:176
-2117:1:177
-2118:0:2112
-2119:1:189
-2120:0:2112
-2121:1:191
-2122:0:2112
-2123:2:1561
-2124:0:2112
-2125:2:1562
-2126:2:1566
-2127:2:1567
-2128:2:1575
-2129:2:1576
-2130:2:1580
-2131:2:1581
-2132:2:1589
-2133:2:1594
-2134:2:1598
-2135:2:1599
-2136:2:1606
-2137:2:1607
-2138:2:1618
-2139:2:1626
-2140:2:1627
-2141:2:1631
-2142:2:1636
-2143:2:1637
-2144:0:2112
-2145:2:1649
-2146:0:2112
-2147:2:1651
-2148:0:2112
-2149:2:1652
-2150:2:1656
-2151:2:1657
-2152:2:1665
-2153:2:1666
-2154:2:1670
-2155:2:1671
-2156:2:1679
-2157:2:1684
-2158:2:1688
-2159:2:1689
-2160:2:1696
-2161:2:1697
-2162:2:1708
-2163:2:1716
-2164:2:1717
-2165:2:1721
-2166:2:1726
-2167:2:1727
-2168:0:2112
-2169:2:1739
-2170:0:2112
-2171:2:1560
-2172:0:2112
-2173:1:192
-2174:0:2112
-2175:2:1561
-2176:0:2112
-2177:2:1562
-2178:2:1566
-2179:2:1567
-2180:2:1575
-2181:2:1576
-2182:2:1580
-2183:2:1581
-2184:2:1589
-2185:2:1594
-2186:2:1598
-2187:2:1599
-2188:2:1606
-2189:2:1607
-2190:2:1618
-2191:2:1626
-2192:2:1627
-2193:2:1631
-2194:2:1636
-2195:2:1637
-2196:0:2112
-2197:2:1649
-2198:0:2112
-2199:2:1651
-2200:0:2112
-2201:2:1652
-2202:2:1656
-2203:2:1657
-2204:2:1665
-2205:2:1666
-2206:2:1670
-2207:2:1671
-2208:2:1679
-2209:2:1684
-2210:2:1688
-2211:2:1689
-2212:2:1696
-2213:2:1697
-2214:2:1708
-2215:2:1716
-2216:2:1717
-2217:2:1721
-2218:2:1726
-2219:2:1727
-2220:0:2112
-2221:2:1739
-2222:0:2112
-2223:2:1560
-2224:0:2112
-2225:1:193
-2226:1:197
-2227:1:198
-2228:1:206
-2229:1:215
-2230:1:216
-2231:1:220
-2232:1:225
-2233:1:229
-2234:1:230
-2235:1:237
-2236:1:238
-2237:1:249
-2238:1:250
-2239:1:253
-2240:1:254
-2241:1:262
-2242:1:267
-2243:1:268
-2244:0:2112
-2245:1:280
-2246:0:2112
-2247:2:1561
-2248:0:2112
-2249:2:1562
-2250:2:1566
-2251:2:1567
-2252:2:1575
-2253:2:1576
-2254:2:1580
-2255:2:1581
-2256:2:1589
-2257:2:1594
-2258:2:1598
-2259:2:1599
-2260:2:1606
-2261:2:1607
-2262:2:1618
-2263:2:1626
-2264:2:1627
-2265:2:1631
-2266:2:1636
-2267:2:1637
-2268:0:2112
-2269:2:1649
-2270:0:2112
-2271:2:1651
-2272:0:2112
-2273:1:282
-2274:0:2112
-2275:1:291
-2276:0:2112
-2277:1:293
-2278:0:2112
-2279:1:296
-2280:0:2112
-2281:1:301
-2282:0:2112
-2283:1:302
-2284:0:2112
-2285:1:303
-2286:0:2112
-2287:1:304
-2288:0:2112
-2289:1:305
-2290:0:2112
-2291:1:306
-2292:0:2112
-2293:1:308
-2294:0:2112
-2295:1:310
-2296:0:2112
-2297:1:311
-2298:1:315
-2299:1:316
-2300:1:324
-2301:1:325
-2302:1:326
-2303:1:338
-2304:1:343
-2305:1:347
-2306:1:348
-2307:1:355
-2308:1:356
-2309:1:367
-2310:1:368
-2311:1:369
-2312:1:380
-2313:1:385
-2314:1:386
-2315:0:2112
-2316:1:398
-2317:0:2112
-2318:1:400
-2319:0:2112
-2320:1:404
-2321:0:2112
-2322:1:9
-2323:0:2112
-2324:1:10
-2325:0:2112
-2326:1:11
-2327:0:2112
-2328:1:12
-2329:1:16
-2330:1:17
-2331:1:25
-2332:1:26
-2333:1:27
-2334:1:39
-2335:1:44
-2336:1:48
-2337:1:49
-2338:1:56
-2339:1:57
-2340:1:68
-2341:1:69
-2342:1:70
-2343:1:81
-2344:1:86
-2345:1:87
-2346:0:2112
-2347:1:99
-2348:0:2112
-2349:1:101
-2350:0:2112
-2351:1:102
-2352:1:106
-2353:1:107
-2354:1:115
-2355:1:116
-2356:1:120
-2357:1:121
-2358:1:129
-2359:1:134
-2360:1:138
-2361:1:139
-2362:1:146
-2363:1:147
-2364:1:158
-2365:1:159
-2366:1:160
-2367:1:171
-2368:1:176
-2369:1:177
-2370:0:2112
-2371:1:189
-2372:0:2112
-2373:1:191
-2374:0:2112
-2375:1:192
-2376:0:2112
-2377:1:193
-2378:1:197
-2379:1:198
-2380:1:206
-2381:1:207
-2382:1:211
-2383:1:212
-2384:1:220
-2385:1:225
-2386:1:229
-2387:1:230
-2388:1:237
-2389:1:238
-2390:1:249
-2391:1:250
-2392:1:251
-2393:1:262
-2394:1:267
-2395:1:268
-2396:0:2112
-2397:1:280
-2398:0:2112
-2399:1:282
-2400:0:2112
-2401:2:1652
-2402:2:1656
-2403:2:1657
-2404:2:1665
-2405:2:1666
-2406:2:1670
-2407:2:1671
-2408:2:1679
-2409:2:1684
-2410:2:1688
-2411:2:1689
-2412:2:1696
-2413:2:1697
-2414:2:1708
-2415:2:1716
-2416:2:1717
-2417:2:1721
-2418:2:1726
-2419:2:1727
-2420:0:2112
-2421:2:1739
-2422:0:2112
-2423:2:1560
-2424:0:2112
-2425:1:291
-2426:0:2112
-2427:2:1561
-2428:0:2112
-2429:1:293
-2430:0:2112
-2431:1:296
-2432:0:2112
-2433:1:301
-2434:0:2112
-2435:1:302
-2436:0:2112
-2437:1:303
-2438:0:2112
-2439:1:304
-2440:0:2112
-2441:1:305
-2442:0:2112
-2443:1:306
-2444:0:2112
-2445:1:308
-2446:0:2112
-2447:1:310
-2448:0:2112
-2449:1:311
-2450:1:315
-2451:1:316
-2452:1:324
-2453:1:325
-2454:1:326
-2455:1:338
-2456:1:343
-2457:1:347
-2458:1:348
-2459:1:355
-2460:1:356
-2461:1:367
-2462:1:368
-2463:1:369
-2464:1:380
-2465:1:385
-2466:1:386
-2467:0:2112
-2468:1:398
-2469:0:2112
-2470:1:400
-2471:0:2112
-2472:1:404
-2473:0:2112
-2474:1:9
-2475:0:2112
-2476:1:10
-2477:0:2112
-2478:1:11
-2479:0:2112
-2480:1:12
-2481:1:16
-2482:1:17
-2483:1:25
-2484:1:26
-2485:1:27
-2486:1:39
-2487:1:44
-2488:1:48
-2489:1:49
-2490:1:56
-2491:1:57
-2492:1:68
-2493:1:69
-2494:1:70
-2495:1:81
-2496:1:86
-2497:1:87
-2498:0:2112
-2499:1:99
-2500:0:2112
-2501:1:101
-2502:0:2112
-2503:1:102
-2504:1:106
-2505:1:107
-2506:1:115
-2507:1:116
-2508:1:120
-2509:1:121
-2510:1:129
-2511:1:134
-2512:1:138
-2513:1:139
-2514:1:146
-2515:1:147
-2516:1:158
-2517:1:159
-2518:1:160
-2519:1:171
-2520:1:176
-2521:1:177
-2522:0:2112
-2523:1:189
-2524:0:2112
-2525:1:191
-2526:0:2112
-2527:1:192
-2528:0:2112
-2529:1:193
-2530:1:197
-2531:1:198
-2532:1:206
-2533:1:207
-2534:1:211
-2535:1:212
-2536:1:220
-2537:1:225
-2538:1:229
-2539:1:230
-2540:1:237
-2541:1:238
-2542:1:249
-2543:1:250
-2544:1:251
-2545:1:262
-2546:1:267
-2547:1:268
-2548:0:2112
-2549:1:280
-2550:0:2112
-2551:1:282
-2552:0:2112
-2553:1:291
-2554:0:2112
-2555:1:293
-2556:0:2112
-2557:2:1562
-2558:2:1566
-2559:2:1567
-2560:2:1575
-2561:2:1576
-2562:2:1580
-2563:2:1581
-2564:2:1589
-2565:2:1594
-2566:2:1598
-2567:2:1599
-2568:2:1606
-2569:2:1607
-2570:2:1618
-2571:2:1626
-2572:2:1627
-2573:2:1631
-2574:2:1636
-2575:2:1637
-2576:0:2112
-2577:2:1649
-2578:0:2112
-2579:1:296
-2580:0:2112
-2581:1:301
-2582:0:2112
-2583:1:302
-2584:0:2112
-2585:1:303
-2586:0:2112
-2587:1:304
-2588:0:2112
-2589:1:305
-2590:0:2112
-2591:1:306
-2592:0:2112
-2593:1:308
-2594:0:2112
-2595:1:310
-2596:0:2112
-2597:1:311
-2598:1:315
-2599:1:316
-2600:1:324
-2601:1:325
-2602:1:326
-2603:1:338
-2604:1:343
-2605:1:347
-2606:1:348
-2607:1:355
-2608:1:356
-2609:1:367
-2610:1:368
-2611:1:369
-2612:1:380
-2613:1:385
-2614:1:386
-2615:0:2112
-2616:1:398
-2617:0:2112
-2618:1:400
-2619:0:2112
-2620:1:404
-2621:0:2112
-2622:1:9
-2623:0:2112
-2624:1:10
-2625:0:2112
-2626:1:11
-2627:0:2112
-2628:1:12
-2629:1:16
-2630:1:17
-2631:1:25
-2632:1:34
-2633:1:35
-2634:1:39
-2635:1:44
-2636:1:48
-2637:1:49
-2638:1:56
-2639:1:57
-2640:1:68
-2641:1:69
-2642:1:72
-2643:1:73
-2644:1:81
-2645:1:86
-2646:1:87
-2647:0:2112
-2648:1:99
-2649:0:2112
-2650:2:1651
-2651:0:2112
-2652:2:1652
-2653:2:1656
-2654:2:1657
-2655:2:1665
-2656:2:1666
-2657:2:1670
-2658:2:1671
-2659:2:1679
-2660:2:1684
-2661:2:1688
-2662:2:1689
-2663:2:1696
-2664:2:1697
-2665:2:1708
-2666:2:1716
-2667:2:1717
-2668:2:1721
-2669:2:1726
-2670:2:1727
-2671:0:2112
-2672:2:1739
-2673:0:2112
-2674:2:1560
-2675:0:2112
-2676:2:1561
-2677:0:2112
-2678:2:1562
-2679:2:1566
-2680:2:1567
-2681:2:1575
-2682:2:1576
-2683:2:1580
-2684:2:1581
-2685:2:1589
-2686:2:1594
-2687:2:1598
-2688:2:1599
-2689:2:1606
-2690:2:1607
-2691:2:1618
-2692:2:1626
-2693:2:1627
-2694:2:1631
-2695:2:1636
-2696:2:1637
-2697:0:2112
-2698:2:1649
-2699:0:2112
-2700:1:101
-2701:0:2112
-2702:2:1651
-2703:0:2112
-2704:2:1652
-2705:2:1656
-2706:2:1657
-2707:2:1665
-2708:2:1666
-2709:2:1670
-2710:2:1671
-2711:2:1679
-2712:2:1684
-2713:2:1688
-2714:2:1689
-2715:2:1696
-2716:2:1697
-2717:2:1708
-2718:2:1716
-2719:2:1717
-2720:2:1721
-2721:2:1726
-2722:2:1727
-2723:0:2112
-2724:2:1739
-2725:0:2112
-2726:2:1560
-2727:0:2112
-2728:2:1561
-2729:0:2112
-2730:2:1562
-2731:2:1566
-2732:2:1567
-2733:2:1575
-2734:2:1576
-2735:2:1580
-2736:2:1581
-2737:2:1589
-2738:2:1594
-2739:2:1598
-2740:2:1599
-2741:2:1606
-2742:2:1607
-2743:2:1618
-2744:2:1626
-2745:2:1627
-2746:2:1631
-2747:2:1636
-2748:2:1637
-2749:0:2112
-2750:2:1649
-2751:0:2112
-2752:1:102
-2753:1:106
-2754:1:107
-2755:1:115
-2756:1:116
-2757:1:117
-2758:1:129
-2759:1:134
-2760:1:138
-2761:1:139
-2762:1:146
-2763:1:147
-2764:1:158
-2765:1:159
-2766:1:160
-2767:1:171
-2768:1:176
-2769:1:177
-2770:0:2112
-2771:1:189
-2772:0:2112
-2773:1:191
-2774:0:2112
-2775:2:1651
-2776:0:2112
-2777:2:1652
-2778:2:1656
-2779:2:1657
-2780:2:1665
-2781:2:1666
-2782:2:1670
-2783:2:1671
-2784:2:1679
-2785:2:1684
-2786:2:1688
-2787:2:1689
-2788:2:1696
-2789:2:1697
-2790:2:1708
-2791:2:1716
-2792:2:1717
-2793:2:1721
-2794:2:1726
-2795:2:1727
-2796:0:2112
-2797:2:1739
-2798:0:2112
-2799:2:1560
-2800:0:2112
-2801:2:1561
-2802:0:2112
-2803:2:1562
-2804:2:1566
-2805:2:1567
-2806:2:1575
-2807:2:1576
-2808:2:1580
-2809:2:1581
-2810:2:1589
-2811:2:1594
-2812:2:1598
-2813:2:1599
-2814:2:1606
-2815:2:1607
-2816:2:1618
-2817:2:1626
-2818:2:1627
-2819:2:1631
-2820:2:1636
-2821:2:1637
-2822:0:2112
-2823:2:1649
-2824:0:2112
-2825:1:192
-2826:0:2112
-2827:2:1651
-2828:0:2112
-2829:2:1652
-2830:2:1656
-2831:2:1657
-2832:2:1665
-2833:2:1666
-2834:2:1670
-2835:2:1671
-2836:2:1679
-2837:2:1684
-2838:2:1688
-2839:2:1689
-2840:2:1696
-2841:2:1697
-2842:2:1708
-2843:2:1716
-2844:2:1717
-2845:2:1721
-2846:2:1726
-2847:2:1727
-2848:0:2112
-2849:2:1739
-2850:0:2112
-2851:2:1560
-2852:0:2112
-2853:2:1561
-2854:0:2112
-2855:2:1562
-2856:2:1566
-2857:2:1567
-2858:2:1575
-2859:2:1576
-2860:2:1580
-2861:2:1581
-2862:2:1589
-2863:2:1594
-2864:2:1598
-2865:2:1599
-2866:2:1606
-2867:2:1607
-2868:2:1618
-2869:2:1626
-2870:2:1627
-2871:2:1631
-2872:2:1636
-2873:2:1637
-2874:0:2112
-2875:2:1649
-2876:0:2112
-2877:1:193
-2878:1:197
-2879:1:198
-2880:1:206
-2881:1:207
-2882:1:211
-2883:1:212
-2884:1:220
-2885:1:225
-2886:1:229
-2887:1:230
-2888:1:237
-2889:1:238
-2890:1:249
-2891:1:250
-2892:1:251
-2893:1:262
-2894:1:267
-2895:1:268
-2896:0:2112
-2897:1:280
-2898:0:2112
-2899:2:1651
-2900:0:2112
-2901:2:1652
-2902:2:1656
-2903:2:1657
-2904:2:1665
-2905:2:1666
-2906:2:1670
-2907:2:1671
-2908:2:1679
-2909:2:1684
-2910:2:1688
-2911:2:1689
-2912:2:1696
-2913:2:1697
-2914:2:1708
-2915:2:1716
-2916:2:1717
-2917:2:1721
-2918:2:1726
-2919:2:1727
-2920:0:2112
-2921:2:1739
-2922:0:2112
-2923:2:1560
-2924:0:2112
-2925:2:1561
-2926:0:2112
-2927:2:1562
-2928:2:1566
-2929:2:1567
-2930:2:1575
-2931:2:1576
-2932:2:1580
-2933:2:1581
-2934:2:1589
-2935:2:1594
-2936:2:1598
-2937:2:1599
-2938:2:1606
-2939:2:1607
-2940:2:1618
-2941:2:1626
-2942:2:1627
-2943:2:1631
-2944:2:1636
-2945:2:1637
-2946:0:2112
-2947:2:1649
-2948:0:2112
-2949:1:282
-2950:0:2112
-2951:1:291
-2952:0:2112
-2953:1:293
-2954:0:2112
-2955:1:296
-2956:0:2112
-2957:2:1651
-2958:0:2112
-2959:2:1652
-2960:2:1656
-2961:2:1657
-2962:2:1665
-2963:2:1666
-2964:2:1670
-2965:2:1671
-2966:2:1679
-2967:2:1684
-2968:2:1688
-2969:2:1689
-2970:2:1696
-2971:2:1697
-2972:2:1708
-2973:2:1716
-2974:2:1717
-2975:2:1721
-2976:2:1726
-2977:2:1727
-2978:0:2112
-2979:2:1739
-2980:0:2112
-2981:2:1560
-2982:0:2112
-2983:2:1561
-2984:0:2112
-2985:2:1562
-2986:2:1566
-2987:2:1567
-2988:2:1575
-2989:2:1576
-2990:2:1580
-2991:2:1581
-2992:2:1589
-2993:2:1594
-2994:2:1598
-2995:2:1599
-2996:2:1606
-2997:2:1607
-2998:2:1618
-2999:2:1626
-3000:2:1627
-3001:2:1631
-3002:2:1636
-3003:2:1637
-3004:0:2112
-3005:2:1649
-3006:0:2112
-3007:1:301
diff --git a/formal-model/urcu/urcu.sh b/formal-model/urcu/urcu.sh
deleted file mode 100644 (file)
index 65ff517..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-# Compiles and runs the urcu.spin Promela model.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) IBM Corporation, 2009
-#               Mathieu Desnoyers, 2009
-#
-# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
-#          Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
-
-# Basic execution, without LTL clauses. See Makefile.
-
-spin -a urcu.spin
-cc -DSAFETY -o pan pan.c
-./pan -v -c1 -X -m10000000 -w21
diff --git a/formal-model/urcu/urcu.spin b/formal-model/urcu/urcu.spin
deleted file mode 100644 (file)
index 2cfcb70..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * mem.spin: Promela code to validate memory barriers with OOO memory.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (c) 2009 Mathieu Desnoyers
- */
-
-/* Promela validation variables. */
-
-/* specific defines "included" here */
-/* DEFINES file "included" here */
-
-/* All signal readers have same PID and uses same reader variable */
-#ifdef TEST_SIGNAL_ON_WRITE
-
-#define NR_READERS 1   /* the writer is also a signal reader */
-#define NR_WRITERS 1
-
-#define NR_PROCS 1
-
-#define get_pid()      (0)
-
-#elif defined(TEST_SIGNAL_ON_READ)
-
-#define get_pid()      ((_pid < 2) -> 0 : 1)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#else
-
-#define get_pid()      (_pid)
-
-#define NR_READERS 1
-#define NR_WRITERS 1
-
-#define NR_PROCS 2
-
-#endif
-
-#define get_readerid() (get_pid())
-
-/*
- * Each process have its own data in cache. Caches are randomly updated.
- * smp_wmb and smp_rmb forces cache updates (write and read), smp_mb forces
- * both.
- */
-
-typedef per_proc_byte {
-       byte val[NR_PROCS];
-};
-
-/* Bitfield has a maximum of 8 procs */
-typedef per_proc_bit {
-       byte bitfield;
-};
-
-#define DECLARE_CACHED_VAR(type, x)    \
-       type mem_##x;                   \
-       per_proc_##type cached_##x;     \
-       per_proc_bit cache_dirty_##x;
-
-#define INIT_CACHED_VAR(x, v, j)       \
-       mem_##x = v;                    \
-       cache_dirty_##x.bitfield = 0;   \
-       j = 0;                          \
-       do                              \
-       :: j < NR_PROCS ->              \
-               cached_##x.val[j] = v;  \
-               j++                     \
-       :: j >= NR_PROCS -> break       \
-       od;
-
-#define IS_CACHE_DIRTY(x, id)  (cache_dirty_##x.bitfield & (1 << id))
-
-#define READ_CACHED_VAR(x)     (cached_##x.val[get_pid()])
-
-#define WRITE_CACHED_VAR(x, v)                         \
-       atomic {                                        \
-               cached_##x.val[get_pid()] = v;          \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield | (1 << get_pid());    \
-       }
-
-#define CACHE_WRITE_TO_MEM(x, id)                      \
-       if                                              \
-       :: IS_CACHE_DIRTY(x, id) ->                     \
-               mem_##x = cached_##x.val[id];           \
-               cache_dirty_##x.bitfield =              \
-                       cache_dirty_##x.bitfield & (~(1 << id));        \
-       :: else ->                                      \
-               skip                                    \
-       fi;
-
-#define CACHE_READ_FROM_MEM(x, id)     \
-       if                              \
-       :: !IS_CACHE_DIRTY(x, id) ->    \
-               cached_##x.val[id] = mem_##x;\
-       :: else ->                      \
-               skip                    \
-       fi;
-
-/*
- * May update other caches if cache is dirty, or not.
- */
-#define RANDOM_CACHE_WRITE_TO_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_WRITE_TO_MEM(x, id);      \
-       :: 1 -> skip                    \
-       fi;
-
-#define RANDOM_CACHE_READ_FROM_MEM(x, id)\
-       if                              \
-       :: 1 -> CACHE_READ_FROM_MEM(x, id);     \
-       :: 1 -> skip                    \
-       fi;
-
-/*
- * Remote barriers tests the scheme where a signal (or IPI) is sent to all
- * reader threads to promote their compiler barrier to a smp_mb().
- */
-#ifdef REMOTE_BARRIERS
-
-inline smp_rmb_pid(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_wmb_pid(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, i);
-               j = 0;
-               do
-               :: j < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[j], i);
-                       j++
-               :: j >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, i);
-       }
-}
-
-inline smp_mb_pid(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb_pid(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb_pid(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(j);
-#endif
-#endif
-       }
-}
-
-/*
- * Readers do a simple barrier(), writers are doing a smp_mb() _and_ sending a
- * signal or IPI to have all readers execute a smp_mb.
- * We are not modeling the whole rendez-vous between readers and writers here,
- * we just let the writer update each reader's caches remotely.
- */
-inline smp_mb_writer(i, j)
-{
-       smp_mb_pid(get_pid(), j);
-       i = 0;
-       do
-       :: i < NR_READERS ->
-               smp_mb_pid(i, j);
-               i++;
-       :: i >= NR_READERS -> break
-       od;
-       smp_mb_pid(get_pid(), j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       skip;
-}
-
-#else
-
-inline smp_rmb(i, j)
-{
-       atomic {
-               CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_READ_FROM_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_wmb(i, j)
-{
-       atomic {
-               CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       CACHE_WRITE_TO_MEM(urcu_active_readers[i], get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline smp_mb(i, j)
-{
-       atomic {
-#ifndef NO_WMB
-               smp_wmb(i, j);
-#endif
-#ifndef NO_RMB
-               smp_rmb(i, j);
-#endif
-#ifdef NO_WMB
-#ifdef NO_RMB
-               ooo_mem(i);
-#endif
-#endif
-       }
-}
-
-inline smp_mb_writer(i, j)
-{
-       smp_mb(i, j);
-}
-
-inline smp_mb_reader(i, j)
-{
-       smp_mb(i, j);
-}
-
-#endif
-
-/* Keep in sync manually with smp_rmb, wmp_wmb, ooo_mem and init() */
-DECLARE_CACHED_VAR(byte, urcu_gp_ctr);
-/* Note ! currently only two readers */
-DECLARE_CACHED_VAR(byte, urcu_active_readers[NR_READERS]);
-/* pointer generation */
-DECLARE_CACHED_VAR(byte, generation_ptr);
-
-byte last_free_gen = 0;
-bit free_done = 0;
-byte read_generation[NR_READERS];
-bit data_access[NR_READERS];
-
-bit write_lock = 0;
-
-bit init_done = 0;
-
-bit sighand_exec = 0;
-
-inline wait_init_done()
-{
-       do
-       :: init_done == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TEST_SIGNAL
-
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else -> break;
-       od;
-}
-
-#ifdef TOO_BIG_STATE_SPACE
-inline wait_for_sighand_exec()
-{
-       sighand_exec = 0;
-       do
-       :: sighand_exec == 0 -> skip;
-       :: else ->
-               if
-               :: 1 -> break;
-               :: 1 -> sighand_exec = 0;
-                       skip;
-               fi;
-       od;
-}
-#endif
-
-#else
-
-inline wait_for_sighand_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_WRITE
-/* Block on signal handler execution */
-inline dispatch_sighand_write_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_write_exec()
-{
-       skip;
-}
-
-#endif
-
-#ifdef TEST_SIGNAL_ON_READ
-/* Block on signal handler execution */
-inline dispatch_sighand_read_exec()
-{
-       sighand_exec = 1;
-       do
-       :: sighand_exec == 1 ->
-               skip;
-       :: else ->
-               break;
-       od;
-}
-
-#else
-
-inline dispatch_sighand_read_exec()
-{
-       skip;
-}
-
-#endif
-
-
-inline ooo_mem(i)
-{
-       atomic {
-               RANDOM_CACHE_WRITE_TO_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_WRITE_TO_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_WRITE_TO_MEM(generation_ptr, get_pid());
-               RANDOM_CACHE_READ_FROM_MEM(urcu_gp_ctr, get_pid());
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       RANDOM_CACHE_READ_FROM_MEM(urcu_active_readers[i],
-                               get_pid());
-                       i++
-               :: i >= NR_READERS -> break
-               od;
-               RANDOM_CACHE_READ_FROM_MEM(generation_ptr, get_pid());
-       }
-}
-
-inline wait_for_reader(tmp, tmp2, i, j)
-{
-       do
-       :: 1 ->
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[tmp]);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               if
-               :: (tmp2 & RCU_GP_CTR_NEST_MASK)
-                       && ((tmp2 ^ READ_CACHED_VAR(urcu_gp_ctr))
-                               & RCU_GP_CTR_BIT) ->
-#ifndef GEN_ERROR_WRITER_PROGRESS
-                       smp_mb_writer(i, j);
-#else
-                       ooo_mem(i);
-#endif
-                       dispatch_sighand_write_exec();
-               :: else ->
-                       break;
-               fi;
-       od;
-}
-
-inline wait_for_quiescent_state(tmp, tmp2, i, j)
-{
-       tmp = 0;
-       do
-       :: tmp < NR_READERS ->
-               wait_for_reader(tmp, tmp2, i, j);
-               if
-               :: (NR_READERS > 1) && (tmp < NR_READERS - 1)
-                       -> ooo_mem(i);
-                          dispatch_sighand_write_exec();
-               :: else
-                       -> skip;
-               fi;
-               tmp++
-       :: tmp >= NR_READERS -> break
-       od;
-}
-
-/* Model the RCU read-side critical section. */
-
-#ifndef TEST_SIGNAL_ON_WRITE
-
-inline urcu_one_read(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       dispatch_sighand_read_exec();
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               dispatch_sighand_read_exec();
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               dispatch_sighand_read_exec();
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //dispatch_sighand_read_exec();
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif //!TEST_SIGNAL_ON_WRITE
-
-#ifdef TEST_SIGNAL
-/* signal handler reader */
-
-inline urcu_one_read_sig(i, j, nest_i, tmp, tmp2)
-{
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               ooo_mem(i);
-               tmp = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               if
-               :: (!(tmp & RCU_GP_CTR_NEST_MASK))
-                       ->
-                       tmp2 = READ_CACHED_VAR(urcu_gp_ctr);
-                       ooo_mem(i);
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp2);
-               :: else ->
-                       WRITE_CACHED_VAR(urcu_active_readers[get_readerid()],
-                                        tmp + 1);
-               fi;
-               smp_mb_reader(i, j);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-
-       read_generation[get_readerid()] = READ_CACHED_VAR(generation_ptr);
-       data_access[get_readerid()] = 1;
-       data_access[get_readerid()] = 0;
-
-       nest_i = 0;
-       do
-       :: nest_i < READER_NEST_LEVEL ->
-               smp_mb_reader(i, j);
-               tmp2 = READ_CACHED_VAR(urcu_active_readers[get_readerid()]);
-               ooo_mem(i);
-               WRITE_CACHED_VAR(urcu_active_readers[get_readerid()], tmp2 - 1);
-               nest_i++;
-       :: nest_i >= READER_NEST_LEVEL -> break;
-       od;
-       //ooo_mem(i);
-       //smp_mc(i);    /* added */
-}
-
-active proctype urcu_reader_sig()
-{
-       byte i, j, nest_i;
-       byte tmp, tmp2;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-end_reader:
-       do
-       :: 1 ->
-               wait_for_sighand_exec();
-               /*
-                * We do not test reader's progress here, because we are mainly
-                * interested in writer's progress. The reader never blocks
-                * anyway. We have to test for reader/writer's progress
-                * separately, otherwise we could think the writer is doing
-                * progress when it's blocked by an always progressing reader.
-                */
-#ifdef READER_PROGRESS
-progress_reader:
-#endif
-               urcu_one_read_sig(i, j, nest_i, tmp, tmp2);
-       od;
-}
-
-#endif
-
-/* Model the RCU update process. */
-
-active proctype urcu_writer()
-{
-       byte i, j;
-       byte tmp, tmp2;
-       byte old_gen;
-
-       wait_init_done();
-
-       assert(get_pid() < NR_PROCS);
-
-       do
-       :: (READ_CACHED_VAR(generation_ptr) < 5) ->
-#ifdef WRITER_PROGRESS
-progress_writer1:
-#endif
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               atomic {
-                       old_gen = READ_CACHED_VAR(generation_ptr);
-                       WRITE_CACHED_VAR(generation_ptr, old_gen + 1);
-               }
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-
-               do
-               :: 1 ->
-                       atomic {
-                               if
-                               :: write_lock == 0 ->
-                                       write_lock = 1;
-                                       break;
-                               :: else ->
-                                       skip;
-                               fi;
-                       }
-               od;
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               //smp_mc(i);
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-               //smp_mc(i);
-#ifndef SINGLE_FLIP
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               tmp = READ_CACHED_VAR(urcu_gp_ctr);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               WRITE_CACHED_VAR(urcu_gp_ctr, tmp ^ RCU_GP_CTR_BIT);
-               //smp_mc(i);
-               ooo_mem(i);
-               dispatch_sighand_write_exec();
-               wait_for_quiescent_state(tmp, tmp2, i, j);
-#endif
-               smp_mb_writer(i, j);
-               dispatch_sighand_write_exec();
-               write_lock = 0;
-               /* free-up step, e.g., kfree(). */
-               atomic {
-                       last_free_gen = old_gen;
-                       free_done = 1;
-               }
-       :: else -> break;
-       od;
-       /*
-        * Given the reader loops infinitely, let the writer also busy-loop
-        * with progress here so, with weak fairness, we can test the
-        * writer's progress.
-        */
-end_writer:
-       do
-       :: 1 ->
-#ifdef WRITER_PROGRESS
-progress_writer2:
-#endif
-               dispatch_sighand_write_exec();
-       od;
-}
-
-/* Leave after the readers and writers so the pid count is ok. */
-init {
-       byte i, j;
-
-       atomic {
-               INIT_CACHED_VAR(urcu_gp_ctr, 1, j);
-               INIT_CACHED_VAR(generation_ptr, 0, j);
-
-               i = 0;
-               do
-               :: i < NR_READERS ->
-                       INIT_CACHED_VAR(urcu_active_readers[i], 0, j);
-                       read_generation[i] = 1;
-                       data_access[i] = 0;
-                       i++;
-               :: i >= NR_READERS -> break
-               od;
-               init_done = 1;
-       }
-}
diff --git a/formal-model/urcu/urcu_free.ltl b/formal-model/urcu/urcu_free.ltl
deleted file mode 100644 (file)
index 1954414..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[] (read_free -> !read_free_race)
diff --git a/formal-model/urcu/urcu_free_no_mb.define b/formal-model/urcu/urcu_free_no_mb.define
deleted file mode 100644 (file)
index 136ef67..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NO_RMB
-#define NO_WMB
diff --git a/formal-model/urcu/urcu_free_no_rmb.define b/formal-model/urcu/urcu_free_no_rmb.define
deleted file mode 100644 (file)
index 73e61a4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_RMB
diff --git a/formal-model/urcu/urcu_free_no_wmb.define b/formal-model/urcu/urcu_free_no_wmb.define
deleted file mode 100644 (file)
index 710f29d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define NO_WMB
diff --git a/formal-model/urcu/urcu_free_single_flip.define b/formal-model/urcu/urcu_free_single_flip.define
deleted file mode 100644 (file)
index 5e642ef..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define SINGLE_FLIP
diff --git a/formal-model/urcu/urcu_progress.ltl b/formal-model/urcu/urcu_progress.ltl
deleted file mode 100644 (file)
index 8718641..0000000
+++ /dev/null
@@ -1 +0,0 @@
-([] <> !np_)
diff --git a/formal-model/urcu/urcu_progress_reader.define b/formal-model/urcu/urcu_progress_reader.define
deleted file mode 100644 (file)
index ff3f783..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define READER_PROGRESS
diff --git a/formal-model/urcu/urcu_progress_writer.define b/formal-model/urcu/urcu_progress_writer.define
deleted file mode 100644 (file)
index 1e4417f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define WRITER_PROGRESS
diff --git a/formal-model/urcu/urcu_progress_writer_error.define b/formal-model/urcu/urcu_progress_writer_error.define
deleted file mode 100644 (file)
index 8d304f5..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define WRITER_PROGRESS
-#define GEN_ERROR_WRITER_PROGRESS
diff --git a/liburcu-bp.pc.in b/liburcu-bp.pc.in
new file mode 100644 (file)
index 0000000..c5f2355
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Userspace RCU BulletProof
+Description: A userspace RCU (read-copy-update) library, bulletproof version
+Version: @PACKAGE_VERSION@
+Requires:
+Libs: -L${libdir} -lurcu-bp
+Cflags: -I${includedir} 
diff --git a/liburcu-cds.pc.in b/liburcu-cds.pc.in
new file mode 100644 (file)
index 0000000..e3d13af
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Userspace RCU Concurrent Data Structures
+Description: Data structures leveraging RCU and atomic operations to provide efficient concurrency-aware storage
+Version: @PACKAGE_VERSION@
+Requires:
+Libs: -L${libdir} -lurcu-cds
+Cflags: -I${includedir} 
diff --git a/liburcu-mb.pc.in b/liburcu-mb.pc.in
new file mode 100644 (file)
index 0000000..cd669ef
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Userspace RCU Memory barriers
+Description: A userspace RCU (read-copy-update) library, memory barriers version
+Version: @PACKAGE_VERSION@
+Requires:
+Libs: -L${libdir} -lurcu-mb
+Cflags: -I${includedir} 
diff --git a/liburcu-qsbr.pc.in b/liburcu-qsbr.pc.in
new file mode 100644 (file)
index 0000000..0732602
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Userspace RCU QSBR
+Description: A userspace RCU (read-copy-update) library, quiescent state version
+Version: @PACKAGE_VERSION@
+Requires:
+Libs: -L${libdir} -lurcu-qsbr
+Cflags: -I${includedir} 
diff --git a/liburcu-signal.pc.in b/liburcu-signal.pc.in
new file mode 100644 (file)
index 0000000..f9bc3a3
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Userspace RCU signal
+Description: A userspace RCU (read-copy-update) library, signal version
+Version: @PACKAGE_VERSION@
+Requires:
+Libs: -L${libdir} -lurcu-signal
+Cflags: -I${includedir} 
diff --git a/liburcu.pc.in b/liburcu.pc.in
new file mode 100644 (file)
index 0000000..22bf2c8
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Userspace RCU 
+Description: A userspace RCU (read-copy-update) library, standard version
+Version: @PACKAGE_VERSION@
+Requires:
+Libs: -L${libdir} -lurcu
+Cflags: -I${includedir} 
diff --git a/rculfqueue.c b/rculfqueue.c
new file mode 100644 (file)
index 0000000..0daee5d
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * rculfqueue.c
+ *
+ * Userspace RCU library - Lock-Free RCU Queue
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#define _LGPL_SOURCE
+/* Use the urcu symbols to select the appropriate rcu flavor at link time */
+#include "urcu.h"
+
+#undef _LGPL_SOURCE
+/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#include "urcu/rculfqueue.h"
+#include "urcu/static/rculfqueue.h"
+
+/*
+ * library wrappers to be used by non-LGPL compatible source code.
+ */
+
+void cds_lfq_node_init_rcu(struct cds_lfq_node_rcu *node)
+{
+       _cds_lfq_node_init_rcu(node);
+}
+
+void cds_lfq_init_rcu(struct cds_lfq_queue_rcu *q,
+                     void (*release)(struct urcu_ref *ref))
+{
+       _cds_lfq_init_rcu(q, release);
+}
+
+void cds_lfq_enqueue_rcu(struct cds_lfq_queue_rcu *q, struct cds_lfq_node_rcu *node)
+{
+       _cds_lfq_enqueue_rcu(q, node);
+}
+
+struct cds_lfq_node_rcu *
+cds_lfq_dequeue_rcu(struct cds_lfq_queue_rcu *q)
+{
+       return _cds_lfq_dequeue_rcu(q);
+}
diff --git a/rculfstack.c b/rculfstack.c
new file mode 100644 (file)
index 0000000..4a3041d
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * rculfstack.c
+ *
+ * Userspace RCU library - Lock-Free RCU Stack
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* Use the urcu symbols to select the appropriate rcu flavor at link time */
+#define _LGPL_SOURCE
+#include "urcu.h"
+
+#undef _LGPL_SOURCE
+/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#include "urcu/rculfstack.h"
+#include "urcu/static/rculfstack.h"
+
+/*
+ * library wrappers to be used by non-LGPL compatible source code.
+ */
+
+
+void cds_lfs_node_init_rcu(struct cds_lfs_node_rcu *node)
+{
+       _cds_lfs_node_init_rcu(node);
+}
+
+void cds_lfs_init_rcu(struct cds_lfs_stack_rcu *s)
+{
+       _cds_lfs_init_rcu(s);
+}
+
+void cds_lfs_push_rcu(struct cds_lfs_stack_rcu *s, struct cds_lfs_node_rcu *node)
+{
+       _cds_lfs_push_rcu(s, node);
+}
+
+struct cds_lfs_node_rcu *cds_lfs_pop_rcu(struct cds_lfs_stack_rcu *s)
+{
+       return _cds_lfs_pop_rcu(s);
+}
diff --git a/tests/Makefile b/tests/Makefile
deleted file mode 100644 (file)
index ab19097..0000000
+++ /dev/null
@@ -1 +0,0 @@
-include Makefile.inc
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644 (file)
index 0000000..674260f
--- /dev/null
@@ -0,0 +1,182 @@
+AM_LDFLAGS=-lpthread
+AM_CFLAGS=-I$(top_srcdir) -I$(top_builddir) -g
+
+noinst_PROGRAMS = test_urcu test_urcu_dynamic_link test_urcu_timing \
+       test_urcu_signal test_urcu_signal_dynamic_link test_urcu_signal_timing \
+        test_rwlock_timing test_rwlock test_perthreadlock_timing \
+        test_perthreadlock test_urcu_yield test_urcu_signal_yield test_urcu_mb \
+        test_qsbr_timing test_qsbr rcutorture_urcu rcutorture_urcu_signal \
+        rcutorture_urcu_mb rcutorture_urcu_bp rcutorture_qsbr \
+       test_mutex test_looplen test_urcu_gc test_urcu_signal_gc \
+       test_urcu_lgc \
+        test_urcu_mb_gc test_qsbr_gc test_qsbr_lgc test_urcu_signal_lgc \
+        test_urcu_mb_lgc test_qsbr_dynamic_link test_urcu_defer \
+        test_uatomic test_urcu_assign test_urcu_assign_dynamic_link \
+        test_urcu_bp test_urcu_bp_dynamic_link test_cycles_per_loop \
+       test_urcu_lfq test_urcu_wfq test_urcu_lfs test_urcu_wfs \
+       test_urcu_wfq_dynlink test_urcu_wfs_dynlink \
+       test_urcu_lfq_dynlink test_urcu_lfs_dynlink
+noinst_HEADERS = rcutorture.h
+
+if COMPAT_ARCH
+COMPAT=$(top_srcdir)/compat_arch_@ARCHTYPE@.c
+else
+COMPAT=
+endif
+
+if COMPAT_FUTEX
+COMPAT+=$(top_srcdir)/compat_futex.c
+endif
+
+URCU=$(top_srcdir)/urcu.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
+URCU_QSBR=$(top_srcdir)/urcu-qsbr.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
+# URCU_MB uses urcu.c but -DRCU_MB must be defined
+URCU_MB=$(top_srcdir)/urcu.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
+# URCU_SIGNAL uses urcu.c but -DRCU_SIGNAL must be defined
+URCU_SIGNAL=$(top_srcdir)/urcu.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
+URCU_BP=$(top_srcdir)/urcu-bp.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
+URCU_DEFER=$(top_srcdir)/urcu.c $(top_srcdir)/urcu-pointer.c $(top_srcdir)/wfqueue.c $(COMPAT)
+
+URCU_LIB=$(top_builddir)/liburcu.la
+URCU_QSBR_LIB=$(top_builddir)/liburcu-qsbr.la
+URCU_MB_LIB=$(top_builddir)/liburcu-mb.la
+URCU_SIGNAL_LIB=$(top_builddir)/liburcu-signal.la
+URCU_BP_LIB=$(top_builddir)/liburcu-bp.la
+URCU_CDS_LIB=$(top_builddir)/liburcu-cds.la
+
+EXTRA_DIST = $(top_srcdir)/tests/api_*.h
+
+
+test_urcu_SOURCES = test_urcu.c $(URCU)
+
+test_urcu_dynamic_link_SOURCES = test_urcu.c $(URCU)
+test_urcu_dynamic_link_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
+
+test_urcu_timing_SOURCES = test_urcu_timing.c $(URCU)
+
+test_urcu_yield_SOURCES = test_urcu.c $(URCU)
+test_urcu_yield_CFLAGS = -DDEBUG_YIELD $(AM_CFLAGS)
+
+
+test_qsbr_SOURCES = test_qsbr.c $(URCU_QSBR)
+
+test_qsbr_timing_SOURCES = test_qsbr_timing.c $(URCU_QSBR)
+
+
+test_urcu_mb_SOURCES = test_urcu.c $(URCU_MB)
+test_urcu_mb_CFLAGS = -DRCU_MB $(AM_CFLAGS)
+
+
+test_urcu_signal_SOURCES = test_urcu.c $(URCU_SIGNAL)
+test_urcu_signal_CFLAGS = -DRCU_SIGNAL $(AM_CFLAGS)
+
+test_urcu_signal_dynamic_link_SOURCES = test_urcu.c $(URCU_SIGNAL)
+test_urcu_signal_dynamic_link_CFLAGS = -DRCU_SIGNAL -DDYNAMIC_LINK_TEST \
+                                       $(AM_CFLAGS)
+
+test_urcu_signal_timing_SOURCES = test_urcu_timing.c $(URCU_SIGNAL)
+test_urcu_signal_timing_CFLAGS= -DRCU_SIGNAL $(AM_CFLAGS)
+
+test_urcu_signal_yield_SOURCES = test_urcu.c $(URCU_SIGNAL)
+test_urcu_signal_yield_CFLAGS = -DRCU_SIGNAL -DDEBUG_YIELD $(AM_CFLAGS)
+
+
+test_rwlock_timing_SOURCES = test_rwlock_timing.c $(URCU_SIGNAL)
+
+test_rwlock_SOURCES = test_rwlock.c $(URCU_SIGNAL)
+
+test_perthreadlock_timing_SOURCES = test_perthreadlock_timing.c $(URCU_SIGNAL)
+
+test_perthreadlock_SOURCES = test_perthreadlock.c $(URCU_SIGNAL)
+
+
+rcutorture_urcu_SOURCES = urcutorture.c
+rcutorture_urcu_CFLAGS = -DRCU_MEMBARRIER $(AM_CFLAGS)
+rcutorture_urcu_LDADD = $(URCU) $(URCU_CDS_LIB)
+
+rcutorture_urcu_mb_SOURCES = urcutorture.c
+rcutorture_urcu_mb_CFLAGS = -DRCU_MB $(AM_CFLAGS)
+rcutorture_urcu_mb_LDADD = $(URCU_MB_LIB) $(URCU_CDS_LIB)
+
+rcutorture_qsbr_SOURCES = urcutorture.c
+rcutorture_qsbr_CFLAGS = -DRCU_QSBR $(AM_CFLAGS)
+rcutorture_qsbr_LDADD = $(URCU_QSBR_LIB) $(URCU_CDS_LIB)
+
+rcutorture_urcu_signal_SOURCES = urcutorture.c
+rcutorture_urcu_signal_CFLAGS = -DRCU_SIGNAL $(AM_CFLAGS)
+rcutorture_urcu_signal_LDADD = $(URCU_SIGNAL_LIB) $(URCU_CDS_LIB)
+
+rcutorture_urcu_bp_SOURCES = urcutorture.c
+rcutorture_urcu_bp_CFLAGS = -DRCU_BP $(AM_CFLAGS)
+rcutorture_urcu_bp_LDADD = $(URCU_BP_LIB) $(URCU_CDS_LIB)
+
+test_mutex_SOURCES = test_mutex.c $(URCU)
+
+test_looplen_SOURCES = test_looplen.c
+
+test_urcu_gc_SOURCES = test_urcu_gc.c $(URCU)
+
+test_urcu_signal_gc_SOURCES = test_urcu_gc.c $(URCU_SIGNAL)
+test_urcu_signal_gc_CFLAGS = -DRCU_SIGNAL $(AM_CFLAGS)
+
+test_urcu_mb_gc_SOURCES = test_urcu_gc.c $(URCU_MB)
+test_urcu_mb_gc_CFLAGS = -DRCU_MB $(AM_CFLAGS)
+
+test_qsbr_gc_SOURCES = test_qsbr_gc.c $(URCU_QSBR)
+
+test_qsbr_lgc_SOURCES = test_qsbr_gc.c $(URCU_QSBR)
+test_qsbr_lgc_CFLAGS = -DTEST_LOCAL_GC $(AM_CFLAGS)
+
+test_urcu_lgc_SOURCES = test_urcu_gc.c $(URCU)
+test_urcu_lgc_CFLAGS = -DTEST_LOCAL_GC $(AM_CFLAGS)
+
+test_urcu_signal_lgc_SOURCES = test_urcu_gc.c $(URCU_SIGNAL)
+test_urcu_signal_lgc_CFLAGS = -DRCU_SIGNAL -DTEST_LOCAL_GC $(AM_CFLAGS)
+
+test_urcu_mb_lgc_SOURCES = test_urcu_gc.c $(URCU_MB)
+test_urcu_mb_lgc_CFLAGS = -DTEST_LOCAL_GC -DRCU_MB $(AM_CFLAGS)
+
+test_qsbr_dynamic_link_SOURCES = test_qsbr.c $(URCU_QSBR)
+test_qsbr_dynamic_link_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
+
+test_urcu_defer_SOURCES = test_urcu_defer.c $(URCU_DEFER)
+
+test_uatomic_SOURCES = test_uatomic.c $(COMPAT)
+
+test_cycles_per_loop_SOURCES = test_cycles_per_loop.c
+
+test_urcu_assign_SOURCES = test_urcu_assign.c $(URCU)
+
+test_urcu_assign_dynamic_link_SOURCES = test_urcu_assign.c $(URCU)
+test_urcu_assign_dynamic_link_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
+
+test_urcu_bp_SOURCES = test_urcu_bp.c $(URCU_BP)
+
+test_urcu_bp_dynamic_link_SOURCES = test_urcu_bp.c $(URCU_BP)
+test_urcu_bp_dynamic_link_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
+
+test_urcu_lfq_SOURCES = test_urcu_lfq.c $(URCU)
+test_urcu_lfq_dynlink_SOURCES = test_urcu_lfq.c $(URCU)
+test_urcu_lfq_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
+test_urcu_lfq_dynlink_LDADD = $(URCU_CDS_LIB)
+
+test_urcu_wfq_SOURCES = test_urcu_wfq.c $(COMPAT)
+test_urcu_wfq_dynlink_SOURCES = test_urcu_wfq.c
+test_urcu_wfq_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
+test_urcu_wfq_dynlink_LDADD = $(URCU_CDS_LIB)
+
+test_urcu_lfs_SOURCES = test_urcu_lfs.c $(URCU_DEFER)
+test_urcu_lfs_dynlink_SOURCES = test_urcu_lfs.c $(URCU_DEFER)
+test_urcu_lfs_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
+test_urcu_lfs_dynlink_LDADD = $(URCU_CDS_LIB)
+
+test_urcu_wfs_SOURCES = test_urcu_wfs.c $(COMPAT)
+test_urcu_wfs_dynlink_SOURCES = test_urcu_wfs.c
+test_urcu_wfs_dynlink_CFLAGS = -DDYNAMIC_LINK_TEST $(AM_CFLAGS)
+test_urcu_wfs_dynlink_LDADD = $(URCU_CDS_LIB)
+
+urcutorture.c: api.h
+
+check-am:
+       ./test_uatomic
+       ./runall.sh
diff --git a/tests/Makefile.inc b/tests/Makefile.inc
deleted file mode 100644 (file)
index 4e85352..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-
-include ../Makefile.build.inc
-
-ifeq ($(findstring ${ARCHTYPE},"x86 ppc"),)
-APIHEADER=api_gcc.h
-else
-APIHEADER=api_${ARCHTYPE}.h
-endif
-
-LIBDIR=..
-
-CFLAGS+=-I ${LIBDIR}
-
-URCU_SIGNAL=${LIBDIR}/urcu.o ${LIBDIR}/urcu.h
-URCU_SIGNAL_YIELD=${LIBDIR}/urcu-yield.o ${LIBDIR}/urcu.h
-URCU_MB=${LIBDIR}/urcu-mb.o ${LIBDIR}/urcu.h
-URCU_QSBR=${LIBDIR}/urcu-qsbr.o ${LIBDIR}/urcu-qsbr.h
-URCU_MB_DEFER=${LIBDIR}/urcu-mb.o ${LIBDIR}/urcu-defer.o ${LIBDIR}/urcu.h
-URCU_HT=${LIBDIR}/urcu-mb.o ${LIBDIR}/urcu-defer.o ${LIBDIR}/urcu-ht.o ${LIBDIR}/urcu.h
-
-all: test_urcu test_urcu_dynamic_link test_urcu_timing \
-       test_rwlock_timing test_rwlock test_perthreadlock_timing \
-       test_perthreadlock test_urcu_yield test_urcu_mb \
-       urcu-asm.S test_qsbr_timing test_qsbr urcu-asm.o urcutorture \
-       urcutorture-yield test_mutex test_looplen test_urcu_gc \
-       test_urcu_gc_mb test_qsbr_gc test_qsbr_lgc test_urcu_lgc \
-       test_urcu_lgc_mb test_qsbr_dynamic_link test_urcu_mb_defer \
-       test_atomic test_ht
-
-api.h: ${APIHEADER}
-       cp -f ${APIHEADER} api.h
-
-test_looplen: test_looplen.c ${LIBDIR}/urcu.h
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-
-test_urcu: test_urcu.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_urcu_gc: test_urcu_gc.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_urcu_lgc: test_urcu_gc.c ${URCU_SIGNAL}
-       $(CC) -DTEST_LOCAL_GC ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-
-test_urcu_mb: test_urcu.c ${URCU_MB}
-       $(CC) -DURCU_MB ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_urcu_gc_mb: test_urcu_gc.c ${URCU_MB}
-       $(CC) -DURCU_MB ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_urcu_lgc_mb: test_urcu_gc.c ${URCU_MB}
-       $(CC) -DTEST_LOCAL_GC -DURCU_MB ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_urcu_mb_defer: test_urcu_defer.c ${URCU_MB_DEFER}
-       $(CC) -DURCU_MB ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-
-test_qsbr: test_qsbr.c ${URCU_QSBR}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_qsbr_gc: test_qsbr_gc.c ${URCU_QSBR}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_qsbr_lgc: test_qsbr_gc.c ${URCU_QSBR}
-       $(CC) -DTEST_LOCAL_GC ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_qsbr_dynamic_link: test_qsbr.c ${URCU_QSBR}
-       $(CC) ${CFLAGS} -DDYNAMIC_LINK_TEST $(LDFLAGS) -o $@ $(SRC_DEP)
-
-
-test_rwlock: test_rwlock.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_perthreadlock: test_perthreadlock.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_mutex: test_mutex.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_urcu_dynamic_link: test_urcu.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} -DDYNAMIC_LINK_TEST $(LDFLAGS) -o $@ $(SRC_DEP)
-
-
-test_urcu_yield: test_urcu.c ${URCU_SIGNAL_YIELD}
-       $(CC) -DDEBUG_YIELD ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_urcu_timing: test_urcu_timing.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_qsbr_timing: test_qsbr_timing.c ${URCU_QSBR}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_rwlock_timing: test_rwlock_timing.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_perthreadlock_timing: test_perthreadlock_timing.c ${URCU_SIGNAL}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-urcu-asm.S: urcu-asm.c ${LIBDIR}/urcu.h
-       $(CC) ${CFLAGS} -S -o $@ $(SRC_DEP)
-
-urcu-asm.o: urcu-asm.c ${LIBDIR}/urcu.h
-       $(CC) ${CFLAGS} -c -o $@ $(SRC_DEP)
-
-urcutorture: urcutorture.c rcutorture.h api.h ${URCU_SIGNAL} 
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-urcutorture-yield: urcutorture.c ${URCU_SIGNAL_YIELD} rcutorture.h api.h
-       $(CC) -DDEBUG_YIELD ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_atomic: test_atomic.c ../arch_atomic.h
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-test_ht: test_ht.c ${URCU_HT}
-       $(CC) ${CFLAGS} $(LDFLAGS) -o $@ $(SRC_DEP)
-
-,PHONY: clean
-
-clean:
-       rm -f *.o test_urcu test_urcu_dynamic_link test_urcu_timing \
-       test_rwlock_timing test_rwlock test_perthreadlock_timing \
-       test_perthreadlock test_urcu_yield test_urcu_mb \
-       urcu-asm.S test_qsbr_timing test_qsbr urcutorture \
-       urcutorture-yield liburcu.so api.h \
-       test_mutex test_urcu_gc test_urcu_gc_mb urcu-asm-1.S \
-       test_qsbr_lgc test_qsbr_gc test_looplen test_urcu_lgc \
-       test_urcu_lgc_mb test_qsbr_dynamic_link test_urcu_mb_defer
diff --git a/tests/Makefile32 b/tests/Makefile32
deleted file mode 100644 (file)
index ab57691..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-include Makefile.inc
-
-EXTRAMFLAGS=-f Makefile32
-CFLAGS+=-m32
-LDFLAGS+=-m32
diff --git a/tests/Makefile64 b/tests/Makefile64
deleted file mode 100644 (file)
index 83ee8da..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-include Makefile.inc
-
-EXTRAMFLAGS=-f Makefile64
-CFLAGS+=-m64
-LDFLAGS+=-m64
index 721af0a4813c25c498c391de49ba5d5e8d7d68c9..2db1ef2d2c1c4c6de330d3820e3ca31b9223ca56 100644 (file)
@@ -1,5 +1,9 @@
+
+#ifndef _INCLUDE_API_H
 #define _INCLUDE_API_H
 
+#include "../config.h"
+
 /*
  * common.h: Common Linux kernel-isms.
  *
@@ -69,7 +73,7 @@
  * Machine parameters.
  */
 
-#define CACHE_LINE_SIZE 64
+/* #define CAA_CACHE_LINE_SIZE 64 */
 #define ____cacheline_internodealigned_in_smp \
        __attribute__((__aligned__(1 << 6)))
 
@@ -247,10 +251,10 @@ cmpxchg(volatile long *ptr, long oldval, long newval)
 #define atomic_dec_return(v)  (atomic_sub_return(1,v))
 
 /* Atomic operations are already serializing on x86 */
-#define smp_mb__before_atomic_dec()    barrier()
-#define smp_mb__after_atomic_dec()     barrier()
-#define smp_mb__before_atomic_inc()    barrier()
-#define smp_mb__after_atomic_inc()     barrier()
+#define smp_mb__before_atomic_dec()    cmm_barrier()
+#define smp_mb__after_atomic_dec()     cmm_barrier()
+#define smp_mb__before_atomic_inc()    cmm_barrier()
+#define smp_mb__after_atomic_inc()     cmm_barrier()
 
 #endif //0 /* duplicate with arch_atomic.h */
 
@@ -285,23 +289,15 @@ cmpxchg(volatile long *ptr, long oldval, long newval)
 #include <pthread.h>
 #include <sched.h>
 #include <sys/param.h>
-#include <arch.h>
 /* #include "atomic.h" */
 
-/*
- * Compiler magic.
- */
-#define container_of(ptr, type, member) ({                     \
-       const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
-       (type *)( (char *)__mptr - offsetof(type,member) );})
-
 /*
  * Default machine parameters.
  */
 
-#ifndef CACHE_LINE_SIZE
-#define CACHE_LINE_SIZE 128
-#endif /* #ifndef CACHE_LINE_SIZE */
+#ifndef CAA_CACHE_LINE_SIZE
+/* #define CAA_CACHE_LINE_SIZE 128 */
+#endif /* #ifndef CAA_CACHE_LINE_SIZE */
 
 /*
  * Exclusive locking primitives.
@@ -460,13 +456,25 @@ static void wait_all_threads(void)
        }
 }
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void run_on(int cpu)
 {
+#if HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -489,7 +497,7 @@ long long get_microseconds(void)
 #define DEFINE_PER_THREAD(type, name) \
        struct { \
                __typeof__(type) v \
-                       __attribute__((__aligned__(CACHE_LINE_SIZE))); \
+                       __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))); \
        } __per_thread_##name[NR_THREADS];
 #define DECLARE_PER_THREAD(type, name) extern DEFINE_PER_THREAD(type, name)
 
@@ -523,7 +531,7 @@ long long get_microseconds(void)
 #define DEFINE_PER_CPU(type, name) \
        struct { \
                __typeof__(type) v \
-                       __attribute__((__aligned__(CACHE_LINE_SIZE))); \
+                       __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))); \
        } __per_cpu_##name[NR_CPUS]
 #define DECLARE_PER_CPU(type, name) extern DEFINE_PER_CPU(type, name)
 
@@ -637,10 +645,7 @@ static void smp_init(void)
 #define LIST_POISON1  ((void *) 0x00100100)
 #define LIST_POISON2  ((void *) 0x00200200)
 
-#define container_of(ptr, type, member) ({                     \
-       const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
-       (type *)( (char *)__mptr - offsetof(type,member) );})
-
+#if 0
 /*
  * Simple doubly linked list implementation.
  *
@@ -651,16 +656,16 @@ static void smp_init(void)
  * using the generic single-entry routines.
  */
 
-struct list_head {
-       struct list_head *next, *prev;
+struct cds_list_head {
+       struct cds_list_head *next, *prev;
 };
 
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
+#define CDS_LIST_HEAD_INIT(name) { &(name), &(name) }
 
-#define LIST_HEAD(name) \
-       struct list_head name = LIST_HEAD_INIT(name)
+#define CDS_LIST_HEAD(name) \
+       struct cds_list_head name = CDS_LIST_HEAD_INIT(name)
 
-static inline void INIT_LIST_HEAD(struct list_head *list)
+static inline void CDS_INIT_LIST_HEAD(struct cds_list_head *list)
 {
        list->next = list;
        list->prev = list;
@@ -673,9 +678,9 @@ static inline void INIT_LIST_HEAD(struct list_head *list)
  * the prev/next entries already!
  */
 #ifndef CONFIG_DEBUG_LIST
-static inline void __list_add(struct list_head *new,
-                             struct list_head *prev,
-                             struct list_head *next)
+static inline void __cds_list_add(struct cds_list_head *new,
+                             struct cds_list_head *prev,
+                             struct cds_list_head *next)
 {
        next->prev = new;
        new->next = next;
@@ -683,36 +688,36 @@ static inline void __list_add(struct list_head *new,
        prev->next = new;
 }
 #else
-extern void __list_add(struct list_head *new,
-                             struct list_head *prev,
-                             struct list_head *next);
+extern void __cds_list_add(struct cds_list_head *new,
+                             struct cds_list_head *prev,
+                             struct cds_list_head *next);
 #endif
 
 /**
- * list_add - add a new entry
+ * cds_list_add - add a new entry
  * @new: new entry to be added
  * @head: list head to add it after
  *
  * Insert a new entry after the specified head.
  * This is good for implementing stacks.
  */
-static inline void list_add(struct list_head *new, struct list_head *head)
+static inline void cds_list_add(struct cds_list_head *new, struct cds_list_head *head)
 {
-       __list_add(new, head, head->next);
+       __cds_list_add(new, head, head->next);
 }
 
 
 /**
- * list_add_tail - add a new entry
+ * cds_list_add_tail - add a new entry
  * @new: new entry to be added
  * @head: list head to add it before
  *
  * Insert a new entry before the specified head.
  * This is useful for implementing queues.
  */
-static inline void list_add_tail(struct list_head *new, struct list_head *head)
+static inline void cds_list_add_tail(struct cds_list_head *new, struct cds_list_head *head)
 {
-       __list_add(new, head->prev, head);
+       __cds_list_add(new, head->prev, head);
 }
 
 /*
@@ -722,38 +727,38 @@ static inline void list_add_tail(struct list_head *new, struct list_head *head)
  * This is only for internal list manipulation where we know
  * the prev/next entries already!
  */
-static inline void __list_del(struct list_head * prev, struct list_head * next)
+static inline void __cds_list_del(struct cds_list_head * prev, struct cds_list_head * next)
 {
        next->prev = prev;
        prev->next = next;
 }
 
 /**
- * list_del - deletes entry from list.
+ * cds_list_del - deletes entry from list.
  * @entry: the element to delete from the list.
- * Note: list_empty() on entry does not return true after this, the entry is
+ * Note: cds_list_empty() on entry does not return true after this, the entry is
  * in an undefined state.
  */
 #ifndef CONFIG_DEBUG_LIST
-static inline void list_del(struct list_head *entry)
+static inline void cds_list_del(struct cds_list_head *entry)
 {
-       __list_del(entry->prev, entry->next);
+       __cds_list_del(entry->prev, entry->next);
        entry->next = LIST_POISON1;
        entry->prev = LIST_POISON2;
 }
 #else
-extern void list_del(struct list_head *entry);
+extern void cds_list_del(struct cds_list_head *entry);
 #endif
 
 /**
- * list_replace - replace old entry by new one
+ * cds_list_replace - replace old entry by new one
  * @old : the element to be replaced
  * @new : the new element to insert
  *
  * If @old was empty, it will be overwritten.
  */
-static inline void list_replace(struct list_head *old,
-                               struct list_head *new)
+static inline void cds_list_replace(struct cds_list_head *old,
+                               struct cds_list_head *new)
 {
        new->next = old->next;
        new->next->prev = new;
@@ -761,44 +766,44 @@ static inline void list_replace(struct list_head *old,
        new->prev->next = new;
 }
 
-static inline void list_replace_init(struct list_head *old,
-                                       struct list_head *new)
+static inline void cds_list_replace_init(struct cds_list_head *old,
+                                       struct cds_list_head *new)
 {
-       list_replace(old, new);
-       INIT_LIST_HEAD(old);
+       cds_list_replace(old, new);
+       CDS_INIT_LIST_HEAD(old);
 }
 
 /**
- * list_del_init - deletes entry from list and reinitialize it.
+ * cds_list_del_init - deletes entry from list and reinitialize it.
  * @entry: the element to delete from the list.
  */
-static inline void list_del_init(struct list_head *entry)
+static inline void cds_list_del_init(struct cds_list_head *entry)
 {
-       __list_del(entry->prev, entry->next);
-       INIT_LIST_HEAD(entry);
+       __cds_list_del(entry->prev, entry->next);
+       CDS_INIT_LIST_HEAD(entry);
 }
 
 /**
- * list_move - delete from one list and add as another's head
+ * cds_list_move - delete from one list and add as another's head
  * @list: the entry to move
  * @head: the head that will precede our entry
  */
-static inline void list_move(struct list_head *list, struct list_head *head)
+static inline void cds_list_move(struct cds_list_head *list, struct cds_list_head *head)
 {
-       __list_del(list->prev, list->next);
-       list_add(list, head);
+       __cds_list_del(list->prev, list->next);
+       cds_list_add(list, head);
 }
 
 /**
- * list_move_tail - delete from one list and add as another's tail
+ * cds_list_move_tail - delete from one list and add as another's tail
  * @list: the entry to move
  * @head: the head that will follow our entry
  */
-static inline void list_move_tail(struct list_head *list,
-                                 struct list_head *head)
+static inline void cds_list_move_tail(struct cds_list_head *list,
+                                 struct cds_list_head *head)
 {
-       __list_del(list->prev, list->next);
-       list_add_tail(list, head);
+       __cds_list_del(list->prev, list->next);
+       cds_list_add_tail(list, head);
 }
 
 /**
@@ -806,37 +811,37 @@ static inline void list_move_tail(struct list_head *list,
  * @list: the entry to test
  * @head: the head of the list
  */
-static inline int list_is_last(const struct list_head *list,
-                               const struct list_head *head)
+static inline int list_is_last(const struct cds_list_head *list,
+                               const struct cds_list_head *head)
 {
        return list->next == head;
 }
 
 /**
- * list_empty - tests whether a list is empty
+ * cds_list_empty - tests whether a list is empty
  * @head: the list to test.
  */
-static inline int list_empty(const struct list_head *head)
+static inline int cds_list_empty(const struct cds_list_head *head)
 {
        return head->next == head;
 }
 
 /**
- * list_empty_careful - tests whether a list is empty and not being modified
+ * cds_list_empty_careful - tests whether a list is empty and not being modified
  * @head: the list to test
  *
  * Description:
  * tests whether a list is empty _and_ checks that no other CPU might be
  * in the process of modifying either member (next or prev)
  *
- * NOTE: using list_empty_careful() without synchronization
+ * NOTE: using cds_list_empty_careful() without synchronization
  * can only be safe if the only activity that can happen
- * to the list entry is list_del_init(). Eg. it cannot be used
+ * to the list entry is cds_list_del_init(). Eg. it cannot be used
  * if another CPU could re-list_add() it.
  */
-static inline int list_empty_careful(const struct list_head *head)
+static inline int cds_list_empty_careful(const struct cds_list_head *head)
 {
-       struct list_head *next = head->next;
+       struct cds_list_head *next = head->next;
        return (next == head) && (next == head->prev);
 }
 
@@ -844,15 +849,15 @@ static inline int list_empty_careful(const struct list_head *head)
  * list_is_singular - tests whether a list has just one entry.
  * @head: the list to test.
  */
-static inline int list_is_singular(const struct list_head *head)
+static inline int list_is_singular(const struct cds_list_head *head)
 {
        return !list_empty(head) && (head->next == head->prev);
 }
 
-static inline void __list_cut_position(struct list_head *list,
-               struct list_head *head, struct list_head *entry)
+static inline void __list_cut_position(struct cds_list_head *list,
+               struct cds_list_head *head, struct cds_list_head *entry)
 {
-       struct list_head *new_first = entry->next;
+       struct cds_list_head *new_first = entry->next;
        list->next = head->next;
        list->next->prev = list;
        list->prev = entry;
@@ -875,26 +880,26 @@ static inline void __list_cut_position(struct list_head *list,
  * losing its data.
  *
  */
-static inline void list_cut_position(struct list_head *list,
-               struct list_head *head, struct list_head *entry)
+static inline void list_cut_position(struct cds_list_head *list,
+               struct cds_list_head *head, struct cds_list_head *entry)
 {
-       if (list_empty(head))
+       if (cds_list_empty(head))
                return;
        if (list_is_singular(head) &&
                (head->next != entry && head != entry))
                return;
        if (entry == head)
-               INIT_LIST_HEAD(list);
+               CDS_INIT_LIST_HEAD(list);
        else
                __list_cut_position(list, head, entry);
 }
 
-static inline void __list_splice(const struct list_head *list,
-                                struct list_head *prev,
-                                struct list_head *next)
+static inline void __cds_list_splice(const struct cds_list_head *list,
+                                struct cds_list_head *prev,
+                                struct cds_list_head *next)
 {
-       struct list_head *first = list->next;
-       struct list_head *last = list->prev;
+       struct cds_list_head *first = list->next;
+       struct cds_list_head *last = list->prev;
 
        first->prev = prev;
        prev->next = first;
@@ -904,70 +909,70 @@ static inline void __list_splice(const struct list_head *list,
 }
 
 /**
- * list_splice - join two lists, this is designed for stacks
+ * cds_list_splice - join two lists, this is designed for stacks
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  */
-static inline void list_splice(const struct list_head *list,
-                               struct list_head *head)
+static inline void cds_list_splice(const struct cds_list_head *list,
+                               struct cds_list_head *head)
 {
-       if (!list_empty(list))
-               __list_splice(list, head, head->next);
+       if (!cds_list_empty(list))
+               __cds_list_splice(list, head, head->next);
 }
 
 /**
- * list_splice_tail - join two lists, each list being a queue
+ * cds_list_splice_tail - join two lists, each list being a queue
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  */
-static inline void list_splice_tail(struct list_head *list,
-                               struct list_head *head)
+static inline void cds_list_splice_tail(struct cds_list_head *list,
+                               struct cds_list_head *head)
 {
-       if (!list_empty(list))
-               __list_splice(list, head->prev, head);
+       if (!cds_list_empty(list))
+               __cds_list_splice(list, head->prev, head);
 }
 
 /**
- * list_splice_init - join two lists and reinitialise the emptied list.
+ * cds_list_splice_init - join two lists and reinitialise the emptied list.
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  *
  * The list at @list is reinitialised
  */
-static inline void list_splice_init(struct list_head *list,
-                                   struct list_head *head)
+static inline void cds_list_splice_init(struct cds_list_head *list,
+                                   struct cds_list_head *head)
 {
-       if (!list_empty(list)) {
-               __list_splice(list, head, head->next);
-               INIT_LIST_HEAD(list);
+       if (!cds_list_empty(list)) {
+               __cds_list_splice(list, head, head->next);
+               CDS_INIT_LIST_HEAD(list);
        }
 }
 
 /**
- * list_splice_tail_init - join two lists and reinitialise the emptied list
+ * cds_list_splice_tail_init - join two lists and reinitialise the emptied list
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  *
  * Each of the lists is a queue.
  * The list at @list is reinitialised
  */
-static inline void list_splice_tail_init(struct list_head *list,
-                                        struct list_head *head)
+static inline void cds_list_splice_tail_init(struct cds_list_head *list,
+                                        struct cds_list_head *head)
 {
-       if (!list_empty(list)) {
-               __list_splice(list, head->prev, head);
-               INIT_LIST_HEAD(list);
+       if (!cds_list_empty(list)) {
+               __cds_list_splice(list, head->prev, head);
+               CDS_INIT_LIST_HEAD(list);
        }
 }
 
 /**
- * list_entry - get the struct for this entry
- * @ptr:       the &struct list_head pointer.
+ * cds_list_entry - get the struct for this entry
+ * @ptr:       the &struct cds_list_head pointer.
  * @type:      the type of the struct this is embedded in.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_entry(ptr, type, member) \
-       container_of(ptr, type, member)
+#define cds_list_entry(ptr, type, member) \
+       caa_container_of(ptr, type, member)
 
 /**
  * list_first_entry - get the first element from a list
@@ -978,95 +983,95 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Note, that list is expected to be not empty.
  */
 #define list_first_entry(ptr, type, member) \
-       list_entry((ptr)->next, type, member)
+       cds_list_entry((ptr)->next, type, member)
 
 /**
- * list_for_each       -       iterate over a list
- * @pos:       the &struct list_head to use as a loop cursor.
+ * cds_list_for_each   -       iterate over a list
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  */
-#define list_for_each(pos, head) \
+#define cds_list_for_each(pos, head) \
        for (pos = (head)->next; prefetch(pos->next), pos != (head); \
                pos = pos->next)
 
 /**
- * __list_for_each     -       iterate over a list
- * @pos:       the &struct list_head to use as a loop cursor.
+ * __cds_list_for_each -       iterate over a list
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  *
- * This variant differs from list_for_each() in that it's the
+ * This variant differs from cds_list_for_each() in that it's the
  * simplest possible list iteration code, no prefetching is done.
  * Use this for code that knows the list to be very short (empty
  * or 1 entry) most of the time.
  */
-#define __list_for_each(pos, head) \
+#define __cds_list_for_each(pos, head) \
        for (pos = (head)->next; pos != (head); pos = pos->next)
 
 /**
- * list_for_each_prev  -       iterate over a list backwards
- * @pos:       the &struct list_head to use as a loop cursor.
+ * cds_list_for_each_prev      -       iterate over a list backwards
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  */
-#define list_for_each_prev(pos, head) \
+#define cds_list_for_each_prev(pos, head) \
        for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
                pos = pos->prev)
 
 /**
- * list_for_each_safe - iterate over a list safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop cursor.
- * @n:         another &struct list_head to use as temporary storage
+ * cds_list_for_each_safe - iterate over a list safe against removal of list entry
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
+ * @n:         another &struct cds_list_head to use as temporary storage
  * @head:      the head for your list.
  */
-#define list_for_each_safe(pos, n, head) \
+#define cds_list_for_each_safe(pos, n, head) \
        for (pos = (head)->next, n = pos->next; pos != (head); \
                pos = n, n = pos->next)
 
 /**
- * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop cursor.
- * @n:         another &struct list_head to use as temporary storage
+ * cds_list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
+ * @n:         another &struct cds_list_head to use as temporary storage
  * @head:      the head for your list.
  */
-#define list_for_each_prev_safe(pos, n, head) \
+#define cds_list_for_each_prev_safe(pos, n, head) \
        for (pos = (head)->prev, n = pos->prev; \
             prefetch(pos->prev), pos != (head); \
             pos = n, n = pos->prev)
 
 /**
- * list_for_each_entry -       iterate over list of given type
+ * cds_list_for_each_entry     -       iterate over list of given type
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry(pos, head, member)                         \
-       for (pos = list_entry((head)->next, typeof(*pos), member);      \
+#define cds_list_for_each_entry(pos, head, member)                             \
+       for (pos = cds_list_entry((head)->next, typeof(*pos), member);  \
             prefetch(pos->member.next), &pos->member != (head);        \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_reverse - iterate backwards over list of given type.
+ * cds_list_for_each_entry_reverse - iterate backwards over list of given type.
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry_reverse(pos, head, member)                 \
-       for (pos = list_entry((head)->prev, typeof(*pos), member);      \
+#define cds_list_for_each_entry_reverse(pos, head, member)                     \
+       for (pos = cds_list_entry((head)->prev, typeof(*pos), member);  \
             prefetch(pos->member.prev), &pos->member != (head);        \
-            pos = list_entry(pos->member.prev, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.prev, typeof(*pos), member))
 
 /**
- * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
+ * list_prepare_entry - prepare a pos entry for use in cds_list_for_each_entry_continue()
  * @pos:       the type * to use as a start point
  * @head:      the head of the list
  * @member:    the name of the list_struct within the struct.
  *
- * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
+ * Prepares a pos entry for use as a start point in cds_list_for_each_entry_continue().
  */
 #define list_prepare_entry(pos, head, member) \
-       ((pos) ? : list_entry(head, typeof(*pos), member))
+       ((pos) ? : cds_list_entry(head, typeof(*pos), member))
 
 /**
- * list_for_each_entry_continue - continue iteration over list of given type
+ * cds_list_for_each_entry_continue - continue iteration over list of given type
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
@@ -1074,13 +1079,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Continue to iterate over list of given type, continuing after
  * the current position.
  */
-#define list_for_each_entry_continue(pos, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member);  \
+#define cds_list_for_each_entry_continue(pos, head, member)            \
+       for (pos = cds_list_entry(pos->member.next, typeof(*pos), member);      \
             prefetch(pos->member.next), &pos->member != (head);        \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_continue_reverse - iterate backwards from the given point
+ * cds_list_for_each_entry_continue_reverse - iterate backwards from the given point
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
@@ -1088,38 +1093,38 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Start to iterate over list of given type backwards, continuing after
  * the current position.
  */
-#define list_for_each_entry_continue_reverse(pos, head, member)                \
-       for (pos = list_entry(pos->member.prev, typeof(*pos), member);  \
+#define cds_list_for_each_entry_continue_reverse(pos, head, member)            \
+       for (pos = cds_list_entry(pos->member.prev, typeof(*pos), member);      \
             prefetch(pos->member.prev), &pos->member != (head);        \
-            pos = list_entry(pos->member.prev, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.prev, typeof(*pos), member))
 
 /**
- * list_for_each_entry_from - iterate over list of given type from the current point
+ * cds_list_for_each_entry_from - iterate over list of given type from the current point
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  *
  * Iterate over list of given type, continuing from current position.
  */
-#define list_for_each_entry_from(pos, head, member)                    \
+#define cds_list_for_each_entry_from(pos, head, member)                        \
        for (; prefetch(pos->member.next), &pos->member != (head);      \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * cds_list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry_safe(pos, n, head, member)                 \
-       for (pos = list_entry((head)->next, typeof(*pos), member),      \
-               n = list_entry(pos->member.next, typeof(*pos), member); \
+#define cds_list_for_each_entry_safe(pos, n, head, member)                     \
+       for (pos = cds_list_entry((head)->next, typeof(*pos), member),  \
+               n = cds_list_entry(pos->member.next, typeof(*pos), member);     \
             &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_continue
+ * cds_list_for_each_entry_safe_continue
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1128,14 +1133,14 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate over list of given type, continuing after current point,
  * safe against removal of list entry.
  */
-#define list_for_each_entry_safe_continue(pos, n, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member),          \
-               n = list_entry(pos->member.next, typeof(*pos), member);         \
+#define cds_list_for_each_entry_safe_continue(pos, n, head, member)            \
+       for (pos = cds_list_entry(pos->member.next, typeof(*pos), member),              \
+               n = cds_list_entry(pos->member.next, typeof(*pos), member);             \
             &pos->member != (head);                                            \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_from
+ * cds_list_for_each_entry_safe_from
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1144,13 +1149,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate over list of given type from current point, safe against
  * removal of list entry.
  */
-#define list_for_each_entry_safe_from(pos, n, head, member)                    \
-       for (n = list_entry(pos->member.next, typeof(*pos), member);            \
+#define cds_list_for_each_entry_safe_from(pos, n, head, member)                        \
+       for (n = cds_list_entry(pos->member.next, typeof(*pos), member);                \
             &pos->member != (head);                                            \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_reverse
+ * cds_list_for_each_entry_safe_reverse
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1159,11 +1164,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate backwards over list of given type, safe against removal
  * of list entry.
  */
-#define list_for_each_entry_safe_reverse(pos, n, head, member)         \
-       for (pos = list_entry((head)->prev, typeof(*pos), member),      \
-               n = list_entry(pos->member.prev, typeof(*pos), member); \
+#define cds_list_for_each_entry_safe_reverse(pos, n, head, member)             \
+       for (pos = cds_list_entry((head)->prev, typeof(*pos), member),  \
+               n = cds_list_entry(pos->member.prev, typeof(*pos), member);     \
             &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.prev, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.prev, typeof(*n), member))
+
+#endif //0
 
 /*
  * Double linked lists with a single pointer list head.
@@ -1172,60 +1179,60 @@ static inline void list_splice_tail_init(struct list_head *list,
  * You lose the ability to access the tail in O(1).
  */
 
-struct hlist_head {
-       struct hlist_node *first;
+struct cds_hlist_head {
+       struct cds_hlist_node *first;
 };
 
-struct hlist_node {
-       struct hlist_node *next, **pprev;
+struct cds_hlist_node {
+       struct cds_hlist_node *next, **pprev;
 };
 
 #define HLIST_HEAD_INIT { .first = NULL }
-#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
-#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
-static inline void INIT_HLIST_NODE(struct hlist_node *h)
+#define HLIST_HEAD(name) struct cds_hlist_head name = {  .first = NULL }
+#define CDS_INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
+static inline void INIT_HLIST_NODE(struct cds_hlist_node *h)
 {
        h->next = NULL;
        h->pprev = NULL;
 }
 
-static inline int hlist_unhashed(const struct hlist_node *h)
+static inline int hlist_unhashed(const struct cds_hlist_node *h)
 {
        return !h->pprev;
 }
 
-static inline int hlist_empty(const struct hlist_head *h)
+static inline int hlist_empty(const struct cds_hlist_head *h)
 {
        return !h->first;
 }
 
-static inline void __hlist_del(struct hlist_node *n)
+static inline void __cds_hlist_del(struct cds_hlist_node *n)
 {
-       struct hlist_node *next = n->next;
-       struct hlist_node **pprev = n->pprev;
+       struct cds_hlist_node *next = n->next;
+       struct cds_hlist_node **pprev = n->pprev;
        *pprev = next;
        if (next)
                next->pprev = pprev;
 }
 
-static inline void hlist_del(struct hlist_node *n)
+static inline void cds_hlist_del(struct cds_hlist_node *n)
 {
-       __hlist_del(n);
+       __cds_hlist_del(n);
        n->next = LIST_POISON1;
        n->pprev = LIST_POISON2;
 }
 
-static inline void hlist_del_init(struct hlist_node *n)
+static inline void cds_hlist_del_init(struct cds_hlist_node *n)
 {
        if (!hlist_unhashed(n)) {
-               __hlist_del(n);
+               __cds_hlist_del(n);
                INIT_HLIST_NODE(n);
        }
 }
 
-static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
+static inline void cds_hlist_add_head(struct cds_hlist_node *n, struct cds_hlist_head *h)
 {
-       struct hlist_node *first = h->first;
+       struct cds_hlist_node *first = h->first;
        n->next = first;
        if (first)
                first->pprev = &n->next;
@@ -1234,8 +1241,8 @@ static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
 }
 
 /* next must be != NULL */
-static inline void hlist_add_before(struct hlist_node *n,
-                                       struct hlist_node *next)
+static inline void hlist_add_before(struct cds_hlist_node *n,
+                                       struct cds_hlist_node *next)
 {
        n->pprev = next->pprev;
        n->next = next;
@@ -1243,8 +1250,8 @@ static inline void hlist_add_before(struct hlist_node *n,
        *(n->pprev) = n;
 }
 
-static inline void hlist_add_after(struct hlist_node *n,
-                                       struct hlist_node *next)
+static inline void hlist_add_after(struct cds_hlist_node *n,
+                                       struct cds_hlist_node *next)
 {
        next->next = n->next;
        n->next = next;
@@ -1258,8 +1265,8 @@ static inline void hlist_add_after(struct hlist_node *n,
  * Move a list from one list head to another. Fixup the pprev
  * reference of the first entry if it exists.
  */
-static inline void hlist_move_list(struct hlist_head *old,
-                                  struct hlist_head *new)
+static inline void hlist_move_list(struct cds_hlist_head *old,
+                                  struct cds_hlist_head *new)
 {
        new->first = old->first;
        if (new->first)
@@ -1267,64 +1274,66 @@ static inline void hlist_move_list(struct hlist_head *old,
        old->first = NULL;
 }
 
-#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
+#define cds_hlist_entry(ptr, type, member) caa_container_of(ptr,type,member)
 
-#define hlist_for_each(pos, head) \
+#define cds_hlist_for_each(pos, head) \
        for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
             pos = pos->next)
 
-#define hlist_for_each_safe(pos, n, head) \
+#define cds_hlist_for_each_safe(pos, n, head) \
        for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
             pos = n)
 
 /**
- * hlist_for_each_entry        - iterate over list of given type
+ * cds_hlist_for_each_entry    - iterate over list of given type
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
  * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry(tpos, pos, head, member)                   \
+#define cds_hlist_for_each_entry(tpos, pos, head, member)                       \
        for (pos = (head)->first;                                        \
             pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
+ * cds_hlist_for_each_entry_continue - iterate over a hlist continuing after current point
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @member:    the name of the hlist_node within the struct.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_continue(tpos, pos, member)                \
+#define cds_hlist_for_each_entry_continue(tpos, pos, member)            \
        for (pos = (pos)->next;                                          \
             pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_from - iterate over a hlist continuing from current point
+ * cds_hlist_for_each_entry_from - iterate over a hlist continuing from current point
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @member:    the name of the hlist_node within the struct.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_from(tpos, pos, member)                    \
+#define cds_hlist_for_each_entry_from(tpos, pos, member)                        \
        for (; pos && ({ prefetch(pos->next); 1;}) &&                    \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * cds_hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @n:         another &struct hlist_node to use as temporary storage
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @n:         another &struct cds_hlist_node to use as temporary storage
  * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_safe(tpos, pos, n, head, member)           \
+#define cds_hlist_for_each_entry_safe(tpos, pos, n, head, member)               \
        for (pos = (head)->first;                                        \
             pos && ({ n = pos->next; 1; }) &&                           \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = n)
 
 #endif
+
+#endif
index 8359d042b9b9878bdf2432e0da5943a5ec4e880d..038c9cb054a81762c25c77d6b9ca34dabc22191a 100644 (file)
@@ -1,5 +1,6 @@
 /* MECHANICALLY GENERATED, DO NOT EDIT!!! */
 
+#ifndef _INCLUDE_API_H
 #define _INCLUDE_API_H
 
 /*
@@ -25,6 +26,8 @@
  * to redistribute under later versions of GPL might not be available.
  */
 
+#include <urcu/arch.h>
+
 #ifndef __always_inline
 #define __always_inline inline
 #endif
@@ -73,7 +76,7 @@
 
 #define CONFIG_PPC64
 
-#define CACHE_LINE_SIZE 128
+/*#define CAA_CACHE_LINE_SIZE 128 */
 #define ____cacheline_internodealigned_in_smp \
        __attribute__((__aligned__(1 << 7)))
 
@@ -613,10 +616,10 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
 #define atomic_dec_return(v)  (atomic_sub_return(1,v))
 
 /* Atomic operations are already serializing on x86 */
-#define smp_mb__before_atomic_dec()    smp_mb()
-#define smp_mb__after_atomic_dec()     smp_mb()
-#define smp_mb__before_atomic_inc()    smp_mb()
-#define smp_mb__after_atomic_inc()     smp_mb()
+#define smp_mb__before_atomic_dec()    cmm_smp_mb()
+#define smp_mb__after_atomic_dec()     cmm_smp_mb()
+#define smp_mb__before_atomic_inc()    cmm_smp_mb()
+#define smp_mb__after_atomic_inc()     cmm_smp_mb()
 
 #endif //0 /* duplicate with arch_atomic.h */
 
@@ -653,20 +656,13 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
 #include <sys/param.h>
 /* #include "atomic.h" */
 
-/*
- * Compiler magic.
- */
-#define container_of(ptr, type, member) ({                     \
-       const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
-       (type *)( (char *)__mptr - offsetof(type,member) );})
-
 /*
  * Default machine parameters.
  */
 
-#ifndef CACHE_LINE_SIZE
-#define CACHE_LINE_SIZE 128
-#endif /* #ifndef CACHE_LINE_SIZE */
+#ifndef CAA_CACHE_LINE_SIZE
+/* #define CAA_CACHE_LINE_SIZE 128 */
+#endif /* #ifndef CAA_CACHE_LINE_SIZE */
 
 /*
  * Exclusive locking primitives.
@@ -859,7 +855,7 @@ long long get_microseconds(void)
 #define DEFINE_PER_THREAD(type, name) \
        struct { \
                __typeof__(type) v \
-                       __attribute__((__aligned__(CACHE_LINE_SIZE))); \
+                       __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))); \
        } __per_thread_##name[NR_THREADS];
 #define DECLARE_PER_THREAD(type, name) extern DEFINE_PER_THREAD(type, name)
 
@@ -893,7 +889,7 @@ long long get_microseconds(void)
 #define DEFINE_PER_CPU(type, name) \
        struct { \
                __typeof__(type) v \
-                       __attribute__((__aligned__(CACHE_LINE_SIZE))); \
+                       __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))); \
        } __per_cpu_##name[NR_CPUS]
 #define DECLARE_PER_CPU(type, name) extern DEFINE_PER_CPU(type, name)
 
@@ -1007,9 +1003,7 @@ static void smp_init(void)
 #define LIST_POISON1  ((void *) 0x00100100)
 #define LIST_POISON2  ((void *) 0x00200200)
 
-#define container_of(ptr, type, member) ({                     \
-       const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
-       (type *)( (char *)__mptr - offsetof(type,member) );})
+#if 0
 
 /*
  * Simple doubly linked list implementation.
@@ -1021,16 +1015,16 @@ static void smp_init(void)
  * using the generic single-entry routines.
  */
 
-struct list_head {
-       struct list_head *next, *prev;
+struct cds_list_head {
+       struct cds_list_head *next, *prev;
 };
 
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
+#define CDS_LIST_HEAD_INIT(name) { &(name), &(name) }
 
-#define LIST_HEAD(name) \
-       struct list_head name = LIST_HEAD_INIT(name)
+#define CDS_LIST_HEAD(name) \
+       struct cds_list_head name = CDS_LIST_HEAD_INIT(name)
 
-static inline void INIT_LIST_HEAD(struct list_head *list)
+static inline void CDS_INIT_LIST_HEAD(struct cds_list_head *list)
 {
        list->next = list;
        list->prev = list;
@@ -1043,9 +1037,9 @@ static inline void INIT_LIST_HEAD(struct list_head *list)
  * the prev/next entries already!
  */
 #ifndef CONFIG_DEBUG_LIST
-static inline void __list_add(struct list_head *new,
-                             struct list_head *prev,
-                             struct list_head *next)
+static inline void __cds_list_add(struct cds_list_head *new,
+                             struct cds_list_head *prev,
+                             struct cds_list_head *next)
 {
        next->prev = new;
        new->next = next;
@@ -1053,36 +1047,36 @@ static inline void __list_add(struct list_head *new,
        prev->next = new;
 }
 #else
-extern void __list_add(struct list_head *new,
-                             struct list_head *prev,
-                             struct list_head *next);
+extern void __cds_list_add(struct cds_list_head *new,
+                             struct cds_list_head *prev,
+                             struct cds_list_head *next);
 #endif
 
 /**
- * list_add - add a new entry
+ * cds_list_add - add a new entry
  * @new: new entry to be added
  * @head: list head to add it after
  *
  * Insert a new entry after the specified head.
  * This is good for implementing stacks.
  */
-static inline void list_add(struct list_head *new, struct list_head *head)
+static inline void cds_list_add(struct cds_list_head *new, struct cds_list_head *head)
 {
-       __list_add(new, head, head->next);
+       __cds_list_add(new, head, head->next);
 }
 
 
 /**
- * list_add_tail - add a new entry
+ * cds_list_add_tail - add a new entry
  * @new: new entry to be added
  * @head: list head to add it before
  *
  * Insert a new entry before the specified head.
  * This is useful for implementing queues.
  */
-static inline void list_add_tail(struct list_head *new, struct list_head *head)
+static inline void cds_list_add_tail(struct cds_list_head *new, struct cds_list_head *head)
 {
-       __list_add(new, head->prev, head);
+       __cds_list_add(new, head->prev, head);
 }
 
 /*
@@ -1092,38 +1086,38 @@ static inline void list_add_tail(struct list_head *new, struct list_head *head)
  * This is only for internal list manipulation where we know
  * the prev/next entries already!
  */
-static inline void __list_del(struct list_head * prev, struct list_head * next)
+static inline void __cds_list_del(struct cds_list_head * prev, struct cds_list_head * next)
 {
        next->prev = prev;
        prev->next = next;
 }
 
 /**
- * list_del - deletes entry from list.
+ * cds_list_del - deletes entry from list.
  * @entry: the element to delete from the list.
- * Note: list_empty() on entry does not return true after this, the entry is
+ * Note: cds_list_empty() on entry does not return true after this, the entry is
  * in an undefined state.
  */
 #ifndef CONFIG_DEBUG_LIST
-static inline void list_del(struct list_head *entry)
+static inline void cds_list_del(struct cds_list_head *entry)
 {
-       __list_del(entry->prev, entry->next);
+       __cds_list_del(entry->prev, entry->next);
        entry->next = LIST_POISON1;
        entry->prev = LIST_POISON2;
 }
 #else
-extern void list_del(struct list_head *entry);
+extern void cds_list_del(struct cds_list_head *entry);
 #endif
 
 /**
- * list_replace - replace old entry by new one
+ * cds_list_replace - replace old entry by new one
  * @old : the element to be replaced
  * @new : the new element to insert
  *
  * If @old was empty, it will be overwritten.
  */
-static inline void list_replace(struct list_head *old,
-                               struct list_head *new)
+static inline void cds_list_replace(struct cds_list_head *old,
+                               struct cds_list_head *new)
 {
        new->next = old->next;
        new->next->prev = new;
@@ -1131,44 +1125,44 @@ static inline void list_replace(struct list_head *old,
        new->prev->next = new;
 }
 
-static inline void list_replace_init(struct list_head *old,
-                                       struct list_head *new)
+static inline void cds_list_replace_init(struct cds_list_head *old,
+                                       struct cds_list_head *new)
 {
-       list_replace(old, new);
-       INIT_LIST_HEAD(old);
+       cds_list_replace(old, new);
+       CDS_INIT_LIST_HEAD(old);
 }
 
 /**
- * list_del_init - deletes entry from list and reinitialize it.
+ * cds_list_del_init - deletes entry from list and reinitialize it.
  * @entry: the element to delete from the list.
  */
-static inline void list_del_init(struct list_head *entry)
+static inline void cds_list_del_init(struct cds_list_head *entry)
 {
-       __list_del(entry->prev, entry->next);
-       INIT_LIST_HEAD(entry);
+       __cds_list_del(entry->prev, entry->next);
+       CDS_INIT_LIST_HEAD(entry);
 }
 
 /**
- * list_move - delete from one list and add as another's head
+ * cds_list_move - delete from one list and add as another's head
  * @list: the entry to move
  * @head: the head that will precede our entry
  */
-static inline void list_move(struct list_head *list, struct list_head *head)
+static inline void cds_list_move(struct cds_list_head *list, struct cds_list_head *head)
 {
-       __list_del(list->prev, list->next);
-       list_add(list, head);
+       __cds_list_del(list->prev, list->next);
+       cds_list_add(list, head);
 }
 
 /**
- * list_move_tail - delete from one list and add as another's tail
+ * cds_list_move_tail - delete from one list and add as another's tail
  * @list: the entry to move
  * @head: the head that will follow our entry
  */
-static inline void list_move_tail(struct list_head *list,
-                                 struct list_head *head)
+static inline void cds_list_move_tail(struct cds_list_head *list,
+                                 struct cds_list_head *head)
 {
-       __list_del(list->prev, list->next);
-       list_add_tail(list, head);
+       __cds_list_del(list->prev, list->next);
+       cds_list_add_tail(list, head);
 }
 
 /**
@@ -1176,37 +1170,37 @@ static inline void list_move_tail(struct list_head *list,
  * @list: the entry to test
  * @head: the head of the list
  */
-static inline int list_is_last(const struct list_head *list,
-                               const struct list_head *head)
+static inline int list_is_last(const struct cds_list_head *list,
+                               const struct cds_list_head *head)
 {
        return list->next == head;
 }
 
 /**
- * list_empty - tests whether a list is empty
+ * cds_list_empty - tests whether a list is empty
  * @head: the list to test.
  */
-static inline int list_empty(const struct list_head *head)
+static inline int cds_list_empty(const struct cds_list_head *head)
 {
        return head->next == head;
 }
 
 /**
- * list_empty_careful - tests whether a list is empty and not being modified
+ * cds_list_empty_careful - tests whether a list is empty and not being modified
  * @head: the list to test
  *
  * Description:
  * tests whether a list is empty _and_ checks that no other CPU might be
  * in the process of modifying either member (next or prev)
  *
- * NOTE: using list_empty_careful() without synchronization
+ * NOTE: using cds_list_empty_careful() without synchronization
  * can only be safe if the only activity that can happen
- * to the list entry is list_del_init(). Eg. it cannot be used
+ * to the list entry is cds_list_del_init(). Eg. it cannot be used
  * if another CPU could re-list_add() it.
  */
-static inline int list_empty_careful(const struct list_head *head)
+static inline int cds_list_empty_careful(const struct cds_list_head *head)
 {
-       struct list_head *next = head->next;
+       struct cds_list_head *next = head->next;
        return (next == head) && (next == head->prev);
 }
 
@@ -1214,15 +1208,15 @@ static inline int list_empty_careful(const struct list_head *head)
  * list_is_singular - tests whether a list has just one entry.
  * @head: the list to test.
  */
-static inline int list_is_singular(const struct list_head *head)
+static inline int list_is_singular(const struct cds_list_head *head)
 {
        return !list_empty(head) && (head->next == head->prev);
 }
 
-static inline void __list_cut_position(struct list_head *list,
-               struct list_head *head, struct list_head *entry)
+static inline void __list_cut_position(struct cds_list_head *list,
+               struct cds_list_head *head, struct cds_list_head *entry)
 {
-       struct list_head *new_first = entry->next;
+       struct cds_list_head *new_first = entry->next;
        list->next = head->next;
        list->next->prev = list;
        list->prev = entry;
@@ -1245,26 +1239,26 @@ static inline void __list_cut_position(struct list_head *list,
  * losing its data.
  *
  */
-static inline void list_cut_position(struct list_head *list,
-               struct list_head *head, struct list_head *entry)
+static inline void list_cut_position(struct cds_list_head *list,
+               struct cds_list_head *head, struct cds_list_head *entry)
 {
-       if (list_empty(head))
+       if (cds_list_empty(head))
                return;
        if (list_is_singular(head) &&
                (head->next != entry && head != entry))
                return;
        if (entry == head)
-               INIT_LIST_HEAD(list);
+               CDS_INIT_LIST_HEAD(list);
        else
                __list_cut_position(list, head, entry);
 }
 
-static inline void __list_splice(const struct list_head *list,
-                                struct list_head *prev,
-                                struct list_head *next)
+static inline void __cds_list_splice(const struct cds_list_head *list,
+                                struct cds_list_head *prev,
+                                struct cds_list_head *next)
 {
-       struct list_head *first = list->next;
-       struct list_head *last = list->prev;
+       struct cds_list_head *first = list->next;
+       struct cds_list_head *last = list->prev;
 
        first->prev = prev;
        prev->next = first;
@@ -1274,70 +1268,70 @@ static inline void __list_splice(const struct list_head *list,
 }
 
 /**
- * list_splice - join two lists, this is designed for stacks
+ * cds_list_splice - join two lists, this is designed for stacks
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  */
-static inline void list_splice(const struct list_head *list,
-                               struct list_head *head)
+static inline void cds_list_splice(const struct cds_list_head *list,
+                               struct cds_list_head *head)
 {
-       if (!list_empty(list))
-               __list_splice(list, head, head->next);
+       if (!cds_list_empty(list))
+               __cds_list_splice(list, head, head->next);
 }
 
 /**
- * list_splice_tail - join two lists, each list being a queue
+ * cds_list_splice_tail - join two lists, each list being a queue
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  */
-static inline void list_splice_tail(struct list_head *list,
-                               struct list_head *head)
+static inline void cds_list_splice_tail(struct cds_list_head *list,
+                               struct cds_list_head *head)
 {
-       if (!list_empty(list))
-               __list_splice(list, head->prev, head);
+       if (!cds_list_empty(list))
+               __cds_list_splice(list, head->prev, head);
 }
 
 /**
- * list_splice_init - join two lists and reinitialise the emptied list.
+ * cds_list_splice_init - join two lists and reinitialise the emptied list.
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  *
  * The list at @list is reinitialised
  */
-static inline void list_splice_init(struct list_head *list,
-                                   struct list_head *head)
+static inline void cds_list_splice_init(struct cds_list_head *list,
+                                   struct cds_list_head *head)
 {
-       if (!list_empty(list)) {
-               __list_splice(list, head, head->next);
-               INIT_LIST_HEAD(list);
+       if (!cds_list_empty(list)) {
+               __cds_list_splice(list, head, head->next);
+               CDS_INIT_LIST_HEAD(list);
        }
 }
 
 /**
- * list_splice_tail_init - join two lists and reinitialise the emptied list
+ * cds_list_splice_tail_init - join two lists and reinitialise the emptied list
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  *
  * Each of the lists is a queue.
  * The list at @list is reinitialised
  */
-static inline void list_splice_tail_init(struct list_head *list,
-                                        struct list_head *head)
+static inline void cds_list_splice_tail_init(struct cds_list_head *list,
+                                        struct cds_list_head *head)
 {
-       if (!list_empty(list)) {
-               __list_splice(list, head->prev, head);
-               INIT_LIST_HEAD(list);
+       if (!cds_list_empty(list)) {
+               __cds_list_splice(list, head->prev, head);
+               CDS_INIT_LIST_HEAD(list);
        }
 }
 
 /**
- * list_entry - get the struct for this entry
- * @ptr:       the &struct list_head pointer.
+ * cds_list_entry - get the struct for this entry
+ * @ptr:       the &struct cds_list_head pointer.
  * @type:      the type of the struct this is embedded in.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_entry(ptr, type, member) \
-       container_of(ptr, type, member)
+#define cds_list_entry(ptr, type, member) \
+       caa_container_of(ptr, type, member)
 
 /**
  * list_first_entry - get the first element from a list
@@ -1348,95 +1342,95 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Note, that list is expected to be not empty.
  */
 #define list_first_entry(ptr, type, member) \
-       list_entry((ptr)->next, type, member)
+       cds_list_entry((ptr)->next, type, member)
 
 /**
- * list_for_each       -       iterate over a list
- * @pos:       the &struct list_head to use as a loop cursor.
+ * cds_list_for_each   -       iterate over a list
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  */
-#define list_for_each(pos, head) \
+#define cds_list_for_each(pos, head) \
        for (pos = (head)->next; prefetch(pos->next), pos != (head); \
                pos = pos->next)
 
 /**
- * __list_for_each     -       iterate over a list
- * @pos:       the &struct list_head to use as a loop cursor.
+ * __cds_list_for_each -       iterate over a list
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  *
- * This variant differs from list_for_each() in that it's the
+ * This variant differs from cds_list_for_each() in that it's the
  * simplest possible list iteration code, no prefetching is done.
  * Use this for code that knows the list to be very short (empty
  * or 1 entry) most of the time.
  */
-#define __list_for_each(pos, head) \
+#define __cds_list_for_each(pos, head) \
        for (pos = (head)->next; pos != (head); pos = pos->next)
 
 /**
- * list_for_each_prev  -       iterate over a list backwards
- * @pos:       the &struct list_head to use as a loop cursor.
+ * cds_list_for_each_prev      -       iterate over a list backwards
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  */
-#define list_for_each_prev(pos, head) \
+#define cds_list_for_each_prev(pos, head) \
        for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
                pos = pos->prev)
 
 /**
- * list_for_each_safe - iterate over a list safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop cursor.
- * @n:         another &struct list_head to use as temporary storage
+ * cds_list_for_each_safe - iterate over a list safe against removal of list entry
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
+ * @n:         another &struct cds_list_head to use as temporary storage
  * @head:      the head for your list.
  */
-#define list_for_each_safe(pos, n, head) \
+#define cds_list_for_each_safe(pos, n, head) \
        for (pos = (head)->next, n = pos->next; pos != (head); \
                pos = n, n = pos->next)
 
 /**
- * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop cursor.
- * @n:         another &struct list_head to use as temporary storage
+ * cds_list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
+ * @n:         another &struct cds_list_head to use as temporary storage
  * @head:      the head for your list.
  */
-#define list_for_each_prev_safe(pos, n, head) \
+#define cds_list_for_each_prev_safe(pos, n, head) \
        for (pos = (head)->prev, n = pos->prev; \
             prefetch(pos->prev), pos != (head); \
             pos = n, n = pos->prev)
 
 /**
- * list_for_each_entry -       iterate over list of given type
+ * cds_list_for_each_entry     -       iterate over list of given type
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry(pos, head, member)                         \
-       for (pos = list_entry((head)->next, typeof(*pos), member);      \
+#define cds_list_for_each_entry(pos, head, member)                             \
+       for (pos = cds_list_entry((head)->next, typeof(*pos), member);  \
             prefetch(pos->member.next), &pos->member != (head);        \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_reverse - iterate backwards over list of given type.
+ * cds_list_for_each_entry_reverse - iterate backwards over list of given type.
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry_reverse(pos, head, member)                 \
-       for (pos = list_entry((head)->prev, typeof(*pos), member);      \
+#define cds_list_for_each_entry_reverse(pos, head, member)                     \
+       for (pos = cds_list_entry((head)->prev, typeof(*pos), member);  \
             prefetch(pos->member.prev), &pos->member != (head);        \
-            pos = list_entry(pos->member.prev, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.prev, typeof(*pos), member))
 
 /**
- * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
+ * list_prepare_entry - prepare a pos entry for use in cds_list_for_each_entry_continue()
  * @pos:       the type * to use as a start point
  * @head:      the head of the list
  * @member:    the name of the list_struct within the struct.
  *
- * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
+ * Prepares a pos entry for use as a start point in cds_list_for_each_entry_continue().
  */
 #define list_prepare_entry(pos, head, member) \
-       ((pos) ? : list_entry(head, typeof(*pos), member))
+       ((pos) ? : cds_list_entry(head, typeof(*pos), member))
 
 /**
- * list_for_each_entry_continue - continue iteration over list of given type
+ * cds_list_for_each_entry_continue - continue iteration over list of given type
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
@@ -1444,13 +1438,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Continue to iterate over list of given type, continuing after
  * the current position.
  */
-#define list_for_each_entry_continue(pos, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member);  \
+#define cds_list_for_each_entry_continue(pos, head, member)            \
+       for (pos = cds_list_entry(pos->member.next, typeof(*pos), member);      \
             prefetch(pos->member.next), &pos->member != (head);        \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_continue_reverse - iterate backwards from the given point
+ * cds_list_for_each_entry_continue_reverse - iterate backwards from the given point
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
@@ -1458,38 +1452,38 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Start to iterate over list of given type backwards, continuing after
  * the current position.
  */
-#define list_for_each_entry_continue_reverse(pos, head, member)                \
-       for (pos = list_entry(pos->member.prev, typeof(*pos), member);  \
+#define cds_list_for_each_entry_continue_reverse(pos, head, member)            \
+       for (pos = cds_list_entry(pos->member.prev, typeof(*pos), member);      \
             prefetch(pos->member.prev), &pos->member != (head);        \
-            pos = list_entry(pos->member.prev, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.prev, typeof(*pos), member))
 
 /**
- * list_for_each_entry_from - iterate over list of given type from the current point
+ * cds_list_for_each_entry_from - iterate over list of given type from the current point
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  *
  * Iterate over list of given type, continuing from current position.
  */
-#define list_for_each_entry_from(pos, head, member)                    \
+#define cds_list_for_each_entry_from(pos, head, member)                        \
        for (; prefetch(pos->member.next), &pos->member != (head);      \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * cds_list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry_safe(pos, n, head, member)                 \
-       for (pos = list_entry((head)->next, typeof(*pos), member),      \
-               n = list_entry(pos->member.next, typeof(*pos), member); \
+#define cds_list_for_each_entry_safe(pos, n, head, member)                     \
+       for (pos = cds_list_entry((head)->next, typeof(*pos), member),  \
+               n = cds_list_entry(pos->member.next, typeof(*pos), member);     \
             &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_continue
+ * cds_list_for_each_entry_safe_continue
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1498,14 +1492,14 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate over list of given type, continuing after current point,
  * safe against removal of list entry.
  */
-#define list_for_each_entry_safe_continue(pos, n, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member),          \
-               n = list_entry(pos->member.next, typeof(*pos), member);         \
+#define cds_list_for_each_entry_safe_continue(pos, n, head, member)            \
+       for (pos = cds_list_entry(pos->member.next, typeof(*pos), member),              \
+               n = cds_list_entry(pos->member.next, typeof(*pos), member);             \
             &pos->member != (head);                                            \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_from
+ * cds_list_for_each_entry_safe_from
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1514,13 +1508,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate over list of given type from current point, safe against
  * removal of list entry.
  */
-#define list_for_each_entry_safe_from(pos, n, head, member)                    \
-       for (n = list_entry(pos->member.next, typeof(*pos), member);            \
+#define cds_list_for_each_entry_safe_from(pos, n, head, member)                        \
+       for (n = cds_list_entry(pos->member.next, typeof(*pos), member);                \
             &pos->member != (head);                                            \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_reverse
+ * cds_list_for_each_entry_safe_reverse
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1529,11 +1523,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate backwards over list of given type, safe against removal
  * of list entry.
  */
-#define list_for_each_entry_safe_reverse(pos, n, head, member)         \
-       for (pos = list_entry((head)->prev, typeof(*pos), member),      \
-               n = list_entry(pos->member.prev, typeof(*pos), member); \
+#define cds_list_for_each_entry_safe_reverse(pos, n, head, member)             \
+       for (pos = cds_list_entry((head)->prev, typeof(*pos), member),  \
+               n = cds_list_entry(pos->member.prev, typeof(*pos), member);     \
             &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.prev, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.prev, typeof(*n), member))
+
+#endif //0
 
 /*
  * Double linked lists with a single pointer list head.
@@ -1542,60 +1538,60 @@ static inline void list_splice_tail_init(struct list_head *list,
  * You lose the ability to access the tail in O(1).
  */
 
-struct hlist_head {
-       struct hlist_node *first;
+struct cds_hlist_head {
+       struct cds_hlist_node *first;
 };
 
-struct hlist_node {
-       struct hlist_node *next, **pprev;
+struct cds_hlist_node {
+       struct cds_hlist_node *next, **pprev;
 };
 
 #define HLIST_HEAD_INIT { .first = NULL }
-#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
-#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
-static inline void INIT_HLIST_NODE(struct hlist_node *h)
+#define HLIST_HEAD(name) struct cds_hlist_head name = {  .first = NULL }
+#define CDS_INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
+static inline void INIT_HLIST_NODE(struct cds_hlist_node *h)
 {
        h->next = NULL;
        h->pprev = NULL;
 }
 
-static inline int hlist_unhashed(const struct hlist_node *h)
+static inline int hlist_unhashed(const struct cds_hlist_node *h)
 {
        return !h->pprev;
 }
 
-static inline int hlist_empty(const struct hlist_head *h)
+static inline int hlist_empty(const struct cds_hlist_head *h)
 {
        return !h->first;
 }
 
-static inline void __hlist_del(struct hlist_node *n)
+static inline void __cds_hlist_del(struct cds_hlist_node *n)
 {
-       struct hlist_node *next = n->next;
-       struct hlist_node **pprev = n->pprev;
+       struct cds_hlist_node *next = n->next;
+       struct cds_hlist_node **pprev = n->pprev;
        *pprev = next;
        if (next)
                next->pprev = pprev;
 }
 
-static inline void hlist_del(struct hlist_node *n)
+static inline void cds_hlist_del(struct cds_hlist_node *n)
 {
-       __hlist_del(n);
+       __cds_hlist_del(n);
        n->next = LIST_POISON1;
        n->pprev = LIST_POISON2;
 }
 
-static inline void hlist_del_init(struct hlist_node *n)
+static inline void cds_hlist_del_init(struct cds_hlist_node *n)
 {
        if (!hlist_unhashed(n)) {
-               __hlist_del(n);
+               __cds_hlist_del(n);
                INIT_HLIST_NODE(n);
        }
 }
 
-static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
+static inline void cds_hlist_add_head(struct cds_hlist_node *n, struct cds_hlist_head *h)
 {
-       struct hlist_node *first = h->first;
+       struct cds_hlist_node *first = h->first;
        n->next = first;
        if (first)
                first->pprev = &n->next;
@@ -1604,8 +1600,8 @@ static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
 }
 
 /* next must be != NULL */
-static inline void hlist_add_before(struct hlist_node *n,
-                                       struct hlist_node *next)
+static inline void hlist_add_before(struct cds_hlist_node *n,
+                                       struct cds_hlist_node *next)
 {
        n->pprev = next->pprev;
        n->next = next;
@@ -1613,8 +1609,8 @@ static inline void hlist_add_before(struct hlist_node *n,
        *(n->pprev) = n;
 }
 
-static inline void hlist_add_after(struct hlist_node *n,
-                                       struct hlist_node *next)
+static inline void hlist_add_after(struct cds_hlist_node *n,
+                                       struct cds_hlist_node *next)
 {
        next->next = n->next;
        n->next = next;
@@ -1628,8 +1624,8 @@ static inline void hlist_add_after(struct hlist_node *n,
  * Move a list from one list head to another. Fixup the pprev
  * reference of the first entry if it exists.
  */
-static inline void hlist_move_list(struct hlist_head *old,
-                                  struct hlist_head *new)
+static inline void hlist_move_list(struct cds_hlist_head *old,
+                                  struct cds_hlist_head *new)
 {
        new->first = old->first;
        if (new->first)
@@ -1637,64 +1633,66 @@ static inline void hlist_move_list(struct hlist_head *old,
        old->first = NULL;
 }
 
-#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
+#define cds_hlist_entry(ptr, type, member) caa_container_of(ptr,type,member)
 
-#define hlist_for_each(pos, head) \
+#define cds_hlist_for_each(pos, head) \
        for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
             pos = pos->next)
 
-#define hlist_for_each_safe(pos, n, head) \
+#define cds_hlist_for_each_safe(pos, n, head) \
        for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
             pos = n)
 
 /**
- * hlist_for_each_entry        - iterate over list of given type
+ * cds_hlist_for_each_entry    - iterate over list of given type
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
  * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry(tpos, pos, head, member)                   \
+#define cds_hlist_for_each_entry(tpos, pos, head, member)                       \
        for (pos = (head)->first;                                        \
             pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
+ * cds_hlist_for_each_entry_continue - iterate over a hlist continuing after current point
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @member:    the name of the hlist_node within the struct.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_continue(tpos, pos, member)                \
+#define cds_hlist_for_each_entry_continue(tpos, pos, member)            \
        for (pos = (pos)->next;                                          \
             pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_from - iterate over a hlist continuing from current point
+ * cds_hlist_for_each_entry_from - iterate over a hlist continuing from current point
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @member:    the name of the hlist_node within the struct.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_from(tpos, pos, member)                    \
+#define cds_hlist_for_each_entry_from(tpos, pos, member)                        \
        for (; pos && ({ prefetch(pos->next); 1;}) &&                    \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * cds_hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @n:         another &struct hlist_node to use as temporary storage
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @n:         another &struct cds_hlist_node to use as temporary storage
  * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_safe(tpos, pos, n, head, member)           \
+#define cds_hlist_for_each_entry_safe(tpos, pos, n, head, member)               \
        for (pos = (head)->first;                                        \
             pos && ({ n = pos->next; 1; }) &&                           \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = n)
 
 #endif
+
+#endif
index 9ca5500758b3778dbfea79b7aa31f7c8e1785b13..527221c55eda3efab0239353de8e9d9a5efd92e5 100644 (file)
@@ -1,7 +1,10 @@
 /* MECHANICALLY GENERATED, DO NOT EDIT!!! */
 
+#ifndef _INCLUDE_API_H
 #define _INCLUDE_API_H
 
+#include "../config.h"
+
 /*
  * common.h: Common Linux kernel-isms.
  *
@@ -25,6 +28,8 @@
  * to redistribute under later versions of GPL might not be available.
  */
 
+#include <urcu/arch.h>
+
 #ifndef __always_inline
 #define __always_inline inline
 #endif
@@ -71,7 +76,7 @@
  * Machine parameters.
  */
 
-#define CACHE_LINE_SIZE 64
+/* #define CAA_CACHE_LINE_SIZE 64 */
 #define ____cacheline_internodealigned_in_smp \
        __attribute__((__aligned__(1 << 6)))
 
@@ -307,10 +312,10 @@ __asm__ __volatile__(LOCK_PREFIX "orl %0,%1" \
 : : "r" (mask),"m" (*(addr)) : "memory")
 
 /* Atomic operations are already serializing on x86 */
-#define smp_mb__before_atomic_dec()    barrier()
-#define smp_mb__after_atomic_dec()     barrier()
-#define smp_mb__before_atomic_inc()    barrier()
-#define smp_mb__after_atomic_inc()     barrier()
+#define smp_mb__before_atomic_dec()    cmm_barrier()
+#define smp_mb__after_atomic_dec()     cmm_barrier()
+#define smp_mb__before_atomic_inc()    cmm_barrier()
+#define smp_mb__after_atomic_inc()     cmm_barrier()
 
 #endif //0
 
@@ -347,20 +352,13 @@ __asm__ __volatile__(LOCK_PREFIX "orl %0,%1" \
 #include <sys/param.h>
 /* #include "atomic.h" */
 
-/*
- * Compiler magic.
- */
-#define container_of(ptr, type, member) ({                     \
-       const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
-       (type *)( (char *)__mptr - offsetof(type,member) );})
-
 /*
  * Default machine parameters.
  */
 
-#ifndef CACHE_LINE_SIZE
-#define CACHE_LINE_SIZE 128
-#endif /* #ifndef CACHE_LINE_SIZE */
+#ifndef CAA_CACHE_LINE_SIZE
+/* #define CAA_CACHE_LINE_SIZE 128 */
+#endif /* #ifndef CAA_CACHE_LINE_SIZE */
 
 /*
  * Exclusive locking primitives.
@@ -406,8 +404,8 @@ typedef pthread_t thread_id_t;
 
 #define NR_THREADS 128
 
-#define __THREAD_ID_MAP_EMPTY 0
-#define __THREAD_ID_MAP_WAITING 1
+#define __THREAD_ID_MAP_EMPTY ((thread_id_t) 0)
+#define __THREAD_ID_MAP_WAITING ((thread_id_t) 1)
 thread_id_t __thread_id_map[NR_THREADS];
 spinlock_t __thread_id_map_mutex;
 
@@ -519,13 +517,25 @@ static void wait_all_threads(void)
        }
 }
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void run_on(int cpu)
 {
+#if HAVE_SCHED_SETAFFINITY
        cpu_set_t mask;
 
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -548,7 +558,7 @@ long long get_microseconds(void)
 #define DEFINE_PER_THREAD(type, name) \
        struct { \
                __typeof__(type) v \
-                       __attribute__((__aligned__(CACHE_LINE_SIZE))); \
+                       __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))); \
        } __per_thread_##name[NR_THREADS];
 #define DECLARE_PER_THREAD(type, name) extern DEFINE_PER_THREAD(type, name)
 
@@ -582,7 +592,7 @@ long long get_microseconds(void)
 #define DEFINE_PER_CPU(type, name) \
        struct { \
                __typeof__(type) v \
-                       __attribute__((__aligned__(CACHE_LINE_SIZE))); \
+                       __attribute__((__aligned__(CAA_CACHE_LINE_SIZE))); \
        } __per_cpu_##name[NR_CPUS]
 #define DECLARE_PER_CPU(type, name) extern DEFINE_PER_CPU(type, name)
 
@@ -696,9 +706,7 @@ static void smp_init(void)
 #define LIST_POISON1  ((void *) 0x00100100)
 #define LIST_POISON2  ((void *) 0x00200200)
 
-#define container_of(ptr, type, member) ({                     \
-       const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
-       (type *)( (char *)__mptr - offsetof(type,member) );})
+#if 0
 
 /*
  * Simple doubly linked list implementation.
@@ -710,16 +718,16 @@ static void smp_init(void)
  * using the generic single-entry routines.
  */
 
-struct list_head {
-       struct list_head *next, *prev;
+struct cds_list_head {
+       struct cds_list_head *next, *prev;
 };
 
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
+#define CDS_LIST_HEAD_INIT(name) { &(name), &(name) }
 
-#define LIST_HEAD(name) \
-       struct list_head name = LIST_HEAD_INIT(name)
+#define CDS_LIST_HEAD(name) \
+       struct cds_list_head name = CDS_LIST_HEAD_INIT(name)
 
-static inline void INIT_LIST_HEAD(struct list_head *list)
+static inline void CDS_INIT_LIST_HEAD(struct cds_list_head *list)
 {
        list->next = list;
        list->prev = list;
@@ -732,9 +740,9 @@ static inline void INIT_LIST_HEAD(struct list_head *list)
  * the prev/next entries already!
  */
 #ifndef CONFIG_DEBUG_LIST
-static inline void __list_add(struct list_head *new,
-                             struct list_head *prev,
-                             struct list_head *next)
+static inline void __cds_list_add(struct cds_list_head *new,
+                             struct cds_list_head *prev,
+                             struct cds_list_head *next)
 {
        next->prev = new;
        new->next = next;
@@ -742,36 +750,36 @@ static inline void __list_add(struct list_head *new,
        prev->next = new;
 }
 #else
-extern void __list_add(struct list_head *new,
-                             struct list_head *prev,
-                             struct list_head *next);
+extern void __cds_list_add(struct cds_list_head *new,
+                             struct cds_list_head *prev,
+                             struct cds_list_head *next);
 #endif
 
 /**
- * list_add - add a new entry
+ * cds_list_add - add a new entry
  * @new: new entry to be added
  * @head: list head to add it after
  *
  * Insert a new entry after the specified head.
  * This is good for implementing stacks.
  */
-static inline void list_add(struct list_head *new, struct list_head *head)
+static inline void cds_list_add(struct cds_list_head *new, struct cds_list_head *head)
 {
-       __list_add(new, head, head->next);
+       __cds_list_add(new, head, head->next);
 }
 
 
 /**
- * list_add_tail - add a new entry
+ * cds_list_add_tail - add a new entry
  * @new: new entry to be added
  * @head: list head to add it before
  *
  * Insert a new entry before the specified head.
  * This is useful for implementing queues.
  */
-static inline void list_add_tail(struct list_head *new, struct list_head *head)
+static inline void cds_list_add_tail(struct cds_list_head *new, struct cds_list_head *head)
 {
-       __list_add(new, head->prev, head);
+       __cds_list_add(new, head->prev, head);
 }
 
 /*
@@ -781,38 +789,38 @@ static inline void list_add_tail(struct list_head *new, struct list_head *head)
  * This is only for internal list manipulation where we know
  * the prev/next entries already!
  */
-static inline void __list_del(struct list_head * prev, struct list_head * next)
+static inline void __cds_list_del(struct cds_list_head * prev, struct cds_list_head * next)
 {
        next->prev = prev;
        prev->next = next;
 }
 
 /**
- * list_del - deletes entry from list.
+ * cds_list_del - deletes entry from list.
  * @entry: the element to delete from the list.
- * Note: list_empty() on entry does not return true after this, the entry is
+ * Note: cds_list_empty() on entry does not return true after this, the entry is
  * in an undefined state.
  */
 #ifndef CONFIG_DEBUG_LIST
-static inline void list_del(struct list_head *entry)
+static inline void cds_list_del(struct cds_list_head *entry)
 {
-       __list_del(entry->prev, entry->next);
+       __cds_list_del(entry->prev, entry->next);
        entry->next = LIST_POISON1;
        entry->prev = LIST_POISON2;
 }
 #else
-extern void list_del(struct list_head *entry);
+extern void cds_list_del(struct cds_list_head *entry);
 #endif
 
 /**
- * list_replace - replace old entry by new one
+ * cds_list_replace - replace old entry by new one
  * @old : the element to be replaced
  * @new : the new element to insert
  *
  * If @old was empty, it will be overwritten.
  */
-static inline void list_replace(struct list_head *old,
-                               struct list_head *new)
+static inline void cds_list_replace(struct cds_list_head *old,
+                               struct cds_list_head *new)
 {
        new->next = old->next;
        new->next->prev = new;
@@ -820,44 +828,44 @@ static inline void list_replace(struct list_head *old,
        new->prev->next = new;
 }
 
-static inline void list_replace_init(struct list_head *old,
-                                       struct list_head *new)
+static inline void cds_list_replace_init(struct cds_list_head *old,
+                                       struct cds_list_head *new)
 {
-       list_replace(old, new);
-       INIT_LIST_HEAD(old);
+       cds_list_replace(old, new);
+       CDS_INIT_LIST_HEAD(old);
 }
 
 /**
- * list_del_init - deletes entry from list and reinitialize it.
+ * cds_list_del_init - deletes entry from list and reinitialize it.
  * @entry: the element to delete from the list.
  */
-static inline void list_del_init(struct list_head *entry)
+static inline void cds_list_del_init(struct cds_list_head *entry)
 {
-       __list_del(entry->prev, entry->next);
-       INIT_LIST_HEAD(entry);
+       __cds_list_del(entry->prev, entry->next);
+       CDS_INIT_LIST_HEAD(entry);
 }
 
 /**
- * list_move - delete from one list and add as another's head
+ * cds_list_move - delete from one list and add as another's head
  * @list: the entry to move
  * @head: the head that will precede our entry
  */
-static inline void list_move(struct list_head *list, struct list_head *head)
+static inline void cds_list_move(struct cds_list_head *list, struct cds_list_head *head)
 {
-       __list_del(list->prev, list->next);
-       list_add(list, head);
+       __cds_list_del(list->prev, list->next);
+       cds_list_add(list, head);
 }
 
 /**
- * list_move_tail - delete from one list and add as another's tail
+ * cds_list_move_tail - delete from one list and add as another's tail
  * @list: the entry to move
  * @head: the head that will follow our entry
  */
-static inline void list_move_tail(struct list_head *list,
-                                 struct list_head *head)
+static inline void cds_list_move_tail(struct cds_list_head *list,
+                                 struct cds_list_head *head)
 {
-       __list_del(list->prev, list->next);
-       list_add_tail(list, head);
+       __cds_list_del(list->prev, list->next);
+       cds_list_add_tail(list, head);
 }
 
 /**
@@ -865,37 +873,37 @@ static inline void list_move_tail(struct list_head *list,
  * @list: the entry to test
  * @head: the head of the list
  */
-static inline int list_is_last(const struct list_head *list,
-                               const struct list_head *head)
+static inline int list_is_last(const struct cds_list_head *list,
+                               const struct cds_list_head *head)
 {
        return list->next == head;
 }
 
 /**
- * list_empty - tests whether a list is empty
+ * cds_list_empty - tests whether a list is empty
  * @head: the list to test.
  */
-static inline int list_empty(const struct list_head *head)
+static inline int cds_list_empty(const struct cds_list_head *head)
 {
        return head->next == head;
 }
 
 /**
- * list_empty_careful - tests whether a list is empty and not being modified
+ * cds_list_empty_careful - tests whether a list is empty and not being modified
  * @head: the list to test
  *
  * Description:
  * tests whether a list is empty _and_ checks that no other CPU might be
  * in the process of modifying either member (next or prev)
  *
- * NOTE: using list_empty_careful() without synchronization
+ * NOTE: using cds_list_empty_careful() without synchronization
  * can only be safe if the only activity that can happen
- * to the list entry is list_del_init(). Eg. it cannot be used
+ * to the list entry is cds_list_del_init(). Eg. it cannot be used
  * if another CPU could re-list_add() it.
  */
-static inline int list_empty_careful(const struct list_head *head)
+static inline int cds_list_empty_careful(const struct cds_list_head *head)
 {
-       struct list_head *next = head->next;
+       struct cds_list_head *next = head->next;
        return (next == head) && (next == head->prev);
 }
 
@@ -903,15 +911,15 @@ static inline int list_empty_careful(const struct list_head *head)
  * list_is_singular - tests whether a list has just one entry.
  * @head: the list to test.
  */
-static inline int list_is_singular(const struct list_head *head)
+static inline int list_is_singular(const struct cds_list_head *head)
 {
        return !list_empty(head) && (head->next == head->prev);
 }
 
-static inline void __list_cut_position(struct list_head *list,
-               struct list_head *head, struct list_head *entry)
+static inline void __list_cut_position(struct cds_list_head *list,
+               struct cds_list_head *head, struct cds_list_head *entry)
 {
-       struct list_head *new_first = entry->next;
+       struct cds_list_head *new_first = entry->next;
        list->next = head->next;
        list->next->prev = list;
        list->prev = entry;
@@ -934,26 +942,26 @@ static inline void __list_cut_position(struct list_head *list,
  * losing its data.
  *
  */
-static inline void list_cut_position(struct list_head *list,
-               struct list_head *head, struct list_head *entry)
+static inline void list_cut_position(struct cds_list_head *list,
+               struct cds_list_head *head, struct cds_list_head *entry)
 {
-       if (list_empty(head))
+       if (cds_list_empty(head))
                return;
        if (list_is_singular(head) &&
                (head->next != entry && head != entry))
                return;
        if (entry == head)
-               INIT_LIST_HEAD(list);
+               CDS_INIT_LIST_HEAD(list);
        else
                __list_cut_position(list, head, entry);
 }
 
-static inline void __list_splice(const struct list_head *list,
-                                struct list_head *prev,
-                                struct list_head *next)
+static inline void __cds_list_splice(const struct cds_list_head *list,
+                                struct cds_list_head *prev,
+                                struct cds_list_head *next)
 {
-       struct list_head *first = list->next;
-       struct list_head *last = list->prev;
+       struct cds_list_head *first = list->next;
+       struct cds_list_head *last = list->prev;
 
        first->prev = prev;
        prev->next = first;
@@ -963,70 +971,70 @@ static inline void __list_splice(const struct list_head *list,
 }
 
 /**
- * list_splice - join two lists, this is designed for stacks
+ * cds_list_splice - join two lists, this is designed for stacks
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  */
-static inline void list_splice(const struct list_head *list,
-                               struct list_head *head)
+static inline void cds_list_splice(const struct cds_list_head *list,
+                               struct cds_list_head *head)
 {
-       if (!list_empty(list))
-               __list_splice(list, head, head->next);
+       if (!cds_list_empty(list))
+               __cds_list_splice(list, head, head->next);
 }
 
 /**
- * list_splice_tail - join two lists, each list being a queue
+ * cds_list_splice_tail - join two lists, each list being a queue
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  */
-static inline void list_splice_tail(struct list_head *list,
-                               struct list_head *head)
+static inline void cds_list_splice_tail(struct cds_list_head *list,
+                               struct cds_list_head *head)
 {
-       if (!list_empty(list))
-               __list_splice(list, head->prev, head);
+       if (!cds_list_empty(list))
+               __cds_list_splice(list, head->prev, head);
 }
 
 /**
- * list_splice_init - join two lists and reinitialise the emptied list.
+ * cds_list_splice_init - join two lists and reinitialise the emptied list.
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  *
  * The list at @list is reinitialised
  */
-static inline void list_splice_init(struct list_head *list,
-                                   struct list_head *head)
+static inline void cds_list_splice_init(struct cds_list_head *list,
+                                   struct cds_list_head *head)
 {
-       if (!list_empty(list)) {
-               __list_splice(list, head, head->next);
-               INIT_LIST_HEAD(list);
+       if (!cds_list_empty(list)) {
+               __cds_list_splice(list, head, head->next);
+               CDS_INIT_LIST_HEAD(list);
        }
 }
 
 /**
- * list_splice_tail_init - join two lists and reinitialise the emptied list
+ * cds_list_splice_tail_init - join two lists and reinitialise the emptied list
  * @list: the new list to add.
  * @head: the place to add it in the first list.
  *
  * Each of the lists is a queue.
  * The list at @list is reinitialised
  */
-static inline void list_splice_tail_init(struct list_head *list,
-                                        struct list_head *head)
+static inline void cds_list_splice_tail_init(struct cds_list_head *list,
+                                        struct cds_list_head *head)
 {
-       if (!list_empty(list)) {
-               __list_splice(list, head->prev, head);
-               INIT_LIST_HEAD(list);
+       if (!cds_list_empty(list)) {
+               __cds_list_splice(list, head->prev, head);
+               CDS_INIT_LIST_HEAD(list);
        }
 }
 
 /**
- * list_entry - get the struct for this entry
- * @ptr:       the &struct list_head pointer.
+ * cds_list_entry - get the struct for this entry
+ * @ptr:       the &struct cds_list_head pointer.
  * @type:      the type of the struct this is embedded in.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_entry(ptr, type, member) \
-       container_of(ptr, type, member)
+#define cds_list_entry(ptr, type, member) \
+       caa_container_of(ptr, type, member)
 
 /**
  * list_first_entry - get the first element from a list
@@ -1037,95 +1045,95 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Note, that list is expected to be not empty.
  */
 #define list_first_entry(ptr, type, member) \
-       list_entry((ptr)->next, type, member)
+       cds_list_entry((ptr)->next, type, member)
 
 /**
- * list_for_each       -       iterate over a list
- * @pos:       the &struct list_head to use as a loop cursor.
+ * cds_list_for_each   -       iterate over a list
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  */
-#define list_for_each(pos, head) \
+#define cds_list_for_each(pos, head) \
        for (pos = (head)->next; prefetch(pos->next), pos != (head); \
                pos = pos->next)
 
 /**
- * __list_for_each     -       iterate over a list
- * @pos:       the &struct list_head to use as a loop cursor.
+ * __cds_list_for_each -       iterate over a list
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  *
- * This variant differs from list_for_each() in that it's the
+ * This variant differs from cds_list_for_each() in that it's the
  * simplest possible list iteration code, no prefetching is done.
  * Use this for code that knows the list to be very short (empty
  * or 1 entry) most of the time.
  */
-#define __list_for_each(pos, head) \
+#define __cds_list_for_each(pos, head) \
        for (pos = (head)->next; pos != (head); pos = pos->next)
 
 /**
- * list_for_each_prev  -       iterate over a list backwards
- * @pos:       the &struct list_head to use as a loop cursor.
+ * cds_list_for_each_prev      -       iterate over a list backwards
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
  * @head:      the head for your list.
  */
-#define list_for_each_prev(pos, head) \
+#define cds_list_for_each_prev(pos, head) \
        for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
                pos = pos->prev)
 
 /**
- * list_for_each_safe - iterate over a list safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop cursor.
- * @n:         another &struct list_head to use as temporary storage
+ * cds_list_for_each_safe - iterate over a list safe against removal of list entry
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
+ * @n:         another &struct cds_list_head to use as temporary storage
  * @head:      the head for your list.
  */
-#define list_for_each_safe(pos, n, head) \
+#define cds_list_for_each_safe(pos, n, head) \
        for (pos = (head)->next, n = pos->next; pos != (head); \
                pos = n, n = pos->next)
 
 /**
- * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop cursor.
- * @n:         another &struct list_head to use as temporary storage
+ * cds_list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
+ * @pos:       the &struct cds_list_head to use as a loop cursor.
+ * @n:         another &struct cds_list_head to use as temporary storage
  * @head:      the head for your list.
  */
-#define list_for_each_prev_safe(pos, n, head) \
+#define cds_list_for_each_prev_safe(pos, n, head) \
        for (pos = (head)->prev, n = pos->prev; \
             prefetch(pos->prev), pos != (head); \
             pos = n, n = pos->prev)
 
 /**
- * list_for_each_entry -       iterate over list of given type
+ * cds_list_for_each_entry     -       iterate over list of given type
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry(pos, head, member)                         \
-       for (pos = list_entry((head)->next, typeof(*pos), member);      \
+#define cds_list_for_each_entry(pos, head, member)                             \
+       for (pos = cds_list_entry((head)->next, typeof(*pos), member);  \
             prefetch(pos->member.next), &pos->member != (head);        \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_reverse - iterate backwards over list of given type.
+ * cds_list_for_each_entry_reverse - iterate backwards over list of given type.
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry_reverse(pos, head, member)                 \
-       for (pos = list_entry((head)->prev, typeof(*pos), member);      \
+#define cds_list_for_each_entry_reverse(pos, head, member)                     \
+       for (pos = cds_list_entry((head)->prev, typeof(*pos), member);  \
             prefetch(pos->member.prev), &pos->member != (head);        \
-            pos = list_entry(pos->member.prev, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.prev, typeof(*pos), member))
 
 /**
- * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
+ * list_prepare_entry - prepare a pos entry for use in cds_list_for_each_entry_continue()
  * @pos:       the type * to use as a start point
  * @head:      the head of the list
  * @member:    the name of the list_struct within the struct.
  *
- * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
+ * Prepares a pos entry for use as a start point in cds_list_for_each_entry_continue().
  */
 #define list_prepare_entry(pos, head, member) \
-       ((pos) ? : list_entry(head, typeof(*pos), member))
+       ((pos) ? : cds_list_entry(head, typeof(*pos), member))
 
 /**
- * list_for_each_entry_continue - continue iteration over list of given type
+ * cds_list_for_each_entry_continue - continue iteration over list of given type
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
@@ -1133,13 +1141,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Continue to iterate over list of given type, continuing after
  * the current position.
  */
-#define list_for_each_entry_continue(pos, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member);  \
+#define cds_list_for_each_entry_continue(pos, head, member)            \
+       for (pos = cds_list_entry(pos->member.next, typeof(*pos), member);      \
             prefetch(pos->member.next), &pos->member != (head);        \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_continue_reverse - iterate backwards from the given point
+ * cds_list_for_each_entry_continue_reverse - iterate backwards from the given point
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
@@ -1147,38 +1155,38 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Start to iterate over list of given type backwards, continuing after
  * the current position.
  */
-#define list_for_each_entry_continue_reverse(pos, head, member)                \
-       for (pos = list_entry(pos->member.prev, typeof(*pos), member);  \
+#define cds_list_for_each_entry_continue_reverse(pos, head, member)            \
+       for (pos = cds_list_entry(pos->member.prev, typeof(*pos), member);      \
             prefetch(pos->member.prev), &pos->member != (head);        \
-            pos = list_entry(pos->member.prev, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.prev, typeof(*pos), member))
 
 /**
- * list_for_each_entry_from - iterate over list of given type from the current point
+ * cds_list_for_each_entry_from - iterate over list of given type from the current point
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  *
  * Iterate over list of given type, continuing from current position.
  */
-#define list_for_each_entry_from(pos, head, member)                    \
+#define cds_list_for_each_entry_from(pos, head, member)                        \
        for (; prefetch(pos->member.next), &pos->member != (head);      \
-            pos = list_entry(pos->member.next, typeof(*pos), member))
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
 
 /**
- * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * cds_list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
  * @member:    the name of the list_struct within the struct.
  */
-#define list_for_each_entry_safe(pos, n, head, member)                 \
-       for (pos = list_entry((head)->next, typeof(*pos), member),      \
-               n = list_entry(pos->member.next, typeof(*pos), member); \
+#define cds_list_for_each_entry_safe(pos, n, head, member)                     \
+       for (pos = cds_list_entry((head)->next, typeof(*pos), member),  \
+               n = cds_list_entry(pos->member.next, typeof(*pos), member);     \
             &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_continue
+ * cds_list_for_each_entry_safe_continue
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1187,14 +1195,14 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate over list of given type, continuing after current point,
  * safe against removal of list entry.
  */
-#define list_for_each_entry_safe_continue(pos, n, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member),          \
-               n = list_entry(pos->member.next, typeof(*pos), member);         \
+#define cds_list_for_each_entry_safe_continue(pos, n, head, member)            \
+       for (pos = cds_list_entry(pos->member.next, typeof(*pos), member),              \
+               n = cds_list_entry(pos->member.next, typeof(*pos), member);             \
             &pos->member != (head);                                            \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_from
+ * cds_list_for_each_entry_safe_from
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1203,13 +1211,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate over list of given type from current point, safe against
  * removal of list entry.
  */
-#define list_for_each_entry_safe_from(pos, n, head, member)                    \
-       for (n = list_entry(pos->member.next, typeof(*pos), member);            \
+#define cds_list_for_each_entry_safe_from(pos, n, head, member)                        \
+       for (n = cds_list_entry(pos->member.next, typeof(*pos), member);                \
             &pos->member != (head);                                            \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.next, typeof(*n), member))
 
 /**
- * list_for_each_entry_safe_reverse
+ * cds_list_for_each_entry_safe_reverse
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
@@ -1218,11 +1226,13 @@ static inline void list_splice_tail_init(struct list_head *list,
  * Iterate backwards over list of given type, safe against removal
  * of list entry.
  */
-#define list_for_each_entry_safe_reverse(pos, n, head, member)         \
-       for (pos = list_entry((head)->prev, typeof(*pos), member),      \
-               n = list_entry(pos->member.prev, typeof(*pos), member); \
+#define cds_list_for_each_entry_safe_reverse(pos, n, head, member)             \
+       for (pos = cds_list_entry((head)->prev, typeof(*pos), member),  \
+               n = cds_list_entry(pos->member.prev, typeof(*pos), member);     \
             &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.prev, typeof(*n), member))
+            pos = n, n = cds_list_entry(n->member.prev, typeof(*n), member))
+
+#endif //0
 
 /*
  * Double linked lists with a single pointer list head.
@@ -1231,60 +1241,60 @@ static inline void list_splice_tail_init(struct list_head *list,
  * You lose the ability to access the tail in O(1).
  */
 
-struct hlist_head {
-       struct hlist_node *first;
+struct cds_hlist_head {
+       struct cds_hlist_node *first;
 };
 
-struct hlist_node {
-       struct hlist_node *next, **pprev;
+struct cds_hlist_node {
+       struct cds_hlist_node *next, **pprev;
 };
 
 #define HLIST_HEAD_INIT { .first = NULL }
-#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
-#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
-static inline void INIT_HLIST_NODE(struct hlist_node *h)
+#define HLIST_HEAD(name) struct cds_hlist_head name = {  .first = NULL }
+#define CDS_INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
+static inline void INIT_HLIST_NODE(struct cds_hlist_node *h)
 {
        h->next = NULL;
        h->pprev = NULL;
 }
 
-static inline int hlist_unhashed(const struct hlist_node *h)
+static inline int hlist_unhashed(const struct cds_hlist_node *h)
 {
        return !h->pprev;
 }
 
-static inline int hlist_empty(const struct hlist_head *h)
+static inline int hlist_empty(const struct cds_hlist_head *h)
 {
        return !h->first;
 }
 
-static inline void __hlist_del(struct hlist_node *n)
+static inline void __cds_hlist_del(struct cds_hlist_node *n)
 {
-       struct hlist_node *next = n->next;
-       struct hlist_node **pprev = n->pprev;
+       struct cds_hlist_node *next = n->next;
+       struct cds_hlist_node **pprev = n->pprev;
        *pprev = next;
        if (next)
                next->pprev = pprev;
 }
 
-static inline void hlist_del(struct hlist_node *n)
+static inline void cds_hlist_del(struct cds_hlist_node *n)
 {
-       __hlist_del(n);
+       __cds_hlist_del(n);
        n->next = LIST_POISON1;
        n->pprev = LIST_POISON2;
 }
 
-static inline void hlist_del_init(struct hlist_node *n)
+static inline void cds_hlist_del_init(struct cds_hlist_node *n)
 {
        if (!hlist_unhashed(n)) {
-               __hlist_del(n);
+               __cds_hlist_del(n);
                INIT_HLIST_NODE(n);
        }
 }
 
-static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
+static inline void cds_hlist_add_head(struct cds_hlist_node *n, struct cds_hlist_head *h)
 {
-       struct hlist_node *first = h->first;
+       struct cds_hlist_node *first = h->first;
        n->next = first;
        if (first)
                first->pprev = &n->next;
@@ -1293,8 +1303,8 @@ static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
 }
 
 /* next must be != NULL */
-static inline void hlist_add_before(struct hlist_node *n,
-                                       struct hlist_node *next)
+static inline void hlist_add_before(struct cds_hlist_node *n,
+                                       struct cds_hlist_node *next)
 {
        n->pprev = next->pprev;
        n->next = next;
@@ -1302,8 +1312,8 @@ static inline void hlist_add_before(struct hlist_node *n,
        *(n->pprev) = n;
 }
 
-static inline void hlist_add_after(struct hlist_node *n,
-                                       struct hlist_node *next)
+static inline void hlist_add_after(struct cds_hlist_node *n,
+                                       struct cds_hlist_node *next)
 {
        next->next = n->next;
        n->next = next;
@@ -1317,8 +1327,8 @@ static inline void hlist_add_after(struct hlist_node *n,
  * Move a list from one list head to another. Fixup the pprev
  * reference of the first entry if it exists.
  */
-static inline void hlist_move_list(struct hlist_head *old,
-                                  struct hlist_head *new)
+static inline void hlist_move_list(struct cds_hlist_head *old,
+                                  struct cds_hlist_head *new)
 {
        new->first = old->first;
        if (new->first)
@@ -1326,64 +1336,66 @@ static inline void hlist_move_list(struct hlist_head *old,
        old->first = NULL;
 }
 
-#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
+#define cds_hlist_entry(ptr, type, member) caa_container_of(ptr,type,member)
 
-#define hlist_for_each(pos, head) \
+#define cds_hlist_for_each(pos, head) \
        for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
             pos = pos->next)
 
-#define hlist_for_each_safe(pos, n, head) \
+#define cds_hlist_for_each_safe(pos, n, head) \
        for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
             pos = n)
 
 /**
- * hlist_for_each_entry        - iterate over list of given type
+ * cds_hlist_for_each_entry    - iterate over list of given type
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
  * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry(tpos, pos, head, member)                   \
+#define cds_hlist_for_each_entry(tpos, pos, head, member)                       \
        for (pos = (head)->first;                                        \
             pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_continue - iterate over a hlist continuing after current point
+ * cds_hlist_for_each_entry_continue - iterate over a hlist continuing after current point
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @member:    the name of the hlist_node within the struct.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_continue(tpos, pos, member)                \
+#define cds_hlist_for_each_entry_continue(tpos, pos, member)            \
        for (pos = (pos)->next;                                          \
             pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_from - iterate over a hlist continuing from current point
+ * cds_hlist_for_each_entry_from - iterate over a hlist continuing from current point
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @member:    the name of the hlist_node within the struct.
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_from(tpos, pos, member)                    \
+#define cds_hlist_for_each_entry_from(tpos, pos, member)                        \
        for (; pos && ({ prefetch(pos->next); 1;}) &&                    \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = pos->next)
 
 /**
- * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
+ * cds_hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
  * @tpos:      the type * to use as a loop cursor.
- * @pos:       the &struct hlist_node to use as a loop cursor.
- * @n:         another &struct hlist_node to use as temporary storage
+ * @pos:       the &struct cds_hlist_node to use as a loop cursor.
+ * @n:         another &struct cds_hlist_node to use as temporary storage
  * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
+ * @member:    the name of the cds_hlist_node within the struct.
  */
-#define hlist_for_each_entry_safe(tpos, pos, n, head, member)           \
+#define cds_hlist_for_each_entry_safe(tpos, pos, n, head, member)               \
        for (pos = (head)->first;                                        \
             pos && ({ n = pos->next; 1; }) &&                           \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
+               ({ tpos = cds_hlist_entry(pos, typeof(*tpos), member); 1;}); \
             pos = n)
 
 #endif
+
+#endif
index 7d4948e59626b486524af30fa4b0dcc5f9bfc02b..5ba3d2b0e85312318a3e849a1d98c6050faedbf4 100644 (file)
@@ -65,6 +65,8 @@
  * Test variables.
  */
 
+#include <stdlib.h>
+
 DEFINE_PER_THREAD(long long, n_reads_pt);
 DEFINE_PER_THREAD(long long, n_updates_pt);
 
@@ -77,7 +79,8 @@ char argsbuf[64];
 #define GOFLAG_RUN  1
 #define GOFLAG_STOP 2
 
-int goflag __attribute__((__aligned__(CACHE_LINE_SIZE))) = GOFLAG_INIT;
+volatile int goflag __attribute__((__aligned__(CAA_CACHE_LINE_SIZE)))
+        = GOFLAG_INIT;
 
 #define RCU_READ_RUN 1000
 
@@ -92,6 +95,12 @@ int goflag __attribute__((__aligned__(CACHE_LINE_SIZE))) = GOFLAG_INIT;
 #define rcu_read_unlock_nest()
 #endif /* #else #ifdef RCU_READ_NESTABLE */
 
+#ifdef TORTURE_QSBR
+#define mark_rcu_quiescent_state       rcu_quiescent_state
+#define put_thread_offline             rcu_thread_offline
+#define put_thread_online              rcu_thread_online
+#endif
+
 #ifndef mark_rcu_quiescent_state
 #define mark_rcu_quiescent_state() do ; while (0)
 #endif /* #ifdef mark_rcu_quiescent_state */
@@ -110,13 +119,14 @@ int goflag __attribute__((__aligned__(CACHE_LINE_SIZE))) = GOFLAG_INIT;
 
 void *rcu_read_perf_test(void *arg)
 {
+       struct call_rcu_data *crdp;
        int i;
        int me = (long)arg;
        long long n_reads_local = 0;
 
        rcu_register_thread();
        run_on(me);
-       atomic_inc(&nthreadsrunning);
+       uatomic_inc(&nthreadsrunning);
        while (goflag == GOFLAG_INIT)
                poll(NULL, 0, 1);
        mark_rcu_quiescent_state();
@@ -132,6 +142,9 @@ void *rcu_read_perf_test(void *arg)
        }
        __get_thread_var(n_reads_pt) += n_reads_local;
        put_thread_offline();
+       crdp = get_thread_call_rcu_data();
+       set_thread_call_rcu_data(NULL);
+       call_rcu_data_free(crdp);
        rcu_unregister_thread();
 
        return (NULL);
@@ -141,7 +154,17 @@ void *rcu_update_perf_test(void *arg)
 {
        long long n_updates_local = 0;
 
-       atomic_inc(&nthreadsrunning);
+       if ((random() & 0xf00) == 0) {
+               struct call_rcu_data *crdp;
+
+               crdp = create_call_rcu_data(0, -1);
+               if (crdp != NULL) {
+                       fprintf(stderr,
+                               "Using per-thread call_rcu() worker.\n");
+                       set_thread_call_rcu_data(crdp);
+               }
+       }
+       uatomic_inc(&nthreadsrunning);
        while (goflag == GOFLAG_INIT)
                poll(NULL, 0, 1);
        while (goflag == GOFLAG_RUN) {
@@ -156,7 +179,7 @@ void perftestinit(void)
 {
        init_per_thread(n_reads_pt, 0LL);
        init_per_thread(n_updates_pt, 0LL);
-       atomic_set(&nthreadsrunning, 0);
+       uatomic_set(&nthreadsrunning, 0);
 }
 
 void perftestrun(int nthreads, int nreaders, int nupdaters)
@@ -164,15 +187,15 @@ void perftestrun(int nthreads, int nreaders, int nupdaters)
        int t;
        int duration = 1;
 
-       smp_mb();
-       while (atomic_read(&nthreadsrunning) < nthreads)
+       cmm_smp_mb();
+       while (uatomic_read(&nthreadsrunning) < nthreads)
                poll(NULL, 0, 1);
        goflag = GOFLAG_RUN;
-       smp_mb();
+       cmm_smp_mb();
        sleep(duration);
-       smp_mb();
+       cmm_smp_mb();
        goflag = GOFLAG_STOP;
-       smp_mb();
+       cmm_smp_mb();
        wait_all_threads();
        for_each_thread(t) {
                n_reads += per_thread(n_reads_pt, t);
@@ -185,6 +208,10 @@ void perftestrun(int nthreads, int nreaders, int nupdaters)
                (double)n_reads),
               ((duration * 1000*1000*1000.*(double)nupdaters) /
                (double)n_updates));
+       if (get_cpu_call_rcu_data(0)) {
+               fprintf(stderr, "Deallocating per-CPU call_rcu threads.\n");
+               free_all_cpu_call_rcu_data();
+       }
        exit(0);
 }
 
@@ -290,10 +317,30 @@ void *rcu_read_stress_test(void *arg)
        return (NULL);
 }
 
+static pthread_mutex_t call_rcu_test_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t call_rcu_test_cond = PTHREAD_COND_INITIALIZER;
+
+void rcu_update_stress_test_rcu(struct rcu_head *head)
+{
+       if (pthread_mutex_lock(&call_rcu_test_mutex) != 0) {
+               perror("pthread_mutex_lock");
+               exit(-1);
+       }
+       if (pthread_cond_signal(&call_rcu_test_cond) != 0) {
+               perror("pthread_cond_signal");
+               exit(-1);
+       }
+       if (pthread_mutex_unlock(&call_rcu_test_mutex) != 0) {
+               perror("pthread_mutex_unlock");
+               exit(-1);
+       }
+}
+
 void *rcu_update_stress_test(void *arg)
 {
        int i;
        struct rcu_stress *p;
+       struct rcu_head rh;
 
        while (goflag == GOFLAG_INIT)
                poll(NULL, 0, 1);
@@ -303,7 +350,7 @@ void *rcu_update_stress_test(void *arg)
                        i = 0;
                p = &rcu_stress_array[i];
                p->mbtest = 0;
-               smp_mb();
+               cmm_smp_mb();
                p->pipe_count = 0;
                p->mbtest = 1;
                rcu_assign_pointer(rcu_stress_current, p);
@@ -311,7 +358,24 @@ void *rcu_update_stress_test(void *arg)
                for (i = 0; i < RCU_STRESS_PIPE_LEN; i++)
                        if (i != rcu_stress_idx)
                                rcu_stress_array[i].pipe_count++;
-               synchronize_rcu();
+               if (n_updates & 0x1)
+                       synchronize_rcu();
+               else {
+                       if (pthread_mutex_lock(&call_rcu_test_mutex) != 0) {
+                               perror("pthread_mutex_lock");
+                               exit(-1);
+                       }
+                       call_rcu(&rh, rcu_update_stress_test_rcu);
+                       if (pthread_cond_wait(&call_rcu_test_cond,
+                                             &call_rcu_test_mutex) != 0) {
+                               perror("pthread_cond_wait");
+                               exit(-1);
+                       }
+                       if (pthread_mutex_unlock(&call_rcu_test_mutex) != 0) {
+                               perror("pthread_mutex_unlock");
+                               exit(-1);
+                       }
+               }
                n_updates++;
        }
        return NULL;
@@ -319,6 +383,16 @@ void *rcu_update_stress_test(void *arg)
 
 void *rcu_fake_update_stress_test(void *arg)
 {
+       if ((random() & 0xf00) == 0) {
+               struct call_rcu_data *crdp;
+
+               crdp = create_call_rcu_data(0, -1);
+               if (crdp != NULL) {
+                       fprintf(stderr,
+                               "Using per-thread call_rcu() worker.\n");
+                       set_thread_call_rcu_data(crdp);
+               }
+       }
        while (goflag == GOFLAG_INIT)
                poll(NULL, 0, 1);
        while (goflag == GOFLAG_RUN) {
@@ -349,13 +423,13 @@ void stresstest(int nreaders)
        create_thread(rcu_update_stress_test, NULL);
        for (i = 0; i < 5; i++)
                create_thread(rcu_fake_update_stress_test, NULL);
-       smp_mb();
+       cmm_smp_mb();
        goflag = GOFLAG_RUN;
-       smp_mb();
+       cmm_smp_mb();
        sleep(10);
-       smp_mb();
+       cmm_smp_mb();
        goflag = GOFLAG_STOP;
-       smp_mb();
+       cmm_smp_mb();
        wait_all_threads();
        for_each_thread(t)
                n_reads += per_thread(n_reads_pt, t);
@@ -370,6 +444,10 @@ void stresstest(int nreaders)
                printf(" %lld", sum);
        }
        printf("\n");
+       if (get_cpu_call_rcu_data(0)) {
+               fprintf(stderr, "Deallocating per-CPU call_rcu threads.\n");
+               free_all_cpu_call_rcu_data();
+       }
        exit(0);
 }
 
@@ -390,6 +468,12 @@ int main(int argc, char *argv[])
 
        smp_init();
        //rcu_init();
+       srandom(time(NULL));
+       if (random() & 0x100) {
+               fprintf(stderr, "Allocating per-CPU call_rcu threads.\n");
+               if (create_all_cpu_call_rcu_data(0))
+                       perror("create_all_cpu_call_rcu_data");
+       }
 
 #ifdef DEBUG_YIELD
        yield_active |= YIELD_READ;
diff --git a/tests/runpaul-phase7.sh b/tests/runpaul-phase7.sh
new file mode 100755 (executable)
index 0000000..4c301da
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#run all tests
+
+#set to number of active CPUS
+export NUM_CPUS=64
+#export NUM_CPUS=8
+
+#extra options, e.g. for setting affinity on even CPUs :
+EXTRA_OPTS=$(for a in $(seq 0 2 127); do echo -n "-a ${a} "; done)
+#EXTRA_OPTS=$(for a in $(seq 0 1 7); do echo -n "-a ${a} "; done)
+
+rm -f *.log
+
+# x: Vary writer C.S. length from 0 to 100 us
+# y: reads/s
+# 4 readers
+# 4 writers
+
+echo Executing writer C.S. length test
+
+NR_READERS=$((${NUM_CPUS} / 2))
+NR_WRITERS=$((${NUM_CPUS} / 2))
+DURATION=10
+WDELAY=10
+#in loops.
+WRITERCSLEN_ARRAY="0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152"
+
+rm -f writercslen.log
+
+for WRITERCSLEN in ${WRITERCSLEN_ARRAY}; do
+       echo "./runtests.sh ${NR_READERS} ${NR_WRITERS} ${DURATION} ${EXTRA_OPTS} -d ${WDELAY} -e ${WRITERCSLEN} | tee -a writercslen.log" >> runall.log
+       ./runtests.sh ${NR_READERS} ${NR_WRITERS} ${DURATION} ${EXTRA_OPTS} -d ${WDELAY} -e ${WRITERCSLEN} | tee -a writercslen.log
+done
+
+
+
+mkdir ppc64-writercslen
+mv *.log ppc64-writercslen/
+#mkdir xeon-writercslen
+#mv *.log xeon-writercslen/
index 981aef15fe25545b09dc3d74849703e8c60e539a..4b5f745b01a1e294be83a2bf3fa9e04a9df37589 100755 (executable)
@@ -1,9 +1,9 @@
 #!/bin/sh
 
-for a in test_urcu_gc test_urcu_gc_mb test_urcu test_urcu_mb \
-                       test_urcu_lgc test_qsbr_lgc test_urcu_lgc_mb \
-                       test_qsbr test_qsbr_gc test_rwlock test_perthreadlock \
-                       test_mutex; do
+for a in test_urcu_gc test_urcu_signal_gc test_urcu_mb_gc test_qsbr_gc \
+       test_urcu_lgc test_urcu_signal_lgc test_urcu_mb_lgc test_qsbr_lgc \
+       test_urcu test_urcu_signal test_urcu_mb test_qsbr \
+       test_rwlock test_perthreadlock test_mutex; do
        echo "./${a} $*" | tee -a runall.detail.log
        /usr/bin/time --append --output runall.detail.log ./${a} $*
 done
diff --git a/tests/test_atomic.c b/tests/test_atomic.c
deleted file mode 100644 (file)
index 585c8ca..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <stdio.h>
-#include <arch_atomic.h>
-#include <assert.h>
-
-#if (defined(__i386__) || defined(__x86_64__))
-#define HAS_ATOMIC_BYTE
-#define HAS_ATOMIC_SHORT
-#endif
-
-struct testvals {
-#ifdef HAS_ATOMIC_BYTE
-       unsigned char c;
-#endif
-#ifdef HAS_ATOMIC_SHORT
-       unsigned short s;
-#endif
-       unsigned int i;
-       unsigned long l;
-};
-
-static struct testvals vals;
-
-#define do_test(ptr)                           \
-do {                                           \
-       __typeof__(*(ptr)) v;                   \
-                                               \
-       atomic_add(ptr, 10);                    \
-       assert(atomic_read(ptr) == 10);         \
-       atomic_add(ptr, -11UL);                 \
-       assert(atomic_read(ptr) == (__typeof__(*(ptr)))-1UL);   \
-       v = cmpxchg(ptr, -1UL, 22);             \
-       assert(atomic_read(ptr) == 22);         \
-       assert(v == (__typeof__(*(ptr)))-1UL);  \
-       v = cmpxchg(ptr, 33, 44);               \
-       assert(atomic_read(ptr) == 22);         \
-       assert(v == 22);                        \
-       v = xchg(ptr, 55);                      \
-       assert(atomic_read(ptr) == 55);         \
-       assert(v == 22);                        \
-       atomic_set(ptr, 22);                    \
-       atomic_inc(ptr);                        \
-       assert(atomic_read(ptr) == 23);         \
-       atomic_dec(ptr);                        \
-       assert(atomic_read(ptr) == 22);         \
-       v = atomic_add_return(ptr, 100);        \
-       assert(v == 122);                       \
-       assert(atomic_read(ptr) == 122);        \
-       v = atomic_sub_return(ptr, 1);          \
-       assert(v == 121);                       \
-       assert(atomic_read(ptr) == 121);        \
-} while (0)
-
-int main(int argc, char **argv)
-{
-#ifdef HAS_ATOMIC_BYTE
-       do_test(&vals.c);
-#endif
-#ifdef HAS_ATOMIC_SHORT
-       do_test(&vals.s);
-#endif
-       do_test(&vals.i);
-       do_test(&vals.l);
-       printf("Atomic ops test OK\n");
-
-       return 0;
-}
diff --git a/tests/test_cycles_per_loop.c b/tests/test_cycles_per_loop.c
new file mode 100644 (file)
index 0000000..cafa309
--- /dev/null
@@ -0,0 +1,22 @@
+#include <urcu/arch.h>
+#include <stdio.h>
+
+#define NR_LOOPS 1000000UL
+
+static inline void loop_sleep(unsigned long l)
+{
+       while(l-- != 0)
+               caa_cpu_relax();
+}
+
+int main()
+{
+       cycles_t time1, time2;
+
+       time1 = caa_get_cycles();
+       loop_sleep(NR_LOOPS);
+       time2 = caa_get_cycles();
+       printf("CPU clock cycles per loop: %g\n", (time2 - time1) /
+                                                 (double)NR_LOOPS);
+       return 0;
+}
index 50069510fbf1498793f280faa037d392ae287dd6..3a750cc1b4e2fd5870dd85dfd6f44f2d41f61d70 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 #if defined(_syscall0)
 _syscall0(pid_t, gettid)
@@ -55,12 +59,12 @@ static inline pid_t gettid(void)
 #else
 #define debug_yield_read()
 #endif
-#include "../urcu.h"
+#include <urcu.h>
 
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 #define LOOPS 1048576
@@ -74,9 +78,9 @@ int main(int argc, char **argv)
        double cpl;
 
        for (i = 0; i < TESTS; i++) {
-               time1 = get_cycles();
+               time1 = caa_get_cycles();
                loop_sleep(LOOPS);
-               time2 = get_cycles();
+               time2 = caa_get_cycles();
                time_tot += time2 - time1;
        }
        cpl = ((double)time_tot) / (double)TESTS / (double)LOOPS;
index e94819ac8b3cafe353addb4149ae6ca8587afb93..1194b0298a68bffd75bb382bbe5c601d123da7ec 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#include "../config.h"
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
@@ -61,7 +63,7 @@ static inline pid_t gettid(void)
 #else
 #define debug_yield_read()
 #endif
-#include "../urcu.h"
+#include <urcu.h>
 
 struct test_array {
        int a;
@@ -80,10 +82,13 @@ static unsigned long duration;
 /* read-side C.S. duration, in loops */
 static unsigned long rduration;
 
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 static int verbose_mode;
@@ -100,6 +105,12 @@ static int use_affinity = 0;
 
 pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
@@ -109,6 +120,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
+#if HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -122,7 +134,12 @@ static void set_affinity(void)
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -142,9 +159,9 @@ static unsigned long long __thread nr_writes;
 static unsigned long long __thread nr_reads;
 
 static
-unsigned long long __attribute__((aligned(CACHE_LINE_SIZE))) *tot_nr_writes;
+unsigned long long __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *tot_nr_writes;
 static
-unsigned long long __attribute__((aligned(CACHE_LINE_SIZE))) *tot_nr_reads;
+unsigned long long __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *tot_nr_reads;
 
 static unsigned int nr_readers;
 static unsigned int nr_writers;
@@ -215,12 +232,14 @@ void *thr_writer(void *data)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                pthread_mutex_lock(&lock);
                test_array.a = 0;
                test_array.a = 8;
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
                pthread_mutex_unlock(&lock);
                nr_writes++;
                if (unlikely(!test_duration_write()))
@@ -243,6 +262,7 @@ void show_usage(int argc, char **argv)
 #endif
        printf(" [-d delay] (writer period (us))");
        printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
        printf(" [-v] (verbose output)");
        printf(" [-a cpu#] [-a cpu#]... (affinity)");
        printf("\n");
@@ -261,7 +281,7 @@ int main(int argc, char **argv)
                show_usage(argc, argv);
                return -1;
        }
-       smp_mb();
+       cmm_smp_mb();
 
        err = sscanf(argv[1], "%u", &nr_readers);
        if (err != 1) {
@@ -317,6 +337,13 @@ int main(int argc, char **argv)
                        }
                        wdelay = atol(argv[++i]);
                        break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
                case 'v':
                        verbose_mode = 1;
                        break;
@@ -352,7 +379,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       smp_mb();
+       cmm_smp_mb();
 
        test_go = 1;
 
@@ -375,10 +402,10 @@ int main(int argc, char **argv)
 
        printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
               tot_writes);
-       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
                "nr_writers %3u "
                "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n",
-               argv[0], duration, nr_readers, rduration,
+               argv[0], duration, nr_readers, rduration, wduration,
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes);
 
index 7402f01e0dcf24eb08893d64013f50d64ee681af..6c7114ca059096f98340ce7f815a7b7a8fa40bca 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#include "../config.h"
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
@@ -61,7 +63,7 @@ static inline pid_t gettid(void)
 #else
 #define debug_yield_read()
 #endif
-#include "../urcu.h"
+#include <urcu.h>
 
 struct test_array {
        int a;
@@ -69,7 +71,7 @@ struct test_array {
 
 struct per_thread_lock {
        pthread_mutex_t lock;
-} __attribute__((aligned(CACHE_LINE_SIZE)));   /* cache-line aligned */
+} __attribute__((aligned(CAA_CACHE_LINE_SIZE)));       /* cache-line aligned */
 
 static struct per_thread_lock *per_thread_lock;
 
@@ -84,10 +86,13 @@ static unsigned long duration;
 /* read-side C.S. duration, in loops */
 static unsigned long rduration;
 
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 static int verbose_mode;
@@ -104,6 +109,12 @@ static int use_affinity = 0;
 
 pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
@@ -113,6 +124,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
+#if HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -126,7 +138,12 @@ static void set_affinity(void)
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -146,9 +163,9 @@ static unsigned long long __thread nr_writes;
 static unsigned long long __thread nr_reads;
 
 static
-unsigned long long __attribute__((aligned(CACHE_LINE_SIZE))) *tot_nr_writes;
+unsigned long long __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *tot_nr_writes;
 static
-unsigned long long __attribute__((aligned(CACHE_LINE_SIZE))) *tot_nr_reads;
+unsigned long long __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *tot_nr_reads;
 
 static unsigned int nr_readers;
 static unsigned int nr_writers;
@@ -220,7 +237,7 @@ void *thr_writer(void *data)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                for (tidx = 0; tidx < nr_readers; tidx++) {
@@ -228,6 +245,8 @@ void *thr_writer(void *data)
                }
                test_array.a = 0;
                test_array.a = 8;
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
                for (tidx = (long)nr_readers - 1; tidx >= 0; tidx--) {
                        pthread_mutex_unlock(&per_thread_lock[tidx].lock);
                }
@@ -252,6 +271,7 @@ void show_usage(int argc, char **argv)
 #endif
        printf(" [-d delay] (writer period (us))");
        printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
        printf(" [-v] (verbose output)");
        printf(" [-a cpu#] [-a cpu#]... (affinity)");
        printf("\n");
@@ -270,7 +290,7 @@ int main(int argc, char **argv)
                show_usage(argc, argv);
                return -1;
        }
-       smp_mb();
+       cmm_smp_mb();
 
        err = sscanf(argv[1], "%u", &nr_readers);
        if (err != 1) {
@@ -326,6 +346,13 @@ int main(int argc, char **argv)
                        }
                        wdelay = atol(argv[++i]);
                        break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
                case 'v':
                        verbose_mode = 1;
                        break;
@@ -362,7 +389,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       smp_mb();
+       cmm_smp_mb();
 
        test_go = 1;
 
@@ -385,10 +412,10 @@ int main(int argc, char **argv)
 
        printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
               tot_writes);
-       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
                "nr_writers %3u "
                "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n",
-               argv[0], duration, nr_readers, rduration,
+               argv[0], duration, nr_readers, rduration, wduration,
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes);
 
index d5bd912784530cc443f0cb868a6b7d6e3691e7f4..bc20ed0599cf4610fe42146f6456da90fc66f3d3 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Per thread locks - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <pthread.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 #if defined(_syscall0)
 _syscall0(pid_t, gettid)
@@ -52,7 +53,7 @@ static inline pid_t gettid(void)
 }
 #endif
 
-#include "../urcu.h"
+#include <urcu.h>
 
 struct test_array {
        int a;
@@ -62,7 +63,7 @@ static struct test_array test_array = { 8 };
 
 struct per_thread_lock {
        pthread_mutex_t lock;
-} __attribute__((aligned(CACHE_LINE_SIZE)));   /* cache-line aligned */
+} __attribute__((aligned(CAA_CACHE_LINE_SIZE)));       /* cache-line aligned */
 
 static struct per_thread_lock *per_thread_lock;
 
@@ -80,8 +81,8 @@ static int num_write;
 #define NR_READ num_read
 #define NR_WRITE num_write
 
-static cycles_t __attribute__((aligned(CACHE_LINE_SIZE))) *reader_time;
-static cycles_t __attribute__((aligned(CACHE_LINE_SIZE))) *writer_time;
+static cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time;
+static cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time;
 
 void *thr_reader(void *arg)
 {
@@ -93,7 +94,7 @@ void *thr_reader(void *arg)
                        "reader", pthread_self(), (unsigned long)gettid());
        sleep(2);
 
-       time1 = get_cycles();
+       time1 = caa_get_cycles();
        for (i = 0; i < OUTER_READ_LOOP; i++) {
                for (j = 0; j < INNER_READ_LOOP; j++) {
                        pthread_mutex_lock(&per_thread_lock[tidx].lock);
@@ -101,7 +102,7 @@ void *thr_reader(void *arg)
                        pthread_mutex_unlock(&per_thread_lock[tidx].lock);
                }
        }
-       time2 = get_cycles();
+       time2 = caa_get_cycles();
 
        reader_time[tidx] = time2 - time1;
 
@@ -124,7 +125,7 @@ void *thr_writer(void *arg)
 
        for (i = 0; i < OUTER_WRITE_LOOP; i++) {
                for (j = 0; j < INNER_WRITE_LOOP; j++) {
-                       time1 = get_cycles();
+                       time1 = caa_get_cycles();
                        for (tidx = 0; tidx < NR_READ; tidx++) {
                                pthread_mutex_lock(&per_thread_lock[tidx].lock);
                        }
@@ -132,7 +133,7 @@ void *thr_writer(void *arg)
                        for (tidx = NR_READ - 1; tidx >= 0; tidx--) {
                                pthread_mutex_unlock(&per_thread_lock[tidx].lock);
                        }
-                       time2 = get_cycles();
+                       time2 = caa_get_cycles();
                        writer_time[(unsigned long)arg] += time2 - time1;
                        usleep(1);
                }
index 43797716bcaff18fc1a8c9d6eb2fffe2bc3d6e95..1c5a696c03491db909c4c2a23f42df9a0fe4b4b0 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#include "../config.h"
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
@@ -61,7 +63,7 @@ static inline pid_t gettid(void)
 #else
 #define debug_yield_read()
 #endif
-#include "../urcu-qsbr.h"
+#include "urcu-qsbr.h"
 
 struct test_array {
        int a;
@@ -78,10 +80,13 @@ static unsigned long duration;
 /* read-side C.S. duration, in loops */
 static unsigned long rduration;
 
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 static int verbose_mode;
@@ -98,6 +103,12 @@ static int use_affinity = 0;
 
 pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
@@ -107,6 +118,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
+#if HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -120,7 +132,12 @@ static void set_affinity(void)
        }
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -168,7 +185,8 @@ void rcu_copy_mutex_unlock(void)
 /*
  * malloc/free are reusing memory areas too quickly, which does not let us
  * test races appropriately. Use a large circular array for allocations.
- * ARRAY_SIZE is larger than nr_writers, which insures we never run over our tail.
+ * ARRAY_SIZE is larger than nr_writers, and we keep the mutex across
+ * both alloc and free, which insures we never run over our tail.
  */
 #define ARRAY_SIZE (1048576 * nr_writers)
 #define ARRAY_POISON 0xDEADBEEF
@@ -180,7 +198,6 @@ static struct test_array *test_array_alloc(void)
        struct test_array *ret;
        int index;
 
-       rcu_copy_mutex_lock();
        index = array_index % ARRAY_SIZE;
        assert(test_array[index].a == ARRAY_POISON ||
                test_array[index].a == 0);
@@ -188,7 +205,6 @@ static struct test_array *test_array_alloc(void)
        array_index++;
        if (array_index == ARRAY_SIZE)
                array_index = 0;
-       rcu_copy_mutex_unlock();
        return ret;
 }
 
@@ -196,9 +212,7 @@ static void test_array_free(struct test_array *ptr)
 {
        if (!ptr)
                return;
-       rcu_copy_mutex_lock();
        ptr->a = ARRAY_POISON;
-       rcu_copy_mutex_unlock();
 }
 
 void *thr_reader(void *_count)
@@ -216,7 +230,7 @@ void *thr_reader(void *_count)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                rcu_read_lock();
@@ -237,6 +251,10 @@ void *thr_reader(void *_count)
 
        rcu_unregister_thread();
 
+       /* test extra thread registration */
+       rcu_register_thread();
+       rcu_unregister_thread();
+
        *count = nr_reads;
        printf_verbose("thread_end %s, thread id : %lx, tid %lu\n",
                        "reader", pthread_self(), (unsigned long)gettid());
@@ -257,16 +275,21 @@ void *thr_writer(void *_count)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
+               rcu_copy_mutex_lock();
                new = test_array_alloc();
                new->a = 8;
-               old = rcu_publish_content(&test_rcu_pointer, new);
+               old = rcu_xchg_pointer(&test_rcu_pointer, new);
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
+               synchronize_rcu();
                /* can be done after unlock */
                if (old)
                        old->a = 0;
                test_array_free(old);
+               rcu_copy_mutex_unlock();
                nr_writes++;
                if (unlikely(!test_duration_write()))
                        break;
@@ -288,6 +311,7 @@ void show_usage(int argc, char **argv)
 #endif
        printf(" [-d delay] (writer period (us))");
        printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
        printf(" [-v] (verbose output)");
        printf(" [-a cpu#] [-a cpu#]... (affinity)");
        printf("\n");
@@ -361,6 +385,13 @@ int main(int argc, char **argv)
                        }
                        wdelay = atol(argv[++i]);
                        break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
                case 'v':
                        verbose_mode = 1;
                        break;
@@ -374,7 +405,7 @@ int main(int argc, char **argv)
        printf_verbose("thread %-6s, thread id : %lx, tid %lu\n",
                        "main", pthread_self(), (unsigned long)gettid());
 
-       test_array = malloc(sizeof(*test_array) * ARRAY_SIZE);
+       test_array = calloc(1, sizeof(*test_array) * ARRAY_SIZE);
        tid_reader = malloc(sizeof(*tid_reader) * nr_readers);
        tid_writer = malloc(sizeof(*tid_writer) * nr_writers);
        count_reader = malloc(sizeof(*count_reader) * nr_readers);
@@ -395,7 +426,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       smp_mb();
+       cmm_smp_mb();
 
        test_go = 1;
 
@@ -418,10 +449,10 @@ int main(int argc, char **argv)
        
        printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
               tot_writes);
-       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
                "nr_writers %3u "
                "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n",
-               argv[0], duration, nr_readers, rduration,
+               argv[0], duration, nr_readers, rduration, wduration,
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes);
        test_array_free(test_rcu_pointer);
index 004672db12a16ff777a38cb789821e852f7a15ce..0c1c124ae6773e07c203d6e4b219272b8589de39 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program (with baatch reclamation)
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#include "../config.h"
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
@@ -57,7 +59,7 @@ static inline pid_t gettid(void)
 #endif
 
 #define _LGPL_SOURCE
-#include "../urcu-qsbr.h"
+#include <urcu-qsbr.h>
 
 struct test_array {
        int a;
@@ -83,10 +85,13 @@ struct reclaim_queue {
 static struct reclaim_queue *pending_reclaims;
 
 
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 static int verbose_mode;
@@ -103,6 +108,12 @@ static int use_affinity = 0;
 
 pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
@@ -112,6 +123,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
+#if HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -123,9 +135,15 @@ static void set_affinity(void)
                perror("Error in pthread mutex unlock");
                exit(-1);
        }
+
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -149,7 +167,7 @@ static unsigned int nr_writers;
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 static
-unsigned long long __attribute__((aligned(CACHE_LINE_SIZE))) *tot_nr_writes;
+unsigned long long __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *tot_nr_writes;
 
 
 void rcu_copy_mutex_lock(void)
@@ -188,7 +206,7 @@ void *thr_reader(void *_count)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                _rcu_read_lock();
@@ -264,7 +282,7 @@ void *thr_writer(void *data)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
 #ifndef TEST_LOCAL_GC
@@ -272,6 +290,8 @@ void *thr_writer(void *data)
                new->a = 8;
                old = _rcu_xchg_pointer(&test_rcu_pointer, new);
 #endif
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
                rcu_gc_reclaim(wtidx, old);
                nr_writes++;
                if (unlikely(!test_duration_write()))
@@ -292,8 +312,10 @@ void show_usage(int argc, char **argv)
 #ifdef DEBUG_YIELD
        printf(" [-r] [-w] (yield reader and/or writer)");
 #endif
+       printf(" [-b batch] (batch reclaim)");
        printf(" [-d delay] (writer period (us))");
        printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
        printf(" [-v] (verbose output)");
        printf(" [-a cpu#] [-a cpu#]... (affinity)");
        printf("\n");
@@ -374,6 +396,13 @@ int main(int argc, char **argv)
                        }
                        wdelay = atol(argv[++i]);
                        break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
                case 'v':
                        verbose_mode = 1;
                        break;
@@ -393,9 +422,9 @@ int main(int argc, char **argv)
        tot_nr_writes = malloc(sizeof(*tot_nr_writes) * nr_writers);
        pending_reclaims = malloc(sizeof(*pending_reclaims) * nr_writers);
        if (reclaim_batch * sizeof(*pending_reclaims[i].queue)
-                       < CACHE_LINE_SIZE)
+                       < CAA_CACHE_LINE_SIZE)
                for (i = 0; i < nr_writers; i++)
-                       pending_reclaims[i].queue = calloc(1, CACHE_LINE_SIZE);
+                       pending_reclaims[i].queue = calloc(1, CAA_CACHE_LINE_SIZE);
        else
                for (i = 0; i < nr_writers; i++)
                        pending_reclaims[i].queue = calloc(reclaim_batch,
@@ -418,7 +447,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       smp_mb();
+       cmm_smp_mb();
 
        test_go = 1;
 
@@ -442,11 +471,11 @@ int main(int argc, char **argv)
        
        printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
               tot_writes);
-       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
                "nr_writers %3u "
                "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu "
                "batch %u\n",
-               argv[0], duration, nr_readers, rduration,
+               argv[0], duration, nr_readers, rduration, wduration,
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes, reclaim_batch);
        free(tid_reader);
index 2a8963a3dc315110d6f94e6ffba0c21d531c4fd7..792554867735702c007736c2713125ffa8060686 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace QSBR - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
-#include "../arch.h"
+#include <errno.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 #if defined(_syscall0)
 _syscall0(pid_t, gettid)
@@ -51,7 +53,7 @@ static inline pid_t gettid(void)
 #endif
 
 #define _LGPL_SOURCE
-#include "../urcu-qsbr.h"
+#include <urcu-qsbr.h>
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
@@ -96,8 +98,8 @@ static int num_write;
 #define NR_READ num_read
 #define NR_WRITE num_write
 
-static cycles_t __attribute__((aligned(CACHE_LINE_SIZE))) *reader_time;
-static cycles_t __attribute__((aligned(CACHE_LINE_SIZE))) *writer_time;
+static cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time;
+static cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time;
 
 void *thr_reader(void *arg)
 {
@@ -111,7 +113,7 @@ void *thr_reader(void *arg)
 
        rcu_register_thread();
 
-       time1 = get_cycles();
+       time1 = caa_get_cycles();
        for (i = 0; i < OUTER_READ_LOOP; i++) {
                for (j = 0; j < INNER_READ_LOOP; j++) {
                        _rcu_read_lock();
@@ -123,7 +125,7 @@ void *thr_reader(void *arg)
                }
                _rcu_quiescent_state();
        }
-       time2 = get_cycles();
+       time2 = caa_get_cycles();
 
        rcu_unregister_thread();
 
@@ -148,7 +150,7 @@ void *thr_writer(void *arg)
 
        for (i = 0; i < OUTER_WRITE_LOOP; i++) {
                for (j = 0; j < INNER_WRITE_LOOP; j++) {
-                       time1 = get_cycles();
+                       time1 = caa_get_cycles();
                        new = malloc(sizeof(struct test_array));
                        rcu_copy_mutex_lock();
                        old = test_rcu_pointer;
@@ -156,14 +158,15 @@ void *thr_writer(void *arg)
                                assert(old->a == 8);
                        }
                        new->a = 8;
-                       old = _rcu_publish_content(&test_rcu_pointer, new);
+                       old = rcu_xchg_pointer(&test_rcu_pointer, new);
                        rcu_copy_mutex_unlock();
+                       synchronize_rcu();
                        /* can be done after unlock */
                        if (old) {
                                old->a = 0;
                        }
                        free(old);
-                       time2 = get_cycles();
+                       time2 = caa_get_cycles();
                        writer_time[(unsigned long)arg] += time2 - time1;
                        usleep(1);
                }
index c7edd32789911f38e3c760d243b28cc371160391..9c8f97e39cf2232be5f461a655102ba1c3feac07 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#include "../config.h"
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
@@ -61,7 +63,7 @@ static inline pid_t gettid(void)
 #else
 #define debug_yield_read()
 #endif
-#include "../urcu.h"
+#include <urcu.h>
 
 struct test_array {
        int a;
@@ -80,10 +82,13 @@ static unsigned long duration;
 /* read-side C.S. duration, in loops */
 static unsigned long rduration;
 
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 static int verbose_mode;
@@ -100,6 +105,12 @@ static int use_affinity = 0;
 
 pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
@@ -109,6 +120,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
+#if HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -120,9 +132,15 @@ static void set_affinity(void)
                perror("Error in pthread mutex unlock");
                exit(-1);
        }
+
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -210,12 +228,14 @@ void *thr_writer(void *_count)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                pthread_rwlock_wrlock(&lock);
                test_array.a = 0;
                test_array.a = 8;
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
                pthread_rwlock_unlock(&lock);
                nr_writes++;
                if (unlikely(!test_duration_write()))
@@ -238,6 +258,7 @@ void show_usage(int argc, char **argv)
 #endif
        printf(" [-d delay] (writer period (us))");
        printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
        printf(" [-v] (verbose output)");
        printf(" [-a cpu#] [-a cpu#]... (affinity)");
        printf("\n");
@@ -256,7 +277,7 @@ int main(int argc, char **argv)
                show_usage(argc, argv);
                return -1;
        }
-       smp_mb();
+       cmm_smp_mb();
 
        err = sscanf(argv[1], "%u", &nr_readers);
        if (err != 1) {
@@ -312,6 +333,13 @@ int main(int argc, char **argv)
                        }
                        wdelay = atol(argv[++i]);
                        break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
                case 'v':
                        verbose_mode = 1;
                        break;
@@ -345,7 +373,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       smp_mb();
+       cmm_smp_mb();
 
        test_go = 1;
 
@@ -368,10 +396,10 @@ int main(int argc, char **argv)
 
        printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
               tot_writes);
-       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
                "nr_writers %3u "
                "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n",
-               argv[0], duration, nr_readers, rduration,
+               argv[0], duration, nr_readers, rduration, wduration,
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes);
 
index 5bc93d33d969e8a1cf1c74901d048f06652a68eb..628bed459af61e38afada3626e2b05e8dd659ab6 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <pthread.h>
-#include "../arch.h"
+#include <errno.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 #if defined(_syscall0)
 _syscall0(pid_t, gettid)
@@ -51,7 +54,7 @@ static inline pid_t gettid(void)
 }
 #endif
 
-#include "../urcu.h"
+#include <urcu.h>
 
 struct test_array {
        int a;
@@ -75,8 +78,8 @@ static int num_write;
 #define NR_READ num_read
 #define NR_WRITE num_write
 
-static cycles_t __attribute__((aligned(CACHE_LINE_SIZE))) *reader_time;
-static cycles_t __attribute__((aligned(CACHE_LINE_SIZE))) *writer_time;
+static cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time;
+static cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time;
 
 void *thr_reader(void *arg)
 {
@@ -87,7 +90,7 @@ void *thr_reader(void *arg)
                        "reader", pthread_self(), (unsigned long)gettid());
        sleep(2);
 
-       time1 = get_cycles();
+       time1 = caa_get_cycles();
        for (i = 0; i < OUTER_READ_LOOP; i++) {
                for (j = 0; j < INNER_READ_LOOP; j++) {
                        pthread_rwlock_rdlock(&lock);
@@ -95,7 +98,7 @@ void *thr_reader(void *arg)
                        pthread_rwlock_unlock(&lock);
                }
        }
-       time2 = get_cycles();
+       time2 = caa_get_cycles();
 
        reader_time[(unsigned long)arg] = time2 - time1;
 
@@ -117,11 +120,11 @@ void *thr_writer(void *arg)
 
        for (i = 0; i < OUTER_WRITE_LOOP; i++) {
                for (j = 0; j < INNER_WRITE_LOOP; j++) {
-                       time1 = get_cycles();
+                       time1 = caa_get_cycles();
                        pthread_rwlock_wrlock(&lock);
                        test_array.a = 8;
                        pthread_rwlock_unlock(&lock);
-                       time2 = get_cycles();
+                       time2 = caa_get_cycles();
                        writer_time[(unsigned long)arg] += time2 - time1;
                        usleep(1);
                }
diff --git a/tests/test_uatomic.c b/tests/test_uatomic.c
new file mode 100644 (file)
index 0000000..692060b
--- /dev/null
@@ -0,0 +1,61 @@
+#include <stdio.h>
+#include <assert.h>
+#include <urcu/uatomic.h>
+
+struct testvals {
+       unsigned char c;
+       unsigned short s;
+       unsigned int i;
+       unsigned long l;
+};
+
+static struct testvals vals;
+
+#define do_test(ptr)                           \
+do {                                           \
+       __typeof__(*(ptr)) v;                   \
+                                               \
+       uatomic_add(ptr, 10);                   \
+       assert(uatomic_read(ptr) == 10);                \
+       uatomic_add(ptr, -11UL);                        \
+       assert(uatomic_read(ptr) == (__typeof__(*(ptr)))-1UL);  \
+       v = uatomic_cmpxchg(ptr, -1UL, 22);             \
+       assert(uatomic_read(ptr) == 22);                \
+       assert(v == (__typeof__(*(ptr)))-1UL);  \
+       v = uatomic_cmpxchg(ptr, 33, 44);               \
+       assert(uatomic_read(ptr) == 22);                \
+       assert(v == 22);                        \
+       v = uatomic_xchg(ptr, 55);                      \
+       assert(uatomic_read(ptr) == 55);                \
+       assert(v == 22);                        \
+       uatomic_set(ptr, 22);                   \
+       uatomic_inc(ptr);                       \
+       assert(uatomic_read(ptr) == 23);                \
+       uatomic_dec(ptr);                       \
+       assert(uatomic_read(ptr) == 22);                \
+       v = uatomic_add_return(ptr, 74);        \
+       assert(v == 96);                        \
+       assert(uatomic_read(ptr) == 96);        \
+       uatomic_or(ptr, 58);                    \
+       assert(uatomic_read(ptr) == 122);       \
+       v = uatomic_sub_return(ptr, 1);         \
+       assert(v == 121);                       \
+       assert(uatomic_read(ptr) == 121);       \
+       uatomic_and(ptr, 129);                  \
+       assert(uatomic_read(ptr) == 1);         \
+} while (0)
+
+int main(int argc, char **argv)
+{
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       do_test(&vals.c);
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       do_test(&vals.s);
+#endif
+       do_test(&vals.i);
+       do_test(&vals.l);
+       printf("Atomic ops test OK\n");
+
+       return 0;
+}
index 18683bf3928972cdc6cec5cfaacc753596a4f9a3..884d77c472ae28b3a79059d303559932f544b41d 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#include "../config.h"
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
@@ -61,7 +63,7 @@ static inline pid_t gettid(void)
 #else
 #define debug_yield_read()
 #endif
-#include "../urcu.h"
+#include <urcu.h>
 
 struct test_array {
        int a;
@@ -78,10 +80,13 @@ static unsigned long duration;
 /* read-side C.S. duration, in loops */
 static unsigned long rduration;
 
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 static int verbose_mode;
@@ -98,6 +103,12 @@ static int use_affinity = 0;
 
 pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
@@ -107,6 +118,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
+#if HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -118,9 +130,15 @@ static void set_affinity(void)
                perror("Error in pthread mutex unlock");
                exit(-1);
        }
+
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -168,7 +186,8 @@ void rcu_copy_mutex_unlock(void)
 /*
  * malloc/free are reusing memory areas too quickly, which does not let us
  * test races appropriately. Use a large circular array for allocations.
- * ARRAY_SIZE is larger than nr_writers, which insures we never run over our tail.
+ * ARRAY_SIZE is larger than nr_writers, and we keep the mutex across
+ * both alloc and free, which insures we never run over our tail.
  */
 #define ARRAY_SIZE (1048576 * nr_writers)
 #define ARRAY_POISON 0xDEADBEEF
@@ -180,7 +199,6 @@ static struct test_array *test_array_alloc(void)
        struct test_array *ret;
        int index;
 
-       rcu_copy_mutex_lock();
        index = array_index % ARRAY_SIZE;
        assert(test_array[index].a == ARRAY_POISON ||
                test_array[index].a == 0);
@@ -188,7 +206,6 @@ static struct test_array *test_array_alloc(void)
        array_index++;
        if (array_index == ARRAY_SIZE)
                array_index = 0;
-       rcu_copy_mutex_unlock();
        return ret;
 }
 
@@ -196,9 +213,7 @@ static void test_array_free(struct test_array *ptr)
 {
        if (!ptr)
                return;
-       rcu_copy_mutex_lock();
        ptr->a = ARRAY_POISON;
-       rcu_copy_mutex_unlock();
 }
 
 void *thr_reader(void *_count)
@@ -216,7 +231,7 @@ void *thr_reader(void *_count)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                rcu_read_lock();
@@ -234,6 +249,10 @@ void *thr_reader(void *_count)
 
        rcu_unregister_thread();
 
+       /* test extra thread registration */
+       rcu_register_thread();
+       rcu_unregister_thread();
+
        *count = nr_reads;
        printf_verbose("thread_end %s, thread id : %lx, tid %lu\n",
                        "reader", pthread_self(), (unsigned long)gettid());
@@ -254,15 +273,20 @@ void *thr_writer(void *_count)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
+               rcu_copy_mutex_lock();
                new = test_array_alloc();
                new->a = 8;
-               old = rcu_publish_content(&test_rcu_pointer, new);
+               old = rcu_xchg_pointer(&test_rcu_pointer, new);
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
+               synchronize_rcu();
                if (old)
                        old->a = 0;
                test_array_free(old);
+               rcu_copy_mutex_unlock();
                nr_writes++;
                if (unlikely(!test_duration_write()))
                        break;
@@ -284,6 +308,7 @@ void show_usage(int argc, char **argv)
 #endif
        printf(" [-d delay] (writer period (us))");
        printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
        printf(" [-v] (verbose output)");
        printf(" [-a cpu#] [-a cpu#]... (affinity)");
        printf("\n");
@@ -357,6 +382,13 @@ int main(int argc, char **argv)
                        }
                        wdelay = atol(argv[++i]);
                        break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
                case 'v':
                        verbose_mode = 1;
                        break;
@@ -370,7 +402,7 @@ int main(int argc, char **argv)
        printf_verbose("thread %-6s, thread id : %lx, tid %lu\n",
                        "main", pthread_self(), (unsigned long)gettid());
 
-       test_array = malloc(sizeof(*test_array) * ARRAY_SIZE);
+       test_array = calloc(1, sizeof(*test_array) * ARRAY_SIZE);
        tid_reader = malloc(sizeof(*tid_reader) * nr_readers);
        tid_writer = malloc(sizeof(*tid_writer) * nr_writers);
        count_reader = malloc(sizeof(*count_reader) * nr_readers);
@@ -391,7 +423,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       smp_mb();
+       cmm_smp_mb();
 
        test_go = 1;
 
@@ -414,10 +446,10 @@ int main(int argc, char **argv)
        
        printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
               tot_writes);
-       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
                "nr_writers %3u "
                "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n",
-               argv[0], duration, nr_readers, rduration,
+               argv[0], duration, nr_readers, rduration, wduration,
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes);
        test_array_free(test_rcu_pointer);
diff --git a/tests/test_urcu_assign.c b/tests/test_urcu_assign.c
new file mode 100644 (file)
index 0000000..0d9ef85
--- /dev/null
@@ -0,0 +1,459 @@
+/*
+ * test_urcu_assign.c
+ *
+ * Userspace RCU library - test program
+ *
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#define _GNU_SOURCE
+#include "../config.h"
+#include <stdio.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <assert.h>
+#include <sched.h>
+#include <errno.h>
+
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
+
+/* hardcoded number of CPUs */
+#define NR_CPUS 16384
+
+#if defined(_syscall0)
+_syscall0(pid_t, gettid)
+#elif defined(__NR_gettid)
+static inline pid_t gettid(void)
+{
+       return syscall(__NR_gettid);
+}
+#else
+#warning "use pid as tid"
+static inline pid_t gettid(void)
+{
+       return getpid();
+}
+#endif
+
+#ifndef DYNAMIC_LINK_TEST
+#define _LGPL_SOURCE
+#else
+#define debug_yield_read()
+#endif
+#include <urcu.h>
+
+struct test_array {
+       int a;
+};
+
+static volatile int test_go, test_stop;
+
+static unsigned long wdelay;
+
+static struct test_array *test_rcu_pointer;
+
+static unsigned long duration;
+
+/* read-side C.S. duration, in loops */
+static unsigned long rduration;
+
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
+static inline void loop_sleep(unsigned long l)
+{
+       while(l-- != 0)
+               caa_cpu_relax();
+}
+
+static int verbose_mode;
+
+#define printf_verbose(fmt, args...)           \
+       do {                                    \
+               if (verbose_mode)               \
+                       printf(fmt, args);      \
+       } while (0)
+
+static unsigned int cpu_affinities[NR_CPUS];
+static unsigned int next_aff = 0;
+static int use_affinity = 0;
+
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
+static void set_affinity(void)
+{
+       cpu_set_t mask;
+       int cpu;
+       int ret;
+
+       if (!use_affinity)
+               return;
+
+#if HAVE_SCHED_SETAFFINITY
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+       cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+
+       CPU_ZERO(&mask);
+       CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
+       sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
+}
+
+/*
+ * returns 0 if test should end.
+ */
+static int test_duration_write(void)
+{
+       return !test_stop;
+}
+
+static int test_duration_read(void)
+{
+       return !test_stop;
+}
+
+static unsigned long long __thread nr_writes;
+static unsigned long long __thread nr_reads;
+
+static unsigned int nr_readers;
+static unsigned int nr_writers;
+
+pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+void rcu_copy_mutex_lock(void)
+{
+       int ret;
+       ret = pthread_mutex_lock(&rcu_copy_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+}
+
+void rcu_copy_mutex_unlock(void)
+{
+       int ret;
+
+       ret = pthread_mutex_unlock(&rcu_copy_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+}
+
+/*
+ * malloc/free are reusing memory areas too quickly, which does not let us
+ * test races appropriately. Use a large circular array for allocations.
+ * ARRAY_SIZE is larger than nr_writers, and we keep the mutex across
+ * both alloc and free, which insures we never run over our tail.
+ */
+#define ARRAY_SIZE (1048576 * nr_writers)
+#define ARRAY_POISON 0xDEADBEEF
+static int array_index;
+static struct test_array *test_array;
+
+static struct test_array *test_array_alloc(void)
+{
+       struct test_array *ret;
+       int index;
+
+       index = array_index % ARRAY_SIZE;
+       assert(test_array[index].a == ARRAY_POISON ||
+               test_array[index].a == 0);
+       ret = &test_array[index];
+       array_index++;
+       if (array_index == ARRAY_SIZE)
+               array_index = 0;
+       return ret;
+}
+
+static void test_array_free(struct test_array *ptr)
+{
+       if (!ptr)
+               return;
+       ptr->a = ARRAY_POISON;
+}
+
+void *thr_reader(void *_count)
+{
+       unsigned long long *count = _count;
+       struct test_array *local_ptr;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "reader", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       rcu_register_thread();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               rcu_read_lock();
+               local_ptr = rcu_dereference(test_rcu_pointer);
+               debug_yield_read();
+               if (local_ptr)
+                       assert(local_ptr->a == 8);
+               if (unlikely(rduration))
+                       loop_sleep(rduration);
+               rcu_read_unlock();
+               nr_reads++;
+               if (unlikely(!test_duration_read()))
+                       break;
+       }
+
+       rcu_unregister_thread();
+
+       *count = nr_reads;
+       printf_verbose("thread_end %s, thread id : %lx, tid %lu\n",
+                       "reader", pthread_self(), (unsigned long)gettid());
+       return ((void*)1);
+
+}
+
+void *thr_writer(void *_count)
+{
+       unsigned long long *count = _count;
+       struct test_array *new, *old;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "writer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               rcu_copy_mutex_lock();
+               new = test_array_alloc();
+               new->a = 8;
+               old = test_rcu_pointer;
+               rcu_assign_pointer(test_rcu_pointer, new);
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
+               synchronize_rcu();
+               if (old)
+                       old->a = 0;
+               test_array_free(old);
+               rcu_copy_mutex_unlock();
+               nr_writes++;
+               if (unlikely(!test_duration_write()))
+                       break;
+               if (unlikely(wdelay))
+                       loop_sleep(wdelay);
+       }
+
+       printf_verbose("thread_end %s, thread id : %lx, tid %lu\n",
+                       "writer", pthread_self(), (unsigned long)gettid());
+       *count = nr_writes;
+       return ((void*)2);
+}
+
+void show_usage(int argc, char **argv)
+{
+       printf("Usage : %s nr_readers nr_writers duration (s)", argv[0]);
+#ifdef DEBUG_YIELD
+       printf(" [-r] [-w] (yield reader and/or writer)");
+#endif
+       printf(" [-d delay] (writer period (us))");
+       printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
+       printf(" [-v] (verbose output)");
+       printf(" [-a cpu#] [-a cpu#]... (affinity)");
+       printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+       int err;
+       pthread_t *tid_reader, *tid_writer;
+       void *tret;
+       unsigned long long *count_reader, *count_writer;
+       unsigned long long tot_reads = 0, tot_writes = 0;
+       int i, a;
+
+       if (argc < 4) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[1], "%u", &nr_readers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[2], "%u", &nr_writers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+       
+       err = sscanf(argv[3], "%lu", &duration);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       for (i = 4; i < argc; i++) {
+               if (argv[i][0] != '-')
+                       continue;
+               switch (argv[i][1]) {
+#ifdef DEBUG_YIELD
+               case 'r':
+                       yield_active |= YIELD_READ;
+                       break;
+               case 'w':
+                       yield_active |= YIELD_WRITE;
+                       break;
+#endif
+               case 'a':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       a = atoi(argv[++i]);
+                       cpu_affinities[next_aff++] = a;
+                       use_affinity = 1;
+                       printf_verbose("Adding CPU %d affinity\n", a);
+                       break;
+               case 'c':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       rduration = atol(argv[++i]);
+                       break;
+               case 'd':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wdelay = atol(argv[++i]);
+                       break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
+               case 'v':
+                       verbose_mode = 1;
+                       break;
+               }
+       }
+
+       printf_verbose("running test for %lu seconds, %u readers, %u writers.\n",
+               duration, nr_readers, nr_writers);
+       printf_verbose("Writer delay : %lu loops.\n", wdelay);
+       printf_verbose("Reader duration : %lu loops.\n", rduration);
+       printf_verbose("thread %-6s, thread id : %lx, tid %lu\n",
+                       "main", pthread_self(), (unsigned long)gettid());
+
+       test_array = calloc(1, sizeof(*test_array) * ARRAY_SIZE);
+       tid_reader = malloc(sizeof(*tid_reader) * nr_readers);
+       tid_writer = malloc(sizeof(*tid_writer) * nr_writers);
+       count_reader = malloc(sizeof(*count_reader) * nr_readers);
+       count_writer = malloc(sizeof(*count_writer) * nr_writers);
+
+       next_aff = 0;
+
+       for (i = 0; i < nr_readers; i++) {
+               err = pthread_create(&tid_reader[i], NULL, thr_reader,
+                                    &count_reader[i]);
+               if (err != 0)
+                       exit(1);
+       }
+       for (i = 0; i < nr_writers; i++) {
+               err = pthread_create(&tid_writer[i], NULL, thr_writer,
+                                    &count_writer[i]);
+               if (err != 0)
+                       exit(1);
+       }
+
+       cmm_smp_mb();
+
+       test_go = 1;
+
+       sleep(duration);
+
+       test_stop = 1;
+
+       for (i = 0; i < nr_readers; i++) {
+               err = pthread_join(tid_reader[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_reads += count_reader[i];
+       }
+       for (i = 0; i < nr_writers; i++) {
+               err = pthread_join(tid_writer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_writes += count_writer[i];
+       }
+       
+       printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
+              tot_writes);
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
+               "nr_writers %3u "
+               "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n",
+               argv[0], duration, nr_readers, rduration, wduration,
+               nr_writers, wdelay, tot_reads, tot_writes,
+               tot_reads + tot_writes);
+       test_array_free(test_rcu_pointer);
+       free(test_array);
+       free(tid_reader);
+       free(tid_writer);
+       free(count_reader);
+       free(count_writer);
+       return 0;
+}
diff --git a/tests/test_urcu_bp.c b/tests/test_urcu_bp.c
new file mode 100644 (file)
index 0000000..ba80ae6
--- /dev/null
@@ -0,0 +1,458 @@
+/*
+ * test_urcu.c
+ *
+ * Userspace RCU library - test program
+ *
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#define _GNU_SOURCE
+#include "../config.h"
+#include <stdio.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <assert.h>
+#include <sched.h>
+#include <errno.h>
+
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
+
+/* hardcoded number of CPUs */
+#define NR_CPUS 16384
+
+#if defined(_syscall0)
+_syscall0(pid_t, gettid)
+#elif defined(__NR_gettid)
+static inline pid_t gettid(void)
+{
+       return syscall(__NR_gettid);
+}
+#else
+#warning "use pid as tid"
+static inline pid_t gettid(void)
+{
+       return getpid();
+}
+#endif
+
+#ifndef DYNAMIC_LINK_TEST
+#define _LGPL_SOURCE
+#else
+#define debug_yield_read()
+#endif
+#include <urcu-bp.h>
+
+struct test_array {
+       int a;
+};
+
+static volatile int test_go, test_stop;
+
+static unsigned long wdelay;
+
+static struct test_array *test_rcu_pointer;
+
+static unsigned long duration;
+
+/* read-side C.S. duration, in loops */
+static unsigned long rduration;
+
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
+static inline void loop_sleep(unsigned long l)
+{
+       while(l-- != 0)
+               caa_cpu_relax();
+}
+
+static int verbose_mode;
+
+#define printf_verbose(fmt, args...)           \
+       do {                                    \
+               if (verbose_mode)               \
+                       printf(fmt, args);      \
+       } while (0)
+
+static unsigned int cpu_affinities[NR_CPUS];
+static unsigned int next_aff = 0;
+static int use_affinity = 0;
+
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
+static void set_affinity(void)
+{
+       cpu_set_t mask;
+       int cpu;
+       int ret;
+
+       if (!use_affinity)
+               return;
+
+#if HAVE_SCHED_SETAFFINITY
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+       cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+
+       CPU_ZERO(&mask);
+       CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
+       sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
+}
+
+/*
+ * returns 0 if test should end.
+ */
+static int test_duration_write(void)
+{
+       return !test_stop;
+}
+
+static int test_duration_read(void)
+{
+       return !test_stop;
+}
+
+static unsigned long long __thread nr_writes;
+static unsigned long long __thread nr_reads;
+
+static unsigned int nr_readers;
+static unsigned int nr_writers;
+
+pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+void rcu_copy_mutex_lock(void)
+{
+       int ret;
+       ret = pthread_mutex_lock(&rcu_copy_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+}
+
+void rcu_copy_mutex_unlock(void)
+{
+       int ret;
+
+       ret = pthread_mutex_unlock(&rcu_copy_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+}
+
+/*
+ * malloc/free are reusing memory areas too quickly, which does not let us
+ * test races appropriately. Use a large circular array for allocations.
+ * ARRAY_SIZE is larger than nr_writers, and we keep the mutex across
+ * both alloc and free, which insures we never run over our tail.
+ */
+#define ARRAY_SIZE (1048576 * nr_writers)
+#define ARRAY_POISON 0xDEADBEEF
+static int array_index;
+static struct test_array *test_array;
+
+static struct test_array *test_array_alloc(void)
+{
+       struct test_array *ret;
+       int index;
+
+       index = array_index % ARRAY_SIZE;
+       assert(test_array[index].a == ARRAY_POISON ||
+               test_array[index].a == 0);
+       ret = &test_array[index];
+       array_index++;
+       if (array_index == ARRAY_SIZE)
+               array_index = 0;
+       return ret;
+}
+
+static void test_array_free(struct test_array *ptr)
+{
+       if (!ptr)
+               return;
+       ptr->a = ARRAY_POISON;
+}
+
+void *thr_reader(void *_count)
+{
+       unsigned long long *count = _count;
+       struct test_array *local_ptr;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "reader", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       rcu_register_thread();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               rcu_read_lock();
+               local_ptr = rcu_dereference(test_rcu_pointer);
+               debug_yield_read();
+               if (local_ptr)
+                       assert(local_ptr->a == 8);
+               if (unlikely(rduration))
+                       loop_sleep(rduration);
+               rcu_read_unlock();
+               nr_reads++;
+               if (unlikely(!test_duration_read()))
+                       break;
+       }
+
+       rcu_unregister_thread();
+
+       *count = nr_reads;
+       printf_verbose("thread_end %s, thread id : %lx, tid %lu\n",
+                       "reader", pthread_self(), (unsigned long)gettid());
+       return ((void*)1);
+
+}
+
+void *thr_writer(void *_count)
+{
+       unsigned long long *count = _count;
+       struct test_array *new, *old;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "writer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               rcu_copy_mutex_lock();
+               new = test_array_alloc();
+               new->a = 8;
+               old = rcu_xchg_pointer(&test_rcu_pointer, new);
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
+               synchronize_rcu();
+               if (old)
+                       old->a = 0;
+               test_array_free(old);
+               rcu_copy_mutex_unlock();
+               nr_writes++;
+               if (unlikely(!test_duration_write()))
+                       break;
+               if (unlikely(wdelay))
+                       loop_sleep(wdelay);
+       }
+
+       printf_verbose("thread_end %s, thread id : %lx, tid %lu\n",
+                       "writer", pthread_self(), (unsigned long)gettid());
+       *count = nr_writes;
+       return ((void*)2);
+}
+
+void show_usage(int argc, char **argv)
+{
+       printf("Usage : %s nr_readers nr_writers duration (s)", argv[0]);
+#ifdef DEBUG_YIELD
+       printf(" [-r] [-w] (yield reader and/or writer)");
+#endif
+       printf(" [-d delay] (writer period (us))");
+       printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
+       printf(" [-v] (verbose output)");
+       printf(" [-a cpu#] [-a cpu#]... (affinity)");
+       printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+       int err;
+       pthread_t *tid_reader, *tid_writer;
+       void *tret;
+       unsigned long long *count_reader, *count_writer;
+       unsigned long long tot_reads = 0, tot_writes = 0;
+       int i, a;
+
+       if (argc < 4) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[1], "%u", &nr_readers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[2], "%u", &nr_writers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+       
+       err = sscanf(argv[3], "%lu", &duration);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       for (i = 4; i < argc; i++) {
+               if (argv[i][0] != '-')
+                       continue;
+               switch (argv[i][1]) {
+#ifdef DEBUG_YIELD
+               case 'r':
+                       yield_active |= YIELD_READ;
+                       break;
+               case 'w':
+                       yield_active |= YIELD_WRITE;
+                       break;
+#endif
+               case 'a':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       a = atoi(argv[++i]);
+                       cpu_affinities[next_aff++] = a;
+                       use_affinity = 1;
+                       printf_verbose("Adding CPU %d affinity\n", a);
+                       break;
+               case 'c':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       rduration = atol(argv[++i]);
+                       break;
+               case 'd':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wdelay = atol(argv[++i]);
+                       break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
+               case 'v':
+                       verbose_mode = 1;
+                       break;
+               }
+       }
+
+       printf_verbose("running test for %lu seconds, %u readers, %u writers.\n",
+               duration, nr_readers, nr_writers);
+       printf_verbose("Writer delay : %lu loops.\n", wdelay);
+       printf_verbose("Reader duration : %lu loops.\n", rduration);
+       printf_verbose("thread %-6s, thread id : %lx, tid %lu\n",
+                       "main", pthread_self(), (unsigned long)gettid());
+
+       test_array = calloc(1, sizeof(*test_array) * ARRAY_SIZE);
+       tid_reader = malloc(sizeof(*tid_reader) * nr_readers);
+       tid_writer = malloc(sizeof(*tid_writer) * nr_writers);
+       count_reader = malloc(sizeof(*count_reader) * nr_readers);
+       count_writer = malloc(sizeof(*count_writer) * nr_writers);
+
+       next_aff = 0;
+
+       for (i = 0; i < nr_readers; i++) {
+               err = pthread_create(&tid_reader[i], NULL, thr_reader,
+                                    &count_reader[i]);
+               if (err != 0)
+                       exit(1);
+       }
+       for (i = 0; i < nr_writers; i++) {
+               err = pthread_create(&tid_writer[i], NULL, thr_writer,
+                                    &count_writer[i]);
+               if (err != 0)
+                       exit(1);
+       }
+
+       cmm_smp_mb();
+
+       test_go = 1;
+
+       sleep(duration);
+
+       test_stop = 1;
+
+       for (i = 0; i < nr_readers; i++) {
+               err = pthread_join(tid_reader[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_reads += count_reader[i];
+       }
+       for (i = 0; i < nr_writers; i++) {
+               err = pthread_join(tid_writer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_writes += count_writer[i];
+       }
+       
+       printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
+              tot_writes);
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
+               "nr_writers %3u "
+               "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n",
+               argv[0], duration, nr_readers, rduration, wduration,
+               nr_writers, wdelay, tot_reads, tot_writes,
+               tot_reads + tot_writes);
+       test_array_free(test_rcu_pointer);
+       free(test_array);
+       free(tid_reader);
+       free(tid_writer);
+       free(count_reader);
+       free(count_writer);
+       return 0;
+}
index 0961b8d2de85335efea234f63769e1bce98f00eb..7d71f1029f45f0d97d933e6d85a97ded23dd85ef 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program (with automatic reclamation)
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#include "../config.h"
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
@@ -61,8 +63,8 @@ static inline pid_t gettid(void)
 #else
 #define debug_yield_read()
 #endif
-#include "../urcu.h"
-#include "../urcu-defer.h"
+#include <urcu.h>
+#include <urcu-defer.h>
 
 struct test_array {
        int a;
@@ -79,10 +81,13 @@ static unsigned long duration;
 /* read-side C.S. duration, in loops */
 static unsigned long rduration;
 
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 static int verbose_mode;
@@ -99,6 +104,12 @@ static int use_affinity = 0;
 
 pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
@@ -108,6 +119,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
+#if HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -119,9 +131,15 @@ static void set_affinity(void)
                perror("Error in pthread mutex unlock");
                exit(-1);
        }
+
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -141,7 +159,7 @@ static unsigned long long __thread nr_writes;
 static unsigned long long __thread nr_reads;
 
 static
-unsigned long long __attribute__((aligned(CACHE_LINE_SIZE))) *tot_nr_writes;
+unsigned long long __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *tot_nr_writes;
 
 static unsigned int nr_readers;
 static unsigned int nr_writers;
@@ -184,7 +202,7 @@ void *thr_reader(void *_count)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                rcu_read_lock();
@@ -221,31 +239,38 @@ void *thr_writer(void *data)
 {
        unsigned long wtidx = (unsigned long)data;
        struct test_array *new, *old = NULL;
+       int ret;
 
        printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
                        "writer", pthread_self(), (unsigned long)gettid());
 
        set_affinity();
 
-       rcu_defer_register_thread();
+       ret = rcu_defer_register_thread();
+       if (ret) {
+               printf("Error in rcu_defer_register_thread\n");
+               exit(-1);
+       }
 
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                new = malloc(sizeof(*new));
                new->a = 8;
                old = rcu_xchg_pointer(&test_rcu_pointer, new);
-               call_rcu(free, old);
-               call_rcu(test_cb1, old);
-               call_rcu(test_cb1, (void *)-2L);
-               call_rcu(test_cb1, (void *)-2L);
-               call_rcu(test_cb1, old);
-               call_rcu(test_cb2, (void *)-2L);
-               call_rcu(test_cb2, (void *)-4L);
-               call_rcu(test_cb2, (void *)-2L);
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
+               defer_rcu(free, old);
+               defer_rcu(test_cb1, old);
+               defer_rcu(test_cb1, (void *)-2L);
+               defer_rcu(test_cb1, (void *)-2L);
+               defer_rcu(test_cb1, old);
+               defer_rcu(test_cb2, (void *)-2L);
+               defer_rcu(test_cb2, (void *)-4L);
+               defer_rcu(test_cb2, (void *)-2L);
                nr_writes++;
                if (unlikely(!test_duration_write()))
                        break;
@@ -269,6 +294,7 @@ void show_usage(int argc, char **argv)
 #endif
        printf(" [-d delay] (writer period (us))");
        printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
        printf(" [-v] (verbose output)");
        printf(" [-a cpu#] [-a cpu#]... (affinity)");
        printf("\n");
@@ -342,6 +368,13 @@ int main(int argc, char **argv)
                        }
                        wdelay = atol(argv[++i]);
                        break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
                case 'v':
                        verbose_mode = 1;
                        break;
@@ -375,7 +408,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       smp_mb();
+       cmm_smp_mb();
 
        test_go = 1;
 
@@ -398,10 +431,10 @@ int main(int argc, char **argv)
        
        printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
               tot_writes);
-       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
                "nr_writers %3u "
                "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu\n",
-               argv[0], duration, nr_readers, rduration,
+               argv[0], duration, nr_readers, rduration, wduration,
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes);
        free(tid_reader);
index 213c68bf65e3d7bb1ab506d395a232ab40de6a0d..4eaa61b777d0dd6460b4f0ae196bb5ca0d833c28 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program (with baatch reclamation)
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
  */
 
 #define _GNU_SOURCE
+#include "../config.h"
 #include <stdio.h>
 #include <pthread.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
 #include <sched.h>
+#include <errno.h>
 
-#include "../arch.h"
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 /* hardcoded number of CPUs */
 #define NR_CPUS 16384
@@ -61,7 +63,7 @@ static inline pid_t gettid(void)
 #else
 #define debug_yield_read()
 #endif
-#include "../urcu.h"
+#include <urcu.h>
 
 struct test_array {
        int a;
@@ -87,10 +89,13 @@ static unsigned long duration;
 /* read-side C.S. duration, in loops */
 static unsigned long rduration;
 
+/* write-side C.S. duration, in loops */
+static unsigned long wduration;
+
 static inline void loop_sleep(unsigned long l)
 {
        while(l-- != 0)
-               cpu_relax();
+               caa_cpu_relax();
 }
 
 static int verbose_mode;
@@ -107,6 +112,12 @@ static int use_affinity = 0;
 
 pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
 
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
 static void set_affinity(void)
 {
        cpu_set_t mask;
@@ -116,6 +127,7 @@ static void set_affinity(void)
        if (!use_affinity)
                return;
 
+#if HAVE_SCHED_SETAFFINITY
        ret = pthread_mutex_lock(&affinity_mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
@@ -127,9 +139,15 @@ static void set_affinity(void)
                perror("Error in pthread mutex unlock");
                exit(-1);
        }
+
        CPU_ZERO(&mask);
        CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
        sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
 }
 
 /*
@@ -149,7 +167,7 @@ static unsigned long long __thread nr_writes;
 static unsigned long long __thread nr_reads;
 
 static
-unsigned long long __attribute__((aligned(CACHE_LINE_SIZE))) *tot_nr_writes;
+unsigned long long __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *tot_nr_writes;
 
 static unsigned int nr_readers;
 static unsigned int nr_writers;
@@ -192,7 +210,7 @@ void *thr_reader(void *_count)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
                rcu_read_lock();
@@ -265,7 +283,7 @@ void *thr_writer(void *data)
        while (!test_go)
        {
        }
-       smp_mb();
+       cmm_smp_mb();
 
        for (;;) {
 #ifndef TEST_LOCAL_GC
@@ -273,6 +291,8 @@ void *thr_writer(void *data)
                new->a = 8;
                old = rcu_xchg_pointer(&test_rcu_pointer, new);
 #endif
+               if (unlikely(wduration))
+                       loop_sleep(wduration);
                rcu_gc_reclaim(wtidx, old);
                nr_writes++;
                if (unlikely(!test_duration_write()))
@@ -295,6 +315,7 @@ void show_usage(int argc, char **argv)
 #endif
        printf(" [-d delay] (writer period (us))");
        printf(" [-c duration] (reader C.S. duration (in loops))");
+       printf(" [-e duration] (writer C.S. duration (in loops))");
        printf(" [-v] (verbose output)");
        printf(" [-a cpu#] [-a cpu#]... (affinity)");
        printf("\n");
@@ -375,6 +396,13 @@ int main(int argc, char **argv)
                        }
                        wdelay = atol(argv[++i]);
                        break;
+               case 'e':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wduration = atol(argv[++i]);
+                       break;
                case 'v':
                        verbose_mode = 1;
                        break;
@@ -394,9 +422,9 @@ int main(int argc, char **argv)
        tot_nr_writes = malloc(sizeof(*tot_nr_writes) * nr_writers);
        pending_reclaims = malloc(sizeof(*pending_reclaims) * nr_writers);
        if (reclaim_batch * sizeof(*pending_reclaims[i].queue)
-                       < CACHE_LINE_SIZE)
+                       < CAA_CACHE_LINE_SIZE)
                for (i = 0; i < nr_writers; i++)
-                       pending_reclaims[i].queue = calloc(1, CACHE_LINE_SIZE);
+                       pending_reclaims[i].queue = calloc(1, CAA_CACHE_LINE_SIZE);
        else
                for (i = 0; i < nr_writers; i++)
                        pending_reclaims[i].queue = calloc(reclaim_batch,
@@ -419,7 +447,7 @@ int main(int argc, char **argv)
                        exit(1);
        }
 
-       smp_mb();
+       cmm_smp_mb();
 
        test_go = 1;
 
@@ -443,11 +471,11 @@ int main(int argc, char **argv)
        
        printf_verbose("total number of reads : %llu, writes %llu\n", tot_reads,
               tot_writes);
-       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu "
+       printf("SUMMARY %-25s testdur %4lu nr_readers %3u rdur %6lu wdur %6lu "
                "nr_writers %3u "
                "wdelay %6lu nr_reads %12llu nr_writes %12llu nr_ops %12llu "
                "batch %u\n",
-               argv[0], duration, nr_readers, rduration,
+               argv[0], duration, nr_readers, rduration, wduration,
                nr_writers, wdelay, tot_reads, tot_writes,
                tot_reads + tot_writes, reclaim_batch);
        free(tid_reader);
diff --git a/tests/test_urcu_lfq.c b/tests/test_urcu_lfq.c
new file mode 100644 (file)
index 0000000..cb50586
--- /dev/null
@@ -0,0 +1,451 @@
+/*
+ * test_urcu_lfq.c
+ *
+ * Userspace RCU library - example RCU-based lock-free queue
+ *
+ * Copyright February 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright February 2010 - Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#define _GNU_SOURCE
+#include "../config.h"
+#include <stdio.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <assert.h>
+#include <sched.h>
+#include <errno.h>
+
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
+
+/* hardcoded number of CPUs */
+#define NR_CPUS 16384
+
+#if defined(_syscall0)
+_syscall0(pid_t, gettid)
+#elif defined(__NR_gettid)
+static inline pid_t gettid(void)
+{
+       return syscall(__NR_gettid);
+}
+#else
+#warning "use pid as tid"
+static inline pid_t gettid(void)
+{
+       return getpid();
+}
+#endif
+
+#ifndef DYNAMIC_LINK_TEST
+#define _LGPL_SOURCE
+#endif
+#include <urcu.h>
+#include <urcu/cds.h>
+
+static volatile int test_go, test_stop;
+
+static unsigned long rduration;
+
+static unsigned long duration;
+
+/* read-side C.S. duration, in loops */
+static unsigned long wdelay;
+
+static inline void loop_sleep(unsigned long l)
+{
+       while(l-- != 0)
+               caa_cpu_relax();
+}
+
+static int verbose_mode;
+
+#define printf_verbose(fmt, args...)           \
+       do {                                    \
+               if (verbose_mode)               \
+                       printf(fmt, args);      \
+       } while (0)
+
+static unsigned int cpu_affinities[NR_CPUS];
+static unsigned int next_aff = 0;
+static int use_affinity = 0;
+
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
+static void set_affinity(void)
+{
+       cpu_set_t mask;
+       int cpu;
+       int ret;
+
+       if (!use_affinity)
+               return;
+
+#if HAVE_SCHED_SETAFFINITY
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+       cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+
+       CPU_ZERO(&mask);
+       CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
+       sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
+}
+
+/*
+ * returns 0 if test should end.
+ */
+static int test_duration_dequeue(void)
+{
+       return !test_stop;
+}
+
+static int test_duration_enqueue(void)
+{
+       return !test_stop;
+}
+
+static unsigned long long __thread nr_dequeues;
+static unsigned long long __thread nr_enqueues;
+
+static unsigned long long __thread nr_successful_dequeues;
+static unsigned long long __thread nr_successful_enqueues;
+
+static unsigned int nr_enqueuers;
+static unsigned int nr_dequeuers;
+
+static struct cds_lfq_queue_rcu q;
+
+void *thr_enqueuer(void *_count)
+{
+       unsigned long long *count = _count;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "enqueuer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       rcu_register_thread();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               struct cds_lfq_node_rcu *node = malloc(sizeof(*node));
+               if (!node)
+                       goto fail;
+               cds_lfq_node_init_rcu(node);
+               rcu_read_lock();
+               cds_lfq_enqueue_rcu(&q, node);
+               rcu_read_unlock();
+               nr_successful_enqueues++;
+
+               if (unlikely(wdelay))
+                       loop_sleep(wdelay);
+fail:
+               nr_enqueues++;
+               if (unlikely(!test_duration_enqueue()))
+                       break;
+       }
+
+       rcu_unregister_thread();
+
+       count[0] = nr_enqueues;
+       count[1] = nr_successful_enqueues;
+       printf_verbose("enqueuer thread_end, thread id : %lx, tid %lu, "
+                      "enqueues %llu successful_enqueues %llu\n",
+                      pthread_self(), (unsigned long)gettid(), nr_enqueues,
+                      nr_successful_enqueues);
+       return ((void*)1);
+
+}
+
+static void rcu_free_node(struct rcu_head *head)
+{
+       struct cds_lfq_node_rcu *node =
+               caa_container_of(head, struct cds_lfq_node_rcu, rcu_head);
+       free(node);
+}
+
+static void ref_release_node(struct urcu_ref *ref)
+{
+       struct cds_lfq_node_rcu *node =
+               caa_container_of(ref, struct cds_lfq_node_rcu, ref);
+       call_rcu(&node->rcu_head, rcu_free_node);
+}
+
+void *thr_dequeuer(void *_count)
+{
+       unsigned long long *count = _count;
+       int ret;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "dequeuer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       rcu_register_thread();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               struct cds_lfq_node_rcu *node;
+
+               rcu_read_lock();
+               node = cds_lfq_dequeue_rcu(&q);
+               rcu_read_unlock();
+
+               if (node) {
+                       urcu_ref_put(&node->ref, ref_release_node);
+                       nr_successful_dequeues++;
+               }
+
+               nr_dequeues++;
+               if (unlikely(!test_duration_dequeue()))
+                       break;
+               if (unlikely(rduration))
+                       loop_sleep(rduration);
+       }
+
+       rcu_unregister_thread();
+       printf_verbose("dequeuer thread_end, thread id : %lx, tid %lu, "
+                      "dequeues %llu, successful_dequeues %llu\n",
+                      pthread_self(), (unsigned long)gettid(), nr_dequeues,
+                      nr_successful_dequeues);
+       count[0] = nr_dequeues;
+       count[1] = nr_successful_dequeues;
+       return ((void*)2);
+}
+
+static void release_node(struct urcu_ref *ref)
+{
+       struct cds_lfq_node_rcu *node = caa_container_of(ref, struct cds_lfq_node_rcu, ref);
+       free(node);
+}
+
+void test_end(struct cds_lfq_queue_rcu *q, unsigned long long *nr_dequeues)
+{
+       struct cds_lfq_node_rcu *node;
+
+       do {
+               rcu_read_lock();
+               node = cds_lfq_dequeue_rcu(q);
+               rcu_read_unlock();
+               if (node) {
+                       urcu_ref_put(&node->ref, release_node);
+                       (*nr_dequeues)++;
+               }
+       } while (node);
+}
+
+void show_usage(int argc, char **argv)
+{
+       printf("Usage : %s nr_dequeuers nr_enqueuers duration (s)", argv[0]);
+       printf(" [-d delay] (enqueuer period (in loops))");
+       printf(" [-c duration] (dequeuer period (in loops))");
+       printf(" [-v] (verbose output)");
+       printf(" [-a cpu#] [-a cpu#]... (affinity)");
+       printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+       int err;
+       pthread_t *tid_enqueuer, *tid_dequeuer;
+       void *tret;
+       unsigned long long *count_enqueuer, *count_dequeuer;
+       unsigned long long tot_enqueues = 0, tot_dequeues = 0;
+       unsigned long long tot_successful_enqueues = 0,
+                          tot_successful_dequeues = 0;
+       unsigned long long end_dequeues = 0;
+       int i, a;
+
+       if (argc < 4) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[1], "%u", &nr_dequeuers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[2], "%u", &nr_enqueuers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+       
+       err = sscanf(argv[3], "%lu", &duration);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       for (i = 4; i < argc; i++) {
+               if (argv[i][0] != '-')
+                       continue;
+               switch (argv[i][1]) {
+               case 'a':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       a = atoi(argv[++i]);
+                       cpu_affinities[next_aff++] = a;
+                       use_affinity = 1;
+                       printf_verbose("Adding CPU %d affinity\n", a);
+                       break;
+               case 'c':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       rduration = atol(argv[++i]);
+                       break;
+               case 'd':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wdelay = atol(argv[++i]);
+                       break;
+               case 'v':
+                       verbose_mode = 1;
+                       break;
+               }
+       }
+
+       printf_verbose("running test for %lu seconds, %u enqueuers, "
+                      "%u dequeuers.\n",
+                      duration, nr_enqueuers, nr_dequeuers);
+       printf_verbose("Writer delay : %lu loops.\n", rduration);
+       printf_verbose("Reader duration : %lu loops.\n", wdelay);
+       printf_verbose("thread %-6s, thread id : %lx, tid %lu\n",
+                       "main", pthread_self(), (unsigned long)gettid());
+
+       tid_enqueuer = malloc(sizeof(*tid_enqueuer) * nr_enqueuers);
+       tid_dequeuer = malloc(sizeof(*tid_dequeuer) * nr_dequeuers);
+       count_enqueuer = malloc(2 * sizeof(*count_enqueuer) * nr_enqueuers);
+       count_dequeuer = malloc(2 * sizeof(*count_dequeuer) * nr_dequeuers);
+       cds_lfq_init_rcu(&q, ref_release_node);
+
+       next_aff = 0;
+
+       for (i = 0; i < nr_enqueuers; i++) {
+               err = pthread_create(&tid_enqueuer[i], NULL, thr_enqueuer,
+                                    &count_enqueuer[2 * i]);
+               if (err != 0)
+                       exit(1);
+       }
+       for (i = 0; i < nr_dequeuers; i++) {
+               err = pthread_create(&tid_dequeuer[i], NULL, thr_dequeuer,
+                                    &count_dequeuer[2 * i]);
+               if (err != 0)
+                       exit(1);
+       }
+
+       cmm_smp_mb();
+
+       test_go = 1;
+
+       for (i = 0; i < duration; i++) {
+               sleep(1);
+               if (verbose_mode)
+                       write (1, ".", 1);
+       }
+
+       test_stop = 1;
+
+       for (i = 0; i < nr_enqueuers; i++) {
+               err = pthread_join(tid_enqueuer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_enqueues += count_enqueuer[2 * i];
+               tot_successful_enqueues += count_enqueuer[2 * i + 1];
+       }
+       for (i = 0; i < nr_dequeuers; i++) {
+               err = pthread_join(tid_dequeuer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_dequeues += count_dequeuer[2 * i];
+               tot_successful_dequeues += count_dequeuer[2 * i + 1];
+       }
+       
+       test_end(&q, &end_dequeues);
+
+       printf_verbose("total number of enqueues : %llu, dequeues %llu\n",
+                      tot_enqueues, tot_dequeues);
+       printf_verbose("total number of successful enqueues : %llu, "
+                      "successful dequeues %llu\n",
+                      tot_successful_enqueues, tot_successful_dequeues);
+       printf("SUMMARY %-25s testdur %4lu nr_enqueuers %3u wdelay %6lu "
+               "nr_dequeuers %3u "
+               "rdur %6lu nr_enqueues %12llu nr_dequeues %12llu "
+               "successful enqueues %12llu successful dequeues %12llu "
+               "end_dequeues %llu nr_ops %12llu\n",
+               argv[0], duration, nr_enqueuers, wdelay,
+               nr_dequeuers, rduration, tot_enqueues, tot_dequeues,
+               tot_successful_enqueues,
+               tot_successful_dequeues, end_dequeues,
+               tot_enqueues + tot_dequeues);
+       if (tot_successful_enqueues != tot_successful_dequeues + end_dequeues)
+               printf("WARNING! Discrepancy between nr succ. enqueues %llu vs "
+                      "succ. dequeues + end dequeues %llu.\n",
+                      tot_successful_enqueues,
+                      tot_successful_dequeues + end_dequeues);
+
+       free(count_enqueuer);
+       free(count_dequeuer);
+       free(tid_enqueuer);
+       free(tid_dequeuer);
+       return 0;
+}
diff --git a/tests/test_urcu_lfs.c b/tests/test_urcu_lfs.c
new file mode 100644 (file)
index 0000000..252454d
--- /dev/null
@@ -0,0 +1,434 @@
+/*
+ * test_urcu_lfs.c
+ *
+ * Userspace RCU library - example RCU-based lock-free stack
+ *
+ * Copyright February 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright February 2010 - Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#define _GNU_SOURCE
+#include "../config.h"
+#include <stdio.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <assert.h>
+#include <sched.h>
+#include <errno.h>
+
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
+
+/* hardcoded number of CPUs */
+#define NR_CPUS 16384
+
+#if defined(_syscall0)
+_syscall0(pid_t, gettid)
+#elif defined(__NR_gettid)
+static inline pid_t gettid(void)
+{
+       return syscall(__NR_gettid);
+}
+#else
+#warning "use pid as tid"
+static inline pid_t gettid(void)
+{
+       return getpid();
+}
+#endif
+
+#ifndef DYNAMIC_LINK_TEST
+#define _LGPL_SOURCE
+#endif
+#include <urcu.h>
+#include <urcu/cds.h>
+#include <urcu-defer.h>
+
+static volatile int test_go, test_stop;
+
+static unsigned long rduration;
+
+static unsigned long duration;
+
+/* read-side C.S. duration, in loops */
+static unsigned long wdelay;
+
+static inline void loop_sleep(unsigned long l)
+{
+       while(l-- != 0)
+               caa_cpu_relax();
+}
+
+static int verbose_mode;
+
+#define printf_verbose(fmt, args...)           \
+       do {                                    \
+               if (verbose_mode)               \
+                       printf(fmt, args);      \
+       } while (0)
+
+static unsigned int cpu_affinities[NR_CPUS];
+static unsigned int next_aff = 0;
+static int use_affinity = 0;
+
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
+static void set_affinity(void)
+{
+       cpu_set_t mask;
+       int cpu;
+       int ret;
+
+       if (!use_affinity)
+               return;
+
+#if HAVE_SCHED_SETAFFINITY
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+       cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+
+       CPU_ZERO(&mask);
+       CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
+       sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
+}
+
+/*
+ * returns 0 if test should end.
+ */
+static int test_duration_dequeue(void)
+{
+       return !test_stop;
+}
+
+static int test_duration_enqueue(void)
+{
+       return !test_stop;
+}
+
+static unsigned long long __thread nr_dequeues;
+static unsigned long long __thread nr_enqueues;
+
+static unsigned long long __thread nr_successful_dequeues;
+static unsigned long long __thread nr_successful_enqueues;
+
+static unsigned int nr_enqueuers;
+static unsigned int nr_dequeuers;
+
+static struct cds_lfs_stack_rcu s;
+
+void *thr_enqueuer(void *_count)
+{
+       unsigned long long *count = _count;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "enqueuer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       rcu_register_thread();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               struct cds_lfs_node_rcu *node = malloc(sizeof(*node));
+               if (!node)
+                       goto fail;
+               cds_lfs_node_init_rcu(node);
+               /* No rcu read-side is needed for push */
+               cds_lfs_push_rcu(&s, node);
+               nr_successful_enqueues++;
+
+               if (unlikely(wdelay))
+                       loop_sleep(wdelay);
+fail:
+               nr_enqueues++;
+               if (unlikely(!test_duration_enqueue()))
+                       break;
+       }
+
+       rcu_unregister_thread();
+
+       count[0] = nr_enqueues;
+       count[1] = nr_successful_enqueues;
+       printf_verbose("enqueuer thread_end, thread id : %lx, tid %lu, "
+                      "enqueues %llu successful_enqueues %llu\n",
+                      pthread_self(), (unsigned long)gettid(), nr_enqueues,
+                      nr_successful_enqueues);
+       return ((void*)1);
+
+}
+
+void *thr_dequeuer(void *_count)
+{
+       unsigned long long *count = _count;
+       int ret;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "dequeuer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       ret = rcu_defer_register_thread();
+       if (ret) {
+               printf("Error in rcu_defer_register_thread\n");
+               exit(-1);
+       }
+       rcu_register_thread();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               struct cds_lfs_node_rcu *node;
+
+               rcu_read_lock();
+               node = cds_lfs_pop_rcu(&s);
+               rcu_read_unlock();
+               if (node) {
+                       defer_rcu(free, node);
+                       nr_successful_dequeues++;
+               }
+               nr_dequeues++;
+               if (unlikely(!test_duration_dequeue()))
+                       break;
+               if (unlikely(rduration))
+                       loop_sleep(rduration);
+       }
+
+       rcu_unregister_thread();
+       rcu_defer_unregister_thread();
+
+       printf_verbose("dequeuer thread_end, thread id : %lx, tid %lu, "
+                      "dequeues %llu, successful_dequeues %llu\n",
+                      pthread_self(), (unsigned long)gettid(), nr_dequeues,
+                      nr_successful_dequeues);
+       count[0] = nr_dequeues;
+       count[1] = nr_successful_dequeues;
+       return ((void*)2);
+}
+
+void test_end(struct cds_lfs_stack_rcu *s, unsigned long long *nr_dequeues)
+{
+       struct cds_lfs_node_rcu *node;
+
+       do {
+               node = cds_lfs_pop_rcu(s);
+               if (node) {
+                       free(node);
+                       (*nr_dequeues)++;
+               }
+       } while (node);
+}
+
+void show_usage(int argc, char **argv)
+{
+       printf("Usage : %s nr_dequeuers nr_enqueuers duration (s)", argv[0]);
+       printf(" [-d delay] (enqueuer period (in loops))");
+       printf(" [-c duration] (dequeuer period (in loops))");
+       printf(" [-v] (verbose output)");
+       printf(" [-a cpu#] [-a cpu#]... (affinity)");
+       printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+       int err;
+       pthread_t *tid_enqueuer, *tid_dequeuer;
+       void *tret;
+       unsigned long long *count_enqueuer, *count_dequeuer;
+       unsigned long long tot_enqueues = 0, tot_dequeues = 0;
+       unsigned long long tot_successful_enqueues = 0,
+                          tot_successful_dequeues = 0;
+       unsigned long long end_dequeues = 0;
+       int i, a;
+
+       if (argc < 4) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[1], "%u", &nr_dequeuers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[2], "%u", &nr_enqueuers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+       
+       err = sscanf(argv[3], "%lu", &duration);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       for (i = 4; i < argc; i++) {
+               if (argv[i][0] != '-')
+                       continue;
+               switch (argv[i][1]) {
+               case 'a':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       a = atoi(argv[++i]);
+                       cpu_affinities[next_aff++] = a;
+                       use_affinity = 1;
+                       printf_verbose("Adding CPU %d affinity\n", a);
+                       break;
+               case 'c':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       rduration = atol(argv[++i]);
+                       break;
+               case 'd':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wdelay = atol(argv[++i]);
+                       break;
+               case 'v':
+                       verbose_mode = 1;
+                       break;
+               }
+       }
+
+       printf_verbose("running test for %lu seconds, %u enqueuers, "
+                      "%u dequeuers.\n",
+                      duration, nr_enqueuers, nr_dequeuers);
+       printf_verbose("Writer delay : %lu loops.\n", rduration);
+       printf_verbose("Reader duration : %lu loops.\n", wdelay);
+       printf_verbose("thread %-6s, thread id : %lx, tid %lu\n",
+                       "main", pthread_self(), (unsigned long)gettid());
+
+       tid_enqueuer = malloc(sizeof(*tid_enqueuer) * nr_enqueuers);
+       tid_dequeuer = malloc(sizeof(*tid_dequeuer) * nr_dequeuers);
+       count_enqueuer = malloc(2 * sizeof(*count_enqueuer) * nr_enqueuers);
+       count_dequeuer = malloc(2 * sizeof(*count_dequeuer) * nr_dequeuers);
+       cds_lfs_init_rcu(&s);
+
+       next_aff = 0;
+
+       for (i = 0; i < nr_enqueuers; i++) {
+               err = pthread_create(&tid_enqueuer[i], NULL, thr_enqueuer,
+                                    &count_enqueuer[2 * i]);
+               if (err != 0)
+                       exit(1);
+       }
+       for (i = 0; i < nr_dequeuers; i++) {
+               err = pthread_create(&tid_dequeuer[i], NULL, thr_dequeuer,
+                                    &count_dequeuer[2 * i]);
+               if (err != 0)
+                       exit(1);
+       }
+
+       cmm_smp_mb();
+
+       test_go = 1;
+
+       for (i = 0; i < duration; i++) {
+               sleep(1);
+               if (verbose_mode)
+                       write (1, ".", 1);
+       }
+
+       test_stop = 1;
+
+       for (i = 0; i < nr_enqueuers; i++) {
+               err = pthread_join(tid_enqueuer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_enqueues += count_enqueuer[2 * i];
+               tot_successful_enqueues += count_enqueuer[2 * i + 1];
+       }
+       for (i = 0; i < nr_dequeuers; i++) {
+               err = pthread_join(tid_dequeuer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_dequeues += count_dequeuer[2 * i];
+               tot_successful_dequeues += count_dequeuer[2 * i + 1];
+       }
+       
+       test_end(&s, &end_dequeues);
+
+       printf_verbose("total number of enqueues : %llu, dequeues %llu\n",
+                      tot_enqueues, tot_dequeues);
+       printf_verbose("total number of successful enqueues : %llu, "
+                      "successful dequeues %llu\n",
+                      tot_successful_enqueues, tot_successful_dequeues);
+       printf("SUMMARY %-25s testdur %4lu nr_enqueuers %3u wdelay %6lu "
+               "nr_dequeuers %3u "
+               "rdur %6lu nr_enqueues %12llu nr_dequeues %12llu "
+               "successful enqueues %12llu successful dequeues %12llu "
+               "end_dequeues %llu nr_ops %12llu\n",
+               argv[0], duration, nr_enqueuers, wdelay,
+               nr_dequeuers, rduration, tot_enqueues, tot_dequeues,
+               tot_successful_enqueues,
+               tot_successful_dequeues, end_dequeues,
+               tot_enqueues + tot_dequeues);
+       if (tot_successful_enqueues != tot_successful_dequeues + end_dequeues)
+               printf("WARNING! Discrepancy between nr succ. enqueues %llu vs "
+                      "succ. dequeues + end dequeues %llu.\n",
+                      tot_successful_enqueues,
+                      tot_successful_dequeues + end_dequeues);
+
+       free(count_enqueuer);
+       free(count_dequeuer);
+       free(tid_enqueuer);
+       free(tid_dequeuer);
+       return 0;
+}
index a3ca783a35a806daae65f914fec9bec2c2f0ab58..44235ce5c774e4bdf6091c08cac432f38325fade 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - test program
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <unistd.h>
 #include <stdio.h>
 #include <assert.h>
-#include <sys/syscall.h>
-#include "../arch.h"
+#include <errno.h>
+#include <urcu/arch.h>
 
-/* Make this big enough to include the POWER5+ L3 cacheline size of 256B */
-#define CACHE_LINE_SIZE 4096
+#ifdef __linux__
+#include <syscall.h>
+#endif
 
 #if defined(_syscall0)
 _syscall0(pid_t, gettid)
@@ -51,7 +52,7 @@ static inline pid_t gettid(void)
 #endif
 
 #define _LGPL_SOURCE
-#include "../urcu.h"
+#include <urcu.h>
 
 pthread_mutex_t rcu_copy_mutex = PTHREAD_MUTEX_INITIALIZER;
 
@@ -96,8 +97,8 @@ static int num_write;
 #define NR_READ num_read
 #define NR_WRITE num_write
 
-static cycles_t __attribute__((aligned(CACHE_LINE_SIZE))) *reader_time;
-static cycles_t __attribute__((aligned(CACHE_LINE_SIZE))) *writer_time;
+static cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *reader_time;
+static cycles_t __attribute__((aligned(CAA_CACHE_LINE_SIZE))) *writer_time;
 
 void *thr_reader(void *arg)
 {
@@ -111,7 +112,7 @@ void *thr_reader(void *arg)
 
        rcu_register_thread();
 
-       time1 = get_cycles();
+       time1 = caa_get_cycles();
        for (i = 0; i < OUTER_READ_LOOP; i++) {
                for (j = 0; j < INNER_READ_LOOP; j++) {
                        rcu_read_lock();
@@ -122,7 +123,7 @@ void *thr_reader(void *arg)
                        rcu_read_unlock();
                }
        }
-       time2 = get_cycles();
+       time2 = caa_get_cycles();
 
        rcu_unregister_thread();
 
@@ -147,7 +148,7 @@ void *thr_writer(void *arg)
 
        for (i = 0; i < OUTER_WRITE_LOOP; i++) {
                for (j = 0; j < INNER_WRITE_LOOP; j++) {
-                       time1 = get_cycles();
+                       time1 = caa_get_cycles();
                        new = malloc(sizeof(struct test_array));
                        rcu_copy_mutex_lock();
                        old = test_rcu_pointer;
@@ -155,14 +156,15 @@ void *thr_writer(void *arg)
                                assert(old->a == 8);
                        }
                        new->a = 8;
-                       old = rcu_publish_content(&test_rcu_pointer, new);
+                       old = rcu_xchg_pointer(&test_rcu_pointer, new);
                        rcu_copy_mutex_unlock();
+                       synchronize_rcu();
                        /* can be done after unlock */
                        if (old) {
                                old->a = 0;
                        }
                        free(old);
-                       time2 = get_cycles();
+                       time2 = caa_get_cycles();
                        writer_time[(unsigned long)arg] += time2 - time1;
                        usleep(1);
                }
diff --git a/tests/test_urcu_wfq.c b/tests/test_urcu_wfq.c
new file mode 100644 (file)
index 0000000..e042f5e
--- /dev/null
@@ -0,0 +1,415 @@
+/*
+ * test_urcu_wfq.c
+ *
+ * Userspace RCU library - example RCU-based lock-free queue
+ *
+ * Copyright February 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright February 2010 - Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#define _GNU_SOURCE
+#include "../config.h"
+#include <stdio.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <assert.h>
+#include <sched.h>
+#include <errno.h>
+
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
+
+/* hardcoded number of CPUs */
+#define NR_CPUS 16384
+
+#if defined(_syscall0)
+_syscall0(pid_t, gettid)
+#elif defined(__NR_gettid)
+static inline pid_t gettid(void)
+{
+       return syscall(__NR_gettid);
+}
+#else
+#warning "use pid as tid"
+static inline pid_t gettid(void)
+{
+       return getpid();
+}
+#endif
+
+#ifndef DYNAMIC_LINK_TEST
+#define _LGPL_SOURCE
+#endif
+#include <urcu.h>
+#include <urcu/wfqueue.h>
+
+static volatile int test_go, test_stop;
+
+static unsigned long rduration;
+
+static unsigned long duration;
+
+/* read-side C.S. duration, in loops */
+static unsigned long wdelay;
+
+static inline void loop_sleep(unsigned long l)
+{
+       while(l-- != 0)
+               caa_cpu_relax();
+}
+
+static int verbose_mode;
+
+#define printf_verbose(fmt, args...)           \
+       do {                                    \
+               if (verbose_mode)               \
+                       printf(fmt, args);      \
+       } while (0)
+
+static unsigned int cpu_affinities[NR_CPUS];
+static unsigned int next_aff = 0;
+static int use_affinity = 0;
+
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
+static void set_affinity(void)
+{
+       cpu_set_t mask;
+       int cpu;
+       int ret;
+
+       if (!use_affinity)
+               return;
+
+#if HAVE_SCHED_SETAFFINITY
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+       cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+
+       CPU_ZERO(&mask);
+       CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
+       sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
+}
+
+/*
+ * returns 0 if test should end.
+ */
+static int test_duration_dequeue(void)
+{
+       return !test_stop;
+}
+
+static int test_duration_enqueue(void)
+{
+       return !test_stop;
+}
+
+static unsigned long long __thread nr_dequeues;
+static unsigned long long __thread nr_enqueues;
+
+static unsigned long long __thread nr_successful_dequeues;
+static unsigned long long __thread nr_successful_enqueues;
+
+static unsigned int nr_enqueuers;
+static unsigned int nr_dequeuers;
+
+static struct cds_wfq_queue q;
+
+void *thr_enqueuer(void *_count)
+{
+       unsigned long long *count = _count;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "enqueuer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               struct cds_wfq_node *node = malloc(sizeof(*node));
+               if (!node)
+                       goto fail;
+               cds_wfq_node_init(node);
+               cds_wfq_enqueue(&q, node);
+               nr_successful_enqueues++;
+
+               if (unlikely(wdelay))
+                       loop_sleep(wdelay);
+fail:
+               nr_enqueues++;
+               if (unlikely(!test_duration_enqueue()))
+                       break;
+       }
+
+       count[0] = nr_enqueues;
+       count[1] = nr_successful_enqueues;
+       printf_verbose("enqueuer thread_end, thread id : %lx, tid %lu, "
+                      "enqueues %llu successful_enqueues %llu\n",
+                      pthread_self(), (unsigned long)gettid(), nr_enqueues,
+                      nr_successful_enqueues);
+       return ((void*)1);
+
+}
+
+void *thr_dequeuer(void *_count)
+{
+       unsigned long long *count = _count;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "dequeuer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               struct cds_wfq_node *node = cds_wfq_dequeue_blocking(&q);
+
+               if (node) {
+                       free(node);
+                       nr_successful_dequeues++;
+               }
+
+               nr_dequeues++;
+               if (unlikely(!test_duration_dequeue()))
+                       break;
+               if (unlikely(rduration))
+                       loop_sleep(rduration);
+       }
+
+       printf_verbose("dequeuer thread_end, thread id : %lx, tid %lu, "
+                      "dequeues %llu, successful_dequeues %llu\n",
+                      pthread_self(), (unsigned long)gettid(), nr_dequeues,
+                      nr_successful_dequeues);
+       count[0] = nr_dequeues;
+       count[1] = nr_successful_dequeues;
+       return ((void*)2);
+}
+
+void test_end(struct cds_wfq_queue *q, unsigned long long *nr_dequeues)
+{
+       struct cds_wfq_node *node;
+
+       do {
+               node = cds_wfq_dequeue_blocking(q);
+               if (node) {
+                       free(node);
+                       (*nr_dequeues)++;
+               }
+       } while (node);
+}
+
+void show_usage(int argc, char **argv)
+{
+       printf("Usage : %s nr_dequeuers nr_enqueuers duration (s)", argv[0]);
+       printf(" [-d delay] (enqueuer period (in loops))");
+       printf(" [-c duration] (dequeuer period (in loops))");
+       printf(" [-v] (verbose output)");
+       printf(" [-a cpu#] [-a cpu#]... (affinity)");
+       printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+       int err;
+       pthread_t *tid_enqueuer, *tid_dequeuer;
+       void *tret;
+       unsigned long long *count_enqueuer, *count_dequeuer;
+       unsigned long long tot_enqueues = 0, tot_dequeues = 0;
+       unsigned long long tot_successful_enqueues = 0,
+                          tot_successful_dequeues = 0;
+       unsigned long long end_dequeues = 0;
+       int i, a;
+
+       if (argc < 4) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[1], "%u", &nr_dequeuers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[2], "%u", &nr_enqueuers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+       
+       err = sscanf(argv[3], "%lu", &duration);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       for (i = 4; i < argc; i++) {
+               if (argv[i][0] != '-')
+                       continue;
+               switch (argv[i][1]) {
+               case 'a':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       a = atoi(argv[++i]);
+                       cpu_affinities[next_aff++] = a;
+                       use_affinity = 1;
+                       printf_verbose("Adding CPU %d affinity\n", a);
+                       break;
+               case 'c':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       rduration = atol(argv[++i]);
+                       break;
+               case 'd':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wdelay = atol(argv[++i]);
+                       break;
+               case 'v':
+                       verbose_mode = 1;
+                       break;
+               }
+       }
+
+       printf_verbose("running test for %lu seconds, %u enqueuers, "
+                      "%u dequeuers.\n",
+                      duration, nr_enqueuers, nr_dequeuers);
+       printf_verbose("Writer delay : %lu loops.\n", rduration);
+       printf_verbose("Reader duration : %lu loops.\n", wdelay);
+       printf_verbose("thread %-6s, thread id : %lx, tid %lu\n",
+                       "main", pthread_self(), (unsigned long)gettid());
+
+       tid_enqueuer = malloc(sizeof(*tid_enqueuer) * nr_enqueuers);
+       tid_dequeuer = malloc(sizeof(*tid_dequeuer) * nr_dequeuers);
+       count_enqueuer = malloc(2 * sizeof(*count_enqueuer) * nr_enqueuers);
+       count_dequeuer = malloc(2 * sizeof(*count_dequeuer) * nr_dequeuers);
+       cds_wfq_init(&q);
+
+       next_aff = 0;
+
+       for (i = 0; i < nr_enqueuers; i++) {
+               err = pthread_create(&tid_enqueuer[i], NULL, thr_enqueuer,
+                                    &count_enqueuer[2 * i]);
+               if (err != 0)
+                       exit(1);
+       }
+       for (i = 0; i < nr_dequeuers; i++) {
+               err = pthread_create(&tid_dequeuer[i], NULL, thr_dequeuer,
+                                    &count_dequeuer[2 * i]);
+               if (err != 0)
+                       exit(1);
+       }
+
+       cmm_smp_mb();
+
+       test_go = 1;
+
+       for (i = 0; i < duration; i++) {
+               sleep(1);
+               if (verbose_mode)
+                       write (1, ".", 1);
+       }
+
+       test_stop = 1;
+
+       for (i = 0; i < nr_enqueuers; i++) {
+               err = pthread_join(tid_enqueuer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_enqueues += count_enqueuer[2 * i];
+               tot_successful_enqueues += count_enqueuer[2 * i + 1];
+       }
+       for (i = 0; i < nr_dequeuers; i++) {
+               err = pthread_join(tid_dequeuer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_dequeues += count_dequeuer[2 * i];
+               tot_successful_dequeues += count_dequeuer[2 * i + 1];
+       }
+       
+       test_end(&q, &end_dequeues);
+
+       printf_verbose("total number of enqueues : %llu, dequeues %llu\n",
+                      tot_enqueues, tot_dequeues);
+       printf_verbose("total number of successful enqueues : %llu, "
+                      "successful dequeues %llu\n",
+                      tot_successful_enqueues, tot_successful_dequeues);
+       printf("SUMMARY %-25s testdur %4lu nr_enqueuers %3u wdelay %6lu "
+               "nr_dequeuers %3u "
+               "rdur %6lu nr_enqueues %12llu nr_dequeues %12llu "
+               "successful enqueues %12llu successful dequeues %12llu "
+               "end_dequeues %llu nr_ops %12llu\n",
+               argv[0], duration, nr_enqueuers, wdelay,
+               nr_dequeuers, rduration, tot_enqueues, tot_dequeues,
+               tot_successful_enqueues,
+               tot_successful_dequeues, end_dequeues,
+               tot_enqueues + tot_dequeues);
+       if (tot_successful_enqueues != tot_successful_dequeues + end_dequeues)
+               printf("WARNING! Discrepancy between nr succ. enqueues %llu vs "
+                      "succ. dequeues + end dequeues %llu.\n",
+                      tot_successful_enqueues,
+                      tot_successful_dequeues + end_dequeues);
+
+       free(count_enqueuer);
+       free(count_dequeuer);
+       free(tid_enqueuer);
+       free(tid_dequeuer);
+       return 0;
+}
diff --git a/tests/test_urcu_wfs.c b/tests/test_urcu_wfs.c
new file mode 100644 (file)
index 0000000..6d419ca
--- /dev/null
@@ -0,0 +1,415 @@
+/*
+ * test_urcu_wfs.c
+ *
+ * Userspace RCU library - example RCU-based lock-free stack
+ *
+ * Copyright February 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright February 2010 - Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#define _GNU_SOURCE
+#include "../config.h"
+#include <stdio.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <assert.h>
+#include <sched.h>
+#include <errno.h>
+
+#include <urcu/arch.h>
+
+#ifdef __linux__
+#include <syscall.h>
+#endif
+
+/* hardcoded number of CPUs */
+#define NR_CPUS 16384
+
+#if defined(_syscall0)
+_syscall0(pid_t, gettid)
+#elif defined(__NR_gettid)
+static inline pid_t gettid(void)
+{
+       return syscall(__NR_gettid);
+}
+#else
+#warning "use pid as tid"
+static inline pid_t gettid(void)
+{
+       return getpid();
+}
+#endif
+
+#ifndef DYNAMIC_LINK_TEST
+#define _LGPL_SOURCE
+#endif
+#include <urcu.h>
+#include <urcu/wfstack.h>
+
+static volatile int test_go, test_stop;
+
+static unsigned long rduration;
+
+static unsigned long duration;
+
+/* read-side C.S. duration, in loops */
+static unsigned long wdelay;
+
+static inline void loop_sleep(unsigned long l)
+{
+       while(l-- != 0)
+               caa_cpu_relax();
+}
+
+static int verbose_mode;
+
+#define printf_verbose(fmt, args...)           \
+       do {                                    \
+               if (verbose_mode)               \
+                       printf(fmt, args);      \
+       } while (0)
+
+static unsigned int cpu_affinities[NR_CPUS];
+static unsigned int next_aff = 0;
+static int use_affinity = 0;
+
+pthread_mutex_t affinity_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#ifndef HAVE_CPU_SET_T
+typedef unsigned long cpu_set_t;
+# define CPU_ZERO(cpuset) do { *(cpuset) = 0; } while(0)
+# define CPU_SET(cpu, cpuset) do { *(cpuset) |= (1UL << (cpu)); } while(0)
+#endif
+
+static void set_affinity(void)
+{
+       cpu_set_t mask;
+       int cpu;
+       int ret;
+
+       if (!use_affinity)
+               return;
+
+#if HAVE_SCHED_SETAFFINITY
+       ret = pthread_mutex_lock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+       cpu = cpu_affinities[next_aff++];
+       ret = pthread_mutex_unlock(&affinity_mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+
+       CPU_ZERO(&mask);
+       CPU_SET(cpu, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       sched_setaffinity(0, &mask);
+#else
+       sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+#endif /* HAVE_SCHED_SETAFFINITY */
+}
+
+/*
+ * returns 0 if test should end.
+ */
+static int test_duration_dequeue(void)
+{
+       return !test_stop;
+}
+
+static int test_duration_enqueue(void)
+{
+       return !test_stop;
+}
+
+static unsigned long long __thread nr_dequeues;
+static unsigned long long __thread nr_enqueues;
+
+static unsigned long long __thread nr_successful_dequeues;
+static unsigned long long __thread nr_successful_enqueues;
+
+static unsigned int nr_enqueuers;
+static unsigned int nr_dequeuers;
+
+static struct cds_wfs_stack s;
+
+void *thr_enqueuer(void *_count)
+{
+       unsigned long long *count = _count;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "enqueuer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               struct cds_wfs_node *node = malloc(sizeof(*node));
+               if (!node)
+                       goto fail;
+               cds_wfs_node_init(node);
+               cds_wfs_push(&s, node);
+               nr_successful_enqueues++;
+
+               if (unlikely(wdelay))
+                       loop_sleep(wdelay);
+fail:
+               nr_enqueues++;
+               if (unlikely(!test_duration_enqueue()))
+                       break;
+       }
+
+       count[0] = nr_enqueues;
+       count[1] = nr_successful_enqueues;
+       printf_verbose("enqueuer thread_end, thread id : %lx, tid %lu, "
+                      "enqueues %llu successful_enqueues %llu\n",
+                      pthread_self(), (unsigned long)gettid(), nr_enqueues,
+                      nr_successful_enqueues);
+       return ((void*)1);
+
+}
+
+void *thr_dequeuer(void *_count)
+{
+       unsigned long long *count = _count;
+
+       printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
+                       "dequeuer", pthread_self(), (unsigned long)gettid());
+
+       set_affinity();
+
+       while (!test_go)
+       {
+       }
+       cmm_smp_mb();
+
+       for (;;) {
+               struct cds_wfs_node *node = cds_wfs_pop_blocking(&s);
+
+               if (node) {
+                       free(node);
+                       nr_successful_dequeues++;
+               }
+
+               nr_dequeues++;
+               if (unlikely(!test_duration_dequeue()))
+                       break;
+               if (unlikely(rduration))
+                       loop_sleep(rduration);
+       }
+
+       printf_verbose("dequeuer thread_end, thread id : %lx, tid %lu, "
+                      "dequeues %llu, successful_dequeues %llu\n",
+                      pthread_self(), (unsigned long)gettid(), nr_dequeues,
+                      nr_successful_dequeues);
+       count[0] = nr_dequeues;
+       count[1] = nr_successful_dequeues;
+       return ((void*)2);
+}
+
+void test_end(struct cds_wfs_stack *s, unsigned long long *nr_dequeues)
+{
+       struct cds_wfs_node *node;
+
+       do {
+               node = cds_wfs_pop_blocking(s);
+               if (node) {
+                       free(node);
+                       (*nr_dequeues)++;
+               }
+       } while (node);
+}
+
+void show_usage(int argc, char **argv)
+{
+       printf("Usage : %s nr_dequeuers nr_enqueuers duration (s)", argv[0]);
+       printf(" [-d delay] (enqueuer period (in loops))");
+       printf(" [-c duration] (dequeuer period (in loops))");
+       printf(" [-v] (verbose output)");
+       printf(" [-a cpu#] [-a cpu#]... (affinity)");
+       printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+       int err;
+       pthread_t *tid_enqueuer, *tid_dequeuer;
+       void *tret;
+       unsigned long long *count_enqueuer, *count_dequeuer;
+       unsigned long long tot_enqueues = 0, tot_dequeues = 0;
+       unsigned long long tot_successful_enqueues = 0,
+                          tot_successful_dequeues = 0;
+       unsigned long long end_dequeues = 0;
+       int i, a;
+
+       if (argc < 4) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[1], "%u", &nr_dequeuers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       err = sscanf(argv[2], "%u", &nr_enqueuers);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+       
+       err = sscanf(argv[3], "%lu", &duration);
+       if (err != 1) {
+               show_usage(argc, argv);
+               return -1;
+       }
+
+       for (i = 4; i < argc; i++) {
+               if (argv[i][0] != '-')
+                       continue;
+               switch (argv[i][1]) {
+               case 'a':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       a = atoi(argv[++i]);
+                       cpu_affinities[next_aff++] = a;
+                       use_affinity = 1;
+                       printf_verbose("Adding CPU %d affinity\n", a);
+                       break;
+               case 'c':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       rduration = atol(argv[++i]);
+                       break;
+               case 'd':
+                       if (argc < i + 2) {
+                               show_usage(argc, argv);
+                               return -1;
+                       }
+                       wdelay = atol(argv[++i]);
+                       break;
+               case 'v':
+                       verbose_mode = 1;
+                       break;
+               }
+       }
+
+       printf_verbose("running test for %lu seconds, %u enqueuers, "
+                      "%u dequeuers.\n",
+                      duration, nr_enqueuers, nr_dequeuers);
+       printf_verbose("Writer delay : %lu loops.\n", rduration);
+       printf_verbose("Reader duration : %lu loops.\n", wdelay);
+       printf_verbose("thread %-6s, thread id : %lx, tid %lu\n",
+                       "main", pthread_self(), (unsigned long)gettid());
+
+       tid_enqueuer = malloc(sizeof(*tid_enqueuer) * nr_enqueuers);
+       tid_dequeuer = malloc(sizeof(*tid_dequeuer) * nr_dequeuers);
+       count_enqueuer = malloc(2 * sizeof(*count_enqueuer) * nr_enqueuers);
+       count_dequeuer = malloc(2 * sizeof(*count_dequeuer) * nr_dequeuers);
+       cds_wfs_init(&s);
+
+       next_aff = 0;
+
+       for (i = 0; i < nr_enqueuers; i++) {
+               err = pthread_create(&tid_enqueuer[i], NULL, thr_enqueuer,
+                                    &count_enqueuer[2 * i]);
+               if (err != 0)
+                       exit(1);
+       }
+       for (i = 0; i < nr_dequeuers; i++) {
+               err = pthread_create(&tid_dequeuer[i], NULL, thr_dequeuer,
+                                    &count_dequeuer[2 * i]);
+               if (err != 0)
+                       exit(1);
+       }
+
+       cmm_smp_mb();
+
+       test_go = 1;
+
+       for (i = 0; i < duration; i++) {
+               sleep(1);
+               if (verbose_mode)
+                       write (1, ".", 1);
+       }
+
+       test_stop = 1;
+
+       for (i = 0; i < nr_enqueuers; i++) {
+               err = pthread_join(tid_enqueuer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_enqueues += count_enqueuer[2 * i];
+               tot_successful_enqueues += count_enqueuer[2 * i + 1];
+       }
+       for (i = 0; i < nr_dequeuers; i++) {
+               err = pthread_join(tid_dequeuer[i], &tret);
+               if (err != 0)
+                       exit(1);
+               tot_dequeues += count_dequeuer[2 * i];
+               tot_successful_dequeues += count_dequeuer[2 * i + 1];
+       }
+       
+       test_end(&s, &end_dequeues);
+
+       printf_verbose("total number of enqueues : %llu, dequeues %llu\n",
+                      tot_enqueues, tot_dequeues);
+       printf_verbose("total number of successful enqueues : %llu, "
+                      "successful dequeues %llu\n",
+                      tot_successful_enqueues, tot_successful_dequeues);
+       printf("SUMMARY %-25s testdur %4lu nr_enqueuers %3u wdelay %6lu "
+               "nr_dequeuers %3u "
+               "rdur %6lu nr_enqueues %12llu nr_dequeues %12llu "
+               "successful enqueues %12llu successful dequeues %12llu "
+               "end_dequeues %llu nr_ops %12llu\n",
+               argv[0], duration, nr_enqueuers, wdelay,
+               nr_dequeuers, rduration, tot_enqueues, tot_dequeues,
+               tot_successful_enqueues,
+               tot_successful_dequeues, end_dequeues,
+               tot_enqueues + tot_dequeues);
+       if (tot_successful_enqueues != tot_successful_dequeues + end_dequeues)
+               printf("WARNING! Discrepancy between nr succ. enqueues %llu vs "
+                      "succ. dequeues + end dequeues %llu.\n",
+                      tot_successful_enqueues,
+                      tot_successful_dequeues + end_dequeues);
+
+       free(count_enqueuer);
+       free(count_dequeuer);
+       free(tid_enqueuer);
+       free(tid_dequeuer);
+       return 0;
+}
index 66be7097b9beedb4ca39c46dab9c78797bbe59f5..b616d3486c90a8d1ad7888e50186e5045f64e460 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library - assembly dump of primitives
  *
- * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright February 2009 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#include "../urcu.h"
+#include <urcu.h>
 
 void show_read_lock(void)
 {
index a0aa5dd82830c2ee14de450b6461c49eeb1cdb73..5e9b0596fc1570a1b909d78687cb8c36c10419ce 100644 (file)
@@ -3,8 +3,27 @@
 #include <poll.h>
 #include <unistd.h>
 #include <stdlib.h>
-#include "../arch_atomic.h"
+#include <errno.h>
+#include <urcu/arch.h>
 #include "api.h"
 #define _LGPL_SOURCE
-#include "../urcu.h"
+
+#ifdef RCU_MEMBARRIER
+#include <urcu.h>
+#endif
+#ifdef RCU_SIGNAL
+#include <urcu.h>
+#endif
+#ifdef RCU_MB
+#include <urcu.h>
+#endif
+#ifdef RCU_QSBR
+#include <urcu-qsbr.h>
+#endif
+#ifdef RCU_BP
+#include <urcu-bp.h>
+#endif
+
+#include <urcu/uatomic.h>
+#include <urcu/rculist.h>
 #include "rcutorture.h"
diff --git a/urcu-bp.c b/urcu-bp.c
new file mode 100644 (file)
index 0000000..39a6cd0
--- /dev/null
+++ b/urcu-bp.c
@@ -0,0 +1,414 @@
+/*
+ * urcu-bp.c
+ *
+ * Userspace RCU library, "bulletproof" version.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <pthread.h>
+#include <signal.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <poll.h>
+#include <unistd.h>
+#include <sys/mman.h>
+
+#include "urcu/map/urcu-bp.h"
+
+#include "urcu/static/urcu-bp.h"
+/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#include "urcu-bp.h"
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+#ifndef __linux__
+
+#define MREMAP_MAYMOVE 1
+#define MREMAP_FIXED   2
+
+/*
+ * mremap wrapper for non-Linux systems. Maps a RW, anonymous private mapping.
+ * This is not generic.
+*/
+void *mremap(void *old_address, size_t old_size, size_t new_size, int flags)
+{
+       void *new_address;
+
+       assert(flags & MREMAP_MAYMOVE);
+       assert(!(flags & MREMAP_FIXED));
+       new_address = mmap(old_address, new_size,
+                          PROT_READ | PROT_WRITE,
+                          MAP_ANONYMOUS | MAP_PRIVATE,
+                          -1, 0);
+       if (new_address == MAP_FAILED)
+               return MAP_FAILED;
+       if (old_address) {
+               memcpy(new_address, old_address, old_size);
+               munmap(old_address, old_size);
+       }
+       return new_address;
+}
+#endif
+
+/* Sleep delay in us */
+#define RCU_SLEEP_DELAY                1000
+#define ARENA_INIT_ALLOC       16
+
+void __attribute__((destructor)) rcu_bp_exit(void);
+
+static pthread_mutex_t rcu_gp_lock = PTHREAD_MUTEX_INITIALIZER;
+
+#ifdef DEBUG_YIELD
+unsigned int yield_active;
+unsigned int __thread rand_yield;
+#endif
+
+/*
+ * Global grace period counter.
+ * Contains the current RCU_GP_CTR_PHASE.
+ * Also has a RCU_GP_COUNT of 1, to accelerate the reader fast path.
+ * Written to only by writer with mutex taken. Read by both writer and readers.
+ */
+long rcu_gp_ctr = RCU_GP_COUNT;
+
+/*
+ * Pointer to registry elements. Written to only by each individual reader. Read
+ * by both the reader and the writers.
+ */
+struct rcu_reader __thread *rcu_reader;
+
+static CDS_LIST_HEAD(registry);
+
+struct registry_arena {
+       void *p;
+       size_t len;
+       size_t used;
+};
+
+static struct registry_arena registry_arena;
+
+/* Saved fork signal mask, protected by rcu_gp_lock */
+static sigset_t saved_fork_signal_mask;
+
+static void rcu_gc_registry(void);
+
+static void mutex_lock(pthread_mutex_t *mutex)
+{
+       int ret;
+
+#ifndef DISTRUST_SIGNALS_EXTREME
+       ret = pthread_mutex_lock(mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+#else /* #ifndef DISTRUST_SIGNALS_EXTREME */
+       while ((ret = pthread_mutex_trylock(mutex)) != 0) {
+               if (ret != EBUSY && ret != EINTR) {
+                       printf("ret = %d, errno = %d\n", ret, errno);
+                       perror("Error in pthread mutex lock");
+                       exit(-1);
+               }
+               poll(NULL,0,10);
+       }
+#endif /* #else #ifndef DISTRUST_SIGNALS_EXTREME */
+}
+
+static void mutex_unlock(pthread_mutex_t *mutex)
+{
+       int ret;
+
+       ret = pthread_mutex_unlock(mutex);
+       if (ret) {
+               perror("Error in pthread mutex unlock");
+               exit(-1);
+       }
+}
+
+void update_counter_and_wait(void)
+{
+       CDS_LIST_HEAD(qsreaders);
+       int wait_loops = 0;
+       struct rcu_reader *index, *tmp;
+
+       /* Switch parity: 0 -> 1, 1 -> 0 */
+       CMM_STORE_SHARED(rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR_PHASE);
+
+       /*
+        * Must commit qparity update to memory before waiting for other parity
+        * quiescent state. Failure to do so could result in the writer waiting
+        * forever while new readers are always accessing data (no progress).
+        * Ensured by CMM_STORE_SHARED and CMM_LOAD_SHARED.
+        */
+
+       /*
+        * Adding a cmm_smp_mb() which is _not_ formally required, but makes the
+        * model easier to understand. It does not have a big performance impact
+        * anyway, given this is the write-side.
+        */
+       cmm_smp_mb();
+
+       /*
+        * Wait for each thread rcu_reader.ctr count to become 0.
+        */
+       for (;;) {
+               wait_loops++;
+               cds_list_for_each_entry_safe(index, tmp, &registry, node) {
+                       if (!rcu_old_gp_ongoing(&index->ctr))
+                               cds_list_move(&index->node, &qsreaders);
+               }
+
+               if (cds_list_empty(&registry)) {
+                       break;
+               } else {
+                       if (wait_loops == RCU_QS_ACTIVE_ATTEMPTS)
+                               usleep(RCU_SLEEP_DELAY);
+                       else
+                               caa_cpu_relax();
+               }
+       }
+       /* put back the reader list in the registry */
+       cds_list_splice(&qsreaders, &registry);
+}
+
+void synchronize_rcu(void)
+{
+       sigset_t newmask, oldmask;
+       int ret;
+
+       ret = sigemptyset(&newmask);
+       assert(!ret);
+       ret = pthread_sigmask(SIG_SETMASK, &newmask, &oldmask);
+       assert(!ret);
+
+       mutex_lock(&rcu_gp_lock);
+
+       if (cds_list_empty(&registry))
+               goto out;
+
+       /* All threads should read qparity before accessing data structure
+        * where new ptr points to. */
+       /* Write new ptr before changing the qparity */
+       cmm_smp_mb();
+
+       /* Remove old registry elements */
+       rcu_gc_registry();
+
+       /*
+        * Wait for previous parity to be empty of readers.
+        */
+       update_counter_and_wait();      /* 0 -> 1, wait readers in parity 0 */
+
+       /*
+        * Adding a cmm_smp_mb() which is _not_ formally required, but makes the
+        * model easier to understand. It does not have a big performance impact
+        * anyway, given this is the write-side.
+        */
+       cmm_smp_mb();
+
+       /*
+        * Wait for previous parity to be empty of readers.
+        */
+       update_counter_and_wait();      /* 1 -> 0, wait readers in parity 1 */
+
+       /*
+        * Finish waiting for reader threads before letting the old ptr being
+        * freed.
+        */
+       cmm_smp_mb();
+out:
+       mutex_unlock(&rcu_gp_lock);
+       ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
+       assert(!ret);
+}
+
+/*
+ * library wrappers to be used by non-LGPL compatible source code.
+ */
+
+void rcu_read_lock(void)
+{
+       _rcu_read_lock();
+}
+
+void rcu_read_unlock(void)
+{
+       _rcu_read_unlock();
+}
+
+/*
+ * only grow for now.
+ */
+static void resize_arena(struct registry_arena *arena, size_t len)
+{
+       void *new_arena;
+
+       if (!arena->p)
+               new_arena = mmap(arena->p, len,
+                                PROT_READ | PROT_WRITE,
+                                MAP_ANONYMOUS | MAP_PRIVATE,
+                                -1, 0);
+       else
+               new_arena = mremap(arena->p, arena->len,
+                                  len, MREMAP_MAYMOVE);
+       assert(new_arena != MAP_FAILED);
+
+       /*
+        * re-used the same region ?
+        */
+       if (new_arena == arena->p)
+               return;
+
+       bzero(new_arena + arena->len, len - arena->len);
+       arena->p = new_arena;
+}
+
+/* Called with signals off and mutex locked */
+static void add_thread(void)
+{
+       struct rcu_reader *rcu_reader_reg;
+
+       if (registry_arena.len
+           < registry_arena.used + sizeof(struct rcu_reader))
+               resize_arena(&registry_arena,
+               max(registry_arena.len << 1, ARENA_INIT_ALLOC));
+       /*
+        * Find a free spot.
+        */
+       for (rcu_reader_reg = registry_arena.p;
+            (void *)rcu_reader_reg < registry_arena.p + registry_arena.len;
+            rcu_reader_reg++) {
+               if (!rcu_reader_reg->alloc)
+                       break;
+       }
+       rcu_reader_reg->alloc = 1;
+       registry_arena.used += sizeof(struct rcu_reader);
+
+       /* Add to registry */
+       rcu_reader_reg->tid = pthread_self();
+       assert(rcu_reader_reg->ctr == 0);
+       cds_list_add(&rcu_reader_reg->node, &registry);
+       rcu_reader = rcu_reader_reg;
+}
+
+/* Called with signals off and mutex locked */
+static void rcu_gc_registry(void)
+{
+       struct rcu_reader *rcu_reader_reg;
+       pthread_t tid;
+       int ret;
+
+       for (rcu_reader_reg = registry_arena.p;
+            (void *)rcu_reader_reg < registry_arena.p + registry_arena.len;
+            rcu_reader_reg++) {
+               if (!rcu_reader_reg->alloc)
+                       continue;
+               tid = rcu_reader_reg->tid;
+               ret = pthread_kill(tid, 0);
+               assert(ret != EINVAL);
+               if (ret == ESRCH) {
+                       cds_list_del(&rcu_reader_reg->node);
+                       rcu_reader_reg->ctr = 0;
+                       rcu_reader_reg->alloc = 0;
+                       registry_arena.used -= sizeof(struct rcu_reader);
+               }
+       }
+}
+
+/* Disable signals, take mutex, add to registry */
+void rcu_bp_register(void)
+{
+       sigset_t newmask, oldmask;
+       int ret;
+
+       ret = sigemptyset(&newmask);
+       assert(!ret);
+       ret = pthread_sigmask(SIG_SETMASK, &newmask, &oldmask);
+       assert(!ret);
+
+       /*
+        * Check if a signal concurrently registered our thread since
+        * the check in rcu_read_lock(). */
+       if (rcu_reader)
+               goto end;
+
+       mutex_lock(&rcu_gp_lock);
+       add_thread();
+       mutex_unlock(&rcu_gp_lock);
+end:
+       ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
+       assert(!ret);
+}
+
+void rcu_bp_exit()
+{
+       munmap(registry_arena.p, registry_arena.len);
+}
+
+/*
+ * Holding the rcu_gp_lock across fork will make sure we fork() don't race with
+ * a concurrent thread executing with this same lock held. This ensures that the
+ * registry is in a coherent state in the child.
+ */
+void rcu_bp_before_fork(void)
+{
+       sigset_t newmask, oldmask;
+       int ret;
+
+       ret = sigemptyset(&newmask);
+       assert(!ret);
+       ret = pthread_sigmask(SIG_SETMASK, &newmask, &oldmask);
+       assert(!ret);
+       mutex_lock(&rcu_gp_lock);
+       saved_fork_signal_mask = oldmask;
+}
+
+void rcu_bp_after_fork_parent(void)
+{
+       sigset_t oldmask;
+       int ret;
+
+       oldmask = saved_fork_signal_mask;
+       mutex_unlock(&rcu_gp_lock);
+       ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
+       assert(!ret);
+}
+
+void rcu_bp_after_fork_child(void)
+{
+       sigset_t oldmask;
+       int ret;
+
+       rcu_gc_registry();
+       oldmask = saved_fork_signal_mask;
+       mutex_unlock(&rcu_gp_lock);
+       ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
+       assert(!ret);
+}
+
+#include "urcu-call-rcu-impl.h"
+#include "urcu-defer-impl.h"
diff --git a/urcu-bp.h b/urcu-bp.h
new file mode 100644 (file)
index 0000000..09ee9c9
--- /dev/null
+++ b/urcu-bp.h
@@ -0,0 +1,124 @@
+#ifndef _URCU_BP_H
+#define _URCU_BP_H
+
+/*
+ * urcu-bp.h
+ *
+ * Userspace RCU header, "bulletproof" version.
+ *
+ * Slower RCU read-side adapted for tracing library. Does not require thread
+ * registration nor unregistration. Also signal-safe.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * LGPL-compatible code should include this header with :
+ *
+ * #define _LGPL_SOURCE
+ * #include <urcu.h>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#include <stdlib.h>
+#include <pthread.h>
+
+/*
+ * See urcu-pointer.h and urcu/static/urcu-pointer.h for pointer
+ * publication headers.
+ */
+#include <urcu-pointer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <urcu/map/urcu-bp.h>
+
+/*
+ * Important !
+ *
+ * Each thread containing read-side critical sections must be registered
+ * with rcu_register_thread() before calling rcu_read_lock().
+ * rcu_unregister_thread() should be called before the thread exits.
+ */
+
+#ifdef _LGPL_SOURCE
+
+#include <urcu/static/urcu-bp.h>
+
+/*
+ * Mappings for static use of the userspace RCU library.
+ * Should only be used in LGPL-compatible code.
+ */
+
+/*
+ * rcu_read_lock()
+ * rcu_read_unlock()
+ *
+ * Mark the beginning and end of a read-side critical section.
+ */
+#define rcu_read_lock_bp               _rcu_read_lock
+#define rcu_read_unlock_bp             _rcu_read_unlock
+
+#else /* !_LGPL_SOURCE */
+
+/*
+ * library wrappers to be used by non-LGPL compatible source code.
+ * See LGPL-only urcu/static/urcu-pointer.h for documentation.
+ */
+
+extern void rcu_read_lock(void);
+extern void rcu_read_unlock(void);
+
+#endif /* !_LGPL_SOURCE */
+
+extern void synchronize_rcu(void);
+
+/*
+ * rcu_bp_before_fork, rcu_bp_after_fork_parent and rcu_bp_after_fork_child
+ * should be called around fork() system calls when the child process is not
+ * expected to immediately perform an exec(). For pthread users, see
+ * pthread_atfork(3).
+ */
+extern void rcu_bp_before_fork(void);
+extern void rcu_bp_after_fork_parent(void);
+extern void rcu_bp_after_fork_child(void);
+
+/*
+ * In the bulletproof version, the following functions are no-ops.
+ */
+static inline void rcu_register_thread(void)
+{
+}
+
+static inline void rcu_unregister_thread(void)
+{
+}
+
+static inline void rcu_init(void)
+{
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu-call-rcu.h>
+#include <urcu-defer.h>
+
+#endif /* _URCU_BP_H */
diff --git a/urcu-call-rcu-impl.h b/urcu-call-rcu-impl.h
new file mode 100644 (file)
index 0000000..b9e57cd
--- /dev/null
@@ -0,0 +1,671 @@
+/*
+ * urcu-call-rcu.c
+ *
+ * Userspace RCU library - batch memory reclamation with kernel API
+ *
+ * Copyright (c) 2010 Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <pthread.h>
+#include <signal.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+#include <poll.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <sched.h>
+
+#include "config.h"
+#include "urcu/wfqueue.h"
+#include "urcu-call-rcu.h"
+#include "urcu-pointer.h"
+#include "urcu/list.h"
+#include "urcu/futex.h"
+
+/* Data structure that identifies a call_rcu thread. */
+
+struct call_rcu_data {
+       struct cds_wfq_queue cbs;
+       unsigned long flags;
+       int32_t futex;
+       unsigned long qlen; /* maintained for debugging. */
+       pthread_t tid;
+       int cpu_affinity;
+       struct cds_list_head list;
+} __attribute__((aligned(CAA_CACHE_LINE_SIZE)));
+
+/*
+ * List of all call_rcu_data structures to keep valgrind happy.
+ * Protected by call_rcu_mutex.
+ */
+
+CDS_LIST_HEAD(call_rcu_data_list);
+
+/* Link a thread using call_rcu() to its call_rcu thread. */
+
+static __thread struct call_rcu_data *thread_call_rcu_data;
+
+/* Guard call_rcu thread creation. */
+
+static pthread_mutex_t call_rcu_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* If a given thread does not have its own call_rcu thread, this is default. */
+
+static struct call_rcu_data *default_call_rcu_data;
+
+/*
+ * If the sched_getcpu() and sysconf(_SC_NPROCESSORS_CONF) calls are
+ * available, then we can have call_rcu threads assigned to individual
+ * CPUs rather than only to specific threads.
+ */
+
+#if defined(HAVE_SCHED_GETCPU) && defined(HAVE_SYSCONF)
+
+/*
+ * Pointer to array of pointers to per-CPU call_rcu_data structures
+ * and # CPUs.
+ */
+
+static struct call_rcu_data **per_cpu_call_rcu_data;
+static long maxcpus;
+
+/* Allocate the array if it has not already been allocated. */
+
+static void alloc_cpu_call_rcu_data(void)
+{
+       struct call_rcu_data **p;
+       static int warned = 0;
+
+       if (maxcpus != 0)
+               return;
+       maxcpus = sysconf(_SC_NPROCESSORS_CONF);
+       if (maxcpus <= 0) {
+               return;
+       }
+       p = malloc(maxcpus * sizeof(*per_cpu_call_rcu_data));
+       if (p != NULL) {
+               memset(p, '\0', maxcpus * sizeof(*per_cpu_call_rcu_data));
+               per_cpu_call_rcu_data = p;
+       } else {
+               if (!warned) {
+                       fprintf(stderr, "[error] liburcu: unable to allocate per-CPU pointer array\n");
+               }
+               warned = 1;
+       }
+}
+
+#else /* #if defined(HAVE_SCHED_GETCPU) && defined(HAVE_SYSCONF) */
+
+/*
+ * per_cpu_call_rcu_data should be constant, but some functions below, used both
+ * for cases where cpu number is available and not available, assume it it not
+ * constant.
+ */
+static struct call_rcu_data **per_cpu_call_rcu_data = NULL;
+static const long maxcpus = -1;
+
+static void alloc_cpu_call_rcu_data(void)
+{
+}
+
+static int sched_getcpu(void)
+{
+       return -1;
+}
+
+#endif /* #else #if defined(HAVE_SCHED_GETCPU) && defined(HAVE_SYSCONF) */
+
+/* Acquire the specified pthread mutex. */
+
+static void call_rcu_lock(pthread_mutex_t *pmp)
+{
+       if (pthread_mutex_lock(pmp) != 0) {
+               perror("pthread_mutex_lock");
+               exit(-1);
+       }
+}
+
+/* Release the specified pthread mutex. */
+
+static void call_rcu_unlock(pthread_mutex_t *pmp)
+{
+       if (pthread_mutex_unlock(pmp) != 0) {
+               perror("pthread_mutex_unlock");
+               exit(-1);
+       }
+}
+
+#if HAVE_SCHED_SETAFFINITY
+static
+int set_thread_cpu_affinity(struct call_rcu_data *crdp)
+{
+       cpu_set_t mask;
+
+       if (crdp->cpu_affinity < 0)
+               return 0;
+
+       CPU_ZERO(&mask);
+       CPU_SET(crdp->cpu_affinity, &mask);
+#if SCHED_SETAFFINITY_ARGS == 2
+       return sched_setaffinity(0, &mask);
+#else
+       return sched_setaffinity(0, sizeof(mask), &mask);
+#endif
+}
+#else
+static
+int set_thread_cpu_affinity(struct call_rcu_data *crdp)
+{
+       return 0;
+}
+#endif
+
+static void call_rcu_wait(struct call_rcu_data *crdp)
+{
+       /* Read call_rcu list before read futex */
+       cmm_smp_mb();
+       if (uatomic_read(&crdp->futex) == -1)
+               futex_async(&crdp->futex, FUTEX_WAIT, -1,
+                     NULL, NULL, 0);
+}
+
+static void call_rcu_wake_up(struct call_rcu_data *crdp)
+{
+       /* Write to call_rcu list before reading/writing futex */
+       cmm_smp_mb();
+       if (unlikely(uatomic_read(&crdp->futex) == -1)) {
+               uatomic_set(&crdp->futex, 0);
+               futex_async(&crdp->futex, FUTEX_WAKE, 1,
+                     NULL, NULL, 0);
+       }
+}
+
+/* This is the code run by each call_rcu thread. */
+
+static void *call_rcu_thread(void *arg)
+{
+       unsigned long cbcount;
+       struct cds_wfq_node *cbs;
+       struct cds_wfq_node **cbs_tail;
+       struct call_rcu_data *crdp = (struct call_rcu_data *)arg;
+       struct rcu_head *rhp;
+       int rt = !!(uatomic_read(&crdp->flags) & URCU_CALL_RCU_RT);
+
+       if (set_thread_cpu_affinity(crdp) != 0) {
+               perror("pthread_setaffinity_np");
+               exit(-1);
+       }
+
+       thread_call_rcu_data = crdp;
+       if (!rt) {
+               uatomic_dec(&crdp->futex);
+               /* Decrement futex before reading call_rcu list */
+               cmm_smp_mb();
+       }
+       for (;;) {
+               if (&crdp->cbs.head != _CMM_LOAD_SHARED(crdp->cbs.tail)) {
+                       while ((cbs = _CMM_LOAD_SHARED(crdp->cbs.head)) == NULL)
+                               poll(NULL, 0, 1);
+                       _CMM_STORE_SHARED(crdp->cbs.head, NULL);
+                       cbs_tail = (struct cds_wfq_node **)
+                               uatomic_xchg(&crdp->cbs.tail, &crdp->cbs.head);
+                       synchronize_rcu();
+                       cbcount = 0;
+                       do {
+                               while (cbs->next == NULL &&
+                                      &cbs->next != cbs_tail)
+                                       poll(NULL, 0, 1);
+                               if (cbs == &crdp->cbs.dummy) {
+                                       cbs = cbs->next;
+                                       continue;
+                               }
+                               rhp = (struct rcu_head *)cbs;
+                               cbs = cbs->next;
+                               rhp->func(rhp);
+                               cbcount++;
+                       } while (cbs != NULL);
+                       uatomic_sub(&crdp->qlen, cbcount);
+               }
+               if (uatomic_read(&crdp->flags) & URCU_CALL_RCU_STOP)
+                       break;
+               if (!rt) {
+                       if (&crdp->cbs.head
+                           == _CMM_LOAD_SHARED(crdp->cbs.tail)) {
+                               call_rcu_wait(crdp);
+                               poll(NULL, 0, 10);
+                               uatomic_dec(&crdp->futex);
+                               /*
+                                * Decrement futex before reading
+                                * call_rcu list.
+                                */
+                               cmm_smp_mb();
+                       } else {
+                               poll(NULL, 0, 10);
+                       }
+               } else {
+                       poll(NULL, 0, 10);
+               }
+       }
+       if (!rt) {
+               /*
+                * Read call_rcu list before write futex.
+                */
+               cmm_smp_mb();
+               uatomic_set(&crdp->futex, 0);
+       }
+       uatomic_or(&crdp->flags, URCU_CALL_RCU_STOPPED);
+       return NULL;
+}
+
+/*
+ * Create both a call_rcu thread and the corresponding call_rcu_data
+ * structure, linking the structure in as specified.  Caller must hold
+ * call_rcu_mutex.
+ */
+
+static void call_rcu_data_init(struct call_rcu_data **crdpp,
+                              unsigned long flags,
+                              int cpu_affinity)
+{
+       struct call_rcu_data *crdp;
+
+       crdp = malloc(sizeof(*crdp));
+       if (crdp == NULL) {
+               fprintf(stderr, "Out of memory.\n");
+               exit(-1);
+       }
+       memset(crdp, '\0', sizeof(*crdp));
+       cds_wfq_init(&crdp->cbs);
+       crdp->qlen = 0;
+       crdp->futex = 0;
+       crdp->flags = flags;
+       cds_list_add(&crdp->list, &call_rcu_data_list);
+       crdp->cpu_affinity = cpu_affinity;
+       cmm_smp_mb();  /* Structure initialized before pointer is planted. */
+       *crdpp = crdp;
+       if (pthread_create(&crdp->tid, NULL, call_rcu_thread, crdp) != 0) {
+               perror("pthread_create");
+               exit(-1);
+       }
+}
+
+/*
+ * Return a pointer to the call_rcu_data structure for the specified
+ * CPU, returning NULL if there is none.  We cannot automatically
+ * created it because the platform we are running on might not define
+ * sched_getcpu().
+ */
+
+struct call_rcu_data *get_cpu_call_rcu_data(int cpu)
+{
+       static int warned = 0;
+
+       if (per_cpu_call_rcu_data == NULL)
+               return NULL;
+       if (!warned && maxcpus > 0 && (cpu < 0 || maxcpus <= cpu)) {
+               fprintf(stderr, "[error] liburcu: get CPU # out of range\n");
+               warned = 1;
+       }
+       if (cpu < 0 || maxcpus <= cpu)
+               return NULL;
+       return per_cpu_call_rcu_data[cpu];
+}
+
+/*
+ * Return the tid corresponding to the call_rcu thread whose
+ * call_rcu_data structure is specified.
+ */
+
+pthread_t get_call_rcu_thread(struct call_rcu_data *crdp)
+{
+       return crdp->tid;
+}
+
+/*
+ * Create a call_rcu_data structure (with thread) and return a pointer.
+ */
+
+static struct call_rcu_data *__create_call_rcu_data(unsigned long flags,
+                                                   int cpu_affinity)
+{
+       struct call_rcu_data *crdp;
+
+       call_rcu_data_init(&crdp, flags, cpu_affinity);
+       return crdp;
+}
+
+struct call_rcu_data *create_call_rcu_data(unsigned long flags,
+                                          int cpu_affinity)
+{
+       struct call_rcu_data *crdp;
+
+       call_rcu_lock(&call_rcu_mutex);
+       crdp = __create_call_rcu_data(flags, cpu_affinity);
+       call_rcu_unlock(&call_rcu_mutex);
+       return crdp;
+}
+
+/*
+ * Set the specified CPU to use the specified call_rcu_data structure.
+ *
+ * Use NULL to remove a CPU's call_rcu_data structure, but it is
+ * the caller's responsibility to dispose of the removed structure.
+ * Use get_cpu_call_rcu_data() to obtain a pointer to the old structure
+ * (prior to NULLing it out, of course).
+ */
+
+int set_cpu_call_rcu_data(int cpu, struct call_rcu_data *crdp)
+{
+       int warned = 0;
+
+       call_rcu_lock(&call_rcu_mutex);
+       if (cpu < 0 || maxcpus <= cpu) {
+               if (!warned) {
+                       fprintf(stderr, "[error] liburcu: set CPU # out of range\n");
+                       warned = 1;
+               }
+               call_rcu_unlock(&call_rcu_mutex);
+               errno = EINVAL;
+               return -EINVAL;
+       }
+       alloc_cpu_call_rcu_data();
+       call_rcu_unlock(&call_rcu_mutex);
+       if (per_cpu_call_rcu_data == NULL) {
+               errno = ENOMEM;
+               return -ENOMEM;
+       }
+       per_cpu_call_rcu_data[cpu] = crdp;
+       return 0;
+}
+
+/*
+ * Return a pointer to the default call_rcu_data structure, creating
+ * one if need be.  Because we never free call_rcu_data structures,
+ * we don't need to be in an RCU read-side critical section.
+ */
+
+struct call_rcu_data *get_default_call_rcu_data(void)
+{
+       if (default_call_rcu_data != NULL)
+               return rcu_dereference(default_call_rcu_data);
+       call_rcu_lock(&call_rcu_mutex);
+       if (default_call_rcu_data != NULL) {
+               call_rcu_unlock(&call_rcu_mutex);
+               return default_call_rcu_data;
+       }
+       call_rcu_data_init(&default_call_rcu_data, 0, -1);
+       call_rcu_unlock(&call_rcu_mutex);
+       return default_call_rcu_data;
+}
+
+/*
+ * Return the call_rcu_data structure that applies to the currently
+ * running thread.  Any call_rcu_data structure assigned specifically
+ * to this thread has first priority, followed by any call_rcu_data
+ * structure assigned to the CPU on which the thread is running,
+ * followed by the default call_rcu_data structure.  If there is not
+ * yet a default call_rcu_data structure, one will be created.
+ */
+struct call_rcu_data *get_call_rcu_data(void)
+{
+       int curcpu;
+       static int warned = 0;
+
+       if (thread_call_rcu_data != NULL)
+               return thread_call_rcu_data;
+       if (maxcpus <= 0)
+               return get_default_call_rcu_data();
+       curcpu = sched_getcpu();
+       if (!warned && (curcpu < 0 || maxcpus <= curcpu)) {
+               fprintf(stderr, "[error] liburcu: gcrd CPU # out of range\n");
+               warned = 1;
+       }
+       if (curcpu >= 0 && maxcpus > curcpu &&
+           per_cpu_call_rcu_data != NULL &&
+           per_cpu_call_rcu_data[curcpu] != NULL)
+               return per_cpu_call_rcu_data[curcpu];
+       return get_default_call_rcu_data();
+}
+
+/*
+ * Return a pointer to this task's call_rcu_data if there is one.
+ */
+
+struct call_rcu_data *get_thread_call_rcu_data(void)
+{
+       return thread_call_rcu_data;
+}
+
+/*
+ * Set this task's call_rcu_data structure as specified, regardless
+ * of whether or not this task already had one.  (This allows switching
+ * to and from real-time call_rcu threads, for example.)
+ *
+ * Use NULL to remove a thread's call_rcu_data structure, but it is
+ * the caller's responsibility to dispose of the removed structure.
+ * Use get_thread_call_rcu_data() to obtain a pointer to the old structure
+ * (prior to NULLing it out, of course).
+ */
+
+void set_thread_call_rcu_data(struct call_rcu_data *crdp)
+{
+       thread_call_rcu_data = crdp;
+}
+
+/*
+ * Create a separate call_rcu thread for each CPU.  This does not
+ * replace a pre-existing call_rcu thread -- use the set_cpu_call_rcu_data()
+ * function if you want that behavior.
+ */
+
+int create_all_cpu_call_rcu_data(unsigned long flags)
+{
+       int i;
+       struct call_rcu_data *crdp;
+       int ret;
+
+       call_rcu_lock(&call_rcu_mutex);
+       alloc_cpu_call_rcu_data();
+       call_rcu_unlock(&call_rcu_mutex);
+       if (maxcpus <= 0) {
+               errno = EINVAL;
+               return -EINVAL;
+       }
+       if (per_cpu_call_rcu_data == NULL) {
+               errno = ENOMEM;
+               return -ENOMEM;
+       }
+       for (i = 0; i < maxcpus; i++) {
+               call_rcu_lock(&call_rcu_mutex);
+               if (get_cpu_call_rcu_data(i)) {
+                       call_rcu_unlock(&call_rcu_mutex);
+                       continue;
+               }
+               crdp = __create_call_rcu_data(flags, i);
+               if (crdp == NULL) {
+                       call_rcu_unlock(&call_rcu_mutex);
+                       errno = ENOMEM;
+                       return -ENOMEM;
+               }
+               call_rcu_unlock(&call_rcu_mutex);
+               if ((ret = set_cpu_call_rcu_data(i, crdp)) != 0) {
+                       /* FIXME: Leaks crdp for now. */
+                       return ret; /* Can happen on race. */
+               }
+       }
+       return 0;
+}
+
+/*
+ * Wake up the call_rcu thread corresponding to the specified
+ * call_rcu_data structure.
+ */
+static void wake_call_rcu_thread(struct call_rcu_data *crdp)
+{
+       if (!(_CMM_LOAD_SHARED(crdp->flags) & URCU_CALL_RCU_RT))
+               call_rcu_wake_up(crdp);
+}
+
+/*
+ * Schedule a function to be invoked after a following grace period.
+ * This is the only function that must be called -- the others are
+ * only present to allow applications to tune their use of RCU for
+ * maximum performance.
+ *
+ * Note that unless a call_rcu thread has not already been created,
+ * the first invocation of call_rcu() will create one.  So, if you
+ * need the first invocation of call_rcu() to be fast, make sure
+ * to create a call_rcu thread first.  One way to accomplish this is
+ * "get_call_rcu_data();", and another is create_all_cpu_call_rcu_data().
+ */
+
+void call_rcu(struct rcu_head *head,
+             void (*func)(struct rcu_head *head))
+{
+       struct call_rcu_data *crdp;
+
+       cds_wfq_node_init(&head->next);
+       head->func = func;
+       crdp = get_call_rcu_data();
+       cds_wfq_enqueue(&crdp->cbs, &head->next);
+       uatomic_inc(&crdp->qlen);
+       wake_call_rcu_thread(crdp);
+}
+
+/*
+ * Free up the specified call_rcu_data structure, terminating the
+ * associated call_rcu thread.  The caller must have previously
+ * removed the call_rcu_data structure from per-thread or per-CPU
+ * usage.  For example, set_cpu_call_rcu_data(cpu, NULL) for per-CPU
+ * call_rcu_data structures or set_thread_call_rcu_data(NULL) for
+ * per-thread call_rcu_data structures.
+ *
+ * We silently refuse to free up the default call_rcu_data structure
+ * because that is where we put any leftover callbacks.  Note that
+ * the possibility of self-spawning callbacks makes it impossible
+ * to execute all the callbacks in finite time without putting any
+ * newly spawned callbacks somewhere else.  The "somewhere else" of
+ * last resort is the default call_rcu_data structure.
+ *
+ * We also silently refuse to free NULL pointers.  This simplifies
+ * the calling code.
+ */
+void call_rcu_data_free(struct call_rcu_data *crdp)
+{
+       struct cds_wfq_node *cbs;
+       struct cds_wfq_node **cbs_tail;
+       struct cds_wfq_node **cbs_endprev;
+
+       if (crdp == NULL || crdp == default_call_rcu_data) {
+               return;
+       }
+       if ((uatomic_read(&crdp->flags) & URCU_CALL_RCU_STOPPED) == 0) {
+               uatomic_or(&crdp->flags, URCU_CALL_RCU_STOP);
+               wake_call_rcu_thread(crdp);
+               while ((uatomic_read(&crdp->flags) & URCU_CALL_RCU_STOPPED) == 0)
+                       poll(NULL, 0, 1);
+       }
+       if (&crdp->cbs.head != _CMM_LOAD_SHARED(crdp->cbs.tail)) {
+               while ((cbs = _CMM_LOAD_SHARED(crdp->cbs.head)) == NULL)
+                       poll(NULL, 0, 1);
+               _CMM_STORE_SHARED(crdp->cbs.head, NULL);
+               cbs_tail = (struct cds_wfq_node **)
+                       uatomic_xchg(&crdp->cbs.tail, &crdp->cbs.head);
+               cbs_endprev = (struct cds_wfq_node **)
+                       uatomic_xchg(&default_call_rcu_data, cbs_tail);
+               *cbs_endprev = cbs;
+               uatomic_add(&default_call_rcu_data->qlen,
+                           uatomic_read(&crdp->qlen));
+               cds_list_del(&crdp->list);
+               free(crdp);
+       }
+}
+
+/*
+ * Clean up all the per-CPU call_rcu threads.
+ */
+void free_all_cpu_call_rcu_data(void)
+{
+       int cpu;
+       struct call_rcu_data *crdp;
+
+       if (maxcpus <= 0)
+               return;
+       for (cpu = 0; cpu < maxcpus; cpu++) {
+               crdp = get_cpu_call_rcu_data(cpu);
+               if (crdp == NULL)
+                       continue;
+               set_cpu_call_rcu_data(cpu, NULL);
+               call_rcu_data_free(crdp);
+       }
+}
+
+/*
+ * Acquire the call_rcu_mutex in order to ensure that the child sees
+ * all of the call_rcu() data structures in a consistent state.
+ * Suitable for pthread_atfork() and friends.
+ */
+void call_rcu_before_fork(void)
+{
+       call_rcu_lock(&call_rcu_mutex);
+}
+
+/*
+ * Clean up call_rcu data structures in the parent of a successful fork()
+ * that is not followed by exec() in the child.  Suitable for
+ * pthread_atfork() and friends.
+ */
+void call_rcu_after_fork_parent(void)
+{
+       call_rcu_unlock(&call_rcu_mutex);
+}
+
+/*
+ * Clean up call_rcu data structures in the child of a successful fork()
+ * that is not followed by exec().  Suitable for pthread_atfork() and
+ * friends.
+ */
+void call_rcu_after_fork_child(void)
+{
+       struct call_rcu_data *crdp;
+
+       /* Release the mutex. */
+       call_rcu_unlock(&call_rcu_mutex);
+
+       /*
+        * Allocate a new default call_rcu_data structure in order
+        * to get a working call_rcu thread to go with it.
+        */
+       default_call_rcu_data = NULL;
+       (void)get_default_call_rcu_data();
+
+       /* Dispose of all of the rest of the call_rcu_data structures. */
+       while (call_rcu_data_list.next != call_rcu_data_list.prev) {
+               crdp = cds_list_entry(call_rcu_data_list.prev,
+                                     struct call_rcu_data, list);
+               if (crdp == default_call_rcu_data)
+                       crdp = cds_list_entry(crdp->list.prev,
+                                             struct call_rcu_data, list);
+               uatomic_set(&crdp->flags, URCU_CALL_RCU_STOPPED);
+               call_rcu_data_free(crdp);
+       }
+}
diff --git a/urcu-call-rcu.h b/urcu-call-rcu.h
new file mode 100644 (file)
index 0000000..e76a844
--- /dev/null
@@ -0,0 +1,85 @@
+#ifndef _URCU_CALL_RCU_H
+#define _URCU_CALL_RCU_H
+
+/*
+ * urcu-call-rcu.h
+ *
+ * Userspace RCU header - deferred execution
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * LGPL-compatible code should include this header with :
+ *
+ * #define _LGPL_SOURCE
+ * #include <urcu-defer.h>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <stdlib.h>
+#include <pthread.h>
+
+#include <urcu/wfqueue.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Note that struct call_rcu_data is opaque to callers. */
+
+struct call_rcu_data;
+
+/* Flag values. */
+
+#define URCU_CALL_RCU_RT       0x1
+#define URCU_CALL_RCU_RUNNING  0x2
+#define URCU_CALL_RCU_STOP     0x4
+#define URCU_CALL_RCU_STOPPED  0x8
+
+/*
+ * The rcu_head data structure is placed in the structure to be freed
+ * via call_rcu().
+ */
+
+struct rcu_head {
+       struct cds_wfq_node next;
+       void (*func)(struct rcu_head *head);
+};
+
+/*
+ * Exported functions
+ */
+struct call_rcu_data *get_cpu_call_rcu_data(int cpu);
+pthread_t get_call_rcu_thread(struct call_rcu_data *crdp);
+struct call_rcu_data *create_call_rcu_data(unsigned long flags,
+                                          int cpu_affinity);
+int set_cpu_call_rcu_data(int cpu, struct call_rcu_data *crdp);
+struct call_rcu_data *get_default_call_rcu_data(void);
+struct call_rcu_data *get_call_rcu_data(void);
+struct call_rcu_data *get_thread_call_rcu_data(void);
+void set_thread_call_rcu_data(struct call_rcu_data *crdp);
+int create_all_cpu_call_rcu_data(unsigned long flags);
+void call_rcu(struct rcu_head *head,
+             void (*func)(struct rcu_head *head));
+void call_rcu_data_free(struct call_rcu_data *crdp);
+void free_all_cpu_call_rcu_data(void);
+void call_rcu_after_fork_child(void);
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* _URCU_CALL_RCU_H */
diff --git a/urcu-defer-impl.h b/urcu-defer-impl.h
new file mode 100644 (file)
index 0000000..d1ab046
--- /dev/null
@@ -0,0 +1,450 @@
+#ifndef _URCU_DEFER_IMPL_H
+#define _URCU_DEFER_IMPL_H
+
+/*
+ * urcu-defer-impl.h
+ *
+ * Userspace RCU header - memory reclamation.
+ *
+ * TO BE INCLUDED ONLY FROM URCU LIBRARY CODE. See urcu-defer.h for linking
+ * dynamically with the userspace rcu reclamation library.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#include <stdlib.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <signal.h>
+#include <assert.h>
+#include <string.h>
+#include <errno.h>
+#include <poll.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <stdint.h>
+
+#include "urcu/futex.h"
+
+#include <urcu/compiler.h>
+#include <urcu/arch.h>
+#include <urcu/uatomic.h>
+#include <urcu/list.h>
+#include <urcu/system.h>
+
+/*
+ * Number of entries in the per-thread defer queue. Must be power of 2.
+ */
+#define DEFER_QUEUE_SIZE       (1 << 12)
+#define DEFER_QUEUE_MASK       (DEFER_QUEUE_SIZE - 1)
+
+/*
+ * Typically, data is aligned at least on the architecture size.
+ * Use lowest bit to indicate that the current callback is changing.
+ * Assumes that (void *)-2L is not used often. Used to encode non-aligned
+ * functions and non-aligned data using extra space.
+ * We encode the (void *)-2L fct as: -2L, fct, data.
+ * We encode the (void *)-2L data as: -2L, fct, data.
+ * Here, DQ_FCT_MARK == ~DQ_FCT_BIT. Required for the test order.
+ */
+#define DQ_FCT_BIT             (1 << 0)
+#define DQ_IS_FCT_BIT(x)       ((unsigned long)(x) & DQ_FCT_BIT)
+#define DQ_SET_FCT_BIT(x)      \
+       (x = (void *)((unsigned long)(x) | DQ_FCT_BIT))
+#define DQ_CLEAR_FCT_BIT(x)    \
+       (x = (void *)((unsigned long)(x) & ~DQ_FCT_BIT))
+#define DQ_FCT_MARK            ((void *)(~DQ_FCT_BIT))
+
+/*
+ * This code section can only be included in LGPL 2.1 compatible source code.
+ * See below for the function call wrappers which can be used in code meant to
+ * be only linked with the Userspace RCU library. This comes with a small
+ * performance degradation on the read-side due to the added function calls.
+ * This is required to permit relinking with newer versions of the library.
+ */
+
+#ifdef DEBUG_RCU
+#define rcu_assert(args...)    assert(args)
+#else
+#define rcu_assert(args...)
+#endif
+
+/*
+ * defer queue.
+ * Contains pointers. Encoded to save space when same callback is often used.
+ * When looking up the next item:
+ * - if DQ_FCT_BIT is set, set the current callback to DQ_CLEAR_FCT_BIT(ptr)
+ *   - next element contains pointer to data.
+ * - else if item == DQ_FCT_MARK
+ *   - set the current callback to next element ptr
+ *   - following next element contains pointer to data.
+ * - else current element contains data
+ */
+struct defer_queue {
+       unsigned long head;     /* add element at head */
+       void *last_fct_in;      /* last fct pointer encoded */
+       unsigned long tail;     /* next element to remove at tail */
+       void *last_fct_out;     /* last fct pointer encoded */
+       void **q;
+       /* registry information */
+       unsigned long last_head;
+       struct cds_list_head list;      /* list of thread queues */
+};
+
+/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#include "urcu-defer.h"
+
+void __attribute__((destructor)) rcu_defer_exit(void);
+
+extern void synchronize_rcu(void);
+
+/*
+ * rcu_defer_mutex nests inside defer_thread_mutex.
+ */
+static pthread_mutex_t rcu_defer_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t defer_thread_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static int32_t defer_thread_futex;
+
+/*
+ * Written to only by each individual deferer. Read by both the deferer and
+ * the reclamation tread.
+ */
+static struct defer_queue __thread defer_queue;
+static CDS_LIST_HEAD(registry_defer);
+static pthread_t tid_defer;
+
+static void mutex_lock_defer(pthread_mutex_t *mutex)
+{
+       int ret;
+
+#ifndef DISTRUST_SIGNALS_EXTREME
+       ret = pthread_mutex_lock(mutex);
+       if (ret) {
+               perror("Error in pthread mutex lock");
+               exit(-1);
+       }
+#else /* #ifndef DISTRUST_SIGNALS_EXTREME */
+       while ((ret = pthread_mutex_trylock(mutex)) != 0) {
+               if (ret != EBUSY && ret != EINTR) {
+                       printf("ret = %d, errno = %d\n", ret, errno);
+                       perror("Error in pthread mutex lock");
+                       exit(-1);
+               }
+               pthread_testcancel();
+               poll(NULL,0,10);
+       }
+#endif /* #else #ifndef DISTRUST_SIGNALS_EXTREME */
+}
+
+/*
+ * Wake-up any waiting defer thread. Called from many concurrent threads.
+ */
+static void wake_up_defer(void)
+{
+       if (unlikely(uatomic_read(&defer_thread_futex) == -1)) {
+               uatomic_set(&defer_thread_futex, 0);
+               futex_noasync(&defer_thread_futex, FUTEX_WAKE, 1,
+                     NULL, NULL, 0);
+       }
+}
+
+static unsigned long rcu_defer_num_callbacks(void)
+{
+       unsigned long num_items = 0, head;
+       struct defer_queue *index;
+
+       mutex_lock_defer(&rcu_defer_mutex);
+       cds_list_for_each_entry(index, &registry_defer, list) {
+               head = CMM_LOAD_SHARED(index->head);
+               num_items += head - index->tail;
+       }
+       mutex_unlock(&rcu_defer_mutex);
+       return num_items;
+}
+
+/*
+ * Defer thread waiting. Single thread.
+ */
+static void wait_defer(void)
+{
+       uatomic_dec(&defer_thread_futex);
+       cmm_smp_mb();   /* Write futex before read queue */
+       if (rcu_defer_num_callbacks()) {
+               cmm_smp_mb();   /* Read queue before write futex */
+               /* Callbacks are queued, don't wait. */
+               uatomic_set(&defer_thread_futex, 0);
+       } else {
+               cmm_smp_rmb();  /* Read queue before read futex */
+               if (uatomic_read(&defer_thread_futex) == -1)
+                       futex_noasync(&defer_thread_futex, FUTEX_WAIT, -1,
+                             NULL, NULL, 0);
+       }
+}
+
+/*
+ * Must be called after Q.S. is reached.
+ */
+static void rcu_defer_barrier_queue(struct defer_queue *queue,
+                                   unsigned long head)
+{
+       unsigned long i;
+       void (*fct)(void *p);
+       void *p;
+
+       /*
+        * Tail is only modified when lock is held.
+        * Head is only modified by owner thread.
+        */
+
+       for (i = queue->tail; i != head;) {
+               cmm_smp_rmb();       /* read head before q[]. */
+               p = CMM_LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
+               if (unlikely(DQ_IS_FCT_BIT(p))) {
+                       DQ_CLEAR_FCT_BIT(p);
+                       queue->last_fct_out = p;
+                       p = CMM_LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
+               } else if (unlikely(p == DQ_FCT_MARK)) {
+                       p = CMM_LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
+                       queue->last_fct_out = p;
+                       p = CMM_LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
+               }
+               fct = queue->last_fct_out;
+               fct(p);
+       }
+       cmm_smp_mb();   /* push tail after having used q[] */
+       CMM_STORE_SHARED(queue->tail, i);
+}
+
+static void _rcu_defer_barrier_thread(void)
+{
+       unsigned long head, num_items;
+
+       head = defer_queue.head;
+       num_items = head - defer_queue.tail;
+       if (unlikely(!num_items))
+               return;
+       synchronize_rcu();
+       rcu_defer_barrier_queue(&defer_queue, head);
+}
+
+void rcu_defer_barrier_thread(void)
+{
+       mutex_lock_defer(&rcu_defer_mutex);
+       _rcu_defer_barrier_thread();
+       mutex_unlock(&rcu_defer_mutex);
+}
+
+/*
+ * rcu_defer_barrier - Execute all queued rcu callbacks.
+ *
+ * Execute all RCU callbacks queued before rcu_defer_barrier() execution.
+ * All callbacks queued on the local thread prior to a rcu_defer_barrier() call
+ * are guaranteed to be executed.
+ * Callbacks queued by other threads concurrently with rcu_defer_barrier()
+ * execution are not guaranteed to be executed in the current batch (could
+ * be left for the next batch). These callbacks queued by other threads are only
+ * guaranteed to be executed if there is explicit synchronization between
+ * the thread adding to the queue and the thread issuing the defer_barrier call.
+ */
+
+void rcu_defer_barrier(void)
+{
+       struct defer_queue *index;
+       unsigned long num_items = 0;
+
+       if (cds_list_empty(&registry_defer))
+               return;
+
+       mutex_lock_defer(&rcu_defer_mutex);
+       cds_list_for_each_entry(index, &registry_defer, list) {
+               index->last_head = CMM_LOAD_SHARED(index->head);
+               num_items += index->last_head - index->tail;
+       }
+       if (likely(!num_items)) {
+               /*
+                * We skip the grace period because there are no queued
+                * callbacks to execute.
+                */
+               goto end;
+       }
+       synchronize_rcu();
+       cds_list_for_each_entry(index, &registry_defer, list)
+               rcu_defer_barrier_queue(index, index->last_head);
+end:
+       mutex_unlock(&rcu_defer_mutex);
+}
+
+/*
+ * _defer_rcu - Queue a RCU callback.
+ */
+void _defer_rcu(void (*fct)(void *p), void *p)
+{
+       unsigned long head, tail;
+
+       /*
+        * Head is only modified by ourself. Tail can be modified by reclamation
+        * thread.
+        */
+       head = defer_queue.head;
+       tail = CMM_LOAD_SHARED(defer_queue.tail);
+
+       /*
+        * If queue is full, or reached threshold. Empty queue ourself.
+        * Worse-case: must allow 2 supplementary entries for fct pointer.
+        */
+       if (unlikely(head - tail >= DEFER_QUEUE_SIZE - 2)) {
+               assert(head - tail <= DEFER_QUEUE_SIZE);
+               rcu_defer_barrier_thread();
+               assert(head - CMM_LOAD_SHARED(defer_queue.tail) == 0);
+       }
+
+       if (unlikely(defer_queue.last_fct_in != fct)) {
+               defer_queue.last_fct_in = fct;
+               if (unlikely(DQ_IS_FCT_BIT(fct) || fct == DQ_FCT_MARK)) {
+                       /*
+                        * If the function to encode is not aligned or the
+                        * marker, write DQ_FCT_MARK followed by the function
+                        * pointer.
+                        */
+                       _CMM_STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
+                                     DQ_FCT_MARK);
+                       _CMM_STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
+                                     fct);
+               } else {
+                       DQ_SET_FCT_BIT(fct);
+                       _CMM_STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
+                                     fct);
+               }
+       } else {
+               if (unlikely(DQ_IS_FCT_BIT(p) || p == DQ_FCT_MARK)) {
+                       /*
+                        * If the data to encode is not aligned or the marker,
+                        * write DQ_FCT_MARK followed by the function pointer.
+                        */
+                       _CMM_STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
+                                     DQ_FCT_MARK);
+                       _CMM_STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
+                                     fct);
+               }
+       }
+       _CMM_STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK], p);
+       cmm_smp_wmb();  /* Publish new pointer before head */
+                       /* Write q[] before head. */
+       CMM_STORE_SHARED(defer_queue.head, head);
+       cmm_smp_mb();   /* Write queue head before read futex */
+       /*
+        * Wake-up any waiting defer thread.
+        */
+       wake_up_defer();
+}
+
+void *thr_defer(void *args)
+{
+       for (;;) {
+               pthread_testcancel();
+               /*
+                * "Be green". Don't wake up the CPU if there is no RCU work
+                * to perform whatsoever. Aims at saving laptop battery life by
+                * leaving the processor in sleep state when idle.
+                */
+               wait_defer();
+               /* Sleeping after wait_defer to let many callbacks enqueue */
+               poll(NULL,0,100);       /* wait for 100ms */
+               rcu_defer_barrier();
+       }
+
+       return NULL;
+}
+
+/*
+ * library wrappers to be used by non-LGPL compatible source code.
+ */
+
+void defer_rcu(void (*fct)(void *p), void *p)
+{
+       _defer_rcu(fct, p);
+}
+
+static void start_defer_thread(void)
+{
+       int ret;
+
+       ret = pthread_create(&tid_defer, NULL, thr_defer, NULL);
+       assert(!ret);
+}
+
+static void stop_defer_thread(void)
+{
+       int ret;
+       void *tret;
+
+       pthread_cancel(tid_defer);
+       wake_up_defer();
+       ret = pthread_join(tid_defer, &tret);
+       assert(!ret);
+}
+
+int rcu_defer_register_thread(void)
+{
+       int was_empty;
+
+       assert(defer_queue.last_head == 0);
+       assert(defer_queue.q == NULL);
+       defer_queue.q = malloc(sizeof(void *) * DEFER_QUEUE_SIZE);
+       if (!defer_queue.q)
+               return -ENOMEM;
+
+       mutex_lock_defer(&defer_thread_mutex);
+       mutex_lock_defer(&rcu_defer_mutex);
+       was_empty = cds_list_empty(&registry_defer);
+       cds_list_add(&defer_queue.list, &registry_defer);
+       mutex_unlock(&rcu_defer_mutex);
+
+       if (was_empty)
+               start_defer_thread();
+       mutex_unlock(&defer_thread_mutex);
+       return 0;
+}
+
+void rcu_defer_unregister_thread(void)
+{
+       int is_empty;
+
+       mutex_lock_defer(&defer_thread_mutex);
+       mutex_lock_defer(&rcu_defer_mutex);
+       cds_list_del(&defer_queue.list);
+       _rcu_defer_barrier_thread();
+       free(defer_queue.q);
+       defer_queue.q = NULL;
+       is_empty = cds_list_empty(&registry_defer);
+       mutex_unlock(&rcu_defer_mutex);
+
+       if (is_empty)
+               stop_defer_thread();
+       mutex_unlock(&defer_thread_mutex);
+}
+
+void rcu_defer_exit(void)
+{
+       assert(cds_list_empty(&registry_defer));
+}
+
+#endif /* _URCU_DEFER_IMPL_H */
diff --git a/urcu-defer-static.h b/urcu-defer-static.h
deleted file mode 100644 (file)
index 427f3d3..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-#ifndef _URCU_DEFER_STATIC_H
-#define _URCU_DEFER_STATIC_H
-
-/*
- * urcu-defer-static.h
- *
- * Userspace RCU header - memory reclamation.
- *
- * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu-defer.h for linking
- * dynamically with the userspace rcu reclamation library.
- *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * IBM's contributions to this file may be relicensed under LGPLv2 or later.
- */
-
-#include <stdlib.h>
-#include <pthread.h>
-
-#include <compiler.h>
-#include <arch.h>
-
-
-/*
- * Number of entries in the per-thread defer queue. Must be power of 2.
- */
-#define DEFER_QUEUE_SIZE       (1 << 12)
-#define DEFER_QUEUE_MASK       (DEFER_QUEUE_SIZE - 1)
-
-/*
- * Typically, data is aligned at least on the architecture size.
- * Use lowest bit to indicate that the current callback is changing.
- * Assumes that (void *)-2L is not used often. Used to encode non-aligned
- * functions and non-aligned data using extra space.
- * We encode the (void *)-2L fct as: -2L, fct, data.
- * We encode the (void *)-2L data as: -2L, fct, data.
- * Here, DQ_FCT_MARK == ~DQ_FCT_BIT. Required for the test order.
- */
-#define DQ_FCT_BIT             (1 << 0)
-#define DQ_IS_FCT_BIT(x)       ((unsigned long)(x) & DQ_FCT_BIT)
-#define DQ_SET_FCT_BIT(x)      \
-       (x = (void *)((unsigned long)(x) | DQ_FCT_BIT))
-#define DQ_CLEAR_FCT_BIT(x)    \
-       (x = (void *)((unsigned long)(x) & ~DQ_FCT_BIT))
-#define DQ_FCT_MARK            ((void *)(~DQ_FCT_BIT))
-
-/*
- * Identify a shared load. A smp_rmc() or smp_mc() should come before the load.
- */
-#define _LOAD_SHARED(p)               ACCESS_ONCE(p)
-
-/*
- * Load a data from shared memory, doing a cache flush if required.
- */
-#define LOAD_SHARED(p)                 \
-       ({                              \
-               smp_rmc();              \
-               _LOAD_SHARED(p);        \
-       })
-
-/*
- * Identify a shared store. A smp_wmc() or smp_mc() should follow the store.
- */
-#define _STORE_SHARED(x, v)    ({ ACCESS_ONCE(x) = (v); })
-
-/*
- * Store v into x, where x is located in shared memory. Performs the required
- * cache flush after writing. Returns v.
- */
-#define STORE_SHARED(x, v)             \
-       ({                              \
-               _STORE_SHARED(x, v);    \
-               smp_wmc();              \
-               (v);                    \
-       })
-
-/*
- * This code section can only be included in LGPL 2.1 compatible source code.
- * See below for the function call wrappers which can be used in code meant to
- * be only linked with the Userspace RCU library. This comes with a small
- * performance degradation on the read-side due to the added function calls.
- * This is required to permit relinking with newer versions of the library.
- */
-
-#ifdef DEBUG_RCU
-#define rcu_assert(args...)    assert(args)
-#else
-#define rcu_assert(args...)
-#endif
-
-/*
- * defer queue.
- * Contains pointers. Encoded to save space when same callback is often used.
- * When looking up the next item:
- * - if DQ_FCT_BIT is set, set the current callback to DQ_CLEAR_FCT_BIT(ptr)
- *   - next element contains pointer to data.
- * - else if item == DQ_FCT_MARK
- *   - set the current callback to next element ptr
- *   - following next element contains pointer to data.
- * - else current element contains data
- */
-struct defer_queue {
-       unsigned long head;     /* add element at head */
-       void *last_fct_in;      /* last fct pointer encoded */
-       unsigned long tail;     /* next element to remove at tail */
-       void *last_fct_out;     /* last fct pointer encoded */
-       void **q;
-};
-
-#endif /* _URCU_DEFER_STATIC_H */
diff --git a/urcu-defer.c b/urcu-defer.c
deleted file mode 100644 (file)
index ccf3511..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
- * urcu-defer.c
- *
- * Userspace RCU library - batch memory reclamation
- *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <pthread.h>
-#include <signal.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <poll.h>
-#include <sys/time.h>
-#include <syscall.h>
-#include <unistd.h>
-
-#include "urcu-defer-static.h"
-/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
-#include "urcu-defer.h"
-
-#define futex(...)     syscall(__NR_futex, __VA_ARGS__)
-#define FUTEX_WAIT             0
-#define FUTEX_WAKE             1
-
-void __attribute__((destructor)) urcu_defer_exit(void);
-
-extern void synchronize_rcu(void);
-
-/*
- * urcu_defer_mutex nests inside defer_thread_mutex.
- */
-static pthread_mutex_t urcu_defer_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t defer_thread_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static int defer_thread_futex;
-
-/*
- * Written to only by each individual deferer. Read by both the deferer and
- * the reclamation tread.
- */
-static struct defer_queue __thread defer_queue;
-
-/* Thread IDs of registered deferers */
-#define INIT_NUM_THREADS 4
-
-struct deferer_registry {
-       pthread_t tid;
-       struct defer_queue *defer_queue;
-       unsigned long last_head;
-};
-
-static struct deferer_registry *registry;
-static int num_deferers, alloc_deferers;
-
-static pthread_t tid_defer;
-
-static void internal_urcu_lock(pthread_mutex_t *mutex)
-{
-       int ret;
-
-#ifndef DISTRUST_SIGNALS_EXTREME
-       ret = pthread_mutex_lock(mutex);
-       if (ret) {
-               perror("Error in pthread mutex lock");
-               exit(-1);
-       }
-#else /* #ifndef DISTRUST_SIGNALS_EXTREME */
-       while ((ret = pthread_mutex_trylock(mutex)) != 0) {
-               if (ret != EBUSY && ret != EINTR) {
-                       printf("ret = %d, errno = %d\n", ret, errno);
-                       perror("Error in pthread mutex lock");
-                       exit(-1);
-               }
-               pthread_testcancel();
-               poll(NULL,0,10);
-       }
-#endif /* #else #ifndef DISTRUST_SIGNALS_EXTREME */
-}
-
-static void internal_urcu_unlock(pthread_mutex_t *mutex)
-{
-       int ret;
-
-       ret = pthread_mutex_unlock(mutex);
-       if (ret) {
-               perror("Error in pthread mutex unlock");
-               exit(-1);
-       }
-}
-
-/*
- * Wake-up any waiting defer thread. Called from many concurrent threads.
- */
-static void wake_up_defer(void)
-{
-       if (unlikely(atomic_read(&defer_thread_futex) == -1)) {
-               atomic_set(&defer_thread_futex, 0);
-               futex(&defer_thread_futex, FUTEX_WAKE, 1,
-                     NULL, NULL, 0);
-       }
-}
-
-static unsigned long rcu_defer_num_callbacks(void)
-{
-       unsigned long num_items = 0, head;
-       struct deferer_registry *index;
-
-       internal_urcu_lock(&urcu_defer_mutex);
-       for (index = registry; index < registry + num_deferers; index++) {
-               head = LOAD_SHARED(index->defer_queue->head);
-               num_items += head - index->defer_queue->tail;
-       }
-       internal_urcu_unlock(&urcu_defer_mutex);
-       return num_items;
-}
-
-/*
- * Defer thread waiting. Single thread.
- */
-static void wait_defer(void)
-{
-       atomic_dec(&defer_thread_futex);
-       smp_mb();       /* Write futex before read queue */
-       if (rcu_defer_num_callbacks()) {
-               smp_mb();       /* Read queue before write futex */
-               /* Callbacks are queued, don't wait. */
-               atomic_set(&defer_thread_futex, 0);
-       } else {
-               smp_rmb();      /* Read queue before read futex */
-               if (atomic_read(&defer_thread_futex) == -1)
-                       futex(&defer_thread_futex, FUTEX_WAIT, -1,
-                             NULL, NULL, 0);
-       }
-}
-
-/*
- * Must be called after Q.S. is reached.
- */
-static void rcu_defer_barrier_queue(struct defer_queue *queue,
-                                   unsigned long head)
-{
-       unsigned long i;
-       void (*fct)(void *p);
-       void *p;
-
-       /*
-        * Tail is only modified when lock is held.
-        * Head is only modified by owner thread.
-        */
-
-       for (i = queue->tail; i != head;) {
-               smp_rmb();       /* read head before q[]. */
-               p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
-               if (unlikely(DQ_IS_FCT_BIT(p))) {
-                       DQ_CLEAR_FCT_BIT(p);
-                       queue->last_fct_out = p;
-                       p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
-               } else if (unlikely(p == DQ_FCT_MARK)) {
-                       p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
-                       queue->last_fct_out = p;
-                       p = LOAD_SHARED(queue->q[i++ & DEFER_QUEUE_MASK]);
-               }
-               fct = queue->last_fct_out;
-               fct(p);
-       }
-       smp_mb();       /* push tail after having used q[] */
-       STORE_SHARED(queue->tail, i);
-}
-
-static void _rcu_defer_barrier_thread(void)
-{
-       unsigned long head, num_items;
-
-       head = defer_queue.head;
-       num_items = head - defer_queue.tail;
-       if (unlikely(!num_items))
-               return;
-       synchronize_rcu();
-       rcu_defer_barrier_queue(&defer_queue, head);
-}
-
-
-void rcu_defer_barrier_thread(void)
-{
-       internal_urcu_lock(&urcu_defer_mutex);
-       _rcu_defer_barrier_thread();
-       internal_urcu_unlock(&urcu_defer_mutex);
-}
-
-/*
- * rcu_defer_barrier - Execute all queued rcu callbacks.
- *
- * Execute all RCU callbacks queued before rcu_defer_barrier() execution.
- * All callbacks queued on the local thread prior to a rcu_defer_barrier() call
- * are guaranteed to be executed.
- * Callbacks queued by other threads concurrently with rcu_defer_barrier()
- * execution are not guaranteed to be executed in the current batch (could
- * be left for the next batch). These callbacks queued by other threads are only
- * guaranteed to be executed if there is explicit synchronization between
- * the thread adding to the queue and the thread issuing the defer_barrier call.
- */
-
-void rcu_defer_barrier(void)
-{
-       struct deferer_registry *index;
-       unsigned long num_items = 0;
-
-       if (!registry)
-               return;
-
-       internal_urcu_lock(&urcu_defer_mutex);
-       for (index = registry; index < registry + num_deferers; index++) {
-               index->last_head = LOAD_SHARED(index->defer_queue->head);
-               num_items += index->last_head - index->defer_queue->tail;
-       }
-       if (likely(!num_items)) {
-               /*
-                * We skip the grace period because there are no queued
-                * callbacks to execute.
-                */
-               goto end;
-       }
-       synchronize_rcu();
-       for (index = registry; index < registry + num_deferers; index++)
-               rcu_defer_barrier_queue(index->defer_queue,
-                                         index->last_head);
-end:
-       internal_urcu_unlock(&urcu_defer_mutex);
-}
-
-/*
- * _rcu_defer_queue - Queue a RCU callback.
- */
-void _rcu_defer_queue(void (*fct)(void *p), void *p)
-{
-       unsigned long head, tail;
-
-       /*
-        * Head is only modified by ourself. Tail can be modified by reclamation
-        * thread.
-        */
-       head = defer_queue.head;
-       tail = LOAD_SHARED(defer_queue.tail);
-
-       /*
-        * If queue is full, empty it ourself.
-        * Worse-case: must allow 2 supplementary entries for fct pointer.
-        */
-       if (unlikely(head - tail >= DEFER_QUEUE_SIZE - 2)) {
-               assert(head - tail <= DEFER_QUEUE_SIZE);
-               rcu_defer_barrier_thread();
-               assert(head - LOAD_SHARED(defer_queue.tail) == 0);
-       }
-
-       if (unlikely(defer_queue.last_fct_in != fct)) {
-               defer_queue.last_fct_in = fct;
-               if (unlikely(DQ_IS_FCT_BIT(fct) || fct == DQ_FCT_MARK)) {
-                       /*
-                        * If the function to encode is not aligned or the
-                        * marker, write DQ_FCT_MARK followed by the function
-                        * pointer.
-                        */
-                       _STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
-                                     DQ_FCT_MARK);
-                       _STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
-                                     fct);
-               } else {
-                       DQ_SET_FCT_BIT(fct);
-                       _STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
-                                     fct);
-               }
-       } else {
-               if (unlikely(DQ_IS_FCT_BIT(p) || p == DQ_FCT_MARK)) {
-                       /*
-                        * If the data to encode is not aligned or the marker,
-                        * write DQ_FCT_MARK followed by the function pointer.
-                        */
-                       _STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
-                                     DQ_FCT_MARK);
-                       _STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK],
-                                     fct);
-               }
-       }
-       _STORE_SHARED(defer_queue.q[head++ & DEFER_QUEUE_MASK], p);
-       smp_wmb();      /* Publish new pointer before head */
-                       /* Write q[] before head. */
-       STORE_SHARED(defer_queue.head, head);
-       smp_mb();       /* Write queue head before read futex */
-       /*
-        * Wake-up any waiting defer thread.
-        */
-       wake_up_defer();
-}
-
-void *thr_defer(void *args)
-{
-       for (;;) {
-               pthread_testcancel();
-               /*
-                * "Be green". Don't wake up the CPU if there is no RCU work
-                * to perform whatsoever. Aims at saving laptop battery life by
-                * leaving the processor in sleep state when idle.
-                */
-               wait_defer();
-               /* Sleeping after wait_defer to let many callbacks enqueue */
-               poll(NULL,0,100);       /* wait for 100ms */
-               rcu_defer_barrier();
-       }
-
-       return NULL;
-}
-
-/*
- * library wrappers to be used by non-LGPL compatible source code.
- */
-
-void rcu_defer_queue(void (*fct)(void *p), void *p)
-{
-       _rcu_defer_queue(fct, p);
-}
-
-static void rcu_add_deferer(pthread_t id)
-{
-       struct deferer_registry *oldarray;
-
-       if (!registry) {
-               alloc_deferers = INIT_NUM_THREADS;
-               num_deferers = 0;
-               registry =
-                       malloc(sizeof(struct deferer_registry) * alloc_deferers);
-       }
-       if (alloc_deferers < num_deferers + 1) {
-               oldarray = registry;
-               registry = malloc(sizeof(struct deferer_registry)
-                               * (alloc_deferers << 1));
-               memcpy(registry, oldarray,
-                       sizeof(struct deferer_registry) * alloc_deferers);
-               alloc_deferers <<= 1;
-               free(oldarray);
-       }
-       registry[num_deferers].tid = id;
-       /* reference to the TLS of _this_ deferer thread. */
-       registry[num_deferers].defer_queue = &defer_queue;
-       registry[num_deferers].last_head = 0;
-       num_deferers++;
-}
-
-/*
- * Never shrink (implementation limitation).
- * This is O(nb threads). Eventually use a hash table.
- */
-static void rcu_remove_deferer(pthread_t id)
-{
-       struct deferer_registry *index;
-
-       assert(registry != NULL);
-       for (index = registry; index < registry + num_deferers; index++) {
-               if (pthread_equal(index->tid, id)) {
-                       memcpy(index, &registry[num_deferers - 1],
-                               sizeof(struct deferer_registry));
-                       registry[num_deferers - 1].tid = 0;
-                       registry[num_deferers - 1].defer_queue = NULL;
-                       registry[num_deferers - 1].last_head = 0;
-                       num_deferers--;
-                       return;
-               }
-       }
-       /* Hrm not found, forgot to register ? */
-       assert(0);
-}
-
-static void start_defer_thread(void)
-{
-       int ret;
-
-       ret = pthread_create(&tid_defer, NULL, thr_defer,
-               NULL);
-       assert(!ret);
-}
-
-static void stop_defer_thread(void)
-{
-       int ret;
-       void *tret;
-
-       pthread_cancel(tid_defer);
-       wake_up_defer();
-       ret = pthread_join(tid_defer, &tret);
-       assert(!ret);
-}
-
-void rcu_defer_register_thread(void)
-{
-       int deferers;
-
-       internal_urcu_lock(&defer_thread_mutex);
-       internal_urcu_lock(&urcu_defer_mutex);
-       defer_queue.q = malloc(sizeof(void *) * DEFER_QUEUE_SIZE);
-       rcu_add_deferer(pthread_self());
-       deferers = num_deferers;
-       internal_urcu_unlock(&urcu_defer_mutex);
-
-       if (deferers == 1)
-               start_defer_thread();
-       internal_urcu_unlock(&defer_thread_mutex);
-}
-
-void rcu_defer_unregister_thread(void)
-{
-       int deferers;
-
-       internal_urcu_lock(&defer_thread_mutex);
-       internal_urcu_lock(&urcu_defer_mutex);
-       rcu_remove_deferer(pthread_self());
-       _rcu_defer_barrier_thread();
-       free(defer_queue.q);
-       defer_queue.q = NULL;
-       deferers = num_deferers;
-       internal_urcu_unlock(&urcu_defer_mutex);
-
-       if (deferers == 0)
-               stop_defer_thread();
-       internal_urcu_unlock(&defer_thread_mutex);
-}
-
-void urcu_defer_exit(void)
-{
-       free(registry);
-}
index e32156c010fdeae325c54b28ee17bb1e72d8d3ec..3710081cd06a20d796eee3d5cfb8deea83204b27 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Userspace RCU header - deferred execution
  *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
  *
  * LGPL-compatible code should include this header with :
 #include <stdlib.h>
 #include <pthread.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*
+ * Note: the defer_rcu() API is currently EXPERIMENTAL. It may change in the
+ * future.
+ * 
  * Important !
  *
  * Each thread queuing memory reclamation must be registered with
  * rcu_defer_register_thread(). rcu_defer_unregister_thread() should be
  * called before the thread exits.
  *
- * *NEVER* use call_rcu()/rcu_defer_queue() within a RCU read-side critical
- * section, because this primitive need to call synchronize_rcu() if the thread
- * queue is full.
+ * *NEVER* use defer_rcu() within a RCU read-side critical section, because this
+ * primitive need to call synchronize_rcu() if the thread queue is full.
  */
 
-#define call_rcu               rcu_defer_queue
-#define rcu_reclaim_queue(p)   rcu_defer_queue(free, p)
-
-extern void rcu_defer_queue(void (*fct)(void *p), void *p);
+extern void defer_rcu(void (*fct)(void *p), void *p);
 
 /*
  * Thread registration for reclamation.
  */
-extern void rcu_defer_register_thread(void);
+extern int rcu_defer_register_thread(void);
 extern void rcu_defer_unregister_thread(void);
 extern void rcu_defer_barrier(void);
 extern void rcu_defer_barrier_thread(void);
 
+#ifdef __cplusplus 
+}
+#endif
+
 #endif /* _URCU_BATCH_H */
diff --git a/urcu-pointer.c b/urcu-pointer.c
new file mode 100644 (file)
index 0000000..45dad2b
--- /dev/null
@@ -0,0 +1,56 @@
+
+/*
+ * urcu-pointer.c
+ *
+ * library wrappers to be used by non-LGPL compatible source code.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#include <urcu/uatomic.h>
+
+#include "urcu/static/urcu-pointer.h"
+/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#include "urcu-pointer.h"
+
+extern void synchronize_rcu(void);
+
+void *rcu_dereference_sym(void *p)
+{
+       return _rcu_dereference(p);
+}
+
+void *rcu_set_pointer_sym(void **p, void *v)
+{
+       cmm_wmb();
+       return uatomic_set(p, v);
+}
+
+void *rcu_xchg_pointer_sym(void **p, void *v)
+{
+       cmm_wmb();
+       return uatomic_xchg(p, v);
+}
+
+void *rcu_cmpxchg_pointer_sym(void **p, void *old, void *_new)
+{
+       cmm_wmb();
+       return uatomic_cmpxchg(p, old, _new);
+}
diff --git a/urcu-pointer.h b/urcu-pointer.h
new file mode 100644 (file)
index 0000000..027a18f
--- /dev/null
@@ -0,0 +1,118 @@
+#ifndef _URCU_POINTER_H
+#define _URCU_POINTER_H
+
+/*
+ * urcu-pointer.h
+ *
+ * Userspace RCU header. Operations on pointers.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/arch.h>
+#include <urcu/uatomic.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#ifdef _LGPL_SOURCE
+
+#include <urcu/static/urcu-pointer.h>
+
+/*
+ * rcu_dereference(ptr)
+ *
+ * Fetch a RCU-protected pointer. Typically used to copy the variable ptr to a
+ * local variable.
+ */
+#define rcu_dereference                _rcu_dereference
+
+/*
+ * rcu_cmpxchg_pointer(type **ptr, type *new, type *old)
+ * type *rcu_xchg_pointer(type **ptr, type *new)
+ * type *rcu_set_pointer(type **ptr, type *new)
+ *
+ * RCU pointer updates.
+ * @ptr: address of the pointer to modify
+ * @new: new pointer value
+ * @old: old pointer value (expected)
+ *
+ * return: old pointer value
+ */
+#define rcu_cmpxchg_pointer    _rcu_cmpxchg_pointer
+#define rcu_xchg_pointer       _rcu_xchg_pointer
+#define rcu_set_pointer                _rcu_set_pointer
+
+#else /* !_LGPL_SOURCE */
+
+extern void *rcu_dereference_sym(void *p);
+#define rcu_dereference(p)                                                  \
+       ({                                                                   \
+               typeof(p) _________p1 =                                      \
+                       rcu_dereference_sym((void *)(p));                    \
+               (_________p1);                                               \
+       })
+
+extern void *rcu_cmpxchg_pointer_sym(void **p, void *old, void *_new);
+#define rcu_cmpxchg_pointer(p, old, _new)                                   \
+       ({                                                                   \
+               typeof(*p) _________pold = (old);                            \
+               typeof(*p) _________pnew = (_new);                           \
+               typeof(*p) _________p1 =                                     \
+                       rcu_cmpxchg_pointer_sym((void **)(p), _________pold, \
+                                               _________pnew);              \
+               (_________p1);                                               \
+       })
+
+extern void *rcu_xchg_pointer_sym(void **p, void *v);
+#define rcu_xchg_pointer(p, v)                                              \
+       ({                                                                   \
+               typeof(*p) _________pv = (v);                                \
+               typeof(*p) _________p1 =                                     \
+                       rcu_xchg_pointer_sym((void **)(p), _________pv);     \
+               (_________p1);                                               \
+       })
+
+extern void *rcu_set_pointer_sym(void **p, void *v);
+#define rcu_set_pointer(p, v)                                               \
+       ({                                                                   \
+               typeof(*p) _________pv = (v);                                \
+               typeof(*p) _________p1 =                                     \
+                       rcu_set_pointer_sym((void **)(p), _________pv);      \
+       })
+
+#endif /* !_LGPL_SOURCE */
+
+/*
+ * rcu_assign_pointer(type *ptr, type *new)
+ *
+ * Same as rcu_set_pointer, but takes the pointer to assign to rather than its
+ * address as first parameter. Provided for compatibility with the Linux kernel
+ * RCU semantic.
+ */
+#define rcu_assign_pointer(p, v)       rcu_set_pointer((&p), (v))
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* _URCU_POINTER_H */
diff --git a/urcu-qsbr-static.h b/urcu-qsbr-static.h
deleted file mode 100644 (file)
index 87305cb..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-#ifndef _URCU_QSBR_STATIC_H
-#define _URCU_QSBR_STATIC_H
-
-/*
- * urcu-qsbr-static.h
- *
- * Userspace RCU QSBR header.
- *
- * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu-qsbr.h for linking
- * dynamically with the userspace rcu QSBR library.
- *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * IBM's contributions to this file may be relicensed under LGPLv2 or later.
- */
-
-#include <stdlib.h>
-#include <pthread.h>
-#include <assert.h>
-#include <limits.h>
-#include <syscall.h>
-#include <unistd.h>
-
-#include <compiler.h>
-#include <arch.h>
-
-/*
- * Identify a shared load. A smp_rmc() or smp_mc() should come before the load.
- */
-#define _LOAD_SHARED(p)               ACCESS_ONCE(p)
-
-/*
- * Load a data from shared memory, doing a cache flush if required.
- */
-#define LOAD_SHARED(p)                 \
-       ({                              \
-               smp_rmc();              \
-               _LOAD_SHARED(p);        \
-       })
-
-/*
- * Identify a shared store. A smp_wmc() or smp_mc() should follow the store.
- */
-#define _STORE_SHARED(x, v)    ({ ACCESS_ONCE(x) = (v); })
-
-/*
- * Store v into x, where x is located in shared memory. Performs the required
- * cache flush after writing. Returns v.
- */
-#define STORE_SHARED(x, v)             \
-       ({                              \
-               _STORE_SHARED(x, v);    \
-               smp_wmc();              \
-               (v);                    \
-       })
-
-/**
- * _rcu_dereference - reads (copy) a RCU-protected pointer to a local variable
- * into a RCU read-side critical section. The pointer can later be safely
- * dereferenced within the critical section.
- *
- * This ensures that the pointer copy is invariant thorough the whole critical
- * section.
- *
- * Inserts memory barriers on architectures that require them (currently only
- * Alpha) and documents which pointers are protected by RCU.
- *
- * Should match rcu_assign_pointer() or rcu_xchg_pointer().
- */
-
-#define _rcu_dereference(p)     ({                                     \
-                               typeof(p) _________p1 = LOAD_SHARED(p); \
-                               smp_read_barrier_depends();             \
-                               (_________p1);                          \
-                               })
-
-#define futex(...)             syscall(__NR_futex, __VA_ARGS__)
-#define FUTEX_WAIT             0
-#define FUTEX_WAKE             1
-
-/*
- * This code section can only be included in LGPL 2.1 compatible source code.
- * See below for the function call wrappers which can be used in code meant to
- * be only linked with the Userspace RCU library. This comes with a small
- * performance degradation on the read-side due to the added function calls.
- * This is required to permit relinking with newer versions of the library.
- */
-
-/*
- * If a reader is really non-cooperative and refuses to commit its
- * rcu_reader_qs_gp count to memory (there is no barrier in the reader
- * per-se), kick it after a few loops waiting for it.
- */
-#define KICK_READER_LOOPS 10000
-
-/*
- * Active attempts to check for reader Q.S. before calling futex().
- */
-#define RCU_QS_ACTIVE_ATTEMPTS 100
-
-#ifdef DEBUG_RCU
-#define rcu_assert(args...)    assert(args)
-#else
-#define rcu_assert(args...)
-#endif
-
-#ifdef DEBUG_YIELD
-#include <sched.h>
-#include <time.h>
-#include <pthread.h>
-#include <unistd.h>
-
-#define YIELD_READ     (1 << 0)
-#define YIELD_WRITE    (1 << 1)
-
-/* maximum sleep delay, in us */
-#define MAX_SLEEP 50
-
-extern unsigned int yield_active;
-extern unsigned int __thread rand_yield;
-
-static inline void debug_yield_read(void)
-{
-       if (yield_active & YIELD_READ)
-               if (rand_r(&rand_yield) & 0x1)
-                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
-}
-
-static inline void debug_yield_write(void)
-{
-       if (yield_active & YIELD_WRITE)
-               if (rand_r(&rand_yield) & 0x1)
-                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
-}
-
-static inline void debug_yield_init(void)
-{
-       rand_yield = time(NULL) ^ pthread_self();
-}
-#else
-static inline void debug_yield_read(void)
-{
-}
-
-static inline void debug_yield_write(void)
-{
-}
-
-static inline void debug_yield_init(void)
-{
-
-}
-#endif
-
-static inline void reader_barrier()
-{
-       smp_mb();
-}
-
-#define RCU_GP_ONLINE          (1UL << 0)
-#define RCU_GP_CTR             (1UL << 1)
-
-/*
- * Global quiescent period counter with low-order bits unused.
- * Using a int rather than a char to eliminate false register dependencies
- * causing stalls on some architectures.
- */
-extern unsigned long urcu_gp_ctr;
-
-extern unsigned long __thread rcu_reader_qs_gp;
-
-extern int gp_futex;
-
-/*
- * Wake-up waiting synchronize_rcu(). Called from many concurrent threads.
- */
-static inline void wake_up_gp(void)
-{
-       if (unlikely(atomic_read(&gp_futex) == -1)) {
-               atomic_set(&gp_futex, 0);
-               futex(&gp_futex, FUTEX_WAKE, 1,
-                     NULL, NULL, 0);
-       }
-}
-
-#if (BITS_PER_LONG < 64)
-static inline int rcu_gp_ongoing(unsigned long *value)
-{
-       unsigned long reader_gp;
-
-       if (value == NULL)
-               return 0;
-       reader_gp = LOAD_SHARED(*value);
-       return reader_gp && ((reader_gp ^ urcu_gp_ctr) & RCU_GP_CTR);
-}
-#else /* !(BITS_PER_LONG < 64) */
-static inline int rcu_gp_ongoing(unsigned long *value)
-{
-       unsigned long reader_gp;
-
-       if (value == NULL)
-               return 0;
-       reader_gp = LOAD_SHARED(*value);
-       return reader_gp && (reader_gp - urcu_gp_ctr > ULONG_MAX / 2);
-}
-#endif  /* !(BITS_PER_LONG < 64) */
-
-static inline void _rcu_read_lock(void)
-{
-       rcu_assert(rcu_reader_qs_gp);
-}
-
-static inline void _rcu_read_unlock(void)
-{
-}
-
-static inline void _rcu_quiescent_state(void)
-{
-       smp_mb();       
-       _STORE_SHARED(rcu_reader_qs_gp, _LOAD_SHARED(urcu_gp_ctr));
-       smp_mb();       /* write rcu_reader_qs_gp before read futex */
-       wake_up_gp();
-       smp_mb();
-}
-
-static inline void _rcu_thread_offline(void)
-{
-       smp_mb();
-       STORE_SHARED(rcu_reader_qs_gp, 0);
-       smp_mb();       /* write rcu_reader_qs_gp before read futex */
-       wake_up_gp();
-}
-
-static inline void _rcu_thread_online(void)
-{
-       _STORE_SHARED(rcu_reader_qs_gp, LOAD_SHARED(urcu_gp_ctr));
-       smp_mb();
-}
-
-/**
- * _rcu_assign_pointer - assign (publicize) a pointer to a new data structure
- * meant to be read by RCU read-side critical sections. Returns the assigned
- * value.
- *
- * Documents which pointers will be dereferenced by RCU read-side critical
- * sections and adds the required memory barriers on architectures requiring
- * them. It also makes sure the compiler does not reorder code initializing the
- * data structure before its publication.
- *
- * Should match rcu_dereference_pointer().
- */
-
-#define _rcu_assign_pointer(p, v)                      \
-       ({                                              \
-               if (!__builtin_constant_p(v) ||         \
-                   ((v) != NULL))                      \
-                       wmb();                          \
-               STORE_SHARED(p, v);                     \
-       })
-
-/**
- * _rcu_cmpxchg_pointer - same as rcu_assign_pointer, but tests if the pointer
- * is as expected by "old". If succeeds, returns the previous pointer to the
- * data structure, which can be safely freed after waiting for a quiescent state
- * using synchronize_rcu(). If fails (unexpected value), returns old (which
- * should not be freed !).
- */
-
-#define _rcu_cmpxchg_pointer(p, old, _new)             \
-       ({                                              \
-               if (!__builtin_constant_p(_new) ||      \
-                   ((_new) != NULL))                   \
-                       wmb();                          \
-               cmpxchg(p, old, _new);                  \
-       })
-
-/**
- * _rcu_xchg_pointer - same as rcu_assign_pointer, but returns the previous
- * pointer to the data structure, which can be safely freed after waiting for a
- * quiescent state using synchronize_rcu().
- */
-
-#define _rcu_xchg_pointer(p, v)                                \
-       ({                                              \
-               if (!__builtin_constant_p(v) ||         \
-                   ((v) != NULL))                      \
-                       wmb();                          \
-               xchg(p, v);                             \
-       })
-
-/*
- * Exchanges the pointer and waits for quiescent state.
- * The pointer returned can be freed.
- */
-#define _rcu_publish_content(p, v)                     \
-       ({                                              \
-               void *oldptr;                           \
-               oldptr = _rcu_xchg_pointer(p, v);       \
-               synchronize_rcu();                      \
-               oldptr;                                 \
-       })
-
-#endif /* _URCU_QSBR_STATIC_H */
index dac664935d7b898bd3dcce494845c7471c09749d..87cf41d7ee70f274dc6676af06e3c122dd986222 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Userspace RCU QSBR library
  *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
  *
  * This library is free software; you can redistribute it and/or
  * IBM's contributions to this file may be relicensed under LGPLv2 or later.
  */
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <pthread.h>
 #include <signal.h>
 #include <assert.h>
 #include <stdlib.h>
+#include <stdint.h>
 #include <string.h>
 #include <errno.h>
 #include <poll.h>
 
+#include "urcu/map/urcu-qsbr.h"
+
 #define BUILD_QSBR_LIB
-#include "urcu-qsbr-static.h"
+#include "urcu/static/urcu-qsbr.h"
 /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
 #include "urcu-qsbr.h"
 
-static pthread_mutex_t urcu_mutex = PTHREAD_MUTEX_INITIALIZER;
+void __attribute__((destructor)) rcu_exit(void);
+
+static pthread_mutex_t rcu_gp_lock = PTHREAD_MUTEX_INITIALIZER;
 
-int gp_futex;
+int32_t gp_futex;
 
 /*
  * Global grace period counter.
  */
-unsigned long urcu_gp_ctr = RCU_GP_ONLINE;
+unsigned long rcu_gp_ctr = RCU_GP_ONLINE;
 
 /*
  * Written to only by each individual reader. Read by both the reader and the
  * writers.
  */
-unsigned long __thread rcu_reader_qs_gp;
-
-/* Thread IDs of registered readers */
-#define INIT_NUM_THREADS 4
-
-struct reader_registry {
-       pthread_t tid;
-       unsigned long *rcu_reader_qs_gp;
-};
+struct rcu_reader __thread rcu_reader;
 
 #ifdef DEBUG_YIELD
 unsigned int yield_active;
 unsigned int __thread rand_yield;
 #endif
 
-static struct reader_registry *registry;
-static int num_readers, alloc_readers;
+static CDS_LIST_HEAD(registry);
 
-static void internal_urcu_lock(void)
+static void mutex_lock(pthread_mutex_t *mutex)
 {
        int ret;
 
 #ifndef DISTRUST_SIGNALS_EXTREME
-       ret = pthread_mutex_lock(&urcu_mutex);
+       ret = pthread_mutex_lock(mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
                exit(-1);
        }
 #else /* #ifndef DISTRUST_SIGNALS_EXTREME */
-       while ((ret = pthread_mutex_trylock(&urcu_mutex)) != 0) {
+       while ((ret = pthread_mutex_trylock(mutex)) != 0) {
                if (ret != EBUSY && ret != EINTR) {
                        printf("ret = %d, errno = %d\n", ret, errno);
                        perror("Error in pthread mutex lock");
@@ -90,11 +87,11 @@ static void internal_urcu_lock(void)
 #endif /* #else #ifndef DISTRUST_SIGNALS_EXTREME */
 }
 
-static void internal_urcu_unlock(void)
+static void mutex_unlock(pthread_mutex_t *mutex)
 {
        int ret;
 
-       ret = pthread_mutex_unlock(&urcu_mutex);
+       ret = pthread_mutex_unlock(mutex);
        if (ret) {
                perror("Error in pthread mutex unlock");
                exit(-1);
@@ -104,48 +101,82 @@ static void internal_urcu_unlock(void)
 /*
  * synchronize_rcu() waiting. Single thread.
  */
-static void wait_gp(struct reader_registry *index)
+static void wait_gp(void)
 {
-       atomic_dec(&gp_futex);
-       smp_mb(); /* Write futex before read reader_gp */
-       if (!rcu_gp_ongoing(index->rcu_reader_qs_gp)) {
-               /* Read reader_gp before write futex */
-               smp_mb();
-               /* Callbacks are queued, don't wait. */
-               atomic_set(&gp_futex, 0);
-       } else {
-               /* Read reader_gp before read futex */
-               smp_rmb();
-               if (atomic_read(&gp_futex) == -1)
-                       futex(&gp_futex, FUTEX_WAIT, -1,
-                             NULL, NULL, 0);
-       }
+       /* Read reader_gp before read futex */
+       cmm_smp_rmb();
+       if (uatomic_read(&gp_futex) == -1)
+               futex_noasync(&gp_futex, FUTEX_WAIT, -1,
+                     NULL, NULL, 0);
 }
 
-static void wait_for_quiescent_state(void)
+static void update_counter_and_wait(void)
 {
-       struct reader_registry *index;
+       CDS_LIST_HEAD(qsreaders);
+       int wait_loops = 0;
+       struct rcu_reader *index, *tmp;
+
+#if (CAA_BITS_PER_LONG < 64)
+       /* Switch parity: 0 -> 1, 1 -> 0 */
+       CMM_STORE_SHARED(rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR);
+#else  /* !(CAA_BITS_PER_LONG < 64) */
+       /* Increment current G.P. */
+       CMM_STORE_SHARED(rcu_gp_ctr, rcu_gp_ctr + RCU_GP_CTR);
+#endif /* !(CAA_BITS_PER_LONG < 64) */
+
+       /*
+        * Must commit rcu_gp_ctr update to memory before waiting for
+        * quiescent state. Failure to do so could result in the writer
+        * waiting forever while new readers are always accessing data
+        * (no progress). Enforce compiler-order of store to rcu_gp_ctr
+        * before load rcu_reader ctr.
+        */
+       cmm_barrier();
+
+       /*
+        * Adding a cmm_smp_mb() which is _not_ formally required, but makes the
+        * model easier to understand. It does not have a big performance impact
+        * anyway, given this is the write-side.
+        */
+       cmm_smp_mb();
 
-       if (!registry)
-               return;
        /*
         * Wait for each thread rcu_reader_qs_gp count to become 0.
         */
-       for (index = registry; index < registry + num_readers; index++) {
-               int wait_loops = 0;
+       for (;;) {
+               wait_loops++;
+               if (wait_loops == RCU_QS_ACTIVE_ATTEMPTS) {
+                       uatomic_dec(&gp_futex);
+                       /* Write futex before read reader_gp */
+                       cmm_smp_mb();
+               }
 
-               while (rcu_gp_ongoing(index->rcu_reader_qs_gp)) {
-                       if (wait_loops++ == RCU_QS_ACTIVE_ATTEMPTS) {
-                               wait_gp(index);
+               cds_list_for_each_entry_safe(index, tmp, &registry, node) {
+                       if (!rcu_gp_ongoing(&index->ctr))
+                               cds_list_move(&index->node, &qsreaders);
+               }
+
+               if (cds_list_empty(&registry)) {
+                       if (wait_loops == RCU_QS_ACTIVE_ATTEMPTS) {
+                               /* Read reader_gp before write futex */
+                               cmm_smp_mb();
+                               uatomic_set(&gp_futex, 0);
+                       }
+                       break;
+               } else {
+                       if (wait_loops == RCU_QS_ACTIVE_ATTEMPTS) {
+                               wait_gp();
                        } else {
 #ifndef HAS_INCOHERENT_CACHES
-                               cpu_relax();
+                               caa_cpu_relax();
 #else /* #ifndef HAS_INCOHERENT_CACHES */
-                               smp_mb();
+                               cmm_smp_mb();
 #endif /* #else #ifndef HAS_INCOHERENT_CACHES */
                        }
                }
        }
+       /* put back the reader list in the registry */
+       cds_list_splice(&qsreaders, &registry);
 }
 
 /*
@@ -153,111 +184,99 @@ static void wait_for_quiescent_state(void)
  * long-size to ensure we do not encounter an overflow bug.
  */
 
-#if (BITS_PER_LONG < 64)
-/*
- * called with urcu_mutex held.
- */
-static void switch_next_urcu_qparity(void)
-{
-       STORE_SHARED(urcu_gp_ctr, urcu_gp_ctr ^ RCU_GP_CTR);
-}
-
+#if (CAA_BITS_PER_LONG < 64)
 void synchronize_rcu(void)
 {
        unsigned long was_online;
 
-       was_online = rcu_reader_qs_gp;
+       was_online = rcu_reader.ctr;
 
        /* All threads should read qparity before accessing data structure
         * where new ptr points to.
         */
        /* Write new ptr before changing the qparity */
-       smp_mb();
+       cmm_smp_mb();
 
        /*
         * Mark the writer thread offline to make sure we don't wait for
-        * our own quiescent state. This allows using synchronize_rcu() in
-        * threads registered as readers.
+        * our own quiescent state. This allows using synchronize_rcu()
+        * in threads registered as readers.
         */
        if (was_online)
-               STORE_SHARED(rcu_reader_qs_gp, 0);
-
-       internal_urcu_lock();
+               CMM_STORE_SHARED(rcu_reader.ctr, 0);
 
-       switch_next_urcu_qparity();     /* 0 -> 1 */
+       mutex_lock(&rcu_gp_lock);
 
-       /*
-        * Must commit qparity update to memory before waiting for parity
-        * 0 quiescent state. Failure to do so could result in the writer
-        * waiting forever while new readers are always accessing data (no
-        * progress).
-        * Ensured by STORE_SHARED and LOAD_SHARED.
-        */
+       if (cds_list_empty(&registry))
+               goto out;
 
        /*
         * Wait for previous parity to be empty of readers.
         */
-       wait_for_quiescent_state();     /* Wait readers in parity 0 */
+       update_counter_and_wait();      /* 0 -> 1, wait readers in parity 0 */
 
        /*
         * Must finish waiting for quiescent state for parity 0 before
-        * committing qparity update to memory. Failure to do so could result in
-        * the writer waiting forever while new readers are always accessing
-        * data (no progress).
-        * Ensured by STORE_SHARED and LOAD_SHARED.
+        * committing next rcu_gp_ctr update to memory. Failure to
+        * do so could result in the writer waiting forever while new
+        * readers are always accessing data (no progress).  Enforce
+        * compiler-order of load rcu_reader ctr before store to
+        * rcu_gp_ctr.
         */
-
-       switch_next_urcu_qparity();     /* 1 -> 0 */
+       cmm_barrier();
 
        /*
-        * Must commit qparity update to memory before waiting for parity
-        * 1 quiescent state. Failure to do so could result in the writer
-        * waiting forever while new readers are always accessing data (no
-        * progress).
-        * Ensured by STORE_SHARED and LOAD_SHARED.
+        * Adding a cmm_smp_mb() which is _not_ formally required, but makes the
+        * model easier to understand. It does not have a big performance impact
+        * anyway, given this is the write-side.
         */
+       cmm_smp_mb();
 
        /*
         * Wait for previous parity to be empty of readers.
         */
-       wait_for_quiescent_state();     /* Wait readers in parity 1 */
-
-       internal_urcu_unlock();
+       update_counter_and_wait();      /* 1 -> 0, wait readers in parity 1 */
+out:
+       mutex_unlock(&rcu_gp_lock);
 
        /*
         * Finish waiting for reader threads before letting the old ptr being
         * freed.
         */
        if (was_online)
-               _STORE_SHARED(rcu_reader_qs_gp, LOAD_SHARED(urcu_gp_ctr));
-       smp_mb();
+               _CMM_STORE_SHARED(rcu_reader.ctr,
+                                 CMM_LOAD_SHARED(rcu_gp_ctr));
+       cmm_smp_mb();
 }
-#else /* !(BITS_PER_LONG < 64) */
+#else /* !(CAA_BITS_PER_LONG < 64) */
 void synchronize_rcu(void)
 {
        unsigned long was_online;
 
-       was_online = rcu_reader_qs_gp;
+       was_online = rcu_reader.ctr;
 
        /*
         * Mark the writer thread offline to make sure we don't wait for
-        * our own quiescent state. This allows using synchronize_rcu() in
-        * threads registered as readers.
+        * our own quiescent state. This allows using synchronize_rcu()
+        * in threads registered as readers.
         */
-       smp_mb();
+       cmm_smp_mb();
        if (was_online)
-               STORE_SHARED(rcu_reader_qs_gp, 0);
+               CMM_STORE_SHARED(rcu_reader.ctr, 0);
 
-       internal_urcu_lock();
-       STORE_SHARED(urcu_gp_ctr, urcu_gp_ctr + RCU_GP_CTR);
-       wait_for_quiescent_state();
-       internal_urcu_unlock();
+       mutex_lock(&rcu_gp_lock);
+       if (cds_list_empty(&registry))
+               goto out;
+       update_counter_and_wait();
+out:
+       mutex_unlock(&rcu_gp_lock);
 
        if (was_online)
-               _STORE_SHARED(rcu_reader_qs_gp, LOAD_SHARED(urcu_gp_ctr));
-       smp_mb();
+               _CMM_STORE_SHARED(rcu_reader.ctr,
+                                 CMM_LOAD_SHARED(rcu_gp_ctr));
+       cmm_smp_mb();
 }
-#endif  /* !(BITS_PER_LONG < 64) */
+#endif  /* !(CAA_BITS_PER_LONG < 64) */
 
 /*
  * library wrappers to be used by non-LGPL compatible source code.
@@ -273,38 +292,6 @@ void rcu_read_unlock(void)
        _rcu_read_unlock();
 }
 
-void *rcu_dereference(void *p)
-{
-       return _rcu_dereference(p);
-}
-
-void *rcu_assign_pointer_sym(void **p, void *v)
-{
-       wmb();
-       return STORE_SHARED(p, v);
-}
-
-void *rcu_cmpxchg_pointer_sym(void **p, void *old, void *_new)
-{
-       wmb();
-       return cmpxchg(p, old, _new);
-}
-
-void *rcu_xchg_pointer_sym(void **p, void *v)
-{
-       wmb();
-       return xchg(p, v);
-}
-
-void *rcu_publish_content_sym(void **p, void *v)
-{
-       void *oldptr;
-
-       oldptr = _rcu_xchg_pointer(p, v);
-       synchronize_rcu();
-       return oldptr;
-}
-
 void rcu_quiescent_state(void)
 {
        _rcu_quiescent_state();
@@ -320,59 +307,14 @@ void rcu_thread_online(void)
        _rcu_thread_online();
 }
 
-static void rcu_add_reader(pthread_t id)
-{
-       struct reader_registry *oldarray;
-
-       if (!registry) {
-               alloc_readers = INIT_NUM_THREADS;
-               num_readers = 0;
-               registry =
-                       malloc(sizeof(struct reader_registry) * alloc_readers);
-       }
-       if (alloc_readers < num_readers + 1) {
-               oldarray = registry;
-               registry = malloc(sizeof(struct reader_registry)
-                               * (alloc_readers << 1));
-               memcpy(registry, oldarray,
-                       sizeof(struct reader_registry) * alloc_readers);
-               alloc_readers <<= 1;
-               free(oldarray);
-       }
-       registry[num_readers].tid = id;
-       /* reference to the TLS of _this_ reader thread. */
-       registry[num_readers].rcu_reader_qs_gp = &rcu_reader_qs_gp;
-       num_readers++;
-}
-
-/*
- * Never shrink (implementation limitation).
- * This is O(nb threads). Eventually use a hash table.
- */
-static void rcu_remove_reader(pthread_t id)
-{
-       struct reader_registry *index;
-
-       assert(registry != NULL);
-       for (index = registry; index < registry + num_readers; index++) {
-               if (pthread_equal(index->tid, id)) {
-                       memcpy(index, &registry[num_readers - 1],
-                               sizeof(struct reader_registry));
-                       registry[num_readers - 1].tid = 0;
-                       registry[num_readers - 1].rcu_reader_qs_gp = NULL;
-                       num_readers--;
-                       return;
-               }
-       }
-       /* Hrm not found, forgot to register ? */
-       assert(0);
-}
-
 void rcu_register_thread(void)
 {
-       internal_urcu_lock();
-       rcu_add_reader(pthread_self());
-       internal_urcu_unlock();
+       rcu_reader.tid = pthread_self();
+       assert(rcu_reader.ctr == 0);
+
+       mutex_lock(&rcu_gp_lock);
+       cds_list_add(&rcu_reader.node, &registry);
+       mutex_unlock(&rcu_gp_lock);
        _rcu_thread_online();
 }
 
@@ -383,7 +325,15 @@ void rcu_unregister_thread(void)
         * with a waiting writer.
         */
        _rcu_thread_offline();
-       internal_urcu_lock();
-       rcu_remove_reader(pthread_self());
-       internal_urcu_unlock();
+       mutex_lock(&rcu_gp_lock);
+       cds_list_del(&rcu_reader.node);
+       mutex_unlock(&rcu_gp_lock);
 }
+
+void rcu_exit(void)
+{
+       assert(cds_list_empty(&registry));
+}
+
+#include "urcu-call-rcu-impl.h"
+#include "urcu-defer-impl.h"
index fdf47124d85f2b170f78410a996f5c3f40e4f8cc..b362304578a50a93f407d2a6cf97dc143340de30 100644 (file)
 #include <stdlib.h>
 #include <pthread.h>
 
+/*
+ * See urcu-pointer.h and urcu/static/urcu-pointer.h for pointer
+ * publication headers.
+ */
+#include <urcu-pointer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#include <urcu/map/urcu-qsbr.h>
+
 /*
  * Important !
  *
 
 #ifdef _LGPL_SOURCE
 
-#include <urcu-qsbr-static.h>
+#include <urcu/static/urcu-qsbr.h>
 
 /*
  * Mappings for static use of the userspace RCU library.
  * Should only be used in LGPL-compatible code.
  */
 
-#define rcu_dereference                _rcu_dereference
-#define rcu_read_lock          _rcu_read_lock
-#define rcu_read_unlock                _rcu_read_unlock
-
-#define rcu_quiescent_state    _rcu_quiescent_state
-#define rcu_thread_offline     _rcu_thread_offline
-#define rcu_thread_online      _rcu_thread_online
+/*
+ * rcu_read_lock()
+ * rcu_read_unlock()
+ *
+ * Mark the beginning and end of a read-side critical section.
+ * DON'T FORGET TO USE rcu_register_thread/rcu_unregister_thread()
+ * FOR EACH THREAD WITH READ-SIDE CRITICAL SECTION.
+ */
+#define rcu_read_lock_qsbr             _rcu_read_lock
+#define rcu_read_unlock_qsbr           _rcu_read_unlock
 
-#define rcu_assign_pointer     _rcu_assign_pointer
-#define rcu_cmpxchg_pointer    _rcu_cmpxchg_pointer
-#define rcu_xchg_pointer       _rcu_xchg_pointer
-#define rcu_publish_content    _rcu_publish_content
+#define rcu_quiescent_state_qsbr       _rcu_quiescent_state
+#define rcu_thread_offline_qsbr                _rcu_thread_offline
+#define rcu_thread_online_qsbr         _rcu_thread_online
 
 #else /* !_LGPL_SOURCE */
 
  * QSBR read lock/unlock are guaranteed to be no-ops. Therefore, we expose them
  * in the LGPL header for any code to use. However, the debug version is not
  * nops and may contain sanity checks. To activate it, applications must be
- * recompiled with -DURCU_DEBUG (even non-LGPL/GPL applications). This is the
+ * recompiled with -DRCU_DEBUG (even non-LGPL/GPL applications). This is the
  * best trade-off between license/performance/code triviality and
  * library debugging & tracing features we could come up with.
  */
 
-#if (!defined(BUILD_QSBR_LIB) && defined(URCU_DEBUG))
+#if (!defined(BUILD_QSBR_LIB) && defined(RCU_DEBUG))
 
 static inline void rcu_read_lock(void)
 {
 }
 
-static inline void rcu_read_lock(void)
+static inline void rcu_read_unlock(void)
 {
 }
 
-#else /* !URCU_DEBUG */
+#else /* !RCU_DEBUG */
 
 extern void rcu_read_lock(void);
 extern void rcu_read_unlock(void);
 
-#endif /* !URCU_DEBUG */
-
-extern void *rcu_dereference(void *p);
+#endif /* !RCU_DEBUG */
 
 extern void rcu_quiescent_state(void);
 extern void rcu_thread_offline(void);
 extern void rcu_thread_online(void);
 
-extern void *rcu_assign_pointer_sym(void **p, void *v);
-
-#define rcu_assign_pointer(p, v)                       \
-       rcu_assign_pointer_sym((void **)(p), (v))
-
-extern void *rcu_cmpxchg_pointer_sym(void **p, void *old, void *_new);
-#define rcu_cmpxchg_pointer(p, old, _new)              \
-       rcu_cmpxchg_pointer_sym((void **)(p), (old), (_new))
-
-extern void *rcu_xchg_pointer_sym(void **p, void *v);
-#define rcu_xchg_pointer(p, v)                         \
-       rcu_xchg_pointer_sym((void **)(p), (v))
-
-extern void *rcu_publish_content_sym(void **p, void *v);
-#define rcu_publish_content(p, v)                      \
-       rcu_publish_content_sym((void **)(p), (v))
-
 #endif /* !_LGPL_SOURCE */
 
 extern void synchronize_rcu(void);
@@ -126,4 +121,11 @@ extern void synchronize_rcu(void);
 extern void rcu_register_thread(void);
 extern void rcu_unregister_thread(void);
 
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu-call-rcu.h>
+#include <urcu-defer.h>
+
 #endif /* _URCU_QSBR_H */
diff --git a/urcu-static.h b/urcu-static.h
deleted file mode 100644 (file)
index 3caa0f9..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-#ifndef _URCU_STATIC_H
-#define _URCU_STATIC_H
-
-/*
- * urcu-static.h
- *
- * Userspace RCU header.
- *
- * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu.h for linking
- * dynamically with the userspace rcu library.
- *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
- * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * IBM's contributions to this file may be relicensed under LGPLv2 or later.
- */
-
-#include <stdlib.h>
-#include <pthread.h>
-#include <syscall.h>
-#include <unistd.h>
-
-#include <compiler.h>
-#include <arch.h>
-
-/*
- * Identify a shared load. A smp_rmc() or smp_mc() should come before the load.
- */
-#define _LOAD_SHARED(p)               ACCESS_ONCE(p)
-
-/*
- * Load a data from shared memory, doing a cache flush if required.
- */
-#define LOAD_SHARED(p)                 \
-       ({                              \
-               smp_rmc();              \
-               _LOAD_SHARED(p);        \
-       })
-
-/*
- * Identify a shared store. A smp_wmc() or smp_mc() should follow the store.
- */
-#define _STORE_SHARED(x, v)    ({ ACCESS_ONCE(x) = (v); })
-
-/*
- * Store v into x, where x is located in shared memory. Performs the required
- * cache flush after writing. Returns v.
- */
-#define STORE_SHARED(x, v)             \
-       ({                              \
-               _STORE_SHARED(x, v);    \
-               smp_wmc();              \
-               (v);                    \
-       })
-
-/**
- * _rcu_dereference - reads (copy) a RCU-protected pointer to a local variable
- * into a RCU read-side critical section. The pointer can later be safely
- * dereferenced within the critical section.
- *
- * This ensures that the pointer copy is invariant thorough the whole critical
- * section.
- *
- * Inserts memory barriers on architectures that require them (currently only
- * Alpha) and documents which pointers are protected by RCU.
- *
- * The compiler memory barrier in LOAD_SHARED() ensures that value-speculative
- * optimizations (e.g. VSS: Value Speculation Scheduling) does not perform the
- * data read before the pointer read by speculating the value of the pointer.
- * Correct ordering is ensured because the pointer is read as a volatile access.
- * This acts as a global side-effect operation, which forbids reordering of
- * dependent memory operations. Note that such concern about dependency-breaking
- * optimizations will eventually be taken care of by the "memory_order_consume"
- * addition to forthcoming C++ standard.
- *
- * Should match rcu_assign_pointer() or rcu_xchg_pointer().
- */
-
-#define _rcu_dereference(p)     ({                                     \
-                               typeof(p) _________p1 = LOAD_SHARED(p); \
-                               smp_read_barrier_depends();             \
-                               (_________p1);                          \
-                               })
-
-#define futex(...)             syscall(__NR_futex, __VA_ARGS__)
-#define FUTEX_WAIT             0
-#define FUTEX_WAKE             1
-
-/*
- * This code section can only be included in LGPL 2.1 compatible source code.
- * See below for the function call wrappers which can be used in code meant to
- * be only linked with the Userspace RCU library. This comes with a small
- * performance degradation on the read-side due to the added function calls.
- * This is required to permit relinking with newer versions of the library.
- */
-
-/*
- * The signal number used by the RCU library can be overridden with
- * -DSIGURCU= when compiling the library.
- */
-#ifndef SIGURCU
-#define SIGURCU SIGUSR1
-#endif
-
-/*
- * If a reader is really non-cooperative and refuses to commit its
- * urcu_active_readers count to memory (there is no barrier in the reader
- * per-se), kick it after a few loops waiting for it.
- */
-#define KICK_READER_LOOPS 10000
-
-/*
- * Active attempts to check for reader Q.S. before calling futex().
- */
-#define RCU_QS_ACTIVE_ATTEMPTS 100
-
-#ifdef DEBUG_RCU
-#define rcu_assert(args...)    assert(args)
-#else
-#define rcu_assert(args...)
-#endif
-
-#ifdef DEBUG_YIELD
-#include <sched.h>
-#include <time.h>
-#include <pthread.h>
-#include <unistd.h>
-
-#define YIELD_READ     (1 << 0)
-#define YIELD_WRITE    (1 << 1)
-
-/*
- * Updates without URCU_MB are much slower. Account this in
- * the delay.
- */
-#ifdef URCU_MB
-/* maximum sleep delay, in us */
-#define MAX_SLEEP 50
-#else
-#define MAX_SLEEP 30000
-#endif
-
-extern unsigned int yield_active;
-extern unsigned int __thread rand_yield;
-
-static inline void debug_yield_read(void)
-{
-       if (yield_active & YIELD_READ)
-               if (rand_r(&rand_yield) & 0x1)
-                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
-}
-
-static inline void debug_yield_write(void)
-{
-       if (yield_active & YIELD_WRITE)
-               if (rand_r(&rand_yield) & 0x1)
-                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
-}
-
-static inline void debug_yield_init(void)
-{
-       rand_yield = time(NULL) ^ pthread_self();
-}
-#else
-static inline void debug_yield_read(void)
-{
-}
-
-static inline void debug_yield_write(void)
-{
-}
-
-static inline void debug_yield_init(void)
-{
-
-}
-#endif
-
-#ifdef URCU_MB
-static inline void reader_barrier()
-{
-       smp_mb();
-}
-#else
-static inline void reader_barrier()
-{
-       barrier();
-}
-#endif
-
-/*
- * The trick here is that RCU_GP_CTR_BIT must be a multiple of 8 so we can use a
- * full 8-bits, 16-bits or 32-bits bitmask for the lower order bits.
- */
-#define RCU_GP_COUNT           (1UL << 0)
-/* Use the amount of bits equal to half of the architecture long size */
-#define RCU_GP_CTR_BIT         (1UL << (sizeof(long) << 2))
-#define RCU_GP_CTR_NEST_MASK   (RCU_GP_CTR_BIT - 1)
-
-/*
- * Global quiescent period counter with low-order bits unused.
- * Using a int rather than a char to eliminate false register dependencies
- * causing stalls on some architectures.
- */
-extern long urcu_gp_ctr;
-
-extern long __thread urcu_active_readers;
-
-extern int gp_futex;
-
-/*
- * Wake-up waiting synchronize_rcu(). Called from many concurrent threads.
- */
-static inline void wake_up_gp(void)
-{
-       if (unlikely(atomic_read(&gp_futex) == -1)) {
-               atomic_set(&gp_futex, 0);
-               futex(&gp_futex, FUTEX_WAKE, 1,
-                     NULL, NULL, 0);
-       }
-}
-
-static inline int rcu_old_gp_ongoing(long *value)
-{
-       long v;
-
-       if (value == NULL)
-               return 0;
-       /*
-        * Make sure both tests below are done on the same version of *value
-        * to insure consistency.
-        */
-       v = LOAD_SHARED(*value);
-       return (v & RCU_GP_CTR_NEST_MASK) &&
-                ((v ^ urcu_gp_ctr) & RCU_GP_CTR_BIT);
-}
-
-static inline void _rcu_read_lock(void)
-{
-       long tmp;
-
-       tmp = urcu_active_readers;
-       /* urcu_gp_ctr = RCU_GP_COUNT | (~RCU_GP_CTR_BIT or RCU_GP_CTR_BIT) */
-       if (likely(!(tmp & RCU_GP_CTR_NEST_MASK))) {
-               _STORE_SHARED(urcu_active_readers, _LOAD_SHARED(urcu_gp_ctr));
-               /*
-                * Set active readers count for outermost nesting level before
-                * accessing the pointer. See force_mb_all_threads().
-                */
-               reader_barrier();
-       } else {
-               _STORE_SHARED(urcu_active_readers, tmp + RCU_GP_COUNT);
-       }
-}
-
-static inline void _rcu_read_unlock(void)
-{
-       long tmp;
-
-       tmp = urcu_active_readers;
-       /*
-        * Finish using rcu before decrementing the pointer.
-        * See force_mb_all_threads().
-        */
-       if (likely((tmp & RCU_GP_CTR_NEST_MASK) == RCU_GP_COUNT)) {
-               reader_barrier();
-               _STORE_SHARED(urcu_active_readers,
-                             urcu_active_readers - RCU_GP_COUNT);
-               /* write urcu_active_readers before read futex */
-               reader_barrier();
-               wake_up_gp();
-       } else {
-               _STORE_SHARED(urcu_active_readers,
-                             urcu_active_readers - RCU_GP_COUNT);
-       }
-}
-
-/**
- * _rcu_assign_pointer - assign (publicize) a pointer to a new data structure
- * meant to be read by RCU read-side critical sections. Returns the assigned
- * value.
- *
- * Documents which pointers will be dereferenced by RCU read-side critical
- * sections and adds the required memory barriers on architectures requiring
- * them. It also makes sure the compiler does not reorder code initializing the
- * data structure before its publication.
- *
- * Should match rcu_dereference_pointer().
- */
-
-#define _rcu_assign_pointer(p, v)                      \
-       ({                                              \
-               if (!__builtin_constant_p(v) ||         \
-                   ((v) != NULL))                      \
-                       wmb();                          \
-               STORE_SHARED(p, v);                     \
-       })
-
-/**
- * _rcu_cmpxchg_pointer - same as rcu_assign_pointer, but tests if the pointer
- * is as expected by "old". If succeeds, returns the previous pointer to the
- * data structure, which can be safely freed after waiting for a quiescent state
- * using synchronize_rcu(). If fails (unexpected value), returns old (which
- * should not be freed !).
- */
-
-#define _rcu_cmpxchg_pointer(p, old, _new)             \
-       ({                                              \
-               if (!__builtin_constant_p(_new) ||      \
-                   ((_new) != NULL))                   \
-                       wmb();                          \
-               cmpxchg(p, old, _new);                  \
-       })
-
-/**
- * _rcu_xchg_pointer - same as rcu_assign_pointer, but returns the previous
- * pointer to the data structure, which can be safely freed after waiting for a
- * quiescent state using synchronize_rcu().
- */
-
-#define _rcu_xchg_pointer(p, v)                                \
-       ({                                              \
-               if (!__builtin_constant_p(v) ||         \
-                   ((v) != NULL))                      \
-                       wmb();                          \
-               xchg(p, v);                             \
-       })
-
-/*
- * Exchanges the pointer and waits for quiescent state.
- * The pointer returned can be freed.
- */
-#define _rcu_publish_content(p, v)                     \
-       ({                                              \
-               void *oldptr;                           \
-               oldptr = _rcu_xchg_pointer(p, v);       \
-               synchronize_rcu();                      \
-               oldptr;                                 \
-       })
-
-#endif /* _URCU_STATIC_H */
diff --git a/urcu.c b/urcu.c
index 07661a3cb448b34505f24a8552a421741bb282bd..2339bc63c872c6a4826d7a52e8d064d85130c0df 100644 (file)
--- a/urcu.c
+++ b/urcu.c
@@ -3,7 +3,7 @@
  *
  * Userspace RCU library
  *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
  *
  * This library is free software; you can redistribute it and/or
  * IBM's contributions to this file may be relicensed under LGPLv2 or later.
  */
 
+#define _BSD_SOURCE
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <pthread.h>
 #include <signal.h>
 #include <assert.h>
 #include <stdlib.h>
+#include <stdint.h>
 #include <string.h>
 #include <errno.h>
 #include <poll.h>
 
-#include "urcu-static.h"
+#include "urcu/map/urcu.h"
+
+#include "urcu/static/urcu.h"
 /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
 #include "urcu.h"
 
-#ifndef URCU_MB
+#ifdef RCU_MEMBARRIER
 static int init_done;
+int has_sys_membarrier;
+
+void __attribute__((constructor)) rcu_init(void);
+#endif
 
-void __attribute__((constructor)) urcu_init(void);
-void __attribute__((destructor)) urcu_exit(void);
-#else
-void urcu_init(void)
+#ifdef RCU_MB
+void rcu_init(void)
 {
 }
 #endif
 
-static pthread_mutex_t urcu_mutex = PTHREAD_MUTEX_INITIALIZER;
+#ifdef RCU_SIGNAL
+static int init_done;
+
+void __attribute__((constructor)) rcu_init(void);
+void __attribute__((destructor)) rcu_exit(void);
+#endif
+
+static pthread_mutex_t rcu_gp_lock = PTHREAD_MUTEX_INITIALIZER;
 
-int gp_futex;
+int32_t gp_futex;
 
 /*
  * Global grace period counter.
- * Contains the current RCU_GP_CTR_BIT.
+ * Contains the current RCU_GP_CTR_PHASE.
  * Also has a RCU_GP_COUNT of 1, to accelerate the reader fast path.
  * Written to only by writer with mutex taken. Read by both writer and readers.
  */
-long urcu_gp_ctr = RCU_GP_COUNT;
+unsigned long rcu_gp_ctr = RCU_GP_COUNT;
 
 /*
  * Written to only by each individual reader. Read by both the reader and the
  * writers.
  */
-long __thread urcu_active_readers;
-
-/* Thread IDs of registered readers */
-#define INIT_NUM_THREADS 4
-
-struct reader_registry {
-       pthread_t tid;
-       long *urcu_active_readers;
-       char *need_mb;
-};
+struct rcu_reader __thread rcu_reader;
 
 #ifdef DEBUG_YIELD
 unsigned int yield_active;
 unsigned int __thread rand_yield;
 #endif
 
-static struct reader_registry *registry;
-static char __thread need_mb;
-static int num_readers, alloc_readers;
+static CDS_LIST_HEAD(registry);
 
-static void internal_urcu_lock(void)
+static void mutex_lock(pthread_mutex_t *mutex)
 {
        int ret;
 
 #ifndef DISTRUST_SIGNALS_EXTREME
-       ret = pthread_mutex_lock(&urcu_mutex);
+       ret = pthread_mutex_lock(mutex);
        if (ret) {
                perror("Error in pthread mutex lock");
                exit(-1);
        }
 #else /* #ifndef DISTRUST_SIGNALS_EXTREME */
-       while ((ret = pthread_mutex_trylock(&urcu_mutex)) != 0) {
+       while ((ret = pthread_mutex_trylock(mutex)) != 0) {
                if (ret != EBUSY && ret != EINTR) {
                        printf("ret = %d, errno = %d\n", ret, errno);
                        perror("Error in pthread mutex lock");
                        exit(-1);
                }
-               if (need_mb) {
-                       smp_mb();
-                       need_mb = 0;
-                       smp_mb();
+               if (CMM_LOAD_SHARED(rcu_reader.need_mb)) {
+                       cmm_smp_mb();
+                       _CMM_STORE_SHARED(rcu_reader.need_mb, 0);
+                       cmm_smp_mb();
                }
                poll(NULL,0,10);
        }
 #endif /* #else #ifndef DISTRUST_SIGNALS_EXTREME */
 }
 
-static void internal_urcu_unlock(void)
+static void mutex_unlock(pthread_mutex_t *mutex)
 {
        int ret;
 
-       ret = pthread_mutex_unlock(&urcu_mutex);
+       ret = pthread_mutex_unlock(mutex);
        if (ret) {
                perror("Error in pthread mutex unlock");
                exit(-1);
        }
 }
 
-/*
- * called with urcu_mutex held.
- */
-static void switch_next_urcu_qparity(void)
+#ifdef RCU_MEMBARRIER
+static void smp_mb_master(int group)
 {
-       STORE_SHARED(urcu_gp_ctr, urcu_gp_ctr ^ RCU_GP_CTR_BIT);
+       if (likely(has_sys_membarrier))
+               membarrier(MEMBARRIER_EXPEDITED);
+       else
+               cmm_smp_mb();
 }
+#endif
 
-#ifdef URCU_MB
-static void force_mb_single_thread(struct reader_registry *index)
+#ifdef RCU_MB
+static void smp_mb_master(int group)
 {
-       smp_mb();
+       cmm_smp_mb();
 }
+#endif
 
-static void force_mb_all_threads(void)
+#ifdef RCU_SIGNAL
+static void force_mb_all_readers(void)
 {
-       smp_mb();
-}
-#else /* #ifdef URCU_MB */
-static void force_mb_single_thread(struct reader_registry *index)
-{
-       assert(registry);
-       /*
-        * pthread_kill has a smp_mb(). But beware, we assume it performs
-        * a cache flush on architectures with non-coherent cache. Let's play
-        * safe and don't assume anything : we use smp_mc() to make sure the
-        * cache flush is enforced.
-        */
-       *index->need_mb = 1;
-       smp_mc();       /* write ->need_mb before sending the signals */
-       pthread_kill(index->tid, SIGURCU);
-       smp_mb();
-       /*
-        * Wait for sighandler (and thus mb()) to execute on every thread.
-        * BUSY-LOOP.
-        */
-       while (*index->need_mb) {
-               poll(NULL, 0, 1);
-       }
-       smp_mb();       /* read ->need_mb before ending the barrier */
-}
+       struct rcu_reader *index;
 
-static void force_mb_all_threads(void)
-{
-       struct reader_registry *index;
        /*
-        * Ask for each threads to execute a smp_mb() so we can consider the
+        * Ask for each threads to execute a cmm_smp_mb() so we can consider the
         * compiler barriers around rcu read lock as real memory barriers.
         */
-       if (!registry)
+       if (cds_list_empty(&registry))
                return;
        /*
-        * pthread_kill has a smp_mb(). But beware, we assume it performs
+        * pthread_kill has a cmm_smp_mb(). But beware, we assume it performs
         * a cache flush on architectures with non-coherent cache. Let's play
-        * safe and don't assume anything : we use smp_mc() to make sure the
+        * safe and don't assume anything : we use cmm_smp_mc() to make sure the
         * cache flush is enforced.
         */
-       for (index = registry; index < registry + num_readers; index++) {
-               *index->need_mb = 1;
-               smp_mc();       /* write need_mb before sending the signal */
-               pthread_kill(index->tid, SIGURCU);
+       cds_list_for_each_entry(index, &registry, node) {
+               CMM_STORE_SHARED(index->need_mb, 1);
+               pthread_kill(index->tid, SIGRCU);
        }
        /*
         * Wait for sighandler (and thus mb()) to execute on every thread.
@@ -196,153 +175,164 @@ static void force_mb_all_threads(void)
         * relevant bug report.  For Linux kernels, we recommend getting
         * the Linux Test Project (LTP).
         */
-       for (index = registry; index < registry + num_readers; index++) {
-               while (*index->need_mb) {
-                       pthread_kill(index->tid, SIGURCU);
+       cds_list_for_each_entry(index, &registry, node) {
+               while (CMM_LOAD_SHARED(index->need_mb)) {
+                       pthread_kill(index->tid, SIGRCU);
                        poll(NULL, 0, 1);
                }
        }
-       smp_mb();       /* read ->need_mb before ending the barrier */
+       cmm_smp_mb();   /* read ->need_mb before ending the barrier */
 }
-#endif /* #else #ifdef URCU_MB */
+
+static void smp_mb_master(int group)
+{
+       force_mb_all_readers();
+}
+#endif /* #ifdef RCU_SIGNAL */
 
 /*
  * synchronize_rcu() waiting. Single thread.
  */
-static void wait_gp(struct reader_registry *index)
+static void wait_gp(void)
 {
-       atomic_dec(&gp_futex);
-       force_mb_single_thread(index); /* Write futex before read reader_gp */
-       if (!rcu_old_gp_ongoing(index->urcu_active_readers)) {
-               /* Read reader_gp before write futex */
-               force_mb_single_thread(index);
-               /* Callbacks are queued, don't wait. */
-               atomic_set(&gp_futex, 0);
-       } else {
-               /* Read reader_gp before read futex */
-               force_mb_single_thread(index);
-               if (atomic_read(&gp_futex) == -1)
-                       futex(&gp_futex, FUTEX_WAIT, -1,
-                             NULL, NULL, 0);
-       }
+       /* Read reader_gp before read futex */
+       smp_mb_master(RCU_MB_GROUP);
+       if (uatomic_read(&gp_futex) == -1)
+               futex_async(&gp_futex, FUTEX_WAIT, -1,
+                     NULL, NULL, 0);
 }
 
-void wait_for_quiescent_state(void)
+void update_counter_and_wait(void)
 {
-       struct reader_registry *index;
+       CDS_LIST_HEAD(qsreaders);
+       int wait_loops = 0;
+       struct rcu_reader *index, *tmp;
+
+       /* Switch parity: 0 -> 1, 1 -> 0 */
+       CMM_STORE_SHARED(rcu_gp_ctr, rcu_gp_ctr ^ RCU_GP_CTR_PHASE);
 
-       if (!registry)
-               return;
        /*
-        * Wait for each thread urcu_active_readers count to become 0.
+        * Must commit rcu_gp_ctr update to memory before waiting for quiescent
+        * state. Failure to do so could result in the writer waiting forever
+        * while new readers are always accessing data (no progress). Enforce
+        * compiler-order of store to rcu_gp_ctr before load rcu_reader ctr.
         */
-       for (index = registry; index < registry + num_readers; index++) {
-               int wait_loops = 0;
+       cmm_barrier();
+
+       /*
+        *
+        * Adding a cmm_smp_mb() which is _not_ formally required, but makes the
+        * model easier to understand. It does not have a big performance impact
+        * anyway, given this is the write-side.
+        */
+       cmm_smp_mb();
+
+       /*
+        * Wait for each thread rcu_reader.ctr count to become 0.
+        */
+       for (;;) {
+               wait_loops++;
+               if (wait_loops == RCU_QS_ACTIVE_ATTEMPTS) {
+                       uatomic_dec(&gp_futex);
+                       /* Write futex before read reader_gp */
+                       smp_mb_master(RCU_MB_GROUP);
+               }
+
+               cds_list_for_each_entry_safe(index, tmp, &registry, node) {
+                       if (!rcu_gp_ongoing(&index->ctr))
+                               cds_list_move(&index->node, &qsreaders);
+               }
+
 #ifndef HAS_INCOHERENT_CACHES
-               while (rcu_old_gp_ongoing(index->urcu_active_readers)) {
-                       if (wait_loops++ == RCU_QS_ACTIVE_ATTEMPTS) {
-                               wait_gp(index);
-                       } else {
-                               cpu_relax();
+               if (cds_list_empty(&registry)) {
+                       if (wait_loops == RCU_QS_ACTIVE_ATTEMPTS) {
+                               /* Read reader_gp before write futex */
+                               smp_mb_master(RCU_MB_GROUP);
+                               uatomic_set(&gp_futex, 0);
                        }
+                       break;
+               } else {
+                       if (wait_loops == RCU_QS_ACTIVE_ATTEMPTS)
+                               wait_gp();
+                       else
+                               caa_cpu_relax();
                }
 #else /* #ifndef HAS_INCOHERENT_CACHES */
                /*
                 * BUSY-LOOP. Force the reader thread to commit its
-                * urcu_active_readers update to memory if we wait for too long.
+                * rcu_reader.ctr update to memory if we wait for too long.
                 */
-               while (rcu_old_gp_ongoing(index->urcu_active_readers)) {
-                       switch (wait_loops++) {
+               if (cds_list_empty(&registry)) {
+                       if (wait_loops == RCU_QS_ACTIVE_ATTEMPTS) {
+                               /* Read reader_gp before write futex */
+                               smp_mb_master(RCU_MB_GROUP);
+                               uatomic_set(&gp_futex, 0);
+                       }
+                       break;
+               } else {
+                       switch (wait_loops) {
                        case RCU_QS_ACTIVE_ATTEMPTS:
-                               wait_gp(index);
-                               break;
+                               wait_gp();
+                               break; /* only escape switch */
                        case KICK_READER_LOOPS:
-                               force_mb_single_thread(index);
+                               smp_mb_master(RCU_MB_GROUP);
                                wait_loops = 0;
-                               break;
+                               break; /* only escape switch */
                        default:
-                               cpu_relax();
+                               caa_cpu_relax();
                        }
                }
 #endif /* #else #ifndef HAS_INCOHERENT_CACHES */
        }
+       /* put back the reader list in the registry */
+       cds_list_splice(&qsreaders, &registry);
 }
 
 void synchronize_rcu(void)
 {
-       internal_urcu_lock();
+       mutex_lock(&rcu_gp_lock);
+
+       if (cds_list_empty(&registry))
+               goto out;
 
        /* All threads should read qparity before accessing data structure
-        * where new ptr points to. Must be done within internal_urcu_lock
-        * because it iterates on reader threads.*/
+        * where new ptr points to. Must be done within rcu_gp_lock because it
+        * iterates on reader threads.*/
        /* Write new ptr before changing the qparity */
-       force_mb_all_threads();
-
-       switch_next_urcu_qparity();     /* 0 -> 1 */
-
-       /*
-        * Must commit qparity update to memory before waiting for parity
-        * 0 quiescent state. Failure to do so could result in the writer
-        * waiting forever while new readers are always accessing data (no
-        * progress).
-        * Ensured by STORE_SHARED and LOAD_SHARED.
-        */
-
-       /*
-        * Adding a smp_mb() which is _not_ formally required, but makes the
-        * model easier to understand. It does not have a big performance impact
-        * anyway, given this is the write-side.
-        */
-       smp_mb();
+       smp_mb_master(RCU_MB_GROUP);
 
        /*
         * Wait for previous parity to be empty of readers.
         */
-       wait_for_quiescent_state();     /* Wait readers in parity 0 */
+       update_counter_and_wait();      /* 0 -> 1, wait readers in parity 0 */
 
        /*
         * Must finish waiting for quiescent state for parity 0 before
-        * committing qparity update to memory. Failure to do so could result in
-        * the writer waiting forever while new readers are always accessing
-        * data (no progress).
-        * Ensured by STORE_SHARED and LOAD_SHARED.
-        */
-
-       /*
-        * Adding a smp_mb() which is _not_ formally required, but makes the
-        * model easier to understand. It does not have a big performance impact
-        * anyway, given this is the write-side.
-        */
-       smp_mb();
-
-       switch_next_urcu_qparity();     /* 1 -> 0 */
-
-       /*
-        * Must commit qparity update to memory before waiting for parity
-        * 1 quiescent state. Failure to do so could result in the writer
-        * waiting forever while new readers are always accessing data (no
-        * progress).
-        * Ensured by STORE_SHARED and LOAD_SHARED.
+        * committing next rcu_gp_ctr update to memory. Failure to do so could
+        * result in the writer waiting forever while new readers are always
+        * accessing data (no progress).  Enforce compiler-order of load
+        * rcu_reader ctr before store to rcu_gp_ctr.
         */
+       cmm_barrier();
 
        /*
-        * Adding a smp_mb() which is _not_ formally required, but makes the
+        * Adding a cmm_smp_mb() which is _not_ formally required, but makes the
         * model easier to understand. It does not have a big performance impact
         * anyway, given this is the write-side.
         */
-       smp_mb();
+       cmm_smp_mb();
 
        /*
         * Wait for previous parity to be empty of readers.
         */
-       wait_for_quiescent_state();     /* Wait readers in parity 1 */
+       update_counter_and_wait();      /* 1 -> 0, wait readers in parity 1 */
 
        /* Finish waiting for reader threads before letting the old ptr being
-        * freed. Must be done within internal_urcu_lock because it iterates on
-        * reader threads. */
-       force_mb_all_threads();
-
-       internal_urcu_unlock();
+        * freed. Must be done within rcu_gp_lock because it iterates on reader
+        * threads. */
+       smp_mb_master(RCU_MB_GROUP);
+out:
+       mutex_unlock(&rcu_gp_lock);
 }
 
 /*
@@ -359,124 +349,58 @@ void rcu_read_unlock(void)
        _rcu_read_unlock();
 }
 
-void *rcu_dereference(void *p)
-{
-       return _rcu_dereference(p);
-}
-
-void *rcu_assign_pointer_sym(void **p, void *v)
-{
-       wmb();
-       return STORE_SHARED(p, v);
-}
-
-void *rcu_xchg_pointer_sym(void **p, void *v)
-{
-       wmb();
-       return xchg(p, v);
-}
-
-void *rcu_cmpxchg_pointer_sym(void **p, void *old, void *_new)
-{
-       wmb();
-       return cmpxchg(p, old, _new);
-}
-
-void *rcu_publish_content_sym(void **p, void *v)
-{
-       void *oldptr;
-
-       oldptr = _rcu_xchg_pointer(p, v);
-       synchronize_rcu();
-       return oldptr;
-}
-
-static void rcu_add_reader(pthread_t id)
-{
-       struct reader_registry *oldarray;
-
-       if (!registry) {
-               alloc_readers = INIT_NUM_THREADS;
-               num_readers = 0;
-               registry =
-                       malloc(sizeof(struct reader_registry) * alloc_readers);
-       }
-       if (alloc_readers < num_readers + 1) {
-               oldarray = registry;
-               registry = malloc(sizeof(struct reader_registry)
-                               * (alloc_readers << 1));
-               memcpy(registry, oldarray,
-                       sizeof(struct reader_registry) * alloc_readers);
-               alloc_readers <<= 1;
-               free(oldarray);
-       }
-       registry[num_readers].tid = id;
-       /* reference to the TLS of _this_ reader thread. */
-       registry[num_readers].urcu_active_readers = &urcu_active_readers;
-       registry[num_readers].need_mb = &need_mb;
-       num_readers++;
-}
-
-/*
- * Never shrink (implementation limitation).
- * This is O(nb threads). Eventually use a hash table.
- */
-static void rcu_remove_reader(pthread_t id)
+void rcu_register_thread(void)
 {
-       struct reader_registry *index;
-
-       assert(registry != NULL);
-       for (index = registry; index < registry + num_readers; index++) {
-               if (pthread_equal(index->tid, id)) {
-                       memcpy(index, &registry[num_readers - 1],
-                               sizeof(struct reader_registry));
-                       registry[num_readers - 1].tid = 0;
-                       registry[num_readers - 1].urcu_active_readers = NULL;
-                       num_readers--;
-                       return;
-               }
-       }
-       /* Hrm not found, forgot to register ? */
-       assert(0);
+       rcu_reader.tid = pthread_self();
+       assert(rcu_reader.need_mb == 0);
+       assert(!(rcu_reader.ctr & RCU_GP_CTR_NEST_MASK));
+
+       mutex_lock(&rcu_gp_lock);
+       rcu_init();     /* In case gcc does not support constructor attribute */
+       cds_list_add(&rcu_reader.node, &registry);
+       mutex_unlock(&rcu_gp_lock);
 }
 
-void rcu_register_thread(void)
+void rcu_unregister_thread(void)
 {
-       internal_urcu_lock();
-       urcu_init();    /* In case gcc does not support constructor attribute */
-       rcu_add_reader(pthread_self());
-       internal_urcu_unlock();
+       mutex_lock(&rcu_gp_lock);
+       cds_list_del(&rcu_reader.node);
+       mutex_unlock(&rcu_gp_lock);
 }
 
-void rcu_unregister_thread(void)
+#ifdef RCU_MEMBARRIER
+void rcu_init(void)
 {
-       internal_urcu_lock();
-       rcu_remove_reader(pthread_self());
-       internal_urcu_unlock();
+       if (init_done)
+               return;
+       init_done = 1;
+       if (!membarrier(MEMBARRIER_EXPEDITED | MEMBARRIER_QUERY))
+               has_sys_membarrier = 1;
 }
+#endif
 
-#ifndef URCU_MB
-static void sigurcu_handler(int signo, siginfo_t *siginfo, void *context)
+#ifdef RCU_SIGNAL
+static void sigrcu_handler(int signo, siginfo_t *siginfo, void *context)
 {
        /*
-        * Executing this smp_mb() is the only purpose of this signal handler.
-        * It punctually promotes barrier() into smp_mb() on every thread it is
+        * Executing this cmm_smp_mb() is the only purpose of this signal handler.
+        * It punctually promotes cmm_barrier() into cmm_smp_mb() on every thread it is
         * executed on.
         */
-       smp_mb();
-       need_mb = 0;
-       smp_mb();
+       cmm_smp_mb();
+       _CMM_STORE_SHARED(rcu_reader.need_mb, 0);
+       cmm_smp_mb();
 }
 
 /*
- * urcu_init constructor. Called when the library is linked, but also when
+ * rcu_init constructor. Called when the library is linked, but also when
  * reader threads are calling rcu_register_thread().
  * Should only be called by a single thread at a given time. This is ensured by
- * holing the internal_urcu_lock() from rcu_register_thread() or by running at
- * library load time, which should not be executed by multiple threads nor
- * concurrently with rcu_register_thread() anyway.
+ * holing the rcu_gp_lock from rcu_register_thread() or by running at library
+ * load time, which should not be executed by multiple threads nor concurrently
+ * with rcu_register_thread() anyway.
  */
-void urcu_init(void)
+void rcu_init(void)
 {
        struct sigaction act;
        int ret;
@@ -485,27 +409,31 @@ void urcu_init(void)
                return;
        init_done = 1;
 
-       act.sa_sigaction = sigurcu_handler;
+       act.sa_sigaction = sigrcu_handler;
        act.sa_flags = SA_SIGINFO | SA_RESTART;
        sigemptyset(&act.sa_mask);
-       ret = sigaction(SIGURCU, &act, NULL);
+       ret = sigaction(SIGRCU, &act, NULL);
        if (ret) {
                perror("Error in sigaction");
                exit(-1);
        }
 }
 
-void urcu_exit(void)
+void rcu_exit(void)
 {
        struct sigaction act;
        int ret;
 
-       ret = sigaction(SIGURCU, NULL, &act);
+       ret = sigaction(SIGRCU, NULL, &act);
        if (ret) {
                perror("Error in sigaction");
                exit(-1);
        }
-       assert(act.sa_sigaction == sigurcu_handler);
-       free(registry);
+       assert(act.sa_sigaction == sigrcu_handler);
+       assert(cds_list_empty(&registry));
 }
-#endif /* #ifndef URCU_MB */
+
+#endif /* #ifdef RCU_SIGNAL */
+
+#include "urcu-call-rcu-impl.h"
+#include "urcu-defer-impl.h"
diff --git a/urcu.h b/urcu.h
index e72b57416f730fb4775100e96ba2da86729846b6..5728c07d3ce4cac45a11e4540c6c5f3a934a6837 100644 (file)
--- a/urcu.h
+++ b/urcu.h
@@ -6,7 +6,7 @@
  *
  * Userspace RCU header
  *
- * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
  *
  * LGPL-compatible code should include this header with :
 #include <stdlib.h>
 #include <pthread.h>
 
+/*
+ * See urcu-pointer.h and urcu/static/urcu-pointer.h for pointer
+ * publication headers.
+ */
+#include <urcu-pointer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#include <urcu/map/urcu.h>
+
 /*
  * Important !
  *
  * Each thread containing read-side critical sections must be registered
- * with rcu_register_thread() before calling rcu_read_lock().
- * rcu_unregister_thread() should be called before the thread exits.
+ * with rcu_register_thread_mb() before calling rcu_read_lock_mb().
+ * rcu_unregister_thread_mb() should be called before the thread exits.
  */
 
 #ifdef _LGPL_SOURCE
 
-#include <urcu-static.h>
+#include <urcu/static/urcu.h>
 
 /*
  * Mappings for static use of the userspace RCU library.
  * Should only be used in LGPL-compatible code.
  */
 
-#define rcu_dereference                _rcu_dereference
-#define rcu_read_lock          _rcu_read_lock
-#define rcu_read_unlock                _rcu_read_unlock
-
-#define rcu_assign_pointer     _rcu_assign_pointer
-#define rcu_cmpxchg_pointer    _rcu_cmpxchg_pointer
-#define rcu_xchg_pointer       _rcu_xchg_pointer
-#define rcu_publish_content    _rcu_publish_content
+/*
+ * rcu_read_lock()
+ * rcu_read_unlock()
+ *
+ * Mark the beginning and end of a read-side critical section.
+ * DON'T FORGET TO USE RCU_REGISTER/UNREGISTER_THREAD() FOR EACH THREAD WITH
+ * READ-SIDE CRITICAL SECTION.
+ */
+#ifdef RCU_MEMBARRIER
+#define rcu_read_lock_memb             _rcu_read_lock
+#define rcu_read_unlock_memb           _rcu_read_unlock
+#elif defined(RCU_SIGNAL)
+#define rcu_read_lock_sig              _rcu_read_lock
+#define rcu_read_unlock_sig            _rcu_read_unlock
+#elif defined(RCU_MB)
+#define rcu_read_lock_mb               _rcu_read_lock
+#define rcu_read_unlock_mb             _rcu_read_unlock
+#endif
 
 #else /* !_LGPL_SOURCE */
 
 /*
  * library wrappers to be used by non-LGPL compatible source code.
+ * See LGPL-only urcu/static/urcu-pointer.h for documentation.
  */
 
 extern void rcu_read_lock(void);
 extern void rcu_read_unlock(void);
 
-extern void *rcu_dereference(void *p);
-
-extern void *rcu_assign_pointer_sym(void **p, void *v);
-
-#define rcu_assign_pointer(p, v)                       \
-       rcu_assign_pointer_sym((void **)(p), (v))
-
-extern void *rcu_cmpxchg_pointer_sym(void **p, void *old, void *_new);
-#define rcu_cmpxchg_pointer(p, old, _new)              \
-       rcu_cmpxchg_pointer_sym((void **)(p), (old), (_new))
-
-extern void *rcu_xchg_pointer_sym(void **p, void *v);
-#define rcu_xchg_pointer(p, v)                         \
-       rcu_xchg_pointer_sym((void **)(p), (v))
-
-extern void *rcu_publish_content_sym(void **p, void *v);
-#define rcu_publish_content(p, v)                      \
-       rcu_publish_content_sym((void **)(p), (v))
-
 #endif /* !_LGPL_SOURCE */
 
 extern void synchronize_rcu(void);
@@ -98,4 +102,16 @@ extern void synchronize_rcu(void);
 extern void rcu_register_thread(void);
 extern void rcu_unregister_thread(void);
 
+/*
+ * Explicit rcu initialization, for "early" use within library constructors.
+ */
+extern void rcu_init(void);
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu-call-rcu.h>
+#include <urcu-defer.h>
+
 #endif /* _URCU_H */
diff --git a/urcu/arch/alpha.h b/urcu/arch/alpha.h
new file mode 100644 (file)
index 0000000..300213e
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef _URCU_ARCH_ALPHA_H
+#define _URCU_ARCH_ALPHA_H
+
+/*
+ * arch_alpha.h: trivial definitions for the Alpha architecture.
+ *
+ * Copyright (c) 2010 Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define cmm_mb()                       asm volatile("mb":::"memory")
+#define cmm_wmb()                      asm volatile("wmb":::"memory")
+#define cmm_read_barrier_depends()     asm volatile("mb":::"memory")
+
+typedef unsigned long long cycles_t;
+
+static inline cycles_t caa_get_cycles (void)
+{
+       return 0;       /* not supported */
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <urcu/arch/generic.h>
+
+#endif /* _URCU_ARCH_ALPHA_H */
diff --git a/urcu/arch/arm.h b/urcu/arch/arm.h
new file mode 100644 (file)
index 0000000..b49f782
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef _URCU_ARCH_ARM_H
+#define _URCU_ARCH_ARM_H
+
+/*
+ * arch_arm.h: trivial definitions for the ARM architecture.
+ *
+ * Copyright (c) 2010 Paul E. McKenney, IBM Corporation.
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#ifdef CONFIG_RCU_ARM_HAVE_DMB
+#define cmm_mb()       asm volatile("dmb":::"memory")
+#define cmm_rmb()      asm volatile("dmb":::"memory")
+#define cmm_wmb()      asm volatile("dmb":::"memory")
+#endif /* CONFIG_RCU_ARM_HAVE_DMB */
+
+#include <stdlib.h>
+#include <sys/time.h>
+
+typedef unsigned long long cycles_t;
+
+static inline cycles_t caa_get_cycles (void)
+{
+       cycles_t thetime;
+       struct timeval tv;
+
+       if (gettimeofday(&tv, NULL) != 0)
+               return 0;
+       thetime = ((cycles_t)tv.tv_sec) * 1000000ULL + ((cycles_t)tv.tv_usec);
+       return (cycles_t)thetime;
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/arch/generic.h>
+
+#endif /* _URCU_ARCH_ARM_H */
diff --git a/urcu/arch/gcc.h b/urcu/arch/gcc.h
new file mode 100644 (file)
index 0000000..0c83c23
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef _URCU_ARCH_GCC_H
+#define _URCU_ARCH_GCC_H
+
+/*
+ * arch_gcc.h: trivial definitions for architectures using gcc __sync_
+ *
+ * Copyright (c) 2010 Paul E. McKenney, IBM Corporation.
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#include <stdlib.h>
+#include <sys/time.h>
+
+typedef unsigned long long cycles_t;
+
+static inline cycles_t caa_get_cycles (void)
+{
+       cycles_t thetime;
+       struct timeval tv;
+
+       if (gettimeofday(&tv, NULL) != 0)
+               return 0;
+       thetime = ((cycles_t)tv.tv_sec) * 1000000ULL + ((cycles_t)tv.tv_usec);
+       return (cycles_t)thetime;
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/arch/generic.h>
+
+#endif /* _URCU_ARCH_GCC_H */
diff --git a/urcu/arch/generic.h b/urcu/arch/generic.h
new file mode 100644 (file)
index 0000000..100d3c6
--- /dev/null
@@ -0,0 +1,128 @@
+#ifndef _URCU_ARCH_GENERIC_H
+#define _URCU_ARCH_GENERIC_H
+
+/*
+ * arch_generic.h: common definitions for multiple architectures.
+ *
+ * Copyright (c) 2010 Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef CAA_CACHE_LINE_SIZE
+#define CAA_CACHE_LINE_SIZE    64
+#endif
+
+#if !defined(cmm_mc) && !defined(cmm_rmc) && !defined(cmm_wmc)
+#define CONFIG_HAVE_MEM_COHERENCY
+/*
+ * Architectures with cache coherency must _not_ define cmm_mc/cmm_rmc/cmm_wmc.
+ *
+ * For them, cmm_mc/cmm_rmc/cmm_wmc are implemented with a * simple compiler barrier;
+ * in addition, we provide defaults for cmm_mb (using GCC builtins) as well as
+ * cmm_rmb and cmm_wmb (defaulting to cmm_mb).
+ */
+
+#ifndef cmm_mb
+#define cmm_mb()    __sync_synchronize()
+#endif
+
+#ifndef cmm_rmb
+#define cmm_rmb()      cmm_mb()
+#endif
+
+#ifndef cmm_wmb
+#define cmm_wmb()      cmm_mb()
+#endif
+
+#define cmm_mc()       cmm_barrier()
+#define cmm_rmc()      cmm_barrier()
+#define cmm_wmc()      cmm_barrier()
+#else
+/*
+ * Architectures without cache coherency need something like the following:
+ *
+ * #define cmm_mc()            arch_cache_flush() 
+ * #define cmm_rmc()   arch_cache_flush_read()
+ * #define cmm_wmc()   arch_cache_flush_write()
+ *
+ * Of these, only cmm_mc is mandatory.  cmm_rmc and cmm_wmc default to cmm_mc.  
+ * cmm_mb/cmm_rmb/cmm_wmb use these definitions by default:
+ *
+ * #define cmm_mb()            cmm_mc()
+ * #define cmm_rmb()   cmm_rmc()
+ * #define cmm_wmb()   cmm_wmc()
+ */
+
+#ifndef cmm_mb
+#define cmm_mb()       cmm_mc()
+#endif
+
+#ifndef cmm_rmb
+#define cmm_rmb()      cmm_rmc()
+#endif
+
+#ifndef cmm_wmb
+#define cmm_wmb()      cmm_wmc()
+#endif
+
+#ifndef cmm_rmc
+#define cmm_rmc()      cmm_mc()
+#endif
+
+#ifndef cmm_wmc
+#define cmm_wmc()      cmm_mc()
+#endif
+#endif
+
+/* Nop everywhere except on alpha. */
+#ifndef cmm_read_barrier_depends
+#define cmm_read_barrier_depends()
+#endif
+
+#ifdef CONFIG_RCU_SMP
+#define cmm_smp_mb()   cmm_mb()
+#define cmm_smp_rmb()  cmm_rmb()
+#define cmm_smp_wmb()  cmm_wmb()
+#define cmm_smp_mc()   cmm_mc()
+#define cmm_smp_rmc()  cmm_rmc()
+#define cmm_smp_wmc()  cmm_wmc()
+#define cmm_smp_read_barrier_depends() cmm_read_barrier_depends()
+#else
+#define cmm_smp_mb()   cmm_barrier()
+#define cmm_smp_rmb()  cmm_barrier()
+#define cmm_smp_wmb()  cmm_barrier()
+#define cmm_smp_mc()   cmm_barrier()
+#define cmm_smp_rmc()  cmm_barrier()
+#define cmm_smp_wmc()  cmm_barrier()
+#define cmm_smp_read_barrier_depends()
+#endif
+
+#ifndef caa_cpu_relax
+#define caa_cpu_relax()                cmm_barrier()
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_ARCH_GENERIC_H */
diff --git a/urcu/arch/ppc.h b/urcu/arch/ppc.h
new file mode 100644 (file)
index 0000000..d7317bb
--- /dev/null
@@ -0,0 +1,73 @@
+#ifndef _URCU_ARCH_PPC_H
+#define _URCU_ARCH_PPC_H
+
+/*
+ * arch_ppc.h: trivial definitions for the powerpc architecture.
+ *
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+/* Include size of POWER5+ L3 cache lines: 256 bytes */
+#define CAA_CACHE_LINE_SIZE    256
+
+#define cmm_mb()    asm volatile("sync":::"memory")
+
+#define mftbl()                                                \
+       ({                                              \
+               unsigned long rval;                     \
+               asm volatile("mftbl %0" : "=r" (rval)); \
+               rval;                                   \
+       })
+
+#define mftbu()                                                \
+       ({                                              \
+               unsigned long rval;                     \
+               asm volatile("mftbu %0" : "=r" (rval)); \
+               rval;                                   \
+       })
+
+typedef unsigned long long cycles_t;
+
+static inline cycles_t caa_get_cycles (void)
+{
+       long h, l;
+
+       for (;;) {
+               h = mftbu();
+               cmm_barrier();
+               l = mftbl();
+               cmm_barrier();
+               if (mftbu() == h)
+                       return (((cycles_t) h) << 32) + l;
+       }
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/arch/generic.h>
+
+#endif /* _URCU_ARCH_PPC_H */
diff --git a/urcu/arch/s390.h b/urcu/arch/s390.h
new file mode 100644 (file)
index 0000000..5985b20
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef _URCU_ARCH_S390_H
+#define _URCU_ARCH_S390_H
+
+/*
+ * Trivial definitions for the S390 architecture based on information from the
+ * Principles of Operation "CPU Serialization" (5-91), "BRANCH ON CONDITION"
+ * (7-25) and "STORE CLOCK" (7-169).
+ *
+ * Copyright (c) 2009 Novell, Inc.
+ * Author: Jan Blunck <jblunck@suse.de>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#define CAA_CACHE_LINE_SIZE    128
+
+#define cmm_mb()    __asm__ __volatile__("bcr 15,0" : : : "memory")
+
+typedef unsigned long long cycles_t;
+
+static inline cycles_t caa_get_cycles (void)
+{
+       cycles_t cycles;
+
+       __asm__ __volatile__("stck %0" : "=m" (cycles) : : "cc", "memory" );
+
+       return cycles;
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/arch/generic.h>
+
+#endif /* _URCU_ARCH_S390_H */
diff --git a/urcu/arch/sparc64.h b/urcu/arch/sparc64.h
new file mode 100644 (file)
index 0000000..46e2665
--- /dev/null
@@ -0,0 +1,60 @@
+#ifndef _URCU_ARCH_SPARC64_H
+#define _URCU_ARCH_SPARC64_H
+
+/*
+ * arch_sparc64.h: trivial definitions for the Sparc64 architecture.
+ *
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#define CAA_CACHE_LINE_SIZE    256
+
+/*
+ * Inspired from the Linux kernel. Workaround Spitfire bug #51.
+ */
+#define membar_safe(type)                      \
+__asm__ __volatile__("ba,pt %%xcc, 1f\n\t"     \
+                    "membar " type "\n"        \
+                    "1:\n"                     \
+                    : : : "memory")
+
+#define cmm_mb()       membar_safe("#LoadLoad | #LoadStore | #StoreStore | #StoreLoad")
+#define cmm_rmb()      membar_safe("#LoadLoad")
+#define cmm_wmb()      membar_safe("#StoreStore")
+
+typedef unsigned long long cycles_t;
+
+static inline cycles_t caa_get_cycles (void)
+{
+       return 0;       /* unimplemented */
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/arch/generic.h>
+
+#endif /* _URCU_ARCH_SPARC64_H */
diff --git a/urcu/arch/unknown.h b/urcu/arch/unknown.h
new file mode 100644 (file)
index 0000000..701575d
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef _URCU_ARCH_UNKNOWN_H
+#define _URCU_ARCH_UNKNOWN_H
+
+/*
+ * arch_unknown.h: #error to prevent build on unknown architectures.
+ *
+ * Copyright (c) 2010 Paul E. McKenney, IBM Corporation.
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* See configure.ac for the list of recognized architectures.  */
+#error "Cannot build: unrecognized architecture detected."
+
+#endif /* _URCU_ARCH_UNKNOWN_H */
diff --git a/urcu/arch/x86.h b/urcu/arch/x86.h
new file mode 100644 (file)
index 0000000..9e5411f
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef _URCU_ARCH_X86_H
+#define _URCU_ARCH_X86_H
+
+/*
+ * arch_x86.h: trivial definitions for the x86 architecture.
+ *
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/config.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#define CAA_CACHE_LINE_SIZE    128
+
+#ifdef CONFIG_RCU_HAVE_FENCE
+#define cmm_mb()    asm volatile("mfence":::"memory")
+#define cmm_rmb()   asm volatile("lfence":::"memory")
+#define cmm_wmb()   asm volatile("sfence"::: "memory")
+#else
+/*
+ * Some non-Intel clones support out of order store. cmm_wmb() ceases to be a
+ * nop for these.
+ */
+#define cmm_mb()    asm volatile("lock; addl $0,0(%%esp)":::"memory")
+#define cmm_rmb()   asm volatile("lock; addl $0,0(%%esp)":::"memory")
+#define cmm_wmb()   asm volatile("lock; addl $0,0(%%esp)"::: "memory")
+#endif
+
+#define caa_cpu_relax()        asm volatile("rep; nop" : : : "memory");
+
+#define rdtscll(val)                                                     \
+       do {                                                              \
+            unsigned int __a, __d;                                       \
+            asm volatile("rdtsc" : "=a" (__a), "=d" (__d));              \
+            (val) = ((unsigned long long)__a)                            \
+                       | (((unsigned long long)__d) << 32);              \
+       } while(0)
+
+typedef unsigned long long cycles_t;
+
+static inline cycles_t caa_get_cycles(void)
+{
+        cycles_t ret = 0;
+
+        rdtscll(ret);
+        return ret;
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/arch/generic.h>
+
+#endif /* _URCU_ARCH_X86_H */
diff --git a/urcu/cds.h b/urcu/cds.h
new file mode 100644 (file)
index 0000000..f37a63a
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef _URCU_CDS_H
+#define _URCU_CDS_H
+
+/*
+ * urcu/cds.h
+ *
+ * Userspace RCU library - Concurrent Data Structures
+ *
+ * Copyright 2011 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/hlist.h>
+#include <urcu/list.h>
+#include <urcu/rcuhlist.h>
+#include <urcu/rculist.h>
+#include <urcu/rculfqueue.h>
+#include <urcu/rculfstack.h>
+#include <urcu/wfqueue.h>
+#include <urcu/wfstack.h>
+
+#endif /* _URCU_CDS_H */
diff --git a/urcu/compiler.h b/urcu/compiler.h
new file mode 100644 (file)
index 0000000..64d12d3
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef _URCU_COMPILER_H
+#define _URCU_COMPILER_H
+
+/*
+ * compiler.h
+ *
+ * Compiler definitions.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ */
+
+#include <stddef.h>    /* for offsetof */
+
+#define likely(x)      __builtin_expect(!!(x), 1)
+#define unlikely(x)    __builtin_expect(!!(x), 0)
+
+#define        cmm_barrier()   asm volatile("" : : : "memory")
+
+/*
+ * Instruct the compiler to perform only a single access to a variable
+ * (prohibits merging and refetching). The compiler is also forbidden to reorder
+ * successive instances of CMM_ACCESS_ONCE(), but only when the compiler is aware of
+ * particular ordering. Compiler ordering can be ensured, for example, by
+ * putting two CMM_ACCESS_ONCE() in separate C statements.
+ *
+ * This macro does absolutely -nothing- to prevent the CPU from reordering,
+ * merging, or refetching absolutely anything at any time.  Its main intended
+ * use is to mediate communication between process-level code and irq/NMI
+ * handlers, all running on the same CPU.
+ */
+#define CMM_ACCESS_ONCE(x)     (*(volatile typeof(x) *)&(x))
+
+#ifndef max
+#define max(a,b) ((a)>(b)?(a):(b))
+#endif
+
+#ifndef min
+#define min(a,b) ((a)<(b)?(a):(b))
+#endif
+
+#if defined(__SIZEOF_LONG__)
+#define CAA_BITS_PER_LONG      (__SIZEOF_LONG__ * 8)
+#elif defined(_LP64)
+#define CAA_BITS_PER_LONG      64
+#else
+#define CAA_BITS_PER_LONG      32
+#endif
+
+#define caa_container_of(ptr, type, member)                                    \
+       ({                                                              \
+               const typeof(((type *)NULL)->member) * __ptr = (ptr);   \
+               (type *)((char *)__ptr - offsetof(type, member));       \
+       })
+
+#endif /* _URCU_COMPILER_H */
diff --git a/urcu/config.h.in b/urcu/config.h.in
new file mode 100644 (file)
index 0000000..02c7b2e
--- /dev/null
@@ -0,0 +1,18 @@
+/* urcu/config.h.in. Manually generated for control over the contained defs. */
+
+/* Defined when on a system that has memory fence instructions. */
+#undef CONFIG_RCU_HAVE_FENCE
+
+/* Defined when on a system with futex support. */
+#undef CONFIG_RCU_HAVE_FUTEX
+
+/* Enable SMP support. With SMP support enabled, uniprocessors are also
+   supported. With SMP support disabled, UP systems work fine, but the
+   behavior of SMP systems is undefined. */
+#undef CONFIG_RCU_SMP
+
+/* Compatibility mode for i386 which lacks cmpxchg instruction. */
+#undef CONFIG_RCU_COMPAT_ARCH
+
+/* Use the dmb instruction is available for use on ARM. */
+#undef CONFIG_RCU_ARM_HAVE_DMB
diff --git a/urcu/futex.h b/urcu/futex.h
new file mode 100644 (file)
index 0000000..98acc12
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef _URCU_FUTEX_H
+#define _URCU_FUTEX_H
+
+/*
+ * urcu-futex.h
+ *
+ * Userspace RCU - sys_futex/compat_futex header.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/config.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#define FUTEX_WAIT             0
+#define FUTEX_WAKE             1
+
+/*
+ * sys_futex compatibility header.
+ * Use *only* *either of* futex_noasync OR futex_async on a given address.
+ *
+ * futex_noasync cannot be executed in signal handlers, but ensures that
+ * it will be put in a wait queue even in compatibility mode.
+ *
+ * futex_async is signal-handler safe for the wakeup. It uses polling
+ * on the wait-side in compatibility mode.
+ */
+
+#ifdef CONFIG_RCU_HAVE_FUTEX
+#include <sys/syscall.h>
+#define futex(...)     syscall(__NR_futex, __VA_ARGS__)
+#define futex_noasync(uaddr, op, val, timeout, uaddr2, val3)   \
+               futex(uaddr, op, val, timeout, uaddr2, val3)
+#define futex_async(uaddr, op, val, timeout, uaddr2, val3)     \
+               futex(uaddr, op, val, timeout, uaddr2, val3)
+#else
+extern int compat_futex_noasync(int32_t *uaddr, int op, int32_t val,
+       const struct timespec *timeout, int32_t *uaddr2, int32_t val3);
+#define futex_noasync(uaddr, op, val, timeout, uaddr2, val3)   \
+               compat_futex_noasync(uaddr, op, val, timeout, uaddr2, val3)
+extern int compat_futex_async(int32_t *uaddr, int op, int32_t val,
+       const struct timespec *timeout, int32_t *uaddr2, int32_t val3);
+#define futex_async(uaddr, op, val, timeout, uaddr2, val3)     \
+               compat_futex_async(uaddr, op, val, timeout, uaddr2, val3)
+#endif
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* _URCU_FUTEX_H */
diff --git a/urcu/hlist.h b/urcu/hlist.h
new file mode 100644 (file)
index 0000000..e3b94ce
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef _KCOMPAT_HLIST_H
+#define _KCOMPAT_HLIST_H
+
+/*
+ * Kernel sourcecode compatible lightweight single pointer list head useful
+ * for implementing hash tables
+ *
+ * Copyright (C) 2009 Novell Inc.
+ *
+ * Author: Jan Blunck <jblunck@suse.de>
+ *
+ * Copyright (C) 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free  Software Foundation.
+ */
+
+struct cds_hlist_head
+{
+       struct cds_hlist_node *next;
+};
+
+struct cds_hlist_node
+{
+       struct cds_hlist_node *next;
+       struct cds_hlist_node *prev;
+};
+
+/* Initialize a new list head.  */
+static inline void  CDS_INIT_HLIST_HEAD(struct cds_hlist_head *ptr)
+{
+       ptr->next = NULL;
+}
+
+/* Get typed element from list at a given position.  */
+#define cds_hlist_entry(ptr, type, member)                                     \
+       ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
+
+/* Add new element at the head of the list.  */
+static inline void cds_hlist_add_head (struct cds_hlist_node *newp,
+                                  struct cds_hlist_head *head)
+{
+       if (head->next)
+               head->next->prev = newp;
+
+       newp->next = head->next;
+       newp->prev = (struct cds_hlist_node *)head;
+       head->next = newp;
+}
+
+/* Remove element from list.  */
+static inline void cds_hlist_del (struct cds_hlist_node *elem)
+{
+       if (elem->next)
+               elem->next->prev = elem->prev;
+
+       elem->prev->next = elem->next;
+}
+
+#define cds_hlist_for_each_entry(entry, pos, head, member)                     \
+       for (pos = (head)->next,                                        \
+                    entry = cds_hlist_entry(pos, typeof(*entry), member);      \
+            pos != NULL;                                               \
+            pos = pos->next,                                   \
+                    entry = cds_hlist_entry(pos, typeof(*entry), member))
+
+#define cds_hlist_for_each_entry_safe(entry, pos, p, head, member)             \
+       for (pos = (head)->next,                                        \
+                    entry = cds_hlist_entry(pos, typeof(*entry), member);      \
+            (pos != NULL) && ({ p = pos->next; 1;});                   \
+            pos = p,                                                   \
+                    entry = cds_hlist_entry(pos, typeof(*entry), member))
+
+#endif /* _KCOMPAT_HLIST_H */
diff --git a/urcu/list.h b/urcu/list.h
new file mode 100644 (file)
index 0000000..ab7a470
--- /dev/null
@@ -0,0 +1,178 @@
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _CDS_LIST_H
+#define _CDS_LIST_H    1
+
+/* The definitions of this file are adopted from those which can be
+   found in the Linux kernel headers to enable people familiar with
+   the latter find their way in these sources as well.  */
+
+
+/* Basic type for the double-link list.  */
+struct cds_list_head
+{
+  struct cds_list_head *next;
+  struct cds_list_head *prev;
+};
+
+
+/* Define a variable with the head and tail of the list.  */
+#define CDS_LIST_HEAD(name) \
+  struct cds_list_head name = { &(name), &(name) }
+
+/* Initialize a new list head.  */
+#define CDS_INIT_LIST_HEAD(ptr) \
+  (ptr)->next = (ptr)->prev = (ptr)
+
+#define CDS_LIST_HEAD_INIT(name) { .prev = &(name), .next = &(name) }
+
+/* Add new element at the head of the list.  */
+static inline void
+cds_list_add (struct cds_list_head *newp, struct cds_list_head *head)
+{
+  head->next->prev = newp;
+  newp->next = head->next;
+  newp->prev = head;
+  head->next = newp;
+}
+
+
+/* Add new element at the tail of the list.  */
+static inline void
+cds_list_add_tail (struct cds_list_head *newp, struct cds_list_head *head)
+{
+  head->prev->next = newp;
+  newp->next = head;
+  newp->prev = head->prev;
+  head->prev = newp;
+}
+
+
+/* Remove element from list.  */
+static inline void
+__cds_list_del (struct cds_list_head *prev, struct cds_list_head *next)
+{
+  next->prev = prev;
+  prev->next = next;
+}
+
+/* Remove element from list.  */
+static inline void
+cds_list_del (struct cds_list_head *elem)
+{
+  __cds_list_del (elem->prev, elem->next);
+}
+
+/* Remove element from list, initializing the element's list pointers. */
+static inline void
+cds_list_del_init (struct cds_list_head *elem)
+{
+       cds_list_del(elem);
+       CDS_INIT_LIST_HEAD(elem);
+}
+
+/* delete from list, add to another list as head */
+static inline void
+cds_list_move (struct cds_list_head *elem, struct cds_list_head *head)
+{
+  __cds_list_del (elem->prev, elem->next);
+  cds_list_add (elem, head);
+}
+
+/* replace an old entry.
+ */
+static inline void
+cds_list_replace(struct cds_list_head *old, struct cds_list_head *_new)
+{
+       _new->next = old->next;
+       _new->prev = old->prev;
+       _new->prev->next = _new;
+       _new->next->prev = _new;
+}
+
+/* Join two lists.  */
+static inline void
+cds_list_splice (struct cds_list_head *add, struct cds_list_head *head)
+{
+  /* Do nothing if the list which gets added is empty.  */
+  if (add != add->next)
+    {
+      add->next->prev = head;
+      add->prev->next = head->next;
+      head->next->prev = add->prev;
+      head->next = add->next;
+    }
+}
+
+
+/* Get typed element from list at a given position.  */
+#define cds_list_entry(ptr, type, member) \
+  ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
+
+
+
+/* Iterate forward over the elements of the list.  */
+#define cds_list_for_each(pos, head) \
+  for (pos = (head)->next; pos != (head); pos = pos->next)
+
+
+/* Iterate forward over the elements of the list.  */
+#define cds_list_for_each_prev(pos, head) \
+  for (pos = (head)->prev; pos != (head); pos = pos->prev)
+
+
+/* Iterate backwards over the elements list.  The list elements can be
+   removed from the list while doing this.  */
+#define cds_list_for_each_prev_safe(pos, p, head) \
+  for (pos = (head)->prev, p = pos->prev; \
+       pos != (head); \
+       pos = p, p = pos->prev)
+
+#define cds_list_for_each_entry(pos, head, member)                             \
+       for (pos = cds_list_entry((head)->next, typeof(*pos), member);  \
+            &pos->member != (head);                                    \
+            pos = cds_list_entry(pos->member.next, typeof(*pos), member))
+
+#define cds_list_for_each_entry_reverse(pos, head, member)                     \
+       for (pos = cds_list_entry((head)->prev, typeof(*pos), member);  \
+            &pos->member != (head);                                    \
+            pos = cds_list_entry(pos->member.prev, typeof(*pos), member))
+
+#define cds_list_for_each_entry_safe(pos, p, head, member)                     \
+       for (pos = cds_list_entry((head)->next, typeof(*pos), member),  \
+                    p = cds_list_entry(pos->member.next,typeof(*pos), member); \
+            &pos->member != (head);                                    \
+            pos = p, p = cds_list_entry(pos->member.next, typeof(*pos), member))
+
+static inline int cds_list_empty(struct cds_list_head *head)
+{
+       return head == head->next;
+}
+
+static inline void cds_list_replace_init(struct cds_list_head *old,
+                                    struct cds_list_head *_new)
+{
+       struct cds_list_head *head = old->next;
+       cds_list_del(old);
+       cds_list_add_tail(_new, head);
+       CDS_INIT_LIST_HEAD(old);
+}
+
+#endif /* _CDS_LIST_H */
diff --git a/urcu/map/urcu-bp.h b/urcu/map/urcu-bp.h
new file mode 100644 (file)
index 0000000..4abe8dc
--- /dev/null
@@ -0,0 +1,67 @@
+#ifndef _URCU_BP_MAP_H
+#define _URCU_BP_MAP_H
+
+/*
+ * urcu-map.h
+ *
+ * Userspace RCU header -- name mapping to allow multiple flavors to be
+ * used in the same executable.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * LGPL-compatible code should include this header with :
+ *
+ * #define _LGPL_SOURCE
+ * #include <urcu.h>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+/* Mapping macros to allow multiple flavors in a single binary. */
+
+#define rcu_read_lock                  rcu_read_lock_bp
+#define _rcu_read_lock                 _rcu_read_lock_bp
+#define rcu_read_unlock                        rcu_read_unlock_bp
+#define _rcu_read_unlock               _rcu_read_unlock_bp
+#define rcu_register_thread            rcu_register_thread_bp
+#define rcu_unregister_thread          rcu_unregister_thread_bp
+#define rcu_init                       rcu_init_bp
+#define rcu_exit                       rcu_exit_bp
+#define synchronize_rcu                        synchronize_rcu_bp
+#define rcu_reader                     rcu_reader_bp
+#define rcu_gp_ctr                     rcu_gp_ctr_bp
+
+#define get_cpu_call_rcu_data          get_cpu_call_rcu_data_bp
+#define get_call_rcu_thread            get_call_rcu_thread_bp
+#define create_call_rcu_data           create_call_rcu_data_bp
+#define set_cpu_call_rcu_data          set_cpu_call_rcu_data_bp
+#define get_default_call_rcu_data      get_default_call_rcu_data_bp
+#define get_call_rcu_data              get_call_rcu_data_bp
+#define get_thread_call_rcu_data       get_thread_call_rcu_data_bp
+#define set_thread_call_rcu_data       set_thread_call_rcu_data_bp
+#define create_all_cpu_call_rcu_data   create_all_cpu_call_rcu_data_bp
+#define free_all_cpu_call_rcu_data     free_all_cpu_call_rcu_data_bp
+#define call_rcu                       call_rcu_bp
+
+#define defer_rcu                      defer_rcu_bp
+#define rcu_defer_register_thread      rcu_defer_register_thread_bp
+#define rcu_defer_unregister_thread    rcu_defer_unregister_thread_bp
+#define rcu_defer_barrier              rcu_defer_barrier_bp
+#define rcu_defer_barrier_thread       rcu_defer_barrier_thread_bp
+
+#endif /* _URCU_BP_MAP_H */
diff --git a/urcu/map/urcu-qsbr.h b/urcu/map/urcu-qsbr.h
new file mode 100644 (file)
index 0000000..0d88d83
--- /dev/null
@@ -0,0 +1,69 @@
+#ifndef _URCU_QSBR_MAP_H
+#define _URCU_QSBR_MAP_H
+
+/*
+ * urcu-map.h
+ *
+ * Userspace RCU header -- name mapping to allow multiple flavors to be
+ * used in the same executable.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * LGPL-compatible code should include this header with :
+ *
+ * #define _LGPL_SOURCE
+ * #include <urcu.h>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+/* Mapping macros to allow multiple flavors in a single binary. */
+
+#define rcu_read_lock                  rcu_read_lock_qsbr
+#define _rcu_read_lock                 _rcu_read_lock_qsbr
+#define rcu_read_unlock                        rcu_read_unlock_qsbr
+#define _rcu_read_unlock               _rcu_read_unlock_qsbr
+#define rcu_quiescent_state            rcu_quiescent_state_qsbr
+#define _rcu_quiescent_state           _rcu_quiescent_state_qsbr
+#define rcu_thread_offline             rcu_thread_offline_qsbr
+#define rcu_thread_online              rcu_thread_online_qsbr
+#define rcu_register_thread            rcu_register_thread_qsbr
+#define rcu_unregister_thread          rcu_unregister_thread_qsbr
+#define rcu_exit                       rcu_exit_qsbr
+#define synchronize_rcu                        synchronize_rcu_qsbr
+#define rcu_reader                     rcu_reader_qsbr
+#define rcu_gp_ctr                     rcu_gp_ctr_qsbr
+
+#define get_cpu_call_rcu_data          get_cpu_call_rcu_data_qsbr
+#define get_call_rcu_thread            get_call_rcu_thread_qsbr
+#define create_call_rcu_data           create_call_rcu_data_qsbr
+#define set_cpu_call_rcu_data          set_cpu_call_rcu_data_qsbr
+#define get_default_call_rcu_data      get_default_call_rcu_data_qsbr
+#define get_call_rcu_data              get_call_rcu_data_qsbr
+#define get_thread_call_rcu_data       get_thread_call_rcu_data_qsbr
+#define set_thread_call_rcu_data       set_thread_call_rcu_data_qsbr
+#define create_all_cpu_call_rcu_data   create_all_cpu_call_rcu_data_qsbr
+#define call_rcu                       call_rcu_qsbr
+
+#define defer_rcu                      defer_rcu_qsbr
+#define rcu_defer_register_thread      rcu_defer_register_thread_qsbr
+#define rcu_defer_unregister_thread    rcu_defer_unregister_thread_qsbr
+#define        rcu_defer_barrier               rcu_defer_barrier_qsbr
+#define rcu_defer_barrier_thread       rcu_defer_barrier_thread_qsbr
+
+#endif /* _URCU_QSBR_MAP_H */
diff --git a/urcu/map/urcu.h b/urcu/map/urcu.h
new file mode 100644 (file)
index 0000000..b55e304
--- /dev/null
@@ -0,0 +1,143 @@
+#ifndef _URCU_MAP_H
+#define _URCU_MAP_H
+
+/*
+ * urcu-map.h
+ *
+ * Userspace RCU header -- name mapping to allow multiple flavors to be
+ * used in the same executable.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * LGPL-compatible code should include this header with :
+ *
+ * #define _LGPL_SOURCE
+ * #include <urcu.h>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+/* Mapping macros to allow multiple flavors in a single binary. */
+
+#if !defined(RCU_MEMBARRIER) && !defined(RCU_SIGNAL) && !defined(RCU_MB)
+#define RCU_MB
+#endif
+
+#ifdef RCU_MEMBARRIER
+
+#define rcu_read_lock                  rcu_read_lock_memb
+#define _rcu_read_lock                 _rcu_read_lock_memb
+#define rcu_read_unlock                        rcu_read_unlock_memb
+#define _rcu_read_unlock               _rcu_read_unlock_memb
+#define rcu_register_thread            rcu_register_thread_memb
+#define rcu_unregister_thread          rcu_unregister_thread_memb
+#define rcu_init                       rcu_init_memb
+#define rcu_exit                       rcu_exit_memb
+#define synchronize_rcu                        synchronize_rcu_memb
+#define rcu_reader                     rcu_reader_memb
+#define rcu_gp_ctr                     rcu_gp_ctr_memb
+
+#define get_cpu_call_rcu_data          get_cpu_call_rcu_data_memb
+#define get_call_rcu_thread            get_call_rcu_thread_memb
+#define create_call_rcu_data           create_call_rcu_data_memb
+#define set_cpu_call_rcu_data          set_cpu_call_rcu_data_memb
+#define get_default_call_rcu_data      get_default_call_rcu_data_memb
+#define get_call_rcu_data              get_call_rcu_data_memb
+#define get_thread_call_rcu_data       get_thread_call_rcu_data_memb
+#define set_thread_call_rcu_data       set_thread_call_rcu_data_memb
+#define create_all_cpu_call_rcu_data   create_all_cpu_call_rcu_data_memb
+#define free_all_cpu_call_rcu_data     free_all_cpu_call_rcu_data_memb
+#define call_rcu                       call_rcu_memb
+
+#define defer_rcu                      defer_rcu_memb
+#define rcu_defer_register_thread      rcu_defer_register_thread_memb
+#define rcu_defer_unregister_thread    rcu_defer_unregister_thread_memb
+#define rcu_defer_barrier              rcu_defer_barrier_memb
+#define rcu_defer_barrier_thread       rcu_defer_barrier_thread_memb
+
+#elif defined(RCU_SIGNAL)
+
+#define rcu_read_lock                  rcu_read_lock_sig
+#define _rcu_read_lock                 _rcu_read_lock_sig
+#define rcu_read_unlock                        rcu_read_unlock_sig
+#define _rcu_read_unlock               _rcu_read_unlock_sig
+#define rcu_register_thread            rcu_register_thread_sig
+#define rcu_unregister_thread          rcu_unregister_thread_sig
+#define rcu_init                       rcu_init_sig
+#define rcu_exit                       rcu_exit_sig
+#define synchronize_rcu                        synchronize_rcu_sig
+#define rcu_reader                     rcu_reader_sig
+#define rcu_gp_ctr                     rcu_gp_ctr_sig
+
+#define get_cpu_call_rcu_data          get_cpu_call_rcu_data_sig
+#define get_call_rcu_thread            get_call_rcu_thread_sig
+#define create_call_rcu_data           create_call_rcu_data_sig
+#define set_cpu_call_rcu_data          set_cpu_call_rcu_data_sig
+#define get_default_call_rcu_data      get_default_call_rcu_data_sig
+#define get_call_rcu_data              get_call_rcu_data_sig
+#define get_thread_call_rcu_data       get_thread_call_rcu_data_sig
+#define set_thread_call_rcu_data       set_thread_call_rcu_data_sig
+#define create_all_cpu_call_rcu_data   create_all_cpu_call_rcu_data_sig
+#define free_all_cpu_call_rcu_data     free_all_cpu_call_rcu_data_sig
+#define call_rcu                       call_rcu_sig
+
+#define defer_rcu                      defer_rcu_sig
+#define rcu_defer_register_thread      rcu_defer_register_thread_sig
+#define rcu_defer_unregister_thread    rcu_defer_unregister_thread_sig
+#define rcu_defer_barrier              rcu_defer_barrier_sig
+#define rcu_defer_barrier_thread       rcu_defer_barrier_thread_sig
+
+#elif defined(RCU_MB)
+
+#define rcu_read_lock                  rcu_read_lock_mb
+#define _rcu_read_lock                 _rcu_read_lock_mb
+#define rcu_read_unlock                        rcu_read_unlock_mb
+#define _rcu_read_unlock               _rcu_read_unlock_mb
+#define rcu_register_thread            rcu_register_thread_mb
+#define rcu_unregister_thread          rcu_unregister_thread_mb
+#define rcu_init                       rcu_init_mb
+#define rcu_exit                       rcu_exit_mb
+#define synchronize_rcu                        synchronize_rcu_mb
+#define rcu_reader                     rcu_reader_mb
+#define rcu_gp_ctr                     rcu_gp_ctr_mb
+
+#define get_cpu_call_rcu_data          get_cpu_call_rcu_data_mb
+#define get_call_rcu_thread            get_call_rcu_thread_mb
+#define create_call_rcu_data           create_call_rcu_data_mb
+#define set_cpu_call_rcu_data          set_cpu_call_rcu_data_mb
+#define get_default_call_rcu_data      get_default_call_rcu_data_mb
+#define get_call_rcu_data              get_call_rcu_data_mb
+#define get_thread_call_rcu_data       get_thread_call_rcu_data_mb
+#define set_thread_call_rcu_data       set_thread_call_rcu_data_mb
+#define create_all_cpu_call_rcu_data   create_all_cpu_call_rcu_data_mb
+#define free_all_cpu_call_rcu_data     free_all_cpu_call_rcu_data_mb
+#define call_rcu                       call_rcu_mb
+
+#define defer_rcu                      defer_rcu_mb
+#define rcu_defer_register_thread      rcu_defer_register_thread_mb
+#define rcu_defer_unregister_thread    rcu_defer_unregister_thread_mb
+#define rcu_defer_barrier              rcu_defer_barrier_mb
+#define rcu_defer_barrier_thread       rcu_defer_barrier_thread_mb
+
+#else
+
+#error "Undefined selection"
+
+#endif
+
+#endif /* _URCU_MAP_H */
diff --git a/urcu/rcuhlist.h b/urcu/rcuhlist.h
new file mode 100644 (file)
index 0000000..ef024ab
--- /dev/null
@@ -0,0 +1,64 @@
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+   Copyright (C) 2009 Pierre-Marc Fournier
+   Conversion to RCU list.
+   Copyright (C) 2010 Mathieu Desnoyers
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _URCU_RCUHLIST_H
+#define _URCU_RCUHLIST_H
+
+#include <urcu/hlist.h>
+#include <urcu/arch.h>
+#include <urcu-pointer.h>
+
+/* Add new element at the head of the list.
+ */
+static inline void cds_hlist_add_head_rcu(struct cds_hlist_node *newp,
+                                     struct cds_hlist_head *head)
+{
+       newp->next = head->next;
+       newp->prev = (struct cds_hlist_node *)head;
+       cmm_smp_wmb();
+       if (head->next)
+               head->next->prev = newp;
+       head->next = newp;
+}
+
+/* Remove element from list. */
+static inline void cds_hlist_del_rcu(struct cds_hlist_node *elem)
+{
+       if (elem->next)
+               elem->next->prev = elem->prev;
+       elem->prev->next = elem->next;
+}
+
+
+/* Iterate through elements of the list.
+ * This must be done while rcu_read_lock() is held.
+ */
+
+#define cds_hlist_for_each_entry_rcu(entry, pos, head, member)         \
+       for (pos = rcu_dereference((head)->next),                       \
+                    entry = cds_hlist_entry(pos, typeof(*entry), member);      \
+            pos != NULL;                                               \
+            pos = rcu_dereference(pos->next),                          \
+                    entry = cds_hlist_entry(pos, typeof(*entry), member))
+
+#endif /* _URCU_RCUHLIST_H */
diff --git a/urcu/rculfqueue.h b/urcu/rculfqueue.h
new file mode 100644 (file)
index 0000000..fbef6f9
--- /dev/null
@@ -0,0 +1,98 @@
+#ifndef _URCU_RCULFQUEUE_H
+#define _URCU_RCULFQUEUE_H
+
+/*
+ * rculfqueue.h
+ *
+ * Userspace RCU library - Lock-Free RCU Queue
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/ref.h>
+#include <assert.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Lock-free RCU queue using reference counting. Enqueue and dequeue operations
+ * hold a RCU read lock to deal with cmpxchg ABA problem. This implementation
+ * keeps a dummy head node to ensure we can always update the queue locklessly.
+ * Given that this is a queue, the dummy head node must always advance as we
+ * dequeue entries. Therefore, we keep a reference count on each entry we are
+ * dequeueing, so they can be kept as dummy head node until the next dequeue, at
+ * which point their reference count will be decremented.
+ */
+
+struct cds_lfq_queue_rcu;
+
+struct cds_lfq_node_rcu {
+       struct cds_lfq_node_rcu *next;
+       struct urcu_ref ref;
+       struct cds_lfq_queue_rcu *queue;
+       struct rcu_head rcu_head;
+};
+
+struct cds_lfq_queue_rcu {
+       struct cds_lfq_node_rcu *head, *tail;
+       struct cds_lfq_node_rcu init;   /* Dummy initialization node */
+       void (*release)(struct urcu_ref *ref);
+};
+
+#ifdef _LGPL_SOURCE
+
+#include <urcu/static/rculfqueue.h>
+
+#define cds_lfq_node_init_rcu          _cds_lfq_node_init_rcu
+#define cds_lfq_init_rcu               _cds_lfq_init_rcu
+#define cds_lfq_enqueue_rcu            _cds_lfq_enqueue_rcu
+#define cds_lfq_dequeue_rcu            _cds_lfq_dequeue_rcu
+
+#else /* !_LGPL_SOURCE */
+
+extern void cds_lfq_node_init_rcu(struct cds_lfq_node_rcu *node);
+extern void cds_lfq_init_rcu(struct cds_lfq_queue_rcu *q,
+                            void (*release)(struct urcu_ref *ref));
+
+/*
+ * Should be called under rcu read lock critical section.
+ */
+extern void cds_lfq_enqueue_rcu(struct cds_lfq_queue_rcu *q,
+                               struct cds_lfq_node_rcu *node);
+
+/*
+ * Should be called under rcu read lock critical section.
+ *
+ * The entry returned by dequeue must be taken care of by doing a
+ * sequence of urcu_ref_put which release handler should do a call_rcu.
+ *
+ * In other words, the entry lfq node returned by dequeue must not be
+ * modified/re-used/freed until the reference count reaches zero and a grace
+ * period has elapsed (after the refcount reached 0).
+ */
+extern
+struct cds_lfq_node_rcu *cds_lfq_dequeue_rcu(struct cds_lfq_queue_rcu *q);
+
+#endif /* !_LGPL_SOURCE */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_RCULFQUEUE_H */
diff --git a/urcu/rculfstack.h b/urcu/rculfstack.h
new file mode 100644 (file)
index 0000000..75a580b
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef _URCU_RCULFSTACK_H
+#define _URCU_RCULFSTACK_H
+
+/*
+ * rculfstack.h
+ *
+ * Userspace RCU library - Lock-Free RCU Stack
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct cds_lfs_node_rcu {
+       struct cds_lfs_node_rcu *next;
+};
+
+struct cds_lfs_stack_rcu {
+       struct cds_lfs_node_rcu *head;
+};
+
+#ifdef _LGPL_SOURCE
+
+#include <urcu/static/rculfstack.h>
+
+#define cds_lfs_node_init_rcu  _cds_lfs_node_init_rcu
+#define cds_lfs_init_rcu       _cds_lfs_init_rcu
+#define cds_lfs_push_rcu       _cds_lfs_push_rcu
+#define cds_lfs_pop_rcu                _cds_lfs_pop_rcu
+
+#else /* !_LGPL_SOURCE */
+
+extern void cds_lfs_node_init_rcu(struct cds_lfs_node_rcu *node);
+extern void cds_lfs_init_rcu(struct cds_lfs_stack_rcu *s);
+extern void cds_lfs_push_rcu(struct cds_lfs_stack_rcu *s, struct cds_lfs_node_rcu *node);
+
+/*
+ * Should be called under rcu read lock critical section.
+ *
+ * The caller must wait for a grace period to pass before freeing the returned
+ * node or modifying the cds_lfs_node_rcu structure.
+ * Returns NULL if stack is empty.
+ */
+extern struct cds_lfs_node_rcu *cds_lfs_pop_rcu(struct cds_lfs_stack_rcu *s);
+
+#endif /* !_LGPL_SOURCE */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_RCULFSTACK_H */
diff --git a/urcu/rculist.h b/urcu/rculist.h
new file mode 100644 (file)
index 0000000..621831c
--- /dev/null
@@ -0,0 +1,77 @@
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+   Copyright (C) 2009 Pierre-Marc Fournier
+   Conversion to RCU list.
+   Copyright (C) 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _URCU_RCULIST_H
+#define _URCU_RCULIST_H
+
+#include <urcu/list.h>
+#include <urcu/arch.h>
+#include <urcu-pointer.h>
+
+/* Add new element at the head of the list.
+ */
+static inline void cds_list_add_rcu(struct cds_list_head *newp, struct cds_list_head *head)
+{
+       newp->next = head->next;
+       newp->prev = head;
+       cmm_smp_wmb();
+       head->next->prev = newp;
+       head->next = newp;
+}
+
+/* replace an old entry atomically.
+ */
+static inline void cds_list_replace_rcu(struct cds_list_head *old, struct cds_list_head *_new)
+{
+       _new->next = old->next;
+       _new->prev = old->prev;
+       rcu_assign_pointer(_new->prev->next, _new);
+       _new->next->prev = _new;
+}
+
+/* Remove element from list. */
+static inline void cds_list_del_rcu(struct cds_list_head *elem)
+{
+       elem->next->prev = elem->prev;
+       elem->prev->next = elem->next;
+}
+
+/*
+ * Iteration through all elements of the list must be done while rcu_read_lock()
+ * is held.
+ */
+
+/* Iterate forward over the elements of the list.  */
+#define cds_list_for_each_rcu(pos, head) \
+  for (pos = rcu_dereference((head)->next); pos != (head); \
+       pos = rcu_dereference(pos->next))
+
+
+/* Iterate through elements of the list.
+ */
+#define cds_list_for_each_entry_rcu(pos, head, member)                         \
+       for (pos = cds_list_entry(rcu_dereference((head)->next), typeof(*pos), member); \
+            &pos->member != (head);                                    \
+            pos = cds_list_entry(rcu_dereference(pos->member.next), typeof(*pos), member))
+
+#endif /* _URCU_RCULIST_H */
diff --git a/urcu/ref.h b/urcu/ref.h
new file mode 100644 (file)
index 0000000..a422a99
--- /dev/null
@@ -0,0 +1,48 @@
+#ifndef _URCU_REF_H
+#define _URCU_REF_H
+
+/*
+ * Userspace RCU - Reference counting
+ *
+ * Copyright (C) 2009 Novell Inc.
+ * Copyright (C) 2010 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * Author: Jan Blunck <jblunck@suse.de>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free  Software Foundation.
+ */
+
+#include <assert.h>
+#include <urcu/uatomic.h>
+
+struct urcu_ref {
+       long refcount; /* ATOMIC */
+};
+
+static inline void urcu_ref_set(struct urcu_ref *ref, long val)
+{
+       uatomic_set(&ref->refcount, val);
+}
+
+static inline void urcu_ref_init(struct urcu_ref *ref)
+{
+       urcu_ref_set(ref, 1);
+}
+
+static inline void urcu_ref_get(struct urcu_ref *ref)
+{
+       uatomic_add(&ref->refcount, 1);
+}
+
+static inline void urcu_ref_put(struct urcu_ref *ref,
+                               void (*release)(struct urcu_ref *))
+{
+       long res = uatomic_sub_return(&ref->refcount, 1);
+       assert (res >= 0);
+       if (res == 0)
+               release(ref);
+}
+
+#endif /* _URCU_REF_H */
diff --git a/urcu/static/rculfqueue.h b/urcu/static/rculfqueue.h
new file mode 100644 (file)
index 0000000..b627e45
--- /dev/null
@@ -0,0 +1,144 @@
+#ifndef _URCU_RCULFQUEUE_STATIC_H
+#define _URCU_RCULFQUEUE_STATIC_H
+
+/*
+ * rculfqueue-static.h
+ *
+ * Userspace RCU library - Lock-Free RCU Queue
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See rculfqueue.h for linking
+ * dynamically with the userspace rcu library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/ref.h>
+#include <urcu/uatomic.h>
+#include <assert.h>
+/* A urcu implementation header should be already included. */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Lock-free RCU queue using reference counting. Enqueue and dequeue operations
+ * hold a RCU read lock to deal with cmpxchg ABA problem. This implementation
+ * keeps a dummy head node to ensure we can always update the queue locklessly.
+ * Given that this is a queue, the dummy head node must always advance as we
+ * dequeue entries. Therefore, we keep a reference count on each entry we are
+ * dequeueing, so they can be kept as dummy head node until the next dequeue, at
+ * which point their reference count will be decremented.
+ */
+
+#define URCU_LFQ_PERMANENT_REF         128
+
+void _cds_lfq_node_init_rcu(struct cds_lfq_node_rcu *node)
+{
+       node->next = NULL;
+       urcu_ref_init(&node->ref);
+}
+
+void _cds_lfq_init_rcu(struct cds_lfq_queue_rcu *q,
+                      void (*release)(struct urcu_ref *ref))
+{
+       _cds_lfq_node_init_rcu(&q->init);
+       /* Make sure the initial node is never freed. */
+       urcu_ref_set(&q->init.ref, URCU_LFQ_PERMANENT_REF);
+       q->head = q->tail = &q->init;
+       q->release = release;
+}
+
+/*
+ * Should be called under rcu read lock critical section.
+ */
+void _cds_lfq_enqueue_rcu(struct cds_lfq_queue_rcu *q,
+                         struct cds_lfq_node_rcu *node)
+{
+       urcu_ref_get(&node->ref);
+       node->queue = q;
+
+       /*
+        * uatomic_cmpxchg() implicit memory barrier orders earlier stores to
+        * node before publication.
+        */
+
+       for (;;) {
+               struct cds_lfq_node_rcu *tail, *next;
+
+               tail = rcu_dereference(q->tail);
+               /*
+                * Typically expect tail->next to be NULL.
+                */
+               next = uatomic_cmpxchg(&tail->next, NULL, node);
+               if (next == NULL) {
+                       /*
+                        * Tail was at the end of queue, we successfully
+                        * appended to it.
+                        * Now move tail (another enqueue might beat
+                        * us to it, that's fine).
+                        */
+                       (void) uatomic_cmpxchg(&q->tail, tail, node);
+                       return;
+               } else {
+                       /*
+                        * Failure to append to current tail. Help moving tail
+                        * further and retry.
+                        */
+                       (void) uatomic_cmpxchg(&q->tail, tail, next);
+                       continue;
+               }
+       }
+}
+
+/*
+ * Should be called under rcu read lock critical section.
+ *
+ * The entry returned by dequeue must be taken care of by doing a
+ * sequence of urcu_ref_put which release handler should do a call_rcu.
+ *
+ * In other words, the entry lfq node returned by dequeue must not be
+ * modified/re-used/freed until the reference count reaches zero and a grace
+ * period has elapsed.
+ */
+struct cds_lfq_node_rcu *_cds_lfq_dequeue_rcu(struct cds_lfq_queue_rcu *q)
+{
+       for (;;) {
+               struct cds_lfq_node_rcu *head, *next;
+
+               head = rcu_dereference(q->head);
+               next = rcu_dereference(head->next);
+               if (next) {
+                       if (uatomic_cmpxchg(&q->head, head, next) == head) {
+                               urcu_ref_put(&head->ref, q->release);
+                               return next;
+                       } else {
+                               /* Concurrently pushed, retry */
+                               continue;
+                       }
+               } else {
+                       /* Empty */
+                       return NULL;
+               }
+       }
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_RCULFQUEUE_STATIC_H */
diff --git a/urcu/static/rculfstack.h b/urcu/static/rculfstack.h
new file mode 100644 (file)
index 0000000..3f48b7e
--- /dev/null
@@ -0,0 +1,101 @@
+#ifndef _URCU_RCULFSTACK_STATIC_H
+#define _URCU_RCULFSTACK_STATIC_H
+
+/*
+ * rculfstack-static.h
+ *
+ * Userspace RCU library - Lock-Free RCU Stack
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See rculfstack.h for linking
+ * dynamically with the userspace rcu library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <urcu/uatomic.h>
+/* A urcu implementation header should be already included. */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static inline
+void _cds_lfs_node_init_rcu(struct cds_lfs_node_rcu *node)
+{
+}
+
+static inline
+void _cds_lfs_init_rcu(struct cds_lfs_stack_rcu *s)
+{
+       s->head = NULL;
+}
+
+static inline
+void _cds_lfs_push_rcu(struct cds_lfs_stack_rcu *s, struct cds_lfs_node_rcu *node)
+{
+       struct cds_lfs_node_rcu *head = NULL;
+
+       for (;;) {
+               struct cds_lfs_node_rcu *old_head = head;
+
+               node->next = head;
+               /*
+                * uatomic_cmpxchg() implicit memory barrier orders earlier
+                * stores to node before publication.
+                */
+               head = uatomic_cmpxchg(&s->head, old_head, node);
+               if (old_head == head)
+                       break;
+       }
+}
+
+/*
+ * Should be called under rcu read-side lock.
+ *
+ * The caller must wait for a grace period to pass before freeing the returned
+ * node or modifying the cds_lfs_node_rcu structure.
+ * Returns NULL if stack is empty.
+ */
+static inline
+struct cds_lfs_node_rcu *
+_cds_lfs_pop_rcu(struct cds_lfs_stack_rcu *s)
+{
+       for (;;) {
+               struct cds_lfs_node_rcu *head;
+
+               head = rcu_dereference(s->head);
+               if (head) {
+                       struct cds_lfs_node_rcu *next = rcu_dereference(head->next);
+
+                       if (uatomic_cmpxchg(&s->head, head, next) == head) {
+                               return head;
+                       } else {
+                               /* Concurrent modification. Retry. */
+                               continue;
+                       }
+               } else {
+                       /* Empty stack */
+                       return NULL;
+               }
+       }
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_RCULFSTACK_STATIC_H */
diff --git a/urcu/static/urcu-bp.h b/urcu/static/urcu-bp.h
new file mode 100644 (file)
index 0000000..64c32ea
--- /dev/null
@@ -0,0 +1,209 @@
+#ifndef _URCU_BP_STATIC_H
+#define _URCU_BP_STATIC_H
+
+/*
+ * urcu-bp-static.h
+ *
+ * Userspace RCU header.
+ *
+ * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu.h for linking
+ * dynamically with the userspace rcu library.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#include <stdlib.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#include <urcu/compiler.h>
+#include <urcu/arch.h>
+#include <urcu/system.h>
+#include <urcu/uatomic.h>
+#include <urcu/list.h>
+
+/*
+ * This code section can only be included in LGPL 2.1 compatible source code.
+ * See below for the function call wrappers which can be used in code meant to
+ * be only linked with the Userspace RCU library. This comes with a small
+ * performance degradation on the read-side due to the added function calls.
+ * This is required to permit relinking with newer versions of the library.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Active attempts to check for reader Q.S. before calling sleep().
+ */
+#define RCU_QS_ACTIVE_ATTEMPTS 100
+
+#ifdef DEBUG_RCU
+#define rcu_assert(args...)    assert(args)
+#else
+#define rcu_assert(args...)
+#endif
+
+#ifdef DEBUG_YIELD
+#include <sched.h>
+#include <time.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#define YIELD_READ     (1 << 0)
+#define YIELD_WRITE    (1 << 1)
+
+/*
+ * Updates without RCU_MB are much slower. Account this in
+ * the delay.
+ */
+/* maximum sleep delay, in us */
+#define MAX_SLEEP 50
+
+extern unsigned int yield_active;
+extern unsigned int __thread rand_yield;
+
+static inline void debug_yield_read(void)
+{
+       if (yield_active & YIELD_READ)
+               if (rand_r(&rand_yield) & 0x1)
+                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
+}
+
+static inline void debug_yield_write(void)
+{
+       if (yield_active & YIELD_WRITE)
+               if (rand_r(&rand_yield) & 0x1)
+                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
+}
+
+static inline void debug_yield_init(void)
+{
+       rand_yield = time(NULL) ^ pthread_self();
+}
+#else
+static inline void debug_yield_read(void)
+{
+}
+
+static inline void debug_yield_write(void)
+{
+}
+
+static inline void debug_yield_init(void)
+{
+
+}
+#endif
+
+/*
+ * The trick here is that RCU_GP_CTR_PHASE must be a multiple of 8 so we can use a
+ * full 8-bits, 16-bits or 32-bits bitmask for the lower order bits.
+ */
+#define RCU_GP_COUNT           (1UL << 0)
+/* Use the amount of bits equal to half of the architecture long size */
+#define RCU_GP_CTR_PHASE               (1UL << (sizeof(long) << 2))
+#define RCU_GP_CTR_NEST_MASK   (RCU_GP_CTR_PHASE - 1)
+
+/*
+ * Used internally by _rcu_read_lock.
+ */
+extern void rcu_bp_register(void);
+
+/*
+ * Global quiescent period counter with low-order bits unused.
+ * Using a int rather than a char to eliminate false register dependencies
+ * causing stalls on some architectures.
+ */
+extern long rcu_gp_ctr;
+
+struct rcu_reader {
+       /* Data used by both reader and synchronize_rcu() */
+       long ctr;
+       /* Data used for registry */
+       struct cds_list_head node __attribute__((aligned(CAA_CACHE_LINE_SIZE)));
+       pthread_t tid;
+       int alloc;      /* registry entry allocated */
+};
+
+/*
+ * Bulletproof version keeps a pointer to a registry not part of the TLS.
+ * Adds a pointer dereference on the read-side, but won't require to unregister
+ * the reader thread.
+ */
+extern struct rcu_reader __thread *rcu_reader;
+
+static inline int rcu_old_gp_ongoing(long *value)
+{
+       long v;
+
+       if (value == NULL)
+               return 0;
+       /*
+        * Make sure both tests below are done on the same version of *value
+        * to insure consistency.
+        */
+       v = CMM_LOAD_SHARED(*value);
+       return (v & RCU_GP_CTR_NEST_MASK) &&
+                ((v ^ rcu_gp_ctr) & RCU_GP_CTR_PHASE);
+}
+
+static inline void _rcu_read_lock(void)
+{
+       long tmp;
+
+       /* Check if registered */
+       if (unlikely(!rcu_reader))
+               rcu_bp_register();
+
+       cmm_barrier();  /* Ensure the compiler does not reorder us with mutex */
+       tmp = rcu_reader->ctr;
+       /*
+        * rcu_gp_ctr is
+        *   RCU_GP_COUNT | (~RCU_GP_CTR_PHASE or RCU_GP_CTR_PHASE)
+        */
+       if (likely(!(tmp & RCU_GP_CTR_NEST_MASK))) {
+               _CMM_STORE_SHARED(rcu_reader->ctr, _CMM_LOAD_SHARED(rcu_gp_ctr));
+               /*
+                * Set active readers count for outermost nesting level before
+                * accessing the pointer.
+                */
+               cmm_smp_mb();
+       } else {
+               _CMM_STORE_SHARED(rcu_reader->ctr, tmp + RCU_GP_COUNT);
+       }
+}
+
+static inline void _rcu_read_unlock(void)
+{
+       /*
+        * Finish using rcu before decrementing the pointer.
+        */
+       cmm_smp_mb();
+       _CMM_STORE_SHARED(rcu_reader->ctr, rcu_reader->ctr - RCU_GP_COUNT);
+       cmm_barrier();  /* Ensure the compiler does not reorder us with mutex */
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* _URCU_BP_STATIC_H */
diff --git a/urcu/static/urcu-pointer.h b/urcu/static/urcu-pointer.h
new file mode 100644 (file)
index 0000000..acd7cee
--- /dev/null
@@ -0,0 +1,132 @@
+#ifndef _URCU_POINTER_STATIC_H
+#define _URCU_POINTER_STATIC_H
+
+/*
+ * urcu-pointer-static.h
+ *
+ * Userspace RCU header. Operations on pointers.
+ *
+ * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu-pointer.h for
+ * linking dynamically with the userspace rcu library.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/arch.h>
+#include <urcu/system.h>
+#include <urcu/uatomic.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+/**
+ * _rcu_dereference - reads (copy) a RCU-protected pointer to a local variable
+ * into a RCU read-side critical section. The pointer can later be safely
+ * dereferenced within the critical section.
+ *
+ * This ensures that the pointer copy is invariant thorough the whole critical
+ * section.
+ *
+ * Inserts memory barriers on architectures that require them (currently only
+ * Alpha) and documents which pointers are protected by RCU.
+ *
+ * The compiler memory barrier in CMM_LOAD_SHARED() ensures that value-speculative
+ * optimizations (e.g. VSS: Value Speculation Scheduling) does not perform the
+ * data read before the pointer read by speculating the value of the pointer.
+ * Correct ordering is ensured because the pointer is read as a volatile access.
+ * This acts as a global side-effect operation, which forbids reordering of
+ * dependent memory operations. Note that such concern about dependency-breaking
+ * optimizations will eventually be taken care of by the "memory_order_consume"
+ * addition to forthcoming C++ standard.
+ *
+ * Should match rcu_assign_pointer() or rcu_xchg_pointer().
+ */
+
+#define _rcu_dereference(p)     ({                                     \
+                               typeof(p) _________p1 = CMM_LOAD_SHARED(p); \
+                               cmm_smp_read_barrier_depends();         \
+                               (_________p1);                          \
+                               })
+
+/**
+ * _rcu_cmpxchg_pointer - same as rcu_assign_pointer, but tests if the pointer
+ * is as expected by "old". If succeeds, returns the previous pointer to the
+ * data structure, which can be safely freed after waiting for a quiescent state
+ * using synchronize_rcu(). If fails (unexpected value), returns old (which
+ * should not be freed !).
+ */
+
+#define _rcu_cmpxchg_pointer(p, old, _new)                             \
+       ({                                                              \
+               typeof(*p) _________pold = (old);                       \
+               typeof(*p) _________pnew = (_new);                      \
+               if (!__builtin_constant_p(_new) ||                      \
+                   ((_new) != NULL))                                   \
+                       cmm_wmb();                                              \
+               uatomic_cmpxchg(p, _________pold, _________pnew);       \
+       })
+
+/**
+ * _rcu_xchg_pointer - same as rcu_assign_pointer, but returns the previous
+ * pointer to the data structure, which can be safely freed after waiting for a
+ * quiescent state using synchronize_rcu().
+ */
+
+#define _rcu_xchg_pointer(p, v)                                \
+       ({                                              \
+               typeof(*p) _________pv = (v);           \
+               if (!__builtin_constant_p(v) ||         \
+                   ((v) != NULL))                      \
+                       cmm_wmb();                              \
+               uatomic_xchg(p, _________pv);           \
+       })
+
+
+#define _rcu_set_pointer(p, v)                         \
+       ({                                              \
+               typeof(*p) _________pv = (v);           \
+               if (!__builtin_constant_p(v) ||         \
+                   ((v) != NULL))                      \
+                       cmm_wmb();                              \
+               uatomic_set(p, _________pv);            \
+       })
+
+/**
+ * _rcu_assign_pointer - assign (publicize) a pointer to a new data structure
+ * meant to be read by RCU read-side critical sections. Returns the assigned
+ * value.
+ *
+ * Documents which pointers will be dereferenced by RCU read-side critical
+ * sections and adds the required memory barriers on architectures requiring
+ * them. It also makes sure the compiler does not reorder code initializing the
+ * data structure before its publication.
+ *
+ * Should match rcu_dereference_pointer().
+ */
+
+#define _rcu_assign_pointer(p, v)      _rcu_set_pointer(&(p), v)
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* _URCU_POINTER_STATIC_H */
diff --git a/urcu/static/urcu-qsbr.h b/urcu/static/urcu-qsbr.h
new file mode 100644 (file)
index 0000000..c46a7be
--- /dev/null
@@ -0,0 +1,204 @@
+#ifndef _URCU_QSBR_STATIC_H
+#define _URCU_QSBR_STATIC_H
+
+/*
+ * urcu-qsbr-static.h
+ *
+ * Userspace RCU QSBR header.
+ *
+ * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu-qsbr.h for linking
+ * dynamically with the userspace rcu QSBR library.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#include <stdlib.h>
+#include <pthread.h>
+#include <assert.h>
+#include <limits.h>
+#include <unistd.h>
+#include <stdint.h>
+
+#include <urcu/compiler.h>
+#include <urcu/arch.h>
+#include <urcu/system.h>
+#include <urcu/uatomic.h>
+#include <urcu/list.h>
+#include <urcu/futex.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+/*
+ * This code section can only be included in LGPL 2.1 compatible source code.
+ * See below for the function call wrappers which can be used in code meant to
+ * be only linked with the Userspace RCU library. This comes with a small
+ * performance degradation on the read-side due to the added function calls.
+ * This is required to permit relinking with newer versions of the library.
+ */
+
+/*
+ * If a reader is really non-cooperative and refuses to commit its
+ * rcu_reader.ctr count to memory (there is no barrier in the reader
+ * per-se), kick it after a few loops waiting for it.
+ */
+#define KICK_READER_LOOPS 10000
+
+/*
+ * Active attempts to check for reader Q.S. before calling futex().
+ */
+#define RCU_QS_ACTIVE_ATTEMPTS 100
+
+#ifdef DEBUG_RCU
+#define rcu_assert(args...)    assert(args)
+#else
+#define rcu_assert(args...)
+#endif
+
+#ifdef DEBUG_YIELD
+#include <sched.h>
+#include <time.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#define YIELD_READ     (1 << 0)
+#define YIELD_WRITE    (1 << 1)
+
+/* maximum sleep delay, in us */
+#define MAX_SLEEP 50
+
+extern unsigned int yield_active;
+extern unsigned int __thread rand_yield;
+
+static inline void debug_yield_read(void)
+{
+       if (yield_active & YIELD_READ)
+               if (rand_r(&rand_yield) & 0x1)
+                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
+}
+
+static inline void debug_yield_write(void)
+{
+       if (yield_active & YIELD_WRITE)
+               if (rand_r(&rand_yield) & 0x1)
+                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
+}
+
+static inline void debug_yield_init(void)
+{
+       rand_yield = time(NULL) ^ pthread_self();
+}
+#else
+static inline void debug_yield_read(void)
+{
+}
+
+static inline void debug_yield_write(void)
+{
+}
+
+static inline void debug_yield_init(void)
+{
+
+}
+#endif
+
+#define RCU_GP_ONLINE          (1UL << 0)
+#define RCU_GP_CTR             (1UL << 1)
+
+/*
+ * Global quiescent period counter with low-order bits unused.
+ * Using a int rather than a char to eliminate false register dependencies
+ * causing stalls on some architectures.
+ */
+extern unsigned long rcu_gp_ctr;
+
+struct rcu_reader {
+       /* Data used by both reader and synchronize_rcu() */
+       unsigned long ctr;
+       /* Data used for registry */
+       struct cds_list_head node __attribute__((aligned(CAA_CACHE_LINE_SIZE)));
+       pthread_t tid;
+};
+
+extern struct rcu_reader __thread rcu_reader;
+
+extern int32_t gp_futex;
+
+/*
+ * Wake-up waiting synchronize_rcu(). Called from many concurrent threads.
+ */
+static inline void wake_up_gp(void)
+{
+       if (unlikely(uatomic_read(&gp_futex) == -1)) {
+               uatomic_set(&gp_futex, 0);
+               futex_noasync(&gp_futex, FUTEX_WAKE, 1,
+                     NULL, NULL, 0);
+       }
+}
+
+static inline int rcu_gp_ongoing(unsigned long *ctr)
+{
+       unsigned long v;
+
+       v = CMM_LOAD_SHARED(*ctr);
+       return v && (v != rcu_gp_ctr);
+}
+
+static inline void _rcu_read_lock(void)
+{
+       rcu_assert(rcu_reader.ctr);
+}
+
+static inline void _rcu_read_unlock(void)
+{
+}
+
+static inline void _rcu_quiescent_state(void)
+{
+       cmm_smp_mb();
+       _CMM_STORE_SHARED(rcu_reader.ctr, _CMM_LOAD_SHARED(rcu_gp_ctr));
+       cmm_smp_mb();   /* write rcu_reader.ctr before read futex */
+       wake_up_gp();
+       cmm_smp_mb();
+}
+
+static inline void _rcu_thread_offline(void)
+{
+       cmm_smp_mb();
+       CMM_STORE_SHARED(rcu_reader.ctr, 0);
+       cmm_smp_mb();   /* write rcu_reader.ctr before read futex */
+       wake_up_gp();
+       cmm_barrier();  /* Ensure the compiler does not reorder us with mutex */
+}
+
+static inline void _rcu_thread_online(void)
+{
+       cmm_barrier();  /* Ensure the compiler does not reorder us with mutex */
+       _CMM_STORE_SHARED(rcu_reader.ctr, CMM_LOAD_SHARED(rcu_gp_ctr));
+       cmm_smp_mb();
+}
+
+#ifdef __cplusplus 
+}
+#endif
+
+#endif /* _URCU_QSBR_STATIC_H */
diff --git a/urcu/static/urcu.h b/urcu/static/urcu.h
new file mode 100644 (file)
index 0000000..0295a3e
--- /dev/null
@@ -0,0 +1,313 @@
+#ifndef _URCU_STATIC_H
+#define _URCU_STATIC_H
+
+/*
+ * urcu-static.h
+ *
+ * Userspace RCU header.
+ *
+ * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See urcu.h for linking
+ * dynamically with the userspace rcu library.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (c) 2009 Paul E. McKenney, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * IBM's contributions to this file may be relicensed under LGPLv2 or later.
+ */
+
+#include <stdlib.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <stdint.h>
+
+#include <urcu/compiler.h>
+#include <urcu/arch.h>
+#include <urcu/system.h>
+#include <urcu/uatomic.h>
+#include <urcu/list.h>
+#include <urcu/futex.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+/* Default is RCU_MEMBARRIER */
+#if !defined(RCU_MEMBARRIER) && !defined(RCU_MB) && !defined(RCU_SIGNAL)
+#define RCU_MEMBARRIER
+#endif
+
+/*
+ * RCU_MEMBARRIER is only possibly available on Linux. Fallback to RCU_MB
+ * otherwise.
+ */
+#if !defined(__linux__) && defined(RCU_MEMBARRIER)
+#undef RCU_MEMBARRIER
+#define RCU_MB
+#endif
+
+#ifdef RCU_MEMBARRIER
+#include <syscall.h>
+
+/* If the headers do not support SYS_membarrier, statically use RCU_MB */
+#ifdef SYS_membarrier
+# define MEMBARRIER_EXPEDITED          (1 << 0)
+# define MEMBARRIER_DELAYED            (1 << 1)
+# define MEMBARRIER_QUERY              (1 << 16)
+# define membarrier(...)               syscall(SYS_membarrier, __VA_ARGS__)
+#else
+# undef RCU_MEMBARRIER
+# define RCU_MB
+#endif
+#endif
+
+/*
+ * This code section can only be included in LGPL 2.1 compatible source code.
+ * See below for the function call wrappers which can be used in code meant to
+ * be only linked with the Userspace RCU library. This comes with a small
+ * performance degradation on the read-side due to the added function calls.
+ * This is required to permit relinking with newer versions of the library.
+ */
+
+/*
+ * The signal number used by the RCU library can be overridden with
+ * -DSIGRCU= when compiling the library.
+ * Provide backward compatibility for liburcu 0.3.x SIGURCU.
+ */
+#ifdef SIGURCU
+#define SIGRCU SIGURCU
+#endif
+
+#ifndef SIGRCU
+#define SIGRCU SIGUSR1
+#endif
+
+/*
+ * If a reader is really non-cooperative and refuses to commit its
+ * rcu_active_readers count to memory (there is no barrier in the reader
+ * per-se), kick it after a few loops waiting for it.
+ */
+#define KICK_READER_LOOPS 10000
+
+/*
+ * Active attempts to check for reader Q.S. before calling futex().
+ */
+#define RCU_QS_ACTIVE_ATTEMPTS 100
+
+#ifdef DEBUG_RCU
+#define rcu_assert(args...)    assert(args)
+#else
+#define rcu_assert(args...)
+#endif
+
+#ifdef DEBUG_YIELD
+#include <sched.h>
+#include <time.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#define YIELD_READ     (1 << 0)
+#define YIELD_WRITE    (1 << 1)
+
+/*
+ * Updates with RCU_SIGNAL are much slower. Account this in the delay.
+ */
+#ifdef RCU_SIGNAL
+/* maximum sleep delay, in us */
+#define MAX_SLEEP 30000
+#else
+#define MAX_SLEEP 50
+#endif
+
+extern unsigned int yield_active;
+extern unsigned int __thread rand_yield;
+
+static inline void debug_yield_read(void)
+{
+       if (yield_active & YIELD_READ)
+               if (rand_r(&rand_yield) & 0x1)
+                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
+}
+
+static inline void debug_yield_write(void)
+{
+       if (yield_active & YIELD_WRITE)
+               if (rand_r(&rand_yield) & 0x1)
+                       usleep(rand_r(&rand_yield) % MAX_SLEEP);
+}
+
+static inline void debug_yield_init(void)
+{
+       rand_yield = time(NULL) ^ (unsigned long) pthread_self();
+}
+#else
+static inline void debug_yield_read(void)
+{
+}
+
+static inline void debug_yield_write(void)
+{
+}
+
+static inline void debug_yield_init(void)
+{
+
+}
+#endif
+
+/*
+ * RCU memory barrier broadcast group. Currently, only broadcast to all process
+ * threads is supported (group 0).
+ *
+ * Slave barriers are only guaranteed to be ordered wrt master barriers.
+ *
+ * The pair ordering is detailed as (O: ordered, X: not ordered) :
+ *               slave  master
+ *        slave    X      O
+ *        master   O      O
+ */
+
+#define MB_GROUP_ALL           0
+#define RCU_MB_GROUP           MB_GROUP_ALL
+
+#ifdef RCU_MEMBARRIER
+extern int has_sys_membarrier;
+
+static inline void smp_mb_slave(int group)
+{
+       if (likely(has_sys_membarrier))
+               cmm_barrier();
+       else
+               cmm_smp_mb();
+}
+#endif
+
+#ifdef RCU_MB
+static inline void smp_mb_slave(int group)
+{
+       cmm_smp_mb();
+}
+#endif
+
+#ifdef RCU_SIGNAL
+static inline void smp_mb_slave(int group)
+{
+       cmm_barrier();
+}
+#endif
+
+/*
+ * The trick here is that RCU_GP_CTR_PHASE must be a multiple of 8 so we can use
+ * a full 8-bits, 16-bits or 32-bits bitmask for the lower order bits.
+ */
+#define RCU_GP_COUNT           (1UL << 0)
+/* Use the amount of bits equal to half of the architecture long size */
+#define RCU_GP_CTR_PHASE       (1UL << (sizeof(unsigned long) << 2))
+#define RCU_GP_CTR_NEST_MASK   (RCU_GP_CTR_PHASE - 1)
+
+/*
+ * Global quiescent period counter with low-order bits unused.
+ * Using a int rather than a char to eliminate false register dependencies
+ * causing stalls on some architectures.
+ */
+extern unsigned long rcu_gp_ctr;
+
+struct rcu_reader {
+       /* Data used by both reader and synchronize_rcu() */
+       unsigned long ctr;
+       char need_mb;
+       /* Data used for registry */
+       struct cds_list_head node __attribute__((aligned(CAA_CACHE_LINE_SIZE)));
+       pthread_t tid;
+};
+
+extern struct rcu_reader __thread rcu_reader;
+
+extern int32_t gp_futex;
+
+/*
+ * Wake-up waiting synchronize_rcu(). Called from many concurrent threads.
+ */
+static inline void wake_up_gp(void)
+{
+       if (unlikely(uatomic_read(&gp_futex) == -1)) {
+               uatomic_set(&gp_futex, 0);
+               futex_async(&gp_futex, FUTEX_WAKE, 1,
+                     NULL, NULL, 0);
+       }
+}
+
+static inline int rcu_gp_ongoing(unsigned long *ctr)
+{
+       unsigned long v;
+
+       /*
+        * Make sure both tests below are done on the same version of *value
+        * to insure consistency.
+        */
+       v = CMM_LOAD_SHARED(*ctr);
+       return (v & RCU_GP_CTR_NEST_MASK) &&
+                ((v ^ rcu_gp_ctr) & RCU_GP_CTR_PHASE);
+}
+
+static inline void _rcu_read_lock(void)
+{
+       unsigned long tmp;
+
+       cmm_barrier();  /* Ensure the compiler does not reorder us with mutex */
+       tmp = rcu_reader.ctr;
+       /*
+        * rcu_gp_ctr is
+        *   RCU_GP_COUNT | (~RCU_GP_CTR_PHASE or RCU_GP_CTR_PHASE)
+        */
+       if (likely(!(tmp & RCU_GP_CTR_NEST_MASK))) {
+               _CMM_STORE_SHARED(rcu_reader.ctr, _CMM_LOAD_SHARED(rcu_gp_ctr));
+               /*
+                * Set active readers count for outermost nesting level before
+                * accessing the pointer. See smp_mb_master().
+                */
+               smp_mb_slave(RCU_MB_GROUP);
+       } else {
+               _CMM_STORE_SHARED(rcu_reader.ctr, tmp + RCU_GP_COUNT);
+       }
+}
+
+static inline void _rcu_read_unlock(void)
+{
+       unsigned long tmp;
+
+       tmp = rcu_reader.ctr;
+       /*
+        * Finish using rcu before decrementing the pointer.
+        * See smp_mb_master().
+        */
+       if (likely((tmp & RCU_GP_CTR_NEST_MASK) == RCU_GP_COUNT)) {
+               smp_mb_slave(RCU_MB_GROUP);
+               _CMM_STORE_SHARED(rcu_reader.ctr, rcu_reader.ctr - RCU_GP_COUNT);
+               /* write rcu_reader.ctr before read futex */
+               smp_mb_slave(RCU_MB_GROUP);
+               wake_up_gp();
+       } else {
+               _CMM_STORE_SHARED(rcu_reader.ctr, rcu_reader.ctr - RCU_GP_COUNT);
+       }
+       cmm_barrier();  /* Ensure the compiler does not reorder us with mutex */
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_STATIC_H */
diff --git a/urcu/static/wfqueue.h b/urcu/static/wfqueue.h
new file mode 100644 (file)
index 0000000..77828ca
--- /dev/null
@@ -0,0 +1,151 @@
+#ifndef _URCU_WFQUEUE_STATIC_H
+#define _URCU_WFQUEUE_STATIC_H
+
+/*
+ * wfqueue-static.h
+ *
+ * Userspace RCU library - Queue with Wait-Free Enqueue/Blocking Dequeue
+ *
+ * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See wfqueue.h for linking
+ * dynamically with the userspace rcu library.
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <pthread.h>
+#include <assert.h>
+#include <poll.h>
+#include <urcu/compiler.h>
+#include <urcu/uatomic.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Queue with wait-free enqueue/blocking dequeue.
+ * This implementation adds a dummy head node when the queue is empty to ensure
+ * we can always update the queue locklessly.
+ *
+ * Inspired from half-wait-free/half-blocking queue implementation done by
+ * Paul E. McKenney.
+ */
+
+#define WFQ_ADAPT_ATTEMPTS             10      /* Retry if being set */
+#define WFQ_WAIT                       10      /* Wait 10 ms if being set */
+
+static inline void _cds_wfq_node_init(struct cds_wfq_node *node)
+{
+       node->next = NULL;
+}
+
+static inline void _cds_wfq_init(struct cds_wfq_queue *q)
+{
+       int ret;
+
+       _cds_wfq_node_init(&q->dummy);
+       /* Set queue head and tail */
+       q->head = &q->dummy;
+       q->tail = &q->dummy.next;
+       ret = pthread_mutex_init(&q->lock, NULL);
+       assert(!ret);
+}
+
+static inline void _cds_wfq_enqueue(struct cds_wfq_queue *q,
+                                   struct cds_wfq_node *node)
+{
+       struct cds_wfq_node **old_tail;
+
+       /*
+        * uatomic_xchg() implicit memory barrier orders earlier stores to data
+        * structure containing node and setting node->next to NULL before
+        * publication.
+        */
+       old_tail = uatomic_xchg(&q->tail, node);
+       /*
+        * At this point, dequeuers see a NULL old_tail->next, which indicates
+        * that the queue is being appended to. The following store will append
+        * "node" to the queue from a dequeuer perspective.
+        */
+       CMM_STORE_SHARED(*old_tail, node);
+}
+
+/*
+ * It is valid to reuse and free a dequeued node immediately.
+ *
+ * No need to go on a waitqueue here, as there is no possible state in which the
+ * list could cause dequeue to busy-loop needlessly while waiting for another
+ * thread to be scheduled. The queue appears empty until tail->next is set by
+ * enqueue.
+ */
+static inline struct cds_wfq_node *
+___cds_wfq_dequeue_blocking(struct cds_wfq_queue *q)
+{
+       struct cds_wfq_node *node, *next;
+       int attempt = 0;
+
+       /*
+        * Queue is empty if it only contains the dummy node.
+        */
+       if (q->head == &q->dummy && CMM_LOAD_SHARED(q->tail) == &q->dummy.next)
+               return NULL;
+       node = q->head;
+
+       /*
+        * Adaptative busy-looping waiting for enqueuer to complete enqueue.
+        */
+       while ((next = CMM_LOAD_SHARED(node->next)) == NULL) {
+               if (++attempt >= WFQ_ADAPT_ATTEMPTS) {
+                       poll(NULL, 0, WFQ_WAIT);        /* Wait for 10ms */
+                       attempt = 0;
+               } else
+                       caa_cpu_relax();
+       }
+       /*
+        * Move queue head forward.
+        */
+       q->head = next;
+       /*
+        * Requeue dummy node if we just dequeued it.
+        */
+       if (node == &q->dummy) {
+               _cds_wfq_node_init(node);
+               _cds_wfq_enqueue(q, node);
+               return ___cds_wfq_dequeue_blocking(q);
+       }
+       return node;
+}
+
+static inline struct cds_wfq_node *
+_cds_wfq_dequeue_blocking(struct cds_wfq_queue *q)
+{
+       struct cds_wfq_node *retnode;
+       int ret;
+
+       ret = pthread_mutex_lock(&q->lock);
+       assert(!ret);
+       retnode = ___cds_wfq_dequeue_blocking(q);
+       ret = pthread_mutex_unlock(&q->lock);
+       assert(!ret);
+       return retnode;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_WFQUEUE_STATIC_H */
diff --git a/urcu/static/wfstack.h b/urcu/static/wfstack.h
new file mode 100644 (file)
index 0000000..79ed3f7
--- /dev/null
@@ -0,0 +1,126 @@
+#ifndef _URCU_WFSTACK_STATIC_H
+#define _URCU_WFSTACK_STATIC_H
+
+/*
+ * wfstack-static.h
+ *
+ * Userspace RCU library - Stack with Wait-Free push, Blocking pop.
+ *
+ * TO BE INCLUDED ONLY IN LGPL-COMPATIBLE CODE. See wfstack.h for linking
+ * dynamically with the userspace rcu library.
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <pthread.h>
+#include <assert.h>
+#include <poll.h>
+#include <urcu/compiler.h>
+#include <urcu/uatomic.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CDS_WF_STACK_END                       ((void *)0x1UL)
+#define CDS_WFS_ADAPT_ATTEMPTS         10      /* Retry if being set */
+#define CDS_WFS_WAIT                   10      /* Wait 10 ms if being set */
+
+static inline
+void _cds_wfs_node_init(struct cds_wfs_node *node)
+{
+       node->next = NULL;
+}
+
+static inline
+void _cds_wfs_init(struct cds_wfs_stack *s)
+{
+       int ret;
+
+       s->head = CDS_WF_STACK_END;
+       ret = pthread_mutex_init(&s->lock, NULL);
+       assert(!ret);
+}
+
+static inline
+void _cds_wfs_push(struct cds_wfs_stack *s, struct cds_wfs_node *node)
+{
+       struct cds_wfs_node *old_head;
+
+       assert(node->next == NULL);
+       /*
+        * uatomic_xchg() implicit memory barrier orders earlier stores to node
+        * (setting it to NULL) before publication.
+        */
+       old_head = uatomic_xchg(&s->head, node);
+       /*
+        * At this point, dequeuers see a NULL node->next, they should busy-wait
+        * until node->next is set to old_head.
+        */
+       CMM_STORE_SHARED(node->next, old_head);
+}
+
+/*
+ * Returns NULL if stack is empty.
+ */
+static inline
+struct cds_wfs_node *
+___cds_wfs_pop_blocking(struct cds_wfs_stack *s)
+{
+       struct cds_wfs_node *head, *next;
+       int attempt = 0;
+
+retry:
+       head = CMM_LOAD_SHARED(s->head);
+       if (head == CDS_WF_STACK_END)
+               return NULL;
+       /*
+        * Adaptative busy-looping waiting for push to complete.
+        */
+       while ((next = CMM_LOAD_SHARED(head->next)) == NULL) {
+               if (++attempt >= CDS_WFS_ADAPT_ATTEMPTS) {
+                       poll(NULL, 0, CDS_WFS_WAIT);    /* Wait for 10ms */
+                       attempt = 0;
+               } else
+                       caa_cpu_relax();
+       }
+       if (uatomic_cmpxchg(&s->head, head, next) == head)
+               return head;
+       else
+               goto retry;             /* Concurrent modification. Retry. */
+}
+
+static inline
+struct cds_wfs_node *
+_cds_wfs_pop_blocking(struct cds_wfs_stack *s)
+{
+       struct cds_wfs_node *retnode;
+       int ret;
+
+       ret = pthread_mutex_lock(&s->lock);
+       assert(!ret);
+       retnode = ___cds_wfs_pop_blocking(s);
+       ret = pthread_mutex_unlock(&s->lock);
+       assert(!ret);
+       return retnode;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_WFSTACK_STATIC_H */
diff --git a/urcu/system.h b/urcu/system.h
new file mode 100644 (file)
index 0000000..4ae3ba0
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef _URCU_SYSTEM_H
+#define _URCU_SYSTEM_H
+
+/*
+ * system.h
+ *
+ * System definitions.
+ *
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/arch.h>
+
+/*
+ * Identify a shared load. A cmm_smp_rmc() or cmm_smp_mc() should come before the load.
+ */
+#define _CMM_LOAD_SHARED(p)           CMM_ACCESS_ONCE(p)
+
+/*
+ * Load a data from shared memory, doing a cache flush if required.
+ */
+#define CMM_LOAD_SHARED(p)                     \
+       ({                              \
+               cmm_smp_rmc();          \
+               _CMM_LOAD_SHARED(p);    \
+       })
+
+/*
+ * Identify a shared store. A cmm_smp_wmc() or cmm_smp_mc() should follow the store.
+ */
+#define _CMM_STORE_SHARED(x, v)        ({ CMM_ACCESS_ONCE(x) = (v); })
+
+/*
+ * Store v into x, where x is located in shared memory. Performs the required
+ * cache flush after writing. Returns v.
+ */
+#define CMM_STORE_SHARED(x, v)         \
+       ({                              \
+               typeof(x) _v = _CMM_STORE_SHARED(x, v); \
+               cmm_smp_wmc();          \
+               _v;                     \
+       })
+
+#endif /* _URCU_SYSTEM_H */
diff --git a/urcu/uatomic/alpha.h b/urcu/uatomic/alpha.h
new file mode 100644 (file)
index 0000000..5dceb90
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef _URCU_UATOMIC_ARCH_ALPHA_H
+#define _URCU_UATOMIC_ARCH_ALPHA_H
+
+/*
+ * Atomic exchange operations for the Alpha architecture. Let GCC do it.
+ *
+ * Copyright (c) 2010 Paolo Bonzini <pbonzini@redhat.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+#include <urcu/uatomic/generic.h>
+
+#endif /* _URCU_UATOMIC_ARCH_ALPHA_H */
diff --git a/urcu/uatomic/arm.h b/urcu/uatomic/arm.h
new file mode 100644 (file)
index 0000000..e0016b8
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef _URCU_ARCH_UATOMIC_ARM_H
+#define _URCU_ARCH_UATOMIC_ARM_H
+
+/* 
+ * Atomics for ARM.  This approach is usable on kernels back to 2.6.15.
+ *
+ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
+ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
+ * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
+ * Copyright (c) 2009      Mathieu Desnoyers
+ * Copyright (c) 2010      Paul E. McKenney, IBM Corporation
+ *                        (Adapted from uatomic_arch_ppc.h)
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ *
+ * Code inspired from libuatomic_ops-1.2, inherited in part from the
+ * Boehm-Demers-Weiser conservative garbage collector.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+/* xchg */
+#define uatomic_xchg(addr, v) __sync_lock_test_and_set(addr, v)
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/uatomic/generic.h>
+
+#endif /* _URCU_ARCH_UATOMIC_ARM_H */
diff --git a/urcu/uatomic/gcc.h b/urcu/uatomic/gcc.h
new file mode 100644 (file)
index 0000000..47ca195
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _URCU_ARCH_UATOMIC_GCC_H
+#define _URCU_ARCH_UATOMIC_GCC_H
+
+/* 
+ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
+ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
+ * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
+ * Copyright (c) 2009      Mathieu Desnoyers
+ * Copyright (c) 2010      Paul E. McKenney, IBM Corporation
+ *                        (Adapted from uatomic_arch_ppc.h)
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ *
+ * Code inspired from libuatomic_ops-1.2, inherited in part from the
+ * Boehm-Demers-Weiser conservative garbage collector.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+/*
+ * If your platform doesn't have a full set of atomics, you will need
+ * a separate uatomic_arch_*.h file for your architecture.  Otherwise,
+ * just rely on the definitions in uatomic/generic.h.
+ */
+#define UATOMIC_HAS_ATOMIC_BYTE
+#define UATOMIC_HAS_ATOMIC_SHORT
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/uatomic/generic.h>
+
+#endif /* _URCU_ARCH_UATOMIC_GCC_H */
diff --git a/urcu/uatomic/generic.h b/urcu/uatomic/generic.h
new file mode 100644 (file)
index 0000000..82b7c8c
--- /dev/null
@@ -0,0 +1,569 @@
+#ifndef _URCU_UATOMIC_GENERIC_H
+#define _URCU_UATOMIC_GENERIC_H
+
+/*
+ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
+ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
+ * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
+ * Copyright (c) 2009      Mathieu Desnoyers
+ * Copyright (c) 2010      Paolo Bonzini
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ *
+ * Code inspired from libuatomic_ops-1.2, inherited in part from the
+ * Boehm-Demers-Weiser conservative garbage collector.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef uatomic_set
+#define uatomic_set(addr, v)   CMM_STORE_SHARED(*(addr), (v))
+#endif
+
+#ifndef uatomic_read
+#define uatomic_read(addr)     CMM_LOAD_SHARED(*(addr))
+#endif
+
+#if !defined __OPTIMIZE__  || defined UATOMIC_NO_LINK_ERROR
+static inline __attribute__((always_inline))
+void _uatomic_link_error()
+{
+#ifdef ILLEGAL_INSTR
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__(ILLEGAL_INSTR);
+#else
+       __builtin_trap ();
+#endif
+}
+
+#else /* #if !defined __OPTIMIZE__  || defined UATOMIC_NO_LINK_ERROR */
+extern void _uatomic_link_error ();
+#endif /* #else #if !defined __OPTIMIZE__  || defined UATOMIC_NO_LINK_ERROR */
+
+/* cmpxchg */
+
+#ifndef uatomic_cmpxchg
+static inline __attribute__((always_inline))
+unsigned long _uatomic_cmpxchg(void *addr, unsigned long old,
+                             unsigned long _new, int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+               return __sync_val_compare_and_swap_1(addr, old, _new);
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+               return __sync_val_compare_and_swap_2(addr, old, _new);
+#endif
+       case 4:
+               return __sync_val_compare_and_swap_4(addr, old, _new);
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+               return __sync_val_compare_and_swap_8(addr, old, _new);
+#endif
+       }
+       _uatomic_link_error();
+       return 0;
+}
+
+
+#define uatomic_cmpxchg(addr, old, _new)                                   \
+       ((__typeof__(*(addr))) _uatomic_cmpxchg((addr), (unsigned long)(old),\
+                                               (unsigned long)(_new),      \
+                                               sizeof(*(addr))))
+
+
+/* uatomic_and */
+
+#ifndef uatomic_and
+static inline __attribute__((always_inline))
+void _uatomic_and(void *addr, unsigned long val,
+                 int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+               __sync_and_and_fetch_1(addr, val);
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+               __sync_and_and_fetch_2(addr, val);
+#endif
+       case 4:
+               __sync_and_and_fetch_4(addr, val);
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+               __sync_and_and_fetch_8(addr, val);
+#endif
+       }
+       _uatomic_link_error();
+       return 0;
+}
+
+#define uatomic_and(addr, v)                   \
+       (_uatomic_and((addr),                   \
+                     (unsigned long)(v),       \
+                     sizeof(*(addr))))
+#endif
+
+/* uatomic_or */
+
+#ifndef uatomic_or
+static inline __attribute__((always_inline))
+void _uatomic_or(void *addr, unsigned long val,
+                int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+               __sync_or_and_fetch_1(addr, val);
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+               __sync_or_and_fetch_2(addr, val);
+#endif
+       case 4:
+               __sync_or_and_fetch_4(addr, val);
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+               __sync_or_and_fetch_8(addr, val);
+#endif
+       }
+       _uatomic_link_error();
+       return 0;
+}
+
+#define uatomic_or(addr, v)                    \
+       (_uatomic_or((addr),                    \
+                    (unsigned long)(v),        \
+                    sizeof(*(addr))))
+#endif
+
+/* uatomic_add_return */
+
+#ifndef uatomic_add_return
+static inline __attribute__((always_inline))
+unsigned long _uatomic_add_return(void *addr, unsigned long val,
+                                int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+               return __sync_add_and_fetch_1(addr, val);
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+               return __sync_add_and_fetch_2(addr, val);
+#endif
+       case 4:
+               return __sync_add_and_fetch_4(addr, val);
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+               return __sync_add_and_fetch_8(addr, val);
+#endif
+       }
+       _uatomic_link_error();
+       return 0;
+}
+
+
+#define uatomic_add_return(addr, v)                                    \
+       ((__typeof__(*(addr))) _uatomic_add_return((addr),              \
+                                                 (unsigned long)(v),   \
+                                                 sizeof(*(addr))))
+#endif /* #ifndef uatomic_add_return */
+
+#ifndef uatomic_xchg
+/* xchg */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_exchange(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+       {
+               unsigned char old;
+
+               do {
+                       old = uatomic_read((unsigned char *)addr);
+               } while (!__sync_bool_compare_and_swap_1(addr, old, val));
+
+               return old;
+       }
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+       {
+               unsigned short old;
+
+               do {
+                       old = uatomic_read((unsigned short *)addr);
+               } while (!__sync_bool_compare_and_swap_2(addr, old, val));
+
+               return old;
+       }
+#endif
+       case 4:
+       {
+               unsigned int old;
+
+               do {
+                       old = uatomic_read((unsigned int *)addr);
+               } while (!__sync_bool_compare_and_swap_4(addr, old, val));
+
+               return old;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long old;
+
+               do {
+                       old = uatomic_read((unsigned long *)addr);
+               } while (!__sync_bool_compare_and_swap_8(addr, old, val));
+
+               return old;
+       }
+#endif
+       }
+       _uatomic_link_error();
+       return 0;
+}
+
+#define uatomic_xchg(addr, v)                                              \
+       ((__typeof__(*(addr))) _uatomic_exchange((addr), (unsigned long)(v), \
+                                               sizeof(*(addr))))
+#endif /* #ifndef uatomic_xchg */
+
+#else /* #ifndef uatomic_cmpxchg */
+
+#ifndef uatomic_and
+/* uatomic_and */
+
+static inline __attribute__((always_inline))
+void _uatomic_and(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+       {
+               unsigned char old, oldt;
+
+               oldt = uatomic_read((unsigned char *)addr);
+               do {
+                       old = oldt;
+                       oldt = _uatomic_cmpxchg(addr, old, old & val, 1);
+               } while (oldt != old);
+
+               return;
+       }
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+       {
+               unsigned short old, oldt;
+
+               oldt = uatomic_read((unsigned short *)addr);
+               do {
+                       old = oldt;
+                       oldt = _uatomic_cmpxchg(addr, old, old & val, 2);
+               } while (oldt != old);
+       }
+#endif
+       case 4:
+       {
+               unsigned int old, oldt;
+
+               oldt = uatomic_read((unsigned int *)addr);
+               do {
+                       old = oldt;
+                       oldt = _uatomic_cmpxchg(addr, old, old & val, 4);
+               } while (oldt != old);
+
+               return;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long old, oldt;
+
+               oldt = uatomic_read((unsigned long *)addr);
+               do {
+                       old = oldt;
+                       oldt = _uatomic_cmpxchg(addr, old, old & val, 8);
+               } while (oldt != old);
+
+               return;
+       }
+#endif
+       }
+       _uatomic_link_error();
+}
+
+#define uatomic_and(addr, v)           \
+       (_uatomic_and((addr),           \
+                   (unsigned long)(v), \
+                   sizeof(*(addr))))
+#endif /* #ifndef uatomic_and */
+
+#ifndef uatomic_or
+/* uatomic_or */
+
+static inline __attribute__((always_inline))
+void _uatomic_or(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+       {
+               unsigned char old, oldt;
+
+               oldt = uatomic_read((unsigned char *)addr);
+               do {
+                       old = oldt;
+                       oldt = _uatomic_cmpxchg(addr, old, old | val, 1);
+               } while (oldt != old);
+
+               return;
+       }
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+       {
+               unsigned short old, oldt;
+
+               oldt = uatomic_read((unsigned short *)addr);
+               do {
+                       old = oldt;
+                       oldt = _uatomic_cmpxchg(addr, old, old | val, 2);
+               } while (oldt != old);
+
+               return;
+       }
+#endif
+       case 4:
+       {
+               unsigned int old, oldt;
+
+               oldt = uatomic_read((unsigned int *)addr);
+               do {
+                       old = oldt;
+                       oldt = _uatomic_cmpxchg(addr, old, old | val, 4);
+               } while (oldt != old);
+
+               return;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long old, oldt;
+
+               oldt = uatomic_read((unsigned long *)addr);
+               do {
+                       old = oldt;
+                       oldt = _uatomic_cmpxchg(addr, old, old | val, 8);
+               } while (oldt != old);
+
+               return;
+       }
+#endif
+       }
+       _uatomic_link_error();
+}
+
+#define uatomic_or(addr, v)            \
+       (_uatomic_or((addr),            \
+                    (unsigned long)(v),\
+                    sizeof(*(addr))))
+#endif /* #ifndef uatomic_or */
+
+#ifndef uatomic_add_return
+/* uatomic_add_return */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_add_return(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+       {
+               unsigned char old, oldt;
+
+               oldt = uatomic_read((unsigned char *)addr);
+               do {
+                       old = oldt;
+                       oldt = uatomic_cmpxchg((unsigned char *)addr,
+                                               old, old + val);
+               } while (oldt != old);
+
+               return old + val;
+       }
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+       {
+               unsigned short old, oldt;
+
+               oldt = uatomic_read((unsigned short *)addr);
+               do {
+                       old = oldt;
+                       oldt = uatomic_cmpxchg((unsigned short *)addr,
+                                               old, old + val);
+               } while (oldt != old);
+
+               return old + val;
+       }
+#endif
+       case 4:
+       {
+               unsigned int old, oldt;
+
+               oldt = uatomic_read((unsigned int *)addr);
+               do {
+                       old = oldt;
+                       oldt = uatomic_cmpxchg((unsigned int *)addr,
+                                               old, old + val);
+               } while (oldt != old);
+
+               return old + val;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long old, oldt;
+
+               oldt = uatomic_read((unsigned long *)addr);
+               do {
+                       old = oldt;
+                       oldt = uatomic_cmpxchg((unsigned long *)addr,
+                                               old, old + val);
+               } while (oldt != old);
+
+               return old + val;
+       }
+#endif
+       }
+       _uatomic_link_error();
+       return 0;
+}
+
+#define uatomic_add_return(addr, v)                                    \
+       ((__typeof__(*(addr))) _uatomic_add_return((addr),              \
+                                                 (unsigned long)(v),   \
+                                                 sizeof(*(addr))))
+#endif /* #ifndef uatomic_add_return */
+
+#ifndef uatomic_xchg
+/* xchg */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_exchange(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+#ifdef UATOMIC_HAS_ATOMIC_BYTE
+       case 1:
+       {
+               unsigned char old, oldt;
+
+               oldt = uatomic_read((unsigned char *)addr);
+               do {
+                       old = oldt;
+                       oldt = uatomic_cmpxchg((unsigned char *)addr,
+                                               old, val);
+               } while (oldt != old);
+
+               return old;
+       }
+#endif
+#ifdef UATOMIC_HAS_ATOMIC_SHORT
+       case 2:
+       {
+               unsigned short old, oldt;
+
+               oldt = uatomic_read((unsigned short *)addr);
+               do {
+                       old = oldt;
+                       oldt = uatomic_cmpxchg((unsigned short *)addr,
+                                               old, val);
+               } while (oldt != old);
+
+               return old;
+       }
+#endif
+       case 4:
+       {
+               unsigned int old, oldt;
+
+               oldt = uatomic_read((unsigned int *)addr);
+               do {
+                       old = oldt;
+                       oldt = uatomic_cmpxchg((unsigned int *)addr,
+                                               old, val);
+               } while (oldt != old);
+
+               return old;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long old, oldt;
+
+               oldt = uatomic_read((unsigned long *)addr);
+               do {
+                       old = oldt;
+                       oldt = uatomic_cmpxchg((unsigned long *)addr,
+                                               old, val);
+               } while (oldt != old);
+
+               return old;
+       }
+#endif
+       }
+       _uatomic_link_error();
+       return 0;
+}
+
+#define uatomic_xchg(addr, v)                                              \
+       ((__typeof__(*(addr))) _uatomic_exchange((addr), (unsigned long)(v), \
+                                               sizeof(*(addr))))
+#endif /* #ifndef uatomic_xchg */
+
+#endif /* #else #ifndef uatomic_cmpxchg */
+
+/* uatomic_sub_return, uatomic_add, uatomic_sub, uatomic_inc, uatomic_dec */
+
+#ifndef uatomic_add
+#define uatomic_add(addr, v)           (void)uatomic_add_return((addr), (v))
+#endif
+
+#define uatomic_sub_return(addr, v)    uatomic_add_return((addr), -(v))
+#define uatomic_sub(addr, v)           uatomic_add((addr), -(v))
+
+#ifndef uatomic_inc
+#define uatomic_inc(addr)              uatomic_add((addr), 1)
+#endif
+
+#ifndef uatomic_dec
+#define uatomic_dec(addr)              uatomic_add((addr), -1)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_UATOMIC_GENERIC_H */
diff --git a/urcu/uatomic/ppc.h b/urcu/uatomic/ppc.h
new file mode 100644 (file)
index 0000000..3eb3d63
--- /dev/null
@@ -0,0 +1,219 @@
+#ifndef _URCU_ARCH_UATOMIC_PPC_H
+#define _URCU_ARCH_UATOMIC_PPC_H
+
+/* 
+ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
+ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
+ * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
+ * Copyright (c) 2009      Mathieu Desnoyers
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ *
+ * Code inspired from libuatomic_ops-1.2, inherited in part from the
+ * Boehm-Demers-Weiser conservative garbage collector.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#ifdef __NO_LWSYNC__
+#define LWSYNC_OPCODE  "sync\n"
+#else
+#define LWSYNC_OPCODE  "lwsync\n"
+#endif
+
+#define ILLEGAL_INSTR  ".long  0xd00d00"
+
+/*
+ * Using a isync as second barrier for exchange to provide acquire semantic.
+ * According to uatomic_ops/sysdeps/gcc/powerpc.h, the documentation is "fairly
+ * explicit that this also has acquire semantics."
+ * Derived from AO_compare_and_swap(), but removed the comparison.
+ */
+
+/* xchg */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_exchange(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+       case 4:
+       {
+               unsigned int result;
+
+               __asm__ __volatile__(
+                       LWSYNC_OPCODE
+               "1:\t"  "lwarx %0,0,%1\n"       /* load and reserve */
+                       "stwcx. %2,0,%1\n"      /* else store conditional */
+                       "bne- 1b\n"             /* retry if lost reservation */
+                       "isync\n"
+                               : "=&r"(result)
+                               : "r"(addr), "r"(val)
+                               : "memory", "cc");
+
+               return result;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long result;
+
+               __asm__ __volatile__(
+                       LWSYNC_OPCODE
+               "1:\t"  "ldarx %0,0,%1\n"       /* load and reserve */
+                       "stdcx. %2,0,%1\n"      /* else store conditional */
+                       "bne- 1b\n"             /* retry if lost reservation */
+                       "isync\n"
+                               : "=&r"(result)
+                               : "r"(addr), "r"(val)
+                               : "memory", "cc");
+
+               return result;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__(ILLEGAL_INSTR);
+       return 0;
+}
+
+#define uatomic_xchg(addr, v)                                              \
+       ((__typeof__(*(addr))) _uatomic_exchange((addr), (unsigned long)(v), \
+                                               sizeof(*(addr))))
+/* cmpxchg */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_cmpxchg(void *addr, unsigned long old,
+                             unsigned long _new, int len)
+{
+       switch (len) {
+       case 4:
+       {
+               unsigned int old_val;
+
+               __asm__ __volatile__(
+                       LWSYNC_OPCODE
+               "1:\t"  "lwarx %0,0,%1\n"       /* load and reserve */
+                       "cmpw %0,%3\n"          /* if load is not equal to */
+                       "bne 2f\n"              /* old, fail */
+                       "stwcx. %2,0,%1\n"      /* else store conditional */
+                       "bne- 1b\n"             /* retry if lost reservation */
+                       "isync\n"
+               "2:\n"
+                               : "=&r"(old_val)
+                               : "r"(addr), "r"((unsigned int)_new),
+                                 "r"((unsigned int)old)
+                               : "memory", "cc");
+
+               return old_val;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long old_val;
+
+               __asm__ __volatile__(
+                       LWSYNC_OPCODE
+               "1:\t"  "ldarx %0,0,%1\n"       /* load and reserve */
+                       "cmpd %0,%3\n"          /* if load is not equal to */
+                       "bne 2f\n"              /* old, fail */
+                       "stdcx. %2,0,%1\n"      /* else store conditional */
+                       "bne- 1b\n"             /* retry if lost reservation */
+                       "isync\n"
+               "2:\n"
+                               : "=&r"(old_val)
+                               : "r"(addr), "r"((unsigned long)_new),
+                                 "r"((unsigned long)old)
+                               : "memory", "cc");
+
+               return old_val;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__(ILLEGAL_INSTR);
+       return 0;
+}
+
+
+#define uatomic_cmpxchg(addr, old, _new)                                   \
+       ((__typeof__(*(addr))) _uatomic_cmpxchg((addr), (unsigned long)(old),\
+                                               (unsigned long)(_new),      \
+                                               sizeof(*(addr))))
+
+/* uatomic_add_return */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_add_return(void *addr, unsigned long val,
+                                int len)
+{
+       switch (len) {
+       case 4:
+       {
+               unsigned int result;
+
+               __asm__ __volatile__(
+                       LWSYNC_OPCODE
+               "1:\t"  "lwarx %0,0,%1\n"       /* load and reserve */
+                       "add %0,%2,%0\n"        /* add val to value loaded */
+                       "stwcx. %0,0,%1\n"      /* store conditional */
+                       "bne- 1b\n"             /* retry if lost reservation */
+                       "isync\n"
+                               : "=&r"(result)
+                               : "r"(addr), "r"(val)
+                               : "memory", "cc");
+
+               return result;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long result;
+
+               __asm__ __volatile__(
+                       LWSYNC_OPCODE
+               "1:\t"  "ldarx %0,0,%1\n"       /* load and reserve */
+                       "add %0,%2,%0\n"        /* add val to value loaded */
+                       "stdcx. %0,0,%1\n"      /* store conditional */
+                       "bne- 1b\n"             /* retry if lost reservation */
+                       "isync\n"
+                               : "=&r"(result)
+                               : "r"(addr), "r"(val)
+                               : "memory", "cc");
+
+               return result;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__(ILLEGAL_INSTR);
+       return 0;
+}
+
+
+#define uatomic_add_return(addr, v)                                    \
+       ((__typeof__(*(addr))) _uatomic_add_return((addr),              \
+                                                 (unsigned long)(v),   \
+                                                 sizeof(*(addr))))
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/uatomic/generic.h>
+
+#endif /* _URCU_ARCH_UATOMIC_PPC_H */
diff --git a/urcu/uatomic/s390.h b/urcu/uatomic/s390.h
new file mode 100644 (file)
index 0000000..b274c1c
--- /dev/null
@@ -0,0 +1,160 @@
+#ifndef _URCU_UATOMIC_ARCH_S390_H
+#define _URCU_UATOMIC_ARCH_S390_H
+
+/*
+ * Atomic exchange operations for the S390 architecture. Based on information
+ * taken from the Principles of Operation Appendix A "Conditional Swapping
+ * Instructions (CS, CDS)".
+ *
+ * Copyright (c) 2009 Novell, Inc.
+ * Author: Jan Blunck <jblunck@suse.de>
+ * Copyright (c) 2009 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
+#define COMPILER_HAVE_SHORT_MEM_OPERAND
+#endif
+
+/*
+ * MEMOP assembler operand rules:
+ * - op refer to MEMOP_IN operand
+ * - MEMOP_IN can expand to more than a single operand. Use it at the end of
+ *   operand list only.
+ */
+
+#ifdef COMPILER_HAVE_SHORT_MEM_OPERAND
+
+#define MEMOP_OUT(addr)        "=Q" (*(addr))
+#define MEMOP_IN(addr) "Q" (*(addr))
+#define MEMOP_REF(op)  #op             /* op refer to MEMOP_IN operand */
+
+#else /* !COMPILER_HAVE_SHORT_MEM_OPERAND */
+
+#define MEMOP_OUT(addr)        "=m" (*(addr))
+#define MEMOP_IN(addr) "a" (addr), "m" (*(addr))
+#define MEMOP_REF(op)  "0(" #op ")"    /* op refer to MEMOP_IN operand */
+
+#endif /* !COMPILER_HAVE_SHORT_MEM_OPERAND */
+
+struct __uatomic_dummy {
+       unsigned long v[10];
+};
+#define __hp(x)        ((struct __uatomic_dummy *)(x))
+
+/* xchg */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_exchange(volatile void *addr, unsigned long val, int len)
+{
+       switch (len) {
+       case 4:
+       {
+               unsigned int old_val;
+
+               __asm__ __volatile__(
+                       "0:     cs %0,%2," MEMOP_REF(%3) "\n"
+                       "       brc 4,0b\n"
+                       : "=&r" (old_val), MEMOP_OUT (__hp(addr))
+                       : "r" (val), MEMOP_IN (__hp(addr))
+                       : "memory", "cc");
+               return old_val;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long old_val;
+
+               __asm__ __volatile__(
+                       "0:     csg %0,%2," MEMOP_REF(%3) "\n"
+                       "       brc 4,0b\n"
+                       : "=&r" (old_val), MEMOP_OUT (__hp(addr))
+                       : "r" (val), MEMOP_IN (__hp(addr))
+                       : "memory", "cc");
+               return old_val;
+       }
+#endif
+       default:
+               __asm__ __volatile__(".long     0xd00d00");
+       }
+
+       return 0;
+}
+
+#define uatomic_xchg(addr, v)                                              \
+       (__typeof__(*(addr))) _uatomic_exchange((addr), (unsigned long)(v), \
+                                              sizeof(*(addr)))
+
+/* cmpxchg */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_cmpxchg(void *addr, unsigned long old,
+                              unsigned long _new, int len)
+{
+       switch (len) {
+       case 4:
+       {
+               unsigned int old_val = (unsigned int)old;
+
+               __asm__ __volatile__(
+                       "       cs %0,%2," MEMOP_REF(%3) "\n"
+                       : "+r" (old_val), MEMOP_OUT (__hp(addr))
+                       : "r" (_new), MEMOP_IN (__hp(addr))
+                       : "memory", "cc");
+               return old_val;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               __asm__ __volatile__(
+                       "       csg %0,%2," MEMOP_REF(%3) "\n"
+                       : "+r" (old), MEMOP_OUT (__hp(addr))
+                       : "r" (_new), MEMOP_IN (__hp(addr))
+                       : "memory", "cc");
+               return old;
+       }
+#endif
+       default:
+               __asm__ __volatile__(".long     0xd00d00");
+       }
+
+       return 0;
+}
+
+#define uatomic_cmpxchg(addr, old, _new)                               \
+       (__typeof__(*(addr))) _uatomic_cmpxchg((addr),                  \
+                                              (unsigned long)(old),    \
+                                              (unsigned long)(_new),   \
+                                              sizeof(*(addr)))
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/uatomic/generic.h>
+
+#endif /* _URCU_UATOMIC_ARCH_S390_H */
diff --git a/urcu/uatomic/sparc64.h b/urcu/uatomic/sparc64.h
new file mode 100644 (file)
index 0000000..d9ecada
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef _URCU_ARCH_UATOMIC_SPARC64_H
+#define _URCU_ARCH_UATOMIC_SPARC64_H
+
+/* 
+ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
+ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
+ * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved.
+ * Copyright (c) 2009      Mathieu Desnoyers
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ *
+ * Code inspired from libuatomic_ops-1.2, inherited in part from the
+ * Boehm-Demers-Weiser conservative garbage collector.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+/* cmpxchg */
+
+static inline __attribute__((always_inline))
+unsigned long _uatomic_cmpxchg(void *addr, unsigned long old,
+                             unsigned long _new, int len)
+{
+       switch (len) {
+       case 4:
+       {
+               __asm__ __volatile__ (
+                       "membar #StoreLoad | #LoadLoad\n\t"
+                        "cas [%1],%2,%0\n\t"
+                        "membar #StoreLoad | #StoreStore\n\t"
+                        : "+&r" (_new)
+                        : "r" (addr), "r" (old)
+                        : "memory");
+
+               return _new;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               __asm__ __volatile__ (
+                       "membar #StoreLoad | #LoadLoad\n\t"
+                        "casx [%1],%2,%0\n\t"
+                        "membar #StoreLoad | #StoreStore\n\t"
+                        : "+&r" (_new)
+                        : "r" (addr), "r" (old)
+                        : "memory");
+
+               return _new;
+       }
+#endif
+       }
+       __builtin_trap();
+       return 0;
+}
+
+
+#define uatomic_cmpxchg(addr, old, _new)                                   \
+       ((__typeof__(*(addr))) _uatomic_cmpxchg((addr), (unsigned long)(old),\
+                                               (unsigned long)(_new),      \
+                                               sizeof(*(addr))))
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/uatomic/generic.h>
+
+#endif /* _URCU_ARCH_UATOMIC_PPC_H */
diff --git a/urcu/uatomic/unknown.h b/urcu/uatomic/unknown.h
new file mode 100644 (file)
index 0000000..6fb4eb3
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef _URCU_ARCH_UATOMIC_UNKNOWN_H
+#define _URCU_ARCH_UATOMIC_UNKNOWN_H
+
+/* 
+ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
+ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
+ * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
+ * Copyright (c) 2009      Mathieu Desnoyers
+ * Copyright (c) 2010      Paul E. McKenney, IBM Corporation
+ *                        (Adapted from uatomic_arch_ppc.h)
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ */
+
+/* See configure.ac for the list of recognized architectures.  */
+#error "Cannot build: unrecognized architecture detected."
+
+#endif /* _URCU_ARCH_UATOMIC_UNKNOWN_H */
diff --git a/urcu/uatomic/x86.h b/urcu/uatomic/x86.h
new file mode 100644 (file)
index 0000000..e064b9e
--- /dev/null
@@ -0,0 +1,594 @@
+#ifndef _URCU_ARCH_UATOMIC_X86_H
+#define _URCU_ARCH_UATOMIC_X86_H
+
+/* 
+ * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved.
+ * Copyright (c) 1996-1999 by Silicon Graphics.  All rights reserved.
+ * Copyright (c) 1999-2004 Hewlett-Packard Development Company, L.P.
+ * Copyright (c) 2009      Mathieu Desnoyers
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ *
+ * Code inspired from libuatomic_ops-1.2, inherited in part from the
+ * Boehm-Demers-Weiser conservative garbage collector.
+ */
+
+#include <urcu/compiler.h>
+#include <urcu/system.h>
+
+#define UATOMIC_HAS_ATOMIC_BYTE
+#define UATOMIC_HAS_ATOMIC_SHORT
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+/*
+ * Derived from AO_compare_and_swap() and AO_test_and_set_full().
+ */
+
+struct __uatomic_dummy {
+       unsigned long v[10];
+};
+#define __hp(x)        ((struct __uatomic_dummy *)(x))
+
+#define _uatomic_set(addr, v)  CMM_STORE_SHARED(*(addr), (v))
+
+/* cmpxchg */
+
+static inline __attribute__((always_inline))
+unsigned long __uatomic_cmpxchg(void *addr, unsigned long old,
+                             unsigned long _new, int len)
+{
+       switch (len) {
+       case 1:
+       {
+               unsigned char result = old;
+
+               __asm__ __volatile__(
+               "lock; cmpxchgb %2, %1"
+                       : "+a"(result), "+m"(*__hp(addr))
+                       : "q"((unsigned char)_new)
+                       : "memory");
+               return result;
+       }
+       case 2:
+       {
+               unsigned short result = old;
+
+               __asm__ __volatile__(
+               "lock; cmpxchgw %2, %1"
+                       : "+a"(result), "+m"(*__hp(addr))
+                       : "r"((unsigned short)_new)
+                       : "memory");
+               return result;
+       }
+       case 4:
+       {
+               unsigned int result = old;
+
+               __asm__ __volatile__(
+               "lock; cmpxchgl %2, %1"
+                       : "+a"(result), "+m"(*__hp(addr))
+                       : "r"((unsigned int)_new)
+                       : "memory");
+               return result;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long result = old;
+
+               __asm__ __volatile__(
+               "lock; cmpxchgq %2, %1"
+                       : "+a"(result), "+m"(*__hp(addr))
+                       : "r"((unsigned long)_new)
+                       : "memory");
+               return result;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__("ud2");
+       return 0;
+}
+
+#define _uatomic_cmpxchg(addr, old, _new)                                    \
+       ((__typeof__(*(addr))) __uatomic_cmpxchg((addr), (unsigned long)(old),\
+                                               (unsigned long)(_new),        \
+                                               sizeof(*(addr))))
+
+/* xchg */
+
+static inline __attribute__((always_inline))
+unsigned long __uatomic_exchange(void *addr, unsigned long val, int len)
+{
+       /* Note: the "xchg" instruction does not need a "lock" prefix. */
+       switch (len) {
+       case 1:
+       {
+               unsigned char result;
+               __asm__ __volatile__(
+               "xchgb %0, %1"
+                       : "=q"(result), "+m"(*__hp(addr))
+                       : "0" ((unsigned char)val)
+                       : "memory");
+               return result;
+       }
+       case 2:
+       {
+               unsigned short result;
+               __asm__ __volatile__(
+               "xchgw %0, %1"
+                       : "=r"(result), "+m"(*__hp(addr))
+                       : "0" ((unsigned short)val)
+                       : "memory");
+               return result;
+       }
+       case 4:
+       {
+               unsigned int result;
+               __asm__ __volatile__(
+               "xchgl %0, %1"
+                       : "=r"(result), "+m"(*__hp(addr))
+                       : "0" ((unsigned int)val)
+                       : "memory");
+               return result;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long result;
+               __asm__ __volatile__(
+               "xchgq %0, %1"
+                       : "=r"(result), "+m"(*__hp(addr))
+                       : "0" ((unsigned long)val)
+                       : "memory");
+               return result;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__("ud2");
+       return 0;
+}
+
+#define _uatomic_xchg(addr, v)                                               \
+       ((__typeof__(*(addr))) __uatomic_exchange((addr), (unsigned long)(v), \
+                                               sizeof(*(addr))))
+
+/* uatomic_add_return */
+
+static inline __attribute__((always_inline))
+unsigned long __uatomic_add_return(void *addr, unsigned long val,
+                                int len)
+{
+       switch (len) {
+       case 1:
+       {
+               unsigned char result = val;
+
+               __asm__ __volatile__(
+               "lock; xaddb %1, %0"
+                       : "+m"(*__hp(addr)), "+q" (result)
+                       :
+                       : "memory");
+               return result + (unsigned char)val;
+       }
+       case 2:
+       {
+               unsigned short result = val;
+
+               __asm__ __volatile__(
+               "lock; xaddw %1, %0"
+                       : "+m"(*__hp(addr)), "+r" (result)
+                       :
+                       : "memory");
+               return result + (unsigned short)val;
+       }
+       case 4:
+       {
+               unsigned int result = val;
+
+               __asm__ __volatile__(
+               "lock; xaddl %1, %0"
+                       : "+m"(*__hp(addr)), "+r" (result)
+                       :
+                       : "memory");
+               return result + (unsigned int)val;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               unsigned long result = val;
+
+               __asm__ __volatile__(
+               "lock; xaddq %1, %0"
+                       : "+m"(*__hp(addr)), "+r" (result)
+                       :
+                       : "memory");
+               return result + (unsigned long)val;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__("ud2");
+       return 0;
+}
+
+#define _uatomic_add_return(addr, v)                                   \
+       ((__typeof__(*(addr))) __uatomic_add_return((addr),             \
+                                                 (unsigned long)(v),   \
+                                                 sizeof(*(addr))))
+
+/* uatomic_and */
+
+static inline __attribute__((always_inline))
+void __uatomic_and(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+       case 1:
+       {
+               __asm__ __volatile__(
+               "lock; andb %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "iq" ((unsigned char)val)
+                       : "memory");
+               return;
+       }
+       case 2:
+       {
+               __asm__ __volatile__(
+               "lock; andw %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "ir" ((unsigned short)val)
+                       : "memory");
+               return;
+       }
+       case 4:
+       {
+               __asm__ __volatile__(
+               "lock; andl %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "ir" ((unsigned int)val)
+                       : "memory");
+               return;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               __asm__ __volatile__(
+               "lock; andq %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "er" ((unsigned long)val)
+                       : "memory");
+               return;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__("ud2");
+       return;
+}
+
+#define _uatomic_and(addr, v)                                             \
+       (__uatomic_and((addr), (unsigned long)(v), sizeof(*(addr))))
+
+/* uatomic_or */
+
+static inline __attribute__((always_inline))
+void __uatomic_or(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+       case 1:
+       {
+               __asm__ __volatile__(
+               "lock; orb %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "iq" ((unsigned char)val)
+                       : "memory");
+               return;
+       }
+       case 2:
+       {
+               __asm__ __volatile__(
+               "lock; orw %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "ir" ((unsigned short)val)
+                       : "memory");
+               return;
+       }
+       case 4:
+       {
+               __asm__ __volatile__(
+               "lock; orl %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "ir" ((unsigned int)val)
+                       : "memory");
+               return;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               __asm__ __volatile__(
+               "lock; orq %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "er" ((unsigned long)val)
+                       : "memory");
+               return;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__("ud2");
+       return;
+}
+
+#define _uatomic_or(addr, v)                                              \
+       (__uatomic_or((addr), (unsigned long)(v), sizeof(*(addr))))
+
+/* uatomic_add */
+
+static inline __attribute__((always_inline))
+void __uatomic_add(void *addr, unsigned long val, int len)
+{
+       switch (len) {
+       case 1:
+       {
+               __asm__ __volatile__(
+               "lock; addb %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "iq" ((unsigned char)val)
+                       : "memory");
+               return;
+       }
+       case 2:
+       {
+               __asm__ __volatile__(
+               "lock; addw %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "ir" ((unsigned short)val)
+                       : "memory");
+               return;
+       }
+       case 4:
+       {
+               __asm__ __volatile__(
+               "lock; addl %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "ir" ((unsigned int)val)
+                       : "memory");
+               return;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               __asm__ __volatile__(
+               "lock; addq %1, %0"
+                       : "=m"(*__hp(addr))
+                       : "er" ((unsigned long)val)
+                       : "memory");
+               return;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__("ud2");
+       return;
+}
+
+#define _uatomic_add(addr, v)                                             \
+       (__uatomic_add((addr), (unsigned long)(v), sizeof(*(addr))))
+
+
+/* uatomic_inc */
+
+static inline __attribute__((always_inline))
+void __uatomic_inc(void *addr, int len)
+{
+       switch (len) {
+       case 1:
+       {
+               __asm__ __volatile__(
+               "lock; incb %0"
+                       : "=m"(*__hp(addr))
+                       :
+                       : "memory");
+               return;
+       }
+       case 2:
+       {
+               __asm__ __volatile__(
+               "lock; incw %0"
+                       : "=m"(*__hp(addr))
+                       :
+                       : "memory");
+               return;
+       }
+       case 4:
+       {
+               __asm__ __volatile__(
+               "lock; incl %0"
+                       : "=m"(*__hp(addr))
+                       :
+                       : "memory");
+               return;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               __asm__ __volatile__(
+               "lock; incq %0"
+                       : "=m"(*__hp(addr))
+                       :
+                       : "memory");
+               return;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__("ud2");
+       return;
+}
+
+#define _uatomic_inc(addr)     (__uatomic_inc((addr), sizeof(*(addr))))
+
+/* uatomic_dec */
+
+static inline __attribute__((always_inline))
+void __uatomic_dec(void *addr, int len)
+{
+       switch (len) {
+       case 1:
+       {
+               __asm__ __volatile__(
+               "lock; decb %0"
+                       : "=m"(*__hp(addr))
+                       :
+                       : "memory");
+               return;
+       }
+       case 2:
+       {
+               __asm__ __volatile__(
+               "lock; decw %0"
+                       : "=m"(*__hp(addr))
+                       :
+                       : "memory");
+               return;
+       }
+       case 4:
+       {
+               __asm__ __volatile__(
+               "lock; decl %0"
+                       : "=m"(*__hp(addr))
+                       :
+                       : "memory");
+               return;
+       }
+#if (CAA_BITS_PER_LONG == 64)
+       case 8:
+       {
+               __asm__ __volatile__(
+               "lock; decq %0"
+                       : "=m"(*__hp(addr))
+                       :
+                       : "memory");
+               return;
+       }
+#endif
+       }
+       /* generate an illegal instruction. Cannot catch this with linker tricks
+        * when optimizations are disabled. */
+       __asm__ __volatile__("ud2");
+       return;
+}
+
+#define _uatomic_dec(addr)     (__uatomic_dec((addr), sizeof(*(addr))))
+
+#if ((CAA_BITS_PER_LONG != 64) && defined(CONFIG_RCU_COMPAT_ARCH))
+extern int __rcu_cas_avail;
+extern int __rcu_cas_init(void);
+
+#define UATOMIC_COMPAT(insn)                                                   \
+       ((likely(__rcu_cas_avail > 0))                                          \
+       ? (_uatomic_##insn)                                                     \
+               : ((unlikely(__rcu_cas_avail < 0)                               \
+                       ? ((__rcu_cas_init() > 0)                               \
+                               ? (_uatomic_##insn)                             \
+                               : (compat_uatomic_##insn))                      \
+                       : (compat_uatomic_##insn))))
+
+extern unsigned long _compat_uatomic_set(void *addr,
+                                        unsigned long _new, int len);
+#define compat_uatomic_set(addr, _new)                                        \
+       ((__typeof__(*(addr))) _compat_uatomic_set((addr),                     \
+                                               (unsigned long)(_new),         \
+                                               sizeof(*(addr))))
+
+
+extern unsigned long _compat_uatomic_xchg(void *addr,
+                                         unsigned long _new, int len);
+#define compat_uatomic_xchg(addr, _new)                                               \
+       ((__typeof__(*(addr))) _compat_uatomic_xchg((addr),                    \
+                                               (unsigned long)(_new),         \
+                                               sizeof(*(addr))))
+
+extern unsigned long _compat_uatomic_cmpxchg(void *addr, unsigned long old,
+                                            unsigned long _new, int len);
+#define compat_uatomic_cmpxchg(addr, old, _new)                                       \
+       ((__typeof__(*(addr))) _compat_uatomic_cmpxchg((addr),                 \
+                                               (unsigned long)(old),          \
+                                               (unsigned long)(_new),         \
+                                               sizeof(*(addr))))
+
+extern void _compat_uatomic_and(void *addr, unsigned long _new, int len);
+#define compat_uatomic_and(addr, v)                                   \
+       (_compat_uatomic_and((addr),                                   \
+                       (unsigned long)(v),                            \
+                       sizeof(*(addr))))
+
+extern void _compat_uatomic_or(void *addr, unsigned long _new, int len);
+#define compat_uatomic_or(addr, v)                                    \
+       (_compat_uatomic_or((addr),                                    \
+                         (unsigned long)(v),                          \
+                         sizeof(*(addr))))
+
+extern unsigned long _compat_uatomic_add_return(void *addr,
+                                               unsigned long _new, int len);
+#define compat_uatomic_add_return(addr, v)                            \
+       ((__typeof__(*(addr))) _compat_uatomic_add_return((addr),      \
+                                                  (unsigned long)(v), \
+                                                  sizeof(*(addr))))
+
+#define compat_uatomic_add(addr, v)                                           \
+               ((void)compat_uatomic_add_return((addr), (v)))
+#define compat_uatomic_inc(addr)                                              \
+               (compat_uatomic_add((addr), 1))
+#define compat_uatomic_dec(addr)                                              \
+               (compat_uatomic_add((addr), -1))
+
+#else
+#define UATOMIC_COMPAT(insn)   (_uatomic_##insn)
+#endif
+
+/* Read is atomic even in compat mode */
+#define uatomic_set(addr, v)                   \
+               UATOMIC_COMPAT(set(addr, v))
+
+#define uatomic_cmpxchg(addr, old, _new)       \
+               UATOMIC_COMPAT(cmpxchg(addr, old, _new))
+#define uatomic_xchg(addr, v)                  \
+               UATOMIC_COMPAT(xchg(addr, v))
+#define uatomic_and(addr, v)           \
+               UATOMIC_COMPAT(and(addr, v))
+#define uatomic_or(addr, v)            \
+               UATOMIC_COMPAT(or(addr, v))
+#define uatomic_add_return(addr, v)            \
+               UATOMIC_COMPAT(add_return(addr, v))
+
+#define uatomic_add(addr, v)   UATOMIC_COMPAT(add(addr, v))
+#define uatomic_inc(addr)      UATOMIC_COMPAT(inc(addr))
+#define uatomic_dec(addr)      UATOMIC_COMPAT(dec(addr))
+
+#ifdef __cplusplus 
+}
+#endif
+
+#include <urcu/uatomic/generic.h>
+
+#endif /* _URCU_ARCH_UATOMIC_X86_H */
diff --git a/urcu/uatomic_arch.h b/urcu/uatomic_arch.h
new file mode 100644 (file)
index 0000000..baaa7a7
--- /dev/null
@@ -0,0 +1,2 @@
+#warning "urcu/uatomic_arch.h is deprecated. Please include urcu/uatomic.h instead."
+#include <urcu/uatomic.h>
diff --git a/urcu/urcu-futex.h b/urcu/urcu-futex.h
new file mode 100644 (file)
index 0000000..a1abffb
--- /dev/null
@@ -0,0 +1,2 @@
+#warning "urcu/urcu-futex.h is deprecated. Please include urcu/futex.h instead."
+#include <urcu/futex.h>
diff --git a/urcu/urcu_ref.h b/urcu/urcu_ref.h
new file mode 100644 (file)
index 0000000..5579ca6
--- /dev/null
@@ -0,0 +1,2 @@
+#warning "urcu/urcu_ref.h is deprecated. Please include urcu/ref.h instead."
+#include <urcu/ref.h>
diff --git a/urcu/wfqueue.h b/urcu/wfqueue.h
new file mode 100644 (file)
index 0000000..03a73f1
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef _URCU_WFQUEUE_H
+#define _URCU_WFQUEUE_H
+
+/*
+ * wfqueue.h
+ *
+ * Userspace RCU library - Queue with Wait-Free Enqueue/Blocking Dequeue
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <pthread.h>
+#include <assert.h>
+#include <urcu/compiler.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Queue with wait-free enqueue/blocking dequeue.
+ * This implementation adds a dummy head node when the queue is empty to ensure
+ * we can always update the queue locklessly.
+ *
+ * Inspired from half-wait-free/half-blocking queue implementation done by
+ * Paul E. McKenney.
+ */
+
+struct cds_wfq_node {
+       struct cds_wfq_node *next;
+};
+
+struct cds_wfq_queue {
+       struct cds_wfq_node *head, **tail;
+       struct cds_wfq_node dummy;      /* Dummy node */
+       pthread_mutex_t lock;
+};
+
+#ifdef _LGPL_SOURCE
+
+#include <urcu/static/wfqueue.h>
+
+#define cds_wfq_node_init              _cds_wfq_node_init
+#define cds_wfq_init           _cds_wfq_init
+#define cds_wfq_enqueue                _cds_wfq_enqueue
+#define __cds_wfq_dequeue_blocking     ___cds_wfq_dequeue_blocking
+#define cds_wfq_dequeue_blocking       _cds_wfq_dequeue_blocking
+
+#else /* !_LGPL_SOURCE */
+
+extern void cds_wfq_node_init(struct cds_wfq_node *node);
+extern void cds_wfq_init(struct cds_wfq_queue *q);
+extern void cds_wfq_enqueue(struct cds_wfq_queue *q, struct cds_wfq_node *node);
+/* __cds_wfq_dequeue_blocking: caller ensures mutual exclusion between dequeues */
+extern struct cds_wfq_node *__cds_wfq_dequeue_blocking(struct cds_wfq_queue *q);
+extern struct cds_wfq_node *cds_wfq_dequeue_blocking(struct cds_wfq_queue *q);
+
+#endif /* !_LGPL_SOURCE */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_WFQUEUE_H */
diff --git a/urcu/wfstack.h b/urcu/wfstack.h
new file mode 100644 (file)
index 0000000..354646d
--- /dev/null
@@ -0,0 +1,68 @@
+#ifndef _URCU_WFSTACK_H
+#define _URCU_WFSTACK_H
+
+/*
+ * wfstack.h
+ *
+ * Userspace RCU library - Stack with Wait-Free push, Blocking pop.
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <pthread.h>
+#include <assert.h>
+#include <urcu/compiler.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct cds_wfs_node {
+       struct cds_wfs_node *next;
+};
+
+struct cds_wfs_stack {
+       struct cds_wfs_node *head;
+       pthread_mutex_t lock;
+};
+
+#ifdef _LGPL_SOURCE
+
+#include <urcu/static/wfstack.h>
+
+#define cds_wfs_node_init              _cds_wfs_node_init
+#define cds_wfs_init           _cds_wfs_init
+#define cds_wfs_push           _cds_wfs_push
+#define __cds_wfs_pop_blocking ___cds_wfs_pop_blocking
+#define cds_wfs_pop_blocking   _cds_wfs_pop_blocking
+
+#else /* !_LGPL_SOURCE */
+
+extern void cds_wfs_node_init(struct cds_wfs_node *node);
+extern void cds_wfs_init(struct cds_wfs_stack *s);
+extern void cds_wfs_push(struct cds_wfs_stack *s, struct cds_wfs_node *node);
+/* __cds_wfs_pop_blocking: caller ensures mutual exclusion between pops */
+extern struct cds_wfs_node *__cds_wfs_pop_blocking(struct cds_wfs_stack *s);
+extern struct cds_wfs_node *cds_wfs_pop_blocking(struct cds_wfs_stack *s);
+
+#endif /* !_LGPL_SOURCE */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _URCU_WFSTACK_H */
diff --git a/wfqueue.c b/wfqueue.c
new file mode 100644 (file)
index 0000000..3337171
--- /dev/null
+++ b/wfqueue.c
@@ -0,0 +1,54 @@
+/*
+ * wfqueue.c
+ *
+ * Userspace RCU library - Queue with Wait-Free Enqueue/Blocking Dequeue
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#include "urcu/wfqueue.h"
+#include "urcu/static/wfqueue.h"
+
+/*
+ * library wrappers to be used by non-LGPL compatible source code.
+ */
+
+void cds_wfq_node_init(struct cds_wfq_node *node)
+{
+       _cds_wfq_node_init(node);
+}
+
+void cds_wfq_init(struct cds_wfq_queue *q)
+{
+       _cds_wfq_init(q);
+}
+
+void cds_wfq_enqueue(struct cds_wfq_queue *q, struct cds_wfq_node *node)
+{
+       _cds_wfq_enqueue(q, node);
+}
+
+struct cds_wfq_node *__cds_wfq_dequeue_blocking(struct cds_wfq_queue *q)
+{
+       return ___cds_wfq_dequeue_blocking(q);
+}
+
+struct cds_wfq_node *cds_wfq_dequeue_blocking(struct cds_wfq_queue *q)
+{
+       return _cds_wfq_dequeue_blocking(q);
+}
diff --git a/wfstack.c b/wfstack.c
new file mode 100644 (file)
index 0000000..d999a5b
--- /dev/null
+++ b/wfstack.c
@@ -0,0 +1,54 @@
+/*
+ * wfstack.c
+ *
+ * Userspace RCU library - Stack with Wait-Free push, Blocking pop.
+ *
+ * Copyright 2010 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
+#include "urcu/wfstack.h"
+#include "urcu/static/wfstack.h"
+
+/*
+ * library wrappers to be used by non-LGPL compatible source code.
+ */
+
+void cds_wfs_node_init(struct cds_wfs_node *node)
+{
+       _cds_wfs_node_init(node);
+}
+
+void cds_wfs_init(struct cds_wfs_stack *s)
+{
+       _cds_wfs_init(s);
+}
+
+void cds_wfs_push(struct cds_wfs_stack *s, struct cds_wfs_node *node)
+{
+       _cds_wfs_push(s, node);
+}
+
+struct cds_wfs_node *__cds_wfs_pop_blocking(struct cds_wfs_stack *s)
+{
+       return ___cds_wfs_pop_blocking(s);
+}
+
+struct cds_wfs_node *cds_wfs_pop_blocking(struct cds_wfs_stack *s)
+{
+       return _cds_wfs_pop_blocking(s);
+}
This page took 5.416895 seconds and 4 git commands to generate.